diff --git a/Ch2/.ipynb_checkpoints/Exercises-checkpoint.ipynb b/Ch2/.ipynb_checkpoints/Exercises-checkpoint.ipynb new file mode 100644 index 000000000..cf79bb172 --- /dev/null +++ b/Ch2/.ipynb_checkpoints/Exercises-checkpoint.ipynb @@ -0,0 +1,1689 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import os\n", + "import urllib\n", + "import tarfile\n", + "from sklearn.model_selection import StratifiedShuffleSplit as SSS\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.preprocessing import OneHotEncoder, StandardScaler\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.svm import SVR\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from sklearn.metrics import mean_squared_error\n", + "from sklearn.model_selection import GridSearchCV, RandomizedSearchCV\n", + "import joblib\n", + "from scipy.stats import expon, reciprocal" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "DOWNLOAD_ROOT = \"https://raw.githubusercontent.com/ageron/handson-ml2/master/\"\n", + "HOUSING_PATH = os.path.join(\"datasets\", \"housing\")\n", + "HOUSING_URL = DOWNLOAD_ROOT + \"datasets/housing/housing.tgz\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):\n", + " os.makedirs(housing_path, exist_ok = True) # Create directory if not already there\n", + " tgz_path = os.path.join(housing_path, 'housing.tgz') # Make path for our tgz file\n", + " urllib.request.urlretrieve(housing_url, tgz_path) # Download the file\n", + " housing_tgz = tarfile.open(tgz_path) # Open the file\n", + " housing_tgz.extractall(path=housing_path) # Extract from tarfile\n", + " housing_tgz.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "fetch_housing_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def load_housing_data(housing_path=HOUSING_PATH):\n", + " csv_path = os.path.join(housing_path, 'housing.csv')\n", + " return pd.read_csv(csv_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
longitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_valueocean_proximity
0-122.2337.8841.0880.0129.0322.0126.08.3252452600.0NEAR BAY
1-122.2237.8621.07099.01106.02401.01138.08.3014358500.0NEAR BAY
2-122.2437.8552.01467.0190.0496.0177.07.2574352100.0NEAR BAY
3-122.2537.8552.01274.0235.0558.0219.05.6431341300.0NEAR BAY
4-122.2537.8552.01627.0280.0565.0259.03.8462342200.0NEAR BAY
\n", + "
" + ], + "text/plain": [ + " longitude latitude housing_median_age total_rooms total_bedrooms \\\n", + "0 -122.23 37.88 41.0 880.0 129.0 \n", + "1 -122.22 37.86 21.0 7099.0 1106.0 \n", + "2 -122.24 37.85 52.0 1467.0 190.0 \n", + "3 -122.25 37.85 52.0 1274.0 235.0 \n", + "4 -122.25 37.85 52.0 1627.0 280.0 \n", + "\n", + " population households median_income median_house_value ocean_proximity \n", + "0 322.0 126.0 8.3252 452600.0 NEAR BAY \n", + "1 2401.0 1138.0 8.3014 358500.0 NEAR BAY \n", + "2 496.0 177.0 7.2574 352100.0 NEAR BAY \n", + "3 558.0 219.0 5.6431 341300.0 NEAR BAY \n", + "4 565.0 259.0 3.8462 342200.0 NEAR BAY " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing = load_housing_data()\n", + "housing.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# Now we want to do some stratified sampling based on median_income which seems to be fairly important\n", + "\n", + "housing['income_cat'] = pd.cut(housing['median_income'], # Chopping up median income because it's important\n", + " bins=[0., 1.5, 3.0, 4.5, 6., np.inf], # Chop into categories of 0 to 1.5, 1.5 to 3, etc\n", + " labels=[1,2,3,4,5]) # Generic labels\n", + "\n", + "split = SSS(n_splits=1, test_size=0.2, random_state=42) # Initialize our split with proper test size/random state to match book\n", + "for train_index, test_index in split.split(housing, housing['income_cat']):\n", + " strat_train_set = housing.loc[train_index]\n", + " strat_test_set = housing.loc[test_index]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# Now that we finished with our income_cat feature we can drop it\n", + "\n", + "for set_ in (strat_train_set, strat_test_set):\n", + " set_.drop('income_cat', axis=1, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "housing = strat_train_set.drop('median_house_value', axis=1)\n", + "housing_labels = strat_train_set['median_house_value'].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.base import BaseEstimator, TransformerMixin\n", + "\n", + "# column index\n", + "rooms_ix, bedrooms_ix, population_ix, households_ix = 3, 4, 5, 6\n", + "\n", + "class CombinedAttributesAdder(BaseEstimator, TransformerMixin):\n", + " def __init__(self, add_bedrooms_per_room = True): # no *args or **kargs\n", + " self.add_bedrooms_per_room = add_bedrooms_per_room\n", + " def fit(self, X, y=None):\n", + " return self # nothing else to do\n", + " def transform(self, X):\n", + " rooms_per_household = X[:, rooms_ix] / X[:, households_ix]\n", + " population_per_household = X[:, population_ix] / X[:, households_ix]\n", + " if self.add_bedrooms_per_room:\n", + " bedrooms_per_room = X[:, bedrooms_ix] / X[:, rooms_ix]\n", + " return np.c_[X, rooms_per_household, population_per_household,\n", + " bedrooms_per_room]\n", + " else:\n", + " return np.c_[X, rooms_per_household, population_per_household]\n", + "\n", + "attr_adder = CombinedAttributesAdder(add_bedrooms_per_room=False)\n", + "housing_extra_attribs = attr_adder.transform(housing.values)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# Setup a pipeline to do all we've done already for numerical features\n", + "# Note that all estimators but the last must be transformers(specifically they must have a\n", + "# fit_transform() method)\n", + "\n", + "num_pipeline = Pipeline([\n", + " ('imputer', SimpleImputer(strategy='median')),\n", + " ('attribs_adder', CombinedAttributesAdder()), \n", + " ('std_scaler', StandardScaler())\n", + "]) " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "housing_num = housing.drop('ocean_proximity', axis=1) # Drop non numerical feature for imputation\n", + "housing_cat = housing[['ocean_proximity']] # doubles brackets to get a dataframe instead of a series" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# Our previous pipeline applies to all columns in a dataframe. To deal with both our categorical and\n", + "# numerical features at once we use ColumnTransformer to perform our pipeline only on numerical features\n", + "# and OneHotEncoder only on categorical features\n", + "\n", + "num_attribs = list(housing_num)\n", + "cat_attribs = ['ocean_proximity']\n", + "\n", + "full_pipeline = ColumnTransformer([\n", + " ('num', num_pipeline, num_attribs), \n", + " ('cat', OneHotEncoder(), cat_attribs)\n", + "])\n", + "\n", + "housing_prepared = full_pipeline.fit_transform(housing)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise One**\n", + "\n", + "Try with an SVM!" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\tsb\\appdata\\local\\programs\\python\\python37\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n", + " \"avoid this warning.\", FutureWarning)\n" + ] + }, + { + "data": { + "text/plain": [ + "SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1,\n", + " gamma='auto_deprecated', kernel='rbf', max_iter=-1, shrinking=True,\n", + " tol=0.001, verbose=False)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Simple Support Vector Machine\n", + "\n", + "SVR_model = SVR()\n", + "SVR_model.fit(housing_prepared, housing_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "118577.43356412371" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SVR_pred = SVR_model.predict(housing_prepared)\n", + "SVR_mse = mean_squared_error(SVR_pred, housing_labels)\n", + "SVR_rmse = np.sqrt (SVR_mse)\n", + "SVR_rmse" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 5 folds for each of 72 candidates, totalling 360 fits\n", + "[CV] C=10.0, gamma=0.01, kernel=linear ...............................\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] ................ C=10.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=linear ...............................\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=1)]: Done 1 out of 1 | elapsed: 6.1s remaining: 0.0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] ................ C=10.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=10.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.03, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=10.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.03, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.03, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.1, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.1, kernel=rbf, total= 7.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.1, kernel=rbf, total= 7.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.1, kernel=rbf, total= 7.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.1, kernel=rbf, total= 7.2s\n", + "[CV] C=10.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.1, kernel=rbf, total= 7.7s\n", + "[CV] C=10.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=10.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=10.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=10.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=10.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.3, kernel=rbf, total= 7.2s\n", + "[CV] C=10.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=10.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=10.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=10.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=10.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=10.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=3.0, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=10.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=10.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=10.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=10.0, gamma=3.0, kernel=rbf ...................................\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] .................... C=10.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=30.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.01, kernel=linear, total= 4.2s\n", + "[CV] C=30.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=30.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=30.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=30.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=30.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=30.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.03, kernel=rbf, total= 7.4s\n", + "[CV] C=30.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=30.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.03, kernel=rbf, total= 7.6s\n", + "[CV] C=30.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=30.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.03, kernel=rbf, total= 7.4s\n", + "[CV] C=30.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.1, kernel=linear, total= 4.2s\n", + "[CV] C=30.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.1, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.1, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.1, kernel=rbf, total= 7.2s\n", + "[CV] C=30.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.1, kernel=rbf, total= 7.3s\n", + "[CV] C=30.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.1, kernel=rbf, total= 7.2s\n", + "[CV] C=30.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.1, kernel=rbf, total= 7.3s\n", + "[CV] C=30.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.1, kernel=rbf, total= 7.2s\n", + "[CV] C=30.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.3, kernel=linear, total= 4.2s\n", + "[CV] C=30.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=30.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=30.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=30.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=30.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=30.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=1.0, kernel=linear, total= 4.2s\n", + "[CV] C=30.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=1.0, kernel=linear, total= 4.2s\n", + "[CV] C=30.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=30.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=30.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=30.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=30.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=1.0, kernel=rbf, total= 7.0s\n", + "[CV] C=30.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=3.0, kernel=linear, total= 4.5s\n", + "[CV] C=30.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=30.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=30.0, gamma=3.0, kernel=rbf ...................................\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] .................... C=30.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=30.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=30.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=100.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.01, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=100.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.01, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=100.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=100.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=100.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=100.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=100.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.03, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.03, kernel=rbf, total= 7.2s\n", + "[CV] C=100.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=100.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.03, kernel=rbf, total= 7.2s\n", + "[CV] C=100.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=100.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.03, kernel=rbf, total= 7.2s\n", + "[CV] C=100.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.1, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.1, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.1, kernel=rbf, total= 7.1s\n", + "[CV] C=100.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.1, kernel=rbf, total= 7.1s\n", + "[CV] C=100.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.1, kernel=rbf, total= 7.1s\n", + "[CV] C=100.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.1, kernel=rbf, total= 7.1s\n", + "[CV] C=100.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.1, kernel=rbf, total= 7.1s\n", + "[CV] C=100.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=100.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.3, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=100.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.3, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.3, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=100.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=100.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=100.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=100.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=100.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=1.0, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=100.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=100.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=100.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=100.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=100.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=100.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=3.0, kernel=rbf ..................................\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] ................... C=100.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=100.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=100.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=100.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=100.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=300.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.01, kernel=rbf, total= 7.2s\n", + "[CV] C=300.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=300.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.01, kernel=rbf, total= 7.2s\n", + "[CV] C=300.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=300.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.01, kernel=rbf, total= 7.2s\n", + "[CV] C=300.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.03, kernel=rbf, total= 7.1s\n", + "[CV] C=300.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.03, kernel=rbf, total= 7.0s\n", + "[CV] C=300.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.03, kernel=rbf, total= 7.0s\n", + "[CV] C=300.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.03, kernel=rbf, total= 7.1s\n", + "[CV] C=300.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.03, kernel=rbf, total= 7.0s\n", + "[CV] C=300.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.1, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.1, kernel=rbf, total= 7.0s\n", + "[CV] C=300.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.1, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.1, kernel=rbf, total= 7.0s\n", + "[CV] C=300.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.1, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.1, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.3, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.3, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=300.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.3, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.3, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=300.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=300.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=3.0, kernel=linear ...............................\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] ................ C=300.0, gamma=3.0, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=300.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=300.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=300.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=300.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=1000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=1000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.01, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.01, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.01, kernel=linear, total= 4.6s\n", + "[CV] C=1000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=1000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.01, kernel=rbf, total= 7.0s\n", + "[CV] C=1000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.01, kernel=rbf, total= 7.0s\n", + "[CV] C=1000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.01, kernel=rbf, total= 7.0s\n", + "[CV] C=1000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.01, kernel=rbf, total= 7.0s\n", + "[CV] C=1000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.01, kernel=rbf, total= 7.0s\n", + "[CV] C=1000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.03, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.03, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.03, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.03, kernel=linear, total= 4.6s\n", + "[CV] C=1000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=1000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.03, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.03, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.03, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.03, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.03, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.1, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.1, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.1, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.1, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.1, kernel=linear, total= 4.4s\n", + "[CV] C=1000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.1, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.1, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.1, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.1, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.1, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.3, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.3, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.3, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.3, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.3, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=1000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=1.0, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=1.0, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=1.0, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=1.0, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=3.0, kernel=linear, total= 4.4s\n", + "[CV] C=1000.0, gamma=3.0, kernel=linear ..............................\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] ............... C=1000.0, gamma=3.0, kernel=linear, total= 4.6s\n", + "[CV] C=1000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=3.0, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=3.0, kernel=linear, total= 4.6s\n", + "[CV] C=1000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=3.0, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=1000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=1000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=1000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=1000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=3000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.01, kernel=linear, total= 5.3s\n", + "[CV] C=3000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.01, kernel=linear, total= 5.0s\n", + "[CV] C=3000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.01, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.01, kernel=linear, total= 5.1s\n", + "[CV] C=3000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.01, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.01, kernel=rbf, total= 7.1s\n", + "[CV] C=3000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.01, kernel=rbf, total= 6.9s\n", + "[CV] C=3000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=3000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.01, kernel=rbf, total= 8.1s\n", + "[CV] C=3000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.01, kernel=rbf, total= 7.7s\n", + "[CV] C=3000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.03, kernel=linear, total= 5.1s\n", + "[CV] C=3000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.03, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.03, kernel=linear, total= 5.0s\n", + "[CV] C=3000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.03, kernel=linear, total= 5.1s\n", + "[CV] C=3000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.03, kernel=linear, total= 5.2s\n", + "[CV] C=3000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.03, kernel=rbf, total= 8.0s\n", + "[CV] C=3000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.03, kernel=rbf, total= 7.8s\n", + "[CV] C=3000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=3000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.03, kernel=rbf, total= 7.1s\n", + "[CV] C=3000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.03, kernel=rbf, total= 7.5s\n", + "[CV] C=3000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.1, kernel=linear, total= 5.1s\n", + "[CV] C=3000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.1, kernel=linear, total= 4.7s\n", + "[CV] C=3000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.1, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.1, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.1, kernel=linear, total= 4.7s\n", + "[CV] C=3000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.1, kernel=rbf, total= 6.9s\n", + "[CV] C=3000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.1, kernel=rbf, total= 7.2s\n", + "[CV] C=3000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.1, kernel=rbf, total= 7.6s\n", + "[CV] C=3000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.1, kernel=rbf, total= 7.2s\n", + "[CV] C=3000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.1, kernel=rbf, total= 7.0s\n", + "[CV] C=3000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.3, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.3, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.3, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.3, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.3, kernel=linear, total= 4.7s\n", + "[CV] C=3000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=3000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=3000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=3000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=3000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=3000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=1.0, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=1.0, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=1.0, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=1.0, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=1.0, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=3000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=3000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=3000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=3000.0, gamma=1.0, kernel=rbf .................................\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] .................. C=3000.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=3000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=3.0, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=3.0, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=3.0, kernel=linear, total= 5.0s\n", + "[CV] C=3000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=3.0, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=3.0, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=3000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=3.0, kernel=rbf, total= 7.8s\n", + "[CV] C=3000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=3000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=3000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=3.0, kernel=rbf, total= 7.7s\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=1)]: Done 360 out of 360 | elapsed: 51.4min finished\n" + ] + }, + { + "data": { + "text/plain": [ + "GridSearchCV(cv=5, error_score='raise-deprecating',\n", + " estimator=SVR(C=1.0, cache_size=200, coef0=0.0, degree=3,\n", + " epsilon=0.1, gamma='auto_deprecated', kernel='rbf',\n", + " max_iter=-1, shrinking=True, tol=0.001,\n", + " verbose=False),\n", + " iid='warn', n_jobs=None,\n", + " param_grid=[{'C': [10.0, 30.0, 100.0, 300.0, 1000.0, 3000.0],\n", + " 'gamma': [0.01, 0.03, 0.1, 0.3, 1.0, 3.0],\n", + " 'kernel': ['linear', 'rbf']}],\n", + " pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n", + " scoring='neg_mean_squared_error', verbose=2)" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Our rmse was terrible, worse than either linear regression or random forests\n", + "# Lets try to fine tune our hyper parameters\n", + "\n", + "param_grid = [\n", + " {'kernel': ['linear', 'rbf'], 'C': [10., 30., 100., 300., 1000., 3000.],\n", + " 'gamma': [0.01, 0.03, 0.1, 0.3, 1.0, 3.0]}\n", + "]\n", + "\n", + "SVR_model = SVR()\n", + "\n", + "grid_search = GridSearchCV(SVR_model, param_grid, cv=5,\n", + " scoring='neg_mean_squared_error',\n", + " return_train_score=True, \n", + " verbose=2, \n", + " n_jobs=-1)\n", + "\n", + "grid_search.fit(housing_prepared, housing_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'grid_search' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mgrid_search\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbest_params_\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'grid_search' is not defined" + ] + } + ], + "source": [ + "grid_search.best_params_" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grid_search.best_estimator_" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4237489445.3787646\n", + "65096.0017618499\n" + ] + } + ], + "source": [ + "neg_mse = grid_search.best_score_\n", + "mse = -neg_mse\n", + "rmse = np.sqrt(mse)\n", + "print(mse)\n", + "print(rmse)" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['models/SVR_model.pkl']" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Still not great, but much better than before\n", + "\n", + "SVR_model = grid_search.best_estimator_\n", + "joblib.dump(SVR_model, 'models/SVR_model.pkl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise 2**\n", + "\n", + "Replace Grid Search with a Random Search" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 5 folds for each of 5 candidates, totalling 25 fits\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n", + "[Parallel(n_jobs=-1)]: Done 23 out of 25 | elapsed: 2.6min remaining: 13.7s\n", + "[Parallel(n_jobs=-1)]: Done 25 out of 25 | elapsed: 2.7min finished\n" + ] + }, + { + "data": { + "text/plain": [ + "RandomizedSearchCV(cv=5, error_score='raise-deprecating',\n", + " estimator=SVR(C=1.0, cache_size=200, coef0=0.0, degree=3,\n", + " epsilon=0.1, gamma='auto_deprecated',\n", + " kernel='rbf', max_iter=-1, shrinking=True,\n", + " tol=0.001, verbose=False),\n", + " iid='warn', n_iter=5, n_jobs=-1,\n", + " param_distributions={'C': ,\n", + " 'gamma': ,\n", + " 'kernel': ['linear', 'rbf']},\n", + " pre_dispatch='2*n_jobs', random_state=None, refit=True,\n", + " return_train_score=False, scoring='neg_mean_squared_error',\n", + " verbose=2)" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "param_distributions = {\n", + " 'kernel': ['linear', 'rbf'], \n", + " 'C': reciprocal(20,200000),\n", + " 'gamma': expon(scale=1.0)\n", + "}\n", + "\n", + "\n", + "SVR_model = SVR()\n", + "\n", + "rnd_search = RandomizedSearchCV(SVR_model, \n", + " param_distributions=param_distributions, \n", + " n_iter=50,\n", + " cv=5,\n", + " scoring='neg_mean_squared_error',\n", + " verbose=2, \n", + " n_jobs=-1, \n", + " )\n", + "\n", + "rnd_search.fit(housing_prepared, housing_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3776176391.944553\n", + "61450.601233385445\n" + ] + } + ], + "source": [ + "neg_mse = rnd_search.best_score_\n", + "mse = -neg_mse\n", + "rmse = np.sqrt(mse)\n", + "print(mse)\n", + "print(rmse) # Even better than the grid search!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "SVR_model = rnd_search.best_estimator_\n", + "joblib.dump(SVR_model, 'models/SVR_tuned_model.pkl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise 3**\n", + "\n", + "Add transformer to preperation pipeline which chooses only most important attributes" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\tsb\\appdata\\local\\programs\\python\\python37\\lib\\site-packages\\sklearn\\ensemble\\forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n", + " \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n" + ] + } + ], + "source": [ + "# Have to find feature importances somehow, so we create a random forest model and inspect that\n", + "\n", + "forest_reg = RandomForestRegressor()\n", + "forest_reg.fit(housing_prepared, housing_labels)\n", + "feature_importances = forest_reg.feature_importances_" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.base import BaseEstimator, TransformerMixin\n", + "\n", + "def indices_of_top_k(arr, k):\n", + " return np.sort(np.argpartition(np.array(arr), -k)[-k:])\n", + "\n", + "class TopFeatureSelector(BaseEstimator, TransformerMixin):\n", + " def __init__(self, feature_importances, k): # Need our array of feature importance rankings and the number we'd like to keep\n", + " self.feature_importances = feature_importances\n", + " self.k = k\n", + " def fit(self, X, y=None):\n", + " self.feature_indices_ = indices_of_top_k(self.feature_importances, self.k)\n", + " return self\n", + " def transform(self, X):\n", + " return X[:, self.feature_indices_]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "k=5" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-1.15604281, 0.77194962, -0.61493744, -0.08649871, 0. ],\n", + " [-1.17602483, 0.6596948 , 1.33645936, -0.03353391, 0. ],\n", + " [ 1.18684903, -1.34218285, -0.5320456 , -0.09240499, 0. ],\n", + " ...,\n", + " [ 1.58648943, -0.72478134, -0.3167053 , -0.03055414, 1. ],\n", + " [ 0.78221312, -0.85106801, 0.09812139, 0.06150916, 0. ],\n", + " [-1.43579109, 0.99645926, -0.15779865, -0.09586294, 0. ]])" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check that it's working\n", + "\n", + "selector = TopFeatureSelector(feature_importances, k)\n", + "selector.fit(housing_prepared)\n", + "selector.transform(housing_prepared)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "prep_and_select_pipeline = Pipeline([\n", + " ('preperation', full_pipeline),\n", + " ('feature_selection', TopFeatureSelector(feature_importances, k))\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "housing_prepared_top_features = prep_and_select_pipeline.fit_transform(housing)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-1.15604281, 0.77194962, -0.61493744, -0.08649871, 0. ],\n", + " [-1.17602483, 0.6596948 , 1.33645936, -0.03353391, 0. ],\n", + " [ 1.18684903, -1.34218285, -0.5320456 , -0.09240499, 0. ],\n", + " [-0.01706767, 0.31357576, -1.04556555, 0.08973561, 1. ],\n", + " [ 0.49247384, -0.65929936, -0.44143679, -0.00419445, 0. ]])" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing_prepared_top_features[0:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise 4**\n", + "\n", + "Create pipeline for data prep and prediction" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "prep_select_and_predict_pipeline = Pipeline([\n", + " ('preperation', full_pipeline),\n", + " ('feature_selection', TopFeatureSelector(feature_importances, k)),\n", + " ('svm_reg', SVR(**rnd_search.best_params_))\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Pipeline(memory=None,\n", + " steps=[('preperation',\n", + " ColumnTransformer(n_jobs=None, remainder='drop',\n", + " sparse_threshold=0.3,\n", + " transformer_weights=None,\n", + " transformers=[('num',\n", + " Pipeline(memory=None,\n", + " steps=[('imputer',\n", + " SimpleImputer(add_indicator=False,\n", + " copy=True,\n", + " fill_value=None,\n", + " missing_values=nan,\n", + " strategy='median',\n", + " verbose=0)),\n", + " ('attribs_adder',\n", + " CombinedAttributesAdder(add_...\n", + " 1.19018202e-02, 1.24288759e-02, 1.26283374e-02, 4.73852096e-01,\n", + " 2.78258192e-02, 1.23789304e-01, 2.39439353e-02, 1.04137251e-03,\n", + " 1.38398964e-01, 1.33131544e-04, 7.89651465e-04, 2.16944520e-03]),\n", + " k=5)),\n", + " ('svm_reg',\n", + " SVR(C=24167.809457504085, cache_size=200, coef0=0.0, degree=3,\n", + " epsilon=0.1, gamma=0.6260828385112527, kernel='rbf',\n", + " max_iter=-1, shrinking=True, tol=0.001, verbose=False))],\n", + " verbose=False)" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "prep_select_and_predict_pipeline.fit(housing, housing_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([199258.41244986, 357693.77258301, 170734.84525309, 46270.46533462])" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "prep_select_and_predict_pipeline.predict(housing.iloc[:4])" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "17606 286600.0\n", + "18632 340600.0\n", + "14650 196900.0\n", + "3230 46300.0\n", + "Name: median_house_value, dtype: float64" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing_labels.iloc[:4]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ch2/.ipynb_checkpoints/Housing-checkpoint.ipynb b/Ch2/.ipynb_checkpoints/Housing-checkpoint.ipynb new file mode 100644 index 000000000..61b5bb10e --- /dev/null +++ b/Ch2/.ipynb_checkpoints/Housing-checkpoint.ipynb @@ -0,0 +1,1715 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import tarfile\n", + "import urllib\n", + "import numpy as np\n", + "import pandas as pd\n", + "import joblib\n", + "from pandas.plotting import scatter_matrix\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV\n", + "from sklearn.model_selection import StratifiedShuffleSplit as SSS\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.preprocessing import OneHotEncoder, StandardScaler\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.metrics import mean_squared_error\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from scipy import stats" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "DOWNLOAD_ROOT = \"https://raw.githubusercontent.com/ageron/handson-ml2/master/\"\n", + "HOUSING_PATH = os.path.join(\"datasets\", \"housing\")\n", + "HOUSING_URL = DOWNLOAD_ROOT + \"datasets/housing/housing.tgz\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):\n", + " os.makedirs(housing_path, exist_ok = True) # Create directory if not already there\n", + " tgz_path = os.path.join(housing_path, 'housing.tgz') # Make path for our tgz file\n", + " urllib.request.urlretrieve(housing_url, tgz_path) # Download the file\n", + " housing_tgz = tarfile.open(tgz_path) # Open the file\n", + " housing_tgz.extractall(path=housing_path) # Extract from tarfile\n", + " housing_tgz.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "fetch_housing_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def load_housing_data(housing_path=HOUSING_PATH):\n", + " csv_path = os.path.join(housing_path, 'housing.csv')\n", + " return pd.read_csv(csv_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
longitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_valueocean_proximity
0-122.2337.8841.0880.0129.0322.0126.08.3252452600.0NEAR BAY
1-122.2237.8621.07099.01106.02401.01138.08.3014358500.0NEAR BAY
2-122.2437.8552.01467.0190.0496.0177.07.2574352100.0NEAR BAY
3-122.2537.8552.01274.0235.0558.0219.05.6431341300.0NEAR BAY
4-122.2537.8552.01627.0280.0565.0259.03.8462342200.0NEAR BAY
\n", + "
" + ], + "text/plain": [ + " longitude latitude housing_median_age total_rooms total_bedrooms \\\n", + "0 -122.23 37.88 41.0 880.0 129.0 \n", + "1 -122.22 37.86 21.0 7099.0 1106.0 \n", + "2 -122.24 37.85 52.0 1467.0 190.0 \n", + "3 -122.25 37.85 52.0 1274.0 235.0 \n", + "4 -122.25 37.85 52.0 1627.0 280.0 \n", + "\n", + " population households median_income median_house_value ocean_proximity \n", + "0 322.0 126.0 8.3252 452600.0 NEAR BAY \n", + "1 2401.0 1138.0 8.3014 358500.0 NEAR BAY \n", + "2 496.0 177.0 7.2574 352100.0 NEAR BAY \n", + "3 558.0 219.0 5.6431 341300.0 NEAR BAY \n", + "4 565.0 259.0 3.8462 342200.0 NEAR BAY " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing = load_housing_data()\n", + "housing.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 20640 entries, 0 to 20639\n", + "Data columns (total 10 columns):\n", + "longitude 20640 non-null float64\n", + "latitude 20640 non-null float64\n", + "housing_median_age 20640 non-null float64\n", + "total_rooms 20640 non-null float64\n", + "total_bedrooms 20433 non-null float64\n", + "population 20640 non-null float64\n", + "households 20640 non-null float64\n", + "median_income 20640 non-null float64\n", + "median_house_value 20640 non-null float64\n", + "ocean_proximity 20640 non-null object\n", + "dtypes: float64(9), object(1)\n", + "memory usage: 1.6+ MB\n" + ] + } + ], + "source": [ + "housing.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<1H OCEAN 9136\n", + "INLAND 6551\n", + "NEAR OCEAN 2658\n", + "NEAR BAY 2290\n", + "ISLAND 5\n", + "Name: ocean_proximity, dtype: int64" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# We can see that ocean_proximity is the only non numerical feature\n", + "# We use value_counts to look at what the categories consist of\n", + "\n", + "housing['ocean_proximity'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
longitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_value
count20640.00000020640.00000020640.00000020640.00000020433.00000020640.00000020640.00000020640.00000020640.000000
mean-119.56970435.63186128.6394862635.763081537.8705531425.476744499.5396803.870671206855.816909
std2.0035322.13595212.5855582181.615252421.3850701132.462122382.3297531.899822115395.615874
min-124.35000032.5400001.0000002.0000001.0000003.0000001.0000000.49990014999.000000
25%-121.80000033.93000018.0000001447.750000296.000000787.000000280.0000002.563400119600.000000
50%-118.49000034.26000029.0000002127.000000435.0000001166.000000409.0000003.534800179700.000000
75%-118.01000037.71000037.0000003148.000000647.0000001725.000000605.0000004.743250264725.000000
max-114.31000041.95000052.00000039320.0000006445.00000035682.0000006082.00000015.000100500001.000000
\n", + "
" + ], + "text/plain": [ + " longitude latitude housing_median_age total_rooms \\\n", + "count 20640.000000 20640.000000 20640.000000 20640.000000 \n", + "mean -119.569704 35.631861 28.639486 2635.763081 \n", + "std 2.003532 2.135952 12.585558 2181.615252 \n", + "min -124.350000 32.540000 1.000000 2.000000 \n", + "25% -121.800000 33.930000 18.000000 1447.750000 \n", + "50% -118.490000 34.260000 29.000000 2127.000000 \n", + "75% -118.010000 37.710000 37.000000 3148.000000 \n", + "max -114.310000 41.950000 52.000000 39320.000000 \n", + "\n", + " total_bedrooms population households median_income \\\n", + "count 20433.000000 20640.000000 20640.000000 20640.000000 \n", + "mean 537.870553 1425.476744 499.539680 3.870671 \n", + "std 421.385070 1132.462122 382.329753 1.899822 \n", + "min 1.000000 3.000000 1.000000 0.499900 \n", + "25% 296.000000 787.000000 280.000000 2.563400 \n", + "50% 435.000000 1166.000000 409.000000 3.534800 \n", + "75% 647.000000 1725.000000 605.000000 4.743250 \n", + "max 6445.000000 35682.000000 6082.000000 15.000100 \n", + "\n", + " median_house_value \n", + "count 20640.000000 \n", + "mean 206855.816909 \n", + "std 115395.615874 \n", + "min 14999.000000 \n", + "25% 119600.000000 \n", + "50% 179700.000000 \n", + "75% 264725.000000 \n", + "max 500001.000000 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Plot histograms for all the features\n", + "\n", + "housing.hist(bins=50, figsize=(20,15))\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that most features are left scewed (tail-heavy) or multi-modal. Not the most ideal distributions of data. Also worth noting is that the median_income data is not in USD and seems to be scaled from 0 to 15. If we look back at the max and min of the data we find that it is scaled to be from 0.4999 to 15.0001. Similarly the median age and median house values are capped (as seen by the sharp jump at the end). It might be nice to transform the data to be more uniform." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAD4CAYAAAAAczaOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAYO0lEQVR4nO3df4zc9X3n8ecrGALHprYp6Z5l+85IsXIl8YXYK+MKKZrFPWOgwkgHkiMurJErX1u3TXU+FVOJc8sP1dWFpoW29PZqKyZxsrHccPYZEs5n2Kv4AwJOKAtxOG+Ij/jHea9Zs+kGN5Vz7/tjPnsZltn59d2ZHfN5PaTVzPfz/Xzn+/5+ZvY13/nOd2YUEZiZWR4+MNcFmJlZ5zj0zcwy4tA3M8uIQ9/MLCMOfTOzjMyb6wJqufrqq2PZsmUtL//jH/+YK6+8cvYKmiWuqzmuqzmuqznvx7qOHj36dxHx4aozI6Jr/1atWhVFPPfcc4WWbxfX1RzX1RzX1Zz3Y13AyzFDrvrwjplZRhz6ZmYZceibmWXEoW9mlhGHvplZRhz6ZmYZceibmWXEoW9mlhGHvplZRrr6axjMutnIqQk2bX+q4+s9sfPWjq/T3j+8p29mlhGHvplZRuqGvqSPSnql4u9Hkn5H0lWSDks6ni4Xpv6S9KikUUmvSlpZcVsDqf9xSQPt3DAzM3uvuqEfEW9ExHURcR2wCngHeBLYDhyJiOXAkTQNcDOwPP1tAR4HkHQVsAO4HlgN7Jh6ojAzs85o9vDOWuB7EfG/gA3AntS+B7g9Xd8APJG+4fMFYIGkRcBNwOGIGI+Ic8BhYH3hLTAzs4ap/NXLDXaWdgPfiog/k/R2RCyomHcuIhZKOgTsjIjnU/sR4F6gBFweEQ+l9vuB8xHxuWnr2EL5FQK9vb2rhoaGWt64yclJenp6Wl6+XVxXc7q1rrHxCc6e7/x6VyyeX3N+t46X62pOkbr6+/uPRkRftXkNn7Ip6TLgNuC+el2rtEWN9nc3RAwCgwB9fX1RKpUaLfE9hoeHKbJ8u7iu5nRrXY/tPcAjI50/6/nEXaWa87t1vFxXc9pVVzOHd26mvJd/Nk2fTYdtSJdjqf0ksLRiuSXA6RrtZmbWIc2E/qeBr1RMHwSmzsAZAA5UtN+dzuJZA0xExBngGWCdpIXpDdx1qc3MzDqkodemkv4J8K+Af1vRvBPYJ2kz8BZwZ2p/GrgFGKV8ps89ABExLulB4KXU74GIGC+8BWZm1rCGQj8i3gF+flrbDymfzTO9bwBbZ7id3cDu5ss0M7PZ4E/kmpllxKFvZpYRh76ZWUYc+mZmGXHom5llxKFvZpYR/3LW+8iygr/itG3FhZZ/Ccq/5mR2cfCevplZRhz6ZmYZceibmWXEoW9mlhGHvplZRhz6ZmYZceibmWXEoW9mlhGHvplZRhz6ZmYZceibmWXEoW9mlhGHvplZRhoKfUkLJO2X9F1JxyT9kqSrJB2WdDxdLkx9JelRSaOSXpW0suJ2BlL/45IG2rVRZmZWXaN7+n8KfCMi/gXwCeAYsB04EhHLgSNpGuBmYHn62wI8DiDpKmAHcD2wGtgx9URhZmadUTf0Jf0c8ClgF0BE/GNEvA1sAPakbnuA29P1DcATUfYCsEDSIuAm4HBEjEfEOeAwsH5Wt8bMzGpSRNTuIF0HDALfobyXfxT4LHAqIhZU9DsXEQslHQJ2RsTzqf0IcC9QAi6PiIdS+/3A+Yj43LT1baH8CoHe3t5VQ0NDLW/c5OQkPT09LS/fLu2qa+TURKHle6+As+dbW3bF4vmF1l1Lt96PY+MTLY9XEfXGulvHy3U1p0hd/f39RyOir9q8Rn45ax6wEvitiHhR0p/ys0M51ahKW9Rof3dDxCDlJxn6+vqiVCo1UGJ1w8PDFFm+XdpVV6u/ejVl24oLPDLS2o+pnbirVGjdtXTr/fjY3gMtj1cR9ca6W8fLdTWnXXU1ckz/JHAyIl5M0/spPwmcTYdtSJdjFf2XViy/BDhdo93MzDqkbuhHxP8GfiDpo6lpLeVDPQeBqTNwBoAD6fpB4O50Fs8aYCIizgDPAOskLUxv4K5LbWZm1iGNvjb9LWCvpMuAN4F7KD9h7JO0GXgLuDP1fRq4BRgF3kl9iYhxSQ8CL6V+D0TE+KxshZmZNaSh0I+IV4BqbwqsrdI3gK0z3M5uYHczBZqZ2ezxJ3LNzDLi0Dczy4hD38wsIw59M7OMOPTNzDLi0Dczy4hD38wsIw59M7OMOPTNzDLi0Dczy4hD38wsIw59M7OMOPTNzDLi0Dczy4hD38wsIw59M7OMOPTNzDLi0Dczy4hD38wsIw59M7OMNBT6kk5IGpH0iqSXU9tVkg5LOp4uF6Z2SXpU0qikVyWtrLidgdT/uKSB9mySmZnNpJk9/f6IuC4i+tL0duBIRCwHjqRpgJuB5elvC/A4lJ8kgB3A9cBqYMfUE4WZmXVGkcM7G4A96foe4PaK9iei7AVggaRFwE3A4YgYj4hzwGFgfYH1m5lZkxQR9TtJ3wfOAQH8p4gYlPR2RCyo6HMuIhZKOgTsjIjnU/sR4F6gBFweEQ+l9vuB8xHxuWnr2kL5FQK9vb2rhoaGWt64yclJenp6Wl6+XdpV18ipiULL914BZ8+3tuyKxfMLrbuWbr0fx8YnWh6vIuqNdbeOl+tqTpG6+vv7j1YclXmXeQ3exg0RcVrSLwCHJX23Rl9VaYsa7e9uiBgEBgH6+vqiVCo1WOJ7DQ8PU2T5dmlXXZu2P1Vo+W0rLvDISKMPiXc7cVep0Lpr6db78bG9B1oeryLqjXW3jpfrak676mro8E5EnE6XY8CTlI/Jn02HbUiXY6n7SWBpxeJLgNM12s3MrEPqhr6kKyV9aOo6sA54DTgITJ2BMwAcSNcPAnens3jWABMRcQZ4BlgnaWF6A3ddajMzsw5p5LVpL/CkpKn+X46Ib0h6CdgnaTPwFnBn6v80cAswCrwD3AMQEeOSHgReSv0eiIjxWdsSMzOrq27oR8SbwCeqtP8QWFulPYCtM9zWbmB382Wamdls8Cdyzcwy4tA3M8uIQ9/MLCMOfTOzjDj0zcwy4tA3M8uIQ9/MLCMOfTOzjDj0zcwy4tA3M8uIQ9/MLCMOfTOzjDj0zcwy4tA3M8uIQ9/MLCMOfTOzjDj0zcwy4tA3M8uIQ9/MLCMNh76kSyR9W9KhNH2NpBclHZf0VUmXpfYPpunRNH9ZxW3cl9rfkHTTbG+MmZnV1sye/meBYxXTfwR8PiKWA+eAzal9M3AuIj4CfD71Q9K1wEbgY8B64C8kXVKsfDMza0ZDoS9pCXAr8FdpWsCNwP7UZQ9we7q+IU2T5q9N/TcAQxHxk4j4PjAKrJ6NjTAzs8YoIup3kvYDfwh8CPj3wCbghbQ3j6SlwNcj4uOSXgPWR8TJNO97wPXA76dlvpTad6Vl9k9b1xZgC0Bvb++qoaGhljducnKSnp6elpdvl3bVNXJqotDyvVfA2fOtLbti8fxC666lW+/HsfGJlseriHpj3a3j5bqaU6Su/v7+oxHRV23evHoLS/oVYCwijkoqTTVX6Rp15tVa5mcNEYPAIEBfX1+USqXpXRo2PDxMkeXbpV11bdr+VKHlt624wCMjdR8SVZ24q1Ro3bV06/342N4DLY9XEfXGulvHy3U1p111NfKIvQG4TdItwOXAzwF/AiyQNC8iLgBLgNOp/0lgKXBS0jxgPjBe0T6lchkzM+uAusf0I+K+iFgSEcsovxH7bETcBTwH3JG6DQAH0vWDaZo0/9koH0M6CGxMZ/dcAywHvjlrW2JmZnUVeW16LzAk6SHg28Cu1L4L+KKkUcp7+BsBIuJ1SfuA7wAXgK0R8dMC6zczsyY1FfoRMQwMp+tvUuXsm4j4B+DOGZZ/GHi42SLNzGx2+BO5ZmYZceibmWXEoW9mlhGHvplZRhz6ZmYZ6fzHCc3sorWswKe+t6240PKnxk/svLXl9dq7eU/fzCwjDn0zs4w49M3MMuLQNzPLiEPfzCwjDn0zs4w49M3MMuLQNzPLiEPfzCwjDn0zs4w49M3MMuLQNzPLiEPfzCwjDn0zs4zUDX1Jl0v6pqS/lfS6pD9I7ddIelHScUlflXRZav9gmh5N85dV3NZ9qf0NSTe1a6PMzKy6Rvb0fwLcGBGfAK4D1ktaA/wR8PmIWA6cAzan/puBcxHxEeDzqR+SrgU2Ah8D1gN/IemS2dwYMzOrrW7oR9lkmrw0/QVwI7A/te8Bbk/XN6Rp0vy1kpTahyLiJxHxfWAUWD0rW2FmZg1RRNTvVN4jPwp8BPhz4D8CL6S9eSQtBb4eER+X9BqwPiJOpnnfA64Hfj8t86XUvists3/aurYAWwB6e3tXDQ0Ntbxxk5OT9PT0tLx8u7SrrpFTE4WW770Czp5vbdkVi+cXWnct3Xo/jo1PtDxeRdQb63aOV5HHmB9fzSlSV39//9GI6Ks2r6GfS4yInwLXSVoAPAn8YrVu6VIzzJupffq6BoFBgL6+viiVSo2UWNXw8DBFlm+XdtXV6k/RTdm24gKPjLT2C5on7ioVWnct3Xo/Prb3QMvjVUS9sW7neBV5jPnx1Zx21dXU2TsR8TYwDKwBFkiaugeXAKfT9ZPAUoA0fz4wXtleZRkzM+uARs7e+XDaw0fSFcAvA8eA54A7UrcB4EC6fjBNk+Y/G+VjSAeBjensnmuA5cA3Z2tDzMysvkZeay0C9qTj+h8A9kXEIUnfAYYkPQR8G9iV+u8CvihplPIe/kaAiHhd0j7gO8AFYGs6bGRmZh1SN/Qj4lXgk1Xa36TK2TcR8Q/AnTPc1sPAw82XaWZms8GfyDUzy4hD38wsIw59M7OMOPTNzDLi0Dczy4hD38wsIw59M7OMOPTNzDLi0Dczy4hD38wsIw59M7OMOPTNzDLS+V+AMDO7SCwr+MNERXxh/ZVtuV3v6ZuZZcShb2aWEYe+mVlGHPpmZhlx6JuZZcShb2aWkbqhL2mppOckHZP0uqTPpvarJB2WdDxdLkztkvSopFFJr0paWXFbA6n/cUkD7dssMzOrppE9/QvAtoj4RWANsFXStcB24EhELAeOpGmAm4Hl6W8L8DiUnySAHcD1lH9QfcfUE4WZmXVG3dCPiDMR8a10/e+BY8BiYAOwJ3XbA9yerm8AnoiyF4AFkhYBNwGHI2I8Is4Bh4H1s7o1ZmZWU1PH9CUtAz4JvAj0RsQZKD8xAL+Qui0GflCx2MnUNlO7mZl1iCKisY5SD/A/gIcj4muS3o6IBRXzz0XEQklPAX8YEc+n9iPA7wI3Ah+MiIdS+/3AOxHxyLT1bKF8WIje3t5VQ0NDLW/c5OQkPT09LS/fLu2qa+TURKHle6+As+dbW3bF4vmF1l1Lt96PY+MTLY9XEfXGup3jVeQxdjE+vor+TxVxzfxLWr4f+/v7j0ZEX7V5DX33jqRLgb8G9kbE11LzWUmLIuJMOnwzltpPAksrFl8CnE7tpWntw9PXFRGDwCBAX19flEql6V0aNjw8TJHl26VddW0q+D0h21Zc4JGR1r6O6cRdpULrrqVb78fH9h5oebyKqDfW7RyvIo+xi/HxVfR/qogvrL+yLfdjI2fvCNgFHIuIP66YdRCYOgNnADhQ0X53OotnDTCRDv88A6yTtDC9gbsutZmZWYc08rR7A/AZYETSK6nt94CdwD5Jm4G3gDvTvKeBW4BR4B3gHoCIGJf0IPBS6vdARIzPylaYmVlD6oZ+OjavGWavrdI/gK0z3NZuYHczBZqZ2ezxJ3LNzDLi0Dczy4hD38wsIw59M7OMOPTNzDLi0Dczy4hD38wsIw59M7OMOPTNzDLi0Dczy4hD38wsIw59M7OMOPTNzDLi0Dczy4hD38wsIw59M7OMOPTNzDLi0Dczy4hD38wsIw59M7OM1A19SbsljUl6raLtKkmHJR1PlwtTuyQ9KmlU0quSVlYsM5D6H5c00J7NMTOzWhrZ0/8CsH5a23bgSEQsB46kaYCbgeXpbwvwOJSfJIAdwPXAamDH1BOFmZl1Tt3Qj4i/AcanNW8A9qTre4DbK9qfiLIXgAWSFgE3AYcjYjwizgGHee8TiZmZtZkion4naRlwKCI+nqbfjogFFfPPRcRCSYeAnRHxfGo/AtwLlIDLI+Kh1H4/cD4iPldlXVsov0qgt7d31dDQUMsbNzk5SU9PT8vLt0u76ho5NVFo+d4r4Oz51pZdsXh+oXXX0q3349j4RMvjVUS9sW7neBV5jF2Mj6+i/1NFXDP/kpbvx/7+/qMR0Vdt3rxCVb2XqrRFjfb3NkYMAoMAfX19USqVWi5meHiYIsu3S7vq2rT9qULLb1txgUdGWntInLirVGjdtXTr/fjY3gMtj1cR9ca6neNV5DF2MT6+iv5PFfGF9Ve25X5s9eyds+mwDelyLLWfBJZW9FsCnK7RbmZmHdRq6B8Eps7AGQAOVLTfnc7iWQNMRMQZ4BlgnaSF6Q3cdanNzMw6qO5rLUlfoXxM/mpJJymfhbMT2CdpM/AWcGfq/jRwCzAKvAPcAxAR45IeBF5K/R6IiOlvDpuZWZvVDf2I+PQMs9ZW6RvA1hluZzewu6nqCho5NTEnx+RO7Ly14+s0M2uEP5FrZpYRh76ZWUYc+mZmGXHom5llxKFvZpYRh76ZWUYc+mZmGXHom5llxKFvZpYRh76ZWUYc+mZmGXHom5llxKFvZpYRh76ZWUYc+mZmGXHom5llxKFvZpYRh76ZWUYc+mZmGXHom5llpOOhL2m9pDckjUra3un1m5nlrKOhL+kS4M+Bm4FrgU9LuraTNZiZ5azTe/qrgdGIeDMi/hEYAjZ0uAYzs2wpIjq3MukOYH1E/Gqa/gxwfUT8ZkWfLcCWNPlR4I0Cq7wa+LsCy7eL62qO62qO62rO+7Gufx4RH642Y17r9bREVdre9awTEYPA4KysTHo5Ivpm47Zmk+tqjutqjutqTm51dfrwzklgacX0EuB0h2swM8tWp0P/JWC5pGskXQZsBA52uAYzs2x19PBORFyQ9JvAM8AlwO6IeL2Nq5yVw0Rt4Lqa47qa47qak1VdHX0j18zM5pY/kWtmlhGHvplZRi760Je0W9KYpNdmmC9Jj6avfXhV0souqaskaULSK+nvP3SgpqWSnpN0TNLrkj5bpU/Hx6vBujo+Xmm9l0v6pqS/TbX9QZU+H5T01TRmL0pa1iV1bZL0fyrG7FfbXVda7yWSvi3pUJV5HR+rBuuak7FK6z4haSSt9+Uq82f3fzIiLuo/4FPASuC1GebfAnyd8mcE1gAvdkldJeBQh8dqEbAyXf8Q8D+Ba+d6vBqsq+PjldYroCddvxR4EVgzrc9vAH+Zrm8EvtoldW0C/mwOxuzfAV+udn/NxVg1WNecjFVa9wng6hrzZ/V/8qLf04+IvwHGa3TZADwRZS8ACyQt6oK6Oi4izkTEt9L1vweOAYundev4eDVY15xI4zCZJi9Nf9PPftgA7EnX9wNrJVX7IGKn6+o4SUuAW4G/mqFLx8eqwbq62az+T170od+AxcAPKqZP0iWBAvxSenn+dUkf6+SK08vqT1LeQ6w0p+NVoy6Yo/FKhwVeAcaAwxEx45hFxAVgAvj5LqgL4F+nQwL7JS2tMn+2/Qnwu8D/nWH+nIxVA3VB58dqSgD/TdJRlb+GZrpZ/Z/MIfTrfvXDHPkW5e/H+ATwGPBfOrViST3AXwO/ExE/mj67yiIdGa86dc3ZeEXETyPiOsqfIF8t6ePTuszJmDVQ138FlkXEvwT+Oz/bw24LSb8CjEXE0VrdqrS1dawarKujYzXNDRGxkvK3D2+V9Klp82d1zHII/a786oeI+NHUy/OIeBq4VNLV7V6vpEspB+veiPhalS5zMl716pqr8ZpWw9vAMLB+2qz/P2aS5gHz6eChvZnqiogfRsRP0uR/Bla1uZQbgNsknaD8Dbo3SvrStD5zMVZ165qDsapc9+l0OQY8SfnbiCvN6v9kDqF/ELg7vQO+BpiIiDNzXZSkfzp1LFPSasr3xQ/bvE4Bu4BjEfHHM3Tr+Hg1UtdcjFda14clLUjXrwB+GfjutG4HgYF0/Q7g2UjvwM1lXdOO+95G+b2StomI+yJiSUQso/wm7bMR8W+mdev4WDVSV6fHqmK9V0r60NR1YB0w/Yy/Wf2f7PS3bM46SV+hfGbH1ZJOAjsov6lFRPwl8DTld79HgXeAe7qkrjuAX5d0ATgPbGz3g5/yHs9ngJF0LBjg94B/VlHXXIxXI3XNxXhB+cyiPSr/ANAHgH0RcUjSA8DLEXGQ8hPWFyWNUt5r3dgldf22pNuAC6muTR2o6z26YKwaqWuuxqoXeDLtz8wDvhwR35D0a9Ce/0l/DYOZWUZyOLxjZmaJQ9/MLCMOfTOzjDj0zcwy4tA3M8uIQ9/MLCMOfTOzjPw/F01Za+t3YqUAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "housing['income_cat'] = pd.cut(housing['median_income'], # Chopping up median income because it's important\n", + " bins=[0., 1.5, 3.0, 4.5, 6., np.inf], # Chop into categories of 0 to 1.5, 1.5 to 3, etc\n", + " labels=[1,2,3,4,5]) # Generic labels\n", + "train_set, test_set = train_test_split(housing, test_size=0.2, random_state=42) # Generic train/test split\n", + "housing['income_cat'].hist()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# Now we want to do some stratified sampling based on median_income which seems to be fairly important\n", + "\n", + "split = SSS(n_splits=1, test_size=0.2, random_state=42) # Initialize our split with proper test size/random state to match book\n", + "for train_index, test_index in split.split(housing, housing['income_cat']):\n", + " strat_train_set = housing.loc[train_index]\n", + " strat_test_set = housing.loc[test_index]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def income_cat_proportions(data):\n", + " return data[\"income_cat\"].value_counts() / len(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "# Make a table showing the how a stratified sampling ensures our test set matches our original distribution for median_income\n", + "\n", + "compare_props = pd.DataFrame({\n", + " \"Overall\": income_cat_proportions(housing),\n", + " \"Stratified\": income_cat_proportions(strat_test_set),\n", + " \"Random\": income_cat_proportions(test_set),\n", + "}).sort_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
OverallStratifiedRandom
10.0398260.0397290.040213
20.3188470.3187980.324370
30.3505810.3505330.358527
40.1763080.1763570.167393
50.1144380.1145830.109496
\n", + "
" + ], + "text/plain": [ + " Overall Stratified Random\n", + "1 0.039826 0.039729 0.040213\n", + "2 0.318847 0.318798 0.324370\n", + "3 0.350581 0.350533 0.358527\n", + "4 0.176308 0.176357 0.167393\n", + "5 0.114438 0.114583 0.109496" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "compare_props.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "# Now that we finished with our income_cat feature we can drop it\n", + "\n", + "for set_ in (strat_train_set, strat_test_set):\n", + " set_.drop('income_cat', axis=1, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "# With our test set put aside we can explore the data\n", + "\n", + "housing = strat_train_set.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Simple scatter plot\n", + "\n", + "housing.plot(kind='scatter', x='longitude', y='latitude')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Scatter plot emphasizing denser areas\n", + "\n", + "housing.plot(kind='scatter', x='longitude', y='latitude', alpha=0.1)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "housing.plot(kind='scatter', x='longitude', y='latitude', alpha=0.4, \n", + " s = housing['population'] / 100, # Adjusit size of points to size of population\n", + " label='population', \n", + " figsize=(10,7), \n", + " c = 'median_house_value', # Base color map on median house value\n", + " cmap=plt.get_cmap('jet'), \n", + " colorbar=True)\n", + "plt.legend()\n", + "plt.xlabel=('longitude')" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "median_house_value 1.000000\n", + "median_income 0.687160\n", + "total_rooms 0.135097\n", + "housing_median_age 0.114110\n", + "households 0.064506\n", + "total_bedrooms 0.047689\n", + "population -0.026920\n", + "longitude -0.047432\n", + "latitude -0.142724\n", + "Name: median_house_value, dtype: float64" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check out correlations\n", + "\n", + "corr_matrix = housing.corr()\n", + "corr_matrix['median_house_value'].sort_values(ascending=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see a strong correlation between house value and median income which is to be expected. However, we see almost no correlation geographically even though our heat map earlier suggests a strong corrolation between location and price. This just means the features have a non linear relation." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Grab scatter plots between most promising features to inspect\n", + "\n", + "attributes= ['median_house_value', 'median_income', 'total_rooms', 'housing_median_age']\n", + "scatter_matrix(housing[attributes], figsize=(12,8))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Strongest looking correlation is between median income and median house value so we look more closely at that\n", + "\n", + "housing.plot(kind='scatter', x='median_income', y='median_house_value', alpha=0.1)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see a strong correlation as well as a few oddities. There are some abnormal horizontal lines at 500k, 350k and possible 250k that may have to be dealt with later. Now we can move on to feature creation! Some useful features could be rooms per household (more useful than just the number of rooms), bedrooms per room (proportion of rooms which are actually bedrooms), and people per household." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "housing['rooms_per_household'] = housing['total_rooms'] / housing['households']\n", + "housing['bedrooms_per_room'] = housing['total_bedrooms'] / housing['total_rooms']\n", + "housing['population_per_household'] = housing['population'] / housing['households']" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "median_house_value 1.000000\n", + "median_income 0.687160\n", + "rooms_per_household 0.146285\n", + "total_rooms 0.135097\n", + "housing_median_age 0.114110\n", + "households 0.064506\n", + "total_bedrooms 0.047689\n", + "population_per_household -0.021985\n", + "population -0.026920\n", + "longitude -0.047432\n", + "latitude -0.142724\n", + "bedrooms_per_room -0.259984\n", + "Name: median_house_value, dtype: float64" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corr_matrix = housing.corr()\n", + "corr_matrix['median_house_value'].sort_values(ascending=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now see our artificial features and how correlated they are to the target feature with the most promising being rooms_per_household and bedrooms_per_room with a strong negative correlation. This makes intuitive sense when you consider a 4 bedroom 2.5 bath compared to a 3 bedroom 1 bath. Anothing factor could be extra non bedrooms such as extra living rooms and kitchens driving the price up considerably. With some decent correlations on our features we can move on to preping our data for ML algorithms." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "housing = strat_train_set.drop('median_house_value', axis=1)\n", + "housing_labels = strat_train_set['median_house_value'].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 16512 entries, 17606 to 15775\n", + "Data columns (total 9 columns):\n", + "longitude 16512 non-null float64\n", + "latitude 16512 non-null float64\n", + "housing_median_age 16512 non-null float64\n", + "total_rooms 16512 non-null float64\n", + "total_bedrooms 16354 non-null float64\n", + "population 16512 non-null float64\n", + "households 16512 non-null float64\n", + "median_income 16512 non-null float64\n", + "ocean_proximity 16512 non-null object\n", + "dtypes: float64(8), object(1)\n", + "memory usage: 1.3+ MB\n" + ] + } + ], + "source": [ + "housing.info() # Bring back up to see where we have null values (in total_bedrooms)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# Median imputation using SkLearn\n", + "\n", + "imputer = SimpleImputer(strategy='median')\n", + "housing_num = housing.drop('ocean_proximity', axis=1) # Drop non numerical feature for imputation\n", + "imputer.fit(housing_num) # Computes and stores median values for all features in housing_num which we may need later\n", + "X = imputer.transform(housing_num) # Apply median imputation\n", + "housing_tr = pd.DataFrame(X, columns=housing_num.columns, index=housing_num.index) # Remake our df from our numpy array X\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ocean_proximity
17606<1H OCEAN
18632<1H OCEAN
14650NEAR OCEAN
3230INLAND
3555<1H OCEAN
19480INLAND
8879<1H OCEAN
13685INLAND
4937<1H OCEAN
4861<1H OCEAN
\n", + "
" + ], + "text/plain": [ + " ocean_proximity\n", + "17606 <1H OCEAN\n", + "18632 <1H OCEAN\n", + "14650 NEAR OCEAN\n", + "3230 INLAND\n", + "3555 <1H OCEAN\n", + "19480 INLAND\n", + "8879 <1H OCEAN\n", + "13685 INLAND\n", + "4937 <1H OCEAN\n", + "4861 <1H OCEAN" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check out our categorical feature\n", + "housing_cat = housing[['ocean_proximity']] # doubles brackets to get a dataframe instead of a series\n", + "housing_cat.head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "17606 <1H OCEAN\n", + "18632 <1H OCEAN\n", + "14650 NEAR OCEAN\n", + "3230 INLAND\n", + "3555 <1H OCEAN\n", + " ... \n", + "6563 INLAND\n", + "12053 INLAND\n", + "13908 INLAND\n", + "11159 <1H OCEAN\n", + "15775 NEAR BAY\n", + "Name: ocean_proximity, Length: 16512, dtype: object" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing['ocean_proximity']" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<16512x5 sparse matrix of type ''\n", + "\twith 16512 stored elements in Compressed Sparse Row format>" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cat_encoder = OneHotEncoder()\n", + "housing_cat_1hot = cat_encoder.fit_transform(housing_cat)\n", + "housing_cat_1hot # Note this is stored as a sparse matrix since most of the matrix would be empy anyways" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 0., 0., 0., 0.],\n", + " [1., 0., 0., 0., 0.],\n", + " [0., 0., 0., 0., 1.],\n", + " ...,\n", + " [0., 1., 0., 0., 0.],\n", + " [1., 0., 0., 0., 0.],\n", + " [0., 0., 0., 1., 0.]])" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing_cat_1hot.toarray() # What our matrix looks like" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[array(['<1H OCEAN', 'INLAND', 'ISLAND', 'NEAR BAY', 'NEAR OCEAN'],\n", + " dtype=object)]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cat_encoder.categories_ # List all our categories" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "SkLearn is very useful, but sometimes we need to create our own functions to modify the data. In doing so it is important to stay compatible with SkLearn by creating our own classes with the methods of fit(), transform(), and fit_transform(). Given example:" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.base import BaseEstimator, TransformerMixin\n", + "\n", + "# column index\n", + "rooms_ix, bedrooms_ix, population_ix, households_ix = 3, 4, 5, 6\n", + "\n", + "class CombinedAttributesAdder(BaseEstimator, TransformerMixin):\n", + " def __init__(self, add_bedrooms_per_room = True): # no *args or **kargs\n", + " self.add_bedrooms_per_room = add_bedrooms_per_room\n", + " def fit(self, X, y=None):\n", + " return self # nothing else to do\n", + " def transform(self, X):\n", + " rooms_per_household = X[:, rooms_ix] / X[:, households_ix]\n", + " population_per_household = X[:, population_ix] / X[:, households_ix]\n", + " if self.add_bedrooms_per_room:\n", + " bedrooms_per_room = X[:, bedrooms_ix] / X[:, rooms_ix]\n", + " return np.c_[X, rooms_per_household, population_per_household,\n", + " bedrooms_per_room]\n", + " else:\n", + " return np.c_[X, rooms_per_household, population_per_household]\n", + "\n", + "attr_adder = CombinedAttributesAdder(add_bedrooms_per_room=False)\n", + "housing_extra_attribs = attr_adder.transform(housing.values)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "# Setup a pipeline to do all we've done already for numerical features\n", + "# Note that all estimators but the last must be transformers(specifically they must have a\n", + "# fit_transform() method)\n", + "\n", + "num_pipeline = Pipeline([\n", + " ('imputer', SimpleImputer(strategy='median')),\n", + " ('attribs_adder', CombinedAttributesAdder()), \n", + " ('std_scaler', StandardScaler())\n", + "]) " + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "housing_num_tr = num_pipeline.fit_transform(housing_num)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "# Our previous pipeline applies to all columns in a dataframe. To deal with both our categorical and\n", + "# numerical features at once we use ColumnTransformer to perform our pipeline only on numerical features\n", + "# and OneHotEncoder only on categorical features\n", + "\n", + "num_attribs = list(housing_num)\n", + "cat_attribs = ['ocean_proximity']\n", + "\n", + "full_pipeline = ColumnTransformer([\n", + " ('num', num_pipeline, num_attribs), \n", + " ('cat', OneHotEncoder(), cat_attribs)\n", + "])\n", + "\n", + "housing_prepared = full_pipeline.fit_transform(housing)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Try out simple model\n", + "\n", + "lin_reg = LinearRegression()\n", + "lin_reg.fit(housing_prepared, housing_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "68628.19819848923" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check out our error on training set\n", + "\n", + "lin_reg_pred = lin_reg.predict(housing_prepared)\n", + "lin_mse = mean_squared_error(housing_labels, lin_reg_pred)\n", + "lin_rmse = np.sqrt(lin_mse)\n", + "lin_rmse" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [], + "source": [ + "# Better evaluation with Cross Validation (k-fold)\n", + "\n", + "scores = cross_val_score(lin_reg, housing_prepared, housing_labels,\n", + " scoring='neg_mean_squared_error', cv=10)\n", + "lin_reg_rmse_scores = np.sqrt(-scores)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "def display_scores(scores):\n", + " print('Scores: ', scores)\n", + " print('Mean: ', scores.mean())\n", + " print('Standard Deviation: ', scores.std())" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Scores: [66782.73843989 66960.118071 70347.95244419 74739.57052552\n", + " 68031.13388938 71193.84183426 64969.63056405 68281.61137997\n", + " 71552.91566558 67665.10082067]\n", + "Mean: 69052.46136345083\n", + "Standard Deviation: 2731.6740017983425\n" + ] + } + ], + "source": [ + "display_scores(lin_reg_rmse_scores)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\tsb\\appdata\\local\\programs\\python\\python37\\lib\\site-packages\\sklearn\\ensemble\\forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n", + " \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n" + ] + }, + { + "data": { + "text/plain": [ + "22020.531016739864" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Random Forest\n", + "\n", + "forest_reg = RandomForestRegressor()\n", + "forest_reg.fit(housing_prepared, housing_labels)\n", + "forest_reg_pred = forest_reg.predict(housing_prepared)\n", + "forest_reg_mse = mean_squared_error(housing_labels, forest_reg_pred)\n", + "forest_reg_rmse = np.sqrt(forest_reg_mse)\n", + "forest_reg_rmse" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "# Get k-fold scores\n", + "\n", + "forest_reg_scores = cross_val_score(forest_reg, housing_prepared, housing_labels,\n", + " scoring='neg_mean_squared_error', cv=10)\n", + "forest_reg_rmse_scores = np.sqrt(-forest_reg_scores)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Scores: [51471.26384635 50121.66522618 53509.84575046 54704.7006039\n", + " 52832.4840061 57155.84968564 52357.59400134 51823.56197907\n", + " 56258.53544821 52717.53079744]\n", + "Mean: 53295.303134468486\n", + "Standard Deviation: 2066.62611382041\n" + ] + } + ], + "source": [ + "# Display\n", + "\n", + "display_scores(forest_reg_rmse_scores)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['models/forest_reg.pkl']" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Save our models\n", + "\n", + "joblib.dump(lin_reg, \"models/lin_reg.pkl\")\n", + "joblib.dump(forest_reg, \"models/forest_reg.pkl\")\n", + "\n", + "# Note: can load back in with joblib.load('path/model.pkl')" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "GridSearchCV(cv=5, error_score='raise-deprecating',\n", + " estimator=RandomForestRegressor(bootstrap=True, criterion='mse',\n", + " max_depth=None,\n", + " max_features='auto',\n", + " max_leaf_nodes=None,\n", + " min_impurity_decrease=0.0,\n", + " min_impurity_split=None,\n", + " min_samples_leaf=1,\n", + " min_samples_split=2,\n", + " min_weight_fraction_leaf=0.0,\n", + " n_estimators='warn', n_jobs=None,\n", + " oob_score=False, random_state=None,\n", + " verbose=0, warm_start=False),\n", + " iid='warn', n_jobs=None,\n", + " param_grid=[{'max_features': [2, 4, 6, 8],\n", + " 'n_estimators': [3, 10, 30]},\n", + " {'bootstrap': [False], 'max_features': [2, 3, 4],\n", + " 'n_estimators': [3, 10]}],\n", + " pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n", + " scoring='neg_mean_squared_error', verbose=0)" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Fine tuning our models (Grid Search)\n", + "\n", + "param_grid = [\n", + " {'n_estimators': [3, 10, 30], 'max_features': [2, 4, 6, 8]},\n", + " {'bootstrap': [False], 'n_estimators': [3, 10], 'max_features': [2, 3, 4]}\n", + "]\n", + "\n", + "forest_reg = RandomForestRegressor()\n", + "\n", + "grid_search = GridSearchCV(forest_reg, param_grid, cv=5,\n", + " scoring='neg_mean_squared_error',\n", + " return_train_score=True)\n", + "\n", + "grid_search.fit(housing_prepared, housing_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'max_features': 6, 'n_estimators': 30}" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grid_search.best_params_" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,\n", + " max_features=6, max_leaf_nodes=None,\n", + " min_impurity_decrease=0.0, min_impurity_split=None,\n", + " min_samples_leaf=1, min_samples_split=2,\n", + " min_weight_fraction_leaf=0.0, n_estimators=30,\n", + " n_jobs=None, oob_score=False, random_state=None,\n", + " verbose=0, warm_start=False)" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grid_search.best_estimator_" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "63766.249031932166 {'max_features': 2, 'n_estimators': 3}\n", + "55241.42801213305 {'max_features': 2, 'n_estimators': 10}\n", + "52535.380892189394 {'max_features': 2, 'n_estimators': 30}\n", + "59700.32170336908 {'max_features': 4, 'n_estimators': 3}\n", + "52924.53101060204 {'max_features': 4, 'n_estimators': 10}\n", + "50393.77338577394 {'max_features': 4, 'n_estimators': 30}\n", + "59301.43966695725 {'max_features': 6, 'n_estimators': 3}\n", + "52035.17103216119 {'max_features': 6, 'n_estimators': 10}\n", + "49813.18816875522 {'max_features': 6, 'n_estimators': 30}\n", + "58081.320376052456 {'max_features': 8, 'n_estimators': 3}\n", + "51737.611817250836 {'max_features': 8, 'n_estimators': 10}\n", + "50338.53670533141 {'max_features': 8, 'n_estimators': 30}\n", + "62649.34948878523 {'bootstrap': False, 'max_features': 2, 'n_estimators': 3}\n", + "54152.03055272061 {'bootstrap': False, 'max_features': 2, 'n_estimators': 10}\n", + "59796.1703788161 {'bootstrap': False, 'max_features': 3, 'n_estimators': 3}\n", + "52826.151917810435 {'bootstrap': False, 'max_features': 3, 'n_estimators': 10}\n", + "58196.408759742335 {'bootstrap': False, 'max_features': 4, 'n_estimators': 3}\n", + "51906.57937919814 {'bootstrap': False, 'max_features': 4, 'n_estimators': 10}\n" + ] + } + ], + "source": [ + "# Display rmse for each of the models tested in our Grid Search\n", + "\n", + "cvres = grid_search.cv_results_\n", + "for mean_score, params in zip(cvres['mean_test_score'], cvres['params']):\n", + " print(np.sqrt(-mean_score), params)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(0.29557797449661544, 'median_income'),\n", + " (0.15501755658961477, 'INLAND'),\n", + " (0.10808150971584977, 'pop_per_hhold'),\n", + " (0.09567946033989604, 'bedrooms_per_room'),\n", + " (0.08025900590023524, 'longitude'),\n", + " (0.07448394445267537, 'latitude'),\n", + " (0.06378150432622012, 'rooms_per_hhold'),\n", + " (0.04012776886007714, 'housing_median_age'),\n", + " (0.017890873234094058, 'total_rooms'),\n", + " (0.016940497934044608, 'population'),\n", + " (0.01665603928514349, 'households'),\n", + " (0.01572966535262306, 'total_bedrooms'),\n", + " (0.010971161123643354, '<1H OCEAN'),\n", + " (0.004910668398105027, 'NEAR OCEAN'),\n", + " (0.003847444862073042, 'NEAR BAY'),\n", + " (4.4925129089441225e-05, 'ISLAND')]" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Look into how important each feature is in deciding our output and consider dropping less important\n", + "\n", + "feature_importances = grid_search.best_estimator_.feature_importances_\n", + "\n", + "extra_attribs = ['rooms_per_hhold', 'pop_per_hhold', 'bedrooms_per_room']\n", + "cat_encoder = full_pipeline.named_transformers_['cat']\n", + "cat_one_hot_attribs = list(cat_encoder.categories_[0])\n", + "attributes = num_attribs + extra_attribs + cat_one_hot_attribs\n", + "sorted(zip(feature_importances, attributes), reverse=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [], + "source": [ + "# Final post tuning evaluation on our test set\n", + "\n", + "final_model = grid_search.best_estimator_\n", + "\n", + "X_test = strat_test_set.drop('median_house_value', axis=1)\n", + "y_test = strat_test_set['median_house_value']\n", + "\n", + "X_test_prepared = full_pipeline.transform(X_test)\n", + "\n", + "final_pred = final_model.predict(X_test_prepared)\n", + "\n", + "final_mse = mean_squared_error(y_test, final_pred)\n", + "final_rmse = np.sqrt(final_mse)" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "47702.116203907615\n" + ] + } + ], + "source": [ + "# Definitive RMSE score for our tuned model\n", + "\n", + "print(final_rmse)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([45750.65472887, 49576.82293716])" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 95% confidence interval for our RMSE\n", + "\n", + "confidence = 0.95\n", + "squared_errors = (final_pred - y_test) ** 2\n", + "np.sqrt(stats.t.interval(confidence, len(squared_errors) - 1,\n", + " loc=squared_errors.mean(),\n", + " scale=stats.sem(squared_errors)))" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [], + "source": [ + "# 95% sure our RMSE on actual data would be between 45750 and 49576" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['models/final_model.pkl']" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Save our model\n", + "\n", + "joblib.dump(final_model, 'models/final_model.pkl')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ch2/Exercises.ipynb b/Ch2/Exercises.ipynb new file mode 100644 index 000000000..cf79bb172 --- /dev/null +++ b/Ch2/Exercises.ipynb @@ -0,0 +1,1689 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import os\n", + "import urllib\n", + "import tarfile\n", + "from sklearn.model_selection import StratifiedShuffleSplit as SSS\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.preprocessing import OneHotEncoder, StandardScaler\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.svm import SVR\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from sklearn.metrics import mean_squared_error\n", + "from sklearn.model_selection import GridSearchCV, RandomizedSearchCV\n", + "import joblib\n", + "from scipy.stats import expon, reciprocal" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "DOWNLOAD_ROOT = \"https://raw.githubusercontent.com/ageron/handson-ml2/master/\"\n", + "HOUSING_PATH = os.path.join(\"datasets\", \"housing\")\n", + "HOUSING_URL = DOWNLOAD_ROOT + \"datasets/housing/housing.tgz\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):\n", + " os.makedirs(housing_path, exist_ok = True) # Create directory if not already there\n", + " tgz_path = os.path.join(housing_path, 'housing.tgz') # Make path for our tgz file\n", + " urllib.request.urlretrieve(housing_url, tgz_path) # Download the file\n", + " housing_tgz = tarfile.open(tgz_path) # Open the file\n", + " housing_tgz.extractall(path=housing_path) # Extract from tarfile\n", + " housing_tgz.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "fetch_housing_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def load_housing_data(housing_path=HOUSING_PATH):\n", + " csv_path = os.path.join(housing_path, 'housing.csv')\n", + " return pd.read_csv(csv_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
longitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_valueocean_proximity
0-122.2337.8841.0880.0129.0322.0126.08.3252452600.0NEAR BAY
1-122.2237.8621.07099.01106.02401.01138.08.3014358500.0NEAR BAY
2-122.2437.8552.01467.0190.0496.0177.07.2574352100.0NEAR BAY
3-122.2537.8552.01274.0235.0558.0219.05.6431341300.0NEAR BAY
4-122.2537.8552.01627.0280.0565.0259.03.8462342200.0NEAR BAY
\n", + "
" + ], + "text/plain": [ + " longitude latitude housing_median_age total_rooms total_bedrooms \\\n", + "0 -122.23 37.88 41.0 880.0 129.0 \n", + "1 -122.22 37.86 21.0 7099.0 1106.0 \n", + "2 -122.24 37.85 52.0 1467.0 190.0 \n", + "3 -122.25 37.85 52.0 1274.0 235.0 \n", + "4 -122.25 37.85 52.0 1627.0 280.0 \n", + "\n", + " population households median_income median_house_value ocean_proximity \n", + "0 322.0 126.0 8.3252 452600.0 NEAR BAY \n", + "1 2401.0 1138.0 8.3014 358500.0 NEAR BAY \n", + "2 496.0 177.0 7.2574 352100.0 NEAR BAY \n", + "3 558.0 219.0 5.6431 341300.0 NEAR BAY \n", + "4 565.0 259.0 3.8462 342200.0 NEAR BAY " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing = load_housing_data()\n", + "housing.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# Now we want to do some stratified sampling based on median_income which seems to be fairly important\n", + "\n", + "housing['income_cat'] = pd.cut(housing['median_income'], # Chopping up median income because it's important\n", + " bins=[0., 1.5, 3.0, 4.5, 6., np.inf], # Chop into categories of 0 to 1.5, 1.5 to 3, etc\n", + " labels=[1,2,3,4,5]) # Generic labels\n", + "\n", + "split = SSS(n_splits=1, test_size=0.2, random_state=42) # Initialize our split with proper test size/random state to match book\n", + "for train_index, test_index in split.split(housing, housing['income_cat']):\n", + " strat_train_set = housing.loc[train_index]\n", + " strat_test_set = housing.loc[test_index]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# Now that we finished with our income_cat feature we can drop it\n", + "\n", + "for set_ in (strat_train_set, strat_test_set):\n", + " set_.drop('income_cat', axis=1, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "housing = strat_train_set.drop('median_house_value', axis=1)\n", + "housing_labels = strat_train_set['median_house_value'].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.base import BaseEstimator, TransformerMixin\n", + "\n", + "# column index\n", + "rooms_ix, bedrooms_ix, population_ix, households_ix = 3, 4, 5, 6\n", + "\n", + "class CombinedAttributesAdder(BaseEstimator, TransformerMixin):\n", + " def __init__(self, add_bedrooms_per_room = True): # no *args or **kargs\n", + " self.add_bedrooms_per_room = add_bedrooms_per_room\n", + " def fit(self, X, y=None):\n", + " return self # nothing else to do\n", + " def transform(self, X):\n", + " rooms_per_household = X[:, rooms_ix] / X[:, households_ix]\n", + " population_per_household = X[:, population_ix] / X[:, households_ix]\n", + " if self.add_bedrooms_per_room:\n", + " bedrooms_per_room = X[:, bedrooms_ix] / X[:, rooms_ix]\n", + " return np.c_[X, rooms_per_household, population_per_household,\n", + " bedrooms_per_room]\n", + " else:\n", + " return np.c_[X, rooms_per_household, population_per_household]\n", + "\n", + "attr_adder = CombinedAttributesAdder(add_bedrooms_per_room=False)\n", + "housing_extra_attribs = attr_adder.transform(housing.values)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# Setup a pipeline to do all we've done already for numerical features\n", + "# Note that all estimators but the last must be transformers(specifically they must have a\n", + "# fit_transform() method)\n", + "\n", + "num_pipeline = Pipeline([\n", + " ('imputer', SimpleImputer(strategy='median')),\n", + " ('attribs_adder', CombinedAttributesAdder()), \n", + " ('std_scaler', StandardScaler())\n", + "]) " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "housing_num = housing.drop('ocean_proximity', axis=1) # Drop non numerical feature for imputation\n", + "housing_cat = housing[['ocean_proximity']] # doubles brackets to get a dataframe instead of a series" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# Our previous pipeline applies to all columns in a dataframe. To deal with both our categorical and\n", + "# numerical features at once we use ColumnTransformer to perform our pipeline only on numerical features\n", + "# and OneHotEncoder only on categorical features\n", + "\n", + "num_attribs = list(housing_num)\n", + "cat_attribs = ['ocean_proximity']\n", + "\n", + "full_pipeline = ColumnTransformer([\n", + " ('num', num_pipeline, num_attribs), \n", + " ('cat', OneHotEncoder(), cat_attribs)\n", + "])\n", + "\n", + "housing_prepared = full_pipeline.fit_transform(housing)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise One**\n", + "\n", + "Try with an SVM!" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\tsb\\appdata\\local\\programs\\python\\python37\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n", + " \"avoid this warning.\", FutureWarning)\n" + ] + }, + { + "data": { + "text/plain": [ + "SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1,\n", + " gamma='auto_deprecated', kernel='rbf', max_iter=-1, shrinking=True,\n", + " tol=0.001, verbose=False)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Simple Support Vector Machine\n", + "\n", + "SVR_model = SVR()\n", + "SVR_model.fit(housing_prepared, housing_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "118577.43356412371" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SVR_pred = SVR_model.predict(housing_prepared)\n", + "SVR_mse = mean_squared_error(SVR_pred, housing_labels)\n", + "SVR_rmse = np.sqrt (SVR_mse)\n", + "SVR_rmse" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 5 folds for each of 72 candidates, totalling 360 fits\n", + "[CV] C=10.0, gamma=0.01, kernel=linear ...............................\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] ................ C=10.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=linear ...............................\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=1)]: Done 1 out of 1 | elapsed: 6.1s remaining: 0.0s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] ................ C=10.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=10.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=10.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.03, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=10.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.03, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=10.0, gamma=0.03, kernel=rbf, total= 7.4s\n", + "[CV] C=10.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.1, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.1, kernel=rbf, total= 7.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.1, kernel=rbf, total= 7.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.1, kernel=rbf, total= 7.3s\n", + "[CV] C=10.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.1, kernel=rbf, total= 7.2s\n", + "[CV] C=10.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.1, kernel=rbf, total= 7.7s\n", + "[CV] C=10.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=10.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=10.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=10.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=10.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=0.3, kernel=rbf, total= 7.2s\n", + "[CV] C=10.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=10.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=10.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=10.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=10.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=10.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=3.0, kernel=linear, total= 4.4s\n", + "[CV] C=10.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=10.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=10.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=10.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=10.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=10.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=10.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=10.0, gamma=3.0, kernel=rbf ...................................\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] .................... C=10.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=30.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.01, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.01, kernel=linear, total= 4.2s\n", + "[CV] C=30.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=30.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=30.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=30.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=30.0, gamma=0.01, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=30.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.03, kernel=linear ...............................\n", + "[CV] ................ C=30.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.03, kernel=rbf, total= 7.4s\n", + "[CV] C=30.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=30.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.03, kernel=rbf, total= 7.6s\n", + "[CV] C=30.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=30.0, gamma=0.03, kernel=rbf ..................................\n", + "[CV] ................... C=30.0, gamma=0.03, kernel=rbf, total= 7.4s\n", + "[CV] C=30.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.1, kernel=linear, total= 4.2s\n", + "[CV] C=30.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.1, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.1, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.1, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.1, kernel=rbf, total= 7.2s\n", + "[CV] C=30.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.1, kernel=rbf, total= 7.3s\n", + "[CV] C=30.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.1, kernel=rbf, total= 7.2s\n", + "[CV] C=30.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.1, kernel=rbf, total= 7.3s\n", + "[CV] C=30.0, gamma=0.1, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.1, kernel=rbf, total= 7.2s\n", + "[CV] C=30.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.3, kernel=linear, total= 4.2s\n", + "[CV] C=30.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=0.3, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=30.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=30.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=30.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.3, kernel=rbf, total= 7.1s\n", + "[CV] C=30.0, gamma=0.3, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=30.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=1.0, kernel=linear, total= 4.2s\n", + "[CV] C=30.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=30.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=1.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=1.0, kernel=linear, total= 4.2s\n", + "[CV] C=30.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=30.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=30.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=30.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=30.0, gamma=1.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=1.0, kernel=rbf, total= 7.0s\n", + "[CV] C=30.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=3.0, kernel=linear, total= 4.5s\n", + "[CV] C=30.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=3.0, kernel=linear ................................\n", + "[CV] ................. C=30.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=30.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=30.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=30.0, gamma=3.0, kernel=rbf ...................................\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] .................... C=30.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=30.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=30.0, gamma=3.0, kernel=rbf ...................................\n", + "[CV] .................... C=30.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=100.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.01, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=100.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.01, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=100.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=100.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=100.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=100.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.01, kernel=rbf, total= 7.4s\n", + "[CV] C=100.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=100.0, gamma=0.03, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.03, kernel=rbf, total= 7.2s\n", + "[CV] C=100.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=100.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.03, kernel=rbf, total= 7.2s\n", + "[CV] C=100.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=100.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=100.0, gamma=0.03, kernel=rbf, total= 7.2s\n", + "[CV] C=100.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.1, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.1, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.1, kernel=rbf, total= 7.1s\n", + "[CV] C=100.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.1, kernel=rbf, total= 7.1s\n", + "[CV] C=100.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.1, kernel=rbf, total= 7.1s\n", + "[CV] C=100.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.1, kernel=rbf, total= 7.1s\n", + "[CV] C=100.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.1, kernel=rbf, total= 7.1s\n", + "[CV] C=100.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=100.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.3, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=100.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.3, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=0.3, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=100.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=100.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=100.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=100.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=100.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=1.0, kernel=linear, total= 4.2s\n", + "[CV] C=100.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=100.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=100.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=100.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=100.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=100.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=100.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=100.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=100.0, gamma=3.0, kernel=rbf ..................................\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] ................... C=100.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=100.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=100.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=100.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=100.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=100.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=300.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.01, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.01, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.01, kernel=rbf, total= 7.2s\n", + "[CV] C=300.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=300.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.01, kernel=rbf, total= 7.2s\n", + "[CV] C=300.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=300.0, gamma=0.01, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.01, kernel=rbf, total= 7.2s\n", + "[CV] C=300.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.03, kernel=linear ..............................\n", + "[CV] ............... C=300.0, gamma=0.03, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.03, kernel=rbf, total= 7.1s\n", + "[CV] C=300.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.03, kernel=rbf, total= 7.0s\n", + "[CV] C=300.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.03, kernel=rbf, total= 7.0s\n", + "[CV] C=300.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.03, kernel=rbf, total= 7.1s\n", + "[CV] C=300.0, gamma=0.03, kernel=rbf .................................\n", + "[CV] .................. C=300.0, gamma=0.03, kernel=rbf, total= 7.0s\n", + "[CV] C=300.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.1, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.1, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.1, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.1, kernel=rbf, total= 7.0s\n", + "[CV] C=300.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.1, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.1, kernel=rbf, total= 7.0s\n", + "[CV] C=300.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.1, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=0.1, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.1, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.3, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.3, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=0.3, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.3, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.3, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.3, kernel=rbf, total= 7.0s\n", + "[CV] C=300.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.3, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=0.3, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=0.3, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=1.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=1.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=300.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=300.0, gamma=1.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=300.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=3.0, kernel=linear ...............................\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] ................ C=300.0, gamma=3.0, kernel=linear, total= 4.4s\n", + "[CV] C=300.0, gamma=3.0, kernel=linear ...............................\n", + "[CV] ................ C=300.0, gamma=3.0, kernel=linear, total= 4.3s\n", + "[CV] C=300.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=300.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=300.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=300.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=300.0, gamma=3.0, kernel=rbf ..................................\n", + "[CV] ................... C=300.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=1000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=1000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.01, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.01, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.01, kernel=linear, total= 4.6s\n", + "[CV] C=1000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.01, kernel=linear, total= 4.4s\n", + "[CV] C=1000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.01, kernel=rbf, total= 7.0s\n", + "[CV] C=1000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.01, kernel=rbf, total= 7.0s\n", + "[CV] C=1000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.01, kernel=rbf, total= 7.0s\n", + "[CV] C=1000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.01, kernel=rbf, total= 7.0s\n", + "[CV] C=1000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.01, kernel=rbf, total= 7.0s\n", + "[CV] C=1000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.03, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.03, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.03, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.03, kernel=linear, total= 4.6s\n", + "[CV] C=1000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=1000.0, gamma=0.03, kernel=linear, total= 4.4s\n", + "[CV] C=1000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.03, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.03, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.03, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.03, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=1000.0, gamma=0.03, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.1, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.1, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.1, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.1, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.1, kernel=linear, total= 4.4s\n", + "[CV] C=1000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.1, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.1, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.1, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.1, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.1, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.3, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.3, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.3, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.3, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=0.3, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=1.0, kernel=linear, total= 4.4s\n", + "[CV] C=1000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=1.0, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=1.0, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=1.0, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=1.0, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=1000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=1000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=3.0, kernel=linear, total= 4.4s\n", + "[CV] C=1000.0, gamma=3.0, kernel=linear ..............................\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] ............... C=1000.0, gamma=3.0, kernel=linear, total= 4.6s\n", + "[CV] C=1000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=3.0, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=3.0, kernel=linear, total= 4.6s\n", + "[CV] C=1000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=1000.0, gamma=3.0, kernel=linear, total= 4.5s\n", + "[CV] C=1000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=1000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=1000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=1000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=1000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=1000.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=3000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.01, kernel=linear, total= 5.3s\n", + "[CV] C=3000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.01, kernel=linear, total= 5.0s\n", + "[CV] C=3000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.01, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.01, kernel=linear, total= 5.1s\n", + "[CV] C=3000.0, gamma=0.01, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.01, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.01, kernel=rbf, total= 7.1s\n", + "[CV] C=3000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.01, kernel=rbf, total= 6.9s\n", + "[CV] C=3000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.01, kernel=rbf, total= 7.3s\n", + "[CV] C=3000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.01, kernel=rbf, total= 8.1s\n", + "[CV] C=3000.0, gamma=0.01, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.01, kernel=rbf, total= 7.7s\n", + "[CV] C=3000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.03, kernel=linear, total= 5.1s\n", + "[CV] C=3000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.03, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.03, kernel=linear, total= 5.0s\n", + "[CV] C=3000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.03, kernel=linear, total= 5.1s\n", + "[CV] C=3000.0, gamma=0.03, kernel=linear .............................\n", + "[CV] .............. C=3000.0, gamma=0.03, kernel=linear, total= 5.2s\n", + "[CV] C=3000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.03, kernel=rbf, total= 8.0s\n", + "[CV] C=3000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.03, kernel=rbf, total= 7.8s\n", + "[CV] C=3000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.03, kernel=rbf, total= 7.3s\n", + "[CV] C=3000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.03, kernel=rbf, total= 7.1s\n", + "[CV] C=3000.0, gamma=0.03, kernel=rbf ................................\n", + "[CV] ................. C=3000.0, gamma=0.03, kernel=rbf, total= 7.5s\n", + "[CV] C=3000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.1, kernel=linear, total= 5.1s\n", + "[CV] C=3000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.1, kernel=linear, total= 4.7s\n", + "[CV] C=3000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.1, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.1, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.1, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.1, kernel=linear, total= 4.7s\n", + "[CV] C=3000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.1, kernel=rbf, total= 6.9s\n", + "[CV] C=3000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.1, kernel=rbf, total= 7.2s\n", + "[CV] C=3000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.1, kernel=rbf, total= 7.6s\n", + "[CV] C=3000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.1, kernel=rbf, total= 7.2s\n", + "[CV] C=3000.0, gamma=0.1, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.1, kernel=rbf, total= 7.0s\n", + "[CV] C=3000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.3, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.3, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.3, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.3, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=0.3, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=0.3, kernel=linear, total= 4.7s\n", + "[CV] C=3000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=3000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=3000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=3000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=3000.0, gamma=0.3, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=0.3, kernel=rbf, total= 6.8s\n", + "[CV] C=3000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=1.0, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=1.0, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=1.0, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=1.0, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=1.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=1.0, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=3000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=3000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=3000.0, gamma=1.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=1.0, kernel=rbf, total= 6.8s\n", + "[CV] C=3000.0, gamma=1.0, kernel=rbf .................................\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[CV] .................. C=3000.0, gamma=1.0, kernel=rbf, total= 6.9s\n", + "[CV] C=3000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=3.0, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=3.0, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=3.0, kernel=linear, total= 5.0s\n", + "[CV] C=3000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=3.0, kernel=linear, total= 4.9s\n", + "[CV] C=3000.0, gamma=3.0, kernel=linear ..............................\n", + "[CV] ............... C=3000.0, gamma=3.0, kernel=linear, total= 4.8s\n", + "[CV] C=3000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=3.0, kernel=rbf, total= 7.6s\n", + "[CV] C=3000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=3.0, kernel=rbf, total= 7.8s\n", + "[CV] C=3000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=3000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=3.0, kernel=rbf, total= 7.7s\n", + "[CV] C=3000.0, gamma=3.0, kernel=rbf .................................\n", + "[CV] .................. C=3000.0, gamma=3.0, kernel=rbf, total= 7.7s\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=1)]: Done 360 out of 360 | elapsed: 51.4min finished\n" + ] + }, + { + "data": { + "text/plain": [ + "GridSearchCV(cv=5, error_score='raise-deprecating',\n", + " estimator=SVR(C=1.0, cache_size=200, coef0=0.0, degree=3,\n", + " epsilon=0.1, gamma='auto_deprecated', kernel='rbf',\n", + " max_iter=-1, shrinking=True, tol=0.001,\n", + " verbose=False),\n", + " iid='warn', n_jobs=None,\n", + " param_grid=[{'C': [10.0, 30.0, 100.0, 300.0, 1000.0, 3000.0],\n", + " 'gamma': [0.01, 0.03, 0.1, 0.3, 1.0, 3.0],\n", + " 'kernel': ['linear', 'rbf']}],\n", + " pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n", + " scoring='neg_mean_squared_error', verbose=2)" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Our rmse was terrible, worse than either linear regression or random forests\n", + "# Lets try to fine tune our hyper parameters\n", + "\n", + "param_grid = [\n", + " {'kernel': ['linear', 'rbf'], 'C': [10., 30., 100., 300., 1000., 3000.],\n", + " 'gamma': [0.01, 0.03, 0.1, 0.3, 1.0, 3.0]}\n", + "]\n", + "\n", + "SVR_model = SVR()\n", + "\n", + "grid_search = GridSearchCV(SVR_model, param_grid, cv=5,\n", + " scoring='neg_mean_squared_error',\n", + " return_train_score=True, \n", + " verbose=2, \n", + " n_jobs=-1)\n", + "\n", + "grid_search.fit(housing_prepared, housing_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'grid_search' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mgrid_search\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbest_params_\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'grid_search' is not defined" + ] + } + ], + "source": [ + "grid_search.best_params_" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "grid_search.best_estimator_" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4237489445.3787646\n", + "65096.0017618499\n" + ] + } + ], + "source": [ + "neg_mse = grid_search.best_score_\n", + "mse = -neg_mse\n", + "rmse = np.sqrt(mse)\n", + "print(mse)\n", + "print(rmse)" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['models/SVR_model.pkl']" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Still not great, but much better than before\n", + "\n", + "SVR_model = grid_search.best_estimator_\n", + "joblib.dump(SVR_model, 'models/SVR_model.pkl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise 2**\n", + "\n", + "Replace Grid Search with a Random Search" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 5 folds for each of 5 candidates, totalling 25 fits\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n", + "[Parallel(n_jobs=-1)]: Done 23 out of 25 | elapsed: 2.6min remaining: 13.7s\n", + "[Parallel(n_jobs=-1)]: Done 25 out of 25 | elapsed: 2.7min finished\n" + ] + }, + { + "data": { + "text/plain": [ + "RandomizedSearchCV(cv=5, error_score='raise-deprecating',\n", + " estimator=SVR(C=1.0, cache_size=200, coef0=0.0, degree=3,\n", + " epsilon=0.1, gamma='auto_deprecated',\n", + " kernel='rbf', max_iter=-1, shrinking=True,\n", + " tol=0.001, verbose=False),\n", + " iid='warn', n_iter=5, n_jobs=-1,\n", + " param_distributions={'C': ,\n", + " 'gamma': ,\n", + " 'kernel': ['linear', 'rbf']},\n", + " pre_dispatch='2*n_jobs', random_state=None, refit=True,\n", + " return_train_score=False, scoring='neg_mean_squared_error',\n", + " verbose=2)" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "param_distributions = {\n", + " 'kernel': ['linear', 'rbf'], \n", + " 'C': reciprocal(20,200000),\n", + " 'gamma': expon(scale=1.0)\n", + "}\n", + "\n", + "\n", + "SVR_model = SVR()\n", + "\n", + "rnd_search = RandomizedSearchCV(SVR_model, \n", + " param_distributions=param_distributions, \n", + " n_iter=50,\n", + " cv=5,\n", + " scoring='neg_mean_squared_error',\n", + " verbose=2, \n", + " n_jobs=-1, \n", + " )\n", + "\n", + "rnd_search.fit(housing_prepared, housing_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3776176391.944553\n", + "61450.601233385445\n" + ] + } + ], + "source": [ + "neg_mse = rnd_search.best_score_\n", + "mse = -neg_mse\n", + "rmse = np.sqrt(mse)\n", + "print(mse)\n", + "print(rmse) # Even better than the grid search!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "SVR_model = rnd_search.best_estimator_\n", + "joblib.dump(SVR_model, 'models/SVR_tuned_model.pkl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise 3**\n", + "\n", + "Add transformer to preperation pipeline which chooses only most important attributes" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\tsb\\appdata\\local\\programs\\python\\python37\\lib\\site-packages\\sklearn\\ensemble\\forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n", + " \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n" + ] + } + ], + "source": [ + "# Have to find feature importances somehow, so we create a random forest model and inspect that\n", + "\n", + "forest_reg = RandomForestRegressor()\n", + "forest_reg.fit(housing_prepared, housing_labels)\n", + "feature_importances = forest_reg.feature_importances_" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.base import BaseEstimator, TransformerMixin\n", + "\n", + "def indices_of_top_k(arr, k):\n", + " return np.sort(np.argpartition(np.array(arr), -k)[-k:])\n", + "\n", + "class TopFeatureSelector(BaseEstimator, TransformerMixin):\n", + " def __init__(self, feature_importances, k): # Need our array of feature importance rankings and the number we'd like to keep\n", + " self.feature_importances = feature_importances\n", + " self.k = k\n", + " def fit(self, X, y=None):\n", + " self.feature_indices_ = indices_of_top_k(self.feature_importances, self.k)\n", + " return self\n", + " def transform(self, X):\n", + " return X[:, self.feature_indices_]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "k=5" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-1.15604281, 0.77194962, -0.61493744, -0.08649871, 0. ],\n", + " [-1.17602483, 0.6596948 , 1.33645936, -0.03353391, 0. ],\n", + " [ 1.18684903, -1.34218285, -0.5320456 , -0.09240499, 0. ],\n", + " ...,\n", + " [ 1.58648943, -0.72478134, -0.3167053 , -0.03055414, 1. ],\n", + " [ 0.78221312, -0.85106801, 0.09812139, 0.06150916, 0. ],\n", + " [-1.43579109, 0.99645926, -0.15779865, -0.09586294, 0. ]])" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check that it's working\n", + "\n", + "selector = TopFeatureSelector(feature_importances, k)\n", + "selector.fit(housing_prepared)\n", + "selector.transform(housing_prepared)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "prep_and_select_pipeline = Pipeline([\n", + " ('preperation', full_pipeline),\n", + " ('feature_selection', TopFeatureSelector(feature_importances, k))\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "housing_prepared_top_features = prep_and_select_pipeline.fit_transform(housing)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-1.15604281, 0.77194962, -0.61493744, -0.08649871, 0. ],\n", + " [-1.17602483, 0.6596948 , 1.33645936, -0.03353391, 0. ],\n", + " [ 1.18684903, -1.34218285, -0.5320456 , -0.09240499, 0. ],\n", + " [-0.01706767, 0.31357576, -1.04556555, 0.08973561, 1. ],\n", + " [ 0.49247384, -0.65929936, -0.44143679, -0.00419445, 0. ]])" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing_prepared_top_features[0:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise 4**\n", + "\n", + "Create pipeline for data prep and prediction" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "prep_select_and_predict_pipeline = Pipeline([\n", + " ('preperation', full_pipeline),\n", + " ('feature_selection', TopFeatureSelector(feature_importances, k)),\n", + " ('svm_reg', SVR(**rnd_search.best_params_))\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Pipeline(memory=None,\n", + " steps=[('preperation',\n", + " ColumnTransformer(n_jobs=None, remainder='drop',\n", + " sparse_threshold=0.3,\n", + " transformer_weights=None,\n", + " transformers=[('num',\n", + " Pipeline(memory=None,\n", + " steps=[('imputer',\n", + " SimpleImputer(add_indicator=False,\n", + " copy=True,\n", + " fill_value=None,\n", + " missing_values=nan,\n", + " strategy='median',\n", + " verbose=0)),\n", + " ('attribs_adder',\n", + " CombinedAttributesAdder(add_...\n", + " 1.19018202e-02, 1.24288759e-02, 1.26283374e-02, 4.73852096e-01,\n", + " 2.78258192e-02, 1.23789304e-01, 2.39439353e-02, 1.04137251e-03,\n", + " 1.38398964e-01, 1.33131544e-04, 7.89651465e-04, 2.16944520e-03]),\n", + " k=5)),\n", + " ('svm_reg',\n", + " SVR(C=24167.809457504085, cache_size=200, coef0=0.0, degree=3,\n", + " epsilon=0.1, gamma=0.6260828385112527, kernel='rbf',\n", + " max_iter=-1, shrinking=True, tol=0.001, verbose=False))],\n", + " verbose=False)" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "prep_select_and_predict_pipeline.fit(housing, housing_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([199258.41244986, 357693.77258301, 170734.84525309, 46270.46533462])" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "prep_select_and_predict_pipeline.predict(housing.iloc[:4])" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "17606 286600.0\n", + "18632 340600.0\n", + "14650 196900.0\n", + "3230 46300.0\n", + "Name: median_house_value, dtype: float64" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing_labels.iloc[:4]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ch2/Housing.ipynb b/Ch2/Housing.ipynb new file mode 100644 index 000000000..61b5bb10e --- /dev/null +++ b/Ch2/Housing.ipynb @@ -0,0 +1,1715 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import tarfile\n", + "import urllib\n", + "import numpy as np\n", + "import pandas as pd\n", + "import joblib\n", + "from pandas.plotting import scatter_matrix\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV\n", + "from sklearn.model_selection import StratifiedShuffleSplit as SSS\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.preprocessing import OneHotEncoder, StandardScaler\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.metrics import mean_squared_error\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from scipy import stats" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "DOWNLOAD_ROOT = \"https://raw.githubusercontent.com/ageron/handson-ml2/master/\"\n", + "HOUSING_PATH = os.path.join(\"datasets\", \"housing\")\n", + "HOUSING_URL = DOWNLOAD_ROOT + \"datasets/housing/housing.tgz\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):\n", + " os.makedirs(housing_path, exist_ok = True) # Create directory if not already there\n", + " tgz_path = os.path.join(housing_path, 'housing.tgz') # Make path for our tgz file\n", + " urllib.request.urlretrieve(housing_url, tgz_path) # Download the file\n", + " housing_tgz = tarfile.open(tgz_path) # Open the file\n", + " housing_tgz.extractall(path=housing_path) # Extract from tarfile\n", + " housing_tgz.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "fetch_housing_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def load_housing_data(housing_path=HOUSING_PATH):\n", + " csv_path = os.path.join(housing_path, 'housing.csv')\n", + " return pd.read_csv(csv_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
longitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_valueocean_proximity
0-122.2337.8841.0880.0129.0322.0126.08.3252452600.0NEAR BAY
1-122.2237.8621.07099.01106.02401.01138.08.3014358500.0NEAR BAY
2-122.2437.8552.01467.0190.0496.0177.07.2574352100.0NEAR BAY
3-122.2537.8552.01274.0235.0558.0219.05.6431341300.0NEAR BAY
4-122.2537.8552.01627.0280.0565.0259.03.8462342200.0NEAR BAY
\n", + "
" + ], + "text/plain": [ + " longitude latitude housing_median_age total_rooms total_bedrooms \\\n", + "0 -122.23 37.88 41.0 880.0 129.0 \n", + "1 -122.22 37.86 21.0 7099.0 1106.0 \n", + "2 -122.24 37.85 52.0 1467.0 190.0 \n", + "3 -122.25 37.85 52.0 1274.0 235.0 \n", + "4 -122.25 37.85 52.0 1627.0 280.0 \n", + "\n", + " population households median_income median_house_value ocean_proximity \n", + "0 322.0 126.0 8.3252 452600.0 NEAR BAY \n", + "1 2401.0 1138.0 8.3014 358500.0 NEAR BAY \n", + "2 496.0 177.0 7.2574 352100.0 NEAR BAY \n", + "3 558.0 219.0 5.6431 341300.0 NEAR BAY \n", + "4 565.0 259.0 3.8462 342200.0 NEAR BAY " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing = load_housing_data()\n", + "housing.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 20640 entries, 0 to 20639\n", + "Data columns (total 10 columns):\n", + "longitude 20640 non-null float64\n", + "latitude 20640 non-null float64\n", + "housing_median_age 20640 non-null float64\n", + "total_rooms 20640 non-null float64\n", + "total_bedrooms 20433 non-null float64\n", + "population 20640 non-null float64\n", + "households 20640 non-null float64\n", + "median_income 20640 non-null float64\n", + "median_house_value 20640 non-null float64\n", + "ocean_proximity 20640 non-null object\n", + "dtypes: float64(9), object(1)\n", + "memory usage: 1.6+ MB\n" + ] + } + ], + "source": [ + "housing.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<1H OCEAN 9136\n", + "INLAND 6551\n", + "NEAR OCEAN 2658\n", + "NEAR BAY 2290\n", + "ISLAND 5\n", + "Name: ocean_proximity, dtype: int64" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# We can see that ocean_proximity is the only non numerical feature\n", + "# We use value_counts to look at what the categories consist of\n", + "\n", + "housing['ocean_proximity'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
longitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_value
count20640.00000020640.00000020640.00000020640.00000020433.00000020640.00000020640.00000020640.00000020640.000000
mean-119.56970435.63186128.6394862635.763081537.8705531425.476744499.5396803.870671206855.816909
std2.0035322.13595212.5855582181.615252421.3850701132.462122382.3297531.899822115395.615874
min-124.35000032.5400001.0000002.0000001.0000003.0000001.0000000.49990014999.000000
25%-121.80000033.93000018.0000001447.750000296.000000787.000000280.0000002.563400119600.000000
50%-118.49000034.26000029.0000002127.000000435.0000001166.000000409.0000003.534800179700.000000
75%-118.01000037.71000037.0000003148.000000647.0000001725.000000605.0000004.743250264725.000000
max-114.31000041.95000052.00000039320.0000006445.00000035682.0000006082.00000015.000100500001.000000
\n", + "
" + ], + "text/plain": [ + " longitude latitude housing_median_age total_rooms \\\n", + "count 20640.000000 20640.000000 20640.000000 20640.000000 \n", + "mean -119.569704 35.631861 28.639486 2635.763081 \n", + "std 2.003532 2.135952 12.585558 2181.615252 \n", + "min -124.350000 32.540000 1.000000 2.000000 \n", + "25% -121.800000 33.930000 18.000000 1447.750000 \n", + "50% -118.490000 34.260000 29.000000 2127.000000 \n", + "75% -118.010000 37.710000 37.000000 3148.000000 \n", + "max -114.310000 41.950000 52.000000 39320.000000 \n", + "\n", + " total_bedrooms population households median_income \\\n", + "count 20433.000000 20640.000000 20640.000000 20640.000000 \n", + "mean 537.870553 1425.476744 499.539680 3.870671 \n", + "std 421.385070 1132.462122 382.329753 1.899822 \n", + "min 1.000000 3.000000 1.000000 0.499900 \n", + "25% 296.000000 787.000000 280.000000 2.563400 \n", + "50% 435.000000 1166.000000 409.000000 3.534800 \n", + "75% 647.000000 1725.000000 605.000000 4.743250 \n", + "max 6445.000000 35682.000000 6082.000000 15.000100 \n", + "\n", + " median_house_value \n", + "count 20640.000000 \n", + "mean 206855.816909 \n", + "std 115395.615874 \n", + "min 14999.000000 \n", + "25% 119600.000000 \n", + "50% 179700.000000 \n", + "75% 264725.000000 \n", + "max 500001.000000 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJEAAANeCAYAAACiV59dAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdfbycVXno/d9FEESlhhfZYsJpsKataCr6pED1nJ5dqRDANvTziGKpBsXmtIVW2/Ro8PQcrEgbe6qoVbFRosFHBerLIRVaTNF9PD5PeRflTSRCKjER1AR0gy+NXs8f99ow7Mzs2bMzb/fs3/fzmc/MrHvNPdfaM3vWzHWvte7ITCRJkiRJkqSZ7DPoACRJkiRJkjT8TCJJkiRJkiSpLZNIkiRJkiRJasskkiRJkiRJktoyiSRJkiRJkqS2TCJJkiRJkiSpLZNIGriI2BoRvznoOAAi4iMR8bY5PnYiIl7XYtuSiMiI2HfvIpSk4dfvz/WImIyIZ/br+bqt9A/PKrc/EBH/fdAxSZJmNte+LiL+U0Tc1cU4xiNiW7f2J7XjD1pJklRrmfmUQcfQLZn5B4OOQZLUPRGRwNLM3AKQmf8H+KWG7VuB12XmvwwmQqkzjkSSJEmSJElSWyaRNCyOjoivRsRDEXFZRDwRICJ+PyK2RMTOiNgUEc8o5XtMD2ucThYRz4qI/132992IuKyh3i9HxOayz7si4uXTYjkoIq6MiB9ExHUR8QsNj31hRNxQ9ntDRLywWWMiYkFE/G157nuAU6ZtPzMi7inPcW9EnLG3f0BJGjL9/FxvnA72kYh43wyf4yeUz/6HIuL9ZZ9NpyI3PObMiPh/I+LCiHiwfH6/sJTfFxEPRMSqhvr7lz7gmxFxf5midkDD9v8aETsiYntEvHbacz06rToiDoqIz0bEdyJiV7m9eNrf5/wS2w8i4nMRcWi7FyYi/iEivl3+Bl+MiOc0bDskIv4xIr5f+rm3RcSXGra360MlaV6JiGMi4l9L/7AjIt4bEfuVbV8s1b4S1dTrV0TD9LOI+CjwH4B/LNvfGE2mp0XD1LmIOKD0Fbsi4g7gV6fVfUZEfKr0HfdGxJ/0+m+g+cUkkobFy4EVwJHArwBnRsSLgb8u2w4H/g24dJb7Ox/4HHAQsBj4O4CIeDKwGfg4cBjwSuD9jV+gS9lflsduAS4ojz0YuBJ4D3AI8E7gyog4pMnz/z7wUuD5wHLgZVMbSgzvAU7KzAOBFwK3zLJdklQXfflcb6HV5/ihwCeBc6k+x++i+gyejWOBr5bHfbzE/avAs4DfA94bEVPT6t4O/CJwdNm+CPgfJYYVwJ8DLwGWAjOtp7EP8GHg56l+ZPwQeO+0Or8LvIaqT9uv7LudfyrPfRhwM/Cxhm3vAx4Gng6sKhdK7LPpQyVpvvkp8KfAocCvAccDfwSQmb9e6jwvM5+SmZc1PjAzXwV8E/itsv1vZvF85wG/UC4n8vjP6X2AfwS+QtX3HA+8ISJOnHvzpMcziaRh8Z7M3J6ZO6k++I4GzgA2ZObNmfljqi/9vxYRS2axv3+n+tL9jMz8UWZOHUV9KbA1Mz+cmbsz82bgUzQkeYBPZ+b1mbmb6ov10aX8FODuzPxoeewngK8Bv9Xk+V8OvCsz7ytt+utp238GPDciDsjMHZl5+yzaJEl10q/P9WZafY6fDNyemZ8u294DfHuW7bm39B0/BS4DjgDempk/zszPAT8BnhURQXUg4U8zc2dm/gD4K+D0sp+XAx/OzNsy82HgLa2eMDO/l5mfysxHyn4uAP7ztGofzsyvZ+YPgcsb2tpSZm7IzB+U1+AtwPMi4qkRsQD4v4HzynPeAWxseOhs+lBJmlcy86bMvLZ8Lm4F/p49P6u76eXABaWPuY+qL5vyq8DTMvOtmfmTzLwH+CCP9UHSXjOJpGHR+CX+EeApwDOojlIDkJmTwPeosurtvBEI4PqIuL1husDPA8eW4aYPRsSDVD9qnt4mFqbHU/xbi3ieAdw3rd5UOx4GXgH8AbCjTLn45Vm0SZLqpF+f67N9bpj22ZyZCcz2jDb3N9z+YXn89LKnAE8DngTc1NDP/HMp3yMG9uxXHhURT4qIv4+If4uI7wNfBBaWZM+UVm1ttc8FEbEuIr5R9rm1bDq0xLjvtPgab8+mD5WkeSUifrFMN/52+Vz9K6rP1F6ZqR/5eeAZ0z6n3wyM9TAezTOenU3DbDvVByHw6DD6Q4BvUQ21h+qL+vfL7Ue/xGbmt6mOBBMR/xH4lzIn+T7gf2fmS/Y2nuI/UP04mG4H1VHqxnqPysyrgavLGhlvozpC8J/mEJMk1UnXP9enznYzSzuopsJNPX803u+S71IllJ6Tmd9qEUPL/mGaNVRn8Dk2M78dEUcDX6ZKps3V7wIrqabRbQWeCuwq+/wOsJvqb/L1Ur8x1r3pQyVpVF1E9dn8ysz8QUS8gc5GaOa0+w9T9YVAlfznsQMR8Fg/MjWTobEfuY9q5OzSDp5f6ogjkTTMPg68JiKOjoj9qbL612Xm1sz8DtWPjt8rR1VfSzUvGICIOK1h8dFdVB/OPwU+C/xiRLwqIp5QLr8aEc+eRTxXlcf+bkTsGxGvAI4q+5zucuBPImJxRBwErG2IbSwifrv8ePoxMFlik6RR14vP9U5cCSyLiFOjWsD7bLo8iiYzf0Z1YODCiDgMICIWNaxHcTnV+lBHRcSTqNa2aOVAqoTUg2VdvpnqztaBVH3P96h+pPxVQ+w/BT4NvKWMgvpl4NUNj92bPlSSRtWBVAc/Jsvn5h9O234/8MwZHj99+9eBJ0bEKRHxBOAvgP0btl8OnBvVyRcWA3/csO164PsR8aayAPeCiHhuRDxu8W1pb5hE0tDKzGuA/0613sIOqh8TjfN5fx/4r1RfhJ8D/H8N234VuC4iJoFNwOsz896ypsQJZT/bqaYBvJ3HfzC3iud7VOtBrCnP+UbgpZn53SbVPwhcTbWo3c1UX8qn7FP2sR3YSTVn+o/aPb8k1V0vPtc7fP7vAqcBf1Oe4yjgRqqkSje9iWpB72vL1IZ/oRpRRGb+E/Au4POlzudn2M+7gAOoRjddS/ORr526hGrqw7eAO8p+G51DNTrp28BHgU9Q/j5704dK0gj7c6pRnj+g+g1w2bTtbwE2lullzc5o+dfAX5Ttf56ZD1H9NvgQj43UbZx6/ZdUn+P3Up1w4qNTG8rBgN+iWh/vXqr+40NUn+tSV0S1HIAkSdL8Us5isw04IzO/MOh4hlFEvB14emaualtZkiSNPEciSZKkeSMiToyIhWU63Zup1gKaPhpn3oqIX46IX4nKMcBZwGcGHZckSRoOJpEkSdJ88mvAN6iG+P8WcGpm/jAiPhARk00uHxhsuJ2LiDNatOX29o/mQKop2A9TrbvxDuCKXsYrSZLqw+lskiRJkiRJasuRSJIkSZIkSWpr30EHMJNDDz00lyxZ0vHjHn74YZ785Cd3P6A+qGvsdY0b6hu7cfdfN2K/6aabvpuZT+tSSJqF2fQldX5ftjPKbYPRbp9tq6d+tM2+pP/m+rukbkb5f7MZ2zvabO/M5tqXDHUSacmSJdx4440dP25iYoLx8fHuB9QHdY29rnFDfWM37v7rRuwR8W/diUazNZu+pM7vy3ZGuW0w2u2zbfXUj7bZl/TfXH+X1M0o/282Y3tHm+2d2Vz7kllNZ4uIrRFxa0TcEhE3lrKDI2JzRNxdrg8q5RER74mILRHx1Yh4QcN+VpX6d0eEp4qVJEmSJEmqiU7WRPqNzDw6M5eX+2uBazJzKXBNuQ9wErC0XFYDF0GVdALOA44FjgHOm0o8SZIkSZIkabjtzcLaK4GN5fZG4NSG8kuyci2wMCIOB04ENmfmzszcBWwGVuzF80uSJEmSJKlPZrsmUgKfi4gE/j4z1wNjmbkDIDN3RMRhpe4i4L6Gx24rZa3KHyciVlONYGJsbIyJiYnZt6aYnJyc0+OGQV1jr2vcUN/Yjbv/6hy7JEmSJO2t2SaRXpSZ20uiaHNEfG2GutGkLGcof3xBlaBaD7B8+fKcy0JYdV5Aq66x1zVuqG/sxt1/dY5dkiRJkvbWrKazZeb2cv0A8BmqNY3uL9PUKNcPlOrbgCMaHr4Y2D5DuSRJkiRJkoZc2yRSRDw5Ig6cug2cANwGbAKmzrC2Crii3N4EvLqcpe044KEy7e1q4ISIOKgsqH1CKZMkSZIkSdKQm810tjHgMxExVf/jmfnPEXEDcHlEnAV8Ezit1L8KOBnYAjwCvAYgM3dGxPnADaXeWzNzZ9daIkmSJEmSpJ5pm0TKzHuA5zUp/x5wfJPyBM5usa8NwIbOw5QkSZIkSdIgzXZh7ZG2ZO2Ve5RtXXfKACKRJEnSKPL7pobR9PflmmW7ObPJexV8v0qqzGphbUmSJEmSJM1vJpEkSZIkSZLUlkkkSZIkSUMvIp4YEddHxFci4vaI+MtSfmREXBcRd0fEZRGxXynfv9zfUrYvadjXuaX8rog4cTAtkqT6MYkkSZIkqQ5+DLw4M58HHA2siIjjgLcDF2bmUmAXcFapfxawKzOfBVxY6hERRwGnA88BVgDvj4gFfW2JJNWUSSRJkiRJQy8rk+XuE8olgRcDnyzlG4FTy+2V5T5l+/EREaX80sz8cWbeC2wBjulDEySp9jw7myRJkqRaKCOGbgKeBbwP+AbwYGbuLlW2AYvK7UXAfQCZuTsiHgIOKeXXNuy28TGNz7UaWA0wNjbGxMREt5szcGuW7X7c/bED9iybMortn5ycHMl2tWJ7R1u/2msSSZIkSVItZOZPgaMjYiHwGeDZzaqV62ixrVX59OdaD6wHWL58eY6Pj88l5KF25torH3d/zbLdvOPW5j8Rt54x3oeI+mtiYoJRfF1bsb2jrV/tdTqbJEmSpFrJzAeBCeA4YGFETGU+FgPby+1twBEAZftTgZ2N5U0eI0magUkkSZIkSUMvIp5WRiAREQcAvwncCXwBeFmptgq4otzeVO5Ttn8+M7OUn17O3nYksBS4vj+tkKR6czqbJEmSpDo4HNhY1kXaB7g8Mz8bEXcAl0bE24AvAxeX+hcDH42ILVQjkE4HyMzbI+Jy4A5gN3B2mSYnSWrDJJIkSZKkoZeZXwWe36T8HpqcXS0zfwSc1mJfFwAXdDtGSRp1TmeTJEmSJElSWyaRJEmSJEmS1JZJJEmSJEmSJLVlEkmSJEmSJEltmUSSJEmSJElSWyaRJEk9FxEbIuKBiLitoex/RsTXIuKrEfGZiFjYsO3ciNgSEXdFxIkN5StK2ZaIWNvvdkiSJEnzmUkkSVI/fARYMa1sM/DczPwV4OvAuQARcRRwOvCc8pj3R8SCiFgAvA84CTgKeGWpK0mSJKkPTCJJknouM78I7JxW9rnM3F3uXgssLrdXApdm5o8z815gC3BMuWzJzHsy8yfApaWuJEmSpD7Yd9ABSJIEvBa4rNxeRJVUmrKtlAHcN6382GY7i4jVwGqAsbExJiYmZnzyycnJtnXqapTbBqPdPttWT63atmbZ7j3KRvVvIEkaXSaRJEkDFRH/DdgNfGyqqEm1pPno2Wy2z8xcD6wHWL58eY6Pj88Yw8TEBO3q1NUotw1Gu322rZ5ate3MtVfuUbb1jD3rSZI0zEwiSZIGJiJWAS8Fjs/MqYTQNuCIhmqLge3ldqtySZIkST3mmkiSpIGIiBXAm4DfzsxHGjZtAk6PiP0j4khgKXA9cAOwNCKOjIj9qBbf3tTvuCVJkqT5ypFIkqSei4hPAOPAoRGxDTiP6mxs+wObIwLg2sz8g8y8PSIuB+6gmuZ2dmb+tOznHOBqYAGwITNv73tjJEmSpHnKJJIkqecy85VNii+eof4FwAVNyq8CrupiaJIkSZJmyelskiRJkiRJasskkiRJkiRJktoyiSRJkiRJkqS2TCJJkiRJkiSpLRfWbmHJ2iublm9dd0qfI5EkSZIkSRo8RyJJkiRJkiSpLZNIkiRJkiRJasskkiRJkiRJktoyiSRJkiRJkqS2Zp1EiogFEfHliPhsuX9kRFwXEXdHxGURsV8p37/c31K2L2nYx7ml/K6IOLHbjZEkSZIkSVJvdDIS6fXAnQ333w5cmJlLgV3AWaX8LGBXZj4LuLDUIyKOAk4HngOsAN4fEQv2LnxJkiRJkiT1w6ySSBGxGDgF+FC5H8CLgU+WKhuBU8vtleU+Zfvxpf5K4NLM/HFm3gtsAY7pRiMkSZIkSZLUW/vOst67gDcCB5b7hwAPZubucn8bsKjcXgTcB5CZuyPioVJ/EXBtwz4bH/OoiFgNrAYYGxtjYmJitm151OTkZEePW7Nsd/tKxVzi6USnsQ+LusYN9Y3duPuvzrFLklR3EXEEcAnwdOBnwPrMfHdEvAX4feA7peqbM/Oq8phzqWZK/BT4k8y8upSvAN4NLAA+lJnr+tkWSaqrtkmkiHgp8EBm3hQR41PFTapmm20zPeaxgsz1wHqA5cuX5/j4+PQqbU1MTNDJ485ce+Ws6249o/N4OtFp7MOirnFDfWM37v6rc+ySJI2A3cCazLw5Ig4EboqIzWXbhZn5t42Vpy2n8QzgXyLiF8vm9wEvoTqwfUNEbMrMO/rSCkmqsdmMRHoR8NsRcTLwRODnqEYmLYyIfctopMXA9lJ/G3AEsC0i9gWeCuxsKJ/S+BhJkiRJaikzdwA7yu0fRMSdNJnZ0ODR5TSAeyOicTmNLZl5D0BEXFrqmkSSpDbaJpEy81zgXIAyEunPM/OMiPgH4GXApcAq4IrykE3l/r+W7Z/PzIyITcDHI+KdVEcClgLXd7c5kiRJkkZdOQP084HrqA56nxMRrwZupBqttIuZl9O4b1r5sU2eY6+X2Rh205f1GDug9VIfo9j++bZUge0dbf1q72zXRGrmTcClEfE24MvAxaX8YuCjJdO/k2oIKZl5e0RcTpXh3w2cnZk/3YvnlyRJkjTPRMRTgE8Bb8jM70fERcD5VEtlnA+8A3gtrZfTaHZyoZ4sszHspi/rsWbZbt5xa/OfiL1e1mMQ5ttSBbZ3tPWrvR0lkTJzApgot++hydnVMvNHwGktHn8BcEGnQUqSJElSRDyBKoH0scz8NEBm3t+w/YPAZ8vdmZbTcJkNSZqDZll4SZIkSRoqERFUsx7uzMx3NpQf3lDtd4Dbyu1NwOkRsX9EHMljy2ncACyNiCMjYj+qmROb+tEGSaq7vZnOJkmSJEn98iLgVcCtEXFLKXsz8MqIOJpqStpW4L/AzMtpRMQ5wNXAAmBDZt7ez4ZIUl2ZRJIkSZI09DLzSzRf5+iqGR7TdDmNzLxqpsdJkppzOpskSZIkSZLaMokkSZIkSZKktkwiSZJ6LiI2RMQDEXFbQ9nBEbE5Iu4u1weV8oiI90TEloj4akS8oOExq0r9uyNi1SDaIkmSJM1XJpEkSf3wEWDFtLK1wDWZuRS4ptwHOInqDDpLgdXARVAlnYDzgGOBY4DzphJPkiRJknrPJJIkqecy84vAzmnFK4GN5fZG4NSG8kuyci2wsJy++URgc2buzMxdwGb2TExJkiRJ6hGTSJKkQRnLzB0A5fqwUr4IuK+h3rZS1qpckiRJUh/sO+gAJEmaptnpm3OG8j13ELGaaiocY2NjTExMzPiEk5OTbevU1Si3DUa7fbatnlq1bc2y3XuUjerfQJI0ukwiSZIG5f6IODwzd5Tpag+U8m3AEQ31FgPbS/n4tPKJZjvOzPXAeoDly5fn+Ph4s2qPmpiYoF2duhrltsFot8+21VOrtp259so9yraesWc9SZKGmdPZJEmDsgmYOsPaKuCKhvJXl7O0HQc8VKa7XQ2cEBEHlQW1TyhlkiRJkvrAkUiSpJ6LiE9QjSI6NCK2UZ1lbR1weUScBXwTOK1Uvwo4GdgCPAK8BiAzd0bE+cANpd5bM3P6Yt2SJEmSesQkkiSp5zLzlS02Hd+kbgJnt9jPBmBDF0OTJEmSNEtOZ5MkSZIkSVJbJpEkSZIkSZLUlkkkSZIkSZIktWUSSZIkSZIkSW2ZRJIkSZIkSVJbJpEkSZIkSZLUlkkkSZIkSZIktWUSSZIkSZIkSW2ZRJIkSZIkSVJbJpEkSZIkSZLUlkkkSZIkSZIktWUSSZIkSZIkSW2ZRJIkSZIkSVJbJpEkSZIkSZLUlkkkSZIkSZIktWUSSZIkSdLQi4gjIuILEXFnRNweEa8v5QdHxOaIuLtcH1TKIyLeExFbIuKrEfGChn2tKvXvjohVg2qTJNWNSSRJkiRJdbAbWJOZzwaOA86OiKOAtcA1mbkUuKbcBzgJWFouq4GLoEo6AecBxwLHAOdNJZ4kSTPbd9ABSJIkabgsWXtl0/Kt607pcyTSYzJzB7Cj3P5BRNwJLAJWAuOl2kZgAnhTKb8kMxO4NiIWRsThpe7mzNwJEBGbgRXAJ/rWGEmqKZNIkiRJkmolIpYAzweuA8ZKgonM3BERh5Vqi4D7Gh62rZS1Kp/+HKupRjAxNjbGxMREV9swDNYs2/24+2MH7Fk2ZRTbPzk5OZLtasX2jrZ+tdckkiRJkqTaiIinAJ8C3pCZ34+IllWblOUM5Y8vyFwPrAdYvnx5jo+PzyneYXbmtFGHa5bt5h23Nv+JuPWM8T5E1F8TExOM4uvaiu0dbf1qr2siSZIkSaqFiHgCVQLpY5n56VJ8f5mmRrl+oJRvA45oePhiYPsM5ZKkNtomkSLiiRFxfUR8pZwF4S9L+ZERcV05o8FlEbFfKd+/3N9Sti9p2Ne5pfyuiDixV42SJEmSNFqiGnJ0MXBnZr6zYdMmYOoMa6uAKxrKX13O0nYc8FCZ9nY1cEJEHFQW1D6hlEmS2pjNSKQfAy/OzOcBRwMryofw24ELy1kQdgFnlfpnAbsy81nAhaUe5cwJpwPPoVq47v0RsaCbjZEkSZI0sl4EvAp4cUTcUi4nA+uAl0TE3cBLyn2Aq4B7gC3AB4E/AigLap8P3FAub51aZFuSNLO2ayKVsxlMlrtPKJcEXgz8binfCLyF6rSZK8ttgE8C7y1HDVYCl2bmj4F7I2IL1Sk1/7UbDZEkSVLnWp2JTRo2mfklmq9nBHB8k/oJnN1iXxuADd2LTpLmh1mtiRQRCyLiFqr5xZuBbwAPZubU0v2NZzR49GwHZftDwCHM8iwIkqT5JSL+tEyXvi0iPlGmUXc8ZVqSJElSb83q7GyZ+VPg6IhYCHwGeHazauV6r86C0I1TaXZ6artWp7FsptenzKvraQjrGjfUN3bj7r86xz6sImIR8CfAUZn5w4i4nGrq88lUU6YvjYgPUE2VvoiGKdMRcTrVlOlXDCh8SZIkaV6ZVRJpSmY+GBETwHHAwojYt4w2ajyjwdTZDrZFxL7AU4GdzPIsCN04lWanp7abfmrLmfT61JZ1PQ1hXeOG+sZu3P1X59iH3L7AARHx78CTgB10OGW6TFmQJEmS1ENtk0gR8TTg30sC6QDgN6mO/H4BeBlwKXueBWEV1VpHLwM+n5kZEZuAj0fEO4FnAEuB67vcHklSjWTmtyLib4FvAj8EPgfcxCynTEfE1JTp7zbut9NRraM8ymyU2waj3b5+tW0QI7Ln4+vW7O88qn8DSdLoms1IpMOBjeVMavsAl2fmZyPiDuDSiHgb8GWq021Srj9aFs7eSTUtgcy8vUxTuAPYDZxdpslJkuapcmrllcCRwIPAPwAnNanabsr04ws6HNU6yqPMRrltMNrt61fbBjEiez6+bs3+zr0e4S5JUrfN5uxsXwWe36T8Hqqzq00v/xFwWot9XQBc0HmYkqQR9ZvAvZn5HYCI+DTwQjqfMi1JkiSpx2Z1djZJknrkm8BxEfGkiAiqUzTfwWNTpqH5lGlomDLdx3glSZKkecskkiRpYDLzOqoFsm8GbqXql9YDbwL+rEyNPoTHT5k+pJT/GbC270FLkiRJ81RHZ2eTJKnbMvM84LxpxR1PmdbwWNJijZ2t607pcySSJEnqJkciSZIkSZIkqa15NRKp1ZFRSZIkSRpV/g6S1C2ORJIkSZIkSVJb82okUje4zoMkSZIkSZqPHIkkSZIkSZKktkwiSZIkSZIkqS2TSJIkSZIkSWrLJJIkSZIkSZLaMokkSZIkSZKktkwiSZIkSZIkqS2TSJIkSZIkSWpr30EHIEmS5ocla69sWr513Sl9jkSSJElzYRJJkiRpHmiVxJMkSZotp7NJkiRJkiSpLZNIkiRJkiRJasvpbJIkSZIk1VCzqcquNaheciSSJEmSJEmS2jKJJEmSJGnoRcSGiHggIm5rKHtLRHwrIm4pl5Mbtp0bEVsi4q6IOLGhfEUp2xIRa/vdDkmqM5NIkiRJkurgI8CKJuUXZubR5XIVQEQcBZwOPKc85v0RsSAiFgDvA04CjgJeWepKkmbBNZEkSZIkDb3M/GJELJll9ZXApZn5Y+DeiNgCHFO2bcnMewAi4tJS944uhytJI8kkkiRJkqQ6OyciXg3cCKzJzF3AIuDahjrbShnAfdPKj22204hYDawGGBsbY2Jiosth98+aZbtnVW/sgNZ169z+ViYnJ2vfrmavV6s2jUJ7O2F7e8MkkiRJkqS6ugg4H8hy/Q7gtUA0qZs0X84jm+04M9cD6wGWL1+e4+PjXQh3MM5scgavZtYs2807bm3+E3HrGeNdjGg4TExMUOfXFZq/tq1eq1Fobydsb2+YRJIkSZJUS5l5/9TtiPgg8NlydxtwREPVxcD2crtVuSSpDRfWliRJklRLEXF4w93fAabO3LYJOD0i9o+II4GlwPXADcDSiDgyIvajWnx7Uz9jlqQ6cySSJGmgImIh8CHguVRTCl4L3AVcBiwBtgIvz8xdERHAu4GTgUeAMzPz5gGErXluSbPpA+tOGUAke2oWmzQKIuITwDhwaERsA84DxiPiaKr+YyvwXwAy8/aIuJxqwezdwNmZ+dOyn3OAq4EFwIbMvL3PTZGk2jKJJEkatHcD/5yZLytHhZ8EvBm4JjPXRcRaYC3wJqpTMi8tl2Op1sJouiCqJGm0ZOYrmxRfPEP9C4ALmpRfBVzVxdAkad5wOpskaWAi4ueAX6f8CMjMn2Tmg1SnW95Yqm0ETi23VwKXZOVaYOG0qYvVaHYAACAASURBVAySJEmSesSRSJKkQXom8B3gwxHxPOAm4PXAWGbuAMjMHRFxWKm/iD1PzbwI2NG4005PyzzKp4AdRNtmeyrpKXsT36Beu05OqTxXc21bp3//TnSrjfPxf64f7xlJknrNJJIkaZD2BV4A/HFmXhcR76aautZKq1M2P76gw9Myj/IpYAfRttmeSnrK3pw2elCvXSenVJ6rubat079/J7rVxvn4P9eP94wkSb3mdDZJ0iBtA7Zl5nXl/iepkkr3T01TK9cPNNT31MySJEnSAJhEkiQNTGZ+G7gvIn6pFB1PdSadTcCqUrYKuKLc3gS8OirHAQ9NTXuTJEmS1FtOZ5MkDdofAx8rZ2a7B3gN1UGOyyPiLOCbwGml7lXAycAW4JFSV5IkSVIfmESSJA1UZt4CLG+y6fgmdRM4u+dBqa+WNFsrZt0pA4hkT81ikyRJmq/aJpEi4gjgEuDpwM+A9Zn57og4GLgMWAJsBV6embsiIoB3Ux0pfgQ4MzNvLvtaBfxF2fXbMnMjkiRJmhOTXJIkqZ9msybSbmBNZj4bOA44OyKOojp7zjWZuRS4hsfOpnMSsLRcVgMXAZSk03nAscAxwHkRcVAX2yJJkiRJkqQeaZtEyswdUyOJMvMHwJ3AImAlMDWSaCNwarm9ErgkK9cCC8uZdU4ENmfmzszcBWwGVnS1NZIkSZIkSeqJjtZEioglwPOB64CxqTPiZOaOiDisVFsE3NfwsG2lrFX59OdYTTWCibGxMSYmJjoJEYDJycmmj1uzbHfH+5qtucTZTKvYh11d44b6xm7c/Vfn2CVJkiRpb806iRQRTwE+BbwhM79fLX3UvGqTspyh/PEFmeuB9QDLly/P8fHx2Yb4qImJCZo97swerhuw9Yw9n28uWsU+7OoaN9Q3duPuvzrHLkndMMyLoEuSpN6bzZpIRMQTqBJIH8vMT5fi+8s0Ncr1A6V8G3BEw8MXA9tnKJckSZIkSdKQa5tEKmdbuxi4MzPf2bBpE7Cq3F4FXNFQ/uqoHAc8VKa9XQ2cEBEHlQW1TyhlkiRJkiRJGnKzmc72IuBVwK0RcUspezOwDrg8Is4CvgmcVrZdBZwMbAEeAV4DkJk7I+J84IZS762ZubMrrZAkSZIkSVJPtU0iZeaXaL6eEcDxTeoncHaLfW0ANnQSoCRJGl7N1siRJEnSaJrVmkiSJEmSJEma32Z9djZJkqR+aTXCyTOBSZIkDY4jkSRJkiRJktSWI5EkSZK6wNFTkiRp1DkSSZIkSZIkSW05EkmSJInhONNcYwxrlu3mzHLf0UySJGkYmETqkmZfPP3CJ0mSnOYmSZJGhUkkSZJUG9MTMlOjdUzISJIk9Z5JJEmSpAHoZPrcMEy1kyRJMokkSZIkSdKIaHXg4SMrntznSDSKTCJJkqTa62RtQkf1SPUUERuAlwIPZOZzS9nBwGXAEmAr8PLM3BURAbwbOBl4BDgzM28uj1kF/EXZ7dsyc2M/2yFJdbbPoAOQJEmSpFn4CLBiWtla4JrMXApcU+4DnAQsLZfVwEXwaNLpPOBY4BjgvIg4qOeRS9KIMIkkSZIkaehl5heBndOKVwJTI4k2Aqc2lF+SlWuBhRFxOHAisDkzd2bmLmAzeyamJEktOJ1NkiRJUl2NZeYOgMzcERGHlfJFwH0N9baVslble4iI1VSjmBgbG2NiYqK7kffRmmW7Z1Vv7IDWdevc/lYmJyeHrl23fuuhpuXLFj21aflsX1sYzvb2ku3tDZNIkqSBi4gFwI3AtzLzpRFxJHApcDBwM/CqzPxJROwPXAL8X8D3gFdk5tYBhS1JGl7RpCxnKN+zMHM9sB5g+fLlOT4+3rXg+u3MWa4Ft2bZbt5xa/OfiFvPGO9iRMNhYmKCYXtdW71Wrf7+s31toVpYe9ja20vD+Pr2Ur/a63Q2SdIweD1wZ8P9twMXljUudgFnlfKzgF2Z+SzgwlJPkjR/3V+mqVGuHyjl24AjGuotBrbPUC5JmgVHIkmSBioiFgOnABcAf1bOqPNi4HdLlY3AW6gWRV1ZbgN8EnhvRERmNj2KrO7xjGaShtQmYBWwrlxf0VB+TkRcSrWI9kNlutvVwF81LKZ9AnBun2OWpNoyiSRJGrR3AW8EDiz3DwEezMypSf6N61U8upZFZu6OiIdK/e/2L1xJ0iBExCeAceDQiNhGdZa1dcDlEXEW8E3gtFL9KuBkYAvwCPAagMzcGRHnAzeUem/NzOmLdUuSWjCJJEkamIh4KfBAZt4UEeNTxU2q5iy2Ne63o8VQR3nhxW61rZOFO/tppkVg/+5jVzQtX7OslxF1z0xtGyZzeX/Nx/+5Zq/lqP4NeiUzX9li0/FN6iZwdov9bAA2dDE0SZo3TCJJkgbpRcBvR8TJwBOBn6MambQwIvYto5Ea16uYWstiW0TsCzyVPU/33PFiqKO88GK32tbJwp39NNMisHVXm7bd+nDT4q3rTmn5kPn4P9fsf2gUFyqWJI02F9aWJA1MZp6bmYszcwlwOvD5zDwD+ALwslJt+hoXq8rtl5X6rockSZIk9YFJJEnSMHoT1SLbW6jWPLq4lF8MHFLK/wxYO6D4JEmSpHmnBmOkJUnzQWZOABPl9j3AMU3q/IjHFk2VJEmS1EcmkSRJktR1S1qsozXTWkm92IckSeoep7NJkiRJkiSpLUciSZIkqVZajVBqxlFLkiR1j0kkSZIkSeojp2pKqiuns0mSJEmSJKktk0iSJEmSJElqyySSJEmSJEmS2jKJJEmSJEmSpLZMIkmSJEmSJKktk0iSJEmSJElqa99BByBJkqT5Y8naK1mzbDdnNpzi3NOaS5JUDyaRJEnS4yxp+HEvSZIkTWmbRIqIDcBLgQcy87ml7GDgMmAJsBV4eWbuiogA3g2cDDwCnJmZN5fHrAL+ouz2bZm5sbtNkSRJUh31MnHZat+OfpIkqXOzGYn0EeC9wCUNZWuBazJzXUSsLfffBJwELC2XY4GLgGNL0uk8YDmQwE0RsSkzd3WrIcPILy2SJEmSJGlUtF1YOzO/COycVrwSmBpJtBE4taH8kqxcCyyMiMOBE4HNmbmzJI42Ayu60QBJkiRJkiT13lzXRBrLzB0AmbkjIg4r5YuA+xrqbStlrcr3EBGrgdUAY2NjTExMdBzc5OQkf/exK/YoX7Os4131xExtmpycnFObB62ucUN9Yzfu/qtz7JIkSZK0t7q9sHY0KcsZyvcszFwPrAdYvnx5jo+PdxzExMQE7/jSwx0/rl+2njHectvExARzafOg1TVuqG/sxt1/dY5dkiRJ9eVJLzQs5ppEuj8iDi+jkA4HHijl24AjGuotBraX8vFp5RNzfG5JktTC9C+Za5btflwHLEnSXLjeqySYexJpE7AKWFeur2goPyciLqVaWPuhkmi6GviriDio1DsBOHfuYUuSpNnyi78kSZK6oW0SKSI+QTWK6NCI2EZ1lrV1wOURcRbwTeC0Uv0q4GRgC/AI8BqAzNwZEecDN5R6b83M6Yt1S5IkSZKkIeWBKbVNImXmK1tsOr5J3QTObrGfDcCGjqKTJKnG/KIlDa9m/5/+b0qSNLNuL6wtSZJqwkU6JUmS1Il9Bh2AJEmSJO2NiNgaEbdGxC0RcWMpOzgiNkfE3eX6oFIeEfGeiNgSEV+NiBcMNnpJqg+TSJIkSZJGwW9k5tGZubzcXwtck5lLgWvKfYCTgKXlshq4qO+RSlJNmUSSJA1MRBwREV+IiDsj4vaIeH0p9+ixJGlvrQQ2ltsbgVMbyi/JyrXAwog4fBABSlLduCaSJGmQdgNrMvPmiDgQuCkiNgNnUh09XhcRa6mOHr+Jxx89Ppbq6PGxA4lckjRMEvhcRCTw95m5HhjLzB0AmbkjIg4rdRcB9zU8dlsp29G4w4hYTTVSibGxMSYmJroW7Jplu5uWd/M5ZvN8040dMPu6U3oVcz9MTk4OXfyd/v070Ul7b/3WQ03L1yxrXn/Y/o4wnK9vL/WrvSaRJEkDU77cT33B/0FE3En1RX4lMF6qbQQmqJJIjx49Bq6NiIURcfjUj4RR5OLXkjQrL8rM7SVRtDkivjZD3WhSlnsUVImo9QDLly/P8fHxrgQKcGars3ee0b3nmM3zTbdm2W7ecWtnPxF7FXM/TExM0M3XtRtm+1rNxUdWPHnW7e00jmF8Hwzj69tL/WqvSSRJ0lCIiCXA84Hr6PPR414duenGkea9PSI5l6PKdTLK7bNt/deNz4FWnyfN2jufjpD3WmZuL9cPRMRngGOA+6cONJTpag+U6tuAIxoevhjY3teAJammTCJJkgYuIp4CfAp4Q2Z+P6LZQeKqapOyvT563KsjN9040ry3RyTnclS5Tka5fbZtAG59uGnx1nWnzHoXrT5Pmv0vD+OR+zqKiCcD+5QRrU8GTgDeCmwCVgHryvUV5SGbgHMi4lKqKdEPjfKIVvVXsxHEnXyG9NKt33qo+WfRkMSnehjC3luSNJ9ExBOoEkgfy8xPl+LaHT122pkkDcwY8JlyAGJf4OOZ+c8RcQNweUScBXwTOK3Uvwo4GdgCPAK8pv8h9479kaReMokkSRqYqL7xXwzcmZnvbNjk0WNJ0qxk5j3A85qUfw84vkl5Amf3ITRJGjkmkSRJg/Qi4FXArRFxSyl7M1XyyKPHkobCME9PkSSpn0wiSZIGJjO/RPN1jsCjx5KkEeABAkmjxCTSALTqSDyiJUmSJEmShpVJJEmS+syj0pIkSaqjfQYdgCRJkiRJkoafI5EkSZIkSZqnHCGtTjgSSZIkSZIkSW05EkmSJEnqUKsj92uW7eZMj+pLkkaUI5EkSZIkSZLUliORhsiStVfucfRq67pTBhiRJEmSJElSxZFIkiRJkiRJasuRSJIkSZI0pFqtvzUsMxaGPb5h4N9Io8QkkiRJkiRJHWiVGJJGnUkkSZIkSRoCJiYkDTvXRJIkSZIkSVJbjkSSJEmSJEl90WzEnetD1YdJpCHnImySJEmSVPH3kTRYJpEkSZIkSUNlPqwPNeptHPX2zVcmkSRJkiRJasJEiPR4JpFqymGcktR7fnGUJElqz+9M84dJJEmSJElSV3WSVBiWA+EmQqT2TCJJkiRJUs2Y8NB81qszvDnjpz2TSJIkSZIkaWBM3tSHSaQRU8dho5IkSZIkDSuTXI8xiSRJkiRJGph+T82ber41y3ZzptMCpY6YRJrHejWPVJIkSZL6yd82o8m1v4ZP35NIEbECeDewAPhQZq7rdwxqzWF6kurAvkSStLfsS6T5oZeJqPmYvOxrEikiFgDvA14CbANuiIhNmXlHP+NQ50wuSRoW9iWSpL1lXzI/OIplfpn+ejtdsTf6PRLpGGBLZt4DEBGXAisBP6xrqo7ziU18SbVnXyJJ2lv2JZJ6ot/Jy37/vo3M7N+TRbwMWJGZryv3XwUcm5nnNNRZDawud38JuGsOT3Uo8N29DHdQ6hp7XeOG+sZu3P3Xjdh/PjOf1o1g5qse9SV1fl+2M8ptg9Fun22rp360zb5kL/Xxd0ndjPL/ZjO2d7TZ3pnNqS/p90ikaFL2uCxWZq4H1u/Vk0TcmJnL92Yfg1LX2OsaN9Q3duPuvzrHPmK63peM8ms7ym2D0W6fbaunUW7biOnL75K6mW/vX9s72mxvb+zT6yeYZhtwRMP9xcD2PscgSao3+xJJ0t6yL5GkOeh3EukGYGlEHBkR+wGnA5v6HIMkqd7sSyRJe8u+RJLmoK/T2TJzd0ScA1xNdSrNDZl5ew+eqs7DTusae13jhvrGbtz9V+fYR0aP+pJRfm1HuW0w2u2zbfU0ym0bGX38XVI38+39a3tHm+3tgb4urC1JkiRJkqR66vd0NkmSJEmSJNWQSSRJkiRJkiS1NXJJpIhYERF3RcSWiFg7BPFsiIgHIuK2hrKDI2JzRNxdrg8q5RER7ymxfzUiXtDwmFWl/t0RsaoPcR8REV+IiDsj4vaIeH2NYn9iRFwfEV8psf9lKT8yIq4rcVxWFlEkIvYv97eU7Usa9nVuKb8rIk7sdezlORdExJcj4rN1iTsitkbErRFxS0TcWMqG/r1SnnNhRHwyIr5W3u+/VpfY1R3D1m/sjU76nLrptF+qk077rTqabd9WR530gdIwafXZ07D97yJiclDxddsMn7URERdExNdLH/Mng461G2Zo7/ERcXP5zPpSRDxr0LF2yyj3Nc00ae/Hynfa28p3wif05Ikzc2QuVIvifQN4JrAf8BXgqAHH9OvAC4DbGsr+Blhbbq8F3l5unwz8ExDAccB1pfxg4J5yfVC5fVCP4z4ceEG5fSDwdeComsQewFPK7ScA15WYLgdOL+UfAP6w3P4j4APl9unAZeX2UeU9tD9wZHlvLejDe+bPgI8Dny33hz5uYCtw6LSyoX+vlOfdCLyu3N4PWFiX2L105fUfun5jL9sz6z6nbhc67JfqdOm036rjZbZ9Wx0vnfSBXrwM06XVZ0+5vxz4KDA56Dh73V7gNcAlwD5l22GDjrXH7f068OxS/kfARwYdaxfbPLJ9zSzbe3J53QP4RK/aO2ojkY4BtmTmPZn5E+BSYOUgA8rMLwI7pxWvpPrhSrk+taH8kqxcCyyMiMOBE4HNmbkzM3cBm4EVPY57R2beXG7/ALgTWFST2DMzp46aPKFcEngx8MkWsU+16ZPA8RERpfzSzPxxZt4LbKF6j/VMRCwGTgE+VO5HHeJuYejfKxHxc1Q/ui8GyMyfZOaDdYhdXTN0/cbe6LDPqZU59Eu1MYd+q1Y67NtGRe3flxp9rT57ImIB8D+BNw4suB6Y4bP2D4G3ZubPSr0HBhRiV83Q3gR+rpQ/Fdg+gPC6br71NdPbC5CZV5XXPYHrgcW9eO5RSyItAu5ruL+tlA2bsczcAdWXYuCwUt4q/oG2K6ppUs+nyl7XIvYytO8W4AGqH/TfAB7MzN1N4ng0xrL9IeCQAcX+LqoO+2fl/iHUI+4EPhcRN0XE6lJWh/fKM4HvAB8uQ0E/FBFPrkns6o758Nq1ej/X1iz7pVrpsN+qm076tjrqpA+Uhsr0z57MvA44B9g09R4eJS3a+wvAKyLixoj4p4hYOtgou6dFe18HXBUR24BXAesGGWMXjXpfM9309j6qTGN7FfDPvXjiUUsiRZOy7HsUc9cq/oG1KyKeAnwKeENmfn+mqk3KBhZ7Zv40M4+myr4eAzx7hjiGIvaIeCnwQGbe1Fg8QwxDEXfxosx8AXAScHZE/PoMdYcp7n2ppv5clJnPBx6mmnbQyjDFru7wtauZDvqlWumw36qNOfRtddRJHygNlemfPeX9exrwd4ONrDeatPe5VEtA/CgzlwMfBDYMMsZuatHePwVOzszFwIeBdw4yxm6YJ33No1q0t9H7gS9m5v/pxfOPWhJpG3BEw/3FDOfwvPvLFBjK9dSQyVbxD6RdJYP5KeBjmfnpUlyL2KeUqUkTVPN/F0bEvk3ieDTGsv2pVNNB+h37i4DfjoitVFNqXkyVYR72uMnM7eX6AeAzVD+A6vBe2QZsK0dloBru+gLqEbu6Yz68dq3ez7XTYb9US7Pst+qk076tdjrsA6Wh1PDZ8xvAs4At5f/2SRGxZYCh9URDe1dQfRf4VNn0GeBXBhRWzzS09yTgeQ3ffS8DXjiouLpo5PuaafZob0T8PwARcR7wNKr1knpi1JJINwBLyyrs+1EtNrxpwDE1swmYOnvTKuCKhvJXlzMEHAc8VIaRXg2cEBEHRXV2jxNKWc+UOaQXA3dmZmN2ug6xPy0iFpbbBwC/SbV2xheAl7WIfapNLwM+X+aRbgJOj+osaEcCS6nmlvZEZp6bmYszcwnVe/fzmXnGsMcdEU+OiAOnblO9xrdRg/dKZn4buC8ifqkUHQ/cUYfY1TV16Tf2Rqv3c63MoV+qjTn0W7Uxh76tVubQB0pDo8Vnz02Z+fTMXFL+bx/JzJE4e1eL9n4N+F9USQeA/0y18HTtzdC3PDUifrFUe0kpq7VR72uma9He34uI11Gt1frKqTW+ehXASF2oViT/OtVaAv9tCOL5BLAD+HeqLPdZVPMzrwHuLtcHl7oBvK/EfiuwvGE/r6VaIHkL8Jo+xP0fqYb7fRW4pVxOrknsvwJ8ucR+G/A/SvkzqZIpW4B/APYv5U8s97eU7c9s2Nd/K226Czipj++bcR5bZX+o4y7xfaVcbp/6v6vDe6U859HAjeX98r+ozq5Wi9i9dO09MFT9xl62ZdZ9Tt0unfZLdbp02m/V9TKbvq1ul077QC9ehunS6rNnWp1ROjtbq8/ahcCV5bvdv1KN1Bl4vD1s7++Utn6FanTSMwcZZw/aPXJ9TQft3V2+z059T9rjf7oblyhPJkmSJEmSJLU0atPZJEmSJEmS1AMmkSRJkiRJktSWSSRJkiRJkiS1ZRJJkiRJkiRJbZlEkiRJkiRJUlsmkSRJkiRJktSWSSRJkiRJkiS1ZRJJkiRJkiRJbZlEkiRJkiRJUlsmkSRJkiRJktSWSSRJkiRJkv5/9u49TrKyPPT974ERBBSHi7QwgxmM6Ak6J2omQHRvT0cUuajjPlGDEplRsicXiBrHyGDMRgVzxmwRMHjwTGQCRMIliGEiRB0vHbc7ARFEBySGCY7QMGFALjIQLy3P+WO9LTU9VV3d1XXv3/fzqU9Xvetdq563qnqtqme977skNWUSSZIkSZIkSU2ZRJIkSZIkSVJTJpEkSZIkSZLUlEkkSZIkSZIkNWUSSZIkSZIkSU2ZRJIkSZIkSVJTJpEkSZIkSZLUlEkkSZIkSZIkNWUSSZIkSZIkSU2ZRJIkSZIkSVJTJpEkSZIkSZLUlEkkSZIkSZIkNWUSSZIkSZIkSU2ZRJIkSZIkSVJTJpEkSZIkSZLUlEkkSZIkSZIkNWUSSZIkSZIkSU2ZRJIkSZIkSVJTJpEkSZIkSZLUlEkkSZIkSZIkNWUSSZIkSZIkSU2ZRJIkSZIkSVJTJpEkSZIkSZLUlEkkSZIkSZIkNWUSSZIkSZIkSU2ZRFLfiogtEfHKDj/H9oh4Thu3lxHx3HZtT5IkSZKkfmESSfNaZj4tM+8EiIiLIuKsXsckSaovIj4QEZ8u959dTgTs2sHnG/rjQkSMRcTv9joOSRoUPTgWfTIi/qxT25dma0GvA5AkSZqtzLwLeFqv45AkzV/dOBZl5u93cvvSbNkTSX0vInaPiHMj4t5yOzcidi/LRiNiPCJWR8S2iNgaEW+rWXe/iPiHiPhRRNwYEWdFxNdrlmdEPDciVgEnAu8tZxP+oXZ5Tf0dzkpHxJ+U57w3It5eJ+6PRsRdEXFfOYuwR+deKUmSJEmSOsckkgbBnwJHAi8CfhU4HHh/zfJnAc8AFgEnA5+IiH3Ksk8Aj5U6K8ptJ5m5DrgU+IsyxO21zYKKiGOA9wCvAg4Fps7f9BHgeSXu55b4/kez7UrSoCtz2v1JRHwnIh6LiAsjYiQi/jEiHo2IL03upyPiyIj454h4OCK+HRGjNds5JCL+qayzEdi/ZtmSkuhfUB6/LSJuL3XvjIjfq6k77QmHJvaJiGvLdm+IiF+u2e5LywmKR8rfl055DV5Z87h2+MNTI+LTEfHD0u4bI2KkLHtGeb22RsQ95eRHw2ES5YTFwxHxwpqyZ0bEf0bEARGxT0R8LiLuj4iHyv3FDbb1ixgbvMazik2SemlYjkVRcxK72TYiYo+IODsiflCOTV+PchI7Il4XEbeVNo5FxK+08lo1e700/EwiaRCcCHwoM7dl5v3AB4G31iz/WVn+s8y8DtgOPL98sf0t4IzMfDwzvwtc3Ma43gT8dWbempmPAR+YXBARAfx34I8z88HMfBT4c+CENj6/JPWz36JKsj8PeC3wj8D7qL587wK8IyIWAdcCZwH7UiXmPxMRzyzb+FvgprLOmTQ4EVBsA14D7A28DTgnIl5Ss3y6Ew7TeTPVcWcfYDPwYYCI2LfE/nFgP+BjwLURsd8MtrmixHJwWff3gf8syy4GJqhOPrwYOBpoOGdRZv4EuLrEOelNwD9l5jaq1/qvgV8Cnl2e5/wZxFjPrGKTpD4wLMeiWtNt46PArwEvLW15L/BERDwPuAx4F/BM4DrgHyJit5rtNn2tAGbwemnImUTSIDgI+EHN4x+Uskk/zMyJmsePU41NfibVvF931yyrvd+OuGq3VxvjM4E9gZtKhv5h4POlXJLmg7/MzPsy8x7gfwE3ZOa3StLjs1RJiN8BrsvM6zLziczcCHwTOC4ing38OvBnmfmTzPwa8A+Nniwzr83Mf8/KPwFfBP5rTZW6Jxxm0I6rM/Mb5ThzKVXvUoDjgTsy828ycyIzLwP+leqLdzM/o0oePTczf56ZN2Xmj0pvpGOBd2XmYyUJdA7NT0D8LTsmkd5SysjMH2bmZ8rJlEepkmD/1wxi3MEcYpOkXhqWY1GtRifQdwHeDrwzM+8px5d/Lm39beDazNyYmT+jSjbtQZVsms1rxXSv1yzboQHlxNoaBPdSnUG9rTx+dilr5n6qM6aLgX8rZQdPUz/rlD1OlQya9CxgvNzfOmV7z665/wDV2d4XlB2xJM0399Xc/886j59GtW9/Y0TUJl6eAnyVKlH/UOnpOekHNNiPR8SxwBlUZ1B3odp3b6qp0uiEQzP/0WCdqSc4JuNbNINt/g1VOy6PiIXAp6mGbv8SVfu3Vh1agaotzU6AfAXYIyKOKPG+iOoLPxGxJ1Wy5xiq3lQAT4+IXTPz5zOIdVKrsUlSLw3LsahWo23sDzwV+Pc66+xwzMrMJyLibnY8Zs3ktYLpXy/NA/ZE0iC4DHh/meNhf6p5hT7dZB3Kl+OrgQ9ExJ4R8X8AJ02zyn3Ac6aU3QK8JSJ2jWoOpNqzt1cCKyPisPIl/Yya534C+CuqLqwHQNX1MyJe3SxuSZpH7gb+JjMX1tz2ysy1VIn6fSJir5r6z66322QndAAAIABJREFUkagutvAZqjOrI5m5kKqrftSr3yaTJzhqPRuYPHHwGDufhACgnD3+YGYeRnUW+DVUx6e7gZ8A+9e8Hntn5gumC6Qcc66k6o30FuBzpdcRwGqqs9xHZObewMtLeb3XpmHMrcYmSQNgkI9FtR4Afgz8cp1lOxyzytQbB/PkMWs2pnu9NA+YRNIgOIuqi+R3qDL5N5eymTiVaszwf1Cd+b2M6ktwPRcCh5XhZ39fyt5JNTThYaq5mSbLycx/BM6lOgO8ufytdVopvz4ifgR8idl3V5WkYfZp4LUR8eqSrH9qmTR0cWb+gGrf/8GI2C0i/guNh4rtBuxO6YFazgQf3eHYrwOeFxFviYgFEfHbwGHA58ryW4ATIuIpEbEMeMPkihHxmxGxtMzd9yOqoQk/z8ytVEMfzo6IvSNil4j45YiYyfCzv6UarnBiuT/p6VRnkB8u8zidUWfdSbcAL4+IZ0fEM4DTJxfMMTZJ6meDfCz6hXJCYT3wsYg4qLTlN0py60rg+Ig4KiKeQnWC4SfAP7fwVA1fr7Y1Rn3NJJL6VmYuycwvZeaPM/MdmXlgub0jM39c6oxl5uJ665X792fm8eVs6a+XKuM1dSMzN5f7d2Tmi0o2/fWl7JuZ+YLMfHpmvjUz35yZ769Zf21mPiszD8rM9VO29+PMfF9mPqc8/69k5sc7+qJJ0gDJzLuB5VQTd95PdXbzT3jy+8lbgCOAB6mSH5c02M6jVBN+Xgk8VNbb0OHYf0jVg2g18EOqyUtfk5kPlCp/RnU2+CGqiblrEzvPAq6iSiDdDvwTT/awPYnqh8h3y7pXAQfOIJ4bqHoSHUQ1Geqkc6nmvXgAuJ5qfr5G29gIXEF10uYmnkyITWopNknqZ4N8LKrjPVQn3W+kivcjwC6Z+T2quYz+kup48FrgtZn509k+wQxeLw25yKw3DYw0HMoQtt2odqa/TnXm+Hcz8++nXVGSJEmSJO3AibU17J5ONYTtIKpLbp4NXNPTiCRJkiRJGkD2RJIkSfNWRNzGzhNkA/xeZl7a7XgaiYhPUg1FmOrTmfn73Y5HktQ+g3IsksAkkiRJkiRJkmagr4ez7b///rlkyZKObf+xxx5jr732al5xgA17G23fYJuP7bvpppseyMxn9iikeanRsWTYP3+TbOdwsZ3DpdV2eizpvnrHkn7+nBrb7PVrXGBsrTK26bV6LOnrJNKSJUv45je/2bHtj42NMTo62rHt94Nhb6PtG2zzsX0R8YPeRDN/NTqWDPvnb5LtHC62c7i02k6PJd1X71jSz59TY5u9fo0LjK1Vxja9Vo8lXoZPkiRJkiRJTZlEkiRJkiRJUlMmkSRJkiRJktSUSSRJkiRJkiQ1ZRJJkiRJkiRJTZlEkiRJkiRJUlNNk0gRcXBEfDUibo+I2yLinaX8AxFxT0TcUm7H1axzekRsjojvRcSra8qPKWWbI2JNZ5okSZIkSZKkdlswgzoTwOrMvDking7cFBEby7JzMvOjtZUj4jDgBOAFwEHAlyLieWXxJ4BXAePAjRGxITO/246GSJIkSZIkqXOa9kTKzK2ZeXO5/yhwO7BomlWWA5dn5k8y8/vAZuDwctucmXdm5k+By0tdSZIkSZpWRKyPiG0RceuU8j8qox1ui4i/qCl3dIQktdlMeiL9QkQsAV4M3AC8DDg1Ik4CvknVW+khqgTT9TWrjfNk0unuKeVH1HmOVcAqgJGREcbGxmYT4qxs3769o9vvB8PexkFu36Z7HtmpbOmiZ+zweJDbNxO2T5I0XyxZc+1OZRcds1cPIhloFwHnA5dMFkTEb1KdmP4/M/MnEXFAKXd0RJvV+wwDbFl7fJcjkdRLM04iRcTTgM8A78rMH0XEBcCZQJa/ZwNvB6LO6kn9Xk+5U0HmOmAdwLJly3J0dHSmIc7a2NgYndx+Pxj2Ng5y+1bWORBvOXF0h8eD3L6ZsH2SJGmmMvNr5aR2rT8A1mbmT0qdbaX8F6MjgO9HxOToCCijIwAiYnJ0hEkkSZqBGSWRIuIpVAmkSzPzaoDMvK9m+V8BnysPx4GDa1ZfDNxb7jcqlyRJkqTZeh7wXyPiw8CPgfdk5o3McXQENB8h0c89jjsR2+qlE3XLZ/s8/fq69WtcYGytMrbOaJpEiogALgRuz8yP1ZQfmJlby8P/BkyOTd4A/G1EfIyq6+ihwDeoeigdGhGHAPdQdS99S7saIknqXxGxHngNsC0zX1jK9gWuAJYAW4A3ZeZD5bhzHnAc8DiwcnJuvohYAby/bPaszLy4m+2QJPWdBcA+wJHArwNXRsRzmOPoCGg+QqKfexzPNLbZDFGr14sedu5J30y/vm79GhcYW6uMrTOaTqxNNffRW4FXRMQt5XYc8BcRsSkivgP8JvDHAJl5G3AlVZfQzwOnZObPM3MCOBX4AtXk3FeWupKk4XcRcMyUsjXAlzPzUODL5THAsVQnIA6lOgN8Afwi6XQG1Rnjw4EzImKfjkcuSepn48DVWfkG8ASwP41HR0w3akKS1ETTnkiZ+XXqZ/Kvm2adDwMfrlN+3XTrSZKGU4N5LJYDo+X+xcAYcFopvyQzE7g+IhZGxIGl7sbMfBAgIjZSJaYu63D4kqT+9ffAK4CxMnH2bsADODpCkjpiVldnkySpjUYmh0Vn5tbJK+pQzVkxdb6KRdOU72QmV/oc5LHos2E7h4vtHFz15pMZxnZ2UkRcRnVCYf+IGKfqnboeWB8RtwI/BVaUkxC3RcTk6IgJyuiIsp3J0RG7AusdHSFJM2cSSZLUbxrNY9GofOfCGVzpc5DHos+G7RwutnNw1ZtP5qJj9hq6dnZSZr65waLfaVDf0RGS1GYzmRNJkqROuK8MU6P8nbwss/NYSJIkSX3IJJIkqVc2ACvK/RXANTXlJ0XlSOCRMuztC8DREbFPmVD76FImSZIkqQscziZJ6rgG81ispboU88nAXcAbS/XrgOOAzcDjwNsAMvPBiDgTuLHU+9DkJNuSJEmSOs8kkiSp46aZx+KoOnUTOKXBdtZTTaIqSZIkqctMIkmSJEmSfmFJnYngJQlMIkmSJEmSWtQo4bRl7fFdjkRSN5hEkiRJXeEPDUmSpMHm1dkkSZIkSZLUlEkkSZIkSZIkNWUSSZIkSZIkSU2ZRJIkSZIkSVJTJpEkSZIkSZLUlEkkSZIkSZIkNWUSSZIkSZIkSU0t6HUAkiRpuCxZc22vQ5AkSVIH2BNJkiRJkiRJTZlEkiRJkiRJUlMmkSRJkiT1vYhYHxHbIuLWOsveExEZEfuXxxERH4+IzRHxnYh4SU3dFRFxR7mt6GYbJGnQmUSSJEmSNAguAo6ZWhgRBwOvAu6qKT4WOLTcVgEXlLr7AmcARwCHA2dExD4djVqShohJJEmSJEl9LzO/BjxYZ9E5wHuBrClbDlySleuBhRFxIPBqYGNmPpiZDwEbqZOYkiTV59XZJEmSJA2kiHgdcE9mfjsiahctAu6ueTxeyhqV19v2KqpeTIyMjDA2NrbD8u3bt+9U1i9mGtvqpRMdi6He82+65xFG9oC/vPSaHcqXLnpGx+KYqWF4P3vB2FrTz7E1YxJJkiRJ0sCJiD2BPwWOrre4TllOU75zYeY6YB3AsmXLcnR0dIflY2NjTC3rFzONbeWaazsWw5YTd37+lWuuZfXSCc7etKBp3W4bhvezF4ytNf0cWzMOZ5MkSZI0iH4ZOAT4dkRsARYDN0fEs6h6GB1cU3cxcO805ZKkGbAnkiRJQ2TJlLPKq5dOMNqbUCSpozJzE3DA5OOSSFqWmQ9ExAbg1Ii4nGoS7Ucyc2tEfAH485rJtI8GTu9y6JI0sOyJJEmSJKnvRcRlwL8Az4+I8Yg4eZrq1wF3ApuBvwL+ECAzHwTOBG4stw+VMknSDNgTSZIkSVLfy8w3N1m+pOZ+Aqc0qLceWN/W4Prc1F6qktQqeyJJkiRJkiSpKZNIkiRJkiRJasrhbJIkSZI0JJasuZbVSydY6RA2SR1gTyRJkiRJkiQ1ZRJJkiRJkiRJTZlEkiRJkiRJUlNN50SKiIOBS4BnAU8A6zLzvIjYF7gCWAJsAd6UmQ9FRADnAccBjwMrM/Pmsq0VwPvLps/KzIvb2xxJktQJjS4PvWXt8V2ORJIkSb0yk55IE8DqzPwV4EjglIg4DFgDfDkzDwW+XB4DHAscWm6rgAsAStLpDOAI4HDgjIjYp41tkSRJkiRJUoc0TSJl5tbJnkSZ+ShwO7AIWA5M9iS6GHh9ub8cuCQr1wMLI+JA4NXAxsx8MDMfAjYCx7S1NZIkSZIkSeqIpsPZakXEEuDFwA3ASGZuhSrRFBEHlGqLgLtrVhsvZY3Kpz7HKqoeTIyMjDA2NjabEGdl+/btHd1+Pxj2Ng5y+1YvndipbGpbBrl9M2H7JEmSJGlwzDiJFBFPAz4DvCszf1RNfVS/ap2ynKZ8x4LMdcA6gGXLluXo6OhMQ5y1sbExOrn9fjDsbRzk9q2sM7/IlhNHd3g8yO2bCdsnqRHnYJIkSeo/M0oiRcRTqBJIl2bm1aX4vog4sPRCOhDYVsrHgYNrVl8M3FvKR6eUj7UeuiRpGETEHwO/S3ViYRPwNuBA4HJgX+Bm4K2Z+dOI2J3qYg+/BvwQ+O3M3NKLuIdBOxI1jbYhSZKk4dN0TqRytbULgdsz82M1izYAK8r9FcA1NeUnReVI4JEy7O0LwNERsU+ZUPvoUiZJmqciYhHwDmBZZr4Q2BU4AfgIcE65eMNDwMlllZOBhzLzucA5pZ4kSZKkLphJT6SXAW8FNkXELaXsfcBa4MqIOBm4C3hjWXYdcBywGXic6owymflgRJwJ3FjqfSgzH2xLKyRJg2wBsEdE/AzYE9gKvAJ4S1l+MfABqqt9Li/3Aa4Czo+IyMydhkcPO3sASZL6mccpaTg1TSJl5tepP58RwFF16idwSoNtrQfWzyZASdLwysx7IuKjVCcj/hP4InAT8HBmTs4+X3shhl9cpCEzJyLiEWA/4IHa7c7kIg2DPvF5vcn56xnZY+dJ+5tto179mT5fK2bzfI3aMujv50zZzsFV7zM9jO2UJA23WV2dTZKkdirDm5cDhwAPA38HHFun6mRPo7ZdpGHQJz6vNzl/PauXTvCmBu1stI2pk/zP5vlaMZvnq1cXBv/9nCnbObjqfaYvOmavoWunJGm4NZ0TSZKkDnol8P3MvD8zfwZcDbwUWBgRkyc6Ji/QADUXbyjLnwE4NFqSJEnqAnsiSZJ66S7gyIjYk2o421HAN4GvAm+gukLb1Is3rAD+pSz/ynycD2nYOG+GJEnSYLAnkiSpZzLzBqoJsm8GNlEdl9YBpwHvjojNVHMeXVhWuRDYr5S/G1jT9aAlST0REesjYltE3FpT9j8j4l8j4jsR8dmIWFiz7PSI2BwR34uIV9eUH1PKNkeExxFJmgV7IkmSeiozzwDOmFJ8J3B4nbo/5smrgUqS5peLgPOBS2rKNgKnl4stfAQ4HTgtIg4DTgBeABwEfCkinlfW+QTwKqoh0jdGxIbM/G6X2iBJA82eSJIkSZL6XmZ+jSnz4GXmF2uu5nk91Tx6UF204fLM/Elmfh/YTHVy4nBgc2bemZk/pRo2vbwrDZCkIWBPJEmSJEnD4O3AFeX+Iqqk0qTxUgZw95TyI+ptLCJWAasARkZGGBsb22H59u3bdyrrB6uXTjCyR/W3H9WLrR9ex359P8HYWmVsnWESSZIkSdJAi4g/BSaASyeL6lRL6o/EqHuBhsxcRzVPH8uWLcvR0dEdlo+NjTG1rB+sXHMtq5dOcPam/vypVy+2LSeO9iaYGv36foKxtcrYOqM/9yySJEmSNAMRsQJ4DXBUzRU7x4GDa6otBu4t9xuVS5KacE4kSZIkSQMpIo6huqLn6zLz8ZpFG4ATImL3iDgEOBT4BnAjcGhEHBIRu1FNvr2h23FL0qCyJ5IkSZKkvhcRlwGjwP4RMU51Zc/Tgd2BjREBcH1m/n5m3hYRVwLfpRrmdkpm/rxs51TgC8CuwPrMvK3rjZGkAWUSSZIkSVLfy8w31ym+cJr6HwY+XKf8OuC6NoYmSfOGw9kkSZIkSZLUlEkkSZIkSZIkNWUSSZIkSZIkSU2ZRJIkSZIkSVJTTqwtddiSNdf2OgRJkiRJkubMJJIkSdqByW9JkiTVYxJJkqQhZ1JIkiRJ7WASSeojU3/orV46wco117Jl7fE9ikiS+kujhNhFx+zV5UgkSZLmHyfWliRJkiRJUlMmkSRJkiRJktSUSSRJkiRJkiQ1ZRJJkiRJkiRJTZlEkiRJkiRJUlNenU2SpD5R78pjXp1RkiRJ/cKeSJIkSZIkSWrKJJIkSZIkSZKacjibJEmaV+oNGwSHDkqSJDVjTyRJkiRJkiQ1ZRJJkiRJUt+LiPURsS0ibq0p2zciNkbEHeXvPqU8IuLjEbE5Ir4TES+pWWdFqX9HRKzoRVskaVA5nE2SJEnSILgIOB+4pKZsDfDlzFwbEWvK49OAY4FDy+0I4ALgiIjYFzgDWAYkcFNEbMjMh7rWijZpNDRXkjrJnkiSJEmS+l5mfg14cErxcuDicv9i4PU15Zdk5XpgYUQcCLwa2JiZD5bE0UbgmM5HL0nDwZ5IkiRJkgbVSGZuBcjMrRFxQClfBNxdU2+8lDUq30lErAJWAYyMjDA2NrbD8u3bt+9U1k2rl040XDayx/TLe6lebL18HSf1+v2cjrG1xtg6o2kSKSLWA68BtmXmC0vZB4D/Dtxfqr0vM68ry04HTgZ+DrwjM79Qyo8BzgN2BT6VmWvb2xRJkiRJAiDqlOU05TsXZq4D1gEsW7YsR0dHd1g+NjbG1LJuWjnNcLbVSyc4e1N/9heoG9umx3aq1+0rZvb6/ZyOsbXG2DpjJsPZLqJ+F89zMvNF5TaZQDoMOAF4QVnn/42IXSNiV+ATVGOTDwPeXOpKkiRJUqvuK8PUKH+3lfJx4OCaeouBe6cplyTNQNMkUoOxx40sBy7PzJ9k5veBzcDh5bY5M+/MzJ8Cl5e6kiRJktSqDcDkFdZWANfUlJ9UrtJ2JPBIGfb2BeDoiNinXMnt6FImSZqBufRxPDUiTgK+CawuE9MtAq6vqVM7xnjq2OMj6m202djjdhrkcYgzNextHIT2zWU8+uSY8X5vY6sG4f2bi2FvX7tExELgU8ALqYYUvB34HnAFsATYArwpMx+KiKAaGn0c8DiwMjNv7kHYGgBeuUgaLhFxGTAK7B8R41RXWVsLXBkRJwN3AW8s1a+jOlZspjpevA0gMx+MiDOBG0u9D2XmTE+YS9K812oS6QLgTKov+2cCZ1N96W80xrhej6eWxh630yCPQ5ypYW/jILRvuvHqzUyOGd9y4mj7Auojg/D+zcWwt6+NzgM+n5lviIjdgD2B9zGLSzb3JmxJUjdl5psbLDqqTt0ETmmwnfXA+jaGJknzxkzmRNpJZt6XmT/PzCeAv6IargaOPZYkzUJE7A28HLgQIDN/mpkPM/tLNkuSJEnqsJaSSFO+sP834NZyfwNwQkTsHhGHUJ0p/gZVd9FDI+KQcpb5hFJXkjS/PYfqSp9/HRHfiohPRcReTLlkM9Dsks2SJEmSOqzpcLYGY49HI+JFVEPStgC/B5CZt0XElcB3gQnglMz8ednOqVST1u0KrM/M29reGknSoFkAvAT4o8y8ISLOoxq61siMLs08k/n1+nHOqnpzqDWKcabzrU3OrTbs6r2fs213v30e6unHz20nDGM7630eh7GdkqTh1jSJ1GDs8YXT1P8w8OE65ddRTXAnSdKkcWA8M28oj6+iSiLdFxEHZubWGV6yeQczmV+vH+esqjeHWqM50WY639rk3GrD7qJj9trp/ZztnHSDMP9cP35uO2EY21nv81jvcyup0ujiCFvWHt/lSCTVamk4myRJ7ZCZ/wHcHRHPL0VHUfVmne0lmyVJkiR12PCfmpQk9bs/Ai4tc+bdSXUZ5l2YxSWbJUmSJHWeSSRJUk9l5i3AsjqLZnXJZmmu6g2dcNiEJEnSkxzOJkmSJEmSpKZMIkmSJEmSJKkpk0iSJEmSJElqyiSSJEmSJEmSmjKJJEmSJEmSpKZMIkmSJEmSJKmpBb0OQJIkNVbvsvOSJElSL5hEGjJTf2ysXjrBaG9CkSRJkiRJQ8QkkiRJXWbvIkmSJA0ik0gDyh8gkiRJkiSpm5xYW5IkSdJAi4g/jojbIuLWiLgsIp4aEYdExA0RcUdEXBERu5W6u5fHm8vyJb2NXpIGh0kkSZIkSQMrIhYB7wCWZeYLgV2BE4CPAOdk5qHAQ8DJZZWTgYcy87nAOaWeJGkGHM4mSZIkadAtAPaIiJ8BewJbgVcAbynLLwY+AFwALC/3Aa4Czo+IyMzsZsBqTaNpPbasPb7LkUjzkz2RJEmSJA2szLwH+ChwF1Xy6BHgJuDhzJwo1caBReX+IuDusu5Eqb9fN2OWpEFlTyRJkqQGPOMt9b+I2Ieqd9EhwMPA3wHH1qk62dMopllWu91VwCqAkZERxsbGdli+ffv2ncq6afXSiYbLRvaYfnkvdSq2ub4XvX4/p2NsrTG2zjCJJEmSBt6mex5hpVculearVwLfz8z7ASLiauClwMKIWFB6Gy0G7i31x4GDgfGIWAA8A3hw6kYzcx2wDmDZsmU5Ojq6w/KxsTGmlnXTdPu81UsnOHtTf/7U61RsW04cndP6vX4/p2NsrTG2znA4myRJkqRBdhdwZETsGREBHAV8F/gq8IZSZwVwTbm/oTymLP+K8yFJ0syYRJIkSZI0sDLzBqoJsm8GNlH9xlkHnAa8OyI2U815dGFZ5UJgv1L+bmBN14OWpAHVn30cJUmSJGmGMvMM4IwpxXcCh9ep+2Pgjd2IS5KGjT2RJEmSJEmS1JRJJEmSJEmSJDVlEkmSJEmSJElNmUSSJEmSJElSU06sLUmS1EFL1lxbt3zL2uO7HIkkSdLc2BNJkiRJkiRJTdkTSZIkSZI00Or1+rTHp9R+9kSSJEmSJElSU/ZEkuYJz85IkiRJkubCnkiSJEmSJElqyp5IkiRJs9ToimuSJEnDzCSSJEmSJPUpk9aS+knTJFJErAdeA2zLzBeWsn2BK4AlwBbgTZn5UEQEcB5wHPA4sDIzby7rrADeXzZ7VmZe3N6mSMOr0ZcH5zSSJEmSJHXLTHoiXQScD1xSU7YG+HJmro2INeXxacCxwKHldgRwAXBESTqdASwDErgpIjZk5kPtasiw8syDJEmSJEnqB00n1s7MrwEPTileDkz2JLoYeH1N+SVZuR5YGBEHAq8GNmbmgyVxtBE4ph0NkCQNvojYNSK+FRGfK48PiYgbIuKOiLgiInYr5buXx5vL8iW9jFuSJEmaT1qdE2kkM7cCZObWiDiglC8C7q6pN17KGpXvJCJWAasARkZGGBsbazHE5rZv397R7bfD6qUTc1p/ZA/6vo1zMezv4cge068/m7bX206vX7tBeP/mYtjb12bvBG4H9i6PPwKck5mXR8QngZOpereeDDyUmc+NiBNKvd/uRcCSJEnSfNPuibWjTllOU75zYeY6YB3AsmXLcnR0tG3BTTU2NkYnt98OK+c4nG310gne1OdtnIthfw9XL53g7E2N/023nDg6pzhms34nDML7NxfD3r52iYjFwPHAh4F3l/n1XgG8pVS5GPgAVRJpebkPcBVwfkREZtY9pkiSJElqn1aTSPdFxIGlF9KBwLZSPg4cXFNvMXBvKR+dUj7W4nNrlpyUWVKfOxd4L/D08ng/4OHMnOw+V9t79Rc9WzNzIiIeKfUf6F64kiRJ0vzUahJpA7ACWFv+XlNTfmpEXE41sfYjJdH0BeDPI2KfUu9o4PTWw5YkDYOImLz6500RMTpZXKdqzmBZ7XabDo3u5XDDuQ5Vno1mw2KHxSC2s5XP33wZJjuM7az3+RzGdvZKRCwEPgW8kOq48Hbge8zyitKSpOk1TSJFxGVUvYj2j4hxqqusrQWujIiTgbuAN5bq11HtjDdT7ZDfBpCZD0bEmcCNpd6HMnPqZN2SpPnnZcDrIuI44KlUcyKdS3VhhgWlN9Jkr1Z4ssfreEQsAJ7Bzhd/mNHQ6F4ON5zrUOXZaDYsdlgMYjtbGVI8X4bJDmM76/3fX3TMXkPXzh46D/h8Zr6hXIxhT+B9zOKK0r0JW5IGS9NvW5n55gaLjqpTN4FTGmxnPbB+VtFJkoZaZp5O6ZlaeiK9JzNPjIi/A94AXM7OPV5XAP9Sln/F+ZAkaX6LiL2BlwMrATLzp8BPI2I5T06pcTHVdBqnUXNFaeD6iFg4OVVHl0OXpIEzWKfsJEnzxWnA5RFxFvAt4MJSfiHwNxGxmaoH0gk9ik+S1D+eA9wP/HVE/CpwE9VVP2d7RekdkkjNhkZ3azhiK0N1+3mIbzdjm83708/DS42tNcbWGSaRpHnMSdfVTzJzjHLRhcy8Ezi8Tp0f8+QQakmSoPpN8xLgjzLzhog4j2roWiMzml+v2dDobg27bGUIdD8P8e1mbLMZNtzPw2iNrTXG1hm79DoASZIkSZqDcWA8M28oj6+iSirdV64kzQyvKC1JaqI/09OSJEmSNAOZ+R8RcXdEPD8zv0c1d+t3y23GV5TuQejqMHvdS+1nEkmSJEnSoPsj4NJyZbY7qa4SvQuzuKK0JKk5k0iSJEmSBlpm3gIsq7NoVleUliRNzzmRJEmSJEmS1JRJJEmSJEmSJDVlEkmSJEmSJElNmUSSJEmSJElSUyaRJEmSJEmS1JRXZ5MkSeqBJWuu3alsy9rjexCJJEnSzNgTSZIkSZIkSU3ZE0mSJKlP1OudBPZQkiRJ/cGeSJIkSZIkSWrKJJIkSZIkSZKacjibJEmSJGne84IHUnP2RJIkSZIkSVJTJpEkSZIkSZLUlEkkSZIkSZIkNeWcSJIkSdpBvXlBwLlBJEma7+yJJEnVSE1mAAAgAElEQVSSJEmSpKZMIkmSJEmSJKkpk0iSJEmSJElqyiSSJEmSpIEXEbtGxLci4nPl8SERcUNE3BERV0TEbqV89/J4c1m+pJdxS9IgcWJt7cCJNCVJkjSg3gncDuxdHn8EOCczL4+ITwInAxeUvw9l5nMj4oRS77d7EbAkDRqTSJoRk0uSJEnqVxGxGDge+DDw7ogI4BXAW0qVi4EPUCWRlpf7AFcB50dEZGZ2M2ZJGkQmkSRJ6pBGCXhJUtudC7wXeHp5vB/wcGZOlMfjwKJyfxFwN0BmTkTEI6X+A7UbjIhVwCqAkZERxsbGdnjC7du371TWCauXTjSvNMXIHq2t1w39ENtfXnrNTmVVXDvX7cZ73Ey3PmutMLbW9HNszZhEkiRJmsdMdmrQRcRrgG2ZeVNEjE4W16maM1j2ZEHmOmAdwLJly3J0dHSH5WNjY0wt64SVLfyPrl46wdmb+vOnXr/G1iiuLSeOdj+YKbr1WWuFsbWmn2Nrpv/+eyVJktR2Jos0xF4GvC4ijgOeSjUn0rnAwohYUHojLQbuLfXHgYOB8YhYADwDeLD7YUvS4PHqbJIkSZIGVmaenpmLM3MJcALwlcw8Efgq8IZSbQUwOYZpQ3lMWf4V50OSpJkxiSRJkiRpGJ1GNcn2Zqo5jy4s5RcC+5XydwNrehSfJA0ch7NJkiQNEYetaT7LzDFgrNy/Ezi8Tp0fA2/samCSNCRMIkkDrN4PhS1rj+9BJJKkXjBhJEmSumlOSaSI2AI8CvwcmMjMZRGxL3AFsATYArwpMx+KiADOA44DHgdWZubNc3l+SZIkSRoWJoYl9bt29ET6zcx8oObxGuDLmbk2ItaUx6cBxwKHltsRwAXlryRpnoqIg4FLgGcBTwDrMvM8T0hIO5r8Ybl66URLl/uWJElqh05MrL0cuLjcvxh4fU35JVm5nuqSmwd24PklSYNjAlidmb8CHAmcEhGH8eQJiUOBL/PkpKe1JyRWUZ2QkCRJktQFc+2JlMAXIyKB/y8z1wEjmbkVIDO3RsQBpe4i4O6adcdL2dbaDUbEKqofBoyMjDA2NjbHEBvbvn17R7ffDquXTsxp/ZE9Gm+jXttn+3y9fv2G/T2c7v1rpNHrMZvtdOs1HYT3by6GvX3tUI4Xk8eMRyPidqpjw3JgtFS7mGqS1NOoOSEBXB8RCyPiwMnjjiRJkqTOmWsS6WWZeW9JFG2MiH+dpm7UKcudCqpE1DqAZcuW5ejo6BxDbGxsbIxObr8d5tplffXSCc7eVP9t3nLi6Jyfr942umnY38Pp3r9GGr0ns4mjW+/rILx/czHs7Wu3iFgCvBi4gS6ckOhGkm+uJwLaoZVk9CCynd3hSYbW1XvfhrGdkqThNqckUmbeW/5ui4jPUl1C877Js8JluNq2Un0cOLhm9cXAvXN5fknScIiIpwGfAd6VmT+qpj6qX7VOWUsnJLqR5OuHuWtaSUYPItvZHZ5kaF29/cFFx+w1dO2Uhk2jyc69IrLmq5a/hUTEXsAuZfjBXsDRwIeADcAKYG35e01ZZQNwakRcTjWh9iMOP5AkRcRTqBJIl2bm1aXYExJSH6r3Y8ofUpIkzR9zmVh7BPh6RHwb+AZwbWZ+nip59KqIuAN4VXkMcB1wJ7AZ+CvgD+fw3JKkIVCutnYhcHtmfqxm0eQJCdj5hMRJUTkST0hIkiRJXdNyT6TMvBP41TrlPwSOqlOewCmtPp8kaSi9DHgrsCkibill76M6AXFlRJwM3AW8sSy7DjiO6oTE48DbuhuuJEmSNH8N/+QBkqS+lZlfp/48R+AJCUmS1KecK0nz1VyGs0mSJEmSJGmeMIkkSZIkSZKkphzOJg2ZRl1rJUmSJEmaC5NIkiRJapnzgkiSNH+YRNJQqPcF1i+vkiRJkiS1j0kkzcmwJ288uypJUms8hkqSNHycWFuSJEnSwIqIgyPiqxFxe0TcFhHvLOX7RsTGiLij/N2nlEdEfDwiNkfEdyLiJb1tgSQNDnsizWNOwCxJkqQhMAGszsybI+LpwE0RsRFYCXw5M9dGxBpgDXAacCxwaLkdAVxQ/kqSmjCJJGFCTZKkXpp6HF69dIKVa6516JtmJDO3AlvL/Ucj4nZgEbAcGC3VLgbGqJJIy4FLMjOB6yNiYUQcWLYjSZqGSSQNLedikCRJml8iYgnwYuAGYGQyMZSZWyPigFJtEXB3zWrjpcwkkiQ1YRKpj9gbRpIkSWpNRDwN+Azwrsz8UUQ0rFqnLOtsbxWwCmBkZISxsbEdlm/fvn2nsrlavXSiLdsZ2aN922q3fo2tXXG1+zMBnfmstYuxtaafY2vGJJIkSZKkgRYRT6FKIF2amVeX4vsmh6lFxIHAtlI+Dhxcs/pi4N6p28zMdcA6gGXLluXo6OgOy8fGxphaNlcr23RSefXSCc7e1J8/9fo1tnbFteXE0bkHM0UnPmvtYmyt6efYmum//15JkiQNLXteq92i6nJ0IXB7Zn6sZtEGYAWwtvy9pqb81Ii4nGpC7UecD0mSZsYkktQmfimWJEnqiZcBbwU2RcQtpex9VMmjKyPiZOAu4I1l2XXAccBm4HHgbd0NV5IGl0kkSZIkzTv1Tv548Y3BlJlfp/48RwBH1amfwCkdDUrzlvsWDTuTSOo5d7SSJKker7SqYWUPdkmDyiSSJEmSBoonoCQNA/dlGkQmkdR2njWUJEmSpIo9zzRMTCKpa9x5SpKkbvP7h6RBUm+ftXrpBKPdD0Wqa5deByBJkiRJkqT+Z08kSZIkDTx7HEmS1Hn2RJIkSZIkSVJT9kSSJEmSJKmPefEi9QuTSBooU3eeq5dOsLIH3dftMi9J0vDxR5okSdMziSRJUhuYXJYkSdKwM4nUA/7Q6C1ff0mSJEnDoN5vG3tPqpNMIknaid35JUl60mxOQHmslCQNM5NI6kv2FpIkSYPI7zCSpGFmEkmSJEmSpCHhqAJ1kkkkSZIkSZLUMudm6o5+eJ1NIkmak06e6fAsiiRJGnQOcZQ0TIY2iTSTnfXqpROsXHOtP0glSZIkSZKaGNokUrf1Q7cyqZ/Yi0iSJEnqH+34fj51G5MdM2bzfHONQb3V9SRSRBwDnAfsCnwqM9d2O4Zuseuqho2fafWLXh5L/D+QpOEwn36XSNPph+82noAeHF1NIkXErsAngFcB48CNEbEhM7/bzTimmk0von74B5Pmu071/PPgNRi6eSxxny9Jw6lff5dImhlHAvVOt3siHQ5szsw7ASLicmA50Hc7a384SJ1R+781XfdXaRoDcyyRJPUtjyXSAJjN7/LZDLXrpGFPZkVmdu/JIt4AHJOZv1sevxU4IjNPramzClhVHj4f+F4HQ9ofeKCD2+8Hw95G2zfY5mP7fikzn9mLYIZFG48lw/75m2Q7h4vtHC6tttNjyRy16VjSz59TY5u9fo0LjK1Vxja9lo4l3e6JFHXKdshiZeY6YF1Xgon4ZmYu68Zz9cqwt9H2DTbbpxa15VgyX94f2zlcbOdwmS/t7FNzPpb08/tnbLPXr3GBsbXK2Dpjly4/3zhwcM3jxcC9XY5BkjTYPJZIkubKY4kktaDbSaQbgUMj4pCI2A04AdjQ5RgkSYPNY4kkaa48lkhSC7o6nC0zJyLiVOALVJfSXJ+Zt3Uzhim6Mmyux4a9jbZvsNk+zVobjyXz5f2xncPFdg6X+dLOvtOmY0k/v3/GNnv9GhcYW6uMrQO6OrG2JEmSJEmSBlO3h7NJkiRJkiRpAJlEkiRJkiRJUlPzJokUEW+MiNsi4omIWFZT/qqIuCkiNpW/r6iz7oaIuLW7Ec/ObNsXEXtGxLUR8a9lvbW9i765Vt6/iPi1Ur45Ij4eEfUu5doXpmnffhHx1YjYHhHnT1nnzaV934mIz0fE/t2PfGZabN9uEbEuIv6tfE5/q/uRz0wr7aup0/f7l2ETEcdExPfKvmFNr+NpJCLWR8S22s9HROwbERsj4o7yd59SHmU/t7nsE15Ss86KUv+OiFhRU153H9noOTrYzoPL/8nt5f/oncPY1oh4akR8IyK+Xdr5wVJ+SETcUGK4IqoJfomI3cvjzWX5kpptnV7KvxcRr64pr/vZbvQcnRQRu0bEtyLic8PazojYUj5Xt0TEN0vZUH1uVV+jz2CvNdqf9pOp+4Z+ERELI+KqqL5z3h4Rv9HrmCZFxB+X9/PWiLgsIp7aw1hm/N2kT2L7n+U9/U5EfDYiFvZLbDXL3hMRGX38W24nmTkvbsCvAM8HxoBlNeUvBg4q918I3DNlvf8b+Fvg1l63oZ3tA/YEfrPc3w34X8CxvW5HO98/4BvAbwAB/OOAtm8v4L8Avw+cX1O+ANgG7F8e/wXwgV63o13tK8s+CJxV7u8y2dZ+vLXSvrJ8IPYvw3Sjmjz134HnlH3ft4HDeh1Xg1hfDryk9vNR/tfXlPtrgI+U+8eV/VwARwI3lPJ9gTvL333K/X3Ksrr7yEbP0cF2Hgi8pNx/OvBvwGHD1tby3E8r958C3FDivxI4oZR/EviDcv8PgU+W+ycAV5T7h5XP7e7AIeXzvOt0n+1Gz9Hh9/XdZf/2ueliGOR2AluYcmwats+tt7rve98eR2iwP+11XFNi3GHf0C834GLgd8v93YCFvY6pxLII+D6wR3l8JbCyh/HM+LtJn8R2NLCg3P9IP8VWyg+mmtz/B1OPJ/18mzc9kTLz9sz8Xp3yb2XmveXhbcBTI2J3gIh4GtWO7qzuRdqa2bYvMx/PzK+WOj8FbgYWdy/i2Zlt+yLiQGDvzPyXrP5DLwFe38WQZ2Wa9j2WmV8HfjxlUZTbXuXM5N7AvVPX7xcttA/g7cD/U+o9kZkPdDjMlrXSvkHavwyZw4HNmXln2fddDizvcUx1ZebXgAenFC+n+qJL+fv6mvJLsnI9sLDsB18NbMzMBzPzIWAjcEyTfWSj5+iIzNyamTeX+48Ct1N9aR6qtpZ4t5eHTym3BF4BXNWgnZOxXQUcVfb3y4HLM/Mnmfl9YDPV57ruZ7us0+g5OiIiFgPHA58qj6eLYWDb2cBQfW5VV98eR6bZn/aFqfuGfhERe1P9yL8Qqt9Gmflwb6PawQJgj4hYQNURoGff+Wf53aSr6sWWmV/MzIny8Hp69Hu3wesGcA7wXqrvAwNj3iSRZui3gG9l5k/K4zOBs4HHexdSW01tH1B13wReC3y5J1G1T237FgHjNcvG6aOD6Fxl5s+APwA2UR1IDqMc+IZBTVfTMyPi5oj4u4gY6WlQ7Tds+5dBsQi4u+bxoO0bRjJzK1Q/FoADSnmjdk1X3mgf2eg5Oq4MZXoxVS+doWtrGcZxC1VP0o1UvRkervmCWxvbL9pTlj8C7Mfs27/fNM/RKedSfSl+ojyeLoZBbmcCX4xqOP2qUjZ0n1vtZCCOI1P2p/1i6r6hXzwHuB/46zLU7lMRsVevgwLIzHuAjwJ3AVuBRzLzi72NaieDsk96O1Wvzr4QEa+jGkXz7V7HMltDlUSKiC+VsaJTb03PDkTEC6i6uP1eefwi4LmZ+dkOhz1j7WxfTfkC4DLg45l5Z2cin5k2t6/e/Ec9zfDOpX11tvUUqiTSi4GDgO8Ap7c55NnG1Lb2UZ1xWQz878x8CfAvVAfQnmnz+9d3+5d5pO/2DW3SqF2zLe+Z0jvvM8C7MvNH01WtUzYQbc3Mn2fmi6j2b4dTDYXdqVr52652drX9EfEaYFtm3lRbPE0MA9nO4mXlGHUscEpEvHyauoPQHs1M3783s9ifdk2DfUO/WEA11OiCzHwx8BjVsKyeK/MLLaca1nsQ1SiE3+ltVIMnIv4UmAAu7XUsUM1PDPwp8D96HUsrFvQ6gHbKzFe2sl7pWvlZ4KTM/PdS/BvAr0XEFqrX6YCIGMvM0XbE2oo2t2/SOuCOzDx3rvHNVZvbN86O3RUX0+PhXq22r4EXlW3+O0BEXEmPD3Ztbt8PqXroTCZZ/g44uY3bn7U2t6/v9i/zyDjV+PNJPd83zNJ9EXFgZm4tw122lfJG7RoHRqeUjzH9PrLRc3RMSYx/Brg0M69uEsdAtxUgMx+OiDGquXEWRsSC0oOmNrbJdo6XEz7PoOoKP91nuF75A9M8Rye8DHhdRBwHPJVquPW508QwqO0ky3D6zNwWEZ+lSgwO7edWv9DXx5EG+9N+sNO+ISI+nZn9kBAZB8Yzc7LX1lX0SRIJeCXw/cy8HyAirgZeCny6p1HtqK/3SVFdsOA1wFFleHA/+GWqxOC3q9HYLAZujojDM/M/ehrZDAxVT6RWlGEz1wKnZ+b/nizPzAsy86DMXEI1Me6/DeIPvEbtK8vOovqy9q5exNYO07x/W4FHI+LIMk/CScA1PQqzE+4BDouIZ5bHr6Ia9z4Uyg7+H3jyi/VRwHd7FlCbDcv+ZUDdCBwa1VWcdqOayHdDj2OajQ3A5NWbVvDkfm0DcFJUjqTq7r6VarLGoyNin3I282jgC032kY2eoyPK818I3J6ZH6tZNFRtjYhnlmMWEbEH1Q+D24GvAm9o0M7J2N4AfKXsG///9u4/TJKyPPT+9w4IGER2F2UO7mIWZWOEEBEnQGLevBNIAMG4nOuSZHOILmSTffOGJCaSyGJyDkYlgZwoxvjrbARdjApINOwR/LEB5hjfhB8iyE8JK2xgWQR1F3Q0kqze7x/1DPQOPV0zvdPd1TPfz3X1NVVPPVV1V093Vddd9dSzEVgV1fP/DgFWUD2Aue1nu8wz3TrmXGaem5nLyv5tVYn79Pm2nRGxb0TsNzlM9Xm7k3n2uVVbjT2OdNifDtw0+4YmJJAoJ+0PRcRLSlGTfnc+CBwbVc/aQRVb037zN3afFBEnAecAr8nMxjxCIjPvyMwDM3N5+U5spXoofuMTSMCC6p3tv1L9c54EHqU6QAP8KdUti7e1vA6cMu9yGt570my3jyrbmVQ7ocny3xz0dszl/w8YpfpB9zXgPUAMejtmu31l2haqq7ITpc5kLzS/Xf5/t1MlXA4Y9HbM8fb9GPCFsn3XAi8c9HbM5fa1TG/8/mW+vah6SfrXsm/4k0HH0yHOj1M9/+A/y2dnDdVzX64F7it/l5S6Aby3bNMd7NpL4G9QPZR4M3BmS3nbfeR06+jhdv5cOR7d3rIfP3m+bSvwU8CtZTvvBP5HKX8RVXJkM9Vdl3uX8n3K+OYy/UUty/qTsi330tLz6HSf7enW0YfP8BhP9842r7azrOsr5XXXZBzz7XPra9r/fyOPI0yzPx10XG3ifGrf0JQX1V3+Xyrv3T9Qeklswouqx+Kvlv3BR/q1D58mlhn/NmlIbJupnmE2+X34QFNimzJ9C0PUO9vkwUiSJEmSJEma1oJvziZJkiRJkqR6JpEkSZIkSZJUyySSJEmSJEmSaplEkiRJkiRJUi2TSJIkSZIkSaplEkmSJEmSJEm1TCJJkiRJkiSplkkkSZIkSZIk1TKJJEmSJEmSpFomkSRJkiRJklTLJJIkSZIkSZJqmUSSJEmSJElSLZNIkiRJkiRJqmUSSZIkSZIkSbVMIkmSJEmSJKmWSSRJkiRJkiTVMokkSZIkSZKkWiaRJEmSJEmSVMskkiRJkiRJkmqZRJIkSZIkSVItk0iSJEmSJEmqZRJJkiRJkiRJtUwiSZIkSZIkqZZJJEmSJEmSJNUyiSRJkiRJkqRaJpEkSZIkSZJUyySSJEmSJEmSaplEkiRJkiRJUi2TSJIkSZIkSaplEkmSJEmSJEm1TCJJkiRJkiSplkkkSZIkSZIk1TKJJEmSJEmSpFomkSRJkiRJklTLJJIkSZIkSZJqmUSSJEmSJElSLZNIWvAiYjwifrPLeV8YERMRscdcxyVJkiRJUpOYRJJmISK2RMQvTo5n5oOZ+ZzM/MEg45IkzVxEfDgi3l5TZywits7hOjMiDp2r5UmShsdMjjvSsDCJJEmSGmdq0n6u6kqS1I7HHWlmTCKpUcoO+dyIuDsidkTEhyJinzLttyJic0Rsj4iNEfGClvkyIn4/Iu6PiG9GxP+MiB8p094SEX/XUnd5qb9nm/W/OCKui4hvleV8NCIWlWkfAV4I/O/ShO1NU5cVES8osW0vsf5Wy7LfEhFXRMSlEfGdiLgrIkZ79V5KkoaDTaIlSVO1O1eRmsAkkprodOBE4MXAjwN/GhHHAX8B/ApwEPBvwGVT5vuvwChwFLAS+I0u1h1lPS8AXgocDLwFIDNfBzwI/HJpwvaXbeb/OLC1zP9a4M8j4viW6a8pcS8CNgLv6SJGSZrXpknav6Yk3x8vz7J76XR1S/knIuLrEfFERHwhIg7vMpY3l4sKWyLi9JbyvSPiryLiwYh4NCI+EBHPbpn+xxHxSERsi4jfmLLMD0fE+yPimoj4LvALEbF/ucjwjYj4t4j405aLIT9Sxv8tIh4r9fYv0yYvZpwZEQ+VCzC/HRE/HRG3l/frPS3rPjQi/k95X74ZEZd3875I0nzShONOlGbUEXFORHwd+FAp73Qh/Wcj4uayzpsj4mdbpo1HxNsj4p9LnP87Ig4oF8m/XeovL3UjIi4qx5gnyvHjJ3frTdW8ZRJJTfSezHwoM7cD5wO/RpVYuiQzv5yZTwLnAj8zueMrLszM7Zn5IPCuMt+sZObmzNyUmU9m5jeAdwL/90zmjYiDgZ8DzsnM72fmbcAHgde1VPtiZl5TnqH0EeBls41Rkua7qUl74B+okvR/ADwfuIbqx/teHRL8nwFWAAcCXwY+2kUo/wV4HrAUWA2sj4iXlGkXUl3oOBI4tNT5HwARcRLwR8AvlRjaNXn4b1THuP2ALwJ/A+wPvIjquPN64MxS94zy+oUy/Tk88yLEMWVdv0p1DPyTst7DgV+JiMlj2duAzwOLgWVlvZK0oDXsuLME+DFgbacL6RGxBLgaeDdwANV5y9URcUDL8lZRnYsspbpA/y9UyaklwD3AeaXeCcDPUx3XFlEdS77VRfxaAEwiqYkeahn+N6q7el5QhgHIzAmqHdvSmvlmJSIOjIjLIuLhiPg28HdUJxAz8QJge2Z+Z0ocrTF+vWX4e8A+4a2qklTnV4GrS5L/P4G/Ap4N/Ox0M2TmJZn5nXLh4S3Ayybv3pml/14uLPwfqh/rvxIRAfwW8Ifl4sV3gD+n+rEO1Y/9D2XmnZn53bL+qa7KzP8vM38I/GfZxnNLzFuAd/D0RYjTgXdm5v3l+HcusGrK8eNt5QLG54HvAh/PzMcy82Hgn4CXl3r/SXVy8oJS/4tdvCeSNN8N6rjzQ+C8ctz5dzpfSD8FuC8zP5KZOzPz48BXgV9uWd6HMvNrmfkEVZLra5n5j5m5E/gEux4b9gN+AojMvCczH5ll7FogTCKpiQ5uGX4hsK28fmyyMCL2pcq4P1wzH1Q/pn+0Zdp/6bDuvwAS+KnMfC7w61RN3CZlh3m3AUsiYr8pcTw8TX1J0sxMvZDwQ6oLB0vbVY6IPSLigoj4WrkgsKVMmulFgUk7ShJo0uQFiudTHVduKc0cHgc+W8on4516YWOq1unPA/aaUq/1IsQL2kzbExhpKXu0Zfjf24w/pwy/ieq4dlNpptFN029Jmu8Gddz5RmZ+v0McrRfSpx4b4JkXsGd0bMjM66jucH0v8GhErI+I584ydi0QJpHURGdFxLJyi+abgcuBjwFnRsSREbE31RXfG8vV2kl/HBGLS7OyN5T5AG4Dfj4iXliuBpzbYd37ARPA4xGxFPjjKdMfpWpK8AyZ+RDwz8BfRMQ+EfFTwBq6u5VVkha61qT91AsJQXXh4OE2daFqKraSqjnX/sDyyVlnGcPictFi0uQFim9S/fg+PDMXldf+pQkEwCM888LGVK0xf5On7xBqnWdy+7a1mbaTXU8GZiQzv56Zv5WZLwD+H+B9EXHobJcjSfNQE447U5fb6UL61GMD7MYF7Mx8d2a+gqoZ9I/zzPMgCTCJpGb6GNXzGu4vr7dn5rXAfwf+nurH+Yt5utnApKuAW6iSRlcDFwNk5iaqhNLtZfqnO6z7z6gezP1EWcYnp0z/C6oHfT8eEX/UZv5fozpobAM+RXU76qbaLZYkTdWatL8COCUijo+IZwFnA09SJe6n1oXqgsCTVFdrf5TqwkO3/iwi9oqI/wt4NfCJckX6b4GLIuJAgIhYGhEntsR7RkQcFhE/ytPPnGirPCfvCuD8iNgvIn4MeCNVk2qonsvxhxFxSEQ8p2zP5aU5wqxExGkRsayM7qA6YfnBbJcjSfNQU447rTpdSL8G+PGI+G8RsWdE/CpwGJ3PddqKqjOGY8q2fhf4Ph4bNA2TSGqimzPzsHJld3Vmfg8gMz+QmS/OzCWZ+erM3Dplvmsy80WZeUBmnl1+lFPmPass79DM/NvMjMkf35k5lpkfLMN3ZeYrykPyjszMd2TmspblXJWZLyzL+qvM3DJlWVtLbEtKrB9omfctmfnrLeO7zCtJ2sVTSXuq5zv8OtVDoL9Zxn85M/9jat2S4L+U6pb+h4G7gRu6jOHrVImWbVR3lf52Zn61TDsH2AzcUJou/CPwEoDM/AzVw62vK3Wum8G6fo/qh/v9VA/a/hhwSZl2CVVnDF8AHqD6cf97XW7TTwM3RsQEVS+hb8jMB7pcliTNJ0047uyi04X0zPwW1cWNs6mSV28CXp2Z3+xiVc+lujiyg2o7vkX1HCjpGSKz0yNepP6KiC3Ab2bmP85yvgRWZObmngQmSZIkSdIC551IkiRJkiRJqmUSSY2SmctnexdSmS+8C0mSNBsR8eaImGjz+sygY5MkzT8edzQf2JxNkiRJkiRJtfYcdACdPO95z8vly5d3Ne93v/td9t133/qKA9Dk2KDZ8Rlb95ocX5Njg7mN75ZbbvlmZj5/ThY2ZMozz75D1dvHzswcjYglVL0nLge2AL+SmTtKV7p/DZwMfA84IzO/XJazGvjTsti3Z+aGTuvt9ljS9M/lVMbbW8MU7zDFCt+Hn+gAACAASURBVMbbjYV8LBmU+XJe0qRYwHjqGE9nTYqnSbHAzOLp+liSmY19veIVr8huXX/99V3P22tNji2z2fEZW/eaHF+TY8uc2/iAL2UD9q+DeFEliZ43pewvgXVleB1wYRk+GfgMEMCxVN3ZAiyh6r1qCbC4DC/utN5ujyVN/1xOZby9NUzxDlOsmcbbjYV8LBnUa76clzQplkzjqWM8nTUpnibFkjmzeLo9lvhMJEnSIK0EJu8k2gCc2lJ+aTnG3QAsioiDgBOBTZm5PTN3AJuAk/odtCRJkrQQNbo5myRpXkng8xGRwP/KzPXASGY+ApCZj0TEgaXuUuChlnm3lrLpyncREWuBtQAjIyOMj4/POtiJiYmu5hsU4+2tYYp3mGIF45UkaZiYRJIk9csrM3NbSRRtioivdqgbbcqyQ/muBVWCaj3A6Ohojo2NzTrY8fFxuplvUIy3t4Yp3mGKFYxXkqRhYnM2SVJfZOa28vcx4FPA0cCjpZka5e9jpfpW4OCW2ZcB2zqUS5IkSeoxk0iSpJ6LiH0jYr/JYeAE4E5gI7C6VFsNXFWGNwKvj8qxwBOl2dvngBMiYnFELC7L+VwfN0WSJElasGzOJknqhxHgUxEB1bHnY5n52Yi4GbgiItYADwKnlfrXUPXQthn4HnAmQGZuj4i3ATeXem/NzO392wxJkiRp4TKJJEnqucy8H3hZm/JvAce3KU/grGmWdQlwyVzHKEmSJKkzm7NJkiRJkiSplkkkSZIkSZIk1VpQzdmWr7u6bfmWC07pcySSpPmm3THG44skaTY8lkhqOu9EkiRJkiRJUi2TSJIkSZIkSaplEkmSJEmSJEm1TCJJkiRJkiSplkkkSZIkSZIk1TKJJEmSJEmSpFomkSRJkiRJklTLJJIkSZIkSZJqmUSSJEmSJElSLZNIkiRJkiRJqmUSSZIkSZIkSbVMIkmSJEmSJKmWSSRJkiRJkiTVMokkSZIkSZKkWiaRJEmSJEmSVMskkiRJkiRJkmqZRJIkSZIkSVItk0iSJEmSJEmqZRJJkiRJkiRJtWaURIqIP4yIuyLizoj4eETsExGHRMSNEXFfRFweEXuVunuX8c1l+vKW5Zxbyu+NiBN7s0mSJEmSJEmaa7VJpIhYCvw+MJqZPwnsAawCLgQuyswVwA5gTZllDbAjMw8FLir1iIjDynyHAycB74uIPeZ2cyRJkiRJktQLM23Otifw7IjYE/hR4BHgOODKMn0DcGoZXlnGKdOPj4go5Zdl5pOZ+QCwGTh69zdBkiRJ0kIQEVsi4o6IuC0ivlTKlkTEptJCYlNELC7lERHvLi0hbo+Io1qWs7rUvy8iVg9qeyRp2OxZVyEzH46IvwIeBP4d+DxwC/B4Zu4s1bYCS8vwUuChMu/OiHgCOKCU39Cy6NZ5nhIRa4G1ACMjI4yPj89+q4CJiYlnzHv2ETvb1u12Hd1qF1uTNDk+Y+tek+NrcmzQ/PgkSVpgfiEzv9kyvg64NjMviIh1Zfwc4FXAivI6Bng/cExELAHOA0aBBG6JiI2ZuaOfGyFJw6g2iVQy+SuBQ4DHgU9Q7ZCnyslZppk2XfmuBZnrgfUAo6OjOTY2VhdiW+Pj40yd94x1V7etu+X07tbRrXaxNUmT4zO27jU5vibHBs2PT5KkBW4lMFaGNwDjVEmklcClmZnADRGxKCIOKnU3ZeZ2gIjYRPW4jY/3N2xJGj61SSTgF4EHMvMbABHxSeBngUURsWe5G2kZsK3U3wocDGwtzd/2B7a3lE9qnUeSJEmS6iTw+YhI4H+VC9AjmfkIQGY+EhEHlrpPtZAoJltCTFe+i162kJhOu5YTc3k3dNPurjaezoynsybF06RYoLfxzCSJ9CBwbET8KFVztuOBLwHXA68FLgNWA1eV+hvL+L+U6ddlZkbERuBjEfFO4AVUt5XeNIfbIkmSJGl+e2VmbiuJok0R8dUOdRvbQmI67VpOzGWriabdXW08nRlPZ02Kp0mxQG/jqX2wdmbeSPWA7C8Dd5R51lPdIvrGiNhM9cyji8ssFwMHlPI3UrVJJjPvAq4A7gY+C5yVmT+Y062RJEmSNG9l5rby9zHgU1Qd9TxamqlR/j5Wqk/XEsIWEpLUpRn1zpaZ52XmT2TmT2bm60oPa/dn5tGZeWhmnpaZT5a63y/jh5bp97cs5/zMfHFmviQzP9OrjZIkSZI0v0TEvhGx3+QwcAJwJ0+3hIBntpB4feml7VjgidLs7XPACRGxuDz/9YRSJkmqMZPmbJIkSZI0aCPApyICqvOYj2XmZyPiZuCKiFhD9SiO00r9a4CTgc3A94AzATJze0S8Dbi51Hvr5EO2JUmdmUSSJEmS1HilhcPL2pR/i+q5rVPLEzhrmmVdAlwy1zFK0nxnEkmSpB5Z3uYBqQBbLjilz5FIkiRJu29Gz0SSJEmSJEnSwmYSSZLUNxGxR0TcGhGfLuOHRMSNEXFfRFweEXuV8r3L+OYyfXnLMs4t5fdGxImD2RJJkiRp4TGJJEnqpzcA97SMXwhclJkrgB3AmlK+BtiRmYcCF5V6RMRhwCrgcOAk4H0RsUefYpckSZIWNJNIkqS+iIhlwCnAB8t4AMcBV5YqG4BTy/DKMk6ZfnypvxK4LDOfzMwHqHrcObo/WyBJkiQtbCaRJEn98i7gTcAPy/gBwOOZubOMbwWWluGlwEMAZfoTpf5T5W3mkSRJktRD9s4mSeq5iHg18Fhm3hIRY5PFbapmzbRO87Suby2wFmBkZITx8fHZhszExMSs5jv7iJ31lYpu4qkz23gHzXh7Z5hiBeOVJGmYmESSJPXDK4HXRMTJwD7Ac6nuTFoUEXuWu42WAdtK/a3AwcDWiNgT2B/Y3lI+qXWep2TmemA9wOjoaI6Njc064PHxcWYz3xnrrp5x3S2nzz6eOrONd9CMt3eGKVYwXi1My2dxzJCkJrE5mySp5zLz3MxclpnLqR6MfV1mng5cD7y2VFsNXFWGN5ZxyvTrMjNL+arSe9shwArgpj5thiRJkrSgeSeSJGmQzgEui4i3A7cCF5fyi4GPRMRmqjuQVgFk5l0RcQVwN7ATOCszf9D/sCVJkqSFxySSJKmvMnMcGC/D99Omd7XM/D5w2jTznw+c37sIJUmSJLVjczZJkiRJkiTVMokkSZIkSZKkWiaRJEmSJEmSVMskkiRJkiRJkmqZRJIkSZIkSVItk0iSJEmSJEmqZRJJkiRJkiRJtUwiSZIkSZIkqZZJJEmSJEmSJNUyiSRJkiRJkqRaJpEkSZIkSZJUyySSJEmSJEmSaplEkiRJkiRJUi2TSJIkSZIkSaplEkmSJEmSJEm1TCJJkiRJkiSplkkkSZIkSZIk1TKJJEmSJEmSpFomkSRJkiQNjYjYIyJujYhPl/FDIuLGiLgvIi6PiL1K+d5lfHOZvrxlGeeW8nsj4sTBbIkkDR+TSJIkSZKGyRuAe1rGLwQuyswVwA5gTSlfA+zIzEOBi0o9IuIwYBVwOHAS8L6I2KNPsUvSUDOJJEmSJGkoRMQy4BTgg2U8gOOAK0uVDcCpZXhlGadMP77UXwlclplPZuYDwGbg6P5sgSQNtz0HHYAkSZIkzdC7gDcB+5XxA4DHM3NnGd8KLC3DS4GHADJzZ0Q8UeovBW5oWWbrPE+JiLXAWoCRkRHGx8e7CnhiYuIZ8559xM72ldvodr0zjWWQjKcz4+msSfE0KRbobTwmkSRJkiQ1XkS8GngsM2+JiLHJ4jZVs2Zap3meLshcD6wHGB0dzbGxsalVZmR8fJyp856x7uoZz7/l9O7WO9NYBsl4OjOezpoUT5Nigd7GYxJJkiRJ0jB4JfCaiDgZ2Ad4LtWdSYsiYs9yN9IyYFupvxU4GNgaEXsC+wPbW8ontc4jSerAZyJJkiRJarzMPDczl2XmcqoHY1+XmacD1wOvLdVWA1eV4Y1lnDL9uszMUr6q9N52CLACuKlPmyFJQ807kSRJkiQNs3OAyyLi7cCtwMWl/GLgIxGxmeoOpFUAmXlXRFwB3A3sBM7KzB/0P2xJGj4zuhMpIhZFxJUR8dWIuCcifiYilkTEpoi4r/xdXOpGRLw7IjZHxO0RcVTLclaX+vdFxOrp1yhJkiRJ7WXmeGa+ugzfn5lHZ+ahmXlaZj5Zyr9fxg8t0+9vmf/8zHxxZr4kMz8zqO2QpGEz0+Zsfw18NjN/AngZcA+wDrg2M1cA15ZxgFdR3RK6gqo3g/cDRMQS4DzgGKouNM+bTDxJkiRJkiSp2WqTSBHxXODnKbeFZuZ/ZObjwEpgQ6m2ATi1DK8ELs3KDVQPujsIOBHYlJnbM3MHsAk4aU63RpIkSZIkST0xkzuRXgR8A/hQRNwaER+MiH2Bkcx8BKD8PbDUXwo81DL/1lI2XbkkSZIkSZIabiYP1t4TOAr4vcy8MSL+mqebrrUTbcqyQ/muM0espWoGx8jICOPj4zMI8ZkmJiaeMe/ZR+xsW7fbdXSrXWxN0uT4jK17TY6vybFB8+OTJEmSpH6YSRJpK7A1M28s41dSJZEejYiDMvOR0lztsZb6B7fMvwzYVsrHppSPT11ZZq4H1gOMjo7m2NjY1CozMj4+ztR5z1h3ddu6W07vbh3dahdbkzQ5PmPrXpPja3Js0Pz4JEmSJKkfapuzZebXgYci4iWl6Hiq7jA3ApM9rK0GrirDG4HXl17ajgWeKM3dPgecEBGLywO1TyhlkiRJkiRJariZ3IkE8HvARyNiL+B+4EyqBNQVEbEGeBA4rdS9BjgZ2Ax8r9QlM7dHxNuAm0u9t2bm9jnZCkmSJEmSJPXUjJJImXkbMNpm0vFt6iZw1jTLuQS4ZDYBSpIkSdJCtXy6R3JccEqfI5GkmfXOJkmSJEmSpAXOJJIkqeciYp+IuCkivhIRd0XEn5XyQyLixoi4LyIuL82miYi9y/jmMn15y7LOLeX3RsSJg9kiSZIkaeExiSRJ6ocngeMy82XAkcBJpfOFC4GLMnMFsANYU+qvAXZk5qHARaUeEXEYsAo4HDgJeF9E7NHXLZEkSZIWKJNIkqSey8pEGX1WeSVwHHBlKd8AnFqGV5ZxyvTjIyJK+WWZ+WRmPkDVicPRfdgESZIkacGbae9skiTtlnLH0C3AocB7ga8Bj2fmzlJlK7C0DC8FHgLIzJ0R8QRwQCm/oWWxrfO0rmstsBZgZGSE8fHxWcc7MTExq/nOPmJnfaWim3jqzDbeQTPe3hmmWMF4JUkaJiaRJEl9kZk/AI6MiEXAp4CXtqtW/sY006Yrn7qu9cB6gNHR0RwbG5t1vOPj48xmvjOm6T2nnS2nzz6eOrONd9CMt3eGKVYwXkmShonN2SRJfZWZjwPjwLHAooiYvKCxDNhWhrcCBwOU6fsD21vL28wjSZIkqYdMIkmSei4inl/uQCIing38InAPcD3w2lJtNXBVGd5YxinTr8vMLOWrSu9thwArgJv6sxWSJEnSwmZzNklSPxwEbCjPRfoR4IrM/HRE3A1cFhFvB24FLi71LwY+EhGbqe5AWgWQmXdFxBXA3cBO4KzSTE6SJElSj5lEkiT1XGbeDry8Tfn9tOldLTO/D5w2zbLOB86f6xglSZIkdWZzNkmSJEmSJNUyiSRJkiRJkqRaJpEkSZIkSZJUyySSJEmSJEmSavlgbUmSZmH5uqsHHYIkSZI0EN6JJEmSJEmSpFomkSRJkiRJklTLJJIkSZIkSZJqmUSSJEmSJElSLR+sLUlSn033cO4tF5zS50gkSZKkmfNOJEmSJEmSJNUyiSRJkiSp8SJin4i4KSK+EhF3RcSflfJDIuLGiLgvIi6PiL1K+d5lfHOZvrxlWeeW8nsj4sTBbJEkDR+TSJIkSZKGwZPAcZn5MuBI4KSIOBa4ELgoM1cAO4A1pf4aYEdmHgpcVOoREYcBq4DDgZOA90XEHn3dEkkaUiaRJEmSJDVeVibK6LPKK4HjgCtL+Qbg1DK8soxTph8fEVHKL8vMJzPzAWAzcHQfNkGShp4P1pYkSZI0FModQ7cAhwLvBb4GPJ6ZO0uVrcDSMrwUeAggM3dGxBPAAaX8hpbFts7Tuq61wFqAkZERxsfHu4p5YmLiGfOefcTO9pVnoZt42sUySMbTmfF01qR4mhQL9DYek0iSJEmShkJm/gA4MiIWAZ8CXtquWvkb00ybrnzqutYD6wFGR0dzbGysm5AZHx9n6rxnTNNL52xsOX328bSLZZCMpzPj6axJ8TQpFuhtPDZnkyRJkjRUMvNxYBw4FlgUEZMXx5cB28rwVuBggDJ9f2B7a3mbeSRJHZhEkiRJktR4EfH8cgcSEfFs4BeBe4DrgdeWaquBq8rwxjJOmX5dZmYpX1V6bzsEWAHc1J+tkKThZnM2SZIkScPgIGBDeS7SjwBXZOanI+Ju4LKIeDtwK3BxqX8x8JGI2Ex1B9IqgMy8KyKuAO4GdgJnlWZykqQaJpEkSZIkNV5m3g68vE35/bTpXS0zvw+cNs2yzgfOn+sYJWm+szmbJEmSJEmSaplEkiRJkiRJUi2TSJIkSZIkSaplEkmSJEmSJEm1fLA2sHzd1c8o23LBKQOIRJIkSZIkqZm8E0mSJEmSJEm1TCJJkiRJkiSplkkkSZIkSZIk1Zq3z0S64+EnOKPNs44kSZIkSZI0ezO+Eyki9oiIWyPi02X8kIi4MSLui4jLI2KvUr53Gd9cpi9vWca5pfzeiDhxrjdGkiRJkiRJvTGb5mxvAO5pGb8QuCgzVwA7gDWlfA2wIzMPBS4q9YiIw4BVwOHAScD7ImKP3QtfkiRJkiRJ/TCjJFJELANOAT5YxgM4DriyVNkAnFqGV5ZxyvTjS/2VwGWZ+WRmPgBsBo6ei42QJEmSJElSb830TqR3AW8CfljGDwAez8ydZXwrsLQMLwUeAijTnyj1nypvM48kSZIkSZIarPbB2hHxauCxzLwlIsYmi9tUzZppneZpXd9aYC3AyMgI4+PjdSG2NfJsOPuInfUVp9HtemdiYmKip8vfXU2Oz9i61+T4mhwbND8+SZIkSeqHmfTO9krgNRFxMrAP8FyqO5MWRcSe5W6jZcC2Un8rcDCwNSL2BPYHtreUT2qd5ymZuR5YDzA6OppjY2NdbBb8zUev4h13dN/53JbTu1vvTIyPj9PtdvVDk+Mztu41Ob4mxwbNj0+SJEmS+qG2OVtmnpuZyzJzOdWDsa/LzNOB64HXlmqrgavK8MYyTpl+XWZmKV9Vem87BFgB3DRnWyJJkiRJkqSemU3vbFOdA7wxIjZTPfPo4lJ+MXBAKX8jsA4gM+8CrgDuBj4LnJWZP9iN9UuShkREHBwR10fEPRFxV0S8oZQviYhNEXFf+bu4lEdEvDsiNkfE7RFxVMuyVpf690XE6unWKUmSJGluzaq9V2aOA+Nl+H7a9K6Wmd8HTptm/vOB82cbpCRp6O0Ezs7ML0fEfsAtEbEJOAO4NjMviIh1VBcezgFeRXXH6grgGOD9wDERsQQ4Dxileq7eLRGxMTN39H2LJEmSpAVmd+5EkiRpRjLzkcz8chn+DnAPVQ+dK4ENpdoG4NQyvBK4NCs3UD2H7yDgRGBTZm4viaNNwEl93BRJkiRpwer+ydOSJHUhIpYDLwduBEYy8xGoEk0RcWCpthR4qGW2raVsuvKp69jtnj6n65Vvd3r+rLM7vQAOWy+Cxts7wxQrGK8kScPEJJIkqW8i4jnA3wN/kJnfjohpq7Ypyw7luxbMQU+f0/XKd8a6q2e9rJnanZ5Bh60XQePtnWGKFYxXkqRhYnM2SVJfRMSzqBJIH83MT5biR0szNcrfx0r5VuDgltmXAds6lEuSJEnqMZNIkqSei+qWo4uBezLznS2TNgKTPaytBq5qKX996aXtWOCJ0uztc8AJEbG49OR2QimTJEmS1GM2Z5Mk9cMrgdcBd0TEbaXszcAFwBURsQZ4kKd797wGOBnYDHwPOBMgM7dHxNuAm0u9t2bm9v5sgiRJkrSwmUSSJPVcZn6R9s8zAji+Tf0EzppmWZcAl8xddJIkSZJmwuZskiRJkiRJqmUSSZIkSZIkSbVMIkmSJEmSJKmWSSRJkiRJkiTVMokkSZIkqfEi4uCIuD4i7omIuyLiDaV8SURsioj7yt/FpTwi4t0RsTkibo+Io1qWtbrUvy8iVg9qmyRp2JhEkiRJkjQMdgJnZ+ZLgWOBsyLiMGAdcG1mrgCuLeMArwJWlNda4P1QJZ2A84BjgKOB8yYTT5KkzvYcdACSJEmSVCczHwEeKcPfiYh7gKXASmCsVNsAjAPnlPJLMzOBGyJiUUQcVOpuysztABGxCTgJ+HjfNmYOLF93ddvyLRec0udIJC0kJpEkSWqIdicEngxI0jNFxHLg5cCNwEhJMJGZj0TEgaXaUuChltm2lrLpyqeuYy3VHUyMjIwwPj7eVawTExPPmPfsI3Z2tayZ6BRnu1gGyXg6M57OmhRPk2KB3sZjEkmSJEnS0IiI5wB/D/xBZn47Iqat2qYsO5TvWpC5HlgPMDo6mmNjY13FOz4+ztR5z5jmLqK5sOX0sWmntYtlkIynM+PprEnxNCkW6G08PhNJkiRJ0lCIiGdRJZA+mpmfLMWPlmZqlL+PlfKtwMEtsy8DtnUolyTVMIkkSZIkqfGiuuXoYuCezHxny6SNwGQPa6uBq1rKX196aTsWeKI0e/sccEJELC4P1D6hlEmSaticTZIkSdIweCXwOuCOiLitlL0ZuAC4IiLWAA8Cp5Vp1wAnA5uB7wFnAmTm9oh4G3BzqffWyYdsS5I6M4kkSZIkqfEy84u0f54RwPFt6idw1jTLugS4ZO6ik6SFweZskiRJkiRJqmUSSZIkSZIkSbVMIkmSJEmSJKmWSSRJkiRJkiTVMokkSZIkSZKkWiaRJEmSJEmSVMskkiRJkiRJkmqZRJIkSZIkSVItk0iSJEmSJEmqZRJJkiRJkiRJtUwiSZIkSZIkqZZJJEmSJEmSJNUyiSRJkiRJkqRaJpEkSZIkSZJUa89BByBJkiRJ89UdDz/BGeuuHnQYkjQnvBNJkiRJkiRJtUwiSZIkSZIkqZZJJEmSJEmSJNUyiSRJkiRJkqRaJpEkSZIkSZJUqzaJFBEHR8T1EXFPRNwVEW8o5UsiYlNE3Ff+Li7lERHvjojNEXF7RBzVsqzVpf59EbG6d5slSZIkSZKkuTSTO5F2Amdn5kuBY4GzIuIwYB1wbWauAK4t4wCvAlaU11rg/VAlnYDzgGOAo4HzJhNPkiRJkiRJarbaJFJmPpKZXy7D3wHuAZYCK4ENpdoG4NQyvBK4NCs3AIsi4iDgRGBTZm7PzB3AJuCkOd0aSZIkSZIk9cSes6kcEcuBlwM3AiOZ+QhUiaaIOLBUWwo81DLb1lI2XfnUdayluoOJkZERxsfHZxPiU0aeDWcfsbOreYGu1zsTExMTPV3+7mpyfMbWvSbH1+TYoPnxDYOIuAR4NfBYZv5kKVsCXA4sB7YAv5KZOyIigL8GTga+B5wxeTGjNIX+07LYt2fmBua55euublu+5YJT+hyJJEmSFroZJ5Ei4jnA3wN/kJnfrn7jt6/apiw7lO9akLkeWA8wOjqaY2NjMw1xF3/z0at4xx2zypHtYsvp3a13JsbHx+l2u/qhyfEZW/eaHF+TY4PmxzckPgy8B7i0pWyyWfQFEbGujJ/Drs2ij6FqFn1MS7PoUarjxy0RsbHc3SpJkiSpx2bUO1tEPIsqgfTRzPxkKX60NFOj/H2slG8FDm6ZfRmwrUO5JGmey8wvANunFNssWpIkSRoitbfqlGYFFwP3ZOY7WyZtBFYDF5S/V7WU/25EXEZ1BfmJ0tztc8CftzxM+wTg3LnZDEnSEOpJs2iYm6bR0zVj3J2m0nNpamzD1uzSeHtnmGIF45UkaZjMpL3XK4HXAXdExG2l7M1UyaMrImIN8CBwWpl2DdVzLDZTPcviTIDM3B4RbwNuLvXemplTr0pLkrRbzaJhbppGT9eM8YxpnlHUb1ObXQ9bs0vj7Z1hihWMV5KkYVKbRMrML9L+hzvA8W3qJ3DWNMu6BLhkNgFKkuatRyPioHIX0kybRY9NKR/vQ5ySJA2Ndh0y2BmDpLnS/ZOnJUnaPY1vFj1dz2iSpP6zp09JGrwZPVhbkqTdEREfB/4FeElEbC1NoS8Afiki7gN+qYxD1Sz6fqpm0X8L/A5UzaKByWbRN2OzaElaaD7MMztUmOzpcwVwbRmHXXv6XEvV0yctPX0eAxwNnNdycUKSVMM7kSRJPZeZvzbNJJtFS5JmJDO/EBHLpxSv5OmmzhuomjmfQ0tPn8ANETHZ0+cYpadPgIiY7Onz4z0OX5LmBe9EkiRJkjSsdunpE5iznj4lSc/knUjTmO45GD6UTpIkSWq83e7pMyLWUjWFY2RkhPHx8a4CGXk2nH3Ezq7mnSuTsU9MTHS9Hb1gPJ0ZT2dNiqdJsUBv4zGJJEmSJGlY9aynz8xcD6wHGB0dzbGxsXbVav3NR6/iHXcM9rRry+ljQJVM6nY7esF4OjOezpoUT5Nigd7GY3M2SZIkScNqsqdPeGZPn6+PyrGUnj6BzwEnRMTi8kDtE0qZJGkGvBNJkiRJUuOVnj7HgOdFxFaqXtYuAK4ovX4+CJxWql8DnEzV0+f3gDOh6ukzIiZ7+gR7+pSkWTGJJEmSJKnx7OlTkgbP5mySJEmSJEmqZRJJkiRJkiRJtUwiSZIkSZIkqZZJJEmSJEmSJNUyiSRJkiRJkqRa9s4mSdIQWr7u6l3Gzz5iJ2esu5otF5wyoIgkSZI033knkiRJkiRJkmqZRJIkSZIkSVItk0iSJEmSJEmqZRJJkiRJkiRJtXywtiRJkiTNY5OdMUx2wjDJzhgkzZZ3IkmSJEmSJKmWSSRJkiRJkiTVsjmbJEnzyPKWZgqTbK4gSZKkueCdSJIkSZIkSaplEkmSYK3DBAAACxZJREFUJEmSJEm1bM42S+2aCYBNBSRJkiRJ0vxmEkmSJEmSFiAvkEuaLZNIkiTNc54kSJIkaS74TCRJkiRJkiTVMokkSZIkSZKkWiaRJEmSJEmSVMtnIkmStED5rCRJUjvtjg8eGySBdyJJkiRJkiRpBkwiSZIkSZIkqZbN2eaIt3xKkiRJkqT5zCSSJEnahRdGJEmS1I5JJEmSVMuHcEvSwuZxQBKYROqp6Xa0Hz5p3z5HIkmSJElzz+SStLCYRJIkSV2z6ZskSdLC0fckUkScBPw1sAfwwcy8oN8xSJKGm8eSZpvuqnSrs4/YyRmlnkknSYPgsaS3ZnMs8DggDY++JpEiYg/gvcAvAVuBmyNiY2be3c84Bu2Oh5946odzHXeokrQrjyXzz0xONCZNd1z0jihJs+GxpFnch0vDo993Ih0NbM7M+wEi4jJgJeDOehqz+WE9F9xZSxoCHksWsNkcF+fyGNp65xS0P176XBBpqHgsabh+nwfBM/f1vebxQcOo30mkpcBDLeNbgWNaK0TEWmBtGZ2IiHu7XNfzgG92OW9P/X6DY4sLgQbHh7HtjibH1+TYYG7j+7E5Ws5C1q9jSdM/l7to8rGlnWGPtxwvZ2Q2defIUL23GG83PJbsvgV5XtK0fe9Cj2cGx4dGvT8YTydNigVmFk9Xx5J+J5GiTVnuMpK5Hli/2yuK+FJmju7ucnqhybFBs+Mztu41Ob4mxwbNj28B6suxZNj+78bbW8MU7zDFCsargVmQ5yVNigWMp47xdNakeJoUC/Q2nh/pxUI72Aoc3DK+DNjW5xgkScPNY4kkaXd5LJGkLvQ7iXQzsCIiDomIvYBVwMY+xyBJGm4eSyRJu8tjiSR1oa/N2TJzZ0T8LvA5qq40L8nMu3q0ut2+9bSHmhwbNDs+Y+tek+NrcmzQ/PgWlD4eS4bt/268vTVM8Q5TrGC8GoAFfF7SpFjAeOoYT2dNiqdJsUAP44nMrK8lSZIkSZKkBa3fzdkkSZIkSZI0hEwiSZIkSZIkqda8SyJFxEkRcW9EbI6IdX1c75aIuCMibouIL5WyJRGxKSLuK38Xl/KIiHeXGG+PiKNalrO61L8vIlbvRjyXRMRjEXFnS9mcxRMRryjbu7nM266b1NnE9paIeLi8f7dFxMkt084t67k3Ik5sKW/7vy4PSLyxxHx5eVjibN67gyPi+oi4JyLuiog3NOX96xBbI96/iNgnIm6KiK+U+P6s0zIjYu8yvrlMX95t3LsR24cj4oGW9+7IUt7X74WapdvPWQ/i6Om+fI5j7fm+c47j7fn+qgcx7xERt0bEp4cg1kb9LppBvIsi4sqI+Gr5DP9Mk+PVcOjnsWTQ37lo0LnHNLEM7LdyNOzcokM8A3mPokHnDx1iGej5QvTw+D/T92YXmTlvXlQPxfsa8CJgL+ArwGF9WvcW4HlTyv4SWFeG1wEXluGTgc8AARwL3FjKlwD3l7+Ly/DiLuP5eeAo4M5exAPcBPxMmeczwKt2M7a3AH/Upu5h5f+4N3BI+f/u0el/DVwBrCrDHwD+31m+dwcBR5Xh/YB/LXEM/P3rEFsj3r+yPc8pw88CbizvSdtlAr8DfKAMrwIu7zbu3Yjtw8Br29Tv6/fCV3Neu/M560EsPd2Xz3GsPd93znG8Pd1f9ejz8EbgY8Cny3iTY91Cg34XzSDeDcBvluG9gEVNjtdX81/0+Vgy6O8cDTr3mCaWtzCg38o07NyiQzwDeY9o0PlDh1g+zADPF+jR8X82703ra77diXQ0sDkz78/M/wAuA1YOMJ6VVD9KKH9PbSm/NCs3AIsi4iDgRGBTZm7PzB3AJuCkblacmV8AtvcinjLtuZn5L1l9Ki9tWVa3sU1nJXBZZj6ZmQ8Am6n+z23/1yWTexxwZZvtnGl8j2Tml8vwd4B7gKU04P3rENt0+vr+lfdgoow+q7yywzJb39MrgeNLDLOKezdjm05fvxdqlMYcS3q5L+9BrD3dd/Yg3l7vr+ZURCwDTgE+WMY77a8HGmsHjfwsRMRzqU46LwbIzP/IzMebGq+GRhOOJX37DDfp3KNp5xpNO7do2vlEk84fmni+0OPjf1f7qfmWRFoKPNQyvpXOX4i5lMDnI+KWiFhbykYy8xGovqzAgTVx9jr+uYpnaRme6zh/t9wGeEmU2zm7iO0A4PHM3DkXsZVbAF9OlYVu1Ps3JTZoyPtXbre8DXiMaof5tQ7LfCqOMv2JEkNPviNTY8vMyffu/PLeXRQRe0+NbYYx9Op7of4b5LFkJpp2bHmGHu07exFnL/dXc+1dwJuAH5bxTvvrQccKw/G7aNKLgG8AHyrNBT4YEfs2OF4Nh35/Hpr4nWvUb2ca8Fu5aecWTTmfaNL5QwPPF3p5/O/qOz/fkkjt2hN2yhzOpVdm5lHAq4CzIuLnO9SdLs5BxT/beHoR5/uBFwNHAo8A7xh0bBHxHODvgT/IzG93qjrLWHY7xjaxNeb9y8wfZOaRwDKq7PZLOyyzr/FNjS0ifhI4F/gJ4Kepbjk9ZxCxqVGG9X/ZiM9mD/edc67H+6s5ExGvBh7LzFtaizusd+DvLcP1u2hPqqYv78/MlwPfpWpaMp1Bx6vh0O/PwzB95wbxG2vgv5Wbdm7RpPOJJp0/NOl8oQ/H/64+O/MtibQVOLhlfBmwrR8rzsxt5e9jwKeoPvyPllvWKH8fq4mz1/HPVTxby/CcxZmZj5Yv7A+Bv+Xp2+tnG9s3qW4j3HN3YouIZ1HtVD+amZ8sxY14/9rF1rT3r8T0ODBO1T54umU+FUeZvj/V7cc9/Y60xHZSuaU3M/NJ4EN0/97N+fdCAzOwY8kMNe3Y8pQe7zt7pkf7q7n0SuA1EbGF6lbz46iuTDYxVmBofhdN2gpsbbnafCVVUqmp8Wo49PXz0NDvXCN+O8Pgfys37dyiqecTTTp/aMj5Qq+P/91953OOHubWhBfVlaT7qR4WNflgqMP7sN59gf1ahv+Zqv3w/2TXh6X9ZRk+hV0fwHVTPv0ArgeoHr61uAwv2Y24lrPrA+XmLB7g5lJ38oFgJ+9mbAe1DP8hVZtNgMPZ9SFg91M9AGza/zXwCXZ90NjvzDK2oGqf+q4p5QN//zrE1oj3D3g+sKgMPxv4J+DV0y0TOItdH/52Rbdx70ZsB7W8t+8CLhjU98JXM1678znrUTzL6dG+fI7j7Pm+c47j7en+qoefhzGefrBmI2Olob+LamL+J+AlZfgtJdbGxuur+S/6eCxpyneOBp17tIllYL+Vadi5RYd4BvIe0aDzhw6xDPx8gR4c/2fz3uwSSy92ZIN8UT0h/V+p2lH+SZ/W+aLyhn8FuGtyvVTtD68F7it/Jz84Aby3xHgHMNqyrN+getDVZuDM3Yjp41S3If4nVYZxzVzGA4wCd5Z53gPEbsb2kbLu24GN7LoT+5OynntpeXr9dP/r8v+4qcT8CWDvWb53P0d1G9/twG3ldXIT3r8OsTXi/QN+Cri1xHEn8D86LRPYp4xvLtNf1G3cuxHbdeW9uxP4O57ukaGv3wtfzXp1+znrQRw93ZfPcaw933fOcbw931/1KO4xnv4R2chYaeDvohnEfCTwpfJ5+AeqH/2NjdfXcLzo07GkCd85GnTuMU0sA/utTMPOLTrEM5D3iAadP3SIZeDnC/To+D/T96b1FWVGSZIkSZIkaVrz7ZlIkiRJkiRJ6gGTSJIkSZIkSaplEkmSJEmSJEm1TCJJkiRJkiSplkkkSZIkSZIk1TKJJEmSJEmSpFomkSRJkiRJklTr/wfUtxpzSc+FZgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Plot histograms for all the features\n", + "\n", + "housing.hist(bins=50, figsize=(20,15))\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that most features are left scewed (tail-heavy) or multi-modal. Not the most ideal distributions of data. Also worth noting is that the median_income data is not in USD and seems to be scaled from 0 to 15. If we look back at the max and min of the data we find that it is scaled to be from 0.4999 to 15.0001. Similarly the median age and median house values are capped (as seen by the sharp jump at the end). It might be nice to transform the data to be more uniform." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "housing['income_cat'] = pd.cut(housing['median_income'], # Chopping up median income because it's important\n", + " bins=[0., 1.5, 3.0, 4.5, 6., np.inf], # Chop into categories of 0 to 1.5, 1.5 to 3, etc\n", + " labels=[1,2,3,4,5]) # Generic labels\n", + "train_set, test_set = train_test_split(housing, test_size=0.2, random_state=42) # Generic train/test split\n", + "housing['income_cat'].hist()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# Now we want to do some stratified sampling based on median_income which seems to be fairly important\n", + "\n", + "split = SSS(n_splits=1, test_size=0.2, random_state=42) # Initialize our split with proper test size/random state to match book\n", + "for train_index, test_index in split.split(housing, housing['income_cat']):\n", + " strat_train_set = housing.loc[train_index]\n", + " strat_test_set = housing.loc[test_index]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def income_cat_proportions(data):\n", + " return data[\"income_cat\"].value_counts() / len(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "# Make a table showing the how a stratified sampling ensures our test set matches our original distribution for median_income\n", + "\n", + "compare_props = pd.DataFrame({\n", + " \"Overall\": income_cat_proportions(housing),\n", + " \"Stratified\": income_cat_proportions(strat_test_set),\n", + " \"Random\": income_cat_proportions(test_set),\n", + "}).sort_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
OverallStratifiedRandom
10.0398260.0397290.040213
20.3188470.3187980.324370
30.3505810.3505330.358527
40.1763080.1763570.167393
50.1144380.1145830.109496
\n", + "
" + ], + "text/plain": [ + " Overall Stratified Random\n", + "1 0.039826 0.039729 0.040213\n", + "2 0.318847 0.318798 0.324370\n", + "3 0.350581 0.350533 0.358527\n", + "4 0.176308 0.176357 0.167393\n", + "5 0.114438 0.114583 0.109496" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "compare_props.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "# Now that we finished with our income_cat feature we can drop it\n", + "\n", + "for set_ in (strat_train_set, strat_test_set):\n", + " set_.drop('income_cat', axis=1, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "# With our test set put aside we can explore the data\n", + "\n", + "housing = strat_train_set.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Simple scatter plot\n", + "\n", + "housing.plot(kind='scatter', x='longitude', y='latitude')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Scatter plot emphasizing denser areas\n", + "\n", + "housing.plot(kind='scatter', x='longitude', y='latitude', alpha=0.1)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "housing.plot(kind='scatter', x='longitude', y='latitude', alpha=0.4, \n", + " s = housing['population'] / 100, # Adjusit size of points to size of population\n", + " label='population', \n", + " figsize=(10,7), \n", + " c = 'median_house_value', # Base color map on median house value\n", + " cmap=plt.get_cmap('jet'), \n", + " colorbar=True)\n", + "plt.legend()\n", + "plt.xlabel=('longitude')" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "median_house_value 1.000000\n", + "median_income 0.687160\n", + "total_rooms 0.135097\n", + "housing_median_age 0.114110\n", + "households 0.064506\n", + "total_bedrooms 0.047689\n", + "population -0.026920\n", + "longitude -0.047432\n", + "latitude -0.142724\n", + "Name: median_house_value, dtype: float64" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check out correlations\n", + "\n", + "corr_matrix = housing.corr()\n", + "corr_matrix['median_house_value'].sort_values(ascending=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see a strong correlation between house value and median income which is to be expected. However, we see almost no correlation geographically even though our heat map earlier suggests a strong corrolation between location and price. This just means the features have a non linear relation." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Grab scatter plots between most promising features to inspect\n", + "\n", + "attributes= ['median_house_value', 'median_income', 'total_rooms', 'housing_median_age']\n", + "scatter_matrix(housing[attributes], figsize=(12,8))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Strongest looking correlation is between median income and median house value so we look more closely at that\n", + "\n", + "housing.plot(kind='scatter', x='median_income', y='median_house_value', alpha=0.1)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see a strong correlation as well as a few oddities. There are some abnormal horizontal lines at 500k, 350k and possible 250k that may have to be dealt with later. Now we can move on to feature creation! Some useful features could be rooms per household (more useful than just the number of rooms), bedrooms per room (proportion of rooms which are actually bedrooms), and people per household." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "housing['rooms_per_household'] = housing['total_rooms'] / housing['households']\n", + "housing['bedrooms_per_room'] = housing['total_bedrooms'] / housing['total_rooms']\n", + "housing['population_per_household'] = housing['population'] / housing['households']" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "median_house_value 1.000000\n", + "median_income 0.687160\n", + "rooms_per_household 0.146285\n", + "total_rooms 0.135097\n", + "housing_median_age 0.114110\n", + "households 0.064506\n", + "total_bedrooms 0.047689\n", + "population_per_household -0.021985\n", + "population -0.026920\n", + "longitude -0.047432\n", + "latitude -0.142724\n", + "bedrooms_per_room -0.259984\n", + "Name: median_house_value, dtype: float64" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corr_matrix = housing.corr()\n", + "corr_matrix['median_house_value'].sort_values(ascending=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now see our artificial features and how correlated they are to the target feature with the most promising being rooms_per_household and bedrooms_per_room with a strong negative correlation. This makes intuitive sense when you consider a 4 bedroom 2.5 bath compared to a 3 bedroom 1 bath. Anothing factor could be extra non bedrooms such as extra living rooms and kitchens driving the price up considerably. With some decent correlations on our features we can move on to preping our data for ML algorithms." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "housing = strat_train_set.drop('median_house_value', axis=1)\n", + "housing_labels = strat_train_set['median_house_value'].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 16512 entries, 17606 to 15775\n", + "Data columns (total 9 columns):\n", + "longitude 16512 non-null float64\n", + "latitude 16512 non-null float64\n", + "housing_median_age 16512 non-null float64\n", + "total_rooms 16512 non-null float64\n", + "total_bedrooms 16354 non-null float64\n", + "population 16512 non-null float64\n", + "households 16512 non-null float64\n", + "median_income 16512 non-null float64\n", + "ocean_proximity 16512 non-null object\n", + "dtypes: float64(8), object(1)\n", + "memory usage: 1.3+ MB\n" + ] + } + ], + "source": [ + "housing.info() # Bring back up to see where we have null values (in total_bedrooms)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# Median imputation using SkLearn\n", + "\n", + "imputer = SimpleImputer(strategy='median')\n", + "housing_num = housing.drop('ocean_proximity', axis=1) # Drop non numerical feature for imputation\n", + "imputer.fit(housing_num) # Computes and stores median values for all features in housing_num which we may need later\n", + "X = imputer.transform(housing_num) # Apply median imputation\n", + "housing_tr = pd.DataFrame(X, columns=housing_num.columns, index=housing_num.index) # Remake our df from our numpy array X\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ocean_proximity
17606<1H OCEAN
18632<1H OCEAN
14650NEAR OCEAN
3230INLAND
3555<1H OCEAN
19480INLAND
8879<1H OCEAN
13685INLAND
4937<1H OCEAN
4861<1H OCEAN
\n", + "
" + ], + "text/plain": [ + " ocean_proximity\n", + "17606 <1H OCEAN\n", + "18632 <1H OCEAN\n", + "14650 NEAR OCEAN\n", + "3230 INLAND\n", + "3555 <1H OCEAN\n", + "19480 INLAND\n", + "8879 <1H OCEAN\n", + "13685 INLAND\n", + "4937 <1H OCEAN\n", + "4861 <1H OCEAN" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check out our categorical feature\n", + "housing_cat = housing[['ocean_proximity']] # doubles brackets to get a dataframe instead of a series\n", + "housing_cat.head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "17606 <1H OCEAN\n", + "18632 <1H OCEAN\n", + "14650 NEAR OCEAN\n", + "3230 INLAND\n", + "3555 <1H OCEAN\n", + " ... \n", + "6563 INLAND\n", + "12053 INLAND\n", + "13908 INLAND\n", + "11159 <1H OCEAN\n", + "15775 NEAR BAY\n", + "Name: ocean_proximity, Length: 16512, dtype: object" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing['ocean_proximity']" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<16512x5 sparse matrix of type ''\n", + "\twith 16512 stored elements in Compressed Sparse Row format>" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cat_encoder = OneHotEncoder()\n", + "housing_cat_1hot = cat_encoder.fit_transform(housing_cat)\n", + "housing_cat_1hot # Note this is stored as a sparse matrix since most of the matrix would be empy anyways" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 0., 0., 0., 0.],\n", + " [1., 0., 0., 0., 0.],\n", + " [0., 0., 0., 0., 1.],\n", + " ...,\n", + " [0., 1., 0., 0., 0.],\n", + " [1., 0., 0., 0., 0.],\n", + " [0., 0., 0., 1., 0.]])" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing_cat_1hot.toarray() # What our matrix looks like" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[array(['<1H OCEAN', 'INLAND', 'ISLAND', 'NEAR BAY', 'NEAR OCEAN'],\n", + " dtype=object)]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cat_encoder.categories_ # List all our categories" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "SkLearn is very useful, but sometimes we need to create our own functions to modify the data. In doing so it is important to stay compatible with SkLearn by creating our own classes with the methods of fit(), transform(), and fit_transform(). Given example:" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.base import BaseEstimator, TransformerMixin\n", + "\n", + "# column index\n", + "rooms_ix, bedrooms_ix, population_ix, households_ix = 3, 4, 5, 6\n", + "\n", + "class CombinedAttributesAdder(BaseEstimator, TransformerMixin):\n", + " def __init__(self, add_bedrooms_per_room = True): # no *args or **kargs\n", + " self.add_bedrooms_per_room = add_bedrooms_per_room\n", + " def fit(self, X, y=None):\n", + " return self # nothing else to do\n", + " def transform(self, X):\n", + " rooms_per_household = X[:, rooms_ix] / X[:, households_ix]\n", + " population_per_household = X[:, population_ix] / X[:, households_ix]\n", + " if self.add_bedrooms_per_room:\n", + " bedrooms_per_room = X[:, bedrooms_ix] / X[:, rooms_ix]\n", + " return np.c_[X, rooms_per_household, population_per_household,\n", + " bedrooms_per_room]\n", + " else:\n", + " return np.c_[X, rooms_per_household, population_per_household]\n", + "\n", + "attr_adder = CombinedAttributesAdder(add_bedrooms_per_room=False)\n", + "housing_extra_attribs = attr_adder.transform(housing.values)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "# Setup a pipeline to do all we've done already for numerical features\n", + "# Note that all estimators but the last must be transformers(specifically they must have a\n", + "# fit_transform() method)\n", + "\n", + "num_pipeline = Pipeline([\n", + " ('imputer', SimpleImputer(strategy='median')),\n", + " ('attribs_adder', CombinedAttributesAdder()), \n", + " ('std_scaler', StandardScaler())\n", + "]) " + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "housing_num_tr = num_pipeline.fit_transform(housing_num)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "# Our previous pipeline applies to all columns in a dataframe. To deal with both our categorical and\n", + "# numerical features at once we use ColumnTransformer to perform our pipeline only on numerical features\n", + "# and OneHotEncoder only on categorical features\n", + "\n", + "num_attribs = list(housing_num)\n", + "cat_attribs = ['ocean_proximity']\n", + "\n", + "full_pipeline = ColumnTransformer([\n", + " ('num', num_pipeline, num_attribs), \n", + " ('cat', OneHotEncoder(), cat_attribs)\n", + "])\n", + "\n", + "housing_prepared = full_pipeline.fit_transform(housing)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Try out simple model\n", + "\n", + "lin_reg = LinearRegression()\n", + "lin_reg.fit(housing_prepared, housing_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "68628.19819848923" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check out our error on training set\n", + "\n", + "lin_reg_pred = lin_reg.predict(housing_prepared)\n", + "lin_mse = mean_squared_error(housing_labels, lin_reg_pred)\n", + "lin_rmse = np.sqrt(lin_mse)\n", + "lin_rmse" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [], + "source": [ + "# Better evaluation with Cross Validation (k-fold)\n", + "\n", + "scores = cross_val_score(lin_reg, housing_prepared, housing_labels,\n", + " scoring='neg_mean_squared_error', cv=10)\n", + "lin_reg_rmse_scores = np.sqrt(-scores)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "def display_scores(scores):\n", + " print('Scores: ', scores)\n", + " print('Mean: ', scores.mean())\n", + " print('Standard Deviation: ', scores.std())" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Scores: [66782.73843989 66960.118071 70347.95244419 74739.57052552\n", + " 68031.13388938 71193.84183426 64969.63056405 68281.61137997\n", + " 71552.91566558 67665.10082067]\n", + "Mean: 69052.46136345083\n", + "Standard Deviation: 2731.6740017983425\n" + ] + } + ], + "source": [ + "display_scores(lin_reg_rmse_scores)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\tsb\\appdata\\local\\programs\\python\\python37\\lib\\site-packages\\sklearn\\ensemble\\forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n", + " \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n" + ] + }, + { + "data": { + "text/plain": [ + "22020.531016739864" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Random Forest\n", + "\n", + "forest_reg = RandomForestRegressor()\n", + "forest_reg.fit(housing_prepared, housing_labels)\n", + "forest_reg_pred = forest_reg.predict(housing_prepared)\n", + "forest_reg_mse = mean_squared_error(housing_labels, forest_reg_pred)\n", + "forest_reg_rmse = np.sqrt(forest_reg_mse)\n", + "forest_reg_rmse" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "# Get k-fold scores\n", + "\n", + "forest_reg_scores = cross_val_score(forest_reg, housing_prepared, housing_labels,\n", + " scoring='neg_mean_squared_error', cv=10)\n", + "forest_reg_rmse_scores = np.sqrt(-forest_reg_scores)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Scores: [51471.26384635 50121.66522618 53509.84575046 54704.7006039\n", + " 52832.4840061 57155.84968564 52357.59400134 51823.56197907\n", + " 56258.53544821 52717.53079744]\n", + "Mean: 53295.303134468486\n", + "Standard Deviation: 2066.62611382041\n" + ] + } + ], + "source": [ + "# Display\n", + "\n", + "display_scores(forest_reg_rmse_scores)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['models/forest_reg.pkl']" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Save our models\n", + "\n", + "joblib.dump(lin_reg, \"models/lin_reg.pkl\")\n", + "joblib.dump(forest_reg, \"models/forest_reg.pkl\")\n", + "\n", + "# Note: can load back in with joblib.load('path/model.pkl')" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "GridSearchCV(cv=5, error_score='raise-deprecating',\n", + " estimator=RandomForestRegressor(bootstrap=True, criterion='mse',\n", + " max_depth=None,\n", + " max_features='auto',\n", + " max_leaf_nodes=None,\n", + " min_impurity_decrease=0.0,\n", + " min_impurity_split=None,\n", + " min_samples_leaf=1,\n", + " min_samples_split=2,\n", + " min_weight_fraction_leaf=0.0,\n", + " n_estimators='warn', n_jobs=None,\n", + " oob_score=False, random_state=None,\n", + " verbose=0, warm_start=False),\n", + " iid='warn', n_jobs=None,\n", + " param_grid=[{'max_features': [2, 4, 6, 8],\n", + " 'n_estimators': [3, 10, 30]},\n", + " {'bootstrap': [False], 'max_features': [2, 3, 4],\n", + " 'n_estimators': [3, 10]}],\n", + " pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n", + " scoring='neg_mean_squared_error', verbose=0)" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Fine tuning our models (Grid Search)\n", + "\n", + "param_grid = [\n", + " {'n_estimators': [3, 10, 30], 'max_features': [2, 4, 6, 8]},\n", + " {'bootstrap': [False], 'n_estimators': [3, 10], 'max_features': [2, 3, 4]}\n", + "]\n", + "\n", + "forest_reg = RandomForestRegressor()\n", + "\n", + "grid_search = GridSearchCV(forest_reg, param_grid, cv=5,\n", + " scoring='neg_mean_squared_error',\n", + " return_train_score=True)\n", + "\n", + "grid_search.fit(housing_prepared, housing_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'max_features': 6, 'n_estimators': 30}" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grid_search.best_params_" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,\n", + " max_features=6, max_leaf_nodes=None,\n", + " min_impurity_decrease=0.0, min_impurity_split=None,\n", + " min_samples_leaf=1, min_samples_split=2,\n", + " min_weight_fraction_leaf=0.0, n_estimators=30,\n", + " n_jobs=None, oob_score=False, random_state=None,\n", + " verbose=0, warm_start=False)" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grid_search.best_estimator_" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "63766.249031932166 {'max_features': 2, 'n_estimators': 3}\n", + "55241.42801213305 {'max_features': 2, 'n_estimators': 10}\n", + "52535.380892189394 {'max_features': 2, 'n_estimators': 30}\n", + "59700.32170336908 {'max_features': 4, 'n_estimators': 3}\n", + "52924.53101060204 {'max_features': 4, 'n_estimators': 10}\n", + "50393.77338577394 {'max_features': 4, 'n_estimators': 30}\n", + "59301.43966695725 {'max_features': 6, 'n_estimators': 3}\n", + "52035.17103216119 {'max_features': 6, 'n_estimators': 10}\n", + "49813.18816875522 {'max_features': 6, 'n_estimators': 30}\n", + "58081.320376052456 {'max_features': 8, 'n_estimators': 3}\n", + "51737.611817250836 {'max_features': 8, 'n_estimators': 10}\n", + "50338.53670533141 {'max_features': 8, 'n_estimators': 30}\n", + "62649.34948878523 {'bootstrap': False, 'max_features': 2, 'n_estimators': 3}\n", + "54152.03055272061 {'bootstrap': False, 'max_features': 2, 'n_estimators': 10}\n", + "59796.1703788161 {'bootstrap': False, 'max_features': 3, 'n_estimators': 3}\n", + "52826.151917810435 {'bootstrap': False, 'max_features': 3, 'n_estimators': 10}\n", + "58196.408759742335 {'bootstrap': False, 'max_features': 4, 'n_estimators': 3}\n", + "51906.57937919814 {'bootstrap': False, 'max_features': 4, 'n_estimators': 10}\n" + ] + } + ], + "source": [ + "# Display rmse for each of the models tested in our Grid Search\n", + "\n", + "cvres = grid_search.cv_results_\n", + "for mean_score, params in zip(cvres['mean_test_score'], cvres['params']):\n", + " print(np.sqrt(-mean_score), params)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(0.29557797449661544, 'median_income'),\n", + " (0.15501755658961477, 'INLAND'),\n", + " (0.10808150971584977, 'pop_per_hhold'),\n", + " (0.09567946033989604, 'bedrooms_per_room'),\n", + " (0.08025900590023524, 'longitude'),\n", + " (0.07448394445267537, 'latitude'),\n", + " (0.06378150432622012, 'rooms_per_hhold'),\n", + " (0.04012776886007714, 'housing_median_age'),\n", + " (0.017890873234094058, 'total_rooms'),\n", + " (0.016940497934044608, 'population'),\n", + " (0.01665603928514349, 'households'),\n", + " (0.01572966535262306, 'total_bedrooms'),\n", + " (0.010971161123643354, '<1H OCEAN'),\n", + " (0.004910668398105027, 'NEAR OCEAN'),\n", + " (0.003847444862073042, 'NEAR BAY'),\n", + " (4.4925129089441225e-05, 'ISLAND')]" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Look into how important each feature is in deciding our output and consider dropping less important\n", + "\n", + "feature_importances = grid_search.best_estimator_.feature_importances_\n", + "\n", + "extra_attribs = ['rooms_per_hhold', 'pop_per_hhold', 'bedrooms_per_room']\n", + "cat_encoder = full_pipeline.named_transformers_['cat']\n", + "cat_one_hot_attribs = list(cat_encoder.categories_[0])\n", + "attributes = num_attribs + extra_attribs + cat_one_hot_attribs\n", + "sorted(zip(feature_importances, attributes), reverse=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [], + "source": [ + "# Final post tuning evaluation on our test set\n", + "\n", + "final_model = grid_search.best_estimator_\n", + "\n", + "X_test = strat_test_set.drop('median_house_value', axis=1)\n", + "y_test = strat_test_set['median_house_value']\n", + "\n", + "X_test_prepared = full_pipeline.transform(X_test)\n", + "\n", + "final_pred = final_model.predict(X_test_prepared)\n", + "\n", + "final_mse = mean_squared_error(y_test, final_pred)\n", + "final_rmse = np.sqrt(final_mse)" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "47702.116203907615\n" + ] + } + ], + "source": [ + "# Definitive RMSE score for our tuned model\n", + "\n", + "print(final_rmse)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([45750.65472887, 49576.82293716])" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 95% confidence interval for our RMSE\n", + "\n", + "confidence = 0.95\n", + "squared_errors = (final_pred - y_test) ** 2\n", + "np.sqrt(stats.t.interval(confidence, len(squared_errors) - 1,\n", + " loc=squared_errors.mean(),\n", + " scale=stats.sem(squared_errors)))" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [], + "source": [ + "# 95% sure our RMSE on actual data would be between 45750 and 49576" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['models/final_model.pkl']" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Save our model\n", + "\n", + "joblib.dump(final_model, 'models/final_model.pkl')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ch2/datasets/housing/housing.csv b/Ch2/datasets/housing/housing.csv new file mode 100644 index 000000000..d5e3fa249 --- /dev/null +++ b/Ch2/datasets/housing/housing.csv @@ -0,0 +1,20641 @@ +longitude,latitude,housing_median_age,total_rooms,total_bedrooms,population,households,median_income,median_house_value,ocean_proximity +-122.23,37.88,41.0,880.0,129.0,322.0,126.0,8.3252,452600.0,NEAR BAY +-122.22,37.86,21.0,7099.0,1106.0,2401.0,1138.0,8.3014,358500.0,NEAR BAY +-122.24,37.85,52.0,1467.0,190.0,496.0,177.0,7.2574,352100.0,NEAR BAY +-122.25,37.85,52.0,1274.0,235.0,558.0,219.0,5.6431,341300.0,NEAR BAY +-122.25,37.85,52.0,1627.0,280.0,565.0,259.0,3.8462,342200.0,NEAR BAY +-122.25,37.85,52.0,919.0,213.0,413.0,193.0,4.0368,269700.0,NEAR BAY +-122.25,37.84,52.0,2535.0,489.0,1094.0,514.0,3.6591,299200.0,NEAR BAY +-122.25,37.84,52.0,3104.0,687.0,1157.0,647.0,3.12,241400.0,NEAR BAY +-122.26,37.84,42.0,2555.0,665.0,1206.0,595.0,2.0804,226700.0,NEAR BAY +-122.25,37.84,52.0,3549.0,707.0,1551.0,714.0,3.6912,261100.0,NEAR BAY +-122.26,37.85,52.0,2202.0,434.0,910.0,402.0,3.2031,281500.0,NEAR BAY +-122.26,37.85,52.0,3503.0,752.0,1504.0,734.0,3.2705,241800.0,NEAR BAY +-122.26,37.85,52.0,2491.0,474.0,1098.0,468.0,3.075,213500.0,NEAR BAY +-122.26,37.84,52.0,696.0,191.0,345.0,174.0,2.6736,191300.0,NEAR BAY +-122.26,37.85,52.0,2643.0,626.0,1212.0,620.0,1.9167,159200.0,NEAR BAY +-122.26,37.85,50.0,1120.0,283.0,697.0,264.0,2.125,140000.0,NEAR BAY +-122.27,37.85,52.0,1966.0,347.0,793.0,331.0,2.775,152500.0,NEAR BAY +-122.27,37.85,52.0,1228.0,293.0,648.0,303.0,2.1202,155500.0,NEAR BAY +-122.26,37.84,50.0,2239.0,455.0,990.0,419.0,1.9911,158700.0,NEAR BAY +-122.27,37.84,52.0,1503.0,298.0,690.0,275.0,2.6033,162900.0,NEAR BAY +-122.27,37.85,40.0,751.0,184.0,409.0,166.0,1.3578,147500.0,NEAR BAY +-122.27,37.85,42.0,1639.0,367.0,929.0,366.0,1.7135,159800.0,NEAR BAY +-122.27,37.84,52.0,2436.0,541.0,1015.0,478.0,1.725,113900.0,NEAR BAY +-122.27,37.84,52.0,1688.0,337.0,853.0,325.0,2.1806,99700.0,NEAR BAY +-122.27,37.84,52.0,2224.0,437.0,1006.0,422.0,2.6,132600.0,NEAR BAY +-122.28,37.85,41.0,535.0,123.0,317.0,119.0,2.4038,107500.0,NEAR BAY +-122.28,37.85,49.0,1130.0,244.0,607.0,239.0,2.4597,93800.0,NEAR BAY +-122.28,37.85,52.0,1898.0,421.0,1102.0,397.0,1.808,105500.0,NEAR BAY +-122.28,37.84,50.0,2082.0,492.0,1131.0,473.0,1.6424,108900.0,NEAR BAY +-122.28,37.84,52.0,729.0,160.0,395.0,155.0,1.6875,132000.0,NEAR BAY +-122.28,37.84,49.0,1916.0,447.0,863.0,378.0,1.9274,122300.0,NEAR BAY +-122.28,37.84,52.0,2153.0,481.0,1168.0,441.0,1.9615,115200.0,NEAR BAY +-122.27,37.84,48.0,1922.0,409.0,1026.0,335.0,1.7969,110400.0,NEAR BAY +-122.27,37.83,49.0,1655.0,366.0,754.0,329.0,1.375,104900.0,NEAR BAY +-122.27,37.83,51.0,2665.0,574.0,1258.0,536.0,2.7303,109700.0,NEAR BAY +-122.27,37.83,49.0,1215.0,282.0,570.0,264.0,1.4861,97200.0,NEAR BAY +-122.27,37.83,48.0,1798.0,432.0,987.0,374.0,1.0972,104500.0,NEAR BAY +-122.28,37.83,52.0,1511.0,390.0,901.0,403.0,1.4103,103900.0,NEAR BAY +-122.26,37.83,52.0,1470.0,330.0,689.0,309.0,3.48,191400.0,NEAR BAY +-122.26,37.83,52.0,2432.0,715.0,1377.0,696.0,2.5898,176000.0,NEAR BAY +-122.26,37.83,52.0,1665.0,419.0,946.0,395.0,2.0978,155400.0,NEAR BAY +-122.26,37.83,51.0,936.0,311.0,517.0,249.0,1.2852,150000.0,NEAR BAY +-122.26,37.84,49.0,713.0,202.0,462.0,189.0,1.025,118800.0,NEAR BAY +-122.26,37.84,52.0,950.0,202.0,467.0,198.0,3.9643,188800.0,NEAR BAY +-122.26,37.83,52.0,1443.0,311.0,660.0,292.0,3.0125,184400.0,NEAR BAY +-122.26,37.83,52.0,1656.0,420.0,718.0,382.0,2.6768,182300.0,NEAR BAY +-122.26,37.83,50.0,1125.0,322.0,616.0,304.0,2.026,142500.0,NEAR BAY +-122.27,37.82,43.0,1007.0,312.0,558.0,253.0,1.7348,137500.0,NEAR BAY +-122.26,37.82,40.0,624.0,195.0,423.0,160.0,0.9506,187500.0,NEAR BAY +-122.27,37.82,40.0,946.0,375.0,700.0,352.0,1.775,112500.0,NEAR BAY +-122.27,37.82,21.0,896.0,453.0,735.0,438.0,0.9218,171900.0,NEAR BAY +-122.27,37.82,43.0,1868.0,456.0,1061.0,407.0,1.5045,93800.0,NEAR BAY +-122.27,37.82,41.0,3221.0,853.0,1959.0,720.0,1.1108,97500.0,NEAR BAY +-122.27,37.82,52.0,1630.0,456.0,1162.0,400.0,1.2475,104200.0,NEAR BAY +-122.28,37.82,52.0,1170.0,235.0,701.0,233.0,1.6098,87500.0,NEAR BAY +-122.28,37.82,52.0,945.0,243.0,576.0,220.0,1.4113,83100.0,NEAR BAY +-122.28,37.82,52.0,1238.0,288.0,622.0,259.0,1.5057,87500.0,NEAR BAY +-122.28,37.82,52.0,1489.0,335.0,728.0,244.0,0.8172,85300.0,NEAR BAY +-122.28,37.82,52.0,1387.0,341.0,1074.0,304.0,1.2171,80300.0,NEAR BAY +-122.29,37.82,2.0,158.0,43.0,94.0,57.0,2.5625,60000.0,NEAR BAY +-122.29,37.83,52.0,1121.0,211.0,554.0,187.0,3.3929,75700.0,NEAR BAY +-122.29,37.82,49.0,135.0,29.0,86.0,23.0,6.1183,75000.0,NEAR BAY +-122.29,37.81,50.0,760.0,190.0,377.0,122.0,0.9011,86100.0,NEAR BAY +-122.3,37.81,52.0,1224.0,237.0,521.0,159.0,1.191,76100.0,NEAR BAY +-122.3,37.81,48.0,828.0,182.0,392.0,133.0,2.5938,73500.0,NEAR BAY +-122.3,37.81,52.0,1010.0,209.0,604.0,187.0,1.1667,78400.0,NEAR BAY +-122.3,37.81,48.0,1455.0,354.0,788.0,332.0,0.8056,84400.0,NEAR BAY +-122.29,37.8,52.0,1027.0,244.0,492.0,147.0,2.6094,81300.0,NEAR BAY +-122.3,37.81,52.0,572.0,109.0,274.0,82.0,1.8516,85000.0,NEAR BAY +-122.29,37.81,46.0,2801.0,644.0,1823.0,611.0,0.9802,129200.0,NEAR BAY +-122.29,37.81,26.0,768.0,152.0,392.0,127.0,1.7719,82500.0,NEAR BAY +-122.29,37.81,46.0,935.0,297.0,582.0,277.0,0.7286,95200.0,NEAR BAY +-122.29,37.81,49.0,844.0,204.0,560.0,152.0,1.75,75000.0,NEAR BAY +-122.29,37.81,46.0,12.0,4.0,18.0,7.0,0.4999,67500.0,NEAR BAY +-122.29,37.81,20.0,835.0,161.0,290.0,133.0,2.483,137500.0,NEAR BAY +-122.28,37.81,17.0,1237.0,462.0,762.0,439.0,0.9241,177500.0,NEAR BAY +-122.28,37.81,36.0,2914.0,562.0,1236.0,509.0,2.4464,102100.0,NEAR BAY +-122.28,37.81,19.0,1207.0,243.0,721.0,207.0,1.1111,108300.0,NEAR BAY +-122.29,37.81,23.0,1745.0,374.0,1054.0,325.0,0.8026,112500.0,NEAR BAY +-122.28,37.8,38.0,684.0,176.0,344.0,155.0,2.0114,131300.0,NEAR BAY +-122.28,37.81,17.0,924.0,289.0,609.0,289.0,1.5,162500.0,NEAR BAY +-122.27,37.81,52.0,210.0,56.0,183.0,56.0,1.1667,112500.0,NEAR BAY +-122.28,37.81,52.0,340.0,97.0,200.0,87.0,1.5208,112500.0,NEAR BAY +-122.28,37.81,52.0,386.0,164.0,346.0,155.0,0.8075,137500.0,NEAR BAY +-122.28,37.81,35.0,948.0,184.0,467.0,169.0,1.8088,118800.0,NEAR BAY +-122.28,37.81,52.0,773.0,143.0,377.0,115.0,2.4083,98200.0,NEAR BAY +-122.27,37.81,40.0,880.0,451.0,582.0,380.0,0.977,118800.0,NEAR BAY +-122.27,37.81,10.0,875.0,348.0,546.0,330.0,0.76,162500.0,NEAR BAY +-122.27,37.8,10.0,105.0,42.0,125.0,39.0,0.9722,137500.0,NEAR BAY +-122.27,37.8,52.0,249.0,78.0,396.0,85.0,1.2434,500001.0,NEAR BAY +-122.27,37.8,16.0,994.0,392.0,800.0,362.0,2.0938,162500.0,NEAR BAY +-122.28,37.8,52.0,215.0,87.0,904.0,88.0,0.8668,137500.0,NEAR BAY +-122.28,37.8,52.0,96.0,31.0,191.0,34.0,0.75,162500.0,NEAR BAY +-122.27,37.79,27.0,1055.0,347.0,718.0,302.0,2.6354,187500.0,NEAR BAY +-122.27,37.8,39.0,1715.0,623.0,1327.0,467.0,1.8477,179200.0,NEAR BAY +-122.26,37.8,36.0,5329.0,2477.0,3469.0,2323.0,2.0096,130000.0,NEAR BAY +-122.26,37.82,31.0,4596.0,1331.0,2048.0,1180.0,2.8345,183800.0,NEAR BAY +-122.26,37.81,29.0,335.0,107.0,202.0,91.0,2.0062,125000.0,NEAR BAY +-122.26,37.82,22.0,3682.0,1270.0,2024.0,1250.0,1.2185,170000.0,NEAR BAY +-122.26,37.82,37.0,3633.0,1085.0,1838.0,980.0,2.6104,193100.0,NEAR BAY +-122.25,37.81,29.0,4656.0,1414.0,2304.0,1250.0,2.4912,257800.0,NEAR BAY +-122.25,37.81,28.0,5806.0,1603.0,2563.0,1497.0,3.2177,273400.0,NEAR BAY +-122.25,37.81,39.0,854.0,242.0,389.0,228.0,3.125,237500.0,NEAR BAY +-122.25,37.81,52.0,2155.0,701.0,895.0,613.0,2.5795,350000.0,NEAR BAY +-122.26,37.81,34.0,5871.0,1914.0,2689.0,1789.0,2.8406,335700.0,NEAR BAY +-122.24,37.82,52.0,1509.0,225.0,674.0,244.0,4.9306,313400.0,NEAR BAY +-122.24,37.81,52.0,2026.0,482.0,709.0,456.0,3.2727,268500.0,NEAR BAY +-122.25,37.81,52.0,1758.0,460.0,686.0,422.0,3.1691,259400.0,NEAR BAY +-122.24,37.82,52.0,3481.0,751.0,1444.0,718.0,3.9,275700.0,NEAR BAY +-122.25,37.82,28.0,3337.0,855.0,1520.0,802.0,3.9063,225000.0,NEAR BAY +-122.25,37.82,52.0,1424.0,289.0,550.0,253.0,5.0917,262500.0,NEAR BAY +-122.25,37.82,32.0,3809.0,1098.0,1806.0,1022.0,2.6429,218500.0,NEAR BAY +-122.25,37.82,26.0,3959.0,1196.0,1749.0,1217.0,3.0233,255000.0,NEAR BAY +-122.25,37.83,52.0,2376.0,559.0,939.0,519.0,3.1484,224100.0,NEAR BAY +-122.25,37.83,35.0,1613.0,428.0,675.0,422.0,3.4722,243100.0,NEAR BAY +-122.25,37.83,52.0,1279.0,287.0,534.0,291.0,3.1429,231600.0,NEAR BAY +-122.25,37.83,28.0,5022.0,1750.0,2558.0,1661.0,2.4234,218500.0,NEAR BAY +-122.25,37.83,52.0,4190.0,1105.0,1786.0,1037.0,3.0897,234100.0,NEAR BAY +-122.23,37.84,50.0,2515.0,399.0,970.0,373.0,5.8596,327600.0,NEAR BAY +-122.23,37.84,47.0,3175.0,454.0,1098.0,485.0,5.2868,347600.0,NEAR BAY +-122.24,37.83,41.0,2576.0,406.0,794.0,376.0,5.956,366100.0,NEAR BAY +-122.24,37.85,37.0,334.0,54.0,98.0,47.0,4.9643,335000.0,NEAR BAY +-122.23,37.85,52.0,2800.0,411.0,1061.0,403.0,6.3434,373600.0,NEAR BAY +-122.24,37.84,52.0,3529.0,574.0,1177.0,555.0,5.1773,389500.0,NEAR BAY +-122.24,37.85,52.0,2612.0,365.0,901.0,367.0,7.2354,391100.0,NEAR BAY +-122.22,37.85,28.0,5287.0,1048.0,2031.0,956.0,5.457,337300.0,NEAR BAY +-122.22,37.84,50.0,2935.0,473.0,1031.0,479.0,7.5,295200.0,NEAR BAY +-122.21,37.84,44.0,3424.0,597.0,1358.0,597.0,6.0194,292300.0,NEAR BAY +-122.21,37.83,40.0,4991.0,674.0,1616.0,654.0,7.5544,411500.0,NEAR BAY +-122.2,37.84,30.0,2211.0,346.0,844.0,343.0,6.0666,311500.0,NEAR BAY +-122.21,37.84,34.0,3038.0,490.0,1140.0,496.0,7.0548,325900.0,NEAR BAY +-122.19,37.84,18.0,1617.0,210.0,533.0,194.0,11.6017,392600.0,NEAR BAY +-122.2,37.84,35.0,2865.0,460.0,1072.0,443.0,7.4882,319300.0,NEAR BAY +-122.21,37.83,34.0,5065.0,788.0,1627.0,766.0,6.8976,333300.0,NEAR BAY +-122.19,37.83,28.0,1326.0,184.0,463.0,190.0,8.2049,335200.0,NEAR BAY +-122.2,37.83,26.0,1589.0,223.0,542.0,211.0,8.401,351200.0,NEAR BAY +-122.19,37.83,29.0,1791.0,271.0,661.0,269.0,6.8538,368900.0,NEAR BAY +-122.19,37.82,32.0,1835.0,264.0,635.0,263.0,8.317,365900.0,NEAR BAY +-122.2,37.82,37.0,1229.0,181.0,420.0,176.0,7.0175,366700.0,NEAR BAY +-122.2,37.82,39.0,3770.0,534.0,1265.0,500.0,6.3302,362800.0,NEAR BAY +-122.18,37.81,30.0,292.0,38.0,126.0,52.0,6.3624,483300.0,NEAR BAY +-122.21,37.82,52.0,2375.0,333.0,813.0,350.0,7.0549,331400.0,NEAR BAY +-122.2,37.81,45.0,2964.0,436.0,1067.0,426.0,6.7851,323500.0,NEAR BAY +-122.21,37.8,50.0,2833.0,605.0,1260.0,552.0,2.8929,216700.0,NEAR BAY +-122.21,37.8,38.0,2254.0,535.0,951.0,487.0,3.0812,233100.0,NEAR BAY +-122.21,37.81,52.0,1389.0,212.0,510.0,224.0,5.2402,296400.0,NEAR BAY +-122.22,37.81,52.0,1971.0,335.0,765.0,308.0,6.5217,273700.0,NEAR BAY +-122.22,37.8,52.0,2183.0,465.0,1129.0,460.0,3.2632,227700.0,NEAR BAY +-122.22,37.8,52.0,2286.0,464.0,1073.0,441.0,3.0298,199600.0,NEAR BAY +-122.22,37.8,52.0,2721.0,541.0,1185.0,515.0,4.5428,239800.0,NEAR BAY +-122.22,37.81,52.0,2024.0,339.0,756.0,340.0,4.072,270100.0,NEAR BAY +-122.22,37.81,52.0,2944.0,536.0,1034.0,521.0,5.3509,302100.0,NEAR BAY +-122.23,37.8,52.0,2033.0,486.0,787.0,459.0,3.1603,269500.0,NEAR BAY +-122.23,37.81,52.0,1433.0,229.0,612.0,213.0,4.7708,314700.0,NEAR BAY +-122.22,37.81,52.0,2927.0,402.0,1021.0,380.0,8.1564,390100.0,NEAR BAY +-122.23,37.81,52.0,2315.0,292.0,861.0,258.0,8.8793,410300.0,NEAR BAY +-122.24,37.81,52.0,2485.0,313.0,953.0,327.0,6.8591,352400.0,NEAR BAY +-122.24,37.81,52.0,1490.0,238.0,634.0,256.0,6.0302,287300.0,NEAR BAY +-122.23,37.81,52.0,2814.0,365.0,878.0,352.0,7.508,348700.0,NEAR BAY +-122.24,37.81,52.0,2093.0,550.0,918.0,483.0,2.7477,243800.0,NEAR BAY +-122.24,37.8,52.0,888.0,168.0,360.0,175.0,2.1944,211500.0,NEAR BAY +-122.25,37.8,52.0,2087.0,510.0,1197.0,488.0,3.0149,218400.0,NEAR BAY +-122.24,37.81,52.0,2513.0,502.0,1048.0,518.0,3.675,269900.0,NEAR BAY +-122.25,37.81,46.0,3232.0,835.0,1373.0,747.0,3.225,218800.0,NEAR BAY +-122.25,37.8,42.0,4120.0,1065.0,1715.0,1015.0,2.9345,225000.0,NEAR BAY +-122.25,37.8,43.0,2364.0,792.0,1359.0,722.0,2.1429,250000.0,NEAR BAY +-122.25,37.8,41.0,1471.0,469.0,1062.0,413.0,1.6121,171400.0,NEAR BAY +-122.25,37.8,29.0,2468.0,864.0,1335.0,773.0,1.3929,193800.0,NEAR BAY +-122.24,37.79,27.0,1632.0,492.0,1171.0,429.0,2.3173,125000.0,NEAR BAY +-122.25,37.79,45.0,1786.0,526.0,1475.0,460.0,1.7772,97500.0,NEAR BAY +-122.25,37.79,50.0,629.0,188.0,742.0,196.0,2.6458,125000.0,NEAR BAY +-122.25,37.79,52.0,1339.0,391.0,1086.0,363.0,2.181,138800.0,NEAR BAY +-122.25,37.8,36.0,1678.0,606.0,1645.0,543.0,2.2303,116700.0,NEAR BAY +-122.25,37.8,43.0,2344.0,647.0,1710.0,644.0,1.6504,151800.0,NEAR BAY +-122.24,37.8,52.0,996.0,228.0,731.0,228.0,2.2697,127000.0,NEAR BAY +-122.24,37.8,52.0,1591.0,373.0,1118.0,347.0,2.1563,128600.0,NEAR BAY +-122.24,37.8,52.0,1586.0,398.0,1006.0,335.0,2.1348,140600.0,NEAR BAY +-122.24,37.8,47.0,2046.0,588.0,1213.0,554.0,2.6292,182700.0,NEAR BAY +-122.23,37.8,52.0,1192.0,289.0,772.0,257.0,2.3833,146900.0,NEAR BAY +-122.24,37.8,52.0,1803.0,420.0,1321.0,401.0,2.957,122800.0,NEAR BAY +-122.24,37.8,49.0,2838.0,749.0,1487.0,677.0,2.5238,169300.0,NEAR BAY +-122.23,37.8,52.0,783.0,184.0,488.0,186.0,1.9375,126600.0,NEAR BAY +-122.23,37.8,51.0,1590.0,414.0,949.0,392.0,1.9028,127900.0,NEAR BAY +-122.23,37.8,50.0,1746.0,480.0,1149.0,415.0,2.25,123500.0,NEAR BAY +-122.23,37.8,52.0,1252.0,299.0,844.0,280.0,2.3929,111900.0,NEAR BAY +-122.23,37.79,43.0,5963.0,1344.0,4367.0,1231.0,2.1917,112800.0,NEAR BAY +-122.23,37.79,52.0,1783.0,395.0,1659.0,412.0,2.9357,107900.0,NEAR BAY +-122.23,37.79,30.0,999.0,264.0,1011.0,263.0,1.8854,137500.0,NEAR BAY +-122.24,37.79,39.0,1469.0,431.0,1464.0,389.0,2.1638,105500.0,NEAR BAY +-122.24,37.79,47.0,1372.0,395.0,1237.0,303.0,2.125,95500.0,NEAR BAY +-122.24,37.79,52.0,674.0,180.0,647.0,168.0,3.375,116100.0,NEAR BAY +-122.24,37.79,43.0,1626.0,376.0,1284.0,357.0,2.2542,112200.0,NEAR BAY +-122.25,37.79,51.0,175.0,43.0,228.0,55.0,2.1,75000.0,NEAR BAY +-122.25,37.79,39.0,461.0,129.0,381.0,123.0,1.6,112500.0,NEAR BAY +-122.25,37.79,52.0,902.0,237.0,846.0,227.0,3.625,125000.0,NEAR BAY +-122.26,37.8,20.0,2373.0,779.0,1659.0,676.0,1.6929,115000.0,NEAR BAY +-122.22,37.77,52.0,391.0,128.0,520.0,138.0,1.6471,95000.0,NEAR BAY +-122.22,37.77,52.0,1137.0,301.0,866.0,259.0,2.59,96400.0,NEAR BAY +-122.23,37.77,52.0,769.0,206.0,612.0,183.0,2.57,72000.0,NEAR BAY +-122.23,37.78,52.0,472.0,146.0,415.0,126.0,2.6429,71300.0,NEAR BAY +-122.23,37.78,52.0,862.0,215.0,994.0,213.0,3.0257,80800.0,NEAR BAY +-122.22,37.78,50.0,1920.0,530.0,1525.0,477.0,1.4886,128800.0,NEAR BAY +-122.23,37.78,43.0,1420.0,472.0,1506.0,438.0,1.9338,112500.0,NEAR BAY +-122.23,37.78,52.0,986.0,258.0,1008.0,255.0,1.4844,119400.0,NEAR BAY +-122.23,37.78,44.0,2340.0,825.0,2813.0,751.0,1.6009,118100.0,NEAR BAY +-122.23,37.79,48.0,1696.0,396.0,1481.0,343.0,2.0375,122500.0,NEAR BAY +-122.23,37.79,49.0,1175.0,217.0,859.0,219.0,2.293,106300.0,NEAR BAY +-122.22,37.79,37.0,2343.0,574.0,1608.0,523.0,2.1494,132500.0,NEAR BAY +-122.23,37.79,30.0,610.0,145.0,425.0,140.0,1.6198,122700.0,NEAR BAY +-122.23,37.79,40.0,930.0,199.0,564.0,184.0,1.3281,113300.0,NEAR BAY +-122.22,37.79,44.0,1487.0,314.0,961.0,272.0,3.5156,109500.0,NEAR BAY +-122.22,37.79,52.0,3424.0,690.0,2273.0,685.0,3.9048,164700.0,NEAR BAY +-122.21,37.79,52.0,762.0,190.0,600.0,195.0,3.0893,125000.0,NEAR BAY +-122.22,37.79,46.0,2366.0,575.0,1647.0,527.0,2.6042,124700.0,NEAR BAY +-122.22,37.79,49.0,1826.0,450.0,1201.0,424.0,2.5,136700.0,NEAR BAY +-122.22,37.79,38.0,3049.0,711.0,2167.0,659.0,2.7969,141700.0,NEAR BAY +-122.2,37.79,29.0,1640.0,376.0,939.0,340.0,2.8321,150000.0,NEAR BAY +-122.21,37.79,47.0,1543.0,307.0,859.0,292.0,2.9583,138800.0,NEAR BAY +-122.21,37.79,34.0,2364.0,557.0,1517.0,516.0,2.8365,139200.0,NEAR BAY +-122.21,37.79,35.0,1745.0,409.0,1143.0,386.0,2.875,143800.0,NEAR BAY +-122.21,37.8,39.0,2003.0,500.0,1109.0,464.0,3.0682,156500.0,NEAR BAY +-122.21,37.8,39.0,2018.0,447.0,1221.0,446.0,3.0757,151000.0,NEAR BAY +-122.2,37.8,43.0,3045.0,499.0,1115.0,455.0,4.9559,273000.0,NEAR BAY +-122.2,37.8,52.0,1547.0,293.0,706.0,268.0,4.7721,217100.0,NEAR BAY +-122.21,37.8,52.0,3519.0,711.0,1883.0,706.0,3.4861,187100.0,NEAR BAY +-122.2,37.8,41.0,2070.0,354.0,804.0,340.0,5.1184,239600.0,NEAR BAY +-122.21,37.8,48.0,1321.0,263.0,506.0,252.0,4.0977,229700.0,NEAR BAY +-122.19,37.8,48.0,1694.0,259.0,610.0,238.0,4.744,257300.0,NEAR BAY +-122.19,37.8,46.0,1938.0,341.0,768.0,332.0,4.2727,246900.0,NEAR BAY +-122.19,37.79,50.0,968.0,195.0,462.0,184.0,2.9844,179900.0,NEAR BAY +-122.2,37.79,40.0,1060.0,256.0,667.0,235.0,4.1739,169600.0,NEAR BAY +-122.2,37.8,46.0,2041.0,405.0,1059.0,399.0,3.8487,203300.0,NEAR BAY +-122.19,37.8,52.0,1813.0,271.0,637.0,277.0,4.0114,263400.0,NEAR BAY +-122.19,37.79,45.0,2718.0,451.0,1106.0,454.0,4.6563,231800.0,NEAR BAY +-122.19,37.79,28.0,3144.0,761.0,1737.0,669.0,2.9297,140500.0,NEAR BAY +-122.2,37.79,35.0,1802.0,459.0,1009.0,390.0,2.3036,126000.0,NEAR BAY +-122.2,37.79,49.0,882.0,195.0,737.0,210.0,2.6667,122000.0,NEAR BAY +-122.2,37.79,44.0,1621.0,452.0,1354.0,491.0,2.619,134700.0,NEAR BAY +-122.21,37.79,45.0,2115.0,533.0,1530.0,474.0,2.4167,139400.0,NEAR BAY +-122.2,37.79,45.0,2021.0,528.0,1410.0,480.0,2.7788,115400.0,NEAR BAY +-122.21,37.78,46.0,2239.0,508.0,1390.0,569.0,2.7352,137300.0,NEAR BAY +-122.21,37.78,52.0,1477.0,300.0,1065.0,269.0,1.8472,137000.0,NEAR BAY +-122.21,37.78,52.0,1056.0,224.0,792.0,245.0,2.6583,142600.0,NEAR BAY +-122.21,37.78,49.0,898.0,244.0,779.0,245.0,3.0536,137500.0,NEAR BAY +-122.22,37.78,44.0,2968.0,710.0,2269.0,610.0,2.3906,111700.0,NEAR BAY +-122.21,37.78,43.0,1702.0,460.0,1227.0,407.0,1.7188,126800.0,NEAR BAY +-122.21,37.78,47.0,881.0,248.0,753.0,241.0,2.625,111300.0,NEAR BAY +-122.22,37.77,40.0,494.0,114.0,547.0,135.0,2.8015,114800.0,NEAR BAY +-122.22,37.78,50.0,1776.0,473.0,1807.0,440.0,1.7276,102300.0,NEAR BAY +-122.22,37.78,44.0,1678.0,514.0,1700.0,495.0,2.0801,131900.0,NEAR BAY +-122.22,37.78,51.0,1637.0,463.0,1543.0,393.0,2.489,119100.0,NEAR BAY +-122.21,37.76,52.0,1420.0,314.0,1085.0,300.0,1.7546,80600.0,NEAR BAY +-122.21,37.77,52.0,591.0,173.0,353.0,137.0,4.0904,80600.0,NEAR BAY +-122.21,37.77,52.0,745.0,153.0,473.0,149.0,2.6765,88800.0,NEAR BAY +-122.2,37.77,49.0,2272.0,498.0,1621.0,483.0,2.4338,102400.0,NEAR BAY +-122.21,37.77,46.0,1234.0,375.0,1183.0,354.0,2.3309,98700.0,NEAR BAY +-122.21,37.77,43.0,1017.0,328.0,836.0,277.0,2.2604,100000.0,NEAR BAY +-122.19,37.77,42.0,932.0,254.0,900.0,263.0,1.8039,92300.0,NEAR BAY +-122.2,37.77,39.0,2689.0,597.0,1888.0,537.0,2.2562,94800.0,NEAR BAY +-122.2,37.77,41.0,1547.0,415.0,1024.0,341.0,2.0562,102000.0,NEAR BAY +-122.2,37.78,52.0,2300.0,443.0,1225.0,423.0,3.5398,158400.0,NEAR BAY +-122.2,37.78,39.0,1752.0,399.0,1071.0,376.0,3.1167,121600.0,NEAR BAY +-122.2,37.78,50.0,1867.0,403.0,1128.0,378.0,2.5401,129100.0,NEAR BAY +-122.2,37.77,43.0,2430.0,502.0,1537.0,484.0,2.898,121400.0,NEAR BAY +-122.21,37.78,44.0,1729.0,414.0,1240.0,393.0,2.3125,102800.0,NEAR BAY +-122.19,37.78,52.0,1026.0,180.0,469.0,168.0,2.875,160000.0,NEAR BAY +-122.19,37.77,52.0,2170.0,428.0,1086.0,425.0,3.3715,143900.0,NEAR BAY +-122.19,37.77,52.0,2329.0,445.0,1144.0,417.0,3.5114,151200.0,NEAR BAY +-122.19,37.78,52.0,2492.0,415.0,1109.0,375.0,4.3125,164400.0,NEAR BAY +-122.19,37.78,52.0,2198.0,397.0,984.0,369.0,3.22,156500.0,NEAR BAY +-122.18,37.78,33.0,142.0,31.0,575.0,47.0,3.875,225000.0,NEAR BAY +-122.19,37.78,49.0,1183.0,205.0,496.0,209.0,5.2328,174200.0,NEAR BAY +-122.19,37.78,52.0,1070.0,193.0,555.0,190.0,3.7262,166900.0,NEAR BAY +-122.2,37.78,45.0,1766.0,332.0,869.0,327.0,4.5893,163500.0,NEAR BAY +-122.18,37.79,39.0,617.0,95.0,236.0,106.0,5.2578,253000.0,NEAR BAY +-122.18,37.79,41.0,1411.0,233.0,626.0,214.0,7.0875,240700.0,NEAR BAY +-122.18,37.79,46.0,2109.0,387.0,922.0,329.0,3.9712,208100.0,NEAR BAY +-122.19,37.79,47.0,1229.0,243.0,582.0,256.0,2.9514,198100.0,NEAR BAY +-122.19,37.79,50.0,954.0,217.0,546.0,201.0,2.6667,172800.0,NEAR BAY +-122.18,37.81,37.0,1643.0,262.0,620.0,266.0,5.4446,336700.0,NEAR BAY +-122.18,37.8,34.0,1355.0,195.0,442.0,195.0,6.2838,318200.0,NEAR BAY +-122.18,37.8,23.0,2317.0,336.0,955.0,328.0,6.7527,285800.0,NEAR BAY +-122.13,37.77,24.0,2459.0,317.0,916.0,324.0,7.0712,293000.0,NEAR BAY +-122.16,37.79,22.0,12842.0,2048.0,4985.0,1967.0,5.9849,371000.0,NEAR BAY +-122.17,37.78,42.0,1524.0,260.0,651.0,267.0,3.6875,157300.0,NEAR BAY +-122.17,37.77,30.0,3326.0,746.0,1704.0,703.0,2.875,135300.0,NEAR BAY +-122.18,37.78,43.0,1985.0,440.0,1085.0,407.0,3.4205,136700.0,NEAR BAY +-122.18,37.78,50.0,1642.0,322.0,713.0,284.0,3.2984,160700.0,NEAR BAY +-122.17,37.78,49.0,893.0,177.0,468.0,181.0,3.875,140600.0,NEAR BAY +-122.17,37.78,52.0,653.0,128.0,296.0,121.0,4.175,144000.0,NEAR BAY +-122.16,37.77,47.0,1256.0,,570.0,218.0,4.375,161900.0,NEAR BAY +-122.16,37.77,48.0,977.0,194.0,446.0,180.0,4.7708,156300.0,NEAR BAY +-122.16,37.77,45.0,2324.0,397.0,968.0,384.0,3.5739,176000.0,NEAR BAY +-122.16,37.77,39.0,1583.0,349.0,857.0,316.0,3.0958,145800.0,NEAR BAY +-122.17,37.77,39.0,1612.0,342.0,912.0,322.0,3.3958,141900.0,NEAR BAY +-122.17,37.77,31.0,2424.0,533.0,1360.0,452.0,1.871,90700.0,NEAR BAY +-122.17,37.76,41.0,1594.0,367.0,1074.0,355.0,1.9356,90600.0,NEAR BAY +-122.17,37.76,47.0,2118.0,413.0,965.0,382.0,2.1842,107900.0,NEAR BAY +-122.18,37.76,37.0,1575.0,358.0,933.0,320.0,2.2917,107000.0,NEAR BAY +-122.17,37.76,38.0,1764.0,397.0,987.0,354.0,2.4333,98200.0,NEAR BAY +-122.18,37.76,50.0,1187.0,261.0,907.0,246.0,1.9479,89500.0,NEAR BAY +-122.18,37.76,52.0,754.0,175.0,447.0,165.0,3.9063,93800.0,NEAR BAY +-122.18,37.76,49.0,2308.0,452.0,1299.0,451.0,1.8407,96700.0,NEAR BAY +-122.18,37.77,27.0,909.0,236.0,396.0,157.0,2.0786,97500.0,NEAR BAY +-122.18,37.77,42.0,1180.0,257.0,877.0,268.0,2.8125,97300.0,NEAR BAY +-122.18,37.76,43.0,2018.0,408.0,1111.0,367.0,1.8913,91200.0,NEAR BAY +-122.19,37.76,49.0,1368.0,282.0,790.0,269.0,1.7056,91400.0,NEAR BAY +-122.18,37.77,52.0,2744.0,547.0,1479.0,554.0,2.2768,96200.0,NEAR BAY +-122.18,37.77,51.0,2107.0,471.0,1173.0,438.0,3.2552,120100.0,NEAR BAY +-122.18,37.77,52.0,1748.0,362.0,1029.0,366.0,2.0556,100000.0,NEAR BAY +-122.19,37.76,52.0,2024.0,391.0,1030.0,350.0,2.4659,94700.0,NEAR BAY +-122.2,37.76,47.0,1116.0,259.0,826.0,279.0,1.75,85700.0,NEAR BAY +-122.19,37.77,41.0,2036.0,510.0,1412.0,454.0,2.0469,89300.0,NEAR BAY +-122.19,37.77,45.0,1852.0,393.0,1132.0,349.0,2.7159,101400.0,NEAR BAY +-122.19,37.76,41.0,921.0,207.0,522.0,159.0,1.2083,72500.0,NEAR BAY +-122.19,37.76,45.0,995.0,238.0,630.0,237.0,1.925,74100.0,NEAR BAY +-122.2,37.75,36.0,606.0,132.0,531.0,133.0,1.5809,70000.0,NEAR BAY +-122.2,37.76,37.0,2680.0,736.0,1925.0,667.0,1.4097,84600.0,NEAR BAY +-122.19,37.76,38.0,1493.0,370.0,1144.0,351.0,0.7683,81800.0,NEAR BAY +-122.19,37.75,19.0,2207.0,565.0,1481.0,520.0,1.3194,81400.0,NEAR BAY +-122.19,37.75,28.0,856.0,189.0,435.0,162.0,0.8012,81800.0,NEAR BAY +-122.19,37.76,26.0,1293.0,297.0,984.0,303.0,1.9479,85800.0,NEAR BAY +-122.19,37.74,36.0,847.0,212.0,567.0,159.0,1.1765,87100.0,NEAR BAY +-122.18,37.74,42.0,541.0,154.0,380.0,123.0,2.3456,83500.0,NEAR BAY +-122.19,37.73,44.0,1066.0,253.0,825.0,244.0,2.1538,79700.0,NEAR BAY +-122.19,37.74,43.0,707.0,147.0,417.0,155.0,2.5139,83400.0,NEAR BAY +-122.19,37.73,45.0,1528.0,291.0,801.0,287.0,1.2625,84700.0,NEAR BAY +-122.18,37.73,42.0,909.0,215.0,646.0,198.0,2.9063,80000.0,NEAR BAY +-122.18,37.73,43.0,1391.0,293.0,855.0,285.0,2.5192,76400.0,NEAR BAY +-122.18,37.73,44.0,548.0,119.0,435.0,136.0,2.1111,79700.0,NEAR BAY +-122.18,37.73,42.0,4074.0,874.0,2736.0,780.0,2.455,82400.0,NEAR BAY +-122.17,37.74,41.0,1613.0,445.0,1481.0,414.0,2.4028,97700.0,NEAR BAY +-122.17,37.74,47.0,463.0,134.0,327.0,137.0,2.15,97200.0,NEAR BAY +-122.17,37.74,43.0,818.0,193.0,494.0,179.0,2.4776,101600.0,NEAR BAY +-122.17,37.73,43.0,1473.0,371.0,1231.0,341.0,2.1587,86500.0,NEAR BAY +-122.18,37.74,35.0,504.0,126.0,323.0,109.0,1.8438,90500.0,NEAR BAY +-122.17,37.74,46.0,1026.0,226.0,749.0,225.0,3.0298,107600.0,NEAR BAY +-122.17,37.74,46.0,769.0,183.0,693.0,178.0,2.25,84200.0,NEAR BAY +-122.18,37.74,46.0,2103.0,391.0,1339.0,354.0,2.2467,88900.0,NEAR BAY +-122.18,37.75,45.0,330.0,76.0,282.0,80.0,4.0469,80700.0,NEAR BAY +-122.18,37.75,46.0,941.0,218.0,621.0,195.0,1.325,87100.0,NEAR BAY +-122.17,37.75,38.0,992.0,,732.0,259.0,1.6196,85100.0,NEAR BAY +-122.18,37.75,45.0,990.0,261.0,901.0,260.0,2.1731,82000.0,NEAR BAY +-122.19,37.75,36.0,1126.0,263.0,482.0,150.0,1.9167,82800.0,NEAR BAY +-122.18,37.75,43.0,1036.0,233.0,652.0,213.0,2.069,84600.0,NEAR BAY +-122.18,37.75,36.0,1047.0,214.0,651.0,166.0,1.712,82100.0,NEAR BAY +-122.17,37.76,33.0,1280.0,307.0,999.0,286.0,2.5625,89300.0,NEAR BAY +-122.17,37.75,43.0,1587.0,320.0,907.0,306.0,1.9821,98300.0,NEAR BAY +-122.17,37.75,41.0,1257.0,271.0,828.0,230.0,2.5043,92300.0,NEAR BAY +-122.17,37.75,44.0,1218.0,248.0,763.0,254.0,2.3281,88800.0,NEAR BAY +-122.17,37.75,48.0,1751.0,390.0,935.0,349.0,1.4375,90000.0,NEAR BAY +-122.16,37.76,45.0,2299.0,514.0,1437.0,484.0,2.5122,95500.0,NEAR BAY +-122.16,37.75,38.0,2457.0,624.0,1516.0,482.0,1.5625,91700.0,NEAR BAY +-122.17,37.75,47.0,998.0,211.0,597.0,185.0,3.1587,100400.0,NEAR BAY +-122.17,37.76,40.0,1685.0,343.0,949.0,342.0,1.8426,94800.0,NEAR BAY +-122.16,37.76,46.0,1827.0,307.0,881.0,302.0,4.6696,164300.0,NEAR BAY +-122.16,37.76,36.0,2781.0,574.0,1438.0,519.0,2.4598,155500.0,NEAR BAY +-122.15,37.76,39.0,1823.0,286.0,763.0,270.0,6.0749,196900.0,NEAR BAY +-122.14,37.77,27.0,2229.0,365.0,1297.0,355.0,4.8304,279100.0,NEAR BAY +-122.14,37.76,34.0,1513.0,231.0,545.0,211.0,5.5701,252800.0,NEAR BAY +-122.13,37.76,26.0,3266.0,491.0,1222.0,533.0,5.37,275400.0,NEAR BAY +-122.12,37.75,33.0,1809.0,261.0,808.0,219.0,6.86,250000.0,NEAR BAY +-122.12,37.75,28.0,794.0,111.0,329.0,109.0,7.6923,329800.0,NEAR BAY +-122.14,37.75,36.0,690.0,105.0,299.0,109.0,4.0313,195500.0,NEAR BAY +-122.14,37.75,33.0,1334.0,200.0,579.0,202.0,6.8323,255900.0,NEAR BAY +-122.13,37.75,30.0,414.0,54.0,137.0,50.0,4.975,311100.0,NEAR BAY +-122.13,37.75,36.0,768.0,93.0,229.0,93.0,5.3602,330000.0,NEAR BAY +-122.13,37.74,41.0,4400.0,666.0,1476.0,648.0,5.0,248900.0,NEAR BAY +-122.16,37.75,46.0,954.0,161.0,429.0,154.0,2.925,142900.0,NEAR BAY +-122.15,37.75,40.0,1445.0,256.0,849.0,255.0,3.8913,126300.0,NEAR BAY +-122.15,37.75,44.0,1938.0,399.0,946.0,331.0,3.225,135800.0,NEAR BAY +-122.15,37.74,41.0,856.0,178.0,571.0,191.0,3.1458,130600.0,NEAR BAY +-122.16,37.75,24.0,1790.0,454.0,1137.0,386.0,2.537,107900.0,NEAR BAY +-122.16,37.75,44.0,617.0,131.0,378.0,135.0,2.5568,111100.0,NEAR BAY +-122.15,37.74,43.0,1383.0,275.0,853.0,272.0,3.5083,122000.0,NEAR BAY +-122.15,37.74,49.0,1325.0,277.0,764.0,282.0,3.3125,118000.0,NEAR BAY +-122.16,37.75,40.0,1227.0,294.0,928.0,261.0,1.8235,95200.0,NEAR BAY +-122.16,37.75,35.0,667.0,140.0,406.0,133.0,3.8047,94300.0,NEAR BAY +-122.17,37.74,34.0,1223.0,281.0,824.0,280.0,2.2917,92500.0,NEAR BAY +-122.17,37.75,37.0,1379.0,287.0,835.0,259.0,2.4962,91800.0,NEAR BAY +-122.16,37.74,43.0,1534.0,300.0,826.0,295.0,4.0417,109400.0,NEAR BAY +-122.16,37.74,46.0,1029.0,181.0,567.0,211.0,3.4844,129500.0,NEAR BAY +-122.16,37.74,52.0,771.0,147.0,355.0,144.0,4.1458,143400.0,NEAR BAY +-122.16,37.74,47.0,824.0,223.0,533.0,166.0,2.625,98200.0,NEAR BAY +-122.16,37.74,44.0,1097.0,239.0,609.0,215.0,2.0227,103100.0,NEAR BAY +-122.29,37.9,49.0,1283.0,238.0,576.0,236.0,3.3333,276800.0,NEAR BAY +-122.29,37.9,52.0,1604.0,263.0,594.0,286.0,5.338,270900.0,NEAR BAY +-122.29,37.89,52.0,2248.0,422.0,870.0,377.0,3.4732,246200.0,NEAR BAY +-122.3,37.9,38.0,2263.0,522.0,1027.0,509.0,3.5125,224200.0,NEAR BAY +-122.29,37.89,52.0,1571.0,349.0,693.0,326.0,3.1375,229100.0,NEAR BAY +-122.3,37.89,46.0,1520.0,402.0,815.0,375.0,2.8036,211600.0,NEAR BAY +-122.3,37.9,15.0,5083.0,1212.0,2420.0,1146.0,4.5824,256100.0,NEAR BAY +-122.3,37.89,36.0,1077.0,293.0,518.0,276.0,3.0208,206300.0,NEAR BAY +-122.3,37.89,52.0,1248.0,283.0,620.0,275.0,4.0875,221300.0,NEAR BAY +-122.33,37.89,42.0,1342.0,291.0,551.0,266.0,4.5268,207400.0,NEAR BAY +-122.34,37.88,37.0,3061.0,930.0,2556.0,924.0,1.7375,350000.0,NEAR BAY +-122.29,37.89,52.0,3171.0,698.0,1498.0,696.0,3.1795,218200.0,NEAR BAY +-122.29,37.88,50.0,1211.0,261.0,523.0,227.0,3.8672,216700.0,NEAR BAY +-122.29,37.89,52.0,979.0,175.0,374.0,153.0,5.1675,270600.0,NEAR BAY +-122.29,37.89,52.0,2269.0,380.0,1004.0,371.0,5.1696,261400.0,NEAR BAY +-122.28,37.88,52.0,1844.0,332.0,769.0,334.0,4.2614,261300.0,NEAR BAY +-122.29,37.89,52.0,2178.0,421.0,940.0,423.0,5.0551,232200.0,NEAR BAY +-122.27,37.9,42.0,1650.0,274.0,645.0,256.0,5.6228,375400.0,NEAR BAY +-122.26,37.9,52.0,1927.0,279.0,705.0,288.0,7.8864,357300.0,NEAR BAY +-122.27,37.9,52.0,2079.0,273.0,684.0,275.0,7.9556,374400.0,NEAR BAY +-122.27,37.9,52.0,1803.0,240.0,572.0,236.0,6.174,358800.0,NEAR BAY +-122.27,37.9,52.0,2041.0,270.0,671.0,253.0,6.9414,417500.0,NEAR BAY +-122.27,37.89,52.0,3046.0,373.0,975.0,365.0,8.8342,430500.0,NEAR BAY +-122.28,37.9,52.0,2318.0,328.0,779.0,312.0,7.1754,362900.0,NEAR BAY +-122.28,37.9,52.0,2003.0,250.0,658.0,244.0,10.0825,397000.0,NEAR BAY +-122.28,37.9,52.0,2261.0,328.0,819.0,335.0,4.9083,346800.0,NEAR BAY +-122.28,37.89,52.0,1225.0,169.0,412.0,168.0,5.7912,327100.0,NEAR BAY +-122.28,37.89,52.0,2315.0,408.0,835.0,369.0,4.5893,290100.0,NEAR BAY +-122.28,37.89,52.0,2070.0,329.0,722.0,306.0,5.4171,292000.0,NEAR BAY +-122.28,37.89,52.0,2616.0,473.0,1085.0,487.0,4.125,270900.0,NEAR BAY +-122.27,37.89,52.0,2640.0,366.0,973.0,355.0,7.266,371100.0,NEAR BAY +-122.27,37.89,52.0,1978.0,293.0,723.0,272.0,5.3989,335600.0,NEAR BAY +-122.26,37.9,37.0,2220.0,335.0,903.0,362.0,7.8336,371300.0,NEAR BAY +-122.25,37.89,41.0,1125.0,195.0,356.0,181.0,6.1593,344000.0,NEAR BAY +-122.26,37.89,52.0,3078.0,494.0,1005.0,462.0,6.381,342200.0,NEAR BAY +-122.26,37.89,52.0,3706.0,531.0,1205.0,504.0,6.6828,370900.0,NEAR BAY +-122.25,37.89,37.0,3000.0,457.0,987.0,450.0,7.5385,350000.0,NEAR BAY +-122.25,37.89,42.0,2863.0,460.0,1031.0,448.0,6.7138,368600.0,NEAR BAY +-122.26,37.88,52.0,2551.0,417.0,894.0,404.0,6.2425,391800.0,NEAR BAY +-122.26,37.88,52.0,2255.0,410.0,823.0,377.0,5.7979,415300.0,NEAR BAY +-122.27,37.88,52.0,3360.0,648.0,1232.0,621.0,4.2813,284900.0,NEAR BAY +-122.27,37.88,52.0,1693.0,391.0,669.0,367.0,3.5417,287500.0,NEAR BAY +-122.27,37.88,44.0,2252.0,592.0,989.0,550.0,3.0132,272900.0,NEAR BAY +-122.28,37.88,52.0,2495.0,491.0,1058.0,464.0,4.1429,259600.0,NEAR BAY +-122.28,37.88,52.0,1193.0,200.0,506.0,207.0,4.1912,254500.0,NEAR BAY +-122.28,37.88,52.0,1172.0,215.0,489.0,218.0,3.9167,235600.0,NEAR BAY +-122.29,37.88,52.0,2159.0,424.0,824.0,388.0,3.8897,218400.0,NEAR BAY +-122.29,37.88,48.0,2365.0,490.0,1034.0,475.0,3.1065,229200.0,NEAR BAY +-122.29,37.88,46.0,1895.0,442.0,920.0,425.0,2.9926,192100.0,NEAR BAY +-122.29,37.88,52.0,1650.0,395.0,841.0,380.0,3.556,179300.0,NEAR BAY +-122.3,37.88,45.0,453.0,146.0,749.0,137.0,1.475,187500.0,NEAR BAY +-122.3,37.88,52.0,409.0,97.0,208.0,98.0,1.6971,138800.0,NEAR BAY +-122.3,37.87,10.0,503.0,118.0,228.0,100.0,2.1705,150000.0,NEAR BAY +-122.3,37.86,50.0,499.0,127.0,287.0,128.0,2.75,140600.0,NEAR BAY +-122.29,37.85,52.0,477.0,119.0,218.0,106.0,2.5682,120000.0,NEAR BAY +-122.3,37.88,46.0,1647.0,376.0,854.0,355.0,2.9,144800.0,NEAR BAY +-122.3,37.87,52.0,3123.0,749.0,1695.0,684.0,2.2208,144800.0,NEAR BAY +-122.28,37.88,52.0,957.0,188.0,403.0,172.0,3.2344,245500.0,NEAR BAY +-122.28,37.87,52.0,589.0,132.0,288.0,131.0,3.5156,200000.0,NEAR BAY +-122.28,37.87,49.0,2026.0,548.0,963.0,521.0,1.9805,173700.0,NEAR BAY +-122.29,37.87,50.0,1829.0,536.0,1129.0,516.0,2.6684,185600.0,NEAR BAY +-122.29,37.87,52.0,895.0,198.0,386.0,204.0,3.875,182600.0,NEAR BAY +-122.28,37.88,52.0,1909.0,416.0,811.0,406.0,3.006,227900.0,NEAR BAY +-122.28,37.87,46.0,3022.0,696.0,1293.0,675.0,2.543,220700.0,NEAR BAY +-122.28,37.87,46.0,1777.0,446.0,805.0,431.0,2.8676,212000.0,NEAR BAY +-122.27,37.88,52.0,2803.0,930.0,1372.0,876.0,2.1907,271400.0,NEAR BAY +-122.27,37.87,30.0,1465.0,439.0,862.0,425.0,1.7778,268800.0,NEAR BAY +-122.27,37.88,37.0,2619.0,682.0,1152.0,616.0,2.52,277800.0,NEAR BAY +-122.26,37.88,52.0,1149.0,255.0,483.0,249.0,4.2788,332500.0,NEAR BAY +-122.26,37.88,52.0,2363.0,604.0,1558.0,573.0,2.944,338900.0,NEAR BAY +-122.26,37.88,52.0,2604.0,837.0,1798.0,769.0,1.725,287500.0,NEAR BAY +-122.25,37.87,41.0,685.0,141.0,266.0,123.0,5.2289,384600.0,NEAR BAY +-122.25,37.87,42.0,1756.0,465.0,2184.0,422.0,2.5562,371400.0,NEAR BAY +-122.25,37.87,52.0,1204.0,460.0,2016.0,477.0,0.949,350000.0,NEAR BAY +-122.25,37.87,52.0,609.0,236.0,1349.0,250.0,1.1696,500001.0,NEAR BAY +-122.26,37.87,52.0,1087.0,371.0,3337.0,350.0,1.4012,175000.0,NEAR BAY +-122.26,37.87,52.0,2773.0,998.0,1721.0,949.0,1.1859,241700.0,NEAR BAY +-122.27,37.87,35.0,3218.0,1108.0,1675.0,1000.0,1.7464,216700.0,NEAR BAY +-122.27,37.87,49.0,1350.0,368.0,707.0,350.0,2.8846,211300.0,NEAR BAY +-122.27,37.87,52.0,3084.0,698.0,1424.0,694.0,2.7372,210200.0,NEAR BAY +-122.28,37.86,52.0,938.0,195.0,393.0,189.0,3.8594,196400.0,NEAR BAY +-122.28,37.87,52.0,1813.0,353.0,828.0,339.0,3.5625,191700.0,NEAR BAY +-122.28,37.87,52.0,1233.0,300.0,571.0,292.0,2.2788,182300.0,NEAR BAY +-122.29,37.87,44.0,2539.0,755.0,1382.0,713.0,2.537,175000.0,NEAR BAY +-122.29,37.87,46.0,1267.0,324.0,792.0,321.0,2.525,165900.0,NEAR BAY +-122.29,37.86,52.0,1665.0,404.0,815.0,372.0,1.9946,156900.0,NEAR BAY +-122.28,37.86,52.0,1659.0,367.0,788.0,346.0,2.8214,164300.0,NEAR BAY +-122.29,37.87,52.0,2225.0,460.0,1145.0,430.0,2.6165,150000.0,NEAR BAY +-122.29,37.86,50.0,2485.0,607.0,1354.0,563.0,1.9483,150500.0,NEAR BAY +-122.28,37.86,52.0,2031.0,450.0,958.0,445.0,1.9327,169900.0,NEAR BAY +-122.28,37.86,49.0,2932.0,668.0,1361.0,608.0,1.9798,147400.0,NEAR BAY +-122.28,37.85,52.0,2246.0,472.0,1005.0,449.0,2.4167,152700.0,NEAR BAY +-122.27,37.86,49.0,2052.0,435.0,924.0,414.0,2.5417,182700.0,NEAR BAY +-122.28,37.86,52.0,1999.0,417.0,780.0,358.0,3.3906,179300.0,NEAR BAY +-122.28,37.86,52.0,3007.0,691.0,1582.0,636.0,2.5652,157700.0,NEAR BAY +-122.28,37.86,41.0,2214.0,550.0,1213.0,568.0,2.2845,153100.0,NEAR BAY +-122.27,37.86,52.0,1088.0,305.0,486.0,267.0,2.6071,250000.0,NEAR BAY +-122.27,37.86,52.0,834.0,186.0,494.0,175.0,3.15,206300.0,NEAR BAY +-122.27,37.86,52.0,1769.0,372.0,849.0,365.0,2.6914,218800.0,NEAR BAY +-122.27,37.86,52.0,2307.0,583.0,1127.0,548.0,1.8447,198200.0,NEAR BAY +-122.26,37.86,35.0,5161.0,1744.0,3276.0,1742.0,1.6307,253600.0,NEAR BAY +-122.26,37.86,52.0,3497.0,832.0,1493.0,794.0,2.9044,257400.0,NEAR BAY +-122.26,37.86,52.0,3774.0,744.0,1461.0,679.0,2.9405,289500.0,NEAR BAY +-122.26,37.86,52.0,2888.0,604.0,1253.0,538.0,3.3893,241700.0,NEAR BAY +-122.25,37.86,48.0,2153.0,517.0,1656.0,459.0,3.0417,489600.0,NEAR BAY +-122.25,37.86,52.0,1389.0,191.0,514.0,202.0,7.0897,446200.0,NEAR BAY +-122.25,37.86,52.0,1709.0,318.0,719.0,295.0,5.0463,456300.0,NEAR BAY +-122.25,37.86,52.0,1587.0,444.0,878.0,449.0,1.7652,336800.0,NEAR BAY +-122.24,37.86,52.0,1668.0,225.0,517.0,214.0,7.8521,500001.0,NEAR BAY +-122.24,37.85,52.0,3726.0,474.0,1366.0,496.0,9.3959,500001.0,NEAR BAY +-122.25,37.86,52.0,4048.0,663.0,1316.0,590.0,5.3794,376900.0,NEAR BAY +-122.26,37.85,52.0,3618.0,768.0,1508.0,755.0,3.2619,309600.0,NEAR BAY +-122.27,37.85,52.0,4076.0,920.0,1800.0,815.0,2.7054,182300.0,NEAR BAY +-122.27,37.85,47.0,2077.0,400.0,719.0,326.0,2.2431,172700.0,NEAR BAY +-122.27,37.85,50.0,1279.0,300.0,675.0,255.0,1.9028,150800.0,NEAR BAY +-122.27,37.85,52.0,1974.0,426.0,875.0,363.0,1.5817,153600.0,NEAR BAY +-122.27,37.85,52.0,335.0,83.0,152.0,77.0,2.2841,106300.0,NEAR BAY +-122.27,37.85,47.0,1375.0,307.0,843.0,319.0,1.3785,142300.0,NEAR BAY +-122.28,37.85,52.0,610.0,145.0,281.0,132.0,2.9018,119400.0,NEAR BAY +-122.28,37.85,44.0,1025.0,198.0,506.0,204.0,1.73,147900.0,NEAR BAY +-122.28,37.85,48.0,2063.0,484.0,1054.0,466.0,2.2625,132900.0,NEAR BAY +-122.29,37.84,35.0,1872.0,419.0,1017.0,414.0,2.2106,132500.0,NEAR BAY +-122.28,37.83,52.0,3108.0,813.0,1623.0,765.0,2.6997,126900.0,NEAR BAY +-122.3,37.84,14.0,7355.0,2408.0,3100.0,2051.0,4.0018,143800.0,NEAR BAY +-122.23,37.83,52.0,2990.0,379.0,947.0,361.0,7.8772,500001.0,NEAR BAY +-122.22,37.82,39.0,2492.0,310.0,808.0,315.0,11.8603,500001.0,NEAR BAY +-122.22,37.82,42.0,2991.0,335.0,1018.0,335.0,13.499,500001.0,NEAR BAY +-122.23,37.82,52.0,3242.0,366.0,1001.0,352.0,12.2138,500001.0,NEAR BAY +-122.23,37.82,52.0,3051.0,381.0,1005.0,369.0,8.1872,466100.0,NEAR BAY +-122.23,37.82,52.0,3494.0,396.0,1192.0,383.0,12.3804,500001.0,NEAR BAY +-122.24,37.83,52.0,1757.0,246.0,585.0,227.0,5.8948,457800.0,NEAR BAY +-122.24,37.83,52.0,2449.0,312.0,916.0,316.0,8.1194,471600.0,NEAR BAY +-122.23,37.82,52.0,1611.0,203.0,556.0,179.0,8.7477,500001.0,NEAR BAY +-122.24,37.82,52.0,3665.0,517.0,1470.0,520.0,6.155,398600.0,NEAR BAY +-122.25,37.82,52.0,2474.0,403.0,1104.0,398.0,5.883,340700.0,NEAR BAY +-122.23,37.76,52.0,3037.0,516.0,1242.0,518.0,5.2128,289900.0,NEAR BAY +-122.23,37.76,52.0,2269.0,323.0,805.0,321.0,4.7188,335300.0,NEAR BAY +-122.23,37.76,52.0,1316.0,177.0,378.0,162.0,5.2915,333000.0,NEAR BAY +-122.24,37.77,52.0,1153.0,235.0,481.0,223.0,2.6411,241000.0,NEAR BAY +-122.23,37.77,52.0,772.0,179.0,409.0,160.0,3.3214,189600.0,NEAR BAY +-122.24,37.77,52.0,1711.0,386.0,885.0,373.0,3.6417,206300.0,NEAR BAY +-122.25,37.77,52.0,2650.0,566.0,1468.0,567.0,3.0161,215700.0,NEAR BAY +-122.25,37.77,52.0,1038.0,220.0,482.0,215.0,3.1771,210200.0,NEAR BAY +-122.25,37.77,52.0,1527.0,320.0,825.0,264.0,3.4531,208800.0,NEAR BAY +-122.25,37.77,52.0,859.0,157.0,429.0,158.0,4.3098,197900.0,NEAR BAY +-122.26,37.78,52.0,970.0,217.0,528.0,208.0,3.3438,201300.0,NEAR BAY +-122.26,37.78,52.0,1045.0,239.0,496.0,216.0,2.9213,190800.0,NEAR BAY +-122.27,37.78,52.0,1408.0,280.0,718.0,265.0,2.6806,207900.0,NEAR BAY +-122.27,37.78,52.0,1222.0,264.0,630.0,265.0,3.7708,215300.0,NEAR BAY +-122.27,37.78,45.0,1169.0,263.0,723.0,286.0,3.9444,212900.0,NEAR BAY +-122.27,37.78,13.0,2020.0,535.0,959.0,486.0,5.2601,292700.0,NEAR BAY +-122.28,37.79,30.0,4145.0,869.0,3668.0,855.0,2.5444,275000.0,NEAR BAY +-122.3,37.77,42.0,2038.0,368.0,2037.0,355.0,2.6447,200000.0,NEAR BAY +-122.28,37.78,29.0,5154.0,,3741.0,1273.0,2.5762,173400.0,NEAR BAY +-122.29,37.78,42.0,1241.0,309.0,821.0,300.0,1.9427,102200.0,NEAR BAY +-122.28,37.77,52.0,1468.0,363.0,870.0,347.0,2.9688,220800.0,NEAR BAY +-122.28,37.77,27.0,3997.0,1073.0,1901.0,966.0,3.75,242800.0,NEAR BAY +-122.29,37.76,18.0,2873.0,763.0,1243.0,663.0,5.1702,265400.0,NEAR BAY +-122.28,37.78,50.0,1487.0,306.0,730.0,327.0,2.5139,219000.0,NEAR BAY +-122.26,37.77,52.0,1670.0,350.0,793.0,299.0,2.9732,282100.0,NEAR BAY +-122.27,37.77,52.0,2252.0,388.0,1033.0,434.0,5.5337,372000.0,NEAR BAY +-122.27,37.77,52.0,1731.0,377.0,872.0,363.0,4.1667,225800.0,NEAR BAY +-122.27,37.77,52.0,1710.0,481.0,849.0,457.0,2.7115,220800.0,NEAR BAY +-122.27,37.77,52.0,2388.0,559.0,1121.0,518.0,3.3269,234500.0,NEAR BAY +-122.25,37.77,52.0,2156.0,458.0,872.0,445.0,3.2685,254200.0,NEAR BAY +-122.26,37.77,52.0,1565.0,315.0,637.0,297.0,4.7778,351800.0,NEAR BAY +-122.26,37.77,52.0,1704.0,371.0,663.0,340.0,4.226,275000.0,NEAR BAY +-122.26,37.77,52.0,1210.0,168.0,411.0,172.0,3.3571,405400.0,NEAR BAY +-122.26,37.77,52.0,2097.0,444.0,915.0,413.0,2.9899,228100.0,NEAR BAY +-122.26,37.77,52.0,1848.0,479.0,921.0,477.0,2.875,234000.0,NEAR BAY +-122.24,37.77,43.0,955.0,284.0,585.0,266.0,2.3882,162500.0,NEAR BAY +-122.25,37.77,43.0,4329.0,1110.0,2086.0,1053.0,2.975,243400.0,NEAR BAY +-122.23,37.76,52.0,3011.0,542.0,1303.0,535.0,5.1039,273800.0,NEAR BAY +-122.23,37.76,52.0,1049.0,185.0,374.0,176.0,4.1458,248500.0,NEAR BAY +-122.24,37.76,52.0,2504.0,516.0,979.0,472.0,3.4762,244000.0,NEAR BAY +-122.24,37.76,52.0,1846.0,471.0,827.0,446.0,2.6833,240900.0,NEAR BAY +-122.23,37.76,52.0,1705.0,246.0,658.0,253.0,5.75,306300.0,NEAR BAY +-122.23,37.75,50.0,1542.0,289.0,654.0,268.0,3.9632,240000.0,NEAR BAY +-122.24,37.75,45.0,891.0,,384.0,146.0,4.9489,247100.0,NEAR BAY +-122.24,37.75,27.0,4051.0,753.0,1499.0,797.0,4.8711,286600.0,NEAR BAY +-122.24,37.76,52.0,2646.0,581.0,1128.0,522.0,3.0718,266700.0,NEAR BAY +-122.24,37.76,49.0,2428.0,525.0,1110.0,492.0,3.6719,229800.0,NEAR BAY +-122.24,37.76,52.0,2567.0,436.0,1119.0,415.0,4.6094,229300.0,NEAR BAY +-122.24,37.73,21.0,7031.0,1249.0,2930.0,1235.0,4.5213,228400.0,NEAR BAY +-122.25,37.74,25.0,1914.0,365.0,897.0,390.0,4.4562,206200.0,NEAR BAY +-122.24,37.72,5.0,18634.0,2885.0,7427.0,2718.0,7.611,350700.0,NEAR BAY +-122.27,37.73,31.0,5785.0,1379.0,2973.0,1312.0,3.2689,231000.0,NEAR BAY +-122.25,37.76,52.0,2876.0,648.0,1340.0,632.0,3.567,252900.0,NEAR BAY +-122.27,37.74,28.0,6909.0,1554.0,2974.0,1484.0,3.6875,353900.0,NEAR BAY +-122.27,37.77,23.0,5679.0,1270.0,2690.0,1151.0,4.7695,291700.0,NEAR BAY +-122.28,37.75,20.0,1156.0,365.0,583.0,326.0,3.1972,100000.0,NEAR BAY +-122.06,37.77,12.0,14316.0,2045.0,5781.0,2007.0,7.2634,341600.0,NEAR BAY +-122.06,37.73,5.0,3596.0,467.0,1738.0,512.0,7.0568,412500.0,NEAR BAY +-122.06,37.71,36.0,3541.0,570.0,1478.0,529.0,4.635,248600.0,NEAR BAY +-122.07,37.71,40.0,1808.0,302.0,746.0,270.0,5.3015,254900.0,NEAR BAY +-122.07,37.71,36.0,2879.0,480.0,1235.0,455.0,4.9801,241500.0,NEAR BAY +-122.07,37.72,26.0,3204.0,477.0,1411.0,484.0,5.4834,295200.0,NEAR BAY +-122.08,37.72,31.0,3866.0,531.0,1368.0,521.0,6.187,340400.0,NEAR BAY +-122.08,37.72,32.0,2476.0,368.0,1048.0,367.0,5.6194,274700.0,NEAR BAY +-122.08,37.71,35.0,2211.0,350.0,1004.0,365.0,5.4639,238600.0,NEAR BAY +-122.09,37.71,35.0,2663.0,387.0,1086.0,367.0,5.1498,266400.0,NEAR BAY +-122.1,37.72,30.0,2599.0,366.0,922.0,350.0,5.8382,330200.0,NEAR BAY +-122.11,37.71,36.0,4569.0,824.0,1950.0,819.0,4.65,206800.0,NEAR BAY +-122.1,37.7,25.0,2973.0,622.0,1413.0,595.0,4.3819,209200.0,NEAR BAY +-122.1,37.69,30.0,3115.0,625.0,1444.0,568.0,3.7222,195800.0,NEAR BAY +-122.09,37.71,31.0,1843.0,282.0,749.0,269.0,5.2855,253500.0,NEAR BAY +-122.09,37.7,31.0,2053.0,336.0,867.0,329.0,4.3375,241800.0,NEAR BAY +-122.1,37.71,27.0,6740.0,1073.0,2723.0,1035.0,5.2131,252500.0,NEAR BAY +-122.09,37.7,30.0,1751.0,269.0,731.0,263.0,6.005,263900.0,NEAR BAY +-122.08,37.71,38.0,1663.0,295.0,781.0,301.0,5.0519,227000.0,NEAR BAY +-122.08,37.71,38.0,3716.0,657.0,1784.0,652.0,4.8237,220900.0,NEAR BAY +-122.08,37.7,32.0,2718.0,447.0,1156.0,410.0,5.2497,259300.0,NEAR BAY +-122.07,37.7,39.0,1420.0,272.0,645.0,277.0,4.125,232500.0,NEAR BAY +-122.06,37.7,37.0,1893.0,310.0,821.0,315.0,4.6005,231600.0,NEAR BAY +-122.06,37.7,33.0,3906.0,790.0,1912.0,770.0,3.5187,209400.0,NEAR BAY +-122.07,37.7,32.0,3400.0,736.0,1487.0,694.0,3.0,223200.0,NEAR BAY +-122.08,37.7,25.0,3402.0,758.0,1645.0,710.0,3.4934,209900.0,NEAR BAY +-122.09,37.7,33.0,4413.0,1107.0,2239.0,1051.0,2.9861,208200.0,NEAR BAY +-122.07,37.69,29.0,2304.0,618.0,1021.0,552.0,2.5362,203800.0,NEAR BAY +-122.08,37.69,36.0,2350.0,499.0,1105.0,467.0,3.3021,195700.0,NEAR BAY +-122.07,37.69,31.0,5914.0,1309.0,2999.0,1295.0,3.0964,190500.0,NEAR BAY +-122.08,37.69,43.0,1575.0,324.0,740.0,284.0,2.8512,181000.0,NEAR BAY +-122.08,37.69,42.0,1414.0,274.0,629.0,244.0,3.3478,184900.0,NEAR BAY +-122.08,37.68,37.0,848.0,202.0,314.0,205.0,2.3958,190800.0,NEAR BAY +-122.08,37.68,15.0,3051.0,685.0,1479.0,668.0,3.5295,242200.0,NEAR BAY +-122.09,37.69,20.0,4296.0,817.0,1732.0,800.0,4.8036,188300.0,NEAR BAY +-122.15,37.74,52.0,2898.0,557.0,1338.0,550.0,3.851,183500.0,NEAR BAY +-122.14,37.74,52.0,1071.0,201.0,440.0,192.0,4.0662,204200.0,NEAR BAY +-122.14,37.73,51.0,2619.0,403.0,922.0,393.0,4.6042,251900.0,NEAR BAY +-122.15,37.74,49.0,1494.0,316.0,611.0,288.0,2.2,187500.0,NEAR BAY +-122.16,37.73,52.0,2260.0,416.0,994.0,412.0,4.1164,198200.0,NEAR BAY +-122.15,37.74,52.0,1394.0,223.0,545.0,230.0,3.95,219000.0,NEAR BAY +-122.15,37.73,52.0,1028.0,129.0,317.0,143.0,4.9135,275000.0,NEAR BAY +-122.15,37.73,45.0,3758.0,819.0,1573.0,736.0,2.8355,245400.0,NEAR BAY +-122.17,37.73,46.0,2163.0,470.0,925.0,435.0,3.25,177500.0,NEAR BAY +-122.16,37.73,49.0,1699.0,408.0,768.0,385.0,2.8301,171600.0,NEAR BAY +-122.17,37.73,52.0,1555.0,289.0,620.0,292.0,3.7159,183300.0,NEAR BAY +-122.16,37.73,52.0,1114.0,206.0,425.0,207.0,2.5625,175000.0,NEAR BAY +-122.18,37.72,45.0,1498.0,313.0,1003.0,305.0,3.8047,156700.0,NEAR BAY +-122.18,37.71,45.0,726.0,147.0,519.0,135.0,3.375,157500.0,NEAR BAY +-122.17,37.71,38.0,890.0,200.0,481.0,198.0,3.244,179800.0,NEAR BAY +-122.18,37.7,36.0,2639.0,533.0,1209.0,519.0,4.0268,205500.0,NEAR BAY +-122.18,37.7,35.0,2562.0,554.0,1398.0,525.0,3.3906,178900.0,NEAR BAY +-122.19,37.71,36.0,361.0,69.0,158.0,58.0,5.5461,262500.0,NEAR BAY +-122.17,37.72,42.0,3008.0,659.0,1817.0,664.0,3.371,165000.0,NEAR BAY +-122.17,37.72,46.0,1369.0,284.0,766.0,289.0,3.5313,159700.0,NEAR BAY +-122.17,37.72,5.0,1692.0,398.0,814.0,328.0,3.663,158300.0,NEAR BAY +-122.16,37.72,38.0,1007.0,245.0,618.0,239.0,2.875,144800.0,NEAR BAY +-122.17,37.72,43.0,3783.0,814.0,2139.0,789.0,4.0202,166300.0,NEAR BAY +-122.16,37.71,37.0,1507.0,242.0,632.0,253.0,4.5553,191000.0,NEAR BAY +-122.16,37.71,36.0,666.0,132.0,366.0,134.0,3.4643,175000.0,NEAR BAY +-122.16,37.72,10.0,2229.0,601.0,877.0,485.0,3.3431,137500.0,NEAR BAY +-122.15,37.73,28.0,2215.0,587.0,830.0,573.0,2.1898,141700.0,NEAR BAY +-122.15,37.72,31.0,1616.0,372.0,739.0,379.0,2.9097,210900.0,NEAR BAY +-122.15,37.72,47.0,1190.0,251.0,540.0,266.0,3.375,198300.0,NEAR BAY +-122.15,37.72,29.0,4169.0,1047.0,2024.0,962.0,2.8125,157400.0,NEAR BAY +-122.14,37.73,52.0,2024.0,320.0,823.0,334.0,5.0,264700.0,NEAR BAY +-122.14,37.73,38.0,1723.0,394.0,711.0,353.0,3.0673,218400.0,NEAR BAY +-122.14,37.73,43.0,2264.0,390.0,931.0,368.0,3.8125,235100.0,NEAR BAY +-122.13,37.73,33.0,1996.0,268.0,686.0,270.0,6.9096,341800.0,NEAR BAY +-122.13,37.72,26.0,2862.0,394.0,1030.0,397.0,7.912,367300.0,NEAR BAY +-122.13,37.72,35.0,2183.0,383.0,976.0,392.0,3.8393,243500.0,NEAR BAY +-122.12,37.71,35.0,1037.0,207.0,552.0,210.0,4.0,167900.0,NEAR BAY +-122.13,37.72,25.0,1134.0,153.0,340.0,171.0,6.5095,371200.0,NEAR BAY +-122.14,37.72,39.0,786.0,132.0,288.0,132.0,3.5156,218900.0,NEAR BAY +-122.14,37.72,45.0,1397.0,253.0,555.0,248.0,2.983,202700.0,NEAR BAY +-122.13,37.72,45.0,2315.0,451.0,1006.0,444.0,3.524,186200.0,NEAR BAY +-122.13,37.71,44.0,1613.0,339.0,776.0,346.0,3.1103,188900.0,NEAR BAY +-122.13,37.71,44.0,1421.0,298.0,609.0,270.0,3.5781,180000.0,NEAR BAY +-122.15,37.71,18.0,5778.0,1526.0,2441.0,1352.0,3.1682,202700.0,NEAR BAY +-122.14,37.71,27.0,3094.0,866.0,1364.0,789.0,2.6101,181700.0,NEAR BAY +-122.14,37.71,18.0,3905.0,1007.0,2197.0,1044.0,3.6932,166800.0,NEAR BAY +-122.13,37.7,43.0,3046.0,557.0,1333.0,544.0,3.4583,183700.0,NEAR BAY +-122.13,37.7,19.0,3516.0,710.0,1810.0,703.0,3.9032,218000.0,NEAR BAY +-122.15,37.71,36.0,998.0,178.0,531.0,183.0,4.0208,191500.0,NEAR BAY +-122.15,37.7,36.0,1464.0,244.0,672.0,261.0,3.5547,194700.0,NEAR BAY +-122.14,37.7,17.0,1463.0,292.0,695.0,330.0,4.5859,187200.0,NEAR BAY +-122.13,37.7,21.0,4124.0,1054.0,2162.0,998.0,2.6321,223100.0,NEAR BAY +-122.13,37.69,17.0,2380.0,769.0,1216.0,643.0,3.395,271300.0,NEAR BAY +-122.14,37.7,36.0,1266.0,228.0,606.0,239.0,3.9702,194100.0,NEAR BAY +-122.16,37.7,36.0,2239.0,391.0,1203.0,379.0,5.0043,190400.0,NEAR BAY +-122.14,37.69,38.0,1571.0,317.0,874.0,301.0,4.4659,189100.0,NEAR BAY +-122.15,37.69,38.0,1246.0,221.0,637.0,222.0,3.6625,184600.0,NEAR BAY +-122.15,37.69,36.0,1501.0,287.0,703.0,276.0,3.8864,197300.0,NEAR BAY +-122.15,37.7,36.0,1468.0,252.0,733.0,229.0,3.4583,192600.0,NEAR BAY +-122.16,37.69,36.0,1118.0,219.0,625.0,228.0,3.7813,192200.0,NEAR BAY +-122.16,37.7,36.0,1097.0,208.0,568.0,225.0,2.9917,194600.0,NEAR BAY +-122.16,37.7,36.0,1719.0,303.0,836.0,311.0,4.4375,193500.0,NEAR BAY +-122.17,37.7,24.0,1755.0,365.0,952.0,362.0,4.0,202600.0,NEAR BAY +-122.16,37.68,16.0,1687.0,348.0,568.0,352.0,2.3869,83300.0,NEAR BAY +-122.17,37.69,24.0,2262.0,391.0,1125.0,366.0,4.7609,212600.0,NEAR BAY +-122.18,37.68,5.0,2087.0,407.0,840.0,401.0,5.4858,187800.0,NEAR BAY +-122.16,37.69,36.0,1480.0,278.0,796.0,283.0,4.3971,205700.0,NEAR BAY +-122.15,37.69,36.0,1545.0,273.0,863.0,267.0,4.0109,192900.0,NEAR BAY +-122.15,37.68,35.0,2632.0,447.0,1349.0,486.0,4.3864,205200.0,NEAR BAY +-122.15,37.68,30.0,2261.0,443.0,929.0,383.0,4.2841,213400.0,NEAR BAY +-122.15,37.69,39.0,1670.0,308.0,957.0,335.0,5.1312,183600.0,NEAR BAY +-122.14,37.69,37.0,2141.0,535.0,1093.0,555.0,2.9958,178400.0,NEAR BAY +-122.14,37.68,27.0,3337.0,613.0,1489.0,607.0,3.6364,219200.0,NEAR BAY +-122.14,37.68,31.0,3184.0,716.0,1561.0,628.0,2.7955,183100.0,NEAR BAY +-122.1,37.69,44.0,2341.0,500.0,1256.0,485.0,2.9507,157100.0,NEAR BAY +-122.12,37.69,30.0,1197.0,269.0,695.0,279.0,3.4375,157800.0,NEAR BAY +-122.13,37.69,34.0,1131.0,278.0,560.0,237.0,2.875,161700.0,NEAR BAY +-122.12,37.71,38.0,1164.0,284.0,632.0,289.0,3.0345,152100.0,NEAR BAY +-122.12,37.7,41.0,3495.0,787.0,1849.0,750.0,2.679,144900.0,NEAR BAY +-122.12,37.7,17.0,2488.0,617.0,1287.0,538.0,2.9922,179900.0,NEAR BAY +-122.12,37.69,35.0,2681.0,508.0,1580.0,536.0,4.1042,179100.0,NEAR BAY +-122.12,37.7,19.0,2495.0,635.0,1571.0,579.0,2.5833,159900.0,NEAR BAY +-122.11,37.7,23.0,1689.0,461.0,828.0,443.0,2.1552,161400.0,NEAR BAY +-122.11,37.7,29.0,1298.0,306.0,835.0,338.0,2.3274,170400.0,NEAR BAY +-122.11,37.7,19.0,2693.0,789.0,1765.0,724.0,2.4206,137500.0,NEAR BAY +-122.1,37.69,41.0,746.0,,387.0,161.0,3.9063,178400.0,NEAR BAY +-122.11,37.69,37.0,2444.0,651.0,1562.0,618.0,2.6464,155200.0,NEAR BAY +-122.11,37.69,42.0,1472.0,310.0,768.0,309.0,3.4643,160900.0,NEAR BAY +-122.12,37.69,10.0,2227.0,560.0,1140.0,472.0,2.3973,167300.0,NEAR BAY +-122.03,37.69,20.0,200.0,25.0,83.0,31.0,6.5,340000.0,NEAR BAY +-121.97,37.64,32.0,1283.0,194.0,485.0,171.0,6.0574,431000.0,<1H OCEAN +-122.02,37.63,6.0,2445.0,590.0,1189.0,573.0,3.8958,301100.0,NEAR BAY +-122.04,37.63,21.0,1307.0,236.0,586.0,249.0,4.7813,241900.0,NEAR BAY +-122.05,37.63,5.0,3785.0,936.0,2240.0,792.0,3.2829,162500.0,NEAR BAY +-122.04,37.66,10.0,2031.0,357.0,867.0,352.0,5.3169,299200.0,NEAR BAY +-122.04,37.65,10.0,8299.0,1326.0,3827.0,1288.0,6.2579,315500.0,NEAR BAY +-122.05,37.68,23.0,7518.0,1279.0,3827.0,1294.0,5.1701,216800.0,NEAR BAY +-122.07,37.68,36.0,1815.0,426.0,1280.0,431.0,3.25,218100.0,NEAR BAY +-122.06,37.68,30.0,5367.0,1207.0,2667.0,1047.0,3.1796,170300.0,NEAR BAY +-122.08,37.68,26.0,1167.0,370.0,253.0,137.0,2.4196,275000.0,NEAR BAY +-122.08,37.68,26.0,2607.0,682.0,1401.0,607.0,2.6563,184100.0,NEAR BAY +-122.08,37.67,29.0,493.0,168.0,233.0,152.0,0.9637,160000.0,NEAR BAY +-122.09,37.67,48.0,1252.0,305.0,673.0,308.0,2.3357,175000.0,NEAR BAY +-122.09,37.68,41.0,1382.0,353.0,704.0,314.0,3.5114,197500.0,NEAR BAY +-122.09,37.69,43.0,500.0,110.0,273.0,120.0,3.3125,150000.0,NEAR BAY +-122.09,37.68,29.0,2333.0,538.0,1120.0,540.0,2.4042,205600.0,NEAR BAY +-122.09,37.68,41.0,1834.0,463.0,1105.0,467.0,2.8322,170300.0,NEAR BAY +-122.09,37.68,43.0,1415.0,348.0,569.0,293.0,2.5156,190900.0,NEAR BAY +-122.1,37.68,37.0,1352.0,342.0,691.0,324.0,3.4032,196900.0,NEAR BAY +-122.1,37.68,37.0,2116.0,503.0,1109.0,448.0,2.535,174000.0,NEAR BAY +-122.11,37.68,37.0,1976.0,481.0,1197.0,465.0,2.5772,170200.0,NEAR BAY +-122.1,37.68,38.0,1779.0,413.0,1061.0,400.0,3.0962,180900.0,NEAR BAY +-122.1,37.67,34.0,3659.0,897.0,2479.0,903.0,2.9564,150500.0,NEAR BAY +-122.1,37.68,31.0,1892.0,428.0,1162.0,389.0,3.125,167100.0,NEAR BAY +-122.12,37.68,35.0,1958.0,484.0,1146.0,448.0,2.95,148900.0,NEAR BAY +-122.12,37.68,40.0,1553.0,253.0,724.0,267.0,4.38,196400.0,NEAR BAY +-122.12,37.68,37.0,2412.0,394.0,975.0,375.0,4.0417,191100.0,NEAR BAY +-122.11,37.67,36.0,2110.0,389.0,952.0,370.0,3.8,187500.0,NEAR BAY +-122.12,37.68,45.0,2179.0,401.0,1159.0,399.0,3.4839,180600.0,NEAR BAY +-122.13,37.68,45.0,2457.0,445.0,1129.0,422.0,4.0588,182800.0,NEAR BAY +-122.13,37.68,44.0,2147.0,399.0,1175.0,401.0,4.1974,179300.0,NEAR BAY +-122.13,37.68,43.0,1676.0,340.0,924.0,328.0,3.6,179400.0,NEAR BAY +-122.14,37.68,35.0,2976.0,518.0,1424.0,538.0,4.267,210300.0,NEAR BAY +-122.14,37.67,34.0,3036.0,533.0,1366.0,500.0,4.2386,192300.0,NEAR BAY +-122.15,37.67,35.0,2472.0,398.0,1171.0,390.0,5.5797,198100.0,NEAR BAY +-122.14,37.67,36.0,1487.0,249.0,641.0,243.0,4.0682,196200.0,NEAR BAY +-122.13,37.67,38.0,2012.0,347.0,880.0,332.0,3.1734,181600.0,NEAR BAY +-122.14,37.67,37.0,3342.0,,1635.0,557.0,4.7933,186900.0,NEAR BAY +-122.14,37.67,37.0,3156.0,534.0,1495.0,543.0,4.8125,188300.0,NEAR BAY +-122.13,37.67,40.0,1748.0,318.0,914.0,317.0,3.8676,184000.0,NEAR BAY +-122.12,37.67,33.0,3429.0,681.0,1798.0,694.0,3.9395,184700.0,NEAR BAY +-122.13,37.67,42.0,3592.0,703.0,1625.0,665.0,3.2434,179900.0,NEAR BAY +-122.11,37.67,38.0,1035.0,247.0,599.0,224.0,3.0917,167200.0,NEAR BAY +-122.11,37.67,32.0,3028.0,811.0,2037.0,703.0,3.0645,165400.0,NEAR BAY +-122.09,37.67,33.0,2431.0,655.0,1854.0,603.0,2.7019,154000.0,NEAR BAY +-122.09,37.67,39.0,2069.0,500.0,1408.0,478.0,3.1115,153500.0,NEAR BAY +-122.09,37.66,40.0,1340.0,313.0,766.0,271.0,3.4722,135400.0,NEAR BAY +-122.09,37.66,39.0,1160.0,259.0,725.0,274.0,2.2222,158300.0,NEAR BAY +-122.05,37.68,32.0,2015.0,318.0,1019.0,340.0,6.1104,240700.0,NEAR BAY +-122.06,37.67,22.0,3882.0,816.0,1830.0,743.0,4.2733,180700.0,NEAR BAY +-122.07,37.67,27.0,3239.0,671.0,1469.0,616.0,3.2465,230600.0,NEAR BAY +-122.07,37.67,28.0,2932.0,739.0,1198.0,624.0,3.2417,210800.0,NEAR BAY +-122.07,37.67,38.0,2104.0,409.0,1039.0,394.0,3.875,165300.0,NEAR BAY +-122.04,37.67,29.0,1694.0,251.0,690.0,242.0,6.0501,254200.0,NEAR BAY +-122.04,37.67,18.0,3000.0,419.0,1155.0,415.0,6.8233,332600.0,NEAR BAY +-122.04,37.66,23.0,2419.0,348.0,1066.0,384.0,6.3501,350000.0,NEAR BAY +-122.07,37.66,28.0,2280.0,610.0,1255.0,587.0,2.6719,161200.0,NEAR BAY +-122.07,37.66,21.0,5031.0,1168.0,2461.0,1042.0,3.875,179300.0,NEAR BAY +-122.08,37.66,33.0,1547.0,372.0,1063.0,356.0,2.5625,154300.0,NEAR BAY +-122.07,37.65,31.0,3300.0,790.0,2181.0,740.0,3.016,161800.0,NEAR BAY +-122.08,37.65,17.0,5018.0,1439.0,3069.0,1299.0,2.7694,161900.0,NEAR BAY +-122.08,37.65,35.0,1813.0,393.0,1093.0,374.0,3.6818,165400.0,NEAR BAY +-122.08,37.66,37.0,1997.0,436.0,1349.0,437.0,2.1382,166600.0,NEAR BAY +-122.1,37.66,37.0,901.0,191.0,599.0,206.0,3.7303,149700.0,NEAR BAY +-122.1,37.66,35.0,686.0,142.0,480.0,149.0,3.875,162100.0,NEAR BAY +-122.1,37.66,33.0,1954.0,464.0,1293.0,448.0,3.0489,152600.0,NEAR BAY +-122.09,37.65,27.0,2630.0,722.0,1414.0,634.0,2.8203,195200.0,NEAR BAY +-122.09,37.65,35.0,1130.0,192.0,543.0,184.0,4.3897,190600.0,NEAR BAY +-122.09,37.65,35.0,1184.0,200.0,572.0,194.0,4.7143,193800.0,NEAR BAY +-122.1,37.66,34.0,656.0,115.0,342.0,112.0,4.6875,200600.0,NEAR BAY +-122.11,37.66,29.0,2544.0,643.0,2332.0,603.0,3.2091,150000.0,NEAR BAY +-122.1,37.66,36.0,1305.0,225.0,768.0,234.0,4.275,185300.0,NEAR BAY +-122.11,37.66,36.0,1755.0,316.0,913.0,299.0,4.1302,172700.0,NEAR BAY +-122.11,37.66,35.0,2843.0,652.0,1726.0,643.0,3.09,174100.0,NEAR BAY +-122.1,37.65,25.0,2538.0,494.0,1185.0,501.0,4.5417,194400.0,NEAR BAY +-122.1,37.64,28.0,1784.0,311.0,735.0,278.0,4.6635,206700.0,NEAR BAY +-122.1,37.65,31.0,1797.0,327.0,796.0,319.0,4.4427,204500.0,NEAR BAY +-122.1,37.65,36.0,410.0,76.0,252.0,82.0,4.5303,175000.0,NEAR BAY +-122.12,37.65,26.0,162.0,27.0,86.0,25.0,2.375,137500.0,NEAR BAY +-122.1,37.63,18.0,9963.0,2031.0,5613.0,1946.0,3.8171,187200.0,NEAR BAY +-122.1,37.61,35.0,2361.0,458.0,1727.0,467.0,4.5281,173600.0,NEAR BAY +-122.13,37.66,19.0,862.0,167.0,407.0,183.0,4.3456,163000.0,NEAR BAY +-122.11,37.65,18.0,4335.0,808.0,2041.0,734.0,3.4861,331600.0,NEAR BAY +-122.11,37.64,31.0,1487.0,280.0,854.0,301.0,5.2312,197600.0,NEAR BAY +-122.11,37.64,8.0,3592.0,849.0,1907.0,746.0,3.6708,197900.0,NEAR BAY +-122.12,37.64,40.0,432.0,102.0,264.0,77.0,3.8875,228100.0,NEAR BAY +-122.09,37.63,34.0,1457.0,242.0,735.0,249.0,3.9167,189500.0,NEAR BAY +-122.09,37.64,32.0,1578.0,284.0,836.0,292.0,3.9063,184200.0,NEAR BAY +-122.1,37.63,29.0,2172.0,435.0,1377.0,408.0,3.7895,180900.0,NEAR BAY +-122.08,37.64,36.0,1340.0,245.0,789.0,248.0,3.8,172000.0,NEAR BAY +-122.08,37.64,36.0,1116.0,199.0,662.0,226.0,5.7309,177900.0,NEAR BAY +-122.09,37.64,36.0,1885.0,307.0,853.0,271.0,4.1141,173100.0,NEAR BAY +-122.09,37.64,36.0,1180.0,212.0,664.0,200.0,5.2838,172600.0,NEAR BAY +-122.08,37.64,30.0,5267.0,1253.0,4065.0,1113.0,3.3479,182100.0,NEAR BAY +-122.08,37.64,23.0,1897.0,440.0,1109.0,418.0,3.142,179500.0,NEAR BAY +-122.08,37.63,31.0,767.0,171.0,548.0,185.0,3.7614,176000.0,NEAR BAY +-122.08,37.63,33.0,691.0,127.0,431.0,149.0,4.25,192600.0,NEAR BAY +-122.08,37.64,36.0,786.0,133.0,463.0,160.0,3.9338,182700.0,NEAR BAY +-122.07,37.64,22.0,5861.0,1516.0,5436.0,1463.0,2.5158,134900.0,NEAR BAY +-122.07,37.63,27.0,2784.0,723.0,2028.0,693.0,2.4808,157600.0,NEAR BAY +-122.07,37.64,25.0,4524.0,860.0,2426.0,862.0,4.7083,190900.0,NEAR BAY +-122.06,37.64,37.0,1468.0,304.0,1038.0,282.0,4.1652,158200.0,NEAR BAY +-122.06,37.64,20.0,1655.0,450.0,857.0,430.0,3.5541,350000.0,NEAR BAY +-122.06,37.65,33.0,1227.0,286.0,848.0,291.0,3.8036,158200.0,NEAR BAY +-122.06,37.64,33.0,1160.0,252.0,729.0,220.0,3.8259,146100.0,NEAR BAY +-122.04,37.63,33.0,952.0,172.0,369.0,159.0,3.2331,226700.0,NEAR BAY +-122.03,37.62,35.0,2072.0,352.0,1001.0,350.0,4.7109,198700.0,NEAR BAY +-122.03,37.62,32.0,2964.0,547.0,1472.0,527.0,4.2468,221200.0,NEAR BAY +-122.04,37.62,35.0,1032.0,173.0,453.0,176.0,6.396,208500.0,NEAR BAY +-122.04,37.62,35.0,657.0,118.0,328.0,134.0,3.8125,204200.0,NEAR BAY +-122.04,37.62,32.0,1540.0,324.0,793.0,302.0,3.2857,193200.0,NEAR BAY +-122.03,37.62,35.0,1298.0,236.0,632.0,204.0,3.8929,209500.0,NEAR BAY +-122.03,37.61,36.0,1409.0,271.0,1002.0,281.0,3.7262,164900.0,NEAR BAY +-122.03,37.61,37.0,1383.0,259.0,808.0,241.0,4.0125,161400.0,NEAR BAY +-122.04,37.61,36.0,1151.0,216.0,727.0,215.0,4.1719,187000.0,NEAR BAY +-122.04,37.62,35.0,899.0,179.0,455.0,185.0,4.2857,190400.0,NEAR BAY +-122.08,37.63,37.0,1793.0,364.0,1534.0,346.0,3.6458,156600.0,NEAR BAY +-122.08,37.62,17.0,2485.0,518.0,1139.0,550.0,2.6875,157300.0,NEAR BAY +-122.07,37.63,35.0,1931.0,376.0,1175.0,337.0,3.7292,168100.0,NEAR BAY +-122.07,37.63,24.0,2329.0,465.0,1401.0,453.0,4.5913,177600.0,NEAR BAY +-122.06,37.63,12.0,6711.0,1374.0,3388.0,1289.0,3.8625,208900.0,NEAR BAY +-122.06,37.63,23.0,1939.0,356.0,841.0,364.0,3.3611,169200.0,NEAR BAY +-122.05,37.61,16.0,1642.0,346.0,705.0,351.0,2.8971,163900.0,NEAR BAY +-122.08,37.63,34.0,1619.0,293.0,1148.0,310.0,4.0326,164700.0,NEAR BAY +-122.08,37.63,35.0,517.0,108.0,391.0,107.0,4.0682,156900.0,NEAR BAY +-122.09,37.63,36.0,1570.0,274.0,992.0,249.0,5.3644,168800.0,NEAR BAY +-122.09,37.63,35.0,1213.0,221.0,790.0,243.0,4.7019,174100.0,NEAR BAY +-122.08,37.62,27.0,1826.0,309.0,1016.0,313.0,5.64,206500.0,NEAR BAY +-122.08,37.61,26.0,2261.0,443.0,1039.0,395.0,3.7931,203900.0,NEAR BAY +-121.99,37.61,9.0,3666.0,711.0,2341.0,703.0,4.6458,217000.0,<1H OCEAN +-122.02,37.6,36.0,1633.0,345.0,1382.0,338.0,3.694,159600.0,NEAR BAY +-122.02,37.6,31.0,2155.0,522.0,1858.0,437.0,2.652,159800.0,NEAR BAY +-122.02,37.6,32.0,1295.0,280.0,1156.0,300.0,3.5,154300.0,NEAR BAY +-122.02,37.6,32.0,1295.0,295.0,1097.0,328.0,3.2386,149600.0,NEAR BAY +-122.03,37.61,33.0,1518.0,302.0,831.0,268.0,5.097,188600.0,NEAR BAY +-122.04,37.6,17.0,3314.0,638.0,1873.0,602.0,4.3875,238500.0,NEAR BAY +-122.06,37.6,22.0,3009.0,497.0,1640.0,514.0,4.625,235300.0,NEAR BAY +-122.08,37.61,6.0,2605.0,474.0,1568.0,433.0,5.0406,261400.0,NEAR BAY +-122.06,37.6,17.0,5159.0,832.0,3174.0,817.0,5.8704,234400.0,NEAR BAY +-122.06,37.6,18.0,1726.0,276.0,1186.0,310.0,5.3226,231700.0,NEAR BAY +-122.08,37.59,16.0,1816.0,365.0,1367.0,355.0,4.235,156300.0,NEAR BAY +-122.07,37.59,13.0,2578.0,551.0,1680.0,528.0,4.825,222000.0,NEAR BAY +-122.08,37.58,15.0,2576.0,418.0,1657.0,410.0,5.5218,254400.0,NEAR BAY +-122.07,37.58,16.0,1644.0,251.0,1033.0,267.0,6.5116,244300.0,NEAR BAY +-122.07,37.58,16.0,1606.0,240.0,1117.0,268.0,6.0661,247000.0,NEAR BAY +-122.08,37.58,16.0,3349.0,544.0,2003.0,488.0,6.0074,236500.0,NEAR BAY +-122.07,37.59,15.0,3475.0,686.0,2568.0,653.0,4.6211,151400.0,NEAR BAY +-122.07,37.58,16.0,1893.0,338.0,1461.0,344.0,5.225,213700.0,NEAR BAY +-122.04,37.59,14.0,1727.0,302.0,1116.0,273.0,5.3428,243600.0,NEAR BAY +-122.05,37.59,15.0,6243.0,1273.0,3163.0,1274.0,3.7462,212500.0,NEAR BAY +-122.03,37.6,24.0,2077.0,383.0,1488.0,389.0,4.5721,214700.0,NEAR BAY +-122.02,37.59,18.0,1165.0,333.0,855.0,319.0,3.6923,213200.0,NEAR BAY +-122.03,37.59,16.0,4371.0,889.0,2530.0,817.0,4.6786,256000.0,NEAR BAY +-122.01,37.59,2.0,838.0,295.0,240.0,149.0,2.875,237500.0,NEAR BAY +-122.02,37.58,15.0,3052.0,760.0,2097.0,728.0,3.3617,178100.0,NEAR BAY +-122.01,37.58,17.0,4313.0,717.0,2629.0,721.0,5.7579,231800.0,NEAR BAY +-122.09,37.6,36.0,385.0,94.0,295.0,92.0,2.9706,147900.0,NEAR BAY +-122.08,37.6,10.0,3046.0,678.0,2056.0,628.0,3.9022,191700.0,NEAR BAY +-121.97,37.57,21.0,4342.0,783.0,2172.0,789.0,4.6146,247600.0,<1H OCEAN +-121.96,37.58,15.0,3575.0,597.0,1777.0,559.0,5.7192,283500.0,<1H OCEAN +-121.98,37.58,20.0,4126.0,1031.0,2079.0,975.0,3.6832,216900.0,<1H OCEAN +-121.99,37.58,31.0,2878.0,478.0,1276.0,485.0,6.2073,282500.0,<1H OCEAN +-122.0,37.58,6.0,4405.0,717.0,2071.0,688.0,5.8151,295600.0,<1H OCEAN +-122.01,37.57,14.0,16199.0,2993.0,8117.0,2847.0,5.8322,281800.0,NEAR BAY +-122.04,37.58,14.0,14917.0,2708.0,8012.0,2606.0,5.6277,269800.0,NEAR BAY +-122.04,37.57,12.0,5719.0,1064.0,3436.0,1057.0,5.2879,231200.0,NEAR BAY +-122.07,37.57,8.0,8647.0,1407.0,5019.0,1379.0,6.5615,318300.0,NEAR BAY +-122.06,37.58,15.0,8112.0,1376.0,4576.0,1348.0,5.6758,253400.0,NEAR BAY +-122.05,37.57,7.0,10648.0,1818.0,6075.0,1797.0,6.1047,278200.0,NEAR BAY +-121.93,37.49,5.0,1150.0,311.0,648.0,245.0,3.5714,300000.0,<1H OCEAN +-122.07,37.52,3.0,14014.0,2861.0,7205.0,2753.0,6.0824,273500.0,NEAR BAY +-122.02,37.56,23.0,4332.0,857.0,2461.0,829.0,4.3594,223400.0,NEAR BAY +-122.02,37.56,35.0,1716.0,312.0,914.0,316.0,5.5737,214500.0,NEAR BAY +-122.03,37.56,31.0,4981.0,964.0,2841.0,924.0,4.8962,220200.0,NEAR BAY +-122.03,37.56,24.0,8444.0,1492.0,4446.0,1491.0,4.6978,240300.0,NEAR BAY +-122.01,37.56,6.0,3028.0,778.0,1531.0,736.0,4.4259,158000.0,NEAR BAY +-122.01,37.55,26.0,2068.0,532.0,1434.0,495.0,3.3008,224200.0,NEAR BAY +-122.02,37.55,33.0,1325.0,274.0,909.0,267.0,4.5687,177200.0,NEAR BAY +-122.01,37.56,24.0,2563.0,485.0,1174.0,501.0,3.8179,216100.0,NEAR BAY +-121.99,37.56,18.0,5505.0,1005.0,2641.0,971.0,5.0,269700.0,<1H OCEAN +-121.99,37.56,20.0,6462.0,1294.0,3288.0,1235.0,4.3393,231200.0,<1H OCEAN +-121.96,37.55,4.0,3746.0,993.0,1606.0,838.0,4.1387,162500.0,<1H OCEAN +-121.97,37.56,13.0,8918.0,1823.0,4518.0,1772.0,4.8052,254000.0,<1H OCEAN +-121.97,37.54,31.0,1949.0,344.0,986.0,322.0,4.6349,196200.0,<1H OCEAN +-121.97,37.55,17.0,4924.0,1247.0,3080.0,1182.0,3.168,189400.0,<1H OCEAN +-121.98,37.54,17.0,5133.0,1375.0,3386.0,1339.0,3.1326,220800.0,<1H OCEAN +-121.99,37.55,16.0,6647.0,2098.0,4649.0,1903.0,2.9074,213800.0,<1H OCEAN +-121.94,37.56,15.0,5674.0,748.0,2412.0,714.0,8.3996,442900.0,<1H OCEAN +-121.95,37.55,21.0,10687.0,1540.0,4552.0,1520.0,6.6478,333400.0,<1H OCEAN +-121.93,37.54,25.0,1354.0,192.0,596.0,220.0,6.629,352400.0,<1H OCEAN +-121.94,37.54,27.0,3715.0,526.0,1631.0,538.0,6.2179,305300.0,<1H OCEAN +-121.94,37.53,33.0,2095.0,342.0,941.0,304.0,5.761,259600.0,<1H OCEAN +-121.95,37.54,29.0,3517.0,645.0,1724.0,585.0,4.6641,248900.0,<1H OCEAN +-121.94,37.54,31.0,2537.0,382.0,1067.0,410.0,6.7599,356000.0,<1H OCEAN +-121.96,37.54,14.0,5106.0,1207.0,2738.0,1108.0,3.9909,236000.0,<1H OCEAN +-121.96,37.53,23.0,2215.0,475.0,1278.0,492.0,4.2955,218800.0,<1H OCEAN +-121.96,37.53,28.0,2949.0,529.0,1538.0,545.0,4.9615,228000.0,<1H OCEAN +-121.96,37.53,18.0,2375.0,652.0,1252.0,586.0,2.6198,235900.0,<1H OCEAN +-121.97,37.54,28.0,2312.0,496.0,1344.0,467.0,4.7135,203200.0,<1H OCEAN +-121.97,37.53,35.0,2277.0,420.0,1353.0,413.0,4.75,197000.0,<1H OCEAN +-121.97,37.53,26.0,2506.0,387.0,1273.0,406.0,5.4299,236400.0,<1H OCEAN +-121.98,37.53,28.0,2829.0,566.0,1610.0,540.0,4.6,223200.0,<1H OCEAN +-121.98,37.53,26.0,3179.0,703.0,2142.0,639.0,4.1947,222700.0,<1H OCEAN +-121.99,37.54,26.0,2332.0,371.0,1285.0,404.0,5.388,225000.0,<1H OCEAN +-121.99,37.54,18.0,3584.0,715.0,1673.0,661.0,3.9444,240100.0,<1H OCEAN +-121.99,37.54,28.0,3046.0,507.0,1772.0,516.0,5.3283,227900.0,<1H OCEAN +-121.99,37.55,28.0,2414.0,415.0,1106.0,453.0,4.8403,268600.0,<1H OCEAN +-122.0,37.54,29.0,4133.0,744.0,2023.0,749.0,5.1616,275100.0,<1H OCEAN +-122.01,37.55,34.0,2791.0,495.0,1276.0,468.0,4.9167,256300.0,NEAR BAY +-122.0,37.55,27.0,6103.0,1249.0,3026.0,1134.0,4.1591,332400.0,<1H OCEAN +-122.01,37.54,32.0,2572.0,406.0,1128.0,395.0,5.0,287600.0,NEAR BAY +-122.0,37.54,26.0,1910.0,371.0,852.0,357.0,5.8325,298900.0,<1H OCEAN +-122.01,37.53,27.0,1890.0,303.0,889.0,314.0,5.7057,287600.0,NEAR BAY +-121.99,37.53,25.0,5405.0,939.0,2831.0,923.0,5.0423,222200.0,<1H OCEAN +-121.97,37.52,26.0,3761.0,623.0,1776.0,613.0,4.5317,232600.0,<1H OCEAN +-121.97,37.51,25.0,3333.0,511.0,1671.0,504.0,5.4359,258300.0,<1H OCEAN +-121.97,37.52,23.0,4925.0,948.0,2530.0,894.0,5.0824,230900.0,<1H OCEAN +-121.95,37.52,33.0,3994.0,764.0,2721.0,763.0,5.2308,196900.0,<1H OCEAN +-121.96,37.51,22.0,5811.0,1125.0,3215.0,1086.0,4.4107,223500.0,<1H OCEAN +-121.96,37.52,26.0,4211.0,741.0,2352.0,734.0,5.2396,223900.0,<1H OCEAN +-121.93,37.53,27.0,5532.0,973.0,2855.0,960.0,4.7478,243500.0,<1H OCEAN +-121.92,37.53,7.0,28258.0,3864.0,12203.0,3701.0,8.4045,451100.0,<1H OCEAN +-121.89,37.49,9.0,4909.0,577.0,1981.0,591.0,9.7194,500001.0,<1H OCEAN +-121.92,37.49,10.0,7441.0,1588.0,3571.0,1466.0,5.1643,193100.0,<1H OCEAN +-121.92,37.48,23.0,4314.0,676.0,1972.0,623.0,5.3813,264400.0,<1H OCEAN +-121.92,37.47,26.0,2016.0,322.0,1105.0,357.0,6.0878,246900.0,<1H OCEAN +-121.91,37.47,13.0,5377.0,744.0,2759.0,760.0,6.868,337300.0,<1H OCEAN +-122.03,37.55,22.0,9167.0,1373.0,4319.0,1404.0,6.992,284800.0,NEAR BAY +-122.03,37.55,26.0,3087.0,532.0,1597.0,483.0,4.9118,217300.0,NEAR BAY +-122.04,37.55,23.0,3170.0,532.0,1446.0,515.0,4.4357,291700.0,NEAR BAY +-122.04,37.54,26.0,2145.0,369.0,1285.0,377.0,4.9464,223800.0,NEAR BAY +-122.05,37.54,25.0,4209.0,731.0,2568.0,703.0,5.2882,223100.0,NEAR BAY +-122.05,37.55,23.0,4247.0,835.0,2357.0,823.0,5.1321,211300.0,NEAR BAY +-122.04,37.53,25.0,4458.0,922.0,2998.0,890.0,3.9667,218500.0,NEAR BAY +-122.04,37.5,17.0,407.0,97.0,307.0,100.0,3.1696,156300.0,NEAR BAY +-122.06,37.54,20.0,6483.0,1068.0,3526.0,1060.0,5.0838,248200.0,NEAR BAY +-122.03,37.54,35.0,1867.0,343.0,1213.0,338.0,4.8214,186000.0,NEAR BAY +-122.03,37.54,6.0,2918.0,672.0,1911.0,639.0,4.1406,178200.0,NEAR BAY +-122.04,37.53,34.0,2316.0,478.0,1524.0,467.0,3.7364,190400.0,NEAR BAY +-122.02,37.54,31.0,1240.0,264.0,719.0,236.0,3.535,210300.0,NEAR BAY +-122.03,37.54,16.0,4458.0,856.0,3038.0,870.0,5.0739,208000.0,NEAR BAY +-122.03,37.53,18.0,1746.0,437.0,1268.0,404.0,3.256,183300.0,NEAR BAY +-122.01,37.53,19.0,4572.0,712.0,2346.0,709.0,6.0667,245700.0,NEAR BAY +-122.02,37.53,21.0,4280.0,673.0,2216.0,681.0,5.7072,242200.0,NEAR BAY +-122.0,37.51,7.0,6352.0,1390.0,3223.0,1316.0,4.9867,181700.0,<1H OCEAN +-121.92,37.72,4.0,7477.0,1576.0,2937.0,1506.0,5.1437,299400.0,<1H OCEAN +-121.92,37.72,22.0,4638.0,716.0,2302.0,687.0,5.347,219500.0,<1H OCEAN +-121.91,37.71,25.0,4377.0,668.0,2038.0,671.0,5.7233,231800.0,<1H OCEAN +-121.93,37.72,26.0,3816.0,637.0,1935.0,642.0,4.4697,221300.0,<1H OCEAN +-121.93,37.72,26.0,2806.0,459.0,1453.0,444.0,4.9107,213800.0,<1H OCEAN +-121.93,37.71,26.0,4822.0,845.0,2288.0,805.0,4.2281,206000.0,<1H OCEAN +-121.94,37.71,15.0,6473.0,1027.0,2484.0,970.0,5.0143,271100.0,<1H OCEAN +-121.96,37.71,6.0,8072.0,1050.0,3386.0,1062.0,7.2494,336500.0,<1H OCEAN +-121.92,37.64,46.0,1280.0,209.0,512.0,208.0,5.1406,315600.0,INLAND +-121.93,37.66,24.0,3166.0,424.0,1081.0,400.0,8.3337,500001.0,<1H OCEAN +-121.92,37.69,13.0,3742.0,555.0,1590.0,559.0,7.316,285400.0,<1H OCEAN +-121.9,37.66,18.0,7397.0,1137.0,3126.0,1115.0,6.4994,323000.0,INLAND +-121.92,37.68,23.0,1655.0,223.0,706.0,219.0,7.2211,291900.0,<1H OCEAN +-121.93,37.7,3.0,2456.0,582.0,793.0,456.0,4.4087,225600.0,<1H OCEAN +-121.91,37.69,23.0,2179.0,308.0,926.0,299.0,5.9345,259600.0,<1H OCEAN +-121.91,37.68,20.0,1804.0,254.0,831.0,260.0,6.177,262900.0,<1H OCEAN +-121.91,37.68,18.0,3631.0,547.0,1700.0,520.0,5.817,257300.0,<1H OCEAN +-121.91,37.69,18.0,2876.0,423.0,1395.0,427.0,6.3132,259200.0,<1H OCEAN +-121.89,37.68,12.0,7490.0,1207.0,3329.0,1136.0,6.3373,339700.0,<1H OCEAN +-121.88,37.68,23.0,2234.0,270.0,854.0,286.0,7.333,337200.0,INLAND +-121.89,37.68,22.0,1898.0,239.0,734.0,245.0,6.2918,334100.0,<1H OCEAN +-121.88,37.67,16.0,4070.0,624.0,1543.0,577.0,6.5214,311500.0,INLAND +-121.88,37.67,25.0,2244.0,301.0,937.0,324.0,6.4524,296900.0,INLAND +-121.89,37.67,20.0,2948.0,471.0,1181.0,474.0,6.0604,247900.0,INLAND +-121.89,37.67,19.0,2034.0,288.0,852.0,295.0,6.5285,300400.0,INLAND +-121.9,37.67,15.0,2130.0,273.0,876.0,285.0,7.2639,332400.0,<1H OCEAN +-121.9,37.67,7.0,9540.0,1294.0,3926.0,1229.0,7.4353,389800.0,<1H OCEAN +-121.88,37.66,29.0,2702.0,680.0,1360.0,642.0,3.1127,233000.0,INLAND +-121.87,37.66,39.0,522.0,116.0,161.0,102.0,2.4896,238500.0,INLAND +-121.87,37.66,52.0,775.0,134.0,315.0,123.0,5.0677,233300.0,INLAND +-121.89,37.66,3.0,1565.0,464.0,769.0,461.0,2.1187,231300.0,INLAND +-121.88,37.64,20.0,1309.0,184.0,514.0,172.0,10.9506,475800.0,INLAND +-121.87,37.57,13.0,5519.0,833.0,2444.0,825.0,7.0691,393200.0,<1H OCEAN +-121.87,37.67,10.0,4337.0,800.0,1813.0,743.0,5.5,247200.0,INLAND +-121.87,37.67,28.0,1812.0,294.0,853.0,278.0,4.9879,229400.0,INLAND +-121.85,37.68,4.0,4719.0,741.0,1895.0,742.0,6.8132,282500.0,INLAND +-121.85,37.66,14.0,4236.0,701.0,1833.0,663.0,5.6399,300600.0,INLAND +-121.86,37.66,22.0,3634.0,664.0,1699.0,640.0,4.1597,293200.0,INLAND +-121.87,37.66,27.0,1569.0,242.0,583.0,214.0,5.7519,278500.0,INLAND +-121.84,37.66,13.0,13182.0,2074.0,4847.0,1950.0,5.6417,352900.0,INLAND +-121.85,37.72,43.0,228.0,40.0,83.0,42.0,10.3203,400000.0,INLAND +-121.82,37.73,47.0,127.0,23.0,51.0,21.0,4.3472,375000.0,INLAND +-121.86,37.7,13.0,9621.0,1344.0,4389.0,1391.0,6.6827,313700.0,INLAND +-121.89,37.69,4.0,6159.0,1510.0,2649.0,1241.0,3.62,139300.0,<1H OCEAN +-121.77,37.65,16.0,4290.0,554.0,1952.0,576.0,7.3588,327500.0,INLAND +-121.62,37.61,26.0,1786.0,306.0,771.0,279.0,5.7239,430600.0,INLAND +-121.61,37.77,32.0,404.0,74.0,144.0,58.0,4.2083,125000.0,INLAND +-121.72,37.7,17.0,1671.0,352.0,729.0,252.0,6.1023,450000.0,INLAND +-121.73,37.71,12.0,5608.0,1049.0,2595.0,1067.0,3.9864,200200.0,INLAND +-121.75,37.71,11.0,12070.0,2220.0,5826.0,2125.0,4.8624,192400.0,INLAND +-121.77,37.74,25.0,494.0,81.0,254.0,85.0,9.1531,418800.0,INLAND +-121.8,37.7,22.0,5533.0,943.0,2474.0,910.0,4.7361,216800.0,INLAND +-121.8,37.69,17.0,3956.0,639.0,2222.0,662.0,5.4324,215500.0,INLAND +-121.82,37.69,12.0,1906.0,351.0,802.0,319.0,4.9375,227700.0,INLAND +-121.76,37.69,29.0,3433.0,711.0,1919.0,709.0,3.3841,184400.0,INLAND +-121.77,37.68,36.0,1687.0,372.0,950.0,372.0,3.5532,158400.0,INLAND +-121.78,37.69,34.0,2358.0,498.0,1157.0,461.0,3.3618,174600.0,INLAND +-121.78,37.69,35.0,2853.0,588.0,1761.0,572.0,4.3533,168400.0,INLAND +-121.79,37.69,25.0,6296.0,1082.0,3200.0,1047.0,4.5357,188400.0,INLAND +-121.76,37.7,9.0,3980.0,736.0,1705.0,679.0,5.7068,256700.0,INLAND +-121.75,37.69,26.0,2647.0,536.0,1422.0,522.0,3.7212,183800.0,INLAND +-121.75,37.68,35.0,1755.0,299.0,702.0,263.0,5.2443,183400.0,INLAND +-121.76,37.68,35.0,1864.0,357.0,1189.0,349.0,4.2361,177500.0,INLAND +-121.76,37.68,32.0,1078.0,207.0,555.0,197.0,3.1856,186900.0,INLAND +-121.73,37.68,17.0,20354.0,3493.0,8768.0,3293.0,5.4496,238900.0,INLAND +-121.78,37.68,17.0,3112.0,872.0,1392.0,680.0,3.0222,172500.0,INLAND +-121.77,37.68,44.0,495.0,112.0,277.0,109.0,2.6667,179200.0,INLAND +-121.76,37.68,52.0,2157.0,418.0,929.0,419.0,3.7301,204400.0,INLAND +-121.77,37.68,41.0,1501.0,299.0,629.0,288.0,4.6806,209400.0,INLAND +-121.77,37.67,20.0,8068.0,1217.0,3489.0,1259.0,5.7907,264200.0,INLAND +-121.76,37.67,6.0,3023.0,518.0,1225.0,468.0,6.3705,350000.0,INLAND +-121.78,37.67,26.0,2211.0,344.0,1024.0,321.0,5.2649,199800.0,INLAND +-121.79,37.67,26.0,2163.0,339.0,947.0,346.0,6.0797,211000.0,INLAND +-121.78,37.67,28.0,1773.0,278.0,804.0,269.0,4.8571,201100.0,INLAND +-121.78,37.66,25.0,1947.0,418.0,900.0,354.0,3.8523,193000.0,INLAND +-121.79,37.66,22.0,14701.0,2210.0,6693.0,2232.0,5.98,245000.0,INLAND +-119.78,38.69,17.0,1364.0,282.0,338.0,152.0,2.45,117600.0,INLAND +-119.93,38.72,15.0,2061.0,465.0,573.0,196.0,2.2417,97900.0,INLAND +-120.0,38.52,16.0,3045.0,543.0,202.0,102.0,3.15,140600.0,INLAND +-120.56,38.48,14.0,3545.0,702.0,946.0,411.0,3.4609,120900.0,INLAND +-120.59,38.45,13.0,2944.0,558.0,1091.0,466.0,3.0,119000.0,INLAND +-120.55,38.46,16.0,1443.0,249.0,435.0,181.0,3.2031,129200.0,INLAND +-120.55,38.45,17.0,2277.0,474.0,767.0,356.0,2.5208,99100.0,INLAND +-120.55,38.43,18.0,1564.0,357.0,618.0,277.0,2.3549,108900.0,INLAND +-120.25,38.55,15.0,4403.0,891.0,1103.0,433.0,3.0125,111700.0,INLAND +-120.79,38.54,34.0,1133.0,254.0,495.0,187.0,2.05,68900.0,INLAND +-120.8,38.51,23.0,1001.0,195.0,369.0,157.0,3.125,96400.0,INLAND +-120.65,38.5,10.0,1783.0,337.0,638.0,262.0,2.65,116700.0,INLAND +-120.76,38.47,17.0,1521.0,309.0,607.0,240.0,3.5,123800.0,INLAND +-120.88,38.45,25.0,1374.0,297.0,657.0,288.0,2.5476,97900.0,INLAND +-120.79,38.43,40.0,1391.0,246.0,546.0,214.0,3.9107,129800.0,INLAND +-120.69,38.44,13.0,1473.0,265.0,597.0,228.0,4.2917,121300.0,INLAND +-120.93,38.5,15.0,1248.0,234.0,529.0,216.0,3.3393,107200.0,INLAND +-120.97,38.42,16.0,1748.0,322.0,4930.0,287.0,4.3029,121900.0,INLAND +-120.87,38.37,28.0,3998.0,765.0,1614.0,698.0,2.8125,113400.0,INLAND +-120.98,38.34,27.0,3471.0,653.0,1793.0,600.0,3.5508,99100.0,INLAND +-120.88,38.32,18.0,2791.0,492.0,1187.0,438.0,3.2589,103000.0,INLAND +-120.93,38.26,13.0,2084.0,449.0,834.0,305.0,3.2937,114200.0,INLAND +-120.72,38.42,17.0,5654.0,1085.0,2237.0,953.0,3.0465,144100.0,INLAND +-120.77,38.38,15.0,4221.0,816.0,1737.0,743.0,2.3125,128600.0,INLAND +-120.72,38.38,9.0,1787.0,347.0,806.0,306.0,2.525,157200.0,INLAND +-120.66,38.4,18.0,2144.0,420.0,985.0,381.0,3.175,118500.0,INLAND +-120.65,38.42,23.0,1538.0,305.0,730.0,267.0,2.6078,116700.0,INLAND +-120.62,38.39,15.0,3750.0,691.0,1444.0,603.0,2.7399,134800.0,INLAND +-120.69,38.36,19.0,3267.0,614.0,1252.0,566.0,2.7236,109900.0,INLAND +-120.71,38.34,16.0,1257.0,231.0,559.0,213.0,4.4531,144300.0,INLAND +-120.8,38.31,37.0,1341.0,256.0,533.0,242.0,3.2135,123600.0,INLAND +-121.83,39.76,12.0,9831.0,1921.0,4644.0,1775.0,3.1142,112600.0,INLAND +-121.82,39.76,23.0,6010.0,1116.0,2710.0,1149.0,3.0068,107300.0,INLAND +-121.86,39.78,12.0,7653.0,1578.0,3628.0,1494.0,3.0905,117800.0,INLAND +-121.85,39.77,17.0,5273.0,1177.0,2446.0,1199.0,1.9362,89900.0,INLAND +-121.84,39.76,14.0,2351.0,620.0,1215.0,548.0,2.3155,102300.0,INLAND +-121.86,39.76,19.0,7254.0,1785.0,4030.0,1667.0,2.0094,87300.0,INLAND +-121.89,39.76,15.0,10265.0,1860.0,4591.0,1906.0,3.07,142600.0,INLAND +-121.88,39.74,12.0,14631.0,3298.0,7517.0,3262.0,1.6785,153100.0,INLAND +-121.87,39.75,22.0,1707.0,296.0,822.0,297.0,3.6625,126600.0,INLAND +-121.86,39.75,18.0,1651.0,309.0,856.0,293.0,3.5046,118300.0,INLAND +-121.87,39.74,7.0,1737.0,290.0,747.0,265.0,3.9,147000.0,INLAND +-121.85,39.75,39.0,568.0,127.0,267.0,129.0,1.8095,78100.0,INLAND +-121.85,39.74,39.0,1139.0,265.0,623.0,264.0,2.2833,85800.0,INLAND +-121.85,39.74,41.0,2901.0,689.0,1426.0,632.0,1.5633,84500.0,INLAND +-121.85,39.73,52.0,444.0,80.0,1107.0,98.0,3.4191,137500.0,INLAND +-121.85,39.73,17.0,3425.0,827.0,2469.0,758.0,0.9393,88900.0,INLAND +-121.86,39.74,13.0,3494.0,843.0,1571.0,784.0,1.1019,120200.0,INLAND +-121.84,39.75,29.0,4362.0,1053.0,2053.0,1000.0,1.7284,74500.0,INLAND +-121.84,39.74,43.0,2976.0,599.0,1181.0,560.0,2.2621,85100.0,INLAND +-121.83,39.74,34.0,3263.0,604.0,1290.0,594.0,2.575,130300.0,INLAND +-121.8,39.75,28.0,2551.0,378.0,1011.0,374.0,4.3309,125200.0,INLAND +-121.82,39.75,29.0,7744.0,1375.0,3316.0,1365.0,3.0253,111400.0,INLAND +-121.82,39.75,37.0,2236.0,372.0,974.0,379.0,3.2016,97000.0,INLAND +-121.8,39.75,11.0,7212.0,1355.0,3264.0,1264.0,3.1125,122600.0,INLAND +-121.79,39.73,8.0,5690.0,1189.0,2887.0,1077.0,3.0625,116300.0,INLAND +-121.78,39.71,8.0,140.0,28.0,84.0,29.0,2.125,179200.0,INLAND +-121.82,39.73,44.0,2923.0,659.0,1371.0,626.0,2.2925,85800.0,INLAND +-121.84,39.73,52.0,677.0,152.0,379.0,154.0,1.6797,94800.0,INLAND +-121.84,39.73,52.0,502.0,100.0,311.0,100.0,1.5481,200000.0,INLAND +-121.84,39.73,52.0,857.0,232.0,520.0,198.0,0.987,112500.0,INLAND +-121.84,39.72,52.0,1457.0,389.0,802.0,342.0,0.9566,69000.0,INLAND +-121.84,39.73,52.0,957.0,263.0,513.0,223.0,1.3672,55000.0,INLAND +-121.83,39.73,52.0,1741.0,401.0,753.0,377.0,2.0064,77900.0,INLAND +-121.85,39.72,18.0,7272.0,1559.0,5022.0,1524.0,1.6911,98800.0,INLAND +-121.83,39.72,52.0,1890.0,420.0,974.0,383.0,1.6827,78700.0,INLAND +-121.81,39.7,21.0,5051.0,1054.0,2948.0,980.0,1.5863,81300.0,INLAND +-121.82,39.73,33.0,2242.0,517.0,1160.0,449.0,1.7426,60300.0,INLAND +-121.82,39.72,42.0,2978.0,694.0,1879.0,679.0,1.5064,66300.0,INLAND +-121.81,39.71,18.0,1222.0,250.0,708.0,281.0,2.0288,116700.0,INLAND +-121.87,39.82,11.0,5103.0,825.0,2456.0,810.0,4.5032,159700.0,INLAND +-121.89,39.71,26.0,2741.0,451.0,1217.0,437.0,3.7007,139200.0,INLAND +-121.97,39.79,16.0,1453.0,299.0,904.0,286.0,3.5735,89600.0,INLAND +-121.84,39.68,38.0,549.0,105.0,275.0,94.0,3.5375,153100.0,INLAND +-121.8,39.64,25.0,2202.0,422.0,1109.0,403.0,2.8306,87500.0,INLAND +-121.77,39.66,20.0,3759.0,,1705.0,600.0,4.712,158600.0,INLAND +-121.74,39.59,24.0,1535.0,279.0,726.0,272.0,2.3833,95100.0,INLAND +-121.9,39.59,20.0,1465.0,278.0,745.0,250.0,3.0625,93800.0,INLAND +-121.75,39.88,16.0,2867.0,559.0,1203.0,449.0,2.7143,95300.0,INLAND +-121.68,39.82,15.0,3996.0,748.0,1786.0,728.0,3.5189,141300.0,INLAND +-121.54,40.06,17.0,858.0,262.0,47.0,27.0,2.4028,67500.0,INLAND +-121.51,39.97,22.0,1468.0,285.0,611.0,235.0,2.3036,73000.0,INLAND +-121.59,39.86,14.0,1527.0,269.0,665.0,261.0,2.8657,119600.0,INLAND +-121.58,39.83,16.0,4591.0,904.0,1904.0,812.0,2.2419,93200.0,INLAND +-121.6,39.8,10.0,1742.0,307.0,721.0,312.0,2.4537,117900.0,INLAND +-121.62,39.79,11.0,3835.0,727.0,1456.0,658.0,2.5374,97200.0,INLAND +-121.59,39.82,12.0,1958.0,369.0,875.0,354.0,2.3507,97600.0,INLAND +-121.6,39.83,12.0,3744.0,699.0,1532.0,660.0,2.3079,95300.0,INLAND +-121.63,39.82,11.0,3974.0,727.0,1610.0,634.0,2.6147,107700.0,INLAND +-121.6,39.79,18.0,2672.0,533.0,1151.0,532.0,2.567,102900.0,INLAND +-121.59,39.79,20.0,743.0,171.0,395.0,168.0,1.625,88300.0,INLAND +-121.59,39.78,16.0,2754.0,570.0,1063.0,543.0,1.4048,86500.0,INLAND +-121.59,39.78,18.0,945.0,205.0,385.0,207.0,2.1838,58000.0,INLAND +-121.6,39.77,26.0,1503.0,343.0,699.0,296.0,1.875,84000.0,INLAND +-121.61,39.77,25.0,1612.0,313.0,837.0,303.0,2.963,89500.0,INLAND +-121.63,39.78,28.0,1677.0,327.0,770.0,309.0,2.6823,93400.0,INLAND +-121.57,39.8,23.0,790.0,137.0,365.0,152.0,2.1912,115200.0,INLAND +-121.57,39.78,18.0,2221.0,459.0,952.0,440.0,2.0458,105700.0,INLAND +-121.59,39.77,24.0,1535.0,276.0,664.0,273.0,2.3068,97300.0,INLAND +-121.58,39.79,19.0,2636.0,523.0,1184.0,465.0,2.7863,108600.0,INLAND +-121.57,39.76,20.0,1384.0,257.0,557.0,232.0,2.0882,104900.0,INLAND +-121.58,39.76,19.0,2487.0,485.0,1110.0,453.0,3.1061,110200.0,INLAND +-121.58,39.76,18.0,1676.0,332.0,733.0,318.0,1.7875,103800.0,INLAND +-121.59,39.75,20.0,908.0,206.0,481.0,211.0,2.2,80800.0,INLAND +-121.6,39.77,23.0,2263.0,497.0,1138.0,455.0,2.3403,87300.0,INLAND +-121.6,39.76,22.0,2447.0,556.0,1157.0,556.0,1.8245,85500.0,INLAND +-121.61,39.76,31.0,2431.0,512.0,1026.0,427.0,2.5428,85000.0,INLAND +-121.62,39.77,23.0,1759.0,366.0,788.0,359.0,1.8125,93500.0,INLAND +-121.65,39.76,31.0,1599.0,318.0,794.0,303.0,3.0,96700.0,INLAND +-121.63,39.76,22.0,2598.0,482.0,1151.0,490.0,2.8182,109700.0,INLAND +-121.62,39.76,14.0,2063.0,559.0,934.0,529.0,1.7788,85800.0,INLAND +-121.62,39.75,20.0,1173.0,261.0,523.0,258.0,1.0625,92800.0,INLAND +-121.63,39.75,37.0,1296.0,296.0,569.0,257.0,1.8616,70500.0,INLAND +-121.64,39.74,20.0,1808.0,334.0,763.0,335.0,2.3711,121800.0,INLAND +-121.71,39.71,17.0,2748.0,556.0,1174.0,514.0,3.066,102600.0,INLAND +-121.66,39.66,17.0,3502.0,655.0,1763.0,613.0,2.9625,101200.0,INLAND +-121.56,39.69,8.0,2836.0,522.0,1163.0,512.0,3.13,168300.0,INLAND +-121.57,39.74,17.0,1619.0,292.0,705.0,285.0,2.4623,126100.0,INLAND +-121.59,39.74,17.0,1646.0,330.0,750.0,344.0,2.3798,83800.0,INLAND +-121.6,39.75,19.0,2888.0,591.0,984.0,499.0,1.9766,92600.0,INLAND +-121.6,39.68,15.0,1677.0,345.0,844.0,330.0,2.3958,111200.0,INLAND +-121.5,39.83,15.0,1896.0,408.0,893.0,334.0,1.6948,87500.0,INLAND +-121.41,39.72,17.0,1583.0,331.0,730.0,306.0,2.3895,87500.0,INLAND +-121.39,39.61,22.0,2828.0,610.0,986.0,391.0,2.8871,94700.0,INLAND +-121.24,39.65,35.0,632.0,148.0,221.0,102.0,2.3684,62500.0,INLAND +-121.19,39.55,17.0,1483.0,284.0,481.0,211.0,1.4896,83300.0,INLAND +-121.36,39.52,15.0,2490.0,527.0,1229.0,497.0,2.3917,85700.0,INLAND +-121.56,39.52,9.0,818.0,197.0,358.0,197.0,1.7708,79500.0,INLAND +-121.56,39.52,26.0,1957.0,429.0,945.0,397.0,1.7308,53600.0,INLAND +-121.56,39.53,12.0,1733.0,421.0,1861.0,415.0,1.5771,65200.0,INLAND +-121.54,39.6,15.0,886.0,204.0,576.0,205.0,2.1467,84100.0,INLAND +-121.46,39.54,14.0,5549.0,1000.0,1822.0,919.0,2.9562,142300.0,INLAND +-121.49,39.52,25.0,848.0,153.0,436.0,155.0,3.9028,93800.0,INLAND +-121.44,39.5,26.0,1652.0,325.0,790.0,292.0,3.0446,90800.0,INLAND +-121.47,39.49,17.0,1554.0,242.0,553.0,230.0,3.2174,91800.0,INLAND +-121.47,39.51,19.0,3720.0,636.0,1304.0,607.0,2.6921,97500.0,INLAND +-121.53,39.53,35.0,1806.0,293.0,683.0,295.0,4.5156,91200.0,INLAND +-121.53,39.52,30.0,1030.0,161.0,448.0,159.0,2.4821,73800.0,INLAND +-121.53,39.52,24.0,1028.0,185.0,471.0,186.0,2.9688,86400.0,INLAND +-121.54,39.51,33.0,3585.0,757.0,1887.0,765.0,2.502,62100.0,INLAND +-121.52,39.51,30.0,3085.0,610.0,1688.0,575.0,2.334,72200.0,INLAND +-121.55,39.51,39.0,1551.0,353.0,684.0,310.0,2.0357,57600.0,INLAND +-121.55,39.51,48.0,827.0,198.0,396.0,161.0,0.8024,58300.0,INLAND +-121.55,39.51,50.0,1050.0,288.0,485.0,260.0,1.1607,51700.0,INLAND +-121.56,39.51,47.0,1064.0,245.0,603.0,190.0,1.3654,57900.0,INLAND +-121.56,39.51,46.0,1885.0,385.0,871.0,347.0,1.6352,53100.0,INLAND +-121.57,39.5,31.0,2023.0,469.0,1073.0,436.0,1.5714,56100.0,INLAND +-121.58,39.52,25.0,2409.0,490.0,1384.0,479.0,1.9956,58000.0,INLAND +-121.58,39.51,24.0,1865.0,372.0,1087.0,385.0,1.6389,56700.0,INLAND +-121.58,39.5,29.0,1947.0,383.0,925.0,337.0,2.1658,57600.0,INLAND +-121.62,39.5,18.0,2105.0,416.0,974.0,385.0,1.6346,63300.0,INLAND +-121.61,39.52,24.0,1610.0,324.0,909.0,323.0,1.8661,59800.0,INLAND +-121.65,39.53,23.0,1387.0,325.0,640.0,289.0,1.4833,65200.0,INLAND +-121.57,39.48,15.0,202.0,54.0,145.0,40.0,0.8252,42500.0,INLAND +-121.55,39.5,26.0,3215.0,827.0,2041.0,737.0,1.0585,45100.0,INLAND +-121.54,39.5,38.0,1438.0,310.0,779.0,275.0,1.3289,39400.0,INLAND +-121.53,39.49,19.0,1537.0,329.0,617.0,274.0,1.5313,50300.0,INLAND +-121.54,39.48,29.0,2896.0,596.0,1809.0,617.0,1.8047,53800.0,INLAND +-121.54,39.47,14.0,1724.0,315.0,939.0,302.0,2.4952,53900.0,INLAND +-121.55,39.48,41.0,461.0,107.0,284.0,90.0,2.2045,41800.0,INLAND +-121.49,39.49,20.0,2505.0,468.0,1174.0,429.0,2.9965,88900.0,INLAND +-121.52,39.5,33.0,1462.0,241.0,569.0,231.0,3.2833,82600.0,INLAND +-121.52,39.49,30.0,1217.0,238.0,677.0,233.0,2.6563,63600.0,INLAND +-121.52,39.48,21.0,2628.0,494.0,1364.0,468.0,2.0455,59400.0,INLAND +-121.55,39.45,18.0,2278.0,523.0,1185.0,475.0,1.3611,60600.0,INLAND +-121.53,39.44,26.0,1340.0,255.0,662.0,239.0,2.6071,57100.0,INLAND +-121.55,39.44,31.0,1434.0,283.0,811.0,289.0,1.7727,49000.0,INLAND +-121.52,39.43,15.0,2119.0,389.0,1079.0,374.0,2.3566,80400.0,INLAND +-121.46,39.4,17.0,3659.0,735.0,1970.0,667.0,2.425,96200.0,INLAND +-121.39,39.39,52.0,189.0,34.0,121.0,37.0,3.0208,60000.0,INLAND +-121.54,39.33,27.0,720.0,150.0,359.0,138.0,2.5313,61300.0,INLAND +-121.59,39.39,22.0,2515.0,482.0,1284.0,462.0,2.1776,73800.0,INLAND +-121.67,39.37,27.0,2599.0,502.0,1241.0,502.0,1.9943,86300.0,INLAND +-121.65,39.35,24.0,1003.0,251.0,1098.0,227.0,1.7552,86400.0,INLAND +-121.67,39.34,22.0,1217.0,224.0,537.0,187.0,2.6607,84600.0,INLAND +-121.65,39.32,40.0,812.0,154.0,374.0,142.0,2.7891,73500.0,INLAND +-121.69,39.36,29.0,2220.0,471.0,1170.0,428.0,2.3224,56200.0,INLAND +-121.7,39.37,32.0,1852.0,373.0,911.0,365.0,1.7885,57000.0,INLAND +-121.7,39.36,46.0,1210.0,243.0,523.0,242.0,1.91,63900.0,INLAND +-121.7,39.36,37.0,2330.0,495.0,1505.0,470.0,2.0474,56000.0,INLAND +-121.69,39.36,34.0,842.0,186.0,635.0,165.0,1.8355,63000.0,INLAND +-121.74,39.38,27.0,2596.0,435.0,1100.0,409.0,2.3243,85500.0,INLAND +-121.8,39.33,30.0,1019.0,192.0,501.0,185.0,2.5259,81300.0,INLAND +-121.71,39.42,21.0,1432.0,284.0,862.0,275.0,2.2813,57600.0,INLAND +-121.71,39.41,22.0,1814.0,342.0,941.0,323.0,2.1728,59400.0,INLAND +-121.75,39.4,29.0,1687.0,327.0,864.0,334.0,2.4943,81900.0,INLAND +-121.79,39.48,39.0,1105.0,180.0,408.0,166.0,3.3929,82100.0,INLAND +-120.46,38.15,16.0,4221.0,781.0,1516.0,697.0,2.3816,116000.0,INLAND +-120.55,38.12,10.0,1566.0,325.0,785.0,291.0,2.5,116100.0,INLAND +-120.56,38.09,34.0,2745.0,559.0,1150.0,491.0,2.3654,94900.0,INLAND +-120.55,38.07,27.0,1199.0,224.0,463.0,199.0,2.9063,92200.0,INLAND +-120.54,38.07,37.0,736.0,148.0,339.0,140.0,2.2875,79900.0,INLAND +-120.67,37.97,9.0,7450.0,1475.0,2233.0,930.0,2.6528,133000.0,INLAND +-120.46,38.09,16.0,3758.0,715.0,1777.0,615.0,3.0,122600.0,INLAND +-120.79,38.24,19.0,1003.0,235.0,538.0,190.0,2.9821,90400.0,INLAND +-120.9,38.2,16.0,3120.0,641.0,1319.0,526.0,2.0472,93200.0,INLAND +-120.88,38.16,8.0,2029.0,387.0,1000.0,364.0,4.0109,125900.0,INLAND +-120.91,38.11,9.0,3585.0,680.0,1800.0,598.0,3.636,133100.0,INLAND +-120.76,38.12,7.0,7188.0,1288.0,3175.0,1115.0,3.8488,130600.0,INLAND +-120.65,38.28,21.0,3095.0,681.0,1341.0,546.0,2.1382,104000.0,INLAND +-120.72,38.24,32.0,2685.0,543.0,1061.0,492.0,2.5473,101600.0,INLAND +-120.67,38.19,17.0,2967.0,611.0,1387.0,564.0,2.0417,92600.0,INLAND +-120.57,38.2,13.0,4110.0,847.0,1796.0,706.0,2.6417,122300.0,INLAND +-120.43,38.25,13.0,763.0,161.0,311.0,125.0,2.4583,112500.0,INLAND +-120.56,38.39,20.0,1326.0,307.0,563.0,237.0,2.6667,86600.0,INLAND +-120.54,38.41,21.0,1435.0,294.0,668.0,267.0,2.5667,77400.0,INLAND +-120.42,38.42,18.0,2912.0,663.0,999.0,411.0,2.7344,91900.0,INLAND +-120.41,38.33,17.0,1463.0,338.0,529.0,226.0,3.024,100900.0,INLAND +-120.55,38.31,18.0,1411.0,312.0,592.0,230.0,1.625,94700.0,INLAND +-120.57,38.35,17.0,1504.0,358.0,661.0,250.0,2.2604,84800.0,INLAND +-120.36,38.21,10.0,4300.0,845.0,1480.0,609.0,2.8208,139900.0,INLAND +-120.34,38.23,10.0,3757.0,722.0,546.0,223.0,3.75,121400.0,INLAND +-120.33,38.26,13.0,2962.0,546.0,252.0,103.0,4.4063,155800.0,INLAND +-120.34,38.25,17.0,5497.0,1056.0,997.0,408.0,2.9821,111500.0,INLAND +-120.37,38.23,13.0,4401.0,829.0,924.0,383.0,2.6942,123500.0,INLAND +-120.37,38.25,13.0,4495.0,856.0,1149.0,459.0,2.5352,113700.0,INLAND +-120.27,38.29,10.0,3486.0,695.0,298.0,124.0,3.3542,103800.0,INLAND +-120.27,38.31,13.0,3297.0,662.0,267.0,97.0,3.075,108300.0,INLAND +-120.19,38.42,11.0,1568.0,369.0,82.0,33.0,3.125,77500.0,INLAND +-121.91,39.03,48.0,1096.0,218.0,657.0,199.0,2.7841,65800.0,INLAND +-122.0,38.99,39.0,1548.0,323.0,815.0,286.0,2.9489,67500.0,INLAND +-122.13,39.0,23.0,3832.0,774.0,2435.0,747.0,2.2754,59200.0,INLAND +-121.99,39.15,17.0,6440.0,1204.0,3266.0,1142.0,2.7137,72000.0,INLAND +-122.04,39.22,27.0,1446.0,295.0,670.0,281.0,3.2625,92800.0,INLAND +-122.08,39.25,52.0,224.0,38.0,120.0,45.0,3.017,112500.0,INLAND +-122.33,39.1,10.0,266.0,62.0,154.0,49.0,2.25,75000.0,INLAND +-122.2,39.15,33.0,1064.0,174.0,434.0,147.0,3.125,108000.0,INLAND +-122.09,39.13,28.0,4169.0,895.0,2587.0,810.0,2.331,65500.0,INLAND +-122.05,39.34,44.0,1064.0,230.0,494.0,175.0,2.875,61500.0,INLAND +-122.17,39.31,35.0,2791.0,552.0,1395.0,476.0,2.5625,62700.0,INLAND +-122.51,39.3,19.0,1629.0,386.0,551.0,214.0,1.7463,68800.0,INLAND +-122.01,39.21,50.0,1592.0,372.0,781.0,307.0,2.2679,69100.0,INLAND +-122.01,39.21,52.0,1989.0,392.0,985.0,396.0,2.5556,75800.0,INLAND +-122.01,39.21,39.0,1214.0,250.0,660.0,249.0,2.4559,75000.0,INLAND +-121.96,39.3,39.0,701.0,130.0,271.0,89.0,2.1845,112500.0,INLAND +-121.65,38.03,28.0,3144.0,694.0,1095.0,482.0,3.4402,192400.0,INLAND +-121.63,38.03,17.0,2549.0,596.0,1169.0,500.0,3.6694,209400.0,INLAND +-121.63,38.04,25.0,2019.0,411.0,888.0,326.0,3.2619,183800.0,INLAND +-121.73,38.0,3.0,9217.0,1522.0,3578.0,1272.0,5.0016,189100.0,INLAND +-121.72,38.0,7.0,7957.0,1314.0,4460.0,1293.0,4.9618,156500.0,INLAND +-121.72,37.98,5.0,7105.0,1143.0,3523.0,1088.0,5.0468,168800.0,INLAND +-121.68,37.98,19.0,3388.0,599.0,1707.0,575.0,3.6411,162800.0,INLAND +-121.7,37.98,9.0,3079.0,519.0,1562.0,512.0,5.1041,172900.0,INLAND +-121.71,37.99,27.0,3861.0,718.0,2085.0,707.0,3.3558,129700.0,INLAND +-121.67,37.99,22.0,1046.0,195.0,527.0,164.0,4.375,213500.0,INLAND +-121.68,37.93,44.0,1014.0,225.0,704.0,238.0,1.6554,119400.0,INLAND +-121.7,37.94,36.0,1710.0,320.0,861.0,300.0,2.8828,131100.0,INLAND +-121.69,37.95,15.0,1850.0,441.0,1348.0,403.0,3.8125,125400.0,INLAND +-121.7,37.96,33.0,2396.0,452.0,1391.0,465.0,3.2813,151400.0,INLAND +-121.66,37.93,19.0,2055.0,358.0,1064.0,350.0,4.7426,263100.0,INLAND +-121.7,37.91,17.0,1962.0,291.0,825.0,267.0,4.8958,187100.0,INLAND +-121.7,37.93,19.0,2005.0,405.0,972.0,403.0,2.2216,156700.0,INLAND +-121.74,37.95,5.0,4980.0,774.0,2399.0,763.0,5.7104,186300.0,INLAND +-121.7,37.93,10.0,3258.0,612.0,1779.0,558.0,4.6587,152500.0,INLAND +-121.6,37.91,13.0,2479.0,394.0,1075.0,350.0,5.1017,241400.0,INLAND +-121.6,37.9,5.0,14684.0,2252.0,4276.0,1722.0,6.9051,340900.0,INLAND +-121.61,37.86,30.0,1428.0,287.0,989.0,287.0,3.691,154400.0,INLAND +-121.64,37.85,22.0,1999.0,415.0,967.0,320.0,4.4583,253900.0,INLAND +-121.8,38.01,46.0,2273.0,495.0,1088.0,447.0,2.2532,109400.0,INLAND +-121.81,38.01,47.0,1942.0,430.0,1074.0,393.0,2.2361,105100.0,INLAND +-121.81,38.01,52.0,1124.0,245.0,528.0,226.0,2.2639,128500.0,INLAND +-121.82,38.02,46.0,176.0,43.0,101.0,40.0,2.2361,93800.0,INLAND +-121.82,38.01,42.0,1017.0,253.0,798.0,266.0,2.1719,99100.0,INLAND +-121.82,38.01,50.0,1120.0,281.0,625.0,239.0,1.5988,96400.0,INLAND +-121.82,38.01,25.0,3018.0,606.0,1614.0,568.0,3.4722,127000.0,INLAND +-121.84,38.02,46.0,66.0,22.0,37.0,21.0,0.536,87500.0,INLAND +-121.78,38.01,19.0,2688.0,469.0,1216.0,422.0,4.4491,133900.0,INLAND +-121.79,38.01,17.0,4032.0,814.0,1749.0,618.0,3.1728,146800.0,INLAND +-121.79,38.0,34.0,3090.0,593.0,1588.0,566.0,3.6118,124700.0,INLAND +-121.8,38.01,44.0,3184.0,581.0,1399.0,548.0,2.7234,110200.0,INLAND +-121.8,38.01,37.0,3058.0,567.0,1351.0,523.0,3.5179,130800.0,INLAND +-121.78,38.0,8.0,2371.0,375.0,1094.0,396.0,5.3245,174500.0,INLAND +-121.77,38.01,13.0,2983.0,534.0,1417.0,510.0,3.9861,168100.0,INLAND +-121.81,37.99,18.0,2807.0,445.0,1315.0,437.0,4.8194,170400.0,INLAND +-121.81,37.99,22.0,2331.0,359.0,1086.0,340.0,5.1435,150800.0,INLAND +-121.82,37.98,13.0,3995.0,605.0,1969.0,607.0,5.0164,165200.0,INLAND +-121.82,38.01,47.0,1265.0,254.0,587.0,247.0,2.6364,93500.0,INLAND +-121.82,38.0,29.0,2070.0,452.0,985.0,420.0,2.8466,113400.0,INLAND +-121.81,38.0,37.0,2724.0,579.0,1400.0,540.0,2.905,97300.0,INLAND +-121.82,38.0,30.0,3268.0,567.0,1714.0,565.0,4.4583,131000.0,INLAND +-121.85,38.0,26.0,3364.0,570.0,1806.0,566.0,4.2647,133400.0,INLAND +-121.85,38.0,24.0,2269.0,584.0,1239.0,542.0,2.0411,100000.0,INLAND +-121.83,38.0,15.0,6365.0,1646.0,3838.0,1458.0,2.5495,103600.0,INLAND +-121.83,38.0,25.0,1710.0,288.0,799.0,259.0,4.8359,145300.0,INLAND +-121.83,37.99,23.0,1150.0,174.0,572.0,174.0,4.9167,152400.0,INLAND +-121.83,37.99,23.0,1970.0,296.0,935.0,279.0,4.4853,145900.0,INLAND +-121.83,37.99,18.0,2741.0,449.0,1507.0,460.0,4.7566,142500.0,INLAND +-121.83,38.0,8.0,2572.0,738.0,1384.0,684.0,1.7161,75800.0,INLAND +-121.84,37.99,13.0,4545.0,952.0,2188.0,901.0,3.3625,126100.0,INLAND +-121.84,37.99,15.0,2380.0,385.0,1292.0,388.0,4.6029,142600.0,INLAND +-121.83,37.99,16.0,2919.0,462.0,1456.0,453.0,5.6779,164700.0,INLAND +-121.79,38.0,36.0,1141.0,234.0,562.0,213.0,2.5893,108500.0,INLAND +-121.79,37.99,10.0,4156.0,609.0,1878.0,586.0,5.6506,178600.0,INLAND +-121.79,37.99,18.0,3646.0,534.0,1651.0,535.0,5.7321,164700.0,INLAND +-121.8,38.0,34.0,2738.0,475.0,1316.0,459.0,3.5368,122500.0,INLAND +-121.8,37.99,16.0,3077.0,465.0,1575.0,446.0,5.5,179500.0,INLAND +-121.77,37.99,4.0,5623.0,780.0,2429.0,716.0,5.4409,205100.0,INLAND +-121.88,38.03,10.0,2769.0,619.0,1045.0,469.0,4.1111,158600.0,INLAND +-121.9,38.04,36.0,1489.0,331.0,838.0,259.0,1.2024,90200.0,INLAND +-121.86,38.04,52.0,242.0,59.0,188.0,54.0,1.3958,67500.0,INLAND +-121.87,38.02,52.0,2264.0,439.0,1403.0,476.0,2.7083,99400.0,INLAND +-121.88,38.03,52.0,1225.0,250.0,725.0,231.0,2.0,101400.0,INLAND +-121.9,38.03,51.0,2982.0,689.0,1831.0,608.0,2.0034,87700.0,INLAND +-121.88,38.02,46.0,2112.0,466.0,1249.0,382.0,2.5737,87000.0,INLAND +-121.89,38.02,36.0,2707.0,550.0,1827.0,545.0,3.3371,94600.0,INLAND +-121.9,38.02,5.0,1560.0,369.0,1037.0,372.0,3.6154,181800.0,INLAND +-121.87,38.02,31.0,3644.0,746.0,2229.0,678.0,3.1389,117800.0,INLAND +-121.88,38.0,16.0,2605.0,440.0,1352.0,408.0,4.1947,140300.0,INLAND +-121.88,38.01,9.0,5329.0,1284.0,2827.0,1202.0,2.7374,150000.0,INLAND +-121.89,38.01,30.0,4114.0,743.0,1994.0,722.0,4.2227,134400.0,INLAND +-121.88,38.0,22.0,721.0,117.0,367.0,129.0,5.3098,151900.0,INLAND +-121.86,38.0,4.0,4075.0,927.0,2239.0,849.0,3.5857,165200.0,INLAND +-121.86,38.0,16.0,3216.0,464.0,1504.0,453.0,5.25,161700.0,INLAND +-121.89,37.99,4.0,2171.0,597.0,928.0,461.0,4.1016,170500.0,INLAND +-121.88,37.99,16.0,3787.0,515.0,1606.0,507.0,5.5676,174200.0,INLAND +-121.87,38.0,17.0,2713.0,442.0,1475.0,415.0,4.8542,144100.0,INLAND +-121.87,37.99,15.0,2203.0,312.0,1051.0,311.0,4.9783,163900.0,INLAND +-121.89,38.01,28.0,3639.0,751.0,2362.0,641.0,3.0042,103900.0,INLAND +-121.9,38.02,12.0,1497.0,360.0,943.0,341.0,2.1417,122200.0,INLAND +-121.9,38.01,16.0,2604.0,454.0,1696.0,481.0,4.6628,136000.0,INLAND +-121.92,38.02,8.0,2750.0,479.0,1526.0,484.0,5.102,156500.0,INLAND +-121.89,38.01,32.0,1000.0,188.0,663.0,212.0,4.0972,99200.0,INLAND +-121.9,38.01,34.0,3779.0,766.0,2356.0,722.0,3.5129,110600.0,INLAND +-121.9,38.0,14.0,1930.0,363.0,990.0,322.0,4.1094,162200.0,INLAND +-121.9,38.0,14.0,2677.0,368.0,1288.0,375.0,6.0497,177500.0,INLAND +-121.92,38.01,7.0,1632.0,248.0,879.0,262.0,6.1237,166000.0,INLAND +-121.93,38.01,9.0,2294.0,389.0,1142.0,365.0,5.3363,160800.0,INLAND +-121.93,38.02,13.0,1524.0,286.0,940.0,308.0,5.1337,154800.0,INLAND +-121.95,38.03,5.0,5526.0,,3207.0,1012.0,4.0767,143100.0,INLAND +-121.94,38.03,27.0,1654.0,478.0,1141.0,420.0,1.4871,87100.0,INLAND +-121.96,38.02,35.0,2691.0,542.0,1409.0,505.0,3.016,95300.0,INLAND +-121.95,38.02,9.0,3360.0,833.0,2041.0,810.0,2.1013,100700.0,INLAND +-121.94,38.02,29.0,5765.0,1170.0,3266.0,1131.0,2.7907,113900.0,INLAND +-121.92,38.03,16.0,2176.0,464.0,1410.0,434.0,3.5436,100200.0,INLAND +-121.92,38.02,16.0,1840.0,355.0,1288.0,338.0,4.2067,125000.0,INLAND +-121.91,38.02,15.0,2966.0,558.0,1687.0,527.0,3.4817,129800.0,INLAND +-121.97,38.04,38.0,2505.0,554.0,1595.0,498.0,2.5833,83500.0,INLAND +-121.97,38.03,17.0,3685.0,685.0,1939.0,649.0,3.7043,139800.0,INLAND +-121.98,38.05,31.0,2810.0,518.0,1640.0,503.0,3.3661,98500.0,INLAND +-122.02,38.02,44.0,1465.0,247.0,817.0,237.0,4.8693,156900.0,NEAR BAY +-122.0,38.03,4.0,2341.0,408.0,1235.0,431.0,6.0424,165900.0,INLAND +-122.14,38.02,44.0,1625.0,432.0,825.0,385.0,2.0523,133900.0,NEAR BAY +-122.14,38.03,42.0,118.0,34.0,54.0,30.0,2.5795,225000.0,NEAR BAY +-122.13,38.02,52.0,2378.0,508.0,940.0,451.0,2.9583,166000.0,NEAR BAY +-122.13,38.01,48.0,2123.0,494.0,859.0,474.0,1.8523,144800.0,NEAR BAY +-122.14,38.01,50.0,1760.0,341.0,741.0,316.0,4.5,178300.0,NEAR BAY +-122.13,38.01,51.0,1262.0,309.0,608.0,298.0,2.1974,139300.0,NEAR BAY +-122.13,38.0,33.0,2821.0,652.0,1206.0,640.0,2.5481,150800.0,NEAR BAY +-122.16,38.02,40.0,1800.0,290.0,761.0,277.0,5.1265,196100.0,NEAR BAY +-122.11,38.01,39.0,1313.0,306.0,575.0,231.0,3.1711,116100.0,NEAR BAY +-122.11,38.01,41.0,1345.0,272.0,718.0,283.0,3.3831,129400.0,NEAR BAY +-122.12,38.0,20.0,6992.0,1404.0,3221.0,1334.0,4.2042,166400.0,NEAR BAY +-122.12,38.01,50.0,1300.0,263.0,691.0,239.0,3.9519,126500.0,NEAR BAY +-122.12,38.01,50.0,1738.0,355.0,837.0,363.0,3.609,135700.0,NEAR BAY +-122.12,38.01,42.0,2225.0,367.0,864.0,381.0,4.1189,172400.0,NEAR BAY +-122.09,38.02,37.0,1742.0,339.0,1128.0,345.0,3.8824,113700.0,NEAR BAY +-122.1,38.02,28.0,4308.0,824.0,2086.0,776.0,3.6523,159700.0,NEAR BAY +-122.07,38.0,37.0,978.0,202.0,462.0,184.0,3.625,156300.0,NEAR BAY +-122.09,38.0,6.0,10191.0,1882.0,4377.0,1789.0,5.2015,204200.0,NEAR BAY +-122.11,38.0,9.0,3424.0,583.0,1460.0,543.0,5.76,212600.0,NEAR BAY +-122.08,37.99,19.0,4657.0,739.0,1914.0,732.0,5.0509,199900.0,NEAR BAY +-122.09,37.99,19.0,3073.0,506.0,1773.0,493.0,5.4496,205400.0,NEAR BAY +-122.11,37.99,16.0,3913.0,710.0,1782.0,676.0,5.1297,206700.0,NEAR BAY +-122.11,37.99,10.0,2864.0,514.0,1300.0,507.0,4.3875,287700.0,NEAR BAY +-122.08,37.97,9.0,2643.0,439.0,1105.0,467.0,6.6579,245200.0,NEAR BAY +-122.09,37.97,5.0,5303.0,779.0,2017.0,727.0,6.9961,294100.0,NEAR BAY +-122.11,37.98,11.0,4371.0,679.0,1790.0,660.0,6.135,297300.0,NEAR BAY +-122.09,37.98,14.0,5381.0,871.0,2296.0,872.0,5.6875,211000.0,NEAR BAY +-122.12,37.99,33.0,1660.0,277.0,741.0,261.0,4.675,225400.0,NEAR BAY +-122.1,37.97,18.0,4326.0,655.0,1753.0,646.0,5.6931,269600.0,NEAR BAY +-122.1,37.96,20.0,3796.0,650.0,1679.0,611.0,4.3571,228200.0,NEAR BAY +-122.1,37.96,25.0,1374.0,206.0,569.0,235.0,6.3699,235500.0,NEAR BAY +-122.07,37.99,28.0,3310.0,574.0,1811.0,597.0,4.5401,166900.0,NEAR BAY +-122.07,37.98,12.0,6915.0,1639.0,2940.0,1468.0,4.0154,186100.0,NEAR BAY +-122.07,37.97,20.0,1705.0,353.0,856.0,341.0,3.7262,211800.0,NEAR BAY +-122.07,37.96,34.0,1692.0,290.0,836.0,289.0,5.0172,197100.0,NEAR BAY +-122.06,37.96,37.0,1784.0,313.0,788.0,304.0,4.2917,189600.0,NEAR BAY +-122.08,37.96,21.0,9135.0,1534.0,3748.0,1502.0,6.0859,266000.0,NEAR BAY +-122.06,37.95,36.0,2213.0,386.0,950.0,370.0,4.7386,186400.0,NEAR BAY +-122.07,37.95,39.0,2199.0,388.0,1025.0,385.0,4.5893,190000.0,NEAR BAY +-122.08,37.95,24.0,3173.0,548.0,1351.0,536.0,5.0672,243000.0,NEAR BAY +-122.08,37.95,33.0,1043.0,157.0,425.0,148.0,4.8702,235600.0,NEAR BAY +-122.07,37.96,37.0,1217.0,199.0,552.0,194.0,5.0445,196200.0,NEAR BAY +-122.06,37.96,10.0,7136.0,1691.0,2959.0,1507.0,3.9816,182000.0,NEAR BAY +-122.05,37.95,34.0,1408.0,277.0,738.0,269.0,4.175,169400.0,NEAR BAY +-122.05,37.94,22.0,4162.0,1194.0,1804.0,1185.0,2.5459,179300.0,NEAR BAY +-122.06,37.94,19.0,4005.0,972.0,1896.0,893.0,2.5268,235700.0,NEAR BAY +-122.07,37.94,36.0,2639.0,488.0,1111.0,476.0,3.5057,205100.0,NEAR BAY +-122.07,37.94,30.0,1260.0,276.0,707.0,221.0,2.892,220800.0,NEAR BAY +-122.08,37.93,35.0,4043.0,689.0,1832.0,662.0,5.0761,233200.0,NEAR BAY +-122.08,37.94,44.0,2185.0,357.0,943.0,366.0,4.725,232100.0,NEAR BAY +-122.07,37.94,43.0,1454.0,234.0,683.0,258.0,4.475,265700.0,NEAR BAY +-122.09,37.95,32.0,1339.0,209.0,601.0,209.0,6.0265,247900.0,NEAR BAY +-122.09,37.94,29.0,6895.0,1022.0,2634.0,1022.0,6.1922,273200.0,NEAR BAY +-122.04,38.0,16.0,3077.0,733.0,1447.0,709.0,3.2484,91100.0,NEAR BAY +-122.04,37.99,32.0,1504.0,279.0,749.0,267.0,3.2,134500.0,NEAR BAY +-122.04,37.99,36.0,2765.0,495.0,1478.0,441.0,4.125,136200.0,NEAR BAY +-122.05,37.97,16.0,60.0,10.0,65.0,19.0,6.1359,250000.0,NEAR BAY +-122.06,37.99,16.0,2445.0,469.0,721.0,474.0,2.8043,87500.0,NEAR BAY +-122.06,37.99,17.0,1319.0,316.0,384.0,269.0,1.8229,137500.0,NEAR BAY +-122.05,38.0,36.0,2476.0,472.0,1213.0,393.0,3.7333,136400.0,NEAR BAY +-122.05,38.0,16.0,1085.0,217.0,356.0,232.0,2.3462,75000.0,NEAR BAY +-122.03,37.98,16.0,1209.0,477.0,627.0,482.0,1.3894,156300.0,NEAR BAY +-122.04,37.97,10.0,974.0,316.0,631.0,286.0,2.3152,140600.0,NEAR BAY +-122.03,38.0,25.0,3577.0,581.0,1753.0,593.0,5.7295,178300.0,NEAR BAY +-122.03,38.01,27.0,3228.0,562.0,1666.0,588.0,4.5707,175900.0,NEAR BAY +-122.04,37.99,38.0,2675.0,541.0,1378.0,480.0,3.8897,139900.0,NEAR BAY +-122.03,37.98,45.0,2842.0,567.0,1261.0,535.0,3.6042,138200.0,NEAR BAY +-122.02,38.0,28.0,2965.0,533.0,1591.0,472.0,4.6375,178200.0,NEAR BAY +-122.03,37.99,35.0,3103.0,537.0,1614.0,566.0,4.9022,169300.0,NEAR BAY +-122.02,37.99,37.0,2247.0,416.0,1237.0,397.0,4.45,161900.0,NEAR BAY +-122.03,37.99,37.0,1755.0,327.0,882.0,350.0,4.59,166600.0,NEAR BAY +-122.03,37.98,44.0,1254.0,252.0,498.0,217.0,3.4531,148900.0,NEAR BAY +-122.01,37.98,25.0,1476.0,336.0,777.0,297.0,3.5179,165500.0,NEAR BAY +-122.01,37.98,29.0,2001.0,373.0,956.0,370.0,4.317,194000.0,NEAR BAY +-122.0,37.98,32.0,1013.0,169.0,436.0,173.0,5.1118,226900.0,INLAND +-122.0,37.97,27.0,2491.0,428.0,1171.0,431.0,5.1021,202800.0,INLAND +-122.01,37.97,32.0,3012.0,527.0,1288.0,512.0,3.6449,211500.0,NEAR BAY +-122.02,37.98,40.0,1797.0,401.0,756.0,369.0,2.8456,165500.0,NEAR BAY +-122.02,37.98,37.0,1474.0,343.0,782.0,331.0,3.4187,161700.0,NEAR BAY +-122.0,37.99,28.0,4035.0,641.0,1881.0,659.0,5.4607,192300.0,INLAND +-122.0,37.98,31.0,2030.0,337.0,867.0,341.0,5.0915,193200.0,INLAND +-121.99,37.98,23.0,2293.0,411.0,969.0,399.0,4.4536,184000.0,INLAND +-121.99,37.97,28.0,2839.0,428.0,1372.0,443.0,6.2135,217200.0,INLAND +-122.0,37.98,35.0,1192.0,201.0,535.0,172.0,4.9219,182000.0,INLAND +-122.0,37.98,36.0,404.0,77.0,237.0,88.0,4.525,161300.0,INLAND +-122.01,37.98,34.0,1256.0,267.0,638.0,252.0,4.0507,161000.0,NEAR BAY +-122.01,37.99,28.0,1900.0,401.0,918.0,351.0,3.7841,144900.0,NEAR BAY +-121.95,37.96,18.0,2739.0,393.0,1072.0,374.0,6.1436,259500.0,INLAND +-121.97,37.97,27.0,1691.0,289.0,807.0,296.0,6.1168,210500.0,INLAND +-121.97,37.97,24.0,1330.0,183.0,656.0,205.0,5.0092,244100.0,INLAND +-121.97,37.96,28.0,1433.0,290.0,877.0,313.0,4.7891,184800.0,INLAND +-121.96,37.96,28.0,1838.0,273.0,899.0,270.0,5.2145,229200.0,INLAND +-121.96,37.95,7.0,3418.0,740.0,1583.0,676.0,3.6133,196100.0,INLAND +-121.98,37.96,22.0,2987.0,,1420.0,540.0,3.65,204100.0,INLAND +-121.97,37.97,26.0,1977.0,264.0,817.0,273.0,5.7512,240200.0,INLAND +-121.98,37.97,26.0,2714.0,390.0,1232.0,409.0,5.9617,231100.0,INLAND +-121.98,37.97,26.0,2738.0,428.0,1316.0,430.0,5.2442,213200.0,INLAND +-121.99,37.97,22.0,2823.0,509.0,1271.0,474.0,5.1333,207200.0,INLAND +-121.99,37.97,30.0,3320.0,589.0,1470.0,543.0,4.6071,184100.0,INLAND +-122.0,37.96,32.0,3364.0,666.0,1980.0,678.0,3.7,179000.0,INLAND +-122.0,37.96,28.0,4071.0,713.0,2033.0,647.0,4.5833,190700.0,INLAND +-121.96,37.95,13.0,3216.0,765.0,1627.0,715.0,3.0859,167800.0,INLAND +-121.97,37.95,8.0,4253.0,709.0,1883.0,662.0,5.431,246700.0,INLAND +-121.98,37.96,12.0,5048.0,1122.0,2209.0,1014.0,3.1573,126700.0,INLAND +-121.99,37.96,16.0,3324.0,479.0,1470.0,461.0,7.6166,260400.0,INLAND +-121.99,37.96,17.0,2756.0,423.0,1228.0,426.0,5.5872,200600.0,INLAND +-121.98,37.95,14.0,6290.0,854.0,2724.0,820.0,6.7371,267400.0,INLAND +-121.98,37.95,16.0,2984.0,406.0,1317.0,397.0,6.7821,265900.0,INLAND +-122.01,37.97,34.0,3259.0,498.0,1250.0,478.0,5.3794,206200.0,NEAR BAY +-122.02,37.97,36.0,2342.0,436.0,1191.0,416.0,4.0,171000.0,NEAR BAY +-122.03,37.97,45.0,1613.0,338.0,865.0,336.0,3.25,151100.0,NEAR BAY +-122.04,37.97,26.0,2470.0,626.0,1174.0,573.0,2.9861,160900.0,NEAR BAY +-122.03,37.97,20.0,3968.0,931.0,2629.0,903.0,2.9915,166700.0,NEAR BAY +-122.04,37.96,16.0,2913.0,723.0,1705.0,693.0,2.9097,106300.0,NEAR BAY +-122.04,37.97,21.0,6445.0,1839.0,3621.0,1735.0,2.5841,112500.0,NEAR BAY +-122.04,37.97,39.0,1323.0,245.0,705.0,261.0,3.1968,151000.0,NEAR BAY +-122.04,37.96,20.0,1143.0,346.0,578.0,298.0,2.2411,151800.0,NEAR BAY +-122.05,37.96,35.0,2190.0,384.0,1154.0,401.0,3.8456,159800.0,NEAR BAY +-122.04,37.96,28.0,1207.0,252.0,724.0,252.0,3.6964,165700.0,NEAR BAY +-122.04,37.96,27.0,2587.0,729.0,1500.0,623.0,1.837,175000.0,NEAR BAY +-122.05,37.95,27.0,3513.0,791.0,1875.0,694.0,3.1838,182000.0,NEAR BAY +-122.05,37.95,20.0,563.0,107.0,246.0,123.0,5.4482,190800.0,NEAR BAY +-122.01,37.95,8.0,3866.0,539.0,1555.0,513.0,6.0901,298200.0,NEAR BAY +-122.02,37.96,25.0,2615.0,368.0,935.0,366.0,6.6727,305100.0,NEAR BAY +-122.03,37.96,20.0,2636.0,691.0,1142.0,627.0,2.1083,162500.0,NEAR BAY +-122.03,37.95,14.0,3287.0,793.0,1601.0,716.0,3.1719,220500.0,NEAR BAY +-122.02,37.95,25.0,1205.0,260.0,608.0,272.0,2.4519,208300.0,NEAR BAY +-122.03,37.95,32.0,1955.0,313.0,804.0,317.0,4.9485,202300.0,NEAR BAY +-122.02,37.95,22.0,3526.0,510.0,1660.0,508.0,5.6642,237000.0,NEAR BAY +-122.02,37.94,23.0,3516.0,661.0,1465.0,623.0,4.2569,213100.0,NEAR BAY +-122.01,37.94,23.0,3741.0,,1339.0,499.0,6.7061,322300.0,NEAR BAY +-122.02,37.94,19.0,3192.0,612.0,1317.0,594.0,4.125,267100.0,NEAR BAY +-122.01,37.94,26.0,1619.0,224.0,706.0,220.0,6.0704,268000.0,NEAR BAY +-122.01,37.94,18.0,2077.0,298.0,937.0,292.0,6.3809,273600.0,NEAR BAY +-122.0,37.95,9.0,2214.0,256.0,848.0,239.0,6.8145,339200.0,INLAND +-122.01,37.93,25.0,2652.0,335.0,1062.0,334.0,7.5898,330200.0,NEAR BAY +-122.04,37.95,33.0,1653.0,334.0,814.0,328.0,3.1406,163100.0,NEAR BAY +-122.04,37.94,24.0,5732.0,873.0,2444.0,888.0,5.6292,231400.0,NEAR BAY +-122.05,37.94,22.0,2105.0,354.0,993.0,365.0,4.6602,227800.0,NEAR BAY +-122.04,37.95,29.0,866.0,138.0,341.0,133.0,4.7188,197100.0,NEAR BAY +-122.05,37.95,22.0,5175.0,1213.0,2804.0,1091.0,2.85,144600.0,NEAR BAY +-122.03,37.94,21.0,5541.0,776.0,2214.0,737.0,5.5777,279300.0,NEAR BAY +-122.03,37.93,21.0,4712.0,624.0,1773.0,615.0,6.0918,344800.0,NEAR BAY +-122.05,37.93,5.0,4274.0,1153.0,1503.0,881.0,4.0473,266500.0,NEAR BAY +-122.05,37.93,15.0,7803.0,1603.0,2957.0,1546.0,4.45,184900.0,NEAR BAY +-122.05,37.92,14.0,12713.0,2558.0,4741.0,2412.0,4.7094,234700.0,NEAR BAY +-122.02,37.92,26.0,5077.0,640.0,1872.0,636.0,7.4713,351200.0,NEAR BAY +-122.03,37.92,23.0,3318.0,408.0,1124.0,393.0,6.5847,358800.0,NEAR BAY +-122.01,37.91,21.0,10093.0,1269.0,3645.0,1219.0,7.6877,367700.0,NEAR BAY +-122.03,37.91,29.0,5438.0,871.0,2310.0,890.0,5.0362,275300.0,NEAR BAY +-122.06,37.91,15.0,5393.0,1422.0,2133.0,1288.0,4.1612,232800.0,NEAR BAY +-122.06,37.9,25.0,5869.0,1685.0,2669.0,1554.0,2.6998,216100.0,NEAR BAY +-122.06,37.89,21.0,4985.0,1590.0,2575.0,1458.0,3.1002,114300.0,NEAR BAY +-122.07,37.93,45.0,1544.0,244.0,614.0,238.0,5.0255,226000.0,NEAR BAY +-122.07,37.93,25.0,7201.0,1521.0,3264.0,1433.0,3.7433,252100.0,NEAR BAY +-122.07,37.92,26.0,3872.0,739.0,1629.0,684.0,4.4312,225000.0,NEAR BAY +-122.08,37.92,28.0,2377.0,469.0,1068.0,435.0,4.4561,250000.0,NEAR BAY +-122.08,37.92,26.0,1733.0,265.0,796.0,274.0,6.195,264900.0,NEAR BAY +-122.07,37.91,28.0,1731.0,295.0,810.0,295.0,5.0391,259800.0,NEAR BAY +-122.07,37.91,33.0,1550.0,277.0,638.0,254.0,3.6833,292500.0,NEAR BAY +-122.08,37.9,32.0,1075.0,170.0,486.0,173.0,5.0499,306800.0,NEAR BAY +-122.09,37.91,18.0,9576.0,1455.0,3486.0,1380.0,7.0895,306900.0,NEAR BAY +-122.07,37.89,28.0,3410.0,746.0,1428.0,670.0,4.3864,266800.0,NEAR BAY +-122.08,37.89,39.0,3018.0,501.0,1223.0,489.0,6.2924,283900.0,NEAR BAY +-122.08,37.9,29.0,4133.0,770.0,1691.0,744.0,5.1097,288000.0,NEAR BAY +-122.07,37.89,38.0,2139.0,343.0,809.0,340.0,5.5636,268800.0,NEAR BAY +-122.07,37.89,38.0,757.0,124.0,319.0,123.0,5.6558,263300.0,NEAR BAY +-122.06,37.88,34.0,4781.0,703.0,1879.0,714.0,6.5378,340900.0,NEAR BAY +-122.05,37.87,30.0,2296.0,329.0,847.0,322.0,6.7192,397500.0,NEAR BAY +-122.05,37.9,24.0,4125.0,1020.0,1699.0,873.0,2.9526,271000.0,NEAR BAY +-122.05,37.9,32.0,2676.0,484.0,986.0,473.0,4.6528,335700.0,NEAR BAY +-122.05,37.89,37.0,1677.0,269.0,689.0,283.0,4.2625,310600.0,NEAR BAY +-122.04,37.89,33.0,2423.0,322.0,998.0,346.0,7.5349,349100.0,NEAR BAY +-122.05,37.9,32.0,4498.0,862.0,1818.0,851.0,4.8088,321200.0,NEAR BAY +-122.04,37.9,20.0,5467.0,1044.0,2310.0,963.0,5.6986,275800.0,NEAR BAY +-122.02,37.89,29.0,6349.0,858.0,2450.0,778.0,7.5,356200.0,NEAR BAY +-122.04,37.88,32.0,3250.0,550.0,1230.0,557.0,4.6424,312700.0,NEAR BAY +-122.03,37.86,29.0,3025.0,477.0,1035.0,452.0,6.112,390600.0,NEAR BAY +-122.04,37.85,27.0,6039.0,780.0,2181.0,761.0,9.5862,469400.0,NEAR BAY +-121.94,37.73,22.0,1980.0,291.0,861.0,290.0,6.2726,258200.0,<1H OCEAN +-121.94,37.73,22.0,6719.0,1068.0,2843.0,994.0,6.1265,260300.0,<1H OCEAN +-121.93,37.73,23.0,2564.0,347.0,1043.0,351.0,6.2048,275000.0,<1H OCEAN +-121.93,37.73,8.0,831.0,231.0,404.0,224.0,3.375,350000.0,<1H OCEAN +-121.95,37.74,19.0,1127.0,170.0,518.0,167.0,6.3325,250000.0,<1H OCEAN +-121.95,37.74,19.0,5721.0,837.0,2653.0,813.0,6.2631,266000.0,<1H OCEAN +-121.94,37.75,17.0,2559.0,370.0,1238.0,377.0,6.2781,269800.0,<1H OCEAN +-121.92,37.73,24.0,1407.0,327.0,501.0,295.0,2.4821,157200.0,<1H OCEAN +-121.93,37.74,16.0,3326.0,419.0,1272.0,402.0,6.8806,343500.0,<1H OCEAN +-121.94,37.75,16.0,5121.0,735.0,2464.0,761.0,6.6204,296100.0,<1H OCEAN +-121.97,37.79,17.0,5688.0,824.0,2111.0,773.0,6.6131,312500.0,<1H OCEAN +-121.98,37.8,17.0,3354.0,422.0,1457.0,425.0,7.6473,345800.0,<1H OCEAN +-121.98,37.8,16.0,2498.0,330.0,1027.0,343.0,8.155,343700.0,<1H OCEAN +-121.98,37.81,18.0,2903.0,387.0,1127.0,372.0,5.5921,359100.0,<1H OCEAN +-121.96,37.81,12.0,6488.0,778.0,2404.0,765.0,8.3188,403400.0,<1H OCEAN +-121.97,37.8,17.0,3279.0,418.0,1222.0,381.0,7.9168,356000.0,<1H OCEAN +-121.94,37.8,8.0,11336.0,1657.0,4089.0,1555.0,7.8287,369200.0,<1H OCEAN +-121.97,37.79,16.0,3873.0,484.0,1451.0,501.0,6.7857,341300.0,<1H OCEAN +-121.95,37.78,4.0,14652.0,2826.0,5613.0,2579.0,6.3942,356700.0,<1H OCEAN +-121.96,37.76,8.0,3865.0,463.0,1548.0,432.0,9.7037,425100.0,<1H OCEAN +-121.94,37.76,4.0,6875.0,1439.0,2889.0,1307.0,4.6932,356100.0,<1H OCEAN +-121.93,37.76,5.0,2255.0,269.0,876.0,258.0,10.3345,461400.0,<1H OCEAN +-121.92,37.74,8.0,452.0,51.0,140.0,43.0,12.5915,432400.0,<1H OCEAN +-121.93,37.78,2.0,227.0,35.0,114.0,49.0,3.1591,434700.0,<1H OCEAN +-121.96,37.74,2.0,200.0,20.0,25.0,9.0,15.0001,350000.0,<1H OCEAN +-121.97,37.76,8.0,3743.0,581.0,1633.0,567.0,6.7027,381900.0,<1H OCEAN +-121.97,37.77,13.0,7241.0,1007.0,3221.0,947.0,7.2216,324600.0,<1H OCEAN +-121.98,37.74,8.0,2865.0,389.0,1376.0,417.0,7.9393,399300.0,<1H OCEAN +-122.02,37.84,34.0,1879.0,265.0,729.0,263.0,7.7072,443800.0,NEAR BAY +-122.01,37.83,30.0,3917.0,549.0,1330.0,544.0,6.5617,386600.0,NEAR BAY +-122.0,37.82,20.0,2206.0,458.0,926.0,432.0,4.6042,256400.0,<1H OCEAN +-121.99,37.82,22.0,1248.0,271.0,579.0,269.0,3.375,200000.0,<1H OCEAN +-122.03,37.83,24.0,5948.0,738.0,1997.0,710.0,9.8708,500001.0,NEAR BAY +-121.99,37.77,14.0,8213.0,1364.0,3283.0,1286.0,5.1755,294800.0,<1H OCEAN +-121.99,37.81,17.0,465.0,83.0,146.0,75.0,4.9018,188500.0,<1H OCEAN +-122.02,37.8,11.0,6200.0,907.0,2286.0,896.0,7.6518,359300.0,NEAR BAY +-122.03,37.87,21.0,3521.0,447.0,1396.0,467.0,8.2673,358700.0,NEAR BAY +-122.02,37.88,16.0,3031.0,438.0,1087.0,421.0,7.3732,287300.0,NEAR BAY +-122.02,37.87,14.0,3056.0,369.0,1209.0,377.0,8.4352,441400.0,NEAR BAY +-122.03,37.86,25.0,3004.0,393.0,1145.0,376.0,7.2655,494000.0,NEAR BAY +-122.0,37.86,18.0,8953.0,1074.0,3011.0,993.0,10.7372,500001.0,<1H OCEAN +-121.97,37.87,4.0,1029.0,126.0,416.0,122.0,13.4883,500001.0,INLAND +-121.96,37.84,29.0,7479.0,977.0,2744.0,943.0,7.5139,398200.0,INLAND +-122.0,37.84,16.0,7681.0,946.0,2777.0,908.0,9.5271,500001.0,<1H OCEAN +-121.96,37.85,10.0,3209.0,379.0,1199.0,392.0,12.2478,500001.0,INLAND +-121.99,37.83,16.0,2939.0,380.0,1177.0,396.0,8.0839,372000.0,<1H OCEAN +-121.98,37.82,18.0,9117.0,1248.0,3280.0,1167.0,8.003,351300.0,<1H OCEAN +-121.95,37.81,5.0,7178.0,898.0,2823.0,907.0,9.0776,450400.0,<1H OCEAN +-122.1,37.93,20.0,10212.0,1424.0,4083.0,1374.0,8.039,382200.0,NEAR BAY +-122.12,37.94,22.0,4949.0,626.0,1850.0,590.0,10.4549,500001.0,NEAR BAY +-122.1,37.9,38.0,827.0,144.0,368.0,136.0,6.5095,294400.0,NEAR BAY +-122.14,37.9,32.0,5738.0,746.0,2099.0,732.0,10.3224,500001.0,NEAR BAY +-122.12,37.91,34.0,5683.0,755.0,1962.0,723.0,8.3678,455300.0,NEAR BAY +-122.09,37.89,35.0,880.0,139.0,352.0,132.0,6.8686,406500.0,NEAR BAY +-122.1,37.89,21.0,3282.0,653.0,1398.0,601.0,5.2079,310300.0,NEAR BAY +-122.11,37.89,32.0,2372.0,516.0,1067.0,492.0,4.3235,279500.0,NEAR BAY +-122.11,37.88,37.0,4005.0,614.0,1602.0,606.0,6.4666,348200.0,NEAR BAY +-122.12,37.88,35.0,2785.0,362.0,1001.0,363.0,8.0448,433300.0,NEAR BAY +-122.12,37.89,30.0,3227.0,733.0,1260.0,684.0,4.125,257100.0,NEAR BAY +-122.13,37.89,27.0,744.0,214.0,295.0,169.0,2.7411,350000.0,NEAR BAY +-122.13,37.87,18.0,1820.0,220.0,728.0,229.0,10.3713,426100.0,NEAR BAY +-122.14,37.88,34.0,6986.0,1096.0,2865.0,1124.0,6.2275,394400.0,NEAR BAY +-122.07,37.88,11.0,1077.0,318.0,590.0,264.0,3.5536,387200.0,NEAR BAY +-122.08,37.88,24.0,2059.0,462.0,410.0,294.0,2.3971,99400.0,NEAR BAY +-122.08,37.88,26.0,2947.0,,825.0,626.0,2.933,85000.0,NEAR BAY +-122.08,37.87,24.0,6130.0,1359.0,1750.0,1286.0,2.9167,102700.0,NEAR BAY +-122.06,37.85,17.0,7475.0,1556.0,2092.0,1449.0,3.6437,186500.0,NEAR BAY +-122.07,37.86,23.0,1025.0,205.0,263.0,191.0,3.12,155000.0,NEAR BAY +-122.06,37.86,16.0,5187.0,1014.0,1512.0,986.0,4.4551,252400.0,NEAR BAY +-122.07,37.86,17.0,1102.0,224.0,317.0,208.0,3.5893,206300.0,NEAR BAY +-122.08,37.87,26.0,2405.0,564.0,680.0,531.0,2.4896,73400.0,NEAR BAY +-122.1,37.88,35.0,3701.0,528.0,1511.0,517.0,7.2315,367100.0,NEAR BAY +-122.09,37.86,27.0,5484.0,760.0,2212.0,770.0,7.6202,402600.0,NEAR BAY +-122.11,37.87,33.0,3398.0,500.0,1351.0,457.0,6.5814,314200.0,NEAR BAY +-122.12,37.85,18.0,5252.0,686.0,1870.0,657.0,8.0074,454100.0,NEAR BAY +-122.08,37.84,17.0,1320.0,159.0,1722.0,141.0,11.7064,500001.0,NEAR BAY +-122.12,37.81,26.0,4048.0,513.0,1486.0,498.0,7.6717,416500.0,NEAR BAY +-122.12,37.82,26.0,2269.0,317.0,918.0,313.0,6.6657,364500.0,NEAR BAY +-122.11,37.83,19.0,5130.0,741.0,1887.0,712.0,7.203,369900.0,NEAR BAY +-122.08,37.82,4.0,2045.0,237.0,830.0,252.0,11.3421,500001.0,NEAR BAY +-122.14,37.86,20.0,6201.0,1182.0,2415.0,1141.0,4.5744,314000.0,NEAR BAY +-122.14,37.85,27.0,9147.0,1276.0,3371.0,1269.0,7.3267,389900.0,NEAR BAY +-122.14,37.84,24.0,2131.0,343.0,874.0,373.0,5.6349,355600.0,NEAR BAY +-122.16,37.83,16.0,4596.0,705.0,1480.0,650.0,7.52,370200.0,NEAR BAY +-122.16,37.86,36.0,3359.0,493.0,1298.0,483.0,8.1586,404300.0,NEAR BAY +-122.18,37.88,36.0,542.0,119.0,231.0,121.0,4.9,354200.0,NEAR BAY +-122.18,37.86,33.0,4449.0,636.0,1684.0,617.0,8.9571,399700.0,NEAR BAY +-122.16,37.89,32.0,1779.0,241.0,721.0,258.0,8.7589,434500.0,NEAR BAY +-122.17,37.88,32.0,3633.0,508.0,1393.0,506.0,7.6917,401800.0,NEAR BAY +-122.17,37.88,33.0,3626.0,502.0,1348.0,480.0,7.6107,423200.0,NEAR BAY +-122.17,37.87,38.0,1261.0,177.0,472.0,183.0,6.917,438000.0,NEAR BAY +-122.22,37.88,20.0,95.0,13.0,31.0,15.0,2.4444,475000.0,NEAR BAY +-122.2,37.89,37.0,3881.0,560.0,1315.0,517.0,7.3195,367500.0,NEAR BAY +-122.2,37.88,36.0,1065.0,160.0,398.0,155.0,7.7736,378100.0,NEAR BAY +-122.18,37.91,31.0,7200.0,876.0,2428.0,843.0,10.9405,500001.0,NEAR BAY +-122.2,37.9,36.0,2107.0,287.0,740.0,280.0,10.3416,500001.0,NEAR BAY +-122.18,37.9,36.0,4760.0,610.0,1511.0,572.0,9.0064,500001.0,NEAR BAY +-122.18,37.89,18.0,4845.0,735.0,1634.0,734.0,8.1489,499000.0,NEAR BAY +-121.84,37.98,8.0,7505.0,1089.0,3325.0,1016.0,5.2699,204200.0,INLAND +-121.81,37.97,8.0,1584.0,236.0,615.0,202.0,6.4753,166800.0,INLAND +-121.78,37.97,4.0,17032.0,2546.0,7653.0,2359.0,5.5601,213700.0,INLAND +-121.83,37.95,17.0,1133.0,244.0,716.0,235.0,2.875,162500.0,INLAND +-121.94,37.83,11.0,2836.0,373.0,959.0,335.0,10.5815,500001.0,INLAND +-121.89,37.82,4.0,11444.0,1355.0,3898.0,1257.0,13.2949,500001.0,INLAND +-121.91,37.81,7.0,3477.0,416.0,1216.0,395.0,13.1499,500001.0,INLAND +-121.82,37.81,12.0,4711.0,659.0,2089.0,621.0,8.3209,485400.0,INLAND +-121.96,37.99,2.0,3129.0,707.0,1606.0,698.0,2.9591,210100.0,INLAND +-121.96,37.94,26.0,3084.0,505.0,1557.0,501.0,5.1582,194700.0,INLAND +-121.96,37.95,25.0,4026.0,791.0,1850.0,709.0,4.1483,181200.0,INLAND +-121.95,37.94,21.0,3153.0,411.0,1318.0,431.0,6.8642,285400.0,INLAND +-121.97,37.93,4.0,3241.0,464.0,1552.0,494.0,6.6134,307000.0,INLAND +-122.01,37.92,18.0,2808.0,337.0,1038.0,337.0,8.3956,353600.0,NEAR BAY +-122.01,37.92,16.0,2638.0,345.0,1055.0,334.0,8.1163,365800.0,NEAR BAY +-121.99,37.92,14.0,1780.0,224.0,764.0,226.0,9.0243,427700.0,INLAND +-121.93,37.89,13.0,2085.0,292.0,852.0,264.0,7.3445,366700.0,INLAND +-121.92,37.96,14.0,5332.0,884.0,2093.0,839.0,5.2798,237400.0,INLAND +-121.94,37.95,18.0,2541.0,355.0,986.0,346.0,7.1978,288000.0,INLAND +-121.91,37.93,13.0,1610.0,198.0,703.0,217.0,8.7059,329400.0,INLAND +-121.94,37.94,26.0,1299.0,174.0,533.0,180.0,6.2296,291700.0,INLAND +-121.94,37.93,16.0,3421.0,427.0,1341.0,428.0,7.5695,320400.0,INLAND +-121.93,37.93,16.0,2876.0,391.0,1089.0,377.0,6.299,286900.0,INLAND +-121.93,37.93,16.0,2169.0,262.0,877.0,245.0,6.6049,312600.0,INLAND +-121.95,37.94,27.0,1469.0,216.0,578.0,219.0,5.9346,253600.0,INLAND +-122.25,38.02,16.0,1803.0,267.0,946.0,266.0,5.7001,205100.0,NEAR BAY +-122.25,38.03,15.0,3338.0,532.0,1834.0,520.0,5.6293,197600.0,NEAR BAY +-122.21,38.02,15.0,2150.0,327.0,1094.0,324.0,6.0224,198500.0,NEAR BAY +-122.2,37.96,9.0,6306.0,962.0,2581.0,911.0,6.7741,310700.0,NEAR BAY +-122.23,38.06,52.0,1350.0,266.0,490.0,257.0,3.125,171100.0,NEAR BAY +-122.23,38.05,52.0,1736.0,358.0,638.0,297.0,2.5517,147100.0,NEAR BAY +-122.21,38.06,52.0,2735.0,559.0,1076.0,487.0,3.6154,155700.0,NEAR BAY +-122.2,38.04,31.0,3029.0,500.0,1236.0,487.0,5.6022,197000.0,NEAR BAY +-122.26,38.03,25.0,2239.0,361.0,928.0,353.0,4.4474,203700.0,NEAR BAY +-122.27,38.04,47.0,1685.0,405.0,835.0,372.0,2.3103,134500.0,NEAR BAY +-122.26,38.03,41.0,1631.0,282.0,752.0,288.0,3.9345,150200.0,NEAR BAY +-122.26,38.04,41.0,2512.0,539.0,1179.0,480.0,2.694,123000.0,NEAR BAY +-122.25,38.05,30.0,1255.0,297.0,779.0,307.0,1.6767,147700.0,NEAR BAY +-122.32,38.06,4.0,7999.0,1611.0,3596.0,1396.0,5.0969,174200.0,NEAR BAY +-122.28,38.0,26.0,2335.0,413.0,980.0,417.0,3.4471,178900.0,NEAR BAY +-122.29,38.0,16.0,4986.0,1081.0,2805.0,1016.0,4.025,173200.0,NEAR BAY +-122.36,38.03,32.0,2159.0,393.0,981.0,369.0,4.3173,175400.0,NEAR BAY +-122.3,38.0,34.0,1712.0,317.0,956.0,341.0,4.4394,162000.0,NEAR BAY +-122.31,38.0,26.0,3735.0,641.0,1708.0,633.0,4.621,191100.0,NEAR BAY +-122.31,38.01,18.0,4123.0,874.0,1895.0,772.0,3.2759,195000.0,NEAR BAY +-122.28,37.99,28.0,3801.0,622.0,1654.0,571.0,4.375,193300.0,NEAR BAY +-122.26,37.98,28.0,2038.0,329.0,947.0,349.0,5.1178,198000.0,NEAR BAY +-122.27,37.99,16.0,4921.0,737.0,2312.0,725.0,5.8899,243200.0,NEAR BAY +-122.27,37.98,23.0,3455.0,479.0,1375.0,474.0,6.0289,218600.0,NEAR BAY +-122.26,38.02,5.0,3846.0,786.0,2053.0,716.0,5.0473,184800.0,NEAR BAY +-122.24,38.01,11.0,3751.0,565.0,1949.0,555.0,5.7862,269400.0,NEAR BAY +-122.24,38.01,16.0,2084.0,315.0,1154.0,307.0,6.0102,235600.0,NEAR BAY +-122.25,38.0,16.0,2978.0,411.0,1531.0,400.0,6.5006,237700.0,NEAR BAY +-122.26,38.0,14.0,2338.0,391.0,1003.0,398.0,4.2269,170500.0,NEAR BAY +-122.26,38.0,6.0,678.0,104.0,318.0,91.0,5.2375,246400.0,NEAR BAY +-122.27,38.0,15.0,1216.0,166.0,572.0,178.0,5.8418,240300.0,NEAR BAY +-122.27,38.0,12.0,1592.0,242.0,969.0,233.0,6.1576,248700.0,NEAR BAY +-122.26,38.0,5.0,6265.0,908.0,3326.0,872.0,6.2073,272900.0,NEAR BAY +-122.29,37.98,27.0,2133.0,347.0,850.0,350.0,5.1046,209800.0,NEAR BAY +-122.28,37.96,35.0,1579.0,243.0,734.0,264.0,5.5,201000.0,NEAR BAY +-122.27,37.97,10.0,15259.0,2275.0,7266.0,2338.0,6.0666,272400.0,NEAR BAY +-122.3,37.97,30.0,4030.0,772.0,1777.0,718.0,3.6393,184000.0,NEAR BAY +-122.3,37.97,34.0,2854.0,528.0,1211.0,452.0,3.5353,164700.0,NEAR BAY +-122.29,37.97,20.0,3426.0,632.0,1512.0,580.0,4.4911,227400.0,NEAR BAY +-122.3,37.97,35.0,1811.0,377.0,911.0,340.0,3.375,149700.0,NEAR BAY +-122.29,37.94,20.0,7578.0,1426.0,3637.0,1362.0,4.4387,190000.0,NEAR BAY +-122.32,37.95,37.0,1887.0,353.0,895.0,359.0,4.45,196600.0,NEAR BAY +-122.31,37.94,38.0,1794.0,349.0,810.0,335.0,3.8343,191400.0,NEAR BAY +-122.31,37.94,38.0,2172.0,403.0,945.0,384.0,4.3958,194200.0,NEAR BAY +-122.32,37.95,36.0,1425.0,245.0,573.0,239.0,4.35,185000.0,NEAR BAY +-122.31,37.99,25.0,6508.0,1137.0,3259.0,1081.0,4.2348,157800.0,NEAR BAY +-122.3,37.98,25.0,3807.0,806.0,1821.0,792.0,3.6518,164300.0,NEAR BAY +-122.32,37.97,29.0,2347.0,464.0,1135.0,490.0,3.9722,161000.0,NEAR BAY +-122.32,38.01,26.0,3054.0,492.0,1495.0,496.0,4.6944,171100.0,NEAR BAY +-122.33,38.0,35.0,3779.0,711.0,2493.0,679.0,2.9781,109000.0,NEAR BAY +-122.31,38.0,29.0,3108.0,534.0,1687.0,516.0,4.3333,170800.0,NEAR BAY +-122.32,37.99,24.0,4865.0,968.0,2315.0,893.0,4.2852,173500.0,NEAR BAY +-122.32,38.0,32.0,2275.0,397.0,1233.0,418.0,4.0437,162800.0,NEAR BAY +-122.34,37.99,42.0,1531.0,326.0,1271.0,377.0,2.6167,85100.0,NEAR BAY +-122.33,37.98,3.0,2850.0,544.0,1024.0,515.0,6.0115,175000.0,NEAR BAY +-122.33,37.99,4.0,3999.0,1079.0,1591.0,887.0,3.911,112500.0,NEAR BAY +-122.39,38.0,33.0,44.0,6.0,23.0,11.0,4.125,212500.0,NEAR BAY +-122.36,37.96,39.0,246.0,57.0,316.0,52.0,0.716,104200.0,NEAR BAY +-122.36,37.96,31.0,1157.0,276.0,956.0,232.0,1.5347,80400.0,NEAR BAY +-122.36,37.95,40.0,408.0,102.0,302.0,81.0,1.8333,69800.0,NEAR BAY +-122.37,37.95,35.0,215.0,45.0,100.0,34.0,1.6023,81300.0,NEAR BAY +-122.37,37.95,32.0,1298.0,363.0,716.0,268.0,0.9797,76400.0,NEAR BAY +-122.37,37.96,37.0,1572.0,402.0,1046.0,350.0,0.7403,68600.0,NEAR BAY +-122.41,37.98,36.0,60.0,15.0,42.0,25.0,1.4583,67500.0,NEAR BAY +-122.34,37.98,33.0,2014.0,410.0,1354.0,427.0,3.9773,131300.0,NEAR BAY +-122.35,37.98,34.0,3756.0,726.0,2237.0,686.0,3.7562,132900.0,NEAR BAY +-122.34,37.97,19.0,392.0,109.0,287.0,81.0,6.0426,110000.0,NEAR BAY +-122.35,37.96,32.0,1991.0,504.0,1139.0,423.0,2.0353,113600.0,NEAR BAY +-122.35,37.97,43.0,2178.0,482.0,1545.0,471.0,2.5863,112200.0,NEAR BAY +-122.35,37.97,31.0,2892.0,685.0,2104.0,641.0,3.2188,113800.0,NEAR BAY +-122.32,37.97,33.0,1595.0,292.0,991.0,300.0,4.6937,134100.0,NEAR BAY +-122.32,37.97,33.0,1156.0,190.0,643.0,209.0,4.5,156600.0,NEAR BAY +-122.33,37.97,19.0,5151.0,1335.0,2548.0,1165.0,3.3125,158800.0,NEAR BAY +-122.33,37.98,32.0,1967.0,348.0,1144.0,364.0,4.4135,150100.0,NEAR BAY +-122.33,37.97,45.0,1982.0,376.0,1179.0,398.0,3.5463,130800.0,NEAR BAY +-122.34,37.97,19.0,2237.0,580.0,1438.0,551.0,2.3382,120700.0,NEAR BAY +-122.33,37.96,46.0,1222.0,236.0,819.0,251.0,3.9118,129400.0,NEAR BAY +-122.35,37.96,36.0,2191.0,531.0,1563.0,524.0,2.5164,114200.0,NEAR BAY +-122.35,37.96,29.0,1899.0,524.0,1357.0,443.0,1.875,97200.0,NEAR BAY +-122.35,37.96,35.0,1326.0,346.0,1023.0,295.0,2.0724,97700.0,NEAR BAY +-122.35,37.95,31.0,2449.0,595.0,1801.0,548.0,2.6328,110300.0,NEAR BAY +-122.35,37.96,34.0,1428.0,335.0,1272.0,319.0,2.5461,93900.0,NEAR BAY +-122.36,37.96,30.0,950.0,317.0,1073.0,280.0,1.8664,107800.0,NEAR BAY +-122.32,37.96,25.0,1728.0,403.0,934.0,412.0,3.375,133700.0,NEAR BAY +-122.32,37.96,34.0,2070.0,357.0,784.0,294.0,4.0417,182800.0,NEAR BAY +-122.32,37.95,35.0,1612.0,354.0,887.0,331.0,2.5769,146100.0,NEAR BAY +-122.33,37.95,22.0,2099.0,569.0,1135.0,509.0,2.1915,120800.0,NEAR BAY +-122.34,37.96,15.0,6487.0,1717.0,3408.0,1560.0,2.1991,133300.0,NEAR BAY +-122.34,37.96,33.0,1817.0,441.0,1220.0,389.0,2.5382,103600.0,NEAR BAY +-122.32,37.94,38.0,2751.0,522.0,1390.0,489.0,3.7277,165100.0,NEAR BAY +-122.32,37.94,46.0,1901.0,295.0,833.0,352.0,5.5196,210800.0,NEAR BAY +-122.32,37.93,40.0,1141.0,213.0,434.0,196.0,3.9464,186900.0,NEAR BAY +-122.33,37.95,42.0,1627.0,336.0,848.0,316.0,3.7708,144600.0,NEAR BAY +-122.33,37.94,45.0,1226.0,279.0,590.0,260.0,2.8833,140400.0,NEAR BAY +-122.33,37.94,47.0,1882.0,361.0,797.0,342.0,3.5848,140800.0,NEAR BAY +-122.33,37.94,43.0,1876.0,389.0,807.0,377.0,3.1571,141600.0,NEAR BAY +-122.33,37.94,42.0,1695.0,345.0,719.0,334.0,3.9417,139100.0,NEAR BAY +-122.33,37.94,44.0,1769.0,332.0,828.0,309.0,4.0526,150800.0,NEAR BAY +-122.34,37.95,45.0,1128.0,240.0,702.0,270.0,3.6719,134100.0,NEAR BAY +-122.33,37.95,45.0,1585.0,329.0,981.0,373.0,3.0313,135800.0,NEAR BAY +-122.33,37.95,46.0,1543.0,339.0,777.0,322.0,4.0927,142600.0,NEAR BAY +-122.34,37.95,44.0,1675.0,317.0,806.0,311.0,3.0694,135300.0,NEAR BAY +-122.34,37.95,44.0,1788.0,368.0,933.0,329.0,2.875,133400.0,NEAR BAY +-122.34,37.95,39.0,1986.0,427.0,1041.0,385.0,3.2333,135100.0,NEAR BAY +-122.34,37.95,38.0,1340.0,298.0,766.0,241.0,3.2833,111700.0,NEAR BAY +-122.35,37.95,45.0,2142.0,431.0,1318.0,431.0,3.0737,111600.0,NEAR BAY +-122.35,37.95,42.0,1485.0,290.0,971.0,303.0,3.6094,114600.0,NEAR BAY +-122.36,37.95,38.0,1042.0,289.0,773.0,248.0,2.7714,104700.0,NEAR BAY +-122.34,37.94,47.0,2313.0,433.0,947.0,430.0,3.942,143300.0,NEAR BAY +-122.34,37.94,44.0,1917.0,444.0,936.0,435.0,2.7391,140300.0,NEAR BAY +-122.34,37.94,31.0,1611.0,455.0,786.0,411.0,1.681,145500.0,NEAR BAY +-122.34,37.94,42.0,2206.0,451.0,989.0,444.0,3.125,143900.0,NEAR BAY +-122.35,37.94,45.0,2112.0,493.0,1406.0,452.0,2.3456,105200.0,NEAR BAY +-122.35,37.94,34.0,1880.0,459.0,1358.0,422.0,1.6571,105200.0,NEAR BAY +-122.35,37.94,47.0,1275.0,275.0,844.0,273.0,2.8967,95600.0,NEAR BAY +-122.36,37.95,38.0,1066.0,248.0,729.0,286.0,1.5139,81700.0,NEAR BAY +-122.36,37.94,45.0,907.0,188.0,479.0,161.0,3.0862,79000.0,NEAR BAY +-122.36,37.94,27.0,844.0,249.0,583.0,265.0,0.9687,105800.0,NEAR BAY +-122.36,37.94,26.0,1540.0,343.0,1007.0,338.0,1.3365,72900.0,NEAR BAY +-122.36,37.94,41.0,2591.0,585.0,1638.0,462.0,1.822,79700.0,NEAR BAY +-122.37,37.94,49.0,969.0,229.0,599.0,195.0,1.3167,71600.0,NEAR BAY +-122.35,37.93,19.0,1334.0,366.0,1048.0,316.0,1.7865,88000.0,NEAR BAY +-122.35,37.93,28.0,1995.0,488.0,1182.0,439.0,2.3352,84300.0,NEAR BAY +-122.36,37.94,43.0,369.0,107.0,371.0,111.0,1.6,79400.0,NEAR BAY +-122.36,37.93,17.0,1258.0,254.0,885.0,229.0,3.05,121600.0,NEAR BAY +-122.37,37.94,40.0,1064.0,266.0,912.0,239.0,1.0521,69100.0,NEAR BAY +-122.37,37.93,45.0,3150.0,756.0,1798.0,749.0,1.75,37900.0,NEAR BAY +-122.38,37.91,18.0,3507.0,711.0,1224.0,676.0,5.0524,269800.0,NEAR BAY +-122.42,37.93,47.0,3453.0,779.0,1353.0,728.0,4.016,274500.0,NEAR BAY +-122.41,37.94,52.0,154.0,33.0,89.0,38.0,3.2875,275000.0,NEAR BAY +-122.34,37.93,30.0,2515.0,481.0,1327.0,428.0,2.1287,95000.0,NEAR BAY +-122.35,37.93,39.0,2002.0,416.0,1166.0,395.0,1.7257,91500.0,NEAR BAY +-122.36,37.93,44.0,1891.0,449.0,1047.0,432.0,1.7727,86100.0,NEAR BAY +-122.36,37.93,42.0,1796.0,389.0,1107.0,372.0,1.9375,87000.0,NEAR BAY +-122.37,37.93,37.0,709.0,190.0,644.0,174.0,0.8641,84200.0,NEAR BAY +-122.33,37.91,36.0,1954.0,513.0,1437.0,440.0,1.125,93800.0,NEAR BAY +-122.35,37.92,36.0,921.0,200.0,585.0,236.0,1.9224,94000.0,NEAR BAY +-122.36,37.92,52.0,215.0,41.0,126.0,43.0,1.3929,104200.0,NEAR BAY +-122.35,37.91,4.0,2851.0,798.0,1285.0,712.0,4.2895,186800.0,NEAR BAY +-122.33,37.93,34.0,2326.0,471.0,1356.0,441.0,2.3475,90300.0,NEAR BAY +-122.33,37.93,27.0,2158.0,424.0,1220.0,442.0,3.0156,111500.0,NEAR BAY +-122.34,37.93,32.0,2389.0,652.0,1672.0,584.0,1.4423,88300.0,NEAR BAY +-122.34,37.93,45.0,2225.0,486.0,1304.0,459.0,2.64,112100.0,NEAR BAY +-122.35,37.93,41.0,268.0,75.0,198.0,82.0,3.2222,156300.0,NEAR BAY +-122.32,37.92,29.0,2304.0,399.0,1377.0,454.0,5.0187,140600.0,NEAR BAY +-122.33,37.92,26.0,3887.0,779.0,2512.0,740.0,2.2301,122400.0,NEAR BAY +-122.32,37.92,28.0,4649.0,977.0,2606.0,953.0,3.2674,129100.0,NEAR BAY +-122.32,37.91,34.0,2669.0,647.0,1341.0,555.0,2.6399,119600.0,NEAR BAY +-122.31,37.91,39.0,2955.0,696.0,1417.0,682.0,2.7628,167800.0,NEAR BAY +-122.31,37.91,43.0,2549.0,511.0,1060.0,528.0,3.6417,178400.0,NEAR BAY +-122.31,37.91,45.0,3924.0,834.0,1992.0,773.0,4.1146,177800.0,NEAR BAY +-122.31,37.93,39.0,2505.0,371.0,872.0,345.0,5.3433,286500.0,NEAR BAY +-122.31,37.93,36.0,2403.0,408.0,917.0,404.0,5.0399,253400.0,NEAR BAY +-122.32,37.93,40.0,3056.0,489.0,1103.0,481.0,5.1067,247300.0,NEAR BAY +-122.32,37.94,47.0,1911.0,283.0,697.0,275.0,6.2712,267700.0,NEAR BAY +-122.3,37.92,32.0,3943.0,605.0,1524.0,614.0,6.0677,321600.0,NEAR BAY +-122.29,37.92,35.0,583.0,88.0,235.0,84.0,5.943,288200.0,NEAR BAY +-122.29,37.92,32.0,1736.0,234.0,602.0,231.0,6.516,401000.0,NEAR BAY +-122.3,37.93,34.0,2254.0,357.0,715.0,306.0,4.5,304000.0,NEAR BAY +-122.31,37.93,36.0,1526.0,256.0,696.0,263.0,3.5089,261900.0,NEAR BAY +-122.32,37.93,33.0,296.0,73.0,216.0,63.0,2.675,22500.0,NEAR BAY +-122.31,37.92,30.0,1014.0,236.0,537.0,204.0,2.8456,183300.0,NEAR BAY +-122.31,37.92,38.0,1250.0,236.0,631.0,279.0,3.724,220100.0,NEAR BAY +-122.31,37.92,12.0,1895.0,600.0,983.0,519.0,2.5,195800.0,NEAR BAY +-122.32,37.92,22.0,1119.0,220.0,565.0,199.0,3.3594,186900.0,NEAR BAY +-122.31,37.92,43.0,2116.0,407.0,900.0,361.0,4.1587,212200.0,NEAR BAY +-122.3,37.92,33.0,1615.0,271.0,710.0,285.0,4.0804,239000.0,NEAR BAY +-122.31,37.91,31.0,1432.0,348.0,681.0,348.0,2.7243,218100.0,NEAR BAY +-122.3,37.91,39.0,2686.0,569.0,1159.0,559.0,2.9441,200400.0,NEAR BAY +-122.3,37.91,40.0,2866.0,617.0,1305.0,589.0,3.6321,209100.0,NEAR BAY +-122.3,37.9,37.0,2125.0,489.0,912.0,462.0,2.9219,217200.0,NEAR BAY +-122.3,37.9,41.0,2053.0,435.0,873.0,415.0,3.4091,223000.0,NEAR BAY +-122.3,37.9,35.0,1102.0,308.0,688.0,303.0,2.3946,141700.0,NEAR BAY +-122.3,37.9,30.0,1772.0,471.0,880.0,437.0,2.2672,162500.0,NEAR BAY +-122.29,37.92,36.0,1450.0,235.0,568.0,234.0,6.0,311400.0,NEAR BAY +-122.29,37.91,38.0,2591.0,424.0,905.0,378.0,5.1691,263200.0,NEAR BAY +-122.29,37.91,46.0,2085.0,346.0,748.0,354.0,4.0536,262000.0,NEAR BAY +-122.29,37.91,40.0,2085.0,329.0,796.0,339.0,5.5357,273700.0,NEAR BAY +-122.29,37.9,52.0,2657.0,500.0,1131.0,489.0,4.4286,234900.0,NEAR BAY +-122.28,37.91,38.0,2501.0,348.0,805.0,329.0,6.5576,358500.0,NEAR BAY +-122.28,37.9,49.0,3191.0,516.0,1148.0,507.0,6.3538,333700.0,NEAR BAY +-122.28,37.9,52.0,1369.0,249.0,490.0,248.0,4.1212,287500.0,NEAR BAY +-122.28,37.91,41.0,3009.0,482.0,1053.0,490.0,5.828,324400.0,NEAR BAY +-122.27,37.91,47.0,1930.0,315.0,692.0,296.0,6.3669,315500.0,NEAR BAY +-122.28,37.91,48.0,2083.0,298.0,685.0,286.0,7.3089,331200.0,NEAR BAY +-124.17,41.8,16.0,2739.0,480.0,1259.0,436.0,3.7557,109400.0,NEAR OCEAN +-124.3,41.8,19.0,2672.0,552.0,1298.0,478.0,1.9797,85800.0,NEAR OCEAN +-124.23,41.75,11.0,3159.0,616.0,1343.0,479.0,2.4805,73200.0,NEAR OCEAN +-124.21,41.77,17.0,3461.0,722.0,1947.0,647.0,2.5795,68400.0,NEAR OCEAN +-124.19,41.78,15.0,3140.0,714.0,1645.0,640.0,1.6654,74600.0,NEAR OCEAN +-124.22,41.73,28.0,3003.0,699.0,1530.0,653.0,1.7038,78300.0,NEAR OCEAN +-124.21,41.75,20.0,3810.0,787.0,1993.0,721.0,2.0074,66900.0,NEAR OCEAN +-124.17,41.76,20.0,2673.0,538.0,1282.0,514.0,2.4605,105900.0,NEAR OCEAN +-124.16,41.74,15.0,2715.0,569.0,1532.0,530.0,2.1829,69500.0,NEAR OCEAN +-124.14,41.95,21.0,2696.0,578.0,1208.0,494.0,2.275,122400.0,NEAR OCEAN +-124.16,41.92,19.0,1668.0,324.0,841.0,283.0,2.1336,75000.0,NEAR OCEAN +-124.3,41.84,17.0,2677.0,531.0,1244.0,456.0,3.0313,103600.0,NEAR OCEAN +-124.15,41.81,17.0,3276.0,628.0,3546.0,585.0,2.2868,103100.0,NEAR OCEAN +-123.91,41.68,22.0,1880.0,360.0,743.0,314.0,2.9688,152700.0,<1H OCEAN +-123.83,41.88,18.0,1504.0,357.0,660.0,258.0,3.13,116700.0,<1H OCEAN +-123.92,41.54,22.0,2920.0,636.0,1382.0,499.0,2.0202,71100.0,NEAR OCEAN +-119.94,38.96,20.0,1451.0,386.0,467.0,255.0,1.5536,212500.0,INLAND +-119.95,38.95,8.0,430.0,107.0,36.0,18.0,2.625,187500.0,INLAND +-119.95,38.95,22.0,1058.0,352.0,851.0,269.0,2.02,87500.0,INLAND +-119.95,38.95,21.0,2046.0,580.0,952.0,353.0,1.7245,92200.0,INLAND +-119.94,38.95,25.0,1789.0,536.0,1134.0,396.0,2.32,91300.0,INLAND +-119.95,38.94,24.0,2180.0,517.0,755.0,223.0,2.5875,173400.0,INLAND +-119.93,38.94,27.0,1709.0,408.0,97.0,44.0,2.4917,200000.0,INLAND +-119.97,38.94,26.0,1485.0,334.0,406.0,180.0,1.9667,84600.0,INLAND +-119.97,38.93,24.0,856.0,185.0,388.0,108.0,3.1806,107200.0,INLAND +-119.98,38.96,25.0,2443.0,444.0,868.0,342.0,3.5417,114800.0,INLAND +-119.96,38.94,19.0,1429.0,292.0,585.0,188.0,2.2589,131600.0,INLAND +-119.96,38.94,27.0,1492.0,393.0,717.0,254.0,1.8906,104200.0,INLAND +-119.96,38.93,22.0,2731.0,632.0,1215.0,483.0,2.83,110500.0,INLAND +-119.94,38.92,24.0,1258.0,216.0,235.0,96.0,4.6,136800.0,INLAND +-119.98,38.94,25.0,1339.0,328.0,503.0,219.0,1.9018,109700.0,INLAND +-119.98,38.94,23.0,1564.0,298.0,339.0,147.0,4.0417,99300.0,INLAND +-119.99,38.94,24.0,1216.0,289.0,421.0,185.0,3.1625,103600.0,INLAND +-119.99,38.94,22.0,3119.0,640.0,786.0,351.0,3.0806,118500.0,INLAND +-119.99,38.93,23.0,1882.0,414.0,673.0,277.0,2.9091,141900.0,INLAND +-119.98,38.93,28.0,1194.0,272.0,494.0,203.0,2.3281,85800.0,INLAND +-119.98,38.93,25.0,1262.0,293.0,534.0,226.0,2.6607,90400.0,INLAND +-119.98,38.92,27.0,2682.0,606.0,1010.0,399.0,3.15,86900.0,INLAND +-119.98,38.92,28.0,1408.0,312.0,522.0,221.0,2.0708,89600.0,INLAND +-120.0,38.93,17.0,8005.0,1382.0,999.0,383.0,3.9722,313400.0,INLAND +-120.01,38.93,22.0,3080.0,610.0,1045.0,425.0,2.996,126100.0,INLAND +-120.0,38.92,17.0,1106.0,207.0,466.0,180.0,3.3295,126600.0,INLAND +-120.0,38.92,26.0,529.0,116.0,191.0,83.0,3.5,103600.0,INLAND +-120.01,38.92,23.0,964.0,246.0,485.0,198.0,1.7188,96100.0,INLAND +-120.01,38.92,25.0,1758.0,357.0,689.0,278.0,2.675,104200.0,INLAND +-120.02,38.91,22.0,2138.0,493.0,829.0,330.0,2.2056,107200.0,INLAND +-120.02,38.92,24.0,1194.0,246.0,414.0,151.0,3.2396,101900.0,INLAND +-120.01,38.91,27.0,968.0,191.0,283.0,143.0,2.0938,94400.0,INLAND +-120.01,38.91,17.0,2732.0,609.0,1005.0,499.0,1.9851,86700.0,INLAND +-120.01,38.89,24.0,1669.0,422.0,589.0,281.0,3.0089,100800.0,INLAND +-120.0,38.9,21.0,1653.0,419.0,737.0,308.0,1.9727,114100.0,INLAND +-119.99,38.88,17.0,2807.0,529.0,675.0,251.0,2.7457,107800.0,INLAND +-119.98,38.9,16.0,3109.0,572.0,885.0,334.0,3.5,134700.0,INLAND +-119.92,38.91,15.0,3831.0,625.0,984.0,328.0,5.0718,162500.0,INLAND +-120.0,38.87,12.0,1437.0,268.0,395.0,144.0,4.225,127600.0,INLAND +-119.96,38.84,17.0,2722.0,512.0,828.0,289.0,3.5714,109700.0,INLAND +-120.02,38.76,15.0,3142.0,618.0,725.0,285.0,4.3333,121400.0,INLAND +-120.04,38.86,16.0,2708.0,481.0,712.0,261.0,3.7891,117700.0,INLAND +-120.03,38.89,15.0,3042.0,588.0,918.0,336.0,3.8333,118800.0,INLAND +-120.02,38.86,19.0,2429.0,459.0,883.0,300.0,3.017,97600.0,INLAND +-120.13,39.06,22.0,2465.0,539.0,381.0,146.0,2.875,87500.0,INLAND +-120.16,39.04,18.0,2040.0,402.0,350.0,129.0,4.0313,126000.0,INLAND +-120.16,39.01,16.0,1463.0,264.0,54.0,26.0,4.975,206300.0,INLAND +-120.06,39.01,19.0,2967.0,528.0,112.0,48.0,4.0714,437500.0,INLAND +-120.1,38.91,33.0,1561.0,282.0,30.0,11.0,1.875,500001.0,INLAND +-120.97,38.91,7.0,4341.0,716.0,1978.0,682.0,4.8311,172200.0,INLAND +-121.04,38.81,11.0,3522.0,623.0,1456.0,544.0,3.93,163400.0,INLAND +-120.72,38.94,10.0,1604.0,352.0,540.0,190.0,3.7625,113200.0,INLAND +-120.88,38.91,15.0,3876.0,778.0,1960.0,691.0,2.902,127300.0,INLAND +-120.92,38.86,11.0,1720.0,345.0,850.0,326.0,3.2027,128600.0,INLAND +-120.87,38.83,12.0,2180.0,423.0,1070.0,377.0,2.8562,128200.0,INLAND +-120.84,38.81,11.0,1280.0,286.0,609.0,248.0,3.1635,132600.0,INLAND +-120.81,38.89,17.0,1438.0,324.0,675.0,268.0,2.9444,119300.0,INLAND +-120.79,38.83,15.0,1374.0,291.0,709.0,239.0,1.7222,118500.0,INLAND +-120.71,38.85,8.0,1877.0,479.0,884.0,323.0,3.4688,120100.0,INLAND +-120.5,38.87,10.0,81.0,41.0,55.0,16.0,4.9583,87500.0,INLAND +-120.3,38.9,11.0,1961.0,435.0,113.0,53.0,0.9227,95500.0,INLAND +-121.09,38.68,15.0,5218.0,711.0,1949.0,659.0,4.7083,213300.0,INLAND +-121.08,38.67,10.0,2499.0,331.0,1040.0,333.0,6.844,239600.0,INLAND +-121.07,38.66,22.0,1831.0,274.0,813.0,269.0,4.6394,173400.0,INLAND +-121.06,38.7,9.0,13255.0,1739.0,5001.0,1627.0,6.314,228900.0,INLAND +-121.0,38.58,12.0,3425.0,549.0,1357.0,451.0,5.3344,217500.0,INLAND +-121.01,38.73,7.0,6322.0,1046.0,2957.0,1024.0,4.7276,197500.0,INLAND +-120.99,38.69,5.0,5743.0,1074.0,2651.0,962.0,4.1163,172500.0,INLAND +-121.02,38.66,4.0,7392.0,1155.0,3096.0,1065.0,4.5246,198900.0,INLAND +-120.99,38.67,8.0,4913.0,744.0,2005.0,723.0,5.4413,187900.0,INLAND +-120.98,38.67,13.0,3432.0,516.0,1286.0,470.0,5.584,186600.0,INLAND +-120.98,38.66,9.0,2073.0,404.0,916.0,373.0,3.225,163300.0,INLAND +-120.98,38.68,5.0,4810.0,909.0,2242.0,900.0,3.2964,176900.0,INLAND +-120.95,38.69,10.0,3421.0,563.0,1689.0,545.0,5.2032,217100.0,INLAND +-120.96,38.66,11.0,2339.0,436.0,1062.0,380.0,3.9036,180800.0,INLAND +-120.97,38.65,9.0,3707.0,602.0,1601.0,555.0,4.0714,300600.0,INLAND +-120.93,38.65,12.0,2213.0,384.0,1097.0,351.0,4.5568,170100.0,INLAND +-120.91,38.62,12.0,4545.0,748.0,2033.0,718.0,4.1843,207600.0,INLAND +-120.95,38.79,12.0,3247.0,579.0,1459.0,517.0,4.3981,202800.0,INLAND +-120.93,38.77,9.0,2229.0,355.0,788.0,341.0,5.5111,196300.0,INLAND +-120.91,38.73,11.0,5460.0,859.0,2645.0,838.0,4.835,230600.0,INLAND +-120.87,38.71,13.0,2692.0,470.0,1302.0,420.0,4.0,167400.0,INLAND +-120.84,38.77,11.0,1013.0,188.0,410.0,158.0,4.825,184600.0,INLAND +-120.86,38.75,15.0,1533.0,300.0,674.0,287.0,2.5625,146100.0,INLAND +-120.83,38.74,17.0,3685.0,775.0,1714.0,734.0,2.2269,128300.0,INLAND +-120.84,38.73,17.0,2616.0,492.0,1158.0,457.0,2.8807,142600.0,INLAND +-120.81,38.73,38.0,2005.0,385.0,882.0,353.0,2.5104,120500.0,INLAND +-120.78,38.74,28.0,4236.0,877.0,2008.0,881.0,2.1603,111300.0,INLAND +-120.81,38.74,29.0,2259.0,482.0,1099.0,463.0,2.3314,121600.0,INLAND +-120.76,38.76,21.0,3509.0,606.0,1576.0,564.0,2.6392,148500.0,INLAND +-120.76,38.73,17.0,512.0,129.0,314.0,140.0,1.5625,108300.0,INLAND +-120.78,38.73,31.0,3117.0,616.0,1606.0,588.0,2.9844,127900.0,INLAND +-120.81,38.73,42.0,1276.0,260.0,799.0,259.0,2.7273,128600.0,INLAND +-120.78,38.72,19.0,4414.0,767.0,1865.0,699.0,3.6406,150900.0,INLAND +-120.67,38.76,35.0,2104.0,403.0,1060.0,400.0,2.1682,138100.0,INLAND +-120.7,38.75,19.0,2325.0,430.0,967.0,376.0,2.9,158700.0,INLAND +-120.71,38.73,17.0,2146.0,396.0,862.0,351.0,2.9219,141300.0,INLAND +-120.58,38.77,15.0,2155.0,394.0,857.0,356.0,4.03,141200.0,INLAND +-120.58,38.77,21.0,1661.0,406.0,789.0,319.0,2.3583,108700.0,INLAND +-120.6,38.76,22.0,1236.0,273.0,615.0,248.0,3.0217,106900.0,INLAND +-120.59,38.76,21.0,1728.0,417.0,731.0,334.0,1.7266,94700.0,INLAND +-120.63,38.75,17.0,3145.0,621.0,1432.0,559.0,2.7201,117500.0,INLAND +-120.7,38.69,13.0,4492.0,821.0,2093.0,734.0,4.0709,151700.0,INLAND +-120.63,38.73,11.0,4577.0,836.0,1944.0,700.0,4.0675,140200.0,INLAND +-120.62,38.71,10.0,6305.0,1150.0,2597.0,921.0,4.0197,132200.0,INLAND +-120.63,38.68,14.0,1821.0,316.0,769.0,266.0,3.0789,131700.0,INLAND +-120.54,38.75,9.0,3006.0,540.0,1102.0,418.0,3.9812,136600.0,INLAND +-120.76,38.6,14.0,2925.0,625.0,1226.0,437.0,2.5865,133800.0,INLAND +-120.66,38.61,19.0,2715.0,596.0,1301.0,473.0,2.5042,126400.0,INLAND +-120.72,38.57,8.0,892.0,185.0,427.0,164.0,2.6833,118800.0,INLAND +-120.59,38.53,15.0,432.0,87.0,208.0,73.0,3.6125,100000.0,INLAND +-120.44,38.61,9.0,2598.0,548.0,796.0,297.0,3.5192,98000.0,INLAND +-120.32,38.71,13.0,1115.0,255.0,86.0,32.0,3.5667,115600.0,INLAND +-120.08,38.8,34.0,1988.0,511.0,36.0,15.0,4.625,162500.0,INLAND +-120.88,38.58,8.0,3417.0,604.0,1703.0,623.0,4.0827,170700.0,INLAND +-120.84,38.63,12.0,1313.0,231.0,731.0,232.0,5.7373,208300.0,INLAND +-120.81,38.67,14.0,8396.0,1578.0,3952.0,1474.0,3.0565,118800.0,INLAND +-120.76,38.65,17.0,2319.0,430.0,1126.0,372.0,3.5511,155900.0,INLAND +-120.85,38.69,18.0,5928.0,1097.0,2697.0,1096.0,3.4872,141400.0,INLAND +-120.79,38.7,13.0,5036.0,1034.0,2243.0,923.0,2.3319,138500.0,INLAND +-119.81,36.73,51.0,956.0,196.0,662.0,180.0,2.101,56700.0,INLAND +-119.81,36.73,47.0,1314.0,416.0,1155.0,326.0,1.372,49600.0,INLAND +-119.81,36.74,36.0,607.0,155.0,483.0,146.0,1.5625,47500.0,INLAND +-119.79,36.73,52.0,112.0,28.0,193.0,40.0,1.975,47500.0,INLAND +-119.8,36.73,45.0,925.0,231.0,797.0,228.0,1.7011,44800.0,INLAND +-119.8,36.72,43.0,1286.0,360.0,972.0,345.0,0.9513,50400.0,INLAND +-119.81,36.72,46.0,1414.0,268.0,902.0,243.0,1.5833,56700.0,INLAND +-119.81,36.73,50.0,772.0,194.0,606.0,167.0,2.2206,59200.0,INLAND +-119.77,36.73,44.0,1960.0,393.0,1286.0,381.0,2.1518,53000.0,INLAND +-119.77,36.72,43.0,1763.0,389.0,1623.0,390.0,1.4427,47700.0,INLAND +-119.78,36.73,52.0,1377.0,319.0,1280.0,259.0,1.2344,43300.0,INLAND +-119.77,36.73,45.0,1081.0,241.0,821.0,230.0,1.7829,52600.0,INLAND +-119.77,36.75,39.0,1287.0,332.0,1386.0,306.0,1.5227,46900.0,INLAND +-119.77,36.74,20.0,1855.0,519.0,1091.0,443.0,1.5547,93900.0,INLAND +-119.78,36.74,15.0,1461.0,415.0,924.0,356.0,2.5045,90300.0,INLAND +-119.78,36.75,35.0,2114.0,506.0,2050.0,474.0,1.2375,50000.0,INLAND +-119.78,36.75,31.0,1404.0,379.0,1515.0,387.0,1.2813,56400.0,INLAND +-119.79,36.74,35.0,853.0,296.0,1228.0,289.0,1.0513,39600.0,INLAND +-119.79,36.74,52.0,173.0,87.0,401.0,84.0,2.1094,75000.0,INLAND +-119.8,36.74,25.0,1717.0,542.0,1343.0,471.0,0.799,51800.0,INLAND +-119.8,36.75,41.0,1659.0,466.0,1391.0,447.0,1.3527,61200.0,INLAND +-119.79,36.75,33.0,3161.0,934.0,3530.0,846.0,1.123,46700.0,INLAND +-119.82,36.74,52.0,610.0,128.0,406.0,122.0,1.8967,43800.0,INLAND +-119.82,36.72,25.0,2581.0,528.0,1642.0,509.0,1.6435,52600.0,INLAND +-119.82,36.72,17.0,1276.0,242.0,927.0,238.0,2.6176,54100.0,INLAND +-119.83,36.73,21.0,1702.0,358.0,1347.0,316.0,2.4137,62100.0,INLAND +-119.83,36.72,28.0,60.0,10.0,46.0,13.0,4.35,67500.0,INLAND +-119.83,36.71,43.0,355.0,81.0,233.0,75.0,2.4167,73900.0,INLAND +-119.79,36.72,19.0,1719.0,391.0,1369.0,368.0,1.25,53000.0,INLAND +-119.8,36.71,29.0,1541.0,291.0,1007.0,313.0,2.0043,53500.0,INLAND +-119.81,36.71,25.0,1026.0,221.0,789.0,183.0,1.5625,52800.0,INLAND +-119.8,36.72,19.0,1334.0,336.0,1171.0,319.0,1.0481,48500.0,INLAND +-119.8,36.72,15.0,1908.0,417.0,1383.0,375.0,1.0472,57800.0,INLAND +-119.79,36.7,23.0,1731.0,363.0,1210.0,341.0,1.3922,49500.0,INLAND +-119.8,36.7,28.0,1592.0,304.0,962.0,282.0,1.3304,51300.0,INLAND +-119.81,36.7,52.0,314.0,57.0,178.0,66.0,1.2404,52500.0,INLAND +-119.78,36.72,22.0,354.0,121.0,530.0,115.0,2.1458,34400.0,INLAND +-119.79,36.72,41.0,1562.0,322.0,927.0,277.0,1.3047,44100.0,INLAND +-119.78,36.71,35.0,1987.0,394.0,1233.0,383.0,1.3587,45300.0,INLAND +-119.74,36.71,17.0,5872.0,1250.0,5034.0,1224.0,2.1905,61800.0,INLAND +-119.76,36.71,29.0,1745.0,441.0,1530.0,391.0,1.5611,44400.0,INLAND +-119.76,36.72,24.0,1240.0,265.0,1035.0,232.0,2.875,60600.0,INLAND +-119.75,36.71,38.0,1481.0,,1543.0,372.0,1.4577,49800.0,INLAND +-119.74,36.73,34.0,1254.0,272.0,1056.0,279.0,2.3269,50800.0,INLAND +-119.74,36.72,25.0,3972.0,842.0,2863.0,729.0,2.1304,58500.0,INLAND +-119.75,36.72,22.0,3247.0,859.0,4179.0,881.0,1.3343,60800.0,INLAND +-119.76,36.73,46.0,1347.0,282.0,854.0,267.0,1.8723,52600.0,INLAND +-119.76,36.73,39.0,1553.0,363.0,1449.0,341.0,1.4419,45500.0,INLAND +-119.75,36.73,39.0,2290.0,539.0,1685.0,536.0,1.6325,52100.0,INLAND +-119.74,36.73,42.0,1236.0,272.0,946.0,261.0,2.0536,50000.0,INLAND +-119.69,36.75,6.0,1926.0,303.0,965.0,316.0,4.7463,93100.0,INLAND +-119.67,36.74,19.0,2788.0,614.0,1365.0,525.0,2.7813,120300.0,INLAND +-119.69,36.74,17.0,2438.0,598.0,1563.0,538.0,1.5449,62500.0,INLAND +-119.69,36.75,13.0,2343.0,409.0,1347.0,405.0,4.0027,93100.0,INLAND +-119.67,36.73,27.0,2845.0,417.0,1219.0,460.0,4.9196,117900.0,INLAND +-119.69,36.73,30.0,2437.0,349.0,1005.0,380.0,7.2211,171700.0,INLAND +-119.69,36.74,23.0,2097.0,385.0,911.0,405.0,3.5128,121600.0,INLAND +-119.69,36.71,25.0,556.0,79.0,249.0,71.0,4.4583,108300.0,INLAND +-119.67,36.72,31.0,843.0,140.0,453.0,149.0,2.6875,153800.0,INLAND +-119.73,36.73,7.0,2461.0,647.0,1587.0,551.0,1.4007,225000.0,INLAND +-119.72,36.73,9.0,1914.0,491.0,1116.0,424.0,1.4646,65900.0,INLAND +-119.72,36.72,15.0,1713.0,246.0,766.0,232.0,6.8162,127200.0,INLAND +-119.73,36.72,26.0,2645.0,1005.0,1660.0,991.0,0.6991,89500.0,INLAND +-119.73,36.73,9.0,1621.0,428.0,678.0,394.0,2.2437,54200.0,INLAND +-119.71,36.73,19.0,3972.0,585.0,1586.0,560.0,5.2608,151400.0,INLAND +-119.72,36.71,7.0,2456.0,463.0,1350.0,424.0,3.0179,91600.0,INLAND +-119.73,36.72,15.0,2246.0,456.0,1190.0,403.0,2.0294,70400.0,INLAND +-119.73,36.68,32.0,755.0,205.0,681.0,207.0,1.7986,49300.0,INLAND +-119.69,36.69,36.0,1432.0,269.0,836.0,237.0,2.1563,88300.0,INLAND +-119.76,36.68,29.0,1243.0,312.0,836.0,277.0,1.8355,74200.0,INLAND +-119.67,36.65,20.0,2512.0,449.0,1464.0,450.0,3.9211,92300.0,INLAND +-119.63,36.64,33.0,1036.0,181.0,620.0,174.0,3.4107,110400.0,INLAND +-119.65,36.62,6.0,1931.0,422.0,1344.0,414.0,1.6607,58000.0,INLAND +-119.68,36.63,39.0,1237.0,256.0,638.0,239.0,3.0139,65300.0,INLAND +-119.74,36.65,19.0,2546.0,463.0,1257.0,418.0,2.9013,89500.0,INLAND +-119.68,36.62,31.0,834.0,229.0,616.0,211.0,1.6602,61200.0,INLAND +-119.73,36.62,35.0,2080.0,365.0,1026.0,333.0,3.5781,92800.0,INLAND +-119.73,36.59,31.0,1551.0,296.0,1058.0,287.0,3.3438,92600.0,INLAND +-119.8,36.68,31.0,2214.0,432.0,1326.0,416.0,2.1691,66700.0,INLAND +-119.78,36.65,27.0,1226.0,240.0,706.0,211.0,2.77,68400.0,INLAND +-119.82,36.64,30.0,1694.0,312.0,1008.0,321.0,2.2466,96000.0,INLAND +-119.8,36.65,34.0,2263.0,423.0,1184.0,407.0,1.7692,74200.0,INLAND +-119.89,36.73,43.0,524.0,93.0,302.0,93.0,2.6146,81300.0,INLAND +-119.87,36.72,30.0,1584.0,316.0,984.0,300.0,2.0658,67900.0,INLAND +-119.89,36.7,32.0,1485.0,269.0,867.0,271.0,2.5809,78300.0,INLAND +-119.85,36.74,35.0,1191.0,190.0,537.0,182.0,3.5375,96700.0,INLAND +-119.84,36.77,6.0,1853.0,473.0,1397.0,417.0,1.4817,72000.0,INLAND +-119.83,36.76,15.0,3291.0,772.0,1738.0,634.0,1.976,67300.0,INLAND +-119.82,36.75,41.0,1022.0,209.0,741.0,213.0,2.0781,48800.0,INLAND +-119.84,36.75,34.0,1186.0,300.0,774.0,271.0,1.575,57100.0,INLAND +-119.83,36.75,33.0,662.0,183.0,607.0,181.0,1.3929,55600.0,INLAND +-119.81,36.76,48.0,2059.0,388.0,834.0,405.0,2.9306,67900.0,INLAND +-119.81,36.76,51.0,2419.0,486.0,1284.0,426.0,2.2029,54200.0,INLAND +-119.81,36.75,52.0,1827.0,356.0,855.0,353.0,1.7636,55100.0,INLAND +-119.82,36.76,41.0,1973.0,399.0,1107.0,375.0,1.8971,66900.0,INLAND +-119.82,36.76,46.0,2194.0,563.0,924.0,542.0,1.4028,68500.0,INLAND +-119.8,36.76,52.0,1853.0,437.0,764.0,390.0,1.6429,69200.0,INLAND +-119.8,36.75,52.0,1788.0,449.0,1156.0,418.0,1.7298,58400.0,INLAND +-119.81,36.76,52.0,1792.0,352.0,1049.0,357.0,2.4375,57100.0,INLAND +-119.8,36.76,52.0,2224.0,418.0,832.0,406.0,2.3952,78400.0,INLAND +-119.79,36.76,52.0,1185.0,260.0,635.0,239.0,1.175,56100.0,INLAND +-119.79,36.75,52.0,377.0,97.0,530.0,96.0,1.0,45000.0,INLAND +-119.8,36.75,46.0,2625.0,593.0,1368.0,551.0,1.5273,59000.0,INLAND +-119.79,36.76,52.0,2408.0,498.0,1361.0,465.0,2.1055,61300.0,INLAND +-119.78,36.76,47.0,1425.0,323.0,949.0,325.0,1.7344,51300.0,INLAND +-119.78,36.75,49.0,1175.0,307.0,982.0,278.0,1.2937,52000.0,INLAND +-119.78,36.75,43.0,2070.0,512.0,1925.0,444.0,1.4635,46600.0,INLAND +-119.78,36.76,50.0,1343.0,322.0,1063.0,342.0,1.75,49800.0,INLAND +-119.76,36.76,23.0,3800.0,1003.0,3786.0,917.0,1.4766,50600.0,INLAND +-119.76,36.75,35.0,1607.0,383.0,1407.0,382.0,2.19,53400.0,INLAND +-119.76,36.75,41.0,1576.0,417.0,1567.0,366.0,1.2545,45500.0,INLAND +-119.77,36.76,40.0,2009.0,519.0,2219.0,505.0,1.2101,49100.0,INLAND +-119.77,36.76,43.0,1623.0,294.0,781.0,272.0,1.869,56000.0,INLAND +-119.77,36.76,43.0,1945.0,413.0,1492.0,422.0,1.5174,54600.0,INLAND +-119.76,36.75,35.0,2347.0,526.0,1676.0,481.0,1.6548,49400.0,INLAND +-119.76,36.74,52.0,2137.0,448.0,1194.0,444.0,1.3029,69100.0,INLAND +-119.77,36.74,50.0,1325.0,280.0,811.0,281.0,1.8667,62800.0,INLAND +-119.77,36.74,51.0,1454.0,235.0,729.0,252.0,3.3125,70100.0,INLAND +-119.77,36.75,44.0,1818.0,412.0,1680.0,418.0,1.7083,48300.0,INLAND +-119.76,36.75,39.0,2233.0,563.0,2031.0,491.0,1.8641,50800.0,INLAND +-119.74,36.75,47.0,2236.0,418.0,1042.0,397.0,2.9545,59600.0,INLAND +-119.74,36.74,39.0,4893.0,1210.0,4749.0,1067.0,1.2065,55600.0,INLAND +-119.75,36.74,39.0,1740.0,351.0,1098.0,347.0,1.8958,51300.0,INLAND +-119.75,36.75,50.0,1515.0,294.0,852.0,297.0,1.9955,54200.0,INLAND +-119.75,36.75,49.0,2331.0,460.0,1290.0,477.0,2.5111,55400.0,INLAND +-119.74,36.76,42.0,2093.0,470.0,1621.0,438.0,1.7994,58700.0,INLAND +-119.74,36.76,36.0,912.0,216.0,842.0,219.0,1.4766,52800.0,INLAND +-119.75,36.76,29.0,2077.0,524.0,1887.0,489.0,1.4107,59800.0,INLAND +-119.75,36.76,32.0,2072.0,497.0,2002.0,470.0,1.3278,44500.0,INLAND +-119.72,36.76,23.0,6403.0,,3573.0,1260.0,2.3006,69000.0,INLAND +-119.72,36.75,11.0,4832.0,993.0,2190.0,888.0,2.6611,74700.0,INLAND +-119.73,36.76,30.0,1548.0,282.0,886.0,311.0,3.1,71300.0,INLAND +-119.72,36.75,27.0,1691.0,282.0,869.0,337.0,3.9514,86900.0,INLAND +-119.73,36.74,14.0,6202.0,1551.0,5561.0,1435.0,1.6073,64700.0,INLAND +-119.73,36.75,39.0,1745.0,321.0,901.0,303.0,3.1719,67900.0,INLAND +-119.7,36.75,11.0,3626.0,779.0,1819.0,731.0,2.4956,87500.0,INLAND +-119.71,36.74,18.0,8099.0,1670.0,4476.0,1514.0,2.4728,88300.0,INLAND +-119.71,36.76,28.0,2675.0,527.0,1392.0,521.0,2.3108,72000.0,INLAND +-119.7,36.8,34.0,1768.0,303.0,888.0,314.0,3.8088,87700.0,INLAND +-119.71,36.79,34.0,1891.0,323.0,966.0,355.0,3.6681,82000.0,INLAND +-119.71,36.77,11.0,5112.0,1384.0,2487.0,1243.0,2.1461,75900.0,INLAND +-119.73,36.8,15.0,2376.0,538.0,1197.0,510.0,3.1417,74600.0,INLAND +-119.72,36.8,16.0,2396.0,526.0,1338.0,518.0,2.1653,78800.0,INLAND +-119.72,36.8,15.0,3045.0,689.0,1340.0,588.0,3.1953,85700.0,INLAND +-119.71,36.8,17.0,2056.0,366.0,1259.0,367.0,3.9338,84700.0,INLAND +-119.71,36.8,17.0,1415.0,267.0,861.0,293.0,3.25,81400.0,INLAND +-119.71,36.81,9.0,1122.0,290.0,662.0,284.0,2.0536,55000.0,INLAND +-119.7,36.8,31.0,1746.0,321.0,1186.0,360.0,2.6932,66400.0,INLAND +-119.71,36.8,25.0,875.0,156.0,646.0,166.0,3.0,72800.0,INLAND +-119.72,36.8,23.0,2128.0,442.0,1047.0,450.0,2.625,71500.0,INLAND +-119.73,36.8,24.0,1316.0,249.0,781.0,260.0,3.7578,69200.0,INLAND +-119.72,36.81,15.0,2175.0,564.0,1194.0,482.0,2.6767,87500.0,INLAND +-119.73,36.77,24.0,4410.0,939.0,2362.0,862.0,2.9406,73000.0,INLAND +-119.74,36.77,30.0,2427.0,482.0,1375.0,518.0,2.5737,76900.0,INLAND +-119.75,36.77,32.0,1962.0,399.0,1005.0,392.0,2.6726,70400.0,INLAND +-119.75,36.78,35.0,1129.0,220.0,474.0,242.0,2.4405,74300.0,INLAND +-119.75,36.78,33.0,1145.0,197.0,508.0,198.0,2.3333,81300.0,INLAND +-119.74,36.78,27.0,4049.0,947.0,2254.0,882.0,2.2467,70700.0,INLAND +-119.76,36.77,36.0,2507.0,466.0,1227.0,474.0,2.785,72300.0,INLAND +-119.76,36.77,38.0,3804.0,814.0,2142.0,816.0,2.1439,60200.0,INLAND +-119.77,36.77,38.0,3065.0,658.0,1441.0,625.0,2.0564,64700.0,INLAND +-119.77,36.78,36.0,3616.0,779.0,1994.0,786.0,2.5434,67300.0,INLAND +-119.77,36.78,40.0,1411.0,284.0,609.0,296.0,1.9375,67700.0,INLAND +-119.77,36.77,29.0,2554.0,705.0,2669.0,655.0,1.2176,61900.0,INLAND +-119.78,36.77,45.0,1315.0,256.0,666.0,240.0,2.3562,58100.0,INLAND +-119.78,36.78,37.0,2185.0,455.0,1143.0,438.0,1.9784,70700.0,INLAND +-119.79,36.77,30.0,1610.0,410.0,1000.0,397.0,2.0357,60200.0,INLAND +-119.8,36.77,52.0,2964.0,512.0,1114.0,486.0,3.8105,87600.0,INLAND +-119.8,36.78,50.0,1818.0,374.0,737.0,338.0,2.2614,73000.0,INLAND +-119.79,36.78,41.0,2227.0,462.0,1129.0,415.0,2.319,59100.0,INLAND +-119.79,36.77,43.0,2323.0,502.0,1144.0,471.0,2.3967,58700.0,INLAND +-119.81,36.78,52.0,2281.0,371.0,839.0,367.0,3.5972,89900.0,INLAND +-119.81,36.77,49.0,1749.0,314.0,705.0,300.0,3.15,72200.0,INLAND +-119.81,36.77,48.0,1805.0,329.0,741.0,331.0,2.5804,78900.0,INLAND +-119.81,36.77,43.0,2341.0,395.0,890.0,375.0,3.4265,85000.0,INLAND +-119.81,36.78,37.0,1965.0,364.0,796.0,335.0,3.625,83400.0,INLAND +-119.82,36.78,36.0,1370.0,289.0,812.0,282.0,2.6127,69600.0,INLAND +-119.82,36.77,41.0,1441.0,274.0,646.0,296.0,3.0568,71300.0,INLAND +-119.82,36.77,36.0,2252.0,468.0,1117.0,442.0,2.9081,65600.0,INLAND +-119.83,36.77,32.0,2867.0,615.0,1705.0,570.0,2.4286,68100.0,INLAND +-119.83,36.77,23.0,2168.0,503.0,1190.0,425.0,2.625,71600.0,INLAND +-119.83,36.78,30.0,3162.0,640.0,1660.0,639.0,2.8359,80300.0,INLAND +-119.87,36.79,8.0,2875.0,548.0,1718.0,551.0,3.6522,80200.0,INLAND +-119.87,36.79,7.0,1932.0,419.0,1014.0,389.0,3.0938,76700.0,INLAND +-119.89,36.79,5.0,3821.0,705.0,2179.0,694.0,3.7821,80400.0,INLAND +-119.87,36.78,4.0,6102.0,1114.0,3406.0,1115.0,3.4213,84500.0,INLAND +-119.85,36.78,8.0,3096.0,684.0,1454.0,545.0,2.7857,79700.0,INLAND +-119.86,36.78,7.0,2232.0,490.0,1274.0,499.0,2.9853,74700.0,INLAND +-119.85,36.77,9.0,1142.0,314.0,620.0,283.0,2.0446,81300.0,INLAND +-119.85,36.77,27.0,1510.0,344.0,847.0,295.0,2.9315,83200.0,INLAND +-119.85,36.76,10.0,2067.0,450.0,845.0,354.0,1.8214,80100.0,INLAND +-119.85,36.75,24.0,1143.0,245.0,608.0,240.0,2.8194,81100.0,INLAND +-119.87,36.76,34.0,1649.0,323.0,919.0,316.0,2.875,74500.0,INLAND +-119.9,36.79,22.0,1970.0,332.0,1066.0,319.0,3.3125,106100.0,INLAND +-119.89,36.76,17.0,1987.0,335.0,1152.0,313.0,4.1719,126400.0,INLAND +-119.92,36.77,18.0,1422.0,243.0,702.0,230.0,3.6204,119800.0,INLAND +-120.08,36.79,38.0,1446.0,285.0,928.0,255.0,2.9808,89600.0,INLAND +-120.21,36.77,20.0,1745.0,348.0,1093.0,302.0,2.3194,90600.0,INLAND +-120.1,36.66,19.0,2020.0,416.0,1341.0,360.0,1.7,69000.0,INLAND +-119.98,36.74,26.0,1453.0,251.0,896.0,260.0,3.4861,112500.0,INLAND +-120.0,36.7,33.0,1902.0,370.0,1168.0,358.0,2.6852,70800.0,INLAND +-120.04,36.74,14.0,3182.0,730.0,2298.0,721.0,1.6168,71800.0,INLAND +-120.05,36.72,24.0,1961.0,422.0,1559.0,374.0,1.8299,57800.0,INLAND +-120.08,36.72,22.0,1339.0,251.0,820.0,276.0,3.6,83200.0,INLAND +-120.06,36.72,32.0,981.0,237.0,736.0,249.0,1.8,60400.0,INLAND +-120.07,36.74,19.0,2627.0,502.0,1295.0,441.0,3.087,88200.0,INLAND +-119.95,36.8,30.0,1233.0,214.0,620.0,199.0,3.4297,112500.0,INLAND +-119.99,36.8,45.0,1270.0,242.0,598.0,214.0,3.2813,105400.0,INLAND +-120.02,36.8,25.0,1270.0,255.0,1050.0,245.0,2.1618,55300.0,INLAND +-120.04,36.79,48.0,1341.0,239.0,671.0,208.0,2.7917,82800.0,INLAND +-119.91,36.83,29.0,2205.0,366.0,1072.0,345.0,3.8056,165400.0,INLAND +-119.88,36.81,30.0,2288.0,474.0,1435.0,425.0,1.3221,61200.0,INLAND +-119.88,36.85,8.0,2580.0,372.0,1111.0,393.0,7.5,256200.0,INLAND +-119.87,36.83,4.0,4833.0,784.0,2088.0,789.0,5.1781,122500.0,INLAND +-119.85,36.83,15.0,2563.0,335.0,1080.0,356.0,6.7181,160300.0,INLAND +-119.85,36.83,11.0,2497.0,427.0,1101.0,405.0,4.8036,141600.0,INLAND +-119.86,36.82,12.0,1488.0,253.0,675.0,223.0,4.7622,89300.0,INLAND +-119.85,36.82,9.0,3995.0,778.0,1691.0,712.0,3.3239,91300.0,INLAND +-119.85,36.82,15.0,1387.0,236.0,638.0,195.0,5.5842,88900.0,INLAND +-119.85,36.82,16.0,1852.0,274.0,887.0,286.0,5.5405,119300.0,INLAND +-119.88,36.83,2.0,4055.0,735.0,1730.0,654.0,4.2132,96500.0,INLAND +-119.86,36.81,4.0,4530.0,1070.0,1804.0,837.0,3.3942,72100.0,INLAND +-119.87,36.81,6.0,1891.0,341.0,969.0,330.0,4.6726,107800.0,INLAND +-119.85,36.81,15.0,1743.0,310.0,1011.0,325.0,3.755,68000.0,INLAND +-119.85,36.8,14.0,1876.0,324.0,1031.0,311.0,3.6563,88800.0,INLAND +-119.85,36.8,14.0,4177.0,914.0,2300.0,867.0,2.9565,73000.0,INLAND +-119.86,36.8,18.0,2536.0,516.0,1196.0,466.0,2.5595,67900.0,INLAND +-119.84,36.85,8.0,3791.0,487.0,1424.0,475.0,10.5144,345900.0,INLAND +-119.85,36.84,12.0,2272.0,304.0,840.0,305.0,8.9669,213900.0,INLAND +-119.84,36.84,12.0,2396.0,290.0,863.0,258.0,8.7716,229200.0,INLAND +-119.84,36.83,17.0,2273.0,298.0,700.0,263.0,6.8645,195900.0,INLAND +-119.83,36.83,14.0,2351.0,341.0,1128.0,363.0,6.9903,141200.0,INLAND +-119.82,36.83,14.0,2982.0,412.0,1408.0,423.0,5.3241,123000.0,INLAND +-119.84,36.83,17.0,3012.0,408.0,987.0,362.0,7.4201,229700.0,INLAND +-119.82,36.83,16.0,2868.0,376.0,1016.0,379.0,6.1175,144700.0,INLAND +-119.84,36.82,17.0,2807.0,376.0,996.0,353.0,5.5357,167700.0,INLAND +-119.83,36.82,14.0,1087.0,165.0,365.0,176.0,7.2909,155600.0,INLAND +-119.82,36.82,28.0,2268.0,336.0,752.0,330.0,5.2809,151500.0,INLAND +-119.82,36.81,25.0,3305.0,551.0,1149.0,500.0,5.0698,150900.0,INLAND +-119.84,36.81,18.0,2789.0,378.0,937.0,364.0,7.7062,188300.0,INLAND +-119.78,36.86,10.0,2902.0,363.0,1200.0,363.0,8.3608,187300.0,INLAND +-119.77,36.86,7.0,4139.0,544.0,1843.0,562.0,8.2737,193500.0,INLAND +-119.77,36.85,8.0,1519.0,234.0,711.0,248.0,5.9897,123600.0,INLAND +-119.77,36.84,15.0,1924.0,262.0,848.0,277.0,5.3886,125300.0,INLAND +-119.77,36.84,15.0,2058.0,412.0,891.0,378.0,3.2569,124400.0,INLAND +-119.78,36.84,7.0,4907.0,1075.0,2014.0,909.0,3.2147,111900.0,INLAND +-119.78,36.85,12.0,782.0,166.0,292.0,164.0,2.8274,79500.0,INLAND +-119.78,36.86,8.0,3468.0,675.0,1604.0,626.0,4.2071,128300.0,INLAND +-119.79,36.85,11.0,2596.0,619.0,1765.0,539.0,1.9511,54000.0,INLAND +-119.79,36.84,22.0,1529.0,375.0,1543.0,395.0,1.7926,51700.0,INLAND +-119.8,36.86,7.0,6434.0,1201.0,2733.0,1045.0,3.7656,145000.0,INLAND +-119.81,36.85,17.0,2340.0,370.0,1174.0,396.0,4.2304,94400.0,INLAND +-119.82,36.84,7.0,2289.0,342.0,1077.0,354.0,5.4868,158800.0,INLAND +-119.82,36.84,9.0,2340.0,544.0,860.0,520.0,3.3229,119300.0,INLAND +-119.81,36.83,19.0,6789.0,1200.0,2325.0,1109.0,4.049,126000.0,INLAND +-119.81,36.83,10.0,5780.0,922.0,2712.0,883.0,5.6445,135500.0,INLAND +-119.78,36.83,11.0,2754.0,663.0,1328.0,604.0,2.3667,69300.0,INLAND +-119.79,36.82,25.0,2330.0,462.0,1215.0,467.0,3.2143,93000.0,INLAND +-119.8,36.83,17.0,1560.0,261.0,709.0,258.0,4.3315,95800.0,INLAND +-119.79,36.83,15.0,3356.0,694.0,1232.0,627.0,2.2215,72200.0,INLAND +-119.79,36.82,23.0,4358.0,819.0,1852.0,802.0,3.4167,105200.0,INLAND +-119.78,36.82,22.0,4241.0,1147.0,1929.0,971.0,1.7708,53500.0,INLAND +-119.8,36.82,24.0,5377.0,1005.0,2010.0,982.0,3.4542,121200.0,INLAND +-119.81,36.81,33.0,3972.0,594.0,1324.0,561.0,5.4513,143300.0,INLAND +-119.8,36.8,43.0,1951.0,288.0,725.0,308.0,6.3359,169300.0,INLAND +-119.81,36.8,38.0,2252.0,325.0,777.0,314.0,6.1575,160100.0,INLAND +-119.83,36.8,24.0,3756.0,681.0,1586.0,739.0,3.8571,90100.0,INLAND +-119.82,36.8,33.0,1670.0,256.0,528.0,250.0,2.9471,99500.0,INLAND +-119.81,36.8,29.0,2806.0,552.0,1242.0,540.0,3.5958,88800.0,INLAND +-119.83,36.8,16.0,6101.0,1200.0,3407.0,1134.0,3.125,80800.0,INLAND +-119.84,36.8,16.0,2849.0,506.0,1508.0,478.0,3.4074,72700.0,INLAND +-119.84,36.8,19.0,3244.0,776.0,1463.0,710.0,2.0469,66900.0,INLAND +-119.83,36.79,35.0,1872.0,363.0,1054.0,369.0,3.3272,65600.0,INLAND +-119.83,36.78,35.0,1789.0,357.0,933.0,357.0,2.5223,66200.0,INLAND +-119.84,36.78,24.0,3242.0,795.0,2764.0,773.0,1.3385,58800.0,INLAND +-119.84,36.79,21.0,3235.0,648.0,1820.0,614.0,3.3447,71400.0,INLAND +-119.83,36.79,24.0,3505.0,819.0,2098.0,774.0,1.9575,67000.0,INLAND +-119.81,36.78,35.0,1012.0,245.0,633.0,240.0,2.0324,55500.0,INLAND +-119.81,36.78,36.0,1650.0,313.0,660.0,298.0,3.0,79700.0,INLAND +-119.82,36.78,36.0,1582.0,313.0,761.0,318.0,2.6055,69200.0,INLAND +-119.82,36.79,35.0,1474.0,291.0,709.0,294.0,2.6522,65900.0,INLAND +-119.82,36.79,18.0,5822.0,1439.0,3415.0,1224.0,1.6854,64700.0,INLAND +-119.81,36.79,35.0,2314.0,443.0,954.0,457.0,2.9506,73800.0,INLAND +-119.79,36.79,33.0,3433.0,785.0,1806.0,783.0,1.9386,67500.0,INLAND +-119.79,36.78,38.0,1912.0,456.0,1131.0,408.0,2.03,58800.0,INLAND +-119.8,36.78,43.0,2382.0,431.0,874.0,380.0,3.5542,96500.0,INLAND +-119.81,36.79,39.0,2471.0,460.0,1118.0,431.0,2.4167,71900.0,INLAND +-119.8,36.79,45.0,1337.0,187.0,471.0,187.0,5.187,153800.0,INLAND +-119.79,36.81,35.0,1877.0,328.0,1155.0,353.0,3.069,69600.0,INLAND +-119.78,36.8,34.0,2200.0,493.0,1243.0,431.0,1.8514,66500.0,INLAND +-119.79,36.8,27.0,2462.0,484.0,852.0,449.0,3.32,124700.0,INLAND +-119.79,36.81,33.0,1461.0,261.0,494.0,254.0,4.25,132200.0,INLAND +-119.77,36.79,34.0,2679.0,460.0,1141.0,470.0,3.2642,89600.0,INLAND +-119.78,36.78,31.0,2164.0,456.0,959.0,463.0,2.3293,73400.0,INLAND +-119.79,36.79,26.0,1700.0,423.0,909.0,386.0,2.256,64500.0,INLAND +-119.79,36.79,19.0,1524.0,448.0,960.0,386.0,1.5122,47500.0,INLAND +-119.78,36.79,33.0,2260.0,440.0,966.0,413.0,2.9301,68300.0,INLAND +-119.76,36.79,26.0,3654.0,837.0,1976.0,830.0,2.1544,72800.0,INLAND +-119.76,36.78,30.0,6117.0,1330.0,2768.0,1224.0,2.1383,78800.0,INLAND +-119.77,36.79,27.0,2258.0,427.0,1076.0,423.0,2.9937,81100.0,INLAND +-119.76,36.79,32.0,2463.0,468.0,1261.0,486.0,3.3281,75100.0,INLAND +-119.74,36.79,28.0,2857.0,619.0,1614.0,592.0,2.1573,71400.0,INLAND +-119.75,36.78,28.0,3257.0,752.0,1981.0,712.0,2.293,71700.0,INLAND +-119.76,36.8,29.0,3494.0,662.0,1781.0,616.0,2.5893,70900.0,INLAND +-119.77,36.8,32.0,3461.0,665.0,1507.0,649.0,2.9244,84600.0,INLAND +-119.78,36.8,34.0,3426.0,623.0,1938.0,647.0,2.8994,66000.0,INLAND +-119.76,36.8,20.0,6257.0,1346.0,2795.0,1267.0,2.2094,83700.0,INLAND +-119.77,36.8,24.0,3748.0,770.0,1827.0,719.0,2.7222,83100.0,INLAND +-119.74,36.8,18.0,10862.0,2401.0,5466.0,2209.0,2.4678,74300.0,INLAND +-119.75,36.8,25.0,2718.0,504.0,1257.0,465.0,2.3333,90600.0,INLAND +-119.75,36.8,30.0,3308.0,662.0,1894.0,648.0,2.197,74500.0,INLAND +-119.76,36.81,19.0,4643.0,1429.0,4638.0,1335.0,1.2716,69400.0,INLAND +-119.77,36.81,25.0,1565.0,271.0,661.0,275.0,3.4279,84700.0,INLAND +-119.76,36.82,17.0,6932.0,1486.0,3056.0,1453.0,2.3375,99300.0,INLAND +-119.77,36.81,28.0,1713.0,302.0,663.0,282.0,3.567,85500.0,INLAND +-119.78,36.82,25.0,5016.0,,2133.0,928.0,3.625,89500.0,INLAND +-119.78,36.83,18.0,4164.0,741.0,1817.0,681.0,4.2153,95200.0,INLAND +-119.76,36.83,22.0,2803.0,438.0,1234.0,457.0,4.5179,99600.0,INLAND +-119.76,36.83,20.0,3214.0,446.0,1360.0,463.0,5.2595,110900.0,INLAND +-119.77,36.83,19.0,3237.0,507.0,1378.0,510.0,4.7804,101100.0,INLAND +-119.77,36.83,16.0,2360.0,355.0,1034.0,359.0,5.0635,108500.0,INLAND +-119.76,36.83,17.0,3690.0,628.0,1888.0,601.0,4.0196,84200.0,INLAND +-119.75,36.83,15.0,2793.0,436.0,1411.0,441.0,4.9292,109400.0,INLAND +-119.74,36.83,14.0,4675.0,829.0,2235.0,787.0,4.1098,108200.0,INLAND +-119.77,36.91,3.0,7520.0,1143.0,2878.0,1077.0,5.3272,174200.0,INLAND +-119.75,36.87,3.0,13802.0,2244.0,5226.0,1972.0,5.0941,143700.0,INLAND +-119.74,36.85,3.0,10425.0,2121.0,4432.0,1778.0,3.9032,140800.0,INLAND +-119.7,36.94,15.0,1449.0,277.0,649.0,265.0,2.4861,86300.0,INLAND +-119.71,36.88,17.0,2236.0,315.0,992.0,312.0,6.9405,165200.0,INLAND +-119.69,36.86,20.0,1676.0,263.0,786.0,240.0,4.0,164600.0,INLAND +-119.69,36.85,20.0,2655.0,432.0,1081.0,379.0,4.5398,143100.0,INLAND +-119.67,36.89,15.0,2373.0,364.0,1280.0,386.0,5.308,167500.0,INLAND +-119.7,36.83,23.0,3532.0,756.0,1885.0,758.0,2.5904,71400.0,INLAND +-119.7,36.82,25.0,2379.0,540.0,1482.0,484.0,2.3173,68200.0,INLAND +-119.7,36.81,32.0,2623.0,528.0,1570.0,492.0,2.7159,68000.0,INLAND +-119.71,36.83,5.0,1087.0,338.0,623.0,362.0,1.8061,113400.0,INLAND +-119.71,36.83,15.0,2727.0,500.0,1228.0,436.0,3.5078,109000.0,INLAND +-119.73,36.83,8.0,3602.0,,1959.0,580.0,5.3478,138800.0,INLAND +-119.73,36.83,14.0,3348.0,491.0,1584.0,493.0,5.0828,111400.0,INLAND +-119.71,36.82,12.0,2144.0,568.0,1320.0,566.0,2.3381,112500.0,INLAND +-119.71,36.81,19.0,2282.0,550.0,1034.0,500.0,1.6618,69700.0,INLAND +-119.71,36.81,19.0,1648.0,368.0,557.0,354.0,1.7969,72800.0,INLAND +-119.72,36.81,28.0,1651.0,305.0,780.0,309.0,2.9453,72200.0,INLAND +-119.73,36.81,19.0,1699.0,356.0,994.0,368.0,2.7778,79700.0,INLAND +-119.72,36.82,16.0,2627.0,613.0,1054.0,623.0,1.9483,112500.0,INLAND +-119.72,36.82,15.0,946.0,239.0,550.0,246.0,2.2639,52500.0,INLAND +-119.69,36.83,7.0,2075.0,353.0,1040.0,362.0,3.9943,100200.0,INLAND +-119.69,36.83,8.0,943.0,189.0,475.0,155.0,4.9327,89500.0,INLAND +-119.69,36.83,32.0,1098.0,,726.0,224.0,1.4913,54600.0,INLAND +-119.69,36.83,28.0,1868.0,350.0,898.0,329.0,3.1814,78900.0,INLAND +-119.67,36.83,3.0,2029.0,336.0,1003.0,340.0,4.4356,111300.0,INLAND +-119.67,36.83,4.0,2145.0,334.0,1024.0,308.0,5.0864,113700.0,INLAND +-119.68,36.83,11.0,2455.0,344.0,1110.0,339.0,6.1133,120000.0,INLAND +-119.67,36.82,2.0,2579.0,376.0,1133.0,342.0,4.5577,123300.0,INLAND +-119.67,36.81,4.0,1262.0,216.0,622.0,199.0,4.9432,114400.0,INLAND +-119.68,36.81,13.0,2589.0,413.0,1356.0,435.0,5.0253,106200.0,INLAND +-119.69,36.82,17.0,1897.0,433.0,1207.0,384.0,1.8021,55900.0,INLAND +-119.69,36.82,15.0,3303.0,512.0,1687.0,505.0,4.81,93600.0,INLAND +-119.68,36.81,16.0,2668.0,454.0,1536.0,457.0,3.9792,88900.0,INLAND +-119.69,36.81,13.0,1524.0,366.0,994.0,370.0,2.5446,93800.0,INLAND +-119.69,36.81,15.0,2892.0,496.0,1634.0,501.0,4.4934,88000.0,INLAND +-119.68,36.8,7.0,2855.0,518.0,1748.0,498.0,4.2066,88400.0,INLAND +-119.69,36.8,31.0,2576.0,458.0,1306.0,418.0,3.2813,68700.0,INLAND +-119.67,36.8,9.0,3712.0,508.0,1632.0,474.0,6.011,163100.0,INLAND +-119.69,36.79,13.0,1736.0,313.0,993.0,314.0,3.7697,83600.0,INLAND +-119.68,36.79,16.0,1551.0,,1010.0,292.0,3.5417,71300.0,INLAND +-119.69,36.79,15.0,2524.0,451.0,1207.0,424.0,2.7404,76300.0,INLAND +-119.69,36.77,22.0,2456.0,496.0,1720.0,417.0,2.6875,60600.0,INLAND +-119.69,36.79,5.0,2613.0,476.0,1490.0,481.0,4.0993,83000.0,INLAND +-119.68,36.77,21.0,1260.0,182.0,583.0,205.0,6.0132,150800.0,INLAND +-119.64,36.85,15.0,2397.0,353.0,1258.0,347.0,4.9904,157300.0,INLAND +-119.64,36.82,14.0,4872.0,656.0,2085.0,617.0,5.6739,173800.0,INLAND +-119.63,36.79,19.0,1317.0,189.0,517.0,187.0,4.526,148700.0,INLAND +-119.63,36.76,22.0,4126.0,614.0,1795.0,613.0,4.925,154700.0,INLAND +-119.63,36.7,42.0,1338.0,215.0,617.0,222.0,3.0833,133300.0,INLAND +-119.53,36.78,20.0,2822.0,479.0,1372.0,455.0,4.5625,136900.0,INLAND +-119.58,36.83,13.0,6135.0,863.0,2473.0,774.0,5.4895,156700.0,INLAND +-119.58,36.77,19.0,3225.0,548.0,1760.0,542.0,4.0227,126500.0,INLAND +-119.59,36.72,18.0,1284.0,193.0,621.0,190.0,4.5375,130600.0,INLAND +-119.5,36.74,20.0,1089.0,208.0,531.0,212.0,4.5938,106900.0,INLAND +-119.57,36.72,11.0,2510.0,460.0,1248.0,445.0,3.6161,99500.0,INLAND +-119.56,36.71,29.0,1963.0,392.0,1208.0,398.0,2.5741,73000.0,INLAND +-119.56,36.71,37.0,1609.0,374.0,1173.0,344.0,2.181,59900.0,INLAND +-119.57,36.71,10.0,1657.0,359.0,958.0,380.0,2.6458,84800.0,INLAND +-119.57,36.7,34.0,1759.0,354.0,899.0,337.0,2.6823,72900.0,INLAND +-119.56,36.7,40.0,1195.0,326.0,1135.0,315.0,2.1182,58900.0,INLAND +-119.55,36.7,31.0,1671.0,372.0,1371.0,347.0,2.3687,63900.0,INLAND +-119.57,36.7,30.0,2370.0,412.0,1248.0,410.0,3.1442,72300.0,INLAND +-119.57,36.7,7.0,1761.0,309.0,974.0,308.0,3.7261,83900.0,INLAND +-119.58,36.69,42.0,1032.0,215.0,812.0,225.0,1.9766,58100.0,INLAND +-119.55,36.69,21.0,1551.0,423.0,1519.0,406.0,1.7132,55900.0,INLAND +-119.54,36.7,20.0,1815.0,375.0,1665.0,357.0,2.2448,58900.0,INLAND +-119.55,36.71,32.0,1963.0,508.0,2052.0,518.0,1.9076,55800.0,INLAND +-119.55,36.72,6.0,1186.0,234.0,1135.0,218.0,2.1515,63900.0,INLAND +-119.52,36.71,21.0,1834.0,321.0,1120.0,314.0,2.59,69300.0,INLAND +-119.47,36.69,19.0,3351.0,589.0,1578.0,542.0,3.2917,160100.0,INLAND +-119.41,36.68,18.0,1802.0,332.0,945.0,292.0,3.4044,115300.0,INLAND +-119.43,36.63,25.0,1784.0,312.0,904.0,303.0,3.625,107600.0,INLAND +-119.39,36.64,38.0,949.0,190.0,578.0,187.0,2.3618,80000.0,INLAND +-119.4,36.59,37.0,1486.0,296.0,977.0,290.0,3.5074,93800.0,INLAND +-119.49,37.1,24.0,2532.0,555.0,1564.0,507.0,2.3359,92400.0,INLAND +-119.61,36.94,14.0,863.0,151.0,315.0,135.0,4.2679,151800.0,INLAND +-119.57,37.02,16.0,4199.0,794.0,2140.0,722.0,3.332,111800.0,INLAND +-119.48,37.0,16.0,2904.0,551.0,1467.0,509.0,3.1736,111800.0,INLAND +-119.46,36.91,12.0,2980.0,495.0,1184.0,429.0,3.9141,123900.0,INLAND +-119.33,36.89,15.0,1879.0,411.0,755.0,294.0,2.0,83300.0,INLAND +-119.21,37.25,44.0,3042.0,697.0,335.0,115.0,4.1838,85600.0,INLAND +-118.94,37.13,12.0,2255.0,472.0,1006.0,334.0,4.1563,94000.0,INLAND +-119.4,37.09,22.0,2211.0,477.0,773.0,288.0,3.3269,102700.0,INLAND +-119.34,37.12,23.0,1881.0,380.0,64.0,37.0,3.875,125000.0,INLAND +-119.28,37.11,34.0,1901.0,394.0,171.0,73.0,3.0729,144600.0,INLAND +-119.32,37.06,15.0,3111.0,651.0,276.0,107.0,5.1314,179200.0,INLAND +-118.91,36.79,19.0,1616.0,324.0,187.0,80.0,3.7857,78600.0,INLAND +-119.24,36.8,17.0,2052.0,405.0,975.0,340.0,2.6902,94400.0,INLAND +-119.25,36.71,13.0,2813.0,579.0,1385.0,512.0,2.2202,100000.0,INLAND +-119.12,36.69,13.0,3963.0,812.0,1905.0,671.0,2.2278,90500.0,INLAND +-119.34,36.62,26.0,1922.0,339.0,1148.0,332.0,2.6058,92200.0,INLAND +-119.31,36.63,26.0,1874.0,416.0,1834.0,432.0,1.6486,55200.0,INLAND +-119.31,36.62,33.0,1485.0,374.0,1544.0,329.0,1.7292,52000.0,INLAND +-119.32,36.62,15.0,1070.0,256.0,1070.0,243.0,1.5642,51500.0,INLAND +-119.31,36.62,25.0,831.0,230.0,947.0,244.0,1.4481,51700.0,INLAND +-119.43,36.61,19.0,1484.0,296.0,1296.0,298.0,2.4219,65800.0,INLAND +-119.44,36.6,5.0,2353.0,608.0,2505.0,573.0,2.2863,69200.0,INLAND +-119.44,36.6,34.0,864.0,184.0,579.0,171.0,2.0417,72500.0,INLAND +-119.45,36.6,42.0,510.0,88.0,247.0,99.0,2.5,73000.0,INLAND +-119.46,36.61,13.0,1348.0,258.0,719.0,246.0,3.625,108300.0,INLAND +-119.45,36.61,24.0,1302.0,,693.0,243.0,3.7917,90500.0,INLAND +-119.44,36.61,17.0,1531.0,280.0,775.0,246.0,3.9073,91600.0,INLAND +-119.43,36.59,15.0,1371.0,306.0,1266.0,309.0,1.767,63300.0,INLAND +-119.44,36.59,32.0,1153.0,236.0,761.0,241.0,2.825,67600.0,INLAND +-119.45,36.6,36.0,2294.0,489.0,1430.0,454.0,1.8975,60900.0,INLAND +-119.44,36.59,28.0,1343.0,330.0,1331.0,305.0,1.516,56700.0,INLAND +-119.46,36.6,18.0,1404.0,226.0,754.0,229.0,3.9844,118100.0,INLAND +-119.45,36.59,41.0,1749.0,342.0,1171.0,314.0,1.6875,66100.0,INLAND +-119.44,36.58,37.0,1054.0,,879.0,257.0,2.5234,63500.0,INLAND +-119.45,36.58,18.0,1425.0,280.0,753.0,266.0,3.7813,87300.0,INLAND +-119.45,36.59,28.0,1274.0,215.0,572.0,202.0,3.825,84200.0,INLAND +-119.55,36.6,18.0,2379.0,448.0,1638.0,436.0,2.309,57100.0,INLAND +-119.54,36.61,20.0,1490.0,318.0,1474.0,326.0,1.4937,54700.0,INLAND +-119.55,36.61,14.0,3004.0,793.0,3535.0,735.0,1.586,56900.0,INLAND +-119.5,36.62,34.0,1440.0,267.0,1018.0,265.0,2.2206,63400.0,INLAND +-119.49,36.58,21.0,2106.0,410.0,867.0,380.0,1.9913,95300.0,INLAND +-119.52,36.61,33.0,1225.0,275.0,1065.0,248.0,1.8958,55100.0,INLAND +-119.53,36.61,33.0,587.0,170.0,730.0,162.0,1.5625,55800.0,INLAND +-119.6,36.66,27.0,1388.0,296.0,1056.0,284.0,1.6094,55200.0,INLAND +-119.59,36.64,27.0,823.0,171.0,798.0,200.0,3.0521,113800.0,INLAND +-119.53,36.65,43.0,1676.0,320.0,1056.0,276.0,2.5562,93200.0,INLAND +-119.63,36.6,33.0,1589.0,294.0,1102.0,307.0,1.9676,62400.0,INLAND +-119.62,36.58,13.0,1788.0,405.0,1652.0,411.0,2.6858,62400.0,INLAND +-119.59,36.57,19.0,1733.0,303.0,911.0,281.0,3.5987,131700.0,INLAND +-119.6,36.58,28.0,1452.0,300.0,919.0,308.0,2.8287,73100.0,INLAND +-119.61,36.58,29.0,1312.0,280.0,788.0,271.0,2.6974,73000.0,INLAND +-119.62,36.59,17.0,2287.0,390.0,1330.0,393.0,4.0197,88000.0,INLAND +-119.61,36.59,10.0,2842.0,620.0,1443.0,576.0,2.2727,92700.0,INLAND +-119.6,36.57,42.0,2311.0,439.0,1347.0,436.0,2.5556,69700.0,INLAND +-119.6,36.57,33.0,1923.0,403.0,1205.0,389.0,1.8333,68300.0,INLAND +-119.61,36.57,42.0,2242.0,521.0,1359.0,483.0,1.5833,65100.0,INLAND +-119.63,36.58,22.0,1794.0,435.0,1127.0,359.0,1.2647,55300.0,INLAND +-119.6,36.56,36.0,738.0,168.0,737.0,186.0,1.4415,54400.0,INLAND +-119.64,36.56,34.0,576.0,117.0,363.0,97.0,2.0658,92500.0,INLAND +-119.61,36.56,34.0,1911.0,497.0,1886.0,481.0,1.625,53000.0,INLAND +-119.62,36.56,30.0,1722.0,372.0,1467.0,403.0,1.8878,51600.0,INLAND +-119.53,36.55,34.0,2065.0,343.0,1041.0,313.0,3.2917,111500.0,INLAND +-119.54,36.52,16.0,2703.0,415.0,1106.0,372.0,4.2045,120900.0,INLAND +-119.55,36.51,46.0,1889.0,390.0,971.0,403.0,2.2132,76600.0,INLAND +-119.56,36.51,37.0,1018.0,213.0,663.0,204.0,1.6635,67000.0,INLAND +-119.56,36.51,9.0,3860.0,809.0,2157.0,770.0,2.5033,70100.0,INLAND +-119.55,36.52,31.0,1986.0,417.0,1042.0,422.0,3.0294,70200.0,INLAND +-119.56,36.53,19.0,2746.0,495.0,1670.0,518.0,3.2019,95700.0,INLAND +-119.73,36.56,32.0,1513.0,272.0,1038.0,272.0,3.0469,82700.0,INLAND +-119.67,36.57,32.0,1604.0,292.0,868.0,276.0,2.1908,110000.0,INLAND +-119.65,36.51,30.0,1671.0,319.0,966.0,282.0,3.1333,100000.0,INLAND +-119.59,36.52,35.0,990.0,192.0,674.0,178.0,3.3214,101600.0,INLAND +-119.73,36.52,20.0,1741.0,331.0,1466.0,289.0,2.5921,94200.0,INLAND +-119.77,36.44,26.0,1727.0,289.0,802.0,259.0,3.2083,75000.0,INLAND +-119.69,36.46,29.0,1702.0,301.0,914.0,280.0,2.8125,79200.0,INLAND +-119.69,36.43,29.0,1799.0,356.0,1278.0,387.0,1.7813,57900.0,INLAND +-119.87,36.54,34.0,1370.0,287.0,818.0,269.0,2.4044,72500.0,INLAND +-119.79,36.55,32.0,1393.0,276.0,999.0,245.0,2.0216,76800.0,INLAND +-119.81,36.51,31.0,1241.0,254.0,767.0,226.0,2.7321,83600.0,INLAND +-119.84,36.54,19.0,1310.0,241.0,702.0,217.0,2.4375,78200.0,INLAND +-119.83,36.54,31.0,1732.0,332.0,979.0,294.0,2.5208,60000.0,INLAND +-119.89,36.64,34.0,1422.0,237.0,716.0,222.0,2.975,90000.0,INLAND +-119.97,36.57,17.0,1497.0,308.0,1425.0,247.0,2.0313,69400.0,INLAND +-119.9,36.58,20.0,1935.0,363.0,1319.0,359.0,2.4814,74600.0,INLAND +-119.81,36.6,24.0,2246.0,462.0,1291.0,394.0,2.4006,76400.0,INLAND +-119.86,36.45,19.0,2439.0,462.0,1416.0,469.0,2.4474,75600.0,INLAND +-119.86,36.43,34.0,1175.0,251.0,683.0,261.0,1.7176,58400.0,INLAND +-119.85,36.43,23.0,1824.0,354.0,1146.0,362.0,2.8913,60900.0,INLAND +-119.97,36.44,18.0,1128.0,237.0,772.0,220.0,2.1771,39200.0,INLAND +-120.08,36.34,18.0,1524.0,414.0,2030.0,356.0,2.1153,112500.0,INLAND +-120.1,36.16,17.0,598.0,160.0,715.0,146.0,2.3295,55000.0,INLAND +-120.1,36.21,12.0,1462.0,356.0,1708.0,367.0,1.5086,64700.0,INLAND +-120.09,36.19,12.0,1923.0,559.0,2809.0,535.0,1.4191,55100.0,INLAND +-120.27,36.29,11.0,1337.0,412.0,1376.0,318.0,2.4398,87500.0,INLAND +-120.43,36.18,29.0,579.0,116.0,218.0,99.0,2.1458,104200.0,INLAND +-120.37,36.16,36.0,613.0,124.0,310.0,124.0,3.0658,65000.0,INLAND +-120.36,36.14,18.0,1206.0,274.0,622.0,217.0,1.8264,62000.0,INLAND +-120.38,36.15,17.0,2279.0,448.0,1200.0,420.0,2.7461,70000.0,INLAND +-120.37,36.13,10.0,2522.0,533.0,1335.0,493.0,3.2639,86400.0,INLAND +-120.37,36.15,34.0,2084.0,339.0,868.0,347.0,4.381,86300.0,INLAND +-120.35,36.16,18.0,1519.0,296.0,846.0,272.0,2.7792,85300.0,INLAND +-120.35,36.14,9.0,2671.0,647.0,1484.0,541.0,1.7075,60400.0,INLAND +-120.36,36.13,29.0,1938.0,434.0,1306.0,415.0,3.0134,55500.0,INLAND +-120.31,36.65,24.0,943.0,209.0,514.0,156.0,2.25,76600.0,INLAND +-120.25,36.65,31.0,1177.0,221.0,744.0,223.0,2.4937,66000.0,INLAND +-120.18,36.59,25.0,948.0,198.0,613.0,171.0,2.3026,90600.0,INLAND +-120.19,36.61,29.0,1479.0,338.0,1408.0,322.0,2.293,57200.0,INLAND +-120.19,36.6,25.0,875.0,214.0,931.0,214.0,1.5536,58300.0,INLAND +-120.22,36.49,14.0,1508.0,347.0,1679.0,345.0,2.4786,56000.0,INLAND +-120.41,36.77,24.0,1335.0,312.0,1180.0,267.0,1.947,68900.0,INLAND +-120.67,36.72,18.0,819.0,198.0,996.0,198.0,2.5,112500.0,INLAND +-120.51,36.55,20.0,1193.0,263.0,1274.0,241.0,1.9417,38800.0,INLAND +-120.39,36.78,11.0,1947.0,488.0,2104.0,486.0,1.7184,55200.0,INLAND +-120.38,36.75,25.0,1689.0,495.0,1745.0,457.0,1.9056,60000.0,INLAND +-120.38,36.76,25.0,991.0,272.0,941.0,262.0,1.8125,58000.0,INLAND +-120.38,36.76,12.0,932.0,244.0,1043.0,243.0,1.4038,54300.0,INLAND +-120.46,36.87,20.0,1287.0,310.0,954.0,269.0,1.3386,63000.0,INLAND +-120.45,36.86,34.0,673.0,173.0,539.0,182.0,2.3523,66000.0,INLAND +-120.44,36.84,29.0,1563.0,293.0,883.0,288.0,2.8182,90500.0,INLAND +-120.45,36.85,20.0,1519.0,376.0,1681.0,370.0,2.1759,58100.0,INLAND +-120.51,36.86,21.0,1779.0,399.0,1446.0,371.0,2.4414,71900.0,INLAND +-120.55,36.97,42.0,1766.0,344.0,1084.0,323.0,2.3295,74400.0,INLAND +-120.69,36.84,18.0,902.0,195.0,771.0,174.0,2.2083,55000.0,INLAND +-119.55,36.51,46.0,55.0,11.0,26.0,5.0,4.125,67500.0,INLAND +-119.54,36.51,36.0,49.0,7.0,28.0,2.0,4.625,162500.0,INLAND +-122.2,39.75,18.0,2603.0,576.0,1616.0,588.0,2.0192,63700.0,INLAND +-122.18,39.75,30.0,4157.0,834.0,1885.0,774.0,1.6948,67500.0,INLAND +-122.16,39.74,20.0,707.0,126.0,337.0,125.0,3.0469,85000.0,INLAND +-122.19,39.74,39.0,4179.0,814.0,2111.0,809.0,2.3507,65600.0,INLAND +-122.25,39.79,16.0,2127.0,412.0,1104.0,369.0,3.0469,72200.0,INLAND +-122.16,39.78,32.0,1288.0,221.0,562.0,203.0,2.325,69600.0,INLAND +-122.13,39.74,20.0,1401.0,280.0,668.0,250.0,2.2569,94300.0,INLAND +-122.18,39.7,23.0,1658.0,307.0,836.0,297.0,3.35,85400.0,INLAND +-122.23,39.75,16.0,2026.0,396.0,1031.0,382.0,1.9375,73100.0,INLAND +-122.74,39.71,16.0,255.0,73.0,85.0,38.0,1.6607,14999.0,INLAND +-122.38,39.68,21.0,1155.0,210.0,510.0,175.0,2.3851,67500.0,INLAND +-122.14,39.65,33.0,419.0,77.0,190.0,67.0,3.6429,87500.0,INLAND +-122.18,39.55,28.0,1471.0,259.0,673.0,246.0,3.25,81600.0,INLAND +-122.53,39.5,25.0,1231.0,240.0,658.0,211.0,2.4861,71900.0,INLAND +-122.19,39.53,34.0,2679.0,533.0,1287.0,505.0,2.165,58700.0,INLAND +-122.2,39.53,22.0,3265.0,658.0,1647.0,594.0,2.3566,71000.0,INLAND +-122.23,39.53,8.0,1268.0,336.0,1237.0,326.0,1.3708,125000.0,INLAND +-122.22,39.51,17.0,1201.0,268.0,555.0,277.0,2.1,66900.0,INLAND +-122.2,39.52,39.0,2551.0,482.0,1181.0,437.0,2.0625,63400.0,INLAND +-122.2,39.51,37.0,2358.0,413.0,1060.0,424.0,2.8333,69700.0,INLAND +-122.19,39.5,23.0,462.0,97.0,261.0,90.0,2.1705,53000.0,INLAND +-122.04,39.72,23.0,2502.0,481.0,1443.0,455.0,2.5625,70000.0,INLAND +-122.05,39.6,34.0,2051.0,342.0,958.0,322.0,2.8466,95300.0,INLAND +-122.1,39.47,43.0,1320.0,215.0,512.0,197.0,2.4917,77100.0,INLAND +-121.94,39.45,39.0,844.0,161.0,535.0,165.0,1.832,70500.0,INLAND +-122.01,39.74,20.0,2332.0,518.0,1856.0,495.0,2.1746,58700.0,INLAND +-124.17,40.8,52.0,661.0,316.0,392.0,244.0,0.957,60000.0,NEAR OCEAN +-124.16,40.8,52.0,2416.0,618.0,1150.0,571.0,1.7308,80500.0,NEAR OCEAN +-124.16,40.79,52.0,1264.0,277.0,591.0,284.0,1.7778,76900.0,NEAR OCEAN +-124.17,40.8,52.0,1606.0,419.0,891.0,367.0,1.585,75500.0,NEAR OCEAN +-124.17,40.8,52.0,1557.0,344.0,758.0,319.0,1.8529,62500.0,NEAR OCEAN +-124.16,40.79,52.0,2148.0,421.0,975.0,430.0,2.2566,92700.0,NEAR OCEAN +-124.16,40.78,50.0,2285.0,403.0,837.0,353.0,2.5417,85400.0,NEAR OCEAN +-124.17,40.78,39.0,1606.0,330.0,731.0,327.0,1.6369,68300.0,NEAR OCEAN +-124.19,40.78,37.0,1371.0,319.0,640.0,260.0,1.8242,70000.0,NEAR OCEAN +-124.18,40.79,39.0,1836.0,352.0,883.0,337.0,1.745,70500.0,NEAR OCEAN +-124.18,40.79,40.0,1398.0,311.0,788.0,279.0,1.4668,64600.0,NEAR OCEAN +-124.17,40.79,43.0,2285.0,479.0,1169.0,482.0,1.9688,70500.0,NEAR OCEAN +-124.16,40.78,43.0,2241.0,446.0,932.0,395.0,2.9038,82000.0,NEAR OCEAN +-124.16,40.77,35.0,2141.0,438.0,1053.0,434.0,2.8529,85600.0,NEAR OCEAN +-124.17,40.77,30.0,1895.0,366.0,990.0,359.0,2.2227,81300.0,NEAR OCEAN +-124.18,40.78,37.0,1453.0,293.0,867.0,310.0,2.5536,70200.0,NEAR OCEAN +-124.18,40.78,33.0,1076.0,222.0,656.0,236.0,2.5096,72200.0,NEAR OCEAN +-124.18,40.78,34.0,1592.0,364.0,950.0,317.0,2.1607,67000.0,NEAR OCEAN +-124.17,40.75,13.0,2171.0,339.0,951.0,353.0,4.8516,116100.0,NEAR OCEAN +-124.17,40.76,26.0,1776.0,361.0,992.0,380.0,2.8056,82800.0,NEAR OCEAN +-124.19,40.77,30.0,2975.0,634.0,1367.0,583.0,2.442,69000.0,NEAR OCEAN +-124.15,40.81,50.0,340.0,74.0,235.0,83.0,1.75,67500.0,NEAR OCEAN +-124.14,40.8,32.0,1373.0,312.0,872.0,306.0,2.5,72600.0,NEAR OCEAN +-124.15,40.8,47.0,1486.0,335.0,765.0,329.0,1.755,74100.0,NEAR OCEAN +-124.16,40.8,52.0,2167.0,480.0,908.0,451.0,1.6111,74700.0,NEAR OCEAN +-124.16,40.8,52.0,1703.0,500.0,952.0,435.0,1.1386,74100.0,NEAR OCEAN +-124.14,40.79,38.0,1552.0,290.0,873.0,291.0,2.4896,81000.0,NEAR OCEAN +-124.15,40.78,41.0,2127.0,358.0,911.0,349.0,3.1711,104200.0,NEAR OCEAN +-124.16,40.78,46.0,1975.0,346.0,791.0,349.0,3.8,81800.0,NEAR OCEAN +-124.16,40.79,46.0,3042.0,597.0,1206.0,541.0,2.1135,90600.0,NEAR OCEAN +-124.15,40.79,37.0,2692.0,488.0,1263.0,486.0,3.0216,86400.0,NEAR OCEAN +-124.14,40.78,35.0,2426.0,423.0,982.0,432.0,3.4219,92800.0,NEAR OCEAN +-124.14,40.77,27.0,3046.0,605.0,1407.0,571.0,2.9143,99600.0,NEAR OCEAN +-124.15,40.76,24.0,2858.0,511.0,1388.0,512.0,3.375,100600.0,NEAR OCEAN +-124.15,40.78,36.0,2112.0,374.0,829.0,368.0,3.3984,90000.0,NEAR OCEAN +-124.11,40.81,23.0,959.0,212.0,425.0,175.0,2.5536,96100.0,NEAR OCEAN +-124.13,40.78,34.0,2142.0,420.0,1056.0,382.0,2.1101,86900.0,NEAR OCEAN +-124.13,40.8,31.0,2152.0,462.0,1259.0,420.0,2.2478,81100.0,NEAR OCEAN +-124.13,40.79,29.0,2474.0,453.0,1130.0,427.0,2.8833,83000.0,NEAR OCEAN +-124.13,40.79,32.0,2017.0,359.0,855.0,346.0,3.5833,92800.0,NEAR OCEAN +-124.06,40.86,34.0,4183.0,,1891.0,669.0,3.2216,98100.0,NEAR OCEAN +-124.05,40.85,31.0,2414.0,428.0,1005.0,401.0,3.5156,143000.0,NEAR OCEAN +-124.02,40.8,22.0,2588.0,435.0,1198.0,442.0,3.9792,133900.0,<1H OCEAN +-124.08,40.86,18.0,1287.0,484.0,805.0,502.0,1.1157,150000.0,NEAR OCEAN +-124.09,40.86,25.0,1322.0,387.0,794.0,379.0,1.1742,75000.0,NEAR OCEAN +-124.09,40.87,44.0,692.0,206.0,398.0,211.0,1.1576,87500.0,NEAR OCEAN +-124.07,40.87,47.0,1765.0,326.0,796.0,333.0,2.2138,99200.0,NEAR OCEAN +-124.08,40.87,29.0,1710.0,469.0,990.0,425.0,1.1479,101100.0,NEAR OCEAN +-124.09,40.88,50.0,921.0,187.0,420.0,187.0,2.2188,105800.0,NEAR OCEAN +-124.07,40.87,31.0,334.0,134.0,780.0,130.0,0.7684,153100.0,NEAR OCEAN +-124.15,40.88,33.0,2235.0,506.0,1165.0,441.0,1.725,57500.0,NEAR OCEAN +-124.1,40.88,35.0,2987.0,578.0,1581.0,585.0,2.0657,81100.0,NEAR OCEAN +-124.09,40.88,31.0,1982.0,495.0,1052.0,467.0,1.5326,74100.0,NEAR OCEAN +-124.09,40.88,26.0,2683.0,555.0,1353.0,526.0,2.4321,82100.0,NEAR OCEAN +-124.1,40.9,18.0,4032.0,798.0,1948.0,775.0,2.7321,92600.0,NEAR OCEAN +-124.23,40.81,52.0,1112.0,209.0,544.0,172.0,3.3462,50800.0,NEAR OCEAN +-124.06,40.88,12.0,2087.0,424.0,1603.0,438.0,2.5667,139500.0,NEAR OCEAN +-123.74,40.66,25.0,2395.0,431.0,983.0,375.0,3.0469,136000.0,<1H OCEAN +-124.08,40.91,13.0,2522.0,719.0,1381.0,628.0,1.6667,78800.0,NEAR OCEAN +-123.76,41.03,24.0,2386.0,565.0,1058.0,414.0,2.0644,79800.0,<1H OCEAN +-123.85,41.32,31.0,938.0,238.0,425.0,157.0,1.0486,36700.0,<1H OCEAN +-123.72,41.09,19.0,1970.0,431.0,1166.0,363.0,1.8208,50000.0,<1H OCEAN +-123.63,41.11,19.0,1797.0,384.0,1033.0,327.0,1.4911,59200.0,<1H OCEAN +-123.66,41.3,22.0,1580.0,372.0,686.0,264.0,1.8065,62700.0,<1H OCEAN +-123.52,41.01,17.0,1564.0,345.0,517.0,222.0,2.1542,83800.0,INLAND +-124.08,41.36,29.0,1029.0,239.0,509.0,196.0,2.0156,62800.0,NEAR OCEAN +-124.06,41.13,22.0,3263.0,799.0,1384.0,578.0,2.4708,119400.0,NEAR OCEAN +-124.14,41.06,32.0,1020.0,215.0,421.0,198.0,3.0208,143400.0,NEAR OCEAN +-124.1,41.04,26.0,1633.0,380.0,890.0,370.0,1.9741,97900.0,NEAR OCEAN +-124.01,40.97,21.0,1513.0,319.0,943.0,301.0,3.538,102700.0,<1H OCEAN +-124.0,40.92,29.0,1429.0,,672.0,266.0,2.9485,98800.0,<1H OCEAN +-124.01,40.89,28.0,1470.0,336.0,811.0,314.0,2.4559,75600.0,<1H OCEAN +-123.98,40.88,41.0,1719.0,372.0,844.0,336.0,2.6923,84200.0,<1H OCEAN +-123.88,40.93,28.0,1272.0,259.0,519.0,220.0,3.2891,106300.0,<1H OCEAN +-124.16,41.02,23.0,1672.0,385.0,1060.0,390.0,2.1726,75500.0,NEAR OCEAN +-124.08,40.99,18.0,3297.0,662.0,1554.0,578.0,2.6847,111300.0,NEAR OCEAN +-124.16,40.95,20.0,1075.0,214.0,529.0,196.0,3.1406,96000.0,NEAR OCEAN +-124.11,40.95,19.0,1734.0,365.0,866.0,342.0,2.96,81700.0,NEAR OCEAN +-124.09,40.95,18.0,2250.0,484.0,1248.0,472.0,2.5893,99600.0,NEAR OCEAN +-124.11,40.93,25.0,2392.0,474.0,1298.0,461.0,3.5076,73600.0,NEAR OCEAN +-124.11,40.93,17.0,1661.0,329.0,948.0,357.0,2.7639,90200.0,NEAR OCEAN +-124.08,40.94,18.0,1550.0,345.0,941.0,335.0,2.3147,70100.0,NEAR OCEAN +-124.09,40.92,12.0,2497.0,491.0,1153.0,462.0,2.8182,126900.0,NEAR OCEAN +-124.05,40.94,14.0,1452.0,217.0,516.0,181.0,5.0329,165600.0,NEAR OCEAN +-124.1,40.95,17.0,1485.0,345.0,823.0,316.0,1.8993,78400.0,NEAR OCEAN +-124.07,40.81,23.0,2103.0,411.0,1019.0,387.0,2.9911,119700.0,NEAR OCEAN +-124.02,40.72,28.0,3513.0,634.0,1658.0,598.0,3.8095,119900.0,<1H OCEAN +-124.1,40.73,33.0,644.0,129.0,334.0,121.0,3.9659,111800.0,NEAR OCEAN +-124.17,40.74,17.0,2026.0,338.0,873.0,313.0,4.0357,128900.0,NEAR OCEAN +-124.14,40.72,18.0,2581.0,499.0,1375.0,503.0,2.8446,100500.0,NEAR OCEAN +-124.14,40.67,23.0,580.0,117.0,320.0,109.0,4.2054,130600.0,NEAR OCEAN +-124.19,40.73,21.0,5694.0,1056.0,2907.0,972.0,3.5363,90100.0,NEAR OCEAN +-124.21,40.75,32.0,1218.0,331.0,620.0,268.0,1.6528,58100.0,NEAR OCEAN +-124.27,40.69,36.0,2349.0,528.0,1194.0,465.0,2.5179,79000.0,NEAR OCEAN +-124.18,40.62,35.0,952.0,178.0,480.0,179.0,3.0536,107000.0,NEAR OCEAN +-124.17,40.62,32.0,1595.0,309.0,706.0,277.0,2.8958,86400.0,NEAR OCEAN +-124.13,40.62,43.0,2131.0,399.0,910.0,389.0,2.5804,92100.0,NEAR OCEAN +-124.16,40.6,39.0,1322.0,283.0,642.0,292.0,2.4519,85100.0,NEAR OCEAN +-124.15,40.59,39.0,1186.0,238.0,539.0,212.0,2.0938,79600.0,NEAR OCEAN +-124.14,40.6,27.0,1148.0,206.0,521.0,219.0,4.025,128100.0,NEAR OCEAN +-124.14,40.59,22.0,1665.0,405.0,826.0,382.0,1.5625,66800.0,NEAR OCEAN +-124.14,40.59,17.0,2985.0,610.0,1544.0,584.0,2.178,76800.0,NEAR OCEAN +-124.05,40.59,32.0,1878.0,340.0,937.0,353.0,3.4408,95200.0,<1H OCEAN +-124.09,40.55,24.0,2978.0,553.0,1370.0,480.0,2.7644,97300.0,<1H OCEAN +-123.96,40.57,31.0,1854.0,365.0,883.0,310.0,2.3167,92600.0,<1H OCEAN +-123.73,40.48,25.0,2015.0,524.0,746.0,251.0,1.7153,77100.0,INLAND +-124.14,40.58,25.0,1899.0,357.0,891.0,355.0,2.6987,92500.0,<1H OCEAN +-124.14,40.57,29.0,2864.0,600.0,1314.0,562.0,2.1354,75100.0,<1H OCEAN +-124.11,40.57,33.0,1348.0,234.0,573.0,236.0,2.4896,74100.0,<1H OCEAN +-124.13,40.55,38.0,544.0,,240.0,91.0,3.25,94800.0,<1H OCEAN +-124.1,40.5,30.0,1927.0,393.0,996.0,374.0,2.2357,72300.0,<1H OCEAN +-124.1,40.5,42.0,2380.0,553.0,1300.0,504.0,1.7574,57500.0,<1H OCEAN +-124.09,40.44,38.0,2220.0,426.0,1041.0,401.0,2.3947,70500.0,<1H OCEAN +-124.1,40.47,52.0,1196.0,236.0,965.0,265.0,3.5345,55000.0,<1H OCEAN +-124.03,40.45,34.0,1006.0,213.0,443.0,158.0,2.6094,71300.0,<1H OCEAN +-124.26,40.58,52.0,2217.0,394.0,907.0,369.0,2.3571,111400.0,NEAR OCEAN +-124.23,40.54,52.0,2694.0,453.0,1152.0,435.0,3.0806,106700.0,NEAR OCEAN +-124.35,40.54,52.0,1820.0,300.0,806.0,270.0,3.0147,94600.0,NEAR OCEAN +-124.25,40.28,32.0,1430.0,419.0,434.0,187.0,1.9417,76100.0,NEAR OCEAN +-124.08,40.06,17.0,1319.0,267.0,393.0,163.0,2.625,135600.0,NEAR OCEAN +-124.0,40.22,16.0,2088.0,535.0,816.0,326.0,1.319,70700.0,<1H OCEAN +-123.84,40.28,28.0,2809.0,605.0,1093.0,438.0,2.0962,74000.0,<1H OCEAN +-123.68,40.24,31.0,1852.0,452.0,917.0,359.0,1.725,54300.0,<1H OCEAN +-123.82,40.16,19.0,2283.0,634.0,1184.0,453.0,1.2227,76800.0,<1H OCEAN +-123.82,40.12,33.0,2985.0,591.0,1221.0,486.0,2.087,82400.0,<1H OCEAN +-123.75,40.11,35.0,2052.0,477.0,900.0,402.0,1.9625,101500.0,<1H OCEAN +-123.78,40.05,17.0,2019.0,496.0,899.0,347.0,2.1864,101900.0,<1H OCEAN +-115.52,33.12,38.0,1327.0,262.0,784.0,231.0,1.8793,60800.0,INLAND +-115.52,33.13,18.0,1109.0,283.0,1006.0,253.0,2.163,53400.0,INLAND +-115.51,33.12,21.0,1024.0,218.0,890.0,232.0,2.101,46700.0,INLAND +-115.46,33.19,33.0,1234.0,373.0,777.0,298.0,1.0,40000.0,INLAND +-115.51,33.24,32.0,1995.0,523.0,1069.0,410.0,1.6552,43300.0,INLAND +-115.6,33.2,37.0,709.0,187.0,390.0,142.0,2.4511,72500.0,INLAND +-115.73,33.09,27.0,452.0,103.0,258.0,61.0,2.9,87500.0,INLAND +-115.62,33.04,17.0,1009.0,231.0,745.0,217.0,2.0463,61200.0,INLAND +-115.62,33.04,20.0,1121.0,244.0,766.0,230.0,2.2969,62000.0,INLAND +-115.6,33.04,31.0,314.0,61.0,152.0,56.0,3.3472,91700.0,INLAND +-115.41,32.99,29.0,1141.0,220.0,684.0,194.0,3.4038,107800.0,INLAND +-115.59,32.96,17.0,841.0,146.0,473.0,154.0,3.1979,113500.0,INLAND +-115.52,32.98,32.0,1615.0,382.0,1307.0,345.0,1.4583,58600.0,INLAND +-115.52,32.98,21.0,1302.0,327.0,1244.0,316.0,2.2054,66400.0,INLAND +-115.53,32.99,25.0,2578.0,634.0,2082.0,565.0,1.7159,62200.0,INLAND +-115.51,32.99,20.0,1402.0,287.0,1104.0,317.0,1.9088,63700.0,INLAND +-115.54,32.99,23.0,1459.0,373.0,1148.0,388.0,1.5372,69400.0,INLAND +-115.54,32.98,27.0,1513.0,395.0,1121.0,381.0,1.9464,60600.0,INLAND +-115.54,32.99,17.0,1697.0,268.0,911.0,254.0,4.3523,96000.0,INLAND +-115.55,32.98,24.0,2565.0,530.0,1447.0,473.0,3.2593,80800.0,INLAND +-115.54,32.97,41.0,2429.0,454.0,1188.0,430.0,3.0091,70800.0,INLAND +-115.53,32.97,35.0,1583.0,340.0,933.0,318.0,2.4063,70700.0,INLAND +-115.55,32.98,33.0,2266.0,365.0,952.0,360.0,5.4349,143000.0,INLAND +-115.56,32.96,21.0,2164.0,480.0,1164.0,421.0,3.8177,107200.0,INLAND +-115.53,32.97,34.0,2231.0,545.0,1568.0,510.0,1.5217,60300.0,INLAND +-115.52,32.97,24.0,1617.0,366.0,1416.0,401.0,1.975,66400.0,INLAND +-115.52,32.97,10.0,1879.0,387.0,1376.0,337.0,1.9911,67500.0,INLAND +-115.32,32.82,34.0,591.0,139.0,327.0,89.0,3.6528,100000.0,INLAND +-115.39,32.76,16.0,1136.0,196.0,481.0,185.0,6.2558,146300.0,INLAND +-115.4,32.86,19.0,1087.0,171.0,649.0,173.0,3.3182,113800.0,INLAND +-115.37,32.81,23.0,1458.0,294.0,866.0,275.0,2.3594,74300.0,INLAND +-115.37,32.82,14.0,1276.0,270.0,867.0,261.0,1.9375,80900.0,INLAND +-115.37,32.82,30.0,1602.0,322.0,1130.0,335.0,3.5735,71100.0,INLAND +-115.38,32.82,38.0,1892.0,394.0,1175.0,374.0,1.9939,65800.0,INLAND +-115.38,32.81,35.0,1263.0,262.0,950.0,241.0,1.8958,67500.0,INLAND +-115.37,32.81,32.0,741.0,191.0,623.0,169.0,1.7604,68600.0,INLAND +-115.57,32.85,33.0,1365.0,269.0,825.0,250.0,3.2396,62300.0,INLAND +-115.57,32.85,17.0,1039.0,256.0,728.0,246.0,1.7411,63500.0,INLAND +-115.57,32.84,29.0,1207.0,301.0,804.0,288.0,1.9531,61100.0,INLAND +-115.57,32.83,31.0,1494.0,289.0,959.0,284.0,3.5282,67500.0,INLAND +-115.59,32.85,20.0,1608.0,274.0,862.0,248.0,4.875,90800.0,INLAND +-115.6,32.87,3.0,1629.0,317.0,1005.0,312.0,4.1293,83200.0,INLAND +-115.49,32.87,19.0,541.0,104.0,457.0,106.0,3.3583,102800.0,INLAND +-115.64,32.8,23.0,1228.0,235.0,569.0,235.0,3.1667,125000.0,INLAND +-115.69,32.79,18.0,1564.0,340.0,1161.0,343.0,2.1792,55200.0,INLAND +-115.73,32.8,44.0,472.0,81.0,206.0,57.0,2.2083,93800.0,INLAND +-115.72,32.75,16.0,348.0,99.0,123.0,54.0,2.0938,87500.0,INLAND +-115.64,32.75,19.0,377.0,69.0,198.0,55.0,1.625,112500.0,INLAND +-115.58,32.81,5.0,805.0,143.0,458.0,143.0,4.475,96300.0,INLAND +-115.55,32.82,34.0,1540.0,316.0,1013.0,274.0,2.5664,67500.0,INLAND +-115.58,32.81,10.0,1088.0,203.0,533.0,201.0,3.6597,87500.0,INLAND +-115.57,32.8,17.0,1492.0,426.0,1595.0,428.0,1.7188,69900.0,INLAND +-115.57,32.8,16.0,1307.0,359.0,961.0,327.0,1.1853,72600.0,INLAND +-115.57,32.8,16.0,2276.0,594.0,1184.0,513.0,1.875,93800.0,INLAND +-115.48,32.8,21.0,1260.0,246.0,805.0,239.0,2.6172,88500.0,INLAND +-115.52,32.77,18.0,1715.0,337.0,1166.0,333.0,2.2417,79200.0,INLAND +-115.53,32.73,14.0,1527.0,325.0,1453.0,332.0,1.735,61200.0,INLAND +-115.52,32.73,17.0,1190.0,275.0,1113.0,258.0,2.3571,63100.0,INLAND +-115.5,32.75,13.0,330.0,72.0,822.0,64.0,3.4107,142500.0,INLAND +-115.55,32.8,23.0,666.0,142.0,580.0,160.0,2.1136,61000.0,INLAND +-115.55,32.79,22.0,565.0,162.0,692.0,141.0,1.2083,53600.0,INLAND +-115.54,32.79,30.0,752.0,194.0,733.0,186.0,1.6607,56100.0,INLAND +-115.54,32.79,23.0,1712.0,403.0,1370.0,377.0,1.275,60400.0,INLAND +-115.55,32.79,23.0,1004.0,221.0,697.0,201.0,1.6351,59600.0,INLAND +-115.57,32.8,33.0,1192.0,213.0,1066.0,211.0,4.5714,68600.0,INLAND +-115.56,32.8,25.0,1311.0,375.0,1193.0,351.0,2.1979,63900.0,INLAND +-115.56,32.8,28.0,1672.0,416.0,1335.0,397.0,1.5987,59400.0,INLAND +-115.56,32.8,15.0,1171.0,328.0,1024.0,298.0,1.3882,69400.0,INLAND +-115.56,32.79,18.0,1178.0,438.0,1377.0,429.0,1.3373,58300.0,INLAND +-115.56,32.78,34.0,2856.0,555.0,1627.0,522.0,3.2083,76200.0,INLAND +-115.56,32.79,20.0,2372.0,835.0,2283.0,767.0,1.1707,62500.0,INLAND +-115.57,32.79,50.0,1291.0,277.0,864.0,274.0,1.6667,68100.0,INLAND +-115.56,32.78,46.0,2511.0,490.0,1583.0,469.0,3.0603,70800.0,INLAND +-115.56,32.78,35.0,1185.0,202.0,615.0,191.0,4.6154,86200.0,INLAND +-115.57,32.78,25.0,2007.0,301.0,1135.0,332.0,5.128,99600.0,INLAND +-115.56,32.78,29.0,1568.0,283.0,848.0,245.0,3.1597,76200.0,INLAND +-115.55,32.78,5.0,2652.0,606.0,1767.0,536.0,2.8025,84300.0,INLAND +-115.58,32.78,5.0,2494.0,414.0,1416.0,421.0,5.7843,110100.0,INLAND +-115.59,32.79,8.0,2183.0,307.0,1000.0,287.0,6.3814,159900.0,INLAND +-115.58,32.79,14.0,1687.0,507.0,762.0,451.0,1.6635,64400.0,INLAND +-115.57,32.79,34.0,1152.0,208.0,621.0,208.0,3.6042,73600.0,INLAND +-115.57,32.78,29.0,2321.0,367.0,1173.0,360.0,4.0375,86400.0,INLAND +-115.57,32.78,20.0,1534.0,235.0,871.0,222.0,6.2715,97200.0,INLAND +-115.57,32.78,15.0,1413.0,279.0,803.0,277.0,4.3021,87500.0,INLAND +-115.56,32.76,15.0,1278.0,217.0,653.0,185.0,4.4821,140300.0,INLAND +-115.59,32.69,30.0,935.0,177.0,649.0,148.0,2.5769,94400.0,INLAND +-115.49,32.69,17.0,1960.0,389.0,1691.0,356.0,1.899,64000.0,INLAND +-115.4,32.7,19.0,583.0,113.0,531.0,134.0,1.6838,95800.0,INLAND +-115.49,32.67,25.0,2322.0,573.0,2185.0,602.0,1.375,70100.0,INLAND +-115.49,32.67,24.0,1266.0,275.0,1083.0,298.0,1.4828,73100.0,INLAND +-115.48,32.68,15.0,3414.0,666.0,2097.0,622.0,2.3319,91200.0,INLAND +-115.5,32.68,18.0,3631.0,913.0,3565.0,924.0,1.5931,88400.0,INLAND +-115.5,32.67,35.0,2159.0,492.0,1694.0,475.0,2.1776,75500.0,INLAND +-115.49,32.67,29.0,1523.0,440.0,1302.0,393.0,1.1311,84700.0,INLAND +-115.51,32.68,11.0,2872.0,610.0,2644.0,581.0,2.625,72700.0,INLAND +-115.52,32.67,6.0,2804.0,581.0,2807.0,594.0,2.0625,67700.0,INLAND +-116.05,33.33,17.0,290.0,94.0,135.0,57.0,1.7292,81300.0,INLAND +-116.0,33.19,16.0,245.0,57.0,81.0,33.0,1.2639,51300.0,INLAND +-115.88,32.93,15.0,208.0,49.0,51.0,20.0,4.0208,32500.0,INLAND +-116.0,32.74,26.0,1134.0,280.0,329.0,158.0,1.4338,43900.0,INLAND +-115.9,32.69,18.0,414.0,86.0,98.0,54.0,1.5417,57500.0,INLAND +-116.01,33.41,20.0,1996.0,515.0,659.0,295.0,2.8684,62800.0,INLAND +-115.99,33.4,15.0,1945.0,536.0,515.0,273.0,2.0109,54300.0,INLAND +-115.94,33.38,5.0,186.0,43.0,41.0,21.0,2.7,58800.0,INLAND +-115.98,33.32,8.0,240.0,46.0,63.0,24.0,1.4688,53800.0,INLAND +-115.91,33.36,15.0,459.0,95.0,160.0,73.0,0.922,67500.0,INLAND +-115.9,33.34,19.0,1210.0,248.0,329.0,155.0,1.7857,62800.0,INLAND +-115.96,33.3,27.0,322.0,81.0,112.0,57.0,1.125,54400.0,INLAND +-115.95,33.28,12.0,99.0,25.0,37.0,17.0,1.8958,53800.0,INLAND +-115.8,33.26,2.0,96.0,18.0,30.0,16.0,5.3374,47500.0,INLAND +-114.73,33.43,24.0,796.0,243.0,227.0,139.0,0.8964,59200.0,INLAND +-114.98,33.07,18.0,1183.0,363.0,374.0,127.0,3.1607,57500.0,INLAND +-115.73,33.36,19.0,749.0,238.0,476.0,169.0,1.7727,50000.0,INLAND +-115.73,33.35,23.0,1586.0,448.0,338.0,182.0,1.2132,30000.0,INLAND +-114.65,32.79,21.0,44.0,33.0,64.0,27.0,0.8571,25000.0,INLAND +-114.55,32.8,19.0,2570.0,820.0,1431.0,608.0,1.275,56100.0,INLAND +-114.63,32.76,15.0,1448.0,378.0,949.0,300.0,0.8585,45000.0,INLAND +-114.66,32.74,17.0,1388.0,386.0,775.0,320.0,1.2049,44000.0,INLAND +-118.18,37.35,16.0,3806.0,794.0,1501.0,714.0,2.1212,108300.0,INLAND +-118.43,37.4,19.0,2460.0,405.0,1225.0,425.0,4.1576,141500.0,INLAND +-118.6,37.39,19.0,2682.0,518.0,1134.0,399.0,3.2132,166000.0,INLAND +-118.45,37.25,20.0,1468.0,283.0,721.0,270.0,3.0817,118800.0,INLAND +-118.45,37.37,26.0,3135.0,524.0,1385.0,523.0,4.337,139700.0,INLAND +-118.42,37.35,21.0,3302.0,557.0,1413.0,520.0,4.375,180400.0,INLAND +-118.42,37.36,18.0,2281.0,520.0,1425.0,465.0,1.7388,54400.0,INLAND +-118.4,37.36,34.0,2465.0,619.0,1172.0,575.0,1.9722,116100.0,INLAND +-118.39,37.37,25.0,3295.0,824.0,1477.0,770.0,1.8325,105800.0,INLAND +-118.39,37.36,38.0,1813.0,410.0,902.0,396.0,2.3261,98400.0,INLAND +-118.3,37.17,22.0,3480.0,673.0,1541.0,636.0,2.75,94500.0,INLAND +-117.9,36.95,19.0,99.0,26.0,51.0,22.0,1.7292,137500.0,INLAND +-118.31,36.94,35.0,2563.0,530.0,861.0,371.0,2.325,80600.0,INLAND +-118.05,36.64,34.0,2090.0,478.0,896.0,426.0,2.0357,74200.0,INLAND +-118.18,36.63,23.0,2311.0,487.0,1019.0,384.0,2.2574,104700.0,INLAND +-117.69,36.13,25.0,1709.0,439.0,632.0,292.0,1.7868,45500.0,INLAND +-117.02,36.4,19.0,619.0,239.0,490.0,164.0,2.1,14999.0,INLAND +-116.22,36.0,14.0,1372.0,386.0,436.0,213.0,1.1471,32900.0,INLAND +-119.02,35.42,42.0,2271.0,458.0,1124.0,447.0,2.7583,64900.0,INLAND +-119.03,35.42,45.0,1628.0,352.0,754.0,334.0,2.5703,62400.0,INLAND +-119.03,35.42,38.0,2952.0,598.0,1491.0,568.0,2.6094,67900.0,INLAND +-119.03,35.45,14.0,3520.0,604.0,1748.0,582.0,4.3162,87100.0,INLAND +-119.05,35.44,5.0,2133.0,487.0,1182.0,438.0,3.0268,77000.0,INLAND +-119.02,35.44,29.0,3415.0,631.0,1527.0,597.0,4.0125,84400.0,INLAND +-119.02,35.43,39.0,2033.0,370.0,956.0,379.0,3.1736,70700.0,INLAND +-119.02,35.42,40.0,1089.0,226.0,520.0,218.0,2.2727,67200.0,INLAND +-119.02,35.42,36.0,2044.0,447.0,1021.0,374.0,1.8472,57400.0,INLAND +-119.02,35.42,40.0,1912.0,439.0,1015.0,413.0,1.4598,52600.0,INLAND +-119.03,35.42,42.0,1705.0,418.0,905.0,393.0,1.6286,54600.0,INLAND +-119.03,35.41,41.0,1808.0,435.0,1005.0,373.0,1.7857,54300.0,INLAND +-119.04,35.42,47.0,1691.0,402.0,913.0,358.0,1.8403,54700.0,INLAND +-119.05,35.42,41.0,1992.0,421.0,1006.0,419.0,2.8393,57000.0,INLAND +-119.05,35.42,35.0,2353.0,483.0,1368.0,455.0,2.325,63200.0,INLAND +-119.02,35.41,21.0,2534.0,554.0,1297.0,517.0,2.0575,67000.0,INLAND +-119.02,35.41,41.0,2221.0,516.0,1106.0,473.0,1.97,51900.0,INLAND +-119.03,35.41,37.0,1761.0,443.0,911.0,365.0,2.0331,53200.0,INLAND +-119.04,35.41,25.0,1577.0,310.0,844.0,309.0,3.0625,69400.0,INLAND +-119.02,35.41,31.0,2348.0,701.0,1413.0,611.0,1.3222,51400.0,INLAND +-119.03,35.4,35.0,2608.0,620.0,1566.0,583.0,2.1818,63500.0,INLAND +-119.04,35.41,20.0,3268.0,833.0,1622.0,758.0,1.3587,67500.0,INLAND +-119.08,35.42,10.0,4159.0,608.0,2089.0,591.0,5.5261,132000.0,INLAND +-119.07,35.42,19.0,3889.0,832.0,1872.0,731.0,2.6812,107600.0,INLAND +-119.09,35.41,12.0,3449.0,522.0,1754.0,551.0,5.6235,130600.0,INLAND +-119.11,35.42,52.0,154.0,,37.0,16.0,10.0263,200000.0,INLAND +-119.09,35.43,28.0,254.0,35.0,118.0,37.0,4.8571,237500.0,INLAND +-119.05,35.4,18.0,1894.0,319.0,846.0,317.0,3.8611,126400.0,INLAND +-119.08,35.39,10.0,6435.0,1040.0,3242.0,1030.0,5.575,132200.0,INLAND +-119.01,35.4,11.0,8739.0,2190.0,4781.0,1919.0,1.7109,44600.0,INLAND +-119.01,35.39,29.0,1820.0,459.0,1134.0,419.0,1.8289,59400.0,INLAND +-119.01,35.38,36.0,790.0,224.0,426.0,208.0,1.4427,50600.0,INLAND +-119.02,35.39,30.0,227.0,75.0,169.0,101.0,1.3527,60000.0,INLAND +-118.99,35.4,43.0,2225.0,392.0,890.0,374.0,4.0208,90400.0,INLAND +-118.99,35.4,48.0,1908.0,331.0,789.0,321.0,3.5714,84600.0,INLAND +-119.0,35.4,44.0,2250.0,378.0,928.0,379.0,4.3906,93900.0,INLAND +-119.0,35.39,42.0,2839.0,516.0,1203.0,487.0,3.7708,79400.0,INLAND +-119.0,35.39,51.0,1373.0,284.0,648.0,300.0,2.8295,72100.0,INLAND +-118.97,35.41,36.0,1896.0,315.0,937.0,303.0,3.996,85500.0,INLAND +-118.97,35.4,34.0,1859.0,323.0,854.0,309.0,3.1906,76200.0,INLAND +-118.98,35.4,34.0,813.0,171.0,440.0,170.0,2.8393,69800.0,INLAND +-118.98,35.4,36.0,1443.0,273.0,680.0,259.0,2.9821,73100.0,INLAND +-118.98,35.4,36.0,1864.0,331.0,1052.0,325.0,3.4205,76600.0,INLAND +-118.98,35.41,36.0,1482.0,266.0,640.0,274.0,3.875,94500.0,INLAND +-118.96,35.4,28.0,4667.0,875.0,2404.0,841.0,3.2325,89000.0,INLAND +-118.96,35.41,29.0,3548.0,729.0,1542.0,659.0,2.947,87100.0,INLAND +-118.95,35.4,23.0,4483.0,894.0,2136.0,883.0,3.6875,101700.0,INLAND +-118.96,35.4,27.0,2473.0,400.0,1271.0,427.0,3.5524,89100.0,INLAND +-118.96,35.39,23.0,5624.0,1148.0,2842.0,1042.0,3.1297,79000.0,INLAND +-118.96,35.38,34.0,2047.0,347.0,888.0,352.0,3.6734,92900.0,INLAND +-118.95,35.38,35.0,2220.0,388.0,906.0,373.0,3.5938,95200.0,INLAND +-118.96,35.38,41.0,2417.0,435.0,973.0,406.0,3.0568,85600.0,INLAND +-118.94,35.38,26.0,4800.0,831.0,2365.0,743.0,3.7533,87000.0,INLAND +-118.95,35.38,30.0,2594.0,478.0,1419.0,480.0,3.725,83100.0,INLAND +-118.92,35.38,33.0,3122.0,579.0,1733.0,545.0,3.8307,70600.0,INLAND +-118.95,35.41,21.0,3999.0,727.0,1889.0,688.0,3.875,99500.0,INLAND +-118.94,35.4,14.0,5548.0,941.0,2815.0,935.0,4.2214,104600.0,INLAND +-118.94,35.39,27.0,3074.0,452.0,1223.0,452.0,5.4592,139100.0,INLAND +-118.94,35.39,13.0,3137.0,417.0,1318.0,397.0,7.7751,194100.0,INLAND +-118.9,35.41,6.0,4656.0,971.0,2320.0,935.0,3.0938,100800.0,INLAND +-118.94,35.41,10.0,3216.0,526.0,1539.0,483.0,6.3639,143000.0,INLAND +-118.91,35.4,10.0,3587.0,774.0,1398.0,763.0,2.569,113000.0,INLAND +-118.87,35.37,14.0,2458.0,433.0,1352.0,411.0,3.5441,87000.0,INLAND +-118.91,35.37,32.0,4121.0,755.0,2590.0,721.0,3.3462,67600.0,INLAND +-118.88,35.34,20.0,1351.0,255.0,762.0,253.0,2.1111,105300.0,INLAND +-118.92,35.37,17.0,3589.0,701.0,1746.0,640.0,2.4919,75700.0,INLAND +-118.93,35.37,34.0,2412.0,446.0,1558.0,421.0,2.6903,62800.0,INLAND +-118.94,35.37,33.0,3372.0,741.0,2352.0,704.0,2.0643,57600.0,INLAND +-118.94,35.37,23.0,1106.0,252.0,790.0,230.0,1.8523,59700.0,INLAND +-118.95,35.37,34.0,1672.0,359.0,1059.0,349.0,2.1588,61300.0,INLAND +-118.94,35.37,37.0,1667.0,362.0,971.0,335.0,2.875,57400.0,INLAND +-118.95,35.37,37.0,1475.0,327.0,946.0,295.0,1.6728,55400.0,INLAND +-118.96,35.37,41.0,1463.0,339.0,1066.0,318.0,1.7467,52400.0,INLAND +-118.96,35.37,40.0,1603.0,374.0,1026.0,337.0,1.365,54300.0,INLAND +-118.97,35.39,38.0,2121.0,433.0,1547.0,441.0,2.774,59500.0,INLAND +-118.97,35.38,32.0,1361.0,363.0,1483.0,297.0,1.625,46800.0,INLAND +-118.98,35.38,39.0,1497.0,383.0,1182.0,355.0,1.0648,50000.0,INLAND +-118.97,35.38,42.0,1185.0,358.0,1038.0,299.0,0.9951,48000.0,INLAND +-118.97,35.37,41.0,2396.0,602.0,1781.0,543.0,1.8819,58000.0,INLAND +-118.97,35.38,35.0,1673.0,426.0,1041.0,413.0,1.375,57500.0,INLAND +-118.99,35.38,26.0,1317.0,374.0,1025.0,304.0,1.4024,51000.0,INLAND +-118.99,35.38,30.0,1390.0,361.0,1116.0,298.0,1.3451,57500.0,INLAND +-118.98,35.39,22.0,1812.0,457.0,1592.0,420.0,1.4146,49100.0,INLAND +-118.98,35.38,24.0,1807.0,465.0,1460.0,410.0,1.4786,54800.0,INLAND +-118.98,35.38,34.0,1020.0,247.0,795.0,228.0,1.625,50800.0,INLAND +-118.98,35.38,28.0,1171.0,299.0,1193.0,273.0,0.8639,49400.0,INLAND +-118.99,35.39,39.0,2228.0,542.0,1516.0,435.0,1.6009,48800.0,INLAND +-118.99,35.39,36.0,1438.0,348.0,1054.0,341.0,1.8319,55400.0,INLAND +-118.99,35.39,52.0,2805.0,573.0,1325.0,522.0,2.5083,70100.0,INLAND +-118.98,35.39,29.0,607.0,177.0,476.0,143.0,1.1875,50700.0,INLAND +-118.98,35.39,32.0,2620.0,682.0,2375.0,684.0,1.2618,46900.0,INLAND +-119.0,35.37,41.0,303.0,78.0,216.0,80.0,2.2212,55500.0,INLAND +-118.99,35.37,36.0,832.0,198.0,814.0,174.0,1.4773,57400.0,INLAND +-118.99,35.37,38.0,918.0,220.0,743.0,222.0,1.7292,58100.0,INLAND +-118.98,35.37,35.0,825.0,179.0,670.0,181.0,1.1638,57900.0,INLAND +-118.97,35.37,52.0,425.0,119.0,380.0,97.0,1.4125,42500.0,INLAND +-119.01,35.38,44.0,434.0,110.0,274.0,86.0,1.1944,57500.0,INLAND +-119.01,35.38,52.0,114.0,26.0,158.0,26.0,1.075,67500.0,INLAND +-119.01,35.37,35.0,120.0,35.0,477.0,41.0,1.9125,47500.0,INLAND +-119.01,35.37,44.0,593.0,136.0,364.0,121.0,1.4779,66000.0,INLAND +-119.02,35.38,52.0,90.0,35.0,36.0,31.0,0.8054,60000.0,INLAND +-119.02,35.38,48.0,346.0,92.0,129.0,63.0,1.1875,63800.0,INLAND +-119.02,35.39,52.0,191.0,52.0,106.0,49.0,2.0455,72500.0,INLAND +-119.01,35.37,45.0,629.0,143.0,568.0,139.0,1.7321,84400.0,INLAND +-119.03,35.38,38.0,2122.0,394.0,843.0,410.0,3.0,91800.0,INLAND +-119.03,35.38,52.0,1695.0,290.0,540.0,260.0,2.7312,147100.0,INLAND +-119.03,35.37,52.0,1503.0,367.0,554.0,277.0,1.6786,126600.0,INLAND +-119.04,35.37,44.0,1618.0,310.0,667.0,300.0,2.875,82700.0,INLAND +-119.03,35.39,28.0,4513.0,764.0,1593.0,763.0,2.9821,118700.0,INLAND +-119.04,35.36,36.0,1942.0,414.0,1051.0,411.0,1.8362,66900.0,INLAND +-119.05,35.36,30.0,4635.0,800.0,2307.0,754.0,3.6548,84700.0,INLAND +-119.05,35.36,16.0,4507.0,1049.0,2261.0,959.0,3.3261,118400.0,INLAND +-119.07,35.36,19.0,5254.0,894.0,2155.0,831.0,4.6705,110700.0,INLAND +-119.08,35.36,12.0,6442.0,1116.0,2966.0,1092.0,4.5791,123400.0,INLAND +-119.06,35.36,9.0,1228.0,234.0,409.0,212.0,4.3482,95200.0,INLAND +-119.03,35.37,42.0,2508.0,483.0,1035.0,442.0,2.6513,72300.0,INLAND +-119.03,35.36,41.0,1944.0,363.0,977.0,388.0,3.9097,81300.0,INLAND +-119.04,35.36,40.0,1533.0,312.0,771.0,306.0,3.0435,69500.0,INLAND +-119.04,35.37,46.0,1637.0,338.0,714.0,297.0,2.1818,75300.0,INLAND +-119.02,35.37,44.0,2687.0,620.0,1521.0,549.0,1.7213,61600.0,INLAND +-119.02,35.36,48.0,1833.0,396.0,947.0,363.0,2.2827,70000.0,INLAND +-119.02,35.36,47.0,1631.0,340.0,847.0,315.0,2.5062,73700.0,INLAND +-119.03,35.36,41.0,2551.0,594.0,1342.0,595.0,1.9671,76800.0,INLAND +-119.01,35.37,38.0,1702.0,380.0,1191.0,366.0,1.8801,57800.0,INLAND +-119.01,35.36,38.0,1838.0,388.0,1203.0,373.0,1.6797,60700.0,INLAND +-119.01,35.36,36.0,2658.0,626.0,1490.0,529.0,1.2157,57000.0,INLAND +-119.01,35.36,24.0,1941.0,484.0,1277.0,435.0,1.056,51600.0,INLAND +-119.01,35.37,33.0,821.0,181.0,579.0,172.0,1.2469,46700.0,INLAND +-119.0,35.36,40.0,850.0,227.0,764.0,186.0,0.9407,43600.0,INLAND +-119.0,35.36,39.0,896.0,217.0,805.0,197.0,1.25,42500.0,INLAND +-119.0,35.35,35.0,1164.0,277.0,992.0,284.0,1.4015,48700.0,INLAND +-119.0,35.36,35.0,1021.0,280.0,1258.0,239.0,1.7375,48600.0,INLAND +-118.98,35.37,36.0,1562.0,398.0,1223.0,329.0,0.9675,47100.0,INLAND +-118.98,35.36,29.0,1244.0,266.0,933.0,227.0,1.6981,49400.0,INLAND +-118.98,35.36,15.0,1482.0,338.0,1059.0,279.0,1.2617,42700.0,INLAND +-118.99,35.36,18.0,1524.0,354.0,1210.0,344.0,1.1136,47800.0,INLAND +-118.99,35.36,31.0,1498.0,359.0,1168.0,340.0,1.2232,49300.0,INLAND +-118.94,35.36,19.0,2714.0,512.0,1823.0,500.0,3.1281,76200.0,INLAND +-118.95,35.36,30.0,2294.0,508.0,1753.0,482.0,2.1078,54700.0,INLAND +-118.96,35.37,32.0,1025.0,259.0,874.0,236.0,1.9612,53400.0,INLAND +-118.96,35.36,35.0,2285.0,497.0,1738.0,480.0,2.4848,54000.0,INLAND +-118.97,35.37,34.0,1379.0,333.0,1156.0,315.0,1.7197,48900.0,INLAND +-118.97,35.36,31.0,1418.0,306.0,1219.0,312.0,1.5743,46700.0,INLAND +-118.95,35.32,29.0,3480.0,608.0,2007.0,541.0,3.2738,78700.0,INLAND +-118.98,35.35,21.0,496.0,131.0,511.0,124.0,1.7614,33200.0,INLAND +-118.99,35.35,27.0,1615.0,355.0,1380.0,332.0,1.6632,49800.0,INLAND +-118.99,35.33,36.0,1590.0,367.0,1311.0,390.0,1.6786,52900.0,INLAND +-118.99,35.32,26.0,875.0,199.0,567.0,204.0,0.9288,36600.0,INLAND +-119.0,35.35,31.0,2931.0,716.0,1969.0,588.0,2.2155,62100.0,INLAND +-118.99,35.35,32.0,1293.0,317.0,1109.0,286.0,1.1786,45600.0,INLAND +-119.01,35.35,34.0,1354.0,325.0,922.0,304.0,2.1875,58000.0,INLAND +-119.01,35.34,44.0,1730.0,343.0,782.0,278.0,3.0208,63700.0,INLAND +-119.02,35.35,42.0,1239.0,251.0,776.0,272.0,1.983,63300.0,INLAND +-119.01,35.35,39.0,598.0,149.0,366.0,132.0,1.9125,57900.0,INLAND +-119.02,35.35,38.0,1472.0,305.0,670.0,282.0,2.2407,76000.0,INLAND +-119.02,35.34,38.0,1463.0,294.0,692.0,295.0,2.3125,65800.0,INLAND +-119.03,35.34,36.0,3474.0,645.0,1679.0,616.0,2.7256,71900.0,INLAND +-119.03,35.35,34.0,1441.0,294.0,695.0,275.0,2.6875,73700.0,INLAND +-119.04,35.35,31.0,1607.0,336.0,817.0,307.0,2.5644,73000.0,INLAND +-119.04,35.35,27.0,4590.0,897.0,2212.0,894.0,3.1753,85000.0,INLAND +-119.06,35.35,20.0,9351.0,2139.0,4584.0,1953.0,2.575,69900.0,INLAND +-119.05,35.34,14.0,3580.0,984.0,1933.0,912.0,2.6637,175000.0,INLAND +-119.05,35.33,18.0,12707.0,2685.0,7009.0,2552.0,2.9438,87200.0,INLAND +-119.05,35.34,17.0,2387.0,437.0,1204.0,423.0,4.0529,106200.0,INLAND +-119.07,35.35,24.0,4119.0,865.0,1294.0,879.0,2.4123,86200.0,INLAND +-119.07,35.34,16.0,4201.0,786.0,1667.0,724.0,4.8839,134100.0,INLAND +-119.12,35.33,4.0,8574.0,1489.0,4250.0,1444.0,5.1036,103400.0,INLAND +-119.1,35.35,5.0,4597.0,1071.0,1916.0,870.0,4.0327,131000.0,INLAND +-119.08,35.34,18.0,4070.0,512.0,1580.0,540.0,10.5941,245800.0,INLAND +-119.08,35.35,20.0,892.0,129.0,331.0,135.0,7.1837,176300.0,INLAND +-119.09,35.35,14.0,2113.0,256.0,842.0,265.0,8.5325,224100.0,INLAND +-119.08,35.34,16.0,1535.0,238.0,768.0,236.0,5.4449,118500.0,INLAND +-119.08,35.34,15.0,1474.0,235.0,768.0,238.0,4.1528,130100.0,INLAND +-119.1,35.33,4.0,6640.0,898.0,3121.0,902.0,6.759,170300.0,INLAND +-119.08,35.32,8.0,11609.0,2141.0,5696.0,2100.0,5.0012,106300.0,INLAND +-119.09,35.33,9.0,7085.0,1148.0,3084.0,1052.0,4.997,142900.0,INLAND +-119.06,35.32,15.0,3944.0,746.0,2355.0,757.0,3.569,70700.0,INLAND +-119.07,35.33,13.0,9027.0,1901.0,4870.0,1797.0,3.406,100700.0,INLAND +-119.06,35.33,14.0,5264.0,1064.0,3278.0,1049.0,3.8117,82800.0,INLAND +-119.02,35.34,34.0,2861.0,510.0,1375.0,486.0,3.4286,71400.0,INLAND +-119.02,35.33,26.0,3691.0,826.0,2072.0,827.0,2.1553,84700.0,INLAND +-119.03,35.33,21.0,3057.0,698.0,1627.0,680.0,2.7083,84700.0,INLAND +-119.03,35.34,34.0,2221.0,436.0,1131.0,408.0,3.0486,68500.0,INLAND +-119.01,35.34,36.0,973.0,219.0,613.0,187.0,1.5625,46700.0,INLAND +-119.01,35.33,42.0,1120.0,255.0,677.0,213.0,1.5429,39400.0,INLAND +-119.0,35.33,35.0,991.0,221.0,620.0,207.0,1.9417,53800.0,INLAND +-119.01,35.33,32.0,3068.0,628.0,1897.0,607.0,2.4234,63700.0,INLAND +-119.02,35.33,35.0,2053.0,412.0,1193.0,387.0,2.75,65800.0,INLAND +-119.02,35.34,35.0,1650.0,390.0,1145.0,343.0,1.5357,56500.0,INLAND +-118.99,35.32,35.0,1576.0,405.0,870.0,282.0,1.6575,59500.0,INLAND +-118.99,35.3,33.0,2248.0,434.0,1461.0,405.0,2.9402,56200.0,INLAND +-119.0,35.31,37.0,1337.0,275.0,767.0,273.0,1.6522,53300.0,INLAND +-119.09,35.3,3.0,2821.0,519.0,1353.0,495.0,3.6852,109800.0,INLAND +-119.04,35.32,20.0,37.0,11.0,34.0,8.0,1.2,50000.0,INLAND +-119.05,35.32,11.0,7035.0,1455.0,3525.0,1387.0,3.4827,93600.0,INLAND +-119.04,35.31,11.0,2161.0,371.0,1267.0,388.0,4.1957,92700.0,INLAND +-119.03,35.32,12.0,2721.0,549.0,1294.0,523.0,2.5575,100200.0,INLAND +-119.02,35.32,14.0,2927.0,588.0,1821.0,561.0,3.3529,82600.0,INLAND +-119.05,35.3,9.0,10822.0,1994.0,6241.0,1906.0,4.0631,88200.0,INLAND +-119.03,35.3,10.0,829.0,146.0,447.0,173.0,4.1484,102900.0,INLAND +-119.02,35.3,10.0,7397.0,1369.0,4611.0,1310.0,3.6369,81600.0,INLAND +-119.01,35.32,23.0,4870.0,965.0,2717.0,928.0,2.596,70000.0,INLAND +-119.01,35.31,19.0,7092.0,1517.0,4101.0,1436.0,2.1006,74800.0,INLAND +-119.01,35.3,7.0,8596.0,1597.0,4893.0,1520.0,3.9054,80900.0,INLAND +-119.07,35.27,25.0,3081.0,635.0,1830.0,591.0,2.5804,97900.0,INLAND +-119.13,35.22,5.0,6268.0,1003.0,3269.0,980.0,5.1457,118200.0,INLAND +-119.01,35.24,6.0,80.0,16.0,66.0,21.0,3.125,65000.0,INLAND +-119.01,35.28,10.0,7011.0,1453.0,4163.0,1307.0,2.7659,77500.0,INLAND +-118.99,35.24,40.0,282.0,59.0,213.0,71.0,2.35,91700.0,INLAND +-118.99,35.27,32.0,444.0,102.0,242.0,87.0,1.1528,150000.0,INLAND +-118.93,34.82,24.0,806.0,168.0,323.0,136.0,3.5,113900.0,INLAND +-118.95,34.83,18.0,3278.0,762.0,1338.0,550.0,2.9891,116500.0,INLAND +-118.95,34.81,30.0,2817.0,604.0,1089.0,412.0,3.1364,123500.0,INLAND +-119.15,34.83,6.0,8733.0,1600.0,2006.0,736.0,4.5724,168400.0,INLAND +-119.16,34.95,14.0,4054.0,787.0,1581.0,579.0,3.0882,148200.0,INLAND +-118.93,34.82,8.0,508.0,111.0,229.0,84.0,4.0332,128300.0,INLAND +-119.4,35.06,21.0,2213.0,458.0,1250.0,440.0,2.9187,52100.0,INLAND +-119.45,35.07,45.0,973.0,183.0,500.0,177.0,2.6389,30000.0,INLAND +-119.42,35.19,26.0,890.0,172.0,483.0,170.0,4.15,68200.0,INLAND +-119.5,35.27,23.0,3827.0,696.0,1993.0,617.0,3.0742,57900.0,INLAND +-119.48,35.17,36.0,116.0,20.0,39.0,18.0,3.125,37500.0,INLAND +-119.45,35.16,34.0,3437.0,696.0,1783.0,608.0,2.3912,52900.0,INLAND +-119.46,35.17,40.0,4164.0,812.0,1998.0,773.0,2.8323,50800.0,INLAND +-119.46,35.14,30.0,2943.0,,1565.0,584.0,2.5313,45800.0,INLAND +-119.47,35.14,19.0,4190.0,690.0,1973.0,702.0,3.9929,88300.0,INLAND +-119.45,35.15,33.0,5050.0,964.0,2293.0,919.0,3.1592,75400.0,INLAND +-119.45,35.13,34.0,1440.0,309.0,808.0,294.0,2.3013,26600.0,INLAND +-119.46,35.13,46.0,2745.0,543.0,1423.0,482.0,2.1955,26900.0,INLAND +-119.47,35.13,44.0,4599.0,877.0,2140.0,831.0,2.9952,63800.0,INLAND +-119.47,35.4,32.0,2167.0,421.0,1301.0,394.0,1.9718,69800.0,INLAND +-119.42,35.4,24.0,2585.0,480.0,1442.0,424.0,2.8452,104700.0,INLAND +-119.12,35.41,12.0,5589.0,941.0,3018.0,917.0,4.4561,96900.0,INLAND +-119.11,35.39,22.0,984.0,176.0,451.0,170.0,3.25,88900.0,INLAND +-119.12,35.39,13.0,1264.0,202.0,552.0,187.0,4.5903,94300.0,INLAND +-119.19,35.41,12.0,2835.0,471.0,1399.0,413.0,4.4125,149000.0,INLAND +-119.2,35.37,6.0,7383.0,1095.0,3415.0,1059.0,5.3119,157300.0,INLAND +-119.12,35.38,18.0,1521.0,269.0,706.0,279.0,4.4196,121000.0,INLAND +-119.11,35.38,37.0,2044.0,394.0,894.0,359.0,2.9453,82800.0,INLAND +-119.12,35.37,13.0,4527.0,713.0,2170.0,671.0,4.8266,146200.0,INLAND +-119.18,35.5,36.0,1253.0,259.0,932.0,249.0,2.1635,110400.0,INLAND +-119.28,35.52,36.0,786.0,194.0,573.0,134.0,2.2321,37500.0,INLAND +-119.27,35.49,39.0,2649.0,572.0,1815.0,547.0,2.3533,65400.0,INLAND +-119.26,35.5,38.0,2536.0,409.0,1133.0,430.0,4.2375,78600.0,INLAND +-119.27,35.5,34.0,1367.0,329.0,796.0,319.0,2.8269,61100.0,INLAND +-119.27,35.51,28.0,1089.0,179.0,544.0,190.0,3.2279,95800.0,INLAND +-119.28,35.5,34.0,1923.0,379.0,1101.0,351.0,2.4044,65800.0,INLAND +-119.28,35.5,28.0,3107.0,782.0,3260.0,738.0,1.6944,58600.0,INLAND +-119.27,35.5,21.0,2171.0,483.0,1315.0,450.0,1.7105,52100.0,INLAND +-119.38,35.49,34.0,2304.0,437.0,1506.0,403.0,2.2071,64600.0,INLAND +-119.34,35.6,16.0,1584.0,309.0,1011.0,268.0,2.4961,58800.0,INLAND +-119.36,35.55,29.0,510.0,84.0,236.0,73.0,2.7,125000.0,INLAND +-119.35,35.58,13.0,1657.0,362.0,1186.0,376.0,1.1903,63200.0,INLAND +-119.34,35.59,33.0,3240.0,654.0,1809.0,616.0,2.3934,71900.0,INLAND +-119.34,35.6,33.0,2143.0,488.0,1732.0,509.0,1.9362,59000.0,INLAND +-119.33,35.6,32.0,2703.0,683.0,2682.0,675.0,1.4619,60500.0,INLAND +-119.35,35.59,14.0,2719.0,502.0,1497.0,457.0,3.176,71800.0,INLAND +-119.33,35.59,20.0,3085.0,691.0,2645.0,676.0,1.7868,54100.0,INLAND +-119.69,35.62,18.0,820.0,239.0,1345.0,207.0,2.1186,47500.0,INLAND +-119.77,35.65,21.0,2403.0,483.0,1647.0,415.0,2.6066,80000.0,INLAND +-119.14,35.76,30.0,735.0,137.0,421.0,113.0,2.5625,156300.0,INLAND +-119.29,35.76,15.0,3938.0,789.0,3500.0,768.0,2.1295,59800.0,INLAND +-119.19,35.64,29.0,1476.0,220.0,902.0,205.0,2.6726,83300.0,INLAND +-119.24,35.68,21.0,1885.0,398.0,1539.0,388.0,2.5208,58500.0,INLAND +-119.22,35.68,16.0,2874.0,677.0,3078.0,651.0,1.8843,55200.0,INLAND +-119.24,35.67,32.0,3216.0,750.0,2639.0,709.0,2.0025,54700.0,INLAND +-119.25,35.78,27.0,1513.0,342.0,1346.0,323.0,2.7411,59800.0,INLAND +-119.25,35.77,35.0,1618.0,378.0,1449.0,398.0,1.6786,56500.0,INLAND +-119.25,35.76,36.0,2332.0,656.0,2175.0,610.0,1.6045,57300.0,INLAND +-119.25,35.75,36.0,1598.0,443.0,1658.0,417.0,1.517,52100.0,INLAND +-119.25,35.79,8.0,3271.0,797.0,2700.0,688.0,1.7418,62200.0,INLAND +-119.25,35.78,35.0,1927.0,386.0,1371.0,414.0,2.2981,69900.0,INLAND +-119.23,35.78,8.0,1612.0,343.0,1230.0,330.0,2.1806,67200.0,INLAND +-119.23,35.79,31.0,2862.0,606.0,2467.0,600.0,2.3125,62100.0,INLAND +-119.24,35.77,28.0,1737.0,521.0,1764.0,514.0,1.7813,67800.0,INLAND +-119.23,35.77,36.0,3225.0,635.0,2034.0,593.0,2.4044,72500.0,INLAND +-119.23,35.74,16.0,2275.0,659.0,1914.0,614.0,2.033,68400.0,INLAND +-119.23,35.77,26.0,2636.0,468.0,1416.0,485.0,4.1917,84000.0,INLAND +-118.92,35.47,6.0,1755.0,280.0,664.0,254.0,6.2885,216400.0,INLAND +-119.01,35.44,20.0,3458.0,651.0,1465.0,621.0,2.5806,82500.0,INLAND +-118.93,35.44,13.0,1439.0,237.0,557.0,227.0,6.1563,204200.0,INLAND +-118.31,35.74,18.0,2327.0,642.0,799.0,335.0,1.8419,92300.0,INLAND +-118.06,35.68,15.0,1962.0,403.0,730.0,321.0,2.25,67500.0,INLAND +-118.44,35.75,23.0,3166.0,700.0,1097.0,493.0,2.6288,96000.0,INLAND +-118.47,35.72,18.0,4754.0,1075.0,1366.0,690.0,2.0694,81200.0,INLAND +-118.5,35.7,18.0,3303.0,814.0,986.0,522.0,1.5957,101400.0,INLAND +-118.59,35.72,28.0,1491.0,408.0,98.0,48.0,1.4205,90000.0,INLAND +-118.87,35.65,33.0,1504.0,325.0,584.0,223.0,3.4792,94600.0,INLAND +-118.23,35.48,17.0,2354.0,514.0,775.0,380.0,1.8369,59400.0,INLAND +-118.33,35.64,15.0,2966.0,669.0,1007.0,465.0,1.5667,72500.0,INLAND +-118.41,35.63,15.0,5907.0,1257.0,2310.0,1001.0,2.3125,96900.0,INLAND +-118.45,35.62,18.0,2304.0,527.0,782.0,390.0,1.4141,75800.0,INLAND +-118.47,35.64,17.0,2248.0,535.0,927.0,427.0,1.3023,68500.0,INLAND +-118.48,35.61,17.0,4002.0,930.0,1614.0,731.0,1.6236,67300.0,INLAND +-118.45,35.58,16.0,5396.0,1182.0,1802.0,807.0,1.8819,69700.0,INLAND +-118.61,35.47,13.0,2267.0,601.0,756.0,276.0,2.5474,78400.0,INLAND +-117.73,35.73,35.0,2916.0,594.0,1870.0,432.0,3.625,55000.0,INLAND +-117.66,35.63,33.0,2579.0,564.0,1155.0,431.0,2.0441,42100.0,INLAND +-117.67,35.65,18.0,2737.0,589.0,1128.0,533.0,2.8,72000.0,INLAND +-117.68,35.65,15.0,2701.0,576.0,1245.0,513.0,3.3269,81900.0,INLAND +-117.69,35.65,5.0,1131.0,276.0,520.0,232.0,4.0167,87500.0,INLAND +-117.7,35.64,8.0,2683.0,416.0,1154.0,399.0,5.8625,109400.0,INLAND +-117.68,35.64,15.0,3253.0,573.0,1408.0,586.0,5.2043,95700.0,INLAND +-117.67,35.64,6.0,2115.0,342.0,927.0,337.0,6.1935,115700.0,INLAND +-117.67,35.63,32.0,3661.0,787.0,1613.0,706.0,3.0687,63500.0,INLAND +-117.68,35.63,18.0,4334.0,641.0,1777.0,661.0,6.0653,105300.0,INLAND +-117.69,35.63,5.0,3151.0,482.0,1335.0,428.0,5.5773,109000.0,INLAND +-117.7,35.62,18.0,2657.0,496.0,1426.0,483.0,3.5931,71900.0,INLAND +-117.68,35.61,9.0,4241.0,832.0,1929.0,742.0,3.5988,84500.0,INLAND +-117.68,35.6,12.0,1678.0,241.0,765.0,281.0,6.0532,102800.0,INLAND +-117.7,35.6,16.0,2678.0,483.0,1473.0,487.0,3.858,70200.0,INLAND +-117.68,35.62,30.0,2994.0,741.0,1481.0,581.0,2.1458,52400.0,INLAND +-117.64,35.61,10.0,2656.0,506.0,1349.0,501.0,4.25,83200.0,INLAND +-117.66,35.62,11.0,5897.0,1138.0,2728.0,1072.0,4.15,85700.0,INLAND +-117.66,35.61,5.0,5735.0,932.0,2623.0,862.0,4.8494,87200.0,INLAND +-117.66,35.6,14.0,1740.0,391.0,850.0,317.0,2.5812,91700.0,INLAND +-117.76,35.63,12.0,2014.0,372.0,1027.0,356.0,3.9261,101300.0,INLAND +-117.68,35.55,9.0,3811.0,605.0,1518.0,568.0,5.5551,142500.0,INLAND +-117.81,35.65,19.0,1124.0,290.0,598.0,261.0,1.8984,54300.0,INLAND +-117.87,35.73,13.0,2566.0,449.0,1181.0,414.0,4.1518,91800.0,INLAND +-117.84,35.54,11.0,1751.0,316.0,765.0,296.0,5.0762,98000.0,INLAND +-117.74,35.65,15.0,2357.0,484.0,1110.0,442.0,3.1755,81700.0,INLAND +-117.84,35.35,28.0,1913.0,486.0,858.0,371.0,1.9962,50800.0,INLAND +-118.0,35.05,21.0,1739.0,425.0,945.0,362.0,3.4015,86500.0,INLAND +-117.82,35.03,30.0,2555.0,510.0,1347.0,467.0,3.3693,71800.0,INLAND +-117.76,35.22,4.0,18.0,3.0,8.0,6.0,1.625,275000.0,INLAND +-117.79,35.21,4.0,2.0,2.0,6.0,2.0,2.375,137500.0,INLAND +-118.01,35.12,15.0,1926.0,361.0,917.0,316.0,3.3889,68500.0,INLAND +-117.98,35.13,5.0,4849.0,920.0,2504.0,847.0,3.5391,81900.0,INLAND +-117.95,35.13,4.0,2630.0,502.0,1150.0,422.0,4.25,104400.0,INLAND +-117.95,35.08,1.0,83.0,15.0,32.0,15.0,4.875,141700.0,INLAND +-117.98,35.1,4.0,923.0,166.0,352.0,135.0,4.5724,84500.0,INLAND +-117.99,35.16,15.0,2180.0,416.0,960.0,370.0,2.875,87800.0,INLAND +-118.27,34.92,20.0,873.0,175.0,422.0,159.0,2.9583,91700.0,INLAND +-118.34,34.86,11.0,7353.0,1482.0,3571.0,1308.0,2.8097,130000.0,INLAND +-117.68,35.03,28.0,2969.0,648.0,1644.0,570.0,3.4338,54900.0,INLAND +-117.68,34.99,33.0,1589.0,307.0,853.0,272.0,4.2292,64400.0,INLAND +-117.65,35.0,36.0,1184.0,316.0,672.0,241.0,1.9107,39800.0,INLAND +-118.15,34.86,10.0,4597.0,1009.0,2227.0,821.0,2.6149,83500.0,INLAND +-118.17,34.87,9.0,1507.0,293.0,761.0,278.0,3.0184,87900.0,INLAND +-118.19,34.87,2.0,2103.0,389.0,923.0,338.0,5.0553,111100.0,INLAND +-118.17,34.86,21.0,2370.0,540.0,1488.0,554.0,2.7361,83300.0,INLAND +-118.15,35.06,15.0,1069.0,296.0,569.0,263.0,2.0441,73300.0,INLAND +-118.16,35.05,44.0,1297.0,307.0,776.0,278.0,2.5875,68900.0,INLAND +-118.19,35.05,14.0,2992.0,573.0,1631.0,526.0,3.7452,83200.0,INLAND +-118.15,35.04,29.0,1671.0,368.0,821.0,337.0,2.16,56800.0,INLAND +-118.51,35.16,7.0,4371.0,727.0,1932.0,654.0,4.625,136800.0,INLAND +-118.66,35.2,7.0,9664.0,1692.0,3617.0,1370.0,4.0581,162900.0,INLAND +-118.34,35.27,10.0,2939.0,605.0,1167.0,446.0,2.3917,79000.0,INLAND +-118.48,35.14,4.0,8417.0,1657.0,4631.0,1468.0,3.6949,115800.0,INLAND +-118.61,35.08,6.0,3660.0,646.0,1243.0,482.0,3.4911,137200.0,INLAND +-118.61,34.99,11.0,4031.0,766.0,1539.0,564.0,3.8917,120800.0,INLAND +-118.46,35.13,19.0,3109.0,640.0,1457.0,620.0,2.6417,94900.0,INLAND +-118.46,35.12,16.0,4084.0,812.0,2033.0,668.0,3.2405,85500.0,INLAND +-118.43,35.12,8.0,1968.0,376.0,930.0,360.0,3.2632,99800.0,INLAND +-118.44,35.13,34.0,1170.0,290.0,602.0,266.0,1.7917,80000.0,INLAND +-118.44,35.13,21.0,1899.0,447.0,1133.0,391.0,1.8636,67900.0,INLAND +-118.91,35.3,28.0,1793.0,358.0,1233.0,351.0,2.7845,82200.0,INLAND +-118.95,35.26,24.0,1341.0,214.0,667.0,184.0,4.0,94500.0,INLAND +-118.83,35.27,33.0,1190.0,217.0,717.0,196.0,2.6302,81300.0,INLAND +-118.92,35.13,29.0,1297.0,262.0,909.0,253.0,1.9236,106300.0,INLAND +-118.85,35.23,26.0,1639.0,352.0,1222.0,395.0,1.7656,68000.0,INLAND +-118.82,35.23,31.0,2358.0,580.0,2302.0,574.0,1.9688,53900.0,INLAND +-118.83,35.2,17.0,1959.0,484.0,1763.0,453.0,2.1357,53500.0,INLAND +-118.82,35.2,34.0,2185.0,469.0,1910.0,455.0,2.1136,57300.0,INLAND +-118.85,35.2,17.0,2783.0,678.0,2566.0,641.0,1.9907,51200.0,INLAND +-118.91,35.27,29.0,1401.0,317.0,1344.0,306.0,2.0921,61400.0,INLAND +-118.9,35.26,31.0,6145.0,1492.0,5666.0,1457.0,1.9066,54600.0,INLAND +-118.92,35.26,20.0,3815.0,924.0,3450.0,920.0,2.0174,63700.0,INLAND +-118.91,35.24,29.0,2888.0,753.0,2949.0,699.0,1.7716,45500.0,INLAND +-119.69,36.41,38.0,1016.0,202.0,540.0,187.0,2.2885,75000.0,INLAND +-119.57,36.44,30.0,1860.0,337.0,1123.0,347.0,3.4926,94200.0,INLAND +-119.55,36.37,26.0,1912.0,339.0,1002.0,311.0,3.0375,126300.0,INLAND +-119.69,36.38,25.0,1688.0,302.0,879.0,277.0,3.3214,103100.0,INLAND +-119.78,36.37,41.0,831.0,149.0,443.0,146.0,3.1406,100000.0,INLAND +-119.83,36.37,25.0,1549.0,269.0,819.0,272.0,2.7159,101400.0,INLAND +-119.87,36.34,26.0,1414.0,265.0,779.0,249.0,2.9167,83900.0,INLAND +-119.93,36.32,25.0,8363.0,1636.0,7679.0,1580.0,2.0285,106300.0,INLAND +-119.79,36.32,19.0,3252.0,614.0,1971.0,607.0,3.0667,75800.0,INLAND +-119.77,36.32,14.0,3400.0,618.0,1867.0,612.0,3.9926,92500.0,INLAND +-119.78,36.31,14.0,1287.0,291.0,737.0,269.0,3.1667,126400.0,INLAND +-119.77,36.31,14.0,3677.0,863.0,2191.0,785.0,2.6218,69100.0,INLAND +-119.79,36.31,25.0,4984.0,1029.0,2414.0,961.0,2.2937,72300.0,INLAND +-119.77,36.3,24.0,2202.0,471.0,1052.0,439.0,2.1038,62000.0,INLAND +-119.78,36.3,30.0,1846.0,391.0,1255.0,352.0,2.1681,66600.0,INLAND +-119.79,36.3,16.0,1717.0,277.0,903.0,289.0,4.3438,93100.0,INLAND +-119.79,36.29,6.0,1265.0,227.0,764.0,246.0,4.2917,104200.0,INLAND +-119.82,36.32,18.0,942.0,193.0,424.0,174.0,2.0673,87500.0,INLAND +-119.78,36.33,16.0,1006.0,212.0,515.0,200.0,3.2386,112500.0,INLAND +-119.78,36.27,29.0,1871.0,315.0,1066.0,309.0,4.5714,100800.0,INLAND +-119.8,36.29,7.0,479.0,84.0,327.0,103.0,5.1728,107500.0,INLAND +-119.81,36.28,24.0,544.0,112.0,442.0,106.0,3.1071,56100.0,INLAND +-119.72,36.34,33.0,1287.0,214.0,580.0,210.0,3.2019,112500.0,INLAND +-119.72,36.32,40.0,1185.0,221.0,676.0,256.0,2.2721,52600.0,INLAND +-119.7,36.32,40.0,1178.0,244.0,586.0,187.0,2.6477,43500.0,INLAND +-119.73,36.31,20.0,2440.0,433.0,1579.0,400.0,2.8281,60200.0,INLAND +-119.7,36.3,10.0,956.0,201.0,693.0,220.0,2.2895,62000.0,INLAND +-119.67,36.35,10.0,1090.0,164.0,470.0,158.0,4.9432,118800.0,INLAND +-119.65,36.37,4.0,3725.0,783.0,1478.0,600.0,3.5486,148000.0,INLAND +-119.65,36.35,21.0,1745.0,266.0,837.0,292.0,4.3911,107900.0,INLAND +-119.65,36.35,38.0,3148.0,568.0,1378.0,537.0,2.8788,85500.0,INLAND +-119.66,36.35,15.0,1724.0,374.0,947.0,391.0,3.1094,91900.0,INLAND +-119.64,36.36,13.0,2360.0,340.0,1055.0,312.0,5.2134,97400.0,INLAND +-119.64,36.35,23.0,3182.0,563.0,1525.0,585.0,3.8108,90400.0,INLAND +-119.63,36.35,4.0,1684.0,343.0,920.0,324.0,4.2396,90600.0,INLAND +-119.62,36.35,10.0,3674.0,734.0,1864.0,718.0,2.6145,80300.0,INLAND +-119.64,36.35,30.0,1765.0,310.0,746.0,298.0,2.8125,70200.0,INLAND +-119.63,36.34,26.0,1463.0,261.0,699.0,219.0,3.5536,71400.0,INLAND +-119.63,36.33,14.0,2928.0,600.0,1633.0,559.0,1.8385,67500.0,INLAND +-119.61,36.33,32.0,1492.0,284.0,926.0,264.0,3.0139,61500.0,INLAND +-119.63,36.32,36.0,1518.0,287.0,749.0,255.0,2.2333,61000.0,INLAND +-119.66,36.34,32.0,1338.0,276.0,859.0,286.0,2.6397,59700.0,INLAND +-119.65,36.34,46.0,1730.0,337.0,752.0,323.0,1.8529,67200.0,INLAND +-119.65,36.34,47.0,1869.0,357.0,832.0,315.0,3.0846,76100.0,INLAND +-119.64,36.34,32.0,2958.0,670.0,1504.0,627.0,1.8606,56700.0,INLAND +-119.64,36.33,41.0,3095.0,766.0,1852.0,721.0,1.4524,51700.0,INLAND +-119.65,36.33,52.0,1257.0,257.0,624.0,243.0,2.3523,59100.0,INLAND +-119.65,36.33,47.0,1059.0,268.0,693.0,241.0,1.3882,53800.0,INLAND +-119.68,36.32,26.0,592.0,121.0,268.0,116.0,1.7596,120800.0,INLAND +-119.67,36.33,19.0,1241.0,244.0,850.0,237.0,2.9375,81700.0,INLAND +-119.66,36.33,16.0,2048.0,373.0,1052.0,388.0,4.0909,92800.0,INLAND +-119.66,36.33,10.0,1623.0,409.0,988.0,395.0,1.4194,58100.0,INLAND +-119.66,36.32,24.0,2652.0,568.0,1532.0,445.0,2.3256,56800.0,INLAND +-119.68,36.32,28.0,1325.0,276.0,873.0,240.0,2.5833,54400.0,INLAND +-119.68,36.31,12.0,2739.0,535.0,1859.0,498.0,2.9936,60600.0,INLAND +-119.66,36.3,18.0,1147.0,202.0,717.0,212.0,3.3681,70500.0,INLAND +-119.65,36.32,11.0,1294.0,314.0,713.0,290.0,1.5433,50400.0,INLAND +-119.64,36.32,32.0,2205.0,523.0,1772.0,479.0,1.3569,43100.0,INLAND +-119.65,36.3,28.0,941.0,175.0,588.0,180.0,2.3466,53400.0,INLAND +-119.64,36.31,27.0,1513.0,314.0,1071.0,284.0,1.5909,50100.0,INLAND +-119.61,36.31,25.0,1847.0,371.0,1460.0,353.0,1.8839,46300.0,INLAND +-119.57,36.27,20.0,2673.0,452.0,1394.0,449.0,2.625,97400.0,INLAND +-119.69,36.25,35.0,2011.0,349.0,970.0,300.0,2.395,94100.0,INLAND +-119.63,36.18,23.0,207.0,45.0,171.0,50.0,2.4286,100000.0,INLAND +-119.59,36.11,32.0,752.0,159.0,524.0,155.0,2.25,50000.0,INLAND +-119.57,36.09,6.0,2015.0,413.0,992.0,319.0,2.3889,53200.0,INLAND +-119.58,36.1,21.0,1382.0,327.0,1469.0,355.0,1.3967,46500.0,INLAND +-119.56,36.1,29.0,424.0,78.0,284.0,73.0,1.5313,43800.0,INLAND +-119.56,36.1,25.0,1093.0,262.0,893.0,252.0,2.13,50800.0,INLAND +-119.56,36.09,35.0,1648.0,285.0,792.0,265.0,3.2847,64700.0,INLAND +-119.56,36.09,14.0,1267.0,290.0,1077.0,279.0,1.85,52300.0,INLAND +-119.56,36.08,37.0,766.0,189.0,639.0,190.0,1.6607,42100.0,INLAND +-119.58,36.11,21.0,2004.0,385.0,1397.0,398.0,2.2169,61600.0,INLAND +-119.57,36.1,16.0,1461.0,400.0,1201.0,384.0,1.5727,54800.0,INLAND +-119.57,36.1,36.0,1729.0,317.0,737.0,278.0,3.5313,68800.0,INLAND +-119.57,36.1,37.0,1676.0,316.0,707.0,274.0,2.0595,60700.0,INLAND +-119.74,36.15,21.0,1548.0,308.0,1137.0,306.0,2.4688,61300.0,INLAND +-119.9,36.2,43.0,187.0,38.0,106.0,40.0,1.875,137500.0,INLAND +-119.82,36.19,33.0,1293.0,272.0,694.0,229.0,2.0221,52200.0,INLAND +-119.99,36.09,23.0,333.0,92.0,198.0,55.0,0.4999,100000.0,INLAND +-119.96,35.99,25.0,1047.0,270.0,1505.0,286.0,2.0976,47700.0,INLAND +-119.8,36.02,20.0,156.0,39.0,171.0,37.0,3.05,225000.0,INLAND +-120.14,36.04,27.0,2533.0,518.0,1371.0,461.0,2.9708,60900.0,INLAND +-120.12,36.01,18.0,1165.0,334.0,1119.0,308.0,2.2167,48500.0,INLAND +-120.14,36.0,33.0,1726.0,420.0,1371.0,388.0,2.0335,43900.0,INLAND +-120.12,35.99,7.0,2049.0,482.0,1387.0,422.0,2.25,56200.0,INLAND +-120.13,35.87,26.0,48.0,8.0,13.0,8.0,2.375,71300.0,INLAND +-120.0,35.91,16.0,259.0,53.0,131.0,38.0,3.125,62500.0,INLAND +-122.89,39.42,16.0,411.0,114.0,26.0,19.0,0.4999,73500.0,INLAND +-122.9,39.23,39.0,1295.0,240.0,534.0,179.0,3.9519,98900.0,INLAND +-122.91,39.18,43.0,89.0,18.0,86.0,27.0,2.0208,72500.0,INLAND +-122.91,39.17,44.0,202.0,42.0,142.0,39.0,4.35,68300.0,INLAND +-122.9,39.17,45.0,1314.0,277.0,649.0,232.0,2.575,73600.0,INLAND +-122.88,39.14,20.0,1125.0,231.0,521.0,196.0,2.2188,106300.0,INLAND +-123.07,39.12,24.0,1098.0,193.0,353.0,145.0,3.8333,92600.0,<1H OCEAN +-122.95,39.13,17.0,380.0,69.0,225.0,72.0,3.25,137500.0,INLAND +-122.89,39.11,10.0,1588.0,333.0,585.0,254.0,2.2551,71100.0,INLAND +-122.9,39.09,15.0,2483.0,544.0,835.0,380.0,1.9141,143200.0,INLAND +-122.92,39.08,24.0,341.0,64.0,146.0,57.0,4.0,166300.0,INLAND +-122.94,39.1,18.0,681.0,120.0,272.0,105.0,2.8906,140600.0,INLAND +-122.99,39.02,14.0,1582.0,301.0,851.0,273.0,3.45,164100.0,<1H OCEAN +-122.91,39.07,21.0,2202.0,484.0,1000.0,381.0,2.4423,102300.0,INLAND +-122.91,39.06,21.0,1236.0,238.0,601.0,261.0,1.939,100300.0,INLAND +-122.92,39.05,16.0,1548.0,295.0,605.0,250.0,3.5652,119000.0,INLAND +-122.91,39.05,20.0,1128.0,229.0,621.0,210.0,3.2216,93500.0,INLAND +-122.92,39.05,38.0,3131.0,624.0,1591.0,568.0,2.5457,80700.0,INLAND +-122.91,39.05,27.0,789.0,208.0,295.0,108.0,3.7667,95000.0,INLAND +-122.91,39.03,14.0,2374.0,557.0,723.0,427.0,1.3532,95800.0,INLAND +-122.7,39.14,13.0,532.0,111.0,214.0,62.0,3.3929,108300.0,INLAND +-122.87,39.13,15.0,1927.0,427.0,810.0,321.0,1.6369,86500.0,INLAND +-122.86,39.08,24.0,3127.0,674.0,1015.0,448.0,2.0417,78800.0,INLAND +-122.83,39.09,26.0,2191.0,495.0,679.0,371.0,1.4679,94700.0,INLAND +-122.79,39.09,20.0,1798.0,395.0,685.0,331.0,1.625,66800.0,INLAND +-122.8,39.08,17.0,1880.0,467.0,798.0,342.0,1.4676,65000.0,INLAND +-122.79,39.08,23.0,952.0,200.0,321.0,128.0,1.5208,89000.0,INLAND +-122.78,39.05,15.0,1601.0,323.0,661.0,269.0,2.6181,108900.0,INLAND +-122.53,39.09,11.0,1264.0,271.0,370.0,177.0,1.3,69700.0,INLAND +-122.69,39.04,9.0,254.0,50.0,66.0,29.0,2.7639,112500.0,INLAND +-122.73,39.04,23.0,1618.0,395.0,425.0,244.0,1.9833,111500.0,INLAND +-122.69,39.02,27.0,2199.0,527.0,744.0,316.0,2.1094,72400.0,INLAND +-122.66,39.03,27.0,1446.0,329.0,594.0,255.0,1.165,53300.0,INLAND +-122.66,39.02,16.0,3715.0,810.0,943.0,510.0,1.7446,109400.0,INLAND +-122.7,39.0,18.0,793.0,148.0,186.0,59.0,2.3125,162500.0,INLAND +-122.7,38.99,18.0,1177.0,224.0,181.0,105.0,2.3558,134700.0,INLAND +-122.65,38.99,16.0,4279.0,951.0,1596.0,666.0,1.8571,75900.0,INLAND +-122.52,38.99,16.0,975.0,219.0,337.0,155.0,1.6607,77800.0,INLAND +-122.68,38.98,27.0,2300.0,508.0,526.0,254.0,2.1838,109700.0,INLAND +-122.65,38.97,32.0,1856.0,472.0,703.0,292.0,1.1912,60000.0,INLAND +-122.63,38.96,17.0,1708.0,459.0,633.0,312.0,1.75,64000.0,INLAND +-122.62,38.95,19.0,2230.0,538.0,832.0,359.0,1.6865,58800.0,INLAND +-122.62,38.94,14.0,1731.0,400.0,638.0,282.0,2.3179,57500.0,INLAND +-122.61,38.93,14.0,231.0,36.0,108.0,31.0,4.3897,71300.0,INLAND +-122.6,38.93,16.0,1657.0,390.0,572.0,301.0,1.4767,62000.0,INLAND +-122.62,38.96,16.0,1914.0,446.0,828.0,332.0,2.0577,69000.0,INLAND +-122.63,38.96,20.0,2507.0,577.0,1072.0,457.0,2.3083,60200.0,INLAND +-122.65,38.96,27.0,2143.0,580.0,898.0,367.0,1.6769,63200.0,INLAND +-122.64,38.96,29.0,883.0,187.0,326.0,136.0,1.7273,58200.0,INLAND +-122.64,38.95,28.0,1503.0,370.0,522.0,268.0,1.2029,68900.0,INLAND +-122.63,38.95,11.0,686.0,127.0,246.0,86.0,1.7083,77300.0,INLAND +-122.63,38.94,25.0,661.0,144.0,192.0,93.0,1.7566,49000.0,INLAND +-122.63,38.94,18.0,3844.0,969.0,1832.0,845.0,1.125,81800.0,INLAND +-122.62,38.94,13.0,524.0,129.0,215.0,90.0,1.5455,55000.0,INLAND +-122.7,38.97,17.0,2554.0,540.0,723.0,319.0,3.2375,114200.0,INLAND +-122.75,39.01,17.0,4162.0,967.0,889.0,414.0,3.4187,200500.0,INLAND +-122.79,39.02,23.0,642.0,203.0,265.0,84.0,1.8833,96900.0,INLAND +-122.78,38.97,11.0,5175.0,971.0,2144.0,792.0,3.0466,97300.0,INLAND +-122.69,38.94,9.0,1245.0,234.0,517.0,187.0,3.125,93400.0,INLAND +-122.71,38.91,20.0,41.0,18.0,94.0,10.0,1.375,55000.0,INLAND +-122.86,39.05,20.0,1592.0,327.0,647.0,253.0,2.5326,136800.0,INLAND +-122.85,39.0,20.0,1580.0,318.0,753.0,252.0,1.8704,88500.0,INLAND +-122.83,38.99,15.0,289.0,49.0,191.0,54.0,1.6833,113900.0,INLAND +-122.83,38.98,17.0,1383.0,347.0,719.0,296.0,1.6164,77800.0,INLAND +-122.84,38.98,21.0,939.0,176.0,556.0,178.0,1.7196,75000.0,INLAND +-122.92,38.97,20.0,2067.0,384.0,904.0,333.0,2.9934,134200.0,<1H OCEAN +-122.89,38.93,20.0,1214.0,247.0,504.0,223.0,2.7188,105700.0,<1H OCEAN +-122.83,38.96,15.0,1318.0,296.0,567.0,276.0,1.8692,93800.0,INLAND +-122.77,38.92,26.0,712.0,140.0,293.0,100.0,4.0119,119400.0,INLAND +-122.83,38.89,11.0,640.0,134.0,268.0,90.0,3.4514,100000.0,<1H OCEAN +-122.72,38.88,29.0,2781.0,,890.0,310.0,1.9906,96600.0,INLAND +-122.74,38.83,12.0,4515.0,909.0,1554.0,528.0,3.3531,90800.0,<1H OCEAN +-122.48,38.9,10.0,304.0,63.0,161.0,61.0,2.1964,112500.0,INLAND +-122.59,38.92,15.0,1410.0,329.0,599.0,273.0,2.1953,75000.0,INLAND +-122.6,38.9,23.0,292.0,56.0,92.0,41.0,2.9583,91700.0,INLAND +-122.62,38.92,13.0,520.0,115.0,249.0,109.0,1.8417,84700.0,INLAND +-122.65,38.92,30.0,70.0,38.0,20.0,13.0,4.125,112500.0,INLAND +-122.64,38.87,16.0,1177.0,240.0,519.0,199.0,1.5739,73500.0,INLAND +-122.5,38.82,12.0,2394.0,443.0,877.0,341.0,2.5625,109200.0,INLAND +-122.51,38.76,9.0,2589.0,482.0,1050.0,374.0,4.0435,132600.0,INLAND +-122.55,38.81,7.0,3639.0,637.0,1027.0,421.0,3.8831,132100.0,INLAND +-122.59,38.78,15.0,764.0,145.0,366.0,143.0,3.375,103100.0,INLAND +-122.66,38.81,22.0,852.0,176.0,461.0,142.0,3.4375,83300.0,INLAND +-122.68,38.76,29.0,994.0,226.0,302.0,117.0,2.3125,67900.0,INLAND +-122.62,38.73,21.0,1425.0,323.0,727.0,287.0,2.1474,85300.0,INLAND +-122.64,38.71,20.0,531.0,126.0,231.0,96.0,2.625,89600.0,INLAND +-122.52,38.7,26.0,102.0,17.0,43.0,13.0,0.536,87500.0,INLAND +-121.11,41.07,26.0,1707.0,308.0,761.0,250.0,2.7188,48100.0,INLAND +-120.96,41.12,29.0,779.0,136.0,364.0,123.0,2.5,59200.0,INLAND +-121.07,40.85,17.0,976.0,202.0,511.0,175.0,3.6641,80800.0,INLAND +-120.38,40.98,27.0,777.0,185.0,318.0,115.0,1.6833,40000.0,INLAND +-120.35,40.63,33.0,240.0,49.0,63.0,22.0,3.625,200000.0,INLAND +-120.77,40.65,11.0,2635.0,667.0,280.0,132.0,1.7214,118300.0,INLAND +-121.02,40.51,17.0,890.0,167.0,406.0,154.0,3.3036,78300.0,INLAND +-120.96,40.28,19.0,683.0,139.0,302.0,111.0,2.5,64100.0,INLAND +-121.03,40.35,52.0,5486.0,1044.0,1977.0,754.0,2.1833,49500.0,INLAND +-120.67,40.5,15.0,5343.0,,2503.0,902.0,3.5962,85900.0,INLAND +-120.57,40.43,15.0,2045.0,461.0,1121.0,402.0,2.6902,71500.0,INLAND +-120.66,40.42,35.0,1450.0,325.0,717.0,297.0,2.5074,66400.0,INLAND +-120.65,40.42,39.0,3240.0,652.0,1467.0,621.0,2.1875,64300.0,INLAND +-120.66,40.41,52.0,2081.0,478.0,1051.0,419.0,2.2992,70200.0,INLAND +-120.64,40.41,50.0,1741.0,424.0,987.0,383.0,1.5066,59300.0,INLAND +-120.71,40.36,19.0,4462.0,828.0,2229.0,777.0,3.5536,105700.0,INLAND +-120.58,40.37,16.0,3412.0,667.0,1873.0,590.0,2.2661,61800.0,INLAND +-120.42,40.38,26.0,1652.0,313.0,762.0,280.0,2.4757,85600.0,INLAND +-120.36,40.45,19.0,689.0,143.0,355.0,127.0,1.7333,70000.0,INLAND +-120.51,40.41,36.0,36.0,8.0,4198.0,7.0,5.5179,67500.0,INLAND +-120.54,40.29,17.0,3391.0,623.0,1529.0,571.0,3.4028,91000.0,INLAND +-120.49,40.31,16.0,1821.0,360.0,969.0,359.0,3.4643,85100.0,INLAND +-120.37,40.17,21.0,789.0,141.0,406.0,146.0,2.1198,73500.0,INLAND +-120.2,40.26,26.0,2399.0,518.0,1037.0,443.0,2.6765,47600.0,INLAND +-120.09,39.92,19.0,2335.0,518.0,1028.0,383.0,1.7267,60700.0,INLAND +-118.27,34.27,27.0,5205.0,859.0,2363.0,888.0,6.1946,276100.0,<1H OCEAN +-118.28,34.26,32.0,1079.0,207.0,486.0,167.0,4.9833,213000.0,<1H OCEAN +-118.29,34.26,33.0,3177.0,713.0,1845.0,612.0,4.008,191100.0,<1H OCEAN +-118.3,34.26,37.0,2824.0,633.0,1619.0,573.0,3.5568,184500.0,<1H OCEAN +-118.3,34.26,42.0,2186.0,423.0,1145.0,439.0,4.81,191900.0,<1H OCEAN +-118.28,34.25,35.0,2045.0,450.0,1166.0,407.0,3.5214,197600.0,<1H OCEAN +-118.28,34.25,29.0,2559.0,,1886.0,769.0,2.6036,162100.0,<1H OCEAN +-118.29,34.25,19.0,1988.0,594.0,1399.0,527.0,2.4727,175000.0,<1H OCEAN +-118.29,34.25,8.0,5568.0,1514.0,3565.0,1374.0,3.0795,161500.0,<1H OCEAN +-118.27,34.25,37.0,2489.0,454.0,1215.0,431.0,5.0234,257600.0,<1H OCEAN +-118.27,34.25,35.0,2091.0,360.0,879.0,326.0,4.4485,261900.0,<1H OCEAN +-118.27,34.24,30.0,2180.0,369.0,1050.0,390.0,6.3688,277600.0,<1H OCEAN +-118.27,34.25,35.0,779.0,143.0,371.0,150.0,4.6635,230100.0,<1H OCEAN +-118.27,34.25,39.0,699.0,150.0,358.0,143.0,4.4375,195800.0,<1H OCEAN +-118.28,34.24,32.0,2542.0,526.0,1278.0,493.0,4.45,263600.0,<1H OCEAN +-118.28,34.24,29.0,3390.0,580.0,1543.0,576.0,5.6184,316900.0,<1H OCEAN +-118.3,34.25,36.0,1300.0,304.0,688.0,261.0,3.1523,176700.0,<1H OCEAN +-118.33,34.24,31.0,6434.0,1188.0,3540.0,1131.0,4.2639,293300.0,<1H OCEAN +-118.35,34.22,19.0,9259.0,1653.0,3963.0,1595.0,5.997,228700.0,<1H OCEAN +-118.35,34.22,30.0,1260.0,222.0,638.0,229.0,4.1302,258300.0,<1H OCEAN +-118.35,34.21,39.0,1470.0,312.0,1047.0,284.0,3.275,181400.0,<1H OCEAN +-118.35,34.21,42.0,1073.0,220.0,804.0,226.0,3.75,172600.0,<1H OCEAN +-118.31,34.28,34.0,3258.0,610.0,1810.0,633.0,5.1145,219900.0,<1H OCEAN +-118.31,34.27,35.0,1446.0,274.0,759.0,291.0,6.0808,215600.0,<1H OCEAN +-118.3,34.26,43.0,1510.0,310.0,809.0,277.0,3.599,176500.0,<1H OCEAN +-118.3,34.26,40.0,1065.0,214.0,605.0,183.0,4.1964,185900.0,<1H OCEAN +-118.31,34.26,38.0,2264.0,460.0,1124.0,388.0,4.2685,189600.0,<1H OCEAN +-118.31,34.26,41.0,1297.0,327.0,733.0,315.0,3.0583,160300.0,<1H OCEAN +-118.31,34.26,34.0,1797.0,363.0,948.0,363.0,4.1339,187300.0,<1H OCEAN +-118.32,34.26,32.0,3690.0,791.0,1804.0,715.0,4.4875,222700.0,<1H OCEAN +-118.35,34.28,30.0,3214.0,513.0,1700.0,533.0,4.6944,248200.0,<1H OCEAN +-118.33,34.27,29.0,3034.0,732.0,1776.0,702.0,3.1349,230200.0,<1H OCEAN +-118.35,34.27,32.0,604.0,108.0,314.0,113.0,6.2037,205400.0,<1H OCEAN +-118.34,34.26,37.0,1776.0,301.0,702.0,265.0,5.2661,314900.0,<1H OCEAN +-118.35,34.25,34.0,2795.0,460.0,1267.0,443.0,6.1464,354400.0,<1H OCEAN +-118.36,34.26,34.0,3677.0,573.0,1598.0,568.0,6.838,378000.0,<1H OCEAN +-118.3,34.26,28.0,1643.0,489.0,1142.0,458.0,3.1607,200600.0,<1H OCEAN +-118.3,34.25,44.0,1442.0,285.0,859.0,292.0,4.5833,197300.0,<1H OCEAN +-118.31,34.26,37.0,1444.0,246.0,624.0,239.0,5.76,239400.0,<1H OCEAN +-118.31,34.26,36.0,1882.0,453.0,1005.0,409.0,3.8,217100.0,<1H OCEAN +-118.32,34.26,24.0,5106.0,1010.0,2310.0,957.0,4.4375,191500.0,<1H OCEAN +-118.39,34.28,24.0,4694.0,820.0,3566.0,777.0,4.4818,166200.0,<1H OCEAN +-118.38,34.28,22.0,4428.0,825.0,3152.0,836.0,4.7932,166300.0,<1H OCEAN +-118.4,34.28,16.0,6573.0,1480.0,6161.0,1473.0,3.3304,154900.0,<1H OCEAN +-118.38,34.27,8.0,3248.0,847.0,2608.0,731.0,2.8214,158300.0,<1H OCEAN +-118.41,34.29,35.0,1008.0,204.0,1162.0,215.0,3.35,147600.0,<1H OCEAN +-118.41,34.29,32.0,1591.0,320.0,1818.0,306.0,4.2969,145800.0,<1H OCEAN +-118.42,34.28,29.0,1271.0,272.0,1338.0,266.0,4.125,150000.0,<1H OCEAN +-118.41,34.28,32.0,2574.0,531.0,2609.0,472.0,3.7566,146700.0,<1H OCEAN +-118.4,34.28,22.0,3517.0,810.0,3134.0,847.0,2.6652,164800.0,<1H OCEAN +-118.42,34.28,35.0,822.0,200.0,1197.0,203.0,3.2865,133300.0,<1H OCEAN +-118.42,34.28,34.0,1999.0,427.0,2391.0,439.0,2.8,144300.0,<1H OCEAN +-118.42,34.27,33.0,1209.0,341.0,1097.0,283.0,1.6295,134300.0,<1H OCEAN +-118.42,34.27,33.0,937.0,216.0,1216.0,212.0,3.3214,131300.0,<1H OCEAN +-118.42,34.27,35.0,674.0,153.0,808.0,173.0,2.6667,147800.0,<1H OCEAN +-118.43,34.28,30.0,1384.0,308.0,2054.0,301.0,3.0132,142600.0,<1H OCEAN +-118.43,34.27,31.0,1130.0,276.0,1533.0,269.0,4.2353,156800.0,<1H OCEAN +-118.43,34.27,36.0,1002.0,250.0,1312.0,249.0,3.024,148000.0,<1H OCEAN +-118.42,34.27,37.0,1024.0,246.0,1371.0,239.0,3.225,147500.0,<1H OCEAN +-118.43,34.26,30.0,1246.0,373.0,1990.0,369.0,3.5104,140900.0,<1H OCEAN +-118.43,34.26,37.0,1269.0,348.0,1835.0,335.0,3.2583,147200.0,<1H OCEAN +-118.44,34.27,35.0,777.0,187.0,1022.0,186.0,3.4,139600.0,<1H OCEAN +-118.43,34.26,43.0,729.0,172.0,935.0,174.0,2.9519,140900.0,<1H OCEAN +-118.42,34.25,37.0,1545.0,341.0,1909.0,352.0,3.6791,148100.0,<1H OCEAN +-118.43,34.25,35.0,1447.0,335.0,1630.0,306.0,2.9205,143100.0,<1H OCEAN +-118.42,34.26,26.0,1788.0,521.0,2582.0,484.0,2.1062,136400.0,<1H OCEAN +-118.41,34.26,38.0,870.0,205.0,1065.0,222.0,2.5313,136100.0,<1H OCEAN +-118.42,34.26,36.0,973.0,221.0,1086.0,218.0,3.4519,143300.0,<1H OCEAN +-118.42,34.26,37.0,1789.0,424.0,2279.0,411.0,3.9,138600.0,<1H OCEAN +-118.41,34.27,38.0,858.0,203.0,1250.0,204.0,2.9219,137900.0,<1H OCEAN +-118.42,34.27,35.0,2700.0,702.0,3444.0,679.0,1.4867,124000.0,<1H OCEAN +-118.4,34.26,13.0,4379.0,872.0,2560.0,853.0,4.2538,154300.0,<1H OCEAN +-118.4,34.25,13.0,1872.0,497.0,1927.0,432.0,2.2019,134200.0,<1H OCEAN +-118.41,34.25,19.0,280.0,84.0,483.0,87.0,1.95,137500.0,<1H OCEAN +-118.41,34.25,33.0,827.0,192.0,981.0,184.0,2.6429,143100.0,<1H OCEAN +-118.41,34.25,36.0,1146.0,259.0,1173.0,272.0,3.6016,153800.0,<1H OCEAN +-118.41,34.25,18.0,3447.0,857.0,3663.0,817.0,3.2284,157100.0,<1H OCEAN +-118.42,34.24,17.0,2049.0,548.0,2243.0,541.0,2.525,163700.0,<1H OCEAN +-118.42,34.25,36.0,1430.0,331.0,1502.0,312.0,3.6292,145200.0,<1H OCEAN +-118.43,34.32,34.0,2657.0,515.0,1948.0,532.0,4.233,157400.0,<1H OCEAN +-118.43,34.33,18.0,5891.0,920.0,2882.0,911.0,5.901,235600.0,<1H OCEAN +-118.44,34.32,14.0,6235.0,1286.0,3568.0,1190.0,4.1724,211600.0,<1H OCEAN +-118.42,34.31,19.0,6755.0,1443.0,4205.0,1395.0,3.9583,163200.0,<1H OCEAN +-118.42,34.3,29.0,3334.0,712.0,2919.0,718.0,3.6548,180300.0,<1H OCEAN +-118.41,34.32,18.0,6572.0,1105.0,3473.0,1067.0,5.2987,203400.0,<1H OCEAN +-118.41,34.3,28.0,3187.0,569.0,2205.0,559.0,5.1668,187400.0,<1H OCEAN +-118.42,34.32,30.0,3027.0,604.0,1970.0,590.0,4.3409,156000.0,<1H OCEAN +-118.44,34.31,14.0,4151.0,941.0,3163.0,915.0,4.0301,154300.0,<1H OCEAN +-118.44,34.31,22.0,3182.0,822.0,2661.0,746.0,2.7472,160100.0,<1H OCEAN +-118.44,34.3,38.0,1595.0,314.0,1181.0,327.0,3.4,155500.0,<1H OCEAN +-118.45,34.31,9.0,1739.0,358.0,820.0,323.0,4.0556,182500.0,<1H OCEAN +-118.45,34.32,23.0,3481.0,641.0,1952.0,682.0,4.26,189400.0,<1H OCEAN +-118.46,34.32,10.0,5777.0,1112.0,2917.0,1056.0,4.1514,194100.0,<1H OCEAN +-118.45,34.31,28.0,1532.0,287.0,977.0,275.0,4.4773,173100.0,<1H OCEAN +-118.46,34.3,32.0,2424.0,476.0,2291.0,419.0,4.0337,158500.0,<1H OCEAN +-118.46,34.31,24.0,2920.0,601.0,1460.0,598.0,4.2708,218200.0,<1H OCEAN +-118.47,34.32,13.0,2664.0,518.0,1468.0,521.0,4.8988,325200.0,<1H OCEAN +-118.48,34.33,9.0,2384.0,395.0,1697.0,402.0,6.0891,270100.0,<1H OCEAN +-118.48,34.31,31.0,1091.0,256.0,892.0,238.0,3.0,172400.0,<1H OCEAN +-118.47,34.3,16.0,2495.0,551.0,2314.0,567.0,3.6736,192200.0,<1H OCEAN +-118.46,34.29,24.0,3668.0,890.0,3151.0,810.0,3.0526,183300.0,<1H OCEAN +-118.47,34.29,18.0,4256.0,987.0,3401.0,955.0,4.2935,190000.0,<1H OCEAN +-118.49,34.29,26.0,4516.0,611.0,1714.0,581.0,9.2873,431800.0,<1H OCEAN +-118.49,34.28,27.0,2535.0,389.0,1071.0,386.0,6.8695,319400.0,<1H OCEAN +-118.49,34.28,31.0,3508.0,585.0,1957.0,588.0,6.6458,285500.0,<1H OCEAN +-118.49,34.31,25.0,1024.0,145.0,357.0,147.0,7.0598,356300.0,<1H OCEAN +-118.52,34.32,18.0,7498.0,976.0,3189.0,955.0,8.1248,374000.0,<1H OCEAN +-118.51,34.3,24.0,6145.0,868.0,2710.0,875.0,7.5078,344000.0,<1H OCEAN +-118.51,34.28,29.0,4239.0,653.0,1890.0,631.0,6.3911,301700.0,<1H OCEAN +-118.51,34.29,29.0,1287.0,194.0,525.0,187.0,6.4171,319300.0,<1H OCEAN +-118.52,34.29,28.0,2272.0,320.0,868.0,312.0,7.7464,474600.0,<1H OCEAN +-118.52,34.3,17.0,4542.0,621.0,2144.0,597.0,8.8467,450700.0,<1H OCEAN +-118.45,34.3,27.0,2676.0,,2661.0,623.0,4.3047,152100.0,<1H OCEAN +-118.45,34.3,35.0,4085.0,919.0,3988.0,906.0,3.4812,160200.0,<1H OCEAN +-118.54,34.28,18.0,5481.0,780.0,2477.0,764.0,6.7248,377200.0,<1H OCEAN +-118.55,34.28,16.0,8879.0,,3468.0,1200.0,8.1125,428600.0,<1H OCEAN +-118.54,34.28,10.0,7665.0,999.0,3517.0,998.0,10.8805,500001.0,<1H OCEAN +-118.54,34.3,22.0,4423.0,622.0,1995.0,582.0,8.2159,376200.0,<1H OCEAN +-118.57,34.29,4.0,6995.0,1151.0,2907.0,1089.0,7.0808,341200.0,<1H OCEAN +-118.45,34.28,38.0,1527.0,332.0,1303.0,340.0,3.5714,152000.0,<1H OCEAN +-118.46,34.28,23.0,1663.0,302.0,1242.0,283.0,5.5931,217600.0,<1H OCEAN +-118.47,34.27,33.0,1549.0,264.0,881.0,289.0,5.1408,222900.0,<1H OCEAN +-118.48,34.28,35.0,2132.0,368.0,1128.0,341.0,5.3107,227100.0,<1H OCEAN +-118.48,34.28,35.0,1511.0,274.0,873.0,254.0,5.5608,226700.0,<1H OCEAN +-118.47,34.27,17.0,1444.0,282.0,523.0,270.0,2.7353,192400.0,<1H OCEAN +-118.47,34.27,35.0,1150.0,185.0,741.0,178.0,5.741,220600.0,<1H OCEAN +-118.48,34.27,34.0,1231.0,222.0,702.0,222.0,4.9323,223700.0,<1H OCEAN +-118.48,34.27,33.0,2649.0,449.0,1303.0,437.0,4.9955,216800.0,<1H OCEAN +-118.45,34.27,33.0,1194.0,229.0,839.0,230.0,3.705,185800.0,<1H OCEAN +-118.45,34.27,35.0,1579.0,300.0,1012.0,265.0,5.1296,195900.0,<1H OCEAN +-118.46,34.27,30.0,1576.0,282.0,1004.0,284.0,4.8015,179700.0,<1H OCEAN +-118.46,34.27,28.0,1865.0,463.0,1182.0,440.0,2.6193,172300.0,<1H OCEAN +-118.44,34.27,36.0,1111.0,275.0,1333.0,266.0,3.5347,158100.0,<1H OCEAN +-118.44,34.27,29.0,1701.0,419.0,1616.0,371.0,3.3603,142400.0,<1H OCEAN +-118.45,34.26,35.0,1724.0,311.0,992.0,315.0,4.8359,195600.0,<1H OCEAN +-118.45,34.25,36.0,1453.0,270.0,808.0,275.0,4.3839,204600.0,<1H OCEAN +-118.45,34.26,35.0,1637.0,300.0,894.0,302.0,4.175,209600.0,<1H OCEAN +-118.46,34.26,33.0,1358.0,247.0,738.0,235.0,5.0947,210300.0,<1H OCEAN +-118.46,34.26,36.0,1394.0,254.0,761.0,262.0,4.9485,217100.0,<1H OCEAN +-118.46,34.25,33.0,2202.0,433.0,1135.0,407.0,4.2143,224200.0,<1H OCEAN +-118.46,34.25,32.0,2217.0,422.0,1064.0,427.0,3.6989,208600.0,<1H OCEAN +-118.47,34.26,34.0,1300.0,289.0,650.0,291.0,3.8875,199200.0,<1H OCEAN +-118.47,34.26,35.0,1898.0,344.0,1123.0,347.0,5.5792,218400.0,<1H OCEAN +-118.48,34.26,36.0,1770.0,296.0,938.0,304.0,5.749,238000.0,<1H OCEAN +-118.49,34.26,27.0,2722.0,468.0,1164.0,419.0,4.6591,239900.0,<1H OCEAN +-118.47,34.25,34.0,1732.0,399.0,1120.0,401.0,4.1492,195700.0,<1H OCEAN +-118.48,34.25,36.0,1951.0,395.0,1040.0,375.0,5.1619,195300.0,<1H OCEAN +-118.48,34.25,35.0,1442.0,276.0,795.0,268.0,4.9688,216900.0,<1H OCEAN +-118.48,34.25,35.0,1865.0,335.0,1074.0,337.0,5.1068,223300.0,<1H OCEAN +-118.49,34.25,33.0,2088.0,383.0,960.0,362.0,4.3333,232900.0,<1H OCEAN +-118.49,34.27,34.0,4877.0,815.0,2521.0,781.0,5.5714,225900.0,<1H OCEAN +-118.49,34.27,33.0,3047.0,527.0,1578.0,507.0,4.58,236200.0,<1H OCEAN +-118.5,34.27,35.0,2235.0,390.0,1148.0,416.0,4.869,221600.0,<1H OCEAN +-118.51,34.28,34.0,3580.0,565.0,1694.0,524.0,5.4065,243800.0,<1H OCEAN +-118.52,34.28,33.0,1975.0,271.0,801.0,287.0,7.8193,379600.0,<1H OCEAN +-118.51,34.27,34.0,3787.0,771.0,1966.0,738.0,4.055,222500.0,<1H OCEAN +-118.51,34.27,36.0,2276.0,429.0,1001.0,419.0,4.1042,252100.0,<1H OCEAN +-118.52,34.27,36.0,3204.0,538.0,1499.0,499.0,5.5649,271200.0,<1H OCEAN +-118.53,34.27,32.0,1931.0,298.0,948.0,314.0,5.3847,329200.0,<1H OCEAN +-118.53,34.26,18.0,3674.0,,1590.0,550.0,8.176,308400.0,<1H OCEAN +-118.54,34.26,22.0,5303.0,838.0,2372.0,807.0,5.6912,311800.0,<1H OCEAN +-118.54,34.27,28.0,2309.0,300.0,931.0,302.0,6.7415,348200.0,<1H OCEAN +-118.53,34.27,33.0,1927.0,305.0,896.0,293.0,5.634,320500.0,<1H OCEAN +-118.54,34.26,23.0,4960.0,592.0,1929.0,586.0,10.9052,500001.0,<1H OCEAN +-118.55,34.26,21.0,4018.0,536.0,1508.0,529.0,8.203,445400.0,<1H OCEAN +-118.55,34.27,25.0,4919.0,661.0,2183.0,625.0,8.1356,352800.0,<1H OCEAN +-118.5,34.26,33.0,2831.0,510.0,1340.0,504.0,4.8316,237300.0,<1H OCEAN +-118.52,34.26,21.0,8850.0,2139.0,4717.0,1979.0,3.7816,254200.0,<1H OCEAN +-118.51,34.26,29.0,2472.0,354.0,1109.0,397.0,5.5433,332500.0,<1H OCEAN +-118.52,34.25,11.0,7849.0,1664.0,3561.0,1500.0,4.6625,290900.0,<1H OCEAN +-118.49,34.26,25.0,8389.0,1872.0,4483.0,1747.0,3.5497,261300.0,<1H OCEAN +-118.49,34.25,28.0,4054.0,712.0,2164.0,746.0,5.0,258000.0,<1H OCEAN +-118.57,34.27,20.0,7384.0,845.0,2795.0,872.0,9.6047,500001.0,<1H OCEAN +-118.59,34.26,20.0,8146.0,1131.0,3562.0,1054.0,7.167,357100.0,<1H OCEAN +-118.61,34.24,17.0,5406.0,895.0,2337.0,882.0,6.0137,375900.0,<1H OCEAN +-118.63,34.24,9.0,4759.0,924.0,1884.0,915.0,4.8333,277200.0,<1H OCEAN +-118.62,34.26,15.0,10860.0,1653.0,4178.0,1581.0,6.3249,262100.0,<1H OCEAN +-118.6,34.26,18.0,6154.0,1070.0,3010.0,1034.0,5.6392,271500.0,<1H OCEAN +-118.61,34.25,16.0,8295.0,1506.0,3903.0,1451.0,5.5111,276600.0,<1H OCEAN +-118.63,34.22,18.0,1376.0,225.0,670.0,205.0,6.5146,277600.0,<1H OCEAN +-118.64,34.22,25.0,2762.0,410.0,1166.0,439.0,6.8643,333700.0,<1H OCEAN +-118.66,34.23,18.0,897.0,142.0,263.0,110.0,6.1288,350000.0,<1H OCEAN +-118.61,34.23,26.0,3727.0,572.0,1724.0,530.0,6.1419,327300.0,<1H OCEAN +-118.61,34.22,24.0,5256.0,758.0,2474.0,780.0,7.3252,333700.0,<1H OCEAN +-118.6,34.23,19.0,8866.0,2355.0,5005.0,2194.0,3.2564,230300.0,<1H OCEAN +-118.59,34.23,17.0,6592.0,1525.0,4459.0,1463.0,3.0347,254500.0,<1H OCEAN +-118.56,34.25,31.0,1962.0,243.0,697.0,242.0,8.565,500001.0,<1H OCEAN +-118.56,34.24,23.0,2980.0,362.0,1208.0,378.0,8.1714,500001.0,<1H OCEAN +-118.57,34.25,34.0,5098.0,778.0,2239.0,778.0,5.6149,273100.0,<1H OCEAN +-118.58,34.24,26.0,3239.0,647.0,1529.0,590.0,3.2426,236900.0,<1H OCEAN +-118.59,34.25,15.0,9716.0,2387.0,4992.0,2225.0,3.6231,193300.0,<1H OCEAN +-118.57,34.25,20.0,4679.0,609.0,1945.0,609.0,8.7471,419900.0,<1H OCEAN +-118.58,34.25,23.0,4883.0,769.0,2119.0,725.0,5.521,280800.0,<1H OCEAN +-118.56,34.23,36.0,3215.0,529.0,1710.0,539.0,5.5126,248400.0,<1H OCEAN +-118.56,34.23,36.0,2406.0,432.0,1242.0,454.0,4.6944,221800.0,<1H OCEAN +-118.57,34.23,22.0,3275.0,648.0,1746.0,585.0,4.9676,221900.0,<1H OCEAN +-118.58,34.23,29.0,3907.0,773.0,2037.0,727.0,4.1023,230200.0,<1H OCEAN +-118.59,34.23,14.0,4407.0,1209.0,2676.0,1128.0,3.4091,168800.0,<1H OCEAN +-118.58,34.23,35.0,1917.0,314.0,1019.0,340.0,4.8929,234900.0,<1H OCEAN +-118.58,34.22,35.0,1969.0,339.0,950.0,340.0,4.875,230400.0,<1H OCEAN +-118.59,34.22,17.0,6015.0,1464.0,3056.0,1347.0,4.0077,229000.0,<1H OCEAN +-118.51,34.25,24.0,4338.0,558.0,1514.0,549.0,8.8612,500001.0,<1H OCEAN +-118.51,34.24,31.0,5297.0,664.0,1986.0,657.0,8.6454,483500.0,<1H OCEAN +-118.51,34.23,36.0,3324.0,448.0,1190.0,423.0,7.2772,477200.0,<1H OCEAN +-118.52,34.24,6.0,3218.0,949.0,2295.0,876.0,3.0926,418500.0,<1H OCEAN +-118.52,34.23,35.0,1471.0,210.0,735.0,219.0,8.3841,472200.0,<1H OCEAN +-118.53,34.25,20.0,6331.0,1537.0,2957.0,1509.0,3.3892,323100.0,<1H OCEAN +-118.54,34.24,24.0,4631.0,1164.0,2360.0,1083.0,3.0977,264000.0,<1H OCEAN +-118.53,34.24,24.0,2718.0,719.0,3018.0,644.0,2.9076,275300.0,<1H OCEAN +-118.54,34.23,35.0,3422.0,601.0,1690.0,574.0,4.375,232900.0,<1H OCEAN +-118.53,34.23,27.0,2131.0,543.0,1065.0,528.0,3.2404,230400.0,<1H OCEAN +-118.54,34.25,26.0,2639.0,378.0,1191.0,401.0,6.2788,322200.0,<1H OCEAN +-118.55,34.24,21.0,5751.0,1082.0,2230.0,1016.0,4.3458,407500.0,<1H OCEAN +-118.55,34.23,25.0,4409.0,1018.0,4579.0,1010.0,2.8727,245100.0,<1H OCEAN +-118.51,34.23,27.0,4580.0,918.0,2252.0,850.0,4.7926,454400.0,<1H OCEAN +-118.52,34.22,21.0,4617.0,1101.0,2891.0,1031.0,3.2289,318100.0,<1H OCEAN +-118.53,34.23,32.0,4039.0,984.0,2675.0,941.0,3.0321,240000.0,<1H OCEAN +-118.54,34.22,34.0,2193.0,513.0,1299.0,497.0,3.6187,211600.0,<1H OCEAN +-118.54,34.23,29.0,1753.0,342.0,1318.0,333.0,4.125,241400.0,<1H OCEAN +-118.45,34.25,34.0,2094.0,380.0,1207.0,380.0,5.2801,212300.0,<1H OCEAN +-118.46,34.24,11.0,5363.0,1160.0,2783.0,1034.0,3.8583,170700.0,<1H OCEAN +-118.47,34.25,21.0,2692.0,477.0,1330.0,456.0,4.5417,238900.0,<1H OCEAN +-118.47,34.24,19.0,2405.0,661.0,1855.0,621.0,2.3111,255400.0,<1H OCEAN +-118.48,34.24,32.0,2621.0,412.0,1285.0,414.0,6.6537,267600.0,<1H OCEAN +-118.49,34.25,30.0,2871.0,470.0,1335.0,458.0,5.0232,253900.0,<1H OCEAN +-118.49,34.24,35.0,2707.0,446.0,1224.0,445.0,5.2939,244200.0,<1H OCEAN +-118.49,34.24,34.0,1971.0,316.0,917.0,307.0,6.0965,262300.0,<1H OCEAN +-118.5,34.25,32.0,2333.0,389.0,969.0,331.0,4.8164,241100.0,<1H OCEAN +-118.5,34.25,32.0,2411.0,380.0,1040.0,344.0,6.155,257300.0,<1H OCEAN +-118.5,34.24,34.0,2634.0,412.0,1114.0,423.0,5.9401,315300.0,<1H OCEAN +-118.5,34.23,26.0,3082.0,573.0,1590.0,586.0,4.5167,319000.0,<1H OCEAN +-118.49,34.23,32.0,4373.0,683.0,2040.0,693.0,5.2668,242300.0,<1H OCEAN +-118.49,34.22,30.0,1756.0,314.0,899.0,288.0,5.0325,238200.0,<1H OCEAN +-118.47,34.23,22.0,8350.0,2717.0,9135.0,2452.0,2.5008,160000.0,<1H OCEAN +-118.48,34.23,35.0,1963.0,310.0,919.0,297.0,4.7583,258600.0,<1H OCEAN +-118.48,34.23,30.0,1762.0,263.0,761.0,292.0,6.5268,273100.0,<1H OCEAN +-118.48,34.23,29.0,3354.0,707.0,1752.0,650.0,4.5484,239900.0,<1H OCEAN +-118.46,34.23,20.0,4609.0,1499.0,5349.0,1377.0,2.7121,169400.0,<1H OCEAN +-118.46,34.23,16.0,6338.0,1768.0,4718.0,1632.0,3.0187,154600.0,<1H OCEAN +-118.43,34.25,38.0,921.0,239.0,1023.0,241.0,3.4514,151900.0,<1H OCEAN +-118.42,34.24,36.0,1181.0,220.0,775.0,218.0,4.7228,183800.0,<1H OCEAN +-118.43,34.24,36.0,1488.0,313.0,1221.0,296.0,4.0208,171400.0,<1H OCEAN +-118.42,34.24,35.0,1507.0,281.0,1025.0,286.0,4.5833,177200.0,<1H OCEAN +-118.41,34.23,35.0,1026.0,195.0,753.0,185.0,4.5909,179200.0,<1H OCEAN +-118.41,34.24,38.0,490.0,101.0,402.0,100.0,3.125,175900.0,<1H OCEAN +-118.44,34.26,34.0,1102.0,212.0,949.0,212.0,4.0792,165100.0,<1H OCEAN +-118.44,34.26,28.0,1077.0,288.0,1377.0,293.0,3.9167,153900.0,<1H OCEAN +-118.43,34.25,32.0,2433.0,553.0,2318.0,532.0,3.6384,159300.0,<1H OCEAN +-118.44,34.26,34.0,325.0,60.0,433.0,83.0,5.5124,174300.0,<1H OCEAN +-118.44,34.25,35.0,1583.0,324.0,1481.0,351.0,3.7,176000.0,<1H OCEAN +-118.45,34.25,21.0,2143.0,565.0,1803.0,497.0,3.9833,162500.0,<1H OCEAN +-118.45,34.24,11.0,9053.0,2193.0,7096.0,2038.0,3.5082,136500.0,<1H OCEAN +-118.45,34.23,15.0,5738.0,1767.0,4620.0,1581.0,2.3584,157600.0,<1H OCEAN +-118.45,34.24,7.0,3299.0,794.0,2343.0,647.0,3.0865,205900.0,<1H OCEAN +-118.44,34.25,33.0,1121.0,231.0,1038.0,236.0,4.8958,173700.0,<1H OCEAN +-118.43,34.24,35.0,1416.0,261.0,995.0,272.0,3.7143,178700.0,<1H OCEAN +-118.43,34.24,35.0,1488.0,293.0,1112.0,288.0,4.4688,182500.0,<1H OCEAN +-118.44,34.24,36.0,1660.0,301.0,1225.0,307.0,4.095,184000.0,<1H OCEAN +-118.44,34.24,35.0,2344.0,435.0,1531.0,399.0,3.725,178200.0,<1H OCEAN +-118.42,34.23,33.0,2478.0,457.0,1567.0,446.0,5.6629,186700.0,<1H OCEAN +-118.42,34.22,29.0,1807.0,323.0,1234.0,310.0,5.3767,233000.0,<1H OCEAN +-118.43,34.23,35.0,2049.0,390.0,1286.0,385.0,4.4432,181500.0,<1H OCEAN +-118.43,34.24,36.0,1379.0,265.0,896.0,246.0,4.6827,183800.0,<1H OCEAN +-118.42,34.23,34.0,1550.0,279.0,1011.0,288.0,4.5375,189000.0,<1H OCEAN +-118.43,34.23,35.0,1225.0,228.0,720.0,231.0,3.4013,176500.0,<1H OCEAN +-118.43,34.23,37.0,1737.0,369.0,1061.0,356.0,3.9615,173700.0,<1H OCEAN +-118.43,34.24,37.0,1279.0,241.0,987.0,233.0,4.0057,172700.0,<1H OCEAN +-118.44,34.23,36.0,1730.0,387.0,1099.0,353.0,4.0368,183100.0,<1H OCEAN +-118.43,34.22,34.0,1588.0,360.0,1080.0,340.0,3.66,184600.0,<1H OCEAN +-118.44,34.22,41.0,1030.0,214.0,664.0,223.0,3.8083,183800.0,<1H OCEAN +-118.44,34.22,39.0,1529.0,344.0,913.0,314.0,3.325,178200.0,<1H OCEAN +-118.44,34.23,43.0,2257.0,429.0,1418.0,442.0,4.5278,181800.0,<1H OCEAN +-118.46,34.22,35.0,2288.0,617.0,2222.0,566.0,2.6299,170700.0,<1H OCEAN +-118.46,34.22,39.0,1500.0,333.0,998.0,309.0,3.9625,168200.0,<1H OCEAN +-118.46,34.22,31.0,2057.0,601.0,2397.0,579.0,2.871,184400.0,<1H OCEAN +-118.45,34.22,24.0,3442.0,1168.0,4625.0,1097.0,2.0699,183000.0,<1H OCEAN +-118.45,34.23,25.0,4393.0,1369.0,3781.0,1267.0,2.5833,183700.0,<1H OCEAN +-118.45,34.22,8.0,2609.0,786.0,1803.0,695.0,2.7714,185700.0,<1H OCEAN +-118.46,34.23,19.0,9902.0,2814.0,7307.0,2660.0,2.585,145400.0,<1H OCEAN +-118.44,34.22,36.0,1191.0,266.0,718.0,248.0,3.4612,178800.0,<1H OCEAN +-118.44,34.21,37.0,1665.0,335.0,1011.0,343.0,4.8703,185100.0,<1H OCEAN +-118.44,34.21,41.0,1440.0,325.0,1014.0,322.0,2.875,168600.0,<1H OCEAN +-118.44,34.22,41.0,1582.0,399.0,1159.0,378.0,2.825,168600.0,<1H OCEAN +-118.43,34.22,34.0,2300.0,429.0,1447.0,455.0,4.2656,233700.0,<1H OCEAN +-118.43,34.21,17.0,3667.0,1209.0,2636.0,1054.0,2.425,175500.0,<1H OCEAN +-118.43,34.22,36.0,1372.0,295.0,774.0,306.0,3.6618,187300.0,<1H OCEAN +-118.4,34.22,43.0,1220.0,222.0,729.0,230.0,3.6442,186300.0,<1H OCEAN +-118.4,34.21,30.0,2453.0,544.0,1753.0,506.0,2.9803,191500.0,<1H OCEAN +-118.41,34.21,35.0,2215.0,459.0,1594.0,446.0,4.0167,193200.0,<1H OCEAN +-118.4,34.21,45.0,972.0,181.0,554.0,187.0,4.8194,181300.0,<1H OCEAN +-118.4,34.22,36.0,2557.0,540.0,1556.0,491.0,3.6591,183800.0,<1H OCEAN +-118.4,34.23,37.0,1404.0,266.0,889.0,274.0,4.0049,190000.0,<1H OCEAN +-118.38,34.25,38.0,983.0,185.0,513.0,170.0,4.8816,231500.0,<1H OCEAN +-118.37,34.24,40.0,1283.0,246.0,594.0,236.0,4.1121,229200.0,<1H OCEAN +-118.37,34.23,32.0,1444.0,317.0,1177.0,311.0,3.6,164600.0,<1H OCEAN +-118.37,34.22,17.0,1787.0,463.0,1671.0,448.0,3.5521,151500.0,<1H OCEAN +-118.38,34.24,38.0,125.0,42.0,63.0,29.0,1.3594,158300.0,<1H OCEAN +-118.4,34.24,35.0,2552.0,545.0,1850.0,503.0,4.775,179500.0,<1H OCEAN +-118.39,34.23,18.0,3405.0,831.0,3001.0,795.0,3.0083,181900.0,<1H OCEAN +-118.39,34.23,43.0,1193.0,299.0,1184.0,320.0,2.1518,161600.0,<1H OCEAN +-118.4,34.23,36.0,1643.0,349.0,1414.0,337.0,4.1181,172700.0,<1H OCEAN +-118.41,34.21,35.0,2830.0,518.0,1577.0,524.0,5.35,210500.0,<1H OCEAN +-118.41,34.21,35.0,1789.0,292.0,897.0,267.0,5.592,239900.0,<1H OCEAN +-118.39,34.22,40.0,712.0,149.0,533.0,155.0,3.695,165200.0,<1H OCEAN +-118.39,34.22,35.0,1790.0,334.0,1277.0,345.0,5.0818,186800.0,<1H OCEAN +-118.39,34.21,32.0,1869.0,441.0,1516.0,432.0,3.6845,178500.0,<1H OCEAN +-118.39,34.21,14.0,2807.0,868.0,2729.0,803.0,2.6667,172400.0,<1H OCEAN +-118.38,34.22,20.0,1176.0,344.0,864.0,318.0,2.375,177700.0,<1H OCEAN +-118.38,34.21,35.0,1468.0,303.0,1295.0,300.0,3.7708,170600.0,<1H OCEAN +-118.38,34.21,33.0,1981.0,484.0,1665.0,466.0,3.0833,179100.0,<1H OCEAN +-118.42,34.22,34.0,3004.0,589.0,1938.0,568.0,4.1857,198600.0,<1H OCEAN +-118.42,34.21,29.0,2893.0,543.0,1636.0,540.0,5.1586,237400.0,<1H OCEAN +-118.42,34.2,34.0,161.0,48.0,66.0,33.0,1.0,187500.0,<1H OCEAN +-118.42,34.23,34.0,1531.0,278.0,1064.0,274.0,5.6687,207300.0,<1H OCEAN +-118.37,34.21,36.0,1392.0,326.0,1181.0,303.0,3.1563,176400.0,<1H OCEAN +-118.37,34.21,36.0,2080.0,455.0,1939.0,484.0,4.2875,176600.0,<1H OCEAN +-118.37,34.21,34.0,2272.0,558.0,2164.0,484.0,3.7143,175700.0,<1H OCEAN +-118.37,34.22,11.0,2127.0,581.0,1989.0,530.0,2.9028,174100.0,<1H OCEAN +-118.38,34.22,32.0,362.0,100.0,348.0,102.0,2.2679,150000.0,<1H OCEAN +-118.36,34.23,15.0,2485.0,742.0,1994.0,670.0,2.8333,183200.0,<1H OCEAN +-118.36,34.22,37.0,1512.0,348.0,1545.0,351.0,3.7663,160300.0,<1H OCEAN +-118.35,34.22,41.0,1560.0,374.0,1668.0,389.0,3.025,154300.0,<1H OCEAN +-118.36,34.21,41.0,337.0,65.0,198.0,50.0,1.8929,152900.0,<1H OCEAN +-118.38,34.21,42.0,715.0,145.0,730.0,158.0,3.8,169500.0,<1H OCEAN +-118.38,34.2,23.0,4138.0,1171.0,3911.0,1068.0,3.0125,181700.0,<1H OCEAN +-118.39,34.2,17.0,2594.0,1028.0,3950.0,973.0,2.0348,177200.0,<1H OCEAN +-118.37,34.21,33.0,2034.0,470.0,1990.0,423.0,3.7455,159600.0,<1H OCEAN +-118.37,34.2,34.0,2199.0,609.0,2488.0,597.0,2.9861,171800.0,<1H OCEAN +-118.38,34.21,38.0,1363.0,395.0,1798.0,405.0,2.3182,171200.0,<1H OCEAN +-118.37,34.2,33.0,1438.0,309.0,1378.0,306.0,2.8917,170400.0,<1H OCEAN +-118.36,34.19,11.0,2921.0,685.0,1512.0,664.0,4.1445,176400.0,<1H OCEAN +-118.36,34.18,34.0,1471.0,423.0,995.0,386.0,2.9583,188700.0,<1H OCEAN +-118.36,34.18,36.0,2233.0,605.0,1934.0,599.0,2.8784,194900.0,<1H OCEAN +-118.37,34.18,33.0,1829.0,512.0,1345.0,500.0,3.1629,198900.0,<1H OCEAN +-118.37,34.19,19.0,2890.0,821.0,2203.0,705.0,2.6696,185100.0,<1H OCEAN +-118.39,34.19,41.0,2000.0,485.0,1439.0,461.0,3.0491,192000.0,<1H OCEAN +-118.39,34.19,23.0,1875.0,710.0,2555.0,657.0,2.0968,162500.0,<1H OCEAN +-118.39,34.2,19.0,2012.0,732.0,3483.0,731.0,2.2234,181300.0,<1H OCEAN +-118.37,34.19,41.0,2924.0,867.0,2751.0,836.0,2.1,171600.0,<1H OCEAN +-118.38,34.19,37.0,1434.0,394.0,1667.0,404.0,2.4375,176300.0,<1H OCEAN +-118.38,34.2,32.0,993.0,285.0,1044.0,248.0,2.4306,187500.0,<1H OCEAN +-118.4,34.2,13.0,4859.0,1293.0,3351.0,1200.0,3.6875,211900.0,<1H OCEAN +-118.4,34.19,37.0,934.0,231.0,587.0,230.0,3.625,181300.0,<1H OCEAN +-118.4,34.2,30.0,2392.0,655.0,1987.0,609.0,2.8424,226400.0,<1H OCEAN +-118.4,34.19,35.0,2180.0,599.0,1483.0,574.0,3.0395,191300.0,<1H OCEAN +-118.41,34.19,39.0,1169.0,242.0,612.0,247.0,4.1429,200000.0,<1H OCEAN +-118.41,34.2,32.0,2734.0,654.0,2209.0,610.0,3.5164,217200.0,<1H OCEAN +-118.42,34.2,24.0,3148.0,908.0,2850.0,839.0,1.9549,221500.0,<1H OCEAN +-118.41,34.19,42.0,779.0,145.0,450.0,148.0,3.9792,193800.0,<1H OCEAN +-118.42,34.19,34.0,2622.0,572.0,1997.0,573.0,3.338,222500.0,<1H OCEAN +-118.42,34.2,27.0,3201.0,970.0,3403.0,948.0,2.2377,231700.0,<1H OCEAN +-118.43,34.2,28.0,3386.0,,2240.0,737.0,3.0221,290100.0,<1H OCEAN +-118.42,34.19,33.0,3353.0,790.0,2318.0,775.0,2.2589,269700.0,<1H OCEAN +-118.42,34.19,33.0,3285.0,830.0,2281.0,786.0,2.6165,230800.0,<1H OCEAN +-118.42,34.18,27.0,3760.0,880.0,2022.0,812.0,3.1551,225600.0,<1H OCEAN +-118.42,34.18,31.0,2887.0,646.0,1626.0,637.0,3.6745,335500.0,<1H OCEAN +-118.42,34.18,30.0,1323.0,353.0,856.0,333.0,3.3594,202200.0,<1H OCEAN +-118.43,34.18,33.0,2717.0,662.0,1546.0,597.0,3.9099,267500.0,<1H OCEAN +-118.43,34.18,31.0,2417.0,510.0,1102.0,507.0,3.8906,282200.0,<1H OCEAN +-118.42,34.18,40.0,1013.0,150.0,449.0,166.0,5.7143,382400.0,<1H OCEAN +-118.41,34.19,45.0,1106.0,225.0,595.0,228.0,3.6625,190700.0,<1H OCEAN +-118.41,34.18,43.0,1840.0,356.0,966.0,323.0,4.7171,237900.0,<1H OCEAN +-118.41,34.18,30.0,2008.0,513.0,1052.0,496.0,3.0119,262200.0,<1H OCEAN +-118.41,34.19,37.0,1993.0,425.0,939.0,400.0,2.8021,224600.0,<1H OCEAN +-118.4,34.19,30.0,521.0,126.0,306.0,129.0,4.1125,216700.0,<1H OCEAN +-118.4,34.19,35.0,1631.0,356.0,862.0,368.0,3.6007,261800.0,<1H OCEAN +-118.4,34.18,32.0,3724.0,899.0,1912.0,791.0,3.5711,312700.0,<1H OCEAN +-118.4,34.17,27.0,3588.0,911.0,1891.0,871.0,3.4013,286000.0,<1H OCEAN +-118.39,34.19,25.0,3794.0,989.0,2454.0,876.0,2.9982,204200.0,<1H OCEAN +-118.39,34.18,42.0,1957.0,389.0,985.0,414.0,2.9327,240200.0,<1H OCEAN +-118.39,34.17,26.0,3345.0,818.0,1599.0,773.0,3.3516,241500.0,<1H OCEAN +-118.39,34.18,44.0,477.0,91.0,220.0,112.0,3.3906,223800.0,<1H OCEAN +-118.39,34.19,36.0,904.0,191.0,627.0,191.0,2.4167,192900.0,<1H OCEAN +-118.4,34.16,45.0,1176.0,250.0,471.0,228.0,2.3333,364700.0,<1H OCEAN +-118.4,34.16,35.0,1354.0,284.0,501.0,262.0,3.8056,384700.0,<1H OCEAN +-118.4,34.16,34.0,2638.0,580.0,1150.0,551.0,4.2989,364700.0,<1H OCEAN +-118.41,34.16,32.0,3060.0,505.0,1159.0,510.0,6.3703,465800.0,<1H OCEAN +-118.41,34.17,35.0,2027.0,428.0,879.0,402.0,4.692,330900.0,<1H OCEAN +-118.38,34.19,42.0,1308.0,289.0,950.0,302.0,2.7379,181500.0,<1H OCEAN +-118.38,34.18,40.0,2079.0,568.0,1396.0,526.0,3.0061,190800.0,<1H OCEAN +-118.38,34.18,27.0,4834.0,1527.0,3847.0,1432.0,2.1449,165300.0,<1H OCEAN +-118.38,34.18,24.0,1983.0,651.0,2251.0,574.0,2.4792,200000.0,<1H OCEAN +-118.38,34.17,33.0,1588.0,454.0,739.0,392.0,2.8208,238500.0,<1H OCEAN +-118.39,34.17,40.0,1696.0,372.0,835.0,385.0,3.6563,222400.0,<1H OCEAN +-118.37,34.18,36.0,1608.0,373.0,1217.0,374.0,2.9728,190200.0,<1H OCEAN +-118.37,34.18,42.0,1140.0,300.0,643.0,252.0,3.3958,178400.0,<1H OCEAN +-118.38,34.18,44.0,901.0,179.0,473.0,179.0,3.3125,186400.0,<1H OCEAN +-118.38,34.19,30.0,977.0,264.0,736.0,258.0,1.9866,177400.0,<1H OCEAN +-118.37,34.18,35.0,2949.0,794.0,2106.0,746.0,2.9228,177300.0,<1H OCEAN +-118.38,34.18,32.0,3553.0,1060.0,3129.0,1010.0,2.5603,174200.0,<1H OCEAN +-118.36,34.18,31.0,1109.0,354.0,1119.0,334.0,2.3056,200000.0,<1H OCEAN +-118.36,34.17,31.0,1939.0,505.0,1584.0,466.0,2.5234,199500.0,<1H OCEAN +-118.37,34.17,42.0,1713.0,416.0,1349.0,427.0,3.2596,191800.0,<1H OCEAN +-118.41,34.18,35.0,2785.0,663.0,1631.0,614.0,3.9038,276100.0,<1H OCEAN +-118.41,34.17,27.0,3277.0,648.0,1382.0,615.0,3.875,366100.0,<1H OCEAN +-118.41,34.18,35.0,1975.0,384.0,882.0,406.0,4.375,291700.0,<1H OCEAN +-118.43,34.17,32.0,3202.0,696.0,1573.0,621.0,3.4449,292900.0,<1H OCEAN +-118.43,34.17,35.0,2922.0,507.0,1130.0,485.0,5.451,341800.0,<1H OCEAN +-118.43,34.17,37.0,1982.0,331.0,794.0,340.0,5.9275,336900.0,<1H OCEAN +-118.43,34.16,34.0,2459.0,489.0,1139.0,463.0,4.0347,353600.0,<1H OCEAN +-118.43,34.16,41.0,2050.0,478.0,850.0,490.0,3.4208,343400.0,<1H OCEAN +-118.43,34.16,40.0,1134.0,184.0,452.0,187.0,4.569,333900.0,<1H OCEAN +-118.42,34.15,27.0,2795.0,602.0,1073.0,535.0,5.1496,365000.0,<1H OCEAN +-118.42,34.17,31.0,2235.0,363.0,914.0,370.0,6.1359,359700.0,<1H OCEAN +-118.42,34.16,28.0,4664.0,1040.0,1963.0,961.0,3.9028,367900.0,<1H OCEAN +-118.41,34.16,14.0,577.0,150.0,372.0,130.0,4.1875,275000.0,<1H OCEAN +-118.42,34.16,25.0,2769.0,566.0,1201.0,545.0,3.6641,386100.0,<1H OCEAN +-118.4,34.17,24.0,4443.0,1283.0,2421.0,1180.0,2.2652,269200.0,<1H OCEAN +-118.4,34.17,24.0,6347.0,,2945.0,1492.0,3.3545,221500.0,<1H OCEAN +-118.39,34.17,28.0,2790.0,748.0,1351.0,697.0,3.2052,283600.0,<1H OCEAN +-118.39,34.17,26.0,6429.0,1611.0,2806.0,1491.0,3.1929,265200.0,<1H OCEAN +-118.39,34.16,46.0,1582.0,279.0,603.0,283.0,5.1169,414300.0,<1H OCEAN +-118.39,34.16,37.0,1388.0,286.0,547.0,258.0,5.1584,444700.0,<1H OCEAN +-118.38,34.17,30.0,2016.0,622.0,1359.0,557.0,2.7708,192300.0,<1H OCEAN +-118.38,34.16,46.0,2609.0,593.0,1055.0,585.0,3.3177,309400.0,<1H OCEAN +-118.38,34.16,31.0,2197.0,501.0,944.0,474.0,3.7312,319400.0,<1H OCEAN +-118.36,34.17,44.0,2295.0,560.0,1543.0,528.0,2.3851,194100.0,<1H OCEAN +-118.37,34.17,15.0,3327.0,1011.0,2683.0,857.0,2.3784,185400.0,<1H OCEAN +-118.37,34.17,42.0,600.0,171.0,377.0,181.0,2.4107,184400.0,<1H OCEAN +-118.37,34.17,10.0,1431.0,473.0,1438.0,429.0,2.2756,221400.0,<1H OCEAN +-118.37,34.17,6.0,854.0,350.0,542.0,321.0,0.8198,325000.0,<1H OCEAN +-118.37,34.16,6.0,6526.0,2007.0,3298.0,1790.0,2.7231,250000.0,<1H OCEAN +-118.37,34.16,10.0,2606.0,748.0,1373.0,680.0,3.6128,225000.0,<1H OCEAN +-118.37,34.16,25.0,2450.0,618.0,1054.0,578.0,3.6375,262500.0,<1H OCEAN +-118.37,34.16,40.0,1973.0,382.0,774.0,352.0,4.4122,282300.0,<1H OCEAN +-118.36,34.16,43.0,2850.0,709.0,1510.0,670.0,2.4835,274300.0,<1H OCEAN +-118.36,34.16,32.0,2455.0,556.0,989.0,493.0,4.0764,325000.0,<1H OCEAN +-118.37,34.16,17.0,4150.0,1148.0,1808.0,1041.0,3.5051,232400.0,<1H OCEAN +-118.37,34.16,11.0,2901.0,871.0,1659.0,789.0,3.1106,209400.0,<1H OCEAN +-118.36,34.16,45.0,1755.0,335.0,822.0,342.0,5.1423,322900.0,<1H OCEAN +-118.36,34.16,42.0,2304.0,442.0,862.0,429.0,4.3542,417900.0,<1H OCEAN +-118.35,34.15,35.0,2245.0,393.0,783.0,402.0,4.1544,500001.0,<1H OCEAN +-118.43,34.2,20.0,4090.0,1271.0,2824.0,1053.0,2.773,140500.0,<1H OCEAN +-118.43,34.21,26.0,2867.0,671.0,1955.0,640.0,4.125,226500.0,<1H OCEAN +-118.44,34.2,28.0,1732.0,435.0,1198.0,417.0,2.9219,241300.0,<1H OCEAN +-118.44,34.21,20.0,5756.0,1477.0,4031.0,1369.0,3.2448,221200.0,<1H OCEAN +-118.45,34.21,30.0,2331.0,733.0,2172.0,707.0,2.1888,195600.0,<1H OCEAN +-118.45,34.2,19.0,3666.0,1150.0,2657.0,1090.0,2.9688,202100.0,<1H OCEAN +-118.46,34.2,13.0,2926.0,816.0,1867.0,802.0,3.5255,202700.0,<1H OCEAN +-118.46,34.21,7.0,2081.0,657.0,1456.0,535.0,3.5,186900.0,<1H OCEAN +-118.47,34.21,34.0,2512.0,603.0,1805.0,584.0,2.9735,220000.0,<1H OCEAN +-118.47,34.2,20.0,3939.0,1143.0,2475.0,1002.0,2.9025,229100.0,<1H OCEAN +-118.48,34.21,25.0,2879.0,723.0,2077.0,649.0,3.3864,197400.0,<1H OCEAN +-118.48,34.2,26.0,2027.0,559.0,1545.0,513.0,2.8974,189900.0,<1H OCEAN +-118.48,34.22,22.0,3430.0,1214.0,3618.0,1092.0,2.1974,93800.0,<1H OCEAN +-118.49,34.21,25.0,1131.0,449.0,746.0,420.0,1.3565,225000.0,<1H OCEAN +-118.49,34.19,23.0,2087.0,571.0,1809.0,553.0,3.1667,202000.0,<1H OCEAN +-118.49,34.2,35.0,1109.0,206.0,515.0,202.0,5.2118,215800.0,<1H OCEAN +-118.5,34.2,34.0,1617.0,344.0,938.0,305.0,3.915,217700.0,<1H OCEAN +-118.48,34.2,12.0,3831.0,1083.0,2258.0,967.0,2.4375,255400.0,<1H OCEAN +-118.48,34.2,23.0,2850.0,864.0,2249.0,777.0,2.6957,191700.0,<1H OCEAN +-118.48,34.19,20.0,5699.0,1594.0,3809.0,1381.0,2.8646,221100.0,<1H OCEAN +-118.48,34.19,36.0,2058.0,423.0,1132.0,423.0,3.8833,210400.0,<1H OCEAN +-118.47,34.2,25.0,4590.0,1477.0,2723.0,1195.0,2.7118,281700.0,<1H OCEAN +-118.47,34.19,33.0,3879.0,943.0,2113.0,843.0,3.892,292900.0,<1H OCEAN +-118.45,34.2,27.0,1572.0,450.0,1039.0,455.0,2.5562,190500.0,<1H OCEAN +-118.45,34.2,18.0,2729.0,800.0,2099.0,742.0,2.5842,230800.0,<1H OCEAN +-118.46,34.2,22.0,4855.0,1350.0,2519.0,1258.0,3.0893,205600.0,<1H OCEAN +-118.45,34.19,37.0,1073.0,254.0,739.0,253.0,2.4667,192200.0,<1H OCEAN +-118.46,34.19,20.0,5992.0,1820.0,4826.0,1632.0,2.7237,233500.0,<1H OCEAN +-118.46,34.19,35.0,1491.0,295.0,779.0,309.0,6.1142,256300.0,<1H OCEAN +-118.43,34.2,29.0,3051.0,694.0,1942.0,679.0,3.1118,238100.0,<1H OCEAN +-118.44,34.2,36.0,2698.0,623.0,1544.0,554.0,2.7375,234900.0,<1H OCEAN +-118.44,34.2,35.0,1717.0,478.0,1628.0,495.0,2.5197,225600.0,<1H OCEAN +-118.44,34.2,17.0,2934.0,950.0,2517.0,889.0,2.936,232500.0,<1H OCEAN +-118.43,34.19,27.0,3440.0,739.0,1827.0,712.0,4.125,245500.0,<1H OCEAN +-118.44,34.19,37.0,1516.0,344.0,983.0,347.0,5.0,243600.0,<1H OCEAN +-118.44,34.19,19.0,3487.0,959.0,2278.0,835.0,2.6709,215500.0,<1H OCEAN +-118.44,34.19,29.0,1599.0,459.0,1143.0,438.0,2.4583,199100.0,<1H OCEAN +-118.43,34.18,22.0,2052.0,568.0,1254.0,572.0,2.6364,271100.0,<1H OCEAN +-118.44,34.18,36.0,2077.0,496.0,1206.0,528.0,2.2326,221000.0,<1H OCEAN +-118.44,34.19,11.0,2891.0,951.0,2166.0,768.0,2.891,178100.0,<1H OCEAN +-118.44,34.18,17.0,1546.0,592.0,2423.0,556.0,2.1977,154200.0,<1H OCEAN +-118.45,34.19,11.0,2479.0,900.0,2466.0,855.0,2.2264,181300.0,<1H OCEAN +-118.45,34.18,22.0,2516.0,826.0,3350.0,713.0,2.0192,158300.0,<1H OCEAN +-118.46,34.18,27.0,2582.0,719.0,2038.0,718.0,3.0877,174200.0,<1H OCEAN +-118.47,34.19,41.0,1104.0,196.0,495.0,196.0,5.0929,225000.0,<1H OCEAN +-118.45,34.18,39.0,1810.0,388.0,839.0,380.0,3.7171,228800.0,<1H OCEAN +-118.45,34.18,34.0,1843.0,442.0,861.0,417.0,3.6875,246400.0,<1H OCEAN +-118.46,34.18,33.0,1791.0,386.0,844.0,397.0,4.5081,251400.0,<1H OCEAN +-118.46,34.18,35.0,1819.0,465.0,1336.0,419.0,3.4583,253200.0,<1H OCEAN +-118.44,34.18,35.0,972.0,270.0,550.0,256.0,2.2461,215000.0,<1H OCEAN +-118.44,34.17,25.0,4966.0,1134.0,1941.0,958.0,3.8081,286700.0,<1H OCEAN +-118.45,34.18,33.0,2077.0,486.0,1021.0,450.0,3.6019,225000.0,<1H OCEAN +-118.43,34.18,25.0,3830.0,1105.0,2328.0,1017.0,2.6238,210000.0,<1H OCEAN +-118.44,34.18,33.0,2127.0,414.0,1056.0,391.0,4.375,286100.0,<1H OCEAN +-118.43,34.17,33.0,1679.0,404.0,933.0,412.0,2.6979,266000.0,<1H OCEAN +-118.43,34.17,34.0,2180.0,424.0,906.0,429.0,4.4464,353100.0,<1H OCEAN +-118.43,34.17,42.0,777.0,102.0,284.0,113.0,11.2093,500001.0,<1H OCEAN +-118.44,34.17,29.0,2685.0,642.0,1085.0,599.0,3.2763,279400.0,<1H OCEAN +-118.43,34.16,34.0,2622.0,467.0,1233.0,476.0,4.0474,379700.0,<1H OCEAN +-118.44,34.16,35.0,3080.0,642.0,1362.0,623.0,4.1218,328500.0,<1H OCEAN +-118.44,34.16,33.0,1616.0,322.0,580.0,311.0,4.0391,337500.0,<1H OCEAN +-118.45,34.16,22.0,4982.0,1358.0,2237.0,1220.0,3.7105,272600.0,<1H OCEAN +-118.45,34.17,21.0,2152.0,527.0,996.0,470.0,3.2386,277300.0,<1H OCEAN +-118.45,34.17,33.0,3100.0,687.0,1388.0,658.0,4.3333,261300.0,<1H OCEAN +-118.46,34.17,24.0,2814.0,675.0,1463.0,620.0,4.1875,309300.0,<1H OCEAN +-118.46,34.17,22.0,6707.0,1737.0,2620.0,1610.0,3.1478,273700.0,<1H OCEAN +-118.45,34.16,33.0,2544.0,500.0,1035.0,492.0,4.475,314800.0,<1H OCEAN +-118.46,34.16,28.0,2795.0,622.0,1173.0,545.0,4.4423,280400.0,<1H OCEAN +-118.46,34.16,26.0,2548.0,647.0,1098.0,540.0,4.3839,299100.0,<1H OCEAN +-118.54,34.21,22.0,6064.0,1826.0,4876.0,1697.0,2.875,227100.0,<1H OCEAN +-118.54,34.21,32.0,2593.0,566.0,1596.0,547.0,3.9886,199200.0,<1H OCEAN +-118.54,34.22,35.0,1664.0,300.0,1000.0,309.0,4.6731,224100.0,<1H OCEAN +-118.54,34.2,37.0,1600.0,349.0,1012.0,366.0,4.1597,201600.0,<1H OCEAN +-118.54,34.19,33.0,2205.0,453.0,1242.0,419.0,4.1319,203700.0,<1H OCEAN +-118.51,34.22,36.0,2794.0,523.0,1334.0,472.0,4.3462,222100.0,<1H OCEAN +-118.5,34.21,36.0,1254.0,229.0,629.0,245.0,4.9643,236100.0,<1H OCEAN +-118.5,34.21,36.0,1656.0,310.0,817.0,308.0,5.5675,215900.0,<1H OCEAN +-118.51,34.22,36.0,1952.0,387.0,1156.0,392.0,4.185,209200.0,<1H OCEAN +-118.51,34.21,36.0,2396.0,421.0,1064.0,398.0,4.7,223600.0,<1H OCEAN +-118.51,34.22,36.0,1493.0,285.0,766.0,272.0,4.8646,213200.0,<1H OCEAN +-118.52,34.22,35.0,1275.0,222.0,959.0,226.0,5.0282,195400.0,<1H OCEAN +-118.52,34.22,35.0,1620.0,272.0,1052.0,248.0,5.5209,203300.0,<1H OCEAN +-118.52,34.21,36.0,2394.0,424.0,1490.0,427.0,4.3261,206700.0,<1H OCEAN +-118.52,34.21,34.0,1663.0,299.0,762.0,282.0,5.1265,211000.0,<1H OCEAN +-118.53,34.22,29.0,4101.0,849.0,2630.0,867.0,4.6607,199800.0,<1H OCEAN +-118.53,34.21,18.0,3124.0,796.0,1855.0,725.0,2.9389,213200.0,<1H OCEAN +-118.55,34.21,35.0,2592.0,490.0,1427.0,434.0,5.0623,246400.0,<1H OCEAN +-118.56,34.22,35.0,1843.0,329.0,1041.0,317.0,4.4271,205100.0,<1H OCEAN +-118.56,34.21,36.0,1286.0,242.0,788.0,248.0,3.5333,196800.0,<1H OCEAN +-118.56,34.22,34.0,1599.0,294.0,819.0,306.0,4.3194,197000.0,<1H OCEAN +-118.55,34.21,33.0,3910.0,838.0,2097.0,810.0,3.8247,208700.0,<1H OCEAN +-118.56,34.21,13.0,8327.0,1849.0,4126.0,1773.0,3.7313,189800.0,<1H OCEAN +-118.52,34.2,35.0,2891.0,594.0,1757.0,581.0,4.3571,199800.0,<1H OCEAN +-118.53,34.2,33.0,3270.0,818.0,2118.0,763.0,3.225,205300.0,<1H OCEAN +-118.5,34.21,35.0,1668.0,332.0,807.0,311.0,4.5125,200300.0,<1H OCEAN +-118.51,34.2,35.0,1614.0,308.0,850.0,330.0,4.1806,209000.0,<1H OCEAN +-118.51,34.2,37.0,2066.0,434.0,1031.0,414.0,4.0924,188400.0,<1H OCEAN +-118.52,34.21,36.0,1328.0,287.0,823.0,273.0,4.5648,193700.0,<1H OCEAN +-118.5,34.2,42.0,1558.0,322.0,884.0,334.0,2.2304,203800.0,<1H OCEAN +-118.51,34.2,33.0,2327.0,479.0,1166.0,472.0,4.2344,262500.0,<1H OCEAN +-118.51,34.2,34.0,2871.0,581.0,1350.0,535.0,3.7049,227500.0,<1H OCEAN +-118.51,34.19,35.0,2537.0,418.0,1161.0,421.0,5.3028,229200.0,<1H OCEAN +-118.51,34.19,38.0,2182.0,409.0,1141.0,379.0,4.2865,221100.0,<1H OCEAN +-118.5,34.2,18.0,4249.0,933.0,2047.0,909.0,4.1304,229100.0,<1H OCEAN +-118.5,34.19,35.0,2720.0,490.0,1158.0,445.0,5.0796,228300.0,<1H OCEAN +-118.5,34.19,26.0,2156.0,509.0,1142.0,470.0,4.0,224700.0,<1H OCEAN +-118.52,34.2,19.0,4315.0,1304.0,2490.0,1222.0,2.6437,195000.0,<1H OCEAN +-118.52,34.2,37.0,1795.0,346.0,1082.0,354.0,4.9102,207200.0,<1H OCEAN +-118.53,34.2,26.0,2221.0,662.0,1998.0,603.0,2.8701,191100.0,<1H OCEAN +-118.55,34.2,21.0,2549.0,651.0,1624.0,628.0,3.6905,179800.0,<1H OCEAN +-118.55,34.19,18.0,5862.0,,3161.0,1280.0,3.1106,170600.0,<1H OCEAN +-118.55,34.2,31.0,1963.0,420.0,1494.0,415.0,3.5313,211800.0,<1H OCEAN +-118.52,34.19,42.0,881.0,170.0,464.0,163.0,2.9511,203900.0,<1H OCEAN +-118.52,34.19,37.0,1560.0,275.0,763.0,284.0,3.8516,206900.0,<1H OCEAN +-118.52,34.19,37.0,1892.0,347.0,1039.0,343.0,4.8295,212100.0,<1H OCEAN +-118.53,34.19,32.0,2618.0,692.0,1961.0,633.0,2.625,192300.0,<1H OCEAN +-118.52,34.18,34.0,2307.0,388.0,1168.0,427.0,4.2143,245400.0,<1H OCEAN +-118.53,34.18,26.0,4175.0,885.0,2118.0,778.0,4.2083,240300.0,<1H OCEAN +-118.56,34.2,36.0,1544.0,308.0,891.0,286.0,4.175,190900.0,<1H OCEAN +-118.56,34.2,35.0,2273.0,,1431.0,403.0,4.0789,196700.0,<1H OCEAN +-118.56,34.19,35.0,782.0,144.0,425.0,140.0,5.4548,201400.0,<1H OCEAN +-118.56,34.19,34.0,1237.0,242.0,671.0,221.0,3.9615,183600.0,<1H OCEAN +-118.56,34.19,34.0,2579.0,561.0,1237.0,517.0,4.433,235100.0,<1H OCEAN +-118.56,34.18,36.0,1366.0,224.0,719.0,270.0,4.8264,251000.0,<1H OCEAN +-118.54,34.19,22.0,3380.0,790.0,2199.0,737.0,2.5739,239200.0,<1H OCEAN +-118.54,34.18,25.0,1938.0,457.0,1280.0,425.0,3.9632,240300.0,<1H OCEAN +-118.55,34.19,36.0,978.0,170.0,475.0,192.0,4.675,222500.0,<1H OCEAN +-118.55,34.19,31.0,1856.0,370.0,990.0,360.0,4.3654,223800.0,<1H OCEAN +-118.58,34.21,24.0,2642.0,696.0,1649.0,633.0,3.0187,217700.0,<1H OCEAN +-118.59,34.21,26.0,2335.0,669.0,1986.0,645.0,2.9974,178800.0,<1H OCEAN +-118.59,34.2,18.0,847.0,185.0,733.0,178.0,5.2149,201900.0,<1H OCEAN +-118.58,34.2,37.0,1389.0,252.0,826.0,249.0,5.015,220900.0,<1H OCEAN +-118.57,34.22,27.0,2795.0,606.0,1702.0,586.0,3.7798,258400.0,<1H OCEAN +-118.57,34.21,23.0,4891.0,793.0,2447.0,765.0,5.8798,270500.0,<1H OCEAN +-118.57,34.22,17.0,3262.0,753.0,1879.0,708.0,4.1359,255200.0,<1H OCEAN +-118.58,34.21,13.0,6227.0,1317.0,3739.0,1226.0,4.0313,299300.0,<1H OCEAN +-118.58,34.22,35.0,2560.0,441.0,1428.0,468.0,5.6345,228200.0,<1H OCEAN +-118.58,34.21,27.0,2209.0,353.0,1034.0,344.0,4.7125,250900.0,<1H OCEAN +-118.59,34.21,34.0,1943.0,320.0,895.0,305.0,5.0462,227700.0,<1H OCEAN +-118.59,34.21,34.0,2389.0,521.0,1560.0,514.0,4.8333,225400.0,<1H OCEAN +-118.6,34.21,21.0,9512.0,2560.0,7282.0,2387.0,2.8039,227500.0,<1H OCEAN +-118.61,34.21,34.0,3494.0,557.0,1861.0,576.0,5.6407,251500.0,<1H OCEAN +-118.62,34.22,33.0,1636.0,275.0,866.0,289.0,5.6356,241300.0,<1H OCEAN +-118.62,34.21,26.0,3234.0,517.0,1597.0,513.0,6.1074,258600.0,<1H OCEAN +-118.62,34.22,34.0,2633.0,471.0,1313.0,428.0,4.0909,232900.0,<1H OCEAN +-118.61,34.21,41.0,1058.0,228.0,778.0,245.0,3.3534,180500.0,<1H OCEAN +-118.61,34.2,16.0,1718.0,467.0,896.0,475.0,3.6296,160900.0,<1H OCEAN +-118.61,34.21,33.0,2609.0,431.0,1208.0,406.0,5.4527,227100.0,<1H OCEAN +-118.62,34.2,23.0,3098.0,542.0,1486.0,492.0,5.7613,235800.0,<1H OCEAN +-118.63,34.21,31.0,3952.0,647.0,1762.0,588.0,5.5709,244800.0,<1H OCEAN +-118.64,34.22,16.0,4312.0,574.0,1902.0,574.0,8.4438,390000.0,<1H OCEAN +-118.65,34.21,5.0,5429.0,665.0,2315.0,687.0,9.6465,500001.0,<1H OCEAN +-118.65,34.2,23.0,7480.0,1084.0,3037.0,1058.0,6.9223,338400.0,<1H OCEAN +-118.62,34.2,32.0,3233.0,553.0,1678.0,545.0,5.0025,234900.0,<1H OCEAN +-118.63,34.2,19.0,7411.0,1045.0,2814.0,950.0,6.7785,336100.0,<1H OCEAN +-118.59,34.21,17.0,2737.0,868.0,2924.0,785.0,2.5797,183500.0,<1H OCEAN +-118.59,34.2,21.0,1789.0,,2300.0,677.0,2.754,179800.0,<1H OCEAN +-118.6,34.2,10.0,2869.0,941.0,2162.0,829.0,3.2297,150000.0,<1H OCEAN +-118.6,34.21,19.0,2581.0,857.0,2004.0,784.0,2.6159,182300.0,<1H OCEAN +-118.56,34.2,35.0,1770.0,362.0,1083.0,355.0,5.0483,221000.0,<1H OCEAN +-118.57,34.21,36.0,878.0,167.0,499.0,179.0,4.1181,190400.0,<1H OCEAN +-118.57,34.2,18.0,7157.0,1869.0,4642.0,1699.0,3.1818,208000.0,<1H OCEAN +-118.58,34.2,21.0,2979.0,744.0,1824.0,692.0,3.5,223700.0,<1H OCEAN +-118.56,34.19,36.0,2600.0,441.0,1246.0,426.0,4.1111,215600.0,<1H OCEAN +-118.57,34.2,36.0,2559.0,469.0,1358.0,445.0,4.5568,201500.0,<1H OCEAN +-118.57,34.2,33.0,1759.0,311.0,943.0,315.0,5.223,209200.0,<1H OCEAN +-118.58,34.2,35.0,1558.0,267.0,793.0,249.0,5.1463,220200.0,<1H OCEAN +-118.58,34.2,35.0,1323.0,228.0,756.0,216.0,4.233,221300.0,<1H OCEAN +-118.56,34.19,34.0,2185.0,372.0,986.0,347.0,4.8125,266700.0,<1H OCEAN +-118.58,34.19,35.0,2329.0,399.0,966.0,336.0,3.8839,224900.0,<1H OCEAN +-118.58,34.19,27.0,4286.0,1071.0,2863.0,1033.0,3.3125,222800.0,<1H OCEAN +-118.58,34.19,15.0,3061.0,1079.0,2173.0,1078.0,2.85,187500.0,<1H OCEAN +-118.58,34.18,28.0,908.0,142.0,368.0,143.0,5.6159,340500.0,<1H OCEAN +-118.62,34.2,29.0,2421.0,402.0,1120.0,388.0,5.0309,244800.0,<1H OCEAN +-118.62,34.18,25.0,3124.0,468.0,1241.0,439.0,6.4044,333100.0,<1H OCEAN +-118.62,34.19,35.0,1934.0,307.0,905.0,315.0,5.5101,267400.0,<1H OCEAN +-118.61,34.2,29.0,1673.0,284.0,794.0,270.0,5.5191,245800.0,<1H OCEAN +-118.61,34.19,28.0,3824.0,749.0,1790.0,701.0,4.1154,246400.0,<1H OCEAN +-118.61,34.19,34.0,703.0,127.0,369.0,127.0,4.3125,210100.0,<1H OCEAN +-118.6,34.19,16.0,14912.0,4183.0,5105.0,3302.0,2.8312,213900.0,<1H OCEAN +-118.63,34.19,32.0,3568.0,591.0,1741.0,563.0,5.1529,259600.0,<1H OCEAN +-118.63,34.18,32.0,1646.0,242.0,697.0,233.0,6.6689,433000.0,<1H OCEAN +-118.64,34.19,30.0,2399.0,373.0,1062.0,377.0,6.0094,245600.0,<1H OCEAN +-118.64,34.19,33.0,3017.0,494.0,1423.0,470.0,5.6163,248400.0,<1H OCEAN +-118.64,34.18,33.0,3808.0,623.0,1784.0,615.0,5.1641,263400.0,<1H OCEAN +-118.64,34.19,28.0,3274.0,571.0,1424.0,521.0,4.4167,247300.0,<1H OCEAN +-118.65,34.18,27.0,1793.0,339.0,1016.0,326.0,4.925,240300.0,<1H OCEAN +-118.65,34.19,27.0,2772.0,511.0,1346.0,497.0,5.2016,243000.0,<1H OCEAN +-118.66,34.19,23.0,7544.0,1031.0,3221.0,1043.0,7.642,374900.0,<1H OCEAN +-118.63,34.17,33.0,4769.0,787.0,2019.0,743.0,5.5798,338200.0,<1H OCEAN +-118.64,34.17,26.0,6767.0,903.0,2574.0,883.0,7.7846,409000.0,<1H OCEAN +-118.57,34.18,36.0,2981.0,441.0,1243.0,413.0,6.5304,439800.0,<1H OCEAN +-118.57,34.17,35.0,2072.0,318.0,908.0,342.0,6.0928,327300.0,<1H OCEAN +-118.58,34.17,29.0,3393.0,574.0,1471.0,587.0,6.2064,334900.0,<1H OCEAN +-118.59,34.18,7.0,11853.0,2691.0,4404.0,2447.0,4.2009,271300.0,<1H OCEAN +-118.61,34.17,19.0,5944.0,1345.0,2372.0,1250.0,3.8819,328900.0,<1H OCEAN +-118.62,34.17,32.0,1491.0,355.0,756.0,296.0,3.0404,262800.0,<1H OCEAN +-118.62,34.17,34.0,3268.0,538.0,1463.0,519.0,6.8482,308300.0,<1H OCEAN +-118.63,34.18,33.0,5252.0,760.0,2041.0,730.0,6.7977,389700.0,<1H OCEAN +-118.65,34.18,26.0,4607.0,656.0,1769.0,643.0,7.4918,367600.0,<1H OCEAN +-118.66,34.18,25.0,6612.0,857.0,2519.0,843.0,8.3912,419000.0,<1H OCEAN +-118.61,34.17,31.0,1689.0,362.0,705.0,360.0,4.0,278500.0,<1H OCEAN +-118.61,34.15,32.0,4491.0,815.0,1696.0,749.0,4.9102,319100.0,<1H OCEAN +-118.61,34.16,29.0,4364.0,647.0,1550.0,624.0,6.8107,367400.0,<1H OCEAN +-118.63,34.16,33.0,2896.0,455.0,1116.0,411.0,6.0192,347700.0,<1H OCEAN +-118.63,34.16,30.0,3346.0,487.0,1296.0,495.0,7.457,392700.0,<1H OCEAN +-118.62,34.15,26.0,5661.0,791.0,2493.0,780.0,7.9814,409900.0,<1H OCEAN +-118.57,34.17,31.0,1950.0,383.0,870.0,357.0,3.1875,500001.0,<1H OCEAN +-118.58,34.17,18.0,6476.0,1082.0,2413.0,958.0,5.6327,500001.0,<1H OCEAN +-118.59,34.17,36.0,1887.0,359.0,761.0,329.0,5.4847,296000.0,<1H OCEAN +-118.6,34.16,37.0,3441.0,584.0,1283.0,544.0,4.1656,313100.0,<1H OCEAN +-118.6,34.16,32.0,3999.0,667.0,1628.0,631.0,6.0794,338500.0,<1H OCEAN +-118.57,34.15,22.0,5791.0,706.0,2059.0,673.0,10.9201,500001.0,<1H OCEAN +-118.58,34.15,21.0,3856.0,547.0,1422.0,535.0,8.4196,450700.0,<1H OCEAN +-118.59,34.15,29.0,2023.0,330.0,747.0,304.0,6.7694,369700.0,<1H OCEAN +-118.6,34.15,28.0,4570.0,744.0,1693.0,695.0,6.14,361900.0,<1H OCEAN +-118.59,34.14,19.0,1303.0,155.0,450.0,145.0,10.5511,483100.0,<1H OCEAN +-118.49,34.18,31.0,3073.0,674.0,1486.0,684.0,4.8984,311700.0,<1H OCEAN +-118.51,34.18,37.0,1893.0,365.0,911.0,324.0,4.8036,295300.0,<1H OCEAN +-118.51,34.17,31.0,3252.0,834.0,1411.0,760.0,3.1885,219000.0,<1H OCEAN +-118.52,34.18,43.0,1700.0,380.0,930.0,349.0,3.675,213100.0,<1H OCEAN +-118.52,34.18,46.0,2082.0,438.0,1047.0,393.0,3.6534,216000.0,<1H OCEAN +-118.52,34.18,42.0,1611.0,410.0,879.0,386.0,3.1923,221800.0,<1H OCEAN +-118.53,34.17,18.0,6430.0,1412.0,2897.0,1348.0,3.855,243800.0,<1H OCEAN +-118.54,34.17,11.0,1080.0,174.0,386.0,160.0,6.1274,315900.0,<1H OCEAN +-118.55,34.18,32.0,3011.0,529.0,1287.0,525.0,5.0605,311000.0,<1H OCEAN +-118.56,34.18,39.0,1819.0,291.0,770.0,278.0,5.4088,457300.0,<1H OCEAN +-118.54,34.18,17.0,7214.0,1994.0,4100.0,1823.0,3.0943,174500.0,<1H OCEAN +-118.53,34.18,16.0,7194.0,1976.0,3687.0,1894.0,3.1887,189300.0,<1H OCEAN +-118.54,34.17,34.0,2458.0,433.0,1034.0,373.0,5.6738,443600.0,<1H OCEAN +-118.54,34.17,25.0,3352.0,891.0,1815.0,860.0,2.8528,425000.0,<1H OCEAN +-118.55,34.17,36.0,2127.0,297.0,761.0,274.0,7.8392,500001.0,<1H OCEAN +-118.56,34.17,35.0,2987.0,391.0,1244.0,387.0,7.1322,500001.0,<1H OCEAN +-118.52,34.17,20.0,17377.0,4457.0,7450.0,4204.0,3.2154,259600.0,<1H OCEAN +-118.52,34.16,39.0,2693.0,478.0,1219.0,435.0,5.17,335400.0,<1H OCEAN +-118.53,34.16,32.0,3554.0,762.0,1623.0,750.0,3.6141,290600.0,<1H OCEAN +-118.51,34.16,23.0,11154.0,1995.0,4076.0,1809.0,5.4609,500001.0,<1H OCEAN +-118.48,34.16,32.0,2108.0,309.0,769.0,274.0,8.7172,500001.0,<1H OCEAN +-118.49,34.16,37.0,3333.0,488.0,1171.0,485.0,6.4958,500001.0,<1H OCEAN +-118.5,34.16,34.0,3547.0,523.0,1187.0,500.0,7.139,424000.0,<1H OCEAN +-118.5,34.15,33.0,3104.0,387.0,1111.0,376.0,13.4196,500001.0,<1H OCEAN +-118.5,34.17,37.0,880.0,,369.0,155.0,4.1429,303600.0,<1H OCEAN +-118.49,34.15,33.0,2829.0,360.0,1010.0,363.0,10.3587,500001.0,<1H OCEAN +-118.49,34.14,28.0,3539.0,441.0,1190.0,421.0,10.6796,500001.0,<1H OCEAN +-118.49,34.13,24.0,4394.0,,1443.0,528.0,11.2979,500001.0,<1H OCEAN +-118.51,34.14,28.0,6748.0,904.0,2431.0,876.0,12.8879,500001.0,<1H OCEAN +-118.53,34.14,28.0,6920.0,906.0,2515.0,860.0,9.2189,500001.0,<1H OCEAN +-118.54,34.15,26.0,10111.0,1295.0,3599.0,1257.0,10.2292,500001.0,<1H OCEAN +-118.56,34.14,23.0,9657.0,1189.0,3585.0,1162.0,10.4399,500001.0,<1H OCEAN +-118.43,34.15,28.0,6270.0,1706.0,2549.0,1497.0,3.2241,295800.0,<1H OCEAN +-118.43,34.15,42.0,1293.0,214.0,459.0,217.0,7.672,467600.0,<1H OCEAN +-118.43,34.15,26.0,2900.0,667.0,1090.0,590.0,3.7125,447400.0,<1H OCEAN +-118.43,34.15,31.0,1856.0,425.0,795.0,426.0,2.8448,360600.0,<1H OCEAN +-118.44,34.15,29.0,5474.0,1457.0,2352.0,1326.0,3.415,382500.0,<1H OCEAN +-118.44,34.15,44.0,1778.0,251.0,641.0,251.0,10.0549,500001.0,<1H OCEAN +-118.44,34.15,15.0,4420.0,1076.0,1669.0,1016.0,4.6375,359100.0,<1H OCEAN +-118.44,34.15,37.0,1335.0,286.0,539.0,279.0,3.2813,301700.0,<1H OCEAN +-118.44,34.15,38.0,1387.0,337.0,713.0,343.0,2.9352,304500.0,<1H OCEAN +-118.45,34.16,22.0,7828.0,2038.0,3303.0,1922.0,3.6171,318300.0,<1H OCEAN +-118.45,34.15,10.0,1091.0,260.0,517.0,266.0,4.1727,332600.0,<1H OCEAN +-118.45,34.15,20.0,3876.0,799.0,1334.0,753.0,4.5656,478400.0,<1H OCEAN +-118.46,34.16,38.0,1495.0,300.0,598.0,280.0,3.4698,265400.0,<1H OCEAN +-118.46,34.16,16.0,4590.0,1200.0,2195.0,1139.0,3.8273,334900.0,<1H OCEAN +-118.47,34.15,7.0,6306.0,1473.0,2381.0,1299.0,4.642,457300.0,<1H OCEAN +-118.47,34.16,30.0,3823.0,740.0,1449.0,612.0,4.6,392500.0,<1H OCEAN +-118.47,34.15,43.0,804.0,117.0,267.0,110.0,8.2269,500001.0,<1H OCEAN +-118.48,34.15,31.0,2536.0,429.0,990.0,424.0,5.4591,495500.0,<1H OCEAN +-118.48,34.16,30.0,3507.0,536.0,1427.0,525.0,6.7082,500001.0,<1H OCEAN +-118.48,34.14,31.0,9320.0,1143.0,2980.0,1109.0,10.3599,500001.0,<1H OCEAN +-118.46,34.14,34.0,5264.0,771.0,1738.0,753.0,8.8115,500001.0,<1H OCEAN +-118.47,34.14,36.0,2873.0,420.0,850.0,379.0,8.153,500001.0,<1H OCEAN +-118.47,34.14,34.0,3646.0,610.0,1390.0,607.0,7.629,500001.0,<1H OCEAN +-118.43,34.14,44.0,1693.0,239.0,498.0,216.0,10.9237,500001.0,<1H OCEAN +-118.43,34.13,37.0,4400.0,695.0,1521.0,666.0,8.2954,500001.0,<1H OCEAN +-118.45,34.14,33.0,1741.0,274.0,588.0,267.0,7.9625,490800.0,<1H OCEAN +-118.35,34.15,52.0,1680.0,238.0,493.0,211.0,9.042,500001.0,<1H OCEAN +-118.36,34.15,41.0,3545.0,698.0,1221.0,651.0,4.3,500001.0,<1H OCEAN +-118.36,34.15,34.0,3659.0,921.0,1338.0,835.0,3.6202,366100.0,<1H OCEAN +-118.37,34.15,23.0,4604.0,1319.0,2391.0,1227.0,3.1373,263100.0,<1H OCEAN +-118.37,34.15,29.0,2630.0,617.0,1071.0,573.0,3.3669,376100.0,<1H OCEAN +-118.38,34.16,42.0,2358.0,546.0,1065.0,523.0,3.1289,320600.0,<1H OCEAN +-118.38,34.15,36.0,2933.0,619.0,1115.0,579.0,4.3036,365900.0,<1H OCEAN +-118.39,34.15,29.0,3110.0,650.0,1212.0,642.0,4.2031,394400.0,<1H OCEAN +-118.39,34.15,29.0,917.0,181.0,379.0,183.0,3.4612,425000.0,<1H OCEAN +-118.39,34.16,20.0,4084.0,1062.0,1637.0,987.0,3.2388,256300.0,<1H OCEAN +-118.4,34.15,31.0,3881.0,909.0,1535.0,846.0,3.0398,369100.0,<1H OCEAN +-118.41,34.15,33.0,4032.0,868.0,1695.0,869.0,4.3468,425900.0,<1H OCEAN +-118.42,34.15,48.0,680.0,131.0,268.0,126.0,4.615,371400.0,<1H OCEAN +-118.42,34.15,18.0,1880.0,420.0,681.0,333.0,4.3214,372300.0,<1H OCEAN +-118.42,34.15,31.0,1861.0,430.0,736.0,360.0,5.2853,355900.0,<1H OCEAN +-118.42,34.16,17.0,277.0,70.0,119.0,59.0,4.0208,341700.0,<1H OCEAN +-118.42,34.16,46.0,54.0,9.0,20.0,6.0,0.536,375000.0,<1H OCEAN +-118.4,34.15,41.0,2394.0,500.0,837.0,417.0,4.3889,380400.0,<1H OCEAN +-118.4,34.15,44.0,2515.0,510.0,967.0,484.0,5.0754,374500.0,<1H OCEAN +-118.41,34.15,24.0,3891.0,866.0,1568.0,830.0,4.1656,364700.0,<1H OCEAN +-118.41,34.15,46.0,1628.0,259.0,500.0,258.0,6.083,424000.0,<1H OCEAN +-118.36,34.14,30.0,1376.0,317.0,629.0,320.0,3.6823,295200.0,<1H OCEAN +-118.37,34.14,8.0,4382.0,1560.0,2138.0,1411.0,3.5714,197900.0,<1H OCEAN +-118.37,34.14,21.0,4670.0,1161.0,1914.0,1094.0,3.7986,367700.0,<1H OCEAN +-118.38,34.14,42.0,1253.0,225.0,492.0,224.0,7.7112,386700.0,<1H OCEAN +-118.39,34.14,19.0,5076.0,1034.0,2021.0,960.0,5.5683,309200.0,<1H OCEAN +-118.39,34.15,36.0,2696.0,713.0,905.0,659.0,3.1146,373500.0,<1H OCEAN +-118.35,34.13,39.0,1610.0,278.0,511.0,278.0,4.3333,385900.0,<1H OCEAN +-118.34,34.12,41.0,3257.0,679.0,1237.0,638.0,4.2415,409600.0,<1H OCEAN +-118.36,34.13,36.0,6871.0,1180.0,2216.0,1130.0,8.0499,495600.0,<1H OCEAN +-118.37,34.14,23.0,1883.0,512.0,774.0,478.0,3.5096,396400.0,<1H OCEAN +-118.37,34.13,28.0,4287.0,627.0,1498.0,615.0,8.5677,500001.0,<1H OCEAN +-118.39,34.14,34.0,4624.0,781.0,1572.0,719.0,6.5533,500001.0,<1H OCEAN +-118.38,34.14,40.0,1965.0,354.0,666.0,357.0,6.0876,483800.0,<1H OCEAN +-118.4,34.13,32.0,8262.0,1156.0,2712.0,1125.0,10.5575,500001.0,<1H OCEAN +-118.4,34.14,52.0,1695.0,281.0,595.0,264.0,6.0678,399300.0,<1H OCEAN +-118.4,34.14,45.0,417.0,89.0,187.0,88.0,5.1377,360700.0,<1H OCEAN +-118.41,34.14,33.0,778.0,143.0,258.0,130.0,5.738,497600.0,<1H OCEAN +-118.42,34.14,27.0,3990.0,892.0,1417.0,800.0,4.0439,500001.0,<1H OCEAN +-118.42,34.13,38.0,3830.0,518.0,1292.0,516.0,12.7823,500001.0,<1H OCEAN +-118.22,34.14,52.0,2298.0,406.0,1203.0,387.0,5.5291,274600.0,<1H OCEAN +-118.22,34.14,52.0,1388.0,271.0,735.0,239.0,3.7404,247700.0,<1H OCEAN +-118.2,34.14,52.0,3800.0,646.0,1842.0,620.0,5.5524,293900.0,<1H OCEAN +-118.19,34.14,46.0,2387.0,488.0,1181.0,456.0,3.6058,257900.0,<1H OCEAN +-118.19,34.14,38.0,1826.0,300.0,793.0,297.0,5.2962,291500.0,<1H OCEAN +-118.23,34.14,39.0,277.0,89.0,182.0,91.0,2.3958,175000.0,<1H OCEAN +-118.22,34.14,50.0,3657.0,708.0,1725.0,644.0,5.5456,258100.0,<1H OCEAN +-118.22,34.13,35.0,2983.0,526.0,1614.0,543.0,5.7794,272400.0,<1H OCEAN +-118.2,34.14,52.0,2090.0,466.0,1219.0,390.0,4.0909,204200.0,<1H OCEAN +-118.21,34.14,44.0,1681.0,407.0,1105.0,387.0,3.2222,186500.0,<1H OCEAN +-118.21,34.14,25.0,1908.0,628.0,1412.0,588.0,2.2267,189800.0,<1H OCEAN +-118.2,34.14,51.0,1941.0,378.0,1012.0,371.0,3.9375,217000.0,<1H OCEAN +-118.19,34.14,47.0,2525.0,523.0,1514.0,498.0,4.3359,209200.0,<1H OCEAN +-118.19,34.13,52.0,2012.0,458.0,1314.0,434.0,3.925,180400.0,<1H OCEAN +-118.2,34.13,52.0,2035.0,459.0,2589.0,438.0,3.5349,193600.0,<1H OCEAN +-118.21,34.13,52.0,2465.0,611.0,1433.0,570.0,3.25,214200.0,<1H OCEAN +-118.22,34.13,47.0,1585.0,420.0,949.0,366.0,2.7098,173800.0,<1H OCEAN +-118.22,34.13,52.0,791.0,174.0,501.0,162.0,3.3542,178100.0,<1H OCEAN +-118.18,34.13,52.0,2228.0,475.0,1311.0,452.0,3.5341,182100.0,<1H OCEAN +-118.18,34.12,52.0,1081.0,311.0,904.0,283.0,1.9219,165100.0,<1H OCEAN +-118.18,34.12,45.0,2397.0,488.0,1569.0,471.0,4.21,167900.0,<1H OCEAN +-118.17,34.12,35.0,2568.0,672.0,1696.0,605.0,2.9154,169200.0,<1H OCEAN +-118.18,34.12,29.0,2640.0,737.0,1795.0,655.0,2.369,173400.0,<1H OCEAN +-118.17,34.12,30.0,3376.0,720.0,1990.0,725.0,3.7813,232000.0,<1H OCEAN +-118.19,34.13,50.0,1309.0,302.0,883.0,293.0,3.1287,198000.0,<1H OCEAN +-118.19,34.12,52.0,679.0,132.0,483.0,163.0,4.2344,162500.0,<1H OCEAN +-118.19,34.12,41.0,2591.0,682.0,2366.0,583.0,2.3071,146400.0,<1H OCEAN +-118.19,34.12,44.0,1219.0,324.0,1036.0,282.0,4.0417,170600.0,<1H OCEAN +-118.19,34.12,36.0,2833.0,720.0,2148.0,709.0,2.7012,172100.0,<1H OCEAN +-118.2,34.13,30.0,3369.0,824.0,2032.0,795.0,4.0052,196400.0,<1H OCEAN +-118.2,34.13,50.0,2929.0,588.0,1931.0,574.0,3.3438,173600.0,<1H OCEAN +-118.2,34.12,52.0,1580.0,426.0,1462.0,406.0,3.3326,167600.0,<1H OCEAN +-118.2,34.12,41.0,1908.0,503.0,1557.0,453.0,2.9194,162000.0,<1H OCEAN +-118.21,34.12,52.0,1590.0,360.0,1127.0,321.0,3.4625,173900.0,<1H OCEAN +-118.21,34.12,41.0,1904.0,514.0,1666.0,498.0,3.6845,175800.0,<1H OCEAN +-118.21,34.12,52.0,1301.0,389.0,1189.0,361.0,2.5139,190000.0,<1H OCEAN +-118.2,34.11,52.0,678.0,173.0,791.0,186.0,4.0625,171300.0,<1H OCEAN +-118.2,34.11,46.0,3659.0,1068.0,4153.0,993.0,2.5211,162900.0,<1H OCEAN +-118.2,34.11,52.0,1901.0,525.0,1856.0,480.0,3.0,156400.0,<1H OCEAN +-118.2,34.12,44.0,1565.0,398.0,1500.0,407.0,2.8125,155600.0,<1H OCEAN +-118.19,34.12,46.0,3387.0,820.0,2833.0,813.0,2.987,176900.0,<1H OCEAN +-118.19,34.11,40.0,1266.0,348.0,1032.0,315.0,2.1667,150000.0,<1H OCEAN +-118.19,34.12,35.0,2524.0,749.0,2487.0,679.0,2.4932,167700.0,<1H OCEAN +-118.18,34.11,33.0,1523.0,391.0,753.0,298.0,2.6591,183800.0,<1H OCEAN +-118.18,34.11,44.0,1346.0,398.0,1204.0,344.0,2.3984,152200.0,<1H OCEAN +-118.19,34.11,38.0,1158.0,309.0,1051.0,322.0,2.286,169300.0,<1H OCEAN +-118.19,34.11,26.0,1638.0,457.0,1155.0,437.0,3.4227,143800.0,<1H OCEAN +-118.19,34.1,42.0,1577.0,379.0,1317.0,378.0,3.2121,153900.0,<1H OCEAN +-118.2,34.11,36.0,1441.0,534.0,1809.0,500.0,2.1793,185700.0,<1H OCEAN +-118.2,34.11,37.0,2040.0,611.0,1698.0,545.0,1.9355,166300.0,<1H OCEAN +-118.2,34.1,30.0,3643.0,1197.0,4336.0,1163.0,2.07,154500.0,<1H OCEAN +-118.21,34.11,32.0,2759.0,499.0,1661.0,533.0,4.3812,228200.0,<1H OCEAN +-118.21,34.1,40.0,1684.0,316.0,795.0,330.0,5.2723,218300.0,<1H OCEAN +-118.21,34.1,47.0,5077.0,1271.0,3348.0,1106.0,3.0377,186800.0,<1H OCEAN +-118.22,34.1,35.0,4003.0,788.0,2785.0,764.0,4.1213,252100.0,<1H OCEAN +-118.23,34.1,38.0,1051.0,249.0,799.0,229.0,2.712,143800.0,<1H OCEAN +-118.23,34.1,46.0,2483.0,587.0,2121.0,553.0,2.2788,152900.0,<1H OCEAN +-118.21,34.1,36.0,2000.0,533.0,1234.0,535.0,3.7437,241700.0,<1H OCEAN +-118.21,34.09,34.0,1660.0,412.0,1678.0,382.0,2.7708,148200.0,<1H OCEAN +-118.22,34.1,33.0,1903.0,386.0,1187.0,340.0,4.0469,196600.0,<1H OCEAN +-118.23,34.1,41.0,1353.0,379.0,1536.0,416.0,2.1687,157000.0,<1H OCEAN +-118.22,34.09,42.0,1706.0,488.0,1941.0,447.0,2.5213,149700.0,<1H OCEAN +-118.22,34.09,36.0,1427.0,415.0,1835.0,410.0,2.48,138900.0,<1H OCEAN +-118.22,34.09,45.0,1072.0,275.0,996.0,243.0,2.8194,165000.0,<1H OCEAN +-118.23,34.09,41.0,438.0,201.0,690.0,161.0,2.0476,181300.0,<1H OCEAN +-118.23,34.13,47.0,1162.0,235.0,781.0,268.0,4.6528,244400.0,<1H OCEAN +-118.23,34.13,48.0,737.0,166.0,462.0,131.0,3.5893,212500.0,<1H OCEAN +-118.22,34.13,40.0,2749.0,580.0,1375.0,511.0,4.825,205800.0,<1H OCEAN +-118.23,34.13,34.0,609.0,149.0,407.0,145.0,4.5766,185800.0,<1H OCEAN +-118.23,34.13,48.0,1308.0,,835.0,294.0,4.2891,214800.0,<1H OCEAN +-118.23,34.13,37.0,1799.0,426.0,1088.0,417.0,2.975,244500.0,<1H OCEAN +-118.22,34.12,28.0,3306.0,1025.0,2670.0,942.0,3.0919,185400.0,<1H OCEAN +-118.21,34.12,35.0,1937.0,439.0,1523.0,412.0,3.5638,170500.0,<1H OCEAN +-118.22,34.11,36.0,2870.0,529.0,1371.0,565.0,5.2083,220900.0,<1H OCEAN +-118.22,34.12,37.0,1298.0,242.0,750.0,255.0,5.2049,240800.0,<1H OCEAN +-118.23,34.12,28.0,1546.0,465.0,974.0,408.0,2.2843,183800.0,<1H OCEAN +-118.24,34.12,41.0,1213.0,301.0,801.0,300.0,3.1806,204200.0,<1H OCEAN +-118.23,34.12,32.0,2094.0,491.0,1413.0,479.0,4.5089,221100.0,<1H OCEAN +-118.23,34.11,31.0,1021.0,191.0,495.0,191.0,5.5051,223500.0,<1H OCEAN +-118.23,34.11,35.0,4148.0,971.0,3220.0,892.0,3.3389,187100.0,<1H OCEAN +-118.25,34.12,11.0,1281.0,418.0,1584.0,330.0,2.8889,153100.0,<1H OCEAN +-118.24,34.12,29.0,2904.0,892.0,3320.0,765.0,2.6111,168800.0,<1H OCEAN +-118.24,34.12,34.0,80.0,26.0,125.0,35.0,0.8907,154200.0,<1H OCEAN +-118.24,34.11,50.0,2141.0,451.0,1777.0,426.0,2.7679,178800.0,<1H OCEAN +-118.24,34.11,39.0,1148.0,348.0,1161.0,333.0,2.2167,176700.0,<1H OCEAN +-118.23,34.11,33.0,2612.0,646.0,2496.0,606.0,3.133,156000.0,<1H OCEAN +-118.26,34.12,45.0,2839.0,698.0,1768.0,653.0,3.1306,214000.0,<1H OCEAN +-118.26,34.11,47.0,2183.0,510.0,1445.0,503.0,3.6667,210900.0,<1H OCEAN +-118.25,34.11,43.0,2230.0,583.0,1667.0,543.0,2.8667,217800.0,<1H OCEAN +-118.25,34.11,43.0,2222.0,635.0,1817.0,606.0,2.7466,208900.0,<1H OCEAN +-118.25,34.11,39.0,1415.0,369.0,1467.0,351.0,3.015,156300.0,<1H OCEAN +-118.24,34.1,42.0,1525.0,456.0,1688.0,432.0,3.1691,141300.0,<1H OCEAN +-118.25,34.11,52.0,125.0,42.0,99.0,40.0,3.4375,170000.0,<1H OCEAN +-118.25,34.1,42.0,598.0,147.0,312.0,144.0,2.625,164300.0,<1H OCEAN +-118.25,34.1,42.0,4198.0,956.0,1935.0,878.0,3.7184,277300.0,<1H OCEAN +-118.26,34.11,52.0,1740.0,402.0,749.0,335.0,3.5673,270700.0,<1H OCEAN +-118.27,34.14,29.0,3768.0,1211.0,2320.0,1030.0,2.7685,204500.0,<1H OCEAN +-118.27,34.13,47.0,1375.0,359.0,1512.0,418.0,2.1071,208900.0,<1H OCEAN +-118.27,34.13,46.0,1613.0,396.0,966.0,416.0,2.9392,230300.0,<1H OCEAN +-118.27,34.11,36.0,1832.0,539.0,934.0,486.0,3.0521,276600.0,<1H OCEAN +-118.27,34.11,39.0,3825.0,916.0,1378.0,746.0,4.4094,352600.0,<1H OCEAN +-118.28,34.11,38.0,4453.0,1156.0,1830.0,1099.0,3.6181,495600.0,<1H OCEAN +-118.28,34.11,45.0,1607.0,331.0,633.0,332.0,3.1445,438300.0,<1H OCEAN +-118.28,34.12,50.0,2384.0,312.0,836.0,337.0,12.8763,500001.0,<1H OCEAN +-118.26,34.12,52.0,1942.0,476.0,1375.0,477.0,2.7348,209100.0,<1H OCEAN +-118.26,34.12,52.0,2290.0,520.0,1278.0,485.0,3.8393,238200.0,<1H OCEAN +-118.27,34.12,50.0,2037.0,440.0,1089.0,417.0,3.575,230600.0,<1H OCEAN +-118.29,34.11,30.0,2774.0,570.0,1076.0,580.0,5.296,500001.0,<1H OCEAN +-118.29,34.11,40.0,2681.0,737.0,1144.0,669.0,3.0461,264300.0,<1H OCEAN +-118.29,34.1,39.0,2196.0,582.0,1165.0,538.0,2.9417,254200.0,<1H OCEAN +-118.29,34.1,43.0,1711.0,443.0,1190.0,429.0,3.5172,265500.0,<1H OCEAN +-118.29,34.11,24.0,3696.0,1125.0,1685.0,1031.0,2.3789,266700.0,<1H OCEAN +-118.29,34.11,49.0,2850.0,379.0,1113.0,380.0,12.9591,500001.0,<1H OCEAN +-118.29,34.11,48.0,1448.0,295.0,681.0,287.0,3.2333,436400.0,<1H OCEAN +-118.3,34.11,52.0,3136.0,675.0,1213.0,606.0,3.5806,391900.0,<1H OCEAN +-118.3,34.1,37.0,5305.0,1980.0,3895.0,1874.0,2.0672,283300.0,<1H OCEAN +-118.3,34.11,25.0,1590.0,218.0,568.0,206.0,8.4389,500001.0,<1H OCEAN +-118.3,34.11,52.0,1954.0,245.0,645.0,237.0,6.9391,500001.0,<1H OCEAN +-118.31,34.11,52.0,1875.0,303.0,735.0,293.0,5.8659,433300.0,<1H OCEAN +-118.31,34.12,39.0,3895.0,561.0,1271.0,536.0,8.0073,500001.0,<1H OCEAN +-118.31,34.13,40.0,2822.0,443.0,907.0,414.0,7.2692,498700.0,<1H OCEAN +-118.32,34.12,52.0,3410.0,800.0,1218.0,783.0,4.15,393500.0,<1H OCEAN +-118.32,34.11,42.0,2462.0,543.0,857.0,482.0,4.0833,434400.0,<1H OCEAN +-118.32,34.11,33.0,5135.0,1450.0,2404.0,1292.0,3.2462,435700.0,<1H OCEAN +-118.32,34.11,48.0,4472.0,1579.0,2796.0,1397.0,2.3974,410700.0,<1H OCEAN +-118.33,34.11,38.0,3495.0,1100.0,1939.0,994.0,2.2148,438300.0,<1H OCEAN +-118.33,34.11,48.0,1601.0,464.0,784.0,461.0,3.0642,342900.0,<1H OCEAN +-118.33,34.11,37.0,2330.0,434.0,846.0,457.0,8.2335,430200.0,<1H OCEAN +-118.32,34.13,34.0,1856.0,273.0,540.0,264.0,4.0833,500001.0,<1H OCEAN +-118.33,34.12,23.0,1894.0,416.0,769.0,392.0,6.0352,500001.0,<1H OCEAN +-118.34,34.13,45.0,2375.0,417.0,751.0,410.0,6.6739,500001.0,<1H OCEAN +-118.32,34.14,23.0,4574.0,1423.0,1624.0,995.0,4.0965,500001.0,<1H OCEAN +-118.34,34.11,40.0,5485.0,1242.0,2034.0,1133.0,3.6974,500001.0,<1H OCEAN +-118.35,34.1,26.0,3977.0,1050.0,1720.0,935.0,3.358,364500.0,<1H OCEAN +-118.36,34.1,52.0,1295.0,281.0,578.0,273.0,2.976,405100.0,<1H OCEAN +-118.36,34.1,52.0,1096.0,247.0,423.0,230.0,3.0179,500001.0,<1H OCEAN +-118.35,34.1,18.0,7432.0,2793.0,3596.0,2270.0,2.8036,225000.0,<1H OCEAN +-118.35,34.1,16.0,2930.0,1038.0,1648.0,980.0,2.6458,372200.0,<1H OCEAN +-118.35,34.1,20.0,2745.0,782.0,1161.0,739.0,3.9044,436400.0,<1H OCEAN +-118.35,34.1,18.0,4109.0,1301.0,2103.0,1116.0,2.325,250000.0,<1H OCEAN +-118.35,34.1,24.0,5477.0,1803.0,2863.0,1755.0,1.845,237500.0,<1H OCEAN +-118.34,34.11,51.0,937.0,348.0,527.0,333.0,4.3571,468800.0,<1H OCEAN +-118.34,34.1,29.0,3193.0,1452.0,2039.0,1265.0,1.8209,500001.0,<1H OCEAN +-118.34,34.1,24.0,1996.0,791.0,1215.0,672.0,1.5429,325000.0,<1H OCEAN +-118.34,34.1,28.0,2223.0,752.0,1271.0,684.0,2.5434,232100.0,<1H OCEAN +-118.33,34.1,30.0,5293.0,2446.0,4123.0,2127.0,1.51,187500.0,<1H OCEAN +-118.33,34.1,43.0,2732.0,1646.0,3049.0,1429.0,1.3157,333300.0,<1H OCEAN +-118.31,34.1,40.0,4984.0,2158.0,4828.0,2028.0,1.6903,350000.0,<1H OCEAN +-118.32,34.1,28.0,1759.0,716.0,1463.0,620.0,1.7306,450000.0,<1H OCEAN +-118.3,34.1,35.0,7517.0,2961.0,5899.0,2769.0,1.9354,340000.0,<1H OCEAN +-118.3,34.1,25.0,3926.0,1715.0,4865.0,1612.0,1.6112,262500.0,<1H OCEAN +-118.31,34.1,36.0,2288.0,1033.0,3030.0,890.0,1.5328,250000.0,<1H OCEAN +-118.31,34.1,33.0,766.0,347.0,918.0,305.0,1.705,350000.0,<1H OCEAN +-118.33,34.1,48.0,1116.0,524.0,1610.0,483.0,1.625,237500.0,<1H OCEAN +-118.33,34.1,45.0,1913.0,696.0,1552.0,611.0,2.0888,237500.0,<1H OCEAN +-118.32,34.1,43.0,1615.0,734.0,1460.0,644.0,1.4005,193800.0,<1H OCEAN +-118.32,34.09,34.0,2473.0,1171.0,2655.0,1083.0,1.6331,162500.0,<1H OCEAN +-118.33,34.09,30.0,1679.0,682.0,1445.0,579.0,2.1403,200000.0,<1H OCEAN +-118.33,34.1,29.0,732.0,288.0,691.0,278.0,2.1866,250000.0,<1H OCEAN +-118.31,34.1,34.0,399.0,141.0,482.0,134.0,1.625,67500.0,<1H OCEAN +-118.31,34.09,34.0,2065.0,839.0,2626.0,775.0,1.8214,211100.0,<1H OCEAN +-118.31,34.09,28.0,720.0,267.0,891.0,265.0,1.8977,100000.0,<1H OCEAN +-118.31,34.09,37.0,773.0,,835.0,312.0,1.8576,193800.0,<1H OCEAN +-118.32,34.09,32.0,563.0,191.0,626.0,185.0,2.0341,250000.0,<1H OCEAN +-118.32,34.09,27.0,210.0,98.0,332.0,112.0,2.5556,175000.0,<1H OCEAN +-118.32,34.1,36.0,1655.0,690.0,1957.0,633.0,1.7325,221900.0,<1H OCEAN +-118.32,34.09,34.0,1478.0,675.0,1976.0,653.0,2.0557,225000.0,<1H OCEAN +-118.32,34.1,31.0,622.0,229.0,597.0,227.0,1.5284,200000.0,<1H OCEAN +-118.32,34.1,30.0,2193.0,965.0,2197.0,836.0,1.8277,137500.0,<1H OCEAN +-118.32,34.1,52.0,786.0,270.0,756.0,273.0,2.2311,206300.0,<1H OCEAN +-118.3,34.1,29.0,3403.0,1367.0,3432.0,1174.0,1.7083,166700.0,<1H OCEAN +-118.3,34.09,40.0,3058.0,1215.0,3953.0,1223.0,1.8156,218800.0,<1H OCEAN +-118.31,34.09,36.0,787.0,420.0,1506.0,360.0,1.2412,216700.0,<1H OCEAN +-118.3,34.1,38.0,2067.0,914.0,2717.0,853.0,1.7641,250000.0,<1H OCEAN +-118.3,34.1,36.0,2284.0,899.0,1964.0,839.0,1.9297,203300.0,<1H OCEAN +-118.29,34.09,34.0,2716.0,1114.0,2991.0,1021.0,1.7514,187500.0,<1H OCEAN +-118.3,34.09,36.0,2332.0,993.0,3155.0,927.0,2.2612,230400.0,<1H OCEAN +-118.29,34.1,39.0,631.0,298.0,744.0,274.0,2.7054,162500.0,<1H OCEAN +-118.29,34.09,29.0,2240.0,792.0,2254.0,739.0,2.3317,172500.0,<1H OCEAN +-118.28,34.09,38.0,790.0,275.0,664.0,194.0,3.0357,175000.0,<1H OCEAN +-118.29,34.09,43.0,1583.0,658.0,1941.0,614.0,1.9835,225000.0,<1H OCEAN +-118.29,34.09,28.0,1562.0,648.0,1974.0,597.0,1.9766,112500.0,<1H OCEAN +-118.29,34.09,35.0,2198.0,998.0,3441.0,912.0,2.0467,158300.0,<1H OCEAN +-118.29,34.09,35.0,2624.0,1116.0,3548.0,1008.0,2.0132,198400.0,<1H OCEAN +-118.29,34.09,39.0,336.0,173.0,586.0,151.0,1.8056,262500.0,<1H OCEAN +-118.29,34.09,52.0,1272.0,322.0,984.0,353.0,1.9063,261600.0,<1H OCEAN +-118.3,34.09,29.0,3245.0,1190.0,3906.0,1102.0,2.1927,253300.0,<1H OCEAN +-118.3,34.09,25.0,2345.0,852.0,2860.0,862.0,1.4497,205600.0,<1H OCEAN +-118.3,34.09,32.0,2202.0,674.0,2178.0,635.0,2.0307,226700.0,<1H OCEAN +-118.31,34.09,36.0,2517.0,842.0,2446.0,689.0,2.1524,187500.0,<1H OCEAN +-118.31,34.09,30.0,3165.0,1263.0,3678.0,1141.0,2.0,240600.0,<1H OCEAN +-118.31,34.09,42.0,1951.0,846.0,2500.0,813.0,1.5195,218200.0,<1H OCEAN +-118.32,34.09,44.0,2666.0,,2297.0,726.0,1.676,208800.0,<1H OCEAN +-118.32,34.09,30.0,1871.0,766.0,2595.0,819.0,2.0044,212500.0,<1H OCEAN +-118.32,34.09,28.0,2173.0,819.0,2548.0,763.0,1.879,218800.0,<1H OCEAN +-118.33,34.09,36.0,654.0,186.0,416.0,138.0,3.6953,200000.0,<1H OCEAN +-118.33,34.09,36.0,561.0,180.0,340.0,127.0,1.4375,165000.0,<1H OCEAN +-118.33,34.09,40.0,2004.0,687.0,1514.0,542.0,1.9911,220000.0,<1H OCEAN +-118.34,34.09,5.0,2665.0,954.0,1733.0,766.0,2.3568,204700.0,<1H OCEAN +-118.34,34.09,14.0,3032.0,999.0,1691.0,841.0,2.2,210000.0,<1H OCEAN +-118.34,34.08,50.0,3457.0,854.0,1584.0,841.0,3.1078,346700.0,<1H OCEAN +-118.34,34.09,52.0,1731.0,502.0,849.0,466.0,3.2946,321600.0,<1H OCEAN +-118.34,34.08,52.0,1430.0,186.0,547.0,178.0,10.3661,500001.0,<1H OCEAN +-118.35,34.09,47.0,1800.0,546.0,921.0,478.0,2.8021,280600.0,<1H OCEAN +-118.35,34.08,52.0,1003.0,200.0,514.0,204.0,3.8472,395700.0,<1H OCEAN +-118.35,34.08,52.0,2088.0,388.0,908.0,375.0,3.8141,342000.0,<1H OCEAN +-118.35,34.09,42.0,2210.0,643.0,1228.0,605.0,2.5982,315800.0,<1H OCEAN +-118.35,34.08,52.0,1710.0,350.0,727.0,355.0,4.5833,333900.0,<1H OCEAN +-118.36,34.08,52.0,1965.0,480.0,794.0,451.0,3.2824,304800.0,<1H OCEAN +-118.32,34.08,52.0,1164.0,257.0,575.0,251.0,3.125,380400.0,<1H OCEAN +-118.33,34.08,52.0,1777.0,454.0,671.0,439.0,3.5083,500001.0,<1H OCEAN +-118.33,34.08,50.0,2989.0,832.0,1345.0,775.0,3.2426,442900.0,<1H OCEAN +-118.31,34.08,30.0,1390.0,457.0,1460.0,423.0,2.2422,254500.0,<1H OCEAN +-118.31,34.08,31.0,2275.0,823.0,2189.0,720.0,1.7542,287500.0,<1H OCEAN +-118.32,34.08,46.0,2038.0,534.0,1250.0,525.0,2.4196,358100.0,<1H OCEAN +-118.31,34.08,23.0,1443.0,521.0,1264.0,450.0,2.7543,220000.0,<1H OCEAN +-118.32,34.08,52.0,1137.0,304.0,754.0,297.0,3.37,330300.0,<1H OCEAN +-118.32,34.08,52.0,2370.0,473.0,1053.0,434.0,4.1429,380300.0,<1H OCEAN +-118.3,34.08,34.0,2501.0,1047.0,3326.0,970.0,1.8771,247500.0,<1H OCEAN +-118.3,34.08,36.0,1276.0,503.0,1502.0,450.0,2.1766,205600.0,<1H OCEAN +-118.31,34.08,27.0,1514.0,510.0,1603.0,518.0,2.8971,251100.0,<1H OCEAN +-118.31,34.08,26.0,1609.0,534.0,1868.0,497.0,2.7038,227100.0,<1H OCEAN +-118.29,34.08,34.0,479.0,182.0,557.0,170.0,1.525,210000.0,<1H OCEAN +-118.29,34.08,23.0,1864.0,937.0,2795.0,858.0,1.8495,212500.0,<1H OCEAN +-118.3,34.08,34.0,1562.0,651.0,1774.0,559.0,1.5685,225000.0,<1H OCEAN +-118.3,34.08,32.0,2880.0,1063.0,3646.0,1028.0,2.3846,258300.0,<1H OCEAN +-118.29,34.08,25.0,2459.0,823.0,2635.0,763.0,2.4,173900.0,<1H OCEAN +-118.29,34.08,38.0,380.0,130.0,445.0,140.0,1.9286,137500.0,<1H OCEAN +-118.37,34.12,34.0,2821.0,399.0,843.0,391.0,11.615,500001.0,<1H OCEAN +-118.36,34.12,26.0,3902.0,610.0,1468.0,632.0,8.5136,500001.0,<1H OCEAN +-118.35,34.11,33.0,7478.0,1678.0,2701.0,1500.0,4.1717,500001.0,<1H OCEAN +-118.36,34.11,35.0,3946.0,695.0,1361.0,620.0,6.5195,500001.0,<1H OCEAN +-118.38,34.11,38.0,2601.0,523.0,870.0,474.0,7.1134,416700.0,<1H OCEAN +-118.37,34.11,42.0,5518.0,979.0,1863.0,957.0,8.5842,500001.0,<1H OCEAN +-118.36,34.1,36.0,2963.0,838.0,1129.0,745.0,2.5588,500001.0,<1H OCEAN +-118.37,34.1,37.0,407.0,67.0,100.0,47.0,15.0001,500001.0,<1H OCEAN +-118.38,34.1,39.0,3798.0,586.0,975.0,525.0,9.3092,500001.0,<1H OCEAN +-118.39,34.1,30.0,6310.0,957.0,1776.0,880.0,8.944,500001.0,<1H OCEAN +-118.39,34.09,41.0,730.0,126.0,230.0,125.0,4.3214,500001.0,<1H OCEAN +-118.36,34.09,38.0,2158.0,582.0,1061.0,577.0,2.9643,355300.0,<1H OCEAN +-118.36,34.08,40.0,3110.0,764.0,1557.0,763.0,1.9937,367100.0,<1H OCEAN +-118.37,34.08,52.0,2946.0,695.0,1258.0,650.0,3.9783,374100.0,<1H OCEAN +-118.37,34.08,22.0,3008.0,938.0,1224.0,816.0,3.2149,300000.0,<1H OCEAN +-118.37,34.09,31.0,2697.0,706.0,1059.0,689.0,2.8942,500001.0,<1H OCEAN +-118.36,34.08,45.0,2195.0,483.0,1265.0,455.0,3.3864,397900.0,<1H OCEAN +-118.37,34.08,52.0,1466.0,254.0,600.0,253.0,5.7524,393600.0,<1H OCEAN +-118.37,34.08,52.0,1234.0,223.0,543.0,213.0,6.0338,423700.0,<1H OCEAN +-118.26,34.1,48.0,2566.0,571.0,1421.0,563.0,3.6579,318600.0,<1H OCEAN +-118.26,34.1,52.0,1310.0,263.0,689.0,208.0,4.0721,350000.0,<1H OCEAN +-118.27,34.1,51.0,3149.0,519.0,1082.0,510.0,6.4459,421600.0,<1H OCEAN +-118.27,34.1,41.0,3729.0,740.0,1364.0,707.0,5.7778,412700.0,<1H OCEAN +-118.27,34.11,41.0,4138.0,1130.0,1859.0,1030.0,2.978,306800.0,<1H OCEAN +-118.28,34.11,46.0,1156.0,203.0,514.0,213.0,4.2019,352100.0,<1H OCEAN +-118.28,34.11,52.0,2036.0,348.0,775.0,332.0,5.4122,397500.0,<1H OCEAN +-118.28,34.11,52.0,1803.0,437.0,787.0,388.0,4.5781,360500.0,<1H OCEAN +-118.28,34.1,44.0,2728.0,585.0,1227.0,567.0,4.0602,324000.0,<1H OCEAN +-118.27,34.1,50.0,2113.0,398.0,793.0,418.0,4.7132,304600.0,<1H OCEAN +-118.28,34.1,49.0,1767.0,467.0,1066.0,438.0,3.0958,210900.0,<1H OCEAN +-118.28,34.1,48.0,805.0,246.0,633.0,235.0,2.3421,200000.0,<1H OCEAN +-118.28,34.1,49.0,2843.0,880.0,2004.0,796.0,2.7875,217300.0,<1H OCEAN +-118.27,34.09,48.0,1527.0,295.0,589.0,286.0,4.1667,344800.0,<1H OCEAN +-118.27,34.09,52.0,3225.0,763.0,1559.0,710.0,3.9674,268800.0,<1H OCEAN +-118.28,34.09,52.0,2273.0,663.0,1480.0,597.0,2.3333,196500.0,<1H OCEAN +-118.27,34.09,52.0,2327.0,555.0,1048.0,491.0,3.7847,252300.0,<1H OCEAN +-118.26,34.09,51.0,1532.0,366.0,669.0,333.0,3.6434,278800.0,<1H OCEAN +-118.26,34.09,36.0,3503.0,833.0,2652.0,788.0,3.8448,241400.0,<1H OCEAN +-118.27,34.09,52.0,1079.0,222.0,439.0,201.0,4.625,230800.0,<1H OCEAN +-118.27,34.09,44.0,3646.0,912.0,1783.0,861.0,2.9709,225000.0,<1H OCEAN +-118.26,34.08,52.0,984.0,276.0,994.0,260.0,2.3816,166700.0,<1H OCEAN +-118.26,34.08,41.0,1396.0,360.0,1069.0,363.0,2.4375,203300.0,<1H OCEAN +-118.26,34.08,46.0,945.0,250.0,910.0,252.0,3.5039,187500.0,<1H OCEAN +-118.27,34.08,35.0,1147.0,365.0,1016.0,296.0,2.3913,198800.0,<1H OCEAN +-118.26,34.07,36.0,2306.0,813.0,2823.0,765.0,2.0214,170500.0,<1H OCEAN +-118.26,34.07,28.0,579.0,184.0,673.0,202.0,2.625,187500.0,<1H OCEAN +-118.27,34.07,27.0,1190.0,,1795.0,422.0,1.7016,160000.0,<1H OCEAN +-118.27,34.08,38.0,2265.0,801.0,2899.0,792.0,2.5521,157500.0,<1H OCEAN +-118.27,34.08,46.0,3007.0,854.0,2587.0,814.0,2.7179,184300.0,<1H OCEAN +-118.28,34.08,42.0,997.0,374.0,982.0,372.0,2.9423,200000.0,<1H OCEAN +-118.28,34.08,52.0,2465.0,773.0,2328.0,746.0,2.6178,203100.0,<1H OCEAN +-118.27,34.08,43.0,962.0,253.0,658.0,244.0,3.2386,185000.0,<1H OCEAN +-118.27,34.07,38.0,1270.0,556.0,1692.0,450.0,1.87,170800.0,<1H OCEAN +-118.28,34.08,42.0,1618.0,522.0,1454.0,440.0,3.1607,182000.0,<1H OCEAN +-118.28,34.09,52.0,1739.0,464.0,938.0,482.0,2.4429,228800.0,<1H OCEAN +-118.28,34.08,39.0,3162.0,896.0,1934.0,818.0,2.875,213500.0,<1H OCEAN +-118.28,34.08,40.0,1630.0,543.0,1568.0,510.0,2.7366,169100.0,<1H OCEAN +-118.28,34.09,49.0,3828.0,1197.0,2862.0,1009.0,2.4677,219200.0,<1H OCEAN +-118.23,34.07,35.0,1335.0,440.0,1586.0,445.0,1.9722,156300.0,<1H OCEAN +-118.23,34.07,40.0,506.0,119.0,397.0,114.0,3.1944,143800.0,<1H OCEAN +-118.24,34.08,52.0,109.0,20.0,86.0,24.0,4.9844,187500.0,<1H OCEAN +-118.24,34.08,52.0,137.0,26.0,65.0,24.0,4.025,137500.0,<1H OCEAN +-118.23,34.09,47.0,859.0,239.0,913.0,234.0,2.6442,136100.0,<1H OCEAN +-118.23,34.09,49.0,1638.0,456.0,1500.0,430.0,2.6923,150000.0,<1H OCEAN +-118.23,34.09,45.0,1747.0,484.0,1680.0,441.0,2.6051,155500.0,<1H OCEAN +-118.25,34.09,52.0,2050.0,429.0,957.0,418.0,3.5603,210000.0,<1H OCEAN +-118.25,34.09,52.0,104.0,20.0,32.0,17.0,3.75,241700.0,<1H OCEAN +-118.25,34.08,44.0,1425.0,438.0,1121.0,374.0,2.1108,200000.0,<1H OCEAN +-118.25,34.08,47.0,2133.0,689.0,2104.0,662.0,2.6136,169200.0,<1H OCEAN +-118.25,34.09,43.0,1903.0,635.0,1919.0,613.0,2.6336,174300.0,<1H OCEAN +-118.25,34.09,52.0,1866.0,470.0,1211.0,417.0,2.935,189400.0,<1H OCEAN +-118.26,34.08,50.0,1791.0,660.0,2183.0,675.0,1.7945,166700.0,<1H OCEAN +-118.26,34.08,45.0,2174.0,627.0,1992.0,557.0,2.5428,167800.0,<1H OCEAN +-118.25,34.09,52.0,3142.0,765.0,1728.0,682.0,3.1864,189800.0,<1H OCEAN +-118.26,34.08,45.0,2225.0,827.0,2699.0,792.0,1.9209,179200.0,<1H OCEAN +-118.26,34.07,46.0,2341.0,703.0,2371.0,648.0,2.4038,181700.0,<1H OCEAN +-118.26,34.07,52.0,830.0,200.0,701.0,189.0,2.7625,232100.0,<1H OCEAN +-118.25,34.07,47.0,2059.0,618.0,2033.0,544.0,1.9028,217900.0,<1H OCEAN +-118.25,34.07,43.0,764.0,322.0,1275.0,306.0,2.0,175000.0,<1H OCEAN +-118.25,34.06,20.0,41.0,17.0,87.0,25.0,1.5491,225000.0,<1H OCEAN +-118.24,34.07,27.0,223.0,80.0,249.0,82.0,1.6136,137500.0,<1H OCEAN +-118.25,34.07,18.0,4297.0,1420.0,4332.0,1286.0,2.2545,192500.0,<1H OCEAN +-118.25,34.07,16.0,719.0,225.0,801.0,218.0,2.3942,133300.0,<1H OCEAN +-118.22,34.09,40.0,1081.0,282.0,970.0,263.0,1.875,150000.0,<1H OCEAN +-118.22,34.08,31.0,394.0,117.0,573.0,131.0,1.8173,154200.0,<1H OCEAN +-118.22,34.08,34.0,1709.0,562.0,2105.0,503.0,1.9704,152100.0,<1H OCEAN +-118.19,34.08,38.0,1241.0,298.0,1055.0,263.0,2.3409,115500.0,<1H OCEAN +-118.2,34.08,49.0,1320.0,309.0,1405.0,328.0,2.4375,114000.0,<1H OCEAN +-118.2,34.07,21.0,1353.0,380.0,1688.0,367.0,1.9937,139600.0,<1H OCEAN +-118.2,34.07,34.0,1765.0,551.0,2203.0,500.0,2.2708,159600.0,<1H OCEAN +-118.21,34.08,39.0,986.0,361.0,1347.0,299.0,2.2907,133900.0,<1H OCEAN +-118.21,34.08,26.0,2574.0,807.0,3163.0,802.0,1.9495,173200.0,<1H OCEAN +-118.2,34.09,39.0,1594.0,430.0,1668.0,378.0,2.5343,138200.0,<1H OCEAN +-118.2,34.08,41.0,1807.0,429.0,1699.0,424.0,2.2222,126000.0,<1H OCEAN +-118.19,34.1,39.0,2054.0,423.0,1205.0,403.0,4.239,213000.0,<1H OCEAN +-118.21,34.08,52.0,3672.0,808.0,3062.0,764.0,2.6806,153000.0,<1H OCEAN +-118.21,34.09,39.0,1287.0,353.0,1171.0,345.0,1.6118,138500.0,<1H OCEAN +-118.21,34.09,39.0,1561.0,445.0,1780.0,391.0,2.4632,144200.0,<1H OCEAN +-118.21,34.09,37.0,1822.0,498.0,1961.0,506.0,1.9881,159200.0,<1H OCEAN +-118.22,34.07,35.0,1504.0,477.0,2059.0,498.0,2.0133,145800.0,<1H OCEAN +-118.22,34.07,36.0,839.0,250.0,1079.0,245.0,1.7463,158300.0,<1H OCEAN +-118.21,34.07,31.0,1077.0,300.0,1198.0,274.0,2.1333,160200.0,<1H OCEAN +-118.21,34.07,52.0,1770.0,,1848.0,439.0,2.4135,167200.0,<1H OCEAN +-118.21,34.07,47.0,1346.0,383.0,1452.0,371.0,1.7292,191700.0,<1H OCEAN +-118.21,34.07,31.0,1453.0,404.0,1486.0,389.0,2.3859,153100.0,<1H OCEAN +-118.21,34.07,42.0,902.0,318.0,1312.0,323.0,1.9375,168800.0,<1H OCEAN +-118.21,34.06,29.0,1478.0,413.0,1580.0,394.0,1.8781,147500.0,<1H OCEAN +-118.16,34.09,36.0,3334.0,920.0,2881.0,800.0,2.1696,170800.0,<1H OCEAN +-118.17,34.1,48.0,2514.0,595.0,2484.0,601.0,3.1146,142500.0,<1H OCEAN +-118.17,34.1,37.0,299.0,89.0,318.0,92.0,1.3125,145800.0,<1H OCEAN +-118.17,34.09,45.0,1327.0,271.0,1069.0,284.0,3.3977,153800.0,<1H OCEAN +-118.18,34.09,40.0,2744.0,708.0,2747.0,674.0,2.6226,148800.0,<1H OCEAN +-118.18,34.09,44.0,1688.0,426.0,1605.0,384.0,3.3785,184900.0,<1H OCEAN +-118.19,34.09,41.0,2090.0,530.0,2043.0,537.0,1.9706,144200.0,<1H OCEAN +-118.18,34.1,10.0,1907.0,398.0,921.0,369.0,4.875,200400.0,<1H OCEAN +-118.18,34.1,10.0,1940.0,445.0,763.0,412.0,4.975,166700.0,<1H OCEAN +-118.18,34.1,7.0,2529.0,689.0,1215.0,577.0,4.7853,153100.0,<1H OCEAN +-118.18,34.1,8.0,1116.0,267.0,435.0,235.0,4.9231,230900.0,<1H OCEAN +-118.18,34.08,35.0,2226.0,602.0,2230.0,549.0,2.9167,129300.0,<1H OCEAN +-118.19,34.08,35.0,1554.0,381.0,1487.0,374.0,1.9038,139500.0,<1H OCEAN +-118.19,34.07,38.0,2965.0,665.0,2128.0,650.0,3.0241,166300.0,<1H OCEAN +-118.19,34.07,42.0,1555.0,337.0,1152.0,348.0,3.375,169600.0,<1H OCEAN +-118.19,34.06,44.0,1734.0,364.0,1133.0,351.0,2.5132,163100.0,<1H OCEAN +-118.16,34.09,33.0,1515.0,415.0,1345.0,346.0,2.375,175000.0,<1H OCEAN +-118.16,34.09,50.0,1568.0,302.0,1093.0,333.0,3.1442,162100.0,<1H OCEAN +-118.17,34.09,36.0,3066.0,797.0,3097.0,780.0,2.5523,156500.0,<1H OCEAN +-118.17,34.09,33.0,2907.0,797.0,3212.0,793.0,2.2348,146600.0,<1H OCEAN +-118.18,34.08,31.0,1318.0,311.0,1164.0,289.0,2.9939,135500.0,<1H OCEAN +-118.18,34.08,33.0,1369.0,408.0,1475.0,377.0,2.3281,151900.0,<1H OCEAN +-118.16,34.08,43.0,1523.0,378.0,1338.0,352.0,3.2031,144600.0,<1H OCEAN +-118.17,34.08,39.0,787.0,181.0,731.0,179.0,3.2279,158500.0,<1H OCEAN +-118.17,34.08,33.0,851.0,231.0,936.0,228.0,3.375,147500.0,<1H OCEAN +-118.18,34.07,28.0,2616.0,630.0,2218.0,621.0,2.6842,156000.0,<1H OCEAN +-118.17,34.07,19.0,2150.0,544.0,1510.0,467.0,3.4952,150000.0,<1H OCEAN +-118.16,34.07,41.0,247.0,55.0,925.0,50.0,3.5769,135700.0,<1H OCEAN +-118.17,34.07,37.0,1155.0,225.0,814.0,241.0,3.875,148500.0,<1H OCEAN +-118.18,34.06,27.0,2025.0,565.0,2189.0,577.0,2.6083,148600.0,<1H OCEAN +-118.19,34.06,32.0,555.0,159.0,748.0,163.0,1.9762,137500.0,<1H OCEAN +-118.19,34.06,47.0,2324.0,658.0,3020.0,594.0,1.1868,93800.0,<1H OCEAN +-118.2,34.06,46.0,453.0,119.0,533.0,132.0,2.2961,112500.0,<1H OCEAN +-118.2,34.06,40.0,1181.0,335.0,1441.0,337.0,2.1136,111800.0,<1H OCEAN +-118.2,34.05,8.0,762.0,204.0,728.0,174.0,2.4886,137500.0,<1H OCEAN +-118.19,34.05,46.0,1051.0,302.0,1435.0,305.0,1.6667,133600.0,<1H OCEAN +-118.2,34.05,36.0,2672.0,675.0,2883.0,674.0,2.0885,142800.0,<1H OCEAN +-118.19,34.05,37.0,349.0,79.0,276.0,64.0,3.2125,125000.0,<1H OCEAN +-118.2,34.06,46.0,321.0,101.0,401.0,86.0,2.1029,109400.0,<1H OCEAN +-118.21,34.06,30.0,511.0,153.0,1152.0,149.0,2.3611,156800.0,<1H OCEAN +-118.22,34.06,52.0,48.0,6.0,41.0,10.0,10.2264,112500.0,<1H OCEAN +-118.22,34.05,36.0,1243.0,470.0,1668.0,444.0,1.0714,137500.0,<1H OCEAN +-118.21,34.06,52.0,470.0,115.0,434.0,123.0,2.095,109100.0,<1H OCEAN +-118.22,34.06,34.0,1083.0,364.0,1132.0,338.0,2.2344,153100.0,<1H OCEAN +-118.22,34.05,34.0,1113.0,,928.0,290.0,3.1654,155000.0,<1H OCEAN +-118.22,34.05,41.0,1422.0,478.0,1640.0,434.0,1.6122,157100.0,<1H OCEAN +-118.21,34.05,26.0,745.0,258.0,694.0,236.0,1.3846,129200.0,<1H OCEAN +-118.21,34.05,28.0,1079.0,306.0,1358.0,285.0,2.52,131900.0,<1H OCEAN +-118.21,34.05,28.0,950.0,357.0,1485.0,345.0,1.9271,136400.0,<1H OCEAN +-118.21,34.05,45.0,2146.0,607.0,2868.0,625.0,2.121,144000.0,<1H OCEAN +-118.2,34.05,43.0,1165.0,317.0,1279.0,303.0,1.9615,141700.0,<1H OCEAN +-118.2,34.05,40.0,1146.0,323.0,1354.0,321.0,1.9205,121900.0,<1H OCEAN +-118.2,34.05,40.0,1082.0,318.0,1085.0,273.0,1.7054,117200.0,<1H OCEAN +-118.2,34.05,42.0,1703.0,586.0,2490.0,581.0,2.02,147200.0,<1H OCEAN +-118.2,34.05,41.0,1268.0,398.0,1887.0,407.0,2.625,150000.0,<1H OCEAN +-118.19,34.05,43.0,977.0,266.0,1084.0,259.0,2.7708,127900.0,<1H OCEAN +-118.19,34.05,41.0,1098.0,264.0,1178.0,245.0,2.1058,124300.0,<1H OCEAN +-118.2,34.05,50.0,1407.0,401.0,1526.0,385.0,2.29,121800.0,<1H OCEAN +-118.19,34.04,45.0,963.0,234.0,1194.0,239.0,2.1806,134900.0,<1H OCEAN +-118.19,34.04,40.0,1095.0,305.0,1322.0,281.0,1.9688,150000.0,<1H OCEAN +-118.19,34.03,52.0,1053.0,246.0,1036.0,249.0,2.1071,136700.0,<1H OCEAN +-118.19,34.03,50.0,1183.0,246.0,851.0,231.0,3.2639,142600.0,<1H OCEAN +-118.2,34.04,52.0,1249.0,307.0,1223.0,297.0,2.07,136300.0,<1H OCEAN +-118.2,34.04,47.0,1894.0,408.0,1629.0,379.0,3.7619,127600.0,<1H OCEAN +-118.2,34.03,52.0,1754.0,452.0,1849.0,445.0,2.3716,122800.0,<1H OCEAN +-118.2,34.04,44.0,1399.0,386.0,1419.0,373.0,1.8224,143800.0,<1H OCEAN +-118.2,34.04,36.0,1625.0,490.0,2003.0,478.0,2.181,147200.0,<1H OCEAN +-118.2,34.04,44.0,1582.0,544.0,1998.0,515.0,1.6888,125000.0,<1H OCEAN +-118.2,34.04,18.0,796.0,227.0,547.0,218.0,1.0333,135400.0,<1H OCEAN +-118.21,34.04,36.0,1825.0,479.0,2097.0,480.0,2.1862,135300.0,<1H OCEAN +-118.21,34.04,37.0,845.0,249.0,881.0,252.0,2.2454,165000.0,<1H OCEAN +-118.21,34.04,47.0,1325.0,393.0,1557.0,352.0,2.8,148400.0,<1H OCEAN +-118.21,34.05,28.0,1841.0,809.0,3199.0,727.0,1.6319,151600.0,<1H OCEAN +-118.21,34.04,52.0,846.0,271.0,1153.0,281.0,2.1923,155000.0,<1H OCEAN +-118.22,34.05,43.0,1153.0,411.0,1667.0,409.0,1.9402,139300.0,<1H OCEAN +-118.21,34.05,47.0,722.0,235.0,930.0,226.0,2.5455,114300.0,<1H OCEAN +-118.22,34.04,43.0,798.0,308.0,1417.0,325.0,1.4189,141700.0,<1H OCEAN +-118.22,34.05,44.0,1105.0,346.0,1598.0,372.0,1.2,115600.0,<1H OCEAN +-118.22,34.04,43.0,2343.0,803.0,2468.0,707.0,1.5163,115000.0,<1H OCEAN +-118.21,34.04,43.0,1502.0,477.0,1844.0,477.0,1.9405,152500.0,<1H OCEAN +-118.21,34.04,47.0,1306.0,391.0,1499.0,346.0,2.2788,139600.0,<1H OCEAN +-118.22,34.03,45.0,554.0,214.0,888.0,218.0,1.8125,139600.0,<1H OCEAN +-118.21,34.03,45.0,1860.0,472.0,1893.0,456.0,2.6573,141800.0,<1H OCEAN +-118.21,34.03,44.0,1550.0,407.0,1718.0,403.0,2.5268,141100.0,<1H OCEAN +-118.21,34.03,52.0,497.0,132.0,547.0,121.0,2.2083,146300.0,<1H OCEAN +-118.21,34.03,47.0,876.0,228.0,872.0,231.0,2.2656,145000.0,<1H OCEAN +-118.2,34.03,41.0,1292.0,334.0,1150.0,322.0,1.925,135200.0,<1H OCEAN +-118.2,34.02,49.0,1098.0,317.0,1411.0,301.0,2.75,146000.0,<1H OCEAN +-118.2,34.03,52.0,774.0,209.0,813.0,203.0,2.3472,135200.0,<1H OCEAN +-118.2,34.03,37.0,1583.0,392.0,1776.0,377.0,2.7266,140800.0,<1H OCEAN +-118.2,34.03,52.0,583.0,157.0,730.0,174.0,1.4115,140600.0,<1H OCEAN +-118.21,34.02,45.0,792.0,203.0,872.0,188.0,2.6875,129700.0,<1H OCEAN +-118.19,34.02,44.0,2702.0,770.0,3260.0,721.0,2.3575,144800.0,<1H OCEAN +-118.2,34.02,48.0,2230.0,593.0,2419.0,598.0,2.3944,130700.0,<1H OCEAN +-118.2,34.02,26.0,36.0,9.0,35.0,9.0,1.625,175000.0,<1H OCEAN +-118.2,34.02,42.0,498.0,120.0,548.0,119.0,3.7543,126600.0,<1H OCEAN +-118.21,34.02,52.0,22.0,7.0,55.0,7.0,7.5752,67500.0,<1H OCEAN +-118.21,34.02,43.0,1811.0,513.0,2123.0,487.0,1.3615,133300.0,<1H OCEAN +-118.23,34.05,52.0,346.0,270.0,346.0,251.0,2.5313,225000.0,<1H OCEAN +-118.24,34.05,13.0,1703.0,697.0,1823.0,669.0,0.8288,181300.0,<1H OCEAN +-118.24,34.04,52.0,116.0,107.0,171.0,92.0,1.0769,112500.0,<1H OCEAN +-118.24,34.06,33.0,390.0,199.0,435.0,193.0,1.1979,350000.0,<1H OCEAN +-118.24,34.06,8.0,1204.0,552.0,1074.0,517.0,1.0227,87500.0,<1H OCEAN +-118.24,34.06,19.0,2870.0,1021.0,3325.0,978.0,1.7395,162500.0,<1H OCEAN +-118.25,34.05,52.0,2806.0,1944.0,2232.0,1605.0,0.6775,350000.0,<1H OCEAN +-118.25,34.05,8.0,3105.0,1256.0,1086.0,997.0,0.8131,275000.0,<1H OCEAN +-118.25,34.06,12.0,4011.0,1438.0,1673.0,1088.0,5.3081,287500.0,<1H OCEAN +-118.26,34.05,52.0,58.0,52.0,41.0,27.0,4.0972,500001.0,<1H OCEAN +-118.26,34.04,6.0,1529.0,566.0,1051.0,473.0,2.462,162500.0,<1H OCEAN +-118.25,34.06,52.0,174.0,66.0,249.0,57.0,1.7763,312500.0,<1H OCEAN +-118.26,34.06,15.0,326.0,123.0,490.0,105.0,1.4886,175000.0,<1H OCEAN +-118.26,34.06,40.0,637.0,273.0,1150.0,263.0,1.8625,131300.0,<1H OCEAN +-118.26,34.07,52.0,1802.0,613.0,2382.0,587.0,1.8438,185900.0,<1H OCEAN +-118.26,34.07,40.0,680.0,273.0,995.0,249.0,2.2607,165600.0,<1H OCEAN +-118.26,34.07,30.0,929.0,238.0,763.0,214.0,2.5227,187500.0,<1H OCEAN +-118.26,34.06,38.0,715.0,282.0,1174.0,300.0,2.345,225000.0,<1H OCEAN +-118.26,34.06,42.0,2541.0,1282.0,3974.0,1189.0,1.5854,87500.0,<1H OCEAN +-118.27,34.07,42.0,1175.0,428.0,1593.0,407.0,2.3438,213300.0,<1H OCEAN +-118.27,34.06,30.0,1771.0,788.0,2188.0,764.0,1.5885,154200.0,<1H OCEAN +-118.27,34.07,34.0,786.0,341.0,1239.0,320.0,2.3438,152100.0,<1H OCEAN +-118.27,34.07,32.0,1657.0,579.0,2071.0,598.0,2.1135,152500.0,<1H OCEAN +-118.27,34.06,33.0,1416.0,686.0,2013.0,614.0,1.9818,208300.0,<1H OCEAN +-118.27,34.07,33.0,1177.0,468.0,1533.0,430.0,2.3981,183300.0,<1H OCEAN +-118.28,34.07,41.0,1072.0,331.0,1111.0,314.0,1.9233,207100.0,<1H OCEAN +-118.28,34.07,24.0,3247.0,1281.0,2642.0,1182.0,2.4632,216700.0,<1H OCEAN +-118.28,34.07,14.0,1924.0,926.0,2226.0,792.0,2.2552,265900.0,<1H OCEAN +-118.28,34.07,32.0,1777.0,536.0,1684.0,489.0,2.3636,190000.0,<1H OCEAN +-118.28,34.07,25.0,7522.0,3179.0,7221.0,2902.0,2.0173,177500.0,<1H OCEAN +-118.28,34.06,14.0,1787.0,853.0,2251.0,763.0,1.1642,400000.0,<1H OCEAN +-118.28,34.06,17.0,2518.0,1196.0,3051.0,1000.0,1.7199,175000.0,<1H OCEAN +-118.27,34.06,17.0,2124.0,1168.0,3915.0,1137.0,1.1346,137500.0,<1H OCEAN +-118.27,34.06,25.0,1714.0,1176.0,3723.0,1036.0,1.3241,112500.0,<1H OCEAN +-118.27,34.06,45.0,564.0,353.0,1172.0,319.0,1.494,187500.0,<1H OCEAN +-118.27,34.06,26.0,513.0,338.0,1204.0,321.0,1.4904,275000.0,<1H OCEAN +-118.26,34.06,33.0,1950.0,1047.0,3707.0,1012.0,1.7238,110000.0,<1H OCEAN +-118.27,34.05,37.0,350.0,245.0,1122.0,248.0,2.7634,137500.0,<1H OCEAN +-118.27,34.05,52.0,1292.0,864.0,2081.0,724.0,0.9563,275000.0,<1H OCEAN +-118.28,34.06,52.0,1261.0,616.0,2309.0,581.0,1.6184,225000.0,<1H OCEAN +-118.28,34.06,52.0,936.0,454.0,990.0,354.0,1.1122,187500.0,<1H OCEAN +-118.28,34.06,42.0,2472.0,,3795.0,1179.0,1.2254,162500.0,<1H OCEAN +-118.27,34.05,25.0,1316.0,836.0,2796.0,784.0,1.7866,325000.0,<1H OCEAN +-118.27,34.05,26.0,1164.0,674.0,1685.0,541.0,1.5727,225000.0,<1H OCEAN +-118.28,34.05,28.0,1306.0,637.0,2079.0,598.0,1.4615,275000.0,<1H OCEAN +-118.28,34.05,31.0,1525.0,730.0,2510.0,652.0,1.6355,162500.0,<1H OCEAN +-118.28,34.05,41.0,1788.0,774.0,2931.0,702.0,1.4413,158900.0,<1H OCEAN +-118.28,34.05,41.0,1075.0,597.0,2260.0,614.0,1.3,162500.0,<1H OCEAN +-118.28,34.05,44.0,968.0,384.0,1805.0,375.0,1.4801,212500.0,<1H OCEAN +-118.27,34.05,47.0,661.0,359.0,1406.0,307.0,1.3169,112500.0,<1H OCEAN +-118.27,34.04,13.0,1784.0,,2158.0,682.0,1.7038,118100.0,<1H OCEAN +-118.27,34.05,24.0,323.0,214.0,751.0,189.0,1.8304,225000.0,<1H OCEAN +-118.27,34.05,12.0,535.0,328.0,1194.0,365.0,1.2012,275000.0,<1H OCEAN +-118.32,34.07,52.0,2156.0,306.0,861.0,311.0,8.8062,500001.0,<1H OCEAN +-118.33,34.06,52.0,1841.0,240.0,693.0,218.0,15.0001,500001.0,<1H OCEAN +-118.33,34.07,52.0,2248.0,255.0,813.0,265.0,15.0001,500001.0,<1H OCEAN +-118.33,34.07,52.0,1482.0,171.0,531.0,161.0,15.0001,500001.0,<1H OCEAN +-118.34,34.06,52.0,2089.0,309.0,883.0,281.0,7.4574,500001.0,<1H OCEAN +-118.34,34.06,52.0,1311.0,310.0,707.0,290.0,3.4812,432800.0,<1H OCEAN +-118.29,34.08,49.0,649.0,315.0,987.0,329.0,1.6806,316700.0,<1H OCEAN +-118.29,34.07,19.0,3013.0,1118.0,2465.0,1008.0,2.5386,290600.0,<1H OCEAN +-118.29,34.06,9.0,1554.0,815.0,1704.0,761.0,2.0185,141700.0,<1H OCEAN +-118.29,34.07,22.0,492.0,269.0,634.0,261.0,1.6406,300000.0,<1H OCEAN +-118.29,34.07,26.0,2302.0,1124.0,2660.0,1004.0,2.3567,253100.0,<1H OCEAN +-118.29,34.08,43.0,3056.0,1345.0,3920.0,1304.0,1.925,300000.0,<1H OCEAN +-118.3,34.07,31.0,1489.0,664.0,1793.0,556.0,2.4348,230600.0,<1H OCEAN +-118.3,34.07,46.0,5677.0,2610.0,7443.0,2406.0,1.8238,237500.0,<1H OCEAN +-118.3,34.07,26.0,2107.0,757.0,2660.0,740.0,2.3375,282300.0,<1H OCEAN +-118.3,34.07,36.0,2657.0,738.0,2274.0,723.0,3.425,281700.0,<1H OCEAN +-118.31,34.07,28.0,2362.0,949.0,2759.0,894.0,2.2364,305600.0,<1H OCEAN +-118.31,34.08,49.0,2549.0,630.0,1539.0,594.0,2.6218,350900.0,<1H OCEAN +-118.31,34.07,40.0,2657.0,794.0,2149.0,749.0,2.2653,445000.0,<1H OCEAN +-118.32,34.07,52.0,2980.0,366.0,967.0,359.0,11.2185,500001.0,<1H OCEAN +-118.31,34.06,36.0,369.0,147.0,145.0,136.0,0.8804,450000.0,<1H OCEAN +-118.32,34.06,52.0,983.0,246.0,578.0,204.0,5.7393,500001.0,<1H OCEAN +-118.32,34.07,25.0,2740.0,707.0,1420.0,664.0,3.5909,404500.0,<1H OCEAN +-118.32,34.06,52.0,955.0,100.0,457.0,120.0,15.0001,500001.0,<1H OCEAN +-118.31,34.07,26.0,5062.0,2055.0,4533.0,1822.0,2.3105,166700.0,<1H OCEAN +-118.31,34.06,30.0,3110.0,1269.0,2535.0,1218.0,1.6987,412500.0,<1H OCEAN +-118.3,34.07,18.0,3759.0,,3296.0,1462.0,2.2708,175000.0,<1H OCEAN +-118.31,34.07,20.0,3264.0,1248.0,2919.0,1191.0,2.3674,500001.0,<1H OCEAN +-118.3,34.06,20.0,1782.0,896.0,1749.0,823.0,2.2094,75000.0,<1H OCEAN +-118.31,34.06,34.0,2470.0,1197.0,2326.0,1055.0,1.9038,325000.0,<1H OCEAN +-118.29,34.07,24.0,4021.0,1707.0,3727.0,1529.0,1.7365,112500.0,<1H OCEAN +-118.3,34.07,28.0,5221.0,2530.0,5840.0,2374.0,1.8829,300000.0,<1H OCEAN +-118.3,34.06,43.0,1366.0,740.0,942.0,672.0,1.6953,150000.0,<1H OCEAN +-118.29,34.06,42.0,3894.0,2293.0,6846.0,2156.0,1.5553,70000.0,<1H OCEAN +-118.29,34.06,27.0,2456.0,1111.0,4137.0,1104.0,1.5954,187500.0,<1H OCEAN +-118.29,34.06,46.0,1759.0,1012.0,2716.0,877.0,2.1637,350000.0,<1H OCEAN +-118.3,34.06,47.0,1390.0,872.0,2860.0,827.0,1.468,137500.0,<1H OCEAN +-118.29,34.06,23.0,2040.0,778.0,2235.0,697.0,1.9309,233300.0,<1H OCEAN +-118.3,34.06,33.0,2437.0,1283.0,3906.0,1084.0,2.0332,270000.0,<1H OCEAN +-118.3,34.06,21.0,3960.0,1490.0,3468.0,1335.0,1.8214,475000.0,<1H OCEAN +-118.3,34.06,23.0,2512.0,1203.0,3720.0,1118.0,1.7896,322200.0,<1H OCEAN +-118.31,34.06,24.0,1336.0,453.0,1268.0,426.0,2.8202,500001.0,<1H OCEAN +-118.31,34.06,47.0,3038.0,1533.0,4225.0,1472.0,1.6725,187500.0,<1H OCEAN +-118.31,34.06,34.0,1848.0,667.0,1351.0,589.0,2.0547,410000.0,<1H OCEAN +-118.31,34.06,52.0,2124.0,756.0,1920.0,756.0,2.1435,328900.0,<1H OCEAN +-118.31,34.06,31.0,2827.0,1084.0,3107.0,993.0,2.0278,360000.0,<1H OCEAN +-118.31,34.06,14.0,1559.0,646.0,1639.0,567.0,1.9949,380000.0,<1H OCEAN +-118.32,34.05,42.0,3292.0,713.0,2224.0,674.0,3.5517,291500.0,<1H OCEAN +-118.32,34.06,43.0,2808.0,584.0,1654.0,569.0,4.125,436800.0,<1H OCEAN +-118.32,34.06,36.0,3239.0,722.0,1383.0,612.0,4.5918,337000.0,<1H OCEAN +-118.33,34.06,52.0,1368.0,231.0,737.0,248.0,8.3617,433800.0,<1H OCEAN +-118.33,34.05,48.0,2405.0,527.0,1868.0,502.0,3.375,257800.0,<1H OCEAN +-118.33,34.05,44.0,1574.0,390.0,1323.0,404.0,2.5284,226300.0,<1H OCEAN +-118.33,34.05,45.0,1707.0,519.0,1446.0,466.0,2.1736,171300.0,<1H OCEAN +-118.32,34.05,50.0,1389.0,364.0,976.0,302.0,1.5882,327300.0,<1H OCEAN +-118.32,34.05,42.0,3343.0,1183.0,3480.0,1146.0,1.9923,250000.0,<1H OCEAN +-118.31,34.05,35.0,1692.0,423.0,1578.0,406.0,2.5313,305800.0,<1H OCEAN +-118.31,34.05,40.0,1667.0,365.0,1161.0,384.0,3.1406,417600.0,<1H OCEAN +-118.3,34.05,44.0,1612.0,650.0,2028.0,593.0,1.9152,115600.0,<1H OCEAN +-118.3,34.05,42.0,1476.0,610.0,1605.0,545.0,1.721,214300.0,<1H OCEAN +-118.31,34.05,42.0,443.0,223.0,582.0,223.0,2.2937,350000.0,<1H OCEAN +-118.3,34.05,46.0,1386.0,457.0,1845.0,485.0,2.1414,157700.0,<1H OCEAN +-118.3,34.05,31.0,1744.0,720.0,2034.0,633.0,2.2684,193800.0,<1H OCEAN +-118.29,34.05,30.0,1417.0,589.0,1615.0,540.0,1.3867,193800.0,<1H OCEAN +-118.29,34.05,34.0,1102.0,,1325.0,439.0,1.5972,168800.0,<1H OCEAN +-118.3,34.05,36.0,1723.0,569.0,1664.0,501.0,1.9323,161100.0,<1H OCEAN +-118.3,34.05,34.0,1453.0,588.0,1987.0,589.0,2.096,187500.0,<1H OCEAN +-118.29,34.05,18.0,3585.0,1661.0,5229.0,1534.0,1.847,250000.0,<1H OCEAN +-118.29,34.05,11.0,677.0,370.0,1143.0,341.0,2.3864,350000.0,<1H OCEAN +-118.29,34.05,31.0,2818.0,1252.0,4126.0,1200.0,2.053,229200.0,<1H OCEAN +-118.35,34.08,52.0,1801.0,313.0,714.0,293.0,4.6838,479000.0,<1H OCEAN +-118.35,34.07,52.0,2497.0,406.0,1030.0,412.0,4.89,500001.0,<1H OCEAN +-118.35,34.07,52.0,2315.0,356.0,894.0,345.0,4.1328,500001.0,<1H OCEAN +-118.34,34.07,52.0,2066.0,319.0,981.0,297.0,5.8632,450000.0,<1H OCEAN +-118.34,34.08,52.0,1421.0,163.0,495.0,167.0,10.586,500001.0,<1H OCEAN +-118.34,34.08,52.0,1721.0,195.0,688.0,196.0,15.0001,500001.0,<1H OCEAN +-118.34,34.07,52.0,1621.0,284.0,588.0,272.0,6.2223,500001.0,<1H OCEAN +-118.34,34.07,52.0,3421.0,598.0,1203.0,564.0,4.1618,500001.0,<1H OCEAN +-118.34,34.08,52.0,2756.0,542.0,971.0,510.0,5.5871,500001.0,<1H OCEAN +-118.35,34.08,52.0,2877.0,721.0,1186.0,704.0,3.2645,175000.0,<1H OCEAN +-118.36,34.08,52.0,2373.0,601.0,1135.0,576.0,3.1765,225000.0,<1H OCEAN +-118.36,34.08,52.0,1902.0,488.0,848.0,478.0,2.9621,175000.0,<1H OCEAN +-118.35,34.07,48.0,890.0,255.0,434.0,232.0,3.6111,450000.0,<1H OCEAN +-118.35,34.07,45.0,7803.0,2154.0,3359.0,2041.0,3.3594,287500.0,<1H OCEAN +-118.35,34.07,46.0,1651.0,410.0,512.0,397.0,4.0179,350000.0,<1H OCEAN +-118.35,34.07,45.0,3312.0,880.0,1157.0,809.0,3.5719,500001.0,<1H OCEAN +-118.36,34.07,40.0,1821.0,447.0,777.0,441.0,2.3375,355200.0,<1H OCEAN +-118.36,34.07,48.0,1740.0,360.0,748.0,357.0,4.7019,411100.0,<1H OCEAN +-118.37,34.07,50.0,2519.0,,1117.0,516.0,4.3667,405600.0,<1H OCEAN +-118.36,34.07,52.0,2046.0,451.0,944.0,435.0,3.4265,456900.0,<1H OCEAN +-118.37,34.07,52.0,2203.0,437.0,899.0,384.0,4.25,486900.0,<1H OCEAN +-118.37,34.07,52.0,2195.0,435.0,884.0,432.0,5.24,486400.0,<1H OCEAN +-118.37,34.07,44.0,2703.0,663.0,1045.0,619.0,3.201,287500.0,<1H OCEAN +-118.37,34.07,39.0,2309.0,526.0,870.0,546.0,3.1677,453400.0,<1H OCEAN +-118.37,34.07,52.0,1084.0,247.0,468.0,255.0,3.4286,474300.0,<1H OCEAN +-118.38,34.08,25.0,4625.0,1307.0,1739.0,1191.0,3.3989,485000.0,<1H OCEAN +-118.38,34.07,16.0,4814.0,1381.0,1897.0,1209.0,3.3725,375000.0,<1H OCEAN +-118.38,34.07,21.0,3653.0,956.0,1510.0,890.0,3.5573,500001.0,<1H OCEAN +-118.34,34.07,52.0,3175.0,1057.0,1594.0,997.0,3.1766,225000.0,<1H OCEAN +-118.35,34.06,52.0,3446.0,1360.0,1768.0,1245.0,2.4722,500001.0,<1H OCEAN +-118.34,34.06,52.0,1314.0,170.0,629.0,214.0,7.1669,500001.0,<1H OCEAN +-118.34,34.05,52.0,2530.0,458.0,1122.0,449.0,3.9167,321600.0,<1H OCEAN +-118.34,34.06,52.0,2069.0,417.0,826.0,377.0,3.5481,396000.0,<1H OCEAN +-118.34,34.06,52.0,1482.0,336.0,768.0,300.0,3.7167,327300.0,<1H OCEAN +-118.35,34.06,52.0,2837.0,602.0,1164.0,551.0,3.2411,250000.0,<1H OCEAN +-118.35,34.06,48.0,1354.0,279.0,716.0,309.0,3.7167,385000.0,<1H OCEAN +-118.35,34.06,52.0,1368.0,322.0,617.0,303.0,5.3819,440900.0,<1H OCEAN +-118.35,34.05,33.0,2880.0,836.0,1416.0,736.0,2.6781,328800.0,<1H OCEAN +-118.35,34.06,48.0,3551.0,826.0,1601.0,827.0,3.2279,400000.0,<1H OCEAN +-118.36,34.06,39.0,2810.0,670.0,1109.0,624.0,3.25,355000.0,<1H OCEAN +-118.36,34.06,52.0,2130.0,455.0,921.0,395.0,2.9605,500001.0,<1H OCEAN +-118.37,34.06,52.0,843.0,160.0,333.0,151.0,4.5192,446000.0,<1H OCEAN +-118.37,34.06,52.0,1608.0,289.0,630.0,252.0,5.5596,500001.0,<1H OCEAN +-118.38,34.06,28.0,2522.0,616.0,991.0,574.0,3.1475,362500.0,<1H OCEAN +-118.38,34.06,29.0,3946.0,1008.0,1676.0,876.0,2.7824,450000.0,<1H OCEAN +-118.38,34.06,31.0,4345.0,1158.0,1987.0,1070.0,2.8233,310000.0,<1H OCEAN +-118.38,34.06,25.0,2558.0,661.0,1183.0,636.0,3.5556,500000.0,<1H OCEAN +-118.37,34.05,35.0,2457.0,552.0,1159.0,523.0,3.0862,345300.0,<1H OCEAN +-118.37,34.04,52.0,1197.0,231.0,671.0,219.0,3.825,278500.0,<1H OCEAN +-118.37,34.05,48.0,1266.0,234.0,539.0,222.0,4.005,275000.0,<1H OCEAN +-118.37,34.05,41.0,2369.0,544.0,1252.0,522.0,2.9883,296100.0,<1H OCEAN +-118.37,34.06,52.0,2239.0,423.0,832.0,411.0,5.0858,470000.0,<1H OCEAN +-118.37,34.05,52.0,2346.0,437.0,1121.0,400.0,4.0583,444300.0,<1H OCEAN +-118.37,34.05,52.0,1563.0,306.0,776.0,308.0,3.625,440900.0,<1H OCEAN +-118.37,34.06,52.0,2402.0,506.0,878.0,464.0,4.0217,500001.0,<1H OCEAN +-118.36,34.05,48.0,1825.0,404.0,728.0,363.0,3.3824,322600.0,<1H OCEAN +-118.36,34.05,47.0,1424.0,300.0,632.0,278.0,4.0625,295200.0,<1H OCEAN +-118.36,34.05,48.0,1835.0,380.0,956.0,370.0,3.2813,243600.0,<1H OCEAN +-118.36,34.04,49.0,995.0,184.0,462.0,194.0,2.7917,242000.0,<1H OCEAN +-118.36,34.05,45.0,1879.0,395.0,946.0,409.0,3.3333,254700.0,<1H OCEAN +-118.36,34.05,50.0,3518.0,812.0,1724.0,758.0,3.0833,338100.0,<1H OCEAN +-118.38,34.05,52.0,2053.0,480.0,900.0,417.0,3.0707,417900.0,<1H OCEAN +-118.39,34.05,47.0,1621.0,314.0,724.0,311.0,5.7509,474100.0,<1H OCEAN +-118.38,34.05,52.0,1004.0,231.0,590.0,226.0,4.2404,351000.0,<1H OCEAN +-118.38,34.05,52.0,1241.0,210.0,526.0,214.0,4.4191,334100.0,<1H OCEAN +-118.38,34.05,49.0,702.0,,458.0,187.0,4.8958,333600.0,<1H OCEAN +-118.38,34.05,40.0,2352.0,598.0,1133.0,563.0,3.238,287500.0,<1H OCEAN +-118.38,34.05,35.0,3517.0,879.0,1632.0,784.0,3.0956,500001.0,<1H OCEAN +-118.35,34.05,47.0,2815.0,679.0,1533.0,594.0,2.5806,234100.0,<1H OCEAN +-118.35,34.05,44.0,1856.0,493.0,1374.0,469.0,2.0984,158000.0,<1H OCEAN +-118.36,34.05,42.0,1372.0,,674.0,271.0,2.8793,202100.0,<1H OCEAN +-118.36,34.05,45.0,2283.0,,1093.0,475.0,2.5658,252000.0,<1H OCEAN +-118.35,34.05,46.0,2149.0,451.0,905.0,443.0,2.8841,290800.0,<1H OCEAN +-118.34,34.05,50.0,2009.0,419.0,1130.0,402.0,3.1944,213500.0,<1H OCEAN +-118.34,34.05,39.0,975.0,292.0,723.0,285.0,2.2725,140600.0,<1H OCEAN +-118.35,34.05,52.0,1971.0,414.0,1065.0,409.0,3.6435,195800.0,<1H OCEAN +-118.34,34.05,52.0,2194.0,504.0,997.0,438.0,2.6654,259400.0,<1H OCEAN +-118.32,34.04,39.0,2965.0,812.0,2638.0,794.0,2.532,172700.0,<1H OCEAN +-118.32,34.04,39.0,1294.0,330.0,1140.0,313.0,2.2554,165000.0,<1H OCEAN +-118.32,34.04,48.0,1184.0,328.0,953.0,311.0,2.3526,156300.0,<1H OCEAN +-118.33,34.04,31.0,1090.0,251.0,955.0,239.0,2.913,192500.0,<1H OCEAN +-118.33,34.05,46.0,3015.0,795.0,2300.0,725.0,2.0706,268500.0,<1H OCEAN +-118.33,34.04,52.0,2545.0,401.0,1004.0,372.0,3.6373,420000.0,<1H OCEAN +-118.34,34.05,41.0,2099.0,472.0,1369.0,465.0,2.7409,167100.0,<1H OCEAN +-118.34,34.04,35.0,2345.0,607.0,2042.0,565.0,2.5955,139700.0,<1H OCEAN +-118.34,34.04,40.0,2064.0,662.0,2140.0,617.0,2.2254,127100.0,<1H OCEAN +-118.34,34.04,37.0,1466.0,529.0,1835.0,500.0,1.7014,123200.0,<1H OCEAN +-118.35,34.04,36.0,1956.0,601.0,1672.0,546.0,1.8685,150700.0,<1H OCEAN +-118.35,34.04,49.0,1104.0,266.0,668.0,297.0,3.0856,151600.0,<1H OCEAN +-118.35,34.04,45.0,1579.0,357.0,713.0,335.0,2.1711,179200.0,<1H OCEAN +-118.36,34.04,48.0,1769.0,429.0,993.0,405.0,2.3214,139400.0,<1H OCEAN +-118.36,34.04,45.0,1767.0,417.0,1052.0,379.0,3.5161,157000.0,<1H OCEAN +-118.35,34.04,38.0,1626.0,375.0,1019.0,372.0,2.3687,146800.0,<1H OCEAN +-118.36,34.03,43.0,1690.0,379.0,1017.0,359.0,2.1078,133500.0,<1H OCEAN +-118.37,34.03,37.0,1236.0,,966.0,292.0,3.0694,122200.0,<1H OCEAN +-118.36,34.04,34.0,3239.0,806.0,2331.0,765.0,2.0538,125800.0,<1H OCEAN +-118.35,34.04,41.0,1617.0,423.0,1110.0,375.0,2.4635,169400.0,<1H OCEAN +-118.35,34.03,44.0,865.0,208.0,537.0,183.0,1.9,110900.0,<1H OCEAN +-118.35,34.04,45.0,1839.0,459.0,1312.0,460.0,2.5625,138000.0,<1H OCEAN +-118.34,34.04,42.0,1681.0,360.0,987.0,337.0,2.6,171400.0,<1H OCEAN +-118.34,34.03,48.0,1426.0,331.0,784.0,356.0,1.6581,118800.0,<1H OCEAN +-118.34,34.04,42.0,2010.0,494.0,1203.0,427.0,1.9408,134600.0,<1H OCEAN +-118.35,34.03,35.0,1438.0,333.0,794.0,306.0,1.975,138100.0,<1H OCEAN +-118.33,34.04,33.0,1806.0,444.0,1161.0,393.0,2.5927,161500.0,<1H OCEAN +-118.33,34.03,33.0,2314.0,624.0,1714.0,582.0,1.7377,183900.0,<1H OCEAN +-118.33,34.04,48.0,2437.0,443.0,1400.0,426.0,2.628,251100.0,<1H OCEAN +-118.32,34.04,47.0,1989.0,532.0,1430.0,519.0,1.8333,151100.0,<1H OCEAN +-118.32,34.04,42.0,1766.0,404.0,1117.0,367.0,2.0259,168800.0,<1H OCEAN +-118.32,34.04,44.0,1008.0,223.0,544.0,223.0,2.8654,176800.0,<1H OCEAN +-118.32,34.03,35.0,3189.0,935.0,2221.0,801.0,2.1046,114000.0,<1H OCEAN +-118.33,34.03,39.0,2840.0,826.0,1911.0,688.0,1.9018,137500.0,<1H OCEAN +-118.32,34.03,47.0,1082.0,198.0,455.0,193.0,3.0132,223200.0,<1H OCEAN +-118.32,34.03,50.0,1845.0,349.0,1109.0,335.0,2.8971,127800.0,<1H OCEAN +-118.32,34.03,47.0,1734.0,453.0,1272.0,438.0,3.1731,121500.0,<1H OCEAN +-118.32,34.02,52.0,2511.0,587.0,1660.0,546.0,2.6098,127100.0,<1H OCEAN +-118.32,34.02,51.0,2010.0,460.0,1355.0,433.0,2.0304,133400.0,<1H OCEAN +-118.32,34.02,47.0,1648.0,346.0,1120.0,338.0,2.0042,114200.0,<1H OCEAN +-118.33,34.02,45.0,1667.0,399.0,928.0,375.0,1.8783,118200.0,<1H OCEAN +-118.33,34.02,46.0,1528.0,391.0,933.0,366.0,2.1979,125700.0,<1H OCEAN +-118.33,34.03,46.0,2312.0,625.0,1552.0,603.0,1.6429,125000.0,<1H OCEAN +-118.34,34.02,48.0,1614.0,320.0,684.0,318.0,4.2218,181000.0,<1H OCEAN +-118.34,34.02,44.0,2067.0,385.0,1046.0,441.0,3.5357,156900.0,<1H OCEAN +-118.35,34.03,49.0,2334.0,530.0,1334.0,447.0,1.89,124000.0,<1H OCEAN +-118.35,34.03,43.0,2122.0,524.0,1510.0,436.0,2.2273,123300.0,<1H OCEAN +-118.35,34.02,52.0,427.0,92.0,233.0,116.0,3.25,134700.0,<1H OCEAN +-118.35,34.03,42.0,2043.0,512.0,1634.0,501.0,1.9928,125400.0,<1H OCEAN +-118.36,34.03,36.0,1083.0,342.0,1023.0,295.0,2.1324,143800.0,<1H OCEAN +-118.36,34.03,40.0,2323.0,661.0,1847.0,614.0,1.8316,113500.0,<1H OCEAN +-118.36,34.03,38.0,1400.0,376.0,1139.0,315.0,2.2368,120000.0,<1H OCEAN +-118.36,34.03,35.0,1819.0,499.0,1666.0,482.0,1.6452,125900.0,<1H OCEAN +-118.36,34.03,38.0,2365.0,638.0,2259.0,607.0,2.0879,120700.0,<1H OCEAN +-118.37,34.03,43.0,1350.0,287.0,811.0,307.0,3.3636,140900.0,<1H OCEAN +-118.34,34.03,46.0,2437.0,502.0,1151.0,477.0,2.4444,134100.0,<1H OCEAN +-118.34,34.02,49.0,1609.0,371.0,896.0,389.0,2.5156,136600.0,<1H OCEAN +-118.34,34.02,50.0,1172.0,261.0,685.0,260.0,3.1442,130300.0,<1H OCEAN +-118.34,34.03,49.0,1295.0,276.0,765.0,265.0,3.4306,130200.0,<1H OCEAN +-118.34,34.03,47.0,1927.0,561.0,1349.0,508.0,1.3444,125000.0,<1H OCEAN +-118.36,34.02,43.0,1356.0,333.0,796.0,329.0,1.7159,189700.0,<1H OCEAN +-118.37,34.03,41.0,1425.0,285.0,838.0,296.0,3.9732,188400.0,<1H OCEAN +-118.37,34.02,44.0,1944.0,458.0,981.0,377.0,2.6154,193200.0,<1H OCEAN +-118.28,34.05,35.0,1627.0,838.0,3013.0,791.0,1.5565,152500.0,<1H OCEAN +-118.28,34.04,39.0,1155.0,433.0,1857.0,424.0,2.1696,153400.0,<1H OCEAN +-118.29,34.04,41.0,659.0,291.0,1224.0,290.0,2.0817,132500.0,<1H OCEAN +-118.29,34.05,40.0,907.0,349.0,1426.0,323.0,1.8571,143800.0,<1H OCEAN +-118.29,34.04,48.0,1353.0,488.0,1945.0,487.0,2.4359,123700.0,<1H OCEAN +-118.3,34.04,50.0,1757.0,522.0,2080.0,488.0,1.7225,180000.0,<1H OCEAN +-118.3,34.05,51.0,1005.0,314.0,1227.0,306.0,2.4297,162500.0,<1H OCEAN +-118.3,34.05,39.0,993.0,506.0,1765.0,464.0,1.2786,121900.0,<1H OCEAN +-118.31,34.05,38.0,1864.0,515.0,1768.0,439.0,1.9336,190600.0,<1H OCEAN +-118.31,34.05,35.0,2007.0,571.0,1513.0,554.0,2.1162,229200.0,<1H OCEAN +-118.31,34.05,26.0,1809.0,640.0,2543.0,640.0,2.3536,500000.0,<1H OCEAN +-118.31,34.04,33.0,2691.0,726.0,2390.0,681.0,2.4048,208300.0,<1H OCEAN +-118.31,34.04,29.0,2038.0,578.0,2070.0,570.0,2.0658,214600.0,<1H OCEAN +-118.31,34.03,29.0,2438.0,867.0,2114.0,753.0,0.8351,150000.0,<1H OCEAN +-118.32,34.03,31.0,2206.0,501.0,1194.0,435.0,1.9531,227800.0,<1H OCEAN +-118.31,34.04,52.0,1277.0,285.0,954.0,334.0,2.5833,234600.0,<1H OCEAN +-118.3,34.04,24.0,2092.0,585.0,1757.0,538.0,1.7109,175000.0,<1H OCEAN +-118.3,34.04,37.0,1470.0,399.0,1579.0,390.0,2.006,150000.0,<1H OCEAN +-118.31,34.04,37.0,2338.0,686.0,2376.0,630.0,1.767,170300.0,<1H OCEAN +-118.29,34.04,44.0,1941.0,579.0,2049.0,535.0,2.0405,143000.0,<1H OCEAN +-118.3,34.03,41.0,1653.0,426.0,1868.0,393.0,1.78,162500.0,<1H OCEAN +-118.3,34.04,35.0,1090.0,345.0,1605.0,330.0,2.1518,152800.0,<1H OCEAN +-118.29,34.04,31.0,700.0,299.0,1272.0,298.0,2.1542,128100.0,<1H OCEAN +-118.29,34.04,32.0,432.0,182.0,702.0,186.0,2.1471,125000.0,<1H OCEAN +-118.29,34.03,42.0,1680.0,557.0,2099.0,526.0,1.9167,136400.0,<1H OCEAN +-118.28,34.03,45.0,943.0,289.0,953.0,238.0,2.0673,151600.0,<1H OCEAN +-118.29,34.03,42.0,907.0,378.0,822.0,288.0,1.2875,179200.0,<1H OCEAN +-118.29,34.03,29.0,3544.0,1384.0,3323.0,1213.0,1.0219,258300.0,<1H OCEAN +-118.29,34.03,38.0,1501.0,437.0,1777.0,441.0,2.0848,135200.0,<1H OCEAN +-118.29,34.03,22.0,3313.0,1235.0,2381.0,1063.0,0.7473,168800.0,<1H OCEAN +-118.29,34.03,27.0,1084.0,287.0,1085.0,279.0,2.135,119600.0,<1H OCEAN +-118.31,34.03,46.0,2173.0,510.0,1343.0,476.0,2.025,135500.0,<1H OCEAN +-118.31,34.03,52.0,1902.0,406.0,1233.0,385.0,2.8295,132200.0,<1H OCEAN +-118.31,34.02,52.0,1173.0,284.0,814.0,295.0,2.45,111400.0,<1H OCEAN +-118.31,34.02,44.0,1555.0,324.0,931.0,265.0,1.4712,105800.0,<1H OCEAN +-118.31,34.02,45.0,1423.0,278.0,822.0,276.0,2.4519,98100.0,<1H OCEAN +-118.31,34.02,52.0,1832.0,441.0,1186.0,420.0,1.2434,98400.0,<1H OCEAN +-118.3,34.03,47.0,2241.0,559.0,1775.0,504.0,2.1571,147900.0,<1H OCEAN +-118.3,34.03,40.0,1695.0,374.0,1138.0,357.0,2.7125,150000.0,<1H OCEAN +-118.31,34.03,47.0,1315.0,,785.0,245.0,1.23,138400.0,<1H OCEAN +-118.3,34.03,37.0,2781.0,766.0,2586.0,729.0,1.8564,187500.0,<1H OCEAN +-118.31,34.03,34.0,2041.0,517.0,1479.0,495.0,2.1173,156600.0,<1H OCEAN +-118.31,34.02,23.0,1703.0,397.0,1333.0,361.0,1.3187,127100.0,<1H OCEAN +-118.31,34.02,46.0,1976.0,469.0,1409.0,431.0,2.2981,112100.0,<1H OCEAN +-118.3,34.02,49.0,2120.0,483.0,1522.0,416.0,1.85,116800.0,<1H OCEAN +-118.29,34.02,21.0,1641.0,491.0,1526.0,453.0,2.087,141300.0,<1H OCEAN +-118.3,34.02,34.0,3184.0,772.0,2474.0,705.0,1.631,137500.0,<1H OCEAN +-118.3,34.02,31.0,1933.0,478.0,1522.0,423.0,1.5781,119300.0,<1H OCEAN +-118.28,34.02,29.0,515.0,229.0,2690.0,217.0,0.4999,500001.0,<1H OCEAN +-118.27,34.03,50.0,395.0,232.0,948.0,243.0,1.7546,175000.0,<1H OCEAN +-118.27,34.03,51.0,1280.0,422.0,1560.0,381.0,1.7115,125000.0,<1H OCEAN +-118.28,34.04,19.0,460.0,241.0,890.0,229.0,1.6089,162500.0,<1H OCEAN +-118.28,34.04,24.0,1283.0,545.0,1932.0,516.0,1.2969,160200.0,<1H OCEAN +-118.28,34.04,25.0,1582.0,780.0,2390.0,719.0,1.4167,200000.0,<1H OCEAN +-118.28,34.04,20.0,1193.0,454.0,1880.0,453.0,2.1806,180000.0,<1H OCEAN +-118.28,34.05,44.0,1273.0,474.0,1754.0,460.0,1.6037,275000.0,<1H OCEAN +-118.28,34.03,41.0,1933.0,791.0,3121.0,719.0,1.8539,147500.0,<1H OCEAN +-118.28,34.03,40.0,2118.0,796.0,2195.0,658.0,1.7976,164600.0,<1H OCEAN +-118.28,34.04,48.0,1521.0,513.0,1772.0,458.0,2.2232,162500.0,<1H OCEAN +-118.27,34.02,39.0,2004.0,633.0,3050.0,621.0,1.875,127300.0,<1H OCEAN +-118.28,34.02,52.0,281.0,103.0,470.0,96.0,1.9375,38800.0,<1H OCEAN +-118.27,34.02,40.0,561.0,284.0,662.0,205.0,0.9234,187500.0,<1H OCEAN +-118.28,34.03,26.0,2107.0,809.0,2821.0,572.0,0.844,350000.0,<1H OCEAN +-118.28,34.03,25.0,1407.0,550.0,1193.0,472.0,1.2989,225000.0,<1H OCEAN +-118.25,34.02,50.0,180.0,89.0,356.0,76.0,2.1944,158300.0,<1H OCEAN +-118.24,34.03,52.0,142.0,47.0,137.0,45.0,1.8333,312500.0,<1H OCEAN +-118.26,34.03,49.0,299.0,90.0,287.0,68.0,1.2096,100000.0,<1H OCEAN +-118.25,34.03,52.0,1274.0,418.0,1655.0,368.0,2.1905,124000.0,<1H OCEAN +-118.25,34.02,32.0,1375.0,448.0,1698.0,432.0,1.6302,130700.0,<1H OCEAN +-118.26,34.02,38.0,980.0,285.0,1308.0,310.0,1.5652,123100.0,<1H OCEAN +-118.26,34.02,38.0,1091.0,349.0,1786.0,340.0,2.131,136500.0,<1H OCEAN +-118.26,34.02,40.0,1259.0,362.0,1499.0,327.0,1.8382,126400.0,<1H OCEAN +-118.26,34.02,37.0,1551.0,501.0,2173.0,474.0,2.1667,117700.0,<1H OCEAN +-118.26,34.02,48.0,1465.0,440.0,1859.0,400.0,1.3134,96200.0,<1H OCEAN +-118.26,34.02,46.0,1249.0,357.0,1607.0,331.0,2.0703,114800.0,<1H OCEAN +-118.26,34.02,41.0,848.0,323.0,1428.0,313.0,1.5603,109600.0,<1H OCEAN +-118.26,34.02,39.0,698.0,232.0,1046.0,228.0,2.2356,119500.0,<1H OCEAN +-118.25,34.02,35.0,1368.0,486.0,2239.0,461.0,1.913,114300.0,<1H OCEAN +-118.25,34.02,33.0,1676.0,525.0,2564.0,515.0,2.1957,100800.0,<1H OCEAN +-118.25,34.01,28.0,481.0,136.0,596.0,128.0,1.2396,90300.0,<1H OCEAN +-118.25,34.02,32.0,1311.0,410.0,1792.0,396.0,2.3304,119900.0,<1H OCEAN +-118.24,34.02,48.0,542.0,150.0,571.0,114.0,1.8485,90600.0,<1H OCEAN +-118.24,34.01,48.0,396.0,99.0,485.0,110.0,2.375,107500.0,<1H OCEAN +-118.24,34.01,43.0,1456.0,444.0,2098.0,433.0,1.8929,99200.0,<1H OCEAN +-118.25,34.01,31.0,1301.0,403.0,1952.0,377.0,2.1466,100800.0,<1H OCEAN +-118.24,34.01,30.0,405.0,86.0,376.0,68.0,1.7813,127500.0,<1H OCEAN +-118.25,34.01,45.0,782.0,270.0,1030.0,235.0,1.0898,93400.0,<1H OCEAN +-118.25,34.01,36.0,879.0,262.0,1034.0,236.0,1.2857,99300.0,<1H OCEAN +-118.25,34.01,43.0,1429.0,386.0,1412.0,354.0,1.3287,107200.0,<1H OCEAN +-118.25,34.01,43.0,1575.0,475.0,1980.0,469.0,1.7425,100500.0,<1H OCEAN +-118.25,34.01,30.0,962.0,291.0,1280.0,263.0,1.4464,110200.0,<1H OCEAN +-118.26,34.01,38.0,697.0,208.0,749.0,206.0,1.4653,118800.0,<1H OCEAN +-118.26,34.01,47.0,1269.0,323.0,1628.0,325.0,1.5089,115800.0,<1H OCEAN +-118.26,34.01,37.0,2451.0,668.0,2824.0,598.0,1.9074,99600.0,<1H OCEAN +-118.27,34.01,42.0,990.0,289.0,1167.0,281.0,1.4524,126800.0,<1H OCEAN +-118.26,34.01,46.0,879.0,253.0,1010.0,221.0,2.1776,118300.0,<1H OCEAN +-118.27,34.02,21.0,1314.0,375.0,1505.0,366.0,2.319,97200.0,<1H OCEAN +-118.27,34.01,35.0,1193.0,355.0,1784.0,341.0,1.8652,116100.0,<1H OCEAN +-118.27,34.01,35.0,1672.0,556.0,2106.0,519.0,1.2206,129200.0,<1H OCEAN +-118.27,34.01,47.0,921.0,264.0,881.0,221.0,1.4327,114100.0,<1H OCEAN +-118.27,34.01,43.0,1235.0,385.0,1745.0,372.0,2.0817,113300.0,<1H OCEAN +-118.27,34.0,46.0,1748.0,428.0,1707.0,409.0,2.148,103800.0,<1H OCEAN +-118.27,34.0,48.0,1869.0,461.0,1834.0,441.0,1.7052,107400.0,<1H OCEAN +-118.27,34.0,47.0,780.0,237.0,888.0,215.0,1.75,95800.0,<1H OCEAN +-118.26,34.01,43.0,2179.0,682.0,2624.0,609.0,1.8641,108200.0,<1H OCEAN +-118.26,34.0,41.0,1733.0,492.0,1776.0,453.0,1.6221,104200.0,<1H OCEAN +-118.25,34.0,36.0,1033.0,267.0,1112.0,229.0,1.7237,105800.0,<1H OCEAN +-118.25,34.0,36.0,1176.0,309.0,1267.0,292.0,1.6382,105000.0,<1H OCEAN +-118.25,34.0,32.0,1218.0,342.0,1292.0,304.0,1.5781,102900.0,<1H OCEAN +-118.25,34.0,41.0,1768.0,475.0,1721.0,474.0,1.303,90400.0,<1H OCEAN +-118.25,34.0,34.0,1905.0,552.0,2194.0,521.0,1.4792,95800.0,<1H OCEAN +-118.24,34.0,23.0,588.0,157.0,716.0,173.0,1.2056,87500.0,<1H OCEAN +-118.24,34.0,43.0,863.0,206.0,788.0,187.0,0.9463,95000.0,<1H OCEAN +-118.25,34.0,29.0,1419.0,363.0,1696.0,317.0,2.2813,101300.0,<1H OCEAN +-118.24,34.0,38.0,1715.0,414.0,1714.0,389.0,1.7132,108200.0,<1H OCEAN +-118.24,33.99,44.0,448.0,116.0,504.0,96.0,1.875,98600.0,<1H OCEAN +-118.24,33.99,41.0,1425.0,372.0,1803.0,353.0,1.6731,88200.0,<1H OCEAN +-118.25,33.99,42.0,2261.0,574.0,2496.0,527.0,1.5556,98500.0,<1H OCEAN +-118.25,33.99,39.0,1274.0,319.0,1362.0,324.0,2.1793,107900.0,<1H OCEAN +-118.26,34.0,27.0,1611.0,479.0,1457.0,458.0,0.8941,91900.0,<1H OCEAN +-118.26,34.0,37.0,2615.0,697.0,2484.0,630.0,1.9208,103400.0,<1H OCEAN +-118.27,34.0,40.0,2099.0,599.0,2311.0,529.0,1.852,101500.0,<1H OCEAN +-118.27,34.0,43.0,1638.0,434.0,1213.0,390.0,1.3403,110800.0,<1H OCEAN +-118.27,34.0,43.0,1258.0,381.0,1276.0,358.0,1.8917,106900.0,<1H OCEAN +-118.26,33.99,47.0,1865.0,465.0,1916.0,438.0,1.8242,95000.0,<1H OCEAN +-118.26,33.99,36.0,2016.0,505.0,1807.0,464.0,1.6901,103500.0,<1H OCEAN +-118.27,33.99,30.0,504.0,140.0,529.0,123.0,1.9531,100000.0,<1H OCEAN +-118.27,33.99,35.0,932.0,294.0,1153.0,282.0,1.4886,100000.0,<1H OCEAN +-118.27,33.99,38.0,1407.0,447.0,1783.0,402.0,1.8086,97100.0,<1H OCEAN +-118.28,34.01,46.0,441.0,167.0,621.0,144.0,1.8824,162500.0,<1H OCEAN +-118.28,34.02,46.0,1098.0,426.0,1510.0,374.0,2.1382,156300.0,<1H OCEAN +-118.29,34.01,40.0,885.0,312.0,799.0,221.0,1.1667,143800.0,<1H OCEAN +-118.3,34.01,48.0,4217.0,1095.0,3298.0,949.0,1.9152,122300.0,<1H OCEAN +-118.3,34.02,27.0,2190.0,626.0,1768.0,528.0,1.2446,103800.0,<1H OCEAN +-118.29,34.02,26.0,2001.0,582.0,2044.0,557.0,1.1563,118800.0,<1H OCEAN +-118.3,34.02,42.0,2386.0,670.0,2327.0,661.0,1.6699,108000.0,<1H OCEAN +-118.3,34.01,35.0,1147.0,290.0,818.0,281.0,1.7961,111700.0,<1H OCEAN +-118.31,34.01,50.0,1463.0,354.0,912.0,293.0,1.7386,109400.0,<1H OCEAN +-118.31,34.02,41.0,1046.0,216.0,727.0,201.0,1.6667,116900.0,<1H OCEAN +-118.31,34.02,43.0,2255.0,533.0,1568.0,470.0,1.6955,115200.0,<1H OCEAN +-118.31,34.01,39.0,2073.0,566.0,1246.0,547.0,2.0417,117100.0,<1H OCEAN +-118.31,34.02,46.0,2217.0,489.0,1227.0,448.0,1.6851,108800.0,<1H OCEAN +-118.31,34.01,48.0,2544.0,532.0,1357.0,498.0,2.5263,121000.0,<1H OCEAN +-118.31,34.01,52.0,2547.0,475.0,1417.0,444.0,1.8214,123200.0,<1H OCEAN +-118.31,34.01,52.0,1793.0,350.0,1303.0,366.0,3.0759,123700.0,<1H OCEAN +-118.29,34.01,42.0,814.0,223.0,511.0,188.0,2.3942,123200.0,<1H OCEAN +-118.29,34.01,50.0,2238.0,673.0,2247.0,583.0,1.6505,125000.0,<1H OCEAN +-118.3,34.0,52.0,1743.0,421.0,1206.0,384.0,1.6875,116000.0,<1H OCEAN +-118.3,34.01,52.0,1908.0,428.0,1271.0,394.0,2.5885,136200.0,<1H OCEAN +-118.3,34.01,52.0,1444.0,343.0,1154.0,334.0,2.0625,134400.0,<1H OCEAN +-118.28,34.01,34.0,2305.0,775.0,2450.0,740.0,1.7143,132000.0,<1H OCEAN +-118.28,34.0,46.0,1650.0,463.0,1992.0,458.0,2.3403,114100.0,<1H OCEAN +-118.29,34.0,6.0,1487.0,468.0,1509.0,403.0,1.4639,112500.0,<1H OCEAN +-118.29,34.01,39.0,751.0,207.0,1010.0,231.0,1.6036,137500.0,<1H OCEAN +-118.29,34.01,30.0,1385.0,518.0,1730.0,472.0,1.0539,142500.0,<1H OCEAN +-118.28,34.01,50.0,2601.0,794.0,3080.0,770.0,1.8656,122900.0,<1H OCEAN +-118.28,34.0,43.0,713.0,245.0,880.0,237.0,1.2065,103600.0,<1H OCEAN +-118.28,34.01,52.0,795.0,308.0,1118.0,275.0,1.2175,131300.0,<1H OCEAN +-118.28,34.01,48.0,483.0,190.0,775.0,188.0,2.3309,126600.0,<1H OCEAN +-118.28,34.0,38.0,3335.0,921.0,3612.0,887.0,2.125,118800.0,<1H OCEAN +-118.28,34.0,42.0,1534.0,417.0,1295.0,380.0,2.0938,119200.0,<1H OCEAN +-118.28,34.0,42.0,855.0,284.0,890.0,247.0,1.2778,112500.0,<1H OCEAN +-118.28,34.0,44.0,2636.0,725.0,2182.0,651.0,1.432,124000.0,<1H OCEAN +-118.28,34.0,48.0,1514.0,376.0,1353.0,344.0,2.1607,96100.0,<1H OCEAN +-118.29,34.0,44.0,1753.0,387.0,1165.0,380.0,2.1354,105800.0,<1H OCEAN +-118.29,34.0,41.0,1807.0,493.0,1731.0,471.0,1.2347,111700.0,<1H OCEAN +-118.29,34.0,52.0,1319.0,295.0,898.0,271.0,2.7727,128600.0,<1H OCEAN +-118.3,34.0,40.0,1131.0,281.0,859.0,230.0,1.1806,134600.0,<1H OCEAN +-118.3,34.0,52.0,1420.0,355.0,1080.0,353.0,1.5179,116100.0,<1H OCEAN +-118.29,34.0,52.0,2579.0,494.0,1558.0,458.0,2.0809,109600.0,<1H OCEAN +-118.3,34.0,52.0,1686.0,377.0,982.0,356.0,2.0958,116400.0,<1H OCEAN +-118.3,34.0,52.0,1296.0,246.0,853.0,238.0,3.05,111600.0,<1H OCEAN +-118.31,34.0,52.0,1542.0,309.0,939.0,276.0,1.6892,129100.0,<1H OCEAN +-118.3,34.0,52.0,1718.0,354.0,1026.0,312.0,2.0,128000.0,<1H OCEAN +-118.31,34.0,52.0,1630.0,379.0,1413.0,405.0,1.933,120000.0,<1H OCEAN +-118.31,34.0,52.0,2709.0,642.0,1751.0,613.0,2.1116,122500.0,<1H OCEAN +-118.31,34.0,47.0,1551.0,362.0,1329.0,322.0,1.9792,116400.0,<1H OCEAN +-118.31,33.99,48.0,2235.0,433.0,1363.0,433.0,1.6559,101400.0,<1H OCEAN +-118.31,33.99,47.0,1525.0,359.0,982.0,333.0,2.0915,126600.0,<1H OCEAN +-118.31,33.99,45.0,1489.0,339.0,791.0,316.0,2.2339,104800.0,<1H OCEAN +-118.31,33.99,44.0,1703.0,358.0,789.0,249.0,1.7083,100000.0,<1H OCEAN +-118.29,33.99,46.0,2608.0,636.0,1766.0,596.0,1.5846,114800.0,<1H OCEAN +-118.3,33.99,47.0,2637.0,588.0,1903.0,521.0,1.8317,96500.0,<1H OCEAN +-118.3,33.99,47.0,2212.0,533.0,1903.0,554.0,1.9853,101100.0,<1H OCEAN +-118.28,33.99,46.0,2577.0,703.0,2446.0,687.0,1.275,98300.0,<1H OCEAN +-118.29,33.99,46.0,2198.0,530.0,2067.0,497.0,2.0542,103400.0,<1H OCEAN +-118.28,33.99,52.0,1283.0,342.0,1363.0,329.0,2.5848,101900.0,<1H OCEAN +-118.28,33.99,49.0,2174.0,481.0,1861.0,484.0,1.7159,95000.0,<1H OCEAN +-118.28,33.99,46.0,1211.0,321.0,1153.0,282.0,1.7849,99300.0,<1H OCEAN +-118.32,34.01,52.0,3104.0,645.0,1498.0,581.0,2.6667,128000.0,<1H OCEAN +-118.32,34.02,50.0,1655.0,256.0,672.0,260.0,4.2554,194300.0,<1H OCEAN +-118.32,34.02,48.0,1949.0,308.0,823.0,340.0,3.3906,189700.0,<1H OCEAN +-118.32,34.01,50.0,1842.0,377.0,817.0,341.0,3.1548,157700.0,<1H OCEAN +-118.32,34.01,47.0,1745.0,371.0,1079.0,368.0,2.4022,123400.0,<1H OCEAN +-118.33,34.02,46.0,2223.0,361.0,968.0,373.0,4.26,182600.0,<1H OCEAN +-118.33,34.01,47.0,1320.0,259.0,653.0,291.0,3.7727,193000.0,<1H OCEAN +-118.33,34.02,42.0,2043.0,378.0,869.0,416.0,3.5,181100.0,<1H OCEAN +-118.32,34.01,44.0,4032.0,913.0,1622.0,848.0,2.4934,165800.0,<1H OCEAN +-118.33,34.01,43.0,2227.0,564.0,956.0,472.0,2.0217,187500.0,<1H OCEAN +-118.33,34.01,44.0,1762.0,463.0,786.0,445.0,1.9231,188500.0,<1H OCEAN +-118.33,34.01,44.0,2182.0,492.0,878.0,493.0,1.9631,181300.0,<1H OCEAN +-118.32,34.0,50.0,3250.0,693.0,2300.0,675.0,1.95,112600.0,<1H OCEAN +-118.32,34.0,50.0,2189.0,460.0,1097.0,469.0,2.4583,120900.0,<1H OCEAN +-118.33,34.0,47.0,1671.0,388.0,895.0,317.0,2.2054,121500.0,<1H OCEAN +-118.33,34.0,47.0,825.0,187.0,416.0,173.0,2.3333,133300.0,<1H OCEAN +-118.33,34.0,24.0,873.0,320.0,529.0,308.0,0.9304,151600.0,<1H OCEAN +-118.32,33.99,43.0,2028.0,479.0,1074.0,394.0,2.5909,98700.0,<1H OCEAN +-118.32,33.99,49.0,1407.0,269.0,889.0,283.0,1.9779,114200.0,<1H OCEAN +-118.33,33.99,44.0,1918.0,387.0,1041.0,364.0,2.8542,126500.0,<1H OCEAN +-118.33,33.99,46.0,1582.0,315.0,777.0,286.0,3.2083,149600.0,<1H OCEAN +-118.34,33.99,48.0,2009.0,335.0,919.0,297.0,4.8125,170500.0,<1H OCEAN +-118.32,33.99,48.0,1260.0,284.0,791.0,280.0,2.1875,115200.0,<1H OCEAN +-118.32,33.99,43.0,1257.0,232.0,735.0,232.0,3.7167,108900.0,<1H OCEAN +-118.33,33.99,43.0,2224.0,550.0,1598.0,545.0,2.8274,122500.0,<1H OCEAN +-118.34,33.99,46.0,1217.0,322.0,662.0,305.0,3.1731,140300.0,<1H OCEAN +-118.32,33.98,47.0,949.0,210.0,574.0,217.0,2.175,114700.0,<1H OCEAN +-118.32,33.98,40.0,1298.0,277.0,791.0,255.0,3.2344,104300.0,<1H OCEAN +-118.32,33.98,47.0,1528.0,331.0,864.0,308.0,1.9732,101000.0,<1H OCEAN +-118.32,33.98,46.0,1611.0,339.0,921.0,314.0,3.0833,103300.0,<1H OCEAN +-118.33,33.98,28.0,3889.0,1199.0,3121.0,1046.0,1.8806,113900.0,<1H OCEAN +-118.33,33.98,32.0,1784.0,489.0,1472.0,476.0,1.6477,108900.0,<1H OCEAN +-118.33,33.98,38.0,3063.0,796.0,2153.0,721.0,1.8472,149100.0,<1H OCEAN +-118.34,33.99,48.0,2225.0,433.0,1170.0,401.0,2.9643,140400.0,<1H OCEAN +-118.34,33.98,46.0,2126.0,409.0,1292.0,414.0,2.9315,149000.0,<1H OCEAN +-118.35,33.99,47.0,2183.0,380.0,927.0,371.0,4.9531,180100.0,<1H OCEAN +-118.35,33.98,47.0,2512.0,461.0,1082.0,426.0,3.8235,207600.0,<1H OCEAN +-118.34,33.99,34.0,397.0,132.0,250.0,121.0,1.675,166700.0,<1H OCEAN +-118.32,33.98,44.0,1448.0,314.0,861.0,310.0,2.2396,108600.0,<1H OCEAN +-118.32,33.97,52.0,1778.0,320.0,795.0,279.0,3.5114,138800.0,<1H OCEAN +-118.32,33.98,49.0,1412.0,333.0,901.0,328.0,1.7067,118600.0,<1H OCEAN +-118.33,33.98,30.0,3112.0,931.0,2739.0,841.0,1.6531,118500.0,<1H OCEAN +-118.33,33.97,44.0,2526.0,579.0,1423.0,573.0,2.5363,158800.0,<1H OCEAN +-118.33,33.97,47.0,1830.0,369.0,922.0,377.0,4.1635,156400.0,<1H OCEAN +-118.36,34.02,46.0,3745.0,798.0,1502.0,808.0,3.8643,195800.0,<1H OCEAN +-118.36,34.01,33.0,3140.0,466.0,1214.0,464.0,6.5044,350400.0,<1H OCEAN +-118.37,34.02,33.0,2263.0,430.0,900.0,382.0,4.4028,246800.0,<1H OCEAN +-118.38,34.02,31.0,1893.0,450.0,819.0,426.0,4.3077,140600.0,<1H OCEAN +-118.33,34.02,11.0,1249.0,313.0,625.0,336.0,0.8702,170500.0,<1H OCEAN +-118.34,34.01,35.0,1359.0,359.0,655.0,341.0,2.5568,312500.0,<1H OCEAN +-118.34,34.01,37.0,4291.0,1102.0,1941.0,953.0,1.7945,106300.0,<1H OCEAN +-118.34,34.01,38.0,2318.0,735.0,1407.0,702.0,1.6187,266700.0,<1H OCEAN +-118.34,34.02,44.0,1527.0,246.0,608.0,245.0,4.0357,187800.0,<1H OCEAN +-118.35,34.02,34.0,3978.0,1073.0,2725.0,1035.0,1.7622,167900.0,<1H OCEAN +-118.35,34.02,34.0,5218.0,1576.0,3538.0,1371.0,1.5143,118800.0,<1H OCEAN +-118.35,34.02,27.0,3358.0,1069.0,2415.0,956.0,1.4589,87500.0,<1H OCEAN +-118.35,34.01,33.0,3246.0,601.0,1585.0,603.0,3.6629,353200.0,<1H OCEAN +-118.35,34.01,35.0,3776.0,,1583.0,749.0,3.5486,332100.0,<1H OCEAN +-118.35,34.0,28.0,3085.0,621.0,1162.0,558.0,3.25,301000.0,<1H OCEAN +-118.28,33.99,35.0,1138.0,304.0,1128.0,311.0,1.8818,100000.0,<1H OCEAN +-118.28,33.99,37.0,1971.0,513.0,1673.0,464.0,1.4625,103000.0,<1H OCEAN +-118.29,33.99,39.0,979.0,235.0,857.0,236.0,2.5547,108900.0,<1H OCEAN +-118.29,33.98,41.0,1582.0,416.0,1422.0,370.0,1.0516,108300.0,<1H OCEAN +-118.29,33.99,43.0,1902.0,398.0,1153.0,363.0,1.9375,112900.0,<1H OCEAN +-118.3,33.99,44.0,1458.0,326.0,1159.0,283.0,1.1645,98200.0,<1H OCEAN +-118.3,33.99,43.0,1534.0,384.0,1231.0,329.0,2.5437,94500.0,<1H OCEAN +-118.3,33.98,44.0,1597.0,388.0,902.0,321.0,1.9556,93300.0,<1H OCEAN +-118.3,33.99,45.0,1701.0,452.0,1484.0,427.0,1.84,91400.0,<1H OCEAN +-118.31,33.98,44.0,222.0,54.0,234.0,77.0,5.1136,111700.0,<1H OCEAN +-118.31,33.99,49.0,857.0,196.0,694.0,228.0,2.895,108000.0,<1H OCEAN +-118.31,33.98,52.0,1837.0,426.0,1062.0,343.0,2.0,96500.0,<1H OCEAN +-118.31,33.98,52.0,1607.0,331.0,900.0,295.0,3.5982,96600.0,<1H OCEAN +-118.31,33.98,50.0,1985.0,454.0,1090.0,410.0,1.825,106600.0,<1H OCEAN +-118.31,33.98,52.0,1975.0,379.0,1043.0,371.0,2.3977,112200.0,<1H OCEAN +-118.32,33.98,49.0,1993.0,446.0,1052.0,394.0,2.2138,119800.0,<1H OCEAN +-118.29,33.98,44.0,2261.0,555.0,1348.0,455.0,1.9125,97200.0,<1H OCEAN +-118.29,33.98,48.0,1124.0,231.0,783.0,223.0,3.4444,93100.0,<1H OCEAN +-118.3,33.98,52.0,1371.0,315.0,986.0,277.0,2.9432,94000.0,<1H OCEAN +-118.3,33.98,48.0,2010.0,445.0,1208.0,404.0,1.6611,95800.0,<1H OCEAN +-118.3,33.98,48.0,1998.0,410.0,1176.0,382.0,3.0455,102400.0,<1H OCEAN +-118.3,33.98,44.0,1242.0,270.0,811.0,274.0,2.9375,95200.0,<1H OCEAN +-118.29,33.98,42.0,2833.0,768.0,2542.0,725.0,1.3479,100000.0,<1H OCEAN +-118.29,33.98,46.0,1118.0,300.0,786.0,254.0,1.4042,110000.0,<1H OCEAN +-118.28,33.98,39.0,1306.0,345.0,1332.0,331.0,1.9564,92200.0,<1H OCEAN +-118.28,33.98,47.0,865.0,193.0,782.0,217.0,2.2411,93000.0,<1H OCEAN +-118.28,33.98,45.0,1720.0,416.0,1382.0,365.0,0.9337,92300.0,<1H OCEAN +-118.28,33.98,19.0,883.0,313.0,726.0,277.0,0.9809,121400.0,<1H OCEAN +-118.29,33.98,30.0,1162.0,318.0,1207.0,289.0,1.223,100000.0,<1H OCEAN +-118.28,33.97,31.0,1068.0,271.0,1091.0,281.0,1.689,102600.0,<1H OCEAN +-118.28,33.97,31.0,2017.0,566.0,2063.0,521.0,1.9219,107000.0,<1H OCEAN +-118.28,33.97,35.0,2305.0,634.0,1978.0,568.0,1.375,100000.0,<1H OCEAN +-118.29,33.97,43.0,2660.0,672.0,2133.0,588.0,1.7734,107300.0,<1H OCEAN +-118.3,33.97,46.0,1425.0,317.0,1140.0,304.0,3.375,98500.0,<1H OCEAN +-118.3,33.97,44.0,1521.0,289.0,1074.0,285.0,2.0673,99800.0,<1H OCEAN +-118.3,33.97,42.0,944.0,200.0,567.0,190.0,2.6311,124100.0,<1H OCEAN +-118.3,33.97,50.0,2270.0,451.0,1000.0,412.0,2.1221,119400.0,<1H OCEAN +-118.31,33.97,52.0,1595.0,325.0,823.0,302.0,3.2188,124200.0,<1H OCEAN +-118.31,33.97,47.0,2066.0,422.0,1156.0,380.0,2.7917,125800.0,<1H OCEAN +-118.31,33.97,52.0,1629.0,277.0,819.0,288.0,3.725,142600.0,<1H OCEAN +-118.31,33.97,48.0,1541.0,314.0,819.0,312.0,3.0917,136100.0,<1H OCEAN +-118.31,33.94,41.0,1353.0,286.0,751.0,250.0,2.7401,131700.0,<1H OCEAN +-118.3,33.95,50.0,1843.0,326.0,892.0,314.0,3.1346,120000.0,<1H OCEAN +-118.31,33.95,43.0,1823.0,358.0,1065.0,342.0,3.2708,131000.0,<1H OCEAN +-118.31,33.95,44.0,1558.0,333.0,1095.0,316.0,4.0043,133500.0,<1H OCEAN +-118.31,33.95,44.0,2490.0,430.0,1305.0,411.0,4.8295,149600.0,<1H OCEAN +-118.31,33.94,43.0,2104.0,393.0,1132.0,394.0,3.0682,142000.0,<1H OCEAN +-118.31,33.96,43.0,2118.0,569.0,1266.0,500.0,1.747,121000.0,<1H OCEAN +-118.31,33.96,43.0,2149.0,493.0,1316.0,462.0,1.528,131800.0,<1H OCEAN +-118.31,33.96,46.0,1686.0,303.0,870.0,320.0,3.4643,136300.0,<1H OCEAN +-118.31,33.96,48.0,2015.0,356.0,1020.0,338.0,4.0625,138700.0,<1H OCEAN +-118.29,33.97,48.0,3139.0,587.0,1319.0,506.0,3.5208,134200.0,<1H OCEAN +-118.29,33.96,36.0,1717.0,417.0,902.0,368.0,1.4868,113200.0,<1H OCEAN +-118.3,33.96,43.0,2009.0,442.0,1095.0,439.0,2.8299,109500.0,<1H OCEAN +-118.3,33.96,39.0,2802.0,618.0,1524.0,529.0,2.6518,136300.0,<1H OCEAN +-118.28,33.96,41.0,1175.0,340.0,1241.0,352.0,1.2273,98400.0,<1H OCEAN +-118.28,33.96,34.0,2074.0,562.0,1913.0,514.0,1.6156,102100.0,<1H OCEAN +-118.28,33.97,34.0,2771.0,802.0,2782.0,715.0,1.6652,99000.0,<1H OCEAN +-118.29,33.96,31.0,4022.0,1208.0,3707.0,1007.0,1.3096,116300.0,<1H OCEAN +-118.3,33.96,47.0,2112.0,417.0,1161.0,368.0,3.9722,117400.0,<1H OCEAN +-118.31,33.96,52.0,2523.0,460.0,1167.0,413.0,3.0625,127400.0,<1H OCEAN +-118.31,33.96,47.0,1586.0,322.0,1077.0,339.0,4.4861,140400.0,<1H OCEAN +-118.31,33.96,47.0,2005.0,392.0,1134.0,415.0,3.7143,140300.0,<1H OCEAN +-118.26,33.99,30.0,1702.0,443.0,1966.0,442.0,1.5521,97500.0,<1H OCEAN +-118.27,33.98,30.0,1966.0,584.0,2028.0,535.0,1.625,101500.0,<1H OCEAN +-118.28,33.99,38.0,1454.0,323.0,1098.0,297.0,1.5109,104000.0,<1H OCEAN +-118.27,33.99,41.0,656.0,162.0,730.0,170.0,1.8047,101800.0,<1H OCEAN +-118.28,33.98,43.0,1240.0,312.0,1100.0,311.0,1.575,97500.0,<1H OCEAN +-118.27,33.98,45.0,1696.0,424.0,1502.0,429.0,1.3042,99200.0,<1H OCEAN +-118.27,33.98,39.0,2062.0,588.0,1933.0,570.0,1.3801,97000.0,<1H OCEAN +-118.27,33.98,44.0,1722.0,457.0,2177.0,401.0,2.125,92500.0,<1H OCEAN +-118.26,33.98,43.0,762.0,206.0,854.0,188.0,1.2315,98200.0,<1H OCEAN +-118.26,33.97,46.0,1295.0,351.0,1120.0,323.0,1.7121,98200.0,<1H OCEAN +-118.26,33.97,44.0,1246.0,308.0,1031.0,295.0,1.9556,96300.0,<1H OCEAN +-118.26,33.97,46.0,1521.0,352.0,1100.0,334.0,1.55,100600.0,<1H OCEAN +-118.26,33.97,46.0,1086.0,249.0,880.0,250.0,1.5962,95700.0,<1H OCEAN +-118.27,33.97,45.0,1546.0,371.0,1186.0,366.0,1.64,96800.0,<1H OCEAN +-118.28,33.97,40.0,2180.0,642.0,2464.0,631.0,1.5521,90100.0,<1H OCEAN +-118.27,33.97,39.0,2569.0,688.0,2601.0,630.0,2.0754,101400.0,<1H OCEAN +-118.28,33.97,38.0,1819.0,497.0,2110.0,499.0,1.6027,97300.0,<1H OCEAN +-118.27,33.96,38.0,977.0,295.0,1073.0,292.0,1.0208,86400.0,<1H OCEAN +-118.27,33.96,42.0,796.0,203.0,697.0,177.0,2.037,92600.0,<1H OCEAN +-118.28,33.96,37.0,1812.0,500.0,1640.0,447.0,1.9348,99100.0,<1H OCEAN +-118.26,33.97,47.0,1504.0,374.0,1168.0,358.0,1.4625,94200.0,<1H OCEAN +-118.26,33.96,40.0,1475.0,347.0,1222.0,298.0,1.5303,95300.0,<1H OCEAN +-118.26,33.96,39.0,1255.0,323.0,902.0,327.0,1.5812,94000.0,<1H OCEAN +-118.26,33.97,52.0,1331.0,346.0,1144.0,362.0,1.5326,90600.0,<1H OCEAN +-118.27,33.97,34.0,1462.0,394.0,1310.0,351.0,1.1557,90100.0,<1H OCEAN +-118.27,33.96,38.0,1126.0,270.0,999.0,265.0,0.5495,91700.0,<1H OCEAN +-118.27,33.96,34.0,1040.0,276.0,1083.0,255.0,1.6467,90900.0,<1H OCEAN +-118.27,33.95,39.0,1529.0,358.0,1154.0,357.0,1.2091,97900.0,<1H OCEAN +-118.26,33.95,38.0,1387.0,346.0,1240.0,355.0,1.6898,95100.0,<1H OCEAN +-118.26,33.95,44.0,1513.0,369.0,1088.0,344.0,1.2969,94400.0,<1H OCEAN +-118.26,33.96,39.0,1542.0,375.0,1256.0,361.0,1.7167,100000.0,<1H OCEAN +-118.26,33.96,37.0,1625.0,383.0,1243.0,350.0,1.3971,89800.0,<1H OCEAN +-118.28,33.96,42.0,1604.0,399.0,1581.0,387.0,1.7656,96700.0,<1H OCEAN +-118.28,33.95,40.0,2044.0,538.0,2150.0,524.0,2.1437,94800.0,<1H OCEAN +-118.28,33.96,42.0,1206.0,304.0,1167.0,250.0,1.615,101300.0,<1H OCEAN +-118.28,33.96,39.0,882.0,221.0,697.0,189.0,1.8472,99100.0,<1H OCEAN +-118.28,33.96,23.0,1983.0,611.0,2048.0,600.0,1.5313,91400.0,<1H OCEAN +-118.29,33.95,35.0,1401.0,362.0,1357.0,327.0,2.0917,99300.0,<1H OCEAN +-118.29,33.95,32.0,721.0,205.0,842.0,208.0,1.6029,89700.0,<1H OCEAN +-118.29,33.96,39.0,1340.0,409.0,1463.0,367.0,1.5294,111400.0,<1H OCEAN +-118.29,33.95,40.0,2808.0,695.0,2357.0,627.0,1.9655,102300.0,<1H OCEAN +-118.29,33.95,39.0,1701.0,428.0,1468.0,411.0,1.9702,93200.0,<1H OCEAN +-118.28,33.94,43.0,1201.0,292.0,840.0,252.0,2.7917,105600.0,<1H OCEAN +-118.29,33.94,34.0,1089.0,278.0,995.0,315.0,2.3352,107700.0,<1H OCEAN +-118.27,33.95,35.0,2073.0,494.0,1753.0,490.0,1.5,93600.0,<1H OCEAN +-118.27,33.95,43.0,1156.0,291.0,1074.0,299.0,1.8814,94900.0,<1H OCEAN +-118.27,33.94,30.0,1041.0,275.0,877.0,270.0,1.5268,91600.0,<1H OCEAN +-118.28,33.94,38.0,637.0,204.0,679.0,162.0,1.5714,89700.0,<1H OCEAN +-118.28,33.95,41.0,835.0,208.0,707.0,192.0,1.4103,86200.0,<1H OCEAN +-118.27,33.95,40.0,935.0,226.0,818.0,236.0,1.8798,101300.0,<1H OCEAN +-118.27,33.95,34.0,987.0,248.0,902.0,221.0,2.3365,98000.0,<1H OCEAN +-118.27,33.95,34.0,1261.0,315.0,1027.0,303.0,2.2946,88800.0,<1H OCEAN +-118.27,33.95,29.0,1579.0,351.0,1056.0,322.0,2.3056,98500.0,<1H OCEAN +-118.25,33.95,35.0,1405.0,326.0,1086.0,273.0,1.0375,89800.0,<1H OCEAN +-118.26,33.94,45.0,1080.0,218.0,850.0,237.0,2.25,93400.0,<1H OCEAN +-118.26,33.95,44.0,1771.0,378.0,1296.0,399.0,1.6389,96700.0,<1H OCEAN +-118.26,33.95,44.0,1481.0,329.0,999.0,315.0,1.5147,94600.0,<1H OCEAN +-118.26,33.94,44.0,1103.0,265.0,760.0,247.0,1.6887,99600.0,<1H OCEAN +-118.25,33.94,37.0,1002.0,270.0,1092.0,273.0,1.6333,94500.0,<1H OCEAN +-118.26,33.94,41.0,1510.0,410.0,1408.0,389.0,1.65,94200.0,<1H OCEAN +-118.27,33.94,38.0,1314.0,318.0,1080.0,285.0,1.5872,89800.0,<1H OCEAN +-118.26,33.94,44.0,795.0,181.0,716.0,167.0,2.0,90300.0,<1H OCEAN +-118.26,33.93,35.0,1562.0,403.0,1587.0,406.0,1.4917,93200.0,<1H OCEAN +-118.27,33.93,41.0,570.0,135.0,466.0,121.0,2.6458,91300.0,<1H OCEAN +-118.27,33.94,34.0,721.0,165.0,661.0,171.0,2.0789,92400.0,<1H OCEAN +-118.27,33.94,37.0,973.0,221.0,842.0,178.0,1.6645,94900.0,<1H OCEAN +-118.27,33.93,36.0,1467.0,369.0,1247.0,347.0,1.8191,92700.0,<1H OCEAN +-118.26,33.93,36.0,1102.0,247.0,702.0,225.0,1.5256,95400.0,<1H OCEAN +-118.26,33.93,42.0,1433.0,295.0,775.0,293.0,1.1326,104800.0,<1H OCEAN +-118.25,33.93,42.0,657.0,147.0,526.0,132.0,2.5,110200.0,<1H OCEAN +-118.26,33.92,40.0,1076.0,244.0,705.0,255.0,1.7986,98900.0,<1H OCEAN +-118.27,33.92,36.0,1465.0,346.0,1147.0,324.0,1.7262,88800.0,<1H OCEAN +-118.27,33.94,43.0,1309.0,344.0,1182.0,340.0,1.6625,88700.0,<1H OCEAN +-118.27,33.94,30.0,1764.0,397.0,1406.0,362.0,1.449,93100.0,<1H OCEAN +-118.27,33.94,39.0,2078.0,561.0,1901.0,504.0,1.1468,96900.0,<1H OCEAN +-118.28,33.93,21.0,847.0,278.0,1283.0,277.0,1.4329,94100.0,<1H OCEAN +-118.28,33.94,32.0,1381.0,375.0,1268.0,354.0,1.1051,94200.0,<1H OCEAN +-118.28,33.94,9.0,456.0,130.0,438.0,114.0,0.8952,81300.0,<1H OCEAN +-118.28,33.94,44.0,1631.0,338.0,1197.0,355.0,3.0788,100000.0,<1H OCEAN +-118.28,33.93,42.0,1898.0,460.0,1503.0,429.0,2.5179,97400.0,<1H OCEAN +-118.29,33.93,43.0,2021.0,379.0,1051.0,352.0,3.3836,129900.0,<1H OCEAN +-118.29,33.94,47.0,1782.0,338.0,1003.0,329.0,2.5398,105700.0,<1H OCEAN +-118.28,33.93,41.0,936.0,257.0,913.0,226.0,2.0313,122600.0,<1H OCEAN +-118.29,33.92,40.0,1935.0,461.0,1616.0,433.0,2.875,120200.0,<1H OCEAN +-118.29,33.93,41.0,896.0,198.0,605.0,168.0,2.2778,128100.0,<1H OCEAN +-118.27,33.93,38.0,2073.0,500.0,1657.0,470.0,1.2098,88400.0,<1H OCEAN +-118.28,33.92,39.0,1274.0,282.0,975.0,277.0,1.5114,90400.0,<1H OCEAN +-118.28,33.93,43.0,269.0,74.0,295.0,79.0,2.2969,90600.0,<1H OCEAN +-118.28,33.93,45.0,529.0,112.0,448.0,120.0,3.5833,90600.0,<1H OCEAN +-118.28,33.93,52.0,117.0,33.0,74.0,45.0,0.4999,90600.0,<1H OCEAN +-118.25,33.94,44.0,1463.0,312.0,940.0,312.0,2.3333,99800.0,<1H OCEAN +-118.25,33.94,43.0,1113.0,378.0,1305.0,334.0,1.1434,91300.0,<1H OCEAN +-118.25,33.94,43.0,793.0,,736.0,231.0,0.8527,90400.0,<1H OCEAN +-118.23,33.95,37.0,2667.0,671.0,2865.0,683.0,0.6831,87500.0,<1H OCEAN +-118.24,33.95,40.0,1193.0,280.0,1210.0,286.0,1.35,89500.0,<1H OCEAN +-118.24,33.95,37.0,649.0,147.0,653.0,147.0,1.4792,97500.0,<1H OCEAN +-118.24,33.95,36.0,2316.0,543.0,1938.0,507.0,1.25,97400.0,<1H OCEAN +-118.24,33.95,21.0,1260.0,342.0,1167.0,310.0,0.9708,107600.0,<1H OCEAN +-118.25,33.95,28.0,2136.0,,1799.0,476.0,1.5427,95700.0,<1H OCEAN +-118.24,33.95,37.0,441.0,125.0,390.0,98.0,1.6513,90200.0,<1H OCEAN +-118.25,33.95,25.0,764.0,200.0,801.0,220.0,1.1384,100000.0,<1H OCEAN +-118.25,33.93,40.0,975.0,270.0,1068.0,270.0,0.9889,87500.0,<1H OCEAN +-118.25,33.93,36.0,2452.0,734.0,2664.0,667.0,0.9298,100000.0,<1H OCEAN +-118.25,33.93,42.0,819.0,233.0,899.0,228.0,1.1346,85400.0,<1H OCEAN +-118.24,33.94,37.0,869.0,241.0,1040.0,233.0,2.0,84200.0,<1H OCEAN +-118.24,33.94,34.0,796.0,180.0,673.0,144.0,2.0769,88300.0,<1H OCEAN +-118.24,33.93,37.0,1027.0,258.0,824.0,248.0,1.5132,86300.0,<1H OCEAN +-118.24,33.93,32.0,779.0,201.0,861.0,219.0,1.0625,89800.0,<1H OCEAN +-118.24,33.94,42.0,380.0,106.0,411.0,100.0,0.9705,90000.0,<1H OCEAN +-118.24,33.94,39.0,1215.0,273.0,1211.0,265.0,1.7212,95500.0,<1H OCEAN +-118.23,33.94,39.0,1141.0,258.0,1313.0,234.0,2.0187,90100.0,<1H OCEAN +-118.23,33.94,35.0,1090.0,267.0,1339.0,263.0,2.1607,97600.0,<1H OCEAN +-118.23,33.94,36.0,1110.0,,1417.0,302.0,2.3333,92100.0,<1H OCEAN +-118.24,33.94,30.0,940.0,211.0,1071.0,204.0,1.2679,92000.0,<1H OCEAN +-118.23,33.93,36.0,501.0,123.0,487.0,118.0,1.3,87000.0,<1H OCEAN +-118.23,33.93,39.0,2065.0,532.0,2015.0,535.0,0.8478,104900.0,<1H OCEAN +-118.24,33.93,32.0,1063.0,282.0,992.0,253.0,0.8984,88700.0,<1H OCEAN +-118.39,34.12,29.0,6447.0,1012.0,2184.0,960.0,8.2816,500001.0,<1H OCEAN +-118.4,34.11,32.0,5578.0,753.0,1567.0,697.0,15.0001,500001.0,<1H OCEAN +-118.42,34.12,27.0,2089.0,303.0,654.0,270.0,12.3767,500001.0,<1H OCEAN +-118.43,34.11,27.0,10806.0,1440.0,3511.0,1352.0,12.7296,500001.0,<1H OCEAN +-118.43,34.09,27.0,1613.0,200.0,497.0,197.0,7.9835,500001.0,<1H OCEAN +-118.45,34.12,20.0,10722.0,1617.0,3731.0,1511.0,9.7449,500001.0,<1H OCEAN +-118.44,34.09,36.0,3129.0,392.0,862.0,334.0,15.0001,500001.0,<1H OCEAN +-118.43,34.08,46.0,778.0,90.0,238.0,93.0,15.0001,500001.0,<1H OCEAN +-118.45,34.08,52.0,1500.0,176.0,384.0,145.0,7.1576,500001.0,<1H OCEAN +-118.45,34.1,31.0,6675.0,842.0,2092.0,796.0,11.8442,500001.0,<1H OCEAN +-118.46,34.08,35.0,3247.0,525.0,1065.0,484.0,7.8426,500001.0,<1H OCEAN +-118.47,34.1,32.0,8041.0,1141.0,2768.0,1106.0,11.1978,500001.0,<1H OCEAN +-118.49,34.11,27.0,6603.0,879.0,2336.0,868.0,13.2935,500001.0,<1H OCEAN +-118.48,34.07,29.0,4767.0,777.0,1500.0,638.0,10.7937,500001.0,<1H OCEAN +-118.48,34.07,40.0,3351.0,484.0,1564.0,523.0,8.5153,500001.0,<1H OCEAN +-118.48,34.07,37.0,4042.0,549.0,1318.0,542.0,12.8665,500001.0,<1H OCEAN +-118.49,34.06,42.0,2861.0,360.0,829.0,310.0,15.0001,500001.0,<1H OCEAN +-118.49,34.07,36.0,2929.0,366.0,1054.0,352.0,13.5728,500001.0,<1H OCEAN +-118.51,34.11,29.0,9013.0,1117.0,2919.0,1061.0,13.947,500001.0,<1H OCEAN +-118.5,34.05,39.0,1487.0,163.0,414.0,160.0,15.0,500001.0,<1H OCEAN +-118.53,34.09,37.0,5477.0,833.0,1925.0,757.0,8.1888,500001.0,<1H OCEAN +-118.52,34.05,45.0,1814.0,325.0,709.0,311.0,4.825,500001.0,<1H OCEAN +-118.52,34.04,47.0,1985.0,315.0,819.0,340.0,6.5147,500001.0,<1H OCEAN +-118.57,34.09,14.0,7970.0,1142.0,2926.0,1096.0,11.2866,500001.0,<1H OCEAN +-118.54,34.05,33.0,6778.0,1092.0,2540.0,1052.0,8.565,500001.0,<1H OCEAN +-118.55,34.04,41.0,1482.0,239.0,617.0,242.0,8.8619,500001.0,<1H OCEAN +-118.56,34.03,34.0,2095.0,343.0,662.0,299.0,8.2934,500001.0,<1H OCEAN +-118.56,34.06,24.0,2332.0,349.0,761.0,325.0,7.3031,500001.0,<1H OCEAN +-118.54,34.06,21.0,3755.0,525.0,1493.0,526.0,11.4233,500001.0,<1H OCEAN +-118.55,34.03,35.0,9075.0,1858.0,3646.0,1724.0,6.0307,500001.0,<1H OCEAN +-118.52,34.04,42.0,993.0,130.0,368.0,134.0,10.8082,500001.0,<1H OCEAN +-118.52,34.04,43.0,2167.0,254.0,761.0,256.0,13.6842,500001.0,<1H OCEAN +-118.53,34.04,45.0,1711.0,264.0,735.0,261.0,9.1078,500001.0,<1H OCEAN +-118.53,34.03,40.0,4350.0,763.0,1551.0,665.0,7.0318,500001.0,<1H OCEAN +-118.5,34.05,36.0,4152.0,542.0,1461.0,550.0,15.0001,500001.0,<1H OCEAN +-118.55,33.99,39.0,2603.0,456.0,928.0,410.0,7.9096,500001.0,NEAR OCEAN +-118.51,34.04,38.0,4715.0,691.0,1660.0,637.0,10.1882,500001.0,<1H OCEAN +-118.47,34.06,45.0,1271.0,190.0,419.0,171.0,7.6447,500001.0,<1H OCEAN +-118.47,34.06,45.0,3030.0,433.0,916.0,399.0,9.4664,500001.0,<1H OCEAN +-118.48,34.05,48.0,3623.0,528.0,1282.0,516.0,9.5221,500001.0,<1H OCEAN +-118.49,34.05,42.0,1918.0,216.0,632.0,224.0,15.0001,500001.0,<1H OCEAN +-118.47,34.06,26.0,6577.0,1789.0,2937.0,1652.0,4.801,500001.0,<1H OCEAN +-118.46,34.06,20.0,5448.0,1532.0,2202.0,1442.0,4.2554,500001.0,<1H OCEAN +-118.47,34.05,25.0,2689.0,719.0,1229.0,663.0,3.5909,500001.0,<1H OCEAN +-118.46,34.05,25.0,4077.0,1151.0,1719.0,1017.0,3.7721,337500.0,<1H OCEAN +-118.46,34.05,21.0,3639.0,1002.0,1489.0,983.0,4.6197,387500.0,<1H OCEAN +-118.47,34.05,22.0,5215.0,1193.0,2048.0,1121.0,4.7009,500001.0,<1H OCEAN +-118.47,34.05,27.0,4401.0,1033.0,1725.0,962.0,4.175,500001.0,<1H OCEAN +-118.48,34.05,36.0,2143.0,434.0,751.0,396.0,6.7496,500001.0,<1H OCEAN +-118.49,34.05,45.0,1346.0,214.0,415.0,209.0,7.0285,500001.0,<1H OCEAN +-118.42,34.08,46.0,1399.0,148.0,410.0,152.0,15.0001,500001.0,<1H OCEAN +-118.43,34.07,34.0,3203.0,483.0,949.0,439.0,10.3467,500001.0,<1H OCEAN +-118.43,34.07,38.0,3251.0,656.0,1251.0,593.0,7.7382,500001.0,<1H OCEAN +-118.44,34.07,26.0,3535.0,748.0,1322.0,666.0,7.1674,500001.0,<1H OCEAN +-118.44,34.07,35.0,1973.0,332.0,1257.0,296.0,8.9565,500001.0,<1H OCEAN +-118.44,34.06,28.0,3910.0,959.0,1763.0,867.0,5.5,500001.0,<1H OCEAN +-118.44,34.07,21.0,730.0,263.0,965.0,224.0,2.0511,350000.0,<1H OCEAN +-118.44,34.06,14.0,520.0,292.0,282.0,213.0,2.2857,500001.0,<1H OCEAN +-118.45,34.07,13.0,4284.0,1452.0,3806.0,1252.0,1.3125,350000.0,<1H OCEAN +-118.45,34.07,19.0,4845.0,1609.0,3751.0,1539.0,1.583,350000.0,<1H OCEAN +-118.45,34.06,20.0,3367.0,1264.0,2667.0,1131.0,2.2444,500000.0,<1H OCEAN +-118.46,34.06,46.0,1302.0,215.0,482.0,226.0,7.0674,500001.0,<1H OCEAN +-118.46,34.07,43.0,2511.0,456.0,808.0,407.0,6.7703,500001.0,<1H OCEAN +-118.46,34.07,49.0,2418.0,301.0,850.0,318.0,14.2867,500001.0,<1H OCEAN +-118.46,34.07,42.0,2564.0,460.0,913.0,414.0,9.2225,500001.0,<1H OCEAN +-118.44,34.06,9.0,5102.0,1695.0,2609.0,1450.0,3.2545,500001.0,<1H OCEAN +-118.44,34.05,18.0,4780.0,1192.0,1886.0,1036.0,4.4674,500001.0,<1H OCEAN +-118.44,34.05,32.0,1880.0,435.0,798.0,417.0,4.7109,500000.0,<1H OCEAN +-118.44,34.05,15.0,5368.0,1312.0,2269.0,1232.0,5.7097,316700.0,<1H OCEAN +-118.43,34.06,11.0,3184.0,641.0,911.0,463.0,7.2675,500001.0,<1H OCEAN +-118.43,34.06,41.0,1463.0,267.0,601.0,267.0,5.3777,500001.0,<1H OCEAN +-118.43,34.05,22.0,4251.0,1073.0,1581.0,881.0,5.2555,500001.0,<1H OCEAN +-118.44,34.06,13.0,4833.0,1119.0,1649.0,807.0,6.2389,500001.0,<1H OCEAN +-118.42,34.06,40.0,2933.0,565.0,1077.0,536.0,6.1527,500001.0,<1H OCEAN +-118.43,34.06,31.0,1317.0,284.0,523.0,274.0,7.4219,500001.0,<1H OCEAN +-118.43,34.06,38.0,2982.0,664.0,1122.0,572.0,4.1908,500001.0,<1H OCEAN +-118.43,34.06,20.0,4600.0,1018.0,1675.0,932.0,5.1999,500001.0,<1H OCEAN +-118.42,34.06,44.0,533.0,90.0,291.0,97.0,10.8045,500001.0,<1H OCEAN +-118.42,34.06,52.0,1881.0,334.0,640.0,321.0,6.871,500001.0,<1H OCEAN +-118.42,34.05,38.0,4888.0,1126.0,1698.0,937.0,4.8304,500001.0,<1H OCEAN +-118.43,34.05,52.0,1693.0,290.0,727.0,305.0,6.7115,500001.0,<1H OCEAN +-118.43,34.05,24.0,3832.0,949.0,1613.0,893.0,3.9673,477300.0,<1H OCEAN +-118.44,34.05,20.0,5943.0,1538.0,2492.0,1429.0,4.1141,305000.0,<1H OCEAN +-118.44,34.05,22.0,3970.0,871.0,1588.0,791.0,4.8618,500001.0,<1H OCEAN +-118.43,34.04,52.0,2425.0,435.0,962.0,412.0,5.8587,494700.0,<1H OCEAN +-118.45,34.05,28.0,801.0,399.0,936.0,406.0,2.1875,181300.0,<1H OCEAN +-118.45,34.04,22.0,3319.0,1045.0,1848.0,940.0,3.6673,283300.0,<1H OCEAN +-118.45,34.04,23.0,3771.0,1321.0,2031.0,1241.0,2.7679,277500.0,<1H OCEAN +-118.46,34.05,25.0,6902.0,2138.0,3136.0,1844.0,2.6509,410000.0,<1H OCEAN +-118.45,34.05,23.0,4099.0,1287.0,2103.0,1217.0,3.7549,275000.0,<1H OCEAN +-118.46,34.04,19.0,3522.0,1036.0,1820.0,977.0,3.2663,337500.0,<1H OCEAN +-118.47,34.04,21.0,5041.0,1491.0,2719.0,1420.0,3.5335,268800.0,<1H OCEAN +-118.45,34.04,19.0,3330.0,1010.0,1837.0,915.0,3.0173,393800.0,<1H OCEAN +-118.46,34.04,25.0,2142.0,718.0,1390.0,699.0,3.0069,325000.0,<1H OCEAN +-118.46,34.04,25.0,2768.0,850.0,1558.0,784.0,3.6976,360000.0,<1H OCEAN +-118.46,34.04,17.0,2729.0,897.0,1404.0,758.0,3.1235,420800.0,<1H OCEAN +-118.46,34.04,31.0,2621.0,707.0,1632.0,673.0,3.287,348100.0,<1H OCEAN +-118.45,34.04,21.0,2819.0,648.0,1435.0,593.0,3.9489,360200.0,<1H OCEAN +-118.45,34.03,45.0,727.0,168.0,520.0,175.0,2.6528,300000.0,<1H OCEAN +-118.45,34.03,39.0,1657.0,402.0,931.0,363.0,3.7813,336300.0,<1H OCEAN +-118.44,34.04,49.0,32.0,7.0,14.0,7.0,2.1875,225000.0,<1H OCEAN +-118.44,34.04,16.0,18.0,6.0,3.0,4.0,0.536,350000.0,<1H OCEAN +-118.44,34.04,31.0,2670.0,662.0,1535.0,631.0,3.0714,347800.0,<1H OCEAN +-118.43,34.04,52.0,1782.0,308.0,735.0,307.0,5.2954,485100.0,<1H OCEAN +-118.42,34.04,46.0,1508.0,276.0,639.0,273.0,4.925,409800.0,<1H OCEAN +-118.43,34.04,42.0,2725.0,569.0,1115.0,516.0,4.5833,427500.0,<1H OCEAN +-118.41,34.05,16.0,9728.0,2211.0,3026.0,1899.0,5.8758,500001.0,<1H OCEAN +-118.42,34.05,33.0,2921.0,652.0,1124.0,608.0,5.0151,500001.0,<1H OCEAN +-118.42,34.05,52.0,2533.0,402.0,981.0,386.0,7.8164,500001.0,<1H OCEAN +-118.4,34.05,26.0,4473.0,923.0,1518.0,805.0,5.0762,500001.0,<1H OCEAN +-118.4,34.04,40.0,2079.0,268.0,720.0,282.0,9.272,500001.0,<1H OCEAN +-118.4,34.04,42.0,1298.0,174.0,420.0,190.0,12.8483,500001.0,<1H OCEAN +-118.4,34.03,36.0,1831.0,296.0,871.0,269.0,8.1484,500001.0,<1H OCEAN +-118.41,34.03,33.0,1730.0,386.0,994.0,363.0,3.7277,500001.0,<1H OCEAN +-118.41,34.04,49.0,601.0,95.0,228.0,106.0,8.0239,500001.0,<1H OCEAN +-118.39,34.05,35.0,2458.0,576.0,1047.0,554.0,4.0283,412500.0,<1H OCEAN +-118.39,34.05,42.0,3105.0,559.0,1253.0,531.0,5.222,500001.0,<1H OCEAN +-118.4,34.05,34.0,2113.0,459.0,859.0,432.0,3.6953,500001.0,<1H OCEAN +-118.39,34.05,25.0,2814.0,701.0,1139.0,658.0,4.0153,460000.0,<1H OCEAN +-118.41,34.04,52.0,1907.0,261.0,681.0,249.0,10.9805,500001.0,<1H OCEAN +-118.41,34.04,52.0,2113.0,332.0,800.0,327.0,11.1768,500001.0,<1H OCEAN +-118.41,34.03,36.0,3053.0,635.0,1234.0,577.0,5.1637,500001.0,<1H OCEAN +-118.42,34.04,51.0,1975.0,348.0,771.0,357.0,6.626,500001.0,<1H OCEAN +-118.42,34.04,52.0,1358.0,272.0,574.0,267.0,5.6454,500001.0,<1H OCEAN +-118.39,34.04,45.0,2089.0,312.0,834.0,305.0,7.3028,500001.0,<1H OCEAN +-118.39,34.04,44.0,1873.0,286.0,635.0,283.0,5.5951,461300.0,<1H OCEAN +-118.4,34.04,43.0,3863.0,537.0,1398.0,511.0,8.5938,500001.0,<1H OCEAN +-118.4,34.05,43.0,1028.0,145.0,394.0,149.0,10.4519,500001.0,<1H OCEAN +-118.39,34.05,42.0,1467.0,203.0,577.0,204.0,6.6368,500001.0,<1H OCEAN +-118.38,34.04,35.0,2237.0,592.0,1794.0,543.0,2.2961,207700.0,<1H OCEAN +-118.38,34.04,31.0,2846.0,727.0,2120.0,672.0,2.7226,254200.0,<1H OCEAN +-118.38,34.04,45.0,767.0,130.0,254.0,118.0,6.2895,340400.0,<1H OCEAN +-118.38,34.04,36.0,3005.0,771.0,2054.0,758.0,2.0437,309100.0,<1H OCEAN +-118.38,34.04,39.0,2614.0,569.0,1665.0,553.0,3.4063,271600.0,<1H OCEAN +-118.39,34.04,41.0,101.0,23.0,85.0,30.0,4.125,237500.0,<1H OCEAN +-118.39,34.04,52.0,1492.0,277.0,666.0,289.0,4.7386,340400.0,<1H OCEAN +-118.39,34.04,49.0,1230.0,279.0,669.0,269.0,3.9038,308300.0,<1H OCEAN +-118.39,34.03,28.0,1722.0,536.0,1161.0,481.0,3.2228,232500.0,<1H OCEAN +-118.39,34.03,25.0,3442.0,1050.0,1890.0,914.0,3.0574,319400.0,<1H OCEAN +-118.4,34.03,24.0,1101.0,318.0,491.0,287.0,3.2222,319400.0,<1H OCEAN +-118.4,34.03,43.0,1006.0,201.0,520.0,199.0,6.5669,372800.0,<1H OCEAN +-118.41,34.03,26.0,4376.0,1394.0,2435.0,1250.0,2.8418,327300.0,<1H OCEAN +-118.4,34.02,19.0,7297.0,2331.0,3870.0,2144.0,3.116,300000.0,<1H OCEAN +-118.4,34.02,27.0,515.0,201.0,397.0,228.0,2.4135,184400.0,<1H OCEAN +-118.41,34.03,24.0,3711.0,1192.0,1764.0,1147.0,3.1642,366700.0,<1H OCEAN +-118.41,34.02,24.0,2610.0,756.0,1322.0,692.0,3.5022,281300.0,<1H OCEAN +-118.41,34.02,16.0,5825.0,1866.0,3390.0,1752.0,3.0965,320000.0,<1H OCEAN +-118.39,34.03,19.0,1450.0,509.0,746.0,437.0,3.1415,55000.0,<1H OCEAN +-118.4,34.03,13.0,6152.0,1978.0,3397.0,1845.0,3.4058,275000.0,<1H OCEAN +-118.38,34.03,36.0,2101.0,569.0,1756.0,527.0,2.9344,222100.0,<1H OCEAN +-118.39,34.03,39.0,1366.0,375.0,1237.0,370.0,3.7206,230900.0,<1H OCEAN +-118.37,34.04,43.0,888.0,170.0,514.0,161.0,3.1827,202800.0,<1H OCEAN +-118.37,34.04,42.0,1809.0,424.0,1094.0,382.0,2.767,143000.0,<1H OCEAN +-118.38,34.03,43.0,912.0,255.0,705.0,246.0,2.6402,185700.0,<1H OCEAN +-118.37,34.04,25.0,542.0,161.0,442.0,131.0,2.25,333300.0,<1H OCEAN +-118.37,34.04,43.0,1465.0,278.0,727.0,290.0,4.0781,289400.0,<1H OCEAN +-118.42,34.03,45.0,1262.0,223.0,637.0,221.0,5.0866,427300.0,<1H OCEAN +-118.43,34.03,45.0,1740.0,311.0,788.0,306.0,5.2099,373600.0,<1H OCEAN +-118.43,34.03,39.0,1733.0,429.0,855.0,387.0,3.2308,340800.0,<1H OCEAN +-118.43,34.03,26.0,1706.0,516.0,894.0,435.0,3.1875,372700.0,<1H OCEAN +-118.42,34.03,44.0,904.0,176.0,358.0,158.0,3.3542,344200.0,<1H OCEAN +-118.44,34.03,25.0,2059.0,659.0,1349.0,588.0,3.2396,352400.0,<1H OCEAN +-118.43,34.03,36.0,1552.0,388.0,867.0,352.0,3.6467,346700.0,<1H OCEAN +-118.44,34.03,37.0,1193.0,205.0,488.0,224.0,3.625,357600.0,<1H OCEAN +-118.44,34.03,37.0,975.0,189.0,489.0,202.0,4.2434,331000.0,<1H OCEAN +-118.44,34.03,30.0,1039.0,303.0,606.0,274.0,3.125,343800.0,<1H OCEAN +-118.45,34.03,41.0,1240.0,320.0,711.0,304.0,3.3482,318100.0,<1H OCEAN +-118.45,34.03,41.0,2083.0,528.0,993.0,481.0,4.0231,353900.0,<1H OCEAN +-118.44,34.03,41.0,1164.0,265.0,561.0,251.0,4.2411,350900.0,<1H OCEAN +-118.44,34.02,37.0,1592.0,308.0,783.0,321.0,6.2583,386000.0,<1H OCEAN +-118.44,34.01,43.0,1408.0,246.0,651.0,240.0,4.5795,400000.0,<1H OCEAN +-118.44,34.01,41.0,1309.0,221.0,534.0,228.0,5.1708,418800.0,<1H OCEAN +-118.45,34.01,37.0,1328.0,250.0,626.0,228.0,5.8666,440100.0,<1H OCEAN +-118.45,34.01,40.0,1361.0,240.0,559.0,229.0,6.3516,354300.0,<1H OCEAN +-118.45,34.01,36.0,2424.0,418.0,1123.0,417.0,6.4755,405800.0,<1H OCEAN +-118.44,34.02,32.0,2242.0,490.0,921.0,461.0,4.0429,500001.0,<1H OCEAN +-118.43,34.01,43.0,1487.0,242.0,675.0,247.0,5.3403,489800.0,<1H OCEAN +-118.44,34.02,39.0,3278.0,632.0,1321.0,617.0,6.2917,465700.0,<1H OCEAN +-118.43,34.02,38.0,2172.0,437.0,830.0,368.0,3.9091,500001.0,<1H OCEAN +-118.43,34.02,42.0,1528.0,244.0,634.0,242.0,8.1631,500001.0,<1H OCEAN +-118.43,34.02,41.0,2403.0,516.0,1001.0,514.0,4.3906,500001.0,<1H OCEAN +-118.42,34.03,44.0,629.0,131.0,326.0,156.0,4.5278,374300.0,<1H OCEAN +-118.41,34.03,20.0,4374.0,1311.0,2165.0,1185.0,3.6019,463600.0,<1H OCEAN +-118.42,34.02,21.0,3244.0,815.0,1423.0,781.0,3.6488,340800.0,<1H OCEAN +-118.42,34.02,34.0,2243.0,444.0,973.0,413.0,4.9676,414100.0,<1H OCEAN +-118.42,34.02,28.0,3167.0,737.0,1248.0,665.0,3.1941,394700.0,<1H OCEAN +-118.42,34.02,34.0,2995.0,942.0,2626.0,947.0,2.2402,450000.0,<1H OCEAN +-118.41,34.02,34.0,1430.0,357.0,805.0,362.0,3.3462,307000.0,<1H OCEAN +-118.42,34.02,22.0,3292.0,1134.0,1655.0,898.0,3.1746,348800.0,<1H OCEAN +-118.42,34.02,26.0,2664.0,842.0,1745.0,789.0,3.4269,301900.0,<1H OCEAN +-118.41,34.02,35.0,1728.0,442.0,1161.0,420.0,3.725,310000.0,<1H OCEAN +-118.41,34.02,19.0,4702.0,1472.0,2636.0,1334.0,3.3955,225000.0,<1H OCEAN +-118.41,34.02,27.0,2224.0,618.0,1594.0,625.0,3.0833,315500.0,<1H OCEAN +-118.42,34.01,33.0,2731.0,535.0,1280.0,510.0,4.7083,420100.0,<1H OCEAN +-118.42,34.01,32.0,1300.0,356.0,703.0,311.0,3.5667,394000.0,<1H OCEAN +-118.43,34.01,27.0,3133.0,1021.0,2242.0,1002.0,2.697,412500.0,<1H OCEAN +-118.43,34.01,41.0,1527.0,279.0,746.0,285.0,6.4232,446600.0,<1H OCEAN +-118.43,34.01,31.0,2526.0,528.0,1046.0,504.0,4.7009,500001.0,<1H OCEAN +-118.44,34.01,42.0,2061.0,396.0,907.0,393.0,6.0804,420000.0,<1H OCEAN +-118.44,34.0,44.0,1462.0,338.0,821.0,341.0,2.599,362200.0,<1H OCEAN +-118.44,34.0,44.0,1798.0,353.0,835.0,314.0,4.75,355800.0,<1H OCEAN +-118.45,34.0,39.0,1909.0,359.0,867.0,345.0,4.7,334700.0,<1H OCEAN +-118.44,34.0,40.0,1287.0,346.0,806.0,311.0,3.875,321300.0,<1H OCEAN +-118.43,34.0,30.0,2148.0,597.0,1341.0,559.0,3.3995,324000.0,<1H OCEAN +-118.44,34.0,22.0,5822.0,1707.0,3335.0,1585.0,3.1579,243100.0,<1H OCEAN +-118.44,34.0,41.0,1562.0,377.0,874.0,368.0,4.1083,324300.0,<1H OCEAN +-118.42,34.01,42.0,1594.0,369.0,952.0,362.0,3.099,335400.0,<1H OCEAN +-118.42,34.01,29.0,1996.0,489.0,960.0,449.0,3.6611,344200.0,<1H OCEAN +-118.42,34.0,31.0,1930.0,456.0,1002.0,410.0,3.9798,458600.0,<1H OCEAN +-118.43,34.0,28.0,6128.0,1963.0,3586.0,1815.0,2.7058,310900.0,<1H OCEAN +-118.46,34.01,43.0,513.0,98.0,266.0,103.0,5.6428,343100.0,<1H OCEAN +-118.46,34.0,39.0,4098.0,1100.0,2054.0,1053.0,2.918,345600.0,<1H OCEAN +-118.46,34.0,37.0,388.0,83.0,248.0,84.0,5.1664,326700.0,<1H OCEAN +-118.46,34.0,36.0,1392.0,260.0,679.0,247.0,4.7344,346900.0,<1H OCEAN +-118.46,34.01,39.0,711.0,148.0,347.0,153.0,4.2813,297200.0,<1H OCEAN +-118.47,34.0,38.0,1235.0,390.0,891.0,376.0,2.7143,287500.0,<1H OCEAN +-118.47,34.0,41.0,2331.0,636.0,1839.0,537.0,2.288,263500.0,<1H OCEAN +-118.46,34.0,39.0,614.0,174.0,538.0,159.0,2.3542,235700.0,<1H OCEAN +-118.47,33.99,34.0,1875.0,501.0,1491.0,526.0,2.8417,321400.0,<1H OCEAN +-118.47,34.0,37.0,2586.0,765.0,1801.0,737.0,2.6042,305800.0,<1H OCEAN +-118.47,33.99,31.0,1312.0,376.0,1178.0,330.0,2.0714,300000.0,<1H OCEAN +-118.47,33.99,41.0,1146.0,310.0,833.0,270.0,2.5938,285000.0,<1H OCEAN +-118.47,33.99,33.0,854.0,235.0,645.0,198.0,2.1471,239300.0,<1H OCEAN +-118.51,33.98,40.0,1901.0,679.0,865.0,587.0,2.3417,425000.0,<1H OCEAN +-118.48,33.99,46.0,2219.0,686.0,1107.0,590.0,2.5523,387500.0,<1H OCEAN +-118.47,33.99,50.0,1568.0,501.0,764.0,478.0,3.015,414300.0,<1H OCEAN +-118.47,33.99,52.0,1523.0,447.0,636.0,408.0,3.0682,412500.0,<1H OCEAN +-118.47,33.99,52.0,2167.0,622.0,1095.0,570.0,2.8514,358700.0,<1H OCEAN +-118.47,33.99,37.0,2155.0,721.0,1082.0,637.0,3.4071,267500.0,<1H OCEAN +-118.47,33.99,24.0,1438.0,454.0,665.0,416.0,2.975,500001.0,<1H OCEAN +-118.5,33.97,52.0,709.0,329.0,388.0,313.0,2.2643,350000.0,<1H OCEAN +-118.45,33.99,52.0,1010.0,244.0,573.0,242.0,4.1861,363200.0,<1H OCEAN +-118.46,33.99,52.0,1158.0,253.0,528.0,253.0,3.5234,334700.0,<1H OCEAN +-118.46,33.99,44.0,1122.0,287.0,531.0,256.0,4.0598,335900.0,<1H OCEAN +-118.46,34.0,44.0,941.0,230.0,493.0,206.0,3.6458,325800.0,<1H OCEAN +-118.46,34.0,52.0,888.0,206.0,376.0,194.0,3.875,372000.0,<1H OCEAN +-118.45,34.0,46.0,1777.0,362.0,896.0,334.0,4.45,348300.0,<1H OCEAN +-118.45,34.0,43.0,1606.0,408.0,862.0,354.0,3.962,345800.0,<1H OCEAN +-118.45,34.0,48.0,1923.0,408.0,1142.0,433.0,4.575,326700.0,<1H OCEAN +-118.45,33.99,33.0,3125.0,785.0,1720.0,713.0,2.9722,325000.0,<1H OCEAN +-118.45,33.99,52.0,1829.0,472.0,779.0,424.0,3.1607,339000.0,<1H OCEAN +-118.46,33.99,41.0,885.0,285.0,562.0,268.0,3.1992,303800.0,<1H OCEAN +-118.46,33.99,37.0,1828.0,460.0,1075.0,453.0,4.337,360600.0,<1H OCEAN +-118.46,33.98,32.0,2388.0,591.0,1009.0,556.0,5.2121,466700.0,<1H OCEAN +-118.46,33.99,35.0,1214.0,300.0,478.0,265.0,4.0156,500001.0,<1H OCEAN +-118.46,33.98,27.0,2217.0,520.0,806.0,458.0,3.8935,500001.0,<1H OCEAN +-118.5,33.97,29.0,2737.0,808.0,1157.0,696.0,5.128,500001.0,<1H OCEAN +-118.45,33.99,45.0,1132.0,269.0,654.0,264.0,4.5673,343100.0,<1H OCEAN +-118.45,33.99,26.0,1919.0,405.0,953.0,371.0,6.0672,420800.0,<1H OCEAN +-118.46,33.98,19.0,2520.0,726.0,964.0,663.0,3.8068,500001.0,<1H OCEAN +-118.46,33.97,19.0,1658.0,427.0,648.0,378.0,3.8698,500001.0,<1H OCEAN +-118.46,33.97,18.0,9430.0,2473.0,3408.0,2003.0,6.1726,500001.0,<1H OCEAN +-118.46,33.97,19.0,2461.0,521.0,777.0,447.0,10.0,500001.0,<1H OCEAN +-118.48,33.96,16.0,895.0,181.0,237.0,149.0,12.0088,500001.0,<1H OCEAN +-118.4,34.0,10.0,1526.0,339.0,705.0,268.0,5.8083,321800.0,<1H OCEAN +-118.41,34.0,35.0,684.0,161.0,381.0,159.0,2.8393,272000.0,<1H OCEAN +-118.41,34.0,30.0,3550.0,934.0,3738.0,880.0,3.191,271200.0,<1H OCEAN +-118.41,34.0,18.0,1307.0,441.0,884.0,456.0,2.9338,276300.0,<1H OCEAN +-118.42,34.0,14.0,3771.0,1180.0,2355.0,978.0,3.1603,287500.0,<1H OCEAN +-118.42,33.99,35.0,1701.0,482.0,1428.0,494.0,3.725,284600.0,<1H OCEAN +-118.43,33.99,35.0,2243.0,495.0,1135.0,465.0,4.3281,324000.0,<1H OCEAN +-118.43,33.98,19.0,8324.0,1590.0,2927.0,1538.0,7.5426,351700.0,<1H OCEAN +-118.43,33.99,45.0,1899.0,461.0,1260.0,415.0,2.6667,320000.0,<1H OCEAN +-118.43,33.99,43.0,2483.0,548.0,1212.0,493.0,4.0189,302900.0,<1H OCEAN +-118.42,33.99,23.0,5548.0,1245.0,2847.0,1229.0,4.4228,366900.0,<1H OCEAN +-118.42,33.98,3.0,475.0,155.0,236.0,153.0,3.6667,450000.0,<1H OCEAN +-118.43,33.99,42.0,2558.0,558.0,1328.0,541.0,4.875,301300.0,<1H OCEAN +-118.44,33.99,43.0,1432.0,308.0,782.0,303.0,4.3333,303900.0,<1H OCEAN +-118.41,33.99,39.0,3014.0,822.0,3212.0,777.0,1.1985,215000.0,<1H OCEAN +-118.42,33.99,38.0,740.0,171.0,599.0,194.0,4.0893,248900.0,<1H OCEAN +-118.42,33.99,35.0,1724.0,419.0,1079.0,394.0,4.5521,263800.0,<1H OCEAN +-118.41,34.0,35.0,1062.0,305.0,1026.0,307.0,2.7153,265500.0,<1H OCEAN +-118.41,33.99,36.0,1089.0,234.0,632.0,215.0,3.6538,276100.0,<1H OCEAN +-118.4,33.99,39.0,1613.0,380.0,1113.0,356.0,2.825,276700.0,<1H OCEAN +-118.41,33.98,33.0,3331.0,777.0,1695.0,735.0,3.9727,307200.0,<1H OCEAN +-118.39,33.97,38.0,993.0,175.0,374.0,180.0,6.2673,357200.0,<1H OCEAN +-118.38,33.97,43.0,2715.0,458.0,1151.0,434.0,7.4897,362600.0,<1H OCEAN +-118.39,33.97,44.0,1097.0,186.0,513.0,185.0,6.235,361400.0,<1H OCEAN +-118.39,33.97,43.0,2700.0,510.0,1146.0,506.0,5.1333,345900.0,<1H OCEAN +-118.39,33.97,46.0,2198.0,352.0,839.0,335.0,6.5778,350800.0,<1H OCEAN +-118.39,33.96,45.0,1361.0,252.0,581.0,263.0,5.8143,340700.0,<1H OCEAN +-118.39,33.96,45.0,1436.0,374.0,662.0,292.0,3.625,329400.0,<1H OCEAN +-118.36,33.98,40.0,1113.0,234.0,584.0,231.0,3.0927,316000.0,<1H OCEAN +-118.37,33.98,39.0,303.0,69.0,131.0,73.0,4.3438,331800.0,<1H OCEAN +-118.37,33.97,32.0,6699.0,1781.0,2725.0,1544.0,3.3889,285700.0,<1H OCEAN +-118.41,33.97,37.0,1629.0,275.0,668.0,266.0,6.1333,387200.0,<1H OCEAN +-118.41,33.97,44.0,2298.0,388.0,849.0,360.0,5.5941,363500.0,<1H OCEAN +-118.4,33.96,44.0,1877.0,314.0,877.0,320.0,6.8197,363600.0,<1H OCEAN +-118.41,33.96,44.0,1802.0,306.0,753.0,282.0,6.0286,356000.0,<1H OCEAN +-118.41,33.97,43.0,1464.0,224.0,581.0,232.0,6.2022,365900.0,<1H OCEAN +-118.41,33.97,44.0,2789.0,503.0,3732.0,474.0,4.6176,352300.0,<1H OCEAN +-118.42,33.97,44.0,1462.0,240.0,562.0,237.0,4.9375,365200.0,<1H OCEAN +-118.42,33.96,44.0,1282.0,216.0,494.0,209.0,5.618,365900.0,<1H OCEAN +-118.43,33.96,38.0,1104.0,216.0,415.0,163.0,6.1985,422000.0,<1H OCEAN +-118.43,33.96,13.0,1860.0,345.0,800.0,355.0,5.8864,500001.0,<1H OCEAN +-118.44,33.96,33.0,2799.0,491.0,978.0,447.0,5.6435,500001.0,<1H OCEAN +-118.43,33.96,20.0,1901.0,270.0,704.0,254.0,8.7819,500001.0,<1H OCEAN +-118.43,33.97,16.0,70.0,7.0,17.0,4.0,7.7197,500001.0,<1H OCEAN +-118.42,33.96,24.0,4393.0,966.0,1257.0,579.0,5.0714,356100.0,<1H OCEAN +-118.43,33.96,16.0,14891.0,3984.0,6270.0,3595.0,5.1064,283200.0,<1H OCEAN +-118.4,33.97,35.0,913.0,161.0,451.0,172.0,5.6169,411200.0,<1H OCEAN +-118.4,33.98,39.0,714.0,118.0,314.0,117.0,5.9856,432100.0,<1H OCEAN +-118.4,33.98,36.0,2526.0,452.0,996.0,441.0,5.611,456600.0,<1H OCEAN +-118.4,33.97,38.0,1089.0,174.0,502.0,180.0,7.5953,434800.0,<1H OCEAN +-118.4,33.97,37.0,1364.0,248.0,494.0,242.0,4.6364,456300.0,<1H OCEAN +-118.4,33.97,44.0,2825.0,453.0,1221.0,461.0,5.9544,377200.0,<1H OCEAN +-118.4,33.96,43.0,2416.0,454.0,1028.0,409.0,5.6732,330700.0,<1H OCEAN +-118.37,33.97,41.0,1833.0,355.0,847.0,348.0,5.726,287800.0,<1H OCEAN +-118.38,33.97,42.0,1859.0,337.0,813.0,326.0,6.019,294500.0,<1H OCEAN +-118.38,33.96,44.0,2395.0,458.0,1287.0,450.0,4.6923,299000.0,<1H OCEAN +-118.38,33.95,35.0,3259.0,967.0,2003.0,920.0,3.2708,400000.0,<1H OCEAN +-118.38,33.95,29.0,1821.0,588.0,1397.0,523.0,2.5833,187500.0,<1H OCEAN +-118.37,33.95,5.0,6955.0,2062.0,3591.0,1566.0,3.111,247600.0,<1H OCEAN +-118.4,33.96,44.0,1138.0,228.0,497.0,228.0,4.1852,303300.0,<1H OCEAN +-118.41,33.96,15.0,412.0,128.0,310.0,137.0,3.9792,266700.0,<1H OCEAN +-118.41,33.96,32.0,1044.0,219.0,567.0,222.0,4.1471,284400.0,<1H OCEAN +-118.41,33.94,45.0,2038.0,394.0,1086.0,387.0,4.7375,289600.0,<1H OCEAN +-118.45,33.96,24.0,3097.0,791.0,1075.0,639.0,5.723,500001.0,<1H OCEAN +-118.45,33.96,36.0,2723.0,547.0,1090.0,519.0,6.3267,500001.0,<1H OCEAN +-118.44,33.95,37.0,2076.0,332.0,771.0,327.0,6.2551,500001.0,<1H OCEAN +-118.28,33.92,37.0,1761.0,409.0,1309.0,357.0,2.1875,175900.0,<1H OCEAN +-118.28,33.91,41.0,620.0,133.0,642.0,162.0,2.6546,159600.0,<1H OCEAN +-118.29,33.9,42.0,1273.0,309.0,1203.0,348.0,4.4636,162000.0,<1H OCEAN +-118.29,33.91,41.0,2475.0,532.0,1416.0,470.0,3.8372,156400.0,<1H OCEAN +-118.29,33.91,31.0,2025.0,618.0,2231.0,593.0,2.4741,151200.0,<1H OCEAN +-118.29,33.92,23.0,2503.0,532.0,1735.0,505.0,2.7368,162800.0,<1H OCEAN +-118.28,33.88,19.0,2758.0,675.0,2047.0,591.0,2.6618,179700.0,<1H OCEAN +-118.29,33.88,32.0,2307.0,493.0,1754.0,528.0,4.317,232800.0,<1H OCEAN +-118.29,33.88,27.0,2082.0,612.0,2009.0,548.0,2.9063,184100.0,<1H OCEAN +-118.29,33.89,35.0,2810.0,614.0,1578.0,601.0,3.59,200600.0,<1H OCEAN +-118.29,33.87,32.0,1700.0,340.0,864.0,317.0,4.381,238700.0,<1H OCEAN +-118.3,33.86,35.0,2016.0,365.0,1083.0,369.0,5.1727,230200.0,<1H OCEAN +-118.3,33.86,35.0,1511.0,274.0,853.0,308.0,4.9792,251300.0,<1H OCEAN +-118.29,33.85,10.0,1391.0,420.0,1378.0,377.0,1.9049,222200.0,<1H OCEAN +-118.31,33.84,5.0,3559.0,869.0,2965.0,794.0,2.6491,216700.0,<1H OCEAN +-118.3,33.84,36.0,1428.0,268.0,825.0,250.0,4.7222,239600.0,<1H OCEAN +-118.3,33.84,37.0,1241.0,226.0,621.0,255.0,4.9196,232400.0,<1H OCEAN +-118.3,33.85,38.0,123.0,36.0,142.0,40.0,2.3942,200000.0,<1H OCEAN +-118.3,33.83,31.0,2693.0,661.0,1598.0,618.0,3.1851,240200.0,<1H OCEAN +-118.3,33.83,33.0,2716.0,660.0,1807.0,661.0,3.5473,226300.0,<1H OCEAN +-118.31,33.83,27.0,2880.0,802.0,2083.0,727.0,2.9619,223400.0,<1H OCEAN +-118.3,33.82,35.0,1499.0,340.0,1141.0,326.0,2.6136,213600.0,<1H OCEAN +-118.3,33.82,26.0,2080.0,560.0,2096.0,506.0,2.8106,184400.0,<1H OCEAN +-118.3,33.82,25.0,2659.0,765.0,2629.0,726.0,2.6368,175900.0,<1H OCEAN +-118.3,33.81,17.0,5544.0,1068.0,3008.0,1038.0,5.322,282700.0,<1H OCEAN +-118.3,33.8,27.0,2790.0,513.0,1498.0,519.0,5.3106,268300.0,<1H OCEAN +-118.31,33.8,30.0,3096.0,757.0,2048.0,704.0,3.125,233300.0,<1H OCEAN +-118.3,33.79,35.0,2793.0,686.0,2255.0,682.0,3.0057,235300.0,<1H OCEAN +-118.3,33.79,9.0,2782.0,884.0,1790.0,748.0,2.9154,203300.0,<1H OCEAN +-118.3,33.79,13.0,3569.0,924.0,2159.0,880.0,3.163,224200.0,<1H OCEAN +-118.3,33.78,35.0,2572.0,504.0,1172.0,519.0,4.6207,304100.0,<1H OCEAN +-118.26,33.8,41.0,2004.0,481.0,1658.0,456.0,3.1779,171100.0,<1H OCEAN +-118.25,33.8,36.0,1697.0,394.0,1274.0,396.0,3.35,163100.0,<1H OCEAN +-118.26,33.79,30.0,1291.0,230.0,835.0,215.0,5.5,181500.0,<1H OCEAN +-118.25,33.79,32.0,1205.0,340.0,1799.0,370.0,2.375,128000.0,NEAR OCEAN +-118.24,33.8,28.0,636.0,169.0,788.0,143.0,3.6161,131300.0,NEAR OCEAN +-118.23,33.8,26.0,239.0,135.0,165.0,112.0,1.3333,187500.0,NEAR OCEAN +-118.27,33.8,38.0,1446.0,327.0,980.0,319.0,3.35,177700.0,<1H OCEAN +-118.27,33.79,36.0,2218.0,561.0,1789.0,527.0,3.1613,182300.0,<1H OCEAN +-118.27,33.79,39.0,1513.0,365.0,1227.0,354.0,3.3929,184600.0,<1H OCEAN +-118.28,33.8,38.0,1471.0,329.0,1207.0,335.0,4.0,165500.0,<1H OCEAN +-118.28,33.79,28.0,1895.0,420.0,1422.0,389.0,4.3816,191300.0,<1H OCEAN +-118.28,33.79,36.0,1989.0,458.0,1668.0,455.0,3.3009,168000.0,<1H OCEAN +-118.28,33.78,20.0,2233.0,591.0,1915.0,558.0,3.2011,169100.0,<1H OCEAN +-118.29,33.79,10.0,3708.0,1016.0,2855.0,948.0,2.0,165400.0,<1H OCEAN +-118.29,33.79,16.0,1867.0,571.0,951.0,498.0,3.3427,154200.0,<1H OCEAN +-118.3,33.79,21.0,1068.0,283.0,1180.0,274.0,2.5,157500.0,<1H OCEAN +-118.3,33.8,8.0,1115.0,412.0,1472.0,396.0,3.1392,146200.0,<1H OCEAN +-118.27,33.79,31.0,1535.0,369.0,1291.0,340.0,2.9375,174000.0,<1H OCEAN +-118.26,33.78,27.0,1672.0,491.0,1723.0,462.0,2.0458,174500.0,NEAR OCEAN +-118.27,33.79,26.0,2109.0,651.0,2120.0,605.0,2.1447,158700.0,<1H OCEAN +-118.27,33.79,39.0,1417.0,359.0,1450.0,367.0,2.8462,172000.0,<1H OCEAN +-118.25,33.79,34.0,1349.0,371.0,1716.0,380.0,2.7143,138100.0,NEAR OCEAN +-118.25,33.79,38.0,1730.0,460.0,1724.0,424.0,2.7308,150400.0,NEAR OCEAN +-118.25,33.79,39.0,981.0,286.0,1183.0,298.0,1.9208,139800.0,NEAR OCEAN +-118.26,33.78,21.0,2188.0,706.0,2265.0,652.0,1.9923,164700.0,NEAR OCEAN +-118.26,33.79,42.0,1162.0,264.0,1044.0,241.0,3.5488,205600.0,<1H OCEAN +-118.23,33.78,20.0,59.0,24.0,69.0,23.0,2.5588,350000.0,NEAR OCEAN +-118.26,33.78,35.0,1239.0,473.0,1524.0,387.0,2.0956,154700.0,NEAR OCEAN +-118.25,33.78,32.0,296.0,139.0,511.0,133.0,1.4444,182100.0,NEAR OCEAN +-118.24,33.78,24.0,574.0,173.0,784.0,162.0,2.25,152300.0,NEAR OCEAN +-118.26,33.78,36.0,2191.0,739.0,2931.0,692.0,2.1311,163100.0,NEAR OCEAN +-118.26,33.77,36.0,886.0,253.0,809.0,219.0,2.4545,164200.0,NEAR OCEAN +-118.27,33.77,26.0,2272.0,694.0,2567.0,595.0,1.9964,150600.0,NEAR OCEAN +-118.27,33.78,21.0,3354.0,1174.0,4426.0,1110.0,2.5262,167300.0,<1H OCEAN +-118.28,33.78,37.0,1212.0,304.0,1076.0,293.0,3.2115,160100.0,<1H OCEAN +-118.27,33.77,39.0,1731.0,485.0,2115.0,478.0,1.5369,141300.0,NEAR OCEAN +-118.27,33.76,46.0,22.0,11.0,32.0,7.0,3.125,112500.0,NEAR OCEAN +-118.3,33.77,18.0,3821.0,795.0,2831.0,769.0,2.9571,346200.0,<1H OCEAN +-118.3,33.76,18.0,9659.0,1716.0,4336.0,1674.0,5.7764,290500.0,<1H OCEAN +-118.28,33.77,47.0,307.0,69.0,374.0,65.0,2.9063,146900.0,<1H OCEAN +-118.28,33.75,41.0,1305.0,381.0,1384.0,369.0,2.45,186800.0,NEAR OCEAN +-118.28,33.75,18.0,393.0,189.0,429.0,188.0,1.8393,187500.0,NEAR OCEAN +-118.28,33.74,40.0,1751.0,512.0,1939.0,503.0,1.5394,200000.0,NEAR OCEAN +-118.28,33.75,21.0,2442.0,719.0,1916.0,646.0,1.2276,208300.0,NEAR OCEAN +-118.28,33.74,16.0,855.0,271.0,486.0,250.0,0.7591,350000.0,NEAR OCEAN +-118.3,33.75,19.0,2356.0,440.0,1291.0,418.0,4.2308,416100.0,<1H OCEAN +-118.3,33.76,6.0,6097.0,1270.0,2678.0,1226.0,5.1269,285200.0,<1H OCEAN +-118.3,33.75,42.0,967.0,175.0,481.0,163.0,5.6611,265600.0,<1H OCEAN +-118.3,33.75,48.0,1958.0,386.0,1098.0,380.0,4.625,273400.0,<1H OCEAN +-118.3,33.74,47.0,2223.0,410.0,1163.0,413.0,4.4671,270800.0,NEAR OCEAN +-118.31,33.74,36.0,2464.0,472.0,1111.0,457.0,4.5074,350000.0,NEAR OCEAN +-118.31,33.74,22.0,5042.0,974.0,2260.0,935.0,4.3472,351200.0,NEAR OCEAN +-118.29,33.75,27.0,1650.0,443.0,1359.0,386.0,2.5795,192400.0,NEAR OCEAN +-118.3,33.75,23.0,1957.0,517.0,1454.0,526.0,3.5056,203100.0,<1H OCEAN +-118.29,33.75,37.0,1319.0,292.0,766.0,285.0,2.7031,218900.0,NEAR OCEAN +-118.29,33.74,29.0,1503.0,411.0,1368.0,390.0,2.1473,195300.0,NEAR OCEAN +-118.29,33.74,52.0,1438.0,472.0,1018.0,399.0,2.2188,306700.0,NEAR OCEAN +-118.29,33.74,41.0,1382.0,361.0,905.0,344.0,2.75,238300.0,NEAR OCEAN +-118.29,33.74,30.0,2074.0,533.0,1311.0,531.0,2.0329,225800.0,NEAR OCEAN +-118.29,33.73,43.0,1854.0,519.0,1151.0,486.0,2.5759,225000.0,NEAR OCEAN +-118.29,33.73,21.0,2492.0,711.0,1699.0,672.0,2.1382,242300.0,NEAR OCEAN +-118.29,33.73,30.0,2835.0,711.0,1669.0,652.0,3.3616,268500.0,NEAR OCEAN +-118.3,33.73,42.0,1731.0,,866.0,403.0,2.7451,255400.0,NEAR OCEAN +-118.3,33.74,23.0,3075.0,860.0,1584.0,806.0,2.9386,260500.0,NEAR OCEAN +-118.31,33.73,36.0,1725.0,295.0,799.0,306.0,5.0874,368500.0,NEAR OCEAN +-118.31,33.73,52.0,1665.0,280.0,656.0,282.0,5.249,351900.0,NEAR OCEAN +-118.3,33.74,20.0,2625.0,673.0,1184.0,606.0,3.9167,285200.0,NEAR OCEAN +-118.3,33.73,47.0,2852.0,603.0,1130.0,560.0,4.194,293900.0,NEAR OCEAN +-118.31,33.73,52.0,2025.0,361.0,957.0,363.0,4.2059,350000.0,NEAR OCEAN +-118.28,33.74,44.0,1853.0,556.0,2090.0,539.0,1.8584,248100.0,NEAR OCEAN +-118.28,33.73,39.0,2602.0,802.0,2178.0,737.0,2.0469,234500.0,NEAR OCEAN +-118.28,33.73,52.0,2085.0,588.0,1767.0,516.0,2.1935,243200.0,NEAR OCEAN +-118.28,33.73,45.0,2137.0,559.0,1550.0,529.0,1.9167,227200.0,NEAR OCEAN +-118.29,33.73,30.0,3161.0,,1865.0,771.0,2.7139,231700.0,NEAR OCEAN +-118.29,33.72,25.0,2469.0,584.0,1253.0,535.0,3.1932,257500.0,NEAR OCEAN +-118.3,33.72,28.0,2647.0,658.0,1459.0,595.0,3.4474,253400.0,NEAR OCEAN +-118.3,33.72,28.0,2510.0,583.0,1388.0,554.0,3.3397,267800.0,NEAR OCEAN +-118.3,33.73,40.0,2582.0,606.0,1304.0,588.0,3.5694,276400.0,NEAR OCEAN +-118.31,33.73,52.0,1642.0,287.0,692.0,288.0,4.1812,321500.0,NEAR OCEAN +-118.31,33.72,26.0,2711.0,508.0,1372.0,459.0,4.1451,326700.0,NEAR OCEAN +-118.33,33.69,41.0,2168.0,357.0,1171.0,374.0,4.7216,311900.0,NEAR OCEAN +-118.31,33.73,33.0,2265.0,366.0,986.0,388.0,5.4533,409800.0,NEAR OCEAN +-118.32,33.73,25.0,1099.0,168.0,407.0,159.0,7.6886,500001.0,NEAR OCEAN +-118.33,33.72,25.0,6191.0,1081.0,2297.0,1023.0,6.4246,446700.0,NEAR OCEAN +-118.29,33.71,36.0,3135.0,746.0,1815.0,697.0,3.7596,300000.0,NEAR OCEAN +-118.31,33.67,42.0,1297.0,246.0,611.0,242.0,5.3074,401900.0,NEAR OCEAN +-118.3,33.72,35.0,2790.0,,1167.0,441.0,6.2028,361500.0,NEAR OCEAN +-118.29,33.71,40.0,1644.0,471.0,780.0,416.0,3.1071,464300.0,NEAR OCEAN +-118.29,33.71,40.0,1933.0,475.0,902.0,412.0,4.25,332800.0,NEAR OCEAN +-118.29,33.71,31.0,2809.0,666.0,1316.0,633.0,4.5606,303800.0,NEAR OCEAN +-118.29,33.72,39.0,2651.0,590.0,1103.0,508.0,3.274,254300.0,NEAR OCEAN +-118.29,33.72,21.0,1568.0,452.0,801.0,422.0,3.5109,225000.0,NEAR OCEAN +-118.28,33.68,8.0,2842.0,522.0,1624.0,510.0,3.7282,287500.0,NEAR OCEAN +-118.23,34.24,31.0,3857.0,607.0,1695.0,572.0,7.642,396400.0,<1H OCEAN +-118.23,34.23,34.0,2377.0,362.0,1055.0,362.0,6.0,367100.0,<1H OCEAN +-118.24,34.24,31.0,3019.0,469.0,1349.0,462.0,7.1463,394100.0,<1H OCEAN +-118.24,34.24,31.0,3812.0,595.0,1645.0,591.0,7.585,380100.0,<1H OCEAN +-118.23,34.22,36.0,2288.0,439.0,1079.0,434.0,4.5486,361000.0,<1H OCEAN +-118.24,34.23,41.0,1912.0,308.0,896.0,314.0,5.3473,352700.0,<1H OCEAN +-118.24,34.23,43.0,1061.0,208.0,514.0,208.0,6.01,254200.0,<1H OCEAN +-118.24,34.23,42.0,1541.0,280.0,753.0,264.0,5.1028,292100.0,<1H OCEAN +-118.25,34.23,35.0,2839.0,592.0,1413.0,538.0,4.1667,271200.0,<1H OCEAN +-118.25,34.25,34.0,3150.0,518.0,1392.0,480.0,4.9355,336900.0,<1H OCEAN +-118.25,34.23,34.0,2421.0,475.0,1232.0,454.0,4.6852,296200.0,<1H OCEAN +-118.26,34.24,35.0,1535.0,283.0,816.0,287.0,6.1873,312100.0,<1H OCEAN +-118.26,34.24,35.0,1666.0,280.0,788.0,273.0,6.6277,344400.0,<1H OCEAN +-118.26,34.24,35.0,2485.0,418.0,1226.0,406.0,5.7083,329500.0,<1H OCEAN +-118.26,34.24,42.0,890.0,179.0,555.0,200.0,4.4821,271900.0,<1H OCEAN +-118.25,34.23,41.0,1979.0,496.0,1157.0,459.0,4.4083,217700.0,<1H OCEAN +-118.25,34.22,30.0,2062.0,396.0,1089.0,375.0,5.5362,301200.0,<1H OCEAN +-118.25,34.23,37.0,1954.0,368.0,967.0,370.0,5.0862,261300.0,<1H OCEAN +-118.26,34.23,43.0,1428.0,325.0,836.0,302.0,4.5759,209200.0,<1H OCEAN +-118.26,34.23,38.0,1107.0,194.0,518.0,195.0,7.5582,263700.0,<1H OCEAN +-118.26,34.23,33.0,1805.0,303.0,838.0,301.0,5.4306,326600.0,<1H OCEAN +-118.22,34.21,29.0,2174.0,418.0,1030.0,395.0,3.5707,341700.0,<1H OCEAN +-118.23,34.21,36.0,2988.0,719.0,1357.0,657.0,3.5174,268000.0,<1H OCEAN +-118.23,34.21,29.0,2584.0,608.0,1217.0,568.0,3.3287,273400.0,<1H OCEAN +-118.23,34.21,32.0,1464.0,406.0,693.0,380.0,2.5463,200000.0,<1H OCEAN +-118.23,34.21,38.0,1399.0,390.0,859.0,386.0,3.4148,234800.0,<1H OCEAN +-118.24,34.22,41.0,2476.0,506.0,1271.0,485.0,3.4531,263900.0,<1H OCEAN +-118.24,34.22,34.0,1722.0,406.0,926.0,371.0,4.1523,252000.0,<1H OCEAN +-118.25,34.22,34.0,2510.0,535.0,1516.0,542.0,3.8068,267000.0,<1H OCEAN +-118.23,34.21,50.0,309.0,47.0,121.0,45.0,6.213,285000.0,<1H OCEAN +-118.23,34.2,51.0,1477.0,280.0,750.0,295.0,5.3925,317900.0,<1H OCEAN +-118.23,34.2,48.0,1473.0,294.0,807.0,296.0,3.399,306300.0,<1H OCEAN +-118.24,34.2,41.0,2067.0,452.0,1282.0,455.0,5.5756,309900.0,<1H OCEAN +-118.24,34.21,32.0,3817.0,886.0,1888.0,829.0,3.5777,245600.0,<1H OCEAN +-118.24,34.22,36.0,2507.0,517.0,1232.0,470.0,5.529,241300.0,<1H OCEAN +-118.27,34.22,34.0,8206.0,1186.0,3141.0,1150.0,7.2812,462200.0,<1H OCEAN +-118.23,34.18,47.0,1853.0,345.0,757.0,310.0,3.6875,422000.0,<1H OCEAN +-118.23,34.18,43.0,1708.0,280.0,768.0,276.0,6.207,457400.0,<1H OCEAN +-118.23,34.18,45.0,2332.0,,943.0,339.0,8.1132,446600.0,<1H OCEAN +-118.26,34.18,32.0,14556.0,2077.0,5459.0,2017.0,8.1657,500001.0,<1H OCEAN +-118.22,34.19,36.0,959.0,204.0,446.0,210.0,3.215,331300.0,<1H OCEAN +-118.22,34.19,31.0,4704.0,920.0,1895.0,886.0,4.9297,400000.0,<1H OCEAN +-118.22,34.19,36.0,2443.0,492.0,1115.0,493.0,3.9777,409800.0,<1H OCEAN +-118.21,34.18,14.0,2672.0,335.0,1113.0,318.0,12.1579,500001.0,<1H OCEAN +-118.23,34.17,37.0,4524.0,1005.0,2099.0,937.0,3.5781,366700.0,<1H OCEAN +-118.21,34.17,24.0,8590.0,1231.0,3401.0,1178.0,8.1325,472700.0,<1H OCEAN +-118.21,34.16,25.0,434.0,74.0,199.0,75.0,5.9199,420500.0,<1H OCEAN +-118.19,34.16,49.0,1788.0,267.0,735.0,266.0,6.6009,375700.0,<1H OCEAN +-118.2,34.16,31.0,5550.0,881.0,2465.0,862.0,6.8317,446100.0,<1H OCEAN +-118.23,34.16,31.0,3105.0,582.0,1359.0,547.0,5.1718,429100.0,<1H OCEAN +-118.23,34.15,26.0,1649.0,522.0,1332.0,483.0,3.1004,257100.0,<1H OCEAN +-118.23,34.15,40.0,2124.0,370.0,998.0,372.0,5.3369,370400.0,<1H OCEAN +-118.24,34.16,40.0,2549.0,591.0,1156.0,546.0,3.3333,374300.0,<1H OCEAN +-118.24,34.16,52.0,2187.0,284.0,733.0,274.0,9.5823,406200.0,<1H OCEAN +-118.24,34.16,52.0,1904.0,297.0,797.0,286.0,6.6603,380400.0,<1H OCEAN +-118.25,34.16,52.0,2477.0,385.0,993.0,371.0,4.9135,368100.0,<1H OCEAN +-118.25,34.17,52.0,1532.0,292.0,631.0,275.0,5.1242,372900.0,<1H OCEAN +-118.25,34.16,24.0,5131.0,1436.0,2690.0,1371.0,2.5668,280000.0,<1H OCEAN +-118.26,34.17,20.0,5949.0,1417.0,2593.0,1337.0,3.8576,318600.0,<1H OCEAN +-118.26,34.16,17.0,2943.0,769.0,1312.0,656.0,3.1484,187500.0,<1H OCEAN +-118.26,34.16,19.0,2919.0,857.0,1866.0,811.0,3.1733,206300.0,<1H OCEAN +-118.26,34.16,20.0,3407.0,885.0,1883.0,870.0,3.7321,351100.0,<1H OCEAN +-118.27,34.17,48.0,1560.0,280.0,825.0,269.0,5.5118,354700.0,<1H OCEAN +-118.27,34.16,15.0,5036.0,1299.0,3164.0,1175.0,2.9148,238700.0,<1H OCEAN +-118.27,34.16,45.0,1865.0,360.0,973.0,349.0,3.6587,321200.0,<1H OCEAN +-118.28,34.17,52.0,2332.0,433.0,1135.0,440.0,5.5658,331200.0,<1H OCEAN +-118.27,34.17,52.0,2010.0,,908.0,326.0,6.9135,374000.0,<1H OCEAN +-118.27,34.17,52.0,2287.0,295.0,829.0,296.0,7.8383,500001.0,<1H OCEAN +-118.27,34.18,52.0,3034.0,406.0,1158.0,399.0,6.2976,498400.0,<1H OCEAN +-118.28,34.18,47.0,2243.0,339.0,911.0,319.0,7.4046,446800.0,<1H OCEAN +-118.28,34.18,52.0,2602.0,418.0,1137.0,419.0,5.3185,358000.0,<1H OCEAN +-118.29,34.18,52.0,1602.0,265.0,667.0,251.0,5.049,323500.0,<1H OCEAN +-118.28,34.18,50.0,2195.0,336.0,878.0,309.0,6.884,365600.0,<1H OCEAN +-118.28,34.17,22.0,2664.0,651.0,1553.0,629.0,3.6354,256300.0,<1H OCEAN +-118.29,34.17,17.0,3852.0,1066.0,2986.0,993.0,2.3482,255400.0,<1H OCEAN +-118.29,34.17,52.0,1732.0,305.0,875.0,311.0,4.325,292600.0,<1H OCEAN +-118.29,34.18,10.0,4292.0,1075.0,2719.0,987.0,3.6974,286600.0,<1H OCEAN +-118.29,34.16,31.0,1262.0,338.0,1019.0,332.0,3.7083,241900.0,<1H OCEAN +-118.29,34.16,42.0,413.0,107.0,349.0,107.0,4.3438,189800.0,<1H OCEAN +-118.29,34.17,12.0,2238.0,682.0,1882.0,611.0,2.9,208300.0,<1H OCEAN +-118.3,34.17,17.0,4041.0,1169.0,3309.0,1117.0,2.6016,222400.0,<1H OCEAN +-118.3,34.17,30.0,48.0,14.0,74.0,16.0,5.0056,162500.0,<1H OCEAN +-118.29,34.16,35.0,1257.0,318.0,764.0,319.0,3.2083,238000.0,<1H OCEAN +-118.3,34.16,40.0,1875.0,460.0,869.0,438.0,3.2321,243600.0,<1H OCEAN +-118.3,34.16,35.0,3213.0,874.0,2401.0,819.0,2.8342,256800.0,<1H OCEAN +-118.27,34.16,47.0,1453.0,356.0,787.0,345.0,3.0114,255500.0,<1H OCEAN +-118.27,34.15,22.0,2265.0,637.0,1684.0,561.0,2.6729,217100.0,<1H OCEAN +-118.27,34.15,25.0,3018.0,806.0,2205.0,742.0,3.0199,220200.0,<1H OCEAN +-118.27,34.15,14.0,1744.0,536.0,1494.0,531.0,3.2171,230800.0,<1H OCEAN +-118.27,34.16,52.0,830.0,183.0,479.0,179.0,3.1397,253700.0,<1H OCEAN +-118.27,34.16,48.0,1301.0,253.0,637.0,260.0,4.3438,252700.0,<1H OCEAN +-118.28,34.16,49.0,1393.0,290.0,605.0,282.0,2.9491,257400.0,<1H OCEAN +-118.26,34.16,18.0,1775.0,525.0,950.0,522.0,3.5417,177100.0,<1H OCEAN +-118.26,34.15,14.0,2981.0,894.0,1941.0,863.0,3.0,178600.0,<1H OCEAN +-118.26,34.15,6.0,3340.0,945.0,2315.0,846.0,2.8884,252300.0,<1H OCEAN +-118.26,34.15,18.0,2481.0,756.0,1763.0,675.0,2.8088,247500.0,<1H OCEAN +-118.24,34.16,52.0,850.0,162.0,493.0,160.0,6.9408,298800.0,<1H OCEAN +-118.24,34.15,20.0,2734.0,658.0,1562.0,607.0,3.3906,284100.0,<1H OCEAN +-118.24,34.15,45.0,1235.0,271.0,499.0,263.0,3.1435,282600.0,<1H OCEAN +-118.25,34.15,15.0,3712.0,1005.0,1888.0,890.0,3.6875,209600.0,<1H OCEAN +-118.25,34.16,14.0,3700.0,945.0,1681.0,905.0,3.9054,200000.0,<1H OCEAN +-118.24,34.15,17.0,5282.0,1605.0,4116.0,1574.0,3.052,209800.0,<1H OCEAN +-118.24,34.15,19.0,4852.0,1465.0,3171.0,1332.0,2.5924,192900.0,<1H OCEAN +-118.25,34.15,31.0,1238.0,338.0,605.0,331.0,2.8478,228100.0,<1H OCEAN +-118.25,34.15,32.0,1377.0,444.0,768.0,422.0,2.2621,187500.0,<1H OCEAN +-118.25,34.15,20.0,3960.0,1027.0,1729.0,978.0,3.0441,193800.0,<1H OCEAN +-118.23,34.14,33.0,2865.0,864.0,2061.0,790.0,2.6268,201300.0,<1H OCEAN +-118.24,34.14,20.0,3196.0,994.0,2929.0,983.0,3.0206,219500.0,<1H OCEAN +-118.24,34.14,27.0,2909.0,1021.0,2614.0,935.0,2.1444,229000.0,<1H OCEAN +-118.23,34.15,19.0,2294.0,716.0,1686.0,680.0,3.0288,258300.0,<1H OCEAN +-118.23,34.14,25.0,2864.0,844.0,1745.0,803.0,2.9167,224300.0,<1H OCEAN +-118.24,34.14,28.0,1843.0,554.0,1402.0,512.0,2.462,254000.0,<1H OCEAN +-118.24,34.14,36.0,1813.0,560.0,1501.0,544.0,1.9125,238000.0,<1H OCEAN +-118.24,34.13,37.0,1644.0,395.0,959.0,383.0,3.3636,257700.0,<1H OCEAN +-118.24,34.13,45.0,2170.0,401.0,1043.0,394.0,5.6921,269000.0,<1H OCEAN +-118.24,34.15,7.0,2063.0,670.0,1892.0,643.0,1.7301,202300.0,<1H OCEAN +-118.24,34.14,9.0,4877.0,1488.0,4486.0,1458.0,2.4421,222100.0,<1H OCEAN +-118.25,34.14,30.0,1615.0,570.0,1245.0,544.0,1.8929,196900.0,<1H OCEAN +-118.25,34.14,37.0,584.0,260.0,552.0,235.0,1.8235,275000.0,<1H OCEAN +-118.25,34.15,13.0,1107.0,479.0,616.0,443.0,0.8185,187500.0,<1H OCEAN +-118.26,34.14,51.0,902.0,320.0,650.0,334.0,1.5417,268800.0,<1H OCEAN +-118.26,34.14,29.0,3431.0,1222.0,4094.0,1205.0,2.2614,248100.0,<1H OCEAN +-118.27,34.14,10.0,1060.0,332.0,1025.0,288.0,3.0074,175000.0,<1H OCEAN +-118.26,34.14,6.0,1727.0,506.0,1200.0,439.0,4.1083,210700.0,<1H OCEAN +-118.27,34.15,7.0,2837.0,776.0,2287.0,736.0,3.008,229000.0,<1H OCEAN +-118.26,34.13,25.0,3208.0,1111.0,2843.0,1005.0,2.6673,218100.0,<1H OCEAN +-118.26,34.13,37.0,1383.0,470.0,1185.0,451.0,2.5,207100.0,<1H OCEAN +-118.26,34.13,37.0,196.0,74.0,194.0,68.0,1.2188,218800.0,<1H OCEAN +-118.26,34.14,23.0,1336.0,396.0,1255.0,359.0,2.5388,205000.0,<1H OCEAN +-118.25,34.14,13.0,3487.0,1131.0,3749.0,1072.0,2.1602,221900.0,<1H OCEAN +-118.25,34.14,25.0,5980.0,1856.0,5217.0,1772.0,2.506,184500.0,<1H OCEAN +-118.25,34.13,22.0,2340.0,773.0,2226.0,754.0,2.5417,217500.0,<1H OCEAN +-118.24,34.13,45.0,1971.0,439.0,1245.0,430.0,4.0272,260500.0,<1H OCEAN +-118.25,34.13,52.0,322.0,88.0,229.0,89.0,2.125,243800.0,<1H OCEAN +-118.25,34.13,36.0,2946.0,1025.0,2542.0,912.0,2.2244,255900.0,<1H OCEAN +-118.25,34.12,21.0,739.0,265.0,861.0,246.0,2.4856,181300.0,<1H OCEAN +-118.31,34.22,27.0,7714.0,1132.0,3199.0,1100.0,7.1262,446200.0,<1H OCEAN +-118.33,34.21,31.0,3190.0,489.0,1362.0,480.0,6.981,402900.0,<1H OCEAN +-118.34,34.21,36.0,1834.0,316.0,864.0,309.0,4.7885,302200.0,<1H OCEAN +-118.29,34.18,36.0,3120.0,620.0,1441.0,612.0,3.9041,320400.0,<1H OCEAN +-118.3,34.19,14.0,3615.0,913.0,1924.0,852.0,3.5083,280900.0,<1H OCEAN +-118.3,34.19,52.0,1704.0,277.0,746.0,262.0,4.7986,326100.0,<1H OCEAN +-118.3,34.19,51.0,1502.0,243.0,586.0,231.0,4.375,332400.0,<1H OCEAN +-118.31,34.19,27.0,4713.0,1169.0,2372.0,1077.0,3.7015,287900.0,<1H OCEAN +-118.3,34.19,52.0,2962.0,468.0,1364.0,466.0,4.9042,343500.0,<1H OCEAN +-118.31,34.2,36.0,1692.0,263.0,778.0,278.0,5.0865,349600.0,<1H OCEAN +-118.32,34.2,36.0,2110.0,346.0,984.0,342.0,6.9909,345300.0,<1H OCEAN +-118.32,34.2,36.0,759.0,136.0,372.0,135.0,4.9886,328900.0,<1H OCEAN +-118.32,34.2,36.0,1978.0,337.0,834.0,311.0,3.9866,294400.0,<1H OCEAN +-118.33,34.2,43.0,1325.0,254.0,613.0,248.0,3.6071,289000.0,<1H OCEAN +-118.33,34.2,43.0,2322.0,418.0,1106.0,433.0,4.3631,284600.0,<1H OCEAN +-118.34,34.2,41.0,2860.0,682.0,1516.0,621.0,3.0431,262900.0,<1H OCEAN +-118.34,34.19,41.0,1524.0,393.0,1176.0,375.0,2.875,192400.0,<1H OCEAN +-118.36,34.2,14.0,1878.0,614.0,1874.0,559.0,2.5267,231800.0,<1H OCEAN +-118.32,34.2,29.0,2209.0,444.0,952.0,403.0,4.375,341200.0,<1H OCEAN +-118.32,34.19,37.0,1335.0,249.0,485.0,240.0,4.1731,352100.0,<1H OCEAN +-118.32,34.19,37.0,1519.0,331.0,613.0,315.0,3.0179,272500.0,<1H OCEAN +-118.31,34.19,42.0,724.0,149.0,420.0,150.0,3.0625,361700.0,<1H OCEAN +-118.32,34.19,37.0,589.0,119.0,375.0,122.0,3.3897,222700.0,<1H OCEAN +-118.33,34.2,23.0,7179.0,1985.0,4757.0,1924.0,3.1051,206500.0,<1H OCEAN +-118.3,34.18,13.0,7174.0,1997.0,4293.0,1872.0,3.0973,251900.0,<1H OCEAN +-118.3,34.17,37.0,350.0,115.0,342.0,111.0,3.0687,200000.0,<1H OCEAN +-118.3,34.18,5.0,5492.0,1549.0,2997.0,1405.0,3.3205,172100.0,<1H OCEAN +-118.31,34.18,11.0,3112.0,890.0,1700.0,851.0,3.1587,181300.0,<1H OCEAN +-118.31,34.19,13.0,3801.0,1116.0,1986.0,1078.0,2.0875,222700.0,<1H OCEAN +-118.32,34.18,49.0,192.0,41.0,83.0,38.0,3.0179,118800.0,<1H OCEAN +-118.32,34.18,44.0,1594.0,389.0,832.0,340.0,3.4,212100.0,<1H OCEAN +-118.32,34.17,39.0,1995.0,564.0,1202.0,544.0,3.5875,250000.0,<1H OCEAN +-118.32,34.17,47.0,2589.0,465.0,1284.0,485.0,5.1008,247100.0,<1H OCEAN +-118.33,34.17,48.0,2584.0,483.0,1118.0,459.0,4.2396,245100.0,<1H OCEAN +-118.33,34.19,46.0,2115.0,463.0,1133.0,439.0,3.7344,222000.0,<1H OCEAN +-118.33,34.18,45.0,2570.0,517.0,1256.0,510.0,4.6898,226000.0,<1H OCEAN +-118.33,34.19,45.0,1505.0,347.0,799.0,319.0,3.138,217000.0,<1H OCEAN +-118.34,34.19,48.0,814.0,165.0,490.0,176.0,3.1406,223100.0,<1H OCEAN +-118.33,34.18,45.0,1552.0,315.0,785.0,316.0,3.7411,235500.0,<1H OCEAN +-118.33,34.18,49.0,1969.0,377.0,977.0,367.0,3.8462,231300.0,<1H OCEAN +-118.33,34.18,48.0,2122.0,385.0,926.0,362.0,5.6975,231400.0,<1H OCEAN +-118.34,34.19,43.0,1029.0,252.0,613.0,255.0,2.6827,219900.0,<1H OCEAN +-118.34,34.19,47.0,1721.0,343.0,834.0,334.0,4.1923,231200.0,<1H OCEAN +-118.34,34.18,45.0,3046.0,633.0,1448.0,599.0,3.24,226900.0,<1H OCEAN +-118.34,34.18,46.0,1393.0,301.0,714.0,295.0,2.8125,229900.0,<1H OCEAN +-118.35,34.19,45.0,903.0,190.0,557.0,204.0,4.0313,209100.0,<1H OCEAN +-118.36,34.19,46.0,1676.0,322.0,846.0,295.0,5.1814,209500.0,<1H OCEAN +-118.35,34.18,46.0,2711.0,491.0,1277.0,490.0,4.282,224700.0,<1H OCEAN +-118.35,34.18,46.0,1840.0,379.0,866.0,360.0,3.3056,230400.0,<1H OCEAN +-118.35,34.17,44.0,2572.0,613.0,1280.0,570.0,3.5583,232000.0,<1H OCEAN +-118.35,34.17,47.0,858.0,170.0,365.0,171.0,2.0385,225000.0,<1H OCEAN +-118.35,34.17,42.0,1604.0,326.0,814.0,329.0,4.4408,216000.0,<1H OCEAN +-118.36,34.17,46.0,1268.0,240.0,661.0,239.0,4.0742,229100.0,<1H OCEAN +-118.34,34.18,45.0,1328.0,290.0,720.0,289.0,3.875,226900.0,<1H OCEAN +-118.34,34.18,45.0,3566.0,701.0,1601.0,653.0,3.8668,232000.0,<1H OCEAN +-118.34,34.17,49.0,3033.0,580.0,1284.0,561.0,4.1161,232500.0,<1H OCEAN +-118.35,34.16,42.0,2267.0,478.0,1083.0,458.0,3.2015,250000.0,<1H OCEAN +-118.35,34.16,45.0,1390.0,281.0,538.0,270.0,4.2212,293800.0,<1H OCEAN +-118.35,34.16,49.0,1305.0,228.0,584.0,255.0,5.636,267900.0,<1H OCEAN +-118.33,34.17,44.0,1934.0,375.0,750.0,365.0,2.473,251800.0,<1H OCEAN +-118.33,34.16,37.0,2381.0,575.0,1235.0,499.0,3.7941,247800.0,<1H OCEAN +-118.34,34.17,46.0,1718.0,344.0,756.0,343.0,3.2125,247000.0,<1H OCEAN +-118.34,34.17,52.0,1133.0,212.0,545.0,222.0,4.875,249500.0,<1H OCEAN +-118.34,34.16,44.0,1717.0,391.0,848.0,353.0,3.6111,254500.0,<1H OCEAN +-118.34,34.16,46.0,1396.0,294.0,608.0,246.0,3.692,244500.0,<1H OCEAN +-118.33,34.16,44.0,2705.0,649.0,1676.0,654.0,3.4286,247900.0,<1H OCEAN +-118.33,34.15,39.0,493.0,168.0,259.0,138.0,2.3667,17500.0,<1H OCEAN +-118.33,34.15,44.0,1321.0,303.0,471.0,301.0,4.2679,331800.0,<1H OCEAN +-118.34,34.15,40.0,3068.0,756.0,1190.0,695.0,3.5637,497400.0,<1H OCEAN +-118.34,34.15,16.0,1586.0,377.0,625.0,344.0,4.0893,450000.0,<1H OCEAN +-118.34,34.16,25.0,6082.0,1763.0,2616.0,1644.0,3.6486,246900.0,<1H OCEAN +-118.32,34.17,45.0,3448.0,690.0,1562.0,643.0,4.0648,258800.0,<1H OCEAN +-118.31,34.16,38.0,2347.0,665.0,1317.0,547.0,3.2112,349300.0,<1H OCEAN +-118.32,34.16,49.0,1074.0,170.0,403.0,208.0,6.2547,366700.0,<1H OCEAN +-118.32,34.17,40.0,1868.0,356.0,799.0,403.0,2.9306,279300.0,<1H OCEAN +-118.33,34.16,23.0,1359.0,428.0,770.0,380.0,3.4016,234600.0,<1H OCEAN +-118.32,34.16,46.0,2345.0,453.0,1031.0,427.0,4.3173,278300.0,<1H OCEAN +-118.3,34.17,16.0,1353.0,398.0,1211.0,357.0,3.1551,205000.0,<1H OCEAN +-118.31,34.16,37.0,2144.0,446.0,860.0,435.0,3.9464,315000.0,<1H OCEAN +-118.31,34.17,12.0,3188.0,931.0,2118.0,850.0,3.1823,218300.0,<1H OCEAN +-118.31,34.17,24.0,2910.0,917.0,2522.0,873.0,2.4074,219400.0,<1H OCEAN +-118.43,34.3,33.0,2443.0,498.0,1601.0,484.0,4.0223,146000.0,<1H OCEAN +-118.43,34.3,37.0,1394.0,313.0,1111.0,327.0,3.6023,161800.0,<1H OCEAN +-118.43,34.29,39.0,1769.0,410.0,1499.0,390.0,3.1212,153500.0,<1H OCEAN +-118.42,34.29,34.0,1489.0,326.0,1389.0,313.0,3.4821,160300.0,<1H OCEAN +-118.43,34.3,28.0,271.0,61.0,246.0,62.0,1.7062,164600.0,<1H OCEAN +-118.44,34.29,35.0,2606.0,447.0,1555.0,404.0,4.6864,193800.0,<1H OCEAN +-118.43,34.29,38.0,1704.0,347.0,1384.0,374.0,2.865,155500.0,<1H OCEAN +-118.43,34.29,38.0,1237.0,298.0,1073.0,293.0,3.6726,154600.0,<1H OCEAN +-118.43,34.29,50.0,1181.0,265.0,1196.0,269.0,3.2095,167000.0,<1H OCEAN +-118.43,34.28,27.0,862.0,280.0,1243.0,267.0,2.3724,154200.0,<1H OCEAN +-118.44,34.29,32.0,1260.0,382.0,1434.0,342.0,2.0286,122900.0,<1H OCEAN +-118.44,34.29,30.0,1632.0,401.0,1357.0,401.0,3.1588,160100.0,<1H OCEAN +-118.45,34.29,30.0,762.0,228.0,840.0,226.0,2.3375,154200.0,<1H OCEAN +-118.44,34.28,32.0,527.0,146.0,582.0,143.0,1.7708,138800.0,<1H OCEAN +-118.44,34.28,46.0,11.0,11.0,24.0,13.0,2.875,162500.0,<1H OCEAN +-118.44,34.28,37.0,944.0,244.0,1107.0,235.0,1.9688,144100.0,<1H OCEAN +-118.44,34.28,47.0,843.0,194.0,800.0,180.0,3.3687,151700.0,<1H OCEAN +-118.44,34.28,38.0,1156.0,305.0,1359.0,289.0,2.5147,137100.0,<1H OCEAN +-118.45,34.28,36.0,2602.0,638.0,2780.0,620.0,2.7155,149800.0,<1H OCEAN +-117.71,34.15,17.0,17715.0,2370.0,7665.0,2312.0,7.9068,349100.0,INLAND +-117.73,34.12,26.0,1279.0,163.0,412.0,157.0,6.1731,293800.0,INLAND +-117.78,34.13,18.0,7798.0,1161.0,3710.0,1227.0,5.8819,260500.0,INLAND +-117.76,34.13,8.0,16759.0,2274.0,7249.0,2156.0,7.4837,358700.0,INLAND +-117.8,34.15,14.0,7876.0,1253.0,3699.0,1162.0,5.5423,248700.0,INLAND +-117.8,34.11,25.0,5039.0,821.0,2654.0,802.0,4.7969,211700.0,INLAND +-117.8,34.1,17.0,5153.0,1164.0,2949.0,1083.0,3.5603,174600.0,INLAND +-117.8,34.1,13.0,2996.0,495.0,1187.0,464.0,6.2456,161700.0,INLAND +-117.79,34.12,16.0,2426.0,426.0,1319.0,446.0,4.8125,224500.0,INLAND +-117.79,34.11,18.0,3814.0,721.0,1881.0,692.0,4.4722,215600.0,INLAND +-117.83,34.14,26.0,8254.0,1153.0,3460.0,1131.0,6.5253,349900.0,INLAND +-117.83,34.15,20.0,2421.0,306.0,1023.0,298.0,8.0683,451500.0,INLAND +-117.82,34.13,27.0,3770.0,573.0,1606.0,562.0,6.1321,309700.0,INLAND +-117.84,34.13,26.0,3773.0,694.0,2103.0,688.0,4.6937,198000.0,INLAND +-117.87,34.15,24.0,5745.0,735.0,2061.0,679.0,8.2827,451400.0,INLAND +-117.93,34.15,14.0,9610.0,2005.0,4723.0,1907.0,4.0393,156800.0,INLAND +-117.9,34.15,21.0,2056.0,461.0,1332.0,429.0,3.3942,212800.0,INLAND +-117.9,34.14,29.0,2240.0,457.0,1187.0,407.0,3.8365,184200.0,<1H OCEAN +-117.9,34.14,35.0,2259.0,505.0,1561.0,509.0,3.3043,155500.0,<1H OCEAN +-117.91,34.14,42.0,2225.0,485.0,1544.0,464.0,2.2442,166700.0,INLAND +-117.89,34.14,15.0,4644.0,967.0,2855.0,867.0,3.3654,222100.0,<1H OCEAN +-117.88,34.14,23.0,2308.0,322.0,1001.0,317.0,7.5112,355500.0,INLAND +-117.88,34.14,32.0,1764.0,365.0,924.0,329.0,3.875,186700.0,INLAND +-117.88,34.13,33.0,3713.0,718.0,2106.0,720.0,4.0023,185500.0,<1H OCEAN +-117.85,34.14,35.0,2899.0,429.0,1251.0,429.0,6.1049,297200.0,INLAND +-117.85,34.14,35.0,1582.0,248.0,654.0,221.0,4.9091,275000.0,INLAND +-117.86,34.14,33.0,2344.0,363.0,1098.0,359.0,6.2089,283400.0,INLAND +-117.87,34.15,37.0,2655.0,415.0,1056.0,401.0,5.4224,269500.0,INLAND +-117.86,34.14,36.0,3097.0,667.0,1484.0,634.0,3.1905,235300.0,INLAND +-117.87,34.14,30.0,2495.0,586.0,1139.0,559.0,2.9375,209200.0,INLAND +-117.85,34.13,31.0,1959.0,318.0,1021.0,303.0,4.3145,233000.0,INLAND +-117.85,34.12,30.0,4367.0,1033.0,2524.0,954.0,3.0448,192100.0,INLAND +-117.86,34.13,33.0,2383.0,428.0,1269.0,421.0,4.636,245500.0,INLAND +-117.86,34.13,40.0,1304.0,280.0,607.0,256.0,2.588,209500.0,INLAND +-117.86,34.13,29.0,630.0,145.0,378.0,148.0,3.4107,170800.0,INLAND +-117.87,34.13,32.0,1741.0,373.0,872.0,333.0,3.4219,194500.0,<1H OCEAN +-117.87,34.13,29.0,1677.0,413.0,873.0,400.0,3.12,194300.0,<1H OCEAN +-117.82,34.12,26.0,3118.0,528.0,1546.0,545.0,5.27,209400.0,INLAND +-117.84,34.12,25.0,3465.0,566.0,1722.0,536.0,4.8304,228900.0,INLAND +-117.83,34.11,29.0,2671.0,437.0,1484.0,445.0,4.9844,203000.0,INLAND +-117.84,34.11,17.0,3499.0,621.0,1911.0,621.0,4.8894,191700.0,INLAND +-117.84,34.12,34.0,2026.0,345.0,1142.0,332.0,4.392,187600.0,INLAND +-117.85,34.11,25.0,9255.0,1659.0,4944.0,1627.0,4.5708,223000.0,INLAND +-117.81,34.08,13.0,18448.0,2474.0,7775.0,2397.0,7.7876,348900.0,INLAND +-117.81,34.12,23.0,7063.0,1176.0,3100.0,1112.0,4.8229,192600.0,INLAND +-117.81,34.11,21.0,3481.0,808.0,1866.0,746.0,3.6201,150400.0,INLAND +-117.81,34.1,19.0,1935.0,399.0,1126.0,389.0,3.8929,144600.0,INLAND +-117.83,34.1,18.0,11026.0,1978.0,5407.0,1923.0,4.075,231100.0,INLAND +-117.76,34.1,28.0,4086.0,871.0,1973.0,853.0,2.621,202200.0,INLAND +-117.78,34.09,32.0,2643.0,516.0,1862.0,478.0,3.7177,177200.0,INLAND +-117.79,34.1,26.0,1664.0,344.0,1024.0,339.0,3.5192,190500.0,INLAND +-117.76,34.12,16.0,9020.0,1509.0,3575.0,1486.0,4.2415,275700.0,INLAND +-117.77,34.12,15.0,4260.0,770.0,2007.0,695.0,4.4609,230000.0,INLAND +-117.76,34.11,22.0,4935.0,954.0,2874.0,938.0,3.9825,180500.0,INLAND +-117.77,34.1,50.0,2388.0,494.0,1241.0,459.0,2.8818,167200.0,INLAND +-117.77,34.11,28.0,1998.0,414.0,1124.0,389.0,3.75,180900.0,INLAND +-117.78,34.11,23.0,7079.0,1381.0,3205.0,1327.0,3.0735,212300.0,INLAND +-117.74,34.11,28.0,3494.0,566.0,1391.0,522.0,5.3637,214700.0,INLAND +-117.75,34.12,25.0,5411.0,998.0,2243.0,1019.0,4.3148,240700.0,INLAND +-117.74,34.1,26.0,2723.0,604.0,1847.0,498.0,2.6779,136000.0,INLAND +-117.74,34.1,29.0,2742.0,488.0,2477.0,532.0,3.5072,121900.0,INLAND +-117.75,34.1,21.0,8069.0,2174.0,4369.0,2036.0,3.2756,156800.0,INLAND +-117.71,34.12,20.0,11250.0,1893.0,4952.0,1859.0,5.6785,239500.0,INLAND +-117.73,34.12,26.0,6459.0,894.0,2487.0,885.0,6.2089,261800.0,INLAND +-117.71,34.1,41.0,555.0,130.0,1492.0,123.0,2.2813,125000.0,INLAND +-117.71,34.1,52.0,567.0,152.0,2688.0,126.0,1.875,212500.0,INLAND +-117.72,34.1,52.0,2867.0,496.0,978.0,513.0,3.1477,291200.0,INLAND +-117.72,34.1,32.0,3241.0,895.0,1592.0,810.0,2.4952,181800.0,INLAND +-117.72,34.1,46.0,2477.0,458.0,1034.0,455.0,5.5,289700.0,INLAND +-117.73,34.1,37.0,3457.0,,1344.0,530.0,5.8891,226000.0,INLAND +-117.71,34.09,36.0,2637.0,476.0,1385.0,483.0,4.1739,158700.0,INLAND +-117.71,34.08,26.0,2744.0,494.0,1411.0,465.0,4.2639,154200.0,INLAND +-117.72,34.09,36.0,1473.0,328.0,785.0,299.0,3.2566,151800.0,INLAND +-117.72,34.09,33.0,4979.0,934.0,2575.0,874.0,3.7958,152500.0,INLAND +-117.73,34.09,30.0,2345.0,496.0,1897.0,454.0,2.4375,112100.0,INLAND +-117.73,34.09,36.0,1543.0,297.0,1355.0,303.0,3.5313,117800.0,INLAND +-117.73,34.08,33.0,1350.0,265.0,1251.0,257.0,2.9063,115200.0,INLAND +-117.74,34.09,30.0,3199.0,591.0,2192.0,563.0,3.4871,136400.0,INLAND +-117.75,34.08,33.0,2824.0,523.0,1797.0,493.0,3.6359,135100.0,INLAND +-117.75,34.08,33.0,1067.0,194.0,600.0,201.0,4.0368,139100.0,INLAND +-117.75,34.09,36.0,3094.0,556.0,1672.0,545.0,4.2143,146900.0,INLAND +-117.76,34.08,37.0,2263.0,502.0,1677.0,522.0,2.9388,139200.0,INLAND +-117.77,34.08,27.0,5929.0,932.0,2817.0,828.0,6.0434,214800.0,INLAND +-117.77,34.07,36.0,2922.0,652.0,2392.0,629.0,2.8661,124000.0,INLAND +-117.77,34.07,29.0,2976.0,662.0,2452.0,633.0,3.0638,113600.0,INLAND +-117.75,34.07,52.0,1548.0,348.0,1131.0,343.0,2.63,127300.0,INLAND +-117.76,34.07,51.0,1538.0,394.0,1173.0,388.0,2.3156,109800.0,INLAND +-117.76,34.07,48.0,1157.0,247.0,677.0,218.0,2.8594,127200.0,INLAND +-117.76,34.06,33.0,1831.0,486.0,1625.0,472.0,1.9937,103600.0,INLAND +-117.76,34.06,47.0,508.0,108.0,384.0,86.0,1.9583,92600.0,INLAND +-117.77,34.06,27.0,2178.0,629.0,2379.0,591.0,1.9766,108000.0,INLAND +-117.78,34.07,18.0,3610.0,772.0,2899.0,765.0,3.9784,113500.0,INLAND +-117.78,34.06,25.0,1712.0,491.0,1807.0,478.0,2.2258,114800.0,INLAND +-117.79,34.07,33.0,1694.0,333.0,1689.0,301.0,3.7583,116300.0,INLAND +-117.79,34.07,34.0,975.0,192.0,870.0,183.0,3.7933,116100.0,INLAND +-117.78,34.06,33.0,1056.0,272.0,964.0,300.0,2.4464,128700.0,INLAND +-117.78,34.05,39.0,2933.0,590.0,1886.0,550.0,3.9224,131300.0,INLAND +-117.8,34.05,5.0,4536.0,1178.0,2485.0,909.0,4.1118,125900.0,<1H OCEAN +-117.8,34.06,34.0,1081.0,205.0,1325.0,252.0,3.6298,108500.0,INLAND +-117.82,34.05,21.0,4031.0,923.0,2558.0,834.0,3.1641,117300.0,<1H OCEAN +-117.76,34.06,30.0,1700.0,504.0,1719.0,459.0,2.227,91900.0,INLAND +-117.76,34.05,36.0,2910.0,819.0,3055.0,782.0,1.9029,98000.0,INLAND +-117.75,34.05,35.0,1293.0,339.0,1494.0,312.0,1.6645,93300.0,INLAND +-117.76,34.05,36.0,3839.0,1004.0,4711.0,942.0,2.3859,116200.0,INLAND +-117.74,34.08,35.0,1613.0,298.0,911.0,293.0,3.4398,134300.0,INLAND +-117.74,34.07,42.0,2504.0,553.0,1550.0,509.0,3.0294,135700.0,INLAND +-117.74,34.06,48.0,2438.0,599.0,1508.0,548.0,2.8983,129200.0,INLAND +-117.74,34.07,52.0,1868.0,316.0,947.0,328.0,4.2415,140100.0,INLAND +-117.75,34.07,52.0,1279.0,213.0,444.0,204.0,5.2269,161000.0,INLAND +-117.75,34.07,52.0,2550.0,586.0,1246.0,576.0,1.6006,146200.0,INLAND +-117.72,34.08,34.0,2742.0,491.0,1761.0,496.0,3.2481,128800.0,INLAND +-117.72,34.07,33.0,4100.0,740.0,2580.0,730.0,3.7321,134200.0,INLAND +-117.73,34.08,28.0,5173.0,1069.0,3502.0,954.0,3.8438,130800.0,INLAND +-117.73,34.07,34.0,4038.0,725.0,2716.0,759.0,4.1339,135000.0,INLAND +-117.72,34.06,32.0,2209.0,654.0,1718.0,569.0,1.9643,113200.0,INLAND +-117.73,34.06,34.0,344.0,108.0,315.0,119.0,3.1786,117800.0,INLAND +-117.73,34.06,51.0,498.0,115.0,368.0,112.0,1.4063,98800.0,INLAND +-117.73,34.07,33.0,1921.0,489.0,1430.0,467.0,2.3406,122600.0,INLAND +-117.73,34.07,33.0,1025.0,261.0,854.0,269.0,2.2596,119400.0,INLAND +-117.73,34.05,36.0,975.0,243.0,809.0,233.0,2.8929,118100.0,INLAND +-117.73,34.05,28.0,2758.0,771.0,2877.0,694.0,2.0734,113300.0,INLAND +-117.74,34.05,30.0,1185.0,317.0,1466.0,302.0,2.625,94300.0,INLAND +-117.74,34.05,29.0,2452.0,700.0,3029.0,665.0,2.1354,110700.0,INLAND +-117.74,34.05,27.0,852.0,237.0,1024.0,221.0,2.1141,110900.0,INLAND +-117.75,34.05,46.0,1480.0,358.0,1511.0,348.0,1.9718,110600.0,INLAND +-117.73,34.04,26.0,3827.0,814.0,3367.0,810.0,3.15,129700.0,INLAND +-117.73,34.03,42.0,1967.0,378.0,1459.0,348.0,3.0375,118100.0,INLAND +-117.74,34.02,33.0,2318.0,464.0,1904.0,451.0,3.7454,116400.0,INLAND +-117.74,34.04,27.0,2215.0,440.0,1987.0,449.0,3.0429,129600.0,INLAND +-117.74,34.03,27.0,3623.0,809.0,3712.0,754.0,3.4609,123300.0,INLAND +-117.75,34.04,22.0,2948.0,636.0,2600.0,602.0,3.125,113600.0,INLAND +-117.76,34.04,34.0,1914.0,,1564.0,328.0,2.8347,115800.0,INLAND +-117.76,34.04,36.0,2242.0,448.0,2052.0,447.0,3.4464,113000.0,INLAND +-117.85,34.0,26.0,2712.0,402.0,1389.0,377.0,5.6513,227900.0,<1H OCEAN +-117.86,33.99,10.0,17820.0,2812.0,8686.0,2666.0,6.3875,310700.0,<1H OCEAN +-117.8,34.03,25.0,4240.0,643.0,1885.0,637.0,6.2384,247600.0,<1H OCEAN +-117.78,34.03,8.0,32054.0,5290.0,15507.0,5050.0,6.0191,253900.0,<1H OCEAN +-117.83,34.01,16.0,9446.0,1650.0,4911.0,1534.0,5.0111,212900.0,<1H OCEAN +-117.8,34.02,23.0,3351.0,591.0,1535.0,522.0,5.0869,230600.0,<1H OCEAN +-117.81,34.01,12.0,9197.0,1642.0,4332.0,1554.0,4.9589,282100.0,<1H OCEAN +-117.79,34.02,5.0,18690.0,2862.0,9427.0,2777.0,6.4266,315600.0,<1H OCEAN +-117.84,34.0,26.0,797.0,117.0,383.0,114.0,6.8758,253800.0,<1H OCEAN +-117.83,33.99,14.0,17527.0,2751.0,8380.0,2676.0,6.2734,267000.0,<1H OCEAN +-117.84,33.98,26.0,3638.0,557.0,1993.0,593.0,6.1076,221200.0,<1H OCEAN +-117.83,33.97,11.0,21533.0,3078.0,9671.0,2890.0,7.0329,368300.0,<1H OCEAN +-117.87,34.04,7.0,27700.0,4179.0,15037.0,4072.0,6.6288,339700.0,<1H OCEAN +-117.86,34.02,19.0,6300.0,937.0,3671.0,943.0,5.9716,262100.0,<1H OCEAN +-117.86,34.01,16.0,4632.0,,3038.0,727.0,5.1762,264400.0,<1H OCEAN +-117.87,34.02,16.0,3552.0,575.0,2120.0,573.0,6.4333,271500.0,<1H OCEAN +-117.84,34.04,4.0,9959.0,1544.0,4904.0,1429.0,6.9754,402500.0,<1H OCEAN +-117.85,34.06,24.0,3128.0,497.0,1406.0,472.0,7.5286,462700.0,<1H OCEAN +-117.85,34.08,23.0,1160.0,166.0,467.0,178.0,8.105,386200.0,<1H OCEAN +-117.85,34.07,32.0,761.0,101.0,295.0,95.0,11.1077,500001.0,<1H OCEAN +-117.86,34.08,31.0,2524.0,349.0,1003.0,343.0,7.5196,380900.0,<1H OCEAN +-117.87,34.08,33.0,4518.0,716.0,2037.0,764.0,5.6015,267200.0,<1H OCEAN +-117.87,34.07,21.0,4723.0,882.0,2210.0,768.0,3.8167,258700.0,<1H OCEAN +-117.85,34.1,22.0,5179.0,944.0,2315.0,884.0,4.51,189900.0,<1H OCEAN +-117.86,34.09,29.0,3855.0,585.0,2205.0,609.0,5.5496,218200.0,<1H OCEAN +-117.85,34.09,16.0,4556.0,639.0,2066.0,651.0,6.4667,263900.0,<1H OCEAN +-117.86,34.09,26.0,3408.0,542.0,1664.0,543.0,6.1498,239100.0,<1H OCEAN +-117.87,34.1,25.0,2208.0,477.0,1084.0,424.0,3.775,191700.0,<1H OCEAN +-117.87,34.09,31.0,1484.0,327.0,927.0,317.0,3.6484,189600.0,<1H OCEAN +-117.88,34.1,32.0,3357.0,621.0,1696.0,604.0,4.2685,216600.0,<1H OCEAN +-117.89,34.09,36.0,1811.0,320.0,1005.0,332.0,5.5629,188300.0,<1H OCEAN +-117.87,34.09,36.0,1267.0,191.0,640.0,200.0,5.2405,220000.0,<1H OCEAN +-117.87,34.08,33.0,3630.0,800.0,2257.0,796.0,3.2469,206900.0,<1H OCEAN +-117.88,34.09,29.0,3416.0,790.0,2223.0,728.0,3.5109,186000.0,<1H OCEAN +-117.86,34.1,23.0,2535.0,490.0,1327.0,466.0,3.5977,180600.0,<1H OCEAN +-117.86,34.1,29.0,1185.0,197.0,588.0,196.0,5.0832,196900.0,<1H OCEAN +-117.87,34.1,15.0,6409.0,1363.0,3359.0,1267.0,3.875,173300.0,<1H OCEAN +-117.84,34.1,17.0,7836.0,1624.0,4419.0,1526.0,3.8465,180700.0,<1H OCEAN +-117.85,34.11,27.0,1748.0,403.0,985.0,416.0,3.1133,180600.0,INLAND +-117.87,34.12,33.0,2059.0,361.0,1073.0,339.0,4.2454,183800.0,<1H OCEAN +-117.88,34.12,33.0,1485.0,274.0,1006.0,258.0,5.1708,158500.0,<1H OCEAN +-117.88,34.12,34.0,912.0,165.0,522.0,150.0,4.0417,178000.0,<1H OCEAN +-117.87,34.12,34.0,1004.0,220.0,772.0,217.0,3.8571,174500.0,<1H OCEAN +-117.87,34.11,23.0,4066.0,819.0,2105.0,737.0,4.6556,199600.0,<1H OCEAN +-117.87,34.11,34.0,1324.0,211.0,799.0,228.0,4.5234,192200.0,<1H OCEAN +-117.88,34.11,30.0,3082.0,602.0,2008.0,619.0,4.1411,182700.0,<1H OCEAN +-117.89,34.12,35.0,1470.0,241.0,885.0,246.0,4.9239,168800.0,<1H OCEAN +-117.88,34.12,35.0,1574.0,276.0,1088.0,289.0,4.0938,165300.0,<1H OCEAN +-117.89,34.11,36.0,806.0,147.0,446.0,153.0,4.5221,151300.0,<1H OCEAN +-117.88,34.11,18.0,2923.0,670.0,1751.0,656.0,3.2383,157000.0,<1H OCEAN +-117.89,34.12,35.0,1447.0,272.0,1224.0,268.0,3.9934,141900.0,<1H OCEAN +-117.89,34.12,35.0,1566.0,321.0,1396.0,317.0,4.05,141300.0,<1H OCEAN +-117.89,34.11,27.0,2434.0,535.0,1623.0,498.0,3.6875,140200.0,<1H OCEAN +-117.9,34.11,37.0,1286.0,255.0,1047.0,249.0,4.2019,140100.0,<1H OCEAN +-117.88,34.13,25.0,2559.0,654.0,1674.0,623.0,2.8547,155600.0,<1H OCEAN +-117.88,34.12,36.0,2029.0,351.0,1327.0,364.0,4.1836,164300.0,<1H OCEAN +-117.89,34.13,34.0,2159.0,386.0,1443.0,385.0,4.1995,147400.0,<1H OCEAN +-117.9,34.13,25.0,3076.0,856.0,2868.0,752.0,2.6619,117600.0,<1H OCEAN +-117.9,34.13,32.0,1640.0,391.0,1312.0,358.0,2.6292,136100.0,<1H OCEAN +-117.9,34.13,5.0,1126.0,316.0,819.0,311.0,1.5,139800.0,<1H OCEAN +-117.9,34.13,37.0,1801.0,422.0,1564.0,425.0,3.1597,133000.0,<1H OCEAN +-117.9,34.12,33.0,1788.0,456.0,1787.0,361.0,2.6629,124100.0,<1H OCEAN +-117.9,34.12,33.0,1555.0,361.0,1571.0,386.0,4.0529,138200.0,<1H OCEAN +-117.9,34.12,35.0,957.0,194.0,804.0,221.0,3.3322,151400.0,<1H OCEAN +-117.91,34.13,34.0,1540.0,328.0,1037.0,317.0,2.2132,138500.0,<1H OCEAN +-117.92,34.13,42.0,1762.0,398.0,1526.0,365.0,2.8643,132600.0,INLAND +-117.91,34.12,41.0,2673.0,578.0,2259.0,592.0,3.7846,145500.0,<1H OCEAN +-117.91,34.12,33.0,1391.0,309.0,1038.0,298.0,4.1944,149500.0,<1H OCEAN +-117.92,34.12,32.0,2552.0,576.0,2161.0,548.0,2.9459,144400.0,<1H OCEAN +-117.93,34.12,36.0,294.0,67.0,266.0,80.0,3.5385,134400.0,INLAND +-117.9,34.11,23.0,4776.0,1316.0,4797.0,1187.0,2.1667,142600.0,<1H OCEAN +-117.91,34.11,20.0,3158.0,684.0,2396.0,713.0,3.525,153000.0,<1H OCEAN +-117.92,34.11,24.0,2838.0,695.0,2151.0,645.0,3.2202,126200.0,<1H OCEAN +-117.94,34.1,31.0,1239.0,254.0,929.0,244.0,3.3625,153400.0,<1H OCEAN +-117.97,34.11,18.0,123.0,28.0,121.0,26.0,3.0417,137500.0,INLAND +-117.99,34.08,11.0,2399.0,527.0,2307.0,531.0,3.5625,141000.0,INLAND +-117.99,34.07,31.0,1507.0,369.0,1548.0,347.0,3.4327,147200.0,INLAND +-117.98,34.07,15.0,3543.0,888.0,3131.0,823.0,3.0184,139400.0,INLAND +-117.98,34.07,28.0,441.0,106.0,504.0,108.0,2.9107,152500.0,INLAND +-117.99,34.06,32.0,2491.0,616.0,2660.0,595.0,2.564,145800.0,INLAND +-118.0,34.07,34.0,1696.0,456.0,1609.0,426.0,2.25,138500.0,INLAND +-117.99,34.07,35.0,1681.0,360.0,1648.0,373.0,2.4911,145900.0,INLAND +-117.99,34.08,35.0,1032.0,207.0,954.0,191.0,2.8906,134800.0,INLAND +-117.97,34.08,8.0,2027.0,480.0,1781.0,447.0,3.0806,142400.0,INLAND +-117.97,34.08,30.0,2227.0,474.0,1961.0,481.0,3.3261,164100.0,INLAND +-117.96,34.07,32.0,2910.0,709.0,2583.0,670.0,3.7736,158400.0,<1H OCEAN +-117.97,34.07,20.0,2063.0,496.0,1573.0,468.0,3.2,157100.0,<1H OCEAN +-117.97,34.07,22.0,1438.0,364.0,1325.0,335.0,2.7802,162500.0,<1H OCEAN +-117.98,34.08,17.0,3640.0,830.0,3537.0,807.0,3.4784,152200.0,INLAND +-117.98,34.1,22.0,5661.0,1209.0,5389.0,1178.0,3.7727,159700.0,INLAND +-117.98,34.09,31.0,3073.0,617.0,2640.0,594.0,3.5,161300.0,INLAND +-117.97,34.09,27.0,3569.0,761.0,3339.0,762.0,4.1304,160500.0,INLAND +-117.95,34.11,29.0,1986.0,448.0,2013.0,432.0,3.1034,140800.0,INLAND +-117.96,34.1,35.0,4036.0,904.0,3878.0,846.0,3.2957,141600.0,INLAND +-117.97,34.1,33.0,1558.0,316.0,1600.0,338.0,2.9712,143900.0,INLAND +-117.97,34.1,26.0,1399.0,277.0,1285.0,276.0,4.0,160100.0,INLAND +-117.96,34.09,30.0,2686.0,613.0,2477.0,573.0,3.4427,160800.0,INLAND +-117.96,34.09,6.0,1954.0,534.0,1584.0,496.0,3.1621,131000.0,INLAND +-117.96,34.1,30.0,2775.0,657.0,2847.0,642.0,3.2266,141800.0,INLAND +-117.97,34.09,31.0,2779.0,639.0,2259.0,670.0,3.4032,143400.0,INLAND +-117.95,34.09,21.0,2215.0,484.0,1792.0,419.0,2.8375,166500.0,<1H OCEAN +-117.95,34.08,34.0,2278.0,476.0,1728.0,448.0,3.125,154100.0,<1H OCEAN +-117.95,34.09,18.0,1179.0,324.0,1296.0,331.0,2.851,140600.0,<1H OCEAN +-117.96,34.08,39.0,1076.0,338.0,1242.0,332.0,2.2679,151800.0,<1H OCEAN +-117.96,34.08,33.0,4151.0,850.0,3563.0,848.0,3.1912,159900.0,<1H OCEAN +-117.96,34.08,28.0,2831.0,552.0,2330.0,557.0,3.9741,173100.0,<1H OCEAN +-117.94,34.09,21.0,2707.0,675.0,1742.0,626.0,2.1062,176700.0,<1H OCEAN +-117.94,34.08,32.0,2704.0,514.0,1669.0,497.0,4.4653,195400.0,<1H OCEAN +-117.94,34.08,34.0,1970.0,476.0,1269.0,406.0,4.064,201200.0,<1H OCEAN +-117.94,34.08,35.0,2393.0,417.0,1336.0,418.0,4.87,187700.0,<1H OCEAN +-117.95,34.08,37.0,1137.0,203.0,672.0,226.0,3.2969,189000.0,<1H OCEAN +-117.95,34.07,37.0,1987.0,399.0,1279.0,378.0,4.1172,176500.0,<1H OCEAN +-117.93,34.09,34.0,2192.0,431.0,1376.0,428.0,3.9861,163900.0,<1H OCEAN +-117.93,34.09,35.0,782.0,153.0,499.0,163.0,4.2062,161300.0,<1H OCEAN +-117.93,34.09,35.0,1891.0,353.0,1093.0,382.0,4.0167,165500.0,<1H OCEAN +-117.93,34.09,37.0,1185.0,225.0,769.0,235.0,4.4625,154200.0,<1H OCEAN +-117.92,34.08,36.0,1285.0,228.0,679.0,231.0,3.8705,191900.0,<1H OCEAN +-117.92,34.08,35.0,2108.0,408.0,1257.0,414.0,4.1312,185200.0,<1H OCEAN +-117.93,34.07,34.0,1409.0,305.0,819.0,273.0,3.3977,188800.0,<1H OCEAN +-117.93,34.08,36.0,1371.0,246.0,806.0,241.0,4.5078,187100.0,<1H OCEAN +-117.93,34.08,35.0,689.0,128.0,379.0,128.0,3.9583,206000.0,<1H OCEAN +-117.93,34.08,36.0,1597.0,285.0,901.0,272.0,4.3947,197000.0,<1H OCEAN +-117.93,34.08,36.0,1788.0,317.0,1139.0,320.0,4.125,185800.0,<1H OCEAN +-117.91,34.08,33.0,2325.0,452.0,1170.0,445.0,3.6625,217100.0,<1H OCEAN +-117.91,34.08,35.0,1443.0,266.0,861.0,262.0,3.5795,186900.0,<1H OCEAN +-117.92,34.08,36.0,1479.0,251.0,741.0,245.0,4.2986,189600.0,<1H OCEAN +-117.92,34.08,35.0,1860.0,323.0,1011.0,305.0,3.5536,207000.0,<1H OCEAN +-117.92,34.08,35.0,1897.0,311.0,965.0,323.0,5.7039,199400.0,<1H OCEAN +-117.91,34.1,28.0,3694.0,722.0,1999.0,718.0,3.2813,181100.0,<1H OCEAN +-117.91,34.09,20.0,4327.0,1037.0,2296.0,963.0,3.0441,185400.0,<1H OCEAN +-117.92,34.09,35.0,1810.0,318.0,1164.0,332.0,5.0123,165700.0,<1H OCEAN +-117.92,34.1,33.0,1921.0,397.0,1492.0,393.0,4.375,150500.0,<1H OCEAN +-117.9,34.1,31.0,3007.0,653.0,1766.0,616.0,3.7083,166000.0,<1H OCEAN +-117.91,34.1,35.0,2746.0,478.0,1779.0,501.0,4.25,166700.0,<1H OCEAN +-117.92,34.1,35.0,2994.0,603.0,1933.0,561.0,4.0052,160700.0,<1H OCEAN +-117.89,34.1,27.0,3341.0,728.0,1762.0,679.0,2.9437,180400.0,<1H OCEAN +-117.89,34.1,35.0,3185.0,544.0,1858.0,564.0,3.8304,175900.0,<1H OCEAN +-117.89,34.1,34.0,2048.0,411.0,1456.0,416.0,3.125,168600.0,<1H OCEAN +-117.9,34.1,35.0,2739.0,475.0,1481.0,483.0,4.5655,176600.0,<1H OCEAN +-117.9,34.09,34.0,1562.0,272.0,825.0,266.0,4.125,220800.0,<1H OCEAN +-117.9,34.08,32.0,2068.0,356.0,976.0,370.0,5.212,201200.0,<1H OCEAN +-117.89,34.09,37.0,1055.0,280.0,538.0,206.0,2.4167,181300.0,<1H OCEAN +-117.89,34.09,35.0,1205.0,330.0,583.0,319.0,2.3971,188900.0,<1H OCEAN +-117.89,34.09,37.0,1813.0,394.0,1100.0,375.0,3.4453,176700.0,<1H OCEAN +-117.9,34.09,39.0,1726.0,333.0,892.0,335.0,4.3409,191800.0,<1H OCEAN +-117.88,34.08,30.0,6132.0,1538.0,3147.0,1449.0,2.7763,187800.0,<1H OCEAN +-117.89,34.08,35.0,1711.0,335.0,825.0,356.0,3.5,215600.0,<1H OCEAN +-117.89,34.08,25.0,2115.0,489.0,1107.0,477.0,3.1949,207400.0,<1H OCEAN +-117.89,34.07,32.0,2374.0,450.0,1580.0,427.0,3.8837,200300.0,<1H OCEAN +-117.9,34.08,32.0,5482.0,1251.0,3426.0,1117.0,3.2943,204400.0,<1H OCEAN +-117.87,34.06,25.0,3652.0,470.0,1525.0,484.0,10.1248,428500.0,<1H OCEAN +-117.88,34.06,23.0,6689.0,1124.0,3081.0,1047.0,5.9254,491200.0,<1H OCEAN +-117.9,34.06,35.0,1313.0,194.0,599.0,209.0,7.5,287200.0,<1H OCEAN +-117.9,34.06,33.0,1701.0,290.0,831.0,275.0,5.4469,274700.0,<1H OCEAN +-117.9,34.06,33.0,1330.0,209.0,578.0,192.0,5.6406,266200.0,<1H OCEAN +-117.89,34.07,35.0,1439.0,261.0,804.0,271.0,3.9808,188600.0,<1H OCEAN +-117.9,34.07,35.0,1646.0,294.0,1056.0,280.0,3.055,172000.0,<1H OCEAN +-117.89,34.07,35.0,834.0,137.0,392.0,123.0,4.5179,218800.0,<1H OCEAN +-117.9,34.06,34.0,2956.0,469.0,1488.0,464.0,5.3664,268300.0,<1H OCEAN +-117.9,34.07,36.0,1009.0,164.0,466.0,149.0,5.8519,249400.0,<1H OCEAN +-117.91,34.07,36.0,1390.0,270.0,887.0,266.0,5.0897,189000.0,<1H OCEAN +-117.91,34.07,33.0,2938.0,561.0,1519.0,549.0,4.5594,204200.0,<1H OCEAN +-117.92,34.06,34.0,2819.0,609.0,1718.0,558.0,3.5547,197600.0,<1H OCEAN +-117.92,34.07,36.0,1057.0,207.0,658.0,207.0,4.7708,191700.0,<1H OCEAN +-117.92,34.07,29.0,1699.0,399.0,1052.0,411.0,3.2122,195500.0,<1H OCEAN +-117.91,34.06,29.0,3250.0,521.0,1382.0,513.0,5.112,218300.0,<1H OCEAN +-117.91,34.05,35.0,3189.0,,1727.0,500.0,5.0758,211100.0,<1H OCEAN +-117.92,34.06,35.0,2894.0,467.0,1420.0,479.0,5.184,224900.0,<1H OCEAN +-117.93,34.06,37.0,1505.0,262.0,798.0,259.0,5.4635,202100.0,<1H OCEAN +-117.93,34.06,35.0,1022.0,183.0,628.0,187.0,3.9375,187500.0,<1H OCEAN +-117.93,34.05,36.0,1340.0,221.0,848.0,244.0,4.1731,205100.0,<1H OCEAN +-117.93,34.05,32.0,3055.0,623.0,1902.0,565.0,4.2926,190700.0,<1H OCEAN +-117.92,34.07,38.0,175.0,22.0,129.0,20.0,9.7066,182500.0,<1H OCEAN +-117.93,34.06,28.0,3342.0,688.0,2210.0,647.0,3.4596,202800.0,<1H OCEAN +-117.95,34.05,34.0,1428.0,227.0,890.0,249.0,5.8722,204800.0,<1H OCEAN +-117.94,34.06,32.0,3418.0,662.0,2003.0,622.0,4.0333,210200.0,<1H OCEAN +-117.94,34.06,34.0,1921.0,422.0,1230.0,447.0,3.6648,193900.0,<1H OCEAN +-117.93,34.07,36.0,1207.0,209.0,683.0,213.0,5.3559,207300.0,<1H OCEAN +-117.94,34.07,25.0,1814.0,404.0,1187.0,363.0,3.3523,170800.0,<1H OCEAN +-117.95,34.07,37.0,1375.0,260.0,951.0,272.0,3.2083,195200.0,<1H OCEAN +-117.95,34.06,32.0,2252.0,415.0,1370.0,411.0,4.6312,184800.0,<1H OCEAN +-117.96,34.07,35.0,2819.0,529.0,1508.0,485.0,4.6118,191700.0,<1H OCEAN +-117.96,34.06,34.0,2226.0,381.0,1464.0,365.0,4.4102,183200.0,<1H OCEAN +-117.96,34.06,31.0,2017.0,462.0,1462.0,457.0,2.067,167300.0,<1H OCEAN +-117.97,34.05,33.0,1452.0,268.0,1274.0,278.0,3.6563,162700.0,<1H OCEAN +-117.97,34.06,34.0,3580.0,684.0,2786.0,636.0,4.0469,166800.0,<1H OCEAN +-117.98,34.06,33.0,1353.0,228.0,1079.0,237.0,4.5417,160300.0,<1H OCEAN +-117.97,34.06,31.0,2516.0,,2194.0,497.0,3.2413,155500.0,<1H OCEAN +-117.98,34.06,36.0,2391.0,407.0,1967.0,398.0,4.0274,160700.0,<1H OCEAN +-117.98,34.05,35.0,2342.0,426.0,2176.0,416.0,3.7454,156900.0,<1H OCEAN +-117.99,34.05,35.0,1792.0,317.0,1441.0,306.0,3.7917,151100.0,<1H OCEAN +-117.97,34.05,33.0,2028.0,422.0,1727.0,371.0,2.8438,157600.0,<1H OCEAN +-117.97,34.05,36.0,931.0,160.0,746.0,201.0,3.1667,158000.0,<1H OCEAN +-117.97,34.05,36.0,1299.0,206.0,763.0,216.0,3.5179,161400.0,<1H OCEAN +-117.97,34.05,34.0,2050.0,495.0,1832.0,465.0,2.8333,155700.0,<1H OCEAN +-117.98,34.05,33.0,1560.0,315.0,1467.0,313.0,4.1429,159800.0,<1H OCEAN +-117.98,34.04,34.0,2547.0,537.0,2108.0,498.0,3.4722,154600.0,<1H OCEAN +-117.97,34.04,32.0,1507.0,295.0,1326.0,324.0,4.119,163300.0,<1H OCEAN +-117.97,34.04,28.0,1686.0,417.0,1355.0,388.0,2.5192,157300.0,<1H OCEAN +-117.96,34.03,35.0,2093.0,,1755.0,403.0,3.4115,150400.0,<1H OCEAN +-117.96,34.03,35.0,1623.0,331.0,1462.0,312.0,3.9803,152600.0,<1H OCEAN +-117.95,34.03,33.0,1453.0,326.0,1609.0,319.0,3.7578,155800.0,<1H OCEAN +-117.95,34.03,35.0,804.0,159.0,727.0,179.0,2.7361,145700.0,<1H OCEAN +-117.96,34.05,35.0,1254.0,263.0,1092.0,268.0,4.6364,163100.0,<1H OCEAN +-117.96,34.05,36.0,1475.0,270.0,1149.0,284.0,3.0904,158600.0,<1H OCEAN +-117.95,34.05,35.0,1309.0,276.0,1113.0,253.0,4.375,156500.0,<1H OCEAN +-117.95,34.04,36.0,1044.0,200.0,982.0,205.0,4.7679,153900.0,<1H OCEAN +-117.96,34.04,35.0,1141.0,212.0,924.0,212.0,3.1591,148300.0,<1H OCEAN +-117.96,34.04,33.0,1458.0,268.0,1115.0,257.0,4.7955,158100.0,<1H OCEAN +-117.96,34.04,34.0,1381.0,265.0,1020.0,268.0,4.025,146900.0,<1H OCEAN +-117.96,34.05,32.0,1993.0,388.0,1385.0,380.0,3.7258,181900.0,<1H OCEAN +-117.94,34.05,34.0,1729.0,324.0,1341.0,324.0,3.7708,163500.0,<1H OCEAN +-117.94,34.04,36.0,1431.0,354.0,1367.0,334.0,3.5592,160200.0,<1H OCEAN +-117.94,34.04,34.0,1403.0,274.0,977.0,257.0,3.8409,163000.0,<1H OCEAN +-117.94,34.05,34.0,1519.0,304.0,1262.0,300.0,3.3409,161200.0,<1H OCEAN +-117.95,34.05,31.0,2349.0,539.0,2028.0,521.0,3.494,154500.0,<1H OCEAN +-117.94,34.04,33.0,1493.0,331.0,1571.0,354.0,3.8864,158900.0,<1H OCEAN +-117.95,34.04,27.0,2610.0,846.0,2296.0,750.0,2.274,150800.0,<1H OCEAN +-117.94,34.03,35.0,1499.0,289.0,1112.0,268.0,3.83,149000.0,<1H OCEAN +-117.94,34.03,35.0,1375.0,249.0,1015.0,239.0,4.0521,151800.0,<1H OCEAN +-117.95,34.03,33.0,1782.0,394.0,1517.0,376.0,3.3389,157900.0,<1H OCEAN +-117.93,34.01,23.0,3188.0,836.0,3883.0,840.0,2.1863,157600.0,<1H OCEAN +-117.93,34.01,33.0,1733.0,361.0,1757.0,375.0,4.2266,153800.0,<1H OCEAN +-117.94,34.02,27.0,5026.0,955.0,3899.0,930.0,3.871,162900.0,<1H OCEAN +-117.95,34.02,19.0,1129.0,258.0,900.0,228.0,3.875,135600.0,<1H OCEAN +-117.95,34.02,22.0,1919.0,411.0,1203.0,363.0,4.2578,144100.0,<1H OCEAN +-117.92,34.03,35.0,1341.0,233.0,898.0,216.0,4.1118,157300.0,<1H OCEAN +-117.92,34.03,32.0,1819.0,375.0,1728.0,375.0,3.975,162400.0,<1H OCEAN +-117.92,34.03,35.0,1469.0,306.0,1285.0,308.0,3.9219,159500.0,<1H OCEAN +-117.93,34.03,35.0,2160.0,399.0,1694.0,403.0,3.8581,163100.0,<1H OCEAN +-117.93,34.03,30.0,2246.0,446.0,1837.0,431.0,4.7917,164500.0,<1H OCEAN +-117.93,34.04,23.0,6361.0,1168.0,4580.0,1109.0,4.9342,181000.0,<1H OCEAN +-117.93,34.04,30.0,1336.0,239.0,905.0,253.0,4.8854,178100.0,<1H OCEAN +-117.9,34.04,15.0,11989.0,2185.0,6652.0,2081.0,4.5554,278300.0,<1H OCEAN +-117.9,34.05,33.0,629.0,76.0,253.0,75.0,7.6286,330400.0,<1H OCEAN +-117.91,34.04,15.0,8749.0,1761.0,5278.0,1691.0,4.6324,168800.0,<1H OCEAN +-117.92,34.05,36.0,2241.0,419.0,1743.0,448.0,4.6587,161900.0,<1H OCEAN +-117.88,34.01,16.0,6756.0,1332.0,4429.0,1299.0,4.7589,178200.0,<1H OCEAN +-117.88,34.0,21.0,5459.0,1086.0,3394.0,1087.0,3.6308,192100.0,<1H OCEAN +-117.89,34.01,23.0,4535.0,955.0,3881.0,930.0,3.6275,154100.0,<1H OCEAN +-117.9,34.01,27.0,1702.0,381.0,2091.0,352.0,3.7917,131100.0,<1H OCEAN +-117.9,34.01,27.0,2383.0,472.0,2079.0,494.0,3.9702,141400.0,<1H OCEAN +-117.91,34.02,17.0,5973.0,1384.0,4349.0,1229.0,3.2799,199300.0,<1H OCEAN +-117.9,34.02,15.0,14058.0,2486.0,8997.0,2497.0,5.0704,226200.0,<1H OCEAN +-117.91,34.02,22.0,6269.0,,5587.0,1251.0,3.8201,136200.0,<1H OCEAN +-117.92,34.01,35.0,3055.0,634.0,3738.0,615.0,3.375,127200.0,<1H OCEAN +-117.98,34.04,29.0,1468.0,310.0,1390.0,276.0,3.75,190600.0,<1H OCEAN +-117.96,34.02,33.0,349.0,124.0,460.0,83.0,2.375,133300.0,<1H OCEAN +-117.98,34.03,21.0,797.0,162.0,484.0,166.0,2.625,191100.0,<1H OCEAN +-117.9,33.99,18.0,8076.0,1789.0,5325.0,1707.0,3.443,171900.0,<1H OCEAN +-117.92,34.0,36.0,116.0,30.0,193.0,35.0,3.8125,136300.0,<1H OCEAN +-117.88,34.0,32.0,265.0,51.0,170.0,50.0,3.9375,187500.0,<1H OCEAN +-117.89,33.99,22.0,3272.0,618.0,1784.0,591.0,4.0324,211300.0,<1H OCEAN +-117.87,33.99,21.0,2837.0,515.0,2031.0,555.0,4.9271,209700.0,<1H OCEAN +-118.01,34.05,37.0,682.0,172.0,813.0,173.0,3.8125,138000.0,<1H OCEAN +-117.99,34.04,30.0,4468.0,959.0,4027.0,938.0,3.185,168300.0,<1H OCEAN +-118.02,34.04,27.0,5640.0,1001.0,3538.0,978.0,5.065,215400.0,<1H OCEAN +-118.0,34.03,25.0,6909.0,1154.0,3912.0,1121.0,5.257,226100.0,<1H OCEAN +-117.98,34.02,32.0,2945.0,651.0,2044.0,652.0,3.1979,183900.0,<1H OCEAN +-117.98,34.02,33.0,3512.0,632.0,1971.0,598.0,4.4653,193200.0,<1H OCEAN +-117.98,34.01,27.0,2643.0,418.0,1344.0,381.0,5.7057,262100.0,<1H OCEAN +-117.99,34.0,26.0,2988.0,397.0,1371.0,415.0,6.6988,382500.0,<1H OCEAN +-118.02,34.02,21.0,5992.0,986.0,2647.0,969.0,5.2405,302400.0,<1H OCEAN +-117.97,34.01,33.0,3530.0,700.0,2959.0,679.0,3.7459,152900.0,<1H OCEAN +-117.97,34.01,33.0,2006.0,381.0,1410.0,346.0,3.7083,165500.0,<1H OCEAN +-117.97,34.0,28.0,1983.0,375.0,1407.0,367.0,3.8319,179000.0,<1H OCEAN +-117.97,33.99,22.0,5284.0,982.0,2613.0,932.0,4.7332,289900.0,<1H OCEAN +-117.98,34.0,22.0,3632.0,538.0,1968.0,566.0,6.019,324900.0,<1H OCEAN +-117.98,33.99,26.0,3343.0,455.0,1429.0,457.0,7.0778,334300.0,<1H OCEAN +-117.98,33.98,27.0,2275.0,346.0,1039.0,333.0,6.2217,333500.0,<1H OCEAN +-117.99,33.98,18.0,8399.0,1144.0,3727.0,1107.0,6.9695,360400.0,<1H OCEAN +-117.95,34.0,34.0,2376.0,468.0,1858.0,449.0,4.1328,176300.0,<1H OCEAN +-117.96,34.0,33.0,5462.0,952.0,3527.0,914.0,4.4038,186700.0,<1H OCEAN +-117.96,34.0,34.0,2777.0,540.0,1954.0,522.0,4.5163,183800.0,<1H OCEAN +-117.92,33.98,10.0,16414.0,2919.0,8907.0,2714.0,6.1552,362500.0,<1H OCEAN +-117.95,33.98,15.0,16042.0,2602.0,7732.0,2552.0,5.6716,330400.0,<1H OCEAN +-117.94,33.99,18.0,6100.0,1018.0,3112.0,982.0,4.9932,284000.0,<1H OCEAN +-117.95,33.99,15.0,3978.0,692.0,2418.0,665.0,5.0142,269900.0,<1H OCEAN +-117.95,33.99,24.0,1219.0,177.0,610.0,185.0,6.7978,325000.0,<1H OCEAN +-117.95,33.99,25.0,1075.0,138.0,451.0,132.0,6.8492,332200.0,<1H OCEAN +-117.96,33.99,25.0,1348.0,210.0,660.0,200.0,5.2852,297600.0,<1H OCEAN +-117.96,33.99,25.0,2799.0,388.0,1348.0,389.0,6.2517,311100.0,<1H OCEAN +-117.97,33.99,23.0,3335.0,570.0,1560.0,555.0,5.7268,300300.0,<1H OCEAN +-117.96,33.98,25.0,1259.0,184.0,599.0,170.0,5.7407,302200.0,<1H OCEAN +-117.88,33.96,16.0,19059.0,3079.0,10988.0,3061.0,5.5469,265200.0,<1H OCEAN +-117.89,33.98,5.0,3088.0,711.0,1415.0,641.0,2.5125,184500.0,<1H OCEAN +-117.9,33.98,20.0,9893.0,2283.0,7228.0,2159.0,3.253,186700.0,<1H OCEAN +-117.9,33.97,23.0,7353.0,1255.0,4014.0,1124.0,5.4155,213200.0,<1H OCEAN +-117.75,34.06,52.0,1171.0,318.0,1126.0,276.0,1.9762,105800.0,INLAND +-117.75,34.06,52.0,62.0,9.0,44.0,16.0,0.4999,112500.0,INLAND +-117.74,34.06,4.0,1391.0,506.0,727.0,369.0,1.4722,137500.0,INLAND +-117.75,34.05,27.0,437.0,108.0,469.0,97.0,1.7206,107500.0,INLAND +-117.75,34.05,37.0,378.0,92.0,503.0,103.0,2.1908,94600.0,INLAND +-117.75,34.06,44.0,477.0,135.0,502.0,117.0,2.0156,112500.0,INLAND +-117.75,34.06,52.0,24.0,6.0,46.0,7.0,1.625,67500.0,INLAND +-117.94,34.15,33.0,859.0,144.0,421.0,138.0,4.4821,220100.0,INLAND +-117.95,34.16,17.0,7116.0,1089.0,3538.0,1083.0,6.2654,273800.0,INLAND +-117.94,34.14,33.0,1620.0,283.0,868.0,275.0,5.411,219400.0,INLAND +-117.95,34.14,13.0,3859.0,710.0,2283.0,759.0,4.5594,184500.0,INLAND +-117.95,34.14,33.0,1943.0,440.0,1526.0,353.0,3.038,137500.0,INLAND +-117.96,34.14,27.0,2221.0,542.0,1328.0,523.0,2.5275,151700.0,INLAND +-117.96,34.14,33.0,1994.0,405.0,993.0,403.0,3.766,163900.0,INLAND +-117.96,34.14,9.0,907.0,207.0,619.0,194.0,3.9464,179600.0,INLAND +-117.97,34.14,15.0,3595.0,964.0,1839.0,877.0,2.6014,150300.0,INLAND +-117.97,34.14,33.0,1328.0,348.0,903.0,329.0,3.1094,136000.0,INLAND +-117.97,34.13,42.0,683.0,127.0,541.0,138.0,3.4375,151700.0,INLAND +-117.98,34.14,24.0,1596.0,388.0,1329.0,352.0,3.0417,148000.0,INLAND +-117.97,34.13,33.0,2038.0,473.0,1546.0,469.0,3.4777,144500.0,INLAND +-117.98,34.13,37.0,1447.0,309.0,1279.0,290.0,4.0083,142900.0,INLAND +-117.98,34.13,29.0,2110.0,460.0,1890.0,448.0,3.6806,130500.0,INLAND +-117.97,34.15,33.0,2474.0,472.0,1268.0,437.0,6.4576,500001.0,INLAND +-117.97,34.17,35.0,5005.0,848.0,2112.0,813.0,4.9968,295000.0,INLAND +-118.0,34.16,42.0,1020.0,156.0,398.0,157.0,6.101,311800.0,INLAND +-118.01,34.16,47.0,1745.0,270.0,753.0,275.0,5.532,318500.0,INLAND +-117.99,34.18,38.0,2981.0,432.0,1063.0,437.0,6.5254,365000.0,INLAND +-117.99,34.16,40.0,3838.0,696.0,1851.0,674.0,4.2407,262000.0,INLAND +-118.0,34.16,52.0,1354.0,227.0,531.0,206.0,4.8059,270600.0,INLAND +-118.0,34.15,48.0,3436.0,673.0,1540.0,648.0,4.275,256800.0,INLAND +-118.01,34.15,52.0,2234.0,472.0,986.0,439.0,3.9125,265500.0,INLAND +-118.02,34.15,44.0,2419.0,437.0,1045.0,432.0,3.875,280800.0,INLAND +-118.02,34.17,32.0,3868.0,548.0,1558.0,528.0,9.4667,500001.0,INLAND +-118.03,34.16,36.0,1640.0,239.0,693.0,253.0,6.6888,500001.0,INLAND +-118.03,34.15,43.0,1694.0,283.0,674.0,267.0,4.1797,486800.0,INLAND +-118.02,34.15,44.0,2267.0,426.0,980.0,372.0,3.6,307400.0,INLAND +-118.06,34.17,38.0,2726.0,398.0,1059.0,380.0,7.2419,410400.0,INLAND +-118.05,34.17,45.0,2535.0,455.0,1036.0,437.0,5.0482,388900.0,INLAND +-118.04,34.17,52.0,1885.0,401.0,764.0,373.0,4.0385,265700.0,INLAND +-118.04,34.18,37.0,3134.0,532.0,1220.0,508.0,5.2865,455400.0,INLAND +-118.04,34.16,38.0,1594.0,249.0,633.0,247.0,5.9582,350700.0,INLAND +-118.05,34.16,36.0,3908.0,732.0,1688.0,725.0,4.5625,376800.0,INLAND +-118.05,34.16,41.0,3320.0,713.0,1236.0,659.0,3.5694,278600.0,INLAND +-118.06,34.16,46.0,1467.0,298.0,816.0,267.0,3.6705,286500.0,INLAND +-118.06,34.16,34.0,2297.0,419.0,909.0,412.0,4.8214,362500.0,INLAND +-118.07,34.16,35.0,3585.0,671.0,1401.0,623.0,4.125,330000.0,INLAND +-118.03,34.16,36.0,1401.0,218.0,667.0,225.0,7.1615,484700.0,INLAND +-118.03,34.16,39.0,2731.0,366.0,1034.0,338.0,9.8098,500001.0,INLAND +-118.05,34.15,32.0,5131.0,665.0,1877.0,622.0,8.2004,500001.0,INLAND +-118.06,34.15,37.0,1980.0,226.0,697.0,226.0,15.0001,500001.0,INLAND +-118.05,34.14,39.0,2125.0,295.0,862.0,303.0,8.9728,500001.0,INLAND +-118.06,34.13,40.0,4307.0,918.0,1769.0,845.0,3.6341,391500.0,INLAND +-118.06,34.14,42.0,2461.0,379.0,1179.0,360.0,7.0315,437300.0,INLAND +-118.06,34.14,40.0,2662.0,379.0,1151.0,387.0,8.4889,500001.0,INLAND +-118.03,34.14,44.0,1446.0,250.0,721.0,243.0,4.7308,352200.0,INLAND +-118.04,34.13,22.0,3359.0,643.0,1227.0,588.0,4.645,276200.0,INLAND +-118.04,34.15,34.0,1523.0,311.0,676.0,295.0,3.3621,377200.0,INLAND +-118.04,34.13,35.0,249.0,31.0,268.0,29.0,15.0001,500001.0,INLAND +-118.05,34.13,23.0,3264.0,729.0,1475.0,668.0,3.735,218300.0,INLAND +-118.06,34.13,28.0,12139.0,2873.0,5359.0,2731.0,3.292,227300.0,INLAND +-118.02,34.14,34.0,1077.0,257.0,478.0,199.0,2.6316,252800.0,INLAND +-118.02,34.13,32.0,3308.0,718.0,1803.0,667.0,3.9464,273600.0,INLAND +-118.03,34.14,31.0,4353.0,1117.0,2338.0,1037.0,3.0727,242600.0,INLAND +-118.01,34.13,36.0,1332.0,217.0,648.0,203.0,4.7159,365900.0,INLAND +-118.02,34.13,33.0,2874.0,458.0,1239.0,431.0,5.2329,430900.0,INLAND +-118.02,34.13,34.0,1966.0,319.0,980.0,297.0,7.7307,429000.0,INLAND +-118.03,34.13,33.0,2352.0,373.0,995.0,359.0,4.9583,445700.0,INLAND +-118.02,34.12,37.0,2250.0,360.0,989.0,329.0,6.1536,366000.0,INLAND +-118.02,34.11,35.0,2454.0,458.0,1110.0,435.0,3.8029,414800.0,INLAND +-118.02,34.12,36.0,1471.0,246.0,751.0,230.0,5.4555,395100.0,INLAND +-118.02,34.12,38.0,1778.0,288.0,870.0,281.0,6.5784,408500.0,INLAND +-118.03,34.11,34.0,2837.0,460.0,1344.0,458.0,6.5722,437400.0,INLAND +-118.01,34.14,20.0,3350.0,831.0,1816.0,744.0,2.8352,161700.0,INLAND +-118.01,34.14,23.0,3425.0,754.0,2202.0,729.0,3.52,187300.0,INLAND +-118.02,34.14,31.0,6854.0,1578.0,4131.0,1524.0,3.5878,222800.0,INLAND +-117.99,34.15,44.0,2492.0,611.0,1951.0,596.0,3.1304,185600.0,INLAND +-118.0,34.15,43.0,2583.0,633.0,1544.0,617.0,2.5417,178300.0,INLAND +-118.01,34.15,32.0,6597.0,1579.0,3689.0,1459.0,3.2377,184100.0,INLAND +-117.98,34.14,27.0,6341.0,1289.0,2899.0,1192.0,3.6336,235200.0,INLAND +-117.99,34.14,30.0,2346.0,,1988.0,474.0,2.5625,153000.0,INLAND +-118.0,34.13,24.0,2584.0,520.0,1869.0,503.0,3.2841,167000.0,INLAND +-118.0,34.14,31.0,1298.0,431.0,1131.0,425.0,1.0548,178100.0,INLAND +-118.0,34.14,39.0,1302.0,303.0,800.0,291.0,3.2723,166900.0,INLAND +-118.0,34.13,35.0,1005.0,224.0,742.0,221.0,3.5481,158100.0,INLAND +-117.99,34.13,37.0,1568.0,371.0,1618.0,350.0,2.9605,129400.0,INLAND +-117.99,34.12,37.0,1527.0,331.0,1504.0,324.0,3.2857,130100.0,INLAND +-117.99,34.12,35.0,1040.0,231.0,1040.0,242.0,2.5395,139200.0,INLAND +-118.0,34.12,37.0,1340.0,325.0,928.0,333.0,3.9219,175000.0,INLAND +-118.0,34.12,42.0,870.0,170.0,546.0,164.0,4.625,173800.0,INLAND +-118.01,34.13,38.0,3374.0,671.0,1906.0,640.0,4.0729,212300.0,INLAND +-118.01,34.12,43.0,1185.0,207.0,657.0,198.0,4.5491,214800.0,INLAND +-118.01,34.12,32.0,1937.0,332.0,922.0,340.0,3.94,278400.0,INLAND +-118.01,34.11,32.0,1978.0,536.0,826.0,470.0,2.5114,212200.0,INLAND +-118.01,34.11,43.0,1858.0,345.0,1054.0,329.0,3.5625,211600.0,INLAND +-118.01,34.11,36.0,1722.0,320.0,794.0,322.0,4.2132,212200.0,INLAND +-118.02,34.1,36.0,1928.0,361.0,1008.0,368.0,4.733,233700.0,INLAND +-118.02,34.1,36.0,452.0,80.0,248.0,83.0,1.9688,226000.0,INLAND +-118.02,34.11,39.0,1504.0,280.0,718.0,261.0,4.625,219000.0,INLAND +-118.03,34.1,38.0,2301.0,416.0,1079.0,398.0,4.4236,233600.0,INLAND +-118.03,34.1,30.0,2773.0,634.0,1376.0,540.0,2.7857,201700.0,INLAND +-118.03,34.1,31.0,2647.0,539.0,1473.0,520.0,3.94,223900.0,INLAND +-118.03,34.1,32.0,2668.0,609.0,1512.0,541.0,2.9422,233100.0,INLAND +-118.03,34.11,38.0,2076.0,361.0,988.0,332.0,5.9175,416900.0,INLAND +-118.04,34.11,44.0,773.0,120.0,405.0,121.0,5.0,447100.0,INLAND +-118.04,34.11,37.0,1275.0,177.0,598.0,174.0,7.1885,500001.0,INLAND +-118.05,34.11,42.0,3677.0,627.0,1779.0,622.0,5.1509,426500.0,INLAND +-118.04,34.13,39.0,2485.0,382.0,1072.0,342.0,6.0878,430200.0,INLAND +-118.04,34.12,39.0,2522.0,380.0,1113.0,357.0,5.2249,445200.0,INLAND +-118.04,34.12,44.0,2007.0,288.0,921.0,307.0,6.5989,500001.0,INLAND +-118.04,34.12,30.0,2170.0,318.0,984.0,309.0,5.6916,500001.0,INLAND +-118.05,34.12,20.0,5218.0,959.0,2302.0,850.0,3.55,476700.0,INLAND +-118.06,34.12,25.0,3891.0,848.0,1848.0,759.0,3.6639,248100.0,INLAND +-118.06,34.12,34.0,2941.0,558.0,1660.0,576.0,4.5667,271500.0,INLAND +-118.06,34.12,35.0,2053.0,369.0,1044.0,375.0,4.1875,275400.0,INLAND +-118.05,34.11,48.0,1410.0,304.0,677.0,274.0,3.2596,272400.0,INLAND +-118.06,34.11,36.0,2178.0,485.0,914.0,412.0,2.7656,239500.0,INLAND +-118.06,34.11,39.0,2603.0,547.0,1196.0,487.0,3.0854,248700.0,INLAND +-118.04,34.1,39.0,2302.0,412.0,1590.0,406.0,4.8017,273800.0,INLAND +-118.05,34.1,36.0,1606.0,318.0,889.0,294.0,4.7931,272600.0,INLAND +-118.06,34.1,38.0,3229.0,636.0,1599.0,609.0,3.8646,257100.0,<1H OCEAN +-118.06,34.1,42.0,1576.0,313.0,697.0,282.0,4.3523,283600.0,<1H OCEAN +-118.06,34.1,43.0,1833.0,355.0,786.0,334.0,3.5761,256700.0,<1H OCEAN +-118.06,34.1,38.0,2438.0,442.0,1308.0,461.0,3.6995,260100.0,<1H OCEAN +-118.04,34.1,38.0,2317.0,451.0,1155.0,426.0,4.1488,235300.0,INLAND +-118.04,34.09,34.0,2597.0,461.0,1542.0,470.0,4.6211,248900.0,INLAND +-118.05,34.1,30.0,2143.0,427.0,1107.0,416.0,4.2321,252200.0,INLAND +-118.05,34.1,42.0,2065.0,404.0,1313.0,402.0,4.0179,274300.0,INLAND +-118.06,34.09,38.0,2036.0,388.0,1096.0,371.0,4.0625,262500.0,<1H OCEAN +-118.06,34.1,38.0,1960.0,330.0,874.0,308.0,4.8594,265900.0,<1H OCEAN +-118.06,34.09,36.0,1239.0,238.0,717.0,237.0,3.244,258100.0,<1H OCEAN +-118.06,34.09,40.0,1975.0,389.0,1116.0,378.0,4.2898,251600.0,<1H OCEAN +-118.07,34.09,40.0,1745.0,370.0,1293.0,357.0,2.5474,198100.0,<1H OCEAN +-118.07,34.09,35.0,1224.0,267.0,887.0,276.0,4.0987,202400.0,<1H OCEAN +-118.08,34.09,33.0,2557.0,578.0,1715.0,530.0,2.9196,208800.0,<1H OCEAN +-118.08,34.09,34.0,1823.0,457.0,1485.0,401.0,3.7222,207200.0,<1H OCEAN +-118.08,34.09,32.0,3214.0,718.0,2316.0,751.0,3.7066,206800.0,<1H OCEAN +-118.04,34.09,34.0,2001.0,388.0,1461.0,397.0,3.8304,183000.0,INLAND +-118.04,34.08,35.0,1148.0,258.0,975.0,253.0,4.037,173300.0,<1H OCEAN +-118.04,34.09,32.0,1339.0,334.0,817.0,349.0,2.8333,186000.0,INLAND +-118.05,34.09,23.0,602.0,135.0,409.0,123.0,3.5268,146400.0,<1H OCEAN +-118.02,34.09,32.0,1747.0,399.0,1199.0,402.0,3.4286,191800.0,INLAND +-118.02,34.08,29.0,2741.0,667.0,2449.0,677.0,3.6944,175200.0,INLAND +-118.02,34.09,24.0,2080.0,514.0,1976.0,478.0,2.6917,170000.0,INLAND +-118.03,34.09,29.0,1219.0,338.0,1152.0,323.0,2.8029,180900.0,INLAND +-118.03,34.08,32.0,1780.0,484.0,1732.0,454.0,2.4464,169600.0,INLAND +-118.0,34.1,34.0,2249.0,460.0,1544.0,441.0,3.4005,176300.0,INLAND +-118.01,34.09,29.0,3402.0,747.0,2331.0,690.0,3.6094,179200.0,INLAND +-118.01,34.1,27.0,2424.0,542.0,1713.0,557.0,3.8085,181400.0,INLAND +-118.01,34.1,35.0,2120.0,412.0,1375.0,405.0,3.4609,166300.0,INLAND +-118.0,34.08,29.0,2003.0,401.0,1520.0,364.0,3.994,195300.0,INLAND +-118.01,34.08,30.0,2281.0,522.0,1969.0,500.0,3.6531,166300.0,INLAND +-118.02,34.08,28.0,2769.0,631.0,2452.0,581.0,2.6071,175900.0,INLAND +-118.01,34.08,35.0,1852.0,358.0,1414.0,347.0,4.275,173600.0,INLAND +-118.01,34.09,32.0,1613.0,361.0,1283.0,404.0,3.1944,181700.0,INLAND +-118.0,34.08,23.0,1627.0,318.0,1279.0,289.0,4.6467,185100.0,INLAND +-118.02,34.08,31.0,2402.0,632.0,2830.0,603.0,2.3333,164200.0,INLAND +-118.03,34.08,37.0,775.0,179.0,726.0,183.0,3.25,159200.0,INLAND +-118.03,34.08,42.0,1597.0,373.0,1311.0,352.0,2.9688,162800.0,INLAND +-118.04,34.07,52.0,177.0,59.0,269.0,75.0,2.3611,131300.0,<1H OCEAN +-118.05,34.08,34.0,572.0,154.0,752.0,182.0,2.0433,138800.0,<1H OCEAN +-118.05,34.08,25.0,4909.0,1422.0,4983.0,1293.0,2.7254,143500.0,<1H OCEAN +-118.05,34.08,30.0,1572.0,427.0,1857.0,428.0,2.4914,159200.0,<1H OCEAN +-118.06,34.08,37.0,778.0,205.0,850.0,198.0,2.5119,180500.0,<1H OCEAN +-118.06,34.08,34.0,1197.0,260.0,942.0,245.0,3.4202,189100.0,<1H OCEAN +-118.06,34.08,42.0,1988.0,402.0,1239.0,402.0,3.2569,201500.0,<1H OCEAN +-118.07,34.08,38.0,2462.0,553.0,1843.0,538.0,3.2312,211900.0,<1H OCEAN +-118.07,34.07,19.0,1554.0,393.0,1427.0,370.0,3.125,207100.0,<1H OCEAN +-118.07,34.08,37.0,1210.0,252.0,733.0,243.0,2.806,214600.0,<1H OCEAN +-118.05,34.07,32.0,4492.0,1075.0,4119.0,1035.0,3.2373,183100.0,<1H OCEAN +-118.06,34.07,30.0,2308.0,674.0,3034.0,691.0,2.3929,184400.0,<1H OCEAN +-118.03,34.07,37.0,1091.0,269.0,905.0,242.0,3.1042,152000.0,<1H OCEAN +-118.03,34.06,36.0,1018.0,305.0,1307.0,292.0,2.1453,162100.0,<1H OCEAN +-118.04,34.07,39.0,1382.0,315.0,1090.0,308.0,3.8125,174000.0,<1H OCEAN +-118.04,34.07,39.0,2451.0,649.0,2536.0,648.0,2.3098,173100.0,<1H OCEAN +-118.01,34.07,22.0,6311.0,1572.0,6666.0,1456.0,2.9334,182600.0,INLAND +-118.01,34.06,26.0,557.0,153.0,455.0,196.0,2.7721,155400.0,INLAND +-118.01,34.07,24.0,5684.0,1485.0,6626.0,1481.0,2.2559,166800.0,INLAND +-118.02,34.07,21.0,3245.0,959.0,3528.0,887.0,2.3236,156300.0,INLAND +-118.03,34.06,31.0,1513.0,389.0,1396.0,364.0,2.4706,170600.0,<1H OCEAN +-118.03,34.06,24.0,2343.0,834.0,3537.0,824.0,2.1094,135200.0,<1H OCEAN +-118.03,34.06,27.0,2510.0,783.0,3481.0,726.0,2.4875,157800.0,<1H OCEAN +-118.04,34.06,31.0,957.0,295.0,1300.0,287.0,2.1383,153400.0,<1H OCEAN +-118.04,34.06,30.0,2019.0,551.0,2481.0,484.0,3.1875,154200.0,<1H OCEAN +-118.04,34.06,39.0,1258.0,245.0,988.0,228.0,3.2132,176100.0,<1H OCEAN +-118.05,34.06,32.0,2286.0,654.0,2991.0,655.0,2.1781,174500.0,<1H OCEAN +-118.05,34.06,45.0,531.0,164.0,722.0,166.0,2.1406,162500.0,<1H OCEAN +-118.05,34.06,25.0,1022.0,291.0,1570.0,297.0,3.023,142000.0,<1H OCEAN +-118.06,34.06,28.0,2127.0,625.0,3160.0,620.0,2.5763,173900.0,<1H OCEAN +-118.06,34.06,28.0,1778.0,605.0,2184.0,574.0,1.9189,165900.0,<1H OCEAN +-118.07,34.07,31.0,1370.0,284.0,1062.0,277.0,3.5156,199300.0,<1H OCEAN +-118.08,34.07,32.0,4089.0,975.0,3775.0,955.0,3.29,205500.0,<1H OCEAN +-118.07,34.06,34.0,2873.0,718.0,2758.0,699.0,2.5985,168600.0,<1H OCEAN +-118.04,34.05,32.0,1252.0,273.0,1337.0,263.0,2.6579,156800.0,<1H OCEAN +-118.05,34.05,36.0,1084.0,202.0,920.0,199.0,3.7279,162200.0,<1H OCEAN +-118.06,34.04,28.0,1516.0,363.0,1011.0,344.0,2.6288,160300.0,<1H OCEAN +-118.03,34.06,24.0,2469.0,731.0,3818.0,712.0,2.5445,151400.0,<1H OCEAN +-118.04,34.05,34.0,1058.0,230.0,1043.0,229.0,3.0536,137500.0,<1H OCEAN +-118.04,34.04,35.0,1734.0,363.0,1527.0,344.0,3.0,160600.0,<1H OCEAN +-118.04,34.04,32.0,1619.0,323.0,1492.0,342.0,3.5,165100.0,<1H OCEAN +-118.05,34.04,33.0,1348.0,,1098.0,257.0,4.2917,161200.0,<1H OCEAN +-118.06,34.03,36.0,21.0,7.0,21.0,9.0,2.375,175000.0,<1H OCEAN +-118.02,34.06,26.0,2929.0,970.0,3792.0,817.0,2.2577,173800.0,<1H OCEAN +-118.02,34.05,34.0,1610.0,513.0,2050.0,508.0,2.5562,156300.0,<1H OCEAN +-118.03,34.05,36.0,1359.0,317.0,1557.0,370.0,2.7955,157500.0,<1H OCEAN +-118.03,34.05,36.0,1345.0,331.0,1511.0,309.0,3.5129,142300.0,<1H OCEAN +-118.01,34.05,31.0,1135.0,355.0,1717.0,368.0,2.1602,161700.0,<1H OCEAN +-118.02,34.05,28.0,991.0,255.0,1145.0,265.0,2.3611,167000.0,<1H OCEAN +-118.02,34.05,33.0,2464.0,627.0,2932.0,568.0,3.0625,165800.0,<1H OCEAN +-118.02,34.04,28.0,6175.0,1449.0,5041.0,1408.0,2.8821,158100.0,<1H OCEAN +-118.09,34.18,34.0,3113.0,409.0,1139.0,418.0,10.2289,500001.0,INLAND +-118.07,34.17,34.0,4062.0,597.0,1525.0,566.0,7.8588,454800.0,INLAND +-118.07,34.17,36.0,2415.0,394.0,1215.0,413.0,5.5418,326100.0,INLAND +-118.07,34.17,35.0,2142.0,373.0,986.0,374.0,5.7051,326000.0,INLAND +-118.1,34.18,39.0,2321.0,336.0,880.0,339.0,7.7108,450000.0,INLAND +-118.11,34.19,50.0,1430.0,186.0,620.0,201.0,9.532,483300.0,INLAND +-118.12,34.19,52.0,2405.0,299.0,970.0,319.0,8.7835,444100.0,INLAND +-118.11,34.2,36.0,4915.0,725.0,1897.0,700.0,6.827,359400.0,INLAND +-118.13,34.2,46.0,2676.0,427.0,1022.0,395.0,6.4288,295500.0,INLAND +-118.13,34.19,48.0,2539.0,425.0,930.0,364.0,4.7269,303900.0,INLAND +-118.13,34.21,36.0,1449.0,235.0,621.0,210.0,6.1824,274100.0,INLAND +-118.13,34.2,45.0,1213.0,206.0,529.0,231.0,5.6629,234000.0,INLAND +-118.13,34.2,46.0,1271.0,236.0,573.0,210.0,4.9312,240200.0,INLAND +-118.13,34.19,43.0,1621.0,365.0,1015.0,329.0,2.92,242200.0,INLAND +-118.14,34.19,45.0,3595.0,619.0,1686.0,607.0,4.73,201000.0,INLAND +-118.14,34.2,39.0,2569.0,426.0,1282.0,432.0,5.0953,207400.0,INLAND +-118.15,34.2,37.0,1997.0,361.0,1037.0,363.0,3.7932,210300.0,INLAND +-118.15,34.2,52.0,1786.0,306.0,1018.0,322.0,4.1518,182100.0,INLAND +-118.15,34.2,46.0,1505.0,261.0,857.0,269.0,4.5,184200.0,INLAND +-118.15,34.21,34.0,2765.0,515.0,1422.0,438.0,5.4727,238900.0,INLAND +-118.15,34.19,48.0,1854.0,360.0,1126.0,382.0,3.2216,161600.0,<1H OCEAN +-118.15,34.19,47.0,1717.0,314.0,868.0,295.0,3.6094,160700.0,<1H OCEAN +-118.16,34.19,40.0,1840.0,358.0,1218.0,347.0,4.25,177900.0,<1H OCEAN +-118.16,34.2,43.0,1810.0,343.0,988.0,307.0,3.8203,176000.0,<1H OCEAN +-118.18,34.22,40.0,1983.0,298.0,853.0,271.0,5.9845,241700.0,<1H OCEAN +-118.19,34.22,32.0,10626.0,1504.0,4353.0,1482.0,9.8413,500001.0,<1H OCEAN +-118.21,34.22,37.0,2260.0,322.0,941.0,303.0,8.3695,500001.0,<1H OCEAN +-118.18,34.2,44.0,1473.0,250.0,668.0,239.0,8.72,415900.0,<1H OCEAN +-118.19,34.2,41.0,2031.0,294.0,859.0,302.0,7.419,483700.0,<1H OCEAN +-118.19,34.21,41.0,1602.0,228.0,680.0,225.0,6.553,500001.0,<1H OCEAN +-118.2,34.21,40.0,1477.0,228.0,609.0,224.0,7.8375,500001.0,<1H OCEAN +-118.2,34.21,42.0,1493.0,237.0,665.0,224.0,6.7571,443900.0,<1H OCEAN +-118.21,34.21,41.0,1676.0,263.0,757.0,255.0,4.7734,450800.0,<1H OCEAN +-118.22,34.23,34.0,3296.0,483.0,1268.0,478.0,8.4802,500001.0,<1H OCEAN +-118.21,34.22,39.0,3008.0,386.0,1240.0,370.0,9.2463,500001.0,<1H OCEAN +-118.22,34.22,39.0,2686.0,417.0,1094.0,402.0,7.0059,500001.0,<1H OCEAN +-118.23,34.22,37.0,1376.0,237.0,618.0,226.0,5.9771,431800.0,<1H OCEAN +-118.21,34.2,35.0,3646.0,552.0,1409.0,534.0,6.3794,500001.0,<1H OCEAN +-118.2,34.2,44.0,2890.0,438.0,1219.0,429.0,6.987,500001.0,<1H OCEAN +-118.18,34.19,48.0,1371.0,,528.0,155.0,15.0001,500001.0,<1H OCEAN +-118.19,34.19,34.0,2061.0,260.0,825.0,254.0,15.0001,500001.0,<1H OCEAN +-118.2,34.19,38.0,2176.0,266.0,798.0,243.0,15.0001,500001.0,<1H OCEAN +-118.18,34.17,43.0,4269.0,591.0,1467.0,582.0,9.0702,500001.0,<1H OCEAN +-118.18,34.16,34.0,5012.0,746.0,1699.0,715.0,9.4987,500001.0,<1H OCEAN +-118.15,34.18,46.0,2230.0,488.0,1985.0,456.0,2.2328,142100.0,<1H OCEAN +-118.15,34.17,46.0,2553.0,558.0,1740.0,492.0,2.0278,127500.0,<1H OCEAN +-118.16,34.18,44.0,1870.0,389.0,1345.0,391.0,1.8932,136100.0,<1H OCEAN +-118.16,34.18,48.0,568.0,145.0,559.0,135.0,2.4135,135700.0,<1H OCEAN +-118.16,34.17,52.0,1193.0,228.0,703.0,221.0,3.1741,163800.0,<1H OCEAN +-118.17,34.18,44.0,1401.0,246.0,607.0,271.0,2.8472,218800.0,<1H OCEAN +-118.15,34.18,42.0,1521.0,320.0,1118.0,311.0,3.3125,154900.0,<1H OCEAN +-118.16,34.19,42.0,2076.0,462.0,1641.0,436.0,2.2326,149200.0,<1H OCEAN +-118.16,34.19,44.0,2195.0,449.0,1377.0,417.0,3.5887,153500.0,<1H OCEAN +-118.17,34.18,38.0,1280.0,231.0,828.0,237.0,4.375,166700.0,<1H OCEAN +-118.17,34.19,45.0,1790.0,316.0,1035.0,312.0,4.0985,173100.0,<1H OCEAN +-118.13,34.19,42.0,2203.0,412.0,1012.0,377.0,4.0714,234000.0,INLAND +-118.14,34.18,47.0,3457.0,622.0,1700.0,579.0,3.5164,226500.0,<1H OCEAN +-118.14,34.19,49.0,1678.0,277.0,737.0,287.0,3.7222,237000.0,INLAND +-118.15,34.19,38.0,1750.0,411.0,1398.0,409.0,2.3967,163100.0,<1H OCEAN +-118.1,34.18,47.0,2168.0,352.0,902.0,361.0,5.894,300900.0,INLAND +-118.11,34.18,52.0,3571.0,510.0,1434.0,490.0,5.9009,376000.0,INLAND +-118.12,34.18,44.0,2357.0,342.0,891.0,337.0,6.3467,352700.0,INLAND +-118.13,34.18,52.0,3094.0,519.0,1309.0,488.0,6.4223,310900.0,INLAND +-118.1,34.17,46.0,1774.0,315.0,753.0,330.0,4.7241,279600.0,INLAND +-118.1,34.17,48.0,1111.0,229.0,421.0,202.0,3.2813,268100.0,INLAND +-118.11,34.17,50.0,3374.0,598.0,1484.0,569.0,4.99,261600.0,INLAND +-118.11,34.17,46.0,2837.0,592.0,1453.0,549.0,3.1115,234600.0,INLAND +-118.12,34.18,47.0,2344.0,513.0,1537.0,481.0,3.4777,230600.0,INLAND +-118.13,34.18,52.0,1464.0,211.0,603.0,226.0,5.8309,309100.0,INLAND +-118.12,34.17,37.0,2705.0,676.0,1551.0,608.0,2.2692,225000.0,INLAND +-118.12,34.17,52.0,1835.0,330.0,777.0,317.0,3.7159,315400.0,INLAND +-118.13,34.17,52.0,1784.0,368.0,966.0,345.0,3.6094,261500.0,<1H OCEAN +-118.14,34.18,52.0,1700.0,317.0,996.0,329.0,3.9688,175000.0,<1H OCEAN +-118.14,34.17,52.0,2667.0,486.0,1681.0,504.0,4.0524,173100.0,<1H OCEAN +-118.14,34.17,42.0,2757.0,713.0,2112.0,653.0,2.7148,166800.0,<1H OCEAN +-118.14,34.18,50.0,1493.0,326.0,1000.0,323.0,3.3068,154400.0,<1H OCEAN +-118.14,34.17,40.0,1054.0,251.0,1056.0,276.0,2.3,146700.0,<1H OCEAN +-118.15,34.18,45.0,2612.0,664.0,3117.0,584.0,2.3029,148800.0,<1H OCEAN +-118.15,34.16,18.0,1711.0,383.0,1474.0,415.0,1.2891,181300.0,<1H OCEAN +-118.15,34.16,38.0,2471.0,529.0,1661.0,441.0,2.2765,146600.0,<1H OCEAN +-118.16,34.16,44.0,1284.0,278.0,925.0,261.0,1.7321,178400.0,<1H OCEAN +-118.16,34.17,46.0,1508.0,261.0,674.0,255.0,3.5909,155400.0,<1H OCEAN +-118.16,34.16,43.0,1276.0,226.0,545.0,209.0,4.1518,230700.0,<1H OCEAN +-118.16,34.16,52.0,1576.0,239.0,696.0,249.0,6.07,261800.0,<1H OCEAN +-118.16,34.15,19.0,1721.0,290.0,571.0,278.0,6.6031,500001.0,<1H OCEAN +-118.16,34.15,17.0,821.0,163.0,229.0,164.0,7.3715,263000.0,<1H OCEAN +-118.14,34.16,39.0,2776.0,840.0,2546.0,773.0,2.575,153500.0,<1H OCEAN +-118.14,34.15,52.0,407.0,160.0,227.0,148.0,1.5156,187500.0,<1H OCEAN +-118.15,34.15,52.0,275.0,123.0,273.0,111.0,1.1667,500001.0,<1H OCEAN +-118.15,34.16,52.0,1925.0,597.0,2258.0,594.0,1.6921,162500.0,<1H OCEAN +-118.15,34.15,49.0,806.0,199.0,698.0,172.0,2.3654,137500.0,<1H OCEAN +-118.14,34.17,34.0,2384.0,604.0,2073.0,540.0,2.3062,158000.0,<1H OCEAN +-118.14,34.16,30.0,2598.0,757.0,2869.0,769.0,2.1377,142300.0,<1H OCEAN +-118.15,34.16,20.0,2410.0,632.0,2135.0,578.0,1.6887,148600.0,<1H OCEAN +-118.15,34.17,36.0,930.0,280.0,1024.0,300.0,1.0846,146400.0,<1H OCEAN +-118.13,34.17,49.0,1962.0,435.0,1329.0,457.0,3.2898,200000.0,<1H OCEAN +-118.14,34.16,36.0,2973.0,807.0,2846.0,784.0,2.6217,156300.0,<1H OCEAN +-118.14,34.17,52.0,2687.0,600.0,1716.0,544.0,2.7201,205700.0,<1H OCEAN +-118.13,34.16,36.0,2162.0,658.0,1337.0,590.0,2.2095,176700.0,<1H OCEAN +-118.13,34.15,24.0,1125.0,341.0,579.0,321.0,2.8125,141700.0,<1H OCEAN +-118.14,34.15,41.0,1256.0,407.0,855.0,383.0,1.9923,500001.0,<1H OCEAN +-118.14,34.15,17.0,1896.0,674.0,971.0,652.0,0.8438,175000.0,<1H OCEAN +-118.14,34.16,38.0,1843.0,565.0,1449.0,524.0,2.2174,215400.0,<1H OCEAN +-118.12,34.16,30.0,1762.0,416.0,940.0,398.0,2.8631,188600.0,<1H OCEAN +-118.13,34.16,33.0,2682.0,716.0,2050.0,692.0,2.4817,169500.0,<1H OCEAN +-118.13,34.15,18.0,1665.0,477.0,1095.0,390.0,2.6038,155600.0,<1H OCEAN +-118.12,34.15,19.0,557.0,216.0,673.0,212.0,2.1763,168800.0,<1H OCEAN +-118.12,34.15,22.0,1671.0,480.0,1005.0,443.0,3.0119,171400.0,<1H OCEAN +-118.13,34.15,9.0,2099.0,625.0,1252.0,554.0,3.1875,173100.0,<1H OCEAN +-118.13,34.15,28.0,1119.0,334.0,739.0,323.0,2.5903,125000.0,<1H OCEAN +-118.12,34.17,52.0,2948.0,542.0,1363.0,495.0,4.7098,287900.0,INLAND +-118.13,34.16,52.0,1872.0,357.0,984.0,364.0,4.0,250400.0,<1H OCEAN +-118.13,34.16,52.0,1596.0,314.0,1024.0,292.0,3.6719,227900.0,<1H OCEAN +-118.13,34.16,52.0,1787.0,427.0,1107.0,410.0,2.5664,215000.0,<1H OCEAN +-118.09,34.17,36.0,2875.0,552.0,1131.0,458.0,4.3083,269300.0,INLAND +-118.1,34.16,44.0,2795.0,496.0,1235.0,469.0,4.2386,283700.0,INLAND +-118.1,34.17,44.0,4505.0,894.0,2296.0,899.0,3.4811,300500.0,INLAND +-118.12,34.17,52.0,2166.0,483.0,1308.0,467.0,3.0417,222600.0,INLAND +-118.11,34.16,52.0,3158.0,459.0,1229.0,444.0,5.4223,325600.0,INLAND +-118.11,34.16,52.0,2489.0,437.0,1101.0,438.0,4.2065,320300.0,INLAND +-118.11,34.16,52.0,1353.0,274.0,852.0,306.0,3.4583,239900.0,INLAND +-118.11,34.15,40.0,1950.0,509.0,1038.0,438.0,2.6172,196100.0,<1H OCEAN +-118.11,34.15,26.0,2193.0,558.0,1186.0,559.0,3.6474,184100.0,<1H OCEAN +-118.12,34.15,35.0,1760.0,447.0,984.0,384.0,3.4167,198200.0,<1H OCEAN +-118.12,34.16,52.0,2218.0,437.0,1211.0,422.0,5.0237,241900.0,<1H OCEAN +-118.1,34.16,46.0,2863.0,513.0,1412.0,498.0,5.3272,330200.0,INLAND +-118.1,34.15,32.0,978.0,227.0,543.0,211.0,3.0096,199000.0,INLAND +-118.1,34.15,14.0,1442.0,369.0,782.0,343.0,2.7431,177500.0,INLAND +-118.08,34.16,42.0,3490.0,665.0,1713.0,620.0,4.5461,242400.0,INLAND +-118.09,34.15,46.0,271.0,74.0,150.0,55.0,2.2321,237500.0,INLAND +-118.09,34.15,52.0,670.0,141.0,268.0,110.0,3.5568,205000.0,INLAND +-118.09,34.15,49.0,1467.0,259.0,688.0,260.0,4.3452,260100.0,INLAND +-118.09,34.16,45.0,2199.0,358.0,942.0,353.0,5.0393,321100.0,INLAND +-118.07,34.16,39.0,1804.0,265.0,730.0,276.0,6.4761,397500.0,INLAND +-118.07,34.16,35.0,2459.0,438.0,970.0,437.0,4.2143,369400.0,INLAND +-118.07,34.15,45.0,1095.0,237.0,672.0,234.0,3.4087,209200.0,INLAND +-118.07,34.14,42.0,3200.0,685.0,1668.0,628.0,3.375,260400.0,INLAND +-118.08,34.15,28.0,238.0,58.0,142.0,31.0,0.4999,500001.0,INLAND +-118.08,34.14,45.0,2923.0,604.0,1903.0,560.0,3.1729,218700.0,INLAND +-118.08,34.14,52.0,1282.0,189.0,431.0,187.0,6.1159,470800.0,INLAND +-118.08,34.13,46.0,1238.0,147.0,377.0,145.0,8.4546,500001.0,INLAND +-118.08,34.13,35.0,1897.0,279.0,733.0,291.0,7.4185,500001.0,INLAND +-118.08,34.14,42.0,2690.0,589.0,1149.0,535.0,3.88,281100.0,INLAND +-118.09,34.14,40.0,3092.0,549.0,1457.0,536.0,5.3377,373800.0,INLAND +-118.09,34.15,45.0,1345.0,356.0,749.0,327.0,2.8007,210900.0,INLAND +-118.1,34.14,45.0,3066.0,659.0,1287.0,625.0,3.5804,324400.0,<1H OCEAN +-118.11,34.14,52.0,2401.0,332.0,810.0,308.0,6.0948,358700.0,<1H OCEAN +-118.1,34.14,26.0,6262.0,1645.0,3001.0,1505.0,3.6572,213200.0,<1H OCEAN +-118.11,34.14,44.0,3298.0,615.0,1417.0,643.0,4.1324,434800.0,<1H OCEAN +-118.12,34.14,52.0,2337.0,352.0,981.0,328.0,5.8692,490400.0,<1H OCEAN +-118.12,34.14,25.0,3420.0,977.0,1718.0,947.0,3.1033,217900.0,<1H OCEAN +-118.13,34.13,39.0,2099.0,397.0,1500.0,380.0,4.8304,493200.0,<1H OCEAN +-118.13,34.14,23.0,5465.0,1494.0,2511.0,1359.0,3.4531,210900.0,<1H OCEAN +-118.13,34.14,29.0,3559.0,1034.0,1658.0,965.0,3.2643,163900.0,<1H OCEAN +-118.14,34.14,24.0,10239.0,2823.0,4210.0,2565.0,3.6997,225000.0,<1H OCEAN +-118.14,34.14,17.0,3404.0,1011.0,1694.0,949.0,2.9511,282300.0,<1H OCEAN +-118.15,34.14,27.0,1499.0,426.0,755.0,414.0,3.875,258300.0,<1H OCEAN +-118.15,34.14,45.0,543.0,191.0,454.0,181.0,2.3,55000.0,<1H OCEAN +-118.15,34.14,52.0,403.0,117.0,361.0,105.0,1.625,187500.0,<1H OCEAN +-118.16,34.14,27.0,1551.0,254.0,816.0,233.0,8.2435,500001.0,<1H OCEAN +-118.16,34.14,41.0,3039.0,482.0,973.0,446.0,7.4817,500001.0,<1H OCEAN +-118.17,34.14,45.0,2257.0,285.0,759.0,305.0,11.7894,500001.0,<1H OCEAN +-118.18,34.13,44.0,2734.0,415.0,1057.0,424.0,7.9213,477800.0,<1H OCEAN +-118.18,34.13,39.0,2902.0,460.0,1007.0,420.0,6.1953,363000.0,<1H OCEAN +-118.18,34.14,38.0,3039.0,487.0,1131.0,465.0,7.7116,360900.0,<1H OCEAN +-118.15,34.13,30.0,2763.0,520.0,1143.0,465.0,4.7298,500001.0,<1H OCEAN +-118.15,34.13,50.0,2443.0,494.0,947.0,451.0,4.7344,314700.0,<1H OCEAN +-118.16,34.13,36.0,4003.0,647.0,1337.0,631.0,7.723,500001.0,<1H OCEAN +-118.13,34.13,52.0,2826.0,381.0,924.0,365.0,7.9976,500001.0,<1H OCEAN +-118.13,34.12,46.0,3156.0,430.0,1109.0,423.0,10.7397,500001.0,<1H OCEAN +-118.14,34.13,16.0,3569.0,821.0,1505.0,783.0,4.9167,251100.0,<1H OCEAN +-118.14,34.13,49.0,4438.0,803.0,1650.0,741.0,5.1072,479700.0,<1H OCEAN +-118.15,34.13,34.0,824.0,224.0,430.0,213.0,3.6389,215000.0,<1H OCEAN +-118.12,34.13,52.0,2935.0,341.0,975.0,327.0,11.706,500001.0,<1H OCEAN +-118.11,34.12,48.0,2476.0,313.0,900.0,303.0,10.6767,500001.0,<1H OCEAN +-118.11,34.12,52.0,2954.0,371.0,1152.0,347.0,11.5609,500001.0,<1H OCEAN +-118.12,34.12,52.0,2907.0,317.0,956.0,279.0,15.0001,500001.0,<1H OCEAN +-118.12,34.11,52.0,2787.0,353.0,1057.0,364.0,10.2317,500001.0,<1H OCEAN +-118.13,34.11,52.0,2568.0,345.0,1102.0,345.0,9.1373,500001.0,<1H OCEAN +-118.14,34.11,52.0,2742.0,422.0,1153.0,414.0,8.1124,500001.0,<1H OCEAN +-118.1,34.13,44.0,1917.0,265.0,754.0,257.0,12.4237,500001.0,<1H OCEAN +-118.1,34.13,44.0,1745.0,237.0,693.0,248.0,9.7912,500001.0,<1H OCEAN +-118.09,34.12,45.0,2966.0,415.0,1231.0,409.0,7.8347,500001.0,<1H OCEAN +-118.1,34.12,49.0,3783.0,579.0,1601.0,539.0,6.3013,500001.0,<1H OCEAN +-118.1,34.12,50.0,1835.0,231.0,636.0,211.0,11.6471,500001.0,<1H OCEAN +-118.1,34.13,47.0,2234.0,276.0,749.0,260.0,15.0001,500001.0,<1H OCEAN +-118.08,34.13,39.0,788.0,128.0,413.0,139.0,5.9546,396700.0,INLAND +-118.08,34.12,41.0,1598.0,280.0,807.0,282.0,5.5067,325000.0,<1H OCEAN +-118.09,34.12,38.0,2638.0,432.0,1284.0,433.0,5.4536,342700.0,<1H OCEAN +-118.09,34.12,38.0,1713.0,285.0,779.0,286.0,5.6152,359900.0,<1H OCEAN +-118.07,34.13,27.0,3787.0,913.0,1992.0,853.0,3.301,251200.0,INLAND +-118.08,34.13,28.0,4465.0,985.0,2273.0,949.0,3.5671,228500.0,INLAND +-118.07,34.12,30.0,2201.0,559.0,1194.0,531.0,4.1136,279900.0,INLAND +-118.07,34.12,43.0,1554.0,287.0,802.0,277.0,4.2312,272600.0,INLAND +-118.08,34.12,34.0,2921.0,641.0,1541.0,562.0,3.6827,264100.0,<1H OCEAN +-118.08,34.12,27.0,1685.0,341.0,757.0,317.0,4.2434,270500.0,<1H OCEAN +-118.07,34.11,41.0,2869.0,563.0,1627.0,533.0,5.0736,270700.0,<1H OCEAN +-118.07,34.11,47.0,832.0,194.0,419.0,156.0,3.1576,225000.0,<1H OCEAN +-118.08,34.11,42.0,2628.0,525.0,1494.0,523.0,3.9464,257200.0,<1H OCEAN +-118.08,34.11,42.0,1969.0,353.0,927.0,354.0,5.5924,285300.0,<1H OCEAN +-118.08,34.1,32.0,2830.0,645.0,1500.0,527.0,3.0819,214600.0,<1H OCEAN +-118.09,34.11,36.0,2966.0,527.0,1231.0,482.0,4.6442,316800.0,<1H OCEAN +-118.09,34.11,45.0,1883.0,275.0,764.0,289.0,6.5078,414800.0,<1H OCEAN +-118.1,34.1,52.0,1788.0,313.0,792.0,294.0,3.75,280000.0,<1H OCEAN +-118.1,34.11,49.0,3367.0,523.0,1317.0,495.0,6.706,351400.0,<1H OCEAN +-118.11,34.11,50.0,2131.0,294.0,753.0,284.0,6.7099,352200.0,<1H OCEAN +-118.11,34.1,49.0,2812.0,478.0,1329.0,490.0,5.2503,292900.0,<1H OCEAN +-118.12,34.11,48.0,2124.0,319.0,785.0,319.0,5.2131,359600.0,<1H OCEAN +-118.12,34.1,49.0,2057.0,430.0,1103.0,414.0,4.0556,282600.0,<1H OCEAN +-118.12,34.1,34.0,2918.0,555.0,1435.0,568.0,4.2344,306300.0,<1H OCEAN +-118.13,34.1,19.0,2742.0,756.0,1396.0,703.0,2.5663,197500.0,<1H OCEAN +-118.13,34.09,21.0,3862.0,1186.0,2773.0,1102.0,2.7816,188200.0,<1H OCEAN +-118.13,34.1,26.0,3050.0,825.0,2153.0,772.0,3.1103,214100.0,<1H OCEAN +-118.14,34.09,20.0,3447.0,1007.0,2622.0,934.0,2.918,208700.0,<1H OCEAN +-118.13,34.11,45.0,1780.0,289.0,755.0,328.0,4.825,351100.0,<1H OCEAN +-118.13,34.1,24.0,4670.0,1185.0,2478.0,1107.0,3.1975,252400.0,<1H OCEAN +-118.14,34.1,52.0,4061.0,861.0,2290.0,790.0,2.8919,258400.0,<1H OCEAN +-118.14,34.11,52.0,3367.0,545.0,1427.0,535.0,5.2292,444500.0,<1H OCEAN +-118.15,34.1,52.0,4325.0,823.0,1927.0,795.0,3.9485,419100.0,<1H OCEAN +-118.15,34.11,52.0,2375.0,369.0,930.0,351.0,7.4111,469100.0,<1H OCEAN +-118.15,34.11,52.0,1746.0,330.0,704.0,306.0,3.7895,364800.0,<1H OCEAN +-118.15,34.11,52.0,1000.0,192.0,363.0,158.0,4.2981,352800.0,<1H OCEAN +-118.15,34.12,36.0,6119.0,1513.0,2719.0,1402.0,3.8427,319700.0,<1H OCEAN +-118.15,34.12,43.0,1810.0,427.0,742.0,429.0,3.8529,350000.0,<1H OCEAN +-118.15,34.12,52.0,1518.0,344.0,725.0,296.0,3.4018,204500.0,<1H OCEAN +-118.15,34.12,49.0,1789.0,288.0,848.0,311.0,6.0199,500000.0,<1H OCEAN +-118.16,34.12,38.0,2231.0,489.0,940.0,484.0,5.4165,435100.0,<1H OCEAN +-118.17,34.12,37.0,2246.0,481.0,995.0,459.0,4.2944,354700.0,<1H OCEAN +-118.15,34.11,39.0,2618.0,582.0,1314.0,532.0,3.5875,309300.0,<1H OCEAN +-118.15,34.1,39.0,3856.0,867.0,1847.0,830.0,3.4559,364900.0,<1H OCEAN +-118.16,34.11,31.0,5715.0,1154.0,2639.0,1079.0,4.1661,364400.0,<1H OCEAN +-118.16,34.11,48.0,1091.0,236.0,632.0,234.0,3.7235,263600.0,<1H OCEAN +-118.17,34.11,39.0,1758.0,436.0,892.0,447.0,3.6406,278900.0,<1H OCEAN +-118.17,34.11,26.0,4971.0,996.0,2370.0,932.0,4.9676,381400.0,<1H OCEAN +-118.17,34.1,25.0,4444.0,647.0,1922.0,652.0,8.058,477300.0,<1H OCEAN +-118.14,34.1,27.0,4073.0,1013.0,2411.0,933.0,3.108,231000.0,<1H OCEAN +-118.15,34.09,27.0,1935.0,460.0,1456.0,382.0,2.8062,192800.0,<1H OCEAN +-118.15,34.09,52.0,2203.0,430.0,1238.0,403.0,4.4306,225800.0,<1H OCEAN +-118.16,34.09,52.0,1722.0,448.0,1122.0,425.0,3.1204,224000.0,<1H OCEAN +-118.15,34.1,36.0,3514.0,818.0,2277.0,828.0,3.1211,229300.0,<1H OCEAN +-118.15,34.08,44.0,1053.0,251.0,941.0,256.0,3.125,205600.0,<1H OCEAN +-118.15,34.08,48.0,3697.0,816.0,2446.0,787.0,3.3988,199200.0,<1H OCEAN +-118.14,34.09,28.0,4164.0,1127.0,2934.0,1014.0,2.7483,218800.0,<1H OCEAN +-118.14,34.09,38.0,1745.0,457.0,1547.0,460.0,2.85,219000.0,<1H OCEAN +-118.14,34.08,24.0,3988.0,1098.0,2909.0,1034.0,2.7036,170000.0,<1H OCEAN +-118.14,34.08,30.0,1433.0,397.0,1110.0,346.0,2.3464,191700.0,<1H OCEAN +-118.14,34.08,24.0,2999.0,786.0,2937.0,796.0,2.9405,217800.0,<1H OCEAN +-118.14,34.07,52.0,695.0,145.0,523.0,170.0,3.665,220400.0,<1H OCEAN +-118.11,34.1,44.0,2012.0,435.0,1454.0,456.0,3.3229,226600.0,<1H OCEAN +-118.12,34.09,25.0,4870.0,1371.0,3518.0,1296.0,3.2307,188400.0,<1H OCEAN +-118.13,34.09,42.0,700.0,212.0,662.0,210.0,3.0078,191700.0,<1H OCEAN +-118.13,34.09,42.0,2562.0,781.0,1936.0,687.0,2.2214,219000.0,<1H OCEAN +-118.13,34.08,40.0,1931.0,449.0,1367.0,446.0,2.575,228400.0,<1H OCEAN +-118.09,34.1,27.0,6010.0,1532.0,3620.0,1445.0,2.7436,201700.0,<1H OCEAN +-118.1,34.1,41.0,1379.0,315.0,1249.0,309.0,2.6553,183100.0,<1H OCEAN +-118.09,34.09,36.0,1068.0,246.0,949.0,250.0,2.3462,188500.0,<1H OCEAN +-118.1,34.09,44.0,2352.0,484.0,1517.0,463.0,4.2833,258000.0,<1H OCEAN +-118.1,34.1,29.0,1937.0,448.0,1352.0,433.0,3.81,234600.0,<1H OCEAN +-118.11,34.1,20.0,3090.0,802.0,2109.0,738.0,3.3801,192500.0,<1H OCEAN +-118.1,34.1,34.0,2578.0,645.0,1628.0,617.0,2.34,210900.0,<1H OCEAN +-118.07,34.1,34.0,2253.0,522.0,1262.0,511.0,3.4375,259800.0,<1H OCEAN +-118.07,34.09,33.0,2178.0,445.0,1153.0,400.0,3.6083,212000.0,<1H OCEAN +-118.07,34.1,28.0,676.0,177.0,543.0,185.0,3.2361,187500.0,<1H OCEAN +-118.07,34.1,32.0,4275.0,,2812.0,1012.0,3.3512,214100.0,<1H OCEAN +-118.08,34.1,36.0,2679.0,548.0,1605.0,533.0,3.5313,213200.0,<1H OCEAN +-118.09,34.1,40.0,1904.0,393.0,1183.0,364.0,3.6696,210400.0,<1H OCEAN +-118.08,34.08,38.0,1889.0,407.0,1330.0,396.0,3.9219,205200.0,<1H OCEAN +-118.08,34.08,43.0,1716.0,402.0,1343.0,386.0,2.9688,211400.0,<1H OCEAN +-118.09,34.09,40.0,855.0,208.0,745.0,222.0,3.0125,224000.0,<1H OCEAN +-118.09,34.08,34.0,1513.0,384.0,986.0,336.0,2.6901,235600.0,<1H OCEAN +-118.09,34.08,33.0,1430.0,344.0,1165.0,328.0,3.0357,206000.0,<1H OCEAN +-118.09,34.08,42.0,1003.0,236.0,769.0,231.0,3.1607,218300.0,<1H OCEAN +-118.1,34.09,42.0,1460.0,289.0,829.0,273.0,4.875,227300.0,<1H OCEAN +-118.1,34.08,37.0,2894.0,659.0,1977.0,636.0,2.543,208100.0,<1H OCEAN +-118.1,34.08,24.0,4510.0,1296.0,3985.0,1240.0,2.6884,204600.0,<1H OCEAN +-118.1,34.09,46.0,2822.0,525.0,1434.0,520.0,3.8906,238300.0,<1H OCEAN +-118.11,34.08,42.0,3172.0,644.0,1829.0,642.0,3.3966,243200.0,<1H OCEAN +-118.11,34.08,30.0,2350.0,472.0,945.0,467.0,3.3421,201000.0,<1H OCEAN +-118.11,34.08,45.0,1106.0,226.0,779.0,205.0,4.5446,244800.0,<1H OCEAN +-118.11,34.07,46.0,1130.0,229.0,698.0,209.0,5.2719,244400.0,<1H OCEAN +-118.12,34.09,25.0,3603.0,1003.0,2719.0,913.0,2.6981,208000.0,<1H OCEAN +-118.12,34.08,52.0,1437.0,290.0,980.0,282.0,5.3032,245700.0,<1H OCEAN +-118.12,34.08,49.0,1782.0,374.0,1010.0,367.0,3.1583,268200.0,<1H OCEAN +-118.13,34.08,34.0,3848.0,991.0,2814.0,972.0,2.6716,227100.0,<1H OCEAN +-118.12,34.08,35.0,2248.0,,1762.0,622.0,3.0,253900.0,<1H OCEAN +-118.13,34.08,35.0,2517.0,662.0,1883.0,607.0,2.5787,223000.0,<1H OCEAN +-118.12,34.08,36.0,2433.0,585.0,1565.0,563.0,3.2344,234900.0,<1H OCEAN +-118.13,34.07,32.0,1880.0,428.0,1404.0,424.0,3.085,220500.0,<1H OCEAN +-118.12,34.07,45.0,1770.0,423.0,1410.0,389.0,3.0592,212500.0,<1H OCEAN +-118.12,34.07,43.0,1050.0,252.0,820.0,244.0,2.025,215600.0,<1H OCEAN +-118.12,34.06,23.0,1190.0,347.0,965.0,327.0,2.2261,211800.0,<1H OCEAN +-118.13,34.06,17.0,1714.0,572.0,1590.0,568.0,1.1875,183900.0,<1H OCEAN +-118.13,34.07,20.0,2130.0,654.0,1870.0,578.0,2.3664,192200.0,<1H OCEAN +-118.12,34.06,17.0,5137.0,1614.0,4945.0,1535.0,2.4599,181600.0,<1H OCEAN +-118.11,34.07,19.0,3215.0,907.0,3072.0,870.0,2.3393,202300.0,<1H OCEAN +-118.11,34.06,18.0,2609.0,721.0,2221.0,703.0,2.3224,192300.0,<1H OCEAN +-118.14,34.07,42.0,1036.0,199.0,656.0,215.0,4.1902,235000.0,<1H OCEAN +-118.14,34.06,39.0,2390.0,444.0,1246.0,422.0,3.7857,245700.0,<1H OCEAN +-118.14,34.06,37.0,1339.0,258.0,706.0,238.0,4.7569,253800.0,<1H OCEAN +-118.15,34.07,52.0,1983.0,344.0,887.0,331.0,3.2875,234400.0,<1H OCEAN +-118.15,34.07,44.0,1626.0,383.0,1063.0,334.0,2.4348,220700.0,<1H OCEAN +-118.16,34.07,47.0,2994.0,543.0,1651.0,561.0,3.8644,241500.0,<1H OCEAN +-118.16,34.07,42.0,3836.0,777.0,2118.0,754.0,3.6364,254600.0,<1H OCEAN +-118.15,34.07,40.0,1072.0,204.0,940.0,200.0,3.125,242700.0,<1H OCEAN +-118.15,34.06,28.0,3855.0,922.0,2517.0,874.0,3.505,204300.0,<1H OCEAN +-118.16,34.06,25.0,4284.0,741.0,2163.0,701.0,6.1509,315100.0,<1H OCEAN +-118.16,34.06,27.0,1675.0,274.0,785.0,275.0,5.828,301100.0,<1H OCEAN +-118.14,34.05,25.0,5478.0,1136.0,3062.0,1096.0,3.4118,341100.0,<1H OCEAN +-118.15,34.05,31.0,3362.0,799.0,1939.0,754.0,3.5089,305800.0,<1H OCEAN +-118.15,34.05,33.0,3287.0,649.0,1783.0,653.0,3.8472,293300.0,<1H OCEAN +-118.13,34.06,30.0,1692.0,398.0,1130.0,365.0,2.8672,198500.0,<1H OCEAN +-118.14,34.06,27.0,5257.0,1082.0,3496.0,1036.0,3.3906,237200.0,<1H OCEAN +-118.13,34.05,35.0,3229.0,616.0,1879.0,595.0,3.9531,268400.0,<1H OCEAN +-118.14,34.05,39.0,1880.0,367.0,954.0,349.0,3.875,236400.0,<1H OCEAN +-118.12,34.06,35.0,1729.0,438.0,1308.0,412.0,2.5321,197200.0,<1H OCEAN +-118.12,34.06,25.0,1137.0,293.0,800.0,281.0,2.4286,233300.0,<1H OCEAN +-118.12,34.06,25.0,1526.0,388.0,1304.0,378.0,3.1892,214700.0,<1H OCEAN +-118.11,34.06,32.0,1273.0,344.0,1148.0,368.0,2.1061,214700.0,<1H OCEAN +-118.11,34.06,16.0,2416.0,565.0,1750.0,514.0,2.8229,163700.0,<1H OCEAN +-118.11,34.06,14.0,2628.0,668.0,2208.0,574.0,2.9764,160300.0,<1H OCEAN +-118.09,34.07,45.0,593.0,133.0,481.0,128.0,2.5938,199300.0,<1H OCEAN +-118.09,34.07,38.0,1036.0,226.0,1058.0,235.0,3.2578,184200.0,<1H OCEAN +-118.1,34.08,21.0,1349.0,352.0,1188.0,330.0,2.5,182100.0,<1H OCEAN +-118.1,34.07,29.0,1179.0,313.0,1255.0,308.0,2.5964,176800.0,<1H OCEAN +-118.11,34.07,39.0,1270.0,299.0,1073.0,278.0,3.3088,186600.0,<1H OCEAN +-118.1,34.07,36.0,1240.0,349.0,1383.0,338.0,2.4931,170300.0,<1H OCEAN +-118.1,34.07,36.0,3661.0,956.0,3816.0,931.0,2.5104,185000.0,<1H OCEAN +-118.09,34.07,26.0,794.0,182.0,709.0,170.0,3.175,170800.0,<1H OCEAN +-118.1,34.07,33.0,3437.0,1081.0,3817.0,1042.0,2.25,203700.0,<1H OCEAN +-118.09,34.07,45.0,726.0,146.0,568.0,160.0,3.0347,183200.0,<1H OCEAN +-118.09,34.07,31.0,1054.0,252.0,1032.0,258.0,2.3424,188500.0,<1H OCEAN +-118.09,34.06,30.0,1980.0,552.0,2264.0,511.0,2.6094,179400.0,<1H OCEAN +-118.09,34.06,38.0,3230.0,840.0,3485.0,827.0,2.629,171600.0,<1H OCEAN +-118.08,34.04,20.0,5841.0,1146.0,3273.0,1131.0,4.7222,185100.0,<1H OCEAN +-118.09,34.06,31.0,1146.0,289.0,1163.0,258.0,2.2083,185600.0,<1H OCEAN +-118.1,34.06,31.0,2852.0,740.0,3100.0,725.0,2.9524,178800.0,<1H OCEAN +-118.1,34.06,36.0,1463.0,369.0,1492.0,366.0,3.25,179200.0,<1H OCEAN +-118.11,34.06,30.0,1547.0,436.0,1700.0,410.0,2.5488,187500.0,<1H OCEAN +-118.09,34.05,22.0,1764.0,357.0,1379.0,363.0,3.5357,199000.0,<1H OCEAN +-118.1,34.05,31.0,3559.0,734.0,2975.0,715.0,3.756,183300.0,<1H OCEAN +-118.1,34.05,26.0,1495.0,328.0,1296.0,304.0,2.913,152300.0,<1H OCEAN +-118.09,34.04,18.0,5580.0,1369.0,3842.0,1276.0,3.6512,168500.0,<1H OCEAN +-118.09,34.04,24.0,1543.0,257.0,824.0,271.0,6.4385,272600.0,<1H OCEAN +-118.11,34.05,23.0,3436.0,565.0,1729.0,529.0,5.9941,266700.0,<1H OCEAN +-118.11,34.04,28.0,3913.0,696.0,2264.0,697.0,5.2446,258000.0,<1H OCEAN +-118.12,34.05,32.0,3775.0,786.0,2416.0,792.0,3.6625,247600.0,<1H OCEAN +-118.12,34.04,35.0,1038.0,209.0,598.0,190.0,5.9214,254900.0,<1H OCEAN +-118.13,34.04,36.0,1938.0,364.0,1118.0,374.0,3.5833,227300.0,<1H OCEAN +-118.13,34.04,40.0,1444.0,312.0,881.0,303.0,3.1083,220500.0,<1H OCEAN +-118.14,34.03,38.0,1447.0,293.0,1042.0,284.0,4.1375,211500.0,<1H OCEAN +-118.15,34.04,33.0,818.0,195.0,664.0,198.0,2.1944,203300.0,<1H OCEAN +-118.14,34.04,43.0,1949.0,464.0,1216.0,457.0,3.3214,209300.0,<1H OCEAN +-118.14,34.04,40.0,1966.0,391.0,1120.0,362.0,3.7109,198800.0,<1H OCEAN +-118.14,34.04,37.0,1129.0,212.0,509.0,202.0,2.6146,243200.0,<1H OCEAN +-118.11,34.03,36.0,1493.0,316.0,989.0,293.0,3.5272,213700.0,<1H OCEAN +-118.13,34.04,42.0,2205.0,451.0,1392.0,423.0,4.3646,211400.0,<1H OCEAN +-118.12,34.04,34.0,2103.0,427.0,1355.0,434.0,4.5795,235300.0,<1H OCEAN +-118.12,34.04,35.0,1064.0,203.0,608.0,201.0,4.0938,246900.0,<1H OCEAN +-117.93,33.95,31.0,3600.0,468.0,1382.0,435.0,7.4597,500001.0,<1H OCEAN +-117.95,33.95,29.0,4943.0,674.0,1913.0,641.0,6.8189,379300.0,<1H OCEAN +-117.95,33.97,33.0,1113.0,145.0,424.0,137.0,8.3474,500001.0,<1H OCEAN +-117.97,33.96,30.0,4873.0,667.0,1995.0,638.0,7.2472,441900.0,<1H OCEAN +-117.98,33.95,35.0,4055.0,652.0,1758.0,639.0,6.1898,282400.0,<1H OCEAN +-117.98,33.94,36.0,4297.0,717.0,2038.0,700.0,5.2851,258800.0,<1H OCEAN +-117.99,33.95,30.0,2217.0,284.0,851.0,291.0,10.4835,498600.0,<1H OCEAN +-118.0,33.95,35.0,1431.0,210.0,505.0,213.0,6.8109,401000.0,<1H OCEAN +-118.01,33.95,35.0,1755.0,322.0,774.0,290.0,5.0861,296700.0,<1H OCEAN +-118.0,33.96,37.0,2414.0,323.0,878.0,305.0,9.1541,453800.0,<1H OCEAN +-117.99,33.97,18.0,4078.0,484.0,1490.0,482.0,10.8034,500001.0,<1H OCEAN +-118.05,34.02,31.0,40.0,8.0,25.0,7.0,2.125,375000.0,<1H OCEAN +-118.03,34.01,10.0,6531.0,1036.0,2975.0,1018.0,6.2319,403700.0,<1H OCEAN +-118.06,34.02,25.0,3548.0,639.0,2653.0,664.0,5.2557,188800.0,<1H OCEAN +-118.06,34.01,34.0,1962.0,396.0,1488.0,332.0,3.9091,155100.0,<1H OCEAN +-118.07,34.01,38.0,2245.0,444.0,1540.0,419.0,3.7986,171000.0,<1H OCEAN +-118.07,34.01,36.0,1391.0,283.0,1025.0,275.0,3.2375,176800.0,<1H OCEAN +-118.08,34.01,32.0,1973.0,401.0,1322.0,386.0,3.4861,158100.0,<1H OCEAN +-118.07,34.0,42.0,1392.0,351.0,1471.0,348.0,2.63,143800.0,<1H OCEAN +-118.08,34.0,35.0,1188.0,342.0,1373.0,332.0,2.9107,150900.0,<1H OCEAN +-118.08,34.01,34.0,1914.0,549.0,2122.0,529.0,2.5969,150200.0,<1H OCEAN +-118.08,34.02,14.0,3789.0,810.0,2551.0,793.0,2.9321,144200.0,<1H OCEAN +-118.08,34.01,33.0,1091.0,233.0,890.0,226.0,2.7679,176400.0,<1H OCEAN +-118.08,34.01,36.0,1248.0,322.0,1282.0,326.0,3.2031,147600.0,<1H OCEAN +-118.09,34.01,36.0,1465.0,363.0,1538.0,342.0,3.5469,150600.0,<1H OCEAN +-118.09,34.01,42.0,897.0,229.0,1094.0,238.0,2.0729,114100.0,<1H OCEAN +-118.09,34.01,31.0,1108.0,238.0,1151.0,229.0,4.3333,149500.0,<1H OCEAN +-118.09,34.0,36.0,1722.0,353.0,1174.0,335.0,3.045,160600.0,<1H OCEAN +-118.09,34.0,35.0,1580.0,331.0,1290.0,338.0,4.1458,162500.0,<1H OCEAN +-118.09,33.99,34.0,1369.0,270.0,1005.0,272.0,3.692,172600.0,<1H OCEAN +-118.1,33.99,36.0,1529.0,290.0,1271.0,287.0,3.6875,175200.0,<1H OCEAN +-118.1,33.99,35.0,1326.0,272.0,933.0,267.0,3.4306,162500.0,<1H OCEAN +-118.1,33.99,31.0,965.0,217.0,599.0,206.0,2.7202,190300.0,<1H OCEAN +-118.08,33.98,36.0,1492.0,282.0,1041.0,270.0,4.0677,165800.0,<1H OCEAN +-118.08,33.98,39.0,1042.0,221.0,863.0,228.0,3.6033,157800.0,<1H OCEAN +-118.09,33.98,37.0,1270.0,272.0,1092.0,274.0,3.5,160700.0,<1H OCEAN +-118.09,33.99,35.0,2787.0,639.0,1923.0,614.0,3.5757,177900.0,<1H OCEAN +-118.08,33.99,38.0,1683.0,328.0,1369.0,339.0,3.6196,170700.0,<1H OCEAN +-118.08,33.99,37.0,1419.0,310.0,1125.0,296.0,2.5,162000.0,<1H OCEAN +-118.08,33.99,36.0,2024.0,590.0,2028.0,573.0,2.8152,163900.0,<1H OCEAN +-118.08,34.0,32.0,1165.0,358.0,997.0,361.0,0.9817,166300.0,<1H OCEAN +-118.07,33.99,35.0,1625.0,302.0,1134.0,288.0,4.5595,164900.0,<1H OCEAN +-118.07,33.99,41.0,1204.0,252.0,1002.0,248.0,3.0577,163300.0,<1H OCEAN +-118.07,33.99,39.0,552.0,151.0,807.0,168.0,3.25,153300.0,<1H OCEAN +-118.06,33.98,40.0,1723.0,370.0,1221.0,370.0,3.3562,169200.0,<1H OCEAN +-118.06,33.98,40.0,1410.0,255.0,932.0,273.0,4.2206,178000.0,<1H OCEAN +-118.06,33.98,42.0,1342.0,243.0,615.0,208.0,5.4381,186900.0,<1H OCEAN +-118.06,33.98,50.0,1146.0,238.0,579.0,213.0,2.9583,172600.0,<1H OCEAN +-118.06,33.98,38.0,1862.0,319.0,975.0,305.0,4.7266,177600.0,<1H OCEAN +-118.06,34.0,34.0,5002.0,917.0,2597.0,893.0,3.9243,219800.0,<1H OCEAN +-118.07,34.0,37.0,2976.0,636.0,2117.0,598.0,4.1058,167300.0,<1H OCEAN +-118.05,33.99,42.0,2480.0,401.0,1085.0,438.0,5.193,263400.0,<1H OCEAN +-118.04,33.99,36.0,3531.0,754.0,1613.0,697.0,3.2359,198600.0,<1H OCEAN +-118.05,33.99,38.0,1619.0,,886.0,357.0,3.7328,182400.0,<1H OCEAN +-118.06,33.99,38.0,862.0,178.0,484.0,176.0,4.375,186200.0,<1H OCEAN +-118.06,33.99,47.0,1588.0,309.0,827.0,292.0,3.7833,166100.0,<1H OCEAN +-118.06,33.99,46.0,1203.0,219.0,637.0,211.0,3.3611,174400.0,<1H OCEAN +-118.06,33.99,45.0,1471.0,255.0,670.0,250.0,4.5478,188000.0,<1H OCEAN +-118.04,33.98,50.0,1951.0,458.0,1362.0,454.0,3.0,163200.0,<1H OCEAN +-118.05,33.98,41.0,1406.0,428.0,1174.0,390.0,2.0147,137500.0,<1H OCEAN +-118.05,33.98,41.0,1694.0,413.0,1222.0,387.0,2.8311,155300.0,<1H OCEAN +-118.04,34.0,30.0,5308.0,854.0,2114.0,838.0,5.1985,279200.0,<1H OCEAN +-118.03,33.99,52.0,2792.0,461.0,1177.0,439.0,3.4312,243800.0,<1H OCEAN +-118.03,33.98,46.0,1974.0,465.0,880.0,441.0,2.7578,236800.0,<1H OCEAN +-118.04,33.98,43.0,2446.0,764.0,1699.0,692.0,2.625,163300.0,<1H OCEAN +-118.04,33.98,28.0,1617.0,507.0,1158.0,486.0,1.9688,165600.0,<1H OCEAN +-118.04,33.98,25.0,3040.0,831.0,1580.0,735.0,2.3182,182100.0,<1H OCEAN +-118.04,33.99,47.0,2530.0,565.0,1262.0,509.0,3.6475,197100.0,<1H OCEAN +-118.02,33.98,23.0,1995.0,306.0,707.0,293.0,8.6677,332700.0,<1H OCEAN +-118.03,33.97,32.0,2468.0,552.0,1190.0,479.0,3.8275,238500.0,<1H OCEAN +-118.02,33.97,34.0,1903.0,293.0,887.0,306.0,6.148,313800.0,<1H OCEAN +-118.01,33.97,36.0,1451.0,224.0,608.0,246.0,6.0648,290800.0,<1H OCEAN +-118.0,33.97,30.0,6540.0,991.0,3124.0,953.0,6.0663,372600.0,<1H OCEAN +-118.01,33.96,36.0,1805.0,288.0,882.0,308.0,5.3054,273500.0,<1H OCEAN +-118.02,33.96,36.0,2002.0,361.0,913.0,311.0,4.5446,244700.0,<1H OCEAN +-118.02,33.96,36.0,2071.0,398.0,988.0,404.0,4.6226,219700.0,<1H OCEAN +-118.03,33.97,36.0,1601.0,290.0,715.0,284.0,4.8152,232400.0,<1H OCEAN +-118.03,33.97,39.0,1996.0,389.0,1029.0,387.0,4.65,224300.0,<1H OCEAN +-118.03,33.97,39.0,2126.0,434.0,1103.0,433.0,3.2852,196200.0,<1H OCEAN +-118.03,33.97,36.0,2149.0,527.0,1359.0,481.0,2.824,167900.0,<1H OCEAN +-118.04,33.97,29.0,2376.0,700.0,1968.0,680.0,2.6082,162500.0,<1H OCEAN +-118.04,33.97,25.0,2945.0,914.0,2313.0,832.0,2.5686,177500.0,<1H OCEAN +-118.03,33.97,22.0,2185.0,623.0,1644.0,606.0,2.593,192000.0,<1H OCEAN +-118.02,33.95,38.0,2139.0,426.0,1138.0,412.0,4.2917,168900.0,<1H OCEAN +-118.02,33.95,36.0,1681.0,329.0,964.0,311.0,4.108,181200.0,<1H OCEAN +-118.03,33.96,37.0,1745.0,365.0,1022.0,368.0,4.0536,171400.0,<1H OCEAN +-118.03,33.96,37.0,1180.0,256.0,614.0,242.0,3.117,164600.0,<1H OCEAN +-118.03,33.95,34.0,1882.0,428.0,1034.0,375.0,3.6509,173200.0,<1H OCEAN +-118.03,33.95,37.0,1772.0,321.0,934.0,326.0,4.1471,177800.0,<1H OCEAN +-118.04,33.95,36.0,2722.0,515.0,1390.0,486.0,3.8214,178500.0,<1H OCEAN +-118.04,33.96,37.0,1948.0,395.0,1163.0,379.0,3.225,154000.0,<1H OCEAN +-118.04,33.96,42.0,1430.0,338.0,1269.0,321.0,3.3214,148800.0,<1H OCEAN +-118.05,33.96,37.0,2622.0,652.0,2778.0,644.0,2.9714,160300.0,<1H OCEAN +-118.04,33.97,34.0,1759.0,431.0,1282.0,391.0,3.0491,158200.0,<1H OCEAN +-118.05,33.98,34.0,2142.0,390.0,1305.0,406.0,4.0379,172800.0,<1H OCEAN +-118.05,33.97,36.0,2854.0,688.0,2816.0,673.0,3.6,154000.0,<1H OCEAN +-118.06,33.97,37.0,1645.0,308.0,1077.0,320.0,4.3203,159200.0,<1H OCEAN +-118.07,33.98,32.0,3304.0,714.0,2032.0,690.0,3.2093,167800.0,<1H OCEAN +-118.07,33.98,41.0,1478.0,273.0,916.0,281.0,3.9688,169800.0,<1H OCEAN +-118.06,33.97,39.0,1639.0,300.0,988.0,309.0,3.9612,175800.0,<1H OCEAN +-118.07,33.97,36.0,1887.0,370.0,1006.0,329.0,3.1554,170700.0,<1H OCEAN +-118.08,33.97,38.0,1026.0,190.0,789.0,193.0,4.2,163200.0,<1H OCEAN +-118.07,33.97,32.0,3400.0,826.0,3017.0,793.0,2.4607,155600.0,<1H OCEAN +-118.07,33.96,30.0,928.0,230.0,913.0,214.0,2.6991,147100.0,<1H OCEAN +-118.07,33.97,36.0,1265.0,273.0,1052.0,253.0,4.8929,156200.0,<1H OCEAN +-118.08,33.97,36.0,1620.0,298.0,1258.0,309.0,3.9773,166700.0,<1H OCEAN +-118.08,33.97,35.0,825.0,155.0,590.0,144.0,4.6333,161200.0,<1H OCEAN +-118.08,33.97,36.0,1678.0,323.0,1380.0,352.0,3.5481,163300.0,<1H OCEAN +-118.09,33.98,39.0,936.0,194.0,691.0,211.0,3.6875,169500.0,<1H OCEAN +-118.09,33.97,39.0,1473.0,297.0,1108.0,294.0,4.1389,166000.0,<1H OCEAN +-118.09,33.97,35.0,2664.0,541.0,2033.0,491.0,3.7326,164300.0,<1H OCEAN +-118.1,33.97,35.0,2426.0,529.0,2010.0,514.0,2.9922,163500.0,<1H OCEAN +-118.1,33.98,34.0,1357.0,310.0,1042.0,287.0,3.4083,156700.0,<1H OCEAN +-118.09,33.98,37.0,1226.0,255.0,1068.0,271.0,3.1607,172200.0,<1H OCEAN +-118.1,33.98,33.0,1927.0,482.0,1623.0,479.0,3.5268,152000.0,<1H OCEAN +-118.11,33.97,33.0,2125.0,500.0,1672.0,476.0,3.6397,166600.0,<1H OCEAN +-118.11,33.98,36.0,446.0,108.0,410.0,117.0,3.3942,147200.0,<1H OCEAN +-118.09,33.96,36.0,3271.0,603.0,2593.0,616.0,3.3621,169700.0,<1H OCEAN +-118.09,33.96,36.0,1116.0,229.0,719.0,233.0,3.425,163200.0,<1H OCEAN +-118.09,33.95,36.0,1991.0,396.0,1306.0,403.0,4.5,166600.0,<1H OCEAN +-118.1,33.96,38.0,1657.0,335.0,1195.0,309.0,4.1711,160100.0,<1H OCEAN +-118.1,33.96,36.0,1184.0,240.0,946.0,232.0,4.0357,162500.0,<1H OCEAN +-118.1,33.97,20.0,1878.0,548.0,1461.0,516.0,2.9821,142500.0,<1H OCEAN +-118.1,33.96,36.0,2013.0,435.0,1476.0,475.0,3.9549,192100.0,<1H OCEAN +-118.1,33.96,40.0,1743.0,328.0,981.0,291.0,3.6667,173100.0,<1H OCEAN +-118.08,33.95,32.0,1962.0,387.0,1274.0,398.0,4.8304,160600.0,<1H OCEAN +-118.08,33.95,37.0,1743.0,348.0,1328.0,354.0,3.0944,162800.0,<1H OCEAN +-118.08,33.96,35.0,2104.0,399.0,1659.0,387.0,4.0096,165000.0,<1H OCEAN +-118.08,33.96,34.0,1431.0,310.0,1162.0,288.0,4.369,165400.0,<1H OCEAN +-118.09,33.96,20.0,1911.0,472.0,1407.0,465.0,2.7647,163000.0,<1H OCEAN +-118.09,33.95,32.0,1083.0,206.0,737.0,218.0,3.5583,170800.0,<1H OCEAN +-118.09,33.94,36.0,2762.0,472.0,1576.0,493.0,4.0846,183400.0,<1H OCEAN +-118.09,33.93,36.0,1585.0,323.0,1205.0,343.0,4.5306,183400.0,<1H OCEAN +-118.09,33.94,33.0,1976.0,404.0,1379.0,395.0,3.8542,175400.0,<1H OCEAN +-118.08,33.94,21.0,3933.0,949.0,2219.0,820.0,2.4926,171400.0,<1H OCEAN +-118.04,33.95,35.0,1945.0,357.0,1227.0,359.0,5.2162,171900.0,<1H OCEAN +-118.04,33.94,31.0,3808.0,670.0,2430.0,660.0,4.625,173900.0,<1H OCEAN +-118.04,33.95,36.0,1976.0,368.0,1236.0,355.0,4.615,174000.0,<1H OCEAN +-118.05,33.95,33.0,1954.0,390.0,1600.0,376.0,3.6125,170800.0,<1H OCEAN +-118.05,33.94,34.0,495.0,120.0,527.0,130.0,1.9453,149000.0,<1H OCEAN +-118.04,33.93,36.0,1045.0,239.0,1165.0,230.0,3.1979,161800.0,<1H OCEAN +-118.05,33.93,31.0,894.0,203.0,883.0,190.0,3.6771,141500.0,<1H OCEAN +-118.05,33.93,35.0,2107.0,480.0,2241.0,443.0,3.1513,150000.0,<1H OCEAN +-118.05,33.92,33.0,1999.0,470.0,2170.0,466.0,3.2371,154700.0,<1H OCEAN +-118.03,33.93,22.0,3382.0,800.0,2688.0,784.0,3.875,164700.0,<1H OCEAN +-118.02,33.92,35.0,2075.0,424.0,1312.0,396.0,3.7969,164800.0,<1H OCEAN +-118.03,33.92,30.0,1414.0,332.0,1307.0,315.0,3.0,158300.0,<1H OCEAN +-118.03,33.92,35.0,2108.0,405.0,1243.0,394.0,3.6731,167000.0,<1H OCEAN +-118.04,33.93,35.0,1805.0,387.0,1505.0,366.0,4.1667,151900.0,<1H OCEAN +-118.04,33.92,34.0,1995.0,417.0,1573.0,407.0,3.4907,153500.0,<1H OCEAN +-118.04,33.93,36.0,1726.0,332.0,1293.0,310.0,4.3849,144100.0,<1H OCEAN +-118.04,33.92,35.0,2469.0,522.0,2151.0,537.0,3.4219,156200.0,<1H OCEAN +-118.02,33.93,35.0,2400.0,398.0,1218.0,408.0,4.1312,193800.0,<1H OCEAN +-118.03,33.93,35.0,2470.0,416.0,1386.0,411.0,5.2736,179500.0,<1H OCEAN +-118.03,33.94,37.0,1699.0,302.0,889.0,271.0,4.3542,179800.0,<1H OCEAN +-118.03,33.94,30.0,2572.0,521.0,1564.0,501.0,3.4861,177200.0,<1H OCEAN +-118.04,33.94,37.0,1328.0,273.0,1115.0,275.0,4.2051,164400.0,<1H OCEAN +-118.03,33.94,34.0,1748.0,386.0,917.0,378.0,3.4792,169000.0,<1H OCEAN +-118.01,33.95,36.0,1579.0,290.0,816.0,276.0,4.4318,181100.0,<1H OCEAN +-118.02,33.95,36.0,1705.0,299.0,871.0,296.0,4.6184,179800.0,<1H OCEAN +-118.02,33.95,36.0,1632.0,295.0,797.0,283.0,4.2292,179500.0,<1H OCEAN +-118.01,33.95,37.0,1165.0,210.0,627.0,221.0,4.6923,181000.0,<1H OCEAN +-118.02,33.94,33.0,2382.0,404.0,1339.0,389.0,5.3016,192200.0,<1H OCEAN +-118.02,33.94,23.0,4815.0,1081.0,3232.0,1016.0,3.488,191800.0,<1H OCEAN +-118.02,33.95,35.0,2085.0,400.0,1112.0,391.0,3.4886,173900.0,<1H OCEAN +-117.98,33.94,32.0,2562.0,491.0,1222.0,446.0,4.0985,226200.0,<1H OCEAN +-117.98,33.93,27.0,3142.0,509.0,1520.0,503.0,6.2924,232500.0,<1H OCEAN +-117.99,33.93,33.0,2299.0,431.0,1049.0,447.0,3.6458,208100.0,<1H OCEAN +-117.99,33.94,34.0,1519.0,301.0,758.0,304.0,4.3125,214000.0,<1H OCEAN +-117.99,33.94,30.0,2395.0,565.0,1214.0,521.0,3.7045,212300.0,<1H OCEAN +-118.0,33.94,35.0,2603.0,482.0,1305.0,507.0,3.9543,214400.0,<1H OCEAN +-118.0,33.94,36.0,2911.0,534.0,1395.0,486.0,5.1738,203700.0,<1H OCEAN +-118.01,33.94,36.0,1921.0,329.0,969.0,327.0,4.9191,188700.0,<1H OCEAN +-118.01,33.94,35.0,1323.0,235.0,807.0,247.0,4.2708,174800.0,<1H OCEAN +-118.01,33.93,31.0,3395.0,742.0,1886.0,737.0,4.4118,174400.0,<1H OCEAN +-118.02,33.93,33.0,4711.0,988.0,2984.0,931.0,3.6028,184700.0,<1H OCEAN +-117.99,33.93,36.0,1287.0,233.0,779.0,229.0,4.8523,175800.0,<1H OCEAN +-118.0,33.93,35.0,1288.0,240.0,758.0,250.0,4.9205,173900.0,<1H OCEAN +-118.01,33.93,34.0,2424.0,468.0,1293.0,444.0,3.275,189900.0,<1H OCEAN +-118.0,33.93,35.0,802.0,153.0,445.0,150.0,5.0077,185000.0,<1H OCEAN +-118.0,33.94,37.0,903.0,158.0,444.0,158.0,3.75,174400.0,<1H OCEAN +-118.01,33.92,34.0,4039.0,694.0,2269.0,663.0,5.2305,205100.0,<1H OCEAN +-118.01,33.92,35.0,1606.0,289.0,829.0,273.0,5.273,187600.0,<1H OCEAN +-118.02,33.92,34.0,1478.0,251.0,956.0,277.0,5.5238,185300.0,<1H OCEAN +-118.0,33.92,26.0,2830.0,399.0,1204.0,404.0,6.1273,289600.0,<1H OCEAN +-118.0,33.91,19.0,5166.0,770.0,2374.0,753.0,5.979,285200.0,<1H OCEAN +-117.99,33.93,27.0,3708.0,718.0,1921.0,721.0,4.375,210400.0,<1H OCEAN +-118.0,33.93,24.0,4534.0,967.0,2547.0,895.0,3.9575,215400.0,<1H OCEAN +-117.98,33.92,27.0,3700.0,,1793.0,552.0,5.3668,219800.0,<1H OCEAN +-117.99,33.92,27.0,5805.0,1152.0,3106.0,1144.0,4.061,222700.0,<1H OCEAN +-117.98,33.91,16.0,10621.0,1782.0,3836.0,1480.0,5.0923,257200.0,<1H OCEAN +-117.99,33.9,33.0,2161.0,383.0,1235.0,383.0,5.6454,202800.0,<1H OCEAN +-117.99,33.9,30.0,1677.0,372.0,1021.0,332.0,3.5859,199700.0,<1H OCEAN +-118.0,33.89,35.0,1065.0,176.0,574.0,171.0,5.0384,200800.0,<1H OCEAN +-118.0,33.89,34.0,1932.0,315.0,1053.0,316.0,5.1377,213300.0,<1H OCEAN +-118.0,33.9,35.0,1758.0,309.0,972.0,338.0,4.3831,209800.0,<1H OCEAN +-118.0,33.9,35.0,1942.0,332.0,1127.0,325.0,4.5144,206300.0,<1H OCEAN +-118.01,33.9,26.0,2968.0,674.0,1655.0,628.0,4.6094,201000.0,<1H OCEAN +-118.01,33.89,34.0,1653.0,292.0,1003.0,310.0,4.6,203400.0,<1H OCEAN +-118.01,33.89,33.0,2046.0,327.0,1018.0,320.0,4.2292,212800.0,<1H OCEAN +-118.0,33.89,35.0,1011.0,183.0,578.0,171.0,3.9861,188700.0,<1H OCEAN +-118.02,33.9,36.0,2417.0,421.0,1276.0,426.0,5.5601,205200.0,<1H OCEAN +-118.02,33.9,34.0,2678.0,511.0,1540.0,497.0,4.4954,202900.0,<1H OCEAN +-118.01,33.89,36.0,1589.0,265.0,804.0,272.0,4.6354,202900.0,<1H OCEAN +-118.02,33.89,36.0,1375.0,,670.0,221.0,5.0839,198200.0,<1H OCEAN +-118.02,33.92,34.0,2169.0,418.0,1169.0,406.0,3.2222,218700.0,<1H OCEAN +-118.01,33.91,32.0,2722.0,571.0,2541.0,462.0,4.2305,221400.0,<1H OCEAN +-118.01,33.9,36.0,1382.0,257.0,685.0,255.0,5.125,211700.0,<1H OCEAN +-118.02,33.91,35.0,2182.0,390.0,1248.0,399.0,5.4236,216700.0,<1H OCEAN +-118.02,33.9,34.0,1636.0,358.0,977.0,357.0,3.5938,209900.0,<1H OCEAN +-118.03,33.9,35.0,1434.0,279.0,744.0,252.0,3.7308,202400.0,<1H OCEAN +-118.02,33.91,35.0,1337.0,234.0,692.0,235.0,5.1155,213700.0,<1H OCEAN +-118.02,33.91,34.0,2518.0,429.0,1309.0,421.0,4.7861,210700.0,<1H OCEAN +-118.03,33.91,32.0,4040.0,832.0,2526.0,798.0,3.2143,160100.0,<1H OCEAN +-118.03,33.91,35.0,2323.0,406.0,1741.0,398.0,4.2437,164100.0,<1H OCEAN +-118.03,33.9,36.0,1143.0,193.0,826.0,188.0,5.3184,171100.0,<1H OCEAN +-118.04,33.9,36.0,15.0,5.0,15.0,6.0,0.4999,162500.0,<1H OCEAN +-118.09,34.03,27.0,3797.0,597.0,2043.0,614.0,5.5,276800.0,<1H OCEAN +-118.09,34.02,28.0,1984.0,313.0,1099.0,343.0,4.5526,250200.0,<1H OCEAN +-118.09,34.02,33.0,4853.0,1105.0,2855.0,1006.0,3.2622,208600.0,<1H OCEAN +-118.1,34.02,33.0,1143.0,172.0,508.0,174.0,4.9107,279900.0,<1H OCEAN +-118.11,34.02,17.0,9559.0,1911.0,5279.0,1844.0,5.1515,318900.0,<1H OCEAN +-118.12,34.02,25.0,2655.0,558.0,1466.0,525.0,3.0529,265800.0,<1H OCEAN +-118.12,34.03,20.0,2595.0,428.0,1751.0,479.0,5.6112,308000.0,<1H OCEAN +-118.1,34.01,29.0,2077.0,564.0,2087.0,543.0,2.66,189200.0,<1H OCEAN +-118.1,34.01,23.0,1724.0,576.0,1336.0,542.0,1.3365,183300.0,<1H OCEAN +-118.1,34.01,42.0,1436.0,298.0,1005.0,298.0,3.4297,195800.0,<1H OCEAN +-118.1,34.02,37.0,1022.0,232.0,653.0,238.0,3.0625,189400.0,<1H OCEAN +-118.11,34.02,40.0,1727.0,309.0,932.0,313.0,3.95,210200.0,<1H OCEAN +-118.11,34.01,43.0,1539.0,386.0,1122.0,377.0,2.4605,196000.0,<1H OCEAN +-118.12,34.02,36.0,1595.0,383.0,1105.0,359.0,2.4286,205600.0,<1H OCEAN +-118.12,34.02,32.0,1789.0,528.0,1429.0,517.0,1.8906,224500.0,<1H OCEAN +-118.13,34.03,31.0,4267.0,1070.0,3176.0,1071.0,3.0212,208200.0,<1H OCEAN +-118.13,34.02,38.0,1243.0,310.0,788.0,286.0,2.5852,185100.0,<1H OCEAN +-118.13,34.02,40.0,2988.0,690.0,2144.0,667.0,2.3359,189300.0,<1H OCEAN +-118.13,34.02,41.0,734.0,190.0,565.0,191.0,2.2813,192000.0,<1H OCEAN +-118.13,34.02,43.0,396.0,91.0,261.0,73.0,2.9044,172900.0,<1H OCEAN +-118.14,34.02,45.0,1307.0,283.0,967.0,254.0,2.75,178300.0,<1H OCEAN +-118.14,34.03,44.0,2003.0,390.0,1291.0,392.0,4.0625,201100.0,<1H OCEAN +-118.13,34.03,42.0,2203.0,467.0,1470.0,488.0,2.8385,192200.0,<1H OCEAN +-118.14,34.03,45.0,1569.0,359.0,1203.0,359.0,2.4612,180500.0,<1H OCEAN +-118.15,34.02,43.0,2172.0,605.0,2386.0,597.0,2.8239,150600.0,<1H OCEAN +-118.15,34.03,43.0,2006.0,472.0,1687.0,463.0,1.7991,158800.0,<1H OCEAN +-118.16,34.03,41.0,1377.0,293.0,1142.0,272.0,3.1724,141600.0,<1H OCEAN +-118.15,34.03,44.0,603.0,207.0,588.0,218.0,2.0536,186400.0,<1H OCEAN +-118.15,34.03,42.0,1481.0,411.0,1206.0,394.0,2.6806,189300.0,<1H OCEAN +-118.15,34.04,39.0,1099.0,263.0,787.0,269.0,3.7794,194600.0,<1H OCEAN +-118.15,34.04,44.0,647.0,142.0,457.0,143.0,3.6875,162500.0,<1H OCEAN +-118.16,34.04,45.0,332.0,70.0,302.0,60.0,3.1895,156300.0,<1H OCEAN +-118.16,34.04,22.0,2991.0,791.0,2486.0,754.0,1.5078,181900.0,<1H OCEAN +-118.16,34.04,38.0,1076.0,286.0,1535.0,323.0,2.7026,145000.0,<1H OCEAN +-118.16,34.04,11.0,852.0,215.0,806.0,202.0,1.3971,134400.0,<1H OCEAN +-118.17,34.03,31.0,1014.0,252.0,1064.0,247.0,2.4167,125500.0,<1H OCEAN +-118.17,34.04,38.0,385.0,102.0,402.0,95.0,1.625,129700.0,<1H OCEAN +-118.17,34.04,46.0,705.0,167.0,655.0,149.0,3.5938,141100.0,<1H OCEAN +-118.17,34.06,36.0,871.0,201.0,2862.0,181.0,2.1845,123800.0,<1H OCEAN +-118.17,34.05,35.0,1256.0,294.0,2990.0,302.0,3.1528,121800.0,<1H OCEAN +-118.18,34.05,41.0,389.0,102.0,455.0,107.0,2.7031,109200.0,<1H OCEAN +-118.17,34.06,44.0,1856.0,461.0,1853.0,452.0,2.5033,131900.0,<1H OCEAN +-118.17,34.06,43.0,464.0,,416.0,120.0,2.475,142600.0,<1H OCEAN +-118.18,34.06,33.0,278.0,71.0,266.0,56.0,0.8941,98200.0,<1H OCEAN +-118.19,34.06,37.0,1715.0,456.0,2052.0,440.0,2.3125,116100.0,<1H OCEAN +-118.18,34.06,45.0,934.0,228.0,893.0,192.0,2.53,140300.0,<1H OCEAN +-118.18,34.05,52.0,1070.0,231.0,925.0,220.0,1.825,133000.0,<1H OCEAN +-118.19,34.05,42.0,1291.0,345.0,1535.0,332.0,1.9083,119200.0,<1H OCEAN +-118.19,34.05,35.0,1296.0,307.0,1423.0,276.0,2.7432,135200.0,<1H OCEAN +-118.19,34.05,47.0,1273.0,264.0,1193.0,260.0,2.4375,122900.0,<1H OCEAN +-118.18,34.05,38.0,3272.0,731.0,3299.0,726.0,2.8295,126500.0,<1H OCEAN +-118.18,34.05,41.0,762.0,147.0,817.0,176.0,3.75,123100.0,<1H OCEAN +-118.18,34.05,41.0,616.0,196.0,814.0,180.0,3.3333,115100.0,<1H OCEAN +-118.18,34.04,36.0,1807.0,630.0,2118.0,669.0,1.55,129000.0,<1H OCEAN +-118.18,34.04,44.0,1079.0,275.0,1249.0,249.0,3.0417,141700.0,<1H OCEAN +-118.19,34.04,34.0,1011.0,274.0,1164.0,262.0,2.8542,146900.0,<1H OCEAN +-118.19,34.04,39.0,1074.0,323.0,1613.0,308.0,2.3015,131700.0,<1H OCEAN +-118.19,34.05,29.0,855.0,199.0,785.0,169.0,2.6964,122200.0,<1H OCEAN +-118.17,34.04,44.0,691.0,155.0,613.0,142.0,1.9667,133900.0,<1H OCEAN +-118.17,34.04,39.0,563.0,138.0,682.0,137.0,2.75,150000.0,<1H OCEAN +-118.18,34.03,39.0,609.0,145.0,690.0,134.0,2.9167,145800.0,<1H OCEAN +-118.17,34.04,43.0,908.0,232.0,1005.0,224.0,1.75,134000.0,<1H OCEAN +-118.17,34.04,45.0,911.0,238.0,1005.0,229.0,2.8167,114000.0,<1H OCEAN +-118.17,34.05,39.0,962.0,229.0,999.0,221.0,3.375,126000.0,<1H OCEAN +-118.17,34.05,45.0,733.0,178.0,715.0,165.0,2.5962,124100.0,<1H OCEAN +-118.18,34.04,42.0,1670.0,,1997.0,452.0,2.788,150500.0,<1H OCEAN +-118.18,34.03,26.0,859.0,255.0,835.0,232.0,1.1929,143800.0,<1H OCEAN +-118.19,34.03,27.0,1346.0,340.0,1177.0,295.0,1.7995,153400.0,<1H OCEAN +-118.19,34.04,40.0,1279.0,316.0,1438.0,329.0,2.1774,157600.0,<1H OCEAN +-118.19,34.04,43.0,1682.0,422.0,1706.0,409.0,2.1029,153300.0,<1H OCEAN +-118.19,34.03,31.0,525.0,136.0,627.0,145.0,2.6964,125000.0,<1H OCEAN +-118.18,34.03,37.0,2115.0,580.0,2842.0,572.0,2.239,121300.0,<1H OCEAN +-118.19,34.03,42.0,2250.0,629.0,2588.0,609.0,1.9719,134200.0,<1H OCEAN +-118.18,34.03,40.0,2631.0,698.0,2920.0,677.0,2.0764,145600.0,<1H OCEAN +-118.19,34.02,45.0,1535.0,432.0,1820.0,419.0,1.7801,142800.0,<1H OCEAN +-118.18,34.02,36.0,1138.0,296.0,1484.0,320.0,2.2813,150700.0,<1H OCEAN +-118.18,34.02,37.0,2631.0,734.0,3228.0,701.0,2.15,132200.0,<1H OCEAN +-118.19,34.02,40.0,474.0,124.0,546.0,121.0,2.3438,137500.0,<1H OCEAN +-118.18,34.02,35.0,661.0,142.0,720.0,143.0,2.8977,142500.0,<1H OCEAN +-118.19,34.02,34.0,1478.0,369.0,1735.0,348.0,1.8875,136700.0,<1H OCEAN +-118.18,34.02,33.0,832.0,226.0,987.0,220.0,3.0972,125000.0,<1H OCEAN +-118.18,34.02,43.0,887.0,219.0,965.0,217.0,2.625,133900.0,<1H OCEAN +-118.18,34.01,42.0,1845.0,497.0,2191.0,492.0,2.3462,127300.0,<1H OCEAN +-118.17,34.03,41.0,2099.0,530.0,2325.0,528.0,2.1979,140800.0,<1H OCEAN +-118.17,34.03,43.0,1636.0,506.0,1855.0,502.0,2.2902,152400.0,<1H OCEAN +-118.17,34.03,42.0,882.0,292.0,1248.0,281.0,2.761,120000.0,<1H OCEAN +-118.18,34.03,44.0,1629.0,420.0,1893.0,387.0,2.2991,137500.0,<1H OCEAN +-118.17,34.02,41.0,676.0,216.0,851.0,199.0,2.3077,140600.0,<1H OCEAN +-118.17,34.02,34.0,760.0,219.0,968.0,202.0,1.7813,145000.0,<1H OCEAN +-118.17,34.02,39.0,759.0,215.0,883.0,226.0,2.125,143800.0,<1H OCEAN +-118.17,34.02,33.0,346.0,103.0,488.0,107.0,1.8681,112500.0,<1H OCEAN +-118.16,34.03,45.0,894.0,231.0,925.0,222.0,2.6042,145000.0,<1H OCEAN +-118.16,34.03,40.0,2201.0,636.0,2682.0,595.0,2.359,143400.0,<1H OCEAN +-118.16,34.02,35.0,1734.0,493.0,2053.0,508.0,2.1442,149200.0,<1H OCEAN +-118.16,34.02,41.0,1256.0,391.0,1511.0,381.0,1.7981,166000.0,<1H OCEAN +-118.16,34.02,47.0,1055.0,298.0,1303.0,302.0,2.6964,138800.0,<1H OCEAN +-118.17,34.02,42.0,946.0,272.0,1191.0,261.0,2.45,132000.0,<1H OCEAN +-118.16,34.02,34.0,1474.0,511.0,1962.0,501.0,1.8715,139600.0,<1H OCEAN +-118.15,34.02,42.0,2729.0,725.0,3004.0,722.0,2.3438,154300.0,<1H OCEAN +-118.15,34.02,37.0,2344.0,631.0,2195.0,610.0,2.7022,151900.0,<1H OCEAN +-118.16,34.02,42.0,814.0,216.0,773.0,208.0,2.5313,156900.0,<1H OCEAN +-118.16,34.01,37.0,690.0,261.0,952.0,255.0,1.6354,158900.0,<1H OCEAN +-118.16,34.01,40.0,1552.0,,1919.0,427.0,2.2596,137500.0,<1H OCEAN +-118.16,34.02,44.0,1218.0,374.0,1175.0,342.0,1.9688,173900.0,<1H OCEAN +-118.14,34.02,44.0,1715.0,460.0,1740.0,423.0,2.7019,153300.0,<1H OCEAN +-118.14,34.02,40.0,1912.0,502.0,2077.0,500.0,2.6,180600.0,<1H OCEAN +-118.13,34.02,36.0,984.0,275.0,1024.0,284.0,2.125,153500.0,<1H OCEAN +-118.14,34.01,42.0,1007.0,277.0,1060.0,268.0,3.0179,153700.0,<1H OCEAN +-118.14,34.02,42.0,1384.0,458.0,1825.0,455.0,1.4178,145500.0,<1H OCEAN +-118.14,34.01,46.0,1746.0,447.0,1296.0,392.0,2.3929,156800.0,<1H OCEAN +-118.14,34.01,42.0,1973.0,510.0,1841.0,502.0,2.5326,156500.0,<1H OCEAN +-118.13,34.01,45.0,1179.0,268.0,736.0,252.0,2.7083,161800.0,<1H OCEAN +-118.13,34.01,40.0,2412.0,629.0,2119.0,600.0,2.075,151100.0,<1H OCEAN +-118.13,34.01,43.0,782.0,207.0,827.0,223.0,3.1538,154300.0,<1H OCEAN +-118.11,34.01,41.0,815.0,252.0,775.0,231.0,2.2847,190000.0,<1H OCEAN +-118.12,34.0,31.0,3281.0,768.0,2385.0,733.0,2.7308,173800.0,<1H OCEAN +-118.12,34.01,40.0,1417.0,338.0,1068.0,331.0,2.4259,164600.0,<1H OCEAN +-118.12,34.01,33.0,1956.0,478.0,1472.0,464.0,1.9867,166300.0,<1H OCEAN +-118.1,34.0,32.0,2122.0,591.0,1929.0,539.0,2.7311,169300.0,<1H OCEAN +-118.11,34.0,24.0,2403.0,590.0,2103.0,547.0,2.7292,193800.0,<1H OCEAN +-118.11,34.0,38.0,2573.0,484.0,1568.0,459.0,3.0208,193700.0,<1H OCEAN +-118.11,34.0,33.0,2886.0,726.0,2650.0,728.0,2.625,178700.0,<1H OCEAN +-118.11,34.01,22.0,1141.0,332.0,1189.0,321.0,2.2042,162500.0,<1H OCEAN +-118.12,33.99,27.0,2316.0,559.0,2012.0,544.0,2.8155,176800.0,<1H OCEAN +-118.12,33.99,26.0,2296.0,534.0,1777.0,507.0,2.5395,191000.0,<1H OCEAN +-118.12,33.98,44.0,932.0,179.0,717.0,180.0,3.6875,178100.0,<1H OCEAN +-118.12,33.99,24.0,1705.0,479.0,2037.0,459.0,2.4219,137500.0,<1H OCEAN +-118.14,34.01,36.0,702.0,210.0,834.0,216.0,2.25,162500.0,<1H OCEAN +-118.15,33.98,17.0,3361.0,925.0,3264.0,914.0,2.2813,145600.0,<1H OCEAN +-118.15,34.0,32.0,3218.0,739.0,2368.0,730.0,3.1406,175300.0,<1H OCEAN +-118.16,34.0,37.0,1341.0,336.0,1233.0,306.0,3.6583,150500.0,<1H OCEAN +-118.17,34.01,30.0,1228.0,358.0,1603.0,323.0,3.0225,130800.0,<1H OCEAN +-118.16,34.01,36.0,931.0,246.0,732.0,235.0,1.7679,142800.0,<1H OCEAN +-118.17,34.01,36.0,1657.0,425.0,1689.0,418.0,2.7799,149300.0,<1H OCEAN +-118.18,34.01,39.0,322.0,82.0,319.0,90.0,2.6364,148800.0,<1H OCEAN +-118.21,33.99,39.0,47.0,16.0,51.0,23.0,3.2188,112500.0,<1H OCEAN +-118.23,34.0,35.0,167.0,60.0,267.0,55.0,1.5227,350000.0,<1H OCEAN +-118.23,33.99,37.0,378.0,176.0,714.0,156.0,2.1912,112500.0,<1H OCEAN +-118.22,33.99,24.0,1402.0,482.0,1976.0,466.0,2.6964,163200.0,<1H OCEAN +-118.22,33.99,6.0,1499.0,437.0,1754.0,447.0,4.3164,143200.0,<1H OCEAN +-118.22,33.99,4.0,1849.0,577.0,1529.0,418.0,2.7708,186300.0,<1H OCEAN +-118.22,33.98,34.0,2283.0,809.0,3032.0,832.0,2.4387,175000.0,<1H OCEAN +-118.22,33.98,27.0,1095.0,340.0,1300.0,318.0,2.6548,123200.0,<1H OCEAN +-118.22,33.98,15.0,1011.0,274.0,899.0,219.0,2.7045,190600.0,<1H OCEAN +-118.23,33.98,25.0,986.0,310.0,1439.0,251.0,2.39,183300.0,<1H OCEAN +-118.23,33.99,5.0,706.0,203.0,839.0,199.0,4.5208,165000.0,<1H OCEAN +-118.23,33.98,30.0,2562.0,959.0,3909.0,955.0,1.9929,150600.0,<1H OCEAN +-118.24,33.99,28.0,312.0,89.0,498.0,87.0,2.4107,96400.0,<1H OCEAN +-118.24,33.98,30.0,861.0,250.0,1062.0,231.0,1.75,115400.0,<1H OCEAN +-118.24,33.99,33.0,885.0,294.0,1270.0,282.0,2.1615,118800.0,<1H OCEAN +-118.25,33.99,41.0,2215.0,544.0,2054.0,480.0,1.5272,100300.0,<1H OCEAN +-118.25,33.99,41.0,1486.0,509.0,2312.0,541.0,1.3963,92900.0,<1H OCEAN +-118.25,33.98,47.0,617.0,162.0,754.0,144.0,2.2969,116700.0,<1H OCEAN +-118.25,33.98,44.0,1087.0,335.0,1441.0,310.0,1.6667,112500.0,<1H OCEAN +-118.25,33.98,40.0,1867.0,633.0,2223.0,609.0,1.7207,105100.0,<1H OCEAN +-118.25,33.98,37.0,1045.0,361.0,1666.0,337.0,1.7929,97200.0,<1H OCEAN +-118.25,33.98,39.0,1553.0,461.0,2271.0,437.0,1.7378,121900.0,<1H OCEAN +-118.25,33.98,37.0,1503.0,392.0,1886.0,401.0,2.5637,125000.0,<1H OCEAN +-118.24,33.98,37.0,1196.0,364.0,1622.0,327.0,2.125,108900.0,<1H OCEAN +-118.24,33.98,45.0,972.0,249.0,1288.0,261.0,2.2054,125000.0,<1H OCEAN +-118.24,33.98,45.0,173.0,42.0,230.0,57.0,3.0724,110700.0,<1H OCEAN +-118.22,33.98,30.0,1971.0,645.0,2650.0,605.0,2.0357,169900.0,<1H OCEAN +-118.22,33.98,42.0,626.0,143.0,625.0,156.0,3.125,166300.0,<1H OCEAN +-118.22,33.98,32.0,2643.0,737.0,2784.0,711.0,2.5352,184400.0,<1H OCEAN +-118.22,33.98,36.0,1514.0,453.0,1496.0,448.0,2.1044,148200.0,<1H OCEAN +-118.22,33.98,18.0,1781.0,765.0,1913.0,702.0,1.2059,255000.0,<1H OCEAN +-118.22,33.98,34.0,2225.0,753.0,2980.0,736.0,1.6685,128800.0,<1H OCEAN +-118.23,33.98,35.0,1366.0,496.0,2160.0,497.0,2.2059,150000.0,<1H OCEAN +-118.2,33.98,38.0,867.0,243.0,950.0,235.0,1.8929,163100.0,<1H OCEAN +-118.21,33.97,35.0,1863.0,537.0,2274.0,510.0,2.1005,171300.0,<1H OCEAN +-118.21,33.98,39.0,1315.0,306.0,1257.0,298.0,3.2788,169000.0,<1H OCEAN +-118.21,33.98,37.0,788.0,215.0,883.0,221.0,2.6818,164600.0,<1H OCEAN +-118.21,33.98,35.0,1705.0,562.0,2212.0,539.0,2.325,161500.0,<1H OCEAN +-118.2,33.99,35.0,1705.0,523.0,2252.0,508.0,2.3421,154200.0,<1H OCEAN +-118.2,33.99,33.0,1134.0,375.0,1615.0,354.0,2.1468,141700.0,<1H OCEAN +-118.19,33.99,38.0,1212.0,272.0,1129.0,263.0,2.6673,142300.0,<1H OCEAN +-118.19,33.99,40.0,1547.0,434.0,1930.0,427.0,3.3869,157300.0,<1H OCEAN +-118.19,33.98,40.0,973.0,272.0,1257.0,258.0,2.8214,158000.0,<1H OCEAN +-118.19,33.99,42.0,1429.0,436.0,1537.0,389.0,3.0114,157500.0,<1H OCEAN +-118.19,33.99,37.0,2073.0,614.0,2544.0,598.0,2.9054,156300.0,<1H OCEAN +-118.2,33.99,35.0,1608.0,465.0,2140.0,488.0,3.1979,154700.0,<1H OCEAN +-118.2,33.99,30.0,1474.0,459.0,1844.0,464.0,2.551,160000.0,<1H OCEAN +-118.19,33.99,35.0,1172.0,436.0,1741.0,408.0,2.4596,154700.0,<1H OCEAN +-118.19,33.98,34.0,1022.0,286.0,1058.0,275.0,2.6042,156700.0,<1H OCEAN +-118.19,33.99,36.0,1273.0,379.0,1398.0,353.0,2.4516,147800.0,<1H OCEAN +-118.2,33.99,31.0,1186.0,387.0,2087.0,409.0,1.9132,154600.0,<1H OCEAN +-118.2,33.98,43.0,1091.0,320.0,1418.0,316.0,2.1522,159400.0,<1H OCEAN +-118.19,33.98,33.0,151.0,83.0,380.0,83.0,1.4224,189600.0,<1H OCEAN +-118.19,33.97,30.0,1790.0,556.0,1827.0,520.0,1.7562,181300.0,<1H OCEAN +-118.19,33.97,34.0,2700.0,763.0,2815.0,767.0,2.4196,178400.0,<1H OCEAN +-118.19,33.98,36.0,4179.0,,4582.0,1196.0,2.0087,172100.0,<1H OCEAN +-118.2,33.98,32.0,1403.0,399.0,1506.0,375.0,2.0,172700.0,<1H OCEAN +-118.2,33.98,30.0,2369.0,753.0,3259.0,770.0,2.1964,158500.0,<1H OCEAN +-118.2,33.97,30.0,1911.0,562.0,2055.0,534.0,2.3917,154600.0,<1H OCEAN +-118.18,33.99,36.0,988.0,337.0,1508.0,351.0,2.4375,154800.0,<1H OCEAN +-118.18,33.99,38.0,1010.0,315.0,1157.0,301.0,1.6341,161800.0,<1H OCEAN +-118.17,33.98,27.0,1871.0,556.0,2542.0,581.0,2.8427,164400.0,<1H OCEAN +-118.18,33.98,24.0,1880.0,642.0,2646.0,605.0,2.1836,162000.0,<1H OCEAN +-118.18,33.98,30.0,1735.0,573.0,2237.0,545.0,2.3444,156100.0,<1H OCEAN +-118.18,33.99,35.0,1230.0,407.0,1512.0,364.0,2.152,170800.0,<1H OCEAN +-118.17,33.98,41.0,428.0,111.0,585.0,139.0,3.1786,132100.0,<1H OCEAN +-118.17,33.97,31.0,3388.0,1059.0,3558.0,957.0,2.4049,159000.0,<1H OCEAN +-118.17,33.97,33.0,2410.0,641.0,2106.0,593.0,2.2422,168200.0,<1H OCEAN +-118.17,33.98,36.0,627.0,177.0,834.0,175.0,2.9844,163600.0,<1H OCEAN +-118.17,33.98,41.0,756.0,,873.0,212.0,2.7321,156000.0,<1H OCEAN +-118.18,33.98,36.0,903.0,266.0,1068.0,251.0,3.0398,165400.0,<1H OCEAN +-118.18,33.97,30.0,2887.0,866.0,2806.0,830.0,2.2122,169400.0,<1H OCEAN +-118.18,33.97,34.0,3214.0,899.0,3086.0,808.0,2.0057,189400.0,<1H OCEAN +-118.18,33.98,40.0,1698.0,431.0,1280.0,405.0,2.625,206300.0,<1H OCEAN +-118.18,33.98,38.0,1477.0,374.0,1514.0,408.0,2.5703,178600.0,<1H OCEAN +-118.15,33.98,37.0,1184.0,290.0,1320.0,276.0,2.3,165600.0,<1H OCEAN +-118.15,33.97,32.0,1174.0,373.0,1758.0,361.0,2.4263,158100.0,<1H OCEAN +-118.15,33.97,33.0,1903.0,469.0,1882.0,435.0,2.4071,170500.0,<1H OCEAN +-118.16,33.97,23.0,1516.0,457.0,1977.0,435.0,2.3068,157800.0,<1H OCEAN +-118.16,33.97,30.0,2419.0,715.0,3208.0,719.0,2.1743,176000.0,<1H OCEAN +-118.14,33.97,29.0,1846.0,530.0,2576.0,528.0,2.63,156000.0,<1H OCEAN +-118.14,33.97,31.0,1161.0,267.0,1175.0,282.0,3.0114,177000.0,<1H OCEAN +-118.14,33.96,38.0,590.0,139.0,620.0,132.0,2.1731,143800.0,<1H OCEAN +-118.15,33.97,32.0,927.0,250.0,970.0,248.0,2.1591,181500.0,<1H OCEAN +-118.14,33.97,31.0,2064.0,612.0,2461.0,573.0,2.0524,160800.0,<1H OCEAN +-118.14,33.97,36.0,1407.0,385.0,1763.0,350.0,2.6364,150000.0,<1H OCEAN +-118.16,33.98,33.0,1196.0,313.0,1448.0,320.0,2.9375,162500.0,<1H OCEAN +-118.16,33.97,39.0,1444.0,447.0,1890.0,416.0,2.1181,176600.0,<1H OCEAN +-118.16,33.97,32.0,1347.0,434.0,1756.0,438.0,1.9464,190600.0,<1H OCEAN +-118.16,33.97,31.0,1363.0,428.0,1897.0,364.0,2.3929,191100.0,<1H OCEAN +-118.16,33.97,13.0,221.0,63.0,286.0,64.0,1.9063,175000.0,<1H OCEAN +-118.17,33.98,31.0,1236.0,329.0,1486.0,337.0,3.0938,155400.0,<1H OCEAN +-118.15,33.96,33.0,1201.0,340.0,1482.0,334.0,2.4821,150000.0,<1H OCEAN +-118.15,33.96,33.0,1471.0,451.0,2272.0,482.0,2.5385,160900.0,<1H OCEAN +-118.17,33.96,25.0,2249.0,681.0,2621.0,628.0,2.3,164200.0,<1H OCEAN +-118.16,33.96,24.0,1635.0,507.0,2480.0,481.0,2.4432,187500.0,<1H OCEAN +-118.17,33.96,25.0,3297.0,1066.0,5027.0,1041.0,2.2817,164200.0,<1H OCEAN +-118.17,33.96,29.0,2913.0,787.0,3803.0,740.0,2.5556,146500.0,<1H OCEAN +-118.18,33.96,20.0,427.0,118.0,402.0,105.0,1.4167,137500.0,<1H OCEAN +-118.19,33.96,28.0,3507.0,969.0,3740.0,970.0,2.0162,142000.0,<1H OCEAN +-118.18,33.97,26.0,6895.0,1877.0,8551.0,1808.0,2.3175,154500.0,<1H OCEAN +-118.19,33.97,27.0,2911.0,972.0,3559.0,945.0,1.9485,146300.0,<1H OCEAN +-118.2,33.97,28.0,2474.0,702.0,2830.0,694.0,2.754,166200.0,<1H OCEAN +-118.2,33.97,43.0,825.0,212.0,820.0,184.0,1.8897,174300.0,<1H OCEAN +-118.2,33.96,44.0,3114.0,779.0,2959.0,776.0,3.1875,171700.0,<1H OCEAN +-118.21,33.96,38.0,2090.0,519.0,1871.0,504.0,2.4688,169000.0,<1H OCEAN +-118.21,33.97,49.0,1409.0,313.0,1268.0,317.0,3.9408,170600.0,<1H OCEAN +-118.21,33.97,43.0,1751.0,400.0,1558.0,379.0,3.0313,166100.0,<1H OCEAN +-118.21,33.97,52.0,4220.0,908.0,3731.0,892.0,3.1901,167600.0,<1H OCEAN +-118.22,33.97,43.0,381.0,67.0,259.0,60.0,3.0313,166100.0,<1H OCEAN +-118.22,33.97,47.0,1147.0,297.0,1097.0,307.0,2.6384,162900.0,<1H OCEAN +-118.23,33.97,44.0,2748.0,715.0,2962.0,703.0,2.6951,169300.0,<1H OCEAN +-118.23,33.96,44.0,3186.0,876.0,3913.0,842.0,3.0143,148200.0,<1H OCEAN +-118.22,33.97,47.0,1688.0,386.0,1663.0,381.0,4.0609,171300.0,<1H OCEAN +-118.22,33.97,47.0,1058.0,295.0,1097.0,274.0,2.881,183300.0,<1H OCEAN +-118.23,33.97,47.0,932.0,295.0,1226.0,264.0,1.6065,111400.0,<1H OCEAN +-118.24,33.97,38.0,1657.0,467.0,2033.0,443.0,2.1429,118500.0,<1H OCEAN +-118.24,33.97,43.0,1357.0,349.0,1657.0,331.0,2.0819,111800.0,<1H OCEAN +-118.24,33.97,41.0,1182.0,346.0,1644.0,346.0,2.1473,115100.0,<1H OCEAN +-118.24,33.97,37.0,1053.0,263.0,1354.0,292.0,2.5833,112500.0,<1H OCEAN +-118.25,33.97,32.0,879.0,257.0,1057.0,230.0,1.6776,114800.0,<1H OCEAN +-118.25,33.97,36.0,1026.0,294.0,1316.0,268.0,1.7708,102600.0,<1H OCEAN +-118.25,33.97,39.0,1346.0,380.0,1520.0,356.0,1.1635,108700.0,<1H OCEAN +-118.25,33.97,43.0,1735.0,535.0,2288.0,524.0,1.9119,98800.0,<1H OCEAN +-118.24,33.97,37.0,1212.0,314.0,1403.0,279.0,2.5536,117200.0,<1H OCEAN +-118.24,33.96,30.0,859.0,221.0,912.0,191.0,1.9041,105100.0,<1H OCEAN +-118.25,33.97,37.0,794.0,210.0,814.0,213.0,2.2917,112000.0,<1H OCEAN +-118.25,33.96,43.0,1876.0,454.0,1571.0,458.0,2.0323,112500.0,<1H OCEAN +-118.25,33.97,38.0,1231.0,346.0,1217.0,354.0,1.8661,106600.0,<1H OCEAN +-118.24,33.96,34.0,1724.0,432.0,1876.0,416.0,2.1078,100600.0,<1H OCEAN +-118.25,33.96,48.0,1052.0,234.0,793.0,216.0,1.6585,92900.0,<1H OCEAN +-118.25,33.96,42.0,1326.0,295.0,918.0,258.0,2.3864,98800.0,<1H OCEAN +-118.25,33.96,43.0,2015.0,419.0,1543.0,399.0,1.8672,98100.0,<1H OCEAN +-118.25,33.95,48.0,1766.0,424.0,1655.0,420.0,0.9751,95500.0,<1H OCEAN +-118.25,33.95,41.0,1576.0,339.0,1252.0,302.0,1.9798,98100.0,<1H OCEAN +-118.23,33.96,39.0,405.0,163.0,686.0,164.0,1.695,94800.0,<1H OCEAN +-118.23,33.96,36.0,1062.0,270.0,1136.0,273.0,1.6597,109100.0,<1H OCEAN +-118.24,33.96,44.0,1338.0,366.0,1765.0,388.0,1.7778,109900.0,<1H OCEAN +-118.24,33.96,39.0,643.0,186.0,821.0,191.0,2.5729,97300.0,<1H OCEAN +-118.24,33.96,34.0,946.0,254.0,1101.0,239.0,1.7396,105900.0,<1H OCEAN +-118.24,33.96,37.0,1602.0,388.0,1553.0,342.0,2.0655,93400.0,<1H OCEAN +-118.23,33.95,42.0,705.0,173.0,739.0,140.0,0.9166,99000.0,<1H OCEAN +-118.23,33.95,27.0,504.0,142.0,789.0,167.0,0.9518,91400.0,<1H OCEAN +-118.21,33.96,39.0,2050.0,529.0,1959.0,485.0,2.1389,168900.0,<1H OCEAN +-118.21,33.96,39.0,2265.0,628.0,2323.0,599.0,2.1522,155300.0,<1H OCEAN +-118.22,33.96,32.0,2232.0,603.0,2361.0,608.0,2.5966,170900.0,<1H OCEAN +-118.22,33.96,36.0,1542.0,458.0,1711.0,468.0,1.9028,164200.0,<1H OCEAN +-118.22,33.96,35.0,1437.0,474.0,2113.0,484.0,2.6179,158800.0,<1H OCEAN +-118.22,33.96,42.0,1380.0,331.0,1290.0,288.0,2.8,161800.0,<1H OCEAN +-118.21,33.95,38.0,1889.0,565.0,2087.0,559.0,1.7778,154000.0,<1H OCEAN +-118.22,33.95,36.0,1679.0,483.0,2249.0,487.0,2.8167,160400.0,<1H OCEAN +-118.22,33.95,42.0,3896.0,981.0,4496.0,993.0,3.153,150900.0,<1H OCEAN +-118.23,33.96,42.0,1977.0,570.0,2406.0,557.0,2.5913,151600.0,<1H OCEAN +-118.23,33.95,43.0,1683.0,520.0,2190.0,494.0,2.2391,152800.0,<1H OCEAN +-118.22,33.94,42.0,1046.0,287.0,1218.0,289.0,2.6538,143400.0,<1H OCEAN +-118.22,33.94,42.0,1115.0,297.0,1412.0,325.0,3.0903,153500.0,<1H OCEAN +-118.22,33.94,38.0,788.0,224.0,1155.0,208.0,3.3542,153800.0,<1H OCEAN +-118.22,33.94,41.0,928.0,249.0,1108.0,236.0,3.4323,144600.0,<1H OCEAN +-118.2,33.96,44.0,2144.0,477.0,1760.0,452.0,2.3221,161600.0,<1H OCEAN +-118.2,33.96,43.0,1233.0,306.0,1190.0,282.0,2.8371,161300.0,<1H OCEAN +-118.2,33.96,41.0,1512.0,400.0,1690.0,367.0,3.055,167000.0,<1H OCEAN +-118.2,33.96,37.0,2127.0,533.0,2021.0,480.0,2.9773,164600.0,<1H OCEAN +-118.21,33.96,43.0,1686.0,446.0,1590.0,474.0,2.3241,159300.0,<1H OCEAN +-118.21,33.96,48.0,284.0,104.0,422.0,119.0,1.2826,145500.0,<1H OCEAN +-118.21,33.95,43.0,1500.0,419.0,1726.0,440.0,1.8641,165100.0,<1H OCEAN +-118.2,33.95,35.0,1924.0,520.0,2101.0,541.0,2.4267,151500.0,<1H OCEAN +-118.2,33.95,41.0,679.0,184.0,788.0,185.0,2.1406,165300.0,<1H OCEAN +-118.21,33.95,32.0,1116.0,328.0,1265.0,302.0,2.295,155200.0,<1H OCEAN +-118.21,33.95,35.0,2134.0,650.0,2248.0,587.0,2.2988,153400.0,<1H OCEAN +-118.21,33.95,35.0,2129.0,614.0,2376.0,618.0,2.0372,160800.0,<1H OCEAN +-118.2,33.94,42.0,618.0,163.0,680.0,179.0,3.3472,154200.0,<1H OCEAN +-118.2,33.94,45.0,1818.0,408.0,1705.0,373.0,4.0441,157500.0,<1H OCEAN +-118.21,33.94,40.0,2227.0,594.0,2244.0,580.0,2.4459,143800.0,<1H OCEAN +-118.21,33.94,41.0,1807.0,442.0,1628.0,443.0,2.84,156100.0,<1H OCEAN +-118.19,33.95,44.0,1436.0,271.0,850.0,269.0,3.2768,179100.0,<1H OCEAN +-118.19,33.94,45.0,1871.0,371.0,1315.0,382.0,3.3661,160800.0,<1H OCEAN +-118.19,33.94,45.0,1403.0,315.0,1111.0,311.0,3.3846,168100.0,<1H OCEAN +-118.19,33.95,41.0,1368.0,309.0,1244.0,312.0,3.0833,164800.0,<1H OCEAN +-118.19,33.95,42.0,1651.0,463.0,1559.0,436.0,2.3882,148100.0,<1H OCEAN +-118.2,33.94,44.0,1413.0,298.0,1200.0,307.0,3.5125,169300.0,<1H OCEAN +-118.2,33.94,45.0,1570.0,328.0,1321.0,300.0,3.7361,171800.0,<1H OCEAN +-118.2,33.94,43.0,1934.0,511.0,1895.0,493.0,2.5029,159700.0,<1H OCEAN +-118.19,33.96,40.0,979.0,296.0,934.0,292.0,2.6354,151800.0,<1H OCEAN +-118.19,33.95,42.0,2309.0,685.0,2609.0,673.0,2.7206,162100.0,<1H OCEAN +-118.16,33.94,32.0,2210.0,456.0,1270.0,484.0,4.7708,178600.0,<1H OCEAN +-118.16,33.93,35.0,757.0,151.0,474.0,132.0,3.7361,179800.0,<1H OCEAN +-118.18,33.94,44.0,1337.0,245.0,968.0,240.0,3.4688,183600.0,<1H OCEAN +-118.18,33.95,39.0,2121.0,579.0,1991.0,528.0,2.9094,152200.0,<1H OCEAN +-118.18,33.95,42.0,2608.0,610.0,2062.0,616.0,3.5341,167500.0,<1H OCEAN +-118.18,33.94,43.0,2724.0,612.0,2340.0,570.0,2.7,165000.0,<1H OCEAN +-118.17,33.94,17.0,1145.0,209.0,499.0,202.0,4.6389,165500.0,<1H OCEAN +-118.17,33.95,23.0,1991.0,584.0,1380.0,535.0,1.9107,181900.0,<1H OCEAN +-118.17,33.92,36.0,2447.0,503.0,1532.0,498.0,4.3667,171800.0,<1H OCEAN +-118.17,33.92,43.0,2099.0,398.0,1276.0,387.0,3.1528,166800.0,<1H OCEAN +-118.16,33.92,44.0,1368.0,277.0,899.0,271.0,3.5938,161300.0,<1H OCEAN +-118.16,33.91,41.0,1806.0,408.0,1146.0,374.0,2.9643,162200.0,<1H OCEAN +-118.17,33.91,39.0,1157.0,273.0,877.0,305.0,3.1087,171000.0,<1H OCEAN +-118.18,33.92,32.0,2035.0,519.0,2282.0,480.0,3.2734,136400.0,<1H OCEAN +-118.18,33.92,29.0,749.0,185.0,708.0,196.0,2.4583,136900.0,<1H OCEAN +-118.19,33.92,36.0,1356.0,314.0,1469.0,300.0,2.0785,139800.0,<1H OCEAN +-118.18,33.93,31.0,1516.0,400.0,1820.0,398.0,2.1641,122900.0,<1H OCEAN +-118.18,33.93,35.0,952.0,271.0,949.0,261.0,2.4297,147200.0,<1H OCEAN +-118.19,33.93,40.0,1334.0,276.0,1226.0,278.0,3.4712,144300.0,<1H OCEAN +-118.19,33.93,42.0,1829.0,391.0,1614.0,377.0,3.1912,146400.0,<1H OCEAN +-118.2,33.93,40.0,1929.0,417.0,1780.0,419.0,3.4402,149400.0,<1H OCEAN +-118.19,33.93,44.0,1613.0,345.0,1227.0,342.0,3.1667,145700.0,<1H OCEAN +-118.19,33.92,43.0,2339.0,487.0,1732.0,449.0,3.0987,139400.0,<1H OCEAN +-118.2,33.92,42.0,1411.0,314.0,1432.0,322.0,3.0871,138800.0,<1H OCEAN +-118.2,33.93,38.0,1626.0,307.0,1280.0,295.0,3.5313,146500.0,<1H OCEAN +-118.21,33.94,34.0,892.0,318.0,1443.0,341.0,2.1903,162500.0,<1H OCEAN +-118.21,33.94,34.0,710.0,205.0,1134.0,233.0,2.7734,141100.0,<1H OCEAN +-118.21,33.93,30.0,2831.0,862.0,3649.0,883.0,1.9668,152100.0,<1H OCEAN +-118.2,33.93,36.0,2210.0,634.0,2341.0,553.0,2.1715,131100.0,<1H OCEAN +-118.21,33.93,33.0,2739.0,801.0,3423.0,741.0,2.2847,132700.0,<1H OCEAN +-118.2,33.93,41.0,857.0,201.0,934.0,227.0,2.6339,145700.0,<1H OCEAN +-118.2,33.93,36.0,1191.0,345.0,1193.0,295.0,2.5185,138800.0,<1H OCEAN +-118.21,33.93,36.0,1337.0,382.0,1769.0,393.0,2.6953,121000.0,<1H OCEAN +-118.21,33.93,39.0,354.0,73.0,184.0,58.0,2.7679,108900.0,<1H OCEAN +-118.22,33.93,39.0,1921.0,483.0,2286.0,470.0,3.0167,130000.0,<1H OCEAN +-118.22,33.94,40.0,930.0,258.0,1203.0,244.0,2.5938,115400.0,<1H OCEAN +-118.23,33.93,23.0,545.0,131.0,610.0,126.0,1.4861,95100.0,<1H OCEAN +-118.23,33.93,30.0,1147.0,260.0,1219.0,210.0,2.0658,93200.0,<1H OCEAN +-118.22,33.93,30.0,443.0,170.0,903.0,189.0,2.1964,125000.0,<1H OCEAN +-118.21,33.93,41.0,619.0,138.0,636.0,145.0,2.5083,118100.0,<1H OCEAN +-118.21,33.92,37.0,1705.0,403.0,1839.0,410.0,2.5833,132700.0,<1H OCEAN +-118.21,33.92,35.0,1669.0,445.0,1870.0,412.0,3.0417,117300.0,<1H OCEAN +-118.21,33.92,28.0,2949.0,1003.0,4551.0,930.0,1.9026,131900.0,<1H OCEAN +-118.22,33.92,43.0,1195.0,256.0,1251.0,262.0,3.4539,125000.0,<1H OCEAN +-118.23,33.93,37.0,239.0,49.0,308.0,52.0,1.4028,105400.0,<1H OCEAN +-118.23,33.93,35.0,1149.0,277.0,909.0,214.0,1.7411,96700.0,<1H OCEAN +-118.23,33.92,32.0,2698.0,640.0,1953.0,613.0,1.2222,107200.0,<1H OCEAN +-118.24,33.93,19.0,325.0,74.0,354.0,87.0,2.75,90600.0,<1H OCEAN +-118.24,33.92,42.0,328.0,100.0,605.0,87.0,2.4464,97400.0,<1H OCEAN +-118.24,33.92,44.0,1079.0,210.0,601.0,182.0,2.2411,106400.0,<1H OCEAN +-118.25,33.93,38.0,180.0,43.0,246.0,56.0,2.85,90000.0,<1H OCEAN +-118.25,33.93,27.0,581.0,135.0,647.0,131.0,3.2917,83100.0,<1H OCEAN +-118.25,33.93,42.0,763.0,191.0,754.0,174.0,2.0486,101800.0,<1H OCEAN +-118.25,33.92,46.0,723.0,154.0,411.0,165.0,2.0893,96500.0,<1H OCEAN +-118.25,33.92,44.0,1737.0,363.0,1184.0,343.0,2.5363,95900.0,<1H OCEAN +-118.25,33.92,44.0,1137.0,235.0,747.0,225.0,2.0,92600.0,<1H OCEAN +-118.26,33.92,42.0,3320.0,682.0,2105.0,632.0,1.9809,104600.0,<1H OCEAN +-118.26,33.91,44.0,892.0,139.0,440.0,159.0,2.8859,120800.0,<1H OCEAN +-118.27,33.92,34.0,1178.0,260.0,1166.0,244.0,1.9185,93300.0,<1H OCEAN +-118.27,33.92,35.0,1818.0,374.0,1444.0,372.0,2.745,106800.0,<1H OCEAN +-118.28,33.92,39.0,1472.0,302.0,1036.0,318.0,3.0,110000.0,<1H OCEAN +-118.28,33.92,37.0,742.0,151.0,729.0,144.0,3.055,105400.0,<1H OCEAN +-118.27,33.91,42.0,1786.0,358.0,1318.0,373.0,2.625,101100.0,<1H OCEAN +-118.27,33.91,37.0,3018.0,547.0,1720.0,512.0,2.7269,124100.0,<1H OCEAN +-118.27,33.91,32.0,2238.0,471.0,1292.0,467.0,1.1705,110600.0,<1H OCEAN +-118.27,33.89,32.0,1969.0,397.0,1349.0,370.0,4.4659,138100.0,<1H OCEAN +-118.27,33.87,21.0,6108.0,1130.0,3244.0,1113.0,4.2768,181400.0,<1H OCEAN +-118.25,33.9,42.0,1386.0,320.0,1163.0,319.0,2.4271,89500.0,<1H OCEAN +-118.26,33.9,38.0,1566.0,318.0,981.0,318.0,4.0234,111900.0,<1H OCEAN +-118.26,33.9,22.0,894.0,232.0,754.0,222.0,2.0096,110700.0,<1H OCEAN +-118.25,33.92,36.0,949.0,164.0,502.0,163.0,4.1042,124400.0,<1H OCEAN +-118.25,33.91,36.0,1950.0,365.0,1125.0,374.0,3.1111,119300.0,<1H OCEAN +-118.25,33.9,36.0,1135.0,231.0,614.0,227.0,2.5521,113100.0,<1H OCEAN +-118.25,33.91,35.0,1479.0,272.0,963.0,292.0,3.4917,109500.0,<1H OCEAN +-118.26,33.91,39.0,935.0,210.0,711.0,193.0,2.4375,101900.0,<1H OCEAN +-118.26,33.91,33.0,954.0,241.0,655.0,218.0,2.5882,92800.0,<1H OCEAN +-118.26,33.91,39.0,967.0,256.0,903.0,256.0,1.9038,93100.0,<1H OCEAN +-118.24,33.91,40.0,972.0,240.0,761.0,225.0,1.4688,88200.0,<1H OCEAN +-118.24,33.91,38.0,745.0,152.0,721.0,160.0,1.875,102900.0,<1H OCEAN +-118.24,33.91,36.0,1446.0,316.0,1286.0,314.0,2.7083,103600.0,<1H OCEAN +-118.24,33.91,37.0,1607.0,377.0,1526.0,375.0,1.7158,94300.0,<1H OCEAN +-118.24,33.92,40.0,1772.0,369.0,1122.0,324.0,3.2768,96100.0,<1H OCEAN +-118.23,33.92,32.0,1735.0,430.0,1699.0,386.0,1.1793,103800.0,<1H OCEAN +-118.23,33.91,34.0,661.0,146.0,742.0,143.0,2.1734,88200.0,<1H OCEAN +-118.23,33.91,33.0,677.0,182.0,984.0,174.0,2.5893,88900.0,<1H OCEAN +-118.23,33.91,34.0,789.0,200.0,1041.0,191.0,3.119,90300.0,<1H OCEAN +-118.23,33.91,27.0,1694.0,393.0,1890.0,373.0,3.0341,89100.0,<1H OCEAN +-118.22,33.92,32.0,1263.0,333.0,1789.0,346.0,1.9957,89300.0,<1H OCEAN +-118.22,33.91,31.0,571.0,153.0,841.0,158.0,2.6154,89200.0,<1H OCEAN +-118.23,33.91,34.0,1060.0,276.0,1215.0,250.0,2.0804,84700.0,<1H OCEAN +-118.23,33.92,24.0,1555.0,406.0,1665.0,361.0,1.6437,98800.0,<1H OCEAN +-118.22,33.92,23.0,926.0,409.0,1856.0,408.0,2.1366,100000.0,<1H OCEAN +-118.21,33.91,24.0,1545.0,391.0,1807.0,388.0,2.6429,105300.0,<1H OCEAN +-118.21,33.91,26.0,2422.0,632.0,2601.0,583.0,1.7824,110200.0,<1H OCEAN +-118.22,33.9,38.0,796.0,159.0,679.0,167.0,3.6607,110400.0,<1H OCEAN +-118.22,33.91,28.0,1847.0,500.0,2263.0,473.0,1.5161,103200.0,<1H OCEAN +-118.2,33.9,26.0,1000.0,275.0,1178.0,263.0,2.12,105000.0,<1H OCEAN +-118.21,33.9,35.0,2420.0,579.0,2010.0,540.0,2.0817,104600.0,<1H OCEAN +-118.21,33.9,41.0,941.0,233.0,973.0,253.0,1.9583,102300.0,<1H OCEAN +-118.22,33.9,35.0,1649.0,424.0,1786.0,388.0,1.4091,105600.0,<1H OCEAN +-118.22,33.9,30.0,1007.0,260.0,1112.0,238.0,1.7262,115600.0,<1H OCEAN +-118.2,33.92,36.0,414.0,104.0,477.0,130.0,3.6719,130400.0,<1H OCEAN +-118.2,33.92,45.0,1283.0,,1025.0,248.0,3.2798,141200.0,<1H OCEAN +-118.2,33.92,39.0,1050.0,217.0,895.0,207.0,3.1538,155600.0,<1H OCEAN +-118.21,33.91,37.0,1073.0,265.0,1197.0,250.0,2.7109,133000.0,<1H OCEAN +-118.21,33.92,41.0,1722.0,363.0,1432.0,326.0,3.2976,151200.0,<1H OCEAN +-118.21,33.92,36.0,602.0,150.0,645.0,145.0,3.1964,115400.0,<1H OCEAN +-118.18,33.91,41.0,1260.0,299.0,1535.0,322.0,3.0134,128100.0,<1H OCEAN +-118.18,33.91,36.0,1138.0,238.0,878.0,224.0,2.0625,134400.0,<1H OCEAN +-118.19,33.91,43.0,1531.0,357.0,1509.0,376.0,2.6354,128100.0,<1H OCEAN +-118.19,33.91,33.0,915.0,225.0,826.0,212.0,2.7708,117400.0,<1H OCEAN +-118.19,33.92,35.0,915.0,241.0,1153.0,252.0,3.305,115800.0,<1H OCEAN +-118.19,33.91,35.0,2695.0,748.0,2935.0,706.0,2.0134,132400.0,<1H OCEAN +-118.2,33.91,43.0,1381.0,278.0,1494.0,298.0,3.5878,118400.0,<1H OCEAN +-118.2,33.9,33.0,1435.0,322.0,1298.0,299.0,2.7813,105100.0,<1H OCEAN +-118.2,33.91,36.0,2283.0,499.0,1836.0,462.0,2.8793,118100.0,<1H OCEAN +-118.19,33.9,36.0,1073.0,271.0,1385.0,288.0,2.3214,104800.0,<1H OCEAN +-118.19,33.9,32.0,2762.0,652.0,2677.0,632.0,2.5719,105600.0,<1H OCEAN +-118.19,33.9,36.0,2326.0,543.0,2073.0,494.0,1.9952,112900.0,<1H OCEAN +-118.19,33.89,31.0,886.0,224.0,1154.0,247.0,2.1071,99500.0,<1H OCEAN +-118.19,33.89,32.0,1696.0,438.0,1639.0,376.0,2.0357,107300.0,<1H OCEAN +-118.2,33.89,37.0,2394.0,568.0,2499.0,551.0,2.5321,105100.0,<1H OCEAN +-118.2,33.9,34.0,1552.0,444.0,2093.0,413.0,2.2125,103200.0,<1H OCEAN +-118.19,33.89,38.0,4018.0,986.0,3702.0,927.0,2.9293,113600.0,<1H OCEAN +-118.2,33.89,40.0,2538.0,564.0,2170.0,541.0,2.7212,107900.0,<1H OCEAN +-118.21,33.89,42.0,1254.0,225.0,929.0,235.0,4.3646,116200.0,<1H OCEAN +-118.21,33.89,39.0,1565.0,364.0,1389.0,360.0,2.7443,113900.0,<1H OCEAN +-118.21,33.89,42.0,1739.0,370.0,1104.0,297.0,2.2125,120700.0,<1H OCEAN +-118.21,33.9,43.0,1810.0,357.0,1335.0,358.0,3.1189,118800.0,<1H OCEAN +-118.21,33.89,45.0,1211.0,234.0,1128.0,261.0,3.4792,110700.0,<1H OCEAN +-118.21,33.88,38.0,929.0,166.0,686.0,183.0,3.4485,119400.0,<1H OCEAN +-118.21,33.88,29.0,1976.0,444.0,1254.0,371.0,2.1782,126800.0,<1H OCEAN +-118.22,33.89,26.0,266.0,75.0,252.0,59.0,2.1211,138100.0,<1H OCEAN +-118.22,33.89,41.0,990.0,228.0,776.0,207.0,2.125,120200.0,<1H OCEAN +-118.22,33.89,37.0,797.0,190.0,485.0,166.0,2.7434,95200.0,<1H OCEAN +-118.22,33.89,36.0,873.0,240.0,1086.0,217.0,2.25,126600.0,<1H OCEAN +-118.23,33.89,16.0,5003.0,1180.0,4145.0,1159.0,2.1389,133400.0,<1H OCEAN +-118.24,33.89,34.0,1479.0,332.0,1166.0,322.0,2.6165,100900.0,<1H OCEAN +-118.22,33.91,27.0,500.0,159.0,732.0,162.0,2.7426,103100.0,<1H OCEAN +-118.22,33.9,22.0,312.0,107.0,583.0,119.0,1.9423,98400.0,<1H OCEAN +-118.22,33.9,40.0,1802.0,496.0,2096.0,468.0,2.3542,97900.0,<1H OCEAN +-118.23,33.9,31.0,2143.0,522.0,2276.0,519.0,1.8095,100800.0,<1H OCEAN +-118.23,33.9,34.0,2462.0,553.0,2334.0,502.0,1.641,96800.0,<1H OCEAN +-118.23,33.9,28.0,1108.0,284.0,1498.0,289.0,2.4706,88800.0,<1H OCEAN +-118.23,33.9,45.0,1285.0,238.0,840.0,211.0,3.4107,112500.0,<1H OCEAN +-118.24,33.9,38.0,2055.0,442.0,1518.0,425.0,2.3382,103000.0,<1H OCEAN +-118.24,33.9,35.0,1079.0,247.0,1055.0,243.0,2.375,93600.0,<1H OCEAN +-118.24,33.9,39.0,642.0,129.0,475.0,123.0,1.2083,92600.0,<1H OCEAN +-118.25,33.9,37.0,2119.0,442.0,1372.0,406.0,1.9605,106200.0,<1H OCEAN +-118.24,33.9,40.0,1308.0,272.0,901.0,257.0,2.8269,98000.0,<1H OCEAN +-118.25,33.9,38.0,1201.0,223.0,733.0,206.0,3.3804,105800.0,<1H OCEAN +-118.25,33.89,35.0,1582.0,391.0,1957.0,404.0,2.4537,91500.0,<1H OCEAN +-118.24,33.89,32.0,1132.0,266.0,1211.0,279.0,2.1838,98300.0,<1H OCEAN +-118.25,33.89,41.0,1476.0,286.0,1086.0,278.0,2.4632,111700.0,<1H OCEAN +-118.25,33.89,36.0,406.0,71.0,268.0,77.0,3.9,115800.0,<1H OCEAN +-118.25,33.89,34.0,1367.0,288.0,1183.0,286.0,2.6812,104100.0,<1H OCEAN +-118.26,33.89,36.0,2230.0,417.0,1395.0,381.0,2.8493,109600.0,<1H OCEAN +-118.26,33.89,36.0,923.0,165.0,603.0,191.0,3.5687,120700.0,<1H OCEAN +-118.24,33.88,37.0,1843.0,366.0,1207.0,351.0,2.4821,111000.0,<1H OCEAN +-118.25,33.88,37.0,1027.0,217.0,1042.0,254.0,2.2121,98600.0,<1H OCEAN +-118.25,33.89,37.0,1042.0,213.0,699.0,196.0,2.9643,103200.0,<1H OCEAN +-118.25,33.89,36.0,1527.0,309.0,1154.0,279.0,3.3095,105500.0,<1H OCEAN +-118.26,33.88,39.0,1756.0,320.0,1055.0,322.0,3.2375,105200.0,<1H OCEAN +-118.26,33.88,40.0,519.0,102.0,330.0,95.0,3.0972,108500.0,<1H OCEAN +-118.26,33.88,36.0,1212.0,222.0,775.0,224.0,5.5591,136500.0,<1H OCEAN +-118.22,33.88,37.0,1149.0,280.0,1016.0,250.0,2.125,101900.0,<1H OCEAN +-118.22,33.88,35.0,998.0,313.0,1335.0,311.0,1.6574,102500.0,<1H OCEAN +-118.23,33.89,35.0,1255.0,344.0,1782.0,343.0,2.1949,95100.0,<1H OCEAN +-118.23,33.88,35.0,842.0,201.0,763.0,189.0,2.6719,109800.0,<1H OCEAN +-118.23,33.88,41.0,1941.0,367.0,1204.0,323.0,3.0417,113700.0,<1H OCEAN +-118.23,33.89,36.0,2598.0,514.0,1872.0,514.0,3.1667,117700.0,<1H OCEAN +-118.22,33.86,16.0,8732.0,1489.0,3944.0,1493.0,5.1948,203500.0,<1H OCEAN +-118.24,33.85,25.0,9594.0,1489.0,5237.0,1496.0,5.9684,193300.0,<1H OCEAN +-118.23,33.84,25.0,1106.0,207.0,888.0,216.0,5.3307,207000.0,<1H OCEAN +-118.24,33.83,22.0,7368.0,1367.0,4721.0,1342.0,4.8438,213100.0,<1H OCEAN +-118.25,33.84,19.0,1731.0,420.0,1032.0,364.0,3.8125,208100.0,<1H OCEAN +-118.25,33.87,18.0,6812.0,1263.0,3704.0,1216.0,4.25,169200.0,<1H OCEAN +-118.25,33.86,26.0,3022.0,476.0,1852.0,452.0,6.0531,186400.0,<1H OCEAN +-118.26,33.85,25.0,2324.0,326.0,1087.0,328.0,5.293,207000.0,<1H OCEAN +-118.26,33.85,24.0,9071.0,1335.0,4558.0,1327.0,5.542,197500.0,<1H OCEAN +-118.27,33.86,33.0,1685.0,333.0,1484.0,318.0,4.3527,167000.0,<1H OCEAN +-118.27,33.86,29.0,2587.0,489.0,2115.0,475.0,3.7466,168600.0,<1H OCEAN +-118.27,33.86,26.0,1097.0,167.0,701.0,188.0,6.5799,196600.0,<1H OCEAN +-118.28,33.85,27.0,489.0,98.0,403.0,97.0,5.144,180800.0,<1H OCEAN +-118.28,33.84,27.0,2326.0,533.0,1697.0,546.0,3.8633,187900.0,<1H OCEAN +-118.28,33.83,18.0,5923.0,1409.0,3887.0,1322.0,3.4712,194400.0,<1H OCEAN +-118.29,33.84,11.0,2274.0,617.0,1897.0,622.0,3.5094,162900.0,<1H OCEAN +-118.29,33.84,33.0,896.0,208.0,843.0,200.0,3.5,183000.0,<1H OCEAN +-118.29,33.84,34.0,2617.0,558.0,1396.0,515.0,5.061,218000.0,<1H OCEAN +-118.29,33.84,23.0,3626.0,799.0,2321.0,731.0,4.7393,237900.0,<1H OCEAN +-118.29,33.83,24.0,4092.0,893.0,2819.0,893.0,4.1378,216500.0,<1H OCEAN +-118.28,33.82,26.0,4586.0,1042.0,3680.0,1027.0,4.174,205100.0,<1H OCEAN +-118.29,33.82,21.0,4383.0,901.0,2689.0,913.0,3.4375,218800.0,<1H OCEAN +-118.29,33.81,19.0,7023.0,1538.0,3993.0,1412.0,5.0532,218200.0,<1H OCEAN +-118.29,33.8,21.0,9944.0,1623.0,4185.0,1582.0,4.526,329400.0,<1H OCEAN +-118.28,33.82,30.0,3615.0,760.0,2813.0,752.0,5.3849,217700.0,<1H OCEAN +-118.28,33.81,29.0,2755.0,508.0,2046.0,488.0,5.2034,212400.0,<1H OCEAN +-118.27,33.82,36.0,1593.0,334.0,1427.0,320.0,4.4015,166900.0,<1H OCEAN +-118.27,33.82,33.0,1596.0,337.0,1650.0,329.0,4.3687,173500.0,<1H OCEAN +-118.27,33.82,37.0,943.0,218.0,803.0,216.0,5.2287,191100.0,<1H OCEAN +-118.27,33.81,10.0,1881.0,571.0,1769.0,553.0,3.9286,114000.0,<1H OCEAN +-118.27,33.81,42.0,865.0,208.0,811.0,218.0,3.8621,165300.0,<1H OCEAN +-118.27,33.81,38.0,1607.0,337.0,1130.0,334.0,4.4821,190700.0,<1H OCEAN +-118.27,33.82,39.0,1357.0,249.0,763.0,229.0,4.25,200300.0,<1H OCEAN +-118.27,33.8,28.0,4698.0,902.0,3287.0,881.0,4.8508,215900.0,<1H OCEAN +-118.27,33.84,24.0,6303.0,1277.0,3728.0,1252.0,3.9227,208600.0,<1H OCEAN +-118.28,33.83,28.0,880.0,168.0,717.0,142.0,4.5469,175700.0,<1H OCEAN +-118.27,33.83,28.0,2152.0,415.0,1623.0,429.0,4.35,200500.0,<1H OCEAN +-118.27,33.83,34.0,1124.0,245.0,717.0,242.0,3.1667,186900.0,<1H OCEAN +-118.26,33.83,24.0,3059.0,,2064.0,629.0,3.5518,184600.0,<1H OCEAN +-118.27,33.82,28.0,1642.0,434.0,1575.0,420.0,4.1292,201900.0,<1H OCEAN +-118.26,33.82,28.0,5091.0,1074.0,4753.0,1033.0,3.6477,117400.0,<1H OCEAN +-118.26,33.83,28.0,4112.0,861.0,3211.0,841.0,4.4539,192200.0,<1H OCEAN +-118.21,33.84,28.0,822.0,205.0,627.0,192.0,3.4583,166300.0,<1H OCEAN +-118.22,33.84,35.0,1131.0,273.0,1007.0,269.0,4.0219,168300.0,<1H OCEAN +-118.22,33.84,38.0,1928.0,429.0,1358.0,399.0,4.0687,160300.0,<1H OCEAN +-118.22,33.83,42.0,1370.0,299.0,1018.0,328.0,4.4474,160200.0,<1H OCEAN +-118.22,33.83,44.0,1792.0,404.0,1115.0,358.0,3.9091,174400.0,<1H OCEAN +-118.22,33.83,43.0,1426.0,272.0,871.0,276.0,3.7083,175200.0,<1H OCEAN +-118.21,33.83,38.0,793.0,193.0,601.0,187.0,2.8837,176100.0,NEAR OCEAN +-118.07,33.93,5.0,906.0,187.0,1453.0,158.0,4.125,171900.0,<1H OCEAN +-118.08,33.93,39.0,859.0,164.0,673.0,172.0,3.7143,158200.0,<1H OCEAN +-118.08,33.93,39.0,1478.0,324.0,1127.0,320.0,3.525,158000.0,<1H OCEAN +-118.08,33.92,38.0,1335.0,,1011.0,269.0,3.6908,157500.0,<1H OCEAN +-118.08,33.92,39.0,1631.0,322.0,1034.0,328.0,4.5382,165700.0,<1H OCEAN +-118.07,33.92,36.0,1560.0,320.0,1348.0,314.0,3.622,174000.0,<1H OCEAN +-118.08,33.92,34.0,2118.0,437.0,1414.0,442.0,3.7238,166800.0,<1H OCEAN +-118.08,33.93,33.0,2263.0,511.0,1626.0,457.0,3.5556,172800.0,<1H OCEAN +-118.08,33.93,34.0,1558.0,375.0,1179.0,337.0,3.2188,165100.0,<1H OCEAN +-118.09,33.92,36.0,2381.0,419.0,1669.0,444.0,4.6976,171100.0,<1H OCEAN +-118.09,33.92,36.0,847.0,185.0,713.0,194.0,4.8542,167400.0,<1H OCEAN +-118.09,33.92,36.0,1226.0,211.0,711.0,219.0,4.5699,170800.0,<1H OCEAN +-118.09,33.92,33.0,879.0,181.0,547.0,169.0,5.3146,168600.0,<1H OCEAN +-118.09,33.92,31.0,1983.0,419.0,1157.0,390.0,3.5455,168300.0,<1H OCEAN +-118.09,33.93,37.0,1950.0,356.0,1183.0,338.0,4.1449,175300.0,<1H OCEAN +-118.1,33.92,35.0,2017.0,383.0,1388.0,386.0,4.0774,171600.0,<1H OCEAN +-118.1,33.93,36.0,1124.0,217.0,707.0,234.0,4.375,174500.0,<1H OCEAN +-118.1,33.93,33.0,1474.0,325.0,1205.0,335.0,3.1397,166800.0,<1H OCEAN +-118.11,33.92,32.0,1016.0,190.0,729.0,177.0,4.3,151300.0,<1H OCEAN +-118.11,33.92,34.0,1414.0,263.0,983.0,264.0,4.1767,156600.0,<1H OCEAN +-118.1,33.94,33.0,639.0,129.0,460.0,118.0,3.1607,189000.0,<1H OCEAN +-118.1,33.93,35.0,1622.0,302.0,845.0,284.0,4.5769,186100.0,<1H OCEAN +-118.1,33.95,34.0,3635.0,781.0,2171.0,720.0,3.7308,196900.0,<1H OCEAN +-118.1,33.95,27.0,1666.0,365.0,995.0,354.0,4.5694,204300.0,<1H OCEAN +-118.11,33.95,36.0,2049.0,334.0,1105.0,363.0,4.8036,261300.0,<1H OCEAN +-118.1,33.94,34.0,1947.0,284.0,841.0,277.0,6.1814,453600.0,<1H OCEAN +-118.11,33.95,34.0,2319.0,334.0,941.0,356.0,6.4319,452300.0,<1H OCEAN +-118.11,33.95,34.0,1723.0,279.0,617.0,252.0,6.7501,400000.0,<1H OCEAN +-118.12,33.97,33.0,3099.0,839.0,2025.0,750.0,3.183,191100.0,<1H OCEAN +-118.12,33.96,38.0,1301.0,264.0,877.0,275.0,4.625,191300.0,<1H OCEAN +-118.11,33.96,29.0,2784.0,582.0,1278.0,550.0,4.3882,261600.0,<1H OCEAN +-118.12,33.95,35.0,1604.0,280.0,802.0,280.0,5.752,291000.0,<1H OCEAN +-118.12,33.96,34.0,2863.0,451.0,1243.0,466.0,6.0723,297200.0,<1H OCEAN +-118.12,33.96,38.0,2105.0,348.0,956.0,350.0,4.4125,246000.0,<1H OCEAN +-118.12,33.96,36.0,1426.0,235.0,698.0,240.0,4.8523,267300.0,<1H OCEAN +-118.12,33.97,35.0,708.0,145.0,471.0,153.0,3.2,197400.0,<1H OCEAN +-118.13,33.97,36.0,1759.0,295.0,837.0,267.0,4.6992,251900.0,<1H OCEAN +-118.13,33.96,36.0,1933.0,341.0,958.0,335.0,4.4732,266000.0,<1H OCEAN +-118.13,33.96,38.0,1040.0,202.0,557.0,228.0,4.0,254700.0,<1H OCEAN +-118.14,33.96,34.0,2744.0,541.0,1333.0,503.0,4.0536,277200.0,<1H OCEAN +-118.13,33.96,35.0,1500.0,250.0,706.0,250.0,4.5625,253500.0,<1H OCEAN +-118.13,33.97,34.0,1736.0,297.0,823.0,292.0,5.4042,241600.0,<1H OCEAN +-118.13,33.95,37.0,1709.0,333.0,778.0,344.0,3.9036,326600.0,<1H OCEAN +-118.14,33.95,44.0,1812.0,338.0,822.0,314.0,6.7744,294100.0,<1H OCEAN +-118.14,33.95,42.0,1413.0,228.0,630.0,219.0,6.8564,300000.0,<1H OCEAN +-118.14,33.95,37.0,1462.0,243.0,600.0,236.0,5.2015,302000.0,<1H OCEAN +-118.14,33.95,36.0,1942.0,355.0,891.0,348.0,3.6635,282100.0,<1H OCEAN +-118.15,33.96,33.0,2418.0,485.0,1397.0,477.0,3.1083,285500.0,<1H OCEAN +-118.15,33.95,31.0,1053.0,230.0,686.0,211.0,4.0,263200.0,<1H OCEAN +-118.12,33.95,36.0,2752.0,459.0,1211.0,452.0,5.0526,269800.0,<1H OCEAN +-118.12,33.94,35.0,1813.0,313.0,825.0,316.0,5.2485,323800.0,<1H OCEAN +-118.12,33.94,33.0,2394.0,576.0,1166.0,548.0,2.7317,264700.0,<1H OCEAN +-118.13,33.94,34.0,522.0,138.0,373.0,139.0,3.5481,265000.0,<1H OCEAN +-118.13,33.95,24.0,6662.0,1852.0,3792.0,1735.0,3.1104,230000.0,<1H OCEAN +-118.11,33.93,35.0,2670.0,493.0,1196.0,488.0,3.8427,283500.0,<1H OCEAN +-118.11,33.94,37.0,1434.0,262.0,786.0,256.0,4.4375,244900.0,<1H OCEAN +-118.11,33.94,32.0,2098.0,378.0,1036.0,385.0,5.0258,255400.0,<1H OCEAN +-118.12,33.94,31.0,2210.0,519.0,1047.0,472.0,3.3292,271300.0,<1H OCEAN +-118.12,33.94,33.0,2206.0,393.0,973.0,364.0,4.675,283000.0,<1H OCEAN +-118.11,33.94,36.0,1949.0,319.0,909.0,325.0,5.1587,296600.0,<1H OCEAN +-118.11,33.93,17.0,1205.0,347.0,736.0,342.0,3.2011,162500.0,<1H OCEAN +-118.12,33.92,27.0,6336.0,1628.0,4673.0,1505.0,2.5893,183700.0,<1H OCEAN +-118.12,33.93,27.0,580.0,143.0,466.0,133.0,3.0909,187500.0,<1H OCEAN +-118.13,33.92,28.0,3069.0,864.0,1932.0,835.0,2.4925,177200.0,<1H OCEAN +-118.13,33.93,38.0,2040.0,458.0,1775.0,445.0,3.5227,202400.0,<1H OCEAN +-118.13,33.92,36.0,984.0,183.0,615.0,206.0,4.1786,201500.0,<1H OCEAN +-118.14,33.92,31.0,3731.0,853.0,2313.0,801.0,3.2237,218200.0,<1H OCEAN +-118.14,33.93,31.0,3205.0,727.0,1647.0,664.0,3.3681,223900.0,<1H OCEAN +-118.14,33.93,32.0,2065.0,438.0,1075.0,442.0,4.4279,226400.0,<1H OCEAN +-118.15,33.93,30.0,3096.0,628.0,1676.0,587.0,4.6583,207300.0,<1H OCEAN +-118.13,33.93,34.0,2122.0,517.0,1578.0,488.0,3.1496,191900.0,<1H OCEAN +-118.13,33.93,19.0,1793.0,447.0,1222.0,452.0,2.6862,195800.0,<1H OCEAN +-118.14,33.94,31.0,2841.0,774.0,1612.0,708.0,2.9205,196600.0,<1H OCEAN +-118.14,33.94,35.0,2987.0,601.0,1561.0,606.0,4.0039,226500.0,<1H OCEAN +-118.15,33.94,36.0,1948.0,341.0,992.0,363.0,4.2594,242400.0,<1H OCEAN +-118.15,33.94,37.0,1594.0,321.0,1003.0,323.0,3.3289,199700.0,<1H OCEAN +-118.15,33.95,35.0,2753.0,702.0,1592.0,614.0,2.7875,209000.0,<1H OCEAN +-118.16,33.94,25.0,3341.0,789.0,1685.0,751.0,3.6936,238300.0,<1H OCEAN +-118.15,33.93,25.0,1948.0,433.0,1128.0,429.0,3.7614,255900.0,<1H OCEAN +-118.16,33.94,25.0,5675.0,1224.0,3317.0,1119.0,3.9352,232900.0,<1H OCEAN +-118.15,33.93,42.0,1839.0,346.0,1034.0,339.0,4.9808,212300.0,<1H OCEAN +-118.15,33.93,34.0,1745.0,404.0,1084.0,410.0,3.3411,220500.0,<1H OCEAN +-118.16,33.92,36.0,2062.0,351.0,1134.0,358.0,4.4881,218900.0,<1H OCEAN +-118.14,33.92,35.0,2378.0,559.0,1799.0,546.0,3.9327,190500.0,<1H OCEAN +-118.15,33.92,36.0,1890.0,400.0,1232.0,386.0,4.375,184200.0,<1H OCEAN +-118.15,33.92,40.0,1335.0,281.0,804.0,282.0,4.3194,198400.0,<1H OCEAN +-118.15,33.92,28.0,1038.0,252.0,912.0,245.0,2.5875,161200.0,<1H OCEAN +-118.15,33.92,30.0,915.0,234.0,646.0,211.0,2.5208,182800.0,<1H OCEAN +-118.11,33.91,19.0,3056.0,759.0,1561.0,740.0,3.1369,196900.0,<1H OCEAN +-118.12,33.91,34.0,682.0,132.0,491.0,144.0,4.6389,173800.0,<1H OCEAN +-118.12,33.91,35.0,620.0,122.0,381.0,124.0,3.7917,183900.0,<1H OCEAN +-118.12,33.91,35.0,1518.0,279.0,857.0,251.0,3.6917,197500.0,<1H OCEAN +-118.13,33.91,35.0,561.0,104.0,261.0,105.0,4.9375,183800.0,<1H OCEAN +-118.13,33.91,34.0,916.0,162.0,552.0,164.0,4.9107,222000.0,<1H OCEAN +-118.14,33.91,36.0,1096.0,204.0,569.0,201.0,4.475,182300.0,<1H OCEAN +-118.14,33.91,34.0,2011.0,472.0,1087.0,423.0,3.0465,187800.0,<1H OCEAN +-118.1,33.91,40.0,513.0,100.0,399.0,99.0,4.875,167600.0,<1H OCEAN +-118.1,33.91,36.0,1080.0,201.0,719.0,201.0,4.2679,175800.0,<1H OCEAN +-118.1,33.91,36.0,726.0,,490.0,130.0,3.6389,167600.0,<1H OCEAN +-118.1,33.9,35.0,1151.0,248.0,809.0,246.0,4.7813,160000.0,<1H OCEAN +-118.11,33.91,29.0,889.0,166.0,597.0,163.0,4.9609,186700.0,<1H OCEAN +-118.11,33.91,22.0,1981.0,472.0,1231.0,457.0,4.0878,153700.0,<1H OCEAN +-118.1,33.91,29.0,505.0,113.0,411.0,113.0,2.6397,164400.0,<1H OCEAN +-118.09,33.91,14.0,2369.0,604.0,1546.0,464.0,3.7969,159400.0,<1H OCEAN +-118.09,33.91,34.0,1582.0,343.0,1356.0,324.0,3.4211,141100.0,<1H OCEAN +-118.09,33.91,36.0,1442.0,271.0,990.0,268.0,4.0517,162200.0,<1H OCEAN +-118.09,33.92,35.0,1994.0,419.0,1491.0,428.0,3.7383,166200.0,<1H OCEAN +-118.1,33.91,35.0,1592.0,335.0,1238.0,320.0,4.9732,165000.0,<1H OCEAN +-118.08,33.91,36.0,1551.0,297.0,1100.0,322.0,5.1187,168100.0,<1H OCEAN +-118.08,33.91,30.0,1366.0,460.0,920.0,410.0,0.9946,159900.0,<1H OCEAN +-118.09,33.9,36.0,1215.0,279.0,862.0,285.0,3.7604,158700.0,<1H OCEAN +-118.09,33.9,37.0,1112.0,222.0,771.0,224.0,4.2132,164600.0,<1H OCEAN +-118.1,33.91,35.0,1653.0,325.0,1072.0,301.0,3.2708,159700.0,<1H OCEAN +-118.08,33.91,30.0,3259.0,942.0,2744.0,895.0,2.8608,165600.0,<1H OCEAN +-118.07,33.91,29.0,2387.0,570.0,1978.0,548.0,3.1957,159200.0,<1H OCEAN +-118.08,33.91,18.0,1573.0,396.0,1200.0,365.0,2.895,146900.0,<1H OCEAN +-118.06,33.91,24.0,4880.0,1044.0,4516.0,1050.0,4.1387,157700.0,<1H OCEAN +-118.06,33.91,21.0,2863.0,701.0,1489.0,621.0,3.2031,180700.0,<1H OCEAN +-118.06,33.91,36.0,1360.0,271.0,909.0,275.0,4.6731,173300.0,<1H OCEAN +-118.07,33.91,35.0,2228.0,463.0,1558.0,427.0,4.023,157700.0,<1H OCEAN +-118.05,33.9,41.0,550.0,129.0,642.0,125.0,1.875,119900.0,<1H OCEAN +-118.05,33.9,36.0,1047.0,227.0,975.0,239.0,3.1897,155000.0,<1H OCEAN +-118.06,33.9,37.0,1161.0,254.0,882.0,236.0,4.4167,158000.0,<1H OCEAN +-118.06,33.89,26.0,2483.0,412.0,1538.0,449.0,5.1104,220500.0,<1H OCEAN +-118.07,33.89,29.0,1138.0,217.0,964.0,222.0,4.537,185300.0,<1H OCEAN +-118.07,33.89,17.0,2223.0,544.0,2008.0,512.0,3.0777,160800.0,<1H OCEAN +-118.07,33.89,35.0,1145.0,274.0,1651.0,265.0,3.125,120300.0,<1H OCEAN +-118.08,33.89,28.0,1035.0,275.0,1545.0,269.0,3.0357,123400.0,<1H OCEAN +-118.08,33.89,35.0,1071.0,290.0,1412.0,274.0,3.1917,114900.0,<1H OCEAN +-118.08,33.89,37.0,1152.0,259.0,981.0,225.0,3.2857,153600.0,<1H OCEAN +-118.07,33.9,39.0,2502.0,546.0,1849.0,518.0,3.8846,164100.0,<1H OCEAN +-118.07,33.9,42.0,1007.0,224.0,776.0,228.0,3.8672,162700.0,<1H OCEAN +-118.07,33.9,45.0,1776.0,353.0,1180.0,337.0,4.6406,169200.0,<1H OCEAN +-118.08,33.9,44.0,1167.0,237.0,733.0,237.0,4.2083,168300.0,<1H OCEAN +-118.08,33.9,42.0,1768.0,372.0,1155.0,368.0,3.558,161100.0,<1H OCEAN +-118.09,33.9,37.0,1147.0,258.0,742.0,242.0,4.0461,153500.0,<1H OCEAN +-118.09,33.9,33.0,3326.0,720.0,2533.0,689.0,3.1441,176300.0,<1H OCEAN +-118.1,33.9,43.0,1237.0,243.0,776.0,246.0,4.325,166000.0,<1H OCEAN +-118.1,33.9,40.0,1880.0,377.0,1229.0,378.0,4.4167,174600.0,<1H OCEAN +-118.08,33.89,41.0,834.0,166.0,603.0,179.0,3.7321,167500.0,<1H OCEAN +-118.09,33.89,42.0,1150.0,215.0,708.0,204.0,3.6875,171500.0,<1H OCEAN +-118.09,33.89,42.0,991.0,,717.0,219.0,4.0926,164400.0,<1H OCEAN +-118.09,33.89,27.0,3399.0,882.0,2465.0,811.0,3.099,166600.0,<1H OCEAN +-118.1,33.89,34.0,2242.0,436.0,1483.0,443.0,4.4934,185600.0,<1H OCEAN +-118.1,33.9,37.0,1061.0,202.0,768.0,206.0,4.75,161900.0,<1H OCEAN +-118.1,33.9,37.0,796.0,175.0,740.0,183.0,3.6,156400.0,<1H OCEAN +-118.1,33.89,36.0,769.0,142.0,498.0,137.0,4.7159,182100.0,<1H OCEAN +-118.1,33.89,35.0,994.0,203.0,602.0,185.0,3.5865,178000.0,<1H OCEAN +-118.11,33.9,35.0,2604.0,495.0,1465.0,470.0,4.4896,184600.0,<1H OCEAN +-118.11,33.9,26.0,4173.0,893.0,2471.0,863.0,3.5052,196000.0,<1H OCEAN +-118.11,33.89,35.0,1139.0,197.0,772.0,233.0,4.375,204700.0,<1H OCEAN +-118.11,33.88,35.0,1623.0,304.0,868.0,272.0,3.5893,276000.0,<1H OCEAN +-118.11,33.89,34.0,2508.0,594.0,1549.0,545.0,3.2069,236500.0,<1H OCEAN +-118.11,33.9,35.0,1323.0,269.0,1084.0,240.0,5.0753,178000.0,<1H OCEAN +-118.11,33.9,36.0,1347.0,278.0,748.0,278.0,5.1423,183100.0,<1H OCEAN +-118.11,33.91,36.0,1088.0,231.0,617.0,211.0,3.8824,193100.0,<1H OCEAN +-118.12,33.91,36.0,1432.0,265.0,749.0,261.0,3.5772,207400.0,<1H OCEAN +-118.12,33.91,36.0,2053.0,386.0,1023.0,394.0,3.0,216600.0,<1H OCEAN +-118.13,33.9,38.0,1475.0,269.0,827.0,265.0,4.7663,191600.0,<1H OCEAN +-118.13,33.91,36.0,1967.0,316.0,910.0,306.0,4.4948,190600.0,<1H OCEAN +-118.14,33.91,37.0,932.0,171.0,578.0,175.0,4.375,177600.0,<1H OCEAN +-118.14,33.9,26.0,2145.0,471.0,1150.0,429.0,3.5972,225800.0,<1H OCEAN +-118.14,33.91,34.0,1766.0,410.0,974.0,404.0,3.0703,180800.0,<1H OCEAN +-118.14,33.91,32.0,1981.0,472.0,1371.0,431.0,3.1204,204200.0,<1H OCEAN +-118.15,33.91,35.0,1590.0,350.0,1299.0,335.0,4.0313,163200.0,<1H OCEAN +-118.15,33.91,38.0,901.0,205.0,760.0,208.0,2.9643,147400.0,<1H OCEAN +-118.15,33.9,20.0,2850.0,737.0,1855.0,662.0,2.809,144600.0,<1H OCEAN +-118.16,33.9,28.0,2410.0,616.0,2399.0,594.0,2.7339,156700.0,<1H OCEAN +-118.16,33.91,28.0,2922.0,739.0,3013.0,673.0,2.9531,127100.0,<1H OCEAN +-118.16,33.91,35.0,1403.0,338.0,1415.0,367.0,3.0967,144000.0,<1H OCEAN +-118.15,33.91,35.0,574.0,116.0,610.0,147.0,3.3182,133300.0,<1H OCEAN +-118.15,33.91,25.0,2053.0,578.0,1721.0,507.0,2.3456,146100.0,<1H OCEAN +-118.16,33.91,6.0,3445.0,847.0,2467.0,712.0,3.1507,144000.0,<1H OCEAN +-118.17,33.9,12.0,3653.0,993.0,3215.0,854.0,2.8681,114200.0,<1H OCEAN +-118.17,33.91,42.0,856.0,167.0,748.0,195.0,3.8,145800.0,<1H OCEAN +-118.17,33.91,37.0,1499.0,288.0,1237.0,344.0,3.9333,162300.0,<1H OCEAN +-118.18,33.9,25.0,1709.0,442.0,1177.0,410.0,2.4333,155000.0,<1H OCEAN +-118.18,33.9,32.0,1452.0,365.0,1888.0,366.0,3.5461,146400.0,<1H OCEAN +-118.18,33.9,32.0,778.0,227.0,933.0,209.0,2.7292,143800.0,<1H OCEAN +-118.18,33.9,31.0,2536.0,603.0,2625.0,576.0,3.0909,150900.0,<1H OCEAN +-118.18,33.9,34.0,1248.0,320.0,1960.0,338.0,3.1012,140400.0,<1H OCEAN +-118.16,33.89,38.0,483.0,113.0,389.0,108.0,2.1859,143800.0,<1H OCEAN +-118.16,33.89,6.0,1655.0,536.0,1201.0,487.0,1.7344,145800.0,<1H OCEAN +-118.17,33.89,52.0,63.0,12.0,47.0,8.0,7.2423,350000.0,<1H OCEAN +-118.17,33.89,11.0,3605.0,880.0,3637.0,873.0,2.6328,160700.0,<1H OCEAN +-118.18,33.89,25.0,5896.0,1464.0,4149.0,1362.0,2.6742,131900.0,<1H OCEAN +-118.15,33.89,30.0,4426.0,995.0,4196.0,921.0,3.274,148300.0,<1H OCEAN +-118.15,33.88,24.0,4232.0,1092.0,2688.0,1035.0,2.52,146000.0,<1H OCEAN +-118.15,33.89,33.0,2848.0,641.0,2319.0,647.0,3.407,190800.0,<1H OCEAN +-118.16,33.89,46.0,940.0,219.0,599.0,214.0,3.2813,190900.0,<1H OCEAN +-118.16,33.88,30.0,1694.0,398.0,1181.0,383.0,2.9779,169500.0,<1H OCEAN +-118.13,33.9,36.0,1814.0,350.0,886.0,347.0,3.4868,208400.0,<1H OCEAN +-118.13,33.89,33.0,3668.0,867.0,2368.0,845.0,2.8906,204900.0,<1H OCEAN +-118.14,33.89,33.0,2867.0,786.0,1774.0,705.0,2.9292,183400.0,<1H OCEAN +-118.13,33.89,36.0,599.0,125.0,361.0,139.0,5.0395,225800.0,<1H OCEAN +-118.13,33.9,36.0,1477.0,305.0,788.0,291.0,3.625,195800.0,<1H OCEAN +-118.14,33.9,39.0,1379.0,282.0,883.0,291.0,3.3375,180100.0,<1H OCEAN +-118.13,33.9,35.0,1458.0,261.0,686.0,236.0,3.9038,202700.0,<1H OCEAN +-118.12,33.9,35.0,3478.0,730.0,1885.0,673.0,2.9375,206500.0,<1H OCEAN +-118.12,33.89,22.0,6876.0,1960.0,5162.0,1879.0,2.9293,170800.0,<1H OCEAN +-118.12,33.89,29.0,2666.0,848.0,2030.0,781.0,2.5432,180900.0,<1H OCEAN +-118.12,33.9,38.0,1222.0,282.0,756.0,256.0,4.125,173900.0,<1H OCEAN +-118.12,33.88,25.0,1768.0,559.0,983.0,488.0,2.6184,243800.0,<1H OCEAN +-118.12,33.88,40.0,2344.0,571.0,1305.0,544.0,3.1923,191900.0,<1H OCEAN +-118.13,33.88,32.0,3088.0,1024.0,1981.0,956.0,2.2027,192700.0,<1H OCEAN +-118.13,33.89,29.0,2823.0,737.0,1723.0,678.0,2.7121,165500.0,<1H OCEAN +-118.14,33.89,37.0,1159.0,238.0,740.0,243.0,4.9107,179600.0,<1H OCEAN +-118.14,33.89,39.0,1744.0,339.0,1048.0,330.0,4.5735,195500.0,<1H OCEAN +-118.14,33.88,30.0,2596.0,580.0,1662.0,539.0,4.0507,179500.0,<1H OCEAN +-118.14,33.89,33.0,1250.0,276.0,866.0,268.0,4.1708,175000.0,<1H OCEAN +-118.14,33.88,41.0,1531.0,343.0,1119.0,341.0,4.3646,161400.0,<1H OCEAN +-118.14,33.88,24.0,3305.0,982.0,2085.0,881.0,2.6641,168200.0,<1H OCEAN +-118.15,33.87,29.0,2690.0,659.0,1747.0,617.0,3.3713,198200.0,<1H OCEAN +-118.11,33.88,19.0,3203.0,708.0,1761.0,667.0,4.0911,239700.0,<1H OCEAN +-118.11,33.87,33.0,1379.0,254.0,795.0,297.0,4.6713,231800.0,<1H OCEAN +-118.11,33.87,15.0,3254.0,598.0,1772.0,618.0,5.0417,240800.0,<1H OCEAN +-118.12,33.87,21.0,3764.0,1081.0,1919.0,977.0,2.5057,156300.0,<1H OCEAN +-118.12,33.88,36.0,1083.0,218.0,557.0,210.0,3.0795,218400.0,<1H OCEAN +-118.13,33.88,32.0,1788.0,459.0,1131.0,461.0,3.5278,166100.0,<1H OCEAN +-118.13,33.87,20.0,3638.0,868.0,2326.0,822.0,3.3304,194600.0,<1H OCEAN +-118.14,33.87,21.0,6618.0,1773.0,4396.0,1649.0,3.0989,171400.0,<1H OCEAN +-118.04,33.88,17.0,4807.0,838.0,3059.0,853.0,5.7619,297300.0,<1H OCEAN +-118.04,33.87,17.0,2358.0,396.0,1387.0,364.0,6.299,285800.0,<1H OCEAN +-118.06,33.88,17.0,7187.0,1073.0,3844.0,1068.0,6.5901,337400.0,<1H OCEAN +-118.05,33.87,18.0,4928.0,773.0,2952.0,754.0,5.8855,313800.0,<1H OCEAN +-118.07,33.88,16.0,4934.0,825.0,2668.0,810.0,5.748,284200.0,<1H OCEAN +-118.07,33.88,17.0,2407.0,539.0,1422.0,524.0,4.2619,139700.0,<1H OCEAN +-118.07,33.88,18.0,2436.0,375.0,1303.0,386.0,6.1968,344700.0,<1H OCEAN +-118.07,33.87,18.0,3405.0,556.0,1945.0,509.0,5.7652,299100.0,<1H OCEAN +-118.08,33.86,17.0,2259.0,383.0,1378.0,386.0,5.8733,287000.0,<1H OCEAN +-118.08,33.85,19.0,4261.0,678.0,2621.0,661.0,6.2427,288700.0,<1H OCEAN +-118.07,33.86,17.0,3666.0,562.0,2104.0,579.0,5.6818,338900.0,<1H OCEAN +-118.07,33.85,16.0,3771.0,606.0,2196.0,564.0,7.0113,319700.0,<1H OCEAN +-118.06,33.86,16.0,5603.0,938.0,3045.0,893.0,5.0778,293700.0,<1H OCEAN +-118.05,33.86,16.0,2851.0,626.0,1985.0,603.0,5.4089,265600.0,<1H OCEAN +-118.03,33.87,16.0,2306.0,393.0,1368.0,387.0,5.93,277600.0,<1H OCEAN +-118.04,33.87,18.0,4626.0,822.0,2794.0,763.0,5.6917,275100.0,<1H OCEAN +-118.04,33.86,21.0,2870.0,437.0,1671.0,470.0,7.2628,322700.0,<1H OCEAN +-118.05,33.86,16.0,2676.0,391.0,1377.0,395.0,6.5513,350400.0,<1H OCEAN +-118.06,33.85,16.0,4851.0,726.0,2527.0,704.0,6.0142,437400.0,<1H OCEAN +-118.1,33.88,18.0,8046.0,1221.0,4276.0,1228.0,6.5515,319600.0,<1H OCEAN +-118.1,33.86,21.0,3052.0,624.0,1588.0,568.0,4.3397,268100.0,<1H OCEAN +-118.09,33.85,19.0,8120.0,1371.0,5026.0,1345.0,6.3093,286500.0,<1H OCEAN +-118.1,33.85,19.0,993.0,174.0,572.0,175.0,5.7039,277600.0,<1H OCEAN +-118.08,33.88,27.0,3065.0,736.0,1840.0,719.0,3.6417,208100.0,<1H OCEAN +-118.09,33.88,27.0,3119.0,635.0,1887.0,567.0,3.8654,195300.0,<1H OCEAN +-118.07,33.89,32.0,1819.0,386.0,1679.0,360.0,3.5562,146000.0,<1H OCEAN +-118.08,33.89,33.0,2131.0,435.0,2045.0,426.0,4.0,145700.0,<1H OCEAN +-118.08,33.88,27.0,923.0,186.0,1014.0,204.0,3.825,159500.0,<1H OCEAN +-118.08,33.88,30.0,1901.0,519.0,2685.0,496.0,3.2639,120100.0,<1H OCEAN +-118.08,33.88,26.0,1507.0,270.0,931.0,275.0,5.1645,244900.0,<1H OCEAN +-118.08,33.87,23.0,2536.0,552.0,2012.0,556.0,4.1406,200800.0,<1H OCEAN +-118.07,33.87,28.0,2399.0,436.0,1613.0,429.0,3.6339,220100.0,<1H OCEAN +-118.09,33.87,31.0,3498.0,728.0,2098.0,697.0,3.9837,246000.0,<1H OCEAN +-118.07,33.86,31.0,2943.0,518.0,1703.0,472.0,3.7091,225900.0,<1H OCEAN +-118.07,33.86,28.0,1789.0,352.0,1347.0,330.0,3.425,189700.0,<1H OCEAN +-118.08,33.86,26.0,778.0,173.0,539.0,186.0,3.2679,236500.0,<1H OCEAN +-118.08,33.86,29.0,3260.0,783.0,1969.0,737.0,3.5268,215500.0,<1H OCEAN +-118.08,33.86,29.0,1018.0,235.0,684.0,248.0,3.3333,198800.0,<1H OCEAN +-118.08,33.84,31.0,2377.0,600.0,2042.0,593.0,3.625,170400.0,<1H OCEAN +-118.08,33.84,31.0,2906.0,578.0,1806.0,553.0,4.8448,194600.0,<1H OCEAN +-118.09,33.84,23.0,4412.0,910.0,2380.0,825.0,4.54,213100.0,<1H OCEAN +-118.09,33.84,27.0,1594.0,295.0,1061.0,320.0,4.7917,217700.0,<1H OCEAN +-118.08,33.85,22.0,1055.0,204.0,682.0,216.0,6.0,191300.0,<1H OCEAN +-118.08,33.84,28.0,4216.0,948.0,2997.0,896.0,3.7961,162700.0,<1H OCEAN +-118.08,33.84,25.0,3696.0,953.0,2827.0,860.0,3.3438,153300.0,<1H OCEAN +-118.06,33.84,26.0,6960.0,1454.0,4367.0,1437.0,4.7953,210900.0,<1H OCEAN +-118.06,33.84,20.0,5643.0,1231.0,3841.0,1195.0,4.0542,168400.0,<1H OCEAN +-118.07,33.82,27.0,3481.0,576.0,1660.0,560.0,5.7965,228200.0,<1H OCEAN +-118.08,33.82,26.0,4259.0,588.0,1644.0,581.0,6.2519,345700.0,<1H OCEAN +-118.08,33.83,30.0,2188.0,556.0,2727.0,525.0,2.7759,136800.0,<1H OCEAN +-118.08,33.82,30.0,2636.0,652.0,3412.0,649.0,2.8095,118300.0,<1H OCEAN +-118.07,33.83,17.0,4822.0,1168.0,3868.0,1117.0,2.5978,142900.0,<1H OCEAN +-118.11,33.86,33.0,2389.0,410.0,1229.0,393.0,5.3889,234900.0,<1H OCEAN +-118.11,33.86,35.0,1255.0,252.0,685.0,279.0,4.2,226900.0,<1H OCEAN +-118.12,33.86,44.0,2663.0,511.0,1277.0,462.0,4.3194,199500.0,<1H OCEAN +-118.12,33.87,43.0,1633.0,355.0,837.0,350.0,3.0405,188000.0,<1H OCEAN +-118.13,33.87,45.0,1606.0,300.0,735.0,295.0,4.6765,198400.0,<1H OCEAN +-118.13,33.86,45.0,1320.0,256.0,645.0,256.0,4.4,209500.0,<1H OCEAN +-118.13,33.86,45.0,1866.0,343.0,919.0,344.0,3.5833,200200.0,<1H OCEAN +-118.14,33.87,44.0,1661.0,315.0,985.0,319.0,4.3942,219500.0,<1H OCEAN +-118.14,33.86,43.0,2104.0,382.0,1071.0,396.0,5.0,208900.0,<1H OCEAN +-118.14,33.86,44.0,1436.0,257.0,745.0,233.0,4.625,213400.0,<1H OCEAN +-118.14,33.86,44.0,1276.0,234.0,538.0,213.0,4.8667,218300.0,<1H OCEAN +-118.14,33.87,44.0,1607.0,271.0,799.0,283.0,5.084,214100.0,<1H OCEAN +-118.15,33.86,36.0,1578.0,312.0,827.0,311.0,4.8942,194100.0,<1H OCEAN +-118.15,33.86,34.0,2403.0,413.0,1385.0,386.0,4.4934,213800.0,<1H OCEAN +-118.16,33.88,33.0,2180.0,522.0,1634.0,467.0,3.0114,167000.0,<1H OCEAN +-118.15,33.87,33.0,2373.0,552.0,1673.0,571.0,3.0685,181800.0,<1H OCEAN +-118.16,33.87,32.0,1854.0,471.0,1363.0,478.0,2.6406,156700.0,<1H OCEAN +-118.16,33.88,18.0,2287.0,662.0,1804.0,537.0,1.9903,170300.0,<1H OCEAN +-118.17,33.88,29.0,815.0,206.0,590.0,183.0,3.0052,166700.0,<1H OCEAN +-118.17,33.88,42.0,1645.0,371.0,1161.0,351.0,3.0893,162700.0,<1H OCEAN +-118.18,33.88,47.0,882.0,185.0,536.0,174.0,4.625,163000.0,<1H OCEAN +-118.18,33.88,44.0,1308.0,267.0,783.0,237.0,4.7361,167700.0,<1H OCEAN +-118.18,33.88,42.0,2326.0,503.0,1832.0,501.0,3.1713,161000.0,<1H OCEAN +-118.19,33.87,27.0,4701.0,1359.0,2571.0,1216.0,2.5417,184100.0,<1H OCEAN +-118.19,33.87,35.0,1769.0,436.0,1166.0,386.0,2.875,178300.0,<1H OCEAN +-118.19,33.86,42.0,1999.0,431.0,1060.0,399.0,3.7031,167100.0,<1H OCEAN +-118.19,33.86,46.0,1824.0,438.0,1200.0,451.0,3.4375,156700.0,<1H OCEAN +-118.19,33.86,38.0,2009.0,524.0,1449.0,451.0,2.7045,155400.0,<1H OCEAN +-118.19,33.86,35.0,1133.0,296.0,774.0,271.0,2.2381,137500.0,<1H OCEAN +-118.19,33.86,36.0,2013.0,546.0,1659.0,522.0,3.1215,153600.0,<1H OCEAN +-118.2,33.86,27.0,2732.0,867.0,1690.0,794.0,2.6465,160200.0,<1H OCEAN +-118.19,33.87,42.0,1213.0,269.0,628.0,229.0,3.6987,152100.0,<1H OCEAN +-118.2,33.88,40.0,1699.0,346.0,1188.0,329.0,4.2083,147300.0,<1H OCEAN +-118.2,33.88,40.0,2945.0,725.0,2858.0,690.0,3.2368,136900.0,<1H OCEAN +-118.21,33.88,31.0,1332.0,417.0,1405.0,363.0,2.0125,143000.0,<1H OCEAN +-118.21,33.88,32.0,1507.0,379.0,1082.0,350.0,3.225,138200.0,<1H OCEAN +-118.2,33.87,26.0,703.0,202.0,757.0,212.0,2.525,155500.0,<1H OCEAN +-118.2,33.87,42.0,1482.0,310.0,1052.0,317.0,3.9469,158200.0,<1H OCEAN +-118.2,33.87,36.0,1554.0,273.0,974.0,264.0,4.2135,161400.0,<1H OCEAN +-118.17,33.87,40.0,2462.0,587.0,1821.0,536.0,3.5646,162600.0,<1H OCEAN +-118.17,33.86,44.0,1701.0,396.0,1091.0,384.0,3.025,162300.0,<1H OCEAN +-118.17,33.87,49.0,1937.0,445.0,1339.0,440.0,3.0319,162800.0,<1H OCEAN +-118.17,33.87,48.0,2258.0,509.0,1395.0,492.0,3.765,164800.0,<1H OCEAN +-118.17,33.87,45.0,2110.0,494.0,1404.0,454.0,2.9803,165900.0,<1H OCEAN +-118.18,33.87,44.0,2137.0,461.0,1126.0,439.0,3.4408,172900.0,<1H OCEAN +-118.18,33.87,44.0,1832.0,401.0,1056.0,405.0,4.0658,175100.0,<1H OCEAN +-118.18,33.87,38.0,2664.0,626.0,1627.0,604.0,3.7527,161900.0,<1H OCEAN +-118.16,33.86,26.0,6607.0,1663.0,4066.0,1558.0,2.5068,156300.0,<1H OCEAN +-118.17,33.86,10.0,1664.0,508.0,1369.0,493.0,2.9886,175000.0,<1H OCEAN +-118.17,33.85,39.0,2247.0,526.0,1670.0,525.0,3.07,173000.0,<1H OCEAN +-118.18,33.85,38.0,3596.0,862.0,2416.0,832.0,3.6897,169800.0,<1H OCEAN +-118.18,33.86,43.0,2752.0,645.0,1674.0,614.0,3.6719,161300.0,<1H OCEAN +-118.18,33.86,39.0,2925.0,732.0,1702.0,642.0,2.375,160800.0,<1H OCEAN +-118.17,33.86,40.0,1301.0,342.0,954.0,336.0,2.3804,158000.0,<1H OCEAN +-118.14,33.86,37.0,1404.0,257.0,652.0,258.0,4.2062,195400.0,<1H OCEAN +-118.15,33.85,30.0,4071.0,1067.0,2144.0,970.0,2.7268,218100.0,<1H OCEAN +-118.15,33.85,36.0,1435.0,249.0,606.0,234.0,4.1439,212600.0,<1H OCEAN +-118.15,33.85,36.0,1491.0,259.0,699.0,266.0,4.0781,217300.0,<1H OCEAN +-118.15,33.86,32.0,2630.0,559.0,1069.0,491.0,2.4659,209000.0,<1H OCEAN +-118.16,33.85,36.0,2668.0,473.0,1315.0,478.0,4.0714,215600.0,<1H OCEAN +-118.16,33.85,36.0,1979.0,339.0,952.0,339.0,4.0815,216200.0,<1H OCEAN +-118.13,33.86,37.0,2259.0,425.0,1183.0,413.0,5.1805,201600.0,<1H OCEAN +-118.13,33.85,36.0,2110.0,416.0,1128.0,403.0,4.6019,208400.0,<1H OCEAN +-118.13,33.85,36.0,1885.0,391.0,1049.0,405.0,3.55,212800.0,<1H OCEAN +-118.14,33.86,36.0,1774.0,348.0,934.0,333.0,4.8571,203300.0,<1H OCEAN +-118.14,33.86,36.0,1703.0,325.0,845.0,308.0,5.0106,210800.0,<1H OCEAN +-118.1,33.85,28.0,2825.0,470.0,1352.0,469.0,5.2639,242000.0,<1H OCEAN +-118.1,33.85,36.0,1473.0,253.0,713.0,257.0,5.9493,228000.0,<1H OCEAN +-118.1,33.85,36.0,956.0,159.0,416.0,157.0,4.6429,223700.0,<1H OCEAN +-118.11,33.85,36.0,887.0,163.0,482.0,157.0,4.125,219500.0,<1H OCEAN +-118.11,33.85,36.0,2418.0,389.0,1138.0,387.0,4.8393,216300.0,<1H OCEAN +-118.11,33.86,36.0,2750.0,487.0,1386.0,458.0,4.9904,221700.0,<1H OCEAN +-118.12,33.86,34.0,2116.0,427.0,972.0,396.0,4.8516,213600.0,<1H OCEAN +-118.12,33.85,37.0,2584.0,453.0,1333.0,481.0,4.3661,219900.0,<1H OCEAN +-118.12,33.85,37.0,2386.0,409.0,1101.0,399.0,4.6908,218200.0,<1H OCEAN +-118.1,33.84,35.0,1790.0,269.0,924.0,263.0,5.296,226200.0,<1H OCEAN +-118.1,33.84,36.0,1915.0,316.0,850.0,319.0,4.7222,225800.0,<1H OCEAN +-118.1,33.83,37.0,2059.0,349.0,825.0,334.0,4.0603,225200.0,<1H OCEAN +-118.11,33.83,36.0,1726.0,287.0,820.0,288.0,5.5767,218100.0,<1H OCEAN +-118.1,33.84,36.0,1557.0,270.0,697.0,251.0,4.5417,219600.0,<1H OCEAN +-118.1,33.84,36.0,2572.0,421.0,1318.0,434.0,5.1836,219700.0,<1H OCEAN +-118.1,33.84,36.0,690.0,109.0,316.0,104.0,3.7813,209100.0,<1H OCEAN +-118.11,33.84,37.0,1588.0,272.0,692.0,245.0,4.8594,220300.0,<1H OCEAN +-118.11,33.84,36.0,1756.0,297.0,798.0,287.0,5.5581,218300.0,<1H OCEAN +-118.12,33.84,37.0,2143.0,382.0,1047.0,377.0,4.4423,216000.0,<1H OCEAN +-118.12,33.84,37.0,2706.0,462.0,1331.0,476.0,5.0719,220000.0,<1H OCEAN +-118.11,33.84,36.0,1074.0,188.0,496.0,196.0,4.625,217400.0,<1H OCEAN +-118.11,33.84,36.0,1523.0,263.0,717.0,278.0,4.875,218900.0,<1H OCEAN +-118.11,33.83,36.0,1784.0,303.0,964.0,299.0,4.2703,220900.0,<1H OCEAN +-118.12,33.83,44.0,1712.0,314.0,691.0,293.0,4.3594,221300.0,<1H OCEAN +-118.12,33.84,37.0,1242.0,221.0,565.0,213.0,4.1094,215800.0,<1H OCEAN +-118.11,33.84,36.0,1463.0,257.0,722.0,260.0,4.8438,226300.0,<1H OCEAN +-118.13,33.84,35.0,3008.0,674.0,1584.0,671.0,3.5465,213200.0,<1H OCEAN +-118.13,33.84,46.0,2439.0,429.0,944.0,374.0,4.2841,312400.0,<1H OCEAN +-118.13,33.83,44.0,1710.0,333.0,786.0,344.0,4.2917,314700.0,<1H OCEAN +-118.14,33.84,43.0,2107.0,439.0,876.0,429.0,3.2024,339400.0,<1H OCEAN +-118.13,33.84,48.0,1895.0,294.0,881.0,293.0,6.3364,307400.0,<1H OCEAN +-118.14,33.84,45.0,1908.0,361.0,890.0,342.0,4.575,336000.0,<1H OCEAN +-118.14,33.84,44.0,3043.0,619.0,1316.0,607.0,4.4286,254900.0,<1H OCEAN +-118.14,33.84,36.0,3002.0,484.0,1322.0,471.0,4.933,228900.0,<1H OCEAN +-118.15,33.84,29.0,2448.0,354.0,894.0,349.0,7.6526,481300.0,<1H OCEAN +-118.15,33.84,36.0,2987.0,491.0,1360.0,497.0,4.8013,224100.0,<1H OCEAN +-118.15,33.84,37.0,1508.0,252.0,635.0,241.0,3.75,221300.0,<1H OCEAN +-118.16,33.84,36.0,2444.0,432.0,1199.0,424.0,4.1538,218800.0,<1H OCEAN +-118.16,33.84,36.0,1348.0,234.0,643.0,221.0,3.6447,211000.0,<1H OCEAN +-118.16,33.84,36.0,2831.0,573.0,1462.0,569.0,3.8646,214600.0,<1H OCEAN +-118.16,33.84,36.0,2220.0,367.0,1002.0,351.0,5.0719,219500.0,<1H OCEAN +-118.17,33.85,37.0,3714.0,708.0,1956.0,694.0,4.2218,200500.0,<1H OCEAN +-118.17,33.84,45.0,1533.0,331.0,791.0,335.0,3.4605,186600.0,<1H OCEAN +-118.17,33.84,29.0,4716.0,1372.0,2515.0,1272.0,2.726,208700.0,<1H OCEAN +-118.17,33.84,45.0,1853.0,328.0,945.0,320.0,5.0787,219200.0,<1H OCEAN +-118.17,33.83,45.0,2019.0,363.0,880.0,339.0,4.1023,217300.0,NEAR OCEAN +-118.18,33.85,40.0,2597.0,582.0,1285.0,559.0,3.975,213800.0,<1H OCEAN +-118.18,33.84,35.0,1415.0,294.0,591.0,291.0,2.9798,315600.0,NEAR OCEAN +-118.19,33.84,44.0,2731.0,577.0,1396.0,555.0,4.1771,219100.0,NEAR OCEAN +-118.19,33.84,24.0,1228.0,320.0,537.0,273.0,2.25,192000.0,NEAR OCEAN +-118.18,33.85,30.0,2548.0,717.0,2086.0,700.0,0.7007,134400.0,<1H OCEAN +-118.18,33.85,44.0,1890.0,465.0,1378.0,430.0,3.8819,143200.0,<1H OCEAN +-118.19,33.85,30.0,3533.0,1061.0,2678.0,1033.0,2.2417,151900.0,NEAR OCEAN +-118.19,33.85,49.0,1073.0,260.0,725.0,272.0,3.8026,149700.0,NEAR OCEAN +-118.19,33.85,45.0,1167.0,302.0,773.0,287.0,3.2798,150300.0,NEAR OCEAN +-118.2,33.85,33.0,2557.0,731.0,2286.0,700.0,2.3041,149100.0,<1H OCEAN +-118.2,33.85,46.0,1854.0,462.0,1360.0,429.0,2.4844,158200.0,<1H OCEAN +-118.2,33.84,35.0,3405.0,779.0,1953.0,671.0,2.7813,159200.0,NEAR OCEAN +-118.2,33.83,35.0,3737.0,613.0,1305.0,583.0,7.2096,490300.0,NEAR OCEAN +-118.19,33.83,43.0,2641.0,411.0,1011.0,444.0,6.4468,444200.0,NEAR OCEAN +-118.19,33.83,42.0,1773.0,360.0,815.0,299.0,4.9,406300.0,NEAR OCEAN +-118.17,33.83,45.0,1808.0,315.0,800.0,302.0,4.8693,277700.0,NEAR OCEAN +-118.17,33.83,46.0,1362.0,214.0,531.0,222.0,4.3125,290500.0,NEAR OCEAN +-118.18,33.83,44.0,1497.0,277.0,542.0,274.0,5.0052,321800.0,NEAR OCEAN +-118.18,33.83,45.0,1535.0,274.0,591.0,276.0,4.2411,371700.0,NEAR OCEAN +-118.18,33.83,39.0,3622.0,745.0,1330.0,648.0,3.3125,425500.0,NEAR OCEAN +-118.18,33.84,43.0,2561.0,544.0,1063.0,537.0,3.835,418600.0,NEAR OCEAN +-118.17,33.82,50.0,3587.0,693.0,1513.0,651.0,5.5106,252200.0,NEAR OCEAN +-118.17,33.82,52.0,2539.0,497.0,1152.0,488.0,4.1354,268200.0,NEAR OCEAN +-118.18,33.83,52.0,2569.0,484.0,1030.0,451.0,4.1301,268400.0,NEAR OCEAN +-118.18,33.82,52.0,2618.0,472.0,943.0,440.0,3.7895,254000.0,NEAR OCEAN +-118.18,33.82,43.0,284.0,65.0,167.0,68.0,4.25,207500.0,NEAR OCEAN +-118.19,33.83,30.0,2246.0,552.0,1032.0,548.0,3.5871,347100.0,NEAR OCEAN +-118.19,33.82,19.0,2953.0,895.0,1914.0,855.0,3.5521,290000.0,NEAR OCEAN +-118.2,33.82,21.0,2251.0,452.0,913.0,420.0,4.6042,272200.0,NEAR OCEAN +-118.2,33.82,43.0,1758.0,347.0,954.0,312.0,5.2606,198900.0,NEAR OCEAN +-118.19,33.82,11.0,872.0,203.0,422.0,221.0,4.6364,156300.0,NEAR OCEAN +-118.19,33.81,21.0,1835.0,427.0,1038.0,384.0,4.4559,198500.0,NEAR OCEAN +-118.2,33.81,43.0,3013.0,574.0,1525.0,529.0,4.95,194000.0,NEAR OCEAN +-118.2,33.82,34.0,2807.0,768.0,2217.0,744.0,2.4286,204800.0,NEAR OCEAN +-118.19,33.81,23.0,954.0,390.0,804.0,373.0,2.5833,181300.0,NEAR OCEAN +-118.2,33.81,45.0,944.0,178.0,533.0,193.0,3.4808,206900.0,NEAR OCEAN +-118.2,33.81,46.0,1388.0,254.0,742.0,241.0,4.6458,212100.0,NEAR OCEAN +-118.2,33.81,47.0,2347.0,437.0,1219.0,420.0,5.3096,209900.0,NEAR OCEAN +-118.21,33.82,34.0,1719.0,398.0,1444.0,372.0,2.8438,139300.0,NEAR OCEAN +-118.21,33.81,43.0,905.0,199.0,764.0,204.0,3.3214,162200.0,NEAR OCEAN +-118.21,33.81,40.0,1815.0,428.0,1807.0,413.0,3.0882,160700.0,NEAR OCEAN +-118.21,33.82,33.0,1278.0,311.0,1157.0,320.0,3.5054,146800.0,NEAR OCEAN +-118.22,33.82,30.0,1680.0,469.0,1779.0,429.0,3.6086,146300.0,NEAR OCEAN +-118.21,33.82,45.0,455.0,92.0,394.0,89.0,4.9562,165700.0,NEAR OCEAN +-118.21,33.82,43.0,1005.0,199.0,723.0,191.0,4.3424,162500.0,NEAR OCEAN +-118.22,33.82,17.0,5357.0,1332.0,3030.0,1266.0,1.9311,138100.0,NEAR OCEAN +-118.21,33.81,45.0,1693.0,337.0,1255.0,333.0,3.6923,159700.0,NEAR OCEAN +-118.21,33.81,45.0,1816.0,398.0,1524.0,388.0,3.8586,157900.0,NEAR OCEAN +-118.22,33.81,38.0,1486.0,359.0,1345.0,326.0,3.3988,147800.0,NEAR OCEAN +-118.22,33.81,41.0,726.0,166.0,602.0,183.0,3.7885,156900.0,NEAR OCEAN +-118.21,33.8,45.0,1160.0,274.0,1095.0,269.0,2.7308,139000.0,NEAR OCEAN +-118.21,33.8,41.0,1251.0,279.0,1053.0,278.0,3.2778,150800.0,NEAR OCEAN +-118.22,33.8,36.0,1285.0,347.0,1291.0,337.0,3.7708,157100.0,NEAR OCEAN +-118.22,33.8,33.0,1984.0,477.0,1764.0,440.0,3.875,165100.0,NEAR OCEAN +-118.22,33.79,28.0,3008.0,629.0,2537.0,596.0,2.3,137500.0,NEAR OCEAN +-118.21,33.79,39.0,1598.0,458.0,1691.0,399.0,2.3605,141800.0,NEAR OCEAN +-118.21,33.79,32.0,2020.0,613.0,2557.0,562.0,2.1397,145300.0,NEAR OCEAN +-118.21,33.8,44.0,1387.0,280.0,984.0,302.0,4.25,143100.0,NEAR OCEAN +-118.19,33.8,38.0,2010.0,595.0,1535.0,525.0,1.9848,160400.0,NEAR OCEAN +-118.19,33.79,29.0,3497.0,1096.0,2994.0,919.0,1.8109,137500.0,NEAR OCEAN +-118.2,33.79,47.0,767.0,195.0,569.0,195.0,2.9514,185200.0,NEAR OCEAN +-118.2,33.79,48.0,2105.0,592.0,1807.0,539.0,2.7183,190400.0,NEAR OCEAN +-118.2,33.79,47.0,2549.0,626.0,1388.0,606.0,3.0135,192700.0,NEAR OCEAN +-118.2,33.8,52.0,1786.0,445.0,1090.0,430.0,2.8988,194900.0,NEAR OCEAN +-118.19,33.8,41.0,2125.0,591.0,1604.0,555.0,2.9943,190600.0,NEAR OCEAN +-118.2,33.8,42.0,4577.0,1146.0,2749.0,1094.0,2.5012,197500.0,NEAR OCEAN +-118.2,33.8,45.0,2456.0,495.0,1300.0,450.0,3.9792,210200.0,NEAR OCEAN +-118.2,33.8,52.0,1009.0,216.0,614.0,231.0,4.0074,200800.0,NEAR OCEAN +-118.18,33.8,42.0,2301.0,621.0,2114.0,561.0,2.0579,132700.0,NEAR OCEAN +-118.19,33.8,36.0,2326.0,729.0,2635.0,657.0,2.1985,141800.0,NEAR OCEAN +-118.18,33.79,42.0,1571.0,435.0,1631.0,417.0,1.6384,128000.0,NEAR OCEAN +-118.19,33.79,41.0,2114.0,612.0,2357.0,529.0,1.7938,142600.0,NEAR OCEAN +-118.19,33.79,43.0,1823.0,600.0,2339.0,560.0,1.6792,130600.0,NEAR OCEAN +-118.18,33.8,30.0,2734.0,758.0,2951.0,691.0,1.7689,117600.0,NEAR OCEAN +-118.17,33.79,36.0,948.0,303.0,1042.0,301.0,1.55,100000.0,NEAR OCEAN +-118.18,33.82,43.0,2210.0,469.0,1042.0,418.0,3.5,216700.0,NEAR OCEAN +-118.18,33.81,27.0,471.0,132.0,315.0,96.0,1.75,154200.0,NEAR OCEAN +-118.16,33.8,9.0,3564.0,835.0,1530.0,807.0,5.1806,175000.0,NEAR OCEAN +-118.16,33.79,25.0,5463.0,1265.0,3010.0,1179.0,3.233,199100.0,NEAR OCEAN +-118.17,33.8,26.0,1589.0,380.0,883.0,366.0,3.5313,187500.0,NEAR OCEAN +-118.18,33.8,15.0,2407.0,589.0,1591.0,506.0,3.0513,148100.0,NEAR OCEAN +-118.12,33.83,45.0,1579.0,278.0,687.0,285.0,5.0424,225900.0,<1H OCEAN +-118.12,33.83,45.0,1734.0,331.0,797.0,293.0,4.8917,222800.0,<1H OCEAN +-118.12,33.82,43.0,1544.0,286.0,701.0,298.0,4.1375,226000.0,<1H OCEAN +-118.12,33.82,42.0,1493.0,277.0,671.0,267.0,3.2794,224500.0,<1H OCEAN +-118.13,33.82,44.0,1619.0,280.0,815.0,284.0,5.5449,232200.0,<1H OCEAN +-118.13,33.82,44.0,1785.0,307.0,779.0,291.0,4.3056,228600.0,<1H OCEAN +-118.13,33.83,45.0,3087.0,574.0,1474.0,567.0,5.5196,227600.0,<1H OCEAN +-118.1,33.83,36.0,1408.0,250.0,702.0,251.0,4.875,222500.0,<1H OCEAN +-118.11,33.83,36.0,1462.0,233.0,664.0,220.0,5.1171,225300.0,<1H OCEAN +-118.11,33.82,36.0,1999.0,390.0,887.0,379.0,3.8162,221900.0,<1H OCEAN +-118.11,33.82,36.0,1742.0,340.0,857.0,341.0,4.6875,218200.0,<1H OCEAN +-118.11,33.83,37.0,1249.0,202.0,517.0,189.0,4.4196,223100.0,<1H OCEAN +-118.11,33.83,36.0,1820.0,313.0,899.0,295.0,4.918,225200.0,<1H OCEAN +-118.09,33.83,36.0,2734.0,448.0,1308.0,441.0,5.9265,227300.0,<1H OCEAN +-118.1,33.82,36.0,2422.0,420.0,1193.0,421.0,4.8462,225700.0,<1H OCEAN +-118.1,33.82,36.0,1930.0,354.0,915.0,328.0,5.2713,244400.0,<1H OCEAN +-118.1,33.83,36.0,2000.0,343.0,956.0,352.0,5.3735,234400.0,<1H OCEAN +-118.08,33.81,20.0,6295.0,937.0,2292.0,874.0,7.6084,402500.0,<1H OCEAN +-118.09,33.82,36.0,2219.0,393.0,1042.0,396.0,5.2299,239800.0,<1H OCEAN +-118.09,33.81,36.0,1878.0,323.0,846.0,325.0,7.1937,254400.0,<1H OCEAN +-118.1,33.81,36.0,1111.0,184.0,444.0,177.0,3.7031,245300.0,<1H OCEAN +-118.1,33.81,36.0,856.0,146.0,451.0,164.0,5.1993,246000.0,<1H OCEAN +-118.11,33.81,36.0,1252.0,209.0,558.0,214.0,3.9722,235600.0,<1H OCEAN +-118.11,33.82,37.0,1987.0,347.0,1095.0,357.0,4.3203,232800.0,<1H OCEAN +-118.1,33.82,36.0,1946.0,346.0,871.0,336.0,5.2155,254800.0,<1H OCEAN +-118.11,33.82,37.0,1756.0,345.0,836.0,335.0,4.375,218200.0,<1H OCEAN +-118.12,33.81,36.0,2565.0,458.0,1155.0,443.0,4.6087,224600.0,<1H OCEAN +-118.12,33.81,37.0,1798.0,331.0,860.0,340.0,4.2143,228500.0,<1H OCEAN +-118.13,33.81,37.0,1013.0,199.0,493.0,183.0,4.7845,231400.0,<1H OCEAN +-118.13,33.81,37.0,1228.0,237.0,572.0,242.0,4.325,223900.0,<1H OCEAN +-118.13,33.82,37.0,1530.0,290.0,711.0,283.0,5.1795,225400.0,<1H OCEAN +-118.13,33.82,36.0,665.0,114.0,273.0,112.0,3.7321,223700.0,<1H OCEAN +-118.13,33.81,34.0,1903.0,343.0,928.0,349.0,5.395,241900.0,<1H OCEAN +-118.13,33.81,36.0,1749.0,322.0,855.0,319.0,4.6473,227100.0,<1H OCEAN +-118.13,33.8,36.0,1026.0,182.0,505.0,176.0,4.3438,233600.0,<1H OCEAN +-118.13,33.8,36.0,1496.0,271.0,743.0,265.0,4.4312,226000.0,<1H OCEAN +-118.13,33.8,41.0,1509.0,325.0,821.0,314.0,4.0893,223000.0,<1H OCEAN +-118.15,33.8,44.0,1886.0,399.0,1167.0,372.0,3.1042,219800.0,NEAR OCEAN +-118.12,33.81,36.0,1774.0,299.0,784.0,298.0,5.0447,249200.0,<1H OCEAN +-118.12,33.81,36.0,1665.0,291.0,721.0,294.0,4.6875,250700.0,<1H OCEAN +-118.12,33.8,35.0,1835.0,435.0,774.0,418.0,2.7092,256300.0,<1H OCEAN +-118.12,33.8,36.0,1257.0,205.0,530.0,211.0,5.3701,251400.0,<1H OCEAN +-118.11,33.8,36.0,1837.0,319.0,810.0,305.0,4.3897,235000.0,<1H OCEAN +-118.11,33.79,36.0,1993.0,354.0,884.0,337.0,5.587,244900.0,<1H OCEAN +-118.11,33.79,36.0,2223.0,370.0,1039.0,370.0,5.7942,257000.0,<1H OCEAN +-118.09,33.81,36.0,1371.0,250.0,666.0,257.0,5.0795,243300.0,<1H OCEAN +-118.09,33.8,36.0,1724.0,322.0,838.0,328.0,4.4831,253900.0,<1H OCEAN +-118.11,33.8,36.0,1680.0,291.0,744.0,280.0,4.66,244800.0,<1H OCEAN +-118.11,33.8,35.0,1034.0,180.0,444.0,177.0,5.4602,231600.0,<1H OCEAN +-118.11,33.81,37.0,1694.0,280.0,776.0,271.0,6.2187,257900.0,<1H OCEAN +-118.1,33.81,36.0,1962.0,325.0,786.0,315.0,5.62,239600.0,<1H OCEAN +-118.1,33.8,37.0,1814.0,329.0,850.0,328.0,5.0574,240800.0,<1H OCEAN +-118.09,33.79,36.0,4210.0,657.0,1911.0,631.0,5.8491,247300.0,<1H OCEAN +-118.1,33.78,35.0,4466.0,740.0,2134.0,743.0,5.7389,251800.0,<1H OCEAN +-118.1,33.79,35.0,2370.0,379.0,996.0,380.0,5.7368,287200.0,<1H OCEAN +-118.1,33.79,36.0,3359.0,596.0,1522.0,565.0,5.1805,249400.0,<1H OCEAN +-118.11,33.78,16.0,3985.0,567.0,1327.0,564.0,7.9767,500001.0,<1H OCEAN +-118.13,33.79,29.0,2937.0,524.0,1132.0,528.0,4.6133,500001.0,NEAR OCEAN +-118.13,33.78,31.0,3039.0,739.0,1199.0,697.0,3.7232,500001.0,NEAR OCEAN +-118.13,33.79,36.0,1245.0,211.0,508.0,221.0,5.3441,480600.0,NEAR OCEAN +-118.12,33.79,43.0,1471.0,301.0,767.0,311.0,4.3317,232400.0,<1H OCEAN +-118.12,33.79,41.0,1762.0,314.0,738.0,300.0,4.1687,240700.0,<1H OCEAN +-118.13,33.79,44.0,2153.0,375.0,947.0,364.0,5.0072,236200.0,NEAR OCEAN +-118.13,33.79,45.0,2317.0,448.0,1057.0,428.0,4.375,234800.0,NEAR OCEAN +-118.14,33.79,45.0,1519.0,263.0,681.0,267.0,4.6452,212500.0,NEAR OCEAN +-118.13,33.79,20.0,6678.0,1797.0,3625.0,1599.0,3.7716,242900.0,NEAR OCEAN +-118.14,33.8,43.0,2506.0,531.0,1230.0,543.0,3.4211,203900.0,NEAR OCEAN +-118.15,33.79,5.0,3700.0,993.0,1657.0,848.0,3.7826,196300.0,NEAR OCEAN +-118.14,33.79,23.0,2573.0,688.0,1478.0,604.0,3.4833,209400.0,NEAR OCEAN +-118.14,33.79,44.0,2388.0,619.0,1461.0,592.0,3.1711,215400.0,NEAR OCEAN +-118.14,33.78,44.0,2101.0,496.0,1038.0,500.0,3.108,217900.0,NEAR OCEAN +-118.15,33.79,25.0,4013.0,1097.0,2297.0,969.0,3.0453,185900.0,NEAR OCEAN +-118.15,33.78,17.0,1584.0,435.0,904.0,406.0,2.0875,181300.0,NEAR OCEAN +-118.16,33.78,14.0,1709.0,558.0,1939.0,520.0,1.9808,139100.0,NEAR OCEAN +-118.16,33.78,33.0,2048.0,585.0,2074.0,597.0,2.0156,152700.0,NEAR OCEAN +-118.16,33.79,25.0,3742.0,1180.0,3916.0,1063.0,2.4,153700.0,NEAR OCEAN +-118.16,33.79,26.0,3061.0,844.0,2135.0,769.0,2.875,164000.0,NEAR OCEAN +-118.17,33.79,32.0,2171.0,672.0,3002.0,648.0,2.375,139700.0,NEAR OCEAN +-118.17,33.79,30.0,1349.0,519.0,2646.0,552.0,1.9318,115900.0,NEAR OCEAN +-118.18,33.78,36.0,1697.0,550.0,1379.0,434.0,1.2746,129700.0,NEAR OCEAN +-118.18,33.79,27.0,1580.0,510.0,1896.0,448.0,2.0186,130000.0,NEAR OCEAN +-118.17,33.79,28.0,1219.0,408.0,1816.0,348.0,1.7589,118300.0,NEAR OCEAN +-118.18,33.79,20.0,1255.0,360.0,1201.0,318.0,1.2206,162500.0,NEAR OCEAN +-118.19,33.78,29.0,1170.0,369.0,1398.0,373.0,2.2543,156300.0,NEAR OCEAN +-118.19,33.79,37.0,1834.0,551.0,1967.0,476.0,2.137,126600.0,NEAR OCEAN +-118.19,33.79,30.0,3107.0,994.0,3543.0,850.0,1.9387,141700.0,NEAR OCEAN +-118.19,33.78,24.0,225.0,72.0,439.0,71.0,2.8533,137500.0,NEAR OCEAN +-118.2,33.79,25.0,2851.0,968.0,3744.0,906.0,2.0675,116700.0,NEAR OCEAN +-118.21,33.79,33.0,32.0,18.0,96.0,36.0,4.5938,112500.0,NEAR OCEAN +-118.21,33.79,44.0,121.0,29.0,153.0,30.0,2.1964,150000.0,NEAR OCEAN +-118.22,33.79,48.0,143.0,41.0,222.0,50.0,1.7,104200.0,NEAR OCEAN +-118.23,33.76,21.0,49.0,14.0,29.0,16.0,5.0,87500.0,NEAR OCEAN +-118.19,33.78,21.0,2741.0,1029.0,2924.0,969.0,1.3274,218800.0,NEAR OCEAN +-118.19,33.78,35.0,1511.0,593.0,914.0,539.0,0.9318,187500.0,NEAR OCEAN +-118.2,33.78,46.0,1889.0,651.0,1545.0,587.0,1.7064,175000.0,NEAR OCEAN +-118.2,33.78,48.0,1766.0,497.0,1908.0,466.0,1.9872,168800.0,NEAR OCEAN +-118.2,33.78,52.0,2662.0,893.0,3018.0,763.0,2.3305,162500.0,NEAR OCEAN +-118.19,33.77,35.0,1574.0,603.0,820.0,514.0,1.2321,137500.0,NEAR OCEAN +-118.2,33.77,40.0,2034.0,899.0,1257.0,797.0,1.2864,131300.0,NEAR OCEAN +-118.2,33.77,24.0,2404.0,819.0,1566.0,753.0,1.5076,145800.0,NEAR OCEAN +-118.2,33.77,22.0,1118.0,437.0,1190.0,399.0,1.9797,143800.0,NEAR OCEAN +-118.2,33.77,52.0,1375.0,457.0,1089.0,317.0,2.2344,200000.0,NEAR OCEAN +-118.2,33.77,41.0,1158.0,396.0,1209.0,336.0,2.7813,129200.0,NEAR OCEAN +-118.2,33.77,42.0,517.0,233.0,995.0,212.0,2.225,106300.0,NEAR OCEAN +-118.18,33.77,45.0,1434.0,627.0,735.0,518.0,1.5,162500.0,NEAR OCEAN +-118.19,33.76,25.0,1442.0,392.0,632.0,385.0,4.6629,162500.0,NEAR OCEAN +-118.19,33.77,52.0,1562.0,616.0,692.0,512.0,1.4048,200000.0,NEAR OCEAN +-118.18,33.77,39.0,1645.0,547.0,1339.0,499.0,1.5536,155000.0,NEAR OCEAN +-118.18,33.77,36.0,1833.0,688.0,1128.0,620.0,1.1483,112500.0,NEAR OCEAN +-118.19,33.77,21.0,2103.0,727.0,1064.0,603.0,1.6178,137500.0,NEAR OCEAN +-118.19,33.77,31.0,1711.0,691.0,1092.0,568.0,1.0714,150000.0,NEAR OCEAN +-118.18,33.78,20.0,1852.0,556.0,1712.0,556.0,1.4565,152500.0,NEAR OCEAN +-118.18,33.78,17.0,1419.0,436.0,1300.0,360.0,2.0769,100000.0,NEAR OCEAN +-118.18,33.78,52.0,1180.0,381.0,1046.0,332.0,1.5603,162500.0,NEAR OCEAN +-118.19,33.78,31.0,1648.0,484.0,898.0,457.0,1.5844,162500.0,NEAR OCEAN +-118.19,33.78,8.0,992.0,393.0,694.0,331.0,2.5544,162500.0,NEAR OCEAN +-118.19,33.78,29.0,1013.0,392.0,1083.0,316.0,1.8438,162500.0,NEAR OCEAN +-118.19,33.78,42.0,1021.0,300.0,533.0,187.0,1.8036,175000.0,NEAR OCEAN +-118.17,33.78,29.0,2920.0,962.0,3580.0,772.0,1.7393,140200.0,NEAR OCEAN +-118.17,33.78,23.0,3768.0,1261.0,3940.0,1098.0,1.9647,186200.0,NEAR OCEAN +-118.18,33.78,26.0,3042.0,1253.0,4812.0,1141.0,1.7701,146200.0,NEAR OCEAN +-118.17,33.78,44.0,2364.0,746.0,3184.0,672.0,1.918,147500.0,NEAR OCEAN +-118.17,33.77,36.0,2933.0,881.0,2077.0,838.0,2.2538,181300.0,NEAR OCEAN +-118.17,33.77,45.0,2508.0,797.0,1340.0,720.0,2.6786,191100.0,NEAR OCEAN +-118.17,33.77,38.0,2239.0,721.0,984.0,684.0,2.346,165600.0,NEAR OCEAN +-118.17,33.77,39.0,2953.0,878.0,1379.0,785.0,2.1378,180400.0,NEAR OCEAN +-118.17,33.77,12.0,4409.0,1401.0,3068.0,1262.0,2.2808,154700.0,NEAR OCEAN +-118.18,33.77,29.0,1776.0,606.0,1391.0,488.0,1.1295,137500.0,NEAR OCEAN +-118.18,33.77,30.0,1418.0,439.0,720.0,417.0,2.6371,159400.0,NEAR OCEAN +-118.17,33.77,37.0,1127.0,327.0,492.0,331.0,2.675,241700.0,NEAR OCEAN +-118.18,33.74,30.0,5915.0,1750.0,2136.0,1503.0,4.0968,310000.0,NEAR OCEAN +-118.17,33.77,45.0,2151.0,643.0,1047.0,579.0,3.1149,218800.0,NEAR OCEAN +-118.17,33.77,45.0,2143.0,697.0,1004.0,594.0,3.0153,220000.0,NEAR OCEAN +-118.18,33.77,37.0,2653.0,754.0,1087.0,698.0,2.3523,325000.0,NEAR OCEAN +-118.18,33.77,41.0,2048.0,601.0,852.0,533.0,2.5726,193800.0,NEAR OCEAN +-118.18,33.77,49.0,2297.0,759.0,1105.0,629.0,1.8388,175000.0,NEAR OCEAN +-118.16,33.77,49.0,3382.0,787.0,1314.0,756.0,3.8125,382100.0,NEAR OCEAN +-118.17,33.74,36.0,2006.0,453.0,807.0,426.0,3.7838,500001.0,NEAR OCEAN +-118.16,33.77,30.0,4439.0,1105.0,1749.0,1011.0,3.8984,306300.0,NEAR OCEAN +-118.15,33.77,39.0,2428.0,634.0,1312.0,612.0,2.7212,266300.0,NEAR OCEAN +-118.16,33.77,30.0,2800.0,757.0,1292.0,742.0,2.7614,272200.0,NEAR OCEAN +-118.16,33.77,38.0,3235.0,769.0,1284.0,752.0,2.9384,304100.0,NEAR OCEAN +-118.16,33.77,29.0,3078.0,786.0,1460.0,736.0,2.875,232500.0,NEAR OCEAN +-118.17,33.77,25.0,4405.0,1262.0,2178.0,1090.0,3.0503,225000.0,NEAR OCEAN +-118.16,33.78,15.0,4798.0,1374.0,3087.0,1212.0,2.127,163300.0,NEAR OCEAN +-118.16,33.78,39.0,4075.0,1085.0,2470.0,1025.0,2.3317,222500.0,NEAR OCEAN +-118.16,33.78,52.0,3248.0,853.0,1819.0,815.0,3.1739,222900.0,NEAR OCEAN +-118.16,33.78,29.0,3684.0,1301.0,3891.0,1143.0,1.6955,179700.0,NEAR OCEAN +-118.15,33.78,13.0,3056.0,861.0,1600.0,824.0,3.3003,207800.0,NEAR OCEAN +-118.15,33.78,12.0,4436.0,1133.0,2176.0,1002.0,3.5812,198600.0,NEAR OCEAN +-118.15,33.78,35.0,2768.0,752.0,1277.0,651.0,3.6193,250000.0,NEAR OCEAN +-118.14,33.78,42.0,1898.0,488.0,940.0,483.0,3.4107,233300.0,NEAR OCEAN +-118.13,33.78,45.0,1016.0,172.0,361.0,163.0,7.5,434500.0,NEAR OCEAN +-118.14,33.77,49.0,2792.0,690.0,1301.0,648.0,3.2917,307400.0,NEAR OCEAN +-118.14,33.77,51.0,2812.0,621.0,1171.0,566.0,3.875,342900.0,NEAR OCEAN +-118.15,33.77,52.0,2204.0,498.0,899.0,445.0,4.1765,393900.0,NEAR OCEAN +-118.15,33.77,41.0,3448.0,896.0,1621.0,838.0,4.5,339800.0,NEAR OCEAN +-118.15,33.77,27.0,3043.0,787.0,1398.0,747.0,3.5528,271100.0,NEAR OCEAN +-118.14,33.76,37.0,3242.0,698.0,1080.0,629.0,3.901,432500.0,NEAR OCEAN +-118.16,33.72,29.0,2743.0,708.0,1059.0,651.0,3.625,500000.0,NEAR OCEAN +-118.15,33.76,36.0,2916.0,785.0,1183.0,749.0,3.5985,500001.0,NEAR OCEAN +-118.15,33.77,36.0,4366.0,1211.0,1912.0,1172.0,3.5292,361800.0,NEAR OCEAN +-118.13,33.76,52.0,2216.0,526.0,940.0,530.0,4.5469,381000.0,NEAR OCEAN +-118.13,33.76,44.0,1543.0,463.0,652.0,406.0,4.25,439300.0,NEAR OCEAN +-118.14,33.75,39.0,1995.0,634.0,867.0,567.0,4.0795,400000.0,NEAR OCEAN +-118.14,33.76,52.0,2677.0,642.0,1144.0,624.0,4.3889,378000.0,NEAR OCEAN +-118.14,33.76,50.0,2960.0,761.0,1179.0,718.0,3.5214,398100.0,NEAR OCEAN +-118.14,33.76,44.0,1633.0,536.0,741.0,513.0,3.385,408300.0,NEAR OCEAN +-118.14,33.77,52.0,2208.0,409.0,791.0,408.0,5.8408,500000.0,NEAR OCEAN +-118.14,33.76,50.0,914.0,167.0,322.0,165.0,4.7361,418800.0,NEAR OCEAN +-118.13,33.76,46.0,2834.0,673.0,1175.0,670.0,4.7875,363800.0,NEAR OCEAN +-118.13,33.76,44.0,2532.0,621.0,961.0,550.0,3.9352,406900.0,NEAR OCEAN +-118.12,33.76,43.0,3070.0,668.0,1240.0,646.0,3.7813,461500.0,NEAR OCEAN +-118.12,33.75,47.0,3330.0,569.0,1220.0,557.0,7.3672,500001.0,NEAR OCEAN +-118.12,33.76,45.0,3035.0,516.0,1127.0,527.0,7.0796,500001.0,NEAR OCEAN +-118.12,33.75,41.0,2072.0,491.0,742.0,414.0,3.9934,500001.0,NEAR OCEAN +-118.14,33.71,36.0,2484.0,525.0,792.0,446.0,5.1815,500001.0,NEAR OCEAN +-118.1,33.76,15.0,4690.0,1002.0,1879.0,974.0,5.6051,267400.0,NEAR OCEAN +-118.11,33.77,15.0,9103.0,1847.0,3333.0,1712.0,5.1508,367300.0,NEAR OCEAN +-118.12,33.77,20.0,4534.0,954.0,1941.0,892.0,6.0362,463500.0,NEAR OCEAN +-118.12,33.77,10.0,7264.0,1137.0,2528.0,1057.0,10.2233,500001.0,NEAR OCEAN +-118.13,33.77,52.0,3697.0,691.0,1436.0,671.0,4.6852,395200.0,NEAR OCEAN +-118.13,33.77,37.0,4365.0,926.0,1661.0,868.0,5.3046,360700.0,NEAR OCEAN +-118.32,33.35,27.0,1675.0,521.0,744.0,331.0,2.1579,450000.0,ISLAND +-118.33,33.34,52.0,2359.0,591.0,1100.0,431.0,2.8333,414700.0,ISLAND +-118.32,33.33,52.0,2127.0,512.0,733.0,288.0,3.3906,300000.0,ISLAND +-118.32,33.34,52.0,996.0,264.0,341.0,160.0,2.7361,450000.0,ISLAND +-118.48,33.43,29.0,716.0,214.0,422.0,173.0,2.6042,287500.0,ISLAND +-118.29,33.96,32.0,3508.0,917.0,2794.0,839.0,1.554,100000.0,<1H OCEAN +-118.3,33.95,36.0,1786.0,418.0,1367.0,393.0,1.5078,99600.0,<1H OCEAN +-118.29,33.95,31.0,2839.0,792.0,2390.0,729.0,2.0,109800.0,<1H OCEAN +-118.3,33.95,41.0,2057.0,550.0,1805.0,506.0,1.2455,100800.0,<1H OCEAN +-118.3,33.95,27.0,1774.0,444.0,1622.0,402.0,2.2031,96900.0,<1H OCEAN +-118.3,33.95,35.0,1182.0,305.0,977.0,283.0,1.5898,94000.0,<1H OCEAN +-118.29,33.94,38.0,2407.0,630.0,1774.0,562.0,1.5615,108600.0,<1H OCEAN +-118.3,33.94,36.0,3504.0,862.0,2521.0,836.0,2.5679,114900.0,<1H OCEAN +-118.3,33.94,36.0,2041.0,531.0,1390.0,464.0,2.0114,99300.0,<1H OCEAN +-118.29,33.94,32.0,2701.0,708.0,1880.0,590.0,1.6716,123800.0,<1H OCEAN +-118.29,33.93,32.0,1815.0,488.0,1715.0,475.0,1.7244,111200.0,<1H OCEAN +-118.3,33.93,35.0,1300.0,356.0,1216.0,326.0,1.2,99200.0,<1H OCEAN +-118.3,33.93,36.0,2196.0,633.0,2017.0,583.0,1.3962,124300.0,<1H OCEAN +-118.3,33.93,40.0,2434.0,477.0,1646.0,453.0,3.2024,128000.0,<1H OCEAN +-118.31,33.93,37.0,1282.0,244.0,852.0,249.0,4.2917,127900.0,<1H OCEAN +-118.31,33.94,44.0,1854.0,367.0,976.0,335.0,3.6583,126700.0,<1H OCEAN +-118.31,33.94,40.0,1917.0,438.0,1021.0,383.0,2.2448,175000.0,<1H OCEAN +-118.31,33.94,40.0,1323.0,243.0,684.0,229.0,3.2206,145800.0,<1H OCEAN +-118.31,33.94,40.0,1550.0,,798.0,270.0,3.775,153800.0,<1H OCEAN +-118.31,33.93,42.0,1173.0,201.0,602.0,186.0,5.5787,142000.0,<1H OCEAN +-118.31,33.93,43.0,1834.0,292.0,997.0,295.0,4.9464,150300.0,<1H OCEAN +-118.32,33.94,37.0,2740.0,504.0,1468.0,479.0,4.5368,168800.0,<1H OCEAN +-118.32,33.93,37.0,2379.0,462.0,1327.0,445.0,4.25,172100.0,<1H OCEAN +-118.33,33.93,37.0,1831.0,356.0,925.0,338.0,4.4091,148400.0,<1H OCEAN +-118.33,33.93,38.0,694.0,112.0,412.0,119.0,6.0718,156000.0,<1H OCEAN +-118.34,33.93,35.0,1213.0,284.0,742.0,253.0,4.0625,159900.0,<1H OCEAN +-118.32,33.94,37.0,1487.0,296.0,863.0,291.0,3.1563,186200.0,<1H OCEAN +-118.32,33.94,38.0,1067.0,170.0,499.0,169.0,4.6389,183800.0,<1H OCEAN +-118.32,33.94,36.0,1722.0,280.0,830.0,261.0,4.0536,189000.0,<1H OCEAN +-118.32,33.94,36.0,1153.0,224.0,639.0,226.0,4.0,192000.0,<1H OCEAN +-118.33,33.94,31.0,3757.0,1102.0,3288.0,964.0,1.9309,137500.0,<1H OCEAN +-118.32,33.96,47.0,1453.0,247.0,721.0,276.0,5.5176,191000.0,<1H OCEAN +-118.32,33.95,43.0,3819.0,708.0,1505.0,712.0,3.1719,183500.0,<1H OCEAN +-118.33,33.96,24.0,6513.0,1290.0,2636.0,1271.0,4.2099,189800.0,<1H OCEAN +-118.32,33.95,44.0,2023.0,325.0,992.0,326.0,4.6667,175600.0,<1H OCEAN +-118.32,33.95,44.0,2131.0,360.0,1040.0,330.0,5.0912,169800.0,<1H OCEAN +-118.34,33.95,33.0,1923.0,459.0,1412.0,361.0,5.4359,194100.0,<1H OCEAN +-118.32,33.97,52.0,1590.0,302.0,844.0,295.0,2.7139,164900.0,<1H OCEAN +-118.32,33.96,47.0,1885.0,361.0,954.0,357.0,3.8512,171300.0,<1H OCEAN +-118.32,33.96,47.0,1297.0,292.0,704.0,264.0,3.3214,166500.0,<1H OCEAN +-118.32,33.97,46.0,1504.0,270.0,814.0,306.0,4.3919,157100.0,<1H OCEAN +-118.34,33.97,45.0,2230.0,364.0,949.0,344.0,5.5,188200.0,<1H OCEAN +-118.33,33.96,42.0,1686.0,361.0,737.0,319.0,2.3,189200.0,<1H OCEAN +-118.33,33.96,42.0,2084.0,517.0,1062.0,451.0,2.0057,198200.0,<1H OCEAN +-118.35,33.97,33.0,1495.0,474.0,1272.0,447.0,2.0694,143500.0,<1H OCEAN +-118.35,33.97,25.0,1864.0,616.0,1710.0,575.0,2.2303,159400.0,<1H OCEAN +-118.35,33.97,26.0,1725.0,431.0,1130.0,404.0,3.2708,128100.0,<1H OCEAN +-118.35,33.97,26.0,3832.0,1074.0,2340.0,904.0,2.6734,143400.0,<1H OCEAN +-118.35,33.98,33.0,1884.0,477.0,1518.0,449.0,3.1194,152800.0,<1H OCEAN +-118.35,33.98,42.0,3081.0,680.0,1785.0,609.0,3.745,170800.0,<1H OCEAN +-118.34,33.98,47.0,2649.0,684.0,2374.0,607.0,2.3882,137700.0,<1H OCEAN +-118.34,33.98,40.0,2108.0,526.0,1922.0,544.0,3.163,137800.0,<1H OCEAN +-118.34,33.98,45.0,1298.0,294.0,1064.0,268.0,3.7067,136600.0,<1H OCEAN +-118.35,33.97,30.0,1548.0,330.0,757.0,349.0,3.8056,323800.0,<1H OCEAN +-118.35,33.96,21.0,2714.0,881.0,1549.0,853.0,1.2094,157500.0,<1H OCEAN +-118.35,33.96,26.0,2773.0,681.0,1560.0,631.0,3.1354,164300.0,<1H OCEAN +-118.35,33.95,28.0,4770.0,1328.0,3201.0,1196.0,2.681,147700.0,<1H OCEAN +-118.34,33.95,25.0,3762.0,1281.0,4015.0,1178.0,2.1587,143800.0,<1H OCEAN +-118.35,33.95,30.0,2661.0,765.0,2324.0,724.0,3.0519,137500.0,<1H OCEAN +-118.35,33.95,42.0,1779.0,431.0,1507.0,380.0,2.8892,159800.0,<1H OCEAN +-118.35,33.95,45.0,1076.0,213.0,781.0,238.0,3.95,164000.0,<1H OCEAN +-118.36,33.95,42.0,1116.0,303.0,1082.0,299.0,3.7237,170800.0,<1H OCEAN +-118.36,33.96,21.0,1802.0,556.0,1286.0,557.0,2.7284,146900.0,<1H OCEAN +-118.36,33.96,25.0,1849.0,518.0,1498.0,451.0,2.8378,170000.0,<1H OCEAN +-118.36,33.96,26.0,3543.0,,2742.0,951.0,2.5504,151300.0,<1H OCEAN +-118.36,33.95,26.0,3231.0,1089.0,3193.0,1020.0,2.6535,177200.0,<1H OCEAN +-118.36,33.98,45.0,1559.0,305.0,891.0,341.0,4.4038,259400.0,<1H OCEAN +-118.36,33.98,46.0,1425.0,283.0,782.0,273.0,5.057,246300.0,<1H OCEAN +-118.36,33.98,39.0,813.0,185.0,344.0,154.0,3.5833,218800.0,<1H OCEAN +-118.37,33.97,26.0,6672.0,1729.0,3333.0,1557.0,2.9646,179800.0,<1H OCEAN +-118.36,33.97,18.0,1284.0,283.0,990.0,289.0,4.0179,195800.0,<1H OCEAN +-118.37,33.97,21.0,3616.0,1060.0,2515.0,945.0,2.7464,153100.0,<1H OCEAN +-118.36,33.98,29.0,2861.0,816.0,1715.0,775.0,2.7712,160900.0,<1H OCEAN +-118.36,33.97,19.0,4651.0,1281.0,2917.0,1121.0,2.6823,142500.0,<1H OCEAN +-118.36,33.96,17.0,3431.0,934.0,2365.0,810.0,3.0393,129200.0,<1H OCEAN +-118.36,33.96,37.0,2146.0,573.0,2009.0,592.0,3.6583,177300.0,<1H OCEAN +-118.37,33.96,26.0,138.0,23.0,100.0,20.0,4.875,175000.0,<1H OCEAN +-118.37,33.95,35.0,924.0,349.0,1376.0,358.0,2.2297,262500.0,<1H OCEAN +-118.36,33.95,42.0,1139.0,302.0,1283.0,306.0,4.1635,163900.0,<1H OCEAN +-118.36,33.95,42.0,2532.0,627.0,2038.0,591.0,2.875,177500.0,<1H OCEAN +-118.37,33.95,32.0,1067.0,286.0,1053.0,277.0,2.8438,181700.0,<1H OCEAN +-118.37,33.95,52.0,836.0,175.0,747.0,166.0,4.125,174000.0,<1H OCEAN +-118.36,33.94,39.0,1390.0,410.0,1666.0,371.0,3.3056,156800.0,<1H OCEAN +-118.36,33.94,38.0,2169.0,688.0,3036.0,639.0,2.3125,148500.0,<1H OCEAN +-118.37,33.94,29.0,2265.0,813.0,3425.0,781.0,2.3675,149400.0,<1H OCEAN +-118.36,33.93,30.0,1132.0,347.0,1433.0,341.0,2.68,170000.0,<1H OCEAN +-118.36,33.93,40.0,1625.0,500.0,2036.0,476.0,2.6298,156500.0,<1H OCEAN +-118.36,33.94,33.0,939.0,284.0,1309.0,250.0,3.4063,152300.0,<1H OCEAN +-118.34,33.93,36.0,1528.0,486.0,1824.0,470.0,2.2679,153900.0,<1H OCEAN +-118.35,33.93,35.0,1050.0,252.0,918.0,236.0,1.7344,146900.0,<1H OCEAN +-118.35,33.93,34.0,617.0,189.0,810.0,180.0,1.9766,162500.0,<1H OCEAN +-118.35,33.93,33.0,2040.0,576.0,2649.0,561.0,2.3375,170600.0,<1H OCEAN +-118.35,33.94,35.0,1451.0,435.0,1888.0,420.0,2.8462,149100.0,<1H OCEAN +-118.35,33.94,38.0,1794.0,508.0,2188.0,454.0,2.6654,142200.0,<1H OCEAN +-118.35,33.94,36.0,2225.0,601.0,2755.0,610.0,2.5547,150400.0,<1H OCEAN +-118.35,33.94,42.0,1028.0,278.0,1369.0,261.0,3.3125,144600.0,<1H OCEAN +-118.34,33.94,37.0,3107.0,903.0,3456.0,734.0,2.182,147500.0,<1H OCEAN +-118.34,33.94,36.0,2796.0,1041.0,4033.0,944.0,2.4886,160700.0,<1H OCEAN +-118.33,33.93,37.0,4916.0,1134.0,3533.0,1035.0,3.2862,152300.0,<1H OCEAN +-118.34,33.93,33.0,4294.0,1224.0,4512.0,1189.0,2.8304,143700.0,<1H OCEAN +-118.34,33.93,32.0,1254.0,399.0,1281.0,386.0,2.2976,155700.0,<1H OCEAN +-118.34,33.93,37.0,1638.0,407.0,1341.0,369.0,3.0677,167700.0,<1H OCEAN +-118.35,33.93,26.0,3156.0,857.0,2394.0,787.0,3.01,191900.0,<1H OCEAN +-118.35,33.93,31.0,2746.0,697.0,1973.0,598.0,3.5139,192800.0,<1H OCEAN +-118.35,33.93,25.0,2260.0,692.0,1603.0,673.0,2.11,223300.0,<1H OCEAN +-118.36,33.93,27.0,4445.0,1231.0,3340.0,1113.0,3.1656,204500.0,<1H OCEAN +-118.34,33.92,29.0,1475.0,349.0,965.0,370.0,3.3558,199600.0,<1H OCEAN +-118.35,33.92,24.0,2728.0,845.0,2023.0,773.0,2.75,239700.0,<1H OCEAN +-118.35,33.92,29.0,736.0,232.0,584.0,231.0,3.6167,200000.0,<1H OCEAN +-118.36,33.92,26.0,3695.0,1144.0,2308.0,1009.0,2.6667,229300.0,<1H OCEAN +-118.36,33.92,46.0,1231.0,231.0,793.0,256.0,4.1023,226800.0,<1H OCEAN +-118.36,33.92,19.0,2807.0,883.0,1546.0,815.0,2.6375,233800.0,<1H OCEAN +-118.36,33.93,19.0,3103.0,918.0,2033.0,738.0,2.6961,212500.0,<1H OCEAN +-118.37,33.93,10.0,199.0,41.0,61.0,56.0,2.8958,245800.0,<1H OCEAN +-118.37,33.92,44.0,938.0,181.0,502.0,171.0,4.4722,218300.0,<1H OCEAN +-118.37,33.92,36.0,1075.0,197.0,509.0,197.0,4.9688,238900.0,<1H OCEAN +-118.37,33.92,40.0,928.0,187.0,521.0,185.0,5.5255,242700.0,<1H OCEAN +-118.37,33.92,39.0,1073.0,206.0,556.0,204.0,4.8611,245600.0,<1H OCEAN +-118.37,33.93,46.0,1130.0,201.0,503.0,196.0,4.4861,246300.0,<1H OCEAN +-118.37,33.93,46.0,442.0,88.0,255.0,94.0,4.4474,246900.0,<1H OCEAN +-118.36,33.93,44.0,520.0,116.0,392.0,106.0,3.0132,202500.0,<1H OCEAN +-118.36,33.91,41.0,2048.0,439.0,1191.0,429.0,3.8,222500.0,<1H OCEAN +-118.36,33.91,42.0,1949.0,422.0,1184.0,423.0,4.3333,225600.0,<1H OCEAN +-118.36,33.9,42.0,1935.0,388.0,1136.0,379.0,4.74,230000.0,<1H OCEAN +-118.36,33.9,40.0,1271.0,276.0,725.0,234.0,5.0452,231900.0,<1H OCEAN +-118.37,33.91,41.0,1869.0,427.0,1334.0,435.0,3.9355,227800.0,<1H OCEAN +-118.37,33.91,35.0,1742.0,283.0,812.0,282.0,5.6704,303700.0,<1H OCEAN +-118.37,33.9,35.0,1651.0,269.0,707.0,252.0,5.6482,294800.0,<1H OCEAN +-118.37,33.9,32.0,332.0,103.0,177.0,102.0,3.3409,256300.0,<1H OCEAN +-118.38,33.91,36.0,2904.0,515.0,1463.0,534.0,5.8374,289600.0,<1H OCEAN +-118.35,33.91,19.0,1949.0,559.0,1282.0,498.0,2.7813,231300.0,<1H OCEAN +-118.35,33.91,31.0,2583.0,663.0,1675.0,612.0,3.5234,265000.0,<1H OCEAN +-118.35,33.91,28.0,2108.0,534.0,1485.0,536.0,4.0775,241400.0,<1H OCEAN +-118.35,33.91,26.0,2159.0,523.0,1331.0,520.0,3.87,264500.0,<1H OCEAN +-118.35,33.91,25.0,1884.0,554.0,1337.0,549.0,2.8512,272800.0,<1H OCEAN +-118.35,33.9,25.0,3309.0,902.0,2299.0,837.0,3.0417,237000.0,<1H OCEAN +-118.35,33.91,32.0,1660.0,366.0,928.0,398.0,4.3187,269700.0,<1H OCEAN +-118.35,33.91,29.0,2461.0,535.0,1236.0,482.0,4.8409,244000.0,<1H OCEAN +-118.35,33.91,34.0,2055.0,448.0,1134.0,408.0,3.825,235400.0,<1H OCEAN +-118.36,33.91,36.0,2064.0,474.0,1366.0,421.0,4.1,243100.0,<1H OCEAN +-118.35,33.9,32.0,1056.0,225.0,565.0,231.0,3.9485,230000.0,<1H OCEAN +-118.36,33.9,39.0,1166.0,222.0,640.0,206.0,3.5313,230400.0,<1H OCEAN +-118.33,33.92,23.0,969.0,288.0,670.0,251.0,3.267,185400.0,<1H OCEAN +-118.33,33.91,39.0,1224.0,312.0,1106.0,333.0,3.3491,181800.0,<1H OCEAN +-118.34,33.91,17.0,3724.0,1023.0,2536.0,971.0,3.2649,202100.0,<1H OCEAN +-118.33,33.91,35.0,1092.0,302.0,962.0,297.0,3.5903,183300.0,<1H OCEAN +-118.34,33.91,8.0,3937.0,1404.0,2691.0,1142.0,2.4741,185700.0,<1H OCEAN +-118.34,33.92,6.0,1047.0,271.0,740.0,248.0,3.425,193800.0,<1H OCEAN +-118.34,33.91,12.0,9975.0,3638.0,7429.0,3405.0,2.6689,192300.0,<1H OCEAN +-118.33,33.91,8.0,10731.0,3335.0,7211.0,3028.0,2.455,192700.0,<1H OCEAN +-118.31,33.91,31.0,1415.0,339.0,874.0,289.0,3.8173,177900.0,<1H OCEAN +-118.31,33.91,36.0,961.0,173.0,625.0,179.0,4.2596,181100.0,<1H OCEAN +-118.32,33.91,33.0,1729.0,396.0,1073.0,344.0,4.2083,180500.0,<1H OCEAN +-118.32,33.91,35.0,940.0,197.0,640.0,215.0,4.2,181300.0,<1H OCEAN +-118.32,33.91,35.0,881.0,159.0,605.0,170.0,3.6654,184500.0,<1H OCEAN +-118.32,33.91,34.0,3041.0,677.0,1920.0,640.0,4.5304,181300.0,<1H OCEAN +-118.32,33.91,34.0,1068.0,198.0,757.0,231.0,5.7528,180500.0,<1H OCEAN +-118.32,33.9,35.0,3189.0,680.0,1882.0,651.0,3.6625,188000.0,<1H OCEAN +-118.31,33.92,35.0,1307.0,246.0,672.0,219.0,4.8456,146400.0,<1H OCEAN +-118.31,33.93,35.0,1580.0,266.0,926.0,282.0,5.0653,158000.0,<1H OCEAN +-118.32,33.93,34.0,1536.0,273.0,804.0,287.0,4.9615,157800.0,<1H OCEAN +-118.32,33.92,35.0,1281.0,219.0,710.0,184.0,4.8304,152800.0,<1H OCEAN +-118.29,33.93,31.0,3894.0,1017.0,3590.0,962.0,2.0437,137200.0,<1H OCEAN +-118.29,33.92,34.0,1799.0,362.0,1293.0,355.0,3.692,145200.0,<1H OCEAN +-118.29,33.92,34.0,1374.0,240.0,906.0,248.0,5.3292,155500.0,<1H OCEAN +-118.3,33.92,34.0,2053.0,382.0,1258.0,380.0,3.0139,154700.0,<1H OCEAN +-118.3,33.93,29.0,2228.0,396.0,1140.0,352.0,3.7969,169400.0,<1H OCEAN +-118.3,33.91,30.0,1842.0,476.0,1491.0,420.0,3.0147,155100.0,<1H OCEAN +-118.3,33.91,34.0,1617.0,493.0,1530.0,500.0,2.6182,172600.0,<1H OCEAN +-118.31,33.9,28.0,1576.0,400.0,891.0,378.0,2.6312,171300.0,<1H OCEAN +-118.29,33.91,28.0,1501.0,446.0,1028.0,418.0,2.3043,177500.0,<1H OCEAN +-118.29,33.9,27.0,1013.0,394.0,1067.0,400.0,1.7714,159400.0,<1H OCEAN +-118.3,33.9,29.0,2617.0,668.0,1868.0,647.0,3.6,208800.0,<1H OCEAN +-118.3,33.9,27.0,3267.0,762.0,2099.0,647.0,3.4,224100.0,<1H OCEAN +-118.3,33.9,13.0,2455.0,661.0,1975.0,618.0,2.9559,173600.0,<1H OCEAN +-118.3,33.9,19.0,2421.0,689.0,1726.0,660.0,3.287,181400.0,<1H OCEAN +-118.3,33.89,30.0,2756.0,858.0,1806.0,787.0,3.0329,207800.0,<1H OCEAN +-118.3,33.89,37.0,2132.0,565.0,1369.0,565.0,3.285,218100.0,<1H OCEAN +-118.31,33.9,38.0,1400.0,399.0,1131.0,405.0,3.5417,198400.0,<1H OCEAN +-118.29,33.89,33.0,2138.0,567.0,1072.0,528.0,2.7428,208900.0,<1H OCEAN +-118.29,33.89,32.0,2355.0,583.0,1605.0,571.0,4.2171,218200.0,<1H OCEAN +-118.29,33.88,36.0,1751.0,438.0,1175.0,419.0,3.0739,218600.0,<1H OCEAN +-118.29,33.88,21.0,4946.0,1231.0,3186.0,1167.0,3.3281,237000.0,<1H OCEAN +-118.3,33.87,27.0,3144.0,722.0,1510.0,680.0,3.1597,214700.0,<1H OCEAN +-118.3,33.87,31.0,1398.0,261.0,823.0,263.0,5.0641,234900.0,<1H OCEAN +-118.3,33.88,26.0,1221.0,312.0,807.0,330.0,4.0536,253600.0,<1H OCEAN +-118.3,33.88,29.0,850.0,229.0,563.0,204.0,3.7375,247700.0,<1H OCEAN +-118.3,33.88,30.0,1348.0,333.0,885.0,322.0,3.2574,195300.0,<1H OCEAN +-118.3,33.88,35.0,3227.0,749.0,1881.0,696.0,2.8445,242100.0,<1H OCEAN +-118.31,33.88,32.0,2421.0,671.0,1491.0,587.0,3.5644,242300.0,<1H OCEAN +-118.31,33.88,35.0,1939.0,412.0,1036.0,400.0,3.5556,238000.0,<1H OCEAN +-118.31,33.88,21.0,1490.0,430.0,686.0,400.0,2.3812,237500.0,<1H OCEAN +-118.31,33.9,30.0,2407.0,581.0,1724.0,531.0,3.4792,194700.0,<1H OCEAN +-118.31,33.89,37.0,2278.0,508.0,1257.0,498.0,3.7639,220600.0,<1H OCEAN +-118.31,33.89,35.0,2144.0,423.0,1192.0,417.0,4.1458,231500.0,<1H OCEAN +-118.32,33.9,36.0,1520.0,300.0,831.0,291.0,4.0473,212100.0,<1H OCEAN +-118.32,33.9,36.0,1741.0,412.0,1245.0,423.0,4.1344,210300.0,<1H OCEAN +-118.32,33.9,37.0,1664.0,401.0,1316.0,409.0,3.0526,216400.0,<1H OCEAN +-118.32,33.89,45.0,1928.0,453.0,1323.0,458.0,4.2813,210100.0,<1H OCEAN +-118.32,33.89,44.0,1300.0,252.0,695.0,249.0,5.1669,220600.0,<1H OCEAN +-118.32,33.89,34.0,2675.0,560.0,1270.0,492.0,4.5053,242000.0,<1H OCEAN +-118.33,33.9,21.0,6603.0,1984.0,5546.0,1745.0,2.6091,163900.0,<1H OCEAN +-118.34,33.9,23.0,2395.0,498.0,1309.0,493.0,4.9779,224600.0,<1H OCEAN +-118.34,33.9,37.0,542.0,105.0,355.0,118.0,5.5133,227300.0,<1H OCEAN +-118.34,33.9,36.0,1158.0,219.0,628.0,253.0,4.7426,242700.0,<1H OCEAN +-118.34,33.9,36.0,1342.0,259.0,706.0,261.0,4.1776,236600.0,<1H OCEAN +-118.33,33.89,39.0,1880.0,361.0,982.0,357.0,4.1953,226900.0,<1H OCEAN +-118.33,33.89,42.0,1816.0,338.0,897.0,306.0,5.1874,230800.0,<1H OCEAN +-118.34,33.89,36.0,2392.0,444.0,1346.0,445.0,6.0088,245900.0,<1H OCEAN +-118.34,33.89,36.0,2274.0,411.0,1232.0,423.0,5.373,244500.0,<1H OCEAN +-118.35,33.9,13.0,2887.0,853.0,2197.0,800.0,2.8777,207900.0,<1H OCEAN +-118.35,33.9,31.0,1547.0,,956.0,287.0,3.4698,225000.0,<1H OCEAN +-118.35,33.9,31.0,981.0,222.0,734.0,239.0,4.875,232400.0,<1H OCEAN +-118.35,33.89,29.0,2940.0,708.0,2175.0,684.0,3.6486,229000.0,<1H OCEAN +-118.35,33.89,34.0,1740.0,387.0,1249.0,375.0,4.1552,233900.0,<1H OCEAN +-118.36,33.9,41.0,1355.0,349.0,655.0,329.0,2.9551,205000.0,<1H OCEAN +-118.35,33.9,22.0,1127.0,287.0,697.0,241.0,3.3971,220300.0,<1H OCEAN +-118.35,33.89,30.0,1143.0,299.0,776.0,273.0,4.2829,240000.0,<1H OCEAN +-118.36,33.89,37.0,1719.0,426.0,1266.0,424.0,3.375,228000.0,<1H OCEAN +-118.36,33.89,34.0,760.0,174.0,723.0,198.0,5.3169,227600.0,<1H OCEAN +-118.36,33.9,18.0,3380.0,922.0,2276.0,854.0,4.0727,214000.0,<1H OCEAN +-118.36,33.89,27.0,2837.0,684.0,2141.0,648.0,3.1325,215000.0,<1H OCEAN +-118.36,33.88,33.0,2408.0,534.0,1644.0,523.0,4.2454,236800.0,<1H OCEAN +-118.36,33.88,28.0,1313.0,319.0,827.0,308.0,2.65,260800.0,<1H OCEAN +-118.36,33.88,25.0,2845.0,710.0,1611.0,628.0,3.2049,267400.0,<1H OCEAN +-118.36,33.88,22.0,1388.0,336.0,930.0,287.0,2.7981,275000.0,<1H OCEAN +-118.36,33.88,26.0,1375.0,286.0,829.0,278.0,3.9844,230700.0,<1H OCEAN +-118.35,33.89,25.0,1769.0,440.0,1371.0,414.0,3.0833,232700.0,<1H OCEAN +-118.35,33.88,36.0,1583.0,411.0,1097.0,350.0,4.0737,238200.0,<1H OCEAN +-118.34,33.88,42.0,725.0,183.0,493.0,172.0,3.2589,233300.0,<1H OCEAN +-118.35,33.88,44.0,822.0,180.0,480.0,177.0,4.4,225800.0,<1H OCEAN +-118.35,33.88,36.0,1567.0,362.0,1054.0,386.0,3.2594,233900.0,<1H OCEAN +-118.35,33.88,25.0,1459.0,362.0,1150.0,354.0,3.35,237500.0,<1H OCEAN +-118.3,33.74,40.0,1896.0,416.0,950.0,383.0,2.425,255000.0,NEAR OCEAN +-118.3,33.74,28.0,1065.0,215.0,887.0,217.0,3.9375,270500.0,NEAR OCEAN +-118.39,33.92,41.0,80.0,20.0,61.0,23.0,5.25,247200.0,<1H OCEAN +-118.4,33.92,25.0,1453.0,271.0,695.0,283.0,5.9499,345800.0,<1H OCEAN +-118.4,33.92,32.0,2828.0,629.0,1313.0,534.0,4.5987,363800.0,<1H OCEAN +-118.4,33.93,35.0,2217.0,447.0,1000.0,450.0,4.7319,376100.0,<1H OCEAN +-118.41,33.93,38.0,3328.0,625.0,1455.0,619.0,5.0596,363900.0,<1H OCEAN +-118.41,33.92,32.0,2590.0,607.0,1132.0,555.0,4.2333,358000.0,<1H OCEAN +-118.41,33.92,22.0,2340.0,584.0,1141.0,554.0,4.5729,337500.0,<1H OCEAN +-118.41,33.93,22.0,2514.0,605.0,1225.0,568.0,4.1818,339700.0,<1H OCEAN +-118.41,33.92,38.0,1437.0,272.0,590.0,250.0,5.2338,358000.0,<1H OCEAN +-118.41,33.92,29.0,1436.0,401.0,674.0,343.0,3.6389,275000.0,<1H OCEAN +-118.42,33.92,25.0,3521.0,852.0,1524.0,764.0,3.8086,361300.0,<1H OCEAN +-118.42,33.92,41.0,1621.0,279.0,756.0,277.0,5.0594,346000.0,<1H OCEAN +-118.42,33.93,39.0,2988.0,605.0,1466.0,610.0,4.9286,341400.0,<1H OCEAN +-118.42,33.93,28.0,4603.0,993.0,2191.0,943.0,4.5743,382200.0,<1H OCEAN +-118.42,33.9,29.0,1929.0,523.0,686.0,455.0,5.5347,500001.0,<1H OCEAN +-118.43,33.9,27.0,1536.0,377.0,553.0,326.0,5.4088,500001.0,<1H OCEAN +-118.4,33.9,34.0,2674.0,435.0,1087.0,431.0,7.3151,492200.0,<1H OCEAN +-118.4,33.9,37.0,2458.0,400.0,920.0,375.0,7.8924,500001.0,<1H OCEAN +-118.41,33.9,39.0,2311.0,404.0,1044.0,380.0,8.468,472100.0,<1H OCEAN +-118.41,33.9,39.0,2040.0,336.0,926.0,351.0,7.5552,500001.0,<1H OCEAN +-118.44,33.88,35.0,2020.0,451.0,724.0,399.0,6.6494,500001.0,NEAR OCEAN +-118.42,33.9,37.0,1576.0,345.0,662.0,340.0,5.308,500001.0,<1H OCEAN +-118.42,33.9,43.0,1394.0,321.0,552.0,296.0,5.9596,500001.0,<1H OCEAN +-118.41,33.89,31.0,1428.0,320.0,677.0,331.0,7.2316,500001.0,<1H OCEAN +-118.41,33.89,35.0,1194.0,292.0,507.0,295.0,9.0812,500001.0,<1H OCEAN +-118.41,33.89,38.0,4166.0,828.0,1600.0,770.0,6.3861,500001.0,<1H OCEAN +-118.41,33.89,34.0,2959.0,639.0,1143.0,593.0,6.348,500001.0,<1H OCEAN +-118.41,33.89,31.0,702.0,161.0,236.0,144.0,5.0497,500001.0,<1H OCEAN +-118.4,33.9,38.0,2868.0,466.0,1098.0,438.0,7.9059,477100.0,<1H OCEAN +-118.4,33.89,36.0,2334.0,430.0,1033.0,407.0,6.6321,481500.0,<1H OCEAN +-118.4,33.89,31.0,2926.0,492.0,1149.0,476.0,7.9611,500001.0,<1H OCEAN +-118.4,33.89,36.0,2127.0,314.0,807.0,306.0,8.1596,500001.0,<1H OCEAN +-118.39,33.9,7.0,4314.0,725.0,1699.0,718.0,8.2037,500001.0,<1H OCEAN +-118.38,33.89,35.0,1778.0,330.0,732.0,312.0,6.5745,379300.0,<1H OCEAN +-118.39,33.89,30.0,2532.0,464.0,1056.0,419.0,6.3434,460400.0,<1H OCEAN +-118.39,33.89,38.0,1851.0,332.0,750.0,314.0,7.3356,422700.0,<1H OCEAN +-118.39,33.89,40.0,826.0,143.0,389.0,147.0,7.1845,438100.0,<1H OCEAN +-118.36,33.89,40.0,756.0,122.0,371.0,130.0,5.0299,329200.0,<1H OCEAN +-118.36,33.88,44.0,1362.0,237.0,709.0,247.0,4.4271,336200.0,<1H OCEAN +-118.37,33.88,44.0,1325.0,245.0,669.0,253.0,4.4211,324000.0,<1H OCEAN +-118.37,33.88,21.0,966.0,172.0,417.0,158.0,5.5335,342600.0,<1H OCEAN +-118.38,33.88,33.0,1313.0,244.0,561.0,217.0,5.2999,359400.0,<1H OCEAN +-118.37,33.89,21.0,2696.0,548.0,1142.0,473.0,5.6091,356800.0,<1H OCEAN +-118.37,33.88,20.0,2439.0,474.0,1219.0,497.0,5.9619,335900.0,<1H OCEAN +-118.36,33.88,31.0,2518.0,543.0,1107.0,508.0,4.7404,295800.0,<1H OCEAN +-118.36,33.87,19.0,2512.0,575.0,1275.0,544.0,4.9375,293000.0,<1H OCEAN +-118.37,33.87,19.0,757.0,148.0,361.0,141.0,6.02,304200.0,<1H OCEAN +-118.37,33.88,27.0,1688.0,331.0,811.0,327.0,4.5357,334200.0,<1H OCEAN +-118.38,33.87,27.0,2287.0,491.0,1101.0,466.0,4.675,316900.0,<1H OCEAN +-118.38,33.88,27.0,3039.0,606.0,1421.0,564.0,5.5771,345500.0,<1H OCEAN +-118.37,33.88,26.0,2620.0,530.0,1282.0,525.0,4.4828,340700.0,<1H OCEAN +-118.36,33.87,17.0,1082.0,291.0,598.0,281.0,3.9868,281900.0,<1H OCEAN +-118.36,33.87,22.0,2114.0,541.0,1300.0,538.0,3.4208,290000.0,<1H OCEAN +-118.37,33.87,18.0,2516.0,485.0,1128.0,433.0,5.0114,338600.0,<1H OCEAN +-118.37,33.87,13.0,2907.0,726.0,1573.0,694.0,3.5048,294000.0,<1H OCEAN +-118.36,33.86,35.0,2126.0,434.0,1044.0,433.0,5.5456,297400.0,<1H OCEAN +-118.36,33.86,37.0,1768.0,314.0,802.0,290.0,5.0784,295900.0,<1H OCEAN +-118.36,33.86,34.0,1865.0,345.0,963.0,302.0,5.543,305900.0,<1H OCEAN +-118.37,33.86,28.0,2685.0,581.0,1243.0,529.0,4.119,324000.0,<1H OCEAN +-118.37,33.87,23.0,1829.0,331.0,891.0,356.0,6.5755,359900.0,<1H OCEAN +-118.38,33.87,21.0,4151.0,1018.0,2054.0,925.0,4.9821,292900.0,<1H OCEAN +-118.38,33.87,17.0,2791.0,579.0,1467.0,583.0,5.7415,321900.0,<1H OCEAN +-118.38,33.87,23.0,2387.0,418.0,1008.0,415.0,5.8518,337900.0,<1H OCEAN +-118.39,33.87,19.0,3303.0,584.0,1329.0,569.0,7.521,340400.0,<1H OCEAN +-118.38,33.86,12.0,4235.0,735.0,1798.0,683.0,6.4242,365500.0,<1H OCEAN +-118.38,33.86,29.0,2787.0,475.0,1182.0,444.0,6.7613,352700.0,<1H OCEAN +-118.38,33.86,24.0,3124.0,560.0,1312.0,542.0,6.3021,333800.0,<1H OCEAN +-118.38,33.86,15.0,1778.0,311.0,908.0,330.0,7.674,329300.0,<1H OCEAN +-118.38,33.87,33.0,1993.0,371.0,918.0,361.0,6.9021,337600.0,<1H OCEAN +-118.38,33.88,39.0,1489.0,282.0,743.0,270.0,4.8611,456100.0,<1H OCEAN +-118.38,33.88,34.0,1830.0,315.0,822.0,307.0,5.0602,453700.0,<1H OCEAN +-118.39,33.88,33.0,2496.0,387.0,1098.0,404.0,7.6685,474300.0,<1H OCEAN +-118.39,33.88,34.0,1973.0,367.0,843.0,345.0,6.077,472700.0,<1H OCEAN +-118.39,33.88,33.0,2543.0,439.0,1098.0,416.0,5.9683,495500.0,<1H OCEAN +-118.39,33.88,31.0,1448.0,244.0,607.0,259.0,8.1513,500001.0,<1H OCEAN +-118.39,33.88,35.0,1267.0,216.0,521.0,191.0,6.0441,470000.0,<1H OCEAN +-118.38,33.88,36.0,2501.0,443.0,1031.0,422.0,4.75,442100.0,<1H OCEAN +-118.4,33.88,36.0,3022.0,482.0,1278.0,494.0,7.2651,500001.0,<1H OCEAN +-118.4,33.88,36.0,1543.0,214.0,474.0,187.0,9.3399,500001.0,<1H OCEAN +-118.4,33.88,35.0,1753.0,296.0,615.0,275.0,7.5,500001.0,<1H OCEAN +-118.41,33.88,34.0,540.0,107.0,213.0,104.0,6.3403,500001.0,<1H OCEAN +-118.4,33.88,35.0,1060.0,191.0,444.0,196.0,8.0015,500001.0,<1H OCEAN +-118.41,33.88,43.0,2492.0,449.0,1033.0,437.0,7.9614,500001.0,<1H OCEAN +-118.41,33.88,40.0,925.0,254.0,371.0,227.0,5.2533,500001.0,<1H OCEAN +-118.41,33.88,34.0,1471.0,308.0,498.0,264.0,7.0842,500001.0,<1H OCEAN +-118.43,33.87,41.0,847.0,173.0,344.0,170.0,6.822,500001.0,NEAR OCEAN +-118.4,33.87,26.0,6712.0,1441.0,2803.0,1394.0,5.2276,434500.0,<1H OCEAN +-118.39,33.87,34.0,2395.0,469.0,1087.0,438.0,5.9683,394600.0,<1H OCEAN +-118.43,33.86,34.0,358.0,87.0,162.0,84.0,7.1264,500001.0,NEAR OCEAN +-118.4,33.88,42.0,1516.0,341.0,634.0,327.0,6.2356,472700.0,<1H OCEAN +-118.4,33.87,40.0,1679.0,372.0,719.0,385.0,6.435,479500.0,<1H OCEAN +-118.4,33.87,38.0,2398.0,431.0,911.0,392.0,5.2319,500001.0,<1H OCEAN +-118.4,33.87,45.0,2093.0,497.0,842.0,472.0,6.3231,500001.0,<1H OCEAN +-118.4,33.87,34.0,3145.0,786.0,1352.0,727.0,5.0976,469800.0,<1H OCEAN +-118.4,33.87,45.0,2181.0,505.0,965.0,471.0,5.3816,500001.0,<1H OCEAN +-118.39,33.86,34.0,2361.0,442.0,915.0,437.0,5.687,392400.0,<1H OCEAN +-118.39,33.86,28.0,3619.0,764.0,1735.0,789.0,6.1404,368400.0,<1H OCEAN +-118.39,33.86,24.0,2386.0,582.0,1152.0,568.0,4.8971,400700.0,<1H OCEAN +-118.4,33.86,18.0,5152.0,1365.0,2286.0,1243.0,5.1677,380800.0,<1H OCEAN +-118.4,33.85,29.0,2085.0,533.0,919.0,489.0,5.6017,430000.0,<1H OCEAN +-118.4,33.86,41.0,2237.0,597.0,938.0,523.0,4.7105,500001.0,<1H OCEAN +-118.42,33.85,43.0,1584.0,477.0,799.0,433.0,5.0322,435000.0,NEAR OCEAN +-118.38,33.85,28.0,4430.0,928.0,2131.0,885.0,4.9384,378100.0,<1H OCEAN +-118.38,33.85,31.0,3533.0,729.0,1647.0,679.0,5.5843,384600.0,<1H OCEAN +-118.39,33.85,24.0,4373.0,871.0,1830.0,824.0,5.7128,366200.0,<1H OCEAN +-118.41,33.85,16.0,6123.0,1989.0,2853.0,1789.0,4.425,336400.0,NEAR OCEAN +-118.39,33.85,17.0,1610.0,379.0,670.0,341.0,4.3594,349000.0,<1H OCEAN +-118.38,33.84,25.0,5775.0,1149.0,2637.0,1117.0,5.4968,379800.0,<1H OCEAN +-118.38,33.83,20.0,2270.0,498.0,1070.0,521.0,4.4615,384800.0,<1H OCEAN +-118.38,33.83,40.0,3070.0,570.0,1264.0,506.0,5.1626,432700.0,<1H OCEAN +-118.38,33.84,26.0,2869.0,567.0,1157.0,538.0,6.0382,355300.0,<1H OCEAN +-118.39,33.84,16.0,2472.0,572.0,965.0,529.0,5.137,348600.0,<1H OCEAN +-118.43,33.83,19.0,6206.0,1611.0,2455.0,1472.0,5.145,420200.0,NEAR OCEAN +-118.39,33.83,32.0,2075.0,539.0,954.0,519.0,5.637,500001.0,NEAR OCEAN +-118.39,33.82,30.0,3433.0,918.0,1526.0,828.0,4.5817,500001.0,NEAR OCEAN +-118.43,33.82,34.0,2112.0,614.0,946.0,574.0,4.6048,500001.0,NEAR OCEAN +-118.37,33.82,32.0,2815.0,607.0,1338.0,609.0,4.5687,381200.0,<1H OCEAN +-118.38,33.82,35.0,3053.0,623.0,1311.0,589.0,5.1589,439200.0,NEAR OCEAN +-118.38,33.82,38.0,1318.0,237.0,547.0,225.0,6.0308,416700.0,NEAR OCEAN +-118.38,33.83,35.0,2152.0,454.0,902.0,414.0,4.5179,427200.0,<1H OCEAN +-118.31,33.88,33.0,2147.0,505.0,1371.0,498.0,2.4219,260700.0,<1H OCEAN +-118.32,33.87,28.0,3763.0,762.0,1967.0,724.0,5.3244,271900.0,<1H OCEAN +-118.32,33.88,35.0,1818.0,339.0,828.0,319.0,4.3036,282100.0,<1H OCEAN +-118.32,33.88,34.0,1803.0,341.0,947.0,333.0,5.5538,280300.0,<1H OCEAN +-118.32,33.88,37.0,1402.0,254.0,722.0,251.0,6.4781,269000.0,<1H OCEAN +-118.33,33.88,30.0,1856.0,444.0,899.0,435.0,3.1505,270000.0,<1H OCEAN +-118.33,33.88,36.0,1271.0,346.0,811.0,345.0,3.2417,283300.0,<1H OCEAN +-118.33,33.87,44.0,724.0,133.0,373.0,133.0,3.9167,265600.0,<1H OCEAN +-118.34,33.87,28.0,4605.0,1188.0,2558.0,1093.0,3.6988,266600.0,<1H OCEAN +-118.34,33.88,31.0,3122.0,727.0,1885.0,715.0,3.8657,298400.0,<1H OCEAN +-118.31,33.87,27.0,3348.0,695.0,1545.0,625.0,4.7543,296300.0,<1H OCEAN +-118.31,33.86,29.0,2243.0,361.0,1051.0,352.0,6.6632,325200.0,<1H OCEAN +-118.32,33.86,32.0,3485.0,678.0,1715.0,649.0,4.6563,291700.0,<1H OCEAN +-118.32,33.87,35.0,2380.0,404.0,1212.0,422.0,5.6254,283800.0,<1H OCEAN +-118.34,33.87,34.0,1069.0,217.0,601.0,212.0,4.6406,255900.0,<1H OCEAN +-118.33,33.87,36.0,2219.0,406.0,1219.0,403.0,4.2614,267100.0,<1H OCEAN +-118.33,33.87,35.0,743.0,128.0,385.0,137.0,6.4891,278100.0,<1H OCEAN +-118.32,33.86,34.0,495.0,90.0,269.0,93.0,6.4391,252300.0,<1H OCEAN +-118.33,33.86,38.0,914.0,176.0,519.0,174.0,6.0335,255400.0,<1H OCEAN +-118.33,33.86,36.0,854.0,160.0,473.0,150.0,6.3992,259600.0,<1H OCEAN +-118.33,33.86,38.0,1059.0,218.0,561.0,205.0,4.0,248600.0,<1H OCEAN +-118.34,33.86,36.0,2223.0,360.0,1162.0,376.0,5.259,279400.0,<1H OCEAN +-118.34,33.86,35.0,1936.0,343.0,1008.0,346.0,5.4791,285900.0,<1H OCEAN +-118.34,33.87,28.0,2948.0,566.0,1445.0,524.0,5.3743,286500.0,<1H OCEAN +-118.35,33.87,37.0,1420.0,286.0,886.0,290.0,4.5833,261300.0,<1H OCEAN +-118.35,33.87,34.0,2823.0,500.0,1429.0,483.0,5.5,279600.0,<1H OCEAN +-118.35,33.87,28.0,2319.0,579.0,1369.0,564.0,3.6169,257000.0,<1H OCEAN +-118.35,33.86,28.0,2075.0,463.0,1216.0,446.0,3.9732,281500.0,<1H OCEAN +-118.35,33.86,24.0,2139.0,481.0,971.0,418.0,4.3859,271300.0,<1H OCEAN +-118.34,33.84,36.0,1561.0,252.0,740.0,253.0,6.2778,309700.0,<1H OCEAN +-118.33,33.84,36.0,1364.0,251.0,668.0,245.0,5.3131,314100.0,<1H OCEAN +-118.34,33.84,36.0,1407.0,231.0,676.0,231.0,5.269,331900.0,<1H OCEAN +-118.34,33.83,34.0,1761.0,329.0,965.0,329.0,5.399,358500.0,<1H OCEAN +-118.34,33.83,35.0,1818.0,353.0,853.0,321.0,5.8972,350900.0,<1H OCEAN +-118.36,33.86,37.0,1249.0,218.0,583.0,214.0,5.7422,330700.0,<1H OCEAN +-118.35,33.85,34.0,1770.0,291.0,916.0,289.0,5.0,354200.0,<1H OCEAN +-118.35,33.85,35.0,1248.0,206.0,551.0,185.0,5.6426,348200.0,<1H OCEAN +-118.36,33.85,36.0,1390.0,230.0,683.0,219.0,4.8906,334400.0,<1H OCEAN +-118.36,33.86,36.0,681.0,122.0,360.0,128.0,5.2799,332600.0,<1H OCEAN +-118.37,33.85,34.0,2415.0,404.0,1278.0,414.0,6.1599,341200.0,<1H OCEAN +-118.36,33.85,34.0,1086.0,197.0,509.0,158.0,6.1133,349300.0,<1H OCEAN +-118.37,33.85,25.0,5622.0,998.0,2537.0,1009.0,5.785,395300.0,<1H OCEAN +-118.35,33.84,22.0,13133.0,3680.0,7180.0,3522.0,3.5414,354700.0,<1H OCEAN +-118.36,33.84,22.0,11016.0,3170.0,6664.0,2838.0,3.703,361300.0,<1H OCEAN +-118.37,33.85,29.0,3662.0,586.0,1626.0,611.0,6.3974,410000.0,<1H OCEAN +-118.37,33.84,27.0,3245.0,605.0,1572.0,556.0,5.3773,379000.0,<1H OCEAN +-118.35,33.83,36.0,1102.0,193.0,522.0,172.0,6.1187,342000.0,<1H OCEAN +-118.36,33.83,36.0,1660.0,300.0,943.0,300.0,5.1984,353600.0,<1H OCEAN +-118.36,33.84,35.0,1577.0,279.0,743.0,274.0,5.7654,343000.0,<1H OCEAN +-118.37,33.84,35.0,1792.0,322.0,978.0,326.0,4.9583,342800.0,<1H OCEAN +-118.36,33.83,35.0,1378.0,247.0,645.0,217.0,5.9143,343400.0,<1H OCEAN +-118.36,33.83,35.0,2828.0,487.0,1439.0,490.0,5.6013,350200.0,<1H OCEAN +-118.37,33.83,35.0,1207.0,207.0,601.0,213.0,4.7308,353400.0,<1H OCEAN +-118.37,33.84,32.0,1751.0,328.0,819.0,323.0,6.7105,339000.0,<1H OCEAN +-118.33,33.83,5.0,13038.0,2679.0,5272.0,2523.0,5.5023,286400.0,<1H OCEAN +-118.32,33.85,42.0,3146.0,770.0,1859.0,740.0,3.5073,234800.0,<1H OCEAN +-118.31,33.84,52.0,1819.0,464.0,1068.0,424.0,3.625,270700.0,<1H OCEAN +-118.32,33.83,51.0,2399.0,516.0,1160.0,514.0,3.8456,318900.0,<1H OCEAN +-118.32,33.84,42.0,1486.0,420.0,897.0,377.0,1.6228,376100.0,<1H OCEAN +-118.31,33.83,50.0,696.0,311.0,382.0,234.0,2.775,225000.0,<1H OCEAN +-118.31,33.83,45.0,2929.0,755.0,1635.0,652.0,2.9375,273000.0,<1H OCEAN +-118.31,33.82,35.0,3462.0,814.0,1902.0,700.0,3.402,279900.0,<1H OCEAN +-118.32,33.83,19.0,3792.0,790.0,2105.0,834.0,5.2363,310000.0,<1H OCEAN +-118.31,33.82,39.0,2198.0,425.0,1160.0,436.0,4.1406,323700.0,<1H OCEAN +-118.31,33.82,26.0,2345.0,408.0,1195.0,377.0,5.4925,361700.0,<1H OCEAN +-118.31,33.81,23.0,3942.0,748.0,1679.0,711.0,4.1169,362600.0,<1H OCEAN +-118.31,33.81,30.0,1773.0,356.0,905.0,352.0,4.3056,336000.0,<1H OCEAN +-118.32,33.82,25.0,2587.0,512.0,1219.0,509.0,4.4271,382100.0,<1H OCEAN +-118.32,33.82,22.0,2508.0,402.0,1254.0,395.0,7.0935,379500.0,<1H OCEAN +-118.32,33.81,28.0,2142.0,445.0,1140.0,422.0,4.8438,346200.0,<1H OCEAN +-118.32,33.81,27.0,2113.0,380.0,1109.0,360.0,4.7062,357000.0,<1H OCEAN +-118.33,33.82,26.0,5591.0,934.0,2824.0,939.0,6.5861,417800.0,<1H OCEAN +-118.34,33.8,25.0,4177.0,832.0,2123.0,789.0,5.0814,446800.0,<1H OCEAN +-118.35,33.82,28.0,7591.0,1710.0,3420.0,1635.0,4.0708,328900.0,<1H OCEAN +-118.36,33.82,36.0,1784.0,311.0,901.0,293.0,6.2247,339000.0,<1H OCEAN +-118.37,33.82,39.0,2794.0,444.0,1319.0,441.0,5.878,387800.0,<1H OCEAN +-118.37,33.82,36.0,2463.0,447.0,1125.0,424.0,6.0176,352700.0,<1H OCEAN +-118.37,33.82,36.0,2416.0,394.0,1115.0,386.0,6.256,366900.0,<1H OCEAN +-118.36,33.82,36.0,1083.0,187.0,522.0,187.0,5.7765,339500.0,<1H OCEAN +-118.36,33.82,26.0,5166.0,1313.0,2738.0,1239.0,3.3565,360800.0,<1H OCEAN +-118.36,33.82,28.0,67.0,15.0,49.0,11.0,6.1359,330000.0,<1H OCEAN +-118.36,33.81,25.0,9042.0,2022.0,4458.0,1944.0,4.5592,378800.0,<1H OCEAN +-118.36,33.81,26.0,1575.0,300.0,881.0,309.0,5.1778,359900.0,<1H OCEAN +-118.37,33.81,36.0,2031.0,339.0,817.0,337.0,5.1271,458300.0,NEAR OCEAN +-118.38,33.81,33.0,2349.0,407.0,954.0,373.0,6.4956,483600.0,NEAR OCEAN +-118.38,33.81,20.0,1975.0,306.0,703.0,292.0,8.5491,410300.0,NEAR OCEAN +-118.44,33.81,33.0,3994.0,990.0,1647.0,931.0,5.0106,500001.0,NEAR OCEAN +-118.38,33.82,34.0,1822.0,364.0,750.0,366.0,5.9907,500001.0,NEAR OCEAN +-118.36,33.81,34.0,2211.0,502.0,1113.0,488.0,4.7026,356800.0,<1H OCEAN +-118.37,33.81,33.0,5057.0,790.0,2021.0,748.0,6.8553,482200.0,NEAR OCEAN +-118.37,33.81,36.0,1283.0,209.0,563.0,209.0,6.9296,500001.0,NEAR OCEAN +-118.38,33.81,41.0,1889.0,301.0,802.0,278.0,6.015,488500.0,NEAR OCEAN +-118.38,33.81,39.0,2400.0,373.0,877.0,372.0,5.7361,500001.0,NEAR OCEAN +-118.39,33.81,35.0,1008.0,165.0,391.0,167.0,3.7778,487500.0,NEAR OCEAN +-118.38,33.81,36.0,1018.0,148.0,329.0,169.0,10.5045,500001.0,NEAR OCEAN +-118.33,33.79,29.0,4389.0,873.0,2069.0,901.0,4.1071,365600.0,<1H OCEAN +-118.34,33.79,36.0,716.0,123.0,388.0,124.0,5.0254,350000.0,<1H OCEAN +-118.34,33.8,34.0,1730.0,427.0,1008.0,393.0,3.9408,327700.0,<1H OCEAN +-118.34,33.8,33.0,2194.0,469.0,987.0,397.0,5.0951,318900.0,<1H OCEAN +-118.35,33.8,32.0,1434.0,296.0,672.0,285.0,4.875,311700.0,<1H OCEAN +-118.35,33.8,19.0,6224.0,1105.0,3152.0,1076.0,5.9541,500001.0,<1H OCEAN +-118.31,33.8,29.0,2795.0,572.0,1469.0,557.0,3.7167,308900.0,<1H OCEAN +-118.32,33.8,29.0,3254.0,717.0,1593.0,680.0,4.0536,285800.0,<1H OCEAN +-118.31,33.79,35.0,2290.0,563.0,1374.0,530.0,3.2472,254700.0,<1H OCEAN +-118.31,33.8,31.0,4464.0,991.0,2420.0,947.0,4.0425,277900.0,<1H OCEAN +-118.32,33.8,39.0,1415.0,298.0,729.0,278.0,3.1648,244800.0,<1H OCEAN +-118.32,33.79,35.0,2924.0,658.0,1675.0,602.0,3.8287,279900.0,<1H OCEAN +-118.32,33.79,32.0,2381.0,467.0,1264.0,488.0,4.1477,315100.0,<1H OCEAN +-118.32,33.8,29.0,4317.0,1037.0,2102.0,959.0,3.1275,286400.0,<1H OCEAN +-118.31,33.79,38.0,1601.0,352.0,711.0,304.0,3.3958,250000.0,<1H OCEAN +-118.31,33.78,30.0,4573.0,819.0,2411.0,819.0,3.5804,383800.0,<1H OCEAN +-118.32,33.79,21.0,6638.0,1634.0,3240.0,1568.0,3.6797,271100.0,<1H OCEAN +-118.34,33.78,25.0,11016.0,1626.0,4168.0,1584.0,8.1782,500001.0,NEAR OCEAN +-118.36,33.79,34.0,5166.0,704.0,2071.0,668.0,8.3609,500001.0,NEAR OCEAN +-118.37,33.79,36.0,1596.0,234.0,654.0,223.0,8.2064,500001.0,NEAR OCEAN +-118.36,33.8,38.0,2553.0,400.0,1042.0,393.0,6.9742,500001.0,NEAR OCEAN +-118.36,33.8,34.0,2629.0,369.0,966.0,375.0,10.1241,500001.0,NEAR OCEAN +-118.38,33.8,36.0,4421.0,702.0,1433.0,624.0,8.0838,500001.0,NEAR OCEAN +-118.45,33.8,31.0,4803.0,575.0,1490.0,577.0,11.9993,500001.0,NEAR OCEAN +-118.39,33.79,30.0,4402.0,563.0,1582.0,551.0,10.898,500001.0,NEAR OCEAN +-118.4,33.78,24.0,4787.0,562.0,1653.0,548.0,12.9758,500001.0,NEAR OCEAN +-118.44,33.79,27.0,2141.0,260.0,635.0,240.0,11.6648,500001.0,NEAR OCEAN +-118.41,33.77,22.0,7554.0,991.0,2808.0,946.0,10.06,500001.0,NEAR OCEAN +-118.46,33.77,28.0,3065.0,406.0,1101.0,391.0,10.5536,500001.0,NEAR OCEAN +-118.42,33.78,36.0,2093.0,303.0,802.0,300.0,8.0957,500001.0,NEAR OCEAN +-118.37,33.77,26.0,6339.0,876.0,2540.0,880.0,10.1447,500001.0,NEAR OCEAN +-118.38,33.77,21.0,11353.0,1537.0,4649.0,1504.0,9.821,500001.0,NEAR OCEAN +-118.38,33.77,17.0,10950.0,2207.0,4713.0,2043.0,6.3064,418300.0,NEAR OCEAN +-118.38,33.79,32.0,10445.0,1620.0,4474.0,1576.0,7.7042,500001.0,NEAR OCEAN +-118.4,33.78,26.0,5005.0,776.0,2357.0,790.0,8.5421,500001.0,NEAR OCEAN +-118.42,33.75,22.0,17591.0,2604.0,6897.0,2492.0,8.2831,500001.0,NEAR OCEAN +-118.34,33.76,34.0,5586.0,674.0,1871.0,636.0,15.0001,500001.0,NEAR OCEAN +-118.35,33.74,25.0,8272.0,1132.0,3392.0,1132.0,10.0973,500001.0,NEAR OCEAN +-118.38,33.75,23.0,8277.0,1290.0,3176.0,1159.0,7.6986,500001.0,NEAR OCEAN +-118.39,33.71,18.0,1193.0,233.0,475.0,228.0,7.5594,500001.0,NEAR OCEAN +-118.41,33.75,4.0,311.0,51.0,128.0,46.0,9.8091,500001.0,NEAR OCEAN +-118.31,33.77,20.0,5776.0,956.0,2757.0,936.0,6.6447,416800.0,<1H OCEAN +-118.31,33.76,26.0,4486.0,709.0,1873.0,719.0,6.5704,414700.0,<1H OCEAN +-118.31,33.75,36.0,2715.0,474.0,1303.0,457.0,4.6042,357300.0,NEAR OCEAN +-118.31,33.75,34.0,2338.0,393.0,1031.0,373.0,6.287,396400.0,NEAR OCEAN +-118.33,33.77,33.0,4244.0,595.0,1534.0,557.0,9.8214,500001.0,NEAR OCEAN +-118.32,33.75,33.0,2996.0,398.0,1048.0,387.0,9.267,500001.0,NEAR OCEAN +-118.32,33.75,37.0,1080.0,135.0,366.0,142.0,11.6677,500001.0,NEAR OCEAN +-118.32,33.74,24.0,6097.0,794.0,2248.0,806.0,10.1357,500001.0,NEAR OCEAN +-118.32,33.77,37.0,627.0,95.0,259.0,106.0,6.887,500001.0,<1H OCEAN +-118.34,34.09,37.0,1442.0,501.0,998.0,503.0,2.4432,200000.0,<1H OCEAN +-118.35,34.09,35.0,1989.0,634.0,1108.0,593.0,1.6081,288900.0,<1H OCEAN +-118.35,34.09,35.0,2705.0,785.0,1526.0,793.0,3.0349,266700.0,<1H OCEAN +-118.35,34.09,35.0,2234.0,689.0,1334.0,662.0,2.5444,236100.0,<1H OCEAN +-118.36,34.09,34.0,2832.0,883.0,1594.0,843.0,1.7558,312500.0,<1H OCEAN +-118.36,34.09,36.0,1616.0,465.0,773.0,429.0,2.6,313600.0,<1H OCEAN +-118.36,34.09,33.0,3463.0,1170.0,1845.0,1134.0,2.0205,243800.0,<1H OCEAN +-118.36,34.09,30.0,2353.0,728.0,1365.0,718.0,2.0702,283300.0,<1H OCEAN +-118.36,34.1,37.0,7097.0,2010.0,2913.0,1939.0,2.875,300000.0,<1H OCEAN +-118.36,34.09,36.0,1390.0,458.0,874.0,468.0,2.5812,200000.0,<1H OCEAN +-118.36,34.09,28.0,1111.0,300.0,526.0,294.0,2.6136,383300.0,<1H OCEAN +-118.37,34.09,38.0,1349.0,344.0,547.0,309.0,3.2159,383300.0,<1H OCEAN +-118.37,34.09,38.0,4408.0,1295.0,1690.0,1229.0,3.0156,300000.0,<1H OCEAN +-118.37,34.09,33.0,3180.0,865.0,1347.0,841.0,4.0651,500001.0,<1H OCEAN +-118.37,34.09,31.0,6348.0,1827.0,2559.0,1755.0,3.2818,225000.0,<1H OCEAN +-118.37,34.09,22.0,4247.0,1253.0,1766.0,1170.0,3.1517,341700.0,<1H OCEAN +-118.37,34.09,24.0,630.0,172.0,257.0,147.0,5.5224,400000.0,<1H OCEAN +-118.37,34.08,28.0,4376.0,1202.0,1847.0,1128.0,2.6713,312500.0,<1H OCEAN +-118.38,34.08,52.0,1479.0,360.0,652.0,346.0,2.945,431400.0,<1H OCEAN +-118.38,34.08,30.0,4524.0,1312.0,1910.0,1243.0,2.8889,335300.0,<1H OCEAN +-118.39,34.08,52.0,1244.0,304.0,444.0,282.0,3.5114,430800.0,<1H OCEAN +-118.38,34.08,48.0,1226.0,288.0,370.0,264.0,3.9375,450000.0,<1H OCEAN +-118.38,34.09,24.0,8264.0,2437.0,3148.0,2274.0,3.5659,281300.0,<1H OCEAN +-118.38,34.09,28.0,4001.0,1352.0,1799.0,1220.0,2.5784,272900.0,<1H OCEAN +-118.39,34.09,27.0,4312.0,1214.0,1634.0,1097.0,3.6207,362500.0,<1H OCEAN +-118.39,34.09,28.0,2347.0,608.0,785.0,548.0,4.4167,425000.0,<1H OCEAN +-118.39,34.08,28.0,833.0,230.0,349.0,210.0,3.067,375000.0,<1H OCEAN +-118.4,34.1,27.0,3979.0,510.0,1351.0,520.0,15.0001,500001.0,<1H OCEAN +-118.4,34.09,45.0,2686.0,283.0,857.0,259.0,15.0001,500001.0,<1H OCEAN +-118.39,34.08,52.0,3759.0,464.0,1407.0,422.0,15.0001,500001.0,<1H OCEAN +-118.4,34.08,52.0,3815.0,439.0,1266.0,413.0,15.0001,500001.0,<1H OCEAN +-118.41,34.09,37.0,2716.0,302.0,809.0,291.0,15.0001,500001.0,<1H OCEAN +-118.42,34.09,40.0,3552.0,392.0,1024.0,370.0,15.0001,500001.0,<1H OCEAN +-118.42,34.08,48.0,2413.0,261.0,770.0,248.0,15.0001,500001.0,<1H OCEAN +-118.41,34.07,52.0,3562.0,394.0,1163.0,361.0,15.0001,500001.0,<1H OCEAN +-118.41,34.07,52.0,1202.0,142.0,408.0,138.0,15.0001,500001.0,<1H OCEAN +-118.38,34.07,48.0,2799.0,596.0,1235.0,561.0,4.4896,500001.0,<1H OCEAN +-118.39,34.07,33.0,5301.0,1281.0,2243.0,1159.0,4.2386,500001.0,<1H OCEAN +-118.39,34.07,45.0,3143.0,553.0,1153.0,564.0,5.7762,500001.0,<1H OCEAN +-118.39,34.08,27.0,6605.0,1710.0,2665.0,1520.0,3.8088,500001.0,<1H OCEAN +-118.4,34.07,22.0,2170.0,593.0,850.0,520.0,2.9107,500001.0,<1H OCEAN +-118.37,34.06,36.0,1661.0,395.0,690.0,365.0,3.3438,500001.0,<1H OCEAN +-118.38,34.06,50.0,1509.0,291.0,690.0,259.0,6.2344,500001.0,<1H OCEAN +-118.39,34.06,52.0,1213.0,194.0,503.0,194.0,8.0095,500001.0,<1H OCEAN +-118.38,34.06,52.0,1311.0,217.0,578.0,205.0,7.6771,500001.0,<1H OCEAN +-118.39,34.06,43.0,1879.0,397.0,873.0,382.0,3.8158,500001.0,<1H OCEAN +-118.39,34.06,37.0,2975.0,705.0,1291.0,654.0,5.3316,500001.0,<1H OCEAN +-118.39,34.06,39.0,3299.0,831.0,1649.0,759.0,3.3295,500001.0,<1H OCEAN +-118.4,34.06,37.0,3781.0,873.0,1725.0,838.0,4.1455,500001.0,<1H OCEAN +-118.4,34.06,47.0,3652.0,967.0,1438.0,887.0,3.6964,500001.0,<1H OCEAN +-118.4,34.06,52.0,1871.0,326.0,646.0,284.0,8.2961,500001.0,<1H OCEAN +-118.4,34.06,52.0,2501.0,362.0,748.0,349.0,6.6343,500001.0,<1H OCEAN +-118.41,34.06,43.0,2665.0,556.0,1015.0,506.0,4.1411,500001.0,<1H OCEAN +-118.41,34.06,43.0,4994.0,1057.0,1830.0,969.0,5.5321,500001.0,<1H OCEAN +-118.41,34.07,47.0,2979.0,626.0,1076.0,571.0,3.9904,500001.0,<1H OCEAN +-118.45,34.06,52.0,204.0,34.0,1154.0,28.0,9.337,500001.0,<1H OCEAN +-118.49,34.05,52.0,2416.0,291.0,810.0,270.0,13.8556,500001.0,<1H OCEAN +-118.49,34.04,50.0,2597.0,340.0,964.0,339.0,13.3036,500001.0,<1H OCEAN +-118.49,34.04,48.0,2381.0,345.0,859.0,306.0,8.0257,500001.0,<1H OCEAN +-118.5,34.04,52.0,3000.0,374.0,1143.0,375.0,15.0001,500001.0,<1H OCEAN +-118.5,34.04,52.0,2233.0,317.0,769.0,277.0,8.3839,500001.0,<1H OCEAN +-118.49,34.04,31.0,4066.0,951.0,1532.0,868.0,4.8125,500001.0,<1H OCEAN +-118.49,34.03,30.0,4061.0,927.0,1487.0,865.0,4.1827,435100.0,<1H OCEAN +-118.51,34.04,40.0,1382.0,167.0,483.0,178.0,11.7045,500001.0,<1H OCEAN +-118.5,34.03,52.0,1506.0,208.0,547.0,186.0,7.8705,500001.0,<1H OCEAN +-118.5,34.03,52.0,1711.0,245.0,671.0,242.0,7.7572,500001.0,<1H OCEAN +-118.5,34.03,44.0,2146.0,394.0,851.0,355.0,6.48,500001.0,<1H OCEAN +-118.51,34.03,37.0,4072.0,905.0,1468.0,923.0,3.8571,500001.0,<1H OCEAN +-118.52,34.02,24.0,7418.0,1755.0,2713.0,1577.0,5.0867,500001.0,<1H OCEAN +-118.49,34.03,31.0,4949.0,1293.0,1985.0,1244.0,4.252,436700.0,<1H OCEAN +-118.5,34.03,32.0,6365.0,1784.0,2767.0,1698.0,3.6451,383300.0,<1H OCEAN +-118.5,34.02,28.0,5109.0,1482.0,2313.0,1451.0,3.3266,483300.0,<1H OCEAN +-118.5,34.02,24.0,2924.0,1013.0,1492.0,943.0,2.775,291700.0,<1H OCEAN +-118.5,34.02,35.0,2914.0,934.0,1334.0,870.0,2.9934,350000.0,<1H OCEAN +-118.52,34.01,25.0,2757.0,738.0,1014.0,633.0,3.1433,500001.0,<1H OCEAN +-118.49,34.03,32.0,3851.0,900.0,1456.0,836.0,4.5208,442100.0,<1H OCEAN +-118.49,34.03,31.0,3155.0,808.0,1208.0,745.0,3.6769,450000.0,<1H OCEAN +-118.49,34.02,27.0,4725.0,1185.0,1945.0,1177.0,4.1365,470800.0,<1H OCEAN +-118.48,34.03,32.0,1793.0,476.0,1143.0,448.0,2.8981,353600.0,<1H OCEAN +-118.49,34.02,28.0,2545.0,752.0,1548.0,679.0,2.9125,475000.0,<1H OCEAN +-118.49,34.02,29.0,2709.0,799.0,1238.0,793.0,3.1563,330000.0,<1H OCEAN +-118.48,34.04,47.0,1956.0,277.0,724.0,277.0,8.9616,500001.0,<1H OCEAN +-118.48,34.04,49.0,3780.0,741.0,1435.0,690.0,4.3158,500001.0,<1H OCEAN +-118.48,34.04,40.0,1395.0,285.0,610.0,262.0,3.9659,500001.0,<1H OCEAN +-118.48,34.04,36.0,2539.0,535.0,979.0,500.0,3.6667,500001.0,<1H OCEAN +-118.47,34.04,32.0,2909.0,748.0,1310.0,706.0,4.516,350000.0,<1H OCEAN +-118.47,34.03,32.0,3024.0,784.0,1323.0,740.0,3.3889,347900.0,<1H OCEAN +-118.48,34.03,39.0,1530.0,401.0,1074.0,375.0,3.5076,381800.0,<1H OCEAN +-118.47,34.03,29.0,3287.0,882.0,1523.0,823.0,3.7381,290600.0,<1H OCEAN +-118.47,34.03,31.0,2642.0,681.0,1303.0,625.0,3.5987,340500.0,<1H OCEAN +-118.48,34.03,19.0,902.0,284.0,414.0,272.0,1.3333,310000.0,<1H OCEAN +-118.48,34.02,22.0,1249.0,483.0,1106.0,481.0,2.5261,375000.0,<1H OCEAN +-118.48,34.02,29.0,1585.0,542.0,1019.0,487.0,2.7072,375000.0,<1H OCEAN +-118.49,34.02,30.0,2075.0,687.0,1026.0,592.0,3.1635,366700.0,<1H OCEAN +-118.46,34.03,27.0,1965.0,631.0,1042.0,596.0,2.75,327300.0,<1H OCEAN +-118.46,34.03,39.0,1244.0,283.0,886.0,284.0,3.125,325000.0,<1H OCEAN +-118.46,34.03,52.0,523.0,,317.0,130.0,2.2794,337500.0,<1H OCEAN +-118.46,34.02,29.0,2329.0,833.0,1953.0,800.0,2.6639,233300.0,<1H OCEAN +-118.47,34.02,38.0,2163.0,651.0,1759.0,584.0,2.3382,297500.0,<1H OCEAN +-118.48,34.02,11.0,72.0,16.0,150.0,20.0,2.625,250000.0,<1H OCEAN +-118.47,34.02,35.0,3057.0,774.0,2223.0,732.0,2.0745,332500.0,<1H OCEAN +-118.48,34.02,30.0,2027.0,609.0,1425.0,562.0,2.2917,330800.0,<1H OCEAN +-118.48,34.02,25.0,1583.0,460.0,983.0,422.0,2.7019,293800.0,<1H OCEAN +-118.49,34.02,28.0,1394.0,582.0,716.0,543.0,1.5132,450000.0,<1H OCEAN +-118.49,34.01,28.0,651.0,252.0,333.0,174.0,1.9722,500001.0,<1H OCEAN +-118.51,34.0,52.0,1241.0,502.0,679.0,459.0,2.3098,500001.0,<1H OCEAN +-118.48,34.01,31.0,2851.0,804.0,1410.0,782.0,4.0893,381500.0,<1H OCEAN +-118.48,34.0,41.0,2584.0,743.0,1058.0,668.0,3.2061,370000.0,<1H OCEAN +-118.48,34.01,30.0,3078.0,954.0,1561.0,901.0,3.4852,425000.0,<1H OCEAN +-118.49,34.0,32.0,3407.0,1071.0,1463.0,986.0,3.0369,500001.0,<1H OCEAN +-118.48,34.01,31.0,1829.0,458.0,719.0,392.0,4.4,353800.0,<1H OCEAN +-118.47,34.0,28.0,1259.0,302.0,668.0,280.0,4.2813,384400.0,<1H OCEAN +-118.47,34.0,42.0,1271.0,301.0,574.0,312.0,3.1304,340500.0,<1H OCEAN +-118.48,34.0,25.0,4149.0,1067.0,1749.0,1000.0,3.9722,450000.0,<1H OCEAN +-118.48,34.0,29.0,1727.0,479.0,741.0,431.0,3.6121,500000.0,<1H OCEAN +-118.48,34.0,52.0,1359.0,395.0,521.0,368.0,2.6736,500001.0,<1H OCEAN +-118.5,33.99,22.0,3484.0,975.0,1268.0,952.0,3.2609,500001.0,<1H OCEAN +-118.47,34.02,41.0,2136.0,549.0,986.0,557.0,2.7254,444400.0,<1H OCEAN +-118.47,34.01,44.0,2175.0,475.0,1019.0,448.0,4.793,470800.0,<1H OCEAN +-118.47,34.01,41.0,2704.0,557.0,1047.0,478.0,4.4211,462900.0,<1H OCEAN +-118.48,34.01,40.0,2198.0,611.0,1023.0,567.0,3.755,398300.0,<1H OCEAN +-118.47,34.01,41.0,752.0,201.0,482.0,207.0,2.5417,418200.0,<1H OCEAN +-118.46,34.01,48.0,1640.0,322.0,664.0,301.0,4.0,500001.0,<1H OCEAN +-118.46,34.01,46.0,1379.0,239.0,688.0,269.0,6.8901,500001.0,<1H OCEAN +-118.47,34.01,44.0,2017.0,343.0,958.0,382.0,6.1014,480100.0,<1H OCEAN +-118.47,34.01,43.0,1160.0,304.0,393.0,250.0,2.9167,461100.0,<1H OCEAN +-118.47,34.01,27.0,1782.0,471.0,837.0,422.0,3.7727,413000.0,<1H OCEAN +-118.45,34.02,41.0,2956.0,700.0,1212.0,645.0,3.4583,421900.0,<1H OCEAN +-118.45,34.02,45.0,1230.0,201.0,565.0,219.0,6.3521,493400.0,<1H OCEAN +-118.46,34.02,45.0,3803.0,970.0,1690.0,871.0,3.0476,456200.0,<1H OCEAN +-118.46,34.02,46.0,2571.0,502.0,1225.0,501.0,6.0436,473000.0,<1H OCEAN +-118.46,34.02,39.0,3599.0,776.0,1569.0,763.0,5.2571,405400.0,<1H OCEAN +-118.37,34.03,39.0,213.0,44.0,138.0,52.0,2.125,196400.0,<1H OCEAN +-118.38,34.03,44.0,1913.0,441.0,1295.0,432.0,3.9537,266400.0,<1H OCEAN +-118.38,34.02,45.0,2098.0,486.0,1343.0,481.0,3.9615,268600.0,<1H OCEAN +-118.39,34.02,38.0,2447.0,636.0,1312.0,574.0,3.5909,279400.0,<1H OCEAN +-118.39,34.02,45.0,1577.0,421.0,1042.0,375.0,3.4375,314500.0,<1H OCEAN +-118.38,34.01,18.0,9528.0,2075.0,3922.0,1920.0,4.7612,304100.0,<1H OCEAN +-118.39,34.01,25.0,1101.0,285.0,543.0,294.0,2.3571,340600.0,<1H OCEAN +-118.39,34.02,38.0,2521.0,647.0,1091.0,597.0,4.1296,322900.0,<1H OCEAN +-118.39,34.01,35.0,4424.0,918.0,2101.0,888.0,3.9688,355100.0,<1H OCEAN +-118.4,34.01,44.0,1494.0,262.0,618.0,266.0,5.4035,356300.0,<1H OCEAN +-118.4,34.02,40.0,593.0,137.0,371.0,132.0,4.6932,332800.0,<1H OCEAN +-118.39,34.0,40.0,1565.0,269.0,826.0,268.0,5.2035,485700.0,<1H OCEAN +-118.39,33.99,32.0,2612.0,418.0,1030.0,402.0,6.603,369200.0,<1H OCEAN +-118.39,33.99,43.0,612.0,135.0,402.0,142.0,5.1322,314900.0,<1H OCEAN +-118.39,34.0,35.0,1465.0,386.0,1104.0,345.0,4.056,339100.0,<1H OCEAN +-118.4,34.0,34.0,1816.0,335.0,872.0,339.0,4.85,329400.0,<1H OCEAN +-118.4,34.0,37.0,1534.0,258.0,751.0,259.0,5.444,336000.0,<1H OCEAN +-118.4,33.99,36.0,1280.0,240.0,704.0,217.0,5.9632,328100.0,<1H OCEAN +-118.4,33.99,36.0,1225.0,213.0,591.0,227.0,5.4663,326700.0,<1H OCEAN +-118.4,34.0,44.0,2122.0,385.0,1012.0,367.0,4.6687,344300.0,<1H OCEAN +-118.4,34.01,48.0,1427.0,253.0,693.0,268.0,5.7405,351600.0,<1H OCEAN +-118.41,34.01,44.0,2010.0,394.0,961.0,365.0,4.5982,333500.0,<1H OCEAN +-118.41,34.0,37.0,1426.0,259.0,689.0,261.0,5.5284,331000.0,<1H OCEAN +-118.41,34.01,26.0,2503.0,449.0,1218.0,426.0,5.3683,500001.0,<1H OCEAN +-118.41,34.01,43.0,2000.0,529.0,1290.0,514.0,4.7031,302500.0,<1H OCEAN +-118.41,34.01,33.0,3306.0,974.0,2475.0,924.0,2.8797,285300.0,<1H OCEAN +-118.42,34.01,42.0,1700.0,438.0,997.0,436.0,2.9213,305000.0,<1H OCEAN +-118.41,34.0,38.0,324.0,70.0,268.0,73.0,2.55,271400.0,<1H OCEAN +-118.42,34.0,45.0,1807.0,355.0,883.0,371.0,5.0357,329800.0,<1H OCEAN +-118.41,34.0,46.0,105.0,20.0,69.0,19.0,3.9643,275000.0,<1H OCEAN +-118.42,34.0,33.0,1139.0,299.0,734.0,257.0,3.2708,325000.0,<1H OCEAN +-118.43,34.0,37.0,1340.0,358.0,1008.0,340.0,3.7614,314300.0,<1H OCEAN +-118.43,33.99,45.0,2092.0,451.0,1190.0,429.0,3.8021,323000.0,<1H OCEAN +-118.44,33.99,44.0,305.0,72.0,156.0,70.0,5.9641,275000.0,<1H OCEAN +-118.44,33.98,21.0,18132.0,5419.0,7431.0,4930.0,5.3359,500001.0,<1H OCEAN +-118.38,33.99,21.0,11308.0,3039.0,5127.0,2839.0,4.6277,228300.0,<1H OCEAN +-118.37,33.99,32.0,4018.0,564.0,1400.0,568.0,8.6718,439100.0,<1H OCEAN +-118.36,33.99,35.0,3702.0,648.0,1449.0,614.0,5.3194,313700.0,<1H OCEAN +-118.37,33.99,36.0,3228.0,543.0,1305.0,520.0,5.1695,397000.0,<1H OCEAN +-118.38,33.98,25.0,7105.0,1012.0,2519.0,1004.0,6.8112,500001.0,<1H OCEAN +-118.35,34.0,30.0,1879.0,226.0,740.0,266.0,6.431,492500.0,<1H OCEAN +-118.35,34.0,46.0,3402.0,503.0,1389.0,504.0,5.3462,270400.0,<1H OCEAN +-118.35,33.99,48.0,2741.0,439.0,1115.0,459.0,5.0514,269100.0,<1H OCEAN +-118.36,33.99,43.0,2657.0,548.0,1145.0,524.0,4.1375,287100.0,<1H OCEAN +-118.36,33.99,45.0,2005.0,368.0,909.0,364.0,4.6406,268900.0,<1H OCEAN +-118.35,33.99,45.0,1764.0,401.0,679.0,334.0,3.2021,222100.0,<1H OCEAN +-118.34,34.0,44.0,3183.0,513.0,1183.0,473.0,5.0407,314900.0,<1H OCEAN +-118.34,34.0,49.0,2863.0,411.0,1108.0,406.0,5.8993,313300.0,<1H OCEAN +-118.33,34.0,52.0,1114.0,169.0,486.0,176.0,4.2917,247600.0,<1H OCEAN +-118.34,34.0,49.0,2465.0,372.0,1018.0,359.0,4.0,296800.0,<1H OCEAN +-118.34,33.99,47.0,1107.0,199.0,437.0,178.0,3.7344,179400.0,<1H OCEAN +-118.34,33.99,48.0,1172.0,205.0,497.0,190.0,3.825,183000.0,<1H OCEAN +-118.35,34.0,40.0,2894.0,395.0,1063.0,409.0,6.939,372000.0,<1H OCEAN +-118.6,34.13,20.0,14291.0,1934.0,5452.0,1875.0,9.1232,472000.0,<1H OCEAN +-118.58,34.12,42.0,718.0,140.0,324.0,131.0,6.4018,500001.0,<1H OCEAN +-118.59,34.11,35.0,2396.0,472.0,1054.0,457.0,6.4504,407000.0,<1H OCEAN +-118.6,34.09,43.0,2228.0,438.0,960.0,395.0,7.6091,438500.0,<1H OCEAN +-118.6,34.08,40.0,866.0,181.0,399.0,176.0,6.91,380000.0,<1H OCEAN +-118.6,34.07,16.0,319.0,59.0,149.0,64.0,4.625,433300.0,<1H OCEAN +-118.69,34.08,23.0,204.0,40.0,117.0,41.0,9.7646,500001.0,NEAR OCEAN +-118.66,34.1,12.0,2560.0,365.0,907.0,366.0,10.076,500001.0,NEAR OCEAN +-118.63,34.11,35.0,3795.0,690.0,1521.0,653.0,5.8735,448100.0,<1H OCEAN +-118.67,34.16,17.0,16544.0,2206.0,6214.0,2118.0,9.1228,500001.0,<1H OCEAN +-118.68,34.08,18.0,102.0,17.0,55.0,21.0,3.9934,500001.0,NEAR OCEAN +-118.68,34.13,9.0,11251.0,1594.0,3029.0,1227.0,6.7273,500001.0,<1H OCEAN +-118.76,34.13,10.0,4355.0,716.0,2030.0,674.0,6.5571,500001.0,NEAR OCEAN +-118.75,34.1,34.0,2255.0,402.0,857.0,317.0,4.5333,377300.0,NEAR OCEAN +-118.72,34.14,7.0,23866.0,4407.0,9873.0,4012.0,5.4032,318500.0,NEAR OCEAN +-118.78,34.16,9.0,30405.0,4093.0,12873.0,3931.0,8.0137,399200.0,NEAR OCEAN +-118.8,34.15,9.0,1143.0,179.0,647.0,180.0,6.8474,356700.0,NEAR OCEAN +-118.75,34.17,16.0,2950.0,387.0,1228.0,379.0,5.3749,346100.0,NEAR OCEAN +-118.84,34.11,12.0,7508.0,1058.0,2484.0,965.0,5.8788,500001.0,NEAR OCEAN +-118.82,34.14,22.0,11668.0,1730.0,4054.0,1671.0,6.9935,385500.0,NEAR OCEAN +-118.79,34.14,7.0,3003.0,504.0,1143.0,466.0,5.8548,500001.0,NEAR OCEAN +-118.74,34.05,19.0,3487.0,686.0,2782.0,584.0,7.9184,500001.0,NEAR OCEAN +-118.86,34.07,16.0,1409.0,244.0,970.0,172.0,8.0144,500001.0,NEAR OCEAN +-118.88,34.02,19.0,15990.0,2611.0,5175.0,2173.0,7.7848,500001.0,NEAR OCEAN +-118.85,34.04,21.0,3837.0,578.0,1509.0,509.0,8.4476,500001.0,NEAR OCEAN +-118.78,34.05,28.0,1343.0,215.0,487.0,199.0,6.83,500001.0,NEAR OCEAN +-118.58,34.06,25.0,4440.0,693.0,1560.0,636.0,8.8666,500001.0,<1H OCEAN +-118.6,34.02,36.0,2043.0,467.0,606.0,326.0,8.4331,500001.0,NEAR OCEAN +-118.62,34.06,25.0,3546.0,584.0,1530.0,601.0,7.4001,500001.0,NEAR OCEAN +-118.66,34.02,23.0,8798.0,1465.0,2750.0,1208.0,8.7364,500001.0,NEAR OCEAN +-117.76,34.71,15.0,2981.0,625.0,1694.0,540.0,2.9541,106700.0,INLAND +-117.84,34.63,5.0,6739.0,1251.0,4614.0,1266.0,4.002,115100.0,INLAND +-117.78,34.58,6.0,10263.0,1864.0,6163.0,1781.0,3.8803,120000.0,INLAND +-117.96,34.71,32.0,3511.0,646.0,1733.0,510.0,3.46,123900.0,INLAND +-118.09,34.74,34.0,1218.0,285.0,797.0,248.0,2.4348,104800.0,INLAND +-118.06,34.71,14.0,2606.0,514.0,1228.0,512.0,2.5764,150000.0,INLAND +-118.09,34.68,4.0,23386.0,4171.0,10493.0,3671.0,4.0211,144000.0,INLAND +-118.11,34.68,6.0,7430.0,1184.0,3489.0,1115.0,5.3267,140100.0,INLAND +-118.12,34.69,17.0,2479.0,390.0,1219.0,363.0,4.6417,125700.0,INLAND +-118.12,34.68,12.0,5319.0,875.0,2439.0,779.0,4.6629,131500.0,INLAND +-118.13,34.69,34.0,2156.0,397.0,1269.0,388.0,2.75,96800.0,INLAND +-118.13,34.68,28.0,718.0,124.0,347.0,121.0,4.025,102600.0,INLAND +-118.1,34.65,33.0,873.0,177.0,425.0,142.0,2.67,187500.0,INLAND +-118.09,34.71,5.0,5807.0,1182.0,2602.0,1007.0,2.4012,159400.0,INLAND +-118.1,34.7,5.0,10356.0,1647.0,4562.0,1427.0,4.9806,141100.0,INLAND +-118.09,34.7,6.0,4558.0,804.0,1543.0,563.0,2.8548,138500.0,INLAND +-118.1,34.71,16.0,3914.0,819.0,1524.0,795.0,2.415,137500.0,INLAND +-118.12,34.71,26.0,4230.0,823.0,2789.0,793.0,2.5179,104000.0,INLAND +-118.12,34.71,46.0,40.0,10.0,14.0,7.0,1.125,225000.0,INLAND +-118.12,34.7,7.0,4915.0,885.0,2833.0,874.0,4.3229,130000.0,INLAND +-118.13,34.7,34.0,1943.0,500.0,1078.0,446.0,1.1296,93800.0,INLAND +-118.13,34.69,32.0,3670.0,765.0,1986.0,673.0,3.682,108800.0,INLAND +-118.12,34.69,27.0,3019.0,501.0,1580.0,523.0,3.7804,113500.0,INLAND +-118.14,34.68,31.0,2666.0,662.0,1337.0,602.0,2.4432,101100.0,INLAND +-118.14,34.69,35.0,2118.0,374.0,1108.0,360.0,3.4327,100300.0,INLAND +-118.14,34.68,33.0,2815.0,485.0,1447.0,489.0,4.2679,119600.0,INLAND +-118.14,34.68,25.0,1703.0,342.0,775.0,309.0,4.5455,126500.0,INLAND +-118.16,34.68,17.0,2994.0,832.0,1571.0,695.0,2.5902,85400.0,INLAND +-118.15,34.69,32.0,1300.0,234.0,712.0,249.0,3.25,107500.0,INLAND +-118.16,34.68,9.0,4303.0,900.0,2240.0,861.0,3.7807,110900.0,INLAND +-118.15,34.67,5.0,12317.0,2953.0,6291.0,2654.0,3.5732,146900.0,INLAND +-118.14,34.65,20.0,1257.0,201.0,551.0,186.0,4.6591,247200.0,INLAND +-118.14,34.72,15.0,2181.0,361.0,1057.0,300.0,4.625,118100.0,INLAND +-118.16,34.71,27.0,6007.0,998.0,2680.0,882.0,4.1719,117200.0,INLAND +-118.15,34.71,36.0,1338.0,250.0,709.0,250.0,3.5625,101400.0,INLAND +-118.14,34.71,33.0,2347.0,461.0,1482.0,374.0,2.8194,93000.0,INLAND +-118.14,34.71,32.0,1164.0,248.0,588.0,270.0,1.1917,86900.0,INLAND +-118.15,34.71,35.0,1503.0,309.0,842.0,300.0,2.5278,97700.0,INLAND +-118.14,34.7,36.0,1205.0,317.0,678.0,290.0,2.0182,98400.0,INLAND +-118.14,34.7,12.0,1984.0,614.0,1071.0,574.0,1.2532,102100.0,INLAND +-118.15,34.7,36.0,2696.0,454.0,1192.0,452.0,3.9615,116300.0,INLAND +-118.16,34.7,33.0,2918.0,494.0,1365.0,478.0,4.8787,127700.0,INLAND +-118.16,34.69,35.0,3114.0,583.0,1974.0,545.0,3.9028,126800.0,INLAND +-118.14,34.69,34.0,1439.0,327.0,708.0,298.0,3.2699,100000.0,INLAND +-118.14,34.69,48.0,1379.0,327.0,696.0,304.0,2.1167,94900.0,INLAND +-118.28,34.76,19.0,3430.0,601.0,1817.0,571.0,4.7875,163600.0,INLAND +-118.19,34.77,16.0,2035.0,370.0,704.0,330.0,2.1979,146400.0,INLAND +-118.2,34.69,5.0,9076.0,1503.0,7694.0,1278.0,4.875,163400.0,INLAND +-118.17,34.69,12.0,4881.0,803.0,2188.0,724.0,4.1667,171900.0,INLAND +-118.17,34.68,13.0,5341.0,773.0,2288.0,724.0,6.6772,185600.0,INLAND +-118.19,34.67,8.0,11275.0,1822.0,5731.0,1692.0,5.0285,167900.0,INLAND +-118.17,34.67,5.0,8352.0,1555.0,3723.0,1389.0,4.5659,140300.0,INLAND +-118.19,34.65,33.0,1781.0,326.0,913.0,314.0,3.9963,126800.0,INLAND +-118.17,34.66,9.0,1561.0,253.0,731.0,233.0,5.7049,173200.0,INLAND +-118.22,34.67,28.0,2357.0,408.0,1162.0,384.0,4.3636,179700.0,INLAND +-118.23,34.66,25.0,2627.0,387.0,1059.0,338.0,3.6382,138200.0,INLAND +-118.22,34.66,17.0,3810.0,662.0,1867.0,586.0,4.9,152400.0,INLAND +-118.21,34.65,17.0,4001.0,814.0,2313.0,756.0,3.0441,140100.0,INLAND +-118.23,34.65,17.0,1827.0,348.0,766.0,335.0,3.5673,136300.0,INLAND +-118.27,34.68,19.0,552.0,129.0,314.0,106.0,3.2125,185400.0,INLAND +-118.29,34.65,18.0,6893.0,1372.0,2837.0,1221.0,3.3173,218400.0,INLAND +-118.32,34.62,31.0,1398.0,273.0,884.0,299.0,4.8409,264900.0,INLAND +-118.38,34.58,18.0,1859.0,375.0,913.0,372.0,4.3456,148900.0,INLAND +-118.61,34.73,25.0,3080.0,587.0,1558.0,510.0,5.0839,156700.0,INLAND +-118.4,34.7,10.0,4122.0,814.0,2164.0,710.0,4.2941,151600.0,INLAND +-117.92,34.63,34.0,81.0,26.0,53.0,14.0,1.4091,137500.0,INLAND +-117.92,34.59,7.0,681.0,125.0,485.0,104.0,2.7396,125600.0,INLAND +-117.93,34.57,5.0,5613.0,1060.0,3569.0,999.0,3.1946,132700.0,INLAND +-117.9,34.53,8.0,3484.0,647.0,2169.0,619.0,3.9766,135800.0,INLAND +-117.96,34.53,10.0,2907.0,559.0,1681.0,531.0,3.8594,141000.0,INLAND +-117.98,34.53,13.0,2815.0,535.0,1492.0,491.0,4.0945,135700.0,INLAND +-118.09,34.63,31.0,1537.0,416.0,1239.0,397.0,1.9722,99200.0,INLAND +-118.02,34.62,38.0,248.0,55.0,261.0,53.0,2.1413,96900.0,INLAND +-118.18,34.63,19.0,3562.0,606.0,1677.0,578.0,4.1573,228100.0,INLAND +-118.17,34.61,7.0,2465.0,336.0,978.0,332.0,7.1381,292200.0,INLAND +-118.16,34.6,2.0,11008.0,1549.0,4098.0,1367.0,6.4865,204400.0,INLAND +-118.12,34.6,33.0,2189.0,497.0,1459.0,443.0,2.3958,94500.0,INLAND +-118.15,34.59,33.0,2111.0,429.0,1067.0,397.0,3.7344,111400.0,INLAND +-118.16,34.6,5.0,7294.0,1139.0,3123.0,930.0,4.9904,154100.0,INLAND +-118.21,34.56,12.0,2472.0,408.0,1048.0,380.0,4.7097,262100.0,INLAND +-118.22,34.63,4.0,14348.0,2145.0,5839.0,1806.0,5.3799,222400.0,INLAND +-118.21,34.64,16.0,2573.0,427.0,1273.0,426.0,5.9508,181100.0,INLAND +-118.12,34.58,13.0,2614.0,650.0,1949.0,537.0,2.0547,102600.0,INLAND +-118.13,34.58,29.0,2370.0,475.0,1746.0,483.0,3.7464,113500.0,INLAND +-118.14,34.57,6.0,9882.0,1892.0,4892.0,1621.0,3.7636,167600.0,INLAND +-118.12,34.56,5.0,6446.0,1154.0,3427.0,1104.0,3.9936,148500.0,INLAND +-118.1,34.58,32.0,1489.0,306.0,774.0,267.0,3.275,103500.0,INLAND +-118.1,34.58,29.0,2843.0,603.0,1517.0,573.0,2.6658,106900.0,INLAND +-118.1,34.57,7.0,20377.0,4335.0,11973.0,3933.0,3.3086,138100.0,INLAND +-118.09,34.57,4.0,9761.0,1683.0,4970.0,1535.0,4.5266,142900.0,INLAND +-118.08,34.58,5.0,1113.0,186.0,631.0,168.0,4.1719,146600.0,INLAND +-118.07,34.58,34.0,3416.0,601.0,1929.0,567.0,4.0147,107400.0,INLAND +-118.06,34.58,36.0,1493.0,258.0,899.0,260.0,3.86,109300.0,INLAND +-118.08,34.58,12.0,3851.0,857.0,2169.0,811.0,3.0101,116300.0,INLAND +-118.07,34.56,5.0,10264.0,1821.0,5871.0,1790.0,4.2329,145500.0,INLAND +-118.08,34.56,14.0,5144.0,887.0,2846.0,824.0,4.5615,137200.0,INLAND +-118.03,34.58,4.0,9849.0,1780.0,4546.0,1598.0,4.0729,154300.0,INLAND +-118.02,34.57,4.0,10655.0,1706.0,5391.0,1529.0,5.083,151300.0,INLAND +-118.01,34.55,2.0,2701.0,530.0,1368.0,430.0,4.071,137400.0,INLAND +-118.08,34.55,5.0,16181.0,2971.0,8152.0,2651.0,4.5237,141800.0,INLAND +-118.07,34.51,14.0,2798.0,459.0,1236.0,404.0,4.8667,239900.0,INLAND +-118.37,34.43,11.0,17339.0,2866.0,8721.0,2803.0,5.9507,225200.0,INLAND +-118.4,34.41,22.0,4443.0,560.0,1573.0,496.0,10.0285,500001.0,<1H OCEAN +-118.35,34.52,14.0,3490.0,592.0,1710.0,580.0,5.9171,333300.0,INLAND +-118.22,34.52,7.0,4524.0,735.0,2298.0,717.0,6.5538,311600.0,INLAND +-118.26,34.5,6.0,5813.0,908.0,2275.0,790.0,4.7778,340400.0,INLAND +-118.27,34.46,10.0,2184.0,405.0,1119.0,370.0,4.7437,294000.0,INLAND +-118.13,34.44,10.0,2726.0,465.0,1773.0,459.0,4.8295,319100.0,INLAND +-117.89,34.49,12.0,3449.0,598.0,1502.0,540.0,3.7043,150800.0,INLAND +-117.96,34.48,32.0,1896.0,342.0,806.0,299.0,4.5769,159400.0,INLAND +-117.79,34.45,18.0,2986.0,597.0,1355.0,472.0,3.2765,165000.0,INLAND +-118.46,34.4,12.0,25957.0,4798.0,10475.0,4490.0,4.542,195300.0,<1H OCEAN +-118.5,34.45,25.0,1290.0,190.0,689.0,216.0,6.0097,220200.0,<1H OCEAN +-118.5,34.52,3.0,6577.0,1056.0,3032.0,1004.0,5.9263,251800.0,INLAND +-118.48,34.47,36.0,84.0,12.0,29.0,17.0,3.375,187500.0,<1H OCEAN +-118.5,34.46,17.0,10267.0,,4956.0,1483.0,5.5061,239400.0,<1H OCEAN +-118.52,34.44,26.0,934.0,148.0,519.0,162.0,5.3209,185000.0,<1H OCEAN +-118.53,34.44,19.0,3013.0,507.0,1356.0,484.0,5.1163,233200.0,<1H OCEAN +-118.53,34.45,26.0,828.0,149.0,508.0,158.0,5.2374,185500.0,<1H OCEAN +-118.53,34.44,19.0,1285.0,195.0,650.0,193.0,6.0398,217800.0,<1H OCEAN +-118.52,34.46,5.0,15341.0,2527.0,7270.0,2320.0,6.1281,236200.0,<1H OCEAN +-118.53,34.45,10.0,5509.0,969.0,3002.0,959.0,5.5981,220100.0,<1H OCEAN +-118.51,34.43,15.0,8510.0,1258.0,3733.0,1233.0,6.1082,253700.0,<1H OCEAN +-118.46,34.42,25.0,2988.0,525.0,1884.0,513.0,4.7007,169500.0,<1H OCEAN +-118.44,34.5,5.0,1514.0,220.0,1355.0,215.0,8.1344,359000.0,INLAND +-118.45,34.44,16.0,13406.0,2574.0,7030.0,2440.0,4.6861,187900.0,<1H OCEAN +-118.49,34.43,15.0,8244.0,1409.0,4453.0,1357.0,5.4829,199600.0,<1H OCEAN +-118.49,34.42,23.0,4166.0,756.0,2082.0,743.0,4.4107,213400.0,<1H OCEAN +-118.48,34.42,21.0,1375.0,259.0,728.0,258.0,5.0166,229000.0,<1H OCEAN +-118.47,34.42,17.0,913.0,228.0,530.0,201.0,3.038,238500.0,<1H OCEAN +-118.47,34.42,25.0,3223.0,524.0,1763.0,508.0,5.2887,183000.0,<1H OCEAN +-118.43,34.42,13.0,3600.0,580.0,1799.0,576.0,6.2971,218300.0,<1H OCEAN +-118.43,34.43,5.0,21113.0,4386.0,9842.0,3886.0,4.2037,194600.0,<1H OCEAN +-118.55,34.44,14.0,15348.0,2366.0,7087.0,2169.0,6.3277,237700.0,INLAND +-118.56,34.42,2.0,966.0,270.0,233.0,169.0,1.9667,450000.0,<1H OCEAN +-118.61,34.59,5.0,4028.0,896.0,2062.0,826.0,4.0579,167100.0,INLAND +-118.7,34.53,5.0,14275.0,2474.0,7158.0,2311.0,5.4284,236300.0,INLAND +-118.66,34.43,9.0,2356.0,469.0,1556.0,386.0,3.775,155000.0,INLAND +-118.59,34.47,5.0,538.0,98.0,8733.0,105.0,4.2391,154600.0,INLAND +-118.61,34.31,4.0,1949.0,458.0,868.0,398.0,5.0151,285200.0,<1H OCEAN +-118.52,34.39,21.0,5477.0,1275.0,3384.0,1222.0,3.6625,228100.0,<1H OCEAN +-118.53,34.38,18.0,2288.0,607.0,2305.0,597.0,3.227,136100.0,<1H OCEAN +-118.54,34.38,18.0,2096.0,309.0,1044.0,328.0,6.8299,262100.0,<1H OCEAN +-118.52,34.4,5.0,7748.0,1557.0,4768.0,1393.0,5.305,311200.0,<1H OCEAN +-118.53,34.37,8.0,3839.0,852.0,1342.0,593.0,3.9118,333700.0,<1H OCEAN +-118.54,34.37,27.0,2051.0,301.0,917.0,287.0,7.6059,323700.0,<1H OCEAN +-118.52,34.36,5.0,4222.0,712.0,2024.0,646.0,5.8703,500001.0,<1H OCEAN +-118.55,34.37,21.0,7010.0,1063.0,3331.0,1038.0,6.776,278100.0,<1H OCEAN +-118.56,34.37,23.0,3927.0,728.0,1984.0,707.0,4.8536,202600.0,<1H OCEAN +-118.55,34.41,8.0,21086.0,3945.0,9936.0,3790.0,5.8602,265100.0,<1H OCEAN +-118.55,34.38,24.0,6246.0,1028.0,2803.0,999.0,6.3002,282900.0,<1H OCEAN +-118.56,34.41,4.0,17313.0,3224.0,6902.0,2707.0,5.6798,320900.0,<1H OCEAN +-118.55,34.39,16.0,8726.0,1317.0,3789.0,1279.0,6.8419,323300.0,<1H OCEAN +-118.61,34.38,2.0,5989.0,883.0,1787.0,613.0,6.6916,329500.0,INLAND +-117.86,34.24,52.0,803.0,267.0,628.0,225.0,4.1932,14999.0,INLAND +-118.12,34.23,52.0,433.0,69.0,147.0,53.0,3.9583,162500.0,INLAND +-118.35,34.32,52.0,102.0,29.0,54.0,32.0,1.9875,191700.0,<1H OCEAN +-118.38,34.3,39.0,1622.0,355.0,903.0,314.0,4.1125,183000.0,<1H OCEAN +-118.29,34.36,34.0,503.0,99.0,275.0,68.0,4.5491,375000.0,INLAND +-119.53,37.34,26.0,4047.0,702.0,571.0,199.0,2.3482,179500.0,INLAND +-119.51,37.32,14.0,362.0,78.0,88.0,39.0,3.5893,214300.0,INLAND +-119.56,37.29,14.0,2391.0,451.0,798.0,308.0,3.0924,114600.0,INLAND +-119.45,37.21,17.0,3538.0,726.0,1603.0,629.0,2.9449,95600.0,INLAND +-119.65,37.09,17.0,1280.0,254.0,707.0,267.0,3.55,106300.0,INLAND +-119.59,37.39,19.0,3273.0,611.0,1164.0,481.0,3.5446,106500.0,INLAND +-119.66,37.39,10.0,2106.0,410.0,1003.0,397.0,2.7813,124100.0,INLAND +-119.68,37.35,13.0,2307.0,386.0,925.0,347.0,3.1326,119800.0,INLAND +-119.72,37.38,16.0,2131.0,424.0,989.0,369.0,2.6071,103700.0,INLAND +-119.65,37.32,11.0,2161.0,448.0,820.0,405.0,2.3565,122300.0,INLAND +-119.64,37.31,15.0,2654.0,530.0,1267.0,489.0,2.8393,104400.0,INLAND +-119.6,37.29,13.0,1722.0,325.0,712.0,269.0,2.625,137500.0,INLAND +-119.62,37.33,7.0,3389.0,621.0,1268.0,474.0,3.0224,147800.0,INLAND +-119.91,37.23,17.0,2171.0,389.0,1042.0,375.0,3.625,94400.0,INLAND +-119.85,37.1,8.0,828.0,168.0,413.0,146.0,3.375,80700.0,INLAND +-119.68,37.19,10.0,3113.0,589.0,1508.0,512.0,2.8167,96100.0,INLAND +-119.77,37.19,8.0,5212.0,872.0,2383.0,857.0,4.1099,113600.0,INLAND +-119.67,37.27,13.0,5087.0,981.0,2284.0,913.0,2.7413,123100.0,INLAND +-120.31,37.11,38.0,1696.0,301.0,985.0,278.0,2.4054,112500.0,INLAND +-120.35,37.04,37.0,1495.0,292.0,858.0,275.0,2.9306,46300.0,INLAND +-120.25,37.04,21.0,1724.0,317.0,1006.0,290.0,3.2868,91700.0,INLAND +-120.16,37.12,29.0,1995.0,392.0,1261.0,354.0,1.9073,79200.0,INLAND +-120.27,37.11,18.0,1277.0,234.0,674.0,238.0,2.6694,75900.0,INLAND +-120.25,37.11,20.0,2062.0,466.0,1285.0,456.0,1.5319,50500.0,INLAND +-120.26,37.11,33.0,1097.0,254.0,627.0,253.0,1.2794,50700.0,INLAND +-120.27,37.12,42.0,1142.0,236.0,597.0,210.0,1.7279,52300.0,INLAND +-120.27,37.12,36.0,1219.0,258.0,639.0,245.0,1.9464,57000.0,INLAND +-120.27,37.12,17.0,3328.0,628.0,1580.0,619.0,2.9861,81500.0,INLAND +-120.26,37.13,33.0,1239.0,250.0,648.0,227.0,2.0278,58800.0,INLAND +-120.43,36.99,16.0,1027.0,199.0,673.0,193.0,2.9688,63800.0,INLAND +-120.29,36.88,34.0,1391.0,297.0,943.0,281.0,2.4219,83900.0,INLAND +-120.06,36.95,24.0,646.0,134.0,454.0,149.0,2.125,61900.0,INLAND +-120.06,36.94,19.0,901.0,183.0,700.0,190.0,2.2375,64300.0,INLAND +-120.04,36.93,11.0,3606.0,699.0,2074.0,644.0,2.6941,63300.0,INLAND +-120.05,36.95,18.0,2287.0,534.0,1339.0,505.0,2.2527,65200.0,INLAND +-120.21,36.98,21.0,1667.0,303.0,861.0,276.0,2.6012,92200.0,INLAND +-120.16,36.96,18.0,508.0,104.0,393.0,114.0,3.0,156300.0,INLAND +-120.11,36.96,17.0,3344.0,570.0,1624.0,536.0,3.8952,95300.0,INLAND +-120.08,37.06,18.0,402.0,76.0,213.0,71.0,1.9063,95800.0,INLAND +-120.09,37.0,11.0,3761.0,675.0,2374.0,673.0,3.4598,74600.0,INLAND +-120.06,37.02,13.0,6301.0,1080.0,3840.0,1033.0,3.5258,84900.0,INLAND +-119.94,37.04,14.0,1636.0,253.0,766.0,225.0,3.125,88500.0,INLAND +-120.09,37.02,9.0,1608.0,297.0,1057.0,295.0,3.7143,81600.0,INLAND +-119.95,36.96,18.0,1996.0,379.0,1327.0,356.0,2.6087,96000.0,INLAND +-120.02,36.95,25.0,2115.0,482.0,1976.0,474.0,1.8431,53900.0,INLAND +-119.9,36.94,11.0,2513.0,408.0,1360.0,415.0,4.277,98500.0,INLAND +-119.85,36.97,13.0,2872.0,477.0,1607.0,481.0,4.475,102400.0,INLAND +-119.88,36.93,12.0,3174.0,520.0,1590.0,488.0,4.5347,101200.0,INLAND +-119.87,36.93,13.0,1429.0,209.0,702.0,205.0,4.3625,111800.0,INLAND +-120.07,36.98,12.0,1790.0,379.0,1399.0,397.0,2.5388,59600.0,INLAND +-120.06,36.98,12.0,2710.0,575.0,1724.0,516.0,1.4712,60400.0,INLAND +-120.05,36.98,16.0,3705.0,739.0,2463.0,697.0,2.5288,61800.0,INLAND +-120.05,36.97,20.0,2029.0,427.0,983.0,401.0,1.8444,47100.0,INLAND +-120.06,36.97,38.0,1542.0,364.0,1220.0,334.0,1.625,52800.0,INLAND +-120.07,36.97,28.0,1563.0,403.0,1564.0,408.0,1.5662,48000.0,INLAND +-120.07,36.96,34.0,1457.0,239.0,557.0,226.0,3.6181,96500.0,INLAND +-120.08,36.97,13.0,3356.0,589.0,1458.0,601.0,3.8257,94200.0,INLAND +-120.1,36.96,20.0,2100.0,317.0,910.0,274.0,4.8187,90900.0,INLAND +-120.09,36.95,16.0,3222.0,511.0,1425.0,503.0,4.1544,119400.0,INLAND +-120.08,36.96,36.0,2074.0,349.0,954.0,363.0,3.1136,73800.0,INLAND +-120.08,36.95,41.0,1164.0,211.0,476.0,171.0,2.4196,70700.0,INLAND +-120.07,36.97,27.0,968.0,240.0,587.0,231.0,1.6071,55000.0,INLAND +-120.06,36.97,35.0,1859.0,428.0,1208.0,399.0,1.4044,61700.0,INLAND +-120.05,36.96,37.0,1000.0,261.0,1092.0,233.0,1.4267,52300.0,INLAND +-120.05,36.95,31.0,696.0,254.0,913.0,248.0,1.4,52500.0,INLAND +-120.06,36.96,44.0,1288.0,295.0,723.0,287.0,1.6534,61400.0,INLAND +-120.07,36.96,42.0,963.0,216.0,471.0,211.0,2.2898,66100.0,INLAND +-120.07,36.96,32.0,1268.0,283.0,549.0,273.0,1.4511,65200.0,INLAND +-120.04,36.97,20.0,2129.0,526.0,1845.0,522.0,1.8973,51600.0,INLAND +-120.04,36.96,23.0,2126.0,506.0,2091.0,491.0,1.3713,51800.0,INLAND +-120.04,36.95,36.0,1528.0,347.0,1334.0,304.0,1.3594,48300.0,INLAND +-119.98,36.9,26.0,1284.0,239.0,820.0,254.0,2.5833,62300.0,INLAND +-119.81,36.92,14.0,4795.0,710.0,2047.0,640.0,4.665,121300.0,INLAND +-119.98,36.86,31.0,2366.0,482.0,1933.0,433.0,3.0234,65000.0,INLAND +-120.13,36.87,32.0,2089.0,468.0,1765.0,427.0,2.234,61700.0,INLAND +-122.49,38.1,43.0,1226.0,244.0,491.0,205.0,4.9286,307000.0,NEAR BAY +-122.54,38.14,16.0,4431.0,603.0,1659.0,630.0,7.5412,392100.0,NEAR BAY +-122.55,38.1,26.0,5188.0,892.0,2341.0,906.0,5.0029,255600.0,NEAR BAY +-122.62,38.15,14.0,2259.0,341.0,1127.0,346.0,6.4092,334900.0,<1H OCEAN +-122.59,38.13,20.0,1589.0,231.0,601.0,224.0,5.3755,290900.0,<1H OCEAN +-122.58,38.15,9.0,1302.0,177.0,682.0,190.0,7.5,423200.0,<1H OCEAN +-122.57,38.11,24.0,2863.0,734.0,1583.0,682.0,3.1981,215300.0,NEAR BAY +-122.57,38.11,32.0,3521.0,748.0,1706.0,723.0,3.4705,228600.0,NEAR BAY +-122.59,38.12,25.0,7784.0,1145.0,3445.0,1166.0,6.0132,287900.0,<1H OCEAN +-122.58,38.12,13.0,5027.0,871.0,1912.0,770.0,4.9286,309500.0,NEAR BAY +-122.6,38.11,19.0,1752.0,328.0,873.0,336.0,3.8068,201600.0,<1H OCEAN +-122.6,38.11,23.0,8642.0,1294.0,3594.0,1253.0,5.3962,301500.0,<1H OCEAN +-122.65,38.11,21.0,3891.0,616.0,1968.0,632.0,5.5524,279200.0,<1H OCEAN +-122.61,38.09,18.0,6205.0,821.0,2311.0,756.0,6.9081,368700.0,<1H OCEAN +-122.58,38.1,22.0,11872.0,2300.0,5600.0,2200.0,4.6463,276300.0,NEAR BAY +-122.58,38.08,27.0,10839.0,1637.0,4406.0,1623.0,5.615,285600.0,NEAR BAY +-122.55,38.07,5.0,1495.0,235.0,555.0,201.0,6.7232,345000.0,NEAR BAY +-122.56,38.09,17.0,9614.0,2123.0,4684.0,2060.0,4.1705,209800.0,NEAR BAY +-122.56,38.06,19.0,15622.0,2721.0,6109.0,2615.0,5.0965,295300.0,NEAR BAY +-122.55,38.07,38.0,3392.0,709.0,1894.0,713.0,3.0573,350800.0,NEAR BAY +-122.41,38.07,20.0,4536.0,708.0,1812.0,701.0,6.0433,435900.0,NEAR BAY +-122.51,38.06,24.0,9493.0,1935.0,5162.0,1880.0,3.0742,118800.0,NEAR BAY +-122.53,38.01,16.0,1495.0,292.0,472.0,284.0,3.4432,67500.0,NEAR BAY +-122.44,38.03,13.0,4284.0,1042.0,2146.0,937.0,4.1289,179200.0,NEAR BAY +-122.45,38.01,36.0,4501.0,832.0,2196.0,800.0,4.3182,252700.0,NEAR BAY +-122.53,38.01,27.0,3121.0,531.0,1318.0,489.0,5.4781,310900.0,NEAR BAY +-122.51,38.0,17.0,2449.0,536.0,1157.0,543.0,3.9519,274200.0,NEAR BAY +-122.49,38.0,26.0,48.0,8.0,19.0,8.0,7.7197,400000.0,NEAR BAY +-122.55,38.03,29.0,7174.0,1169.0,3063.0,1172.0,6.0902,293200.0,NEAR BAY +-122.57,38.03,24.0,2330.0,322.0,911.0,320.0,6.5253,387700.0,NEAR BAY +-122.56,38.03,34.0,1887.0,290.0,815.0,283.0,6.5249,324800.0,NEAR BAY +-122.59,38.04,25.0,3412.0,455.0,1238.0,406.0,8.3646,397300.0,NEAR BAY +-122.57,38.02,33.0,9531.0,1487.0,3798.0,1409.0,5.6512,314000.0,NEAR BAY +-122.56,38.01,21.0,2144.0,400.0,840.0,398.0,4.6,239500.0,NEAR BAY +-122.55,38.02,27.0,4985.0,711.0,1928.0,742.0,6.4978,361500.0,NEAR BAY +-122.55,38.01,27.0,3966.0,577.0,1657.0,611.0,6.3314,342200.0,NEAR BAY +-122.54,38.0,28.0,3416.0,826.0,1694.0,800.0,3.18,277000.0,NEAR BAY +-122.55,38.0,18.0,3119.0,803.0,1395.0,722.0,3.9265,301100.0,NEAR BAY +-122.54,37.99,32.0,2236.0,348.0,818.0,330.0,7.3521,444000.0,NEAR BAY +-122.52,37.98,31.0,6555.0,1571.0,2962.0,1464.0,2.8903,324200.0,NEAR BAY +-122.54,37.98,52.0,1758.0,316.0,607.0,264.0,5.5083,371900.0,NEAR BAY +-122.55,37.99,34.0,3306.0,555.0,1398.0,585.0,4.8993,319900.0,NEAR BAY +-122.53,37.98,32.0,2390.0,336.0,810.0,354.0,8.5759,500001.0,NEAR BAY +-122.55,37.98,31.0,3807.0,828.0,1581.0,795.0,3.293,337500.0,NEAR BAY +-122.51,37.99,32.0,4138.0,632.0,1541.0,626.0,5.5791,433300.0,NEAR BAY +-122.51,37.98,37.0,4801.0,699.0,1830.0,679.0,6.0762,487800.0,NEAR BAY +-122.51,37.97,37.0,4296.0,1089.0,2100.0,1025.0,3.2462,329400.0,NEAR BAY +-122.47,37.99,22.0,7274.0,1002.0,2468.0,957.0,7.494,439200.0,NEAR BAY +-122.46,37.98,10.0,1325.0,189.0,427.0,162.0,12.0933,500001.0,NEAR BAY +-122.49,37.99,27.0,5470.0,755.0,1916.0,764.0,6.994,420800.0,NEAR BAY +-122.49,37.98,34.0,1256.0,178.0,460.0,174.0,6.4271,451700.0,NEAR BAY +-122.53,37.97,52.0,205.0,119.0,228.0,132.0,1.9063,200000.0,NEAR BAY +-122.53,37.97,52.0,1560.0,451.0,700.0,419.0,2.5125,270800.0,NEAR BAY +-122.53,37.97,44.0,3595.0,953.0,1831.0,910.0,2.6036,287500.0,NEAR BAY +-122.54,37.97,39.0,4193.0,762.0,1833.0,737.0,5.6263,352100.0,NEAR BAY +-122.52,37.97,33.0,563.0,194.0,265.0,169.0,2.75,231300.0,NEAR BAY +-122.51,37.96,39.0,3302.0,684.0,1574.0,653.0,3.6863,263800.0,NEAR BAY +-122.52,37.96,35.0,2012.0,346.0,818.0,352.0,5.2818,331000.0,NEAR BAY +-122.53,37.97,37.0,1340.0,322.0,621.0,314.0,3.5588,268800.0,NEAR BAY +-122.52,37.95,37.0,350.0,57.0,179.0,69.0,6.2862,500001.0,NEAR BAY +-122.53,37.96,35.0,908.0,194.0,413.0,197.0,3.9917,290800.0,NEAR BAY +-122.47,37.95,16.0,3769.0,839.0,1986.0,815.0,3.9712,187500.0,NEAR BAY +-122.5,37.96,16.0,100.0,20.0,45.0,25.0,6.1359,212500.0,NEAR BAY +-122.5,37.97,25.0,6526.0,1902.0,5917.0,1812.0,2.7273,187500.0,NEAR BAY +-122.64,38.01,36.0,1336.0,258.0,678.0,249.0,5.5789,292000.0,NEAR OCEAN +-122.64,38.01,36.0,1199.0,232.0,551.0,229.0,3.7321,266700.0,NEAR OCEAN +-122.68,38.01,41.0,1865.0,392.0,825.0,369.0,4.2011,255400.0,NEAR OCEAN +-122.7,38.03,42.0,1410.0,308.0,624.0,292.0,4.1379,309100.0,NEAR OCEAN +-122.65,38.01,40.0,1428.0,280.0,708.0,255.0,5.0766,305400.0,NEAR OCEAN +-122.59,37.97,46.0,4036.0,856.0,1872.0,833.0,4.5625,275200.0,NEAR OCEAN +-122.61,37.99,40.0,7737.0,1488.0,3108.0,1349.0,4.4375,289600.0,NEAR OCEAN +-122.62,37.97,52.0,370.0,62.0,150.0,56.0,7.7006,316700.0,NEAR OCEAN +-122.59,37.99,36.0,4869.0,871.0,1899.0,827.0,4.1659,302000.0,NEAR BAY +-122.6,38.0,21.0,2198.0,462.0,1100.0,449.0,4.1098,246600.0,<1H OCEAN +-122.59,38.01,35.0,8814.0,1307.0,3450.0,1258.0,6.1724,414300.0,NEAR BAY +-122.57,37.99,45.0,2404.0,425.0,926.0,400.0,4.9674,320100.0,NEAR BAY +-122.57,37.99,38.0,5587.0,996.0,2466.0,1027.0,4.1711,336900.0,NEAR BAY +-122.57,37.98,49.0,2860.0,552.0,1178.0,522.0,4.625,355000.0,NEAR BAY +-122.58,37.98,52.0,3675.0,649.0,1553.0,639.0,4.6905,316300.0,NEAR BAY +-122.58,37.98,52.0,1180.0,216.0,467.0,197.0,4.9615,292200.0,NEAR BAY +-122.56,37.98,36.0,2649.0,542.0,1111.0,557.0,4.8056,345700.0,NEAR BAY +-122.56,37.97,52.0,1833.0,324.0,735.0,306.0,4.6944,398900.0,NEAR BAY +-122.57,37.97,47.0,5416.0,1115.0,2177.0,1027.0,3.5055,382100.0,NEAR BAY +-122.55,37.97,52.0,2232.0,291.0,731.0,253.0,7.1155,500001.0,NEAR BAY +-122.57,37.96,52.0,3458.0,468.0,1449.0,471.0,9.1834,500001.0,NEAR BAY +-122.56,37.95,34.0,2677.0,411.0,933.0,410.0,6.1444,500001.0,NEAR OCEAN +-122.56,37.94,36.0,2023.0,242.0,653.0,241.0,10.6272,500001.0,NEAR BAY +-122.64,37.96,29.0,377.0,58.0,151.0,67.0,9.5551,500001.0,NEAR OCEAN +-122.54,37.96,44.0,1552.0,204.0,596.0,208.0,10.129,500001.0,NEAR BAY +-122.54,37.96,33.0,2534.0,495.0,996.0,449.0,4.3083,500001.0,NEAR BAY +-122.54,37.95,38.0,2310.0,400.0,971.0,386.0,5.697,435700.0,NEAR BAY +-122.52,37.95,33.0,4448.0,631.0,1675.0,628.0,7.8904,468800.0,NEAR BAY +-122.53,37.95,22.0,7446.0,1979.0,2980.0,1888.0,3.5838,271300.0,NEAR BAY +-122.53,37.96,36.0,4385.0,620.0,1549.0,626.0,8.3935,470500.0,NEAR BAY +-122.53,37.93,42.0,2171.0,362.0,887.0,347.0,6.6125,393200.0,NEAR BAY +-122.54,37.93,43.0,2998.0,470.0,970.0,430.0,5.5385,431800.0,NEAR BAY +-122.54,37.94,39.0,3670.0,775.0,1519.0,788.0,4.4081,435200.0,NEAR BAY +-122.54,37.94,26.0,3990.0,804.0,1550.0,792.0,5.1834,405500.0,NEAR BAY +-122.52,37.94,18.0,1804.0,284.0,600.0,241.0,5.9582,500001.0,NEAR BAY +-122.53,37.94,18.0,878.0,255.0,384.0,247.0,4.7344,200000.0,NEAR BAY +-122.52,37.93,34.0,2782.0,502.0,1219.0,507.0,5.0779,333900.0,NEAR BAY +-122.51,37.92,32.0,2622.0,541.0,1022.0,464.0,3.7647,375000.0,NEAR BAY +-122.52,37.92,24.0,421.0,64.0,163.0,75.0,14.5833,500001.0,NEAR BAY +-122.53,37.92,42.0,1741.0,301.0,723.0,306.0,5.5379,410500.0,NEAR BAY +-122.53,37.93,37.0,1722.0,352.0,648.0,337.0,4.125,310300.0,NEAR BAY +-122.53,37.92,45.0,1530.0,324.0,608.0,328.0,3.875,390800.0,NEAR BAY +-122.52,37.92,47.0,793.0,163.0,334.0,151.0,5.8509,317800.0,NEAR BAY +-122.5,37.92,32.0,2639.0,415.0,1013.0,408.0,6.1632,349200.0,NEAR BAY +-122.5,37.92,30.0,2270.0,359.0,974.0,351.0,5.5926,300900.0,NEAR BAY +-122.49,37.92,26.0,2170.0,347.0,849.0,318.0,6.2953,386200.0,NEAR BAY +-122.51,37.91,2.0,647.0,136.0,203.0,118.0,6.641,310000.0,NEAR BAY +-122.48,37.93,16.0,2947.0,802.0,1385.0,743.0,3.6731,318000.0,NEAR BAY +-122.46,37.88,35.0,2492.0,409.0,812.0,373.0,8.8386,500001.0,NEAR BAY +-122.47,37.87,36.0,4471.0,618.0,1315.0,582.0,11.5706,500001.0,NEAR BAY +-122.45,37.91,27.0,2682.0,382.0,935.0,369.0,10.0791,500001.0,NEAR BAY +-122.5,37.91,31.0,7001.0,1282.0,2755.0,1267.0,5.4851,441100.0,NEAR BAY +-122.49,37.89,23.0,1650.0,403.0,541.0,336.0,6.0238,500001.0,NEAR BAY +-122.47,37.89,23.0,10774.0,1736.0,3895.0,1683.0,7.2905,500001.0,NEAR BAY +-122.45,37.9,30.0,3763.0,717.0,1292.0,632.0,8.4888,500001.0,NEAR BAY +-122.5,37.88,28.0,5448.0,1089.0,2100.0,1023.0,4.7475,474600.0,NEAR BAY +-122.51,37.89,27.0,2674.0,565.0,1233.0,547.0,3.4485,458300.0,NEAR BAY +-122.53,37.91,37.0,2524.0,398.0,999.0,417.0,7.9892,500001.0,NEAR BAY +-122.53,37.9,44.0,2846.0,551.0,1232.0,537.0,3.8839,327200.0,NEAR BAY +-122.54,37.9,48.0,2491.0,460.0,937.0,455.0,4.4375,370000.0,NEAR BAY +-122.54,37.91,48.0,2924.0,489.0,1159.0,505.0,5.6302,489000.0,NEAR BAY +-122.55,37.92,52.0,2303.0,350.0,859.0,359.0,6.1085,500001.0,NEAR BAY +-122.52,37.91,30.0,4174.0,739.0,1818.0,705.0,5.5951,402900.0,NEAR BAY +-122.52,37.89,17.0,4363.0,1041.0,1640.0,989.0,3.9531,417600.0,NEAR BAY +-122.52,37.9,16.0,1704.0,402.0,689.0,348.0,4.4239,267100.0,NEAR BAY +-122.54,37.9,41.0,3170.0,622.0,1091.0,528.0,3.7813,389200.0,NEAR BAY +-122.55,37.9,34.0,1431.0,224.0,503.0,220.0,7.9606,453400.0,NEAR BAY +-122.56,37.9,48.0,1550.0,253.0,641.0,276.0,8.634,463500.0,NEAR BAY +-122.56,37.91,52.0,1972.0,327.0,755.0,345.0,7.1924,500001.0,NEAR BAY +-122.56,37.92,37.0,1926.0,290.0,721.0,298.0,8.9248,500001.0,NEAR BAY +-122.55,37.91,48.0,1283.0,278.0,567.0,255.0,3.2794,460000.0,NEAR BAY +-122.53,37.88,25.0,4921.0,866.0,1913.0,834.0,6.8742,413100.0,NEAR BAY +-122.54,37.88,30.0,4382.0,732.0,1775.0,745.0,6.7809,414400.0,NEAR BAY +-122.53,37.87,20.0,1814.0,282.0,658.0,253.0,7.9977,400000.0,NEAR BAY +-122.53,37.88,36.0,2688.0,485.0,1064.0,449.0,4.4583,308600.0,NEAR BAY +-122.56,37.9,36.0,1760.0,283.0,562.0,246.0,6.7546,402400.0,NEAR BAY +-122.54,37.89,33.0,4971.0,836.0,1907.0,795.0,6.1275,424400.0,NEAR BAY +-122.53,37.89,35.0,4127.0,689.0,1596.0,707.0,5.9073,400400.0,NEAR BAY +-122.56,37.9,24.0,221.0,41.0,75.0,38.0,5.1292,362500.0,NEAR BAY +-122.51,37.87,21.0,3904.0,980.0,1949.0,919.0,2.862,258400.0,NEAR BAY +-122.47,37.85,19.0,1926.0,593.0,881.0,546.0,2.9145,140400.0,NEAR BAY +-122.5,37.87,17.0,4333.0,947.0,1650.0,919.0,6.3066,346100.0,NEAR BAY +-122.49,37.86,35.0,2729.0,538.0,969.0,528.0,6.7669,500001.0,NEAR BAY +-122.49,37.86,52.0,2175.0,510.0,809.0,503.0,4.5398,442000.0,NEAR BAY +-122.48,37.86,52.0,3914.0,752.0,1177.0,670.0,6.2113,500001.0,NEAR BAY +-122.48,37.85,42.0,6297.0,1307.0,2096.0,1205.0,6.4752,500001.0,NEAR BAY +-122.49,37.85,38.0,240.0,29.0,63.0,34.0,12.2547,500001.0,NEAR BAY +-122.52,37.88,52.0,176.0,50.0,88.0,46.0,3.8068,275000.0,NEAR BAY +-122.62,37.85,30.0,833.0,164.0,358.0,143.0,6.8198,493800.0,NEAR OCEAN +-122.53,37.86,38.0,1183.0,196.0,628.0,205.0,3.75,478600.0,NEAR BAY +-122.66,37.93,42.0,1505.0,324.0,553.0,277.0,4.1792,350000.0,NEAR OCEAN +-122.71,37.88,21.0,2845.0,552.0,599.0,250.0,4.3125,495800.0,NEAR OCEAN +-122.69,37.91,43.0,1730.0,326.0,629.0,279.0,4.3194,238700.0,NEAR OCEAN +-122.71,37.9,23.0,1250.0,257.0,437.0,188.0,3.115,242600.0,NEAR OCEAN +-122.86,38.1,44.0,2602.0,509.0,691.0,343.0,4.3125,261500.0,NEAR OCEAN +-122.84,38.07,31.0,1858.0,367.0,701.0,297.0,3.8269,270700.0,NEAR OCEAN +-122.93,38.02,28.0,1284.0,265.0,628.0,219.0,3.5469,200000.0,NEAR OCEAN +-122.68,38.07,26.0,1445.0,244.0,510.0,207.0,5.6305,430000.0,NEAR OCEAN +-122.9,38.28,52.0,1275.0,218.0,627.0,185.0,2.3482,163500.0,NEAR OCEAN +-122.96,38.26,20.0,1982.0,358.0,308.0,132.0,3.1429,240900.0,NEAR OCEAN +-122.81,38.08,19.0,1615.0,366.0,815.0,337.0,3.4609,238800.0,NEAR OCEAN +-122.8,38.18,36.0,2378.0,476.0,957.0,362.0,3.625,253100.0,NEAR OCEAN +-120.19,37.53,25.0,1470.0,341.0,706.0,283.0,1.7614,71300.0,INLAND +-120.02,37.57,17.0,2116.0,425.0,909.0,319.0,2.7188,113100.0,INLAND +-119.99,37.51,14.0,2878.0,617.0,1011.0,509.0,1.398,103800.0,INLAND +-119.95,37.47,32.0,1312.0,315.0,600.0,265.0,1.5,91500.0,INLAND +-119.98,37.43,12.0,2776.0,592.0,1236.0,489.0,2.5551,105000.0,INLAND +-120.07,37.34,16.0,1667.0,372.0,762.0,283.0,1.75,87500.0,INLAND +-120.31,37.64,11.0,2403.0,497.0,890.0,344.0,3.0,120800.0,INLAND +-120.15,37.69,13.0,866.0,252.0,369.0,165.0,2.875,70200.0,INLAND +-120.02,37.72,17.0,2806.0,600.0,990.0,410.0,2.3818,88100.0,INLAND +-119.81,37.67,24.0,172.0,42.0,79.0,30.0,3.8333,93800.0,INLAND +-119.82,37.57,13.0,1713.0,340.0,643.0,241.0,2.662,92400.0,INLAND +-119.9,37.49,13.0,2230.0,443.0,920.0,361.0,3.0,112000.0,INLAND +-119.84,37.48,17.0,2582.0,553.0,1087.0,423.0,2.5,104200.0,INLAND +-119.8,37.5,15.0,989.0,184.0,406.0,151.0,3.1771,121900.0,INLAND +-119.72,37.46,13.0,1999.0,375.0,750.0,308.0,2.875,96000.0,INLAND +-119.85,37.39,14.0,2744.0,555.0,1153.0,474.0,2.753,111100.0,INLAND +-119.55,37.75,30.0,2165.0,536.0,1500.0,414.0,3.5391,55900.0,INLAND +-119.64,37.61,30.0,2857.0,661.0,291.0,135.0,2.6838,164600.0,INLAND +-123.15,39.74,23.0,608.0,143.0,281.0,108.0,2.9306,70000.0,INLAND +-123.24,39.81,25.0,1435.0,304.0,746.0,259.0,1.7788,57900.0,INLAND +-123.23,39.77,25.0,2075.0,435.0,991.0,377.0,1.2281,60300.0,INLAND +-123.47,39.8,18.0,2130.0,545.0,863.0,346.0,2.3571,79200.0,INLAND +-123.71,39.88,42.0,1518.0,383.0,656.0,303.0,1.4952,69800.0,NEAR OCEAN +-123.84,39.83,19.0,1461.0,340.0,515.0,227.0,1.5278,145800.0,NEAR OCEAN +-123.58,39.66,15.0,1839.0,489.0,887.0,332.0,2.2429,100000.0,<1H OCEAN +-123.5,39.67,22.0,2124.0,450.0,1122.0,446.0,2.1793,71500.0,INLAND +-123.64,39.45,21.0,3359.0,677.0,1908.0,642.0,3.0433,140700.0,<1H OCEAN +-123.79,39.5,24.0,1421.0,291.0,588.0,274.0,2.325,157300.0,<1H OCEAN +-123.8,39.47,28.0,2492.0,507.0,1202.0,460.0,2.7857,150300.0,<1H OCEAN +-123.73,39.44,32.0,790.0,151.0,380.0,142.0,2.7,165000.0,<1H OCEAN +-123.84,39.46,47.0,1150.0,244.0,552.0,201.0,2.5192,110400.0,<1H OCEAN +-123.8,39.46,35.0,1718.0,345.0,698.0,299.0,2.9243,131600.0,<1H OCEAN +-123.8,39.44,52.0,1533.0,336.0,754.0,340.0,1.9213,95000.0,<1H OCEAN +-123.79,39.44,49.0,2290.0,482.0,1201.0,479.0,3.5,113300.0,<1H OCEAN +-123.8,39.44,33.0,2024.0,459.0,1019.0,422.0,1.9208,93600.0,<1H OCEAN +-123.79,39.44,36.0,1330.0,273.0,761.0,286.0,2.7813,105800.0,<1H OCEAN +-123.79,39.44,16.0,2017.0,423.0,1177.0,414.0,3.2171,116200.0,<1H OCEAN +-123.85,39.42,11.0,1804.0,506.0,895.0,451.0,1.7574,150000.0,<1H OCEAN +-123.34,39.5,15.0,2342.0,535.0,1064.0,433.0,1.8967,96600.0,INLAND +-123.4,39.46,10.0,4086.0,831.0,2111.0,758.0,3.2156,104400.0,<1H OCEAN +-123.32,39.42,22.0,2085.0,432.0,1133.0,402.0,2.3906,92600.0,<1H OCEAN +-123.38,39.37,18.0,3946.0,813.0,1899.0,730.0,2.6424,124600.0,<1H OCEAN +-123.35,39.42,18.0,1619.0,346.0,904.0,295.0,2.1625,77200.0,<1H OCEAN +-123.37,39.43,32.0,2780.0,470.0,1281.0,479.0,3.588,96000.0,<1H OCEAN +-123.36,39.41,46.0,1748.0,362.0,808.0,330.0,2.9183,76900.0,<1H OCEAN +-123.35,39.4,27.0,1321.0,338.0,779.0,327.0,1.85,71800.0,<1H OCEAN +-123.36,39.4,21.0,1081.0,254.0,715.0,275.0,1.5625,71500.0,<1H OCEAN +-123.34,39.39,18.0,2821.0,628.0,1636.0,615.0,2.3333,84000.0,<1H OCEAN +-123.1,39.36,19.0,1056.0,248.0,611.0,226.0,1.746,105000.0,INLAND +-123.23,39.33,20.0,804.0,121.0,448.0,140.0,3.9632,147100.0,<1H OCEAN +-123.15,39.31,19.0,1026.0,205.0,424.0,152.0,2.8833,154200.0,INLAND +-123.11,39.32,20.0,2745.0,504.0,1421.0,430.0,3.3431,137500.0,INLAND +-123.18,39.26,25.0,3066.0,570.0,1558.0,535.0,3.788,134200.0,<1H OCEAN +-123.22,39.28,16.0,5569.0,1106.0,3148.0,1088.0,3.1455,142900.0,<1H OCEAN +-123.36,39.25,17.0,1087.0,254.0,522.0,202.0,2.5875,144500.0,<1H OCEAN +-123.18,39.23,18.0,243.0,55.0,115.0,54.0,2.125,175000.0,<1H OCEAN +-123.21,39.2,17.0,3145.0,693.0,1560.0,647.0,2.2926,149300.0,<1H OCEAN +-123.19,39.21,22.0,1542.0,291.0,821.0,285.0,3.5917,118800.0,<1H OCEAN +-123.2,39.23,26.0,786.0,168.0,494.0,161.0,2.3583,105400.0,<1H OCEAN +-123.75,39.37,16.0,1377.0,296.0,830.0,279.0,3.25,151400.0,<1H OCEAN +-123.85,39.39,23.0,4671.0,912.0,2095.0,857.0,3.184,140500.0,<1H OCEAN +-123.81,39.34,17.0,1981.0,371.0,773.0,325.0,3.1563,277000.0,<1H OCEAN +-123.7,39.32,18.0,1652.0,352.0,711.0,292.0,3.1071,213200.0,<1H OCEAN +-123.81,39.31,23.0,2754.0,577.0,887.0,432.0,3.3654,225000.0,NEAR OCEAN +-123.73,39.17,20.0,4620.0,1042.0,1745.0,794.0,2.375,158800.0,NEAR OCEAN +-123.53,38.93,38.0,1706.0,355.0,506.0,211.0,2.5625,165600.0,NEAR OCEAN +-123.69,38.9,17.0,2206.0,478.0,1140.0,428.0,2.1985,95300.0,NEAR OCEAN +-123.59,38.8,17.0,5202.0,1037.0,1742.0,803.0,3.1201,176100.0,NEAR OCEAN +-123.54,39.17,18.0,2251.0,510.0,1032.0,369.0,2.2946,101000.0,<1H OCEAN +-123.39,38.99,28.0,1416.0,294.0,812.0,258.0,3.4063,109400.0,<1H OCEAN +-123.36,39.01,35.0,1551.0,321.0,857.0,288.0,2.7232,115400.0,<1H OCEAN +-123.21,39.18,17.0,2772.0,576.0,1501.0,584.0,2.6275,142100.0,<1H OCEAN +-123.34,39.1,24.0,5372.0,1051.0,3002.0,992.0,3.0652,131100.0,<1H OCEAN +-123.21,39.07,17.0,1890.0,342.0,877.0,312.0,3.7833,159800.0,<1H OCEAN +-123.22,39.15,45.0,1348.0,265.0,639.0,270.0,3.3667,115200.0,<1H OCEAN +-123.22,39.16,32.0,1149.0,187.0,499.0,208.0,3.6587,154600.0,<1H OCEAN +-123.23,39.13,33.0,1176.0,211.0,529.0,217.0,3.8958,144000.0,<1H OCEAN +-123.22,39.15,36.0,1166.0,216.0,504.0,203.0,3.5938,122100.0,<1H OCEAN +-123.21,39.15,52.0,1370.0,258.0,617.0,228.0,2.55,112900.0,<1H OCEAN +-123.21,39.14,39.0,1419.0,262.0,661.0,278.0,3.0,114600.0,<1H OCEAN +-123.21,39.13,27.0,1531.0,266.0,822.0,234.0,4.0469,127400.0,<1H OCEAN +-123.2,39.16,14.0,1908.0,484.0,1195.0,467.0,1.7929,82300.0,<1H OCEAN +-123.22,39.16,29.0,6121.0,1222.0,3595.0,1189.0,2.631,109600.0,<1H OCEAN +-123.2,39.15,27.0,990.0,238.0,592.0,225.0,2.0074,96200.0,<1H OCEAN +-123.19,39.15,16.0,2577.0,495.0,1232.0,488.0,2.6012,125600.0,<1H OCEAN +-123.21,39.15,31.0,2685.0,675.0,1367.0,626.0,1.6571,108900.0,<1H OCEAN +-123.2,39.14,17.0,1620.0,396.0,878.0,399.0,1.8042,109200.0,<1H OCEAN +-123.2,39.13,26.0,1474.0,417.0,1065.0,401.0,1.375,84400.0,<1H OCEAN +-123.21,39.14,15.0,2235.0,545.0,1376.0,516.0,1.9032,100000.0,<1H OCEAN +-123.1,39.15,32.0,1143.0,208.0,454.0,188.0,3.8333,116100.0,<1H OCEAN +-123.17,39.18,14.0,2240.0,327.0,1030.0,308.0,5.9585,214900.0,<1H OCEAN +-123.17,39.15,30.0,1904.0,331.0,816.0,325.0,4.425,161900.0,<1H OCEAN +-123.16,39.13,33.0,1320.0,303.0,1048.0,303.0,1.7813,94700.0,<1H OCEAN +-123.16,39.1,31.0,418.0,82.0,327.0,81.0,2.775,120800.0,<1H OCEAN +-123.19,39.12,38.0,267.0,57.0,196.0,60.0,2.3125,70000.0,<1H OCEAN +-123.15,38.94,22.0,2163.0,436.0,1048.0,358.0,2.7171,95800.0,<1H OCEAN +-123.1,38.97,36.0,1211.0,247.0,697.0,251.0,2.5761,94900.0,<1H OCEAN +-120.46,37.51,22.0,2704.0,497.0,1432.0,399.0,2.9,83100.0,INLAND +-120.68,37.47,33.0,1028.0,226.0,658.0,197.0,2.3043,66300.0,INLAND +-120.75,37.44,27.0,2295.0,424.0,1252.0,350.0,3.6182,123200.0,INLAND +-120.76,37.44,18.0,2003.0,398.0,1333.0,411.0,2.7562,90500.0,INLAND +-120.77,37.42,27.0,949.0,224.0,888.0,241.0,2.3333,72800.0,INLAND +-120.79,37.43,17.0,2534.0,517.0,1764.0,502.0,2.8519,80700.0,INLAND +-120.79,37.41,35.0,2436.0,466.0,1730.0,469.0,2.2071,85900.0,INLAND +-120.71,37.39,11.0,1479.0,341.0,1476.0,327.0,3.2721,73800.0,INLAND +-120.71,37.39,40.0,680.0,160.0,785.0,175.0,2.6058,72700.0,INLAND +-120.69,37.4,46.0,860.0,130.0,496.0,147.0,3.5167,137500.0,INLAND +-120.74,37.33,30.0,2390.0,470.0,1409.0,428.0,2.1484,81300.0,INLAND +-120.75,37.37,32.0,1656.0,317.0,1037.0,286.0,2.4964,88800.0,INLAND +-120.73,37.38,37.0,653.0,176.0,827.0,176.0,1.9236,64400.0,INLAND +-120.72,37.38,22.0,1311.0,319.0,1455.0,340.0,2.2813,67300.0,INLAND +-120.73,37.38,23.0,1451.0,292.0,1052.0,265.0,2.8698,72900.0,INLAND +-120.71,37.38,14.0,1979.0,432.0,1756.0,382.0,2.6923,71400.0,INLAND +-120.84,37.4,7.0,2773.0,530.0,1374.0,505.0,2.6214,103800.0,INLAND +-120.86,37.4,17.0,3511.0,636.0,1904.0,617.0,3.1111,113900.0,INLAND +-120.84,37.43,32.0,2892.0,521.0,1580.0,484.0,3.7784,164500.0,INLAND +-120.94,37.4,32.0,1175.0,208.0,774.0,222.0,3.0,109400.0,INLAND +-120.88,37.37,24.0,1294.0,222.0,684.0,221.0,2.6908,103100.0,INLAND +-120.89,37.33,27.0,2692.0,481.0,1518.0,447.0,2.0417,94200.0,INLAND +-120.64,37.38,21.0,3157.0,637.0,2268.0,620.0,2.567,70400.0,INLAND +-120.64,37.38,19.0,2256.0,449.0,1469.0,435.0,2.5129,84600.0,INLAND +-120.65,37.33,25.0,1731.0,311.0,810.0,266.0,4.1058,107600.0,INLAND +-120.59,37.39,16.0,4717.0,1119.0,3589.0,1017.0,2.1061,72800.0,INLAND +-120.63,37.41,27.0,2083.0,444.0,1462.0,479.0,2.6439,69100.0,INLAND +-120.57,37.43,39.0,2235.0,412.0,1268.0,402.0,2.6758,74600.0,INLAND +-120.6,37.37,10.0,3075.0,498.0,1368.0,487.0,4.6667,130100.0,INLAND +-120.6,37.36,27.0,2521.0,484.0,1307.0,456.0,3.0911,86900.0,INLAND +-120.63,37.36,16.0,1605.0,282.0,866.0,284.0,4.0694,110200.0,INLAND +-120.62,37.35,18.0,874.0,203.0,572.0,190.0,1.6833,71000.0,INLAND +-120.62,37.36,15.0,3455.0,729.0,2014.0,659.0,3.2656,83500.0,INLAND +-120.62,37.37,8.0,2608.0,428.0,1530.0,435.0,3.968,102100.0,INLAND +-120.59,37.36,11.0,3946.0,978.0,2814.0,953.0,2.0179,87300.0,INLAND +-120.6,37.35,34.0,1722.0,316.0,904.0,315.0,2.4653,66100.0,INLAND +-120.61,37.35,34.0,1900.0,401.0,1009.0,385.0,2.2222,75000.0,INLAND +-120.62,37.35,20.0,1457.0,372.0,1000.0,346.0,1.4615,69200.0,INLAND +-120.61,37.32,18.0,5009.0,826.0,2497.0,805.0,4.25,146300.0,INLAND +-120.6,37.34,34.0,1830.0,431.0,1304.0,415.0,2.1182,68900.0,INLAND +-120.61,37.36,16.0,638.0,,380.0,132.0,1.9135,87500.0,INLAND +-120.57,37.35,18.0,704.0,176.0,520.0,154.0,3.003,101300.0,INLAND +-120.6,37.35,19.0,3874.0,676.0,2441.0,707.0,3.2955,88600.0,INLAND +-120.59,37.35,15.0,3249.0,613.0,1569.0,595.0,3.5393,88000.0,INLAND +-120.58,37.36,33.0,3564.0,716.0,2603.0,696.0,2.2179,67500.0,INLAND +-120.64,37.2,16.0,2236.0,438.0,1361.0,393.0,2.0066,125000.0,INLAND +-120.55,37.32,21.0,1410.0,229.0,590.0,205.0,3.3194,141400.0,INLAND +-120.49,37.26,28.0,2159.0,416.0,1283.0,378.0,1.8939,83000.0,INLAND +-120.5,37.37,18.0,8606.0,1678.0,5303.0,1644.0,2.4012,79700.0,INLAND +-120.41,37.16,21.0,1684.0,341.0,1052.0,312.0,2.0809,95800.0,INLAND +-120.51,37.32,13.0,2109.0,477.0,1108.0,466.0,2.3099,89600.0,INLAND +-120.49,37.32,10.0,1275.0,255.0,620.0,240.0,3.0263,118300.0,INLAND +-120.5,37.32,13.0,1936.0,384.0,1158.0,367.0,2.75,83200.0,INLAND +-120.49,37.32,13.0,3474.0,927.0,2149.0,821.0,1.9528,85300.0,INLAND +-120.48,37.32,13.0,3641.0,897.0,1737.0,788.0,2.1418,130600.0,INLAND +-120.47,37.32,15.0,3952.0,984.0,2024.0,1026.0,2.558,121600.0,INLAND +-120.5,37.34,16.0,1245.0,231.0,956.0,219.0,3.4559,108000.0,INLAND +-120.48,37.34,8.0,6146.0,1017.0,2821.0,987.0,4.67,127600.0,INLAND +-120.47,37.34,9.0,2934.0,511.0,1227.0,501.0,3.6742,117200.0,INLAND +-120.43,37.32,16.0,1170.0,178.0,566.0,181.0,5.2522,125300.0,INLAND +-120.45,37.32,21.0,1318.0,202.0,618.0,197.0,4.8214,117800.0,INLAND +-120.45,37.32,19.0,3136.0,466.0,1631.0,484.0,3.6471,101400.0,INLAND +-120.46,37.33,4.0,786.0,116.0,368.0,109.0,6.3215,138200.0,INLAND +-120.46,37.33,17.0,6111.0,1171.0,2950.0,1104.0,3.2852,98800.0,INLAND +-120.44,37.31,16.0,3369.0,532.0,1770.0,574.0,5.2662,126200.0,INLAND +-120.45,37.31,20.0,4379.0,753.0,2055.0,716.0,3.7652,133500.0,INLAND +-120.46,37.31,26.0,3170.0,572.0,1524.0,565.0,3.48,95300.0,INLAND +-120.48,37.31,42.0,2361.0,512.0,1684.0,511.0,2.355,75600.0,INLAND +-120.5,37.31,36.0,2162.0,433.0,1048.0,451.0,2.6797,81800.0,INLAND +-120.49,37.31,45.0,1834.0,421.0,1405.0,407.0,2.0521,72400.0,INLAND +-120.48,37.3,49.0,2919.0,719.0,1956.0,679.0,1.5427,88500.0,INLAND +-120.48,37.3,39.0,1015.0,356.0,875.0,313.0,1.5,67000.0,INLAND +-120.49,37.3,50.0,985.0,309.0,621.0,250.0,1.3125,60900.0,INLAND +-120.44,37.31,21.0,6911.0,1341.0,3967.0,1297.0,3.0515,95200.0,INLAND +-120.46,37.31,35.0,2042.0,378.0,953.0,356.0,2.7344,87800.0,INLAND +-120.47,37.3,40.0,3693.0,771.0,2102.0,742.0,2.1838,75000.0,INLAND +-120.46,37.3,36.0,3346.0,739.0,2151.0,713.0,2.3095,68300.0,INLAND +-120.51,37.29,20.0,4927.0,1042.0,4205.0,1009.0,1.7679,79800.0,INLAND +-120.5,37.3,29.0,1572.0,456.0,1697.0,429.0,1.76,63200.0,INLAND +-120.49,37.3,35.0,1313.0,324.0,1350.0,343.0,1.75,57600.0,INLAND +-120.49,37.29,17.0,2414.0,594.0,2487.0,582.0,1.0955,62700.0,INLAND +-120.47,37.29,16.0,749.0,222.0,1277.0,224.0,1.2054,60900.0,INLAND +-120.48,37.29,17.0,2266.0,693.0,3200.0,664.0,1.5635,60400.0,INLAND +-120.47,37.28,19.0,1548.0,319.0,1227.0,309.0,1.7756,73300.0,INLAND +-120.49,37.28,11.0,1721.0,381.0,1708.0,373.0,1.9535,57100.0,INLAND +-120.44,37.28,12.0,2855.0,598.0,1658.0,586.0,2.3929,81100.0,INLAND +-120.44,37.29,18.0,1260.0,268.0,576.0,263.0,1.7222,101500.0,INLAND +-120.46,37.29,30.0,2972.0,635.0,1940.0,590.0,2.3594,72300.0,INLAND +-120.43,37.35,15.0,1613.0,203.0,673.0,213.0,5.9378,212200.0,INLAND +-120.4,37.3,28.0,1401.0,,967.0,257.0,1.5917,89400.0,INLAND +-120.3,37.34,33.0,993.0,186.0,556.0,175.0,2.4286,103600.0,INLAND +-120.32,37.29,38.0,576.0,,478.0,112.0,2.3382,59600.0,INLAND +-120.31,37.29,40.0,1542.0,341.0,1283.0,341.0,1.6929,55900.0,INLAND +-120.31,37.29,36.0,969.0,206.0,732.0,175.0,1.5938,57600.0,INLAND +-120.32,37.29,9.0,695.0,188.0,810.0,190.0,1.6172,56300.0,INLAND +-120.25,37.23,34.0,1656.0,328.0,1110.0,332.0,2.1845,59900.0,INLAND +-120.24,37.21,31.0,2447.0,465.0,1313.0,352.0,3.3929,93800.0,INLAND +-120.35,37.31,17.0,605.0,159.0,416.0,83.0,2.0,87500.0,INLAND +-121.0,37.25,31.0,1923.0,341.0,806.0,349.0,3.1738,97600.0,INLAND +-121.0,37.26,45.0,1750.0,371.0,847.0,354.0,1.7062,77400.0,INLAND +-121.0,37.25,21.0,1937.0,389.0,1002.0,373.0,2.6087,96200.0,INLAND +-121.01,37.25,16.0,2216.0,458.0,1135.0,424.0,2.7316,97500.0,INLAND +-121.06,37.18,30.0,2603.0,507.0,1491.0,473.0,3.0909,123400.0,INLAND +-120.89,37.21,25.0,3301.0,678.0,994.0,306.0,3.2262,97200.0,INLAND +-121.02,37.09,17.0,1118.0,270.0,560.0,244.0,2.0216,112500.0,INLAND +-121.02,36.94,33.0,1541.0,313.0,880.0,272.0,2.5074,117700.0,INLAND +-120.77,37.01,28.0,1689.0,378.0,1057.0,267.0,3.125,156300.0,INLAND +-120.95,37.09,43.0,1116.0,222.0,801.0,207.0,2.875,97200.0,INLAND +-120.85,37.08,3.0,3425.0,611.0,1588.0,459.0,4.1779,147800.0,INLAND +-120.85,37.07,16.0,1795.0,362.0,1642.0,340.0,2.5363,86300.0,INLAND +-120.84,37.07,24.0,1520.0,335.0,882.0,306.0,2.2019,100000.0,INLAND +-120.84,37.06,14.0,1506.0,380.0,1096.0,352.0,1.1301,78500.0,INLAND +-120.85,37.06,31.0,2609.0,645.0,1796.0,629.0,1.5479,82000.0,INLAND +-120.87,37.07,26.0,2036.0,401.0,1343.0,414.0,3.6331,88600.0,INLAND +-120.87,37.05,29.0,4176.0,779.0,2092.0,741.0,2.595,104200.0,INLAND +-120.85,37.05,32.0,2893.0,481.0,1198.0,466.0,3.1719,140600.0,INLAND +-120.84,37.05,8.0,1944.0,283.0,814.0,276.0,5.3988,165500.0,INLAND +-120.79,37.08,9.0,97.0,20.0,91.0,22.0,2.9063,55000.0,INLAND +-120.83,37.07,16.0,3736.0,761.0,1942.0,730.0,2.5598,120200.0,INLAND +-120.82,37.05,15.0,1385.0,288.0,775.0,255.0,1.933,140600.0,INLAND +-120.65,37.09,22.0,886.0,173.0,595.0,161.0,2.4398,150000.0,INLAND +-120.61,37.03,34.0,1841.0,354.0,1019.0,356.0,1.7841,67500.0,INLAND +-120.7,36.99,32.0,320.0,73.0,222.0,78.0,2.9271,87500.0,INLAND +-120.65,36.98,26.0,1787.0,364.0,1548.0,362.0,1.7188,49500.0,INLAND +-120.63,36.98,20.0,2380.0,489.0,1581.0,505.0,2.0595,61300.0,INLAND +-120.64,36.99,23.0,2363.0,449.0,1168.0,410.0,2.2794,75700.0,INLAND +-120.62,36.99,32.0,2455.0,508.0,1344.0,492.0,1.9732,69400.0,INLAND +-120.67,37.37,18.0,164.0,30.0,104.0,32.0,1.6607,87500.0,INLAND +-121.16,41.78,42.0,2918.0,576.0,1182.0,440.0,2.1434,44000.0,INLAND +-121.18,41.31,22.0,2124.0,432.0,829.0,313.0,2.4519,57500.0,INLAND +-120.87,41.54,21.0,1091.0,208.0,660.0,188.0,2.2321,34600.0,INLAND +-120.51,41.35,16.0,2843.0,564.0,892.0,386.0,2.5074,69100.0,INLAND +-120.48,41.82,20.0,1367.0,284.0,429.0,181.0,2.0227,47500.0,INLAND +-120.08,41.79,34.0,1355.0,262.0,434.0,178.0,2.0903,56100.0,INLAND +-120.12,41.4,33.0,2820.0,515.0,976.0,403.0,2.6062,52600.0,INLAND +-120.55,41.61,22.0,9047.0,1831.0,4276.0,1622.0,2.0802,47900.0,INLAND +-119.54,38.51,14.0,1250.0,272.0,721.0,234.0,2.35,95700.0,INLAND +-119.44,38.53,20.0,1963.0,434.0,682.0,273.0,1.5817,97800.0,INLAND +-119.3,38.26,19.0,3325.0,660.0,750.0,286.0,2.9509,114800.0,INLAND +-118.98,38.03,15.0,991.0,277.0,419.0,170.0,3.5469,82500.0,INLAND +-119.07,37.8,12.0,1736.0,352.0,330.0,123.0,3.5294,160700.0,INLAND +-119.08,37.78,17.0,1631.0,335.0,285.0,128.0,2.7656,130000.0,INLAND +-118.45,37.7,15.0,2199.0,453.0,899.0,347.0,2.35,107800.0,INLAND +-118.74,37.58,20.0,3301.0,779.0,1085.0,448.0,3.7315,159300.0,INLAND +-118.96,37.64,11.0,3934.0,697.0,901.0,345.0,4.2381,242700.0,INLAND +-119.02,37.64,14.0,5919.0,1278.0,265.0,112.0,3.2431,221400.0,INLAND +-118.98,37.65,18.0,1795.0,416.0,483.0,208.0,4.5375,169800.0,INLAND +-118.99,37.65,20.0,2474.0,625.0,338.0,141.0,5.01,195500.0,INLAND +-118.98,37.64,17.0,3769.0,908.0,1160.0,453.0,3.05,188900.0,INLAND +-118.97,37.64,13.0,1907.0,544.0,575.0,234.0,3.0685,162500.0,INLAND +-118.97,37.64,14.0,2284.0,622.0,342.0,137.0,3.0921,87500.0,INLAND +-118.97,37.64,14.0,1847.0,439.0,238.0,98.0,3.6042,137500.0,INLAND +-118.99,37.63,10.0,7744.0,1573.0,483.0,224.0,3.2917,231800.0,INLAND +-121.64,36.72,17.0,4203.0,816.0,2900.0,827.0,4.1742,159900.0,<1H OCEAN +-121.63,36.71,19.0,5015.0,1013.0,3251.0,940.0,3.9818,152900.0,<1H OCEAN +-121.62,36.71,24.0,4195.0,706.0,2200.0,647.0,4.3451,177800.0,<1H OCEAN +-121.62,36.74,30.0,1337.0,253.0,838.0,247.0,5.0374,165400.0,<1H OCEAN +-121.64,36.7,32.0,4089.0,735.0,2927.0,713.0,4.1675,142500.0,<1H OCEAN +-121.65,36.7,29.0,4964.0,1056.0,2773.0,1036.0,3.0827,148100.0,<1H OCEAN +-121.66,36.71,27.0,4131.0,886.0,2002.0,815.0,3.2929,157500.0,<1H OCEAN +-121.66,36.7,33.0,3252.0,630.0,2010.0,641.0,3.4222,158100.0,<1H OCEAN +-121.65,36.69,21.0,7884.0,2011.0,4907.0,1919.0,2.7367,160300.0,<1H OCEAN +-121.64,36.68,16.0,6568.0,1603.0,6012.0,1565.0,2.3463,156100.0,<1H OCEAN +-121.63,36.68,24.0,2591.0,739.0,3243.0,702.0,2.1766,108500.0,<1H OCEAN +-121.61,36.68,37.0,3149.0,833.0,3456.0,788.0,2.8542,127600.0,<1H OCEAN +-121.62,36.68,43.0,2534.0,592.0,2448.0,603.0,2.4884,130500.0,<1H OCEAN +-121.61,36.69,19.0,9899.0,2617.0,11272.0,2528.0,2.0244,118500.0,<1H OCEAN +-121.61,36.67,39.0,3260.0,821.0,3130.0,793.0,2.5224,119200.0,<1H OCEAN +-121.62,36.67,45.0,1827.0,408.0,1507.0,410.0,2.8942,129000.0,<1H OCEAN +-121.62,36.67,31.0,2697.0,690.0,2220.0,665.0,2.5329,135200.0,<1H OCEAN +-121.63,36.67,34.0,2486.0,560.0,2443.0,557.0,2.5263,130400.0,<1H OCEAN +-121.64,36.67,28.0,256.0,66.0,214.0,60.0,3.0197,137500.0,<1H OCEAN +-121.63,36.65,44.0,309.0,121.0,315.0,80.0,1.6071,112500.0,<1H OCEAN +-121.64,36.66,24.0,3174.0,506.0,1466.0,535.0,5.2285,248100.0,<1H OCEAN +-121.65,36.66,30.0,3745.0,767.0,1762.0,748.0,3.2355,214200.0,<1H OCEAN +-121.65,36.66,42.0,4261.0,840.0,2013.0,801.0,3.5288,221000.0,<1H OCEAN +-121.65,36.67,52.0,2351.0,459.0,1169.0,439.0,2.8924,169600.0,<1H OCEAN +-121.65,36.67,28.0,1926.0,556.0,1717.0,535.0,1.9385,123200.0,<1H OCEAN +-121.66,36.68,10.0,913.0,265.0,508.0,251.0,0.9914,147500.0,<1H OCEAN +-121.66,36.67,40.0,2878.0,592.0,1444.0,564.0,3.1439,192300.0,<1H OCEAN +-121.66,36.67,40.0,2497.0,520.0,1275.0,508.0,3.1071,193100.0,<1H OCEAN +-121.67,36.66,19.0,9371.0,1980.0,4259.0,1882.0,3.6875,189700.0,<1H OCEAN +-121.67,36.67,24.0,3071.0,544.0,1477.0,560.0,3.9219,222500.0,<1H OCEAN +-121.68,36.67,26.0,5745.0,1017.0,2780.0,996.0,5.0,202300.0,<1H OCEAN +-121.67,36.68,38.0,5561.0,1292.0,3523.0,1253.0,2.8289,168300.0,<1H OCEAN +-121.66,36.69,6.0,10613.0,2485.0,7249.0,2375.0,3.7912,168900.0,<1H OCEAN +-121.79,36.85,28.0,1049.0,235.0,705.0,208.0,2.7321,150000.0,NEAR OCEAN +-121.77,36.87,37.0,424.0,65.0,266.0,64.0,3.3472,293800.0,NEAR OCEAN +-121.73,36.9,23.0,2392.0,721.0,3074.0,718.0,2.5195,136900.0,<1H OCEAN +-121.71,36.9,16.0,1680.0,285.0,1103.0,275.0,4.6125,253800.0,<1H OCEAN +-121.68,36.9,13.0,833.0,130.0,405.0,127.0,5.2729,322900.0,<1H OCEAN +-121.66,36.89,15.0,2608.0,458.0,1531.0,457.0,5.5148,253500.0,<1H OCEAN +-121.76,36.83,28.0,1445.0,268.0,1017.0,284.0,3.6693,211000.0,<1H OCEAN +-121.73,36.86,28.0,827.0,178.0,703.0,144.0,4.4271,175700.0,<1H OCEAN +-121.71,36.88,19.0,2528.0,554.0,2332.0,492.0,3.7766,177000.0,<1H OCEAN +-121.73,36.85,22.0,1304.0,278.0,887.0,227.0,3.6607,206300.0,<1H OCEAN +-121.7,36.84,19.0,2511.0,465.0,1551.0,450.0,4.9107,231900.0,<1H OCEAN +-121.65,36.85,20.0,2606.0,424.0,1361.0,426.0,4.5787,245100.0,<1H OCEAN +-121.69,36.8,19.0,2164.0,410.0,1309.0,426.0,3.338,185300.0,<1H OCEAN +-121.74,36.79,16.0,3841.0,620.0,1799.0,611.0,4.3814,245300.0,<1H OCEAN +-121.72,36.81,18.0,1984.0,379.0,1078.0,359.0,3.2969,229900.0,<1H OCEAN +-121.69,36.81,18.0,2837.0,522.0,1454.0,458.0,4.5272,221000.0,<1H OCEAN +-121.66,36.82,17.0,3921.0,654.0,1895.0,641.0,5.0092,238700.0,<1H OCEAN +-121.64,36.82,18.0,1819.0,283.0,919.0,295.0,4.1696,222500.0,<1H OCEAN +-121.76,36.75,21.0,1141.0,257.0,671.0,195.0,3.8424,155700.0,<1H OCEAN +-121.7,36.77,21.0,2294.0,478.0,1306.0,430.0,3.0347,227200.0,<1H OCEAN +-121.76,36.77,27.0,1608.0,503.0,2031.0,498.0,2.3384,121000.0,<1H OCEAN +-121.75,36.77,25.0,1851.0,418.0,1678.0,390.0,3.2937,135300.0,<1H OCEAN +-121.75,36.76,32.0,1740.0,399.0,1563.0,389.0,2.7694,132400.0,<1H OCEAN +-121.64,36.74,30.0,2628.0,444.0,1372.0,432.0,4.1696,175000.0,<1H OCEAN +-121.64,36.8,18.0,5915.0,1000.0,2975.0,975.0,4.5812,255200.0,<1H OCEAN +-121.6,36.81,18.0,1575.0,230.0,751.0,219.0,5.2203,286500.0,<1H OCEAN +-121.65,36.77,15.0,2191.0,358.0,1150.0,330.0,4.7969,227500.0,<1H OCEAN +-121.68,36.72,12.0,19234.0,4492.0,12153.0,4372.0,3.2652,152800.0,<1H OCEAN +-121.7,36.67,37.0,641.0,129.0,458.0,142.0,3.3456,252600.0,<1H OCEAN +-121.62,36.63,52.0,1437.0,298.0,836.0,257.0,3.6286,165500.0,<1H OCEAN +-121.54,36.7,12.0,6758.0,1241.0,3918.0,1100.0,3.525,201700.0,<1H OCEAN +-121.62,36.69,11.0,4712.0,1098.0,5982.0,1105.0,2.5986,135700.0,<1H OCEAN +-121.62,36.69,12.0,512.0,144.0,767.0,149.0,2.2667,72900.0,<1H OCEAN +-121.69,36.62,19.0,1907.0,323.0,681.0,270.0,6.0332,244900.0,<1H OCEAN +-121.7,36.6,19.0,3562.0,530.0,1607.0,505.0,5.0162,283100.0,<1H OCEAN +-121.67,36.58,11.0,5892.0,837.0,2327.0,812.0,6.1551,291800.0,<1H OCEAN +-121.59,36.55,34.0,737.0,140.0,362.0,138.0,5.1788,270000.0,<1H OCEAN +-121.7,36.55,21.0,3905.0,583.0,1528.0,586.0,7.6245,336600.0,<1H OCEAN +-121.69,36.52,15.0,4037.0,586.0,1596.0,557.0,8.0922,390100.0,<1H OCEAN +-121.43,36.5,14.0,1835.0,468.0,1867.0,461.0,2.3879,129800.0,<1H OCEAN +-121.44,36.51,31.0,1636.0,380.0,1468.0,339.0,3.2219,114700.0,<1H OCEAN +-121.45,36.51,29.0,1045.0,311.0,1245.0,273.0,1.775,112500.0,<1H OCEAN +-121.42,36.57,13.0,2685.0,621.0,2474.0,573.0,2.8775,134100.0,<1H OCEAN +-121.48,36.49,28.0,1006.0,228.0,738.0,193.0,1.9722,210700.0,<1H OCEAN +-121.74,36.49,33.0,2952.0,565.0,1264.0,517.0,4.4209,274600.0,<1H OCEAN +-121.73,36.5,27.0,3184.0,520.0,1121.0,493.0,5.6383,377000.0,<1H OCEAN +-121.74,36.47,28.0,1973.0,343.0,970.0,349.0,4.25,279100.0,<1H OCEAN +-121.7,36.48,19.0,2150.0,479.0,1052.0,428.0,3.5039,288400.0,<1H OCEAN +-121.62,36.43,20.0,1335.0,290.0,717.0,243.0,4.7891,230600.0,<1H OCEAN +-121.66,36.37,9.0,1580.0,287.0,465.0,208.0,6.1668,405800.0,<1H OCEAN +-121.31,36.42,21.0,2740.0,615.0,2630.0,564.0,2.6629,102700.0,<1H OCEAN +-121.32,36.42,20.0,1054.0,269.0,1219.0,273.0,3.0437,76600.0,<1H OCEAN +-121.32,36.43,22.0,2927.0,637.0,2546.0,618.0,2.7153,114300.0,<1H OCEAN +-121.33,36.43,40.0,622.0,194.0,902.0,196.0,2.625,109100.0,<1H OCEAN +-121.4,36.38,39.0,2288.0,529.0,1449.0,410.0,3.3289,190600.0,<1H OCEAN +-121.23,36.33,23.0,2095.0,536.0,1858.0,457.0,3.0543,92400.0,<1H OCEAN +-121.25,36.32,12.0,4776.0,1082.0,4601.0,1066.0,2.9184,100500.0,<1H OCEAN +-121.26,36.32,30.0,146.0,41.0,164.0,40.0,2.3,206300.0,<1H OCEAN +-121.24,36.33,13.0,1642.0,418.0,1534.0,388.0,3.1222,125500.0,<1H OCEAN +-121.24,36.34,33.0,1691.0,308.0,792.0,262.0,2.6648,164600.0,<1H OCEAN +-121.12,36.21,16.0,1720.0,473.0,1427.0,291.0,2.1107,76200.0,<1H OCEAN +-121.13,36.21,27.0,1476.0,352.0,1156.0,358.0,3.1929,137900.0,<1H OCEAN +-121.13,36.21,30.0,1484.0,414.0,1200.0,351.0,1.7548,95800.0,<1H OCEAN +-121.13,36.21,34.0,2504.0,550.0,1810.0,547.0,3.4821,113700.0,<1H OCEAN +-121.13,36.2,16.0,1868.0,443.0,1323.0,436.0,2.9559,163200.0,<1H OCEAN +-121.02,36.24,12.0,2198.0,507.0,1971.0,502.0,2.6801,100000.0,<1H OCEAN +-121.2,36.14,12.0,3738.0,710.0,2337.0,664.0,3.9647,135000.0,<1H OCEAN +-121.39,36.16,28.0,1057.0,249.0,288.0,130.0,3.0526,146900.0,NEAR OCEAN +-121.32,35.95,31.0,372.0,68.0,479.0,67.0,3.5547,200000.0,NEAR OCEAN +-121.0,35.94,16.0,3077.0,628.0,1479.0,536.0,3.3724,114600.0,<1H OCEAN +-120.79,36.06,29.0,1916.0,386.0,1019.0,314.0,2.4881,87500.0,<1H OCEAN +-120.51,35.91,39.0,768.0,162.0,264.0,118.0,5.3245,250000.0,INLAND +-121.91,36.42,14.0,1078.0,261.0,382.0,171.0,3.7083,210000.0,NEAR OCEAN +-121.84,36.25,20.0,958.0,245.0,590.0,189.0,2.6094,362500.0,NEAR OCEAN +-121.62,36.14,25.0,726.0,274.0,411.0,214.0,3.2375,450000.0,NEAR OCEAN +-121.87,36.55,20.0,10053.0,1768.0,3083.0,1621.0,5.1506,387500.0,NEAR OCEAN +-121.82,36.54,22.0,1746.0,363.0,886.0,364.0,5.5469,378800.0,<1H OCEAN +-121.77,36.53,18.0,2321.0,358.0,803.0,341.0,10.1854,426000.0,<1H OCEAN +-121.84,36.52,18.0,3165.0,533.0,1312.0,434.0,6.5234,357400.0,NEAR OCEAN +-121.88,36.49,28.0,2830.0,458.0,898.0,370.0,5.8142,500001.0,NEAR OCEAN +-121.92,36.57,42.0,3944.0,738.0,1374.0,598.0,4.174,394400.0,NEAR OCEAN +-121.91,36.55,39.0,5468.0,834.0,1782.0,712.0,5.7248,398800.0,NEAR OCEAN +-121.92,36.54,33.0,5323.0,887.0,1670.0,740.0,3.9792,468000.0,NEAR OCEAN +-121.92,36.56,40.0,2124.0,449.0,643.0,341.0,5.5164,369100.0,NEAR OCEAN +-121.94,36.55,30.0,2722.0,584.0,628.0,384.0,3.4048,487100.0,NEAR OCEAN +-121.92,36.56,39.0,2144.0,538.0,749.0,419.0,2.7039,364000.0,NEAR OCEAN +-121.92,36.55,37.0,2190.0,419.0,490.0,300.0,3.7852,465800.0,NEAR OCEAN +-121.92,36.55,44.0,3494.0,635.0,693.0,415.0,3.6,452800.0,NEAR OCEAN +-121.92,36.55,52.0,2616.0,483.0,582.0,313.0,3.275,500001.0,NEAR OCEAN +-121.95,36.61,31.0,1736.0,250.0,497.0,170.0,6.3835,407800.0,NEAR OCEAN +-121.93,36.59,25.0,2201.0,353.0,622.0,295.0,5.0621,386500.0,NEAR OCEAN +-121.95,36.6,32.0,3152.0,504.0,793.0,426.0,7.1198,469900.0,NEAR OCEAN +-121.95,36.59,22.0,3553.0,530.0,1108.0,441.0,5.8505,417100.0,NEAR OCEAN +-121.94,36.58,23.0,4911.0,693.0,1480.0,606.0,6.777,500000.0,NEAR OCEAN +-121.94,36.57,28.0,3153.0,409.0,569.0,271.0,14.4113,500001.0,NEAR OCEAN +-121.93,36.6,33.0,3455.0,683.0,1704.0,663.0,4.0154,225700.0,NEAR OCEAN +-121.92,36.61,29.0,3735.0,808.0,1873.0,757.0,3.1543,253800.0,NEAR OCEAN +-121.93,36.62,34.0,2351.0,,1063.0,428.0,3.725,278000.0,NEAR OCEAN +-121.92,36.61,27.0,3044.0,661.0,1229.0,618.0,3.1359,268000.0,NEAR OCEAN +-121.93,36.62,39.0,869.0,173.0,406.0,165.0,4.0313,253800.0,NEAR OCEAN +-121.92,36.62,52.0,974.0,190.0,403.0,181.0,4.3281,236500.0,NEAR OCEAN +-121.92,36.62,52.0,1001.0,191.0,425.0,184.0,3.7614,241700.0,NEAR OCEAN +-121.92,36.62,47.0,1811.0,401.0,948.0,375.0,3.0379,249300.0,NEAR OCEAN +-121.91,36.62,52.0,1431.0,300.0,657.0,293.0,3.2865,240100.0,<1H OCEAN +-121.92,36.62,52.0,867.0,199.0,391.0,187.0,2.6713,234600.0,NEAR OCEAN +-121.92,36.62,52.0,1410.0,303.0,578.0,285.0,2.5625,235400.0,NEAR OCEAN +-121.92,36.62,52.0,728.0,161.0,313.0,142.0,3.4327,254500.0,NEAR OCEAN +-121.91,36.62,40.0,1292.0,271.0,504.0,230.0,2.475,258300.0,<1H OCEAN +-121.91,36.62,30.0,724.0,167.0,325.0,155.0,3.3333,247900.0,<1H OCEAN +-121.71,36.78,19.0,2371.0,324.0,944.0,332.0,5.9175,240200.0,<1H OCEAN +-121.92,36.62,52.0,2584.0,599.0,790.0,444.0,2.5263,286400.0,NEAR OCEAN +-121.91,36.62,52.0,541.0,157.0,240.0,145.0,3.5865,290000.0,<1H OCEAN +-121.91,36.62,52.0,1220.0,267.0,488.0,265.0,3.7454,243800.0,<1H OCEAN +-121.91,36.63,42.0,817.0,194.0,391.0,193.0,2.1776,279200.0,<1H OCEAN +-121.93,36.63,28.0,3983.0,852.0,1582.0,778.0,3.5147,313900.0,NEAR OCEAN +-121.93,36.63,33.0,1740.0,342.0,638.0,329.0,3.1912,319800.0,NEAR OCEAN +-121.92,36.63,40.0,1076.0,193.0,406.0,180.0,3.4943,311100.0,<1H OCEAN +-121.93,36.63,41.0,1049.0,198.0,428.0,183.0,4.3571,287500.0,NEAR OCEAN +-121.92,36.63,36.0,877.0,175.0,349.0,168.0,3.4167,339100.0,<1H OCEAN +-121.89,36.63,20.0,1834.0,554.0,971.0,514.0,3.0383,217300.0,<1H OCEAN +-121.9,36.61,29.0,3412.0,827.0,1574.0,759.0,2.9309,217100.0,NEAR OCEAN +-121.91,36.61,30.0,2755.0,597.0,1519.0,554.0,3.2952,234600.0,NEAR OCEAN +-121.92,36.61,27.0,1619.0,352.0,831.0,344.0,4.3,226400.0,NEAR OCEAN +-121.92,36.61,21.0,1242.0,340.0,834.0,362.0,2.4922,243800.0,NEAR OCEAN +-121.9,36.6,39.0,1629.0,423.0,804.0,386.0,2.4663,236500.0,NEAR OCEAN +-121.9,36.6,33.0,2461.0,649.0,1234.0,601.0,2.8727,225000.0,NEAR OCEAN +-121.9,36.6,45.0,2249.0,412.0,944.0,429.0,3.0625,260300.0,NEAR OCEAN +-121.9,36.59,42.0,2689.0,510.0,1023.0,459.0,4.6182,301000.0,NEAR OCEAN +-121.9,36.58,31.0,1431.0,,704.0,393.0,3.1977,289300.0,NEAR OCEAN +-121.91,36.59,31.0,2034.0,335.0,966.0,322.0,4.6964,291300.0,NEAR OCEAN +-121.91,36.6,35.0,2605.0,410.0,1110.0,406.0,5.5519,329500.0,NEAR OCEAN +-121.91,36.59,17.0,5039.0,833.0,1678.0,710.0,6.2323,339100.0,NEAR OCEAN +-121.89,36.6,40.0,626.0,164.0,337.0,150.0,2.7917,225000.0,<1H OCEAN +-121.89,36.6,19.0,656.0,200.0,248.0,173.0,1.2656,500000.0,<1H OCEAN +-121.88,36.6,30.0,1671.0,469.0,760.0,375.0,2.5164,178100.0,<1H OCEAN +-121.88,36.59,30.0,1822.0,505.0,932.0,496.0,2.6894,179500.0,<1H OCEAN +-121.89,36.59,18.0,2700.0,937.0,1042.0,744.0,3.1364,150000.0,NEAR OCEAN +-121.89,36.59,32.0,784.0,112.0,262.0,114.0,6.918,500001.0,NEAR OCEAN +-121.88,36.58,29.0,4910.0,871.0,3438.0,904.0,4.0432,450000.0,NEAR OCEAN +-121.86,36.58,20.0,6332.0,991.0,2668.0,955.0,5.7578,347700.0,<1H OCEAN +-121.81,36.57,13.0,3030.0,413.0,1027.0,363.0,6.9615,500001.0,<1H OCEAN +-121.87,36.61,21.0,1616.0,400.0,688.0,384.0,4.2109,278800.0,<1H OCEAN +-121.86,36.6,31.0,1044.0,285.0,762.0,301.0,3.038,195300.0,<1H OCEAN +-121.86,36.6,21.0,3634.0,1011.0,1985.0,917.0,2.9085,156300.0,<1H OCEAN +-121.86,36.6,33.0,1409.0,307.0,633.0,290.0,3.5568,191200.0,<1H OCEAN +-121.85,36.6,21.0,2381.0,701.0,1264.0,659.0,2.5372,218000.0,<1H OCEAN +-121.85,36.59,42.0,891.0,203.0,525.0,212.0,3.3156,186300.0,<1H OCEAN +-121.84,36.59,34.0,3852.0,733.0,1661.0,696.0,4.3269,221300.0,<1H OCEAN +-121.83,36.61,27.0,5665.0,1281.0,3612.0,1191.0,3.0542,142100.0,<1H OCEAN +-121.83,36.6,30.0,2748.0,502.0,1491.0,535.0,4.3472,185000.0,<1H OCEAN +-121.84,36.61,26.0,2902.0,761.0,2258.0,719.0,2.5663,128900.0,<1H OCEAN +-121.84,36.6,30.0,2958.0,691.0,1616.0,666.0,3.4643,191800.0,<1H OCEAN +-121.84,36.61,21.0,2876.0,802.0,2487.0,795.0,2.2007,112800.0,<1H OCEAN +-121.84,36.61,15.0,2190.0,586.0,1570.0,510.0,1.875,122300.0,<1H OCEAN +-121.82,36.61,24.0,2437.0,438.0,1430.0,444.0,3.8015,169100.0,<1H OCEAN +-121.83,36.61,26.0,3723.0,789.0,2563.0,747.0,3.4531,133100.0,<1H OCEAN +-121.83,36.61,27.0,2248.0,466.0,1644.0,453.0,3.2545,131200.0,<1H OCEAN +-121.83,36.62,33.0,2938.0,576.0,1516.0,568.0,3.5,162400.0,<1H OCEAN +-121.83,36.62,33.0,1771.0,398.0,1037.0,388.0,2.7708,161800.0,<1H OCEAN +-121.85,36.6,41.0,3138.0,717.0,1890.0,642.0,2.4864,140400.0,<1H OCEAN +-121.85,36.61,38.0,238.0,,191.0,67.0,1.3897,125000.0,<1H OCEAN +-121.86,36.63,37.0,338.0,109.0,231.0,100.0,2.5313,108300.0,<1H OCEAN +-121.84,36.62,26.0,32.0,8.0,27.0,10.0,2.225,150000.0,<1H OCEAN +-121.79,36.64,11.0,32627.0,6445.0,28566.0,6082.0,2.3087,118800.0,<1H OCEAN +-121.8,36.68,18.0,8581.0,1957.0,6071.0,1889.0,3.0,162200.0,<1H OCEAN +-121.79,36.68,22.0,6912.0,1513.0,3794.0,1455.0,3.0608,168300.0,<1H OCEAN +-121.8,36.72,14.0,2493.0,407.0,1296.0,418.0,5.4508,190000.0,<1H OCEAN +-121.8,36.69,12.0,3877.0,914.0,2274.0,858.0,3.4239,194800.0,<1H OCEAN +-121.77,36.71,18.0,6601.0,1395.0,3562.0,1299.0,3.512,174800.0,<1H OCEAN +-122.29,38.3,52.0,144.0,54.0,89.0,48.0,1.0096,162500.0,NEAR BAY +-122.29,38.3,52.0,935.0,224.0,315.0,207.0,1.8287,146900.0,NEAR BAY +-122.3,38.3,21.0,1108.0,269.0,524.0,274.0,2.7619,154600.0,NEAR BAY +-122.3,38.3,52.0,1128.0,207.0,450.0,197.0,3.3542,154600.0,NEAR BAY +-122.29,38.3,52.0,1219.0,288.0,847.0,283.0,1.6691,183300.0,NEAR BAY +-122.28,38.29,23.0,1398.0,388.0,1112.0,406.0,2.2366,140200.0,NEAR BAY +-122.29,38.29,52.0,3217.0,742.0,1670.0,671.0,2.4398,163100.0,NEAR BAY +-122.3,38.29,48.0,2278.0,477.0,1219.0,453.0,2.9643,154000.0,NEAR BAY +-122.3,38.29,40.0,1739.0,318.0,744.0,312.0,2.6518,156100.0,NEAR BAY +-122.29,38.28,38.0,2308.0,425.0,1272.0,406.0,3.6083,134200.0,NEAR BAY +-122.26,38.29,10.0,969.0,160.0,482.0,180.0,6.5799,218100.0,NEAR BAY +-122.27,38.29,36.0,1446.0,306.0,678.0,295.0,2.8409,153000.0,NEAR BAY +-122.28,38.3,23.0,526.0,152.0,245.0,130.0,2.0134,142500.0,NEAR BAY +-122.28,38.29,19.0,531.0,112.0,139.0,80.0,1.9875,325000.0,NEAR BAY +-122.27,38.29,20.0,3870.0,795.0,2088.0,774.0,3.3021,152700.0,NEAR BAY +-122.26,38.28,24.0,2831.0,502.0,1462.0,503.0,4.5,158300.0,NEAR BAY +-122.27,38.28,37.0,1170.0,303.0,766.0,302.0,2.6618,136200.0,NEAR BAY +-122.26,38.31,33.0,4518.0,704.0,1776.0,669.0,5.2444,281100.0,NEAR BAY +-122.27,38.32,31.0,1267.0,319.0,545.0,297.0,1.9946,206800.0,NEAR BAY +-122.27,38.31,44.0,3030.0,589.0,1373.0,582.0,2.9054,155200.0,NEAR BAY +-122.28,38.32,12.0,4609.0,1005.0,2293.0,960.0,3.4543,194500.0,NEAR BAY +-122.29,38.32,23.0,4312.0,993.0,2317.0,934.0,2.7667,153200.0,NEAR BAY +-122.3,38.32,20.0,2063.0,486.0,1045.0,460.0,2.5035,153200.0,NEAR BAY +-122.3,38.31,34.0,1797.0,395.0,1162.0,407.0,3.455,137500.0,NEAR BAY +-122.29,38.31,25.0,4927.0,1005.0,2756.0,998.0,2.7325,162900.0,NEAR BAY +-122.28,38.31,52.0,58.0,18.0,48.0,22.0,1.76,166700.0,NEAR BAY +-122.29,38.31,45.0,3075.0,754.0,1635.0,723.0,2.2721,139800.0,NEAR BAY +-122.3,38.3,44.0,3690.0,809.0,1922.0,736.0,2.6346,139800.0,NEAR BAY +-122.31,38.34,19.0,4187.0,684.0,1827.0,605.0,4.5293,210400.0,NEAR BAY +-122.31,38.33,21.0,1922.0,344.0,1051.0,342.0,3.6042,183300.0,NEAR BAY +-122.3,38.33,15.0,4741.0,956.0,2043.0,856.0,4.1862,183600.0,NEAR BAY +-122.31,38.33,26.0,2155.0,339.0,956.0,365.0,4.0132,174700.0,NEAR BAY +-122.31,38.32,33.0,2463.0,421.0,1235.0,465.0,3.7045,161500.0,NEAR BAY +-122.32,38.33,17.0,851.0,118.0,370.0,123.0,5.0877,209300.0,NEAR BAY +-122.33,38.33,15.0,3193.0,468.0,1303.0,426.0,5.3017,202600.0,NEAR BAY +-122.32,38.32,19.0,2922.0,417.0,1221.0,442.0,5.8002,238700.0,NEAR BAY +-122.32,38.32,22.0,2483.0,528.0,1478.0,492.0,4.0878,164400.0,NEAR BAY +-122.31,38.32,35.0,3997.0,762.0,2074.0,703.0,3.285,138100.0,NEAR BAY +-122.32,38.32,26.0,2710.0,498.0,1439.0,484.0,5.0,175200.0,NEAR BAY +-122.33,38.31,14.0,6778.0,947.0,2768.0,1014.0,6.1953,258900.0,NEAR BAY +-122.31,38.3,25.0,3883.0,740.0,1641.0,676.0,3.9,187300.0,NEAR BAY +-122.31,38.31,32.0,2577.0,458.0,1172.0,447.0,3.8796,175500.0,NEAR BAY +-122.31,38.3,45.0,3023.0,659.0,1789.0,657.0,3.6039,126000.0,NEAR BAY +-122.32,38.29,21.0,1607.0,356.0,834.0,352.0,2.3787,177900.0,NEAR BAY +-122.33,38.29,14.0,3541.0,499.0,1577.0,459.0,5.3351,269900.0,NEAR BAY +-122.3,38.29,20.0,1789.0,434.0,1113.0,398.0,2.4728,139700.0,NEAR BAY +-122.3,38.29,25.0,1701.0,427.0,1021.0,399.0,3.0404,142100.0,NEAR BAY +-122.3,38.28,31.0,1633.0,316.0,944.0,300.0,3.3977,158700.0,NEAR BAY +-122.31,38.27,34.0,1748.0,284.0,783.0,303.0,4.3585,194400.0,NEAR BAY +-122.3,38.27,4.0,1051.0,263.0,455.0,248.0,3.6389,130200.0,NEAR BAY +-122.3,38.25,18.0,3548.0,880.0,1476.0,699.0,3.7188,163400.0,NEAR BAY +-122.21,38.28,35.0,1273.0,210.0,555.0,181.0,4.4861,269300.0,NEAR BAY +-122.24,38.25,33.0,213.0,36.0,91.0,33.0,4.9167,187500.0,NEAR BAY +-122.28,38.22,42.0,106.0,18.0,40.0,25.0,7.5197,275000.0,NEAR BAY +-122.29,38.19,13.0,7065.0,1259.0,3864.0,1221.0,4.7472,148600.0,NEAR BAY +-122.25,38.17,34.0,778.0,137.0,406.0,136.0,4.2955,121300.0,NEAR BAY +-122.23,38.17,45.0,350.0,,225.0,72.0,1.8942,216700.0,NEAR BAY +-122.25,38.16,17.0,4459.0,944.0,1812.0,888.0,2.9375,106700.0,NEAR BAY +-122.26,38.16,23.0,2840.0,491.0,1586.0,466.0,4.0337,130400.0,NEAR BAY +-122.39,38.37,33.0,1066.0,191.0,403.0,163.0,6.8,240800.0,<1H OCEAN +-122.37,38.33,29.0,1868.0,291.0,764.0,284.0,4.825,195100.0,NEAR BAY +-122.35,38.3,18.0,3735.0,557.0,1504.0,521.0,5.6304,243100.0,NEAR BAY +-122.33,38.21,33.0,2017.0,370.0,949.0,342.0,4.625,228600.0,NEAR BAY +-122.4,38.34,33.0,1408.0,273.0,520.0,212.0,3.5781,242500.0,<1H OCEAN +-122.33,38.38,28.0,1020.0,169.0,504.0,164.0,4.5694,287500.0,INLAND +-122.4,38.41,20.0,4867.0,1015.0,1725.0,1015.0,2.5685,267600.0,INLAND +-122.32,38.35,20.0,3494.0,549.0,1673.0,541.0,5.5718,185200.0,INLAND +-122.36,38.41,18.0,1808.0,400.0,968.0,370.0,3.7067,175000.0,INLAND +-122.36,38.4,16.0,2716.0,546.0,898.0,500.0,2.2536,201200.0,INLAND +-122.18,38.35,24.0,407.0,68.0,175.0,61.0,6.0266,216700.0,INLAND +-122.21,38.41,12.0,4270.0,654.0,1624.0,598.0,5.5266,331300.0,INLAND +-122.29,38.4,28.0,2024.0,340.0,844.0,309.0,4.7833,361100.0,INLAND +-122.33,38.39,36.0,831.0,122.0,272.0,109.0,6.3427,304800.0,INLAND +-122.28,38.34,44.0,1066.0,190.0,416.0,174.0,3.6389,304000.0,NEAR BAY +-122.26,38.36,25.0,1821.0,344.0,349.0,179.0,6.9931,398800.0,INLAND +-122.26,38.33,34.0,2048.0,316.0,780.0,267.0,5.815,339200.0,NEAR BAY +-122.23,38.33,31.0,3440.0,574.0,1538.0,537.0,5.5368,325900.0,NEAR BAY +-122.24,38.31,38.0,1938.0,301.0,823.0,285.0,6.1089,280800.0,NEAR BAY +-122.52,38.53,35.0,1227.0,236.0,548.0,207.0,4.875,336700.0,INLAND +-122.48,38.48,29.0,2278.0,397.0,765.0,322.0,4.6379,348200.0,INLAND +-122.4,38.46,33.0,2542.0,466.0,1099.0,420.0,4.635,248500.0,INLAND +-122.47,38.51,18.0,2487.0,516.0,980.0,503.0,3.5506,187500.0,INLAND +-122.47,38.51,25.0,928.0,195.0,413.0,184.0,3.4904,196900.0,INLAND +-122.48,38.51,49.0,1977.0,393.0,741.0,339.0,3.1312,247600.0,INLAND +-122.48,38.5,37.0,3049.0,,1287.0,439.0,4.3125,276500.0,INLAND +-122.47,38.5,23.0,2191.0,415.0,959.0,361.0,4.1993,214500.0,INLAND +-122.45,38.51,18.0,1297.0,337.0,610.0,312.0,1.9441,184400.0,INLAND +-122.4,38.53,24.0,1741.0,289.0,564.0,231.0,3.6118,248400.0,INLAND +-122.44,38.57,26.0,2101.0,390.0,2171.0,360.0,3.6429,159700.0,INLAND +-122.45,38.58,34.0,2517.0,483.0,1324.0,464.0,3.0938,189400.0,INLAND +-122.47,38.6,20.0,1036.0,202.0,589.0,194.0,5.3698,303300.0,INLAND +-122.48,38.54,37.0,1898.0,359.0,973.0,340.0,4.2096,256600.0,INLAND +-122.46,38.53,32.0,1735.0,331.0,785.0,309.0,3.6641,275800.0,INLAND +-122.27,38.68,18.0,742.0,142.0,343.0,119.0,3.1563,98400.0,INLAND +-122.26,38.57,22.0,509.0,103.0,139.0,73.0,2.1979,152800.0,INLAND +-122.27,38.53,22.0,678.0,137.0,336.0,103.0,4.4,142500.0,INLAND +-122.18,38.49,15.0,1743.0,366.0,655.0,264.0,3.3393,146900.0,INLAND +-122.52,38.67,35.0,1705.0,321.0,708.0,253.0,3.4539,300000.0,INLAND +-122.59,38.56,43.0,2088.0,379.0,721.0,293.0,4.65,245000.0,<1H OCEAN +-122.57,38.58,18.0,2083.0,506.0,926.0,487.0,1.9925,225000.0,INLAND +-122.58,38.59,33.0,1239.0,262.0,539.0,246.0,3.5208,195800.0,INLAND +-122.58,38.58,32.0,2723.0,637.0,1549.0,556.0,2.3942,183100.0,INLAND +-122.59,38.58,18.0,3753.0,752.0,1454.0,668.0,3.7585,185700.0,<1H OCEAN +-121.07,39.15,15.0,6828.0,1319.0,3002.0,1318.0,2.4726,143400.0,INLAND +-121.07,39.09,17.0,1878.0,345.0,892.0,299.0,2.8864,143100.0,INLAND +-121.1,39.08,13.0,1110.0,216.0,602.0,209.0,2.5887,144400.0,INLAND +-121.11,39.09,16.0,1000.0,197.0,508.0,190.0,2.3062,138800.0,INLAND +-121.12,39.03,17.0,838.0,161.0,388.0,142.0,3.6563,163500.0,INLAND +-121.05,39.13,10.0,3063.0,497.0,1168.0,507.0,4.4375,185100.0,INLAND +-121.03,39.14,10.0,3138.0,524.0,1275.0,511.0,4.0775,164500.0,INLAND +-121.07,39.13,8.0,4839.0,832.0,1977.0,762.0,4.0848,155900.0,INLAND +-121.05,39.11,7.0,2767.0,423.0,1143.0,382.0,3.6333,170200.0,INLAND +-121.04,39.08,8.0,2870.0,526.0,1307.0,451.0,3.463,201700.0,INLAND +-121.0,39.09,7.0,439.0,84.0,246.0,80.0,3.0781,162500.0,INLAND +-121.08,39.02,13.0,1839.0,275.0,752.0,270.0,4.2031,209600.0,INLAND +-121.07,39.05,10.0,1813.0,311.0,827.0,287.0,3.6087,182100.0,INLAND +-121.07,39.04,9.0,2374.0,372.0,884.0,333.0,4.5042,206400.0,INLAND +-121.03,39.05,12.0,1875.0,307.0,806.0,283.0,3.9185,195200.0,INLAND +-121.06,39.04,14.0,1651.0,279.0,633.0,261.0,4.2802,194800.0,INLAND +-121.06,39.04,15.0,1999.0,287.0,585.0,246.0,5.5161,361900.0,INLAND +-121.06,39.03,11.0,1887.0,303.0,775.0,283.0,3.8417,187200.0,INLAND +-121.22,39.11,14.0,1405.0,269.0,660.0,228.0,3.0804,156800.0,INLAND +-121.19,39.05,14.0,1131.0,193.0,520.0,178.0,3.9,180400.0,INLAND +-121.14,39.1,13.0,1085.0,227.0,629.0,214.0,5.0389,171500.0,INLAND +-121.12,39.2,9.0,1431.0,254.0,681.0,221.0,3.045,170400.0,INLAND +-121.1,39.15,10.0,680.0,143.0,354.0,140.0,4.0333,161500.0,INLAND +-121.08,39.18,19.0,2323.0,397.0,963.0,379.0,3.7426,162700.0,INLAND +-121.18,39.26,14.0,811.0,161.0,352.0,121.0,3.5938,140300.0,INLAND +-121.18,39.25,9.0,3415.0,562.0,1208.0,479.0,4.3646,185900.0,INLAND +-121.2,39.25,5.0,906.0,144.0,376.0,141.0,4.3523,188200.0,INLAND +-121.18,39.23,8.0,2112.0,360.0,782.0,344.0,3.7125,175000.0,INLAND +-121.21,39.24,7.0,4194.0,673.0,1355.0,566.0,4.3702,226100.0,INLAND +-121.2,39.23,9.0,2802.0,447.0,955.0,418.0,5.2359,213300.0,INLAND +-121.18,39.19,16.0,1528.0,351.0,729.0,319.0,2.4688,138800.0,INLAND +-121.16,39.18,14.0,1006.0,187.0,462.0,185.0,3.1042,152000.0,INLAND +-121.25,39.17,9.0,999.0,189.0,411.0,176.0,2.125,151800.0,INLAND +-121.2,39.2,16.0,1039.0,182.0,554.0,184.0,2.9688,128300.0,INLAND +-121.15,39.23,13.0,3883.0,763.0,1816.0,682.0,2.8102,144400.0,INLAND +-121.24,39.22,14.0,983.0,163.0,399.0,161.0,2.2917,145100.0,INLAND +-121.23,39.27,11.0,1265.0,224.0,573.0,205.0,3.3603,162500.0,INLAND +-121.07,39.23,39.0,2099.0,433.0,929.0,423.0,1.9886,113800.0,INLAND +-121.04,39.24,48.0,1188.0,227.0,471.0,219.0,2.3125,125700.0,INLAND +-121.05,39.23,20.0,1634.0,374.0,1053.0,390.0,1.5313,154900.0,INLAND +-121.06,39.23,10.0,2229.0,537.0,982.0,512.0,2.186,132700.0,INLAND +-121.06,39.22,52.0,1749.0,422.0,837.0,391.0,2.325,109700.0,INLAND +-121.09,39.23,35.0,2637.0,511.0,1181.0,480.0,2.7813,109200.0,INLAND +-121.07,39.22,52.0,2432.0,495.0,928.0,435.0,2.425,121100.0,INLAND +-121.08,39.22,30.0,2188.0,,1033.0,437.0,2.1419,105200.0,INLAND +-121.08,39.21,17.0,3033.0,590.0,1319.0,583.0,2.4811,111800.0,INLAND +-121.09,39.22,25.0,2200.0,439.0,1045.0,419.0,2.6042,116700.0,INLAND +-121.07,39.2,45.0,204.0,62.0,133.0,51.0,1.0,90600.0,INLAND +-121.02,39.23,16.0,1427.0,319.0,642.0,333.0,1.4241,125000.0,INLAND +-121.04,39.22,14.0,1889.0,471.0,853.0,399.0,2.25,112500.0,INLAND +-121.03,39.21,28.0,2843.0,535.0,1310.0,525.0,3.2337,123100.0,INLAND +-121.05,39.2,48.0,1759.0,389.0,716.0,350.0,2.3125,108300.0,INLAND +-121.06,39.21,52.0,1452.0,309.0,637.0,299.0,2.2083,103900.0,INLAND +-121.05,39.21,43.0,1264.0,273.0,611.0,260.0,2.535,117100.0,INLAND +-120.94,39.22,12.0,1321.0,268.0,661.0,232.0,4.0062,153800.0,INLAND +-120.83,39.27,14.0,3338.0,608.0,1373.0,562.0,3.67,160100.0,INLAND +-121.0,39.23,15.0,2809.0,450.0,1267.0,408.0,4.0426,191700.0,INLAND +-120.99,39.22,16.0,1497.0,275.0,737.0,243.0,2.8942,182500.0,INLAND +-120.99,39.2,15.0,2993.0,562.0,1296.0,518.0,3.3009,156800.0,INLAND +-120.93,39.17,13.0,2331.0,464.0,1110.0,419.0,3.6563,164900.0,INLAND +-120.99,39.13,14.0,770.0,116.0,285.0,116.0,3.6434,155400.0,INLAND +-120.99,39.18,23.0,2550.0,457.0,1016.0,405.0,3.6607,153000.0,INLAND +-121.0,39.16,10.0,1170.0,225.0,537.0,194.0,3.2813,163200.0,INLAND +-121.04,39.19,17.0,856.0,167.0,518.0,170.0,3.5859,144300.0,INLAND +-121.02,39.17,17.0,2277.0,459.0,1149.0,476.0,3.2303,149500.0,INLAND +-121.02,39.27,52.0,3720.0,707.0,1424.0,609.0,3.2,155000.0,INLAND +-121.03,39.26,49.0,3739.0,759.0,1422.0,606.0,2.4283,143100.0,INLAND +-121.0,39.26,14.0,810.0,151.0,302.0,138.0,3.1094,136100.0,INLAND +-121.02,39.25,52.0,1549.0,275.0,604.0,249.0,2.2278,155400.0,INLAND +-121.06,39.29,14.0,1864.0,331.0,894.0,332.0,3.4028,171800.0,INLAND +-120.94,39.32,14.0,3120.0,595.0,1569.0,556.0,3.5385,157400.0,INLAND +-121.06,39.25,17.0,3127.0,539.0,1390.0,520.0,3.9537,172800.0,INLAND +-120.89,39.3,17.0,2282.0,431.0,974.0,371.0,3.5417,155100.0,INLAND +-120.99,39.26,16.0,2616.0,422.0,1090.0,425.0,3.7917,179200.0,INLAND +-120.91,39.39,16.0,352.0,105.0,226.0,82.0,1.6094,79500.0,INLAND +-121.03,39.37,15.0,1337.0,326.0,1172.0,306.0,2.6341,85000.0,INLAND +-121.13,39.31,17.0,3442.0,705.0,1693.0,619.0,2.8102,128900.0,INLAND +-120.74,39.39,18.0,453.0,117.0,152.0,77.0,1.3523,85700.0,INLAND +-120.09,39.4,17.0,1076.0,283.0,171.0,64.0,2.125,83900.0,INLAND +-120.17,39.33,18.0,1046.0,204.0,486.0,179.0,4.119,110900.0,INLAND +-120.2,39.33,26.0,1988.0,379.0,905.0,321.0,3.7841,109500.0,INLAND +-120.19,39.32,16.0,1536.0,298.0,646.0,208.0,2.3594,155700.0,INLAND +-120.17,39.32,14.0,2421.0,489.0,1000.0,354.0,3.5652,119800.0,INLAND +-120.17,39.33,10.0,614.0,141.0,195.0,95.0,0.9283,116300.0,INLAND +-120.1,39.37,10.0,2325.0,410.0,1016.0,373.0,4.5208,117300.0,INLAND +-120.1,39.33,9.0,2738.0,510.0,1193.0,412.0,4.3958,124800.0,INLAND +-120.15,39.36,9.0,2254.0,400.0,694.0,243.0,5.6856,138100.0,INLAND +-120.26,39.32,24.0,6012.0,1227.0,780.0,358.0,3.0043,122100.0,INLAND +-120.35,39.34,29.0,1986.0,474.0,337.0,100.0,4.0278,95800.0,INLAND +-120.27,39.35,11.0,2520.0,401.0,397.0,165.0,4.665,145600.0,INLAND +-120.25,39.34,9.0,2739.0,555.0,294.0,110.0,3.1842,162500.0,INLAND +-120.24,39.35,8.0,4195.0,725.0,291.0,115.0,3.4792,180800.0,INLAND +-120.23,39.36,7.0,2045.0,358.0,245.0,92.0,4.0481,152300.0,INLAND +-120.22,39.35,8.0,1872.0,281.0,203.0,71.0,4.5882,198400.0,INLAND +-120.21,39.35,7.0,914.0,159.0,85.0,34.0,4.7917,187500.0,INLAND +-120.19,39.35,7.0,2611.0,395.0,482.0,159.0,5.0622,174100.0,INLAND +-117.95,33.94,28.0,2851.0,496.0,1287.0,496.0,5.0782,264100.0,<1H OCEAN +-117.96,33.94,34.0,2228.0,399.0,1159.0,378.0,4.8906,228900.0,<1H OCEAN +-117.97,33.94,36.0,1870.0,338.0,947.0,324.0,4.1205,217000.0,<1H OCEAN +-117.97,33.94,34.0,1632.0,263.0,690.0,268.0,5.5608,255800.0,<1H OCEAN +-117.97,33.94,35.0,1928.0,360.0,1056.0,366.0,4.0893,215700.0,<1H OCEAN +-117.97,33.93,31.0,1975.0,373.0,918.0,347.0,4.4107,202000.0,<1H OCEAN +-117.97,33.93,33.0,1700.0,369.0,981.0,362.0,4.5461,194000.0,<1H OCEAN +-117.96,33.93,31.0,1471.0,321.0,841.0,330.0,3.46,232800.0,<1H OCEAN +-117.96,33.93,29.0,2316.0,522.0,1275.0,501.0,3.776,192600.0,<1H OCEAN +-117.96,33.94,31.0,2397.0,518.0,1407.0,476.0,2.6641,185200.0,<1H OCEAN +-117.94,33.93,33.0,1770.0,370.0,1346.0,366.0,4.0833,162500.0,<1H OCEAN +-117.94,33.93,34.0,1475.0,319.0,698.0,293.0,3.8194,186000.0,<1H OCEAN +-117.94,33.93,14.0,999.0,232.0,1037.0,244.0,2.7125,166100.0,<1H OCEAN +-117.95,33.93,25.0,3445.0,801.0,2400.0,750.0,3.4702,161900.0,<1H OCEAN +-117.95,33.93,37.0,2633.0,630.0,1904.0,630.0,2.6123,161300.0,<1H OCEAN +-117.96,33.93,15.0,2014.0,419.0,839.0,390.0,4.7446,175400.0,<1H OCEAN +-117.97,33.92,32.0,2620.0,398.0,1296.0,429.0,5.7796,241300.0,<1H OCEAN +-117.97,33.93,35.0,1887.0,328.0,989.0,351.0,4.1321,198100.0,<1H OCEAN +-117.97,33.92,24.0,2017.0,416.0,900.0,436.0,3.0,251400.0,<1H OCEAN +-117.96,33.92,18.0,3744.0,1027.0,1654.0,912.0,3.2158,215000.0,<1H OCEAN +-117.95,33.92,18.0,2825.0,660.0,1590.0,643.0,3.6106,153600.0,<1H OCEAN +-117.94,33.92,28.0,639.0,179.0,1062.0,169.0,3.0588,145200.0,<1H OCEAN +-117.95,33.92,32.0,1661.0,312.0,1201.0,302.0,4.0,178200.0,<1H OCEAN +-117.95,33.92,11.0,3127.0,706.0,1594.0,694.0,4.3426,141300.0,<1H OCEAN +-117.94,33.92,32.0,1053.0,207.0,1038.0,222.0,4.6696,165500.0,<1H OCEAN +-117.95,33.92,13.0,2312.0,592.0,2038.0,559.0,3.1378,137000.0,<1H OCEAN +-117.94,33.94,25.0,3250.0,546.0,1452.0,501.0,5.1084,303800.0,<1H OCEAN +-117.94,33.94,30.0,1596.0,307.0,845.0,309.0,4.5096,241100.0,<1H OCEAN +-117.95,33.94,31.0,2237.0,431.0,1135.0,434.0,4.45,267900.0,<1H OCEAN +-117.94,33.94,26.0,1962.0,540.0,1236.0,520.0,2.2156,145000.0,<1H OCEAN +-117.93,33.94,30.0,2658.0,382.0,1135.0,392.0,6.0516,245000.0,<1H OCEAN +-117.93,33.94,28.0,3664.0,719.0,1820.0,657.0,4.225,224700.0,<1H OCEAN +-117.93,33.93,25.0,2431.0,534.0,1702.0,523.0,3.7933,184400.0,<1H OCEAN +-117.92,33.94,27.0,4566.0,620.0,2045.0,664.0,5.583,267700.0,<1H OCEAN +-117.92,33.94,30.0,2506.0,394.0,1255.0,421.0,4.7813,198200.0,<1H OCEAN +-117.93,33.92,34.0,2271.0,437.0,1393.0,433.0,4.2443,174400.0,<1H OCEAN +-117.93,33.93,37.0,1128.0,273.0,931.0,234.0,2.8,137500.0,<1H OCEAN +-117.93,33.93,33.0,1626.0,378.0,1062.0,356.0,2.1944,139600.0,<1H OCEAN +-117.92,33.93,12.0,4415.0,890.0,1532.0,854.0,3.75,166300.0,<1H OCEAN +-117.91,33.93,21.0,2578.0,363.0,1207.0,350.0,6.2452,291700.0,<1H OCEAN +-117.91,33.94,15.0,5799.0,842.0,2314.0,787.0,6.3433,350500.0,<1H OCEAN +-117.89,33.94,20.0,3349.0,685.0,1822.0,675.0,4.7216,227000.0,<1H OCEAN +-117.88,33.93,17.0,6100.0,861.0,2771.0,866.0,7.6486,306700.0,<1H OCEAN +-117.9,33.93,12.0,4325.0,1191.0,1897.0,1080.0,3.3173,247400.0,<1H OCEAN +-117.89,33.92,17.0,2936.0,555.0,1381.0,535.0,5.4617,190300.0,<1H OCEAN +-117.9,33.92,27.0,698.0,116.0,391.0,126.0,5.9177,267600.0,<1H OCEAN +-117.91,33.92,21.0,380.0,91.0,398.0,70.0,4.7222,208300.0,<1H OCEAN +-117.91,33.91,27.0,2181.0,501.0,1555.0,488.0,3.6106,196400.0,<1H OCEAN +-117.91,33.91,34.0,1763.0,303.0,894.0,297.0,5.0096,221700.0,<1H OCEAN +-117.91,33.91,32.0,1530.0,301.0,666.0,276.0,4.125,230200.0,<1H OCEAN +-117.91,33.91,24.0,2249.0,379.0,1015.0,385.0,4.9766,267100.0,<1H OCEAN +-117.89,33.92,34.0,1473.0,312.0,1025.0,315.0,3.8333,170400.0,<1H OCEAN +-117.89,33.91,33.0,1264.0,224.0,527.0,227.0,3.7321,216500.0,<1H OCEAN +-117.9,33.91,36.0,1376.0,257.0,687.0,221.0,3.5403,195400.0,<1H OCEAN +-117.89,33.92,8.0,2120.0,544.0,1281.0,470.0,3.4954,159500.0,<1H OCEAN +-117.89,33.92,14.0,1562.0,373.0,609.0,328.0,2.3935,125000.0,<1H OCEAN +-117.89,33.9,16.0,1426.0,216.0,652.0,226.0,6.5284,288700.0,<1H OCEAN +-117.89,33.9,23.0,1533.0,226.0,693.0,230.0,7.898,258200.0,<1H OCEAN +-117.9,33.9,19.0,2176.0,414.0,1002.0,402.0,4.9743,193500.0,<1H OCEAN +-117.9,33.91,26.0,2885.0,476.0,1227.0,439.0,4.9524,226600.0,<1H OCEAN +-117.9,33.91,33.0,4181.0,804.0,2049.0,834.0,4.3103,201600.0,<1H OCEAN +-117.92,33.92,19.0,2181.0,400.0,1272.0,337.0,5.1952,302100.0,<1H OCEAN +-117.92,33.91,33.0,2868.0,382.0,1204.0,412.0,6.1825,336900.0,<1H OCEAN +-117.92,33.91,27.0,2558.0,310.0,891.0,316.0,9.5561,411800.0,<1H OCEAN +-117.91,33.9,27.0,829.0,114.0,383.0,133.0,9.3125,293500.0,<1H OCEAN +-117.92,33.89,18.0,2895.0,487.0,1116.0,429.0,5.4716,400000.0,<1H OCEAN +-117.92,33.9,13.0,1814.0,320.0,1010.0,313.0,6.3489,337900.0,<1H OCEAN +-117.93,33.91,24.0,1698.0,297.0,676.0,273.0,5.2017,364600.0,<1H OCEAN +-117.9,33.9,18.0,3821.0,576.0,1430.0,568.0,6.9399,349600.0,<1H OCEAN +-117.9,33.88,28.0,2696.0,346.0,947.0,356.0,9.0055,375400.0,<1H OCEAN +-117.89,33.89,17.0,1671.0,192.0,678.0,206.0,13.1107,467600.0,<1H OCEAN +-117.92,33.89,12.0,1859.0,393.0,622.0,316.0,5.0258,161800.0,<1H OCEAN +-117.97,33.91,19.0,8096.0,1318.0,3853.0,1313.0,6.0076,269500.0,<1H OCEAN +-117.96,33.9,9.0,1899.0,284.0,1070.0,293.0,7.2532,381500.0,<1H OCEAN +-117.95,33.9,15.0,3057.0,479.0,1679.0,498.0,6.8429,372600.0,<1H OCEAN +-117.96,33.9,10.0,2423.0,356.0,1213.0,347.0,6.5635,346900.0,<1H OCEAN +-117.98,33.9,6.0,1537.0,347.0,506.0,280.0,4.8264,146800.0,<1H OCEAN +-117.96,33.88,25.0,3578.0,461.0,1588.0,466.0,6.2556,341300.0,<1H OCEAN +-117.95,33.89,17.0,1665.0,247.0,755.0,254.0,6.5764,349000.0,<1H OCEAN +-117.96,33.89,24.0,1332.0,252.0,625.0,230.0,4.4375,334100.0,<1H OCEAN +-117.94,33.91,18.0,8836.0,1527.0,3946.0,1451.0,5.6441,313000.0,<1H OCEAN +-117.93,33.9,30.0,2629.0,331.0,956.0,319.0,9.9071,500001.0,<1H OCEAN +-117.94,33.89,30.0,2577.0,404.0,1076.0,374.0,6.7528,459600.0,<1H OCEAN +-117.94,33.88,35.0,2159.0,343.0,833.0,335.0,5.3738,365100.0,<1H OCEAN +-117.94,33.9,27.0,2029.0,242.0,711.0,254.0,9.7956,500001.0,<1H OCEAN +-117.98,33.87,25.0,2037.0,515.0,1435.0,496.0,3.3199,188800.0,<1H OCEAN +-117.98,33.87,29.0,1310.0,332.0,937.0,294.0,3.8068,158700.0,<1H OCEAN +-117.98,33.86,25.0,1025.0,266.0,726.0,183.0,3.875,137500.0,<1H OCEAN +-117.98,33.86,26.0,1240.0,285.0,781.0,315.0,4.1287,205800.0,<1H OCEAN +-117.97,33.87,28.0,1784.0,440.0,1255.0,433.0,3.7054,169200.0,<1H OCEAN +-117.97,33.86,34.0,2138.0,490.0,1682.0,463.0,3.6006,161700.0,<1H OCEAN +-117.97,33.86,35.0,1691.0,367.0,1265.0,378.0,3.5855,174300.0,<1H OCEAN +-117.97,33.86,12.0,1370.0,367.0,1022.0,296.0,3.6471,141700.0,<1H OCEAN +-117.96,33.86,35.0,2146.0,430.0,1230.0,429.0,3.7813,184900.0,<1H OCEAN +-117.96,33.86,35.0,2181.0,371.0,1249.0,358.0,4.2937,183200.0,<1H OCEAN +-117.96,33.87,35.0,1972.0,367.0,1152.0,356.0,3.7222,187500.0,<1H OCEAN +-117.95,33.86,35.0,2375.0,439.0,1343.0,424.0,4.53,193500.0,<1H OCEAN +-117.95,33.86,35.0,2478.0,431.0,1333.0,427.0,5.2099,191400.0,<1H OCEAN +-117.96,33.86,32.0,2366.0,505.0,1283.0,477.0,3.3516,190000.0,<1H OCEAN +-117.94,33.88,46.0,1747.0,312.0,770.0,296.0,5.4217,256000.0,<1H OCEAN +-117.95,33.87,34.0,1599.0,296.0,938.0,307.0,4.285,184900.0,<1H OCEAN +-117.95,33.87,35.0,1854.0,383.0,1115.0,381.0,4.4784,185200.0,<1H OCEAN +-117.95,33.87,22.0,1432.0,335.0,746.0,296.0,2.0227,55000.0,<1H OCEAN +-117.96,33.87,27.0,890.0,289.0,416.0,200.0,3.141,167500.0,<1H OCEAN +-117.96,33.87,37.0,1785.0,360.0,1155.0,403.0,4.7984,175800.0,<1H OCEAN +-117.95,33.88,34.0,1939.0,355.0,817.0,314.0,3.6705,275000.0,<1H OCEAN +-117.94,33.86,36.0,2824.0,493.0,1394.0,507.0,4.6477,194700.0,<1H OCEAN +-117.94,33.86,33.0,1013.0,312.0,706.0,266.0,2.1432,197500.0,<1H OCEAN +-117.95,33.86,36.0,2038.0,343.0,1066.0,346.0,5.197,195700.0,<1H OCEAN +-117.93,33.86,36.0,1672.0,318.0,1173.0,337.0,4.5774,182100.0,<1H OCEAN +-117.93,33.86,35.0,1216.0,225.0,893.0,228.0,4.0288,184000.0,<1H OCEAN +-117.94,33.86,35.0,1235.0,227.0,875.0,220.0,4.6964,183100.0,<1H OCEAN +-117.94,33.86,35.0,2127.0,417.0,1247.0,378.0,4.75,185600.0,<1H OCEAN +-117.93,33.88,52.0,2157.0,362.0,1001.0,373.0,5.1237,240000.0,<1H OCEAN +-117.93,33.87,10.0,1277.0,488.0,730.0,417.0,1.4803,137500.0,<1H OCEAN +-117.94,33.87,46.0,2066.0,450.0,1275.0,448.0,3.9375,187000.0,<1H OCEAN +-117.94,33.88,35.0,1694.0,296.0,679.0,282.0,4.3333,239300.0,<1H OCEAN +-117.92,33.87,44.0,308.0,87.0,301.0,100.0,2.1991,191100.0,<1H OCEAN +-117.92,33.87,36.0,1125.0,285.0,966.0,257.0,2.8438,162500.0,<1H OCEAN +-117.93,33.87,52.0,950.0,229.0,429.0,185.0,2.315,182100.0,<1H OCEAN +-117.93,33.88,45.0,1306.0,293.0,585.0,260.0,4.0812,241700.0,<1H OCEAN +-117.93,33.88,32.0,2458.0,359.0,967.0,409.0,7.2893,293500.0,<1H OCEAN +-117.92,33.88,52.0,1270.0,276.0,609.0,211.0,3.75,232500.0,<1H OCEAN +-117.91,33.88,34.0,1851.0,291.0,784.0,290.0,5.2336,235600.0,<1H OCEAN +-117.92,33.88,32.0,1683.0,273.0,719.0,263.0,5.3649,243600.0,<1H OCEAN +-117.92,33.88,32.0,1632.0,244.0,575.0,235.0,5.3986,318700.0,<1H OCEAN +-117.91,33.89,30.0,1631.0,212.0,523.0,216.0,7.875,351900.0,<1H OCEAN +-117.9,33.88,35.0,2062.0,353.0,991.0,357.0,5.2897,230400.0,<1H OCEAN +-117.9,33.88,34.0,1396.0,245.0,661.0,261.0,4.675,215400.0,<1H OCEAN +-117.9,33.87,28.0,2315.0,538.0,1360.0,504.0,2.9861,218600.0,<1H OCEAN +-117.9,33.87,34.0,1411.0,292.0,1040.0,299.0,3.4338,195200.0,<1H OCEAN +-117.91,33.87,29.0,1121.0,,762.0,276.0,2.5,143800.0,<1H OCEAN +-117.91,33.87,52.0,2031.0,506.0,1191.0,463.0,2.9076,177300.0,<1H OCEAN +-117.88,33.89,18.0,1616.0,532.0,866.0,496.0,3.6435,119100.0,<1H OCEAN +-117.88,33.89,16.0,959.0,176.0,353.0,185.0,4.5,173300.0,<1H OCEAN +-117.88,33.88,15.0,957.0,360.0,615.0,370.0,3.0263,162500.0,<1H OCEAN +-117.89,33.88,15.0,1655.0,626.0,1549.0,582.0,1.9127,175000.0,<1H OCEAN +-117.89,33.88,33.0,1582.0,256.0,771.0,240.0,5.3836,229600.0,<1H OCEAN +-117.89,33.88,27.0,2091.0,336.0,1037.0,332.0,5.7519,243400.0,<1H OCEAN +-117.89,33.87,25.0,1492.0,439.0,755.0,389.0,3.0893,188200.0,<1H OCEAN +-117.89,33.87,32.0,1133.0,216.0,693.0,228.0,3.3594,202100.0,<1H OCEAN +-117.88,33.87,35.0,1919.0,349.0,1302.0,345.0,5.6409,190900.0,<1H OCEAN +-117.89,33.87,32.0,1569.0,422.0,835.0,386.0,3.0465,148900.0,<1H OCEAN +-117.93,33.87,45.0,1006.0,230.0,1237.0,237.0,3.3472,168000.0,<1H OCEAN +-117.93,33.86,36.0,931.0,279.0,778.0,303.0,2.6563,155000.0,<1H OCEAN +-117.93,33.86,17.0,1627.0,398.0,1216.0,369.0,3.3438,186600.0,<1H OCEAN +-117.93,33.86,35.0,931.0,181.0,516.0,174.0,5.5867,182500.0,<1H OCEAN +-117.93,33.87,29.0,1221.0,371.0,1822.0,326.0,1.7935,162500.0,<1H OCEAN +-117.89,33.86,28.0,1395.0,398.0,1220.0,362.0,3.3008,193800.0,<1H OCEAN +-117.91,33.86,26.0,2296.0,570.0,1415.0,527.0,2.4732,165800.0,<1H OCEAN +-117.92,33.86,26.0,745.0,161.0,247.0,151.0,3.6375,133900.0,<1H OCEAN +-117.92,33.87,33.0,1597.0,,1888.0,423.0,3.055,157800.0,<1H OCEAN +-117.87,33.91,16.0,2434.0,455.0,1017.0,476.0,4.2188,176300.0,<1H OCEAN +-117.88,33.9,21.0,3180.0,434.0,1413.0,391.0,6.5945,277300.0,<1H OCEAN +-117.88,33.9,15.0,1705.0,478.0,759.0,479.0,3.5333,114400.0,<1H OCEAN +-117.88,33.89,19.0,3583.0,911.0,2300.0,871.0,3.0214,218400.0,<1H OCEAN +-117.88,33.89,17.0,3218.0,923.0,1701.0,824.0,3.6946,265500.0,<1H OCEAN +-117.87,33.89,25.0,1142.0,162.0,486.0,150.0,7.1472,270100.0,<1H OCEAN +-117.86,33.91,16.0,2889.0,423.0,1227.0,401.0,6.4514,270800.0,<1H OCEAN +-117.86,33.9,17.0,1452.0,188.0,630.0,194.0,6.9113,285200.0,<1H OCEAN +-117.86,33.9,25.0,3205.0,409.0,1291.0,408.0,7.2478,299200.0,<1H OCEAN +-117.87,33.9,21.0,3181.0,447.0,1416.0,469.0,6.8268,280300.0,<1H OCEAN +-117.86,33.89,22.0,4386.0,593.0,1915.0,592.0,6.6897,289800.0,<1H OCEAN +-117.86,33.89,24.0,2002.0,253.0,820.0,241.0,6.9612,274500.0,<1H OCEAN +-117.87,33.89,19.0,1674.0,243.0,786.0,234.0,6.4218,275000.0,<1H OCEAN +-117.86,33.88,19.0,1621.0,328.0,871.0,322.0,3.7361,201400.0,<1H OCEAN +-117.87,33.89,17.0,1441.0,530.0,769.0,456.0,2.425,171700.0,<1H OCEAN +-117.87,33.89,22.0,2340.0,664.0,1382.0,546.0,3.343,184600.0,<1H OCEAN +-117.87,33.88,25.0,1808.0,440.0,1342.0,454.0,3.025,156900.0,<1H OCEAN +-117.87,33.88,24.0,2655.0,702.0,1519.0,708.0,3.3036,183900.0,<1H OCEAN +-117.87,33.88,28.0,3333.0,752.0,2026.0,722.0,3.5667,190700.0,<1H OCEAN +-117.87,33.88,28.0,2612.0,602.0,1682.0,563.0,3.6417,204300.0,<1H OCEAN +-117.86,33.87,12.0,1600.0,251.0,685.0,256.0,5.1784,254000.0,<1H OCEAN +-117.87,33.85,33.0,45.0,11.0,34.0,10.0,5.2949,350000.0,<1H OCEAN +-117.85,33.86,18.0,329.0,72.0,209.0,71.0,4.6806,187500.0,<1H OCEAN +-117.85,33.89,22.0,4020.0,655.0,1486.0,635.0,5.9639,262300.0,<1H OCEAN +-117.85,33.88,14.0,4753.0,681.0,2138.0,678.0,7.3658,288500.0,<1H OCEAN +-117.86,33.88,20.0,3977.0,540.0,1886.0,541.0,6.5843,272200.0,<1H OCEAN +-117.85,33.87,15.0,5078.0,806.0,2569.0,759.0,5.6549,301900.0,<1H OCEAN +-117.85,33.9,20.0,4026.0,648.0,1997.0,650.0,5.5918,260500.0,<1H OCEAN +-117.85,33.9,25.0,1548.0,256.0,811.0,263.0,5.2037,242200.0,<1H OCEAN +-117.84,33.89,24.0,3935.0,625.0,1912.0,593.0,5.7951,226900.0,<1H OCEAN +-117.85,33.89,24.0,3326.0,503.0,1616.0,494.0,5.7457,240600.0,<1H OCEAN +-117.88,33.87,21.0,1519.0,388.0,1203.0,366.0,3.2083,145300.0,<1H OCEAN +-117.87,33.86,19.0,2232.0,448.0,1149.0,417.0,3.1534,324400.0,<1H OCEAN +-117.87,33.87,7.0,2663.0,642.0,1367.0,677.0,4.6563,162400.0,<1H OCEAN +-117.87,33.87,15.0,1898.0,476.0,1766.0,455.0,2.4929,158500.0,<1H OCEAN +-117.87,33.87,16.0,1332.0,368.0,1534.0,295.0,3.0227,297100.0,<1H OCEAN +-117.86,33.87,19.0,1591.0,279.0,891.0,237.0,5.6573,216000.0,<1H OCEAN +-117.88,33.85,18.0,2705.0,713.0,2726.0,674.0,2.7759,200000.0,<1H OCEAN +-117.87,33.86,28.0,2292.0,531.0,2197.0,509.0,3.4856,142800.0,<1H OCEAN +-117.88,33.85,22.0,1105.0,241.0,971.0,249.0,3.1667,113900.0,<1H OCEAN +-117.81,33.89,13.0,3252.0,583.0,1546.0,557.0,5.8243,297900.0,<1H OCEAN +-117.82,33.88,18.0,1982.0,300.0,1027.0,324.0,7.0526,327500.0,<1H OCEAN +-117.82,33.89,24.0,2168.0,421.0,1050.0,397.0,4.6172,238300.0,<1H OCEAN +-117.81,33.88,19.0,2968.0,503.0,1430.0,459.0,5.3339,371700.0,<1H OCEAN +-117.82,33.89,21.0,3079.0,509.0,1431.0,480.0,4.0714,278900.0,<1H OCEAN +-117.78,33.86,16.0,3471.0,708.0,1769.0,691.0,4.1064,246100.0,<1H OCEAN +-117.76,33.87,16.0,3973.0,595.0,1971.0,575.0,6.4265,263700.0,<1H OCEAN +-117.83,33.9,23.0,2446.0,360.0,1196.0,359.0,6.5755,272800.0,<1H OCEAN +-117.84,33.9,24.0,1723.0,223.0,707.0,219.0,7.0352,299600.0,<1H OCEAN +-117.83,33.89,25.0,1737.0,270.0,840.0,265.0,4.625,245700.0,<1H OCEAN +-117.83,33.88,23.0,2365.0,355.0,1209.0,347.0,6.0132,259400.0,<1H OCEAN +-117.84,33.89,19.0,3544.0,542.0,1787.0,560.0,6.7837,264300.0,<1H OCEAN +-117.83,33.88,18.0,2112.0,340.0,1048.0,315.0,6.9308,231700.0,<1H OCEAN +-117.82,33.88,15.0,5392.0,895.0,2531.0,827.0,6.2185,280300.0,<1H OCEAN +-117.83,33.87,5.0,6971.0,1449.0,3521.0,1423.0,5.2131,243900.0,<1H OCEAN +-117.81,33.88,19.0,2265.0,283.0,904.0,279.0,9.2327,461300.0,<1H OCEAN +-117.81,33.87,19.0,4491.0,680.0,2457.0,702.0,6.0591,233500.0,<1H OCEAN +-117.8,33.87,16.0,5954.0,1281.0,3107.0,1209.0,4.2566,206100.0,<1H OCEAN +-117.81,33.86,18.0,133.0,29.0,95.0,23.0,3.5625,235000.0,<1H OCEAN +-117.87,33.92,14.0,4039.0,669.0,1905.0,670.0,6.3303,303000.0,<1H OCEAN +-117.88,33.92,13.0,3292.0,727.0,1565.0,698.0,5.457,308800.0,<1H OCEAN +-117.85,33.92,11.0,3331.0,410.0,1460.0,416.0,8.0287,371800.0,<1H OCEAN +-117.87,33.92,17.0,4575.0,764.0,2054.0,737.0,6.0571,272400.0,<1H OCEAN +-117.83,33.93,14.0,1956.0,282.0,671.0,269.0,6.5841,306400.0,<1H OCEAN +-117.8,33.92,16.0,5819.0,986.0,2306.0,914.0,4.6315,277500.0,<1H OCEAN +-117.8,33.89,25.0,3121.0,381.0,1278.0,389.0,7.0217,357900.0,<1H OCEAN +-117.79,33.88,17.0,8562.0,1351.0,3822.0,1316.0,6.0829,252600.0,<1H OCEAN +-117.78,33.87,16.0,5609.0,952.0,2624.0,934.0,5.3307,169600.0,<1H OCEAN +-117.78,33.88,16.0,1800.0,238.0,871.0,234.0,6.6678,301900.0,<1H OCEAN +-117.78,33.9,14.0,6239.0,901.0,2923.0,904.0,6.5437,268200.0,<1H OCEAN +-117.82,33.9,25.0,1137.0,170.0,524.0,164.0,7.5744,259300.0,<1H OCEAN +-117.8,33.9,22.0,3760.0,482.0,1485.0,461.0,7.8537,354900.0,<1H OCEAN +-117.74,33.89,4.0,37937.0,5471.0,16122.0,5189.0,7.4947,366300.0,<1H OCEAN +-117.76,33.88,9.0,4838.0,759.0,2090.0,695.0,6.6536,307800.0,<1H OCEAN +-117.77,33.88,8.0,4874.0,627.0,2070.0,619.0,8.1117,410200.0,<1H OCEAN +-117.78,33.89,7.0,9729.0,1210.0,4160.0,1214.0,8.9088,415300.0,<1H OCEAN +-117.8,33.85,23.0,3038.0,470.0,1568.0,438.0,5.6403,233000.0,<1H OCEAN +-117.82,33.85,21.0,2603.0,404.0,1350.0,390.0,6.057,235900.0,<1H OCEAN +-117.82,33.85,18.0,1810.0,305.0,1189.0,326.0,5.2227,213500.0,<1H OCEAN +-117.8,33.85,16.0,4151.0,637.0,1558.0,604.0,5.806,304900.0,<1H OCEAN +-117.82,33.84,25.0,1788.0,203.0,676.0,217.0,10.1299,454300.0,<1H OCEAN +-117.81,33.84,17.0,4343.0,515.0,1605.0,484.0,10.5981,460100.0,<1H OCEAN +-117.79,33.84,9.0,10484.0,1603.0,4005.0,1419.0,8.3931,365300.0,<1H OCEAN +-117.78,33.85,16.0,3781.0,504.0,1665.0,499.0,7.2554,335600.0,<1H OCEAN +-117.78,33.86,16.0,4390.0,660.0,2146.0,633.0,6.1504,266000.0,<1H OCEAN +-117.76,33.87,16.0,3182.0,429.0,1663.0,428.0,7.0592,288200.0,<1H OCEAN +-117.78,33.81,23.0,1986.0,278.0,826.0,260.0,7.7752,380000.0,<1H OCEAN +-117.77,33.8,16.0,3973.0,483.0,1373.0,452.0,9.8074,417000.0,<1H OCEAN +-117.8,33.79,13.0,2021.0,362.0,1081.0,341.0,4.3269,231400.0,<1H OCEAN +-117.79,33.8,11.0,10535.0,1620.0,4409.0,1622.0,6.67,283200.0,<1H OCEAN +-117.77,33.85,13.0,5415.0,827.0,2061.0,714.0,7.3681,353100.0,<1H OCEAN +-117.76,33.84,15.0,3764.0,510.0,1448.0,468.0,8.7124,410500.0,<1H OCEAN +-117.75,33.84,16.0,3491.0,502.0,1496.0,509.0,6.6207,270500.0,<1H OCEAN +-117.76,33.83,15.0,3086.0,457.0,1262.0,436.0,6.4415,300700.0,<1H OCEAN +-117.77,33.84,5.0,4380.0,715.0,1913.0,741.0,6.7274,266400.0,<1H OCEAN +-117.76,33.86,14.0,3666.0,442.0,1400.0,433.0,10.1316,500001.0,<1H OCEAN +-117.75,33.83,14.0,2452.0,296.0,954.0,275.0,8.2375,388300.0,<1H OCEAN +-117.74,33.85,4.0,5416.0,820.0,1753.0,583.0,6.9544,314000.0,<1H OCEAN +-117.78,33.82,12.0,6208.0,750.0,2443.0,739.0,9.1808,413700.0,<1H OCEAN +-117.76,33.81,2.0,582.0,70.0,199.0,64.0,7.1193,500001.0,<1H OCEAN +-117.81,33.8,25.0,2765.0,475.0,1666.0,474.0,6.0531,230700.0,<1H OCEAN +-117.81,33.79,25.0,5950.0,1155.0,4528.0,1064.0,4.2564,204600.0,<1H OCEAN +-117.8,33.81,14.0,1206.0,142.0,572.0,149.0,8.847,388700.0,<1H OCEAN +-117.8,33.78,18.0,3548.0,474.0,1506.0,449.0,6.925,290300.0,<1H OCEAN +-117.8,33.78,17.0,4138.0,805.0,2442.0,780.0,4.7804,242000.0,<1H OCEAN +-117.69,33.8,5.0,3178.0,631.0,1467.0,581.0,5.2541,237100.0,<1H OCEAN +-117.66,33.61,16.0,2022.0,254.0,789.0,270.0,8.4112,286900.0,<1H OCEAN +-117.66,33.62,16.0,4065.0,661.0,1962.0,636.0,6.2177,256600.0,<1H OCEAN +-117.67,33.61,24.0,3859.0,661.0,1972.0,624.0,5.7871,227400.0,<1H OCEAN +-117.66,33.61,17.0,3464.0,519.0,1713.0,530.0,6.0471,248400.0,<1H OCEAN +-117.66,33.61,21.0,1932.0,266.0,860.0,286.0,7.1497,274000.0,<1H OCEAN +-117.66,33.6,24.0,1684.0,232.0,781.0,230.0,6.8667,279600.0,<1H OCEAN +-117.66,33.6,25.0,3745.0,522.0,1648.0,496.0,7.5488,278100.0,<1H OCEAN +-117.67,33.61,23.0,3588.0,577.0,1695.0,569.0,6.1401,243200.0,<1H OCEAN +-117.68,33.63,16.0,5218.0,1187.0,2701.0,1125.0,3.929,143100.0,<1H OCEAN +-117.68,33.63,13.0,5830.0,921.0,2897.0,891.0,6.2403,257400.0,<1H OCEAN +-117.67,33.63,9.0,5774.0,1320.0,3086.0,1265.0,4.4063,202200.0,<1H OCEAN +-117.62,33.77,43.0,1911.0,439.0,930.0,433.0,4.6369,186400.0,<1H OCEAN +-117.6,33.72,36.0,1317.0,228.0,531.0,214.0,5.6346,272500.0,<1H OCEAN +-117.67,33.6,25.0,3164.0,449.0,1517.0,453.0,6.7921,266000.0,<1H OCEAN +-117.66,33.59,18.0,4552.0,706.0,1918.0,671.0,7.5791,288100.0,<1H OCEAN +-117.67,33.6,20.0,1213.0,171.0,565.0,170.0,7.2592,314800.0,<1H OCEAN +-117.66,33.58,16.0,3016.0,394.0,1172.0,382.0,7.5196,315600.0,<1H OCEAN +-117.67,33.57,18.0,1614.0,210.0,692.0,209.0,7.9294,280300.0,<1H OCEAN +-117.66,33.57,16.0,4277.0,565.0,1642.0,549.0,8.0082,286600.0,<1H OCEAN +-117.7,33.62,16.0,9653.0,2000.0,4732.0,1922.0,3.7361,197200.0,<1H OCEAN +-117.69,33.62,18.0,4265.0,581.0,2025.0,544.0,6.4598,282700.0,<1H OCEAN +-117.68,33.61,19.0,2962.0,405.0,1295.0,440.0,6.0689,248000.0,<1H OCEAN +-117.69,33.61,16.0,3010.0,580.0,1649.0,538.0,4.0221,236200.0,<1H OCEAN +-117.68,33.6,19.0,3913.0,460.0,1646.0,454.0,7.2147,303900.0,<1H OCEAN +-117.65,33.65,16.0,1538.0,260.0,835.0,259.0,5.5779,234800.0,<1H OCEAN +-117.66,33.64,17.0,3173.0,501.0,1555.0,520.0,6.7079,250800.0,<1H OCEAN +-117.67,33.64,11.0,2722.0,554.0,1565.0,508.0,5.1645,164100.0,<1H OCEAN +-117.66,33.65,13.0,8527.0,1364.0,4597.0,1393.0,6.2242,237900.0,<1H OCEAN +-117.65,33.65,15.0,3485.0,519.0,1740.0,485.0,6.7543,251900.0,<1H OCEAN +-117.65,33.63,16.0,3388.0,425.0,1395.0,427.0,8.4471,351300.0,<1H OCEAN +-117.65,33.65,15.0,4713.0,671.0,2197.0,673.0,7.5426,294800.0,<1H OCEAN +-117.66,33.63,16.0,3299.0,610.0,1967.0,604.0,5.5085,223300.0,<1H OCEAN +-117.63,33.65,10.0,3580.0,491.0,1688.0,467.0,7.7814,288700.0,<1H OCEAN +-117.62,33.64,2.0,7826.0,893.0,2985.0,790.0,10.1531,484100.0,<1H OCEAN +-117.64,33.63,10.0,4814.0,643.0,1808.0,588.0,8.798,436600.0,<1H OCEAN +-117.64,33.64,11.0,2422.0,429.0,810.0,395.0,6.1935,293200.0,<1H OCEAN +-117.64,33.65,4.0,6842.0,1512.0,3256.0,1439.0,5.4132,216600.0,<1H OCEAN +-117.63,33.62,9.0,4257.0,785.0,1293.0,745.0,3.7139,196700.0,<1H OCEAN +-117.63,33.63,6.0,3068.0,549.0,985.0,536.0,4.2009,238000.0,<1H OCEAN +-117.65,33.62,15.0,2708.0,410.0,1140.0,389.0,6.2899,275000.0,<1H OCEAN +-117.64,33.62,16.0,3970.0,771.0,1202.0,734.0,3.4115,184800.0,<1H OCEAN +-117.66,33.62,16.0,5175.0,799.0,2717.0,813.0,6.1493,257800.0,<1H OCEAN +-117.65,33.6,15.0,5736.0,,2529.0,762.0,6.4114,278700.0,<1H OCEAN +-117.64,33.61,14.0,5232.0,810.0,3041.0,839.0,5.826,247900.0,<1H OCEAN +-117.65,33.6,13.0,2319.0,430.0,1004.0,380.0,5.133,316100.0,<1H OCEAN +-117.64,33.59,4.0,3274.0,383.0,1312.0,390.0,8.1611,348000.0,<1H OCEAN +-117.66,33.58,6.0,4186.0,,1794.0,541.0,9.6986,357600.0,<1H OCEAN +-117.65,33.57,5.0,1998.0,500.0,1185.0,446.0,4.3542,195600.0,<1H OCEAN +-117.65,33.58,2.0,2411.0,354.0,703.0,217.0,7.8061,331400.0,<1H OCEAN +-117.66,33.57,16.0,2483.0,443.0,1357.0,400.0,5.5545,214200.0,<1H OCEAN +-117.65,33.59,8.0,2649.0,340.0,1238.0,354.0,8.0409,337900.0,<1H OCEAN +-117.67,33.54,16.0,2102.0,350.0,1003.0,328.0,4.7981,170800.0,<1H OCEAN +-117.67,33.54,15.0,2423.0,435.0,1366.0,423.0,4.8906,181800.0,<1H OCEAN +-117.67,33.55,6.0,3157.0,721.0,1695.0,710.0,3.7609,222300.0,<1H OCEAN +-117.67,33.56,4.0,3289.0,728.0,1345.0,632.0,4.6863,184400.0,<1H OCEAN +-117.64,33.51,15.0,1743.0,254.0,943.0,274.0,5.9339,286000.0,<1H OCEAN +-117.64,33.51,14.0,1343.0,175.0,650.0,184.0,7.2648,363200.0,<1H OCEAN +-117.55,33.52,15.0,426.0,62.0,133.0,45.0,5.136,447400.0,<1H OCEAN +-117.59,33.61,3.0,2993.0,429.0,991.0,390.0,10.0765,378200.0,<1H OCEAN +-117.58,33.6,5.0,5348.0,659.0,1862.0,555.0,11.0567,495400.0,<1H OCEAN +-117.49,33.64,3.0,8874.0,1302.0,3191.0,1027.0,6.8588,302000.0,<1H OCEAN +-117.59,33.67,29.0,1223.0,215.0,633.0,204.0,6.5143,279800.0,<1H OCEAN +-117.53,33.69,6.0,454.0,102.0,213.0,43.0,10.9704,483300.0,<1H OCEAN +-117.59,33.66,3.0,1206.0,256.0,563.0,287.0,5.1589,167800.0,<1H OCEAN +-117.58,33.66,4.0,3305.0,644.0,1693.0,597.0,5.2497,215000.0,<1H OCEAN +-117.58,33.65,4.0,2000.0,422.0,833.0,386.0,5.7709,190300.0,<1H OCEAN +-117.59,33.66,4.0,1318.0,218.0,673.0,225.0,6.0722,260800.0,<1H OCEAN +-117.59,33.65,2.0,4860.0,1193.0,2332.0,1073.0,4.5022,151900.0,<1H OCEAN +-117.6,33.65,4.0,3134.0,504.0,1599.0,485.0,6.2464,233900.0,<1H OCEAN +-117.61,33.67,3.0,4541.0,720.0,1600.0,583.0,6.8004,284900.0,<1H OCEAN +-117.64,33.66,6.0,5221.0,1217.0,2597.0,1119.0,4.6076,204000.0,<1H OCEAN +-117.59,33.65,4.0,1793.0,390.0,897.0,386.0,4.2463,182800.0,<1H OCEAN +-117.58,33.65,4.0,1606.0,498.0,815.0,426.0,3.375,500001.0,<1H OCEAN +-117.61,33.63,2.0,4678.0,817.0,1970.0,712.0,6.1078,219000.0,<1H OCEAN +-117.65,33.53,7.0,6814.0,785.0,2175.0,681.0,10.49,500001.0,<1H OCEAN +-117.62,33.42,23.0,2656.0,515.0,998.0,435.0,4.0294,500001.0,NEAR OCEAN +-117.63,33.38,12.0,5744.0,1054.0,2104.0,847.0,5.1482,500001.0,NEAR OCEAN +-117.61,33.41,35.0,2556.0,404.0,946.0,399.0,6.1557,402900.0,NEAR OCEAN +-117.61,33.42,31.0,3959.0,856.0,1919.0,775.0,4.0313,282000.0,NEAR OCEAN +-117.6,33.41,29.0,2193.0,389.0,922.0,387.0,4.5476,309200.0,NEAR OCEAN +-117.62,33.47,4.0,1812.0,255.0,661.0,211.0,6.487,294200.0,NEAR OCEAN +-117.63,33.45,5.0,3549.0,604.0,1571.0,534.0,5.3705,363500.0,NEAR OCEAN +-117.63,33.47,4.0,1969.0,280.0,805.0,271.0,7.6012,310800.0,NEAR OCEAN +-117.61,33.45,6.0,950.0,184.0,426.0,186.0,4.7237,220700.0,NEAR OCEAN +-117.63,33.46,7.0,7684.0,1088.0,2812.0,1057.0,6.3401,387300.0,NEAR OCEAN +-117.64,33.45,26.0,1528.0,,607.0,218.0,6.2871,325500.0,NEAR OCEAN +-117.65,33.42,25.0,2174.0,428.0,603.0,352.0,3.3967,249400.0,NEAR OCEAN +-117.64,33.45,27.0,334.0,56.0,130.0,46.0,4.875,284100.0,NEAR OCEAN +-117.62,33.43,27.0,1835.0,413.0,1221.0,377.0,3.2232,247100.0,NEAR OCEAN +-117.62,33.43,27.0,3858.0,1062.0,2321.0,873.0,3.3155,231000.0,NEAR OCEAN +-117.62,33.43,24.0,1296.0,384.0,850.0,367.0,2.7545,231300.0,NEAR OCEAN +-117.65,33.4,17.0,2737.0,654.0,910.0,492.0,3.5729,370800.0,NEAR OCEAN +-117.62,33.43,23.0,4052.0,955.0,1950.0,859.0,4.0647,240600.0,NEAR OCEAN +-117.61,33.43,33.0,1150.0,383.0,604.0,317.0,2.3545,187500.0,NEAR OCEAN +-117.62,33.42,27.0,1005.0,266.0,460.0,243.0,3.1029,190600.0,NEAR OCEAN +-117.62,33.42,27.0,1444.0,412.0,597.0,311.0,3.1395,310000.0,NEAR OCEAN +-117.6,33.45,4.0,2369.0,566.0,996.0,435.0,5.4031,243800.0,NEAR OCEAN +-117.59,33.44,3.0,5813.0,1264.0,2363.0,1041.0,4.3897,341300.0,NEAR OCEAN +-117.59,33.4,22.0,3167.0,743.0,1797.0,642.0,4.0076,252100.0,NEAR OCEAN +-117.59,33.41,17.0,2248.0,448.0,878.0,423.0,5.1298,246000.0,NEAR OCEAN +-117.6,33.42,23.0,2482.0,461.0,1048.0,425.0,4.665,280600.0,NEAR OCEAN +-117.61,33.43,24.0,2303.0,399.0,851.0,379.0,3.9875,346500.0,NEAR OCEAN +-117.6,33.43,21.0,3951.0,562.0,1392.0,543.0,5.1439,414000.0,NEAR OCEAN +-117.61,33.44,17.0,2036.0,272.0,713.0,265.0,6.5954,346200.0,NEAR OCEAN +-117.59,33.43,14.0,3223.0,484.0,1230.0,488.0,6.5964,358800.0,NEAR OCEAN +-117.67,33.47,22.0,2728.0,616.0,1081.0,566.0,1.6393,500001.0,<1H OCEAN +-117.67,33.46,24.0,3571.0,722.0,1409.0,543.0,4.6518,277800.0,<1H OCEAN +-117.67,33.44,25.0,2994.0,519.0,903.0,410.0,6.6852,500001.0,<1H OCEAN +-117.67,33.46,18.0,1679.0,271.0,783.0,257.0,5.3999,300000.0,<1H OCEAN +-117.66,33.46,26.0,2073.0,370.0,952.0,340.0,5.0877,288100.0,<1H OCEAN +-117.66,33.46,28.0,1261.0,233.0,609.0,242.0,5.1024,312700.0,<1H OCEAN +-117.66,33.48,22.0,809.0,180.0,334.0,157.0,2.3846,500001.0,<1H OCEAN +-117.65,33.49,16.0,2223.0,454.0,628.0,382.0,4.3603,248800.0,<1H OCEAN +-117.64,33.49,3.0,2516.0,429.0,781.0,337.0,5.6197,271600.0,<1H OCEAN +-117.65,33.48,10.0,3484.0,582.0,1469.0,556.0,5.4188,402200.0,<1H OCEAN +-117.65,33.48,6.0,1638.0,188.0,572.0,174.0,13.0502,500001.0,<1H OCEAN +-117.63,33.5,12.0,3619.0,536.0,1506.0,492.0,7.2013,353600.0,<1H OCEAN +-117.63,33.47,4.0,2320.0,405.0,1408.0,477.0,6.3369,256000.0,NEAR OCEAN +-117.65,33.46,19.0,7034.0,1139.0,2824.0,1068.0,6.0873,277300.0,<1H OCEAN +-117.64,33.48,12.0,2007.0,397.0,1033.0,373.0,5.6754,275900.0,<1H OCEAN +-117.65,33.45,15.0,7468.0,1275.0,3033.0,1217.0,5.49,239300.0,NEAR OCEAN +-117.73,33.49,31.0,5112.0,778.0,1530.0,648.0,10.3983,500001.0,<1H OCEAN +-117.76,33.48,38.0,3832.0,809.0,1332.0,636.0,5.0044,381200.0,<1H OCEAN +-117.74,33.51,29.0,1720.0,269.0,612.0,258.0,7.8239,500001.0,<1H OCEAN +-117.73,33.53,3.0,6388.0,920.0,2129.0,819.0,7.8915,420600.0,<1H OCEAN +-117.72,33.54,13.0,4866.0,812.0,1909.0,733.0,4.9821,244800.0,<1H OCEAN +-117.72,33.53,14.0,1672.0,295.0,704.0,293.0,5.1129,251300.0,<1H OCEAN +-117.72,33.51,17.0,3617.0,597.0,1176.0,571.0,5.133,324000.0,<1H OCEAN +-117.72,33.49,4.0,3623.0,734.0,1129.0,530.0,5.7281,500001.0,<1H OCEAN +-117.73,33.49,17.0,2168.0,290.0,654.0,279.0,9.8321,500001.0,<1H OCEAN +-117.73,33.51,5.0,4549.0,786.0,1238.0,632.0,6.1785,295900.0,<1H OCEAN +-117.69,33.6,19.0,3562.0,439.0,1584.0,470.0,6.4211,288100.0,<1H OCEAN +-117.68,33.6,24.0,1956.0,262.0,969.0,256.0,6.8154,265900.0,<1H OCEAN +-117.69,33.6,17.0,2150.0,361.0,1194.0,335.0,5.4622,227000.0,<1H OCEAN +-117.7,33.6,16.0,2092.0,489.0,877.0,392.0,3.0461,216900.0,<1H OCEAN +-117.69,33.6,16.0,2205.0,393.0,1333.0,402.0,3.475,279500.0,<1H OCEAN +-117.69,33.6,12.0,3258.0,421.0,1464.0,435.0,6.5413,332000.0,<1H OCEAN +-117.69,33.59,13.0,3320.0,426.0,1432.0,431.0,7.9283,348100.0,<1H OCEAN +-117.68,33.59,12.0,3473.0,466.0,1569.0,450.0,8.8636,314000.0,<1H OCEAN +-117.69,33.58,5.0,6678.0,1011.0,2877.0,982.0,7.5177,330000.0,<1H OCEAN +-117.68,33.59,8.0,2327.0,263.0,899.0,236.0,14.9009,500001.0,<1H OCEAN +-117.69,33.58,8.0,2887.0,351.0,1176.0,351.0,10.3953,500001.0,<1H OCEAN +-117.68,33.47,7.0,4458.0,731.0,1731.0,704.0,6.126,285600.0,<1H OCEAN +-117.68,33.48,15.0,1786.0,299.0,727.0,293.0,5.0527,231400.0,<1H OCEAN +-117.68,33.49,17.0,2232.0,372.0,1072.0,385.0,4.245,214500.0,<1H OCEAN +-117.68,33.49,16.0,3084.0,724.0,2557.0,690.0,2.8357,106300.0,<1H OCEAN +-117.67,33.49,15.0,2782.0,579.0,983.0,525.0,2.1935,183300.0,<1H OCEAN +-117.67,33.49,10.0,366.0,61.0,128.0,61.0,8.163,250000.0,<1H OCEAN +-117.68,33.51,19.0,2930.0,428.0,1481.0,430.0,6.323,480800.0,<1H OCEAN +-117.68,33.49,18.0,4173.0,625.0,1649.0,634.0,6.3568,294300.0,<1H OCEAN +-117.69,33.48,25.0,3240.0,481.0,1462.0,497.0,6.1815,288500.0,<1H OCEAN +-117.69,33.47,13.0,2020.0,378.0,679.0,290.0,5.756,305600.0,<1H OCEAN +-117.66,33.51,18.0,2626.0,,1302.0,522.0,4.0167,189600.0,<1H OCEAN +-117.66,33.5,16.0,1956.0,346.0,862.0,326.0,4.4732,186300.0,<1H OCEAN +-117.67,33.51,17.0,2112.0,480.0,1893.0,433.0,4.0388,120400.0,<1H OCEAN +-117.67,33.51,18.0,1645.0,393.0,1490.0,355.0,3.4792,126400.0,<1H OCEAN +-117.67,33.51,19.0,1258.0,246.0,545.0,227.0,2.9762,184400.0,<1H OCEAN +-117.69,33.47,23.0,3499.0,722.0,1480.0,634.0,3.86,300000.0,<1H OCEAN +-117.7,33.47,20.0,1577.0,363.0,764.0,333.0,4.1563,320800.0,<1H OCEAN +-117.7,33.47,21.0,2208.0,534.0,1423.0,482.0,3.5915,305600.0,<1H OCEAN +-117.69,33.47,19.0,2595.0,621.0,1728.0,571.0,3.668,243800.0,<1H OCEAN +-117.7,33.47,21.0,1857.0,399.0,881.0,380.0,3.8403,350000.0,<1H OCEAN +-117.72,33.43,5.0,1889.0,359.0,616.0,246.0,3.8992,500001.0,<1H OCEAN +-117.68,33.55,5.0,2262.0,427.0,1016.0,402.0,6.065,315500.0,<1H OCEAN +-117.68,33.54,5.0,2840.0,403.0,1363.0,403.0,7.618,341400.0,<1H OCEAN +-117.68,33.52,5.0,3621.0,632.0,1546.0,567.0,5.753,322800.0,<1H OCEAN +-117.69,33.55,9.0,3856.0,571.0,1646.0,576.0,6.8007,318300.0,<1H OCEAN +-117.69,33.54,20.0,1767.0,280.0,801.0,284.0,6.5394,272000.0,<1H OCEAN +-117.69,33.53,17.0,5041.0,778.0,2396.0,801.0,6.0868,282900.0,<1H OCEAN +-117.69,33.52,4.0,2142.0,625.0,1176.0,483.0,3.4455,325000.0,<1H OCEAN +-117.7,33.51,2.0,5261.0,763.0,1460.0,599.0,6.8279,279000.0,<1H OCEAN +-117.69,33.52,3.0,7374.0,1444.0,3214.0,1279.0,4.538,278200.0,<1H OCEAN +-117.7,33.53,5.0,6698.0,1254.0,2834.0,1139.0,5.9088,288500.0,<1H OCEAN +-117.71,33.52,17.0,2486.0,417.0,876.0,361.0,6.1007,340900.0,<1H OCEAN +-117.71,33.51,11.0,2198.0,252.0,883.0,281.0,13.1477,487000.0,<1H OCEAN +-117.71,33.51,12.0,4676.0,698.0,1543.0,598.0,6.379,500001.0,<1H OCEAN +-117.68,33.57,2.0,10008.0,1453.0,3550.0,1139.0,10.1122,500001.0,<1H OCEAN +-117.69,33.55,4.0,1764.0,220.0,705.0,224.0,8.3275,384200.0,<1H OCEAN +-117.69,33.55,3.0,1618.0,266.0,710.0,246.0,6.0743,274300.0,<1H OCEAN +-117.7,33.54,4.0,4956.0,693.0,1802.0,625.0,7.9338,354700.0,<1H OCEAN +-117.7,33.55,12.0,2459.0,390.0,1054.0,391.0,7.1736,262100.0,<1H OCEAN +-117.7,33.56,2.0,2112.0,305.0,703.0,261.0,6.9343,298500.0,<1H OCEAN +-117.7,33.56,3.0,2443.0,637.0,1033.0,548.0,4.1379,183300.0,<1H OCEAN +-117.7,33.57,4.0,3283.0,911.0,1512.0,782.0,3.3125,138500.0,<1H OCEAN +-117.71,33.54,7.0,4907.0,577.0,1883.0,556.0,10.4415,453800.0,<1H OCEAN +-117.71,33.54,15.0,2460.0,368.0,962.0,320.0,7.3878,318300.0,<1H OCEAN +-117.71,33.58,2.0,2530.0,562.0,1066.0,510.0,4.6336,187500.0,<1H OCEAN +-117.7,33.57,9.0,1204.0,355.0,469.0,293.0,3.6196,119900.0,<1H OCEAN +-117.71,33.57,4.0,3289.0,753.0,1285.0,651.0,4.045,226000.0,<1H OCEAN +-117.71,33.57,6.0,3673.0,881.0,1846.0,768.0,4.877,144300.0,<1H OCEAN +-117.68,33.51,4.0,2428.0,401.0,959.0,386.0,6.2661,268500.0,<1H OCEAN +-117.69,33.51,4.0,1223.0,275.0,505.0,244.0,4.6607,173000.0,<1H OCEAN +-117.7,33.5,4.0,2351.0,445.0,834.0,397.0,5.5677,245400.0,<1H OCEAN +-117.71,33.49,5.0,1680.0,254.0,617.0,231.0,8.583,397700.0,<1H OCEAN +-117.7,33.5,4.0,7474.0,1037.0,2969.0,1007.0,8.7591,434700.0,<1H OCEAN +-117.7,33.48,10.0,3458.0,638.0,1156.0,470.0,6.3579,336700.0,<1H OCEAN +-117.7,33.48,6.0,16590.0,2696.0,6223.0,2357.0,6.3088,340300.0,<1H OCEAN +-117.71,33.47,14.0,3894.0,672.0,1490.0,629.0,6.5206,368500.0,<1H OCEAN +-117.74,33.46,9.0,6564.0,1316.0,1720.0,904.0,4.89,454100.0,<1H OCEAN +-117.71,33.47,17.0,2681.0,454.0,830.0,410.0,5.5507,345700.0,<1H OCEAN +-117.7,33.68,29.0,5650.0,1084.0,3985.0,1056.0,2.8192,162500.0,<1H OCEAN +-117.76,33.71,14.0,4321.0,582.0,2025.0,578.0,8.3634,355100.0,<1H OCEAN +-117.75,33.71,15.0,2849.0,537.0,878.0,520.0,3.2841,158300.0,<1H OCEAN +-117.76,33.7,12.0,4025.0,574.0,2042.0,588.0,7.9125,344900.0,<1H OCEAN +-117.77,33.71,15.0,2102.0,295.0,1060.0,303.0,7.3141,337100.0,<1H OCEAN +-117.77,33.7,3.0,3636.0,749.0,1486.0,696.0,5.5464,207500.0,<1H OCEAN +-117.77,33.7,4.0,2446.0,622.0,1315.0,560.0,3.7147,137500.0,<1H OCEAN +-117.69,33.65,16.0,5805.0,852.0,2356.0,795.0,6.1062,274600.0,<1H OCEAN +-117.71,33.65,16.0,3774.0,456.0,1587.0,430.0,8.6088,307400.0,<1H OCEAN +-117.7,33.65,16.0,3388.0,492.0,1249.0,463.0,6.1863,355600.0,<1H OCEAN +-117.71,33.64,14.0,2945.0,356.0,1293.0,335.0,8.111,308900.0,<1H OCEAN +-117.71,33.63,16.0,1565.0,274.0,950.0,280.0,5.8399,220600.0,<1H OCEAN +-117.71,33.63,16.0,2497.0,500.0,1357.0,456.0,4.5909,241800.0,<1H OCEAN +-117.71,33.63,16.0,1641.0,354.0,945.0,318.0,3.4261,219700.0,<1H OCEAN +-117.7,33.63,16.0,4428.0,745.0,1525.0,682.0,5.2325,286800.0,<1H OCEAN +-117.72,33.64,16.0,1230.0,242.0,380.0,246.0,2.2969,67500.0,<1H OCEAN +-117.7,33.62,19.0,2957.0,492.0,1639.0,495.0,5.0686,225600.0,<1H OCEAN +-117.7,33.63,23.0,3038.0,473.0,1501.0,436.0,5.5584,241700.0,<1H OCEAN +-117.71,33.62,22.0,2520.0,387.0,1338.0,391.0,5.8898,242800.0,<1H OCEAN +-117.76,33.72,11.0,4508.0,618.0,1993.0,573.0,10.4498,386100.0,<1H OCEAN +-117.76,33.72,14.0,3011.0,388.0,1359.0,371.0,7.9739,368700.0,<1H OCEAN +-117.75,33.72,10.0,2464.0,347.0,1241.0,366.0,8.7603,362500.0,<1H OCEAN +-117.76,33.72,15.0,941.0,266.0,366.0,248.0,4.3636,148400.0,<1H OCEAN +-117.76,33.71,15.0,1010.0,350.0,470.0,342.0,3.2229,108300.0,<1H OCEAN +-117.74,33.73,18.0,328.0,68.0,391.0,60.0,4.1167,87500.0,<1H OCEAN +-117.69,33.66,11.0,2630.0,327.0,1256.0,352.0,8.2953,350500.0,<1H OCEAN +-117.69,33.66,5.0,4246.0,689.0,1933.0,722.0,6.9501,225700.0,<1H OCEAN +-117.67,33.67,5.0,10534.0,2035.0,4656.0,1863.0,5.7797,309200.0,<1H OCEAN +-117.67,33.66,4.0,10175.0,2181.0,4762.0,1929.0,4.7341,237400.0,<1H OCEAN +-117.68,33.65,6.0,10395.0,1915.0,4783.0,1811.0,5.928,239900.0,<1H OCEAN +-117.64,33.68,4.0,5687.0,970.0,2677.0,938.0,6.5069,243400.0,<1H OCEAN +-117.7,33.72,6.0,211.0,51.0,125.0,44.0,1.9659,500001.0,<1H OCEAN +-117.69,33.65,15.0,5394.0,748.0,2383.0,706.0,7.5619,302000.0,<1H OCEAN +-117.7,33.64,15.0,5743.0,773.0,2380.0,773.0,8.1926,326600.0,<1H OCEAN +-117.69,33.63,23.0,1444.0,260.0,792.0,253.0,4.9079,273800.0,<1H OCEAN +-117.69,33.64,18.0,3783.0,654.0,1843.0,623.0,5.7559,215800.0,<1H OCEAN +-117.69,33.64,16.0,2592.0,372.0,1279.0,383.0,6.9741,262000.0,<1H OCEAN +-117.82,33.71,9.0,5206.0,992.0,4660.0,978.0,2.885,162500.0,<1H OCEAN +-117.82,33.72,24.0,3260.0,458.0,1383.0,442.0,6.5987,272800.0,<1H OCEAN +-117.81,33.73,17.0,1063.0,189.0,363.0,183.0,2.1719,261300.0,<1H OCEAN +-117.8,33.72,16.0,2617.0,506.0,1317.0,511.0,4.821,201400.0,<1H OCEAN +-117.81,33.71,16.0,2666.0,387.0,1227.0,347.0,7.3769,302400.0,<1H OCEAN +-117.82,33.72,24.0,3477.0,462.0,1593.0,484.0,6.8634,276500.0,<1H OCEAN +-117.77,33.7,15.0,1392.0,267.0,681.0,263.0,5.4248,187200.0,<1H OCEAN +-117.77,33.69,14.0,1413.0,372.0,744.0,338.0,3.7988,184100.0,<1H OCEAN +-117.77,33.69,15.0,500.0,113.0,261.0,116.0,5.0631,154000.0,<1H OCEAN +-117.77,33.69,16.0,1666.0,341.0,479.0,336.0,2.1406,55000.0,<1H OCEAN +-117.78,33.69,16.0,4702.0,806.0,2529.0,814.0,5.1299,238900.0,<1H OCEAN +-117.78,33.68,19.0,2500.0,331.0,1027.0,327.0,6.115,315600.0,<1H OCEAN +-117.78,33.69,16.0,3400.0,501.0,1575.0,488.0,6.0961,295500.0,<1H OCEAN +-117.8,33.69,16.0,2745.0,447.0,1429.0,411.0,6.8219,325500.0,<1H OCEAN +-117.79,33.69,16.0,1532.0,240.0,679.0,248.0,5.7115,313900.0,<1H OCEAN +-117.79,33.68,16.0,1998.0,308.0,818.0,299.0,6.8722,326100.0,<1H OCEAN +-117.8,33.68,14.0,2635.0,516.0,1150.0,499.0,4.4391,306700.0,<1H OCEAN +-117.8,33.69,14.0,1800.0,362.0,874.0,373.0,4.2083,251000.0,<1H OCEAN +-117.8,33.69,15.0,2099.0,322.0,873.0,307.0,7.9887,328000.0,<1H OCEAN +-117.8,33.68,5.0,623.0,146.0,396.0,136.0,3.631,225000.0,<1H OCEAN +-117.8,33.68,8.0,2032.0,349.0,862.0,340.0,6.9133,274100.0,<1H OCEAN +-117.81,33.67,8.0,2098.0,342.0,908.0,329.0,7.7589,342900.0,<1H OCEAN +-117.81,33.67,8.0,2440.0,502.0,1113.0,483.0,4.6019,242500.0,<1H OCEAN +-117.81,33.67,9.0,1567.0,299.0,675.0,294.0,5.2124,199600.0,<1H OCEAN +-117.81,33.67,9.0,2435.0,396.0,1194.0,385.0,7.2025,275000.0,<1H OCEAN +-117.81,33.67,9.0,3279.0,530.0,1447.0,510.0,7.4581,296600.0,<1H OCEAN +-117.81,33.68,8.0,1964.0,413.0,913.0,406.0,5.1583,192200.0,<1H OCEAN +-117.78,33.68,15.0,1834.0,330.0,841.0,309.0,6.0634,234300.0,<1H OCEAN +-117.78,33.68,14.0,1750.0,336.0,852.0,300.0,4.6793,236800.0,<1H OCEAN +-117.79,33.68,13.0,2636.0,416.0,1137.0,404.0,7.2118,311500.0,<1H OCEAN +-117.78,33.68,11.0,1994.0,477.0,849.0,411.0,4.0187,235600.0,<1H OCEAN +-117.79,33.68,9.0,1633.0,295.0,928.0,297.0,5.7858,265900.0,<1H OCEAN +-117.79,33.68,10.0,2106.0,319.0,1002.0,332.0,8.735,375300.0,<1H OCEAN +-117.8,33.67,5.0,2638.0,521.0,1179.0,480.0,5.7759,240000.0,<1H OCEAN +-117.8,33.67,5.0,2487.0,388.0,1147.0,397.0,8.284,302500.0,<1H OCEAN +-117.8,33.67,4.0,3345.0,552.0,1525.0,539.0,6.7962,329100.0,<1H OCEAN +-117.81,33.69,5.0,1256.0,256.0,880.0,288.0,2.4233,450000.0,<1H OCEAN +-117.81,33.68,4.0,1545.0,304.0,788.0,296.0,4.5469,500001.0,<1H OCEAN +-117.82,33.68,4.0,1346.0,213.0,603.0,219.0,8.7974,360600.0,<1H OCEAN +-117.82,33.68,3.0,3068.0,494.0,1357.0,486.0,7.9187,333600.0,<1H OCEAN +-117.82,33.67,17.0,2895.0,439.0,1588.0,450.0,6.276,290700.0,<1H OCEAN +-117.83,33.68,4.0,3226.0,838.0,1666.0,800.0,4.1652,184500.0,<1H OCEAN +-117.82,33.68,3.0,7105.0,1459.0,3068.0,1241.0,6.1395,358000.0,<1H OCEAN +-117.77,33.67,12.0,4329.0,1068.0,1913.0,978.0,4.5094,160200.0,<1H OCEAN +-117.77,33.72,10.0,2815.0,431.0,1181.0,398.0,6.5743,278700.0,<1H OCEAN +-117.77,33.72,9.0,2153.0,316.0,954.0,324.0,7.8139,304700.0,<1H OCEAN +-117.77,33.71,13.0,1939.0,247.0,928.0,244.0,8.1111,379800.0,<1H OCEAN +-117.77,33.71,5.0,4050.0,584.0,1986.0,598.0,7.5847,375700.0,<1H OCEAN +-117.77,33.71,4.0,1646.0,321.0,859.0,300.0,5.5631,227800.0,<1H OCEAN +-117.78,33.71,16.0,2207.0,291.0,1081.0,308.0,7.3518,331200.0,<1H OCEAN +-117.78,33.71,4.0,974.0,232.0,428.0,203.0,4.6141,195400.0,<1H OCEAN +-117.79,33.73,3.0,8240.0,1410.0,3318.0,1270.0,7.2074,291300.0,<1H OCEAN +-117.78,33.7,16.0,1663.0,250.0,597.0,204.0,5.409,233900.0,<1H OCEAN +-117.79,33.7,16.0,6259.0,1098.0,3785.0,1114.0,6.3298,247100.0,<1H OCEAN +-117.79,33.71,16.0,3114.0,463.0,1641.0,469.0,6.2162,283200.0,<1H OCEAN +-117.79,33.71,16.0,6339.0,862.0,3132.0,825.0,7.1069,313400.0,<1H OCEAN +-117.79,33.7,6.0,1593.0,371.0,832.0,379.0,4.4286,239500.0,<1H OCEAN +-117.8,33.7,5.0,1549.0,378.0,735.0,355.0,5.2923,194000.0,<1H OCEAN +-117.79,33.7,16.0,1416.0,249.0,636.0,244.0,5.1741,227700.0,<1H OCEAN +-117.79,33.69,15.0,1875.0,316.0,890.0,316.0,6.5783,244800.0,<1H OCEAN +-117.79,33.69,16.0,3067.0,396.0,1275.0,372.0,8.7385,340000.0,<1H OCEAN +-117.8,33.69,13.0,1161.0,289.0,630.0,296.0,3.3438,333300.0,<1H OCEAN +-117.8,33.55,38.0,1757.0,464.0,821.0,426.0,4.1304,433300.0,<1H OCEAN +-117.79,33.56,36.0,2057.0,329.0,658.0,309.0,7.866,500001.0,<1H OCEAN +-117.81,33.56,24.0,6258.0,1003.0,1730.0,752.0,10.9601,500001.0,<1H OCEAN +-117.8,33.55,35.0,2067.0,428.0,724.0,377.0,5.8371,500001.0,<1H OCEAN +-117.77,33.6,33.0,247.0,80.0,167.0,70.0,3.7059,237500.0,<1H OCEAN +-117.8,33.53,41.0,2017.0,489.0,783.0,403.0,4.1591,500001.0,<1H OCEAN +-117.78,33.54,29.0,1421.0,462.0,520.0,339.0,2.2969,450000.0,<1H OCEAN +-117.79,33.55,39.0,5066.0,1292.0,1915.0,1117.0,3.821,452100.0,<1H OCEAN +-117.75,33.54,21.0,8711.0,1544.0,3173.0,1396.0,5.0907,378200.0,<1H OCEAN +-117.77,33.51,29.0,3590.0,772.0,1070.0,603.0,4.4464,500001.0,<1H OCEAN +-117.77,33.55,28.0,2024.0,297.0,617.0,274.0,6.7861,499100.0,<1H OCEAN +-117.73,33.57,5.0,11976.0,2495.0,4327.0,2009.0,4.8488,194400.0,<1H OCEAN +-117.86,33.67,16.0,20.0,5.0,15.0,5.0,3.875,450000.0,<1H OCEAN +-117.82,33.67,15.0,1010.0,274.0,649.0,261.0,2.5197,350000.0,<1H OCEAN +-117.83,33.67,17.0,2634.0,641.0,1454.0,560.0,3.7976,275000.0,<1H OCEAN +-117.83,33.66,15.0,2355.0,438.0,747.0,450.0,6.5356,272800.0,<1H OCEAN +-117.83,33.66,16.0,1574.0,385.0,515.0,363.0,5.3423,291700.0,<1H OCEAN +-117.81,33.67,24.0,3930.0,661.0,1831.0,616.0,6.3767,269000.0,<1H OCEAN +-117.8,33.66,16.0,2542.0,498.0,1022.0,494.0,4.0,223400.0,<1H OCEAN +-117.81,33.66,16.0,1414.0,191.0,635.0,230.0,10.0757,383900.0,<1H OCEAN +-117.81,33.66,20.0,2851.0,490.0,1192.0,463.0,5.8752,274200.0,<1H OCEAN +-117.82,33.66,24.0,4227.0,641.0,1605.0,589.0,6.4238,278400.0,<1H OCEAN +-117.84,33.64,11.0,6840.0,1689.0,6083.0,1629.0,2.4132,198300.0,<1H OCEAN +-117.87,33.61,25.0,2267.0,359.0,866.0,348.0,7.79,500001.0,<1H OCEAN +-117.86,33.61,15.0,3191.0,482.0,930.0,447.0,8.6001,500001.0,<1H OCEAN +-117.88,33.55,27.0,2278.0,316.0,772.0,304.0,10.1275,500001.0,<1H OCEAN +-117.84,33.6,21.0,4281.0,582.0,1443.0,576.0,9.0519,500001.0,<1H OCEAN +-117.86,33.62,23.0,3166.0,411.0,1092.0,345.0,7.9367,500001.0,<1H OCEAN +-117.86,33.62,17.0,2975.0,371.0,1247.0,398.0,10.1989,500001.0,<1H OCEAN +-117.85,33.62,18.0,729.0,105.0,316.0,108.0,10.3893,500001.0,<1H OCEAN +-117.85,33.61,14.0,4340.0,741.0,1505.0,670.0,7.5674,500001.0,<1H OCEAN +-117.85,33.62,13.0,5192.0,658.0,1865.0,662.0,15.0001,500001.0,<1H OCEAN +-117.86,33.63,17.0,3095.0,551.0,1175.0,534.0,5.3099,500001.0,<1H OCEAN +-117.77,33.54,28.0,3404.0,497.0,1134.0,466.0,7.2217,500001.0,<1H OCEAN +-117.76,33.54,28.0,2250.0,329.0,826.0,323.0,6.9257,466400.0,<1H OCEAN +-117.77,33.54,47.0,3090.0,652.0,1105.0,582.0,4.1699,373700.0,<1H OCEAN +-117.77,33.53,46.0,1033.0,223.0,462.0,224.0,3.2708,384700.0,<1H OCEAN +-117.8,33.52,50.0,1152.0,341.0,519.0,225.0,3.053,500001.0,<1H OCEAN +-117.76,33.53,28.0,3085.0,499.0,1176.0,480.0,7.9794,426100.0,<1H OCEAN +-117.76,33.53,18.0,3224.0,561.0,1310.0,580.0,8.4614,391900.0,<1H OCEAN +-117.76,33.53,24.0,2105.0,346.0,712.0,332.0,10.6349,500001.0,<1H OCEAN +-117.77,33.53,32.0,3116.0,661.0,1105.0,543.0,5.1837,445600.0,<1H OCEAN +-117.78,33.51,44.0,1833.0,331.0,515.0,268.0,6.6178,500001.0,<1H OCEAN +-117.73,33.63,15.0,2874.0,592.0,1382.0,586.0,5.5137,161800.0,<1H OCEAN +-117.74,33.62,16.0,4134.0,740.0,2103.0,745.0,5.6877,231400.0,<1H OCEAN +-117.75,33.64,9.0,2499.0,492.0,1111.0,542.0,5.5342,182300.0,<1H OCEAN +-117.72,33.62,21.0,2322.0,518.0,662.0,457.0,3.1679,110000.0,<1H OCEAN +-117.72,33.62,19.0,1144.0,268.0,365.0,279.0,2.8583,105800.0,<1H OCEAN +-117.71,33.61,25.0,3004.0,718.0,891.0,626.0,2.395,80300.0,<1H OCEAN +-117.72,33.63,15.0,1362.0,255.0,378.0,202.0,1.9,162500.0,<1H OCEAN +-117.72,33.62,19.0,5777.0,1261.0,1711.0,1225.0,2.7634,86900.0,<1H OCEAN +-117.73,33.61,16.0,590.0,130.0,178.0,121.0,4.8611,186800.0,<1H OCEAN +-117.74,33.62,16.0,1889.0,590.0,686.0,537.0,3.4706,241700.0,<1H OCEAN +-117.74,33.61,16.0,2753.0,576.0,857.0,546.0,3.7422,229800.0,<1H OCEAN +-117.74,33.61,17.0,2116.0,474.0,662.0,443.0,3.5625,180800.0,<1H OCEAN +-117.75,33.61,17.0,2499.0,566.0,781.0,522.0,3.1779,186500.0,<1H OCEAN +-117.75,33.6,5.0,4944.0,1164.0,1727.0,948.0,4.9,255600.0,<1H OCEAN +-117.75,33.61,16.0,2270.0,488.0,709.0,489.0,3.2845,227600.0,<1H OCEAN +-117.73,33.61,17.0,2612.0,582.0,832.0,564.0,2.6759,120600.0,<1H OCEAN +-117.7,33.61,16.0,2371.0,725.0,1738.0,686.0,3.6484,322600.0,<1H OCEAN +-117.7,33.6,26.0,2283.0,506.0,634.0,469.0,2.3774,74300.0,<1H OCEAN +-117.71,33.6,8.0,3329.0,753.0,1312.0,629.0,3.5521,229800.0,<1H OCEAN +-117.71,33.6,25.0,3011.0,714.0,893.0,654.0,2.3387,74800.0,<1H OCEAN +-117.72,33.61,26.0,2033.0,463.0,618.0,450.0,2.5685,80400.0,<1H OCEAN +-117.72,33.61,26.0,2653.0,621.0,774.0,584.0,2.49,81100.0,<1H OCEAN +-117.71,33.61,26.0,3046.0,726.0,888.0,663.0,2.6848,74100.0,<1H OCEAN +-117.71,33.61,26.0,2280.0,550.0,669.0,502.0,2.3438,72300.0,<1H OCEAN +-117.71,33.6,25.0,1949.0,459.0,602.0,428.0,2.7601,72500.0,<1H OCEAN +-117.7,33.6,26.0,1021.0,230.0,301.0,208.0,2.625,80600.0,<1H OCEAN +-117.7,33.6,25.0,1321.0,295.0,396.0,278.0,3.1131,77100.0,<1H OCEAN +-117.7,33.59,11.0,8039.0,1717.0,3445.0,1571.0,4.1678,190900.0,<1H OCEAN +-117.84,33.66,5.0,665.0,171.0,384.0,171.0,4.5833,230400.0,<1H OCEAN +-117.84,33.66,5.0,1688.0,430.0,857.0,402.0,3.7857,231600.0,<1H OCEAN +-117.84,33.65,4.0,1649.0,456.0,1030.0,411.0,2.2262,225000.0,<1H OCEAN +-117.83,33.66,4.0,1011.0,198.0,511.0,198.0,7.9217,296200.0,<1H OCEAN +-117.83,33.65,9.0,638.0,266.0,426.0,234.0,3.7875,187500.0,<1H OCEAN +-117.83,33.65,8.0,2149.0,426.0,950.0,399.0,4.1103,250400.0,<1H OCEAN +-117.82,33.66,15.0,2460.0,447.0,1049.0,398.0,6.4967,387500.0,<1H OCEAN +-117.81,33.63,17.0,4477.0,610.0,1798.0,612.0,8.1093,410400.0,<1H OCEAN +-117.82,33.65,18.0,2105.0,302.0,830.0,286.0,6.3822,362500.0,<1H OCEAN +-117.8,33.63,8.0,32.0,9.0,26.0,11.0,4.1944,270800.0,<1H OCEAN +-117.8,33.64,8.0,4447.0,713.0,1680.0,705.0,8.8693,450400.0,<1H OCEAN +-117.8,33.63,15.0,3236.0,451.0,1289.0,416.0,11.1121,493000.0,<1H OCEAN +-117.82,33.64,18.0,1974.0,260.0,808.0,278.0,9.8589,500001.0,<1H OCEAN +-117.81,33.64,16.0,2404.0,349.0,868.0,329.0,11.0138,442100.0,<1H OCEAN +-117.81,33.64,4.0,1741.0,225.0,811.0,233.0,12.3411,500001.0,<1H OCEAN +-117.88,33.6,31.0,5488.0,1055.0,1938.0,964.0,8.8742,500001.0,<1H OCEAN +-117.87,33.6,20.0,3212.0,572.0,1064.0,526.0,6.6155,500001.0,<1H OCEAN +-117.87,33.6,35.0,1598.0,398.0,782.0,411.0,5.1155,500000.0,<1H OCEAN +-117.87,33.59,44.0,2499.0,396.0,910.0,374.0,6.6544,500001.0,<1H OCEAN +-117.87,33.6,33.0,3120.0,602.0,1155.0,553.0,5.2949,500001.0,<1H OCEAN +-117.86,33.6,30.0,1891.0,364.0,635.0,314.0,6.6265,500001.0,<1H OCEAN +-117.87,33.6,34.0,3415.0,779.0,1275.0,718.0,4.498,482900.0,<1H OCEAN +-117.89,33.6,36.0,1496.0,247.0,441.0,203.0,7.8164,500001.0,<1H OCEAN +-117.9,33.61,41.0,1521.0,328.0,527.0,275.0,4.0764,500001.0,<1H OCEAN +-117.91,33.61,40.0,2790.0,531.0,952.0,424.0,4.8,500001.0,<1H OCEAN +-117.91,33.6,37.0,2088.0,510.0,673.0,390.0,5.1048,500001.0,<1H OCEAN +-117.92,33.57,37.0,3355.0,492.0,921.0,366.0,7.2988,500001.0,NEAR OCEAN +-117.9,33.6,25.0,2465.0,585.0,906.0,472.0,3.6538,500001.0,<1H OCEAN +-117.92,33.61,23.0,1808.0,408.0,539.0,300.0,3.5682,500001.0,<1H OCEAN +-117.91,33.61,38.0,1232.0,178.0,410.0,171.0,11.075,500001.0,<1H OCEAN +-117.92,33.61,37.0,1244.0,173.0,394.0,154.0,10.3682,500001.0,<1H OCEAN +-117.92,33.61,36.0,1025.0,150.0,316.0,126.0,10.3048,500001.0,<1H OCEAN +-117.91,33.61,36.0,3082.0,455.0,771.0,365.0,11.216,500001.0,<1H OCEAN +-117.88,33.63,21.0,9565.0,2289.0,3162.0,1831.0,4.7024,345400.0,<1H OCEAN +-117.89,33.62,24.0,1016.0,238.0,465.0,236.0,3.0625,93800.0,<1H OCEAN +-117.88,33.64,16.0,3615.0,570.0,1209.0,559.0,8.5574,392200.0,<1H OCEAN +-117.9,33.61,19.0,2897.0,413.0,860.0,367.0,13.1738,500001.0,<1H OCEAN +-117.89,33.61,16.0,2413.0,559.0,656.0,423.0,6.3017,350000.0,<1H OCEAN +-117.89,33.61,41.0,1790.0,361.0,540.0,284.0,6.0247,500001.0,<1H OCEAN +-117.89,33.61,42.0,1301.0,280.0,539.0,249.0,5.0,500001.0,<1H OCEAN +-117.89,33.61,44.0,2126.0,423.0,745.0,332.0,5.1923,500001.0,<1H OCEAN +-117.89,33.6,40.0,1639.0,352.0,498.0,278.0,5.6336,500001.0,<1H OCEAN +-117.89,33.61,45.0,1883.0,419.0,653.0,328.0,4.2222,500001.0,<1H OCEAN +-117.9,33.61,44.0,1469.0,312.0,507.0,266.0,3.4937,500001.0,<1H OCEAN +-117.87,33.64,26.0,3521.0,455.0,1336.0,451.0,10.2849,500001.0,<1H OCEAN +-117.86,33.65,4.0,3618.0,767.0,1326.0,714.0,5.4284,500001.0,<1H OCEAN +-117.87,33.63,9.0,6163.0,1004.0,1912.0,903.0,10.8289,500001.0,<1H OCEAN +-117.87,33.62,15.0,2209.0,275.0,735.0,274.0,15.0001,500001.0,<1H OCEAN +-117.87,33.62,8.0,1266.0,,375.0,183.0,9.802,500001.0,<1H OCEAN +-117.88,33.65,24.0,4879.0,756.0,1777.0,754.0,5.9055,477300.0,<1H OCEAN +-117.9,33.63,26.0,4486.0,554.0,1598.0,549.0,10.1454,500001.0,<1H OCEAN +-117.91,33.63,20.0,3442.0,1526.0,1427.0,977.0,3.1985,106300.0,<1H OCEAN +-117.9,33.63,32.0,3556.0,521.0,1381.0,537.0,6.1426,450700.0,<1H OCEAN +-117.9,33.63,26.0,1632.0,376.0,598.0,375.0,3.2125,455000.0,<1H OCEAN +-117.9,33.63,28.0,2370.0,352.0,832.0,347.0,7.1148,500001.0,<1H OCEAN +-117.88,33.66,26.0,6017.0,1244.0,2673.0,1135.0,3.5426,295400.0,<1H OCEAN +-117.89,33.66,33.0,3595.0,785.0,1621.0,732.0,4.1372,265200.0,<1H OCEAN +-117.9,33.66,13.0,1642.0,423.0,841.0,368.0,3.6042,226000.0,<1H OCEAN +-117.9,33.65,24.0,4496.0,877.0,1928.0,855.0,4.6808,245500.0,<1H OCEAN +-117.89,33.66,32.0,2736.0,550.0,1279.0,534.0,5.5422,253100.0,<1H OCEAN +-117.9,33.65,27.0,3310.0,598.0,1402.0,563.0,6.632,441100.0,<1H OCEAN +-117.9,33.64,28.0,2466.0,507.0,1081.0,465.0,3.9375,339800.0,<1H OCEAN +-117.9,33.65,28.0,2043.0,430.0,1108.0,452.0,5.2549,261800.0,<1H OCEAN +-117.9,33.65,30.0,2196.0,486.0,1131.0,460.0,4.4135,272300.0,<1H OCEAN +-117.91,33.65,24.0,885.0,321.0,590.0,254.0,2.625,217900.0,<1H OCEAN +-117.9,33.65,30.0,1634.0,373.0,771.0,364.0,3.4125,284100.0,<1H OCEAN +-117.91,33.65,17.0,1328.0,377.0,762.0,344.0,2.2222,276800.0,<1H OCEAN +-117.91,33.64,37.0,1998.0,472.0,1030.0,436.0,3.9306,268400.0,<1H OCEAN +-117.9,33.64,36.0,2017.0,357.0,850.0,348.0,5.0532,310900.0,<1H OCEAN +-117.91,33.64,29.0,1652.0,310.0,832.0,326.0,4.8098,325400.0,<1H OCEAN +-117.91,33.64,40.0,1958.0,333.0,876.0,364.0,3.6406,326100.0,<1H OCEAN +-117.91,33.63,32.0,1901.0,400.0,946.0,418.0,2.7264,311100.0,<1H OCEAN +-117.92,33.63,34.0,2479.0,491.0,1131.0,490.0,4.9643,317900.0,<1H OCEAN +-117.91,33.63,30.0,2071.0,412.0,1081.0,412.0,4.9125,335700.0,<1H OCEAN +-117.92,33.64,25.0,2224.0,580.0,985.0,516.0,3.1305,268800.0,<1H OCEAN +-117.91,33.64,38.0,2222.0,542.0,1067.0,512.0,2.8553,307600.0,<1H OCEAN +-117.92,33.63,24.0,1562.0,441.0,696.0,347.0,3.5161,236400.0,<1H OCEAN +-117.91,33.63,32.0,1122.0,233.0,557.0,223.0,3.5388,407000.0,<1H OCEAN +-117.92,33.62,37.0,2038.0,379.0,837.0,381.0,5.2416,471300.0,<1H OCEAN +-117.92,33.63,39.0,1469.0,226.0,553.0,225.0,7.8496,490800.0,<1H OCEAN +-117.92,33.62,35.0,1821.0,335.0,727.0,316.0,6.5842,458500.0,<1H OCEAN +-117.91,33.61,27.0,1797.0,343.0,435.0,203.0,5.9196,500001.0,<1H OCEAN +-117.91,33.62,32.0,1997.0,427.0,944.0,426.0,4.4063,500001.0,<1H OCEAN +-117.91,33.62,35.0,2426.0,359.0,937.0,387.0,9.2175,500001.0,<1H OCEAN +-117.92,33.61,18.0,1538.0,425.0,425.0,288.0,5.3369,312500.0,<1H OCEAN +-117.93,33.62,33.0,1890.0,416.0,859.0,329.0,4.5658,500001.0,<1H OCEAN +-117.93,33.62,34.0,2125.0,498.0,1052.0,468.0,5.6315,484600.0,<1H OCEAN +-117.94,33.62,28.0,1765.0,390.0,832.0,349.0,6.5928,439100.0,<1H OCEAN +-117.95,33.63,29.0,1496.0,282.0,463.0,215.0,6.0516,500001.0,<1H OCEAN +-117.96,33.6,34.0,959.0,230.0,384.0,197.0,5.2333,471400.0,NEAR OCEAN +-117.93,33.61,27.0,1806.0,465.0,791.0,358.0,3.8125,366700.0,<1H OCEAN +-117.93,33.62,37.0,2204.0,428.0,807.0,410.0,7.0516,500001.0,<1H OCEAN +-117.94,33.62,25.0,1188.0,264.0,569.0,249.0,3.6607,500001.0,<1H OCEAN +-117.94,33.65,20.0,5476.0,1073.0,2327.0,963.0,5.6637,222100.0,<1H OCEAN +-117.93,33.65,35.0,2133.0,413.0,1473.0,402.0,4.4211,215200.0,<1H OCEAN +-117.93,33.64,31.0,1291.0,356.0,1252.0,373.0,2.7143,185400.0,<1H OCEAN +-117.94,33.64,18.0,1867.0,426.0,871.0,399.0,2.6221,272000.0,<1H OCEAN +-117.93,33.64,24.0,1395.0,396.0,1478.0,404.0,2.5301,192900.0,<1H OCEAN +-117.92,33.64,24.0,2539.0,695.0,1623.0,611.0,3.0708,188700.0,<1H OCEAN +-117.94,33.64,24.0,1097.0,307.0,470.0,333.0,1.6389,225000.0,<1H OCEAN +-117.93,33.64,15.0,1707.0,514.0,1335.0,434.0,2.7543,177800.0,<1H OCEAN +-117.95,33.63,27.0,2489.0,481.0,1082.0,443.0,5.8777,358800.0,<1H OCEAN +-117.95,33.63,27.0,891.0,183.0,513.0,171.0,6.0,381500.0,<1H OCEAN +-117.93,33.63,10.0,2766.0,732.0,1332.0,646.0,4.6161,226300.0,<1H OCEAN +-117.95,33.63,17.0,6745.0,1547.0,2688.0,1535.0,3.9917,271600.0,<1H OCEAN +-117.91,33.65,19.0,1589.0,421.0,1118.0,394.0,4.1029,213400.0,<1H OCEAN +-117.92,33.64,5.0,949.0,287.0,497.0,244.0,2.75,225000.0,<1H OCEAN +-117.92,33.65,15.0,1309.0,477.0,1330.0,424.0,3.4417,182500.0,<1H OCEAN +-117.93,33.65,29.0,1253.0,375.0,1198.0,362.0,3.5179,225000.0,<1H OCEAN +-117.91,33.65,24.0,1494.0,494.0,814.0,459.0,2.1074,181300.0,<1H OCEAN +-117.92,33.65,28.0,1087.0,423.0,807.0,425.0,0.9702,225400.0,<1H OCEAN +-117.92,33.65,25.0,1679.0,470.0,1314.0,473.0,4.1026,211500.0,<1H OCEAN +-117.92,33.65,20.0,1391.0,393.0,856.0,360.0,3.184,220000.0,<1H OCEAN +-117.93,33.65,27.0,1283.0,406.0,1063.0,376.0,2.75,275000.0,<1H OCEAN +-117.92,33.68,28.0,3397.0,597.0,1397.0,560.0,4.8125,244600.0,<1H OCEAN +-117.93,33.67,27.0,3512.0,472.0,1391.0,481.0,8.1001,336500.0,<1H OCEAN +-117.94,33.67,26.0,2552.0,314.0,925.0,323.0,8.1839,367000.0,<1H OCEAN +-117.94,33.66,16.0,2095.0,450.0,963.0,411.0,5.5,224100.0,<1H OCEAN +-117.94,33.65,15.0,2016.0,443.0,1015.0,419.0,5.2732,209700.0,<1H OCEAN +-117.93,33.65,34.0,2141.0,425.0,1559.0,429.0,4.2036,220100.0,<1H OCEAN +-117.93,33.69,19.0,2602.0,439.0,1156.0,424.0,5.01,263800.0,<1H OCEAN +-117.93,33.69,26.0,2822.0,473.0,1258.0,469.0,6.4441,261000.0,<1H OCEAN +-117.92,33.68,25.0,2017.0,454.0,1024.0,428.0,4.4732,245600.0,<1H OCEAN +-117.93,33.68,33.0,2664.0,432.0,1197.0,429.0,5.069,264200.0,<1H OCEAN +-117.94,33.68,26.0,4183.0,539.0,1504.0,520.0,7.4056,374200.0,<1H OCEAN +-117.92,33.67,14.0,6224.0,1679.0,3148.0,1589.0,4.2071,430900.0,<1H OCEAN +-117.93,33.66,18.0,2043.0,250.0,702.0,246.0,9.6062,414700.0,<1H OCEAN +-117.93,33.65,26.0,5831.0,1546.0,4738.0,1477.0,3.1483,213000.0,<1H OCEAN +-117.91,33.69,30.0,2704.0,426.0,1289.0,423.0,5.2815,229500.0,<1H OCEAN +-117.91,33.67,16.0,7961.0,2276.0,5014.0,2116.0,3.512,218400.0,<1H OCEAN +-117.9,33.68,25.0,7060.0,1159.0,3903.0,1139.0,4.8359,249200.0,<1H OCEAN +-117.9,33.67,26.0,2507.0,393.0,1333.0,392.0,6.1601,266100.0,<1H OCEAN +-117.89,33.68,26.0,2905.0,504.0,1452.0,491.0,5.0853,260300.0,<1H OCEAN +-117.9,33.67,25.0,639.0,98.0,311.0,93.0,6.6833,275900.0,<1H OCEAN +-117.91,33.67,32.0,3058.0,562.0,1475.0,569.0,4.4625,253500.0,<1H OCEAN +-117.91,33.66,26.0,5761.0,1326.0,2681.0,1116.0,4.0341,243300.0,<1H OCEAN +-117.91,33.65,14.0,2598.0,759.0,1584.0,703.0,4.0417,180900.0,<1H OCEAN +-117.91,33.66,21.0,1708.0,505.0,1099.0,434.0,3.225,193800.0,<1H OCEAN +-117.9,33.66,22.0,3568.0,938.0,1952.0,938.0,3.1667,161000.0,<1H OCEAN +-117.9,33.66,4.0,456.0,91.0,623.0,84.0,6.6369,192600.0,<1H OCEAN +-117.9,33.69,13.0,9947.0,1675.0,4071.0,1582.0,5.422,316600.0,<1H OCEAN +-117.87,33.69,4.0,2337.0,768.0,983.0,655.0,3.7174,275000.0,<1H OCEAN +-117.89,33.68,8.0,5278.0,1575.0,2389.0,1371.0,3.3409,181300.0,<1H OCEAN +-117.88,33.69,20.0,5330.0,976.0,2734.0,1000.0,5.2138,233100.0,<1H OCEAN +-117.86,33.71,21.0,1795.0,406.0,2246.0,400.0,3.152,152800.0,<1H OCEAN +-117.86,33.71,36.0,191.0,42.0,208.0,37.0,3.375,157500.0,<1H OCEAN +-117.87,33.71,16.0,3397.0,686.0,1924.0,621.0,4.9148,155500.0,<1H OCEAN +-117.87,33.71,13.0,1087.0,340.0,817.0,342.0,3.5326,262500.0,<1H OCEAN +-117.87,33.7,17.0,3216.0,607.0,1916.0,618.0,4.9153,266400.0,<1H OCEAN +-117.87,33.7,21.0,3648.0,654.0,2266.0,628.0,5.0956,246000.0,<1H OCEAN +-117.88,33.71,27.0,1596.0,297.0,1703.0,289.0,4.1,184900.0,<1H OCEAN +-117.88,33.71,30.0,1739.0,359.0,1914.0,369.0,3.5551,185200.0,<1H OCEAN +-117.88,33.71,20.0,1738.0,509.0,1403.0,411.0,3.1742,245000.0,<1H OCEAN +-117.88,33.7,18.0,2135.0,373.0,1464.0,405.0,5.4836,225800.0,<1H OCEAN +-117.88,33.7,17.0,5122.0,1544.0,2966.0,1339.0,3.4835,116700.0,<1H OCEAN +-117.88,33.7,24.0,534.0,88.0,249.0,74.0,5.3254,240500.0,<1H OCEAN +-117.88,33.7,16.0,1505.0,358.0,835.0,339.0,3.8029,205400.0,<1H OCEAN +-117.9,33.72,36.0,443.0,117.0,577.0,115.0,3.6875,137500.0,<1H OCEAN +-117.91,33.72,32.0,2436.0,504.0,2839.0,516.0,4.5607,182100.0,<1H OCEAN +-117.9,33.72,33.0,2613.0,562.0,3150.0,543.0,4.3899,180700.0,<1H OCEAN +-117.9,33.73,31.0,1171.0,306.0,1690.0,301.0,3.2639,155200.0,<1H OCEAN +-117.89,33.72,25.0,4343.0,847.0,3872.0,850.0,4.65,197800.0,<1H OCEAN +-117.89,33.72,23.0,2305.0,538.0,2493.0,502.0,3.6618,183500.0,<1H OCEAN +-117.88,33.73,32.0,1947.0,355.0,1786.0,332.0,4.5726,177500.0,<1H OCEAN +-117.88,33.72,38.0,1421.0,300.0,1236.0,263.0,3.9844,165300.0,<1H OCEAN +-117.88,33.72,36.0,1910.0,352.0,1593.0,329.0,3.89,170000.0,<1H OCEAN +-117.9,33.71,16.0,4208.0,630.0,2592.0,662.0,6.1966,260500.0,<1H OCEAN +-117.89,33.71,23.0,1422.0,260.0,1092.0,263.0,4.7422,202400.0,<1H OCEAN +-117.89,33.71,24.0,4365.0,804.0,2663.0,753.0,4.5814,233300.0,<1H OCEAN +-117.9,33.71,16.0,1917.0,317.0,1324.0,351.0,6.2488,252000.0,<1H OCEAN +-117.89,33.71,16.0,1591.0,225.0,926.0,239.0,6.2452,266300.0,<1H OCEAN +-117.9,33.71,15.0,539.0,71.0,287.0,66.0,6.3427,305200.0,<1H OCEAN +-117.92,33.7,15.0,3201.0,,1510.0,622.0,4.2708,161700.0,<1H OCEAN +-117.91,33.71,16.0,3113.0,783.0,1719.0,715.0,3.6505,145700.0,<1H OCEAN +-117.89,33.7,13.0,1857.0,572.0,838.0,525.0,3.2386,129200.0,<1H OCEAN +-117.9,33.7,12.0,4695.0,1110.0,2153.0,989.0,4.6483,190800.0,<1H OCEAN +-117.9,33.7,15.0,2289.0,686.0,982.0,634.0,4.5757,162500.0,<1H OCEAN +-117.86,33.73,31.0,1115.0,268.0,1369.0,259.0,3.5694,150500.0,<1H OCEAN +-117.86,33.72,31.0,1194.0,297.0,1602.0,306.0,2.3333,157700.0,<1H OCEAN +-117.87,33.72,39.0,3167.0,669.0,2789.0,619.0,3.5902,165900.0,<1H OCEAN +-117.87,33.72,37.0,2216.0,497.0,2445.0,506.0,3.8421,174000.0,<1H OCEAN +-117.86,33.72,37.0,1429.0,428.0,2089.0,399.0,3.413,150600.0,<1H OCEAN +-117.86,33.72,32.0,1461.0,340.0,1909.0,346.0,3.5511,159100.0,<1H OCEAN +-117.85,33.73,28.0,1499.0,574.0,3328.0,595.0,2.4539,115000.0,<1H OCEAN +-117.84,33.73,20.0,2572.0,732.0,1534.0,669.0,2.4211,175000.0,<1H OCEAN +-117.84,33.74,22.0,6072.0,1802.0,4715.0,1666.0,3.1353,121400.0,<1H OCEAN +-117.84,33.74,24.0,1752.0,407.0,910.0,427.0,3.3611,134600.0,<1H OCEAN +-117.84,33.74,25.0,1818.0,577.0,1426.0,532.0,3.2104,112500.0,<1H OCEAN +-117.83,33.74,23.0,1818.0,522.0,958.0,485.0,2.6771,131500.0,<1H OCEAN +-117.86,33.75,5.0,187.0,49.0,207.0,51.0,1.8,154200.0,<1H OCEAN +-117.86,33.75,31.0,1761.0,515.0,1810.0,468.0,1.9309,173400.0,<1H OCEAN +-117.86,33.75,6.0,1565.0,599.0,3157.0,629.0,2.9271,123200.0,<1H OCEAN +-117.86,33.76,15.0,851.0,297.0,1326.0,254.0,2.8289,117500.0,<1H OCEAN +-117.85,33.74,19.0,1248.0,357.0,1214.0,328.0,2.7059,159800.0,<1H OCEAN +-117.85,33.75,27.0,2311.0,632.0,2936.0,609.0,2.5651,171400.0,<1H OCEAN +-117.86,33.74,9.0,525.0,171.0,1257.0,165.0,3.375,165300.0,<1H OCEAN +-117.86,33.74,32.0,691.0,151.0,926.0,148.0,4.125,175900.0,<1H OCEAN +-117.85,33.74,26.0,2589.0,1003.0,5756.0,983.0,2.1992,170800.0,<1H OCEAN +-117.86,33.73,23.0,407.0,108.0,647.0,96.0,3.775,177400.0,<1H OCEAN +-117.86,33.73,30.0,2651.0,572.0,3249.0,552.0,3.7202,182100.0,<1H OCEAN +-117.86,33.73,26.0,1702.0,456.0,2776.0,463.0,2.6385,180200.0,<1H OCEAN +-117.87,33.74,31.0,2338.0,652.0,3289.0,631.0,2.6734,158500.0,<1H OCEAN +-117.87,33.73,45.0,2264.0,,1970.0,499.0,3.4193,177000.0,<1H OCEAN +-117.87,33.74,52.0,2411.0,526.0,2165.0,521.0,3.415,172500.0,<1H OCEAN +-117.86,33.74,38.0,2415.0,642.0,3242.0,599.0,3.425,165600.0,<1H OCEAN +-117.86,33.73,38.0,2284.0,511.0,2451.0,504.0,3.3125,159100.0,<1H OCEAN +-117.86,33.74,34.0,2254.0,630.0,2984.0,625.0,2.5,162500.0,<1H OCEAN +-117.89,33.73,33.0,1308.0,375.0,2175.0,347.0,3.0824,177400.0,<1H OCEAN +-117.9,33.73,32.0,2930.0,833.0,5116.0,854.0,3.7147,164100.0,<1H OCEAN +-117.9,33.73,30.0,746.0,172.0,1048.0,163.0,4.1,166400.0,<1H OCEAN +-117.88,33.73,33.0,2291.0,594.0,3232.0,589.0,3.2037,163500.0,<1H OCEAN +-117.88,33.73,36.0,2471.0,498.0,2594.0,475.0,3.75,170500.0,<1H OCEAN +-117.89,33.75,31.0,1205.0,280.0,1476.0,301.0,4.0231,139200.0,<1H OCEAN +-117.89,33.74,32.0,1562.0,365.0,2145.0,347.0,2.9167,158400.0,<1H OCEAN +-117.89,33.74,34.0,1759.0,353.0,2083.0,330.0,3.2292,160600.0,<1H OCEAN +-117.9,33.75,28.0,1346.0,291.0,1575.0,278.0,3.425,159500.0,<1H OCEAN +-117.9,33.74,19.0,1566.0,379.0,1032.0,330.0,2.2105,180400.0,<1H OCEAN +-117.9,33.74,18.0,1884.0,442.0,1915.0,442.0,2.3783,166700.0,<1H OCEAN +-117.91,33.74,25.0,4273.0,965.0,2946.0,922.0,2.9926,183200.0,<1H OCEAN +-117.91,33.73,26.0,2413.0,512.0,2867.0,509.0,4.7639,179900.0,<1H OCEAN +-117.9,33.73,26.0,1324.0,314.0,1804.0,311.0,3.9659,178500.0,<1H OCEAN +-117.9,33.74,24.0,2932.0,955.0,5516.0,911.0,2.7535,111000.0,<1H OCEAN +-117.9,33.74,25.0,808.0,163.0,1066.0,189.0,4.7679,173100.0,<1H OCEAN +-117.9,33.74,24.0,1435.0,494.0,3171.0,504.0,3.0833,151700.0,<1H OCEAN +-117.89,33.74,32.0,660.0,145.0,959.0,113.0,3.75,159000.0,<1H OCEAN +-117.89,33.74,33.0,619.0,139.0,1217.0,146.0,4.6875,154400.0,<1H OCEAN +-117.89,33.73,32.0,728.0,134.0,837.0,135.0,4.0769,163900.0,<1H OCEAN +-117.88,33.75,10.0,1823.0,590.0,2176.0,548.0,1.5026,151800.0,<1H OCEAN +-117.88,33.74,29.0,720.0,174.0,1045.0,181.0,3.1964,151900.0,<1H OCEAN +-117.88,33.74,16.0,1444.0,446.0,2329.0,441.0,3.1691,159400.0,<1H OCEAN +-117.88,33.74,31.0,1120.0,296.0,1718.0,268.0,2.8077,140300.0,<1H OCEAN +-117.87,33.74,16.0,1243.0,365.0,1925.0,376.0,2.7632,158900.0,<1H OCEAN +-117.88,33.74,19.0,2261.0,642.0,3545.0,635.0,2.5224,148500.0,<1H OCEAN +-117.88,33.74,25.0,1799.0,557.0,3416.0,538.0,3.0083,163500.0,<1H OCEAN +-117.87,33.76,6.0,2992.0,1194.0,3800.0,1130.0,2.246,183300.0,<1H OCEAN +-117.87,33.75,14.0,5526.0,1916.0,6799.0,1796.0,2.6561,144400.0,<1H OCEAN +-117.87,33.75,18.0,697.0,255.0,812.0,221.0,2.6635,162500.0,<1H OCEAN +-117.86,33.75,39.0,275.0,87.0,554.0,103.0,3.5972,158000.0,<1H OCEAN +-117.86,33.75,13.0,1632.0,598.0,3356.0,659.0,1.5054,137500.0,<1H OCEAN +-117.87,33.75,12.0,2782.0,1077.0,1968.0,795.0,0.971,102500.0,<1H OCEAN +-117.87,33.75,26.0,411.0,114.0,448.0,95.0,1.7019,350000.0,<1H OCEAN +-117.88,33.76,37.0,2988.0,677.0,2354.0,666.0,3.4345,235500.0,<1H OCEAN +-117.88,33.76,17.0,1768.0,474.0,1079.0,436.0,1.7823,205300.0,<1H OCEAN +-117.88,33.75,50.0,1344.0,228.0,747.0,234.0,4.5125,195400.0,<1H OCEAN +-117.88,33.75,34.0,3004.0,673.0,5477.0,640.0,2.8342,187200.0,<1H OCEAN +-117.9,33.76,26.0,2678.0,702.0,3262.0,685.0,3.6953,176800.0,<1H OCEAN +-117.9,33.75,32.0,1893.0,431.0,2245.0,426.0,3.7143,163000.0,<1H OCEAN +-117.89,33.76,36.0,2656.0,572.0,2370.0,571.0,3.8056,177200.0,<1H OCEAN +-117.89,33.75,34.0,2753.0,654.0,3117.0,631.0,3.1713,170100.0,<1H OCEAN +-117.88,33.78,26.0,1813.0,421.0,1235.0,343.0,3.5972,187500.0,<1H OCEAN +-117.88,33.77,31.0,2549.0,355.0,1044.0,362.0,6.9737,288800.0,<1H OCEAN +-117.88,33.78,26.0,3141.0,670.0,1572.0,724.0,3.3472,237400.0,<1H OCEAN +-117.89,33.77,32.0,2342.0,570.0,1445.0,453.0,4.1951,195000.0,<1H OCEAN +-117.89,33.77,35.0,1799.0,343.0,1239.0,368.0,3.9219,189600.0,<1H OCEAN +-117.89,33.76,34.0,1050.0,210.0,723.0,201.0,4.8,192700.0,<1H OCEAN +-117.87,33.77,52.0,2512.0,356.0,978.0,365.0,8.0784,320300.0,<1H OCEAN +-117.87,33.76,37.0,4943.0,851.0,2164.0,788.0,4.1071,311300.0,<1H OCEAN +-117.86,33.77,39.0,4159.0,655.0,1669.0,651.0,4.6111,240300.0,<1H OCEAN +-117.86,33.76,34.0,3153.0,561.0,1679.0,532.0,4.7083,205300.0,<1H OCEAN +-117.84,33.76,14.0,1458.0,423.0,615.0,365.0,4.2798,218800.0,<1H OCEAN +-117.85,33.76,26.0,2312.0,525.0,1273.0,437.0,2.8828,204700.0,<1H OCEAN +-117.84,33.76,16.0,238.0,51.0,93.0,50.0,5.375,215700.0,<1H OCEAN +-117.84,33.76,22.0,378.0,78.0,196.0,81.0,3.6806,219400.0,<1H OCEAN +-117.84,33.75,16.0,4367.0,1161.0,2164.0,1005.0,4.0214,139500.0,<1H OCEAN +-117.85,33.76,33.0,1866.0,327.0,1053.0,371.0,4.5461,213800.0,<1H OCEAN +-117.84,33.77,14.0,4412.0,952.0,1656.0,874.0,4.3292,206500.0,<1H OCEAN +-117.85,33.77,23.0,5928.0,1204.0,3570.0,1150.0,4.0398,233100.0,<1H OCEAN +-117.84,33.77,26.0,3350.0,581.0,1314.0,550.0,3.5195,249100.0,<1H OCEAN +-117.84,33.76,26.0,2110.0,409.0,1146.0,407.0,4.3698,229600.0,<1H OCEAN +-117.83,33.75,22.0,6433.0,1174.0,2703.0,1125.0,4.9957,296400.0,<1H OCEAN +-117.82,33.75,30.0,2910.0,535.0,1270.0,489.0,4.6161,236500.0,<1H OCEAN +-117.82,33.75,24.0,893.0,209.0,342.0,197.0,2.8261,146500.0,<1H OCEAN +-117.82,33.74,25.0,2720.0,680.0,1559.0,631.0,3.0958,137800.0,<1H OCEAN +-117.83,33.75,34.0,2660.0,601.0,1475.0,567.0,3.4152,210200.0,<1H OCEAN +-117.81,33.75,23.0,3498.0,636.0,1574.0,642.0,5.021,252200.0,<1H OCEAN +-117.8,33.74,30.0,3569.0,551.0,1540.0,537.0,5.2998,247200.0,<1H OCEAN +-117.81,33.73,19.0,5471.0,1345.0,2828.0,1247.0,3.5719,252800.0,<1H OCEAN +-117.81,33.74,24.0,2696.0,649.0,1908.0,626.0,3.3047,216900.0,<1H OCEAN +-117.81,33.73,19.0,4022.0,975.0,2334.0,954.0,3.0305,140600.0,<1H OCEAN +-117.81,33.73,23.0,3056.0,556.0,1508.0,555.0,4.7273,234200.0,<1H OCEAN +-117.82,33.73,23.0,2542.0,772.0,1720.0,675.0,3.8703,137000.0,<1H OCEAN +-117.82,33.73,24.0,845.0,190.0,482.0,190.0,4.7039,225000.0,<1H OCEAN +-117.82,33.73,27.0,1270.0,258.0,809.0,264.0,5.0162,223000.0,<1H OCEAN +-117.83,33.74,23.0,6114.0,1623.0,4088.0,1521.0,3.0382,183600.0,<1H OCEAN +-117.83,33.73,20.0,5768.0,1597.0,4853.0,1465.0,3.5387,160400.0,<1H OCEAN +-117.8,33.76,27.0,2655.0,345.0,1017.0,335.0,6.9014,366800.0,<1H OCEAN +-117.79,33.76,25.0,2037.0,252.0,796.0,249.0,11.0546,487200.0,<1H OCEAN +-117.79,33.75,26.0,2893.0,345.0,983.0,326.0,13.466,500001.0,<1H OCEAN +-117.79,33.75,26.0,2955.0,377.0,1074.0,373.0,9.3845,500001.0,<1H OCEAN +-117.8,33.75,29.0,3058.0,488.0,1197.0,474.0,5.3903,286600.0,<1H OCEAN +-117.8,33.74,33.0,2890.0,453.0,1300.0,452.0,6.5616,290200.0,<1H OCEAN +-117.81,33.75,25.0,2365.0,471.0,1197.0,458.0,3.7031,227800.0,<1H OCEAN +-117.79,33.77,23.0,3596.0,451.0,1292.0,458.0,8.5403,451300.0,<1H OCEAN +-117.79,33.77,21.0,4349.0,553.0,1680.0,519.0,6.9014,439000.0,<1H OCEAN +-117.78,33.76,25.0,2260.0,261.0,719.0,254.0,11.4537,500001.0,<1H OCEAN +-117.78,33.78,6.0,9792.0,1283.0,3744.0,1179.0,10.1714,481500.0,<1H OCEAN +-117.76,33.79,4.0,8974.0,1268.0,3754.0,1241.0,8.2653,374000.0,<1H OCEAN +-117.77,33.76,19.0,3532.0,402.0,1200.0,426.0,11.0124,500001.0,<1H OCEAN +-117.82,33.77,32.0,2308.0,301.0,967.0,320.0,7.0565,324600.0,<1H OCEAN +-117.83,33.77,22.0,2956.0,642.0,1342.0,558.0,4.1151,203200.0,<1H OCEAN +-117.83,33.77,26.0,4931.0,853.0,2249.0,818.0,4.275,285400.0,<1H OCEAN +-117.82,33.76,27.0,3230.0,449.0,1193.0,448.0,6.5308,287800.0,<1H OCEAN +-117.82,33.77,27.0,2578.0,314.0,976.0,340.0,7.1882,359200.0,<1H OCEAN +-117.82,33.76,33.0,2774.0,428.0,1229.0,407.0,6.2944,265600.0,<1H OCEAN +-117.81,33.76,32.0,2053.0,339.0,835.0,323.0,5.5654,281800.0,<1H OCEAN +-117.8,33.77,29.0,5436.0,707.0,2046.0,685.0,8.7496,349500.0,<1H OCEAN +-117.81,33.77,31.0,4624.0,624.0,1852.0,635.0,7.2392,334600.0,<1H OCEAN +-117.81,33.83,8.0,7326.0,884.0,2569.0,798.0,10.157,477100.0,<1H OCEAN +-117.83,33.83,13.0,3759.0,489.0,1496.0,499.0,8.3818,377600.0,<1H OCEAN +-117.83,33.83,23.0,2775.0,547.0,1226.0,510.0,3.6707,231400.0,<1H OCEAN +-117.82,33.8,15.0,3207.0,647.0,1414.0,595.0,4.0484,165600.0,<1H OCEAN +-117.83,33.79,29.0,1454.0,236.0,724.0,262.0,4.8542,218100.0,<1H OCEAN +-117.82,33.79,26.0,2641.0,633.0,3657.0,617.0,4.1339,222300.0,<1H OCEAN +-117.83,33.8,30.0,4713.0,758.0,2271.0,730.0,5.8622,221000.0,<1H OCEAN +-117.83,33.8,31.0,2016.0,409.0,1095.0,405.0,3.8681,196000.0,<1H OCEAN +-117.84,33.79,37.0,2733.0,460.0,1378.0,476.0,5.3041,235700.0,<1H OCEAN +-117.83,33.79,25.0,2070.0,513.0,1078.0,460.0,2.9312,220100.0,<1H OCEAN +-117.84,33.79,34.0,2590.0,603.0,1658.0,608.0,2.378,199600.0,<1H OCEAN +-117.84,33.78,26.0,2577.0,434.0,1086.0,432.0,4.6125,229200.0,<1H OCEAN +-117.84,33.78,24.0,3817.0,787.0,1656.0,713.0,4.25,248000.0,<1H OCEAN +-117.81,33.79,23.0,3114.0,610.0,2045.0,577.0,3.75,211900.0,<1H OCEAN +-117.82,33.78,25.0,4977.0,645.0,2061.0,646.0,6.58,318500.0,<1H OCEAN +-117.81,33.78,27.0,3589.0,507.0,1484.0,495.0,5.7934,270500.0,<1H OCEAN +-117.82,33.78,28.0,4485.0,667.0,2048.0,685.0,5.4562,274700.0,<1H OCEAN +-117.81,33.82,20.0,2819.0,319.0,1019.0,319.0,12.2092,500001.0,<1H OCEAN +-117.8,33.83,17.0,2971.0,350.0,1180.0,346.0,11.1228,500001.0,<1H OCEAN +-117.82,33.82,22.0,3173.0,372.0,1181.0,355.0,8.3637,500001.0,<1H OCEAN +-117.81,33.81,19.0,3154.0,390.0,1404.0,384.0,8.9257,431800.0,<1H OCEAN +-117.81,33.82,22.0,2898.0,335.0,1057.0,324.0,10.8111,500001.0,<1H OCEAN +-117.82,33.81,19.0,2556.0,304.0,822.0,260.0,9.9055,456900.0,<1H OCEAN +-117.83,33.82,26.0,3259.0,456.0,1354.0,459.0,5.7817,267600.0,<1H OCEAN +-117.83,33.82,23.0,1100.0,285.0,940.0,267.0,3.6953,150000.0,<1H OCEAN +-117.83,33.81,24.0,3550.0,895.0,2828.0,834.0,2.8403,225600.0,<1H OCEAN +-117.82,33.81,25.0,2662.0,402.0,1247.0,401.0,5.4395,244000.0,<1H OCEAN +-117.83,33.81,28.0,1972.0,315.0,970.0,326.0,5.4298,234200.0,<1H OCEAN +-117.82,33.81,30.0,2260.0,345.0,1182.0,341.0,6.0705,236700.0,<1H OCEAN +-117.85,33.79,46.0,1846.0,383.0,867.0,336.0,3.4234,200000.0,<1H OCEAN +-117.85,33.79,52.0,2102.0,403.0,898.0,365.0,3.6827,236800.0,<1H OCEAN +-117.86,33.79,31.0,3523.0,922.0,2660.0,949.0,3.1792,146400.0,<1H OCEAN +-117.85,33.79,52.0,1963.0,430.0,1197.0,415.0,3.8929,211000.0,<1H OCEAN +-117.85,33.78,23.0,3187.0,870.0,1977.0,852.0,3.3939,212100.0,<1H OCEAN +-117.86,33.78,25.0,2635.0,660.0,1710.0,634.0,3.125,215000.0,<1H OCEAN +-117.85,33.77,16.0,2186.0,511.0,908.0,466.0,4.575,225000.0,<1H OCEAN +-117.85,33.79,40.0,1251.0,336.0,729.0,343.0,2.4688,236400.0,<1H OCEAN +-117.86,33.79,34.0,1883.0,408.0,1227.0,424.0,3.8929,187500.0,<1H OCEAN +-117.86,33.78,21.0,2713.0,731.0,1952.0,722.0,2.6959,178800.0,<1H OCEAN +-117.87,33.78,21.0,2487.0,573.0,1515.0,494.0,4.3039,168500.0,<1H OCEAN +-117.87,33.78,19.0,2813.0,567.0,1334.0,596.0,4.7208,173500.0,<1H OCEAN +-117.87,33.78,30.0,2022.0,522.0,1196.0,463.0,3.7454,186000.0,<1H OCEAN +-117.86,33.8,35.0,1683.0,347.0,1242.0,335.0,3.5172,190400.0,<1H OCEAN +-117.86,33.79,42.0,1024.0,191.0,483.0,187.0,4.105,194500.0,<1H OCEAN +-117.87,33.79,25.0,2546.0,545.0,1543.0,521.0,4.192,219900.0,<1H OCEAN +-117.88,33.79,32.0,1484.0,295.0,928.0,295.0,5.1418,190300.0,<1H OCEAN +-117.89,33.78,16.0,6352.0,1747.0,5085.0,1649.0,2.8835,193800.0,<1H OCEAN +-117.9,33.78,25.0,10336.0,2596.0,7111.0,2419.0,3.3627,197900.0,<1H OCEAN +-117.85,33.84,26.0,2095.0,280.0,793.0,261.0,6.6719,271700.0,<1H OCEAN +-117.86,33.84,19.0,1725.0,392.0,920.0,400.0,3.0087,159400.0,<1H OCEAN +-117.85,33.84,17.0,2830.0,502.0,1370.0,459.0,5.1785,247300.0,<1H OCEAN +-117.85,33.83,26.0,1904.0,292.0,945.0,303.0,5.6784,232400.0,<1H OCEAN +-117.86,33.83,23.0,2377.0,403.0,1101.0,408.0,5.3439,227100.0,<1H OCEAN +-117.84,33.84,23.0,4388.0,864.0,2526.0,846.0,4.5217,219400.0,<1H OCEAN +-117.86,33.8,34.0,1793.0,480.0,1722.0,441.0,2.8235,153100.0,<1H OCEAN +-117.85,33.81,26.0,4186.0,767.0,2447.0,777.0,4.9917,248100.0,<1H OCEAN +-117.85,33.81,32.0,1766.0,322.0,876.0,330.0,4.0417,234500.0,<1H OCEAN +-117.85,33.8,34.0,1593.0,283.0,872.0,255.0,3.825,216700.0,<1H OCEAN +-117.85,33.8,40.0,1461.0,286.0,1322.0,264.0,4.3269,194100.0,<1H OCEAN +-117.84,33.81,26.0,5574.0,1025.0,2607.0,988.0,4.0324,244900.0,<1H OCEAN +-117.84,33.8,35.0,1490.0,251.0,629.0,257.0,4.3661,222100.0,<1H OCEAN +-117.84,33.8,34.0,2004.0,331.0,843.0,328.0,3.59,230600.0,<1H OCEAN +-117.86,33.82,9.0,1682.0,291.0,1015.0,271.0,6.6603,230900.0,<1H OCEAN +-117.84,33.82,24.0,10281.0,1689.0,4926.0,1629.0,4.7946,251200.0,<1H OCEAN +-117.84,33.84,23.0,6157.0,1129.0,2817.0,1073.0,5.0629,232600.0,<1H OCEAN +-117.89,33.84,35.0,3315.0,744.0,2425.0,687.0,3.5521,182800.0,<1H OCEAN +-117.89,33.83,35.0,2984.0,446.0,1435.0,455.0,5.6276,200800.0,<1H OCEAN +-117.9,33.83,33.0,3065.0,611.0,2204.0,606.0,3.8456,211800.0,<1H OCEAN +-117.89,33.82,21.0,1591.0,298.0,904.0,297.0,4.8906,179100.0,<1H OCEAN +-117.89,33.8,38.0,51.0,12.0,41.0,10.0,6.0224,187500.0,<1H OCEAN +-117.89,33.82,24.0,1268.0,210.0,700.0,224.0,5.0605,216200.0,<1H OCEAN +-117.89,33.82,18.0,3197.0,809.0,1894.0,726.0,3.6761,140500.0,<1H OCEAN +-117.87,33.81,15.0,3082.0,536.0,1268.0,531.0,3.7604,280100.0,<1H OCEAN +-117.87,33.84,10.0,3381.0,729.0,1584.0,636.0,5.3812,235400.0,<1H OCEAN +-117.88,33.84,26.0,1499.0,290.0,755.0,277.0,3.5893,238500.0,<1H OCEAN +-117.88,33.84,31.0,3301.0,712.0,1532.0,682.0,3.7303,223800.0,<1H OCEAN +-117.87,33.83,27.0,2287.0,,1140.0,351.0,5.6163,231000.0,<1H OCEAN +-117.88,33.83,22.0,3522.0,543.0,1706.0,524.0,6.4685,241200.0,<1H OCEAN +-117.88,33.83,25.0,1785.0,248.0,750.0,251.0,6.8407,266700.0,<1H OCEAN +-117.88,33.82,17.0,2247.0,705.0,1382.0,618.0,3.8631,225000.0,<1H OCEAN +-117.88,33.82,26.0,1783.0,298.0,1048.0,306.0,6.0488,232000.0,<1H OCEAN +-117.87,33.82,26.0,2435.0,346.0,1088.0,350.0,5.9397,249400.0,<1H OCEAN +-117.88,33.85,26.0,3924.0,781.0,2332.0,725.0,3.7772,223900.0,<1H OCEAN +-117.88,33.85,34.0,1127.0,185.0,588.0,181.0,4.375,224700.0,<1H OCEAN +-117.88,33.84,34.0,1410.0,214.0,837.0,240.0,6.1168,213900.0,<1H OCEAN +-117.88,33.84,33.0,1526.0,237.0,906.0,245.0,5.1782,225000.0,<1H OCEAN +-117.9,33.85,31.0,3413.0,764.0,2326.0,728.0,4.325,187100.0,<1H OCEAN +-117.9,33.85,35.0,1756.0,328.0,1026.0,332.0,3.6,193500.0,<1H OCEAN +-117.89,33.85,18.0,2036.0,414.0,1292.0,380.0,3.875,273000.0,<1H OCEAN +-117.9,33.85,32.0,1605.0,314.0,986.0,306.0,3.3375,186200.0,<1H OCEAN +-117.89,33.85,13.0,1583.0,474.0,1672.0,432.0,3.2303,201300.0,<1H OCEAN +-117.9,33.84,31.0,2043.0,468.0,1524.0,454.0,3.5329,187400.0,<1H OCEAN +-117.89,33.84,33.0,1587.0,374.0,1159.0,331.0,2.8021,195100.0,<1H OCEAN +-117.88,33.85,25.0,1234.0,351.0,507.0,285.0,2.3173,225000.0,<1H OCEAN +-117.88,33.84,25.0,1781.0,349.0,918.0,378.0,3.9286,262700.0,<1H OCEAN +-117.87,33.84,23.0,1678.0,369.0,912.0,347.0,4.5,237300.0,<1H OCEAN +-117.87,33.84,25.0,1928.0,414.0,961.0,385.0,4.0724,231400.0,<1H OCEAN +-117.87,33.84,16.0,1545.0,354.0,730.0,350.0,4.5112,139000.0,<1H OCEAN +-117.87,33.84,17.0,2395.0,410.0,1224.0,399.0,5.1182,249200.0,<1H OCEAN +-117.85,33.85,17.0,4678.0,1065.0,2427.0,1020.0,4.2276,254100.0,<1H OCEAN +-117.86,33.85,17.0,1131.0,236.0,622.0,244.0,4.9306,158500.0,<1H OCEAN +-117.92,33.85,38.0,2082.0,532.0,1592.0,510.0,2.3704,166100.0,<1H OCEAN +-117.92,33.84,45.0,2019.0,394.0,1549.0,377.0,4.6111,223000.0,<1H OCEAN +-117.92,33.85,44.0,1231.0,258.0,682.0,244.0,3.2344,170100.0,<1H OCEAN +-117.91,33.85,35.0,932.0,258.0,1147.0,267.0,2.7014,156700.0,<1H OCEAN +-117.91,33.84,35.0,1244.0,324.0,1603.0,322.0,2.9583,175400.0,<1H OCEAN +-117.91,33.85,22.0,1178.0,289.0,865.0,294.0,3.025,180000.0,<1H OCEAN +-117.91,33.84,29.0,1570.0,482.0,1849.0,430.0,2.6563,162500.0,<1H OCEAN +-117.93,33.85,27.0,1962.0,544.0,1492.0,481.0,1.9621,118100.0,<1H OCEAN +-117.94,33.85,26.0,1888.0,429.0,1550.0,458.0,3.3393,168600.0,<1H OCEAN +-117.93,33.85,33.0,2489.0,546.0,1857.0,444.0,2.9474,178400.0,<1H OCEAN +-117.93,33.85,31.0,2149.0,465.0,966.0,302.0,3.875,183900.0,<1H OCEAN +-117.93,33.85,25.0,1026.0,288.0,1646.0,283.0,4.2019,163900.0,<1H OCEAN +-117.93,33.85,36.0,2147.0,416.0,1011.0,392.0,3.2188,196900.0,<1H OCEAN +-117.94,33.85,37.0,588.0,121.0,436.0,104.0,4.275,186200.0,<1H OCEAN +-117.93,33.84,23.0,2870.0,653.0,1680.0,598.0,3.2301,189900.0,<1H OCEAN +-117.95,33.85,13.0,6963.0,1426.0,3892.0,1375.0,4.1325,203500.0,<1H OCEAN +-117.96,33.85,35.0,1175.0,191.0,568.0,186.0,4.125,189200.0,<1H OCEAN +-117.97,33.85,30.0,2513.0,476.0,1611.0,472.0,4.0061,182900.0,<1H OCEAN +-117.96,33.85,36.0,1951.0,365.0,1254.0,358.0,4.8438,185700.0,<1H OCEAN +-117.95,33.84,32.0,1378.0,492.0,1202.0,448.0,3.4028,183700.0,<1H OCEAN +-117.95,33.84,19.0,1749.0,406.0,969.0,391.0,3.75,173400.0,<1H OCEAN +-117.95,33.84,34.0,1229.0,215.0,1035.0,218.0,3.5455,180000.0,<1H OCEAN +-117.94,33.84,25.0,4016.0,831.0,2166.0,774.0,3.1884,135400.0,<1H OCEAN +-117.94,33.84,28.0,604.0,207.0,615.0,212.0,3.6214,182100.0,<1H OCEAN +-117.98,33.85,23.0,2089.0,377.0,1085.0,362.0,4.765,181500.0,<1H OCEAN +-117.98,33.84,33.0,2291.0,439.0,1187.0,405.0,3.9539,191100.0,<1H OCEAN +-117.98,33.84,35.0,984.0,179.0,661.0,199.0,5.0747,189600.0,<1H OCEAN +-117.97,33.85,45.0,818.0,147.0,546.0,152.0,5.1057,170700.0,<1H OCEAN +-117.96,33.84,31.0,2265.0,537.0,1617.0,507.0,3.4583,186300.0,<1H OCEAN +-117.97,33.84,34.0,874.0,153.0,549.0,153.0,4.8667,186800.0,<1H OCEAN +-117.97,33.84,35.0,793.0,128.0,589.0,137.0,5.25,190200.0,<1H OCEAN +-117.97,33.84,25.0,2471.0,518.0,1539.0,500.0,4.2679,191700.0,<1H OCEAN +-117.97,33.84,18.0,1063.0,209.0,462.0,223.0,2.8348,219000.0,<1H OCEAN +-117.99,33.84,31.0,2982.0,547.0,1895.0,570.0,4.9115,255500.0,<1H OCEAN +-117.97,33.83,16.0,2035.0,564.0,1118.0,503.0,3.2546,187500.0,<1H OCEAN +-117.98,33.84,31.0,1252.0,225.0,714.0,226.0,4.6042,220700.0,<1H OCEAN +-117.98,33.83,17.0,3506.0,992.0,2104.0,893.0,3.3006,185800.0,<1H OCEAN +-118.0,33.82,21.0,2253.0,580.0,1536.0,500.0,3.2326,204700.0,<1H OCEAN +-118.01,33.82,31.0,1960.0,380.0,1356.0,356.0,4.0625,225900.0,<1H OCEAN +-118.01,33.83,24.0,4639.0,1374.0,3093.0,1257.0,2.5577,202300.0,<1H OCEAN +-118.01,33.83,23.0,1086.0,268.0,825.0,250.0,2.4609,219600.0,<1H OCEAN +-118.0,33.83,26.0,1718.0,385.0,1022.0,368.0,3.9333,196100.0,<1H OCEAN +-118.0,33.83,24.0,2578.0,580.0,1217.0,529.0,2.2401,212500.0,<1H OCEAN +-118.0,33.82,18.0,2947.0,559.0,1820.0,551.0,4.5294,224800.0,<1H OCEAN +-117.99,33.83,25.0,3434.0,835.0,1749.0,657.0,3.2539,199000.0,<1H OCEAN +-117.99,33.82,19.0,1991.0,528.0,1202.0,460.0,3.1538,252100.0,<1H OCEAN +-117.99,33.83,35.0,1484.0,252.0,916.0,248.0,5.2657,191400.0,<1H OCEAN +-117.99,33.82,33.0,2342.0,475.0,1367.0,509.0,4.1167,215500.0,<1H OCEAN +-117.98,33.83,17.0,3419.0,932.0,2460.0,766.0,3.2823,228500.0,<1H OCEAN +-117.98,33.82,34.0,1038.0,175.0,578.0,174.0,4.9219,200000.0,<1H OCEAN +-117.98,33.82,34.0,1290.0,220.0,867.0,241.0,5.5486,218100.0,<1H OCEAN +-117.98,33.83,32.0,1133.0,166.0,523.0,187.0,6.213,230800.0,<1H OCEAN +-117.97,33.83,22.0,3310.0,688.0,1807.0,674.0,4.0185,200900.0,<1H OCEAN +-117.97,33.82,26.0,2335.0,504.0,1121.0,502.0,2.9891,205200.0,<1H OCEAN +-117.97,33.82,26.0,4013.0,985.0,2442.0,922.0,3.7655,197700.0,<1H OCEAN +-117.96,33.83,30.0,2838.0,649.0,1758.0,593.0,3.3831,197400.0,<1H OCEAN +-117.96,33.83,18.0,2067.0,770.0,870.0,541.0,3.1315,137500.0,<1H OCEAN +-117.96,33.83,29.0,1194.0,176.0,474.0,170.0,6.1001,298900.0,<1H OCEAN +-117.95,33.84,18.0,3418.0,815.0,1961.0,773.0,3.65,171400.0,<1H OCEAN +-117.94,33.83,20.0,812.0,192.0,494.0,172.0,3.25,350000.0,<1H OCEAN +-117.95,33.83,31.0,2421.0,389.0,1348.0,413.0,4.9394,217800.0,<1H OCEAN +-117.94,33.82,34.0,1347.0,212.0,676.0,201.0,3.8828,215400.0,<1H OCEAN +-117.94,33.82,27.0,1366.0,326.0,878.0,325.0,3.4,196900.0,<1H OCEAN +-117.95,33.82,29.0,2929.0,640.0,1618.0,584.0,3.6875,213200.0,<1H OCEAN +-117.95,33.83,35.0,1107.0,207.0,641.0,210.0,5.0599,216700.0,<1H OCEAN +-117.96,33.83,34.0,982.0,148.0,498.0,156.0,6.3214,220800.0,<1H OCEAN +-117.95,33.83,36.0,1380.0,237.0,690.0,234.0,3.8214,210900.0,<1H OCEAN +-117.93,33.83,32.0,1792.0,411.0,1131.0,381.0,2.4942,186300.0,<1H OCEAN +-117.92,33.82,36.0,2360.0,405.0,1479.0,386.0,4.3583,187200.0,<1H OCEAN +-117.94,33.82,29.0,1422.0,409.0,1057.0,390.0,2.3347,208100.0,<1H OCEAN +-117.94,33.82,24.0,4735.0,955.0,2600.0,868.0,5.0764,228600.0,<1H OCEAN +-117.93,33.82,28.0,2444.0,555.0,1848.0,567.0,3.0179,198800.0,<1H OCEAN +-117.92,33.84,38.0,1316.0,263.0,671.0,278.0,3.2969,220000.0,<1H OCEAN +-117.92,33.83,6.0,3136.0,990.0,1894.0,859.0,2.5564,171300.0,<1H OCEAN +-117.93,33.83,30.0,1561.0,381.0,1104.0,391.0,3.375,201900.0,<1H OCEAN +-117.93,33.84,34.0,2160.0,298.0,852.0,305.0,6.0531,287100.0,<1H OCEAN +-117.93,33.84,26.0,2811.0,612.0,1374.0,566.0,3.475,282500.0,<1H OCEAN +-117.91,33.84,26.0,1156.0,393.0,1880.0,400.0,2.2716,350000.0,<1H OCEAN +-117.9,33.83,23.0,2459.0,689.0,2720.0,598.0,2.8072,164700.0,<1H OCEAN +-117.91,33.83,9.0,1160.0,368.0,735.0,325.0,1.119,175000.0,<1H OCEAN +-117.92,33.83,17.0,382.0,86.0,272.0,81.0,1.425,212500.0,<1H OCEAN +-117.91,33.84,16.0,919.0,253.0,912.0,249.0,1.5903,165400.0,<1H OCEAN +-117.91,33.84,25.0,1021.0,252.0,975.0,258.0,3.125,168100.0,<1H OCEAN +-117.91,33.83,47.0,504.0,113.0,375.0,109.0,3.6607,160600.0,<1H OCEAN +-117.91,33.83,37.0,1039.0,260.0,719.0,243.0,3.0288,161400.0,<1H OCEAN +-117.92,33.83,36.0,1072.0,193.0,639.0,196.0,5.0275,179300.0,<1H OCEAN +-117.92,33.83,52.0,1514.0,301.0,855.0,293.0,3.6042,166400.0,<1H OCEAN +-117.91,33.83,32.0,1855.0,527.0,2568.0,504.0,2.5509,170800.0,<1H OCEAN +-117.9,33.82,32.0,1187.0,302.0,1003.0,275.0,2.4931,166900.0,<1H OCEAN +-117.92,33.82,10.0,1548.0,506.0,1535.0,424.0,4.5057,152400.0,<1H OCEAN +-117.91,33.82,32.0,2696.0,640.0,2330.0,626.0,2.9479,184600.0,<1H OCEAN +-117.91,33.82,29.0,1444.0,326.0,1038.0,271.0,2.3843,182900.0,<1H OCEAN +-117.91,33.81,18.0,1181.0,353.0,781.0,340.0,2.5625,153100.0,<1H OCEAN +-117.91,33.82,32.0,1408.0,307.0,1331.0,284.0,3.7014,179600.0,<1H OCEAN +-117.93,33.81,18.0,3291.0,587.0,1640.0,563.0,4.8981,166300.0,<1H OCEAN +-117.92,33.81,34.0,988.0,173.0,759.0,184.0,5.6047,205100.0,<1H OCEAN +-117.93,33.8,34.0,3903.0,717.0,2054.0,716.0,4.2731,218000.0,<1H OCEAN +-117.92,33.8,17.0,1317.0,256.0,679.0,272.0,4.6696,159500.0,<1H OCEAN +-117.9,33.8,21.0,1342.0,326.0,748.0,335.0,2.9231,45000.0,<1H OCEAN +-117.9,33.8,22.0,2964.0,829.0,2639.0,771.0,2.4833,157500.0,<1H OCEAN +-117.9,33.8,23.0,1368.0,397.0,1940.0,358.0,3.0789,350000.0,<1H OCEAN +-117.9,33.8,27.0,2176.0,442.0,1440.0,418.0,4.375,212500.0,<1H OCEAN +-117.94,33.81,33.0,1891.0,334.0,932.0,343.0,4.2759,238000.0,<1H OCEAN +-117.94,33.81,25.0,1731.0,482.0,1127.0,455.0,3.256,214300.0,<1H OCEAN +-117.94,33.81,34.0,1290.0,203.0,664.0,204.0,5.8461,227400.0,<1H OCEAN +-117.94,33.81,26.0,1589.0,259.0,735.0,315.0,4.5714,243200.0,<1H OCEAN +-117.94,33.8,28.0,2914.0,489.0,1500.0,499.0,4.9429,254800.0,<1H OCEAN +-117.94,33.81,24.0,4602.0,1131.0,3003.0,1014.0,3.6771,172200.0,<1H OCEAN +-117.93,33.8,29.0,1672.0,267.0,891.0,281.0,4.8611,231900.0,<1H OCEAN +-117.95,33.82,35.0,1068.0,190.0,514.0,174.0,4.0735,208700.0,<1H OCEAN +-117.95,33.82,35.0,1117.0,181.0,496.0,168.0,4.3269,224700.0,<1H OCEAN +-117.96,33.82,32.0,2856.0,622.0,1499.0,601.0,3.63,183400.0,<1H OCEAN +-117.96,33.82,32.0,2726.0,556.0,1513.0,531.0,3.7917,197400.0,<1H OCEAN +-117.96,33.8,30.0,729.0,131.0,488.0,139.0,4.7667,195200.0,<1H OCEAN +-117.96,33.81,35.0,1153.0,192.0,884.0,208.0,5.2384,177400.0,<1H OCEAN +-117.96,33.81,34.0,1416.0,277.0,980.0,284.0,4.7772,182500.0,<1H OCEAN +-117.96,33.81,35.0,1996.0,326.0,1409.0,330.0,4.7738,180000.0,<1H OCEAN +-117.96,33.82,29.0,2176.0,468.0,1632.0,428.0,3.707,180400.0,<1H OCEAN +-117.96,33.82,19.0,1199.0,251.0,730.0,276.0,3.6422,209400.0,<1H OCEAN +-117.95,33.81,33.0,1724.0,291.0,943.0,285.0,5.118,195200.0,<1H OCEAN +-117.96,33.81,34.0,1941.0,356.0,1021.0,339.0,4.4663,183900.0,<1H OCEAN +-117.95,33.81,24.0,2749.0,498.0,1367.0,460.0,4.025,240700.0,<1H OCEAN +-118.0,33.81,33.0,2970.0,547.0,1869.0,539.0,4.3636,201800.0,<1H OCEAN +-118.0,33.81,22.0,2642.0,640.0,1702.0,588.0,3.5268,174700.0,<1H OCEAN +-118.01,33.81,25.0,1831.0,345.0,809.0,339.0,4.5179,177100.0,<1H OCEAN +-118.0,33.82,24.0,3002.0,644.0,1495.0,634.0,3.1087,202800.0,<1H OCEAN +-118.0,33.81,13.0,2782.0,605.0,1749.0,628.0,4.1276,153800.0,<1H OCEAN +-118.0,33.81,17.0,2142.0,436.0,946.0,412.0,3.7059,146300.0,<1H OCEAN +-117.99,33.8,18.0,383.0,94.0,487.0,98.0,3.975,162500.0,<1H OCEAN +-118.0,33.81,17.0,1530.0,404.0,883.0,344.0,2.8835,196500.0,<1H OCEAN +-117.99,33.82,21.0,2281.0,557.0,1510.0,460.0,2.8625,189600.0,<1H OCEAN +-117.99,33.81,23.0,3284.0,795.0,3257.0,758.0,2.4526,182900.0,<1H OCEAN +-117.99,33.81,42.0,161.0,40.0,157.0,50.0,2.2,153100.0,<1H OCEAN +-117.99,33.81,46.0,38.0,8.0,66.0,14.0,4.1667,162500.0,<1H OCEAN +-117.98,33.81,28.0,3528.0,816.0,2304.0,764.0,2.582,181800.0,<1H OCEAN +-117.98,33.81,18.0,3751.0,878.0,2281.0,815.0,3.7201,183100.0,<1H OCEAN +-117.98,33.81,35.0,897.0,156.0,479.0,161.0,5.152,215600.0,<1H OCEAN +-117.97,33.81,26.0,4022.0,1081.0,2457.0,1001.0,2.8042,206300.0,<1H OCEAN +-117.97,33.81,30.0,2406.0,462.0,1753.0,456.0,4.485,180600.0,<1H OCEAN +-117.99,33.8,25.0,3179.0,639.0,2526.0,623.0,3.3281,180800.0,<1H OCEAN +-117.99,33.79,33.0,2064.0,324.0,1384.0,315.0,4.5263,169000.0,<1H OCEAN +-117.99,33.79,29.0,2470.0,560.0,1589.0,513.0,3.1801,190500.0,<1H OCEAN +-117.99,33.79,35.0,2301.0,467.0,2272.0,454.0,3.9566,167800.0,<1H OCEAN +-117.98,33.8,35.0,2114.0,341.0,1077.0,343.0,5.4876,227500.0,<1H OCEAN +-117.98,33.79,35.0,2356.0,478.0,1659.0,480.0,4.1115,179700.0,<1H OCEAN +-117.98,33.8,32.0,2161.0,432.0,1503.0,402.0,4.3036,191400.0,<1H OCEAN +-117.97,33.8,35.0,2985.0,474.0,1614.0,453.0,5.4631,225600.0,<1H OCEAN +-117.97,33.79,33.0,3268.0,641.0,1704.0,591.0,3.6849,211400.0,<1H OCEAN +-118.0,33.79,18.0,3679.0,694.0,1820.0,652.0,3.6531,143500.0,<1H OCEAN +-117.99,33.78,15.0,4273.0,993.0,2300.0,946.0,3.5313,213000.0,<1H OCEAN +-117.99,33.79,21.0,2695.0,707.0,1888.0,683.0,3.2857,213300.0,<1H OCEAN +-117.98,33.78,31.0,2825.0,546.0,1908.0,563.0,3.9798,187500.0,<1H OCEAN +-117.97,33.79,34.0,2456.0,410.0,1289.0,442.0,4.1818,224200.0,<1H OCEAN +-117.99,33.78,19.0,7399.0,1698.0,3554.0,1593.0,3.1049,173900.0,<1H OCEAN +-117.97,33.78,35.0,3148.0,597.0,2110.0,587.0,3.9479,203800.0,<1H OCEAN +-117.98,33.78,22.0,4255.0,971.0,2901.0,920.0,3.2636,180200.0,<1H OCEAN +-117.96,33.8,33.0,1984.0,420.0,1119.0,387.0,3.4821,231300.0,<1H OCEAN +-117.96,33.79,36.0,2398.0,403.0,1261.0,402.0,5.2816,221800.0,<1H OCEAN +-117.96,33.8,35.0,1493.0,267.0,811.0,272.0,5.244,218000.0,<1H OCEAN +-117.96,33.8,33.0,2362.0,394.0,1185.0,387.0,4.425,188400.0,<1H OCEAN +-117.95,33.79,34.0,2584.0,408.0,1233.0,405.0,5.6935,218300.0,<1H OCEAN +-117.95,33.78,26.0,4115.0,883.0,2184.0,825.0,3.9536,191000.0,<1H OCEAN +-117.96,33.79,29.0,1813.0,501.0,1170.0,482.0,2.0677,214500.0,<1H OCEAN +-117.96,33.78,35.0,1330.0,201.0,658.0,217.0,6.37,229200.0,<1H OCEAN +-117.94,33.8,23.0,2757.0,734.0,1811.0,707.0,2.8,214300.0,<1H OCEAN +-117.95,33.79,34.0,2912.0,520.0,1625.0,501.0,4.4667,190600.0,<1H OCEAN +-117.95,33.8,34.0,1654.0,285.0,905.0,292.0,4.6389,214600.0,<1H OCEAN +-117.95,33.8,32.0,1219.0,192.0,634.0,197.0,5.237,215700.0,<1H OCEAN +-117.94,33.79,24.0,4179.0,784.0,1902.0,733.0,4.7986,236500.0,<1H OCEAN +-117.93,33.78,36.0,2169.0,359.0,1018.0,370.0,4.3906,231300.0,<1H OCEAN +-117.94,33.78,34.0,2627.0,468.0,1409.0,450.0,4.7731,199200.0,<1H OCEAN +-117.93,33.79,36.0,2363.0,403.0,1240.0,391.0,4.0909,190800.0,<1H OCEAN +-117.93,33.79,34.0,3592.0,616.0,2138.0,605.0,5.2129,193400.0,<1H OCEAN +-117.92,33.79,35.0,1785.0,288.0,1033.0,297.0,4.5739,190500.0,<1H OCEAN +-117.92,33.79,29.0,3692.0,969.0,2683.0,881.0,3.1726,198700.0,<1H OCEAN +-117.92,33.79,26.0,2737.0,614.0,1877.0,606.0,2.8622,184300.0,<1H OCEAN +-117.91,33.79,22.0,4417.0,1054.0,2759.0,983.0,4.25,170300.0,<1H OCEAN +-117.91,33.78,33.0,2729.0,549.0,2223.0,535.0,4.0362,177900.0,<1H OCEAN +-117.93,33.78,28.0,4380.0,820.0,2187.0,835.0,3.9018,182300.0,<1H OCEAN +-117.92,33.77,28.0,3614.0,960.0,3282.0,889.0,3.522,190300.0,<1H OCEAN +-117.91,33.78,26.0,4297.0,1037.0,3596.0,967.0,3.045,184000.0,<1H OCEAN +-117.92,33.78,35.0,1654.0,323.0,1065.0,354.0,3.4837,186500.0,<1H OCEAN +-117.95,33.78,9.0,3553.0,1035.0,2017.0,986.0,2.9726,133800.0,<1H OCEAN +-117.94,33.77,32.0,714.0,142.0,654.0,154.0,4.5052,170800.0,<1H OCEAN +-117.94,33.77,33.0,2964.0,747.0,2235.0,718.0,3.2591,175900.0,<1H OCEAN +-117.94,33.78,11.0,2880.0,745.0,1806.0,722.0,3.8056,171100.0,<1H OCEAN +-117.94,33.78,40.0,299.0,68.0,163.0,70.0,3.0125,166100.0,<1H OCEAN +-117.93,33.77,36.0,3157.0,582.0,1842.0,561.0,4.5833,190700.0,<1H OCEAN +-117.96,33.78,26.0,2136.0,557.0,1528.0,537.0,2.4931,236100.0,<1H OCEAN +-117.95,33.78,32.0,2296.0,560.0,1376.0,532.0,3.7303,188500.0,<1H OCEAN +-117.96,33.78,33.0,1520.0,,658.0,242.0,4.875,269300.0,<1H OCEAN +-117.95,33.77,38.0,1476.0,308.0,1114.0,309.0,4.1917,181800.0,<1H OCEAN +-117.95,33.77,38.0,989.0,246.0,691.0,204.0,3.2632,180900.0,<1H OCEAN +-117.96,33.77,32.0,4398.0,905.0,2777.0,884.0,4.1321,222800.0,<1H OCEAN +-117.97,33.77,20.0,1988.0,424.0,1277.0,425.0,2.9414,162200.0,<1H OCEAN +-117.97,33.77,25.0,1295.0,417.0,856.0,342.0,2.7157,350000.0,<1H OCEAN +-117.97,33.77,22.0,2244.0,575.0,1543.0,533.0,2.6618,179600.0,<1H OCEAN +-117.99,33.77,15.0,2081.0,531.0,1617.0,561.0,3.4955,160900.0,<1H OCEAN +-117.98,33.77,7.0,2252.0,570.0,1576.0,550.0,3.6333,169800.0,<1H OCEAN +-117.97,33.76,18.0,1862.0,399.0,1301.0,369.0,3.1771,194000.0,<1H OCEAN +-117.98,33.77,22.0,3236.0,673.0,2034.0,662.0,4.0955,174200.0,<1H OCEAN +-117.98,33.76,29.0,1518.0,312.0,1086.0,317.0,4.32,196900.0,<1H OCEAN +-117.97,33.76,28.0,1386.0,272.0,901.0,294.0,4.7464,187500.0,<1H OCEAN +-117.96,33.76,24.0,1328.0,290.0,1012.0,306.0,4.2813,189500.0,<1H OCEAN +-117.96,33.76,22.0,2520.0,556.0,2126.0,527.0,3.7734,193900.0,<1H OCEAN +-117.96,33.75,14.0,2509.0,611.0,1814.0,547.0,2.7986,176100.0,<1H OCEAN +-117.95,33.76,29.0,1829.0,366.0,1703.0,343.0,4.1295,188000.0,<1H OCEAN +-117.94,33.76,27.0,2512.0,506.0,1861.0,511.0,4.2386,184200.0,<1H OCEAN +-117.94,33.76,33.0,1441.0,337.0,1233.0,331.0,3.7232,176200.0,<1H OCEAN +-117.95,33.76,24.0,3956.0,812.0,3196.0,795.0,4.3512,191400.0,<1H OCEAN +-117.94,33.75,30.0,5268.0,1093.0,4480.0,1050.0,4.015,186700.0,<1H OCEAN +-117.96,33.75,25.0,1323.0,208.0,852.0,229.0,4.6167,237300.0,<1H OCEAN +-117.96,33.75,22.0,2300.0,539.0,1625.0,542.0,2.78,196300.0,<1H OCEAN +-117.95,33.75,19.0,1983.0,283.0,1098.0,275.0,6.6355,276100.0,<1H OCEAN +-117.95,33.75,24.0,2027.0,358.0,1405.0,341.0,5.1416,231400.0,<1H OCEAN +-117.97,33.76,27.0,1712.0,325.0,1036.0,345.0,4.0508,183900.0,<1H OCEAN +-117.97,33.75,26.0,3361.0,722.0,2709.0,648.0,3.9107,190700.0,<1H OCEAN +-117.97,33.75,32.0,1564.0,270.0,973.0,290.0,3.75,190400.0,<1H OCEAN +-117.93,33.76,24.0,3202.0,703.0,3308.0,714.0,4.1577,174100.0,<1H OCEAN +-117.93,33.75,24.0,1380.0,339.0,1472.0,304.0,4.2219,162800.0,<1H OCEAN +-117.93,33.75,15.0,2448.0,602.0,1666.0,575.0,3.5967,141600.0,<1H OCEAN +-117.93,33.76,17.0,3341.0,803.0,3381.0,825.0,3.371,161800.0,<1H OCEAN +-117.93,33.76,21.0,2884.0,662.0,2613.0,645.0,4.05,177900.0,<1H OCEAN +-117.92,33.75,8.0,2325.0,598.0,1511.0,565.0,3.3629,137500.0,<1H OCEAN +-117.92,33.75,19.0,1920.0,471.0,1413.0,432.0,4.0313,147500.0,<1H OCEAN +-117.89,33.77,29.0,2577.0,445.0,1849.0,470.0,4.4732,194800.0,<1H OCEAN +-117.9,33.77,35.0,2002.0,378.0,1726.0,387.0,3.9613,182300.0,<1H OCEAN +-117.91,33.77,26.0,5556.0,1398.0,4545.0,1333.0,3.0902,190400.0,<1H OCEAN +-117.91,33.76,22.0,7531.0,1569.0,5254.0,1523.0,3.8506,167400.0,<1H OCEAN +-117.92,33.76,26.0,784.0,177.0,662.0,169.0,2.8438,174300.0,<1H OCEAN +-117.91,33.76,20.0,4413.0,,4818.0,1063.0,2.8594,215100.0,<1H OCEAN +-117.92,33.75,23.0,893.0,223.0,1149.0,216.0,2.6442,156300.0,<1H OCEAN +-117.92,33.75,32.0,790.0,199.0,1196.0,201.0,3.0625,142800.0,<1H OCEAN +-117.91,33.75,8.0,2346.0,679.0,3842.0,674.0,3.0635,160000.0,<1H OCEAN +-117.93,33.74,15.0,1206.0,282.0,677.0,270.0,3.9219,142600.0,<1H OCEAN +-117.93,33.74,30.0,1654.0,434.0,1843.0,467.0,3.1403,153000.0,<1H OCEAN +-117.93,33.74,5.0,639.0,197.0,666.0,197.0,3.3017,87500.0,<1H OCEAN +-117.92,33.74,13.0,4620.0,1265.0,3385.0,1109.0,3.1773,186500.0,<1H OCEAN +-117.92,33.74,18.0,1639.0,491.0,2513.0,458.0,2.1838,159700.0,<1H OCEAN +-117.91,33.74,15.0,715.0,214.0,1394.0,244.0,3.3846,162500.0,<1H OCEAN +-117.92,33.74,24.0,5321.0,1063.0,4011.0,1047.0,4.3882,189300.0,<1H OCEAN +-117.93,33.73,27.0,3662.0,834.0,3009.0,743.0,3.9816,179500.0,<1H OCEAN +-117.94,33.74,24.0,4248.0,840.0,3118.0,798.0,4.2222,207200.0,<1H OCEAN +-117.94,33.73,24.0,4197.0,718.0,2468.0,714.0,5.2563,211400.0,<1H OCEAN +-117.95,33.74,16.0,2768.0,600.0,1182.0,563.0,3.7162,201200.0,<1H OCEAN +-117.95,33.74,25.0,1393.0,243.0,976.0,245.0,5.4485,225200.0,<1H OCEAN +-117.95,33.74,21.0,3576.0,554.0,1846.0,538.0,5.9838,271900.0,<1H OCEAN +-117.98,33.7,17.0,1989.0,411.0,1401.0,453.0,4.1603,160500.0,<1H OCEAN +-117.98,33.71,24.0,2308.0,464.0,1101.0,407.0,4.4766,230000.0,<1H OCEAN +-117.99,33.71,19.0,1967.0,487.0,1251.0,404.0,3.6696,218800.0,<1H OCEAN +-117.98,33.71,26.0,1905.0,373.0,1098.0,368.0,4.8611,229600.0,<1H OCEAN +-117.96,33.68,26.0,1374.0,234.0,731.0,244.0,6.0905,224800.0,<1H OCEAN +-117.97,33.68,23.0,1722.0,316.0,865.0,309.0,4.6452,273800.0,<1H OCEAN +-117.96,33.68,25.0,2004.0,349.0,1085.0,343.0,4.7656,230700.0,<1H OCEAN +-117.96,33.68,18.0,2594.0,539.0,817.0,485.0,2.3674,219200.0,<1H OCEAN +-117.96,33.68,24.0,6517.0,1279.0,3441.0,1198.0,4.25,152100.0,<1H OCEAN +-117.97,33.68,26.0,3653.0,568.0,1930.0,585.0,5.7301,260900.0,<1H OCEAN +-117.95,33.69,26.0,1417.0,264.0,817.0,261.0,4.875,230400.0,<1H OCEAN +-117.95,33.68,26.0,2249.0,344.0,1311.0,373.0,5.0287,265000.0,<1H OCEAN +-117.95,33.68,27.0,1732.0,303.0,1115.0,308.0,5.5312,239200.0,<1H OCEAN +-117.95,33.68,19.0,1028.0,191.0,340.0,159.0,3.6364,252800.0,<1H OCEAN +-117.95,33.67,25.0,1611.0,383.0,554.0,327.0,3.0417,137300.0,<1H OCEAN +-117.95,33.67,25.0,1799.0,233.0,810.0,265.0,8.289,372400.0,<1H OCEAN +-117.95,33.66,26.0,1787.0,227.0,639.0,224.0,6.8226,329800.0,<1H OCEAN +-117.95,33.66,22.0,2785.0,441.0,1086.0,392.0,7.3719,337400.0,<1H OCEAN +-117.98,33.65,22.0,3335.0,754.0,1500.0,719.0,3.7315,197900.0,<1H OCEAN +-117.98,33.65,18.0,1027.0,206.0,436.0,180.0,4.2159,211300.0,<1H OCEAN +-117.98,33.65,22.0,3592.0,527.0,1598.0,523.0,6.5501,294900.0,<1H OCEAN +-117.98,33.64,20.0,1851.0,495.0,792.0,363.0,3.8187,137500.0,NEAR OCEAN +-117.97,33.74,16.0,1735.0,380.0,784.0,360.0,4.2566,139200.0,<1H OCEAN +-117.97,33.74,18.0,2814.0,539.0,1439.0,493.0,3.599,262000.0,<1H OCEAN +-117.97,33.73,27.0,2097.0,325.0,1217.0,331.0,5.7121,222500.0,<1H OCEAN +-117.97,33.73,26.0,1694.0,260.0,885.0,279.0,5.0875,224200.0,<1H OCEAN +-117.96,33.74,19.0,1783.0,415.0,1025.0,383.0,4.1484,230000.0,<1H OCEAN +-117.96,33.73,22.0,3479.0,455.0,1454.0,488.0,6.6324,347600.0,<1H OCEAN +-117.97,33.73,19.0,4154.0,560.0,2130.0,589.0,7.2845,301800.0,<1H OCEAN +-117.97,33.72,24.0,2991.0,500.0,1437.0,453.0,5.4286,273400.0,<1H OCEAN +-117.95,33.72,21.0,3107.0,483.0,1688.0,503.0,5.9582,288000.0,<1H OCEAN +-117.96,33.72,23.0,3929.0,559.0,1858.0,538.0,6.8645,318200.0,<1H OCEAN +-117.93,33.73,19.0,4021.0,557.0,1872.0,545.0,6.7919,295600.0,<1H OCEAN +-117.93,33.72,17.0,4461.0,585.0,2095.0,580.0,7.6709,319500.0,<1H OCEAN +-117.92,33.73,17.0,1692.0,293.0,934.0,280.0,4.4728,205800.0,<1H OCEAN +-117.92,33.73,14.0,5147.0,1182.0,3171.0,1126.0,3.9929,225800.0,<1H OCEAN +-117.92,33.72,17.0,3318.0,502.0,1520.0,498.0,5.5501,274200.0,<1H OCEAN +-117.96,33.71,19.0,4328.0,849.0,2243.0,808.0,5.5702,342600.0,<1H OCEAN +-117.95,33.71,16.0,6058.0,1715.0,3285.0,1495.0,3.4133,290900.0,<1H OCEAN +-117.96,33.71,19.0,1624.0,221.0,782.0,228.0,4.5962,304500.0,<1H OCEAN +-117.95,33.71,20.0,2781.0,407.0,1242.0,408.0,6.1092,306500.0,<1H OCEAN +-117.94,33.71,18.0,3695.0,602.0,1779.0,572.0,5.9449,276500.0,<1H OCEAN +-117.93,33.71,10.0,2775.0,717.0,1581.0,633.0,4.1366,158800.0,<1H OCEAN +-117.94,33.7,18.0,4827.0,718.0,2471.0,716.0,6.1181,284500.0,<1H OCEAN +-117.95,33.69,24.0,4269.0,618.0,1954.0,597.0,6.9261,284600.0,<1H OCEAN +-117.95,33.7,17.0,5781.0,924.0,2585.0,915.0,5.343,231900.0,<1H OCEAN +-117.98,33.69,22.0,3957.0,520.0,1774.0,527.0,7.0907,350200.0,<1H OCEAN +-117.97,33.69,21.0,4112.0,580.0,1886.0,581.0,6.799,292000.0,<1H OCEAN +-117.98,33.7,16.0,5127.0,631.0,2142.0,596.0,7.8195,390500.0,<1H OCEAN +-117.96,33.7,23.0,4417.0,740.0,1865.0,693.0,5.3428,279300.0,<1H OCEAN +-117.96,33.7,23.0,2622.0,445.0,1103.0,407.0,4.725,289600.0,<1H OCEAN +-117.96,33.69,20.0,3123.0,441.0,1319.0,432.0,6.091,290400.0,<1H OCEAN +-117.96,33.69,17.0,2500.0,343.0,1242.0,368.0,7.7313,316700.0,<1H OCEAN +-117.98,33.7,24.0,3451.0,504.0,1736.0,493.0,6.3749,278000.0,<1H OCEAN +-117.98,33.71,24.0,3430.0,548.0,1601.0,512.0,5.6825,264600.0,<1H OCEAN +-117.97,33.71,26.0,2553.0,405.0,1337.0,411.0,5.3737,252900.0,<1H OCEAN +-117.97,33.71,25.0,3273.0,478.0,1645.0,497.0,5.8195,286100.0,<1H OCEAN +-117.99,33.7,25.0,2017.0,357.0,1063.0,369.0,4.0345,229400.0,<1H OCEAN +-117.98,33.7,17.0,1997.0,340.0,952.0,341.0,4.4148,239200.0,<1H OCEAN +-117.99,33.69,17.0,3386.0,729.0,1715.0,666.0,3.7479,213000.0,<1H OCEAN +-117.98,33.69,16.0,2437.0,438.0,986.0,422.0,5.7117,247200.0,<1H OCEAN +-117.97,33.67,25.0,3906.0,660.0,1809.0,622.0,5.6765,265100.0,<1H OCEAN +-117.97,33.66,22.0,3914.0,600.0,1871.0,607.0,5.8541,281500.0,<1H OCEAN +-117.96,33.67,16.0,5143.0,652.0,2209.0,637.0,7.0173,382100.0,<1H OCEAN +-117.96,33.66,19.0,5925.0,744.0,2302.0,729.0,7.5699,333300.0,<1H OCEAN +-117.96,33.65,23.0,5379.0,684.0,1826.0,555.0,7.0151,350600.0,<1H OCEAN +-117.97,33.65,26.0,2379.0,336.0,988.0,346.0,5.3674,339300.0,<1H OCEAN +-117.97,33.63,25.0,2482.0,360.0,960.0,352.0,6.1572,344000.0,NEAR OCEAN +-117.96,33.65,24.0,4462.0,689.0,1943.0,712.0,5.7395,289800.0,<1H OCEAN +-117.96,33.65,21.0,2030.0,318.0,910.0,311.0,7.8453,343300.0,<1H OCEAN +-117.96,33.65,18.0,3603.0,879.0,1549.0,756.0,4.0229,363100.0,<1H OCEAN +-117.98,33.61,17.0,2054.0,291.0,836.0,288.0,6.8939,383900.0,NEAR OCEAN +-117.97,33.73,18.0,3698.0,574.0,2046.0,614.0,6.2984,269800.0,<1H OCEAN +-117.98,33.73,18.0,3833.0,,2192.0,996.0,3.4679,219700.0,<1H OCEAN +-117.98,33.72,24.0,2826.0,547.0,1738.0,546.0,6.0494,240400.0,<1H OCEAN +-117.98,33.72,28.0,3109.0,561.0,1891.0,562.0,5.2655,243100.0,<1H OCEAN +-117.98,33.67,7.0,5664.0,1174.0,2493.0,1101.0,5.8252,264700.0,<1H OCEAN +-117.98,33.66,26.0,3527.0,547.0,1615.0,542.0,6.1624,279400.0,<1H OCEAN +-117.97,33.67,17.0,4466.0,640.0,2166.0,666.0,6.979,330700.0,<1H OCEAN +-117.97,33.66,14.0,6090.0,1338.0,1974.0,1248.0,2.8061,180300.0,<1H OCEAN +-117.98,33.68,14.0,3396.0,477.0,1542.0,472.0,7.3982,369100.0,<1H OCEAN +-117.98,33.68,24.0,4177.0,,1704.0,606.0,6.2473,281900.0,<1H OCEAN +-117.98,33.68,17.0,2603.0,373.0,1265.0,382.0,6.8039,332900.0,<1H OCEAN +-117.97,33.68,16.0,4508.0,598.0,2221.0,623.0,7.3731,390800.0,<1H OCEAN +-117.97,33.68,26.0,1616.0,292.0,700.0,241.0,5.5105,232100.0,<1H OCEAN +-118.01,33.67,13.0,2902.0,536.0,1125.0,490.0,5.888,447700.0,NEAR OCEAN +-118.01,33.67,16.0,3581.0,780.0,1644.0,774.0,5.041,397600.0,NEAR OCEAN +-118.01,33.66,19.0,4559.0,1045.0,1949.0,910.0,4.355,429200.0,NEAR OCEAN +-118.0,33.66,25.0,4041.0,903.0,1689.0,784.0,4.2289,442700.0,NEAR OCEAN +-118.02,33.65,38.0,2548.0,646.0,755.0,399.0,2.8352,408300.0,NEAR OCEAN +-117.99,33.68,13.0,4000.0,883.0,1999.0,881.0,4.7245,273600.0,<1H OCEAN +-117.99,33.68,18.0,2024.0,462.0,1047.0,451.0,3.5848,186900.0,<1H OCEAN +-117.99,33.67,15.0,3141.0,664.0,1729.0,633.0,4.2165,234600.0,<1H OCEAN +-117.99,33.68,14.0,3305.0,841.0,2272.0,769.0,3.4899,216700.0,<1H OCEAN +-117.99,33.67,19.0,3808.0,790.0,1776.0,756.0,4.625,282200.0,<1H OCEAN +-117.99,33.67,12.0,2228.0,479.0,1122.0,488.0,4.0385,350000.0,<1H OCEAN +-117.99,33.67,17.0,1692.0,427.0,903.0,423.0,3.5859,262500.0,<1H OCEAN +-118.0,33.66,16.0,2809.0,708.0,1260.0,638.0,3.2353,252900.0,NEAR OCEAN +-117.99,33.66,29.0,1330.0,293.0,613.0,236.0,4.6591,353100.0,<1H OCEAN +-117.99,33.66,14.0,3155.0,653.0,951.0,575.0,3.0625,268800.0,<1H OCEAN +-118.02,33.62,11.0,3969.0,834.0,1508.0,754.0,4.3409,271400.0,NEAR OCEAN +-118.05,33.65,5.0,7017.0,935.0,2427.0,867.0,10.1154,477700.0,NEAR OCEAN +-118.0,33.68,12.0,5241.0,985.0,2048.0,943.0,6.4858,285400.0,<1H OCEAN +-118.0,33.67,34.0,3712.0,667.0,1521.0,632.0,4.8125,387800.0,<1H OCEAN +-118.0,33.71,19.0,4808.0,1029.0,2422.0,971.0,4.0121,279700.0,<1H OCEAN +-117.99,33.71,18.0,1994.0,578.0,3031.0,577.0,2.7614,237500.0,<1H OCEAN +-117.99,33.71,17.0,1600.0,458.0,1803.0,432.0,2.7865,216700.0,<1H OCEAN +-118.02,33.71,23.0,5554.0,995.0,2408.0,936.0,5.3886,331900.0,<1H OCEAN +-118.02,33.7,23.0,5069.0,770.0,2473.0,769.0,6.3047,285700.0,<1H OCEAN +-118.02,33.72,22.0,8844.0,1706.0,4404.0,1594.0,4.4453,267800.0,<1H OCEAN +-118.01,33.73,23.0,4095.0,578.0,1766.0,589.0,6.7418,302500.0,<1H OCEAN +-118.02,33.73,24.0,6393.0,1141.0,2743.0,1057.0,5.1384,336900.0,<1H OCEAN +-118.03,33.72,24.0,5203.0,957.0,2465.0,946.0,5.163,261000.0,<1H OCEAN +-118.04,33.72,24.0,7141.0,1330.0,3418.0,1268.0,4.6649,237800.0,<1H OCEAN +-117.99,33.73,24.0,2104.0,421.0,1181.0,414.0,3.8365,250900.0,<1H OCEAN +-118.0,33.73,26.0,2236.0,280.0,809.0,282.0,6.7395,342800.0,<1H OCEAN +-117.99,33.73,20.0,3182.0,884.0,1770.0,817.0,3.1912,220800.0,<1H OCEAN +-117.99,33.72,26.0,1787.0,275.0,801.0,270.0,5.5514,255700.0,<1H OCEAN +-117.99,33.72,17.0,2801.0,649.0,1473.0,535.0,4.2875,134800.0,<1H OCEAN +-117.99,33.72,14.0,2127.0,537.0,1338.0,475.0,3.628,188500.0,<1H OCEAN +-118.01,33.71,18.0,6565.0,1357.0,3079.0,1248.0,4.7515,295600.0,<1H OCEAN +-118.01,33.7,24.0,3856.0,567.0,1741.0,588.0,7.248,302700.0,<1H OCEAN +-118.01,33.69,3.0,945.0,115.0,337.0,123.0,11.5199,500001.0,<1H OCEAN +-117.99,33.7,13.0,4013.0,903.0,1999.0,859.0,4.625,248800.0,<1H OCEAN +-117.99,33.69,16.0,1476.0,294.0,886.0,270.0,5.3259,216400.0,<1H OCEAN +-117.99,33.69,12.0,2480.0,858.0,1441.0,788.0,1.6705,350000.0,<1H OCEAN +-118.02,33.71,24.0,2598.0,443.0,1184.0,435.0,5.8623,287800.0,<1H OCEAN +-118.03,33.7,15.0,3244.0,421.0,1259.0,413.0,7.7854,395300.0,<1H OCEAN +-118.03,33.71,26.0,1483.0,251.0,738.0,235.0,6.0,271400.0,<1H OCEAN +-118.07,33.67,13.0,5126.0,711.0,2429.0,718.0,9.5268,437900.0,NEAR OCEAN +-118.04,33.72,14.0,4494.0,1048.0,2222.0,963.0,4.7821,169400.0,<1H OCEAN +-118.05,33.72,14.0,2673.0,687.0,1192.0,656.0,4.1862,188900.0,<1H OCEAN +-118.04,33.72,15.0,1836.0,490.0,942.0,477.0,4.0238,182500.0,<1H OCEAN +-118.09,33.7,13.0,4770.0,969.0,2261.0,972.0,5.883,295100.0,NEAR OCEAN +-118.04,33.71,12.0,4014.0,868.0,1605.0,769.0,6.0102,396900.0,<1H OCEAN +-118.09,33.75,32.0,6239.0,974.0,2615.0,950.0,6.6188,380000.0,NEAR OCEAN +-118.1,33.74,37.0,997.0,262.0,531.0,282.0,4.7773,400000.0,NEAR OCEAN +-118.11,33.75,15.0,2569.0,812.0,785.0,477.0,5.4011,346400.0,NEAR OCEAN +-118.11,33.74,43.0,1222.0,303.0,565.0,309.0,4.8482,500001.0,NEAR OCEAN +-118.09,33.74,44.0,1671.0,390.0,871.0,367.0,4.6369,422200.0,NEAR OCEAN +-118.11,33.75,24.0,1608.0,314.0,592.0,314.0,5.0926,390500.0,NEAR OCEAN +-118.1,33.74,33.0,2119.0,524.0,872.0,465.0,4.537,495500.0,NEAR OCEAN +-118.1,33.74,31.0,1310.0,342.0,563.0,310.0,4.6528,457100.0,NEAR OCEAN +-118.11,33.73,32.0,1258.0,333.0,645.0,334.0,5.0476,500001.0,NEAR OCEAN +-118.1,33.74,32.0,2035.0,,934.0,512.0,4.2287,500001.0,NEAR OCEAN +-118.07,33.72,24.0,1240.0,296.0,513.0,254.0,4.9044,485000.0,NEAR OCEAN +-118.07,33.72,32.0,1179.0,250.0,369.0,209.0,5.1824,500001.0,NEAR OCEAN +-118.09,33.71,19.0,1397.0,271.0,491.0,197.0,8.7397,500001.0,NEAR OCEAN +-118.06,33.72,17.0,4573.0,937.0,1619.0,796.0,5.7704,500001.0,NEAR OCEAN +-118.05,33.71,25.0,4150.0,570.0,1424.0,547.0,8.8281,461600.0,NEAR OCEAN +-118.06,33.72,22.0,4311.0,531.0,1426.0,533.0,9.8177,500001.0,NEAR OCEAN +-118.07,33.73,13.0,1822.0,313.0,643.0,303.0,9.8346,401700.0,NEAR OCEAN +-118.06,33.72,14.0,2665.0,331.0,964.0,319.0,15.0001,500001.0,NEAR OCEAN +-118.06,33.73,16.0,4392.0,602.0,1490.0,578.0,10.5424,500001.0,<1H OCEAN +-118.08,33.72,14.0,2021.0,396.0,696.0,367.0,7.1673,340700.0,NEAR OCEAN +-118.05,33.73,25.0,2472.0,450.0,1301.0,467.0,5.0699,266100.0,<1H OCEAN +-118.05,33.72,17.0,1875.0,472.0,900.0,406.0,5.2589,226100.0,<1H OCEAN +-118.05,33.72,22.0,5416.0,1271.0,2260.0,1184.0,3.8038,174500.0,<1H OCEAN +-118.09,33.77,26.0,1388.0,409.0,515.0,392.0,1.8015,62000.0,<1H OCEAN +-118.08,33.77,26.0,2461.0,562.0,971.0,544.0,2.1944,87500.0,<1H OCEAN +-118.08,33.77,26.0,2013.0,551.0,664.0,510.0,2.2708,67500.0,<1H OCEAN +-118.08,33.77,26.0,3083.0,806.0,960.0,723.0,1.9074,68500.0,<1H OCEAN +-118.08,33.76,25.0,1995.0,637.0,743.0,597.0,1.4617,46900.0,<1H OCEAN +-118.09,33.76,26.0,1625.0,440.0,533.0,414.0,1.808,58500.0,<1H OCEAN +-118.09,33.77,26.0,5359.0,1508.0,1829.0,1393.0,1.7675,61300.0,<1H OCEAN +-118.08,33.76,26.0,1967.0,577.0,692.0,538.0,1.6111,54300.0,<1H OCEAN +-118.08,33.76,26.0,996.0,364.0,366.0,313.0,1.2813,46700.0,<1H OCEAN +-118.08,33.76,27.0,529.0,159.0,193.0,155.0,2.0952,71300.0,<1H OCEAN +-118.09,33.77,27.0,2301.0,640.0,847.0,627.0,1.7208,67500.0,<1H OCEAN +-118.0,33.76,26.0,1876.0,455.0,1499.0,436.0,2.925,176000.0,<1H OCEAN +-118.01,33.75,30.0,3380.0,722.0,2269.0,652.0,4.525,186000.0,<1H OCEAN +-118.0,33.75,26.0,1382.0,387.0,1977.0,368.0,2.7589,137500.0,<1H OCEAN +-118.0,33.74,25.0,2767.0,346.0,1148.0,372.0,6.394,316700.0,<1H OCEAN +-118.02,33.76,27.0,2905.0,587.0,1781.0,561.0,4.25,214800.0,<1H OCEAN +-118.02,33.75,26.0,2989.0,479.0,1596.0,475.0,5.7157,231200.0,<1H OCEAN +-118.03,33.76,25.0,4650.0,849.0,2503.0,790.0,5.742,221900.0,<1H OCEAN +-118.04,33.76,16.0,2070.0,263.0,878.0,297.0,7.0879,338800.0,<1H OCEAN +-118.04,33.75,16.0,3757.0,650.0,1291.0,614.0,5.2001,235600.0,<1H OCEAN +-118.04,33.74,26.0,2532.0,421.0,1274.0,441.0,5.3559,235800.0,<1H OCEAN +-118.02,33.74,26.0,3842.0,609.0,1961.0,595.0,6.128,248200.0,<1H OCEAN +-118.02,33.73,26.0,3711.0,610.0,1902.0,597.0,5.5599,234100.0,<1H OCEAN +-118.01,33.74,25.0,8110.0,1264.0,3613.0,1232.0,6.0609,264900.0,<1H OCEAN +-117.98,33.75,24.0,3865.0,802.0,2670.0,772.0,3.8158,180000.0,<1H OCEAN +-117.98,33.75,37.0,1264.0,274.0,783.0,273.0,3.3438,199600.0,<1H OCEAN +-117.99,33.75,30.0,1859.0,462.0,1314.0,418.0,3.0909,184400.0,<1H OCEAN +-117.98,33.74,29.0,3443.0,635.0,2257.0,620.0,4.7404,207500.0,<1H OCEAN +-117.99,33.74,26.0,4065.0,741.0,1960.0,739.0,4.506,240000.0,<1H OCEAN +-117.98,33.74,16.0,4636.0,908.0,2341.0,825.0,4.4261,304700.0,<1H OCEAN +-117.99,33.73,17.0,5239.0,1045.0,2440.0,985.0,4.375,248100.0,<1H OCEAN +-117.98,33.73,22.0,4232.0,624.0,2408.0,660.0,6.6539,284900.0,<1H OCEAN +-117.99,33.77,29.0,1312.0,267.0,922.0,255.0,3.1902,202400.0,<1H OCEAN +-117.98,33.76,28.0,3215.0,652.0,2066.0,636.0,4.0194,197400.0,<1H OCEAN +-117.99,33.76,30.0,1572.0,362.0,1351.0,359.0,3.369,190900.0,<1H OCEAN +-117.99,33.76,17.0,2545.0,737.0,1468.0,699.0,1.9439,177700.0,<1H OCEAN +-117.99,33.75,22.0,3024.0,754.0,2357.0,743.0,3.3125,191800.0,<1H OCEAN +-117.98,33.76,23.0,1553.0,518.0,1988.0,474.0,2.1375,150000.0,<1H OCEAN +-117.98,33.76,24.0,1880.0,405.0,967.0,418.0,4.4545,192500.0,<1H OCEAN +-117.98,33.75,27.0,2343.0,415.0,1537.0,426.0,5.1345,210600.0,<1H OCEAN +-118.02,33.77,34.0,2115.0,352.0,1253.0,338.0,5.1507,207500.0,<1H OCEAN +-118.02,33.77,33.0,2683.0,436.0,1520.0,456.0,5.0091,211500.0,<1H OCEAN +-118.02,33.76,25.0,1759.0,404.0,1404.0,385.0,3.6289,195800.0,<1H OCEAN +-118.01,33.77,33.0,1387.0,238.0,890.0,264.0,5.422,204100.0,<1H OCEAN +-118.01,33.77,32.0,1771.0,296.0,995.0,272.0,5.8362,217500.0,<1H OCEAN +-118.01,33.76,35.0,2072.0,349.0,1249.0,317.0,3.9855,191900.0,<1H OCEAN +-118.01,33.76,26.0,2141.0,597.0,2038.0,585.0,2.2981,177700.0,<1H OCEAN +-118.0,33.77,24.0,1324.0,267.0,687.0,264.0,3.4327,192800.0,<1H OCEAN +-118.0,33.76,29.0,1982.0,503.0,1426.0,502.0,3.0263,194200.0,<1H OCEAN +-118.0,33.77,28.0,2401.0,503.0,1155.0,456.0,3.5139,211700.0,<1H OCEAN +-118.0,33.76,14.0,1120.0,319.0,982.0,307.0,2.9083,179200.0,<1H OCEAN +-118.0,33.76,12.0,1250.0,331.0,1047.0,334.0,3.0625,208800.0,<1H OCEAN +-118.03,33.77,21.0,3803.0,898.0,1511.0,829.0,3.0,221200.0,<1H OCEAN +-118.02,33.77,7.0,586.0,118.0,232.0,107.0,5.2077,181300.0,<1H OCEAN +-118.03,33.77,27.0,2000.0,310.0,880.0,294.0,5.635,218900.0,<1H OCEAN +-118.03,33.77,24.0,3810.0,579.0,1818.0,590.0,5.8053,255900.0,<1H OCEAN +-118.03,33.76,32.0,2980.0,494.0,1370.0,481.0,5.0866,223500.0,<1H OCEAN +-118.04,33.76,25.0,4061.0,545.0,1623.0,527.0,7.1572,294900.0,<1H OCEAN +-118.03,33.79,26.0,5321.0,889.0,2932.0,896.0,5.8914,237600.0,<1H OCEAN +-118.03,33.79,32.0,3191.0,634.0,1718.0,611.0,4.1548,216600.0,<1H OCEAN +-118.01,33.79,30.0,2460.0,403.0,1277.0,395.0,5.4372,223200.0,<1H OCEAN +-118.02,33.78,28.0,3375.0,559.0,1754.0,554.0,5.5446,228900.0,<1H OCEAN +-118.01,33.78,19.0,2648.0,478.0,1160.0,452.0,5.9357,207400.0,<1H OCEAN +-118.03,33.78,26.0,2001.0,302.0,836.0,298.0,5.1061,257500.0,<1H OCEAN +-118.01,33.78,26.0,2343.0,377.0,1166.0,373.0,6.0,233100.0,<1H OCEAN +-118.03,33.78,25.0,3554.0,528.0,1600.0,537.0,6.6453,270100.0,<1H OCEAN +-118.04,33.78,26.0,3642.0,557.0,1623.0,569.0,5.8426,259400.0,<1H OCEAN +-118.04,33.78,25.0,3715.0,575.0,1640.0,572.0,5.7705,247100.0,<1H OCEAN +-118.08,33.8,29.0,3675.0,613.0,1457.0,591.0,6.0553,369400.0,<1H OCEAN +-118.07,33.8,34.0,3486.0,507.0,1311.0,503.0,7.1221,384500.0,<1H OCEAN +-118.08,33.79,34.0,2840.0,395.0,1127.0,396.0,7.6144,376200.0,<1H OCEAN +-118.09,33.78,26.0,2146.0,298.0,852.0,296.0,6.6137,342700.0,<1H OCEAN +-118.07,33.79,34.0,2473.0,383.0,967.0,353.0,5.8283,362400.0,<1H OCEAN +-118.09,33.79,31.0,4231.0,617.0,1694.0,623.0,6.6312,360100.0,<1H OCEAN +-118.08,33.78,34.0,2287.0,347.0,1051.0,346.0,5.5767,372000.0,<1H OCEAN +-118.08,33.78,30.0,2879.0,403.0,1109.0,414.0,6.9324,364700.0,<1H OCEAN +-118.08,33.78,25.0,5321.0,967.0,1969.0,903.0,5.0102,340100.0,<1H OCEAN +-118.02,33.79,23.0,6368.0,1030.0,3281.0,1001.0,6.1142,240400.0,<1H OCEAN +-118.01,33.79,23.0,2663.0,430.0,1499.0,403.0,5.7837,258000.0,<1H OCEAN +-118.02,33.8,24.0,84.0,14.0,32.0,8.0,5.875,193800.0,<1H OCEAN +-118.02,33.8,16.0,2956.0,393.0,1379.0,429.0,8.4952,359600.0,<1H OCEAN +-118.01,33.8,16.0,4021.0,701.0,1488.0,650.0,5.32,219500.0,<1H OCEAN +-118.05,33.78,18.0,3414.0,434.0,1272.0,454.0,8.7015,390900.0,<1H OCEAN +-118.05,33.78,25.0,3112.0,435.0,1098.0,401.0,6.0,353500.0,<1H OCEAN +-118.05,33.78,25.0,2356.0,330.0,937.0,326.0,6.6264,359100.0,<1H OCEAN +-118.06,33.78,22.0,4048.0,562.0,1637.0,541.0,7.3463,355600.0,<1H OCEAN +-118.04,33.8,33.0,2685.0,466.0,1359.0,476.0,5.0261,245100.0,<1H OCEAN +-118.06,33.8,21.0,2196.0,504.0,1215.0,477.0,4.8,196900.0,<1H OCEAN +-118.07,33.79,26.0,4422.0,624.0,1936.0,625.0,6.4288,320700.0,<1H OCEAN +-118.06,33.8,22.0,1892.0,442.0,1015.0,404.0,4.1379,212500.0,<1H OCEAN +-118.06,33.8,20.0,1379.0,333.0,937.0,304.0,3.6217,195300.0,<1H OCEAN +-118.07,33.8,17.0,2439.0,554.0,1161.0,532.0,3.6442,193100.0,<1H OCEAN +-118.05,33.79,19.0,1863.0,355.0,1260.0,317.0,3.2465,277400.0,<1H OCEAN +-118.04,33.84,21.0,6623.0,1204.0,3193.0,1129.0,4.5395,256000.0,<1H OCEAN +-118.05,33.84,21.0,4890.0,653.0,2295.0,654.0,6.983,329700.0,<1H OCEAN +-118.04,33.83,19.0,4526.0,830.0,2318.0,748.0,4.6681,320700.0,<1H OCEAN +-118.04,33.82,26.0,4105.0,637.0,2072.0,648.0,5.844,273900.0,<1H OCEAN +-118.04,33.83,20.0,1488.0,312.0,972.0,283.0,4.055,201900.0,<1H OCEAN +-118.05,33.82,25.0,1548.0,279.0,732.0,265.0,5.123,159600.0,<1H OCEAN +-118.06,33.82,25.0,2637.0,462.0,965.0,415.0,4.5833,190900.0,<1H OCEAN +-118.06,33.81,25.0,3497.0,513.0,1839.0,544.0,5.4216,263000.0,<1H OCEAN +-118.07,33.81,22.0,2711.0,352.0,1305.0,368.0,8.5407,398800.0,<1H OCEAN +-118.07,33.8,22.0,1391.0,338.0,810.0,295.0,3.8792,218200.0,<1H OCEAN +-118.08,33.81,21.0,1189.0,281.0,577.0,264.0,3.3155,237500.0,<1H OCEAN +-118.03,33.82,17.0,1851.0,346.0,770.0,310.0,5.6093,244400.0,<1H OCEAN +-118.03,33.82,17.0,2178.0,477.0,1077.0,457.0,3.6815,245300.0,<1H OCEAN +-118.03,33.82,20.0,2662.0,464.0,1275.0,472.0,6.0162,318500.0,<1H OCEAN +-118.02,33.82,19.0,2485.0,437.0,1286.0,431.0,4.7466,258300.0,<1H OCEAN +-118.02,33.83,16.0,1139.0,328.0,665.0,290.0,3.2933,260000.0,<1H OCEAN +-118.03,33.83,34.0,3203.0,653.0,2072.0,691.0,4.225,198400.0,<1H OCEAN +-118.03,33.83,25.0,3030.0,532.0,1668.0,509.0,4.625,229600.0,<1H OCEAN +-118.03,33.83,25.0,768.0,195.0,529.0,184.0,3.175,132800.0,<1H OCEAN +-118.06,33.83,22.0,5290.0,1054.0,2812.0,1021.0,4.53,226400.0,<1H OCEAN +-118.05,33.83,24.0,4316.0,678.0,2286.0,665.0,5.7018,286700.0,<1H OCEAN +-118.06,33.83,21.0,3941.0,655.0,1897.0,670.0,4.88,343900.0,<1H OCEAN +-118.05,33.82,21.0,2997.0,372.0,1323.0,372.0,8.6123,386700.0,<1H OCEAN +-118.06,33.83,17.0,1973.0,516.0,1112.0,501.0,3.8512,163800.0,<1H OCEAN +-118.06,33.82,24.0,3983.0,675.0,1568.0,638.0,4.6458,213400.0,<1H OCEAN +-118.04,33.81,22.0,4057.0,624.0,2204.0,643.0,5.8527,241000.0,<1H OCEAN +-118.04,33.81,27.0,2990.0,515.0,1849.0,497.0,5.6846,216100.0,<1H OCEAN +-118.05,33.81,26.0,2523.0,437.0,1377.0,450.0,5.2542,234600.0,<1H OCEAN +-118.03,33.81,26.0,3635.0,567.0,1779.0,543.0,5.7089,237400.0,<1H OCEAN +-118.03,33.86,19.0,1795.0,328.0,1014.0,322.0,4.535,289300.0,<1H OCEAN +-118.04,33.85,24.0,2233.0,347.0,1162.0,355.0,5.6094,279200.0,<1H OCEAN +-118.04,33.85,23.0,3132.0,469.0,1646.0,478.0,5.777,315900.0,<1H OCEAN +-118.05,33.85,25.0,2856.0,388.0,1212.0,362.0,6.1737,313100.0,<1H OCEAN +-118.04,33.85,18.0,3628.0,546.0,1922.0,544.0,7.5057,328500.0,<1H OCEAN +-118.03,33.85,16.0,1831.0,390.0,1347.0,389.0,3.8426,344400.0,<1H OCEAN +-118.01,33.83,29.0,3963.0,772.0,2104.0,743.0,4.9803,208600.0,<1H OCEAN +-118.01,33.84,29.0,3740.0,691.0,1724.0,638.0,3.9628,215600.0,<1H OCEAN +-118.03,33.84,28.0,3857.0,857.0,2328.0,830.0,4.0156,196000.0,<1H OCEAN +-118.02,33.83,26.0,3616.0,892.0,2257.0,821.0,3.1497,217600.0,<1H OCEAN +-118.02,33.82,21.0,2052.0,456.0,1173.0,432.0,3.7885,204500.0,<1H OCEAN +-118.01,33.82,10.0,3897.0,893.0,1992.0,693.0,4.1591,192300.0,<1H OCEAN +-118.01,33.81,18.0,5238.0,1083.0,3032.0,1065.0,4.4583,190100.0,<1H OCEAN +-118.02,33.81,34.0,3482.0,614.0,2227.0,641.0,5.1155,200900.0,<1H OCEAN +-118.02,33.86,26.0,2342.0,383.0,1290.0,394.0,5.6677,220700.0,<1H OCEAN +-118.02,33.85,31.0,1922.0,329.0,1030.0,353.0,5.3416,213000.0,<1H OCEAN +-118.03,33.85,30.0,2320.0,448.0,1434.0,452.0,4.0865,203700.0,<1H OCEAN +-118.03,33.85,23.0,5495.0,1141.0,2873.0,1004.0,3.9156,224100.0,<1H OCEAN +-118.01,33.85,29.0,2064.0,447.0,1265.0,400.0,3.8864,209300.0,<1H OCEAN +-118.01,33.85,29.0,3061.0,612.0,2396.0,640.0,4.6326,195200.0,<1H OCEAN +-118.0,33.85,34.0,1078.0,205.0,575.0,206.0,4.5083,188000.0,<1H OCEAN +-118.01,33.86,29.0,2307.0,452.0,1218.0,402.0,3.4306,194200.0,<1H OCEAN +-118.01,33.84,28.0,4097.0,838.0,2112.0,803.0,4.5,202100.0,<1H OCEAN +-118.01,33.84,35.0,4166.0,713.0,2354.0,709.0,5.1775,213400.0,<1H OCEAN +-118.02,33.84,35.0,3473.0,563.0,2091.0,580.0,4.4821,214100.0,<1H OCEAN +-118.03,33.84,30.0,4781.0,831.0,2568.0,797.0,5.4746,226400.0,<1H OCEAN +-117.99,33.86,36.0,1138.0,228.0,725.0,219.0,3.4167,187200.0,<1H OCEAN +-117.99,33.85,34.0,1948.0,306.0,957.0,304.0,4.9777,212600.0,<1H OCEAN +-118.0,33.85,33.0,2053.0,418.0,1154.0,405.0,4.0455,197200.0,<1H OCEAN +-118.0,33.86,32.0,1162.0,196.0,563.0,178.0,3.875,203000.0,<1H OCEAN +-117.99,33.85,35.0,1661.0,272.0,949.0,276.0,5.2548,192600.0,<1H OCEAN +-117.99,33.84,34.0,2079.0,343.0,1379.0,352.0,5.103,207000.0,<1H OCEAN +-118.0,33.84,30.0,1549.0,325.0,885.0,299.0,4.0039,195100.0,<1H OCEAN +-118.0,33.84,29.0,2641.0,637.0,2413.0,619.0,2.8169,165100.0,<1H OCEAN +-118.01,33.87,25.0,6348.0,1615.0,4188.0,1497.0,3.139,185700.0,<1H OCEAN +-117.99,33.86,20.0,3540.0,906.0,2898.0,876.0,3.0252,178000.0,<1H OCEAN +-118.0,33.88,28.0,1624.0,289.0,755.0,280.0,4.7083,268100.0,<1H OCEAN +-118.01,33.88,19.0,1434.0,391.0,1088.0,341.0,3.369,269600.0,<1H OCEAN +-117.99,33.88,15.0,2298.0,567.0,1261.0,527.0,4.2422,159400.0,<1H OCEAN +-117.99,33.88,42.0,1461.0,302.0,986.0,314.0,3.9559,161100.0,<1H OCEAN +-118.0,33.88,18.0,2628.0,720.0,2276.0,649.0,2.735,170800.0,<1H OCEAN +-117.99,33.87,16.0,1689.0,499.0,1260.0,453.0,3.1205,174000.0,<1H OCEAN +-118.0,33.87,13.0,2086.0,544.0,1356.0,462.0,2.95,165600.0,<1H OCEAN +-117.99,33.87,17.0,2334.0,537.0,1662.0,535.0,3.0147,217000.0,<1H OCEAN +-117.99,33.87,34.0,1239.0,307.0,869.0,291.0,3.59,161900.0,<1H OCEAN +-117.99,33.86,20.0,2303.0,612.0,1607.0,564.0,2.9,176100.0,<1H OCEAN +-117.98,33.89,18.0,2939.0,437.0,1278.0,435.0,7.1425,393700.0,<1H OCEAN +-117.99,33.88,25.0,3401.0,509.0,1503.0,498.0,6.6704,240600.0,<1H OCEAN +-117.99,33.89,21.0,5195.0,1020.0,2539.0,988.0,4.5033,160500.0,<1H OCEAN +-117.99,33.89,23.0,2111.0,306.0,979.0,288.0,8.5621,347800.0,<1H OCEAN +-117.97,33.89,17.0,1851.0,344.0,764.0,339.0,5.1315,181800.0,<1H OCEAN +-117.97,33.89,17.0,1740.0,445.0,1158.0,412.0,2.8649,137500.0,<1H OCEAN +-117.97,33.88,9.0,1344.0,279.0,530.0,265.0,5.0731,185100.0,<1H OCEAN +-117.97,33.88,11.0,1454.0,247.0,635.0,236.0,6.2427,218500.0,<1H OCEAN +-117.97,33.89,15.0,3801.0,542.0,1992.0,526.0,9.0683,367400.0,<1H OCEAN +-117.97,33.88,16.0,2003.0,300.0,1172.0,318.0,6.0394,321600.0,<1H OCEAN +-117.97,33.89,14.0,923.0,136.0,420.0,130.0,10.2252,462800.0,<1H OCEAN +-120.1,39.17,33.0,1849.0,384.0,218.0,92.0,1.7083,143800.0,INLAND +-120.06,39.09,30.0,2979.0,583.0,316.0,124.0,2.1987,124000.0,INLAND +-120.06,39.15,22.0,2213.0,372.0,98.0,42.0,1.1912,170000.0,INLAND +-120.2,39.12,15.0,2146.0,361.0,197.0,76.0,4.1316,200000.0,INLAND +-120.18,39.14,25.0,2171.0,386.0,248.0,116.0,3.0375,171900.0,INLAND +-120.16,39.14,21.0,2484.0,460.0,309.0,144.0,3.9722,127800.0,INLAND +-120.18,39.17,18.0,1703.0,360.0,354.0,163.0,3.6563,146900.0,INLAND +-120.15,39.17,32.0,1684.0,359.0,454.0,209.0,2.9125,145800.0,INLAND +-120.15,39.15,25.0,1669.0,348.0,163.0,78.0,5.75,176600.0,INLAND +-120.15,39.2,14.0,1382.0,242.0,141.0,66.0,4.1016,283300.0,INLAND +-120.12,39.18,17.0,2839.0,525.0,390.0,189.0,3.5667,179200.0,INLAND +-120.1,39.19,18.0,3824.0,559.0,241.0,106.0,5.5456,360000.0,INLAND +-120.1,39.19,17.0,1480.0,241.0,202.0,80.0,3.9375,213200.0,INLAND +-120.1,39.2,20.0,1703.0,294.0,409.0,174.0,3.087,196900.0,INLAND +-120.11,39.21,18.0,2245.0,392.0,421.0,162.0,4.5795,158300.0,INLAND +-120.11,39.24,21.0,3005.0,574.0,385.0,150.0,3.1193,153300.0,INLAND +-120.08,39.23,19.0,1746.0,306.0,251.0,104.0,4.8182,146900.0,INLAND +-120.07,39.24,20.0,3729.0,614.0,365.0,152.0,4.962,169500.0,INLAND +-120.06,39.25,21.0,2459.0,525.0,584.0,233.0,3.01,163500.0,INLAND +-120.04,39.24,30.0,2369.0,469.0,510.0,213.0,2.65,123800.0,INLAND +-120.04,39.27,24.0,2237.0,491.0,264.0,95.0,4.1364,154500.0,INLAND +-120.02,39.24,24.0,1602.0,426.0,751.0,257.0,1.7609,99300.0,INLAND +-120.02,39.24,22.0,2309.0,571.0,919.0,342.0,3.0057,93600.0,INLAND +-120.02,39.24,32.0,1347.0,444.0,825.0,303.0,1.8269,225000.0,INLAND +-120.01,39.26,26.0,1930.0,391.0,307.0,138.0,2.6023,139300.0,INLAND +-120.91,38.98,13.0,7689.0,1415.0,3264.0,1198.0,3.653,146800.0,INLAND +-120.81,39.02,30.0,806.0,189.0,326.0,146.0,2.8155,101000.0,INLAND +-120.69,39.12,19.0,1048.0,262.0,493.0,184.0,2.2917,118200.0,INLAND +-120.83,39.02,15.0,1117.0,242.0,551.0,229.0,2.6319,97700.0,INLAND +-121.06,38.91,18.0,6501.0,1416.0,2954.0,1373.0,2.5373,143000.0,INLAND +-121.08,38.9,27.0,3436.0,755.0,1568.0,709.0,2.4273,138400.0,INLAND +-121.06,38.88,17.0,7635.0,1284.0,3096.0,1227.0,4.2917,184300.0,INLAND +-121.08,38.89,41.0,3471.0,753.0,1680.0,710.0,2.6701,139000.0,INLAND +-121.07,38.9,52.0,1280.0,281.0,523.0,266.0,1.7375,122200.0,INLAND +-121.15,38.89,20.0,2024.0,313.0,879.0,309.0,5.2903,239400.0,INLAND +-121.12,38.86,17.0,3949.0,717.0,1683.0,686.0,3.3802,216500.0,INLAND +-121.13,38.87,48.0,1127.0,,530.0,186.0,3.0917,128100.0,INLAND +-121.15,38.91,23.0,1654.0,299.0,787.0,299.0,4.2723,193100.0,INLAND +-121.08,38.85,10.0,2509.0,422.0,1037.0,389.0,6.0,220100.0,INLAND +-121.16,38.74,17.0,3353.0,463.0,1417.0,447.0,5.1721,237100.0,INLAND +-121.14,38.77,15.0,10282.0,1333.0,3868.0,1300.0,6.4789,287800.0,INLAND +-121.16,38.75,27.0,771.0,108.0,315.0,111.0,8.4882,276600.0,INLAND +-121.14,38.84,22.0,2750.0,433.0,1161.0,428.0,4.2143,236500.0,INLAND +-121.14,38.82,22.0,1816.0,278.0,832.0,278.0,5.07,233000.0,INLAND +-121.15,38.8,20.0,2104.0,370.0,745.0,314.0,4.1685,217500.0,INLAND +-121.18,38.78,13.0,3480.0,528.0,1432.0,532.0,6.1642,277800.0,INLAND +-121.18,38.8,18.0,2541.0,414.0,1276.0,405.0,5.1857,220100.0,INLAND +-121.21,38.76,16.0,1608.0,296.0,792.0,286.0,3.1583,239200.0,INLAND +-121.21,38.75,11.0,4552.0,639.0,2006.0,623.0,4.3962,264400.0,INLAND +-121.17,38.76,14.0,2028.0,255.0,781.0,251.0,6.5322,394000.0,INLAND +-121.2,38.73,11.0,4897.0,636.0,1931.0,616.0,7.7499,334800.0,INLAND +-121.18,38.73,16.0,1584.0,264.0,613.0,226.0,6.0302,273100.0,INLAND +-121.18,38.75,16.0,2807.0,459.0,1201.0,429.0,4.7941,247600.0,INLAND +-121.24,38.75,5.0,9137.0,1368.0,3667.0,1294.0,5.4896,229600.0,INLAND +-121.24,38.72,12.0,3605.0,576.0,1556.0,549.0,4.9,203700.0,INLAND +-121.27,38.74,19.0,3869.0,887.0,2086.0,685.0,2.6065,154900.0,INLAND +-121.26,38.73,14.0,3323.0,499.0,1527.0,540.0,5.3451,172100.0,INLAND +-121.26,38.74,22.0,7173.0,1314.0,3526.0,1316.0,3.3941,135900.0,INLAND +-121.28,38.73,6.0,4223.0,672.0,1747.0,631.0,5.419,267400.0,INLAND +-121.27,38.72,6.0,4664.0,644.0,2105.0,663.0,6.0804,198700.0,INLAND +-121.25,38.72,10.0,7277.0,1168.0,3507.0,1131.0,4.485,179400.0,INLAND +-121.27,38.75,21.0,4812.0,1117.0,1985.0,1045.0,2.5083,128500.0,INLAND +-121.28,38.74,33.0,4384.0,778.0,1775.0,789.0,4.05,134700.0,INLAND +-121.3,38.73,9.0,5558.0,1099.0,2717.0,1043.0,3.6455,139200.0,INLAND +-121.36,38.73,21.0,2253.0,416.0,1050.0,411.0,3.141,220100.0,INLAND +-121.32,38.74,14.0,1449.0,228.0,670.0,232.0,4.3897,186300.0,INLAND +-121.31,38.75,7.0,4185.0,750.0,2147.0,706.0,4.0519,129200.0,INLAND +-121.3,38.75,36.0,3903.0,885.0,2313.0,804.0,2.655,86300.0,INLAND +-121.28,38.75,52.0,493.0,89.0,189.0,94.0,2.108,83800.0,INLAND +-121.3,38.74,41.0,4374.0,1039.0,2387.0,959.0,2.3611,87900.0,INLAND +-121.33,38.77,3.0,20214.0,3559.0,8361.0,3112.0,4.2259,169300.0,INLAND +-121.28,38.76,47.0,2901.0,631.0,1276.0,578.0,2.1366,101900.0,INLAND +-121.27,38.75,43.0,1292.0,307.0,647.0,249.0,2.7188,85300.0,INLAND +-121.29,38.76,12.0,1198.0,174.0,443.0,170.0,6.0097,187500.0,INLAND +-121.28,38.77,6.0,3819.0,550.0,1738.0,587.0,5.8718,201400.0,INLAND +-121.28,38.8,7.0,9003.0,1739.0,4445.0,1591.0,3.816,147900.0,INLAND +-121.24,38.78,11.0,1851.0,352.0,1049.0,369.0,3.5288,141100.0,INLAND +-121.24,38.78,18.0,549.0,143.0,249.0,136.0,0.8691,136500.0,INLAND +-121.23,38.78,13.0,3813.0,871.0,1513.0,783.0,2.0807,142600.0,INLAND +-121.22,38.78,8.0,3418.0,514.0,1312.0,409.0,6.3914,218000.0,INLAND +-121.24,38.82,5.0,12259.0,1643.0,4819.0,1582.0,5.4498,217300.0,INLAND +-121.25,38.8,14.0,5094.0,729.0,1974.0,705.0,5.5205,188700.0,INLAND +-121.24,38.79,15.0,2615.0,485.0,1063.0,428.0,3.7904,173200.0,INLAND +-121.24,38.79,23.0,1419.0,261.0,706.0,269.0,3.1875,110200.0,INLAND +-121.23,38.79,45.0,907.0,176.0,463.0,190.0,2.2292,92000.0,INLAND +-121.22,38.8,11.0,2521.0,521.0,1390.0,477.0,3.5265,124800.0,INLAND +-121.19,38.87,20.0,3118.0,500.0,1405.0,519.0,6.0,209400.0,INLAND +-121.21,38.83,21.0,3691.0,640.0,1758.0,603.0,3.5607,151900.0,INLAND +-121.19,38.85,8.0,4114.0,710.0,2268.0,716.0,4.4085,139400.0,INLAND +-121.18,38.83,15.0,4488.0,859.0,2114.0,805.0,2.9484,124400.0,INLAND +-121.39,38.85,19.0,3568.0,646.0,1714.0,590.0,4.0862,162700.0,INLAND +-121.3,39.0,16.0,3155.0,541.0,1630.0,540.0,4.0282,126400.0,INLAND +-121.31,38.97,16.0,1210.0,228.0,726.0,222.0,2.7083,82100.0,INLAND +-121.22,38.92,19.0,2531.0,461.0,1206.0,429.0,4.4958,192600.0,INLAND +-121.27,38.87,16.0,2094.0,358.0,1092.0,357.0,4.4769,191400.0,INLAND +-121.29,38.9,45.0,2019.0,394.0,1104.0,407.0,3.1691,108700.0,INLAND +-121.28,38.9,31.0,1297.0,259.0,765.0,240.0,2.7656,93600.0,INLAND +-121.29,38.89,10.0,653.0,120.0,407.0,146.0,3.3889,110800.0,INLAND +-121.3,38.89,23.0,1750.0,297.0,1012.0,315.0,3.4706,99300.0,INLAND +-121.3,38.89,45.0,1529.0,317.0,793.0,281.0,2.9866,91300.0,INLAND +-121.32,38.89,9.0,5927.0,1269.0,3369.0,1176.0,2.8194,111300.0,INLAND +-121.14,38.92,16.0,2069.0,312.0,889.0,299.0,4.6771,212000.0,INLAND +-121.1,38.92,21.0,4064.0,871.0,1847.0,859.0,3.0321,135500.0,INLAND +-121.11,38.91,24.0,2558.0,423.0,1149.0,403.0,4.0679,190500.0,INLAND +-121.1,38.94,42.0,410.0,117.0,706.0,112.0,1.0179,125000.0,INLAND +-121.07,38.92,15.0,5301.0,884.0,2335.0,831.0,4.515,164000.0,INLAND +-121.05,38.92,34.0,2144.0,372.0,899.0,378.0,3.3021,158800.0,INLAND +-121.15,39.0,15.0,4145.0,691.0,1872.0,680.0,4.3553,220600.0,INLAND +-121.19,38.95,16.0,2544.0,431.0,1199.0,412.0,4.5129,196300.0,INLAND +-121.11,38.95,14.0,3888.0,890.0,1830.0,844.0,1.8238,158600.0,INLAND +-121.1,38.95,17.0,1475.0,403.0,943.0,363.0,2.1287,55300.0,INLAND +-121.06,38.98,14.0,2267.0,355.0,1140.0,369.0,4.7019,212800.0,INLAND +-121.05,38.97,12.0,3676.0,550.0,1572.0,510.0,4.8214,201900.0,INLAND +-121.09,38.97,13.0,1467.0,221.0,688.0,231.0,5.2536,191900.0,INLAND +-121.1,39.0,16.0,1106.0,195.0,505.0,187.0,5.0126,192300.0,INLAND +-121.08,38.95,18.0,1931.0,380.0,1271.0,377.0,2.7463,156100.0,INLAND +-121.08,38.93,14.0,4239.0,824.0,1729.0,794.0,2.4278,167700.0,INLAND +-121.07,38.94,14.0,1710.0,294.0,839.0,297.0,4.7143,150700.0,INLAND +-121.04,38.95,22.0,1931.0,445.0,1009.0,407.0,2.75,153200.0,INLAND +-120.99,39.04,17.0,2289.0,450.0,1182.0,397.0,2.3696,166800.0,INLAND +-120.98,38.99,17.0,3403.0,661.0,1540.0,622.0,3.6354,162900.0,INLAND +-121.04,39.0,21.0,4059.0,730.0,1874.0,693.0,4.8051,174300.0,INLAND +-121.02,39.01,17.0,4786.0,799.0,2066.0,770.0,3.9734,185400.0,INLAND +-121.0,39.0,4.0,170.0,23.0,93.0,27.0,10.9891,312500.0,INLAND +-120.87,39.18,25.0,2691.0,598.0,964.0,373.0,3.9196,142700.0,INLAND +-120.87,39.15,17.0,1819.0,389.0,736.0,283.0,2.8603,128900.0,INLAND +-120.58,39.27,15.0,4126.0,903.0,723.0,266.0,3.0147,118800.0,INLAND +-120.33,39.3,16.0,868.0,178.0,44.0,21.0,3.0,175000.0,INLAND +-120.18,39.28,14.0,10098.0,1545.0,701.0,254.0,4.0819,141300.0,INLAND +-120.22,39.2,22.0,8259.0,1409.0,845.0,353.0,3.3699,244000.0,INLAND +-120.96,39.12,24.0,2069.0,436.0,909.0,374.0,2.5326,139100.0,INLAND +-120.98,39.08,20.0,4570.0,906.0,2125.0,815.0,3.0403,148000.0,INLAND +-120.94,39.05,8.0,3758.0,717.0,1744.0,661.0,3.1972,151500.0,INLAND +-120.98,39.93,25.0,2220.0,511.0,912.0,449.0,1.8914,87800.0,INLAND +-120.95,39.93,26.0,2023.0,385.0,922.0,365.0,2.8125,83500.0,INLAND +-120.93,39.9,20.0,1511.0,328.0,791.0,320.0,2.0221,70900.0,INLAND +-120.9,39.93,23.0,2679.0,546.0,1424.0,529.0,2.8812,81900.0,INLAND +-120.9,39.95,20.0,1349.0,238.0,601.0,203.0,3.5417,96600.0,INLAND +-120.93,39.96,15.0,1666.0,351.0,816.0,316.0,2.9559,118800.0,INLAND +-120.92,40.02,35.0,383.0,92.0,202.0,72.0,2.6458,102500.0,INLAND +-120.74,39.9,23.0,1017.0,218.0,387.0,152.0,2.2656,88200.0,INLAND +-120.57,39.78,15.0,1291.0,283.0,582.0,242.0,2.1216,102000.0,INLAND +-120.66,39.72,15.0,3763.0,784.0,717.0,348.0,2.2019,130500.0,INLAND +-120.74,39.82,9.0,1955.0,398.0,294.0,122.0,3.9583,126500.0,INLAND +-121.0,39.75,8.0,1116.0,214.0,27.0,39.0,2.5893,83000.0,INLAND +-121.14,39.86,16.0,2534.0,557.0,638.0,244.0,2.2101,88800.0,INLAND +-120.53,39.79,18.0,1234.0,266.0,543.0,201.0,2.5156,71900.0,INLAND +-120.48,39.78,11.0,513.0,104.0,204.0,86.0,2.375,100000.0,INLAND +-120.45,39.8,47.0,2149.0,456.0,965.0,419.0,1.7829,55900.0,INLAND +-120.46,39.83,18.0,3406.0,673.0,1567.0,617.0,2.2717,75900.0,INLAND +-120.38,39.82,10.0,1262.0,258.0,510.0,209.0,2.1667,92800.0,INLAND +-120.15,39.8,19.0,785.0,151.0,366.0,140.0,3.0625,82500.0,INLAND +-120.94,40.17,22.0,1334.0,261.0,597.0,222.0,2.2132,89200.0,INLAND +-120.91,40.08,24.0,1629.0,313.0,641.0,274.0,2.2067,69600.0,INLAND +-120.94,40.14,31.0,3127.0,664.0,1345.0,580.0,1.5774,58000.0,INLAND +-121.23,40.01,38.0,725.0,190.0,219.0,115.0,1.625,75000.0,INLAND +-120.71,40.13,19.0,897.0,180.0,276.0,110.0,2.9554,89400.0,INLAND +-121.25,40.27,25.0,958.0,245.0,28.0,16.0,2.625,67500.0,INLAND +-121.24,40.31,36.0,1597.0,301.0,632.0,262.0,3.5962,93600.0,INLAND +-121.23,40.29,21.0,3229.0,667.0,1501.0,582.0,2.1524,77100.0,INLAND +-121.19,40.23,10.0,1572.0,232.0,247.0,104.0,5.8453,193800.0,INLAND +-121.08,40.19,11.0,919.0,199.0,69.0,43.0,1.6944,137500.0,INLAND +-121.06,40.23,23.0,1127.0,225.0,215.0,85.0,3.4844,143800.0,INLAND +-121.09,40.3,15.0,1717.0,336.0,501.0,206.0,3.6477,113400.0,INLAND +-121.14,40.29,17.0,1944.0,394.0,384.0,172.0,1.6875,111500.0,INLAND +-121.15,40.25,14.0,5156.0,880.0,616.0,281.0,3.3462,145200.0,INLAND +-117.35,34.0,38.0,1214.0,254.0,723.0,236.0,2.5469,87800.0,INLAND +-117.36,33.99,42.0,1178.0,261.0,804.0,283.0,2.9688,92900.0,INLAND +-117.37,34.0,36.0,730.0,155.0,476.0,142.0,2.4306,88900.0,INLAND +-117.37,34.0,41.0,1248.0,278.0,770.0,250.0,3.025,90600.0,INLAND +-117.36,34.0,19.0,4592.0,895.0,2769.0,838.0,3.3622,105100.0,INLAND +-117.37,34.01,15.0,1386.0,247.0,703.0,185.0,3.6415,124200.0,INLAND +-117.38,34.0,45.0,2881.0,514.0,1470.0,515.0,3.3687,123800.0,INLAND +-117.38,33.99,52.0,1797.0,332.0,905.0,313.0,2.7054,141700.0,INLAND +-117.38,33.98,52.0,2274.0,571.0,1167.0,504.0,2.0284,101600.0,INLAND +-117.39,33.98,37.0,2337.0,452.0,948.0,437.0,3.145,169100.0,INLAND +-117.41,33.97,24.0,950.0,183.0,383.0,182.0,3.0694,125000.0,INLAND +-117.37,33.98,43.0,2862.0,772.0,1878.0,675.0,2.1151,96700.0,INLAND +-117.38,33.97,29.0,1157.0,297.0,2027.0,253.0,1.6389,155000.0,INLAND +-117.38,33.98,10.0,642.0,176.0,462.0,186.0,2.1528,162500.0,INLAND +-117.37,33.98,27.0,1342.0,547.0,844.0,484.0,1.1194,95800.0,INLAND +-117.37,33.99,44.0,917.0,224.0,666.0,220.0,1.685,114200.0,INLAND +-117.36,33.98,46.0,1680.0,453.0,1570.0,435.0,2.0436,82300.0,INLAND +-117.37,33.97,34.0,3676.0,697.0,2653.0,682.0,2.5804,92400.0,INLAND +-117.37,33.97,38.0,1156.0,241.0,877.0,200.0,1.4514,79900.0,INLAND +-117.37,33.97,40.0,1166.0,250.0,976.0,244.0,1.95,84800.0,INLAND +-117.37,33.98,52.0,201.0,44.0,130.0,24.0,2.025,125000.0,INLAND +-117.35,33.99,45.0,131.0,28.0,89.0,31.0,2.6071,112500.0,INLAND +-117.35,33.98,31.0,4163.0,1242.0,3928.0,1076.0,1.6943,85900.0,INLAND +-117.35,33.97,27.0,3960.0,886.0,2807.0,838.0,3.024,122500.0,INLAND +-117.36,33.97,32.0,1625.0,335.0,1212.0,327.0,2.7596,82200.0,INLAND +-117.36,33.98,33.0,2070.0,469.0,1851.0,467.0,2.4667,80700.0,INLAND +-117.37,33.96,33.0,3974.0,548.0,1398.0,528.0,7.2519,216600.0,INLAND +-117.35,33.96,25.0,2396.0,316.0,951.0,314.0,8.2405,235200.0,INLAND +-117.35,33.95,28.0,1650.0,210.0,557.0,211.0,7.6632,204800.0,INLAND +-117.37,33.94,14.0,9286.0,1269.0,3565.0,1238.0,6.6635,219600.0,INLAND +-117.36,33.92,7.0,9376.0,1181.0,3570.0,1107.0,8.5326,315200.0,INLAND +-117.39,33.97,52.0,3307.0,553.0,1269.0,529.0,4.3176,136200.0,INLAND +-117.38,33.97,30.0,2953.0,703.0,1406.0,580.0,2.6895,150000.0,INLAND +-117.39,33.96,52.0,1992.0,345.0,948.0,358.0,3.2917,129300.0,INLAND +-117.4,33.96,51.0,1806.0,322.0,709.0,298.0,3.575,125500.0,INLAND +-117.39,33.97,48.0,1915.0,348.0,1060.0,376.0,3.4044,117900.0,INLAND +-117.4,33.97,38.0,1383.0,238.0,649.0,232.0,5.0194,148900.0,INLAND +-117.4,33.97,41.0,1707.0,276.0,660.0,269.0,3.8618,134800.0,INLAND +-117.41,33.96,32.0,2837.0,617.0,1393.0,595.0,2.3798,118800.0,INLAND +-117.41,33.96,24.0,4481.0,901.0,2398.0,823.0,3.864,123400.0,INLAND +-117.41,33.97,34.0,2316.0,365.0,956.0,389.0,4.337,157800.0,INLAND +-117.44,33.96,29.0,124.0,22.0,50.0,18.0,12.5381,112500.0,INLAND +-117.43,33.96,28.0,3747.0,651.0,2399.0,646.0,3.8682,116500.0,INLAND +-117.44,33.95,31.0,914.0,177.0,556.0,161.0,3.7344,115300.0,INLAND +-117.4,33.95,46.0,2189.0,423.0,866.0,389.0,3.1384,111500.0,INLAND +-117.4,33.95,32.0,1979.0,491.0,954.0,444.0,2.4408,117300.0,INLAND +-117.41,33.95,37.0,1586.0,283.0,675.0,305.0,2.9583,132100.0,INLAND +-117.41,33.95,37.0,1462.0,257.0,849.0,287.0,3.0542,123900.0,INLAND +-117.42,33.95,32.0,4251.0,848.0,2494.0,798.0,2.8173,110800.0,INLAND +-117.42,33.96,33.0,2275.0,469.0,1691.0,459.0,2.7452,98100.0,INLAND +-117.41,33.96,27.0,2341.0,418.0,1272.0,415.0,3.0208,112700.0,INLAND +-117.38,33.96,30.0,3153.0,623.0,1544.0,575.0,3.4491,133800.0,INLAND +-117.39,33.95,36.0,1380.0,269.0,598.0,262.0,3.1667,122900.0,INLAND +-117.39,33.95,35.0,1599.0,284.0,721.0,287.0,4.125,120700.0,INLAND +-117.4,33.95,43.0,633.0,166.0,292.0,135.0,1.1601,121400.0,INLAND +-117.39,33.96,49.0,2527.0,461.0,1344.0,451.0,4.0833,114400.0,INLAND +-117.37,33.95,32.0,2215.0,351.0,771.0,311.0,4.3542,142600.0,INLAND +-117.37,33.94,20.0,1682.0,296.0,706.0,291.0,4.0966,140100.0,INLAND +-117.38,33.94,21.0,2468.0,380.0,1164.0,385.0,4.0625,136800.0,INLAND +-117.39,33.93,26.0,3014.0,494.0,1832.0,485.0,4.8333,127900.0,INLAND +-117.39,33.95,35.0,3306.0,680.0,1742.0,673.0,3.7109,109100.0,INLAND +-117.4,33.94,30.0,1198.0,251.0,1019.0,214.0,3.0509,82700.0,INLAND +-117.4,33.93,35.0,1468.0,298.0,1168.0,261.0,2.2222,81300.0,INLAND +-117.41,33.93,35.0,793.0,150.0,669.0,128.0,4.0156,89300.0,INLAND +-117.4,33.94,37.0,987.0,187.0,551.0,191.0,3.5865,112000.0,INLAND +-117.4,33.94,42.0,943.0,171.0,466.0,203.0,3.1458,116000.0,INLAND +-117.41,33.94,33.0,2074.0,476.0,911.0,420.0,2.87,117600.0,INLAND +-117.41,33.94,29.0,3181.0,714.0,1603.0,706.0,3.25,112500.0,INLAND +-117.42,33.93,32.0,2885.0,595.0,1509.0,590.0,3.1795,125600.0,INLAND +-117.41,33.94,22.0,4179.0,1081.0,2096.0,1013.0,2.4435,118500.0,INLAND +-117.42,33.94,26.0,2420.0,532.0,1383.0,469.0,3.5403,113500.0,INLAND +-117.42,33.94,35.0,1764.0,325.0,1094.0,353.0,4.1528,113900.0,INLAND +-117.43,33.95,36.0,2284.0,444.0,1425.0,405.0,4.0526,104500.0,INLAND +-117.43,33.93,36.0,2386.0,396.0,1176.0,374.0,4.5122,113300.0,INLAND +-117.43,33.93,15.0,4836.0,1368.0,3012.0,1240.0,2.1865,129300.0,INLAND +-117.43,33.93,31.0,1273.0,262.0,686.0,254.0,2.4922,109400.0,INLAND +-117.44,33.93,34.0,1577.0,272.0,880.0,284.0,4.6327,116000.0,INLAND +-117.45,33.94,12.0,3539.0,869.0,1987.0,859.0,2.1023,103700.0,INLAND +-117.44,33.94,32.0,2349.0,452.0,1479.0,425.0,3.9118,114100.0,INLAND +-117.44,33.94,30.0,2992.0,516.0,1521.0,507.0,3.9128,126900.0,INLAND +-117.44,33.94,32.0,1814.0,320.0,903.0,306.0,4.1776,118700.0,INLAND +-117.44,33.93,33.0,1371.0,236.0,715.0,227.0,4.375,129900.0,INLAND +-117.45,33.93,20.0,5998.0,1320.0,3185.0,1199.0,3.2731,113900.0,INLAND +-117.44,33.92,33.0,2433.0,525.0,1466.0,517.0,3.0437,110800.0,INLAND +-117.45,33.91,29.0,2320.0,422.0,1358.0,415.0,3.7333,121400.0,INLAND +-117.45,33.92,35.0,2552.0,588.0,1840.0,551.0,2.2548,113300.0,INLAND +-117.39,33.92,25.0,2886.0,583.0,2327.0,577.0,2.3851,113700.0,INLAND +-117.4,33.9,32.0,1263.0,178.0,508.0,180.0,3.6667,314100.0,INLAND +-117.44,33.9,23.0,4487.0,754.0,2609.0,778.0,4.2788,148700.0,INLAND +-117.43,33.91,15.0,14281.0,2511.0,7540.0,2245.0,4.3222,138000.0,INLAND +-117.42,33.89,4.0,80.0,10.0,55.0,13.0,7.7197,193800.0,INLAND +-117.4,34.01,25.0,1858.0,366.0,1311.0,331.0,2.7083,87800.0,INLAND +-117.41,34.01,34.0,1231.0,216.0,841.0,199.0,2.6442,92000.0,INLAND +-117.43,34.02,33.0,3084.0,570.0,1753.0,449.0,3.05,97800.0,INLAND +-117.42,34.02,9.0,5455.0,882.0,3015.0,858.0,4.2321,162800.0,INLAND +-117.4,34.0,24.0,2316.0,599.0,1829.0,532.0,1.6955,86800.0,INLAND +-117.4,34.0,31.0,1192.0,307.0,1013.0,283.0,2.0742,76200.0,INLAND +-117.41,34.0,38.0,2228.0,571.0,1697.0,530.0,1.9052,83400.0,INLAND +-117.43,33.98,21.0,2634.0,421.0,1376.0,406.0,4.2589,152200.0,INLAND +-117.42,33.98,16.0,10072.0,2043.0,5913.0,1909.0,3.0606,119500.0,INLAND +-117.45,34.01,26.0,3042.0,598.0,1720.0,551.0,2.76,95200.0,INLAND +-117.43,34.01,34.0,2101.0,426.0,1150.0,377.0,3.0909,98300.0,INLAND +-117.41,34.0,26.0,2372.0,621.0,1647.0,612.0,1.4719,88600.0,INLAND +-117.42,34.0,32.0,1617.0,346.0,1153.0,385.0,3.016,96600.0,INLAND +-117.43,33.99,18.0,3307.0,547.0,1738.0,457.0,4.566,116900.0,INLAND +-117.44,33.99,12.0,9966.0,1517.0,5008.0,1492.0,4.5625,171300.0,INLAND +-117.5,34.0,15.0,1929.0,317.0,1237.0,316.0,4.4063,128500.0,INLAND +-117.49,33.99,21.0,2050.0,392.0,1153.0,336.0,4.84,116400.0,INLAND +-117.48,33.98,20.0,2451.0,475.0,1785.0,456.0,3.3966,115000.0,INLAND +-117.49,33.98,17.0,2727.0,462.0,1691.0,448.0,4.8371,160600.0,INLAND +-117.5,33.98,21.0,2394.0,416.0,1291.0,381.0,4.2099,138700.0,INLAND +-117.47,33.98,8.0,12106.0,1913.0,5810.0,1717.0,4.9886,158100.0,INLAND +-117.48,34.01,23.0,2000.0,376.0,1361.0,388.0,4.369,121100.0,INLAND +-117.49,34.02,35.0,2051.0,427.0,1466.0,425.0,3.6711,108200.0,INLAND +-117.49,34.02,21.0,3736.0,738.0,2021.0,640.0,4.4545,142400.0,INLAND +-117.51,34.02,24.0,7779.0,1835.0,3996.0,1765.0,2.1764,135300.0,INLAND +-117.48,34.0,12.0,6751.0,1153.0,3266.0,1134.0,3.8529,145500.0,INLAND +-117.51,34.0,36.0,3791.0,746.0,2258.0,672.0,3.2067,124700.0,INLAND +-117.52,33.99,14.0,13562.0,2057.0,7600.0,2086.0,5.2759,182900.0,INLAND +-117.53,33.97,34.0,1293.0,215.0,774.0,217.0,3.8906,141000.0,INLAND +-117.53,33.97,29.0,1430.0,273.0,872.0,283.0,4.0833,141000.0,INLAND +-117.51,33.97,35.0,352.0,62.0,184.0,57.0,3.6691,137500.0,INLAND +-117.53,34.02,19.0,256.0,34.0,101.0,28.0,5.3269,375000.0,INLAND +-117.6,33.94,26.0,2925.0,575.0,1921.0,501.0,3.1859,153100.0,INLAND +-117.55,34.0,17.0,3583.0,700.0,1587.0,719.0,2.6979,75000.0,INLAND +-117.53,33.94,21.0,5675.0,935.0,2834.0,865.0,4.2263,203200.0,INLAND +-117.55,33.94,30.0,5398.0,926.0,2672.0,864.0,4.4762,163900.0,INLAND +-117.56,33.94,29.0,266.0,42.0,136.0,40.0,1.625,164300.0,INLAND +-117.56,33.94,6.0,575.0,73.0,318.0,88.0,7.0215,257100.0,INLAND +-117.57,33.93,3.0,1240.0,151.0,519.0,146.0,7.5408,271900.0,INLAND +-117.55,33.95,17.0,3196.0,444.0,1581.0,462.0,5.9333,229400.0,INLAND +-117.59,33.91,7.0,10223.0,1491.0,5205.0,1509.0,5.4872,203400.0,INLAND +-117.57,33.9,7.0,3797.0,850.0,2369.0,720.0,3.5525,137600.0,INLAND +-117.56,33.89,16.0,693.0,185.0,365.0,176.0,2.3417,191700.0,INLAND +-117.55,33.89,25.0,2999.0,439.0,1396.0,458.0,5.6973,164800.0,INLAND +-117.52,33.89,2.0,17978.0,3217.0,7305.0,2463.0,5.1695,220800.0,INLAND +-117.6,33.91,15.0,1864.0,271.0,1006.0,288.0,7.2379,251000.0,INLAND +-117.55,33.93,25.0,5187.0,934.0,2725.0,860.0,4.1865,154300.0,INLAND +-117.55,33.92,24.0,2807.0,501.0,1653.0,509.0,4.8167,163300.0,INLAND +-117.55,33.9,21.0,1839.0,324.0,871.0,307.0,3.4459,198800.0,INLAND +-117.53,33.92,12.0,2290.0,319.0,728.0,228.0,6.1561,233500.0,INLAND +-117.58,33.92,16.0,4157.0,586.0,2036.0,594.0,6.155,246400.0,INLAND +-117.57,33.91,22.0,2620.0,396.0,1324.0,362.0,5.3735,214600.0,INLAND +-117.59,33.93,17.0,338.0,47.0,200.0,46.0,7.8118,244200.0,INLAND +-117.5,33.93,19.0,4741.0,835.0,2903.0,796.0,4.3723,135600.0,INLAND +-117.49,33.91,17.0,5364.0,1020.0,3754.0,936.0,3.2857,139100.0,INLAND +-117.5,33.92,31.0,2529.0,513.0,1504.0,426.0,2.9821,115600.0,INLAND +-117.5,33.92,28.0,2101.0,337.0,1061.0,348.0,4.55,146800.0,INLAND +-117.51,33.95,12.0,9016.0,1486.0,4285.0,1457.0,4.9984,169100.0,INLAND +-117.46,33.95,34.0,1565.0,296.0,1142.0,328.0,3.6979,99600.0,INLAND +-117.47,33.95,15.0,6248.0,1249.0,3795.0,1128.0,4.1264,124600.0,INLAND +-117.5,33.96,12.0,7923.0,1470.0,4861.0,1385.0,4.2985,139200.0,INLAND +-117.5,33.95,29.0,932.0,153.0,711.0,172.0,4.8214,143400.0,INLAND +-117.46,33.94,26.0,2481.0,620.0,2411.0,552.0,1.7059,85800.0,INLAND +-117.47,33.94,34.0,559.0,139.0,532.0,137.0,3.0687,88500.0,INLAND +-117.48,33.94,19.0,1891.0,465.0,1693.0,416.0,2.7813,112900.0,INLAND +-117.48,33.94,29.0,1625.0,336.0,1046.0,320.0,3.1985,117300.0,INLAND +-117.49,33.94,28.0,2787.0,490.0,1684.0,467.0,4.0256,127100.0,INLAND +-117.46,33.93,16.0,4112.0,880.0,2821.0,857.0,3.0122,114700.0,INLAND +-117.46,33.93,19.0,4780.0,861.0,3043.0,766.0,3.7431,132800.0,INLAND +-117.46,33.92,21.0,713.0,142.0,476.0,142.0,3.5208,121100.0,INLAND +-117.47,33.93,33.0,919.0,208.0,724.0,235.0,3.4028,110500.0,INLAND +-117.47,33.94,34.0,2086.0,417.0,1501.0,395.0,3.2311,105600.0,INLAND +-117.46,33.94,35.0,1566.0,294.0,1056.0,279.0,3.5227,105400.0,INLAND +-117.48,33.93,31.0,2191.0,459.0,1564.0,450.0,2.6776,122000.0,INLAND +-117.47,33.92,18.0,3869.0,773.0,2500.0,726.0,3.6583,126100.0,INLAND +-117.49,33.93,26.0,2970.0,576.0,2156.0,558.0,3.9522,124600.0,INLAND +-117.47,33.91,21.0,3491.0,760.0,1920.0,669.0,2.2241,127300.0,INLAND +-117.46,33.9,10.0,9738.0,2130.0,4936.0,1840.0,3.3187,144800.0,INLAND +-117.48,33.89,14.0,10395.0,1799.0,6295.0,1855.0,4.7295,149900.0,INLAND +-117.49,33.9,7.0,10235.0,2238.0,5271.0,2094.0,3.6071,159100.0,INLAND +-117.48,33.91,22.0,3611.0,666.0,1869.0,649.0,4.2207,141100.0,INLAND +-117.44,33.88,5.0,2589.0,351.0,1109.0,360.0,6.8089,334100.0,INLAND +-117.51,33.89,16.0,5418.0,1005.0,2690.0,1088.0,4.0556,158000.0,INLAND +-117.51,33.88,24.0,3044.0,602.0,2541.0,564.0,4.131,123800.0,INLAND +-117.52,33.88,21.0,722.0,178.0,770.0,165.0,2.5656,102500.0,INLAND +-117.53,33.88,22.0,2855.0,667.0,2453.0,624.0,3.1312,91000.0,INLAND +-117.5,33.87,4.0,6755.0,1017.0,2866.0,850.0,5.0493,239800.0,INLAND +-117.56,33.88,36.0,838.0,210.0,722.0,180.0,2.4861,96200.0,INLAND +-117.58,33.89,14.0,1731.0,404.0,1269.0,351.0,2.3654,107900.0,INLAND +-117.55,33.88,19.0,2472.0,618.0,2143.0,610.0,2.2372,108800.0,INLAND +-117.57,33.87,33.0,2076.0,517.0,1374.0,480.0,2.2197,138200.0,INLAND +-117.56,33.88,40.0,1196.0,294.0,1052.0,258.0,2.0682,113000.0,INLAND +-117.57,33.88,35.0,1755.0,446.0,1453.0,428.0,2.316,119400.0,INLAND +-117.57,33.88,39.0,679.0,164.0,769.0,179.0,2.3036,110600.0,INLAND +-117.58,33.87,42.0,765.0,171.0,590.0,177.0,1.6875,113500.0,INLAND +-117.59,33.88,7.0,3586.0,959.0,2695.0,877.0,2.4387,117000.0,INLAND +-117.59,33.88,13.0,3239.0,849.0,2751.0,813.0,2.6111,107000.0,INLAND +-117.58,33.88,16.0,1739.0,478.0,1235.0,420.0,2.2969,116100.0,INLAND +-117.57,33.87,37.0,621.0,156.0,443.0,135.0,2.3333,122800.0,INLAND +-117.57,33.87,27.0,1786.0,287.0,939.0,278.0,5.1929,165000.0,INLAND +-117.58,33.87,17.0,2772.0,449.0,1685.0,461.0,5.0464,163900.0,INLAND +-117.58,33.87,30.0,701.0,131.0,356.0,125.0,3.2917,144300.0,INLAND +-117.58,33.87,34.0,1511.0,272.0,773.0,265.0,3.5313,142100.0,INLAND +-117.55,33.85,4.0,8207.0,1373.0,3887.0,1304.0,4.8686,195300.0,INLAND +-117.56,33.83,28.0,895.0,127.0,346.0,115.0,5.4788,339300.0,INLAND +-117.58,33.85,6.0,16431.0,2640.0,8222.0,2553.0,5.2861,195100.0,INLAND +-117.54,33.82,6.0,202.0,29.0,75.0,28.0,4.125,216700.0,INLAND +-117.55,33.83,6.0,502.0,76.0,228.0,65.0,4.2386,500001.0,INLAND +-117.6,33.85,9.0,6538.0,955.0,2928.0,892.0,5.3006,221400.0,<1H OCEAN +-117.56,33.86,25.0,6964.0,1066.0,3240.0,1036.0,5.2898,177100.0,INLAND +-117.55,33.87,18.0,8136.0,1584.0,4976.0,1516.0,3.9414,137100.0,INLAND +-117.64,33.88,13.0,8010.0,1366.0,3920.0,1309.0,5.536,204800.0,<1H OCEAN +-117.6,33.87,18.0,6450.0,1165.0,3716.0,1113.0,4.2721,150300.0,INLAND +-117.6,33.86,23.0,2949.0,473.0,1671.0,477.0,5.195,161000.0,INLAND +-117.6,33.87,15.0,7626.0,1570.0,3823.0,1415.0,3.4419,138100.0,INLAND +-117.64,33.87,2.0,17470.0,2727.0,5964.0,1985.0,6.2308,257900.0,<1H OCEAN +-117.52,33.84,20.0,688.0,146.0,575.0,144.0,3.55,111000.0,INLAND +-117.52,33.83,22.0,2397.0,400.0,1347.0,403.0,4.46,189800.0,INLAND +-117.53,33.83,7.0,2191.0,324.0,1156.0,310.0,5.5362,195600.0,INLAND +-117.54,33.76,5.0,5846.0,1035.0,3258.0,1001.0,4.7965,160800.0,<1H OCEAN +-117.52,33.82,14.0,3776.0,580.0,1877.0,559.0,5.1365,215000.0,INLAND +-117.36,33.88,15.0,2857.0,421.0,1361.0,382.0,4.6875,189800.0,INLAND +-117.33,33.9,2.0,12837.0,1842.0,4636.0,1453.0,5.1512,187800.0,INLAND +-117.34,33.89,17.0,2678.0,394.0,1225.0,367.0,5.363,211300.0,INLAND +-117.38,33.89,12.0,3964.0,524.0,1707.0,549.0,5.1624,267900.0,INLAND +-117.36,33.88,10.0,5600.0,848.0,2573.0,788.0,5.0346,240500.0,INLAND +-117.26,33.86,16.0,1171.0,235.0,659.0,216.0,3.1103,110000.0,INLAND +-117.33,33.87,14.0,2300.0,335.0,1001.0,311.0,5.1045,161300.0,INLAND +-117.3,33.85,15.0,3991.0,751.0,2317.0,657.0,2.9542,127900.0,INLAND +-117.28,33.85,16.0,3498.0,702.0,2372.0,672.0,2.3229,118000.0,INLAND +-117.43,33.81,13.0,4770.0,718.0,1985.0,662.0,4.2273,295200.0,INLAND +-117.4,33.76,8.0,1954.0,330.0,973.0,321.0,4.4875,249100.0,INLAND +-117.4,33.85,9.0,7538.0,1125.0,3450.0,1077.0,5.4625,223600.0,INLAND +-117.26,33.84,12.0,1159.0,209.0,523.0,159.0,2.7232,123200.0,INLAND +-117.32,33.87,15.0,826.0,138.0,440.0,134.0,4.8125,173900.0,INLAND +-117.28,33.89,33.0,6982.0,1371.0,5650.0,1195.0,2.5379,152700.0,INLAND +-117.34,33.96,15.0,6437.0,1298.0,2805.0,1205.0,4.1883,184500.0,INLAND +-117.32,33.96,19.0,3216.0,666.0,1363.0,629.0,3.7585,144500.0,INLAND +-117.34,33.94,20.0,4589.0,594.0,1660.0,595.0,7.4141,236500.0,INLAND +-117.34,33.94,13.0,7910.0,,3382.0,1176.0,5.5563,214500.0,INLAND +-117.31,33.94,7.0,11232.0,1791.0,4218.0,1644.0,5.2713,216500.0,INLAND +-117.33,33.98,52.0,1417.0,353.0,881.0,300.0,1.9531,162500.0,INLAND +-117.33,33.97,8.0,152.0,19.0,1275.0,20.0,1.625,162500.0,INLAND +-117.34,34.0,27.0,321.0,64.0,214.0,67.0,3.175,101600.0,INLAND +-117.34,33.98,10.0,17286.0,4952.0,9851.0,4616.0,1.7579,103400.0,INLAND +-117.32,33.99,27.0,5464.0,850.0,2400.0,836.0,4.711,133500.0,INLAND +-117.31,33.97,28.0,3420.0,691.0,1502.0,656.0,3.4896,140300.0,INLAND +-117.29,33.97,4.0,18767.0,3032.0,8805.0,2723.0,4.6667,160600.0,INLAND +-117.35,34.01,23.0,3707.0,769.0,1938.0,658.0,2.725,95300.0,INLAND +-117.34,34.02,28.0,2683.0,708.0,2047.0,636.0,2.275,85400.0,INLAND +-117.32,34.01,23.0,3021.0,527.0,1580.0,533.0,4.4063,129900.0,INLAND +-117.24,33.95,11.0,6617.0,1118.0,3710.0,1087.0,4.7877,132600.0,INLAND +-117.23,33.94,7.0,13195.0,2696.0,6763.0,2437.0,3.5851,142000.0,INLAND +-117.25,33.95,5.0,13096.0,2208.0,6780.0,2180.0,4.2775,138700.0,INLAND +-117.23,33.96,5.0,9179.0,1361.0,4573.0,1294.0,5.253,163300.0,INLAND +-117.21,33.95,5.0,8403.0,1240.0,3962.0,1150.0,5.2174,155500.0,INLAND +-117.14,33.94,5.0,4873.0,639.0,1947.0,568.0,6.3223,223200.0,INLAND +-117.21,33.97,3.0,18356.0,2537.0,8437.0,2342.0,5.6409,197700.0,INLAND +-117.28,33.94,10.0,972.0,212.0,773.0,219.0,1.3125,135700.0,INLAND +-117.28,33.92,35.0,3623.0,841.0,2721.0,766.0,2.1574,86900.0,INLAND +-117.27,33.92,13.0,8443.0,1744.0,4885.0,1470.0,3.0907,127200.0,INLAND +-117.27,33.93,2.0,337.0,55.0,115.0,49.0,3.1042,164800.0,INLAND +-117.24,33.94,15.0,1569.0,423.0,1123.0,369.0,1.6111,113900.0,INLAND +-117.24,33.93,12.0,7105.0,1447.0,4520.0,1333.0,3.2705,113200.0,INLAND +-117.25,33.93,8.0,10110.0,1761.0,5804.0,1703.0,4.2654,137600.0,INLAND +-117.25,33.92,7.0,9812.0,1914.0,5595.0,1729.0,4.1482,124600.0,INLAND +-117.23,33.91,9.0,11654.0,2100.0,7596.0,2127.0,4.0473,127200.0,INLAND +-117.23,33.89,5.0,11775.0,2031.0,6686.0,1911.0,4.1953,136600.0,INLAND +-117.23,33.94,8.0,2405.0,537.0,1594.0,517.0,3.0789,114200.0,INLAND +-117.22,33.93,14.0,5104.0,1026.0,3513.0,972.0,3.2148,117000.0,INLAND +-117.22,33.92,5.0,16884.0,2865.0,9509.0,2688.0,4.0938,130900.0,INLAND +-117.21,33.93,4.0,10002.0,1468.0,5439.0,1397.0,5.0223,152600.0,INLAND +-117.16,33.92,12.0,3236.0,502.0,1610.0,502.0,4.7568,143500.0,INLAND +-117.22,33.9,8.0,8302.0,1461.0,5155.0,1370.0,4.0467,121500.0,INLAND +-117.13,33.89,4.0,1611.0,239.0,275.0,84.0,3.5781,244400.0,INLAND +-117.19,33.9,3.0,21060.0,3366.0,9623.0,2812.0,4.189,143000.0,INLAND +-117.22,33.87,16.0,56.0,7.0,39.0,14.0,2.625,500001.0,INLAND +-117.24,33.85,8.0,1031.0,201.0,606.0,179.0,2.8194,136300.0,INLAND +-117.17,33.83,7.0,77.0,12.0,64.0,15.0,4.6,187500.0,INLAND +-117.2,33.83,14.0,1265.0,230.0,621.0,173.0,3.6618,161300.0,INLAND +-117.23,33.83,2.0,1424.0,251.0,681.0,192.0,4.0833,100000.0,INLAND +-117.21,33.82,2.0,4198.0,805.0,1943.0,673.0,3.9052,122100.0,INLAND +-117.22,33.81,4.0,9911.0,1946.0,5145.0,1661.0,3.4237,113700.0,INLAND +-117.21,33.71,16.0,8476.0,1758.0,2711.0,1427.0,2.1848,97900.0,<1H OCEAN +-117.2,33.72,8.0,5528.0,1073.0,1674.0,918.0,2.5335,110100.0,<1H OCEAN +-117.2,33.72,16.0,5373.0,1079.0,1573.0,933.0,1.9912,98600.0,<1H OCEAN +-117.2,33.71,24.0,4210.0,920.0,1283.0,829.0,2.0881,83300.0,<1H OCEAN +-117.2,33.7,23.0,6323.0,1196.0,1984.0,1124.0,2.3276,92400.0,<1H OCEAN +-117.19,33.7,24.0,5783.0,1256.0,1990.0,1151.0,1.9014,83500.0,<1H OCEAN +-117.19,33.69,3.0,6484.0,1037.0,3295.0,1074.0,4.5881,136400.0,<1H OCEAN +-117.27,33.68,8.0,26322.0,4072.0,9360.0,3361.0,5.3238,228900.0,<1H OCEAN +-117.25,33.7,10.0,5156.0,941.0,2294.0,747.0,3.58,113400.0,<1H OCEAN +-117.23,33.68,10.0,3659.0,650.0,1476.0,515.0,3.8869,125900.0,<1H OCEAN +-117.22,33.66,12.0,1869.0,356.0,1007.0,323.0,3.125,117200.0,<1H OCEAN +-117.17,33.66,2.0,7401.0,1187.0,2826.0,839.0,4.1386,177300.0,<1H OCEAN +-117.07,33.67,11.0,939.0,187.0,557.0,190.0,2.375,145800.0,INLAND +-117.11,33.83,14.0,2715.0,500.0,1540.0,464.0,3.8036,139600.0,INLAND +-117.11,33.78,13.0,1914.0,339.0,930.0,304.0,4.1875,161200.0,INLAND +-117.08,33.82,6.0,1771.0,293.0,935.0,279.0,4.065,148200.0,INLAND +-117.18,33.78,7.0,1697.0,424.0,808.0,354.0,1.3417,169300.0,INLAND +-117.11,33.75,17.0,4174.0,851.0,1845.0,780.0,2.2618,96100.0,INLAND +-117.16,33.76,11.0,4934.0,929.0,2508.0,840.0,2.625,155400.0,INLAND +-117.22,33.74,7.0,1810.0,386.0,931.0,355.0,2.5221,109200.0,<1H OCEAN +-117.06,33.78,17.0,2813.0,565.0,1345.0,488.0,2.5847,145300.0,INLAND +-117.14,33.81,13.0,4496.0,756.0,2044.0,695.0,3.2778,148800.0,INLAND +-117.22,33.8,3.0,5284.0,920.0,2703.0,729.0,4.0717,126500.0,INLAND +-117.09,33.71,13.0,1974.0,426.0,1276.0,408.0,1.972,90500.0,INLAND +-117.07,33.72,16.0,4928.0,960.0,2132.0,853.0,2.7983,112500.0,INLAND +-117.11,33.74,18.0,4799.0,1035.0,1966.0,944.0,2.1182,71300.0,INLAND +-117.15,33.7,2.0,6305.0,1265.0,2489.0,1152.0,3.1319,111500.0,INLAND +-117.16,33.73,10.0,2381.0,454.0,1323.0,477.0,2.6322,140700.0,INLAND +-117.23,33.79,17.0,3318.0,759.0,2016.0,673.0,2.2969,89300.0,INLAND +-117.23,33.78,23.0,3465.0,703.0,2672.0,607.0,1.9767,81500.0,INLAND +-117.23,33.77,5.0,2108.0,496.0,1666.0,461.0,2.0,83000.0,INLAND +-117.29,33.83,15.0,4173.0,804.0,2393.0,713.0,2.4662,118300.0,INLAND +-117.32,33.8,11.0,3196.0,576.0,1757.0,552.0,4.0982,173300.0,INLAND +-117.26,33.81,22.0,4249.0,922.0,2405.0,846.0,2.1549,146500.0,INLAND +-117.24,33.77,9.0,6907.0,1379.0,3665.0,1290.0,2.8401,104200.0,INLAND +-117.31,33.75,19.0,3173.0,678.0,2204.0,606.0,2.1484,129200.0,<1H OCEAN +-117.27,33.77,16.0,2876.0,576.0,1859.0,545.0,2.0878,101300.0,<1H OCEAN +-117.29,33.72,19.0,2248.0,427.0,1207.0,368.0,2.817,110000.0,<1H OCEAN +-117.28,33.72,11.0,1161.0,235.0,640.0,210.0,2.1667,114600.0,<1H OCEAN +-117.39,33.69,5.0,6529.0,997.0,3464.0,1006.0,5.3275,168700.0,<1H OCEAN +-117.37,33.7,8.0,4345.0,865.0,2425.0,785.0,3.2481,123800.0,<1H OCEAN +-117.34,33.71,10.0,2591.0,486.0,1255.0,425.0,3.1513,154300.0,<1H OCEAN +-117.31,33.67,9.0,981.0,169.0,596.0,156.0,3.1832,157400.0,<1H OCEAN +-117.35,33.69,11.0,1229.0,236.0,581.0,190.0,3.102,111300.0,<1H OCEAN +-117.33,33.67,27.0,4376.0,1003.0,2667.0,870.0,1.9194,100600.0,<1H OCEAN +-117.35,33.68,10.0,516.0,107.0,282.0,96.0,4.2788,125000.0,<1H OCEAN +-117.38,33.67,9.0,13288.0,2728.0,7235.0,2350.0,3.375,131800.0,<1H OCEAN +-117.38,33.67,17.0,10145.0,2306.0,4776.0,1749.0,2.2423,132600.0,<1H OCEAN +-117.35,33.64,23.0,6859.0,1535.0,3405.0,1351.0,2.5395,109200.0,<1H OCEAN +-117.29,33.63,7.0,16010.0,2726.0,7139.0,2426.0,3.8056,162200.0,<1H OCEAN +-117.28,33.66,15.0,4573.0,928.0,2513.0,832.0,2.6949,163600.0,<1H OCEAN +-117.43,33.55,8.0,446.0,62.0,188.0,68.0,9.4356,465600.0,<1H OCEAN +-117.36,33.6,10.0,4097.0,813.0,2082.0,731.0,3.2258,159300.0,<1H OCEAN +-117.25,33.65,10.0,1652.0,316.0,725.0,233.0,3.5125,155600.0,<1H OCEAN +-117.19,33.64,12.0,1481.0,265.0,757.0,243.0,3.235,210700.0,<1H OCEAN +-117.21,33.61,7.0,7722.0,1324.0,2975.0,1161.0,3.6273,150900.0,<1H OCEAN +-117.2,33.58,2.0,30450.0,5033.0,9419.0,3197.0,4.5936,174300.0,<1H OCEAN +-117.16,33.61,3.0,2744.0,428.0,1223.0,366.0,4.7944,215300.0,<1H OCEAN +-117.12,33.61,2.0,2569.0,431.0,1232.0,388.0,4.3651,145600.0,<1H OCEAN +-117.16,33.57,2.0,20391.0,3245.0,7132.0,2716.0,3.9443,187300.0,<1H OCEAN +-117.16,33.54,4.0,4952.0,1000.0,2912.0,943.0,3.7538,147500.0,<1H OCEAN +-117.05,33.52,5.0,3471.0,530.0,1541.0,502.0,4.8083,347700.0,<1H OCEAN +-116.96,33.52,9.0,2802.0,471.0,1155.0,421.0,4.125,392100.0,INLAND +-117.1,33.56,6.0,1868.0,289.0,750.0,247.0,4.3833,307600.0,<1H OCEAN +-117.02,33.6,7.0,1972.0,352.0,964.0,317.0,3.244,337200.0,INLAND +-116.96,33.62,8.0,1003.0,167.0,388.0,140.0,4.2917,221900.0,INLAND +-117.22,33.48,5.0,1585.0,247.0,510.0,181.0,6.9136,493300.0,<1H OCEAN +-117.19,33.53,6.0,108.0,18.0,43.0,17.0,3.475,187500.0,<1H OCEAN +-117.18,33.51,13.0,270.0,42.0,120.0,42.0,6.993,500001.0,<1H OCEAN +-117.12,33.49,4.0,21988.0,4055.0,8824.0,3252.0,3.9963,191100.0,<1H OCEAN +-117.12,33.52,4.0,30401.0,4957.0,13251.0,4339.0,4.5841,212300.0,<1H OCEAN +-117.15,33.45,4.0,9089.0,1413.0,3886.0,1243.0,4.6904,174200.0,<1H OCEAN +-116.99,33.46,13.0,1614.0,410.0,846.0,270.0,2.83,43000.0,<1H OCEAN +-117.23,33.57,6.0,13724.0,2269.0,5860.0,1986.0,3.9617,183000.0,<1H OCEAN +-117.27,33.55,4.0,6112.0,890.0,2088.0,712.0,5.5351,429000.0,<1H OCEAN +-117.32,33.51,4.0,966.0,133.0,311.0,92.0,5.2066,500001.0,<1H OCEAN +-117.02,33.71,6.0,8278.0,1579.0,3062.0,1446.0,3.0043,134700.0,INLAND +-116.91,33.71,19.0,6807.0,1164.0,2703.0,1055.0,3.1591,189700.0,INLAND +-116.89,33.73,15.0,2094.0,316.0,937.0,277.0,5.3623,201300.0,INLAND +-116.95,33.68,11.0,1183.0,178.0,543.0,147.0,4.4792,173900.0,INLAND +-116.9,33.65,15.0,652.0,149.0,248.0,97.0,2.1071,93800.0,INLAND +-116.92,33.63,18.0,397.0,89.0,239.0,80.0,2.8125,143800.0,INLAND +-116.99,33.73,13.0,16148.0,3474.0,6159.0,3232.0,1.9961,97800.0,INLAND +-116.9,33.74,14.0,2281.0,426.0,894.0,430.0,2.3712,127900.0,INLAND +-116.95,33.75,19.0,2238.0,573.0,1190.0,507.0,2.0714,85800.0,INLAND +-116.95,33.75,23.0,4676.0,1096.0,2770.0,1057.0,1.7847,109500.0,INLAND +-116.93,33.75,14.0,6027.0,1148.0,3136.0,1036.0,2.964,121500.0,INLAND +-116.93,33.74,15.0,3757.0,666.0,1693.0,654.0,3.6806,112800.0,INLAND +-116.95,33.74,20.0,2233.0,431.0,1024.0,399.0,2.4554,89400.0,INLAND +-116.96,33.73,20.0,4735.0,973.0,2306.0,904.0,3.069,87000.0,INLAND +-116.95,33.73,21.0,4587.0,810.0,2233.0,765.0,3.2371,94500.0,INLAND +-116.95,33.74,18.0,1996.0,405.0,1270.0,400.0,2.7083,91200.0,INLAND +-116.94,33.74,19.0,2901.0,445.0,1414.0,475.0,4.6406,118900.0,INLAND +-116.94,33.73,17.0,5160.0,851.0,2344.0,781.0,3.7175,120000.0,INLAND +-116.93,33.73,13.0,3603.0,573.0,1644.0,515.0,4.0433,132300.0,INLAND +-116.96,33.75,35.0,3269.0,757.0,2328.0,705.0,2.5898,76300.0,INLAND +-116.97,33.74,31.0,2712.0,628.0,1519.0,629.0,1.942,86200.0,INLAND +-116.97,33.75,22.0,3740.0,965.0,2011.0,824.0,1.3039,77500.0,INLAND +-116.99,33.75,18.0,9601.0,2401.0,4002.0,2106.0,1.4366,77000.0,INLAND +-116.98,33.74,25.0,4952.0,1062.0,1589.0,1024.0,1.8446,85700.0,INLAND +-116.97,33.74,20.0,3674.0,792.0,1498.0,758.0,2.2161,76900.0,INLAND +-116.96,33.74,19.0,3649.0,755.0,1717.0,696.0,2.2115,87600.0,INLAND +-116.94,33.77,14.0,7240.0,1410.0,2708.0,1240.0,2.4145,137600.0,INLAND +-117.01,33.75,15.0,2873.0,903.0,1094.0,659.0,1.8015,105100.0,INLAND +-116.95,33.76,10.0,6890.0,1702.0,3141.0,1451.0,1.7079,95900.0,INLAND +-116.98,33.77,12.0,5829.0,1309.0,2711.0,1118.0,1.9707,107900.0,INLAND +-116.99,33.76,12.0,7626.0,1704.0,2823.0,1554.0,2.1722,69400.0,INLAND +-117.0,33.74,8.0,5330.0,1529.0,2143.0,1107.0,2.1103,94400.0,INLAND +-117.02,33.73,14.0,3700.0,750.0,1171.0,695.0,1.9476,112500.0,INLAND +-116.99,33.77,7.0,10352.0,2007.0,3559.0,1689.0,2.2925,113100.0,INLAND +-117.02,33.76,20.0,1317.0,203.0,453.0,158.0,2.8393,120700.0,INLAND +-116.98,33.83,15.0,2228.0,472.0,653.0,350.0,2.683,139300.0,INLAND +-117.02,33.81,10.0,6317.0,1335.0,2625.0,1094.0,2.3,108900.0,INLAND +-116.95,33.79,8.0,10997.0,2205.0,5060.0,1949.0,2.1979,95300.0,INLAND +-116.95,33.79,20.0,2399.0,546.0,1726.0,542.0,1.8845,77700.0,INLAND +-116.96,33.79,21.0,2990.0,691.0,2108.0,660.0,2.0135,83000.0,INLAND +-116.97,33.78,24.0,2680.0,606.0,1728.0,527.0,2.535,74800.0,INLAND +-116.95,33.78,24.0,3409.0,804.0,1939.0,739.0,1.7303,74000.0,INLAND +-116.89,33.79,12.0,701.0,130.0,434.0,110.0,2.0577,56700.0,INLAND +-116.87,33.76,5.0,4116.0,761.0,1714.0,717.0,2.5612,130800.0,INLAND +-116.88,33.74,20.0,3111.0,623.0,1000.0,508.0,1.5982,140000.0,INLAND +-116.89,33.75,23.0,2719.0,538.0,930.0,485.0,2.0154,81700.0,INLAND +-116.91,33.75,13.0,10886.0,2127.0,4266.0,1955.0,2.3169,123400.0,INLAND +-116.86,33.73,13.0,2604.0,443.0,978.0,417.0,2.933,170700.0,INLAND +-117.04,34.0,25.0,3750.0,781.0,1594.0,785.0,2.4167,104900.0,INLAND +-117.06,34.0,33.0,1575.0,326.0,879.0,282.0,2.5357,94400.0,INLAND +-117.04,34.0,21.0,4624.0,852.0,2174.0,812.0,3.5255,132100.0,INLAND +-116.99,33.99,22.0,4227.0,658.0,1849.0,619.0,4.7356,195900.0,INLAND +-117.01,33.97,18.0,4775.0,886.0,1868.0,836.0,2.3355,118800.0,INLAND +-116.95,33.97,14.0,5320.0,974.0,1947.0,843.0,3.1393,116300.0,INLAND +-116.97,33.96,12.0,5876.0,1222.0,2992.0,1151.0,2.4322,112100.0,INLAND +-117.11,33.98,25.0,1254.0,312.0,715.0,301.0,2.7344,149000.0,INLAND +-117.02,33.95,5.0,1822.0,367.0,798.0,313.0,2.8783,105200.0,INLAND +-117.03,33.89,6.0,78.0,11.0,27.0,10.0,3.125,187500.0,INLAND +-116.96,33.94,22.0,1999.0,497.0,1304.0,479.0,1.4063,81900.0,INLAND +-116.99,33.92,26.0,503.0,69.0,293.0,59.0,3.7083,147500.0,INLAND +-116.86,33.97,11.0,658.0,131.0,376.0,120.0,2.3977,58000.0,INLAND +-116.79,33.99,16.0,319.0,68.0,212.0,67.0,1.4688,90000.0,INLAND +-116.77,33.92,19.0,2307.0,525.0,1266.0,437.0,1.6875,63000.0,INLAND +-116.81,33.9,17.0,2009.0,469.0,820.0,381.0,1.3286,81800.0,INLAND +-116.89,33.86,2.0,6900.0,1238.0,1950.0,980.0,3.0417,146300.0,INLAND +-116.95,33.86,1.0,6.0,2.0,8.0,2.0,1.625,55000.0,INLAND +-116.86,33.84,18.0,521.0,118.0,174.0,74.0,2.7788,91100.0,INLAND +-116.98,33.94,27.0,3459.0,640.0,1760.0,654.0,3.4545,89800.0,INLAND +-116.98,33.93,40.0,2277.0,498.0,1391.0,453.0,1.9472,73200.0,INLAND +-116.97,33.94,29.0,3197.0,632.0,1722.0,603.0,3.0432,91200.0,INLAND +-116.97,33.93,29.0,2793.0,722.0,1583.0,626.0,1.424,73200.0,INLAND +-116.98,33.93,33.0,376.0,83.0,267.0,88.0,2.1581,68300.0,INLAND +-116.9,33.98,30.0,3915.0,672.0,1820.0,643.0,3.6339,98600.0,INLAND +-116.93,33.93,13.0,7804.0,1594.0,3297.0,1469.0,2.0549,95600.0,INLAND +-116.89,33.93,29.0,4549.0,916.0,2494.0,912.0,2.0976,72600.0,INLAND +-116.88,33.93,37.0,1495.0,429.0,865.0,342.0,1.2188,55000.0,INLAND +-116.9,33.93,34.0,3183.0,738.0,1820.0,647.0,2.2321,71800.0,INLAND +-116.91,34.0,18.0,553.0,100.0,215.0,82.0,5.5,193800.0,INLAND +-116.87,33.94,35.0,4448.0,906.0,2736.0,843.0,2.218,73400.0,INLAND +-116.87,33.93,32.0,3141.0,812.0,2589.0,721.0,1.4556,54600.0,INLAND +-116.87,33.91,37.0,1858.0,361.0,1632.0,310.0,2.7536,73100.0,INLAND +-116.89,33.92,10.0,2653.0,621.0,1967.0,598.0,2.6643,81000.0,INLAND +-116.75,33.83,16.0,5277.0,1070.0,657.0,276.0,3.3333,143400.0,INLAND +-116.8,33.8,35.0,324.0,63.0,158.0,39.0,3.4167,100000.0,INLAND +-116.71,33.75,25.0,10665.0,2161.0,1874.0,852.0,3.0625,150500.0,INLAND +-116.68,33.71,21.0,3460.0,711.0,658.0,255.0,3.5882,161100.0,INLAND +-116.74,33.62,11.0,2385.0,661.0,682.0,242.0,2.9141,214300.0,INLAND +-116.8,33.52,3.0,830.0,145.0,272.0,104.0,3.8281,163500.0,INLAND +-116.89,33.48,14.0,1016.0,219.0,443.0,169.0,2.8071,137500.0,INLAND +-116.87,33.57,12.0,1153.0,265.0,446.0,195.0,3.038,128100.0,INLAND +-116.72,33.56,13.0,3166.0,682.0,1250.0,475.0,2.355,122900.0,INLAND +-116.48,33.61,8.0,1294.0,272.0,457.0,199.0,2.9167,115300.0,INLAND +-116.57,33.64,10.0,489.0,82.0,183.0,74.0,6.2702,345500.0,INLAND +-116.76,33.46,6.0,1251.0,268.0,544.0,216.0,3.0694,173400.0,INLAND +-116.42,33.51,26.0,186.0,48.0,102.0,39.0,2.5625,103100.0,INLAND +-116.6,33.49,16.0,3730.0,827.0,1346.0,592.0,2.183,113500.0,INLAND +-116.69,33.5,13.0,1187.0,255.0,442.0,179.0,1.9107,155700.0,INLAND +-116.39,33.82,15.0,11115.0,2257.0,4122.0,1653.0,2.7219,74400.0,INLAND +-116.71,33.94,12.0,549.0,109.0,209.0,90.0,3.0208,66300.0,INLAND +-116.51,33.89,21.0,1284.0,306.0,537.0,233.0,1.95,61000.0,INLAND +-116.61,33.93,35.0,321.0,71.0,157.0,61.0,2.8056,68100.0,INLAND +-116.57,33.94,29.0,551.0,166.0,224.0,107.0,1.1917,50000.0,INLAND +-116.57,34.0,20.0,260.0,67.0,69.0,50.0,3.5208,76600.0,INLAND +-116.44,33.93,17.0,5293.0,1266.0,1201.0,599.0,1.6849,88400.0,INLAND +-116.36,33.88,11.0,12557.0,3098.0,2453.0,1232.0,1.7844,78500.0,INLAND +-116.52,33.97,13.0,3921.0,754.0,1902.0,665.0,3.3616,89600.0,INLAND +-116.51,33.96,16.0,4913.0,1395.0,2518.0,1132.0,1.4665,61100.0,INLAND +-116.53,33.95,18.0,2990.0,648.0,1280.0,532.0,2.625,68200.0,INLAND +-116.5,33.95,10.0,7249.0,1882.0,4274.0,1621.0,1.6983,66600.0,INLAND +-116.51,33.94,12.0,3369.0,780.0,1315.0,584.0,1.7388,66000.0,INLAND +-116.48,33.96,11.0,1381.0,300.0,644.0,248.0,2.3382,89400.0,INLAND +-116.47,33.94,18.0,2233.0,471.0,919.0,388.0,3.2578,85200.0,INLAND +-116.48,33.94,10.0,3254.0,913.0,923.0,486.0,1.8,81000.0,INLAND +-116.5,33.98,5.0,4332.0,868.0,1420.0,567.0,4.0417,146400.0,INLAND +-116.51,33.84,16.0,980.0,193.0,454.0,185.0,4.0729,100000.0,INLAND +-116.63,33.89,22.0,1540.0,364.0,610.0,268.0,1.5227,71000.0,INLAND +-116.52,33.84,17.0,4465.0,859.0,853.0,445.0,3.6875,130400.0,INLAND +-116.54,33.87,16.0,3648.0,1035.0,1687.0,581.0,1.9167,70400.0,INLAND +-116.57,33.84,18.0,7962.0,1652.0,2009.0,921.0,3.3897,230200.0,INLAND +-116.53,33.85,16.0,10077.0,2186.0,3048.0,1337.0,2.9647,110900.0,INLAND +-116.55,33.84,28.0,2992.0,562.0,676.0,346.0,5.7613,500001.0,INLAND +-116.53,33.84,28.0,8399.0,1839.0,3470.0,1340.0,2.5885,159000.0,INLAND +-116.52,33.85,13.0,7559.0,1444.0,3189.0,1105.0,3.4886,112500.0,INLAND +-116.5,33.82,16.0,343.0,85.0,29.0,14.0,2.1042,87500.0,INLAND +-116.49,33.82,27.0,3316.0,636.0,2362.0,532.0,2.9569,65900.0,INLAND +-116.52,33.82,21.0,10227.0,2315.0,3623.0,1734.0,2.5212,145200.0,INLAND +-116.54,33.82,12.0,9482.0,2501.0,2725.0,1300.0,1.5595,115600.0,INLAND +-116.56,33.83,36.0,1765.0,399.0,451.0,264.0,2.6083,321900.0,INLAND +-116.48,33.8,15.0,3004.0,615.0,437.0,210.0,3.6667,90000.0,INLAND +-116.5,33.81,26.0,5032.0,1229.0,3086.0,1183.0,2.5399,94800.0,INLAND +-116.52,33.81,12.0,12396.0,2552.0,2548.0,1265.0,3.4394,162200.0,INLAND +-116.54,33.81,31.0,6814.0,1714.0,2628.0,1341.0,2.1176,124100.0,INLAND +-116.54,33.81,24.0,6087.0,1217.0,1721.0,833.0,3.1493,199400.0,INLAND +-116.49,33.8,13.0,8789.0,1875.0,1274.0,688.0,3.7396,148900.0,INLAND +-116.54,33.8,22.0,6050.0,1387.0,1432.0,890.0,2.2216,183900.0,INLAND +-116.57,33.76,25.0,2616.0,547.0,581.0,343.0,3.1364,301600.0,INLAND +-116.5,33.69,20.0,4810.0,1074.0,1304.0,740.0,2.25,248100.0,INLAND +-116.54,33.79,18.0,9374.0,1780.0,1678.0,919.0,3.9737,235600.0,INLAND +-116.53,33.78,18.0,2547.0,463.0,411.0,214.0,2.5489,220500.0,INLAND +-116.53,33.88,5.0,4423.0,763.0,1906.0,667.0,4.6855,125200.0,INLAND +-116.48,33.84,5.0,5480.0,1371.0,1050.0,485.0,1.7204,137500.0,INLAND +-116.48,33.79,14.0,9425.0,2020.0,1711.0,1000.0,2.6298,145200.0,INLAND +-116.47,33.84,3.0,9169.0,1512.0,3838.0,1270.0,4.3111,142500.0,INLAND +-116.46,33.82,6.0,4863.0,920.0,3010.0,828.0,3.9508,104200.0,INLAND +-116.47,33.81,7.0,10105.0,2481.0,6274.0,2095.0,2.4497,90900.0,INLAND +-116.46,33.79,10.0,6960.0,1487.0,1130.0,661.0,2.1411,136400.0,INLAND +-116.43,33.81,8.0,6710.0,1343.0,2069.0,781.0,3.5223,115100.0,INLAND +-116.42,33.79,12.0,7095.0,1260.0,1179.0,570.0,4.9444,285000.0,INLAND +-116.43,33.78,17.0,4293.0,712.0,1091.0,464.0,6.1437,232100.0,INLAND +-116.45,33.78,16.0,5228.0,992.0,1177.0,639.0,3.0859,134600.0,INLAND +-116.42,33.76,14.0,16921.0,2837.0,2524.0,1262.0,7.6281,341700.0,INLAND +-116.4,33.78,8.0,3059.0,500.0,612.0,208.0,6.8729,259200.0,INLAND +-116.45,33.8,9.0,5534.0,1206.0,2283.0,1008.0,3.6161,99100.0,INLAND +-116.36,33.78,6.0,24121.0,4522.0,4176.0,2221.0,3.3799,239300.0,INLAND +-116.38,33.74,7.0,17579.0,3479.0,3581.0,1820.0,4.084,194500.0,INLAND +-116.33,33.75,5.0,19107.0,3923.0,2880.0,1376.0,4.036,158500.0,INLAND +-116.31,33.73,19.0,12467.0,2508.0,4086.0,1761.0,3.2846,131900.0,INLAND +-116.46,33.78,25.0,1137.0,414.0,604.0,240.0,1.3801,55000.0,INLAND +-116.46,33.78,33.0,2565.0,745.0,2301.0,638.0,2.5477,83000.0,INLAND +-116.47,33.77,26.0,4300.0,767.0,1557.0,669.0,4.4107,122500.0,INLAND +-116.47,33.78,27.0,1781.0,441.0,759.0,340.0,3.3162,113600.0,INLAND +-116.38,33.73,10.0,11836.0,2405.0,3811.0,1570.0,4.0079,134500.0,INLAND +-116.37,33.72,17.0,8626.0,1859.0,3497.0,1337.0,3.312,121300.0,INLAND +-116.39,33.72,19.0,7646.0,1618.0,2496.0,1075.0,3.5569,128000.0,INLAND +-116.38,33.71,17.0,12509.0,2460.0,2737.0,1423.0,4.5556,258100.0,INLAND +-116.39,33.69,10.0,11659.0,2007.0,2186.0,1083.0,6.9833,238800.0,INLAND +-116.37,33.72,19.0,6190.0,1355.0,2242.0,1043.0,3.0021,152300.0,INLAND +-116.44,33.77,18.0,4872.0,1110.0,955.0,656.0,2.2439,97500.0,INLAND +-116.43,33.75,24.0,2596.0,438.0,473.0,237.0,3.7727,500001.0,INLAND +-116.44,33.74,5.0,846.0,249.0,117.0,67.0,7.9885,403300.0,INLAND +-116.41,33.74,25.0,2475.0,476.0,910.0,387.0,3.3639,168800.0,INLAND +-116.41,33.74,17.0,4289.0,893.0,958.0,440.0,2.4659,177800.0,INLAND +-116.42,33.68,15.0,3895.0,782.0,900.0,529.0,2.2208,138300.0,INLAND +-116.37,33.69,7.0,8806.0,1542.0,858.0,448.0,7.8005,318100.0,INLAND +-116.33,33.72,11.0,12327.0,2000.0,2450.0,1139.0,7.4382,353100.0,INLAND +-116.29,33.67,12.0,5048.0,842.0,883.0,391.0,5.6918,231300.0,INLAND +-116.3,33.68,10.0,2387.0,481.0,863.0,304.0,2.8882,137500.0,INLAND +-116.31,33.67,15.0,2214.0,410.0,1152.0,350.0,2.9187,93400.0,INLAND +-116.31,33.67,11.0,4686.0,851.0,2466.0,731.0,3.3333,91800.0,INLAND +-116.31,33.66,7.0,4497.0,831.0,2248.0,713.0,3.6354,98000.0,INLAND +-116.31,33.65,8.0,3079.0,558.0,1572.0,474.0,4.5938,102600.0,INLAND +-116.26,33.72,10.0,9404.0,1827.0,3208.0,1283.0,3.1086,105800.0,INLAND +-116.25,33.69,5.0,1664.0,444.0,907.0,374.0,2.7667,92900.0,INLAND +-116.22,33.7,9.0,3861.0,849.0,825.0,401.0,3.2833,124700.0,INLAND +-116.24,33.76,9.0,1961.0,595.0,966.0,275.0,3.8125,96700.0,INLAND +-116.29,33.74,6.0,12991.0,2555.0,4571.0,1926.0,4.7195,199300.0,INLAND +-116.29,33.72,5.0,3584.0,760.0,1097.0,470.0,3.1771,167400.0,INLAND +-116.25,33.81,24.0,880.0,187.0,507.0,169.0,3.4583,67500.0,INLAND +-116.25,33.75,33.0,278.0,91.0,375.0,81.0,2.025,50000.0,INLAND +-116.24,33.72,25.0,5236.0,1039.0,2725.0,935.0,3.775,93400.0,INLAND +-116.24,33.71,10.0,9033.0,2224.0,5525.0,1845.0,2.7598,95000.0,INLAND +-116.24,33.73,14.0,2774.0,566.0,1530.0,505.0,3.0682,104100.0,INLAND +-116.22,33.74,26.0,4120.0,858.0,2918.0,815.0,3.3107,69400.0,INLAND +-116.21,33.75,22.0,894.0,,830.0,202.0,3.0673,68200.0,INLAND +-116.21,33.72,28.0,2488.0,714.0,2891.0,676.0,2.3169,68900.0,INLAND +-116.22,33.73,38.0,1695.0,352.0,1279.0,305.0,2.1217,68500.0,INLAND +-116.23,33.73,29.0,1133.0,221.0,918.0,239.0,2.8648,72100.0,INLAND +-116.21,33.71,19.0,3114.0,787.0,3157.0,772.0,1.7083,82200.0,INLAND +-116.22,33.72,28.0,826.0,258.0,979.0,245.0,1.7172,58800.0,INLAND +-116.2,33.7,26.0,2399.0,625.0,2654.0,535.0,2.2989,60600.0,INLAND +-116.23,33.72,32.0,4981.0,1326.0,3779.0,1186.0,1.7805,76900.0,INLAND +-116.23,33.71,17.0,4874.0,1349.0,5032.0,1243.0,2.444,90000.0,INLAND +-116.15,33.69,22.0,197.0,54.0,331.0,70.0,2.9286,112500.0,INLAND +-116.11,33.64,20.0,1273.0,354.0,1548.0,355.0,2.0871,84700.0,INLAND +-116.15,33.64,10.0,1711.0,499.0,1896.0,443.0,1.6557,65400.0,INLAND +-116.2,33.63,23.0,1152.0,273.0,1077.0,235.0,2.5,96300.0,INLAND +-116.21,33.66,19.0,1596.0,295.0,1201.0,282.0,3.8846,100900.0,INLAND +-116.21,33.68,34.0,584.0,176.0,625.0,166.0,1.5809,100000.0,INLAND +-116.25,33.68,16.0,926.0,189.0,238.0,118.0,3.0114,366700.0,INLAND +-116.26,33.65,3.0,7437.0,1222.0,574.0,302.0,10.2948,382400.0,INLAND +-116.17,33.53,13.0,1713.0,512.0,1978.0,442.0,2.1287,58600.0,INLAND +-116.12,33.53,17.0,2421.0,820.0,2971.0,685.0,1.654,100000.0,INLAND +-116.01,33.51,24.0,2985.0,958.0,4042.0,905.0,1.7344,66400.0,INLAND +-115.84,33.49,20.0,1660.0,379.0,637.0,250.0,2.0347,68900.0,INLAND +-116.16,33.68,12.0,1230.0,277.0,1334.0,260.0,2.2679,61400.0,INLAND +-116.17,33.67,18.0,3585.0,800.0,3873.0,788.0,2.5714,65900.0,INLAND +-116.17,33.66,22.0,639.0,203.0,664.0,153.0,1.9306,47500.0,INLAND +-116.19,33.67,16.0,1859.0,476.0,1994.0,477.0,1.7297,67500.0,INLAND +-116.18,33.67,25.0,2888.0,654.0,2940.0,660.0,2.2141,66700.0,INLAND +-116.18,33.69,17.0,89.0,19.0,79.0,21.0,2.375,155000.0,INLAND +-116.19,33.69,11.0,5692.0,1346.0,5682.0,1273.0,2.5383,74000.0,INLAND +-116.08,33.86,16.0,381.0,89.0,182.0,75.0,2.425,76100.0,INLAND +-115.22,33.54,18.0,1706.0,397.0,3424.0,283.0,1.625,53500.0,INLAND +-114.67,33.92,17.0,97.0,24.0,29.0,15.0,1.2656,27500.0,INLAND +-115.58,33.88,21.0,1161.0,282.0,724.0,186.0,3.1827,71700.0,INLAND +-114.98,33.82,15.0,644.0,129.0,137.0,52.0,3.2097,71300.0,INLAND +-114.49,33.97,17.0,2809.0,635.0,83.0,45.0,1.6154,87500.0,INLAND +-114.65,33.6,28.0,1678.0,322.0,666.0,256.0,2.9653,94900.0,INLAND +-114.68,33.49,20.0,1491.0,360.0,1135.0,303.0,1.6395,44400.0,INLAND +-114.56,33.69,17.0,720.0,174.0,333.0,117.0,1.6509,85700.0,INLAND +-114.57,33.64,14.0,1501.0,337.0,515.0,226.0,3.1917,73400.0,INLAND +-114.57,33.57,20.0,1454.0,326.0,624.0,262.0,1.925,65500.0,INLAND +-114.57,33.52,27.0,173.0,35.0,117.0,34.0,2.0833,45000.0,INLAND +-114.59,33.61,34.0,4789.0,1175.0,3134.0,1056.0,2.1782,58400.0,INLAND +-114.61,33.62,16.0,1187.0,261.0,1115.0,242.0,2.1759,61500.0,INLAND +-114.6,33.62,16.0,3741.0,801.0,2434.0,824.0,2.6797,86500.0,INLAND +-114.58,33.63,29.0,1387.0,236.0,671.0,239.0,3.3438,74000.0,INLAND +-114.62,33.62,26.0,18.0,3.0,5.0,3.0,0.536,275000.0,INLAND +-114.58,33.61,25.0,2907.0,680.0,1841.0,633.0,2.6768,82400.0,INLAND +-114.6,33.6,21.0,1988.0,483.0,1182.0,437.0,1.625,62000.0,INLAND +-121.43,38.58,35.0,5298.0,954.0,1933.0,918.0,3.9167,155700.0,INLAND +-121.43,38.57,38.0,2507.0,446.0,888.0,448.0,4.0972,163700.0,INLAND +-121.42,38.57,38.0,1878.0,338.0,710.0,342.0,3.7731,161400.0,INLAND +-121.44,38.58,43.0,1806.0,339.0,764.0,341.0,3.9271,147100.0,INLAND +-121.43,38.57,46.0,2443.0,476.0,939.0,457.0,3.5893,142000.0,INLAND +-121.44,38.57,52.0,3080.0,545.0,975.0,495.0,3.776,164500.0,INLAND +-121.44,38.58,42.0,2334.0,435.0,892.0,446.0,3.0208,148800.0,INLAND +-121.45,38.58,44.0,2314.0,415.0,796.0,388.0,3.4914,153900.0,INLAND +-121.45,38.57,48.0,1962.0,356.0,704.0,362.0,3.5313,147900.0,INLAND +-121.46,38.58,52.0,4408.0,807.0,1604.0,777.0,3.8914,181600.0,INLAND +-121.46,38.58,40.0,1394.0,397.0,689.0,353.0,1.7765,109800.0,INLAND +-121.47,38.58,44.0,2092.0,555.0,878.0,528.0,1.5922,115100.0,INLAND +-121.47,38.58,43.0,3807.0,952.0,1484.0,850.0,2.3266,137500.0,INLAND +-121.47,38.58,52.0,2035.0,483.0,904.0,459.0,2.6976,109300.0,INLAND +-121.48,38.58,52.0,576.0,146.0,273.0,127.0,2.01,94300.0,INLAND +-121.48,38.58,48.0,2434.0,744.0,1281.0,662.0,1.6277,140600.0,INLAND +-121.49,38.58,52.0,2151.0,664.0,1146.0,603.0,1.4034,90300.0,INLAND +-121.48,38.59,52.0,1186.0,341.0,1038.0,320.0,1.6116,70500.0,INLAND +-121.49,38.59,20.0,463.0,180.0,486.0,190.0,1.0313,85000.0,INLAND +-121.49,38.58,52.0,1000.0,324.0,456.0,250.0,1.4375,168800.0,INLAND +-121.5,38.58,5.0,761.0,306.0,2031.0,295.0,0.7526,162500.0,INLAND +-121.5,38.58,20.0,4018.0,1220.0,1570.0,1122.0,2.5821,125000.0,INLAND +-121.5,38.57,9.0,745.0,175.0,297.0,160.0,3.358,77500.0,INLAND +-121.49,38.58,52.0,569.0,405.0,509.0,367.0,0.9196,137500.0,INLAND +-121.48,38.58,42.0,1823.0,566.0,761.0,503.0,1.245,137500.0,INLAND +-121.48,38.57,47.0,2438.0,804.0,1148.0,747.0,1.4301,141700.0,INLAND +-121.48,38.57,52.0,567.0,193.0,272.0,187.0,1.625,187500.0,INLAND +-121.49,38.57,49.0,1334.0,492.0,634.0,421.0,1.7568,93800.0,INLAND +-121.49,38.57,38.0,2410.0,967.0,1091.0,829.0,1.2209,87900.0,INLAND +-121.47,38.57,39.0,1360.0,368.0,589.0,338.0,2.1691,150000.0,INLAND +-121.47,38.57,48.0,3136.0,926.0,1443.0,877.0,1.9034,123900.0,INLAND +-121.48,38.57,38.0,2809.0,805.0,1243.0,785.0,1.8512,114100.0,INLAND +-121.47,38.57,52.0,438.0,103.0,176.0,99.0,3.0217,200000.0,INLAND +-121.47,38.57,50.0,3233.0,968.0,1223.0,837.0,1.2041,168100.0,INLAND +-121.48,38.58,52.0,2501.0,757.0,1081.0,708.0,1.5872,157500.0,INLAND +-121.45,38.57,52.0,2006.0,412.0,825.0,384.0,3.2963,236100.0,INLAND +-121.45,38.56,52.0,3170.0,476.0,1027.0,457.0,4.63,233800.0,INLAND +-121.46,38.56,52.0,1750.0,372.0,764.0,369.0,2.9191,111800.0,INLAND +-121.46,38.57,52.0,810.0,172.0,326.0,151.0,3.1583,140000.0,INLAND +-121.46,38.57,52.0,893.0,159.0,367.0,160.0,3.2386,213200.0,INLAND +-121.46,38.57,52.0,1917.0,367.0,722.0,358.0,3.1484,158900.0,INLAND +-121.46,38.57,52.0,1625.0,419.0,614.0,383.0,2.0549,156700.0,INLAND +-121.43,38.56,41.0,1105.0,227.0,443.0,210.0,3.1827,131700.0,INLAND +-121.44,38.56,45.0,2423.0,466.0,873.0,438.0,3.7167,131900.0,INLAND +-121.44,38.56,52.0,906.0,165.0,257.0,166.0,2.8542,139400.0,INLAND +-121.43,38.56,50.0,1533.0,288.0,532.0,257.0,2.5417,125900.0,INLAND +-121.43,38.56,46.0,1316.0,244.0,452.0,245.0,3.0938,137800.0,INLAND +-121.45,38.57,52.0,3994.0,635.0,1295.0,625.0,5.1169,232500.0,INLAND +-121.45,38.56,52.0,3420.0,555.0,1301.0,530.0,4.0417,173800.0,INLAND +-121.42,38.55,35.0,182.0,39.0,115.0,43.0,2.6417,98900.0,INLAND +-121.43,38.55,44.0,3514.0,714.0,1509.0,656.0,2.7333,100100.0,INLAND +-121.45,38.55,19.0,3374.0,808.0,1412.0,753.0,1.4889,77600.0,INLAND +-121.46,38.56,52.0,1878.0,393.0,722.0,381.0,3.3348,122800.0,INLAND +-121.45,38.56,51.0,1250.0,235.0,452.0,232.0,2.625,121200.0,INLAND +-121.44,38.55,46.0,1698.0,383.0,726.0,386.0,2.9821,97000.0,INLAND +-121.47,38.56,52.0,889.0,162.0,273.0,145.0,3.125,85600.0,INLAND +-121.46,38.56,52.0,907.0,180.0,479.0,177.0,2.2125,104000.0,INLAND +-121.46,38.55,52.0,3126.0,648.0,1789.0,558.0,1.7616,84100.0,INLAND +-121.46,38.55,52.0,2094.0,463.0,1364.0,407.0,1.2235,68500.0,INLAND +-121.47,38.55,48.0,1091.0,403.0,926.0,336.0,1.1458,65400.0,INLAND +-121.47,38.56,52.0,1532.0,408.0,782.0,369.0,1.8911,85900.0,INLAND +-121.47,38.56,51.0,2083.0,559.0,874.0,524.0,2.0221,95800.0,INLAND +-121.47,38.56,44.0,1986.0,573.0,1044.0,490.0,1.7328,88100.0,INLAND +-121.48,38.56,44.0,1151.0,263.0,518.0,258.0,2.0089,113600.0,INLAND +-121.48,38.56,46.0,1476.0,344.0,688.0,353.0,2.7316,134700.0,INLAND +-121.48,38.57,38.0,1145.0,324.0,596.0,288.0,1.78,114300.0,INLAND +-121.49,38.56,42.0,900.0,239.0,506.0,231.0,1.2813,87500.0,INLAND +-121.49,38.56,35.0,1521.0,457.0,987.0,455.0,1.9013,86900.0,INLAND +-121.49,38.57,51.0,1492.0,385.0,736.0,365.0,1.7155,108800.0,INLAND +-121.5,38.57,41.0,1124.0,344.0,807.0,316.0,1.4712,94600.0,INLAND +-121.5,38.57,44.0,1375.0,351.0,766.0,321.0,2.1719,87500.0,INLAND +-121.51,38.57,36.0,613.0,166.0,425.0,147.0,2.2031,93800.0,INLAND +-121.5,38.57,45.0,858.0,254.0,510.0,200.0,1.0114,80000.0,INLAND +-121.5,38.56,46.0,2646.0,645.0,1684.0,616.0,1.128,123100.0,INLAND +-121.51,38.56,43.0,1048.0,312.0,1320.0,294.0,1.0649,137500.0,INLAND +-121.51,38.55,45.0,3032.0,631.0,1341.0,597.0,2.8417,137900.0,INLAND +-121.51,38.55,46.0,1485.0,278.0,531.0,291.0,2.7885,137200.0,INLAND +-121.49,38.56,52.0,1844.0,392.0,667.0,353.0,3.0033,103500.0,INLAND +-121.49,38.55,52.0,2515.0,460.0,836.0,442.0,3.3844,151100.0,INLAND +-121.5,38.55,52.0,2784.0,455.0,957.0,448.0,5.6402,209800.0,INLAND +-121.49,38.56,52.0,1777.0,368.0,624.0,350.0,3.6729,137800.0,INLAND +-121.49,38.54,47.0,2313.0,536.0,779.0,442.0,2.5639,123000.0,INLAND +-121.5,38.54,52.0,1145.0,133.0,334.0,138.0,8.338,405800.0,INLAND +-121.49,38.55,51.0,4280.0,632.0,1486.0,621.0,5.0359,224100.0,INLAND +-121.5,38.55,49.0,4094.0,634.0,1363.0,659.0,5.2362,236800.0,INLAND +-121.5,38.54,44.0,1167.0,201.0,452.0,209.0,3.7344,179800.0,INLAND +-121.48,38.55,52.0,2508.0,360.0,832.0,345.0,7.1035,228700.0,INLAND +-121.48,38.55,52.0,2037.0,358.0,811.0,375.0,4.3929,162500.0,INLAND +-121.48,38.56,50.0,1587.0,448.0,877.0,380.0,2.0833,94300.0,INLAND +-121.48,38.55,52.0,1684.0,309.0,675.0,296.0,4.1467,175000.0,INLAND +-121.48,38.55,52.0,2216.0,333.0,714.0,327.0,4.8603,191900.0,INLAND +-121.48,38.56,52.0,814.0,216.0,327.0,181.0,2.8542,125000.0,INLAND +-121.47,38.55,48.0,968.0,310.0,706.0,274.0,0.9948,65400.0,INLAND +-121.47,38.55,29.0,1303.0,308.0,861.0,263.0,1.0208,55800.0,INLAND +-121.47,38.54,47.0,2085.0,464.0,1346.0,402.0,1.2679,56700.0,INLAND +-121.47,38.55,24.0,979.0,287.0,546.0,291.0,1.186,67000.0,INLAND +-121.47,38.55,52.0,1384.0,295.0,561.0,244.0,2.0242,94600.0,INLAND +-121.45,38.54,47.0,1159.0,250.0,810.0,244.0,2.7787,56000.0,INLAND +-121.45,38.54,41.0,1278.0,308.0,839.0,280.0,1.4702,58300.0,INLAND +-121.46,38.54,48.0,1001.0,205.0,605.0,175.0,1.8333,58200.0,INLAND +-121.46,38.55,40.0,2077.0,435.0,1454.0,385.0,2.0074,57000.0,INLAND +-121.42,38.54,29.0,1407.0,265.0,556.0,235.0,3.0521,108000.0,INLAND +-121.43,38.54,43.0,2084.0,417.0,912.0,410.0,2.9769,92700.0,INLAND +-121.43,38.54,44.0,1879.0,359.0,791.0,345.0,3.15,101500.0,INLAND +-121.44,38.54,44.0,2570.0,509.0,1145.0,503.0,2.5694,92400.0,INLAND +-121.45,38.54,48.0,3421.0,734.0,1441.0,727.0,1.9485,86600.0,INLAND +-121.42,38.54,18.0,2525.0,501.0,1726.0,468.0,2.398,87600.0,INLAND +-121.42,38.54,29.0,2358.0,493.0,1071.0,470.0,2.925,94300.0,INLAND +-121.43,38.54,42.0,3321.0,688.0,1346.0,658.0,2.4618,101300.0,INLAND +-121.44,38.54,39.0,2855.0,,1217.0,562.0,3.2404,93600.0,INLAND +-121.44,38.54,47.0,2518.0,501.0,1308.0,471.0,2.5389,75700.0,INLAND +-121.41,38.53,35.0,2061.0,371.0,1110.0,342.0,3.1944,79000.0,INLAND +-121.41,38.53,37.0,1058.0,224.0,588.0,231.0,2.9737,72100.0,INLAND +-121.42,38.53,37.0,1958.0,367.0,1171.0,366.0,2.8298,71200.0,INLAND +-121.42,38.53,36.0,1581.0,288.0,832.0,291.0,3.4083,71800.0,INLAND +-121.43,38.53,36.0,1488.0,294.0,846.0,279.0,3.1208,82700.0,INLAND +-121.43,38.53,36.0,2430.0,426.0,1199.0,437.0,3.1667,81900.0,INLAND +-121.44,38.53,37.0,1951.0,432.0,1089.0,411.0,2.3272,80600.0,INLAND +-121.41,38.52,25.0,3087.0,720.0,2529.0,708.0,1.8689,66800.0,INLAND +-121.42,38.51,21.0,3249.0,666.0,2611.0,663.0,1.9423,87800.0,INLAND +-121.42,38.52,32.0,2828.0,556.0,1655.0,485.0,2.5574,72600.0,INLAND +-121.43,38.52,43.0,2089.0,399.0,955.0,385.0,2.5898,72100.0,INLAND +-121.43,38.52,30.0,3657.0,945.0,2925.0,899.0,1.3927,78300.0,INLAND +-121.44,38.52,38.0,2080.0,388.0,995.0,380.0,2.7697,76600.0,INLAND +-121.5,38.53,39.0,3184.0,593.0,1188.0,572.0,4.6923,192000.0,INLAND +-121.5,38.53,37.0,3642.0,684.0,1508.0,657.0,3.5231,114300.0,INLAND +-121.51,38.53,34.0,1613.0,265.0,631.0,266.0,4.25,191900.0,INLAND +-121.51,38.53,36.0,2603.0,408.0,966.0,419.0,5.3135,216600.0,INLAND +-121.5,38.52,37.0,2008.0,466.0,1261.0,427.0,2.2574,59100.0,INLAND +-121.51,38.51,33.0,2918.0,439.0,1085.0,427.0,5.5208,171300.0,INLAND +-121.51,38.51,31.0,1595.0,217.0,542.0,236.0,6.6112,251600.0,INLAND +-121.51,38.52,30.0,3236.0,588.0,1167.0,569.0,4.0972,181400.0,INLAND +-121.48,38.53,38.0,1451.0,315.0,786.0,340.0,2.3487,101600.0,INLAND +-121.49,38.53,40.0,2966.0,536.0,1225.0,505.0,3.125,130600.0,INLAND +-121.49,38.54,37.0,1655.0,393.0,841.0,355.0,1.6932,78400.0,INLAND +-121.48,38.53,43.0,1378.0,280.0,708.0,280.0,2.3542,103900.0,INLAND +-121.48,38.52,36.0,1824.0,357.0,906.0,356.0,2.9911,96400.0,INLAND +-121.49,38.52,37.0,1902.0,413.0,955.0,384.0,3.1014,96800.0,INLAND +-121.49,38.53,42.0,1468.0,281.0,571.0,271.0,3.3906,124200.0,INLAND +-121.48,38.54,41.0,3364.0,685.0,1841.0,626.0,2.1975,73500.0,INLAND +-121.48,38.53,37.0,1704.0,361.0,902.0,356.0,1.9837,62300.0,INLAND +-121.47,38.54,36.0,2099.0,510.0,1845.0,483.0,1.4138,52500.0,INLAND +-121.47,38.53,43.0,3215.0,725.0,2400.0,625.0,1.4625,54400.0,INLAND +-121.47,38.53,44.0,543.0,146.0,506.0,125.0,1.3646,65400.0,INLAND +-121.49,38.51,18.0,700.0,169.0,260.0,128.0,2.9219,152900.0,INLAND +-121.49,38.5,32.0,2364.0,439.0,1331.0,449.0,3.319,84500.0,INLAND +-121.49,38.5,30.0,1715.0,271.0,842.0,263.0,3.0313,87900.0,INLAND +-121.5,38.5,29.0,2049.0,330.0,787.0,309.0,3.7414,98500.0,INLAND +-121.49,38.51,30.0,3166.0,607.0,1857.0,579.0,3.1768,79500.0,INLAND +-121.51,38.54,34.0,2815.0,479.0,1075.0,471.0,3.9792,164800.0,INLAND +-121.52,38.53,31.0,3089.0,585.0,1366.0,561.0,4.2885,160300.0,INLAND +-121.52,38.53,30.0,3377.0,623.0,1289.0,594.0,3.5737,171200.0,INLAND +-121.52,38.51,23.0,6876.0,1456.0,2942.0,1386.0,3.0963,156900.0,INLAND +-121.51,38.49,21.0,4426.0,790.0,1856.0,761.0,4.1,158300.0,INLAND +-121.51,38.5,25.0,4719.0,745.0,1857.0,739.0,5.0371,180200.0,INLAND +-121.55,38.51,14.0,5490.0,851.0,2415.0,837.0,6.5253,216800.0,INLAND +-121.55,38.5,9.0,4868.0,738.0,2036.0,750.0,5.7621,204600.0,INLAND +-121.54,38.5,15.0,6093.0,1051.0,2415.0,997.0,4.2075,183600.0,INLAND +-121.54,38.51,17.0,8482.0,1590.0,3362.0,1513.0,4.2216,217900.0,INLAND +-121.53,38.5,17.0,3087.0,477.0,1365.0,495.0,6.4667,216800.0,INLAND +-121.53,38.51,20.0,6132.0,1324.0,2595.0,1174.0,3.1607,178900.0,INLAND +-121.52,38.5,19.0,4900.0,805.0,2519.0,855.0,4.8497,184400.0,INLAND +-121.53,38.48,5.0,27870.0,5027.0,11935.0,4855.0,4.8811,212200.0,INLAND +-121.52,38.49,5.0,3344.0,800.0,1341.0,670.0,3.6196,152800.0,INLAND +-121.54,38.49,6.0,9104.0,1535.0,3759.0,1481.0,5.1442,174500.0,INLAND +-121.48,38.52,34.0,2561.0,497.0,1583.0,530.0,3.1583,95800.0,INLAND +-121.48,38.51,24.0,979.0,201.0,723.0,205.0,2.5926,72300.0,INLAND +-121.48,38.5,23.0,2679.0,792.0,1740.0,659.0,1.3679,70300.0,INLAND +-121.49,38.49,26.0,1557.0,301.0,986.0,300.0,2.6613,77700.0,INLAND +-121.5,38.49,29.0,3606.0,690.0,2317.0,696.0,2.7368,78200.0,INLAND +-121.5,38.49,32.0,4013.0,725.0,2032.0,675.0,3.3689,83400.0,INLAND +-121.48,38.49,26.0,3165.0,806.0,2447.0,752.0,1.5908,78600.0,INLAND +-121.49,38.49,26.0,4629.0,832.0,2902.0,816.0,2.735,74600.0,INLAND +-121.47,38.49,17.0,3595.0,790.0,2760.0,770.0,2.3233,78800.0,INLAND +-121.47,38.48,25.0,2969.0,551.0,1745.0,487.0,2.6382,76200.0,INLAND +-121.49,38.47,26.0,6121.0,1185.0,4224.0,1105.0,2.3496,68000.0,INLAND +-121.47,38.48,24.0,2359.0,462.0,2048.0,476.0,3.2702,67300.0,INLAND +-121.45,38.54,38.0,1865.0,384.0,1052.0,354.0,1.7891,60500.0,INLAND +-121.45,38.53,38.0,1746.0,388.0,1142.0,315.0,1.7714,69900.0,INLAND +-121.45,38.53,34.0,1893.0,415.0,884.0,395.0,2.1679,75400.0,INLAND +-121.45,38.53,34.0,1717.0,354.0,848.0,306.0,2.4741,87000.0,INLAND +-121.46,38.54,39.0,1453.0,324.0,843.0,281.0,1.7692,63900.0,INLAND +-121.46,38.53,37.0,2745.0,588.0,1607.0,556.0,1.8007,65400.0,INLAND +-121.46,38.54,36.0,1825.0,411.0,1226.0,391.0,1.5292,55700.0,INLAND +-121.47,38.52,26.0,2177.0,638.0,1971.0,560.0,1.2575,66800.0,INLAND +-121.46,38.51,18.0,2123.0,606.0,1576.0,599.0,1.5735,110000.0,INLAND +-121.45,38.5,25.0,3033.0,665.0,1559.0,627.0,2.7101,99500.0,INLAND +-121.47,38.5,17.0,1895.0,424.0,620.0,417.0,1.7188,137500.0,INLAND +-121.47,38.51,52.0,20.0,4.0,74.0,9.0,3.625,80000.0,INLAND +-121.47,38.52,42.0,2316.0,515.0,1597.0,522.0,1.8205,60400.0,INLAND +-121.44,38.52,36.0,3446.0,950.0,2460.0,847.0,1.6521,69700.0,INLAND +-121.45,38.51,29.0,4221.0,901.0,2294.0,850.0,2.2245,75900.0,INLAND +-121.45,38.52,37.0,1705.0,325.0,827.0,326.0,2.6288,71200.0,INLAND +-121.45,38.52,37.0,1477.0,321.0,888.0,312.0,2.5592,70300.0,INLAND +-121.46,38.52,29.0,3873.0,797.0,2237.0,706.0,2.1736,72100.0,INLAND +-121.46,38.51,32.0,2437.0,592.0,1596.0,557.0,1.68,84100.0,INLAND +-121.46,38.52,34.0,1279.0,285.0,963.0,268.0,2.71,65600.0,INLAND +-121.44,38.51,27.0,7212.0,1606.0,4828.0,1549.0,2.214,82400.0,INLAND +-121.44,38.5,27.0,2527.0,439.0,1089.0,415.0,4.088,96800.0,INLAND +-121.44,38.5,20.0,2033.0,586.0,1281.0,521.0,1.4007,97500.0,INLAND +-121.42,38.51,15.0,7901.0,1422.0,4769.0,1418.0,2.8139,90400.0,INLAND +-121.42,38.5,24.0,7740.0,1539.0,4333.0,1397.0,3.025,87900.0,INLAND +-121.46,38.49,15.0,10211.0,1995.0,5656.0,1752.0,2.575,107900.0,INLAND +-121.45,38.49,34.0,3573.0,662.0,1540.0,620.0,3.5323,109800.0,INLAND +-121.44,38.49,31.0,4297.0,788.0,2083.0,771.0,3.3878,109300.0,INLAND +-121.45,38.48,28.0,2780.0,510.0,1638.0,533.0,2.9571,103100.0,INLAND +-121.43,38.48,12.0,4602.0,930.0,2299.0,860.0,3.0625,90500.0,INLAND +-121.44,38.48,12.0,4929.0,1010.0,2621.0,870.0,2.7262,109800.0,INLAND +-121.45,38.48,24.0,1766.0,340.0,1028.0,372.0,3.5402,98700.0,INLAND +-121.46,38.48,8.0,3593.0,659.0,1710.0,530.0,3.5227,93100.0,INLAND +-121.42,38.49,17.0,13180.0,2444.0,7235.0,2335.0,3.363,103000.0,INLAND +-121.42,38.48,13.0,7880.0,1992.0,4749.0,1882.0,1.9657,116000.0,INLAND +-121.4,38.49,12.0,7290.0,1283.0,3960.0,1248.0,3.5968,106300.0,INLAND +-121.38,38.49,11.0,8537.0,1643.0,4224.0,1648.0,2.9647,108900.0,INLAND +-121.39,38.51,19.0,1808.0,375.0,758.0,320.0,2.0062,92000.0,INLAND +-121.42,38.56,21.0,2066.0,748.0,2548.0,734.0,1.3571,55000.0,INLAND +-121.39,38.56,19.0,8507.0,1470.0,3517.0,1453.0,4.3644,137400.0,INLAND +-121.38,38.55,23.0,2790.0,430.0,1407.0,460.0,4.3288,133700.0,INLAND +-121.38,38.55,26.0,1532.0,264.0,781.0,285.0,4.6944,130900.0,INLAND +-121.39,38.55,25.0,2171.0,431.0,1053.0,422.0,3.5278,126200.0,INLAND +-121.39,38.55,18.0,1734.0,467.0,783.0,447.0,1.9044,154300.0,INLAND +-121.4,38.55,26.0,2697.0,398.0,1088.0,389.0,5.0,142500.0,INLAND +-121.41,38.55,14.0,2534.0,705.0,1495.0,583.0,1.9167,156300.0,INLAND +-121.4,38.55,19.0,2497.0,494.0,748.0,442.0,2.925,142400.0,INLAND +-121.4,38.53,38.0,152.0,30.0,65.0,35.0,0.9274,67500.0,INLAND +-121.48,38.59,43.0,987.0,240.0,1253.0,237.0,0.9204,82100.0,INLAND +-121.5,38.59,43.0,88.0,21.0,119.0,19.0,1.725,67500.0,INLAND +-121.44,38.6,16.0,2987.0,864.0,1240.0,755.0,2.8231,137500.0,INLAND +-121.41,38.56,17.0,7228.0,1369.0,2455.0,1365.0,5.1385,179500.0,INLAND +-121.37,38.57,22.0,4899.0,847.0,1701.0,826.0,5.2449,387000.0,INLAND +-121.39,38.57,33.0,2648.0,357.0,863.0,359.0,8.4016,338700.0,INLAND +-121.4,38.57,25.0,2022.0,295.0,639.0,278.0,5.8416,297600.0,INLAND +-121.41,38.57,16.0,4429.0,1124.0,1538.0,960.0,3.2443,190700.0,INLAND +-121.4,38.56,22.0,2623.0,357.0,838.0,368.0,7.143,327800.0,INLAND +-121.42,38.6,23.0,3713.0,1078.0,2194.0,1018.0,1.7451,89600.0,INLAND +-121.42,38.6,35.0,1166.0,193.0,574.0,190.0,2.2452,102800.0,INLAND +-121.42,38.6,36.0,1327.0,209.0,613.0,230.0,3.8672,111400.0,INLAND +-121.43,38.61,33.0,2289.0,576.0,1100.0,503.0,2.1694,95700.0,INLAND +-121.44,38.61,34.0,172.0,38.0,149.0,55.0,2.6442,55000.0,INLAND +-121.41,38.61,36.0,3099.0,605.0,1322.0,623.0,3.4784,105500.0,INLAND +-121.41,38.6,16.0,5407.0,1467.0,2523.0,1265.0,2.0471,104200.0,INLAND +-121.41,38.59,18.0,5527.0,1446.0,2883.0,1305.0,2.6485,114500.0,INLAND +-121.41,38.59,17.0,12355.0,3630.0,5692.0,3073.0,2.5245,99100.0,INLAND +-121.41,38.58,18.0,6955.0,1882.0,2803.0,1740.0,3.089,141400.0,INLAND +-121.39,38.61,36.0,2396.0,536.0,1225.0,515.0,2.9559,136600.0,INLAND +-121.39,38.6,22.0,5773.0,1320.0,2607.0,1250.0,2.5238,118800.0,INLAND +-121.4,38.61,37.0,1994.0,347.0,782.0,355.0,4.1488,136400.0,INLAND +-121.38,38.59,36.0,1239.0,237.0,764.0,222.0,3.0156,103000.0,INLAND +-121.39,38.59,33.0,2091.0,468.0,1053.0,470.0,2.2264,108100.0,INLAND +-121.39,38.59,34.0,1151.0,234.0,563.0,251.0,2.8,113600.0,INLAND +-121.4,38.59,25.0,2228.0,534.0,1130.0,481.0,2.5363,124600.0,INLAND +-121.4,38.59,18.0,2614.0,624.0,1181.0,616.0,2.0432,156800.0,INLAND +-121.38,38.59,36.0,2253.0,434.0,1018.0,426.0,3.2596,98700.0,INLAND +-121.39,38.58,36.0,2019.0,369.0,878.0,356.0,2.8462,93400.0,INLAND +-121.39,38.58,41.0,2577.0,365.0,913.0,339.0,6.3406,448300.0,INLAND +-121.37,38.6,35.0,3137.0,544.0,1312.0,549.0,3.788,136800.0,INLAND +-121.37,38.6,36.0,1119.0,144.0,414.0,150.0,5.8336,283300.0,INLAND +-121.38,38.6,36.0,1249.0,159.0,362.0,143.0,6.8469,446400.0,INLAND +-121.38,38.61,34.0,2888.0,496.0,1168.0,479.0,3.6053,148600.0,INLAND +-121.37,38.59,36.0,2523.0,401.0,927.0,398.0,3.5179,207800.0,INLAND +-121.37,38.58,37.0,2839.0,390.0,1006.0,400.0,7.3343,280400.0,INLAND +-121.38,38.58,38.0,2968.0,475.0,1176.0,454.0,5.0497,191700.0,INLAND +-121.38,38.59,38.0,1839.0,287.0,685.0,276.0,4.5313,189400.0,INLAND +-121.37,38.59,36.0,2388.0,369.0,838.0,356.0,4.775,194100.0,INLAND +-121.35,38.61,27.0,3900.0,776.0,1549.0,761.0,2.7788,115700.0,INLAND +-121.35,38.6,27.0,4314.0,611.0,1662.0,575.0,5.0997,170100.0,INLAND +-121.36,38.6,35.0,1930.0,328.0,805.0,338.0,4.4643,133000.0,INLAND +-121.36,38.6,36.0,1275.0,227.0,530.0,245.0,3.875,133600.0,INLAND +-121.36,38.61,35.0,2355.0,365.0,993.0,354.0,5.0492,144100.0,INLAND +-121.35,38.59,29.0,1285.0,193.0,460.0,206.0,5.3243,265700.0,INLAND +-121.36,38.59,32.0,3303.0,480.0,1185.0,436.0,5.0508,225700.0,INLAND +-121.36,38.58,25.0,3196.0,406.0,978.0,419.0,8.4699,344000.0,INLAND +-121.35,38.58,20.0,2992.0,378.0,1105.0,368.0,8.6572,320200.0,INLAND +-121.34,38.58,18.0,1631.0,228.0,599.0,228.0,7.8031,267200.0,INLAND +-121.34,38.59,23.0,2912.0,421.0,1132.0,410.0,5.9174,225900.0,INLAND +-121.34,38.59,22.0,3273.0,480.0,1151.0,463.0,8.05,380000.0,INLAND +-121.36,38.64,24.0,6540.0,1008.0,2667.0,1031.0,5.5632,175200.0,INLAND +-121.36,38.63,28.0,6119.0,985.0,2631.0,934.0,4.875,146400.0,INLAND +-121.35,38.62,28.0,4175.0,796.0,2032.0,830.0,3.4299,164000.0,INLAND +-121.35,38.61,25.0,4916.0,1243.0,2140.0,1136.0,2.5511,134100.0,INLAND +-121.36,38.61,37.0,2191.0,394.0,951.0,362.0,3.8882,159500.0,INLAND +-121.36,38.62,34.0,2447.0,503.0,1077.0,456.0,3.058,133000.0,INLAND +-121.36,38.63,30.0,2619.0,370.0,940.0,359.0,4.7283,164500.0,INLAND +-121.37,38.64,36.0,322.0,48.0,133.0,59.0,4.6111,139300.0,INLAND +-121.38,38.64,19.0,4563.0,1069.0,2256.0,926.0,2.1472,143400.0,INLAND +-121.37,38.63,32.0,3658.0,797.0,1452.0,715.0,2.6623,120700.0,INLAND +-121.37,38.63,37.0,494.0,86.0,253.0,99.0,4.8194,141100.0,INLAND +-121.37,38.63,30.0,5996.0,1018.0,2532.0,1049.0,4.6127,151800.0,INLAND +-121.37,38.62,27.0,1743.0,380.0,697.0,368.0,1.6678,166100.0,INLAND +-121.38,38.62,34.0,2352.0,610.0,1127.0,592.0,2.2,116500.0,INLAND +-121.38,38.62,41.0,774.0,144.0,356.0,150.0,3.5625,115300.0,INLAND +-121.37,38.62,43.0,1077.0,199.0,447.0,182.0,3.0139,115600.0,INLAND +-121.37,38.61,42.0,945.0,193.0,460.0,193.0,3.7569,127100.0,INLAND +-121.37,38.61,39.0,823.0,146.0,329.0,144.0,3.0833,114100.0,INLAND +-121.38,38.61,27.0,2375.0,537.0,863.0,452.0,3.0086,126900.0,INLAND +-121.39,38.63,30.0,2930.0,739.0,1661.0,668.0,2.7813,118900.0,INLAND +-121.39,38.63,34.0,1226.0,180.0,359.0,167.0,3.8068,150400.0,INLAND +-121.39,38.61,35.0,2024.0,359.0,786.0,364.0,2.4632,156900.0,INLAND +-121.39,38.62,27.0,5693.0,1487.0,2334.0,1387.0,2.2844,170500.0,INLAND +-121.39,38.62,45.0,2696.0,624.0,1059.0,582.0,1.8176,160900.0,INLAND +-121.4,38.63,30.0,3626.0,834.0,1577.0,806.0,2.517,130400.0,INLAND +-121.4,38.63,31.0,1540.0,452.0,1079.0,444.0,1.8571,98700.0,INLAND +-121.4,38.62,28.0,3671.0,886.0,1733.0,820.0,2.2292,113200.0,INLAND +-121.4,38.61,33.0,3512.0,825.0,1515.0,782.0,1.9908,118800.0,INLAND +-121.41,38.62,21.0,3260.0,763.0,1735.0,736.0,2.5162,97500.0,INLAND +-121.42,38.62,33.0,3171.0,832.0,1591.0,695.0,2.0786,88600.0,INLAND +-121.42,38.61,34.0,1126.0,256.0,589.0,243.0,2.1776,84400.0,INLAND +-121.43,38.61,40.0,1134.0,252.0,675.0,249.0,1.3696,65200.0,INLAND +-121.42,38.62,41.0,1087.0,272.0,462.0,219.0,2.0224,64900.0,INLAND +-121.42,38.63,42.0,1385.0,273.0,740.0,274.0,2.6055,78000.0,INLAND +-121.43,38.63,43.0,1009.0,225.0,604.0,218.0,1.6641,67000.0,INLAND +-121.42,38.63,42.0,2217.0,536.0,1203.0,507.0,1.9412,73100.0,INLAND +-121.43,38.62,36.0,1765.0,438.0,1008.0,382.0,2.0639,73000.0,INLAND +-121.44,38.61,41.0,1404.0,313.0,765.0,330.0,1.8792,63300.0,INLAND +-121.41,38.64,41.0,1578.0,317.0,897.0,333.0,2.3214,66800.0,INLAND +-121.41,38.64,38.0,1384.0,287.0,682.0,280.0,1.9167,64400.0,INLAND +-121.42,38.64,42.0,1720.0,382.0,1069.0,362.0,1.8611,60500.0,INLAND +-121.42,38.64,44.0,1728.0,367.0,1042.0,349.0,1.6033,58500.0,INLAND +-121.42,38.65,21.0,2274.0,495.0,1157.0,445.0,2.098,49800.0,INLAND +-121.43,38.65,18.0,909.0,198.0,661.0,176.0,3.1696,77400.0,INLAND +-121.43,38.64,34.0,2010.0,411.0,1501.0,422.0,2.0417,65900.0,INLAND +-121.44,38.64,18.0,1756.0,442.0,837.0,320.0,1.125,70500.0,INLAND +-121.44,38.64,25.0,1678.0,367.0,971.0,307.0,1.0398,62100.0,INLAND +-121.44,38.65,28.0,1219.0,240.0,559.0,212.0,3.8295,122200.0,INLAND +-121.44,38.63,38.0,1673.0,399.0,1116.0,382.0,1.3302,62200.0,INLAND +-121.44,38.63,33.0,1077.0,271.0,753.0,236.0,1.3462,55900.0,INLAND +-121.44,38.63,38.0,1402.0,370.0,970.0,382.0,1.6343,71000.0,INLAND +-121.44,38.62,37.0,1607.0,385.0,972.0,354.0,1.9107,64700.0,INLAND +-121.44,38.62,37.0,3009.0,733.0,1513.0,588.0,1.4387,61000.0,INLAND +-121.45,38.65,5.0,2680.0,502.0,1885.0,498.0,2.6369,110000.0,INLAND +-121.46,38.65,8.0,3746.0,767.0,2161.0,744.0,3.2039,103400.0,INLAND +-121.46,38.65,14.0,3167.0,551.0,1787.0,533.0,3.8125,92600.0,INLAND +-121.45,38.64,23.0,1481.0,343.0,1079.0,315.0,1.867,60600.0,INLAND +-121.46,38.64,20.0,1517.0,323.0,1287.0,328.0,1.6607,67000.0,INLAND +-121.46,38.63,26.0,3185.0,658.0,2444.0,626.0,1.56,67600.0,INLAND +-121.45,38.63,28.0,1246.0,295.0,884.0,258.0,1.4397,51700.0,INLAND +-121.45,38.62,37.0,1534.0,315.0,1147.0,322.0,2.5643,59800.0,INLAND +-121.45,38.62,38.0,2419.0,605.0,1696.0,503.0,1.4861,63100.0,INLAND +-121.45,38.61,32.0,2436.0,612.0,1509.0,618.0,1.0424,81400.0,INLAND +-121.46,38.61,43.0,705.0,178.0,464.0,159.0,2.4205,60900.0,INLAND +-121.46,38.62,35.0,3326.0,696.0,2511.0,649.0,1.9871,60900.0,INLAND +-121.44,38.61,33.0,1591.0,466.0,1000.0,418.0,1.0467,70100.0,INLAND +-121.45,38.6,44.0,2324.0,413.0,823.0,375.0,4.6625,158900.0,INLAND +-121.45,38.61,46.0,1758.0,511.0,1094.0,484.0,1.0685,70000.0,INLAND +-121.46,38.61,43.0,1111.0,269.0,613.0,290.0,1.2917,66300.0,INLAND +-121.46,38.6,29.0,1978.0,538.0,823.0,490.0,1.9688,135600.0,INLAND +-121.45,38.61,34.0,438.0,116.0,263.0,100.0,0.9379,67500.0,INLAND +-121.47,38.63,29.0,2197.0,520.0,1374.0,483.0,2.1889,69300.0,INLAND +-121.47,38.61,31.0,1072.0,,781.0,281.0,1.6563,65800.0,INLAND +-121.47,38.61,35.0,1372.0,360.0,850.0,328.0,1.6331,67500.0,INLAND +-121.52,38.65,17.0,1269.0,233.0,494.0,231.0,3.9615,331300.0,INLAND +-121.53,38.61,5.0,8149.0,1913.0,2933.0,1616.0,3.6788,178800.0,INLAND +-121.49,38.63,6.0,12197.0,2617.0,5634.0,2329.0,3.7449,129300.0,INLAND +-121.5,38.62,8.0,16679.0,3457.0,7919.0,3329.0,3.7188,134500.0,INLAND +-121.5,38.61,5.0,1395.0,373.0,638.0,322.0,2.6745,225000.0,INLAND +-121.5,38.63,6.0,693.0,143.0,276.0,151.0,3.1944,117000.0,INLAND +-121.49,38.62,8.0,15309.0,2996.0,7463.0,2885.0,3.9143,129700.0,INLAND +-121.49,38.61,6.0,4391.0,974.0,1982.0,914.0,3.4291,105300.0,INLAND +-121.48,38.62,23.0,7709.0,1279.0,4147.0,1262.0,3.8272,96600.0,INLAND +-121.48,38.61,18.0,1511.0,315.0,1062.0,304.0,2.3438,89400.0,INLAND +-121.51,38.69,28.0,800.0,149.0,450.0,158.0,2.1029,108600.0,INLAND +-121.59,38.69,32.0,541.0,82.0,229.0,98.0,8.0379,383300.0,INLAND +-121.42,38.72,10.0,3054.0,528.0,1932.0,510.0,3.0903,91900.0,INLAND +-121.44,38.73,25.0,1287.0,224.0,727.0,236.0,4.7396,135500.0,INLAND +-121.47,38.72,26.0,1708.0,299.0,911.0,290.0,4.0227,99800.0,INLAND +-121.44,38.71,25.0,2336.0,406.0,1172.0,408.0,3.5129,101200.0,INLAND +-121.42,38.7,10.0,2562.0,460.0,1478.0,433.0,4.0625,96200.0,INLAND +-121.45,38.7,24.0,2159.0,369.0,1141.0,355.0,3.9853,90400.0,INLAND +-121.46,38.7,32.0,965.0,183.0,568.0,188.0,3.8611,93900.0,INLAND +-121.43,38.69,28.0,927.0,165.0,542.0,148.0,2.5,96200.0,INLAND +-121.44,38.68,19.0,2476.0,534.0,1355.0,463.0,2.0625,94400.0,INLAND +-121.42,38.68,32.0,2118.0,345.0,1019.0,338.0,3.725,112200.0,INLAND +-121.41,38.69,28.0,1601.0,308.0,848.0,305.0,3.6429,105200.0,INLAND +-121.44,38.69,24.0,3124.0,556.0,1512.0,555.0,3.1942,94900.0,INLAND +-121.45,38.69,32.0,2962.0,526.0,1542.0,521.0,2.2243,89200.0,INLAND +-121.46,38.68,35.0,1299.0,254.0,705.0,245.0,2.8333,103000.0,INLAND +-121.47,38.68,19.0,946.0,182.0,474.0,173.0,5.0155,97300.0,INLAND +-121.46,38.69,11.0,3335.0,658.0,1963.0,622.0,3.3125,96800.0,INLAND +-121.47,38.7,31.0,1007.0,181.0,563.0,185.0,3.625,91300.0,INLAND +-121.43,38.66,35.0,1814.0,367.0,1076.0,372.0,2.7179,81100.0,INLAND +-121.46,38.66,3.0,3438.0,603.0,1602.0,554.0,3.9914,120500.0,INLAND +-121.4,38.66,50.0,880.0,150.0,1148.0,148.0,2.5062,112500.0,INLAND +-121.37,38.69,29.0,2103.0,380.0,1124.0,387.0,3.0833,87000.0,INLAND +-121.37,38.68,34.0,1086.0,187.0,663.0,190.0,3.3074,84200.0,INLAND +-121.38,38.68,35.0,1643.0,298.0,831.0,305.0,4.0673,84200.0,INLAND +-121.37,38.68,36.0,1775.0,296.0,937.0,305.0,3.1786,83400.0,INLAND +-121.37,38.69,35.0,1851.0,327.0,1007.0,286.0,3.2361,84000.0,INLAND +-121.38,38.69,35.0,2943.0,554.0,1460.0,510.0,2.6713,84400.0,INLAND +-121.39,38.69,38.0,300.0,47.0,154.0,51.0,4.0909,108300.0,INLAND +-121.37,38.69,35.0,1093.0,192.0,590.0,190.0,2.7009,80200.0,INLAND +-121.37,38.68,29.0,3757.0,646.0,2022.0,611.0,3.5429,88200.0,INLAND +-121.37,38.68,35.0,1620.0,276.0,939.0,277.0,2.5542,72900.0,INLAND +-121.38,38.68,35.0,1565.0,290.0,861.0,277.0,2.4844,77000.0,INLAND +-121.38,38.68,40.0,67.0,17.0,50.0,32.0,1.7596,93800.0,INLAND +-121.37,38.67,36.0,1354.0,258.0,771.0,267.0,2.2723,78800.0,INLAND +-121.37,38.67,36.0,1786.0,338.0,974.0,319.0,2.555,72700.0,INLAND +-121.38,38.67,37.0,2176.0,460.0,1067.0,357.0,2.3958,78400.0,INLAND +-121.38,38.67,38.0,1001.0,228.0,597.0,226.0,2.2788,73400.0,INLAND +-121.39,38.67,35.0,562.0,174.0,240.0,106.0,0.9338,112500.0,INLAND +-121.37,38.7,18.0,3938.0,649.0,1861.0,606.0,3.6484,95000.0,INLAND +-121.38,38.7,25.0,3919.0,764.0,2203.0,783.0,2.2402,89500.0,INLAND +-121.39,38.69,30.0,2897.0,506.0,1508.0,478.0,3.865,88400.0,INLAND +-121.37,38.7,26.0,2230.0,410.0,1155.0,377.0,3.4911,88200.0,INLAND +-121.34,38.69,16.0,2686.0,516.0,1553.0,529.0,3.7857,112700.0,INLAND +-121.34,38.69,17.0,1968.0,364.0,996.0,331.0,3.7031,114300.0,INLAND +-121.35,38.68,20.0,7085.0,1222.0,3455.0,1229.0,4.3118,120000.0,INLAND +-121.35,38.68,18.0,7923.0,1558.0,3789.0,1473.0,3.5403,98600.0,INLAND +-121.35,38.72,2.0,21897.0,3513.0,8652.0,2873.0,4.5432,151300.0,INLAND +-121.38,38.71,7.0,4842.0,935.0,2857.0,907.0,3.9318,133000.0,INLAND +-121.4,38.71,15.0,4680.0,758.0,2626.0,729.0,3.8355,107000.0,INLAND +-121.36,38.69,13.0,6850.0,1400.0,4251.0,1421.0,3.6989,93300.0,INLAND +-121.35,38.7,5.0,14414.0,2979.0,7608.0,2832.0,3.5802,129600.0,INLAND +-121.36,38.67,17.0,2770.0,684.0,1471.0,624.0,2.3683,82500.0,INLAND +-121.36,38.67,5.0,5819.0,1507.0,3237.0,1356.0,2.2339,116600.0,INLAND +-121.37,38.66,9.0,3184.0,779.0,1929.0,769.0,2.3844,86000.0,INLAND +-121.36,38.66,22.0,2878.0,599.0,1362.0,541.0,2.7955,96500.0,INLAND +-121.37,38.66,17.0,4866.0,1056.0,2371.0,1030.0,2.4574,103300.0,INLAND +-121.38,38.66,17.0,3778.0,939.0,2393.0,862.0,1.8972,100500.0,INLAND +-121.38,38.65,34.0,825.0,173.0,355.0,130.0,3.1858,109500.0,INLAND +-121.39,38.64,33.0,1503.0,282.0,652.0,229.0,3.6937,99300.0,INLAND +-121.34,38.68,28.0,3379.0,552.0,1543.0,556.0,4.2743,124000.0,INLAND +-121.34,38.67,34.0,1503.0,264.0,731.0,285.0,4.0352,118500.0,INLAND +-121.34,38.67,35.0,643.0,117.0,331.0,134.0,3.0417,120700.0,INLAND +-121.34,38.66,16.0,3154.0,860.0,1837.0,793.0,1.9805,92900.0,INLAND +-121.35,38.66,8.0,3322.0,805.0,1694.0,774.0,2.7011,130700.0,INLAND +-121.34,38.66,17.0,1149.0,257.0,583.0,243.0,2.8092,137500.0,INLAND +-121.34,38.66,18.0,4164.0,963.0,2032.0,898.0,2.119,133100.0,INLAND +-121.35,38.66,24.0,3313.0,769.0,1631.0,681.0,2.5556,105700.0,INLAND +-121.36,38.66,14.0,756.0,141.0,424.0,155.0,3.6953,116100.0,INLAND +-121.37,38.64,27.0,1672.0,299.0,757.0,282.0,3.6786,159700.0,INLAND +-121.35,38.65,20.0,2498.0,546.0,1185.0,506.0,3.2243,107900.0,INLAND +-121.33,38.66,15.0,4371.0,908.0,1842.0,818.0,2.7797,105500.0,INLAND +-121.33,38.65,23.0,2446.0,523.0,1132.0,513.0,2.6266,198500.0,INLAND +-121.34,38.65,27.0,1595.0,246.0,610.0,253.0,4.6,199000.0,INLAND +-121.33,38.65,24.0,3533.0,741.0,1496.0,723.0,2.8106,183200.0,INLAND +-121.34,38.64,12.0,2772.0,578.0,1335.0,565.0,3.8068,161000.0,INLAND +-121.33,38.64,27.0,2203.0,493.0,1158.0,492.0,2.4342,119500.0,INLAND +-121.34,38.64,17.0,2761.0,501.0,1128.0,482.0,3.7562,139700.0,INLAND +-121.34,38.63,13.0,3033.0,540.0,1363.0,519.0,4.0036,161700.0,INLAND +-121.33,38.63,23.0,1947.0,409.0,866.0,400.0,2.7181,156800.0,INLAND +-121.33,38.62,19.0,1853.0,415.0,772.0,397.0,2.2574,135800.0,INLAND +-121.34,38.62,20.0,4021.0,864.0,1658.0,730.0,2.4537,153000.0,INLAND +-121.34,38.61,22.0,1778.0,408.0,875.0,375.0,2.6023,142200.0,INLAND +-121.34,38.61,11.0,1716.0,404.0,722.0,415.0,2.0926,166100.0,INLAND +-121.33,38.61,21.0,2453.0,518.0,1326.0,505.0,2.7079,148000.0,INLAND +-121.34,38.61,20.0,5801.0,1148.0,2586.0,1063.0,3.9063,162100.0,INLAND +-121.33,38.6,25.0,4260.0,607.0,1635.0,640.0,6.2817,288200.0,INLAND +-121.29,38.63,24.0,2868.0,527.0,1284.0,487.0,3.3182,213000.0,INLAND +-121.3,38.63,31.0,1817.0,372.0,992.0,339.0,3.0972,150000.0,INLAND +-121.32,38.63,20.0,7003.0,1409.0,3107.0,1315.0,3.0348,150500.0,INLAND +-121.31,38.62,31.0,3114.0,430.0,1121.0,456.0,6.244,240000.0,INLAND +-121.32,38.62,29.0,2430.0,448.0,1087.0,394.0,3.0864,177900.0,INLAND +-121.32,38.62,33.0,898.0,190.0,470.0,201.0,2.6897,148300.0,INLAND +-121.32,38.61,22.0,3902.0,845.0,1870.0,763.0,2.774,190200.0,INLAND +-121.31,38.61,17.0,992.0,151.0,316.0,159.0,6.6238,326700.0,INLAND +-121.3,38.64,20.0,5001.0,830.0,2330.0,830.0,4.0833,160000.0,INLAND +-121.31,38.64,19.0,5407.0,838.0,1927.0,804.0,4.6302,195400.0,INLAND +-121.32,38.64,19.0,8501.0,1558.0,3576.0,1467.0,3.6523,158500.0,INLAND +-121.31,38.66,27.0,1713.0,282.0,761.0,295.0,5.2081,136400.0,INLAND +-121.31,38.66,26.0,1604.0,245.0,751.0,267.0,4.7381,140500.0,INLAND +-121.32,38.66,26.0,1149.0,193.0,500.0,194.0,5.078,163400.0,INLAND +-121.32,38.66,21.0,1276.0,208.0,501.0,205.0,3.95,143600.0,INLAND +-121.32,38.65,23.0,2628.0,499.0,1210.0,453.0,3.0952,157700.0,INLAND +-121.31,38.65,21.0,2759.0,409.0,1053.0,374.0,5.5,165700.0,INLAND +-121.3,38.66,21.0,3824.0,634.0,1818.0,600.0,3.712,139000.0,INLAND +-121.3,38.66,28.0,3391.0,550.0,1546.0,553.0,4.2188,139200.0,INLAND +-121.3,38.65,26.0,3192.0,447.0,1132.0,418.0,4.5278,144300.0,INLAND +-121.3,38.65,36.0,1665.0,293.0,846.0,306.0,3.5852,121600.0,INLAND +-121.21,38.66,15.0,6940.0,1019.0,2829.0,990.0,5.4889,232300.0,INLAND +-121.21,38.65,14.0,3443.0,510.0,1413.0,505.0,5.6529,196000.0,INLAND +-121.24,38.64,13.0,4491.0,689.0,1657.0,667.0,5.259,249400.0,INLAND +-121.23,38.65,19.0,2926.0,476.0,1349.0,480.0,4.6437,212900.0,INLAND +-121.23,38.66,19.0,3243.0,546.0,1334.0,515.0,4.8088,169500.0,INLAND +-121.24,38.66,14.0,3335.0,440.0,1329.0,429.0,6.2082,250300.0,INLAND +-121.28,38.66,17.0,7741.0,1401.0,3153.0,1331.0,3.7869,216100.0,INLAND +-121.25,38.66,26.0,3670.0,556.0,1616.0,550.0,5.02,169600.0,INLAND +-121.26,38.66,19.0,3170.0,444.0,1344.0,452.0,6.1183,221600.0,INLAND +-121.27,38.66,19.0,1891.0,266.0,678.0,255.0,6.1872,188700.0,INLAND +-121.27,38.66,15.0,2642.0,520.0,1032.0,475.0,4.1382,189800.0,INLAND +-121.25,38.64,21.0,2764.0,363.0,902.0,360.0,5.6864,258700.0,INLAND +-121.26,38.65,17.0,2655.0,421.0,991.0,384.0,4.6484,270600.0,INLAND +-121.27,38.65,25.0,2787.0,601.0,1247.0,522.0,2.9016,159800.0,INLAND +-121.27,38.64,22.0,1597.0,280.0,657.0,273.0,4.3098,213500.0,INLAND +-121.26,38.64,40.0,1098.0,175.0,415.0,160.0,4.8375,217400.0,INLAND +-121.27,38.65,33.0,1984.0,289.0,842.0,276.0,5.2949,173300.0,INLAND +-121.29,38.65,27.0,2744.0,464.0,1340.0,452.0,3.8816,147300.0,INLAND +-121.28,38.64,24.0,3459.0,573.0,1336.0,544.0,4.8661,186200.0,INLAND +-121.28,38.63,36.0,120.0,16.0,30.0,14.0,10.2264,350000.0,INLAND +-121.28,38.64,19.0,3574.0,669.0,1373.0,643.0,3.6298,242100.0,INLAND +-121.28,38.71,8.0,4053.0,912.0,2033.0,897.0,2.8973,117100.0,INLAND +-121.28,38.7,14.0,5827.0,1246.0,2578.0,1038.0,3.0212,112900.0,INLAND +-121.28,38.71,35.0,3095.0,594.0,1550.0,576.0,3.575,113500.0,INLAND +-121.28,38.7,15.0,5828.0,1051.0,2868.0,1037.0,3.7813,143200.0,INLAND +-121.28,38.68,14.0,11442.0,2690.0,6068.0,2435.0,2.6016,121200.0,INLAND +-121.3,38.7,18.0,7334.0,1332.0,3339.0,1271.0,3.235,124700.0,INLAND +-121.3,38.69,21.0,6575.0,1105.0,3358.0,1098.0,4.0739,115400.0,INLAND +-121.32,38.69,11.0,13796.0,2372.0,6000.0,2250.0,3.8776,124500.0,INLAND +-121.33,38.68,13.0,5826.0,1411.0,2244.0,1219.0,1.9093,142900.0,INLAND +-121.3,38.71,17.0,5434.0,1106.0,2755.0,1047.0,2.8226,99900.0,INLAND +-121.29,38.71,32.0,1875.0,361.0,1027.0,343.0,3.5769,103800.0,INLAND +-121.3,38.72,15.0,2514.0,482.0,1166.0,503.0,2.2813,131900.0,INLAND +-121.31,38.72,11.0,2306.0,420.0,1308.0,418.0,3.9506,122200.0,INLAND +-121.32,38.71,14.0,4594.0,774.0,2474.0,782.0,4.5245,127500.0,INLAND +-121.31,38.71,18.0,3998.0,744.0,2071.0,660.0,4.3836,102000.0,INLAND +-121.32,38.7,17.0,3214.0,551.0,1879.0,562.0,4.3643,124900.0,INLAND +-121.32,38.7,16.0,2966.0,578.0,1365.0,480.0,3.2444,118400.0,INLAND +-121.32,38.7,16.0,3592.0,642.0,1740.0,629.0,3.0703,126000.0,INLAND +-121.33,38.7,15.0,2226.0,421.0,1004.0,417.0,2.7868,117800.0,INLAND +-121.33,38.69,15.0,3137.0,509.0,1635.0,544.0,4.6923,122700.0,INLAND +-121.32,38.68,25.0,1252.0,207.0,587.0,217.0,3.5893,146400.0,INLAND +-121.32,38.67,10.0,3908.0,890.0,1898.0,798.0,2.8426,130600.0,INLAND +-121.32,38.67,21.0,3455.0,706.0,1605.0,704.0,3.1382,91600.0,INLAND +-121.31,38.67,26.0,1387.0,226.0,807.0,244.0,4.1563,135700.0,INLAND +-121.33,38.67,17.0,2683.0,704.0,1410.0,659.0,1.962,130200.0,INLAND +-121.33,38.66,17.0,2767.0,584.0,1275.0,568.0,2.5909,125400.0,INLAND +-121.31,38.67,27.0,1998.0,353.0,970.0,343.0,4.8224,115500.0,INLAND +-121.32,38.67,31.0,2532.0,479.0,1396.0,467.0,4.0417,114500.0,INLAND +-121.29,38.68,12.0,5098.0,1094.0,2029.0,1065.0,3.5444,132500.0,INLAND +-121.3,38.69,13.0,2135.0,429.0,779.0,432.0,3.6995,134900.0,INLAND +-121.31,38.68,16.0,5179.0,1271.0,2181.0,1151.0,2.1009,82500.0,INLAND +-121.31,38.68,22.0,1194.0,207.0,545.0,223.0,3.8603,134300.0,INLAND +-121.3,38.67,15.0,4018.0,850.0,2070.0,814.0,3.0733,119800.0,INLAND +-121.3,38.68,19.0,2655.0,438.0,1253.0,454.0,5.2817,140600.0,INLAND +-121.3,38.67,20.0,1234.0,208.0,649.0,211.0,4.8523,143000.0,INLAND +-121.3,38.66,32.0,2915.0,492.0,1292.0,454.0,3.3188,117100.0,INLAND +-121.3,38.67,23.0,2145.0,340.0,1022.0,349.0,4.2037,125400.0,INLAND +-121.27,38.7,16.0,3747.0,586.0,1817.0,590.0,4.6488,145300.0,INLAND +-121.27,38.69,16.0,3389.0,597.0,1674.0,568.0,4.4489,145600.0,INLAND +-121.26,38.68,4.0,3080.0,827.0,1195.0,683.0,2.7477,133000.0,INLAND +-121.24,38.7,13.0,3243.0,488.0,1585.0,480.0,5.7133,166800.0,INLAND +-121.25,38.7,16.0,3262.0,533.0,1794.0,543.0,4.2464,144400.0,INLAND +-121.26,38.69,17.0,3917.0,638.0,1809.0,564.0,5.2586,137000.0,INLAND +-121.25,38.69,17.0,3050.0,481.0,1490.0,489.0,4.5562,134500.0,INLAND +-121.25,38.69,24.0,1014.0,185.0,606.0,194.0,4.1607,112800.0,INLAND +-121.24,38.68,20.0,1402.0,236.0,676.0,236.0,3.7426,135500.0,INLAND +-121.25,38.68,15.0,1497.0,243.0,730.0,242.0,4.9688,135600.0,INLAND +-121.26,38.68,13.0,4256.0,619.0,1948.0,622.0,5.2051,167400.0,INLAND +-121.25,38.68,13.0,503.0,70.0,267.0,77.0,6.1943,276100.0,INLAND +-121.25,38.67,14.0,6155.0,1034.0,2407.0,941.0,4.2262,244300.0,INLAND +-121.26,38.67,18.0,1830.0,313.0,905.0,361.0,4.2273,141800.0,INLAND +-121.27,38.67,16.0,3185.0,886.0,1550.0,802.0,2.5199,149000.0,INLAND +-121.26,38.66,8.0,1145.0,241.0,447.0,216.0,4.0781,124300.0,INLAND +-121.27,38.67,15.0,2116.0,524.0,866.0,519.0,2.7388,111600.0,INLAND +-121.27,38.67,15.0,1701.0,346.0,723.0,352.0,3.8906,128700.0,INLAND +-121.28,38.68,16.0,3467.0,615.0,1478.0,601.0,3.75,147300.0,INLAND +-121.28,38.67,23.0,1727.0,264.0,833.0,258.0,5.4797,160000.0,INLAND +-121.28,38.67,29.0,1087.0,174.0,430.0,174.0,4.3625,158800.0,INLAND +-121.29,38.68,20.0,1881.0,378.0,921.0,360.0,1.8589,144000.0,INLAND +-121.29,38.67,20.0,1992.0,363.0,889.0,346.0,3.6516,130500.0,INLAND +-121.25,38.72,15.0,6838.0,941.0,3166.0,926.0,5.2177,162700.0,INLAND +-121.27,38.71,16.0,4082.0,666.0,1912.0,652.0,4.4609,142900.0,INLAND +-121.25,38.71,14.0,3713.0,637.0,1845.0,635.0,4.3009,143400.0,INLAND +-121.26,38.7,9.0,7812.0,1348.0,3275.0,1178.0,4.3826,146600.0,INLAND +-121.17,38.69,5.0,7138.0,1227.0,2623.0,1139.0,5.6902,243200.0,INLAND +-121.19,38.71,11.0,4415.0,,1520.0,627.0,3.2321,390800.0,INLAND +-121.18,38.69,7.0,7104.0,970.0,2772.0,920.0,6.3528,274500.0,INLAND +-121.2,38.7,28.0,2970.0,471.0,1379.0,463.0,4.3214,131700.0,INLAND +-121.2,38.69,26.0,3077.0,607.0,1603.0,595.0,2.7174,137500.0,INLAND +-121.22,38.68,10.0,6262.0,1278.0,2954.0,1169.0,3.4506,139000.0,INLAND +-121.22,38.71,23.0,1843.0,273.0,818.0,276.0,4.4695,214700.0,INLAND +-121.23,38.71,18.0,4947.0,714.0,2227.0,675.0,4.8542,170500.0,INLAND +-121.23,38.69,19.0,5268.0,849.0,2357.0,849.0,3.9226,148700.0,INLAND +-121.23,38.67,27.0,5266.0,971.0,2432.0,948.0,3.8954,133000.0,INLAND +-121.24,38.67,28.0,3558.0,589.0,1742.0,581.0,4.0182,131700.0,INLAND +-121.2,38.68,9.0,2200.0,422.0,938.0,369.0,3.4896,143800.0,INLAND +-121.21,38.67,11.0,5500.0,956.0,2827.0,946.0,4.1071,145800.0,INLAND +-121.22,38.67,20.0,1412.0,226.0,700.0,227.0,4.05,130700.0,INLAND +-121.21,38.67,19.0,2987.0,626.0,1610.0,605.0,3.0533,112100.0,INLAND +-121.19,38.67,16.0,1754.0,284.0,773.0,277.0,4.817,147000.0,INLAND +-121.2,38.67,26.0,1546.0,287.0,773.0,299.0,2.9803,115400.0,INLAND +-121.2,38.67,10.0,3875.0,668.0,1632.0,593.0,4.6902,171000.0,INLAND +-121.19,38.66,26.0,1937.0,286.0,769.0,274.0,6.1185,179200.0,INLAND +-121.2,38.66,17.0,1605.0,217.0,732.0,241.0,5.47,204800.0,INLAND +-121.15,38.69,52.0,240.0,44.0,6675.0,29.0,6.1359,225000.0,INLAND +-121.17,38.71,15.0,3084.0,557.0,1040.0,562.0,2.5183,293300.0,INLAND +-121.17,38.68,37.0,1252.0,267.0,686.0,256.0,3.0,121900.0,INLAND +-121.18,38.67,42.0,2101.0,480.0,945.0,426.0,2.3333,116000.0,INLAND +-121.16,38.67,21.0,6198.0,1223.0,2827.0,1179.0,3.7796,159000.0,INLAND +-121.15,38.68,6.0,9798.0,1551.0,4583.0,1494.0,5.0159,189600.0,INLAND +-121.16,38.68,21.0,3517.0,667.0,1687.0,655.0,3.1161,131600.0,INLAND +-121.13,38.66,2.0,12360.0,1747.0,4438.0,1470.0,6.2503,222500.0,INLAND +-121.13,38.55,8.0,530.0,109.0,398.0,96.0,4.2031,212500.0,INLAND +-121.06,38.51,6.0,6873.0,959.0,2354.0,931.0,6.8869,263100.0,INLAND +-121.13,38.47,16.0,2574.0,441.0,1041.0,428.0,3.6645,203400.0,INLAND +-121.24,38.63,4.0,11021.0,1565.0,3857.0,1494.0,7.2582,273200.0,INLAND +-121.22,38.58,25.0,394.0,94.0,155.0,83.0,2.233,55000.0,INLAND +-121.28,38.55,35.0,7088.0,1279.0,4885.0,1272.0,2.6981,112500.0,INLAND +-121.31,38.59,35.0,3295.0,560.0,1454.0,536.0,3.1711,101900.0,INLAND +-121.32,38.59,21.0,9774.0,1777.0,4674.0,1712.0,3.6817,136100.0,INLAND +-121.32,38.59,24.0,4378.0,910.0,2149.0,812.0,2.5035,123700.0,INLAND +-121.29,38.61,17.0,13553.0,2474.0,6544.0,2359.0,3.9727,132700.0,INLAND +-121.3,38.61,25.0,2707.0,464.0,1423.0,490.0,4.3235,116900.0,INLAND +-121.3,38.6,32.0,9534.0,1819.0,4951.0,1710.0,3.3926,103400.0,INLAND +-121.27,38.62,13.0,2321.0,539.0,1066.0,497.0,2.7652,95600.0,INLAND +-121.28,38.61,22.0,2938.0,619.0,1501.0,561.0,2.7356,96100.0,INLAND +-121.28,38.61,23.0,2547.0,504.0,1235.0,469.0,2.4722,103300.0,INLAND +-121.29,38.61,26.0,1814.0,299.0,963.0,317.0,4.4519,110500.0,INLAND +-121.27,38.61,17.0,6663.0,1369.0,2840.0,1299.0,2.9452,115600.0,INLAND +-121.28,38.6,25.0,1122.0,198.0,564.0,213.0,3.1654,111600.0,INLAND +-121.28,38.6,17.0,1671.0,378.0,848.0,351.0,3.1194,112500.0,INLAND +-121.29,38.6,29.0,1276.0,225.0,600.0,223.0,4.0938,109100.0,INLAND +-121.32,38.57,15.0,3369.0,499.0,1733.0,470.0,5.31,127500.0,INLAND +-121.33,38.56,17.0,3608.0,682.0,1694.0,666.0,3.311,109400.0,INLAND +-121.32,38.57,25.0,692.0,146.0,504.0,167.0,3.6897,101100.0,INLAND +-121.32,38.56,18.0,1169.0,186.0,614.0,192.0,4.5766,108700.0,INLAND +-121.32,38.54,13.0,4715.0,1090.0,2420.0,1059.0,2.9693,104400.0,INLAND +-121.28,38.53,18.0,224.0,38.0,95.0,41.0,3.1042,165000.0,INLAND +-121.3,38.58,19.0,2653.0,680.0,1419.0,579.0,2.3787,91300.0,INLAND +-121.3,38.58,16.0,1537.0,,1125.0,375.0,2.6471,90700.0,INLAND +-121.31,38.58,10.0,2421.0,580.0,962.0,497.0,2.5035,112500.0,INLAND +-121.31,38.57,9.0,2748.0,521.0,1663.0,565.0,3.5192,113300.0,INLAND +-121.31,38.57,22.0,1229.0,253.0,733.0,250.0,2.5,101600.0,INLAND +-121.33,38.57,17.0,1621.0,350.0,706.0,338.0,2.3684,150000.0,INLAND +-121.28,38.59,3.0,4188.0,1136.0,2081.0,995.0,3.0481,92500.0,INLAND +-121.29,38.59,19.0,2460.0,470.0,1346.0,480.0,3.6563,95600.0,INLAND +-121.3,38.59,25.0,3002.0,718.0,1660.0,613.0,2.1116,89600.0,INLAND +-121.3,38.58,29.0,2748.0,563.0,1619.0,525.0,2.8966,92400.0,INLAND +-121.34,38.56,12.0,2975.0,628.0,1440.0,593.0,2.9896,118600.0,INLAND +-121.34,38.55,11.0,2838.0,498.0,1701.0,504.0,4.1447,114000.0,INLAND +-121.35,38.54,12.0,16239.0,3358.0,8656.0,3234.0,3.5691,116300.0,INLAND +-121.37,38.56,19.0,6308.0,1167.0,3012.0,1112.0,2.9464,113500.0,INLAND +-121.37,38.57,16.0,3895.0,896.0,1762.0,855.0,2.6635,135800.0,INLAND +-121.37,38.56,18.0,2129.0,363.0,815.0,347.0,2.7679,118000.0,INLAND +-121.36,38.57,26.0,1793.0,244.0,653.0,235.0,5.6485,129500.0,INLAND +-121.35,38.56,16.0,2629.0,491.0,1265.0,485.0,4.5066,140200.0,INLAND +-121.34,38.58,17.0,1605.0,258.0,748.0,262.0,5.0917,134100.0,INLAND +-121.34,38.57,14.0,5737.0,1008.0,2731.0,983.0,4.4602,134500.0,INLAND +-121.35,38.55,18.0,4481.0,780.0,2211.0,775.0,3.9934,123300.0,INLAND +-121.35,38.55,22.0,2607.0,411.0,1216.0,407.0,5.0427,126900.0,INLAND +-121.36,38.55,33.0,1191.0,198.0,554.0,191.0,2.8021,118800.0,INLAND +-121.35,38.56,16.0,2278.0,370.0,1203.0,371.0,5.0622,132400.0,INLAND +-121.36,38.56,17.0,6225.0,938.0,3064.0,947.0,5.2881,138000.0,INLAND +-121.37,38.55,21.0,2713.0,432.0,1287.0,440.0,4.5815,125500.0,INLAND +-121.36,38.56,20.0,1232.0,332.0,667.0,288.0,1.8288,32500.0,INLAND +-121.37,38.56,27.0,1827.0,509.0,852.0,450.0,2.0901,52500.0,INLAND +-121.3,38.51,19.0,822.0,134.0,457.0,133.0,4.15,157500.0,INLAND +-121.35,38.51,29.0,2337.0,391.0,1054.0,352.0,4.2206,157700.0,INLAND +-121.4,38.47,4.0,20982.0,3392.0,10329.0,3086.0,4.3658,130600.0,INLAND +-121.38,38.47,4.0,14418.0,2282.0,6578.0,2140.0,4.5604,145900.0,INLAND +-121.39,38.43,3.0,2696.0,384.0,990.0,316.0,5.4445,237600.0,INLAND +-121.27,38.44,19.0,2780.0,414.0,1320.0,404.0,5.8831,209900.0,INLAND +-121.35,38.46,2.0,6992.0,1132.0,2816.0,984.0,4.3879,144400.0,INLAND +-121.34,38.44,14.0,3205.0,465.0,1439.0,456.0,5.7452,240900.0,INLAND +-121.32,38.41,17.0,4401.0,655.0,1970.0,639.0,5.8239,247500.0,INLAND +-121.36,38.42,6.0,3254.0,465.0,1168.0,345.0,5.1811,188400.0,INLAND +-121.37,38.41,14.0,3727.0,685.0,1741.0,646.0,3.5625,125700.0,INLAND +-121.37,38.42,18.0,2643.0,502.0,1755.0,541.0,3.3281,91200.0,INLAND +-121.38,38.41,7.0,6091.0,921.0,2916.0,886.0,4.7557,150400.0,INLAND +-121.38,38.41,10.0,3425.0,629.0,1538.0,587.0,4.45,138700.0,INLAND +-121.38,38.4,15.0,4155.0,637.0,1722.0,616.0,4.8831,154400.0,INLAND +-121.37,38.39,15.0,1883.0,254.0,893.0,256.0,6.2575,143500.0,INLAND +-121.35,38.4,11.0,2322.0,459.0,1373.0,424.0,3.175,94400.0,INLAND +-121.36,38.4,18.0,4813.0,849.0,2333.0,843.0,4.175,144400.0,INLAND +-121.36,38.39,10.0,5121.0,763.0,2568.0,758.0,5.2447,148100.0,INLAND +-121.13,38.37,10.0,1034.0,153.0,478.0,155.0,7.0326,241100.0,INLAND +-121.2,38.36,14.0,2634.0,463.0,1402.0,432.0,3.8897,175700.0,INLAND +-121.22,38.4,14.0,2655.0,441.0,1277.0,422.0,4.6989,213800.0,INLAND +-121.22,38.43,20.0,2054.0,339.0,934.0,336.0,4.5368,219300.0,INLAND +-121.29,38.36,17.0,2193.0,386.0,1148.0,372.0,4.5272,191700.0,INLAND +-121.27,38.31,17.0,1144.0,202.0,626.0,178.0,4.4107,151600.0,INLAND +-121.1,38.33,14.0,1357.0,247.0,695.0,224.0,4.1974,157800.0,INLAND +-121.2,38.28,20.0,1732.0,307.0,999.0,305.0,3.9808,160200.0,INLAND +-121.26,38.27,20.0,1314.0,229.0,712.0,219.0,4.4125,144600.0,INLAND +-121.29,38.28,11.0,1554.0,260.0,793.0,233.0,4.8073,156700.0,INLAND +-121.35,38.28,17.0,2756.0,557.0,1986.0,530.0,3.2234,82000.0,INLAND +-121.33,38.28,14.0,980.0,171.0,659.0,183.0,4.4306,170100.0,INLAND +-121.31,38.28,16.0,1708.0,391.0,687.0,378.0,1.9485,155400.0,INLAND +-121.3,38.26,19.0,1403.0,276.0,901.0,290.0,3.215,104600.0,INLAND +-121.31,38.26,22.0,1768.0,396.0,1005.0,420.0,1.8846,88300.0,INLAND +-121.32,38.26,4.0,6125.0,1063.0,3077.0,953.0,4.1179,134600.0,INLAND +-121.3,38.25,27.0,2475.0,548.0,1703.0,517.0,2.5727,86100.0,INLAND +-121.48,38.46,8.0,10505.0,1777.0,6002.0,1694.0,4.0516,121200.0,INLAND +-121.42,38.47,11.0,5665.0,1507.0,3422.0,1299.0,2.3343,97800.0,INLAND +-121.43,38.46,18.0,1378.0,235.0,818.0,262.0,4.0625,100300.0,INLAND +-121.43,38.47,21.0,1787.0,291.0,988.0,301.0,4.35,96200.0,INLAND +-121.44,38.47,16.0,1215.0,223.0,787.0,233.0,4.1597,95900.0,INLAND +-121.44,38.47,5.0,5666.0,1178.0,3139.0,1131.0,3.3608,108900.0,INLAND +-121.44,38.46,10.0,4446.0,897.0,2499.0,884.0,3.5461,103600.0,INLAND +-121.44,38.43,3.0,39320.0,6210.0,16305.0,5358.0,4.9516,153700.0,INLAND +-121.41,38.34,24.0,1605.0,277.0,1966.0,250.0,3.0833,162500.0,INLAND +-121.45,38.37,32.0,1441.0,261.0,629.0,249.0,4.4519,137500.0,INLAND +-121.5,38.34,36.0,1212.0,255.0,569.0,256.0,2.0048,72900.0,INLAND +-121.54,38.29,47.0,1396.0,254.0,630.0,218.0,2.8616,92500.0,INLAND +-121.56,38.26,43.0,1906.0,327.0,996.0,314.0,2.9744,136800.0,INLAND +-121.51,38.26,52.0,910.0,212.0,429.0,212.0,1.6458,52800.0,INLAND +-121.57,38.19,36.0,1395.0,264.0,700.0,244.0,2.4353,162500.0,INLAND +-121.7,38.1,19.0,4896.0,1083.0,2150.0,905.0,3.3398,89700.0,INLAND +-121.29,36.9,17.0,3610.0,593.0,1734.0,559.0,5.8324,374200.0,INLAND +-121.37,36.89,21.0,2471.0,473.0,1753.0,451.0,4.025,293800.0,INLAND +-121.47,36.92,27.0,2049.0,417.0,1230.0,336.0,4.6477,265900.0,INLAND +-121.53,36.85,23.0,3359.0,725.0,1862.0,651.0,2.6719,193600.0,INLAND +-121.51,36.86,36.0,1019.0,168.0,602.0,169.0,2.625,210000.0,INLAND +-121.6,36.88,21.0,3416.0,624.0,1862.0,595.0,4.7813,241500.0,<1H OCEAN +-121.5,36.81,20.0,1345.0,230.0,731.0,217.0,4.2333,363300.0,INLAND +-121.45,36.86,11.0,1613.0,335.0,1617.0,342.0,3.1375,146200.0,INLAND +-121.42,36.86,41.0,440.0,106.0,389.0,94.0,2.6818,225000.0,INLAND +-121.41,36.85,11.0,1708.0,394.0,1474.0,372.0,2.8839,145900.0,INLAND +-121.4,36.85,50.0,2666.0,613.0,1768.0,555.0,2.6598,157300.0,INLAND +-121.4,36.84,52.0,1860.0,400.0,1215.0,367.0,2.9554,136500.0,INLAND +-121.4,36.84,40.0,2352.0,536.0,1430.0,535.0,3.0912,155300.0,INLAND +-121.41,36.84,23.0,1771.0,356.0,1105.0,338.0,3.7049,192200.0,INLAND +-121.4,36.86,36.0,1256.0,270.0,910.0,255.0,1.9405,145400.0,INLAND +-121.38,36.85,13.0,4115.0,782.0,2903.0,747.0,3.7316,192400.0,INLAND +-121.38,36.84,6.0,3769.0,669.0,2061.0,648.0,4.1875,217600.0,INLAND +-121.37,36.84,11.0,1996.0,382.0,1023.0,358.0,3.5714,243000.0,INLAND +-121.38,36.84,17.0,2625.0,512.0,1487.0,481.0,3.6354,221200.0,INLAND +-121.37,36.83,14.0,3658.0,612.0,1951.0,600.0,4.76,216000.0,INLAND +-121.4,36.83,11.0,3701.0,739.0,1749.0,654.0,3.067,207900.0,INLAND +-121.44,36.84,7.0,1644.0,338.0,1143.0,331.0,4.005,180400.0,INLAND +-121.42,36.85,7.0,1626.0,325.0,677.0,304.0,2.3125,170800.0,INLAND +-121.32,36.79,30.0,516.0,90.0,288.0,95.0,3.6333,202500.0,INLAND +-121.36,36.81,7.0,4609.0,741.0,1660.0,720.0,5.0871,290500.0,INLAND +-121.34,36.76,15.0,2638.0,429.0,1289.0,357.0,4.1528,336800.0,INLAND +-121.06,36.72,23.0,395.0,70.0,166.0,52.0,2.2132,100000.0,INLAND +-120.95,36.47,52.0,1691.0,301.0,618.0,239.0,3.2292,225000.0,<1H OCEAN +-117.75,34.01,4.0,22128.0,3522.0,10450.0,3258.0,6.1287,289600.0,<1H OCEAN +-117.78,33.97,2.0,556.0,63.0,179.0,54.0,8.4411,500001.0,<1H OCEAN +-117.72,33.99,14.0,5622.0,861.0,3108.0,821.0,5.7763,206700.0,INLAND +-117.76,33.98,3.0,9662.0,1385.0,2497.0,856.0,6.7172,292400.0,<1H OCEAN +-117.74,33.97,4.0,9755.0,1748.0,4662.0,1583.0,5.6501,254900.0,<1H OCEAN +-117.72,33.97,16.0,13290.0,2062.0,6931.0,2023.0,5.228,187800.0,<1H OCEAN +-117.71,33.97,10.0,10856.0,2278.0,6474.0,2199.0,3.851,137200.0,INLAND +-117.7,33.92,4.0,8301.0,1333.0,3941.0,1236.0,6.2141,252200.0,<1H OCEAN +-117.75,33.95,13.0,984.0,127.0,364.0,119.0,7.5839,426900.0,<1H OCEAN +-117.76,33.94,40.0,1092.0,213.0,457.0,190.0,5.1165,184200.0,<1H OCEAN +-117.69,34.09,28.0,1437.0,295.0,724.0,262.0,2.725,140200.0,INLAND +-117.7,34.08,10.0,1979.0,454.0,1117.0,389.0,3.7802,107300.0,INLAND +-117.7,34.09,25.0,1719.0,331.0,1098.0,324.0,3.625,121800.0,INLAND +-117.71,34.08,29.0,1276.0,283.0,1216.0,316.0,2.5972,134300.0,INLAND +-117.71,34.07,31.0,1840.0,380.0,1187.0,357.0,3.8875,129200.0,INLAND +-117.69,34.08,30.0,4255.0,773.0,2129.0,730.0,4.5185,142500.0,INLAND +-117.69,34.07,35.0,3222.0,559.0,1970.0,550.0,3.7083,131000.0,INLAND +-117.69,34.07,34.0,4055.0,739.0,2470.0,753.0,3.8586,136000.0,INLAND +-117.69,34.08,14.0,4136.0,886.0,2026.0,788.0,3.2344,128200.0,INLAND +-117.71,34.07,24.0,1948.0,362.0,1286.0,364.0,3.6,139300.0,INLAND +-117.7,34.08,33.0,4674.0,791.0,2769.0,784.0,4.1448,137300.0,INLAND +-117.7,34.07,33.0,1552.0,288.0,1326.0,303.0,3.7969,128400.0,INLAND +-117.69,34.06,29.0,873.0,226.0,649.0,198.0,2.7986,114400.0,INLAND +-117.69,34.06,25.0,1881.0,433.0,1337.0,417.0,2.5536,144000.0,INLAND +-117.7,34.06,25.0,2054.0,609.0,2271.0,564.0,2.3049,150000.0,INLAND +-117.7,34.06,7.0,732.0,145.0,431.0,132.0,2.9107,95300.0,INLAND +-117.71,34.06,27.0,2127.0,628.0,1970.0,534.0,1.4722,91300.0,INLAND +-117.68,34.05,25.0,1859.0,463.0,1070.0,374.0,2.5395,187500.0,INLAND +-117.69,34.05,10.0,1875.0,366.0,1055.0,363.0,4.3264,128900.0,INLAND +-117.7,34.05,24.0,2834.0,470.0,1815.0,471.0,4.7357,162500.0,INLAND +-117.71,34.06,16.0,1458.0,295.0,912.0,331.0,3.625,160400.0,INLAND +-117.71,34.05,20.0,2281.0,444.0,1545.0,481.0,2.5735,130500.0,INLAND +-117.72,34.05,31.0,2220.0,526.0,1662.0,472.0,2.7321,104300.0,INLAND +-117.72,34.05,8.0,1841.0,409.0,1243.0,394.0,4.0614,107000.0,INLAND +-117.69,34.04,5.0,4459.0,896.0,2028.0,881.0,4.0096,182600.0,INLAND +-117.7,34.04,13.0,5301.0,1025.0,2870.0,984.0,3.5954,163000.0,INLAND +-117.71,34.04,20.0,1950.0,310.0,1054.0,312.0,4.625,222100.0,INLAND +-117.71,34.04,17.0,4098.0,733.0,1859.0,713.0,2.9811,231800.0,INLAND +-117.72,34.03,17.0,2902.0,476.0,1652.0,479.0,5.6029,161800.0,INLAND +-117.72,34.02,17.0,1781.0,262.0,860.0,256.0,6.5958,236800.0,INLAND +-117.73,34.01,36.0,2340.0,392.0,1213.0,388.0,4.125,213000.0,INLAND +-117.72,34.0,15.0,4363.0,690.0,2410.0,666.0,5.4824,179700.0,INLAND +-117.68,34.0,5.0,3761.0,580.0,2335.0,648.0,5.7338,225400.0,INLAND +-117.69,34.0,28.0,707.0,154.0,561.0,129.0,2.5781,111600.0,INLAND +-117.7,34.0,15.0,4905.0,711.0,2711.0,762.0,5.7021,193100.0,INLAND +-117.71,34.02,17.0,12689.0,2426.0,7343.0,2230.0,3.6361,157700.0,INLAND +-117.71,34.03,11.0,3467.0,749.0,2163.0,676.0,3.4267,164400.0,INLAND +-117.67,34.03,20.0,8561.0,1411.0,4861.0,1450.0,4.7056,165500.0,INLAND +-117.68,34.03,16.0,2859.0,668.0,1946.0,591.0,3.0396,124300.0,INLAND +-117.69,34.03,20.0,6374.0,1412.0,3690.0,1350.0,3.4184,162500.0,INLAND +-117.68,34.01,20.0,7326.0,1555.0,5718.0,1538.0,3.2073,123500.0,INLAND +-117.69,34.01,30.0,2598.0,573.0,2170.0,518.0,2.3,95600.0,INLAND +-117.68,34.15,24.0,1033.0,189.0,486.0,204.0,4.1719,213500.0,INLAND +-117.66,34.15,25.0,3430.0,485.0,1284.0,438.0,8.5282,360100.0,INLAND +-117.64,34.15,16.0,2896.0,404.0,1165.0,379.0,6.4559,392900.0,INLAND +-117.68,34.15,4.0,4082.0,578.0,1996.0,580.0,6.7813,286300.0,INLAND +-117.68,34.14,4.0,4791.0,695.0,1871.0,659.0,6.9532,277000.0,INLAND +-117.66,34.14,11.0,3628.0,469.0,1488.0,463.0,7.0844,325000.0,INLAND +-117.66,34.14,8.0,1692.0,253.0,857.0,251.0,6.9418,310500.0,INLAND +-117.66,34.15,20.0,2524.0,311.0,965.0,285.0,8.0103,395500.0,INLAND +-117.65,34.14,16.0,2196.0,287.0,949.0,289.0,8.6573,354000.0,INLAND +-117.69,34.13,8.0,2915.0,371.0,1271.0,354.0,7.9627,345400.0,INLAND +-117.67,34.13,10.0,2846.0,362.0,1221.0,355.0,7.7234,304100.0,INLAND +-117.66,34.13,17.0,3229.0,405.0,1289.0,407.0,6.3842,307100.0,INLAND +-117.67,34.12,15.0,3162.0,495.0,1145.0,473.0,5.3525,191700.0,INLAND +-117.66,34.13,19.0,3995.0,554.0,1523.0,509.0,6.075,254100.0,INLAND +-117.66,34.12,22.0,2272.0,278.0,933.0,305.0,8.8204,390500.0,INLAND +-117.65,34.14,9.0,3877.0,490.0,1815.0,490.0,8.4839,406700.0,INLAND +-117.65,34.13,24.0,2121.0,296.0,913.0,302.0,5.9328,255900.0,INLAND +-117.65,34.12,17.0,3006.0,427.0,1291.0,406.0,6.2083,242700.0,INLAND +-117.63,34.12,4.0,4323.0,775.0,1479.0,663.0,6.0758,226800.0,INLAND +-117.64,34.12,18.0,3605.0,534.0,1682.0,480.0,5.8407,202900.0,INLAND +-117.65,34.11,29.0,2927.0,634.0,1710.0,623.0,3.6219,176600.0,INLAND +-117.64,34.11,16.0,2129.0,420.0,932.0,379.0,2.5868,146900.0,INLAND +-117.63,34.11,30.0,2674.0,428.0,1404.0,456.0,4.2969,165600.0,INLAND +-117.69,34.11,16.0,2427.0,522.0,794.0,491.0,2.6929,119300.0,INLAND +-117.68,34.12,16.0,2181.0,321.0,1133.0,350.0,5.7214,259400.0,INLAND +-117.68,34.11,16.0,3190.0,471.0,1414.0,464.0,5.5292,208600.0,INLAND +-117.66,34.12,16.0,3853.0,541.0,1726.0,497.0,6.1195,251100.0,INLAND +-117.66,34.11,19.0,3445.0,661.0,1635.0,580.0,5.0681,230500.0,INLAND +-117.65,34.12,27.0,2298.0,340.0,1071.0,369.0,6.5587,239000.0,INLAND +-117.65,34.11,28.0,2788.0,370.0,1140.0,385.0,5.3368,233500.0,INLAND +-117.69,34.1,17.0,3759.0,1035.0,1722.0,847.0,2.6074,137500.0,INLAND +-117.68,34.1,11.0,7392.0,1796.0,3841.0,1621.0,2.8326,163000.0,INLAND +-117.67,34.1,28.0,1263.0,248.0,601.0,219.0,3.875,174000.0,INLAND +-117.67,34.1,19.0,2969.0,605.0,1326.0,573.0,4.3438,155700.0,INLAND +-117.65,34.1,19.0,1688.0,365.0,622.0,322.0,3.6,136400.0,INLAND +-117.66,34.1,37.0,1971.0,345.0,939.0,358.0,3.4634,145300.0,INLAND +-117.66,34.1,26.0,1855.0,553.0,1109.0,536.0,2.2429,150000.0,INLAND +-117.65,34.1,30.0,1461.0,341.0,1014.0,345.0,2.4667,106000.0,INLAND +-117.68,34.09,22.0,1547.0,334.0,773.0,316.0,2.9812,148800.0,INLAND +-117.67,34.09,17.0,4418.0,1256.0,2417.0,1094.0,2.7266,101000.0,INLAND +-117.66,34.09,26.0,1151.0,200.0,593.0,188.0,3.6667,166300.0,INLAND +-117.66,34.09,20.0,2462.0,496.0,1117.0,458.0,3.2321,162500.0,INLAND +-117.66,34.09,23.0,1426.0,313.0,954.0,319.0,3.0357,151500.0,INLAND +-117.65,34.09,33.0,2446.0,396.0,1209.0,412.0,4.3958,145600.0,INLAND +-117.62,34.13,20.0,3216.0,516.0,1655.0,524.0,5.1261,158800.0,INLAND +-117.62,34.11,17.0,1869.0,311.0,831.0,262.0,6.148,243900.0,INLAND +-117.62,34.11,31.0,2561.0,414.0,1204.0,435.0,4.4637,192800.0,INLAND +-117.63,34.1,15.0,4799.0,1209.0,2554.0,1057.0,2.6582,122800.0,INLAND +-117.63,34.09,8.0,3557.0,890.0,2251.0,765.0,2.6818,114100.0,INLAND +-117.64,34.09,34.0,2839.0,659.0,1822.0,631.0,3.05,121300.0,INLAND +-117.65,34.09,46.0,1214.0,281.0,701.0,294.0,2.7083,116300.0,INLAND +-117.65,34.1,44.0,1526.0,337.0,831.0,326.0,3.0284,115800.0,INLAND +-117.65,34.1,44.0,2808.0,585.0,1444.0,550.0,2.7159,139300.0,INLAND +-117.68,34.08,21.0,5662.0,1185.0,3067.0,1055.0,3.3482,137300.0,INLAND +-117.68,34.08,28.0,2459.0,492.0,1230.0,498.0,3.0978,137200.0,INLAND +-117.67,34.07,29.0,1840.0,388.0,1278.0,368.0,3.5036,123400.0,INLAND +-117.68,34.07,24.0,2626.0,692.0,2204.0,647.0,1.7806,135000.0,INLAND +-117.68,34.07,32.0,1775.0,314.0,1067.0,302.0,4.0375,121300.0,INLAND +-117.65,34.08,35.0,2621.0,391.0,1074.0,391.0,4.7176,166400.0,INLAND +-117.65,34.08,38.0,2750.0,572.0,1410.0,483.0,3.3836,144900.0,INLAND +-117.66,34.07,37.0,2454.0,511.0,1165.0,504.0,2.9474,139600.0,INLAND +-117.66,34.06,24.0,4043.0,952.0,2174.0,859.0,2.2244,114900.0,INLAND +-117.66,34.07,36.0,2072.0,408.0,964.0,395.0,2.8702,137000.0,INLAND +-117.66,34.07,33.0,2081.0,409.0,1008.0,375.0,2.587,138100.0,INLAND +-117.66,34.08,36.0,1485.0,236.0,623.0,261.0,3.3036,141000.0,INLAND +-117.66,34.08,33.0,3659.0,590.0,1773.0,615.0,3.9227,157200.0,INLAND +-117.64,34.08,37.0,2576.0,468.0,1284.0,428.0,3.3958,130400.0,INLAND +-117.64,34.07,43.0,1970.0,379.0,1036.0,391.0,3.2083,122800.0,INLAND +-117.65,34.08,52.0,2264.0,439.0,1031.0,437.0,3.375,144300.0,INLAND +-117.65,34.08,40.0,1609.0,258.0,624.0,242.0,5.4689,158200.0,INLAND +-117.64,34.08,35.0,1254.0,241.0,729.0,253.0,3.495,118000.0,INLAND +-117.64,34.08,33.0,1987.0,455.0,1369.0,475.0,2.4464,122600.0,INLAND +-117.63,34.08,38.0,1810.0,371.0,1257.0,354.0,3.8355,111700.0,INLAND +-117.63,34.07,39.0,2650.0,511.0,1537.0,495.0,3.4432,106700.0,INLAND +-117.62,34.07,15.0,4061.0,811.0,2884.0,734.0,3.3936,127000.0,INLAND +-117.62,34.08,30.0,1372.0,235.0,1047.0,225.0,3.1597,116300.0,INLAND +-117.63,34.09,19.0,3490.0,816.0,2818.0,688.0,2.8977,126200.0,INLAND +-117.62,34.09,26.0,3271.0,595.0,2259.0,566.0,4.0139,132000.0,INLAND +-117.62,34.08,22.0,2626.0,631.0,1678.0,557.0,3.125,111800.0,INLAND +-117.62,34.08,24.0,2801.0,554.0,2064.0,529.0,4.4946,136000.0,INLAND +-117.61,34.08,20.0,3550.0,736.0,2229.0,681.0,3.0199,128800.0,INLAND +-117.61,34.09,23.0,1945.0,362.0,1483.0,383.0,4.4205,135500.0,INLAND +-117.61,34.09,11.0,2000.0,391.0,1503.0,426.0,4.6167,144000.0,INLAND +-117.61,34.08,12.0,4427.0,,2400.0,843.0,4.7147,158700.0,INLAND +-117.6,34.08,15.0,2700.0,460.0,1432.0,449.0,4.9063,159800.0,INLAND +-117.65,34.07,35.0,2501.0,651.0,1182.0,591.0,1.4464,113200.0,INLAND +-117.65,34.07,52.0,1041.0,252.0,558.0,231.0,1.9236,117200.0,INLAND +-117.65,34.06,41.0,465.0,130.0,349.0,138.0,2.0893,112500.0,INLAND +-117.62,34.07,16.0,6009.0,1599.0,5110.0,1389.0,2.5677,128900.0,INLAND +-117.64,34.07,30.0,2787.0,713.0,2647.0,693.0,2.2765,98100.0,INLAND +-117.64,34.07,38.0,2450.0,544.0,1823.0,536.0,2.837,111200.0,INLAND +-117.64,34.07,52.0,1644.0,372.0,1269.0,355.0,2.6913,108300.0,INLAND +-117.67,34.06,26.0,1592.0,429.0,1182.0,365.0,2.4583,110400.0,INLAND +-117.66,34.06,39.0,1405.0,339.0,1489.0,336.0,1.608,91800.0,INLAND +-117.65,34.06,41.0,1171.0,334.0,1479.0,334.0,2.25,90500.0,INLAND +-117.64,34.06,43.0,763.0,219.0,851.0,198.0,1.7292,79200.0,INLAND +-117.64,34.06,50.0,637.0,143.0,590.0,147.0,1.9659,85700.0,INLAND +-117.63,34.06,39.0,1210.0,310.0,1294.0,303.0,2.3636,88300.0,INLAND +-117.66,34.05,36.0,2341.0,520.0,2138.0,523.0,2.3347,104000.0,INLAND +-117.66,34.05,33.0,960.0,216.0,831.0,222.0,2.5391,108600.0,INLAND +-117.66,34.05,6.0,5129.0,1119.0,2533.0,949.0,3.625,113600.0,INLAND +-117.67,34.04,16.0,3260.0,501.0,1973.0,535.0,4.6563,162000.0,INLAND +-117.66,34.04,16.0,2081.0,348.0,1332.0,356.0,4.7872,147600.0,INLAND +-117.66,34.05,14.0,2644.0,525.0,2021.0,511.0,3.6467,147500.0,INLAND +-117.65,34.04,15.0,3393.0,,2039.0,611.0,3.9336,151000.0,INLAND +-117.66,34.04,10.0,3657.0,695.0,2079.0,663.0,4.2054,159900.0,INLAND +-117.67,34.05,6.0,2833.0,628.0,1717.0,589.0,3.2062,167500.0,INLAND +-117.67,34.04,13.0,2295.0,374.0,1284.0,378.0,5.2551,194300.0,INLAND +-117.67,34.04,13.0,1543.0,,776.0,358.0,3.0598,99700.0,INLAND +-117.68,34.04,27.0,574.0,103.0,321.0,103.0,3.9107,186500.0,INLAND +-117.65,34.02,9.0,2107.0,411.0,1138.0,389.0,4.4042,159100.0,INLAND +-117.66,34.03,14.0,2137.0,345.0,1151.0,352.0,5.753,185500.0,INLAND +-117.67,34.02,16.0,3042.0,524.0,1516.0,475.0,4.8906,178500.0,INLAND +-117.66,34.02,11.0,3358.0,504.0,1690.0,482.0,6.7544,207900.0,INLAND +-117.65,34.03,15.0,4420.0,903.0,2373.0,858.0,3.449,149100.0,INLAND +-117.65,34.04,28.0,2360.0,607.0,2623.0,592.0,2.5048,100000.0,INLAND +-117.64,34.05,32.0,1129.0,251.0,1378.0,268.0,3.0057,96900.0,INLAND +-117.64,34.05,27.0,1407.0,362.0,1684.0,350.0,2.1944,95700.0,INLAND +-117.64,34.03,11.0,2050.0,382.0,1044.0,371.0,4.8281,137000.0,INLAND +-117.64,34.04,21.0,1801.0,507.0,2556.0,484.0,2.4716,102500.0,INLAND +-117.64,34.03,10.0,3194.0,579.0,2088.0,549.0,4.1779,159100.0,INLAND +-117.64,34.02,10.0,4887.0,930.0,2637.0,831.0,4.0611,158000.0,INLAND +-117.63,34.02,13.0,4864.0,729.0,2780.0,723.0,5.6168,175400.0,INLAND +-117.62,34.02,9.0,4265.0,587.0,2280.0,589.0,5.5632,195100.0,INLAND +-117.62,34.03,15.0,3942.0,661.0,2240.0,621.0,4.8311,176000.0,INLAND +-117.62,34.02,16.0,2040.0,325.0,1207.0,324.0,5.0431,164100.0,INLAND +-117.61,34.02,15.0,1791.0,346.0,1219.0,328.0,3.8125,170300.0,INLAND +-117.6,34.02,16.0,2103.0,348.0,1305.0,356.0,5.2849,160400.0,INLAND +-117.6,34.03,16.0,1499.0,232.0,918.0,239.0,5.5677,175400.0,INLAND +-117.62,34.05,33.0,883.0,211.0,1007.0,210.0,2.8281,103600.0,INLAND +-117.61,34.04,8.0,4116.0,766.0,1785.0,745.0,3.1672,150200.0,INLAND +-117.66,34.02,12.0,5616.0,871.0,3019.0,782.0,5.5425,202300.0,INLAND +-117.64,34.02,6.0,248.0,47.0,119.0,42.0,2.125,416700.0,INLAND +-117.61,34.01,25.0,352.0,41.0,99.0,34.0,3.9696,500000.0,INLAND +-117.61,34.02,8.0,63.0,9.0,25.0,7.0,7.7197,275000.0,INLAND +-117.64,33.99,29.0,1005.0,152.0,513.0,149.0,2.4375,181300.0,INLAND +-117.66,34.0,5.0,1387.0,236.0,855.0,270.0,5.411,201100.0,INLAND +-117.6,33.98,26.0,1225.0,199.0,717.0,204.0,2.7284,225000.0,INLAND +-117.63,33.94,36.0,447.0,95.0,2886.0,85.0,4.2578,183300.0,INLAND +-117.58,34.0,2.0,7544.0,1516.0,2801.0,1001.0,4.0037,245200.0,INLAND +-117.57,34.15,3.0,12806.0,2219.0,4249.0,1499.0,5.485,343100.0,INLAND +-117.57,34.13,5.0,6135.0,879.0,2795.0,781.0,5.9369,225200.0,INLAND +-117.54,34.12,4.0,17577.0,2819.0,7766.0,2473.0,5.1333,181800.0,INLAND +-117.54,34.11,16.0,2114.0,374.0,1463.0,399.0,3.9241,131500.0,INLAND +-117.51,34.14,21.0,2455.0,381.0,1094.0,327.0,4.6437,191700.0,INLAND +-117.5,34.12,2.0,11965.0,1802.0,4436.0,1296.0,5.285,191700.0,INLAND +-117.51,34.16,2.0,718.0,98.0,119.0,50.0,4.1,315000.0,INLAND +-117.55,34.14,3.0,5710.0,919.0,2874.0,886.0,5.3638,206300.0,INLAND +-117.59,34.16,10.0,9467.0,1181.0,3819.0,1122.0,7.8252,361400.0,INLAND +-117.58,34.14,7.0,11818.0,1745.0,5499.0,1600.0,5.3678,231700.0,INLAND +-117.62,34.15,16.0,13556.0,1704.0,5669.0,1668.0,6.5138,311500.0,INLAND +-117.61,34.14,14.0,15809.0,2485.0,7363.0,2410.0,5.5198,245600.0,INLAND +-117.61,34.13,21.0,8416.0,1386.0,4308.0,1341.0,4.4611,164600.0,INLAND +-117.61,34.12,17.0,6709.0,1198.0,3954.0,1161.0,4.6997,156900.0,INLAND +-117.59,34.13,10.0,20263.0,3915.0,9716.0,3744.0,3.8505,169600.0,INLAND +-117.58,34.11,14.0,11635.0,2055.0,6443.0,2009.0,4.7547,157600.0,INLAND +-117.6,34.11,18.0,6025.0,1062.0,3360.0,1028.0,4.8889,155700.0,INLAND +-117.56,34.12,4.0,6956.0,1271.0,3455.0,1228.0,4.7193,178700.0,INLAND +-117.56,34.12,4.0,5351.0,1210.0,2988.0,1101.0,3.7973,181300.0,INLAND +-117.61,34.1,9.0,18956.0,4095.0,10323.0,3832.0,3.6033,132600.0,INLAND +-117.59,34.1,17.0,3646.0,1035.0,1987.0,895.0,2.3603,139300.0,INLAND +-117.58,34.1,4.0,6360.0,1584.0,3359.0,1396.0,3.5186,127800.0,INLAND +-117.58,34.09,27.0,754.0,200.0,746.0,185.0,1.9531,100800.0,INLAND +-117.59,34.09,16.0,2401.0,465.0,1757.0,500.0,3.9755,120400.0,INLAND +-117.57,34.07,4.0,2152.0,580.0,1083.0,441.0,3.1458,118800.0,INLAND +-117.59,34.03,16.0,3443.0,562.0,2130.0,564.0,5.0769,161400.0,INLAND +-117.59,34.02,14.0,1463.0,261.0,881.0,245.0,4.7857,152500.0,INLAND +-117.58,34.02,4.0,5998.0,1092.0,3182.0,1042.0,5.2692,174800.0,INLAND +-117.57,34.02,5.0,6933.0,1311.0,3845.0,1285.0,4.6727,158900.0,INLAND +-117.53,34.06,18.0,5605.0,1303.0,4028.0,1145.0,2.9386,116400.0,INLAND +-117.53,34.1,5.0,2185.0,488.0,1379.0,458.0,3.7917,103000.0,INLAND +-117.42,34.13,4.0,11587.0,1796.0,5804.0,1705.0,4.8283,141900.0,INLAND +-117.43,34.12,7.0,5954.0,1071.0,3567.0,1070.0,3.2056,134100.0,INLAND +-117.45,34.13,16.0,5058.0,965.0,3388.0,878.0,3.6417,119000.0,INLAND +-117.46,34.14,10.0,714.0,131.0,381.0,119.0,0.8926,116100.0,INLAND +-117.47,34.12,6.0,10565.0,1767.0,5690.0,1555.0,4.1797,141000.0,INLAND +-117.46,34.1,35.0,908.0,226.0,667.0,203.0,2.5833,93500.0,INLAND +-117.46,34.1,7.0,1759.0,473.0,1064.0,328.0,1.9583,108800.0,INLAND +-117.46,34.09,8.0,4711.0,963.0,3310.0,988.0,3.5488,101600.0,INLAND +-117.48,34.09,32.0,3170.0,630.0,2612.0,580.0,3.6394,99200.0,INLAND +-117.48,34.09,32.0,1650.0,328.0,1124.0,290.0,3.1838,98600.0,INLAND +-117.48,34.1,30.0,2287.0,531.0,1796.0,503.0,2.5833,90600.0,INLAND +-117.46,34.08,18.0,3830.0,750.0,2767.0,702.0,3.6602,120700.0,INLAND +-117.46,34.07,19.0,3155.0,572.0,2482.0,642.0,2.9973,113400.0,INLAND +-117.48,34.08,28.0,1922.0,382.0,1565.0,340.0,3.915,117400.0,INLAND +-117.48,34.08,17.0,1834.0,390.0,1253.0,357.0,3.1028,106400.0,INLAND +-117.47,34.07,24.0,1017.0,227.0,568.0,187.0,1.5972,112500.0,INLAND +-117.42,34.06,27.0,2532.0,495.0,1305.0,436.0,2.9107,143100.0,INLAND +-117.46,34.06,24.0,2831.0,478.0,1582.0,435.0,4.3397,195600.0,INLAND +-117.47,34.06,33.0,1379.0,273.0,884.0,229.0,2.7574,125000.0,INLAND +-117.49,34.05,20.0,1483.0,249.0,660.0,194.0,3.9464,207700.0,INLAND +-117.5,34.04,5.0,3958.0,665.0,2456.0,666.0,5.1647,154700.0,INLAND +-117.5,34.04,4.0,3428.0,649.0,2158.0,632.0,5.0175,143400.0,INLAND +-117.49,34.04,4.0,6034.0,1170.0,3527.0,1098.0,4.1775,143700.0,INLAND +-117.46,34.04,3.0,12870.0,2315.0,5820.0,1759.0,4.2429,147300.0,INLAND +-117.38,34.14,11.0,10804.0,1493.0,5221.0,1482.0,5.246,161400.0,INLAND +-117.4,34.15,4.0,12156.0,1864.0,5020.0,1524.0,4.7909,149200.0,INLAND +-117.4,34.18,16.0,1769.0,254.0,1778.0,251.0,5.3671,181800.0,INLAND +-117.38,34.2,16.0,193.0,45.0,312.0,76.0,3.7578,137500.0,INLAND +-117.45,34.11,7.0,6356.0,1244.0,4052.0,1164.0,2.9112,121700.0,INLAND +-117.45,34.1,9.0,4288.0,1017.0,3156.0,900.0,2.7827,105800.0,INLAND +-117.45,34.1,6.0,5571.0,1316.0,4048.0,1154.0,2.0308,91100.0,INLAND +-117.42,34.11,25.0,4261.0,893.0,2319.0,702.0,3.3958,111900.0,INLAND +-117.42,34.1,18.0,3977.0,809.0,2231.0,742.0,4.1399,115400.0,INLAND +-117.43,34.1,34.0,1345.0,265.0,834.0,290.0,3.7011,99500.0,INLAND +-117.43,34.11,17.0,4109.0,884.0,2544.0,780.0,2.7757,109800.0,INLAND +-117.43,34.1,43.0,1898.0,418.0,971.0,366.0,2.4735,89900.0,INLAND +-117.44,34.1,43.0,1614.0,400.0,926.0,349.0,2.075,95100.0,INLAND +-117.44,34.09,24.0,3477.0,831.0,2541.0,753.0,2.3682,97400.0,INLAND +-117.44,34.09,12.0,3598.0,828.0,2588.0,781.0,2.375,113800.0,INLAND +-117.44,34.08,15.0,5024.0,992.0,3208.0,981.0,3.6025,116400.0,INLAND +-117.42,34.09,28.0,3193.0,525.0,1750.0,523.0,4.1375,128300.0,INLAND +-117.42,34.08,28.0,2300.0,419.0,1312.0,444.0,3.4844,127700.0,INLAND +-117.43,34.08,31.0,3207.0,560.0,1582.0,538.0,4.263,127400.0,INLAND +-117.43,34.09,18.0,3172.0,632.0,1621.0,573.0,2.7437,120200.0,INLAND +-117.42,34.08,21.0,4460.0,930.0,2657.0,839.0,2.7569,127500.0,INLAND +-117.43,34.08,13.0,4563.0,1187.0,2475.0,1019.0,2.1189,121700.0,INLAND +-117.45,34.07,21.0,3465.0,639.0,2292.0,628.0,3.3553,113500.0,INLAND +-117.43,34.07,18.0,2453.0,537.0,1503.0,500.0,2.3768,95300.0,INLAND +-117.41,34.11,12.0,6758.0,1550.0,3204.0,1279.0,2.5181,105500.0,INLAND +-117.41,34.1,5.0,4937.0,1139.0,2204.0,812.0,2.5272,92000.0,INLAND +-117.4,34.08,21.0,3622.0,667.0,2503.0,720.0,3.8531,105400.0,INLAND +-117.41,34.08,38.0,1541.0,290.0,861.0,299.0,3.5655,95600.0,INLAND +-117.41,34.09,21.0,3300.0,587.0,1896.0,572.0,3.6466,130600.0,INLAND +-117.41,34.1,29.0,1362.0,251.0,776.0,253.0,3.1287,102000.0,INLAND +-117.41,34.11,29.0,3999.0,772.0,2602.0,760.0,3.5481,105500.0,INLAND +-117.4,34.11,14.0,1933.0,347.0,1443.0,376.0,4.2121,128100.0,INLAND +-117.39,34.11,5.0,2987.0,457.0,1821.0,485.0,4.8889,138900.0,INLAND +-117.39,34.11,16.0,1140.0,181.0,627.0,206.0,4.9444,132700.0,INLAND +-117.38,34.11,36.0,1497.0,264.0,894.0,275.0,3.3066,96300.0,INLAND +-117.38,34.11,32.0,3179.0,662.0,1878.0,661.0,3.1375,101200.0,INLAND +-117.39,34.1,12.0,7184.0,1516.0,4862.0,1235.0,2.4492,103800.0,INLAND +-117.39,34.1,19.0,1000.0,211.0,572.0,230.0,2.4028,112500.0,INLAND +-117.39,34.13,9.0,2228.0,398.0,1316.0,370.0,4.1632,119800.0,INLAND +-117.38,34.13,13.0,2903.0,510.0,1844.0,510.0,3.7198,112900.0,INLAND +-117.37,34.13,17.0,2681.0,470.0,1621.0,459.0,3.875,118500.0,INLAND +-117.38,34.13,23.0,1326.0,300.0,722.0,263.0,2.1856,107800.0,INLAND +-117.37,34.13,12.0,1893.0,493.0,1054.0,389.0,2.3456,140800.0,INLAND +-117.38,34.12,17.0,5959.0,1208.0,4115.0,1088.0,2.4053,105200.0,INLAND +-117.39,34.12,7.0,5059.0,780.0,3253.0,801.0,4.9196,140500.0,INLAND +-117.38,34.09,8.0,3955.0,815.0,2184.0,725.0,3.3438,127600.0,INLAND +-117.36,34.09,32.0,3616.0,631.0,2131.0,593.0,3.2879,95500.0,INLAND +-117.37,34.08,17.0,2029.0,404.0,1190.0,437.0,2.9554,115000.0,INLAND +-117.38,34.08,11.0,5684.0,1139.0,3095.0,1036.0,3.6875,112600.0,INLAND +-117.38,34.07,6.0,1156.0,191.0,910.0,234.0,4.9091,122400.0,INLAND +-117.37,34.07,52.0,50.0,9.0,60.0,16.0,4.125,262500.0,INLAND +-117.36,34.08,4.0,8866.0,1832.0,4775.0,1554.0,3.7348,125800.0,INLAND +-117.4,34.09,5.0,6190.0,993.0,3615.0,963.0,4.4034,133200.0,INLAND +-117.39,34.09,10.0,5736.0,945.0,3528.0,932.0,4.3958,130700.0,INLAND +-117.39,34.07,15.0,1966.0,331.0,1118.0,323.0,3.8558,122700.0,INLAND +-117.39,34.07,26.0,1387.0,277.0,664.0,239.0,3.0278,96800.0,INLAND +-117.4,34.07,28.0,2879.0,659.0,1661.0,554.0,2.066,88100.0,INLAND +-117.37,34.1,44.0,2087.0,447.0,1270.0,423.0,2.3889,86100.0,INLAND +-117.37,34.1,10.0,3404.0,855.0,1656.0,675.0,1.6977,91300.0,INLAND +-117.35,34.12,22.0,5640.0,889.0,3157.0,887.0,4.1581,126500.0,INLAND +-117.36,34.11,35.0,2969.0,521.0,1555.0,503.0,3.25,107100.0,INLAND +-117.37,34.12,32.0,3190.0,568.0,1614.0,512.0,3.8398,118200.0,INLAND +-117.37,34.13,18.0,5877.0,1043.0,3114.0,1002.0,4.0294,133200.0,INLAND +-117.35,34.13,26.0,3920.0,570.0,1862.0,552.0,3.7286,132000.0,INLAND +-117.36,34.1,29.0,2819.0,637.0,1683.0,608.0,2.3205,87600.0,INLAND +-117.36,34.1,31.0,2587.0,531.0,1227.0,489.0,2.3578,88600.0,INLAND +-117.36,34.1,33.0,1904.0,343.0,1366.0,338.0,3.6227,92800.0,INLAND +-117.38,34.06,17.0,3139.0,569.0,1612.0,516.0,3.3571,112300.0,INLAND +-117.4,34.06,17.0,5451.0,1008.0,3533.0,940.0,3.9191,101600.0,INLAND +-117.4,34.04,17.0,1906.0,334.0,1550.0,338.0,3.025,81800.0,INLAND +-117.39,34.04,27.0,2919.0,549.0,1841.0,564.0,2.8682,96400.0,INLAND +-117.35,34.04,14.0,2991.0,522.0,1729.0,537.0,3.5139,146800.0,INLAND +-117.35,34.17,28.0,1905.0,372.0,1480.0,341.0,2.9844,79200.0,INLAND +-117.34,34.16,31.0,1606.0,354.0,1049.0,335.0,2.1935,72700.0,INLAND +-117.33,34.15,28.0,1473.0,333.0,1196.0,312.0,1.6993,67800.0,INLAND +-117.32,34.14,32.0,1691.0,353.0,1457.0,329.0,1.8438,66600.0,INLAND +-117.33,34.14,29.0,1646.0,391.0,1296.0,351.0,1.9423,69700.0,INLAND +-117.34,34.14,37.0,1834.0,393.0,1198.0,348.0,2.225,81600.0,INLAND +-117.35,34.15,32.0,2699.0,552.0,2086.0,551.0,2.2974,84500.0,INLAND +-117.35,34.16,36.0,1717.0,348.0,1054.0,279.0,2.4444,73400.0,INLAND +-117.32,34.13,41.0,1837.0,409.0,1430.0,344.0,2.4524,70400.0,INLAND +-117.32,34.12,37.0,2868.0,574.0,2055.0,563.0,2.3508,70500.0,INLAND +-117.32,34.12,39.0,2210.0,498.0,1752.0,477.0,1.4066,66400.0,INLAND +-117.33,34.12,33.0,933.0,219.0,838.0,211.0,1.3417,69000.0,INLAND +-117.33,34.13,30.0,2335.0,363.0,1214.0,311.0,2.2449,93200.0,INLAND +-117.33,34.13,18.0,3009.0,740.0,2317.0,659.0,1.6375,72400.0,INLAND +-117.34,34.13,29.0,1494.0,286.0,991.0,280.0,2.125,70600.0,INLAND +-117.34,34.13,29.0,331.0,85.0,341.0,107.0,0.7069,70300.0,INLAND +-117.32,34.11,38.0,1462.0,337.0,1208.0,324.0,2.2604,68100.0,INLAND +-117.32,34.11,41.0,1229.0,302.0,994.0,270.0,1.4891,67300.0,INLAND +-117.33,34.12,38.0,1703.0,385.0,1356.0,363.0,2.0391,70400.0,INLAND +-117.34,34.12,26.0,1008.0,164.0,568.0,196.0,3.3516,105600.0,INLAND +-117.34,34.11,29.0,2912.0,566.0,2188.0,518.0,3.2656,90600.0,INLAND +-117.35,34.11,34.0,2104.0,388.0,1578.0,365.0,3.0833,88400.0,INLAND +-117.34,34.1,14.0,11827.0,2445.0,6640.0,2299.0,2.4878,103800.0,INLAND +-117.35,34.09,14.0,5983.0,1224.0,3255.0,1150.0,2.5902,111500.0,INLAND +-117.35,34.2,5.0,9269.0,1605.0,4916.0,1519.0,4.4367,133200.0,INLAND +-117.38,34.22,16.0,774.0,122.0,489.0,136.0,5.7628,221300.0,INLAND +-117.41,34.24,20.0,1160.0,181.0,543.0,188.0,5.2072,164300.0,INLAND +-117.41,34.23,17.0,889.0,131.0,439.0,141.0,6.1426,155000.0,INLAND +-117.28,34.17,26.0,3106.0,603.0,1396.0,576.0,3.1736,122200.0,INLAND +-117.28,34.17,26.0,3728.0,888.0,1765.0,727.0,1.7456,86800.0,INLAND +-117.29,34.17,35.0,4174.0,847.0,2127.0,778.0,3.2232,88300.0,INLAND +-117.3,34.18,28.0,2685.0,425.0,1304.0,420.0,4.3676,111100.0,INLAND +-117.3,34.17,30.0,2483.0,573.0,1172.0,438.0,1.875,89700.0,INLAND +-117.31,34.17,25.0,2795.0,596.0,1650.0,569.0,3.0078,87100.0,INLAND +-117.32,34.17,6.0,5661.0,1287.0,2943.0,1162.0,3.6362,106500.0,INLAND +-117.3,34.18,19.0,2526.0,381.0,1176.0,381.0,5.5136,137100.0,INLAND +-117.32,34.19,6.0,1068.0,182.0,999.0,188.0,4.7222,109000.0,INLAND +-117.34,34.18,7.0,2914.0,481.0,1584.0,499.0,4.6312,124900.0,INLAND +-117.33,34.17,5.0,4718.0,1140.0,2564.0,1056.0,2.9877,119900.0,INLAND +-117.33,34.17,13.0,3616.0,665.0,2189.0,620.0,3.7949,106300.0,INLAND +-117.32,34.16,9.0,711.0,139.0,316.0,152.0,4.0156,131000.0,INLAND +-117.31,34.15,7.0,5747.0,1307.0,2578.0,1147.0,3.3281,122200.0,INLAND +-117.3,34.15,33.0,1607.0,282.0,608.0,260.0,4.3438,115000.0,INLAND +-117.3,34.15,38.0,740.0,163.0,332.0,138.0,2.4107,88000.0,INLAND +-117.3,34.15,40.0,961.0,199.0,509.0,182.0,2.06,85500.0,INLAND +-117.3,34.14,39.0,1781.0,335.0,841.0,320.0,1.9432,89000.0,INLAND +-117.31,34.14,44.0,1487.0,273.0,972.0,281.0,3.2292,86100.0,INLAND +-117.31,34.14,38.0,2011.0,448.0,1190.0,403.0,1.8654,89400.0,INLAND +-117.31,34.15,34.0,2037.0,385.0,1195.0,391.0,3.9231,96000.0,INLAND +-117.3,34.15,45.0,942.0,166.0,401.0,174.0,3.8594,90800.0,INLAND +-117.31,34.13,38.0,1287.0,284.0,1047.0,269.0,2.2865,65500.0,INLAND +-117.3,34.12,34.0,1127.0,275.0,971.0,249.0,2.0583,64800.0,INLAND +-117.31,34.12,37.0,1412.0,343.0,1127.0,351.0,1.1667,70900.0,INLAND +-117.31,34.13,35.0,1622.0,393.0,1296.0,362.0,1.9286,68500.0,INLAND +-117.31,34.13,36.0,1076.0,283.0,773.0,224.0,2.6307,66400.0,INLAND +-117.3,34.11,42.0,525.0,111.0,444.0,120.0,2.6771,67000.0,INLAND +-117.31,34.11,38.0,1208.0,321.0,1225.0,317.0,1.4663,64000.0,INLAND +-117.31,34.11,52.0,851.0,190.0,731.0,190.0,1.9044,64900.0,INLAND +-117.31,34.11,41.0,1105.0,257.0,816.0,197.0,1.9375,64100.0,INLAND +-117.31,34.1,52.0,1457.0,415.0,1238.0,341.0,2.0089,68100.0,INLAND +-117.3,34.1,44.0,589.0,130.0,504.0,137.0,1.775,63400.0,INLAND +-117.31,34.1,28.0,2899.0,755.0,2406.0,655.0,1.5208,69500.0,INLAND +-117.32,34.1,27.0,2053.0,461.0,1737.0,463.0,3.1213,78800.0,INLAND +-117.32,34.1,42.0,801.0,176.0,711.0,183.0,1.8681,59700.0,INLAND +-117.3,34.09,40.0,1051.0,244.0,745.0,243.0,2.1842,75200.0,INLAND +-117.31,34.09,34.0,1336.0,345.0,1009.0,311.0,1.608,73700.0,INLAND +-117.27,34.16,32.0,2894.0,427.0,1151.0,446.0,6.2236,159700.0,INLAND +-117.28,34.15,36.0,1734.0,280.0,604.0,259.0,3.8292,122200.0,INLAND +-117.28,34.15,38.0,1981.0,343.0,796.0,344.0,3.8125,97400.0,INLAND +-117.29,34.15,42.0,1811.0,345.0,856.0,352.0,2.9667,97000.0,INLAND +-117.29,34.16,38.0,2458.0,488.0,1135.0,453.0,2.875,99100.0,INLAND +-117.28,34.16,26.0,2469.0,532.0,1068.0,501.0,1.9832,122100.0,INLAND +-117.28,34.16,35.0,2028.0,456.0,972.0,398.0,2.3778,90700.0,INLAND +-117.28,34.15,32.0,2170.0,430.0,815.0,401.0,3.1765,135000.0,INLAND +-117.28,34.14,40.0,2364.0,438.0,968.0,416.0,3.4906,93300.0,INLAND +-117.29,34.14,52.0,1683.0,266.0,646.0,256.0,4.0481,97300.0,INLAND +-117.29,34.15,49.0,1820.0,321.0,757.0,324.0,3.2976,102600.0,INLAND +-117.28,34.14,40.0,2190.0,496.0,1214.0,493.0,2.3947,81900.0,INLAND +-117.29,34.14,45.0,1598.0,314.0,771.0,319.0,2.5417,82900.0,INLAND +-117.29,34.14,48.0,1717.0,307.0,610.0,267.0,3.125,97600.0,INLAND +-117.29,34.14,39.0,1989.0,401.0,805.0,341.0,2.425,90000.0,INLAND +-117.3,34.14,37.0,1454.0,261.0,761.0,248.0,2.3438,88100.0,INLAND +-117.28,34.13,44.0,2469.0,568.0,1363.0,517.0,1.8396,77100.0,INLAND +-117.28,34.13,29.0,2077.0,577.0,1418.0,524.0,1.8281,76800.0,INLAND +-117.3,34.13,52.0,1859.0,395.0,968.0,333.0,1.2034,79500.0,INLAND +-117.29,34.13,52.0,2424.0,528.0,1171.0,455.0,1.4815,77900.0,INLAND +-117.28,34.12,36.0,2991.0,822.0,2378.0,751.0,1.3571,70600.0,INLAND +-117.29,34.12,40.0,2198.0,612.0,1517.0,531.0,1.0951,65800.0,INLAND +-117.29,34.13,44.0,2337.0,563.0,1238.0,467.0,1.5156,75800.0,INLAND +-117.3,34.13,42.0,2115.0,557.0,1532.0,494.0,1.4531,71500.0,INLAND +-117.3,34.12,43.0,1018.0,261.0,736.0,215.0,2.6,66900.0,INLAND +-117.28,34.12,47.0,2456.0,611.0,1653.0,512.0,1.3973,66100.0,INLAND +-117.29,34.12,47.0,1648.0,432.0,1308.0,385.0,1.2069,68200.0,INLAND +-117.29,34.12,45.0,1369.0,351.0,1046.0,274.0,1.8438,72100.0,INLAND +-117.3,34.12,50.0,1629.0,437.0,1581.0,394.0,2.2019,63500.0,INLAND +-117.29,34.11,48.0,1498.0,448.0,1586.0,455.0,1.1687,70800.0,INLAND +-117.29,34.11,35.0,2014.0,677.0,1714.0,612.0,0.7075,78800.0,INLAND +-117.29,34.11,35.0,2426.0,715.0,1920.0,586.0,1.5561,68000.0,INLAND +-117.28,34.11,39.0,1573.0,418.0,1258.0,359.0,1.4896,69500.0,INLAND +-117.29,34.1,19.0,1204.0,405.0,844.0,424.0,0.7235,71300.0,INLAND +-117.29,34.09,24.0,1451.0,387.0,1178.0,330.0,1.1806,68300.0,INLAND +-117.3,34.1,49.0,60.0,11.0,76.0,13.0,2.5625,75000.0,INLAND +-117.28,34.09,44.0,376.0,,273.0,107.0,2.2917,90800.0,INLAND +-117.3,34.07,34.0,567.0,143.0,387.0,138.0,1.7981,73300.0,INLAND +-117.25,34.16,31.0,1516.0,238.0,596.0,255.0,4.3362,159400.0,INLAND +-117.25,34.16,37.0,1709.0,278.0,744.0,274.0,3.7188,116600.0,INLAND +-117.25,34.16,35.0,2707.0,481.0,1595.0,479.0,3.9018,91500.0,INLAND +-117.25,34.15,30.0,1770.0,380.0,990.0,348.0,3.3,97600.0,INLAND +-117.26,34.15,33.0,2271.0,389.0,1100.0,380.0,3.5978,88300.0,INLAND +-117.26,34.16,31.0,3538.0,658.0,1715.0,663.0,3.7125,98000.0,INLAND +-117.26,34.17,30.0,1937.0,351.0,945.0,344.0,3.8906,123700.0,INLAND +-117.27,34.17,16.0,30.0,3.0,49.0,8.0,4.625,250000.0,INLAND +-117.25,34.15,22.0,7935.0,1976.0,4523.0,1791.0,2.1465,88800.0,INLAND +-117.25,34.14,19.0,5163.0,1229.0,2680.0,1141.0,2.2482,114500.0,INLAND +-117.27,34.14,36.0,3795.0,676.0,1742.0,585.0,4.1,96400.0,INLAND +-117.27,34.14,35.0,1517.0,257.0,658.0,245.0,4.4435,97600.0,INLAND +-117.27,34.15,35.0,1490.0,253.0,705.0,253.0,3.3616,95300.0,INLAND +-117.25,34.13,33.0,2898.0,503.0,1374.0,487.0,3.6856,90000.0,INLAND +-117.25,34.13,37.0,2498.0,472.0,1291.0,487.0,3.0,83400.0,INLAND +-117.26,34.13,37.0,2403.0,550.0,1234.0,493.0,2.0,72100.0,INLAND +-117.26,34.13,39.0,3521.0,747.0,2256.0,721.0,2.1375,87500.0,INLAND +-117.27,34.12,31.0,2209.0,636.0,1314.0,562.0,1.7235,78800.0,INLAND +-117.27,34.13,40.0,1298.0,254.0,793.0,268.0,3.0721,83800.0,INLAND +-117.27,34.13,36.0,3337.0,687.0,2388.0,589.0,2.9628,87800.0,INLAND +-117.25,34.13,35.0,861.0,148.0,381.0,138.0,2.5234,88200.0,INLAND +-117.25,34.12,17.0,3107.0,752.0,2160.0,643.0,1.8463,72600.0,INLAND +-117.25,34.11,32.0,2910.0,641.0,2011.0,614.0,2.7473,70800.0,INLAND +-117.27,34.12,27.0,2896.0,684.0,1514.0,668.0,1.462,70200.0,INLAND +-117.27,34.12,52.0,954.0,246.0,943.0,256.0,0.8658,87500.0,INLAND +-117.25,34.11,30.0,2173.0,560.0,1509.0,486.0,1.4079,67700.0,INLAND +-117.26,34.11,33.0,1210.0,288.0,850.0,238.0,1.2171,59300.0,INLAND +-117.27,34.11,44.0,567.0,134.0,565.0,150.0,1.8281,62900.0,INLAND +-117.27,34.1,9.0,3904.0,1042.0,3688.0,896.0,1.8022,78000.0,INLAND +-117.33,34.09,29.0,1960.0,415.0,1681.0,435.0,2.9292,84500.0,INLAND +-117.33,34.08,35.0,2240.0,423.0,1394.0,396.0,3.1799,86700.0,INLAND +-117.33,34.08,37.0,2267.0,405.0,1175.0,403.0,3.75,95200.0,INLAND +-117.33,34.07,32.0,2086.0,458.0,1355.0,412.0,2.5238,89200.0,INLAND +-117.34,34.07,46.0,1851.0,425.0,1100.0,377.0,2.0461,90500.0,INLAND +-117.34,34.08,35.0,1380.0,248.0,730.0,264.0,3.2305,93700.0,INLAND +-117.34,34.08,33.0,4924.0,1007.0,3502.0,953.0,3.233,99400.0,INLAND +-117.32,34.09,38.0,1585.0,345.0,1347.0,368.0,2.375,75300.0,INLAND +-117.32,34.09,30.0,1129.0,251.0,1034.0,237.0,2.3917,78600.0,INLAND +-117.32,34.08,41.0,1359.0,264.0,786.0,244.0,2.5208,85500.0,INLAND +-117.32,34.08,46.0,1308.0,276.0,576.0,244.0,3.1875,84000.0,INLAND +-117.32,34.07,52.0,1226.0,269.0,693.0,272.0,1.9963,76900.0,INLAND +-117.32,34.06,52.0,802.0,160.0,564.0,131.0,2.1591,63500.0,INLAND +-117.33,34.05,26.0,613.0,149.0,431.0,130.0,1.3977,73100.0,INLAND +-117.33,34.06,42.0,530.0,123.0,390.0,124.0,1.0469,67000.0,INLAND +-117.33,34.06,48.0,732.0,149.0,486.0,139.0,2.5673,68200.0,INLAND +-117.33,34.06,36.0,755.0,157.0,625.0,152.0,2.0242,65000.0,INLAND +-117.32,34.06,46.0,476.0,102.0,476.0,91.0,1.4511,73100.0,INLAND +-117.31,34.08,43.0,1697.0,387.0,1181.0,352.0,1.9234,74600.0,INLAND +-117.31,34.08,40.0,2011.0,495.0,1528.0,469.0,1.9375,69900.0,INLAND +-117.31,34.07,40.0,2936.0,732.0,2024.0,676.0,2.1139,70900.0,INLAND +-117.32,34.07,26.0,971.0,245.0,592.0,207.0,2.1125,84000.0,INLAND +-117.31,34.08,37.0,953.0,231.0,611.0,230.0,1.9926,81500.0,INLAND +-117.31,34.05,6.0,7423.0,2111.0,4092.0,1789.0,2.7002,88300.0,INLAND +-117.33,34.04,18.0,1837.0,388.0,727.0,336.0,2.5187,116700.0,INLAND +-117.33,34.03,14.0,1582.0,347.0,825.0,259.0,2.8281,106300.0,INLAND +-117.31,34.04,29.0,2481.0,383.0,1188.0,385.0,4.7344,134600.0,INLAND +-117.31,34.04,5.0,2785.0,577.0,1310.0,536.0,3.39,149500.0,INLAND +-117.3,34.05,6.0,2155.0,,1039.0,391.0,1.6675,95800.0,INLAND +-117.3,34.05,7.0,4672.0,1121.0,2534.0,1046.0,3.4228,115700.0,INLAND +-117.29,34.06,7.0,1971.0,403.0,1336.0,423.0,4.5066,111500.0,INLAND +-117.28,34.06,2.0,1658.0,290.0,868.0,304.0,5.1365,136700.0,INLAND +-117.32,34.02,17.0,1779.0,292.0,1006.0,293.0,4.6708,123100.0,INLAND +-117.33,34.03,18.0,2342.0,402.0,1264.0,382.0,4.7986,123700.0,INLAND +-117.32,34.03,13.0,3853.0,761.0,1685.0,669.0,3.9024,122400.0,INLAND +-117.31,34.03,24.0,1966.0,299.0,786.0,302.0,5.0318,134500.0,INLAND +-117.31,34.03,9.0,1199.0,187.0,629.0,207.0,5.7393,151600.0,INLAND +-117.31,34.02,18.0,1634.0,274.0,899.0,285.0,5.2139,129300.0,INLAND +-117.29,34.03,9.0,8185.0,1525.0,3630.0,1466.0,4.1667,197700.0,INLAND +-117.27,34.09,36.0,848.0,186.0,737.0,169.0,0.9838,79300.0,INLAND +-117.27,34.08,38.0,1093.0,256.0,856.0,212.0,1.4279,73000.0,INLAND +-117.25,34.08,30.0,2981.0,605.0,1784.0,573.0,2.45,85800.0,INLAND +-117.25,34.07,21.0,3067.0,706.0,2140.0,687.0,2.4432,78800.0,INLAND +-117.27,34.07,21.0,418.0,132.0,401.0,120.0,1.7206,82100.0,INLAND +-117.24,34.04,17.0,3362.0,507.0,1520.0,496.0,6.1986,214500.0,INLAND +-117.25,34.04,18.0,5761.0,1063.0,2763.0,1058.0,4.4472,161100.0,INLAND +-117.27,34.05,34.0,1703.0,395.0,849.0,359.0,3.1607,138200.0,INLAND +-117.27,34.06,20.0,5258.0,1514.0,3780.0,1404.0,2.025,85700.0,INLAND +-117.25,34.06,23.0,4503.0,1156.0,3264.0,937.0,1.9821,93000.0,INLAND +-117.25,34.06,18.0,5009.0,1108.0,2948.0,963.0,3.0042,106500.0,INLAND +-117.24,34.04,5.0,1775.0,234.0,726.0,222.0,7.978,223900.0,INLAND +-117.24,34.04,4.0,4289.0,682.0,1981.0,705.0,5.3366,165100.0,INLAND +-117.24,34.06,9.0,3603.0,786.0,1782.0,718.0,3.2604,93300.0,INLAND +-117.23,34.15,17.0,5036.0,817.0,2084.0,833.0,4.6445,137200.0,INLAND +-117.23,34.14,16.0,2577.0,521.0,956.0,472.0,2.5625,129400.0,INLAND +-117.24,34.14,6.0,2383.0,606.0,1301.0,488.0,3.016,107500.0,INLAND +-117.24,34.15,23.0,3847.0,608.0,1621.0,630.0,4.6111,128400.0,INLAND +-117.24,34.15,26.0,2041.0,293.0,936.0,375.0,6.0,140200.0,INLAND +-117.21,34.14,16.0,1613.0,245.0,811.0,267.0,5.2591,140700.0,INLAND +-117.22,34.15,9.0,2524.0,352.0,1139.0,362.0,6.2516,159300.0,INLAND +-117.2,34.15,18.0,1859.0,251.0,747.0,256.0,7.732,173200.0,INLAND +-117.2,34.14,14.0,2647.0,524.0,989.0,479.0,3.1513,160000.0,INLAND +-117.2,34.14,18.0,1920.0,333.0,890.0,323.0,5.159,144800.0,INLAND +-117.24,34.13,24.0,1203.0,310.0,594.0,187.0,1.1522,87500.0,INLAND +-117.24,34.13,26.0,3774.0,716.0,1913.0,620.0,3.3534,98900.0,INLAND +-117.23,34.12,6.0,4464.0,1093.0,2364.0,952.0,2.3848,81600.0,INLAND +-117.23,34.13,10.0,1145.0,293.0,726.0,251.0,1.645,68700.0,INLAND +-117.22,34.13,10.0,5951.0,1330.0,3204.0,1159.0,2.7011,110200.0,INLAND +-117.2,34.13,14.0,3998.0,711.0,1509.0,665.0,3.4138,126700.0,INLAND +-117.22,34.12,34.0,2457.0,499.0,1538.0,507.0,2.809,82500.0,INLAND +-117.21,34.13,31.0,3037.0,565.0,1834.0,575.0,3.3445,92900.0,INLAND +-117.2,34.12,24.0,3532.0,618.0,1681.0,590.0,3.5,113900.0,INLAND +-117.24,34.12,29.0,2654.0,667.0,1822.0,593.0,2.1563,72300.0,INLAND +-117.24,34.11,23.0,1920.0,454.0,1161.0,358.0,2.2109,73200.0,INLAND +-117.23,34.11,22.0,1162.0,221.0,995.0,244.0,2.5875,81300.0,INLAND +-117.23,34.12,18.0,1439.0,319.0,699.0,310.0,2.1071,73500.0,INLAND +-117.23,34.11,33.0,2170.0,500.0,1425.0,472.0,2.0133,78300.0,INLAND +-117.22,34.12,30.0,2512.0,597.0,1390.0,523.0,2.3725,77200.0,INLAND +-117.22,34.11,26.0,2972.0,,1972.0,532.0,2.0388,80400.0,INLAND +-117.21,34.12,32.0,1677.0,354.0,1021.0,339.0,3.6853,90900.0,INLAND +-117.21,34.11,27.0,1245.0,229.0,692.0,234.0,3.2176,89400.0,INLAND +-117.21,34.11,26.0,1757.0,304.0,905.0,281.0,3.4103,90900.0,INLAND +-117.19,34.1,5.0,2167.0,384.0,1174.0,358.0,4.0114,97700.0,INLAND +-117.21,34.08,5.0,5749.0,1385.0,2382.0,1088.0,3.0587,143100.0,INLAND +-117.22,34.07,8.0,3065.0,692.0,1440.0,666.0,3.2368,129200.0,INLAND +-117.17,34.12,2.0,3867.0,573.0,1275.0,433.0,5.4138,164400.0,INLAND +-117.12,34.1,40.0,96.0,14.0,46.0,14.0,3.2708,162500.0,INLAND +-117.17,34.12,3.0,15695.0,2248.0,6080.0,1920.0,6.2178,173900.0,INLAND +-117.18,34.08,28.0,2243.0,399.0,1464.0,379.0,3.2105,90300.0,INLAND +-117.19,34.08,22.0,2467.0,555.0,1567.0,494.0,2.6536,84700.0,INLAND +-117.19,34.08,5.0,4458.0,751.0,2392.0,773.0,4.5938,126500.0,INLAND +-117.18,34.07,14.0,1258.0,245.0,752.0,264.0,3.3924,97400.0,INLAND +-117.18,34.07,28.0,1306.0,279.0,885.0,255.0,2.1154,75300.0,INLAND +-117.18,34.07,7.0,1347.0,301.0,799.0,276.0,2.9485,112500.0,INLAND +-117.18,34.06,26.0,1953.0,446.0,1284.0,414.0,1.3485,85100.0,INLAND +-117.18,34.06,28.0,699.0,180.0,432.0,168.0,2.1875,81900.0,INLAND +-117.19,34.06,37.0,1467.0,348.0,1316.0,339.0,1.448,72800.0,INLAND +-117.19,34.07,40.0,2374.0,500.0,1772.0,455.0,2.189,72500.0,INLAND +-117.18,34.06,52.0,954.0,233.0,533.0,239.0,1.3021,100000.0,INLAND +-117.19,34.06,21.0,6107.0,1559.0,2805.0,1444.0,2.5643,102700.0,INLAND +-117.18,34.05,29.0,3436.0,731.0,1323.0,676.0,2.4943,122300.0,INLAND +-117.17,34.05,29.0,4007.0,700.0,1576.0,696.0,3.1801,149300.0,INLAND +-117.18,34.04,41.0,1766.0,288.0,753.0,278.0,4.9125,140700.0,INLAND +-117.18,34.05,52.0,1820.0,342.0,601.0,315.0,2.6129,137000.0,INLAND +-117.19,34.05,52.0,1949.0,432.0,767.0,392.0,2.5143,117600.0,INLAND +-117.19,34.05,33.0,1688.0,313.0,808.0,298.0,3.2188,117800.0,INLAND +-117.19,34.05,33.0,3007.0,498.0,1252.0,488.0,3.8816,134600.0,INLAND +-117.2,34.04,24.0,1587.0,222.0,676.0,234.0,6.0715,173400.0,INLAND +-117.2,34.04,23.0,1762.0,267.0,1132.0,279.0,5.9915,153200.0,INLAND +-117.21,34.04,14.0,3063.0,426.0,1570.0,419.0,6.2917,224700.0,INLAND +-117.21,34.05,4.0,2904.0,764.0,1250.0,664.0,3.2131,137500.0,INLAND +-117.18,34.04,38.0,2492.0,381.0,1003.0,369.0,3.6875,152800.0,INLAND +-117.19,34.03,36.0,2223.0,361.0,942.0,331.0,4.6806,152400.0,INLAND +-117.19,34.03,25.0,2513.0,340.0,900.0,320.0,6.4962,182400.0,INLAND +-117.19,34.03,20.0,856.0,124.0,395.0,145.0,10.8634,381800.0,INLAND +-117.16,34.08,9.0,5306.0,993.0,2630.0,925.0,4.51,135800.0,INLAND +-117.17,34.07,24.0,6573.0,1235.0,2904.0,1202.0,3.0651,108000.0,INLAND +-117.17,34.08,5.0,1473.0,228.0,842.0,257.0,4.875,138100.0,INLAND +-117.15,34.07,15.0,1852.0,316.0,906.0,298.0,5.3526,129800.0,INLAND +-117.14,34.07,3.0,5542.0,828.0,2506.0,806.0,5.5875,162000.0,INLAND +-117.14,34.06,15.0,3057.0,510.0,1154.0,460.0,3.9741,141100.0,INLAND +-117.15,34.06,25.0,3670.0,644.0,1815.0,634.0,4.0658,127400.0,INLAND +-117.14,34.05,5.0,2634.0,359.0,1173.0,372.0,6.746,204100.0,INLAND +-117.15,34.05,9.0,1442.0,219.0,633.0,230.0,5.0227,162300.0,INLAND +-117.16,34.05,23.0,3215.0,462.0,1411.0,435.0,6.0701,149900.0,INLAND +-117.17,34.05,24.0,2877.0,507.0,1141.0,474.0,4.2059,121500.0,INLAND +-117.15,34.04,14.0,2845.0,420.0,1172.0,377.0,7.5822,283100.0,INLAND +-117.16,34.06,33.0,2101.0,468.0,1997.0,412.0,2.8125,117200.0,INLAND +-117.16,34.06,17.0,2285.0,554.0,1412.0,541.0,1.8152,94300.0,INLAND +-117.14,34.01,26.0,7561.0,1051.0,2909.0,1012.0,7.2972,269600.0,INLAND +-117.15,34.03,32.0,2832.0,393.0,1033.0,385.0,6.5648,237200.0,INLAND +-117.15,34.03,26.0,5305.0,701.0,1818.0,676.0,6.1461,217100.0,INLAND +-117.17,34.03,33.0,4583.0,648.0,1760.0,638.0,6.3308,230600.0,INLAND +-117.09,34.01,37.0,106.0,18.0,27.0,12.0,4.0556,131300.0,INLAND +-117.09,34.07,24.0,6260.0,1271.0,3132.0,1189.0,2.5156,103000.0,INLAND +-117.12,34.06,38.0,281.0,55.0,151.0,52.0,1.3906,120800.0,INLAND +-117.13,34.06,4.0,3078.0,510.0,1341.0,486.0,4.9688,163200.0,INLAND +-117.13,34.07,34.0,2405.0,541.0,1342.0,514.0,2.8031,86900.0,INLAND +-117.08,34.08,34.0,45.0,11.0,39.0,14.0,3.0625,500001.0,INLAND +-117.12,34.04,25.0,2495.0,438.0,1071.0,405.0,4.8173,146600.0,INLAND +-117.07,34.05,14.0,5764.0,1006.0,1876.0,841.0,1.9694,173200.0,INLAND +-117.03,34.07,16.0,3784.0,577.0,1615.0,525.0,4.2333,220300.0,INLAND +-117.02,34.03,19.0,4415.0,648.0,1627.0,619.0,4.2361,191600.0,INLAND +-117.03,34.02,26.0,3909.0,670.0,1884.0,665.0,4.1361,121000.0,INLAND +-117.01,34.01,15.0,5592.0,891.0,2419.0,840.0,4.7193,135200.0,INLAND +-116.98,34.05,6.0,2290.0,312.0,957.0,274.0,7.2708,316700.0,INLAND +-117.05,34.04,23.0,3967.0,766.0,1518.0,698.0,2.29,111800.0,INLAND +-117.1,34.03,24.0,4144.0,826.0,2127.0,772.0,2.5172,96000.0,INLAND +-117.08,34.03,23.0,3862.0,699.0,2082.0,652.0,3.154,115700.0,INLAND +-117.08,34.02,20.0,3111.0,563.0,1453.0,538.0,3.3365,122800.0,INLAND +-117.06,34.02,24.0,3912.0,809.0,1926.0,762.0,2.6875,116300.0,INLAND +-117.05,34.02,21.0,3098.0,646.0,1351.0,614.0,2.598,106700.0,INLAND +-117.05,34.01,27.0,5484.0,1205.0,2645.0,1131.0,2.1927,116700.0,INLAND +-117.04,34.02,24.0,4663.0,1213.0,1851.0,1116.0,1.4418,103500.0,INLAND +-117.05,34.03,28.0,3009.0,698.0,1200.0,626.0,1.3993,104600.0,INLAND +-117.06,34.03,27.0,1945.0,446.0,859.0,418.0,1.5203,126200.0,INLAND +-117.03,34.03,26.0,3501.0,664.0,1860.0,681.0,3.0403,113500.0,INLAND +-117.04,34.03,29.0,3375.0,795.0,1760.0,699.0,2.7028,92000.0,INLAND +-117.04,34.04,30.0,3474.0,735.0,1674.0,691.0,2.5863,98300.0,INLAND +-117.29,35.54,35.0,7922.0,1636.0,3431.0,1329.0,3.4145,40400.0,INLAND +-117.37,34.59,39.0,8193.0,1747.0,6852.0,1597.0,2.3832,35000.0,INLAND +-117.62,34.44,6.0,8884.0,1687.0,3767.0,1334.0,3.599,140200.0,INLAND +-117.56,34.42,6.0,4264.0,749.0,2005.0,666.0,3.4695,138800.0,INLAND +-117.51,34.41,5.0,2884.0,567.0,1396.0,465.0,3.7361,119600.0,INLAND +-117.44,34.45,6.0,6068.0,1137.0,3094.0,947.0,3.5167,130900.0,INLAND +-117.54,34.47,4.0,6712.0,1200.0,3126.0,1026.0,3.2277,126500.0,INLAND +-117.5,34.66,20.0,1319.0,309.0,486.0,196.0,2.0184,84900.0,INLAND +-117.42,34.59,8.0,5445.0,1360.0,3220.0,1214.0,1.7567,69500.0,INLAND +-117.41,34.58,14.0,859.0,212.0,541.0,181.0,1.6838,57900.0,INLAND +-117.4,34.58,18.0,755.0,169.0,483.0,165.0,1.4196,64700.0,INLAND +-117.41,34.58,10.0,2964.0,668.0,1853.0,609.0,1.6047,73400.0,INLAND +-117.54,34.55,5.0,2949.0,671.0,1620.0,530.0,2.9479,83300.0,INLAND +-117.36,34.54,7.0,3940.0,764.0,2140.0,711.0,3.0357,91300.0,INLAND +-117.63,34.37,20.0,7052.0,1306.0,2197.0,810.0,3.7252,167100.0,INLAND +-117.61,34.34,18.0,5210.0,912.0,1301.0,464.0,4.8623,176900.0,INLAND +-117.53,34.28,35.0,1529.0,338.0,688.0,256.0,4.1083,108000.0,INLAND +-117.55,34.25,39.0,1578.0,317.0,872.0,322.0,4.555,153100.0,INLAND +-117.03,34.91,27.0,2718.0,583.0,1472.0,509.0,2.825,76600.0,INLAND +-117.01,34.9,36.0,2181.0,555.0,1404.0,492.0,2.3077,55500.0,INLAND +-117.02,34.9,37.0,1199.0,351.0,782.0,296.0,1.6515,61600.0,INLAND +-117.06,34.9,36.0,2828.0,916.0,1762.0,736.0,1.4318,59600.0,INLAND +-117.01,34.9,34.0,2194.0,519.0,1326.0,515.0,2.1056,72000.0,INLAND +-117.0,34.89,29.0,2637.0,512.0,1188.0,446.0,2.99,69400.0,INLAND +-117.01,34.89,26.0,2599.0,498.0,1332.0,443.0,2.7198,70400.0,INLAND +-117.02,34.89,29.0,3111.0,661.0,1530.0,608.0,2.8281,69300.0,INLAND +-117.04,34.89,37.0,1884.0,366.0,1052.0,353.0,3.175,66800.0,INLAND +-117.05,34.89,36.0,1199.0,260.0,665.0,229.0,3.7065,62000.0,INLAND +-117.22,34.44,5.0,4787.0,910.0,1944.0,806.0,2.6576,98500.0,INLAND +-117.2,34.46,7.0,8414.0,1584.0,5146.0,1517.0,3.2794,92500.0,INLAND +-117.12,34.46,17.0,1613.0,326.0,765.0,300.0,2.6827,110400.0,INLAND +-117.11,34.43,14.0,3026.0,556.0,1349.0,485.0,2.8021,111200.0,INLAND +-117.13,34.39,29.0,2251.0,464.0,855.0,315.0,3.4183,104100.0,INLAND +-117.25,34.49,4.0,2372.0,361.0,1017.0,322.0,5.1112,170900.0,INLAND +-117.23,34.49,9.0,4055.0,536.0,1458.0,478.0,5.4201,170600.0,INLAND +-117.21,34.49,14.0,2125.0,348.0,1067.0,360.0,3.6333,116200.0,INLAND +-117.2,34.5,10.0,4201.0,850.0,2378.0,808.0,2.1781,92200.0,INLAND +-117.17,34.49,13.0,4460.0,925.0,2225.0,840.0,2.0136,94100.0,INLAND +-117.15,34.48,31.0,265.0,55.0,186.0,55.0,2.125,64800.0,INLAND +-117.18,34.48,8.0,3561.0,691.0,2156.0,659.0,2.7778,86900.0,INLAND +-117.2,34.48,7.0,4998.0,953.0,2764.0,891.0,3.205,101900.0,INLAND +-117.22,34.48,7.0,2449.0,447.0,1217.0,408.0,3.6646,109900.0,INLAND +-117.26,34.53,10.0,3103.0,520.0,1283.0,464.0,3.071,151600.0,INLAND +-117.25,34.51,7.0,3200.0,477.0,1522.0,470.0,4.6914,142200.0,INLAND +-117.23,34.51,9.0,5756.0,807.0,2158.0,758.0,5.5875,167800.0,INLAND +-117.21,34.51,17.0,4379.0,629.0,1720.0,595.0,5.086,148400.0,INLAND +-117.25,34.53,13.0,5841.0,955.0,2455.0,915.0,4.1333,158200.0,INLAND +-117.22,34.54,8.0,12526.0,2495.0,6133.0,2324.0,2.9072,119200.0,INLAND +-117.2,34.52,12.0,4476.0,761.0,2255.0,735.0,3.925,118500.0,INLAND +-117.17,34.51,15.0,5151.0,942.0,2896.0,897.0,3.4875,90800.0,INLAND +-117.18,34.54,5.0,3772.0,619.0,2097.0,635.0,3.8194,98500.0,INLAND +-117.3,34.53,38.0,1643.0,489.0,1196.0,406.0,1.2275,64100.0,INLAND +-117.3,34.54,31.0,1174.0,360.0,1161.0,328.0,1.06,56500.0,INLAND +-117.3,34.54,25.0,2546.0,488.0,1338.0,487.0,3.2596,85400.0,INLAND +-117.31,34.53,26.0,2299.0,496.0,1259.0,441.0,2.6125,79900.0,INLAND +-117.32,34.55,18.0,279.0,59.0,188.0,60.0,0.8246,91700.0,INLAND +-117.32,34.54,9.0,5904.0,1165.0,3489.0,1063.0,3.125,92800.0,INLAND +-117.33,34.53,10.0,3781.0,712.0,2044.0,685.0,3.0943,97100.0,INLAND +-117.34,34.51,6.0,5667.0,1385.0,2447.0,1199.0,2.3617,103100.0,INLAND +-117.35,34.5,10.0,2163.0,392.0,1174.0,362.0,3.375,98000.0,INLAND +-117.34,34.49,9.0,3293.0,585.0,1678.0,530.0,3.2941,98300.0,INLAND +-117.36,34.48,3.0,16533.0,2549.0,7588.0,2285.0,3.9792,122100.0,INLAND +-117.3,34.52,34.0,4493.0,838.0,2335.0,779.0,3.1635,74300.0,INLAND +-117.32,34.51,16.0,3072.0,612.0,1283.0,604.0,2.8929,115600.0,INLAND +-117.31,34.51,18.0,2704.0,698.0,1611.0,597.0,2.0243,82300.0,INLAND +-117.28,34.51,10.0,4676.0,884.0,2845.0,812.0,3.0181,100400.0,INLAND +-117.31,34.5,14.0,2443.0,447.0,883.0,465.0,2.1111,116700.0,INLAND +-117.32,34.49,7.0,4584.0,1051.0,2049.0,918.0,1.6232,93400.0,INLAND +-117.29,34.49,3.0,7689.0,1545.0,3804.0,1399.0,3.3871,111800.0,INLAND +-117.32,34.48,8.0,4627.0,887.0,2739.0,846.0,3.0204,93100.0,INLAND +-117.27,34.5,7.0,2045.0,342.0,878.0,292.0,6.0296,194100.0,INLAND +-117.27,34.49,7.0,2344.0,351.0,846.0,314.0,4.7361,174500.0,INLAND +-117.27,34.48,8.0,1794.0,276.0,690.0,271.0,3.662,165300.0,INLAND +-117.26,34.48,6.0,4632.0,753.0,1851.0,694.0,4.1933,163100.0,INLAND +-117.27,34.5,8.0,3567.0,543.0,1133.0,419.0,5.3733,302600.0,INLAND +-117.25,34.41,13.0,3682.0,668.0,1606.0,668.0,2.1875,119700.0,INLAND +-117.28,34.41,14.0,2105.0,396.0,960.0,396.0,2.9934,118200.0,INLAND +-117.29,34.41,11.0,5934.0,1380.0,2756.0,1239.0,1.5758,108300.0,INLAND +-117.3,34.39,11.0,3572.0,592.0,1876.0,507.0,3.6615,105100.0,INLAND +-117.27,34.4,8.0,6042.0,979.0,3031.0,991.0,3.3438,124400.0,INLAND +-117.27,34.39,6.0,6988.0,1121.0,3660.0,1092.0,4.2224,125700.0,INLAND +-117.31,34.35,9.0,2404.0,390.0,1074.0,359.0,5.0198,151900.0,INLAND +-117.31,34.41,14.0,3019.0,643.0,1639.0,582.0,1.5288,103400.0,INLAND +-117.32,34.41,13.0,2032.0,348.0,1038.0,344.0,4.2891,120100.0,INLAND +-117.33,34.41,13.0,3684.0,604.0,1767.0,585.0,3.7478,113500.0,INLAND +-117.34,34.39,8.0,3579.0,672.0,2216.0,630.0,3.4038,100500.0,INLAND +-117.31,34.39,15.0,1703.0,273.0,847.0,266.0,3.7917,123400.0,INLAND +-117.39,34.38,4.0,7151.0,1295.0,3527.0,1170.0,3.5696,129700.0,INLAND +-117.3,34.46,8.0,6246.0,1273.0,3883.0,1264.0,2.7917,98200.0,INLAND +-117.31,34.44,10.0,1731.0,299.0,1056.0,312.0,3.6007,104000.0,INLAND +-117.31,34.43,16.0,5130.0,1172.0,3126.0,1046.0,1.6784,71900.0,INLAND +-117.35,34.44,9.0,11810.0,2181.0,6716.0,2081.0,3.1821,95600.0,INLAND +-117.38,34.44,4.0,5083.0,867.0,2541.0,856.0,4.2414,121400.0,INLAND +-117.34,34.46,9.0,5983.0,1122.0,3515.0,1064.0,3.1505,102000.0,INLAND +-117.27,34.42,9.0,5643.0,1005.0,3166.0,957.0,3.2077,93300.0,INLAND +-117.26,34.43,11.0,4597.0,782.0,2534.0,776.0,3.3368,99300.0,INLAND +-117.27,34.45,8.0,6463.0,1095.0,3213.0,1031.0,3.2215,108800.0,INLAND +-116.72,34.89,14.0,4527.0,875.0,1640.0,590.0,2.8594,81700.0,INLAND +-115.93,35.55,18.0,1321.0,272.0,754.0,226.0,3.4028,67500.0,INLAND +-115.75,35.23,5.0,208.0,78.0,132.0,56.0,2.5333,75000.0,INLAND +-115.53,34.91,12.0,807.0,199.0,246.0,102.0,2.5391,40000.0,INLAND +-116.51,34.85,15.0,3149.0,713.0,1281.0,486.0,2.0,64700.0,INLAND +-116.57,35.43,8.0,9975.0,1743.0,6835.0,1439.0,2.7138,22500.0,INLAND +-116.14,34.45,12.0,8796.0,1721.0,11139.0,1680.0,2.2612,137500.0,INLAND +-116.32,34.1,10.0,4256.0,861.0,1403.0,686.0,2.6618,81000.0,INLAND +-116.27,34.13,37.0,452.0,109.0,184.0,59.0,3.7292,65800.0,INLAND +-116.31,34.13,20.0,2352.0,556.0,1217.0,481.0,1.6063,55400.0,INLAND +-116.35,34.13,9.0,1969.0,406.0,805.0,349.0,1.5491,62300.0,INLAND +-116.32,34.14,18.0,1880.0,487.0,994.0,425.0,1.69,54200.0,INLAND +-116.33,34.15,13.0,1808.0,411.0,735.0,320.0,1.5489,57400.0,INLAND +-116.29,34.18,15.0,4203.0,966.0,1756.0,695.0,2.182,60800.0,INLAND +-116.62,34.23,14.0,6438.0,1719.0,1586.0,691.0,1.6136,67400.0,INLAND +-116.73,34.52,16.0,1247.0,315.0,433.0,159.0,1.0568,75000.0,INLAND +-116.51,34.45,21.0,8502.0,2634.0,2330.0,991.0,1.3811,51300.0,INLAND +-116.56,34.06,15.0,6928.0,1529.0,2568.0,1075.0,2.5405,69600.0,INLAND +-116.44,34.16,19.0,1867.0,361.0,758.0,321.0,2.8929,98100.0,INLAND +-116.38,34.2,14.0,4985.0,1238.0,2517.0,954.0,2.0674,65000.0,INLAND +-116.39,34.15,15.0,5583.0,1149.0,2709.0,964.0,1.9779,73300.0,INLAND +-116.44,34.12,18.0,5584.0,1303.0,2250.0,1158.0,1.5823,72400.0,INLAND +-116.47,34.07,22.0,5473.0,1234.0,2581.0,1098.0,1.9375,65300.0,INLAND +-116.43,34.1,17.0,6683.0,1296.0,2677.0,1227.0,2.4828,84000.0,INLAND +-116.4,34.09,9.0,4855.0,872.0,2098.0,765.0,3.2723,97800.0,INLAND +-116.4,34.12,16.0,5648.0,1089.0,2524.0,1008.0,2.6739,78000.0,INLAND +-116.38,34.1,6.0,2104.0,348.0,841.0,320.0,4.1458,116300.0,INLAND +-116.22,34.21,23.0,1175.0,468.0,355.0,151.0,2.2083,42500.0,INLAND +-116.14,34.22,32.0,3298.0,1228.0,763.0,360.0,1.875,47800.0,INLAND +-116.06,34.2,29.0,1202.0,290.0,383.0,156.0,1.3371,66900.0,INLAND +-116.06,34.15,15.0,10377.0,2331.0,4507.0,1807.0,2.2466,66800.0,INLAND +-116.09,34.15,13.0,9444.0,1997.0,4166.0,1482.0,2.6111,65600.0,INLAND +-116.15,34.14,18.0,3312.0,705.0,1251.0,512.0,3.0139,82600.0,INLAND +-116.05,34.12,19.0,301.0,65.0,150.0,56.0,3.125,65600.0,INLAND +-116.02,34.18,8.0,569.0,97.0,312.0,96.0,4.3021,94500.0,INLAND +-115.85,34.2,34.0,3868.0,1257.0,890.0,423.0,1.3571,41000.0,INLAND +-115.52,34.22,30.0,540.0,136.0,122.0,63.0,1.3333,42500.0,INLAND +-116.0,34.12,32.0,3163.0,712.0,1358.0,544.0,2.125,57700.0,INLAND +-114.94,34.55,20.0,350.0,95.0,119.0,58.0,1.625,50000.0,INLAND +-114.47,34.4,19.0,7650.0,1901.0,1129.0,463.0,1.82,80100.0,INLAND +-114.31,34.19,15.0,5612.0,1283.0,1015.0,472.0,1.4936,66900.0,INLAND +-114.59,34.83,41.0,812.0,,375.0,158.0,1.7083,48500.0,INLAND +-114.65,34.89,17.0,2556.0,587.0,1005.0,401.0,1.6991,69100.0,INLAND +-114.6,34.83,46.0,1497.0,309.0,787.0,271.0,2.1908,48100.0,INLAND +-114.61,34.84,48.0,1291.0,248.0,580.0,211.0,2.1571,48600.0,INLAND +-114.61,34.83,31.0,2478.0,464.0,1346.0,479.0,3.212,70400.0,INLAND +-114.64,34.83,10.0,2502.0,573.0,1152.0,481.0,1.7062,86800.0,INLAND +-117.36,34.28,18.0,3903.0,715.0,1388.0,428.0,4.2386,157200.0,INLAND +-117.28,34.26,18.0,3895.0,,1086.0,375.0,3.3672,133600.0,INLAND +-117.31,34.25,29.0,4610.0,,1569.0,592.0,2.7663,97900.0,INLAND +-117.32,34.24,29.0,1290.0,263.0,323.0,113.0,1.9265,103300.0,INLAND +-117.3,34.24,38.0,4116.0,949.0,1196.0,422.0,3.5625,96500.0,INLAND +-117.28,34.24,16.0,3474.0,633.0,853.0,315.0,5.2185,128600.0,INLAND +-117.27,34.24,34.0,3687.0,756.0,941.0,367.0,2.875,117600.0,INLAND +-117.26,34.24,10.0,4750.0,844.0,1220.0,428.0,4.5536,132400.0,INLAND +-117.27,34.23,26.0,6339.0,1244.0,1177.0,466.0,3.7708,110400.0,INLAND +-117.16,34.26,27.0,9285.0,1621.0,1135.0,410.0,2.5446,135200.0,INLAND +-117.18,34.3,33.0,399.0,87.0,71.0,27.0,1.875,71300.0,INLAND +-117.17,34.28,13.0,4867.0,718.0,780.0,250.0,7.1997,253800.0,INLAND +-117.19,34.27,16.0,7961.0,1147.0,879.0,280.0,5.2146,255200.0,INLAND +-117.21,34.28,16.0,3326.0,569.0,527.0,192.0,5.7421,167600.0,INLAND +-117.2,34.26,17.0,9419.0,1455.0,1382.0,459.0,6.2233,230900.0,INLAND +-117.22,34.26,16.0,8020.0,1432.0,1749.0,540.0,4.9716,162500.0,INLAND +-117.2,34.24,22.0,8106.0,1665.0,1062.0,423.0,3.0434,137200.0,INLAND +-117.17,34.25,15.0,4236.0,753.0,703.0,255.0,3.5625,165500.0,INLAND +-117.21,34.22,31.0,5454.0,1053.0,1408.0,504.0,5.0,161100.0,INLAND +-117.07,34.24,21.0,4773.0,1047.0,337.0,130.0,3.9375,115000.0,INLAND +-117.13,34.24,17.0,2828.0,506.0,673.0,274.0,5.2563,144100.0,INLAND +-117.15,34.22,10.0,1039.0,174.0,317.0,109.0,7.2371,171900.0,INLAND +-117.12,34.21,19.0,4641.0,994.0,1334.0,474.0,4.5972,123900.0,INLAND +-117.1,34.21,22.0,4397.0,931.0,1145.0,445.0,4.5268,108400.0,INLAND +-117.09,34.22,16.0,1347.0,327.0,271.0,91.0,4.0,87500.0,INLAND +-117.06,34.17,21.0,2520.0,582.0,416.0,151.0,2.712,89000.0,INLAND +-117.13,34.17,17.0,1181.0,271.0,248.0,114.0,5.5762,150000.0,INLAND +-116.94,34.24,27.0,12342.0,2630.0,1300.0,566.0,1.998,153500.0,INLAND +-116.91,34.24,23.0,6379.0,1636.0,1350.0,568.0,1.6336,124500.0,INLAND +-116.9,34.25,16.0,3018.0,523.0,556.0,244.0,3.5288,189700.0,INLAND +-116.88,34.24,13.0,4137.0,796.0,573.0,218.0,4.6394,226500.0,INLAND +-116.88,34.25,11.0,1089.0,198.0,230.0,90.0,4.9643,176000.0,INLAND +-116.87,34.24,15.0,4419.0,822.0,622.0,267.0,3.9688,182800.0,INLAND +-116.86,34.24,19.0,5411.0,1042.0,441.0,185.0,3.1324,132000.0,INLAND +-116.86,34.23,13.0,4760.0,938.0,309.0,132.0,5.4618,147800.0,INLAND +-116.99,34.3,29.0,5055.0,1036.0,410.0,191.0,3.5104,157100.0,INLAND +-116.89,34.27,13.0,3661.0,770.0,567.0,228.0,4.4063,152600.0,INLAND +-116.86,34.31,19.0,1649.0,328.0,382.0,151.0,4.0556,133000.0,INLAND +-116.85,34.26,18.0,6988.0,1635.0,2044.0,726.0,2.4308,90600.0,INLAND +-116.85,34.26,19.0,5395.0,1220.0,981.0,366.0,2.6094,92400.0,INLAND +-116.85,34.25,5.0,5806.0,1030.0,569.0,219.0,4.0132,163100.0,INLAND +-116.83,34.25,15.0,8948.0,1985.0,1316.0,514.0,2.7375,90800.0,INLAND +-116.82,34.24,11.0,5799.0,1527.0,713.0,262.0,2.5147,84700.0,INLAND +-116.76,34.29,14.0,3959.0,849.0,1064.0,376.0,2.8214,111400.0,INLAND +-116.76,34.23,10.0,4374.0,989.0,1020.0,376.0,2.6071,89000.0,INLAND +-116.98,34.13,16.0,2098.0,449.0,342.0,143.0,4.0333,133900.0,INLAND +-116.98,34.07,21.0,739.0,125.0,199.0,82.0,4.8958,117500.0,INLAND +-116.88,34.08,52.0,3419.0,777.0,710.0,265.0,3.9028,128600.0,INLAND +-116.76,34.14,4.0,42.0,10.0,9.0,3.0,0.536,42500.0,INLAND +-116.88,34.19,38.0,898.0,259.0,106.0,52.0,1.6875,225000.0,INLAND +-117.46,34.85,7.0,9759.0,1816.0,2933.0,1168.0,3.4912,157700.0,INLAND +-117.28,35.13,32.0,671.0,166.0,856.0,114.0,2.6477,53300.0,INLAND +-116.85,34.98,26.0,3606.0,792.0,1683.0,608.0,2.6587,57400.0,INLAND +-117.14,34.75,33.0,552.0,120.0,347.0,97.0,1.8158,100000.0,INLAND +-117.28,34.68,28.0,1932.0,421.0,1156.0,404.0,1.8958,55600.0,INLAND +-117.06,34.87,14.0,3348.0,619.0,1756.0,557.0,3.5987,91400.0,INLAND +-117.13,34.88,21.0,3254.0,669.0,1548.0,545.0,2.3373,57100.0,INLAND +-117.15,34.83,30.0,5370.0,1062.0,2778.0,944.0,3.099,66800.0,INLAND +-117.19,34.94,31.0,2034.0,444.0,1097.0,367.0,2.1522,60800.0,INLAND +-117.16,34.9,16.0,1579.0,327.0,934.0,298.0,2.7305,73800.0,INLAND +-117.08,34.96,28.0,1777.0,307.0,721.0,259.0,3.6343,79800.0,INLAND +-116.96,34.94,20.0,2355.0,467.0,1198.0,428.0,3.9934,88500.0,INLAND +-116.99,34.89,24.0,2741.0,577.0,1551.0,522.0,3.474,70500.0,INLAND +-116.99,34.88,23.0,6060.0,1165.0,2920.0,1072.0,3.1528,69000.0,INLAND +-117.0,34.87,16.0,6862.0,1292.0,3562.0,1126.0,3.6091,87200.0,INLAND +-117.02,34.88,18.0,2127.0,443.0,1168.0,401.0,3.0313,80000.0,INLAND +-117.03,34.87,7.0,2245.0,407.0,1016.0,364.0,3.9464,101500.0,INLAND +-116.96,34.83,30.0,1211.0,289.0,611.0,230.0,1.6667,44700.0,INLAND +-116.9,34.69,10.0,337.0,102.0,108.0,50.0,0.4999,55000.0,INLAND +-117.24,34.59,4.0,5027.0,797.0,1869.0,686.0,3.5507,186100.0,INLAND +-117.29,34.57,22.0,1054.0,239.0,428.0,239.0,1.2548,68300.0,INLAND +-117.1,34.57,6.0,5110.0,1044.0,1938.0,724.0,3.1917,112800.0,INLAND +-116.9,34.52,20.0,3481.0,840.0,1694.0,587.0,1.4,77700.0,INLAND +-116.94,34.4,20.0,6541.0,1401.0,2631.0,980.0,2.1339,78500.0,INLAND +-117.18,32.76,52.0,2023.0,301.0,649.0,285.0,4.7396,441700.0,NEAR OCEAN +-117.18,32.75,52.0,1539.0,212.0,535.0,224.0,5.392,408500.0,NEAR OCEAN +-117.18,32.75,52.0,1504.0,208.0,518.0,196.0,8.603,459600.0,NEAR OCEAN +-117.19,32.75,52.0,1495.0,230.0,459.0,190.0,8.1548,500001.0,NEAR OCEAN +-117.19,32.75,52.0,1388.0,213.0,513.0,211.0,6.1309,411600.0,NEAR OCEAN +-117.19,32.76,52.0,1294.0,175.0,434.0,180.0,5.7914,500001.0,NEAR OCEAN +-117.17,32.76,45.0,3149.0,639.0,1160.0,661.0,2.7266,354200.0,NEAR OCEAN +-117.17,32.75,38.0,5430.0,1176.0,2357.0,1100.0,3.654,249000.0,NEAR OCEAN +-117.18,32.74,39.0,3132.0,738.0,1200.0,690.0,2.5288,274000.0,NEAR OCEAN +-117.18,32.75,36.0,2282.0,534.0,918.0,531.0,2.7222,284700.0,NEAR OCEAN +-117.17,32.75,52.0,1052.0,,381.0,201.0,3.0726,289600.0,NEAR OCEAN +-117.16,32.75,23.0,2474.0,594.0,1107.0,536.0,2.9705,245500.0,NEAR OCEAN +-117.16,32.75,49.0,1566.0,494.0,643.0,419.0,1.9637,137500.0,NEAR OCEAN +-117.16,32.74,52.0,852.0,262.0,389.0,249.0,2.6042,225000.0,NEAR OCEAN +-117.16,32.74,21.0,1882.0,486.0,903.0,482.0,3.06,243800.0,NEAR OCEAN +-117.16,32.74,27.0,2335.0,604.0,982.0,590.0,3.1921,261500.0,NEAR OCEAN +-117.17,32.75,28.0,1514.0,384.0,540.0,352.0,2.1532,240000.0,NEAR OCEAN +-117.16,32.75,19.0,5430.0,1593.0,2496.0,1484.0,2.9112,199100.0,NEAR OCEAN +-117.16,32.75,34.0,1785.0,558.0,804.0,490.0,2.2687,200000.0,NEAR OCEAN +-117.15,32.76,43.0,2361.0,489.0,824.0,470.0,3.4196,302200.0,NEAR OCEAN +-117.15,32.76,36.0,2644.0,674.0,1211.0,654.0,3.0445,214800.0,NEAR OCEAN +-117.15,32.76,40.0,1809.0,474.0,826.0,456.0,2.6518,179800.0,NEAR OCEAN +-117.15,32.76,37.0,1921.0,502.0,811.0,472.0,2.75,175000.0,NEAR OCEAN +-117.15,32.75,40.0,2261.0,579.0,903.0,525.0,2.465,198700.0,NEAR OCEAN +-117.15,32.75,9.0,2818.0,821.0,851.0,555.0,2.6181,204200.0,NEAR OCEAN +-117.15,32.75,27.0,3166.0,867.0,1332.0,817.0,2.6742,171400.0,NEAR OCEAN +-117.15,32.74,43.0,2383.0,607.0,962.0,587.0,2.2578,263600.0,NEAR OCEAN +-117.15,32.74,26.0,3149.0,832.0,1320.0,808.0,3.0259,211700.0,NEAR OCEAN +-117.14,32.75,35.0,1391.0,329.0,726.0,317.0,2.6818,159400.0,NEAR OCEAN +-117.14,32.74,47.0,1494.0,327.0,689.0,304.0,3.125,172700.0,NEAR OCEAN +-117.14,32.74,16.0,6075.0,1816.0,2592.0,1634.0,2.5553,178100.0,NEAR OCEAN +-117.14,32.75,29.0,1961.0,565.0,1002.0,569.0,2.2813,118100.0,NEAR OCEAN +-117.14,32.75,25.0,1908.0,513.0,956.0,467.0,2.4828,133300.0,NEAR OCEAN +-117.14,32.75,37.0,1832.0,525.0,955.0,488.0,2.7852,129200.0,NEAR OCEAN +-117.14,32.75,19.0,1358.0,613.0,766.0,630.0,1.0353,150000.0,NEAR OCEAN +-117.14,32.75,20.0,1182.0,379.0,678.0,326.0,2.1937,162500.0,NEAR OCEAN +-117.14,32.75,27.0,1551.0,464.0,880.0,400.0,2.4167,131300.0,NEAR OCEAN +-117.14,32.76,28.0,3025.0,756.0,1328.0,695.0,2.694,164100.0,NEAR OCEAN +-117.14,32.76,35.0,2539.0,661.0,1308.0,629.0,2.6777,146400.0,NEAR OCEAN +-117.14,32.76,32.0,2587.0,681.0,1246.0,650.0,2.1727,145500.0,NEAR OCEAN +-117.14,32.76,35.0,1785.0,493.0,965.0,506.0,2.0792,160000.0,NEAR OCEAN +-117.13,32.77,30.0,2582.0,650.0,1098.0,603.0,2.8281,171700.0,NEAR OCEAN +-117.13,32.76,29.0,2568.0,682.0,1191.0,642.0,2.1094,162500.0,NEAR OCEAN +-117.13,32.76,41.0,1545.0,420.0,747.0,415.0,2.375,154400.0,NEAR OCEAN +-117.13,32.76,27.0,2280.0,695.0,1235.0,664.0,1.9392,142900.0,NEAR OCEAN +-117.13,32.76,33.0,1591.0,461.0,794.0,425.0,2.6333,140000.0,NEAR OCEAN +-117.13,32.76,22.0,2623.0,732.0,1283.0,718.0,2.1563,127100.0,NEAR OCEAN +-117.14,32.76,24.0,3523.0,991.0,1775.0,873.0,2.1273,142300.0,NEAR OCEAN +-117.13,32.75,24.0,1877.0,519.0,898.0,483.0,2.2264,112500.0,NEAR OCEAN +-117.13,32.75,28.0,2279.0,671.0,1166.0,623.0,1.95,150000.0,NEAR OCEAN +-117.13,32.75,23.0,3999.0,1182.0,2051.0,1130.0,2.1292,135000.0,NEAR OCEAN +-117.13,32.75,31.0,2336.0,656.0,1186.0,609.0,2.5872,130600.0,NEAR OCEAN +-117.13,32.75,50.0,1476.0,354.0,698.0,354.0,3.0,168800.0,NEAR OCEAN +-117.13,32.74,52.0,1512.0,321.0,651.0,321.0,3.6852,185300.0,NEAR OCEAN +-117.13,32.75,37.0,4142.0,1031.0,1936.0,968.0,2.693,174100.0,NEAR OCEAN +-117.12,32.75,37.0,2344.0,546.0,1134.0,513.0,2.4394,118300.0,NEAR OCEAN +-117.12,32.74,46.0,1898.0,441.0,978.0,439.0,3.2708,155200.0,NEAR OCEAN +-117.12,32.74,52.0,1969.0,389.0,877.0,424.0,3.79,163400.0,NEAR OCEAN +-117.13,32.75,20.0,2271.0,602.0,992.0,520.0,2.2599,157600.0,NEAR OCEAN +-117.12,32.75,15.0,2671.0,724.0,1800.0,646.0,2.1394,106700.0,NEAR OCEAN +-117.12,32.75,17.0,2060.0,633.0,1251.0,602.0,1.9886,119200.0,NEAR OCEAN +-117.12,32.75,20.0,1406.0,413.0,850.0,412.0,2.3261,114600.0,NEAR OCEAN +-117.12,32.75,25.0,2222.0,634.0,1025.0,568.0,1.64,130000.0,NEAR OCEAN +-117.12,32.76,23.0,2681.0,717.0,1279.0,648.0,2.1597,116100.0,NEAR OCEAN +-117.12,32.76,33.0,2279.0,591.0,1250.0,576.0,2.4297,139000.0,NEAR OCEAN +-117.12,32.76,43.0,2336.0,644.0,1203.0,614.0,2.3594,127800.0,NEAR OCEAN +-117.12,32.76,26.0,1221.0,331.0,620.0,296.0,2.4821,123600.0,NEAR OCEAN +-117.11,32.76,29.0,2030.0,545.0,1014.0,518.0,2.2409,114200.0,NEAR OCEAN +-117.12,32.76,28.0,2160.0,608.0,1339.0,571.0,1.9152,128100.0,NEAR OCEAN +-117.12,32.76,27.0,1426.0,364.0,792.0,353.0,2.0673,118800.0,NEAR OCEAN +-117.12,32.76,28.0,1605.0,501.0,936.0,460.0,2.5991,147500.0,NEAR OCEAN +-117.12,32.76,17.0,1559.0,462.0,821.0,428.0,2.0139,150000.0,NEAR OCEAN +-117.12,32.76,41.0,1469.0,421.0,803.0,395.0,2.1856,120500.0,NEAR OCEAN +-117.11,32.77,48.0,1502.0,272.0,590.0,265.0,2.5952,190300.0,NEAR OCEAN +-117.11,32.77,50.0,1729.0,355.0,617.0,337.0,3.6705,167000.0,NEAR OCEAN +-117.12,32.77,48.0,2012.0,422.0,893.0,394.0,2.7928,175000.0,NEAR OCEAN +-117.12,32.77,43.0,2167.0,464.0,977.0,461.0,3.125,192200.0,NEAR OCEAN +-117.11,32.77,52.0,1484.0,224.0,498.0,223.0,6.6053,331400.0,NEAR OCEAN +-117.11,32.77,52.0,1506.0,233.0,478.0,240.0,4.3875,300000.0,NEAR OCEAN +-117.1,32.77,49.0,4449.0,711.0,1606.0,709.0,5.7768,281600.0,NEAR OCEAN +-117.1,32.76,52.0,2606.0,426.0,883.0,380.0,4.2813,270800.0,NEAR OCEAN +-117.09,32.77,38.0,2065.0,374.0,812.0,343.0,3.125,216500.0,NEAR OCEAN +-117.09,32.76,44.0,1139.0,214.0,470.0,217.0,3.5481,203100.0,NEAR OCEAN +-117.09,32.76,43.0,3889.0,711.0,1466.0,663.0,3.5529,223000.0,NEAR OCEAN +-117.11,32.76,31.0,2293.0,549.0,1108.0,557.0,3.3854,204400.0,NEAR OCEAN +-117.1,32.76,30.0,1835.0,474.0,934.0,415.0,2.875,139600.0,NEAR OCEAN +-117.11,32.76,28.0,1457.0,397.0,672.0,342.0,1.9799,122700.0,NEAR OCEAN +-117.11,32.76,21.0,2226.0,600.0,1085.0,533.0,2.2604,126300.0,NEAR OCEAN +-117.11,32.76,19.0,2188.0,616.0,1304.0,607.0,2.0852,114400.0,NEAR OCEAN +-117.1,32.75,17.0,871.0,379.0,955.0,351.0,1.4375,96400.0,NEAR OCEAN +-117.1,32.75,11.0,2393.0,726.0,1905.0,711.0,1.3448,91300.0,NEAR OCEAN +-117.11,32.75,11.0,1607.0,478.0,1384.0,450.0,2.05,100000.0,NEAR OCEAN +-117.11,32.75,21.0,2127.0,658.0,1812.0,603.0,1.6896,100000.0,NEAR OCEAN +-117.11,32.75,18.0,1943.0,587.0,1329.0,522.0,1.7696,103100.0,NEAR OCEAN +-117.09,32.76,29.0,1650.0,496.0,882.0,445.0,2.2287,140000.0,NEAR OCEAN +-117.09,32.76,31.0,1235.0,387.0,816.0,397.0,1.5517,122500.0,NEAR OCEAN +-117.1,32.76,31.0,987.0,267.0,619.0,250.0,2.9286,151800.0,NEAR OCEAN +-117.1,32.75,16.0,2426.0,799.0,1505.0,754.0,1.6444,103400.0,NEAR OCEAN +-117.1,32.75,21.0,2063.0,609.0,1686.0,558.0,1.4828,94800.0,NEAR OCEAN +-117.1,32.75,20.0,2355.0,722.0,1848.0,576.0,2.0036,99200.0,NEAR OCEAN +-117.1,32.75,15.0,2422.0,774.0,2120.0,715.0,1.0617,92400.0,NEAR OCEAN +-117.1,32.75,23.0,1858.0,551.0,1506.0,492.0,1.7446,85200.0,NEAR OCEAN +-117.11,32.75,46.0,695.0,182.0,601.0,195.0,2.4219,90600.0,NEAR OCEAN +-117.11,32.75,20.0,1667.0,469.0,1292.0,445.0,2.0893,101100.0,NEAR OCEAN +-117.11,32.75,34.0,2131.0,594.0,1373.0,562.0,2.113,102100.0,NEAR OCEAN +-117.12,32.75,13.0,2795.0,773.0,1869.0,690.0,2.1767,101800.0,NEAR OCEAN +-117.1,32.74,14.0,2361.0,601.0,1831.0,526.0,1.6102,93400.0,NEAR OCEAN +-117.11,32.74,25.0,2846.0,644.0,2272.0,632.0,2.2,98700.0,NEAR OCEAN +-117.11,32.74,25.0,684.0,190.0,665.0,187.0,2.4524,90300.0,NEAR OCEAN +-117.11,32.74,33.0,1126.0,267.0,621.0,241.0,3.2422,123100.0,NEAR OCEAN +-117.11,32.73,35.0,1689.0,397.0,1135.0,366.0,2.3269,97300.0,NEAR OCEAN +-117.1,32.73,24.0,2927.0,704.0,2005.0,668.0,2.2375,102900.0,NEAR OCEAN +-117.11,32.73,34.0,1096.0,221.0,574.0,223.0,3.8355,126700.0,NEAR OCEAN +-117.11,32.73,27.0,3160.0,627.0,1628.0,612.0,3.8864,132600.0,NEAR OCEAN +-117.09,32.75,30.0,1899.0,546.0,1620.0,493.0,1.6034,84400.0,NEAR OCEAN +-117.09,32.74,23.0,3130.0,779.0,2472.0,744.0,2.32,93200.0,NEAR OCEAN +-117.1,32.74,20.0,3854.0,1046.0,3555.0,966.0,1.6747,100000.0,NEAR OCEAN +-117.1,32.74,30.0,1772.0,500.0,1389.0,447.0,2.3641,94100.0,NEAR OCEAN +-117.1,32.75,11.0,1976.0,548.0,1528.0,512.0,1.4886,89800.0,NEAR OCEAN +-117.08,32.75,20.0,1886.0,586.0,1134.0,525.0,1.5029,100000.0,NEAR OCEAN +-117.08,32.75,16.0,1111.0,328.0,930.0,303.0,1.2347,128100.0,NEAR OCEAN +-117.08,32.75,15.0,1821.0,516.0,1385.0,439.0,2.5101,95300.0,NEAR OCEAN +-117.09,32.75,24.0,1245.0,376.0,1230.0,362.0,1.875,95000.0,NEAR OCEAN +-117.09,32.75,28.0,1220.0,391.0,1286.0,396.0,1.2286,105000.0,NEAR OCEAN +-117.09,32.75,20.0,1701.0,503.0,1482.0,465.0,1.6789,95500.0,NEAR OCEAN +-117.09,32.76,10.0,1922.0,577.0,1595.0,545.0,1.5208,118800.0,NEAR OCEAN +-117.08,32.76,18.0,1704.0,596.0,1639.0,548.0,1.7391,125000.0,NEAR OCEAN +-117.07,32.76,14.0,2523.0,545.0,1297.0,525.0,2.3886,138100.0,NEAR OCEAN +-117.07,32.75,37.0,2690.0,549.0,1219.0,524.0,2.3148,154200.0,NEAR OCEAN +-117.07,32.75,14.0,3073.0,851.0,2000.0,782.0,2.3824,144700.0,NEAR OCEAN +-117.07,32.75,9.0,3464.0,749.0,1687.0,645.0,3.3026,119100.0,NEAR OCEAN +-117.06,32.75,34.0,1917.0,419.0,1181.0,426.0,3.0208,129200.0,NEAR OCEAN +-117.05,32.74,34.0,2178.0,455.0,1193.0,446.0,3.1719,115300.0,NEAR OCEAN +-117.07,32.74,37.0,1042.0,205.0,589.0,208.0,2.6629,116900.0,NEAR OCEAN +-117.07,32.75,31.0,2036.0,501.0,1263.0,442.0,2.5583,120700.0,NEAR OCEAN +-117.08,32.75,20.0,1989.0,508.0,1452.0,462.0,2.0077,118300.0,NEAR OCEAN +-117.08,32.74,26.0,2359.0,622.0,2067.0,581.0,1.8103,124700.0,NEAR OCEAN +-117.09,32.75,19.0,2739.0,707.0,2004.0,622.0,1.6318,117700.0,NEAR OCEAN +-117.09,32.74,42.0,1986.0,472.0,1472.0,475.0,2.1757,110100.0,NEAR OCEAN +-117.08,32.74,33.0,3260.0,673.0,1784.0,666.0,3.5078,126500.0,NEAR OCEAN +-117.08,32.73,36.0,3331.0,643.0,1903.0,622.0,3.6974,122000.0,NEAR OCEAN +-117.07,32.74,38.0,1901.0,392.0,1099.0,406.0,2.7661,113900.0,NEAR OCEAN +-117.08,32.74,35.0,1434.0,253.0,753.0,228.0,2.3812,135100.0,NEAR OCEAN +-117.08,32.73,36.0,1158.0,218.0,619.0,233.0,3.6125,122500.0,NEAR OCEAN +-117.08,32.73,19.0,2935.0,763.0,1953.0,720.0,1.4254,111300.0,NEAR OCEAN +-117.07,32.73,18.0,2968.0,656.0,1149.0,581.0,2.6452,154200.0,NEAR OCEAN +-117.07,32.78,22.0,922.0,240.0,1524.0,235.0,1.6815,218800.0,NEAR OCEAN +-117.09,32.77,31.0,3062.0,,1263.0,539.0,3.0875,291500.0,NEAR OCEAN +-117.08,32.77,31.0,1070.0,155.0,426.0,153.0,6.1628,219200.0,NEAR OCEAN +-117.07,32.77,34.0,2245.0,394.0,1849.0,429.0,3.5446,185500.0,NEAR OCEAN +-117.07,32.77,38.0,3779.0,614.0,1495.0,614.0,4.3529,184000.0,NEAR OCEAN +-117.07,32.76,42.0,1827.0,378.0,880.0,380.0,2.5125,176600.0,NEAR OCEAN +-117.08,32.77,25.0,3911.0,849.0,1580.0,767.0,2.7778,184100.0,NEAR OCEAN +-117.08,32.76,27.0,1221.0,254.0,606.0,259.0,3.0833,155400.0,NEAR OCEAN +-117.09,32.76,31.0,2567.0,624.0,1255.0,582.0,2.5909,159100.0,NEAR OCEAN +-117.08,32.76,20.0,2547.0,785.0,1199.0,643.0,1.7743,140300.0,NEAR OCEAN +-117.04,32.77,21.0,1824.0,447.0,962.0,431.0,2.7826,143800.0,<1H OCEAN +-117.05,32.77,23.0,2556.0,662.0,1200.0,548.0,1.8899,147700.0,NEAR OCEAN +-117.06,32.77,18.0,2269.0,682.0,1329.0,581.0,1.7951,161800.0,NEAR OCEAN +-117.06,32.77,34.0,1730.0,373.0,730.0,350.0,2.0284,161800.0,NEAR OCEAN +-117.07,32.77,38.0,1130.0,228.0,699.0,241.0,2.65,167600.0,NEAR OCEAN +-117.06,32.77,32.0,3888.0,827.0,3868.0,841.0,3.0755,166800.0,NEAR OCEAN +-117.05,32.77,33.0,3535.0,683.0,1568.0,672.0,2.8097,158300.0,NEAR OCEAN +-117.06,32.76,36.0,2785.0,577.0,1275.0,527.0,2.3015,156800.0,NEAR OCEAN +-117.06,32.76,38.0,1549.0,288.0,636.0,278.0,3.2188,150500.0,NEAR OCEAN +-117.05,32.76,46.0,1887.0,359.0,795.0,358.0,3.25,159600.0,NEAR OCEAN +-117.06,32.76,37.0,2356.0,476.0,1231.0,499.0,2.965,155700.0,NEAR OCEAN +-117.06,32.76,24.0,1629.0,587.0,1012.0,488.0,1.7452,156800.0,NEAR OCEAN +-117.05,32.75,36.0,2024.0,,1030.0,390.0,3.8233,139800.0,NEAR OCEAN +-117.06,32.75,34.0,2516.0,611.0,1317.0,594.0,2.2308,125900.0,NEAR OCEAN +-117.05,32.75,35.0,2144.0,388.0,1003.0,383.0,3.0938,137300.0,NEAR OCEAN +-117.07,32.72,18.0,1758.0,286.0,987.0,277.0,4.6875,141800.0,NEAR OCEAN +-117.08,32.72,32.0,2286.0,468.0,1741.0,467.0,3.0446,101900.0,NEAR OCEAN +-117.07,32.71,36.0,2448.0,475.0,1268.0,450.0,2.5682,109100.0,NEAR OCEAN +-117.06,32.73,33.0,3444.0,619.0,1884.0,582.0,3.7891,126700.0,NEAR OCEAN +-117.06,32.72,31.0,2669.0,514.0,1626.0,499.0,3.1923,116900.0,NEAR OCEAN +-117.05,32.72,35.0,1777.0,369.0,1158.0,353.0,3.4107,117000.0,NEAR OCEAN +-117.06,32.71,25.0,2681.0,596.0,1947.0,553.0,2.8964,104300.0,NEAR OCEAN +-117.07,32.71,39.0,2754.0,652.0,2263.0,619.0,2.2454,89600.0,NEAR OCEAN +-117.08,32.7,35.0,1477.0,264.0,852.0,279.0,3.1786,100600.0,NEAR OCEAN +-117.08,32.7,37.0,2176.0,418.0,1301.0,375.0,2.875,98900.0,NEAR OCEAN +-117.08,32.7,36.0,2103.0,390.0,1279.0,392.0,2.4135,97000.0,NEAR OCEAN +-117.06,32.71,21.0,1864.0,388.0,1498.0,389.0,3.8194,125700.0,NEAR OCEAN +-117.06,32.71,11.0,2397.0,523.0,1566.0,514.0,3.8687,145200.0,NEAR OCEAN +-117.08,32.71,27.0,2204.0,598.0,1656.0,521.0,1.4821,86200.0,NEAR OCEAN +-117.07,32.71,26.0,4151.0,823.0,2822.0,697.0,2.8372,123400.0,NEAR OCEAN +-117.07,32.7,14.0,2763.0,456.0,1914.0,465.0,4.1645,143000.0,NEAR OCEAN +-117.07,32.69,20.0,2192.0,406.0,1766.0,393.0,4.0921,135000.0,NEAR OCEAN +-117.06,32.7,12.0,3943.0,737.0,3280.0,751.0,4.112,141400.0,NEAR OCEAN +-117.04,32.71,28.0,5274.0,991.0,3727.0,961.0,3.57,109800.0,NEAR OCEAN +-117.05,32.71,25.0,3292.0,608.0,2266.0,592.0,3.2986,119200.0,NEAR OCEAN +-117.03,32.71,33.0,3126.0,627.0,2300.0,623.0,3.2596,103000.0,NEAR OCEAN +-117.03,32.71,34.0,2328.0,444.0,1684.0,429.0,3.25,99600.0,NEAR OCEAN +-117.02,32.71,20.0,4050.0,745.0,2870.0,761.0,3.7366,121800.0,NEAR OCEAN +-117.02,32.7,22.0,2756.0,516.0,1849.0,486.0,4.1837,125400.0,NEAR OCEAN +-117.02,32.7,18.0,1643.0,283.0,1134.0,269.0,5.1769,133000.0,NEAR OCEAN +-117.02,32.71,30.0,3187.0,592.0,2082.0,631.0,3.5388,118500.0,NEAR OCEAN +-117.01,32.7,25.0,2321.0,398.0,1434.0,386.0,3.5341,120800.0,NEAR OCEAN +-117.05,32.69,8.0,831.0,158.0,740.0,154.0,5.3908,165500.0,NEAR OCEAN +-117.06,32.69,9.0,1520.0,269.0,1250.0,265.0,4.8875,157700.0,NEAR OCEAN +-117.06,32.69,13.0,705.0,149.0,718.0,155.0,4.4375,154900.0,NEAR OCEAN +-117.06,32.69,9.0,521.0,111.0,491.0,110.0,5.1305,158900.0,NEAR OCEAN +-117.03,32.7,19.0,2304.0,572.0,2010.0,556.0,2.2866,109900.0,NEAR OCEAN +-117.04,32.69,27.0,1790.0,356.0,1286.0,347.0,3.5437,115800.0,NEAR OCEAN +-117.04,32.7,7.0,9311.0,1703.0,7302.0,1694.0,4.419,156900.0,NEAR OCEAN +-117.07,32.68,18.0,1475.0,267.0,1149.0,268.0,5.0827,142200.0,NEAR OCEAN +-117.06,32.68,38.0,1481.0,317.0,1080.0,291.0,2.85,125800.0,NEAR OCEAN +-117.06,32.68,36.0,3815.0,796.0,2945.0,728.0,2.0959,125000.0,NEAR OCEAN +-117.05,32.69,21.0,991.0,210.0,695.0,203.0,3.625,144300.0,NEAR OCEAN +-117.06,32.68,41.0,2665.0,515.0,1664.0,512.0,2.375,113500.0,NEAR OCEAN +-117.06,32.67,29.0,4047.0,754.0,2353.0,730.0,4.0505,125000.0,NEAR OCEAN +-117.05,32.68,35.0,3414.0,580.0,1761.0,522.0,3.9922,129800.0,NEAR OCEAN +-117.05,32.67,32.0,4227.0,785.0,2842.0,795.0,3.9646,137800.0,NEAR OCEAN +-117.05,32.68,19.0,1469.0,275.0,1010.0,292.0,3.5664,150400.0,NEAR OCEAN +-117.05,32.67,16.0,2168.0,343.0,1589.0,338.0,5.4863,153800.0,NEAR OCEAN +-117.06,32.66,33.0,3425.0,511.0,1528.0,479.0,5.6889,234600.0,NEAR OCEAN +-117.06,32.66,24.0,2587.0,491.0,1617.0,458.0,3.5066,133400.0,NEAR OCEAN +-117.04,32.66,22.0,3362.0,630.0,1471.0,612.0,4.1442,303900.0,NEAR OCEAN +-117.03,32.67,15.0,5094.0,818.0,2118.0,758.0,5.3505,266600.0,NEAR OCEAN +-117.02,32.68,14.0,3986.0,675.0,2065.0,702.0,5.7192,267400.0,NEAR OCEAN +-117.05,32.69,14.0,1689.0,555.0,1319.0,527.0,3.16,143800.0,NEAR OCEAN +-117.05,32.68,15.0,1828.0,359.0,955.0,248.0,3.2174,165100.0,NEAR OCEAN +-117.04,32.68,13.0,2132.0,425.0,1345.0,432.0,4.0,89300.0,NEAR OCEAN +-117.04,32.68,14.0,1320.0,270.0,943.0,260.0,5.0947,152700.0,NEAR OCEAN +-117.04,32.67,14.0,3464.0,683.0,2139.0,734.0,4.0668,137500.0,NEAR OCEAN +-117.04,32.69,9.0,3417.0,860.0,2521.0,828.0,3.02,158900.0,NEAR OCEAN +-117.04,32.68,9.0,3087.0,609.0,1530.0,556.0,3.775,125000.0,NEAR OCEAN +-117.04,32.68,11.0,1875.0,357.0,1014.0,386.0,4.375,115000.0,NEAR OCEAN +-117.01,32.7,7.0,2327.0,490.0,1304.0,445.0,3.3553,132200.0,NEAR OCEAN +-117.02,32.69,7.0,6055.0,1004.0,3031.0,952.0,4.436,135000.0,NEAR OCEAN +-117.03,32.69,5.0,3201.0,532.0,2061.0,536.0,5.0829,179400.0,NEAR OCEAN +-117.03,32.69,10.0,901.0,163.0,698.0,167.0,4.6648,156100.0,NEAR OCEAN +-117.03,32.69,8.0,2460.0,397.0,1784.0,390.0,4.5662,175500.0,NEAR OCEAN +-117.09,32.71,12.0,3375.0,945.0,2357.0,808.0,1.5,106300.0,NEAR OCEAN +-117.09,32.7,15.0,869.0,217.0,887.0,216.0,1.4583,84200.0,NEAR OCEAN +-117.09,32.7,22.0,2409.0,582.0,1887.0,578.0,1.4089,94200.0,NEAR OCEAN +-117.09,32.69,18.0,1645.0,430.0,1221.0,410.0,1.3269,108000.0,NEAR OCEAN +-117.09,32.69,20.0,1102.0,205.0,852.0,217.0,3.1833,108300.0,NEAR OCEAN +-117.1,32.69,11.0,3071.0,911.0,2812.0,774.0,1.2413,83100.0,NEAR OCEAN +-117.1,32.7,28.0,633.0,137.0,525.0,170.0,3.6042,95600.0,NEAR OCEAN +-117.1,32.7,42.0,2002.0,488.0,1505.0,464.0,1.5057,86300.0,NEAR OCEAN +-117.1,32.71,9.0,1931.0,472.0,1628.0,445.0,2.085,92600.0,NEAR OCEAN +-117.09,32.73,26.0,3114.0,686.0,1948.0,660.0,2.8942,124100.0,NEAR OCEAN +-117.1,32.72,5.0,1615.0,387.0,1094.0,394.0,2.2024,137200.0,NEAR OCEAN +-117.09,32.72,39.0,1273.0,246.0,770.0,242.0,2.0938,102500.0,NEAR OCEAN +-117.09,32.72,33.0,1096.0,240.0,716.0,224.0,1.6944,111800.0,NEAR OCEAN +-117.09,32.73,28.0,3109.0,594.0,1559.0,589.0,3.5789,120300.0,NEAR OCEAN +-117.09,32.71,29.0,2238.0,523.0,2061.0,504.0,2.5559,96800.0,NEAR OCEAN +-117.1,32.71,29.0,3422.0,713.0,2775.0,644.0,1.7075,86900.0,NEAR OCEAN +-117.1,32.71,25.0,939.0,247.0,1003.0,240.0,1.75,87900.0,NEAR OCEAN +-117.11,32.72,25.0,1491.0,348.0,1183.0,316.0,1.9583,88600.0,NEAR OCEAN +-117.11,32.71,30.0,1729.0,457.0,1673.0,460.0,1.7,85900.0,NEAR OCEAN +-117.11,32.7,34.0,2028.0,522.0,1797.0,464.0,1.7402,79400.0,NEAR OCEAN +-117.11,32.7,37.0,2045.0,502.0,1920.0,472.0,1.8125,83300.0,NEAR OCEAN +-117.11,32.7,33.0,1980.0,488.0,1626.0,428.0,1.4856,86400.0,NEAR OCEAN +-117.12,32.7,14.0,819.0,237.0,827.0,237.0,1.3194,90500.0,NEAR OCEAN +-117.12,32.7,36.0,1011.0,253.0,763.0,226.0,1.8187,84100.0,NEAR OCEAN +-117.11,32.71,29.0,1040.0,291.0,1054.0,297.0,1.1818,83200.0,NEAR OCEAN +-117.1,32.69,37.0,1269.0,340.0,1369.0,302.0,2.2102,87200.0,NEAR OCEAN +-117.1,32.69,35.0,1292.0,272.0,1183.0,272.0,2.0547,98000.0,NEAR OCEAN +-117.11,32.69,36.0,1421.0,367.0,1418.0,355.0,1.9425,93400.0,NEAR OCEAN +-117.11,32.69,34.0,1144.0,295.0,1271.0,302.0,2.09,91800.0,NEAR OCEAN +-117.11,32.69,37.0,2395.0,627.0,2489.0,599.0,1.5933,86300.0,NEAR OCEAN +-117.11,32.69,39.0,395.0,159.0,620.0,162.0,2.725,86500.0,NEAR OCEAN +-117.12,32.69,46.0,200.0,77.0,180.0,65.0,1.0658,93800.0,NEAR OCEAN +-117.12,32.69,37.0,1082.0,294.0,1146.0,265.0,2.0673,88500.0,NEAR OCEAN +-117.12,32.7,38.0,818.0,217.0,953.0,231.0,1.0531,65700.0,NEAR OCEAN +-117.12,32.7,37.0,1361.0,348.0,1398.0,328.0,1.1681,78100.0,NEAR OCEAN +-117.13,32.69,36.0,1469.0,400.0,1271.0,340.0,1.043,90100.0,NEAR OCEAN +-117.13,32.7,48.0,786.0,230.0,917.0,231.0,1.875,75600.0,NEAR OCEAN +-117.13,32.7,42.0,1210.0,292.0,945.0,258.0,0.8991,78900.0,NEAR OCEAN +-117.13,32.7,38.0,1445.0,392.0,1286.0,357.0,1.4632,80200.0,NEAR OCEAN +-117.13,32.7,35.0,1179.0,344.0,1372.0,330.0,1.9509,70200.0,NEAR OCEAN +-117.12,32.71,33.0,1256.0,331.0,1315.0,321.0,1.9286,78500.0,NEAR OCEAN +-117.13,32.71,38.0,993.0,246.0,760.0,205.0,1.1563,82700.0,NEAR OCEAN +-117.13,32.71,42.0,1145.0,314.0,1114.0,307.0,1.2614,87500.0,NEAR OCEAN +-117.13,32.71,44.0,1697.0,413.0,1396.0,363.0,1.5474,83300.0,NEAR OCEAN +-117.13,32.72,32.0,2197.0,623.0,1784.0,599.0,1.901,120300.0,NEAR OCEAN +-117.12,32.71,24.0,421.0,101.0,396.0,113.0,0.6433,111300.0,NEAR OCEAN +-117.13,32.72,9.0,2436.0,720.0,1780.0,653.0,1.8299,137500.0,NEAR OCEAN +-117.13,32.72,19.0,1341.0,435.0,1048.0,360.0,1.975,117900.0,NEAR OCEAN +-117.12,32.72,36.0,6096.0,1285.0,3093.0,1229.0,3.37,159100.0,NEAR OCEAN +-117.12,32.73,50.0,2307.0,424.0,887.0,356.0,3.5156,168800.0,NEAR OCEAN +-117.12,32.73,52.0,3976.0,718.0,1750.0,769.0,3.4151,175400.0,NEAR OCEAN +-117.13,32.74,46.0,3355.0,768.0,1457.0,708.0,2.6604,170100.0,NEAR OCEAN +-117.13,32.73,52.0,1148.0,214.0,481.0,215.0,5.454,240900.0,NEAR OCEAN +-117.13,32.73,52.0,2676.0,557.0,1181.0,537.0,3.6058,213100.0,NEAR OCEAN +-117.13,32.74,50.0,1527.0,338.0,728.0,322.0,2.625,203200.0,NEAR OCEAN +-117.13,32.73,43.0,2706.0,667.0,1531.0,614.0,2.1513,145000.0,NEAR OCEAN +-117.13,32.72,43.0,2160.0,504.0,1221.0,452.0,2.4821,140600.0,NEAR OCEAN +-117.13,32.72,52.0,1560.0,307.0,757.0,315.0,2.7083,199100.0,NEAR OCEAN +-117.13,32.73,52.0,1911.0,415.0,777.0,412.0,2.2429,221100.0,NEAR OCEAN +-117.14,32.72,42.0,1558.0,458.0,1227.0,407.0,2.2804,139100.0,NEAR OCEAN +-117.13,32.72,17.0,1285.0,423.0,1208.0,409.0,1.758,126600.0,NEAR OCEAN +-117.14,32.71,34.0,1694.0,455.0,1467.0,425.0,2.1164,139400.0,NEAR OCEAN +-117.14,32.71,32.0,719.0,251.0,894.0,208.0,1.8456,103100.0,NEAR OCEAN +-117.14,32.72,43.0,1073.0,344.0,660.0,279.0,2.0529,168800.0,NEAR OCEAN +-117.14,32.72,45.0,1140.0,310.0,840.0,339.0,1.6156,156300.0,NEAR OCEAN +-117.14,32.72,34.0,2533.0,862.0,2011.0,778.0,2.1199,160400.0,NEAR OCEAN +-117.14,32.71,52.0,1225.0,332.0,955.0,321.0,1.6011,106300.0,NEAR OCEAN +-117.14,32.71,52.0,979.0,314.0,975.0,297.0,1.2375,100000.0,NEAR OCEAN +-117.14,32.71,52.0,800.0,313.0,1337.0,282.0,1.5594,87500.0,NEAR OCEAN +-117.14,32.71,52.0,500.0,,480.0,108.0,1.8696,91100.0,NEAR OCEAN +-117.13,32.71,37.0,1220.0,325.0,1472.0,323.0,1.825,81500.0,NEAR OCEAN +-117.13,32.71,35.0,614.0,180.0,691.0,164.0,1.6953,81300.0,NEAR OCEAN +-117.14,32.71,43.0,966.0,255.0,857.0,208.0,1.2841,72000.0,NEAR OCEAN +-117.14,32.71,39.0,1647.0,478.0,2176.0,479.0,1.7642,82900.0,NEAR OCEAN +-117.14,32.7,32.0,1280.0,353.0,1335.0,330.0,1.6023,77300.0,NEAR OCEAN +-117.13,32.7,35.0,365.0,98.0,463.0,112.0,2.5588,78800.0,NEAR OCEAN +-117.14,32.7,43.0,1126.0,289.0,1132.0,294.0,2.1875,87000.0,NEAR OCEAN +-117.14,32.7,40.0,1227.0,330.0,1199.0,316.0,1.2188,92500.0,NEAR OCEAN +-117.14,32.7,36.0,633.0,148.0,557.0,139.0,1.5729,82700.0,NEAR OCEAN +-117.14,32.7,48.0,510.0,180.0,545.0,132.0,1.8008,86500.0,NEAR OCEAN +-117.14,32.7,44.0,658.0,218.0,869.0,212.0,1.9338,89400.0,NEAR OCEAN +-117.14,32.7,47.0,552.0,161.0,593.0,174.0,0.9589,90000.0,NEAR OCEAN +-117.15,32.7,50.0,475.0,172.0,483.0,120.0,1.3657,162500.0,NEAR OCEAN +-117.15,32.71,52.0,402.0,183.0,557.0,172.0,1.3125,87500.0,NEAR OCEAN +-117.15,32.7,52.0,458.0,148.0,1283.0,166.0,1.2863,86300.0,NEAR OCEAN +-117.15,32.71,52.0,217.0,82.0,531.0,93.0,1.6607,137500.0,NEAR OCEAN +-117.15,32.72,52.0,344.0,177.0,460.0,147.0,1.2292,137500.0,NEAR OCEAN +-117.16,32.72,52.0,788.0,463.0,805.0,391.0,0.9142,162500.0,NEAR OCEAN +-117.16,32.71,52.0,845.0,451.0,1230.0,375.0,1.0918,22500.0,NEAR OCEAN +-117.16,32.71,5.0,2508.0,827.0,2066.0,761.0,1.3092,325000.0,NEAR OCEAN +-117.17,32.71,7.0,2493.0,693.0,951.0,641.0,4.2375,205000.0,NEAR OCEAN +-117.17,32.71,39.0,311.0,181.0,206.0,113.0,0.7685,187500.0,NEAR OCEAN +-117.14,32.73,26.0,450.0,132.0,317.0,109.0,4.0,137500.0,NEAR OCEAN +-117.15,32.72,51.0,1321.0,,781.0,499.0,1.3071,250000.0,NEAR OCEAN +-117.16,32.72,24.0,1232.0,663.0,1184.0,626.0,1.0391,162500.0,NEAR OCEAN +-117.16,32.73,52.0,1218.0,471.0,821.0,429.0,1.9597,200000.0,NEAR OCEAN +-117.16,32.72,27.0,1245.0,471.0,653.0,451.0,1.2668,225000.0,NEAR OCEAN +-117.17,32.73,52.0,408.0,143.0,313.0,143.0,1.815,116700.0,NEAR OCEAN +-117.17,32.72,44.0,626.0,256.0,572.0,229.0,1.5909,262500.0,NEAR OCEAN +-117.16,32.73,52.0,1682.0,617.0,873.0,534.0,2.0972,112500.0,NEAR OCEAN +-117.16,32.73,52.0,1863.0,559.0,906.0,493.0,1.9203,195800.0,NEAR OCEAN +-117.17,32.73,52.0,1578.0,487.0,879.0,446.0,2.4069,215000.0,NEAR OCEAN +-117.16,32.74,49.0,1815.0,495.0,601.0,410.0,3.0571,418800.0,NEAR OCEAN +-117.16,32.74,43.0,1437.0,406.0,692.0,379.0,3.1979,466700.0,NEAR OCEAN +-117.17,32.74,39.0,3803.0,806.0,1567.0,775.0,3.7039,361500.0,NEAR OCEAN +-117.17,32.74,38.0,5054.0,1168.0,2366.0,1103.0,2.9422,289400.0,NEAR OCEAN +-117.17,32.73,52.0,55.0,18.0,65.0,22.0,1.6591,112500.0,NEAR OCEAN +-117.2,32.76,40.0,581.0,157.0,298.0,156.0,2.4,255000.0,NEAR OCEAN +-117.19,32.75,33.0,1115.0,316.0,583.0,269.0,2.5882,258300.0,NEAR OCEAN +-117.18,32.74,20.0,1165.0,269.0,459.0,244.0,3.175,191700.0,NEAR OCEAN +-117.19,32.75,52.0,25.0,5.0,13.0,5.0,0.536,162500.0,NEAR OCEAN +-117.21,32.75,15.0,1716.0,702.0,914.0,672.0,1.0612,300000.0,NEAR OCEAN +-117.21,32.74,45.0,3025.0,583.0,1980.0,550.0,2.2982,87500.0,NEAR OCEAN +-117.21,32.75,27.0,2072.0,534.0,1118.0,510.0,2.8043,262100.0,NEAR OCEAN +-117.22,32.75,24.0,3914.0,985.0,2147.0,874.0,2.9735,225000.0,NEAR OCEAN +-117.22,32.75,26.0,696.0,185.0,384.0,184.0,2.6121,125000.0,NEAR OCEAN +-117.23,32.75,23.0,2415.0,653.0,1275.0,596.0,3.1389,101800.0,NEAR OCEAN +-117.22,32.75,26.0,617.0,112.0,251.0,110.0,3.8036,162000.0,NEAR OCEAN +-117.23,32.75,11.0,4304.0,1245.0,1960.0,1105.0,3.3456,159800.0,NEAR OCEAN +-117.21,32.74,52.0,1245.0,174.0,468.0,193.0,6.9322,334500.0,NEAR OCEAN +-117.22,32.74,52.0,1283.0,173.0,436.0,190.0,7.4029,345700.0,NEAR OCEAN +-117.22,32.74,52.0,1260.0,202.0,555.0,209.0,7.2758,345200.0,NEAR OCEAN +-117.22,32.74,41.0,2621.0,542.0,1074.0,471.0,2.4016,287500.0,NEAR OCEAN +-117.22,32.75,34.0,6001.0,1111.0,2654.0,1072.0,4.5878,291000.0,NEAR OCEAN +-117.22,32.73,38.0,3966.0,768.0,1640.0,729.0,3.8409,291400.0,NEAR OCEAN +-117.23,32.73,35.0,2914.0,683.0,1562.0,638.0,2.5259,240200.0,NEAR OCEAN +-117.23,32.73,44.0,1168.0,263.0,509.0,256.0,2.7273,269700.0,NEAR OCEAN +-117.23,32.72,43.0,952.0,209.0,392.0,210.0,2.1635,244200.0,NEAR OCEAN +-117.23,32.74,44.0,1404.0,229.0,513.0,217.0,4.1806,263800.0,NEAR OCEAN +-117.24,32.74,43.0,2216.0,375.0,918.0,388.0,5.5289,297700.0,NEAR OCEAN +-117.24,32.73,37.0,2260.0,354.0,809.0,351.0,5.9113,388300.0,NEAR OCEAN +-117.23,32.73,36.0,2052.0,287.0,699.0,265.0,7.5557,441400.0,NEAR OCEAN +-117.23,32.72,38.0,2827.0,581.0,972.0,558.0,3.2361,500001.0,NEAR OCEAN +-117.24,32.71,32.0,4164.0,701.0,1277.0,607.0,6.6661,500001.0,NEAR OCEAN +-117.24,32.72,39.0,3089.0,431.0,1175.0,432.0,7.5925,466700.0,NEAR OCEAN +-117.24,32.72,39.0,3819.0,594.0,1361.0,583.0,6.6013,396400.0,NEAR OCEAN +-117.25,32.73,38.0,1840.0,291.0,633.0,283.0,4.9125,383600.0,NEAR OCEAN +-117.25,32.72,36.0,2632.0,450.0,2038.0,419.0,6.5319,345800.0,NEAR OCEAN +-117.25,32.72,33.0,1677.0,228.0,629.0,239.0,6.597,496400.0,NEAR OCEAN +-117.25,32.73,37.0,2224.0,331.0,821.0,341.0,6.3331,400000.0,NEAR OCEAN +-117.28,32.73,44.0,1934.0,325.0,783.0,316.0,4.8684,358600.0,NEAR OCEAN +-117.28,32.74,33.0,4168.0,1112.0,1785.0,984.0,2.7515,247700.0,NEAR OCEAN +-117.25,32.74,36.0,3548.0,956.0,1648.0,866.0,2.6962,288200.0,NEAR OCEAN +-117.25,32.74,36.0,1830.0,430.0,755.0,419.0,2.9904,286800.0,NEAR OCEAN +-117.25,32.74,40.0,2186.0,549.0,953.0,515.0,2.8007,257100.0,NEAR OCEAN +-117.24,32.74,44.0,1686.0,285.0,712.0,298.0,4.0268,298600.0,NEAR OCEAN +-117.24,32.74,44.0,1488.0,259.0,667.0,281.0,4.0862,321800.0,NEAR OCEAN +-117.25,32.73,39.0,1688.0,256.0,635.0,272.0,4.5938,367400.0,NEAR OCEAN +-117.23,32.75,5.0,1824.0,,892.0,426.0,3.4286,137500.0,NEAR OCEAN +-117.23,32.75,21.0,2050.0,608.0,1131.0,550.0,2.4779,165000.0,NEAR OCEAN +-117.23,32.74,16.0,735.0,139.0,299.0,134.0,4.6354,179200.0,NEAR OCEAN +-117.23,32.74,16.0,1953.0,404.0,798.0,385.0,4.8167,169800.0,NEAR OCEAN +-117.23,32.74,35.0,2615.0,525.0,1312.0,547.0,4.1339,238200.0,NEAR OCEAN +-117.24,32.74,45.0,1718.0,293.0,757.0,329.0,4.05,284900.0,NEAR OCEAN +-117.24,32.75,36.0,2831.0,669.0,1279.0,660.0,2.9896,252700.0,NEAR OCEAN +-117.24,32.75,36.0,1856.0,475.0,822.0,416.0,2.3042,220600.0,NEAR OCEAN +-117.24,32.75,41.0,1989.0,514.0,1015.0,489.0,2.79,226000.0,NEAR OCEAN +-117.25,32.74,36.0,1240.0,310.0,577.0,319.0,2.6625,248200.0,NEAR OCEAN +-117.25,32.75,32.0,3551.0,1037.0,1731.0,935.0,2.2017,208300.0,NEAR OCEAN +-117.25,32.75,36.0,1929.0,526.0,974.0,491.0,1.7622,205800.0,NEAR OCEAN +-117.24,32.75,33.0,1980.0,614.0,1057.0,567.0,2.2042,231300.0,NEAR OCEAN +-117.25,32.75,37.0,1189.0,377.0,645.0,377.0,2.4672,216700.0,NEAR OCEAN +-117.28,32.75,34.0,981.0,313.0,508.0,304.0,2.2328,266700.0,NEAR OCEAN +-117.25,32.79,37.0,1467.0,442.0,651.0,354.0,2.375,340400.0,NEAR OCEAN +-117.25,32.79,43.0,906.0,240.0,458.0,205.0,1.8365,328600.0,NEAR OCEAN +-117.25,32.78,36.0,1527.0,427.0,710.0,312.0,2.7857,291700.0,NEAR OCEAN +-117.25,32.78,21.0,1479.0,484.0,658.0,384.0,2.45,350000.0,NEAR OCEAN +-117.28,32.77,38.0,1267.0,340.0,442.0,250.0,4.3403,500000.0,NEAR OCEAN +-117.25,32.77,32.0,2021.0,524.0,973.0,485.0,3.18,362500.0,NEAR OCEAN +-117.25,32.77,35.0,2494.0,690.0,1126.0,624.0,4.0313,385300.0,NEAR OCEAN +-117.25,32.76,38.0,2331.0,493.0,836.0,433.0,4.9125,452600.0,NEAR OCEAN +-117.22,32.78,22.0,2020.0,466.0,1010.0,429.0,3.4527,175000.0,NEAR OCEAN +-117.23,32.79,23.0,2578.0,665.0,989.0,622.0,3.5484,238000.0,NEAR OCEAN +-117.23,32.79,28.0,2453.0,648.0,1082.0,617.0,3.625,266700.0,NEAR OCEAN +-117.23,32.78,35.0,1649.0,355.0,746.0,360.0,4.6293,356500.0,NEAR OCEAN +-117.24,32.78,44.0,2172.0,431.0,892.0,420.0,4.1742,342200.0,NEAR OCEAN +-117.24,32.79,17.0,1149.0,266.0,403.0,228.0,4.1652,241700.0,NEAR OCEAN +-117.24,32.79,18.0,2539.0,616.0,964.0,526.0,3.4306,275000.0,NEAR OCEAN +-117.24,32.79,20.0,961.0,278.0,525.0,254.0,3.1838,245800.0,NEAR OCEAN +-117.24,32.79,25.0,2135.0,691.0,566.0,320.0,2.6902,212500.0,NEAR OCEAN +-117.24,32.79,18.0,1741.0,602.0,508.0,283.0,3.2625,193800.0,NEAR OCEAN +-117.21,32.8,19.0,786.0,282.0,525.0,229.0,1.7273,137500.0,NEAR OCEAN +-117.22,32.8,23.0,1906.0,525.0,1029.0,491.0,2.93,183300.0,NEAR OCEAN +-117.23,32.8,22.0,2981.0,873.0,1751.0,745.0,2.3482,190600.0,NEAR OCEAN +-117.23,32.8,27.0,1297.0,355.0,776.0,337.0,2.4643,244400.0,NEAR OCEAN +-117.23,32.81,28.0,1508.0,263.0,996.0,267.0,3.8026,270000.0,NEAR OCEAN +-117.22,32.81,21.0,1703.0,335.0,902.0,369.0,3.7813,362500.0,NEAR OCEAN +-117.25,32.8,37.0,1096.0,260.0,490.0,267.0,3.2663,270600.0,NEAR OCEAN +-117.25,32.8,32.0,1601.0,468.0,731.0,429.0,2.5568,258300.0,NEAR OCEAN +-117.25,32.8,30.0,2061.0,631.0,1007.0,577.0,2.5813,253100.0,NEAR OCEAN +-117.25,32.8,31.0,2182.0,630.0,1069.0,599.0,2.9781,212500.0,NEAR OCEAN +-117.25,32.79,27.0,848.0,300.0,455.0,298.0,3.0774,275000.0,NEAR OCEAN +-117.25,32.79,25.0,1627.0,375.0,735.0,378.0,3.6429,317100.0,NEAR OCEAN +-117.28,32.8,20.0,1838.0,540.0,615.0,325.0,3.5486,193800.0,NEAR OCEAN +-117.23,32.8,21.0,2429.0,579.0,1011.0,538.0,3.225,229400.0,NEAR OCEAN +-117.23,32.8,31.0,1403.0,388.0,724.0,371.0,2.6403,216100.0,NEAR OCEAN +-117.23,32.8,28.0,3379.0,918.0,1849.0,849.0,3.0293,241700.0,NEAR OCEAN +-117.24,32.8,26.0,3433.0,873.0,1492.0,798.0,2.9258,234800.0,NEAR OCEAN +-117.24,32.8,28.0,1072.0,331.0,692.0,321.0,2.1357,187500.0,NEAR OCEAN +-117.24,32.8,18.0,2205.0,661.0,874.0,580.0,3.8018,112500.0,NEAR OCEAN +-117.24,32.8,19.0,1863.0,497.0,868.0,503.0,2.288,210000.0,NEAR OCEAN +-117.24,32.8,30.0,1917.0,462.0,828.0,437.0,2.4671,276300.0,NEAR OCEAN +-117.24,32.8,29.0,3376.0,882.0,1513.0,843.0,3.101,238200.0,NEAR OCEAN +-117.25,32.81,32.0,2402.0,551.0,1020.0,532.0,3.3942,307400.0,NEAR OCEAN +-117.25,32.8,35.0,2281.0,506.0,1005.0,496.0,4.2296,275000.0,NEAR OCEAN +-117.25,32.8,26.0,2442.0,659.0,1134.0,624.0,3.3274,295500.0,NEAR OCEAN +-117.26,32.81,25.0,2076.0,586.0,1060.0,554.0,2.8421,227800.0,NEAR OCEAN +-117.26,32.81,30.0,1328.0,346.0,577.0,328.0,2.3284,290600.0,NEAR OCEAN +-117.26,32.81,37.0,1616.0,421.0,650.0,395.0,2.92,326500.0,NEAR OCEAN +-117.29,32.81,35.0,1878.0,308.0,598.0,257.0,6.9553,500001.0,NEAR OCEAN +-117.26,32.8,30.0,1446.0,385.0,650.0,344.0,3.744,450000.0,NEAR OCEAN +-117.24,32.81,33.0,1588.0,289.0,683.0,301.0,5.4103,332400.0,NEAR OCEAN +-117.24,32.81,34.0,2420.0,391.0,917.0,392.0,6.5881,394400.0,NEAR OCEAN +-117.25,32.81,39.0,1846.0,350.0,765.0,329.0,3.9187,311900.0,NEAR OCEAN +-117.27,32.84,34.0,1655.0,450.0,870.0,411.0,3.2109,376000.0,NEAR OCEAN +-117.28,32.84,41.0,1420.0,338.0,640.0,314.0,2.9306,360300.0,NEAR OCEAN +-117.27,32.83,39.0,1877.0,426.0,805.0,409.0,3.875,410000.0,NEAR OCEAN +-117.28,32.83,34.0,2392.0,653.0,933.0,619.0,3.7306,500000.0,NEAR OCEAN +-117.31,32.83,38.0,2367.0,480.0,891.0,428.0,4.1477,500001.0,NEAR OCEAN +-117.27,32.82,35.0,2908.0,595.0,1068.0,529.0,4.1793,500001.0,NEAR OCEAN +-117.27,32.82,42.0,2820.0,488.0,1175.0,500.0,4.5083,405200.0,NEAR OCEAN +-117.31,32.82,42.0,2785.0,389.0,833.0,333.0,11.3074,500001.0,NEAR OCEAN +-117.27,32.85,34.0,2105.0,444.0,780.0,406.0,2.3187,488900.0,NEAR OCEAN +-117.28,32.84,21.0,2455.0,660.0,1015.0,597.0,3.7596,381300.0,NEAR OCEAN +-117.27,32.85,26.0,1373.0,,608.0,268.0,4.425,475000.0,NEAR OCEAN +-117.3,32.85,28.0,2334.0,694.0,770.0,552.0,3.1324,500001.0,NEAR OCEAN +-117.23,32.81,24.0,3271.0,508.0,1496.0,482.0,5.9359,422200.0,NEAR OCEAN +-117.23,32.81,22.0,3205.0,429.0,1083.0,410.0,8.1844,406300.0,NEAR OCEAN +-117.24,32.82,20.0,2467.0,332.0,731.0,335.0,7.2559,392300.0,NEAR OCEAN +-117.25,32.84,19.0,1759.0,214.0,659.0,195.0,10.7751,500001.0,NEAR OCEAN +-117.26,32.85,30.0,3652.0,499.0,978.0,462.0,8.2374,500001.0,NEAR OCEAN +-117.25,32.83,17.0,2075.0,262.0,704.0,241.0,10.9529,500001.0,NEAR OCEAN +-117.27,32.84,26.0,3940.0,657.0,1180.0,600.0,6.1025,500001.0,NEAR OCEAN +-117.23,32.88,18.0,5566.0,1465.0,6303.0,1458.0,1.858,205000.0,NEAR OCEAN +-117.22,32.85,26.0,1647.0,261.0,694.0,259.0,4.6875,274400.0,NEAR OCEAN +-117.22,32.84,19.0,2691.0,347.0,1154.0,366.0,8.051,363600.0,NEAR OCEAN +-117.23,32.85,25.0,4229.0,601.0,1634.0,574.0,6.3955,316700.0,NEAR OCEAN +-117.21,32.86,24.0,3596.0,494.0,1573.0,492.0,6.5382,326000.0,NEAR OCEAN +-117.21,32.86,26.0,1352.0,202.0,654.0,217.0,5.3693,260700.0,NEAR OCEAN +-117.21,32.85,15.0,2593.0,521.0,901.0,456.0,4.2065,277800.0,NEAR OCEAN +-117.21,32.85,26.0,2012.0,315.0,872.0,335.0,5.4067,277500.0,NEAR OCEAN +-117.24,32.83,18.0,3109.0,501.0,949.0,368.0,7.4351,445700.0,NEAR OCEAN +-117.25,32.82,19.0,5255.0,762.0,1773.0,725.0,7.8013,474000.0,NEAR OCEAN +-117.25,32.82,23.0,6139.0,826.0,2036.0,807.0,9.5245,500001.0,NEAR OCEAN +-117.26,32.83,24.0,1663.0,199.0,578.0,187.0,10.7721,500001.0,NEAR OCEAN +-117.26,32.82,34.0,5846.0,785.0,1817.0,747.0,8.496,500001.0,NEAR OCEAN +-117.27,32.83,35.0,1420.0,193.0,469.0,177.0,8.0639,500001.0,NEAR OCEAN +-117.29,32.92,25.0,2355.0,381.0,823.0,358.0,6.8322,500001.0,NEAR OCEAN +-117.25,32.86,30.0,1670.0,219.0,606.0,202.0,12.4429,500001.0,NEAR OCEAN +-117.25,32.86,25.0,2911.0,533.0,1137.0,499.0,5.1023,500001.0,NEAR OCEAN +-117.25,32.86,27.0,2530.0,469.0,594.0,326.0,7.2821,500001.0,NEAR OCEAN +-117.26,32.85,42.0,1761.0,329.0,480.0,255.0,5.3787,500001.0,NEAR OCEAN +-117.24,32.85,18.0,3117.0,475.0,904.0,368.0,6.7587,388500.0,NEAR OCEAN +-117.24,32.85,22.0,3479.0,448.0,1252.0,440.0,10.0707,500001.0,NEAR OCEAN +-117.19,32.86,18.0,4231.0,728.0,2030.0,720.0,6.1805,272400.0,NEAR OCEAN +-117.19,32.86,19.0,3716.0,563.0,1788.0,587.0,5.2113,267400.0,NEAR OCEAN +-117.2,32.85,22.0,3501.0,631.0,1297.0,581.0,4.7891,295300.0,NEAR OCEAN +-117.2,32.85,26.0,2298.0,549.0,980.0,555.0,2.4207,213500.0,NEAR OCEAN +-117.19,32.85,15.0,2895.0,498.0,1164.0,443.0,5.102,417500.0,NEAR OCEAN +-117.23,32.87,15.0,2290.0,662.0,1034.0,594.0,3.0104,204200.0,NEAR OCEAN +-117.23,32.86,16.0,1675.0,354.0,604.0,332.0,5.2326,188300.0,NEAR OCEAN +-117.23,32.86,15.0,1199.0,301.0,510.0,296.0,3.6083,180100.0,NEAR OCEAN +-117.23,32.86,15.0,1703.0,320.0,587.0,282.0,5.0855,209800.0,NEAR OCEAN +-117.23,32.86,16.0,1200.0,468.0,648.0,443.0,3.045,100000.0,NEAR OCEAN +-117.23,32.87,11.0,3123.0,740.0,1223.0,634.0,5.417,196800.0,NEAR OCEAN +-117.21,32.86,16.0,2800.0,566.0,1267.0,518.0,3.2794,148600.0,NEAR OCEAN +-117.22,32.87,14.0,3512.0,807.0,1835.0,792.0,3.35,171000.0,NEAR OCEAN +-117.22,32.86,4.0,16289.0,4585.0,7604.0,4176.0,3.6287,280800.0,NEAR OCEAN +-117.22,32.87,5.0,3511.0,1008.0,1599.0,918.0,3.8542,176600.0,NEAR OCEAN +-117.21,32.89,14.0,3114.0,773.0,1592.0,776.0,3.3176,156100.0,NEAR OCEAN +-117.2,32.86,4.0,4308.0,1095.0,1923.0,932.0,3.9356,267000.0,NEAR OCEAN +-117.21,32.87,12.0,1428.0,303.0,528.0,269.0,4.1429,254400.0,NEAR OCEAN +-117.15,32.91,15.0,1613.0,303.0,702.0,240.0,4.875,169300.0,<1H OCEAN +-117.15,32.91,14.0,1259.0,238.0,889.0,247.0,4.9464,174800.0,<1H OCEAN +-117.16,32.91,5.0,1619.0,272.0,1063.0,296.0,6.0891,214600.0,<1H OCEAN +-117.15,32.91,10.0,2349.0,431.0,1598.0,435.0,4.8229,183200.0,<1H OCEAN +-117.15,32.9,12.0,1681.0,381.0,1050.0,362.0,4.2008,176100.0,<1H OCEAN +-117.16,32.89,5.0,8576.0,1952.0,5006.0,1827.0,4.3598,189100.0,<1H OCEAN +-117.12,32.91,8.0,3405.0,961.0,1742.0,918.0,2.8728,114600.0,<1H OCEAN +-117.13,32.91,15.0,1450.0,266.0,747.0,290.0,3.6111,196300.0,<1H OCEAN +-117.13,32.91,16.0,3230.0,579.0,1825.0,576.0,4.2969,151200.0,<1H OCEAN +-117.13,32.91,16.0,2715.0,581.0,1619.0,584.0,4.0,154700.0,<1H OCEAN +-117.14,32.91,14.0,3014.0,710.0,2165.0,705.0,3.7837,160300.0,<1H OCEAN +-117.14,32.9,16.0,3217.0,,2054.0,687.0,4.2234,162100.0,<1H OCEAN +-117.13,32.9,15.0,2785.0,644.0,1798.0,630.0,3.7156,175200.0,<1H OCEAN +-117.12,32.9,14.0,3249.0,937.0,1929.0,838.0,2.8588,92500.0,<1H OCEAN +-117.12,32.9,13.0,1743.0,363.0,854.0,353.0,4.6667,138200.0,<1H OCEAN +-117.13,32.92,16.0,2173.0,399.0,1460.0,393.0,4.2614,169600.0,<1H OCEAN +-117.13,32.92,17.0,1481.0,315.0,1002.0,300.0,3.6196,163400.0,<1H OCEAN +-117.14,32.92,7.0,1308.0,418.0,766.0,390.0,3.2151,106300.0,<1H OCEAN +-117.14,32.92,6.0,3069.0,750.0,1541.0,736.0,3.814,132500.0,<1H OCEAN +-117.14,32.92,15.0,3242.0,595.0,1936.0,593.0,4.9706,184700.0,<1H OCEAN +-117.13,32.92,16.0,1580.0,241.0,917.0,261.0,4.7266,191100.0,<1H OCEAN +-117.13,32.92,16.0,1565.0,257.0,893.0,239.0,5.5036,192300.0,<1H OCEAN +-117.13,32.94,15.0,4846.0,825.0,2797.0,823.0,4.9375,180400.0,<1H OCEAN +-117.13,32.93,16.0,2918.0,444.0,1697.0,444.0,5.3062,195500.0,<1H OCEAN +-117.14,32.93,14.0,1946.0,463.0,1205.0,390.0,4.2109,171200.0,<1H OCEAN +-117.14,32.93,12.0,1474.0,364.0,1009.0,372.0,4.0521,166700.0,<1H OCEAN +-117.14,32.93,16.0,2412.0,419.0,1612.0,422.0,4.5086,171100.0,<1H OCEAN +-117.12,32.93,7.0,1427.0,243.0,927.0,239.0,5.3625,218900.0,<1H OCEAN +-117.15,32.93,16.0,2718.0,438.0,1515.0,431.0,5.1433,185300.0,<1H OCEAN +-117.14,32.92,15.0,1558.0,314.0,949.0,332.0,5.2864,174400.0,<1H OCEAN +-117.15,32.92,16.0,1972.0,402.0,1377.0,413.0,4.4615,168300.0,<1H OCEAN +-117.15,32.92,16.0,2366.0,392.0,1482.0,407.0,4.9024,182900.0,<1H OCEAN +-117.15,32.92,16.0,2969.0,514.0,1594.0,465.0,4.5221,168300.0,<1H OCEAN +-117.18,32.92,4.0,15025.0,2616.0,7560.0,2392.0,5.196,210700.0,<1H OCEAN +-117.25,32.96,18.0,4773.0,743.0,1970.0,716.0,6.6199,406200.0,NEAR OCEAN +-117.26,32.95,15.0,1036.0,149.0,395.0,157.0,5.8343,500001.0,NEAR OCEAN +-117.26,32.95,15.0,1882.0,233.0,704.0,219.0,6.9794,500001.0,NEAR OCEAN +-117.25,32.94,16.0,4755.0,807.0,1829.0,756.0,6.7694,425900.0,NEAR OCEAN +-117.25,32.94,15.0,1804.0,339.0,673.0,296.0,5.9806,370500.0,NEAR OCEAN +-117.24,32.95,18.0,1591.0,268.0,547.0,243.0,5.9547,329300.0,NEAR OCEAN +-117.24,32.94,12.0,2165.0,437.0,792.0,386.0,5.2648,294400.0,NEAR OCEAN +-117.13,32.98,5.0,2276.0,311.0,1158.0,317.0,6.4321,271900.0,<1H OCEAN +-117.13,32.97,10.0,3486.0,469.0,1700.0,483.0,6.4696,249500.0,<1H OCEAN +-117.18,32.95,4.0,19001.0,2688.0,8980.0,2441.0,6.3237,260900.0,<1H OCEAN +-117.14,32.96,12.0,5949.0,799.0,2936.0,781.0,6.3721,241500.0,<1H OCEAN +-117.13,32.96,15.0,2267.0,292.0,1180.0,289.0,6.712,240200.0,<1H OCEAN +-117.24,32.98,4.0,6423.0,1042.0,2607.0,983.0,7.6348,337000.0,NEAR OCEAN +-117.21,32.96,3.0,6251.0,988.0,2330.0,893.0,8.4355,467600.0,NEAR OCEAN +-117.22,32.95,4.0,18123.0,3173.0,7301.0,2964.0,6.357,322500.0,NEAR OCEAN +-117.22,32.83,34.0,2936.0,597.0,1512.0,571.0,3.7841,176900.0,NEAR OCEAN +-117.22,32.83,31.0,3958.0,727.0,1924.0,728.0,5.4605,190200.0,NEAR OCEAN +-117.22,32.83,17.0,1124.0,187.0,553.0,205.0,5.7451,237300.0,NEAR OCEAN +-117.22,32.83,31.0,2558.0,512.0,1164.0,492.0,3.4318,200400.0,NEAR OCEAN +-117.22,32.82,35.0,756.0,135.0,423.0,136.0,3.5234,183900.0,NEAR OCEAN +-117.2,32.84,34.0,3353.0,544.0,1583.0,571.0,4.55,187700.0,NEAR OCEAN +-117.2,32.84,32.0,2033.0,394.0,989.0,389.0,3.2583,181400.0,NEAR OCEAN +-117.21,32.84,34.0,2158.0,366.0,1046.0,335.0,4.5402,182100.0,NEAR OCEAN +-117.2,32.83,36.0,1089.0,240.0,623.0,226.0,2.5909,176000.0,NEAR OCEAN +-117.21,32.83,36.0,1475.0,328.0,806.0,327.0,3.5078,166000.0,NEAR OCEAN +-117.21,32.83,28.0,3241.0,533.0,1334.0,513.0,4.1806,199600.0,NEAR OCEAN +-117.21,32.83,35.0,2259.0,501.0,1340.0,511.0,3.4482,162500.0,NEAR OCEAN +-117.21,32.81,33.0,4773.0,873.0,1954.0,845.0,4.3862,184800.0,NEAR OCEAN +-117.21,32.82,31.0,2035.0,383.0,866.0,360.0,3.8529,212000.0,NEAR OCEAN +-117.21,32.81,27.0,1318.0,216.0,495.0,191.0,5.2837,283800.0,NEAR OCEAN +-117.22,32.82,22.0,3738.0,795.0,1476.0,728.0,3.7963,303100.0,NEAR OCEAN +-117.22,32.81,24.0,730.0,196.0,335.0,203.0,3.5078,362500.0,NEAR OCEAN +-117.2,32.83,35.0,1377.0,350.0,792.0,313.0,2.8472,161400.0,NEAR OCEAN +-117.2,32.82,35.0,1217.0,220.0,643.0,237.0,3.9464,171600.0,NEAR OCEAN +-117.2,32.82,35.0,2772.0,537.0,1392.0,521.0,3.337,172300.0,NEAR OCEAN +-117.19,32.82,34.0,3850.0,608.0,1619.0,602.0,5.0465,208200.0,NEAR OCEAN +-117.19,32.82,35.0,1074.0,180.0,442.0,173.0,5.253,204000.0,NEAR OCEAN +-117.19,32.82,35.0,2197.0,353.0,945.0,357.0,4.9219,192900.0,NEAR OCEAN +-117.18,32.84,31.0,3064.0,575.0,1476.0,549.0,3.6667,175900.0,NEAR OCEAN +-117.18,32.84,30.0,2290.0,523.0,1272.0,472.0,3.5606,165100.0,NEAR OCEAN +-117.18,32.84,32.0,1351.0,237.0,823.0,269.0,4.2768,167800.0,NEAR OCEAN +-117.19,32.84,30.0,2492.0,406.0,1250.0,431.0,5.5277,197100.0,NEAR OCEAN +-117.19,32.84,35.0,2263.0,427.0,1001.0,408.0,3.875,172000.0,NEAR OCEAN +-117.18,32.83,23.0,2105.0,525.0,1218.0,484.0,3.375,184100.0,NEAR OCEAN +-117.19,32.83,30.0,2288.0,448.0,1240.0,469.0,4.0114,169800.0,NEAR OCEAN +-117.19,32.83,30.0,3225.0,555.0,1601.0,532.0,4.3317,173300.0,NEAR OCEAN +-117.17,32.83,24.0,3541.0,530.0,1591.0,530.0,5.3538,212500.0,NEAR OCEAN +-117.17,32.82,24.0,1623.0,417.0,911.0,397.0,2.7401,198100.0,NEAR OCEAN +-117.17,32.82,21.0,2869.0,596.0,1471.0,577.0,3.0375,197600.0,NEAR OCEAN +-117.18,32.83,27.0,2346.0,399.0,1105.0,373.0,4.2708,182800.0,NEAR OCEAN +-117.18,32.83,31.0,1772.0,353.0,1090.0,350.0,3.9265,162000.0,NEAR OCEAN +-117.16,32.82,28.0,2291.0,371.0,1098.0,382.0,4.6875,188000.0,NEAR OCEAN +-117.17,32.81,26.0,2424.0,388.0,974.0,375.0,4.739,184100.0,NEAR OCEAN +-117.17,32.81,26.0,788.0,127.0,346.0,125.0,5.0603,185700.0,NEAR OCEAN +-117.18,32.81,19.0,6823.0,1509.0,3784.0,1509.0,3.1032,179500.0,NEAR OCEAN +-117.17,32.82,24.0,1569.0,377.0,715.0,321.0,3.1146,187500.0,NEAR OCEAN +-117.16,32.81,14.0,4328.0,1100.0,2046.0,1044.0,2.2899,159000.0,NEAR OCEAN +-117.16,32.81,35.0,1213.0,200.0,532.0,181.0,3.6806,172400.0,NEAR OCEAN +-117.16,32.8,37.0,422.0,79.0,211.0,80.0,3.0625,159700.0,NEAR OCEAN +-117.16,32.8,22.0,2259.0,634.0,1213.0,601.0,2.5,177800.0,NEAR OCEAN +-117.16,32.81,34.0,2275.0,375.0,1021.0,379.0,3.6371,176300.0,NEAR OCEAN +-117.17,32.81,33.0,3064.0,506.0,1355.0,488.0,4.22,178700.0,NEAR OCEAN +-117.14,32.83,25.0,2161.0,462.0,896.0,468.0,2.2284,177500.0,NEAR OCEAN +-117.18,32.82,25.0,1756.0,301.0,722.0,312.0,4.5625,162300.0,NEAR OCEAN +-117.18,32.81,28.0,3436.0,537.0,1503.0,498.0,4.7679,204000.0,NEAR OCEAN +-117.19,32.81,33.0,5226.0,833.0,2221.0,839.0,5.1491,207000.0,NEAR OCEAN +-117.18,32.8,10.0,3821.0,631.0,1605.0,609.0,5.5454,217100.0,NEAR OCEAN +-117.18,32.8,30.0,2456.0,390.0,1022.0,393.0,3.8542,198500.0,NEAR OCEAN +-117.18,32.79,30.0,5201.0,1104.0,2961.0,1064.0,3.2661,140400.0,NEAR OCEAN +-117.17,32.79,44.0,2262.0,647.0,3009.0,657.0,2.2663,123600.0,NEAR OCEAN +-117.17,32.79,43.0,1269.0,297.0,946.0,285.0,2.1447,133300.0,NEAR OCEAN +-117.16,32.8,25.0,1399.0,329.0,1308.0,355.0,2.5682,187500.0,NEAR OCEAN +-117.17,32.8,20.0,2827.0,554.0,1822.0,536.0,3.4706,157600.0,NEAR OCEAN +-117.15,32.8,27.0,1937.0,537.0,1211.0,482.0,2.75,87500.0,NEAR OCEAN +-117.15,32.8,23.0,2395.0,476.0,2284.0,488.0,3.7292,146300.0,NEAR OCEAN +-117.16,32.78,24.0,3566.0,765.0,1697.0,722.0,3.6375,178600.0,NEAR OCEAN +-117.16,32.79,32.0,1731.0,413.0,1569.0,427.0,3.3375,154300.0,NEAR OCEAN +-117.17,32.78,17.0,3845.0,1051.0,3102.0,944.0,2.3658,164100.0,NEAR OCEAN +-117.16,32.78,34.0,2515.0,488.0,1594.0,515.0,3.7381,165000.0,NEAR OCEAN +-117.17,32.78,42.0,1104.0,305.0,892.0,270.0,2.2768,145200.0,NEAR OCEAN +-117.17,32.77,35.0,1399.0,274.0,695.0,281.0,3.767,166800.0,NEAR OCEAN +-117.17,32.77,6.0,3856.0,875.0,1547.0,816.0,4.5481,164800.0,NEAR OCEAN +-117.18,32.77,16.0,2374.0,780.0,913.0,705.0,2.7386,87500.0,NEAR OCEAN +-117.18,32.76,8.0,3694.0,997.0,1297.0,807.0,3.6492,158900.0,NEAR OCEAN +-117.18,32.76,17.0,711.0,254.0,327.0,227.0,2.6493,67500.0,NEAR OCEAN +-117.18,32.78,21.0,4185.0,1018.0,3122.0,993.0,3.0481,210000.0,NEAR OCEAN +-117.18,32.77,23.0,1215.0,225.0,592.0,224.0,3.4,200600.0,NEAR OCEAN +-117.21,32.81,26.0,2496.0,407.0,1062.0,380.0,5.5413,302100.0,NEAR OCEAN +-117.2,32.8,34.0,4854.0,912.0,2089.0,854.0,3.8542,200000.0,NEAR OCEAN +-117.2,32.79,16.0,2079.0,394.0,746.0,383.0,5.0958,300000.0,NEAR OCEAN +-117.2,32.8,33.0,2573.0,436.0,1084.0,443.0,4.2417,294100.0,NEAR OCEAN +-117.21,32.8,34.0,1398.0,222.0,532.0,244.0,3.7102,289600.0,NEAR OCEAN +-117.19,32.8,16.0,2593.0,794.0,1235.0,684.0,3.1304,166300.0,NEAR OCEAN +-117.2,32.8,36.0,4018.0,1067.0,1620.0,842.0,2.3599,168400.0,NEAR OCEAN +-117.19,32.79,36.0,1514.0,258.0,665.0,278.0,3.8571,235100.0,NEAR OCEAN +-117.19,32.79,35.0,1788.0,378.0,777.0,374.0,3.3713,238400.0,NEAR OCEAN +-117.2,32.79,31.0,3417.0,533.0,1245.0,532.0,4.7788,276000.0,NEAR OCEAN +-117.2,32.79,29.0,1213.0,,654.0,246.0,4.5987,255600.0,NEAR OCEAN +-117.2,32.79,34.0,757.0,212.0,409.0,222.0,3.2312,192200.0,NEAR OCEAN +-117.19,32.78,34.0,4108.0,664.0,1659.0,644.0,4.4097,252000.0,NEAR OCEAN +-117.2,32.78,38.0,2662.0,498.0,1132.0,496.0,4.0057,241600.0,NEAR OCEAN +-117.19,32.77,30.0,2747.0,640.0,3185.0,657.0,3.765,238000.0,NEAR OCEAN +-117.19,32.77,16.0,3273.0,670.0,1305.0,671.0,4.1368,151000.0,NEAR OCEAN +-117.19,32.77,9.0,634.0,152.0,248.0,133.0,3.8571,143800.0,NEAR OCEAN +-117.19,32.77,14.0,3575.0,992.0,1645.0,839.0,2.4397,140600.0,NEAR OCEAN +-117.2,32.77,30.0,156.0,45.0,77.0,40.0,3.2679,137500.0,NEAR OCEAN +-117.2,32.77,31.0,1952.0,471.0,936.0,462.0,2.8621,196900.0,NEAR OCEAN +-117.15,32.81,34.0,1629.0,318.0,900.0,282.0,3.1458,178300.0,NEAR OCEAN +-117.15,32.8,41.0,1413.0,261.0,1070.0,259.0,2.3578,166700.0,NEAR OCEAN +-117.14,32.8,41.0,2423.0,469.0,1813.0,466.0,2.1157,156900.0,NEAR OCEAN +-117.14,32.8,33.0,2670.0,435.0,1256.0,431.0,3.9417,179800.0,NEAR OCEAN +-117.14,32.8,35.0,1267.0,212.0,710.0,204.0,2.5368,169600.0,NEAR OCEAN +-117.14,32.79,35.0,3578.0,582.0,1568.0,553.0,4.7813,188600.0,NEAR OCEAN +-117.15,32.78,25.0,1577.0,266.0,611.0,284.0,5.25,205100.0,NEAR OCEAN +-117.14,32.79,31.0,984.0,161.0,422.0,158.0,5.282,183000.0,NEAR OCEAN +-117.13,32.81,19.0,2157.0,554.0,1349.0,535.0,2.7652,177400.0,NEAR OCEAN +-117.14,32.81,34.0,1748.0,294.0,800.0,294.0,4.4886,179100.0,NEAR OCEAN +-117.13,32.8,15.0,1606.0,375.0,784.0,342.0,3.7237,108300.0,NEAR OCEAN +-117.13,32.8,33.0,2731.0,456.0,1263.0,445.0,4.5568,175300.0,NEAR OCEAN +-117.12,32.8,29.0,2863.0,534.0,1392.0,522.0,3.8719,174200.0,NEAR OCEAN +-117.13,32.81,26.0,2119.0,444.0,1202.0,440.0,3.2308,166500.0,NEAR OCEAN +-117.12,32.8,31.0,1727.0,342.0,879.0,345.0,3.8125,166300.0,NEAR OCEAN +-117.13,32.8,35.0,2129.0,382.0,1044.0,350.0,3.9732,174900.0,NEAR OCEAN +-117.13,32.79,35.0,1458.0,262.0,723.0,257.0,4.2098,174100.0,NEAR OCEAN +-117.13,32.79,35.0,1362.0,243.0,698.0,255.0,3.6458,173800.0,NEAR OCEAN +-117.12,32.78,4.0,2782.0,817.0,1309.0,787.0,4.2621,124200.0,NEAR OCEAN +-117.15,32.77,16.0,2056.0,631.0,847.0,569.0,2.9576,92200.0,NEAR OCEAN +-117.09,32.81,7.0,6100.0,1185.0,2710.0,1040.0,5.5673,288200.0,NEAR OCEAN +-117.11,32.82,16.0,3980.0,682.0,3174.0,647.0,2.6607,175000.0,NEAR OCEAN +-117.11,32.82,17.0,1787.0,330.0,1341.0,314.0,2.875,112500.0,NEAR OCEAN +-117.11,32.81,15.0,3428.0,491.0,2303.0,486.0,2.5953,67500.0,NEAR OCEAN +-117.11,32.8,17.0,3890.0,586.0,2791.0,595.0,3.2197,67500.0,NEAR OCEAN +-117.09,32.8,15.0,666.0,152.0,247.0,164.0,2.15,131300.0,NEAR OCEAN +-117.11,32.84,16.0,4608.0,629.0,2020.0,636.0,6.04,243000.0,<1H OCEAN +-117.11,32.82,16.0,4241.0,892.0,1771.0,864.0,4.375,166500.0,NEAR OCEAN +-117.1,32.83,16.0,1049.0,154.0,467.0,160.0,6.2047,248100.0,<1H OCEAN +-117.1,32.83,16.0,4214.0,744.0,1820.0,699.0,4.3783,179500.0,<1H OCEAN +-117.09,32.83,15.0,4138.0,636.0,2001.0,677.0,4.8419,264000.0,<1H OCEAN +-117.08,32.82,16.0,1787.0,236.0,770.0,228.0,7.1298,278600.0,<1H OCEAN +-117.08,32.82,10.0,5177.0,856.0,2190.0,816.0,5.9734,271700.0,<1H OCEAN +-117.08,32.83,7.0,13703.0,2352.0,4446.0,1856.0,6.4335,260600.0,<1H OCEAN +-117.04,32.83,8.0,2205.0,348.0,777.0,341.0,6.0266,177400.0,<1H OCEAN +-117.07,32.91,5.0,2234.0,256.0,894.0,253.0,10.3354,477600.0,<1H OCEAN +-117.04,32.9,6.0,6525.0,826.0,3146.0,806.0,9.2858,436100.0,<1H OCEAN +-117.08,32.8,25.0,2963.0,552.0,1162.0,556.0,3.625,184500.0,NEAR OCEAN +-117.09,32.79,20.0,2183.0,534.0,999.0,496.0,2.8631,169700.0,NEAR OCEAN +-117.09,32.8,36.0,2163.0,367.0,915.0,360.0,4.7188,174100.0,NEAR OCEAN +-117.08,32.8,32.0,1587.0,268.0,635.0,249.0,3.375,178100.0,NEAR OCEAN +-117.11,32.79,16.0,2574.0,771.0,1129.0,721.0,3.3849,96900.0,NEAR OCEAN +-117.11,32.79,16.0,1791.0,518.0,1006.0,491.0,3.5179,129300.0,NEAR OCEAN +-117.11,32.78,16.0,2470.0,830.0,1170.0,724.0,3.5562,73500.0,NEAR OCEAN +-117.11,32.78,16.0,2220.0,512.0,930.0,527.0,3.6528,133200.0,NEAR OCEAN +-117.09,32.79,36.0,1529.0,266.0,683.0,260.0,4.0982,171200.0,NEAR OCEAN +-117.09,32.79,36.0,1936.0,345.0,861.0,343.0,3.8333,170000.0,NEAR OCEAN +-117.09,32.79,31.0,2019.0,417.0,872.0,386.0,3.1964,177700.0,NEAR OCEAN +-117.09,32.78,28.0,1708.0,393.0,816.0,393.0,2.9881,165300.0,NEAR OCEAN +-117.07,32.8,31.0,2550.0,395.0,1017.0,405.0,5.1488,181000.0,<1H OCEAN +-117.07,32.8,36.0,2028.0,349.0,820.0,352.0,3.9828,168900.0,<1H OCEAN +-117.07,32.79,36.0,3583.0,642.0,1711.0,602.0,3.9745,170800.0,NEAR OCEAN +-117.07,32.8,23.0,2698.0,410.0,1094.0,411.0,5.1782,195100.0,<1H OCEAN +-117.07,32.81,15.0,2000.0,402.0,778.0,369.0,4.3594,224200.0,<1H OCEAN +-117.06,32.81,17.0,3939.0,550.0,1694.0,553.0,6.7927,234700.0,<1H OCEAN +-117.05,32.81,17.0,1885.0,292.0,771.0,301.0,5.6402,228600.0,<1H OCEAN +-117.05,32.8,17.0,1475.0,308.0,549.0,293.0,3.7167,180400.0,<1H OCEAN +-117.06,32.8,17.0,2247.0,340.0,973.0,318.0,5.5,222000.0,<1H OCEAN +-117.07,32.79,25.0,2489.0,314.0,911.0,309.0,7.8336,277600.0,NEAR OCEAN +-117.07,32.78,26.0,3725.0,623.0,1516.0,627.0,4.7143,268300.0,NEAR OCEAN +-117.08,32.78,21.0,2919.0,496.0,984.0,443.0,4.625,222800.0,NEAR OCEAN +-117.04,32.79,23.0,2491.0,350.0,863.0,348.0,6.7196,306800.0,<1H OCEAN +-117.04,32.8,25.0,2504.0,345.0,1067.0,350.0,5.7416,243400.0,<1H OCEAN +-117.05,32.8,16.0,1561.0,378.0,574.0,350.0,3.0035,94600.0,<1H OCEAN +-117.05,32.8,25.0,1905.0,250.0,865.0,253.0,6.4797,249000.0,<1H OCEAN +-117.05,32.8,23.0,3309.0,401.0,1116.0,386.0,7.916,330600.0,<1H OCEAN +-117.06,32.79,17.0,2524.0,332.0,771.0,317.0,8.7604,331800.0,<1H OCEAN +-117.06,32.79,21.0,3787.0,492.0,1246.0,457.0,9.6023,391300.0,<1H OCEAN +-117.06,32.78,31.0,2485.0,436.0,942.0,448.0,4.8,220800.0,NEAR OCEAN +-117.02,32.8,27.0,2369.0,370.0,927.0,374.0,4.1162,177200.0,<1H OCEAN +-117.03,32.79,26.0,3859.0,513.0,1469.0,538.0,5.8683,220500.0,<1H OCEAN +-117.03,32.8,19.0,3866.0,775.0,1554.0,703.0,4.3281,220000.0,<1H OCEAN +-117.04,32.8,11.0,1802.0,440.0,630.0,428.0,2.0337,146700.0,<1H OCEAN +-117.01,32.8,17.0,1042.0,210.0,650.0,215.0,3.1,84200.0,<1H OCEAN +-117.01,32.8,17.0,1558.0,479.0,803.0,431.0,2.6934,160200.0,<1H OCEAN +-117.01,32.8,20.0,2705.0,545.0,1198.0,497.0,3.7159,168900.0,<1H OCEAN +-117.01,32.79,33.0,4015.0,663.0,1864.0,664.0,4.3152,159300.0,<1H OCEAN +-117.02,32.8,29.0,1232.0,243.0,665.0,247.0,3.65,168900.0,<1H OCEAN +-117.02,32.8,31.0,2692.0,445.0,1129.0,450.0,4.4583,170000.0,<1H OCEAN +-117.01,32.81,26.0,4499.0,645.0,1866.0,626.0,5.516,185100.0,<1H OCEAN +-117.02,32.81,27.0,1950.0,317.0,950.0,320.0,4.0656,164000.0,<1H OCEAN +-117.02,32.81,26.0,1998.0,301.0,874.0,305.0,5.4544,180900.0,<1H OCEAN +-117.01,32.81,21.0,4203.0,618.0,1620.0,600.0,5.3441,193500.0,<1H OCEAN +-117.02,32.81,14.0,3173.0,599.0,1451.0,585.0,3.7292,182200.0,<1H OCEAN +-117.03,32.82,16.0,1765.0,289.0,743.0,280.0,4.9744,209700.0,<1H OCEAN +-117.04,32.81,12.0,2880.0,406.0,1381.0,418.0,6.5412,254200.0,<1H OCEAN +-117.05,32.82,16.0,4046.0,731.0,1684.0,701.0,4.2312,197000.0,<1H OCEAN +-117.05,32.59,26.0,1919.0,345.0,1326.0,341.0,4.2679,131900.0,NEAR OCEAN +-117.06,32.59,13.0,3920.0,775.0,2814.0,760.0,4.0616,148800.0,NEAR OCEAN +-117.05,32.58,22.0,2101.0,399.0,1551.0,371.0,4.1518,136900.0,NEAR OCEAN +-117.06,32.58,17.0,2724.0,567.0,2213.0,554.0,3.8529,147700.0,NEAR OCEAN +-117.06,32.58,13.0,3435.0,708.0,1761.0,699.0,3.4792,107600.0,NEAR OCEAN +-117.06,32.58,11.0,2879.0,679.0,2098.0,673.0,3.5125,142400.0,NEAR OCEAN +-117.06,32.57,16.0,1269.0,282.0,1609.0,298.0,2.6985,156500.0,NEAR OCEAN +-117.04,32.58,14.0,2355.0,406.0,1883.0,401.0,5.0311,152100.0,NEAR OCEAN +-117.04,32.58,20.0,2029.0,357.0,1497.0,353.0,4.0089,132100.0,NEAR OCEAN +-117.05,32.58,23.0,1918.0,339.0,1392.0,340.0,4.087,134800.0,NEAR OCEAN +-117.05,32.58,25.0,2185.0,370.0,1558.0,369.0,5.3072,132700.0,NEAR OCEAN +-117.05,32.57,22.0,2857.0,516.0,2412.0,496.0,4.7337,127600.0,NEAR OCEAN +-117.06,32.57,25.0,1268.0,282.0,991.0,299.0,3.0284,123600.0,NEAR OCEAN +-117.06,32.57,17.0,2252.0,378.0,1776.0,365.0,4.6364,141100.0,NEAR OCEAN +-117.05,32.57,13.0,2880.0,576.0,2450.0,567.0,3.1696,138000.0,NEAR OCEAN +-117.05,32.56,18.0,1215.0,320.0,1195.0,349.0,1.9875,114900.0,NEAR OCEAN +-117.05,32.56,17.0,985.0,233.0,811.0,223.0,2.875,134500.0,NEAR OCEAN +-117.06,32.57,18.0,1384.0,311.0,1429.0,287.0,1.3362,95000.0,NEAR OCEAN +-116.97,32.56,23.0,1262.0,294.0,5176.0,275.0,2.5625,153300.0,NEAR OCEAN +-117.04,32.55,15.0,2206.0,648.0,2511.0,648.0,1.6348,93200.0,NEAR OCEAN +-117.05,32.56,22.0,2172.0,563.0,2049.0,524.0,2.0159,139300.0,NEAR OCEAN +-117.06,32.56,17.0,2803.0,683.0,2768.0,676.0,1.7958,140400.0,NEAR OCEAN +-117.06,32.56,5.0,2706.0,925.0,3148.0,855.0,1.7301,125000.0,NEAR OCEAN +-117.06,32.55,5.0,3223.0,940.0,3284.0,854.0,1.4384,108800.0,NEAR OCEAN +-117.04,32.54,7.0,938.0,297.0,1187.0,282.0,1.2667,67500.0,NEAR OCEAN +-117.1,32.59,21.0,2350.0,667.0,1621.0,613.0,2.0734,87500.0,NEAR OCEAN +-117.1,32.58,23.0,1662.0,377.0,1318.0,386.0,2.3,120800.0,NEAR OCEAN +-117.1,32.58,17.0,2046.0,559.0,1585.0,530.0,2.25,132800.0,NEAR OCEAN +-117.1,32.58,33.0,393.0,76.0,330.0,80.0,4.1029,122700.0,NEAR OCEAN +-117.1,32.58,29.0,1061.0,202.0,759.0,206.0,4.8646,136800.0,NEAR OCEAN +-117.1,32.57,26.0,2343.0,371.0,1221.0,372.0,4.3601,144900.0,NEAR OCEAN +-117.1,32.56,16.0,2687.0,501.0,1502.0,480.0,3.75,146800.0,NEAR OCEAN +-117.07,32.57,17.0,2961.0,634.0,1911.0,615.0,2.5859,131400.0,NEAR OCEAN +-117.08,32.57,18.0,2203.0,544.0,1943.0,497.0,2.25,103200.0,NEAR OCEAN +-117.07,32.57,14.0,1527.0,357.0,1224.0,363.0,2.7361,93600.0,NEAR OCEAN +-117.07,32.56,9.0,3648.0,895.0,3293.0,840.0,3.0992,142600.0,NEAR OCEAN +-117.08,32.59,8.0,2888.0,662.0,2441.0,683.0,2.7048,153000.0,NEAR OCEAN +-117.08,32.58,15.0,1462.0,274.0,1002.0,271.0,3.9698,142700.0,NEAR OCEAN +-117.08,32.58,22.0,2128.0,477.0,1420.0,450.0,3.2687,131000.0,NEAR OCEAN +-117.07,32.58,25.0,1607.0,280.0,899.0,260.0,3.8194,134400.0,NEAR OCEAN +-117.09,32.58,12.0,2565.0,567.0,1785.0,545.0,3.0273,135300.0,NEAR OCEAN +-117.08,32.57,9.0,6298.0,1512.0,4451.0,1456.0,2.569,88300.0,NEAR OCEAN +-117.09,32.57,23.0,1817.0,323.0,1371.0,327.0,3.6736,139500.0,NEAR OCEAN +-117.09,32.57,10.0,2198.0,368.0,1645.0,350.0,4.5547,160700.0,NEAR OCEAN +-117.09,32.57,17.0,444.0,83.0,357.0,87.0,5.1478,138900.0,NEAR OCEAN +-117.09,32.56,8.0,864.0,156.0,626.0,172.0,4.8984,151500.0,NEAR OCEAN +-117.09,32.55,8.0,6533.0,1217.0,4797.0,1177.0,3.9583,144400.0,NEAR OCEAN +-117.12,32.58,34.0,2003.0,466.0,1226.0,443.0,3.0613,136700.0,NEAR OCEAN +-117.12,32.57,21.0,1738.0,295.0,983.0,298.0,4.8274,174100.0,NEAR OCEAN +-117.13,32.58,27.0,2511.0,615.0,1427.0,576.0,3.1645,156000.0,NEAR OCEAN +-117.13,32.58,32.0,1870.0,437.0,1142.0,426.0,2.3194,159400.0,NEAR OCEAN +-117.13,32.58,27.0,1417.0,373.0,814.0,348.0,2.3603,195300.0,NEAR OCEAN +-117.12,32.56,20.0,2524.0,682.0,1819.0,560.0,2.9286,257700.0,NEAR OCEAN +-117.11,32.58,28.0,1869.0,407.0,1074.0,344.0,2.5988,135600.0,NEAR OCEAN +-117.11,32.57,32.0,2723.0,586.0,1702.0,562.0,3.3371,140500.0,NEAR OCEAN +-117.12,32.57,35.0,1450.0,256.0,930.0,286.0,2.6715,133300.0,NEAR OCEAN +-117.12,32.58,26.0,1360.0,309.0,869.0,328.0,3.0217,131600.0,NEAR OCEAN +-117.11,32.58,21.0,2894.0,685.0,2109.0,712.0,2.2755,125000.0,NEAR OCEAN +-117.1,32.58,27.0,2616.0,591.0,1889.0,577.0,2.3824,127600.0,NEAR OCEAN +-117.1,32.57,14.0,5058.0,1299.0,3662.0,1193.0,2.3253,133700.0,NEAR OCEAN +-117.11,32.59,17.0,2020.0,534.0,1529.0,500.0,2.1773,143200.0,NEAR OCEAN +-117.11,32.58,12.0,1086.0,294.0,870.0,290.0,2.4213,132500.0,NEAR OCEAN +-117.11,32.59,18.0,2329.0,580.0,1538.0,567.0,2.1179,153100.0,NEAR OCEAN +-117.12,32.59,28.0,2793.0,706.0,1825.0,676.0,2.6724,144500.0,NEAR OCEAN +-117.16,32.58,36.0,1940.0,399.0,1076.0,382.0,3.3906,147800.0,NEAR OCEAN +-117.13,32.63,10.0,7374.0,1157.0,1900.0,794.0,8.7991,478500.0,NEAR OCEAN +-117.17,32.63,26.0,1617.0,279.0,2745.0,250.0,3.5357,67500.0,NEAR OCEAN +-117.17,32.68,16.0,5895.0,1424.0,873.0,522.0,7.3669,187500.0,NEAR OCEAN +-117.18,32.68,29.0,1539.0,344.0,556.0,289.0,3.25,500001.0,NEAR OCEAN +-117.18,32.69,52.0,1837.0,313.0,668.0,300.0,5.1009,500001.0,NEAR OCEAN +-117.18,32.69,37.0,3112.0,716.0,1304.0,674.0,3.2121,320800.0,NEAR OCEAN +-117.18,32.69,44.0,2819.0,514.0,1258.0,503.0,4.4777,452800.0,NEAR OCEAN +-117.17,32.69,40.0,2236.0,331.0,767.0,316.0,5.3177,500001.0,NEAR OCEAN +-117.18,32.69,48.0,2764.0,491.0,978.0,449.0,5.1249,432400.0,NEAR OCEAN +-117.17,32.69,19.0,2802.0,802.0,1159.0,597.0,4.7891,334600.0,NEAR OCEAN +-117.17,32.69,45.0,3168.0,598.0,1341.0,562.0,4.5189,422200.0,NEAR OCEAN +-117.17,32.7,33.0,4084.0,897.0,1804.0,833.0,4.0488,409700.0,NEAR OCEAN +-117.18,32.7,44.0,2655.0,514.0,1102.0,489.0,3.6759,368800.0,NEAR OCEAN +-117.18,32.7,42.0,1691.0,286.0,761.0,281.0,5.1386,404500.0,NEAR OCEAN +-117.19,32.69,35.0,2921.0,438.0,1042.0,415.0,6.3612,482700.0,NEAR OCEAN +-117.11,32.68,36.0,26.0,14.0,58.0,23.0,1.9107,125000.0,NEAR OCEAN +-117.11,32.67,43.0,515.0,146.0,445.0,140.0,1.6094,93000.0,NEAR OCEAN +-117.11,32.67,46.0,928.0,236.0,790.0,235.0,1.6806,92500.0,NEAR OCEAN +-117.11,32.67,52.0,204.0,74.0,248.0,57.0,1.7961,47500.0,NEAR OCEAN +-117.12,32.66,52.0,16.0,4.0,8.0,3.0,1.125,60000.0,NEAR OCEAN +-117.11,32.67,52.0,280.0,71.0,217.0,71.0,1.4844,83300.0,NEAR OCEAN +-117.11,32.66,52.0,25.0,5.0,14.0,9.0,1.625,118800.0,NEAR OCEAN +-117.09,32.67,37.0,1157.0,332.0,983.0,306.0,2.0972,117000.0,NEAR OCEAN +-117.09,32.66,38.0,833.0,206.0,570.0,182.0,1.8333,127100.0,NEAR OCEAN +-117.09,32.66,37.0,1232.0,330.0,1086.0,330.0,1.6389,114300.0,NEAR OCEAN +-117.1,32.66,27.0,1782.0,560.0,1785.0,560.0,2.1542,106300.0,NEAR OCEAN +-117.1,32.67,26.0,2629.0,763.0,2721.0,767.0,2.0982,109100.0,NEAR OCEAN +-117.1,32.67,22.0,1690.0,541.0,1669.0,494.0,2.0213,110600.0,NEAR OCEAN +-117.09,32.68,30.0,2662.0,653.0,1997.0,605.0,2.8089,120600.0,NEAR OCEAN +-117.09,32.67,31.0,2051.0,549.0,1581.0,538.0,2.052,108900.0,NEAR OCEAN +-117.1,32.67,15.0,1635.0,553.0,1347.0,597.0,1.2745,92900.0,NEAR OCEAN +-117.1,32.68,20.0,1012.0,269.0,837.0,240.0,2.0488,88900.0,NEAR OCEAN +-117.1,32.69,29.0,4174.0,1195.0,3675.0,1124.0,1.8112,103600.0,NEAR OCEAN +-117.1,32.68,42.0,2013.0,568.0,1920.0,557.0,2.0724,107600.0,NEAR OCEAN +-117.1,32.68,47.0,771.0,224.0,637.0,212.0,2.0156,90300.0,NEAR OCEAN +-117.1,32.68,49.0,1412.0,350.0,1200.0,332.0,2.0398,93600.0,NEAR OCEAN +-117.1,32.68,47.0,1044.0,274.0,1003.0,280.0,1.7802,97800.0,NEAR OCEAN +-117.1,32.68,45.0,1183.0,289.0,900.0,266.0,2.4943,99600.0,NEAR OCEAN +-117.07,32.69,29.0,1429.0,293.0,1091.0,317.0,3.4609,118000.0,NEAR OCEAN +-117.08,32.69,31.0,2558.0,487.0,1938.0,492.0,3.4875,117000.0,NEAR OCEAN +-117.08,32.69,36.0,1571.0,284.0,1001.0,268.0,3.6875,111400.0,NEAR OCEAN +-117.09,32.69,34.0,1469.0,267.0,1031.0,267.0,3.4583,112700.0,NEAR OCEAN +-117.09,32.68,29.0,1792.0,449.0,1650.0,396.0,2.2201,100000.0,NEAR OCEAN +-117.07,32.69,28.0,1485.0,275.0,820.0,283.0,4.069,153300.0,NEAR OCEAN +-117.08,32.68,26.0,3071.0,615.0,2156.0,568.0,2.9318,112400.0,NEAR OCEAN +-117.08,32.68,19.0,3635.0,1078.0,3127.0,1098.0,1.324,122600.0,NEAR OCEAN +-117.09,32.68,20.0,2569.0,737.0,2341.0,705.0,2.0114,104900.0,NEAR OCEAN +-117.07,32.67,28.0,2758.0,623.0,2179.0,631.0,2.3814,112300.0,NEAR OCEAN +-117.08,32.67,31.0,3008.0,764.0,2088.0,757.0,2.5662,118200.0,NEAR OCEAN +-117.09,32.66,46.0,844.0,147.0,423.0,161.0,3.375,136300.0,NEAR OCEAN +-117.08,32.66,43.0,1004.0,236.0,839.0,235.0,2.81,103400.0,NEAR OCEAN +-117.07,32.67,35.0,3200.0,725.0,1723.0,610.0,1.8977,95600.0,NEAR OCEAN +-117.07,32.65,12.0,4131.0,891.0,2272.0,840.0,3.4701,204900.0,NEAR OCEAN +-117.07,32.64,32.0,5135.0,1025.0,2152.0,944.0,4.1325,172800.0,NEAR OCEAN +-117.08,32.64,43.0,1005.0,230.0,548.0,252.0,1.8672,145800.0,NEAR OCEAN +-117.08,32.65,17.0,2633.0,712.0,1487.0,694.0,2.5392,147000.0,NEAR OCEAN +-117.08,32.64,38.0,917.0,256.0,494.0,233.0,1.9241,150000.0,NEAR OCEAN +-117.08,32.64,11.0,1651.0,533.0,947.0,515.0,1.6806,141700.0,NEAR OCEAN +-117.09,32.65,20.0,1445.0,323.0,573.0,334.0,2.619,145800.0,NEAR OCEAN +-117.09,32.65,25.0,3509.0,985.0,2359.0,899.0,2.6296,150000.0,NEAR OCEAN +-117.08,32.65,28.0,2296.0,603.0,1277.0,550.0,2.3562,123800.0,NEAR OCEAN +-117.09,32.64,38.0,2095.0,536.0,1240.0,550.0,2.7218,145900.0,NEAR OCEAN +-117.09,32.64,30.0,3171.0,862.0,2126.0,800.0,2.507,142700.0,NEAR OCEAN +-117.1,32.64,29.0,1578.0,460.0,1236.0,461.0,2.5658,134700.0,NEAR OCEAN +-117.09,32.64,20.0,1999.0,651.0,1302.0,592.0,1.6321,57500.0,NEAR OCEAN +-117.09,32.64,19.0,2571.0,791.0,1205.0,783.0,1.62,131300.0,NEAR OCEAN +-117.09,32.63,27.0,2920.0,770.0,1935.0,746.0,2.4148,67500.0,NEAR OCEAN +-117.11,32.64,23.0,1619.0,447.0,1025.0,415.0,1.858,67500.0,NEAR OCEAN +-117.11,32.62,27.0,1846.0,509.0,1078.0,482.0,2.1719,131500.0,NEAR OCEAN +-117.09,32.62,37.0,1538.0,298.0,867.0,285.0,3.0729,128700.0,NEAR OCEAN +-117.09,32.62,37.0,1925.0,428.0,1344.0,426.0,2.4866,129700.0,NEAR OCEAN +-117.09,32.62,34.0,1576.0,364.0,1153.0,381.0,2.1955,129700.0,NEAR OCEAN +-117.08,32.63,33.0,2891.0,793.0,1607.0,754.0,2.1281,139800.0,NEAR OCEAN +-117.09,32.64,24.0,3613.0,973.0,2002.0,931.0,1.947,147500.0,NEAR OCEAN +-117.09,32.63,33.0,620.0,161.0,420.0,164.0,1.8417,150000.0,NEAR OCEAN +-117.07,32.64,38.0,1486.0,269.0,745.0,295.0,4.6477,150400.0,NEAR OCEAN +-117.07,32.63,37.0,2303.0,379.0,1026.0,357.0,3.455,156900.0,NEAR OCEAN +-117.07,32.64,30.0,2873.0,774.0,1593.0,731.0,2.24,129500.0,NEAR OCEAN +-117.06,32.63,37.0,1326.0,234.0,612.0,240.0,4.125,160200.0,NEAR OCEAN +-117.06,32.62,36.0,786.0,125.0,408.0,138.0,3.9167,189700.0,NEAR OCEAN +-117.07,32.63,40.0,1706.0,322.0,796.0,303.0,3.5583,154900.0,NEAR OCEAN +-117.07,32.63,37.0,2372.0,444.0,1056.0,419.0,3.7583,145500.0,NEAR OCEAN +-117.08,32.63,30.0,2504.0,559.0,1827.0,490.0,2.6146,159400.0,NEAR OCEAN +-117.08,32.63,28.0,2080.0,427.0,1266.0,434.0,2.2788,146300.0,NEAR OCEAN +-117.08,32.62,28.0,2468.0,506.0,1353.0,522.0,3.0771,158600.0,NEAR OCEAN +-117.08,32.62,36.0,1674.0,309.0,818.0,307.0,3.4773,150400.0,NEAR OCEAN +-117.09,32.61,23.0,1157.0,309.0,640.0,313.0,2.1548,118800.0,NEAR OCEAN +-117.09,32.61,21.0,1945.0,430.0,1335.0,419.0,3.6467,113000.0,NEAR OCEAN +-117.08,32.62,16.0,5192.0,1381.0,3261.0,1321.0,2.2685,151900.0,NEAR OCEAN +-117.08,32.61,27.0,2264.0,525.0,1485.0,468.0,3.3514,149100.0,NEAR OCEAN +-117.07,32.62,19.0,5016.0,1173.0,2750.0,1081.0,2.7838,155900.0,NEAR OCEAN +-117.06,32.61,34.0,4325.0,1015.0,2609.0,979.0,2.8489,128300.0,NEAR OCEAN +-117.07,32.61,22.0,5016.0,1331.0,3222.0,1196.0,2.1441,135500.0,NEAR OCEAN +-117.07,32.6,18.0,2602.0,551.0,1042.0,550.0,1.9267,67500.0,NEAR OCEAN +-117.07,32.59,21.0,1779.0,466.0,1327.0,488.0,1.6007,96200.0,NEAR OCEAN +-117.08,32.59,30.0,144.0,52.0,220.0,48.0,2.3929,134400.0,NEAR OCEAN +-117.08,32.6,24.0,1901.0,490.0,1334.0,476.0,2.2544,121900.0,NEAR OCEAN +-117.07,32.61,10.0,1686.0,414.0,1000.0,391.0,2.1765,128400.0,NEAR OCEAN +-117.06,32.61,24.0,4369.0,1353.0,3123.0,1247.0,2.0571,152300.0,NEAR OCEAN +-117.06,32.61,23.0,1630.0,362.0,1267.0,418.0,2.5625,131100.0,NEAR OCEAN +-117.07,32.6,13.0,1607.0,435.0,983.0,400.0,2.2903,106300.0,NEAR OCEAN +-117.06,32.6,25.0,1075.0,238.0,434.0,234.0,1.7472,94600.0,NEAR OCEAN +-117.06,32.6,24.0,1088.0,268.0,1095.0,246.0,2.4191,107300.0,NEAR OCEAN +-117.06,32.6,33.0,905.0,205.0,989.0,222.0,2.7014,108200.0,NEAR OCEAN +-117.05,32.63,31.0,4911.0,861.0,2334.0,843.0,4.1958,160100.0,NEAR OCEAN +-117.05,32.62,34.0,3928.0,686.0,2315.0,681.0,4.2851,144500.0,NEAR OCEAN +-117.04,32.62,26.0,3620.0,607.0,2000.0,593.0,4.9962,156000.0,NEAR OCEAN +-117.05,32.61,31.0,4033.0,715.0,2585.0,715.0,3.5096,139900.0,NEAR OCEAN +-117.05,32.61,21.0,6034.0,1205.0,3795.0,1146.0,3.2633,129700.0,NEAR OCEAN +-117.05,32.61,26.0,1563.0,286.0,1145.0,313.0,3.8615,139300.0,NEAR OCEAN +-117.04,32.6,20.0,8052.0,1461.0,5094.0,1430.0,4.2241,139800.0,NEAR OCEAN +-117.04,32.6,18.0,4747.0,846.0,3002.0,872.0,3.9076,152900.0,NEAR OCEAN +-117.05,32.59,16.0,4683.0,929.0,3073.0,865.0,3.0495,98300.0,NEAR OCEAN +-117.04,32.63,26.0,2074.0,356.0,1228.0,335.0,4.1154,160200.0,NEAR OCEAN +-117.04,32.62,27.0,1710.0,282.0,1089.0,297.0,4.6793,151900.0,NEAR OCEAN +-117.03,32.61,23.0,1553.0,216.0,778.0,229.0,5.1538,171300.0,NEAR OCEAN +-117.03,32.61,22.0,1028.0,148.0,523.0,152.0,6.0086,166900.0,NEAR OCEAN +-117.03,32.6,26.0,1335.0,224.0,742.0,215.0,5.152,143400.0,NEAR OCEAN +-117.02,32.59,19.0,1902.0,335.0,1102.0,313.0,3.0365,98100.0,NEAR OCEAN +-116.98,32.62,6.0,7995.0,1458.0,4771.0,1376.0,4.7068,184300.0,NEAR OCEAN +-117.06,32.64,30.0,4494.0,667.0,1883.0,680.0,5.766,186100.0,NEAR OCEAN +-117.06,32.63,29.0,4168.0,742.0,2096.0,713.0,4.2204,169800.0,NEAR OCEAN +-116.98,32.68,22.0,2346.0,380.0,1217.0,382.0,5.5248,156300.0,NEAR OCEAN +-117.01,32.67,17.0,2319.0,348.0,1125.0,337.0,5.551,266900.0,NEAR OCEAN +-117.0,32.67,16.0,2238.0,307.0,1002.0,303.0,6.6143,264100.0,NEAR OCEAN +-117.02,32.67,20.0,1505.0,184.0,635.0,182.0,6.5772,245200.0,NEAR OCEAN +-117.01,32.66,11.0,9992.0,1368.0,4495.0,1316.0,6.9664,293900.0,NEAR OCEAN +-117.02,32.66,19.0,771.0,,376.0,108.0,6.6272,273600.0,NEAR OCEAN +-116.97,32.65,4.0,16450.0,2833.0,7985.0,2683.0,5.6631,233400.0,NEAR OCEAN +-116.99,32.64,15.0,4331.0,699.0,2046.0,627.0,3.9519,193500.0,NEAR OCEAN +-117.04,32.65,8.0,8806.0,1401.0,3159.0,1059.0,4.2155,247800.0,NEAR OCEAN +-117.03,32.65,14.0,1111.0,142.0,472.0,145.0,7.6344,290500.0,NEAR OCEAN +-117.0,32.64,11.0,3098.0,490.0,1391.0,484.0,4.9792,170400.0,NEAR OCEAN +-117.01,32.63,7.0,6483.0,976.0,3269.0,1005.0,5.7358,221600.0,NEAR OCEAN +-117.04,32.64,5.0,2329.0,542.0,1213.0,514.0,4.0298,225600.0,NEAR OCEAN +-117.02,32.64,5.0,260.0,41.0,157.0,42.0,6.5151,281700.0,NEAR OCEAN +-117.03,32.63,13.0,2087.0,313.0,1165.0,330.0,5.7789,227700.0,NEAR OCEAN +-117.03,32.63,14.0,2796.0,476.0,1466.0,464.0,5.2489,213700.0,NEAR OCEAN +-117.04,32.63,26.0,2756.0,422.0,1166.0,398.0,5.1354,181600.0,NEAR OCEAN +-116.99,32.74,17.0,3101.0,547.0,1410.0,486.0,3.1771,189900.0,<1H OCEAN +-116.98,32.74,17.0,3943.0,843.0,1995.0,766.0,2.6944,158300.0,<1H OCEAN +-116.98,32.74,24.0,977.0,147.0,454.0,169.0,4.9286,173700.0,<1H OCEAN +-116.98,32.74,16.0,3361.0,537.0,1754.0,578.0,5.1098,162300.0,<1H OCEAN +-116.98,32.72,15.0,4209.0,680.0,1914.0,641.0,4.5135,158300.0,<1H OCEAN +-116.98,32.73,16.0,952.0,143.0,530.0,143.0,5.0864,175300.0,<1H OCEAN +-116.98,32.72,4.0,1078.0,158.0,571.0,184.0,4.6667,223300.0,<1H OCEAN +-116.97,32.74,14.0,7410.0,1344.0,3597.0,1274.0,4.2192,176100.0,<1H OCEAN +-116.95,32.74,7.0,2722.0,578.0,1429.0,574.0,3.9583,141700.0,<1H OCEAN +-116.96,32.71,18.0,2413.0,533.0,1129.0,551.0,2.4567,155000.0,<1H OCEAN +-116.95,32.73,17.0,1635.0,272.0,960.0,279.0,5.2671,157100.0,<1H OCEAN +-116.97,32.76,26.0,2460.0,313.0,838.0,299.0,5.9878,270700.0,<1H OCEAN +-116.98,32.75,25.0,4137.0,662.0,1905.0,630.0,4.375,214000.0,<1H OCEAN +-116.97,32.75,28.0,3519.0,583.0,1720.0,590.0,4.7973,186900.0,<1H OCEAN +-116.98,32.75,18.0,1519.0,369.0,802.0,347.0,2.9886,170800.0,<1H OCEAN +-116.97,32.76,33.0,3071.0,466.0,1348.0,513.0,6.1768,228900.0,<1H OCEAN +-116.95,32.76,13.0,5543.0,857.0,2074.0,737.0,4.9528,266200.0,<1H OCEAN +-116.94,32.75,4.0,14934.0,2479.0,6945.0,2418.0,5.1221,229700.0,<1H OCEAN +-116.92,32.76,9.0,1859.0,307.0,947.0,304.0,5.9202,181300.0,<1H OCEAN +-116.92,32.76,7.0,1659.0,237.0,862.0,242.0,5.2741,249400.0,<1H OCEAN +-116.91,32.75,5.0,8710.0,1614.0,4372.0,1527.0,4.7813,240900.0,<1H OCEAN +-117.0,32.76,31.0,1989.0,280.0,805.0,301.0,6.5645,189100.0,<1H OCEAN +-116.99,32.76,21.0,3833.0,595.0,1645.0,589.0,4.625,273500.0,<1H OCEAN +-116.99,32.74,18.0,3341.0,611.0,1952.0,602.0,3.9844,215300.0,<1H OCEAN +-117.0,32.74,17.0,2357.0,599.0,1423.0,510.0,1.8856,118800.0,<1H OCEAN +-116.99,32.73,30.0,1856.0,339.0,1103.0,379.0,4.0357,153800.0,<1H OCEAN +-117.01,32.75,26.0,4038.0,706.0,2065.0,687.0,3.9545,178100.0,<1H OCEAN +-117.01,32.75,34.0,2105.0,340.0,973.0,357.0,4.3088,152500.0,<1H OCEAN +-117.01,32.74,31.0,3473.0,,2098.0,677.0,2.6973,135200.0,<1H OCEAN +-117.01,32.73,22.0,2526.0,530.0,1556.0,529.0,2.8646,120800.0,NEAR OCEAN +-117.0,32.73,17.0,6050.0,1143.0,3424.0,1131.0,3.7647,127600.0,<1H OCEAN +-117.0,32.72,10.0,3817.0,943.0,2352.0,875.0,2.1362,143200.0,NEAR OCEAN +-117.01,32.72,12.0,2914.0,734.0,2104.0,703.0,2.3068,132300.0,NEAR OCEAN +-116.99,32.7,15.0,3660.0,622.0,2629.0,612.0,4.0444,150100.0,NEAR OCEAN +-117.0,32.7,23.0,2785.0,468.0,1456.0,449.0,4.3714,131000.0,NEAR OCEAN +-116.98,32.71,18.0,2355.0,444.0,1277.0,433.0,3.4551,121400.0,<1H OCEAN +-116.99,32.71,21.0,3049.0,582.0,2355.0,585.0,3.8904,113800.0,NEAR OCEAN +-117.0,32.71,22.0,2263.0,441.0,1395.0,416.0,3.725,123500.0,NEAR OCEAN +-117.01,32.71,20.0,3506.0,692.0,1977.0,668.0,2.981,129100.0,NEAR OCEAN +-116.99,32.72,15.0,825.0,130.0,334.0,131.0,4.0391,169500.0,<1H OCEAN +-116.99,32.72,14.0,1771.0,301.0,1046.0,284.0,4.775,143300.0,<1H OCEAN +-116.99,32.72,13.0,1330.0,216.0,719.0,215.0,3.8295,149600.0,<1H OCEAN +-116.99,32.72,11.0,1112.0,164.0,441.0,174.0,4.7679,169500.0,<1H OCEAN +-117.02,32.74,30.0,4205.0,772.0,2012.0,734.0,3.5,144700.0,NEAR OCEAN +-117.03,32.73,34.0,2061.0,,1169.0,400.0,3.5096,142000.0,NEAR OCEAN +-117.03,32.73,32.0,1750.0,333.0,997.0,335.0,3.4784,154400.0,NEAR OCEAN +-117.03,32.74,37.0,821.0,150.0,404.0,135.0,3.0125,130400.0,NEAR OCEAN +-117.02,32.73,22.0,5201.0,865.0,3280.0,817.0,4.7952,141400.0,NEAR OCEAN +-117.02,32.72,36.0,2030.0,369.0,1142.0,357.0,3.7763,126900.0,NEAR OCEAN +-117.03,32.73,38.0,3174.0,606.0,1557.0,619.0,3.5861,123600.0,NEAR OCEAN +-117.03,32.72,38.0,886.0,176.0,505.0,188.0,3.5938,125400.0,NEAR OCEAN +-117.03,32.72,37.0,2192.0,455.0,1515.0,446.0,3.0588,120600.0,NEAR OCEAN +-117.04,32.72,24.0,5474.0,955.0,3020.0,904.0,4.0813,137000.0,NEAR OCEAN +-117.04,32.73,36.0,2084.0,400.0,1097.0,398.0,3.2717,130700.0,NEAR OCEAN +-117.04,32.73,25.0,1375.0,267.0,1032.0,278.0,3.5492,125400.0,NEAR OCEAN +-117.05,32.72,35.0,3669.0,617.0,1694.0,585.0,3.9485,133900.0,NEAR OCEAN +-117.05,32.73,27.0,3184.0,588.0,1763.0,571.0,3.5529,133900.0,NEAR OCEAN +-117.03,32.74,35.0,1878.0,454.0,991.0,409.0,2.4345,129700.0,NEAR OCEAN +-117.04,32.74,33.0,3880.0,770.0,2288.0,805.0,3.6848,140700.0,NEAR OCEAN +-117.02,32.74,12.0,3301.0,963.0,2000.0,879.0,1.8594,119200.0,NEAR OCEAN +-117.04,32.74,5.0,2878.0,785.0,1727.0,758.0,1.7179,132000.0,NEAR OCEAN +-117.04,32.75,36.0,2297.0,418.0,1070.0,392.0,3.5192,144000.0,NEAR OCEAN +-117.05,32.75,29.0,2767.0,612.0,1437.0,587.0,2.8306,142900.0,NEAR OCEAN +-117.05,32.75,43.0,1718.0,344.0,826.0,336.0,2.7014,133700.0,NEAR OCEAN +-117.03,32.77,34.0,1796.0,428.0,918.0,424.0,2.875,161200.0,<1H OCEAN +-117.02,32.76,15.0,1204.0,326.0,543.0,326.0,1.0278,154200.0,<1H OCEAN +-117.02,32.76,40.0,2523.0,488.0,976.0,470.0,3.11,185700.0,<1H OCEAN +-117.02,32.75,33.0,3296.0,537.0,1345.0,556.0,5.2835,217100.0,<1H OCEAN +-117.03,32.75,24.0,7879.0,1655.0,3898.0,1534.0,3.0897,187300.0,NEAR OCEAN +-117.04,32.77,26.0,4263.0,1037.0,2199.0,1010.0,2.734,148900.0,<1H OCEAN +-117.04,32.76,43.0,3171.0,665.0,1534.0,625.0,3.141,141400.0,NEAR OCEAN +-117.05,32.76,37.0,4879.0,906.0,2076.0,871.0,3.6625,154800.0,NEAR OCEAN +-117.04,32.76,37.0,2979.0,557.0,1285.0,564.0,3.7368,152200.0,NEAR OCEAN +-117.04,32.77,16.0,7963.0,1881.0,3769.0,1804.0,2.9624,144700.0,<1H OCEAN +-117.03,32.77,19.0,4819.0,1492.0,2572.0,1336.0,2.3393,118200.0,<1H OCEAN +-117.05,32.78,37.0,1184.0,178.0,529.0,192.0,4.7941,161700.0,<1H OCEAN +-117.03,32.78,17.0,5481.0,1618.0,2957.0,1537.0,2.5707,171300.0,<1H OCEAN +-117.02,32.78,33.0,3481.0,708.0,1726.0,719.0,3.3675,158200.0,<1H OCEAN +-117.03,32.79,31.0,2366.0,383.0,1077.0,387.0,4.2992,174400.0,<1H OCEAN +-117.03,32.79,17.0,7352.0,1699.0,3331.0,1634.0,2.7006,166300.0,<1H OCEAN +-117.0,32.77,30.0,1802.0,401.0,776.0,386.0,2.8125,173500.0,<1H OCEAN +-117.01,32.76,22.0,3626.0,824.0,1800.0,769.0,2.8594,189600.0,<1H OCEAN +-117.01,32.76,34.0,3415.0,608.0,1464.0,593.0,4.0549,223700.0,<1H OCEAN +-117.01,32.77,24.0,2311.0,536.0,1005.0,525.0,2.9,185200.0,<1H OCEAN +-117.01,32.77,34.0,3330.0,723.0,1592.0,656.0,2.6678,164200.0,<1H OCEAN +-117.01,32.77,43.0,841.0,192.0,496.0,207.0,3.0179,149300.0,<1H OCEAN +-117.01,32.79,31.0,3776.0,815.0,1886.0,799.0,3.4421,155300.0,<1H OCEAN +-117.01,32.78,20.0,2616.0,597.0,1532.0,579.0,2.9896,235600.0,<1H OCEAN +-117.02,32.78,31.0,2567.0,,1198.0,499.0,3.4659,163000.0,<1H OCEAN +-117.02,32.79,36.0,2211.0,384.0,868.0,329.0,4.0491,147900.0,<1H OCEAN +-116.99,32.79,33.0,2420.0,393.0,1003.0,397.0,4.0658,165100.0,<1H OCEAN +-116.99,32.79,26.0,3623.0,703.0,1609.0,669.0,3.744,165800.0,<1H OCEAN +-116.99,32.78,29.0,1114.0,163.0,385.0,154.0,5.4333,222800.0,<1H OCEAN +-117.0,32.79,31.0,3256.0,726.0,1595.0,706.0,3.4773,155800.0,<1H OCEAN +-116.99,32.77,35.0,2306.0,334.0,828.0,310.0,6.1103,301600.0,<1H OCEAN +-116.98,32.77,29.0,3558.0,447.0,1097.0,445.0,8.093,379600.0,<1H OCEAN +-117.0,32.76,31.0,2545.0,373.0,956.0,342.0,4.3977,226800.0,<1H OCEAN +-117.0,32.77,35.0,2114.0,317.0,881.0,320.0,5.5,241400.0,<1H OCEAN +-116.95,32.78,33.0,2432.0,443.0,1147.0,427.0,3.3906,138100.0,<1H OCEAN +-116.96,32.78,26.0,2807.0,630.0,1785.0,580.0,2.1638,132800.0,<1H OCEAN +-116.97,32.78,26.0,8902.0,1413.0,3941.0,1387.0,4.7943,226900.0,<1H OCEAN +-116.92,32.78,21.0,4192.0,752.0,2101.0,710.0,4.4306,159100.0,<1H OCEAN +-116.91,32.78,15.0,4058.0,511.0,1580.0,473.0,7.5,316400.0,<1H OCEAN +-116.92,32.77,16.0,2770.0,406.0,1269.0,429.0,6.6783,275000.0,<1H OCEAN +-116.9,32.77,8.0,3600.0,492.0,1421.0,482.0,6.2609,307100.0,<1H OCEAN +-116.95,32.78,20.0,3425.0,448.0,1489.0,443.0,6.2552,296400.0,<1H OCEAN +-116.95,32.77,25.0,3308.0,421.0,1201.0,414.0,6.3191,303400.0,<1H OCEAN +-116.94,32.78,17.0,13559.0,2656.0,6990.0,2533.0,3.434,193200.0,<1H OCEAN +-116.85,32.83,17.0,4234.0,770.0,2191.0,725.0,3.6445,197600.0,<1H OCEAN +-116.88,32.81,35.0,2926.0,562.0,1590.0,506.0,4.2014,143200.0,<1H OCEAN +-116.86,32.8,19.0,1747.0,291.0,848.0,290.0,4.875,187200.0,<1H OCEAN +-116.83,32.83,6.0,3123.0,495.0,1513.0,480.0,5.4288,167800.0,<1H OCEAN +-116.83,32.81,18.0,2367.0,402.0,1021.0,395.0,4.8125,210500.0,<1H OCEAN +-116.92,32.79,24.0,4055.0,742.0,2123.0,744.0,4.5224,142000.0,<1H OCEAN +-116.93,32.79,23.0,5759.0,1258.0,3108.0,1202.0,3.0927,140600.0,<1H OCEAN +-116.91,32.8,32.0,1943.0,287.0,1081.0,292.0,5.6846,208800.0,<1H OCEAN +-116.9,32.79,21.0,3770.0,491.0,1410.0,446.0,6.7685,294700.0,<1H OCEAN +-116.94,32.8,21.0,7906.0,2292.0,4868.0,2117.0,1.8937,109800.0,<1H OCEAN +-116.93,32.79,19.0,3354.0,,1948.0,682.0,3.0192,142300.0,<1H OCEAN +-116.95,32.79,19.0,11391.0,3093.0,7178.0,2905.0,2.0326,123200.0,<1H OCEAN +-116.96,32.8,16.0,3920.0,1094.0,2612.0,1023.0,1.3291,120800.0,<1H OCEAN +-116.96,32.79,19.0,3008.0,693.0,2341.0,689.0,2.6087,123800.0,<1H OCEAN +-116.96,32.79,35.0,1081.0,266.0,691.0,259.0,2.6324,133700.0,<1H OCEAN +-116.96,32.8,24.0,2493.0,693.0,1420.0,643.0,1.8357,104200.0,<1H OCEAN +-116.97,32.79,19.0,4108.0,1101.0,2971.0,1006.0,1.9893,112500.0,<1H OCEAN +-116.96,32.79,17.0,5236.0,1325.0,3308.0,1233.0,2.3221,138800.0,<1H OCEAN +-116.97,32.78,37.0,1255.0,238.0,671.0,278.0,3.7019,138600.0,<1H OCEAN +-116.97,32.78,35.0,1113.0,236.0,681.0,246.0,2.9784,136400.0,<1H OCEAN +-116.97,32.79,32.0,1255.0,338.0,782.0,302.0,2.6635,113600.0,<1H OCEAN +-116.98,32.79,32.0,3756.0,662.0,1611.0,598.0,3.8667,189700.0,<1H OCEAN +-116.98,32.8,28.0,5721.0,1029.0,2672.0,1054.0,3.963,164400.0,<1H OCEAN +-116.99,32.8,34.0,3657.0,538.0,1513.0,562.0,5.2907,195800.0,<1H OCEAN +-117.0,32.8,33.0,1816.0,325.0,768.0,316.0,4.5662,150300.0,<1H OCEAN +-117.0,32.8,29.0,2045.0,398.0,912.0,368.0,3.0189,144100.0,<1H OCEAN +-116.99,32.81,25.0,4436.0,758.0,1997.0,738.0,4.2386,201000.0,<1H OCEAN +-116.99,32.81,18.0,10968.0,1521.0,4439.0,1501.0,6.2787,250000.0,<1H OCEAN +-116.97,32.83,23.0,149.0,32.0,101.0,34.0,2.6458,112500.0,<1H OCEAN +-116.97,32.81,19.0,1573.0,471.0,844.0,414.0,2.1422,125000.0,<1H OCEAN +-116.97,32.8,15.0,3927.0,1018.0,2204.0,977.0,2.4367,111400.0,<1H OCEAN +-116.94,32.81,22.0,4266.0,1010.0,2766.0,985.0,2.8175,135200.0,<1H OCEAN +-116.94,32.8,28.0,3042.0,729.0,1964.0,703.0,2.4141,137500.0,<1H OCEAN +-116.96,32.8,19.0,4574.0,1152.0,3045.0,1057.0,2.065,124100.0,<1H OCEAN +-116.96,32.8,25.0,3421.0,803.0,1681.0,742.0,3.369,134400.0,<1H OCEAN +-116.92,32.82,34.0,1765.0,284.0,772.0,282.0,5.0118,165300.0,<1H OCEAN +-116.92,32.81,23.0,2668.0,528.0,1510.0,524.0,3.3669,158900.0,<1H OCEAN +-116.93,32.82,26.0,4129.0,714.0,1820.0,718.0,4.2586,171000.0,<1H OCEAN +-116.91,32.81,22.0,4331.0,637.0,1952.0,654.0,5.4834,232000.0,<1H OCEAN +-116.92,32.8,33.0,1518.0,268.0,857.0,272.0,3.5586,160400.0,<1H OCEAN +-116.92,32.81,17.0,1312.0,394.0,836.0,337.0,1.6686,112500.0,<1H OCEAN +-116.93,32.8,19.0,1867.0,538.0,1219.0,468.0,2.0685,130000.0,<1H OCEAN +-116.93,32.81,18.0,2447.0,466.0,1573.0,472.0,2.6429,125400.0,<1H OCEAN +-116.95,32.82,19.0,5308.0,1058.0,2852.0,1092.0,2.9161,135700.0,<1H OCEAN +-116.95,32.82,12.0,5535.0,1434.0,3112.0,1262.0,2.5949,108300.0,<1H OCEAN +-116.95,32.81,31.0,1277.0,293.0,698.0,237.0,3.1106,147700.0,<1H OCEAN +-116.96,32.81,8.0,2378.0,638.0,1410.0,623.0,2.9097,152500.0,<1H OCEAN +-116.94,32.82,35.0,1737.0,285.0,826.0,294.0,3.2411,159200.0,<1H OCEAN +-116.94,32.81,8.0,2517.0,632.0,1686.0,613.0,2.136,143500.0,<1H OCEAN +-116.95,32.81,15.0,2619.0,599.0,1513.0,537.0,2.543,100000.0,<1H OCEAN +-116.95,32.82,18.0,3038.0,592.0,1904.0,595.0,3.8024,144900.0,<1H OCEAN +-116.97,32.83,17.0,6659.0,1402.0,3183.0,1378.0,2.949,117300.0,<1H OCEAN +-116.99,32.83,20.0,6696.0,1326.0,3687.0,1291.0,3.1979,154600.0,<1H OCEAN +-116.99,32.85,32.0,5211.0,949.0,3025.0,948.0,4.0931,134200.0,<1H OCEAN +-116.98,32.85,12.0,3570.0,713.0,3321.0,666.0,4.0882,134500.0,<1H OCEAN +-117.01,32.83,17.0,15401.0,3280.0,7302.0,3176.0,3.3067,121900.0,<1H OCEAN +-117.01,32.84,23.0,1951.0,395.0,901.0,378.0,3.1023,143300.0,<1H OCEAN +-117.02,32.84,17.0,4013.0,673.0,2263.0,661.0,5.131,148300.0,<1H OCEAN +-116.96,32.85,11.0,9724.0,1796.0,5247.0,1777.0,4.1716,166100.0,<1H OCEAN +-116.96,32.86,14.0,3064.0,496.0,1681.0,503.0,4.4347,160300.0,<1H OCEAN +-116.96,32.87,17.0,4713.0,740.0,2531.0,723.0,4.8286,158500.0,<1H OCEAN +-116.98,32.88,12.0,7320.0,1279.0,4048.0,1249.0,4.3952,151700.0,<1H OCEAN +-116.98,32.86,19.0,2121.0,341.0,1236.0,353.0,4.7717,153200.0,<1H OCEAN +-116.98,32.86,16.0,7718.0,1423.0,4383.0,1394.0,4.0693,146400.0,<1H OCEAN +-117.0,32.87,18.0,11544.0,1979.0,6296.0,1923.0,4.4904,150400.0,<1H OCEAN +-117.01,32.85,23.0,2592.0,414.0,1401.0,431.0,5.4903,151400.0,<1H OCEAN +-117.0,32.85,24.0,1888.0,319.0,950.0,319.0,5.282,140800.0,<1H OCEAN +-116.95,32.83,14.0,12517.0,2506.0,6389.0,2333.0,3.3081,168700.0,<1H OCEAN +-116.95,32.84,31.0,1307.0,,752.0,231.0,3.4286,129400.0,<1H OCEAN +-116.93,32.85,15.0,3273.0,895.0,1872.0,842.0,2.5388,119000.0,<1H OCEAN +-116.93,32.85,5.0,4116.0,990.0,2770.0,905.0,3.1142,150000.0,<1H OCEAN +-116.94,32.85,31.0,1293.0,232.0,599.0,228.0,4.7578,161000.0,<1H OCEAN +-116.94,32.84,32.0,1607.0,253.0,778.0,262.0,4.5278,166300.0,<1H OCEAN +-116.94,32.83,38.0,1701.0,317.0,872.0,304.0,3.7831,147800.0,<1H OCEAN +-116.88,32.86,9.0,3049.0,471.0,1527.0,515.0,5.0733,196600.0,<1H OCEAN +-116.86,32.87,17.0,5799.0,921.0,2630.0,843.0,5.0524,285400.0,<1H OCEAN +-116.84,32.86,16.0,2502.0,532.0,1211.0,494.0,3.2516,202100.0,<1H OCEAN +-116.89,32.85,16.0,1743.0,333.0,652.0,322.0,2.8906,158300.0,<1H OCEAN +-116.91,32.87,14.0,3048.0,597.0,1690.0,576.0,4.3818,147100.0,<1H OCEAN +-116.91,32.86,10.0,3699.0,838.0,2310.0,759.0,2.5365,139500.0,<1H OCEAN +-116.91,32.86,15.0,3153.0,628.0,1633.0,527.0,3.6898,131000.0,<1H OCEAN +-116.92,32.86,11.0,2204.0,518.0,1472.0,497.0,2.3693,127000.0,<1H OCEAN +-116.93,32.83,19.0,3038.0,529.0,1463.0,509.0,3.944,172500.0,<1H OCEAN +-116.93,32.83,21.0,1283.0,278.0,684.0,289.0,2.3203,163500.0,<1H OCEAN +-116.92,32.82,17.0,2492.0,494.0,1278.0,439.0,2.8875,155700.0,<1H OCEAN +-116.92,32.85,23.0,1378.0,269.0,767.0,266.0,4.0625,145000.0,<1H OCEAN +-116.92,32.84,16.0,4675.0,834.0,2188.0,817.0,4.6674,178000.0,<1H OCEAN +-116.91,32.83,16.0,5203.0,,2515.0,862.0,4.105,174400.0,<1H OCEAN +-116.92,32.82,16.0,2784.0,468.0,1458.0,465.0,4.0048,184600.0,<1H OCEAN +-116.91,32.85,21.0,4152.0,703.0,2255.0,697.0,4.5096,159500.0,<1H OCEAN +-116.89,32.85,15.0,3560.0,593.0,1757.0,574.0,5.1185,185300.0,<1H OCEAN +-116.9,32.84,18.0,3612.0,737.0,1864.0,713.0,2.7069,153800.0,<1H OCEAN +-116.89,32.82,18.0,2515.0,443.0,1442.0,449.0,5.0201,154400.0,<1H OCEAN +-116.9,32.84,18.0,4215.0,810.0,2104.0,773.0,4.0873,146900.0,<1H OCEAN +-116.91,32.82,14.0,1978.0,424.0,1085.0,387.0,3.8073,170100.0,<1H OCEAN +-116.96,32.9,16.0,3047.0,495.0,1507.0,499.0,5.3008,186500.0,<1H OCEAN +-116.94,32.89,24.0,2541.0,381.0,1078.0,372.0,5.2542,227800.0,<1H OCEAN +-116.94,32.87,24.0,2824.0,441.0,1480.0,471.0,5.2614,177200.0,<1H OCEAN +-116.93,32.87,17.0,3722.0,670.0,1561.0,604.0,3.6027,211900.0,<1H OCEAN +-116.9,32.9,19.0,3090.0,552.0,1621.0,520.0,4.0806,189200.0,<1H OCEAN +-116.84,32.92,20.0,1066.0,219.0,536.0,173.0,3.1607,119300.0,<1H OCEAN +-117.05,33.01,19.0,3558.0,588.0,1439.0,578.0,4.625,211100.0,<1H OCEAN +-117.05,33.01,17.0,3430.0,425.0,1468.0,433.0,10.6186,429300.0,<1H OCEAN +-117.04,33.01,28.0,922.0,107.0,314.0,97.0,8.4721,342300.0,<1H OCEAN +-117.03,33.0,6.0,6139.0,793.0,2693.0,770.0,7.7569,387400.0,<1H OCEAN +-117.04,32.99,6.0,9518.0,1418.0,4413.0,1275.0,6.6012,314900.0,<1H OCEAN +-117.04,32.98,16.0,1332.0,196.0,640.0,193.0,6.0226,192900.0,<1H OCEAN +-117.06,32.99,16.0,1306.0,196.0,713.0,222.0,6.2683,180700.0,<1H OCEAN +-117.05,32.97,17.0,9911.0,1436.0,4763.0,1414.0,5.5882,194300.0,<1H OCEAN +-117.05,32.96,18.0,3593.0,661.0,1992.0,626.0,4.8295,165800.0,<1H OCEAN +-117.04,32.97,13.0,6711.0,1256.0,3683.0,1220.0,4.5746,175700.0,<1H OCEAN +-117.03,32.97,16.0,3936.0,694.0,1935.0,659.0,4.5625,231200.0,<1H OCEAN +-117.03,32.96,16.0,3424.0,698.0,1940.0,645.0,4.121,182100.0,<1H OCEAN +-116.99,32.96,17.0,5509.0,866.0,2748.0,817.0,4.8854,181300.0,<1H OCEAN +-117.02,32.95,25.0,1909.0,334.0,1043.0,322.0,3.7784,160100.0,<1H OCEAN +-117.03,32.95,19.0,4500.0,815.0,2456.0,782.0,4.5032,168900.0,<1H OCEAN +-117.05,32.95,17.0,3039.0,555.0,1297.0,552.0,3.9531,178600.0,<1H OCEAN +-117.05,32.95,17.0,4814.0,1091.0,3013.0,1078.0,3.2369,167800.0,<1H OCEAN +-117.06,33.02,24.0,830.0,190.0,279.0,196.0,1.9176,121100.0,<1H OCEAN +-117.06,33.01,24.0,2618.0,485.0,726.0,443.0,3.5192,159100.0,<1H OCEAN +-117.07,33.01,25.0,2120.0,381.0,588.0,359.0,3.1187,169400.0,<1H OCEAN +-117.07,33.02,17.0,2863.0,665.0,715.0,467.0,2.6048,148200.0,<1H OCEAN +-117.06,33.04,17.0,1785.0,255.0,667.0,277.0,5.7382,278000.0,<1H OCEAN +-117.06,33.03,23.0,2023.0,309.0,678.0,340.0,7.0913,265400.0,<1H OCEAN +-117.07,33.03,14.0,6665.0,1231.0,2026.0,1001.0,5.09,268500.0,<1H OCEAN +-117.07,33.03,15.0,1095.0,158.0,361.0,176.0,6.8099,328200.0,<1H OCEAN +-117.08,33.03,10.0,2296.0,450.0,818.0,405.0,4.3424,160600.0,<1H OCEAN +-117.07,33.04,4.0,2271.0,578.0,926.0,391.0,3.6437,210100.0,<1H OCEAN +-117.08,33.03,15.0,3023.0,623.0,1283.0,559.0,3.3724,137900.0,<1H OCEAN +-117.08,33.03,17.0,987.0,142.0,463.0,152.0,5.8747,229300.0,<1H OCEAN +-117.08,33.03,18.0,1339.0,284.0,761.0,290.0,5.3074,137200.0,<1H OCEAN +-117.09,33.03,17.0,2786.0,396.0,1228.0,396.0,6.4211,220700.0,<1H OCEAN +-117.08,33.04,10.0,2577.0,347.0,1193.0,365.0,6.53,264100.0,<1H OCEAN +-117.15,33.02,4.0,15029.0,2279.0,5613.0,1696.0,7.2731,450400.0,NEAR OCEAN +-117.1,32.97,17.0,3167.0,861.0,2098.0,828.0,2.4459,85800.0,<1H OCEAN +-117.1,32.96,7.0,3619.0,770.0,1134.0,482.0,4.1279,167600.0,<1H OCEAN +-117.05,33.05,6.0,7916.0,1293.0,2741.0,1204.0,5.6436,278600.0,<1H OCEAN +-117.05,33.04,12.0,1840.0,254.0,580.0,234.0,6.7769,400000.0,<1H OCEAN +-117.05,33.03,14.0,5180.0,1051.0,1639.0,991.0,4.5,222200.0,<1H OCEAN +-117.05,33.03,16.0,87.0,20.0,32.0,21.0,4.3571,144600.0,<1H OCEAN +-117.06,33.02,17.0,2635.0,389.0,994.0,359.0,5.8966,261500.0,<1H OCEAN +-117.05,33.02,18.0,917.0,121.0,388.0,131.0,6.3517,260100.0,<1H OCEAN +-117.01,33.04,13.0,4595.0,567.0,1643.0,544.0,7.7684,362300.0,<1H OCEAN +-117.04,33.03,16.0,2852.0,435.0,1083.0,448.0,6.3761,296200.0,<1H OCEAN +-117.01,32.99,8.0,3372.0,430.0,1536.0,448.0,8.4284,378300.0,<1H OCEAN +-116.99,33.01,11.0,1412.0,185.0,529.0,166.0,7.7517,500001.0,<1H OCEAN +-117.09,32.91,9.0,2012.0,316.0,802.0,289.0,6.5706,255700.0,<1H OCEAN +-117.09,32.91,16.0,2005.0,266.0,827.0,270.0,7.0546,282200.0,<1H OCEAN +-117.09,32.9,16.0,1989.0,290.0,814.0,291.0,6.2715,255100.0,<1H OCEAN +-117.1,32.9,16.0,2994.0,445.0,1047.0,437.0,5.149,184300.0,<1H OCEAN +-117.11,32.9,16.0,2043.0,388.0,705.0,352.0,4.4766,161500.0,<1H OCEAN +-117.11,32.91,15.0,1840.0,235.0,855.0,241.0,7.5992,310600.0,<1H OCEAN +-117.08,32.91,16.0,1653.0,228.0,690.0,224.0,6.5853,248400.0,<1H OCEAN +-117.08,32.93,5.0,14944.0,2490.0,6600.0,2407.0,6.0857,308300.0,<1H OCEAN +-117.08,32.91,9.0,1547.0,218.0,683.0,231.0,7.5604,327900.0,<1H OCEAN +-117.07,33.01,5.0,5870.0,977.0,1917.0,842.0,5.1998,294100.0,<1H OCEAN +-117.06,33.01,9.0,2470.0,417.0,904.0,427.0,4.4219,209200.0,<1H OCEAN +-117.07,33.0,4.0,6242.0,1258.0,2211.0,1116.0,4.25,281600.0,<1H OCEAN +-117.07,33.0,4.0,9153.0,1866.0,3775.0,1698.0,4.955,241500.0,<1H OCEAN +-117.08,33.01,5.0,5659.0,931.0,2565.0,902.0,6.1949,238700.0,<1H OCEAN +-117.09,32.99,16.0,2175.0,327.0,1037.0,326.0,5.1909,201400.0,<1H OCEAN +-117.09,32.99,18.0,3215.0,588.0,1618.0,509.0,4.6028,216800.0,<1H OCEAN +-117.09,32.98,23.0,1125.0,273.0,687.0,308.0,2.3182,268800.0,<1H OCEAN +-117.12,32.96,16.0,3050.0,559.0,1444.0,512.0,5.2463,156300.0,<1H OCEAN +-117.11,32.97,9.0,1531.0,242.0,850.0,240.0,6.0862,263600.0,<1H OCEAN +-117.1,33.0,5.0,15502.0,2613.0,7417.0,2358.0,5.9094,261100.0,<1H OCEAN +-117.11,32.95,11.0,4694.0,824.0,2223.0,783.0,4.9485,231800.0,<1H OCEAN +-117.12,32.95,8.0,3670.0,536.0,1723.0,592.0,6.3542,218100.0,<1H OCEAN +-117.12,32.96,15.0,2869.0,405.0,1526.0,402.0,6.0175,238300.0,<1H OCEAN +-117.12,32.95,4.0,9018.0,1572.0,4438.0,1498.0,4.988,263700.0,<1H OCEAN +-117.08,32.97,3.0,17466.0,3336.0,7644.0,2895.0,5.4584,246500.0,<1H OCEAN +-117.06,32.97,17.0,4754.0,877.0,2412.0,832.0,4.3548,192300.0,<1H OCEAN +-117.25,33.06,6.0,9859.0,1448.0,4194.0,1401.0,6.439,296200.0,NEAR OCEAN +-117.25,33.05,16.0,2794.0,476.0,1387.0,442.0,4.3286,213400.0,NEAR OCEAN +-117.26,33.05,14.0,2323.0,373.0,1057.0,372.0,6.2513,240900.0,NEAR OCEAN +-117.26,33.06,11.0,2660.0,352.0,1226.0,366.0,7.6832,319800.0,NEAR OCEAN +-117.24,33.05,15.0,3029.0,555.0,1559.0,546.0,5.3129,169200.0,NEAR OCEAN +-117.24,33.05,11.0,5827.0,882.0,2588.0,842.0,6.4027,344200.0,NEAR OCEAN +-117.2,33.07,5.0,10394.0,1617.0,4496.0,1553.0,5.9289,411300.0,NEAR OCEAN +-117.16,33.06,16.0,1988.0,279.0,770.0,252.0,5.8661,404500.0,NEAR OCEAN +-117.21,33.03,20.0,3370.0,433.0,1020.0,408.0,11.0911,500001.0,NEAR OCEAN +-117.18,33.02,15.0,3540.0,453.0,1364.0,425.0,13.6623,500001.0,NEAR OCEAN +-117.21,33.02,26.0,3194.0,454.0,1032.0,406.0,10.156,500001.0,NEAR OCEAN +-117.23,33.01,18.0,3961.0,511.0,1541.0,470.0,11.1118,500001.0,NEAR OCEAN +-117.26,32.97,25.0,2582.0,495.0,1088.0,471.0,6.4651,500001.0,NEAR OCEAN +-117.26,32.96,36.0,1721.0,264.0,710.0,282.0,10.1768,500001.0,NEAR OCEAN +-117.26,32.95,34.0,1651.0,273.0,650.0,271.0,5.6582,500001.0,NEAR OCEAN +-117.26,32.95,22.0,5484.0,1227.0,1947.0,1012.0,4.4375,500001.0,NEAR OCEAN +-117.3,32.96,30.0,1226.0,205.0,380.0,151.0,4.2875,500001.0,NEAR OCEAN +-117.25,33.01,16.0,3892.0,520.0,1454.0,524.0,7.7317,396000.0,NEAR OCEAN +-117.24,33.0,16.0,2512.0,356.0,795.0,353.0,7.5975,369100.0,NEAR OCEAN +-117.23,32.99,17.0,2718.0,326.0,1011.0,319.0,15.0001,500001.0,NEAR OCEAN +-117.25,32.99,10.0,4926.0,749.0,1478.0,634.0,7.472,439900.0,NEAR OCEAN +-117.25,33.0,14.0,2518.0,458.0,931.0,414.0,5.8393,485300.0,NEAR OCEAN +-117.26,33.0,31.0,2695.0,491.0,1059.0,451.0,4.7841,393500.0,NEAR OCEAN +-117.27,33.0,36.0,2426.0,454.0,1085.0,420.0,5.1523,387800.0,NEAR OCEAN +-117.31,33.0,30.0,1631.0,310.0,665.0,297.0,6.8443,492500.0,NEAR OCEAN +-117.26,32.99,16.0,2127.0,512.0,1532.0,499.0,2.7348,231300.0,NEAR OCEAN +-117.27,32.99,21.0,3318.0,578.0,1273.0,538.0,5.5922,382100.0,NEAR OCEAN +-117.26,32.98,12.0,3900.0,977.0,1690.0,892.0,4.125,226900.0,NEAR OCEAN +-117.31,32.98,17.0,2789.0,648.0,849.0,345.0,4.1012,244700.0,NEAR OCEAN +-117.27,32.98,17.0,1853.0,392.0,351.0,208.0,5.2742,230700.0,NEAR OCEAN +-117.32,33.01,29.0,3584.0,712.0,1619.0,667.0,4.125,394400.0,NEAR OCEAN +-117.28,33.02,21.0,2736.0,585.0,1251.0,576.0,4.2356,347700.0,NEAR OCEAN +-117.27,33.02,13.0,5723.0,1242.0,2450.0,1140.0,4.7179,376700.0,NEAR OCEAN +-117.26,33.04,18.0,2229.0,346.0,1088.0,352.0,6.3525,278300.0,NEAR OCEAN +-117.26,33.04,16.0,3109.0,450.0,1433.0,453.0,6.6319,269600.0,NEAR OCEAN +-117.24,33.04,13.0,3498.0,663.0,1412.0,618.0,3.212,147600.0,NEAR OCEAN +-117.25,33.03,6.0,3416.0,493.0,1319.0,467.0,6.9326,324600.0,NEAR OCEAN +-117.27,33.03,25.0,1787.0,311.0,1108.0,311.0,3.9826,215800.0,NEAR OCEAN +-117.27,33.03,16.0,2240.0,443.0,1104.0,416.0,3.5313,148700.0,NEAR OCEAN +-117.26,33.02,9.0,4632.0,759.0,1724.0,685.0,6.3712,369800.0,NEAR OCEAN +-117.27,33.03,19.0,2899.0,499.0,1356.0,512.0,4.87,220900.0,NEAR OCEAN +-117.27,33.02,21.0,2144.0,340.0,928.0,344.0,5.798,286100.0,NEAR OCEAN +-117.29,33.05,28.0,1146.0,338.0,672.0,292.0,3.1667,300000.0,NEAR OCEAN +-117.28,33.04,12.0,4459.0,928.0,2471.0,888.0,3.5179,252700.0,NEAR OCEAN +-117.27,33.04,27.0,1839.0,392.0,1302.0,404.0,3.55,214600.0,NEAR OCEAN +-117.29,33.04,30.0,2750.0,555.0,1281.0,520.0,4.7333,286900.0,NEAR OCEAN +-117.33,33.03,31.0,1171.0,321.0,603.0,267.0,2.8611,314300.0,NEAR OCEAN +-117.3,33.07,14.0,2670.0,426.0,1034.0,407.0,6.4247,295100.0,NEAR OCEAN +-117.29,33.08,18.0,3225.0,515.0,1463.0,476.0,5.7787,346700.0,NEAR OCEAN +-117.27,33.08,7.0,2949.0,447.0,1335.0,426.0,6.0922,342400.0,NEAR OCEAN +-117.29,33.06,20.0,2110.0,335.0,1008.0,325.0,6.1509,338700.0,NEAR OCEAN +-117.28,33.06,8.0,4172.0,1022.0,2585.0,941.0,4.0118,245800.0,NEAR OCEAN +-117.27,33.06,7.0,3686.0,733.0,1612.0,672.0,3.197,367100.0,NEAR OCEAN +-117.27,33.05,15.0,3333.0,808.0,1371.0,737.0,2.9083,122400.0,NEAR OCEAN +-117.3,33.08,24.0,2628.0,527.0,1389.0,520.0,4.0,343200.0,NEAR OCEAN +-117.34,33.06,17.0,2718.0,518.0,815.0,403.0,4.3182,357100.0,NEAR OCEAN +-117.31,33.07,21.0,2035.0,534.0,948.0,467.0,3.2984,369400.0,NEAR OCEAN +-117.3,33.07,16.0,3147.0,765.0,2165.0,690.0,3.5585,284800.0,NEAR OCEAN +-117.3,33.06,24.0,2171.0,511.0,870.0,442.0,3.194,276300.0,NEAR OCEAN +-117.3,33.06,31.0,2128.0,520.0,1049.0,485.0,4.027,290000.0,NEAR OCEAN +-117.3,33.05,34.0,1797.0,458.0,775.0,391.0,3.2308,331300.0,NEAR OCEAN +-117.33,33.17,11.0,10923.0,2041.0,4773.0,1858.0,4.0791,281300.0,NEAR OCEAN +-117.34,33.16,31.0,2851.0,458.0,1286.0,467.0,4.5694,243700.0,NEAR OCEAN +-117.33,33.16,29.0,3559.0,552.0,1533.0,545.0,4.0585,245500.0,NEAR OCEAN +-117.32,33.15,15.0,13245.0,2212.0,5495.0,2060.0,5.4904,262100.0,NEAR OCEAN +-117.32,33.12,25.0,2670.0,527.0,936.0,461.0,2.7717,354000.0,NEAR OCEAN +-117.31,33.1,15.0,2392.0,446.0,747.0,421.0,3.5341,500001.0,NEAR OCEAN +-117.29,33.13,4.0,617.0,105.0,224.0,105.0,3.9205,183000.0,NEAR OCEAN +-117.31,33.11,7.0,7974.0,1703.0,2904.0,1550.0,4.1282,188100.0,NEAR OCEAN +-117.29,33.12,4.0,1380.0,322.0,755.0,286.0,4.7961,168800.0,NEAR OCEAN +-117.29,33.1,6.0,6091.0,1018.0,2064.0,957.0,5.1837,259800.0,NEAR OCEAN +-117.28,33.1,13.0,2644.0,422.0,1197.0,399.0,6.5338,267900.0,NEAR OCEAN +-117.35,33.17,16.0,4595.0,1341.0,2849.0,1197.0,2.478,185600.0,NEAR OCEAN +-117.34,33.16,24.0,1006.0,277.0,610.0,246.0,2.25,187500.0,NEAR OCEAN +-117.34,33.15,19.0,5710.0,1423.0,4163.0,1406.0,3.0306,178500.0,NEAR OCEAN +-117.35,33.16,22.0,1331.0,305.0,580.0,193.0,3.975,500001.0,NEAR OCEAN +-117.35,33.16,10.0,1684.0,515.0,902.0,449.0,3.7891,206300.0,NEAR OCEAN +-117.34,33.15,17.0,4505.0,1140.0,2111.0,1062.0,3.3536,283300.0,NEAR OCEAN +-117.36,33.18,26.0,5550.0,1153.0,2372.0,1058.0,2.5509,181800.0,NEAR OCEAN +-117.36,33.18,39.0,1546.0,291.0,833.0,308.0,2.8893,185400.0,NEAR OCEAN +-117.35,33.17,36.0,1977.0,423.0,812.0,387.0,3.625,198000.0,NEAR OCEAN +-117.36,33.17,24.0,2046.0,442.0,812.0,367.0,2.3182,500001.0,NEAR OCEAN +-117.37,33.18,19.0,1931.0,509.0,855.0,394.0,2.6979,266700.0,NEAR OCEAN +-117.37,33.19,23.0,4104.0,1274.0,4729.0,1187.0,1.8214,173800.0,NEAR OCEAN +-117.37,33.19,33.0,2205.0,453.0,1138.0,439.0,2.8819,208600.0,NEAR OCEAN +-117.37,33.19,18.0,975.0,382.0,650.0,286.0,1.9562,192500.0,NEAR OCEAN +-117.37,33.19,38.0,861.0,213.0,486.0,204.0,4.1875,185000.0,NEAR OCEAN +-117.38,33.19,35.0,928.0,264.0,538.0,248.0,2.4583,197900.0,NEAR OCEAN +-117.38,33.14,14.0,5039.0,1373.0,1298.0,696.0,3.209,313300.0,NEAR OCEAN +-117.38,33.19,26.0,4123.0,1145.0,1703.0,895.0,1.9891,500000.0,NEAR OCEAN +-117.38,33.2,17.0,1877.0,581.0,1288.0,426.0,1.9386,106300.0,NEAR OCEAN +-117.37,33.2,19.0,928.0,317.0,845.0,319.0,1.6318,187500.0,NEAR OCEAN +-117.38,33.19,17.0,353.0,112.0,359.0,118.0,1.5625,162500.0,NEAR OCEAN +-117.38,33.2,26.0,1427.0,386.0,974.0,317.0,1.3903,184400.0,NEAR OCEAN +-117.36,33.2,19.0,1926.0,557.0,1190.0,483.0,1.3269,166100.0,NEAR OCEAN +-117.36,33.2,19.0,2129.0,562.0,1323.0,525.0,2.9539,169900.0,NEAR OCEAN +-117.36,33.2,26.0,2447.0,482.0,1405.0,486.0,3.2917,150800.0,NEAR OCEAN +-117.35,33.2,23.0,3297.0,728.0,1793.0,622.0,2.5754,169700.0,NEAR OCEAN +-117.35,33.21,24.0,1586.0,262.0,912.0,298.0,4.25,150300.0,NEAR OCEAN +-117.34,33.21,23.0,2062.0,376.0,1302.0,379.0,4.0109,145700.0,NEAR OCEAN +-117.35,33.2,32.0,1251.0,220.0,700.0,232.0,3.9875,142900.0,NEAR OCEAN +-117.34,33.21,12.0,5963.0,1372.0,3015.0,1124.0,2.7386,216100.0,NEAR OCEAN +-117.35,33.19,28.0,2823.0,476.0,1189.0,433.0,5.1733,198100.0,NEAR OCEAN +-117.34,33.19,23.0,3546.0,553.0,1533.0,518.0,5.276,224500.0,NEAR OCEAN +-117.33,33.19,15.0,3672.0,845.0,1827.0,796.0,2.9716,173600.0,NEAR OCEAN +-117.34,33.19,19.0,3575.0,525.0,1654.0,559.0,5.7409,274100.0,NEAR OCEAN +-117.29,33.24,5.0,3109.0,634.0,1823.0,578.0,3.1875,153800.0,<1H OCEAN +-117.3,33.23,13.0,3619.0,791.0,1759.0,806.0,2.765,98500.0,<1H OCEAN +-117.32,33.23,24.0,2580.0,604.0,982.0,569.0,1.6402,169300.0,NEAR OCEAN +-117.31,33.24,6.0,1580.0,288.0,792.0,265.0,4.0469,162400.0,<1H OCEAN +-117.32,33.22,15.0,4784.0,1039.0,1810.0,986.0,2.4375,108900.0,NEAR OCEAN +-117.33,33.22,21.0,2868.0,602.0,855.0,559.0,2.7846,91200.0,NEAR OCEAN +-117.32,33.22,16.0,1057.0,232.0,316.0,221.0,2.7417,91700.0,NEAR OCEAN +-117.33,33.21,17.0,1246.0,300.0,424.0,288.0,2.2882,85800.0,NEAR OCEAN +-117.3,33.22,4.0,14960.0,2988.0,6666.0,2612.0,3.7568,184100.0,NEAR OCEAN +-117.31,33.19,11.0,20944.0,3753.0,8738.0,3441.0,4.3762,215500.0,NEAR OCEAN +-117.29,33.2,16.0,2150.0,461.0,1428.0,407.0,2.4754,157300.0,NEAR OCEAN +-117.31,33.18,16.0,1835.0,430.0,599.0,399.0,2.0147,87700.0,NEAR OCEAN +-117.29,33.19,18.0,6235.0,1233.0,4127.0,1162.0,3.0704,151600.0,NEAR OCEAN +-117.28,33.2,20.0,4835.0,854.0,2983.0,834.0,4.3428,152100.0,NEAR OCEAN +-117.37,33.22,35.0,2204.0,482.0,1435.0,462.0,3.676,125600.0,NEAR OCEAN +-117.35,33.23,4.0,1837.0,287.0,934.0,277.0,3.8958,189800.0,NEAR OCEAN +-117.35,33.21,18.0,2971.0,606.0,2051.0,493.0,2.675,117100.0,NEAR OCEAN +-117.38,33.21,31.0,1502.0,367.0,1514.0,342.0,2.6442,103300.0,NEAR OCEAN +-117.37,33.2,29.0,1315.0,311.0,1425.0,306.0,2.0272,99600.0,NEAR OCEAN +-117.28,33.28,13.0,6131.0,1040.0,4049.0,940.0,3.8156,150700.0,<1H OCEAN +-117.25,33.3,14.0,2513.0,351.0,1151.0,357.0,6.3054,359000.0,<1H OCEAN +-117.26,33.26,9.0,4609.0,798.0,2582.0,746.0,4.3429,173900.0,<1H OCEAN +-117.3,33.26,23.0,1678.0,275.0,1227.0,264.0,4.1713,133800.0,<1H OCEAN +-117.3,33.25,22.0,2329.0,419.0,1456.0,381.0,3.7933,131000.0,<1H OCEAN +-117.31,33.25,14.0,3483.0,764.0,2140.0,687.0,3.125,102300.0,<1H OCEAN +-117.31,33.25,13.0,3075.0,630.0,1843.0,674.0,2.8558,97100.0,<1H OCEAN +-117.32,33.25,7.0,2499.0,420.0,1314.0,398.0,4.85,186900.0,<1H OCEAN +-117.32,33.25,7.0,8206.0,1523.0,4399.0,1423.0,3.6301,170900.0,<1H OCEAN +-117.34,33.23,11.0,3737.0,757.0,2212.0,727.0,3.1062,141000.0,NEAR OCEAN +-117.33,33.23,15.0,2919.0,592.0,1130.0,579.0,2.5872,155600.0,NEAR OCEAN +-117.33,33.23,15.0,1905.0,416.0,1258.0,388.0,3.33,127900.0,NEAR OCEAN +-117.33,33.24,13.0,4543.0,881.0,2298.0,870.0,2.9386,143400.0,NEAR OCEAN +-117.42,33.35,14.0,25135.0,4819.0,35682.0,4769.0,2.5729,134400.0,<1H OCEAN +-117.24,33.34,17.0,2866.0,442.0,1354.0,431.0,4.5764,257300.0,<1H OCEAN +-117.22,33.36,16.0,3165.0,482.0,1351.0,452.0,4.605,263300.0,<1H OCEAN +-117.22,33.31,12.0,2924.0,433.0,1193.0,394.0,6.2475,331300.0,<1H OCEAN +-117.21,33.34,10.0,5294.0,817.0,2312.0,810.0,5.4563,325700.0,<1H OCEAN +-117.19,33.34,15.0,3310.0,488.0,1104.0,460.0,6.1009,314400.0,<1H OCEAN +-117.17,33.34,15.0,3313.0,679.0,1022.0,564.0,2.7986,189900.0,<1H OCEAN +-117.2,33.29,12.0,6358.0,1182.0,2778.0,1020.0,4.0357,295900.0,<1H OCEAN +-117.17,33.28,16.0,1921.0,312.0,862.0,280.0,5.1786,376800.0,<1H OCEAN +-117.25,33.38,16.0,3536.0,765.0,2007.0,687.0,3.0,146700.0,<1H OCEAN +-117.24,33.4,16.0,2704.0,463.0,1322.0,424.0,3.7857,227000.0,<1H OCEAN +-117.23,33.38,18.0,3339.0,704.0,1727.0,652.0,2.8393,173200.0,<1H OCEAN +-117.24,33.38,16.0,2792.0,525.0,1696.0,516.0,3.668,171200.0,<1H OCEAN +-117.25,33.38,17.0,1614.0,431.0,1031.0,389.0,2.0956,134400.0,<1H OCEAN +-117.25,33.39,22.0,2699.0,543.0,1425.0,491.0,2.375,137300.0,<1H OCEAN +-117.26,33.37,7.0,2221.0,548.0,1440.0,501.0,2.2368,154600.0,<1H OCEAN +-117.25,33.37,8.0,1755.0,530.0,1687.0,511.0,1.995,146900.0,<1H OCEAN +-117.24,33.37,14.0,4687.0,793.0,2436.0,779.0,4.5391,180900.0,<1H OCEAN +-117.24,33.36,11.0,2786.0,480.0,1250.0,450.0,4.5,222600.0,<1H OCEAN +-117.25,33.36,6.0,3725.0,960.0,2833.0,915.0,2.3214,247000.0,<1H OCEAN +-117.34,33.46,14.0,1902.0,338.0,848.0,304.0,5.5395,273300.0,<1H OCEAN +-117.19,33.41,16.0,3031.0,554.0,1301.0,518.0,4.0882,296100.0,<1H OCEAN +-117.14,33.39,17.0,2889.0,587.0,1931.0,510.0,3.8547,208300.0,<1H OCEAN +-117.2,33.38,14.0,5392.0,821.0,2350.0,810.0,5.0507,291500.0,<1H OCEAN +-117.1,33.36,19.0,3518.0,658.0,2091.0,610.0,3.2614,168800.0,<1H OCEAN +-116.95,33.31,16.0,2921.0,639.0,1838.0,540.0,2.2393,117000.0,<1H OCEAN +-117.03,33.32,14.0,1088.0,209.0,601.0,193.0,3.8438,243800.0,<1H OCEAN +-117.05,33.29,17.0,1800.0,312.0,891.0,281.0,7.0177,267600.0,<1H OCEAN +-117.05,33.26,14.0,3103.0,569.0,1704.0,539.0,3.7644,264700.0,<1H OCEAN +-117.12,33.27,11.0,3016.0,601.0,1727.0,541.0,4.9375,232800.0,<1H OCEAN +-117.0,33.29,17.0,2073.0,313.0,573.0,221.0,8.2531,419200.0,<1H OCEAN +-116.98,33.26,12.0,5898.0,1002.0,3129.0,945.0,4.7647,254100.0,<1H OCEAN +-116.99,33.2,17.0,2980.0,539.0,1531.0,505.0,3.1553,250000.0,<1H OCEAN +-116.9,33.22,11.0,4132.0,773.0,2012.0,703.0,3.1906,234500.0,<1H OCEAN +-117.14,33.23,11.0,4068.0,829.0,918.0,500.0,3.1272,281300.0,<1H OCEAN +-117.11,33.23,13.0,5819.0,919.0,2228.0,866.0,4.9335,298100.0,<1H OCEAN +-117.08,33.23,14.0,3337.0,571.0,1385.0,512.0,4.15,272200.0,<1H OCEAN +-117.2,33.24,12.0,4992.0,,2106.0,801.0,6.2079,307300.0,<1H OCEAN +-117.15,33.2,16.0,2690.0,459.0,1253.0,393.0,4.0328,294600.0,<1H OCEAN +-117.2,33.2,16.0,4409.0,629.0,1875.0,609.0,5.543,286400.0,<1H OCEAN +-117.22,33.22,17.0,3675.0,672.0,1693.0,597.0,3.3882,190800.0,<1H OCEAN +-117.22,33.22,16.0,2134.0,643.0,1555.0,560.0,1.7217,175000.0,<1H OCEAN +-117.22,33.22,15.0,1430.0,343.0,704.0,322.0,1.9571,162500.0,<1H OCEAN +-117.23,33.24,26.0,1991.0,330.0,1014.0,304.0,4.3068,240100.0,<1H OCEAN +-117.24,33.23,13.0,3756.0,648.0,1767.0,614.0,4.0776,196000.0,<1H OCEAN +-117.24,33.23,21.0,1718.0,308.0,1194.0,312.0,3.4359,150900.0,<1H OCEAN +-117.23,33.23,13.0,2899.0,657.0,1946.0,579.0,2.9875,172000.0,<1H OCEAN +-117.23,33.22,18.0,2334.0,573.0,962.0,557.0,1.808,97000.0,<1H OCEAN +-117.23,33.22,16.0,3224.0,729.0,1036.0,608.0,2.0246,148800.0,<1H OCEAN +-117.24,33.22,20.0,1962.0,334.0,1173.0,349.0,4.1316,162500.0,<1H OCEAN +-117.24,33.21,9.0,2486.0,626.0,1938.0,525.0,2.1293,151400.0,<1H OCEAN +-117.23,33.21,34.0,544.0,108.0,348.0,127.0,4.125,164600.0,<1H OCEAN +-117.25,33.25,6.0,6160.0,993.0,2997.0,1029.0,4.6187,205000.0,<1H OCEAN +-117.27,33.23,5.0,20908.0,3933.0,9690.0,3510.0,4.1405,198500.0,<1H OCEAN +-117.27,33.22,5.0,2283.0,337.0,999.0,325.0,5.0249,196700.0,<1H OCEAN +-117.27,33.22,16.0,1420.0,311.0,470.0,313.0,1.8849,90800.0,<1H OCEAN +-117.28,33.22,13.0,2832.0,542.0,1065.0,531.0,2.3844,98600.0,<1H OCEAN +-117.27,33.21,5.0,5764.0,996.0,3161.0,1012.0,4.4531,177500.0,<1H OCEAN +-117.25,33.22,26.0,2010.0,347.0,1160.0,331.0,3.9815,142600.0,<1H OCEAN +-117.25,33.22,19.0,2167.0,443.0,1654.0,435.0,3.5,135800.0,<1H OCEAN +-117.26,33.21,26.0,1906.0,408.0,1325.0,427.0,3.0197,136000.0,<1H OCEAN +-117.28,33.2,11.0,1472.0,261.0,1012.0,285.0,4.21,175600.0,NEAR OCEAN +-117.27,33.2,23.0,2145.0,379.0,1360.0,404.0,4.2054,150700.0,<1H OCEAN +-117.26,33.2,13.0,3163.0,725.0,1675.0,629.0,2.8214,121900.0,<1H OCEAN +-117.27,33.2,34.0,1852.0,322.0,978.0,332.0,4.3542,156900.0,<1H OCEAN +-117.27,33.19,8.0,973.0,289.0,663.0,209.0,2.724,139300.0,NEAR OCEAN +-117.28,33.19,5.0,2697.0,639.0,1633.0,580.0,3.4456,165800.0,NEAR OCEAN +-117.25,33.21,9.0,1944.0,488.0,1992.0,453.0,2.066,127200.0,<1H OCEAN +-117.24,33.21,19.0,1872.0,489.0,1859.0,446.0,2.1875,121700.0,<1H OCEAN +-117.24,33.21,18.0,1846.0,419.0,1581.0,387.0,3.0982,111300.0,<1H OCEAN +-117.24,33.2,25.0,1631.0,415.0,1045.0,386.0,2.4505,147500.0,<1H OCEAN +-117.24,33.2,26.0,1701.0,404.0,989.0,367.0,2.5119,171700.0,<1H OCEAN +-117.25,33.2,22.0,2361.0,618.0,1472.0,596.0,2.0625,124500.0,<1H OCEAN +-117.25,33.2,10.0,2050.0,473.0,1302.0,471.0,2.7961,131300.0,<1H OCEAN +-117.25,33.21,13.0,1203.0,292.0,1035.0,293.0,2.6339,117000.0,<1H OCEAN +-117.23,33.21,21.0,1934.0,386.0,861.0,381.0,3.6181,213800.0,<1H OCEAN +-117.22,33.21,19.0,4400.0,828.0,1901.0,735.0,3.6375,198800.0,<1H OCEAN +-117.22,33.2,31.0,1736.0,277.0,801.0,292.0,4.4844,205500.0,<1H OCEAN +-117.23,33.2,29.0,3372.0,720.0,1770.0,693.0,3.5109,166000.0,<1H OCEAN +-117.23,33.2,21.0,2284.0,360.0,999.0,356.0,4.8929,212500.0,<1H OCEAN +-117.21,33.2,22.0,3337.0,518.0,1288.0,466.0,5.04,253700.0,<1H OCEAN +-117.22,33.19,16.0,3004.0,656.0,1948.0,606.0,2.7019,216900.0,<1H OCEAN +-117.27,33.18,4.0,3371.0,773.0,1481.0,627.0,2.9133,215700.0,NEAR OCEAN +-117.26,33.19,4.0,2342.0,595.0,1518.0,545.0,2.9469,216100.0,NEAR OCEAN +-117.26,33.19,2.0,2629.0,509.0,1044.0,522.0,4.2361,158500.0,NEAR OCEAN +-117.25,33.19,18.0,1891.0,306.0,830.0,279.0,4.5764,207000.0,<1H OCEAN +-117.24,33.19,19.0,1569.0,351.0,1035.0,352.0,2.9191,159400.0,<1H OCEAN +-117.23,33.19,22.0,2554.0,447.0,1147.0,422.0,3.6346,192500.0,<1H OCEAN +-117.24,33.18,19.0,3337.0,565.0,1646.0,554.0,5.0195,200200.0,<1H OCEAN +-117.3,33.17,6.0,7880.0,1533.0,3760.0,1460.0,4.1807,182600.0,NEAR OCEAN +-117.32,33.17,18.0,2143.0,299.0,828.0,283.0,4.2383,239000.0,NEAR OCEAN +-117.31,33.17,7.0,2349.0,312.0,809.0,282.0,5.552,283900.0,NEAR OCEAN +-117.31,33.16,4.0,5846.0,894.0,2282.0,801.0,5.5956,247800.0,NEAR OCEAN +-117.31,33.16,17.0,1704.0,263.0,781.0,281.0,5.6605,224400.0,NEAR OCEAN +-117.29,33.18,15.0,3780.0,792.0,1632.0,721.0,2.7644,111400.0,NEAR OCEAN +-117.29,33.18,17.0,821.0,176.0,436.0,168.0,3.1667,160600.0,NEAR OCEAN +-117.28,33.18,16.0,3002.0,591.0,842.0,538.0,2.1205,157300.0,NEAR OCEAN +-117.28,33.18,14.0,676.0,118.0,384.0,126.0,6.2096,178100.0,NEAR OCEAN +-117.26,33.18,9.0,4540.0,793.0,2235.0,746.0,4.5781,225600.0,NEAR OCEAN +-117.27,33.15,4.0,23915.0,4135.0,10877.0,3958.0,4.6357,244900.0,NEAR OCEAN +-117.29,33.15,11.0,2560.0,445.0,952.0,448.0,4.0625,87500.0,NEAR OCEAN +-117.24,33.17,4.0,9998.0,1874.0,3925.0,1672.0,4.2826,237500.0,<1H OCEAN +-117.22,33.17,6.0,1487.0,362.0,810.0,322.0,3.625,135700.0,<1H OCEAN +-117.23,33.16,4.0,3066.0,625.0,1164.0,582.0,4.0,228100.0,NEAR OCEAN +-117.23,33.16,2.0,4624.0,946.0,2091.0,808.0,3.6736,214500.0,NEAR OCEAN +-117.22,33.18,13.0,4273.0,886.0,2328.0,801.0,3.3444,183900.0,<1H OCEAN +-117.21,33.17,16.0,1787.0,361.0,1446.0,362.0,3.75,163800.0,<1H OCEAN +-117.21,33.19,21.0,3765.0,612.0,1722.0,593.0,4.8152,218500.0,<1H OCEAN +-117.19,33.18,7.0,3561.0,722.0,1921.0,657.0,4.1128,209700.0,<1H OCEAN +-117.21,33.16,13.0,2937.0,698.0,1246.0,579.0,2.6487,196000.0,<1H OCEAN +-117.2,33.16,13.0,4503.0,1137.0,3094.0,1091.0,2.3159,91600.0,<1H OCEAN +-117.2,33.15,11.0,4091.0,864.0,1927.0,765.0,3.0139,199000.0,<1H OCEAN +-117.2,33.14,19.0,2025.0,414.0,1663.0,403.0,3.8147,139200.0,<1H OCEAN +-117.22,33.14,5.0,4576.0,848.0,2314.0,705.0,5.0123,210400.0,NEAR OCEAN +-117.21,33.14,12.0,4839.0,954.0,1708.0,952.0,2.8586,163300.0,<1H OCEAN +-117.21,33.13,15.0,1889.0,368.0,754.0,409.0,2.2278,132800.0,NEAR OCEAN +-117.17,33.18,25.0,596.0,115.0,426.0,137.0,3.0221,214300.0,<1H OCEAN +-117.18,33.16,15.0,5923.0,1206.0,3943.0,1006.0,3.1793,159900.0,<1H OCEAN +-117.15,33.16,5.0,4750.0,962.0,2726.0,905.0,3.5839,158500.0,<1H OCEAN +-117.14,33.16,16.0,1660.0,,733.0,214.0,5.6874,202700.0,<1H OCEAN +-117.13,33.15,15.0,2241.0,381.0,997.0,390.0,3.4833,193200.0,<1H OCEAN +-117.14,33.15,17.0,1149.0,182.0,702.0,192.0,5.5696,168400.0,<1H OCEAN +-117.14,33.15,16.0,1129.0,198.0,758.0,178.0,5.0346,174600.0,<1H OCEAN +-117.15,33.14,15.0,1070.0,208.0,470.0,217.0,2.3062,158900.0,<1H OCEAN +-117.13,33.15,16.0,3907.0,671.0,1759.0,663.0,3.1776,172600.0,<1H OCEAN +-117.13,33.14,16.0,1649.0,278.0,993.0,277.0,4.8526,170700.0,<1H OCEAN +-117.13,33.14,5.0,2618.0,539.0,1320.0,512.0,4.1053,171400.0,<1H OCEAN +-117.12,33.14,16.0,1710.0,272.0,1025.0,267.0,4.1641,163600.0,<1H OCEAN +-117.12,33.14,12.0,2363.0,408.0,1211.0,396.0,3.8967,172600.0,<1H OCEAN +-117.13,33.14,12.0,2258.0,456.0,1147.0,433.0,4.0495,153900.0,<1H OCEAN +-117.19,33.14,12.0,3652.0,923.0,1677.0,728.0,2.3267,92000.0,<1H OCEAN +-117.18,33.15,7.0,6225.0,1683.0,5410.0,1580.0,2.32,117500.0,<1H OCEAN +-117.21,33.13,19.0,3068.0,596.0,912.0,554.0,3.775,168000.0,NEAR OCEAN +-117.2,33.12,18.0,4372.0,736.0,1473.0,675.0,5.1194,247800.0,NEAR OCEAN +-117.21,33.12,4.0,3261.0,689.0,926.0,561.0,4.3672,258900.0,NEAR OCEAN +-117.18,33.11,16.0,3470.0,601.0,1197.0,552.0,5.1814,279900.0,NEAR OCEAN +-117.25,33.12,8.0,8552.0,1437.0,3335.0,1323.0,5.311,255800.0,NEAR OCEAN +-117.24,33.11,10.0,3487.0,545.0,1410.0,557.0,6.0336,240300.0,NEAR OCEAN +-117.23,33.1,4.0,1862.0,291.0,685.0,248.0,7.745,237400.0,NEAR OCEAN +-117.25,33.1,14.0,3676.0,720.0,1176.0,614.0,3.9464,171900.0,NEAR OCEAN +-117.26,33.09,22.0,2398.0,407.0,349.0,169.0,7.0423,500001.0,NEAR OCEAN +-117.26,33.09,13.0,3730.0,761.0,1335.0,603.0,4.1667,227100.0,NEAR OCEAN +-117.23,33.09,7.0,5320.0,855.0,2015.0,768.0,6.3373,279600.0,NEAR OCEAN +-117.25,33.08,13.0,3651.0,465.0,1311.0,435.0,7.5402,340300.0,NEAR OCEAN +-117.25,33.08,14.0,7208.0,1012.0,3097.0,1014.0,6.617,285200.0,NEAR OCEAN +-117.26,33.08,12.0,5080.0,814.0,1958.0,716.0,5.3905,299600.0,NEAR OCEAN +-117.09,33.13,9.0,5685.0,1442.0,3773.0,1250.0,3.0426,129900.0,<1H OCEAN +-117.08,33.14,15.0,1497.0,250.0,827.0,239.0,4.3846,154200.0,<1H OCEAN +-117.08,33.14,11.0,1430.0,292.0,921.0,294.0,4.2357,160900.0,<1H OCEAN +-117.07,33.14,16.0,2546.0,429.0,1683.0,408.0,4.7426,160600.0,<1H OCEAN +-117.07,33.15,17.0,1893.0,297.0,936.0,287.0,5.1842,157700.0,<1H OCEAN +-117.06,33.15,24.0,2155.0,379.0,1158.0,360.0,4.7941,147500.0,<1H OCEAN +-117.11,33.19,15.0,3154.0,488.0,1656.0,429.0,5.0461,222400.0,<1H OCEAN +-117.03,33.18,17.0,5391.0,886.0,2732.0,830.0,5.1771,212800.0,<1H OCEAN +-117.06,33.17,4.0,5465.0,974.0,2844.0,950.0,4.4477,174800.0,<1H OCEAN +-117.1,33.17,12.0,2465.0,412.0,1226.0,428.0,5.4819,183800.0,<1H OCEAN +-117.08,33.16,11.0,6341.0,1030.0,2697.0,977.0,4.8554,206700.0,<1H OCEAN +-117.07,33.15,15.0,2994.0,522.0,1231.0,503.0,3.2024,180400.0,<1H OCEAN +-117.08,33.14,19.0,2629.0,494.0,1444.0,503.0,3.5462,156800.0,<1H OCEAN +-117.09,33.15,13.0,3958.0,865.0,1981.0,840.0,3.4764,137500.0,<1H OCEAN +-117.07,33.13,17.0,6817.0,1632.0,4526.0,1474.0,2.6152,135300.0,<1H OCEAN +-117.07,33.13,33.0,555.0,165.0,612.0,176.0,2.1786,137500.0,<1H OCEAN +-117.06,33.14,27.0,3819.0,674.0,2447.0,717.0,3.8185,137200.0,<1H OCEAN +-117.05,33.13,20.0,7746.0,2035.0,5370.0,1838.0,2.3762,98500.0,<1H OCEAN +-117.04,33.15,15.0,13814.0,2888.0,6583.0,2789.0,2.8247,150000.0,<1H OCEAN +-117.05,33.14,16.0,4552.0,1166.0,2737.0,1051.0,2.25,136300.0,<1H OCEAN +-117.06,33.13,12.0,8742.0,2114.0,4854.0,1957.0,2.8015,143500.0,<1H OCEAN +-117.08,33.13,17.0,8466.0,2628.0,7014.0,2267.0,2.1437,113700.0,<1H OCEAN +-117.08,33.12,43.0,107.0,44.0,107.0,48.0,0.7054,137500.0,<1H OCEAN +-117.11,33.15,14.0,8374.0,1407.0,2916.0,1295.0,4.7019,191100.0,<1H OCEAN +-117.1,33.15,5.0,3159.0,685.0,1398.0,581.0,3.1467,161100.0,<1H OCEAN +-117.12,33.15,7.0,2810.0,464.0,1564.0,457.0,4.4655,182800.0,<1H OCEAN +-117.14,33.18,11.0,5546.0,974.0,2300.0,970.0,3.7109,199800.0,<1H OCEAN +-117.1,33.14,7.0,10665.0,2576.0,4917.0,2424.0,2.3171,159500.0,<1H OCEAN +-117.11,33.14,10.0,3208.0,636.0,1395.0,582.0,3.4455,190500.0,<1H OCEAN +-117.14,33.12,7.0,6126.0,1032.0,2662.0,923.0,4.9005,264000.0,<1H OCEAN +-117.13,33.13,17.0,3164.0,652.0,1123.0,699.0,2.082,80000.0,<1H OCEAN +-117.11,33.12,46.0,52.0,13.0,59.0,13.0,3.875,200000.0,<1H OCEAN +-117.1,33.12,12.0,961.0,342.0,315.0,201.0,0.813,275000.0,<1H OCEAN +-117.11,33.11,17.0,2641.0,627.0,1167.0,647.0,2.2875,132400.0,<1H OCEAN +-117.14,33.07,12.0,9302.0,1603.0,4074.0,1504.0,4.3513,199600.0,<1H OCEAN +-117.12,33.07,45.0,1032.0,235.0,363.0,177.0,3.6389,186600.0,<1H OCEAN +-117.1,33.07,16.0,2402.0,336.0,1080.0,365.0,8.6803,347300.0,<1H OCEAN +-117.07,33.07,8.0,2756.0,343.0,1045.0,340.0,8.5957,444100.0,<1H OCEAN +-117.1,33.09,5.0,12045.0,2162.0,5640.0,1997.0,4.4375,353000.0,<1H OCEAN +-117.08,33.08,23.0,3400.0,501.0,1383.0,488.0,4.9844,249100.0,<1H OCEAN +-117.09,33.1,21.0,2876.0,539.0,1387.0,499.0,3.8292,177000.0,<1H OCEAN +-117.08,33.09,23.0,3792.0,624.0,1988.0,658.0,4.7566,178300.0,<1H OCEAN +-117.09,33.12,11.0,567.0,184.0,620.0,163.0,2.5284,122500.0,<1H OCEAN +-117.08,33.11,31.0,1356.0,324.0,1301.0,331.0,2.5331,115100.0,<1H OCEAN +-117.08,33.11,28.0,2094.0,585.0,1556.0,563.0,2.2,127700.0,<1H OCEAN +-117.09,33.11,32.0,1713.0,321.0,891.0,286.0,3.1429,171600.0,<1H OCEAN +-117.08,33.12,37.0,1060.0,268.0,823.0,229.0,1.8363,145500.0,<1H OCEAN +-117.07,33.11,31.0,2055.0,473.0,1326.0,427.0,3.0915,139900.0,<1H OCEAN +-117.08,33.11,31.0,1832.0,444.0,1669.0,463.0,2.2146,116700.0,<1H OCEAN +-117.08,33.12,33.0,674.0,208.0,565.0,188.0,1.875,114300.0,<1H OCEAN +-117.07,33.12,21.0,4578.0,927.0,2818.0,900.0,3.1458,187700.0,<1H OCEAN +-117.07,33.12,32.0,2474.0,499.0,1224.0,461.0,2.7216,146300.0,<1H OCEAN +-117.07,33.12,12.0,2453.0,599.0,1251.0,529.0,2.4122,127000.0,<1H OCEAN +-117.07,33.11,17.0,5565.0,1237.0,3004.0,1139.0,3.0054,142300.0,<1H OCEAN +-117.06,33.09,11.0,7483.0,1276.0,3516.0,1261.0,4.0484,262500.0,<1H OCEAN +-117.03,33.13,15.0,7000.0,1185.0,3555.0,1118.0,4.7022,172800.0,<1H OCEAN +-116.97,33.13,10.0,5149.0,851.0,2177.0,783.0,6.7957,287500.0,<1H OCEAN +-117.05,33.13,17.0,2385.0,372.0,1118.0,369.0,4.2813,169900.0,<1H OCEAN +-117.05,33.11,18.0,4393.0,642.0,2095.0,677.0,5.4786,223500.0,<1H OCEAN +-117.05,33.13,22.0,2427.0,390.0,1099.0,362.0,5.2323,167500.0,<1H OCEAN +-117.05,33.1,13.0,5516.0,746.0,2119.0,662.0,6.1868,320200.0,<1H OCEAN +-117.03,33.12,25.0,3142.0,446.0,1286.0,419.0,5.4663,248300.0,<1H OCEAN +-117.04,33.09,16.0,4677.0,581.0,1902.0,566.0,6.1834,335600.0,<1H OCEAN +-116.93,33.06,16.0,3490.0,545.0,1628.0,535.0,4.8836,239900.0,<1H OCEAN +-116.89,32.99,14.0,2816.0,501.0,1448.0,452.0,5.0278,210900.0,<1H OCEAN +-116.95,32.96,18.0,2087.0,353.0,992.0,329.0,4.5,222600.0,<1H OCEAN +-116.84,33.08,15.0,2755.0,519.0,1474.0,460.0,4.0408,225900.0,<1H OCEAN +-116.77,33.08,13.0,1406.0,260.0,737.0,279.0,5.5842,239100.0,<1H OCEAN +-116.78,33.0,7.0,12480.0,1946.0,5102.0,1697.0,5.5102,221000.0,<1H OCEAN +-116.84,33.01,5.0,5673.0,855.0,2592.0,797.0,5.4155,199200.0,<1H OCEAN +-116.88,33.05,11.0,7217.0,1583.0,4197.0,1502.0,2.8827,166700.0,<1H OCEAN +-116.88,33.02,16.0,3204.0,541.0,1818.0,529.0,5.2596,171500.0,<1H OCEAN +-116.9,33.03,11.0,3213.0,634.0,1975.0,579.0,3.475,167200.0,<1H OCEAN +-116.86,33.05,17.0,9044.0,1689.0,5030.0,1596.0,3.6348,164500.0,<1H OCEAN +-116.86,33.02,17.0,401.0,68.0,251.0,69.0,4.6518,170200.0,<1H OCEAN +-116.84,33.02,11.0,1227.0,202.0,645.0,198.0,5.6674,209800.0,<1H OCEAN +-116.74,33.33,17.0,4190.0,946.0,1802.0,673.0,2.4744,158200.0,INLAND +-116.68,33.16,26.0,1820.0,374.0,1001.0,324.0,2.1797,156300.0,INLAND +-116.6,33.06,23.0,1731.0,365.0,612.0,258.0,2.7813,172900.0,INLAND +-116.58,33.09,36.0,992.0,224.0,334.0,126.0,3.0089,134400.0,INLAND +-116.56,33.05,15.0,1985.0,361.0,536.0,209.0,4.125,148200.0,INLAND +-116.61,33.04,11.0,2522.0,538.0,616.0,269.0,3.875,198100.0,INLAND +-116.66,33.09,24.0,1378.0,272.0,532.0,188.0,1.5909,221900.0,INLAND +-116.67,32.97,16.0,349.0,74.0,120.0,43.0,5.359,193800.0,<1H OCEAN +-116.52,32.9,18.0,4454.0,852.0,1754.0,656.0,4.57,189900.0,INLAND +-116.34,33.36,24.0,2746.0,514.0,731.0,295.0,3.3214,176400.0,INLAND +-116.32,33.28,19.0,1791.0,367.0,327.0,185.0,3.3625,100000.0,INLAND +-116.26,33.07,17.0,934.0,284.0,452.0,184.0,1.9875,83700.0,INLAND +-116.28,32.84,18.0,382.0,128.0,194.0,69.0,2.5179,58800.0,INLAND +-116.37,33.19,12.0,4890.0,1152.0,1289.0,570.0,2.5795,98700.0,INLAND +-116.58,32.69,19.0,4085.0,876.0,2133.0,718.0,2.919,116500.0,INLAND +-116.45,32.65,22.0,2680.0,643.0,1644.0,516.0,2.1949,127100.0,INLAND +-116.35,32.74,16.0,2595.0,606.0,1046.0,367.0,1.7137,110700.0,INLAND +-116.2,32.64,28.0,1608.0,409.0,567.0,254.0,1.4648,61800.0,INLAND +-116.75,32.85,17.0,4863.0,845.0,2266.0,769.0,4.2321,217400.0,<1H OCEAN +-116.79,32.84,12.0,4281.0,786.0,1891.0,721.0,3.5769,231800.0,<1H OCEAN +-116.76,32.84,16.0,3311.0,702.0,1627.0,624.0,3.1196,187200.0,<1H OCEAN +-116.77,32.82,16.0,3688.0,817.0,1969.0,767.0,2.875,222900.0,<1H OCEAN +-116.75,32.82,17.0,3348.0,481.0,1222.0,443.0,6.6361,308600.0,<1H OCEAN +-116.8,32.8,11.0,3874.0,565.0,1672.0,546.0,6.1481,274600.0,<1H OCEAN +-116.62,32.86,18.0,4115.0,847.0,2032.0,745.0,4.0159,169100.0,<1H OCEAN +-116.66,32.79,13.0,843.0,,918.0,152.0,6.2152,240600.0,<1H OCEAN +-116.87,32.75,15.0,2053.0,321.0,993.0,309.0,5.5164,248900.0,<1H OCEAN +-116.91,32.73,8.0,4630.0,624.0,2048.0,575.0,6.4745,300300.0,<1H OCEAN +-116.87,32.72,13.0,3268.0,491.0,1431.0,503.0,5.7652,259900.0,<1H OCEAN +-116.89,32.67,9.0,2652.0,393.0,1355.0,362.0,6.2578,293100.0,<1H OCEAN +-116.76,32.74,14.0,4085.0,751.0,2129.0,688.0,4.7367,214500.0,<1H OCEAN +-116.79,32.61,19.0,2652.0,520.0,1421.0,491.0,3.5227,206100.0,<1H OCEAN +-122.41,37.81,25.0,1178.0,545.0,592.0,441.0,3.6728,500001.0,NEAR BAY +-122.41,37.81,31.0,3991.0,1311.0,2305.0,1201.0,1.8981,500001.0,NEAR BAY +-122.42,37.81,52.0,1314.0,317.0,473.0,250.0,4.3472,500001.0,NEAR BAY +-122.42,37.8,52.0,2852.0,581.0,838.0,510.0,8.0755,500001.0,NEAR BAY +-122.42,37.8,52.0,4985.0,1355.0,1848.0,1255.0,4.9211,500001.0,NEAR BAY +-122.42,37.8,50.0,2494.0,731.0,958.0,712.0,3.2356,500001.0,NEAR BAY +-122.42,37.8,52.0,741.0,170.0,277.0,165.0,4.4712,500001.0,NEAR BAY +-122.41,37.8,52.0,2583.0,672.0,1335.0,613.0,3.1477,500001.0,NEAR BAY +-122.41,37.8,52.0,2618.0,611.0,1328.0,559.0,4.1607,350000.0,NEAR BAY +-122.41,37.8,52.0,3278.0,775.0,1279.0,709.0,5.4378,500001.0,NEAR BAY +-122.41,37.8,52.0,812.0,252.0,629.0,247.0,2.5875,500001.0,NEAR BAY +-122.41,37.8,52.0,4088.0,946.0,1906.0,863.0,3.6065,433300.0,NEAR BAY +-122.41,37.8,52.0,1288.0,309.0,437.0,272.0,6.3245,500001.0,NEAR BAY +-122.4,37.8,52.0,1860.0,575.0,679.0,448.0,4.775,500001.0,NEAR BAY +-122.4,37.8,52.0,2094.0,568.0,920.0,503.0,4.2015,412500.0,NEAR BAY +-122.4,37.81,12.0,1349.0,349.0,536.0,334.0,7.7852,250000.0,NEAR BAY +-122.41,37.8,52.0,2450.0,741.0,1415.0,664.0,2.8229,375000.0,NEAR BAY +-122.4,37.8,52.0,1642.0,570.0,1432.0,513.0,1.9063,300000.0,NEAR BAY +-122.41,37.8,52.0,1394.0,395.0,1700.0,400.0,2.75,168800.0,NEAR BAY +-122.41,37.8,52.0,1724.0,416.0,1016.0,395.0,3.3839,400000.0,NEAR BAY +-122.41,37.8,52.0,1866.0,748.0,2957.0,710.0,1.8295,243800.0,NEAR BAY +-122.41,37.8,30.0,1821.0,738.0,1648.0,684.0,0.8836,450000.0,NEAR BAY +-122.41,37.8,52.0,3697.0,837.0,1446.0,711.0,5.866,500001.0,NEAR BAY +-122.41,37.8,52.0,2892.0,751.0,1785.0,733.0,3.5746,350000.0,NEAR BAY +-122.41,37.79,52.0,3598.0,1011.0,2062.0,966.0,2.9871,380000.0,NEAR BAY +-122.42,37.8,52.0,2797.0,685.0,1156.0,651.0,4.3472,500001.0,NEAR BAY +-122.42,37.8,52.0,3823.0,1040.0,1830.0,977.0,4.2458,450000.0,NEAR BAY +-122.42,37.8,52.0,3321.0,1115.0,1576.0,1034.0,2.0987,458300.0,NEAR BAY +-122.42,37.8,52.0,1777.0,486.0,932.0,427.0,3.3643,420000.0,NEAR BAY +-122.42,37.8,52.0,3067.0,870.0,2122.0,850.0,2.5603,287500.0,NEAR BAY +-122.42,37.79,52.0,3457.0,1021.0,2286.0,994.0,2.565,225000.0,NEAR BAY +-122.42,37.79,52.0,3364.0,1100.0,2112.0,1045.0,2.1343,400000.0,NEAR BAY +-122.42,37.79,52.0,3511.0,1232.0,2452.0,1131.0,2.5013,275000.0,NEAR BAY +-122.41,37.79,52.0,2909.0,851.0,1711.0,830.0,3.0296,500001.0,NEAR BAY +-122.41,37.79,52.0,3302.0,869.0,1178.0,727.0,3.3681,500001.0,NEAR BAY +-122.41,37.79,52.0,2161.0,544.0,904.0,431.0,3.5066,350000.0,NEAR BAY +-122.41,37.8,52.0,1999.0,642.0,1846.0,620.0,1.9145,225000.0,NEAR BAY +-122.41,37.79,52.0,2302.0,938.0,1515.0,861.0,1.3668,55000.0,NEAR BAY +-122.41,37.8,52.0,3260.0,1535.0,3260.0,1457.0,0.9,500001.0,NEAR BAY +-122.39,37.8,25.0,4561.0,1474.0,1525.0,1169.0,4.5581,500001.0,NEAR BAY +-122.4,37.79,52.0,1185.0,660.0,1007.0,623.0,1.4552,450000.0,NEAR BAY +-122.41,37.79,52.0,1436.0,738.0,1688.0,662.0,1.5156,237500.0,NEAR BAY +-122.41,37.79,52.0,3610.0,1286.0,1504.0,1047.0,3.2059,500001.0,NEAR BAY +-122.41,37.79,52.0,6016.0,2509.0,3436.0,2119.0,2.5166,275000.0,NEAR BAY +-122.42,37.79,52.0,2737.0,1241.0,1761.0,1029.0,1.8068,225000.0,NEAR BAY +-122.41,37.79,52.0,5783.0,2747.0,4518.0,2538.0,1.724,225000.0,NEAR BAY +-122.42,37.78,26.0,812.0,507.0,628.0,445.0,2.3304,500001.0,NEAR BAY +-122.42,37.78,27.0,1728.0,884.0,1211.0,752.0,0.8543,500001.0,NEAR BAY +-122.43,37.81,39.0,3275.0,837.0,1137.0,725.0,3.7679,500001.0,NEAR BAY +-122.44,37.8,52.0,3830.0,,1310.0,963.0,3.4801,500001.0,NEAR BAY +-122.44,37.8,52.0,1724.0,412.0,540.0,319.0,4.2857,500001.0,NEAR BAY +-122.43,37.81,52.0,4309.0,942.0,1297.0,798.0,4.6781,500001.0,NEAR BAY +-122.45,37.81,52.0,1375.0,322.0,287.0,184.0,3.9028,500001.0,NEAR BAY +-122.44,37.8,52.0,2869.0,594.0,500.0,335.0,5.0376,500001.0,NEAR BAY +-122.44,37.8,52.0,3257.0,735.0,1045.0,620.0,4.5523,500001.0,NEAR BAY +-122.44,37.8,52.0,1580.0,470.0,714.0,448.0,3.2447,500001.0,NEAR BAY +-122.44,37.8,52.0,1006.0,291.0,445.0,257.0,2.7717,500000.0,NEAR BAY +-122.44,37.8,52.0,3149.0,719.0,1145.0,658.0,4.625,500001.0,NEAR BAY +-122.44,37.8,52.0,3161.0,472.0,842.0,410.0,7.9761,500001.0,NEAR BAY +-122.44,37.8,52.0,2865.0,593.0,1029.0,577.0,5.2539,500001.0,NEAR BAY +-122.44,37.8,52.0,1603.0,487.0,727.0,464.0,3.9856,500001.0,NEAR BAY +-122.43,37.8,52.0,3172.0,848.0,1259.0,806.0,4.1047,466700.0,NEAR BAY +-122.43,37.8,52.0,2788.0,813.0,1302.0,764.0,4.199,400000.0,NEAR BAY +-122.43,37.8,52.0,2994.0,821.0,1240.0,779.0,3.3715,500000.0,NEAR BAY +-122.43,37.8,52.0,1976.0,726.0,1045.0,669.0,3.6893,475000.0,NEAR BAY +-122.43,37.8,52.0,1006.0,251.0,349.0,233.0,3.2235,500000.0,NEAR BAY +-122.43,37.8,52.0,1380.0,322.0,553.0,288.0,4.0417,500001.0,NEAR BAY +-122.42,37.8,52.0,2657.0,772.0,1014.0,685.0,4.038,500001.0,NEAR BAY +-122.43,37.8,52.0,2696.0,572.0,925.0,552.0,5.0365,500000.0,NEAR BAY +-122.43,37.8,52.0,2520.0,649.0,959.0,607.0,5.7934,500001.0,NEAR BAY +-122.43,37.8,52.0,2802.0,622.0,954.0,572.0,4.5399,500001.0,NEAR BAY +-122.42,37.8,52.0,4079.0,1112.0,1466.0,1024.0,4.5913,500001.0,NEAR BAY +-122.42,37.79,48.0,4506.0,1342.0,1980.0,1239.0,4.0156,500001.0,NEAR BAY +-122.43,37.79,52.0,3565.0,892.0,1377.0,852.0,3.8068,500001.0,NEAR BAY +-122.43,37.79,52.0,3486.0,847.0,1248.0,813.0,7.2623,500001.0,NEAR BAY +-122.43,37.79,52.0,6186.0,1566.0,2065.0,1374.0,5.8543,500001.0,NEAR BAY +-122.44,37.79,52.0,1979.0,359.0,648.0,370.0,5.3124,500001.0,NEAR BAY +-122.44,37.79,52.0,1335.0,151.0,402.0,157.0,10.8783,500001.0,NEAR BAY +-122.44,37.79,52.0,2045.0,353.0,722.0,327.0,8.0755,500001.0,NEAR BAY +-122.44,37.79,52.0,1447.0,186.0,483.0,181.0,15.0001,500001.0,NEAR BAY +-122.45,37.79,52.0,2196.0,280.0,668.0,291.0,10.0914,500001.0,NEAR BAY +-122.45,37.79,52.0,3069.0,579.0,1107.0,536.0,5.5634,500001.0,NEAR BAY +-122.45,37.79,52.0,1734.0,482.0,731.0,429.0,1.4804,425000.0,NEAR BAY +-122.45,37.79,52.0,1457.0,215.0,495.0,208.0,10.7097,500001.0,NEAR BAY +-122.46,37.79,52.0,899.0,96.0,304.0,110.0,14.2959,500001.0,NEAR BAY +-122.46,37.79,52.0,2106.0,373.0,743.0,348.0,5.2909,500001.0,NEAR BAY +-122.44,37.79,52.0,1817.0,535.0,800.0,487.0,3.975,500001.0,NEAR BAY +-122.44,37.79,52.0,3640.0,840.0,1525.0,796.0,4.4375,500001.0,NEAR BAY +-122.44,37.79,52.0,3785.0,808.0,1371.0,799.0,6.4209,500001.0,NEAR BAY +-122.43,37.79,52.0,3522.0,938.0,1319.0,887.0,4.3986,500001.0,NEAR BAY +-122.43,37.79,52.0,3219.0,969.0,1152.0,830.0,4.2042,500001.0,NEAR BAY +-122.42,37.79,52.0,2511.0,895.0,1202.0,804.0,2.6607,87500.0,NEAR BAY +-122.42,37.79,6.0,670.0,301.0,655.0,284.0,3.4423,117500.0,NEAR BAY +-122.43,37.79,50.0,3312.0,1095.0,1475.0,997.0,2.7165,500001.0,NEAR BAY +-122.43,37.79,52.0,3020.0,842.0,1294.0,769.0,3.4375,500001.0,NEAR BAY +-122.43,37.79,25.0,1637.0,394.0,649.0,379.0,5.0049,460000.0,NEAR BAY +-122.44,37.79,52.0,1903.0,461.0,831.0,433.0,4.4464,500001.0,NEAR BAY +-122.44,37.79,52.0,2083.0,491.0,1224.0,483.0,4.0882,468800.0,NEAR BAY +-122.44,37.79,52.0,1726.0,384.0,614.0,356.0,3.6812,500000.0,NEAR BAY +-122.44,37.78,52.0,2695.0,657.0,1243.0,573.0,2.8569,372200.0,NEAR BAY +-122.45,37.78,45.0,2747.0,699.0,1320.0,693.0,3.1576,333300.0,NEAR BAY +-122.45,37.79,46.0,2009.0,464.0,761.0,453.0,3.7188,500001.0,NEAR BAY +-122.45,37.78,52.0,3975.0,716.0,1515.0,691.0,5.0156,500001.0,NEAR BAY +-122.43,37.79,24.0,2459.0,1001.0,1362.0,957.0,2.6782,450000.0,NEAR BAY +-122.43,37.78,10.0,2380.0,843.0,1245.0,789.0,1.3062,220000.0,NEAR BAY +-122.44,37.78,39.0,1181.0,310.0,901.0,281.0,1.4866,237500.0,NEAR BAY +-122.45,37.78,52.0,1345.0,291.0,560.0,294.0,3.7159,494400.0,NEAR BAY +-122.45,37.78,52.0,2686.0,606.0,1392.0,578.0,4.0,355300.0,NEAR BAY +-122.46,37.78,47.0,1682.0,379.0,837.0,375.0,5.2806,400000.0,NEAR BAY +-122.44,37.78,37.0,1235.0,314.0,481.0,297.0,3.6875,492300.0,NEAR BAY +-122.44,37.78,52.0,3510.0,791.0,1703.0,657.0,2.8654,280000.0,NEAR BAY +-122.44,37.78,44.0,1545.0,334.0,561.0,326.0,3.875,412500.0,NEAR BAY +-122.45,37.78,43.0,1452.0,397.0,897.0,393.0,4.1319,322700.0,NEAR BAY +-122.45,37.78,48.0,1013.0,194.0,464.0,205.0,3.2011,428300.0,NEAR BAY +-122.45,37.78,52.0,2033.0,438.0,2198.0,418.0,3.6667,418400.0,NEAR BAY +-122.44,37.78,16.0,883.0,236.0,601.0,219.0,2.151,146900.0,NEAR BAY +-122.43,37.78,49.0,2246.0,587.0,1277.0,546.0,2.9792,350000.0,NEAR BAY +-122.44,37.78,52.0,3017.0,851.0,1588.0,800.0,3.3882,471400.0,NEAR BAY +-122.44,37.78,52.0,2747.0,736.0,1309.0,653.0,2.943,341700.0,NEAR BAY +-122.44,37.78,52.0,1118.0,279.0,514.0,284.0,2.4196,346200.0,NEAR BAY +-122.44,37.78,31.0,1364.0,386.0,707.0,379.0,3.1607,293800.0,NEAR BAY +-122.43,37.78,26.0,3587.0,1034.0,1821.0,936.0,2.6392,287500.0,NEAR BAY +-122.43,37.78,2.0,1205.0,468.0,577.0,363.0,3.6437,275000.0,NEAR BAY +-122.42,37.78,19.0,4065.0,1645.0,2079.0,1470.0,3.1462,187500.0,NEAR BAY +-122.42,37.78,17.0,1257.0,339.0,1093.0,384.0,1.8438,72500.0,NEAR BAY +-122.43,37.78,17.0,2728.0,908.0,1670.0,893.0,1.077,115000.0,NEAR BAY +-122.43,37.78,24.0,2037.0,696.0,1371.0,585.0,0.9355,112500.0,NEAR BAY +-122.42,37.78,52.0,989.0,425.0,634.0,341.0,2.4414,275000.0,NEAR BAY +-122.42,37.78,52.0,1254.0,469.0,895.0,456.0,2.1516,187500.0,NEAR BAY +-122.43,37.78,29.0,1310.0,364.0,1009.0,379.0,1.3844,177500.0,NEAR BAY +-122.43,37.78,52.0,1952.0,628.0,1284.0,576.0,2.105,316700.0,NEAR BAY +-122.43,37.78,52.0,4014.0,1069.0,2070.0,927.0,2.8202,442900.0,NEAR BAY +-122.43,37.77,52.0,3944.0,1072.0,1913.0,973.0,2.9567,425000.0,NEAR BAY +-122.44,37.78,52.0,2911.0,753.0,1696.0,676.0,2.5721,475000.0,NEAR BAY +-122.44,37.77,52.0,2705.0,647.0,1355.0,628.0,2.0161,364300.0,NEAR BAY +-122.45,37.77,52.0,2339.0,548.0,1090.0,507.0,3.3679,350000.0,NEAR BAY +-122.45,37.77,52.0,3188.0,708.0,1526.0,664.0,3.3068,500001.0,NEAR BAY +-122.45,37.77,52.0,1722.0,465.0,885.0,437.0,3.0906,500001.0,NEAR BAY +-122.44,37.77,52.0,3475.0,807.0,1518.0,777.0,3.6186,500001.0,NEAR BAY +-122.45,37.77,52.0,2296.0,509.0,1039.0,472.0,4.1417,500000.0,NEAR BAY +-122.45,37.77,52.0,2191.0,627.0,1100.0,585.0,3.0409,500000.0,NEAR BAY +-122.45,37.77,52.0,2645.0,626.0,1275.0,553.0,3.35,492900.0,NEAR BAY +-122.43,37.77,52.0,3563.0,832.0,1712.0,787.0,3.3702,335700.0,NEAR BAY +-122.43,37.77,52.0,1760.0,366.0,742.0,318.0,4.445,400000.0,NEAR BAY +-122.44,37.77,52.0,2002.0,520.0,939.0,501.0,3.2239,488900.0,NEAR BAY +-122.44,37.77,52.0,2994.0,736.0,1428.0,700.0,3.0766,438900.0,NEAR BAY +-122.42,37.77,52.0,1086.0,349.0,589.0,361.0,2.5186,250000.0,NEAR BAY +-122.42,37.77,52.0,1925.0,568.0,867.0,515.0,2.879,450000.0,NEAR BAY +-122.43,37.77,52.0,1567.0,482.0,654.0,425.0,2.6914,366700.0,NEAR BAY +-122.43,37.77,52.0,2514.0,729.0,1428.0,597.0,2.3977,412500.0,NEAR BAY +-122.43,37.77,52.0,2416.0,620.0,1188.0,591.0,2.3887,337500.0,NEAR BAY +-122.43,37.77,52.0,1862.0,472.0,872.0,471.0,3.2981,222700.0,NEAR BAY +-122.43,37.77,52.0,4397.0,1116.0,1939.0,1053.0,2.7587,354500.0,NEAR BAY +-122.43,37.77,52.0,2685.0,629.0,1170.0,614.0,3.6894,418800.0,NEAR BAY +-122.44,37.77,52.0,2537.0,559.0,849.0,530.0,5.1788,476900.0,NEAR BAY +-122.44,37.77,52.0,5604.0,1268.0,2023.0,1196.0,4.4085,400000.0,NEAR BAY +-122.44,37.76,38.0,2202.0,452.0,833.0,435.0,6.8939,455900.0,NEAR BAY +-122.44,37.77,52.0,3225.0,667.0,1494.0,619.0,4.4875,500001.0,NEAR BAY +-122.44,37.77,52.0,3505.0,745.0,1374.0,714.0,4.3667,500001.0,NEAR BAY +-122.45,37.76,50.0,2518.0,507.0,979.0,516.0,4.6912,500001.0,NEAR BAY +-122.45,37.76,52.0,1457.0,292.0,621.0,315.0,4.6477,450000.0,NEAR BAY +-122.45,37.77,52.0,3095.0,682.0,1269.0,639.0,3.575,500001.0,NEAR BAY +-122.45,37.77,52.0,3939.0,852.0,1737.0,797.0,4.5052,500001.0,NEAR BAY +-122.41,37.78,52.0,1928.0,836.0,2124.0,739.0,1.1185,55000.0,NEAR BAY +-122.41,37.78,52.0,1534.0,763.0,1520.0,614.0,1.4554,375000.0,NEAR BAY +-122.41,37.78,52.0,254.0,72.0,153.0,29.0,3.8625,350000.0,NEAR BAY +-122.41,37.77,52.0,361.0,76.0,168.0,55.0,3.2292,275000.0,NEAR BAY +-122.41,37.77,52.0,1963.0,565.0,1628.0,524.0,2.6083,193800.0,NEAR BAY +-122.4,37.78,32.0,352.0,132.0,313.0,105.0,2.5742,350000.0,NEAR BAY +-122.41,37.77,52.0,849.0,276.0,582.0,222.0,3.4671,250000.0,NEAR BAY +-122.41,37.78,52.0,1014.0,422.0,1055.0,382.0,1.8519,32500.0,NEAR BAY +-122.39,37.78,3.0,3464.0,1179.0,1441.0,919.0,4.7105,275000.0,NEAR BAY +-122.39,37.78,5.0,1405.0,515.0,725.0,392.0,3.6037,187500.0,NEAR BAY +-122.39,37.79,52.0,94.0,24.0,113.0,27.0,4.6563,350000.0,NEAR BAY +-122.37,37.81,26.0,5416.0,1045.0,4531.0,962.0,2.7909,250000.0,NEAR BAY +-122.4,37.78,52.0,464.0,202.0,286.0,148.0,1.6125,112500.0,NEAR BAY +-122.4,37.77,52.0,144.0,63.0,1061.0,68.0,4.3958,225000.0,NEAR BAY +-122.42,37.77,52.0,759.0,323.0,421.0,255.0,2.0548,162500.0,NEAR BAY +-122.42,37.77,52.0,1176.0,493.0,1136.0,436.0,1.375,312500.0,NEAR BAY +-122.42,37.76,37.0,1291.0,588.0,1846.0,557.0,1.3365,225000.0,NEAR BAY +-122.42,37.77,52.0,2185.0,656.0,1266.0,626.0,2.7794,350000.0,NEAR BAY +-122.42,37.77,52.0,4226.0,1315.0,2619.0,1242.0,2.5755,325000.0,NEAR BAY +-122.42,37.76,52.0,3587.0,1030.0,2259.0,979.0,2.5403,250000.0,NEAR BAY +-122.43,37.77,52.0,2714.0,779.0,1438.0,733.0,3.6031,275000.0,NEAR BAY +-122.43,37.76,52.0,1582.0,353.0,868.0,329.0,3.8261,250000.0,NEAR BAY +-122.43,37.76,52.0,2250.0,566.0,1051.0,562.0,2.8458,350000.0,NEAR BAY +-122.44,37.76,52.0,2959.0,683.0,1145.0,666.0,4.2222,361600.0,NEAR BAY +-122.44,37.76,30.0,5089.0,1210.0,1935.0,1139.0,4.6053,386100.0,NEAR BAY +-122.44,37.75,28.0,4930.0,1381.0,2232.0,1321.0,4.3232,316200.0,NEAR BAY +-122.44,37.76,35.0,1581.0,422.0,580.0,388.0,4.05,423100.0,NEAR BAY +-122.44,37.76,50.0,2589.0,569.0,945.0,544.0,5.2519,376600.0,NEAR BAY +-122.45,37.76,51.0,2564.0,457.0,810.0,442.0,5.6235,500001.0,NEAR BAY +-122.44,37.76,52.0,1968.0,472.0,784.0,430.0,3.3702,370000.0,NEAR BAY +-122.44,37.76,52.0,2110.0,454.0,816.0,438.0,3.9079,370000.0,NEAR BAY +-122.44,37.76,52.0,2509.0,496.0,855.0,478.0,5.0731,405400.0,NEAR BAY +-122.43,37.76,52.0,3771.0,1017.0,1575.0,921.0,3.5655,427300.0,NEAR BAY +-122.43,37.76,52.0,2242.0,459.0,751.0,464.0,4.75,500001.0,NEAR BAY +-122.43,37.76,52.0,2356.0,501.0,909.0,481.0,4.2569,455400.0,NEAR BAY +-122.43,37.76,52.0,3708.0,849.0,1531.0,822.0,3.3565,386400.0,NEAR BAY +-122.42,37.76,52.0,4407.0,1192.0,2280.0,1076.0,3.3937,270000.0,NEAR BAY +-122.42,37.76,52.0,4001.0,1084.0,2129.0,1037.0,3.5052,391200.0,NEAR BAY +-122.42,37.76,52.0,2088.0,487.0,1082.0,488.0,2.6803,490000.0,NEAR BAY +-122.42,37.76,52.0,1190.0,400.0,1270.0,332.0,2.0329,225000.0,NEAR BAY +-122.42,37.76,52.0,2038.0,629.0,2007.0,596.0,2.5701,266700.0,NEAR BAY +-122.42,37.76,52.0,1494.0,610.0,1630.0,590.0,1.65,265000.0,NEAR BAY +-122.42,37.76,46.0,2150.0,817.0,2075.0,807.0,1.3824,212500.0,NEAR BAY +-122.42,37.75,52.0,1855.0,611.0,1715.0,614.0,2.1289,250000.0,NEAR BAY +-122.42,37.75,52.0,1207.0,302.0,1008.0,269.0,3.3816,262500.0,NEAR BAY +-122.42,37.75,52.0,801.0,272.0,639.0,259.0,2.1971,275000.0,NEAR BAY +-122.42,37.75,52.0,1609.0,510.0,1155.0,439.0,2.2328,250000.0,NEAR BAY +-122.42,37.75,52.0,1974.0,525.0,935.0,465.0,2.7173,300000.0,NEAR BAY +-122.42,37.75,52.0,2112.0,528.0,1227.0,513.0,3.5536,400000.0,NEAR BAY +-122.42,37.75,52.0,2708.0,762.0,1460.0,741.0,2.9052,400000.0,NEAR BAY +-122.42,37.75,52.0,1564.0,396.0,1162.0,374.0,3.0,275000.0,NEAR BAY +-122.43,37.75,52.0,2700.0,595.0,1181.0,575.0,3.575,396800.0,NEAR BAY +-122.43,37.75,52.0,1970.0,495.0,871.0,474.0,4.0625,355600.0,NEAR BAY +-122.43,37.75,52.0,2459.0,507.0,1012.0,475.0,4.0568,387900.0,NEAR BAY +-122.43,37.76,52.0,2332.0,434.0,861.0,406.0,4.4318,437500.0,NEAR BAY +-122.43,37.75,52.0,2285.0,509.0,839.0,456.0,4.7946,355600.0,NEAR BAY +-122.44,37.75,52.0,3114.0,637.0,1144.0,591.0,4.0,375000.0,NEAR BAY +-122.44,37.75,52.0,2082.0,425.0,801.0,411.0,4.2708,368900.0,NEAR BAY +-122.43,37.75,52.0,2721.0,581.0,1043.0,519.0,3.7545,383700.0,NEAR BAY +-122.44,37.75,46.0,1519.0,291.0,573.0,289.0,4.2667,338800.0,NEAR BAY +-122.44,37.75,52.0,1573.0,334.0,725.0,338.0,5.0505,380400.0,NEAR BAY +-122.43,37.75,52.0,1615.0,393.0,633.0,378.0,3.5114,347500.0,NEAR BAY +-122.43,37.75,52.0,3521.0,767.0,1415.0,687.0,4.875,362200.0,NEAR BAY +-122.43,37.75,52.0,2960.0,623.0,1191.0,589.0,3.95,347700.0,NEAR BAY +-122.42,37.75,52.0,2164.0,533.0,1122.0,469.0,3.2632,306000.0,NEAR BAY +-122.42,37.74,52.0,2713.0,624.0,1370.0,594.0,4.6547,325700.0,NEAR BAY +-122.42,37.74,52.0,1786.0,427.0,856.0,394.0,3.0833,328100.0,NEAR BAY +-122.43,37.74,52.0,2229.0,498.0,1079.0,472.0,5.0196,324300.0,NEAR BAY +-122.43,37.75,52.0,2155.0,468.0,962.0,490.0,3.775,325900.0,NEAR BAY +-122.43,37.75,40.0,4850.0,977.0,1824.0,952.0,5.0519,356100.0,NEAR BAY +-122.44,37.75,21.0,5457.0,1247.0,2304.0,1180.0,4.5469,409700.0,NEAR BAY +-122.44,37.74,23.0,6291.0,1269.0,2818.0,1198.0,4.2672,391900.0,NEAR BAY +-122.44,37.74,52.0,2074.0,366.0,909.0,394.0,4.8382,294900.0,NEAR BAY +-122.44,37.74,23.0,184.0,44.0,118.0,40.0,4.5375,350000.0,NEAR BAY +-122.43,37.74,52.0,3328.0,653.0,1260.0,614.0,4.7437,331000.0,NEAR BAY +-122.43,37.74,52.0,2637.0,539.0,1159.0,497.0,3.8846,333100.0,NEAR BAY +-122.43,37.74,52.0,1514.0,314.0,724.0,301.0,5.3292,300900.0,NEAR BAY +-122.43,37.73,52.0,1142.0,224.0,494.0,206.0,5.0602,298900.0,NEAR BAY +-122.43,37.73,52.0,1029.0,205.0,461.0,212.0,5.0782,310800.0,NEAR BAY +-122.38,37.76,52.0,248.0,68.0,124.0,51.0,1.4886,450000.0,NEAR BAY +-122.39,37.76,52.0,624.0,170.0,410.0,148.0,4.0042,208300.0,NEAR BAY +-122.39,37.76,52.0,157.0,28.0,88.0,27.0,3.675,162500.0,NEAR BAY +-122.39,37.76,52.0,1877.0,427.0,712.0,398.0,3.9722,290900.0,NEAR BAY +-122.39,37.76,52.0,2316.0,468.0,1047.0,476.0,4.5057,321600.0,NEAR BAY +-122.39,37.76,52.0,3390.0,691.0,1645.0,596.0,3.7051,253700.0,NEAR BAY +-122.4,37.75,44.0,6848.0,1584.0,3269.0,1383.0,2.8679,243300.0,NEAR BAY +-122.4,37.76,52.0,4265.0,912.0,1555.0,836.0,4.119,298300.0,NEAR BAY +-122.4,37.76,52.0,1495.0,311.0,506.0,275.0,4.4375,320000.0,NEAR BAY +-122.4,37.76,52.0,1185.0,246.0,480.0,253.0,4.4074,277300.0,NEAR BAY +-122.41,37.76,52.0,1427.0,281.0,620.0,236.0,1.9944,262500.0,NEAR BAY +-122.4,37.76,52.0,1529.0,385.0,1347.0,348.0,2.9312,239100.0,NEAR BAY +-122.41,37.76,52.0,3452.0,784.0,2987.0,753.0,2.8135,260300.0,NEAR BAY +-122.41,37.76,52.0,2064.0,496.0,1726.0,466.0,3.4028,233300.0,NEAR BAY +-122.41,37.76,52.0,492.0,139.0,316.0,168.0,3.0865,225000.0,NEAR BAY +-122.41,37.76,52.0,351.0,81.0,308.0,75.0,2.6667,325000.0,NEAR BAY +-122.41,37.76,52.0,2479.0,515.0,1816.0,496.0,3.0774,300000.0,NEAR BAY +-122.41,37.76,52.0,2605.0,678.0,2071.0,611.0,3.2964,265000.0,NEAR BAY +-122.4,37.75,52.0,1182.0,307.0,1029.0,306.0,2.0577,214600.0,NEAR BAY +-122.41,37.75,52.0,1057.0,276.0,837.0,292.0,2.4531,229000.0,NEAR BAY +-122.41,37.75,52.0,1919.0,404.0,1483.0,421.0,3.4063,253900.0,NEAR BAY +-122.41,37.75,52.0,1892.0,415.0,1442.0,371.0,4.2891,230000.0,NEAR BAY +-122.41,37.75,52.0,1678.0,386.0,1220.0,357.0,2.5809,255300.0,NEAR BAY +-122.41,37.75,52.0,2164.0,606.0,2034.0,513.0,2.0325,178100.0,NEAR BAY +-122.41,37.75,52.0,2452.0,623.0,1932.0,549.0,2.3903,236100.0,NEAR BAY +-122.41,37.75,9.0,1282.0,334.0,1176.0,305.0,2.6538,206300.0,NEAR BAY +-122.39,37.74,42.0,4110.0,846.0,2147.0,674.0,2.5694,201000.0,NEAR BAY +-122.39,37.73,43.0,4864.0,972.0,3134.0,959.0,4.3393,217300.0,NEAR BAY +-122.4,37.73,45.0,3490.0,712.0,2337.0,781.0,3.4472,225400.0,NEAR BAY +-122.4,37.74,45.0,2462.0,509.0,1587.0,450.0,2.59,211800.0,NEAR BAY +-122.38,37.73,18.0,4037.0,990.0,2722.0,834.0,1.4282,140400.0,NEAR BAY +-122.38,37.73,15.0,6804.0,1664.0,4737.0,1581.0,1.4133,203400.0,NEAR BAY +-122.39,37.74,45.0,1462.0,308.0,924.0,302.0,2.1767,185300.0,NEAR BAY +-122.38,37.73,20.0,120.0,27.0,55.0,19.0,2.625,187500.0,NEAR BAY +-122.38,37.73,40.0,543.0,,259.0,89.0,2.2167,193800.0,NEAR BAY +-122.38,37.73,38.0,1388.0,276.0,871.0,265.0,2.1667,193800.0,NEAR BAY +-122.39,37.73,46.0,1517.0,299.0,879.0,309.0,2.2222,195100.0,NEAR BAY +-122.39,37.73,52.0,1931.0,329.0,1025.0,293.0,2.9063,192000.0,NEAR BAY +-122.39,37.73,52.0,1070.0,224.0,567.0,207.0,2.8603,189000.0,NEAR BAY +-122.4,37.73,48.0,1489.0,326.0,1115.0,356.0,2.6364,199300.0,NEAR BAY +-122.39,37.72,28.0,1609.0,340.0,1064.0,290.0,1.1125,206300.0,NEAR BAY +-122.39,37.72,45.0,2893.0,570.0,1923.0,535.0,3.6607,192300.0,NEAR BAY +-122.39,37.72,52.0,135.0,34.0,93.0,26.0,2.1484,181300.0,NEAR BAY +-122.41,37.75,52.0,3065.0,622.0,1405.0,606.0,3.7813,275900.0,NEAR BAY +-122.41,37.74,38.0,1754.0,382.0,928.0,354.0,4.1417,270800.0,NEAR BAY +-122.41,37.74,34.0,1403.0,262.0,839.0,255.0,4.7031,255200.0,NEAR BAY +-122.41,37.75,52.0,2524.0,559.0,1430.0,476.0,3.4073,254700.0,NEAR BAY +-122.41,37.75,52.0,2515.0,576.0,1209.0,540.0,3.5912,284900.0,NEAR BAY +-122.41,37.74,48.0,409.0,86.0,148.0,70.0,3.6687,335000.0,NEAR BAY +-122.41,37.74,52.0,831.0,175.0,415.0,159.0,1.9464,249000.0,NEAR BAY +-122.41,37.74,52.0,1842.0,339.0,1032.0,357.0,5.5563,250800.0,NEAR BAY +-122.42,37.74,52.0,2019.0,418.0,999.0,448.0,4.2212,271300.0,NEAR BAY +-122.42,37.74,52.0,1916.0,432.0,889.0,424.0,4.0391,279900.0,NEAR BAY +-122.42,37.74,52.0,1674.0,346.0,734.0,335.0,3.8864,281300.0,NEAR BAY +-122.42,37.74,52.0,1271.0,353.0,1076.0,324.0,2.9911,263900.0,NEAR BAY +-122.42,37.75,52.0,2163.0,607.0,1447.0,546.0,3.3555,275000.0,NEAR BAY +-122.41,37.74,43.0,1663.0,330.0,935.0,335.0,4.1552,240900.0,NEAR BAY +-122.41,37.74,47.0,1728.0,398.0,1178.0,315.0,3.2813,229600.0,NEAR BAY +-122.41,37.74,52.0,2058.0,399.0,1208.0,399.0,3.6429,230000.0,NEAR BAY +-122.42,37.73,50.0,3426.0,769.0,2261.0,671.0,2.888,246400.0,NEAR BAY +-122.42,37.74,52.0,1651.0,351.0,973.0,366.0,3.4583,240900.0,NEAR BAY +-122.42,37.74,52.0,2084.0,550.0,1438.0,516.0,2.3087,258600.0,NEAR BAY +-122.42,37.74,52.0,1540.0,370.0,1136.0,363.0,4.3125,243000.0,NEAR BAY +-122.42,37.73,52.0,3230.0,654.0,1765.0,611.0,3.3333,292300.0,NEAR BAY +-122.43,37.73,52.0,1583.0,347.0,935.0,341.0,4.6786,263200.0,NEAR BAY +-122.43,37.73,49.0,1435.0,322.0,1008.0,329.0,4.0,264000.0,NEAR BAY +-122.43,37.73,52.0,1386.0,276.0,729.0,274.0,3.6694,275500.0,NEAR BAY +-122.43,37.72,48.0,1289.0,280.0,782.0,235.0,3.6719,259800.0,NEAR BAY +-122.44,37.72,52.0,1775.0,347.0,1102.0,367.0,4.3125,267200.0,NEAR BAY +-122.44,37.73,52.0,2381.0,492.0,1485.0,447.0,4.3898,270000.0,NEAR BAY +-122.44,37.73,52.0,866.0,205.0,587.0,171.0,5.0224,261900.0,NEAR BAY +-122.42,37.73,46.0,1819.0,411.0,1534.0,406.0,4.0132,229400.0,NEAR BAY +-122.42,37.73,35.0,1871.0,342.0,1055.0,310.0,4.625,279300.0,NEAR BAY +-122.42,37.73,35.0,1791.0,322.0,988.0,304.0,4.5769,254500.0,NEAR BAY +-122.43,37.73,52.0,1985.0,401.0,1337.0,424.0,4.1071,240900.0,NEAR BAY +-122.41,37.73,42.0,2604.0,573.0,1703.0,507.0,3.4231,230200.0,NEAR BAY +-122.4,37.73,50.0,1947.0,411.0,1170.0,384.0,3.4769,238700.0,NEAR BAY +-122.4,37.73,42.0,1413.0,406.0,1027.0,362.0,2.3625,233000.0,NEAR BAY +-122.41,37.73,52.0,1931.0,358.0,1092.0,356.0,3.7835,271300.0,NEAR BAY +-122.41,37.73,41.0,2115.0,378.0,1168.0,365.0,4.0642,272500.0,NEAR BAY +-122.42,37.73,48.0,1474.0,308.0,998.0,330.0,4.0781,250300.0,NEAR BAY +-122.4,37.72,47.0,1465.0,306.0,1119.0,315.0,4.2672,219400.0,NEAR BAY +-122.4,37.72,37.0,971.0,248.0,647.0,208.0,2.1187,239300.0,NEAR BAY +-122.41,37.73,33.0,2789.0,567.0,1682.0,552.0,3.8643,276200.0,NEAR BAY +-122.41,37.72,35.0,2104.0,434.0,1225.0,410.0,4.8214,242900.0,NEAR BAY +-122.41,37.72,32.0,1650.0,316.0,904.0,295.0,4.0583,236200.0,NEAR BAY +-122.42,37.72,37.0,2638.0,546.0,1789.0,521.0,4.0071,244700.0,NEAR BAY +-122.43,37.72,50.0,2912.0,562.0,1989.0,537.0,3.6667,252600.0,NEAR BAY +-122.43,37.72,49.0,3427.0,696.0,2363.0,661.0,3.6885,254000.0,NEAR BAY +-122.43,37.72,52.0,2206.0,478.0,1583.0,456.0,3.7105,250500.0,NEAR BAY +-122.44,37.72,52.0,2890.0,571.0,1769.0,541.0,3.8274,252000.0,NEAR BAY +-122.43,37.72,52.0,3351.0,719.0,2101.0,706.0,3.0107,242000.0,NEAR BAY +-122.43,37.73,52.0,3602.0,738.0,2270.0,647.0,3.8934,251800.0,NEAR BAY +-122.43,37.73,52.0,1494.0,306.0,1463.0,360.0,3.1786,222600.0,NEAR BAY +-122.44,37.72,49.0,1557.0,405.0,1173.0,385.0,3.4605,265000.0,NEAR BAY +-122.44,37.72,48.0,2675.0,585.0,1773.0,540.0,3.9565,268500.0,NEAR BAY +-122.45,37.72,52.0,1729.0,319.0,890.0,300.0,4.3036,261800.0,NEAR BAY +-122.44,37.72,52.0,1380.0,272.0,847.0,284.0,3.7143,260000.0,NEAR BAY +-122.45,37.71,46.0,2559.0,506.0,1562.0,498.0,4.3846,270600.0,NEAR OCEAN +-122.45,37.71,52.0,1658.0,322.0,1086.0,326.0,3.8583,261600.0,NEAR OCEAN +-122.45,37.71,41.0,1578.0,351.0,1159.0,299.0,3.9167,243600.0,NEAR OCEAN +-122.46,37.71,52.0,1580.0,337.0,1425.0,330.0,4.0547,246200.0,NEAR OCEAN +-122.46,37.71,47.0,1527.0,283.0,1102.0,282.0,4.0,231600.0,NEAR OCEAN +-122.43,37.71,35.0,2878.0,564.0,1633.0,528.0,4.5,266900.0,NEAR BAY +-122.43,37.71,52.0,1508.0,278.0,1138.0,304.0,4.0234,266500.0,NEAR BAY +-122.43,37.71,52.0,1410.0,286.0,879.0,282.0,3.1908,255600.0,NEAR BAY +-122.44,37.72,52.0,1507.0,282.0,929.0,281.0,3.8958,247700.0,NEAR BAY +-122.44,37.71,52.0,2711.0,591.0,1848.0,524.0,3.9567,251500.0,NEAR BAY +-122.44,37.71,46.0,1230.0,247.0,895.0,257.0,5.3913,248900.0,NEAR BAY +-122.44,37.71,31.0,2370.0,441.0,1524.0,470.0,5.0201,264100.0,NEAR BAY +-122.45,37.71,34.0,3131.0,669.0,2204.0,600.0,3.5536,251000.0,NEAR OCEAN +-122.4,37.72,40.0,1948.0,413.0,1434.0,396.0,3.0313,219100.0,NEAR BAY +-122.4,37.71,40.0,1883.0,397.0,1411.0,438.0,3.0469,238000.0,NEAR BAY +-122.41,37.71,47.0,2289.0,481.0,1697.0,465.0,3.4773,226300.0,NEAR BAY +-122.41,37.71,28.0,5015.0,1240.0,3900.0,1029.0,1.2269,181900.0,NEAR BAY +-122.41,37.71,40.0,2054.0,433.0,1738.0,429.0,4.9926,213900.0,NEAR BAY +-122.41,37.71,49.0,1852.0,429.0,1615.0,447.0,3.495,217800.0,NEAR BAY +-122.4,37.72,41.0,1975.0,440.0,1528.0,424.0,3.8625,218300.0,NEAR BAY +-122.4,37.72,47.0,1167.0,250.0,953.0,253.0,4.2727,241900.0,NEAR BAY +-122.45,37.77,52.0,2602.0,,1330.0,647.0,3.5435,278600.0,NEAR BAY +-122.46,37.76,52.0,2236.0,545.0,1186.0,532.0,3.4531,414300.0,NEAR BAY +-122.46,37.77,52.0,1824.0,388.0,799.0,363.0,3.75,435700.0,NEAR BAY +-122.46,37.76,52.0,1817.0,449.0,948.0,380.0,3.93,390000.0,NEAR BAY +-122.45,37.76,31.0,5283.0,1330.0,2659.0,1269.0,3.5744,500000.0,NEAR BAY +-122.46,37.76,28.0,1072.0,165.0,363.0,168.0,6.1636,367700.0,NEAR BAY +-122.46,37.75,26.0,2192.0,438.0,954.0,456.0,4.5352,374200.0,NEAR BAY +-122.47,37.76,52.0,2941.0,783.0,1545.0,726.0,2.9899,406500.0,NEAR BAY +-122.47,37.76,52.0,2680.0,740.0,1587.0,713.0,2.5933,359600.0,NEAR BAY +-122.47,37.76,49.0,2842.0,670.0,1396.0,648.0,3.2679,345700.0,NEAR BAY +-122.47,37.76,52.0,2465.0,489.0,1170.0,498.0,4.0793,306700.0,NEAR BAY +-122.47,37.76,48.0,2064.0,484.0,1055.0,467.0,2.8711,329600.0,NEAR BAY +-122.47,37.76,40.0,3525.0,941.0,1675.0,857.0,3.2083,330000.0,NEAR BAY +-122.47,37.76,52.0,4001.0,809.0,1886.0,756.0,3.3239,350000.0,NEAR BAY +-122.47,37.76,39.0,3200.0,689.0,1391.0,618.0,3.6346,338000.0,NEAR BAY +-122.47,37.75,45.0,2399.0,426.0,911.0,423.0,4.4312,361000.0,NEAR BAY +-122.47,37.75,51.0,2413.0,431.0,1095.0,437.0,4.0089,357000.0,NEAR BAY +-122.47,37.75,49.0,2747.0,472.0,1281.0,448.0,5.482,366300.0,NEAR BAY +-122.47,37.76,34.0,2807.0,487.0,1152.0,445.0,5.1893,420300.0,NEAR BAY +-122.47,37.76,48.0,2464.0,459.0,1179.0,458.0,4.4946,358600.0,NEAR BAY +-122.46,37.75,52.0,1590.0,236.0,622.0,232.0,5.8151,500001.0,NEAR BAY +-122.46,37.75,52.0,1207.0,152.0,465.0,162.0,10.7569,500001.0,NEAR BAY +-122.47,37.75,51.0,2713.0,396.0,1090.0,401.0,9.3603,500001.0,NEAR BAY +-122.47,37.75,46.0,3238.0,544.0,1293.0,470.0,6.1592,381700.0,NEAR BAY +-122.47,37.75,52.0,1598.0,285.0,689.0,265.0,4.6071,337400.0,NEAR BAY +-122.47,37.74,52.0,1538.0,305.0,819.0,319.0,4.0846,333600.0,NEAR BAY +-122.45,37.75,36.0,2303.0,381.0,862.0,371.0,6.0274,349000.0,NEAR BAY +-122.45,37.75,36.0,1997.0,356.0,772.0,348.0,4.95,322600.0,NEAR BAY +-122.45,37.75,35.0,1363.0,302.0,1786.0,301.0,3.0804,313400.0,NEAR BAY +-122.46,37.75,52.0,1849.0,287.0,695.0,258.0,6.5372,394000.0,NEAR BAY +-122.45,37.74,52.0,1596.0,276.0,642.0,273.0,4.375,349500.0,NEAR BAY +-122.46,37.74,51.0,1905.0,291.0,707.0,284.0,6.2561,431000.0,NEAR BAY +-122.45,37.74,46.0,6429.0,1093.0,2535.0,1109.0,5.0887,335100.0,NEAR BAY +-122.44,37.73,43.0,3700.0,684.0,1488.0,623.0,5.5622,313600.0,NEAR BAY +-122.45,37.74,38.0,5688.0,930.0,2263.0,908.0,6.203,346800.0,NEAR BAY +-122.46,37.74,52.0,2180.0,326.0,856.0,326.0,5.3961,416900.0,NEAR BAY +-122.46,37.74,52.0,2053.0,281.0,791.0,287.0,10.959,500001.0,NEAR BAY +-122.47,37.74,52.0,2055.0,265.0,735.0,252.0,8.1189,500001.0,NEAR BAY +-122.47,37.74,52.0,3797.0,668.0,1633.0,658.0,5.6787,363600.0,NEAR BAY +-122.47,37.74,52.0,3688.0,640.0,1605.0,567.0,4.9537,365600.0,NEAR BAY +-122.46,37.73,52.0,2673.0,349.0,876.0,338.0,7.8476,500001.0,NEAR BAY +-122.46,37.73,52.0,3547.0,506.0,1276.0,491.0,8.0069,426800.0,NEAR BAY +-122.46,37.72,52.0,2951.0,406.0,1115.0,397.0,6.7228,405200.0,NEAR OCEAN +-122.47,37.73,52.0,2134.0,277.0,936.0,285.0,5.9245,484600.0,NEAR OCEAN +-122.47,37.73,52.0,2151.0,280.0,762.0,274.0,10.7309,500001.0,NEAR OCEAN +-122.47,37.73,50.0,1653.0,252.0,641.0,224.0,10.6605,500001.0,NEAR OCEAN +-122.47,37.72,46.0,1836.0,319.0,767.0,302.0,5.9114,399000.0,NEAR OCEAN +-122.46,37.73,52.0,2401.0,346.0,812.0,328.0,6.8322,394100.0,NEAR BAY +-122.45,37.73,52.0,2510.0,438.0,1153.0,407.0,5.1238,335100.0,NEAR BAY +-122.46,37.73,52.0,2857.0,469.0,1431.0,496.0,5.2088,344200.0,NEAR BAY +-122.44,37.73,39.0,1912.0,,970.0,406.0,4.7813,275500.0,NEAR BAY +-122.44,37.73,52.0,2838.0,567.0,1411.0,526.0,3.8304,261400.0,NEAR BAY +-122.45,37.73,52.0,1350.0,241.0,752.0,246.0,3.2448,266200.0,NEAR BAY +-122.45,37.73,52.0,2035.0,424.0,1193.0,430.0,5.0634,264200.0,NEAR BAY +-122.44,37.73,46.0,3581.0,758.0,1670.0,703.0,4.1932,269200.0,NEAR BAY +-122.45,37.72,52.0,982.0,197.0,653.0,171.0,4.2167,231900.0,NEAR BAY +-122.45,37.72,46.0,1406.0,235.0,771.0,239.0,4.7143,219300.0,NEAR BAY +-122.45,37.72,47.0,1773.0,345.0,1083.0,315.0,4.475,221200.0,NEAR BAY +-122.45,37.72,51.0,2690.0,554.0,1795.0,539.0,3.6581,225000.0,NEAR BAY +-122.46,37.72,47.0,1723.0,389.0,1216.0,399.0,3.3208,238600.0,NEAR OCEAN +-122.46,37.72,49.0,1207.0,255.0,658.0,220.0,4.0859,228600.0,NEAR OCEAN +-122.46,37.72,48.0,1690.0,339.0,962.0,317.0,3.2875,221500.0,NEAR OCEAN +-122.46,37.72,45.0,2399.0,419.0,1225.0,399.0,4.0855,244100.0,NEAR OCEAN +-122.46,37.72,39.0,2254.0,,1388.0,404.0,2.9688,232000.0,NEAR OCEAN +-122.47,37.71,44.0,2547.0,511.0,1577.0,516.0,4.1939,237900.0,NEAR OCEAN +-122.47,37.71,42.0,1961.0,427.0,1211.0,409.0,3.5156,239400.0,NEAR OCEAN +-122.47,37.72,43.0,968.0,199.0,434.0,162.0,2.5333,239300.0,NEAR OCEAN +-122.47,37.72,46.0,1453.0,306.0,817.0,310.0,3.0,246700.0,NEAR OCEAN +-122.47,37.72,49.0,1690.0,307.0,770.0,294.0,4.5913,259700.0,NEAR OCEAN +-122.45,37.72,45.0,964.0,173.0,613.0,201.0,2.9119,228900.0,NEAR BAY +-122.45,37.71,45.0,2253.0,431.0,1382.0,392.0,4.2562,221600.0,NEAR OCEAN +-122.46,37.71,52.0,1642.0,351.0,1138.0,340.0,4.1406,219500.0,NEAR OCEAN +-122.46,37.71,49.0,1711.0,348.0,1138.0,325.0,2.875,225000.0,NEAR OCEAN +-122.46,37.72,37.0,1833.0,388.0,1093.0,363.0,3.0703,211800.0,NEAR OCEAN +-122.48,37.76,48.0,2660.0,616.0,1491.0,602.0,3.9758,348600.0,NEAR BAY +-122.48,37.76,48.0,2304.0,558.0,1273.0,512.0,3.275,332100.0,NEAR BAY +-122.48,37.76,52.0,2684.0,574.0,1395.0,549.0,3.9097,323800.0,NEAR BAY +-122.48,37.76,50.0,2236.0,484.0,1171.0,467.0,4.0977,322100.0,NEAR BAY +-122.48,37.76,52.0,1845.0,336.0,1015.0,337.0,4.1397,331300.0,NEAR BAY +-122.48,37.76,52.0,3260.0,653.0,1594.0,632.0,4.4094,336100.0,NEAR BAY +-122.49,37.76,52.0,1382.0,230.0,708.0,279.0,5.8096,339800.0,NEAR BAY +-122.49,37.76,52.0,2564.0,502.0,1092.0,459.0,3.5302,329600.0,NEAR BAY +-122.49,37.76,52.0,2245.0,425.0,1091.0,409.0,3.5909,331200.0,NEAR BAY +-122.49,37.76,52.0,1792.0,305.0,782.0,287.0,4.0391,332700.0,NEAR BAY +-122.49,37.76,48.0,1351.0,270.0,650.0,265.0,3.5278,339800.0,NEAR BAY +-122.49,37.76,49.0,1724.0,295.0,795.0,297.0,4.3977,353600.0,NEAR BAY +-122.49,37.76,49.0,1637.0,304.0,729.0,281.0,4.3281,323100.0,NEAR BAY +-122.48,37.75,51.0,2095.0,410.0,1126.0,429.0,4.4,318400.0,NEAR BAY +-122.48,37.75,52.0,2515.0,494.0,1583.0,477.0,4.3393,317600.0,NEAR BAY +-122.48,37.74,52.0,2453.0,508.0,1056.0,453.0,3.6859,311800.0,NEAR OCEAN +-122.48,37.75,49.0,2203.0,407.0,1052.0,405.0,4.4375,329200.0,NEAR BAY +-122.48,37.75,48.0,2555.0,548.0,1285.0,482.0,3.7734,314700.0,NEAR BAY +-122.48,37.75,52.0,2074.0,401.0,1136.0,409.0,4.7703,331000.0,NEAR BAY +-122.49,37.75,48.0,2181.0,419.0,1041.0,379.0,3.7361,320200.0,NEAR OCEAN +-122.49,37.75,47.0,2140.0,425.0,1105.0,401.0,3.7054,308500.0,NEAR OCEAN +-122.49,37.75,45.0,2341.0,461.0,1092.0,438.0,4.8036,297800.0,NEAR OCEAN +-122.49,37.75,43.0,2044.0,393.0,979.0,378.0,3.9205,319100.0,NEAR OCEAN +-122.49,37.75,48.0,2387.0,424.0,1041.0,408.0,3.7562,321200.0,NEAR OCEAN +-122.49,37.75,52.0,2226.0,385.0,1177.0,416.0,4.8516,323800.0,NEAR OCEAN +-122.49,37.74,52.0,2189.0,433.0,1147.0,420.0,3.4583,321300.0,NEAR OCEAN +-122.48,37.74,52.0,2285.0,435.0,1211.0,442.0,4.0208,323100.0,NEAR OCEAN +-122.48,37.74,52.0,2166.0,423.0,1072.0,370.0,4.131,314300.0,NEAR OCEAN +-122.48,37.74,52.0,2841.0,517.0,1372.0,517.0,3.9236,335000.0,NEAR OCEAN +-122.49,37.73,48.0,1190.0,182.0,497.0,199.0,6.2642,438500.0,NEAR OCEAN +-122.49,37.74,48.0,1186.0,213.0,487.0,207.0,3.8333,340800.0,NEAR OCEAN +-122.49,37.74,52.0,2442.0,449.0,1188.0,436.0,4.3909,317700.0,NEAR OCEAN +-122.49,37.74,52.0,2302.0,457.0,1154.0,424.0,4.5744,315200.0,NEAR OCEAN +-122.48,37.73,52.0,1597.0,240.0,566.0,231.0,5.1681,500001.0,NEAR OCEAN +-122.48,37.73,47.0,2382.0,392.0,867.0,376.0,5.2598,371500.0,NEAR OCEAN +-122.49,37.73,39.0,1937.0,336.0,742.0,307.0,5.1991,369400.0,NEAR OCEAN +-122.49,37.73,37.0,1399.0,224.0,530.0,235.0,3.9219,433300.0,NEAR OCEAN +-122.49,37.73,36.0,1821.0,292.0,742.0,298.0,5.6204,406200.0,NEAR OCEAN +-122.48,37.73,38.0,3195.0,828.0,2410.0,778.0,3.1359,350000.0,NEAR OCEAN +-122.47,37.72,47.0,1176.0,286.0,564.0,258.0,3.2059,350000.0,NEAR OCEAN +-122.48,37.71,43.0,3850.0,1018.0,1497.0,829.0,3.5296,400000.0,NEAR OCEAN +-122.48,37.72,45.0,1405.0,338.0,733.0,342.0,4.1116,187500.0,NEAR OCEAN +-122.48,37.72,46.0,2403.0,638.0,1281.0,603.0,3.2321,112500.0,NEAR OCEAN +-122.5,37.76,52.0,2018.0,422.0,1142.0,463.0,3.7083,307700.0,NEAR OCEAN +-122.5,37.76,43.0,2108.0,456.0,1299.0,447.0,3.1406,316200.0,NEAR OCEAN +-122.5,37.76,50.0,1993.0,410.0,1009.0,374.0,3.9464,295600.0,NEAR OCEAN +-122.5,37.76,48.0,1408.0,295.0,891.0,269.0,3.8333,296300.0,NEAR OCEAN +-122.5,37.76,46.0,1491.0,285.0,841.0,306.0,4.5329,278800.0,NEAR OCEAN +-122.5,37.75,45.0,1672.0,344.0,838.0,314.0,4.1419,291500.0,NEAR OCEAN +-122.5,37.75,43.0,2373.0,481.0,1247.0,454.0,4.0985,283200.0,NEAR OCEAN +-122.51,37.76,43.0,2345.0,624.0,1439.0,614.0,2.8448,268900.0,NEAR OCEAN +-122.51,37.76,43.0,2527.0,619.0,1332.0,558.0,3.0465,274200.0,NEAR OCEAN +-122.51,37.76,40.0,2320.0,562.0,1499.0,521.0,3.2792,260800.0,NEAR OCEAN +-122.5,37.76,46.0,2226.0,480.0,1272.0,468.0,4.2644,284100.0,NEAR OCEAN +-122.5,37.76,45.0,1673.0,377.0,1078.0,393.0,3.3393,272300.0,NEAR OCEAN +-122.5,37.75,45.0,1620.0,,941.0,328.0,4.3859,270200.0,NEAR OCEAN +-122.5,37.75,44.0,1819.0,,1137.0,354.0,3.4919,271800.0,NEAR OCEAN +-122.54,37.76,45.0,1592.0,325.0,920.0,322.0,3.96,272200.0,NEAR OCEAN +-122.5,37.75,44.0,1739.0,343.0,872.0,330.0,2.9632,286300.0,NEAR OCEAN +-122.5,37.74,40.0,2310.0,445.0,1266.0,490.0,3.7969,297800.0,NEAR OCEAN +-122.5,37.74,45.0,1771.0,349.0,1098.0,342.0,3.7552,296600.0,NEAR OCEAN +-122.49,37.74,44.0,1472.0,275.0,820.0,310.0,5.6826,300000.0,NEAR OCEAN +-122.5,37.74,44.0,2374.0,496.0,1087.0,426.0,3.5,275700.0,NEAR OCEAN +-122.5,37.74,44.0,2527.0,518.0,1434.0,444.0,3.875,275700.0,NEAR OCEAN +-122.5,37.75,46.0,2298.0,457.0,1429.0,477.0,4.0217,272400.0,NEAR OCEAN +-122.5,37.74,44.0,2792.0,615.0,1640.0,579.0,4.0625,272800.0,NEAR OCEAN +-122.5,37.74,42.0,1667.0,395.0,1041.0,387.0,3.9583,273700.0,NEAR OCEAN +-122.5,37.74,44.0,2082.0,470.0,1154.0,403.0,4.3611,268100.0,NEAR OCEAN +-122.54,37.74,42.0,2006.0,415.0,1230.0,435.0,4.1786,271100.0,NEAR OCEAN +-122.46,37.79,52.0,2005.0,359.0,847.0,356.0,4.1029,500001.0,NEAR BAY +-122.46,37.78,52.0,2165.0,580.0,1067.0,530.0,2.9293,350000.0,NEAR BAY +-122.46,37.78,52.0,2594.0,622.0,1421.0,593.0,3.0265,350000.0,NEAR BAY +-122.46,37.79,52.0,2059.0,416.0,999.0,402.0,3.7419,500001.0,NEAR BAY +-122.46,37.78,52.0,3429.0,773.0,1584.0,696.0,3.7887,500001.0,NEAR BAY +-122.47,37.78,51.0,1485.0,386.0,880.0,385.0,2.7431,307100.0,NEAR BAY +-122.47,37.78,52.0,2635.0,587.0,1302.0,577.0,3.7292,416700.0,NEAR BAY +-122.47,37.79,52.0,2844.0,623.0,1380.0,596.0,4.75,500001.0,NEAR BAY +-122.47,37.79,52.0,437.0,105.0,194.0,87.0,2.8125,500001.0,NEAR BAY +-122.47,37.79,52.0,2383.0,477.0,990.0,464.0,3.9688,483300.0,NEAR BAY +-122.47,37.78,52.0,2388.0,507.0,1078.0,494.0,3.5221,443300.0,NEAR BAY +-122.47,37.78,52.0,1941.0,436.0,955.0,425.0,4.1339,396400.0,NEAR BAY +-122.48,37.78,48.0,2835.0,728.0,1674.0,684.0,3.129,375000.0,NEAR BAY +-122.48,37.79,52.0,4683.0,1055.0,2246.0,975.0,4.1148,457800.0,NEAR BAY +-122.48,37.78,44.0,3371.0,794.0,1738.0,753.0,3.1653,335300.0,NEAR BAY +-122.49,37.78,32.0,3028.0,815.0,1704.0,718.0,3.2028,322900.0,NEAR BAY +-122.49,37.78,46.0,3304.0,792.0,1783.0,777.0,3.6148,352200.0,NEAR BAY +-122.48,37.79,52.0,1647.0,236.0,546.0,227.0,9.1881,500001.0,NEAR BAY +-122.49,37.79,52.0,3146.0,478.0,1143.0,455.0,6.1407,500001.0,NEAR BAY +-122.49,37.79,52.0,2488.0,281.0,805.0,295.0,10.7058,500001.0,NEAR BAY +-122.46,37.78,52.0,4140.0,984.0,2030.0,892.0,3.4236,376800.0,NEAR BAY +-122.46,37.78,52.0,2632.0,542.0,1364.0,544.0,3.4605,441700.0,NEAR BAY +-122.46,37.78,52.0,2051.0,552.0,1400.0,510.0,3.2396,375000.0,NEAR BAY +-122.46,37.78,52.0,3088.0,727.0,1636.0,662.0,2.8553,360700.0,NEAR BAY +-122.46,37.77,52.0,3193.0,688.0,2099.0,681.0,3.9375,402900.0,NEAR BAY +-122.47,37.77,52.0,2241.0,443.0,1042.0,377.0,4.1635,398400.0,NEAR BAY +-122.47,37.78,52.0,2275.0,412.0,1166.0,424.0,4.0652,421300.0,NEAR BAY +-122.47,37.78,52.0,2169.0,522.0,1220.0,505.0,3.1989,446900.0,NEAR BAY +-122.47,37.78,52.0,2951.0,647.0,1448.0,591.0,3.1392,422400.0,NEAR BAY +-122.47,37.78,52.0,3021.0,569.0,1479.0,514.0,4.0208,414600.0,NEAR BAY +-122.47,37.78,52.0,2042.0,378.0,1153.0,408.0,4.1856,404700.0,NEAR BAY +-122.47,37.77,52.0,3143.0,635.0,1350.0,623.0,3.8571,366700.0,NEAR BAY +-122.48,37.78,52.0,3047.0,641.0,1427.0,620.0,3.4883,337200.0,NEAR BAY +-122.48,37.78,52.0,2666.0,515.0,1362.0,494.0,4.218,393800.0,NEAR BAY +-122.48,37.77,52.0,2556.0,595.0,1202.0,568.0,3.8899,348500.0,NEAR BAY +-122.48,37.78,50.0,2159.0,437.0,1111.0,417.0,3.5588,346400.0,NEAR BAY +-122.48,37.78,52.0,2910.0,611.0,1508.0,515.0,3.5865,311400.0,NEAR BAY +-122.49,37.78,47.0,2695.0,643.0,1505.0,644.0,3.0877,329100.0,NEAR BAY +-122.49,37.78,52.0,3440.0,722.0,1663.0,665.0,3.0278,356300.0,NEAR BAY +-122.49,37.77,52.0,2342.0,458.0,1170.0,458.0,3.7036,369200.0,NEAR BAY +-122.5,37.77,52.0,2433.0,454.0,1070.0,420.0,4.125,359500.0,NEAR BAY +-122.49,37.78,52.0,2050.0,439.0,1109.0,437.0,2.6719,318500.0,NEAR BAY +-122.49,37.78,42.0,2723.0,579.0,1419.0,519.0,3.6429,328400.0,NEAR BAY +-122.49,37.78,49.0,2176.0,441.0,1040.0,448.0,4.2414,500001.0,NEAR BAY +-122.5,37.78,50.0,1922.0,427.0,1049.0,443.0,3.5833,348500.0,NEAR BAY +-122.5,37.77,52.0,1769.0,414.0,1032.0,380.0,3.9954,324700.0,NEAR BAY +-122.5,37.77,52.0,2299.0,441.0,1252.0,415.0,5.0562,336700.0,NEAR BAY +-122.5,37.77,52.0,2739.0,569.0,1312.0,531.0,3.5833,322900.0,NEAR BAY +-122.5,37.78,46.0,2646.0,607.0,1418.0,563.0,3.7167,332800.0,NEAR BAY +-122.51,37.78,45.0,2564.0,499.0,1056.0,460.0,4.7328,351100.0,NEAR BAY +-122.51,37.78,47.0,2496.0,494.0,1201.0,454.0,4.0353,342200.0,NEAR BAY +-122.55,37.79,32.0,2131.0,625.0,1229.0,572.0,2.9201,322200.0,NEAR OCEAN +-122.47,37.81,45.0,6927.0,1258.0,4715.0,1165.0,3.4051,500001.0,NEAR BAY +-122.5,37.79,52.0,8.0,1.0,13.0,1.0,15.0001,500001.0,NEAR BAY +-122.54,37.72,17.0,2975.0,968.0,1453.0,828.0,3.527,318900.0,NEAR OCEAN +-122.42,37.72,42.0,4219.0,1125.0,3549.0,993.0,1.2387,212800.0,NEAR BAY +-122.36,37.72,10.0,479.0,125.0,355.0,108.0,2.7083,180400.0,NEAR BAY +-122.39,37.74,52.0,126.0,24.0,37.0,27.0,10.2264,225000.0,NEAR BAY +-122.4,37.75,26.0,54.0,9.0,23.0,9.0,6.1359,225000.0,NEAR BAY +-122.38,37.71,47.0,1088.0,190.0,558.0,166.0,4.2708,207100.0,NEAR BAY +-122.4,37.71,47.0,1649.0,328.0,1183.0,356.0,3.3625,223700.0,NEAR BAY +-121.28,37.96,28.0,1942.0,724.0,1618.0,638.0,0.9365,52500.0,INLAND +-121.28,37.95,49.0,1200.0,364.0,1448.0,318.0,1.1094,52500.0,INLAND +-121.28,37.95,46.0,1026.0,330.0,1109.0,333.0,1.2904,63300.0,INLAND +-121.29,37.96,52.0,888.0,324.0,630.0,258.0,1.2411,112500.0,INLAND +-121.29,37.96,52.0,287.0,119.0,154.0,85.0,0.8738,75000.0,INLAND +-121.29,37.95,16.0,761.0,306.0,438.0,282.0,0.7714,87500.0,INLAND +-121.3,37.95,9.0,674.0,242.0,575.0,193.0,2.2024,45000.0,INLAND +-121.29,37.95,52.0,107.0,79.0,167.0,53.0,0.7917,22500.0,INLAND +-121.3,37.96,24.0,1212.0,366.0,1202.0,343.0,1.7875,76800.0,INLAND +-121.31,37.96,48.0,1112.0,227.0,583.0,216.0,2.3393,77600.0,INLAND +-121.29,37.97,52.0,1610.0,480.0,1025.0,440.0,1.2962,110200.0,INLAND +-121.29,37.96,48.0,1778.0,541.0,1237.0,462.0,1.3438,103100.0,INLAND +-121.29,37.96,50.0,1669.0,558.0,1340.0,484.0,1.3191,92300.0,INLAND +-121.3,37.96,31.0,2668.0,812.0,1398.0,721.0,1.125,110400.0,INLAND +-121.3,37.96,52.0,1475.0,238.0,736.0,260.0,3.6591,105100.0,INLAND +-121.3,37.96,52.0,1354.0,314.0,679.0,311.0,1.7788,97400.0,INLAND +-121.31,37.96,52.0,2654.0,468.0,1157.0,494.0,3.226,107600.0,INLAND +-121.31,37.96,52.0,1829.0,301.0,694.0,319.0,3.3466,92600.0,INLAND +-121.28,37.97,47.0,2348.0,507.0,1455.0,479.0,1.65,66000.0,INLAND +-121.27,37.96,43.0,1624.0,448.0,1805.0,440.0,1.425,61300.0,INLAND +-121.27,37.95,43.0,557.0,165.0,573.0,144.0,1.7212,59000.0,INLAND +-121.27,37.95,52.0,1318.0,308.0,1368.0,310.0,1.8261,54600.0,INLAND +-121.27,37.94,38.0,512.0,133.0,676.0,124.0,1.7386,52000.0,INLAND +-121.28,37.94,44.0,1406.0,357.0,1489.0,386.0,1.4688,56800.0,INLAND +-121.28,37.94,48.0,1766.0,444.0,1406.0,421.0,1.7039,52700.0,INLAND +-121.29,37.95,52.0,288.0,86.0,272.0,54.0,0.696,42500.0,INLAND +-121.29,37.94,40.0,2827.0,655.0,2037.0,574.0,2.0303,63800.0,INLAND +-121.32,37.95,40.0,964.0,230.0,742.0,209.0,1.2625,43000.0,INLAND +-121.31,37.94,41.0,375.0,108.0,323.0,98.0,1.9531,45000.0,INLAND +-121.3,37.94,40.0,452.0,109.0,412.0,97.0,1.3417,60800.0,INLAND +-121.3,37.94,52.0,24.0,6.0,23.0,5.0,2.375,67500.0,INLAND +-121.32,37.94,36.0,40.0,10.0,64.0,14.0,2.625,55000.0,INLAND +-121.31,37.96,52.0,1938.0,332.0,788.0,320.0,3.6094,118400.0,INLAND +-121.32,37.96,47.0,1700.0,344.0,922.0,357.0,3.1845,87200.0,INLAND +-121.32,37.96,46.0,1832.0,365.0,975.0,373.0,2.0398,88100.0,INLAND +-121.33,37.96,42.0,1619.0,340.0,906.0,339.0,2.5488,80300.0,INLAND +-121.34,37.96,27.0,1839.0,442.0,2010.0,416.0,2.1284,59400.0,INLAND +-121.32,37.95,36.0,747.0,189.0,338.0,145.0,1.7885,62100.0,INLAND +-121.32,37.96,5.0,123.0,21.0,50.0,20.0,2.7656,50000.0,INLAND +-121.34,37.97,33.0,2493.0,454.0,1203.0,436.0,3.765,94600.0,INLAND +-121.34,37.96,23.0,2830.0,659.0,1554.0,654.0,3.0354,113700.0,INLAND +-121.35,37.97,33.0,3656.0,681.0,1698.0,671.0,3.1406,93900.0,INLAND +-121.36,37.96,32.0,614.0,95.0,227.0,107.0,3.9922,247400.0,INLAND +-121.35,37.96,21.0,1343.0,183.0,462.0,193.0,5.8995,189900.0,INLAND +-121.32,37.98,37.0,3247.0,643.0,1737.0,665.0,3.066,94100.0,INLAND +-121.33,37.98,36.0,3113.0,576.0,1746.0,544.0,3.4625,84600.0,INLAND +-121.33,37.97,38.0,3166.0,575.0,1351.0,561.0,3.5404,91600.0,INLAND +-121.32,37.97,46.0,2270.0,427.0,1097.0,453.0,3.3235,87800.0,INLAND +-121.32,37.97,43.0,2453.0,490.0,1093.0,438.0,2.9107,88800.0,INLAND +-121.33,37.96,20.0,1727.0,386.0,730.0,342.0,2.5195,92600.0,INLAND +-121.33,37.97,43.0,1511.0,292.0,721.0,320.0,3.5703,87400.0,INLAND +-121.33,37.97,36.0,1953.0,492.0,999.0,371.0,2.0043,90800.0,INLAND +-121.31,37.98,47.0,3386.0,663.0,1228.0,619.0,3.0625,141500.0,INLAND +-121.3,37.97,52.0,2980.0,537.0,1128.0,510.0,4.061,113600.0,INLAND +-121.31,37.97,42.0,1824.0,277.0,720.0,309.0,5.1915,183700.0,INLAND +-121.31,37.97,45.0,2604.0,454.0,988.0,442.0,3.6667,123100.0,INLAND +-121.29,37.98,42.0,625.0,143.0,533.0,159.0,2.625,65400.0,INLAND +-121.29,37.97,52.0,2995.0,555.0,1392.0,503.0,1.7794,98800.0,INLAND +-121.29,37.98,49.0,2501.0,565.0,1171.0,550.0,2.5043,76700.0,INLAND +-121.3,37.98,47.0,2373.0,461.0,990.0,444.0,4.175,98300.0,INLAND +-121.3,37.97,52.0,2259.0,417.0,766.0,385.0,2.2981,105400.0,INLAND +-121.29,37.99,41.0,930.0,191.0,463.0,185.0,3.4141,90600.0,INLAND +-121.29,37.99,30.0,1271.0,528.0,2019.0,524.0,1.5152,81300.0,INLAND +-121.3,37.99,38.0,2375.0,494.0,1167.0,471.0,2.6673,87500.0,INLAND +-121.3,37.98,39.0,3375.0,659.0,1388.0,631.0,2.6364,93800.0,INLAND +-121.28,37.99,42.0,495.0,116.0,284.0,97.0,2.8854,55700.0,INLAND +-121.26,37.98,32.0,3274.0,820.0,2050.0,738.0,2.1265,55700.0,INLAND +-121.27,37.98,43.0,2608.0,516.0,1322.0,528.0,2.5714,70000.0,INLAND +-121.27,37.98,43.0,1005.0,200.0,492.0,172.0,2.6812,72800.0,INLAND +-121.28,37.98,52.0,941.0,184.0,414.0,171.0,2.1429,69900.0,INLAND +-121.29,37.99,45.0,965.0,198.0,498.0,195.0,1.6944,75200.0,INLAND +-121.27,37.97,39.0,1023.0,243.0,550.0,224.0,1.1141,54400.0,INLAND +-121.26,37.96,43.0,527.0,133.0,367.0,152.0,2.5,63600.0,INLAND +-121.27,37.96,43.0,948.0,221.0,749.0,208.0,1.962,52700.0,INLAND +-121.27,37.96,52.0,583.0,114.0,310.0,93.0,2.5625,54200.0,INLAND +-121.26,37.98,41.0,1633.0,433.0,885.0,413.0,0.9782,54200.0,INLAND +-121.25,37.98,39.0,1765.0,414.0,1056.0,414.0,1.5329,48300.0,INLAND +-121.26,37.97,31.0,1189.0,295.0,891.0,292.0,2.5536,50500.0,INLAND +-121.25,37.97,34.0,1288.0,344.0,846.0,293.0,1.7895,63100.0,INLAND +-121.26,37.96,43.0,940.0,208.0,690.0,181.0,2.3056,62300.0,INLAND +-121.26,37.97,41.0,2398.0,448.0,1143.0,444.0,3.0352,69800.0,INLAND +-121.25,37.97,41.0,855.0,189.0,716.0,206.0,2.0375,75000.0,INLAND +-121.26,37.96,35.0,1511.0,316.0,892.0,304.0,1.7898,63500.0,INLAND +-121.25,37.95,40.0,1703.0,362.0,1208.0,373.0,2.0817,55300.0,INLAND +-121.26,37.95,44.0,819.0,184.0,677.0,183.0,1.725,59300.0,INLAND +-121.26,37.95,39.0,1841.0,428.0,1368.0,390.0,2.1583,62000.0,INLAND +-121.27,37.96,41.0,461.0,101.0,382.0,79.0,1.275,54000.0,INLAND +-121.26,37.96,40.0,535.0,105.0,335.0,102.0,2.5234,62800.0,INLAND +-121.25,37.96,26.0,2205.0,478.0,1730.0,472.0,2.4866,68300.0,INLAND +-121.24,37.96,29.0,874.0,217.0,788.0,222.0,1.9187,57700.0,INLAND +-121.25,37.95,46.0,2001.0,428.0,1384.0,401.0,1.9402,62200.0,INLAND +-121.24,37.95,36.0,361.0,63.0,169.0,62.0,3.7734,63800.0,INLAND +-121.25,37.94,30.0,1509.0,308.0,967.0,278.0,1.7798,65900.0,INLAND +-121.24,37.94,5.0,2232.0,488.0,1857.0,435.0,2.8705,113600.0,INLAND +-121.24,37.93,21.0,1185.0,237.0,960.0,245.0,2.0893,65000.0,INLAND +-121.25,37.94,28.0,964.0,232.0,782.0,218.0,2.3269,55900.0,INLAND +-121.25,37.93,31.0,1673.0,382.0,1734.0,400.0,2.0833,48300.0,INLAND +-121.26,37.93,33.0,2109.0,531.0,2248.0,588.0,1.4583,53000.0,INLAND +-121.26,37.94,43.0,1610.0,412.0,1409.0,365.0,1.7574,51700.0,INLAND +-121.27,37.93,24.0,1451.0,320.0,1413.0,283.0,2.125,61200.0,INLAND +-121.28,37.94,35.0,2680.0,634.0,2188.0,611.0,1.9375,56700.0,INLAND +-121.28,37.92,36.0,499.0,115.0,451.0,124.0,2.1705,60300.0,INLAND +-121.28,37.94,40.0,2806.0,685.0,2268.0,635.0,1.8814,57700.0,INLAND +-121.29,37.93,37.0,2488.0,578.0,1854.0,514.0,2.551,59100.0,INLAND +-121.29,37.93,24.0,1438.0,351.0,1294.0,342.0,2.7829,61800.0,INLAND +-121.28,37.93,23.0,1491.0,346.0,1223.0,343.0,2.1591,67800.0,INLAND +-121.28,37.92,30.0,1061.0,230.0,851.0,195.0,2.4412,61600.0,INLAND +-121.29,37.92,12.0,1096.0,240.0,1175.0,278.0,3.1053,73100.0,INLAND +-121.28,37.91,31.0,820.0,179.0,576.0,155.0,1.69,65900.0,INLAND +-121.31,37.93,21.0,1556.0,314.0,1140.0,304.0,2.4667,81400.0,INLAND +-121.3,37.92,28.0,3308.0,766.0,3201.0,720.0,1.7694,73900.0,INLAND +-121.24,37.98,33.0,450.0,123.0,236.0,103.0,1.1964,80400.0,INLAND +-121.24,37.97,47.0,886.0,196.0,517.0,188.0,2.1991,67200.0,INLAND +-121.24,37.96,37.0,1175.0,260.0,951.0,267.0,2.875,57700.0,INLAND +-121.23,37.96,37.0,2351.0,564.0,1591.0,549.0,1.6563,57200.0,INLAND +-121.23,37.96,44.0,2204.0,473.0,1277.0,435.0,1.5539,59200.0,INLAND +-121.23,37.95,36.0,811.0,168.0,514.0,152.0,2.625,89200.0,INLAND +-121.22,37.97,37.0,1514.0,337.0,1121.0,337.0,2.401,58400.0,INLAND +-121.22,37.96,30.0,1737.0,381.0,1177.0,347.0,1.9875,56400.0,INLAND +-121.22,37.96,31.0,1484.0,314.0,1163.0,336.0,2.625,72100.0,INLAND +-121.25,37.92,19.0,2109.0,427.0,1742.0,426.0,2.4097,66000.0,INLAND +-121.23,37.92,28.0,590.0,129.0,315.0,99.0,1.8958,85700.0,INLAND +-121.36,38.0,17.0,4535.0,762.0,1562.0,743.0,5.3224,225800.0,INLAND +-121.35,38.0,22.0,3564.0,730.0,1539.0,699.0,3.675,152400.0,INLAND +-121.35,38.0,6.0,1649.0,369.0,732.0,350.0,3.4231,123800.0,INLAND +-121.37,38.01,15.0,2430.0,315.0,1016.0,314.0,10.0088,242000.0,INLAND +-121.35,38.01,15.0,2682.0,599.0,1520.0,601.0,3.5982,94400.0,INLAND +-121.36,38.01,16.0,926.0,230.0,451.0,198.0,4.0221,173300.0,INLAND +-121.36,38.01,16.0,2178.0,667.0,1192.0,579.0,2.3339,87100.0,INLAND +-121.36,38.01,16.0,1080.0,166.0,507.0,182.0,4.5278,166900.0,INLAND +-121.34,38.01,17.0,2033.0,452.0,1114.0,446.0,3.2872,175000.0,INLAND +-121.33,38.01,27.0,1612.0,234.0,630.0,255.0,5.318,155100.0,INLAND +-121.34,38.0,32.0,3877.0,687.0,1642.0,647.0,4.0444,129200.0,INLAND +-121.33,38.0,32.0,4474.0,929.0,2177.0,884.0,3.2889,98900.0,INLAND +-121.33,38.01,36.0,1383.0,207.0,531.0,203.0,5.9191,151900.0,INLAND +-121.32,38.01,20.0,1903.0,395.0,919.0,359.0,2.6765,96400.0,INLAND +-121.32,38.01,36.0,391.0,74.0,171.0,79.0,2.7045,102800.0,INLAND +-121.32,38.0,21.0,1795.0,482.0,1114.0,472.0,2.0091,101500.0,INLAND +-121.32,38.0,22.0,2105.0,521.0,781.0,483.0,2.213,87500.0,INLAND +-121.33,38.0,14.0,3731.0,772.0,1679.0,750.0,3.1369,119600.0,INLAND +-121.33,37.99,15.0,4472.0,1079.0,1837.0,976.0,2.5,175900.0,INLAND +-121.34,37.99,11.0,4487.0,868.0,2195.0,780.0,3.9615,194600.0,INLAND +-121.34,37.99,14.0,3111.0,498.0,1178.0,525.0,6.556,234700.0,INLAND +-121.31,37.99,15.0,3103.0,965.0,3061.0,861.0,1.3729,110300.0,INLAND +-121.32,37.98,20.0,1591.0,589.0,1916.0,536.0,1.3531,94600.0,INLAND +-121.33,37.98,9.0,2370.0,424.0,1129.0,386.0,5.143,176500.0,INLAND +-121.33,37.98,10.0,1564.0,397.0,643.0,347.0,2.7031,150000.0,INLAND +-121.36,37.99,8.0,1801.0,380.0,684.0,350.0,4.2589,134900.0,INLAND +-121.34,37.98,8.0,2628.0,428.0,1158.0,393.0,5.3002,191700.0,INLAND +-121.33,38.02,33.0,2854.0,489.0,1109.0,452.0,4.3008,136400.0,INLAND +-121.34,38.02,30.0,4375.0,689.0,2038.0,709.0,5.1202,133800.0,INLAND +-121.33,38.02,31.0,1466.0,,608.0,254.0,3.1827,162100.0,INLAND +-121.33,38.02,37.0,1964.0,315.0,915.0,335.0,4.3008,119800.0,INLAND +-121.34,38.03,20.0,4213.0,751.0,2071.0,714.0,4.4063,130800.0,INLAND +-121.33,38.03,19.0,1708.0,291.0,906.0,288.0,4.918,130600.0,INLAND +-121.36,38.04,4.0,2477.0,359.0,1234.0,377.0,5.5427,162100.0,INLAND +-121.35,38.04,5.0,4303.0,613.0,2206.0,621.0,5.5842,159100.0,INLAND +-121.35,38.04,12.0,6217.0,1019.0,3771.0,961.0,3.7206,146000.0,INLAND +-121.36,38.04,9.0,2167.0,370.0,1290.0,351.0,5.0285,148200.0,INLAND +-121.34,38.05,16.0,667.0,92.0,267.0,90.0,5.6147,244700.0,INLAND +-121.34,38.04,16.0,3295.0,565.0,2279.0,576.0,3.6083,146400.0,INLAND +-121.33,38.04,15.0,1933.0,280.0,965.0,260.0,4.6477,142700.0,INLAND +-121.33,38.03,10.0,629.0,140.0,635.0,146.0,2.2961,126700.0,INLAND +-121.32,38.03,16.0,4045.0,623.0,1862.0,625.0,4.875,143100.0,INLAND +-121.33,38.04,15.0,2903.0,440.0,1325.0,423.0,4.5179,145600.0,INLAND +-121.33,38.04,10.0,1421.0,204.0,657.0,209.0,5.1878,153900.0,INLAND +-121.35,38.03,8.0,1904.0,255.0,895.0,242.0,5.7201,155700.0,INLAND +-121.34,38.03,12.0,2707.0,433.0,1200.0,380.0,4.9861,133500.0,INLAND +-121.35,38.02,16.0,1665.0,311.0,1301.0,259.0,2.8403,132300.0,INLAND +-121.35,38.03,16.0,3158.0,515.0,1596.0,528.0,4.1739,131300.0,INLAND +-121.36,38.03,14.0,2356.0,438.0,1378.0,481.0,3.7375,138800.0,INLAND +-121.35,38.02,15.0,3583.0,644.0,2183.0,643.0,3.428,140700.0,INLAND +-121.36,38.02,5.0,2229.0,543.0,1010.0,474.0,4.1719,206100.0,INLAND +-121.36,38.03,7.0,3461.0,859.0,1518.0,741.0,3.5684,78700.0,INLAND +-121.32,38.04,30.0,249.0,44.0,167.0,45.0,4.5,92800.0,INLAND +-121.31,38.03,24.0,3050.0,568.0,1743.0,549.0,3.7413,105300.0,INLAND +-121.32,38.03,25.0,2474.0,513.0,1947.0,524.0,2.5742,98400.0,INLAND +-121.32,38.02,26.0,2851.0,533.0,1544.0,499.0,3.5379,99100.0,INLAND +-121.31,38.03,18.0,4893.0,1008.0,3036.0,997.0,2.5212,110000.0,INLAND +-121.29,38.0,12.0,4038.0,1074.0,3440.0,942.0,1.9698,112300.0,INLAND +-121.31,37.99,23.0,3135.0,707.0,1650.0,680.0,1.886,105300.0,INLAND +-121.3,38.0,23.0,3706.0,1106.0,3785.0,1019.0,1.7774,100000.0,INLAND +-121.3,38.01,29.0,2289.0,449.0,1215.0,435.0,3.2788,100000.0,INLAND +-121.3,38.0,27.0,2918.0,580.0,1338.0,544.0,2.6495,116200.0,INLAND +-121.31,38.0,35.0,2097.0,351.0,977.0,358.0,4.3958,108400.0,INLAND +-121.31,38.0,19.0,908.0,158.0,306.0,154.0,3.9792,131900.0,INLAND +-121.31,38.02,24.0,4157.0,951.0,2734.0,879.0,2.7981,92100.0,INLAND +-121.3,38.01,30.0,2547.0,485.0,1547.0,501.0,3.994,95500.0,INLAND +-121.32,38.02,23.0,3251.0,689.0,1890.0,668.0,3.0729,104800.0,INLAND +-121.31,38.01,22.0,2101.0,514.0,1304.0,511.0,2.8348,101600.0,INLAND +-121.31,38.01,22.0,2575.0,680.0,1367.0,645.0,1.4274,90500.0,INLAND +-121.3,38.04,8.0,2668.0,447.0,1713.0,444.0,4.0156,117600.0,INLAND +-121.3,38.03,13.0,1014.0,200.0,712.0,197.0,3.1471,102800.0,INLAND +-121.3,38.03,10.0,1409.0,248.0,782.0,222.0,4.0227,107700.0,INLAND +-121.29,38.04,16.0,2128.0,441.0,1860.0,459.0,3.1779,97300.0,INLAND +-121.29,38.03,16.0,4356.0,881.0,1629.0,818.0,2.2672,91100.0,INLAND +-121.28,38.03,11.0,3585.0,729.0,2769.0,715.0,3.0907,94100.0,INLAND +-121.29,38.03,7.0,2021.0,441.0,1615.0,406.0,2.5842,111300.0,INLAND +-121.28,38.03,11.0,826.0,150.0,684.0,166.0,3.9265,107400.0,INLAND +-121.29,38.02,12.0,2006.0,426.0,1849.0,396.0,2.5437,99000.0,INLAND +-121.3,38.02,16.0,2717.0,621.0,3343.0,643.0,2.5473,106300.0,INLAND +-121.3,38.03,11.0,2866.0,654.0,1404.0,525.0,2.505,95000.0,INLAND +-121.3,38.02,4.0,1515.0,384.0,491.0,348.0,2.8523,87500.0,INLAND +-121.29,38.0,4.0,1392.0,322.0,1784.0,309.0,2.375,124500.0,INLAND +-121.29,38.01,2.0,6403.0,1116.0,3327.0,957.0,4.4871,137900.0,INLAND +-121.28,38.02,8.0,1868.0,392.0,1258.0,389.0,3.175,95900.0,INLAND +-121.29,38.01,10.0,69.0,16.0,50.0,20.0,3.75,120800.0,INLAND +-121.27,38.05,26.0,378.0,75.0,164.0,65.0,3.4107,82800.0,INLAND +-121.27,38.02,32.0,342.0,58.0,138.0,52.0,2.9821,155000.0,INLAND +-121.3,38.05,52.0,122.0,26.0,62.0,25.0,1.15,112500.0,INLAND +-121.25,38.05,25.0,1967.0,362.0,1035.0,361.0,3.5735,106800.0,INLAND +-121.25,38.04,26.0,3080.0,473.0,1257.0,465.0,4.9861,201800.0,INLAND +-121.25,38.01,16.0,2397.0,501.0,1053.0,557.0,2.6994,112500.0,INLAND +-121.23,38.04,32.0,1829.0,262.0,677.0,243.0,6.1805,247900.0,INLAND +-121.22,38.04,42.0,343.0,50.0,116.0,49.0,5.5376,212500.0,INLAND +-121.25,38.03,29.0,2465.0,327.0,859.0,315.0,6.6605,220700.0,INLAND +-121.22,38.0,35.0,1841.0,300.0,783.0,285.0,2.8167,162100.0,INLAND +-121.24,38.01,22.0,1526.0,299.0,790.0,300.0,2.4342,125000.0,INLAND +-121.25,38.0,21.0,446.0,73.0,182.0,57.0,2.8958,135000.0,INLAND +-121.26,37.99,27.0,429.0,102.0,179.0,90.0,2.3333,87500.0,INLAND +-121.24,38.0,25.0,1471.0,300.0,721.0,304.0,2.4688,126800.0,INLAND +-121.23,37.99,38.0,523.0,80.0,226.0,72.0,5.5693,153100.0,INLAND +-121.23,37.98,27.0,849.0,137.0,373.0,131.0,5.0362,181300.0,INLAND +-121.2,37.97,39.0,440.0,83.0,270.0,97.0,6.0582,157700.0,INLAND +-121.19,38.04,35.0,703.0,117.0,290.0,107.0,3.225,177100.0,INLAND +-121.16,38.03,28.0,253.0,50.0,201.0,51.0,1.4732,156300.0,INLAND +-121.2,38.02,44.0,608.0,108.0,287.0,83.0,3.3882,125000.0,INLAND +-121.18,37.99,31.0,2450.0,559.0,1459.0,478.0,2.4674,130900.0,INLAND +-121.17,37.97,28.0,1374.0,248.0,769.0,229.0,3.6389,130400.0,INLAND +-121.23,37.95,32.0,2081.0,472.0,1342.0,411.0,2.7958,59000.0,INLAND +-121.19,37.93,27.0,1621.0,363.0,909.0,345.0,2.1513,99700.0,INLAND +-121.23,37.94,20.0,268.0,78.0,77.0,49.0,1.125,150000.0,INLAND +-121.22,37.93,21.0,336.0,68.0,206.0,73.0,4.75,121400.0,INLAND +-121.22,37.95,30.0,1055.0,211.0,629.0,170.0,2.8676,76900.0,INLAND +-121.18,37.96,35.0,411.0,74.0,193.0,59.0,2.5625,146900.0,INLAND +-121.24,37.9,16.0,50.0,10.0,20.0,6.0,2.625,137500.0,INLAND +-121.26,37.88,42.0,465.0,93.0,256.0,93.0,3.1719,158300.0,INLAND +-121.28,37.9,28.0,371.0,71.0,171.0,70.0,0.9614,55700.0,INLAND +-121.27,37.88,43.0,968.0,249.0,664.0,240.0,1.6458,83600.0,INLAND +-121.27,37.87,34.0,1010.0,206.0,678.0,234.0,2.9531,104000.0,INLAND +-121.31,37.9,38.0,226.0,44.0,125.0,38.0,2.9,125000.0,INLAND +-121.29,37.89,26.0,161.0,27.0,1542.0,30.0,5.7485,162500.0,INLAND +-121.29,37.87,29.0,488.0,108.0,308.0,115.0,2.6563,103100.0,INLAND +-121.23,37.87,49.0,98.0,24.0,59.0,26.0,3.65,162500.0,INLAND +-121.49,37.94,31.0,1860.0,394.0,1848.0,293.0,2.2891,162500.0,INLAND +-121.38,37.88,44.0,1158.0,226.0,1094.0,224.0,2.6842,156300.0,INLAND +-121.47,38.13,13.0,3192.0,715.0,1768.0,626.0,2.2619,123500.0,INLAND +-121.42,38.22,35.0,1507.0,313.0,868.0,283.0,2.0284,96300.0,INLAND +-121.36,38.15,42.0,2051.0,334.0,878.0,318.0,4.3553,185700.0,INLAND +-121.32,38.16,14.0,2049.0,398.0,1071.0,369.0,3.5,240800.0,INLAND +-121.32,38.13,5.0,3136.0,501.0,1327.0,467.0,5.5942,186900.0,INLAND +-121.35,38.09,32.0,1706.0,292.0,923.0,284.0,5.5057,147200.0,INLAND +-121.32,38.15,5.0,5428.0,994.0,2725.0,902.0,3.9323,130100.0,INLAND +-121.23,38.12,22.0,393.0,58.0,134.0,57.0,3.95,178100.0,INLAND +-121.23,38.11,48.0,561.0,81.0,240.0,69.0,3.6312,202800.0,INLAND +-121.23,38.09,23.0,633.0,91.0,236.0,83.0,6.4562,230000.0,INLAND +-121.26,38.09,35.0,930.0,186.0,525.0,201.0,2.0625,155000.0,INLAND +-121.3,38.09,31.0,335.0,53.0,154.0,55.0,2.0694,175000.0,INLAND +-121.29,38.07,21.0,1185.0,207.0,533.0,213.0,3.1917,204500.0,INLAND +-121.25,38.07,28.0,2103.0,422.0,1167.0,391.0,3.0592,152800.0,INLAND +-121.29,38.14,27.0,836.0,132.0,303.0,133.0,3.875,127400.0,INLAND +-121.3,38.14,17.0,3507.0,696.0,1867.0,709.0,3.2123,120700.0,INLAND +-121.29,38.14,34.0,2770.0,544.0,1409.0,535.0,3.2338,101800.0,INLAND +-121.29,38.14,34.0,1500.0,337.0,674.0,282.0,2.515,110800.0,INLAND +-121.29,38.13,31.0,1008.0,212.0,453.0,195.0,2.3917,113500.0,INLAND +-121.3,38.13,27.0,1004.0,192.0,470.0,192.0,2.8942,116700.0,INLAND +-121.3,38.13,23.0,2864.0,504.0,1298.0,499.0,3.2303,131800.0,INLAND +-121.29,38.15,23.0,4183.0,633.0,1886.0,628.0,4.8787,175300.0,INLAND +-121.28,38.14,37.0,3278.0,623.0,1431.0,575.0,3.3987,99500.0,INLAND +-121.27,38.14,33.0,3557.0,894.0,2659.0,894.0,2.2883,86900.0,INLAND +-121.27,38.14,40.0,929.0,257.0,576.0,229.0,2.125,137500.0,INLAND +-121.28,38.14,38.0,2803.0,500.0,1223.0,509.0,4.119,128800.0,INLAND +-121.28,38.13,48.0,1892.0,333.0,804.0,352.0,4.0625,143200.0,INLAND +-121.27,38.13,52.0,1081.0,257.0,437.0,225.0,2.1979,114100.0,INLAND +-121.27,38.13,40.0,2402.0,509.0,1197.0,486.0,2.1771,98200.0,INLAND +-121.28,38.13,32.0,3366.0,676.0,1916.0,697.0,2.5401,125400.0,INLAND +-121.28,38.12,34.0,3268.0,640.0,1906.0,628.0,2.8237,110700.0,INLAND +-121.27,38.12,44.0,2356.0,482.0,1043.0,443.0,2.4949,108000.0,INLAND +-121.29,38.13,20.0,3168.0,514.0,1390.0,490.0,5.0,154800.0,INLAND +-121.3,38.13,26.0,2256.0,360.0,937.0,372.0,5.0528,153700.0,INLAND +-121.29,38.12,18.0,1534.0,275.0,741.0,263.0,3.9607,132500.0,INLAND +-121.3,38.12,11.0,1792.0,252.0,767.0,263.0,7.6889,229300.0,INLAND +-121.3,38.11,5.0,5979.0,1190.0,2679.0,1084.0,4.196,171700.0,INLAND +-121.27,38.11,11.0,3163.0,794.0,2106.0,762.0,2.4482,103000.0,INLAND +-121.28,38.11,10.0,2974.0,588.0,1559.0,568.0,3.8825,136800.0,INLAND +-121.27,38.11,15.0,2039.0,384.0,1178.0,375.0,3.8672,120100.0,INLAND +-121.28,38.1,13.0,2432.0,586.0,1441.0,606.0,2.5556,133100.0,INLAND +-121.29,38.1,14.0,1551.0,297.0,785.0,281.0,3.775,163300.0,INLAND +-121.27,38.13,39.0,2614.0,634.0,1862.0,654.0,1.9238,70700.0,INLAND +-121.27,38.12,37.0,2232.0,504.0,1455.0,471.0,2.5587,87800.0,INLAND +-121.26,38.13,38.0,1419.0,411.0,1226.0,397.0,2.2188,68800.0,INLAND +-121.26,38.12,27.0,1818.0,459.0,1182.0,428.0,1.8575,73800.0,INLAND +-121.25,38.13,25.0,1305.0,270.0,789.0,235.0,3.2993,91100.0,INLAND +-121.26,38.11,4.0,2058.0,366.0,933.0,316.0,4.2448,150900.0,INLAND +-121.26,38.11,8.0,2770.0,642.0,1611.0,633.0,3.1284,115100.0,INLAND +-121.25,38.14,16.0,1174.0,242.0,464.0,261.0,2.3,133300.0,INLAND +-121.26,38.14,10.0,3371.0,665.0,1823.0,654.0,3.5333,116800.0,INLAND +-121.27,38.13,35.0,2607.0,685.0,2016.0,618.0,1.75,82900.0,INLAND +-121.26,38.13,25.0,2549.0,675.0,2053.0,648.0,2.0875,83100.0,INLAND +-121.24,38.22,28.0,2593.0,487.0,1365.0,457.0,3.3929,113000.0,INLAND +-121.22,38.16,24.0,4411.0,776.0,2038.0,732.0,3.475,151200.0,INLAND +-121.28,38.17,19.0,1337.0,236.0,744.0,225.0,4.0924,244200.0,INLAND +-121.32,38.21,27.0,2643.0,467.0,1455.0,444.0,3.6398,146700.0,INLAND +-121.16,38.16,31.0,1953.0,366.0,999.0,316.0,2.4906,122500.0,INLAND +-121.14,38.16,14.0,2591.0,497.0,1371.0,479.0,3.5774,113900.0,INLAND +-121.06,38.25,13.0,651.0,102.0,301.0,104.0,3.6528,200000.0,INLAND +-121.15,38.21,18.0,4176.0,700.0,2164.0,699.0,4.0365,174200.0,INLAND +-121.05,38.14,19.0,3326.0,561.0,1544.0,511.0,2.9875,166300.0,INLAND +-121.09,38.19,23.0,762.0,140.0,358.0,141.0,2.4545,105000.0,INLAND +-121.19,38.13,27.0,2400.0,435.0,1085.0,444.0,3.7687,165200.0,INLAND +-121.18,38.07,21.0,2333.0,377.0,1073.0,332.0,4.8125,161100.0,INLAND +-120.97,38.0,27.0,1683.0,288.0,873.0,258.0,4.7069,176900.0,INLAND +-121.05,37.93,17.0,2474.0,480.0,1649.0,453.0,3.275,156500.0,INLAND +-121.11,38.04,32.0,1083.0,188.0,471.0,178.0,2.9241,187500.0,INLAND +-121.09,38.03,21.0,2064.0,342.0,1021.0,359.0,4.517,152200.0,INLAND +-121.12,38.0,36.0,683.0,159.0,505.0,141.0,3.4265,158900.0,INLAND +-120.99,37.8,32.0,2564.0,513.0,1198.0,459.0,2.9083,113400.0,INLAND +-121.0,37.8,13.0,4030.0,744.0,2248.0,766.0,3.6107,141300.0,INLAND +-120.98,37.79,20.0,2458.0,491.0,1227.0,481.0,2.7857,110900.0,INLAND +-120.97,37.84,28.0,2368.0,430.0,1231.0,403.0,2.883,141900.0,INLAND +-120.96,37.77,32.0,2262.0,416.0,1156.0,404.0,3.8534,157600.0,INLAND +-121.04,37.78,32.0,2916.0,528.0,1466.0,473.0,2.5643,200000.0,INLAND +-121.06,37.86,24.0,1713.0,328.0,1258.0,324.0,2.683,169400.0,INLAND +-121.13,37.74,31.0,677.0,144.0,523.0,159.0,2.4598,97100.0,INLAND +-121.13,37.74,28.0,409.0,104.0,244.0,98.0,3.4643,90900.0,INLAND +-121.12,37.73,35.0,1107.0,227.0,573.0,210.0,2.3924,102200.0,INLAND +-121.13,37.74,21.0,2376.0,475.0,1175.0,441.0,3.6016,134600.0,INLAND +-121.13,37.73,40.0,1126.0,220.0,667.0,235.0,3.3158,125900.0,INLAND +-121.11,37.74,11.0,3886.0,599.0,1605.0,529.0,4.4213,182700.0,INLAND +-121.1,37.8,35.0,1853.0,331.0,958.0,340.0,3.3578,149000.0,INLAND +-121.11,37.76,22.0,2606.0,411.0,1252.0,397.0,4.1833,192100.0,INLAND +-121.16,37.73,7.0,4956.0,941.0,3006.0,915.0,3.4426,139000.0,INLAND +-121.25,37.76,22.0,2430.0,417.0,1292.0,391.0,3.4009,182400.0,INLAND +-121.22,37.72,34.0,2123.0,387.0,1310.0,368.0,2.6368,165600.0,INLAND +-121.22,37.81,17.0,2879.0,542.0,1802.0,530.0,3.6378,126100.0,INLAND +-121.22,37.8,28.0,2608.0,576.0,1719.0,554.0,2.1186,94400.0,INLAND +-121.22,37.8,37.0,1038.0,222.0,521.0,211.0,2.125,91900.0,INLAND +-121.21,37.81,18.0,2404.0,498.0,1531.0,506.0,2.995,124300.0,INLAND +-121.21,37.8,31.0,699.0,186.0,460.0,170.0,2.7443,94200.0,INLAND +-121.21,37.8,44.0,300.0,72.0,160.0,73.0,2.1786,120800.0,INLAND +-121.21,37.8,45.0,370.0,84.0,167.0,70.0,1.4853,101800.0,INLAND +-121.21,37.79,33.0,811.0,185.0,446.0,198.0,1.6724,96900.0,INLAND +-121.21,37.8,33.0,1862.0,429.0,971.0,389.0,2.6053,99200.0,INLAND +-121.21,37.81,8.0,1883.0,298.0,999.0,301.0,5.193,172100.0,INLAND +-121.2,37.8,28.0,3264.0,576.0,1512.0,567.0,3.7546,135300.0,INLAND +-121.2,37.8,24.0,1698.0,344.0,927.0,313.0,3.5625,130800.0,INLAND +-121.2,37.79,36.0,866.0,160.0,502.0,149.0,2.4798,101500.0,INLAND +-121.2,37.8,37.0,311.0,61.0,171.0,54.0,4.0972,101800.0,INLAND +-121.21,37.81,12.0,3667.0,640.0,2173.0,652.0,5.0369,163900.0,INLAND +-121.17,37.88,22.0,1283.0,256.0,3082.0,239.0,3.5365,111800.0,INLAND +-121.17,37.82,35.0,2506.0,406.0,1316.0,398.0,3.8472,197600.0,INLAND +-121.2,37.83,18.0,3415.0,580.0,1912.0,562.0,4.4423,161400.0,INLAND +-121.2,37.81,26.0,395.0,74.0,193.0,72.0,7.3718,212500.0,INLAND +-121.19,37.81,8.0,4019.0,857.0,1959.0,782.0,2.7321,175000.0,INLAND +-121.18,37.79,16.0,1326.0,286.0,509.0,297.0,1.9464,112500.0,INLAND +-121.2,37.78,4.0,58.0,29.0,79.0,29.0,3.375,106300.0,INLAND +-121.23,37.78,20.0,273.0,49.0,149.0,49.0,4.8229,158300.0,INLAND +-121.24,37.79,7.0,5151.0,867.0,2553.0,805.0,4.075,195000.0,INLAND +-121.27,37.79,16.0,1853.0,390.0,1013.0,362.0,2.7083,173900.0,INLAND +-121.22,37.8,13.0,335.0,89.0,247.0,77.0,1.6111,74100.0,INLAND +-121.22,37.79,36.0,1052.0,221.0,712.0,212.0,1.7228,105000.0,INLAND +-121.22,37.79,38.0,2152.0,451.0,1320.0,457.0,2.5025,101900.0,INLAND +-121.23,37.79,21.0,1922.0,373.0,1130.0,372.0,4.0815,117900.0,INLAND +-121.22,37.79,5.0,3107.0,477.0,1549.0,443.0,4.4766,169400.0,INLAND +-121.23,37.79,23.0,1985.0,424.0,1198.0,389.0,2.7734,116800.0,INLAND +-121.23,37.8,11.0,2451.0,665.0,1155.0,533.0,2.2254,130800.0,INLAND +-121.24,37.81,6.0,3883.0,800.0,2319.0,787.0,3.5595,161000.0,INLAND +-121.23,37.81,15.0,2906.0,537.0,1886.0,557.0,4.2431,137100.0,INLAND +-121.22,37.81,20.0,1811.0,352.0,1191.0,327.0,4.0125,121500.0,INLAND +-121.22,37.82,13.0,4452.0,949.0,2740.0,937.0,3.1964,141500.0,INLAND +-121.23,37.81,16.0,2085.0,342.0,1236.0,345.0,5.5591,149300.0,INLAND +-121.23,37.82,8.0,1289.0,235.0,867.0,239.0,4.6821,138500.0,INLAND +-121.23,37.82,14.0,1847.0,325.0,1030.0,309.0,4.9271,155300.0,INLAND +-121.23,37.84,28.0,1347.0,241.0,713.0,225.0,4.0208,155700.0,INLAND +-121.24,37.82,9.0,6169.0,959.0,3378.0,945.0,5.1047,157900.0,INLAND +-121.3,37.85,35.0,1034.0,206.0,604.0,192.0,2.2391,120000.0,INLAND +-121.31,37.81,36.0,284.0,53.0,130.0,47.0,3.1429,179200.0,INLAND +-121.29,37.8,6.0,110.0,26.0,69.0,24.0,3.7292,475000.0,INLAND +-121.27,37.82,26.0,1170.0,238.0,830.0,216.0,2.6458,127500.0,INLAND +-121.28,37.83,32.0,696.0,151.0,443.0,144.0,2.5156,86300.0,INLAND +-121.28,37.82,10.0,9205.0,1774.0,5935.0,1673.0,3.65,119400.0,INLAND +-121.37,37.77,19.0,2610.0,474.0,1290.0,452.0,4.1298,222800.0,INLAND +-121.4,37.74,20.0,2706.0,477.0,1236.0,474.0,4.15,322400.0,INLAND +-121.43,37.78,24.0,807.0,174.0,585.0,166.0,2.6181,163500.0,INLAND +-121.48,37.77,19.0,2364.0,373.0,1264.0,390.0,5.0176,274200.0,INLAND +-121.52,37.75,18.0,1544.0,272.0,825.0,286.0,4.3229,327300.0,INLAND +-121.46,37.73,20.0,2039.0,373.0,862.0,330.0,5.1629,222900.0,INLAND +-121.45,37.72,2.0,2239.0,321.0,766.0,219.0,5.75,240200.0,INLAND +-121.44,37.7,5.0,1365.0,196.0,591.0,156.0,6.0389,215100.0,INLAND +-121.42,37.71,7.0,8297.0,1433.0,4189.0,1271.0,4.3696,170700.0,INLAND +-121.42,37.76,18.0,5501.0,1051.0,2964.0,1009.0,4.1855,162100.0,INLAND +-121.42,37.75,33.0,1999.0,368.0,1061.0,390.0,3.5242,121400.0,INLAND +-121.42,37.74,45.0,818.0,144.0,340.0,138.0,4.8021,133500.0,INLAND +-121.42,37.74,38.0,773.0,147.0,320.0,134.0,2.825,152500.0,INLAND +-121.42,37.74,35.0,796.0,132.0,313.0,152.0,3.15,153200.0,INLAND +-121.42,37.75,33.0,1329.0,266.0,683.0,233.0,4.3687,128700.0,INLAND +-121.43,37.75,34.0,1280.0,268.0,754.0,294.0,3.1333,132000.0,INLAND +-121.43,37.75,41.0,1717.0,325.0,855.0,303.0,2.75,127300.0,INLAND +-121.43,37.75,42.0,1207.0,278.0,699.0,279.0,3.3611,117600.0,INLAND +-121.43,37.74,52.0,876.0,170.0,426.0,179.0,3.0865,119800.0,INLAND +-121.43,37.74,40.0,859.0,196.0,427.0,176.0,3.5789,110400.0,INLAND +-121.43,37.75,30.0,1912.0,451.0,1065.0,388.0,2.1424,125000.0,INLAND +-121.43,37.76,7.0,2125.0,508.0,1358.0,464.0,3.6312,147600.0,INLAND +-121.44,37.76,5.0,7264.0,1285.0,3670.0,1146.0,5.0443,194800.0,INLAND +-121.45,37.75,15.0,3846.0,677.0,2360.0,635.0,4.6173,164800.0,INLAND +-121.44,37.74,33.0,1875.0,363.0,970.0,381.0,3.5096,141700.0,INLAND +-121.44,37.75,29.0,918.0,159.0,417.0,166.0,4.2768,151300.0,INLAND +-121.44,37.75,16.0,2229.0,458.0,1199.0,445.0,3.4821,170600.0,INLAND +-121.42,37.74,19.0,1393.0,367.0,915.0,355.0,1.1957,103100.0,INLAND +-121.43,37.74,52.0,966.0,247.0,589.0,228.0,1.6937,108300.0,INLAND +-121.43,37.74,52.0,994.0,258.0,623.0,264.0,1.725,111500.0,INLAND +-121.44,37.74,25.0,456.0,116.0,370.0,106.0,3.1319,112500.0,INLAND +-121.44,37.73,7.0,8363.0,1314.0,3907.0,1068.0,5.3321,208100.0,INLAND +-121.43,37.73,40.0,1718.0,391.0,1312.0,388.0,2.9955,134700.0,INLAND +-121.42,37.73,2.0,2682.0,393.0,883.0,271.0,5.9934,196700.0,INLAND +-121.29,37.72,22.0,1630.0,404.0,4402.0,358.0,1.9792,63000.0,INLAND +-121.32,37.67,21.0,1494.0,271.0,781.0,255.0,4.3015,250000.0,INLAND +-121.47,37.58,14.0,1594.0,292.0,887.0,287.0,4.6625,294000.0,INLAND +-120.9,35.69,14.0,5020.0,909.0,2105.0,796.0,3.8158,248700.0,<1H OCEAN +-120.93,35.76,11.0,8997.0,1698.0,1825.0,756.0,3.23,154300.0,<1H OCEAN +-120.7,35.76,15.0,1914.0,425.0,1130.0,421.0,2.2165,90600.0,<1H OCEAN +-120.69,35.65,14.0,3487.0,889.0,2352.0,796.0,1.6303,144900.0,<1H OCEAN +-120.69,35.64,38.0,2564.0,546.0,1301.0,481.0,2.0076,114000.0,<1H OCEAN +-120.69,35.62,43.0,3044.0,652.0,1456.0,608.0,2.4567,140000.0,<1H OCEAN +-120.69,35.62,35.0,3451.0,713.0,1550.0,653.0,2.9167,161700.0,<1H OCEAN +-120.72,35.63,31.0,3476.0,644.0,1476.0,567.0,3.3472,195200.0,<1H OCEAN +-120.67,35.63,8.0,2690.0,410.0,1085.0,381.0,4.2841,256700.0,<1H OCEAN +-120.67,35.62,6.0,12779.0,2441.0,6085.0,2157.0,3.8661,168100.0,<1H OCEAN +-120.63,35.59,9.0,5782.0,1184.0,3026.0,1130.0,2.6528,113500.0,<1H OCEAN +-120.64,35.65,9.0,3466.0,673.0,2356.0,619.0,2.9926,158200.0,<1H OCEAN +-120.47,35.74,9.0,4267.0,785.0,2065.0,691.0,3.7303,162700.0,<1H OCEAN +-120.29,35.56,15.0,4760.0,871.0,2459.0,734.0,2.811,142100.0,<1H OCEAN +-120.6,35.6,13.0,4461.0,764.0,1795.0,640.0,4.475,206900.0,<1H OCEAN +-121.11,35.52,9.0,6044.0,1222.0,2239.0,972.0,3.24,264600.0,NEAR OCEAN +-121.14,35.55,13.0,5383.0,1070.0,1880.0,796.0,3.8019,271200.0,NEAR OCEAN +-121.12,35.58,16.0,4109.0,798.0,1298.0,626.0,3.4799,320800.0,NEAR OCEAN +-120.92,35.4,23.0,2059.0,354.0,636.0,278.0,3.6908,278800.0,NEAR OCEAN +-120.85,35.38,27.0,3493.0,909.0,1481.0,666.0,2.3075,184200.0,NEAR OCEAN +-120.86,35.39,23.0,1664.0,355.0,629.0,279.0,2.7344,188300.0,NEAR OCEAN +-120.86,35.4,21.0,2787.0,641.0,1106.0,501.0,2.7043,186200.0,NEAR OCEAN +-120.87,35.41,16.0,2168.0,444.0,782.0,374.0,3.0187,278100.0,NEAR OCEAN +-120.94,35.42,18.0,3418.0,686.0,970.0,453.0,3.7738,279400.0,NEAR OCEAN +-120.95,35.44,30.0,6346.0,1410.0,1769.0,887.0,2.6864,283600.0,NEAR OCEAN +-120.85,35.37,21.0,1033.0,195.0,588.0,187.0,2.8173,226900.0,NEAR OCEAN +-120.83,35.36,28.0,4323.0,886.0,1650.0,705.0,2.7266,266800.0,NEAR OCEAN +-120.84,35.35,27.0,2863.0,711.0,930.0,533.0,2.6205,221100.0,NEAR OCEAN +-120.84,35.37,34.0,3279.0,714.0,1397.0,646.0,2.5552,200000.0,NEAR OCEAN +-120.89,35.37,29.0,2046.0,588.0,846.0,410.0,1.65,227300.0,NEAR OCEAN +-120.84,35.33,15.0,3276.0,670.0,1520.0,613.0,3.6412,207800.0,NEAR OCEAN +-120.83,35.33,14.0,4155.0,787.0,2112.0,755.0,4.4766,192700.0,NEAR OCEAN +-120.82,35.32,12.0,3522.0,683.0,1780.0,662.0,3.3958,215800.0,NEAR OCEAN +-120.83,35.32,11.0,3252.0,701.0,1814.0,660.0,3.2226,183200.0,NEAR OCEAN +-120.84,35.32,15.0,2419.0,538.0,1279.0,522.0,3.4762,189600.0,NEAR OCEAN +-120.9,35.33,16.0,1576.0,287.0,595.0,262.0,3.588,266300.0,NEAR OCEAN +-120.84,35.32,17.0,4197.0,802.0,1656.0,732.0,3.526,183900.0,NEAR OCEAN +-120.84,35.31,23.0,3100.0,603.0,1515.0,609.0,2.8493,196100.0,NEAR OCEAN +-120.84,35.3,15.0,2062.0,327.0,781.0,316.0,4.9359,317700.0,NEAR OCEAN +-120.82,35.31,16.0,3924.0,699.0,1325.0,638.0,2.5172,293900.0,NEAR OCEAN +-120.8,35.33,20.0,2200.0,393.0,996.0,365.0,3.587,330000.0,NEAR OCEAN +-121.1,35.6,20.0,3389.0,704.0,1309.0,520.0,3.2112,204500.0,NEAR OCEAN +-120.65,35.29,36.0,1940.0,315.0,850.0,298.0,3.1818,249600.0,NEAR OCEAN +-120.66,35.29,23.0,1932.0,487.0,1380.0,472.0,1.9647,253600.0,NEAR OCEAN +-120.66,35.29,16.0,2272.0,629.0,1689.0,649.0,1.7031,195000.0,NEAR OCEAN +-120.67,35.3,19.0,1540.0,715.0,1799.0,635.0,0.7025,500001.0,NEAR OCEAN +-120.65,35.32,20.0,626.0,212.0,3574.0,261.0,1.0298,300000.0,NEAR OCEAN +-120.62,35.28,28.0,3952.0,592.0,1469.0,571.0,6.3144,328800.0,NEAR OCEAN +-120.65,35.29,29.0,1785.0,481.0,1344.0,472.0,1.4492,222900.0,NEAR OCEAN +-120.65,35.28,32.0,896.0,240.0,548.0,231.0,2.5455,165900.0,NEAR OCEAN +-120.65,35.27,27.0,2034.0,341.0,768.0,316.0,4.2411,258900.0,NEAR OCEAN +-120.65,35.27,15.0,2365.0,538.0,1446.0,490.0,2.5129,225900.0,NEAR OCEAN +-120.64,35.26,21.0,3298.0,716.0,1862.0,687.0,2.1507,221500.0,NEAR OCEAN +-120.63,35.27,23.0,1630.0,253.0,704.0,263.0,5.156,251300.0,NEAR OCEAN +-120.66,35.29,39.0,2163.0,652.0,1153.0,599.0,2.084,233300.0,NEAR OCEAN +-120.66,35.28,31.0,2773.0,844.0,1358.0,794.0,1.4036,209600.0,NEAR OCEAN +-120.66,35.28,46.0,2054.0,502.0,1170.0,494.0,2.1786,206300.0,NEAR OCEAN +-120.65,35.27,52.0,2254.0,642.0,1237.0,590.0,2.6208,227100.0,NEAR OCEAN +-120.66,35.27,46.0,2217.0,544.0,1107.0,527.0,2.8009,192600.0,NEAR OCEAN +-120.66,35.27,33.0,1664.0,455.0,1077.0,461.0,1.6875,174200.0,NEAR OCEAN +-120.66,35.27,17.0,2719.0,589.0,1386.0,570.0,3.7337,208200.0,NEAR OCEAN +-120.66,35.26,15.0,5540.0,1319.0,2383.0,1165.0,2.2656,226200.0,NEAR OCEAN +-120.67,35.3,32.0,4202.0,986.0,2309.0,956.0,2.2165,231700.0,NEAR OCEAN +-120.7,35.31,24.0,3504.0,521.0,1490.0,506.0,4.6719,337000.0,NEAR OCEAN +-120.68,35.29,37.0,1354.0,293.0,753.0,290.0,3.25,225000.0,NEAR OCEAN +-120.69,35.28,26.0,4225.0,886.0,1795.0,704.0,2.2847,247000.0,NEAR OCEAN +-120.67,35.29,44.0,2236.0,411.0,1036.0,437.0,3.0833,219300.0,NEAR OCEAN +-120.69,35.26,20.0,1248.0,231.0,722.0,225.0,4.625,221800.0,NEAR OCEAN +-120.7,35.28,14.0,3768.0,682.0,1884.0,664.0,4.6071,239900.0,NEAR OCEAN +-120.71,35.27,9.0,2568.0,421.0,1149.0,398.0,5.4287,331600.0,NEAR OCEAN +-120.68,35.26,26.0,1704.0,315.0,918.0,310.0,3.2464,208000.0,NEAR OCEAN +-120.69,35.25,15.0,4210.0,899.0,1933.0,867.0,2.794,262500.0,NEAR OCEAN +-120.7,35.32,46.0,118.0,17.0,6532.0,13.0,4.2639,350000.0,NEAR OCEAN +-120.52,35.24,5.0,4413.0,804.0,2003.0,725.0,5.0267,253300.0,<1H OCEAN +-120.68,35.25,16.0,4208.0,897.0,1634.0,806.0,2.2868,233700.0,NEAR OCEAN +-120.69,35.34,16.0,164.0,30.0,542.0,32.0,1.6563,42500.0,NEAR OCEAN +-120.81,35.19,14.0,3414.0,802.0,1236.0,632.0,3.7635,336200.0,NEAR OCEAN +-120.66,35.2,13.0,5138.0,713.0,1838.0,645.0,5.9676,380000.0,NEAR OCEAN +-120.7,35.14,17.0,5805.0,1097.0,1919.0,932.0,3.5352,357800.0,NEAR OCEAN +-120.68,35.14,34.0,3100.0,617.0,1155.0,542.0,3.0938,245900.0,NEAR OCEAN +-120.66,35.13,41.0,2666.0,751.0,940.0,507.0,1.9653,236100.0,<1H OCEAN +-120.63,35.13,16.0,2680.0,704.0,975.0,619.0,1.7878,55000.0,<1H OCEAN +-120.64,35.15,7.0,7922.0,1442.0,2863.0,1197.0,4.849,275000.0,<1H OCEAN +-120.59,35.13,8.0,6638.0,1054.0,2710.0,966.0,4.6776,295500.0,<1H OCEAN +-120.56,35.13,15.0,5818.0,924.0,2324.0,845.0,4.4033,267600.0,<1H OCEAN +-120.57,35.12,39.0,1656.0,333.0,866.0,317.0,2.8824,195200.0,<1H OCEAN +-120.57,35.11,18.0,2920.0,556.0,1068.0,552.0,3.5242,156800.0,<1H OCEAN +-120.59,35.11,25.0,3642.0,726.0,1729.0,673.0,3.155,205400.0,<1H OCEAN +-120.6,35.12,22.0,3342.0,644.0,1342.0,593.0,3.4509,217700.0,<1H OCEAN +-120.61,35.12,16.0,1671.0,354.0,935.0,340.0,2.5792,163800.0,<1H OCEAN +-120.59,35.12,27.0,3055.0,677.0,1407.0,610.0,2.1702,179700.0,<1H OCEAN +-120.6,35.11,17.0,2495.0,524.0,1292.0,501.0,2.2625,153000.0,<1H OCEAN +-120.59,35.11,20.0,3098.0,571.0,1449.0,611.0,3.5744,197800.0,<1H OCEAN +-120.61,35.12,31.0,1486.0,345.0,823.0,322.0,2.6974,165400.0,<1H OCEAN +-120.61,35.13,16.0,3431.0,721.0,1777.0,701.0,2.7301,190400.0,<1H OCEAN +-120.61,35.12,12.0,3430.0,793.0,1840.0,720.0,2.9821,162000.0,<1H OCEAN +-120.61,35.11,11.0,3733.0,831.0,1839.0,739.0,3.3062,158500.0,<1H OCEAN +-120.65,35.12,19.0,2949.0,662.0,1425.0,548.0,2.9615,178100.0,<1H OCEAN +-120.62,35.13,26.0,3971.0,803.0,1792.0,723.0,2.7128,209900.0,<1H OCEAN +-120.62,35.11,18.0,2241.0,544.0,1521.0,509.0,2.0292,155800.0,<1H OCEAN +-120.62,35.12,22.0,1240.0,294.0,768.0,288.0,2.655,160000.0,<1H OCEAN +-120.66,35.1,19.0,1583.0,392.0,704.0,269.0,2.1042,268300.0,<1H OCEAN +-120.61,35.1,14.0,2919.0,691.0,1896.0,577.0,2.4003,142100.0,<1H OCEAN +-120.61,35.1,17.0,2799.0,637.0,2015.0,592.0,3.0536,143600.0,<1H OCEAN +-120.6,35.1,16.0,3290.0,686.0,1497.0,655.0,2.6875,178200.0,<1H OCEAN +-120.58,35.0,37.0,523.0,119.0,374.0,95.0,1.4726,106300.0,<1H OCEAN +-120.61,35.06,13.0,2364.0,421.0,1257.0,380.0,4.6167,273100.0,<1H OCEAN +-120.56,35.07,14.0,6788.0,1216.0,2866.0,1036.0,3.3603,280200.0,<1H OCEAN +-120.52,35.06,11.0,1317.0,234.0,655.0,243.0,4.3611,329700.0,<1H OCEAN +-120.3,35.1,16.0,2819.0,479.0,1068.0,365.0,4.5461,270800.0,<1H OCEAN +-120.43,35.17,16.0,947.0,163.0,477.0,137.0,3.851,315000.0,<1H OCEAN +-120.57,35.18,16.0,5209.0,917.0,2284.0,809.0,4.0403,346100.0,<1H OCEAN +-120.48,35.05,24.0,2314.0,468.0,1549.0,463.0,2.8203,152600.0,<1H OCEAN +-120.47,35.04,29.0,1315.0,279.0,926.0,249.0,2.9375,144800.0,<1H OCEAN +-120.5,35.03,10.0,10463.0,1756.0,4660.0,1715.0,3.5682,277300.0,<1H OCEAN +-120.48,35.02,17.0,2721.0,477.0,1672.0,492.0,2.9798,204800.0,<1H OCEAN +-120.69,35.52,26.0,2758.0,571.0,1291.0,522.0,2.925,181400.0,<1H OCEAN +-120.68,35.51,17.0,1701.0,298.0,941.0,293.0,4.3218,209100.0,<1H OCEAN +-120.68,35.5,19.0,3369.0,673.0,1834.0,646.0,3.7672,173800.0,<1H OCEAN +-120.67,35.5,15.0,2752.0,546.0,1422.0,545.0,3.2813,175000.0,<1H OCEAN +-120.66,35.5,19.0,1861.0,364.0,1040.0,363.0,3.3125,163900.0,<1H OCEAN +-120.66,35.49,17.0,4422.0,945.0,2307.0,885.0,2.8285,171300.0,<1H OCEAN +-120.65,35.48,19.0,2310.0,471.0,1341.0,441.0,3.225,166900.0,<1H OCEAN +-120.64,35.46,6.0,5876.0,1406.0,2877.0,1304.0,2.5437,146400.0,<1H OCEAN +-120.69,35.49,16.0,2666.0,450.0,1203.0,429.0,4.1375,222400.0,<1H OCEAN +-120.68,35.48,15.0,2608.0,525.0,1351.0,502.0,2.7798,205800.0,<1H OCEAN +-120.67,35.48,18.0,2339.0,443.0,1097.0,416.0,3.3438,176100.0,<1H OCEAN +-120.66,35.47,18.0,2474.0,449.0,1269.0,431.0,3.9063,184800.0,<1H OCEAN +-120.66,35.46,17.0,3748.0,609.0,1860.0,612.0,4.5179,225600.0,<1H OCEAN +-120.7,35.55,10.0,3979.0,761.0,1834.0,671.0,3.5,172100.0,<1H OCEAN +-120.76,35.52,7.0,9613.0,1666.0,4487.0,1653.0,3.6667,250600.0,<1H OCEAN +-120.71,35.5,12.0,3098.0,453.0,1433.0,434.0,5.2508,292900.0,<1H OCEAN +-120.56,35.48,12.0,4161.0,731.0,1609.0,615.0,5.0947,267500.0,<1H OCEAN +-119.93,35.2,29.0,1649.0,342.0,671.0,264.0,3.0602,69800.0,INLAND +-120.49,35.35,17.0,3043.0,608.0,1457.0,545.0,3.1641,158600.0,<1H OCEAN +-120.65,35.41,15.0,6725.0,1111.0,3139.0,1029.0,4.1875,261600.0,<1H OCEAN +-120.64,35.47,8.0,416.0,121.0,936.0,97.0,2.1154,117200.0,<1H OCEAN +-122.4,37.68,36.0,3595.0,815.0,1649.0,755.0,3.3816,253400.0,NEAR BAY +-122.4,37.68,41.0,2267.0,486.0,1045.0,459.0,4.1146,272200.0,NEAR BAY +-122.32,37.69,48.0,592.0,122.0,340.0,143.0,5.966,315200.0,NEAR BAY +-122.41,37.7,23.0,1817.0,400.0,1376.0,382.0,2.4113,214200.0,NEAR BAY +-122.42,37.71,44.0,2080.0,489.0,1781.0,478.0,3.6827,215300.0,NEAR BAY +-122.43,37.71,24.0,4299.0,857.0,2249.0,788.0,4.6098,290400.0,NEAR BAY +-122.43,37.7,19.0,1733.0,354.0,959.0,348.0,4.7708,281700.0,NEAR BAY +-122.44,37.7,6.0,3523.0,664.0,1705.0,608.0,4.9318,258100.0,NEAR OCEAN +-122.45,37.7,46.0,2193.0,499.0,1814.0,489.0,4.0125,230100.0,NEAR OCEAN +-122.45,37.71,50.0,1441.0,283.0,1159.0,286.0,4.5417,233700.0,NEAR OCEAN +-122.45,37.71,49.0,2244.0,442.0,1948.0,423.0,4.7639,251500.0,NEAR OCEAN +-122.45,37.7,16.0,6457.0,1336.0,4375.0,1231.0,5.1788,267000.0,NEAR OCEAN +-122.46,37.7,37.0,1028.0,275.0,904.0,261.0,3.5035,238600.0,NEAR OCEAN +-122.46,37.69,35.0,1983.0,385.0,1577.0,414.0,4.0833,266700.0,NEAR OCEAN +-122.46,37.7,37.0,3029.0,738.0,2436.0,700.0,3.3214,243200.0,NEAR OCEAN +-122.47,37.7,45.0,3290.0,693.0,2466.0,666.0,3.6588,238600.0,NEAR OCEAN +-122.46,37.71,44.0,364.0,102.0,339.0,98.0,2.483,214300.0,NEAR OCEAN +-122.46,37.71,45.0,1799.0,394.0,1436.0,389.0,3.65,239900.0,NEAR OCEAN +-122.46,37.7,42.0,876.0,216.0,713.0,203.0,3.84,235900.0,NEAR OCEAN +-122.47,37.7,44.0,2034.0,423.0,1491.0,373.0,4.5341,236500.0,NEAR OCEAN +-122.47,37.71,37.0,1046.0,251.0,822.0,239.0,3.5,224400.0,NEAR OCEAN +-122.46,37.71,39.0,2076.0,482.0,1738.0,445.0,3.1958,232100.0,NEAR OCEAN +-122.48,37.7,33.0,4167.0,1398.0,2923.0,1314.0,3.049,307000.0,NEAR OCEAN +-122.48,37.7,33.0,4492.0,,3477.0,1537.0,3.0546,297900.0,NEAR OCEAN +-122.48,37.71,39.0,3615.0,632.0,1571.0,615.0,5.1149,314200.0,NEAR OCEAN +-122.48,37.71,29.0,1048.0,150.0,455.0,152.0,6.1278,417600.0,NEAR OCEAN +-122.54,37.7,36.0,3988.0,732.0,1793.0,708.0,4.2472,292500.0,NEAR OCEAN +-122.49,37.67,35.0,5275.0,903.0,2892.0,842.0,4.6771,266400.0,NEAR OCEAN +-122.49,37.68,35.0,2405.0,461.0,1583.0,471.0,5.0659,238000.0,NEAR OCEAN +-122.49,37.67,29.0,3795.0,675.0,2494.0,696.0,5.2848,260300.0,NEAR OCEAN +-122.49,37.7,36.0,1946.0,340.0,828.0,313.0,5.2811,287700.0,NEAR OCEAN +-122.49,37.69,36.0,1344.0,258.0,782.0,265.0,4.5,275600.0,NEAR OCEAN +-122.48,37.69,33.0,2347.0,512.0,1259.0,481.0,3.4492,264300.0,NEAR OCEAN +-122.49,37.69,35.0,2644.0,456.0,1465.0,430.0,4.9375,277000.0,NEAR OCEAN +-122.49,37.69,35.0,2576.0,443.0,1273.0,433.0,4.7391,272800.0,NEAR OCEAN +-122.47,37.7,47.0,737.0,126.0,370.0,136.0,3.775,281300.0,NEAR OCEAN +-122.47,37.69,27.0,2447.0,720.0,2104.0,657.0,3.449,239100.0,NEAR OCEAN +-122.47,37.69,30.0,837.0,213.0,606.0,199.0,4.875,258800.0,NEAR OCEAN +-122.48,37.69,42.0,2993.0,512.0,1594.0,546.0,4.4821,252400.0,NEAR OCEAN +-122.48,37.69,43.0,2661.0,455.0,1384.0,456.0,4.2421,257500.0,NEAR OCEAN +-122.46,37.69,26.0,4302.0,1125.0,3320.0,1100.0,3.4375,277700.0,NEAR OCEAN +-122.46,37.68,23.0,2812.0,769.0,1983.0,681.0,2.9413,229400.0,NEAR OCEAN +-122.47,37.69,35.0,1720.0,421.0,1452.0,425.0,3.5909,256100.0,NEAR OCEAN +-122.47,37.69,34.0,1954.0,357.0,1130.0,367.0,4.6447,304500.0,NEAR OCEAN +-122.47,37.68,31.0,4077.0,777.0,2544.0,738.0,4.5337,306700.0,NEAR OCEAN +-122.48,37.68,31.0,3506.0,653.0,2296.0,645.0,5.5647,268700.0,NEAR OCEAN +-122.48,37.67,15.0,2897.0,728.0,2340.0,720.0,3.3906,303700.0,NEAR OCEAN +-122.48,37.67,31.0,2609.0,433.0,1746.0,464.0,5.1054,294500.0,NEAR OCEAN +-122.49,37.68,34.0,3718.0,676.0,2510.0,632.0,5.3311,270800.0,NEAR OCEAN +-122.48,37.67,14.0,3395.0,1059.0,2258.0,945.0,2.964,319700.0,NEAR OCEAN +-122.45,37.69,17.0,2359.0,501.0,884.0,504.0,3.0625,87500.0,NEAR OCEAN +-122.45,37.67,35.0,491.0,98.0,274.0,97.0,4.4286,238600.0,NEAR OCEAN +-122.47,37.67,20.0,5689.0,992.0,3752.0,1002.0,5.5845,304300.0,NEAR OCEAN +-122.47,37.66,18.0,4172.0,806.0,3226.0,790.0,5.7535,297900.0,NEAR OCEAN +-122.46,37.67,16.0,3372.0,1101.0,2049.0,1021.0,4.1303,146500.0,NEAR OCEAN +-122.46,37.66,15.0,6082.0,1284.0,3861.0,1198.0,5.4221,284700.0,NEAR OCEAN +-122.46,37.65,21.0,2751.0,502.0,2027.0,491.0,5.2573,322900.0,NEAR OCEAN +-122.45,37.67,36.0,1664.0,326.0,963.0,322.0,4.7813,246400.0,NEAR OCEAN +-122.45,37.66,35.0,2738.0,509.0,1545.0,493.0,5.3446,263300.0,NEAR OCEAN +-122.46,37.66,36.0,2535.0,451.0,1390.0,436.0,5.3398,260900.0,NEAR OCEAN +-122.45,37.66,36.0,5456.0,926.0,2761.0,916.0,4.7755,280700.0,NEAR OCEAN +-122.44,37.65,38.0,5277.0,1008.0,2695.0,997.0,3.9722,276200.0,NEAR OCEAN +-122.43,37.66,29.0,3541.0,786.0,2259.0,770.0,4.3039,278400.0,NEAR OCEAN +-122.44,37.66,21.0,5108.0,1510.0,3288.0,1405.0,3.1927,252600.0,NEAR OCEAN +-122.44,37.66,36.0,1447.0,276.0,799.0,275.0,4.7639,265600.0,NEAR OCEAN +-122.44,37.67,35.0,1814.0,365.0,1025.0,384.0,4.425,268400.0,NEAR OCEAN +-122.42,37.67,42.0,2274.0,429.0,1255.0,397.0,5.1205,226300.0,NEAR OCEAN +-122.41,37.66,37.0,2155.0,446.0,1255.0,428.0,3.8438,250700.0,NEAR OCEAN +-122.42,37.66,41.0,2189.0,414.0,1063.0,409.0,4.7361,302600.0,NEAR OCEAN +-122.42,37.66,28.0,3520.0,672.0,1746.0,602.0,4.9236,273500.0,NEAR OCEAN +-122.42,37.66,36.0,725.0,121.0,335.0,140.0,4.125,327600.0,NEAR OCEAN +-122.41,37.66,32.0,1385.0,356.0,1096.0,353.0,4.475,246700.0,NEAR OCEAN +-122.41,37.66,34.0,1075.0,318.0,906.0,294.0,3.0052,242500.0,NEAR OCEAN +-122.41,37.66,40.0,1294.0,308.0,1177.0,301.0,3.6667,218800.0,NEAR OCEAN +-122.41,37.66,37.0,694.0,188.0,658.0,225.0,4.6103,237500.0,NEAR OCEAN +-122.41,37.66,44.0,431.0,195.0,682.0,212.0,3.2833,233300.0,NEAR OCEAN +-122.41,37.65,32.0,3436.0,868.0,2583.0,817.0,3.5039,232400.0,NEAR OCEAN +-122.42,37.66,26.0,3253.0,932.0,2246.0,855.0,2.6631,244000.0,NEAR OCEAN +-122.43,37.66,43.0,1769.0,387.0,1102.0,377.0,4.5493,281500.0,NEAR OCEAN +-122.42,37.65,39.0,4402.0,894.0,2941.0,887.0,3.8565,239800.0,NEAR OCEAN +-122.43,37.64,34.0,8400.0,1812.0,4101.0,1717.0,4.1033,301000.0,NEAR OCEAN +-122.43,37.64,42.0,4091.0,757.0,1861.0,771.0,4.207,272700.0,NEAR OCEAN +-122.45,37.64,19.0,6326.0,1025.0,3444.0,984.0,6.2498,353300.0,NEAR OCEAN +-122.46,37.64,26.0,2806.0,375.0,1617.0,396.0,5.3922,353700.0,NEAR OCEAN +-122.46,37.65,16.0,8676.0,1633.0,5130.0,1574.0,4.8096,262000.0,NEAR OCEAN +-122.46,37.64,17.0,3523.0,669.0,2150.0,666.0,4.5938,251200.0,NEAR OCEAN +-122.47,37.65,27.0,8103.0,1655.0,5023.0,1605.0,4.6452,236200.0,NEAR OCEAN +-122.53,37.66,25.0,7778.0,1493.0,4674.0,1451.0,5.4694,272400.0,NEAR OCEAN +-122.53,37.65,20.0,4582.0,1124.0,2325.0,1040.0,4.0556,275000.0,NEAR OCEAN +-122.48,37.65,39.0,3348.0,666.0,1817.0,668.0,4.2593,227400.0,NEAR OCEAN +-122.49,37.63,31.0,3109.0,621.0,1472.0,618.0,5.155,263900.0,NEAR OCEAN +-122.49,37.63,34.0,696.0,145.0,398.0,162.0,3.525,254100.0,NEAR OCEAN +-122.49,37.63,31.0,1256.0,328.0,785.0,297.0,3.2446,234600.0,NEAR OCEAN +-122.53,37.63,27.0,2589.0,658.0,1386.0,608.0,2.9087,228200.0,NEAR OCEAN +-122.48,37.64,7.0,120.0,21.0,50.0,27.0,12.5,281000.0,NEAR OCEAN +-122.47,37.61,34.0,4551.0,837.0,2208.0,834.0,5.4364,279300.0,NEAR OCEAN +-122.54,37.62,35.0,1481.0,277.0,747.0,254.0,4.4286,262100.0,NEAR OCEAN +-122.49,37.59,35.0,2683.0,475.0,1498.0,484.0,5.1282,262500.0,NEAR OCEAN +-122.5,37.59,36.0,1521.0,253.0,736.0,241.0,4.3542,237500.0,NEAR OCEAN +-122.5,37.6,35.0,2197.0,369.0,971.0,326.0,4.25,241700.0,NEAR OCEAN +-122.55,37.59,31.0,1331.0,245.0,598.0,225.0,4.1827,345500.0,NEAR OCEAN +-122.51,37.58,20.0,64.0,21.0,59.0,21.0,2.2375,450000.0,NEAR OCEAN +-122.49,37.6,33.0,3507.0,669.0,1697.0,660.0,4.0795,270600.0,NEAR OCEAN +-122.48,37.59,29.0,5889.0,959.0,2784.0,923.0,5.3991,273000.0,NEAR OCEAN +-122.48,37.57,34.0,4648.0,806.0,2282.0,814.0,4.5556,249000.0,NEAR OCEAN +-122.46,37.59,21.0,12902.0,2118.0,6160.0,2082.0,5.7653,325800.0,NEAR OCEAN +-122.46,37.63,22.0,6728.0,1382.0,3783.0,1310.0,5.0479,280400.0,NEAR OCEAN +-122.45,37.62,26.0,3507.0,512.0,1712.0,509.0,6.7206,344600.0,NEAR OCEAN +-122.45,37.63,28.0,4946.0,848.0,2683.0,824.0,5.748,302100.0,NEAR OCEAN +-122.44,37.63,35.0,5113.0,959.0,3004.0,964.0,4.7625,281300.0,NEAR OCEAN +-122.43,37.63,34.0,4135.0,687.0,2154.0,742.0,4.9732,342300.0,NEAR OCEAN +-122.43,37.61,21.0,10252.0,2595.0,4790.0,2428.0,4.1692,344500.0,NEAR OCEAN +-122.41,37.62,49.0,1464.0,302.0,636.0,259.0,4.25,284100.0,NEAR OCEAN +-122.41,37.61,46.0,2975.0,643.0,1479.0,577.0,3.8214,273600.0,NEAR OCEAN +-122.42,37.61,37.0,1866.0,300.0,822.0,305.0,4.7,341300.0,NEAR OCEAN +-122.42,37.62,39.0,1355.0,214.0,682.0,246.0,6.3443,324700.0,NEAR OCEAN +-122.42,37.62,40.0,1545.0,264.0,756.0,282.0,4.4643,308100.0,NEAR OCEAN +-122.42,37.61,17.0,1040.0,432.0,669.0,405.0,4.1513,137500.0,NEAR OCEAN +-122.42,37.63,46.0,1811.0,337.0,796.0,333.0,3.43,292900.0,NEAR OCEAN +-122.42,37.62,43.0,2367.0,409.0,1141.0,400.0,4.8295,319000.0,NEAR OCEAN +-122.42,37.62,36.0,1017.0,165.0,407.0,159.0,4.8,306800.0,NEAR OCEAN +-122.42,37.62,36.0,1538.0,256.0,671.0,247.0,4.4091,317900.0,NEAR OCEAN +-122.41,37.62,39.0,3119.0,758.0,1807.0,696.0,3.2216,242700.0,NEAR OCEAN +-122.4,37.62,32.0,3586.0,921.0,2249.0,911.0,3.1058,253000.0,NEAR OCEAN +-122.41,37.63,39.0,4220.0,1055.0,2720.0,1046.0,2.639,242500.0,NEAR OCEAN +-122.42,37.64,41.0,98.0,20.0,68.0,19.0,2.225,212500.0,NEAR OCEAN +-122.43,37.63,15.0,2748.0,997.0,1447.0,901.0,3.5214,144200.0,NEAR OCEAN +-122.42,37.63,46.0,66.0,11.0,30.0,12.0,2.375,275000.0,NEAR OCEAN +-122.41,37.63,37.0,1252.0,275.0,878.0,287.0,4.2262,228500.0,NEAR OCEAN +-122.41,37.63,35.0,865.0,226.0,602.0,217.0,3.0,229100.0,NEAR OCEAN +-122.4,37.62,44.0,1619.0,362.0,1064.0,335.0,4.0238,224200.0,NEAR OCEAN +-122.41,37.64,38.0,1204.0,268.0,921.0,247.0,4.4464,215400.0,NEAR OCEAN +-122.4,37.61,35.0,2084.0,549.0,1077.0,545.0,3.1628,318400.0,NEAR OCEAN +-122.38,37.6,33.0,2577.0,590.0,1867.0,566.0,3.3632,265100.0,NEAR OCEAN +-122.39,37.6,36.0,1770.0,499.0,1225.0,459.0,2.56,273100.0,NEAR OCEAN +-122.41,37.61,42.0,1602.0,262.0,705.0,255.0,5.7398,336400.0,NEAR OCEAN +-122.41,37.61,43.0,1934.0,303.0,847.0,300.0,4.7381,347400.0,NEAR OCEAN +-122.41,37.6,31.0,4424.0,834.0,1915.0,817.0,4.1364,412000.0,NEAR OCEAN +-122.42,37.6,34.0,3562.0,565.0,1542.0,563.0,5.8783,405100.0,NEAR OCEAN +-122.41,37.6,26.0,2754.0,402.0,1128.0,395.0,6.3719,466900.0,NEAR OCEAN +-122.41,37.59,34.0,3931.0,622.0,1717.0,621.0,6.2946,450000.0,NEAR OCEAN +-122.41,37.59,40.0,2401.0,383.0,894.0,356.0,5.6493,422400.0,NEAR OCEAN +-122.4,37.6,30.0,5351.0,1134.0,2558.0,1074.0,3.5817,369300.0,NEAR OCEAN +-122.4,37.6,52.0,1380.0,203.0,530.0,210.0,6.221,420300.0,NEAR OCEAN +-122.39,37.6,44.0,2304.0,384.0,986.0,379.0,4.652,387100.0,NEAR OCEAN +-122.39,37.6,34.0,707.0,,381.0,156.0,4.375,340900.0,NEAR OCEAN +-122.39,37.59,32.0,4497.0,,1846.0,715.0,6.1323,500001.0,NEAR OCEAN +-122.4,37.59,22.0,2754.0,477.0,1163.0,479.0,6.2306,500001.0,NEAR OCEAN +-122.38,37.59,31.0,3052.0,844.0,1581.0,788.0,3.0744,457700.0,NEAR OCEAN +-122.38,37.59,44.0,2089.0,348.0,837.0,317.0,4.6628,459200.0,NEAR OCEAN +-122.39,37.58,36.0,6026.0,852.0,2314.0,892.0,7.8997,500001.0,NEAR OCEAN +-122.4,37.58,26.0,3281.0,,1145.0,480.0,6.358,500001.0,NEAR OCEAN +-122.39,37.59,33.0,2064.0,299.0,813.0,303.0,6.0374,500001.0,NEAR OCEAN +-122.39,37.57,35.0,520.0,83.0,185.0,76.0,6.4865,450000.0,NEAR OCEAN +-122.37,37.6,26.0,15.0,3.0,11.0,3.0,5.048,350000.0,NEAR OCEAN +-122.37,37.59,39.0,4645.0,1196.0,2156.0,1113.0,3.4412,353800.0,NEAR OCEAN +-122.38,37.59,49.0,1657.0,266.0,613.0,270.0,5.7837,378100.0,NEAR OCEAN +-122.37,37.59,52.0,2272.0,403.0,963.0,376.0,5.7245,500000.0,NEAR OCEAN +-122.37,37.58,52.0,2188.0,361.0,917.0,357.0,4.4,500000.0,NEAR OCEAN +-122.38,37.58,52.0,1704.0,226.0,671.0,243.0,8.4704,500001.0,NEAR OCEAN +-122.38,37.58,52.0,2039.0,299.0,772.0,303.0,6.471,500001.0,NEAR OCEAN +-122.36,37.58,52.0,3084.0,595.0,1324.0,571.0,5.0756,374200.0,NEAR OCEAN +-122.36,37.58,37.0,3325.0,734.0,1468.0,692.0,4.0987,434000.0,NEAR OCEAN +-122.37,37.58,43.0,2506.0,432.0,967.0,428.0,4.7404,500001.0,NEAR OCEAN +-122.37,37.58,52.0,1900.0,290.0,665.0,276.0,4.5486,500001.0,NEAR OCEAN +-122.34,37.59,44.0,1395.0,269.0,736.0,288.0,5.6206,386400.0,NEAR OCEAN +-122.33,37.58,40.0,2362.0,468.0,992.0,425.0,4.7917,359900.0,NEAR OCEAN +-122.34,37.58,50.0,2784.0,743.0,1622.0,698.0,3.8413,372200.0,NEAR OCEAN +-122.35,37.58,52.0,2495.0,458.0,1081.0,471.0,4.0855,410800.0,NEAR OCEAN +-122.36,37.59,20.0,2638.0,854.0,1352.0,718.0,3.5125,350600.0,NEAR OCEAN +-122.35,37.58,30.0,5039.0,1564.0,2129.0,1536.0,3.3469,345000.0,NEAR OCEAN +-122.35,37.58,26.0,854.0,246.0,396.0,231.0,2.8393,375000.0,NEAR OCEAN +-122.34,37.57,39.0,2647.0,616.0,1254.0,555.0,4.2407,433800.0,NEAR OCEAN +-122.35,37.57,52.0,2059.0,345.0,800.0,308.0,4.97,500001.0,NEAR OCEAN +-122.37,37.58,34.0,2697.0,313.0,810.0,279.0,12.4291,500001.0,NEAR OCEAN +-122.36,37.57,35.0,1774.0,205.0,588.0,207.0,10.7339,500001.0,NEAR OCEAN +-122.36,37.56,32.0,4684.0,540.0,1512.0,511.0,15.0001,500001.0,NEAR OCEAN +-122.37,37.56,21.0,7189.0,874.0,2440.0,846.0,11.6833,500001.0,NEAR OCEAN +-122.34,37.56,39.0,3562.0,391.0,1139.0,391.0,12.6417,500001.0,NEAR OCEAN +-122.34,37.55,25.0,4470.0,518.0,1507.0,504.0,13.3913,500001.0,NEAR OCEAN +-122.36,37.54,23.0,6184.0,747.0,2165.0,700.0,10.1675,500001.0,NEAR OCEAN +-122.35,37.56,52.0,1659.0,191.0,519.0,201.0,14.4219,500001.0,NEAR OCEAN +-122.34,37.57,52.0,2635.0,408.0,967.0,374.0,7.0422,500001.0,NEAR OCEAN +-122.34,37.57,52.0,2547.0,373.0,876.0,359.0,8.2598,500001.0,NEAR OCEAN +-122.35,37.57,52.0,2170.0,269.0,784.0,274.0,10.4286,500001.0,NEAR OCEAN +-122.34,37.57,28.0,3751.0,949.0,1691.0,846.0,3.9728,300000.0,NEAR OCEAN +-122.33,37.57,43.0,2543.0,621.0,1301.0,606.0,3.1111,318400.0,NEAR OCEAN +-122.33,37.57,27.0,3085.0,876.0,1453.0,896.0,3.4333,290000.0,NEAR OCEAN +-122.33,37.58,27.0,5144.0,1481.0,2518.0,1447.0,3.4836,287900.0,NEAR OCEAN +-122.33,37.58,28.0,2784.0,736.0,1534.0,685.0,3.38,285400.0,NEAR OCEAN +-122.31,37.6,34.0,3225.0,726.0,1958.0,656.0,3.6811,273000.0,NEAR BAY +-122.31,37.58,44.0,1990.0,442.0,1141.0,424.0,3.9696,258300.0,NEAR BAY +-122.31,37.57,45.0,1165.0,236.0,845.0,251.0,4.1875,267300.0,NEAR OCEAN +-122.33,37.58,43.0,1772.0,422.0,1573.0,401.0,2.7474,233100.0,NEAR OCEAN +-122.32,37.57,42.0,2574.0,614.0,2377.0,588.0,3.2891,237900.0,NEAR OCEAN +-122.32,37.57,33.0,3384.0,819.0,2626.0,793.0,3.2285,234800.0,NEAR OCEAN +-122.32,37.57,52.0,499.0,148.0,318.0,145.0,2.9934,256300.0,NEAR OCEAN +-122.31,37.57,42.0,3157.0,676.0,1603.0,629.0,3.7422,292600.0,NEAR OCEAN +-122.32,37.56,44.0,537.0,173.0,355.0,194.0,2.8571,250000.0,NEAR OCEAN +-122.33,37.57,20.0,2126.0,643.0,1112.0,597.0,3.625,283300.0,NEAR OCEAN +-122.32,37.56,9.0,1150.0,287.0,377.0,243.0,3.8317,237500.0,NEAR OCEAN +-122.33,37.56,34.0,6394.0,1619.0,2400.0,1496.0,3.4902,500001.0,NEAR OCEAN +-122.32,37.56,49.0,2016.0,299.0,691.0,288.0,5.549,500001.0,NEAR OCEAN +-122.32,37.56,26.0,2339.0,704.0,1283.0,654.0,3.162,415000.0,NEAR OCEAN +-122.33,37.56,50.0,1975.0,245.0,644.0,251.0,10.0743,500001.0,NEAR OCEAN +-122.32,37.55,50.0,2501.0,433.0,1050.0,410.0,4.6406,500001.0,NEAR OCEAN +-122.33,37.55,51.0,2565.0,332.0,870.0,309.0,9.3694,500001.0,NEAR OCEAN +-122.34,37.55,44.0,2465.0,328.0,843.0,324.0,6.9533,500001.0,NEAR OCEAN +-122.31,37.56,52.0,2351.0,494.0,1126.0,482.0,3.9688,356900.0,NEAR OCEAN +-122.31,37.55,52.0,900.0,183.0,371.0,166.0,3.25,296400.0,NEAR OCEAN +-122.32,37.55,46.0,1437.0,266.0,607.0,263.0,4.8068,369700.0,NEAR OCEAN +-122.32,37.55,44.0,2151.0,411.0,849.0,370.0,4.4583,397100.0,NEAR OCEAN +-122.33,37.55,33.0,2199.0,312.0,827.0,319.0,6.1349,500001.0,NEAR OCEAN +-122.32,37.54,34.0,3661.0,692.0,1608.0,656.0,5.0774,407200.0,NEAR OCEAN +-122.34,37.53,27.0,3339.0,481.0,1354.0,458.0,7.3081,464600.0,NEAR OCEAN +-122.33,37.53,18.0,4493.0,760.0,1784.0,725.0,6.7042,413000.0,NEAR OCEAN +-122.35,37.53,27.0,2169.0,305.0,905.0,319.0,7.7743,453100.0,NEAR OCEAN +-122.34,37.52,34.0,3559.0,560.0,1747.0,550.0,6.6959,411200.0,NEAR OCEAN +-122.33,37.53,25.0,1729.0,383.0,769.0,352.0,4.0417,458500.0,NEAR OCEAN +-122.32,37.52,17.0,6645.0,1034.0,2557.0,1032.0,6.3892,480800.0,NEAR OCEAN +-122.3,37.53,37.0,1338.0,215.0,535.0,221.0,5.4351,376600.0,NEAR OCEAN +-122.3,37.53,40.0,1833.0,308.0,751.0,306.0,6.0,384200.0,NEAR OCEAN +-122.3,37.53,38.0,984.0,171.0,429.0,157.0,5.3261,376800.0,NEAR OCEAN +-122.31,37.52,35.0,1817.0,262.0,659.0,262.0,6.8336,457200.0,NEAR OCEAN +-122.31,37.53,39.0,1160.0,191.0,508.0,185.0,5.9539,379100.0,NEAR OCEAN +-122.3,37.54,39.0,4292.0,1097.0,1758.0,987.0,2.9405,340500.0,NEAR OCEAN +-122.3,37.53,43.0,1748.0,366.0,984.0,371.0,4.5116,337800.0,NEAR OCEAN +-122.29,37.53,41.0,839.0,190.0,419.0,215.0,5.012,368200.0,NEAR OCEAN +-122.31,37.54,45.0,1222.0,220.0,492.0,205.0,5.539,396900.0,NEAR OCEAN +-122.31,37.54,46.0,2444.0,397.0,952.0,402.0,4.75,388200.0,NEAR OCEAN +-122.31,37.53,41.0,1608.0,269.0,676.0,267.0,4.6125,361700.0,NEAR OCEAN +-122.32,37.53,39.0,2795.0,464.0,1183.0,443.0,5.779,387100.0,NEAR OCEAN +-122.31,37.55,27.0,3931.0,933.0,1877.0,851.0,3.9722,354100.0,NEAR OCEAN +-122.31,37.54,49.0,1340.0,281.0,660.0,284.0,4.163,393800.0,NEAR OCEAN +-122.31,37.54,38.0,1946.0,407.0,975.0,417.0,4.0726,385400.0,NEAR OCEAN +-122.31,37.54,42.0,1159.0,261.0,465.0,247.0,3.1842,352800.0,NEAR OCEAN +-122.3,37.55,35.0,3675.0,735.0,1930.0,715.0,3.9833,342800.0,NEAR OCEAN +-122.31,37.55,45.0,507.0,140.0,305.0,139.0,2.6159,272900.0,NEAR OCEAN +-122.31,37.56,45.0,1685.0,321.0,815.0,314.0,4.2955,309700.0,NEAR OCEAN +-122.31,37.56,36.0,1727.0,340.0,952.0,337.0,4.7917,316000.0,NEAR OCEAN +-122.31,37.56,45.0,1792.0,301.0,829.0,318.0,4.9013,330100.0,NEAR OCEAN +-122.31,37.56,40.0,1351.0,330.0,701.0,297.0,3.32,292900.0,NEAR OCEAN +-122.31,37.57,37.0,1437.0,305.0,979.0,331.0,4.0,273700.0,NEAR OCEAN +-122.31,37.57,31.0,2197.0,477.0,1193.0,394.0,4.6371,271100.0,NEAR OCEAN +-122.3,37.57,36.0,1973.0,352.0,1169.0,370.0,5.033,270900.0,NEAR BAY +-122.3,37.56,37.0,1962.0,367.0,1267.0,382.0,4.7344,271800.0,NEAR OCEAN +-122.3,37.57,36.0,2406.0,436.0,1189.0,403.0,4.7917,276100.0,NEAR BAY +-122.29,37.56,34.0,1693.0,281.0,846.0,291.0,5.3683,339400.0,NEAR BAY +-122.3,37.56,36.0,1379.0,228.0,750.0,227.0,5.5381,282000.0,NEAR OCEAN +-122.29,37.56,36.0,805.0,140.0,445.0,139.0,5.8221,289400.0,NEAR BAY +-122.3,37.56,35.0,1873.0,351.0,945.0,333.0,5.5184,274800.0,NEAR OCEAN +-122.29,37.56,12.0,6474.0,1467.0,2516.0,1390.0,5.0353,305800.0,NEAR BAY +-122.26,37.55,17.0,4576.0,814.0,1941.0,807.0,5.9572,443800.0,NEAR BAY +-122.26,37.55,17.0,1321.0,425.0,683.0,408.0,4.7045,500001.0,NEAR BAY +-122.27,37.55,16.0,4789.0,816.0,1840.0,763.0,6.7474,338200.0,NEAR BAY +-122.26,37.54,16.0,2118.0,333.0,770.0,318.0,7.2477,376000.0,NEAR BAY +-122.27,37.55,15.0,1958.0,282.0,811.0,284.0,8.1221,483300.0,NEAR BAY +-122.28,37.55,17.0,4199.0,629.0,2020.0,630.0,6.1228,375700.0,NEAR BAY +-122.27,37.56,17.0,3211.0,847.0,1553.0,812.0,4.9434,292100.0,NEAR BAY +-122.27,37.56,5.0,4921.0,1179.0,1810.0,1073.0,5.6936,322200.0,NEAR BAY +-122.26,37.54,13.0,1422.0,295.0,395.0,195.0,5.3247,327800.0,NEAR BAY +-122.26,37.54,5.0,3264.0,442.0,1607.0,453.0,9.1415,500001.0,NEAR BAY +-122.26,37.54,5.0,1649.0,388.0,779.0,376.0,6.9635,417300.0,NEAR BAY +-122.27,37.54,5.0,2140.0,420.0,990.0,394.0,6.035,438800.0,NEAR BAY +-122.27,37.54,16.0,3913.0,565.0,1752.0,557.0,7.3644,419700.0,NEAR BAY +-122.27,37.54,15.0,2126.0,310.0,905.0,306.0,8.9083,500001.0,NEAR BAY +-122.26,37.56,23.0,7283.0,1342.0,3399.0,1298.0,5.6683,391000.0,NEAR BAY +-122.26,37.57,23.0,7995.0,1254.0,3484.0,1198.0,6.5948,404000.0,NEAR BAY +-122.25,37.56,19.0,7976.0,1406.0,3437.0,1338.0,5.6396,430300.0,NEAR BAY +-122.29,37.55,27.0,3789.0,874.0,2243.0,866.0,4.39,270100.0,NEAR OCEAN +-122.28,37.54,24.0,5114.0,1357.0,3169.0,1268.0,3.9699,293200.0,NEAR OCEAN +-122.29,37.54,43.0,2268.0,438.0,1151.0,449.0,4.9091,293200.0,NEAR OCEAN +-122.28,37.54,37.0,991.0,180.0,463.0,177.0,5.1701,294200.0,NEAR OCEAN +-122.29,37.54,39.0,1459.0,285.0,761.0,291.0,5.0081,298100.0,NEAR OCEAN +-122.29,37.54,41.0,1743.0,349.0,811.0,349.0,4.9464,282400.0,NEAR OCEAN +-122.29,37.53,35.0,2043.0,511.0,1089.0,504.0,3.0278,310600.0,NEAR OCEAN +-122.28,37.53,15.0,5417.0,1199.0,2593.0,1098.0,4.8047,438000.0,NEAR OCEAN +-122.28,37.53,34.0,1980.0,385.0,970.0,391.0,5.1207,310900.0,NEAR OCEAN +-122.27,37.53,43.0,1145.0,230.0,586.0,254.0,3.5,267400.0,NEAR OCEAN +-122.28,37.53,25.0,3710.0,1015.0,2068.0,958.0,3.5445,286700.0,NEAR OCEAN +-122.29,37.52,33.0,4104.0,751.0,1837.0,771.0,5.3506,388100.0,NEAR OCEAN +-122.28,37.52,27.0,2958.0,655.0,1285.0,577.0,4.0801,397800.0,NEAR OCEAN +-122.28,37.52,29.0,1526.0,355.0,724.0,315.0,4.0313,435200.0,NEAR OCEAN +-122.28,37.52,38.0,2197.0,357.0,1228.0,373.0,5.4719,397900.0,NEAR OCEAN +-122.29,37.52,38.0,3767.0,603.0,1455.0,615.0,6.8787,386800.0,NEAR OCEAN +-122.3,37.52,38.0,2769.0,387.0,994.0,395.0,5.5902,417000.0,NEAR OCEAN +-122.3,37.51,35.0,2789.0,445.0,1156.0,404.0,5.4322,391000.0,NEAR OCEAN +-122.3,37.52,32.0,2297.0,347.0,871.0,342.0,8.1039,382200.0,NEAR OCEAN +-122.31,37.52,24.0,2328.0,335.0,969.0,354.0,7.7364,435800.0,NEAR OCEAN +-122.32,37.52,26.0,4042.0,591.0,1611.0,578.0,8.4693,419200.0,NEAR OCEAN +-122.31,37.5,22.0,14034.0,3020.0,6266.0,2952.0,4.3939,491200.0,NEAR OCEAN +-122.27,37.52,35.0,1051.0,259.0,517.0,234.0,3.7,339700.0,NEAR OCEAN +-122.27,37.51,36.0,1406.0,224.0,598.0,237.0,5.8964,414800.0,NEAR OCEAN +-122.29,37.51,35.0,3040.0,520.0,1374.0,518.0,6.1004,426400.0,NEAR OCEAN +-122.26,37.52,34.0,483.0,131.0,291.0,157.0,3.0833,256300.0,NEAR OCEAN +-122.26,37.51,46.0,672.0,149.0,351.0,136.0,5.3264,258100.0,NEAR OCEAN +-122.25,37.51,45.0,989.0,174.0,504.0,180.0,4.8382,289400.0,NEAR OCEAN +-122.25,37.5,44.0,348.0,79.0,154.0,73.0,4.7708,253800.0,NEAR OCEAN +-122.27,37.51,39.0,3996.0,793.0,1744.0,761.0,4.5075,364900.0,NEAR OCEAN +-122.26,37.51,29.0,3703.0,1075.0,1611.0,1025.0,2.7075,323800.0,NEAR OCEAN +-122.26,37.5,24.0,2307.0,510.0,842.0,507.0,3.6111,341500.0,NEAR OCEAN +-122.26,37.5,52.0,878.0,186.0,393.0,186.0,3.7045,360500.0,NEAR OCEAN +-122.25,37.5,45.0,1812.0,336.0,752.0,329.0,4.95,345000.0,NEAR OCEAN +-122.25,37.49,43.0,2607.0,477.0,1225.0,461.0,4.224,349600.0,NEAR OCEAN +-122.25,37.49,40.0,2709.0,521.0,1156.0,510.0,4.6366,395500.0,NEAR OCEAN +-122.25,37.49,44.0,4420.0,743.0,1790.0,735.0,6.142,394700.0,NEAR OCEAN +-122.26,37.5,44.0,6983.0,1131.0,2818.0,1115.0,5.6271,374800.0,NEAR OCEAN +-122.28,37.51,33.0,4719.0,,1980.0,757.0,6.1064,405000.0,NEAR OCEAN +-122.28,37.5,33.0,6499.0,998.0,2694.0,957.0,7.4787,431300.0,NEAR OCEAN +-122.28,37.49,25.0,7335.0,1157.0,2626.0,1049.0,6.5475,500001.0,NEAR OCEAN +-122.28,37.49,29.0,4148.0,635.0,1638.0,627.0,6.912,457200.0,NEAR OCEAN +-122.27,37.48,26.0,3542.0,507.0,1392.0,524.0,8.5184,500001.0,NEAR OCEAN +-122.26,37.48,34.0,4453.0,682.0,1805.0,672.0,5.6038,451300.0,NEAR OCEAN +-122.29,37.48,15.0,5480.0,892.0,2009.0,831.0,7.4678,500001.0,NEAR OCEAN +-122.27,37.47,44.0,3022.0,473.0,1235.0,477.0,6.7058,495900.0,NEAR OCEAN +-122.26,37.46,26.0,5067.0,750.0,1996.0,728.0,7.0001,500001.0,NEAR OCEAN +-122.28,37.47,44.0,863.0,114.0,281.0,99.0,6.8879,500001.0,NEAR OCEAN +-122.24,37.47,41.0,1183.0,203.0,455.0,171.0,5.1071,314100.0,NEAR OCEAN +-122.25,37.48,37.0,3507.0,569.0,1663.0,608.0,5.0863,440300.0,NEAR OCEAN +-122.24,37.47,40.0,1504.0,270.0,689.0,287.0,6.1244,308800.0,NEAR OCEAN +-122.25,37.47,38.0,645.0,124.0,265.0,103.0,5.4688,305000.0,NEAR OCEAN +-122.25,37.47,35.0,3183.0,515.0,1313.0,487.0,5.9062,383200.0,NEAR OCEAN +-122.25,37.48,45.0,2743.0,390.0,974.0,400.0,7.1621,500001.0,NEAR OCEAN +-122.24,37.48,45.0,4126.0,696.0,1722.0,668.0,4.8966,362100.0,NEAR OCEAN +-122.24,37.48,40.0,4459.0,1027.0,2080.0,982.0,3.5322,361900.0,NEAR OCEAN +-122.24,37.48,47.0,2423.0,407.0,1010.0,407.0,6.2154,362700.0,NEAR OCEAN +-122.24,37.49,30.0,2956.0,590.0,1191.0,594.0,3.7463,427600.0,NEAR OCEAN +-122.24,37.49,38.0,4105.0,950.0,2561.0,909.0,3.8684,265600.0,NEAR OCEAN +-122.21,37.48,39.0,1535.0,340.0,1204.0,370.0,2.8482,247200.0,NEAR BAY +-122.23,37.49,11.0,840.0,329.0,1338.0,345.0,2.3333,241700.0,NEAR OCEAN +-122.21,37.49,24.0,2528.0,947.0,2437.0,861.0,2.2746,225000.0,NEAR BAY +-122.22,37.48,47.0,2570.0,783.0,3107.0,724.0,2.8058,229500.0,NEAR OCEAN +-122.22,37.48,34.0,1541.0,584.0,1564.0,558.0,2.56,250000.0,NEAR OCEAN +-122.24,37.49,19.0,322.0,112.0,191.0,102.0,2.5833,500001.0,NEAR OCEAN +-122.24,37.55,3.0,6164.0,1175.0,2198.0,975.0,6.7413,435900.0,NEAR BAY +-122.25,37.53,16.0,4428.0,664.0,1677.0,623.0,7.6864,422500.0,NEAR BAY +-122.26,37.53,4.0,5233.0,1109.0,1690.0,907.0,6.2007,311800.0,NEAR BAY +-122.25,37.52,14.0,1472.0,291.0,876.0,292.0,4.3594,366000.0,NEAR BAY +-122.21,37.52,18.0,2962.0,945.0,1639.0,851.0,2.7399,87500.0,NEAR BAY +-122.19,37.48,35.0,7067.0,1646.0,5380.0,1597.0,4.1776,265300.0,NEAR BAY +-122.21,37.48,20.0,505.0,216.0,326.0,216.0,2.9286,237500.0,NEAR BAY +-122.21,37.48,37.0,1326.0,335.0,1771.0,335.0,3.0147,218100.0,NEAR BAY +-122.2,37.48,32.0,640.0,166.0,991.0,160.0,1.9844,270000.0,NEAR BAY +-122.2,37.48,41.0,733.0,155.0,652.0,140.0,5.1654,233600.0,NEAR BAY +-122.2,37.48,30.0,1170.0,258.0,610.0,243.0,3.4427,263500.0,NEAR BAY +-122.19,37.48,45.0,886.0,165.0,492.0,173.0,4.2708,267000.0,NEAR BAY +-122.19,37.48,38.0,1300.0,269.0,608.0,292.0,4.5568,286900.0,NEAR BAY +-122.19,37.47,44.0,1371.0,263.0,589.0,301.0,4.8068,312300.0,NEAR BAY +-122.2,37.47,44.0,1927.0,332.0,846.0,362.0,4.2083,278200.0,NEAR BAY +-122.2,37.47,37.0,1053.0,266.0,939.0,267.0,3.1989,320800.0,NEAR BAY +-122.2,37.47,37.0,1403.0,369.0,1587.0,331.0,2.8258,232800.0,NEAR BAY +-122.21,37.47,33.0,1266.0,415.0,1991.0,334.0,2.92,202800.0,NEAR OCEAN +-122.21,37.47,26.0,1777.0,555.0,1966.0,497.0,3.0472,211000.0,NEAR OCEAN +-122.21,37.47,43.0,733.0,162.0,497.0,175.0,3.2708,255300.0,NEAR OCEAN +-122.22,37.47,23.0,7740.0,1943.0,4124.0,1743.0,3.3268,322800.0,NEAR OCEAN +-122.22,37.47,35.0,367.0,113.0,398.0,109.0,2.5,166700.0,NEAR OCEAN +-122.22,37.47,28.0,5956.0,1612.0,3571.0,1549.0,3.1864,272800.0,NEAR OCEAN +-122.23,37.48,33.0,3108.0,805.0,1895.0,717.0,3.3015,267700.0,NEAR OCEAN +-122.23,37.47,39.0,5264.0,1259.0,3057.0,1265.0,3.623,276600.0,NEAR OCEAN +-122.23,37.48,38.0,1578.0,399.0,879.0,388.0,2.7969,298400.0,NEAR OCEAN +-122.24,37.47,35.0,2283.0,491.0,1148.0,436.0,4.5556,318600.0,NEAR OCEAN +-122.24,37.47,36.0,2021.0,433.0,1117.0,432.0,3.929,303100.0,NEAR OCEAN +-122.23,37.46,33.0,2643.0,464.0,1015.0,427.0,4.2232,363700.0,NEAR OCEAN +-122.23,37.46,26.0,4670.0,1039.0,2103.0,933.0,4.4167,333800.0,NEAR OCEAN +-122.25,37.46,33.0,6841.0,950.0,2681.0,980.0,7.1088,443300.0,NEAR OCEAN +-122.24,37.46,36.0,4686.0,781.0,2254.0,845.0,6.1043,343500.0,NEAR OCEAN +-122.26,37.45,17.0,2742.0,441.0,986.0,421.0,5.9285,496000.0,NEAR OCEAN +-122.23,37.46,36.0,6090.0,1057.0,3081.0,1075.0,5.6629,343600.0,NEAR OCEAN +-122.22,37.46,37.0,2586.0,495.0,1208.0,502.0,4.3214,342700.0,NEAR OCEAN +-122.23,37.45,34.0,4177.0,723.0,1586.0,660.0,5.0457,395100.0,NEAR OCEAN +-122.23,37.45,29.0,1617.0,235.0,758.0,246.0,7.7932,469900.0,NEAR OCEAN +-122.22,37.46,13.0,2888.0,546.0,1182.0,504.0,6.0255,409300.0,NEAR OCEAN +-122.2,37.46,40.0,1723.0,208.0,976.0,209.0,9.8892,500001.0,NEAR OCEAN +-122.2,37.44,31.0,2328.0,270.0,722.0,247.0,15.0001,500001.0,NEAR OCEAN +-122.22,37.44,32.0,4281.0,501.0,1318.0,484.0,15.0001,500001.0,NEAR OCEAN +-122.21,37.46,48.0,2560.0,322.0,921.0,301.0,10.8758,500001.0,NEAR OCEAN +-122.21,37.46,40.0,1777.0,207.0,577.0,207.0,15.0001,500001.0,NEAR OCEAN +-122.18,37.46,40.0,2529.0,293.0,831.0,258.0,15.0001,500001.0,NEAR BAY +-122.2,37.47,40.0,2959.0,389.0,985.0,365.0,9.9025,500001.0,NEAR BAY +-122.18,37.47,37.0,2848.0,328.0,852.0,327.0,13.367,500001.0,NEAR BAY +-122.16,37.47,44.0,2581.0,437.0,1006.0,414.0,5.397,341700.0,NEAR BAY +-122.17,37.48,39.0,2427.0,401.0,1178.0,408.0,5.9629,352700.0,NEAR BAY +-122.16,37.47,33.0,3687.0,852.0,3091.0,852.0,2.6506,162600.0,NEAR BAY +-122.16,37.48,36.0,2238.0,479.0,1949.0,457.0,2.3769,157300.0,NEAR BAY +-122.14,37.5,46.0,30.0,4.0,13.0,5.0,15.0001,500001.0,NEAR BAY +-122.14,37.48,36.0,1210.0,236.0,981.0,239.0,4.0039,148900.0,NEAR BAY +-122.14,37.47,36.0,2081.0,412.0,1931.0,373.0,3.7917,160600.0,NEAR BAY +-122.12,37.48,36.0,880.0,177.0,795.0,188.0,3.8194,159400.0,NEAR BAY +-122.13,37.47,25.0,1630.0,353.0,1546.0,371.0,5.0893,173400.0,NEAR BAY +-122.13,37.46,37.0,1576.0,334.0,1385.0,323.0,2.5294,159400.0,NEAR BAY +-122.13,37.46,35.0,1321.0,300.0,1133.0,287.0,3.7312,159600.0,NEAR BAY +-122.12,37.45,38.0,1276.0,314.0,955.0,287.0,2.0096,155700.0,NEAR BAY +-122.13,37.46,31.0,2247.0,573.0,1711.0,511.0,3.2642,185600.0,NEAR BAY +-122.13,37.47,30.0,1480.0,294.0,1126.0,301.0,4.983,166700.0,NEAR BAY +-122.14,37.47,37.0,3373.0,815.0,2909.0,705.0,2.8868,156600.0,NEAR BAY +-122.15,37.47,37.0,1844.0,382.0,1634.0,417.0,2.7993,145500.0,NEAR BAY +-122.15,37.47,38.0,1560.0,301.0,1331.0,316.0,3.0521,151500.0,NEAR BAY +-122.15,37.46,30.0,4198.0,1244.0,2678.0,1147.0,3.6712,308600.0,NEAR BAY +-122.14,37.46,27.0,5580.0,2009.0,4165.0,1763.0,2.4375,189000.0,NEAR BAY +-122.15,37.47,39.0,1295.0,239.0,566.0,242.0,5.6407,326400.0,NEAR BAY +-122.15,37.46,42.0,1995.0,412.0,794.0,374.0,5.6234,379600.0,NEAR BAY +-122.16,37.46,45.0,2068.0,348.0,844.0,366.0,6.227,417800.0,NEAR BAY +-122.16,37.45,50.0,196.0,41.0,76.0,42.0,7.6129,412500.0,NEAR BAY +-122.16,37.46,32.0,2663.0,661.0,1403.0,733.0,4.2667,410200.0,NEAR BAY +-122.17,37.46,47.0,2312.0,332.0,1044.0,282.0,9.459,500001.0,NEAR BAY +-122.19,37.46,34.0,5419.0,1183.0,2002.0,1138.0,4.1985,500001.0,NEAR BAY +-122.17,37.45,33.0,1828.0,396.0,766.0,378.0,4.4531,500001.0,NEAR BAY +-122.17,37.45,35.0,1025.0,242.0,388.0,232.0,5.1995,500001.0,NEAR BAY +-122.18,37.45,43.0,2061.0,437.0,817.0,385.0,4.4688,460200.0,NEAR BAY +-122.18,37.45,37.0,5257.0,1360.0,2128.0,1264.0,4.0,394300.0,NEAR BAY +-122.19,37.45,18.0,1636.0,414.0,853.0,439.0,5.1032,464600.0,NEAR OCEAN +-122.18,37.44,44.0,2237.0,347.0,948.0,346.0,8.2436,500001.0,NEAR OCEAN +-122.19,37.44,38.0,3383.0,456.0,1203.0,465.0,9.3198,500001.0,NEAR OCEAN +-122.19,37.44,39.0,4402.0,618.0,1616.0,631.0,8.9955,500001.0,NEAR OCEAN +-122.2,37.43,38.0,3626.0,528.0,1350.0,532.0,7.3681,500001.0,NEAR OCEAN +-122.21,37.44,35.0,1140.0,193.0,486.0,199.0,4.6908,500001.0,NEAR OCEAN +-122.2,37.43,40.0,2223.0,412.0,1050.0,417.0,5.2421,444500.0,NEAR OCEAN +-122.19,37.43,39.0,2392.0,420.0,937.0,406.0,6.6136,472800.0,NEAR OCEAN +-122.2,37.43,22.0,3294.0,744.0,1337.0,655.0,5.2391,500001.0,NEAR OCEAN +-122.21,37.43,33.0,1606.0,254.0,727.0,271.0,8.6963,500001.0,NEAR OCEAN +-122.21,37.43,23.0,5741.0,1012.0,1843.0,888.0,5.7211,500001.0,NEAR OCEAN +-122.23,37.42,16.0,1945.0,320.0,512.0,300.0,7.4542,500001.0,NEAR OCEAN +-122.19,37.42,47.0,932.0,167.0,295.0,116.0,8.4375,500001.0,NEAR OCEAN +-122.21,37.43,20.0,975.0,134.0,324.0,146.0,9.7796,500001.0,NEAR OCEAN +-122.21,37.42,28.0,564.0,72.0,191.0,79.0,11.9666,500001.0,NEAR OCEAN +-122.2,37.4,37.0,1296.0,194.0,540.0,192.0,8.2782,500001.0,NEAR OCEAN +-122.2,37.4,30.0,2612.0,338.0,980.0,324.0,10.0481,500001.0,NEAR OCEAN +-122.21,37.38,28.0,4518.0,578.0,1489.0,559.0,11.3176,500001.0,NEAR OCEAN +-122.2,37.35,17.0,3095.0,442.0,1173.0,424.0,13.2986,500001.0,NEAR BAY +-122.21,37.37,34.0,1476.0,217.0,613.0,223.0,8.2883,500001.0,NEAR OCEAN +-122.22,37.37,26.0,440.0,202.0,322.0,218.0,5.1831,350000.0,NEAR OCEAN +-122.22,37.36,34.0,1559.0,243.0,600.0,242.0,8.7382,500001.0,NEAR OCEAN +-122.22,37.4,32.0,2297.0,287.0,814.0,283.0,15.0001,500001.0,NEAR OCEAN +-122.25,37.45,34.0,2999.0,365.0,927.0,369.0,10.2811,500001.0,NEAR OCEAN +-122.27,37.45,41.0,830.0,136.0,353.0,153.0,6.3824,500001.0,NEAR OCEAN +-122.24,37.43,36.0,2410.0,361.0,934.0,377.0,7.652,500001.0,NEAR OCEAN +-122.27,37.43,33.0,1601.0,223.0,629.0,215.0,15.0001,500001.0,NEAR OCEAN +-122.25,37.39,33.0,370.0,42.0,153.0,53.0,10.6514,500001.0,NEAR OCEAN +-122.26,37.38,28.0,1103.0,164.0,415.0,154.0,7.8633,500001.0,NEAR OCEAN +-122.29,37.41,30.0,6373.0,854.0,2149.0,798.0,10.6868,500001.0,NEAR OCEAN +-122.46,37.51,23.0,949.0,151.0,399.0,149.0,5.6286,411300.0,NEAR OCEAN +-122.47,37.5,18.0,2297.0,416.0,1086.0,381.0,4.875,334600.0,NEAR OCEAN +-122.47,37.5,25.0,950.0,259.0,404.0,195.0,3.1937,319200.0,NEAR OCEAN +-122.48,37.51,22.0,1564.0,278.0,761.0,270.0,4.7578,318500.0,NEAR OCEAN +-122.47,37.51,15.0,4974.0,764.0,2222.0,774.0,6.7606,364300.0,NEAR OCEAN +-122.44,37.52,16.0,7077.0,1179.0,3502.0,1148.0,5.9919,345100.0,NEAR OCEAN +-122.53,37.5,19.0,4768.0,807.0,2199.0,805.0,6.1896,331100.0,NEAR OCEAN +-122.49,37.54,15.0,3456.0,545.0,1527.0,535.0,6.3256,368000.0,NEAR OCEAN +-122.51,37.53,17.0,1574.0,262.0,672.0,241.0,7.2929,355800.0,NEAR OCEAN +-122.5,37.51,11.0,749.0,137.0,355.0,124.0,8.2364,371800.0,NEAR OCEAN +-122.49,37.5,21.0,1209.0,309.0,801.0,259.0,4.5625,500000.0,NEAR OCEAN +-122.43,37.43,17.0,11999.0,2249.0,5467.0,1989.0,4.8405,354300.0,NEAR OCEAN +-122.34,37.46,21.0,1799.0,293.0,576.0,277.0,7.439,500001.0,NEAR OCEAN +-122.38,37.34,33.0,1054.0,209.0,400.0,161.0,7.7773,456300.0,NEAR OCEAN +-122.33,37.39,52.0,573.0,102.0,232.0,92.0,6.2263,500001.0,NEAR OCEAN +-122.27,37.32,37.0,2607.0,534.0,1346.0,507.0,5.3951,277700.0,NEAR OCEAN +-122.27,37.24,30.0,2762.0,593.0,1581.0,502.0,5.1002,319400.0,NEAR OCEAN +-122.38,37.18,52.0,1746.0,315.0,941.0,220.0,3.3047,286100.0,NEAR OCEAN +-119.77,34.44,24.0,5652.0,1313.0,2312.0,1294.0,2.4717,295300.0,NEAR OCEAN +-119.78,34.45,9.0,1830.0,353.0,1515.0,220.0,4.2109,450000.0,NEAR OCEAN +-119.79,34.45,24.0,2746.0,433.0,1076.0,380.0,5.8635,348700.0,NEAR OCEAN +-119.75,34.45,26.0,3578.0,677.0,1504.0,618.0,4.1375,395000.0,NEAR OCEAN +-119.75,34.44,28.0,1080.0,298.0,524.0,251.0,1.8432,327300.0,NEAR OCEAN +-119.76,34.44,28.0,1985.0,582.0,1092.0,548.0,2.4701,290900.0,NEAR OCEAN +-119.75,34.45,6.0,2864.0,,1404.0,603.0,5.5073,263800.0,NEAR OCEAN +-119.78,34.48,21.0,2377.0,322.0,1007.0,328.0,7.9248,500001.0,NEAR OCEAN +-119.75,34.5,26.0,3563.0,579.0,1479.0,575.0,5.9522,438400.0,<1H OCEAN +-119.78,34.45,23.0,2077.0,306.0,705.0,256.0,6.4744,500001.0,NEAR OCEAN +-119.73,34.44,38.0,1729.0,,801.0,395.0,3.1364,357500.0,NEAR OCEAN +-119.73,34.43,35.0,2703.0,654.0,1383.0,631.0,4.5278,340400.0,NEAR OCEAN +-119.74,34.44,26.0,4257.0,1031.0,1861.0,950.0,3.4047,294500.0,NEAR OCEAN +-119.72,34.43,30.0,2491.0,656.0,1091.0,576.0,2.5139,279500.0,<1H OCEAN +-119.72,34.43,27.0,984.0,299.0,777.0,313.0,2.5694,275000.0,<1H OCEAN +-119.72,34.43,46.0,1332.0,329.0,746.0,310.0,3.6719,357400.0,<1H OCEAN +-119.72,34.43,36.0,1156.0,309.0,521.0,304.0,2.6014,320600.0,<1H OCEAN +-119.72,34.43,33.0,1028.0,377.0,753.0,356.0,2.3454,243800.0,<1H OCEAN +-119.71,34.43,18.0,1170.0,372.0,681.0,346.0,2.1974,255000.0,<1H OCEAN +-119.71,34.42,31.0,1643.0,499.0,1253.0,499.0,3.1563,267000.0,<1H OCEAN +-119.71,34.43,47.0,1572.0,417.0,790.0,384.0,2.6429,279200.0,<1H OCEAN +-119.72,34.44,50.0,3265.0,509.0,1256.0,443.0,6.3997,500001.0,<1H OCEAN +-119.71,34.44,52.0,1837.0,343.0,711.0,355.0,4.1316,443000.0,<1H OCEAN +-119.7,34.43,37.0,1462.0,306.0,678.0,322.0,5.1545,418400.0,<1H OCEAN +-119.71,34.43,48.0,2408.0,536.0,1005.0,497.0,3.5213,458600.0,<1H OCEAN +-119.7,34.43,39.0,1486.0,467.0,758.0,409.0,2.6875,320600.0,<1H OCEAN +-119.7,34.43,52.0,977.0,289.0,412.0,272.0,2.125,300000.0,<1H OCEAN +-119.7,34.47,32.0,3725.0,569.0,1304.0,527.0,7.7261,500001.0,<1H OCEAN +-119.72,34.47,34.0,3262.0,533.0,1265.0,502.0,5.8411,381800.0,<1H OCEAN +-119.71,34.45,35.0,2183.0,363.0,988.0,351.0,5.5922,384400.0,<1H OCEAN +-119.71,34.44,41.0,2220.0,367.0,927.0,355.0,5.3184,376000.0,<1H OCEAN +-119.72,34.44,43.0,1781.0,342.0,663.0,358.0,4.7,293800.0,<1H OCEAN +-119.72,34.44,39.0,1489.0,304.0,700.0,268.0,3.8819,289900.0,<1H OCEAN +-119.73,34.44,48.0,2114.0,390.0,973.0,367.0,4.8021,351100.0,NEAR OCEAN +-119.73,34.45,44.0,2261.0,328.0,763.0,294.0,6.7449,415600.0,<1H OCEAN +-119.74,34.44,27.0,1251.0,282.0,503.0,283.0,2.8,353000.0,NEAR OCEAN +-119.74,34.45,29.0,2526.0,388.0,1092.0,409.0,6.0597,383100.0,<1H OCEAN +-119.69,34.44,41.0,1989.0,271.0,666.0,269.0,6.8406,500001.0,<1H OCEAN +-119.69,34.43,44.0,2440.0,485.0,1011.0,442.0,4.149,443600.0,<1H OCEAN +-119.7,34.43,35.0,1402.0,369.0,654.0,385.0,2.6205,318800.0,<1H OCEAN +-119.69,34.43,43.0,1257.0,311.0,671.0,263.0,2.875,280600.0,<1H OCEAN +-119.69,34.43,37.0,2801.0,497.0,1150.0,476.0,5.8311,387700.0,<1H OCEAN +-119.68,34.44,23.0,2600.0,398.0,917.0,374.0,8.7394,500001.0,<1H OCEAN +-119.67,34.47,35.0,2700.0,422.0,1995.0,383.0,4.9757,500001.0,<1H OCEAN +-119.66,34.44,26.0,2790.0,413.0,1014.0,397.0,6.5631,500001.0,<1H OCEAN +-119.66,34.43,27.0,5509.0,1059.0,2591.0,979.0,3.8456,500001.0,<1H OCEAN +-119.67,34.44,32.0,3202.0,537.0,1316.0,538.0,5.2888,463800.0,<1H OCEAN +-119.69,34.43,30.0,1273.0,343.0,1082.0,325.0,2.5104,228100.0,<1H OCEAN +-119.68,34.43,33.0,1961.0,462.0,1693.0,445.0,2.9896,236000.0,<1H OCEAN +-119.68,34.43,49.0,1785.0,386.0,1267.0,380.0,3.5208,251200.0,<1H OCEAN +-119.67,34.38,28.0,1814.0,526.0,849.0,420.0,3.1625,364300.0,<1H OCEAN +-119.68,34.42,38.0,1452.0,354.0,1139.0,340.0,2.707,236800.0,<1H OCEAN +-119.67,34.43,39.0,1467.0,381.0,1404.0,374.0,2.3681,241400.0,<1H OCEAN +-119.67,34.42,37.0,1673.0,444.0,1477.0,446.0,2.0643,246700.0,<1H OCEAN +-119.67,34.42,23.0,1333.0,393.0,1369.0,381.0,2.5947,232600.0,<1H OCEAN +-119.7,34.43,52.0,1364.0,460.0,804.0,400.0,2.375,293800.0,<1H OCEAN +-119.7,34.42,52.0,329.0,109.0,291.0,102.0,1.4722,350000.0,<1H OCEAN +-119.7,34.42,41.0,725.0,239.0,582.0,214.0,3.1667,362500.0,<1H OCEAN +-119.69,34.42,17.0,1826.0,544.0,1325.0,532.0,1.2762,253600.0,<1H OCEAN +-119.69,34.42,52.0,302.0,112.0,392.0,114.0,2.5978,258300.0,<1H OCEAN +-119.71,34.42,52.0,1838.0,692.0,851.0,576.0,1.4851,237500.0,<1H OCEAN +-119.71,34.42,49.0,1560.0,436.0,1041.0,411.0,2.925,246900.0,<1H OCEAN +-119.71,34.42,39.0,1172.0,322.0,606.0,316.0,2.16,259100.0,<1H OCEAN +-119.71,34.42,50.0,840.0,279.0,488.0,270.0,2.2097,258300.0,<1H OCEAN +-119.7,34.42,43.0,1802.0,557.0,1490.0,538.0,2.675,247900.0,<1H OCEAN +-119.7,34.41,52.0,1526.0,458.0,1633.0,449.0,2.2069,226500.0,NEAR OCEAN +-119.72,34.42,37.0,1635.0,427.0,1027.0,408.0,3.5905,264700.0,NEAR OCEAN +-119.72,34.42,31.0,1524.0,383.0,1257.0,398.0,2.6019,250000.0,NEAR OCEAN +-119.72,34.42,49.0,1610.0,370.0,961.0,351.0,2.6983,260100.0,NEAR OCEAN +-119.72,34.42,52.0,1759.0,387.0,980.0,402.0,4.0125,261000.0,NEAR OCEAN +-119.71,34.42,52.0,1411.0,324.0,1091.0,306.0,4.1062,252900.0,<1H OCEAN +-119.71,34.42,23.0,2068.0,658.0,1898.0,570.0,2.5506,230800.0,<1H OCEAN +-119.71,34.41,31.0,1034.0,319.0,997.0,308.0,2.6538,231800.0,NEAR OCEAN +-119.73,34.35,20.0,1648.0,319.0,905.0,307.0,4.375,335200.0,NEAR OCEAN +-119.71,34.36,34.0,1706.0,276.0,628.0,243.0,4.1842,364000.0,NEAR OCEAN +-119.7,34.36,35.0,1604.0,334.0,904.0,337.0,4.7411,336400.0,NEAR OCEAN +-119.71,34.4,36.0,1846.0,358.0,748.0,329.0,4.2283,326800.0,NEAR OCEAN +-119.7,34.4,25.0,1858.0,493.0,865.0,460.0,3.0938,312500.0,NEAR OCEAN +-119.72,34.41,35.0,871.0,145.0,354.0,154.0,4.3214,341800.0,NEAR OCEAN +-119.71,34.4,27.0,3782.0,771.0,1742.0,751.0,4.0451,395100.0,NEAR OCEAN +-119.71,34.41,18.0,1225.0,317.0,694.0,306.0,3.6823,255000.0,NEAR OCEAN +-119.7,34.41,19.0,1215.0,360.0,1349.0,423.0,2.6607,226500.0,NEAR OCEAN +-119.7,34.41,19.0,2086.0,575.0,1701.0,530.0,2.8042,236100.0,NEAR OCEAN +-119.69,34.38,39.0,1383.0,459.0,677.0,362.0,2.25,281300.0,NEAR OCEAN +-119.69,34.41,44.0,1208.0,357.0,603.0,297.0,2.6103,500000.0,<1H OCEAN +-119.75,34.43,23.0,2982.0,837.0,1317.0,787.0,3.3776,283200.0,NEAR OCEAN +-119.74,34.43,26.0,3119.0,562.0,1459.0,562.0,5.0434,340400.0,NEAR OCEAN +-119.75,34.4,31.0,1997.0,299.0,826.0,301.0,6.8927,500001.0,NEAR OCEAN +-119.73,34.43,27.0,1448.0,404.0,978.0,338.0,2.303,261000.0,NEAR OCEAN +-119.73,34.42,23.0,1364.0,227.0,638.0,238.0,5.3279,413900.0,NEAR OCEAN +-119.73,34.42,25.0,2024.0,312.0,907.0,335.0,5.4127,392800.0,NEAR OCEAN +-119.72,34.41,35.0,1853.0,375.0,878.0,338.0,4.9044,335300.0,NEAR OCEAN +-119.74,34.41,30.0,2365.0,417.0,1053.0,409.0,5.5959,346200.0,NEAR OCEAN +-119.73,34.41,29.0,1769.0,297.0,703.0,269.0,4.4375,350000.0,NEAR OCEAN +-119.72,34.41,26.0,1648.0,378.0,954.0,405.0,3.2895,335000.0,NEAR OCEAN +-119.74,34.35,34.0,1664.0,292.0,705.0,257.0,5.0,329400.0,NEAR OCEAN +-119.74,34.38,32.0,1479.0,287.0,830.0,288.0,5.345,322600.0,NEAR OCEAN +-119.63,34.42,42.0,1765.0,263.0,753.0,260.0,8.5608,500001.0,<1H OCEAN +-119.64,34.43,34.0,3045.0,570.0,1002.0,488.0,5.623,500001.0,<1H OCEAN +-119.63,34.4,29.0,3865.0,814.0,1266.0,613.0,6.0069,500001.0,<1H OCEAN +-119.64,34.43,32.0,1872.0,318.0,749.0,296.0,4.625,500001.0,<1H OCEAN +-119.61,34.45,33.0,3597.0,519.0,1207.0,479.0,5.3963,500001.0,<1H OCEAN +-119.63,34.44,37.0,3188.0,442.0,984.0,376.0,9.4522,500001.0,<1H OCEAN +-119.61,34.43,16.0,2665.0,391.0,794.0,311.0,9.0267,500001.0,<1H OCEAN +-119.53,34.41,8.0,1705.0,400.0,886.0,391.0,3.9659,297400.0,<1H OCEAN +-119.52,34.41,20.0,4489.0,800.0,2867.0,765.0,4.806,279700.0,<1H OCEAN +-119.51,34.4,24.0,3422.0,596.0,1763.0,601.0,5.2039,301300.0,NEAR OCEAN +-119.51,34.4,15.0,1112.0,256.0,411.0,245.0,2.0625,314300.0,NEAR OCEAN +-119.52,34.39,23.0,1414.0,365.0,889.0,345.0,2.6397,250000.0,NEAR OCEAN +-119.51,34.39,32.0,1921.0,394.0,951.0,334.0,3.233,346000.0,NEAR OCEAN +-119.52,34.4,20.0,1834.0,477.0,1305.0,417.0,3.2125,251000.0,NEAR OCEAN +-119.53,34.38,22.0,2323.0,727.0,1301.0,478.0,2.7864,300000.0,NEAR OCEAN +-119.53,34.4,14.0,1671.0,383.0,1079.0,365.0,3.1389,248700.0,<1H OCEAN +-119.51,34.46,28.0,3506.0,563.0,1362.0,483.0,6.091,500001.0,<1H OCEAN +-119.55,34.38,17.0,1951.0,368.0,681.0,350.0,2.7275,500001.0,<1H OCEAN +-119.57,34.38,22.0,2512.0,426.0,919.0,341.0,5.759,425000.0,<1H OCEAN +-119.59,34.43,28.0,2718.0,542.0,1066.0,442.0,4.2059,500001.0,<1H OCEAN +-119.59,34.39,35.0,622.0,170.0,278.0,139.0,3.6969,335000.0,<1H OCEAN +-119.5,34.35,39.0,308.0,38.0,59.0,21.0,11.7794,500001.0,NEAR OCEAN +-119.49,34.39,17.0,4617.0,982.0,2303.0,923.0,3.9224,230600.0,NEAR OCEAN +-119.72,34.77,35.0,2469.0,553.0,1168.0,427.0,2.4583,62100.0,<1H OCEAN +-120.18,34.75,17.0,2074.0,382.0,1035.0,359.0,3.7958,400000.0,<1H OCEAN +-120.27,34.72,14.0,1289.0,277.0,693.0,237.0,3.2569,230800.0,<1H OCEAN +-120.18,34.62,25.0,1337.0,219.0,671.0,225.0,3.1912,226400.0,NEAR OCEAN +-120.2,34.63,14.0,2647.0,515.0,1487.0,488.0,4.4519,227900.0,NEAR OCEAN +-120.2,34.61,15.0,2958.0,690.0,1348.0,617.0,3.8582,215200.0,NEAR OCEAN +-120.13,34.63,11.0,2137.0,339.0,916.0,338.0,5.5221,394900.0,NEAR OCEAN +-120.12,34.6,10.0,2426.0,426.0,966.0,419.0,5.5106,290900.0,NEAR OCEAN +-120.14,34.6,22.0,2136.0,465.0,1143.0,409.0,2.9479,243100.0,NEAR OCEAN +-120.16,34.61,17.0,921.0,189.0,434.0,219.0,3.0185,500001.0,NEAR OCEAN +-120.14,34.59,9.0,2536.0,499.0,832.0,385.0,2.5743,309800.0,NEAR OCEAN +-120.14,34.59,24.0,1601.0,282.0,731.0,285.0,4.2026,259800.0,NEAR OCEAN +-120.04,34.72,13.0,3942.0,585.0,1542.0,515.0,6.6054,500001.0,NEAR OCEAN +-120.11,34.66,18.0,1348.0,238.0,631.0,247.0,5.3154,289400.0,NEAR OCEAN +-120.08,34.64,18.0,2375.0,429.0,1048.0,369.0,4.2222,375000.0,NEAR OCEAN +-120.08,34.62,11.0,3478.0,588.0,1693.0,582.0,4.6554,272300.0,NEAR OCEAN +-120.09,34.62,18.0,2708.0,382.0,988.0,359.0,5.5194,367000.0,NEAR OCEAN +-120.11,34.62,16.0,2943.0,394.0,959.0,359.0,6.2094,440000.0,NEAR OCEAN +-120.09,34.61,11.0,586.0,125.0,317.0,74.0,2.8906,84400.0,NEAR OCEAN +-120.08,34.59,24.0,1874.0,319.0,820.0,315.0,5.1909,390200.0,NEAR OCEAN +-120.01,34.54,30.0,2992.0,609.0,1288.0,465.0,3.9375,292900.0,NEAR OCEAN +-120.44,34.91,12.0,3189.0,463.0,1200.0,442.0,5.299,226800.0,<1H OCEAN +-120.45,34.91,16.0,712.0,147.0,355.0,162.0,2.56,150000.0,<1H OCEAN +-120.48,34.9,20.0,3842.0,630.0,2490.0,662.0,3.0559,120100.0,<1H OCEAN +-120.45,34.88,15.0,2143.0,286.0,929.0,315.0,5.7306,269700.0,<1H OCEAN +-120.44,34.88,9.0,3124.0,415.0,1169.0,407.0,6.7694,275100.0,<1H OCEAN +-120.45,34.87,4.0,1533.0,221.0,545.0,191.0,7.5696,328700.0,<1H OCEAN +-120.44,34.87,13.0,2312.0,352.0,1084.0,388.0,5.038,194000.0,<1H OCEAN +-120.45,34.86,23.0,3415.0,778.0,1492.0,633.0,2.2791,114800.0,NEAR OCEAN +-120.4,34.86,11.0,1633.0,348.0,504.0,327.0,2.0508,275000.0,<1H OCEAN +-120.4,34.85,26.0,2384.0,385.0,1323.0,400.0,4.8185,157900.0,<1H OCEAN +-120.41,34.86,15.0,978.0,187.0,407.0,182.0,4.375,158000.0,<1H OCEAN +-120.43,34.86,17.0,3172.0,506.0,1538.0,473.0,4.3125,168100.0,<1H OCEAN +-120.43,34.86,17.0,1932.0,347.0,874.0,312.0,3.8203,141500.0,<1H OCEAN +-120.37,34.9,17.0,2649.0,386.0,1057.0,362.0,4.7813,326800.0,<1H OCEAN +-120.33,34.87,24.0,2590.0,404.0,1093.0,338.0,3.9375,341200.0,<1H OCEAN +-120.42,34.91,4.0,6986.0,1217.0,2801.0,1212.0,3.2135,212700.0,<1H OCEAN +-120.43,34.9,27.0,2019.0,354.0,1029.0,346.0,3.5391,144700.0,<1H OCEAN +-120.43,34.9,30.0,2388.0,393.0,1117.0,375.0,4.1058,164000.0,<1H OCEAN +-120.41,34.88,8.0,3119.0,620.0,1159.0,544.0,3.5288,165500.0,<1H OCEAN +-120.42,34.89,24.0,2020.0,307.0,855.0,283.0,5.0099,162500.0,<1H OCEAN +-120.43,34.89,30.0,1979.0,342.0,999.0,320.0,5.0286,158000.0,<1H OCEAN +-120.43,34.89,28.0,2862.0,478.0,1384.0,463.0,4.6694,158200.0,<1H OCEAN +-120.43,34.88,22.0,2580.0,381.0,1149.0,372.0,5.0113,158600.0,<1H OCEAN +-120.42,34.87,18.0,2505.0,376.0,1162.0,382.0,4.8359,195700.0,<1H OCEAN +-120.43,34.87,21.0,2131.0,329.0,1094.0,353.0,4.6648,193000.0,<1H OCEAN +-120.43,34.87,26.0,1699.0,272.0,799.0,266.0,3.9871,157700.0,<1H OCEAN +-120.41,34.88,4.0,3680.0,559.0,1678.0,569.0,5.0639,201700.0,<1H OCEAN +-120.4,34.87,10.0,2197.0,329.0,1064.0,319.0,4.9766,199600.0,<1H OCEAN +-120.41,34.87,32.0,1997.0,317.0,866.0,281.0,5.062,158900.0,<1H OCEAN +-120.41,34.87,15.0,1534.0,251.0,761.0,240.0,4.9028,193600.0,<1H OCEAN +-120.42,34.95,52.0,1391.0,287.0,632.0,276.0,1.7431,131500.0,<1H OCEAN +-120.42,34.95,33.0,3404.0,711.0,1579.0,639.0,3.1078,146700.0,<1H OCEAN +-120.43,34.95,50.0,1966.0,413.0,985.0,403.0,2.3506,136100.0,<1H OCEAN +-120.43,34.95,43.0,2020.0,344.0,692.0,310.0,3.6815,181800.0,<1H OCEAN +-120.42,34.94,32.0,2844.0,551.0,1337.0,516.0,2.7188,133700.0,<1H OCEAN +-120.43,34.93,4.0,2866.0,648.0,1311.0,578.0,2.8649,186500.0,<1H OCEAN +-120.43,34.93,10.0,2980.0,585.0,1593.0,562.0,3.285,218300.0,<1H OCEAN +-120.43,34.98,21.0,2725.0,514.0,1466.0,488.0,3.6639,128600.0,<1H OCEAN +-120.43,34.97,28.0,1433.0,270.0,1001.0,278.0,4.0125,130100.0,<1H OCEAN +-120.42,34.96,20.0,1678.0,307.0,840.0,316.0,4.4342,160700.0,<1H OCEAN +-120.43,34.96,24.0,2739.0,414.0,1171.0,413.0,4.8155,162900.0,<1H OCEAN +-120.43,34.96,24.0,1799.0,470.0,1416.0,408.0,2.0673,136900.0,<1H OCEAN +-120.42,34.96,31.0,3518.0,608.0,1386.0,572.0,3.6212,151400.0,<1H OCEAN +-120.42,34.96,19.0,2298.0,511.0,1246.0,513.0,2.212,132000.0,<1H OCEAN +-120.43,34.96,19.0,2350.0,631.0,1291.0,515.0,1.0349,130800.0,<1H OCEAN +-120.42,34.97,18.0,1932.0,350.0,1071.0,346.0,4.125,139800.0,<1H OCEAN +-120.41,34.96,16.0,2299.0,403.0,1245.0,395.0,4.2125,148300.0,<1H OCEAN +-120.42,34.96,14.0,2069.0,343.0,1240.0,338.0,4.5066,149800.0,<1H OCEAN +-120.38,34.96,9.0,2813.0,492.0,1144.0,490.0,4.0431,226800.0,<1H OCEAN +-120.41,34.96,21.0,1774.0,263.0,724.0,237.0,4.65,152500.0,<1H OCEAN +-120.41,34.96,9.0,2712.0,428.0,1116.0,415.0,4.5536,190100.0,<1H OCEAN +-120.4,34.95,8.0,1885.0,286.0,835.0,290.0,5.0206,261000.0,<1H OCEAN +-120.47,34.98,6.0,5762.0,1115.0,2551.0,919.0,3.0723,137300.0,<1H OCEAN +-120.44,34.97,22.0,1619.0,360.0,1509.0,384.0,1.7941,110300.0,<1H OCEAN +-120.44,34.97,26.0,1705.0,344.0,1605.0,307.0,3.7589,113700.0,<1H OCEAN +-120.45,34.97,25.0,1920.0,380.0,1434.0,388.0,3.0368,129300.0,<1H OCEAN +-120.45,34.97,10.0,1897.0,354.0,1353.0,357.0,3.7679,131300.0,<1H OCEAN +-120.44,34.96,29.0,2374.0,562.0,1617.0,463.0,2.6531,108300.0,<1H OCEAN +-120.44,34.96,30.0,1685.0,315.0,1290.0,368.0,3.4722,112500.0,<1H OCEAN +-120.45,34.96,21.0,2121.0,445.0,2211.0,463.0,4.0603,117600.0,<1H OCEAN +-120.45,34.96,11.0,1299.0,280.0,1158.0,223.0,2.5556,129200.0,<1H OCEAN +-120.44,34.96,39.0,1228.0,379.0,851.0,341.0,1.899,113300.0,<1H OCEAN +-120.44,34.96,34.0,1248.0,284.0,986.0,272.0,2.9167,104200.0,<1H OCEAN +-120.45,34.96,26.0,1949.0,396.0,1575.0,377.0,2.875,121400.0,<1H OCEAN +-120.45,34.95,32.0,1574.0,447.0,1772.0,463.0,1.8625,90200.0,<1H OCEAN +-120.44,34.94,24.0,2481.0,476.0,1101.0,474.0,3.1576,147200.0,<1H OCEAN +-120.47,34.94,17.0,1368.0,308.0,642.0,303.0,1.8633,109400.0,<1H OCEAN +-120.44,34.93,15.0,868.0,244.0,1133.0,253.0,2.0995,87500.0,<1H OCEAN +-120.44,34.93,16.0,2098.0,558.0,1252.0,492.0,2.1509,67500.0,<1H OCEAN +-120.44,34.95,38.0,3004.0,794.0,2601.0,747.0,2.2743,106400.0,<1H OCEAN +-120.45,34.95,10.0,2207.0,644.0,2232.0,543.0,2.375,98500.0,<1H OCEAN +-120.44,34.94,29.0,1877.0,516.0,1634.0,492.0,1.6875,122700.0,<1H OCEAN +-120.45,34.95,7.0,1479.0,532.0,1057.0,459.0,2.2538,162500.0,<1H OCEAN +-120.45,34.94,26.0,1058.0,232.0,891.0,243.0,3.6422,120600.0,<1H OCEAN +-120.45,34.94,24.0,1702.0,447.0,1240.0,417.0,2.4091,115500.0,<1H OCEAN +-120.54,34.97,23.0,1353.0,345.0,1322.0,336.0,1.8185,97800.0,<1H OCEAN +-120.57,34.96,27.0,1401.0,294.0,1306.0,286.0,2.5809,83200.0,NEAR OCEAN +-120.57,34.96,38.0,1145.0,297.0,1107.0,296.0,2.1776,89100.0,NEAR OCEAN +-120.64,34.97,5.0,2090.0,469.0,1911.0,482.0,2.4318,86100.0,NEAR OCEAN +-120.6,34.91,44.0,711.0,140.0,384.0,116.0,2.1094,73800.0,NEAR OCEAN +-120.59,34.7,29.0,17738.0,3114.0,12427.0,2826.0,2.7377,28300.0,NEAR OCEAN +-120.48,34.7,26.0,3069.0,518.0,1524.0,539.0,4.3162,136400.0,NEAR OCEAN +-120.46,34.64,11.0,562.0,164.0,504.0,147.0,2.0161,118800.0,NEAR OCEAN +-120.46,34.65,22.0,1298.0,358.0,1272.0,363.0,1.6488,117500.0,NEAR OCEAN +-120.46,34.64,26.0,2364.0,604.0,1520.0,529.0,1.9444,129400.0,NEAR OCEAN +-120.47,34.64,8.0,2482.0,586.0,1427.0,540.0,3.071,120400.0,NEAR OCEAN +-120.47,34.65,31.0,1438.0,320.0,816.0,270.0,2.4583,128100.0,NEAR OCEAN +-120.46,34.64,16.0,686.0,217.0,614.0,200.0,0.8106,83300.0,NEAR OCEAN +-120.44,34.64,8.0,787.0,126.0,446.0,133.0,4.6023,163400.0,NEAR OCEAN +-120.45,34.64,30.0,2330.0,422.0,1255.0,449.0,3.8512,134600.0,NEAR OCEAN +-120.45,34.64,27.0,2696.0,622.0,1322.0,543.0,3.0352,135400.0,NEAR OCEAN +-120.45,34.64,40.0,1051.0,235.0,574.0,201.0,2.0865,111500.0,NEAR OCEAN +-120.46,34.65,10.0,2143.0,593.0,1167.0,548.0,2.0819,103300.0,NEAR OCEAN +-120.46,34.65,14.0,885.0,223.0,533.0,224.0,2.5966,109300.0,NEAR OCEAN +-120.47,34.65,32.0,2193.0,430.0,1074.0,377.0,2.3333,130200.0,NEAR OCEAN +-120.47,34.65,16.0,2549.0,428.0,1486.0,432.0,4.2875,150700.0,NEAR OCEAN +-120.45,34.65,27.0,2253.0,382.0,1197.0,384.0,3.3203,134700.0,NEAR OCEAN +-120.44,34.65,30.0,2265.0,512.0,1402.0,471.0,1.975,134000.0,NEAR OCEAN +-120.45,34.65,27.0,2215.0,578.0,1544.0,527.0,1.9257,135300.0,NEAR OCEAN +-120.45,34.65,21.0,1182.0,243.0,733.0,251.0,3.1442,131600.0,NEAR OCEAN +-120.45,34.65,25.0,980.0,276.0,896.0,245.0,2.0,87500.0,NEAR OCEAN +-120.46,34.63,48.0,1408.0,301.0,682.0,279.0,2.9271,146600.0,NEAR OCEAN +-120.46,34.64,37.0,1697.0,334.0,740.0,272.0,2.3804,148000.0,NEAR OCEAN +-120.47,34.64,16.0,1912.0,406.0,1009.0,417.0,3.4063,138000.0,NEAR OCEAN +-120.45,34.64,17.0,1226.0,277.0,484.0,224.0,3.2167,112500.0,NEAR OCEAN +-120.45,34.64,34.0,2571.0,499.0,1105.0,451.0,3.7778,150000.0,NEAR OCEAN +-120.45,34.63,32.0,1840.0,309.0,828.0,333.0,4.5486,172400.0,NEAR OCEAN +-120.44,34.66,22.0,3231.0,549.0,1739.0,581.0,4.5417,142400.0,NEAR OCEAN +-120.45,34.66,7.0,3329.0,504.0,1462.0,452.0,4.7875,198300.0,NEAR OCEAN +-120.46,34.66,5.0,2904.0,702.0,1302.0,618.0,3.0081,135200.0,NEAR OCEAN +-120.47,34.66,4.0,3376.0,525.0,1684.0,535.0,4.9237,166600.0,NEAR OCEAN +-120.39,34.52,40.0,2162.0,395.0,1010.0,332.0,2.5667,239300.0,NEAR OCEAN +-120.48,34.66,4.0,1897.0,331.0,915.0,336.0,4.1563,172600.0,NEAR OCEAN +-120.48,34.65,26.0,1933.0,316.0,1001.0,319.0,4.4628,134400.0,NEAR OCEAN +-120.45,34.63,25.0,2445.0,368.0,983.0,363.0,4.9286,180100.0,NEAR OCEAN +-120.47,34.63,23.0,2441.0,463.0,1392.0,434.0,3.7917,142200.0,NEAR OCEAN +-120.46,34.74,15.0,2185.0,386.0,827.0,336.0,5.3765,223100.0,NEAR OCEAN +-120.45,34.71,21.0,1868.0,268.0,522.0,255.0,6.4678,249300.0,NEAR OCEAN +-120.46,34.71,17.0,2830.0,430.0,1035.0,416.0,4.9292,207200.0,NEAR OCEAN +-120.47,34.7,24.0,2387.0,385.0,1051.0,382.0,4.4595,152700.0,NEAR OCEAN +-120.47,34.71,21.0,2535.0,383.0,1012.0,368.0,5.6177,183800.0,NEAR OCEAN +-120.37,34.69,18.0,1868.0,315.0,747.0,265.0,4.7946,290600.0,NEAR OCEAN +-120.43,34.7,26.0,2353.0,389.0,1420.0,389.0,3.87,125800.0,NEAR OCEAN +-120.43,34.69,33.0,2054.0,373.0,1067.0,358.0,3.6023,128300.0,NEAR OCEAN +-120.44,34.68,6.0,2187.0,277.0,697.0,273.0,6.2685,307400.0,NEAR OCEAN +-119.86,34.42,23.0,1450.0,642.0,1258.0,607.0,1.179,225000.0,NEAR OCEAN +-119.88,34.4,25.0,2741.0,623.0,2272.0,624.0,2.2647,216700.0,NEAR OCEAN +-119.85,34.4,14.0,2307.0,650.0,5723.0,615.0,2.1652,37500.0,NEAR OCEAN +-119.88,34.43,14.0,2472.0,685.0,1292.0,621.0,3.3026,229500.0,NEAR OCEAN +-119.88,34.43,16.0,1734.0,365.0,962.0,391.0,4.4777,282500.0,NEAR OCEAN +-119.88,34.43,16.0,2206.0,541.0,1227.0,554.0,3.75,223100.0,NEAR OCEAN +-119.88,34.42,22.0,2367.0,492.0,1333.0,488.0,3.6304,312200.0,NEAR OCEAN +-119.91,34.4,24.0,2001.0,365.0,1170.0,330.0,6.0992,268800.0,NEAR OCEAN +-119.83,34.45,24.0,2168.0,373.0,934.0,366.0,5.4197,280900.0,NEAR OCEAN +-119.84,34.44,28.0,977.0,162.0,537.0,159.0,4.2404,274300.0,NEAR OCEAN +-119.84,34.45,26.0,4424.0,616.0,1839.0,601.0,6.3654,331200.0,NEAR OCEAN +-119.85,34.44,28.0,1765.0,301.0,1173.0,297.0,6.0256,276800.0,NEAR OCEAN +-119.81,34.47,26.0,4382.0,618.0,1728.0,587.0,7.4734,432200.0,NEAR OCEAN +-119.81,34.46,22.0,3488.0,452.0,1479.0,458.0,7.1687,384400.0,NEAR OCEAN +-119.85,34.48,23.0,1915.0,277.0,724.0,267.0,6.2987,348200.0,NEAR OCEAN +-119.88,34.44,27.0,4724.0,793.0,2394.0,738.0,5.5954,261400.0,NEAR OCEAN +-119.89,34.44,25.0,2786.0,470.0,1669.0,462.0,5.5184,268300.0,NEAR OCEAN +-119.89,34.44,25.0,3160.0,507.0,1514.0,523.0,5.0767,271200.0,NEAR OCEAN +-119.92,34.44,17.0,2143.0,324.0,1073.0,330.0,6.0321,402600.0,NEAR OCEAN +-120.05,34.47,21.0,1241.0,248.0,746.0,211.0,3.8056,425000.0,NEAR OCEAN +-119.86,34.38,28.0,1062.0,309.0,1058.0,305.0,1.5071,316700.0,NEAR OCEAN +-119.86,34.41,24.0,1576.0,580.0,1630.0,531.0,1.24,325000.0,NEAR OCEAN +-119.86,34.38,26.0,1626.0,375.0,1580.0,359.0,2.1471,187500.0,NEAR OCEAN +-119.81,34.45,24.0,3678.0,567.0,1554.0,570.0,6.5173,334000.0,NEAR OCEAN +-119.81,34.44,23.0,3172.0,588.0,1467.0,559.0,4.6806,288900.0,NEAR OCEAN +-119.82,34.45,24.0,3592.0,533.0,1683.0,528.0,6.7247,333800.0,NEAR OCEAN +-119.83,34.44,26.0,1739.0,402.0,599.0,368.0,3.0875,198400.0,NEAR OCEAN +-119.82,34.44,22.0,2239.0,475.0,1016.0,434.0,4.875,295400.0,NEAR OCEAN +-119.81,34.44,14.0,961.0,305.0,662.0,286.0,3.2115,206300.0,NEAR OCEAN +-119.82,34.43,15.0,1482.0,345.0,669.0,379.0,3.0773,112500.0,NEAR OCEAN +-119.82,34.44,16.0,1414.0,463.0,793.0,439.0,3.6034,150000.0,NEAR OCEAN +-119.82,34.44,28.0,1992.0,531.0,1622.0,509.0,2.7689,228200.0,NEAR OCEAN +-119.83,34.44,35.0,796.0,281.0,567.0,257.0,2.1389,260000.0,NEAR OCEAN +-119.83,34.43,31.0,798.0,346.0,699.0,301.0,2.1417,205000.0,NEAR OCEAN +-119.77,34.43,22.0,2552.0,443.0,1066.0,424.0,5.1271,342500.0,NEAR OCEAN +-119.77,34.43,28.0,3318.0,441.0,1604.0,404.0,9.7821,500001.0,NEAR OCEAN +-119.79,34.4,20.0,3104.0,415.0,1061.0,380.0,9.6885,500001.0,NEAR OCEAN +-119.8,34.44,27.0,2674.0,419.0,1176.0,416.0,5.0294,280200.0,NEAR OCEAN +-119.8,34.43,27.0,3143.0,537.0,1760.0,570.0,4.6957,271500.0,NEAR OCEAN +-119.8,34.43,22.0,2845.0,500.0,1456.0,454.0,5.6604,276400.0,NEAR OCEAN +-119.79,34.44,25.0,1479.0,314.0,977.0,309.0,4.1797,271800.0,NEAR OCEAN +-119.78,34.44,28.0,2864.0,495.0,1364.0,482.0,4.835,353400.0,NEAR OCEAN +-119.79,34.43,26.0,3611.0,563.0,2089.0,540.0,5.1615,276200.0,NEAR OCEAN +-121.9,37.36,38.0,1141.0,333.0,1028.0,291.0,2.7333,182500.0,<1H OCEAN +-121.89,37.36,37.0,1525.0,363.0,1075.0,374.0,2.8971,186100.0,<1H OCEAN +-121.88,37.36,30.0,2453.0,573.0,1845.0,530.0,3.7396,210700.0,<1H OCEAN +-121.89,37.35,44.0,1668.0,380.0,1143.0,365.0,3.2083,181900.0,<1H OCEAN +-121.9,37.36,47.0,1007.0,245.0,581.0,240.0,2.9545,237500.0,<1H OCEAN +-121.9,37.35,52.0,1034.0,239.0,531.0,223.0,2.7411,227100.0,<1H OCEAN +-121.9,37.35,42.0,2082.0,626.0,1396.0,610.0,3.25,185300.0,<1H OCEAN +-121.9,37.34,50.0,1345.0,287.0,791.0,254.0,3.5966,245800.0,<1H OCEAN +-121.9,37.34,52.0,241.0,69.0,385.0,64.0,2.619,212500.0,<1H OCEAN +-121.92,37.34,35.0,357.0,120.0,377.0,99.0,3.0139,204200.0,<1H OCEAN +-121.92,37.34,42.0,2101.0,524.0,1212.0,526.0,3.6389,239200.0,<1H OCEAN +-121.92,37.34,52.0,2584.0,491.0,1087.0,433.0,4.4,391300.0,<1H OCEAN +-121.92,37.33,52.0,2009.0,338.0,841.0,338.0,5.5259,295800.0,<1H OCEAN +-121.92,37.33,52.0,2962.0,557.0,1215.0,506.0,4.7768,301100.0,<1H OCEAN +-121.93,37.33,44.0,1449.0,291.0,676.0,282.0,3.575,292200.0,<1H OCEAN +-121.93,37.33,44.0,2142.0,358.0,846.0,375.0,5.4273,421000.0,<1H OCEAN +-121.94,37.33,34.0,1809.0,317.0,863.0,302.0,4.3,330500.0,<1H OCEAN +-121.91,37.34,35.0,2189.0,607.0,1193.0,562.0,2.8042,240900.0,<1H OCEAN +-121.91,37.33,28.0,454.0,147.0,366.0,140.0,2.9853,187500.0,<1H OCEAN +-121.91,37.33,52.0,2562.0,410.0,973.0,398.0,4.8854,330600.0,<1H OCEAN +-121.92,37.33,52.0,2125.0,382.0,930.0,387.0,5.2831,299500.0,<1H OCEAN +-121.9,37.33,34.0,197.0,44.0,152.0,47.0,4.05,200000.0,<1H OCEAN +-121.91,37.33,52.0,2212.0,563.0,1195.0,532.0,2.894,209500.0,<1H OCEAN +-121.89,37.33,49.0,658.0,318.0,467.0,316.0,0.7068,200000.0,<1H OCEAN +-121.9,37.33,11.0,1283.0,390.0,718.0,345.0,4.226,166700.0,<1H OCEAN +-121.9,37.33,52.0,1009.0,231.0,929.0,210.0,2.5,162500.0,<1H OCEAN +-121.88,37.34,40.0,1547.0,625.0,1493.0,543.0,1.2887,212500.0,<1H OCEAN +-121.89,37.33,6.0,1495.0,552.0,1087.0,557.0,2.8798,225000.0,<1H OCEAN +-121.88,37.33,36.0,1904.0,689.0,3561.0,632.0,2.0972,187500.0,<1H OCEAN +-121.89,37.35,48.0,1562.0,439.0,1469.0,424.0,2.5673,177500.0,<1H OCEAN +-121.89,37.34,46.0,1197.0,416.0,898.0,370.0,2.1714,190600.0,<1H OCEAN +-121.89,37.34,20.0,1106.0,494.0,851.0,448.0,0.8894,350000.0,<1H OCEAN +-121.89,37.34,43.0,1423.0,467.0,1013.0,428.0,1.6708,204200.0,<1H OCEAN +-121.88,37.34,52.0,1390.0,365.0,921.0,352.0,2.1442,188900.0,<1H OCEAN +-121.88,37.36,42.0,2087.0,402.0,1342.0,423.0,4.2149,199000.0,<1H OCEAN +-121.88,37.35,49.0,1728.0,350.0,1146.0,391.0,3.5781,193000.0,<1H OCEAN +-121.89,37.35,47.0,2879.0,631.0,2229.0,606.0,3.2599,183100.0,<1H OCEAN +-121.89,37.35,43.0,1185.0,296.0,933.0,244.0,2.925,170800.0,<1H OCEAN +-121.89,37.35,44.0,2019.0,615.0,1243.0,518.0,2.0549,193800.0,<1H OCEAN +-121.88,37.35,43.0,1086.0,219.0,715.0,226.0,4.2381,193500.0,<1H OCEAN +-121.87,37.35,37.0,1566.0,375.0,1223.0,346.0,3.2793,174500.0,<1H OCEAN +-121.88,37.34,44.0,1267.0,353.0,1018.0,327.0,2.4196,194400.0,<1H OCEAN +-121.88,37.35,52.0,1704.0,418.0,1336.0,411.0,2.8167,183500.0,<1H OCEAN +-121.87,37.34,52.0,1170.0,215.0,604.0,207.0,2.6667,325900.0,<1H OCEAN +-121.87,37.34,52.0,1087.0,166.0,650.0,194.0,6.6345,309000.0,<1H OCEAN +-121.87,37.34,39.0,2479.0,541.0,1990.0,506.0,2.4306,289100.0,<1H OCEAN +-121.88,37.34,52.0,867.0,232.0,1264.0,227.0,2.6312,302900.0,<1H OCEAN +-121.87,37.35,27.0,3500.0,1036.0,3019.0,955.0,2.9222,153700.0,<1H OCEAN +-121.86,37.35,46.0,1448.0,330.0,1094.0,331.0,2.4968,174100.0,<1H OCEAN +-121.87,37.35,52.0,1557.0,424.0,1580.0,434.0,2.3277,183700.0,<1H OCEAN +-121.86,37.34,29.0,5274.0,1625.0,6234.0,1639.0,2.5947,177300.0,<1H OCEAN +-121.86,37.34,40.0,2277.0,508.0,1718.0,434.0,3.0089,185200.0,<1H OCEAN +-121.88,37.33,41.0,395.0,164.0,549.0,184.0,2.375,175000.0,<1H OCEAN +-121.88,37.33,35.0,3300.0,1154.0,3120.0,1075.0,1.473,213600.0,<1H OCEAN +-121.87,37.33,37.0,3137.0,685.0,2048.0,651.0,3.0156,270300.0,<1H OCEAN +-121.88,37.33,45.0,1192.0,371.0,1084.0,345.0,2.8594,205900.0,<1H OCEAN +-121.89,37.33,42.0,1279.0,358.0,1254.0,340.0,2.2583,192500.0,<1H OCEAN +-121.89,37.32,34.0,1014.0,246.0,952.0,215.0,2.8864,172500.0,<1H OCEAN +-121.88,37.32,30.0,1242.0,338.0,1438.0,325.0,2.6607,169300.0,<1H OCEAN +-121.88,37.32,40.0,1331.0,374.0,1276.0,389.0,2.7546,172500.0,<1H OCEAN +-121.89,37.32,43.0,1105.0,241.0,982.0,206.0,2.1149,184900.0,<1H OCEAN +-121.89,37.32,41.0,977.0,265.0,865.0,253.0,3.2317,184800.0,<1H OCEAN +-121.89,37.31,52.0,1994.0,404.0,1014.0,389.0,4.3882,223600.0,<1H OCEAN +-121.9,37.31,52.0,2125.0,431.0,1014.0,443.0,5.8186,281100.0,<1H OCEAN +-121.9,37.32,48.0,1274.0,313.0,971.0,291.0,3.7738,220600.0,<1H OCEAN +-121.91,37.32,42.0,1067.0,256.0,608.0,280.0,3.0096,180800.0,<1H OCEAN +-121.91,37.31,16.0,2962.0,898.0,1555.0,795.0,2.5804,216300.0,<1H OCEAN +-121.93,37.32,52.0,1460.0,492.0,1165.0,455.0,2.5833,167500.0,<1H OCEAN +-121.94,37.33,37.0,818.0,269.0,576.0,261.0,2.1902,250000.0,<1H OCEAN +-121.94,37.32,46.0,2451.0,472.0,1163.0,448.0,4.8519,225800.0,<1H OCEAN +-121.93,37.32,51.0,2711.0,728.0,1607.0,724.0,3.0,184700.0,<1H OCEAN +-121.92,37.32,39.0,836.0,254.0,704.0,272.0,3.5256,192600.0,<1H OCEAN +-121.92,37.32,31.0,1902.0,554.0,1485.0,494.0,2.4207,165600.0,<1H OCEAN +-121.92,37.32,28.0,2089.0,641.0,1666.0,587.0,2.3633,198400.0,<1H OCEAN +-121.93,37.32,50.0,1135.0,215.0,500.0,207.0,4.2614,211300.0,<1H OCEAN +-121.94,37.31,5.0,2364.0,578.0,1102.0,502.0,5.2642,246400.0,<1H OCEAN +-121.94,37.31,30.0,1680.0,312.0,858.0,310.0,4.0474,280500.0,<1H OCEAN +-121.94,37.3,26.0,4348.0,814.0,2347.0,810.0,4.7275,293000.0,<1H OCEAN +-121.93,37.3,16.0,1111.0,226.0,317.0,199.0,2.7153,233300.0,<1H OCEAN +-121.93,37.31,26.0,2182.0,704.0,1638.0,704.0,2.8981,229800.0,<1H OCEAN +-121.92,37.31,34.0,876.0,150.0,424.0,163.0,5.2769,241100.0,<1H OCEAN +-121.92,37.31,26.0,3242.0,780.0,2100.0,741.0,3.1107,247900.0,<1H OCEAN +-121.93,37.3,16.0,2111.0,485.0,1285.0,499.0,5.0477,292500.0,<1H OCEAN +-121.93,37.31,29.0,1377.0,430.0,969.0,399.0,2.6573,252800.0,<1H OCEAN +-121.92,37.31,13.0,6035.0,1551.0,2946.0,1481.0,4.0524,213900.0,<1H OCEAN +-121.93,37.3,14.0,6277.0,1742.0,3025.0,1630.0,4.0653,234200.0,<1H OCEAN +-121.92,37.3,36.0,2088.0,358.0,772.0,347.0,4.2762,310100.0,<1H OCEAN +-121.92,37.3,35.0,1335.0,296.0,635.0,296.0,3.6053,345800.0,<1H OCEAN +-121.91,37.31,28.0,3104.0,811.0,1488.0,754.0,3.6429,332600.0,<1H OCEAN +-121.91,37.31,46.0,3052.0,587.0,1373.0,590.0,4.7287,340000.0,<1H OCEAN +-121.9,37.3,39.0,3627.0,666.0,1531.0,635.0,4.537,345900.0,<1H OCEAN +-121.91,37.3,43.0,828.0,151.0,446.0,145.0,4.4375,327600.0,<1H OCEAN +-121.91,37.3,31.0,2095.0,427.0,829.0,405.0,3.6563,344700.0,<1H OCEAN +-121.91,37.3,31.0,616.0,131.0,185.0,107.0,3.625,265000.0,<1H OCEAN +-121.89,37.31,40.0,1844.0,340.0,719.0,305.0,3.3682,235200.0,<1H OCEAN +-121.88,37.31,28.0,3085.0,552.0,1277.0,512.0,4.5795,262800.0,<1H OCEAN +-121.89,37.3,47.0,1604.0,284.0,639.0,278.0,5.8415,283300.0,<1H OCEAN +-121.89,37.3,52.0,2071.0,362.0,825.0,364.0,4.2414,284800.0,<1H OCEAN +-121.89,37.31,47.0,2986.0,627.0,1399.0,613.0,3.7455,247400.0,<1H OCEAN +-121.9,37.3,52.0,1456.0,269.0,582.0,277.0,5.036,296600.0,<1H OCEAN +-121.9,37.3,52.0,1575.0,284.0,629.0,284.0,5.6437,312000.0,<1H OCEAN +-121.88,37.3,42.0,1867.0,398.0,927.0,389.0,4.325,247000.0,<1H OCEAN +-121.88,37.29,44.0,2026.0,396.0,908.0,383.0,4.1406,274100.0,<1H OCEAN +-121.89,37.3,47.0,2355.0,426.0,961.0,428.0,5.3955,282300.0,<1H OCEAN +-121.89,37.3,46.0,2639.0,448.0,938.0,424.0,5.0662,331600.0,<1H OCEAN +-121.89,37.29,38.0,1568.0,351.0,710.0,339.0,2.7042,286600.0,<1H OCEAN +-121.9,37.29,26.0,1797.0,244.0,626.0,244.0,7.8575,424600.0,<1H OCEAN +-121.9,37.29,36.0,1389.0,225.0,623.0,223.0,6.6331,283300.0,<1H OCEAN +-121.92,37.29,34.0,943.0,135.0,378.0,139.0,5.1765,344600.0,<1H OCEAN +-121.91,37.29,36.0,945.0,149.0,371.0,158.0,5.6266,320500.0,<1H OCEAN +-121.92,37.29,35.0,2189.0,307.0,800.0,320.0,7.6659,426900.0,<1H OCEAN +-121.91,37.29,18.0,3597.0,664.0,1321.0,593.0,5.3077,351400.0,<1H OCEAN +-121.93,37.29,36.0,2241.0,437.0,989.0,442.0,3.9625,288200.0,<1H OCEAN +-121.92,37.29,32.0,1260.0,199.0,560.0,207.0,6.5858,346700.0,<1H OCEAN +-121.93,37.28,34.0,2422.0,370.0,1010.0,395.0,5.6494,376200.0,<1H OCEAN +-121.93,37.28,10.0,3163.0,832.0,1537.0,797.0,4.1674,214000.0,<1H OCEAN +-121.94,37.28,18.0,4356.0,1334.0,1968.0,1245.0,3.6294,240000.0,<1H OCEAN +-121.94,37.28,27.0,2859.0,464.0,1144.0,430.0,5.0822,327500.0,<1H OCEAN +-121.93,37.27,30.0,2862.0,544.0,1387.0,542.0,5.1104,278100.0,<1H OCEAN +-121.94,37.27,23.0,1932.0,552.0,997.0,482.0,3.662,211900.0,<1H OCEAN +-121.94,37.27,39.0,1030.0,191.0,537.0,175.0,3.9265,236900.0,<1H OCEAN +-121.94,37.26,43.0,2104.0,388.0,1137.0,403.0,4.9236,238000.0,<1H OCEAN +-121.94,37.26,21.0,3843.0,716.0,1850.0,705.0,4.6758,264200.0,<1H OCEAN +-121.95,37.26,10.0,3611.0,803.0,1599.0,716.0,5.2,248700.0,<1H OCEAN +-121.95,37.26,34.0,1482.0,255.0,584.0,246.0,5.5121,264700.0,<1H OCEAN +-121.94,37.25,16.0,3942.0,749.0,1894.0,737.0,5.2894,332800.0,<1H OCEAN +-121.93,37.26,39.0,1103.0,175.0,446.0,163.0,2.8125,291300.0,<1H OCEAN +-121.92,37.26,33.0,1306.0,259.0,762.0,237.0,4.5208,230700.0,<1H OCEAN +-121.92,37.25,36.0,3874.0,656.0,1826.0,639.0,4.9662,258500.0,<1H OCEAN +-121.91,37.25,31.0,1944.0,343.0,975.0,334.0,4.9205,240500.0,<1H OCEAN +-121.92,37.28,27.0,3028.0,486.0,1284.0,498.0,4.5833,308800.0,<1H OCEAN +-121.92,37.27,33.0,3280.0,569.0,1583.0,559.0,4.5625,253500.0,<1H OCEAN +-121.93,37.27,35.0,1855.0,345.0,985.0,329.0,6.0196,255100.0,<1H OCEAN +-121.93,37.27,28.0,3428.0,753.0,1753.0,729.0,4.1033,281000.0,<1H OCEAN +-121.92,37.28,26.0,6201.0,783.0,2381.0,819.0,7.9819,397000.0,<1H OCEAN +-121.92,37.27,29.0,5536.0,862.0,2651.0,881.0,5.6358,282100.0,<1H OCEAN +-121.91,37.27,30.0,4412.0,862.0,2168.0,772.0,5.0062,232000.0,<1H OCEAN +-121.91,37.28,29.0,5650.0,817.0,2098.0,813.0,6.4285,337300.0,<1H OCEAN +-121.9,37.28,26.0,3756.0,,1408.0,535.0,5.6427,320000.0,<1H OCEAN +-121.9,37.27,33.0,3410.0,583.0,1739.0,588.0,5.0714,255600.0,<1H OCEAN +-121.9,37.25,28.0,2714.0,502.0,1389.0,490.0,5.7385,240400.0,<1H OCEAN +-121.9,37.25,20.0,5483.0,1079.0,2892.0,1057.0,4.6845,250000.0,<1H OCEAN +-121.9,37.27,28.0,4538.0,685.0,1996.0,667.0,5.4609,263600.0,<1H OCEAN +-121.9,37.26,20.0,4447.0,661.0,2062.0,660.0,6.8088,283300.0,<1H OCEAN +-121.91,37.26,25.0,4258.0,719.0,2290.0,743.0,5.1461,267200.0,<1H OCEAN +-121.91,37.26,32.0,3776.0,620.0,1790.0,612.0,5.4675,261100.0,<1H OCEAN +-121.91,37.26,32.0,3983.0,876.0,1989.0,794.0,3.5625,255200.0,<1H OCEAN +-121.89,37.25,23.0,2705.0,449.0,1180.0,442.0,6.0791,316500.0,<1H OCEAN +-121.89,37.26,26.0,1864.0,331.0,956.0,325.0,5.5,231700.0,<1H OCEAN +-121.88,37.26,25.0,3025.0,689.0,1755.0,661.0,3.8893,218600.0,<1H OCEAN +-121.88,37.26,13.0,1893.0,487.0,1018.0,464.0,3.8047,204700.0,<1H OCEAN +-121.88,37.26,13.0,1676.0,471.0,710.0,406.0,3.8936,225900.0,<1H OCEAN +-121.88,37.25,24.0,968.0,240.0,631.0,250.0,2.8636,240300.0,<1H OCEAN +-121.89,37.25,21.0,2080.0,352.0,1040.0,325.0,5.2887,264500.0,<1H OCEAN +-121.89,37.25,26.0,1741.0,323.0,1007.0,339.0,4.7069,234800.0,<1H OCEAN +-121.89,37.29,36.0,2959.0,529.0,1125.0,520.0,4.2614,268800.0,<1H OCEAN +-121.89,37.28,35.0,2418.0,375.0,988.0,374.0,6.0936,365400.0,<1H OCEAN +-121.9,37.28,34.0,4613.0,749.0,2050.0,725.0,5.3922,302900.0,<1H OCEAN +-121.88,37.28,33.0,2951.0,529.0,1288.0,521.0,4.1554,313100.0,<1H OCEAN +-121.89,37.28,32.0,4308.0,717.0,2002.0,695.0,4.1645,281900.0,<1H OCEAN +-121.88,37.27,27.0,2019.0,335.0,1020.0,351.0,5.8178,267400.0,<1H OCEAN +-121.88,37.27,24.0,4567.0,688.0,2102.0,695.0,5.6895,289000.0,<1H OCEAN +-121.89,37.26,25.0,3319.0,531.0,1560.0,502.0,5.8479,263300.0,<1H OCEAN +-121.89,37.27,28.0,1481.0,256.0,688.0,221.0,5.2088,240900.0,<1H OCEAN +-121.87,37.32,39.0,1839.0,471.0,1528.0,456.0,2.6818,184900.0,<1H OCEAN +-121.87,37.32,36.0,1471.0,360.0,1182.0,326.0,2.7031,175800.0,<1H OCEAN +-121.88,37.32,38.0,1787.0,508.0,2113.0,530.0,2.6386,177600.0,<1H OCEAN +-121.88,37.32,45.0,2213.0,564.0,1920.0,514.0,3.2806,164200.0,<1H OCEAN +-121.86,37.31,24.0,1939.0,652.0,1808.0,625.0,2.2259,112500.0,<1H OCEAN +-121.87,37.3,28.0,859.0,199.0,455.0,211.0,2.3293,215900.0,<1H OCEAN +-121.87,37.31,6.0,3797.0,984.0,2437.0,904.0,3.6802,152400.0,<1H OCEAN +-121.87,37.3,14.0,360.0,124.0,134.0,84.0,2.7411,112500.0,<1H OCEAN +-121.88,37.3,16.0,2692.0,749.0,1674.0,681.0,2.6763,191100.0,<1H OCEAN +-121.86,37.32,13.0,2519.0,581.0,2094.0,530.0,4.3621,173400.0,<1H OCEAN +-121.85,37.33,19.0,2228.0,559.0,2845.0,551.0,2.6,172800.0,<1H OCEAN +-121.84,37.32,14.0,5762.0,1538.0,3979.0,1389.0,3.6953,192600.0,<1H OCEAN +-121.85,37.33,16.0,2987.0,874.0,4241.0,841.0,2.8024,127900.0,<1H OCEAN +-121.85,37.33,19.0,735.0,158.0,597.0,134.0,4.5208,188100.0,<1H OCEAN +-121.84,37.32,22.0,3015.0,581.0,2491.0,530.0,4.3419,176300.0,<1H OCEAN +-121.84,37.32,16.0,1866.0,364.0,1835.0,412.0,5.3363,212800.0,<1H OCEAN +-121.87,37.29,18.0,1892.0,568.0,974.0,553.0,2.3715,228000.0,<1H OCEAN +-121.87,37.28,21.0,3305.0,749.0,2459.0,701.0,3.9688,249600.0,<1H OCEAN +-121.86,37.29,14.0,6160.0,1222.0,2472.0,1204.0,4.1444,178400.0,<1H OCEAN +-121.85,37.28,17.0,4208.0,954.0,1476.0,904.0,2.3971,87500.0,<1H OCEAN +-121.83,37.3,16.0,5684.0,1386.0,4203.0,1318.0,3.1964,185800.0,<1H OCEAN +-121.85,37.3,19.0,6275.0,1546.0,4312.0,1466.0,2.7768,178600.0,<1H OCEAN +-121.84,37.29,24.0,3403.0,656.0,2829.0,612.0,4.775,191900.0,<1H OCEAN +-121.84,37.29,4.0,2937.0,648.0,1780.0,665.0,4.3851,160400.0,<1H OCEAN +-121.84,37.28,18.0,2749.0,633.0,1779.0,561.0,3.925,166100.0,<1H OCEAN +-121.83,37.31,19.0,11181.0,1895.0,7817.0,1853.0,5.6058,232700.0,<1H OCEAN +-121.83,37.3,17.0,1299.0,211.0,825.0,217.0,4.5,235800.0,<1H OCEAN +-121.81,37.29,15.0,5957.0,1037.0,3838.0,997.0,6.2907,253100.0,<1H OCEAN +-121.81,37.28,17.0,2277.0,428.0,1887.0,422.0,5.7078,217000.0,<1H OCEAN +-121.82,37.28,33.0,2873.0,489.0,1946.0,475.0,5.0709,176400.0,<1H OCEAN +-121.83,37.29,10.0,1828.0,453.0,1356.0,409.0,4.5943,123500.0,<1H OCEAN +-121.83,37.29,20.0,1649.0,408.0,1729.0,362.0,3.3833,115200.0,<1H OCEAN +-121.83,37.28,33.0,1115.0,250.0,1168.0,261.0,3.9009,178600.0,<1H OCEAN +-121.83,37.28,19.0,2644.0,833.0,2317.0,780.0,3.1042,183100.0,<1H OCEAN +-121.82,37.28,31.0,1340.0,235.0,1336.0,270.0,4.2361,179500.0,<1H OCEAN +-121.83,37.29,20.0,2308.0,461.0,2223.0,456.0,4.2589,191000.0,<1H OCEAN +-121.82,37.29,16.0,2085.0,394.0,1705.0,391.0,5.0225,222800.0,<1H OCEAN +-121.83,37.32,17.0,1887.0,664.0,1906.0,597.0,2.5652,165300.0,<1H OCEAN +-121.82,37.31,22.0,2044.0,402.0,1925.0,429.0,3.7102,177500.0,<1H OCEAN +-121.82,37.31,15.0,1504.0,294.0,1267.0,291.0,5.5145,219400.0,<1H OCEAN +-121.81,37.31,14.0,2731.0,578.0,1109.0,551.0,3.1382,139700.0,<1H OCEAN +-121.81,37.31,15.0,1898.0,395.0,1527.0,381.0,4.4792,212500.0,<1H OCEAN +-121.81,37.32,26.0,2528.0,511.0,2677.0,512.0,4.1165,164900.0,<1H OCEAN +-121.82,37.32,10.0,2506.0,623.0,2634.0,622.0,3.135,231400.0,<1H OCEAN +-121.82,37.33,23.0,3279.0,647.0,2582.0,630.0,4.3782,175800.0,<1H OCEAN +-121.83,37.32,26.0,1125.0,210.0,943.0,214.0,4.825,181000.0,<1H OCEAN +-121.81,37.33,4.0,5532.0,778.0,3651.0,770.0,7.2982,343000.0,<1H OCEAN +-121.8,37.34,25.0,1642.0,297.0,1146.0,279.0,5.2088,231400.0,<1H OCEAN +-121.8,37.34,20.0,2686.0,414.0,1507.0,405.0,5.8068,263900.0,<1H OCEAN +-121.79,37.34,20.0,2018.0,328.0,1196.0,323.0,4.9318,262400.0,<1H OCEAN +-121.8,37.35,15.0,2781.0,498.0,1389.0,475.0,5.614,223300.0,<1H OCEAN +-121.78,37.34,21.0,1959.0,292.0,891.0,300.0,7.375,338400.0,<1H OCEAN +-121.75,37.35,18.0,1947.0,250.0,605.0,184.0,8.1871,500001.0,<1H OCEAN +-121.77,37.33,8.0,3088.0,474.0,1799.0,456.0,7.2707,355300.0,<1H OCEAN +-121.77,37.33,9.0,3160.0,468.0,1675.0,470.0,7.5443,348400.0,<1H OCEAN +-121.78,37.34,11.0,3195.0,410.0,1774.0,418.0,7.0671,378200.0,<1H OCEAN +-121.79,37.33,13.0,2978.0,505.0,1794.0,485.0,6.6813,277800.0,<1H OCEAN +-121.79,37.33,18.0,3611.0,614.0,2381.0,642.0,5.6345,231000.0,<1H OCEAN +-121.79,37.33,10.0,3283.0,550.0,2491.0,522.0,6.6633,283700.0,<1H OCEAN +-121.78,37.33,10.0,2829.0,394.0,1510.0,386.0,6.68,359500.0,<1H OCEAN +-121.8,37.32,20.0,2473.0,476.0,2228.0,501.0,5.6817,224200.0,<1H OCEAN +-121.8,37.32,23.0,1829.0,346.0,1277.0,324.0,4.8092,217400.0,<1H OCEAN +-121.8,37.32,14.0,4412.0,924.0,2698.0,891.0,4.7027,227600.0,<1H OCEAN +-121.79,37.32,6.0,2850.0,561.0,2160.0,581.0,5.5336,241900.0,<1H OCEAN +-121.79,37.32,20.0,3034.0,451.0,1669.0,430.0,6.2742,241300.0,<1H OCEAN +-121.76,37.33,5.0,4153.0,719.0,2435.0,697.0,5.6306,286200.0,<1H OCEAN +-121.81,37.3,14.0,1870.0,348.0,1214.0,347.0,4.9769,186500.0,<1H OCEAN +-121.81,37.31,15.0,1794.0,366.0,1533.0,371.0,5.7843,209900.0,<1H OCEAN +-121.8,37.31,15.0,1807.0,378.0,1277.0,341.0,4.5045,164500.0,<1H OCEAN +-121.8,37.3,16.0,906.0,149.0,605.0,148.0,4.8173,235600.0,<1H OCEAN +-121.81,37.3,15.0,1929.0,345.0,1683.0,347.0,5.5248,235600.0,<1H OCEAN +-121.8,37.31,21.0,2630.0,446.0,1789.0,389.0,5.0543,232000.0,<1H OCEAN +-121.79,37.31,22.0,2199.0,361.0,1270.0,386.0,5.1149,235700.0,<1H OCEAN +-121.78,37.31,25.0,2093.0,297.0,983.0,338.0,6.4664,271500.0,<1H OCEAN +-121.79,37.3,10.0,5469.0,950.0,3083.0,906.0,5.9399,241900.0,<1H OCEAN +-121.76,37.28,17.0,660.0,129.0,431.0,123.0,4.9097,241000.0,<1H OCEAN +-121.74,37.3,12.0,1961.0,280.0,985.0,269.0,6.7159,362700.0,<1H OCEAN +-121.78,37.31,7.0,1973.0,328.0,1047.0,303.0,6.234,292200.0,<1H OCEAN +-121.77,37.31,16.0,1649.0,228.0,769.0,230.0,6.6455,302600.0,<1H OCEAN +-121.76,37.29,15.0,2267.0,348.0,1150.0,327.0,7.1267,277900.0,<1H OCEAN +-121.76,37.3,6.0,3526.0,559.0,1378.0,491.0,6.1463,335500.0,<1H OCEAN +-121.75,37.3,23.0,1801.0,415.0,548.0,393.0,2.5052,133700.0,<1H OCEAN +-121.74,37.29,6.0,7292.0,1295.0,2468.0,1262.0,5.6411,294700.0,<1H OCEAN +-121.75,37.29,15.0,1486.0,310.0,455.0,296.0,4.3365,221000.0,<1H OCEAN +-121.84,37.34,33.0,1019.0,191.0,938.0,215.0,4.0929,165000.0,<1H OCEAN +-121.84,37.33,28.0,1535.0,330.0,1937.0,317.0,4.1146,160100.0,<1H OCEAN +-121.84,37.33,26.0,1934.0,408.0,2059.0,416.0,3.6765,163600.0,<1H OCEAN +-121.83,37.32,21.0,4559.0,1163.0,5124.0,1124.0,3.2052,179000.0,<1H OCEAN +-121.82,37.35,24.0,2298.0,575.0,2409.0,569.0,3.4509,182400.0,<1H OCEAN +-121.82,37.34,23.0,7609.0,1446.0,6034.0,1414.0,4.8424,195300.0,<1H OCEAN +-121.81,37.35,28.0,3477.0,671.0,2990.0,648.0,4.4671,172600.0,<1H OCEAN +-121.81,37.35,29.0,2396.0,452.0,2000.0,481.0,4.375,185500.0,<1H OCEAN +-121.8,37.35,27.0,2358.0,415.0,1562.0,383.0,5.2297,192800.0,<1H OCEAN +-121.8,37.35,17.0,2529.0,423.0,1756.0,429.0,5.1017,240700.0,<1H OCEAN +-121.84,37.34,27.0,2512.0,526.0,3033.0,526.0,4.25,162900.0,<1H OCEAN +-121.83,37.33,27.0,3127.0,610.0,3257.0,604.0,4.6333,173600.0,<1H OCEAN +-121.83,37.34,21.0,6404.0,1232.0,6047.0,1235.0,4.2098,193400.0,<1H OCEAN +-121.83,37.34,26.0,1848.0,339.0,1952.0,327.0,4.087,182500.0,<1H OCEAN +-121.87,37.36,34.0,938.0,242.0,769.0,226.0,3.5625,194500.0,<1H OCEAN +-121.86,37.35,35.0,2391.0,605.0,1886.0,595.0,2.5551,182100.0,<1H OCEAN +-121.86,37.35,43.0,1536.0,371.0,1256.0,357.0,2.8,153300.0,<1H OCEAN +-121.85,37.34,27.0,1481.0,409.0,1505.0,391.0,2.5769,137500.0,<1H OCEAN +-121.84,37.35,22.0,2914.0,768.0,2962.0,762.0,2.2031,164000.0,<1H OCEAN +-121.85,37.35,29.0,3515.0,807.0,3572.0,776.0,2.7562,160100.0,<1H OCEAN +-121.84,37.35,20.0,3375.0,867.0,4610.0,860.0,2.6894,182200.0,<1H OCEAN +-121.86,37.37,15.0,8162.0,2124.0,8793.0,2086.0,3.3306,210300.0,<1H OCEAN +-121.84,37.37,15.0,3315.0,1042.0,2749.0,1059.0,2.3199,140100.0,<1H OCEAN +-121.85,37.36,15.0,3148.0,1116.0,3556.0,1037.0,3.0466,159600.0,<1H OCEAN +-121.85,37.36,18.0,1525.0,485.0,1705.0,448.0,3.7198,128600.0,<1H OCEAN +-121.85,37.36,11.0,2109.0,592.0,2744.0,607.0,4.0452,205900.0,<1H OCEAN +-121.86,37.36,31.0,1602.0,358.0,1179.0,354.0,4.4896,156800.0,<1H OCEAN +-121.84,37.38,34.0,762.0,182.0,611.0,193.0,3.5625,201800.0,<1H OCEAN +-121.85,37.38,12.0,12980.0,2568.0,8190.0,2515.0,5.2415,286500.0,<1H OCEAN +-121.84,37.39,31.0,5524.0,914.0,2848.0,879.0,5.5592,229900.0,<1H OCEAN +-121.83,37.38,15.0,4430.0,992.0,3278.0,1018.0,4.5533,209900.0,<1H OCEAN +-121.84,37.38,33.0,835.0,181.0,781.0,169.0,5.1082,195800.0,<1H OCEAN +-121.83,37.38,31.0,3633.0,843.0,2677.0,797.0,3.2222,184800.0,<1H OCEAN +-121.83,37.37,43.0,821.0,149.0,370.0,135.0,4.25,209100.0,<1H OCEAN +-121.83,37.37,43.0,1461.0,284.0,800.0,258.0,3.2279,182400.0,<1H OCEAN +-121.84,37.37,42.0,1237.0,232.0,900.0,241.0,3.8571,187500.0,<1H OCEAN +-121.84,37.37,28.0,1579.0,339.0,1252.0,353.0,4.1615,214800.0,<1H OCEAN +-121.82,37.37,40.0,802.0,149.0,445.0,143.0,4.0446,196300.0,<1H OCEAN +-121.83,37.36,29.0,4045.0,885.0,3036.0,845.0,3.1982,171700.0,<1H OCEAN +-121.83,37.36,22.0,3936.0,860.0,3508.0,877.0,4.2312,183800.0,<1H OCEAN +-121.83,37.35,31.0,2914.0,715.0,3547.0,645.0,3.7143,178600.0,<1H OCEAN +-121.82,37.37,41.0,1558.0,281.0,970.0,304.0,4.4167,215200.0,<1H OCEAN +-121.81,37.37,26.0,2987.0,539.0,1931.0,518.0,5.1099,213100.0,<1H OCEAN +-121.82,37.36,33.0,1624.0,337.0,1412.0,323.0,4.0385,167600.0,<1H OCEAN +-121.82,37.36,34.0,1834.0,377.0,1450.0,347.0,3.7188,161500.0,<1H OCEAN +-121.82,37.37,42.0,2913.0,577.0,1873.0,580.0,3.7214,167900.0,<1H OCEAN +-121.81,37.39,34.0,2218.0,286.0,827.0,299.0,7.4559,456500.0,<1H OCEAN +-121.82,37.39,37.0,4137.0,636.0,1569.0,578.0,6.1008,286200.0,<1H OCEAN +-121.82,37.38,32.0,3747.0,665.0,1687.0,649.0,5.4949,330800.0,<1H OCEAN +-121.81,37.38,29.0,570.0,76.0,244.0,72.0,12.3292,416700.0,<1H OCEAN +-121.82,37.38,32.0,1650.0,246.0,768.0,263.0,6.8462,320900.0,<1H OCEAN +-121.81,37.37,24.0,962.0,146.0,492.0,155.0,7.2861,328000.0,<1H OCEAN +-121.79,37.38,22.0,3650.0,527.0,1637.0,520.0,5.3774,325600.0,<1H OCEAN +-121.81,37.36,20.0,3189.0,420.0,1234.0,389.0,7.5813,374100.0,<1H OCEAN +-121.87,37.39,9.0,2522.0,547.0,1591.0,481.0,4.9091,259700.0,<1H OCEAN +-121.87,37.39,16.0,2655.0,487.0,1862.0,448.0,6.057,246800.0,<1H OCEAN +-121.87,37.38,16.0,1050.0,245.0,722.0,228.0,4.5187,163500.0,<1H OCEAN +-121.87,37.38,16.0,3275.0,529.0,1863.0,527.0,5.5429,269100.0,<1H OCEAN +-121.88,37.39,13.0,3334.0,565.0,2240.0,561.0,7.105,273900.0,<1H OCEAN +-121.87,37.41,17.0,3719.0,588.0,2089.0,561.0,6.7867,273700.0,<1H OCEAN +-121.87,37.4,16.0,1767.0,268.0,1061.0,280.0,6.9584,351600.0,<1H OCEAN +-121.86,37.4,19.0,4043.0,764.0,2196.0,708.0,6.1504,268400.0,<1H OCEAN +-121.87,37.39,16.0,1334.0,389.0,1103.0,415.0,3.7153,229800.0,<1H OCEAN +-121.86,37.39,17.0,1777.0,328.0,1235.0,329.0,5.4225,258100.0,<1H OCEAN +-121.85,37.39,15.0,8748.0,1547.0,4784.0,1524.0,5.8322,276600.0,<1H OCEAN +-121.82,37.42,13.0,3752.0,572.0,1581.0,526.0,6.1091,329400.0,<1H OCEAN +-121.81,37.41,25.0,2496.0,351.0,1034.0,367.0,7.0544,320700.0,<1H OCEAN +-121.84,37.4,25.0,1866.0,271.0,840.0,275.0,6.8677,288500.0,<1H OCEAN +-121.83,37.4,27.0,1145.0,150.0,492.0,160.0,5.716,348300.0,<1H OCEAN +-121.9,37.4,16.0,2998.0,603.0,1606.0,615.0,3.7622,150000.0,<1H OCEAN +-121.9,37.39,42.0,42.0,14.0,26.0,14.0,1.7361,500001.0,<1H OCEAN +-121.9,37.37,20.0,78.0,72.0,120.0,69.0,1.0938,187500.0,<1H OCEAN +-121.88,37.37,14.0,6016.0,1404.0,3258.0,1316.0,3.5745,333700.0,<1H OCEAN +-121.87,37.38,14.0,3851.0,534.0,2052.0,478.0,7.0735,335600.0,<1H OCEAN +-121.86,37.38,15.0,2052.0,405.0,1380.0,409.0,5.8686,181100.0,<1H OCEAN +-121.89,37.39,2.0,1136.0,365.0,535.0,257.0,4.375,425000.0,<1H OCEAN +-121.88,37.4,9.0,6751.0,,4240.0,1438.0,5.34,257400.0,<1H OCEAN +-121.89,37.38,3.0,4778.0,1047.0,2522.0,990.0,5.7695,271400.0,<1H OCEAN +-121.88,37.37,3.0,4430.0,841.0,2559.0,801.0,6.0959,272700.0,<1H OCEAN +-121.86,37.4,16.0,2391.0,369.0,1419.0,373.0,5.8721,267800.0,<1H OCEAN +-121.86,37.4,21.0,1386.0,260.0,946.0,257.0,6.5226,258500.0,<1H OCEAN +-121.85,37.41,25.0,1837.0,278.0,1006.0,271.0,6.6842,265300.0,<1H OCEAN +-121.85,37.4,23.0,1793.0,319.0,1145.0,310.0,5.5968,243200.0,<1H OCEAN +-121.86,37.41,16.0,2938.0,589.0,1718.0,568.0,5.5073,178900.0,<1H OCEAN +-121.85,37.41,17.0,2156.0,435.0,1400.0,393.0,5.6096,199100.0,<1H OCEAN +-121.86,37.41,16.0,1603.0,287.0,1080.0,296.0,6.1256,266900.0,<1H OCEAN +-121.86,37.41,16.0,1489.0,262.0,945.0,263.0,7.3861,267000.0,<1H OCEAN +-121.86,37.41,16.0,2411.0,420.0,1671.0,442.0,6.5004,263600.0,<1H OCEAN +-121.9,37.44,12.0,4228.0,734.0,2594.0,732.0,6.6086,299400.0,<1H OCEAN +-121.9,37.44,4.0,1646.0,408.0,853.0,410.0,5.0821,265500.0,<1H OCEAN +-121.9,37.44,9.0,957.0,139.0,532.0,142.0,8.6675,441000.0,<1H OCEAN +-121.89,37.44,8.0,2534.0,,1527.0,364.0,7.8532,422800.0,<1H OCEAN +-121.88,37.43,17.0,3469.0,896.0,2762.0,808.0,3.3884,245800.0,<1H OCEAN +-121.88,37.43,31.0,2573.0,474.0,1898.0,475.0,5.6651,204100.0,<1H OCEAN +-121.87,37.43,22.0,3805.0,596.0,2118.0,621.0,6.2892,254200.0,<1H OCEAN +-121.85,37.44,8.0,426.0,61.0,241.0,55.0,7.309,367900.0,<1H OCEAN +-121.87,37.42,19.0,12128.0,2112.0,6810.0,2040.0,6.4419,264500.0,<1H OCEAN +-121.87,37.41,24.0,3308.0,548.0,1891.0,544.0,5.6683,248700.0,<1H OCEAN +-121.88,37.41,23.0,3224.0,652.0,2183.0,655.0,4.3807,226900.0,<1H OCEAN +-121.86,37.42,20.0,5032.0,808.0,2695.0,801.0,6.6227,264800.0,<1H OCEAN +-121.87,37.42,25.0,4430.0,729.0,2685.0,721.0,5.6965,261100.0,<1H OCEAN +-121.88,37.44,17.0,1621.0,299.0,1028.0,293.0,5.2722,186900.0,<1H OCEAN +-121.88,37.44,20.0,1351.0,372.0,1427.0,394.0,4.4712,144000.0,<1H OCEAN +-121.88,37.44,26.0,1471.0,348.0,1089.0,320.0,5.3057,226400.0,<1H OCEAN +-121.88,37.44,23.0,1310.0,267.0,910.0,261.0,5.3994,237900.0,<1H OCEAN +-121.89,37.46,5.0,1519.0,186.0,705.0,186.0,10.3798,500001.0,<1H OCEAN +-121.88,37.46,5.0,1819.0,245.0,802.0,228.0,10.9722,500001.0,<1H OCEAN +-121.89,37.45,15.0,2428.0,513.0,1687.0,519.0,4.75,254400.0,<1H OCEAN +-121.88,37.44,14.0,2073.0,343.0,1107.0,330.0,6.7093,311200.0,<1H OCEAN +-121.87,37.46,43.0,91.0,12.0,58.0,16.0,15.0001,500001.0,<1H OCEAN +-121.9,37.46,29.0,2385.0,513.0,1788.0,510.0,3.8421,220700.0,<1H OCEAN +-121.91,37.46,26.0,2762.0,496.0,1716.0,459.0,5.6062,226800.0,<1H OCEAN +-121.9,37.45,18.0,4900.0,814.0,2984.0,758.0,6.6176,276200.0,<1H OCEAN +-121.9,37.45,16.0,2952.0,446.0,1525.0,460.0,5.6063,320500.0,<1H OCEAN +-121.91,37.42,19.0,1684.0,387.0,1224.0,376.0,4.1389,174100.0,<1H OCEAN +-121.9,37.41,24.0,4759.0,921.0,3188.0,902.0,5.6344,228700.0,<1H OCEAN +-121.89,37.42,26.0,40.0,8.0,52.0,7.0,7.7197,225000.0,<1H OCEAN +-121.92,37.45,10.0,3937.0,1054.0,2032.0,1002.0,3.2617,252200.0,<1H OCEAN +-121.91,37.44,26.0,1669.0,276.0,951.0,278.0,4.7794,225800.0,<1H OCEAN +-121.91,37.44,19.0,2174.0,484.0,1645.0,484.0,5.0362,255100.0,<1H OCEAN +-121.91,37.44,24.0,1212.0,251.0,799.0,242.0,5.0808,212500.0,<1H OCEAN +-121.91,37.43,33.0,2791.0,496.0,1714.0,485.0,4.8304,224900.0,<1H OCEAN +-122.07,37.44,21.0,4599.0,986.0,2756.0,943.0,2.9817,225000.0,NEAR BAY +-121.96,37.43,18.0,2514.0,578.0,2205.0,545.0,3.3859,158000.0,<1H OCEAN +-121.97,37.44,17.0,127.0,28.0,219.0,22.0,4.5179,112500.0,<1H OCEAN +-121.99,37.4,24.0,3217.0,689.0,1196.0,684.0,3.4896,226700.0,<1H OCEAN +-121.99,37.4,35.0,1845.0,325.0,1343.0,317.0,5.3912,235300.0,<1H OCEAN +-121.99,37.39,25.0,3495.0,834.0,2484.0,797.0,4.8145,230700.0,<1H OCEAN +-122.02,37.4,33.0,2015.0,484.0,1285.0,419.0,4.0655,226800.0,<1H OCEAN +-122.01,37.4,14.0,4841.0,1130.0,813.0,517.0,3.7614,137500.0,<1H OCEAN +-122.0,37.4,17.0,5121.0,1017.0,1470.0,968.0,2.9706,81300.0,<1H OCEAN +-122.0,37.4,17.0,4324.0,854.0,1656.0,885.0,3.6619,232400.0,<1H OCEAN +-122.0,37.4,35.0,1542.0,298.0,1164.0,318.0,5.9145,236900.0,<1H OCEAN +-122.01,37.4,24.0,1297.0,297.0,441.0,282.0,3.1439,47500.0,<1H OCEAN +-122.0,37.39,33.0,2154.0,405.0,1655.0,434.0,5.7962,229800.0,<1H OCEAN +-121.96,37.41,17.0,3208.0,617.0,2286.0,602.0,5.2937,238000.0,<1H OCEAN +-121.97,37.4,17.0,2937.0,558.0,1662.0,533.0,5.8792,255500.0,<1H OCEAN +-121.96,37.39,20.0,1032.0,229.0,658.0,238.0,4.5062,219300.0,<1H OCEAN +-121.95,37.39,24.0,5230.0,934.0,3795.0,970.0,5.4228,264100.0,<1H OCEAN +-121.95,37.38,22.0,765.0,198.0,390.0,176.0,3.1812,87500.0,<1H OCEAN +-121.95,37.41,13.0,2164.0,412.0,1087.0,411.0,4.7625,137500.0,<1H OCEAN +-121.94,37.42,16.0,3936.0,788.0,1910.0,769.0,4.7049,112500.0,<1H OCEAN +-121.93,37.4,34.0,148.0,28.0,132.0,13.0,3.375,67500.0,<1H OCEAN +-121.91,37.36,42.0,3224.0,708.0,1940.0,674.0,3.2153,199700.0,<1H OCEAN +-121.92,37.36,42.0,198.0,32.0,158.0,32.0,3.1563,137500.0,<1H OCEAN +-121.95,37.37,39.0,446.0,129.0,317.0,127.0,3.0357,208300.0,<1H OCEAN +-121.95,37.36,27.0,3236.0,832.0,2230.0,798.0,3.5625,208600.0,<1H OCEAN +-121.95,37.36,25.0,3472.0,956.0,2267.0,944.0,2.7727,235600.0,<1H OCEAN +-121.93,37.35,36.0,1823.0,410.0,1589.0,387.0,3.1065,234100.0,<1H OCEAN +-121.93,37.34,48.0,2068.0,495.0,946.0,452.0,3.0375,218500.0,<1H OCEAN +-121.98,37.37,36.0,1651.0,344.0,1062.0,331.0,4.575,215400.0,<1H OCEAN +-121.98,37.36,32.0,1199.0,229.0,814.0,238.0,4.6719,252100.0,<1H OCEAN +-121.98,37.37,35.0,995.0,202.0,615.0,199.0,5.0942,217500.0,<1H OCEAN +-121.99,37.37,27.0,1797.0,538.0,1610.0,531.0,4.2422,237500.0,<1H OCEAN +-121.97,37.36,24.0,4841.0,894.0,2656.0,920.0,6.0573,254500.0,<1H OCEAN +-121.97,37.36,34.0,884.0,153.0,534.0,154.0,6.0116,271200.0,<1H OCEAN +-121.97,37.35,35.0,1880.0,370.0,926.0,321.0,4.2273,269900.0,<1H OCEAN +-121.96,37.36,16.0,5040.0,1325.0,3150.0,1196.0,4.2837,264500.0,<1H OCEAN +-121.96,37.36,33.0,2581.0,623.0,1598.0,628.0,3.5199,261400.0,<1H OCEAN +-121.97,37.35,36.0,815.0,126.0,353.0,122.0,6.3191,258300.0,<1H OCEAN +-121.97,37.36,36.0,765.0,134.0,306.0,136.0,4.575,247600.0,<1H OCEAN +-121.98,37.36,34.0,1735.0,318.0,1019.0,301.0,4.5625,242700.0,<1H OCEAN +-121.98,37.36,33.0,1582.0,272.0,809.0,267.0,5.7059,287200.0,<1H OCEAN +-121.98,37.36,35.0,1293.0,223.0,701.0,216.0,7.8543,281900.0,<1H OCEAN +-121.98,37.36,35.0,1440.0,267.0,743.0,259.0,5.0866,254600.0,<1H OCEAN +-121.99,37.36,32.0,1754.0,324.0,917.0,330.0,4.6761,298300.0,<1H OCEAN +-121.99,37.36,33.0,2321.0,480.0,1230.0,451.0,4.9091,270300.0,<1H OCEAN +-121.99,37.36,33.0,2677.0,644.0,1469.0,633.0,3.2048,261800.0,<1H OCEAN +-121.99,37.36,33.0,2545.0,467.0,1287.0,458.0,5.5,282200.0,<1H OCEAN +-121.98,37.35,41.0,1150.0,249.0,729.0,260.0,3.5491,261100.0,<1H OCEAN +-121.99,37.35,18.0,1712.0,509.0,972.0,467.0,4.3971,238900.0,<1H OCEAN +-121.99,37.35,16.0,3249.0,947.0,1637.0,841.0,4.5427,198400.0,<1H OCEAN +-121.99,37.35,25.0,1527.0,325.0,707.0,339.0,4.375,212200.0,<1H OCEAN +-121.98,37.35,36.0,1054.0,193.0,546.0,187.0,4.5625,240000.0,<1H OCEAN +-121.97,37.35,30.0,1955.0,,999.0,386.0,4.6328,287100.0,<1H OCEAN +-121.98,37.34,33.0,3570.0,776.0,1922.0,761.0,4.9562,238700.0,<1H OCEAN +-121.98,37.34,18.0,6649.0,1712.0,3604.0,1651.0,4.5368,307400.0,<1H OCEAN +-121.99,37.34,26.0,3637.0,933.0,2249.0,905.0,3.9625,262900.0,<1H OCEAN +-121.96,37.35,37.0,1755.0,325.0,699.0,321.0,3.925,251300.0,<1H OCEAN +-121.97,37.34,33.0,3162.0,,1553.0,686.0,3.6682,266100.0,<1H OCEAN +-121.97,37.35,35.0,1249.0,232.0,556.0,247.0,3.925,287100.0,<1H OCEAN +-121.96,37.35,32.0,1484.0,274.0,673.0,272.0,5.2019,279900.0,<1H OCEAN +-121.95,37.35,36.0,832.0,211.0,545.0,211.0,3.2813,244400.0,<1H OCEAN +-121.94,37.35,52.0,906.0,227.0,1662.0,219.0,3.1667,231600.0,<1H OCEAN +-121.94,37.35,18.0,1922.0,561.0,1096.0,545.0,2.3713,244000.0,<1H OCEAN +-121.95,37.35,48.0,1246.0,294.0,697.0,284.0,3.6118,235500.0,<1H OCEAN +-121.95,37.35,42.0,1421.0,330.0,659.0,303.0,3.3333,237900.0,<1H OCEAN +-121.95,37.35,52.0,2382.0,523.0,1096.0,492.0,4.2656,236100.0,<1H OCEAN +-121.94,37.34,42.0,2174.0,420.0,1304.0,464.0,3.1429,286500.0,<1H OCEAN +-121.94,37.34,29.0,3377.0,853.0,1674.0,792.0,3.4233,229300.0,<1H OCEAN +-121.94,37.34,41.0,2151.0,473.0,1092.0,469.0,3.7321,250000.0,<1H OCEAN +-121.94,37.33,36.0,1893.0,359.0,797.0,360.0,3.6818,257600.0,<1H OCEAN +-121.94,37.33,37.0,1822.0,329.0,845.0,348.0,4.75,251100.0,<1H OCEAN +-121.94,37.34,36.0,3142.0,632.0,1372.0,560.0,5.0175,246100.0,<1H OCEAN +-121.95,37.34,25.0,5236.0,1320.0,2529.0,1213.0,3.1702,256100.0,<1H OCEAN +-121.95,37.33,31.0,1866.0,465.0,821.0,447.0,2.3547,275900.0,<1H OCEAN +-121.95,37.33,36.0,1683.0,286.0,740.0,324.0,4.7604,294700.0,<1H OCEAN +-121.96,37.33,26.0,3269.0,788.0,1427.0,696.0,4.2136,288300.0,<1H OCEAN +-121.96,37.33,35.0,2294.0,411.0,1054.0,449.0,4.0667,276900.0,<1H OCEAN +-121.96,37.34,42.0,2001.0,402.0,942.0,375.0,4.4453,255400.0,<1H OCEAN +-121.96,37.34,36.0,844.0,153.0,373.0,160.0,5.791,254100.0,<1H OCEAN +-121.96,37.34,18.0,4438.0,939.0,1901.0,895.0,5.3873,288300.0,<1H OCEAN +-121.96,37.34,34.0,1461.0,299.0,739.0,276.0,3.4375,252600.0,<1H OCEAN +-121.96,37.34,37.0,663.0,127.0,293.0,132.0,3.7813,247800.0,<1H OCEAN +-121.98,37.33,30.0,2645.0,462.0,1506.0,480.0,6.3716,330500.0,<1H OCEAN +-121.98,37.33,30.0,3742.0,633.0,1721.0,631.0,6.1388,302400.0,<1H OCEAN +-121.99,37.34,27.0,3353.0,653.0,1571.0,621.0,5.273,315600.0,<1H OCEAN +-121.97,37.33,21.0,8275.0,1566.0,3636.0,1524.0,5.1506,302100.0,<1H OCEAN +-121.98,37.33,25.0,3223.0,612.0,1529.0,602.0,5.121,287600.0,<1H OCEAN +-121.98,37.33,35.0,1907.0,326.0,912.0,313.0,5.9567,294300.0,<1H OCEAN +-121.99,37.33,35.0,1802.0,291.0,841.0,315.0,4.8365,313900.0,<1H OCEAN +-121.99,37.33,33.0,2023.0,425.0,1016.0,405.0,3.9417,285800.0,<1H OCEAN +-121.98,37.31,28.0,3840.0,629.0,1883.0,662.0,6.4095,335900.0,<1H OCEAN +-121.99,37.3,28.0,4863.0,901.0,2110.0,868.0,5.1483,342000.0,<1H OCEAN +-122.0,37.3,28.0,5096.0,1011.0,2588.0,954.0,5.357,355200.0,<1H OCEAN +-121.98,37.32,17.0,9789.0,2552.0,4748.0,2206.0,4.2531,279800.0,<1H OCEAN +-121.99,37.32,20.0,4461.0,864.0,2042.0,808.0,4.7083,217700.0,<1H OCEAN +-121.98,37.31,32.0,2248.0,460.0,1191.0,419.0,5.606,288900.0,<1H OCEAN +-121.98,37.31,34.0,2034.0,359.0,1016.0,375.0,5.8127,288300.0,<1H OCEAN +-121.99,37.31,26.0,3285.0,502.0,1443.0,530.0,5.7833,339600.0,<1H OCEAN +-121.97,37.32,19.0,4620.0,1404.0,2672.0,1308.0,3.699,237500.0,<1H OCEAN +-121.96,37.32,11.0,1711.0,493.0,1094.0,543.0,3.73,227700.0,<1H OCEAN +-121.95,37.32,39.0,1164.0,199.0,619.0,231.0,4.6304,263200.0,<1H OCEAN +-121.95,37.32,20.0,1145.0,198.0,431.0,173.0,3.1103,281900.0,<1H OCEAN +-121.95,37.31,27.0,4140.0,,2135.0,893.0,3.6292,264600.0,<1H OCEAN +-121.96,37.31,26.0,4310.0,678.0,1819.0,686.0,7.0469,365500.0,<1H OCEAN +-121.96,37.31,31.0,3890.0,711.0,1898.0,717.0,5.2534,290900.0,<1H OCEAN +-121.97,37.31,21.0,7628.0,2166.0,3637.0,1749.0,3.6401,267500.0,<1H OCEAN +-121.97,37.31,25.0,5775.0,1225.0,3580.0,1138.0,3.9187,314900.0,<1H OCEAN +-121.97,37.3,25.0,5463.0,1351.0,2758.0,1310.0,3.0079,277300.0,<1H OCEAN +-121.95,37.32,33.0,726.0,168.0,351.0,147.0,3.1458,270500.0,<1H OCEAN +-121.94,37.31,30.0,4238.0,1010.0,1914.0,972.0,3.7632,307000.0,<1H OCEAN +-121.95,37.31,27.0,2462.0,570.0,1278.0,565.0,3.5652,329500.0,<1H OCEAN +-121.94,37.3,30.0,1758.0,248.0,814.0,256.0,6.623,332500.0,<1H OCEAN +-121.95,37.3,21.0,4193.0,1068.0,2487.0,1011.0,3.7188,293000.0,<1H OCEAN +-121.94,37.3,25.0,1455.0,370.0,734.0,331.0,3.2727,262500.0,<1H OCEAN +-121.95,37.3,25.0,5641.0,1517.0,3786.0,1410.0,3.3958,267500.0,<1H OCEAN +-121.96,37.3,20.0,4228.0,1006.0,2334.0,1007.0,4.3081,227300.0,<1H OCEAN +-121.94,37.29,22.0,2593.0,637.0,1249.0,623.0,3.75,212500.0,<1H OCEAN +-121.94,37.29,20.0,710.0,188.0,363.0,176.0,4.0962,214100.0,<1H OCEAN +-121.95,37.27,17.0,1330.0,271.0,408.0,258.0,1.7171,181300.0,<1H OCEAN +-121.95,37.28,52.0,777.0,148.0,362.0,144.0,4.0208,262500.0,<1H OCEAN +-121.95,37.29,9.0,1503.0,381.0,715.0,349.0,4.6371,234300.0,<1H OCEAN +-121.95,37.29,30.0,3734.0,813.0,1834.0,824.0,3.4505,260000.0,<1H OCEAN +-121.95,37.28,19.0,7027.0,1847.0,3759.0,1753.0,3.1509,242900.0,<1H OCEAN +-121.98,37.3,30.0,3404.0,693.0,1794.0,633.0,4.6312,283200.0,<1H OCEAN +-121.98,37.29,33.0,2120.0,349.0,907.0,336.0,7.5443,283000.0,<1H OCEAN +-121.98,37.29,31.0,2750.0,664.0,1459.0,660.0,3.2287,264900.0,<1H OCEAN +-121.96,37.28,33.0,1940.0,327.0,877.0,314.0,5.4386,280400.0,<1H OCEAN +-121.97,37.28,25.0,4707.0,695.0,1995.0,642.0,6.6437,296100.0,<1H OCEAN +-121.97,37.28,27.0,2427.0,403.0,1301.0,438.0,5.0385,277300.0,<1H OCEAN +-121.98,37.28,26.0,1182.0,309.0,620.0,306.0,3.3922,269100.0,<1H OCEAN +-121.98,37.28,28.0,3688.0,633.0,1877.0,620.0,5.7251,272600.0,<1H OCEAN +-121.98,37.28,27.0,3526.0,589.0,1725.0,553.0,5.7812,275000.0,<1H OCEAN +-121.99,37.27,27.0,2937.0,497.0,1454.0,511.0,5.4051,273500.0,<1H OCEAN +-121.99,37.29,32.0,2930.0,481.0,1336.0,481.0,6.4631,344100.0,<1H OCEAN +-121.96,37.3,23.0,4040.0,843.0,2181.0,843.0,4.0403,303400.0,<1H OCEAN +-121.97,37.3,31.0,3340.0,735.0,1891.0,686.0,4.8542,275000.0,<1H OCEAN +-121.96,37.29,24.0,1240.0,263.0,690.0,276.0,5.0,283000.0,<1H OCEAN +-121.97,37.29,25.0,4096.0,743.0,2027.0,741.0,5.3294,300300.0,<1H OCEAN +-121.97,37.29,29.0,2721.0,682.0,1602.0,646.0,3.337,265300.0,<1H OCEAN +-121.99,37.27,17.0,1527.0,267.0,775.0,260.0,5.9658,278000.0,<1H OCEAN +-121.98,37.27,25.0,3075.0,564.0,1633.0,543.0,5.2528,269400.0,<1H OCEAN +-121.98,37.27,29.0,2658.0,484.0,1318.0,498.0,5.3561,298900.0,<1H OCEAN +-121.96,37.28,28.0,5018.0,1066.0,2846.0,998.0,4.0174,273900.0,<1H OCEAN +-121.96,37.27,22.0,6114.0,1211.0,2983.0,1163.0,5.2533,269100.0,<1H OCEAN +-121.96,37.27,31.0,3347.0,589.0,1566.0,597.0,5.5151,286800.0,<1H OCEAN +-121.97,37.26,19.0,2174.0,454.0,998.0,426.0,4.6827,255100.0,<1H OCEAN +-121.96,37.26,22.0,1408.0,351.0,636.0,294.0,1.8542,333300.0,<1H OCEAN +-121.95,37.25,30.0,3298.0,634.0,1532.0,602.0,5.0863,332000.0,<1H OCEAN +-121.95,37.24,37.0,3109.0,541.0,1566.0,544.0,6.0235,413500.0,<1H OCEAN +-121.95,37.24,32.0,1382.0,239.0,705.0,251.0,6.0957,405400.0,<1H OCEAN +-121.96,37.24,26.0,3032.0,605.0,1208.0,562.0,5.4683,430900.0,<1H OCEAN +-121.96,37.25,35.0,1018.0,169.0,484.0,174.0,6.1648,371900.0,<1H OCEAN +-121.95,37.25,34.0,2906.0,544.0,1282.0,522.0,5.5127,268200.0,<1H OCEAN +-121.93,37.25,36.0,1089.0,182.0,535.0,170.0,4.69,252600.0,<1H OCEAN +-121.93,37.25,21.0,1354.0,289.0,639.0,273.0,4.5333,234200.0,<1H OCEAN +-121.92,37.25,34.0,2231.0,360.0,1035.0,365.0,4.7917,243200.0,<1H OCEAN +-121.93,37.25,32.0,1555.0,287.0,779.0,284.0,6.0358,260100.0,<1H OCEAN +-121.94,37.24,35.0,1484.0,244.0,664.0,238.0,4.675,245300.0,<1H OCEAN +-121.91,37.24,24.0,5046.0,1001.0,2449.0,968.0,4.7118,274600.0,<1H OCEAN +-121.91,37.24,30.0,2327.0,419.0,1114.0,372.0,4.7279,272000.0,<1H OCEAN +-121.92,37.24,26.0,6777.0,1051.0,3319.0,1061.0,6.3663,279400.0,<1H OCEAN +-121.94,37.24,19.0,1741.0,294.0,632.0,279.0,5.5944,290500.0,<1H OCEAN +-121.94,37.24,26.0,2561.0,388.0,1165.0,393.0,7.3522,363800.0,<1H OCEAN +-121.93,37.24,26.0,2574.0,414.0,1096.0,428.0,6.0738,335900.0,<1H OCEAN +-121.92,37.24,27.0,1265.0,216.0,660.0,232.0,5.3911,281200.0,<1H OCEAN +-121.91,37.23,22.0,2614.0,453.0,1240.0,462.0,6.0712,271800.0,<1H OCEAN +-121.91,37.23,27.0,4866.0,668.0,1956.0,659.0,7.3843,405000.0,<1H OCEAN +-121.93,37.22,21.0,4872.0,594.0,1811.0,560.0,9.3834,500001.0,<1H OCEAN +-121.96,37.23,36.0,4423.0,632.0,1719.0,608.0,7.8407,476400.0,<1H OCEAN +-121.97,37.23,22.0,2781.0,523.0,1291.0,516.0,4.6065,445900.0,<1H OCEAN +-121.98,37.22,46.0,10088.0,1910.0,3728.0,1781.0,5.2321,500001.0,<1H OCEAN +-121.96,37.22,35.0,4709.0,723.0,1866.0,694.0,8.492,500001.0,<1H OCEAN +-121.95,37.21,20.0,2345.0,322.0,890.0,276.0,10.0187,500001.0,<1H OCEAN +-121.97,37.24,35.0,2553.0,533.0,1117.0,498.0,4.4063,436100.0,<1H OCEAN +-121.98,37.23,33.0,3585.0,935.0,1511.0,835.0,3.1176,396300.0,<1H OCEAN +-122.0,37.23,36.0,3191.0,430.0,1234.0,440.0,9.0704,500001.0,<1H OCEAN +-121.96,37.25,19.0,1858.0,359.0,790.0,347.0,4.5156,339300.0,<1H OCEAN +-121.97,37.25,32.0,2892.0,496.0,1193.0,492.0,6.131,367800.0,<1H OCEAN +-121.98,37.26,27.0,2331.0,461.0,1178.0,447.0,4.6654,340700.0,<1H OCEAN +-121.99,37.27,21.0,1214.0,192.0,500.0,185.0,7.598,347800.0,<1H OCEAN +-121.99,37.26,17.0,4034.0,611.0,1158.0,560.0,8.2069,442500.0,<1H OCEAN +-121.98,37.25,19.0,755.0,93.0,267.0,99.0,15.0,500001.0,<1H OCEAN +-121.99,37.25,25.0,1743.0,212.0,604.0,200.0,10.7582,500001.0,<1H OCEAN +-121.97,37.25,21.0,2775.0,389.0,856.0,350.0,7.9135,496400.0,<1H OCEAN +-121.99,37.25,22.0,4240.0,532.0,1480.0,514.0,11.2463,500001.0,<1H OCEAN +-121.98,37.24,35.0,3574.0,485.0,1325.0,476.0,8.5425,500001.0,<1H OCEAN +-122.0,37.27,33.0,1664.0,271.0,759.0,272.0,5.7876,415800.0,<1H OCEAN +-122.01,37.27,27.0,3340.0,451.0,1220.0,447.0,8.8178,500001.0,<1H OCEAN +-122.02,37.26,24.0,2411.0,299.0,847.0,299.0,10.2666,500001.0,<1H OCEAN +-122.02,37.26,34.0,1764.0,243.0,692.0,223.0,8.0331,500001.0,<1H OCEAN +-122.01,37.25,31.0,1574.0,193.0,551.0,191.0,10.2311,500001.0,<1H OCEAN +-121.99,37.26,29.0,2718.0,365.0,982.0,339.0,7.9234,500001.0,<1H OCEAN +-122.01,37.26,14.0,2561.0,404.0,1172.0,378.0,7.6107,500001.0,<1H OCEAN +-122.03,37.25,34.0,2892.0,413.0,903.0,365.0,7.8711,500001.0,<1H OCEAN +-122.04,37.24,24.0,1521.0,209.0,539.0,192.0,11.1557,500001.0,<1H OCEAN +-122.02,37.24,28.0,2796.0,365.0,1085.0,363.0,10.6834,500001.0,<1H OCEAN +-122.03,37.29,22.0,3118.0,438.0,1147.0,425.0,10.3653,500001.0,<1H OCEAN +-122.02,37.29,18.0,2550.0,312.0,999.0,320.0,8.7939,500001.0,<1H OCEAN +-122.02,37.29,25.0,3845.0,492.0,1461.0,475.0,10.3979,500001.0,<1H OCEAN +-122.01,37.29,31.0,3136.0,431.0,1190.0,412.0,7.5,500001.0,<1H OCEAN +-122.01,37.28,22.0,2038.0,260.0,773.0,281.0,9.1569,500001.0,<1H OCEAN +-122.0,37.28,35.0,3133.0,541.0,1449.0,555.0,5.7295,346100.0,<1H OCEAN +-122.0,37.28,33.0,2170.0,311.0,854.0,303.0,8.3605,500001.0,<1H OCEAN +-122.0,37.28,32.0,2782.0,495.0,1092.0,455.0,5.4103,335900.0,<1H OCEAN +-122.03,37.27,32.0,4350.0,645.0,1551.0,609.0,7.8279,500001.0,<1H OCEAN +-122.03,37.28,29.0,3752.0,468.0,1320.0,471.0,9.8937,500001.0,<1H OCEAN +-122.02,37.28,25.0,3437.0,428.0,1198.0,411.0,9.3464,500001.0,<1H OCEAN +-122.01,37.27,28.0,3825.0,473.0,1415.0,480.0,10.675,500001.0,<1H OCEAN +-122.06,37.27,16.0,1612.0,221.0,567.0,208.0,10.5793,500001.0,<1H OCEAN +-122.04,37.29,19.0,3625.0,432.0,1252.0,409.0,12.2145,500001.0,<1H OCEAN +-122.03,37.27,25.0,4460.0,553.0,1608.0,561.0,10.7958,500001.0,<1H OCEAN +-122.04,37.26,24.0,4973.0,709.0,1692.0,696.0,7.8627,500001.0,<1H OCEAN +-122.06,37.33,29.0,1945.0,269.0,826.0,275.0,8.248,498800.0,<1H OCEAN +-122.06,37.32,30.0,3033.0,540.0,1440.0,507.0,6.2182,380800.0,<1H OCEAN +-122.05,37.31,25.0,4601.0,696.0,2003.0,666.0,8.0727,455500.0,<1H OCEAN +-122.05,37.31,25.0,4111.0,538.0,1585.0,568.0,9.2298,500001.0,<1H OCEAN +-122.06,37.3,11.0,5488.0,706.0,1947.0,641.0,10.7326,500001.0,<1H OCEAN +-122.07,37.33,13.0,2173.0,349.0,891.0,345.0,8.0158,420000.0,<1H OCEAN +-122.06,37.33,23.0,4507.0,751.0,2167.0,722.0,7.0102,500001.0,<1H OCEAN +-122.07,37.31,24.0,4401.0,698.0,1818.0,685.0,7.2986,500001.0,<1H OCEAN +-122.08,37.3,30.0,2268.0,404.0,1197.0,372.0,7.0813,485300.0,<1H OCEAN +-122.08,37.31,17.0,2560.0,396.0,959.0,400.0,7.8528,368900.0,<1H OCEAN +-122.04,37.34,20.0,4475.0,1048.0,2271.0,1021.0,4.8836,396200.0,<1H OCEAN +-122.06,37.34,13.0,2057.0,466.0,790.0,436.0,5.0081,288300.0,<1H OCEAN +-122.05,37.33,21.0,2052.0,346.0,933.0,351.0,5.3167,416300.0,<1H OCEAN +-122.04,37.33,26.0,2690.0,401.0,1264.0,429.0,7.7643,474700.0,<1H OCEAN +-122.05,37.33,17.0,3674.0,824.0,1364.0,694.0,6.3131,436400.0,<1H OCEAN +-122.04,37.33,22.0,4011.0,963.0,2206.0,879.0,4.5721,351200.0,<1H OCEAN +-122.04,37.32,27.0,2826.0,451.0,1259.0,439.0,5.7528,431400.0,<1H OCEAN +-122.04,37.31,29.0,2476.0,434.0,1217.0,416.0,6.2045,393800.0,<1H OCEAN +-122.04,37.31,24.0,3388.0,633.0,1627.0,585.0,5.154,355100.0,<1H OCEAN +-122.04,37.3,26.0,1714.0,270.0,778.0,262.0,6.075,417000.0,<1H OCEAN +-122.04,37.3,25.0,2366.0,417.0,1076.0,398.0,6.9238,345900.0,<1H OCEAN +-122.03,37.31,25.0,2131.0,410.0,1132.0,395.0,5.3508,409100.0,<1H OCEAN +-122.04,37.3,25.0,3807.0,600.0,1678.0,600.0,6.6818,411300.0,<1H OCEAN +-122.01,37.3,25.0,4044.0,551.0,1699.0,533.0,8.0837,380600.0,<1H OCEAN +-122.01,37.31,23.0,6846.0,1078.0,2951.0,1063.0,6.3702,332000.0,<1H OCEAN +-122.0,37.31,28.0,3811.0,585.0,1795.0,581.0,7.8383,372700.0,<1H OCEAN +-122.0,37.3,29.0,3429.0,524.0,1518.0,520.0,7.218,400700.0,<1H OCEAN +-122.03,37.31,19.0,2885.0,859.0,1520.0,784.0,3.375,275700.0,<1H OCEAN +-122.03,37.3,30.0,3007.0,554.0,1551.0,616.0,5.8521,326300.0,<1H OCEAN +-122.03,37.3,22.0,3583.0,758.0,1792.0,695.0,5.4842,335300.0,<1H OCEAN +-122.02,37.31,34.0,2629.0,433.0,1301.0,431.0,6.083,341400.0,<1H OCEAN +-122.02,37.31,35.0,2355.0,384.0,1248.0,378.0,5.9714,332500.0,<1H OCEAN +-122.02,37.3,26.0,1983.0,301.0,924.0,297.0,6.7123,354600.0,<1H OCEAN +-122.02,37.3,32.0,2134.0,328.0,903.0,322.0,6.359,341900.0,<1H OCEAN +-122.02,37.32,27.0,4336.0,754.0,2009.0,734.0,6.3923,348300.0,<1H OCEAN +-122.02,37.31,33.0,2563.0,434.0,1230.0,418.0,6.3197,340100.0,<1H OCEAN +-122.03,37.32,15.0,5132.0,1059.0,2156.0,982.0,5.6511,404800.0,<1H OCEAN +-122.0,37.32,34.0,3450.0,731.0,1915.0,689.0,4.7402,244500.0,<1H OCEAN +-122.01,37.31,26.0,1391.0,241.0,700.0,236.0,6.6766,332700.0,<1H OCEAN +-122.01,37.32,32.0,3108.0,613.0,1577.0,603.0,4.6613,284000.0,<1H OCEAN +-122.0,37.31,33.0,4211.0,918.0,2389.0,861.0,4.7235,242200.0,<1H OCEAN +-122.02,37.33,25.0,3823.0,584.0,1689.0,571.0,7.3693,373600.0,<1H OCEAN +-122.03,37.33,23.0,4221.0,671.0,1782.0,641.0,7.4863,412300.0,<1H OCEAN +-122.03,37.34,16.0,1755.0,410.0,674.0,410.0,5.1602,231200.0,<1H OCEAN +-122.02,37.34,30.0,1036.0,151.0,467.0,156.0,6.448,360600.0,<1H OCEAN +-122.0,37.33,30.0,4033.0,794.0,1788.0,807.0,5.6932,338700.0,<1H OCEAN +-122.02,37.35,26.0,2785.0,418.0,1221.0,422.0,8.1078,365700.0,<1H OCEAN +-122.02,37.35,22.0,3219.0,756.0,1479.0,667.0,4.1473,354400.0,<1H OCEAN +-122.02,37.34,26.0,1992.0,328.0,980.0,342.0,6.2475,350000.0,<1H OCEAN +-122.02,37.34,28.0,2488.0,396.0,1190.0,410.0,5.7881,344700.0,<1H OCEAN +-122.03,37.34,25.0,5404.0,906.0,2338.0,883.0,6.0577,451800.0,<1H OCEAN +-122.03,37.35,25.0,3095.0,514.0,1251.0,507.0,5.5388,352100.0,<1H OCEAN +-122.01,37.35,33.0,2517.0,496.0,1158.0,443.0,5.0785,289500.0,<1H OCEAN +-122.0,37.35,20.0,4304.0,851.0,2059.0,835.0,5.1674,333000.0,<1H OCEAN +-122.0,37.34,27.0,1716.0,290.0,817.0,301.0,5.9158,343100.0,<1H OCEAN +-122.0,37.34,31.0,3344.0,620.0,1604.0,572.0,5.2108,351500.0,<1H OCEAN +-122.01,37.34,31.0,3080.0,526.0,1493.0,582.0,6.3052,344200.0,<1H OCEAN +-122.05,37.35,34.0,2494.0,375.0,1399.0,382.0,7.3753,388100.0,<1H OCEAN +-122.05,37.34,34.0,2515.0,401.0,1079.0,399.0,7.7865,423900.0,<1H OCEAN +-122.05,37.34,31.0,1443.0,215.0,627.0,222.0,6.6087,416500.0,<1H OCEAN +-122.06,37.34,20.0,3435.0,593.0,1293.0,553.0,6.7578,451400.0,<1H OCEAN +-122.04,37.35,28.0,3250.0,485.0,1328.0,473.0,7.4729,431600.0,<1H OCEAN +-122.04,37.34,28.0,3081.0,460.0,1260.0,461.0,7.5372,432600.0,<1H OCEAN +-122.03,37.35,16.0,1156.0,198.0,455.0,216.0,7.2779,292900.0,<1H OCEAN +-122.04,37.35,28.0,1582.0,264.0,696.0,270.0,5.678,370100.0,<1H OCEAN +-122.04,37.34,25.0,1994.0,287.0,704.0,283.0,7.7799,447300.0,<1H OCEAN +-122.03,37.34,17.0,1165.0,278.0,598.0,287.0,4.0129,342400.0,<1H OCEAN +-122.04,37.34,23.0,2590.0,725.0,1795.0,680.0,3.16,225000.0,<1H OCEAN +-122.04,37.34,19.0,3694.0,1036.0,2496.0,986.0,3.6991,271500.0,<1H OCEAN +-122.05,37.37,35.0,1365.0,256.0,662.0,262.0,5.6533,291400.0,<1H OCEAN +-122.05,37.36,34.0,2400.0,419.0,1017.0,384.0,4.1369,316900.0,<1H OCEAN +-122.05,37.36,27.0,2621.0,513.0,1063.0,523.0,3.9848,409700.0,<1H OCEAN +-122.06,37.35,31.0,1795.0,281.0,872.0,282.0,8.0599,381800.0,<1H OCEAN +-122.06,37.36,35.0,2693.0,493.0,1343.0,455.0,6.0777,327500.0,<1H OCEAN +-122.06,37.37,32.0,2510.0,578.0,1160.0,581.0,4.9087,322700.0,<1H OCEAN +-122.04,37.37,23.0,5135.0,911.0,2351.0,863.0,5.2319,430100.0,<1H OCEAN +-122.03,37.36,28.0,2490.0,345.0,948.0,361.0,6.4913,411900.0,<1H OCEAN +-122.04,37.35,20.0,2016.0,313.0,767.0,310.0,6.837,383000.0,<1H OCEAN +-122.05,37.36,29.0,1733.0,255.0,679.0,278.0,7.5337,406800.0,<1H OCEAN +-122.04,37.36,26.0,3298.0,460.0,1241.0,472.0,6.8753,403000.0,<1H OCEAN +-122.05,37.37,27.0,3885.0,661.0,1537.0,606.0,6.6085,344700.0,<1H OCEAN +-122.03,37.36,16.0,2697.0,803.0,1369.0,723.0,4.4699,367400.0,<1H OCEAN +-122.02,37.35,17.0,2975.0,608.0,1465.0,577.0,5.8779,362200.0,<1H OCEAN +-122.02,37.35,18.0,1221.0,255.0,507.0,271.0,5.3679,228400.0,<1H OCEAN +-122.03,37.35,19.0,3811.0,1227.0,1930.0,1153.0,3.5154,311400.0,<1H OCEAN +-122.03,37.37,16.0,3402.0,1193.0,1479.0,1043.0,3.5861,500001.0,<1H OCEAN +-122.02,37.36,21.0,2471.0,677.0,1486.0,689.0,3.9038,243800.0,<1H OCEAN +-122.02,37.36,25.0,2074.0,387.0,1273.0,383.0,4.7609,378000.0,<1H OCEAN +-122.01,37.36,16.0,1105.0,354.0,499.0,324.0,4.2061,253600.0,<1H OCEAN +-122.02,37.36,24.0,1709.0,437.0,892.0,408.0,4.9671,335200.0,<1H OCEAN +-122.01,37.36,25.0,2796.0,429.0,1267.0,426.0,6.6329,349000.0,<1H OCEAN +-122.01,37.36,21.0,2483.0,396.0,1194.0,424.0,7.1273,346300.0,<1H OCEAN +-122.01,37.35,16.0,3716.0,916.0,1551.0,759.0,4.5,323600.0,<1H OCEAN +-122.0,37.36,19.0,2237.0,433.0,1158.0,426.0,6.7718,368300.0,<1H OCEAN +-122.0,37.36,17.0,2070.0,,797.0,275.0,8.6155,411200.0,<1H OCEAN +-122.0,37.36,25.0,3534.0,949.0,1880.0,849.0,3.4238,337000.0,<1H OCEAN +-122.0,37.36,17.0,6012.0,1737.0,3539.0,1625.0,3.8464,239400.0,<1H OCEAN +-122.03,37.37,9.0,2966.0,770.0,1430.0,740.0,3.0047,256000.0,<1H OCEAN +-122.03,37.37,41.0,2123.0,425.0,1032.0,435.0,4.6957,284800.0,<1H OCEAN +-122.03,37.37,30.0,1269.0,290.0,556.0,266.0,3.8125,325000.0,<1H OCEAN +-122.04,37.37,42.0,1125.0,273.0,616.0,258.0,3.6765,252800.0,<1H OCEAN +-122.04,37.37,33.0,2757.0,489.0,1201.0,481.0,5.0453,311600.0,<1H OCEAN +-122.04,37.38,38.0,2850.0,550.0,1518.0,514.0,4.2028,273600.0,<1H OCEAN +-122.03,37.38,21.0,2667.0,798.0,1433.0,727.0,3.8732,252400.0,<1H OCEAN +-122.02,37.38,43.0,1261.0,317.0,836.0,333.0,4.0911,224600.0,<1H OCEAN +-122.01,37.38,32.0,726.0,204.0,538.0,203.0,4.505,230400.0,<1H OCEAN +-122.02,37.37,8.0,5686.0,1489.0,3250.0,1329.0,4.2782,327700.0,<1H OCEAN +-122.01,37.37,11.0,2559.0,694.0,1309.0,668.0,4.1847,167300.0,<1H OCEAN +-122.01,37.37,25.0,2213.0,360.0,1066.0,390.0,7.2165,360900.0,<1H OCEAN +-122.0,37.37,16.0,1434.0,372.0,804.0,361.0,3.7045,178100.0,<1H OCEAN +-122.03,37.39,22.0,3280.0,933.0,1842.0,795.0,4.4107,232700.0,<1H OCEAN +-122.02,37.38,32.0,1889.0,487.0,1321.0,508.0,3.2574,254400.0,<1H OCEAN +-122.01,37.39,26.0,2500.0,962.0,2374.0,879.0,3.5586,222200.0,<1H OCEAN +-122.01,37.39,36.0,1976.0,361.0,1348.0,371.0,5.6447,252600.0,<1H OCEAN +-122.0,37.39,36.0,1236.0,229.0,880.0,247.0,5.791,239400.0,<1H OCEAN +-122.03,37.39,34.0,2600.0,650.0,1994.0,650.0,4.0223,250200.0,<1H OCEAN +-122.02,37.4,35.0,2348.0,531.0,1475.0,498.0,4.35,261000.0,<1H OCEAN +-122.01,37.39,16.0,3015.0,829.0,1769.0,807.0,4.0068,249500.0,<1H OCEAN +-122.02,37.39,35.0,2297.0,497.0,1428.0,497.0,4.7431,239700.0,<1H OCEAN +-122.04,37.39,5.0,8745.0,2211.0,3959.0,2019.0,4.7685,280100.0,<1H OCEAN +-122.05,37.38,23.0,3200.0,907.0,2029.0,866.0,3.5649,450000.0,<1H OCEAN +-122.05,37.38,24.0,2424.0,501.0,1367.0,507.0,4.072,364200.0,<1H OCEAN +-122.05,37.38,29.0,1875.0,340.0,816.0,350.0,5.4351,336500.0,<1H OCEAN +-122.06,37.38,20.0,4293.0,1272.0,2389.0,1210.0,4.2719,270800.0,NEAR BAY +-122.05,37.37,27.0,2687.0,768.0,1362.0,725.0,3.4028,324200.0,<1H OCEAN +-122.05,37.39,25.0,347.0,82.0,148.0,77.0,4.4531,350000.0,<1H OCEAN +-122.06,37.4,21.0,12855.0,3226.0,7273.0,3052.0,4.3351,267400.0,NEAR BAY +-122.06,37.39,26.0,18.0,4.0,8.0,4.0,3.75,375000.0,NEAR BAY +-122.06,37.39,22.0,1236.0,290.0,413.0,274.0,3.6875,40000.0,NEAR BAY +-122.06,37.38,20.0,3401.0,768.0,1497.0,747.0,4.2188,500001.0,NEAR BAY +-122.06,37.38,21.0,1798.0,399.0,837.0,410.0,5.6999,470000.0,NEAR BAY +-122.06,37.37,18.0,3058.0,661.0,1377.0,675.0,6.1299,500001.0,<1H OCEAN +-122.06,37.38,20.0,2976.0,766.0,1227.0,634.0,4.8625,262500.0,NEAR BAY +-122.07,37.39,19.0,1465.0,342.0,646.0,345.0,4.712,289300.0,NEAR BAY +-122.08,37.4,23.0,806.0,158.0,373.0,156.0,5.9291,284600.0,NEAR BAY +-122.07,37.4,16.0,3352.0,813.0,1440.0,729.0,3.7359,262500.0,NEAR BAY +-122.07,37.41,26.0,1184.0,225.0,815.0,218.0,5.7657,322300.0,NEAR BAY +-122.07,37.4,15.0,2940.0,910.0,943.0,711.0,4.359,192200.0,NEAR BAY +-122.08,37.4,19.0,3565.0,858.0,1639.0,744.0,4.1544,277000.0,NEAR BAY +-122.08,37.4,25.0,1750.0,341.0,999.0,319.0,5.806,308700.0,NEAR BAY +-122.08,37.41,20.0,1896.0,456.0,1069.0,436.0,4.6875,288900.0,NEAR BAY +-122.09,37.4,36.0,1575.0,379.0,1036.0,382.0,5.1408,264700.0,NEAR BAY +-122.1,37.41,33.0,6277.0,1274.0,3025.0,1211.0,5.4721,343300.0,NEAR BAY +-122.09,37.41,8.0,1480.0,414.0,856.0,445.0,2.8203,284100.0,NEAR BAY +-122.09,37.41,14.0,753.0,193.0,421.0,153.0,4.2463,266700.0,NEAR BAY +-122.09,37.41,18.0,1476.0,473.0,838.0,415.0,3.575,274000.0,NEAR BAY +-122.09,37.4,22.0,1489.0,436.0,662.0,470.0,3.5179,197200.0,NEAR BAY +-122.09,37.4,17.0,748.0,184.0,412.0,180.0,3.4375,290600.0,NEAR BAY +-122.09,37.42,23.0,4874.0,1251.0,2699.0,1163.0,3.8003,229800.0,NEAR BAY +-122.11,37.41,27.0,5110.0,1599.0,2764.0,1482.0,3.4198,351900.0,NEAR BAY +-122.09,37.4,26.0,3218.0,1021.0,2087.0,964.0,3.2875,182700.0,NEAR BAY +-122.1,37.4,27.0,3410.0,1156.0,2314.0,1086.0,3.4868,165600.0,NEAR BAY +-122.1,37.4,23.0,1755.0,508.0,1374.0,506.0,4.3077,293500.0,NEAR BAY +-122.1,37.4,19.0,1085.0,288.0,1009.0,305.0,3.9091,276000.0,NEAR BAY +-122.11,37.4,16.0,1994.0,489.0,1173.0,472.0,4.1875,266400.0,NEAR BAY +-122.11,37.4,15.0,255.0,63.0,138.0,74.0,4.6591,175000.0,NEAR BAY +-122.1,37.4,23.0,514.0,210.0,367.0,206.0,3.1736,181300.0,NEAR BAY +-122.08,37.4,52.0,766.0,203.0,448.0,196.0,2.5208,316700.0,NEAR BAY +-122.09,37.39,43.0,2065.0,535.0,1029.0,500.0,3.7318,327700.0,NEAR BAY +-122.09,37.39,30.0,1722.0,490.0,1057.0,517.0,3.725,261300.0,NEAR BAY +-122.09,37.4,24.0,3983.0,1126.0,2645.0,1072.0,3.6742,275000.0,NEAR BAY +-122.08,37.39,44.0,1498.0,430.0,848.0,400.0,2.8438,307100.0,NEAR BAY +-122.08,37.39,46.0,1115.0,248.0,543.0,248.0,3.2083,334300.0,NEAR BAY +-122.08,37.39,4.0,2292.0,,1050.0,584.0,4.8036,340000.0,NEAR BAY +-122.07,37.39,30.0,1695.0,480.0,932.0,447.0,3.5045,352500.0,NEAR BAY +-122.07,37.39,37.0,1169.0,239.0,589.0,249.0,5.0131,330300.0,NEAR BAY +-122.07,37.38,26.0,1272.0,306.0,562.0,284.0,4.5644,280200.0,NEAR BAY +-122.08,37.39,39.0,2210.0,483.0,1023.0,450.0,4.5833,342400.0,NEAR BAY +-122.1,37.39,31.0,1117.0,304.0,591.0,302.0,3.5909,353100.0,NEAR BAY +-122.1,37.39,36.0,1860.0,367.0,794.0,366.0,5.0871,354500.0,NEAR BAY +-122.09,37.39,34.0,1508.0,483.0,774.0,443.0,2.7279,365600.0,NEAR BAY +-122.09,37.39,36.0,1035.0,196.0,475.0,205.0,5.5385,359000.0,NEAR BAY +-122.09,37.38,34.0,1959.0,342.0,849.0,357.0,6.2884,414700.0,NEAR BAY +-122.09,37.38,36.0,2587.0,416.0,1055.0,410.0,6.1995,407200.0,NEAR BAY +-122.08,37.38,33.0,2771.0,659.0,1496.0,581.0,3.4042,353600.0,NEAR BAY +-122.08,37.38,36.0,857.0,156.0,448.0,168.0,5.0086,366700.0,NEAR BAY +-122.08,37.38,36.0,1199.0,198.0,485.0,199.0,5.0796,373400.0,NEAR BAY +-122.08,37.38,36.0,782.0,130.0,348.0,128.0,6.828,383900.0,NEAR BAY +-122.08,37.37,29.0,1229.0,,707.0,194.0,7.1108,465000.0,NEAR BAY +-122.09,37.37,27.0,1269.0,186.0,464.0,182.0,6.8374,500001.0,NEAR BAY +-122.09,37.37,34.0,2165.0,355.0,776.0,339.0,5.2971,442100.0,NEAR BAY +-122.08,37.38,25.0,830.0,228.0,368.0,174.0,3.3917,342900.0,NEAR BAY +-122.07,37.37,22.0,3770.0,727.0,1657.0,762.0,4.8021,457500.0,NEAR BAY +-122.07,37.37,30.0,2937.0,407.0,1097.0,407.0,7.9813,473500.0,NEAR BAY +-122.07,37.36,21.0,3244.0,426.0,1158.0,415.0,7.5,500001.0,<1H OCEAN +-122.06,37.36,34.0,1747.0,250.0,662.0,257.0,6.8268,500001.0,<1H OCEAN +-122.07,37.36,28.0,4612.0,608.0,1686.0,567.0,10.0346,500001.0,<1H OCEAN +-122.08,37.36,31.0,2717.0,376.0,1001.0,381.0,9.281,500001.0,NEAR BAY +-122.09,37.36,37.0,1550.0,238.0,805.0,250.0,5.0222,500001.0,NEAR BAY +-122.09,37.36,37.0,2269.0,325.0,930.0,321.0,7.5274,500001.0,NEAR BAY +-122.08,37.36,28.0,2181.0,284.0,728.0,238.0,8.2266,500001.0,NEAR BAY +-122.06,37.35,30.0,2040.0,294.0,787.0,278.0,8.758,500001.0,<1H OCEAN +-122.07,37.34,33.0,1208.0,198.0,495.0,216.0,5.4659,500001.0,<1H OCEAN +-122.07,37.34,35.0,1172.0,184.0,512.0,175.0,7.3561,500001.0,<1H OCEAN +-122.07,37.35,35.0,1447.0,205.0,619.0,206.0,9.8144,500001.0,<1H OCEAN +-122.07,37.35,35.0,1579.0,210.0,570.0,196.0,8.5888,500001.0,<1H OCEAN +-122.08,37.35,35.0,1347.0,207.0,548.0,189.0,7.7068,500001.0,NEAR BAY +-122.07,37.34,30.0,1851.0,238.0,631.0,236.0,10.1007,500001.0,<1H OCEAN +-122.08,37.34,23.0,2597.0,335.0,922.0,338.0,10.5142,500001.0,<1H OCEAN +-122.08,37.34,28.0,1643.0,216.0,594.0,205.0,12.367,500001.0,<1H OCEAN +-122.08,37.35,33.0,2398.0,317.0,832.0,314.0,10.3591,500001.0,NEAR BAY +-122.1,37.38,37.0,4167.0,612.0,1577.0,597.0,7.5655,500001.0,NEAR BAY +-122.1,37.37,37.0,2511.0,354.0,945.0,348.0,8.3924,500001.0,NEAR BAY +-122.1,37.37,40.0,2224.0,354.0,929.0,345.0,8.1064,500001.0,NEAR BAY +-122.11,37.37,22.0,1477.0,195.0,520.0,187.0,10.3329,500001.0,NEAR BAY +-122.11,37.38,36.0,3598.0,500.0,1296.0,533.0,7.8177,500001.0,NEAR BAY +-122.11,37.38,22.0,3638.0,719.0,1329.0,650.0,5.0804,500001.0,NEAR BAY +-122.11,37.37,49.0,1068.0,190.0,410.0,171.0,7.2045,500001.0,NEAR BAY +-122.12,37.37,18.0,1617.0,231.0,555.0,222.0,8.9021,500001.0,NEAR BAY +-122.11,37.4,31.0,2836.0,490.0,1138.0,481.0,4.9519,500001.0,NEAR BAY +-122.11,37.39,36.0,1660.0,261.0,655.0,249.0,6.3967,500001.0,NEAR BAY +-122.1,37.39,35.0,2471.0,349.0,881.0,342.0,7.6229,500001.0,NEAR BAY +-122.12,37.4,31.0,2356.0,405.0,921.0,358.0,7.0245,500001.0,NEAR BAY +-122.12,37.39,34.0,3561.0,497.0,1336.0,501.0,8.9172,500001.0,NEAR BAY +-122.12,37.38,34.0,1443.0,218.0,504.0,200.0,8.4709,500001.0,NEAR BAY +-122.12,37.4,32.0,3514.0,473.0,1583.0,480.0,10.3894,500001.0,NEAR BAY +-122.13,37.4,29.0,6027.0,1195.0,2687.0,1171.0,5.1335,461200.0,NEAR BAY +-122.13,37.41,36.0,4787.0,900.0,2039.0,890.0,5.4063,440900.0,NEAR BAY +-122.14,37.41,35.0,2419.0,426.0,949.0,433.0,6.4588,437100.0,NEAR BAY +-122.14,37.42,46.0,206.0,44.0,134.0,51.0,4.15,265000.0,NEAR BAY +-122.13,37.42,36.0,3982.0,1045.0,2251.0,995.0,3.5364,314100.0,NEAR BAY +-122.12,37.41,33.0,2892.0,617.0,1250.0,581.0,5.3727,360900.0,NEAR BAY +-122.11,37.43,35.0,3584.0,535.0,1405.0,538.0,7.3023,451300.0,NEAR BAY +-122.11,37.43,35.0,3905.0,565.0,1562.0,553.0,7.313,463700.0,NEAR BAY +-122.11,37.42,32.0,3058.0,595.0,1267.0,540.0,6.4949,417800.0,NEAR BAY +-122.11,37.41,35.0,2712.0,428.0,1084.0,425.0,7.1382,443800.0,NEAR BAY +-122.11,37.41,33.0,1641.0,284.0,659.0,282.0,6.0884,432900.0,NEAR BAY +-122.12,37.42,35.0,2445.0,533.0,1187.0,519.0,5.2803,362100.0,NEAR BAY +-122.12,37.42,36.0,2607.0,551.0,1165.0,523.0,5.1524,373100.0,NEAR BAY +-122.13,37.43,40.0,3454.0,648.0,1498.0,647.0,5.2114,438400.0,NEAR BAY +-122.13,37.43,32.0,4398.0,878.0,1799.0,792.0,4.7375,431900.0,NEAR BAY +-122.12,37.43,36.0,3212.0,553.0,1455.0,574.0,6.46,425500.0,NEAR BAY +-122.12,37.44,33.0,2974.0,623.0,1435.0,588.0,5.485,406300.0,NEAR BAY +-122.13,37.44,42.0,2390.0,462.0,1146.0,468.0,6.3111,397400.0,NEAR BAY +-122.12,37.44,33.0,1509.0,303.0,748.0,268.0,4.875,373400.0,NEAR BAY +-122.11,37.44,35.0,2016.0,349.0,1023.0,376.0,5.6413,376600.0,NEAR BAY +-122.12,37.43,33.0,3262.0,668.0,1411.0,626.0,5.316,398100.0,NEAR BAY +-122.13,37.45,37.0,2295.0,332.0,933.0,332.0,6.7257,500001.0,NEAR BAY +-122.13,37.45,37.0,1287.0,197.0,510.0,206.0,7.9029,500001.0,NEAR BAY +-122.13,37.45,41.0,3233.0,540.0,1251.0,506.0,6.6354,500001.0,NEAR BAY +-122.13,37.44,43.0,3004.0,440.0,1088.0,427.0,9.1508,500001.0,NEAR BAY +-122.13,37.44,38.0,2835.0,447.0,1148.0,446.0,5.9277,446600.0,NEAR BAY +-122.15,37.46,39.0,906.0,109.0,353.0,112.0,10.3942,500001.0,NEAR BAY +-122.16,37.45,52.0,1135.0,219.0,441.0,200.0,7.5418,492000.0,NEAR BAY +-122.15,37.46,52.0,1803.0,257.0,683.0,259.0,10.9508,500001.0,NEAR BAY +-122.14,37.45,52.0,3841.0,537.0,1391.0,540.0,7.8647,500001.0,NEAR BAY +-122.15,37.45,52.0,2117.0,353.0,734.0,328.0,6.767,500001.0,NEAR BAY +-122.14,37.45,48.0,2074.0,297.0,700.0,279.0,8.7051,500001.0,NEAR BAY +-122.15,37.45,52.0,568.0,91.0,219.0,75.0,6.1575,500001.0,NEAR BAY +-122.16,37.45,47.0,4234.0,,1808.0,1093.0,4.2297,425000.0,NEAR BAY +-122.16,37.45,19.0,2207.0,810.0,1304.0,775.0,2.1406,402500.0,NEAR BAY +-122.16,37.45,37.0,2926.0,874.0,1363.0,815.0,4.5987,356000.0,NEAR BAY +-122.16,37.44,34.0,2199.0,529.0,1193.0,532.0,4.2972,405900.0,NEAR BAY +-122.15,37.44,52.0,2063.0,320.0,774.0,309.0,7.2543,500001.0,NEAR BAY +-122.15,37.44,52.0,1400.0,217.0,522.0,227.0,4.9861,500001.0,NEAR BAY +-122.15,37.44,52.0,1945.0,293.0,708.0,275.0,6.1655,500001.0,NEAR BAY +-122.14,37.44,52.0,3117.0,468.0,1114.0,421.0,6.6756,500001.0,NEAR BAY +-122.14,37.43,52.0,1944.0,308.0,696.0,293.0,8.2664,500001.0,NEAR BAY +-122.14,37.43,52.0,1327.0,190.0,467.0,189.0,12.5902,500001.0,NEAR BAY +-122.14,37.43,52.0,1383.0,227.0,551.0,249.0,6.5829,500001.0,NEAR BAY +-122.15,37.43,47.0,2600.0,490.0,1149.0,465.0,5.0203,476300.0,NEAR BAY +-122.15,37.42,44.0,3558.0,839.0,1779.0,832.0,3.9243,404800.0,NEAR BAY +-122.14,37.43,18.0,2060.0,563.0,1144.0,600.0,4.0686,378600.0,NEAR BAY +-122.15,37.43,20.0,11709.0,,7604.0,3589.0,1.9045,375000.0,NEAR BAY +-122.16,37.42,34.0,4448.0,610.0,2571.0,581.0,11.0492,500001.0,NEAR OCEAN +-122.15,37.41,15.0,2577.0,360.0,979.0,364.0,10.476,500001.0,NEAR BAY +-122.17,37.43,24.0,3924.0,1142.0,7174.0,950.0,4.0972,387500.0,NEAR OCEAN +-122.15,37.41,29.0,473.0,103.0,359.0,87.0,7.0309,475000.0,NEAR BAY +-122.18,37.41,21.0,1034.0,117.0,323.0,117.0,10.7237,500001.0,NEAR OCEAN +-122.13,37.39,27.0,3385.0,427.0,1248.0,409.0,12.0372,500001.0,NEAR BAY +-122.12,37.37,37.0,1446.0,181.0,549.0,190.0,10.7355,500001.0,NEAR BAY +-122.11,37.36,34.0,1575.0,183.0,511.0,180.0,13.1867,500001.0,NEAR BAY +-122.13,37.37,30.0,2139.0,260.0,742.0,242.0,11.806,500001.0,NEAR BAY +-122.14,37.38,26.0,2859.0,343.0,951.0,336.0,10.4277,500001.0,NEAR BAY +-122.1,37.36,32.0,1433.0,199.0,498.0,201.0,9.3586,500001.0,NEAR BAY +-122.1,37.36,35.0,2063.0,266.0,676.0,252.0,8.5294,500001.0,NEAR BAY +-122.09,37.35,37.0,1795.0,285.0,791.0,261.0,7.5794,500001.0,NEAR BAY +-122.09,37.35,30.0,1502.0,186.0,501.0,180.0,10.0259,500001.0,NEAR BAY +-122.14,37.36,23.0,11294.0,1377.0,3840.0,1367.0,12.1387,500001.0,NEAR BAY +-122.15,37.35,23.0,3814.0,485.0,1344.0,464.0,12.9792,500001.0,NEAR BAY +-122.11,37.31,7.0,189.0,26.0,84.0,29.0,13.8093,500001.0,<1H OCEAN +-122.12,37.29,11.0,436.0,70.0,212.0,75.0,8.6196,500001.0,<1H OCEAN +-122.12,37.28,21.0,349.0,64.0,149.0,56.0,5.8691,360000.0,<1H OCEAN +-122.08,37.24,21.0,427.0,63.0,182.0,70.0,11.3283,500001.0,<1H OCEAN +-122.01,37.18,37.0,3852.0,652.0,1534.0,567.0,5.8596,318700.0,<1H OCEAN +-121.98,37.16,42.0,2533.0,433.0,957.0,398.0,5.3468,279900.0,<1H OCEAN +-121.9,37.16,43.0,1529.0,311.0,570.0,250.0,5.2366,293300.0,<1H OCEAN +-121.93,37.13,37.0,1150.0,203.0,511.0,179.0,5.7415,398500.0,<1H OCEAN +-121.88,37.24,24.0,4420.0,996.0,2981.0,975.0,3.506,226400.0,<1H OCEAN +-121.9,37.24,24.0,7521.0,1364.0,3970.0,1318.0,4.4004,255800.0,<1H OCEAN +-121.86,37.22,18.0,7245.0,1029.0,2893.0,1049.0,6.9508,361200.0,<1H OCEAN +-121.86,37.23,24.0,4337.0,670.0,1936.0,652.0,5.8904,271400.0,<1H OCEAN +-121.85,37.22,21.0,6203.0,798.0,2494.0,800.0,7.7201,362700.0,<1H OCEAN +-121.89,37.21,14.0,5636.0,697.0,2281.0,680.0,8.4262,459200.0,<1H OCEAN +-121.84,37.18,6.0,9176.0,1201.0,3637.0,1138.0,8.3837,473400.0,<1H OCEAN +-121.87,37.22,17.0,2825.0,365.0,1052.0,345.0,8.0595,485000.0,<1H OCEAN +-121.87,37.22,26.0,1921.0,250.0,725.0,253.0,7.6933,405900.0,<1H OCEAN +-121.86,37.21,23.0,2552.0,305.0,916.0,316.0,9.1974,500001.0,<1H OCEAN +-121.87,37.21,18.0,1080.0,122.0,382.0,121.0,9.08,500001.0,<1H OCEAN +-121.83,37.23,7.0,5389.0,903.0,2232.0,825.0,6.6659,500001.0,<1H OCEAN +-121.8,37.19,45.0,1797.0,303.0,870.0,281.0,4.5417,434500.0,<1H OCEAN +-121.84,37.21,15.0,5468.0,676.0,2221.0,675.0,8.3792,418300.0,<1H OCEAN +-121.83,37.2,6.0,3694.0,574.0,1554.0,527.0,6.8333,348000.0,<1H OCEAN +-121.83,37.21,14.0,2714.0,361.0,1259.0,375.0,7.7738,387500.0,<1H OCEAN +-121.89,37.23,16.0,3574.0,466.0,1503.0,487.0,8.1988,355900.0,<1H OCEAN +-121.89,37.23,20.0,7754.0,976.0,3094.0,941.0,8.19,361600.0,<1H OCEAN +-121.88,37.24,14.0,7174.0,950.0,2782.0,899.0,8.3065,394200.0,<1H OCEAN +-121.87,37.23,19.0,7357.0,963.0,3018.0,981.0,6.9473,361400.0,<1H OCEAN +-121.87,37.27,16.0,3298.0,451.0,1542.0,423.0,6.7064,305600.0,<1H OCEAN +-121.87,37.27,25.0,1730.0,226.0,721.0,243.0,7.5845,279300.0,<1H OCEAN +-121.86,37.27,19.0,1852.0,268.0,866.0,272.0,5.6139,279500.0,<1H OCEAN +-121.87,37.27,18.0,3561.0,560.0,1753.0,553.0,5.0292,269400.0,<1H OCEAN +-121.86,37.27,17.0,4393.0,709.0,2292.0,692.0,5.6876,246500.0,<1H OCEAN +-121.77,37.23,15.0,4713.0,769.0,2519.0,778.0,5.6958,253800.0,<1H OCEAN +-121.77,37.22,16.0,1617.0,306.0,667.0,264.0,4.5221,191100.0,<1H OCEAN +-121.77,37.22,16.0,3992.0,540.0,2097.0,555.0,6.7287,299300.0,<1H OCEAN +-121.76,37.23,16.0,4274.0,715.0,2240.0,704.0,5.4218,233900.0,<1H OCEAN +-121.84,37.25,25.0,5939.0,989.0,3275.0,954.0,5.6488,234600.0,<1H OCEAN +-121.83,37.23,22.0,5507.0,841.0,2785.0,848.0,6.0889,245200.0,<1H OCEAN +-121.84,37.24,18.0,3574.0,504.0,1803.0,536.0,6.7836,274100.0,<1H OCEAN +-121.84,37.24,24.0,7991.0,1286.0,4017.0,1213.0,5.4741,238800.0,<1H OCEAN +-121.85,37.24,17.0,6425.0,1268.0,3934.0,1238.0,5.1228,237600.0,<1H OCEAN +-121.86,37.25,16.0,6958.0,1300.0,2965.0,1217.0,4.2885,262400.0,<1H OCEAN +-121.83,37.28,17.0,3057.0,606.0,2030.0,602.0,5.2166,230900.0,<1H OCEAN +-121.81,37.27,20.0,3244.0,520.0,1769.0,469.0,5.9214,224000.0,<1H OCEAN +-121.8,37.27,17.0,3912.0,737.0,2693.0,746.0,5.0772,221500.0,<1H OCEAN +-121.82,37.27,16.0,2030.0,321.0,1343.0,365.0,6.3566,279100.0,<1H OCEAN +-121.81,37.27,22.0,2996.0,695.0,2169.0,607.0,4.3438,209700.0,<1H OCEAN +-121.8,37.26,26.0,1394.0,238.0,990.0,315.0,4.8862,195000.0,<1H OCEAN +-121.8,37.26,18.0,3631.0,947.0,2357.0,757.0,2.875,184400.0,<1H OCEAN +-121.85,37.27,17.0,1957.0,261.0,863.0,269.0,7.3339,294200.0,<1H OCEAN +-121.84,37.27,9.0,3624.0,812.0,1856.0,721.0,4.2083,198400.0,<1H OCEAN +-121.84,37.27,17.0,2795.0,482.0,1904.0,506.0,5.0186,250800.0,<1H OCEAN +-121.83,37.27,8.0,4454.0,1058.0,2595.0,1027.0,4.5615,282600.0,<1H OCEAN +-121.84,37.27,16.0,2429.0,387.0,1293.0,363.0,5.5,253200.0,<1H OCEAN +-121.83,37.27,14.0,2855.0,380.0,1420.0,383.0,6.6712,311500.0,<1H OCEAN +-121.82,37.26,10.0,3030.0,574.0,1623.0,589.0,5.1356,218700.0,<1H OCEAN +-121.83,37.26,11.0,2394.0,403.0,1393.0,409.0,5.5875,259300.0,<1H OCEAN +-121.81,37.26,14.0,3379.0,683.0,1465.0,620.0,4.0547,236200.0,<1H OCEAN +-121.81,37.26,16.0,1911.0,327.0,1158.0,332.0,5.9359,249500.0,<1H OCEAN +-121.81,37.25,20.0,3398.0,771.0,1231.0,744.0,2.0288,350000.0,<1H OCEAN +-121.81,37.25,12.0,2070.0,587.0,1216.0,532.0,4.1926,244500.0,<1H OCEAN +-121.83,37.26,7.0,3609.0,751.0,1739.0,682.0,4.5033,213100.0,<1H OCEAN +-121.82,37.25,16.0,2650.0,600.0,1969.0,586.0,3.9461,194300.0,<1H OCEAN +-121.83,37.25,17.0,2332.0,637.0,1636.0,623.0,3.1932,123400.0,<1H OCEAN +-121.87,37.26,17.0,1051.0,172.0,446.0,173.0,5.6652,234500.0,<1H OCEAN +-121.86,37.26,16.0,2814.0,485.0,1305.0,465.0,5.5121,224100.0,<1H OCEAN +-121.87,37.26,24.0,2383.0,343.0,1146.0,341.0,5.6223,265700.0,<1H OCEAN +-121.85,37.26,16.0,1982.0,280.0,1030.0,297.0,6.4339,289200.0,<1H OCEAN +-121.85,37.26,16.0,2312.0,303.0,1158.0,295.0,7.4323,311800.0,<1H OCEAN +-121.85,37.26,16.0,1816.0,241.0,793.0,234.0,6.8194,291200.0,<1H OCEAN +-121.84,37.26,5.0,1808.0,340.0,825.0,339.0,5.0509,184800.0,<1H OCEAN +-121.83,37.26,15.0,3243.0,551.0,1752.0,551.0,5.5849,257400.0,<1H OCEAN +-121.84,37.25,17.0,2363.0,473.0,1369.0,442.0,4.8355,141600.0,<1H OCEAN +-121.87,37.25,4.0,2498.0,775.0,1213.0,631.0,3.7844,183900.0,<1H OCEAN +-121.85,37.25,20.0,3773.0,624.0,1965.0,607.0,5.4939,241200.0,<1H OCEAN +-121.83,37.24,23.0,2543.0,388.0,1297.0,385.0,5.9164,237400.0,<1H OCEAN +-121.81,37.24,21.0,3250.0,610.0,1978.0,568.0,4.5,234400.0,<1H OCEAN +-121.82,37.24,20.0,3671.0,567.0,1944.0,589.0,6.0538,241000.0,<1H OCEAN +-121.82,37.25,24.0,3344.0,531.0,1768.0,541.0,5.8305,245600.0,<1H OCEAN +-121.82,37.25,25.0,4021.0,634.0,2178.0,650.0,5.1663,241200.0,<1H OCEAN +-121.81,37.25,5.0,1975.0,520.0,861.0,440.0,4.4565,159000.0,<1H OCEAN +-121.81,37.25,25.0,4096.0,623.0,2128.0,618.0,6.2957,251800.0,<1H OCEAN +-121.82,37.23,23.0,4487.0,584.0,2024.0,580.0,7.5218,291500.0,<1H OCEAN +-121.82,37.23,25.0,2349.0,394.0,1266.0,383.0,4.9688,233100.0,<1H OCEAN +-121.81,37.23,16.0,1674.0,281.0,850.0,254.0,5.3157,253300.0,<1H OCEAN +-121.81,37.23,19.0,2635.0,427.0,1497.0,410.0,6.3178,248000.0,<1H OCEAN +-121.81,37.23,24.0,2413.0,369.0,1237.0,381.0,6.4328,257200.0,<1H OCEAN +-121.81,37.23,17.0,2319.0,324.0,1076.0,338.0,6.4664,278300.0,<1H OCEAN +-121.78,37.24,17.0,2123.0,341.0,1067.0,339.0,6.0062,262700.0,<1H OCEAN +-121.78,37.22,18.0,2127.0,387.0,1547.0,402.0,5.0958,217100.0,<1H OCEAN +-121.78,37.23,18.0,1747.0,317.0,1055.0,285.0,5.898,229100.0,<1H OCEAN +-121.79,37.23,16.0,2240.0,300.0,1221.0,305.0,6.0198,289600.0,<1H OCEAN +-121.79,37.23,17.0,2281.0,359.0,1226.0,394.0,5.4193,259500.0,<1H OCEAN +-121.8,37.23,18.0,3179.0,526.0,1663.0,507.0,5.9225,265800.0,<1H OCEAN +-121.8,37.23,18.0,2581.0,358.0,1284.0,377.0,6.7385,272400.0,<1H OCEAN +-121.8,37.27,10.0,3301.0,593.0,2190.0,575.0,6.223,260700.0,<1H OCEAN +-121.8,37.26,16.0,1868.0,285.0,995.0,284.0,5.9053,260500.0,<1H OCEAN +-121.76,37.26,17.0,250.0,52.0,141.0,51.0,4.6458,500001.0,<1H OCEAN +-121.77,37.24,12.0,10236.0,1878.0,5674.0,1816.0,4.747,261100.0,<1H OCEAN +-121.7,37.2,15.0,531.0,154.0,469.0,155.0,4.65,385700.0,<1H OCEAN +-121.74,37.19,11.0,1290.0,197.0,881.0,191.0,4.2039,500001.0,<1H OCEAN +-121.72,37.16,21.0,1062.0,179.0,631.0,185.0,4.7386,394100.0,<1H OCEAN +-121.75,37.11,18.0,3167.0,,1414.0,482.0,6.8773,467700.0,<1H OCEAN +-121.68,37.0,19.0,3754.0,588.0,1692.0,550.0,6.7644,412600.0,<1H OCEAN +-121.61,37.15,16.0,5498.0,729.0,2051.0,694.0,7.8601,416300.0,<1H OCEAN +-121.6,37.13,14.0,9483.0,1361.0,4108.0,1281.0,7.5,344500.0,<1H OCEAN +-121.64,37.15,13.0,4780.0,798.0,2795.0,764.0,6.1684,288100.0,<1H OCEAN +-121.64,37.14,14.0,5487.0,1024.0,2823.0,979.0,4.175,229800.0,<1H OCEAN +-121.63,37.12,17.0,1830.0,398.0,1110.0,388.0,2.4821,248200.0,<1H OCEAN +-121.69,37.14,12.0,4077.0,590.0,1618.0,540.0,5.2951,386200.0,<1H OCEAN +-121.66,37.13,20.0,4477.0,924.0,2656.0,871.0,3.8788,226900.0,<1H OCEAN +-121.65,37.12,14.0,4721.0,999.0,2648.0,888.0,3.6895,239300.0,<1H OCEAN +-121.66,37.11,19.0,3785.0,611.0,2198.0,610.0,5.1514,436700.0,<1H OCEAN +-121.65,37.11,14.0,6006.0,914.0,2915.0,898.0,5.9356,321700.0,<1H OCEAN +-121.63,37.1,14.0,5034.0,797.0,2124.0,790.0,4.9028,335000.0,<1H OCEAN +-121.67,37.13,19.0,3269.0,483.0,1383.0,452.0,5.6205,300800.0,<1H OCEAN +-121.56,37.08,17.0,6725.0,1051.0,3439.0,1027.0,6.4313,393100.0,<1H OCEAN +-121.61,37.06,21.0,5322.0,908.0,3011.0,895.0,5.5936,386800.0,<1H OCEAN +-121.6,37.09,24.0,1511.0,318.0,1052.0,292.0,3.625,350000.0,<1H OCEAN +-121.62,37.09,37.0,1593.0,303.0,1030.0,287.0,3.9306,260700.0,<1H OCEAN +-121.58,37.01,44.0,3192.0,565.0,1439.0,568.0,4.3693,234000.0,INLAND +-121.57,37.0,18.0,7241.0,1225.0,4168.0,1138.0,4.5714,260300.0,INLAND +-121.57,36.98,14.0,5231.0,817.0,2634.0,799.0,4.9702,279800.0,INLAND +-121.58,37.01,15.0,2873.0,547.0,1582.0,567.0,5.1519,264700.0,INLAND +-121.59,36.97,16.0,865.0,123.0,403.0,130.0,5.7396,308700.0,INLAND +-121.59,37.01,16.0,6637.0,1171.0,3575.0,1162.0,4.3227,251500.0,INLAND +-121.61,37.03,5.0,6529.0,1010.0,3071.0,977.0,5.6754,298500.0,<1H OCEAN +-121.58,37.03,16.0,3120.0,685.0,2383.0,681.0,3.5551,198600.0,INLAND +-121.58,37.02,27.0,2303.0,471.0,1447.0,467.0,3.2019,203600.0,INLAND +-121.59,37.02,14.0,6355.0,1279.0,3704.0,1224.0,4.4233,228600.0,INLAND +-121.57,37.02,17.0,2889.0,624.0,2681.0,608.0,2.9417,178000.0,INLAND +-121.57,37.01,44.0,1448.0,393.0,1066.0,357.0,2.0625,170300.0,INLAND +-121.56,37.0,20.0,3976.0,953.0,3866.0,950.0,2.5387,160100.0,INLAND +-121.54,36.99,27.0,2361.0,449.0,1782.0,397.0,3.2614,305000.0,INLAND +-121.51,37.02,19.0,2372.0,394.0,1142.0,365.0,4.0238,374600.0,INLAND +-121.74,37.35,34.0,440.0,90.0,217.0,93.0,5.2327,500001.0,<1H OCEAN +-121.55,37.37,39.0,759.0,141.0,252.0,106.0,3.6964,262500.0,INLAND +-121.59,37.19,52.0,220.0,32.0,55.0,26.0,15.0001,131300.0,<1H OCEAN +-121.37,37.06,25.0,474.0,92.0,300.0,104.0,3.8062,340900.0,INLAND +-122.03,37.18,10.0,212.0,38.0,78.0,21.0,6.0622,390000.0,<1H OCEAN +-121.96,37.13,26.0,50.0,5.0,17.0,4.0,15.0001,400000.0,<1H OCEAN +-121.98,37.14,37.0,74.0,19.0,63.0,17.0,9.5908,350000.0,<1H OCEAN +-122.0,37.0,16.0,32.0,4.0,36.0,5.0,2.625,137500.0,NEAR OCEAN +-122.01,36.99,29.0,227.0,45.0,112.0,41.0,6.4469,271400.0,NEAR OCEAN +-122.01,36.99,28.0,1321.0,240.0,652.0,239.0,4.9808,263100.0,NEAR OCEAN +-121.99,36.99,29.0,3119.0,507.0,1476.0,487.0,5.8123,281500.0,NEAR OCEAN +-121.99,36.98,40.0,1104.0,224.0,669.0,215.0,4.3409,256300.0,NEAR OCEAN +-122.0,36.98,43.0,1636.0,324.0,792.0,325.0,3.5562,239200.0,NEAR OCEAN +-122.01,36.99,41.0,2548.0,508.0,1290.0,488.0,3.6902,233000.0,NEAR OCEAN +-122.01,36.98,47.0,1250.0,249.0,607.0,234.0,4.0417,265300.0,NEAR OCEAN +-122.02,36.99,30.0,2156.0,487.0,1023.0,458.0,2.7875,245000.0,NEAR OCEAN +-122.02,36.98,21.0,1484.0,394.0,984.0,380.0,2.1734,187500.0,NEAR OCEAN +-122.02,36.98,44.0,1153.0,238.0,657.0,219.0,3.2368,212500.0,NEAR OCEAN +-122.04,36.98,35.0,2155.0,355.0,866.0,335.0,5.6188,404700.0,NEAR OCEAN +-122.04,36.98,33.0,797.0,125.0,385.0,133.0,6.7974,367600.0,NEAR OCEAN +-122.04,36.97,30.0,2695.0,424.0,1098.0,420.0,5.3972,362300.0,NEAR OCEAN +-122.06,37.0,14.0,1547.0,374.0,4731.0,348.0,2.4732,131300.0,NEAR OCEAN +-122.05,36.97,20.0,2428.0,473.0,1145.0,454.0,3.6797,263800.0,NEAR OCEAN +-122.05,36.97,16.0,3363.0,611.0,1603.0,556.0,4.2542,294100.0,NEAR OCEAN +-122.06,36.98,15.0,3385.0,669.0,1571.0,615.0,4.2254,320900.0,NEAR OCEAN +-122.04,36.98,51.0,1076.0,206.0,495.0,201.0,2.9286,258300.0,NEAR OCEAN +-122.04,36.97,45.0,1302.0,245.0,621.0,258.0,5.1806,266400.0,NEAR OCEAN +-122.04,36.97,52.0,1901.0,335.0,955.0,301.0,3.8259,253100.0,NEAR OCEAN +-122.04,36.97,49.0,792.0,136.0,331.0,137.0,5.2128,238600.0,NEAR OCEAN +-122.04,36.96,44.0,1294.0,269.0,645.0,259.0,3.2437,223900.0,NEAR OCEAN +-122.03,36.98,37.0,2817.0,716.0,1341.0,662.0,2.1553,255400.0,NEAR OCEAN +-122.01,36.98,47.0,2403.0,517.0,1144.0,455.0,2.5954,229400.0,NEAR OCEAN +-122.02,36.98,35.0,1053.0,263.0,552.0,237.0,2.7125,217500.0,NEAR OCEAN +-122.02,36.98,21.0,607.0,155.0,226.0,136.0,1.9063,166700.0,NEAR OCEAN +-122.02,36.97,29.0,2568.0,747.0,1743.0,659.0,1.9286,195300.0,NEAR OCEAN +-122.01,36.97,43.0,2162.0,509.0,1208.0,464.0,2.5417,260900.0,NEAR OCEAN +-122.01,36.97,52.0,920.0,202.0,525.0,264.0,2.9444,232800.0,NEAR OCEAN +-122.01,36.97,35.0,1605.0,392.0,743.0,382.0,2.5368,240000.0,NEAR OCEAN +-122.0,36.98,20.0,2502.0,454.0,981.0,399.0,4.3,275000.0,NEAR OCEAN +-122.01,36.98,27.0,2820.0,730.0,1511.0,745.0,2.589,242400.0,NEAR OCEAN +-122.0,36.97,30.0,1029.0,242.0,753.0,249.0,3.1205,240500.0,NEAR OCEAN +-122.0,36.93,51.0,1616.0,374.0,608.0,302.0,3.1932,400000.0,NEAR OCEAN +-122.01,36.95,52.0,1217.0,325.0,508.0,237.0,2.0547,326700.0,NEAR OCEAN +-122.03,36.97,51.0,924.0,232.0,488.0,228.0,2.1964,234400.0,NEAR OCEAN +-122.03,36.97,36.0,337.0,69.0,223.0,68.0,3.2404,225000.0,NEAR OCEAN +-122.03,36.97,52.0,403.0,72.0,200.0,73.0,1.6923,262500.0,NEAR OCEAN +-122.04,36.97,40.0,1193.0,227.0,570.0,204.0,4.4659,237500.0,NEAR OCEAN +-122.03,36.96,18.0,2677.0,785.0,1391.0,656.0,2.5067,232600.0,NEAR OCEAN +-122.02,36.97,44.0,594.0,169.0,325.0,139.0,1.1552,250000.0,NEAR OCEAN +-122.02,36.97,39.0,2124.0,661.0,1365.0,606.0,1.6642,281300.0,NEAR OCEAN +-122.02,36.96,52.0,775.0,305.0,1054.0,305.0,2.0172,112500.0,NEAR OCEAN +-122.03,36.96,40.0,584.0,126.0,316.0,139.0,3.5938,243500.0,NEAR OCEAN +-122.03,36.96,28.0,1607.0,421.0,926.0,385.0,2.425,216100.0,NEAR OCEAN +-122.04,36.96,32.0,1438.0,306.0,802.0,293.0,4.1964,202000.0,NEAR OCEAN +-122.04,36.96,42.0,538.0,107.0,200.0,104.0,2.1667,196400.0,NEAR OCEAN +-122.04,36.96,42.0,1149.0,264.0,703.0,232.0,2.5865,206400.0,NEAR OCEAN +-122.03,36.96,32.0,2182.0,406.0,1122.0,370.0,3.52,284200.0,NEAR OCEAN +-122.04,36.95,36.0,1862.0,364.0,1080.0,364.0,4.4567,263800.0,NEAR OCEAN +-122.01,36.91,19.0,691.0,191.0,324.0,167.0,3.1312,388500.0,NEAR OCEAN +-122.05,36.96,30.0,971.0,185.0,644.0,173.0,4.2045,226500.0,NEAR OCEAN +-122.06,36.96,52.0,65.0,17.0,24.0,10.0,4.5,258300.0,NEAR OCEAN +-122.05,36.87,18.0,2232.0,440.0,1091.0,458.0,3.8269,276000.0,NEAR OCEAN +-122.04,36.95,27.0,1987.0,374.0,961.0,343.0,3.9667,265800.0,NEAR OCEAN +-122.04,37.0,52.0,3365.0,644.0,796.0,333.0,2.9712,116600.0,NEAR OCEAN +-121.75,36.91,32.0,1461.0,422.0,1494.0,416.0,2.8056,173200.0,<1H OCEAN +-121.74,36.92,29.0,1210.0,281.0,863.0,262.0,3.1062,156000.0,<1H OCEAN +-121.74,36.92,17.0,2648.0,589.0,1193.0,540.0,2.4461,151700.0,<1H OCEAN +-121.74,36.92,14.0,3355.0,695.0,1350.0,697.0,2.6506,164600.0,<1H OCEAN +-121.75,36.93,24.0,4026.0,881.0,2264.0,863.0,3.1327,218100.0,<1H OCEAN +-121.75,36.92,48.0,1801.0,353.0,1071.0,361.0,3.6,194500.0,<1H OCEAN +-121.75,36.92,46.0,1362.0,321.0,1068.0,305.0,2.4615,177800.0,<1H OCEAN +-121.76,36.92,36.0,2096.0,409.0,1454.0,394.0,3.2216,238300.0,<1H OCEAN +-121.76,36.92,46.0,947.0,257.0,1120.0,264.0,3.4125,160700.0,<1H OCEAN +-121.75,36.91,52.0,1211.0,447.0,1102.0,392.0,1.6875,161400.0,<1H OCEAN +-121.76,36.91,23.0,1276.0,437.0,1359.0,376.0,1.9609,155000.0,<1H OCEAN +-121.75,36.91,42.0,1368.0,468.0,2312.0,484.0,2.5599,151400.0,<1H OCEAN +-121.77,36.91,8.0,2715.0,750.0,2580.0,718.0,2.8348,162000.0,<1H OCEAN +-121.76,36.9,44.0,919.0,309.0,1321.0,301.0,2.0775,121400.0,<1H OCEAN +-121.77,36.93,20.0,2587.0,547.0,1534.0,540.0,2.4375,190400.0,<1H OCEAN +-121.77,36.93,24.0,1943.0,447.0,1844.0,461.0,3.0192,184300.0,<1H OCEAN +-121.77,36.93,33.0,1406.0,317.0,1075.0,301.0,3.2813,190000.0,<1H OCEAN +-121.76,36.92,20.0,2687.0,637.0,2154.0,610.0,2.6434,169700.0,<1H OCEAN +-121.77,36.92,9.0,4934.0,1112.0,3198.0,977.0,3.5,194800.0,<1H OCEAN +-121.79,36.93,19.0,2512.0,509.0,1856.0,537.0,3.1815,189100.0,<1H OCEAN +-121.78,36.92,19.0,1515.0,253.0,975.0,266.0,4.3906,241200.0,<1H OCEAN +-121.78,36.93,21.0,2794.0,662.0,2236.0,565.0,2.4053,178400.0,<1H OCEAN +-121.77,36.94,18.0,1063.0,341.0,1033.0,313.0,2.0192,171300.0,<1H OCEAN +-121.79,36.95,34.0,2152.0,430.0,1516.0,386.0,3.7863,192200.0,<1H OCEAN +-121.8,36.94,29.0,2377.0,476.0,1669.0,499.0,2.8214,190100.0,<1H OCEAN +-122.25,37.08,20.0,1201.0,282.0,601.0,234.0,2.5556,177500.0,NEAR OCEAN +-122.14,37.08,18.0,2420.0,439.0,1278.0,416.0,5.2101,334000.0,NEAR OCEAN +-122.11,37.05,18.0,3337.0,549.0,1449.0,519.0,5.1412,315800.0,NEAR OCEAN +-122.13,36.97,27.0,991.0,194.0,543.0,155.0,4.7188,350000.0,NEAR OCEAN +-122.07,37.13,26.0,1127.0,199.0,543.0,199.0,4.9792,240000.0,NEAR OCEAN +-122.09,37.09,46.0,695.0,136.0,408.0,148.0,3.9408,222600.0,NEAR OCEAN +-122.09,37.11,32.0,2637.0,489.0,1031.0,410.0,3.6474,231600.0,NEAR OCEAN +-122.12,37.09,36.0,1397.0,289.0,661.0,243.0,4.125,239600.0,NEAR OCEAN +-122.09,37.07,33.0,3581.0,734.0,1780.0,663.0,4.3429,214300.0,NEAR OCEAN +-122.08,37.08,35.0,1541.0,297.0,791.0,277.0,4.425,204800.0,NEAR OCEAN +-122.16,37.17,35.0,6422.0,1380.0,2755.0,1064.0,5.0165,202300.0,NEAR OCEAN +-122.12,37.12,51.0,2419.0,485.0,1078.0,435.0,2.7933,206900.0,NEAR OCEAN +-122.18,37.15,17.0,1457.0,289.0,591.0,235.0,5.5785,284100.0,NEAR OCEAN +-122.12,37.16,32.0,1602.0,317.0,752.0,275.0,5.1664,185100.0,NEAR OCEAN +-122.1,37.19,18.0,808.0,136.0,420.0,145.0,7.1831,273300.0,NEAR OCEAN +-122.08,37.15,23.0,506.0,96.0,264.0,89.0,7.1366,273900.0,NEAR OCEAN +-122.11,37.11,46.0,1993.0,404.0,850.0,327.0,5.208,206800.0,NEAR OCEAN +-122.11,37.14,29.0,3201.0,640.0,1722.0,570.0,4.4597,204100.0,NEAR OCEAN +-122.13,37.15,39.0,2854.0,613.0,1338.0,518.0,3.9423,180300.0,NEAR OCEAN +-122.09,37.21,15.0,1969.0,332.0,822.0,324.0,7.8774,394900.0,<1H OCEAN +-122.0,37.12,17.0,4413.0,672.0,1674.0,608.0,6.9772,383300.0,<1H OCEAN +-122.04,37.12,30.0,1427.0,311.0,686.0,251.0,4.0781,154500.0,NEAR OCEAN +-122.02,37.11,36.0,2066.0,401.0,942.0,344.0,5.2417,196400.0,NEAR OCEAN +-122.05,37.11,39.0,1065.0,248.0,497.0,208.0,4.5972,146300.0,NEAR OCEAN +-122.07,37.08,21.0,5639.0,894.0,2670.0,871.0,6.0809,270000.0,NEAR OCEAN +-122.05,37.05,41.0,2422.0,502.0,915.0,366.0,4.1679,201300.0,NEAR OCEAN +-122.07,37.06,31.0,1634.0,370.0,939.0,332.0,3.8625,232300.0,NEAR OCEAN +-122.08,37.04,34.0,2800.0,577.0,1353.0,512.0,4.1161,220900.0,NEAR OCEAN +-122.08,37.03,36.0,4682.0,899.0,2143.0,832.0,4.5096,203700.0,NEAR OCEAN +-122.04,37.04,17.0,4977.0,994.0,1987.0,947.0,3.8854,312300.0,NEAR OCEAN +-122.03,37.03,21.0,4650.0,733.0,2014.0,704.0,5.6233,322000.0,NEAR OCEAN +-122.02,37.01,20.0,1005.0,138.0,345.0,129.0,10.0968,500001.0,NEAR OCEAN +-122.03,37.0,30.0,2077.0,342.0,816.0,328.0,5.2078,440500.0,NEAR OCEAN +-122.04,37.08,20.0,467.0,95.0,229.0,86.0,4.8,261500.0,NEAR OCEAN +-122.02,37.09,35.0,1818.0,368.0,682.0,254.0,4.8611,240000.0,NEAR OCEAN +-122.03,37.05,12.0,2010.0,422.0,784.0,407.0,3.9728,190900.0,NEAR OCEAN +-122.01,37.06,19.0,4113.0,767.0,2006.0,732.0,5.1121,308100.0,NEAR OCEAN +-122.0,37.08,17.0,4154.0,739.0,2149.0,693.0,5.5919,373400.0,NEAR OCEAN +-121.95,37.11,21.0,2387.0,357.0,913.0,341.0,7.736,397700.0,<1H OCEAN +-121.96,37.1,20.0,922.0,155.0,361.0,135.0,6.3617,331500.0,<1H OCEAN +-121.87,37.1,20.0,1918.0,304.0,798.0,302.0,7.5755,402300.0,<1H OCEAN +-121.9,37.1,23.0,1708.0,287.0,670.0,238.0,6.4517,356600.0,<1H OCEAN +-121.93,37.04,36.0,1522.0,230.0,677.0,206.0,5.8642,363500.0,<1H OCEAN +-121.96,37.03,17.0,1343.0,203.0,511.0,185.0,4.625,386400.0,NEAR OCEAN +-121.93,37.05,14.0,679.0,108.0,306.0,113.0,6.4214,340600.0,<1H OCEAN +-121.96,37.06,16.0,1321.0,224.0,650.0,206.0,6.3258,390000.0,NEAR OCEAN +-121.99,37.05,19.0,2023.0,392.0,955.0,328.0,5.2486,353000.0,NEAR OCEAN +-122.0,37.06,20.0,2403.0,376.0,1149.0,369.0,6.0621,304400.0,NEAR OCEAN +-122.01,37.03,21.0,5904.0,956.0,2616.0,916.0,5.9039,355300.0,NEAR OCEAN +-121.97,37.01,21.0,2073.0,357.0,1044.0,351.0,4.5682,371600.0,NEAR OCEAN +-121.98,36.99,14.0,6787.0,1454.0,3416.0,1357.0,3.5943,262400.0,NEAR OCEAN +-121.97,37.0,25.0,990.0,166.0,522.0,185.0,4.8269,272900.0,NEAR OCEAN +-121.98,36.98,29.0,2681.0,632.0,1652.0,620.0,3.075,215800.0,NEAR OCEAN +-121.99,36.99,16.0,1592.0,369.0,1039.0,351.0,3.6364,207000.0,NEAR OCEAN +-121.99,36.98,25.0,2113.0,422.0,1365.0,439.0,4.6484,234600.0,NEAR OCEAN +-121.99,36.98,19.0,5613.0,1321.0,3018.0,1268.0,3.1914,215600.0,NEAR OCEAN +-121.98,36.97,21.0,3349.0,737.0,1952.0,718.0,3.7273,251900.0,NEAR OCEAN +-121.98,36.96,20.0,3495.0,818.0,2186.0,772.0,3.1167,258300.0,NEAR OCEAN +-121.99,36.97,15.0,3044.0,786.0,1306.0,693.0,2.1771,213200.0,NEAR OCEAN +-122.0,36.97,39.0,2702.0,646.0,1136.0,491.0,2.8941,256700.0,NEAR OCEAN +-121.99,36.96,42.0,1275.0,272.0,451.0,200.0,4.7321,422400.0,NEAR OCEAN +-121.99,36.96,16.0,875.0,201.0,300.0,157.0,2.625,377300.0,NEAR OCEAN +-121.96,36.88,37.0,2846.0,553.0,939.0,433.0,4.7468,294400.0,NEAR OCEAN +-121.97,36.97,24.0,3665.0,870.0,1954.0,833.0,2.8036,228500.0,NEAR OCEAN +-121.97,36.96,27.0,4001.0,999.0,1808.0,945.0,2.561,234600.0,NEAR OCEAN +-121.98,36.96,31.0,3209.0,723.0,1489.0,692.0,3.6619,245100.0,NEAR OCEAN +-121.96,36.98,16.0,4907.0,1117.0,2265.0,1048.0,2.6757,229200.0,NEAR OCEAN +-121.97,36.98,17.0,2813.0,497.0,1337.0,477.0,3.7083,252400.0,NEAR OCEAN +-121.97,36.97,15.0,2849.0,668.0,1546.0,582.0,2.7587,228600.0,NEAR OCEAN +-121.96,36.97,23.0,4324.0,1034.0,1844.0,875.0,3.0777,263800.0,NEAR OCEAN +-121.94,36.98,24.0,3010.0,562.0,1360.0,504.0,4.2006,290700.0,NEAR OCEAN +-121.94,36.98,21.0,3520.0,831.0,1486.0,753.0,3.0905,264300.0,NEAR OCEAN +-121.95,36.98,34.0,3745.0,958.0,1622.0,802.0,3.1546,261200.0,NEAR OCEAN +-121.94,36.97,31.0,1738.0,422.0,746.0,355.0,2.5172,330800.0,NEAR OCEAN +-121.93,36.99,19.0,6356.0,1100.0,2954.0,1070.0,4.7325,283500.0,NEAR OCEAN +-121.94,37.0,32.0,2210.0,426.0,1082.0,396.0,4.1587,315200.0,NEAR OCEAN +-121.96,37.0,20.0,3847.0,727.0,1725.0,737.0,3.3447,305200.0,NEAR OCEAN +-121.96,36.99,23.0,3209.0,748.0,1423.0,666.0,2.7375,238000.0,NEAR OCEAN +-121.94,36.99,11.0,4571.0,924.0,2004.0,847.0,4.2898,221700.0,NEAR OCEAN +-121.86,37.0,16.0,8638.0,1392.0,3706.0,1251.0,5.503,351800.0,<1H OCEAN +-121.91,36.99,23.0,5675.0,964.0,2197.0,880.0,4.8693,322300.0,NEAR OCEAN +-121.91,36.98,16.0,1957.0,408.0,865.0,369.0,2.6875,233300.0,NEAR OCEAN +-121.88,36.98,21.0,4117.0,752.0,2001.0,763.0,4.8953,289500.0,NEAR OCEAN +-121.91,36.97,19.0,4920.0,1092.0,1807.0,922.0,3.5112,231900.0,NEAR OCEAN +-121.92,36.95,29.0,3457.0,699.0,1327.0,563.0,3.6597,252300.0,NEAR OCEAN +-121.88,36.96,18.0,4910.0,817.0,1971.0,773.0,5.8325,308800.0,NEAR OCEAN +-121.9,36.97,21.0,3707.0,751.0,1420.0,608.0,4.4485,295200.0,NEAR OCEAN +-121.88,36.96,18.0,6355.0,1100.0,2304.0,972.0,6.0281,321100.0,NEAR OCEAN +-121.9,36.93,22.0,7281.0,1233.0,1849.0,832.0,5.3276,335500.0,NEAR OCEAN +-121.87,36.95,7.0,3703.0,679.0,1375.0,608.0,4.9219,368400.0,NEAR OCEAN +-121.84,36.94,29.0,4921.0,967.0,2319.0,823.0,4.9517,307900.0,NEAR OCEAN +-121.89,36.89,18.0,2774.0,492.0,1283.0,353.0,5.368,352000.0,NEAR OCEAN +-121.91,36.85,22.0,2442.0,624.0,1301.0,290.0,3.1563,300000.0,NEAR OCEAN +-121.82,36.86,17.0,1573.0,272.0,142.0,55.0,2.1719,420000.0,NEAR OCEAN +-121.79,37.0,28.0,2715.0,451.0,1154.0,386.0,4.8021,290400.0,<1H OCEAN +-121.83,36.98,19.0,4431.0,705.0,1764.0,679.0,4.3321,298600.0,<1H OCEAN +-121.82,36.95,16.0,2599.0,430.0,1417.0,445.0,4.6611,349300.0,<1H OCEAN +-121.83,37.02,22.0,1903.0,350.0,760.0,322.0,2.9559,288400.0,<1H OCEAN +-121.76,37.0,21.0,1416.0,269.0,779.0,200.0,3.1987,279800.0,<1H OCEAN +-121.79,37.03,18.0,943.0,213.0,544.0,179.0,3.934,228600.0,<1H OCEAN +-121.69,36.96,23.0,1229.0,254.0,687.0,232.0,5.1433,305600.0,<1H OCEAN +-121.75,36.96,19.0,3461.0,634.0,2790.0,607.0,4.7569,190800.0,<1H OCEAN +-121.75,36.95,27.0,1580.0,303.0,1066.0,306.0,4.7071,202700.0,<1H OCEAN +-121.77,36.96,20.0,4228.0,816.0,2389.0,844.0,3.525,229100.0,<1H OCEAN +-121.73,36.93,29.0,2931.0,535.0,1954.0,506.0,3.2917,224700.0,<1H OCEAN +-121.67,36.93,22.0,569.0,132.0,542.0,125.0,2.1875,187500.0,<1H OCEAN +-122.39,40.59,26.0,1279.0,438.0,1276.0,420.0,1.2404,81300.0,INLAND +-122.39,40.58,44.0,1625.0,392.0,944.0,347.0,1.5972,68900.0,INLAND +-122.37,40.58,25.0,2054.0,495.0,835.0,475.0,2.1538,76900.0,INLAND +-122.38,40.58,34.0,1262.0,267.0,520.0,259.0,1.6983,72600.0,INLAND +-122.38,40.58,36.0,1808.0,384.0,807.0,383.0,1.8375,74800.0,INLAND +-122.36,40.58,17.0,1220.0,275.0,800.0,261.0,1.9181,118800.0,INLAND +-122.34,40.58,7.0,4843.0,992.0,2223.0,932.0,3.0549,101700.0,INLAND +-122.35,40.57,22.0,589.0,97.0,338.0,107.0,3.2639,87500.0,INLAND +-122.34,40.57,24.0,1610.0,307.0,748.0,307.0,2.6591,82800.0,INLAND +-122.38,40.57,43.0,2251.0,542.0,1479.0,512.0,1.5676,58200.0,INLAND +-122.38,40.56,23.0,2281.0,408.0,1164.0,420.0,3.5347,101200.0,INLAND +-122.38,40.54,36.0,1216.0,240.0,647.0,228.0,2.6944,75300.0,INLAND +-122.37,40.54,28.0,2213.0,390.0,1096.0,378.0,3.6923,86900.0,INLAND +-122.4,40.58,40.0,3895.0,929.0,1782.0,910.0,1.3329,78200.0,INLAND +-122.41,40.58,35.0,2072.0,385.0,1029.0,375.0,2.8512,75600.0,INLAND +-122.4,40.58,43.0,1455.0,300.0,747.0,279.0,2.7857,104200.0,INLAND +-122.39,40.57,38.0,855.0,172.0,468.0,150.0,1.4091,84400.0,INLAND +-122.42,40.59,24.0,5045.0,972.0,2220.0,979.0,2.6792,138900.0,INLAND +-122.45,40.61,17.0,785.0,155.0,417.0,136.0,2.3289,58200.0,INLAND +-122.45,40.56,17.0,1712.0,307.0,963.0,329.0,3.9375,148700.0,INLAND +-122.42,40.57,10.0,7949.0,1309.0,3176.0,1163.0,4.1099,120100.0,INLAND +-122.4,40.57,23.0,1321.0,259.0,749.0,222.0,1.655,90100.0,INLAND +-122.4,40.62,9.0,4794.0,889.0,2162.0,865.0,3.1439,103100.0,INLAND +-122.42,40.6,5.0,2614.0,433.0,1275.0,411.0,3.4464,122900.0,INLAND +-122.39,40.6,22.0,2195.0,489.0,1021.0,460.0,1.4125,66500.0,INLAND +-122.38,40.61,14.0,4773.0,1133.0,2101.0,1072.0,1.7227,105000.0,INLAND +-122.37,40.6,7.0,5178.0,1336.0,2557.0,1283.0,2.4079,111400.0,INLAND +-122.39,40.64,13.0,3604.0,704.0,1598.0,670.0,2.4141,78700.0,INLAND +-122.36,40.62,11.0,3896.0,886.0,1902.0,843.0,2.2905,94200.0,INLAND +-122.34,40.63,10.0,2183.0,369.0,1061.0,325.0,3.6853,151600.0,INLAND +-122.33,40.6,5.0,6383.0,1206.0,2965.0,1141.0,3.8103,111100.0,INLAND +-122.32,40.58,2.0,1937.0,350.0,756.0,274.0,3.0,114200.0,INLAND +-122.3,40.58,19.0,1043.0,204.0,505.0,183.0,1.6033,98800.0,INLAND +-122.36,40.56,20.0,3592.0,868.0,1865.0,781.0,2.0258,64800.0,INLAND +-122.37,40.55,26.0,1435.0,234.0,544.0,232.0,2.6705,136700.0,INLAND +-122.36,40.55,21.0,2500.0,466.0,1428.0,502.0,2.6513,113300.0,INLAND +-122.46,40.52,13.0,2085.0,322.0,1077.0,333.0,5.2149,146500.0,INLAND +-122.41,40.55,19.0,3753.0,761.0,1952.0,738.0,3.0954,86500.0,INLAND +-122.41,40.53,28.0,1127.0,245.0,538.0,208.0,2.037,72000.0,INLAND +-122.39,40.53,28.0,1427.0,304.0,692.0,285.0,2.125,80800.0,INLAND +-122.39,40.52,24.0,2068.0,346.0,951.0,332.0,3.9306,85900.0,INLAND +-122.4,40.51,20.0,1750.0,352.0,834.0,340.0,2.485,100600.0,INLAND +-122.37,40.52,18.0,4547.0,774.0,2269.0,766.0,3.7896,98100.0,INLAND +-122.35,40.56,16.0,2801.0,614.0,1695.0,563.0,1.9,81600.0,INLAND +-122.35,40.56,12.0,3900.0,863.0,2145.0,864.0,1.9881,85200.0,INLAND +-122.35,40.54,17.0,2280.0,453.0,976.0,434.0,2.71,97800.0,INLAND +-122.36,40.57,31.0,431.0,90.0,231.0,78.0,2.184,77300.0,INLAND +-122.35,40.57,18.0,2226.0,490.0,859.0,451.0,1.6821,69400.0,INLAND +-122.34,40.57,26.0,2187.0,472.0,1339.0,463.0,2.0395,67900.0,INLAND +-122.33,40.57,16.0,2777.0,503.0,1432.0,500.0,2.5592,75900.0,INLAND +-122.32,40.57,15.0,2524.0,449.0,1374.0,467.0,3.3816,93800.0,INLAND +-122.31,40.55,11.0,13714.0,2302.0,6511.0,2267.0,3.5522,100100.0,INLAND +-122.34,40.51,16.0,2247.0,502.0,1206.0,463.0,1.9946,119200.0,INLAND +-122.33,40.52,23.0,2801.0,507.0,1318.0,454.0,3.5081,116700.0,INLAND +-122.31,40.49,18.0,4026.0,718.0,1731.0,705.0,3.35,118400.0,INLAND +-122.28,40.5,21.0,2405.0,476.0,1197.0,412.0,2.6488,83100.0,INLAND +-122.4,40.71,22.0,2390.0,484.0,1131.0,452.0,2.1458,84700.0,INLAND +-122.43,40.66,15.0,2532.0,458.0,1183.0,450.0,2.5417,92200.0,INLAND +-122.42,40.63,23.0,2248.0,489.0,1132.0,444.0,1.6429,80400.0,INLAND +-122.38,40.69,21.0,1774.0,370.0,875.0,354.0,1.7422,61500.0,INLAND +-122.36,40.69,32.0,3611.0,772.0,2060.0,759.0,1.7427,60600.0,INLAND +-122.35,40.68,36.0,1822.0,449.0,930.0,399.0,1.3801,56600.0,INLAND +-122.36,40.68,28.0,1745.0,379.0,1011.0,370.0,2.0391,59800.0,INLAND +-122.38,40.67,10.0,2281.0,444.0,1274.0,438.0,2.212,65600.0,INLAND +-122.36,40.66,17.0,2786.0,559.0,1528.0,517.0,2.0119,75800.0,INLAND +-122.31,40.65,11.0,3664.0,647.0,1686.0,613.0,2.9338,141600.0,INLAND +-122.25,40.6,16.0,2753.0,494.0,1414.0,459.0,3.8323,128300.0,INLAND +-122.23,40.63,16.0,1141.0,220.0,563.0,200.0,2.3287,130700.0,INLAND +-122.25,40.66,15.0,2771.0,546.0,1423.0,505.0,3.6413,108500.0,INLAND +-122.32,40.71,18.0,2879.0,578.0,1399.0,586.0,2.4036,105400.0,INLAND +-122.31,40.75,18.0,1411.0,330.0,494.0,227.0,1.4911,75800.0,INLAND +-122.27,40.53,17.0,2255.0,416.0,1171.0,411.0,2.875,129800.0,INLAND +-122.26,40.58,14.0,2539.0,466.0,1271.0,438.0,3.9762,138500.0,INLAND +-122.23,40.57,18.0,1633.0,243.0,750.0,252.0,5.1585,150800.0,INLAND +-122.24,40.51,23.0,2216.0,378.0,1006.0,338.0,4.559,116800.0,INLAND +-122.31,40.45,10.0,1187.0,236.0,728.0,248.0,2.0469,66800.0,INLAND +-122.31,40.45,25.0,2596.0,557.0,1536.0,549.0,2.0221,60400.0,INLAND +-122.29,40.44,30.0,1270.0,365.0,840.0,324.0,1.3904,48100.0,INLAND +-122.29,40.43,21.0,2842.0,640.0,1658.0,608.0,1.9943,59800.0,INLAND +-122.29,40.47,20.0,2858.0,612.0,1422.0,589.0,1.9657,63000.0,INLAND +-122.31,40.47,26.0,2723.0,551.0,1326.0,547.0,2.3594,66000.0,INLAND +-122.3,40.45,32.0,1286.0,271.0,694.0,236.0,1.6579,68500.0,INLAND +-122.27,40.46,14.0,2633.0,530.0,1324.0,513.0,2.2768,78600.0,INLAND +-122.24,40.45,27.0,1804.0,321.0,782.0,300.0,3.5978,80600.0,INLAND +-122.25,40.42,17.0,1429.0,265.0,692.0,245.0,2.8611,98700.0,INLAND +-122.23,40.4,18.0,2102.0,377.0,1059.0,384.0,3.0556,95500.0,INLAND +-122.27,40.39,26.0,1833.0,422.0,939.0,408.0,1.3571,59000.0,INLAND +-122.29,40.39,17.0,1682.0,332.0,887.0,316.0,1.8438,76400.0,INLAND +-122.33,40.48,26.0,695.0,126.0,319.0,124.0,3.2788,101600.0,INLAND +-122.33,40.47,30.0,2502.0,523.0,1296.0,481.0,2.125,66100.0,INLAND +-122.36,40.48,21.0,2333.0,514.0,1308.0,509.0,2.0899,74800.0,INLAND +-122.37,40.45,18.0,1748.0,337.0,921.0,327.0,3.3315,85400.0,INLAND +-122.42,40.44,16.0,994.0,,495.0,181.0,2.1875,76400.0,INLAND +-122.43,40.47,16.0,3552.0,704.0,1801.0,658.0,2.1496,97700.0,INLAND +-122.45,40.46,16.0,2734.0,501.0,1413.0,484.0,2.8085,105700.0,INLAND +-122.37,40.39,12.0,3783.0,702.0,1970.0,639.0,3.3005,98500.0,INLAND +-122.32,40.42,17.0,3019.0,578.0,1538.0,545.0,2.793,76500.0,INLAND +-122.56,40.75,20.0,1182.0,250.0,512.0,210.0,1.7935,74500.0,INLAND +-122.57,40.61,27.0,1540.0,315.0,883.0,321.0,2.8036,93400.0,INLAND +-122.66,40.52,13.0,3013.0,486.0,1361.0,515.0,4.5357,171200.0,INLAND +-122.76,40.4,22.0,2153.0,461.0,903.0,314.0,2.125,123200.0,INLAND +-122.34,41.06,33.0,2149.0,498.0,631.0,273.0,1.8816,65800.0,INLAND +-122.31,40.89,18.0,754.0,161.0,247.0,107.0,2.2583,78800.0,INLAND +-122.45,40.85,20.0,2701.0,573.0,892.0,358.0,2.7736,107800.0,INLAND +-122.07,40.95,14.0,2721.0,627.0,1356.0,468.0,3.0299,73200.0,INLAND +-121.89,40.97,26.0,1183.0,276.0,513.0,206.0,2.225,52000.0,INLAND +-121.86,40.77,17.0,2816.0,639.0,1027.0,406.0,2.503,65600.0,INLAND +-121.83,40.69,14.0,821.0,170.0,477.0,129.0,3.15,87500.0,INLAND +-122.08,40.64,14.0,3099.0,519.0,1447.0,494.0,4.0132,141200.0,INLAND +-122.06,40.55,17.0,3057.0,577.0,1497.0,556.0,3.5189,101000.0,INLAND +-121.92,40.52,13.0,4581.0,881.0,1799.0,734.0,2.2993,99500.0,INLAND +-121.67,40.61,8.0,2411.0,463.0,786.0,297.0,2.1513,80400.0,INLAND +-121.55,40.48,14.0,2413.0,524.0,805.0,329.0,2.7857,77400.0,INLAND +-121.64,40.9,24.0,2237.0,434.0,834.0,318.0,1.7538,90300.0,INLAND +-121.67,40.87,31.0,1581.0,299.0,776.0,287.0,2.9063,77800.0,INLAND +-121.65,40.88,15.0,2909.0,549.0,1537.0,522.0,3.0179,61300.0,INLAND +-121.67,40.89,17.0,2548.0,537.0,1118.0,461.0,2.267,57800.0,INLAND +-121.63,40.92,23.0,1922.0,411.0,872.0,350.0,2.2337,64500.0,INLAND +-121.41,40.82,16.0,2668.0,516.0,915.0,362.0,2.3393,90300.0,INLAND +-121.47,41.12,22.0,2737.0,512.0,1168.0,442.0,2.83,88700.0,INLAND +-121.45,41.04,33.0,2029.0,378.0,936.0,343.0,2.67,77500.0,INLAND +-120.08,39.61,32.0,1404.0,247.0,544.0,201.0,2.7778,72900.0,INLAND +-120.23,39.56,14.0,1781.0,346.0,734.0,287.0,2.46,93000.0,INLAND +-120.48,39.66,32.0,1516.0,289.0,304.0,131.0,1.8839,71000.0,INLAND +-120.24,39.67,40.0,690.0,129.0,305.0,110.0,2.3625,62500.0,INLAND +-120.73,39.63,17.0,1791.0,356.0,432.0,190.0,3.8826,92400.0,INLAND +-120.24,39.67,52.0,296.0,63.0,143.0,56.0,3.625,68600.0,INLAND +-120.92,39.56,48.0,1276.0,292.0,358.0,145.0,1.875,66600.0,INLAND +-120.51,39.52,26.0,2286.0,444.0,498.0,216.0,2.065,96100.0,INLAND +-121.62,41.78,40.0,3272.0,663.0,1467.0,553.0,1.7885,43500.0,INLAND +-121.93,41.86,28.0,4225.0,835.0,1908.0,686.0,1.74,44000.0,INLAND +-122.33,41.86,19.0,3599.0,695.0,1572.0,601.0,2.234,58600.0,INLAND +-122.53,41.81,21.0,2400.0,485.0,1109.0,443.0,1.7639,55400.0,INLAND +-122.26,41.66,17.0,1885.0,350.0,953.0,328.0,2.1607,61400.0,INLAND +-122.64,41.95,18.0,1867.0,424.0,802.0,314.0,1.8242,53500.0,INLAND +-123.26,41.86,25.0,2344.0,532.0,1117.0,424.0,2.7222,64600.0,INLAND +-123.38,41.8,25.0,1941.0,477.0,1000.0,390.0,2.2976,54400.0,INLAND +-123.41,41.6,23.0,1654.0,369.0,669.0,273.0,1.965,65400.0,INLAND +-122.92,41.7,23.0,4017.0,792.0,1634.0,619.0,2.3571,62000.0,INLAND +-122.56,41.69,21.0,2010.0,360.0,947.0,306.0,2.4107,70100.0,INLAND +-122.61,41.74,15.0,4206.0,922.0,1863.0,869.0,2.0591,55700.0,INLAND +-122.64,41.74,33.0,2644.0,459.0,1113.0,483.0,3.3095,81300.0,INLAND +-122.64,41.73,36.0,3319.0,664.0,1492.0,631.0,1.8694,71200.0,INLAND +-122.64,41.73,50.0,1525.0,308.0,661.0,285.0,2.2206,63200.0,INLAND +-122.65,41.72,15.0,3643.0,801.0,1784.0,743.0,1.8533,57500.0,INLAND +-122.73,41.76,19.0,2200.0,414.0,950.0,367.0,2.5357,94200.0,INLAND +-122.64,41.63,19.0,2722.0,479.0,1108.0,430.0,3.1062,100000.0,INLAND +-122.56,41.53,29.0,1729.0,355.0,848.0,328.0,2.2024,60900.0,INLAND +-122.93,41.48,20.0,4288.0,789.0,1800.0,660.0,2.723,79600.0,INLAND +-122.9,41.46,31.0,1277.0,263.0,600.0,241.0,1.7292,61700.0,INLAND +-123.08,41.26,34.0,2773.0,679.0,1066.0,424.0,1.6757,63300.0,INLAND +-122.38,41.54,14.0,4453.0,797.0,1817.0,685.0,2.7468,81100.0,INLAND +-122.49,41.43,19.0,3689.0,644.0,1544.0,566.0,3.125,76100.0,INLAND +-122.38,41.43,45.0,2245.0,448.0,1155.0,421.0,1.6509,46200.0,INLAND +-122.37,41.41,28.0,1729.0,419.0,929.0,370.0,1.27,53100.0,INLAND +-122.39,41.41,23.0,910.0,199.0,370.0,169.0,1.7448,80100.0,INLAND +-122.32,41.31,45.0,1393.0,294.0,521.0,249.0,1.1915,71900.0,INLAND +-122.3,41.32,13.0,2300.0,513.0,1151.0,488.0,2.1571,81500.0,INLAND +-122.3,41.31,29.0,4059.0,787.0,1700.0,702.0,2.4526,97100.0,INLAND +-122.28,41.38,15.0,5266.0,1031.0,2147.0,885.0,2.8036,110100.0,INLAND +-122.45,41.28,15.0,2740.0,503.0,1188.0,445.0,3.4519,128800.0,INLAND +-122.34,41.21,26.0,178.0,40.0,55.0,25.0,2.0375,57500.0,INLAND +-122.27,41.23,40.0,1958.0,386.0,725.0,331.0,2.1898,65500.0,INLAND +-122.27,41.2,52.0,4513.0,985.0,1926.0,815.0,1.5923,56000.0,INLAND +-121.76,41.5,31.0,602.0,153.0,112.0,47.0,1.0667,34200.0,INLAND +-122.09,41.32,52.0,4019.0,824.0,1728.0,706.0,2.2462,62900.0,INLAND +-122.22,38.12,15.0,14125.0,2344.0,6456.0,2147.0,5.1014,179500.0,NEAR BAY +-122.19,38.13,5.0,7854.0,1446.0,4361.0,1395.0,4.9504,214800.0,NEAR BAY +-122.21,38.11,31.0,2766.0,604.0,1441.0,552.0,3.1768,131000.0,NEAR BAY +-122.21,38.11,35.0,2122.0,400.0,1189.0,408.0,3.0962,124600.0,NEAR BAY +-122.21,38.1,36.0,3018.0,557.0,1445.0,556.0,3.8029,129900.0,NEAR BAY +-122.22,38.11,43.0,1939.0,353.0,968.0,392.0,3.1848,112700.0,NEAR BAY +-122.22,38.1,38.0,931.0,181.0,566.0,207.0,3.0221,93300.0,NEAR BAY +-122.22,38.1,40.0,2549.0,478.0,1275.0,494.0,2.9469,111600.0,NEAR BAY +-122.22,38.1,44.0,2256.0,451.0,1057.0,426.0,3.1204,110800.0,NEAR BAY +-122.22,38.1,44.0,3013.0,563.0,1353.0,512.0,3.4559,111900.0,NEAR BAY +-122.22,38.09,47.0,2161.0,440.0,966.0,360.0,2.2734,88700.0,NEAR BAY +-122.21,38.09,37.0,4368.0,779.0,2083.0,741.0,3.8667,127000.0,NEAR BAY +-122.2,38.09,18.0,6860.0,1079.0,3205.0,1058.0,5.2957,171900.0,NEAR BAY +-122.22,38.08,37.0,2811.0,,1574.0,516.0,3.1053,96700.0,NEAR BAY +-122.22,38.08,37.0,4590.0,857.0,2920.0,832.0,3.436,94800.0,NEAR BAY +-122.22,38.07,4.0,15654.0,2394.0,7025.0,2168.0,5.8171,225200.0,NEAR BAY +-122.25,38.09,48.0,833.0,188.0,652.0,165.0,2.2417,87900.0,NEAR BAY +-122.23,38.09,26.0,4397.0,997.0,2539.0,965.0,2.4875,90000.0,NEAR BAY +-122.24,38.07,13.0,5451.0,1194.0,2957.0,1081.0,2.6098,162500.0,NEAR BAY +-122.26,38.1,24.0,1213.0,395.0,699.0,386.0,1.3007,94600.0,NEAR BAY +-122.26,38.1,30.0,3317.0,1058.0,1794.0,990.0,1.1835,133300.0,NEAR BAY +-122.25,38.1,52.0,248.0,86.0,173.0,69.0,2.3,109400.0,NEAR BAY +-122.25,38.1,52.0,1780.0,373.0,824.0,317.0,2.75,109900.0,NEAR BAY +-122.25,38.1,52.0,2315.0,556.0,1113.0,486.0,2.5042,147900.0,NEAR BAY +-122.25,38.1,52.0,1591.0,372.0,817.0,357.0,2.1411,97200.0,NEAR BAY +-122.23,38.1,46.0,4143.0,895.0,2240.0,847.0,2.4201,92800.0,NEAR BAY +-122.24,38.1,49.0,1851.0,356.0,849.0,307.0,2.9432,103500.0,NEAR BAY +-122.24,38.11,52.0,2050.0,492.0,1277.0,463.0,3.0507,107300.0,NEAR BAY +-122.24,38.11,42.0,1743.0,388.0,889.0,341.0,2.3241,99200.0,NEAR BAY +-122.23,38.1,47.0,1303.0,278.0,694.0,269.0,2.5969,92800.0,NEAR BAY +-122.23,38.12,49.0,2715.0,435.0,1006.0,429.0,4.2308,145800.0,NEAR BAY +-122.23,38.11,47.0,3007.0,524.0,1152.0,486.0,4.0,141500.0,NEAR BAY +-122.24,38.11,52.0,2111.0,310.0,772.0,323.0,4.775,148200.0,NEAR BAY +-122.23,38.13,29.0,5154.0,1084.0,2459.0,1019.0,3.2664,142900.0,NEAR BAY +-122.24,38.13,37.0,3223.0,564.0,1325.0,539.0,4.0938,126900.0,NEAR BAY +-122.24,38.12,39.0,2967.0,500.0,1243.0,523.0,4.2902,152400.0,NEAR BAY +-122.24,38.12,42.0,1625.0,255.0,578.0,243.0,4.0114,166900.0,NEAR BAY +-122.25,38.12,47.0,1339.0,298.0,794.0,286.0,2.5865,109800.0,NEAR BAY +-122.25,38.11,49.0,2365.0,504.0,1131.0,458.0,2.6133,103100.0,NEAR BAY +-122.25,38.11,52.0,2846.0,705.0,1519.0,620.0,2.1976,97900.0,NEAR BAY +-122.26,38.11,52.0,793.0,216.0,505.0,194.0,1.9667,93800.0,NEAR BAY +-122.26,38.11,52.0,1560.0,353.0,670.0,287.0,1.7411,98400.0,NEAR BAY +-122.26,38.11,52.0,2573.0,639.0,1238.0,529.0,2.6708,109700.0,NEAR BAY +-122.26,38.12,28.0,3102.0,734.0,1623.0,639.0,3.1025,103700.0,NEAR BAY +-122.27,38.12,45.0,4423.0,1001.0,2109.0,874.0,2.6937,111800.0,NEAR BAY +-122.27,38.12,42.0,5266.0,1167.0,3124.0,1025.0,2.7375,120000.0,NEAR BAY +-122.26,38.15,26.0,3699.0,671.0,2388.0,699.0,4.0515,121900.0,NEAR BAY +-122.26,38.14,34.0,963.0,159.0,392.0,176.0,4.0156,134700.0,NEAR BAY +-122.26,38.15,16.0,3921.0,727.0,2830.0,680.0,4.5053,123700.0,NEAR BAY +-122.32,38.12,12.0,5382.0,928.0,3928.0,921.0,5.3785,150600.0,NEAR BAY +-122.26,38.13,28.0,3072.0,790.0,1375.0,705.0,1.6368,91200.0,NEAR BAY +-122.24,38.14,15.0,8479.0,1759.0,5008.0,1646.0,3.724,131600.0,NEAR BAY +-122.24,38.15,10.0,6817.0,1188.0,4163.0,1135.0,4.4529,144100.0,NEAR BAY +-122.25,38.15,24.0,2917.0,543.0,1878.0,531.0,3.7014,123600.0,NEAR BAY +-122.22,38.15,7.0,5129.0,,2824.0,738.0,5.5138,171100.0,NEAR BAY +-122.23,38.15,33.0,1253.0,238.0,753.0,236.0,1.756,86400.0,NEAR BAY +-122.23,38.14,36.0,1412.0,260.0,792.0,268.0,2.3056,90400.0,NEAR BAY +-122.15,38.04,14.0,2804.0,587.0,1083.0,573.0,2.6466,168500.0,NEAR BAY +-122.16,38.05,52.0,1888.0,457.0,830.0,408.0,3.1373,185100.0,NEAR BAY +-122.16,38.05,34.0,2434.0,428.0,926.0,423.0,4.6776,208300.0,NEAR BAY +-122.19,38.07,20.0,3000.0,525.0,1207.0,491.0,4.6406,217500.0,NEAR BAY +-122.18,38.07,10.0,4976.0,849.0,2089.0,803.0,5.3288,201800.0,NEAR BAY +-122.17,38.07,15.0,2125.0,278.0,857.0,272.0,6.4599,219700.0,NEAR BAY +-122.16,38.07,14.0,6360.0,1236.0,2876.0,1127.0,4.5321,190300.0,NEAR BAY +-122.17,38.06,16.0,3515.0,626.0,1764.0,626.0,4.4397,187100.0,NEAR BAY +-122.15,38.06,10.0,3008.0,532.0,1381.0,522.0,5.3661,195800.0,NEAR BAY +-122.17,38.08,7.0,18392.0,2782.0,8276.0,2742.0,6.4232,229200.0,NEAR BAY +-122.2,38.1,5.0,9567.0,1729.0,4620.0,1580.0,4.4821,210000.0,NEAR BAY +-122.19,38.09,8.0,614.0,118.0,278.0,115.0,6.3735,166300.0,NEAR BAY +-122.14,38.05,27.0,3794.0,772.0,1756.0,724.0,3.2891,150600.0,NEAR BAY +-122.14,38.07,31.0,3401.0,616.0,1750.0,602.0,4.6761,143100.0,NEAR BAY +-122.11,38.09,11.0,673.0,145.0,318.0,137.0,2.3929,122500.0,NEAR BAY +-122.13,38.26,40.0,1538.0,255.0,669.0,263.0,3.3281,170200.0,NEAR BAY +-122.15,38.29,17.0,1625.0,239.0,703.0,224.0,6.5891,328800.0,NEAR BAY +-122.18,38.29,18.0,1953.0,265.0,658.0,270.0,8.0113,393000.0,NEAR BAY +-122.18,38.23,21.0,2475.0,341.0,812.0,308.0,7.2589,320400.0,NEAR BAY +-122.14,38.16,4.0,3273.0,495.0,1497.0,454.0,5.3345,176100.0,NEAR BAY +-122.18,38.17,7.0,4093.0,651.0,2228.0,646.0,5.2523,161300.0,NEAR BAY +-122.07,38.26,15.0,1173.0,146.0,450.0,154.0,6.0487,197700.0,INLAND +-122.1,38.24,13.0,7367.0,1042.0,3193.0,983.0,5.3102,195000.0,NEAR BAY +-122.06,38.27,14.0,6920.0,996.0,3196.0,978.0,5.0672,171300.0,INLAND +-122.07,38.27,8.0,6761.0,1234.0,3237.0,1177.0,4.3586,173400.0,INLAND +-122.08,38.3,2.0,6718.0,858.0,2012.0,654.0,6.8872,305200.0,INLAND +-122.04,38.28,12.0,3861.0,795.0,2129.0,806.0,3.676,135000.0,INLAND +-122.04,38.28,25.0,3304.0,493.0,1464.0,488.0,5.2527,130600.0,INLAND +-122.03,38.28,15.0,5114.0,833.0,2418.0,778.0,4.4882,144000.0,INLAND +-122.03,38.3,5.0,1569.0,199.0,713.0,209.0,6.6779,223900.0,INLAND +-122.0,38.28,3.0,7030.0,1191.0,3238.0,1055.0,4.962,161700.0,INLAND +-121.98,38.29,4.0,8778.0,1291.0,4010.0,1188.0,5.4399,187100.0,INLAND +-121.99,38.15,36.0,263.0,73.0,88.0,42.0,2.5313,162500.0,INLAND +-122.05,38.26,32.0,1070.0,199.0,631.0,195.0,2.6827,98900.0,INLAND +-122.05,38.25,37.0,1336.0,251.0,680.0,231.0,3.815,99000.0,INLAND +-122.06,38.25,36.0,1818.0,323.0,953.0,298.0,3.3153,99000.0,INLAND +-122.06,38.25,34.0,1562.0,289.0,898.0,307.0,3.3598,107200.0,INLAND +-122.06,38.26,36.0,1248.0,221.0,672.0,222.0,3.3839,105900.0,INLAND +-122.07,38.24,15.0,7937.0,1635.0,4390.0,1567.0,3.5464,129800.0,INLAND +-122.04,38.25,38.0,1214.0,244.0,632.0,254.0,2.8438,94200.0,INLAND +-122.05,38.25,39.0,199.0,36.0,101.0,38.0,6.2299,105400.0,INLAND +-122.04,38.26,34.0,3082.0,702.0,1795.0,703.0,2.7885,105900.0,INLAND +-122.04,38.25,37.0,1176.0,291.0,648.0,271.0,2.7167,92200.0,INLAND +-122.04,38.25,32.0,1203.0,287.0,571.0,255.0,3.0938,110400.0,INLAND +-122.04,38.25,52.0,582.0,131.0,241.0,106.0,2.4,125000.0,INLAND +-122.05,38.26,21.0,7195.0,1416.0,3927.0,1377.0,3.0912,126300.0,INLAND +-122.04,38.27,16.0,8517.0,1910.0,4508.0,1837.0,3.1853,129600.0,INLAND +-122.03,38.27,24.0,3580.0,735.0,1959.0,731.0,2.7284,118500.0,INLAND +-122.03,38.26,25.0,4617.0,1046.0,2685.0,1011.0,2.9576,108500.0,INLAND +-122.02,38.26,27.0,3440.0,787.0,2085.0,748.0,2.5896,104700.0,INLAND +-122.03,38.25,35.0,1940.0,384.0,1177.0,403.0,3.1389,101100.0,INLAND +-122.02,38.27,20.0,2237.0,464.0,1169.0,425.0,3.2115,99100.0,INLAND +-122.02,38.26,20.0,3899.0,763.0,2198.0,779.0,3.2061,120400.0,INLAND +-122.01,38.27,17.0,9089.0,1542.0,4758.0,1520.0,4.0619,126600.0,INLAND +-122.02,38.26,8.0,2894.0,602.0,1566.0,572.0,3.6335,131600.0,INLAND +-122.0,38.23,1.0,2062.0,343.0,872.0,268.0,5.2636,191300.0,INLAND +-122.03,38.24,16.0,1104.0,164.0,495.0,156.0,5.4074,157700.0,INLAND +-122.04,38.24,22.0,2761.0,757.0,2612.0,641.0,1.6875,87500.0,INLAND +-122.04,38.24,30.0,2081.0,456.0,1005.0,438.0,1.9954,92900.0,INLAND +-122.03,38.25,13.0,3334.0,541.0,1923.0,538.0,4.0905,134800.0,INLAND +-122.01,38.25,11.0,6550.0,1149.0,3570.0,1123.0,3.8583,137900.0,INLAND +-122.01,38.25,16.0,1081.0,181.0,792.0,184.0,4.6779,131300.0,INLAND +-122.02,38.25,10.0,2237.0,454.0,1255.0,429.0,3.1176,126500.0,INLAND +-122.0,38.25,7.0,11768.0,1893.0,6657.0,1874.0,4.9222,142900.0,INLAND +-121.98,38.25,4.0,2487.0,440.0,1545.0,452.0,4.9103,140400.0,INLAND +-122.01,38.26,12.0,4132.0,710.0,2087.0,633.0,4.5987,139700.0,INLAND +-121.99,38.27,16.0,4138.0,758.0,1762.0,723.0,3.1979,137500.0,INLAND +-121.99,38.26,18.0,921.0,126.0,368.0,120.0,6.0842,261100.0,INLAND +-121.94,38.27,35.0,10869.0,2226.0,9879.0,2152.0,2.5681,81300.0,INLAND +-121.94,38.37,17.0,7973.0,1591.0,2899.0,1502.0,2.8357,120100.0,INLAND +-121.94,38.37,14.0,1156.0,216.0,574.0,227.0,3.2396,143800.0,INLAND +-121.94,38.38,25.0,182.0,48.0,71.0,52.0,1.0208,78600.0,INLAND +-121.94,38.36,2.0,4953.0,735.0,1791.0,562.0,5.0346,205100.0,INLAND +-121.99,38.48,17.0,1824.0,348.0,934.0,305.0,4.6719,250000.0,INLAND +-122.01,38.44,12.0,2344.0,354.0,1035.0,321.0,4.9773,281200.0,INLAND +-122.0,38.41,11.0,2838.0,429.0,1331.0,426.0,4.945,298400.0,INLAND +-122.07,38.41,17.0,3053.0,595.0,1434.0,557.0,3.4741,245800.0,INLAND +-121.95,38.43,19.0,3011.0,551.0,1665.0,535.0,5.1534,232800.0,INLAND +-121.94,38.41,15.0,1263.0,211.0,665.0,208.0,4.5,260900.0,INLAND +-121.92,38.37,26.0,2056.0,413.0,933.0,367.0,2.7051,193800.0,INLAND +-121.96,38.34,15.0,2857.0,373.0,1325.0,359.0,6.0252,151700.0,INLAND +-121.96,38.34,14.0,3035.0,680.0,1597.0,663.0,3.6036,143500.0,INLAND +-121.95,38.35,16.0,2084.0,292.0,1099.0,292.0,5.8269,150200.0,INLAND +-121.94,38.35,8.0,3157.0,559.0,1758.0,569.0,4.412,140100.0,INLAND +-121.92,38.34,2.0,7747.0,1133.0,3481.0,1083.0,6.1112,181000.0,INLAND +-121.95,38.34,9.0,4999.0,874.0,2687.0,817.0,4.2324,142100.0,INLAND +-121.96,38.33,3.0,7985.0,1257.0,3664.0,1215.0,4.976,158300.0,INLAND +-121.96,38.32,12.0,5127.0,998.0,2749.0,976.0,4.0458,130600.0,INLAND +-121.93,38.31,25.0,185.0,32.0,85.0,32.0,4.875,250000.0,INLAND +-121.98,38.32,45.0,19.0,5.0,7460.0,6.0,10.2264,137500.0,INLAND +-121.98,38.36,33.0,1083.0,217.0,562.0,203.0,2.433,101700.0,INLAND +-121.99,38.35,45.0,1778.0,339.0,839.0,319.0,2.4659,102900.0,INLAND +-122.0,38.35,38.0,1918.0,364.0,745.0,348.0,2.5707,126000.0,INLAND +-122.0,38.35,34.0,1084.0,187.0,561.0,198.0,4.2115,118900.0,INLAND +-122.0,38.35,24.0,745.0,116.0,300.0,115.0,3.6176,158500.0,INLAND +-122.01,38.35,18.0,4486.0,723.0,1600.0,697.0,3.8651,189700.0,INLAND +-122.01,38.36,15.0,476.0,67.0,213.0,73.0,7.1053,315200.0,INLAND +-121.98,38.36,30.0,140.0,35.0,103.0,35.0,4.163,112500.0,INLAND +-121.97,38.35,17.0,5678.0,1116.0,3182.0,1135.0,3.7388,122000.0,INLAND +-121.97,38.34,11.0,1500.0,319.0,899.0,304.0,4.5568,127200.0,INLAND +-121.96,38.35,20.0,1415.0,266.0,667.0,250.0,4.0938,117300.0,INLAND +-121.96,38.34,7.0,3292.0,698.0,1911.0,702.0,3.89,140300.0,INLAND +-121.96,38.36,11.0,3208.0,790.0,1772.0,694.0,2.7434,218800.0,INLAND +-121.98,38.35,16.0,1697.0,267.0,832.0,277.0,4.4375,132600.0,INLAND +-121.98,38.34,13.0,3616.0,672.0,2022.0,652.0,4.0536,134800.0,INLAND +-121.97,38.34,16.0,2331.0,450.0,1074.0,400.0,4.0329,126800.0,INLAND +-121.98,38.34,18.0,3876.0,916.0,2386.0,867.0,2.5938,129500.0,INLAND +-121.99,38.34,16.0,1470.0,261.0,748.0,256.0,4.0433,132200.0,INLAND +-121.99,38.34,13.0,3252.0,610.0,1915.0,631.0,4.2137,151700.0,INLAND +-122.0,38.35,34.0,432.0,65.0,208.0,71.0,5.5435,136000.0,INLAND +-122.0,38.38,16.0,2509.0,366.0,1043.0,339.0,6.0704,173400.0,INLAND +-122.01,38.37,16.0,3996.0,550.0,1673.0,539.0,5.778,175700.0,INLAND +-122.01,38.36,28.0,1967.0,315.0,734.0,291.0,4.9583,146200.0,INLAND +-122.02,38.38,16.0,808.0,137.0,371.0,145.0,6.0767,216400.0,INLAND +-122.02,38.37,16.0,2495.0,331.0,1118.0,338.0,6.4894,198000.0,INLAND +-122.01,38.36,15.0,1176.0,166.0,485.0,171.0,5.9441,228200.0,INLAND +-121.98,38.39,3.0,9488.0,1417.0,4095.0,1335.0,5.1781,191900.0,INLAND +-121.98,38.37,21.0,3027.0,675.0,2018.0,642.0,2.8438,111500.0,INLAND +-121.98,38.36,24.0,2434.0,630.0,1538.0,574.0,2.1067,101100.0,INLAND +-122.0,38.37,18.0,1048.0,185.0,469.0,162.0,3.625,125000.0,INLAND +-121.99,38.36,35.0,2728.0,451.0,1290.0,452.0,3.2768,117600.0,INLAND +-122.0,38.36,34.0,2735.0,539.0,1390.0,491.0,2.7262,118800.0,INLAND +-121.99,38.36,33.0,146.0,31.0,75.0,31.0,3.5179,84400.0,INLAND +-122.0,38.36,34.0,1502.0,282.0,860.0,297.0,3.3438,135600.0,INLAND +-121.82,38.36,26.0,1974.0,364.0,1002.0,362.0,3.3036,210000.0,INLAND +-121.81,38.49,18.0,4518.0,827.0,2230.0,715.0,3.9309,178500.0,INLAND +-121.76,38.41,19.0,686.0,107.0,348.0,109.0,3.9306,93800.0,INLAND +-121.81,38.45,24.0,1951.0,341.0,1140.0,338.0,3.7061,128500.0,INLAND +-121.82,38.46,10.0,6331.0,1181.0,3419.0,1110.0,3.7083,154800.0,INLAND +-121.85,38.43,2.0,790.0,135.0,235.0,87.0,5.0862,166500.0,INLAND +-121.83,38.45,15.0,5115.0,776.0,2540.0,794.0,4.8611,146400.0,INLAND +-121.83,38.45,32.0,2139.0,440.0,1154.0,411.0,3.2672,107500.0,INLAND +-121.83,38.45,36.0,839.0,158.0,446.0,167.0,2.3438,122700.0,INLAND +-121.83,38.43,24.0,1307.0,314.0,917.0,291.0,2.2244,98100.0,INLAND +-121.81,38.43,30.0,1674.0,297.0,756.0,292.0,3.9286,133100.0,INLAND +-121.76,38.25,32.0,1495.0,333.0,905.0,281.0,2.625,212500.0,INLAND +-121.69,38.16,33.0,1808.0,363.0,824.0,340.0,3.2937,96400.0,INLAND +-121.69,38.16,46.0,2292.0,472.0,970.0,431.0,2.2888,94900.0,INLAND +-121.73,38.13,40.0,1266.0,257.0,547.0,247.0,3.0288,164400.0,INLAND +-121.74,38.15,22.0,1910.0,326.0,1001.0,345.0,4.8173,115800.0,INLAND +-121.84,38.13,33.0,596.0,105.0,212.0,94.0,4.2813,81300.0,INLAND +-122.42,38.27,25.0,3282.0,566.0,1244.0,483.0,4.5313,308400.0,NEAR BAY +-122.49,38.22,33.0,1486.0,290.0,781.0,274.0,3.5647,251800.0,NEAR BAY +-122.41,38.16,37.0,1549.0,,863.0,275.0,2.7457,254700.0,NEAR BAY +-122.45,38.3,24.0,1946.0,400.0,718.0,380.0,3.5507,257900.0,NEAR BAY +-122.47,38.3,15.0,4885.0,988.0,2175.0,924.0,3.4031,209500.0,<1H OCEAN +-122.42,38.31,18.0,1479.0,246.0,550.0,217.0,4.7356,333300.0,NEAR BAY +-122.44,38.34,25.0,3106.0,715.0,1262.0,665.0,1.9487,233500.0,<1H OCEAN +-122.46,38.29,21.0,2423.0,560.0,1098.0,503.0,2.364,173300.0,NEAR BAY +-122.46,38.29,35.0,1762.0,350.0,686.0,339.0,3.5982,271700.0,NEAR BAY +-122.45,38.28,20.0,3306.0,503.0,1374.0,460.0,5.7984,297600.0,NEAR BAY +-122.47,38.29,14.0,3732.0,846.0,1277.0,775.0,2.5658,208000.0,NEAR BAY +-122.45,38.27,25.0,5024.0,881.0,1994.0,838.0,4.2237,262300.0,NEAR BAY +-122.52,38.27,18.0,2405.0,390.0,872.0,367.0,5.2155,248300.0,<1H OCEAN +-122.53,38.32,22.0,3577.0,,1371.0,501.0,5.795,332300.0,<1H OCEAN +-122.49,38.32,30.0,1631.0,284.0,788.0,284.0,3.3098,195500.0,<1H OCEAN +-122.49,38.31,27.0,3078.0,597.0,1411.0,586.0,3.25,195500.0,<1H OCEAN +-122.49,38.3,14.0,2844.0,602.0,1613.0,544.0,3.3571,193600.0,<1H OCEAN +-122.48,38.3,17.0,2703.0,550.0,1241.0,515.0,2.652,171300.0,<1H OCEAN +-122.49,38.29,26.0,1726.0,289.0,672.0,251.0,3.8,242100.0,<1H OCEAN +-122.49,38.27,8.0,5092.0,988.0,1657.0,936.0,3.5625,213200.0,NEAR BAY +-122.47,38.34,15.0,2411.0,446.0,1144.0,407.0,4.3472,261000.0,<1H OCEAN +-122.49,38.32,17.0,3308.0,720.0,1587.0,632.0,3.2727,176000.0,<1H OCEAN +-122.48,38.32,31.0,1701.0,363.0,680.0,324.0,3.1375,192100.0,<1H OCEAN +-122.48,38.31,29.0,2375.0,560.0,1124.0,502.0,2.3276,166200.0,<1H OCEAN +-122.48,38.31,19.0,2398.0,521.0,1266.0,471.0,2.7727,186800.0,<1H OCEAN +-122.48,38.32,42.0,2106.0,533.0,1141.0,445.0,3.1129,149300.0,<1H OCEAN +-122.55,38.42,24.0,2220.0,411.0,894.0,365.0,4.2891,211700.0,<1H OCEAN +-122.58,38.38,27.0,3800.0,728.0,1587.0,605.0,4.7237,306600.0,<1H OCEAN +-122.5,38.4,36.0,1860.0,364.0,777.0,339.0,4.1307,295700.0,<1H OCEAN +-122.5,38.35,25.0,1566.0,352.0,784.0,362.0,3.075,165100.0,<1H OCEAN +-122.54,38.36,40.0,2725.0,531.0,1167.0,458.0,3.7969,202800.0,<1H OCEAN +-122.61,38.24,25.0,2990.0,450.0,1335.0,434.0,4.7,190100.0,<1H OCEAN +-122.61,38.24,17.0,1728.0,271.0,897.0,284.0,3.4896,185900.0,<1H OCEAN +-122.61,38.23,18.0,2042.0,420.0,914.0,400.0,2.9871,193800.0,<1H OCEAN +-122.62,38.24,19.0,1687.0,253.0,893.0,257.0,6.204,201800.0,<1H OCEAN +-122.61,38.25,18.0,2915.0,418.0,1340.0,421.0,5.2452,204900.0,<1H OCEAN +-122.6,38.24,16.0,1410.0,209.0,741.0,229.0,4.725,204500.0,<1H OCEAN +-122.61,38.24,18.0,2933.0,481.0,1279.0,443.0,5.0849,188500.0,<1H OCEAN +-122.6,38.24,16.0,2621.0,416.0,1247.0,386.0,4.8603,198400.0,<1H OCEAN +-122.63,38.25,20.0,3460.0,602.0,1707.0,568.0,3.7115,181900.0,<1H OCEAN +-122.62,38.24,33.0,1369.0,280.0,758.0,246.0,4.0341,156500.0,<1H OCEAN +-122.62,38.25,33.0,1453.0,250.0,677.0,237.0,4.0962,170200.0,<1H OCEAN +-122.61,38.26,17.0,2864.0,487.0,1482.0,547.0,4.6833,215200.0,<1H OCEAN +-122.62,38.25,20.0,1888.0,411.0,826.0,396.0,2.875,189100.0,<1H OCEAN +-122.62,38.25,24.0,2388.0,358.0,1187.0,362.0,4.6534,196500.0,<1H OCEAN +-122.57,38.27,7.0,6508.0,1028.0,2902.0,1010.0,5.3707,250500.0,<1H OCEAN +-122.51,38.17,8.0,5875.0,1115.0,2808.0,1029.0,3.6392,246300.0,NEAR BAY +-122.65,38.27,9.0,4764.0,816.0,2077.0,755.0,5.1391,234500.0,<1H OCEAN +-122.63,38.26,7.0,7808.0,1390.0,3551.0,1392.0,4.6069,202300.0,<1H OCEAN +-122.66,38.27,16.0,1523.0,308.0,477.0,315.0,2.1696,75000.0,<1H OCEAN +-122.63,38.24,45.0,1615.0,338.0,823.0,327.0,2.5179,145500.0,<1H OCEAN +-122.63,38.23,45.0,2264.0,504.0,1076.0,472.0,3.0139,194100.0,<1H OCEAN +-122.64,38.23,52.0,1075.0,249.0,519.0,210.0,3.0769,230900.0,<1H OCEAN +-122.64,38.23,49.0,2300.0,463.0,1061.0,429.0,4.075,228800.0,<1H OCEAN +-122.63,38.22,34.0,878.0,160.0,372.0,167.0,4.0417,232100.0,<1H OCEAN +-122.63,38.22,17.0,2652.0,342.0,1199.0,350.0,5.565,267100.0,<1H OCEAN +-122.63,38.21,22.0,2933.0,461.0,1283.0,449.0,6.2034,291100.0,<1H OCEAN +-122.63,38.23,37.0,1966.0,348.0,875.0,381.0,4.0703,223800.0,<1H OCEAN +-122.65,38.23,52.0,1735.0,347.0,712.0,343.0,3.1711,200800.0,<1H OCEAN +-122.64,38.23,52.0,2156.0,469.0,1070.0,467.0,3.3011,252300.0,<1H OCEAN +-122.65,38.23,52.0,1923.0,393.0,910.0,345.0,3.45,200600.0,<1H OCEAN +-122.66,38.2,39.0,2889.0,517.0,1351.0,489.0,4.3056,251300.0,<1H OCEAN +-122.64,38.24,52.0,1621.0,393.0,635.0,349.0,2.5202,244000.0,<1H OCEAN +-122.64,38.24,40.0,1974.0,410.0,1039.0,398.0,3.7917,151600.0,<1H OCEAN +-122.65,38.25,23.0,4030.0,,1852.0,778.0,3.402,193300.0,<1H OCEAN +-122.65,38.24,24.0,1948.0,310.0,922.0,313.0,4.95,243600.0,<1H OCEAN +-122.65,38.24,49.0,3273.0,579.0,1431.0,539.0,4.275,227600.0,<1H OCEAN +-122.64,38.25,31.0,2554.0,515.0,1507.0,533.0,3.8,162600.0,<1H OCEAN +-122.69,38.27,32.0,2344.0,434.0,1066.0,384.0,4.0313,285000.0,<1H OCEAN +-122.67,38.25,32.0,1333.0,235.0,660.0,206.0,4.0729,288500.0,<1H OCEAN +-122.68,38.25,29.0,1315.0,240.0,650.0,228.0,3.8269,306000.0,<1H OCEAN +-122.67,38.24,29.0,2644.0,464.0,1372.0,450.0,5.0544,261800.0,<1H OCEAN +-122.77,38.29,32.0,3201.0,542.0,1869.0,519.0,3.2442,268000.0,<1H OCEAN +-122.73,38.26,35.0,3941.0,645.0,1668.0,620.0,4.385,317700.0,<1H OCEAN +-122.7,38.23,47.0,2090.0,387.0,1053.0,377.0,3.5673,310300.0,<1H OCEAN +-122.72,38.35,16.0,3049.0,609.0,1675.0,618.0,2.4117,162500.0,<1H OCEAN +-122.72,38.31,26.0,1644.0,294.0,801.0,291.0,4.3906,248000.0,<1H OCEAN +-122.67,38.31,28.0,1915.0,419.0,930.0,342.0,3.7875,292700.0,<1H OCEAN +-122.69,38.3,30.0,3919.0,743.0,1693.0,693.0,3.3827,292100.0,<1H OCEAN +-122.73,38.34,44.0,743.0,155.0,434.0,162.0,2.5819,209600.0,<1H OCEAN +-122.69,38.32,16.0,3741.0,698.0,1938.0,658.0,4.6324,183600.0,<1H OCEAN +-122.71,38.33,13.0,4011.0,936.0,2064.0,914.0,3.6953,157600.0,<1H OCEAN +-122.7,38.31,14.0,3155.0,580.0,1208.0,501.0,4.1964,258100.0,<1H OCEAN +-122.7,38.33,16.0,1244.0,242.0,696.0,236.0,3.6369,158700.0,<1H OCEAN +-122.69,38.32,15.0,2536.0,414.0,1400.0,426.0,5.6613,172400.0,<1H OCEAN +-122.69,38.34,23.0,2846.0,516.0,1526.0,492.0,3.733,163500.0,<1H OCEAN +-122.7,38.33,26.0,1887.0,381.0,1060.0,364.0,3.0078,160400.0,<1H OCEAN +-122.71,38.34,22.0,1249.0,335.0,699.0,308.0,2.6033,121600.0,<1H OCEAN +-122.7,38.33,26.0,1584.0,295.0,846.0,295.0,3.375,156300.0,<1H OCEAN +-122.69,38.35,12.0,1550.0,187.0,685.0,188.0,7.226,255300.0,<1H OCEAN +-122.69,38.34,15.0,3091.0,697.0,1602.0,682.0,4.0071,135500.0,<1H OCEAN +-122.71,38.35,11.0,2242.0,699.0,1203.0,642.0,2.3464,104200.0,<1H OCEAN +-122.7,38.35,14.0,2313.0,,954.0,397.0,3.7813,146500.0,<1H OCEAN +-122.7,38.35,14.0,1555.0,369.0,493.0,335.0,1.6033,67500.0,<1H OCEAN +-122.7,38.34,19.0,2987.0,676.0,1782.0,688.0,2.8261,154500.0,<1H OCEAN +-122.71,38.34,23.0,2744.0,588.0,1493.0,557.0,3.1781,162000.0,<1H OCEAN +-122.69,38.37,8.0,6322.0,1001.0,2969.0,1043.0,4.8233,214000.0,<1H OCEAN +-122.71,38.37,16.0,2355.0,345.0,1014.0,348.0,5.6018,253000.0,<1H OCEAN +-122.69,38.35,16.0,1689.0,254.0,921.0,270.0,4.4444,191800.0,<1H OCEAN +-122.69,38.36,6.0,5496.0,1374.0,2502.0,1189.0,2.4827,177500.0,<1H OCEAN +-122.7,38.35,16.0,1328.0,187.0,607.0,197.0,5.0366,257800.0,<1H OCEAN +-122.7,38.36,11.0,5817.0,878.0,2538.0,876.0,4.221,227100.0,<1H OCEAN +-122.63,38.34,15.0,2153.0,345.0,979.0,335.0,5.1966,325400.0,<1H OCEAN +-122.68,38.36,8.0,7520.0,1336.0,3833.0,1287.0,4.3278,184100.0,<1H OCEAN +-122.69,38.34,12.0,3876.0,782.0,2146.0,764.0,4.0844,165400.0,<1H OCEAN +-122.67,38.33,4.0,8072.0,1606.0,4323.0,1475.0,3.9518,220300.0,<1H OCEAN +-122.69,38.34,16.0,1683.0,341.0,880.0,327.0,3.2857,160200.0,<1H OCEAN +-122.68,38.4,32.0,2826.0,627.0,1767.0,628.0,3.1047,141400.0,<1H OCEAN +-122.7,38.43,28.0,1585.0,412.0,1362.0,424.0,1.6685,114100.0,<1H OCEAN +-122.71,38.42,23.0,1569.0,414.0,1031.0,368.0,1.6267,129200.0,<1H OCEAN +-122.71,38.4,17.0,1690.0,464.0,833.0,445.0,1.439,140600.0,<1H OCEAN +-122.7,38.39,16.0,4922.0,1211.0,2557.0,1088.0,2.0915,168100.0,<1H OCEAN +-122.62,38.4,10.0,9772.0,1308.0,3741.0,1242.0,6.5261,324700.0,<1H OCEAN +-122.66,38.44,17.0,5815.0,898.0,2614.0,887.0,4.3657,215900.0,<1H OCEAN +-122.67,38.44,29.0,2551.0,448.0,1165.0,456.0,4.3587,196400.0,<1H OCEAN +-122.68,38.43,18.0,2723.0,529.0,1150.0,520.0,3.5885,191900.0,<1H OCEAN +-122.65,38.4,21.0,1059.0,150.0,400.0,154.0,6.8586,343100.0,<1H OCEAN +-122.65,38.37,15.0,1848.0,280.0,786.0,282.0,5.7204,344100.0,<1H OCEAN +-122.67,38.43,17.0,1804.0,304.0,750.0,298.0,4.5588,196400.0,<1H OCEAN +-122.67,38.43,17.0,2007.0,400.0,895.0,403.0,3.2813,202700.0,<1H OCEAN +-122.66,38.42,14.0,5315.0,1037.0,2228.0,950.0,4.023,208400.0,<1H OCEAN +-122.68,38.43,29.0,488.0,63.0,161.0,62.0,6.0774,334400.0,<1H OCEAN +-122.58,38.46,15.0,2936.0,517.0,1182.0,501.0,3.3981,246900.0,<1H OCEAN +-122.61,38.42,13.0,7731.0,1360.0,2543.0,1249.0,4.6957,259800.0,<1H OCEAN +-122.58,38.43,10.0,3597.0,661.0,1132.0,639.0,3.9375,269200.0,<1H OCEAN +-122.59,38.44,14.0,1665.0,390.0,505.0,348.0,3.183,201200.0,<1H OCEAN +-122.59,38.43,20.0,2791.0,546.0,785.0,512.0,3.4561,216700.0,<1H OCEAN +-122.56,38.41,20.0,1151.0,211.0,478.0,183.0,5.93,384600.0,<1H OCEAN +-122.66,38.46,14.0,2364.0,631.0,1300.0,625.0,2.6023,221100.0,<1H OCEAN +-122.66,38.45,26.0,2081.0,339.0,906.0,323.0,4.4375,293500.0,<1H OCEAN +-122.67,38.45,24.0,2622.0,525.0,1027.0,510.0,2.9222,242600.0,<1H OCEAN +-122.67,38.44,32.0,3771.0,741.0,1786.0,721.0,3.2415,172200.0,<1H OCEAN +-122.68,38.44,29.0,2796.0,588.0,1346.0,562.0,2.9107,169700.0,<1H OCEAN +-122.7,38.45,47.0,904.0,154.0,310.0,144.0,3.9766,190600.0,<1H OCEAN +-122.68,38.45,36.0,1686.0,303.0,744.0,304.0,4.0139,163100.0,<1H OCEAN +-122.69,38.44,40.0,1449.0,281.0,636.0,295.0,2.7222,161200.0,<1H OCEAN +-122.69,38.44,35.0,1356.0,241.0,620.0,216.0,3.5521,168300.0,<1H OCEAN +-122.68,38.44,36.0,1311.0,259.0,648.0,268.0,3.4545,161200.0,<1H OCEAN +-122.7,38.44,45.0,883.0,202.0,401.0,194.0,3.2845,178300.0,<1H OCEAN +-122.69,38.45,36.0,1943.0,337.0,711.0,318.0,3.9191,183000.0,<1H OCEAN +-122.69,38.44,31.0,1808.0,315.0,691.0,280.0,3.8583,193200.0,<1H OCEAN +-122.7,38.44,42.0,709.0,182.0,547.0,172.0,2.1912,165000.0,<1H OCEAN +-122.7,38.44,35.0,1304.0,343.0,822.0,304.0,3.2935,157800.0,<1H OCEAN +-122.71,38.43,52.0,1439.0,325.0,738.0,316.0,2.2262,129900.0,<1H OCEAN +-122.71,38.43,38.0,1689.0,526.0,1071.0,529.0,1.5026,124000.0,<1H OCEAN +-122.72,38.44,52.0,1059.0,281.0,627.0,273.0,1.5357,137500.0,<1H OCEAN +-122.71,38.44,52.0,988.0,283.0,475.0,242.0,1.3684,258300.0,<1H OCEAN +-122.71,38.44,27.0,966.0,251.0,462.0,230.0,1.7,350000.0,<1H OCEAN +-122.72,38.47,29.0,1706.0,415.0,990.0,394.0,1.9932,164800.0,<1H OCEAN +-122.72,38.46,35.0,1445.0,309.0,795.0,308.0,2.9073,157000.0,<1H OCEAN +-122.72,38.45,41.0,1743.0,373.0,780.0,357.0,3.1467,175500.0,<1H OCEAN +-122.71,38.46,42.0,1574.0,376.0,844.0,369.0,2.314,169400.0,<1H OCEAN +-122.71,38.46,41.0,1974.0,482.0,965.0,458.0,2.905,159300.0,<1H OCEAN +-122.71,38.46,36.0,2175.0,516.0,1087.0,477.0,3.0444,167200.0,<1H OCEAN +-122.71,38.45,39.0,2739.0,573.0,1223.0,569.0,2.9663,185400.0,<1H OCEAN +-122.71,38.45,48.0,3118.0,561.0,1275.0,530.0,3.455,222100.0,<1H OCEAN +-122.7,38.45,26.0,2011.0,557.0,855.0,530.0,1.125,233300.0,<1H OCEAN +-122.71,38.45,52.0,2259.0,537.0,957.0,520.0,2.1827,188800.0,<1H OCEAN +-122.68,38.48,15.0,1575.0,262.0,716.0,259.0,5.3409,244600.0,<1H OCEAN +-122.67,38.47,16.0,3452.0,791.0,1567.0,731.0,2.4722,194300.0,<1H OCEAN +-122.68,38.46,17.0,3201.0,527.0,1244.0,495.0,4.7143,202900.0,<1H OCEAN +-122.67,38.47,19.0,1848.0,428.0,1130.0,433.0,3.0568,190300.0,<1H OCEAN +-122.68,38.46,15.0,1811.0,406.0,718.0,403.0,2.3929,141300.0,<1H OCEAN +-122.71,38.46,23.0,3220.0,603.0,1299.0,591.0,3.9261,213300.0,<1H OCEAN +-122.7,38.46,29.0,2891.0,459.0,1012.0,441.0,5.0415,240200.0,<1H OCEAN +-122.69,38.46,32.0,2970.0,504.0,1117.0,512.0,5.0,275900.0,<1H OCEAN +-122.7,38.45,39.0,2015.0,335.0,640.0,315.0,4.1734,240500.0,<1H OCEAN +-122.72,38.48,23.0,2296.0,356.0,902.0,334.0,6.0298,289100.0,<1H OCEAN +-122.68,38.46,19.0,4976.0,711.0,1926.0,625.0,7.3003,381300.0,<1H OCEAN +-122.71,38.5,15.0,5645.0,830.0,2324.0,769.0,6.6104,330900.0,<1H OCEAN +-122.66,38.48,16.0,2697.0,490.0,1462.0,515.0,4.2051,190300.0,<1H OCEAN +-122.66,38.48,16.0,2724.0,593.0,1124.0,586.0,2.825,186200.0,<1H OCEAN +-122.66,38.47,23.0,2246.0,437.0,1035.0,386.0,3.7617,172600.0,<1H OCEAN +-122.65,38.46,14.0,2096.0,420.0,926.0,397.0,4.0647,187800.0,<1H OCEAN +-122.66,38.48,21.0,2066.0,393.0,919.0,395.0,3.267,176200.0,<1H OCEAN +-122.66,38.47,20.0,2806.0,477.0,1369.0,460.0,4.75,190500.0,<1H OCEAN +-122.69,38.51,18.0,3364.0,501.0,1442.0,506.0,6.6854,313000.0,<1H OCEAN +-122.64,38.48,19.0,3244.0,449.0,1174.0,454.0,5.8369,255700.0,<1H OCEAN +-122.65,38.47,24.0,2268.0,330.0,847.0,296.0,3.858,214400.0,<1H OCEAN +-122.6,38.48,17.0,1528.0,264.0,606.0,251.0,6.6004,341500.0,<1H OCEAN +-122.62,38.54,24.0,2409.0,464.0,1006.0,403.0,4.5167,265200.0,<1H OCEAN +-122.63,38.5,19.0,2107.0,332.0,874.0,341.0,5.7819,265600.0,<1H OCEAN +-122.65,38.48,17.0,1090.0,164.0,473.0,163.0,5.5061,231800.0,<1H OCEAN +-122.75,38.54,6.0,6719.0,1016.0,2699.0,997.0,5.4886,254200.0,<1H OCEAN +-122.78,38.52,23.0,2511.0,549.0,1052.0,527.0,2.4922,192000.0,<1H OCEAN +-122.79,38.5,18.0,4839.0,918.0,2755.0,841.0,3.75,248300.0,<1H OCEAN +-122.76,38.52,6.0,2073.0,388.0,826.0,375.0,3.055,224100.0,<1H OCEAN +-122.75,38.5,16.0,4196.0,638.0,1713.0,615.0,5.449,252100.0,<1H OCEAN +-122.73,38.46,14.0,4042.0,1298.0,2323.0,1158.0,2.0651,135400.0,<1H OCEAN +-122.73,38.47,16.0,1834.0,391.0,994.0,390.0,3.7266,156500.0,<1H OCEAN +-122.74,38.47,16.0,1426.0,287.0,525.0,260.0,3.0714,161700.0,<1H OCEAN +-122.74,38.46,9.0,2268.0,594.0,1311.0,585.0,2.6607,91500.0,<1H OCEAN +-122.74,38.48,12.0,4174.0,670.0,1882.0,647.0,4.551,178300.0,<1H OCEAN +-122.75,38.48,4.0,6487.0,1112.0,2958.0,1131.0,4.5417,197400.0,<1H OCEAN +-122.79,38.48,7.0,6837.0,,3468.0,1405.0,3.1662,191000.0,<1H OCEAN +-122.81,38.46,28.0,3580.0,611.0,1634.0,567.0,4.745,248600.0,<1H OCEAN +-122.75,38.46,13.0,4323.0,1020.0,2566.0,728.0,3.0147,142800.0,<1H OCEAN +-122.75,38.46,16.0,2653.0,606.0,1693.0,586.0,2.6384,146900.0,<1H OCEAN +-122.76,38.46,14.0,4742.0,756.0,2149.0,732.0,4.5152,199200.0,<1H OCEAN +-122.76,38.46,14.0,4794.0,767.0,2252.0,768.0,4.2061,213100.0,<1H OCEAN +-122.73,38.46,14.0,2324.0,754.0,1026.0,677.0,1.722,150000.0,<1H OCEAN +-122.74,38.45,17.0,3064.0,588.0,1704.0,590.0,3.9329,170900.0,<1H OCEAN +-122.74,38.45,25.0,2696.0,496.0,1296.0,514.0,4.0798,179200.0,<1H OCEAN +-122.74,38.44,23.0,2819.0,612.0,1644.0,546.0,2.6576,147900.0,<1H OCEAN +-122.73,38.44,20.0,2919.0,508.0,1711.0,500.0,3.875,140300.0,<1H OCEAN +-122.72,38.44,48.0,707.0,166.0,458.0,172.0,3.1797,140400.0,<1H OCEAN +-122.73,38.44,35.0,1120.0,297.0,659.0,274.0,2.3824,145000.0,<1H OCEAN +-122.73,38.44,28.0,1073.0,241.0,652.0,238.0,2.4,146200.0,<1H OCEAN +-122.72,38.44,52.0,188.0,62.0,301.0,72.0,0.9437,129200.0,<1H OCEAN +-122.74,38.44,17.0,2287.0,497.0,1240.0,493.0,3.5845,164300.0,<1H OCEAN +-122.74,38.43,11.0,4670.0,1007.0,2430.0,962.0,3.0341,142300.0,<1H OCEAN +-122.73,38.43,15.0,3265.0,690.0,1629.0,629.0,3.7132,167600.0,<1H OCEAN +-122.76,38.45,8.0,5823.0,1104.0,2864.0,1041.0,3.6292,183600.0,<1H OCEAN +-122.82,38.44,23.0,1551.0,236.0,555.0,243.0,4.6792,304700.0,<1H OCEAN +-122.76,38.44,11.0,2895.0,524.0,1633.0,534.0,4.7283,170200.0,<1H OCEAN +-122.76,38.44,14.0,4376.0,797.0,1809.0,746.0,3.8244,180000.0,<1H OCEAN +-122.78,38.44,14.0,4143.0,656.0,1569.0,629.0,3.9766,345300.0,<1H OCEAN +-122.79,38.42,9.0,4967.0,885.0,2581.0,915.0,5.038,185600.0,<1H OCEAN +-122.74,38.42,42.0,2050.0,434.0,1073.0,416.0,2.375,141000.0,<1H OCEAN +-122.73,38.43,29.0,2677.0,691.0,1880.0,664.0,2.1864,143200.0,<1H OCEAN +-122.72,38.43,31.0,2020.0,476.0,1408.0,437.0,2.5735,131100.0,<1H OCEAN +-122.72,38.42,26.0,1168.0,253.0,937.0,248.0,1.9458,146000.0,<1H OCEAN +-122.72,38.42,26.0,3604.0,734.0,2605.0,704.0,3.0969,143800.0,<1H OCEAN +-122.73,38.42,26.0,1446.0,296.0,884.0,295.0,4.3523,150000.0,<1H OCEAN +-122.72,38.42,30.0,2099.0,406.0,1156.0,401.0,2.8036,152300.0,<1H OCEAN +-122.73,38.4,30.0,3689.0,746.0,2250.0,697.0,2.975,157300.0,<1H OCEAN +-122.73,38.37,40.0,1389.0,309.0,841.0,288.0,3.1094,183300.0,<1H OCEAN +-122.75,38.43,36.0,1599.0,345.0,1086.0,314.0,2.6667,149100.0,<1H OCEAN +-122.78,38.41,43.0,1351.0,277.0,1011.0,297.0,2.5917,144000.0,<1H OCEAN +-122.77,38.39,35.0,2611.0,475.0,1293.0,463.0,2.75,197500.0,<1H OCEAN +-122.75,38.41,17.0,3150.0,588.0,1857.0,610.0,3.9688,165000.0,<1H OCEAN +-122.82,38.41,32.0,701.0,182.0,489.0,168.0,2.785,169300.0,<1H OCEAN +-122.84,38.42,29.0,2756.0,551.0,1381.0,531.0,2.9625,237300.0,<1H OCEAN +-122.86,38.42,38.0,1166.0,223.0,584.0,225.0,3.6667,244400.0,<1H OCEAN +-122.84,38.41,19.0,2191.0,391.0,1065.0,404.0,4.125,204600.0,<1H OCEAN +-122.83,38.4,37.0,2217.0,451.0,1019.0,428.0,3.1217,178500.0,<1H OCEAN +-122.84,38.4,15.0,3080.0,617.0,1446.0,599.0,3.6696,194400.0,<1H OCEAN +-122.78,38.37,21.0,795.0,163.0,414.0,162.0,3.7991,175000.0,<1H OCEAN +-122.82,38.4,40.0,2406.0,423.0,1054.0,426.0,3.8846,215900.0,<1H OCEAN +-122.8,38.37,26.0,1634.0,315.0,909.0,317.0,4.1731,257200.0,<1H OCEAN +-122.8,38.39,26.0,2273.0,474.0,1124.0,420.0,2.9453,166700.0,<1H OCEAN +-122.84,38.39,16.0,1688.0,292.0,793.0,280.0,4.4357,216900.0,<1H OCEAN +-122.83,38.39,19.0,1765.0,394.0,868.0,388.0,2.462,260300.0,<1H OCEAN +-122.82,38.39,22.0,1288.0,243.0,593.0,220.0,3.625,233700.0,<1H OCEAN +-122.82,38.39,32.0,1437.0,257.0,752.0,245.0,4.7422,240900.0,<1H OCEAN +-122.82,38.38,27.0,2565.0,479.0,1227.0,467.0,4.5132,259900.0,<1H OCEAN +-122.76,38.35,30.0,2260.0,374.0,958.0,359.0,5.0323,222400.0,<1H OCEAN +-122.87,38.39,34.0,1138.0,205.0,541.0,180.0,4.5147,271400.0,<1H OCEAN +-122.77,38.33,32.0,2054.0,324.0,843.0,306.0,4.5875,290700.0,<1H OCEAN +-122.82,38.33,25.0,3067.0,569.0,1602.0,550.0,3.9917,244100.0,<1H OCEAN +-122.88,38.34,20.0,3404.0,628.0,1641.0,585.0,5.0574,276200.0,<1H OCEAN +-122.81,38.36,18.0,2399.0,389.0,1131.0,391.0,5.2769,293900.0,<1H OCEAN +-122.85,38.37,16.0,1762.0,293.0,810.0,297.0,4.4437,305000.0,<1H OCEAN +-122.89,38.38,16.0,2017.0,369.0,931.0,336.0,5.7664,267500.0,<1H OCEAN +-122.86,38.44,31.0,1534.0,292.0,716.0,288.0,3.4471,209500.0,<1H OCEAN +-122.89,38.42,28.0,2388.0,437.0,1015.0,381.0,5.1512,268300.0,<1H OCEAN +-122.87,38.43,36.0,1987.0,387.0,1065.0,347.0,4.0446,172200.0,<1H OCEAN +-122.91,38.43,19.0,1968.0,350.0,852.0,308.0,4.6705,269800.0,<1H OCEAN +-122.89,38.4,22.0,2900.0,538.0,1445.0,515.0,4.511,296800.0,<1H OCEAN +-123.04,38.49,30.0,3977.0,930.0,1387.0,582.0,2.6161,132500.0,NEAR OCEAN +-123.02,38.46,52.0,2154.0,499.0,524.0,259.0,2.0556,120000.0,NEAR OCEAN +-122.98,38.44,29.0,4450.0,939.0,1328.0,590.0,3.1,162100.0,<1H OCEAN +-123.01,38.48,37.0,1179.0,282.0,354.0,176.0,1.3712,118300.0,NEAR OCEAN +-123.02,38.54,35.0,2157.0,487.0,768.0,322.0,3.2315,136900.0,<1H OCEAN +-123.0,38.51,33.0,1565.0,390.0,759.0,311.0,2.6726,153100.0,NEAR OCEAN +-122.97,38.5,44.0,3234.0,746.0,1112.0,470.0,1.9265,132700.0,<1H OCEAN +-122.97,38.53,48.0,3939.0,860.0,1257.0,571.0,2.1165,98700.0,<1H OCEAN +-122.94,38.53,49.0,1141.0,239.0,505.0,184.0,3.7143,148800.0,<1H OCEAN +-122.94,38.5,46.0,2280.0,492.0,807.0,366.0,2.6316,117000.0,<1H OCEAN +-122.91,38.49,37.0,2469.0,519.0,1137.0,474.0,3.6343,146500.0,<1H OCEAN +-122.87,38.48,27.0,3894.0,776.0,1832.0,715.0,3.5085,187800.0,<1H OCEAN +-122.88,38.46,25.0,1563.0,314.0,737.0,305.0,2.5687,249200.0,<1H OCEAN +-122.85,38.46,22.0,3328.0,550.0,1309.0,512.0,4.7105,266200.0,<1H OCEAN +-122.94,38.49,37.0,3169.0,719.0,777.0,344.0,2.7072,117100.0,<1H OCEAN +-122.91,38.46,18.0,2021.0,,912.0,329.0,4.5,251900.0,<1H OCEAN +-122.72,38.58,4.0,7042.0,1100.0,2936.0,1043.0,5.0555,240800.0,<1H OCEAN +-122.82,38.55,8.0,6190.0,1088.0,2967.0,1000.0,3.8616,195100.0,<1H OCEAN +-122.85,38.52,13.0,4808.0,848.0,2568.0,762.0,3.6583,183200.0,<1H OCEAN +-122.78,38.53,9.0,3659.0,652.0,1889.0,632.0,4.2716,250800.0,<1H OCEAN +-122.81,38.54,12.0,2289.0,611.0,919.0,540.0,1.1553,139300.0,<1H OCEAN +-122.82,38.53,27.0,1823.0,360.0,907.0,317.0,3.276,172900.0,<1H OCEAN +-122.79,38.54,5.0,3986.0,737.0,1887.0,687.0,3.7768,213800.0,<1H OCEAN +-122.87,38.61,23.0,2676.0,521.0,1456.0,500.0,3.7361,173700.0,<1H OCEAN +-122.87,38.62,52.0,1514.0,348.0,767.0,354.0,2.1903,160000.0,<1H OCEAN +-122.86,38.61,52.0,1753.0,380.0,982.0,380.0,3.4013,183300.0,<1H OCEAN +-122.86,38.62,35.0,2597.0,522.0,1231.0,499.0,2.7432,174000.0,<1H OCEAN +-122.87,38.62,18.0,2721.0,557.0,1667.0,539.0,3.1875,176100.0,<1H OCEAN +-122.82,38.64,29.0,2176.0,385.0,1117.0,374.0,3.8681,188600.0,<1H OCEAN +-122.83,38.58,17.0,5199.0,1023.0,2036.0,890.0,3.2452,168800.0,<1H OCEAN +-122.82,38.61,41.0,2720.0,501.0,987.0,364.0,4.0294,201700.0,<1H OCEAN +-122.85,38.62,16.0,4418.0,704.0,1908.0,697.0,4.5913,244600.0,<1H OCEAN +-123.01,38.67,33.0,914.0,147.0,394.0,132.0,4.6875,246200.0,<1H OCEAN +-122.94,38.57,33.0,1530.0,266.0,728.0,250.0,5.1005,266700.0,<1H OCEAN +-122.94,38.64,26.0,4050.0,712.0,2072.0,636.0,4.0781,287800.0,<1H OCEAN +-122.95,38.73,37.0,1548.0,328.0,863.0,287.0,2.9792,151300.0,<1H OCEAN +-122.87,38.68,32.0,4073.0,718.0,2053.0,629.0,3.7352,228000.0,<1H OCEAN +-122.85,38.77,18.0,2856.0,513.0,1027.0,405.0,4.6953,241700.0,<1H OCEAN +-122.7,38.66,43.0,1384.0,284.0,582.0,224.0,3.9063,210000.0,<1H OCEAN +-123.03,38.79,16.0,4047.0,769.0,1998.0,673.0,3.375,171900.0,<1H OCEAN +-123.02,38.81,35.0,956.0,213.0,488.0,215.0,3.025,140600.0,<1H OCEAN +-123.02,38.81,45.0,1717.0,389.0,916.0,367.0,3.2425,138800.0,<1H OCEAN +-123.01,38.8,21.0,360.0,96.0,131.0,74.0,3.5156,133300.0,<1H OCEAN +-123.01,38.79,32.0,2697.0,529.0,1417.0,535.0,3.2546,134100.0,<1H OCEAN +-123.1,38.79,20.0,3109.0,712.0,1643.0,638.0,2.8344,164400.0,<1H OCEAN +-123.49,38.7,9.0,5409.0,1019.0,594.0,327.0,3.3125,295400.0,NEAR OCEAN +-123.24,38.7,38.0,1460.0,311.0,569.0,176.0,2.7171,131300.0,NEAR OCEAN +-123.25,38.54,27.0,3658.0,764.0,1278.0,518.0,3.3536,157500.0,NEAR OCEAN +-123.08,38.38,28.0,3297.0,676.0,923.0,373.0,3.9167,232600.0,NEAR OCEAN +-122.96,38.42,50.0,2530.0,524.0,940.0,361.0,2.9375,122900.0,<1H OCEAN +-123.07,38.46,31.0,855.0,217.0,280.0,139.0,2.3611,112500.0,NEAR OCEAN +-122.93,38.38,18.0,2562.0,500.0,1128.0,414.0,3.9336,262500.0,<1H OCEAN +-123.02,38.36,16.0,1496.0,298.0,778.0,284.0,3.8589,268800.0,NEAR OCEAN +-123.0,38.33,8.0,3223.0,637.0,851.0,418.0,5.6445,364800.0,NEAR OCEAN +-120.84,37.92,27.0,471.0,84.0,195.0,72.0,3.3333,208300.0,INLAND +-120.79,37.82,17.0,4227.0,729.0,1809.0,679.0,3.2667,269500.0,INLAND +-120.9,37.81,27.0,4213.0,750.0,2142.0,746.0,3.7031,173300.0,INLAND +-120.9,37.76,20.0,570.0,112.0,304.0,108.0,2.2024,156300.0,INLAND +-120.86,37.73,27.0,508.0,93.0,263.0,81.0,3.1136,183300.0,INLAND +-120.79,37.76,14.0,3531.0,508.0,1505.0,497.0,5.5228,275300.0,INLAND +-120.76,37.73,16.0,1343.0,241.0,732.0,195.0,3.5833,187500.0,INLAND +-120.69,37.77,46.0,431.0,86.0,239.0,80.0,3.3182,282100.0,INLAND +-120.87,37.77,9.0,4838.0,920.0,2460.0,923.0,3.5959,142700.0,INLAND +-120.85,37.77,52.0,436.0,81.0,197.0,68.0,1.8625,85400.0,INLAND +-120.86,37.77,45.0,621.0,129.0,257.0,124.0,1.7188,109400.0,INLAND +-120.86,37.77,38.0,1545.0,279.0,662.0,266.0,3.825,96400.0,INLAND +-120.86,37.77,28.0,1208.0,232.0,535.0,232.0,2.3523,94700.0,INLAND +-120.87,37.76,16.0,1174.0,249.0,601.0,242.0,1.7143,113300.0,INLAND +-120.85,37.77,20.0,651.0,157.0,421.0,151.0,2.0833,77300.0,INLAND +-120.85,37.77,37.0,1738.0,403.0,936.0,366.0,2.4717,77100.0,INLAND +-120.86,37.76,32.0,964.0,198.0,623.0,201.0,3.0917,88900.0,INLAND +-120.87,37.76,16.0,2022.0,413.0,1126.0,408.0,2.5655,116400.0,INLAND +-120.85,37.75,26.0,28.0,4.0,9.0,5.0,1.625,85000.0,INLAND +-120.85,37.78,15.0,3553.0,659.0,1684.0,611.0,3.3169,131200.0,INLAND +-120.85,37.78,25.0,421.0,,303.0,106.0,2.2679,71300.0,INLAND +-120.85,37.77,35.0,404.0,96.0,261.0,100.0,2.4583,75000.0,INLAND +-120.85,37.78,30.0,1120.0,248.0,609.0,237.0,2.2386,87200.0,INLAND +-120.83,37.77,20.0,1717.0,403.0,1062.0,401.0,1.6759,116700.0,INLAND +-120.85,37.77,10.0,423.0,110.0,295.0,94.0,1.3583,85200.0,INLAND +-120.83,37.76,21.0,435.0,96.0,219.0,83.0,2.9125,112500.0,INLAND +-120.83,37.79,16.0,893.0,164.0,548.0,155.0,3.6875,121900.0,INLAND +-120.93,37.74,37.0,1956.0,402.0,1265.0,397.0,2.3023,91900.0,INLAND +-120.94,37.74,35.0,1166.0,268.0,515.0,266.0,2.3469,90200.0,INLAND +-120.95,37.74,18.0,3453.0,666.0,1958.0,601.0,3.0043,156500.0,INLAND +-120.95,37.73,12.0,3609.0,712.0,2650.0,742.0,2.8565,92700.0,INLAND +-120.93,37.73,14.0,2799.0,,2294.0,596.0,2.6343,81500.0,INLAND +-120.93,37.72,18.0,391.0,71.0,247.0,71.0,4.3864,179500.0,INLAND +-120.98,37.71,22.0,434.0,89.0,195.0,86.0,2.4211,268800.0,INLAND +-120.99,37.7,14.0,9849.0,1887.0,4356.0,1780.0,3.5877,160900.0,INLAND +-120.97,37.69,14.0,5514.0,909.0,2819.0,970.0,3.8598,174400.0,INLAND +-120.91,37.74,19.0,1690.0,327.0,855.0,296.0,3.25,176700.0,INLAND +-120.91,37.73,31.0,840.0,154.0,429.0,150.0,2.4063,170200.0,INLAND +-120.92,37.7,24.0,527.0,112.0,270.0,112.0,1.6172,156300.0,INLAND +-120.94,37.7,25.0,1005.0,159.0,390.0,139.0,4.4,174100.0,INLAND +-120.97,37.73,19.0,3725.0,543.0,1412.0,463.0,5.7476,248600.0,INLAND +-121.01,37.74,14.0,2368.0,297.0,796.0,301.0,8.7783,435000.0,INLAND +-121.01,37.72,23.0,1373.0,264.0,677.0,245.0,2.5486,161100.0,INLAND +-121.06,37.73,5.0,2256.0,420.0,1246.0,397.0,4.9236,155900.0,INLAND +-121.07,37.71,39.0,223.0,37.0,92.0,37.0,3.375,212500.0,INLAND +-121.08,37.69,19.0,6473.0,1212.0,3559.0,1123.0,3.2246,129300.0,INLAND +-121.14,37.7,29.0,1343.0,223.0,751.0,225.0,3.2391,187500.0,INLAND +-121.09,37.67,30.0,1653.0,285.0,800.0,291.0,3.3482,220000.0,INLAND +-121.09,37.61,42.0,1787.0,296.0,921.0,287.0,3.8864,171400.0,INLAND +-121.18,37.64,43.0,1244.0,209.0,611.0,197.0,2.875,187500.0,INLAND +-121.06,37.7,7.0,9374.0,1847.0,4827.0,1722.0,3.462,151900.0,INLAND +-121.04,37.7,52.0,349.0,59.0,121.0,40.0,3.3036,197500.0,INLAND +-121.04,37.69,5.0,9601.0,1639.0,4449.0,1575.0,4.5332,195500.0,INLAND +-121.02,37.71,25.0,207.0,41.0,87.0,43.0,3.6023,131300.0,INLAND +-121.03,37.69,6.0,2607.0,557.0,1266.0,475.0,3.4632,137700.0,INLAND +-121.02,37.7,16.0,3476.0,650.0,2126.0,665.0,3.3438,125400.0,INLAND +-121.0,37.71,52.0,102.0,23.0,35.0,33.0,2.25,175000.0,INLAND +-121.01,37.7,12.0,9148.0,1906.0,4656.0,1853.0,3.2447,142200.0,INLAND +-121.06,37.67,31.0,906.0,146.0,383.0,129.0,3.4167,196900.0,INLAND +-121.06,37.66,6.0,3655.0,598.0,1993.0,596.0,4.6053,150100.0,INLAND +-121.05,37.65,5.0,3096.0,545.0,1760.0,519.0,4.5701,146400.0,INLAND +-121.04,37.66,11.0,1658.0,301.0,913.0,298.0,4.1705,162800.0,INLAND +-121.04,37.65,8.0,1959.0,379.0,995.0,365.0,3.3567,129100.0,INLAND +-121.03,37.65,37.0,375.0,58.0,120.0,37.0,3.9844,150000.0,INLAND +-121.04,37.67,16.0,19.0,19.0,166.0,9.0,0.536,162500.0,INLAND +-121.0,37.69,18.0,3469.0,661.0,1452.0,628.0,3.4079,147500.0,INLAND +-121.01,37.69,20.0,3275.0,760.0,1538.0,705.0,2.48,135600.0,INLAND +-121.01,37.68,33.0,828.0,123.0,373.0,133.0,5.5,146200.0,INLAND +-121.0,37.68,15.0,1232.0,180.0,408.0,196.0,6.9682,182400.0,INLAND +-121.0,37.68,29.0,2911.0,445.0,1170.0,460.0,4.9904,158100.0,INLAND +-121.01,37.68,33.0,3230.0,587.0,1579.0,560.0,3.5775,109700.0,INLAND +-121.0,37.67,26.0,90.0,18.0,47.0,18.0,1.125,87500.0,INLAND +-121.04,37.68,18.0,5129.0,1171.0,3622.0,1128.0,2.0272,92700.0,INLAND +-121.04,37.68,28.0,1909.0,398.0,1140.0,380.0,2.3783,81400.0,INLAND +-121.02,37.69,19.0,3814.0,790.0,2219.0,804.0,3.5208,145000.0,INLAND +-121.03,37.69,5.0,4034.0,771.0,1967.0,742.0,3.8065,146000.0,INLAND +-121.04,37.69,9.0,6333.0,1355.0,3265.0,1265.0,3.0217,160900.0,INLAND +-121.02,37.68,25.0,3262.0,588.0,1834.0,578.0,3.996,114500.0,INLAND +-121.03,37.68,20.0,3204.0,625.0,2016.0,605.0,2.6567,110400.0,INLAND +-121.03,37.68,27.0,1956.0,327.0,1004.0,307.0,3.7857,110500.0,INLAND +-121.02,37.68,28.0,2875.0,560.0,1608.0,558.0,3.5489,106400.0,INLAND +-120.94,37.68,4.0,13315.0,2424.0,6420.0,2289.0,4.2471,162100.0,INLAND +-120.95,37.67,15.0,3062.0,584.0,1624.0,538.0,4.3864,137600.0,INLAND +-120.96,37.66,16.0,4961.0,902.0,2654.0,804.0,4.2823,138300.0,INLAND +-120.95,37.66,16.0,4478.0,647.0,1990.0,672.0,5.1473,188400.0,INLAND +-120.95,37.65,37.0,136.0,20.0,72.0,22.0,2.2279,225000.0,INLAND +-120.93,37.67,6.0,3491.0,657.0,2075.0,644.0,3.3844,138500.0,INLAND +-120.93,37.66,10.0,7566.0,1348.0,3227.0,1199.0,4.744,148100.0,INLAND +-120.94,37.66,17.0,1147.0,140.0,327.0,136.0,6.8654,290500.0,INLAND +-120.98,37.69,18.0,3176.0,468.0,1296.0,471.0,5.5684,185100.0,INLAND +-120.99,37.69,25.0,2773.0,384.0,1060.0,381.0,6.4788,199400.0,INLAND +-120.99,37.68,30.0,1975.0,375.0,732.0,326.0,2.6932,94900.0,INLAND +-120.98,37.68,24.0,705.0,114.0,347.0,141.0,3.1912,149600.0,INLAND +-120.97,37.69,16.0,2793.0,476.0,1279.0,477.0,3.4667,160900.0,INLAND +-120.97,37.69,15.0,4065.0,841.0,1986.0,680.0,3.072,114300.0,INLAND +-120.97,37.68,16.0,2349.0,446.0,1302.0,392.0,3.1625,130300.0,INLAND +-120.97,37.68,9.0,1114.0,172.0,529.0,174.0,4.7159,163700.0,INLAND +-120.98,37.68,27.0,4006.0,762.0,1806.0,718.0,3.1848,112800.0,INLAND +-120.99,37.68,28.0,3269.0,647.0,1595.0,617.0,2.2336,112700.0,INLAND +-120.99,37.67,16.0,568.0,124.0,307.0,116.0,2.1518,107400.0,INLAND +-120.98,37.67,13.0,1221.0,260.0,682.0,275.0,3.65,155500.0,INLAND +-120.97,37.68,16.0,2493.0,535.0,1370.0,504.0,3.3368,121200.0,INLAND +-120.98,37.68,18.0,4197.0,1006.0,2203.0,874.0,2.166,118600.0,INLAND +-120.97,37.67,16.0,1499.0,250.0,1292.0,271.0,4.3851,117300.0,INLAND +-120.96,37.67,17.0,2434.0,511.0,1558.0,546.0,2.9219,114300.0,INLAND +-120.96,37.67,18.0,1442.0,229.0,538.0,220.0,4.2969,163200.0,INLAND +-120.97,37.67,31.0,1648.0,293.0,792.0,294.0,2.4,121500.0,INLAND +-120.97,37.66,19.0,1974.0,393.0,799.0,377.0,3.1286,137500.0,INLAND +-120.96,37.66,15.0,2485.0,434.0,1296.0,434.0,3.8542,145200.0,INLAND +-120.97,37.66,24.0,2930.0,588.0,1448.0,570.0,3.5395,127900.0,INLAND +-120.97,37.66,21.0,2760.0,632.0,1260.0,576.0,2.0227,179800.0,INLAND +-120.98,37.66,33.0,1959.0,342.0,984.0,356.0,4.5208,114200.0,INLAND +-120.98,37.66,40.0,3012.0,616.0,1423.0,595.0,2.6346,100600.0,INLAND +-120.98,37.65,36.0,826.0,167.0,432.0,150.0,2.5,103100.0,INLAND +-120.98,37.66,10.0,934.0,,401.0,255.0,0.9336,127100.0,INLAND +-120.98,37.67,33.0,1433.0,298.0,824.0,302.0,2.7621,109100.0,INLAND +-120.99,37.67,28.0,1768.0,423.0,1066.0,392.0,1.8315,90500.0,INLAND +-120.99,37.66,30.0,1718.0,395.0,914.0,400.0,1.933,107000.0,INLAND +-120.99,37.66,39.0,1748.0,329.0,831.0,302.0,2.5938,135600.0,INLAND +-120.99,37.66,46.0,1750.0,347.0,754.0,356.0,2.9137,106000.0,INLAND +-120.99,37.65,44.0,2848.0,623.0,1408.0,576.0,2.1487,86600.0,INLAND +-121.0,37.65,52.0,3887.0,803.0,1768.0,779.0,2.5089,119000.0,INLAND +-121.0,37.67,27.0,2278.0,479.0,995.0,449.0,2.5148,110200.0,INLAND +-121.01,37.67,37.0,2483.0,459.0,1072.0,445.0,3.0721,108100.0,INLAND +-121.01,37.66,36.0,3679.0,613.0,1366.0,581.0,4.5,151400.0,INLAND +-121.0,37.66,43.0,2369.0,413.0,944.0,422.0,3.2632,138100.0,INLAND +-121.0,37.66,43.0,2039.0,331.0,875.0,342.0,3.9844,152000.0,INLAND +-121.01,37.65,47.0,1713.0,334.0,570.0,297.0,2.1969,149400.0,INLAND +-121.02,37.67,32.0,3951.0,797.0,1916.0,740.0,2.6722,111500.0,INLAND +-121.03,37.67,24.0,2162.0,459.0,1468.0,441.0,3.1857,98300.0,INLAND +-121.03,37.66,31.0,887.0,217.0,614.0,199.0,2.1528,75500.0,INLAND +-121.02,37.66,36.0,3495.0,641.0,1688.0,684.0,3.1568,109900.0,INLAND +-121.02,37.66,28.0,1437.0,400.0,806.0,338.0,1.6078,125000.0,INLAND +-121.02,37.65,20.0,2973.0,620.0,1996.0,570.0,3.0645,106000.0,INLAND +-121.03,37.64,22.0,2001.0,387.0,1520.0,387.0,3.148,102300.0,INLAND +-121.03,37.63,5.0,2881.0,584.0,1490.0,570.0,3.0398,120000.0,INLAND +-121.05,37.64,33.0,1438.0,237.0,569.0,208.0,3.3516,150000.0,INLAND +-121.05,37.62,37.0,1043.0,196.0,555.0,197.0,3.4125,125000.0,INLAND +-121.02,37.64,42.0,1437.0,307.0,1035.0,284.0,2.1036,88300.0,INLAND +-121.02,37.63,35.0,1591.0,364.0,1290.0,352.0,1.564,81800.0,INLAND +-121.02,37.62,30.0,1721.0,399.0,1878.0,382.0,2.5363,83900.0,INLAND +-121.02,37.61,33.0,1469.0,370.0,1318.0,349.0,1.7104,59000.0,INLAND +-121.03,37.62,43.0,1241.0,240.0,612.0,266.0,2.8194,81300.0,INLAND +-121.03,37.62,46.0,2331.0,508.0,1210.0,484.0,2.5313,77700.0,INLAND +-121.02,37.62,14.0,5737.0,1286.0,4722.0,1210.0,1.6731,95800.0,INLAND +-121.01,37.64,52.0,201.0,35.0,74.0,22.0,1.3036,75000.0,INLAND +-121.01,37.64,36.0,1981.0,507.0,1998.0,468.0,1.9013,69900.0,INLAND +-121.01,37.64,33.0,693.0,207.0,598.0,192.0,1.0217,81300.0,INLAND +-121.0,37.64,43.0,311.0,95.0,293.0,94.0,1.2902,67500.0,INLAND +-120.99,37.64,41.0,1580.0,385.0,881.0,361.0,2.7538,99600.0,INLAND +-120.99,37.64,50.0,683.0,189.0,459.0,195.0,1.8162,70000.0,INLAND +-121.0,37.65,17.0,484.0,202.0,198.0,204.0,0.6825,187500.0,INLAND +-121.01,37.65,52.0,178.0,53.0,152.0,62.0,0.4999,82500.0,INLAND +-121.0,37.64,19.0,121.0,41.0,658.0,41.0,0.9573,162500.0,INLAND +-121.0,37.64,52.0,530.0,177.0,325.0,158.0,1.1875,90600.0,INLAND +-120.97,37.65,16.0,3960.0,716.0,1776.0,724.0,3.9886,137500.0,INLAND +-120.96,37.64,41.0,1467.0,328.0,673.0,310.0,2.7917,90700.0,INLAND +-120.97,37.64,42.0,2359.0,504.0,1131.0,480.0,2.0833,95500.0,INLAND +-120.98,37.65,40.0,422.0,63.0,158.0,63.0,7.3841,172200.0,INLAND +-120.98,37.64,45.0,1913.0,335.0,839.0,333.0,3.1397,110700.0,INLAND +-120.98,37.64,40.0,1791.0,359.0,679.0,322.0,2.1458,130300.0,INLAND +-120.9,37.66,19.0,3377.0,669.0,2426.0,663.0,2.9783,82500.0,INLAND +-120.91,37.66,36.0,1320.0,255.0,720.0,232.0,2.6523,76300.0,INLAND +-120.9,37.64,26.0,1762.0,418.0,855.0,308.0,1.6767,81300.0,INLAND +-120.94,37.65,13.0,5075.0,978.0,3033.0,838.0,3.0577,119000.0,INLAND +-120.93,37.65,1.0,2254.0,328.0,402.0,112.0,4.25,189200.0,INLAND +-120.92,37.65,23.0,505.0,124.0,163.0,129.0,1.3696,275000.0,INLAND +-120.95,37.65,14.0,5200.0,1119.0,3221.0,1102.0,2.6964,107000.0,INLAND +-120.96,37.65,34.0,1700.0,325.0,972.0,326.0,2.4485,95500.0,INLAND +-120.95,37.64,32.0,3487.0,740.0,1957.0,685.0,2.7209,88300.0,INLAND +-120.94,37.63,43.0,244.0,52.0,176.0,60.0,1.425,69400.0,INLAND +-120.92,37.63,39.0,45.0,8.0,22.0,9.0,1.7679,450000.0,INLAND +-120.96,37.64,36.0,60.0,12.0,51.0,14.0,3.625,67500.0,INLAND +-120.98,37.64,39.0,2617.0,659.0,2052.0,642.0,1.6952,65000.0,INLAND +-120.97,37.63,39.0,2360.0,607.0,2047.0,605.0,1.7054,58800.0,INLAND +-121.0,37.63,31.0,215.0,62.0,192.0,66.0,1.75,73800.0,INLAND +-121.0,37.63,49.0,2051.0,500.0,1525.0,467.0,1.59,80900.0,INLAND +-121.01,37.63,41.0,2764.0,639.0,2122.0,600.0,1.9643,74900.0,INLAND +-121.01,37.62,35.0,568.0,150.0,622.0,145.0,1.8167,79500.0,INLAND +-121.01,37.62,35.0,2074.0,477.0,1687.0,431.0,2.0885,73700.0,INLAND +-120.98,37.62,26.0,3819.0,955.0,3010.0,932.0,1.9206,81300.0,INLAND +-120.99,37.63,21.0,319.0,120.0,276.0,85.0,2.4792,60000.0,INLAND +-121.0,37.62,28.0,1153.0,420.0,1043.0,357.0,1.0801,75000.0,INLAND +-120.99,37.62,37.0,2014.0,505.0,1787.0,515.0,1.5515,54100.0,INLAND +-121.01,37.61,5.0,3655.0,696.0,2316.0,647.0,3.4703,129300.0,INLAND +-121.0,37.61,36.0,2647.0,604.0,2045.0,550.0,2.273,62900.0,INLAND +-121.0,37.6,22.0,4412.0,925.0,3116.0,817.0,2.6899,82100.0,INLAND +-121.02,37.6,33.0,1009.0,238.0,1027.0,246.0,2.5993,68000.0,INLAND +-120.98,37.6,36.0,1437.0,,1073.0,320.0,2.1779,58400.0,INLAND +-120.99,37.61,39.0,512.0,132.0,443.0,127.0,1.2857,60000.0,INLAND +-120.98,37.59,2.0,5042.0,834.0,2784.0,787.0,4.6484,145900.0,INLAND +-120.96,37.59,11.0,4236.0,879.0,2410.0,850.0,2.3849,122000.0,INLAND +-120.95,37.59,29.0,1727.0,439.0,1063.0,386.0,1.8929,63600.0,INLAND +-120.94,37.61,13.0,3309.0,603.0,1796.0,555.0,3.8372,129300.0,INLAND +-120.95,37.61,17.0,4054.0,654.0,2034.0,667.0,4.6833,142200.0,INLAND +-120.96,37.61,23.0,3497.0,887.0,2467.0,816.0,1.9444,93400.0,INLAND +-120.97,37.61,16.0,1326.0,375.0,884.0,375.0,1.871,103900.0,INLAND +-120.95,37.6,35.0,1493.0,278.0,729.0,268.0,2.9821,97400.0,INLAND +-120.94,37.6,30.0,3257.0,574.0,1804.0,588.0,3.5331,102900.0,INLAND +-120.95,37.59,43.0,1561.0,354.0,862.0,332.0,1.8466,81500.0,INLAND +-120.94,37.59,16.0,3964.0,824.0,2622.0,766.0,2.3152,111300.0,INLAND +-120.94,37.58,19.0,1549.0,369.0,770.0,370.0,2.0493,99500.0,INLAND +-120.95,37.62,11.0,4981.0,814.0,1934.0,686.0,3.7041,174800.0,INLAND +-120.97,37.62,7.0,8489.0,1673.0,5807.0,1575.0,2.9451,127800.0,INLAND +-120.54,37.68,18.0,335.0,76.0,189.0,67.0,1.2273,87500.0,INLAND +-120.64,37.7,16.0,284.0,51.0,239.0,46.0,1.8958,137500.0,INLAND +-120.75,37.69,24.0,2282.0,423.0,1167.0,398.0,3.8214,116100.0,INLAND +-120.86,37.69,5.0,6660.0,1217.0,3012.0,1087.0,3.0809,143600.0,INLAND +-120.87,37.64,40.0,1010.0,155.0,488.0,157.0,3.8984,170500.0,INLAND +-120.82,37.64,20.0,3375.0,630.0,1505.0,598.0,2.69,201300.0,INLAND +-120.77,37.64,8.0,3294.0,667.0,2277.0,652.0,2.6417,96800.0,INLAND +-120.76,37.65,25.0,3214.0,682.0,2319.0,640.0,2.0385,84300.0,INLAND +-120.46,37.65,17.0,315.0,89.0,130.0,58.0,1.4464,79200.0,INLAND +-120.59,37.59,36.0,291.0,48.0,124.0,47.0,5.6945,154200.0,INLAND +-120.69,37.59,27.0,1170.0,227.0,660.0,222.0,2.3906,81800.0,INLAND +-120.76,37.61,30.0,816.0,159.0,531.0,147.0,3.2604,87900.0,INLAND +-120.8,37.61,30.0,918.0,154.0,469.0,139.0,3.9688,175000.0,INLAND +-120.76,37.58,35.0,1395.0,264.0,756.0,253.0,3.6181,178600.0,INLAND +-120.83,37.58,30.0,1527.0,256.0,757.0,240.0,3.6629,171400.0,INLAND +-120.85,37.57,27.0,819.0,157.0,451.0,150.0,3.4934,193800.0,INLAND +-120.88,37.57,22.0,1440.0,267.0,774.0,249.0,3.9821,204300.0,INLAND +-120.87,37.62,30.0,455.0,70.0,220.0,69.0,4.8958,142500.0,INLAND +-120.87,37.6,32.0,4579.0,914.0,2742.0,856.0,2.6619,86200.0,INLAND +-120.86,37.6,25.0,1178.0,206.0,709.0,214.0,4.5625,133600.0,INLAND +-120.89,37.59,33.0,1016.0,206.0,617.0,209.0,2.151,195800.0,INLAND +-120.92,37.6,12.0,4485.0,805.0,2445.0,832.0,3.7611,123100.0,INLAND +-120.92,37.59,26.0,1705.0,279.0,642.0,236.0,2.6591,180500.0,INLAND +-120.91,37.57,26.0,3396.0,705.0,2446.0,694.0,2.0521,65400.0,INLAND +-120.93,37.56,17.0,1812.0,361.0,672.0,334.0,1.55,166100.0,INLAND +-120.95,37.57,29.0,1179.0,249.0,672.0,243.0,3.1125,154800.0,INLAND +-120.98,37.57,27.0,925.0,176.0,449.0,168.0,2.6406,129700.0,INLAND +-121.02,37.58,36.0,1285.0,270.0,706.0,273.0,1.7169,121400.0,INLAND +-121.04,37.6,27.0,958.0,184.0,580.0,177.0,2.1875,82800.0,INLAND +-121.09,37.56,32.0,1717.0,325.0,1356.0,307.0,2.6705,91900.0,INLAND +-121.03,37.55,32.0,946.0,198.0,624.0,173.0,1.9728,97900.0,INLAND +-121.04,37.5,33.0,613.0,123.0,343.0,116.0,3.1875,129200.0,INLAND +-121.02,37.48,26.0,467.0,,244.0,83.0,4.1346,187500.0,INLAND +-121.12,37.48,5.0,4109.0,820.0,3062.0,713.0,3.2396,125200.0,INLAND +-121.14,37.47,38.0,2427.0,450.0,1272.0,474.0,2.8833,115200.0,INLAND +-121.14,37.48,6.0,1772.0,332.0,1011.0,331.0,3.7045,128100.0,INLAND +-121.13,37.47,37.0,1995.0,448.0,1559.0,443.0,2.1833,92700.0,INLAND +-121.11,37.47,12.0,2263.0,410.0,913.0,330.0,3.5795,145600.0,INLAND +-121.14,37.46,4.0,2919.0,503.0,1592.0,491.0,5.2452,161900.0,INLAND +-121.2,37.6,30.0,2110.0,406.0,1301.0,345.0,2.3173,86500.0,INLAND +-121.27,37.56,31.0,1223.0,330.0,1067.0,245.0,2.8558,100000.0,INLAND +-121.31,37.44,33.0,69.0,28.0,47.0,14.0,0.536,112500.0,INLAND +-121.21,37.5,34.0,294.0,49.0,147.0,47.0,3.0,162500.0,INLAND +-121.14,37.52,37.0,1358.0,231.0,586.0,214.0,3.1645,170800.0,INLAND +-121.06,37.45,33.0,1401.0,299.0,915.0,282.0,3.4464,162500.0,INLAND +-121.06,37.42,52.0,504.0,96.0,295.0,97.0,3.5,73500.0,INLAND +-121.11,37.43,42.0,412.0,75.0,227.0,75.0,2.5,74200.0,INLAND +-121.29,37.33,36.0,48.0,12.0,27.0,8.0,4.0,75000.0,INLAND +-121.09,37.33,40.0,524.0,112.0,329.0,96.0,1.7188,112500.0,INLAND +-121.01,37.37,41.0,1045.0,233.0,632.0,230.0,2.3583,95000.0,INLAND +-121.01,37.33,17.0,1926.0,410.0,1054.0,321.0,1.6214,71500.0,INLAND +-121.03,37.33,27.0,1333.0,230.0,730.0,229.0,3.06,106000.0,INLAND +-121.03,37.32,42.0,2905.0,561.0,1457.0,551.0,2.2566,82100.0,INLAND +-121.04,37.3,6.0,2657.0,486.0,1409.0,392.0,3.3824,115500.0,INLAND +-120.84,37.53,14.0,3643.0,706.0,2070.0,697.0,3.1523,141800.0,INLAND +-120.86,37.53,18.0,2829.0,732.0,1751.0,712.0,1.6445,156900.0,INLAND +-120.88,37.53,18.0,239.0,39.0,92.0,36.0,5.3168,175000.0,INLAND +-120.85,37.55,45.0,350.0,62.0,187.0,63.0,2.5938,275000.0,INLAND +-120.89,37.54,30.0,509.0,115.0,275.0,115.0,2.2679,250000.0,INLAND +-120.89,37.52,42.0,1200.0,221.0,647.0,192.0,2.5402,157500.0,INLAND +-120.96,37.54,29.0,1468.0,245.0,747.0,231.0,3.4643,125000.0,INLAND +-120.96,37.51,30.0,1288.0,237.0,720.0,233.0,2.3864,139100.0,INLAND +-120.96,37.48,32.0,1256.0,212.0,682.0,236.0,2.9844,135900.0,INLAND +-120.97,37.43,27.0,1380.0,,810.0,262.0,2.1875,137500.0,INLAND +-120.8,37.55,18.0,1802.0,335.0,1110.0,329.0,3.1641,96300.0,INLAND +-120.79,37.53,20.0,1417.0,263.0,853.0,263.0,3.3083,108300.0,INLAND +-120.8,37.53,29.0,1162.0,254.0,726.0,225.0,2.1932,90600.0,INLAND +-120.81,37.53,15.0,570.0,123.0,189.0,107.0,1.875,181300.0,INLAND +-120.82,37.54,20.0,707.0,114.0,282.0,86.0,6.1324,164800.0,INLAND +-120.8,37.52,13.0,2920.0,481.0,1602.0,490.0,3.9286,145800.0,INLAND +-120.72,37.54,17.0,729.0,134.0,431.0,121.0,4.2188,131300.0,INLAND +-120.79,37.49,44.0,1186.0,225.0,687.0,234.0,3.4167,160700.0,INLAND +-120.84,37.47,11.0,2285.0,499.0,1468.0,471.0,2.7857,110300.0,INLAND +-120.89,37.48,27.0,1118.0,195.0,647.0,209.0,2.9135,159400.0,INLAND +-120.89,37.45,29.0,1940.0,337.0,1070.0,332.0,3.6597,145600.0,INLAND +-120.88,37.52,2.0,1871.0,409.0,707.0,256.0,2.6103,133600.0,INLAND +-120.87,37.5,7.0,4966.0,985.0,2431.0,904.0,3.1042,122500.0,INLAND +-120.86,37.5,34.0,4272.0,996.0,2916.0,962.0,1.9829,82800.0,INLAND +-120.85,37.49,39.0,2840.0,733.0,2606.0,737.0,1.9429,76400.0,INLAND +-120.86,37.49,37.0,1084.0,271.0,893.0,236.0,1.6213,69500.0,INLAND +-120.86,37.49,22.0,2140.0,445.0,1441.0,409.0,2.4706,89400.0,INLAND +-120.85,37.49,42.0,264.0,72.0,310.0,70.0,1.4063,61500.0,INLAND +-120.84,37.48,10.0,2874.0,612.0,1960.0,596.0,2.7381,104600.0,INLAND +-120.86,37.52,9.0,9885.0,1871.0,5372.0,1843.0,3.4821,127100.0,INLAND +-120.85,37.51,5.0,2899.0,745.0,1593.0,633.0,2.2292,127500.0,INLAND +-120.85,37.51,15.0,1131.0,285.0,728.0,281.0,1.5531,93100.0,INLAND +-120.84,37.5,47.0,2310.0,484.0,1126.0,447.0,2.2083,97300.0,INLAND +-120.85,37.5,52.0,1724.0,352.0,922.0,348.0,1.7227,85700.0,INLAND +-120.84,37.49,25.0,2383.0,576.0,1234.0,583.0,1.4529,86100.0,INLAND +-120.82,37.49,25.0,1611.0,285.0,882.0,261.0,3.5547,122400.0,INLAND +-120.82,37.51,17.0,1664.0,253.0,736.0,254.0,4.4083,165800.0,INLAND +-120.83,37.51,34.0,3078.0,477.0,1226.0,487.0,4.601,150000.0,INLAND +-120.82,37.5,21.0,2974.0,495.0,1313.0,461.0,4.4886,135400.0,INLAND +-120.83,37.5,30.0,1340.0,244.0,631.0,231.0,3.375,118500.0,INLAND +-120.84,37.51,8.0,1191.0,242.0,688.0,260.0,2.7243,138400.0,INLAND +-120.84,37.51,14.0,6337.0,1593.0,3909.0,1480.0,2.0643,106500.0,INLAND +-120.83,37.52,6.0,1488.0,252.0,773.0,259.0,4.1859,150000.0,INLAND +-120.84,37.52,16.0,4527.0,887.0,2531.0,825.0,3.7065,124800.0,INLAND +-120.84,37.51,20.0,1901.0,313.0,1258.0,320.0,3.8958,126800.0,INLAND +-120.83,37.51,13.0,3795.0,604.0,1639.0,609.0,4.6635,198400.0,INLAND +-121.62,39.16,7.0,4480.0,776.0,2271.0,767.0,3.809,110700.0,INLAND +-121.63,39.16,7.0,1879.0,444.0,1065.0,410.0,2.4183,103800.0,INLAND +-121.63,39.15,27.0,336.0,60.0,195.0,68.0,5.3946,71800.0,INLAND +-121.62,39.16,16.0,2037.0,464.0,1267.0,451.0,2.4556,97100.0,INLAND +-121.63,39.15,16.0,1547.0,418.0,940.0,400.0,1.5613,72500.0,INLAND +-121.63,39.15,27.0,2991.0,637.0,1419.0,606.0,1.8849,73500.0,INLAND +-121.62,39.15,36.0,2321.0,455.0,1168.0,489.0,3.0962,74000.0,INLAND +-121.62,39.15,23.0,1984.0,528.0,1043.0,452.0,1.9375,65300.0,INLAND +-121.63,39.14,39.0,1874.0,411.0,822.0,377.0,2.5038,68300.0,INLAND +-121.62,39.14,41.0,2183.0,559.0,1202.0,506.0,1.6902,61500.0,INLAND +-121.61,39.14,44.0,2035.0,476.0,1030.0,453.0,1.4661,65200.0,INLAND +-121.62,39.13,41.0,1317.0,309.0,856.0,337.0,1.6719,64100.0,INLAND +-121.63,39.13,26.0,2355.0,531.0,1047.0,497.0,1.8208,79500.0,INLAND +-121.62,39.13,41.0,1147.0,243.0,583.0,239.0,2.2431,63400.0,INLAND +-121.61,39.13,21.0,1432.0,328.0,933.0,336.0,1.6823,83800.0,INLAND +-121.63,39.12,34.0,1991.0,348.0,804.0,344.0,3.4492,98800.0,INLAND +-121.62,39.12,35.0,2787.0,587.0,1431.0,601.0,2.5469,65900.0,INLAND +-121.61,39.13,33.0,2559.0,539.0,1583.0,504.0,1.4727,53000.0,INLAND +-121.6,39.12,21.0,1299.0,338.0,1494.0,311.0,1.3348,225000.0,INLAND +-121.62,39.12,26.0,1405.0,204.0,627.0,215.0,4.2188,94200.0,INLAND +-121.63,39.12,32.0,2574.0,425.0,1099.0,391.0,4.3864,117500.0,INLAND +-121.62,39.11,5.0,2320.0,502.0,1245.0,489.0,3.2465,97200.0,INLAND +-121.63,39.1,22.0,3585.0,548.0,1757.0,577.0,4.174,100100.0,INLAND +-121.62,39.11,11.0,3519.0,577.0,1459.0,549.0,4.2792,123800.0,INLAND +-121.62,39.09,21.0,2693.0,481.0,1337.0,435.0,3.8534,99700.0,INLAND +-121.68,39.13,17.0,1969.0,297.0,717.0,268.0,3.4698,179700.0,INLAND +-121.65,39.13,11.0,4833.0,944.0,2336.0,841.0,2.6842,89100.0,INLAND +-121.68,39.11,19.0,1366.0,220.0,596.0,203.0,4.0625,141700.0,INLAND +-121.64,39.12,13.0,6408.0,1087.0,3294.0,1106.0,4.2656,110700.0,INLAND +-121.64,39.11,18.0,3212.0,542.0,1817.0,508.0,3.3793,92900.0,INLAND +-121.66,39.09,27.0,2098.0,372.0,1090.0,333.0,4.45,96200.0,INLAND +-121.67,39.18,26.0,2121.0,375.0,1125.0,366.0,3.3958,94600.0,INLAND +-121.68,39.15,14.0,2774.0,451.0,1292.0,428.0,4.3833,115200.0,INLAND +-121.67,39.14,22.0,2264.0,390.0,1056.0,403.0,3.6111,112300.0,INLAND +-121.63,39.18,13.0,1907.0,347.0,821.0,367.0,2.0978,134000.0,INLAND +-121.66,39.15,22.0,2144.0,376.0,1200.0,370.0,3.4426,102400.0,INLAND +-121.65,39.16,16.0,5022.0,1103.0,2087.0,956.0,2.3963,114800.0,INLAND +-121.64,39.15,15.0,2659.0,396.0,1159.0,407.0,5.234,124900.0,INLAND +-121.71,39.25,37.0,1871.0,321.0,806.0,294.0,4.0,101400.0,INLAND +-121.68,39.29,29.0,1860.0,400.0,1137.0,365.0,1.5281,61600.0,INLAND +-121.64,39.28,25.0,2857.0,662.0,2076.0,685.0,1.8095,64100.0,INLAND +-121.64,39.22,37.0,1189.0,248.0,627.0,219.0,3.8611,100000.0,INLAND +-121.67,39.26,29.0,3041.0,683.0,2106.0,687.0,1.6315,58000.0,INLAND +-121.83,39.23,25.0,3819.0,702.0,1983.0,658.0,2.4464,72500.0,INLAND +-121.74,39.15,20.0,2302.0,412.0,1205.0,399.0,2.8,71200.0,INLAND +-121.83,39.1,42.0,1282.0,198.0,451.0,159.0,3.2917,97900.0,INLAND +-121.91,39.14,45.0,845.0,155.0,343.0,136.0,2.125,62000.0,INLAND +-121.76,38.94,48.0,540.0,110.0,234.0,74.0,3.6111,67500.0,INLAND +-121.67,38.85,46.0,645.0,131.0,410.0,122.0,1.7417,110400.0,INLAND +-121.69,38.87,38.0,412.0,93.0,304.0,95.0,2.6597,86000.0,INLAND +-121.62,38.96,36.0,1826.0,329.0,1068.0,318.0,1.9797,118800.0,INLAND +-121.7,39.07,26.0,2668.0,510.0,1437.0,505.0,3.3125,100000.0,INLAND +-121.47,38.95,34.0,2129.0,350.0,969.0,314.0,2.7039,106300.0,INLAND +-121.52,38.9,32.0,1650.0,313.0,802.0,284.0,2.9048,98200.0,INLAND +-121.58,38.81,25.0,778.0,135.0,340.0,155.0,1.7857,258300.0,INLAND +-121.51,38.79,29.0,1716.0,323.0,850.0,282.0,2.9324,137500.0,INLAND +-122.1,40.05,26.0,633.0,129.0,305.0,140.0,2.1827,72700.0,INLAND +-122.08,40.09,19.0,2611.0,503.0,1185.0,483.0,2.3657,94000.0,INLAND +-122.12,40.14,34.0,1950.0,407.0,1029.0,376.0,2.5197,82300.0,INLAND +-122.17,40.2,28.0,1782.0,334.0,873.0,311.0,3.3594,79100.0,INLAND +-121.8,40.34,26.0,4815.0,910.0,1341.0,539.0,2.881,79800.0,INLAND +-121.78,40.12,14.0,388.0,108.0,35.0,17.0,6.1359,106300.0,INLAND +-122.42,40.32,16.0,1978.0,375.0,961.0,333.0,2.6827,83900.0,INLAND +-122.34,40.32,12.0,3848.0,689.0,2008.0,683.0,2.6352,92200.0,INLAND +-122.23,40.32,10.0,2336.0,426.0,1003.0,368.0,3.0833,81300.0,INLAND +-122.38,40.09,16.0,2077.0,388.0,1155.0,389.0,3.1361,84800.0,INLAND +-122.57,39.9,15.0,3873.0,810.0,1697.0,627.0,2.4555,55600.0,INLAND +-122.72,40.17,16.0,396.0,78.0,188.0,72.0,1.3889,87500.0,INLAND +-122.2,40.26,15.0,2102.0,358.0,957.0,371.0,3.1908,137900.0,INLAND +-122.38,40.2,16.0,2722.0,511.0,1366.0,495.0,2.8447,87700.0,INLAND +-122.35,40.25,10.0,1621.0,318.0,866.0,283.0,3.5,104300.0,INLAND +-122.26,40.19,35.0,2467.0,469.0,1194.0,444.0,2.0425,63700.0,INLAND +-122.24,40.19,29.0,1912.0,336.0,859.0,325.0,3.7,70500.0,INLAND +-122.23,40.2,17.0,762.0,138.0,322.0,139.0,4.2917,128800.0,INLAND +-122.24,40.18,39.0,2191.0,493.0,1307.0,499.0,1.6483,60800.0,INLAND +-122.24,40.17,51.0,2378.0,584.0,1083.0,494.0,1.577,51900.0,INLAND +-122.25,40.17,47.0,1554.0,308.0,846.0,301.0,1.8077,54100.0,INLAND +-122.22,40.18,13.0,3719.0,803.0,1754.0,764.0,2.3517,88900.0,INLAND +-122.21,40.2,19.0,3404.0,731.0,1421.0,683.0,2.6149,84400.0,INLAND +-122.19,40.2,30.0,2750.0,476.0,1296.0,464.0,3.5305,73600.0,INLAND +-122.21,40.18,30.0,744.0,156.0,410.0,165.0,2.1898,63200.0,INLAND +-122.25,40.17,19.0,3182.0,630.0,1741.0,642.0,1.9727,64900.0,INLAND +-122.24,40.16,19.0,2500.0,509.0,1293.0,494.0,2.035,55100.0,INLAND +-122.23,40.17,21.0,1401.0,331.0,651.0,299.0,2.225,64700.0,INLAND +-122.23,40.15,14.0,2297.0,573.0,1637.0,551.0,1.787,51600.0,INLAND +-122.25,40.15,15.0,1677.0,346.0,858.0,327.0,2.4375,59200.0,INLAND +-122.17,40.11,24.0,1631.0,340.0,1042.0,333.0,1.7708,59000.0,INLAND +-122.19,40.07,21.0,1548.0,290.0,744.0,265.0,1.9773,55000.0,INLAND +-122.18,40.02,30.0,1952.0,397.0,961.0,333.0,2.25,68200.0,INLAND +-122.14,40.07,31.0,2053.0,465.0,1193.0,447.0,1.4923,44400.0,INLAND +-122.13,40.01,21.0,916.0,194.0,451.0,178.0,2.125,63300.0,INLAND +-122.1,40.03,25.0,2516.0,,1266.0,494.0,1.7566,58400.0,INLAND +-122.06,40.02,32.0,1435.0,277.0,690.0,254.0,2.3043,68400.0,INLAND +-122.0,39.94,27.0,852.0,176.0,464.0,148.0,1.7125,58200.0,INLAND +-122.11,39.82,27.0,1065.0,214.0,508.0,198.0,2.625,91700.0,INLAND +-122.12,39.91,16.0,4006.0,797.0,2028.0,752.0,2.3929,77200.0,INLAND +-122.17,39.92,16.0,1566.0,306.0,652.0,287.0,1.9038,60800.0,INLAND +-122.17,39.94,32.0,2352.0,477.0,1316.0,447.0,2.2292,57400.0,INLAND +-122.14,39.97,27.0,1079.0,222.0,625.0,197.0,3.1319,62700.0,INLAND +-122.23,39.95,21.0,2087.0,382.0,888.0,361.0,2.207,86400.0,INLAND +-122.2,39.93,9.0,1296.0,287.0,768.0,260.0,1.9191,54400.0,INLAND +-122.23,39.86,21.0,1730.0,350.0,982.0,322.0,1.8375,79800.0,INLAND +-122.19,39.92,20.0,2563.0,658.0,1363.0,611.0,1.023,54200.0,INLAND +-122.18,39.93,35.0,1387.0,272.0,610.0,237.0,2.1759,59500.0,INLAND +-122.19,39.91,39.0,2467.0,529.0,1433.0,502.0,1.8571,53500.0,INLAND +-122.68,41.15,32.0,817.0,206.0,224.0,89.0,3.631,90400.0,INLAND +-122.81,40.93,16.0,2050.0,471.0,588.0,195.0,2.7083,88900.0,INLAND +-122.96,40.77,29.0,1637.0,297.0,753.0,270.0,3.2891,93100.0,INLAND +-122.93,40.78,20.0,3758.0,798.0,1685.0,757.0,2.3667,91200.0,INLAND +-122.89,40.76,14.0,712.0,131.0,270.0,90.0,2.3958,102100.0,INLAND +-122.79,40.75,17.0,3851.0,818.0,1352.0,560.0,2.125,71700.0,INLAND +-122.86,40.56,12.0,1350.0,300.0,423.0,172.0,1.7393,81300.0,INLAND +-122.95,40.67,17.0,1498.0,331.0,574.0,242.0,2.0268,94200.0,INLAND +-122.95,40.71,26.0,2231.0,421.0,987.0,364.0,2.4792,88800.0,INLAND +-123.35,40.99,23.0,141.0,59.0,47.0,23.0,1.125,66000.0,INLAND +-123.53,40.88,20.0,2680.0,599.0,918.0,345.0,2.2115,75000.0,INLAND +-123.48,40.79,15.0,619.0,160.0,287.0,104.0,1.9107,79200.0,INLAND +-123.28,40.77,25.0,767.0,206.0,301.0,121.0,1.625,79200.0,INLAND +-123.13,40.85,18.0,1650.0,377.0,675.0,282.0,1.8933,84700.0,INLAND +-123.41,40.61,17.0,769.0,205.0,301.0,126.0,1.7875,55000.0,INLAND +-123.11,40.6,23.0,708.0,202.0,316.0,136.0,1.1602,65000.0,INLAND +-123.18,40.58,18.0,1451.0,278.0,695.0,254.0,1.7262,73700.0,INLAND +-123.22,40.54,27.0,1573.0,361.0,847.0,330.0,1.9034,49600.0,INLAND +-123.12,40.54,23.0,1091.0,217.0,539.0,201.0,1.8696,61500.0,INLAND +-123.21,40.51,16.0,241.0,84.0,152.0,61.0,1.375,48800.0,INLAND +-123.32,40.43,15.0,661.0,146.0,131.0,57.0,0.4999,56700.0,INLAND +-123.08,40.4,10.0,365.0,102.0,140.0,49.0,1.7969,37500.0,INLAND +-123.17,40.31,36.0,98.0,28.0,18.0,8.0,0.536,14999.0,INLAND +-123.22,40.16,27.0,1848.0,449.0,396.0,150.0,2.8472,41300.0,INLAND +-123.48,40.34,19.0,518.0,108.0,216.0,80.0,2.7083,64500.0,INLAND +-123.43,40.22,20.0,133.0,35.0,87.0,37.0,3.625,67500.0,INLAND +-123.41,40.07,17.0,449.0,151.0,141.0,53.0,0.8362,87500.0,INLAND +-118.96,36.66,18.0,1302.0,424.0,320.0,133.0,3.1964,80000.0,INLAND +-119.12,36.54,30.0,2747.0,515.0,1368.0,453.0,2.9828,85200.0,INLAND +-118.96,36.49,24.0,1268.0,269.0,636.0,183.0,1.742,118800.0,INLAND +-118.65,36.57,20.0,1431.0,416.0,570.0,225.0,1.4821,143300.0,INLAND +-118.86,36.41,20.0,2749.0,575.0,1195.0,491.0,3.0391,139700.0,INLAND +-118.94,36.32,10.0,2271.0,398.0,986.0,358.0,4.0703,147100.0,INLAND +-119.26,36.61,33.0,560.0,90.0,310.0,113.0,2.5417,118800.0,INLAND +-119.25,36.56,35.0,1675.0,373.0,1131.0,316.0,1.6722,59100.0,INLAND +-119.28,36.54,33.0,1470.0,330.0,1222.0,301.0,1.8163,57400.0,INLAND +-119.29,36.54,18.0,2581.0,628.0,2732.0,592.0,1.8429,58300.0,INLAND +-119.29,36.55,21.0,2467.0,520.0,1721.0,515.0,2.5521,65600.0,INLAND +-119.3,36.57,32.0,728.0,,461.0,149.0,3.0156,109100.0,INLAND +-119.44,36.48,27.0,1546.0,415.0,1704.0,395.0,1.1728,41700.0,INLAND +-119.37,36.47,26.0,337.0,69.0,277.0,73.0,2.3438,100000.0,INLAND +-119.45,36.48,38.0,402.0,86.0,311.0,87.0,3.1719,106300.0,INLAND +-119.48,36.44,22.0,1389.0,290.0,1185.0,271.0,2.0857,49200.0,INLAND +-119.35,36.52,39.0,3027.0,608.0,2199.0,592.0,2.6445,62000.0,INLAND +-119.48,36.5,32.0,3451.0,625.0,1968.0,574.0,2.9554,110300.0,INLAND +-119.43,36.55,27.0,1621.0,323.0,882.0,324.0,2.75,93500.0,INLAND +-119.48,36.54,28.0,2112.0,363.0,1011.0,335.0,4.2222,108900.0,INLAND +-119.4,36.55,19.0,3000.0,628.0,2202.0,590.0,2.5141,67400.0,INLAND +-119.39,36.55,30.0,1669.0,314.0,837.0,325.0,3.3869,80400.0,INLAND +-119.38,36.56,14.0,3965.0,804.0,1945.0,733.0,2.6906,95300.0,INLAND +-119.38,36.55,31.0,2342.0,439.0,1411.0,465.0,3.017,72000.0,INLAND +-119.38,36.56,25.0,1180.0,222.0,611.0,212.0,2.0729,84700.0,INLAND +-119.38,36.54,33.0,2465.0,536.0,2030.0,522.0,1.5223,51800.0,INLAND +-119.38,36.53,38.0,1281.0,,1423.0,293.0,1.9602,51400.0,INLAND +-119.39,36.54,34.0,1590.0,422.0,1272.0,407.0,1.8068,59000.0,INLAND +-119.39,36.54,30.0,1408.0,326.0,1184.0,324.0,1.7165,59100.0,INLAND +-119.4,36.53,28.0,2201.0,429.0,1524.0,412.0,2.75,65000.0,INLAND +-119.28,36.52,19.0,1402.0,324.0,1327.0,316.0,2.25,53200.0,INLAND +-119.29,36.53,33.0,1509.0,352.0,1734.0,336.0,1.625,50300.0,INLAND +-119.29,36.52,39.0,858.0,228.0,1222.0,224.0,1.5714,43000.0,INLAND +-119.26,36.5,35.0,1689.0,371.0,1475.0,329.0,2.5719,74300.0,INLAND +-119.1,36.43,24.0,1039.0,190.0,643.0,193.0,2.6711,71300.0,INLAND +-119.1,36.42,26.0,1775.0,416.0,1217.0,383.0,1.8801,57600.0,INLAND +-119.09,36.42,15.0,1517.0,361.0,1275.0,343.0,1.5875,55800.0,INLAND +-119.09,36.42,17.0,877.0,219.0,966.0,218.0,2.0,52500.0,INLAND +-119.1,36.4,31.0,1533.0,361.0,1518.0,386.0,1.5608,51700.0,INLAND +-119.1,36.4,23.0,1885.0,363.0,1056.0,338.0,3.2159,92800.0,INLAND +-119.23,36.45,36.0,1508.0,323.0,1283.0,312.0,2.1205,60000.0,INLAND +-119.18,36.4,39.0,1730.0,310.0,899.0,309.0,2.6648,129200.0,INLAND +-119.27,36.39,17.0,2076.0,350.0,998.0,340.0,4.3281,145700.0,INLAND +-119.23,36.39,39.0,1660.0,349.0,1061.0,306.0,1.4812,53500.0,INLAND +-119.21,36.39,31.0,1465.0,303.0,1013.0,297.0,2.0363,53500.0,INLAND +-119.21,36.38,18.0,2158.0,413.0,1461.0,395.0,2.0216,58000.0,INLAND +-119.35,36.42,18.0,1115.0,193.0,1742.0,176.0,2.7969,123800.0,INLAND +-119.31,36.39,32.0,2293.0,466.0,1538.0,468.0,1.9342,68600.0,INLAND +-119.45,36.35,22.0,1824.0,333.0,1076.0,282.0,2.3365,69600.0,INLAND +-119.41,36.35,20.0,1743.0,340.0,1390.0,336.0,2.2222,52900.0,INLAND +-119.42,36.35,20.0,1469.0,303.0,1031.0,259.0,1.6645,48000.0,INLAND +-119.29,36.35,15.0,1740.0,319.0,1332.0,308.0,2.5743,60200.0,INLAND +-119.29,36.34,10.0,1832.0,455.0,1664.0,429.0,2.0227,53300.0,INLAND +-119.3,36.35,24.0,1855.0,416.0,1520.0,410.0,2.3304,64900.0,INLAND +-119.3,36.34,27.0,1515.0,358.0,1178.0,309.0,1.4432,48100.0,INLAND +-119.31,36.34,14.0,2985.0,607.0,2250.0,607.0,2.1602,65200.0,INLAND +-119.32,36.36,18.0,2060.0,383.0,1348.0,397.0,3.4312,68400.0,INLAND +-119.37,36.35,20.0,1132.0,177.0,518.0,178.0,5.3767,231300.0,INLAND +-119.32,36.33,20.0,1896.0,266.0,674.0,277.0,9.0376,239100.0,INLAND +-119.32,36.33,18.0,2603.0,478.0,1158.0,423.0,4.5938,150500.0,INLAND +-119.34,36.34,5.0,4505.0,834.0,1917.0,775.0,4.0144,126600.0,INLAND +-119.34,36.33,17.0,2250.0,430.0,1218.0,468.0,4.1812,93700.0,INLAND +-119.35,36.33,14.0,1195.0,220.0,568.0,229.0,3.1486,105600.0,INLAND +-119.36,36.33,11.0,3221.0,617.0,1351.0,565.0,2.9844,132000.0,INLAND +-119.29,36.34,28.0,1440.0,431.0,2178.0,440.0,1.2634,50600.0,INLAND +-119.29,36.34,35.0,1235.0,369.0,1246.0,341.0,1.474,71000.0,INLAND +-119.3,36.34,45.0,3723.0,831.0,2256.0,770.0,1.8299,63100.0,INLAND +-119.31,36.34,32.0,1893.0,453.0,1744.0,425.0,1.4729,54100.0,INLAND +-119.29,36.33,19.0,792.0,232.0,641.0,222.0,0.7445,112500.0,INLAND +-119.31,36.33,46.0,1636.0,338.0,772.0,332.0,2.425,84900.0,INLAND +-119.25,36.36,16.0,3245.0,469.0,1471.0,450.0,5.8673,154800.0,INLAND +-119.27,36.34,7.0,3433.0,626.0,1793.0,626.0,3.5296,83700.0,INLAND +-119.28,36.35,7.0,3598.0,701.0,2080.0,678.0,3.1111,72400.0,INLAND +-119.28,36.33,10.0,1051.0,297.0,927.0,274.0,0.78,55500.0,INLAND +-119.27,36.34,26.0,2057.0,472.0,1453.0,439.0,2.4113,58600.0,INLAND +-119.24,36.33,9.0,3289.0,621.0,1866.0,631.0,3.1599,95000.0,INLAND +-119.19,36.34,33.0,2199.0,403.0,1245.0,394.0,2.73,96900.0,INLAND +-119.09,36.35,21.0,3146.0,595.0,1580.0,513.0,2.7857,92700.0,INLAND +-119.11,36.29,18.0,1666.0,294.0,859.0,301.0,2.6065,93800.0,INLAND +-119.13,36.3,33.0,3379.0,612.0,1565.0,618.0,2.7321,76500.0,INLAND +-119.12,36.29,29.0,1638.0,323.0,942.0,322.0,2.1731,66200.0,INLAND +-119.16,36.28,18.0,2377.0,414.0,1359.0,424.0,4.4,79300.0,INLAND +-119.16,36.31,7.0,2946.0,664.0,1608.0,622.0,1.6829,80200.0,INLAND +-119.15,36.29,18.0,1435.0,,657.0,254.0,2.4281,72500.0,INLAND +-119.14,36.29,32.0,2084.0,482.0,1410.0,420.0,1.5321,48300.0,INLAND +-119.14,36.29,36.0,788.0,181.0,405.0,180.0,1.47,61900.0,INLAND +-119.2,36.3,19.0,1427.0,311.0,1026.0,293.0,2.625,57000.0,INLAND +-119.2,36.3,32.0,1355.0,363.0,1427.0,384.0,1.3444,45600.0,INLAND +-119.21,36.3,23.0,951.0,235.0,806.0,222.0,1.7734,41400.0,INLAND +-119.21,36.3,18.0,1433.0,265.0,1092.0,276.0,1.9135,49400.0,INLAND +-119.22,36.31,17.0,2079.0,459.0,2022.0,462.0,1.5464,54100.0,INLAND +-119.25,36.27,23.0,1494.0,275.0,678.0,235.0,2.6875,69100.0,INLAND +-119.2,36.28,22.0,2295.0,508.0,1654.0,478.0,1.684,65900.0,INLAND +-119.29,36.32,27.0,1513.0,374.0,839.0,350.0,1.2012,64600.0,INLAND +-119.29,36.32,35.0,1898.0,481.0,1123.0,433.0,1.1419,62900.0,INLAND +-119.28,36.32,29.0,2274.0,514.0,1234.0,521.0,1.9138,66900.0,INLAND +-119.29,36.32,33.0,2107.0,451.0,1364.0,442.0,2.2024,67200.0,INLAND +-119.28,36.32,16.0,2812.0,514.0,1620.0,523.0,3.7404,89200.0,INLAND +-119.27,36.32,6.0,2881.0,518.0,1432.0,504.0,4.0806,110200.0,INLAND +-119.27,36.32,9.0,3631.0,635.0,1881.0,628.0,4.7723,113100.0,INLAND +-119.25,36.32,32.0,1821.0,345.0,812.0,299.0,2.75,72200.0,INLAND +-119.26,36.3,18.0,3578.0,720.0,1540.0,640.0,2.425,84600.0,INLAND +-119.3,36.33,44.0,2060.0,414.0,819.0,355.0,2.8795,77000.0,INLAND +-119.3,36.32,23.0,3521.0,615.0,1712.0,636.0,3.3875,92500.0,INLAND +-119.31,36.32,44.0,2032.0,308.0,791.0,336.0,4.0298,109000.0,INLAND +-119.31,36.32,23.0,2945.0,592.0,1419.0,532.0,2.5733,88800.0,INLAND +-119.29,36.31,14.0,2382.0,377.0,1278.0,386.0,5.1896,101900.0,INLAND +-119.29,36.31,34.0,1439.0,253.0,607.0,223.0,3.0972,82800.0,INLAND +-119.3,36.31,16.0,2234.0,357.0,1150.0,361.0,4.2778,97300.0,INLAND +-119.31,36.31,18.0,3860.0,760.0,1643.0,664.0,2.0714,92600.0,INLAND +-119.31,36.3,20.0,1256.0,209.0,566.0,195.0,4.0221,86300.0,INLAND +-119.3,36.3,14.0,3023.0,469.0,1523.0,492.0,5.3602,118600.0,INLAND +-119.29,36.3,20.0,1157.0,179.0,572.0,191.0,5.3495,177300.0,INLAND +-119.33,36.32,16.0,3331.0,839.0,1955.0,763.0,1.6148,86600.0,INLAND +-119.34,36.32,14.0,1204.0,227.0,633.0,247.0,3.925,83800.0,INLAND +-119.35,36.32,10.0,3817.0,719.0,1686.0,714.0,3.8235,94600.0,INLAND +-119.34,36.32,6.0,3266.0,604.0,1769.0,580.0,3.1574,89200.0,INLAND +-119.33,36.32,20.0,2025.0,328.0,1039.0,346.0,3.5313,82800.0,INLAND +-119.32,36.32,35.0,2316.0,387.0,849.0,378.0,4.3816,88600.0,INLAND +-119.33,36.32,23.0,3137.0,628.0,1446.0,548.0,2.5,85500.0,INLAND +-119.33,36.32,19.0,2778.0,431.0,1092.0,451.0,5.2561,121300.0,INLAND +-119.32,36.32,29.0,2409.0,436.0,1142.0,440.0,3.6895,87700.0,INLAND +-119.32,36.31,21.0,2309.0,424.0,1047.0,453.0,2.9886,87500.0,INLAND +-119.33,36.31,17.0,2401.0,409.0,1100.0,409.0,4.0577,107300.0,INLAND +-119.33,36.31,15.0,1472.0,228.0,892.0,257.0,5.3909,113000.0,INLAND +-119.33,36.3,11.0,3045.0,,1563.0,516.0,5.4337,133800.0,INLAND +-119.32,36.3,15.0,2864.0,571.0,1480.0,475.0,2.9698,93400.0,INLAND +-119.34,36.31,14.0,1635.0,422.0,870.0,399.0,2.7,88900.0,INLAND +-119.34,36.3,13.0,2394.0,458.0,1177.0,389.0,2.6875,74400.0,INLAND +-119.33,36.3,12.0,2172.0,352.0,1013.0,354.0,4.9464,115600.0,INLAND +-119.38,36.3,14.0,1932.0,330.0,997.0,291.0,3.6875,93200.0,INLAND +-119.33,36.28,16.0,2624.0,527.0,1077.0,520.0,2.125,104200.0,INLAND +-119.32,36.3,14.0,1680.0,343.0,931.0,350.0,2.7336,89200.0,INLAND +-119.29,36.28,23.0,1895.0,340.0,749.0,313.0,2.2333,120100.0,INLAND +-119.46,36.25,32.0,1702.0,348.0,1016.0,350.0,2.5,73600.0,INLAND +-119.4,36.25,25.0,1696.0,279.0,909.0,291.0,2.3,132800.0,INLAND +-119.36,36.22,10.0,2445.0,526.0,1262.0,476.0,1.9355,68300.0,INLAND +-119.37,36.22,19.0,1673.0,318.0,1298.0,343.0,2.706,64800.0,INLAND +-119.36,36.21,18.0,1082.0,202.0,793.0,213.0,2.4032,60000.0,INLAND +-119.35,36.22,32.0,1290.0,304.0,852.0,309.0,1.4429,54600.0,INLAND +-119.35,36.21,26.0,2481.0,586.0,1445.0,498.0,1.6378,60300.0,INLAND +-119.36,36.21,25.0,1170.0,259.0,804.0,257.0,1.3889,50200.0,INLAND +-119.37,36.21,35.0,2228.0,476.0,1567.0,449.0,1.4455,54100.0,INLAND +-119.34,36.23,12.0,4965.0,872.0,2191.0,804.0,3.5611,90200.0,INLAND +-119.35,36.22,29.0,2051.0,351.0,915.0,343.0,3.1944,106800.0,INLAND +-119.34,36.22,38.0,2708.0,460.0,1260.0,455.0,3.0905,78200.0,INLAND +-119.33,36.22,29.0,1735.0,323.0,805.0,293.0,3.5039,89900.0,INLAND +-119.33,36.21,38.0,3115.0,622.0,1238.0,606.0,2.6083,67000.0,INLAND +-119.34,36.21,30.0,749.0,214.0,537.0,199.0,0.8229,68400.0,INLAND +-119.33,36.22,9.0,3748.0,644.0,1955.0,620.0,4.2011,108100.0,INLAND +-119.32,36.22,5.0,2319.0,438.0,1283.0,423.0,3.6343,95400.0,INLAND +-119.32,36.21,29.0,1220.0,232.0,619.0,246.0,3.3125,78300.0,INLAND +-119.32,36.25,21.0,1231.0,,609.0,206.0,2.8365,90000.0,INLAND +-119.25,36.23,24.0,2015.0,355.0,1031.0,351.0,3.4306,139200.0,INLAND +-119.27,36.18,23.0,3180.0,547.0,1829.0,498.0,2.6098,66000.0,INLAND +-119.29,36.12,24.0,1248.0,226.0,641.0,200.0,2.4722,129200.0,INLAND +-119.14,36.23,22.0,2935.0,523.0,1927.0,530.0,2.5875,70400.0,INLAND +-119.12,36.19,21.0,2645.0,464.0,1245.0,407.0,2.9145,114200.0,INLAND +-119.08,36.22,28.0,1606.0,320.0,1158.0,317.0,3.0324,55600.0,INLAND +-119.08,36.21,20.0,1911.0,389.0,1241.0,348.0,2.5156,59300.0,INLAND +-119.09,36.22,34.0,1715.0,290.0,780.0,297.0,3.4306,74300.0,INLAND +-119.09,36.21,43.0,1335.0,280.0,943.0,288.0,1.9861,47700.0,INLAND +-119.09,36.21,38.0,1901.0,453.0,1613.0,400.0,1.8828,44600.0,INLAND +-119.1,36.21,38.0,727.0,173.0,559.0,176.0,2.4653,49500.0,INLAND +-119.11,36.21,10.0,1972.0,455.0,1469.0,442.0,1.5407,58400.0,INLAND +-118.74,36.23,22.0,1033.0,232.0,442.0,136.0,2.6447,137500.0,INLAND +-118.93,36.19,30.0,2685.0,546.0,951.0,523.0,2.6184,113900.0,INLAND +-118.82,36.13,43.0,1281.0,287.0,534.0,231.0,2.8906,65700.0,INLAND +-118.54,36.12,11.0,4103.0,882.0,356.0,171.0,2.1029,99100.0,INLAND +-118.37,36.19,10.0,443.0,111.0,48.0,21.0,3.125,71300.0,INLAND +-118.7,35.82,20.0,4642.0,1300.0,658.0,247.0,2.3937,82100.0,INLAND +-118.86,35.9,38.0,298.0,55.0,161.0,47.0,4.125,71300.0,INLAND +-118.73,36.01,14.0,3263.0,651.0,1910.0,594.0,2.8603,128900.0,INLAND +-119.08,36.2,30.0,1677.0,358.0,1159.0,365.0,2.4554,61200.0,INLAND +-119.1,36.19,17.0,1564.0,396.0,713.0,362.0,1.6186,77100.0,INLAND +-119.34,36.21,22.0,3065.0,726.0,2165.0,738.0,1.4792,54400.0,INLAND +-119.34,36.2,12.0,1632.0,378.0,1303.0,315.0,2.0333,54400.0,INLAND +-119.33,36.19,27.0,418.0,163.0,332.0,141.0,1.0714,63800.0,INLAND +-119.31,36.2,23.0,1837.0,332.0,1064.0,335.0,3.1453,74500.0,INLAND +-119.32,36.21,25.0,2360.0,460.0,1424.0,436.0,2.3152,63100.0,INLAND +-119.32,36.2,25.0,1427.0,246.0,772.0,221.0,2.2262,64500.0,INLAND +-119.32,36.2,15.0,1562.0,275.0,961.0,287.0,3.4231,83300.0,INLAND +-119.32,36.19,11.0,1281.0,291.0,861.0,313.0,1.0962,72300.0,INLAND +-119.32,36.19,11.0,3136.0,620.0,2013.0,583.0,3.335,69700.0,INLAND +-119.35,36.2,31.0,1783.0,382.0,1266.0,358.0,2.2264,50800.0,INLAND +-119.35,36.2,29.0,1938.0,404.0,1487.0,414.0,1.7462,51100.0,INLAND +-119.36,36.2,33.0,1955.0,398.0,1412.0,397.0,2.25,51500.0,INLAND +-119.37,36.19,24.0,1306.0,266.0,889.0,276.0,2.4922,66100.0,INLAND +-119.35,36.19,6.0,958.0,226.0,734.0,230.0,1.0349,67800.0,INLAND +-119.45,36.16,27.0,2119.0,373.0,1268.0,345.0,2.8152,106900.0,INLAND +-119.35,36.16,21.0,2751.0,602.0,1496.0,489.0,2.3882,49200.0,INLAND +-119.45,36.09,18.0,408.0,82.0,253.0,75.0,2.0313,112500.0,INLAND +-119.31,36.06,20.0,2236.0,434.0,1405.0,412.0,1.8827,48700.0,INLAND +-119.4,36.04,39.0,915.0,199.0,580.0,175.0,1.8894,112500.0,INLAND +-119.27,36.05,29.0,1016.0,174.0,481.0,140.0,2.2917,112500.0,INLAND +-119.21,36.1,30.0,1471.0,373.0,1418.0,357.0,1.7432,42500.0,INLAND +-119.19,36.06,29.0,1815.0,376.0,1421.0,339.0,1.9091,71300.0,INLAND +-119.19,36.14,41.0,759.0,140.0,408.0,129.0,3.9,85900.0,INLAND +-119.13,36.13,28.0,1673.0,385.0,1434.0,371.0,2.0586,40900.0,INLAND +-119.08,36.13,21.0,2271.0,376.0,1145.0,372.0,3.1528,113700.0,INLAND +-119.03,36.13,24.0,2259.0,408.0,1169.0,395.0,1.7106,95500.0,INLAND +-119.06,36.15,20.0,1282.0,273.0,852.0,247.0,1.6354,49000.0,INLAND +-119.06,36.15,25.0,2402.0,478.0,1527.0,461.0,2.3194,52900.0,INLAND +-119.14,36.06,32.0,1838.0,441.0,1628.0,425.0,1.6452,41500.0,INLAND +-119.12,36.05,27.0,1575.0,321.0,1063.0,317.0,2.1477,53900.0,INLAND +-119.08,36.02,26.0,1748.0,346.0,891.0,303.0,1.9439,62100.0,INLAND +-119.01,36.02,17.0,3915.0,742.0,1768.0,688.0,2.375,79800.0,INLAND +-118.92,36.04,28.0,1148.0,233.0,521.0,212.0,2.9208,98500.0,INLAND +-119.08,36.09,25.0,1880.0,339.0,1003.0,315.0,2.7298,103400.0,INLAND +-119.06,36.1,21.0,1344.0,249.0,868.0,221.0,2.5893,63600.0,INLAND +-119.06,36.09,11.0,2572.0,454.0,1402.0,415.0,3.6786,72900.0,INLAND +-119.04,36.09,15.0,2288.0,401.0,1238.0,429.0,3.0278,77400.0,INLAND +-119.05,36.09,9.0,3297.0,568.0,1749.0,568.0,4.0217,99200.0,INLAND +-119.04,36.07,17.0,2623.0,659.0,1912.0,618.0,1.5893,52000.0,INLAND +-119.06,36.08,19.0,2554.0,443.0,1301.0,419.0,4.1856,72100.0,INLAND +-119.07,36.08,5.0,2693.0,508.0,1785.0,491.0,3.0,71000.0,INLAND +-119.07,36.07,11.0,2265.0,382.0,1285.0,387.0,3.2042,76200.0,INLAND +-119.06,36.07,20.0,2683.0,553.0,1497.0,548.0,1.7031,64600.0,INLAND +-119.05,36.07,21.0,2472.0,523.0,1238.0,504.0,1.7756,62900.0,INLAND +-119.05,36.06,23.0,2344.0,407.0,1184.0,406.0,3.1625,70600.0,INLAND +-119.02,36.09,15.0,2234.0,415.0,1254.0,420.0,3.0234,88600.0,INLAND +-119.01,36.08,31.0,1620.0,366.0,1154.0,348.0,1.8857,55500.0,INLAND +-119.03,36.08,19.0,2736.0,549.0,1432.0,503.0,2.6944,67700.0,INLAND +-119.03,36.08,19.0,2471.0,431.0,1040.0,426.0,3.25,80600.0,INLAND +-119.04,36.07,26.0,2185.0,435.0,1108.0,419.0,2.2277,78000.0,INLAND +-119.03,36.07,26.0,3210.0,646.0,1908.0,642.0,2.4167,77600.0,INLAND +-119.02,36.07,29.0,2610.0,597.0,1659.0,571.0,1.5911,60800.0,INLAND +-119.02,36.07,39.0,1173.0,269.0,702.0,232.0,1.6146,53100.0,INLAND +-119.01,36.07,44.0,2450.0,575.0,1330.0,508.0,1.6103,50900.0,INLAND +-118.93,36.1,19.0,2988.0,681.0,1654.0,576.0,2.3792,90000.0,INLAND +-118.98,36.06,33.0,2043.0,443.0,1497.0,417.0,2.343,47400.0,INLAND +-119.0,36.05,24.0,3208.0,691.0,1986.0,662.0,1.5506,52300.0,INLAND +-118.97,36.06,26.0,1289.0,262.0,1100.0,244.0,1.975,51400.0,INLAND +-118.99,36.07,21.0,983.0,165.0,672.0,169.0,2.975,63900.0,INLAND +-118.99,36.06,19.0,2153.0,458.0,1317.0,386.0,1.7564,42600.0,INLAND +-119.0,36.06,41.0,937.0,158.0,396.0,142.0,4.0833,81300.0,INLAND +-119.0,36.07,20.0,1042.0,183.0,509.0,175.0,2.9815,73000.0,INLAND +-119.03,36.06,36.0,1925.0,443.0,1405.0,422.0,2.162,51900.0,INLAND +-119.02,36.06,41.0,2279.0,538.0,1908.0,511.0,1.3952,43100.0,INLAND +-119.01,36.06,25.0,1505.0,,1392.0,359.0,1.6812,47700.0,INLAND +-119.01,36.05,27.0,1127.0,294.0,839.0,276.0,1.3807,53100.0,INLAND +-119.02,36.05,22.0,2078.0,431.0,1336.0,456.0,2.2202,65200.0,INLAND +-119.42,35.97,21.0,554.0,121.0,426.0,122.0,2.3516,47500.0,INLAND +-119.31,35.99,26.0,1460.0,316.0,880.0,286.0,1.3676,47800.0,INLAND +-119.28,35.99,20.0,2911.0,597.0,1746.0,588.0,1.7372,51000.0,INLAND +-119.19,35.96,25.0,2014.0,402.0,1160.0,362.0,1.881,52500.0,INLAND +-119.46,35.86,22.0,1750.0,374.0,1113.0,338.0,1.505,42700.0,INLAND +-119.3,35.87,20.0,1934.0,377.0,1341.0,336.0,2.1434,62600.0,INLAND +-119.12,35.85,37.0,736.0,166.0,564.0,138.0,2.4167,58300.0,INLAND +-119.1,35.79,19.0,1809.0,477.0,2051.0,416.0,1.8144,49800.0,INLAND +-119.27,35.89,18.0,1855.0,424.0,1839.0,392.0,1.7572,53300.0,INLAND +-119.27,35.88,32.0,1393.0,343.0,1282.0,336.0,1.5069,43700.0,INLAND +-119.27,35.87,12.0,972.0,269.0,1134.0,286.0,1.63,49500.0,INLAND +-119.26,35.87,24.0,1590.0,390.0,1686.0,372.0,1.6469,47600.0,INLAND +-119.06,35.94,18.0,3501.0,721.0,2009.0,660.0,2.6576,65700.0,INLAND +-119.04,35.96,18.0,1187.0,308.0,1343.0,277.0,1.875,51700.0,INLAND +-119.04,35.95,25.0,1009.0,246.0,994.0,222.0,1.8462,55800.0,INLAND +-118.96,35.87,17.0,1668.0,307.0,888.0,277.0,3.7794,96200.0,INLAND +-120.4,38.0,17.0,2098.0,370.0,912.0,354.0,2.6544,112600.0,INLAND +-120.39,38.0,33.0,2177.0,404.0,891.0,383.0,3.212,105200.0,INLAND +-120.4,37.98,19.0,2010.0,433.0,910.0,390.0,2.6696,121200.0,INLAND +-120.39,37.98,52.0,1056.0,274.0,584.0,255.0,2.1513,86700.0,INLAND +-120.37,38.01,30.0,473.0,,242.0,93.0,2.5417,123200.0,INLAND +-120.35,37.99,3.0,1167.0,306.0,422.0,186.0,2.4191,217500.0,INLAND +-120.38,37.99,36.0,2864.0,603.0,1155.0,565.0,2.3571,113400.0,INLAND +-120.37,37.98,29.0,2508.0,591.0,1112.0,550.0,1.6021,91400.0,INLAND +-120.38,37.97,47.0,1060.0,219.0,496.0,205.0,2.5781,104800.0,INLAND +-120.26,38.13,17.0,301.0,94.0,122.0,47.0,4.0583,87500.0,INLAND +-120.28,38.07,13.0,1996.0,410.0,618.0,218.0,2.9083,104600.0,INLAND +-120.4,38.06,12.0,1430.0,310.0,517.0,240.0,2.6544,128100.0,INLAND +-120.35,38.04,16.0,1499.0,326.0,733.0,286.0,2.5729,118800.0,INLAND +-120.39,38.03,20.0,1551.0,309.0,647.0,228.0,2.6094,139100.0,INLAND +-120.41,38.03,14.0,2061.0,465.0,859.0,462.0,2.1289,115300.0,INLAND +-120.43,38.02,15.0,1613.0,299.0,655.0,251.0,3.6875,186000.0,INLAND +-120.31,38.02,11.0,2366.0,398.0,1046.0,387.0,3.8203,139700.0,INLAND +-120.3,38.04,6.0,1281.0,245.0,422.0,160.0,3.2875,111300.0,INLAND +-120.28,38.03,13.0,2095.0,391.0,860.0,331.0,3.6838,145700.0,INLAND +-120.27,38.02,13.0,3839.0,715.0,1486.0,532.0,3.1875,99800.0,INLAND +-120.29,38.01,12.0,3014.0,560.0,1424.0,485.0,3.0729,105100.0,INLAND +-120.3,37.99,23.0,1908.0,383.0,984.0,374.0,2.517,153500.0,INLAND +-120.33,38.0,14.0,1944.0,330.0,822.0,314.0,3.5,170700.0,INLAND +-120.25,38.04,22.0,4173.0,763.0,1086.0,444.0,2.5562,136200.0,INLAND +-120.25,38.03,21.0,4924.0,966.0,1175.0,454.0,2.9457,116500.0,INLAND +-120.22,38.05,14.0,3803.0,689.0,1129.0,477.0,2.7188,137000.0,INLAND +-120.19,38.07,43.0,102.0,19.0,44.0,13.0,0.4999,162500.0,INLAND +-120.19,38.03,17.0,8651.0,1579.0,2071.0,757.0,3.1076,115800.0,INLAND +-120.12,38.12,37.0,3355.0,666.0,338.0,136.0,2.0625,88900.0,INLAND +-120.03,38.19,26.0,7005.0,1358.0,416.0,189.0,2.125,132500.0,INLAND +-120.26,37.99,12.0,2726.0,517.0,1351.0,474.0,3.5,107100.0,INLAND +-120.24,38.01,11.0,1214.0,228.0,633.0,199.0,3.125,148600.0,INLAND +-120.23,37.98,14.0,1954.0,368.0,917.0,316.0,3.1523,93300.0,INLAND +-120.28,37.9,17.0,1047.0,212.0,530.0,196.0,2.1538,153300.0,INLAND +-120.24,37.96,34.0,1747.0,395.0,935.0,362.0,1.625,79400.0,INLAND +-120.23,37.96,52.0,1230.0,262.0,609.0,243.0,2.0057,68200.0,INLAND +-120.25,37.93,13.0,493.0,76.0,196.0,68.0,3.375,134100.0,INLAND +-120.13,37.93,5.0,111.0,26.0,58.0,25.0,1.675,112500.0,INLAND +-120.35,37.98,4.0,1658.0,301.0,676.0,278.0,3.5714,149500.0,INLAND +-120.33,37.97,17.0,2530.0,526.0,1024.0,496.0,2.0057,118900.0,INLAND +-120.3,37.97,17.0,3243.0,619.0,1408.0,566.0,2.474,120100.0,INLAND +-120.29,37.94,17.0,1459.0,297.0,753.0,271.0,3.05,144800.0,INLAND +-120.32,37.91,16.0,108.0,18.0,54.0,22.0,4.375,100000.0,INLAND +-120.35,37.86,25.0,287.0,57.0,118.0,50.0,2.3056,162500.0,INLAND +-120.23,37.86,16.0,324.0,61.0,135.0,61.0,2.4615,137500.0,INLAND +-120.2,37.84,9.0,13670.0,2453.0,2811.0,1193.0,3.2589,137900.0,INLAND +-120.2,37.8,30.0,1189.0,255.0,446.0,165.0,3.4838,112500.0,INLAND +-119.93,37.85,18.0,473.0,115.0,88.0,41.0,4.0833,137500.0,INLAND +-119.57,37.94,17.0,346.0,130.0,51.0,20.0,3.4861,137500.0,INLAND +-120.47,37.96,25.0,2505.0,529.0,1145.0,483.0,2.006,103000.0,INLAND +-120.42,37.98,18.0,3059.0,609.0,1335.0,581.0,2.5129,115900.0,INLAND +-120.42,37.95,19.0,2787.0,578.0,1208.0,532.0,2.4922,98700.0,INLAND +-120.39,37.96,10.0,2554.0,501.0,922.0,439.0,2.1094,164000.0,INLAND +-120.4,37.92,22.0,1022.0,194.0,517.0,198.0,3.625,99400.0,INLAND +-120.35,37.95,13.0,2104.0,407.0,960.0,401.0,2.4,177000.0,INLAND +-120.41,37.88,16.0,744.0,141.0,311.0,122.0,4.4231,87500.0,INLAND +-120.45,37.79,8.0,2687.0,495.0,5087.0,385.0,3.1719,115400.0,INLAND +-119.31,34.7,19.0,961.0,218.0,479.0,138.0,3.3438,156300.0,INLAND +-119.06,34.62,10.0,416.0,110.0,436.0,70.0,2.2222,262500.0,<1H OCEAN +-118.75,34.42,28.0,1000.0,206.0,545.0,154.0,2.4167,191700.0,<1H OCEAN +-118.8,34.41,45.0,1610.0,,1148.0,347.0,2.7,120400.0,<1H OCEAN +-118.88,34.42,20.0,728.0,120.0,360.0,115.0,6.1244,375000.0,<1H OCEAN +-118.98,34.4,34.0,1328.0,244.0,795.0,227.0,4.4219,338100.0,<1H OCEAN +-118.93,34.36,33.0,1775.0,309.0,1071.0,296.0,4.6607,187900.0,<1H OCEAN +-118.93,34.4,17.0,3275.0,599.0,2422.0,637.0,3.7092,190500.0,<1H OCEAN +-118.92,34.4,23.0,1290.0,283.0,1060.0,279.0,3.3152,198000.0,<1H OCEAN +-118.92,34.41,22.0,2702.0,655.0,2664.0,571.0,3.0893,173400.0,<1H OCEAN +-118.9,34.41,35.0,4431.0,739.0,2304.0,720.0,4.2599,209100.0,<1H OCEAN +-118.91,34.4,30.0,2861.0,613.0,2065.0,586.0,3.2024,176100.0,<1H OCEAN +-118.9,34.4,16.0,2614.0,575.0,1163.0,524.0,1.5781,134400.0,<1H OCEAN +-119.06,34.38,33.0,1465.0,262.0,731.0,266.0,3.9464,230300.0,<1H OCEAN +-119.06,34.37,32.0,3885.0,759.0,2504.0,736.0,3.6453,201700.0,<1H OCEAN +-119.05,34.36,22.0,1815.0,506.0,2428.0,473.0,2.8417,162500.0,<1H OCEAN +-119.05,34.4,50.0,1236.0,282.0,1079.0,257.0,2.6991,181300.0,<1H OCEAN +-119.1,34.31,21.0,2424.0,527.0,1379.0,484.0,2.6786,184000.0,<1H OCEAN +-119.04,34.34,35.0,462.0,90.0,334.0,96.0,5.3582,281300.0,<1H OCEAN +-119.06,34.36,52.0,1409.0,359.0,981.0,304.0,2.7951,199300.0,<1H OCEAN +-119.06,34.36,52.0,1239.0,320.0,934.0,298.0,1.8618,183300.0,<1H OCEAN +-119.06,34.35,34.0,2426.0,646.0,2116.0,631.0,2.0682,158300.0,<1H OCEAN +-119.05,34.35,39.0,950.0,300.0,1366.0,312.0,2.2443,146600.0,<1H OCEAN +-119.09,34.35,20.0,4725.0,881.0,2823.0,869.0,4.0122,214800.0,<1H OCEAN +-119.08,34.35,24.0,3663.0,828.0,2718.0,778.0,3.2757,186000.0,<1H OCEAN +-119.08,34.34,23.0,3065.0,723.0,2042.0,698.0,2.7593,194800.0,<1H OCEAN +-119.11,34.33,14.0,4026.0,769.0,1825.0,671.0,3.5541,191800.0,<1H OCEAN +-119.12,34.38,28.0,7200.0,1281.0,3793.0,1238.0,4.075,237900.0,<1H OCEAN +-119.06,34.36,48.0,1459.0,324.0,902.0,350.0,2.4185,189900.0,<1H OCEAN +-119.23,34.44,34.0,3193.0,664.0,1434.0,627.0,2.4777,260300.0,<1H OCEAN +-119.26,34.46,30.0,3826.0,691.0,1656.0,657.0,4.0074,434700.0,<1H OCEAN +-119.23,34.46,34.0,9280.0,1765.0,4514.0,1693.0,3.2026,227600.0,<1H OCEAN +-119.19,34.46,39.0,2056.0,381.0,939.0,371.0,6.6257,427600.0,<1H OCEAN +-119.23,34.42,16.0,630.0,117.0,343.0,100.0,5.75,325000.0,<1H OCEAN +-119.27,34.45,15.0,1659.0,274.0,679.0,253.0,5.0,357900.0,<1H OCEAN +-119.15,34.44,33.0,2005.0,392.0,1043.0,351.0,5.308,297900.0,<1H OCEAN +-119.14,34.49,17.0,321.0,44.0,92.0,39.0,7.75,375000.0,<1H OCEAN +-119.31,34.41,22.0,2612.0,494.0,1361.0,439.0,4.1319,245000.0,NEAR OCEAN +-119.31,34.38,23.0,282.0,69.0,130.0,57.0,2.4375,225000.0,NEAR OCEAN +-119.29,34.37,41.0,1408.0,311.0,793.0,264.0,2.5441,161200.0,NEAR OCEAN +-119.34,34.39,27.0,669.0,131.0,314.0,106.0,2.4659,231300.0,NEAR OCEAN +-119.31,34.44,5.0,403.0,48.0,208.0,54.0,12.632,500001.0,NEAR OCEAN +-119.28,34.45,36.0,2376.0,541.0,1505.0,547.0,2.4595,197600.0,<1H OCEAN +-119.29,34.45,26.0,2849.0,535.0,1383.0,532.0,2.6893,230800.0,<1H OCEAN +-119.29,34.44,34.0,4314.0,878.0,2361.0,831.0,3.2279,243100.0,NEAR OCEAN +-119.27,34.44,22.0,3527.0,711.0,1483.0,640.0,2.7019,234700.0,<1H OCEAN +-119.28,34.42,23.0,4763.0,828.0,2198.0,771.0,4.8105,313000.0,NEAR OCEAN +-119.3,34.42,18.0,5591.0,1042.0,2860.0,1026.0,3.5822,219900.0,NEAR OCEAN +-119.29,34.4,22.0,3891.0,657.0,1727.0,581.0,4.2656,241400.0,NEAR OCEAN +-119.3,34.39,35.0,3079.0,579.0,1807.0,589.0,4.69,199300.0,NEAR OCEAN +-119.17,34.29,28.0,731.0,155.0,285.0,162.0,3.2917,225000.0,NEAR OCEAN +-119.17,34.29,18.0,3932.0,724.0,1896.0,680.0,5.2953,279400.0,NEAR OCEAN +-119.17,34.31,21.0,259.0,38.0,142.0,45.0,5.2681,500001.0,NEAR OCEAN +-119.15,34.3,21.0,2475.0,502.0,1269.0,505.0,2.98,259200.0,NEAR OCEAN +-119.19,34.28,28.0,3231.0,524.0,1665.0,540.0,4.8583,224200.0,NEAR OCEAN +-119.18,34.28,17.0,4526.0,717.0,2088.0,655.0,5.6885,268200.0,NEAR OCEAN +-119.19,34.3,25.0,2197.0,320.0,934.0,330.0,6.311,283200.0,NEAR OCEAN +-119.22,34.34,29.0,3128.0,672.0,1815.0,648.0,2.9821,175700.0,NEAR OCEAN +-119.39,34.32,19.0,3238.0,629.0,1195.0,443.0,4.8472,500001.0,NEAR OCEAN +-119.32,34.35,16.0,52.0,16.0,51.0,15.0,2.475,225000.0,NEAR OCEAN +-119.14,34.29,17.0,2754.0,577.0,1349.0,533.0,3.1618,154200.0,<1H OCEAN +-119.16,34.28,30.0,413.0,98.0,400.0,112.0,4.0,219200.0,NEAR OCEAN +-119.16,34.28,11.0,5330.0,1056.0,2801.0,1028.0,4.763,232700.0,NEAR OCEAN +-119.16,34.27,24.0,1824.0,331.0,1049.0,320.0,5.9181,221100.0,NEAR OCEAN +-119.14,34.28,31.0,790.0,241.0,1095.0,222.0,2.25,75000.0,NEAR OCEAN +-119.18,34.27,6.0,2307.0,386.0,910.0,364.0,5.215,279500.0,NEAR OCEAN +-119.17,34.27,24.0,4165.0,646.0,2194.0,658.0,6.0661,234800.0,NEAR OCEAN +-119.17,34.27,18.0,8010.0,1539.0,3982.0,1483.0,4.0905,236500.0,NEAR OCEAN +-119.17,34.26,10.0,3654.0,541.0,1638.0,551.0,6.1885,267300.0,NEAR OCEAN +-119.22,34.27,11.0,4695.0,955.0,2065.0,982.0,3.2158,223600.0,NEAR OCEAN +-119.21,34.26,31.0,224.0,88.0,326.0,88.0,2.375,55000.0,NEAR OCEAN +-119.21,34.26,10.0,3150.0,781.0,1582.0,653.0,4.2448,157300.0,NEAR OCEAN +-119.22,34.26,16.0,2596.0,625.0,1403.0,562.0,3.4018,145200.0,NEAR OCEAN +-119.2,34.27,8.0,4942.0,1173.0,3012.0,1033.0,3.445,203400.0,NEAR OCEAN +-119.21,34.26,23.0,2887.0,540.0,1508.0,518.0,3.3452,217600.0,NEAR OCEAN +-119.2,34.26,13.0,3009.0,588.0,1439.0,607.0,4.1845,199500.0,NEAR OCEAN +-119.19,34.26,16.0,5018.0,853.0,2524.0,830.0,5.1752,218000.0,NEAR OCEAN +-119.18,34.26,22.0,2334.0,359.0,1298.0,363.0,5.5275,228900.0,NEAR OCEAN +-119.19,34.25,12.0,232.0,37.0,79.0,35.0,4.1667,214600.0,NEAR OCEAN +-119.21,34.26,26.0,2406.0,411.0,1313.0,391.0,4.9079,234100.0,NEAR OCEAN +-119.2,34.26,25.0,2203.0,367.0,1194.0,377.0,5.4087,223200.0,NEAR OCEAN +-119.2,34.25,18.0,3208.0,643.0,1973.0,614.0,3.8162,235000.0,NEAR OCEAN +-119.2,34.25,25.0,195.0,59.0,140.0,43.0,3.8889,187500.0,NEAR OCEAN +-119.2,34.28,22.0,2362.0,601.0,1127.0,499.0,3.4006,219400.0,NEAR OCEAN +-119.22,34.27,30.0,1937.0,295.0,695.0,313.0,5.0679,234300.0,NEAR OCEAN +-119.23,34.27,22.0,3536.0,615.0,1650.0,612.0,4.2381,229300.0,NEAR OCEAN +-119.21,34.31,22.0,7548.0,1038.0,2855.0,1008.0,6.729,409300.0,NEAR OCEAN +-119.21,34.28,27.0,2219.0,312.0,937.0,315.0,5.7601,281100.0,NEAR OCEAN +-119.23,34.3,18.0,1713.0,244.0,690.0,239.0,6.9483,404300.0,NEAR OCEAN +-119.23,34.28,24.0,4260.0,691.0,1581.0,607.0,5.5048,303600.0,NEAR OCEAN +-119.22,34.28,24.0,2212.0,332.0,899.0,331.0,5.533,299700.0,NEAR OCEAN +-119.22,34.28,33.0,2467.0,377.0,1052.0,363.0,4.7333,257500.0,NEAR OCEAN +-119.25,34.28,36.0,1530.0,341.0,703.0,317.0,3.5819,231900.0,NEAR OCEAN +-119.26,34.28,41.0,2822.0,564.0,1288.0,541.0,3.0799,254100.0,NEAR OCEAN +-119.25,34.3,34.0,1189.0,220.0,445.0,203.0,4.8824,396400.0,NEAR OCEAN +-119.25,34.28,36.0,2232.0,373.0,951.0,368.0,5.2261,303200.0,NEAR OCEAN +-119.24,34.28,41.0,1280.0,240.0,608.0,252.0,4.4038,229100.0,NEAR OCEAN +-119.26,34.28,41.0,1835.0,311.0,683.0,308.0,4.8977,358200.0,NEAR OCEAN +-119.27,34.28,52.0,2239.0,420.0,941.0,397.0,4.125,349000.0,NEAR OCEAN +-119.27,34.29,32.0,2274.0,406.0,982.0,393.0,5.3254,385200.0,NEAR OCEAN +-119.29,34.29,33.0,3854.0,982.0,1835.0,894.0,3.5294,323900.0,NEAR OCEAN +-119.29,34.3,24.0,7637.0,1705.0,4647.0,1623.0,3.5385,186800.0,NEAR OCEAN +-119.3,34.29,41.0,1445.0,410.0,1052.0,388.0,2.6333,170800.0,NEAR OCEAN +-119.3,34.29,50.0,3128.0,825.0,2535.0,783.0,2.3669,165300.0,NEAR OCEAN +-119.3,34.29,26.0,3665.0,932.0,2775.0,870.0,1.9286,160500.0,NEAR OCEAN +-119.29,34.31,25.0,1092.0,190.0,702.0,215.0,3.9063,192700.0,NEAR OCEAN +-119.29,34.28,38.0,2387.0,748.0,1537.0,741.0,2.3147,192500.0,NEAR OCEAN +-119.3,34.27,17.0,1527.0,503.0,688.0,423.0,1.6007,187500.0,NEAR OCEAN +-119.29,34.26,32.0,3295.0,764.0,1344.0,600.0,3.6007,395500.0,NEAR OCEAN +-119.27,34.26,23.0,3578.0,753.0,1455.0,649.0,4.1898,359100.0,NEAR OCEAN +-119.29,34.23,22.0,2486.0,608.0,709.0,523.0,2.9018,275000.0,NEAR OCEAN +-119.29,34.24,27.0,4742.0,775.0,1682.0,696.0,6.194,500001.0,NEAR OCEAN +-119.27,34.27,44.0,1312.0,279.0,668.0,278.0,4.09,203800.0,NEAR OCEAN +-119.27,34.28,50.0,1710.0,412.0,915.0,380.0,3.1757,206300.0,NEAR OCEAN +-119.27,34.27,52.0,459.0,112.0,276.0,107.0,2.375,198400.0,NEAR OCEAN +-119.27,34.27,52.0,1577.0,343.0,836.0,335.0,3.5893,206600.0,NEAR OCEAN +-119.28,34.27,43.0,403.0,77.0,156.0,85.0,4.6667,384600.0,NEAR OCEAN +-119.28,34.27,44.0,706.0,176.0,399.0,149.0,3.0089,166700.0,NEAR OCEAN +-119.25,34.27,46.0,679.0,159.0,382.0,143.0,3.5,221200.0,NEAR OCEAN +-119.24,34.27,32.0,4071.0,888.0,1900.0,874.0,3.2792,220500.0,NEAR OCEAN +-119.23,34.27,29.0,3298.0,804.0,1509.0,711.0,3.8125,244500.0,NEAR OCEAN +-119.25,34.26,30.0,2948.0,827.0,1635.0,750.0,2.67,214900.0,NEAR OCEAN +-119.25,34.27,35.0,2532.0,407.0,1338.0,422.0,4.7727,219000.0,NEAR OCEAN +-119.26,34.27,36.0,1972.0,382.0,1029.0,411.0,3.7337,209000.0,NEAR OCEAN +-119.26,34.27,40.0,2528.0,572.0,1318.0,549.0,3.6413,212700.0,NEAR OCEAN +-119.26,34.27,42.0,918.0,204.0,394.0,204.0,4.0069,214300.0,NEAR OCEAN +-119.23,34.25,28.0,26.0,3.0,29.0,9.0,8.0,275000.0,NEAR OCEAN +-119.25,34.21,12.0,15201.0,2418.0,7132.0,2251.0,5.6756,301800.0,NEAR OCEAN +-119.18,34.24,17.0,629.0,221.0,514.0,186.0,3.2847,112500.0,NEAR OCEAN +-119.18,34.23,16.0,4609.0,1220.0,2147.0,1007.0,3.375,218800.0,NEAR OCEAN +-119.19,34.22,26.0,3175.0,736.0,2460.0,775.0,3.125,219900.0,NEAR OCEAN +-119.19,34.23,17.0,3889.0,748.0,2415.0,739.0,4.5,234300.0,NEAR OCEAN +-119.18,34.22,15.0,4615.0,1008.0,2549.0,973.0,3.9063,198700.0,NEAR OCEAN +-119.17,34.22,29.0,4188.0,816.0,2783.0,790.0,4.1949,197100.0,NEAR OCEAN +-119.17,34.21,33.0,1039.0,256.0,1432.0,272.0,3.1103,143500.0,NEAR OCEAN +-119.16,34.2,35.0,2183.0,636.0,3504.0,623.0,1.9704,160300.0,NEAR OCEAN +-119.17,34.2,36.0,2028.0,523.0,2751.0,496.0,3.015,149300.0,NEAR OCEAN +-119.17,34.2,40.0,1083.0,319.0,1843.0,349.0,2.3077,106900.0,NEAR OCEAN +-119.18,34.21,30.0,1096.0,231.0,741.0,229.0,3.8625,234700.0,NEAR OCEAN +-119.18,34.21,29.0,4039.0,680.0,1677.0,644.0,4.3897,257600.0,NEAR OCEAN +-119.19,34.21,28.0,4194.0,811.0,2556.0,856.0,4.2227,235400.0,NEAR OCEAN +-119.19,34.21,27.0,1887.0,487.0,1339.0,428.0,2.9185,224500.0,NEAR OCEAN +-119.19,34.2,36.0,1293.0,312.0,1128.0,335.0,2.1542,253900.0,NEAR OCEAN +-119.19,34.21,34.0,3413.0,693.0,2223.0,651.0,3.8239,208200.0,NEAR OCEAN +-119.18,34.21,46.0,2062.0,484.0,1522.0,469.0,3.087,213900.0,NEAR OCEAN +-119.19,34.2,18.0,3620.0,,3171.0,779.0,3.3409,220500.0,NEAR OCEAN +-119.18,34.19,19.0,2393.0,,1938.0,762.0,1.6953,167400.0,NEAR OCEAN +-119.18,34.2,21.0,494.0,127.0,489.0,106.0,2.6964,170800.0,NEAR OCEAN +-119.18,34.19,5.0,384.0,131.0,410.0,149.0,1.5625,87500.0,NEAR OCEAN +-119.27,34.17,15.0,11403.0,2131.0,3327.0,1585.0,4.3693,423300.0,NEAR OCEAN +-119.23,34.19,16.0,5297.0,810.0,1489.0,667.0,6.4522,500001.0,NEAR OCEAN +-119.23,34.17,18.0,6171.0,1490.0,2164.0,1210.0,3.6875,500001.0,NEAR OCEAN +-119.23,34.15,18.0,6213.0,1188.0,2679.0,1000.0,3.748,380400.0,NEAR OCEAN +-119.21,34.19,15.0,3797.0,692.0,2216.0,675.0,4.7443,229500.0,NEAR OCEAN +-119.21,34.19,15.0,5614.0,989.0,2754.0,994.0,5.035,242900.0,NEAR OCEAN +-119.22,34.18,17.0,3332.0,762.0,1797.0,673.0,4.4292,231200.0,NEAR OCEAN +-119.2,34.19,19.0,9503.0,1769.0,6370.0,1718.0,5.0016,218500.0,NEAR OCEAN +-119.2,34.18,27.0,1035.0,229.0,782.0,222.0,4.2212,185400.0,NEAR OCEAN +-119.19,34.19,35.0,2599.0,552.0,2726.0,543.0,3.2212,180500.0,NEAR OCEAN +-119.19,34.18,32.0,3366.0,677.0,2857.0,669.0,4.6186,181100.0,NEAR OCEAN +-119.18,34.19,36.0,4519.0,1081.0,4818.0,1061.0,2.8561,179100.0,NEAR OCEAN +-119.18,34.18,31.0,2636.0,638.0,2695.0,614.0,3.2196,175800.0,NEAR OCEAN +-119.17,34.18,38.0,3221.0,783.0,2792.0,736.0,2.9118,172400.0,NEAR OCEAN +-119.17,34.17,34.0,2749.0,539.0,2330.0,559.0,4.2137,185600.0,NEAR OCEAN +-119.17,34.17,32.0,1567.0,304.0,1482.0,308.0,3.5867,182100.0,NEAR OCEAN +-119.17,34.17,42.0,1411.0,300.0,1295.0,339.0,2.6667,164900.0,NEAR OCEAN +-119.17,34.17,25.0,1596.0,321.0,1378.0,308.0,4.0074,188000.0,NEAR OCEAN +-119.17,34.17,21.0,2361.0,464.0,1146.0,396.0,3.6597,195100.0,NEAR OCEAN +-119.19,34.17,31.0,1872.0,434.0,1511.0,405.0,3.2314,186800.0,NEAR OCEAN +-119.19,34.17,35.0,4276.0,767.0,3295.0,708.0,4.2583,187300.0,NEAR OCEAN +-119.18,34.17,32.0,2388.0,467.0,1746.0,483.0,3.9331,187600.0,NEAR OCEAN +-119.18,34.16,30.0,2053.0,368.0,1496.0,391.0,3.6546,186200.0,NEAR OCEAN +-119.19,34.17,27.0,2183.0,364.0,1458.0,388.0,4.4567,191100.0,NEAR OCEAN +-119.19,34.16,34.0,2610.0,466.0,1543.0,433.0,3.9722,189000.0,NEAR OCEAN +-119.19,34.16,35.0,2733.0,510.0,1814.0,511.0,4.4187,183400.0,NEAR OCEAN +-119.22,34.15,32.0,3152.0,596.0,3490.0,526.0,2.725,450000.0,NEAR OCEAN +-119.2,34.18,22.0,6465.0,1397.0,2694.0,1370.0,2.9832,165600.0,NEAR OCEAN +-119.21,34.18,13.0,6103.0,1319.0,2986.0,1212.0,3.9718,215200.0,NEAR OCEAN +-119.19,34.15,31.0,4175.0,1004.0,3310.0,954.0,3.1989,185400.0,NEAR OCEAN +-119.2,34.15,27.0,2076.0,681.0,1904.0,647.0,1.4773,160800.0,NEAR OCEAN +-119.21,34.12,15.0,5778.0,1285.0,1722.0,829.0,4.3427,305800.0,NEAR OCEAN +-119.18,34.16,12.0,460.0,101.0,405.0,103.0,5.2783,167400.0,NEAR OCEAN +-119.18,34.16,27.0,1832.0,415.0,1480.0,414.0,3.9643,186000.0,NEAR OCEAN +-119.18,34.15,22.0,4769.0,1366.0,5534.0,1318.0,2.4167,192000.0,NEAR OCEAN +-119.17,34.16,17.0,5276.0,1020.0,4066.0,984.0,4.5828,205400.0,NEAR OCEAN +-119.17,34.15,18.0,2509.0,688.0,3129.0,677.0,2.6098,146100.0,NEAR OCEAN +-119.13,34.19,16.0,6389.0,1330.0,6242.0,1340.0,4.0222,206800.0,NEAR OCEAN +-119.15,34.17,22.0,1612.0,334.0,1431.0,335.0,4.8125,194400.0,NEAR OCEAN +-119.14,34.17,16.0,1593.0,353.0,836.0,357.0,2.726,67500.0,NEAR OCEAN +-119.11,34.17,37.0,470.0,105.0,522.0,83.0,2.0368,243800.0,NEAR OCEAN +-119.17,34.19,28.0,1444.0,508.0,2145.0,437.0,1.6964,175000.0,NEAR OCEAN +-119.14,34.15,25.0,2202.0,390.0,1415.0,412.0,4.43,207700.0,NEAR OCEAN +-119.16,34.15,23.0,3204.0,644.0,2295.0,614.0,3.9485,196600.0,NEAR OCEAN +-119.16,34.12,17.0,224.0,70.0,147.0,71.0,3.6167,280000.0,NEAR OCEAN +-119.16,34.17,17.0,7982.0,1603.0,6437.0,1596.0,4.1279,223900.0,NEAR OCEAN +-119.15,34.17,23.0,2239.0,537.0,784.0,497.0,1.6038,194300.0,NEAR OCEAN +-119.15,34.2,25.0,3445.0,898.0,5558.0,894.0,3.0972,169300.0,NEAR OCEAN +-119.17,34.25,15.0,1329.0,282.0,1001.0,284.0,3.65,189300.0,NEAR OCEAN +-119.15,34.25,36.0,3511.0,664.0,2965.0,695.0,4.0878,186800.0,NEAR OCEAN +-119.16,34.23,26.0,5444.0,1293.0,3700.0,1158.0,2.7556,213200.0,NEAR OCEAN +-119.14,34.23,8.0,243.0,75.0,102.0,80.0,2.5714,500001.0,NEAR OCEAN +-119.12,34.23,35.0,2028.0,554.0,2252.0,521.0,2.4643,182000.0,NEAR OCEAN +-119.12,34.25,31.0,737.0,146.0,1436.0,168.0,3.5625,194100.0,NEAR OCEAN +-119.04,34.28,21.0,1856.0,276.0,863.0,255.0,4.5833,500001.0,<1H OCEAN +-118.96,34.3,16.0,3103.0,482.0,1567.0,467.0,6.907,500001.0,<1H OCEAN +-119.06,34.24,21.0,7436.0,984.0,2982.0,988.0,7.6775,391200.0,<1H OCEAN +-119.09,34.24,17.0,10214.0,1589.0,3409.0,1327.0,5.3806,452100.0,<1H OCEAN +-119.02,34.26,40.0,1498.0,292.0,707.0,249.0,3.7974,228700.0,<1H OCEAN +-119.03,34.25,25.0,3344.0,502.0,1483.0,496.0,6.196,340600.0,<1H OCEAN +-119.04,34.24,20.0,7794.0,1192.0,4169.0,1188.0,5.9316,311900.0,<1H OCEAN +-119.05,34.24,24.0,4341.0,646.0,1929.0,703.0,5.4298,279600.0,<1H OCEAN +-118.99,34.23,9.0,10618.0,1617.0,4830.0,1606.0,6.6246,284200.0,<1H OCEAN +-119.01,34.23,11.0,5785.0,1035.0,2760.0,985.0,4.693,232200.0,<1H OCEAN +-118.94,34.24,5.0,10018.0,1233.0,4253.0,1120.0,8.9063,500001.0,<1H OCEAN +-118.96,34.23,14.0,15207.0,2924.0,6301.0,2829.0,3.9699,217000.0,<1H OCEAN +-119.03,34.24,25.0,3655.0,545.0,1776.0,544.0,5.687,238100.0,<1H OCEAN +-119.03,34.23,16.0,5323.0,795.0,2493.0,779.0,5.6762,271300.0,<1H OCEAN +-119.02,34.24,24.0,4650.0,748.0,2374.0,702.0,5.8838,232600.0,<1H OCEAN +-119.03,34.23,21.0,3284.0,487.0,1832.0,521.0,5.2773,250800.0,<1H OCEAN +-119.03,34.22,24.0,3421.0,656.0,2220.0,645.0,4.7831,214200.0,<1H OCEAN +-119.04,34.23,21.0,9807.0,1614.0,4199.0,1554.0,5.0145,246600.0,<1H OCEAN +-119.06,34.23,23.0,3471.0,510.0,2002.0,555.0,5.2742,257500.0,<1H OCEAN +-119.06,34.23,29.0,3511.0,632.0,2591.0,596.0,3.0219,221700.0,<1H OCEAN +-119.04,34.22,18.0,3117.0,583.0,2079.0,545.0,4.6458,222800.0,<1H OCEAN +-119.06,34.22,13.0,4175.0,1321.0,2257.0,1271.0,3.1446,177100.0,<1H OCEAN +-119.0,34.19,5.0,3634.0,718.0,1317.0,743.0,4.2917,227900.0,<1H OCEAN +-119.05,34.19,39.0,143.0,36.0,113.0,33.0,2.8942,275000.0,NEAR OCEAN +-119.08,34.17,32.0,166.0,22.0,63.0,29.0,7.3004,125000.0,NEAR OCEAN +-119.03,34.21,11.0,4528.0,729.0,2398.0,684.0,5.3044,319000.0,<1H OCEAN +-119.05,34.21,27.0,4357.0,926.0,2110.0,876.0,3.0119,218200.0,<1H OCEAN +-119.09,34.22,8.0,40.0,10.0,309.0,16.0,4.0208,52500.0,NEAR OCEAN +-119.05,34.13,12.0,57.0,22.0,69.0,15.0,5.0066,275000.0,NEAR OCEAN +-118.97,34.18,18.0,7338.0,1020.0,3419.0,1058.0,7.0242,293100.0,<1H OCEAN +-118.96,34.19,16.0,1807.0,346.0,587.0,296.0,1.9811,162500.0,<1H OCEAN +-118.96,34.18,16.0,3137.0,462.0,1384.0,436.0,6.1306,258200.0,<1H OCEAN +-118.98,34.16,16.0,2476.0,402.0,1251.0,387.0,5.7676,241300.0,<1H OCEAN +-118.95,34.18,25.0,2237.0,331.0,1121.0,365.0,6.0994,254900.0,<1H OCEAN +-118.95,34.17,9.0,2372.0,312.0,1039.0,321.0,7.6016,344900.0,<1H OCEAN +-118.94,34.17,16.0,3746.0,508.0,1556.0,452.0,6.3303,299400.0,<1H OCEAN +-118.94,34.17,15.0,1679.0,271.0,928.0,264.0,5.5681,235600.0,<1H OCEAN +-118.95,34.17,23.0,2630.0,404.0,1184.0,385.0,5.2955,247600.0,<1H OCEAN +-118.95,34.16,21.0,2953.0,419.0,1397.0,410.0,6.541,291500.0,<1H OCEAN +-118.93,34.18,18.0,2730.0,415.0,1248.0,412.0,6.187,287900.0,<1H OCEAN +-118.92,34.18,17.0,2400.0,352.0,1067.0,323.0,6.3522,259300.0,<1H OCEAN +-118.92,34.17,17.0,1552.0,246.0,685.0,244.0,5.9836,294800.0,<1H OCEAN +-118.94,34.16,3.0,1170.0,148.0,493.0,142.0,8.0428,500001.0,<1H OCEAN +-118.91,34.18,17.0,3220.0,716.0,1381.0,733.0,2.8958,176000.0,<1H OCEAN +-118.9,34.18,20.0,1288.0,179.0,539.0,181.0,5.8652,302600.0,<1H OCEAN +-118.9,34.18,14.0,2627.0,328.0,1121.0,328.0,7.0504,333800.0,<1H OCEAN +-118.9,34.17,14.0,4719.0,734.0,1880.0,731.0,5.3558,313800.0,<1H OCEAN +-118.88,34.17,15.0,4260.0,,1701.0,669.0,5.1033,410700.0,<1H OCEAN +-118.85,34.17,42.0,564.0,96.0,220.0,81.0,4.5625,318800.0,<1H OCEAN +-118.84,34.16,18.0,6075.0,1056.0,2571.0,1018.0,5.22,399400.0,<1H OCEAN +-118.84,34.15,17.0,3785.0,494.0,1527.0,507.0,8.4443,358500.0,<1H OCEAN +-118.86,34.16,16.0,1509.0,216.0,578.0,235.0,10.2614,410800.0,<1H OCEAN +-118.85,34.14,24.0,1999.0,244.0,759.0,247.0,8.7657,366300.0,<1H OCEAN +-118.82,34.15,9.0,655.0,110.0,222.0,109.0,7.8528,337500.0,NEAR OCEAN +-118.83,34.15,16.0,3380.0,731.0,1227.0,641.0,4.2857,233200.0,NEAR OCEAN +-118.83,34.14,16.0,1316.0,194.0,450.0,173.0,10.1597,500001.0,NEAR OCEAN +-118.83,34.14,16.0,1956.0,312.0,671.0,319.0,6.4001,321800.0,NEAR OCEAN +-118.85,34.14,16.0,4109.0,543.0,1409.0,560.0,8.1064,423400.0,<1H OCEAN +-118.95,34.19,24.0,2719.0,434.0,1318.0,424.0,4.675,228800.0,<1H OCEAN +-118.94,34.18,24.0,3689.0,585.0,1898.0,581.0,5.9224,239400.0,<1H OCEAN +-118.94,34.18,25.0,3502.0,508.0,1713.0,508.0,5.5181,242100.0,<1H OCEAN +-118.93,34.2,17.0,2619.0,606.0,1655.0,557.0,3.886,281300.0,<1H OCEAN +-118.92,34.19,16.0,3631.0,974.0,2585.0,923.0,3.0691,130400.0,<1H OCEAN +-118.9,34.2,16.0,6510.0,817.0,2304.0,778.0,7.9943,452100.0,<1H OCEAN +-118.9,34.19,26.0,1582.0,196.0,573.0,182.0,10.0595,500001.0,<1H OCEAN +-118.91,34.22,15.0,5644.0,757.0,2659.0,783.0,6.7559,312000.0,<1H OCEAN +-118.89,34.22,20.0,3878.0,665.0,1651.0,591.0,5.5402,264600.0,<1H OCEAN +-118.87,34.23,14.0,4242.0,746.0,1858.0,689.0,6.0145,287100.0,<1H OCEAN +-118.88,34.22,16.0,2343.0,393.0,2007.0,383.0,5.756,302700.0,<1H OCEAN +-118.87,34.22,14.0,3108.0,451.0,1566.0,434.0,6.2423,305400.0,<1H OCEAN +-118.85,34.25,17.0,5593.0,732.0,1992.0,660.0,7.2965,342900.0,<1H OCEAN +-118.85,34.23,13.0,5094.0,764.0,2230.0,737.0,6.4823,290900.0,<1H OCEAN +-118.86,34.22,26.0,1932.0,280.0,886.0,289.0,5.0855,232200.0,<1H OCEAN +-118.86,34.22,26.0,1775.0,295.0,1004.0,323.0,5.5845,251700.0,<1H OCEAN +-118.86,34.22,22.0,1230.0,200.0,673.0,195.0,6.2708,251400.0,<1H OCEAN +-118.85,34.21,25.0,1328.0,209.0,691.0,228.0,4.9234,241400.0,<1H OCEAN +-118.85,34.21,29.0,2195.0,414.0,1360.0,401.0,3.4773,206700.0,<1H OCEAN +-118.86,34.21,26.0,3354.0,659.0,2020.0,648.0,4.1576,211800.0,<1H OCEAN +-118.88,34.22,22.0,3654.0,517.0,1565.0,518.0,6.2748,274800.0,<1H OCEAN +-118.87,34.21,26.0,4439.0,616.0,1881.0,592.0,6.2935,258000.0,<1H OCEAN +-118.88,34.21,26.0,1590.0,196.0,654.0,199.0,6.5851,300000.0,<1H OCEAN +-118.87,34.2,26.0,1924.0,245.0,775.0,244.0,7.001,286800.0,<1H OCEAN +-118.88,34.2,23.0,4862.0,597.0,1938.0,594.0,7.3409,316000.0,<1H OCEAN +-118.88,34.19,26.0,2296.0,275.0,842.0,263.0,7.7889,309900.0,<1H OCEAN +-118.86,34.2,32.0,2399.0,384.0,1199.0,390.0,4.125,264600.0,<1H OCEAN +-118.86,34.19,26.0,3135.0,480.0,1474.0,458.0,6.1949,243500.0,<1H OCEAN +-118.87,34.19,23.0,2179.0,423.0,1338.0,406.0,5.5224,240700.0,<1H OCEAN +-118.88,34.19,16.0,7268.0,1729.0,3232.0,1653.0,3.3703,228700.0,<1H OCEAN +-118.87,34.18,21.0,5661.0,1369.0,3188.0,1308.0,3.4676,212800.0,<1H OCEAN +-118.85,34.18,11.0,5873.0,1455.0,3089.0,1365.0,3.5504,173800.0,<1H OCEAN +-118.84,34.17,16.0,3449.0,820.0,1877.0,816.0,3.2176,187500.0,<1H OCEAN +-118.85,34.2,28.0,2040.0,297.0,848.0,280.0,6.7612,323700.0,<1H OCEAN +-118.86,34.19,29.0,1326.0,185.0,586.0,187.0,6.5474,422900.0,<1H OCEAN +-118.86,34.19,27.0,1931.0,261.0,736.0,244.0,6.7805,392900.0,<1H OCEAN +-118.85,34.19,27.0,2287.0,320.0,967.0,321.0,6.5162,349400.0,<1H OCEAN +-118.83,34.18,23.0,5647.0,786.0,2050.0,738.0,6.3586,348300.0,<1H OCEAN +-118.83,34.17,17.0,4668.0,628.0,1917.0,624.0,8.1397,353900.0,<1H OCEAN +-118.9,34.14,35.0,1503.0,263.0,576.0,216.0,5.1457,500001.0,<1H OCEAN +-119.0,34.08,17.0,1822.0,438.0,578.0,291.0,5.4346,428600.0,NEAR OCEAN +-118.75,34.18,4.0,16704.0,2704.0,6187.0,2207.0,6.6122,357600.0,NEAR OCEAN +-118.75,34.17,18.0,6217.0,858.0,2703.0,834.0,6.8075,325900.0,NEAR OCEAN +-118.69,34.18,11.0,1177.0,138.0,415.0,119.0,10.0472,500001.0,<1H OCEAN +-118.8,34.19,4.0,15572.0,2222.0,5495.0,2152.0,8.6499,500001.0,<1H OCEAN +-118.83,34.23,6.0,8803.0,1114.0,3385.0,1010.0,8.7288,425800.0,<1H OCEAN +-118.84,34.22,11.0,3170.0,420.0,1418.0,432.0,7.5118,361900.0,<1H OCEAN +-118.84,34.21,16.0,4975.0,949.0,2537.0,971.0,5.2361,224700.0,<1H OCEAN +-118.8,34.21,16.0,1466.0,196.0,661.0,209.0,6.2893,282700.0,<1H OCEAN +-118.74,34.25,25.0,1815.0,281.0,960.0,284.0,5.4243,214700.0,<1H OCEAN +-118.74,34.26,22.0,4337.0,673.0,2347.0,636.0,5.4091,222400.0,<1H OCEAN +-118.7,34.24,28.0,2405.0,462.0,1011.0,378.0,4.504,204300.0,<1H OCEAN +-118.64,34.25,47.0,1315.0,290.0,581.0,268.0,5.4024,253000.0,<1H OCEAN +-118.69,34.21,10.0,3663.0,409.0,1179.0,371.0,12.542,500001.0,<1H OCEAN +-118.81,34.25,4.0,9147.0,1827.0,3950.0,1661.0,5.716,320800.0,<1H OCEAN +-118.79,34.26,17.0,1986.0,249.0,761.0,241.0,7.2137,401900.0,<1H OCEAN +-118.8,34.27,12.0,3330.0,600.0,1577.0,584.0,4.6985,264100.0,<1H OCEAN +-118.77,34.24,6.0,16222.0,2309.0,6700.0,2080.0,6.4963,308100.0,<1H OCEAN +-118.78,34.26,24.0,4072.0,582.0,1834.0,565.0,6.0487,254500.0,<1H OCEAN +-118.78,34.25,13.0,1841.0,237.0,833.0,231.0,7.7785,404700.0,<1H OCEAN +-118.85,34.27,50.0,187.0,33.0,130.0,35.0,3.3438,500001.0,<1H OCEAN +-118.9,34.3,13.0,5591.0,1013.0,3188.0,971.0,5.5925,208600.0,<1H OCEAN +-118.83,34.33,6.0,6679.0,1164.0,3196.0,1157.0,5.4493,242600.0,<1H OCEAN +-118.89,34.29,28.0,1545.0,371.0,1334.0,318.0,3.4375,194100.0,<1H OCEAN +-118.89,34.33,23.0,366.0,62.0,265.0,66.0,3.125,375000.0,<1H OCEAN +-118.89,34.28,30.0,917.0,157.0,678.0,171.0,5.8133,195700.0,<1H OCEAN +-118.88,34.28,22.0,3369.0,771.0,2751.0,710.0,4.0474,182100.0,<1H OCEAN +-118.91,34.28,6.0,6106.0,1134.0,3246.0,1062.0,5.2206,280200.0,<1H OCEAN +-118.9,34.26,5.0,25187.0,3521.0,11956.0,3478.0,6.9712,321300.0,<1H OCEAN +-118.81,34.28,20.0,3678.0,684.0,1882.0,694.0,4.1607,196800.0,<1H OCEAN +-118.78,34.27,20.0,2743.0,685.0,1798.0,613.0,3.6761,170900.0,<1H OCEAN +-118.79,34.27,27.0,1146.0,189.0,595.0,197.0,4.5833,198500.0,<1H OCEAN +-118.77,34.27,7.0,3074.0,794.0,1816.0,654.0,2.7137,196400.0,<1H OCEAN +-118.77,34.27,10.0,1658.0,310.0,1053.0,333.0,4.7574,209900.0,<1H OCEAN +-118.77,34.28,6.0,4685.0,965.0,2180.0,909.0,4.5458,208200.0,<1H OCEAN +-118.77,34.28,27.0,1416.0,251.0,1024.0,268.0,5.1074,185200.0,<1H OCEAN +-118.77,34.28,26.0,2873.0,480.0,1915.0,475.0,5.3681,187700.0,<1H OCEAN +-118.75,34.29,17.0,5512.0,,2734.0,814.0,6.6073,258100.0,<1H OCEAN +-118.75,34.28,22.0,3844.0,537.0,1665.0,492.0,6.2059,239900.0,<1H OCEAN +-118.76,34.28,21.0,2786.0,342.0,1114.0,322.0,5.8578,266300.0,<1H OCEAN +-118.75,34.27,20.0,3495.0,449.0,1629.0,428.0,5.8096,264400.0,<1H OCEAN +-118.75,34.28,27.0,1452.0,251.0,928.0,259.0,4.6908,186600.0,<1H OCEAN +-118.75,34.27,26.0,966.0,191.0,690.0,191.0,5.1698,188000.0,<1H OCEAN +-118.75,34.27,24.0,3241.0,461.0,1567.0,446.0,5.5983,233300.0,<1H OCEAN +-118.75,34.27,25.0,3371.0,502.0,1717.0,506.0,6.1253,225000.0,<1H OCEAN +-118.71,34.27,26.0,990.0,223.0,719.0,232.0,3.163,179400.0,<1H OCEAN +-118.73,34.27,23.0,4550.0,762.0,2301.0,744.0,4.556,205300.0,<1H OCEAN +-118.74,34.27,23.0,2493.0,522.0,1488.0,505.0,4.18,215000.0,<1H OCEAN +-118.77,34.26,26.0,3038.0,468.0,1825.0,468.0,5.6385,196900.0,<1H OCEAN +-118.76,34.26,26.0,1750.0,284.0,962.0,278.0,4.5673,190400.0,<1H OCEAN +-118.76,34.26,26.0,1929.0,293.0,1067.0,320.0,5.4038,222100.0,<1H OCEAN +-118.75,34.26,26.0,1767.0,265.0,1040.0,250.0,5.4787,198100.0,<1H OCEAN +-118.75,34.26,24.0,2234.0,373.0,1325.0,383.0,5.4604,193400.0,<1H OCEAN +-118.74,34.26,27.0,3467.0,545.0,1798.0,493.0,4.8717,204100.0,<1H OCEAN +-118.74,34.28,21.0,4056.0,637.0,1974.0,634.0,5.9024,221000.0,<1H OCEAN +-118.73,34.27,25.0,3409.0,493.0,1699.0,484.0,5.653,225800.0,<1H OCEAN +-118.71,34.28,27.0,2911.0,562.0,1773.0,580.0,4.6528,186600.0,<1H OCEAN +-118.7,34.28,25.0,2377.0,491.0,1200.0,439.0,4.7083,196100.0,<1H OCEAN +-118.7,34.28,27.0,727.0,136.0,467.0,144.0,3.7188,250000.0,<1H OCEAN +-118.72,34.28,17.0,2654.0,478.0,1392.0,451.0,5.4459,223900.0,<1H OCEAN +-118.72,34.28,18.0,2229.0,371.0,1283.0,379.0,5.5955,217700.0,<1H OCEAN +-118.72,34.28,17.0,3051.0,,1705.0,495.0,5.7376,218600.0,<1H OCEAN +-118.67,34.28,21.0,4059.0,598.0,2133.0,634.0,5.6949,235300.0,<1H OCEAN +-118.68,34.28,17.0,6488.0,1102.0,3199.0,1070.0,5.0962,238000.0,<1H OCEAN +-118.67,34.3,5.0,6123.0,825.0,2440.0,736.0,7.9013,393000.0,<1H OCEAN +-118.68,34.28,5.0,6150.0,1265.0,3188.0,1266.0,4.7034,223000.0,<1H OCEAN +-118.68,34.27,16.0,4637.0,941.0,2476.0,878.0,4.0568,225200.0,<1H OCEAN +-118.68,34.27,26.0,1561.0,212.0,817.0,242.0,5.477,209100.0,<1H OCEAN +-118.67,34.27,15.0,3221.0,659.0,1390.0,607.0,3.5313,191800.0,<1H OCEAN +-118.67,34.27,10.0,3753.0,678.0,1859.0,660.0,4.9946,204600.0,<1H OCEAN +-118.65,34.27,23.0,1724.0,265.0,934.0,306.0,6.0783,229200.0,<1H OCEAN +-118.71,34.29,24.0,2983.0,406.0,1203.0,381.0,6.3236,302000.0,<1H OCEAN +-118.71,34.29,21.0,2751.0,493.0,1432.0,483.0,5.2067,221200.0,<1H OCEAN +-118.7,34.28,27.0,3536.0,646.0,1837.0,580.0,4.4964,238300.0,<1H OCEAN +-118.7,34.3,23.0,2831.0,406.0,1284.0,393.0,6.1383,244100.0,<1H OCEAN +-118.7,34.29,25.0,1678.0,252.0,862.0,268.0,6.1834,229800.0,<1H OCEAN +-118.71,34.3,23.0,1983.0,280.0,978.0,287.0,6.3199,236700.0,<1H OCEAN +-118.7,34.3,27.0,1527.0,220.0,756.0,226.0,6.1825,227000.0,<1H OCEAN +-118.71,34.3,20.0,1586.0,187.0,699.0,209.0,6.5483,335000.0,<1H OCEAN +-118.68,34.33,45.0,121.0,25.0,67.0,27.0,2.9821,325000.0,<1H OCEAN +-118.75,34.33,27.0,534.0,85.0,243.0,77.0,8.2787,330000.0,<1H OCEAN +-118.73,34.29,11.0,5451.0,736.0,2526.0,752.0,7.355,343900.0,<1H OCEAN +-118.72,34.29,22.0,3266.0,529.0,1595.0,494.0,6.0368,248000.0,<1H OCEAN +-118.73,34.29,8.0,4983.0,754.0,2510.0,725.0,6.9454,276500.0,<1H OCEAN +-121.52,38.59,35.0,6418.0,1545.0,3814.0,1496.0,1.6647,69100.0,INLAND +-121.51,38.58,42.0,1822.0,636.0,1372.0,560.0,1.2542,76000.0,INLAND +-121.53,38.6,25.0,5154.0,1105.0,3196.0,1073.0,2.7566,80200.0,INLAND +-121.54,38.59,29.0,2242.0,493.0,1481.0,478.0,2.0781,74800.0,INLAND +-121.54,38.59,40.0,2120.0,504.0,1304.0,464.0,2.0368,67800.0,INLAND +-121.55,38.59,36.0,435.0,95.0,285.0,90.0,1.2292,69600.0,INLAND +-121.63,38.67,34.0,431.0,85.0,391.0,77.0,2.625,225000.0,INLAND +-121.52,38.58,24.0,938.0,275.0,508.0,253.0,1.642,32500.0,INLAND +-121.53,38.56,39.0,2438.0,483.0,1103.0,472.0,2.9375,86600.0,INLAND +-121.52,38.57,43.0,2360.0,471.0,1041.0,452.0,2.89,86200.0,INLAND +-121.54,38.58,30.0,4648.0,1252.0,2524.0,1089.0,1.3177,74300.0,INLAND +-121.56,38.58,32.0,2070.0,561.0,2046.0,523.0,1.9426,82300.0,INLAND +-121.53,38.58,33.0,4988.0,1169.0,2414.0,1075.0,1.9728,76400.0,INLAND +-121.53,38.58,35.0,1316.0,321.0,732.0,336.0,2.1213,79200.0,INLAND +-121.53,38.57,34.0,3395.0,592.0,1518.0,627.0,4.0833,118500.0,INLAND +-121.54,38.54,36.0,1672.0,302.0,969.0,337.0,3.0536,73100.0,INLAND +-121.55,38.51,22.0,2403.0,431.0,1088.0,421.0,3.9,146900.0,INLAND +-121.55,38.55,10.0,6227.0,1164.0,2909.0,1077.0,4.106,115900.0,INLAND +-121.56,38.44,43.0,1485.0,270.0,653.0,251.0,3.0,141700.0,INLAND +-121.61,38.38,37.0,1365.0,276.0,952.0,268.0,4.037,156900.0,INLAND +-121.79,38.54,7.0,1777.0,513.0,4479.0,504.0,1.4653,310000.0,INLAND +-121.8,38.55,11.0,5121.0,899.0,2258.0,901.0,4.7168,223200.0,INLAND +-121.78,38.55,12.0,10509.0,2186.0,5633.0,2138.0,2.9605,204300.0,INLAND +-121.76,38.57,11.0,15018.0,3008.0,7984.0,2962.0,3.1371,201800.0,INLAND +-121.81,38.58,17.0,1964.0,314.0,808.0,286.0,5.9629,286000.0,INLAND +-121.7,38.6,16.0,2372.0,588.0,1400.0,583.0,2.8922,153600.0,INLAND +-121.67,38.54,13.0,6141.0,1019.0,2553.0,967.0,4.2432,326500.0,INLAND +-121.74,38.56,18.0,3960.0,1151.0,2248.0,1144.0,1.7257,179100.0,INLAND +-121.74,38.55,34.0,2299.0,579.0,1300.0,536.0,1.6435,148500.0,INLAND +-121.73,38.55,34.0,1717.0,393.0,1224.0,387.0,2.7917,130800.0,INLAND +-121.73,38.54,18.0,974.0,317.0,521.0,317.0,1.0633,137500.0,INLAND +-121.73,38.56,30.0,3306.0,629.0,1623.0,648.0,2.8614,145200.0,INLAND +-121.71,38.56,20.0,8627.0,1516.0,4071.0,1466.0,4.2198,164100.0,INLAND +-121.72,38.54,16.0,2790.0,624.0,1386.0,636.0,3.1908,194300.0,INLAND +-121.7,38.54,13.0,6819.0,1158.0,2828.0,1115.0,4.6225,226500.0,INLAND +-121.75,38.55,33.0,2479.0,382.0,979.0,377.0,4.7308,236200.0,INLAND +-121.74,38.55,33.0,6861.0,1820.0,3717.0,1767.0,1.7311,182600.0,INLAND +-121.76,38.55,23.0,8800.0,1857.0,6330.0,1832.0,2.065,219400.0,INLAND +-121.75,38.55,26.0,4802.0,950.0,2199.0,939.0,3.7452,227700.0,INLAND +-121.77,38.69,47.0,1697.0,318.0,775.0,276.0,3.4559,123100.0,INLAND +-121.77,38.68,43.0,2559.0,598.0,1820.0,591.0,2.1927,107900.0,INLAND +-121.76,38.68,38.0,674.0,178.0,701.0,189.0,1.3942,69400.0,INLAND +-121.8,38.69,8.0,3544.0,691.0,2118.0,678.0,3.7477,122200.0,INLAND +-121.79,38.69,23.0,1755.0,321.0,1061.0,313.0,2.8864,103100.0,INLAND +-121.78,38.69,31.0,2547.0,535.0,1579.0,509.0,2.6774,95800.0,INLAND +-121.8,38.68,11.0,3851.0,892.0,1847.0,747.0,3.4331,120600.0,INLAND +-121.79,38.68,24.0,3794.0,848.0,2225.0,864.0,2.8068,95300.0,INLAND +-121.78,38.68,39.0,2806.0,662.0,1659.0,638.0,1.9787,97800.0,INLAND +-121.8,38.67,11.0,3251.0,623.0,1700.0,615.0,3.1875,172000.0,INLAND +-121.79,38.67,17.0,2875.0,810.0,1876.0,749.0,1.951,152500.0,INLAND +-121.78,38.68,43.0,3766.0,847.0,1855.0,817.0,2.3468,119400.0,INLAND +-121.8,38.67,10.0,2086.0,380.0,1073.0,378.0,4.5526,154400.0,INLAND +-121.79,38.67,30.0,2602.0,401.0,981.0,405.0,4.7222,167200.0,INLAND +-121.78,38.67,38.0,2948.0,478.0,1123.0,460.0,4.0556,146900.0,INLAND +-121.77,38.67,42.0,2670.0,518.0,1548.0,534.0,2.2794,108900.0,INLAND +-121.77,38.67,45.0,2438.0,462.0,1415.0,510.0,2.8351,107200.0,INLAND +-121.75,38.67,9.0,12139.0,2640.0,6837.0,2358.0,3.125,132500.0,INLAND +-121.71,38.72,32.0,710.0,155.0,550.0,154.0,2.8882,151400.0,INLAND +-121.7,38.65,22.0,1360.0,282.0,808.0,229.0,2.4167,225000.0,INLAND +-121.84,38.65,29.0,3167.0,548.0,1554.0,534.0,4.3487,200700.0,INLAND +-121.79,38.66,15.0,6809.0,1052.0,3060.0,1060.0,5.3064,165000.0,INLAND +-121.78,38.66,18.0,4224.0,632.0,1907.0,641.0,4.8226,139900.0,INLAND +-121.76,38.66,17.0,5320.0,984.0,2866.0,928.0,4.1997,133400.0,INLAND +-121.96,38.54,6.0,1485.0,318.0,894.0,308.0,3.2222,139600.0,INLAND +-121.99,38.53,6.0,4598.0,834.0,2561.0,812.0,3.4186,127300.0,INLAND +-121.98,38.52,27.0,3044.0,565.0,1583.0,514.0,2.7989,126700.0,INLAND +-122.05,38.56,20.0,1005.0,168.0,457.0,157.0,5.679,225000.0,INLAND +-121.92,38.57,10.0,1320.0,246.0,898.0,228.0,1.9327,193800.0,INLAND +-121.9,38.72,38.0,575.0,107.0,259.0,109.0,3.75,187500.0,INLAND +-122.0,38.83,26.0,272.0,49.0,194.0,52.0,3.4187,98400.0,INLAND +-121.94,38.89,15.0,1462.0,314.0,774.0,271.0,2.5478,91700.0,INLAND +-121.81,38.84,37.0,352.0,65.0,238.0,67.0,2.8542,275000.0,INLAND +-121.72,38.8,36.0,1069.0,228.0,567.0,190.0,1.9559,78400.0,INLAND +-121.77,38.76,32.0,1950.0,385.0,1145.0,363.0,2.8365,87900.0,INLAND +-122.21,38.83,20.0,1138.0,221.0,459.0,209.0,3.1534,123400.0,INLAND +-122.16,38.9,33.0,1221.0,236.0,488.0,199.0,3.7574,92700.0,INLAND +-122.0,38.73,31.0,371.0,74.0,208.0,84.0,3.875,137500.0,INLAND +-121.95,38.65,19.0,1265.0,228.0,755.0,218.0,3.3472,69800.0,INLAND +-122.04,38.68,26.0,1113.0,222.0,689.0,234.0,3.0486,83600.0,INLAND +-122.03,38.69,23.0,1796.0,380.0,939.0,330.0,2.7955,96300.0,INLAND +-121.6,39.15,19.0,1396.0,336.0,940.0,309.0,1.5208,70300.0,INLAND +-121.59,39.15,5.0,1922.0,489.0,938.0,439.0,2.0474,61300.0,INLAND +-121.59,39.15,48.0,1783.0,399.0,938.0,374.0,1.6652,58900.0,INLAND +-121.59,39.14,41.0,1492.0,350.0,804.0,353.0,1.684,71300.0,INLAND +-121.58,39.15,34.0,1376.0,376.0,702.0,317.0,1.4946,55500.0,INLAND +-121.58,39.14,52.0,662.0,160.0,520.0,149.0,0.8928,55000.0,INLAND +-121.58,39.16,36.0,1206.0,197.0,537.0,204.0,3.3611,79800.0,INLAND +-121.57,39.16,21.0,1872.0,302.0,870.0,301.0,3.725,84700.0,INLAND +-121.56,39.16,12.0,3349.0,642.0,2029.0,619.0,2.9647,88800.0,INLAND +-121.57,39.16,33.0,2033.0,375.0,914.0,330.0,2.6964,68500.0,INLAND +-121.58,39.16,33.0,1897.0,378.0,888.0,385.0,2.1111,68700.0,INLAND +-121.58,39.15,38.0,1756.0,396.0,837.0,401.0,1.9122,55500.0,INLAND +-121.56,39.16,35.0,2157.0,441.0,1009.0,409.0,1.5827,63000.0,INLAND +-121.57,39.16,18.0,1632.0,367.0,769.0,330.0,3.1029,71700.0,INLAND +-121.57,39.13,30.0,442.0,103.0,413.0,88.0,1.5694,57900.0,INLAND +-121.56,39.13,17.0,2277.0,608.0,1607.0,562.0,1.5085,69700.0,INLAND +-121.54,39.13,18.0,4289.0,1021.0,2707.0,939.0,1.3375,59600.0,INLAND +-121.54,39.12,17.0,4251.0,899.0,3265.0,934.0,2.3496,65000.0,INLAND +-121.58,39.12,26.0,2796.0,629.0,2017.0,632.0,1.8355,61200.0,INLAND +-121.57,39.12,30.0,2601.0,534.0,1702.0,506.0,2.08,56600.0,INLAND +-121.57,39.1,28.0,1442.0,333.0,832.0,286.0,1.8413,62300.0,INLAND +-121.59,39.1,24.0,1107.0,261.0,768.0,205.0,1.7167,48800.0,INLAND +-121.56,39.11,18.0,2171.0,480.0,1527.0,447.0,2.3011,57500.0,INLAND +-121.56,39.1,28.0,2130.0,484.0,1195.0,439.0,1.3631,45500.0,INLAND +-121.55,39.1,27.0,1783.0,441.0,1163.0,409.0,1.2857,47000.0,INLAND +-121.56,39.08,26.0,1377.0,289.0,761.0,267.0,1.4934,48300.0,INLAND +-121.55,39.09,31.0,1728.0,365.0,1167.0,384.0,1.4958,53400.0,INLAND +-121.54,39.08,26.0,2276.0,460.0,1455.0,474.0,2.4695,58000.0,INLAND +-121.54,39.08,23.0,1076.0,216.0,724.0,197.0,2.3598,57500.0,INLAND +-121.53,39.08,15.0,1810.0,441.0,1157.0,375.0,2.0469,55100.0,INLAND +-121.53,39.06,20.0,561.0,109.0,308.0,114.0,3.3021,70800.0,INLAND +-121.55,39.06,25.0,1332.0,247.0,726.0,226.0,2.25,63400.0,INLAND +-121.56,39.01,22.0,1891.0,340.0,1023.0,296.0,2.7303,99100.0,INLAND +-121.48,39.05,40.0,198.0,41.0,151.0,48.0,4.5625,100000.0,INLAND +-121.47,39.01,37.0,1244.0,247.0,484.0,157.0,2.3661,77500.0,INLAND +-121.44,39.0,20.0,755.0,147.0,457.0,157.0,2.4167,67000.0,INLAND +-121.37,39.03,32.0,1158.0,244.0,598.0,227.0,2.8235,65500.0,INLAND +-121.41,39.04,16.0,1698.0,300.0,731.0,291.0,3.0739,87200.0,INLAND +-121.52,39.12,37.0,102.0,17.0,29.0,14.0,4.125,72000.0,INLAND +-121.43,39.18,36.0,1124.0,184.0,504.0,171.0,2.1667,93800.0,INLAND +-121.32,39.13,5.0,358.0,65.0,169.0,59.0,3.0,162500.0,INLAND +-121.48,39.1,19.0,2043.0,421.0,1018.0,390.0,2.5952,92400.0,INLAND +-121.39,39.12,28.0,10035.0,1856.0,6912.0,1818.0,2.0943,108300.0,INLAND +-121.32,39.29,11.0,2640.0,505.0,1257.0,445.0,3.5673,112000.0,INLAND +-121.4,39.33,15.0,2655.0,493.0,1200.0,432.0,3.5179,107200.0,INLAND +-121.45,39.26,15.0,2319.0,416.0,1047.0,385.0,3.125,115600.0,INLAND +-121.53,39.19,27.0,2080.0,412.0,1082.0,382.0,2.5495,98300.0,INLAND +-121.56,39.27,28.0,2332.0,395.0,1041.0,344.0,3.7125,116800.0,INLAND +-121.09,39.48,25.0,1665.0,374.0,845.0,330.0,1.5603,78100.0,INLAND +-121.21,39.49,18.0,697.0,150.0,356.0,114.0,2.5568,77100.0,INLAND +-121.22,39.43,17.0,2254.0,485.0,1007.0,433.0,1.7,92300.0,INLAND +-121.32,39.43,18.0,1860.0,409.0,741.0,349.0,1.8672,84700.0,INLAND +-121.24,39.37,16.0,2785.0,616.0,1387.0,530.0,2.3886,89400.0,INLAND diff --git a/Ch2/datasets/housing/housing.tgz b/Ch2/datasets/housing/housing.tgz new file mode 100644 index 000000000..9f3a4a1be Binary files /dev/null and b/Ch2/datasets/housing/housing.tgz differ diff --git a/Ch2/models/SVR_model.pkl b/Ch2/models/SVR_model.pkl new file mode 100644 index 000000000..bb2f3bfdf Binary files /dev/null and b/Ch2/models/SVR_model.pkl differ diff --git a/Ch2/models/final_model.pkl b/Ch2/models/final_model.pkl new file mode 100644 index 000000000..76468132a Binary files /dev/null and b/Ch2/models/final_model.pkl differ diff --git a/Ch2/models/forest_reg.pkl b/Ch2/models/forest_reg.pkl new file mode 100644 index 000000000..c08420acc Binary files /dev/null and b/Ch2/models/forest_reg.pkl differ diff --git a/Ch2/models/lin_reg.pkl b/Ch2/models/lin_reg.pkl new file mode 100644 index 000000000..002a42f0a Binary files /dev/null and b/Ch2/models/lin_reg.pkl differ diff --git a/Ch3/.ipynb_checkpoints/Exercises-checkpoint.ipynb b/Ch3/.ipynb_checkpoints/Exercises-checkpoint.ipynb new file mode 100644 index 000000000..0285da541 --- /dev/null +++ b/Ch3/.ipynb_checkpoints/Exercises-checkpoint.ipynb @@ -0,0 +1,1629 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise 1**\n", + "\n", + "Tackle MNIST!" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import os\n", + "import pandas as pd\n", + "from sklearn.datasets import fetch_openml\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.neighbors import KNeighborsClassifier as KNC\n", + "from sklearn.metrics import accuracy_score\n", + "from scipy.ndimage.interpolation import shift\n", + "from matplotlib import pyplot as plt\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", + "from sklearn.compose import ColumnTransformer\n", + "from scipy.stats import expon, reciprocal\n", + "from sklearn.model_selection import RandomizedSearchCV\n", + "from sklearn.svm import SVC\n", + "import tarfile\n", + "import urllib\n", + "import email\n", + "from email import policy\n", + "from collections import Counter" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "mnist = fetch_openml('mnist_784', version=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['data', 'target', 'feature_names', 'DESCR', 'details', 'categories', 'url'])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mnist.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "255.0" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X, y = mnist['data'], mnist['target']\n", + "X.shape\n", + "np.max(X)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(70000,)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "54880000" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.count_nonzero(~np.isnan(X))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "54880000" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Double check that there are no null values\n", + "\n", + "70000*784 " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.base import BaseEstimator, TransformerMixin\n", + "\n", + "class ImageRegularizer(BaseEstimator, TransformerMixin):\n", + " def __init__(self, max_pixel_size):\n", + " self.max_pixel_size = max_pixel_size\n", + " def fit(self, X, y=None):\n", + " return self # Nothing to do\n", + " def transform(self, X):\n", + " return X * (1/self.max_pixel_size)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "reg = ImageRegularizer(np.max(X))\n", + "reg_X = reg.transform(X)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# Our pipeline consists only of normalizing our greyscale values\n", + "\n", + "pipeline = Pipeline([\n", + " ('regularizer', ImageRegularizer(max_pixel_size=np.max(X)))\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "reg_X = pipeline.transform(X)\n", + "np.max(reg_X)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "X_train = X[:60000]\n", + "X_test = X[60000:]\n", + "y_train = y[:60000]\n", + "y_test = y[60000:]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", + " metric_params=None, n_jobs=-1, n_neighbors=5, p=2,\n", + " weights='uniform')" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clf = KNC(n_jobs=-1)\n", + "clf.fit(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "y_pred = clf.predict(X_train)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(accuracy_score(y_train, y_pred))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise 2**\n", + "\n", + "Write function to shift MNIST image in any direction, then apply it to dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "image = X_train[np.random.randint(0,60000)].reshape(28,28)\n", + "plt.imshow(image)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "def shift_image(image, dx, dy):\n", + " image = image.reshape(28,28) # Reshape to image format (incase not done already)\n", + " return shift(image, (dx, dy)).reshape(-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(784,)\n", + "(784,)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "shifted_image = shift_image(image, 4, 5)\n", + "plt.imshow(shifted_image.reshape(28,28))\n", + "print(shifted_image.shape)\n", + "print(image.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "shifts = [(1,0), (-1,0), (0,1), (0,-1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [], + "source": [ + "X_train_augmented = [image for image in X_train] # Convert to list to effeciently append\n", + "y_train_augmented = [label for label in y_train] # Convert to list to effeciently append\n", + "\n", + "for dx, dy in shifts:\n", + " for image, label in zip(X_train_augmented, y_train):\n", + " shifted_image = shift_image(image, dx, dy)\n", + " X_train_augmented.append(shifted_image)\n", + " y_train_augmented.append(label)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [], + "source": [ + "# Convert back to numpy array\n", + "\n", + "X_train_augmented = np.array(X_train_augmented)\n", + "y_train_augmented = np.array(y_train_augmented)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(300000, 784)" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train_augmented.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", + " metric_params=None, n_jobs=-1, n_neighbors=5, p=2,\n", + " weights='uniform')" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clf = KNC(n_jobs=-1)\n", + "clf.fit(X_train_augmented, y_train_augmented)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "y_pred = clf.predict(X_train)\n", + "print(accuracy_score(y_train, y_pred))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise 3**\n", + "\n", + "Tackle the kaggle Titanic dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "TITANIC_PATH = os.path.join('datasets', 'titanic')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def load_titanic_data(filename, titanic_path=TITANIC_PATH):\n", + " csv_path = os.path.join(titanic_path, filename)\n", + " df = pd.read_csv(csv_path)\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "train = load_titanic_data('train.csv')\n", + "test = load_titanic_data('test.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "0 1 0 3 \n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "4 5 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "0 Braund, Mr. Owen Harris male 22.0 1 \n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "4 Allen, Mr. William Henry male 35.0 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "0 0 A/5 21171 7.2500 NaN S \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "4 0 373450 8.0500 NaN S " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
08923Kelly, Mr. Jamesmale34.5003309117.8292NaNQ
18933Wilkes, Mrs. James (Ellen Needs)female47.0103632727.0000NaNS
28942Myles, Mr. Thomas Francismale62.0002402769.6875NaNQ
38953Wirz, Mr. Albertmale27.0003151548.6625NaNS
48963Hirvonen, Mrs. Alexander (Helga E Lindqvist)female22.011310129812.2875NaNS
\n", + "
" + ], + "text/plain": [ + " PassengerId Pclass Name Sex \\\n", + "0 892 3 Kelly, Mr. James male \n", + "1 893 3 Wilkes, Mrs. James (Ellen Needs) female \n", + "2 894 2 Myles, Mr. Thomas Francis male \n", + "3 895 3 Wirz, Mr. Albert male \n", + "4 896 3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female \n", + "\n", + " Age SibSp Parch Ticket Fare Cabin Embarked \n", + "0 34.5 0 0 330911 7.8292 NaN Q \n", + "1 47.0 1 0 363272 7.0000 NaN S \n", + "2 62.0 0 0 240276 9.6875 NaN Q \n", + "3 27.0 0 0 315154 8.6625 NaN S \n", + "4 22.0 1 1 3101298 12.2875 NaN S " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 891 entries, 0 to 890\n", + "Data columns (total 12 columns):\n", + "PassengerId 891 non-null int64\n", + "Survived 891 non-null int64\n", + "Pclass 891 non-null int64\n", + "Name 891 non-null object\n", + "Sex 891 non-null object\n", + "Age 714 non-null float64\n", + "SibSp 891 non-null int64\n", + "Parch 891 non-null int64\n", + "Ticket 891 non-null object\n", + "Fare 891 non-null float64\n", + "Cabin 204 non-null object\n", + "Embarked 889 non-null object\n", + "dtypes: float64(2), int64(5), object(5)\n", + "memory usage: 83.7+ KB\n" + ] + } + ], + "source": [ + "train.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we will have to deal with missing data in Age, Cabin, and Embarked" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "train_num = train[['Age', 'SibSp', 'Parch', 'Fare']]\n", + "train_cat = train[['Pclass', 'Sex', 'Embarked']]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AgeSibSpParchFare
022.0107.2500
138.01071.2833
226.0007.9250
335.01053.1000
435.0008.0500
\n", + "
" + ], + "text/plain": [ + " Age SibSp Parch Fare\n", + "0 22.0 1 0 7.2500\n", + "1 38.0 1 0 71.2833\n", + "2 26.0 0 0 7.9250\n", + "3 35.0 1 0 53.1000\n", + "4 35.0 0 0 8.0500" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_num.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PclassSexEmbarked
03maleS
11femaleC
23femaleS
31femaleS
43maleS
\n", + "
" + ], + "text/plain": [ + " Pclass Sex Embarked\n", + "0 3 male S\n", + "1 1 female C\n", + "2 3 female S\n", + "3 1 female S\n", + "4 3 male S" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_cat.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "num_pipeline = Pipeline([\n", + " ('Imputer', SimpleImputer(strategy='median')),\n", + " ('Scaler', StandardScaler())\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[-0.56573646 0.43279337 -0.47367361 -0.50244517]\n", + " [ 0.66386103 0.43279337 -0.47367361 0.78684529]\n", + " [-0.25833709 -0.4745452 -0.47367361 -0.48885426]\n", + " ...\n", + " [-0.1046374 0.43279337 2.00893337 -0.17626324]\n", + " [-0.25833709 -0.4745452 -0.47367361 -0.04438104]\n", + " [ 0.20276197 -0.4745452 -0.47367361 -0.49237783]]\n" + ] + } + ], + "source": [ + "train_num_tr = num_pipeline.fit_transform(train_num)\n", + "print(np.array(train_num_tr))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AgeSibSpParchFare
022.0107.2500
138.01071.2833
226.0007.9250
335.01053.1000
435.0008.0500
\n", + "
" + ], + "text/plain": [ + " Age SibSp Parch Fare\n", + "0 22.0 1 0 7.2500\n", + "1 38.0 1 0 71.2833\n", + "2 26.0 0 0 7.9250\n", + "3 35.0 1 0 53.1000\n", + "4 35.0 0 0 8.0500" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_num.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "cat_pipeline = Pipeline([\n", + " ('imputer', SimpleImputer(strategy='most_frequent')),\n", + " ('OneHotEncoder', OneHotEncoder(sparse=False))\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "train_cat_tr = cat_pipeline.fit_transform(train_cat)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0. 0. 1. ... 0. 0. 1.]\n", + " [1. 0. 0. ... 1. 0. 0.]\n", + " [0. 0. 1. ... 0. 0. 1.]\n", + " ...\n", + " [0. 0. 1. ... 0. 0. 1.]\n", + " [1. 0. 0. ... 1. 0. 0.]\n", + " [0. 0. 1. ... 0. 1. 0.]]\n" + ] + } + ], + "source": [ + "print(train_cat_tr)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "num_attribs = list(train_num)\n", + "cat_attribs = list(train_cat)\n", + "\n", + "full_pipeline = ColumnTransformer([\n", + " ('num', num_pipeline, num_attribs),\n", + " ('cat', cat_pipeline, cat_attribs)\n", + "])\n", + "\n", + "train_prepared = full_pipeline.fit_transform(train)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-0.56573646, 0.43279337, -0.47367361, ..., 0. ,\n", + " 0. , 1. ],\n", + " [ 0.66386103, 0.43279337, -0.47367361, ..., 1. ,\n", + " 0. , 0. ],\n", + " [-0.25833709, -0.4745452 , -0.47367361, ..., 0. ,\n", + " 0. , 1. ],\n", + " ...,\n", + " [-0.1046374 , 0.43279337, 2.00893337, ..., 0. ,\n", + " 0. , 1. ],\n", + " [-0.25833709, -0.4745452 , -0.47367361, ..., 1. ,\n", + " 0. , 0. ],\n", + " [ 0.20276197, -0.4745452 , -0.47367361, ..., 0. ,\n", + " 1. , 0. ]])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_prepared" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "y_train = train['Survived']" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", + " metric_params=None, n_jobs=-1, n_neighbors=5, p=2,\n", + " weights='uniform')" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clf = KNC(n_jobs=-1)\n", + "clf.fit(train_prepared, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8574635241301908" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clf.score(train_prepared, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "test_prepared = full_pipeline.fit_transform(test)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 5 folds for each of 30 candidates, totalling 150 fits\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n", + "[Parallel(n_jobs=-1)]: Done 25 tasks | elapsed: 57.8s\n", + "[Parallel(n_jobs=-1)]: Done 150 out of 150 | elapsed: 3.2min finished\n" + ] + }, + { + "data": { + "text/plain": [ + "RandomizedSearchCV(cv=5, error_score=nan,\n", + " estimator=SVC(C=1.0, break_ties=False, cache_size=200,\n", + " class_weight=None, coef0=0.0,\n", + " decision_function_shape='ovr', degree=3,\n", + " gamma='scale', kernel='rbf', max_iter=-1,\n", + " probability=False, random_state=None,\n", + " shrinking=True, tol=0.001, verbose=False),\n", + " iid='deprecated', n_iter=30, n_jobs=-1,\n", + " param_distributions={'C': ,\n", + " 'gamma': ,\n", + " 'kernel': ['rbf']},\n", + " pre_dispatch='2*n_jobs', random_state=None, refit=True,\n", + " return_train_score=False, scoring='accuracy', verbose=2)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Setup up randomized search for best params\n", + "\n", + "param_distribs = {\n", + " 'kernel': ['rbf'],\n", + " 'C': reciprocal(20,200000),\n", + " 'gamma': expon(scale=1.0)\n", + " \n", + "}\n", + "\n", + "SVC_model = SVC()\n", + "\n", + "rnd_search = RandomizedSearchCV(SVC_model, \n", + " param_distributions=param_distribs, \n", + " n_iter=30,\n", + " cv=5,\n", + " scoring='accuracy',\n", + " verbose=2, \n", + " n_jobs=-1, \n", + " )\n", + "\n", + "rnd_search.fit(train_prepared, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8293955181721172" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rnd_search.best_score_" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 5 folds for each of 30 candidates, totalling 150 fits\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n", + "[Parallel(n_jobs=-1)]: Done 25 tasks | elapsed: 25.0s\n", + "[Parallel(n_jobs=-1)]: Done 150 out of 150 | elapsed: 1.5min finished\n" + ] + }, + { + "data": { + "text/plain": [ + "RandomizedSearchCV(cv=5, error_score=nan,\n", + " estimator=RandomForestClassifier(bootstrap=True,\n", + " ccp_alpha=0.0,\n", + " class_weight=None,\n", + " criterion='gini',\n", + " max_depth=None,\n", + " max_features='auto',\n", + " max_leaf_nodes=None,\n", + " max_samples=None,\n", + " min_impurity_decrease=0.0,\n", + " min_impurity_split=None,\n", + " min_samples_leaf=1,\n", + " min_samples_split=2,\n", + " min_weight_fraction_leaf=0.0,\n", + " n_estimators=100,\n", + " n_jobs...\n", + " param_distributions={'bootstrap': [True, False],\n", + " 'max_depth': [10, 20, 30, 40, 50, 60,\n", + " 70, 80, 90, 100, 110,\n", + " None],\n", + " 'max_features': ['auto', 'sqrt'],\n", + " 'min_samples_leaf': [1, 2, 4],\n", + " 'min_samples_split': [2, 5, 10],\n", + " 'n_estimators': [200, 400, 600, 800,\n", + " 1000, 1200, 1400, 1600,\n", + " 1800, 2000]},\n", + " pre_dispatch='2*n_jobs', random_state=None, refit=True,\n", + " return_train_score=False, scoring='accuracy', verbose=2)" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Number of trees in random forest\n", + "n_estimators = [int(x) for x in np.linspace(start = 200, stop = 2000, num = 10)]\n", + "# Number of features to consider at every split\n", + "max_features = ['auto', 'sqrt']\n", + "# Maximum number of levels in tree\n", + "max_depth = [int(x) for x in np.linspace(10, 110, num = 11)]\n", + "max_depth.append(None)\n", + "# Minimum number of samples required to split a node\n", + "min_samples_split = [2, 5, 10]\n", + "# Minimum number of samples required at each leaf node\n", + "min_samples_leaf = [1, 2, 4]\n", + "# Method of selecting samples for training each tree\n", + "bootstrap = [True, False]\n", + "# Create the random grid\n", + "param_distribs = {'n_estimators': n_estimators,\n", + " 'max_features': max_features,\n", + " 'max_depth': max_depth,\n", + " 'min_samples_split': min_samples_split,\n", + " 'min_samples_leaf': min_samples_leaf,\n", + " 'bootstrap': bootstrap}\n", + "\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "\n", + "rf_model = RandomForestClassifier()\n", + "\n", + "rnd_search = RandomizedSearchCV(rf_model, \n", + " param_distributions=param_distribs, \n", + " n_iter=30,\n", + " cv=5,\n", + " scoring='accuracy',\n", + " verbose=2, \n", + " n_jobs=-1, \n", + " )\n", + "\n", + "rnd_search.fit(train_prepared, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8328102441780176" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rnd_search.best_score_" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "final_model = rnd_search.best_estimator_" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "test_prepared = full_pipeline.fit_transform(test)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "PassengerId = test['PassengerId']\n", + "predictions = np.c_[PassengerId, final_model.predict(test_prepared)]\n", + "submission = pd.DataFrame(predictions, columns = ['PassengerId', 'Survived'])\n", + "submission['PassengerId'] = PassengerId\n", + "submission['Survived'] = final_model.predict(test_prepared)\n", + "submission.to_csv(\"rfSubmission.csv\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvived
08920
18930
28940
38950
48961
\n", + "
" + ], + "text/plain": [ + " PassengerId Survived\n", + "0 892 0\n", + "1 893 0\n", + "2 894 0\n", + "3 895 0\n", + "4 896 1" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "submission.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ch3/Exercises.ipynb b/Ch3/Exercises.ipynb new file mode 100644 index 000000000..0285da541 --- /dev/null +++ b/Ch3/Exercises.ipynb @@ -0,0 +1,1629 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise 1**\n", + "\n", + "Tackle MNIST!" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import os\n", + "import pandas as pd\n", + "from sklearn.datasets import fetch_openml\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.neighbors import KNeighborsClassifier as KNC\n", + "from sklearn.metrics import accuracy_score\n", + "from scipy.ndimage.interpolation import shift\n", + "from matplotlib import pyplot as plt\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", + "from sklearn.compose import ColumnTransformer\n", + "from scipy.stats import expon, reciprocal\n", + "from sklearn.model_selection import RandomizedSearchCV\n", + "from sklearn.svm import SVC\n", + "import tarfile\n", + "import urllib\n", + "import email\n", + "from email import policy\n", + "from collections import Counter" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "mnist = fetch_openml('mnist_784', version=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['data', 'target', 'feature_names', 'DESCR', 'details', 'categories', 'url'])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mnist.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "255.0" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X, y = mnist['data'], mnist['target']\n", + "X.shape\n", + "np.max(X)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(70000,)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "54880000" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.count_nonzero(~np.isnan(X))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "54880000" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Double check that there are no null values\n", + "\n", + "70000*784 " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.base import BaseEstimator, TransformerMixin\n", + "\n", + "class ImageRegularizer(BaseEstimator, TransformerMixin):\n", + " def __init__(self, max_pixel_size):\n", + " self.max_pixel_size = max_pixel_size\n", + " def fit(self, X, y=None):\n", + " return self # Nothing to do\n", + " def transform(self, X):\n", + " return X * (1/self.max_pixel_size)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "reg = ImageRegularizer(np.max(X))\n", + "reg_X = reg.transform(X)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# Our pipeline consists only of normalizing our greyscale values\n", + "\n", + "pipeline = Pipeline([\n", + " ('regularizer', ImageRegularizer(max_pixel_size=np.max(X)))\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "reg_X = pipeline.transform(X)\n", + "np.max(reg_X)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "X_train = X[:60000]\n", + "X_test = X[60000:]\n", + "y_train = y[:60000]\n", + "y_test = y[60000:]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", + " metric_params=None, n_jobs=-1, n_neighbors=5, p=2,\n", + " weights='uniform')" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clf = KNC(n_jobs=-1)\n", + "clf.fit(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "y_pred = clf.predict(X_train)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(accuracy_score(y_train, y_pred))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise 2**\n", + "\n", + "Write function to shift MNIST image in any direction, then apply it to dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "image = X_train[np.random.randint(0,60000)].reshape(28,28)\n", + "plt.imshow(image)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "def shift_image(image, dx, dy):\n", + " image = image.reshape(28,28) # Reshape to image format (incase not done already)\n", + " return shift(image, (dx, dy)).reshape(-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(784,)\n", + "(784,)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "shifted_image = shift_image(image, 4, 5)\n", + "plt.imshow(shifted_image.reshape(28,28))\n", + "print(shifted_image.shape)\n", + "print(image.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "shifts = [(1,0), (-1,0), (0,1), (0,-1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [], + "source": [ + "X_train_augmented = [image for image in X_train] # Convert to list to effeciently append\n", + "y_train_augmented = [label for label in y_train] # Convert to list to effeciently append\n", + "\n", + "for dx, dy in shifts:\n", + " for image, label in zip(X_train_augmented, y_train):\n", + " shifted_image = shift_image(image, dx, dy)\n", + " X_train_augmented.append(shifted_image)\n", + " y_train_augmented.append(label)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [], + "source": [ + "# Convert back to numpy array\n", + "\n", + "X_train_augmented = np.array(X_train_augmented)\n", + "y_train_augmented = np.array(y_train_augmented)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(300000, 784)" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train_augmented.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", + " metric_params=None, n_jobs=-1, n_neighbors=5, p=2,\n", + " weights='uniform')" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clf = KNC(n_jobs=-1)\n", + "clf.fit(X_train_augmented, y_train_augmented)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "y_pred = clf.predict(X_train)\n", + "print(accuracy_score(y_train, y_pred))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise 3**\n", + "\n", + "Tackle the kaggle Titanic dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "TITANIC_PATH = os.path.join('datasets', 'titanic')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def load_titanic_data(filename, titanic_path=TITANIC_PATH):\n", + " csv_path = os.path.join(titanic_path, filename)\n", + " df = pd.read_csv(csv_path)\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "train = load_titanic_data('train.csv')\n", + "test = load_titanic_data('test.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "0 1 0 3 \n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "4 5 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "0 Braund, Mr. Owen Harris male 22.0 1 \n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "4 Allen, Mr. William Henry male 35.0 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "0 0 A/5 21171 7.2500 NaN S \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "4 0 373450 8.0500 NaN S " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
08923Kelly, Mr. Jamesmale34.5003309117.8292NaNQ
18933Wilkes, Mrs. James (Ellen Needs)female47.0103632727.0000NaNS
28942Myles, Mr. Thomas Francismale62.0002402769.6875NaNQ
38953Wirz, Mr. Albertmale27.0003151548.6625NaNS
48963Hirvonen, Mrs. Alexander (Helga E Lindqvist)female22.011310129812.2875NaNS
\n", + "
" + ], + "text/plain": [ + " PassengerId Pclass Name Sex \\\n", + "0 892 3 Kelly, Mr. James male \n", + "1 893 3 Wilkes, Mrs. James (Ellen Needs) female \n", + "2 894 2 Myles, Mr. Thomas Francis male \n", + "3 895 3 Wirz, Mr. Albert male \n", + "4 896 3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female \n", + "\n", + " Age SibSp Parch Ticket Fare Cabin Embarked \n", + "0 34.5 0 0 330911 7.8292 NaN Q \n", + "1 47.0 1 0 363272 7.0000 NaN S \n", + "2 62.0 0 0 240276 9.6875 NaN Q \n", + "3 27.0 0 0 315154 8.6625 NaN S \n", + "4 22.0 1 1 3101298 12.2875 NaN S " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 891 entries, 0 to 890\n", + "Data columns (total 12 columns):\n", + "PassengerId 891 non-null int64\n", + "Survived 891 non-null int64\n", + "Pclass 891 non-null int64\n", + "Name 891 non-null object\n", + "Sex 891 non-null object\n", + "Age 714 non-null float64\n", + "SibSp 891 non-null int64\n", + "Parch 891 non-null int64\n", + "Ticket 891 non-null object\n", + "Fare 891 non-null float64\n", + "Cabin 204 non-null object\n", + "Embarked 889 non-null object\n", + "dtypes: float64(2), int64(5), object(5)\n", + "memory usage: 83.7+ KB\n" + ] + } + ], + "source": [ + "train.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we will have to deal with missing data in Age, Cabin, and Embarked" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "train_num = train[['Age', 'SibSp', 'Parch', 'Fare']]\n", + "train_cat = train[['Pclass', 'Sex', 'Embarked']]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AgeSibSpParchFare
022.0107.2500
138.01071.2833
226.0007.9250
335.01053.1000
435.0008.0500
\n", + "
" + ], + "text/plain": [ + " Age SibSp Parch Fare\n", + "0 22.0 1 0 7.2500\n", + "1 38.0 1 0 71.2833\n", + "2 26.0 0 0 7.9250\n", + "3 35.0 1 0 53.1000\n", + "4 35.0 0 0 8.0500" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_num.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PclassSexEmbarked
03maleS
11femaleC
23femaleS
31femaleS
43maleS
\n", + "
" + ], + "text/plain": [ + " Pclass Sex Embarked\n", + "0 3 male S\n", + "1 1 female C\n", + "2 3 female S\n", + "3 1 female S\n", + "4 3 male S" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_cat.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "num_pipeline = Pipeline([\n", + " ('Imputer', SimpleImputer(strategy='median')),\n", + " ('Scaler', StandardScaler())\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[-0.56573646 0.43279337 -0.47367361 -0.50244517]\n", + " [ 0.66386103 0.43279337 -0.47367361 0.78684529]\n", + " [-0.25833709 -0.4745452 -0.47367361 -0.48885426]\n", + " ...\n", + " [-0.1046374 0.43279337 2.00893337 -0.17626324]\n", + " [-0.25833709 -0.4745452 -0.47367361 -0.04438104]\n", + " [ 0.20276197 -0.4745452 -0.47367361 -0.49237783]]\n" + ] + } + ], + "source": [ + "train_num_tr = num_pipeline.fit_transform(train_num)\n", + "print(np.array(train_num_tr))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AgeSibSpParchFare
022.0107.2500
138.01071.2833
226.0007.9250
335.01053.1000
435.0008.0500
\n", + "
" + ], + "text/plain": [ + " Age SibSp Parch Fare\n", + "0 22.0 1 0 7.2500\n", + "1 38.0 1 0 71.2833\n", + "2 26.0 0 0 7.9250\n", + "3 35.0 1 0 53.1000\n", + "4 35.0 0 0 8.0500" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_num.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "cat_pipeline = Pipeline([\n", + " ('imputer', SimpleImputer(strategy='most_frequent')),\n", + " ('OneHotEncoder', OneHotEncoder(sparse=False))\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "train_cat_tr = cat_pipeline.fit_transform(train_cat)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0. 0. 1. ... 0. 0. 1.]\n", + " [1. 0. 0. ... 1. 0. 0.]\n", + " [0. 0. 1. ... 0. 0. 1.]\n", + " ...\n", + " [0. 0. 1. ... 0. 0. 1.]\n", + " [1. 0. 0. ... 1. 0. 0.]\n", + " [0. 0. 1. ... 0. 1. 0.]]\n" + ] + } + ], + "source": [ + "print(train_cat_tr)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "num_attribs = list(train_num)\n", + "cat_attribs = list(train_cat)\n", + "\n", + "full_pipeline = ColumnTransformer([\n", + " ('num', num_pipeline, num_attribs),\n", + " ('cat', cat_pipeline, cat_attribs)\n", + "])\n", + "\n", + "train_prepared = full_pipeline.fit_transform(train)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-0.56573646, 0.43279337, -0.47367361, ..., 0. ,\n", + " 0. , 1. ],\n", + " [ 0.66386103, 0.43279337, -0.47367361, ..., 1. ,\n", + " 0. , 0. ],\n", + " [-0.25833709, -0.4745452 , -0.47367361, ..., 0. ,\n", + " 0. , 1. ],\n", + " ...,\n", + " [-0.1046374 , 0.43279337, 2.00893337, ..., 0. ,\n", + " 0. , 1. ],\n", + " [-0.25833709, -0.4745452 , -0.47367361, ..., 1. ,\n", + " 0. , 0. ],\n", + " [ 0.20276197, -0.4745452 , -0.47367361, ..., 0. ,\n", + " 1. , 0. ]])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_prepared" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "y_train = train['Survived']" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", + " metric_params=None, n_jobs=-1, n_neighbors=5, p=2,\n", + " weights='uniform')" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clf = KNC(n_jobs=-1)\n", + "clf.fit(train_prepared, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8574635241301908" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clf.score(train_prepared, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "test_prepared = full_pipeline.fit_transform(test)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 5 folds for each of 30 candidates, totalling 150 fits\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n", + "[Parallel(n_jobs=-1)]: Done 25 tasks | elapsed: 57.8s\n", + "[Parallel(n_jobs=-1)]: Done 150 out of 150 | elapsed: 3.2min finished\n" + ] + }, + { + "data": { + "text/plain": [ + "RandomizedSearchCV(cv=5, error_score=nan,\n", + " estimator=SVC(C=1.0, break_ties=False, cache_size=200,\n", + " class_weight=None, coef0=0.0,\n", + " decision_function_shape='ovr', degree=3,\n", + " gamma='scale', kernel='rbf', max_iter=-1,\n", + " probability=False, random_state=None,\n", + " shrinking=True, tol=0.001, verbose=False),\n", + " iid='deprecated', n_iter=30, n_jobs=-1,\n", + " param_distributions={'C': ,\n", + " 'gamma': ,\n", + " 'kernel': ['rbf']},\n", + " pre_dispatch='2*n_jobs', random_state=None, refit=True,\n", + " return_train_score=False, scoring='accuracy', verbose=2)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Setup up randomized search for best params\n", + "\n", + "param_distribs = {\n", + " 'kernel': ['rbf'],\n", + " 'C': reciprocal(20,200000),\n", + " 'gamma': expon(scale=1.0)\n", + " \n", + "}\n", + "\n", + "SVC_model = SVC()\n", + "\n", + "rnd_search = RandomizedSearchCV(SVC_model, \n", + " param_distributions=param_distribs, \n", + " n_iter=30,\n", + " cv=5,\n", + " scoring='accuracy',\n", + " verbose=2, \n", + " n_jobs=-1, \n", + " )\n", + "\n", + "rnd_search.fit(train_prepared, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8293955181721172" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rnd_search.best_score_" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 5 folds for each of 30 candidates, totalling 150 fits\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n", + "[Parallel(n_jobs=-1)]: Done 25 tasks | elapsed: 25.0s\n", + "[Parallel(n_jobs=-1)]: Done 150 out of 150 | elapsed: 1.5min finished\n" + ] + }, + { + "data": { + "text/plain": [ + "RandomizedSearchCV(cv=5, error_score=nan,\n", + " estimator=RandomForestClassifier(bootstrap=True,\n", + " ccp_alpha=0.0,\n", + " class_weight=None,\n", + " criterion='gini',\n", + " max_depth=None,\n", + " max_features='auto',\n", + " max_leaf_nodes=None,\n", + " max_samples=None,\n", + " min_impurity_decrease=0.0,\n", + " min_impurity_split=None,\n", + " min_samples_leaf=1,\n", + " min_samples_split=2,\n", + " min_weight_fraction_leaf=0.0,\n", + " n_estimators=100,\n", + " n_jobs...\n", + " param_distributions={'bootstrap': [True, False],\n", + " 'max_depth': [10, 20, 30, 40, 50, 60,\n", + " 70, 80, 90, 100, 110,\n", + " None],\n", + " 'max_features': ['auto', 'sqrt'],\n", + " 'min_samples_leaf': [1, 2, 4],\n", + " 'min_samples_split': [2, 5, 10],\n", + " 'n_estimators': [200, 400, 600, 800,\n", + " 1000, 1200, 1400, 1600,\n", + " 1800, 2000]},\n", + " pre_dispatch='2*n_jobs', random_state=None, refit=True,\n", + " return_train_score=False, scoring='accuracy', verbose=2)" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Number of trees in random forest\n", + "n_estimators = [int(x) for x in np.linspace(start = 200, stop = 2000, num = 10)]\n", + "# Number of features to consider at every split\n", + "max_features = ['auto', 'sqrt']\n", + "# Maximum number of levels in tree\n", + "max_depth = [int(x) for x in np.linspace(10, 110, num = 11)]\n", + "max_depth.append(None)\n", + "# Minimum number of samples required to split a node\n", + "min_samples_split = [2, 5, 10]\n", + "# Minimum number of samples required at each leaf node\n", + "min_samples_leaf = [1, 2, 4]\n", + "# Method of selecting samples for training each tree\n", + "bootstrap = [True, False]\n", + "# Create the random grid\n", + "param_distribs = {'n_estimators': n_estimators,\n", + " 'max_features': max_features,\n", + " 'max_depth': max_depth,\n", + " 'min_samples_split': min_samples_split,\n", + " 'min_samples_leaf': min_samples_leaf,\n", + " 'bootstrap': bootstrap}\n", + "\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "\n", + "rf_model = RandomForestClassifier()\n", + "\n", + "rnd_search = RandomizedSearchCV(rf_model, \n", + " param_distributions=param_distribs, \n", + " n_iter=30,\n", + " cv=5,\n", + " scoring='accuracy',\n", + " verbose=2, \n", + " n_jobs=-1, \n", + " )\n", + "\n", + "rnd_search.fit(train_prepared, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8328102441780176" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rnd_search.best_score_" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "final_model = rnd_search.best_estimator_" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "test_prepared = full_pipeline.fit_transform(test)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "PassengerId = test['PassengerId']\n", + "predictions = np.c_[PassengerId, final_model.predict(test_prepared)]\n", + "submission = pd.DataFrame(predictions, columns = ['PassengerId', 'Survived'])\n", + "submission['PassengerId'] = PassengerId\n", + "submission['Survived'] = final_model.predict(test_prepared)\n", + "submission.to_csv(\"rfSubmission.csv\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvived
08920
18930
28940
38950
48961
\n", + "
" + ], + "text/plain": [ + " PassengerId Survived\n", + "0 892 0\n", + "1 893 0\n", + "2 894 0\n", + "3 895 0\n", + "4 896 1" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "submission.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ch3/datasets/spam/20021010_easy_ham (1).tar.bz2 b/Ch3/datasets/spam/20021010_easy_ham (1).tar.bz2 new file mode 100644 index 000000000..957a9c4f6 Binary files /dev/null and b/Ch3/datasets/spam/20021010_easy_ham (1).tar.bz2 differ diff --git a/Ch3/datasets/spam/20021010_hard_ham.tar.bz2 b/Ch3/datasets/spam/20021010_hard_ham.tar.bz2 new file mode 100644 index 000000000..d9542c417 Binary files /dev/null and b/Ch3/datasets/spam/20021010_hard_ham.tar.bz2 differ diff --git a/Ch3/datasets/spam/20021010_spam.tar.bz2 b/Ch3/datasets/spam/20021010_spam.tar.bz2 new file mode 100644 index 000000000..e42fc52e6 Binary files /dev/null and b/Ch3/datasets/spam/20021010_spam.tar.bz2 differ diff --git a/Ch3/datasets/spam/easy_ham/00001.7c53336b37003a9286aba55d2945844c b/Ch3/datasets/spam/easy_ham/00001.7c53336b37003a9286aba55d2945844c new file mode 100644 index 000000000..c50bb11c0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00001.7c53336b37003a9286aba55d2945844c @@ -0,0 +1,113 @@ +From exmh-workers-admin@redhat.com Thu Aug 22 12:36:23 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D03E543C36 + for ; Thu, 22 Aug 2002 07:36:16 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 12:36:16 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MBYrZ04811 for + ; Thu, 22 Aug 2002 12:34:53 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 8386540858; Thu, 22 Aug 2002 + 07:35:02 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 10CF8406D7 + for ; Thu, 22 Aug 2002 07:34:10 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MBY7g11259 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 07:34:07 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MBY7Y11255 for + ; Thu, 22 Aug 2002 07:34:07 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g7MBIhl25223 for ; + Thu, 22 Aug 2002 07:18:55 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7MBWel29762; + Thu, 22 Aug 2002 18:32:40 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g7MBQPW13260; Thu, 22 Aug 2002 18:26:25 + +0700 (ICT) +From: Robert Elz +To: Chris Garrigues +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <1029945287.4797.TMDA@deepeddy.vircio.com> +References: <1029945287.4797.TMDA@deepeddy.vircio.com> + <1029882468.3116.TMDA@deepeddy.vircio.com> <9627.1029933001@munnari.OZ.AU> + <1029943066.26919.TMDA@deepeddy.vircio.com> + <1029944441.398.TMDA@deepeddy.vircio.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <13258.1030015585@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 18:26:25 +0700 + + Date: Wed, 21 Aug 2002 10:54:46 -0500 + From: Chris Garrigues + Message-ID: <1029945287.4797.TMDA@deepeddy.vircio.com> + + + | I can't reproduce this error. + +For me it is very repeatable... (like every time, without fail). + +This is the debug log of the pick happening ... + +18:19:03 Pick_It {exec pick +inbox -list -lbrace -lbrace -subject ftp -rbrace -rbrace} {4852-4852 -sequence mercury} +18:19:03 exec pick +inbox -list -lbrace -lbrace -subject ftp -rbrace -rbrace 4852-4852 -sequence mercury +18:19:04 Ftoc_PickMsgs {{1 hit}} +18:19:04 Marking 1 hits +18:19:04 tkerror: syntax error in expression "int ... + +Note, if I run the pick command by hand ... + +delta$ pick +inbox -list -lbrace -lbrace -subject ftp -rbrace -rbrace 4852-4852 -sequence mercury +1 hit + +That's where the "1 hit" comes from (obviously). The version of nmh I'm +using is ... + +delta$ pick -version +pick -- nmh-1.0.4 [compiled on fuchsia.cs.mu.OZ.AU at Sun Mar 17 14:55:56 ICT 2002] + +And the relevant part of my .mh_profile ... + +delta$ mhparam pick +-seq sel -list + + +Since the pick command works, the sequence (actually, both of them, the +one that's explicit on the command line, from the search popup, and the +one that comes from .mh_profile) do get created. + +kre + +ps: this is still using the version of the code form a day ago, I haven't +been able to reach the cvs repository today (local routing issue I think). + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00002.9c4069e25e1ef370c078db7ee85ff9ac b/Ch3/datasets/spam/easy_ham/00002.9c4069e25e1ef370c078db7ee85ff9ac new file mode 100644 index 000000000..7a5b23a49 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00002.9c4069e25e1ef370c078db7ee85ff9ac @@ -0,0 +1,73 @@ +From Steve_Burt@cursor-system.com Thu Aug 22 12:46:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BE12E43C34 + for ; Thu, 22 Aug 2002 07:46:38 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 12:46:38 +0100 (IST) +Received: from n20.grp.scd.yahoo.com (n20.grp.scd.yahoo.com + [66.218.66.76]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7MBkTZ05087 for ; Thu, 22 Aug 2002 12:46:29 +0100 +X-Egroups-Return: sentto-2242572-52726-1030016790-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.196] by n20.grp.scd.yahoo.com with NNFMP; + 22 Aug 2002 11:46:30 -0000 +X-Sender: steve.burt@cursor-system.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 22 Aug 2002 11:46:29 -0000 +Received: (qmail 11764 invoked from network); 22 Aug 2002 11:46:29 -0000 +Received: from unknown (66.218.66.217) by m3.grp.scd.yahoo.com with QMQP; + 22 Aug 2002 11:46:29 -0000 +Received: from unknown (HELO mailgateway.cursor-system.com) (62.189.7.27) + by mta2.grp.scd.yahoo.com with SMTP; 22 Aug 2002 11:46:29 -0000 +Received: from exchange1.cps.local (unverified) by + mailgateway.cursor-system.com (Content Technologies SMTPRS 4.2.10) with + ESMTP id for + ; Thu, 22 Aug 2002 13:14:10 +0100 +Received: by exchange1.cps.local with Internet Mail Service (5.5.2653.19) + id ; Thu, 22 Aug 2002 12:46:27 +0100 +Message-Id: <5EC2AD6D2314D14FB64BDA287D25D9EF12B4F6@exchange1.cps.local> +To: "'zzzzteana@yahoogroups.com'" +X-Mailer: Internet Mail Service (5.5.2653.19) +X-Egroups-From: Steve Burt +From: Steve Burt +X-Yahoo-Profile: pyruse +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 22 Aug 2002 12:46:18 +0100 +Subject: [zzzzteana] RE: Alexander +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Martin A posted: +Tassos Papadopoulos, the Greek sculptor behind the plan, judged that the + limestone of Mount Kerdylio, 70 miles east of Salonika and not far from the + Mount Athos monastic community, was ideal for the patriotic sculpture. + + As well as Alexander's granite features, 240 ft high and 170 ft wide, a + museum, a restored amphitheatre and car park for admiring crowds are +planned +--------------------- +So is this mountain limestone or granite? +If it's limestone, it'll weather pretty fast. + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00003.860e3c3cee1b42ead714c5c874fe25f7 b/Ch3/datasets/spam/easy_ham/00003.860e3c3cee1b42ead714c5c874fe25f7 new file mode 100644 index 000000000..c7cfbc84d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00003.860e3c3cee1b42ead714c5c874fe25f7 @@ -0,0 +1,82 @@ +From timc@2ubh.com Thu Aug 22 13:52:59 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0314547C66 + for ; Thu, 22 Aug 2002 08:52:58 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 13:52:59 +0100 (IST) +Received: from n16.grp.scd.yahoo.com (n16.grp.scd.yahoo.com + [66.218.66.71]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7MCrdZ07070 for ; Thu, 22 Aug 2002 13:53:39 +0100 +X-Egroups-Return: sentto-2242572-52733-1030020820-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.198] by n16.grp.scd.yahoo.com with NNFMP; + 22 Aug 2002 12:53:40 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 22 Aug 2002 12:53:39 -0000 +Received: (qmail 76099 invoked from network); 22 Aug 2002 12:53:39 -0000 +Received: from unknown (66.218.66.218) by m5.grp.scd.yahoo.com with QMQP; + 22 Aug 2002 12:53:39 -0000 +Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by + mta3.grp.scd.yahoo.com with SMTP; 22 Aug 2002 12:53:39 -0000 +Received: from host217-36-23-185.in-addr.btopenworld.com ([217.36.23.185]) + by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17hrT0-0004gj-00 + for forteana@yahoogroups.com; Thu, 22 Aug 2002 13:53:38 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 22 Aug 2002 13:52:38 +0100 +Subject: [zzzzteana] Moscow bomber +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Man Threatens Explosion In Moscow + +Thursday August 22, 2002 1:40 PM +MOSCOW (AP) - Security officers on Thursday seized an unidentified man who +said he was armed with explosives and threatened to blow up his truck in +front of Russia's Federal Security Services headquarters in Moscow, NTV +television reported. +The officers seized an automatic rifle the man was carrying, then the man +got out of the truck and was taken into custody, NTV said. No other details +were immediately available. +The man had demanded talks with high government officials, the Interfax and +ITAR-Tass news agencies said. Ekho Moskvy radio reported that he wanted to +talk with Russian President Vladimir Putin. +Police and security forces rushed to the Security Service building, within +blocks of the Kremlin, Red Square and the Bolshoi Ballet, and surrounded the +man, who claimed to have one and a half tons of explosives, the news +agencies said. Negotiations continued for about one and a half hours outside +the building, ITAR-Tass and Interfax reported, citing witnesses. +The man later drove away from the building, under police escort, and drove +to a street near Moscow's Olympic Penta Hotel, where authorities held +further negotiations with him, the Moscow police press service said. The +move appeared to be an attempt by security services to get him to a more +secure location. + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00004.864220c5b6930b209cc287c361c99af1 b/Ch3/datasets/spam/easy_ham/00004.864220c5b6930b209cc287c361c99af1 new file mode 100644 index 000000000..9a726c245 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00004.864220c5b6930b209cc287c361c99af1 @@ -0,0 +1,78 @@ +From irregulars-admin@tb.tf Thu Aug 22 14:23:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9DAE147C66 + for ; Thu, 22 Aug 2002 09:23:38 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 14:23:38 +0100 (IST) +Received: from web.tb.tf (route-64-131-126-36.telocity.com + [64.131.126.36]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MDGOZ07922 for ; Thu, 22 Aug 2002 14:16:24 +0100 +Received: from web.tb.tf (localhost.localdomain [127.0.0.1]) by web.tb.tf + (8.11.6/8.11.6) with ESMTP id g7MDP9I16418; Thu, 22 Aug 2002 09:25:09 + -0400 +Received: from red.harvee.home (red [192.168.25.1] (may be forged)) by + web.tb.tf (8.11.6/8.11.6) with ESMTP id g7MDO4I16408 for + ; Thu, 22 Aug 2002 09:24:04 -0400 +Received: from prserv.net (out4.prserv.net [32.97.166.34]) by + red.harvee.home (8.11.6/8.11.6) with ESMTP id g7MDFBD29237 for + ; Thu, 22 Aug 2002 09:15:12 -0400 +Received: from [209.202.248.109] + (slip-32-103-249-10.ma.us.prserv.net[32.103.249.10]) by prserv.net (out4) + with ESMTP id <2002082213150220405qu8jce>; Thu, 22 Aug 2002 13:15:07 +0000 +MIME-Version: 1.0 +X-Sender: @ (Unverified) +Message-Id: +To: undisclosed-recipient: ; +From: Monty Solomon +Content-Type: text/plain; charset="us-ascii" +Subject: [IRR] Klez: The Virus That Won't Die +Sender: irregulars-admin@tb.tf +Errors-To: irregulars-admin@tb.tf +X-Beenthere: irregulars@tb.tf +X-Mailman-Version: 2.0.6 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: New home of the TBTF Irregulars mailing list +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 09:15:25 -0400 + +Klez: The Virus That Won't Die + +Already the most prolific virus ever, Klez continues to wreak havoc. + +Andrew Brandt +>>From the September 2002 issue of PC World magazine +Posted Thursday, August 01, 2002 + + +The Klez worm is approaching its seventh month of wriggling across +the Web, making it one of the most persistent viruses ever. And +experts warn that it may be a harbinger of new viruses that use a +combination of pernicious approaches to go from PC to PC. + +Antivirus software makers Symantec and McAfee both report more than +2000 new infections daily, with no sign of letup at press time. The +British security firm MessageLabs estimates that 1 in every 300 +e-mail messages holds a variation of the Klez virus, and says that +Klez has already surpassed last summer's SirCam as the most prolific +virus ever. + +And some newer Klez variants aren't merely nuisances--they can carry +other viruses in them that corrupt your data. + +... + +http://www.pcworld.com/news/article/0,aid,103259,00.asp +_______________________________________________ +Irregulars mailing list +Irregulars@tb.tf +http://tb.tf/mailman/listinfo/irregulars + diff --git a/Ch3/datasets/spam/easy_ham/00005.bf27cdeaf0b8c4647ecd61b1d09da613 b/Ch3/datasets/spam/easy_ham/00005.bf27cdeaf0b8c4647ecd61b1d09da613 new file mode 100644 index 000000000..57b68015c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00005.bf27cdeaf0b8c4647ecd61b1d09da613 @@ -0,0 +1,77 @@ +From Stewart.Smith@ee.ed.ac.uk Thu Aug 22 14:44:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id EC69D47C66 + for ; Thu, 22 Aug 2002 09:44:25 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 14:44:25 +0100 (IST) +Received: from n6.grp.scd.yahoo.com (n6.grp.scd.yahoo.com [66.218.66.90]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7MDcOZ08504 for + ; Thu, 22 Aug 2002 14:38:25 +0100 +X-Egroups-Return: sentto-2242572-52736-1030023506-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.192] by n6.grp.scd.yahoo.com with NNFMP; + 22 Aug 2002 13:38:26 -0000 +X-Sender: Stewart.Smith@ee.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 22 Aug 2002 13:38:25 -0000 +Received: (qmail 48882 invoked from network); 22 Aug 2002 13:38:25 -0000 +Received: from unknown (66.218.66.218) by m10.grp.scd.yahoo.com with QMQP; + 22 Aug 2002 13:38:25 -0000 +Received: from unknown (HELO postbox.ee.ed.ac.uk) (129.215.80.253) by + mta3.grp.scd.yahoo.com with SMTP; 22 Aug 2002 13:38:24 -0000 +Received: from ee.ed.ac.uk (sxs@dunblane [129.215.34.86]) by + postbox.ee.ed.ac.uk (8.11.0/8.11.0) with ESMTP id g7MDcNi28645 for + ; Thu, 22 Aug 2002 14:38:23 +0100 (BST) +Message-Id: <3D64E94E.8060301@ee.ed.ac.uk> +Organization: Scottish Microelectronics Centre +User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.1b) Gecko/20020628 +X-Accept-Language: en, en-us +To: zzzzteana@yahoogroups.com +References: <3D64F325.11319.61EA648@localhost> +From: Stewart Smith +X-Yahoo-Profile: stochasticus +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 22 Aug 2002 14:38:22 +0100 +Subject: Re: [zzzzteana] Nothing like mama used to make +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +> in adding cream to spaghetti carbonara, which has the same effect on pasta as +> making a pizza a deep-pie; + +I just had to jump in here as Carbonara is one of my favourites to make and ask +what the hell are you supposed to use instead of cream? I've never seen a +recipe that hasn't used this. Personally I use low fat creme fraiche because it +works quite nicely but the only time I've seen an supposedly authentic recipe +for carbonara it was identical to mine (cream, eggs and lots of fresh parmesan) +except for the creme fraiche. + +Stew +-- +Stewart Smith +Scottish Microelectronics Centre, University of Edinburgh. +http://www.ee.ed.ac.uk/~sxs/ + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00006.253ea2f9a9cc36fa0b1129b04b806608 b/Ch3/datasets/spam/easy_ham/00006.253ea2f9a9cc36fa0b1129b04b806608 new file mode 100644 index 000000000..f3231fe4d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00006.253ea2f9a9cc36fa0b1129b04b806608 @@ -0,0 +1,74 @@ +From martin@srv0.ems.ed.ac.uk Thu Aug 22 14:54:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 16FC743F99 + for ; Thu, 22 Aug 2002 09:54:38 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 14:54:39 +0100 (IST) +Received: from n14.grp.scd.yahoo.com (n14.grp.scd.yahoo.com + [66.218.66.69]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7MDoxZ08960 for ; Thu, 22 Aug 2002 14:50:59 +0100 +X-Egroups-Return: sentto-2242572-52737-1030024261-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.95] by n14.grp.scd.yahoo.com with NNFMP; + 22 Aug 2002 13:51:01 -0000 +X-Sender: martin@srv0.ems.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 22 Aug 2002 13:51:00 -0000 +Received: (qmail 71894 invoked from network); 22 Aug 2002 13:51:00 -0000 +Received: from unknown (66.218.66.218) by m7.grp.scd.yahoo.com with QMQP; + 22 Aug 2002 13:51:00 -0000 +Received: from unknown (HELO haymarket.ed.ac.uk) (129.215.128.53) by + mta3.grp.scd.yahoo.com with SMTP; 22 Aug 2002 13:51:00 -0000 +Received: from srv0.ems.ed.ac.uk (srv0.ems.ed.ac.uk [129.215.117.0]) by + haymarket.ed.ac.uk (8.11.6/8.11.6) with ESMTP id g7MDow310334 for + ; Thu, 22 Aug 2002 14:50:59 +0100 (BST) +Received: from EMS-SRV0/SpoolDir by srv0.ems.ed.ac.uk (Mercury 1.44); + 22 Aug 02 14:50:58 +0000 +Received: from SpoolDir by EMS-SRV0 (Mercury 1.44); 22 Aug 02 14:50:31 +0000 +Organization: Management School +To: zzzzteana@yahoogroups.com +Message-Id: <3D64FA3C.13325.63A5960@localhost> +Priority: normal +In-Reply-To: <3D64E94E.8060301@ee.ed.ac.uk> +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Description: Mail message body +From: "Martin Adamson" +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 22 Aug 2002 14:50:31 +0100 +Subject: Re: [zzzzteana] Nothing like mama used to make +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + + +> I just had to jump in here as Carbonara is one of my favourites to make and +> ask +> what the hell are you supposed to use instead of cream? + +Isn't it just basically a mixture of beaten egg and bacon (or pancetta, +really)? You mix in the raw egg to the cooked pasta and the heat of the pasta +cooks the egg. That's my understanding. + +Martin + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00007.37a8af848caae585af4fe35779656d55 b/Ch3/datasets/spam/easy_ham/00007.37a8af848caae585af4fe35779656d55 new file mode 100644 index 000000000..a65f9b4c1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00007.37a8af848caae585af4fe35779656d55 @@ -0,0 +1,88 @@ +From martin@srv0.ems.ed.ac.uk Thu Aug 22 14:54:40 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E3D7B47C66 + for ; Thu, 22 Aug 2002 09:54:39 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 14:54:40 +0100 (IST) +Received: from n11.grp.scd.yahoo.com (n11.grp.scd.yahoo.com + [66.218.66.66]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7MDt8Z09193 for ; Thu, 22 Aug 2002 14:55:10 +0100 +X-Egroups-Return: sentto-2242572-52738-1030024499-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.94] by n11.grp.scd.yahoo.com with NNFMP; + 22 Aug 2002 13:55:03 -0000 +X-Sender: martin@srv0.ems.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 22 Aug 2002 13:54:59 -0000 +Received: (qmail 43039 invoked from network); 22 Aug 2002 13:54:58 -0000 +Received: from unknown (66.218.66.216) by m1.grp.scd.yahoo.com with QMQP; + 22 Aug 2002 13:54:58 -0000 +Received: from unknown (HELO haymarket.ed.ac.uk) (129.215.128.53) by + mta1.grp.scd.yahoo.com with SMTP; 22 Aug 2002 13:54:58 -0000 +Received: from srv0.ems.ed.ac.uk (srv0.ems.ed.ac.uk [129.215.117.0]) by + haymarket.ed.ac.uk (8.11.6/8.11.6) with ESMTP id g7MDsv311745 for + ; Thu, 22 Aug 2002 14:54:57 +0100 (BST) +Received: from EMS-SRV0/SpoolDir by srv0.ems.ed.ac.uk (Mercury 1.44); + 22 Aug 02 14:54:56 +0000 +Received: from SpoolDir by EMS-SRV0 (Mercury 1.44); 22 Aug 02 14:54:29 +0000 +Organization: Management School +To: zzzzteana@yahoogroups.com +Message-Id: <3D64FB27.18538.63DEC17@localhost> +Priority: normal +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Description: Mail message body +From: "Martin Adamson" +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 22 Aug 2002 14:54:25 +0100 +Subject: [zzzzteana] Playboy wants to go out with a bang +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7MDt8Z09193 + +The Scotsman - 22 August 2002 + + Playboy wants to go out with a bang + + + AN AGEING Berlin playboy has come up with an unusual offer to lure women into + his bed - by promising the last woman he sleeps with an inheritance of 250,000 + (£160,000). + + Rolf Eden, 72, a Berlin disco owner famous for his countless sex partners, + said he could imagine no better way to die than in the arms of an attractive + young woman - preferably under 30. + + "I put it all in my last will and testament - the last woman who sleeps with + me gets all the money," Mr Eden told Bild newspaper. + + "I want to pass away in the most beautiful moment of my life. First a lot of + fun with a beautiful woman, then wild sex, a final orgasm - and it will all + end with a heart attack and then I’m gone." + + Mr Eden, who is selling his nightclub this year, said applications should be + sent in quickly because of his age. "It could end very soon," he said. + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00008.5891548d921601906337dcf1ed8543cb b/Ch3/datasets/spam/easy_ham/00008.5891548d921601906337dcf1ed8543cb new file mode 100644 index 000000000..c245926dc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00008.5891548d921601906337dcf1ed8543cb @@ -0,0 +1,85 @@ +From Stewart.Smith@ee.ed.ac.uk Thu Aug 22 15:05:07 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id EF86747C67 + for ; Thu, 22 Aug 2002 10:05:00 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 15:05:01 +0100 (IST) +Received: from n34.grp.scd.yahoo.com (n34.grp.scd.yahoo.com + [66.218.66.102]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7ME1MZ09279 for ; Thu, 22 Aug 2002 15:01:22 +0100 +X-Egroups-Return: sentto-2242572-52739-1030024883-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.195] by n34.grp.scd.yahoo.com with NNFMP; + 22 Aug 2002 14:01:23 -0000 +X-Sender: Stewart.Smith@ee.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 22 Aug 2002 14:01:23 -0000 +Received: (qmail 45116 invoked from network); 22 Aug 2002 14:01:22 -0000 +Received: from unknown (66.218.66.218) by m2.grp.scd.yahoo.com with QMQP; + 22 Aug 2002 14:01:22 -0000 +Received: from unknown (HELO postbox.ee.ed.ac.uk) (129.215.80.253) by + mta3.grp.scd.yahoo.com with SMTP; 22 Aug 2002 14:01:22 -0000 +Received: from ee.ed.ac.uk (sxs@dunblane [129.215.34.86]) by + postbox.ee.ed.ac.uk (8.11.0/8.11.0) with ESMTP id g7ME1Li02942 for + ; Thu, 22 Aug 2002 15:01:21 +0100 (BST) +Message-Id: <3D64EEB0.2050502@ee.ed.ac.uk> +Organization: Scottish Microelectronics Centre +User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.1b) Gecko/20020628 +X-Accept-Language: en, en-us +To: zzzzteana@yahoogroups.com +References: <3D64FA3C.13325.63A5960@localhost> +From: Stewart Smith +X-Yahoo-Profile: stochasticus +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 22 Aug 2002 15:01:20 +0100 +Subject: Re: [zzzzteana] Nothing like mama used to make +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Martin Adamson wrote: +> +> Isn't it just basically a mixture of beaten egg and bacon (or pancetta, +> really)? You mix in the raw egg to the cooked pasta and the heat of the pasta +> cooks the egg. That's my understanding. +> + +You're probably right, mine's just the same but with the cream added to the +eggs. I guess I should try it without. Actually looking on the internet for a +recipe I found this one from possibly one of the scariest people I've ever seen, +and he's a US Congressman: + + +That's one of the worst non-smiles ever. + +Stew +ps. Apologies if any of the list's Maine residents voted for this man, you won't +do it again once you've seen this pic. + +-- +Stewart Smith +Scottish Microelectronics Centre, University of Edinburgh. +http://www.ee.ed.ac.uk/~sxs/ + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00009.371eca25b0169ce5cb4f71d3e07b9e2d b/Ch3/datasets/spam/easy_ham/00009.371eca25b0169ce5cb4f71d3e07b9e2d new file mode 100644 index 000000000..df071f62c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00009.371eca25b0169ce5cb4f71d3e07b9e2d @@ -0,0 +1,176 @@ +From martin@srv0.ems.ed.ac.uk Thu Aug 22 15:05:07 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7A0C347C68 + for ; Thu, 22 Aug 2002 10:05:03 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 15:05:03 +0100 (IST) +Received: from n34.grp.scd.yahoo.com (n34.grp.scd.yahoo.com + [66.218.66.102]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7ME1rZ09290 for ; Thu, 22 Aug 2002 15:01:54 +0100 +X-Egroups-Return: sentto-2242572-52740-1030024915-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.194] by n34.grp.scd.yahoo.com with NNFMP; + 22 Aug 2002 14:01:55 -0000 +X-Sender: martin@srv0.ems.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 22 Aug 2002 14:01:55 -0000 +Received: (qmail 59494 invoked from network); 22 Aug 2002 14:01:55 -0000 +Received: from unknown (66.218.66.218) by m12.grp.scd.yahoo.com with QMQP; + 22 Aug 2002 14:01:55 -0000 +Received: from unknown (HELO haymarket.ed.ac.uk) (129.215.128.53) by + mta3.grp.scd.yahoo.com with SMTP; 22 Aug 2002 14:01:54 -0000 +Received: from srv0.ems.ed.ac.uk (srv0.ems.ed.ac.uk [129.215.117.0]) by + haymarket.ed.ac.uk (8.11.6/8.11.6) with ESMTP id g7ME1r313981 for + ; Thu, 22 Aug 2002 15:01:53 +0100 (BST) +Received: from EMS-SRV0/SpoolDir by srv0.ems.ed.ac.uk (Mercury 1.44); + 22 Aug 02 15:01:52 +0000 +Received: from SpoolDir by EMS-SRV0 (Mercury 1.44); 22 Aug 02 15:01:34 +0000 +Organization: Management School +To: zzzzteana@yahoogroups.com +Message-Id: <3D64FCD2.20705.6447320@localhost> +Priority: normal +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Description: Mail message body +From: "Martin Adamson" +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 22 Aug 2002 15:01:33 +0100 +Subject: [zzzzteana] Meaningful sentences +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7ME1rZ09290 + +The Scotsman + + Thu 22 Aug 2002 + + Meaningful sentences + + Tracey Lawson + + + If you ever wanted to look like "one of the most dangerous inmates in prison + history", as one judge described Charles Bronson, now’s your chance. Bronson - + the serial hostage taker, not the movie star - has written a health and + fitness guide in which he shares some of the secrets behind his legendary + muscle power. + + Solitary Fitness - a title which bears testament to the fact that Bronson, 48, + has spent 24 of his 28 prison years in solitary confinement - explains how he + has turned himself into a lean, mean, fitness machine while living 23 hours a + day in a space just 12 feet by eight feet, on a diet of scrubs grub and at + virtually no cost. + + The book is aimed at those who want to get fabulously fit without spending a + fortune on gym memberships, protein supplements or designer trainers, and + starts with a fierce attack on some of the expensive myths churned out by the + exercise industry. + + "I pick up a fitness mag, I start to laugh and I wipe my arse with it," is the + opening paragraph penned by Bronson. "It’s a joke and a big con and they call + me a criminal!" You can’t help feeling he has a point. + + This is not the first book that Bronson has written from behind bars, having + already published Birdman Opens His Mind, which features drawings and poems + created by Bronson while in prison. And he is not the first prisoner to + discover creative expression while residing at Her Majesty’s pleasure. + + Jimmy Boyle, the Scots sculptor and novelist, discovered his artistic talents + when he was sent to Barlinnie Prison’s famous special unit, which aimed to + help inmates put their violent pasts behind them by teaching them how to + express their emotions artistically. Boyle was sentenced to life for the + murder of "Babs" Rooney in 1967. Once released, he moved to Edinburgh where he + has become a respected artist. His first novel, Hero of the Underworld, was + published in 1999 and his autobiography, A Sense of Freedom, was made into an + award-winning film. + + Hugh Collins was jailed for life in 1977 for the murder of William Mooney in + Glasgow, and in his first year in Barlinnie prison stabbed three prison + officers, earning him an extra seven-year sentence. But, after being + transferred to the same unit that Boyle attended, he learned to sculpt and + developed an interest in art. He later published Autobiography of a Murderer, + a frank account of Glasgow’s criminal culture in the 1960s, which received + critical praise. + + And Lord Archer doesn’t seem to have had trouble continuing to write the books + that have made him millions while in jail. He recently signed a three-book + deal with Macmillan publishers worth a reported £10 million, and is no doubt + scribbling away as we speak. + + So why is it that men like Collins, Bronson and Boyle, who can be so + destructive towards society on the outside, can become so creative once stuck + on the inside? Steve Richards, Bronson’s publisher, has published many books + about criminal figures and believes the roots of this phenomenon are both + pragmatic and profound. + + He says: "Prison is sometimes the first time some criminals will ever have + known a stable environment, and this can be the first time they have the + chance to focus on their creative skills. + + "It may also be the first time that they have really had the chance of an + education, if their early years have been hard. It could be the first time + anyone has offered them the chance to explore their creative talents." + + However, Richards believes the reasons are also deeper than that. He says: + "Once they are behind bars, the cold light of day hits them, and they examine + the very essence of who they are. + + "They ask themselves, am I a man who wants to be remembered for violence? Or + am I a man who can contribute to society, who can be remembered for something + good?" + + Bronson - who was born Michael Gordon Peterson, but changed his name to that + of the Hollywood star of the Death Wish films - has, so far, been remembered + mainly for things bad. He was originally jailed for seven years for armed + robbery in 1974, and has had a series of sentences added to his original term + over the years as a result of attacking people in prison. In 2000 he was + jailed for life after being convicted of holding a teacher hostage for nearly + two days during a jail siege. + + Standing five feet ten and a half inches tall and weighing 210lbs, he is + renowned for his strength. He has bent metal cell doors with his bare hands + and does up to 3,000 - yes, 3,000 - press-ups a day. As he puts it: "I can hit + a man 20 times in four seconds, I can push 132 press ups in 60 seconds." + + But judging by our current obsession with health and exercise, Solitary + Fitness might be the book which will see Bronson’s face sitting on every + coffee table in the land. He might be the man to give us the dream body which + so many so-called fitness gurus promise but fail to motivate us into. Because + Bronson has learned to use words as powerfully as he can use his fists. + + "All this crap about high-protein drinks, pills, diets, it’s just a load of + bollocks and a multi-million-pound racket," he writes, in what can only be + described as a refreshingly honest style. "We can all be fat lazy bastards, + it’s our choice, I’m sick of hearing and reading about excuses, if you stuff + your face with shit you become shit, that’s logical to me." + + As motivational mantras go, that might be just the kick up the, er, backside + we all needed. + + + Solitary Fitness by Charles Bronson is published by Mirage Publishing and will + be available in bookstores from October at £7.99 + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00010.145d22c053c1a0c410242e46c01635b3 b/Ch3/datasets/spam/easy_ham/00010.145d22c053c1a0c410242e46c01635b3 new file mode 100644 index 000000000..cf1e860f9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00010.145d22c053c1a0c410242e46c01635b3 @@ -0,0 +1,70 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 22 15:25:29 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B48D543F99 + for ; Thu, 22 Aug 2002 10:25:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 15:25:28 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MEI8Z09886 for ; Thu, 22 Aug 2002 15:18:08 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hskl-0002W7-00; Thu, + 22 Aug 2002 07:16:03 -0700 +Received: from mail-gr-oh.networksonline.com ([65.163.204.6]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17hskN-0008Ox-00 for ; + Thu, 22 Aug 2002 07:15:39 -0700 +Received: from mordor (mordor.networksonline.com [65.163.204.19]) by + mail-gr-oh.networksonline.com (Postfix) with SMTP id C06C537794 for + ; Thu, 22 Aug 2002 10:13:48 -0400 + (EDT) +Message-Id: <001001c249e6$863c4e00$13cca341@networksonline.com> +From: "NOI Administrator" +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Subject: [SAtalk] SA CGI Configurator Scripts +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 10:16:36 -0400 +Date: Thu, 22 Aug 2002 10:16:36 -0400 + +I have been trying to research via SA mirrors and search engines if a canned +script exists giving clients access to their user_prefs options via a +web-based CGI interface. Numerous ISPs provide this feature to clients, but +so far I can find nothing. Our configuration uses Amavis-Postfix and ClamAV +for virus filtering and Procmail with SpamAssassin for spam filtering. I +would prefer not to have to write a script myself, but will appreciate any +suggestions. + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/00011.fbcde1b4833bdbaaf0ced723edd6e355 b/Ch3/datasets/spam/easy_ham/00011.fbcde1b4833bdbaaf0ced723edd6e355 new file mode 100644 index 000000000..5d9e18aa6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00011.fbcde1b4833bdbaaf0ced723edd6e355 @@ -0,0 +1,72 @@ +From spamassassin-devel-admin@lists.sourceforge.net Thu Aug 22 15:25:29 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AE2D043F9B + for ; Thu, 22 Aug 2002 10:25:29 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 15:25:29 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MENlZ09984 for ; Thu, 22 Aug 2002 15:23:47 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hsof-00042r-00; Thu, + 22 Aug 2002 07:20:05 -0700 +Received: from vivi.uptime.at ([62.116.87.11] helo=mail.uptime.at) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17hsoM-0000Ge-00 for ; + Thu, 22 Aug 2002 07:19:47 -0700 +Received: from [192.168.0.4] (chello062178142216.4.14.vie.surfer.at + [62.178.142.216]) (authenticated bits=0) by mail.uptime.at (8.12.5/8.12.5) + with ESMTP id g7MEI7Vp022036 for + ; Thu, 22 Aug 2002 16:18:07 + +0200 +User-Agent: Microsoft-Entourage/10.0.0.1309 +From: David H=?ISO-8859-1?B?9g==?=hn +To: +Message-Id: +MIME-Version: 1.0 +X-Trusted: YES +X-From-Laptop: YES +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Mailscanner: Nothing found, baby +Subject: [SAdev] Interesting approach to Spam handling.. +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 16:19:48 +0200 +Date: Thu, 22 Aug 2002 16:19:48 +0200 + +Hello, have you seen and discussed this article and his approach? + +Thank you + +http://www.paulgraham.com/spam.html +-- "Hell, there are no rules here-- we're trying to accomplish something." +-- Thomas Alva Edison + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/00012.48a387bc38d1316a6f6b49e8c2e43a03 b/Ch3/datasets/spam/easy_ham/00012.48a387bc38d1316a6f6b49e8c2e43a03 new file mode 100644 index 000000000..30cd18cf3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00012.48a387bc38d1316a6f6b49e8c2e43a03 @@ -0,0 +1,79 @@ +From spamassassin-devel-admin@lists.sourceforge.net Thu Aug 22 16:27:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id DF2DD43F9B + for ; Thu, 22 Aug 2002 11:27:24 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 16:27:24 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MFJHZ11964 for ; Thu, 22 Aug 2002 16:19:17 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17htfq-0001G0-00; Thu, + 22 Aug 2002 08:15:02 -0700 +Received: from www.ctyme.com ([209.237.228.10] helo=darwin.ctyme.com) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17htfa-0006Zq-00 for + ; Thu, 22 Aug 2002 08:14:47 + -0700 +Received: from m206-56.dsl.tsoft.com ([198.144.206.56] helo=perkel.com) by + darwin.ctyme.com with asmtp (TLSv1:RC4-MD5:128) (Exim 3.35 #1) id + 17htgP-0004te-00; Thu, 22 Aug 2002 08:15:37 -0700 +Message-Id: <3D64FFC4.5010908@perkel.com> +From: Marc Perkel +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.1b) + Gecko/20020721 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Theo Van Dinter +Cc: spamassassin-devel@example.sourceforge.net +Subject: Re: [SAdev] Live Rule Updates after Release ??? +References: <3D64F4E8.7040000@perkel.com> <20020822151134.GD6369@kluge.net> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 08:14:12 -0700 +Date: Thu, 22 Aug 2002 08:14:12 -0700 + +Yes - great minds think alike. But even withput eval rules it would be very +useful. It would allow us to respond quickly to spammer's tricks. + +Theo Van Dinter wrote: +> On Thu, Aug 22, 2002 at 07:27:52AM -0700, Marc Perkel wrote: +> +>>Has anyone though of the idea of live updates of rules after release? The +>>idea being that the user can run a cron job once a week or so and get the +>>new default rule set. This would allow us to react faster to: +> +> +> I suggested this a few months ago. I don't remember the details of what +> came out of it except that it would only be useful for non-eval rules +> since those require code changes. +> + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/00013.81c34741dbed59c6dde50777e27e7ea3 b/Ch3/datasets/spam/easy_ham/00013.81c34741dbed59c6dde50777e27e7ea3 new file mode 100644 index 000000000..327722a5b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00013.81c34741dbed59c6dde50777e27e7ea3 @@ -0,0 +1,76 @@ +From ilug-admin@linux.ie Thu Aug 22 16:27:21 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7A28A43F99 + for ; Thu, 22 Aug 2002 11:27:21 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 16:27:21 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MFQmZ12280 for + ; Thu, 22 Aug 2002 16:26:48 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA07188; Thu, 22 Aug 2002 16:25:32 +0100 +Received: from moe.jinny.ie ([193.120.171.3]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA07145 for ; Thu, + 22 Aug 2002 16:25:24 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host [193.120.171.3] claimed to + be moe.jinny.ie +Received: from jlooney.jinny.ie (unknown [193.120.171.2]) by moe.jinny.ie + (Postfix) with ESMTP id 938BD7FC46; Thu, 22 Aug 2002 16:25:23 +0100 (IST) +Received: by jlooney.jinny.ie (Postfix, from userid 500) id 4F57189D; + Thu, 22 Aug 2002 16:25:45 +0100 (IST) +Date: Thu, 22 Aug 2002 16:25:45 +0100 +From: "John P. Looney" +To: linux-raid@vger.kernel.org +Cc: ilug@linux.ie +Message-Id: <20020822152545.GJ3670@jinny.ie> +Reply-To: valen@tuatha.org +Mail-Followup-To: linux-raid@vger.kernel.org, ilug@linux.ie +References: <200208172056.g7HKuHm05754@raq.iceblink.org> + <1029624922.14769.119.camel@atherton> <20020819140815.GY26818@jinny.ie> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <20020819140815.GY26818@jinny.ie> +User-Agent: Mutt/1.4i +X-Os: Red Hat Linux 7.3/Linux 2.4.18-3 +X-Url: http://www.redbrick.dcu.ie/~valen +X-Gnupg-Publickey: http://www.redbrick.dcu.ie/~valen/public.asc +Subject: [ILUG] Re: Problems with RAID1 on cobalt raq3 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +On Mon, Aug 19, 2002 at 03:08:16PM +0100, John P. Looney mentioned: +> This is likely because to get it to boot, like the cobalt, I'm actually +> passing root=/dev/hda5 to the kernel, not /dev/md0. + + Just to solve this...the reason I was booting the box with +root=/dev/hda5, not /dev/md0 was because /dev/md0 wasn't booting - it +would barf with 'can't find init'. + + It turns out that this is because I was populating md0 with tar. Which +seems to have 'issues' with crosslinked files - for instance, it was +trying to make a hard link of glibc.so to hda - and failing. It was only +as I did it again with a friend present, that he spotted the errors, and +queried them. We noticed that the hard linked files just didn't exist on +the new rootfs. + + When we duplicated the filesystems with dump instead of tar, it worked +fine, I was able to tell lilo to use root=/dev/md0 and everything worked. + + Woohoo. + +Kate + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00014.cb20e10b2bfcb8210a1c310798532a57 b/Ch3/datasets/spam/easy_ham/00014.cb20e10b2bfcb8210a1c310798532a57 new file mode 100644 index 000000000..596814d5a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00014.cb20e10b2bfcb8210a1c310798532a57 @@ -0,0 +1,146 @@ +From exmh-workers-admin@redhat.com Thu Aug 22 16:37:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 50AF343F9B + for ; Thu, 22 Aug 2002 11:37:35 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 16:37:35 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MFZLZ12577 for + ; Thu, 22 Aug 2002 16:35:22 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 51F5140D92; Thu, 22 Aug 2002 + 11:35:26 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 6EED940E00 + for ; Thu, 22 Aug 2002 11:26:01 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MFPwB25414 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 11:25:58 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MFPwY25410 for + ; Thu, 22 Aug 2002 11:25:58 -0400 +Received: from austin-jump.vircio.com + (IDENT:+BhY7EqRf5fwVT64o4aVh7UUHF1egIL+@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7MFBTl04916 + for ; Thu, 22 Aug 2002 11:11:29 -0400 +Received: (qmail 4141 invoked by uid 104); 22 Aug 2002 15:25:57 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4218. . Clean. Processed in 0.327895 + secs); 22/08/2002 10:25:57 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 22 Aug 2002 15:25:56 -0000 +Received: (qmail 13189 invoked from network); 22 Aug 2002 15:25:53 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?AL1b20iTMIHwZbG9ZCdQYQG3nsIe5jbe?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 22 Aug 2002 15:25:53 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Robert Elz , exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <1029944441.398.TMDA@deepeddy.vircio.com> +References: <1029882468.3116.TMDA@deepeddy.vircio.com> + <9627.1029933001@munnari.OZ.AU> + <1029943066.26919.TMDA@deepeddy.vircio.com> + <1029944441.398.TMDA@deepeddy.vircio.com> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-1317289252P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030029953.13171.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 10:25:52 -0500 + +--==_Exmh_-1317289252P +Content-Type: text/plain; charset=us-ascii + +> From: Chris Garrigues +> Date: Wed, 21 Aug 2002 10:40:39 -0500 +> +> > From: Chris Garrigues +> > Date: Wed, 21 Aug 2002 10:17:45 -0500 +> > +> > Ouch...I'll get right on it. +> > +> > > From: Robert Elz +> > > Date: Wed, 21 Aug 2002 19:30:01 +0700 +> > > +> > > Any chance of having that lengthen instead? I like all my exmh stuff +> > > in nice columns (fits the display better). That is, I use the detache +> d +> > > folder list, one column. The main exmh window takes up full screen, +> > > top to bottom, but less than half the width, etc... +> +> I thought about that. The first order approximation would be to just add +> using pack .... -side top instead of pack ... -side left, however, since their +> each a different width, it would look funny. + +I've done this. It's not as pretty as I think it should be, but it works. +I'm going to leave the cosmetic issues to others. When I update the +documentation, I'll add this to the exmh.TODO file. + +I'm leaving for a 2 1/2 week vacation in a week, so this is the last new +functionality I'm going to add for a while. Also, I now have pretty much +everything in there that I want for my own use, so I'm probably pretty much +done. I'll work on bug fixes and documentation before my vacation, and +hopefully do nothing more afterwards. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-1317289252P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9ZQJ/K9b4h5R0IUIRAiPuAJwL4mUus5whLNQZC8MsDlGpEdKNrACcDfZH +PcGgN9frLIM+C5Z3vagi2wE= +=qJoJ +-----END PGP SIGNATURE----- + +--==_Exmh_-1317289252P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00015.4d7026347ba7478c9db04c70913e68fd b/Ch3/datasets/spam/easy_ham/00015.4d7026347ba7478c9db04c70913e68fd new file mode 100644 index 000000000..e2ef9d6f7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00015.4d7026347ba7478c9db04c70913e68fd @@ -0,0 +1,133 @@ +From fork-admin@xent.com Thu Aug 22 16:37:41 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5DB9843F99 + for ; Thu, 22 Aug 2002 11:37:40 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 16:37:40 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7MFbVZ12617 for ; + Thu, 22 Aug 2002 16:37:32 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D8D5029409A; Thu, 22 Aug 2002 08:35:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id 3703F294099 for + ; Thu, 22 Aug 2002 08:34:40 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17htxj-0008Ad-00 for ; Thu, 22 Aug 2002 12:33:31 -0300 +Message-Id: <3D6505C3.2020405@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.0) Gecko/20020530 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: The case for spam +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 12:39:47 -0300 + +SpamAssassin is hurting democracy! +Owen +--------------------------------------------------------------------------------------------------------------------- + +http://www.bayarea.com/mld/mercurynews/news/opinion/3900215.htm + +Internet can level the political playing field +By Mike McCurry and Larry Purpuro + +NOT many months from now, people across the country will experience one +of the great recurring features of American democracy. At shopping +malls, on factory floors, at church socials and even on our front +stoops, we will be approached by individuals who want to represent us in +public office. While chances are high that we won't know them +personally, they will walk up to us, offer a handshake and a flier and +ask for our votes. + +Just as technology is affecting every other area of communication, it +has begun to affect the way political candidates communicate with voters. + +In this year's GOP gubernatorial primary, California Secretary of State +Bill Jones, who faced better-funded candidates, acquired the e-mail +addresses of more than a million potential California voters and sent +each an unsolicited e-mail asking for support. + +That day, he might have chosen any of the more traditional -- and more +expensive -- methods of contacting voters, such as direct mail, radio +spots or TV ads. But he spent only about 2 cents per message, instead of +35 cents or more per message for direct mail or in another medium. + +Had Jones chosen direct mail, radio or TV, that communication would have +been equally ``unsolicited,'' as defined in the e-mail world. Few voters +would have ``opted in'' to receive campaign information from Jones +through any of those channels. + +The response to Jones' e-mail effort, however, was swift and intense. He +was lambasted by anti-spam advocates, and media coverage was almost +entirely negative. To be fair, some of Jones' tactics could have been +refined. He used a less-than-perfect list and no standard-practice +``paid for'' disclaimer in the message. + +His detractors, however, attacked him not for his tactical miscues but +because the e-mail was sent unsolicited. In fact, Jones' online campaign +may have been his most visible asset. In an era of cynicism toward money +in politics -- money typically spent on other unsolicited communication +mediums -- Jones tried to level the playing field. + +No one likes commercial spam. It is irrelevant and untargeted and can be +highly intrusive and even offensive. But as a sophisticated society, +it's time to differentiate commercial spam from very different +unsolicited e-mail sent by political candidates to voters. + +The debate is particularly relevant in light of legislation in Congress +that would constitute the first federal law to directly address spam. We +believe e-mail is no more intrusive than direct mail, telemarketing or +TV advertising when it comes to politicians seeking to reach voters. A +simple link in good e-mail campaigns allows recipients to opt out of +future mailings. Direct mail takes at least a phone call or stamp to be +taken off a list, and viewers must repeatedly endure TV ads. + +When a candidate lacks a large campaign war chest, he or she can use the +Internet to provide constituents with information to better prepare them +to perform their civic duty of casting educated votes. With more than 60 +percent of all potential voters in this country possessing e-mail +accounts, it makes sense that political candidates use this medium. + +Candidates might avoid some of the tactical problems encountered by the +Jones campaign if they use the technologies available today that better +ensure quality of e-mail lists and target content to specific recipient +groups. + +But the broader point remains. When a political candidate sends a voter +an e-mail, that recipient can choose to delete the message without +opening it, unsubscribe from the list, read it or even reply and engage +the sender. That choice should belong to the voter -- not to anti-spam +advocates whose efforts are better focused on commercial e-mail. +Political candidates should be free to communicate with voters as best +they can, and let voters decide what to do with that information. + + +-------------------------------------------------------------------------------- +Mike McCurry, former press secretary for President Clinton, is CEO of an +advocacy management and communications software company. Larry Purpuro, +the former Republican National Committee deputy chief of staff, is +founder and president of a political e-marketing firm. This was written +for the Los Angeles Times. + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00016.ef397cef16f8041242e3b6560e168053 b/Ch3/datasets/spam/easy_ham/00016.ef397cef16f8041242e3b6560e168053 new file mode 100644 index 000000000..1545d5aef --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00016.ef397cef16f8041242e3b6560e168053 @@ -0,0 +1,67 @@ +From iiu-admin@taint.org Thu Aug 22 17:08:44 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B989743F9B + for ; Thu, 22 Aug 2002 12:08:43 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 17:08:43 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MG0MZ13369; + Thu, 22 Aug 2002 17:00:22 +0100 +Received: from hawk.dcu.ie (mail.dcu.ie [136.206.1.5]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MFxBZ13285 for + ; Thu, 22 Aug 2002 16:59:11 +0100 +Received: from dcu.ie (136.206.21.115) by hawk.dcu.ie (6.0.040) id + 3D6203D3000136AD for iiu@taint.org; Thu, 22 Aug 2002 16:59:17 +0100 +Message-Id: <3D650A2D.1000301@dcu.ie> +From: Bernard Michael Tyers +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0.0) + Gecko/20020530 +X-Accept-Language: ga, en-ie, eu, en-us, de-at, as +MIME-Version: 1.0 +To: iiu +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Subject: [IIU] Eircom aDSL Nat'ing +Sender: iiu-admin@taint.org +Errors-To: iiu-admin@taint.org +X-Beenthere: iiu@iiu.taint.org +X-Mailman-Version: 2.0.10 +Precedence: bulk +Reply-To: iiu@taint.org +List-Unsubscribe: , + +List-Id: Irish Internet Users +List-Post: +List-Help: +List-Subscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 16:58:37 +0100 + +Hi all, + +apologies for the possible silly question (i don't think it is, but), +but is Eircom's aDSL service NAT'ed? + +and what implications would that have for VoIP? I know there are +difficulties with VoIP or connecting to clients connected to a NAT'ed +network from the internet wild (i.e. machines with static, real IPs) + +any help pointers would be helpful, + +cheers +-- +rgrds, +Bernard +-- +Bernard Tyers * National Centre for Sensor Research * P:353-1-700-5273 * +E: bernard.tyers@dcu.ie * W: www.physics.dcu.ie/~bty * L:N117 + +_______________________________________________ +IIU mailing list +IIU@iiu.taint.org +http://iiu.taint.org/mailman/listinfo/iiu + diff --git a/Ch3/datasets/spam/easy_ham/00017.08ef2d89f14cf7e2a458b80697eb1837 b/Ch3/datasets/spam/easy_ham/00017.08ef2d89f14cf7e2a458b80697eb1837 new file mode 100644 index 000000000..b08578571 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00017.08ef2d89f14cf7e2a458b80697eb1837 @@ -0,0 +1,81 @@ +From robert.chambers@baesystems.com Thu Aug 22 17:19:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id F2AD843F99 + for ; Thu, 22 Aug 2002 12:19:25 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 17:19:26 +0100 (IST) +Received: from n8.grp.scd.yahoo.com (n8.grp.scd.yahoo.com [66.218.66.92]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7MGBSZ13944 for + ; Thu, 22 Aug 2002 17:11:28 +0100 +X-Egroups-Return: sentto-2242572-52742-1030032689-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.196] by n8.grp.scd.yahoo.com with NNFMP; + 22 Aug 2002 16:11:29 -0000 +X-Sender: robert.chambers@baesystems.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 22 Aug 2002 16:11:28 -0000 +Received: (qmail 71045 invoked from network); 22 Aug 2002 16:11:28 -0000 +Received: from unknown (66.218.66.217) by m3.grp.scd.yahoo.com with QMQP; + 22 Aug 2002 16:11:28 -0000 +Received: from unknown (HELO n19.grp.scd.yahoo.com) (66.218.66.74) by + mta2.grp.scd.yahoo.com with SMTP; 22 Aug 2002 16:11:28 -0000 +Received: from [66.218.67.174] by n19.grp.scd.yahoo.com with NNFMP; + 22 Aug 2002 16:11:27 -0000 +To: zzzzteana@yahoogroups.com +Message-Id: +In-Reply-To: <000701c248f5$1cd98500$508827d9@b5w3e9> +User-Agent: eGroups-EW/0.82 +X-Mailer: Yahoo Groups Message Poster +From: "uncle_slacky" +X-Originating-Ip: 20.138.254.2 +X-Yahoo-Profile: uncle_slacky +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 22 Aug 2002 16:11:27 -0000 +Subject: [zzzzteana] Re: Australian Catholic Kiddie Perv Steps Aside +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +--- In forteana@y..., "D.McMann" wrote: +> Robert Moaby, 33, who sent death threats to staff, was also jailed +> for hoarding indecent pictures of children on his home computer. +> ========= +> +> Hmm, if I didn't trust our government and secret police, I could +look at +> this another way.... + +There is a bit of circumstantial evidence - apparently some MT +listers were approached by him (via email) - a little research in +dejanews/google groups showed a number of messages from him, clearly +hoping to contact girls, appearing in "alt.teens" and similar groups - + I just tried a Google Groups search on "Robert Moaby" and some of +them came top of the list. + +Note for Marie - "MT" stands for Mark Thomas, a slightly slimmer, UK +version of your Michael Moore - the mailing list is named after him. + +Rob + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00018.6fee38026193b5adde4b56892a6f14bc b/Ch3/datasets/spam/easy_ham/00018.6fee38026193b5adde4b56892a6f14bc new file mode 100644 index 000000000..9e406f2b2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00018.6fee38026193b5adde4b56892a6f14bc @@ -0,0 +1,75 @@ +From ilug-admin@linux.ie Thu Aug 22 17:19:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6622747C69 + for ; Thu, 22 Aug 2002 12:19:23 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 17:19:23 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MGJoZ14241 for + ; Thu, 22 Aug 2002 17:19:50 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id RAA09942; Thu, 22 Aug 2002 17:18:58 +0100 +Received: from smtpstore.strencom.net (ns1.strencom.net [217.75.0.66]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id RAA09917 for ; + Thu, 22 Aug 2002 17:18:50 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host ns1.strencom.net + [217.75.0.66] claimed to be smtpstore.strencom.net +Received: from enterprise.wasptech.com (mail.wasptech.com [217.75.2.106]) + by smtpstore.strencom.net (Postfix) with ESMTP id 8C105CEE88; + Thu, 22 Aug 2002 16:31:15 +0000 (AZOST) +X-Mimeole: Produced By Microsoft Exchange V6.0.5762.3 +Content-Class: urn:content-classes:message +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Subject: RE: [ILUG] Sun Solaris.. +Date: Thu, 22 Aug 2002 17:13:01 +0100 +Message-Id: <45130FBE2F203649A4BABDB848A9C9D00E9C8A@enterprise.wasptech.com> +X-MS-Has-Attach: +X-MS-Tnef-Correlator: +Thread-Topic: [ILUG] Sun Solaris.. +Thread-Index: AcJJ9p29v19nVAypRv25aSssWGeNQAAABtrw +From: "Fergal Moran" +To: "Kiall Mac Innes" , "ILUG" +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by lugh.tuatha.org id + RAA09917 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +In a nutshell - Solaris is Suns own flavour of UNIX. + +> -----Original Message----- +> From: Kiall Mac Innes [mailto:kiall@redpie.com] +> Sent: 22 August 2002 17:23 +> To: ILUG +> Subject: [ILUG] Sun Solaris.. +> +> +> Can someone explain what type of operating system Solaris +> is... as ive never seen or used it i dont know wheather to +> get a server from Sun or from DELL i would prefer a linux +> based server and Sun seems to be the one for that but im not +> sure if Solaris is a distro of linux or a completely +> different operating system? can someone explain... +> +> Kiall Mac Innes +> +> +> -- +> Irish Linux Users' Group: ilug@linux.ie +> http://www.linux.ie/mailman/listinfo/ilug for +> (un)subscription information. List maintainer: listmaster@linux.ie +> + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00019.5322cb10d8819b39499924d852819c27 b/Ch3/datasets/spam/easy_ham/00019.5322cb10d8819b39499924d852819c27 new file mode 100644 index 000000000..0089fb720 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00019.5322cb10d8819b39499924d852819c27 @@ -0,0 +1,65 @@ +From robert.chambers@baesystems.com Thu Aug 22 17:19:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C1E1343F9B + for ; Thu, 22 Aug 2002 12:19:26 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 17:19:26 +0100 (IST) +Received: from n23.grp.scd.yahoo.com (n23.grp.scd.yahoo.com + [66.218.66.79]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7MGHeZ14192 for ; Thu, 22 Aug 2002 17:17:41 +0100 +X-Egroups-Return: sentto-2242572-52743-1030033059-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.201] by n23.grp.scd.yahoo.com with NNFMP; + 22 Aug 2002 16:17:41 -0000 +X-Sender: robert.chambers@baesystems.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 22 Aug 2002 16:17:39 -0000 +Received: (qmail 96345 invoked from network); 22 Aug 2002 16:17:38 -0000 +Received: from unknown (66.218.66.218) by m9.grp.scd.yahoo.com with QMQP; + 22 Aug 2002 16:17:38 -0000 +Received: from unknown (HELO n10.grp.scd.yahoo.com) (66.218.66.65) by + mta3.grp.scd.yahoo.com with SMTP; 22 Aug 2002 16:17:40 -0000 +Received: from [66.218.67.189] by n10.grp.scd.yahoo.com with NNFMP; + 22 Aug 2002 16:17:40 -0000 +To: zzzzteana@yahoogroups.com +Message-Id: +User-Agent: eGroups-EW/0.82 +X-Mailer: Yahoo Groups Message Poster +From: "uncle_slacky" +X-Originating-Ip: 20.138.254.2 +X-Yahoo-Profile: uncle_slacky +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 22 Aug 2002 16:17:39 -0000 +Subject: [zzzzteana] Which Muppet Are You? +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Apols if this has been posted before: + +http://www.pinkpaperclips.net/subs/quiz2.html + +Rob + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00020.d10651e31fcb92630c6229ec773cfe26 b/Ch3/datasets/spam/easy_ham/00020.d10651e31fcb92630c6229ec773cfe26 new file mode 100644 index 000000000..5ba4f28b9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00020.d10651e31fcb92630c6229ec773cfe26 @@ -0,0 +1,56 @@ +From ilug-admin@linux.ie Thu Aug 22 17:19:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id CD34B47C67 + for ; Thu, 22 Aug 2002 12:19:21 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 17:19:21 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MGHJZ14177 for + ; Thu, 22 Aug 2002 17:17:19 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id RAA09581; Thu, 22 Aug 2002 17:16:28 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from redpie.com (redpie.com [216.122.135.208] (may be forged)) + by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id RAA09518 for + ; Thu, 22 Aug 2002 17:16:08 +0100 +Received: from justin ([194.46.28.223]) by redpie.com (8.8.7/8.8.5) with + SMTP id JAA05201 for ; Thu, 22 Aug 2002 09:15:59 -0700 + (PDT) +From: "Kiall Mac Innes" +To: "ILUG" +Date: Thu, 22 Aug 2002 17:23:15 +0100 +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Importance: Normal +Subject: [ILUG] Sun Solaris.. +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Can someone explain what type of operating system Solaris is... as ive never +seen or used it i dont know wheather to get a server from Sun or from DELL i +would prefer a linux based server and Sun seems to be the one for that but +im not sure if Solaris is a distro of linux or a completely different +operating system? can someone explain... + +Kiall Mac Innes + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00021.607c41268c5b0d66e81b58713a66d12c b/Ch3/datasets/spam/easy_ham/00021.607c41268c5b0d66e81b58713a66d12c new file mode 100644 index 000000000..3d1e1964f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00021.607c41268c5b0d66e81b58713a66d12c @@ -0,0 +1,67 @@ +From timc@2ubh.com Thu Aug 22 17:31:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A97BE43F99 + for ; Thu, 22 Aug 2002 12:30:58 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 17:30:58 +0100 (IST) +Received: from n17.grp.scd.yahoo.com (n17.grp.scd.yahoo.com + [66.218.66.72]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7MGOFZ14344 for ; Thu, 22 Aug 2002 17:24:16 +0100 +X-Egroups-Return: sentto-2242572-52744-1030033454-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.201] by n17.grp.scd.yahoo.com with NNFMP; + 22 Aug 2002 16:24:16 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 22 Aug 2002 16:24:14 -0000 +Received: (qmail 12796 invoked from network); 22 Aug 2002 16:24:13 -0000 +Received: from unknown (66.218.66.216) by m9.grp.scd.yahoo.com with QMQP; + 22 Aug 2002 16:24:13 -0000 +Received: from unknown (HELO carbon) (194.73.73.92) by + mta1.grp.scd.yahoo.com with SMTP; 22 Aug 2002 16:24:15 -0000 +Received: from host217-36-23-185.in-addr.btopenworld.com ([217.36.23.185]) + by carbon with esmtp (Exim 3.22 #8) id 17huko-0000JF-00 for + forteana@yahoogroups.com; Thu, 22 Aug 2002 17:24:14 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana@yahoogroups.com +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 22 Aug 2002 17:23:28 +0100 +Subject: Re: [zzzzteana] Which Muppet Are You? +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +> Apols if this has been posted before: +> +> http://www.pinkpaperclips.net/subs/quiz2.html +> +So, anyone who isn't Beaker? + +TimC +Meep + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00022.48098f942c31097d2ef605df44dd8593 b/Ch3/datasets/spam/easy_ham/00022.48098f942c31097d2ef605df44dd8593 new file mode 100644 index 000000000..8a30c97db --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00022.48098f942c31097d2ef605df44dd8593 @@ -0,0 +1,80 @@ +From ilug-admin@linux.ie Thu Aug 22 17:45:53 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 08BC143F99 + for ; Thu, 22 Aug 2002 12:45:53 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 17:45:53 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MGbKZ14933 for + ; Thu, 22 Aug 2002 17:37:20 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id RAA10694; Thu, 22 Aug 2002 17:36:27 +0100 +Received: from moe.jinny.ie ([193.120.171.3]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id RAA10669 for ; Thu, + 22 Aug 2002 17:36:20 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host [193.120.171.3] claimed to + be moe.jinny.ie +Received: from jlooney.jinny.ie (unknown [193.120.171.2]) by moe.jinny.ie + (Postfix) with ESMTP id C906A7FC48 for ; Thu, + 22 Aug 2002 17:36:19 +0100 (IST) +Received: by jlooney.jinny.ie (Postfix, from userid 500) id 09E7E8B1; + Thu, 22 Aug 2002 17:36:42 +0100 (IST) +Date: Thu, 22 Aug 2002 17:36:41 +0100 +From: "John P. Looney" +To: ILUG +Subject: Re: [ILUG] Sun Solaris.. +Message-Id: <20020822163641.GN3670@jinny.ie> +Reply-To: ilug@linux.ie +Mail-Followup-To: ILUG +References: <45130FBE2F203649A4BABDB848A9C9D00E9C8A@enterprise.wasptech.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <45130FBE2F203649A4BABDB848A9C9D00E9C8A@enterprise.wasptech.com> +User-Agent: Mutt/1.4i +X-Os: Red Hat Linux 7.3/Linux 2.4.18-3 +X-Url: http://www.redbrick.dcu.ie/~valen +X-Gnupg-Publickey: http://www.redbrick.dcu.ie/~valen/public.asc +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +On Thu, Aug 22, 2002 at 05:13:01PM +0100, Fergal Moran mentioned: +> In a nutshell - Solaris is Suns own flavour of UNIX. + + Though I'm sure that this nice person would like a bit more detail. + + Solaris is quite different to Linux, though these days you can make +solaris act a lot like linux with an extra CD of GNU tools Sun ship with +solaris. It is based on the SysV unix family, so it's quite similar to +other unixen like HPUX and SCO. + + Sun's hardware in general is more reliable, and a lot more expensive. One +of the main bonuses you get by buying Sun is that you are getting your +hardware and software from one company, so if you have a support contract, +they have to fix it. They can't fob you off with 'that's a software +problem, talk to the software vendor.' etc. + + If you are set on Linux, you most likely can do your own support. There +is then a world of different hardware options. You can run Linux on Sparc, +though some companies like RedHat don't maintain a sparc port anymore. + + You can also buy your machine from linux-oriented companies like DNUK, +who do machines designed to run linux, and their own version of linux, +that has a few extras for their machines. Or, you can get a machine from a +cheaper company like Dell, and it'll most likely work, most of the time. + +John + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00023.e0e815ea1d7fd40e7e70b4c0035bef0c b/Ch3/datasets/spam/easy_ham/00023.e0e815ea1d7fd40e7e70b4c0035bef0c new file mode 100644 index 000000000..dee4804cb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00023.e0e815ea1d7fd40e7e70b4c0035bef0c @@ -0,0 +1,84 @@ +From ilug-admin@linux.ie Thu Aug 22 17:45:54 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E8B1343F9B + for ; Thu, 22 Aug 2002 12:45:53 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 17:45:53 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MGjVZ15193 for + ; Thu, 22 Aug 2002 17:45:31 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id RAA11100; Thu, 22 Aug 2002 17:42:54 +0100 +Received: from corvil.com. (k100-159.bas1.dbn.dublin.eircom.net + [159.134.100.159]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id RAA11076 + for ; Thu, 22 Aug 2002 17:42:46 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host k100-159.bas1.dbn.dublin.eircom.net + [159.134.100.159] claimed to be corvil.com. +Received: from corvil.com (pixelbeat.local.corvil.com [172.18.1.170]) by + corvil.com. (8.12.5/8.12.5) with ESMTP id g7MGgjn4090705 for + ; Thu, 22 Aug 2002 17:42:46 +0100 (IST) (envelope-from + padraig.brady@corvil.com) +Message-Id: <3D651472.7080101@corvil.com> +Date: Thu, 22 Aug 2002 17:42:26 +0100 +From: Padraig Brady +Organization: Corvil Networks +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020408 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: ilug@linux.ie +Subject: Re: [ILUG] Sun Solaris.. +References: <45130FBE2F203649A4BABDB848A9C9D00E9C8A@enterprise.wasptech.com> + <20020822163641.GN3670@jinny.ie> +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 8bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +John P. Looney wrote: +> On Thu, Aug 22, 2002 at 05:13:01PM +0100, Fergal Moran mentioned: +> +>>In a nutshell - Solaris is Suns own flavour of UNIX. +> +> +> Though I'm sure that this nice person would like a bit more detail. +> +> Solaris is quite different to Linux, though these days you can make +> solaris act a lot like linux with an extra CD of GNU tools Sun ship with +> solaris. It is based on the SysV unix family, so it's quite similar to +> other unixen like HPUX and SCO. +> +> Sun's hardware in general is more reliable, and a lot more expensive. One +> of the main bonuses you get by buying Sun is that you are getting your +> hardware and software from one company, so if you have a support contract, +> they have to fix it. They can't fob you off with 'that's a software +> problem, talk to the software vendor.' etc. +> +> If you are set on Linux, you most likely can do your own support. There +> is then a world of different hardware options. You can run Linux on Sparc, +> though some companies like RedHat don't maintain a sparc port anymore. +> +> You can also buy your machine from linux-oriented companies like DNUK, +> who do machines designed to run linux, and their own version of linux, +> that has a few extras for their machines. Or, you can get a machine from a +> cheaper company like Dell, and it'll most likely work, most of the time. + +Why do you say Dell is cheaper than DNUK? + +It gets a bit complicated though! +http://www.levenez.com/unix/history.html + +Pádraig. + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00024.59c2cb781c60594315241e2b50ea70e2 b/Ch3/datasets/spam/easy_ham/00024.59c2cb781c60594315241e2b50ea70e2 new file mode 100644 index 000000000..8c2ca0629 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00024.59c2cb781c60594315241e2b50ea70e2 @@ -0,0 +1,104 @@ +From lejones@ucla.edu Thu Aug 22 18:29:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 89B2943F99 + for ; Thu, 22 Aug 2002 13:29:49 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 18:29:49 +0100 (IST) +Received: from n32.grp.scd.yahoo.com (n32.grp.scd.yahoo.com + [66.218.66.100]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7MHK2Z16822 for ; Thu, 22 Aug 2002 18:20:02 +0100 +X-Egroups-Return: sentto-2242572-52757-1030036801-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.201] by n32.grp.scd.yahoo.com with NNFMP; + 22 Aug 2002 17:20:03 -0000 +X-Sender: lejones@ucla.edu +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 22 Aug 2002 17:20:01 -0000 +Received: (qmail 45255 invoked from network); 22 Aug 2002 17:19:58 -0000 +Received: from unknown (66.218.66.218) by m9.grp.scd.yahoo.com with QMQP; + 22 Aug 2002 17:19:58 -0000 +Received: from unknown (HELO periwinkle.noc.ucla.edu) (169.232.47.11) by + mta3.grp.scd.yahoo.com with SMTP; 22 Aug 2002 17:20:00 -0000 +Received: from tigerlily.noc.ucla.edu (tigerlily.noc.ucla.edu + [169.232.46.12]) by periwinkle.noc.ucla.edu (8.12.5/8.12.5) with ESMTP id + g7MHK0p0011232 for ; Thu, 22 Aug 2002 10:20:00 + -0700 +Received: from leslie (ca-stmnca-cuda1-blade1a-115.stmnca.adelphia.net + [68.65.192.115]) (authenticated bits=0) by tigerlily.noc.ucla.edu + (8.12.3/8.12.3) with ESMTP id g7MHJxJA019627 for + ; Thu, 22 Aug 2002 10:19:59 -0700 +Message-Id: <005801c24a00$1e226060$73c04144@leslie> +To: +References: <000001c249ff$50bc96e0$da514ed5@roswell> +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +From: "leslie ellen jones" +X-Yahoo-Profile: luned23 +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 22 Aug 2002 10:19:48 -0700 +Subject: Re: [zzzzteana] Which Muppet Are You? +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Hey, it's not easy being green. + +leslie + +Leslie Ellen Jones, Ph.D. +Jack of All Trades and Doctor of Folklore +lejones@ucla.edu + +"Truth is an odd number" -- Flann O'Brien + ----- Original Message ----- + From: Dino + To: zzzzteana@yahoogroups.com + Sent: Thursday, August 22, 2002 10:13 AM + Subject: RE: [zzzzteana] Which Muppet Are You? + + + Damn kermit...boring... + Wanna be rizzo he's the coolest + Dino + + + Yahoo! Groups Sponsor + ADVERTISEMENT + + + + To unsubscribe from this group, send an email to: + forteana-unsubscribe@egroups.com + + + + Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service. + + + +[Non-text portions of this message have been removed] + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00025.d685245bdc4444f44fa091e6620b20b3 b/Ch3/datasets/spam/easy_ham/00025.d685245bdc4444f44fa091e6620b20b3 new file mode 100644 index 000000000..5b7678605 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00025.d685245bdc4444f44fa091e6620b20b3 @@ -0,0 +1,79 @@ +From ilug-admin@linux.ie Fri Aug 23 11:07:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6F82C4416B + for ; Fri, 23 Aug 2002 06:06:31 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:31 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MIE5Z19072 for + ; Thu, 22 Aug 2002 19:14:05 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id TAA15460; Thu, 22 Aug 2002 19:12:03 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from nwkea-mail-1.sun.com (nwkea-mail-1.sun.com [192.18.42.13]) + by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id TAA15419 for + ; Thu, 22 Aug 2002 19:11:56 +0100 +Received: from sunire.Ireland.Sun.COM ([129.156.220.30]) by + nwkea-mail-1.sun.com (8.9.3+Sun/8.9.3) with ESMTP id LAA04778 for + ; Thu, 22 Aug 2002 11:11:20 -0700 (PDT) +Received: from sionnach.ireland.sun.com (sionnach [129.156.220.28]) by + sunire.Ireland.Sun.COM (8.11.6+Sun/8.11.6/ENSMAIL,v2.2) with ESMTP id + g7MIBJd19492 for ; Thu, 22 Aug 2002 19:11:19 +0100 (BST) +Received: from sionnach (localhost [127.0.0.1]) by + sionnach.ireland.sun.com (8.12.2+Sun/8.12.2) with ESMTP id g7MIBJdr004189 + for ; Thu, 22 Aug 2002 19:11:19 +0100 (BST) +Message-Id: <200208221811.g7MIBJdr004189@sionnach.ireland.sun.com> +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: ilug@linux.ie +From: Albert White - SUN Ireland +Subject: Re: [ILUG] Sun Solaris.. +In-Reply-To: Your message of + "Thu, 22 Aug 2002 18:42:33 BST." + +Date: Thu, 22 Aug 2002 19:11:19 +0100 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + + +> On Thu, 22 Aug 2002, John P. Looney wrote: +> > Sun's hardware in general is more reliable, +> ROFL. not in our experience. + +Well at least our Caps-Lock keys work: + +peter@staunton.ie said: +> Another problem. I have a Dell branded keyboard and if I hit Caps-Lock +> twice, the whole machine crashes (in Linux, not Windows) - even the on/ +> off switch is inactive, leaving me to reach for the power cable +> instead. + +:-P + +bauwolf@indigo.ie said: +> as if he wanted Solaris 9 for x86, he'd be waiting a bit +erm... it runs Solaris x86 as standard... + +Cheers, +~Al + +-- +Expressed in this posting are my opinions. They are in no way related +to opinions held by my employer, Sun Microsystems. +Statements on Sun products included here are not gospel and may +be fiction rather than truth. + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00026.f9755fb0cee92676d7bd76d32bc5f50f b/Ch3/datasets/spam/easy_ham/00026.f9755fb0cee92676d7bd76d32bc5f50f new file mode 100644 index 000000000..ea0371aea --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00026.f9755fb0cee92676d7bd76d32bc5f50f @@ -0,0 +1,116 @@ +From fork-admin@xent.com Fri Aug 23 11:08:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 93D8944160 + for ; Fri, 23 Aug 2002 06:06:44 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7MIPTZ19588 for ; + Thu, 22 Aug 2002 19:25:29 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 94BC22940D4; Thu, 22 Aug 2002 11:23:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm7-32.sba1.netlojix.net + [207.71.222.128]) by xent.com (Postfix) with ESMTP id 8C7AD294099 for + ; Thu, 22 Aug 2002 11:22:33 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id LAA21283; + Thu, 22 Aug 2002 11:11:58 -0700 +Message-Id: <200208221811.LAA21283@maltesecat> +To: fork@spamassassin.taint.org +Subject: RE: The Curse of India's Socialism +In-Reply-To: Message from fork-request@xent.com of + "Wed, 21 Aug 2002 11:30:03 PDT." + <20020821183003.25673.41476.Mailman@lair.xent.com> +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 11:11:57 -0700 + + + +> You have multiple generations of +> peasants/squatters that cultivate and live on the lands almost as a +> human parts of the property package. + +When I'd read that "getting legal title +can take 20 years", when I believe that +1 year ought to be more than sufficient, +(and helped by the Cairo reference) I'd +assumed that we were talking about the +urban poor. + +If I see people living in mansions, or +even in suburban subdivisions, I assume +they didn't have too much trouble with +their titles. + +If I see people living in shanties and +haphazard alleyways, I tend to assume +their parcels weren't exactly recorded +on the government maps, or paid for with +a bank loan, especially when nearby vacant +lots have shotgun wielding men presumably +intent on keeping them "development" free. + +Now, it may be that "Manhattanites' view +of America" to say that outside of Metro +Manila, Davao, and maybe another city or +two (Cebu?), everything else (literally) +is the boondocks. But going on that very +broad assumption, I guess I'm describing +the flip side of Mr. Roger's experience: +the paisanos (who leave behind those who +remain on a patron's rural land) move to +Manila, and (the second assumption) squat +in shantytowns there, at least until they +can line up a middle-class job. + +So, going on two large assumptions, I can +come up with a scenario under which title +would take 20 years: a shantytown arises +somewhere in the midst of a section (or +whatever the Spanish used to divvy up the +land) and it takes decades of arguing to +put together a package which somehow can +both compensate the owner and record lots +for the inhabitants. Just transferring +title to an existing lot, between parties +who have money, ought not to be a problem. + +The obvious solution, at least to us +barking farting chihuahuas on FoRK, is +to "introduce market mechanisms". It is +left as an exercise to come up with one +which works when many of the agents (are +perceived to) have negligible NPV. + +-Dave + +> [land reform] meant that all the agricultural producers had +> to plant crops all the time (profitable or not) ... + +What happened to more highly-capitalized +land? Putting in trees instead of crops +sounds like it might sidestep that. + +> Mr. Long, I think you'd particularly enjoy the De Soto work. + +On the "to find" list. Any chance of +an explanation of that "Bell Jar" in +the meantime? + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00027.4d456dd9ce0afde7629f94dc3034e0bb b/Ch3/datasets/spam/easy_ham/00027.4d456dd9ce0afde7629f94dc3034e0bb new file mode 100644 index 000000000..ce6ddec25 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00027.4d456dd9ce0afde7629f94dc3034e0bb @@ -0,0 +1,71 @@ +From ilug-admin@linux.ie Fri Aug 23 11:07:42 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 762374415C + for ; Fri, 23 Aug 2002 06:06:30 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:30 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MHxuZ18619 for + ; Thu, 22 Aug 2002 18:59:56 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id SAA14875; Thu, 22 Aug 2002 18:57:44 +0100 +Received: from ni-mail1.dna.utvinternet.net (mail.d-n-a.net [194.46.8.11]) + by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id SAA14844 for + ; Thu, 22 Aug 2002 18:57:36 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host mail.d-n-a.net + [194.46.8.11] claimed to be ni-mail1.dna.utvinternet.net +Received: from mail.dnet.co.uk (unverified [194.46.8.61]) by + ni-mail1.dna.utvinternet.net (Vircom SMTPRS 1.4.232) with SMTP id + ; Thu, 22 Aug 2002 18:55:19 + +0100 +From: "Peter Staunton" +Reply-To: peter@staunton.ie +To: ilug@linux.ie +Date: Thu, 22 Aug 2002 18:57:35 GMT +X-Mailer: DMailWeb Web to Mail Gateway 1.8s, http://netwinsite.com/top_mail.htm +Message-Id: <3d65260f.948.0@mail.dnet.co.uk> +X-User-Info: 159.134.226.168 +Subject: [ILUG] Newbie seeks advice - Suse 7.2 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Folks, + +my first time posting - have a bit of Unix experience, but am new to Linux. + + +Just got a new PC at home - Dell box with Windows XP. Added a second hard disk +for Linux. Partitioned the disk and have installed Suse 7.2 from CD, which went +fine except it didn't pick up my monitor. + +I have a Dell branded E151FPp 15" LCD flat panel monitor and a nVidia GeForce4 +Ti4200 video card, both of which are probably too new to feature in Suse's default +set. I downloaded a driver from the nVidia website and installed it using RPM. +Then I ran Sax2 (as was recommended in some postings I found on the net), but +it still doesn't feature my video card in the available list. What next? + +Another problem. I have a Dell branded keyboard and if I hit Caps-Lock twice, +the whole machine crashes (in Linux, not Windows) - even the on/off switch is +inactive, leaving me to reach for the power cable instead. + +If anyone can help me in any way with these probs., I'd be really grateful - +I've searched the 'net but have run out of ideas. + +Or should I be going for a different version of Linux such as RedHat? Opinions +welcome. + +Thanks a lot, +Peter + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00028.ddbae7c7b229813409ae50c47624ddb9 b/Ch3/datasets/spam/easy_ham/00028.ddbae7c7b229813409ae50c47624ddb9 new file mode 100644 index 000000000..35efd1d3c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00028.ddbae7c7b229813409ae50c47624ddb9 @@ -0,0 +1,55 @@ +From fork-admin@xent.com Fri Aug 23 11:08:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BA70647C68 + for ; Fri, 23 Aug 2002 06:06:46 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7MJOSZ21435 for ; + Thu, 22 Aug 2002 20:24:28 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 532572940E5; Thu, 22 Aug 2002 12:22:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 19BE0294099 for ; Thu, + 22 Aug 2002 12:21:43 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id D1DEE3EC9E; + Thu, 22 Aug 2002 15:25:24 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id D04DE3EC10; Thu, 22 Aug 2002 15:25:24 -0400 (EDT) +From: Tom +To: "Joseph S. Barrera III" +Cc: Chris Haun , +Subject: Re: lifegem +In-Reply-To: <3D653874.8010204@barrera.org> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 15:25:24 -0400 (EDT) + +On Thu, 22 Aug 2002, Joseph S. Barrera III wrote: +--]Why wait until you're dead? I'm sure there's enough carbon in +--]the fat from your typical liposuction job to make a decent diamond. + +So thats why I keep seeing DeBeers agents hovering around me. + +-tom(diamonds in the folds of my flesh)wsmf + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00029.56d4310a82386b76b9e771523d571e67 b/Ch3/datasets/spam/easy_ham/00029.56d4310a82386b76b9e771523d571e67 new file mode 100644 index 000000000..54f71a5da --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00029.56d4310a82386b76b9e771523d571e67 @@ -0,0 +1,69 @@ +From fork-admin@xent.com Fri Aug 23 11:08:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C348B44163 + for ; Fri, 23 Aug 2002 06:06:47 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7MJSYZ21645 for ; + Thu, 22 Aug 2002 20:28:34 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 03FCD2940ED; Thu, 22 Aug 2002 12:26:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id 9B3612940EA for + ; Thu, 22 Aug 2002 12:25:08 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17hxYk-00009P-00; Thu, 22 Aug 2002 16:23:58 -0300 +Message-Id: <3D653BBF.3060209@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.0) Gecko/20020530 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: "Joseph S. Barrera III" +Cc: Chris Haun , fork@spamassassin.taint.org +Subject: Re: lifegem +References: + <3D653874.8010204@barrera.org> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 16:30:07 -0300 + +Joseph S. Barrera III wrote: + +> Chris Haun wrote: +> +>> A LifeGem is a certified, high quality diamond created from the +>> carbon of your loved one as a memorial to their unique and wonderful +>> life. +> +> +> Why wait until you're dead? I'm sure there's enough carbon in +> the fat from your typical liposuction job to make a decent diamond. +> +> - Joe +> +Oh, hell - what about excrement? I'd love to be able to say - No, the +sun doesn't shine out of my ass, but there's the occasional diamond. ;-). + +Owen + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00030.cc78e84cd398ff4a2e9e287263de928f b/Ch3/datasets/spam/easy_ham/00030.cc78e84cd398ff4a2e9e287263de928f new file mode 100644 index 000000000..26a36d58c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00030.cc78e84cd398ff4a2e9e287263de928f @@ -0,0 +1,122 @@ +From ilug-admin@linux.ie Fri Aug 23 11:07:51 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7419C4416C + for ; Fri, 23 Aug 2002 06:06:33 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:33 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MJtgZ22471 for + ; Thu, 22 Aug 2002 20:55:42 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id UAA19436; Thu, 22 Aug 2002 20:53:00 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from mail02.svc.cra.dublin.eircom.net + (mail02.svc.cra.dublin.eircom.net [159.134.118.18]) by lugh.tuatha.org + (8.9.3/8.9.3) with SMTP id UAA19403 for ; Thu, + 22 Aug 2002 20:52:53 +0100 +Received: (qmail 50842 messnum 34651 invoked from + network[159.134.205.176/p432.as1.athlone1.eircom.net]); 22 Aug 2002 + 19:52:16 -0000 +Received: from p432.as1.athlone1.eircom.net (HELO darkstar) + (159.134.205.176) by mail02.svc.cra.dublin.eircom.net (qp 50842) with SMTP; + 22 Aug 2002 19:52:16 -0000 +Content-Type: text/plain; charset="iso-8859-15" +From: Ciaran Johnston +Organization: nologic.org +To: +Subject: Re: [ILUG] Formatting a windows partition from Linux +Date: Thu, 22 Aug 2002 20:58:07 +0100 +User-Agent: KMail/1.4.1 +References: <1029944325.29456.28.camel@dubrhlnx1> + <26030.194.237.142.30.1029943301.squirrel@mail.nologic.org> +In-Reply-To: <26030.194.237.142.30.1029943301.squirrel@mail.nologic.org> +MIME-Version: 1.0 +Message-Id: <200208222058.07760.cj@nologic.org> +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by lugh.tuatha.org id + UAA19403 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Update on this for anyone that's interested, and because I like closed +threads... nothing worse than an infinite while loop, is there? + +I ended up formatting a floppy on my flatmate's (un-networked) P100 running +FAT16 Win95, and mcopied the contents of the bootdisk across. Now I have a +FAT16 Win98 install running alongside Slackware, and can play Metal Gear +Solid when the mood takes me ;) + +/Ciaran. + +On Wednesday 21 August 2002 16:21, Ciaran Johnston wrote: +> Dublin said: +> > If you copy the files from your disk to the c: partition and mark it as +> > active it should work ... +> +> Yeah, I figured that, but it doesn't seem to ... well, if that's the case +> I'll give it another go tonight, maybe come back with some error messages. +> +> Just to clarify for those who didn't understand me initially - I have a +> floppy drive installed, but it doesn't physically work. There's nowhere +> handy to pick one up where I am, and I don't fancy waiting a few days for +> one to arrive from Peats. +> +> Thanks for the answers, +> Ciaran. +> +> > You especially need io.sys, command.com and msdos.sys +> > +> > your cd driver .sys and read the autoexec.bat and config.sys files for +> > hints on what you did with your boot floppy +> > +> > P +> > +> > On Wed, 2002-08-21 at 14:07, Ciaran Johnston wrote: +> >> Hi folks, +> >> The situation is this: at home, I have a PC with 2 10Gig HDDs, and no +> >> (working) floppy drive. I have been running Linux solely for the last +> >> year, but recently got the urge to, among other things, play some of +> >> my Windoze games. I normally install the windows partition using a +> >> boot floppy which I have conveniently zipped up, but I haven't any way +> >> of writing or reading a floppy. +> >> So, how do I go about: +> >> 1. formatting a C: drive with system files (normally I would use +> >> format /s c: from the floppy). +> >> 2. Installing the CDROM drivers (my bootdisk (I wrote it many years +> >> ago) does this normally). +> >> 3. Booting from the partition? +> >> +> >> I wiped all my linux partitions from the first drive and created +> >> partitions for Windows (HDA1) Slackware and RedHat. I used cfdisk for +> >> this. I made the first drive (hda) bootable. I then installed the +> >> windows partition in LILO and reran lilo (installed in MBR). I copied +> >> the contents of boot.zip to my new windows partition and tried to boot +> >> it - all I get is a garbled line of squiggles. +> >> +> >> Anyone any ideas? I can't think of anywhere in Athlone to get a new +> >> floppy drive this evening... +> >> +> >> Thanks, +> >> Ciaran. +> >> +> >> +> >> +> >> -- +> >> Irish Linux Users' Group: ilug@linux.ie +> >> http://www.linux.ie/mailman/listinfo/ilug for (un)subscription +> >> information. List maintainer: listmaster@linux.ie + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00031.ac7e81ff64671b17569d2c6a66648bb2 b/Ch3/datasets/spam/easy_ham/00031.ac7e81ff64671b17569d2c6a66648bb2 new file mode 100644 index 000000000..42fabd423 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00031.ac7e81ff64671b17569d2c6a66648bb2 @@ -0,0 +1,52 @@ +From fork-admin@xent.com Fri Aug 23 11:08:35 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AE73347C6A + for ; Fri, 23 Aug 2002 06:06:49 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7MKBTZ22948 for ; + Thu, 22 Aug 2002 21:11:29 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E9D40294183; Thu, 22 Aug 2002 13:09:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 317F2294099 for + ; Thu, 22 Aug 2002 13:08:01 -0700 (PDT) +Received: (qmail 2336 invoked by uid 500); 22 Aug 2002 20:09:34 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 22 Aug 2002 20:09:34 -0000 +From: Chris Haun +X-X-Sender: chris@isolnetsux.techmonkeys.net +To: fork@spamassassin.taint.org +Subject: public mailing list sign up package +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 16:09:34 -0400 (EDT) + +Has anyone seen/heard of/used some package that would let a random person +go to a webpage, create a mailing list, then administer that list. Also +of course let ppl sign up for the lists and manage their subscriptions. +Similar to the old listbot.org, but i'd like to have it running on my +server not someone elses :) + +Chris + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00032.57e29a75bca42afb412fc68d5051aa20 b/Ch3/datasets/spam/easy_ham/00032.57e29a75bca42afb412fc68d5051aa20 new file mode 100644 index 000000000..99966484b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00032.57e29a75bca42afb412fc68d5051aa20 @@ -0,0 +1,58 @@ +From fork-admin@xent.com Fri Aug 23 11:08:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7EC734415F + for ; Fri, 23 Aug 2002 06:06:50 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7ML7TZ24823 for ; + Thu, 22 Aug 2002 22:07:30 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4DC062940EE; Thu, 22 Aug 2002 14:05:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id 2CC18294099 for ; Thu, 22 Aug 2002 14:04:34 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id D7039C44E; + Thu, 22 Aug 2002 22:58:34 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Entrepreneurs +Message-Id: <20020822205834.D7039C44E@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 22:58:34 +0200 (CEST) + +An apparent quote from Dubya, from the Times (sent to me by my Dad): + +http://www.timesonline.co.uk/printFriendly/0,,1-43-351083,00.html + +------------------------------------------------------------------------------ +TONY BLAIR's special relationship with George W. Bush is under +considerable strain. Not only do the two disagree on Yassir Arafat's +tenure as leader of the Palestinian Authority, but Blair has started +telling disparaging anecdotes about the President. + +Baroness Williams of Crosby recalled a story told to her by 'my good +friend Tony Blair' recently in Brighton. Blair, Bush and Jacques +Chirac were discussing economics and, in particular, the decline of +the French economy. 'The problem with the French,' Bush confided in +Blair, 'is that they don't have a word for entrepreneur.' +------------------------------------------------------------------------------ + +R +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00033.2ceb520d2c6500ccf24357f2ebdce618 b/Ch3/datasets/spam/easy_ham/00033.2ceb520d2c6500ccf24357f2ebdce618 new file mode 100644 index 000000000..e728a09ce --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00033.2ceb520d2c6500ccf24357f2ebdce618 @@ -0,0 +1,41 @@ +From hauns_froehlingsdorf@infinetivity.com Fri Aug 23 11:05:35 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id DB68D44158 + for ; Fri, 23 Aug 2002 06:04:08 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:04:08 +0100 (IST) +Received: from mail.infinetivity.com (mail.mninter.net [208.142.244.17]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7ML6xZ24796 for + ; Thu, 22 Aug 2002 22:07:01 +0100 +Received: from mail.infinetivity.com (localhost.localdomain [127.0.0.1]) + by mail.infinetivity.com (8.12.1/8.12.1) with ESMTP id g7ML75fu008107 for + ; Thu, 22 Aug 2002 16:07:05 -0500 +Received: (from hfroehli@localhost) by mail.infinetivity.com + (8.12.1/8.12.1/Submit) id g7ML75ue008106; Thu, 22 Aug 2002 16:07:05 -0500 +Date: Thu, 22 Aug 2002 16:07:05 -0500 +Message-Id: <200208222107.g7ML75ue008106@mail.infinetivity.com> +To: "Justin Mason" +From: hauns_froehlingsdorf@infinetivity.com +Subject: Re: hauns_froehlingsdorf@infinetivity.com + +This is an automated response to a message you have sent to hauns_froehlingsdorf@infinetivity.com. + +I will be out of the office until Monday, August 26 2002. + +I will reply to your email when I return. + +Hauns + +___________________________________ + +Hauns Froehlingsdorf +Network/Systems Manager +infinetivity, inc. +952-225.4200 +http://www.infinetivity.com + + + diff --git a/Ch3/datasets/spam/easy_ham/00034.1d56abea55f3c516d0ffdd4f1e8b883b b/Ch3/datasets/spam/easy_ham/00034.1d56abea55f3c516d0ffdd4f1e8b883b new file mode 100644 index 000000000..24a216028 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00034.1d56abea55f3c516d0ffdd4f1e8b883b @@ -0,0 +1,54 @@ +From ilug-admin@linux.ie Fri Aug 23 11:07:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7D6804416D + for ; Fri, 23 Aug 2002 06:06:34 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:34 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MLTQZ25658 for + ; Thu, 22 Aug 2002 22:29:26 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id WAA23320; Thu, 22 Aug 2002 22:26:40 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from relay06.indigo.ie (relay06.indigo.ie [194.125.133.230]) by + lugh.tuatha.org (8.9.3/8.9.3) with SMTP id WAA23285 for ; + Thu, 22 Aug 2002 22:26:30 +0100 +Received: (qmail 8720 messnum 1046742 invoked from + network[194.125.156.67/unknown]); 22 Aug 2002 21:26:29 -0000 +Received: from unknown (HELO localhost) (194.125.156.67) by + relay06.indigo.ie (qp 8720) with SMTP; 22 Aug 2002 21:26:29 -0000 +Date: Thu, 22 Aug 2002 22:25:12 +0100 +MIME-Version: 1.0 (Apple Message framework v482) +Content-Type: text/plain; charset=US-ASCII; format=flowed +From: Mark Twomey +To: ilug@linux.ie +Content-Transfer-Encoding: 7bit +Message-Id: +X-Mailer: Apple Mail (2.482) +Subject: [ILUG] Re: Sun Solaris +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Al white wrote: + + >erm... it runs Solaris x86 as standard... + +It runs Solaris 8 x86 as standard. +(I was joking Al) + +M. + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00035.9069e05ad40dd0f98cdae72072ee7186 b/Ch3/datasets/spam/easy_ham/00035.9069e05ad40dd0f98cdae72072ee7186 new file mode 100644 index 000000000..5750f6496 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00035.9069e05ad40dd0f98cdae72072ee7186 @@ -0,0 +1,69 @@ +From neugens@libero.it Fri Aug 23 11:06:09 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BBCE24415B + for ; Fri, 23 Aug 2002 06:04:22 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:04:22 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing3.securityfocus.com + [66.38.151.27]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MM0XZ26628 for ; Thu, 22 Aug 2002 23:00:33 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 86064A316F; Thu, 22 Aug 2002 15:50:00 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 21232 invoked from network); 22 Aug 2002 21:14:49 -0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Mario Torre +To: secprog@securityfocus.com +Subject: Re: Encryption approach to secure web applications +Date: Thu, 22 Aug 2002 23:49:00 +0200 +User-Agent: KMail/1.4.1 +References: <200208222015.15926.neugens@libero.it> + <00da01c24a15$561376c0$0201a8c0@home1> +In-Reply-To: <00da01c24a15$561376c0$0201a8c0@home1> +MIME-Version: 1.0 +Message-Id: <200208222349.00463.neugens@libero.it> +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7MM0XZ26628 + +Hi, + +Thank you for the useful replies, I have found some interesting +tutorials in the ibm developer connection. + +https://www6.software.ibm.com/developerworks/education/j-sec1 + +and + +https://www6.software.ibm.com/developerworks/education/j-sec2 + +Registration is needed. + +I will post the same message on the Web Application Security list, as +suggested by someone. + +For now, I thing I will use md5 for password checking (I will use the +approach described in secure programmin fo linux and unix how-to). + +I will separate the authentication module, so I can change its +implementation at anytime. + +Thank you again! + +Mario Torre +-- +Please avoid sending me Word or PowerPoint attachments. +See http://www.fsf.org/philosophy/no-word-attachments.html + diff --git a/Ch3/datasets/spam/easy_ham/00036.719795e8d4670c6d8095274b18b59749 b/Ch3/datasets/spam/easy_ham/00036.719795e8d4670c6d8095274b18b59749 new file mode 100644 index 000000000..e2abbd505 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00036.719795e8d4670c6d8095274b18b59749 @@ -0,0 +1,75 @@ +From ilug-admin@linux.ie Fri Aug 23 11:07:57 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1ADF744173 + for ; Fri, 23 Aug 2002 06:06:36 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:36 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MM4mZ26717 for + ; Thu, 22 Aug 2002 23:04:48 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id XAA25152; Thu, 22 Aug 2002 23:02:40 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from smtp018.mail.yahoo.com (smtp018.mail.yahoo.com + [216.136.174.115]) by lugh.tuatha.org (8.9.3/8.9.3) with SMTP id XAA25126 + for ; Thu, 22 Aug 2002 23:02:32 +0100 +Received: from p977.as2.cra.dublin.eircom.net (HELO mfrenchw2k) + (mfrench42@159.134.179.209 with login) by smtp.mail.vip.sc5.yahoo.com with + SMTP; 22 Aug 2002 22:02:25 -0000 +Message-Id: <004b01c24a27$149934c0$f264a8c0@sabeo.ie> +From: "Matthew French" +To: +References: +Subject: Re: [ILUG] Re: Sun Solaris +Date: Thu, 22 Aug 2002 22:58:39 +0100 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Mark Twomey joked: +> >erm... it runs Solaris x86 as standard... +> +> It runs Solaris 8 x86 as standard. +> (I was joking Al) + +And will run Solaris 9 when Sun catch up with the x86 drivers and kernel. + +Although don't hold your breath for the free DVD. It will never come. + +(Spot the person who applied for the free Solaris 9 DVD, only to be told +three months later it is no longer available.) + +FWIW Solaris and Linux seem to be getting closer all the time. I can no +longer see any specific reason why one is better than the other. Expect Red +Hat Solaris 11 any time now... + +- Matthew + + + +__________________________________________________ +Do You Yahoo!? +Everything you'll ever need on one web page +from News and Sport to Email and Music Charts +http://uk.my.yahoo.com + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00037.5a7af2f7bd57a2f50b7cfa05d5e37c29 b/Ch3/datasets/spam/easy_ham/00037.5a7af2f7bd57a2f50b7cfa05d5e37c29 new file mode 100644 index 000000000..ca99eebba --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00037.5a7af2f7bd57a2f50b7cfa05d5e37c29 @@ -0,0 +1,107 @@ +From fork-admin@xent.com Fri Aug 23 11:08:44 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 82FE344172 + for ; Fri, 23 Aug 2002 06:06:52 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7MM5UZ26911 for ; + Thu, 22 Aug 2002 23:05:31 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 055142940C8; Thu, 22 Aug 2002 15:03:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from samosa.chappati.org (ar1-nat-sp.collab.net [63.251.56.5]) + by xent.com (Postfix) with ESMTP id BED1C294099 for ; + Thu, 22 Aug 2002 15:02:43 -0700 (PDT) +Received: by samosa.chappati.org (Postfix, from userid 500) id 4F08E126E69; + Thu, 22 Aug 2002 15:04:02 -0700 (PDT) +From: Manoj Kasichainula +To: fork@spamassassin.taint.org +Subject: Re: Entrepreneurs +Message-Id: <20020822220402.GA504@samosa.chappati.org> +Mail-Followup-To: fork@spamassassin.taint.org +References: <20020822205834.D7039C44E@argote.ch> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <20020822205834.D7039C44E@argote.ch> +User-Agent: Mutt/1.5.1i +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 15:04:02 -0700 + +On Thu, Aug 22, 2002 at 10:58:34PM +0200, Robert Harley wrote: +> An apparent quote from Dubya, from the Times (sent to me by my Dad): +> +> http://www.timesonline.co.uk/printFriendly/0,,1-43-351083,00.html + +http://www.snopes.com/quotes/bush.htm + +Claim: President George W. Bush proclaimed, "The problem with +the French is that they don't have a word for entrepreneur." + + +Origins: Yet another French fried "George W. Bush is dumb" +story has been taken up by those who like their caricatures +drawn in stark, bold lines. According to scuttlebutt that +emerged in the British press in July 2002, President Bush, +Britain's Prime Minister Tony Blair, and France's President +Jacques Chirac were discussing economics and, in particular, +the decline of the French economy. "The problem with the +French," Bush afterwards confided in Blair, "is that they don't +have a word for entrepreneur." + +The source was Shirley Williams, also known as the Baroness +Williams of Crosby, who claimed "my good friend Tony Blair" had +recently regaled her with this anecdote in Brighton. + +Lloyd Grove of The Washington Post was unable to reach Baroness +Williams to gain her confirmation of the tale, but he did +receive a call from Alastair Campbell, Blair's director of +communications and strategy. "I can tell you that the prime +minister never heard George Bush say that, and he certainly +never told Shirley Williams that President Bush did say it," +Campbell told The Post. "If she put this in a speech, it must +have been a joke." + +This is far from the first time Bush has been made the butt of +a jibe meant to showcase what some perceive as his less than +stellar intellectual abilities. Without straining our memories +too hard, we can come up with three other instances we've +chronicled on this site. In the summer of 2001, the joke of the +moment centered upon a supposed study that had resulted in the +ranking of Presidential IQs, with George W. Bush being pegged +as the Chief Executive who scraped the bottom of the +intelligence barrel. In December 2000 it was a fake Nostradamus +quatrain which pontificated that the "village idiot" would win +the 2000 Presidential election. And in the spring of 2002, it +was the story of Bush's waving at Stevie Wonder that set folks +to chortling up their sleeves. + +Stories that illustrate this widely believed intellectual +shortcoming will always waft after George W. Bush because they +seemingly confirm what many already hold as true about this +public figure, that he's not the brightest fellow that's ever +been. It is human nature to revel in yarns that the hearer at +some level agrees with, thus tales of this sort will always +fall upon appreciative ears. + +Barbara "ears of corn" Mikkelson + +Last updated: 29 July 2002 + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00038.cd457af47eb78d4b93c7d94043a43108 b/Ch3/datasets/spam/easy_ham/00038.cd457af47eb78d4b93c7d94043a43108 new file mode 100644 index 000000000..de070291e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00038.cd457af47eb78d4b93c7d94043a43108 @@ -0,0 +1,105 @@ +From ilug-admin@linux.ie Fri Aug 23 11:07:57 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 36CBB4416E + for ; Fri, 23 Aug 2002 06:06:35 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:35 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MM12Z26648 for + ; Thu, 22 Aug 2002 23:01:02 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id WAA24933; Thu, 22 Aug 2002 22:59:25 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from redpie.com (redpie.com [216.122.135.208] (may be forged)) + by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id WAA24894 for + ; Thu, 22 Aug 2002 22:59:17 +0100 +Received: from justin ([194.46.28.223]) by redpie.com (8.8.7/8.8.5) with + SMTP id OAA03470 for ; Thu, 22 Aug 2002 14:59:13 -0700 + (PDT) +From: "Kiall Mac Innes" +To: "ILUG" +Subject: RE: [ILUG] Newbie seeks advice - Suse 7.2 +Date: Thu, 22 Aug 2002 23:06:27 +0100 +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +Importance: Normal +In-Reply-To: <3d65260f.948.0@mail.dnet.co.uk> +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +hehe sorry but if you hit caps lock twice the computer crashes? theres one +ive never heard before... have you tryed Dell support yet? I think dell +computers prefer RedHat... (dell provide some computers pre-loaded with red +hat) i dont know for sure tho! so get someone elses opnion as well as +mine... + +-----Original Message----- +From: ilug-admin@linux.ie [mailto:ilug-admin@linux.ie]On Behalf Of Peter +Staunton +Sent: 22 August 2002 19:58 +To: ilug@linux.ie +Subject: [ILUG] Newbie seeks advice - Suse 7.2 + + +Folks, + +my first time posting - have a bit of Unix experience, but am new to Linux. + + +Just got a new PC at home - Dell box with Windows XP. Added a second hard +disk +for Linux. Partitioned the disk and have installed Suse 7.2 from CD, which +went +fine except it didn't pick up my monitor. + +I have a Dell branded E151FPp 15" LCD flat panel monitor and a nVidia +GeForce4 +Ti4200 video card, both of which are probably too new to feature in Suse's +default +set. I downloaded a driver from the nVidia website and installed it using +RPM. +Then I ran Sax2 (as was recommended in some postings I found on the net), +but +it still doesn't feature my video card in the available list. What next? + +Another problem. I have a Dell branded keyboard and if I hit Caps-Lock +twice, +the whole machine crashes (in Linux, not Windows) - even the on/off switch +is +inactive, leaving me to reach for the power cable instead. + +If anyone can help me in any way with these probs., I'd be really grateful - +I've searched the 'net but have run out of ideas. + +Or should I be going for a different version of Linux such as RedHat? +Opinions +welcome. + +Thanks a lot, +Peter + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00039.be5e34dcebd922928045634015e3ed78 b/Ch3/datasets/spam/easy_ham/00039.be5e34dcebd922928045634015e3ed78 new file mode 100644 index 000000000..7fe992bc8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00039.be5e34dcebd922928045634015e3ed78 @@ -0,0 +1,92 @@ +From iiu-admin@taint.org Fri Aug 23 11:06:32 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AC1494416F + for ; Fri, 23 Aug 2002 06:04:29 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:04:29 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MNM9Z29719; + Fri, 23 Aug 2002 00:22:09 +0100 +Received: from mail00.svc.cra.dublin.eircom.net + (mail00.svc.cra.dublin.eircom.net [159.134.118.16]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7MNJfZ29657 for ; + Fri, 23 Aug 2002 00:19:41 +0100 +Received: (qmail 44295 messnum 519748 invoked from + network[159.134.100.45/k100-45.bas1.dbn.dublin.eircom.net]); + 22 Aug 2002 23:19:43 -0000 +Received: from k100-45.bas1.dbn.dublin.eircom.net (HELO ted.nua.ie) + (159.134.100.45) by mail00.svc.cra.dublin.eircom.net (qp 44295) with SMTP; + 22 Aug 2002 23:19:43 -0000 +Message-Id: <5.1.1.6.0.20020823001344.0302c548@dogma.slashnull.org> +X-Sender: antoinmail@dogma.slashnull.org +X-Mailer: QUALCOMM Windows Eudora Version 5.1.1 +To: iiu@taint.org, iiu@taint.org +From: Antoin O Lachtnain +Subject: Re: [IIU] Eircom aDSL Nat'ing +In-Reply-To: <1030032645.73395.1.camel@flapjack.netability.ie> +References: <3D650A2D.1000301@dcu.ie> <3D650A2D.1000301@dcu.ie> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii"; format=flowed +Sender: iiu-admin@taint.org +Errors-To: iiu-admin@taint.org +X-Beenthere: iiu@iiu.taint.org +X-Mailman-Version: 2.0.10 +Precedence: bulk +Reply-To: iiu@taint.org +List-Unsubscribe: , + +List-Id: Irish Internet Users +List-Post: +List-Help: +List-Subscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 00:17:46 +0100 + +At 17:10 22/08/2002 +0100, Nick Hilliard wrote: +> > apologies for the possible silly question (i don't think it is, but), +> > but is Eircom's aDSL service NAT'ed? +> +>No - you get unfiltered access with a real (but dynamic) IP address. +> +> > and what implications would that have for VoIP? I know there are +> > difficulties with VoIP or connecting to clients connected to a NAT'ed +> > network from the internet wild (i.e. machines with static, real IPs) +> +>You will probably suffer from the high latency of DLS lines. Typically, +>you're talking about 50ms RTT to the local bas, which is pretty high. +>If your voip application can handle this, then you're ok. +> +>Nick + +what's the deal with all this latency? it's not like that in other places +where I've used dsl. i read some story about it being done that way to +allow greater distances to be covered or something like that. however, my +knowledge of physics is really only newtonian, and I don't understand how +worsening latency could possibly improve the reliability of a 2000 foot +long piece of copper. Perhaps it has something to do with stretching the +time-space continuum? can someone explain this in words of five syllables +or less? + +a. + + + +>_______________________________________________ +>IIU mailing list +>IIU@iiu.taint.org +>http://iiu.taint.org/mailman/listinfo/iiu + +-- + +Antoin O Lachtnain +** antoin@eire.com ** http://www.eire.com ** +353-87-240-6691 + +_______________________________________________ +IIU mailing list +IIU@iiu.taint.org +http://iiu.taint.org/mailman/listinfo/iiu + diff --git a/Ch3/datasets/spam/easy_ham/00040.eec48d76fbc04e9b98c3de0f59af97ac b/Ch3/datasets/spam/easy_ham/00040.eec48d76fbc04e9b98c3de0f59af97ac new file mode 100644 index 000000000..d9e674266 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00040.eec48d76fbc04e9b98c3de0f59af97ac @@ -0,0 +1,68 @@ +From fork-admin@xent.com Fri Aug 23 11:08:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3AE1947C6D + for ; Fri, 23 Aug 2002 06:06:54 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7N16TZ03375 for ; + Fri, 23 Aug 2002 02:06:30 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D6F482940E1; Thu, 22 Aug 2002 18:04:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id DE0D3294099 for ; Thu, 22 Aug 2002 18:03:05 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id D63AEC44E; + Fri, 23 Aug 2002 02:57:05 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: Entrepreneurs +Message-Id: <20020823005705.D63AEC44E@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 02:57:05 +0200 (CEST) + +Manoj Kasichainula wrote; +>http://www.snopes.com/quotes/bush.htm +> +>Claim: President George W. Bush proclaimed, "The problem with +>the French is that they don't have a word for entrepreneur." +> +>Status: False. + + + +>Lloyd Grove of The Washington Post was unable to reach Baroness +>Williams to gain her confirmation of the tale, but he did +>receive a call from Alastair Campbell, Blair's director of +>communications and strategy. "I can tell you that the prime +>minister never heard George Bush say that, and he certainly +>never told Shirley Williams that President Bush did say it," +>Campbell told The Post. "If she put this in a speech, it must +>have been a joke." + +So some guy failed to reach the source, but instead got spin doctor to +deny it. Wot, is he thick enough to expect official confirmation +that, yes, Blair is going around casting aspersions on Bush??? + +It's an amusing anecdote, I don't know if it's true or not, but certainly +nothing here supports the authoritative sounding conclusion "Status: False". + + +R +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00041.002af69a10eb9b6683a7cff5f3ac14b4 b/Ch3/datasets/spam/easy_ham/00041.002af69a10eb9b6683a7cff5f3ac14b4 new file mode 100644 index 000000000..9af630b1e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00041.002af69a10eb9b6683a7cff5f3ac14b4 @@ -0,0 +1,60 @@ +From fork-admin@xent.com Fri Aug 23 11:08:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1FC0647C6E + for ; Fri, 23 Aug 2002 06:06:55 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:55 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7N1LTZ03723 for ; + Fri, 23 Aug 2002 02:21:29 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D6D262940E7; Thu, 22 Aug 2002 18:19:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f160.law15.hotmail.com [64.4.23.160]) by + xent.com (Postfix) with ESMTP id 95D1D294099 for ; + Thu, 22 Aug 2002 18:18:38 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Thu, 22 Aug 2002 18:20:23 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Fri, 23 Aug 2002 01:20:23 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Re: The case for spam +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 23 Aug 2002 01:20:23.0609 (UTC) FILETIME=[41265290:01C24A43] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 01:20:23 +0000 + +Lucas Gonze: +>Spam is *the* tool for dissident news, since the fact that it's unsolicited +>means that recipients can't be blamed for being on a mailing list. + +That depends on how the list is collected, or +even on what the senders say about how the list +is collected. Better to just put it on a website, +and that way it can be surfed anonymously. AND +it doesn't clutter my inbox. + + +_________________________________________________________________ +Chat with friends online, try MSN Messenger: http://messenger.msn.com + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00042.efe6317ef2ebefe739aaeb4f0d51fbdb b/Ch3/datasets/spam/easy_ham/00042.efe6317ef2ebefe739aaeb4f0d51fbdb new file mode 100644 index 000000000..7532d397c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00042.efe6317ef2ebefe739aaeb4f0d51fbdb @@ -0,0 +1,58 @@ +From fork-admin@xent.com Fri Aug 23 11:08:55 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D741B47C6F + for ; Fri, 23 Aug 2002 06:06:55 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:55 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7N1jTZ04367 for ; + Fri, 23 Aug 2002 02:45:29 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6A11E2940F5; Thu, 22 Aug 2002 18:43:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp03.mrf.mail.rcn.net (smtp03.mrf.mail.rcn.net + [207.172.4.62]) by xent.com (Postfix) with ESMTP id 2D0CE294099 for + ; Thu, 22 Aug 2002 18:42:41 -0700 (PDT) +X-Info: This message was accepted for relay by smtp03.mrf.mail.rcn.net as + the sender used SMTP authentication +X-Trace: UmFuZG9tSVZFFzJmsb6CFx8j2lnFk529F6pHVq8zxRebZ/rkY9nOITB+/+3fN03H5gv+GHxViF4= +Received: from eb-174121.od.nih.gov ([156.40.174.121] + helo=TOSHIBA-L8QYR7M) by smtp03.mrf.mail.rcn.net with asmtp (Exim 3.35 #6) + id 17i3Uv-0007Lj-00 for fork@xent.com; Thu, 22 Aug 2002 21:44:25 -0400 +From: "John Evdemon" +To: fork@spamassassin.taint.org +MIME-Version: 1.0 +Subject: Re: Entrepreneurs +Message-Id: <3D655B37.2901.1DB12A@localhost> +Priority: normal +In-Reply-To: <20020823005705.D63AEC44E@argote.ch> +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7BIT +Content-Description: Mail message body +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 21:44:23 -0400 + +On 23 Aug 2002 at 2:57, Robert Harley wrote: + +> It's an amusing anecdote, I don't know if it's true or not, +> but certainly nothing here supports the authoritative +> sounding conclusion "Status: False". + +I actually thought it was pretty funny and quite accurate. Who cares if the spinmeisters are denying it? +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00043.d2673a72d215cbdd747dc98cde41fbd2 b/Ch3/datasets/spam/easy_ham/00043.d2673a72d215cbdd747dc98cde41fbd2 new file mode 100644 index 000000000..da07dd710 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00043.d2673a72d215cbdd747dc98cde41fbd2 @@ -0,0 +1,151 @@ +From ilug-admin@linux.ie Fri Aug 23 11:08:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E461E44174 + for ; Fri, 23 Aug 2002 06:06:36 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:36 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7N7RJZ14671 for + ; Fri, 23 Aug 2002 08:27:19 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id IAA13280; Fri, 23 Aug 2002 08:23:50 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from mail01.svc.cra.dublin.eircom.net + (mail01.svc.cra.dublin.eircom.net [159.134.118.17]) by lugh.tuatha.org + (8.9.3/8.9.3) with SMTP id IAA13247 for ; Fri, + 23 Aug 2002 08:23:42 +0100 +Received: (qmail 37798 messnum 126638 invoked from + network[213.190.156.48/unknown]); 23 Aug 2002 07:23:11 -0000 +Received: from unknown (HELO XENON16) (213.190.156.48) by + mail01.svc.cra.dublin.eircom.net (qp 37798) with SMTP; 23 Aug 2002 + 07:23:11 -0000 +Message-Id: <001b01c24a76$315c63d0$e600000a@XENON16> +From: "wintermute" +To: +References: <3d65260f.948.0@mail.dnet.co.uk> +Subject: Re: [ILUG] Newbie seeks advice - Suse 7.2 +Date: Fri, 23 Aug 2002 08:25:01 +0100 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +< > +> I downloaded a driver from the nVidia website and installed it using RPM. +> Then I ran Sax2 (as was recommended in some postings I found on the net), +but +> it still doesn't feature my video card in the available list. What next? + + +hmmm. + +Peter. + +Open a terminal and as root type +lsmod +you want to find a module called +NVdriver. + +If it isn't loaded then load it. +#insmod NVdriver.o +Oh and ensure you have this module loaded on boot.... else when you reboot +you might be in for a nasty surprise. + +Once the kernel module is loaded + +#vim /etc/X11/XF86Config + +in the section marked +Driver I have "NeoMagic" +you need to have +Driver "nvidia" + +Here is part of my XF86Config + +Also note that using the card you are using you 'should' be able to safely +use the FbBpp 32 option . + +Section "Module" + Load "extmod" + Load "xie" + Load "pex5" + Load "glx" + SubSection "dri" #You don't need to load this Peter. + Option "Mode" "666" + EndSubSection + Load "dbe" + Load "record" + Load "xtrap" + Load "speedo" + Load "type1" +EndSection + +#Plus the Modelines for your monitor should be singfinicantly different. + +Section "Monitor" + Identifier "Monitor0" + VendorName "Monitor Vendor" + ModelName "Monitor Model" + HorizSync 28.00-35.00 + VertRefresh 43.00-72.00 + Modeline "800x600" 36 800 824 896 1024 600 601 603 625 + Modeline "1024x768" 49 1024 1032 1176 1344 768 771 777 806 +EndSection + +Section "Device" + + Identifier "Card0" + Driver "neomagic" #Change this to "nvidia"... making sure the modules +are in the correct path + VendorName "Neomagic" # "Nvidia" + BoardName "NM2160" + BusID "PCI:0:18:0" +EndSection + +Section "Screen" + Identifier "Screen0" + Device "Card0" + Monitor "Monitor0" + DefaultDepth 24 + SubSection "Display" + Depth 1 + EndSubSection + SubSection "Display" + Depth 4 + EndSubSection + SubSection "Display" + Depth 8 + EndSubSection + SubSection "Display" + Depth 15 + EndSubSection + SubSection "Display" + Depth 16 + EndSubSection + SubSection "Display" + Depth 24 + #FbBpp 32 #Ie you should be able lto uncomment this line + Modes "1024x768" "800x600" "640x480" # And add in higher resulutions as +desired. + EndSubSection +EndSection + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00044.d087bf5e76ba737908b482cb028b056c b/Ch3/datasets/spam/easy_ham/00044.d087bf5e76ba737908b482cb028b056c new file mode 100644 index 000000000..e72bdaa80 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00044.d087bf5e76ba737908b482cb028b056c @@ -0,0 +1,76 @@ +From fork-admin@xent.com Fri Aug 23 11:09:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6C8BB44161 + for ; Fri, 23 Aug 2002 06:06:57 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:57 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7N8CWZ15864 for ; + Fri, 23 Aug 2002 09:12:32 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2DDA329418E; Fri, 23 Aug 2002 01:10:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hughes-fe01.direcway.com (hughes-fe01.direcway.com + [66.82.20.91]) by xent.com (Postfix) with ESMTP id 0EC36294099 for + ; Fri, 23 Aug 2002 01:09:30 -0700 (PDT) +Received: from spinnaker ([64.157.38.84]) by hughes-fe01.direcway.com + (InterMail vK.4.04.00.00 201-232-137 license + dcc4e84cb8fc01ca8f8654c982ec8526) with ESMTP id + <20020823081149.JPJZ17240.hughes-fe01@spinnaker> for ; + Fri, 23 Aug 2002 04:11:49 -0400 +Subject: Re: Entrepreneurs +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +From: Chuck Murcko +To: fork@spamassassin.taint.org +Content-Transfer-Encoding: 7bit +In-Reply-To: <20020822205834.D7039C44E@argote.ch> +Message-Id: +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 01:11:02 -0700 + +According to my son, it was actually Homer Simpson, who claimed the +French had no word for victory. + +Chuck + +On Thursday, August 22, 2002, at 01:58 PM, Robert Harley wrote: + +> An apparent quote from Dubya, from the Times (sent to me by my Dad): +> +> http://www.timesonline.co.uk/printFriendly/0,,1-43-351083,00.html +> +> ------------------------------------------------------------------------------ +> TONY BLAIR's special relationship with George W. Bush is under +> considerable strain. Not only do the two disagree on Yassir Arafat's +> tenure as leader of the Palestinian Authority, but Blair has started +> telling disparaging anecdotes about the President. +> +> Baroness Williams of Crosby recalled a story told to her by 'my good +> friend Tony Blair' recently in Brighton. Blair, Bush and Jacques +> Chirac were discussing economics and, in particular, the decline of +> the French economy. 'The problem with the French,' Bush confided in +> Blair, 'is that they don't have a word for entrepreneur.' +> ------------------------------------------------------------------------------ +> +> R +> http://xent.com/mailman/listinfo/fork +> + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00045.f0a8de2cf2b3cf745341b960d7a0119f b/Ch3/datasets/spam/easy_ham/00045.f0a8de2cf2b3cf745341b960d7a0119f new file mode 100644 index 000000000..48e120af2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00045.f0a8de2cf2b3cf745341b960d7a0119f @@ -0,0 +1,61 @@ +From fork-admin@xent.com Fri Aug 23 11:09:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3CB6743F99 + for ; Fri, 23 Aug 2002 06:06:58 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:58 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7N8rUZ17136 for ; + Fri, 23 Aug 2002 09:53:30 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7345F294192; Fri, 23 Aug 2002 01:51:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id 308B6294099 for ; Fri, 23 Aug 2002 01:50:40 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id D5070C44E; + Fri, 23 Aug 2002 10:44:35 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: Entrepreneurs +Message-Id: <20020823084435.D5070C44E@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 10:44:35 +0200 (CEST) + +Whore eructed: +>--]It's an amusing anecdote, I don't know if it's true or not, but +>--]certainly nothing here supports the authoritative sounding conclusion +>--]"Status: False". +> +>So thats the trick, just let any anecdotal utterances you LIKE be deemed +>true [...] + +Exsqueeze me, but what part of "I don't know if it's true or not" +did you fail to grok? I personally doubt it simply because I never +heard of Bush and Chirac going to Brighton. + +Next time I hear a joke, I promise not to laugh until I have checked +out primary sources for confirmation in triplicate, OK? Good thing +we have you around to keep us on the straight and narrow, all the while +inundating us with such erudite profundities as "Kill your idols folks", +"fight the powers that be, from with out and from with in" and innumerable +other dippy bromides. + + +R +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00046.c8491e68aa5652272d6511bb7d848d37 b/Ch3/datasets/spam/easy_ham/00046.c8491e68aa5652272d6511bb7d848d37 new file mode 100644 index 000000000..a161956e3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00046.c8491e68aa5652272d6511bb7d848d37 @@ -0,0 +1,27 @@ +From quinlan@pathname.com Fri Aug 23 11:33:57 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D1C5643F99 + for ; Fri, 23 Aug 2002 06:33:56 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:33:56 +0100 (IST) +Received: from proton.pathname.com + (adsl-216-103-211-240.dsl.snfc21.pacbell.net [216.103.211.240]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7NAVFZ20272 for + ; Fri, 23 Aug 2002 11:31:15 +0100 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17iBiq-0005K9-00; Fri, 23 Aug 2002 03:31:20 -0700 +To: zzzz@spamassassin.taint.org, craig@deersoft.com +Subject: FYI - gone this weekend +Cc: quinlan@pathname.com +Message-Id: +From: Daniel Quinlan +Date: Fri, 23 Aug 2002 03:31:20 -0700 + +I won't be reading email until Sunday night or so. Good luck with +2.40 and don't do anything I wouldn't do. ;-) + +- Dan + diff --git a/Ch3/datasets/spam/easy_ham/00047.39812fcb014cf9c22a2ff4fec61f3c19 b/Ch3/datasets/spam/easy_ham/00047.39812fcb014cf9c22a2ff4fec61f3c19 new file mode 100644 index 000000000..6c7039106 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00047.39812fcb014cf9c22a2ff4fec61f3c19 @@ -0,0 +1,82 @@ +From ilug-admin@linux.ie Thu Aug 29 16:42:34 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9AD0D43F99 + for ; Thu, 29 Aug 2002 11:42:34 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 16:42:34 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TFYfZ18351 for + ; Thu, 29 Aug 2002 16:34:42 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA30663; Thu, 29 Aug 2002 16:32:44 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from mail02.svc.cra.dublin.eircom.net + (mail02.svc.cra.dublin.eircom.net [159.134.118.18]) by lugh.tuatha.org + (8.9.3/8.9.3) with SMTP id QAA30628 for ; Thu, + 29 Aug 2002 16:32:37 +0100 +Received: (qmail 48111 messnum 226577 invoked from + network[213.190.156.48/unknown]); 29 Aug 2002 15:15:37 -0000 +Received: from unknown (HELO XENON16) (213.190.156.48) by + mail02.svc.cra.dublin.eircom.net (qp 48111) with SMTP; 29 Aug 2002 + 15:15:37 -0000 +Message-Id: <005401c24f6f$2f797b90$e600000a@XENON16> +From: "wintermute" +To: +References: <3D6E355E.9060008@diva.ie> +Subject: Re: [ILUG] eircoms adsl modems +Date: Thu, 29 Aug 2002 16:17:26 +0100 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +It will function as a router if that is what you wish. + +It even looks like the modem's embedded OS is some kind of linux, being that +it has interesting interfaces like eth0. + +I don't use it as a router though.... I just have it do the absolute minimum +DSL stuff and do all the really fun stuff like pppoe on my linux box........ + +Also the manual tells you what the default password is. + +Don't forget to run pppoe over the alcatel speedtouch 350i as in my case you +'HAVE TO' have a bridge configured in the router/modem's software........ +This lists your VCI values etc. + + +> Also, does anyone know if the high-end SpeedTouch, with +> 4 ethernet ports, can act as a full router or do I still +> need to run a pppoe stack on the linux box? +> +> Regards, +> +> Vin +> +> +> -- +> Irish Linux Users' Group: ilug@linux.ie +> http://www.linux.ie/mailman/listinfo/ilug for (un)subscription +information. +> List maintainer: listmaster@linux.ie +> + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00048.1e067f31e83cc6ea3e9103b52f15588e b/Ch3/datasets/spam/easy_ham/00048.1e067f31e83cc6ea3e9103b52f15588e new file mode 100644 index 000000000..98bc1b370 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00048.1e067f31e83cc6ea3e9103b52f15588e @@ -0,0 +1,74 @@ +From fork-admin@xent.com Thu Aug 29 16:52:57 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7996B44155 + for ; Thu, 29 Aug 2002 11:52:54 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 16:52:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7TFklZ18708 for ; + Thu, 29 Aug 2002 16:46:47 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AA6122940DA; Thu, 29 Aug 2002 08:44:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.auracom.net (smtp1.auracom.net [165.154.140.23]) by + xent.com (Postfix) with ESMTP id 1D5E12940DA for ; + Thu, 29 Aug 2002 08:43:15 -0700 (PDT) +Received: from maya.dyndns.org (ts5-038.ptrb.interhop.net + [165.154.190.102]) by smtp1.auracom.net (8.11.2/8.11.2) with ESMTP id + g7TFIpD06133; Thu, 29 Aug 2002 11:18:51 -0400 (EDT) +Received: by maya.dyndns.org (Postfix, from userid 501) id 72BCA1C38A; + Thu, 29 Aug 2002 11:19:27 -0400 (EDT) +To: Eirikur Hallgrimsson +Cc: FoRK +Subject: Re: Internet saturation (but not in Iceland) +References: <200208290358.03815.eh@mad.scientist.com> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 29 Aug 2002 11:19:27 -0400 + +>>>>> "E" == Eirikur Hallgrimsson writes: + + E> Gary's news service at teledyn.com has an article on Internet + E> Saturation. Let me ask you....If you were on a rock in the + E> middle of the Atlantic, mostly in the dark for half the year, + E> wouldn't *you* like a bit of internet distraction? They've + E> already done the obvious and fiber-ringed the island. + +There's lots of similar places. Saskatchewan, for example, once +shared with Iceland the distinction of most telephone connections per +capita, and for a long time shared the internet penetration lead with +Iceland (Sask is a land-locked massive expanse of ultra-flat dust with +only two rivers and farm sizes measured in the +hundred-thousand-hectares). + +It's still curious Iceland leads. Maybe there's just a deep cultural +curiousity and fascination with watching advertising from the rest of +the world. Maybe they're downloading Bjork videos. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00049.838d44b342e0ab4743507510a8ca206f b/Ch3/datasets/spam/easy_ham/00049.838d44b342e0ab4743507510a8ca206f new file mode 100644 index 000000000..ee7ffb79c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00049.838d44b342e0ab4743507510a8ca206f @@ -0,0 +1,64 @@ +From fork-admin@xent.com Thu Aug 29 16:32:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C408E43F9B + for ; Thu, 29 Aug 2002 11:32:25 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 16:32:25 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7TFU0Z18213 for ; + Thu, 29 Aug 2002 16:30:03 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BDDE12940F6; Thu, 29 Aug 2002 08:27:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mx.spiritone.com (mx.spiritone.com [216.99.221.5]) by + xent.com (Postfix) with SMTP id 2E151294099 for ; + Thu, 29 Aug 2002 08:26:08 -0700 (PDT) +Received: (qmail 28639 invoked from network); 29 Aug 2002 15:28:11 -0000 +Received: (ofmipd 216.99.213.165); 29 Aug 2002 15:27:49 -0000 +Message-Id: +From: "RossO" +To: fork@spamassassin.taint.org +Subject: Re: Computational Recreations +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Content-Transfer-Encoding: 7bit +In-Reply-To: +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 29 Aug 2002 08:28:13 -0700 + +On Monday, August 26, 2002, at 09:59 AM, Tom wrote: + +> Post MG in the 80's there were the colums by A K Dewdney that I dug a +> bunch put into a book called Turing Omnibus and then there is , of +> course, all the goodens put out by Dougy Hoffstadler. + +A.K. Dewdney was the name I was looking for and the column was "Computer +Recreations". Turns out he's still in Ontario and even has some homemade +Sci-Fi online... + +http://www.csd.uwo.ca/faculty/akd/TALES/index.html + +Vat Man +Programming Roger +The Homunculids +Alphie & Omega + + +...Ross... + + diff --git a/Ch3/datasets/spam/easy_ham/00050.74d3103c5691914a530dcae2f656a1f5 b/Ch3/datasets/spam/easy_ham/00050.74d3103c5691914a530dcae2f656a1f5 new file mode 100644 index 000000000..0476a018a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00050.74d3103c5691914a530dcae2f656a1f5 @@ -0,0 +1,146 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 16:42:46 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id EDB0C43F9B + for ; Thu, 29 Aug 2002 11:42:43 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 16:42:44 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7TFYvZ18369 for ; Thu, 29 Aug 2002 16:34:58 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kRI7-0008KP-00; Thu, + 29 Aug 2002 08:33:03 -0700 +Received: from moonbase.zanshin.com ([167.160.213.139]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17kRHG-000488-00 for + ; Thu, 29 Aug 2002 08:32:10 -0700 +Received: from aztec.zanshin.com (IDENT:schaefer@aztec.zanshin.com + [167.160.213.132]) by moonbase.zanshin.com (8.11.0/8.11.0) with ESMTP id + g7TFW8J23933 for ; Thu, + 29 Aug 2002 08:32:08 -0700 +From: Bart Schaefer +To: Spamassassin-Talk +Subject: Re: [SAtalk] O.T. Habeus -- Why? +In-Reply-To: <3D6E255A.CB569D9B@hallikainen.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 08:32:08 -0700 (PDT) +Date: Thu, 29 Aug 2002 08:32:08 -0700 (PDT) + +On 28 Aug 2002, Daniel Quinlan wrote: + +> Dan Kohn writes: +> +> > Daniel, it's easy enough for you to change the Habeas scores yourself +> > on your installation. If Habeas fails to live up to its promise to +> > only license the warrant mark to non-spammers and to place all +> > violators on the HIL, then I have no doubt that Justin and Craig will +> > quickly remove us from the next release. But, you're trying to kill +> > Habeas before it has a chance to show any promise. +> +> I think I've worked on SA enough to understand that I can localize a +> score. I'm just not comfortable with using SpamAssassin as a vehicle +> for drumming up your business at the expense of our user base. + +I have to agree here. If Habeas is going to die just because SA does not +support it, that's a serious problem with the business model; but that is +nobody's problem but Habeas's. + +A possible solution is for Habeas's business model to include some kind of +incentive for users of SA to give it the benefit of the doubt. I have yet +to think of an incentive that fits the bill ... + +On Thu, 29 Aug 2002, Justin Mason wrote: + +> I don't see a problem supporting it in SpamAssassin -- but I see Dan's +> points. +> +> - high score: as far as I can see, that's because SpamAssassin is +> assigning such high scores to legit newsletters these days, and the +> Habeas mark has to bring it down below that. :( IMO we have to fix +> the high-scorers anyway -- no spam ever *needs* to score over 5 in our +> scoring system, 5 == tagged anyway. + +This is off the topic of the rest of this discussion, but amavisd (in all +its incarnations) and MIMEDefang and several other MTA plugins all reject +at SMTP time messages that scores higher than some threshold (often 10). +If some new release were to start scoring all spam no higher than 5.1, +there'd better be _zero_ FPs, because all those filters would drop their +thresholds to 5. + +On Thu, 29 Aug 2002, Michael Moncur wrote: + +> But I agree that there needs to be more focus on eliminating rules that +> frequently hit on newsletters. If any newsletters actually use the Habeas +> mark, that will be one way to help. + +Newsletters won't use the mark. Habeas is priced way too high -- a factor +of at least 20 over what the market will bear, IMO -- on a per-message +basis for most typical mailing lists (Lockergnome, say) to afford it. + +On Thu, 29 Aug 2002, Harold Hallikainen wrote: + +> Habeus has come up with a very clever way to use existing law to battle +> spam. It seems that at some point they could drop the licensing fee to +> $1 or less and make all their income off suing the spammers for +> copyright infringement. + +Sorry, that just can't work. + +If the Habeas mark actually becomes both widespread enough in non-spam, +and effectively-enforced enough to be absent from spam, such that, e.g., +SA could assign a positive score to messages that do NOT have it, then +spammers are out of business and Habeas has no one to sue. There's nobody +left to charge except the people who want (or are forced against their +will because their mail won't get through otherwise) to use the mark. + +Conversely, if there are enough spammers forging the mark for Habeas to +make all its income suing them, then the mark is useless for the purpose +for which it was designed. + +Either way it seems to me that, after maybe a couple of lawsuits against +real spammers and a lot of cease-and-desist letters to clueless Mom&Pops, +then either (a) they're out of business, (b) they have to sell the rights +to use the mark to increasingly questionable senders, or (c) they've both +created and monopolized a market for "internet postage stamps" that +everybody has to pay them for. + +The latter would be quite a coup if they [*] could pull it off -- they do +absolutely nothing useful, unless you consider threatening people with +lawsuits useful, yet still collect a fee either directly or indirectly +from everyone on the internet -- effectively we'll be paying them for the +privilege of policing their trademark for them. I don't believe they'll +ever get that far, but I don't particularly want to help them make it. + +[*] And I use the term "they" loosely, because the whole company could +consist of one lawyer if it really got to that point. + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/00051.03dcdb0e4e6100cfcf0eddbf78fbae17 b/Ch3/datasets/spam/easy_ham/00051.03dcdb0e4e6100cfcf0eddbf78fbae17 new file mode 100644 index 000000000..ff0a2af1f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00051.03dcdb0e4e6100cfcf0eddbf78fbae17 @@ -0,0 +1,57 @@ +From ilug-admin@linux.ie Thu Aug 29 16:42:35 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 78D9143F9B + for ; Thu, 29 Aug 2002 11:42:35 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 16:42:35 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TFblZ18551 for + ; Thu, 29 Aug 2002 16:37:47 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA30871; Thu, 29 Aug 2002 16:36:54 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from relay07.indigo.ie (relay07.indigo.ie [194.125.133.231]) by + lugh.tuatha.org (8.9.3/8.9.3) with SMTP id QAA30845 for ; + Thu, 29 Aug 2002 16:36:46 +0100 +Received: (qmail 68679 messnum 1027421 invoked from + network[194.125.130.10/unknown]); 29 Aug 2002 15:36:44 -0000 +Received: from unknown (HELO win2000) (194.125.130.10) by + relay07.indigo.ie (qp 68679) with SMTP; 29 Aug 2002 15:36:44 -0000 +Reply-To: +From: "Justin MacCarthy" +To: "Ilug@Linux.Ie" +Date: Thu, 29 Aug 2002 16:37:26 +0100 +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Importance: Normal +In-Reply-To: +Subject: [ILUG] Looking for a file / directory in zip file +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Is there a way to look for a particular file or directory in 100's of zip +files?? +Something like zgrep but for the filename instead of a word + +Thanks Justin + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00052.c6c74aeef6d36423f57807ad4c901dc4 b/Ch3/datasets/spam/easy_ham/00052.c6c74aeef6d36423f57807ad4c901dc4 new file mode 100644 index 000000000..297a53b78 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00052.c6c74aeef6d36423f57807ad4c901dc4 @@ -0,0 +1,88 @@ +From ilug-admin@linux.ie Thu Aug 29 16:52:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D36DD43F99 + for ; Thu, 29 Aug 2002 11:52:51 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 16:52:51 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TFlwZ18861 for + ; Thu, 29 Aug 2002 16:47:58 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA31616; Thu, 29 Aug 2002 16:46:26 +0100 +Received: from dspsrv.com (vir.dspsrv.com [193.120.211.34]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id QAA31563 for ; + Thu, 29 Aug 2002 16:45:49 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host vir.dspsrv.com + [193.120.211.34] claimed to be dspsrv.com +Received: from itg-gw.cr008.cwt.esat.net ([193.120.242.226] + helo=waider.ie) by dspsrv.com with asmtp (Exim 3.35 #1) id + 17kRUR-00052Y-00; Thu, 29 Aug 2002 16:45:47 +0100 +Message-Id: <3D6E409A.9030605@waider.ie> +Date: Thu, 29 Aug 2002 16:41:14 +0100 +From: Waider +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: macarthy@iol.ie +Cc: "Ilug@Linux.Ie" +Subject: Re: [ILUG] Looking for a file / directory in zip file +References: +X-Enigmail-Version: 0.65.2.0 +X-Enigmail-Supports: pgp-inline, pgp-mime +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +-----BEGIN PGP SIGNED MESSAGE----- + +Justin MacCarthy wrote: +| Is there a way to look for a particular file or directory in 100's of zip +| files?? +| Something like zgrep but for the filename instead of a word +| +| Thanks Justin +| +| + +probably there are more elegant solutions, but if your zips are in one +directory you can do something like + +for i in *.zip +do +if unzip -v $i | grep -q FILEYOUWANT +then +~ echo $i +fi +done + +Cheers, +Waider. +- -- +waider@waider.ie / Yes, it /is/ very personal of me +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org + +iQEVAwUBPW5AmaHbXyzZsAb3AQH+qQgA1vnUjJUwGDa1yCRQd3vZAnhkCF0KDBBA +o9MYq4CUg9cEzKALkTyZu4eOprhL50ReaICUGLMMEc5htU9zove4F+CSuvbAKKHL +nx7xa6kk2V+LFnwS6hWpdQolCaT+4iGZZbdFwmyNAWb/IrEYB0R4gp05sitDOl5U +RRlzYSM3IUYDrYpDUuX7Ta7bLvSdC1PpWSqy/wXphNIh7Bs2+eB9ERAujuqi6vJo +MBichYb3f3teVCQUbxTcaMowjpmv/Xm3gdUlGrUFbpc2O7447Xi5uDfRexzzDoJT +HlFS6OO2ZqzcMrtUYEgsfyqpaF1WuD38JoFpa2TmSyX74bBhxS8ecw== +=KYCm +-----END PGP SIGNATURE----- + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00053.707c625cb618aadafe3e54544fa3ca78 b/Ch3/datasets/spam/easy_ham/00053.707c625cb618aadafe3e54544fa3ca78 new file mode 100644 index 000000000..1e1470dee --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00053.707c625cb618aadafe3e54544fa3ca78 @@ -0,0 +1,72 @@ +From ilug-admin@linux.ie Thu Aug 29 16:52:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 97DCD43F9B + for ; Thu, 29 Aug 2002 11:52:52 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 16:52:52 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TFr2Z18960 for + ; Thu, 29 Aug 2002 16:53:02 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA31908; Thu, 29 Aug 2002 16:51:27 +0100 +Received: from hawk.dcu.ie (mail.dcu.ie [136.206.1.5]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA31829 for ; Thu, + 29 Aug 2002 16:51:17 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host mail.dcu.ie [136.206.1.5] + claimed to be hawk.dcu.ie +Received: from prodigy.redbrick.dcu.ie (136.206.15.10) by hawk.dcu.ie + (6.0.040) id 3D6203D30003D917 for ilug@linux.ie; Thu, 29 Aug 2002 16:51:17 + +0100 +Received: by prodigy.redbrick.dcu.ie (Postfix, from userid 2027) id + 32184DA4A; Thu, 29 Aug 2002 16:51:17 +0100 (IST) +Date: Thu, 29 Aug 2002 16:51:17 +0100 +From: Colin Whittaker +To: Irish LUG list +Message-Id: <20020829165117.A16258@prodigy.Redbrick.DCU.IE> +References: <20020829143111.GN1757@jinny.ie> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +In-Reply-To: <20020829143111.GN1757@jinny.ie>; from valen@tuatha.org on + Thu, Aug 29, 2002 at 03:31:11PM +0100 +Organization: North East Technologies Ltd. +X-Subliminal-Message: Give Colin all your money. +Subject: [ILUG] Re: serial console...not quite working +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +John P. Looney stated the following on Thu, Aug 29, 2002 at 03:31:11PM +0100 : +> I'm not sure what exactly is wrong with this, but I can't get a redhat +> 7.1 box to use ttyS0 as a console. +> +> The relevant bits of /boot/grub/grub.conf are: +> +> serial --unit=0 --speed=115200 +> terminal --timeout=2 console serial +> title=linux +> root (hd0,4) +> kernel /boot/bzImage ro root=/dev/md0 console=ttyS0,115200n81 + ^ +That 1 is unneeded and is probably whats upsetting your kernel + +we use "console=ttyS0,9600n8" but the 9600 is mainly cos we are a cisco +shop and its to keepo everyhting the same. + +Colin +-- +"Design" is like a religion - too much of it makes you inflexibly and unpopular. + Linus Torvalds + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00054.f3e1dc8f3a7fdc5bec424db5e07e8ef8 b/Ch3/datasets/spam/easy_ham/00054.f3e1dc8f3a7fdc5bec424db5e07e8ef8 new file mode 100644 index 000000000..a3a8d8e6f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00054.f3e1dc8f3a7fdc5bec424db5e07e8ef8 @@ -0,0 +1,67 @@ +From ilug-admin@linux.ie Thu Aug 29 17:03:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8730543F99 + for ; Thu, 29 Aug 2002 12:03:21 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 17:03:21 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TFw4Z19203 for + ; Thu, 29 Aug 2002 16:58:04 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA32495; Thu, 29 Aug 2002 16:56:53 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from mail04.svc.cra.dublin.eircom.net + (mail04.svc.cra.dublin.eircom.net [159.134.118.20]) by lugh.tuatha.org + (8.9.3/8.9.3) with SMTP id QAA32465 for ; Thu, + 29 Aug 2002 16:56:45 +0100 +Received: (qmail 20521 messnum 1113064 invoked from + network[213.190.156.48/unknown]); 29 Aug 2002 15:56:14 -0000 +Received: from unknown (HELO XENON16) (213.190.156.48) by + mail04.svc.cra.dublin.eircom.net (qp 20521) with SMTP; 29 Aug 2002 + 15:56:14 -0000 +Message-Id: <006001c24f74$dc1acde0$e600000a@XENON16> +From: "wintermute" +To: +References: + <3D6E40AA.9080606@diva.ie> +Subject: Re: [ILUG] eircoms adsl modems +Date: Thu, 29 Aug 2002 16:58:04 +0100 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + + +Not true on the choice part. + +After three weeks of me telling eircom that I did not in fact need nor want +their ?1800 worth of router and firewall +nor their onsite survey... for the uncapped service I actually managed to +get a 4 port modem (after asking for a 1 port modem) instead of ye olde +hardware router & firewall and eircom onsite. + +I would have argued for the 1 port modem... (which I had asked for), but a +Director wanted the DSL up ... and fast.... + +Still it only took me three weeks to get (almost) what I +wanted.................................... + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00055.8481bc92aa3ab9d23ca30c0eaecfc5e4 b/Ch3/datasets/spam/easy_ham/00055.8481bc92aa3ab9d23ca30c0eaecfc5e4 new file mode 100644 index 000000000..fa756e756 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00055.8481bc92aa3ab9d23ca30c0eaecfc5e4 @@ -0,0 +1,56 @@ +From crackmice-admin@crackmice.com Thu Aug 29 17:13:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B715843F99 + for ; Thu, 29 Aug 2002 12:13:43 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 17:13:43 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TG7DZ19542; + Thu, 29 Aug 2002 17:07:13 +0100 +Received: from mir.eWare.com (mail.eware.com [212.120.152.162]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TG6IZ19504 for + ; Thu, 29 Aug 2002 17:06:18 +0100 +X-Mimeole: Produced By Microsoft Exchange V6.0.5762.3 +Content-Class: urn:content-classes:message +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Subject: people we know on the web +Message-Id: <0FF9F9D21D89554C8FF8930FFD39BD03A3F587@mir.eWare.com> +X-MS-Has-Attach: +X-MS-Tnef-Correlator: +Thread-Topic: What kind of celebrity are you? quiz +Thread-Index: AcJPWriCN9BF8CjcT1CZSIoGcK21hQAG1WjQ +From: "Gerry Carr" +To: +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7TG6IZ19504 +Sender: crackmice-admin@crackmice.com +Errors-To: crackmice-admin@crackmice.com +X-Beenthere: crackmice@crackmice.com +X-Mailman-Version: 2.0.10 +Precedence: bulk +Reply-To: mice@crackmice.com +List-Unsubscribe: , + +List-Id: http://crackmice.com/ +List-Post: +List-Help: +List-Subscribe: , + +List-Archive: +Date: Thu, 29 Aug 2002 17:07:35 +0100 + +http://www.bbc.co.uk/radio1/alt/nireland/ni_team.shtml + +first of a very short series. + +gerry +_______________________________________________ +Crackmice mailing list +Crackmice@crackmice.com +http://crackmice.com/mailman/listinfo/crackmice + diff --git a/Ch3/datasets/spam/easy_ham/00056.b510d34bac037c4c377b1f51dbe5f0d3 b/Ch3/datasets/spam/easy_ham/00056.b510d34bac037c4c377b1f51dbe5f0d3 new file mode 100644 index 000000000..b78aaef45 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00056.b510d34bac037c4c377b1f51dbe5f0d3 @@ -0,0 +1,74 @@ +From gordon@rutter.freeserve.co.uk Thu Aug 29 18:06:18 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5715544155 + for ; Thu, 29 Aug 2002 13:06:17 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 18:06:17 +0100 (IST) +Received: from n32.grp.scd.yahoo.com (n32.grp.scd.yahoo.com + [66.218.66.100]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7TH1aZ21336 for ; Thu, 29 Aug 2002 18:01:36 +0100 +X-Egroups-Return: sentto-2242572-53259-1030640499-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.97] by n32.grp.scd.yahoo.com with NNFMP; + 29 Aug 2002 17:01:39 -0000 +X-Sender: gordon@rutter.freeserve.co.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 29 Aug 2002 17:01:39 -0000 +Received: (qmail 91661 invoked from network); 29 Aug 2002 17:01:38 -0000 +Received: from unknown (66.218.66.217) by m14.grp.scd.yahoo.com with QMQP; + 29 Aug 2002 17:01:38 -0000 +Received: from unknown (HELO cmailg1.svr.pol.co.uk) (195.92.195.171) by + mta2.grp.scd.yahoo.com with SMTP; 29 Aug 2002 17:01:38 -0000 +Received: from modem-280.blotto.dialup.pol.co.uk ([62.25.145.24] + helo=default) by cmailg1.svr.pol.co.uk with smtp (Exim 3.35 #1) id + 17kSfp-0000Al-00; Thu, 29 Aug 2002 18:01:37 +0100 +Message-Id: <000501c24f7d$8ceace60$1891193e@default> +To: +Cc: +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +From: "Gordon Rutter" +X-Yahoo-Profile: gordonrutter +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 29 Aug 2002 18:00:08 +0100 +Subject: [zzzzteana] Fw: [nessie] New Nessie Pics +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + + +Gordon Rutter +gordon@rutter.freeserve.co.uk +Join the Fortean Book Reviews list at +forteanbookreviews-subscribe@yahoogroups.com + + + +>
The latest potential pictures of Nessie - underwater - are at 
+> www.hi-lands.com
+
+
+
+------------------------ Yahoo! Groups Sponsor ---------------------~-->
+4 DVDs Free +s&p Join Now
+http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM
+---------------------------------------------------------------------~->
+
+To unsubscribe from this group, send an email to:
+forteana-unsubscribe@egroups.com
+
+ 
+
+Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 
+
+
+
diff --git a/Ch3/datasets/spam/easy_ham/00057.7c3a836baaa732cd915546442c0fef1a b/Ch3/datasets/spam/easy_ham/00057.7c3a836baaa732cd915546442c0fef1a
new file mode 100644
index 000000000..17d995294
--- /dev/null
+++ b/Ch3/datasets/spam/easy_ham/00057.7c3a836baaa732cd915546442c0fef1a
@@ -0,0 +1,77 @@
+From iiu-admin@taint.org  Thu Aug 29 18:06:13 2002
+Return-Path: 
+Delivered-To: zzzz@localhost.netnoteinc.com
+Received: from localhost (localhost [127.0.0.1])
+	by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A7D3543F9B
+	for ; Thu, 29 Aug 2002 13:06:12 -0400 (EDT)
+Received: from phobos [127.0.0.1]
+	by localhost with IMAP (fetchmail-5.9.0)
+	for zzzz@localhost (single-drop); Thu, 29 Aug 2002 18:06:12 +0100 (IST)
+Received: from dogma.slashnull.org (localhost [127.0.0.1]) by
+    dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TH7cZ21544;
+    Thu, 29 Aug 2002 18:07:38 +0100
+Received: from web05.bigbiz.com (web05.bigbiz.com [216.218.198.5]) by
+    dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TH6XZ21517 for
+    ; Thu, 29 Aug 2002 18:06:34 +0100
+Received: from Alfalfa.deisedesign.com ([193.193.166.41]) by
+    web05.bigbiz.com (8.8.7/8.8.7) with ESMTP id KAA26886 for ;
+    Thu, 29 Aug 2002 10:05:43 -0700
+Message-Id: <5.1.0.14.0.20020829172833.032e1350@127.0.0.1>
+X-Sender: deisedesign/mwhelan/10.0.0.1@127.0.0.1
+X-Mailer: QUALCOMM Windows Eudora Version 5.1
+To: iiu@taint.org
+From: Martin Whelan 
+MIME-Version: 1.0
+Content-Type: text/plain; charset="iso-8859-1"; format=flowed
+Content-Transfer-Encoding: 8bit
+X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org
+    id g7TH6XZ21517
+Subject: [IIU] Viruses and Bounced Mail
+Sender: iiu-admin@taint.org
+Errors-To: iiu-admin@taint.org
+X-Beenthere: iiu@iiu.taint.org
+X-Mailman-Version: 2.0.10
+Precedence: bulk
+Reply-To: iiu@taint.org
+List-Unsubscribe: ,
+    
+List-Id: Irish Internet Users 
+List-Post: 
+List-Help: 
+List-Subscribe: ,
+    
+List-Archive: 
+Date: Thu, 29 Aug 2002 18:04:41 +0100
+
+All,
+
+Is it just me or has there been a massive increase in the amount of email 
+being falsely bounced around the place? I've already received email from a 
+number of people I don't know, asking why I am sending them email. These 
+can be explained by servers from Russia and elsewhere. Coupled with the 
+false emails I received myself, it's really starting to annoy me. Am I the 
+only one seeing an increase in recent weeks?
+
+Martin
+
+
+
+========================================================================
+Martin Whelan | Déise Design | www.deisedesign.com | Tel : 086-8888975
+
+" Our core product Déiseditor © allows organisations to publish information 
+to their web site in a fast and cost effective manner. There is no need for 
+a full time web developer, as the site can be easily updated by the 
+organisations own staff.
+Instant updates to keep site information fresh. Sites which are updated 
+regularly bring users back. Visit www.deisedesign.com/deiseditor.html for a 
+demonstration "
+
+Déiseditor © " Managing Your Information "
+========================================================================
+
+_______________________________________________
+IIU mailing list
+IIU@iiu.taint.org
+http://iiu.taint.org/mailman/listinfo/iiu
+
diff --git a/Ch3/datasets/spam/easy_ham/00058.ecfc3a7f406355a82abe9d16d3d5733a b/Ch3/datasets/spam/easy_ham/00058.ecfc3a7f406355a82abe9d16d3d5733a
new file mode 100644
index 000000000..eb28cc94a
--- /dev/null
+++ b/Ch3/datasets/spam/easy_ham/00058.ecfc3a7f406355a82abe9d16d3d5733a
@@ -0,0 +1,72 @@
+From sitescooper-talk-admin@lists.sourceforge.net  Mon Sep  2 12:22:41 2002
+Return-Path: 
+Delivered-To: zzzz@localhost.netnoteinc.com
+Received: from localhost (localhost [127.0.0.1])
+	by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C5A1343F9B
+	for ; Mon,  2 Sep 2002 07:22:40 -0400 (EDT)
+Received: from phobos [127.0.0.1]
+	by localhost with IMAP (fetchmail-5.9.0)
+	for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:22:40 +0100 (IST)
+Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net
+    [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id
+    g7TLB0Z28997 for ; Thu, 29 Aug 2002 22:11:00 +0100
+Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13]
+    helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with
+    esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kWZF-0004h8-00; Thu,
+    29 Aug 2002 14:11:05 -0700
+Received: from srv01s4.cas.org ([134.243.50.9] helo=srv01.cas.org) by
+    usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id
+    17kWZ5-0004GD-00 for ;
+    Thu, 29 Aug 2002 14:10:55 -0700
+Received: from lwv26awu.cas.org (lwv26awu [134.243.40.138]) by
+    srv01.cas.org (8.12.5/m8.12.5/CAS_MAIL_HUB-2.00) with ESMTP id
+    g7TLAlPW014804 for ;
+    Thu, 29 Aug 2002 17:10:47 -0400 (EDT)
+Received: (from lwv26@localhost) by lwv26awu.cas.org
+    (8.11.6+Sun/m4_8.11.6/CAS_CLIENT-1.18) id g7TLAlP01838; Thu,
+    29 Aug 2002 17:10:47 -0400 (EDT)
+From: "Larry W. Virden" 
+Message-Id: <20020829171046.AAB1816@cas.org>
+To: 
+Subject: [scoop] Scoop MS Word .doc file into something that plucker or other Palm app can display?
+Sender: sitescooper-talk-admin@example.sourceforge.net
+Errors-To: sitescooper-talk-admin@example.sourceforge.net
+X-Beenthere: sitescooper-talk@example.sourceforge.net
+X-Mailman-Version: 2.0.9-sf.net
+Precedence: bulk
+List-Help: 
+List-Post: 
+List-Subscribe: ,
+    
+List-Id: Discussion of sitescooper - see http://sitescooper.org/
+    
+List-Unsubscribe: ,
+    
+List-Archive: 
+X-Original-Date: Thu, 29 Aug 2002 17:10:47 -0400 (EDT)
+Date: Thu, 29 Aug 2002 17:10:47 -0400 (EDT)
+
+I am wondering whether there's a way that I can use sitescooper and/or plucker
+or some other free utility to convert word documents into something a bit
+more palmos friendly?
+
+I don't have a Windows machine, so it becomes problematic to convert them;
+I know that if this were not the case, in Word I could save them as some
+other more friendly format.
+-- 
+Tcl'2002 Sept 16, 2002, Vancouver, BC http://www.tcl.tk/community/tcl2002/
+Larry W. Virden  
+Even if explicitly stated to the contrary, nothing in this posting should 
+be construed as representing my employer's opinions.
+-><-
+
+
+-------------------------------------------------------
+This sf.net email is sponsored by:ThinkGeek
+Welcome to geek heaven.
+http://thinkgeek.com/sf
+_______________________________________________
+Sitescooper-talk mailing list
+Sitescooper-talk@lists.sourceforge.net
+https://lists.sourceforge.net/lists/listinfo/sitescooper-talk
+
diff --git a/Ch3/datasets/spam/easy_ham/00059.34a8067a36762120b9292004a4d68558 b/Ch3/datasets/spam/easy_ham/00059.34a8067a36762120b9292004a4d68558
new file mode 100644
index 000000000..faa8da650
--- /dev/null
+++ b/Ch3/datasets/spam/easy_ham/00059.34a8067a36762120b9292004a4d68558
@@ -0,0 +1,95 @@
+From sitescooper-talk-admin@lists.sourceforge.net  Mon Sep  2 12:23:07 2002
+Return-Path: 
+Delivered-To: zzzz@localhost.netnoteinc.com
+Received: from localhost (localhost [127.0.0.1])
+	by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 00C9643F9B
+	for ; Mon,  2 Sep 2002 07:23:07 -0400 (EDT)
+Received: from phobos [127.0.0.1]
+	by localhost with IMAP (fetchmail-5.9.0)
+	for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:23:07 +0100 (IST)
+Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net
+    [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id
+    g7U0RvZ06008 for ; Fri, 30 Aug 2002 01:27:57 +0100
+Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13]
+    helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with
+    esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kZdr-0006yt-00; Thu,
+    29 Aug 2002 17:28:03 -0700
+Received: from [210.14.43.56] (helo=min.kssp.upd.edu.ph) by
+    usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id
+    17kZdM-0007Tc-00 for ;
+    Thu, 29 Aug 2002 17:27:33 -0700
+Received: (qmail 30374 invoked from network); 30 Aug 2002 00:27:18 -0000
+Received: from unknown (HELO elayne.kssp.upd.edu.ph) (10.34.130.14) by 0
+    with SMTP; 30 Aug 2002 00:27:18 -0000
+Received: from elayne.kssp.upd.edu.ph (localhost.kssp.upd.edu.ph
+    [127.0.0.1]) by elayne.kssp.upd.edu.ph (8.12.3/8.12.3) with ESMTP id
+    g7U0RMjS024015 for ;
+    Fri, 30 Aug 2002 08:27:23 +0800 (PHT)
+Received: (from barryg@localhost) by elayne.kssp.upd.edu.ph
+    (8.12.3/8.12.3/Submit) id g7U0R9eT031218 for
+    sitescooper-talk@lists.sourceforge.net; Fri, 30 Aug 2002 08:27:09 +0800
+    (PHT)
+X-Authentication-Warning: elayne.kssp.upd.edu.ph: barryg set sender to
+    barryg@kssp.upd.edu.ph using -f
+From: "Barry Dexter A. Gonzaga" 
+To: sitescooper-talk@example.sourceforge.net
+Subject: Re: [scoop] Scoop MS Word .doc file into something that plucker or other Palm app can display?
+Message-Id: <20020830002709.GA21600@elayne.kssp.upd.edu.ph>
+Mail-Followup-To: sitescooper-talk@example.sourceforge.net
+References: <20020829171046.AAB1816@cas.org>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+In-Reply-To: <20020829171046.AAB1816@cas.org>
+User-Agent: Mutt/1.3.99i
+Sender: sitescooper-talk-admin@example.sourceforge.net
+Errors-To: sitescooper-talk-admin@example.sourceforge.net
+X-Beenthere: sitescooper-talk@example.sourceforge.net
+X-Mailman-Version: 2.0.9-sf.net
+Precedence: bulk
+List-Help: 
+List-Post: 
+List-Subscribe: ,
+    
+List-Id: Discussion of sitescooper - see http://sitescooper.org/
+    
+List-Unsubscribe: ,
+    
+List-Archive: 
+X-Original-Date: Fri, 30 Aug 2002 08:27:09 +0800
+Date: Fri, 30 Aug 2002 08:27:09 +0800
+
+Good Day!
+
+On Thu, Aug 29, 2002 at 05:10:47PM -0400, Larry W. Virden wrote:
+> I am wondering whether there's a way that I can use sitescooper and/or plucker
+> or some other free utility to convert word documents into something a bit
+> more palmos friendly?
+
+	You could try antiword (http://www.winfield.demon.nl/linux/).
+It's consoled based and converts word 6+ docs to text and some images to
+postscript and png.  You could also try openoffice and/or abiword if you
+have x installed.
+
+> I don't have a Windows machine, so it becomes problematic to convert them;
+> I know that if this were not the case, in Word I could save them as some
+> other more friendly format.
+
+	Great! ;)
+
+Mabuhay! barryg
+
+-- 
+Barry Dexter A. Gonzaga, bofh
+barryg@kssp.upd.edu.ph 
+
+
+-------------------------------------------------------
+This sf.net email is sponsored by:ThinkGeek
+Welcome to geek heaven.
+http://thinkgeek.com/sf
+_______________________________________________
+Sitescooper-talk mailing list
+Sitescooper-talk@lists.sourceforge.net
+https://lists.sourceforge.net/lists/listinfo/sitescooper-talk
+
diff --git a/Ch3/datasets/spam/easy_ham/00060.d51949a7342f8adc568483f6e799ee25 b/Ch3/datasets/spam/easy_ham/00060.d51949a7342f8adc568483f6e799ee25
new file mode 100644
index 000000000..9d81d1816
--- /dev/null
+++ b/Ch3/datasets/spam/easy_ham/00060.d51949a7342f8adc568483f6e799ee25
@@ -0,0 +1,46 @@
+From pudge@perl.org  Mon Sep  2 12:23:11 2002
+Return-Path: 
+Delivered-To: zzzz@localhost.netnoteinc.com
+Received: from localhost (localhost [127.0.0.1])
+	by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9A7C743F99
+	for ; Mon,  2 Sep 2002 07:23:11 -0400 (EDT)
+Received: from phobos [127.0.0.1]
+	by localhost with IMAP (fetchmail-5.9.0)
+	for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:23:11 +0100 (IST)
+Received: from cpu59.osdn.com (slashdot.org [64.28.67.73] (may be forged))
+    by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7U20KZ08932 for
+    ; Fri, 30 Aug 2002 03:00:21 +0100
+Received: from [10.2.181.14] (helo=perl.org) by cpu59.osdn.com with smtp
+    (Exim 3.35 #1 (Debian)) id 17kb3f-0002Em-00 for ;
+    Thu, 29 Aug 2002 21:58:47 -0400
+Date: Fri, 30 Aug 2002 02:00:24 +0000
+From: pudge@perl.org
+Subject: [use Perl] Headlines for 2002-08-30
+To: zzzz-use-perl@spamassassin.taint.org
+Precedence: list
+X-Bulkmail: 2.051
+Message-Id: 
+
+use Perl Daily Headline Mailer
+
+Installing Perl 5.8.0 on Mac OS X 10.2
+    posted by pudge on Thursday August 29, @15:03 (releases)
+    http://use.perl.org/article.pl?sid=02/08/29/193225
+
+
+
+
+Copyright 1997-2002 pudge.  All rights reserved.
+
+
+======================================================================
+
+You have received this message because you subscribed to it
+on use Perl.  To stop receiving this and other
+messages from use Perl, or to add more messages
+or change your preferences, please go to your user page.
+
+	http://use.perl.org/my/messages/
+
+You can log in and change your preferences from there.
+
diff --git a/Ch3/datasets/spam/easy_ham/00061.9cc2b5c110807914cc6c38263b7dd62a b/Ch3/datasets/spam/easy_ham/00061.9cc2b5c110807914cc6c38263b7dd62a
new file mode 100644
index 000000000..f7af27141
--- /dev/null
+++ b/Ch3/datasets/spam/easy_ham/00061.9cc2b5c110807914cc6c38263b7dd62a
@@ -0,0 +1,116 @@
+From sitescooper-talk-admin@lists.sourceforge.net  Mon Sep  2 12:28:11 2002
+Return-Path: 
+Delivered-To: zzzz@localhost.netnoteinc.com
+Received: from localhost (localhost [127.0.0.1])
+	by phobos.labs.netnoteinc.com (Postfix) with ESMTP id ADEBC43F99
+	for ; Mon,  2 Sep 2002 07:28:09 -0400 (EDT)
+Received: from phobos [127.0.0.1]
+	by localhost with IMAP (fetchmail-5.9.0)
+	for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:28:09 +0100 (IST)
+Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net
+    [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id
+    g7UDpYZ27586 for ; Fri, 30 Aug 2002 14:51:34 +0100
+Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13]
+    helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with
+    esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kmB1-0003rI-00; Fri,
+    30 Aug 2002 06:51:07 -0700
+Received: from snipe.mail.pas.earthlink.net ([207.217.120.62]) by
+    usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id
+    17kmAm-0008KI-00 for ;
+    Fri, 30 Aug 2002 06:50:52 -0700
+Received: from dialup-209.245.228.178.dial1.dallas1.level3.net
+    ([209.245.228.178] helo=localhost.localdomain) by
+    snipe.mail.pas.earthlink.net with esmtp (Exim 3.33 #1) id 17kmAb-00076W-00;
+    Fri, 30 Aug 2002 06:50:42 -0700
+Subject: Re: [scoop] Scoop MS Word .doc file into something that plucker or other Palm app can display?
+From: unlisted 
+To: "Larry W. Virden" 
+Cc: sitescooper-talk@example.sourceforge.net,
+	"Barry Dexter A. Gonzaga" 
+In-Reply-To: <20020830002709.GA21600@elayne.kssp.upd.edu.ph>
+References: <20020829171046.AAB1816@cas.org>
+    <20020830002709.GA21600@elayne.kssp.upd.edu.ph>
+Content-Type: text/plain
+Content-Transfer-Encoding: 7bit
+X-Mailer: Ximian Evolution 1.0.5
+Message-Id: <1030715441.2038.31.camel@leviticus>
+MIME-Version: 1.0
+Sender: sitescooper-talk-admin@example.sourceforge.net
+Errors-To: sitescooper-talk-admin@example.sourceforge.net
+X-Beenthere: sitescooper-talk@example.sourceforge.net
+X-Mailman-Version: 2.0.9-sf.net
+Precedence: bulk
+List-Help: 
+List-Post: 
+List-Subscribe: ,
+    
+List-Id: Discussion of sitescooper - see http://sitescooper.org/
+    
+List-Unsubscribe: ,
+    
+List-Archive: 
+X-Original-Date: 30 Aug 2002 08:50:38 -0500
+Date: 30 Aug 2002 08:50:38 -0500
+
+On Thu, 2002-08-29 at 19:27, Barry Dexter A. Gonzaga wrote:
+> On Thu, Aug 29, 2002 at 05:10:47PM -0400, Larry W. Virden wrote:
+> > I am wondering whether there's a way that I can use sitescooper and/or plucker
+> > or some other free utility to convert word documents into something a bit
+> > more palmos friendly?
+> 
+> 	You could try antiword (http://www.winfield.demon.nl/linux/).
+> It's consoled based and converts word 6+ docs to text and some images to
+> postscript and png.
+
+also there's catdoc and wv for Word --> text conversions.  actually, wv
+consists of wvWare, which as the manpage says "converts word documents
+into other formats such as PS, PDF, HTML, LaTeX, DVI, ABW".  HTML would
+probably be the best format for use with Plucker/SiteScooper, depending
+on how good the DOC --> HTML conversion is.  i haven't used either in
+over a year as AbiWord or OpenOffice work well enough.  (prefer AbiWord
+for it's light-weight size, but OpenOffice has the better DOC importer.)
+
+don't know which of these are better or worse than the other, but i
+figure, "the more the merrier". ;-)
+
+> You could also try openoffice and/or abiword if you
+> have x installed.
+
+AbiWord supports exporting to PalmDoc (.pdb) which is about as
+PalmOS-friendly as you can get.  never tried/needed it, but it's listed
+there in the "Save As" dialog box.
+
+Wine (or CrossOver Office, if you already have it) may support Word
+Viewer (free download from Microsoft), but didn't a year or so ago when
+i last tried.  Word Viewer is what i used back in the day to convert
+Word 97 docs to Word 95, as you could display the Word 97 doc and copy &
+paste the text (with formatting) into Word 95, which was the only
+version of Word that i had.  anyways, a little nostalgia.
+
+> > I don't have a Windows machine, so it becomes problematic to convert them;
+> > I know that if this were not the case, in Word I could save them as some
+> > other more friendly format.
+
+i have a windows (dual-boot) machine, but it only get used by my
+significant other and for burning multi-session cd-r/rw.  (is there any
+linux gui app that supports cdrecord's multi-session feature?)  since
+OpenOffice, i've been able to edit Word docs flawlessly (or at least the
+simple Word documents i receive from others).
+
+anyways...
+-- 
+
+PLEASE REQUEST PERMISSION TO REDISTRIBUTE
+   AUTHOR'S COMMENTS OR EMAIL ADDRESS.
+
+
+
+-------------------------------------------------------
+This sf.net email is sponsored by: OSDN - Tired of that same old
+cell phone?  Get a new here for FREE!
+https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390
+_______________________________________________
+Sitescooper-talk mailing list
+Sitescooper-talk@lists.sourceforge.net
+https://lists.sourceforge.net/lists/listinfo/sitescooper-talk
+
diff --git a/Ch3/datasets/spam/easy_ham/00062.009f5a1a8fa88f0b38299ad01562bb37 b/Ch3/datasets/spam/easy_ham/00062.009f5a1a8fa88f0b38299ad01562bb37
new file mode 100644
index 000000000..32fae7fd7
--- /dev/null
+++ b/Ch3/datasets/spam/easy_ham/00062.009f5a1a8fa88f0b38299ad01562bb37
@@ -0,0 +1,120 @@
+From DNS-swap@lists.ironclad.net.au  Mon Sep  2 12:28:53 2002
+Return-Path: 
+Delivered-To: zzzz@localhost.netnoteinc.com
+Received: from localhost (localhost [127.0.0.1])
+	by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 40C6C43F9B
+	for ; Mon,  2 Sep 2002 07:28:52 -0400 (EDT)
+Received: from phobos [127.0.0.1]
+	by localhost with IMAP (fetchmail-5.9.0)
+	for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:28:52 +0100 (IST)
+Received: from lists.ironclad.net.au ([203.30.247.12]) by
+    dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7UFQvZ30600 for
+    ; Fri, 30 Aug 2002 16:27:01 +0100
+Received: from dbsinfo.com by lists.ironclad.net.au with SMTP;
+    Sat, 31 Aug 2002 01:21:00 +1000
+Message-Id: <00c401c25039$7b055460$976fa8c0@cfl.rr.com>
+From: "Bob Musser" 
+To: 
+Subject: Tiny DNS Swap
+Date: Fri, 30 Aug 2002 11:25:31 -0400
+MIME-Version: 1.0
+Content-Type: multipart/alternative;
+    boundary="----=_NextPart_000_00C1_01C25017.F2F04E20"
+X-Priority: 3
+X-Msmail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2600.0000
+X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000
+Reply-To: "DNS-swap" 
+Sender: 
+Precedence: Bulk
+List-Software: LetterRip Pro 3.0.7 by Fog City Software, Inc.
+List-Subscribe: 
+List-Digest: 
+List-Unsubscribe: 
+
+(This list is sponsored by Ironclad Networks http://www.ironclad.net.au/)
+
+This is a multi-part message in MIME format.
+
+------=_NextPart_000_00C1_01C25017.F2F04E20
+Content-Type: text/plain;
+	charset="Windows-1252"
+Content-Transfer-Encoding: quoted-printable
+
+I'm using Simple DNS from JHSoft.  We support only a few web sites and =
+I'd like to swap secondary services with someone in a similar position.
+
+We have a static IP, DSL line and a 24/7 set of web, SQL, mail and now a =
+DNS server.  As I said, we are hosting about 10 web sites, web and DNS =
+traffic is almost nothing.  Everything is on lightly loaded APC battery =
+backups so we are very seldom down.
+
+I'd like to swap with someone also using Simple DNS to take advantage of =
+the trusted zone file transfer option.
+
+
+
+Bob Musser
+Database Services, Inc.
+Makers of:
+   Process Server's Toolbox
+   Courier Service Toolbox
+BobM@dbsinfo.com
+www.dbsinfo.com
+106 Longhorn Road
+Winter Park FL 32792
+(407) 679-1539
+
+
+
+------=_NextPart_000_00C1_01C25017.F2F04E20
+Content-Type: text/html;
+	charset="Windows-1252"
+Content-Transfer-Encoding: quoted-printable
+
+
+
+
+
+
+
+
+
I'm using Simple DNS from JHSoft.  We support = +only a few=20 +web sites and I'd like to swap secondary services with someone in a = +similar=20 +position.
+
 
+
We have a static IP, DSL line and a 24/7 set of web, = +SQL, mail=20 +and now a DNS server.  As I said, we are hosting about 10 web = +sites, web=20 +and DNS traffic is almost nothing.  Everything is on lightly loaded = +APC=20 +battery backups so we are very seldom down.
+
 
+
I'd like to swap with someone also using Simple DNS = +to take=20 +advantage of the trusted zone file transfer option.
+
 
+
 
+
 
+
Bob Musser
Database Services, Inc.
Makers=20 +of:
   Process Server's Toolbox
   Courier = +Service=20 +Toolbox
BobM@dbsinfo.com
www.dbsinfo.com
106 Longhorn = +Road
Winter=20 +Park FL 32792
(407) 679-1539
+
 
+
 
+ +------=_NextPart_000_00C1_01C25017.F2F04E20-- + + +-- +To Unsubscribe: +Sponsor & Host: Ironclad Networks + diff --git a/Ch3/datasets/spam/easy_ham/00063.0acbc484a73f0e0b727e06c100d8df7b b/Ch3/datasets/spam/easy_ham/00063.0acbc484a73f0e0b727e06c100d8df7b new file mode 100644 index 000000000..0d11d2674 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00063.0acbc484a73f0e0b727e06c100d8df7b @@ -0,0 +1,184 @@ +From DNS-swap@lists.ironclad.net.au Mon Sep 2 12:29:02 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id EE14044155 + for ; Mon, 2 Sep 2002 07:28:59 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:29:00 +0100 (IST) +Received: from lists.ironclad.net.au ([203.30.247.12]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7UFZJZ31030 for + ; Fri, 30 Aug 2002 16:35:19 +0100 +Received: from linkcreations.com.mx by lists.ironclad.net.au with SMTP; + Sat, 31 Aug 2002 01:30:02 +1000 +Date: Fri, 30 Aug 2002 10:30:36 -0500 +Subject: Re: Tiny DNS Swap +Content-Type: multipart/alternative; boundary=Apple-Mail-2-874629474 +MIME-Version: 1.0 (Apple Message framework v543) +From: Javier Cota +To: "DNS-swap" +In-Reply-To: <00c401c25039$7b055460$976fa8c0@cfl.rr.com> +Message-Id: <6EA7567E-BC2D-11D6-9CA1-00306565A7B2@linkcreations.com.mx> +X-Mailer: Apple Mail (2.543) +Reply-To: "DNS-swap" +Sender: +Precedence: Bulk +List-Software: LetterRip Pro 3.0.7 by Fog City Software, Inc. +List-Subscribe: +List-Digest: +List-Unsubscribe: + +(This list is sponsored by Ironclad Networks http://www.ironclad.net.au/) + + +--Apple-Mail-2-874629474 +Content-Transfer-Encoding: quoted-printable +Content-Type: text/plain; + charset=ISO-8859-1; + format=flowed + +Bob + +We are a commercial company who host around 150 web sites on each of it=20= + +servers, we can=B4t swap with you because we need someone in a similar=20= + +position. + +Thank you + +Javier + +El Viernes, 30 agosto, 2002, a las 10:25 AM, Bob Musser escribi=F3: + +> I'm using Simple DNS from JHSoft.=A0 We support only a few web sites = +and=20 +> I'd like to swap secondary services with someone in a similar > = +position. +> =A0 +> We have a static IP, DSL line and a 24/7 set of web, SQL, mail and now=20= + +> a DNS server.=A0 As I said, we are hosting about 10 web sites, web and=20= + +> DNS traffic is almost nothing.=A0 Everything is on lightly loaded APC=20= + +> battery backups so we are very seldom down. +> =A0 +> I'd like to swap with someone also using Simple DNS to take advantage=20= + +> of the trusted zone file transfer option. +> =A0 +> =A0 +> =A0 +> Bob Musser +> Database Services, Inc. +> Makers of: +> =A0=A0 Process Server's Toolbox +> =A0=A0 Courier Service Toolbox +> BobM@dbsinfo.com +> www.dbsinfo.com +> 106 Longhorn Road +> Winter Park FL 32792 +> (407) 679-1539 +> =A0 +> =A0 +> +--- +Atentamente +Javier Cota +Integraci=F3n tecnol=F3gica +52723341 +javier@linkcreations.com.mx + + +--Apple-Mail-2-874629474 +Content-Transfer-Encoding: quoted-printable +Content-Type: text/enriched; + charset=ISO-8859-1 + +Bob + + +We are a commercial company who host around 150 web sites on each of +it servers, we can=B4t swap with you because we need someone in a +similar position. + + +Thank you + + +Javier=20 + + +El Viernes, 30 agosto, 2002, a las 10:25 AM, Bob Musser escribi=F3: + + +I'm using Simple DNS from JHSoft.=A0 We support only a +few web sites and I'd like to swap secondary services with someone in +a similar position. + +=A0 + +We have a static IP, DSL line and a 24/7 set of web, SQL, +mail and now a DNS server.=A0 As I said, we are hosting about 10 web +sites, web and DNS traffic is almost nothing.=A0 Everything is on +lightly loaded APC battery backups so we are very seldom down. + +=A0 + +I'd like to swap with someone also using Simple DNS to take +advantage of the trusted zone file transfer option. + +=A0 + +=A0 + +=A0 + +Bob Musser + +Database Services, Inc. + +Makers of: + +=A0=A0 Process Server's Toolbox + +=A0=A0 Courier Service Toolbox + +1999,1999,FFFFBobM@dbsinfo.com + +www.dbsinfo.com + +106 Longhorn Road + +Winter Park FL 32792 + +(407) 679-1539 + +=A0 + +=A0 + + +--- + +Atentamente + +Javier Cota + +Integraci=F3n tecnol=F3gica + +52723341 + +javier@linkcreations.com.mx + + + +--Apple-Mail-2-874629474-- + + +-- +To Unsubscribe: +Sponsor & Host: Ironclad Networks + diff --git a/Ch3/datasets/spam/easy_ham/00064.cb4bd5482454f02b6c3d70343af090a8 b/Ch3/datasets/spam/easy_ham/00064.cb4bd5482454f02b6c3d70343af090a8 new file mode 100644 index 000000000..2ca47e49d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00064.cb4bd5482454f02b6c3d70343af090a8 @@ -0,0 +1,309 @@ +From tips@spesh.com Mon Sep 2 12:29:16 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BF46B43F9B + for ; Mon, 2 Sep 2002 07:29:13 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:29:13 +0100 (IST) +Received: from prune.flirble.org (prune.flirble.org [195.40.6.30]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7UFv4Z32113 for + ; Fri, 30 Aug 2002 16:57:04 +0100 +Received: (qmail 11976 invoked by uid 7789); 30 Aug 2002 15:32:37 -0000 +Mailing-List: contact ntknow-help@lists.ntk.net; run by ezmlm +Precedence: bulk +X-No-Archive: yes +Delivered-To: mailing list ntknow@lists.ntk.net +Delivered-To: moderator for ntknow@lists.ntk.net +Received: (qmail 11905 invoked from network); 30 Aug 2002 15:30:57 -0000 +Message-Id: <3.0.6.32.20020830163318.01f75d40@pop.dial.pipex.com> +X-Sender: af06@pop.dial.pipex.com +X-Mailer: QUALCOMM Windows Eudora Light Version 3.0.6 (32) +Date: Fri, 30 Aug 2002 16:33:18 +0100 +To: NTK recipient list +From: Dave Green +Subject: NTK Now, 2002-08-30 +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" + + + _ _ _____ _ __ <*the* weekly high-tech sarcastic update for the uk> +| \ | |_ _| |/ / _ __ __2002-08-30_ o join! mail an empty message to +| \| | | | | ' / | '_ \ / _ \ \ /\ / / o ntknow-subscribe@lists.ntk.net +| |\ | | | | . \ | | | | (_) \ v v / o website (+ archive) lives at: +|_| \_| |_| |_|\_\|_| |_|\___/ \_/\_/ o http://www.ntk.net/ + + + "A case in point is web designer Matt Jones, the man + responsible for how BBC News Online looked when it launched. + Since then, he has invented 'warchalking', which he recently + described as a 'curse'..." + http://news.bbc.co.uk/1/hi/2210091.stm + - but you cannot turn against me! I... created you! + + + >> HARD NEWS << + stiffening sinews + + More hot summer days in the mailinglist alleyways, + dangerously empty of sane postings, strewn with the rotting + carcasses of broiling vacation messages. Hacktress and + Silicon Valley's chief rat-keeper LILE ELAM, excitedly posts + about a new open 802.11 network she's found. "I am here at + the police station waiting to see a judge and I thought I + would check to see if there is connectivity", she writes, + somewhat recklessly, to the Bay Area Wireless list. Exit + the rest of the Wifi community through the nearest window + and out into the streets... where, cooling tempers, the + Microsoft Palladium boys are on an endless summer tour, + reassuring the experts that while, hmm, they *suppose* Pd + could *theoretically* be used as a Hollywood DRM system, + they truly have no plans to do any such thing. Cypherpunk + and friend of freedom Lucky Green hears this; thinks up four + or five of the obvious Palladium DRM implementations; sends + them off to be patented in his name. Licensing funds, we + imagine, will go on cracking his own DRMs. And so the mail + loops on. + http://lists.bawug.org/pipermail/wireless/2002-August/008507.html + - administrivia: HI MOM, I'M IN JAIL + http://www.mail-archive.com/cryptography@wasabisystems.com/msg02554.html + - Green/Palladium, like Green Kryptonite + + Could Lucky get himself arrested under the DMCA for + distributing a circumvention device? Worse: now we have the + EUCD incoming, could he here in the UK? Will Alan Cox go to + jail for posting detailed Changelogs? Will even the nicest + UK cryptographer (or curious garage tinkerer) find + themselves hauled up under our new and scarily DMCAish + copyright regime? Find out the facts at the free FAIR DEAL + FOR COPYRIGHT conference, organised by the irrepressible + FOUNDATION FOR INFORMATION POLICY RESEARCH for Wednesday + 2002-09-18 at the London School of Economics. All the usual + fun from the creators of the Scrambling for Safety crypto + cons: we confidently predict government spokesmen caught in + headlights, wanton Dave Bird heckling, some industry bigwig + fighting off the audience with a broken chairleg, and other + epiphenomena of the interzone between legal minds and hacker + ethics. Oh, and FIPR are still looking for a Programme + Director, so if you're interested, let them know. We + suggested a convention raffle (first prize: the director's + job, second prize: Ross Anderson as your personal slave for + a day). They say there's some rule that would break, though. + http://www.fipr.org/vacancy.html +- doesn't the Foundation use psychohistory for filling these positions? + + For those of us who can't read the abbreviation EULA without + thinking of Martian fighting machines and their "deafening + howls... which roared like thunder", we're sorry to report + that this weekend's multimedia performance of Jeff Wayne's WAR + OF THE WORLDS has been postponed due to "health and safety + issues". The event was to feature computer graphics, + fireworks, "60ft-tall Martian fighting machines" wreaking + "havoc and destruction", and - most terrifyingly of all - the + possibility of a David Essex tribute singer performing with + Hawkwind, but UKP18 tickets for the Sat 2002-08-31 show at + Manchester's Heaton Park will still be valid at a range of new + venues next summer. Ironically, the Martians' original + invasion plans were similarly thwarted by health and safety + issues, "slain after all man's devices had failed by the + humblest creatures that God, in his wisdom, has put upon this + earth: bacteria. Minute, invisible, bacteria. For, directly + the invaders arrived and drank and fed, our microscopic allies + attacked them..." + http://www.waroftheworlds.info/postpone.htm + - "...From that moment, they were doomed." + + + >> ANTI-NEWS << + berating the obvious + + moving on from PUERILE GOOGLE MISSPELLINGS, weird search-and- + replace artefact: http://www.google.com/search?q=consideyellow , + Japanese fan sites for "plince", "steery dan", "def reppard" + et al, plus the 18,000 or more self-referential Usenet .sigs: + http://groups.google.com/groups?q=%22get+random+signatures%22 + ...http://www.colocation-network.com/ "Zerodowntime" ad leads + to: http://www.ntk.net/2002/08/30/dohzero.gif ... slightly + harsh alt text: http://www.ntk.net/2002/08/30/dohover.gif ... + US military discovers the only "translator" those bastards + seem to understand: http://www.ntk.net/2002/08/30/dohgun.gif + ... scary blue men herald return of the bizarre BBC hacking + pics: http://news.bbc.co.uk/1/hi/1494091.stm ... reporter RYAN + DILLEY http://news.bbc.co.uk/1/hi/uk/2202552.stm pulls his + http://starwars.org.pl/galeria/e2/char/anakin/t001.jpg face + ... banjo maestro GEORGE FORMBY still alive, cooking, black: + http://www.readersheds.co.uk/readersheds/shop.cfm?WOSNAMES=Wosnames + ... thanks guys, that ought to do it: http://www.eap.ca/ ... + + + >> EVENT QUEUE << + goto's considered non-harmful + + Controversially, we're all in favour of THE GUARDIAN GREAT + BRITISH BLOG COMPETITION (closing date next Fri 2002-09-06, + first prize UKP1000, entry free), in that any initiative that + encourages this notoriously primadonna-ish "community" to try + and engage with real-world notions of editorial quality surely + has to be a good thing. Our only disappointment is that The + Guardian appears to be focussing on the "best" of the entries, + when everyone knows the real fun is to be had cruising the + truly terrible examples that the genre has to offer, mentally + allocating points for "Most Depressing Recycling Of Daypop Top + 40 URLs", "Most Unsettling Revelations About Personal Life", + plus of course "Most Tedious Linking/Reciprocal Linking To Other + Bloggers In Absence Of Having Anything Interesting To Say". + http://www.guardian.co.uk/weblog/bestbritishblog/ + - "A strange game, Professor Falken..." + http://media.guardian.co.uk/newmedia/comment/0,7496,765161,00.html + - "...the only winning move is not to play." + + + >> TRACKING << + sufficiently advanced technology : the gathering + + The respective trademark holders will hate this, but + Windows really *is* like the Sun. You have this big hulking + mass of concentrated power in the middle, with a few small + orbiting utilities - like WinZip, and PuTTY, and VNC. + Occasionally one will get a bit too close to the OS, and + Microsoft will suck it down and turn it into fuel for the + System. One such discrete satellite remains FILEZILLA, the + still-necessary ftp gui client for Windows. Those who know + it won't need the introduction, although they might + appreciate the note that it's getting close to v2.0 time. + For dogged WS_FTP users, though, it's got multiple + downloads, auto-restart of interrupted 'loads, queuing, and + sftp and Kerberos support. It's also GPL'd which makes it a + nice bit of source for anyone wanting to grok Win32 + networking from something that works. + http://filezilla.sf.net/ + - talking of trademarks, will the Godzilla people strike before MS? + + + >> MEMEPOOL << + ceci n'est pas une http://www.gagpipe.com/ + + (Not safe for work) next year's RED NOSE DAY looks more fun + than usual: http://www.threepillows.com/tour2.htm ... Mirrored + Disaster Recovery Suite - to go with mirrored bathroom etc?: + http://www.dovebid.com/Auctions/AuctionDetail.asp?AuctionID=1450 + ... and then the kid can take you to court for mental cruelty: + http://www.cnn.com/2002/TECH/ptech/08/27/turok.baby.reut/ ... + "funny" prefixes in front of "chalking" #n+1 - the actually + quite pragmatic: http://www.pinkbunny.co.uk/poochalking/ ... + no longer knowing - or caring - if these are prank AMAZON + reviews or not, for Potter's ever-popular "vibrating" broom: + http://www.amazon.com/exec/obidos/tg/stores/detail/-/toys/B00005NEBW/ + ... ditto "Use This Software At Your Own Risk" disclaimer for: + http://www.palmgear.com/software/showsoftware.cfm?prodID=41030 + ... DAFFY DUCK appears in dock - accused of "dethpicable" + behaviour?: http://news.bbc.co.uk/1/hi/england/2223065.stm , + http://www.ananova.com/news/story/sm_659889.html ... + + + >> GEEK MEDIA << + get out less + + TV>> celebrity cameo night tonight, with Brad Pitt in FRIENDS + (9pm, Fri, C4), Sydney Pollack in WILL AND GRACE (9.30pm, Fri, + C4), Dustin Hoffman in V GRAHAM NORTON (10.30pm, Fri, C4), and + a singing, dancing peanut in globalised trade documentary ALT- + TV (7.30pm, Fri, C4)... the BBC have kept McEnroe and the + heart monitor, got rid of the live crocodiles in gimmicky + quizshow THE CHAIR (6.40pm, Sat, BBC1)... and a month of + "September 11th" specials kicks off with AVENGING TERROR (8pm, + Sat & Sun, C4) - yet those responsible for BOWFINGER (9pm, + Sat, C4) and NOTTING HILL (9pm, Sun, C4) still remain + unpunished... John "The Last Seduction" Dahl's ROUNDERS (11pm, + Sat, BBC2) turns out to be about high-stakes poker, rather + than the girls' version of baseball... in the wake of DAVE + GORMAN'S IMPORTANT ASTROLOGY EXPERIMENT (10.40pm, Sun, BBC2), + how about a three-way challenge where he, Tony Hawks and Pete + McCarthy battle to come up with the most lucrative pointless + pretext for a book and TV show?... but we still have a soft + spot for Ron "Alien: Resurrection" Perlman liberal self- + flagellation THE LAST SUPPER (11.20pm, Sun, C4)... 9/11 CLEAR + THE SKIES (9pm, Sun, BBC2) is a presumably uneventful account + of "how US air defence systems responded to the events of + September 11th"... inexplicably, the three finalists in THE + TARTIEST MEN IN BRITAIN (10.30pm, Mon, ITV) all come from + Leeds... Larry Clark takes a somewhat indirect approach to + conveying his safe-sex message in New York filth-fest KIDS + (1.15am, Tue, C4)... and the September 11th build-up continues + with HOW THE TWIN TOWERS COLLAPSED (8pm, Mon, C4), LET'S ROLL: + THE STORY OF FLIGHT 93 (10.30pm, Wed, ITV), plus THE MEYSSAN + CONSPIRACY (11.05pm, Tue, C4) - ie the French guy behind: + http://www.asile.org/citoyens/numero13/pentagone/erreurs_en.htm + ... away from the polluted nightmare of modern living, a + family seek out a new way of life in Earth Summit tie-in A + LAND WORTH LOVING (7pm, Wed, BBC1)... which coincidentally + also forms the plot of this week's second Heather "Bowfinger" + Graham turkey, LOST IN SPACE (7.55pm, Wed, BBC1) - not to be + confused with the return of those annoying posh women in + WORLD'S WORST DRESSED (8pm, Wed, BBC2), who have at least shut + up about their always-doomed hideously purple e-commerce + site: http://news.bbc.co.uk/1/hi/business/712188.stm ... + + FILM>> the comic skills of Cameron Diaz, Christina Applegate + and Parker Posey combine in a cross between a teen smut comedy + and an episode of "Sex And The City", THE SWEETEST THING + ( http://www.screenit.com/movies/2002/the_sweetest_thing.html : + As [Diaz] and [Applegate] drive down the road still dressed in + just their bras and underwear, [Applegate] drops her bottle of + fingernail polish. [Diaz] then goes over to get it, with + her panty-covered butt in the air and her head down toward + [Applegate]'s legs and crotch; [Selma Blair] [has] her mouth + stuck around a man's privates after apparently performing oral + sex on him)... Robin Williams plays a surprisingly convincing + Hannibal Lecter in morally complicated Alaskan Al Pacino + murder madness INSOMNIA ( http://www.cndb.com/ : You can see + [Crystal Lowe's] tits in autopsy photos and again - along with + bush - when she's seen on a autopsy table. Nice boobs but + she's dead)... it's Eddie Murphy, Randy Quaid, Jay "Jerry + Maguire" Mohr, John Cleese and Pam Grier - together at last! - + in blaxploitation sci-fi spoof THE ADVENTURES OF PLUTO NASH + ( http://www.screenit.com/movies/2002/the_adventures_of_pluto_nash.html : + the woman then causes the image of [Rosario "Kids" Dawson] to + suddenly have much larger breasts and an exaggeratedly large + rear end)... all of which, shockingly, are an improvement on + John Woo interspersing lame battle scenes with agonising anti- + racist philosophising in WW2 Navajo crypto clunker WINDTALKERS + ( http://www.capalert.com/capreports/windtalkers.htm : + gambling; beheading; brief partial nudity of a Japanese + soldier; I have no doubt that such gore is present in war but + must it be regurgitated in and as entertainment?)... + + + >> SMALL PRINT << + + Need to Know is a useful and interesting UK digest of things that + happened last week or might happen next week. You can read it + on Friday afternoon or print it out then take it home if you have + nothing better to do. It is compiled by NTK from stuff they get sent. + Registered at the Post Office as + "yeah, but bet we were banned first" + http://www.b3ta.com/newsletter/issue54/ + + + NEED TO KNOW + THEY STOLE OUR REVOLUTION. NOW WE'RE STEALING IT BACK. + Archive - http://www.ntk.net/ + Unsubscribe? Mail ntknow-unsubscribe@lists.ntk.net + Subscribe? Mail ntknow-subscribe@lists.ntk.net + NTK now is supported by UNFORTU.NET, and by you: http://www.geekstyle.co.uk/ + + (K) 2002 Special Projects. + Copying is fine, but include URL: http://www.ntk.net/ + + Tips, news and gossip to tips@spesh.com + All communication is for publication, unless you beg. + Press releases from naive PR people to pr@spesh.com + Remember: Your work email may be monitored if sending sensitive material. + Sending >500KB attachments is forbidden by the Geneva Convention. + Your country may be at risk if you fail to comply. + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00065.fa593405941ce1f32a29e813493eacf2 b/Ch3/datasets/spam/easy_ham/00065.fa593405941ce1f32a29e813493eacf2 new file mode 100644 index 000000000..735a22870 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00065.fa593405941ce1f32a29e813493eacf2 @@ -0,0 +1,42 @@ +From justin.armstrong@acm.org Mon Sep 2 12:29:05 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 059B643F9B + for ; Mon, 2 Sep 2002 07:29:03 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:29:03 +0100 (IST) +Received: from mail02.svc.cra.dublin.eircom.net + (mail02.svc.cra.dublin.eircom.net [159.134.118.18]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7UFaQZ31051 for ; + Fri, 30 Aug 2002 16:36:26 +0100 +Received: (qmail 43115 messnum 226689 invoked from + network[159.134.229.50/p306.as3.adl.dublin.eircom.net]); 30 Aug 2002 + 15:36:34 -0000 +Received: from p306.as3.adl.dublin.eircom.net (HELO mingmecha) + (159.134.229.50) by mail02.svc.cra.dublin.eircom.net (qp 43115) with SMTP; + 30 Aug 2002 15:36:34 -0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Justin Armstrong +Subject: find the bug +Date: Fri, 30 Aug 2002 16:36:46 +0100 +X-Mailer: KMail [version 1.4] +To: zzzz@spamassassin.taint.org (Justin Mason) +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200208301636.46996.justin.armstrong@acm.org> + + +//this function should print all numbers up to 100... + +void print_nums() +{ + int i; + + for(i = 0; i < 10l; i++) { + printf("%d\n",i); + } + +} + diff --git a/Ch3/datasets/spam/easy_ham/00066.7dda463deb5e41ba1af3a0da55ab504b b/Ch3/datasets/spam/easy_ham/00066.7dda463deb5e41ba1af3a0da55ab504b new file mode 100644 index 000000000..0060e1856 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00066.7dda463deb5e41ba1af3a0da55ab504b @@ -0,0 +1,63 @@ +From DNS-swap@lists.ironclad.net.au Mon Sep 2 12:29:06 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5B22044155 + for ; Mon, 2 Sep 2002 07:29:06 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:29:06 +0100 (IST) +Received: from lists.ironclad.net.au ([203.30.247.12]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7UFbiZ31242 for + ; Fri, 30 Aug 2002 16:37:45 +0100 +Received: from aernet.ru by lists.ironclad.net.au with SMTP; + Sat, 31 Aug 2002 01:35:15 +1000 +Date: Fri, 30 Aug 2002 19:39:57 +0400 +From: "Andrey G. Sergeev (AKA Andris)" +X-Mailer: The Bat! (v1.60q) +Reply-To: "DNS-swap" +Organization: AerNet Ltd. +X-Priority: 3 (Normal) +Message-Id: <16279722375.20020830193957@aernet.ru> +To: "Bob Musser" +Subject: Re: Tiny DNS Swap +In-Reply-To: <00c401c25039$7b055460$976fa8c0@cfl.rr.com> +References: <00c401c25039$7b055460$976fa8c0@cfl.rr.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: +Precedence: Bulk +List-Software: LetterRip Pro 3.0.7 by Fog City Software, Inc. +List-Subscribe: +List-Digest: +List-Unsubscribe: + +(This list is sponsored by Ironclad Networks http://www.ironclad.net.au/) + +Hello! + + +Friday, August 30, 2002, 7:25:31 PM Bob Musser wrote: + +[lost] + +BM> I'd like to swap with someone also using Simple DNS to take +BM> advantage of the trusted zone file transfer option. + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Are you speaking about limiting AXFR requests on IP address basis? If +yes, then virtually every BIND-equipped DNS server in the world will +be suitable for your needs. + + +-- + +Yours sincerely, + +Andrey G. Sergeev (AKA Andris) http://www.andris.msk.ru/ + + +-- +To Unsubscribe: +Sponsor & Host: Ironclad Networks + diff --git a/Ch3/datasets/spam/easy_ham/00067.23813c5ac6ce66fd892ee5501fd5dbd2 b/Ch3/datasets/spam/easy_ham/00067.23813c5ac6ce66fd892ee5501fd5dbd2 new file mode 100644 index 000000000..f62f794e8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00067.23813c5ac6ce66fd892ee5501fd5dbd2 @@ -0,0 +1,145 @@ +From webster@ryanairmail.com Mon Sep 2 12:30:45 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1B3B143F9B + for ; Mon, 2 Sep 2002 07:30:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:30:37 +0100 (IST) +Received: from mail.ryanair2.ie ([193.120.152.8]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7ULMQZ08782 for ; + Fri, 30 Aug 2002 22:22:36 +0100 +From: webster@ryanairmail.com +To: "Customers" +Subject: Save up to 70% on international calls! +Date: Fri, 30 Aug 2002 17:42:52 +0100 +X-Assembled-BY: XWall v3.21 +Message-Id: +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="_NextPart_1_bvfoDiTVghtoCXFdvJNKcuWblFV" +List-Unsubscribe: +Reply-To: webster@ryanairmail.com + +This is a multi part message in MIME format. + +--_NextPart_1_bvfoDiTVghtoCXFdvJNKcuWblFV +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit + +........... with our telecoms partner Bumblebee ! + +Don't get ripped off by expensive hotel, payphone and mobile charges. +SAVE, SAVE, SAVE on international calls with Ryanair's phone partner. +************************************************************************ +********* + +You'll save up to 70% on international phone calls when you use our +online phone card. You can use the card from any phone in any country +you visit and you won't have to worry about high phone charges +when you call home or the office. + +Buying a card couldn't be easier and it's totally secure. Simply go to +http://www.bumblebeecommunications.com/lowcostcalls/ + to avail of this special offer for Ryanair customers. + +It's another great deal from Ryanair and our online phone +partner, Bumblebee Communications. + + + + + + + + + +===================================================================== + +E-MAIL DISCLAIMER + +This e-mail and any files and attachments transmitted with it +are confidential and may be legally privileged. They are intended +solely for the use of the intended recipient. Any views and +opinions expressed are those of the individual author/sender +and are not necessarily shared or endorsed by Ryanair Holdings plc +or any associated or related company. In particular e-mail +transmissions are not binding for the purposes of forming +a contract to sell airline seats, directly or via promotions, +and do not form a contractual obligation of any type. +Such contracts can only be formed in writing by post or fax, +duly signed by a senior company executive, subject to approval +by the Board of Directors. + +The content of this e-mail or any file or attachment transmitted +with it may have been changed or altered without the consent +of the author. If you are not the intended recipient of this e-mail, +you are hereby notified that any review, dissemination, disclosure, +alteration, printing, circulation or transmission of, or any +action taken or omitted in reliance on this e-mail or any file +or attachment transmitted with it is prohibited and may be unlawful. + +If you have received this e-mail in error +please notify Ryanair Holdings plc by emailing postmaster@ryanair.ie +or contact Ryanair Holdings plc, Dublin Airport, Co Dublin, Ireland. + +--_NextPart_1_bvfoDiTVghtoCXFdvJNKcuWblFV +Content-Type: application/ms-tnef +Content-Transfer-Encoding: base64 + +eJ8+IjUQAQaQCAAEAAAAAAABAAEAAQeQBgAIAAAA5AQAAAAAAADoAAEIgAcAGAAAAElQTS5NaWNy +b3NvZnQgTWFpbC5Ob3RlADEIAQ2ABAACAAAAAgACAAEEgAEAJwAAAFNhdmUgdXAgdG8gNzAlIG9u +IGludGVybmF0aW9uYWwgY2FsbHMhACgNAQWAAwAOAAAA0gcIAB4AEQAqADQABQBzAQEggAMADgAA +ANIHCAAeABEAKgA0AAUAcwEBCYABACEAAAAxNUNDQzU1M0ZCNjVGOTRCODJBOTE2NjI0QjY5ODI2 +NAAgBwEDkAYAYAgAADEAAAALAAIAAQAAAAMAJgAAAAAAAwA2AAAAAABAADkAOHxzSERQwgEeAD0A +AQAAAAEAAAAAAAAAAgFHAAEAAAAyAAAAYz11czthPSA7cD1SeWFuYWlyO2w9Q0hPVk1BSUwxLTAy +MDgzMDE2NDI1MlotNTY1NgAAAB4AcAABAAAAJwAAAFNhdmUgdXAgdG8gNzAlIG9uIGludGVybmF0 +aW9uYWwgY2FsbHMhAAACAXEAAQAAABYAAAABwlBESGNVR3XMDo5JP7LazaO6pGd8AAAeABoMAQAA +AAwAAABDb3lsZSwgU2VhbgAeAB0OAQAAACcAAABTYXZlIHVwIHRvIDcwJSBvbiBpbnRlcm5hdGlv +bmFsIGNhbGxzIQAAAgEJEAEAAAC7AgAAtwIAALsEAABMWkZ1TPw4mgMACgByY3BnMTI14jIDQ3Rl +eAVBAQMB908KgAKkA+MCAGNoCsBz8GV0MCAHEwKAD/MAUH8EVghVB7IRxQ5RAwEQxzL3BgAGwxHF +MwRGEMkS2xHT2wjvCfc7GL8OMDURwgxgzmMAUAsJAWQzNhFQC6YUIC4dmCAD8HRoINUIYSAOsGwF +kW0EIAqxZHRuEyFCdQbQHwBiuQngICEKogqECoBEAiBQXCc5MgVAZxEwIB0FEXAJgB6QASAgYnku +IA7AImAAgXYgcGhvZR7hLB9heXAjsB+wIPcAcCKABGBiAxAgcBDiIfCGcx4wIKRTQVZFJAA/Jlge +kAOgC4AOsASgYXTeaQIgB0AlUAdAbAQgHlPsUnkAcAtwciGSH1EkY/sfdSXWKitPLF8tby5/L0od +IKpZCGAhkiiQIHNhCSOBdXAe0G8gNzAuJSdfKeUodWgJ8CB5vwhgMfARIB6TIKQCIGwLgO8qMTPF +CyAeMCAxEShhA6D3NQIecDaUIANSJKEi8CRU1wuAOLMFoHUCMHIi8CCkvTTCdgQAHmAkozTCdyF2 +7xDwI4EyMTvQcjohAaAIYPk8QWlnHoAztSV0JeU0d/8ociOhB4AekB7BN/EioQ3grGUuIKof8HkL +gGckoHM4FDnRbGQhhSBQIwBh/wCQEyEksh5gKZQyMAGQKJC7IvARIGMIcEEgNwBTB3BbC1Ai8Gcy +QDIxaAJAcJA6Ly93R1AuYiAGfR8hbTnwDeAn8yXAHyEvpRhQdwWgc3Qocy83AP8gpDIiMcALcAMg +IqA30QQA+zGgImBjBzEikhMhAhAFwH8pJSVQNQAyMAeAERBBO0l/RJUAcCPANIAFwAnBJ/Ag/wEA +KEE4c0zmJLIeojXrIKT/H3UkAB/4CFBISyXlSkUgqgtWX1drfVigAB4ANRABAAAASAAAADxEMTNG +N0MwNTQ3RDcxRjRDQTQwNzMyN0E4MjUxMzYwMDE5Q0E5Q0BDSE9WTUFJTDEuY2hvLmNvcnAucnlh +bmFpci5jb20+AAMAgBD/////CwDyEAEAAAAfAPMQAQAAAFoAAABTAGEAdgBlACAAdQBwACAAdABv +ACAANwAwACUAMgA1ACAAbwBuACAAaQBuAHQAZQByAG4AYQB0AGkAbwBuAGEAbAAgAGMAYQBsAGwA +cwAhAC4ARQBNAEwAAAAAAAsA9hAAAAAAQAAHMN0ZcUhEUMIBQAAIMJPedUhEUMIBAwDeP59OAAAD +APE/CQQAAB4A+D8BAAAADAAAAENveWxlLCBTZWFuAAIB+T8BAAAAXQAAAAAAAADcp0DIwEIQGrS5 +CAArL+GCAQAAAAAAAAAvTz1SWUFOQUlSL09VPUZJUlNUIEFETUlOSVNUUkFUSVZFIEdST1VQL0NO +PVJFQ0lQSUVOVFMvQ049Q09ZTEVTAAAAAB4A+j8BAAAAFQAAAFN5c3RlbSBBZG1pbmlzdHJhdG9y +AAAAAAIB+z8BAAAAHgAAAAAAAADcp0DIwEIQGrS5CAArL+GCAQAAAAAAAAAuAAAAAwAZQAAAAAAD +ABpAAAAAAB4AMEABAAAABwAAAENPWUxFUwAAHgAxQAEAAAAHAAAAQ09ZTEVTAAAeADhAAQAAAAcA +AABDT1lMRVMAAB4AOUABAAAAAgAAAC4AAAADAAlZAQAAAAsAWIEIIAYAAAAAAMAAAAAAAABGAAAA +AA6FAAAAAAAAAwBwgQggBgAAAAAAwAAAAAAAAEYAAAAAUoUAAFmUAQAeAHGBCCAGAAAAAADAAAAA +AAAARgAAAABUhQAAAQAAAAUAAAAxMC4wAAAAAAMAuIEIIAYAAAAAAMAAAAAAAABGAAAAAAGFAAAA +AAAAQAC6gQggBgAAAAAAwAAAAAAAAEYAAAAAYIUAAAAAAAAAAAAACwC9gQggBgAAAAAAwAAAAAAA +AEYAAAAAA4UAAAAAAAADAMeBCCAGAAAAAADAAAAAAAAARgAAAAAQhQAAAAAAAAMAzoEIIAYAAAAA +AMAAAAAAAABGAAAAABiFAAAAAAAACwDlgQggBgAAAAAAwAAAAAAAAEYAAAAABoUAAAAAAAALAOmB +CCAGAAAAAADAAAAAAAAARgAAAACChQAAAAAAAAsAKQAAAAAACwAjAAAAAAADAAYQHr1S2QMABxB/ +AgAAAwAQEAsAAAADABEQAQAAAB4ACBABAAAAZQAAAFdJVEhPVVJURUxFQ09NU1BBUlRORVJCVU1C +TEVCRUVET05UR0VUUklQUEVET0ZGQllFWFBFTlNJVkVIT1RFTCxQQVlQSE9ORUFORE1PQklMRUNI +QVJHRVNTQVZFLFNBVkUsU0EAAAAAAgF/AAEAAABIAAAAPEQxM0Y3QzA1NDdENzFGNENBNDA3MzI3 +QTgyNTEzNjAwMTlDQTlDQENIT1ZNQUlMMS5jaG8uY29ycC5yeWFuYWlyLmNvbT4AEOQ= + + +--_NextPart_1_bvfoDiTVghtoCXFdvJNKcuWblFV +Content-Type: text/plain; charset="us-ascii" +Content-description: footer + +--- +You are currently subscribed to customers as: zzzz-ryanair@spamassassin.taint.org +To unsubscribe send a blank email to leave-customers-949326K@mail.ryanairmail.com + +--_NextPart_1_bvfoDiTVghtoCXFdvJNKcuWblFV-- + + diff --git a/Ch3/datasets/spam/easy_ham/00068.5053f669dda8f920e5300ed327cdd986 b/Ch3/datasets/spam/easy_ham/00068.5053f669dda8f920e5300ed327cdd986 new file mode 100644 index 000000000..67fa6d435 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00068.5053f669dda8f920e5300ed327cdd986 @@ -0,0 +1,137 @@ +From updates-admin@ximian.com Mon Sep 2 12:29:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5EA4843F99 + for ; Mon, 2 Sep 2002 07:29:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:29:37 +0100 (IST) +Received: from trna.ximian.com (trna.ximian.com [141.154.95.22]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7UIZpZ04242; + Fri, 30 Aug 2002 19:35:51 +0100 +Received: from trna.ximian.com (localhost [127.0.0.1]) by trna.ximian.com + (8.11.6/8.11.6) with ESMTP id g7UHqm306561; Fri, 30 Aug 2002 13:52:48 + -0400 +Received: from peabody.ximian.com (peabody.ximian.com [141.154.95.10]) by + trna.ximian.com (8.11.6/8.11.6) with ESMTP id g7UHEO301839 for + ; Fri, 30 Aug 2002 13:14:24 -0400 +Date: Fri, 30 Aug 2002 13:14:24 -0400 +Message-Id: <200208301714.g7UHEO301839@trna.ximian.com> +Received: (qmail 30686 invoked from network); 30 Aug 2002 17:14:34 -0000 +Received: from localhost (127.0.0.1) by localhost with SMTP; + 30 Aug 2002 17:14:34 -0000 +From: Ximian GNOME Security Team +To: Ximian Desktop Updates List +Cc: BugTraq Mailing List +Subject: [Ximian Updates] Hyperlink handling in Gaim allows arbitrary code to be executed +Sender: updates-admin@ximian.com +Errors-To: updates-admin@ximian.com +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Announcements about updates to the Ximian GNOME distribution. + +X-Beenthere: updates@ximian.com + +Severity: Security +Product: gaim +Keywords: gaim hyperlink manual +References: + CAN-2002-0989 + http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2002-0989 + Gaim Changelog + http://gaim.sourceforge.net/ChangeLog + +Gaim is an instant messaging client based on the published TOC +protocol from AOL. The developers of Gaim, an instant messenger client +that combines several different networks, found a vulnerability in the +hyperlink handling code. The 'Manual' browser command passes an +untrusted string to the shell without escaping or reliable quoting, +permitting an attacker to execute arbitrary commands on the users +machine. Unfortunately, Gaim doesn't display the hyperlink before the +user clicks on it. Users who use other inbuilt browser commands aren't +vulnerable. + +The fixed version of Gaim no longer passes the user's manual browser +command to the shell. Commands which contain the %s in quotes will +need to be amended, so they don't contain any quotes. The 'Manual' +browser command can be edited in the 'General' pane of the +'Preferences' dialog, which can be accessed by clicking 'Options' from +the login window, or 'Tools' and then 'Preferences' from the menu bar +in the buddy list window. + +Please download Gaim 0.59.1 or later using Red Carpet. You may also +obtain this update from the Ximian FTP site. + +Debian Potato +ftp://ftp.ximian.com/pub/ximian-gnome/debian-potato-i386/gaim_0.59.1-1.ximian.2_i386.deb +ftp://ftp.ximian.com/pub/ximian-gnome/debian-potato-i386/gaim-common_0.59.1-1.ximian.2_i386.deb +ftp://ftp.ximian.com/pub/ximian-gnome/debian-potato-i386/gaim-gnome_0.59.1-1.ximian.2_i386.deb + +Mandrake 8.0 +ftp://ftp.ximian.com/pub/ximian-gnome/mandrake-80-i586/gaim-0.59.1-1.ximian.2.i586.rpm + +Mandrake 8.1 +ftp://ftp.ximian.com/pub/ximian-gnome/mandrake-81-i586/gaim-0.59.1-1.ximian.2.i586.rpm + +Mandrake 8.2 +ftp://ftp.ximian.com/pub/ximian-gnome/mandrake-82-i586/gaim-0.59.1-1.ximian.2.i586.rpm + +Redhat 6.2 +ftp://ftp.ximian.com/pub/ximian-gnome/redhat-62-i386/gaim-0.59.1-1.ximian.2.i386.rpm +ftp://ftp.ximian.com/pub/ximian-gnome/redhat-62-i386/gaim-applet-0.59.1-1.ximian.2.i386.rpm + +Redhat 7.0 +ftp://ftp.ximian.com/pub/ximian-gnome/redhat-70-i386/gaim-0.59.1-1.ximian.2.i386.rpm +ftp://ftp.ximian.com/pub/ximian-gnome/redhat-70-i386/gaim-applet-0.59.1-1.ximian.2.i386.rpm + +Redhat 7.1 +ftp://ftp.ximian.com/pub/ximian-gnome/redhat-71-i386/gaim-0.59.1-1.ximian.2.i386.rpm +ftp://ftp.ximian.com/pub/ximian-gnome/redhat-71-i386/gaim-applet-0.59.1-1.ximian.2.i386.rpm + +Redhat 7.2 +ftp://ftp.ximian.com/pub/ximian-gnome/redhat-72-i386/gaim-0.59.1-1.ximian.2.i386.rpm +ftp://ftp.ximian.com/pub/ximian-gnome/redhat-72-i386/gaim-applet-0.59.1-1.ximian.2.i386.rpm + +Redhat 7.3 +ftp://ftp.ximian.com/pub/ximian-gnome/redhat-73-i386/gaim-0.59.1-1.ximian.2.i386.rpm +ftp://ftp.ximian.com/pub/ximian-gnome/redhat-73-i386/gaim-applet-0.59.1-1.ximian.2.i386.rpm + +Solaris 7/8 +ftp://ftp.ximian.com/pub/ximian-gnome/solaris-7-sun4/gaim-0.59.1-2.ximian.1.sparc.rpm + +SuSE 7.1 +ftp://ftp.ximian.com/pub/ximian-gnome/suse-71-i386/gaim-0.59.1-1.ximian.2.i386.rpm +ftp://ftp.ximian.com/pub/ximian-gnome/suse-71-i386/gaim-applet-0.59.1-1.ximian.2.i386.rpm + +SuSE 7.2 +ftp://ftp.ximian.com/pub/ximian-gnome/suse-72-i386/gaim-0.59.1-1.ximian.2.i386.rpm +ftp://ftp.ximian.com/pub/ximian-gnome/suse-72-i386/gaim-applet-0.59.1-1.ximian.2.i386.rpm + +SuSE 7.3 +ftp://ftp.ximian.com/pub/ximian-gnome/suse-73-i386/gaim-0.59.1-1.ximian.2.i386.rpm +ftp://ftp.ximian.com/pub/ximian-gnome/suse-73-i386/gaim-applet-0.59.1-1.ximian.2.i386.rpm + +SuSE 8.0 +ftp://ftp.ximian.com/pub/ximian-gnome/suse-80-i386/gaim-0.59.1-1.ximian.2.i386.rpm +ftp://ftp.ximian.com/pub/ximian-gnome/suse-80-i386/gaim-applet-0.59.1-1.ximian.2.i386.rpm + +Yellowdog 2.0 +ftp://ftp.ximian.com/pub/ximian-gnome/yellowdog-20-ppc/gaim-0.59.1-1.ximian.2.ppc.rpm +ftp://ftp.ximian.com/pub/ximian-gnome/yellowdog-20-ppc/gaim-applet-0.59.1-1.ximian.2.ppc.rpm + +Yellowdog 2.1 +ftp://ftp.ximian.com/pub/ximian-gnome/yellowdog-21-ppc/gaim-0.59.1-1.ximian.2.ppc.rpm +ftp://ftp.ximian.com/pub/ximian-gnome/yellowdog-21-ppc/gaim-applet-0.59.1-1.ximian.2.ppc.rpm + +Yellowdog 2.2 +ftp://ftp.ximian.com/pub/ximian-gnome/yellowdog-22-ppc/gaim-0.59.1-1.ximian.2.ppc.rpm +ftp://ftp.ximian.com/pub/ximian-gnome/yellowdog-22-ppc/gaim-applet-0.59.1-1.ximian.2.ppc.rpm + + + +_______________________________________________ +updates maillist - updates@ximian.com +To unsubscribe from this list, or to change your subscription options, follow the link below: +http://lists.ximian.com/mailman/listinfo/updates + diff --git a/Ch3/datasets/spam/easy_ham/00069.1477f740f56d3e0bd132ad70993edda5 b/Ch3/datasets/spam/easy_ham/00069.1477f740f56d3e0bd132ad70993edda5 new file mode 100644 index 000000000..714d28122 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00069.1477f740f56d3e0bd132ad70993edda5 @@ -0,0 +1,98 @@ +From rpm-list-admin@freshrpms.net Mon Sep 2 12:32:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0D5E343F99 + for ; Mon, 2 Sep 2002 07:32:39 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:32:39 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7V30HZ20462 for + ; Sat, 31 Aug 2002 04:00:18 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7V2w2J09642; Sat, 31 Aug 2002 04:58:02 + +0200 +Received: from relay1.EECS.Berkeley.EDU (relay1.EECS.Berkeley.EDU + [169.229.60.163]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7V2uqJ28499 for ; Sat, 31 Aug 2002 04:56:52 +0200 +Received: from relay3.EECS.Berkeley.EDU (localhost.Berkeley.EDU + [127.0.0.1]) by relay1.EECS.Berkeley.EDU (8.9.3/8.9.3) with ESMTP id + TAA11365 for ; Fri, 30 Aug 2002 19:56:50 -0700 + (PDT) +Received: from eecs.berkeley.edu (brawnix.CS.Berkeley.EDU [128.32.35.162]) + by relay3.EECS.Berkeley.EDU (8.9.3/8.9.3) with ESMTP id TAA20554 for + ; Fri, 30 Aug 2002 19:56:47 -0700 (PDT) +Message-Id: <3D70306F.8090201@eecs.berkeley.edu> +From: Ben Liblit +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020606 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: alsa-driver rebuild fails with undeclared USB symbol +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 30 Aug 2002 19:56:47 -0700 +Date: Fri, 30 Aug 2002 19:56:47 -0700 + +I am trying to rebuild the recently posted ALSA driver package for my +kernel. Although I run Red Hat 7.3, I am not using a Red Hat kernel +package: my kernel is lovingly downloaded, configured, and built by +hand. Call me old fashioned. + +Sadly, the RPM rebuild fails part way through: + + % rpm --rebuild alsa-driver-0.9.0rc3-fr6.src.rpm + + gcc -DALSA_BUILD -D__KERNEL__ -DMODULE=1 \ + -I/usr/src/redhat/BUILD/alsa-driver-0.9.0rc3/include \ + -I/lib/modules/2.4.18/build/include -O2 \ + -mpreferred-stack-boundary=2 -march=i686 -DLINUX -Wall \ + -Wstrict-prototypes -fomit-frame-pointer -pipe -DEXPORT_SYMTAB \ + -c sound.c + + sound.c:41: `snd_hack_usb_set_interface' undeclared here (not in a \ + function) + + sound.c:41: initializer element is not constant + + sound.c:41: (near initialization for \ + __ksymtab_snd_hack_usb_set_interface.value') + + make[1]: *** [sound.o] Error 1 + +The line in question looks like this: + + /* USB workaround */ + #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 24) + #if defined(CONFIG_SND_USB_AUDIO) || \ + defined(CONFIG_SND_USB_AUDIO_MODULE) || \ + defined(CONFIG_SND_USB_MIDI) || \ + defined(CONFIG_SND_USB_MIDI_MODULE) +-41-> +EXPORT_SYMBOL(snd_hack_usb_set_interface); + #endif + #endif + +Any suggestions? + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/00070.c62a036deb1de40aa32cabc761b0861c b/Ch3/datasets/spam/easy_ham/00070.c62a036deb1de40aa32cabc761b0861c new file mode 100644 index 000000000..4ced63d27 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00070.c62a036deb1de40aa32cabc761b0861c @@ -0,0 +1,128 @@ +From fork-admin@xent.com Fri Aug 23 11:08:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6378747C6B + for ; Fri, 23 Aug 2002 06:06:51 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:06:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7MLNVZ25364 for ; + Thu, 22 Aug 2002 22:23:31 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4D7A62940B5; Thu, 22 Aug 2002 14:21:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id 690A6294099 for + ; Thu, 22 Aug 2002 14:20:47 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17hzMf-0000L2-00; Thu, 22 Aug 2002 18:19:37 -0300 +Message-Id: <3D6556DC.5070408@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.0) Gecko/20020530 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Bill Stoddard +Cc: "Fork@Xent.Com" +Subject: Re: The case for spam +References: +Content-Type: multipart/related; + boundary="------------080808010909060409040405" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 18:25:48 -0300 + + +--------------080808010909060409040405 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit + +Bill Stoddard wrote: + +>>No one likes commercial spam. +>> +>> +>And no one like unsolicited political spam. End of story. +> +>Bill +>http://xent.com/mailman/listinfo/fork +> +> +Except perhaps for the people in charge. +Owen + +http://zdnet.com.com/2100-1105-954903.html + + +*Political spam on your cell phone?* +By Lisa M. Bowman +Special to ZDNet News +August 22, 2002, 12:05 PM PT +URL: http://zdnet.com.com/2100-1105-954909.html +<%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20http://zdnet.com.com/2100-1105-954909.html%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20> + + +*In a decision that treats text messaging on mobile phones essentially +the same as bumper stickers, the Federal Election Commission has +declared that senders of text-based political ads don't have to disclose +who funded them.* + +In an advisory opinion issued Thursday, the FEC also suggested such +messages include either a phone number or Web site link, so people could +easily learn who paid for the message. However, the additional +information won't be required. + +The opinion could encourage the adoption of text-based political ads, as +campaign experts look for new technological ways to sway voters. At the +same time, opponents of the plan fear it could lead to anonymous +political spam. + +Target Wireless, a small New Jersey-based wireless media company, had +asked the FEC for an opinion on the matter, saying that requiring +financial disclosures on short messaging service (SMS) mailings would +use up too much of the 160 character-maximum. + +Political messages on bumper stickers and buttons are also exempt from +the financial disclosure requirement. Target Wireless' petition was +supported by the National Republican Senatorial Committee, the Cellular +Telecommunications and Internet Association, and some advertising trade +groups. + +FEC spokesman Bob Biersack said the opinion was in keeping with the +commission's policy not to meddle with new technology that has the +potential to reach more voters. + +"We have tried very hard not to get in the way--particularly before +everyone understands how the technology is going to work," he said. + +Opponents of the plan have worried the exemption might encourage spam or +allow senders to blast people with mass amounts of negative political +messages while remaining anonymous. + +Biersack said the FEC can revisit the issue if those problems surface. + +Target Wireless President Craig Krueger characterized the opinion as +"good for America." + +"It will allow people to receive more communication from those running +for office," he said. "We have free speech on our side." + + + + +--------------080808010909060409040405-- + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00071.a1a5f4834bebcb59bb75698821cf9f9a b/Ch3/datasets/spam/easy_ham/00071.a1a5f4834bebcb59bb75698821cf9f9a new file mode 100644 index 000000000..02159c913 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00071.a1a5f4834bebcb59bb75698821cf9f9a @@ -0,0 +1,62 @@ +From fork-admin@xent.com Fri Aug 23 16:44:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id F416A44155 + for ; Fri, 23 Aug 2002 11:44:51 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 16:44:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7NFdcZ30086 for ; + Fri, 23 Aug 2002 16:39:39 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 34D642940D3; Fri, 23 Aug 2002 08:37:11 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id E3396294099 for ; Fri, + 23 Aug 2002 08:36:57 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id D68603ECDE; + Fri, 23 Aug 2002 11:40:46 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id D500F3EB2E; Fri, 23 Aug 2002 11:40:46 -0400 (EDT) +From: Tom +To: Robert Harley +Cc: fork@spamassassin.taint.org +Subject: Re: Entrepreneurs +In-Reply-To: <20020823084435.D5070C44E@argote.ch> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 11:40:46 -0400 (EDT) + +On Fri, 23 Aug 2002, Robert Harley wrote: + +--]Next time I hear a joke, I promise not to laugh until I have checked +--]out primary sources for confirmation in triplicate, OK? + + +Oh please. Walking sideways like that is bad for your shoes. + +Though it is kinda cute when you get all reasonomatic + +bang bang + +have a nice day. + + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00072.8dcd09744b5534002262a8f3927ba3fc b/Ch3/datasets/spam/easy_ham/00072.8dcd09744b5534002262a8f3927ba3fc new file mode 100644 index 000000000..ffa8396b1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00072.8dcd09744b5534002262a8f3927ba3fc @@ -0,0 +1,68 @@ +From fork-admin@xent.com Mon Aug 26 15:31:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1144B4416B + for ; Mon, 26 Aug 2002 10:25:14 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:25:14 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7NKcVZ07401 for ; + Fri, 23 Aug 2002 21:38:31 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 75D1F2940E3; Fri, 23 Aug 2002 13:36:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail3.panix.com (mail3.panix.com [166.84.1.74]) by xent.com + (Postfix) with ESMTP id 8A596294099 for ; Fri, + 23 Aug 2002 13:35:46 -0700 (PDT) +Received: from 159-98.nyc.dsl.access.net (159-98.nyc.dsl.access.net + [166.84.159.98]) by mail3.panix.com (Postfix) with ESMTP id CB5F09844B for + ; Fri, 23 Aug 2002 16:37:33 -0400 (EDT) +From: Lucas Gonze +X-X-Sender: lgonze@localhost.localdomain +Cc: "Fork@Xent.Com" +Subject: Re: The case for spam +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 16:30:01 -0400 (EDT) + +Dan Brickley wrote: +> Except that thanks to the magic of spam, it's usually some else's locale + +yeah, physical mail makes more sense for physical locales. + +> There are better technical solutions to privacy +> protection than sending a copy of the same message to everyone on the +> Internet, so the recipients can't be blamed for reading it. + +Such as? + +Anything equivalent will be spam, just not email spam. Dump entry IPs for +an anonymizing network onto a public bulletin board that's used for other +purposes -- still spam. Etc etc. + +I'm not arguing against other solutions, I'm arguing that spam is speech. +If you let governments ban it, you're giving them the power to choose who +gets to speak. + +- Lucas + + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00073.30ffa73f8021a40ac03218af092d0dc7 b/Ch3/datasets/spam/easy_ham/00073.30ffa73f8021a40ac03218af092d0dc7 new file mode 100644 index 000000000..2998dde13 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00073.30ffa73f8021a40ac03218af092d0dc7 @@ -0,0 +1,74 @@ +From fork-admin@xent.com Mon Aug 26 15:30:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 82A234416A + for ; Mon, 26 Aug 2002 10:25:12 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:25:12 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7NKJVZ06924 for ; + Fri, 23 Aug 2002 21:19:32 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C9FFD2940C5; Fri, 23 Aug 2002 13:17:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail1.panix.com (mail1.panix.com [166.84.1.72]) by xent.com + (Postfix) with ESMTP id F1972294099 for ; Fri, + 23 Aug 2002 13:16:24 -0700 (PDT) +Received: from 159-98.nyc.dsl.access.net (159-98.nyc.dsl.access.net + [166.84.159.98]) by mail1.panix.com (Postfix) with ESMTP id EF7E948AD7; + Fri, 23 Aug 2002 16:18:11 -0400 (EDT) +From: Lucas Gonze +X-X-Sender: lgonze@localhost.localdomain +To: Russell Turpin +Cc: fork@spamassassin.taint.org +Subject: Re: The case for spam +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 16:10:39 -0400 (EDT) + + +me: +> >Spam is *the* tool for dissident news, since the fact that it's unsolicited +> >means that recipients can't be blamed for being on a mailing list. +> + +Russell Turpin: +> That depends on how the list is collected, or +> even on what the senders say about how the list +> is collected. Better to just put it on a website, +> and that way it can be surfed anonymously. AND +> it doesn't clutter my inbox. + +It doesn't work that way. A website is opt-in, spam is no-opt. If you +visit a samizdat site you can get in trouble. If you get samizdat spam, +the worst that can be said is that you might have read it. And as long as +the mailers send to individuals who clearly didn't opt-in, like party +officials, then other recipients can't get in trouble for requesting the +mail. + +Plus, it's much harder to block spam than web sites. + +But this shouldn't come as a surprize. Spam is speech. It may be sleazy, +but so what. + +- Lucas + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00074.71045f0bdb236b814e4729d318bd6509 b/Ch3/datasets/spam/easy_ham/00074.71045f0bdb236b814e4729d318bd6509 new file mode 100644 index 000000000..67ece7ab2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00074.71045f0bdb236b814e4729d318bd6509 @@ -0,0 +1,112 @@ +From fork-admin@xent.com Mon Aug 26 15:31:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 787FE47C80 + for ; Mon, 26 Aug 2002 10:25:23 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:25:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7NMWWZ10641 for ; + Fri, 23 Aug 2002 23:32:33 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6C8922940AD; Fri, 23 Aug 2002 15:30:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 62D44294099 for ; Fri, + 23 Aug 2002 15:29:50 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 7C7BB3EDA5; + Fri, 23 Aug 2002 18:33:37 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 7ADD23ED11; Fri, 23 Aug 2002 18:33:37 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Cc: vox@mindvox.com +Subject: GPL limits put to a test +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 18:33:37 -0400 (EDT) + + +XviD [1] is a project to make GPL divx codecs. Sigma Designs [1] is a +company looking to put out hardware to playback, amongst other things, +divx files. Problem is Sigma is using XviDs gpled code in ways not very +gpl. The results....XviD stops work on thier code and ask the users to +put preasure on Sigma to honor the GPL. + +Some notes from other places.... + +>>From Doom9 [3] +"XviD development has been stopped! The Sigma Designs REALMagic MPEG-4 +Video Codec contains wide portions of code taken from the XviD project. +Soon after the initial release of the REALMagic codec the XviD developers +have contacted Sigma and informed them about the GPL violation (for those +who don't know, XviD is distributed under the GNU Public License - GPL - +which demands that if you modify a GPL program you have to release it +under the GPL, which in this case means that the source code of the Sigma +codec must be freely available). Sigma promised to replace the stolen +code, but the new version of the codec which was released this month only +disguises the stolen code, it was not actually removed. Sigma was once +again contacted and asked to remove the offending code but until today +nothing has happened. Therefore the XviD team is now turning to the public +in the hope to receive wide public support in their efforts to convince +Sigma Designs to respect the terms of the GPL. And until the matter has +been resolved XviD development will not continue. + +That being said I hope all the forum members who saw their threads about +the Sigma Codecs being closed will understand our motivation now. +Internally we already knew what was going on but since the XviD authors +first wanted to try and resolve this internally we respected their wishes +and kept quiet about the matter at hand. + +[Update] Sigma has issued a press release announcing the availability of +the source code of their MPEG-4 codec and it's already up for download. +However, not a word was lost about the XviD issue and the press release +makes one think that the Sigma codec was entirely developed by Sigma so we +might be hearing more about this. + +[Update] I found a GPL notice in some of the source code files, but it +also looks like Sigma placed their own copyright lines there and XviD +doesn't get any credit in the source either. The GPL notice also collides +with Sigma's Software Licensing Agreement that you have to sign before +downloading codec or source. On on the same issue DivXNetworks said they'd +fully support XviD in this issue and apparently DXn's relationship with +Sigma didn't really work out either, as Sigma's Xcard is not as DivX +compatible as it was advertised. + +[Update]First an update on the XviD situation. The release of the Sigma +source code does not mean it's all over, it's far from being over. The +license agreement which you have to agree to before you can download, and +install the codec is not compatible with the GPL. Furthermore, it can now +clearly be seen (download the source code and have a look for yourself) +that the Sigma codec is pretty much a copy of the XviD codec, but all the +copyright notices of the original developers have been removed and +replaced. This does not only violate the GPL but copyright laws - you +can't just take a program, change a few lines and change the copyright +statements, you only have copyright protection for the parts you wrote on +your own. And related to this the Sigma codec also contains code taken +from the OpenDivX project, the files were outfitted with 2 different +copyright notices which is quite funny." + + + +[1] http://www.xvid.org/ +[2] http://www.sigmadesigns.com +[3] http://www.doom9.org/ + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00075.6485889c364c71761110c2b1190bb645 b/Ch3/datasets/spam/easy_ham/00075.6485889c364c71761110c2b1190bb645 new file mode 100644 index 000000000..3eea0c6f3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00075.6485889c364c71761110c2b1190bb645 @@ -0,0 +1,57 @@ +From fork-admin@xent.com Mon Aug 26 15:31:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 22FBD47C7F + for ; Mon, 26 Aug 2002 10:25:17 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:25:17 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7NKfYZ07433 for ; + Fri, 23 Aug 2002 21:41:34 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E2A8329413D; Fri, 23 Aug 2002 13:39:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail1.panix.com (mail1.panix.com [166.84.1.72]) by xent.com + (Postfix) with ESMTP id A28532940F4 for ; Fri, + 23 Aug 2002 13:39:00 -0700 (PDT) +Received: from 159-98.nyc.dsl.access.net (159-98.nyc.dsl.access.net + [166.84.159.98]) by mail1.panix.com (Postfix) with ESMTP id D6D27487BF for + ; Fri, 23 Aug 2002 16:40:47 -0400 (EDT) +From: Lucas Gonze +X-X-Sender: lgonze@localhost.localdomain +Cc: FoRK +Subject: Re: The case for spam +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 16:33:15 -0400 (EDT) + +> Russell Turpin: +> > That depends on how the list is collected, or +> > even on what the senders say about how the list +> > is collected. + +Senders should vary the recipient list to include non-targets, like party +officials, and to exclude targets enough to give them plausible +deniability. + +- Lucas + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00076.5aa682e393bfbef53e244acf3b2d23d6 b/Ch3/datasets/spam/easy_ham/00076.5aa682e393bfbef53e244acf3b2d23d6 new file mode 100644 index 000000000..4c8927547 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00076.5aa682e393bfbef53e244acf3b2d23d6 @@ -0,0 +1,55 @@ +From fork-admin@xent.com Mon Aug 26 15:31:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C0B6F4415D + for ; Mon, 26 Aug 2002 10:25:58 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:25:58 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7NNfVZ13285 for ; + Sat, 24 Aug 2002 00:41:32 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 07BEA2940A9; Fri, 23 Aug 2002 16:39:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 7C140294099 for ; Fri, + 23 Aug 2002 16:38:52 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 5F3243EDE8; + Fri, 23 Aug 2002 19:42:44 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 5DB833EDE6; Fri, 23 Aug 2002 19:42:44 -0400 (EDT) +From: Tom +To: vox@mindvox.com +Cc: fork@spamassassin.taint.org +Subject: Re: [vox] GPL limits put to a test +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 19:42:44 -0400 (EDT) + +On Fri, 23 Aug 2002, Tom wrote: + +--] +--]XviD [1] is a project to make GPL divx codecs. Sigma Designs [1] is a + + +Sorry, Sigma Designs should be the [2] not the [1] + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00077.24cfaba59d55d652be33b58bd7d41ca2 b/Ch3/datasets/spam/easy_ham/00077.24cfaba59d55d652be33b58bd7d41ca2 new file mode 100644 index 000000000..87a398994 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00077.24cfaba59d55d652be33b58bd7d41ca2 @@ -0,0 +1,127 @@ +From fork-admin@xent.com Mon Aug 26 15:31:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D129F4415C + for ; Mon, 26 Aug 2002 10:25:54 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:25:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7NN0WZ11779 for ; + Sat, 24 Aug 2002 00:00:32 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 842DE2940F4; Fri, 23 Aug 2002 15:58:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id A04E4294099 for ; Fri, + 23 Aug 2002 15:57:53 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 6913F3EDB5; + Fri, 23 Aug 2002 19:01:45 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 674703ED5C; Fri, 23 Aug 2002 19:01:45 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Cc: vox@mindvox.com +Subject: The GOv gets tough on Net Users.....er Pirates.. +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 19:01:45 -0400 (EDT) + +from http://www.arstechnica.com/ + +"There has mostly been talk thus far and little action, but the Department +of Justice says it may be ready to file criminal lawsuits against +individuals [1] who distribute or receive unauthorized copyrighted +material over the Internet. Deputy Assistant Attorney General John Malcolm believes +that "criminal prosecutions of copyright offenders are now necessary to +preserve the viability of America's content industries." Malcolm also +believes that people who trade copyrighted material think they are +participating in a legal activity. I certainly think people who download +copyrighted works understand that such distribution--barring provisions +such as fair use--is not authorized, and it is not surprising to see +businesses continue to look for means to discourage distribution of +copyrighted works. + + +"Some prosecutions that make that clear could be very helpful...I think +they would think twice if they thought there was a risk of criminal +prosecution," said [RIAA President Cary] Sherman, who was on the same +conference panel. + +I'm not too confident that lawsuits would have the effect Sherman is +hoping for. Although infrequent, there have already been civil suits or +warnings issued to private individuals, and they have served as minor +deterrents to the file-sharing community at large. Criminal lawsuits +carrying with them the possibility of prison sentences may generate +further animosity against groups such as the RIAA and may be difficult to +initiate because of the "schooling" effect of millions of systems +participating in file sharing. Only servers would seem to stand out from +the crowd. + +The article cites the No Electronic Theft (NET) Act [2], which defines +illegal activity and maximum penalties for copyright infringement: + + +Criminal infringement: Any person who infringes a copyright willfully for +purposes of commercial advantage or private financial gain, or by the +reproduction or distribution, including by electronic means, during any +180-day period, of 1 or more copies or phonorecords of 1 or more +copyrighted works, which have a total retail value of more than $1,000.... +For purposes of this subsection, evidence of reproduction or distribution +of a copyrighted work, by itself, shall not be sufficient to establish +willful infringement. +... +The term "financial gain" includes receipt, or expectation of receipt, of +anything of value, including the receipt of other copyrighted works. + + +Therefore, receipt of a work of value would be defined as "financial gain" +even if no money is involved. The NET Act excerpt does not clarify how the +value of a work is determined; an album or movie could be worth only $15 +to millions of dollars depending on whether the value is assessed from the +perspective of the consumer or copyright holder. + +The statute of limitations: + + +507. Limitations on actions + +(a) Criminal Proceedings.--No criminal proceeding shall be maintained +under the provisions of this title unless it is commenced within five +years after the cause of action arose. + +(b) Civil Actions.--No civil action shall be maintained under the +provisions of this title unless it is commenced within three years after +the claim accrued. + +The penalties are too extensive to list here, but they can be found in +Section 2319: Criminal infringement of a copyright. In general, first-time +criminal offenses will carry a maximum prison sentence of 1 year. + +I'm still not sure where the DOJ would start in choosing people to +prosecute because of the aforementioned "schooling" effect, but my guess +would be that, just like speeding, primarily the most prominent +individuals who operate large servers or transfer the most data will be +targeted in order to discourage more recreational file sharers. Thanks to +MonaLisaOverdrive for pointing out this story. +" + +[1] http://news.com.com/2100-1023-954591.html?tag=fd_top +[2] http://www.usdoj.gov/criminal/cybercrime/17-18red.htm + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00078.2ea8ca29bc2ed373a6c8270b488def60 b/Ch3/datasets/spam/easy_ham/00078.2ea8ca29bc2ed373a6c8270b488def60 new file mode 100644 index 000000000..9ba53a541 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00078.2ea8ca29bc2ed373a6c8270b488def60 @@ -0,0 +1,69 @@ +From fork-admin@xent.com Mon Aug 26 15:31:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 712CB4416C + for ; Mon, 26 Aug 2002 10:26:00 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:26:00 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7O8DXZ28808 for ; + Sat, 24 Aug 2002 09:13:34 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 373BC2940C4; Sat, 24 Aug 2002 01:11:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id B88CC2940BF for ; + Sat, 24 Aug 2002 01:10:46 -0700 (PDT) +Received: (qmail 25237 invoked by uid 1111); 24 Aug 2002 08:12:31 -0000 +From: "Adam L. Beberg" +To: Tom +Cc: +Subject: Re: The GOv gets tough on Net Users.....er Pirates.. +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 24 Aug 2002 01:12:31 -0700 (PDT) + +On Fri, 23 Aug 2002, Tom wrote: + +> from http://www.arstechnica.com/ +> +> "There has mostly been talk thus far and little action, but the +> Department of Justice says it may be ready to file criminal lawsuits +> against individuals [1] who distribute or receive unauthorized +> copyrighted material over the Internet. + +And yet STILL noone is out there creating _public domain_ content. Is there +even one person out there can can even begin to talk without being a +complete hypocrite? And no the "open source" people cant talk either, the +GPL aint even close. I know I cant talk. + +If the creator didnt say you could have it without paying, it's theft, so +simple, hell that's even in all the major holy books. + +Fair use needs to be clarified a bit and then I hope they start locking +people up. How else do i ever have hope of finding a job working for someone +that makes things people are supposed to ... *drumroll* pay for. + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00079.5fa6a133fe202da2627f52bdf31fc6e2 b/Ch3/datasets/spam/easy_ham/00079.5fa6a133fe202da2627f52bdf31fc6e2 new file mode 100644 index 000000000..38c6dabd8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00079.5fa6a133fe202da2627f52bdf31fc6e2 @@ -0,0 +1,60 @@ +From fork-admin@xent.com Mon Sep 2 16:22:23 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7E0254415B + for ; Mon, 2 Sep 2002 11:21:59 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:21:59 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g823UQZ18033 for ; + Mon, 2 Sep 2002 04:30:26 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6CDC1294178; Sun, 1 Sep 2002 20:24:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (cpe-65-172-233-109.sanbrunocable.com + [65.172.233.109]) by xent.com (Postfix) with ESMTP id 4E8C529410A for + ; Sun, 1 Sep 2002 20:23:56 -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Mon, 02 Sep 2002 01:07:29 -08:00 +Message-Id: <3D72B9D1.20101@barrera.org> +From: "Joseph S. Barrera III" +Organization: Wings over the World +User-Agent: Mutt 5.00.2919.6900 DM (Nigerian Scammer Special Edition) +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: rbfar@ebuilt.com +Cc: Robert Harley , fork@spamassassin.taint.org +Subject: Re: Java is for kiddies +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 01 Sep 2002 18:07:29 -0700 + +Reza B'Far (eBuilt) wrote: +> problems.... Why do most computer scientists insist on solving the same +> problems over and over again when there are some many more important and +> interesting problems (high level) to be solved ????? + +Amen! + +Doing it in an (unecessarily) harder way does NOT make you more of a man +(or less of a kiddie). + +- Joe + + + diff --git a/Ch3/datasets/spam/easy_ham/00080.ba42e846212f912a63aa36c7a9ded217 b/Ch3/datasets/spam/easy_ham/00080.ba42e846212f912a63aa36c7a9ded217 new file mode 100644 index 000000000..2ccee1918 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00080.ba42e846212f912a63aa36c7a9ded217 @@ -0,0 +1,72 @@ +From rpm-list-admin@freshrpms.net Mon Sep 2 13:12:45 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2EFA247C69 + for ; Mon, 2 Sep 2002 07:39:40 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:39:40 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g821EKZ14494 for + ; Mon, 2 Sep 2002 02:14:20 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g821C1J07101; Mon, 2 Sep 2002 03:12:01 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g821BSJ06974 + for ; Mon, 2 Sep 2002 03:11:28 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17lfkz-0002He-00 for rpm-list@freshrpms.net; + Sun, 01 Sep 2002 21:11:57 -0400 +X-Originating-Ip: [207.172.11.147] +From: "" Angles " Puglisi" +To: "FreshRPMs List" +Subject: package my stuff please :P +Message-Id: <20020901.lpt.78839000@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 02 Sep 2002 01:10:33 +0000 +Date: Mon, 02 Sep 2002 01:10:33 +0000 + +If I have any RPMS in + +http://www.dudex.net/rpms/ + +that could be useful to some one with a real apt repository or someone who wants to +maintain a package, be it known I am not selfish :) + +I found stuff I thought would later get popular so I would not have to maintain the +RPMs for them after they hit the big time. Gnump3d is an exapmple of this. + +So if anyone is psyched, go for it. If so, let me know so I can get the RPMs from +you in the future. + +-- +That's "angle" as in geometry. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/00081.c16e4d631ac7941fd25ffb1cd316e100 b/Ch3/datasets/spam/easy_ham/00081.c16e4d631ac7941fd25ffb1cd316e100 new file mode 100644 index 000000000..6dc29c629 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00081.c16e4d631ac7941fd25ffb1cd316e100 @@ -0,0 +1,83 @@ +From fork-admin@xent.com Mon Sep 2 16:22:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E450743F9B + for ; Mon, 2 Sep 2002 11:21:54 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:21:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g822MpZ16361 for ; + Mon, 2 Sep 2002 03:22:51 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 5EB982940DE; Sun, 1 Sep 2002 19:20:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id 6E01D294099 for ; + Sun, 1 Sep 2002 19:19:16 -0700 (PDT) +Received: (qmail 3268 invoked by uid 1111); 2 Sep 2002 02:21:33 -0000 +From: "Adam L. Beberg" +To: "Reza B'Far (eBuilt)" +Cc: +Subject: RE: Java is for kiddies +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 1 Sep 2002 19:21:33 -0700 (PDT) + +On Sun, 1 Sep 2002, Reza B'Far (eBuilt) wrote: + +> 2. C and C++ forces the developer to solve problems such as memory +> management over and over again. IMHO, Java is superior because the problem +> of programming in the future is not about 0's and 1's, making the compiler +> 2% faster, or making your code take 5% less memory... It's about design +> patterns, architecture, high level stuff... + +Considering 90% of the fake job posting I see are for embedded systems or +device drivers - C still rules the world. + +> 3. Java is not just a programming language! It's also a platform... There +> is NOTHING like the standard API's in Java in C and C++. Everyone defines +> their own API's, people end up solving the same problems ten different ways + +The problem is the problem you're trying to solve is never the same. Java +will soon suffer API-rot (alot of poeple are already complaining about it), +it's just new. C was clean in the beginning too. API-rot is PURELY a +function of age. + +> 4. If you have a program of any type of high complexity written in C, you +> can't possibly think that you could port it to different platforms within +> the same magnitude of cost as Java.... + +I do this all the time, It's alot easier then you think if the original +programmer had a clue at all... Java does remove the clue requirement tho, +just adds a huge testing requirement, QA guys aren't as cheap ;) + +> 5. Makes no sense for a scientific or a business project to depend on a +> person... Java, IMHO, reduces the dependence of these entities on the +> individual developer as it is much easier to reverse engineer Java as it is +> to reverse engineer C (large applications). + +No it's not, but you can hire teams of Javites for cheap at your local high +school. Java is about cutting costs and commoditizing programming - and it's +working! + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00082.b40e4eedafc60aef72a0a0cbb63c2406 b/Ch3/datasets/spam/easy_ham/00082.b40e4eedafc60aef72a0a0cbb63c2406 new file mode 100644 index 000000000..520aa2e31 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00082.b40e4eedafc60aef72a0a0cbb63c2406 @@ -0,0 +1,56 @@ +From fork-admin@xent.com Mon Sep 2 16:22:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 4D8384415C + for ; Mon, 2 Sep 2002 11:22:00 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:22:00 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g823eoZ18207 for ; + Mon, 2 Sep 2002 04:40:50 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 625C529416E; Sun, 1 Sep 2002 20:38:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav32.law15.hotmail.com [64.4.22.89]) by + xent.com (Postfix) with ESMTP id B44F7294099 for ; + Sun, 1 Sep 2002 20:37:40 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Sun, 1 Sep 2002 20:40:02 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: +Subject: Re: Java is for kiddies +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 02 Sep 2002 03:40:02.0181 (UTC) FILETIME=[6B4C7350:01C25232] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 1 Sep 2002 20:43:51 -0700 + + +> +> 6. Hardware is getting so fast that I'm not sure if the performance +> difference between Java and C/C++ are relevant any more. + +When out-of-the-box parsing & transform of XML in java is 25x slower than +C++ on the same hardware then it does matter. + diff --git a/Ch3/datasets/spam/easy_ham/00083.d6bec4788401bc0df20b740557680768 b/Ch3/datasets/spam/easy_ham/00083.d6bec4788401bc0df20b740557680768 new file mode 100644 index 000000000..d9a74eb68 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00083.d6bec4788401bc0df20b740557680768 @@ -0,0 +1,62 @@ +From fork-admin@xent.com Mon Sep 2 16:22:33 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BA1A444160 + for ; Mon, 2 Sep 2002 11:22:03 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:22:03 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g826juZ22846 for ; + Mon, 2 Sep 2002 07:45:56 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7006C294183; Sun, 1 Sep 2002 23:43:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f98.law15.hotmail.com [64.4.23.98]) by + xent.com (Postfix) with ESMTP id 2C3F8294099 for ; + Sun, 1 Sep 2002 23:42:04 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Sun, 1 Sep 2002 23:44:26 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Mon, 02 Sep 2002 06:44:25 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: RE: Java is for kiddies +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 02 Sep 2002 06:44:26.0154 (UTC) FILETIME=[2DF0C0A0:01C2524C] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 02 Sep 2002 06:44:25 +0000 + +Adam Beberg: +>Considering 90% of the fake job posting I see are for embedded systems or +>device drivers - C still rules the world. + +There is a lot of C++ in the embedded world. With +static object allocation and a few other programming +techniques, performance differences disappear, but +C++ gives a boost in development and maintainability. +The real issue is compiler availability. Almost every +embedded platform has C cross-compilers. Many have +C++ compilers. But there is still a range of +platforms that have the first but not the second. Or +at least, that was the story a few years ago. + +_________________________________________________________________ +Send and receive Hotmail on your mobile device: http://mobile.msn.com + + diff --git a/Ch3/datasets/spam/easy_ham/00084.2ef0c65e298880c3869b39dc95b40e8e b/Ch3/datasets/spam/easy_ham/00084.2ef0c65e298880c3869b39dc95b40e8e new file mode 100644 index 000000000..056a693bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00084.2ef0c65e298880c3869b39dc95b40e8e @@ -0,0 +1,74 @@ +From ilug-admin@linux.ie Mon Sep 2 13:14:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C2E7C47C74 + for ; Mon, 2 Sep 2002 07:42:03 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:42:03 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g827VJZ23920 for + ; Mon, 2 Sep 2002 08:31:19 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id IAA22561; Mon, 2 Sep 2002 08:30:44 +0100 +Received: from moe.jinny.ie (homer.jinny.ie [193.120.171.3]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id IAA22526 for ; + Mon, 2 Sep 2002 08:30:36 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host homer.jinny.ie + [193.120.171.3] claimed to be moe.jinny.ie +Received: from jlooney.jinny.ie (fw.jinny.ie [193.120.171.2]) by + moe.jinny.ie (Postfix) with ESMTP id 3F9167FC40 for ; + Mon, 2 Sep 2002 08:30:35 +0100 (IST) +Received: by jlooney.jinny.ie (Postfix, from userid 500) id 58AA19A5; + Mon, 2 Sep 2002 08:30:58 +0100 (IST) +Date: Mon, 2 Sep 2002 08:30:57 +0100 +From: "John P. Looney" +To: ILUG main list +Subject: Re: [ILUG] Seconds to date? +Message-Id: <20020902073057.GT1757@jinny.ie> +Reply-To: ilug@linux.ie +Mail-Followup-To: ILUG main list +References: <20020901004414.A15357@ie.suberic.net> + +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: +User-Agent: Mutt/1.4i +X-Os: Red Hat Linux 7.3/Linux 2.4.18-3 +X-Url: http://www.redbrick.dcu.ie/~valen +X-Gnupg-Publickey: http://www.redbrick.dcu.ie/~valen/public.asc +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +On Sun, Sep 01, 2002 at 04:14:17PM +0100, Paul Jakma mentioned: +> On Sun, 1 Sep 2002, kevin lyda wrote: +> +> > gnu date is limited by time_t. but i thought time_t expired in 2037? +> > this seems to show it expiring in 2038: +> +> (2^31-1)/3600/24/365+1970 +> 2038 +> +> course, on UltraSparc, x86-64, IA64, alpha, etc: +> +> (2^63-1)/3600/24/365+1970 +> 292471210647 +> +> so we should be safe enough. + + May I assume that x86-64 will be able to use a 64bit time_t too? + +Kate + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00085.badc533c7037554017afb30c94dfcb55 b/Ch3/datasets/spam/easy_ham/00085.badc533c7037554017afb30c94dfcb55 new file mode 100644 index 000000000..234908a10 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00085.badc533c7037554017afb30c94dfcb55 @@ -0,0 +1,73 @@ +From fork-admin@xent.com Mon Sep 2 16:22:38 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6FB924415A + for ; Mon, 2 Sep 2002 11:22:06 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:22:06 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g827cpZ24134 for ; + Mon, 2 Sep 2002 08:38:51 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2C49E2941BC; Mon, 2 Sep 2002 00:36:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id C53D9294189 for ; + Mon, 2 Sep 2002 00:35:22 -0700 (PDT) +Received: (qmail 4598 invoked by uid 1111); 2 Sep 2002 07:37:39 -0000 +From: "Adam L. Beberg" +To: Russell Turpin +Cc: +Subject: RE: Java is for kiddies +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 2 Sep 2002 00:37:39 -0700 (PDT) + +On Mon, 2 Sep 2002, Russell Turpin wrote: + +> Adam Beberg: +> >Considering 90% of the fake job posting I see are for embedded systems or +> >device drivers - C still rules the world. +> +> There is a lot of C++ in the embedded world. With static object +> allocation and a few other programming techniques, performance +> differences disappear, but C++ gives a boost in development and +> maintainability. + +Agreed, not much difference there. With C it just doesnt seem as wrong to +be crawling around in registers and things. Quite frankly you cant fit +_that_ big of a project into a 32K ROM, so large project issues dont matter +as much in the embedded world. + +And in the realtime space, or when you have data coming in at 2Gbit/sec +[fibrechannel], every cycle DOES count. + +> The real issue is compiler availability. Almost every embedded platform +> has C cross-compilers. Many have C++ compilers. But there is still a +> range of platforms that have the first but not the second. Or at least, +> that was the story a few years ago. + +Definately still very very true. C++ compilers are still a rarity. + + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00086.2d36c5f829135d1fed8f88471163b240 b/Ch3/datasets/spam/easy_ham/00086.2d36c5f829135d1fed8f88471163b240 new file mode 100644 index 000000000..2bf1a5b42 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00086.2d36c5f829135d1fed8f88471163b240 @@ -0,0 +1,61 @@ +From ilug-admin@linux.ie Mon Sep 2 13:14:35 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 117D947C76 + for ; Mon, 2 Sep 2002 07:42:12 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:42:12 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g829uBZ27652 for + ; Mon, 2 Sep 2002 10:56:11 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id KAA28572; Mon, 2 Sep 2002 10:55:45 +0100 +Received: from intmailsrv02.fleishman.mail (mail.fleishman.com + [207.193.111.249]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id KAA28537 + for ; Mon, 2 Sep 2002 10:55:29 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host mail.fleishman.com + [207.193.111.249] claimed to be intmailsrv02.fleishman.mail +Received: from ims01east.fleishman.com ([207.193.111.247]) by + intmailsrv02.fleishman.mail with Microsoft SMTPSVC(5.0.2195.2966); + Mon, 2 Sep 2002 04:55:27 -0500 +Received: by ims01east with Internet Mail Service (5.5.2654.89) id + ; Mon, 2 Sep 2002 04:54:47 -0500 +Message-Id: +From: "Quinn, Dell" +To: "'ilug@linux.ie'" +Date: Mon, 2 Sep 2002 04:53:53 -0500 +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2654.89) +Content-Type: text/plain; charset="iso-8859-1" +X-Originalarrivaltime: 02 Sep 2002 09:55:27.0714 (UTC) FILETIME=[DD900420:01C25266] +Subject: [ILUG] Can I be added to your email distribution lists? +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + + + + + +Dell Quinn +Account Executive +Fleishman-Hillard Saunders +15 Fitzwilliam Quay +Dublin 4 +Ireland +Tel: 01 6188428 +Fax: 01 6602244 +Mobile: 086 6048101 + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00087.03a92f5753c44cb83d28837121d82b06 b/Ch3/datasets/spam/easy_ham/00087.03a92f5753c44cb83d28837121d82b06 new file mode 100644 index 000000000..c06c3fa4b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00087.03a92f5753c44cb83d28837121d82b06 @@ -0,0 +1,165 @@ +From fork-admin@xent.com Mon Sep 2 16:22:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E18EC44161 + for ; Mon, 2 Sep 2002 11:22:07 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:22:07 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g829uqZ27657 for ; + Mon, 2 Sep 2002 10:56:53 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E5391294189; Mon, 2 Sep 2002 02:54:01 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id E262F294099 for ; Mon, 2 Sep 2002 02:53:06 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id EDC5CC44D; + Mon, 2 Sep 2002 11:54:55 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: RE: Java is for kiddies +Message-Id: <20020902095455.EDC5CC44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 2 Sep 2002 11:54:55 +0200 (CEST) + +Reza B'Far wrote: +>This thread kind of surprises me... I started coding with C, then C++, and +>moved on to Java... And, I think that: + +Looks like a case of "MY experience is comprehensive, YOUR'S is +anecdotal, THEY don't know what they're talking about". + + +>1. The people who pay the wages don't give a flyin' heck what programming +>language you write things in... they just want it to work. + +In my experience, they do care. It has to work certainly, and in +particular it has to work with what they've already got, and it has to +work on client's systems. + +My limited experience of Java started a few years ago when support on +Linux was so terrible that I ran away screaming and haven't come back yet. + +Microsoft has announced that they plan to remove Java from Windows. +They took it out of XP already and it has to be installed with a +service pack. Somehow, I can't imagine them removing the ability to +run C programs. + + +>2. C and C++ forces the developer to solve problems such as memory +>management over and over again. + +Can't say I spend any noticeable amount of time on memory management +issues, apart from the fact that I frequently need > 4 GB. + + +>It's about design patterns, architecture, high level stuff... + +If your problem just requires application of a "design pattern" to solve, +then it's trivial anyway irrespective of language. + + +>I am amazed by the amount of time wasted by people talking about low +>level problems that have been solved 10 million times over and over +>and over again... + +You appear to be gratuitously asserting that C programmers waste time +on irrelevant low-level problems and Java programmers don't. Depends +entirely on the programmer, not the language. + + +>3. Java is not just a programming language! It's also a platform... + +Buzzword. + + +>a monolithic set of API's or a crap load of different API's slicing +>and dicing the same problems 50 different ways? + +Unsupported assertion. + + +>4. If you have a program of any type of high complexity written in C, you +>can't possibly think that you could port it to different platforms within +>the same magnitude of cost as Java.... + +Dunno. E.g., I ported a wee 15000-line C program to Darwin on PowerPC +in a few minutes yesterday. Sure if it was badly designed it would be +10 times the size and harder to port. If it depended on unavailable +libraries it would be much harder. Portable code is easy to port. +At least that is the case when then language you used is available on +the target platform: I also run on ARM systems with no proper Java. + + +>5. Makes no sense for a scientific or a business project to depend on a +>person... Java, IMHO, reduces the dependence of these entities on the +>individual developer as it is much easier to reverse engineer Java as it is +>to reverse engineer C (large applications). + +You can pay a good programmer to solve your problem now, or else get +some kids to hack spaghetti Fortran in any language and then pay for +maintenance headaches ad infinitum. + + +>6. Hardware is getting so fast that I'm not sure if the performance +>difference between Java and C/C++ are relevant any more. + +Whoah!!! Performance matters to me every day. (Right now I'm taking +time out to write email while waiting for a job to run). Sure I could +wait 5 years until everyone's PC is fast enough to generate random EC's +in no time, when any twit will be able to program inefficient code +that is fast enough and the market will be overrun by competitors, +or I can do it now when very few people can. + + +>The end goal is the scientific or business problem to be solved. + +Yes. + + +>And for those problems, languages such as Java, SmallTalk, and others +>allow you to think more high level than low level. Thinking of bits +>and bytes takes too much gray matter away from the real important +>problems.... + +It's true! I admit everything! Mea maxima culpa! Working in C makes +me spend all day thinking base, rank thoughts about hard-core bitography! +Not. + +Actually I spend most of my time thinking in high-level mathematics. + + +>Why do most computer scientists insist on solving the same problems +>over and over again [...] + +Dunno, and frankly I don't see the relevance to the issue at hand. + + +I'm sure Java is fine for some stuff, as is C or whatever. Horses for +courses. + + +Bye, + Rob. + .-. .-. + / \ .-. .-. / \ + / \ / \ .-. _ .-. / \ / \ + / \ / \ / \ / \ / \ / \ / \ + / \ / \ / `-' `-' \ / \ / \ + \ / `-' `-' \ / + `-' `-' + diff --git a/Ch3/datasets/spam/easy_ham/00088.945614c3f6213f59548ab21306451675 b/Ch3/datasets/spam/easy_ham/00088.945614c3f6213f59548ab21306451675 new file mode 100644 index 000000000..24a622a1e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00088.945614c3f6213f59548ab21306451675 @@ -0,0 +1,68 @@ +From ilug-admin@linux.ie Mon Sep 2 13:14:40 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1634847C79 + for ; Mon, 2 Sep 2002 07:42:31 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:42:31 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82AEwZ28230 for + ; Mon, 2 Sep 2002 11:14:58 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id LAA29406; Mon, 2 Sep 2002 11:14:15 +0100 +Received: from mail.magicgoeshere.com (nw152-60.indigo.ie [194.125.152.60] + (may be forged)) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id LAA29324 + for ; Mon, 2 Sep 2002 11:13:49 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host nw152-60.indigo.ie + [194.125.152.60] (may be forged) claimed to be mail.magicgoeshere.com +Received: from bagend.magicgoeshere.com (ts15-158.dublin.indigo.ie + [194.125.176.158]) by mail.magicgoeshere.com (Postfix) with ESMTP id + 15675FB4F for ; Mon, 2 Sep 2002 10:57:18 +0100 (IST) +Received: by bagend.magicgoeshere.com (Postfix, from userid 501) id + BE05D61DEF; Mon, 2 Sep 2002 11:00:17 +0100 (IST) +Date: Mon, 2 Sep 2002 11:00:17 +0100 +From: Niall O Broin +To: ilug@linux.ie +Message-Id: <20020902100017.GB2041@bagend.makalumedia.com> +Reply-To: ilug@linux.ie +Mail-Followup-To: Niall O Broin , ilug@linux.ie +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.3.27i +Subject: [ILUG] VPN implementation +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +I need to setup a VPN between a few sites. From what I've read, the the +choices come down (on the Linux side) to IPsec (using FreeSWAN) or CIPE. +It seems that FreeSWAN is 'better', being an implementation of IPsec which +is a standard. However, CIPE does the job as well for Linux clients and is +somewhat simpler to setup. + +The problem is that it's not a pure Linux situation - a couple of the sites +run OS-X. I'm pretty sure that I'll be able to find an implementation of +IPsec for OS-X, but I think CIPE is Linux only. + +So, the question is for those of you have have implemented BOTH - is there a +significant difference in setup time and hassle between CIPE and FreeSWAN ? +If CIPE is going to be much easier than dealing with FreeSWAN (and whatever +on the OS-X sites) then I'll simply get a Linux box for each of the remote +sites - with the low price of hardware, it doesn't take much more complexity +in software to make buying hardware to use simpler software economic. + + + +Niall + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00089.c31c9b44b66c440d6b39c5f8841ed43b b/Ch3/datasets/spam/easy_ham/00089.c31c9b44b66c440d6b39c5f8841ed43b new file mode 100644 index 000000000..c6874acbd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00089.c31c9b44b66c440d6b39c5f8841ed43b @@ -0,0 +1,78 @@ +From ilug-admin@linux.ie Mon Sep 2 13:12:59 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0FB2C47C7B + for ; Mon, 2 Sep 2002 07:43:00 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:43:00 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82AagZ28789 for + ; Mon, 2 Sep 2002 11:36:42 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id LAA30797; Mon, 2 Sep 2002 11:36:06 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from bramg1.net.external.hp.com (bramg1.net.external.hp.com + [192.6.126.73]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id LAA30760 + for ; Mon, 2 Sep 2002 11:35:56 +0100 +Received: from fowey.BR.ITC.HP.COM (fowey.br.itc.hp.com [15.145.8.186]) by + bramg1.net.external.hp.com (Postfix) with SMTP id 9346213A for + ; Mon, 2 Sep 2002 12:35:55 +0200 (METDST) +Received: from 15.145.8.186 by fowey.BR.ITC.HP.COM (InterScan E-Mail + VirusWall NT); Mon, 02 Sep 2002 11:35:54 +0100 +Received: by fowey.br.itc.hp.com with Internet Mail Service (5.5.2655.55) + id ; Mon, 2 Sep 2002 11:35:54 +0100 +Message-Id: <253B1BDA4E68D411AC3700D0B77FC5F807C0F3EF@patsydan.dublin.hp.com> +From: "HAMILTON,DAVID (HP-Ireland,ex2)" +To: "'ilug@linux.ie'" +Date: Mon, 2 Sep 2002 11:35:53 +0100 +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2655.55) +Content-Type: text/plain +Subject: [ILUG] The Age Old 'Which Mailer' Question +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +I am trying to manage the email for a domain which I have hosted with +hosting365, and am trying to get the whole email send and receive thing +working nice and easily. +At the moment I have configured Fetchmail to poll the different pop3 +mailboxes and deliver the mail accordingly, although it appears that I have +to have only one unix user being able to receive from each pop3 mailbox. +This could be a limitation of the fetchmailconf programme, I'm not sure, but +It would be much handier if I could just tell it to collect all of the mail +from the different mailboxes, and then deliver it locally according to the +"To:" header instead of the pop3 mailbox it came from. +The other issue I am having is sending outgoing mail. I have been trying to +use sendmail, but am finding it to be an absolute pain in the posterior, and +when the relay server will only accept outgoing connections if I have +checked for incoming mail in the last twenty minutes, and I don't know how +to set sendmail to run a command before it sends out the mail. Do any of +the outgoing mailer programs, exim or postfix or whatever, have a 'nice' +configuration interface, or do they all have nice friendly configuration +files like sendmail. + +Any suggestions of alternative solutions would be much appreciated. There +are only three or four email addresses in my domain, and setting it up for +scheduled collection and either scheduled or immediate delivery would do me +fine. + +Thanks, + + David. + +David Hamilton +Senior Technical Consultant +HP Ireland + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00090.3af9d04b3ade1077fce4fb224ebf38cb b/Ch3/datasets/spam/easy_ham/00090.3af9d04b3ade1077fce4fb224ebf38cb new file mode 100644 index 000000000..8c1dd829e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00090.3af9d04b3ade1077fce4fb224ebf38cb @@ -0,0 +1,74 @@ +From ilug-admin@linux.ie Mon Sep 2 13:13:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0430947C7A + for ; Mon, 2 Sep 2002 07:42:48 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:42:48 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82AaFZ28780 for + ; Mon, 2 Sep 2002 11:36:15 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id LAA30726; Mon, 2 Sep 2002 11:35:06 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from [193.95.181.146] ([193.95.181.146]) by lugh.tuatha.org + (8.9.3/8.9.3) with SMTP id LAA30670 for ; Mon, + 2 Sep 2002 11:34:56 +0100 +Received: from athens.itsmobile.com by [193.95.181.146] via smtpd (for + lugh.tuatha.org [194.125.145.45]) with SMTP; 2 Sep 2002 10:26:06 UT +X-Mimeole: Produced By Microsoft Exchange V6.0.5762.3 +Content-Class: urn:content-classes:message +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Date: Mon, 2 Sep 2002 11:45:50 +0100 +Message-Id: +X-MS-Has-Attach: +X-MS-Tnef-Correlator: +Thread-Topic: What HOWTOs for SOHO system +Thread-Index: AcJSbGP3hSOj275NEdaF/AABAgjiLA== +From: "Dermot Daly" +To: +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by lugh.tuatha.org id + LAA30670 +Subject: [ILUG] What HOWTOs for SOHO system +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Hi All, +I'm trying to set up the following: + +1. A Linux server running with a modem for internet connectivity and an +ethernet card for LAN connectivity +2. Other LAN pcs with ethernet cards, using the Linux server for +DNS/DHCP etc. + +Basically, I want to route any non LAN traffic through the ppp0. + +I've got some of the way, but like a similar post earlier about modem +problems, when I am connected to the internet with eht0 up, the routing +is all incorrect and noting goes out through ppp0 (eh0 must be the +default route or something). + +Is there standard "out of the box" Linux tools that will carry out +portmapping on behalf of the LAN PCs ? (I'm planning on non routable +addresses 192.168.x.x for the LAN, routed outwards via the ppp0 +interface). + +Can someone point me at the right HOWTOs or routing documentation I need +to follow ? +Thanks, +Dermot. + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00091.abb1965e279e4365f1ef31e4878c5d14 b/Ch3/datasets/spam/easy_ham/00091.abb1965e279e4365f1ef31e4878c5d14 new file mode 100644 index 000000000..b54deb0a8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00091.abb1965e279e4365f1ef31e4878c5d14 @@ -0,0 +1,99 @@ +From ilug-admin@linux.ie Mon Sep 2 13:13:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6A0CD47C7C + for ; Mon, 2 Sep 2002 07:43:01 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:43:01 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82Am8Z29220 for + ; Mon, 2 Sep 2002 11:48:08 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id LAA31421; Mon, 2 Sep 2002 11:47:10 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from relay05.indigo.ie (relay05.indigo.ie [194.125.133.229]) by + lugh.tuatha.org (8.9.3/8.9.3) with SMTP id LAA31379 for ; + Mon, 2 Sep 2002 11:46:27 +0100 +Received: (qmail 97613 messnum 1200606 invoked from + network[194.125.130.10/unknown]); 2 Sep 2002 10:46:25 -0000 +Received: from unknown (HELO win2000) (194.125.130.10) by + relay05.indigo.ie (qp 97613) with SMTP; 2 Sep 2002 10:46:25 -0000 +Reply-To: +From: "Justin MacCarthy" +To: "Dermot Daly" +Cc: "Ilug@Linux.Ie" +Subject: RE: [ILUG] What HOWTOs for SOHO system +Date: Mon, 2 Sep 2002 11:46:57 +0100 +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Importance: Normal +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Hi Dermot, if have a look at one of the dists. like www.smoothwall.org, it +will save you lots of time and effort, and should do eveything you want. + +Justin + +> -----Original Message----- +> From: ilug-admin@linux.ie [mailto:ilug-admin@linux.ie]On Behalf Of +> Dermot Daly +> Sent: Monday, September 02, 2002 11:46 AM +> To: ilug@linux.ie +> Subject: [ILUG] What HOWTOs for SOHO system +> +> +> Hi All, +> I'm trying to set up the following: +> +> 1. A Linux server running with a modem for internet connectivity and an +> ethernet card for LAN connectivity +> 2. Other LAN pcs with ethernet cards, using the Linux server for +> DNS/DHCP etc. +> +> Basically, I want to route any non LAN traffic through the ppp0. +> +> I've got some of the way, but like a similar post earlier about modem +> problems, when I am connected to the internet with eht0 up, the routing +> is all incorrect and noting goes out through ppp0 (eh0 must be the +> default route or something). +> +> Is there standard "out of the box" Linux tools that will carry out +> portmapping on behalf of the LAN PCs ? (I'm planning on non routable +> addresses 192.168.x.x for the LAN, routed outwards via the ppp0 +> interface). +> +> Can someone point me at the right HOWTOs or routing documentation I need +> to follow ? +> Thanks, +> Dermot. +> +> -- +> Irish Linux Users' Group: ilug@linux.ie +> http://www.linux.ie/mailman/listinfo/ilug for (un)subscription +> information. +> List maintainer: listmaster@linux.ie +> +> +> + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00092.7ecc7d565565fbe466bfc8db6e456f9d b/Ch3/datasets/spam/easy_ham/00092.7ecc7d565565fbe466bfc8db6e456f9d new file mode 100644 index 000000000..1a3e0518c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00092.7ecc7d565565fbe466bfc8db6e456f9d @@ -0,0 +1,68 @@ +From ilug-admin@linux.ie Mon Sep 2 13:13:28 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9A0DA47C7D + for ; Mon, 2 Sep 2002 07:43:03 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:43:03 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82AmlZ29246 for + ; Mon, 2 Sep 2002 11:48:47 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id LAA31509; Mon, 2 Sep 2002 11:48:02 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from relay05.indigo.ie (relay05.indigo.ie [194.125.133.229]) by + lugh.tuatha.org (8.9.3/8.9.3) with SMTP id LAA31465 for ; + Mon, 2 Sep 2002 11:47:50 +0100 +Received: (qmail 99805 messnum 1203514 invoked from + network[194.125.130.10/unknown]); 2 Sep 2002 10:47:50 -0000 +Received: from unknown (HELO win2000) (194.125.130.10) by + relay05.indigo.ie (qp 99805) with SMTP; 2 Sep 2002 10:47:50 -0000 +Reply-To: +From: "Justin MacCarthy" +To: "Ilug@Linux.Ie" +Date: Mon, 2 Sep 2002 11:48:22 +0100 +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Importance: Normal +Subject: [ILUG] Email list management howto +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +I think I'll ask this question again, as I sent on friday afternoon. :-) + +Justin + +> Hi, +> +> Can anyone point me to a howto on running mailing lists. Not looking for +> anything that is package specific, but rather something that +> gives general +> info on the various Email headers and dealing with returned +> mails, errors in +> transport etc.. +> +> Thanks +> +> Justin + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00093.ee758841ef674e30d7d36f22fffeaeb6 b/Ch3/datasets/spam/easy_ham/00093.ee758841ef674e30d7d36f22fffeaeb6 new file mode 100644 index 000000000..338254e50 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00093.ee758841ef674e30d7d36f22fffeaeb6 @@ -0,0 +1,70 @@ +From ilug-admin@linux.ie Mon Sep 2 13:12:41 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2889F47C80 + for ; Mon, 2 Sep 2002 07:43:39 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:43:39 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82Aw9Z29560 for + ; Mon, 2 Sep 2002 11:58:09 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id LAA32263; Mon, 2 Sep 2002 11:57:34 +0100 +Received: from hawk.dcu.ie (mail.dcu.ie [136.206.1.5]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id LAA32225 for ; Mon, + 2 Sep 2002 11:57:16 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host mail.dcu.ie [136.206.1.5] + claimed to be hawk.dcu.ie +Received: from prodigy.redbrick.dcu.ie (136.206.15.10) by hawk.dcu.ie + (6.0.040) id 3D6203D300050841 for ilug@linux.ie; Mon, 2 Sep 2002 11:57:16 + +0100 +Received: by prodigy.redbrick.dcu.ie (Postfix, from userid 1023) id + 3376ADA4A; Mon, 2 Sep 2002 11:57:16 +0100 (IST) +Date: Mon, 2 Sep 2002 11:57:16 +0100 +From: Philip Reynolds +To: ilug@linux.ie +Subject: Re: [ILUG] Serial number in hosts file +Message-Id: <20020902115716.E3253@prodigy.Redbrick.DCU.IE> +References: <3D735065.23921.771154@localhost> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +In-Reply-To: <3D735065.23921.771154@localhost>; from DERMODYR@ITCARLOW.IE + on Mon, Sep 02, 2002 at 11:49:56AM +0100 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Ray Dermody's [DERMODYR@ITCARLOW.IE] 20 lines of wisdom included: +> Hi All, +> The serial number in our hosts files on our DNS server has gone +> corrupt e.g. 2002082999999999901 should be 20002082901. +> Its okay to set this back to todays date but I understand that our +> secondary and terninary DNS servers will only update from the master +> hosts file if the master host serial number is greater than the current +> serial number in the hosts file. +> Is there any way I can reset this on the secondary and terninary DNS +> servers? + +Once you have the serial changed on the master DNS server, remove +the appropiate zone(s) on your slaves, and refresh your DNS servers. + +Bind has a special case, if you set the serial to '0' I think. DNS & +Bind should have something on that. + +-- + Philip Reynolds + RFC Networks tel: 01 8832063 +www.rfc-networks.ie fax: 01 8832041 + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00094.ef72156b3ba9ff0fc5fedc2125ceb736 b/Ch3/datasets/spam/easy_ham/00094.ef72156b3ba9ff0fc5fedc2125ceb736 new file mode 100644 index 000000000..412316d61 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00094.ef72156b3ba9ff0fc5fedc2125ceb736 @@ -0,0 +1,88 @@ +From ilug-admin@linux.ie Mon Sep 2 13:12:53 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0046D47C84 + for ; Mon, 2 Sep 2002 07:44:57 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:44:57 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82B72Z30034 for + ; Mon, 2 Sep 2002 12:07:02 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id MAA00554; Mon, 2 Sep 2002 12:05:51 +0100 +Received: from dspsrv.com (vir.dspsrv.com [193.120.211.34]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id MAA00506 for ; + Mon, 2 Sep 2002 12:05:31 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host vir.dspsrv.com + [193.120.211.34] claimed to be dspsrv.com +Received: from itg-gw.cr008.cwt.esat.net ([193.120.242.226] + helo=waider.ie) by dspsrv.com with asmtp (Exim 3.35 #1) id + 17lp1O-0004xK-00; Mon, 02 Sep 2002 12:05:30 +0100 +Message-Id: <3D7344D7.6010702@waider.ie> +Date: Mon, 02 Sep 2002 12:00:39 +0100 +From: Waider +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: vincent@cunniffe.net +Cc: ilug@linux.ie +Subject: Re: [ILUG] Email list management howto +References: + <3D7344E1.8010309@diva.ie> +X-Enigmail-Version: 0.65.2.0 +X-Enigmail-Supports: pgp-inline, pgp-mime +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +-----BEGIN PGP SIGNED MESSAGE----- + +Vincent Cunniffe wrote: +| Justin MacCarthy wrote: +| +|> I think I'll ask this question again, as I sent on friday afternoon. + :-) +| +| +| Mailman ;-) +| +| Trust me, you do *not* want to running your own mailing lists +| on your own software. +| +| You'll wind up crying in a dark room looking for something +| high-voltage to stick your fingers into. + +All things considered, I get that effect with Mailman, but the viable +alternatives are ezmlm, which is loonware and I'm avoiding on principle, +and majordomo, which seems to have stagnated. Oh, and there's apparently +something called SmartList which is a bitch to set up. + +Waider. +- -- +waider@waider.ie / Yes, it /is/ very personal of me +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org + +iQEVAwUBPXNE16HbXyzZsAb3AQH2KQf/XqeOMaHNXAlzbmgd5iYd9VQaAgWAR2DQ +kdpz0NbECR2OS7PJoLY9lsPKgNshpJcDZIRsxJvXmfp5YRNq0AyP0HGGwRvWgjgB +0N9HG/Rgez7S5RhU79RAuhpFb9XO1XzMI0gSkDHSGefQsUOAZ69vZVLLsiRiyHFy +4u+vrPVTP0rYR7haX41JXu42GVWfT2K2DDFftAimqGCsJnu2MXcMI/Ptq1rtxhXD +WZhxCR+FAwirEk8Yz9Drl8+gJL0YJQFSoWumQzqLKKutx1lJvv7OS4yDjGRaQpxm +Jmq8lifudZayccbixx7ZcXMSlpP4C45Wj5XJSYW8RCjU1bgxTqhMbQ== +=eG8X +-----END PGP SIGNATURE----- + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00095.24caf7db5c45203f312f742f49385618 b/Ch3/datasets/spam/easy_ham/00095.24caf7db5c45203f312f742f49385618 new file mode 100644 index 000000000..dad2ba7e5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00095.24caf7db5c45203f312f742f49385618 @@ -0,0 +1,63 @@ +From ilug-admin@linux.ie Mon Sep 2 13:15:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3F16E47C82 + for ; Mon, 2 Sep 2002 07:44:14 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:44:14 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82B2DZ29892 for + ; Mon, 2 Sep 2002 12:02:13 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id MAA32607; Mon, 2 Sep 2002 12:01:05 +0100 +Received: from claymore.diva.ie (diva.ie [195.218.115.17] (may be forged)) + by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id MAA32520 for + ; Mon, 2 Sep 2002 12:00:51 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host diva.ie [195.218.115.17] + (may be forged) claimed to be claymore.diva.ie +Received: from diva.ie (office.diva.ie [62.77.171.149]) by + claymore.diva.ie (8.9.3/8.9.3) with ESMTP id MAA13218 for ; + Mon, 2 Sep 2002 12:00:50 +0100 +Message-Id: <3D7344E1.8010309@diva.ie> +Date: Mon, 02 Sep 2002 12:00:49 +0100 +From: Vincent Cunniffe +Reply-To: vincent@cunniffe.net +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) + Gecko/20020826 +X-Accept-Language: en, en-us +MIME-Version: 1.0 +To: ilug@linux.ie +Subject: Re: [ILUG] Email list management howto +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Justin MacCarthy wrote: +> I think I'll ask this question again, as I sent on friday afternoon. :-) + +Mailman ;-) + +Trust me, you do *not* want to running your own mailing lists +on your own software. + +You'll wind up crying in a dark room looking for something +high-voltage to stick your fingers into. + +Regards, + +Vin + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00096.3517ca839b03cdf37c14ff9b3667dd98 b/Ch3/datasets/spam/easy_ham/00096.3517ca839b03cdf37c14ff9b3667dd98 new file mode 100644 index 000000000..f5b3bd247 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00096.3517ca839b03cdf37c14ff9b3667dd98 @@ -0,0 +1,94 @@ +From ilug-admin@linux.ie Mon Sep 2 13:13:46 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 68C3E47C83 + for ; Mon, 2 Sep 2002 07:44:33 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:44:33 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82B6sZ30020 for + ; Mon, 2 Sep 2002 12:06:54 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id MAA00495; Mon, 2 Sep 2002 12:05:10 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from saffron.via-net-works.ie (saffron.via-net-works.ie + [212.17.32.24]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id MAA00434 + for ; Mon, 2 Sep 2002 12:05:00 +0100 +Received: from box.dialups.via-net-works.ie ([212.17.32.233] + helo=PELICANCLUB.vianetworks.ie) by saffron.via-net-works.ie with esmtp + (Exim 3.20 #1) id 17lp0s-0000gr-00; Mon, 02 Sep 2002 12:04:58 +0100 +X-NCC-Regid: ie.medianet +Message-Id: <5.1.0.14.0.20020902120100.02a78308@212.17.32.225> +X-Sender: tbridge@212.17.32.225 +X-Mailer: QUALCOMM Windows Eudora Version 5.1 +Date: Mon, 02 Sep 2002 12:04:04 +0100 +To: Ray.Dermody@ITCARLOW.IE, ilug@linux.ie +From: Thomas Bridge +Subject: Re: [ILUG] Serial number in hosts file +In-Reply-To: <3D735065.23921.771154@localhost> +MIME-Version: 1.0 +Content-Type: text/plain +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Your actual serial number is 1519761310 - from a dig I've just done. + +Try resetting the zone number to 2002082901 - some of your secondaries seem +to have a serial number below that, so they clearly regard 1519761310 as +being less than 2002082601. + +That should enable them to pick up the new zonefile. + +T. + +At 11:49 02/09/2002 +0100, Ray Dermody wrote: +>Hi All, +>The serial number in our hosts files on our DNS server has gone +>corrupt e.g. 2002082999999999901 should be 20002082901. +>Its okay to set this back to todays date but I understand that our +>secondary and terninary DNS servers will only update from the master +>hosts file if the master host serial number is greater than the current +>serial number in the hosts file. +>Is there any way I can reset this on the secondary and terninary DNS +>servers? +> +>Ray Dermody +>Computing Services Technician +>I.T. Carlow +>0503 76271 +> +> +>-- +>Irish Linux Users' Group: ilug@linux.ie +>http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +>List maintainer: listmaster@linux.ie + +VIA NET.WORKS Ireland is a wholly owned Limited Irish Company. +Although connected to the VIA Global Network, VIA NET.WORKS Ireland +is separate from and is not owned by VIA NET.WORKS Inc. or any +member of the VIA NET.WORKS Inc. Group. +-----BEGIN PGP SIGNATURE----- +Version: PGPfreeware 7.0.3 for non-commercial use + +iQA/AwUBPXNFo76WYZbx1eG3EQLfNwCfakNapOkbg26j1jqQQEHgIWFd4s0AoP4J +GLBtgr1K8fzYlnnRNcfT3fSt +=Rurr +-----END PGP SIGNATURE----- + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00097.e8e276c07ee885c4b8d904c1414412e5 b/Ch3/datasets/spam/easy_ham/00097.e8e276c07ee885c4b8d904c1414412e5 new file mode 100644 index 000000000..a4838d174 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00097.e8e276c07ee885c4b8d904c1414412e5 @@ -0,0 +1,53 @@ +From ilug-admin@linux.ie Mon Sep 2 16:21:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3716C44155 + for ; Mon, 2 Sep 2002 11:21:33 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:21:33 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82Bp5Z31216 for + ; Mon, 2 Sep 2002 12:51:05 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id MAA02620; Mon, 2 Sep 2002 12:50:33 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from paat.pair.com (paat.pair.com [209.68.1.209]) by + lugh.tuatha.org (8.9.3/8.9.3) with SMTP id MAA02584 for ; + Mon, 2 Sep 2002 12:50:23 +0100 +Received: (qmail 49714 invoked by uid 3138); 2 Sep 2002 11:50:21 -0000 +Date: Mon, 2 Sep 2002 07:50:21 -0400 +From: Wesley Darlington +To: ilug@linux.ie +Message-Id: <20020902115021.GA49485@paat.pair.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.3.25i +Subject: [ILUG] Damian Conway in Belfast... +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Hi All, + +Damian Conway is in Belfast this week. He will be giving two talks: + +o Perl 6 - Tuesday, 3rd September, 7pm, Jury's, Belfast +o Quantum::Superpositions - Thursday, 5th September, 7pm, Jury's, Belfast + +He is also doing training courses... + http://www.kasei.com/training/damian/ + +Wesley. + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00098.90c05d1ad65ea3fa796bfa2808f71052 b/Ch3/datasets/spam/easy_ham/00098.90c05d1ad65ea3fa796bfa2808f71052 new file mode 100644 index 000000000..14b6310db --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00098.90c05d1ad65ea3fa796bfa2808f71052 @@ -0,0 +1,101 @@ +From ilug-admin@linux.ie Mon Sep 2 16:21:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 33EF544156 + for ; Mon, 2 Sep 2002 11:21:34 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:21:34 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82C8TZ31762 for + ; Mon, 2 Sep 2002 13:08:29 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id NAA03451; Mon, 2 Sep 2002 13:08:06 +0100 +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id NAA03417 for ; + Mon, 2 Sep 2002 13:07:54 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host mail.webnote.net + [193.120.211.219] claimed to be webnote.net +Received: (from lbedford@localhost) by webnote.net (8.9.3/8.9.3) id + NAA27423 for ilug@linux.ie; Mon, 2 Sep 2002 13:07:54 +0100 +Date: Mon, 2 Sep 2002 13:07:54 +0100 +From: Liam Bedford +To: ilug@linux.ie +Message-Id: <20020902120754.GC27311@mail.webnote.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.4i +Subject: [ILUG] Marketing SIG has a good start :) +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + + |::::::::::::::::::::::::::::::::::::::::::::::::::| + + IT's Monday 520 02 September 2002 + + |::::::::::::::::::::::::::::::::::::::::| + + + +STUDENT LIFE BEGINS WITH LINUX +by +John Sterne + +The launch last month of a marketing special interest group by the +Irish Linux Users Group (ILUG) - open source and marketing, it +seems, might not be mutually exclusive concepts - has already +sparked an interesting initiative at University College Cork. When +the new academic year begins at UCC, every incoming student will +be offered a copy of Red Hat Linux 7.3. + +ILUG member Braun Brelin proposed this promotion, when he ran a +training class for staff at the UCC computer science department. +Brelin, who is the director of technology at OpenApp, says that the +Linux offer could be extended to any or all of the other Irish +universities. + +The user group is tapping into an international Red Hat programme +that aims to introduce students at all levels to the open source +style of computing. The Linux distributor runs an 'educational +channel' to reach this audience, bundling educational software +with its operating environment and offering networked support +services to eligible applicants. This scheme was originally designed +to suit the educational structures in the US, but is now available to +schools and universities throughout the world. + +Red Hat Linux 7.3 incorporates ease of use and maintenance +features and is intended to counter objections that Linux is hard to +master on personal systems. + +The Linux-for-all project at UCC could also raise the profile of Red +Hat Ireland. Based in Cork, this operation has run shared financial +services for other Red Hat offices in Europe since 2000. Until now +its involvement with users in Ireland has been fairly limited, +although it does sometimes refer them to other Red Hat offices in +Europe that offer consulting or technical support services. + +David Owens, Red Hat's director of global logistics and production, +sees the formation of the ILUG marketing group as a reason to take +a more proactive approach. In the last three months, he notes, his +office in Cork has received more and more calls from Irish +companies that are interested in adopting Linux and has introduced +some to Red Hat pre-sales consultants. + + +------------- +Many thanks are due to Braun and David for working together on this one. + +Regards +L. + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00099.beef92f5eeeed3e40c1facf42809d510 b/Ch3/datasets/spam/easy_ham/00099.beef92f5eeeed3e40c1facf42809d510 new file mode 100644 index 000000000..0e275117a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00099.beef92f5eeeed3e40c1facf42809d510 @@ -0,0 +1,77 @@ +From ilug-admin@linux.ie Mon Sep 2 16:22:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 169CD4415E + for ; Mon, 2 Sep 2002 11:21:41 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:21:41 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82ElmZ05358 for + ; Mon, 2 Sep 2002 15:47:48 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id PAA10436; Mon, 2 Sep 2002 15:47:13 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from bramg1.net.external.hp.com (bramg1.net.external.hp.com + [192.6.126.73]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id PAA10395 + for ; Mon, 2 Sep 2002 15:47:01 +0100 +Received: from fowey.BR.ITC.HP.COM (fowey.br.itc.hp.com [15.145.8.186]) by + bramg1.net.external.hp.com (Postfix) with SMTP id 12CC9216 for + ; Mon, 2 Sep 2002 16:47:01 +0200 (METDST) +Received: from 15.145.8.186 by fowey.BR.ITC.HP.COM (InterScan E-Mail + VirusWall NT); Mon, 02 Sep 2002 15:47:00 +0100 +Received: by fowey.br.itc.hp.com with Internet Mail Service (5.5.2655.55) + id ; Mon, 2 Sep 2002 15:47:00 +0100 +Message-Id: <253B1BDA4E68D411AC3700D0B77FC5F807C0F446@patsydan.dublin.hp.com> +From: "HAMILTON,DAVID (HP-Ireland,ex2)" +To: "'ilug@linux.ie'" +Subject: RE: [ILUG] Redhat 8.0 +Date: Mon, 2 Sep 2002 15:46:58 +0100 +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2655.55) +Content-Type: text/plain +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +I just saw the ISOs on an internal server here and was tempted.... + + D. + +-----Original Message----- +From: John P. Looney [mailto:valen@tuatha.org] +Sent: Monday, September 02, 2002 3:45 PM +To: HAMILTON,DAVID (HP-Ireland,ex2) +Cc: 'ilug@linux.ie' +Subject: Re: [ILUG] Redhat 8.0 + + +On Mon, Sep 02, 2002 at 03:22:54PM +0100, HAMILTON,DAVID (HP-Ireland,ex2) +mentioned: +> Does anyone know when Redhat 8.0 is going to be released? +> I have seen some ISO images of it around and I am trying to work out +> if it's near release. + + Null, the third beta was out last week. + + It'll be an interesting release. Gnome 2.0, and GCC 3.2 - both very new, +large projects. + + I'd not be putting it on any production machines for a while... + + Though many say "RedHat X.0 releases are rubbish" - it's worth baring in +mind that they jump a release when the underlying archtechture changes, not +just the installer, so they are .0 for a reason. + +Kate + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00100.f070e3aaa7f475f95589b1900ff58d26 b/Ch3/datasets/spam/easy_ham/00100.f070e3aaa7f475f95589b1900ff58d26 new file mode 100644 index 000000000..6522bfeed --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00100.f070e3aaa7f475f95589b1900ff58d26 @@ -0,0 +1,63 @@ +From ilug-admin@linux.ie Mon Sep 2 16:22:06 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0CE2E4415F + for ; Mon, 2 Sep 2002 11:21:42 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:21:42 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82ExkZ05649 for + ; Mon, 2 Sep 2002 15:59:46 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id PAA11015; Mon, 2 Sep 2002 15:59:18 +0100 +Received: from ie.suberic.net (owsla.ie.suberic.net [62.17.162.83]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id PAA10975 for ; + Mon, 2 Sep 2002 15:58:55 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host owsla.ie.suberic.net + [62.17.162.83] claimed to be ie.suberic.net +Received: from owsla.ie.suberic.net (owsla [127.0.0.1]) by ie.suberic.net + (8.11.6/8.11.6) with ESMTP id g82EwrY22553 for ; + Mon, 2 Sep 2002 15:58:53 +0100 +Date: Mon, 2 Sep 2002 15:58:51 +0100 +To: irish linux users group +Message-Id: <20020902155851.A22343@ie.suberic.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +X-Operating-System: Linux 2.4.18-5 i686 +X-GPG-Fingerprint: 9C1D 16F4 11F1 6BD2 933C 048D ACC7 9840 89D0 7646 +From: kevin lyda +Mail-Followup-To: kevin+dated+1031410733.71e31f@ie.suberic.net, + ilug@linux.ie +X-Delivery-Agent: TMDA/0.57 +Subject: [ILUG] freeserve in the uk? +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +ok, so if i was in the uk for a wekk, how might i configure my laptop to +dial in to a freebie isp? redhat's internet connection wizard actually +has settings for uk isp's, but freeserve is the only one i recognize +and it doen't seem to work. + +has anyone here done this? + +kevin + +-- +kevin@suberic.net that a believer is happier than a skeptic is no more to +fork()'ed on 37058400 the point than the fact that a drunken man is happier +meatspace place: home than a sober one. the happiness of credulity is a +http://ie.suberic.net/~kevin cheap & dangerous quality -- g.b. shaw + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00101.216942b87258b063ec2d7b7981ee2454 b/Ch3/datasets/spam/easy_ham/00101.216942b87258b063ec2d7b7981ee2454 new file mode 100644 index 000000000..076c6d082 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00101.216942b87258b063ec2d7b7981ee2454 @@ -0,0 +1,69 @@ +From craig@deersoft.com Mon Sep 2 23:00:06 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 9B7CA16F2D + for ; Mon, 2 Sep 2002 23:00:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 23:00:05 +0100 (IST) +Received: from maynard.mail.mindspring.net (maynard.mail.mindspring.net + [207.69.200.243]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g82HPmZ11569 for ; Mon, 2 Sep 2002 18:25:48 +0100 +Received: from user-1120fqe.dsl.mindspring.com ([66.32.63.78] + helo=belphegore.hughes-family.org) by maynard.mail.mindspring.net with + esmtp (Exim 3.33 #1) id 17luxa-0003hi-00; Mon, 02 Sep 2002 13:25:58 -0400 +Received: from balam.hughes-family.org (balam.hughes-family.org + [10.0.240.3]) by belphegore.hughes-family.org (Postfix) with ESMTP id + 764503E7FC; Mon, 2 Sep 2002 10:25:57 -0700 (PDT) +Date: Mon, 2 Sep 2002 10:25:57 -0700 +Subject: Re: bad DCC traffic from e-corp.net +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Cc: Justin Mason +To: dcc@calcite.rhyolite.com +From: "Craig R.Hughes" +In-Reply-To: <200209021702.g82H271q025288@calcite.rhyolite.com> +Message-Id: <0B1C586E-BE99-11D6-B0C6-00039396ECF2@deersoft.com> +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.482) + +Vernon, + +I'm changing the instructions in the SpamAssassin INSTALL file +right now to: + +tar xfvz dcc-dccproc.tar.Z +cd dcc-dccproc-X.X.X +./configure && make && make install +cdcc 'info' + + +Let me know ASAP if that's innapropriate, since we're shipping +2.40 today! + +C + +On Monday, September 2, 2002, at 10:02 AM, Vernon Schryver wrote: + +>> Here are the instructions in the spamassassin README: +>> +>> # tar xfvz dcc-dccproc.tar.Z +>> # cd dcc-dccproc-X.X.X +>> # ./configure && make && make install +>> # cdcc 'new map' +>> # cdcc 'add dcc.rhyolite.com' +>> # cdcc 'info' +> +> That's ok, except that the 'new map' and "add dcc.rhyolite.com' +> are respectively unnecessary and wrong. The map file that comes +> with the source points to localhost and dcc.dcc-servers.net. Those +> two shipped entries usually do the right thing if there is a local +> server. If there is no local server or if the local server fails, +> requests are instantly sent to one of the public server names listed +> in the main DCC web page at +> http://www.rhyolite.com/anti-spam/dcc/ and http://www.dcc- +> servers.net/dcc/ +> dcc.rhyolite.com has not been listed for months. + + diff --git a/Ch3/datasets/spam/easy_ham/00102.b18fa07ca9504cfc39be46ba8376ee7d b/Ch3/datasets/spam/easy_ham/00102.b18fa07ca9504cfc39be46ba8376ee7d new file mode 100644 index 000000000..7d23b53e7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00102.b18fa07ca9504cfc39be46ba8376ee7d @@ -0,0 +1,69 @@ +From ilug-admin@linux.ie Mon Sep 2 23:01:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 7BDA516F2D + for ; Mon, 2 Sep 2002 23:00:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 23:00:59 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82JHuZ18125 for + ; Mon, 2 Sep 2002 20:17:56 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id UAA22095; Mon, 2 Sep 2002 20:17:30 +0100 +Received: from marklar.elive.net (smtp.elive.ie [212.120.138.41]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id UAA22069 for ; + Mon, 2 Sep 2002 20:17:21 +0100 +Received: from gonzo.waider.ie + (IDENT:R0H7YSHx3yGdRgPLRgXIWteEQXqKrfLs@1Cust11.tnt3.dub2.ie.uudial.net + [213.116.44.11]) by marklar.elive.net (8.11.6/8.11.6) with ESMTP id + g82ImBw19655; Mon, 2 Sep 2002 19:48:11 +0100 +Received: from klortho.waider.ie + (IDENT:jNbZZ8gDC4k25bWNWT8gu3fsiSlb9Vjt@klortho.waider.ie [10.0.0.100]) by + gonzo.waider.ie (8.11.6/8.11.6) with ESMTP id g82JHD721425; Mon, + 2 Sep 2002 20:17:13 +0100 +Received: (from waider@localhost) by klortho.waider.ie (8.11.6/8.11.6) id + g82JH2P26664; Mon, 2 Sep 2002 20:17:02 +0100 +X-Authentication-Warning: klortho.waider.ie: waider set sender to + waider@waider.ie using -f +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Message-Id: <15731.47405.983253.662388@klortho.waider.ie> +Date: Mon, 2 Sep 2002 20:17:01 +0100 +From: Ronan Waide +To: "Kiall Mac Innes" +Cc: +Subject: RE: [ILUG] VPN implementation +In-Reply-To: +References: <20020902100017.GB2041@bagend.makalumedia.com> + +X-Mailer: VM 7.07 under Emacs 21.2.1 +Organization: poor at best. +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +On September 2, kialllists@redpie.com said: +> OS-X is linux +> + +Er, no it's not. It's kinda BSD-related, but it's definitely not +Linux. + +Waider. +-- +waider@waider.ie / Yes, it /is/ very personal of me. + +"Since I am project leader, I must not be permitted to go insane." + - Theo de Radt + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00103.23abe7cbe651a970e2dc6cc531c268a3 b/Ch3/datasets/spam/easy_ham/00103.23abe7cbe651a970e2dc6cc531c268a3 new file mode 100644 index 000000000..d71f4c11d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00103.23abe7cbe651a970e2dc6cc531c268a3 @@ -0,0 +1,88 @@ +From ilug-admin@linux.ie Mon Oct 7 12:06:28 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id B662216F6B + for ; Mon, 7 Oct 2002 12:04:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 12:04:48 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g978PQK24187 for + ; Mon, 7 Oct 2002 09:25:26 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id EF86F341D0; Mon, 7 Oct 2002 09:26:09 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from smtpstore.strencom.net (ns1.strencom.net [217.75.0.66]) by + lugh.tuatha.org (Postfix) with ESMTP id 4C80C340D5 for ; + Mon, 7 Oct 2002 09:25:04 +0100 (IST) +Received: from enterprise.wasptech.com (mail.wasptech.com [217.75.2.106]) + by smtpstore.strencom.net (Postfix) with ESMTP id C8011CEF2D for + ; Mon, 7 Oct 2002 08:35:44 +0000 (AZOST) +Content-Class: urn:content-classes:message +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Subject: RE: [ILUG] Drop in replacement for Ingres Database? +X-Mimeole: Produced By Microsoft Exchange V6.0.5762.3 +Message-Id: <45130FBE2F203649A4BABDB848A9C9D0032D4D@enterprise.wasptech.com> +X-MS-Has-Attach: +X-MS-Tnef-Correlator: +Thread-Topic: [ILUG] Drop in replacement for Ingres Database? +Thread-Index: AcJr4AXtAf+q9LoESn2UoGgwDFTbZQB+OAjQ +From: "Fergal Moran" +To: "ILUG" +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 09:18:21 +0100 +Date: Mon, 7 Oct 2002 09:18:21 +0100 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g978PQK24187 + +> From: Paul Linehan [mailto:plinehan@yahoo.com] +> +> There are two open alternatives that I can think of +> that don't appear to have been mentioned +> elsewhere in this thread. +> +> +> One is Firebird (this is my personal favourite). +> It is http://FirebirdSQL.org and you can +> purchase support contracts here +> www.ibphoenix.com. + +Indeedy - I had never even heard of firebird until we started a new job +last week with a client who uses it. So we popped it onto a box +downstairs and wow - it is fast. Comes with some lovely client tools +also. Supports all the db goodies, transactions, stored procedures, +triggers. + +> It's really amazing to think how much they've got +> out of a db that is only 4 MB in size - that's 10 +> times smaller than the Oracle *_client_*. +> +> +> Having said all of the above, Oracle is really +> a super product, but ya pays ya money... +> +IBM's db2 is another cheaper alternative to Oracle. Free single +developer license downloadable from their website. + +Fergal. +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00104.1a66c829aa9b0883591a2e8266c18bb2 b/Ch3/datasets/spam/easy_ham/00104.1a66c829aa9b0883591a2e8266c18bb2 new file mode 100644 index 000000000..ef1d04984 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00104.1a66c829aa9b0883591a2e8266c18bb2 @@ -0,0 +1,75 @@ +From ilug-admin@linux.ie Mon Oct 7 12:06:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 60E9616F6C + for ; Mon, 7 Oct 2002 12:04:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 12:04:50 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g978QRK24206 for + ; Mon, 7 Oct 2002 09:26:27 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id BE70F34204; Mon, 7 Oct 2002 09:27:11 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from dspsrv.com (vir.dspsrv.com [193.120.211.34]) by + lugh.tuatha.org (Postfix) with ESMTP id 8072F341F2 for ; + Mon, 7 Oct 2002 09:26:11 +0100 (IST) +Received: from [195.17.199.3] (helo=waider.ie) by dspsrv.com with asmtp + (Exim 3.36 #1) id 17yTDP-0001gv-00 for ilug@linux.ie; Mon, 07 Oct 2002 + 09:26:11 +0100 +Message-Id: <3DA144C8.2060707@waider.ie> +From: Waider +MIME-Version: 1.0 +To: Irish Linux Users Group +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Subject: [ILUG] serial port transient failure +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 07 Oct 2002 10:24:40 +0200 +Date: Mon, 07 Oct 2002 10:24:40 +0200 + +Here's a weird and wacky problem: + +I'm currently out of the country with my trusty Evo N600c laptop. When I +tried to use the serial port to talk to my mobile phone, Linux behaved +pretty much as if the port was fried. Bizarre, I thought, because I'd +used it successfully while in the office. The only difference was that I +was trying the thing in the hotel. I entertained brief notions of having +somehow fried the serial drivers, then rebooted the laptop to Windows +and tried again. Worked perfectly. Back to Linux. Still not talking. +Considered that it might be flaky power, so I ran the laptop on battery. +Nope. Tried moving the laptop to a differnet part of the room where +there might be less bogon flux. Still not working. Eventually I gave up +and used the IrDA port instead - which is usually the serial connection +of doom, grief, and teeth-grinding. + +This morning, in the office, the damn thing is working without a hitch. + +Anyone like to suggest what mystery technology is in use in the hotel +that prevents serial ports from working under Linux? + +Cheers, +Waider. +-- +waider@waider.ie / Yes, it /is/ very personal of me + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00105.00d508c7c037170e597798385b380a80 b/Ch3/datasets/spam/easy_ham/00105.00d508c7c037170e597798385b380a80 new file mode 100644 index 000000000..73a7321cd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00105.00d508c7c037170e597798385b380a80 @@ -0,0 +1,88 @@ +From ilug-admin@linux.ie Mon Oct 7 12:06:33 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 1C95616F93 + for ; Mon, 7 Oct 2002 12:04:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 12:04:52 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g978UXK24245 for + ; Mon, 7 Oct 2002 09:30:33 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 2F953341DD; Mon, 7 Oct 2002 09:31:17 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from homer.jinny.ie (homer.jinny.ie [193.120.171.3]) by + lugh.tuatha.org (Postfix) with ESMTP id 4E661340D5 for ; + Mon, 7 Oct 2002 09:30:02 +0100 (IST) +Received: from barney (fw.jinny.ie [193.120.171.2]) by homer.jinny.ie + (Postfix) with ESMTP id 9F1157FC45 for ; Mon, + 7 Oct 2002 09:30:00 +0100 (IST) +Received: from john by barney with local (Exim 3.35 #1 (Debian)) id + 17yTH7-0005Mi-00 for ; Mon, 07 Oct 2002 09:30:01 +0100 +From: "John P. Looney" +To: ilug@linux.ie +Subject: Re: [ILUG] rpm dependencies +Message-Id: <20021007083001.GJ16947@jinny.ie> +Reply-To: ilug@linux.ie +Mail-Followup-To: ilug@linux.ie +References: <3D9F1C06.1010204@linux.ie> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <3D9F1C06.1010204@linux.ie> +User-Agent: Mutt/1.3.28i +X-Os: /Linux 2.4.18 +X-Url: http://www.redbrick.dcu.ie/~valen +X-Gnupg-Publickey: http://www.redbrick.dcu.ie/~valen/public.asc +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 09:30:01 +0100 +Date: Mon, 7 Oct 2002 09:30:01 +0100 + +On Sat, Oct 05, 2002 at 06:06:14PM +0100, Padraig Brady mentioned: +> OK I'm upgrading vorbis on my machine and I'm getting +> the following: +> +> # rpm -U libvorbis-* vorbis-tools-1.0-1.i386.rpm +> error: failed dependencies: +> libvorbisfile.so.0 is needed by SDL_mixer-1.2.0-4 +> libvorbisfile.so.0 is needed by xmms-1.2.5-7 +> libvorbisfile.so.0 is needed by tuxracer-0.61-5 +> +> This is because the new libvorbis.rpm only has libvorbisfile.so.3 +> So is this a problem in the other packages depending on +> a specific version (libvorbisfile.so.0) rather than on the +> generic libvorbis.so ? + + This is a pain. + + The only way you can resolve this, to my knowledge is to download the +original libvorbis rpm and the new one. Remove the old one, then do: + + rpm -Uvh libvorbis-* + + RPM then assumes that you want both versions installed at the same time, +and does so. Why you can't do this after you have one library already +installed is beyond me. + +Kate + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00106.d8f1a8de1b70767b3dbf5ce810da67fd b/Ch3/datasets/spam/easy_ham/00106.d8f1a8de1b70767b3dbf5ce810da67fd new file mode 100644 index 000000000..dd3e25596 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00106.d8f1a8de1b70767b3dbf5ce810da67fd @@ -0,0 +1,69 @@ +From ilug-admin@linux.ie Mon Oct 7 12:06:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 9B84316F94 + for ; Mon, 7 Oct 2002 12:04:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 12:04:53 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g978ZQK24442 for + ; Mon, 7 Oct 2002 09:35:26 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id A267534215; Mon, 7 Oct 2002 09:36:10 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from dspsrv.com (vir.dspsrv.com [193.120.211.34]) by + lugh.tuatha.org (Postfix) with ESMTP id 0C393340D5 for ; + Mon, 7 Oct 2002 09:35:50 +0100 (IST) +Received: from [195.17.199.3] (helo=waider.ie) by dspsrv.com with asmtp + (Exim 3.36 #1) id 17yTMj-0001jk-00 for ilug@linux.ie; Mon, 07 Oct 2002 + 09:35:49 +0100 +Message-Id: <3DA1470E.2070709@waider.ie> +From: Waider +MIME-Version: 1.0 +To: ilug@linux.ie +Subject: Re: [ILUG] rpm dependencies +References: <3D9F1C06.1010204@linux.ie> <20021007083001.GJ16947@jinny.ie> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 07 Oct 2002 10:34:22 +0200 +Date: Mon, 07 Oct 2002 10:34:22 +0200 + +John P. Looney wrote: +> The only way you can resolve this, to my knowledge is to download the +> original libvorbis rpm and the new one. Remove the old one, then do: +> +> rpm -Uvh libvorbis-* +> +> RPM then assumes that you want both versions installed at the same time, +> and does so. Why you can't do this after you have one library already +> installed is beyond me. + +Does using the --oldpackage flag help your pain, or is your pain caused +by "Obsoletes" flags? + +Cheers, +Waider. +-- +waider@waider.ie / Yes, it /is/ very personal of me + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00107.787086c3c593b9e2335199019b130158 b/Ch3/datasets/spam/easy_ham/00107.787086c3c593b9e2335199019b130158 new file mode 100644 index 000000000..d8203eec1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00107.787086c3c593b9e2335199019b130158 @@ -0,0 +1,95 @@ +From ilug-admin@linux.ie Mon Oct 7 12:06:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 328EA16F95 + for ; Mon, 7 Oct 2002 12:04:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 12:04:55 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g978gRK24558 for + ; Mon, 7 Oct 2002 09:42:27 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 7CC5534215; Mon, 7 Oct 2002 09:43:10 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from nologic.org (unknown [217.114.163.124]) by lugh.tuatha.org + (Postfix) with SMTP id 8E822340D5 for ; Mon, 7 Oct 2002 + 09:42:29 +0100 (IST) +Received: (qmail 29172 invoked from network); 7 Oct 2002 08:43:11 -0000 +Received: from localhost (HELO nologic.org) (127.0.0.1) by 0 with SMTP; + 7 Oct 2002 08:43:11 -0000 +Received: from cacher2-ext.wise.edt.ericsson.se ([194.237.142.13]) + (proxying for 159.107.166.28) (SquirrelMail authenticated user + cj@nologic.org) by mail.nologic.org with HTTP; Mon, 7 Oct 2002 09:43:11 + +0100 (BST) +Message-Id: <35767.194.237.142.13.1033980191.squirrel@mail.nologic.org> +Subject: Re: [ILUG] Interesting article on free software licences +From: "Ciaran Johnston" +To: +In-Reply-To: <20021007101909.A16074@wanadoo.fr> +References: <20021007101909.A16074@wanadoo.fr> +X-Priority: 3 +Importance: Normal +X-Msmail-Priority: Normal +X-Mailer: SquirrelMail (version 1.2.5) +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-15 +Content-Transfer-Encoding: 8bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 09:43:11 +0100 (BST) +Date: Mon, 7 Oct 2002 09:43:11 +0100 (BST) + +David Neary said: +> +> For the francophones among you, this article is a summary of the +> reasons why most free software licences (and the GPL in +> particular) are not valid in France. +> +> http://www.linuxfrench.net/article.php3?id_article=1043 +> +> Google translation (hard to read most of the time, but good +> enough to pick up the gist) +> +> http://makeashorterlink.com/?U26B52602 +> +> In brief, in an international contract, when mentioning copyright, you +> must mention under which jurisdiction's laws the copyright +> is applied. French law requires the licence to be available in +> French (the GPL isn't). And French law requires that for a +> contract to be valid, it must not breach existing law. Also under +> French law, the copyright holder automatically retains the right +> to change the licence, which means that French law is in conflict +> with the GPL, which requires authorisation from all authors +> before a licence change is allowed. +> +> Also there's some stuff about French consumer law forbidding sale +> without guarantee of anything, so software delivered as-is +> breaches consumer law in France. But I didn't really follow that. + +My French is a bit iffy these days, but if this is true, does it not also +nullify Microsoft, Adobe and WinZip licences amongst most others? These all +claim no liability, no guarantees (M$ say delivered "with all faults", so +at least they are honest). + +/Ciaran. + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00108.9ab147c83812fc34f69032c40df5a21f b/Ch3/datasets/spam/easy_ham/00108.9ab147c83812fc34f69032c40df5a21f new file mode 100644 index 000000000..f4348d5f8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00108.9ab147c83812fc34f69032c40df5a21f @@ -0,0 +1,73 @@ +From ilug-admin@linux.ie Mon Oct 7 12:06:37 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id C778E16F96 + for ; Mon, 7 Oct 2002 12:04:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 12:04:56 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g979ATK25388 for + ; Mon, 7 Oct 2002 10:10:29 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 6EA99341EE; Mon, 7 Oct 2002 10:11:13 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from mandark.labs.netnoteinc.com (p684.as3.adl.dublin.eircom.net + [159.134.230.172]) by lugh.tuatha.org (Postfix) with ESMTP id 0289E341DD + for ; Mon, 7 Oct 2002 10:10:00 +0100 (IST) +Received: from localhost.localdomain (gandalf.labs.netnoteinc.com + [192.168.2.13]) by mandark.labs.netnoteinc.com (8.11.6/8.11.6) with ESMTP + id g979A0c00912 for ; Mon, 7 Oct 2002 10:10:00 +0100 +From: Glen Gray +To: ilug@linux.ie +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 +Message-Id: <1033981800.541.6.camel@gandalf> +MIME-Version: 1.0 +Subject: [ILUG] Retrieving read mail from webmail.eircom.net via POP ? +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 07 Oct 2002 10:10:00 +0100 +Date: 07 Oct 2002 10:10:00 +0100 + +Is there a way to get my read email downloaded off webmail.eircom.net. + +I've been reading the emails using the web based interface. But I've +reached my quota limit. There doesn't seem to be any way to get the +emails off the server. I can connect to the account using POP, but that +only retrieves unread emails. There's also no way to mark emails as +unread from the html interface. + +Is there a way I can use fetchmail perhaps to get it to pull down all +the emails and remove them off the server. + +It's been years since I've used fetchmail, I don't recall be able to do +this. + +Any other suggestions welcome. There's a few hundred email so I don't +fancy going through each one forwarding it to another account. + +Glen + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00109.bcb73e4561798e05f2299471ab0be1bb b/Ch3/datasets/spam/easy_ham/00109.bcb73e4561798e05f2299471ab0be1bb new file mode 100644 index 000000000..9093e5115 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00109.bcb73e4561798e05f2299471ab0be1bb @@ -0,0 +1,111 @@ +From ilug-admin@linux.ie Mon Oct 7 12:06:41 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 3C5A216F03 + for ; Mon, 7 Oct 2002 12:05:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 12:05:00 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g979RUK25824 for + ; Mon, 7 Oct 2002 10:27:30 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id AAD38341DD; Mon, 7 Oct 2002 10:28:10 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from mandark.labs.netnoteinc.com (p684.as3.adl.dublin.eircom.net + [159.134.230.172]) by lugh.tuatha.org (Postfix) with ESMTP id 6461C3410E + for ; Mon, 7 Oct 2002 10:27:04 +0100 (IST) +Received: from localhost.localdomain (gandalf.labs.netnoteinc.com + [192.168.2.13]) by mandark.labs.netnoteinc.com (8.11.6/8.11.6) with ESMTP + id g979R3c00933; Mon, 7 Oct 2002 10:27:03 +0100 +Subject: Re: [ILUG] Retrieving read mail from webmail.eircom.net via POP ? +From: Glen Gray +To: Stephane Dudzinski +Cc: ilug@linux.ie +In-Reply-To: <1033982239.9193.24.camel@triskel> +References: <1033981800.541.6.camel@gandalf> + <1033982239.9193.24.camel@triskel> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 +Message-Id: <1033982823.539.8.camel@gandalf> +MIME-Version: 1.0 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 07 Oct 2002 10:27:03 +0100 +Date: 07 Oct 2002 10:27:03 +0100 + +Seems fetchmail has a -a switch to get it all. + +Just need to install fetchmail now :) + +Glen + +On Mon, 2002-10-07 at 10:17, Stephane Dudzinski wrote: +> Funny enough, that also happened to a Friend of mine who uses both the +> web interface and a pop client. Last time i tried to send a picture +> which was around 100k, it got denied saying that quota was exceeded. +> When he looked at his account on the web, it mentionned 5 MB free, so i +> have no idea what they're playing at ... +> +> Doesn't really help but just wanted to confirm the problem. +> +> Steph +> +> On Mon, 2002-10-07 at 10:10, Glen Gray wrote: +> > Is there a way to get my read email downloaded off webmail.eircom.net. +> > +> > I've been reading the emails using the web based interface. But I've +> > reached my quota limit. There doesn't seem to be any way to get the +> > emails off the server. I can connect to the account using POP, but that +> > only retrieves unread emails. There's also no way to mark emails as +> > unread from the html interface. +> > +> > Is there a way I can use fetchmail perhaps to get it to pull down all +> > the emails and remove them off the server. +> > +> > It's been years since I've used fetchmail, I don't recall be able to do +> > this. +> > +> > Any other suggestions welcome. There's a few hundred email so I don't +> > fancy going through each one forwarding it to another account. +> > +> > Glen +> > +> > +> > +> > +> > -- +> > Irish Linux Users' Group: ilug@linux.ie +> > http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +> > List maintainer: listmaster@linux.ie +> -- +> ______________________________________________ +> Stephane Dudzinski Systems Administrator +> NewWorldIQ t: +353 1 4334357 +> www.newworldiq.com f: +353 1 4334301 +> +> -- +> Irish Linux Users' Group: ilug@linux.ie +> http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +> List maintainer: listmaster@linux.ie + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00110.1e36beebd2dffe60b0d8f68d82bde52c b/Ch3/datasets/spam/easy_ham/00110.1e36beebd2dffe60b0d8f68d82bde52c new file mode 100644 index 000000000..ed1e5889e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00110.1e36beebd2dffe60b0d8f68d82bde52c @@ -0,0 +1,70 @@ +From ilug-admin@linux.ie Mon Oct 7 12:07:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 831DC16F69 + for ; Mon, 7 Oct 2002 12:05:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 12:05:03 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g979bUK26095 for + ; Mon, 7 Oct 2002 10:37:30 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 449BC341EE; Mon, 7 Oct 2002 10:38:14 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from utopia.ucd.ie (utopia.ucd.ie [137.43.13.22]) by + lugh.tuatha.org (Postfix) with SMTP id 99EDA341DD for ; + Mon, 7 Oct 2002 10:37:58 +0100 (IST) +Received: (qmail 27553 invoked by uid 60001); 7 Oct 2002 09:35:39 -0000 +Received: from 137.43.13.22 (proxying for 137.43.213.15) (SquirrelMail + authenticated user joefitz) by squirrelmail.netsoc.ucd.ie with HTTP; + Mon, 7 Oct 2002 10:35:39 +0100 (IST) +Message-Id: <53964.137.43.13.22.1033983339.squirrel@squirrelmail.netsoc.ucd.ie> +Subject: Re: [ILUG] adsl router modem combo +From: +To: +In-Reply-To: <00bc01c26d85$20bb29d0$578691c2@1wzffgdp93mz5jv> +References: <00bc01c26d85$20bb29d0$578691c2@1wzffgdp93mz5jv> +X-Priority: 3 +Importance: Normal +Cc: +X-Mailer: SquirrelMail (version 1.2.8) +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 10:35:39 +0100 (IST) +Date: Mon, 7 Oct 2002 10:35:39 +0100 (IST) + +It seems to only support PPPoA and not PPPoE. You need one that supports +PPPoE, if you want torun it in routed IP mode. If you are using it as a +bridge, it'll probably work, but you'd be left leaving the computer on, +which would defeat the purpose of getting a router. + +The best router I've come accross is the Zyxel 643. Eircom supply this, +but if you have alook online you can probably find it cheaper to buy +online from America or the UK. + +Hope this is useful, +Joe + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00111.a478af0547f2fd548f7b412df2e71a92 b/Ch3/datasets/spam/easy_ham/00111.a478af0547f2fd548f7b412df2e71a92 new file mode 100644 index 000000000..57542b3ef --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00111.a478af0547f2fd548f7b412df2e71a92 @@ -0,0 +1,79 @@ +From ilug-admin@linux.ie Mon Oct 7 12:07:10 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 01B9816F1C + for ; Mon, 7 Oct 2002 12:05:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 12:05:02 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g979YRK26044 for + ; Mon, 7 Oct 2002 10:34:27 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id B5BE9341EE; Mon, 7 Oct 2002 10:35:10 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from lotse.makalumedia.com (moca.makalumedia.com + [213.157.15.53]) by lugh.tuatha.org (Postfix) with ESMTP id 27FA5341DD for + ; Mon, 7 Oct 2002 10:34:39 +0100 (IST) +Received: from bilbo.makalumedia.loc ([192.168.1.103] verified) by + lotse.makalumedia.com (CommuniGate Pro SMTP 3.5.7) with ESMTP id 842487 + for ilug@linux.ie; Mon, 07 Oct 2002 11:34:38 +0200 +Received: by bilbo.makalumedia.loc (Postfix, from userid 501) id + 43DE85B323; Mon, 7 Oct 2002 10:37:26 +0100 (IST) +From: Niall O Broin +To: ilug@linux.ie +Subject: Re: [ILUG] Interesting article on free software licences +Message-Id: <20021007093726.GB1893@bilbo.makalumedia.com> +Reply-To: ilug@linux.ie +Mail-Followup-To: Niall O Broin , ilug@linux.ie +References: <20021007101909.A16074@wanadoo.fr> + <35767.194.237.142.13.1033980191.squirrel@mail.nologic.org> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <35767.194.237.142.13.1033980191.squirrel@mail.nologic.org> +User-Agent: Mutt/1.3.27i +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 10:37:26 +0100 +Date: Mon, 7 Oct 2002 10:37:26 +0100 + +On Mon, Oct 07, 2002 at 09:43:11AM +0100, Ciaran Johnston wrote: + +> > Also there's some stuff about French consumer law forbidding sale +> > without guarantee of anything, so software delivered as-is +> > breaches consumer law in France. But I didn't really follow that. +> +> My French is a bit iffy these days, but if this is true, does it not also +> nullify Microsoft, Adobe and WinZip licences amongst most others? These all +> claim no liability, no guarantees (M$ say delivered "with all faults", so +> at least they are honest). + +Apparently the angle on this (i.e. selling without guarantee) is that +software is not a product which is sold but a service which is licensed - at +least that's what I remember reading about how M$ gets away with providing +no guarantee in the U.S. If you're feeling rather deep pocketed, you could +always try suing M$ to get a court's view on the matter. + + + + +Niall +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00112.55ec2d4a4203ff075f5570bdac744550 b/Ch3/datasets/spam/easy_ham/00112.55ec2d4a4203ff075f5570bdac744550 new file mode 100644 index 000000000..ee3880158 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00112.55ec2d4a4203ff075f5570bdac744550 @@ -0,0 +1,96 @@ +From ilug-admin@linux.ie Mon Oct 7 12:07:13 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id DB02D16F16 + for ; Mon, 7 Oct 2002 12:05:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 12:05:04 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g979gSK26166 for + ; Mon, 7 Oct 2002 10:42:28 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 8A117341EE; Mon, 7 Oct 2002 10:43:11 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from ganymede.cr2.com (ganymede.cr2.com [62.221.8.82]) by + lugh.tuatha.org (Postfix) with ESMTP id 4F6803410E for ; + Mon, 7 Oct 2002 10:42:02 +0100 (IST) +Received: from exchsrv.cr2 (imc.cr2.com [62.221.8.97]) by ganymede.cr2.com + (8.11.6/8.11.6) with ESMTP id g979fXW10916 for ; + Mon, 7 Oct 2002 10:41:34 +0100 +Received: from NIMITZ ([10.1.1.50]) by exchsrv.cr2 with SMTP (Microsoft + Exchange Internet Mail Service Version 5.5.2653.13) id 4BV529Y3; + Mon, 7 Oct 2002 10:41:35 +0100 +Message-Id: <000401c26de5$c0319b10$3201010a@nimitz> +From: "Ulysees" +To: "ILUG" +References: <00bc01c26d85$20bb29d0$578691c2@1wzffgdp93mz5jv> + <53964.137.43.13.22.1033983339.squirrel@squirrelmail.netsoc.ucd.ie> +Subject: [Same thread ish] [ILUG] adsl router modem combo +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4807.1700 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Cr2_Outbound_MailScanner: Believed to be clean +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 10:41:45 +0100 +Date: Mon, 7 Oct 2002 10:41:45 +0100 + +having great fun trying to find a dumb ADSL modem with Ethernet +presentation, everybody wants to sell routers but I intend on doing pppoe +from another device, something with more than one Ethernet port would be +nice. +anybody got any recommendations ? + +Uly + +----- Original Message ----- +From: +To: +Cc: +Sent: Monday, October 07, 2002 10:35 AM +Subject: Re: [ILUG] adsl router modem combo + + +> It seems to only support PPPoA and not PPPoE. You need one that supports +> PPPoE, if you want torun it in routed IP mode. If you are using it as a +> bridge, it'll probably work, but you'd be left leaving the computer on, +> which would defeat the purpose of getting a router. +> +> The best router I've come accross is the Zyxel 643. Eircom supply this, +> but if you have alook online you can probably find it cheaper to buy +> online from America or the UK. +> +> Hope this is useful, +> Joe +> +> +> -- +> Irish Linux Users' Group: ilug@linux.ie +> http://www.linux.ie/mailman/listinfo/ilug for (un)subscription +information. +> List maintainer: listmaster@linux.ie +> + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00113.6b233fa48d08abf97ff91e4548fd381d b/Ch3/datasets/spam/easy_ham/00113.6b233fa48d08abf97ff91e4548fd381d new file mode 100644 index 000000000..d274ff5eb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00113.6b233fa48d08abf97ff91e4548fd381d @@ -0,0 +1,91 @@ +From ilug-admin@linux.ie Mon Oct 7 12:07:14 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 6D27A16F6E + for ; Mon, 7 Oct 2002 12:05:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 12:05:06 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97APTK27468 for + ; Mon, 7 Oct 2002 11:25:29 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id A8C0D3410E; Mon, 7 Oct 2002 11:26:12 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from balder.idiotfarm.org (unknown [195.7.52.129]) by + lugh.tuatha.org (Postfix) with ESMTP id 561A4340D5 for ; + Mon, 7 Oct 2002 11:25:23 +0100 (IST) +Received: by balder.idiotfarm.org (Postfix, from userid 1000) id A50094843; + Mon, 7 Oct 2002 11:32:54 +0100 (IST) +To: Declan de Lacy Murphy +Cc: ilug@linux.ie +Subject: Re: [ILUG] adsl router modem combo +Message-Id: <20021007103254.GA1714@torb.mine.nu> +Mail-Followup-To: tor@torb.mine.nu, + Declan de Lacy Murphy , ilug@linux.ie +References: <00bc01c26d85$20bb29d0$578691c2@1wzffgdp93mz5jv> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <00bc01c26d85$20bb29d0$578691c2@1wzffgdp93mz5jv> +User-Agent: Mutt/1.4i +From: tor@torb.mine.nu (Tor) +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 11:32:54 +0100 +Date: Mon, 7 Oct 2002 11:32:54 +0100 + +On Sun, Oct 06, 2002 at 11:10:05PM +0100, Declan de Lacy Murphy wrote: +> I am planning to get i-stream solo and share it across a small network +> (wireless), but I don't want to have to pay eircom for a router and having a +> noisy pc running constantly isn't really an option because at home +> inevitably someone will unplug it. +> +> I have been looking at a number of products and although I read the thread +> about eircom needing pppoe last august I am still not sure if the one that I +> am interested in will do the job. It is a hawking technology ar 710 +> http://www.hawkingtech.com/products/ar710.htm ) and if it does the job it +> will actually be cheaper than the modem eircom is selling. +> +> I would really appreciate if someone could look at the spec on the hawking +> web page and give me an opinion. +> +> Thanks in advance +> +> Declan +> + +I got the DSL-W 906E from http://www.dsl-warehouse.co.uk. + +Though it's not at all the best one around I have to say it does the job +and a bit. Some of the features can be a pain to get working (ie. pptp in +pppoe mode - can't figure it out). The documentation is not the best, but +the guys from http://www.dsl-warehouse.co.uk will help you ouit. They +also have a message board. + +The command line interface is quite powerful, but absolutely not +userfriendly. + +All in all it's a cheap desent performer, that I am happy enough with. +Got this one including a microfilter (not needed) for 140euro including +shipping. Better than any deal from Eircom. + +-Tor +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00114.240461056916c0cdd555ba9d2bc9e63e b/Ch3/datasets/spam/easy_ham/00114.240461056916c0cdd555ba9d2bc9e63e new file mode 100644 index 000000000..eb0e777f1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00114.240461056916c0cdd555ba9d2bc9e63e @@ -0,0 +1,81 @@ +From sentto-2242572-55912-1033991494-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Mon Oct 7 13:14:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 40EE616F1C + for ; Mon, 7 Oct 2002 13:12:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 13:12:48 +0100 (IST) +Received: from n19.grp.scd.yahoo.com (n19.grp.scd.yahoo.com + [66.218.66.74]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g97BpVK30129 for ; Mon, 7 Oct 2002 12:51:31 +0100 +X-Egroups-Return: sentto-2242572-55912-1033991494-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.192] by n19.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 11:51:34 -0000 +X-Sender: skitster@hotmail.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 7 Oct 2002 11:51:34 -0000 +Received: (qmail 90714 invoked from network); 7 Oct 2002 11:51:33 -0000 +Received: from unknown (66.218.66.218) by m10.grp.scd.yahoo.com with QMQP; + 7 Oct 2002 11:51:33 -0000 +Received: from unknown (HELO hotmail.com) (64.4.17.59) by + mta3.grp.scd.yahoo.com with SMTP; 7 Oct 2002 11:51:33 -0000 +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 7 Oct 2002 04:51:33 -0700 +Received: from 194.130.102.81 by lw11fd.law11.hotmail.msn.com with HTTP; + Mon, 07 Oct 2002 11:51:33 GMT +To: zzzzteana@yahoogroups.com +Message-Id: +X-Originalarrivaltime: 07 Oct 2002 11:51:33.0465 (UTC) FILETIME=[E1EE8490:01C26DF7] +From: "Scott Wood" +X-Originating-Ip: [194.130.102.81] +X-Yahoo-Profile: fromage_frenzy +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 07 Oct 2002 12:51:33 +0100 +Subject: [zzzzteana] Re: Megalithomania UnPissup +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain +Content-Transfer-Encoding: 8bit + +--- In forteana@y..., "Webmaster" wrote: +>Right...Talking Stick!..but what the hell is "marathon/snickers, jif/cif +>and +>calls itself 'Secret Chiefs' " +> +>DRS +> + +Rebranding: taking something and changing nothing about it except its name. +In the UK Marathon bars became Snickers bar, Jif cleaning fluid became Cif +and Talking Stick became Secret Chiefs, y'know? + +Scott +"at once a fun fair, a petrified forest, and the great temple of Amun at +Karnak, itself drunk, and reeling in an eccentric earthquake" + + +_________________________________________________________________ +Join the world’s largest e-mail service with MSN Hotmail. +http://www.hotmail.com + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Plan to Sell a Home? +http://us.click.yahoo.com/J2SnNA/y.lEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00115.d5db4a9d477aa17a19669e3945b7aedb b/Ch3/datasets/spam/easy_ham/00115.d5db4a9d477aa17a19669e3945b7aedb new file mode 100644 index 000000000..348be3d50 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00115.d5db4a9d477aa17a19669e3945b7aedb @@ -0,0 +1,105 @@ +From sentto-2242572-55913-1033991654-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Mon Oct 7 13:14:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id C218916F1E + for ; Mon, 7 Oct 2002 13:12:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 13:12:49 +0100 (IST) +Received: from n30.grp.scd.yahoo.com (n30.grp.scd.yahoo.com + [66.218.66.87]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g97BrcK30312 for ; Mon, 7 Oct 2002 12:53:38 +0100 +X-Egroups-Return: sentto-2242572-55913-1033991654-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.96] by n30.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 11:54:14 -0000 +X-Sender: webmaster@bestirishmusic.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 7 Oct 2002 11:54:14 -0000 +Received: (qmail 78049 invoked from network); 7 Oct 2002 11:54:13 -0000 +Received: from unknown (66.218.66.217) by m13.grp.scd.yahoo.com with QMQP; + 7 Oct 2002 11:54:13 -0000 +Received: from unknown (HELO mirage.bestirishmusic.com) (216.250.187.2) by + mta2.grp.scd.yahoo.com with SMTP; 7 Oct 2002 11:54:13 -0000 +Received: from [216.250.178.12] by mirage.tcinternet.net (NTMail + 5.06.0016/NY0754.00.6ee0cb71) with ESMTP id uxihchaa for + forteana@yahoogroups.com; Mon, 7 Oct 2002 06:59:32 -0500 +Message-Id: <015401c26df8$40e8a2a0$0cb2fad8@DWM1> +To: +References: +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +From: "Webmaster" +X-Yahoo-Profile: Paradisebeach +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 7 Oct 2002 06:54:11 -0500 +Subject: Re: [zzzzteana] Re: Megalithomania UnPissup +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + + +----- Original Message ----- +From: "Scott Wood" +To: +Sent: Monday, October 07, 2002 6:51 AM +Subject: [zzzzteana] Re: Megalithomania UnPissup + + +> --- In forteana@y..., "Webmaster" wrote: +> >Right...Talking Stick!..but what the hell is "marathon/snickers, jif/cif +> >and +> >calls itself 'Secret Chiefs' " +> > +> >DRS +> > +> +> Rebranding: taking something and changing nothing about it except its +name. +> In the UK Marathon bars became Snickers bar, Jif cleaning fluid became Cif +> and Talking Stick became Secret Chiefs, y'know? +> +> Scott +> "at once a fun fair, a petrified forest, and the great temple of Amun at +> Karnak, itself drunk, and reeling in an eccentric earthquake" +> +> +> _________________________________________________________________ +> Join the world's largest e-mail service with MSN Hotmail. +> http://www.hotmail.com +> +> +> +> To unsubscribe from this group, send an email to: +> forteana-unsubscribe@egroups.com +> +> +> +> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ +> +> +> + + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Home Selling? Try Us! +http://us.click.yahoo.com/QrPZMC/iTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00116.22aef63fc606e0ad46b5593bc897469a b/Ch3/datasets/spam/easy_ham/00116.22aef63fc606e0ad46b5593bc897469a new file mode 100644 index 000000000..fef62a01a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00116.22aef63fc606e0ad46b5593bc897469a @@ -0,0 +1,73 @@ +From sentto-2242572-55914-1033992044-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Mon Oct 7 13:14:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 40AE616F1F + for ; Mon, 7 Oct 2002 13:12:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 13:12:51 +0100 (IST) +Received: from n5.grp.scd.yahoo.com (n5.grp.scd.yahoo.com [66.218.66.89]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g97C07K30374 for + ; Mon, 7 Oct 2002 13:00:08 +0100 +X-Egroups-Return: sentto-2242572-55914-1033992044-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.199] by n5.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 12:00:44 -0000 +X-Sender: webmaster@bestirishmusic.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 7 Oct 2002 12:00:44 -0000 +Received: (qmail 60788 invoked from network); 7 Oct 2002 12:00:44 -0000 +Received: from unknown (66.218.66.216) by m6.grp.scd.yahoo.com with QMQP; + 7 Oct 2002 12:00:44 -0000 +Received: from unknown (HELO mirage.bestirishmusic.com) (216.250.187.2) by + mta1.grp.scd.yahoo.com with SMTP; 7 Oct 2002 12:00:44 -0000 +Received: from [216.250.178.12] by mirage.tcinternet.net (NTMail + 5.06.0016/NY0754.00.6ee0cb71) with ESMTP id lijhchaa for + forteana@yahoogroups.com; Mon, 7 Oct 2002 07:06:00 -0500 +Message-Id: <016c01c26df9$27dbb670$0cb2fad8@DWM1> +To: +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +From: "Webmaster" +X-Yahoo-Profile: Paradisebeach +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 7 Oct 2002 07:00:39 -0500 +Subject: [zzzzteana] SETI at Home +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +So, I've been letting the little .exe of SETI@Home run endlessly on my PC . Last total for this upgrade approx. +420 hours of scanning time. And still no ET. I'm so disappointed. +Does anyone else on the list let Berkeley use their computer for research in this manner? +http://setiathome.berkeley.edu + + +DRS + + + +[Non-text portions of this message have been removed] + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00117.a9afb0bc89818ffe2f2a590c8a40434b b/Ch3/datasets/spam/easy_ham/00117.a9afb0bc89818ffe2f2a590c8a40434b new file mode 100644 index 000000000..c155b9e60 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00117.a9afb0bc89818ffe2f2a590c8a40434b @@ -0,0 +1,88 @@ +From sentto-2242572-55916-1033992125-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Mon Oct 7 13:15:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 0317016F21 + for ; Mon, 7 Oct 2002 13:12:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 13:12:54 +0100 (IST) +Received: from n38.grp.scd.yahoo.com (n38.grp.scd.yahoo.com + [66.218.66.106]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g97C1OK30390 for ; Mon, 7 Oct 2002 13:01:25 +0100 +X-Egroups-Return: sentto-2242572-55916-1033992125-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.97] by n38.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 12:02:05 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 7 Oct 2002 12:02:05 -0000 +Received: (qmail 17537 invoked from network); 7 Oct 2002 12:02:04 -0000 +Received: from unknown (66.218.66.218) by m14.grp.scd.yahoo.com with QMQP; + 7 Oct 2002 12:02:04 -0000 +Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by + mta3.grp.scd.yahoo.com with SMTP; 7 Oct 2002 12:02:03 -0000 +Received: from host217-35-23-133.in-addr.btopenworld.com ([217.35.23.133]) + by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17yWaI-0000ef-00 + for forteana@yahoogroups.com; Mon, 07 Oct 2002 13:02:02 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 07 Oct 2002 13:01:09 +0100 +Subject: [zzzzteana] A New Theory on Mapping the New World +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://www.washingtonpost.com/wp-dyn/articles/A46455-2002Oct5.html + +A New Theory on Mapping the New World + +By Guy Gugliotta +Washington Post Staff Writer +Monday, October 7, 2002; Page A07 + +In 1507, a group of scholars working in France produced an extraordinary map +of the world, the first to put the still-recent discoveries of Columbus and +others into a new continent separate from Asia, and to call that continent +"America." With the Waldseemuller map, the New World was born. +But there was something else. What would later come to be called South +America and Central America were surprisingly well-shaped, not only on the +east coast, where explorers had already sailed, but also on the west coast +-- which no European was known to have seen. +The ice cream cone bulge that sticks out into the Pacific at the junction of +modern-day Chile and Peru is readily visible and in almost exactly the right +geographical spot -- not only in the main map, but also in an inset printed +along its top. +The shape of South America in the main map appears distorted because of the +curvature of the Earth. +It is an improbable coincidence, if it was a coincidence, for the map -- 12 +large printed pages to be arrayed in one 36-square-foot wall display -- was +published six years before Vasco Balboa's 1513 trip across the Isthmus of +Panama and 12 years before Ferdinand Magellan's 1519-22 trip around the +world. +Did someone get there earlier? +... + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00118.f15bf997342540b404a4672c47d57d55 b/Ch3/datasets/spam/easy_ham/00118.f15bf997342540b404a4672c47d57d55 new file mode 100644 index 000000000..206d1892d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00118.f15bf997342540b404a4672c47d57d55 @@ -0,0 +1,102 @@ +From sentto-2242572-55915-1033992114-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Mon Oct 7 13:14:57 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 8BFF916F20 + for ; Mon, 7 Oct 2002 13:12:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 13:12:52 +0100 (IST) +Received: from n33.grp.scd.yahoo.com (n33.grp.scd.yahoo.com + [66.218.66.101]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g97C1EK30384 for ; Mon, 7 Oct 2002 13:01:15 +0100 +X-Egroups-Return: sentto-2242572-55915-1033992114-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.195] by n33.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 12:01:55 -0000 +X-Sender: webmaster@bestirishmusic.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 7 Oct 2002 12:01:54 -0000 +Received: (qmail 802 invoked from network); 7 Oct 2002 12:01:54 -0000 +Received: from unknown (66.218.66.218) by m2.grp.scd.yahoo.com with QMQP; + 7 Oct 2002 12:01:54 -0000 +Received: from unknown (HELO mirage.bestirishmusic.com) (216.250.187.2) by + mta3.grp.scd.yahoo.com with SMTP; 7 Oct 2002 12:01:54 -0000 +Received: from [216.250.178.12] by mirage.tcinternet.net (NTMail + 5.06.0016/NY0754.00.6ee0cb71) with ESMTP id lkjhchaa for + forteana@yahoogroups.com; Mon, 7 Oct 2002 07:07:13 -0500 +Message-Id: <017a01c26df9$53df69b0$0cb2fad8@DWM1> +To: +References: +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +From: "Webmaster" +X-Yahoo-Profile: Paradisebeach +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 7 Oct 2002 07:01:53 -0500 +Subject: Re: [zzzzteana] Re: Megalithomania UnPissup +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Understand, not enough caffeine absorbed yet this morning. (7:00AM here for +me) + +DRS + +> --- In forteana@y..., "Webmaster" wrote: +> >Right...Talking Stick!..but what the hell is "marathon/snickers, jif/cif +> >and +> >calls itself 'Secret Chiefs' " +> > +> >DRS +> > +> +> Rebranding: taking something and changing nothing about it except its +name. +> In the UK Marathon bars became Snickers bar, Jif cleaning fluid became Cif +> and Talking Stick became Secret Chiefs, y'know? +> +> Scott +> "at once a fun fair, a petrified forest, and the great temple of Amun at +> Karnak, itself drunk, and reeling in an eccentric earthquake" +> +> +> _________________________________________________________________ +> Join the world's largest e-mail service with MSN Hotmail. +> http://www.hotmail.com +> +> +> +> To unsubscribe from this group, send an email to: +> forteana-unsubscribe@egroups.com +> +> +> +> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ +> +> +> + + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00119.0f469afee6aef0a05d9850f7021bd629 b/Ch3/datasets/spam/easy_ham/00119.0f469afee6aef0a05d9850f7021bd629 new file mode 100644 index 000000000..0ecaa8cc2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00119.0f469afee6aef0a05d9850f7021bd629 @@ -0,0 +1,84 @@ +From sentto-2242572-55918-1033993378-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Mon Oct 7 13:35:13 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 65B2416F03 + for ; Mon, 7 Oct 2002 13:35:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 13:35:12 +0100 (IST) +Received: from n26.grp.scd.yahoo.com (n26.grp.scd.yahoo.com + [66.218.66.82]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g97CWdK31251 for ; Mon, 7 Oct 2002 13:32:39 +0100 +X-Egroups-Return: sentto-2242572-55918-1033993378-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.98] by n26.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 12:22:59 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 7 Oct 2002 12:22:58 -0000 +Received: (qmail 93392 invoked from network); 7 Oct 2002 12:22:58 -0000 +Received: from unknown (66.218.66.216) by m15.grp.scd.yahoo.com with QMQP; + 7 Oct 2002 12:22:58 -0000 +Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by + mta1.grp.scd.yahoo.com with SMTP; 7 Oct 2002 12:22:58 -0000 +Received: from host217-35-23-133.in-addr.btopenworld.com ([217.35.23.133]) + by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17yWuX-0002zg-00 + for forteana@yahoogroups.com; Mon, 07 Oct 2002 13:22:57 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 07 Oct 2002 13:22:03 +0100 +Subject: [zzzzteana] Man admits Soham kidnapping hoax calls +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g97CWdK31251 + +Ananova:  +Man admits Soham kidnapping hoax calls + +A man has admitted making hoax calls to police investigating the +disappearance of Soham schoolgirls Jessica Chapman and Holly Wells. +Wrexham Magistrates Court, in North Wales, heard jobless Howard Youde made +three calls to police in Cambridgeshire claiming to have abducted the +youngsters. +He was arrested in Wrexham in the early hours of August 16 when officers +traced the call to a phone box on the town's Brook Street. +The 45-year-old, of Queensway, Hope, near Wrexham, has pleaded guilty to one +count of wasting police time on August 15 this year. +The court was told Youde claimed to have no recollection of making the calls +having been drinking all day. +Defence lawyer Mark Arden says the offence was neither premeditated nor +calculated but added that this was no excuse. +He said: "What he's done is horrific. It's unforgivable. The distress he's +caused the families is unacceptable." +Youde has been released on unconditional bail until November 7 when he will +be sentenced. +The hearing has been adjourned for pre-sentence reports although the +defendant has been warned custody is an option. +Story filed: 12:36 Monday 7th October 2002 + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Plan to Sell a Home? +http://us.click.yahoo.com/J2SnNA/y.lEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00120.4de6f88fbcb22a39a0498f84d9ce358b b/Ch3/datasets/spam/easy_ham/00120.4de6f88fbcb22a39a0498f84d9ce358b new file mode 100644 index 000000000..5176fca46 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00120.4de6f88fbcb22a39a0498f84d9ce358b @@ -0,0 +1,68 @@ +From sentto-2242572-55941-1034006157-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Mon Oct 7 18:29:14 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 95BF316F18 + for ; Mon, 7 Oct 2002 18:29:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 18:29:02 +0100 (IST) +Received: from n10.grp.scd.yahoo.com (n10.grp.scd.yahoo.com + [66.218.66.65]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g97GE5K06827 for ; Mon, 7 Oct 2002 17:14:07 +0100 +X-Egroups-Return: sentto-2242572-55941-1034006157-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.95] by n10.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 15:55:57 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 7 Oct 2002 15:55:56 -0000 +Received: (qmail 73066 invoked from network); 7 Oct 2002 15:55:56 -0000 +Received: from unknown (66.218.66.218) by m7.grp.scd.yahoo.com with QMQP; + 7 Oct 2002 15:55:56 -0000 +Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by + mta3.grp.scd.yahoo.com with SMTP; 7 Oct 2002 15:55:56 -0000 +Received: from host217-35-23-133.in-addr.btopenworld.com ([217.35.23.133]) + by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17yaEd-0000oR-00 + for forteana@yahoogroups.com; Mon, 07 Oct 2002 16:55:55 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana@yahoogroups.com +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 07 Oct 2002 16:55:01 +0100 +Subject: Re: [zzzzteana] RE:Prophecies +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +> That always amazes me about 'regular' dreams - how often they come true. +> +In 1993 or so, when I was a student in Edinburgh, I had a bad dream about +being chased around a house by a scary murderous tramp who was carrying a +bag full of half-penny coins (which had long since ceased to be legal +tender). The next morning as I left the flat, I found a half-penny on the +doormat right outside our door. Fair gave me the willies, that did. + +TimC + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Plan to Sell a Home? +http://us.click.yahoo.com/J2SnNA/y.lEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00121.333fff2f2cb3dfd617a6210b669757d3 b/Ch3/datasets/spam/easy_ham/00121.333fff2f2cb3dfd617a6210b669757d3 new file mode 100644 index 000000000..4be0fa923 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00121.333fff2f2cb3dfd617a6210b669757d3 @@ -0,0 +1,68 @@ +From sentto-2242572-55948-1034007295-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Mon Oct 7 18:29:14 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 168DB16F19 + for ; Mon, 7 Oct 2002 18:29:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 18:29:04 +0100 (IST) +Received: from n10.grp.scd.yahoo.com (n10.grp.scd.yahoo.com + [66.218.66.65]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g97GECK06835 for ; Mon, 7 Oct 2002 17:14:13 +0100 +X-Egroups-Return: sentto-2242572-55948-1034007295-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.192] by n10.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 16:14:57 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 7 Oct 2002 16:14:54 -0000 +Received: (qmail 64279 invoked from network); 7 Oct 2002 16:14:54 -0000 +Received: from unknown (66.218.66.217) by m10.grp.scd.yahoo.com with QMQP; + 7 Oct 2002 16:14:54 -0000 +Received: from unknown (HELO protactinium.btinternet.com) (194.73.73.176) + by mta2.grp.scd.yahoo.com with SMTP; 7 Oct 2002 16:14:54 -0000 +Received: from host217-35-23-133.in-addr.btopenworld.com ([217.35.23.133]) + by protactinium.btinternet.com with esmtp (Exim 3.22 #8) id + 17yaWz-0002dB-00 for forteana@yahoogroups.com; Mon, 07 Oct 2002 17:14:53 + +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana@yahoogroups.com +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 07 Oct 2002 17:13:59 +0100 +Subject: Re: [zzzzteana] The tenth planet +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +> Anyone know what Quaoar means or stands for? Can't find it in the +> dictionary. Scrabble players should be happy! +> +http://www.angelfire.com/journal/cathbodua/Gods/Qgods.html + +Quaoar Their only god who 'came down from heaven; and, after reducing chaos +to order, out the world on the back of seven giants. He then created the +lower animals,' and then mankind. Los Angeles County Indians, California + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Home Selling? Try Us! +http://us.click.yahoo.com/QrPZMC/iTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00122.b4b9733750e203d0215d49043d29c173 b/Ch3/datasets/spam/easy_ham/00122.b4b9733750e203d0215d49043d29c173 new file mode 100644 index 000000000..d34eb8166 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00122.b4b9733750e203d0215d49043d29c173 @@ -0,0 +1,95 @@ +From sentto-2242572-55978-1034026967-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 00:10:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 33F2B16F03 + for ; Tue, 8 Oct 2002 00:10:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 00:10:48 +0100 (IST) +Received: from n11.grp.scd.yahoo.com (n11.grp.scd.yahoo.com + [66.218.66.66]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g97Lg8K18147 for ; Mon, 7 Oct 2002 22:42:08 +0100 +X-Egroups-Return: sentto-2242572-55978-1034026967-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.201] by n11.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 21:42:49 -0000 +X-Sender: felinda@frogstone.net +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 7 Oct 2002 21:42:47 -0000 +Received: (qmail 27183 invoked from network); 7 Oct 2002 21:42:46 -0000 +Received: from unknown (66.218.66.217) by m9.grp.scd.yahoo.com with QMQP; + 7 Oct 2002 21:42:46 -0000 +Received: from unknown (HELO mail2.athenet.net) (209.103.196.16) by + mta2.grp.scd.yahoo.com with SMTP; 7 Oct 2002 21:42:48 -0000 +Received: from [209.103.203.97] (209-103-203-104.dial-in1.osh.athenet.net + [209.103.203.104]) by mail2.athenet.net (8.11.6/8.11.6) with ESMTP id + g97LgkS04367 for ; Mon, 7 Oct 2002 16:42:46 + -0500 +X-Sender: felinda@pop2.athenet.net +Message-Id: +In-Reply-To: <049d01c26e44$9e1fa260$9731e150@007730120202> +References: + <03a101c26e42$8c73ee60$9731e150@007730120202> + + <049d01c26e44$9e1fa260$9731e150@007730120202> +To: zzzzteana@yahoogroups.com +From: That Goddess Chick +X-Yahoo-Profile: felinda +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 7 Oct 2002 16:42:27 -0500 +Subject: Re: [zzzzteana] The Cafe Forteana is back online!!! +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +> > Ok, but you'll still let me leave that black and white one there too, +>> right? I like that one!!! +>> -- +>> +>> +>> Fel +> +>Okay. I see you like that 1940's starlet look then.... +> +>I should think about a bio bit, but maybe I'll just remain enigmatic and +>maintain my mystique* +> +>Helen of Troy +>*by Lentheric :-) +> +Or you could let me write one for you? Mind you ...... I know an +awful lot about you! ;-)) + +Yes, I like that starlet look, but I think you should come out from +behind that bike too and let us see what you are wearing. looks +pretty innerestin' +-- + + +Fel +NEW!! Cafe Forteana is back: http://www.frogstone.net/Cafe/CafeForteana.html +http://www.frogstone.net +Weird Page: http://my.athenet.net/~felinda/WeirdPage.html + +[Non-text portions of this message have been removed] + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Sell a Home with Ease! +http://us.click.yahoo.com/SrPZMC/kTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00123.91b85aaea560d92f9199f9ba74e77918 b/Ch3/datasets/spam/easy_ham/00123.91b85aaea560d92f9199f9ba74e77918 new file mode 100644 index 000000000..0f13b718b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00123.91b85aaea560d92f9199f9ba74e77918 @@ -0,0 +1,86 @@ +From sentto-2242572-55980-1034027115-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 10:56:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id A34E716F17 + for ; Tue, 8 Oct 2002 10:56:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:56:47 +0100 (IST) +Received: from n15.grp.scd.yahoo.com (n15.grp.scd.yahoo.com + [66.218.66.70]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g97NYgK21739 for ; Tue, 8 Oct 2002 00:34:42 +0100 +X-Egroups-Return: sentto-2242572-55980-1034027115-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.197] by n15.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 21:45:15 -0000 +X-Sender: hellester@lineone.net +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 7 Oct 2002 21:45:15 -0000 +Received: (qmail 87831 invoked from network); 7 Oct 2002 21:45:15 -0000 +Received: from unknown (66.218.66.218) by m4.grp.scd.yahoo.com with QMQP; + 7 Oct 2002 21:45:15 -0000 +Received: from unknown (HELO mk-smarthost-3.mail.uk.tiscali.com) + (212.74.114.39) by mta3.grp.scd.yahoo.com with SMTP; 7 Oct 2002 21:45:15 + -0000 +Received: from [80.225.49.151] (helo=007730120202) by + mk-smarthost-3.mail.uk.tiscali.com with smtp (Exim 4.10) id + 17yffC-000FRO-00 for forteana@yahoogroups.com; Mon, 07 Oct 2002 22:43:43 + +0100 +Message-Id: <079d01c26e4a$f7e65d60$9731e150@007730120202> +To: +References: + <03a101c26e42$8c73ee60$9731e150@007730120202> + + <049d01c26e44$9e1fa260$9731e150@007730120202> + +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +From: "Helen & Mike" +X-Yahoo-Profile: hellester +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 7 Oct 2002 22:46:17 +0100 +Subject: Re: [zzzzteana] The Cafe Forteana is back online!!! +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + + +> Or you could let me write one for you? Mind you ...... I know an +> awful lot about you! ;-)) + +Oh, that could be interesting! + +> +> Yes, I like that starlet look, but I think you should come out from +> behind that bike too and let us see what you are wearing. looks +> pretty innerestin' + +That bike is all that's between me and my modesty. The other photos are not +for public consumption. :-) + +> Fel + +Helen of Troy + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Sell a Home for Top $ +http://us.click.yahoo.com/RrPZMC/jTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00124.f0f8fe0588f5245c08846ca9d308dfb1 b/Ch3/datasets/spam/easy_ham/00124.f0f8fe0588f5245c08846ca9d308dfb1 new file mode 100644 index 000000000..323ed0714 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00124.f0f8fe0588f5245c08846ca9d308dfb1 @@ -0,0 +1,77 @@ +From sentto-2242572-55981-1034027969-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 00:10:53 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id B81E816F17 + for ; Tue, 8 Oct 2002 00:10:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 00:10:52 +0100 (IST) +Received: from n35.grp.scd.yahoo.com (n35.grp.scd.yahoo.com + [66.218.66.103]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g97LwmK18667 for ; Mon, 7 Oct 2002 22:58:48 +0100 +X-Egroups-Return: sentto-2242572-55981-1034027969-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.199] by n35.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 21:59:29 -0000 +X-Sender: robert.chambers@baesystems.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 7 Oct 2002 21:59:28 -0000 +Received: (qmail 38258 invoked from network); 7 Oct 2002 21:59:27 -0000 +Received: from unknown (66.218.66.217) by m6.grp.scd.yahoo.com with QMQP; + 7 Oct 2002 21:59:27 -0000 +Received: from unknown (HELO n25.grp.scd.yahoo.com) (66.218.66.81) by + mta2.grp.scd.yahoo.com with SMTP; 7 Oct 2002 21:59:27 -0000 +Received: from [66.218.67.135] by n25.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 21:59:26 -0000 +To: zzzzteana@yahoogroups.com +Message-Id: +User-Agent: eGroups-EW/0.82 +X-Mailer: Yahoo Groups Message Poster +From: "uncle_slacky" +X-Originating-Ip: 62.255.0.8 +X-Yahoo-Profile: uncle_slacky +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 07 Oct 2002 21:59:24 -0000 +Subject: [zzzzteana] Latest Iraq-related news +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Just the headlines and URLs so I don't bore y'all too much.... + +http://www.guardian.co.uk/Iraq/Story/0,2763,805900,00.html + +As a US Republican, I reject George Bush's illegal and +unconstitutional plan to attack Iraq - Scott Ritter + + +http://jang.com.pk/thenews/oct2002-daily/07-10-2002/world/w9.htm + +Saudi Arabia may start fingerprinting Americans + + + + +Blair warned war to oust Saddam 'illegal' + + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Home Selling? Try Us! +http://us.click.yahoo.com/QrPZMC/iTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00125.0b972a986a586ab4ba3ff45e88f330db b/Ch3/datasets/spam/easy_ham/00125.0b972a986a586ab4ba3ff45e88f330db new file mode 100644 index 000000000..67697301f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00125.0b972a986a586ab4ba3ff45e88f330db @@ -0,0 +1,86 @@ +From razor-users-admin@lists.sourceforge.net Tue Oct 8 00:10:07 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 94D4A16F19 + for ; Tue, 8 Oct 2002 00:10:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 00:10:02 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g97MPnK19526 for ; Mon, 7 Oct 2002 23:25:49 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17ygHN-0005BG-00; Mon, + 07 Oct 2002 15:23:09 -0700 +Received: from elmo.la.asu.edu ([129.219.48.8]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17ygGz-00065U-00 for ; Mon, + 07 Oct 2002 15:22:45 -0700 +Received: (qmail 23780 invoked by uid 5305); 7 Oct 2002 22:31:31 -0000 +Received: from llamatron.la.asu.edu (HELO llamatron.rocinante.com) + (129.219.78.39) by elmo.la.asu.edu with SMTP; 7 Oct 2002 22:31:26 -0000 +Message-Id: <5.1.1.6.0.20021007151925.01759548@sancho2.rocinante.com> +X-Sender: blue@sancho2.rocinante.com +X-Mailer: QUALCOMM Windows Eudora Version 5.1.1 +To: razor-users@example.sourceforge.net +From: Chris Kurtz +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii"; format=flowed +X-Virus-Scanned: by AMaViS perl-11 +Subject: [Razor-users] Razor2 error: can't find "new" +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 07 Oct 2002 15:22:44 -0700 +Date: Mon, 07 Oct 2002 15:22:44 -0700 + + +Using Razor2 via SpamAssasin. + +System is Solaris 2.7, with qmail. Spamassassin run via user's procmail. +All users who use SA have run razor-register. + +Razor2 is failing, and I can't find anything in the limited docs or on +google on it, +and I'm hoping someone can help. + +The error (which doesn't prevent SA from working) is: + +Oct 2 06:38:22 sancho2 qmail: 1033565902.186041 delivery 4588: success: +razor2_check_skipped:_Bad_file_number_Can't_locate_object_m +ethod_"new"_via_package_"Razor2::Client::Agent"_(perhaps_you_forgot_to_load_"Razor2::Client::Agent"?)_at_/usr/local/lib/perl5/site_p +erl/5.6.1/Mail/SpamAssassin/Dns.pm_line_374./did_0+0+1/ + +Looking at Dns.pm doesn't really help me, and Razor2::Client::Agent appears +to be in the right place, +in /usr/local/lib/perl5/site_perl/5.6.1/Razor2/Client. + +Ideas? + +...Chris + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/00126.b0a45fbc9d8f9e6de6be5d3062cc91ef b/Ch3/datasets/spam/easy_ham/00126.b0a45fbc9d8f9e6de6be5d3062cc91ef new file mode 100644 index 000000000..eb5e736cb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00126.b0a45fbc9d8f9e6de6be5d3062cc91ef @@ -0,0 +1,84 @@ +From sentto-2242572-55982-1034029763-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 00:10:56 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 0F55D16F16 + for ; Tue, 8 Oct 2002 00:10:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 00:10:56 +0100 (IST) +Received: from n14.grp.scd.yahoo.com (n14.grp.scd.yahoo.com + [66.218.66.69]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g97MU5K19579 for ; Mon, 7 Oct 2002 23:30:06 +0100 +X-Egroups-Return: sentto-2242572-55982-1034029763-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.193] by n14.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 22:29:23 -0000 +X-Sender: robert.chambers@baesystems.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 7 Oct 2002 22:29:22 -0000 +Received: (qmail 61000 invoked from network); 7 Oct 2002 22:29:22 -0000 +Received: from unknown (66.218.66.218) by m11.grp.scd.yahoo.com with QMQP; + 7 Oct 2002 22:29:22 -0000 +Received: from unknown (HELO n16.grp.scd.yahoo.com) (66.218.66.71) by + mta3.grp.scd.yahoo.com with SMTP; 7 Oct 2002 22:29:22 -0000 +Received: from [66.218.67.176] by n16.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 22:29:21 -0000 +To: zzzzteana@yahoogroups.com +Message-Id: +In-Reply-To: +User-Agent: eGroups-EW/0.82 +X-Mailer: Yahoo Groups Message Poster +From: "uncle_slacky" +X-Originating-Ip: 62.255.0.8 +X-Yahoo-Profile: uncle_slacky +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 07 Oct 2002 22:29:21 -0000 +Subject: [zzzzteana] Re: Latest Iraq-related news +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Even better: + +http://www.ridiculopathy.com/news_detail.php?id=668 + +White House: President's "War Boner" Must Be Satisfied + +..."The President can't seem to hide his excitement about a possible +military conflict with Iraq. At a recent function honoring America's +war widows, Bush sported a visible erection when his speech turned to +the subject of the Middle East. + +'Believe me when I say this. With or without the help of other +nations, with or without UN approval, we will penetrate Iraq's +borders. With overwhelming force, we will pound Iraq over and over +again without ceasing. And, once its leaders concede defeat, we will +seed Iraq with American-style democracy.' + +Aides say the podium was scrubbed down thoroughly after the event with +a special cleanser/biocide not used since the Clinton +administration."..... + + + + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Plan to Sell a Home? +http://us.click.yahoo.com/J2SnNA/y.lEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00127.c1981aeb12ebd22536f12f0a044efe56 b/Ch3/datasets/spam/easy_ham/00127.c1981aeb12ebd22536f12f0a044efe56 new file mode 100644 index 000000000..3fa1a55bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00127.c1981aeb12ebd22536f12f0a044efe56 @@ -0,0 +1,65 @@ +From sentto-2242572-55983-1034030545-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 00:10:59 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 7CF2116F17 + for ; Tue, 8 Oct 2002 00:10:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 00:10:57 +0100 (IST) +Received: from n22.grp.scd.yahoo.com (n22.grp.scd.yahoo.com + [66.218.66.78]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g97MgpK19867 for ; Mon, 7 Oct 2002 23:42:51 +0100 +X-Egroups-Return: sentto-2242572-55983-1034030545-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.196] by n22.grp.scd.yahoo.com with NNFMP; + 07 Oct 2002 22:42:26 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 7 Oct 2002 22:42:25 -0000 +Received: (qmail 10847 invoked from network); 7 Oct 2002 22:42:25 -0000 +Received: from unknown (66.218.66.216) by m3.grp.scd.yahoo.com with QMQP; + 7 Oct 2002 22:42:25 -0000 +Received: from unknown (HELO tungsten.btinternet.com) (194.73.73.81) by + mta1.grp.scd.yahoo.com with SMTP; 7 Oct 2002 22:42:25 -0000 +Received: from host217-34-94-1.in-addr.btopenworld.com ([217.34.94.1]) by + tungsten.btinternet.com with esmtp (Exim 3.22 #8) id 17yga0-0003VG-00 for + forteana@yahoogroups.com; Mon, 07 Oct 2002 23:42:24 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana@yahoogroups.com +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 07 Oct 2002 23:41:30 +0100 +Subject: Re: [zzzzteana] The Cafe Forteana is back online!!! +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Tom R: +> http://www.cliktrik.com/people/family/me/0419.jpg +> +Which one's you? + +TimC + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Plan to Sell a Home? +http://us.click.yahoo.com/J2SnNA/y.lEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00128.0e92ec0c8bd8233f7e7873e93df43277 b/Ch3/datasets/spam/easy_ham/00128.0e92ec0c8bd8233f7e7873e93df43277 new file mode 100644 index 000000000..43cf272fd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00128.0e92ec0c8bd8233f7e7873e93df43277 @@ -0,0 +1,127 @@ +From fork-admin@xent.com Tue Oct 8 10:56:40 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 1C14716F03 + for ; Tue, 8 Oct 2002 10:56:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:56:40 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g981fTK28141 for ; + Tue, 8 Oct 2002 02:41:29 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 80DE52940CA; Mon, 7 Oct 2002 18:41:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 6C9E229409A for ; + Mon, 7 Oct 2002 18:40:38 -0700 (PDT) +Received: from adsl-17-226-227.jax.bellsouth.net ([68.17.226.227] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17yjMg-0005XL-00; Mon, 07 Oct 2002 21:40:51 -0400 +From: "Geege Schuman" +To: , +Subject: RE: The absurdities of life. +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +In-Reply-To: <000001c26e44$d8780150$0200a8c0@JMHALL> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 7 Oct 2002 21:39:39 -0400 + +what takes time and money: noting the amounts of each correction and basing +the refund delivery method on the amount. yesh, it's silly to spend $.37 (+ +labor and materials) for a $.02 refund, but maybe the only alternative right +now is to create dichotomies that require even more time and labor - or keep +the money (see john hall below). your mailed refund is a function of bulk. + +in jax we're on the verge of firing at&t cable for horrible customer service +and over-charging. what will probably happen: if the amount of overage per +customer is significant (say $30 or more) the refund will go directly to the +customer. If it's less, the combined total amount will go to the city as +lump sum settlement. + +in your case, maybe all the customers could vote on line where they'd like +their lump sum to go. of courese, they'd have to be notified by mail first. +:-) + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of John +Hall +Sent: Monday, October 07, 2002 5:02 PM +To: Fork@xent.com +Subject: RE: The absurdities of life. + + +They are legally required to do that. I got a similar check because an +insurance company didn't pay a claim quickly enough. It might have been +$.02. + +Although they spent lots more than $.33 to mail you the check, the +alternative seems to be to keep the money. Do you really want companies +to have a financial incentive to over-bill you 'just a bit' so they +could keep it? For a company with millions of customers, $.33/customer +starts adding up. + + + + + + +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +> bitbitch@magnesium.net + +> So I get a check from Pac Bell today (SBC as they're called now). +> Turns out, they went to the trouble of printing out, signing, sealing +> and stamping a check just to refund me for a whole $0.33. +> +> They easily spent more than this just getting the materials together. +> Why the hell do companies bother to do this crap? I mean, isn't there +> a bottom line in terms of cost effectiveness? I don't think I missed +> the .33, but I sure as hell would have appreciated lower rates in lieu +> of being returned pennies. +> +> I'm truly stuck on this though. I don't know whether to frame the +> check, burn it, or cash it in. Maybe I should find a way to return to +> sender, so they have to spend -more- money on giving me my .33 dues. +> +> +> Does .33 even buy anything anymore? Funny bit of it, is I couldn't +> even make a phone call these days. +> +> *boggled* +> BB. +> +> -- +> Best regards, +> bitbitch mailto:bitbitch@magnesium.net + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00129.ac1318f7fba969847e1ac4aa4ec3c26a b/Ch3/datasets/spam/easy_ham/00129.ac1318f7fba969847e1ac4aa4ec3c26a new file mode 100644 index 000000000..f5493cda6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00129.ac1318f7fba969847e1ac4aa4ec3c26a @@ -0,0 +1,51 @@ +From pudge@perl.org Tue Oct 8 10:54:15 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 79B2A16F16 + for ; Tue, 8 Oct 2002 10:54:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:54:15 +0100 (IST) +Received: from cpu59.osdn.com (slashdot.org [64.28.67.73] (may be forged)) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g981xoK28590 for + ; Tue, 8 Oct 2002 02:59:50 +0100 +Received: from [10.2.181.14] (helo=perl.org) by cpu59.osdn.com with smtp + (Exim 3.35 #1 (Debian)) id 17yjbz-0004GC-00 for ; + Mon, 07 Oct 2002 21:56:39 -0400 +Date: Tue, 08 Oct 2002 02:00:26 +0000 +From: pudge@perl.org +Subject: [use Perl] Headlines for 2002-10-08 +To: zzzz-use-perl@spamassassin.taint.org +Precedence: list +X-Bulkmail: 2.051 +Message-Id: + +use Perl Daily Headline Mailer + +This Week on perl5-porters (30 September / 6 October 2002) + posted by rafael on Monday October 07, @07:12 (summaries) + http://use.perl.org/article.pl?sid=02/10/07/1124226 + +RATS + posted by KM on Monday October 07, @09:01 (news) + http://use.perl.org/article.pl?sid=02/10/07/132252 + + + + +Copyright 1997-2002 pudge. All rights reserved. + + +====================================================================== + +You have received this message because you subscribed to it +on use Perl. To stop receiving this and other +messages from use Perl, or to add more messages +or change your preferences, please go to your user page. + + http://use.perl.org/my/messages/ + +You can log in and change your preferences from there. + + diff --git a/Ch3/datasets/spam/easy_ham/00130.77c75ddeffde2b89edaf8720370f6afc b/Ch3/datasets/spam/easy_ham/00130.77c75ddeffde2b89edaf8720370f6afc new file mode 100644 index 000000000..c225a939f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00130.77c75ddeffde2b89edaf8720370f6afc @@ -0,0 +1,84 @@ +From pudge@perl.org Tue Oct 8 10:54:18 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 8855116F03 + for ; Tue, 8 Oct 2002 10:54:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:54:17 +0100 (IST) +Received: from cpu59.osdn.com (slashdot.org [64.28.67.73] (may be forged)) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g981xwK28601 for + ; Tue, 8 Oct 2002 02:59:58 +0100 +Received: from [10.2.181.14] (helo=perl.org) by cpu59.osdn.com with smtp + (Exim 3.35 #1 (Debian)) id 17yjc8-0004NL-01 for ; + Mon, 07 Oct 2002 21:56:48 -0400 +Date: Tue, 08 Oct 2002 02:00:35 +0000 +From: pudge@perl.org +Subject: [use Perl] Stories for 2002-10-08 +To: zzzz-use-perl@spamassassin.taint.org +Precedence: list +X-Bulkmail: 2.051 +Message-Id: + +use Perl Daily Newsletter + +In this issue: + * This Week on perl5-porters (30 September / 6 October 2002) + * RATS + ++--------------------------------------------------------------------+ +| This Week on perl5-porters (30 September / 6 October 2002) | +| posted by rafael on Monday October 07, @07:12 (summaries) | +| http://use.perl.org/article.pl?sid=02/10/07/1124226 | ++--------------------------------------------------------------------+ + +It was a busy week indeed, with long threads, interesting bugs, clever +fixes, miscellaneous optimizations, some new ideas, a few jokes, +mysterious failures, and, finally, a security hole. Read on. + +This story continues at: + http://use.perl.org/article.pl?sid=02/10/07/1124226 + +Discuss this story at: + http://use.perl.org/comments.pl?sid=02/10/07/1124226 + + ++--------------------------------------------------------------------+ +| RATS | +| posted by KM on Monday October 07, @09:01 (news) | +| http://use.perl.org/article.pl?sid=02/10/07/132252 | ++--------------------------------------------------------------------+ + +Odud writes "RATS, the Rough Auditing Tool for Security, is a security +auditing utility for C, C++, Python, Perl and PHP code. RATS scans source +code, finding potentially dangerous function calls. The goal of this +project is not to definitively find bugs. The current goal is to provide +a reasonable starting point for performing manual security audits. +Produced by [0]Secure Software" Uses a database so you can alter what you +want it to look for. Not a replacement for using stricture or your head +but is a good place to start some security auditing on your Perl. + +Discuss this story at: + http://use.perl.org/comments.pl?sid=02/10/07/132252 + +Links: + 0. http://www.securesoftware.com/rats.php + + + +Copyright 1997-2002 pudge. All rights reserved. + + +====================================================================== + +You have received this message because you subscribed to it +on use Perl. To stop receiving this and other +messages from use Perl, or to add more messages +or change your preferences, please go to your user page. + + http://use.perl.org/my/messages/ + +You can log in and change your preferences from there. + + diff --git a/Ch3/datasets/spam/easy_ham/00131.0884e29887b7378ca04f4defe0a069e0 b/Ch3/datasets/spam/easy_ham/00131.0884e29887b7378ca04f4defe0a069e0 new file mode 100644 index 000000000..24e438211 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00131.0884e29887b7378ca04f4defe0a069e0 @@ -0,0 +1,89 @@ +From sentto-2242572-55999-1034047414-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 10:57:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 3090116F1E + for ; Tue, 8 Oct 2002 10:57:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:57:10 +0100 (IST) +Received: from n9.grp.scd.yahoo.com (n9.grp.scd.yahoo.com [66.218.66.93]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g983MsK31151 for + ; Tue, 8 Oct 2002 04:22:54 +0100 +X-Egroups-Return: sentto-2242572-55999-1034047414-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.95] by n9.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 03:23:34 -0000 +X-Sender: felinda@frogstone.net +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 03:23:34 -0000 +Received: (qmail 913 invoked from network); 8 Oct 2002 03:23:34 -0000 +Received: from unknown (66.218.66.218) by m7.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 03:23:34 -0000 +Received: from unknown (HELO mail2.athenet.net) (209.103.196.16) by + mta3.grp.scd.yahoo.com with SMTP; 8 Oct 2002 03:23:33 -0000 +Received: from [209.103.203.17] (209-103-203-17.dial-in1.osh.athenet.net + [209.103.203.17]) by mail2.athenet.net (8.11.6/8.11.6) with ESMTP id + g983NV425314 for ; Mon, 7 Oct 2002 22:23:31 + -0500 +X-Sender: felinda@pop2.athenet.net +Message-Id: +In-Reply-To: +References: +To: zzzzteana@yahoogroups.com +From: That Goddess Chick +X-Yahoo-Profile: felinda +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 7 Oct 2002 22:23:11 -0500 +Subject: Re: [zzzzteana] Bigfoot and big feet on display at Peabody +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +>Benoit claimed the prize for his size 14 feet. In the female division of the +>competition, three women tied for first place with size 10 feet. +>Winners took home a $100 gift certificate to either Footlocker or Barrie +>Ltd. + +Well crap, mine are size 11. + +> +>"If I'd have known the contest was happening, I would have gone," said +>Justin Simon '04, the proud owner of size 15 feet. "A lot of the guys have +>bigger feet than that. Dexter Upshaw ['06] wears a size 18." +> +>Simon said the $100 gift certificate would have almost paid for a new pair +>of shoes. + +Almost. If you shop at Payless!! + +But sure could have used the $100 anyway! +-- + + +Fel +NEW!! Cafe Forteana is back: http://www.frogstone.net/Cafe/CafeForteana.html +http://www.frogstone.net +Weird Page: http://my.athenet.net/~felinda/WeirdPage.html + +[Non-text portions of this message have been removed] + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Home Selling? Try Us! +http://us.click.yahoo.com/QrPZMC/iTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00132.2eddfbbe44385a450eae4ee89da0a830 b/Ch3/datasets/spam/easy_ham/00132.2eddfbbe44385a450eae4ee89da0a830 new file mode 100644 index 000000000..2693231ee --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00132.2eddfbbe44385a450eae4ee89da0a830 @@ -0,0 +1,91 @@ +From sentto-2242572-56000-1034048852-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 10:58:11 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id AD07516F1F + for ; Tue, 8 Oct 2002 10:57:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:57:11 +0100 (IST) +Received: from n31.grp.scd.yahoo.com (n31.grp.scd.yahoo.com + [66.218.66.99]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g983kpK31814 for ; Tue, 8 Oct 2002 04:46:51 +0100 +X-Egroups-Return: sentto-2242572-56000-1034048852-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.96] by n31.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 03:47:32 -0000 +X-Sender: felinda@frogstone.net +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 03:47:31 -0000 +Received: (qmail 25663 invoked from network); 8 Oct 2002 03:47:31 -0000 +Received: from unknown (66.218.66.216) by m13.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 03:47:31 -0000 +Received: from unknown (HELO mail2.athenet.net) (209.103.196.16) by + mta1.grp.scd.yahoo.com with SMTP; 8 Oct 2002 03:47:31 -0000 +Received: from [209.103.203.17] (209-103-203-17.dial-in1.osh.athenet.net + [209.103.203.17]) by mail2.athenet.net (8.11.6/8.11.6) with ESMTP id + g983lT426773 for ; Mon, 7 Oct 2002 22:47:29 + -0500 +X-Sender: felinda@pop2.athenet.net +Message-Id: +In-Reply-To: <3DA1FE9D.B6AF7F34@attcanada.ca> +References: <001601c26d25$c443f240$02628ac6@doug> + <050101c26e45$651a0cc0$9731e150@007730120202> + <3DA1FE9D.B6AF7F34@attcanada.ca> +To: zzzzteana@yahoogroups.com +From: That Goddess Chick +X-Yahoo-Profile: felinda +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 7 Oct 2002 22:47:10 -0500 +Subject: Re: [zzzzteana] Fortean Times Online +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +>Helen & Mike wrote: +> +>> Chat tends to be on irc.quakenet #forteana most nights. I think this was +>> done mainly because of troll infestation. Colin has control most nights on +>> there, and he keeps an eye on people and kicks them if they come in under +>> assumed names, or as soon as they show their true natures. Just call him +>> Billy Goat Gruff :-) +> +>How do you sign up? +> +>Thanks! +> +>Kelly + +kelly, same thing as when you used to come to frogstone on Dalnet. +#frogstone is still there, and also #forteana. If you want to go to +quakenet, just change your server (in mIRC if that is what you use) +to that. +-- + + +Fel +NEW!! Cafe Forteana is back: http://www.frogstone.net/Cafe/CafeForteana.html +http://www.frogstone.net +Weird Page: http://my.athenet.net/~felinda/WeirdPage.html + +[Non-text portions of this message have been removed] + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Plan to Sell a Home? +http://us.click.yahoo.com/J2SnNA/y.lEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00133.e5aa9fa1cc35faff5801a6b16ca7afa6 b/Ch3/datasets/spam/easy_ham/00133.e5aa9fa1cc35faff5801a6b16ca7afa6 new file mode 100644 index 000000000..b9875da01 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00133.e5aa9fa1cc35faff5801a6b16ca7afa6 @@ -0,0 +1,85 @@ +From sentto-2242572-56001-1034049352-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 10:58:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 3A5C916F20 + for ; Tue, 8 Oct 2002 10:57:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:57:13 +0100 (IST) +Received: from n21.grp.scd.yahoo.com (n21.grp.scd.yahoo.com + [66.218.66.77]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g983tCK31950 for ; Tue, 8 Oct 2002 04:55:12 +0100 +X-Egroups-Return: sentto-2242572-56001-1034049352-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.96] by n21.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 03:55:53 -0000 +X-Sender: felinda@frogstone.net +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 03:55:52 -0000 +Received: (qmail 35145 invoked from network); 8 Oct 2002 03:55:52 -0000 +Received: from unknown (66.218.66.217) by m13.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 03:55:52 -0000 +Received: from unknown (HELO mail2.athenet.net) (209.103.196.16) by + mta2.grp.scd.yahoo.com with SMTP; 8 Oct 2002 03:55:51 -0000 +Received: from [209.103.203.17] (209-103-203-17.dial-in1.osh.athenet.net + [209.103.203.17]) by mail2.athenet.net (8.11.6/8.11.6) with ESMTP id + g983tZ427119 for ; Mon, 7 Oct 2002 22:55:40 + -0500 +X-Sender: felinda@pop2.athenet.net +Message-Id: +In-Reply-To: <3D980C63.5090902@ee.ed.ac.uk> +References: <3D980C63.5090902@ee.ed.ac.uk> +To: zzzzteana@yahoogroups.com +From: That Goddess Chick +X-Yahoo-Profile: felinda +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 7 Oct 2002 22:55:05 -0500 +Subject: Re: [zzzzteana] Good ISP for Mac? +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +>I managed to get myself an iMac yesterday (just a G3 but a good'un) and was +>wondering if any of the Apple people on here could recommend a good ISP (for +>narrow band at the moment) for getting online under OS X. +> +>Stew + +my local ISP works great with my iMac. I don't know what you guys +have over there, but OS X ought to let you get online as well as +anything else. + +Crossing my fingers though....I did a upgrade to Jaguar, and ended up +doing a scrape and install after that. + +Oh, and I am on 56k dialup +-- + + +Fel +NEW!! Cafe Forteana is back: http://www.frogstone.net/Cafe/CafeForteana.html +http://www.frogstone.net +Weird Page: http://my.athenet.net/~felinda/WeirdPage.html + +[Non-text portions of this message have been removed] + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Home Selling? Try Us! +http://us.click.yahoo.com/QrPZMC/iTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00134.f7d26b0dc6c2f3de63b08d2810d54df6 b/Ch3/datasets/spam/easy_ham/00134.f7d26b0dc6c2f3de63b08d2810d54df6 new file mode 100644 index 000000000..f6be0793d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00134.f7d26b0dc6c2f3de63b08d2810d54df6 @@ -0,0 +1,88 @@ +From sentto-2242572-56003-1034050291-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 10:58:44 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id EE96E16F49 + for ; Tue, 8 Oct 2002 10:57:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:57:17 +0100 (IST) +Received: from n20.grp.scd.yahoo.com (n20.grp.scd.yahoo.com + [66.218.66.76]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g984dPK00892 for ; Tue, 8 Oct 2002 05:39:26 +0100 +X-Egroups-Return: sentto-2242572-56003-1034050291-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.193] by n20.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 04:11:31 -0000 +X-Sender: felinda@frogstone.net +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 04:11:31 -0000 +Received: (qmail 9758 invoked from network); 8 Oct 2002 04:11:30 -0000 +Received: from unknown (66.218.66.218) by m11.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 04:11:30 -0000 +Received: from unknown (HELO mail2.athenet.net) (209.103.196.16) by + mta3.grp.scd.yahoo.com with SMTP; 8 Oct 2002 04:11:30 -0000 +Received: from [209.103.203.17] (209-103-203-17.dial-in1.osh.athenet.net + [209.103.203.17]) by mail2.athenet.net (8.11.6/8.11.6) with ESMTP id + g984BS428332 for ; Mon, 7 Oct 2002 23:11:28 + -0500 +X-Sender: felinda@pop2.athenet.net (Unverified) +Message-Id: +In-Reply-To: +References: + +To: zzzzteana@yahoogroups.com +From: That Goddess Chick +X-Yahoo-Profile: felinda +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 7 Oct 2002 23:11:08 -0500 +Subject: Re: [zzzzteana] The Cafe Forteana is back online!!! +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +> >Tom R: +>>> +>>>http://www.cliktrik.com/people/family/me/0419.jpg +>>> +>>Which one's you? +> +>I'm actually taking the photo -- both figures are in fact waxworks. +> +>This was in Mme Tussaud's in, of all places, Sydney Australia. +> +> /t +>-- + +damn it Tom!! I had my kids believing you knew Albert Einstein!! + +Well, until the smart one asked just how old you were now. +-- + + +Fel +NEW!! Cafe Forteana is back: http://www.frogstone.net/Cafe/CafeForteana.html +http://www.frogstone.net +Weird Page: http://my.athenet.net/~felinda/WeirdPage.html + +[Non-text portions of this message have been removed] + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Plan to Sell a Home? +http://us.click.yahoo.com/J2SnNA/y.lEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00135.bd3bc1c036eab89c9c50cff40958c939 b/Ch3/datasets/spam/easy_ham/00135.bd3bc1c036eab89c9c50cff40958c939 new file mode 100644 index 000000000..dc696bfe5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00135.bd3bc1c036eab89c9c50cff40958c939 @@ -0,0 +1,99 @@ +From sentto-2242572-56004-1034050340-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 10:58:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 5046A16F22 + for ; Tue, 8 Oct 2002 10:57:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:57:16 +0100 (IST) +Received: from n4.grp.scd.yahoo.com (n4.grp.scd.yahoo.com [66.218.66.88]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g984BeK32546 for + ; Tue, 8 Oct 2002 05:11:41 +0100 +X-Egroups-Return: sentto-2242572-56004-1034050340-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.193] by n4.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 04:12:21 -0000 +X-Sender: felinda@frogstone.net +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 04:12:20 -0000 +Received: (qmail 11245 invoked from network); 8 Oct 2002 04:12:19 -0000 +Received: from unknown (66.218.66.216) by m11.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 04:12:19 -0000 +Received: from unknown (HELO mail2.athenet.net) (209.103.196.16) by + mta1.grp.scd.yahoo.com with SMTP; 8 Oct 2002 04:12:19 -0000 +Received: from [209.103.203.17] (209-103-203-17.dial-in1.osh.athenet.net + [209.103.203.17]) by mail2.athenet.net (8.11.6/8.11.6) with ESMTP id + g984CH428341 for ; Mon, 7 Oct 2002 23:12:18 + -0500 +X-Sender: felinda@pop2.athenet.net (Unverified) +Message-Id: +In-Reply-To: <3DA23A55.B985F5D6@mindspring.com> +References: + <3D9E980B.2B2BBE50@mindspring.com> + + <3DA23A55.B985F5D6@mindspring.com> +To: zzzzteana@yahoogroups.com +From: That Goddess Chick +X-Yahoo-Profile: felinda +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Mon, 7 Oct 2002 23:11:58 -0500 +Subject: Re: [zzzzteana] The Cafe Forteana is back online!!! +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +>That Goddess Chick wrote: +>> +>> >Thanks Fel. Got no scanner. My photo is in that group of 100 obsessive +>> >compulsive clipsters in FT, 1996 or 1997. +>> > +>> >Terry +>> +>> Great, and right now all my pre '98s are in Washington state, in a +>> cardboard box in a shed in the back of Sydde's garage. Probably mice +>> nests by now. :-( Put a scanner on your Christmas list right above +>> world peace! +>> -- +>> +>> Fel +>> NEW!! Cafe Forteana is back: +>>http://www.frogstone.net/Cafe/CafeForteana.html +> +>Maybe a kind soul with access to that issue and a scanner could scan it and +>forward to you. +> +>Terry +> + +I would appreciate that very much as I won't be getting back to +Washington until December. +-- + + +Fel +NEW!! Cafe Forteana is back: http://www.frogstone.net/Cafe/CafeForteana.html +http://www.frogstone.net +Weird Page: http://my.athenet.net/~felinda/WeirdPage.html + +[Non-text portions of this message have been removed] + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Sell a Home with Ease! +http://us.click.yahoo.com/SrPZMC/kTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00136.c507301e643ec123aa6e487ce2e2e3e2 b/Ch3/datasets/spam/easy_ham/00136.c507301e643ec123aa6e487ce2e2e3e2 new file mode 100644 index 000000000..007459fd4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00136.c507301e643ec123aa6e487ce2e2e3e2 @@ -0,0 +1,94 @@ +From rpm-list-admin@freshrpms.net Tue Oct 8 10:55:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 4B66916F16 + for ; Tue, 8 Oct 2002 10:55:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:55:17 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g987avK05522 for + ; Tue, 8 Oct 2002 08:36:57 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g987U2f06824; Tue, 8 Oct 2002 09:30:02 + +0200 +Received: from snickers.hotpop.com (snickers.hotpop.com [204.57.55.49]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g987TMf04275 for + ; Tue, 8 Oct 2002 09:29:22 +0200 +Received: from punkass.com (kubrick.hotpop.com [204.57.55.16]) by + snickers.hotpop.com (Postfix) with SMTP id B5FC0707E2 for + ; Tue, 8 Oct 2002 07:29:10 +0000 (UTC) +Received: from punkass.com (unknown [80.178.1.203]) by smtp-2.hotpop.com + (Postfix) with ESMTP id 4BADD1B8497 for ; + Tue, 8 Oct 2002 07:28:31 +0000 (UTC) +Message-Id: <3DA28982.6020709@punkass.com> +From: Roi Dayan +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830 +X-Accept-Language: en-us, en, he +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: xine src packge still gives errors +References: <1033908698.1724.11.camel@lillpelle> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Hotpop: ----------------------------------------------- Sent By + HotPOP.com FREE Email Get your FREE POP email at www.HotPOP.com + ----------------------------------------------- +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 08 Oct 2002 09:30:10 +0200 +Date: Tue, 08 Oct 2002 09:30:10 +0200 + +Hi + +I try to rebuild xine from src package and I get these errors: + +. +. +. +. +. +Finding Provides: /usr/lib/rpm/find-provides +Finding Requires: /usr/lib/rpm/find-requires +PreReq: rpmlib(PayloadFilesHavePrefix) <= 4.0-1 +rpmlib(CompressedFileNames) <= 3.0.4-1 +Requires(rpmlib): rpmlib(PayloadFilesHavePrefix) <= 4.0-1 +rpmlib(CompressedFileNames) <= 3.0.4-1 +Requires: xine-libs = 0.9.13 /bin/sh +Obsoletes: xine-devel + + +RPM build errors: + user dude does not exist - using root + user dude does not exist - using root + user dude does not exist - using root + user dude does not exist - using root + user dude does not exist - using root + File not found: /var/tmp/xine-root/usr/bin/aaxine + + +thx, +Roi + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00137.11311a8e5dbfe18503bf736b82b91fc7 b/Ch3/datasets/spam/easy_ham/00137.11311a8e5dbfe18503bf736b82b91fc7 new file mode 100644 index 000000000..5e1bdce9e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00137.11311a8e5dbfe18503bf736b82b91fc7 @@ -0,0 +1,33 @@ +From rssfeeds@spamassassin.taint.org Tue Oct 8 10:55:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id CCC0116F17 + for ; Tue, 8 Oct 2002 10:55:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:55:22 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98804K06008 for + ; Tue, 8 Oct 2002 09:00:04 +0100 +Message-Id: <200210080800.g98804K06008@dogma.slashnull.org> +To: zzzz@spamassassin.taint.org +From: diveintomark +Subject: Teach a man to fish +Date: Tue, 08 Oct 2002 08:00:04 -0000 +Content-Type: text/plain; encoding=utf-8 + +URL: http://diveintomark.org/archives/2002/10/08.html#teach_a_man_to_fish +Date: 2002-10-08T00:22:08-05:00 + +_Kevin Hemenway_: Finding More Channels[1]. “In simple terms, there are +thousands of web sites that are actively providing their news and headlines in +a format AmphetaDesk can understand [RSS]. And while AmphetaDesk knows about a +good number of these sites, it'd be impossible to hunt down each and every +single possibility. So, this page is here to teach you how to fish.” + + + +[1] http://www.disobey.com/amphetadesk/finding_more.html + + diff --git a/Ch3/datasets/spam/easy_ham/00138.b4fe49f8cd3b3bcc8d19741e705b0e01 b/Ch3/datasets/spam/easy_ham/00138.b4fe49f8cd3b3bcc8d19741e705b0e01 new file mode 100644 index 000000000..c0d2d7f29 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00138.b4fe49f8cd3b3bcc8d19741e705b0e01 @@ -0,0 +1,62 @@ +From rssfeeds@spamassassin.taint.org Tue Oct 8 10:55:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 7C3C116F03 + for ; Tue, 8 Oct 2002 10:55:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:55:46 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98808K06022 for + ; Tue, 8 Oct 2002 09:00:08 +0100 +Message-Id: <200210080800.g98808K06022@dogma.slashnull.org> +To: zzzz@spamassassin.taint.org +From: aaronsw +Subject: Iran Pushes UN Intervention Against US +Date: Tue, 08 Oct 2002 08:00:08 -0000 +Content-Type: text/plain; encoding=utf-8 + +URL: http://www.aaronsw.com/weblog/000643 +Date: 2002-10-07T21:35:22-06:00 + +Yahoo: The Case for Regime Change[1]. + + + + + + Khatami asked the U.N. to set a deadline for Bush to step down in favor of + president-in-exile Al Gore the legitimate winner of the 2000 election, the + results of which were subverted through widespread voting irregularities + and intimidation. + + [... This will likely require] a prolonged bombing campaign targeting major + U.S. cities and military installations, followed by a ground invasion led + by European forces. "Civilian casualties would likely be substantial," said + a French military analyst. "But the American people must be liberated from + tyranny." + + [...] "Even before Bush, the American political system was a shambles," + said Prof. Salvatore Deluna of the University of Madrid. "Their + single-party plutocracy will have to be reshaped into true + parliamentary-style democracy. Moreover, the economy will have to be + retooled from its current military dictatorship model--in which a third of + the federal budget goes to arms, and taxes are paid almost exclusively by + the working class--to one in which basic human needs such as education and + poverty are addressed. Their infrastructure is a mess; they don't even have + a national passenger train system. Fixing a failed state of this size will + require many years." + + + + + +Welcome news. The only way to crush America's fundamentalist tendencies is by +showing them who's boss. + + + +[1] http://story.news.yahoo.com/news?tmpl=story2&cid=127&u=/020927/7/2bxul.html&printer=1 + + diff --git a/Ch3/datasets/spam/easy_ham/00139.cfea5d726c0371fa63c9720a291ca9ad b/Ch3/datasets/spam/easy_ham/00139.cfea5d726c0371fa63c9720a291ca9ad new file mode 100644 index 000000000..3a57fd258 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00139.cfea5d726c0371fa63c9720a291ca9ad @@ -0,0 +1,31 @@ +From rssfeeds@spamassassin.taint.org Tue Oct 8 10:55:40 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 308AA16F16 + for ; Tue, 8 Oct 2002 10:55:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:55:37 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9880QK06040 for + ; Tue, 8 Oct 2002 09:00:26 +0100 +Message-Id: <200210080800.g9880QK06040@dogma.slashnull.org> +To: zzzz@spamassassin.taint.org +From: boingboing +Subject: Man kills self with home booby-traps +Date: Tue, 08 Oct 2002 08:00:26 -0000 +Content-Type: text/plain; encoding=utf-8 + +URL: http://boingboing.net/#85537486 +Date: Not supplied + +Steve sez: "It's tragic when life imitates Wile E. Coyote cartoons. Guy +boobytraps his house to get his family if they try to break in, and seemingly +is killed himself by his own traps." Link[1] Discuss[2] (_Thanks, Steve[3]!_) + +[1] http://story.news.yahoo.com/news?tmpl=story2&cid=573&ncid=757&e=2&u=/nm/20021007/od_nm/boobytraps_dc +[2] http://www.quicktopic.com/boing/H/K9nShVkkrRxi +[3] http://www.portigal.com + + diff --git a/Ch3/datasets/spam/easy_ham/00140.354632516317e3a37a05e93c609ec65d b/Ch3/datasets/spam/easy_ham/00140.354632516317e3a37a05e93c609ec65d new file mode 100644 index 000000000..455900752 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00140.354632516317e3a37a05e93c609ec65d @@ -0,0 +1,30 @@ +From rssfeeds@spamassassin.taint.org Tue Oct 8 10:55:42 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 922DA16F18 + for ; Tue, 8 Oct 2002 10:55:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:55:39 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9880QK06038 for + ; Tue, 8 Oct 2002 09:00:26 +0100 +Message-Id: <200210080800.g9880QK06038@dogma.slashnull.org> +To: zzzz@spamassassin.taint.org +From: boingboing +Subject: Curried radiation burns +Date: Tue, 08 Oct 2002 08:00:26 -0000 +Content-Type: text/plain; encoding=utf-8 + +URL: http://boingboing.net/#85537496 +Date: Not supplied + +Curcumin, the chemical that makes curry yellow, turns out to be a good compound +for treating radiation burns resulting from cancer therapy. Link[1] Discuss[2] +(_Thanks, Cheryl!_) + +[1] http://www.alertnet.org/thenews/newsdesk/N07347915 +[2] http://www.quicktopic.com/boing/H/THKNJnrnHdDd + + diff --git a/Ch3/datasets/spam/easy_ham/00141.00b956daf6951da2bea354300d121512 b/Ch3/datasets/spam/easy_ham/00141.00b956daf6951da2bea354300d121512 new file mode 100644 index 000000000..d838c9306 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00141.00b956daf6951da2bea354300d121512 @@ -0,0 +1,29 @@ +From rssfeeds@spamassassin.taint.org Tue Oct 8 10:55:45 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 10BFA16F18 + for ; Tue, 8 Oct 2002 10:55:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:55:45 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9880SK06051 for + ; Tue, 8 Oct 2002 09:00:28 +0100 +Message-Id: <200210080800.g9880SK06051@dogma.slashnull.org> +To: zzzz@spamassassin.taint.org +From: boingboing +Subject: 1987 copy of Nintendo zine going for $700 on eBay +Date: Tue, 08 Oct 2002 08:00:28 -0000 +Content-Type: text/plain; encoding=utf-8 + +URL: http://boingboing.net/#85535421 +Date: Not supplied + +A Nintendo newsletter from 1987 is going for ober $700 on eBay. Link[1] Discuss +[2] _(Thanks, Billy Hayes!)_ + +[1] http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=1566539449&rd=1 +[2] http://www.quicktopic.com/16/H/wUzqZdX42Az + + diff --git a/Ch3/datasets/spam/easy_ham/00142.0f7dc427ea4ecdf0c257b8bf7d152249 b/Ch3/datasets/spam/easy_ham/00142.0f7dc427ea4ecdf0c257b8bf7d152249 new file mode 100644 index 000000000..ffe8f720b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00142.0f7dc427ea4ecdf0c257b8bf7d152249 @@ -0,0 +1,30 @@ +From rssfeeds@spamassassin.taint.org Tue Oct 8 10:55:41 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 5047616F19 + for ; Tue, 8 Oct 2002 10:55:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:55:38 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9880UK06069 for + ; Tue, 8 Oct 2002 09:00:30 +0100 +Message-Id: <200210080800.g9880UK06069@dogma.slashnull.org> +To: zzzz@spamassassin.taint.org +From: boingboing +Subject: How the other half gives +Date: Tue, 08 Oct 2002 08:00:30 -0000 +Content-Type: text/plain; encoding=utf-8 + +URL: http://boingboing.net/#85534328 +Date: Not supplied + +The new Neiman Marcus Christmas catalog is out (in October!), including +you-as-an-action-figure ($7,500), a bamboo hut ($15,000) and a leather frisbee +($30). Link[1] Discuss[2] + +[1] http://www.neimanmarcus.com/store/sitelets/christmasbook2002/fc.htm?navAction=jump&promo=home2 +[2] http://www.quicktopic.com/boing/H/sWabFeGyB5u4C + + diff --git a/Ch3/datasets/spam/easy_ham/00143.4cae4623140fc349a57dac7ffd863227 b/Ch3/datasets/spam/easy_ham/00143.4cae4623140fc349a57dac7ffd863227 new file mode 100644 index 000000000..474162232 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00143.4cae4623140fc349a57dac7ffd863227 @@ -0,0 +1,25 @@ +From rssfeeds@spamassassin.taint.org Tue Oct 8 10:55:45 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id B1EF716F17 + for ; Tue, 8 Oct 2002 10:55:43 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:55:43 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98814K06118 for + ; Tue, 8 Oct 2002 09:01:04 +0100 +Message-Id: <200210080801.g98814K06118@dogma.slashnull.org> +To: zzzz@spamassassin.taint.org +From: guardian +Subject: Police pay damages to journalist +Date: Tue, 08 Oct 2002 08:01:04 -0000 +Content-Type: text/plain; encoding=utf-8 + +URL: http://www.newsisfree.com/click/-2,8655706,215/ +Date: 2002-10-08T03:31:00+01:00 + +BBC reporter Donal MacIntyre wins high profile libel case against police. + + diff --git a/Ch3/datasets/spam/easy_ham/00144.a6f12b97adc08a63ce541daaba0b0825 b/Ch3/datasets/spam/easy_ham/00144.a6f12b97adc08a63ce541daaba0b0825 new file mode 100644 index 000000000..02c63af0b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00144.a6f12b97adc08a63ce541daaba0b0825 @@ -0,0 +1,26 @@ +From rssfeeds@spamassassin.taint.org Tue Oct 8 10:56:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 0BE0D16F03 + for ; Tue, 8 Oct 2002 10:56:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:56:12 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98815K06130 for + ; Tue, 8 Oct 2002 09:01:05 +0100 +Message-Id: <200210080801.g98815K06130@dogma.slashnull.org> +To: zzzz@spamassassin.taint.org +From: guardian +Subject: 10 die as Israeli helicopter fires on Palestinian crowd +Date: Tue, 08 Oct 2002 08:01:05 -0000 +Content-Type: text/plain; encoding=utf-8 + +URL: http://www.newsisfree.com/click/-2,8655710,215/ +Date: 2002-10-08T03:30:56+01:00 + +*World latest: *Hundreds of Palestinians vent their anger as dozens of Israeli +tanks withdrew after a gruelling three-hour raid on the Gaza strip. + + diff --git a/Ch3/datasets/spam/easy_ham/00145.9e4594abeb96d3ba5650b9cf88e91015 b/Ch3/datasets/spam/easy_ham/00145.9e4594abeb96d3ba5650b9cf88e91015 new file mode 100644 index 000000000..83ee244e9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00145.9e4594abeb96d3ba5650b9cf88e91015 @@ -0,0 +1,26 @@ +From rssfeeds@spamassassin.taint.org Tue Oct 8 10:56:16 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 10C6216F03 + for ; Tue, 8 Oct 2002 10:56:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:56:16 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98816K06139 for + ; Tue, 8 Oct 2002 09:01:06 +0100 +Message-Id: <200210080801.g98816K06139@dogma.slashnull.org> +To: zzzz@spamassassin.taint.org +From: guardian +Subject: Dawn raids stoke fires of resentment +Date: Tue, 08 Oct 2002 08:01:06 -0000 +Content-Type: text/plain; encoding=utf-8 + +URL: http://www.newsisfree.com/click/-2,8655713,215/ +Date: 2002-10-08T03:30:53+01:00 + +*Afghanistan: *In his final report one year from the beginning of the US +campaign *Rory McCarthy* finds mounting anger at the military presence. + + diff --git a/Ch3/datasets/spam/easy_ham/00146.a6d4ba98c7866de55109077d2960d245 b/Ch3/datasets/spam/easy_ham/00146.a6d4ba98c7866de55109077d2960d245 new file mode 100644 index 000000000..f29761122 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00146.a6d4ba98c7866de55109077d2960d245 @@ -0,0 +1,26 @@ +From rssfeeds@spamassassin.taint.org Tue Oct 8 10:55:49 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 6FFA416F03 + for ; Tue, 8 Oct 2002 10:55:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:55:49 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9881LK06175 for + ; Tue, 8 Oct 2002 09:01:21 +0100 +Message-Id: <200210080801.g9881LK06175@dogma.slashnull.org> +To: zzzz@spamassassin.taint.org +From: newscientist +Subject: New Solar System body revealed +Date: Tue, 08 Oct 2002 08:01:21 -0000 +Content-Type: text/plain; encoding=utf-8 + +URL: http://www.newsisfree.com/click/-1,8640496,1440/ +Date: Not supplied + +The largest object found since 1930 is half the size of Pluto, and calls that +object's planetary status into question + + diff --git a/Ch3/datasets/spam/easy_ham/00147.fcb1b60290a155a5b837cd290b77a6dd b/Ch3/datasets/spam/easy_ham/00147.fcb1b60290a155a5b837cd290b77a6dd new file mode 100644 index 000000000..45a00b4a3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00147.fcb1b60290a155a5b837cd290b77a6dd @@ -0,0 +1,26 @@ +From rssfeeds@spamassassin.taint.org Tue Oct 8 10:56:13 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 32EC516F16 + for ; Tue, 8 Oct 2002 10:56:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:56:13 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9881MK06178 for + ; Tue, 8 Oct 2002 09:01:22 +0100 +Message-Id: <200210080801.g9881MK06178@dogma.slashnull.org> +To: zzzz@spamassassin.taint.org +From: newscientist +Subject: Man leads machine in chess duel +Date: Tue, 08 Oct 2002 08:01:22 -0000 +Content-Type: text/plain; encoding=utf-8 + +URL: http://www.newsisfree.com/click/-1,8643939,1440/ +Date: Not supplied + +World chess champion Vladimir Kramnik takes the lead over the computer Deep +Fritz, after the machine makes a peculiar mistake + + diff --git a/Ch3/datasets/spam/easy_ham/00148.6bdcd2791992fb3b923e961f71295ce8 b/Ch3/datasets/spam/easy_ham/00148.6bdcd2791992fb3b923e961f71295ce8 new file mode 100644 index 000000000..71a067bf4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00148.6bdcd2791992fb3b923e961f71295ce8 @@ -0,0 +1,26 @@ +From rssfeeds@spamassassin.taint.org Tue Oct 8 10:56:15 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 1F65B16F17 + for ; Tue, 8 Oct 2002 10:56:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:56:15 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9881MK06181 for + ; Tue, 8 Oct 2002 09:01:22 +0100 +Message-Id: <200210080801.g9881MK06181@dogma.slashnull.org> +To: zzzz@spamassassin.taint.org +From: newscientist +Subject: Human handshake opens data stream +Date: Tue, 08 Oct 2002 08:01:22 -0000 +Content-Type: text/plain; encoding=utf-8 + +URL: http://www.newsisfree.com/click/-1,8639021,1440/ +Date: Not supplied + +A new Japanese system allows palmtop computers to swap large amounts of data +when their owners shake hands + + diff --git a/Ch3/datasets/spam/easy_ham/00149.6ace09f27948721429b08699d9b92f4c b/Ch3/datasets/spam/easy_ham/00149.6ace09f27948721429b08699d9b92f4c new file mode 100644 index 000000000..5ed4ca303 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00149.6ace09f27948721429b08699d9b92f4c @@ -0,0 +1,26 @@ +From rssfeeds@spamassassin.taint.org Tue Oct 8 10:56:17 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 37E1116F16 + for ; Tue, 8 Oct 2002 10:56:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 10:56:17 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9881MK06184 for + ; Tue, 8 Oct 2002 09:01:22 +0100 +Message-Id: <200210080801.g9881MK06184@dogma.slashnull.org> +To: zzzz@spamassassin.taint.org +From: newscientist +Subject: Geneticists and a tiny worm win Nobel prize +Date: Tue, 08 Oct 2002 08:01:22 -0000 +Content-Type: text/plain; encoding=utf-8 + +URL: http://www.newsisfree.com/click/-1,8639022,1440/ +Date: Not supplied + +The medicine prize goes to research that revealed how cell suicide sculpts the +body and - when disrupted - causes disease + + diff --git a/Ch3/datasets/spam/easy_ham/00150.a4c5a8aaccd6b54f1000e9fa02f53114 b/Ch3/datasets/spam/easy_ham/00150.a4c5a8aaccd6b54f1000e9fa02f53114 new file mode 100644 index 000000000..16f8e4e9e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00150.a4c5a8aaccd6b54f1000e9fa02f53114 @@ -0,0 +1,68 @@ +From ilug-admin@linux.ie Tue Oct 8 11:13:35 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 15A8716F16 + for ; Tue, 8 Oct 2002 11:13:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 11:13:35 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98A7PK10544 for + ; Tue, 8 Oct 2002 11:07:26 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 60B92341EE; Tue, 8 Oct 2002 11:08:11 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from linuxmafia.com (linuxmafia.COM [198.144.195.186]) by + lugh.tuatha.org (Postfix) with ESMTP id 877B5341E1 for ; + Tue, 8 Oct 2002 11:07:04 +0100 (IST) +Received: from rick by linuxmafia.com with local (Exim 3.36 #1 (Debian)) + id 17yrJU-0001Ph-00 for ; Tue, 08 Oct 2002 03:10:04 -0700 +To: ilug@linux.ie +Subject: Re: [ILUG] packaging risks and the reputation of linux distributions +Message-Id: <20021008100959.GL11235@linuxmafia.com> +References: <200210081058.50438.brendan@zen.org> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <200210081058.50438.brendan@zen.org> +User-Agent: Mutt/1.4i +X-Mas: Bah humbug. +From: Rick Moen +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 03:09:59 -0700 +Date: Tue, 8 Oct 2002 03:09:59 -0700 + +Quoting Brendan Kehoe (brendan@zen.org): + +> As a workaround, the various distributions could use a GPG singature +> to verify correctness of the file. Since the distributor's secret key +> is required to create that signature, it would add a pretty +> significant step that would have to be taken to make it possible to +> replace both a rpm or apt file and its accompanying signature. + +There are complex problems inherent in attempts to implement this. +http://linuxmafia.com/~rick/linux-info/debian-package-signing + +-- +Cheers, My pid is Inigo Montoya. You kill -9 +Rick Moen my parent process. Prepare to vi. +rick@linuxmafia.com +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00151.4ecb35a7f837a0240663d3bbc5c8dbe8 b/Ch3/datasets/spam/easy_ham/00151.4ecb35a7f837a0240663d3bbc5c8dbe8 new file mode 100644 index 000000000..dcc2578e6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00151.4ecb35a7f837a0240663d3bbc5c8dbe8 @@ -0,0 +1,74 @@ +From ilug-admin@linux.ie Tue Oct 8 12:26:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id E41D916F03 + for ; Tue, 8 Oct 2002 12:26:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 12:26:47 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98APSK11003 for + ; Tue, 8 Oct 2002 11:25:28 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id CAF5134206; Tue, 8 Oct 2002 11:26:11 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from dspsrv.com (vir.dspsrv.com [193.120.211.34]) by + lugh.tuatha.org (Postfix) with ESMTP id C0B96341E1 for ; + Tue, 8 Oct 2002 11:25:08 +0100 (IST) +Received: from [195.17.199.3] (helo=waider.ie) by dspsrv.com with asmtp + (Exim 3.36 #1) id 17yrY3-0000WN-00; Tue, 08 Oct 2002 11:25:07 +0100 +Message-Id: <3DA2B226.2060209@waider.ie> +From: Waider +MIME-Version: 1.0 +To: brendan@zen.org +Cc: ilug@linux.ie +Subject: Re: [ILUG] packaging risks and the reputation of linux distributions +References: <200210081058.50438.brendan@zen.org> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 08 Oct 2002 12:23:34 +0200 +Date: Tue, 08 Oct 2002 12:23:34 +0200 + +Brendan Kehoe wrote: +> As a workaround, the various distributions could use a GPG singature to verify +> correctness of the file. Since the distributor's secret key is required to +> create that signature, it would add a pretty significant step that would have +> to be taken to make it possible to replace both a rpm or apt file and its +> accompanying signature. + +Check your local friendly Red Hat installation: + +[root@localhost up2date]# rpm --checksig zsh-4.0.2-2.src.rpm +zsh-4.0.2-2.src.rpm: md5 gpg ok + +Of course, this is only as useful as, say, the gpg keys distributed with +the Kernel tarballs, i.e. if you don't actually bother checking the sig +then you are open to abuse. It's entirely possible that rpm can be +configured to require good signatures, but I've not read that part of +the fine manual just yet. + +Cheers, +Waider. +-- +waider@waider.ie / Yes, it /is/ very personal of me + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00152.703c271de3d42fb8bf266db6f77a0dda b/Ch3/datasets/spam/easy_ham/00152.703c271de3d42fb8bf266db6f77a0dda new file mode 100644 index 000000000..6db740099 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00152.703c271de3d42fb8bf266db6f77a0dda @@ -0,0 +1,74 @@ +From webdev-admin@linux.ie Tue Oct 8 12:26:53 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 82C0016F03 + for ; Tue, 8 Oct 2002 12:26:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 12:26:53 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98AjNK11667 for + ; Tue, 8 Oct 2002 11:45:23 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 89BAA340A2; Tue, 8 Oct 2002 11:46:04 +0100 (IST) +Delivered-To: linux.ie-webdev@localhost +Received: from mail.tradesignals.com (unknown [217.75.2.27]) by + lugh.tuatha.org (Postfix) with ESMTP id 42BEA340A2 for ; + Tue, 8 Oct 2002 11:45:21 +0100 (IST) +Received: from docaoimh.tradesignals.com (docaoimh.tradesignals.com + [192.168.1.26]) by mail.tradesignals.com (8.11.6/8.11.6) with ESMTP id + g98AjGe06455; Tue, 8 Oct 2002 11:45:16 +0100 +Received: from docaoimh.tradesignals.com (localhost.localdomain + [127.0.0.1]) by docaoimh.tradesignals.com (8.12.5/8.12.5) with ESMTP id + g98AgeiK002392; Tue, 8 Oct 2002 11:42:40 +0100 +Received: from localhost (localhost [[UNIX: localhost]]) by + docaoimh.tradesignals.com (8.12.5/8.12.5/Submit) id g98AgdeN002390; + Tue, 8 Oct 2002 11:42:39 +0100 +Content-Type: text/plain; charset="iso-8859-1" +From: Donncha O Caoimh +To: , +Subject: Re: [Webdev] mod_usertrack +User-Agent: KMail/1.4.3 +References: +In-Reply-To: +MIME-Version: 1.0 +Message-Id: <200210081142.39259.donncha.ocaoimh@tradesignals.com> +Sender: webdev-admin@linux.ie +Errors-To: webdev-admin@linux.ie +X-Beenthere: webdev@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +Date: Tue, 8 Oct 2002 11:42:39 +0100 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g98AjNK11667 + +Thanks for the info AJ, I found "weblog" at +http://awsd.com/scripts/weblog/index.shtml which has some click-path +reporting. It's simple, but works. Report generation takes a bit though, even +with dns resolution turned off.. + +Donncha. + + +On Monday 07 October 2002 23:35, AJ McKee wrote: +> Donncha, +> +> I've been using mod_usertrack for a good while now. I use in by default in +> every vhost that I set up. I assign a cookie name and set the expiry for +> about a year. I have to say it looks ok. A few things to note though. If a +_______________________________________________ +Webdev mailing list +Webdev@linux.ie +http://www.linux.ie/mailman/listinfo/webdev + + diff --git a/Ch3/datasets/spam/easy_ham/00153.2ba33aef8f6b3010c92db7f992fbec43 b/Ch3/datasets/spam/easy_ham/00153.2ba33aef8f6b3010c92db7f992fbec43 new file mode 100644 index 000000000..5eb0b9334 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00153.2ba33aef8f6b3010c92db7f992fbec43 @@ -0,0 +1,174 @@ +From sentto-2242572-56009-1034075149-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 12:27:16 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 731DF16F03 + for ; Tue, 8 Oct 2002 12:27:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 12:27:15 +0100 (IST) +Received: from n20.grp.scd.yahoo.com (n20.grp.scd.yahoo.com + [66.218.66.76]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g98B5CK12365 for ; Tue, 8 Oct 2002 12:05:12 +0100 +X-Egroups-Return: sentto-2242572-56009-1034075149-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.201] by n20.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 11:05:52 -0000 +X-Sender: martin@srv0.ems.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 11:05:49 -0000 +Received: (qmail 41834 invoked from network); 8 Oct 2002 11:04:02 -0000 +Received: from unknown (66.218.66.216) by m9.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 11:04:02 -0000 +Received: from unknown (HELO haymarket.ed.ac.uk) (129.215.128.53) by + mta1.grp.scd.yahoo.com with SMTP; 8 Oct 2002 11:04:03 -0000 +Received: from srv0.ems.ed.ac.uk (srv0.ems.ed.ac.uk [129.215.117.0]) by + haymarket.ed.ac.uk (8.11.6/8.11.6) with ESMTP id g98B42304365 for + ; Tue, 8 Oct 2002 12:04:02 +0100 (BST) +Received: from EMS-SRV0/SpoolDir by srv0.ems.ed.ac.uk (Mercury 1.44); + 8 Oct 02 12:04:01 +0000 +Received: from SpoolDir by EMS-SRV0 (Mercury 1.44); 8 Oct 02 12:03:56 +0000 +Organization: Management School +To: zzzzteana@yahoogroups.com +Message-Id: <3DA2C9B0.1469.5C8ED72@localhost> +Priority: normal +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Description: Mail message body +From: "Martin Adamson" +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 8 Oct 2002 12:03:55 +0100 +Subject: [zzzzteana] Fake bank website cons victims +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +>>From the BBC website - www.bbc.co.uk + + Tuesday, 8 October, 2002, 09:43 GMT 10:43 UK + + Fake bank website cons victims + + West African criminals have used a fake version of a British bank's online + service to milk victims of cash, say police. The fake site was used to squeeze + more money out of people they had already hooked. + + The site has been shut down. But UK National Criminal Intelligence Service, + (NCIS), said at least two Canadians had lost more than $100,000 after being + taken in by the fake website. + + The scam behind the fake web domain was the familiar one that offers people a + share of the huge sums of money they need moved out of various African + nations. + + NCIS said the use of the web was helping the conmen hook victims that would + otherwise spot the scam. + + Convincing site + + News of this latest scam was revealed by BBC Radio5Live. It found that an + unclaimed web domain of a UK bank had been used by conmen to get more cash out + their victims. + + A NCIS spokesman said the domain looked legitimate because it had "the" in + front of the bank's name. + + "I have seen the microsite myself and it's very sophisticated," said the NCIS + spokesman. "It's very convincing especially to people not very experienced + online." + + Once the con was discovered it was quickly shut down. However, the people + behind it have not been caught. + + NCIS does know that at least two people have lost more than $100,000. + + The bank involved has bought up the domain used in the con as well as many + other permutations of its name to limit the chance it could happen again. + + Domain games + + Usually people are first hooked in to what has become known as Advanced Fee or + 419 fraud by replying to an unsolicited fax or e-mail offering a share of any + cash successfully moved out of Africa. + + The '419' refers to the part of the Nigerian penal code dealing with such + crimes. + + Like any con, there is no money to be moved at all and instead anyone taking + the bait is asked to pay increasingly large sums to supposedly bribe + uncooperative officials and to smooth the passage of the cash. + + Although this con has been practiced for years, people still fall victim to + it. + + NCIS estimates that up to five Americans are sitting in hotel lobbies in + London everyday waiting to meet people connected with this con. + + Cutting edge fraud + + Often the conmen provide fake banking certificates to give the con an air of + legitimacy. + + + People tricked into clicking on fake sites + + But a spokesman for NCIS said fake or spoof websites are now being used in + place of the certificates. + + "To many people nowadays the cutting edge of banking technology is web + technology," said the spokesman. + + One of the first groups of conmen to use this method set up a fake website + that supposedly gave victims access to accounts held at the South African + Reserve Bank, the country's national bank. + + Typically, victims are given a login name and password and are encouraged to + visit the site so they can see that the cash they are getting a share of has + been deposited in their name. + + But before they can get their hands on the cash, the victims are typically + asked to hand over more of their own money to help the transfer go ahead. + + Once the South African police discovered the ruse they declared it a national + priority crime and soon arrested the 18 people behind it. + + Modern gloss + + An briefing paper prepared by NCIS in August on organised crime noted that + criminals were increasingly turning to the web to lure new victims and give + old cons a modern gloss. + + The NCIS spokesman urged people who have fallen victim to 419 fraud to come + forward and help it track down the perpetrators. He said in the last two + months it had arrested 24 people overseas involved with this type of fraud. + + He said any e-mail, fax or letter making an offer that looks to good too be + true, undoubtedly is. + + One of the first companies to fall victim to website spoofing was net payment + service Paypal. + + Conmen set up a fake site and asked people to visit and re-enter their account + and credit card details because Paypal had lost the information. + + The website link included in the e-mail looked legitimate but in fact directed + people to a fake domain that gathered details for the conmen's personal use. + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Sell a Home for Top $ +http://us.click.yahoo.com/RrPZMC/jTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00154.cc63335f9a4e3b5f4a16be338b0d00a4 b/Ch3/datasets/spam/easy_ham/00154.cc63335f9a4e3b5f4a16be338b0d00a4 new file mode 100644 index 000000000..31ea28c99 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00154.cc63335f9a4e3b5f4a16be338b0d00a4 @@ -0,0 +1,95 @@ +From sentto-2242572-56010-1034075461-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 12:27:19 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 4C7C016F16 + for ; Tue, 8 Oct 2002 12:27:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 12:27:18 +0100 (IST) +Received: from n40.grp.scd.yahoo.com (n40.grp.scd.yahoo.com + [66.218.66.108]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g98BAdK12700 for ; Tue, 8 Oct 2002 12:10:39 +0100 +X-Egroups-Return: sentto-2242572-56010-1034075461-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.201] by n40.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 11:11:04 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 11:11:01 -0000 +Received: (qmail 60866 invoked from network); 8 Oct 2002 11:11:01 -0000 +Received: from unknown (66.218.66.218) by m9.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 11:11:01 -0000 +Received: from unknown (HELO gadolinium.btinternet.com) (194.73.73.111) by + mta3.grp.scd.yahoo.com with SMTP; 8 Oct 2002 11:11:02 -0000 +Received: from host217-35-11-51.in-addr.btopenworld.com ([217.35.11.51]) + by gadolinium.btinternet.com with esmtp (Exim 3.22 #8) id 17ysGU-0004CB-00 + for forteana@yahoogroups.com; Tue, 08 Oct 2002 12:11:02 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 08 Oct 2002 12:10:07 +0100 +Subject: [zzzzteana] Uncle Mark seeks parole +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://news.bbc.co.uk/1/hi/entertainment/showbiz/2308581.stm + +Tuesday, 8 October, 2002, 07:55 GMT 08:55 UK +Lennon killer seeks parole again + +The man who shot dead former Beatle John Lennon is making another bid for +early release from prison - the day before what would have been Lennon's +62nd birthday. +Mark David Chapman, 47, was jailed for life after he admitted killing the +superstar outside his New York apartment building in 1980. +It is the second time in two years that Chapman has sought parole from +Attica state prison. +At a 2000 hearing, he argued that he was no longer a danger to society and +had overcome the psychological problems which led him to shoot the +ex-Beatle. +Chapman had said that a voice in his head told him to shoot the star. +Shot dead +Lennon was shot four times as he emerged from a limousine outside his New +York City apartment on 8 December 1980. +He and his wife Yoko Ono were returning from a late-night recording session +during which time they had been working on Walking on Thin Ice. +Only hours before the shooting, Chapman - who had come to New York from +Hawaii - was photographed with the singer outside the same building as +Lennon signed a copy of his album Double Fantasy for him. +The killer said Lennon had been just "a picture on an album cover" to him +before the shooting. +'Deserved death' +Chapman has said that he should have received the death penalty for his +crime. +Lennon's widow told the 2000 parole hearing that she would not feel safe if +Chapman were released. +Lennon's songwriting partnership with Paul McCartney propelled the +Liverpool-based pop group to international stardom and unparalleled +commercial success. +The Beatles front man, peace campaigner, and all-round iconoclast, would +have been 62 on Wednesday. + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Plan to Sell a Home? +http://us.click.yahoo.com/J2SnNA/y.lEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00155.22281cddbc29a93d630798e0aa97f725 b/Ch3/datasets/spam/easy_ham/00155.22281cddbc29a93d630798e0aa97f725 new file mode 100644 index 000000000..109b7b5c6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00155.22281cddbc29a93d630798e0aa97f725 @@ -0,0 +1,71 @@ +From ilug-admin@linux.ie Tue Oct 8 12:27:06 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id B489C16F03 + for ; Tue, 8 Oct 2002 12:27:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 12:27:05 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98BDQK12743 for + ; Tue, 8 Oct 2002 12:13:27 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 8EC2E340D5; Tue, 8 Oct 2002 12:14:11 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from mail05.svc.cra.dublin.eircom.net + (mail05.svc.cra.dublin.eircom.net [159.134.118.21]) by lugh.tuatha.org + (Postfix) with SMTP id 2D2C0340A2 for ; Tue, 8 Oct 2002 + 12:13:01 +0100 (IST) +Received: (qmail 90525 messnum 458261 invoked from + network[159.134.229.14/p270.as3.adl.dublin.eircom.net]); 8 Oct 2002 + 11:13:01 -0000 +Received: from p270.as3.adl.dublin.eircom.net (HELO ?192.168.2.138?) + (159.134.229.14) by mail05.svc.cra.dublin.eircom.net (qp 90525) with SMTP; + 8 Oct 2002 11:13:01 -0000 +MIME-Version: 1.0 +X-Sender: lbedford_mail@lon2.siliq.net +Message-Id: +In-Reply-To: <20021008111138.GF18266@fiachra.ucd.ie> +References: <20021008111138.GF18266@fiachra.ucd.ie> +To: Irish Linux Users Group +From: Liam Bedford +Subject: Re: [ILUG] cheap linux PCs +Content-Type: text/plain; charset="iso-8859-1" ; format="flowed" +Content-Transfer-Encoding: 8bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 12:12:59 +0100 +Date: Tue, 8 Oct 2002 12:12:59 +0100 + +>I'd normally never buy this but the Xbox is Eur300 on IOL's shop, a very +>large company are making a loss on it and: +> +>http://xbox-linux.sourceforge.net/articles.php?aid=1&sub=Press%20Release%3A%20Xbox%20Linux%20Mandrake%209%20Released +> +>Mandrake has been released for it. + +isn't it ¤250 in Smyths? + +don't forget to add to that the modchip, and the time to put it on. + +(/me thinks unless you want 3d graphics, www.mini-itx.com is the way to go :)) + +L. +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00156.d4205c868d67d1c334455950b21d226d b/Ch3/datasets/spam/easy_ham/00156.d4205c868d67d1c334455950b21d226d new file mode 100644 index 000000000..6bf050f51 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00156.d4205c868d67d1c334455950b21d226d @@ -0,0 +1,130 @@ +From sentto-2242572-56011-1034075737-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 12:27:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 3DBE916F17 + for ; Tue, 8 Oct 2002 12:27:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 12:27:20 +0100 (IST) +Received: from n18.grp.scd.yahoo.com (n18.grp.scd.yahoo.com + [66.218.66.73]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g98BEuK12758 for ; Tue, 8 Oct 2002 12:14:56 +0100 +X-Egroups-Return: sentto-2242572-56011-1034075737-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.200] by n18.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 11:15:37 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 11:15:37 -0000 +Received: (qmail 58250 invoked from network); 8 Oct 2002 11:15:36 -0000 +Received: from unknown (66.218.66.217) by m8.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 11:15:36 -0000 +Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by + mta2.grp.scd.yahoo.com with SMTP; 8 Oct 2002 11:15:36 -0000 +Received: from host217-35-11-51.in-addr.btopenworld.com ([217.35.11.51]) + by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17ysKt-00048e-00 + for forteana@yahoogroups.com; Tue, 08 Oct 2002 12:15:35 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 08 Oct 2002 12:14:41 +0100 +Subject: [zzzzteana] Bashing the bishop +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://www.guardian.co.uk/religion/Story/0,2763,806744,00.html + +Evangelicals' threat to new archbishop + +Direct action threat over liberal views on sexuality + +Stephen Bates, religious affairs correspondent +Tuesday October 8, 2002 +The Guardian + +Evangelical fundamentalists last night stepped up their campaign to oust +Rowan Williams, the incoming Archbishop of Canterbury, before he even takes +up his post, by threatening to take "direct action" against him. +The council of the Church Society, the Church of England's oldest +evangelical body, joined a younger evangelical pressure group called Reform, +which is also opposed to Dr Williams, in calling on him to recant his +supposedly liberal views on sexuality or stand down. +Following an emergency meeting, the 167-year-old society, whose leaders met +the archbishop last week, proclaimed their continued opposition to his +appointment and called on all Anglicans to spurn him. +The move is the latest stage of an increasingly aggressive attempt to +destabilise the new archbishop, whose leftwing political views are regarded +with deep suspicion by the conservative fringes of the evangelical movement. +Some evangelicals object to Dr Williams's acknowledgement that he has +ordained a gay priest, something many bishops have done, and that those who +have sex outside marriage need not necessarily be spurned. The new +archbishop has repeatedly assured them that he respects the canons of the +church. +Nevertheless, the society said: "It is clear that he prefers his private +judgment to the voice of scripture, to the voice of tradition and to the +common mind of the church. As such he can only be a focus of disunity. +"The council... called upon loyal Anglicans to pray specifically that Rowan +Williams would see the error in his teaching, change his views or stand +down," it said. +The society claimed to have drawn up an "action plan," including calling on +bishops and primates of the 70 million worldwide Anglican communion, of +which archbishops of Canterbury are the leaders, to distance themselves from +Dr Williams's doctrinal and ethical position. It promised it would be +"taking steps towards appropriate direct action". +It added that Dr Williams remained on the editorial board of a journal +called Theology and Sexuality which, six months ago, published articles +allegedly commending homosexual behaviour. +Despite its claim, the society does not represent the common mind of the +church. Dr Williams, currently Archbishop of Wales, was chosen by the crown +appointments commission of church members, including evangelicals, and his +appointment was endorsed by the prime minister and the Queen. +He is due to succeed George Carey, who retires this month, and will be +formally enthroned at Canterbury cathedral in February. +Asked what form direct action might take, the Rev George Curry, the +society's chairman, said: "Watch this space." Presumably it could involve a +small minority of parishes repudiating the new archbishop and seeking +alternative oversight or even demonstrations at services where Dr Williams +is present. +Church of England bishops, who have hitherto largely kept their heads down +during the row, are meeting next week to discuss their response to the +evangelical extremists' challenge, which appears to have grown in the +absence of a robust rebuttal. +A letter by senior theologians in today's Guardian, however, repudiates the +evangelicals' tactics, calling them unseemly and contrary to biblical +teaching. +On the BBC's Thought for the Day yesterday, Angela Tilby, vice-principal of +Westcott House, Cambridge, accused Dr Williams's opponents of presumption +and blackmail. "It is in fact a thoroughly aggressive way to behave. It is +attempting to force an issue by emotional violence... manipulating to get +your way is often preferable to painstaking negotiation," she said. +Last week, Dr Williams said he was deeply saddened. "Matters of sexuality +should not have the priority or centrality that Reform and the Church +Society have tried to give them. The archbishop cannot withdraw his +appointment since so many, including evangelicals, have urged him to take +the post... the archbishop believes it to be his duty under God." + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Sell a Home with Ease! +http://us.click.yahoo.com/SrPZMC/kTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00157.3a532432a98ebf828fdeb46a6ddfa082 b/Ch3/datasets/spam/easy_ham/00157.3a532432a98ebf828fdeb46a6ddfa082 new file mode 100644 index 000000000..17f2aa66f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00157.3a532432a98ebf828fdeb46a6ddfa082 @@ -0,0 +1,94 @@ +From sentto-2242572-56012-1034075806-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 12:27:29 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 057B416F16 + for ; Tue, 8 Oct 2002 12:27:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 12:27:26 +0100 (IST) +Received: from n16.grp.scd.yahoo.com (n16.grp.scd.yahoo.com + [66.218.66.71]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g98BHvK12946 for ; Tue, 8 Oct 2002 12:17:57 +0100 +X-Egroups-Return: sentto-2242572-56012-1034075806-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.98] by n16.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 11:16:46 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 11:16:46 -0000 +Received: (qmail 43293 invoked from network); 8 Oct 2002 11:16:46 -0000 +Received: from unknown (66.218.66.218) by m15.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 11:16:46 -0000 +Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by + mta3.grp.scd.yahoo.com with SMTP; 8 Oct 2002 11:16:46 -0000 +Received: from host217-35-11-51.in-addr.btopenworld.com ([217.35.11.51]) + by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17ysM1-00048e-00 + for forteana@yahoogroups.com; Tue, 08 Oct 2002 12:16:45 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 08 Oct 2002 12:15:50 +0100 +Subject: [zzzzteana] And deliver us from weevil +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://www.guardian.co.uk/climatechange/story/0,12374,806695,00.html + +Weevil pest warms to life in south-west London + +James Meek, science correspondent +Tuesday October 8, 2002 +The Guardian + +They're chomping in Chelsea, Fulham and Pimlico, but despite their fancy +taste in London addresses they are neither posh nor particularly fussy: they +are vine weevils and they want to eat your plants. +Two species of vine weevil previously unable to survive Britain's cold +winters have been discovered in south-west London, and one has also been +detected in Surrey, Cardiff and Edinburgh. +"This is probably the most serious new garden pest in recent memory," said +Max Barclay, the curator of beetles at the Natural History Museum in London +who discovered the creatures in the UK. +The black vine weevil has long been native to Britain, causing enormous +damage to glossy leaved plants such as laurels. But the two new species, +otiorhynchus armadillo and otiorhynchus salicicola, not previously known +north of Switzerland, are now prevalent in south London. "It's very likely +these weevils have been introduced to Britain through imported ornamental +plants from Italy," said Dr Barclay. "It looks like they're here to stay." +He found otiorhynchus armadillo on the window of a Chelsea department store +in 1998, but as the shop sold imported house plants, he assumed it was a +migrant. It has now quietly become the most common species of vine weevil in +south-west London. The second invader is not so numerous, but has +established itself firmly in the same area. +Apart from laurels, vine weevils attack bay, viburnum, ornamental ivy, and +grape vines. An early sign of trouble is that notches appear in leaves. The +soil-dwelling larvae bite the roots off below the surface. +One possible explanation for the invaders' successful colonisation of +Britain is global warming. Earlier springs and milder winters are already a +fact. + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Sell a Home with Ease! +http://us.click.yahoo.com/SrPZMC/kTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00158.71abc842fe120eb73cbfa0fe6c5df852 b/Ch3/datasets/spam/easy_ham/00158.71abc842fe120eb73cbfa0fe6c5df852 new file mode 100644 index 000000000..694f26b65 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00158.71abc842fe120eb73cbfa0fe6c5df852 @@ -0,0 +1,124 @@ +From sentto-2242572-56013-1034075904-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 12:27:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 44A7E16F18 + for ; Tue, 8 Oct 2002 12:27:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 12:27:23 +0100 (IST) +Received: from n23.grp.scd.yahoo.com (n23.grp.scd.yahoo.com + [66.218.66.79]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g98BHgK12940 for ; Tue, 8 Oct 2002 12:17:42 +0100 +X-Egroups-Return: sentto-2242572-56013-1034075904-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.200] by n23.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 11:18:24 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 11:18:23 -0000 +Received: (qmail 62648 invoked from network); 8 Oct 2002 11:18:23 -0000 +Received: from unknown (66.218.66.218) by m8.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 11:18:23 -0000 +Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by + mta3.grp.scd.yahoo.com with SMTP; 8 Oct 2002 11:18:23 -0000 +Received: from host217-35-11-51.in-addr.btopenworld.com ([217.35.11.51]) + by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17ysNa-00048e-00 + for forteana@yahoogroups.com; Tue, 08 Oct 2002 12:18:22 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 08 Oct 2002 12:17:28 +0100 +Subject: [zzzzteana] Nobel astrophysicists +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Nobel Honors 3 for Astrophysics Work + +Tuesday October 8, 2002 12:00 PM +STOCKHOLM, Sweden (AP) - Two Americans and a Japanese won the Nobel Prize in +physics Tuesday for using some of the most obscure particles and waves in +nature to understand the workings of astronomy's grandest wonders. +Riccardo Giacconi, 71, of the Associated Universities Inc. in Washington, +D.C., will get half of the $1 million prize for his role in ``pioneering +contributions to astrophysics, which have led to the discovery of cosmic +X-ray sources.'' +Raymond Davis, Jr., 87, of the University of Pennsylvania shares the other +half of the prize with Japanese scientist Masatoshi Koshiba, 76, of the +University of Tokyo. The two men pioneered the construction of giant +underground chambers to detect neutrinos, elusive particles that stream from +the sun by the billion. +Neutrinos offer an unparalleled view of the sun's inner workings because +they are produced in its heart by the same process that causes it to shine. +In fact, Davis' early experiments, performed during the 1960s in a South +Dakota gold mine, confirmed that the sun is powered by nuclear fusion. +Koshiba won his share of the prize for his work at the Kamiokande neutrino +detector in Japan. That experiment confirmed and extended Davis' work, and +also discovered neutrinos coming from distant supernova explosions, some of +the brightest objects in the universe. +The Italian-born Giacconi, a U.S. citizen, was awarded half of the prize for +building the first X-ray telescopes that provided ``completely new - and +sharp - images of the universe,'' the academy said. +His research laid the foundation for X-ray astronomy, which has led to the +discovery of black holes and allowed researchers to peer deep into the +hearts of the dusty young galaxies where stars are born. +When academy officials reached Giacconi by phone at his home outside +Washington, he said he was ``dumbstruck'' to learn of the prize. Koshiba +also was phoned at home in Tokyo, but the academy was still trying to reach +Davis, spokesman Erling Norrby said. +This year's Nobel awards started Monday with the naming of Britons Sydney +Brenner, 75, and Sir John E. Sulston, 60, and American H. Robert Horvitz, +55, as winners of the medicine prize, selected by a committee at the +Karolinska Institute. +The researchers shared it for discoveries about how genes regulate organ +growth and a process of programmed cell deaths that shed light on how +viruses and bacteria invade human cells, including in conditions such as +AIDS, strokes, cancer and heart attacks. +The winner of the Nobel Prize in chemistry will be named on Wednesday +morning and the Bank of Sweden Prize in Economic Sciences in Memory of +Alfred Nobel later the same day. +The literature prize winner will be announced on Thursday, the Swedish +Academy said on Tuesday. +The winner of the coveted peace prize - the only one not awarded in Sweden - +will be announced Friday in Oslo, Norway. +The award committees make their decisions in deep secrecy and candidates are +not publicly revealed for 50 years. +Alfred Nobel, the wealthy Swedish industrialist and inventor of dynamite who +endowed the prizes left only vague guidelines for the selection committees. +In his will he said the prize being revealed on Tuesday should be given to +those who ``shall have conferred the greatest benefit on mankind'' and +``shall have made the most important discovery or invention within the field +of physics.'' +The Royal Swedish Academy of Sciences, which also chooses the chemistry and +economics winners, invited nominations from previous recipients and experts +in the fields before cutting down its choices. Deliberations are conducted +in strict secrecy. +The prizes are presented on Dec. 10, the anniversary of Nobel's death in +1896, in Stockholm and in Oslo. +--- +On the Net: +Nobel site, http://www.nobel.se + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Plan to Sell a Home? +http://us.click.yahoo.com/J2SnNA/y.lEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00159.53acdde1c0b5aadf73295f0c58ddb6a7 b/Ch3/datasets/spam/easy_ham/00159.53acdde1c0b5aadf73295f0c58ddb6a7 new file mode 100644 index 000000000..13b475cd7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00159.53acdde1c0b5aadf73295f0c58ddb6a7 @@ -0,0 +1,89 @@ +From sentto-2242572-56014-1034075987-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 12:27:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 0BE9816F17 + for ; Tue, 8 Oct 2002 12:27:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 12:27:28 +0100 (IST) +Received: from n27.grp.scd.yahoo.com (n27.grp.scd.yahoo.com + [66.218.66.83]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g98BJ8K12989 for ; Tue, 8 Oct 2002 12:19:08 +0100 +X-Egroups-Return: sentto-2242572-56014-1034075987-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.201] by n27.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 11:19:49 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 11:19:47 -0000 +Received: (qmail 76868 invoked from network); 8 Oct 2002 11:19:46 -0000 +Received: from unknown (66.218.66.218) by m9.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 11:19:46 -0000 +Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by + mta3.grp.scd.yahoo.com with SMTP; 8 Oct 2002 11:19:48 -0000 +Received: from host217-35-11-51.in-addr.btopenworld.com ([217.35.11.51]) + by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17ysOx-00048e-00 + for forteana@yahoogroups.com; Tue, 08 Oct 2002 12:19:47 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 08 Oct 2002 12:18:52 +0100 +Subject: [zzzzteana] Lioness adopts fifth antelope +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://www.guardian.co.uk/international/story/0,3604,806579,00.html + +Lioness adopts fifth antelope + +Rory Carroll, Africa correspondent +Tuesday October 8, 2002 +The Guardian + +Kamuniak the dysfunctional lioness has forfeited another meal by adopting +her fifth baby oryx this year, an aberration of nature which has baffled +wildlife experts. +The young lioness in the Samburu national park in northern Kenay adopted her +latest baby at the weekend, a wildlife service warden said yesterday. +Each time Kamuniak, whose name means "the blessed one" in the local Samburu +tongue, has tried to protect the antelopes from other predators and allowed +the natural mothers to feed them. +Unfortunately for her, one oryx ended up in the belly of a male lion while +Kamuniak slept; the others were either rescued by wardens or retrieved by +their natural mothers. +The wardens think the latest adoptee, nicknamed Naisimari ("taken by +force"), was adopted at the weekend. +"She must have adopted her on Sunday because they are in harmony," said +Gabriel Lepariyo, a warden. +Naisimari's natural mother has been seen shadowing the odd couple at a +distance. +Theories to explain the phenonemon abound: not having her own cubs, Kamuniak +is lonely; she is colour-blind and short-sighted and thinks the calves are +cubs; the oryx were too frail to flee, breaking the classic prey behaviour +and confusing the hunter; Kamuniak wants to be a vegetarian; Kamuniak wants +to be loved. + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Sell a Home with Ease! +http://us.click.yahoo.com/SrPZMC/kTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00160.eb0db8e14a3308c08db1cc38c4c7d66a b/Ch3/datasets/spam/easy_ham/00160.eb0db8e14a3308c08db1cc38c4c7d66a new file mode 100644 index 000000000..c27d41dd3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00160.eb0db8e14a3308c08db1cc38c4c7d66a @@ -0,0 +1,89 @@ +From sentto-2242572-56019-1034080193-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 14:40:49 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 71FD816F1A + for ; Tue, 8 Oct 2002 14:39:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 14:39:52 +0100 (IST) +Received: from n40.grp.scd.yahoo.com (n40.grp.scd.yahoo.com + [66.218.66.108]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g98CZeK15545 for ; Tue, 8 Oct 2002 13:35:40 +0100 +X-Egroups-Return: sentto-2242572-56019-1034080193-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.193] by n40.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 12:29:53 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 12:29:52 -0000 +Received: (qmail 77204 invoked from network); 8 Oct 2002 12:29:52 -0000 +Received: from unknown (66.218.66.218) by m11.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 12:29:52 -0000 +Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by + mta3.grp.scd.yahoo.com with SMTP; 8 Oct 2002 12:29:52 -0000 +Received: from host217-35-11-51.in-addr.btopenworld.com ([217.35.11.51]) + by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17ytUl-0005ta-00 + for forteana@yahoogroups.com; Tue, 08 Oct 2002 13:29:51 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 08 Oct 2002 13:28:56 +0100 +Subject: [zzzzteana] Dracula theme park could be switched to Bucharest +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g98CZeK15545 + +Ananova:  +Dracula theme park could be switched to Bucharest + +A controversial scheme to build a Dracula theme park in Romania could be +switched away from Transylvania. +Consultants PricewaterhouseCoopers is now recommending that it be built in +Bucharest instead. +It comes after Prince Charles led international protests against the +original proposals to build it in the medieval town of Sigishoara. +PricewaterhouseCoopers name Bucharest, originally believed to be an outsider +in the race to host the park, as the most profitable location for the +project. +But that has angered residents in Sigishoara, where Vlad the Impaler, the +inspiration for Dracula, was born. They are counting on the park to boost +the local economy. +Evenimentul Zilei reports that Sigishoara was placed behind the capital with +the Black Sea port of Constanta third choice. +Dorin Danesan, mayor of Sigishoara, said: "The pre-feasibility report from +PWC shows that the park would attract more tourists if it was located in +Bucharest. But I still think that Sigishoara is the best location for it." +The park would include hotels, a Dracula roller coaster, catacombs, a ghost +train and a house of horrors, as well as vampire dungeons located around a +reconstruction of Dracula's castle and an artificial lake. +The project has also been objected to by the world heritage organisation +Unesco fearing Sigishoara might be spoilt. +PricewaterhouseCoopers is to present its final report on the project on +October 15. +Story filed: 13:16 Tuesday 8th October 2002 + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Plan to Sell a Home? +http://us.click.yahoo.com/J2SnNA/y.lEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00161.e75ee4467e41dd1d5f5156f2b9ca5bd8 b/Ch3/datasets/spam/easy_ham/00161.e75ee4467e41dd1d5f5156f2b9ca5bd8 new file mode 100644 index 000000000..b15ebf8bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00161.e75ee4467e41dd1d5f5156f2b9ca5bd8 @@ -0,0 +1,86 @@ +From sentto-2242572-56020-1034080299-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 14:40:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id E4C0A16F18 + for ; Tue, 8 Oct 2002 14:39:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 14:39:50 +0100 (IST) +Received: from n2.grp.scd.yahoo.com (n2.grp.scd.yahoo.com [66.218.66.75]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g98CYoK15533 for + ; Tue, 8 Oct 2002 13:34:50 +0100 +X-Egroups-Return: sentto-2242572-56020-1034080299-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.96] by n2.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 12:31:39 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 12:31:39 -0000 +Received: (qmail 95890 invoked from network); 8 Oct 2002 12:31:39 -0000 +Received: from unknown (66.218.66.217) by m13.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 12:31:39 -0000 +Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by + mta2.grp.scd.yahoo.com with SMTP; 8 Oct 2002 12:31:38 -0000 +Received: from host217-35-11-51.in-addr.btopenworld.com ([217.35.11.51]) + by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17ytWT-0005ta-00 + for forteana@yahoogroups.com; Tue, 08 Oct 2002 13:31:38 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 08 Oct 2002 13:30:43 +0100 +Subject: [zzzzteana] Language problems +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g98CYoK15533 + +Ananova:  +Newspaper's readers complain over 'let's have sex' picture caption + +Readers of an African newspaper have complained after a picture caption +about jewellery contained the words "let's have sex". +The mix-up highlights the problems caused by the wide range of languages +spoken in Namibia. +Callers to the Namibian were angered by the use of the word tulumweni, which +translates roughly as "let's have intercourse" in the Oshiwambo language. +It was used in a caption concerning people in the Caprivi who use rings from +the femidon - female condom - as jewellery. +According to the The Namibian , an activist involved in care for Aids/HIV +patients spelt the word tulumweni for the journalist. +He intended it to mean "you will see for yourselves" in the Siyeyi tongue. +One caller said the complainants "should be considerate of other people's +languages. It is very clear that the picture was taken in the Caprivi ...And +that the word is from Siyeyi. It is not Oshiwambo". +Others indicated that various words might have different meanings in various +Namibian languages, such as omakende, an Oshiwambo word for glasses which in +Siyeyi means testicles. +Another word with a double-meaning is tulikunde, which in Oshiwambo +translates as let's talk, but which in Sisubiya translates as let's have +intercourse. +The Herero word for a hat is ekoli, which is an Oshiwambo word for a vagina. +Story filed: 12:37 Tuesday 8th October 2002 + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00162.02738313b3d9cf5812167de5493c6852 b/Ch3/datasets/spam/easy_ham/00162.02738313b3d9cf5812167de5493c6852 new file mode 100644 index 000000000..0d73f7036 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00162.02738313b3d9cf5812167de5493c6852 @@ -0,0 +1,79 @@ +From sentto-2242572-56021-1034080421-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 14:40:28 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 25B6416F17 + for ; Tue, 8 Oct 2002 14:39:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 14:39:49 +0100 (IST) +Received: from n38.grp.scd.yahoo.com (n38.grp.scd.yahoo.com + [66.218.66.106]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g98CX0K15512 for ; Tue, 8 Oct 2002 13:33:00 +0100 +X-Egroups-Return: sentto-2242572-56021-1034080421-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.199] by n38.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 12:33:42 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 12:33:41 -0000 +Received: (qmail 72027 invoked from network); 8 Oct 2002 12:33:40 -0000 +Received: from unknown (66.218.66.218) by m6.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 12:33:40 -0000 +Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by + mta3.grp.scd.yahoo.com with SMTP; 8 Oct 2002 12:33:40 -0000 +Received: from host217-35-11-51.in-addr.btopenworld.com ([217.35.11.51]) + by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17ytYR-0005ta-00 + for forteana@yahoogroups.com; Tue, 08 Oct 2002 13:33:39 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 08 Oct 2002 13:32:45 +0100 +Subject: [zzzzteana] Astro bits +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +HUBBLE SPOTS AN ICY WORLD FAR BEYOND PLUTO +------------------------------------------ +Astronomers have discovered a distant body that appears to be the +largest object in the Kuiper Belt, a body half the size of Pluto that +raises new questions about the definition of a planet. The icy world +2002 LM60 has been dubbed "Quaoar". + + http://spaceflightnow.com/news/n0210/07quaoar/ + + +ASTRONOMERS SLICE AND DICE GALAXIES +----------------------------------- +New views of star birth and the heart of a spiral galaxy have been +seen by a state-of-the-art astronomical instrument on its first +night. The new spectrometer has a revolutionary ability to 'slice' +any object in the sky into sections, producing a three dimensional +view of the conditions throughout entire galaxies in a single +observation. + + http://spaceflightnow.com/news/n0210/08galaxies/ + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Sell a Home with Ease! +http://us.click.yahoo.com/SrPZMC/kTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00163.550a6ef7fd451fba494cc3128aaf3c7c b/Ch3/datasets/spam/easy_ham/00163.550a6ef7fd451fba494cc3128aaf3c7c new file mode 100644 index 000000000..f5d9cdf68 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00163.550a6ef7fd451fba494cc3128aaf3c7c @@ -0,0 +1,88 @@ +From ilug-admin@linux.ie Tue Oct 8 14:39:45 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 895BC16F1B + for ; Tue, 8 Oct 2002 14:39:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 14:39:33 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98D0YK16320 for + ; Tue, 8 Oct 2002 14:00:34 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 9B636340D5; Tue, 8 Oct 2002 14:01:17 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from wstutil12a.ml.com (wstutil12a-v.ml.com [209.65.19.67]) by + lugh.tuatha.org (Postfix) with ESMTP id 03AE7340A2 for ; + Tue, 8 Oct 2002 14:00:52 +0100 (IST) +Received: from wstutil13a.ml.com (wstutil13a [146.125.185.11]) by + wstutil12a.ml.com (8.11.3/8.11.3/wstutil12a-1.2) with ESMTP id + g98D0oN09889 for ; Tue, 8 Oct 2002 09:00:50 -0400 (EDT) +Received: from ewstwt01.exchange.ml.com (ewstwt01.exchange.ml.com + [146.125.249.151]) by wstutil13a.ml.com (8.12.5/8.12.5/wstutil13a-1.1) + with SMTP id g98D0oTa022282 for ; Tue, 8 Oct 2002 09:00:50 + -0400 (EDT) +Received: from 169.243.202.61 by ewstwt01.exchange.ml.com with ESMTP ( + Tumbleweed MMS SMTP Relay (MMS v4.7);); Tue, 08 Oct 2002 08:59:03 -0400 +X-Server-Uuid: 3789b954-9c4e-11d3-af68-0008c73b0911 +Received: by dubim07742.ie.ml.com with Internet Mail Service ( + 5.5.2654.52) id ; Tue, 8 Oct 2002 14:00:50 +0100 +Message-Id: +From: "Breathnach, Proinnsias (Dublin)" +To: "Irish Linux Users Group" +Subject: RE: [ILUG] cheap linux PCs +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2654.52) +X-WSS-Id: 11BC091D161421-01-01 +Content-Type: text/plain; charset=iso-8859-1 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 14:00:48 +0100 +Date: Tue, 8 Oct 2002 14:00:48 +0100 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g98D0YK16320 + +Actually, I'd be more inclined to look into: + +http://www.theregister.co.uk/content/54/27489.html + +Avoiding giving any cash to a certain corporation + +P + +> -----Original Message----- +> >I'd normally never buy this but the Xbox is Eur300 on IOL's shop, a very +> >large company are making a loss on it and: +> > +> >http://xbox-linux.sourceforge.net/articles.php?aid=1&sub=Press%20Release% +> 3A%20Xbox%20Linux%20Mandrake%209%20Released +> > +> >Mandrake has been released for it. +> +> isn't it ¤250 in Smyths? +> +> don't forget to add to that the modchip, and the time to put it on. +> +> (/me thinks unless you want 3d graphics, www.mini-itx.com is the way to go +> :)) +> + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00164.8a0a728a1d5e56631369e5192f0348b6 b/Ch3/datasets/spam/easy_ham/00164.8a0a728a1d5e56631369e5192f0348b6 new file mode 100644 index 000000000..a8c8d5547 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00164.8a0a728a1d5e56631369e5192f0348b6 @@ -0,0 +1,99 @@ +From fork-admin@xent.com Tue Oct 8 14:40:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id A524E16F16 + for ; Tue, 8 Oct 2002 14:39:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 14:39:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g98DIUK16967 for ; + Tue, 8 Oct 2002 14:18:30 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 99D1A2940DA; Tue, 8 Oct 2002 06:18:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta6.snfc21.pbi.net (mta6.snfc21.pbi.net [206.13.28.240]) + by xent.com (Postfix) with ESMTP id 46C832940D1 for ; + Tue, 8 Oct 2002 06:17:30 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta6.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H3N006X7ZLZ03@mta6.snfc21.pbi.net> for fork@xent.com; Tue, + 08 Oct 2002 06:17:59 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: Re: why is decentralization worth worrying about? +To: Rohit Khare +Cc: fork@spamassassin.taint.org +Reply-To: gbolcer@endeavors.com +Message-Id: <3DA2D8B5.19DD480D@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +References: <2583F1FA-DA52-11D6-B1B1-000393A46DEA@alumni.caltech.edu> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 08 Oct 2002 06:08:05 -0700 + +Rohit Khare wrote: +> +> Why am I so passionate about decentralization? Because I believe some of +> today?s most profound problems with networked applications are caused by +> centralization. +> +> Generically, a centralized political or economic system permits only one +> answer to a question, while decentralization permits many separate +> agents to hold different opinions of the same matter. In the specific +> context of software, centralized variables can only contain one valid +> value at a time. That limits us to only representing information A) +> according to the beliefs of a single agency, and B) that changes more +> slowly than it takes to propagate. Nevertheless, centralization is the +> basis for today?s most popular architectural style for developing +> network applications: client-server interaction using request-response +> communication protocols. + +I think the ability to maintain an inconsistent database +is key to decentralization. + +Databases enforce consistenty with every transaction. +Bounded transactions, like an ATM, enforce consistency + by have some play with time and value +Most people keep inconsistent data in their heads, it's + called congnitive dissonance theory +Most businesses keep inconsistent data, documents, tationale + and ideas to support their work activities, it's called real life. + +I don't think it matters so much where it's located, i.e. +decentralization. I think that decentralization is the workaround +from technical limitations. The fallout being that the only way +inconsistent information spaces can be maintained is by +protecting them through a set of trust barriers and boundaries. +The local information when combined with the technical +troubles of providing "just enough" forced synchronization +to remote information provide workable data consistenty, i.e. +enforcing local constraints or ignoring global ones when +concerns are more immedidate. + +Tolerating temporary, irreconcilable deviations is how +people cope, otherwise you'd be like Nick Gatsby unnecessarily +pre-occupied with a spot of shaving cream on McKee's neck +who thinks that if he can just wipe that spot off that the +whole world would be a little more perfect and everything, +including his pre-occupation with Daisy, would consistently +be in its proper place. + +Greg + + diff --git a/Ch3/datasets/spam/easy_ham/00165.a626a87fa5b56f724e6a00e7c1ec163a b/Ch3/datasets/spam/easy_ham/00165.a626a87fa5b56f724e6a00e7c1ec163a new file mode 100644 index 000000000..3a6bf738d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00165.a626a87fa5b56f724e6a00e7c1ec163a @@ -0,0 +1,137 @@ +From sentto-2242572-56022-1034083283-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 14:40:51 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 0D86816F1C + for ; Tue, 8 Oct 2002 14:39:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 14:39:54 +0100 (IST) +Received: from n35.grp.scd.yahoo.com (n35.grp.scd.yahoo.com + [66.218.66.103]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g98DKgK16987 for ; Tue, 8 Oct 2002 14:20:42 +0100 +X-Egroups-Return: sentto-2242572-56022-1034083283-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.95] by n35.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 13:21:23 -0000 +X-Sender: andy@r2-dvd.org +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 13:21:22 -0000 +Received: (qmail 76967 invoked from network); 8 Oct 2002 13:21:22 -0000 +Received: from unknown (66.218.66.218) by m7.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 13:21:22 -0000 +Received: from unknown (HELO dulce.mic.dundee.ac.uk) (134.36.34.9) by + mta3.grp.scd.yahoo.com with SMTP; 8 Oct 2002 13:21:22 -0000 +Received: by dulce with Internet Mail Service (5.5.2653.19) id <4FSX3N41>; + Tue, 8 Oct 2002 14:20:43 +0100 +Message-Id: <31C6D68FA597D411B04D00E02965883BD23C3F@mailhost> +To: "'zzzzteana@yahoogroups.com'" +X-Mailer: Internet Mail Service (5.5.2653.19) +From: Andy +X-Yahoo-Profile: acobley +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 8 Oct 2002 14:20:39 +0100 +Subject: [zzzzteana] FW: please give generously +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g98DKgK16987 + + + +-----Original Message----- + +Subject: please give generously + +> > +> > +> > +> > Please give generously... +> > +> > URGENT - DUDLEY EARTHQUAKE APPEAL +> > +> > At 00:54 on Monday 23 September an earthquake measuring 4.8 on the +> > +> > Richter scale hit Dudley,UK causing untold disruption and distress - +> > +> > * Many were woken well before their giro arrived +> > +> > * Several priceless collections of mementos from the Balearics and +> > +> > Spanish costas were damaged +> > +> > * Three areas of historic and scientifically significant litter were +> > +> > disturbed +> > +> > * Thousands are confused and bewildered, trying to come to terms with +> > +> > the fact that something interesting has happened in Dudley +> > +> > One resident, Donna-Marie Dutton, a 17 year old mother-of-three said "It +> > +> > was such a shock, little Chantal-Leanne came running into my bedroom +> > +> > crying. My youngest two, Tyler-Morgan and Megan-Storm slept through it. +> > +> > I was still shaking when I was watching Trisha the next morning." +> > +> > Apparently though, looting did carry on as normal. +> > +> > The British Red Cross have so far managed to ship 4000 crates of Sunny +> > +> > Delight to the area to help the stricken masses. +> > +> > Rescue workers are still searching through the rubble and have found +> > +> > large quantities of personal belongings including benefit books and +> > +> > jewellery from Elizabeth Duke at Argos. +> > +> > HOW YOU CAN HELP +> > +> > * £2 buys chips, scraps and blue pop for a family of four +> > +> > * £10 can take a family to Stourport for the day, where children can +> > +> > play on an unspoiled canal bank among the national collection of +> > +> > stinging nettles +> > +> > * 22p buys a biro for filling in a spurious compensation claim +> > +> > PLEASE ACT NOW +> > +> > Simply email us by return with your credit card details and we'll do the +> > +> > rest! If you prefer to donate cash, there are collection points +> > +> > available at your local branches of Argos, Iceland and Clinton Cards. +> > + + + + +_________________________________________________________________ +Join the world's largest e-mail service with MSN Hotmail. +http://www.hotmail.com + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Home Selling? Try Us! +http://us.click.yahoo.com/QrPZMC/iTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00166.8feace9f17d092d9532e62c35c37ce95 b/Ch3/datasets/spam/easy_ham/00166.8feace9f17d092d9532e62c35c37ce95 new file mode 100644 index 000000000..f43d4d869 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00166.8feace9f17d092d9532e62c35c37ce95 @@ -0,0 +1,2048 @@ +From guterman@mediaunspun.imakenews.net Tue Oct 8 14:39:42 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id B88C516F17 + for ; Tue, 8 Oct 2002 14:39:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 14:39:13 +0100 (IST) +Received: from eng.imakenews.com (mailservice4.imakenews.com + [65.214.33.17]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g98DNHK17023 for ; Tue, 8 Oct 2002 14:23:17 +0100 +Received: by eng.imakenews.com (PowerMTA(TM) v1.5); Tue, 8 Oct 2002 + 09:22:59 -0400 (envelope-from ) +Content-Transfer-Encoding: binary +Content-Type: multipart/alternative; + boundary="----------=_1034083278-26594-4"; + charset="iso-8859-1" +Date: Tue, 08 Oct 2002 09:21:18 -0400 +Errors-To: +From: "Media Unspun" +MIME-Version: 1.0 +Message-Id: <26594$1034083278$mediaunspun$5114587@imakenews.net> +Precedence: normal +Reply-To: "Media Unspun" +Sender: "Media Unspun" +Subject: Bush Covers the Waterfront +To: zzzz-unspun@spamassassin.taint.org +X-Imn: mediaunspun,224536,5114587,0 + +This is a multi-part message in MIME format... + +------------=_1034083278-26594-4 +Content-Type: text/plain; charset="iso-8859-1" +Content-Disposition: inline +Content-Transfer-Encoding: 7bit + +To view this newsletter in full-color: +http://newsletter.mediaunspun.com/index000021410.cfm + +Media Unspun +What the Press is Reporting and Why (www.mediaunspun.com) +----------------------------------------------------------------- +October 8, 2002 + +----------------------------------------------------------------- +IN THIS ISSUE +----------------------------------------------------------------- +* BUSH COVERS THE WATERFRONT +* THE BIGGEST CABLE HOOKUP + +----------------------------------------------------------------- +EDITOR'S NOTE +----------------------------------------------------------------- +Is Media Unspun useful to you? Then pass it on to a colleague. +The more readers we have, the more successful we'll be. The more +successful we are, the more useful we can be to you. Pass it +on! + +Media Unspun serves business news and analysis, authoritatively +and irreverently, every business day. An annual subscription +costs $50, less than a dollar a week. If your four-week free +trial is coming to an end soon, please visit +http://www.mediaunspun.com/subscribe.html and sign up via credit card +or check. + + +----------------------------------------------------------------- +ADVERTISEMENT +----------------------------------------------------------------- +Pop!Tech 2002 +October 18 - 20, 2002: Camden, Maine +Join 500 big thinkers to discuss +the collision of technology and culture +Register now at: http://www.poptech.org + + +----------------------------------------------------------------- +BUSH COVERS THE WATERFRONT +----------------------------------------------------------------- +It may seem like all Iraq, all the time in the Oval Office, but +the president has at least one other thing on his mind this +week: that pesky port lockout. The freight still isn't moving, +factories are running out of parts, produce is rotting, and +retailers are more freaked about Christmas with every passing +day. + +On Monday, Bush stepped in and appointed a three-member panel to +see how badly this shutdown is hosing the economy. (We hope this +isn't a difficult question, as the panel's been given all of one +day to report back.) When Bush gets the report on Tuesday, the +next step might be a court order to reopen the ports under the +1947 Taft-Hartley Act. That would send employees back to work +for 80 days while federal mediators duke it out over the +disputed contract and retailers lower their Xanax dosages. + +Invoking Taft-Hartley requires a threat to national health or +safety -- not the economy. But Labor Secretary Elaine Chao +covered that base in a statement on Monday, saying the work +stoppage threatens the flow of supplies to the military (we knew +Iraq would be in here somewhere). "Union officials quickly +responded that their members have been unloading military cargo +throughout the 10-day shutdown," said the L.A. Times, but an +anonymous Bush administration official "said that only a portion +of what the Defense Department needs has made it ashore." + +Politically, this has been a tricky one. Using Taft-Hartley +would annoy labor right before congressional elections. On the +other hand, "Voter discontent with Bush's handling of the +increasingly fragile economic recovery has begun showing up in +polls, and such concerns may have outweighed the political +danger to the Republican administration," said the San Francisco +Chronicle. Also, Bush stepped in on the same day that a poll +reported two-thirds of Americans wanted him to focus more on the +economy. "Though the administration promised an unbiased +examination of the lockout, Bush appeared to have made up his +mind that it was hurting national security and the economy, +andmerited federal intervention," said the AP. + +As for Taft-Hartley, it's not exactly famous for solving labor +disputes. Often the 80-day cooling-off period ends, and workers +simply walk out again (or get locked out again, in this case). +One gets the sense, however, that fixing the dockworkers' +contract isn't the point of this particular 80 days. It's 78 +days until Christmas. The race is on. - Jen Muehlbauer + +President Acts To Halt Port Lockout for 80 Days (Seattle +Times) +http://tinyurl.com/1usn + +Bush Expected To Act on Ports Crisis +http://www.accessatlanta.com/ajc/business/1002/08ports.html + +President Moves Toward Forcing the Reopening of West Coast +Ports +http://www.latimes.com/business/la-fi-ports8oct08001439,0,1021983.story + + +Bush Takes Step Toward Halting Lockout After West Coast Port +Talks Break Off (AP) +http://tinyurl.com/1usk + +White House Intervenes on Docks Dispute (Financial Times) +http://tinyurl.com/1usm + +Cooling-off Period Likely in Port Fight (SF Chronicle) +http://tinyurl.com/1usp + +Bush Moves Toward Halting Port Shutdown +http://www.nytimes.com/2002/10/08/national/08PORT.html + +Trouble On The Docks +http://online.wsj.com/page/0,,2_0864,00.html +(Paid subscription required.) + +Charges of Politics Have Dogged Taft-Hartley Act +http://seattlepi.nwsource.com/business/90243_hartley08.shtml + +Taft-Hartley Act No Quick-Fix For Port Dispute (Reuters) +http://www.forbes.com/work/newswire/2002/10/02/rtr739458.html + + +----------------------------------------------------------------- +ADVERTISEMENT +----------------------------------------------------------------- +SPECIAL OFFER! Save 24% on a subscription to MIT TECHNOLOGY +REVIEW. Get an inside view into the technologies, deals, and +companies emerging from one of the leading research institutes +-- MIT. +http://www.technologyinsider.com/new/news1 + +----------------------------------------------------------------- +THE BIGGEST CABLE HOOKUP +----------------------------------------------------------------- +wo birds want to join forces and the FCC is about to cry "fowl." +We mean "foul." The two dominant direct broadcast satellite +players want to join forces, the better to compete with Big +Cable. Federal regulators, both the FCC and the Justice +Department, are concerned that the resulting conglomerate of +DirecTV with Dish Network would command roughly 95% of satellite +service in the US. + +The press could not settle on a price tag for the proposed +merger between EchoStar Communications and Hughes Electronics -- +it was described as being worth anywhere from $15 billion and +$25 billion. It was a challenge to keep the players straight, as +some outlets talked of a merger between the corporate parents, +and others referred to the service monikers. Hughes is DirecTV +and EchoStar is Dish. All straight? + +The two companies sent a letter to the FCC urging them to hold +off ruling on (read, rejecting) the merger until the Justice +Department has spoken. EchoStar and Hughes offered unspecified +"major revisions" to the deal that they want to discuss with +Justice in the next weeks. + +The Wall Street Journal delved deeply into the form those +revisions could take -- specifically, selling some frequencies +to Cablevision. The Journal reported that Cablevision has wanted +to get into the satellite business for 10 years and outlined the +cable company's plans and past spending on such a project. + +TheStreet.com turned in an extensive analysis of the deal for +investors in the satellite space. It seems the market for +expanded-service television may be nearing saturation. +TheStreet.com quoted an analyst's report which concluded, +"Consumers should benefit from ... continued rivalry, but +shareholders may realize much smaller returns." + +The New York Times and the Journal both mentioned Rupert Murdoch +waiting in the wings. Last year Murdoch's News Corp. bid for +DirecTV, but lost out at the last minute to EchoStar. If the +current deal falls through, he'll be back. - Keith Dawson + +EchoStar and Hughes Propose Concessions in Bid to Save Deal +http://online.wsj.com/article/0,,SB103403314258094560,00.html +(Paid subscription required) + +Regulators Set to Block EchoStar's Hughes Purchase +http://online.wsj.com/article/0,,SB1033939901346228393,00.html +(Paid subscription required) + +'Last-ditch effort' (Rocky Mountain News) +http://tinyurl.com/1upi + +EchoStar, Hughes See a Glimmer of Hope +http://www.thestreet.com/tech/georgemannes/10046366.html + +F.C.C. Asked to Put Off Merger Ruling +http://www.nytimes.com/2002/10/08/business/media/08BIRD.html + +EchoStar, Hughes ask FCC to defer decision +http://www.nypost.com/business/59145.htm + +EchoStar, Hughes offer merger changes (Reuters) +http://news.com.com/2100-1023-961138.html + +Delay in satellite-TV merger OK requested (AP) +http://www.bayarea.com/mld/mercurynews/business/4236430.htm + +EchoStar, Hughes Seek to Delay Ruling +http://www.latimes.com/technology/la-fi-echo8oct08,0,3454976.story + + +EchoStar pleads to FCC on merger (Denver Post) +http://tinyurl.com/1ut7 + +----------------------------------------------------------------- +OTHER STORIES +----------------------------------------------------------------- +SEC Probes AOL-Oxygen Pact For Double-Booking of Revenue +http://online.wsj.com/article/0,,SB1033938113684731193,00.html +(Paid subscription required.) + +Tivo Raises $25 Million in Stock Offering (AP) +http://www.siliconvalley.com/mld/siliconvalley/4235118.htm + +WorldCom Officer Pleads Guilty to Fraud +http://www.washingtonpost.com/wp-dyn/articles/A57300-2002Oct7.html + + +Two Magazines Are Shut and a Third Revamps +http://www.nytimes.com/2002/10/08/business/media/08MAG.html + +Regulators Say They Have CSFB 'Smoking Gun' +http://www.usatoday.com/money/industries/banking/2002-10-06-csfb_x.htm + + +Expected Cold Winter Could Increase Natural Gas Prices +http://www.accessatlanta.com/ajc/business/1002/08gas.html + +Frozen World Found Beyond Pluto +http://www.msnbc.com/news/818195.asp + +Fool Me Once +http://www.nytimes.com/2002/10/08/opinion/08KRUG.html + +New Northwest System for Internet Bookings +http://www.nytimes.com/2002/10/08/business/08MEMO.html + +The Fastest-Growing Tech Companies +http://www.business2.com/b2100/0,,1-1,00.html + +Debating the Baby Bells +http://www.nytimes.com/2002/10/07/business/07PLAC.html +(Paid subscription required) + +Silicon Valley Is Yearning For User-Friendly Microsoft +http://online.wsj.com/article/0,,SB1034036651300028760,00.html +(Paid subscription required) + +----------------------------------------------------------------- + +----------------------------------------------------------------- +Do you want to reach the Net's savviest audience? +Advertise in Media Unspun. +Contact Erik Vanderkolk for details at erikvanderkolk@yahoo.com +today. + +----------------------------------------------------------------- +STAFF +----------------------------------------------------------------- +Written by Deborah Asbrand (dasbrand@world.std.com), Keith +Dawson (dawson@world.std.com), Jen Muehlbauer +(jen@englishmajor.com), and Lori Patel (loripatel@hotmail.com). + +Copyedited by Jim Duffy (jimduffy86@yahoo.com). +Advertising: Erik Vanderkolk (erikvanderkolk@yahoo.com). +Editor and publisher: Jimmy Guterman (guterman@vineyard.com). + +Media Unspun is produced by The Vineyard Group Inc. +Copyright 2002 Media Unspun, Inc., and The Vineyard Group, Inc. + +Subscribe already, willya? http://www.mediaunspun.com + +Redistribution by email is permitted as long as a link to +http://newsletter.mediaunspun.com is included. + + +-|________________ +POWERED BY: http://www.imakenews.com +To be removed from this list, use this link: +http://www.imakenews.com/eletra/remove.cfm?x=mediaunspun%2Czzzz-unspun@spamassassin.taint.org +To receive future messages in HTML format, use this link: +http://www.imakenews.com/eletra/change.cfm?x=mediaunspun%2Czzzz-unspun@spamassassin.taint.org%2Chtm +To change your subscriber information, use this link: +http://www.imakenews.com/eletra/update.cfm?x=mediaunspun%2Czzzz-unspun@spamassassin.taint.org + + +------------=_1034083278-26594-4 +Content-Type: text/html; charset="iso-8859-1" +Content-Disposition: inline +Content-Transfer-Encoding: 7bit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Media Unspun + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + +
+ + + + + + + + + + + + + + + Pass it on... + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + Media Unspun
+ +
+ + + + + What the Press is Reporting and Why (www.mediaunspun.com) + + + + +

+ + + + + + + + Tuesday, October 8, 2002 + + + + + + + + + + +
+ +
+ + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + +
Top Spins...
+ + +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + Bush Covers the Waterfront + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + The Biggest Cable Hookup + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + Other Stories + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + +
+ + + + + + + + + + Editor's Note + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Is Media Unspun useful to you? Then pass it on to a colleague. The more readers we have, the more successful we'll be. The more successful we are, the more useful we can be to you. Pass it on!

+Media Unspun serves business news and analysis, authoritatively and irreverently, every business day. An annual subscription costs $50, less than a dollar a week. If your four-week free trial is coming to an end soon, please visit http://www.mediaunspun.com/subscribe.html and sign up via credit card or check.
+

+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sponsor + +
+ + +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Pop!Tech 2002
+October 18 - 20, 2002: Camden, Maine
+Join 500 big thinkers to discuss
+the collision of technology and culture
+Register now at: http://www.poptech.org
+

+ +
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+ + + + + + + + + + Bush Covers the Waterfront + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

It may seem like all Iraq, all the time in the Oval Office, but the president has at least one other thing on his mind this week: that pesky port lockout. The freight still isn't moving, factories are running out of parts, produce is rotting, and retailers are more freaked about Christmas with every passing day.

+On Monday, Bush stepped in and appointed a three-member panel to see how badly this shutdown is hosing the economy. (We hope this isn't a difficult question, as the panel's been given all of one day to report back.) When Bush gets the report on Tuesday, the next step might be a court order to reopen the ports under the 1947 Taft-Hartley Act. That would send employees back to work for 80 days while federal mediators duke it out over the disputed contract and retailers lower their Xanax +dosages.

+Invoking Taft-Hartley requires a threat to national health or safety -- not the economy. But Labor Secretary Elaine Chao covered that base in a statement on Monday, saying the work stoppage threatens the flow of supplies to the military (we knew Iraq would be in here somewhere). "Union officials quickly responded that their members have been unloading military cargo throughout the 10-day shutdown," said the L.A. Times, but an anonymous Bush administration official "said that only a portion of +what the Defense Department needs has made it ashore."

+Politically, this has been a tricky one. Using Taft-Hartley would annoy labor right before congressional elections. On the other hand, "Voter discontent with Bush's handling of the increasingly fragile economic recovery has begun showing up in polls, and such concerns may have outweighed the political danger to the Republican administration," said the San Francisco Chronicle. Also, Bush stepped in on the same day that a poll reported two-thirds of Americans wanted him to focus more on the +economy. "Though the administration promised an unbiased examination of the lockout, Bush appeared to have made up his mind that it was hurting national security and the economy, andmerited federal intervention," said the AP.

+As for Taft-Hartley, it's not exactly famous for solving labor disputes. Often the 80-day cooling-off period ends, and workers simply walk out again (or get locked out again, in this case). One gets the sense, however, that fixing the dockworkers' contract isn't the point of this particular 80 days. It's 78 days until Christmas. The race is on. - Jen Muehlbauer

+President Acts To Halt Port Lockout for 80 Days (Seattle Times)
+http://tinyurl.com/1usn

+Bush Expected To Act on Ports Crisis
+http://www.accessatlanta.com/ajc/business/1002/08ports.html

+President Moves Toward Forcing the Reopening of West Coast Ports
+http://www.latimes.com/business/la-fi-ports8oct08001439,0,1021983.story

+Bush Takes Step Toward Halting Lockout After West Coast Port Talks Break Off (AP)
+http://tinyurl.com/1usk

+White House Intervenes on Docks Dispute (Financial Times)
+http://tinyurl.com/1usm

+Cooling-off Period Likely in Port Fight (SF Chronicle)
+http://tinyurl.com/1usp

+Bush Moves Toward Halting Port Shutdown
+http://www.nytimes.com/2002/10/08/national/08PORT.html

+Trouble On The Docks
+http://online.wsj.com/page/0,,2_0864,00.html
+(Paid subscription required.)

+Charges of Politics Have Dogged Taft-Hartley Act
+http://seattlepi.nwsource.com/business/90243_hartley08.shtml

+Taft-Hartley Act No Quick-Fix For Port Dispute (Reuters)
+http://www.forbes.com/work/newswire/2002/10/02/rtr739458.html
+

+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sponsor + +
+ + +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

SPECIAL OFFER! Save 24% on a subscription to MIT TECHNOLOGY REVIEW. Get an inside view into the technologies, deals, and companies emerging from one of the leading research institutes -- MIT.
+http://www.technologyinsider.com/new/news1

+ +
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + The Biggest Cable Hookup + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

wo birds want to join forces and the FCC is about to cry "fowl." We mean "foul." The two dominant direct broadcast satellite players want to join forces, the better to compete with Big Cable. Federal regulators, both the FCC and the Justice Department, are concerned that the resulting conglomerate of DirecTV with Dish Network would command roughly 95% of satellite service in the US.

+The press could not settle on a price tag for the proposed merger between EchoStar Communications and Hughes Electronics -- it was described as being worth anywhere from $15 billion and $25 billion. It was a challenge to keep the players straight, as some outlets talked of a merger between the corporate parents, and others referred to the service monikers. Hughes is DirecTV and EchoStar is Dish. All straight?

+The two companies sent a letter to the FCC urging them to hold off ruling on (read, rejecting) the merger until the Justice Department has spoken. EchoStar and Hughes offered unspecified "major revisions" to the deal that they want to discuss with Justice in the next weeks.

+The Wall Street Journal delved deeply into the form those revisions could take -- specifically, selling some frequencies to Cablevision. The Journal reported that Cablevision has wanted to get into the satellite business for 10 years and outlined the cable company's plans and past spending on such a project.

+TheStreet.com turned in an extensive analysis of the deal for investors in the satellite space. It seems the market for expanded-service television may be nearing saturation. TheStreet.com quoted an analyst's report which concluded, "Consumers should benefit from ... continued rivalry, but shareholders may realize much smaller returns."

+The New York Times and the Journal both mentioned Rupert Murdoch waiting in the wings. Last year Murdoch's News Corp. bid for DirecTV, but lost out at the last minute to EchoStar. If the current deal falls through, he'll be back. - Keith Dawson

+EchoStar and Hughes Propose Concessions in Bid to Save Deal
+http://online.wsj.com/article/0,,SB103403314258094560,00.html
+(Paid subscription required)

+Regulators Set to Block EchoStar's Hughes Purchase
+http://online.wsj.com/article/0,,SB1033939901346228393,00.html
+(Paid subscription required)

+'Last-ditch effort' (Rocky Mountain News)
+http://tinyurl.com/1upi

+EchoStar, Hughes See a Glimmer of Hope
+http://www.thestreet.com/tech/georgemannes/10046366.html

+F.C.C. Asked to Put Off Merger Ruling
+http://www.nytimes.com/2002/10/08/business/media/08BIRD.html

+EchoStar, Hughes ask FCC to defer decision
+http://www.nypost.com/business/59145.htm

+EchoStar, Hughes offer merger changes (Reuters)
+http://news.com.com/2100-1023-961138.html

+Delay in satellite-TV merger OK requested (AP)
+http://www.bayarea.com/mld/mercurynews/business/4236430.htm

+EchoStar, Hughes Seek to Delay Ruling
+http://www.latimes.com/technology/la-fi-echo8oct08,0,3454976.story

+EchoStar pleads to FCC on merger (Denver Post)
+http://tinyurl.com/1ut7

+ +
+ + +
+
+ + + + + + + + + + Other Stories + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

SEC Probes AOL-Oxygen Pact For Double-Booking of Revenue
+http://online.wsj.com/article/0,,SB1033938113684731193,00.html
+(Paid subscription required.)

+Tivo Raises $25 Million in Stock Offering (AP)
+http://www.siliconvalley.com/mld/siliconvalley/4235118.htm

+WorldCom Officer Pleads Guilty to Fraud
+http://www.washingtonpost.com/wp-dyn/articles/A57300-2002Oct7.html

+Two Magazines Are Shut and a Third Revamps
+http://www.nytimes.com/2002/10/08/business/media/08MAG.html

+Regulators Say They Have CSFB 'Smoking Gun'
+http://www.usatoday.com/money/industries/banking/2002-10-06-csfb_x.htm

+Expected Cold Winter Could Increase Natural Gas Prices
+http://www.accessatlanta.com/ajc/business/1002/08gas.html

+Frozen World Found Beyond Pluto
+http://www.msnbc.com/news/818195.asp

+Fool Me Once
+http://www.nytimes.com/2002/10/08/opinion/08KRUG.html

+New Northwest System for Internet Bookings
+http://www.nytimes.com/2002/10/08/business/08MEMO.html

+The Fastest-Growing Tech Companies
+http://www.business2.com/b2100/0,,1-1,00.html

+Debating the Baby Bells
+http://www.nytimes.com/2002/10/07/business/07PLAC.html
+(Paid subscription required)

+Silicon Valley Is Yearning For User-Friendly Microsoft
+http://online.wsj.com/article/0,,SB1034036651300028760,00.html
+(Paid subscription required)

+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sponsor + +
+ + +
+ + + + + + + + + + + + +
+ + + + + + + + Do you want to reach the Net's savviest audience?
+Advertise in Media Unspun.
+Contact Erik Vanderkolk for details at erikvanderkolk@yahoo.com today. + +
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+ + + + + + + + + + Staff + + + + + + + + + +
+ + + + + + + + Written by Deborah Asbrand (dasbrand@world.std.com), Keith Dawson (dawson@world.std.com), Jen Muehlbauer (jen@englishmajor.com), and Lori Patel (loripatel@hotmail.com). +

+Copyedited by Jim Duffy (jimduffy86@yahoo.com). +

+Advertising: Erik Vanderkolk (erikvanderkolk@yahoo.com). +

+Editor and publisher: Jimmy Guterman (guterman@vineyard.com). +

+Media Unspun is produced by The Vineyard Group Inc. +
Copyright 2002 Media Unspun, Inc., and The Vineyard Group, Inc. +
Subscribe already, willya? http://www.mediaunspun.com +

+Redistribution by email is permitted as long as a link to http://newsletter.mediaunspun.com is included. + +
+ + +
+

+ +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + + +
+ + + Subscribe + + +
+ + + + + + + + + + + + + + + + +
+ +

+Enter your email address in the box below to receive a free four-week trial of Media Unspun: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+ + + + + Add + + + + + + Remove
+ + + + Send as HTML
+ +   + +

+ + + +
+ + +
+
+


Newsletter Services
Provided by
iMakeNews.com

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
Advertisement
+ +
+
+ + + + + + + + + + + + +
+ + + + +
+ + +
+ +
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + +
+ + + + + + + + + + + + + + + Tell a Friend... + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +
Powered by iMakeNews.com
+ This email was sent to: zzzz-unspun@spamassassin.taint.org
(REMOVE) - to be instantly deleted from this list.
(CHANGE FORMAT) - receive future messages in plain text format.
(UPDATE) your subscriber information and preferences.
+ + + + + + +

  + + + + + +

+ + + + + +
+ + + + + + + +------------=_1034083278-26594-4-- + + diff --git a/Ch3/datasets/spam/easy_ham/00167.ae9235b61c9e2fb740bfe4b0b3d703da b/Ch3/datasets/spam/easy_ham/00167.ae9235b61c9e2fb740bfe4b0b3d703da new file mode 100644 index 000000000..cddfbf2aa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00167.ae9235b61c9e2fb740bfe4b0b3d703da @@ -0,0 +1,69 @@ +From sentto-2242572-56023-1034083490-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 14:40:54 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id BAD3F16F21 + for ; Tue, 8 Oct 2002 14:39:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 14:39:55 +0100 (IST) +Received: from n4.grp.scd.yahoo.com (n4.grp.scd.yahoo.com [66.218.66.88]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g98DYTK17380 for + ; Tue, 8 Oct 2002 14:34:30 +0100 +X-Egroups-Return: sentto-2242572-56023-1034083490-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.196] by n4.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 13:24:50 -0000 +X-Sender: tom@swirly.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 13:24:49 -0000 +Received: (qmail 78721 invoked from network); 8 Oct 2002 13:24:48 -0000 +Received: from unknown (66.218.66.217) by m3.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 13:24:48 -0000 +Received: from unknown (HELO crank.slack.net) (166.84.151.181) by + mta2.grp.scd.yahoo.com with SMTP; 8 Oct 2002 13:24:48 -0000 +Received: from [10.0.0.153] (pool-162-84-145-37.ny5030.east.verizon.net + [162.84.145.37]) by crank.slack.net (Postfix) with ESMTP id BA2F63EB37; + Tue, 8 Oct 2002 09:29:42 -0400 (EDT) +X-Sender: secret@ax.to +Message-Id: +In-Reply-To: +References: +To: fort@yahoogroups.com, zzzzteana@yahoogroups.com +From: Tom Ritchford +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 8 Oct 2002 09:24:39 -0400 +Subject: [zzzzteana] Pravda reports cities on the moon! +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +From: Steve Speer +Subject: http://english.pravda.ru/main/2002/10/05/37771.html + +[not sure what the rules for crossposting between the two groups is... + my reasoning is that it's a major newspaper reporting evidence of + alien life so.... /t] +-- + +http://loopNY.com ......................An "open loop": shows every Saturday! +http://extremeNY.com/submit .......................... submit to the calendar. + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Sell a Home with Ease! +http://us.click.yahoo.com/SrPZMC/kTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00168.a13640e4b9528891d2e6690008307683 b/Ch3/datasets/spam/easy_ham/00168.a13640e4b9528891d2e6690008307683 new file mode 100644 index 000000000..34034c53e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00168.a13640e4b9528891d2e6690008307683 @@ -0,0 +1,81 @@ +From ilug-admin@linux.ie Tue Oct 8 14:39:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 8E9EA16F1E + for ; Tue, 8 Oct 2002 14:39:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 14:39:36 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98DRQK17284 for + ; Tue, 8 Oct 2002 14:27:26 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 13280341E1; Tue, 8 Oct 2002 14:28:11 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from homer.jinny.ie (homer.jinny.ie [193.120.171.3]) by + lugh.tuatha.org (Postfix) with ESMTP id 7F96E340A2 for ; + Tue, 8 Oct 2002 14:27:40 +0100 (IST) +Received: from barney (fw.jinny.ie [193.120.171.2]) by homer.jinny.ie + (Postfix) with ESMTP id 505297FC46 for ; Tue, + 8 Oct 2002 14:27:39 +0100 (IST) +Received: from john by barney with local (Exim 3.35 #1 (Debian)) id + 17yuOi-0006Yc-00 for ; Tue, 08 Oct 2002 14:27:40 +0100 +From: "John P. Looney" +To: Irish LUG list +Message-Id: <20021008132740.GG23820@jinny.ie> +Reply-To: ilug@linux.ie +Mail-Followup-To: Irish LUG list +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.3.28i +X-Os: /Linux 2.4.18 +X-Url: http://www.redbrick.dcu.ie/~valen +X-Gnupg-Publickey: http://www.redbrick.dcu.ie/~valen/public.asc +Subject: [ILUG] cups question +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 14:27:40 +0100 +Date: Tue, 8 Oct 2002 14:27:40 +0100 + + I seem to be having a little trouble with it. My printers.conf is: + + +Info Hp4050 +Location locals +DeviceURI ipp://192.168.2.90:9100/ +State Idle +Accepting Yes +JobSheets none none +QuotaPeriod 0 +PageLimit 0 +KLimit 0 + + + and cupds uses that to make a printcap of: + +lp: + + Sounds dodgy to me. If someone has an example printers.conf/printcap for +a JetDirect printer, I'd appreciate it if they sent it on. + +John + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00169.efbfc0b209eeae7c4c08e5ff14d539a8 b/Ch3/datasets/spam/easy_ham/00169.efbfc0b209eeae7c4c08e5ff14d539a8 new file mode 100644 index 000000000..985138862 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00169.efbfc0b209eeae7c4c08e5ff14d539a8 @@ -0,0 +1,78 @@ +From ilug-admin@linux.ie Tue Oct 8 14:40:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 90DCC16F20 + for ; Tue, 8 Oct 2002 14:39:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 14:39:39 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98DaRK17431 for + ; Tue, 8 Oct 2002 14:36:27 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 01CDA341FE; Tue, 8 Oct 2002 14:37:11 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from urhosting.urhosting.com (urhosting.urhosting.com + [216.71.84.141]) by lugh.tuatha.org (Postfix) with ESMTP id 702FB341E1 for + ; Tue, 8 Oct 2002 14:36:37 +0100 (IST) +Received: from [192.168.1.31] (r96-70.bas1.srl.dublin.eircom.net + [159.134.96.70]) by urhosting.urhosting.com (8.11.6/8.11.6) with ESMTP id + g98DaX012629; Tue, 8 Oct 2002 08:36:34 -0500 +Subject: Re: [ILUG] mini-itx +From: Philip Trickett +To: John Moylan +Cc: ilug@linux.ie +In-Reply-To: <3DA2DA0E.6080402@rte.ie> +References: <3DA2DA0E.6080402@rte.ie> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 +Message-Id: <1034084194.6615.4.camel@unagi.internal.techworks.ie> +MIME-Version: 1.0 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 08 Oct 2002 14:36:33 +0100 +Date: 08 Oct 2002 14:36:33 +0100 + +On Tue, 2002-10-08 at 14:13, John Moylan wrote: +> Hmm, speaking of cheap machines etc, has anyone tried this sort of +> thing: http://www.mini-itx.com/projects/humidor64/ ? or more importantly +> has anyone had any positive/negative experiences with the Via mini-itx +> boards/via c3 processors. +> I recall a thread last year about building a custom MP3/CD/Game/vcd +> recorder machine, these systems seem to hit the mark. Also, I need to +> build a new box, and I was thinking about something that would be as +> unobtrusive as possible in my living room;) +> +> John + + +The forums there are very informative, and there is also more info on +using linux on the mini ITX boards at http://linitx.org/. + +A couple of the autopc projects make interesting reading in this regard: +http://thisstrife.com/ but most of them seem to use windows for some +unknown reason..... + +HTH + +Phil + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00170.14c40e625814c14dfe2eb997157c6437 b/Ch3/datasets/spam/easy_ham/00170.14c40e625814c14dfe2eb997157c6437 new file mode 100644 index 000000000..f45a70a01 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00170.14c40e625814c14dfe2eb997157c6437 @@ -0,0 +1,64 @@ +From solarion@1starnet.com Wed Aug 28 10:53:15 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 73AE143F99 + for ; Wed, 28 Aug 2002 05:53:14 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:53:14 +0100 (IST) +Received: from n14.grp.scd.yahoo.com (n14.grp.scd.yahoo.com + [66.218.66.69]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7RNccZ31295 for ; Wed, 28 Aug 2002 00:38:38 +0100 +X-Egroups-Return: sentto-2242572-53117-1030491524-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.200] by n14.grp.scd.yahoo.com with NNFMP; + 27 Aug 2002 23:38:44 -0000 +X-Sender: solarion@1starnet.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 27 Aug 2002 23:38:44 -0000 +Received: (qmail 18399 invoked from network); 27 Aug 2002 23:38:42 -0000 +Received: from unknown (66.218.66.217) by m8.grp.scd.yahoo.com with QMQP; + 27 Aug 2002 23:38:42 -0000 +Received: from unknown (HELO 1starnet.com) (207.243.104.35) by + mta2.grp.scd.yahoo.com with SMTP; 27 Aug 2002 23:38:42 -0000 +Received: from sweep2.1starnet.com [207.243.104.27] by 1starnet.com + (SMTPD32-7.12) id AD7FA80134; Tue, 27 Aug 2002 18:38:39 -0500 +Received: from [207.243.107.34] ([207.243.107.34]) by sweep2.1starnet.com + (NAVGW 2.5.2.12) with SMTP id M2002082718383006317 ; Tue, 27 Aug 2002 + 18:38:37 -0500 +X-Sender: solarion@mail.1starnet.com +Message-Id: +To: Tyana Archive , + Forteana +From: Rob Solarion +X-Yahoo-Profile: r_solarion +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 27 Aug 2002 18:40:01 -0600 +Subject: [zzzzteana] "Put this in your stereo and smoke it ... " +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://www.ouchytheclown.com/welcome.html + + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00171.71f0cff94c1091432c43111941bd015c b/Ch3/datasets/spam/easy_ham/00171.71f0cff94c1091432c43111941bd015c new file mode 100644 index 000000000..6443054a0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00171.71f0cff94c1091432c43111941bd015c @@ -0,0 +1,78 @@ +From wt046@victoria.tc.ca Wed Aug 28 10:53:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 519F443F99 + for ; Wed, 28 Aug 2002 05:53:26 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:53:26 +0100 (IST) +Received: from n3.grp.scd.yahoo.com (n3.grp.scd.yahoo.com [66.218.66.86]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7S1DuZ05312 for + ; Wed, 28 Aug 2002 02:13:56 +0100 +X-Egroups-Return: sentto-2242572-53123-1030497241-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.95] by n3.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 01:14:01 -0000 +X-Sender: wt046@vtn1.victoria.tc.ca +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 01:14:01 -0000 +Received: (qmail 65916 invoked from network); 28 Aug 2002 01:14:01 -0000 +Received: from unknown (66.218.66.216) by m7.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 01:14:01 -0000 +Received: from unknown (HELO vtn1.victoria.tc.ca) (199.60.222.3) by + mta1.grp.scd.yahoo.com with SMTP; 28 Aug 2002 01:14:00 -0000 +Received: from vtn1.victoria.tc.ca (wt046@localhost [127.0.0.1]) by + vtn1.victoria.tc.ca (8.12.5/8.12.5) with ESMTP id g7S1E0PL022778 for + ; Tue, 27 Aug 2002 18:14:00 -0700 (PDT) +Received: (from wt046@localhost) by vtn1.victoria.tc.ca + (8.12.5/8.12.3/Submit) id g7S1DxHq022777; Tue, 27 Aug 2002 18:13:59 -0700 + (PDT) +X-Sender: wt046@vtn1 +To: zzzzteana@yahoogroups.com +In-Reply-To: <4d.23215217.2a9d2f49@aol.com> +Message-Id: +From: Brian Chapman +X-Yahoo-Profile: mf8r31p +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 27 Aug 2002 18:13:59 -0700 (PDT) +Subject: Re: [zzzzteana] Not a materialisation, but a transfiguration +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +On Tue, 27 Aug 2002 MICGRANGER@aol.com wrote: + +> Concerning this mail, what is your intention? + +When posting to this list excerpts from books I've just read, I usually +refrain from adding any comments, letting the listmembers interpret them +as they see fit. + +But since you asked.... + +I chose to post this text simply because I thought it was a particularly +risible example of Doyle's invincible faith and his refusal to accept the +fucking obvious. + +bc + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00172.de357389925b5094f2e7ff3d1c20deb9 b/Ch3/datasets/spam/easy_ham/00172.de357389925b5094f2e7ff3d1c20deb9 new file mode 100644 index 000000000..7c0a3b4f2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00172.de357389925b5094f2e7ff3d1c20deb9 @@ -0,0 +1,92 @@ +From billjac@earthlink.net Wed Aug 28 10:53:21 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 69CD643F9B + for ; Wed, 28 Aug 2002 05:53:17 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:53:17 +0100 (IST) +Received: from n21.grp.scd.yahoo.com (n21.grp.scd.yahoo.com + [66.218.66.77]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S0P7Z03502 for ; Wed, 28 Aug 2002 01:25:07 +0100 +X-Egroups-Return: sentto-2242572-53121-1030494312-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.199] by n21.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 00:25:12 -0000 +X-Sender: billjac@earthlink.net +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 00:25:12 -0000 +Received: (qmail 93628 invoked from network); 28 Aug 2002 00:25:12 -0000 +Received: from unknown (66.218.66.217) by m6.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 00:25:12 -0000 +Received: from unknown (HELO scaup.mail.pas.earthlink.net) + (207.217.120.49) by mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 00:25:12 + -0000 +Received: from dialup-64.152.170.33.dial1.newyork1.level3.net + ([64.152.170.33] helo=oemcomputer) by scaup.mail.pas.earthlink.net with + smtp (Exim 3.33 #1) id 17jqdx-0001BR-00 for forteana@yahoogroups.com; + Tue, 27 Aug 2002 17:25:10 -0700 +Message-Id: <001501c24e28$d2c3c960$21aa9840@oemcomputer> +To: +References: <19-3D6AD80C-3146@storefull-2336.public.lawson.webtv.net> +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2919.6600 +X-Mimeole: Produced By Microsoft MimeOLE V5.00.2919.6600 +From: "Bill Jacobs" +X-Yahoo-Profile: billjac2000 +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 27 Aug 2002 14:42:46 -0400 +Subject: Re: [zzzzteana] Moon over ocean +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +David asked: +> My wife noticed something odd. The nearly-full moon was about 30 +> degrees above the horizon. There was a notable glow on the horizon, +> except under the moon. The moon seemed to be in a column of darkness +> that was about three times the apparent width of the moon. We could see +> the column over its entire length as a strip of sky darker than the sky +> around it. +> +> Any of you ever see this? Do you have any idea what could have caused +> it? I suspect it's due to some pecularity of the visual system, but +> have no clear idea. + +I'm surprised to not find this phenomenon in Corlis. I could have sworn I +saw it there. He does have the somewhat similar dark sky between a rainbow +and a secondary bow. I personally have seen a rainbow enclosing a +semi-circle of darker sky. + +I know I've read about pillars under the Sun and Moon elsewhere, but I can't +recall if they were reportedly dark or bright. I do know these sorts of +things are supposed to be quirks of optics not of the visual system. I'm +sorry I haven't got any answers, but a search through some books on +atmospheric optics ought to turn a few hints up. + +Bill + +William Jacobs +Freelance Unemployed Person + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00173.253a0161257f4fe309df9d9ffabd5ef3 b/Ch3/datasets/spam/easy_ham/00173.253a0161257f4fe309df9d9ffabd5ef3 new file mode 100644 index 000000000..b2c95461d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00173.253a0161257f4fe309df9d9ffabd5ef3 @@ -0,0 +1,83 @@ +From felinda@frogstone.net Wed Aug 28 10:53:37 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 26AE543F99 + for ; Wed, 28 Aug 2002 05:53:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:53:37 +0100 (IST) +Received: from n21.grp.scd.yahoo.com (n21.grp.scd.yahoo.com + [66.218.66.77]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S4cYZ10839 for ; Wed, 28 Aug 2002 05:38:34 +0100 +X-Egroups-Return: sentto-2242572-53125-1030509520-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.193] by n21.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 04:38:40 -0000 +X-Sender: felinda@frogstone.net +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 04:38:39 -0000 +Received: (qmail 36170 invoked from network); 28 Aug 2002 04:38:38 -0000 +Received: from unknown (66.218.66.218) by m11.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 04:38:38 -0000 +Received: from unknown (HELO mail2.athenet.net) (209.103.196.16) by + mta3.grp.scd.yahoo.com with SMTP; 28 Aug 2002 04:38:38 -0000 +Received: from [209.103.203.50] (209-103-203-50.dial-in1.osh.athenet.net + [209.103.203.50]) by mail2.athenet.net (8.11.6/8.11.6) with ESMTP id + g7S4cZt20363 for ; Tue, 27 Aug 2002 23:38:36 + -0500 +X-Sender: felinda@pop2.athenet.net +Message-Id: +In-Reply-To: +References: <5.1.0.14.1.20020828070650.02af5a70@mail.austarnet.com.au> + +To: zzzzteana@yahoogroups.com +From: That Goddess Chick +X-Yahoo-Profile: felinda +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 27 Aug 2002 23:38:48 -0500 +Subject: Re: [zzzzteana] Bad Buffalo +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +>peter fwded: +>>Finally, Constable Evans hurled a thong at the animal, hitting it on the +>>head. +> +>I know this isn't *quite* as funny to Australians as it is to +>everyone else. Honestly. +> +>Rachel +>not that walloping it with a flip-flop isn't hilarious too... +>-- + +well unless you used the thong like a sling shot..... +-- + + +Fel +http://www.frogstone.net +Weird Page: http://my.athenet.net/~felinda/WeirdPage.html + +[Non-text portions of this message have been removed] + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00174.ea47d0c060fa8ce10dfb448db1f27be8 b/Ch3/datasets/spam/easy_ham/00174.ea47d0c060fa8ce10dfb448db1f27be8 new file mode 100644 index 000000000..732fce236 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00174.ea47d0c060fa8ce10dfb448db1f27be8 @@ -0,0 +1,105 @@ +From jkahila@world.std.com Wed Aug 28 10:53:34 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 26F9944155 + for ; Wed, 28 Aug 2002 05:53:32 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:53:32 +0100 (IST) +Received: from n13.grp.scd.yahoo.com (n13.grp.scd.yahoo.com + [66.218.66.68]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S3q3Z09666 for ; Wed, 28 Aug 2002 04:52:03 +0100 +X-Egroups-Return: sentto-2242572-53124-1030506729-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.200] by n13.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 03:52:09 -0000 +X-Sender: jkahila@world.std.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 03:52:09 -0000 +Received: (qmail 34412 invoked from network); 28 Aug 2002 03:52:08 -0000 +Received: from unknown (66.218.66.217) by m8.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 03:52:08 -0000 +Received: from unknown (HELO TheWorld.com) (199.172.62.103) by + mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 03:52:08 -0000 +Received: from amdk62450 (ppp0c006.std.com [208.192.102.6]) by + TheWorld.com (8.9.3/8.9.3) with ESMTP id XAA29517 for + ; Tue, 27 Aug 2002 23:52:06 -0400 +To: +Message-Id: +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: <001501c24e28$d2c3c960$21aa9840@oemcomputer> +Importance: Normal +From: "John Kahila" +X-Yahoo-Profile: jkahila +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 27 Aug 2002 23:57:42 -0400 +Subject: RE: [zzzzteana] Moon over ocean +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +>David asked: +>> My wife noticed something odd. The nearly-full moon was about 30 +>> degrees above the horizon. There was a notable glow on the horizon, +>> except under the moon. The moon seemed to be in a column of darkness +>> that was about three times the apparent width of the moon. We could see +>> the column over its entire length as a strip of sky darker than the sky +>> around it. +>> +>> Any of you ever see this? Do you have any idea what could have caused +>> it? I suspect it's due to some pecularity of the visual system, but +>> have no clear idea. + +Bill Jacobs: +> I'm surprised to not find this phenomenon in Corlis. I could have sworn I +> saw it there. He does have the somewhat similar dark sky between a rainbow +> and a secondary bow. I personally have seen a rainbow enclosing a +> semi-circle of darker sky. +> +> I know I've read about pillars under the Sun and Moon elsewhere, +> but I can't recall if they were reportedly dark or bright. I do know +> these sorts of things are supposed to be quirks of optics not of the +> visual system. I'm sorry I haven't got any answers, but a search +> through some books on atmospheric optics ought to turn a few hints up. + +Some links: + +comprehensive +http://www.meteoros.de/indexe.htm + +Atmospheric Light Phenomena +http://www.auf.asn.au/meteorology/section12.html + +interesting observational stuff from the prior millenium including pix +(click 1997 / colour plates) +http://www.ursa.fi/ursa/jaostot/halot/ehp/index.html + +more pix, many of which flip to negative to highlight details (hover cursor) +http://idefix.taide.turkuamk.fi/~iluukkon/taivas/valok/88.html and +subsequent links + +john k + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00175.04e562a3e92558eef6aa45dd66a96564 b/Ch3/datasets/spam/easy_ham/00175.04e562a3e92558eef6aa45dd66a96564 new file mode 100644 index 000000000..c6f7fca2f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00175.04e562a3e92558eef6aa45dd66a96564 @@ -0,0 +1,77 @@ +From Stewart.Smith@ee.ed.ac.uk Wed Aug 28 10:53:44 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AFE0543F9B + for ; Wed, 28 Aug 2002 05:53:42 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:53:42 +0100 (IST) +Received: from n16.grp.scd.yahoo.com (n16.grp.scd.yahoo.com + [66.218.66.71]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S7xAZ15466 for ; Wed, 28 Aug 2002 08:59:10 +0100 +X-Egroups-Return: sentto-2242572-53126-1030521556-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.196] by n16.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 07:59:16 -0000 +X-Sender: Stewart.Smith@ee.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 07:59:14 -0000 +Received: (qmail 46517 invoked from network); 28 Aug 2002 07:59:14 -0000 +Received: from unknown (66.218.66.217) by m3.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 07:59:14 -0000 +Received: from unknown (HELO postbox.ee.ed.ac.uk) (129.215.80.253) by + mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 07:59:14 -0000 +Received: from ee.ed.ac.uk (sxs@dunblane [129.215.34.86]) by + postbox.ee.ed.ac.uk (8.11.0/8.11.0) with ESMTP id g7S7x8P07079 for + ; Wed, 28 Aug 2002 08:59:09 +0100 (BST) +Message-Id: <3D6C82CB.5040109@ee.ed.ac.uk> +Organization: Scottish Microelectronics Centre +User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.1b) Gecko/20020628 +X-Accept-Language: en, en-us +To: zzzzteana@yahoogroups.com +References: +From: Stewart Smith +X-Yahoo-Profile: stochasticus +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 08:59:07 +0100 +Subject: Re: [zzzzteana] Illusionist emerges after 24 hours underwater +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +> An illusionist has emerged after 24 hours underwater in a case in New York's +> Times Square. + +I'd just like to recommend the newest Viz to ukers just for the hilarious "David +Blaine: Stalag Magician". The ego'd one is in a WWII prison camp and sort of +trying to escape. Several times he seems to have escaped and the british +officers celebrate before it's revealed he's been buried alive or hiding in a +freezer. At one point he's asked why and says "Well it's not for publicity" +Cracking stuff. + +Stew +-- +Stewart Smith +Scottish Microelectronics Centre, University of Edinburgh. +http://www.ee.ed.ac.uk/~sxs/ + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00176.69b5e43c0fb4a313ba18a91c291b3bbc b/Ch3/datasets/spam/easy_ham/00176.69b5e43c0fb4a313ba18a91c291b3bbc new file mode 100644 index 000000000..a2031caa8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00176.69b5e43c0fb4a313ba18a91c291b3bbc @@ -0,0 +1,73 @@ +From Stewart.Smith@ee.ed.ac.uk Wed Aug 28 10:53:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 301D743F99 + for ; Wed, 28 Aug 2002 05:53:47 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:53:47 +0100 (IST) +Received: from n11.grp.scd.yahoo.com (n11.grp.scd.yahoo.com + [66.218.66.66]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S82gZ15666 for ; Wed, 28 Aug 2002 09:02:42 +0100 +X-Egroups-Return: sentto-2242572-53127-1030521768-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.196] by n11.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 08:02:48 -0000 +X-Sender: Stewart.Smith@ee.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 08:02:48 -0000 +Received: (qmail 52522 invoked from network); 28 Aug 2002 08:02:47 -0000 +Received: from unknown (66.218.66.217) by m3.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 08:02:47 -0000 +Received: from unknown (HELO postbox.ee.ed.ac.uk) (129.215.80.253) by + mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 08:02:47 -0000 +Received: from ee.ed.ac.uk (sxs@dunblane [129.215.34.86]) by + postbox.ee.ed.ac.uk (8.11.0/8.11.0) with ESMTP id g7S82kP07514 for + ; Wed, 28 Aug 2002 09:02:46 +0100 (BST) +Message-Id: <3D6C83A6.9040504@ee.ed.ac.uk> +Organization: Scottish Microelectronics Centre +User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.1b) Gecko/20020628 +X-Accept-Language: en, en-us +To: zzzzteana@yahoogroups.com +References: +From: Stewart Smith +X-Yahoo-Profile: stochasticus +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 09:02:46 +0100 +Subject: Re: [zzzzteana] The Coming Firestorm +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +> So now Osama bin Laden is Hitler. And Saddam Hussein is Hitler. And +> George Bush is fighting the Nazis. + +Someone should shout "Godwin!" at him at a press conference. Then he'd have to +shut up. Or does that only work on Usenet? + +Stew +-- +Stewart Smith +Scottish Microelectronics Centre, University of Edinburgh. +http://www.ee.ed.ac.uk/~sxs/ + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00177.22e75f7ffcce4664a3266d90a4b4266b b/Ch3/datasets/spam/easy_ham/00177.22e75f7ffcce4664a3266d90a4b4266b new file mode 100644 index 000000000..b07b943fe --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00177.22e75f7ffcce4664a3266d90a4b4266b @@ -0,0 +1,132 @@ +From robin.hill@baesystems.com Wed Aug 28 10:53:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6D00A44155 + for ; Wed, 28 Aug 2002 05:53:49 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:53:49 +0100 (IST) +Received: from n19.grp.scd.yahoo.com (n19.grp.scd.yahoo.com + [66.218.66.74]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S8G4Z16036 for ; Wed, 28 Aug 2002 09:16:04 +0100 +X-Egroups-Return: sentto-2242572-53128-1030522570-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.98] by n19.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 08:16:10 -0000 +X-Sender: robin.hill@baesystems.com +X-Apparently-To: zzzzteana@egroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 08:16:09 -0000 +Received: (qmail 70924 invoked from network); 28 Aug 2002 08:16:09 -0000 +Received: from unknown (66.218.66.217) by m15.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 08:16:09 -0000 +Received: from unknown (HELO smtp1.bae.co.uk) (20.138.254.61) by + mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 08:16:09 -0000 +Received: from ngbaux (ngbaux.msd.bae.co.uk [141.245.68.234]) by + smtp1.bae.co.uk (Switch-2.2.2/Switch-2.2.0) with ESMTP id g7S8G5t17586 for + ; Wed, 28 Aug 2002 09:16:05 +0100 (BST) +Received: from ngban12.ng.bae.co.uk ([141.245.68.238]) by + ngbaux.net.bae.co.uk (PMDF V5.2-33 #44998) with ESMTP id + <0H1J00AK7O7RP2@ngbaux.net.bae.co.uk> for forteana@egroups.com; + Wed, 28 Aug 2002 09:14:15 +0100 (BST) +Received: from ngbauh.ng.bae.co.uk (unverified) by ngban12.ng.bae.co.uk + (Content Technologies SMTPRS 2.0.15) with ESMTP id + for ; + Wed, 28 Aug 2002 09:14:25 +0100 +Received: (from x400@localhost) by ngbauh.ng.bae.co.uk (8.9.3 + (PHNE_18546)/8.8.6) id JAA24596 for forteana@egroups.com; Wed, + 28 Aug 2002 09:18:26 +0100 (BST) +Received: by GOLD 400; Wed, 28 Aug 2002 09:17:20 +0000 +To: zzzzteana@yahoogroups.com +Message-Id: <"020828081752Z.WT24519. 6*/PN=Robin.Hill/OU=Technical/OU=NOTES/O=BAe MAA/PRMD=BAE/ADMD=GOLD 400/C=GB/"@MHS> +X-Mailer: NetJunction (NetJunction 5.1.1-p2)/MIME +From: Robin Hill +X-Yahoo-Profile: sfgameruk +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 09:17:20 +0000 +Subject: [zzzzteana] re: Steam +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +On Tue, 27 Aug 2002 10:15:36 -0500 (EST) +Jay Lake wrote: + + + + +>Second, one could make the assumption that ancient or future civilizations +>would not be hydrocarbon based. There are alternative fuel sources, +>including seabed methane, biomass and all the usual suspects -- solar, +>hydro etc. Some of these could be exploited on a decidedly low-tech (ie, +>emergent civilization) basis. However, it is difficult to conceive of an +>industrial civilization that doesn't employ wheels, axles and bearings, +>all of which require lubrication. I'm not an engineer (Robin, anyone?) but +>it's my understanding that vegetable lubrication breaks down under stress, +>and that oil or graphite lubricants are the only reasonable choices for +>high temperature/high rotation applications, at least prior to extremely +>advanced modes of chemical synthesis. + +This is a good point. There are a lot of alternatives to hydrocarbon +products derived from petroleum, but these have often been developed as +a replacement for petroleum after the technology has been established - +there is a growing industry in plant-derived plastics and lubricants, +but this is to replicate materials that have been previously created +much more easily within the petrochemical industry. + +Vegetable-derived lubricants have been used. The Russians used sunflower +oil in the lubrication systems of tanks and trucks during the second world +war, and work is being done in the UK to produce diesel fuel derived from +waste cooking oil from fast-food restaurants. + +Jay's correct in his opinion that vegetable oil is not as durable as +petroleum oil, but this is only because of the lack of sophistication +of the chemistry involved. Synthetic fuels and lubricants are continuously +being developed, and I don't see any problems with synthetics ultimately +matching the performance of the more conventional products. As the rock +oil runs out, plant oil derivatives *will* be developed to fill the +gap. In parallel, changes will occur in the designs of the machines to +cope with any changes in performance of the lubricants. + +My big concern is if the technology were ever to be lost for some reason. +Re-creating a petrochemical industry from scratch without petrochemicals +(that is, going immediately to plant-based synthetics) would be extremely +difficult, especially if it were necessary to recreate *all* of the +petrochemical-derived products (not just lubricants and fuels). I suspect +that, bearing in mind the ingenuity of the human race, it would happen, +just at a different pace. Imagine an industrial revollution based on, +for example, methane from pig manure, or diesel oil from sunflowers. + +All we would then have to do is get used to all the machines smelling +like pig farms and fish and chip shops... + +Robin Hill, STEAMY BESS, Brough, East Yorkshire + + + +******************************************************************** +This email and any attachments are confidential to the intended +recipient and may also be privileged. If you are not the intended +recipient please delete it from your system and notify the sender. +You should not copy it or use it for any purpose nor disclose or +distribute its contents to any other person. +******************************************************************** + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00178.e021e35d6b9ec076f35e72ed932356e2 b/Ch3/datasets/spam/easy_ham/00178.e021e35d6b9ec076f35e72ed932356e2 new file mode 100644 index 000000000..0ab3f3ab2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00178.e021e35d6b9ec076f35e72ed932356e2 @@ -0,0 +1,94 @@ +From timc@2ubh.com Wed Aug 28 10:54:08 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A164A43F99 + for ; Wed, 28 Aug 2002 05:53:59 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:53:59 +0100 (IST) +Received: from n23.grp.scd.yahoo.com (n23.grp.scd.yahoo.com + [66.218.66.79]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S8PYZ16223 for ; Wed, 28 Aug 2002 09:25:34 +0100 +X-Egroups-Return: sentto-2242572-53129-1030523140-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.98] by n23.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 08:25:40 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 08:25:40 -0000 +Received: (qmail 78815 invoked from network); 28 Aug 2002 08:25:39 -0000 +Received: from unknown (66.218.66.217) by m15.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 08:25:39 -0000 +Received: from unknown (HELO gadolinium.btinternet.com) (194.73.73.111) by + mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 08:25:39 -0000 +Received: from host217-36-22-4.in-addr.btopenworld.com ([217.36.22.4]) by + gadolinium.btinternet.com with esmtp (Exim 3.22 #8) id 17jy8w-0003UK-00 + for forteana@yahoogroups.com; Wed, 28 Aug 2002 09:25:39 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 09:24:34 +0100 +Subject: [zzzzteana] Cambodian Buddhaas unearthed +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://news.bbc.co.uk/1/hi/world/asia-pacific/2220132.stm + +Tuesday, 27 August, 2002, 21:35 GMT 22:35 UK +Cambodia temple ruins yield treasure + +Workers clearing dense jungle near the ruins of an ancient pagoda in +northern Cambodia have unearthed 31 Buddha statues - 27 of them solid gold. +The statues - which are 10 centimetres (4 inches) tall - are in good +condition and believed to be hundreds of years old. +They were found on Saturday as workers were rebuilding the Po Pich temple +about 100 km (65miles) north of the capital, Phnom Penh. +The pagoda, in the Batay district of Kampong Thom province, was torn down +during the reign of the Khmer Rouge in the 1970s and the area became +overgrown. +Community care +Deputy police chief of Kampong Thom province, Hang Sithim, said the statues +- three of which were silver and one bronze - were buried in about one metre +(3.4ft) of earth and each weigh around 500 grams (1lb). +''I think that these Buddha statues had been buried hundreds of years ago, +when the last temple was fully operating," Mr Hang Sithim said. +Provincial authorities initially planned to take the statues to a nearby +town for safekeeping, but opted to allow the Buddhist community at the +temple to take care of them. +''We believe they are safe there,'' said Som Somphat, deputy governor of +Kampong Thom province. +''The people of Po Pich pledged to treat them with respect and honour.'' +Reign of terror +A police guard has been placed around the site to protect it from looters. +The Khmer Rouge waged civil war in Cambodia between 1970 and 1998 and +controlled the country between 1975 and 1979. +The regime outlawed religion and destroyed many objects regarded as decadent +or culturally impure. +About two million people died in the Khmer Rouge's drive to turn Cambodia +into a farmers' utopia. + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00179.402096b649c7af65ed3b8b18ca416544 b/Ch3/datasets/spam/easy_ham/00179.402096b649c7af65ed3b8b18ca416544 new file mode 100644 index 000000000..460b4c2a8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00179.402096b649c7af65ed3b8b18ca416544 @@ -0,0 +1,113 @@ +From timc@2ubh.com Wed Aug 28 10:54:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 55B9743F99 + for ; Wed, 28 Aug 2002 05:54:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:54:28 +0100 (IST) +Received: from n24.grp.scd.yahoo.com (n24.grp.scd.yahoo.com + [66.218.66.80]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S8TKZ16323 for ; Wed, 28 Aug 2002 09:29:20 +0100 +X-Egroups-Return: sentto-2242572-53131-1030523366-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.199] by n24.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 08:29:26 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 08:29:26 -0000 +Received: (qmail 381 invoked from network); 28 Aug 2002 08:29:26 -0000 +Received: from unknown (66.218.66.216) by m6.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 08:29:26 -0000 +Received: from unknown (HELO carbon) (194.73.73.92) by + mta1.grp.scd.yahoo.com with SMTP; 28 Aug 2002 08:29:26 -0000 +Received: from host217-36-22-4.in-addr.btopenworld.com ([217.36.22.4]) by + carbon with esmtp (Exim 3.22 #8) id 17jyCb-0002sj-00 for + forteana@yahoogroups.com; Wed, 28 Aug 2002 09:29:25 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 09:28:35 +0100 +Subject: [zzzzteana] Height, weight, girth, etc +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://www.guardian.co.uk/uk_news/story/0,3604,781616,00.html + +Britons stand tall, if slightly heavy, in Europe + +John Carvel, social affairs editor +Wednesday August 28, 2002 +The Guardian + +Not every European dimension has been harmonised in Brussels yet. According +to the Department for Trade and Industry, the average Briton stands head, +shoulders, girth and bottoms above their continental partners. +The figures come in a new edition of the department's handbook of +anthropometric and strength measurements, compiled by ergonomists at the +University of Nottingham to help manufacturers design products to fit +people's shape. +The volume provides 294 measurements ranging from the distance between the +inner corners of the eyes to the length of the leg between the crease below +the buttock to the crease at the back of the knee. +It has discovered that the average British man is 36 millimetres (1 inches) +taller than his French counterpart. +The mean height of UK citizens is 1,755.1mm (5ft 9in). Among European men +only the Dutch are taller, averaging 1,795mm and with a clear height +advantage over the US men's average of 1,760.4. +The average British woman is 1,620mm tall (just under 5ft 4in), compared +with 1,604mm for her French counterpart, 1,610mm for the Italians and +1,619mm for the Germans. Swedish women average 1,640mm, Dutch 1,650mm and +Americans 1,626.7mm +More disturbingly, British men and women are heavier than all the other +nationalities except the Americans, averaging 79.75 kilos for British men +and 66.7 for women. +The average British woman has a chest measurement of 1,007.8mm (39.7 +inches), compared with 965mm for the Italians, 912.6mm for the Japanese and +806mm for Sri Lankans. American women also top this scale with an average of +1,047.2mm. +The average British woman's waist is 840.6mm (33 inches) - also second +largest behind the Americans. But her bottom at 873.7mm is considerably +smaller than the Italians at 916mm who beat the Americans into second place. +The average British male foot is 266.8mm long (10.5 inches), 6mm longer than +the French and Germans, 3mm more than the Italians and 1mm more than the +Swedes. But they are just beaten by the Americans at 267.8mm and massively +outstripped by the Dutch at 275mm. +However Dutch women have daintier feet than the British, averaging 240mm +compared with 241.1mm in the UK (9.5 inches). German women average 242mm, +compared with 245mm for the Swedes and 242.1mm for the Americans. +The DTI has a less than exhaustive record of ring finger lengths, but on the +available evidence the British man's finger at 78.7mm (3.1 inches) is 1.7mm +longer than his German counterpart, but 0.2mm shorter than the American +average. +The British woman's ring finger at 72.6mm is 0.4mm smaller than her German +counterpart and 0.3mm smaller than the American. +Beverley Norris, research fellow at Nottingham university's institute for +occupational ergonomics, said the figures were useful for product designers. +The department has recently completed a study of the pulling force needed to +open ring pull cans. + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00180.1d7edb742cfbd5d48881c99a8e03cccd b/Ch3/datasets/spam/easy_ham/00180.1d7edb742cfbd5d48881c99a8e03cccd new file mode 100644 index 000000000..48e0cad18 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00180.1d7edb742cfbd5d48881c99a8e03cccd @@ -0,0 +1,159 @@ +From martin@srv0.ems.ed.ac.uk Wed Aug 28 10:54:40 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 54F9744155 + for ; Wed, 28 Aug 2002 05:54:38 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:54:38 +0100 (IST) +Received: from n4.grp.scd.yahoo.com (n4.grp.scd.yahoo.com [66.218.66.88]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7S8W6Z16396 for + ; Wed, 28 Aug 2002 09:32:07 +0100 +X-Egroups-Return: sentto-2242572-53133-1030523533-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.96] by n4.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 08:32:13 -0000 +X-Sender: martin@srv0.ems.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 08:32:13 -0000 +Received: (qmail 63177 invoked from network); 28 Aug 2002 08:32:13 -0000 +Received: from unknown (66.218.66.217) by m13.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 08:32:13 -0000 +Received: from unknown (HELO haymarket.ed.ac.uk) (129.215.128.53) by + mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 08:32:12 -0000 +Received: from srv0.ems.ed.ac.uk (srv0.ems.ed.ac.uk [129.215.117.0]) by + haymarket.ed.ac.uk (8.11.6/8.11.6) with ESMTP id g7S8WB303026 for + ; Wed, 28 Aug 2002 09:32:11 +0100 (BST) +Received: from EMS-SRV0/SpoolDir by srv0.ems.ed.ac.uk (Mercury 1.44); + 28 Aug 02 09:32:10 +0000 +Received: from SpoolDir by EMS-SRV0 (Mercury 1.44); 28 Aug 02 09:32:01 +0000 +Organization: Management School +To: zzzzteana@yahoogroups.com +Message-Id: <3D6C98AE.7172.23FD4363@localhost> +Priority: normal +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Description: Mail message body +From: "Martin Adamson" +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 09:31:57 +0100 +Subject: [zzzzteana] Emigrate to Russia? That's a steppe too far +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7S8W6Z16396 + +The Electronic Telegraph + + Emigrate to Russia? That's a steppe too far + (Filed: 28/08/2002) + + + So you think you've got it bad: fed up with Folkestone, bored with Birmingham + or sick of Sheffield. + + Those 54 per cent of Britons - according to a Daily Telegraph/YouGov survey + this week - who dream of a stress-free life in sunnier climes should perhaps + heed a word of friendly advice on the realities of living abroad. + + Kommersant, a Russian daily newspaper, yesterday offered those dissatisfied + with life in Blair's Britain a taste of what to expect should they choose to + emigrate to provincial Russia. + + After reading about the gripes of affluent Britons, its tongue-in-cheek + article admitted, however, that the grass was not always greener on the other + side. + + "The inhabitants of foggy Albion keen to travel could go to any Russian city + deep in the provinces where things are quiet," said Kommersant. + + "In any central Russian district, life, by British standards, is unseemingly + cheap and remarkably laid back. By 11am most of the working population are + becoming 'traditionally' relaxed." + + The time for elevenses in Britain - perhaps the opportunity for a quiet cup of + tea and a chocolate Hobnob - is known in Russia as the Wolf Hour. + + It was so named in Soviet times because at 11am a wolf appeared from the + famous animal clock at the Obrasov Puppet Theatre in Moscow. It is also + opening time in the nation's vodka shops. + + And the vodka, like all other spirits, is cheap. Kommersant pointed out that + "the money a Briton can earn from selling even the most shabby house would be + enough to support them at the local standard of living for the rest of their + life. + + "The local shops are full of all they would need and they could buy a bottle + of whisky for kopecks." + + There are 100 kopecks in a ruble and the ruble is currently worth about a + halfpenny in sterling. + + The whisky is cheap, however, because it is unlike anything the average Briton + will have consumed before. It is made of samagon - home-distilled, moonshine + vodka - coloured with tea, and is a popular beverage in rural areas and among + diehard alcoholics. + + While alcohol is plentiful and cheap, food may not be so easy to come by. The + newspaper pointed out that traditional British foodstuffs - it selected oxtail + soup as an example - were in short supply. However, the wealth of the British + settler should overcome the difficulty. + + "For a modest reward in most Russian villages, the locals would happily cut + off the tails from the entire collective farm's herd of cattle." + + One or two potential emigrés might be deterred by language difficulties. There + are few English speakers to be found among the green hills of Tula on the + Mongolian border. + + However, Kommersant pointed out, language difficulties were not considered a + deterrent by the 13 per cent of Britons who nominated France as the country in + which they would like to live. + + France, the Russian paper claimed, was a country "where English is only known + by the beggars, Belorussian prostitutes and Russian tourists". + + Despite the low cost of living and the easy-going lifestyle, the Russian + weather remains a major stumbling block for Britons. + + Even in the most temperate regions, winter temperatures of -20C are common. + And somewhere like the Sakha Republic - east of Siberia and the coldest place + in the world - enjoys just one month of summer and endures winter temperatures + that drop below -70C. Houses are built on concrete stilts because the + permafrost makes digging foundations impossible. + + Again, the Russian paper had a word of reassurance. While acknowledging the + climatic problems, it said that "thanks to global warming this difficulty will + solve itself". + + Kommersant also had an answer to the labour crisis that would be created in + Britain if 54 per cent of its citizens decided to opt for a life in Russia. + + "Thirty-three million Russians could be sent to Britain to replace the 33 + million who leave. We think that the required number could probably be found + amongst our citizens." + + Unfortunately for those 33 million Russians, however, not one of those Britons + surveyed who wanted to move abroad nominated the Russian steppes as their + preferred new home. + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00181.6831a0d4a6d648236f7ccd26b5e3e7ab b/Ch3/datasets/spam/easy_ham/00181.6831a0d4a6d648236f7ccd26b5e3e7ab new file mode 100644 index 000000000..025e86c97 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00181.6831a0d4a6d648236f7ccd26b5e3e7ab @@ -0,0 +1,119 @@ +From martin@srv0.ems.ed.ac.uk Wed Aug 28 10:54:46 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 547AE43F99 + for ; Wed, 28 Aug 2002 05:54:42 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:54:42 +0100 (IST) +Received: from n33.grp.scd.yahoo.com (n33.grp.scd.yahoo.com + [66.218.66.101]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S8XaZ16552 for ; Wed, 28 Aug 2002 09:33:37 +0100 +X-Egroups-Return: sentto-2242572-53134-1030523622-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.197] by n33.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 08:33:42 -0000 +X-Sender: martin@srv0.ems.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 08:33:42 -0000 +Received: (qmail 45450 invoked from network); 28 Aug 2002 08:33:42 -0000 +Received: from unknown (66.218.66.216) by m4.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 08:33:42 -0000 +Received: from unknown (HELO haymarket.ed.ac.uk) (129.215.128.53) by + mta1.grp.scd.yahoo.com with SMTP; 28 Aug 2002 08:33:41 -0000 +Received: from srv0.ems.ed.ac.uk (srv0.ems.ed.ac.uk [129.215.117.0]) by + haymarket.ed.ac.uk (8.11.6/8.11.6) with ESMTP id g7S8Xe303560 for + ; Wed, 28 Aug 2002 09:33:40 +0100 (BST) +Received: from EMS-SRV0/SpoolDir by srv0.ems.ed.ac.uk (Mercury 1.44); + 28 Aug 02 09:33:40 +0000 +Received: from SpoolDir by EMS-SRV0 (Mercury 1.44); 28 Aug 02 09:33:20 +0000 +Organization: Management School +To: zzzzteana@yahoogroups.com +Message-Id: <3D6C98FC.9355.23FE7736@localhost> +Priority: normal +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Description: Mail message body +From: "Martin Adamson" +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 09:33:16 +0100 +Subject: [zzzzteana] Six arrested for attacking Palio jockey who defected +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +The Electronic Telegraph + + Six arrested for attacking Palio jockey who defected + By Bruce Johnston in Rome + (Filed: 28/08/2002) + + + Police waded into the intrigues and enmities surrounding the Palio, Siena's + traditional bareback horse race, for the first time yesterday, arresting six + people for beating up a star jockey who defected to a rival team. + + + Angry spectators attack Giuseppe Pes at the Palio horse race in Siena + Giuseppe Pes, a champion jockey of Sardinian extraction who has won the Palio + nine times in 38 runs, was closely associated with the Istrice, or Porcupine, + contrada - section of town - until the race earlier this month. + + Istrice did not have a horse in the contest - only 10 of the 17 contradas take + part in each Palio - but, despite promises to the contrary, moments before the + off Mr Pes mounted the horse of Lupa, or She-Wolf. + + Lupa are Istrice's historic rivals, and the defection was not taken well. Lupa + did not win, victory going instead to Tartuca, tortoise. + + As its supporters erupted into joyous celebrations, Mr Pes was pulled from his + mount by Istrice members and savagely beaten and kicked for seven minutes. + + Mr Pes, 39, whose jacket with his contrada's colours was torn from his back, + was sent to hospital with fractures, cuts and bruises. + + Three of his attendants who tried to intervene were also beaten. Police + yesterday arrested six people they said had been identified as the attackers + from video footage. + + Experts said it was the first time that members of a contrada - known as + contradaioli - had been arrested for beating up a jockey, despite the fact + that such episodes belong to the race's ancient traditions. + + The Palio, which was first raced in the 14th century, is held twice a year on + the cobbles of Siena's main square. For weeks beforehand supporters parade + through the city, singing, waving flags and wearing their contrada colours. + But by the day of the race the good humour evaporates. + + The event has no rules and is prepared for and run amid an extraordinary + undercurrent of intrigue and even violence. Jockeys may swap sides at the last + minute, take bribes, and whip rivals' horses, and more, so long as they do not + grab their reins. + + The origins of the contrada lie in the Middle Ages, when the neighbourhoods' + boundaries were set out to aid the many mercenary companies hired to defend + Siena's fiercely earned independence from Florence and other city states. + + The first Palio of the year takes place on July 2, to commemorate the miracles + of the Madonna of Provenzano, and a second race on Aug 16 marks the feast of + the Assumption of the Virgin. + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00182.8e6541320c6c08e0a899455a0a21f91c b/Ch3/datasets/spam/easy_ham/00182.8e6541320c6c08e0a899455a0a21f91c new file mode 100644 index 000000000..3d75d250f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00182.8e6541320c6c08e0a899455a0a21f91c @@ -0,0 +1,164 @@ +From timc@2ubh.com Wed Aug 28 10:54:56 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9E69C43F9B + for ; Wed, 28 Aug 2002 05:54:50 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:54:50 +0100 (IST) +Received: from n33.grp.scd.yahoo.com (n33.grp.scd.yahoo.com + [66.218.66.101]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S8YTZ16559 for ; Wed, 28 Aug 2002 09:34:29 +0100 +X-Egroups-Return: sentto-2242572-53135-1030523675-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.199] by n33.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 08:34:36 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 08:34:35 -0000 +Received: (qmail 4682 invoked from network); 28 Aug 2002 08:34:35 -0000 +Received: from unknown (66.218.66.218) by m6.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 08:34:35 -0000 +Received: from unknown (HELO gadolinium.btinternet.com) (194.73.73.111) by + mta3.grp.scd.yahoo.com with SMTP; 28 Aug 2002 08:34:35 -0000 +Received: from host217-36-22-4.in-addr.btopenworld.com ([217.36.22.4]) by + gadolinium.btinternet.com with esmtp (Exim 3.22 #8) id 17jyHY-0004Ja-00 + for forteana@yahoogroups.com; Wed, 28 Aug 2002 09:34:34 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 09:33:47 +0100 +Subject: [zzzzteana] That wacky imam +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://media.guardian.co.uk/broadcast/comment/0,7493,781769,00.html + +Hamza's horrid - but we must tolerate him + +Rod Liddle +Wednesday August 28, 2002 +The Guardian + +Sheikh Abu Hamza al-Masri, our maddest of mad mullahs and a cartoon bogeyman +to scare the kiddies, spent a quiet and contemplative bank holiday playing +with his own children in Victoria Park, Hackney. +I've often wondered what incendiary Islamic fundamentalist clerics do on +statutory public holidays. Head for the beach and maybe swing by B&Q on the +way home, I had hoped. I had this beguiling vision of Hamza paddling in the +sea, an ice-cream cone in his one good hand, the waves tickling his shins, +and the sheikh mentally preparing to fix those pesky shelves in the kitchen +for once, instead of planning the extermination of Zionism and America and +maybe me and you, too. +But B&Q and a day at the seaside is probably beyond Hamza's budget since the +Bank of England froze his assets, so Victoria Park had to do. But he sounded +happy enough when I spoke to him, with the babble of tiny, cheerful, Islamic +proto-warriors in the background. +You must know Hamza; he's the imam designed, it would seem, by the Daily +Mail's cartoonist Mac. Large metal hook in place of a left hand. One eye +covered by a patch, the other a baleful, watchful, milky-white. We don't +mock the disabled any more these days, unless it's someone like Hamza whom +we don't like; then, if you'll excuse the inapt phraseology, the gloves come +off. So Hamza is known (with that vaulting imagination typical of the +British right) as "Captain Hook", in articles which usually call for his +arrest, or extradition to the US, or deportation back home to Egypt or maybe +off to Pakistan or Afghanistan, where he fought the Russians for years and +thus sustained his disabilities - anywhere, really; just out of here. And if +we can't lock him up or chuck him out of the country, maybe we can force him +to shut up. +Because we don't like Hamza very much. We weren't that fond of him before +September 11, but afterwards, in that nervy, paranoid few months when we all +thought the sky might fall in, our disapprobation turned into political +persecution. +And now the Daily Mirror is agitating again for his arrest because they've +got hold of secret videos of the man behaving in an even more inflammatory +manner, urging warfare on and looting of enemies of Islam. All out of +context, and a very long time ago, says the imam, not unduly bothered. But +perhaps he should be, because our reputation for broad-mindedness and +tolerance towards people like Hamza was thinning even before the Mirror's +scoop. +Hamza preaches, or preached, at the scary Finsbury Park Mosque - so, earlier +this year, the Charity Commissioners banned him from doing so because of his +allegedly inflammatory remarks. I didn't know Charity Commissioners were +meant to do stuff like that. +He has had his passport seized and not returned; his assets have been +frozen. He is tailed by the police every now and then, and his access to the +media is restricted by internal policing within broadcasting corporations +and the press. And this last point is because, we tell ourselves, endlessly +- repeating the mantra over and over again, and fervently wishing it to be +true - Hamza is not "representative" of British Muslims, as if British +Muslims were a simple, homogenous thing with a single voice that one could +turn to every now and then for explanation. And perhaps succour. +The trouble is, in the first month or so after the twin towers attack he was +revealed to be rather more "representative" than the list of those +government-approved Muslim spokesmen who were - uncomfortably, I suspect - +dragooned briefly into statements of support for the war against terrorism +and a blanket condemnation of the Taliban. +An opinion poll commissioned by Radio 4's Today programme revealed that an +overwhelming majority of British Muslims were against George Bush's crusade. +One in six were, to put it mildly, ambivalent about the attack on the US +(the remainder condemned the attack unequivocally). A large majority thought +the war against terrorism was a war against Islam. +Which is what Hamza said, repeatedly. But it was something that, at the +time, we didn't want to hear. Now, if you quiz the man on present policy at +home and abroad he comes across - superficially, at least - as someone from +the liberal left. No war against Iraq; Britain to become independent of US +foreign policy and attempt rapprochement with Arab states; stronger action +against Israel; mistrust of global capitalism; redistribution of wealth. +Nor is he particularly anti-semitic, so far as I can tell, although I don't +suppose he will be holidaying in Eilat this year. In yesterday's Guardian, +the chief rabbi expressed a willingness to talk to Hamza and was grateful +for the sheikh's message of condolence when a London synagogue was attacked. +Which is not to say that Hamza is a peaceable Jeffersonian democrat who has +been wilfully misrepresented: he is, without question, rather more +inflammatory in private sermons to his own people than he is in public. His +ideology is an arid and uncompromising interpretation of Islam: he would be +happy, in a truly Islamic society, to stone women to death for adultery, for +example. You and I would find many - perhaps most - of his views utterly +repellent. +And that's the point. Because Hamza is the true test of our apparent desire +to be multicultural. Multiculturalism is not, surely, the cheerful +appropriation of bits of inoffensive minority cultural behaviour by the +ruling hegemony. That is a sort of syncopated monoculturalism. +Multiculturalism is, rather, the ability of society to tolerate views that +are antithetical to the dominant culture - and maybe learn from them. +The FBI has been investigating Hamza, but, of course, has found nothing +remotely incriminating. The real reason for his vilification and persecution +is simply the pungency of his views. +It is often said that we should shut him up or arrest him because his +rhetoric increases hostility against the Muslim population generally. This +is a perfectly noble argument, but it does not wash. +You don't defuse a difficult situation by pretending it doesn't exist. And +if British Muslims - maybe a minority, maybe not - feel a growing sense of +unease or mystification at the direction of western foreign policy, it is +not because they have been led in that direction by Hamza. Shutting the man +up, therefore, won't make a difference. +It is rather as Louis MacNeice had it: +The glass is falling hour by hour, the glass will fall for ever. +But if you break the bloody glass, you won't hold up the weather. + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00183.54d98788fca5892267d8dfe4d09b2bbf b/Ch3/datasets/spam/easy_ham/00183.54d98788fca5892267d8dfe4d09b2bbf new file mode 100644 index 000000000..b826aaa32 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00183.54d98788fca5892267d8dfe4d09b2bbf @@ -0,0 +1,117 @@ +From timc@2ubh.com Wed Aug 28 10:55:08 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 31D4F43F99 + for ; Wed, 28 Aug 2002 05:55:06 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:55:06 +0100 (IST) +Received: from n24.grp.scd.yahoo.com (n24.grp.scd.yahoo.com + [66.218.66.80]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S8e8Z16624 for ; Wed, 28 Aug 2002 09:40:08 +0100 +X-Egroups-Return: sentto-2242572-53136-1030524014-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.96] by n24.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 08:40:14 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 08:40:14 -0000 +Received: (qmail 69869 invoked from network); 28 Aug 2002 08:40:14 -0000 +Received: from unknown (66.218.66.217) by m13.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 08:40:14 -0000 +Received: from unknown (HELO gadolinium.btinternet.com) (194.73.73.111) by + mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 08:40:14 -0000 +Received: from host217-36-22-4.in-addr.btopenworld.com ([217.36.22.4]) by + gadolinium.btinternet.com with esmtp (Exim 3.22 #8) id 17jyN3-0004sQ-00 + for forteana@yahoogroups.com; Wed, 28 Aug 2002 09:40:13 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 09:39:20 +0100 +Subject: [zzzzteana] White Horse vandalised +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7S8e8Z16624 + +http://yorkshirepost.co.uk/ed/front/481722 + +Pro-hunt activists target top sight + +ONE of Yorkshire's most famous sights yesterday became one of the first +targets in bizarre attacks on White Horse landmarks linked to the hunting +debate. +Villagers near Thirsk could not believe their eyes when they woke yesterday +to find the famous White Horse of Kilburn had acquired a rider during the +night. +In another incident, the Uffington white horse in Oxfordshire had a huntsman +and three hounds added to the ancient figure, which is thought to represent +a Celtic god or tribal symbol. +Pro-hunt activists in the Real Countryside Alliance (RCA) ­ a radical +alternative to the better-known Countryside Alliance ­ admitted +responsibility last night for targeting the two images. +The 314ft by 228ft landmark at Kilburn has been lovingly preserved since it +was carved in the limestone by schoolmaster John Hodgson and his pupils in +1857. +But during Monday night someone nailed on a massive figure of a huntsman +with a horn ­ which had been cut to scale out of a single piece of white +carpet. It was removed yesterday by members of Kilburn White Horse +Association, who found a Countryside Alliance badge attached to the carpet. +John Roberts of the association said: "It has obviously been very well +organised. It was a well crafted piece of kit: a figure of a huntsman with a +horn cut out of carpets. +"It was big and impressive and could be seen for miles about. They tied it +to bushes at the top and nailed it down. It caused all the stone chippings +to be pushed downwards, which will help turn the white horse grey. It will +not get another refit for another year. +"Whoever did it must have come with a vehicle ­ a tractor and trailer or a +lorry ­ because the carpet must have come in one piece. It was extremely +well planned and took several people an hour and a half to get it off." +The sculpture needs constant work because, unlike chalk horses in the south +of England, it is cut into limestone which is the wrong colour and needs +whitening. +Mr Roberts added: "The damage as such is not great but it adds to the +deterioration, which means it will need more work next time. +"We would have more sympathy if, having made the point, they would come to +take it away again because it was a major job." +Andy Wilson, chief executive of the North York Moors National Park, said: +"It is a scheduled ancient monument and the local residents are very proud +of it and go to enormous trouble to keep it white. There is also careful +consideration of what shape it should be kept with the constant growth of +vegetation so you can understand the alarm and regret at any changes. There +has not been a cut in the turf ­ which would be much more of a problem. It +would seem it was carefully plotted beforehand." +An RCA spokesman said: "Some people in the country are getting very +frustrated at the inaction. All we want is Ministers to take notice. Marches +don't seem to be doing anything good." +The Countryside Alliance said it did not have any part in the action. +Spokesman Adrian Yelland said: "The Countryside Alliance only ever advocates +campaigning that is lawful and dissociates itself from acts of vandalism and +regrets any damage that may have been caused by this incident." +The incident follows graffiti on road signs and motorway bridges in +Yorkshire thought to be RCA work. + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00184.4534b61b19d6102fe241eecf0a436a35 b/Ch3/datasets/spam/easy_ham/00184.4534b61b19d6102fe241eecf0a436a35 new file mode 100644 index 000000000..bbdbac4bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00184.4534b61b19d6102fe241eecf0a436a35 @@ -0,0 +1,120 @@ +From mephistopheles29@hotmail.com Wed Aug 28 10:55:16 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2367B43F99 + for ; Wed, 28 Aug 2002 05:55:15 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:55:15 +0100 (IST) +Received: from n25.grp.scd.yahoo.com (n25.grp.scd.yahoo.com + [66.218.66.81]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S8jKZ16862 for ; Wed, 28 Aug 2002 09:45:21 +0100 +X-Egroups-Return: sentto-2242572-53137-1030524326-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.192] by n25.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 08:45:26 -0000 +X-Sender: mephistopheles29@hotmail.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 08:45:26 -0000 +Received: (qmail 4957 invoked from network); 28 Aug 2002 08:45:26 -0000 +Received: from unknown (66.218.66.218) by m10.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 08:45:26 -0000 +Received: from unknown (HELO n8.grp.scd.yahoo.com) (66.218.66.92) by + mta3.grp.scd.yahoo.com with SMTP; 28 Aug 2002 08:45:25 -0000 +Received: from [66.218.67.137] by n8.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 08:45:25 -0000 +To: zzzzteana@yahoogroups.com +Message-Id: +User-Agent: eGroups-EW/0.82 +X-Mailer: Yahoo Groups Message Poster +From: "timothy_hodkinson" +X-Originating-Ip: 62.172.206.50 +X-Yahoo-Profile: timothy_hodkinson +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 08:45:25 -0000 +Subject: [zzzzteana] Crop Idol: Crop circle competition +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7S8jKZ16862 + +>>From todays Sun: +http://www.thesun.co.uk/article/0,,5-2002392050,00.html + +Your vote on Crop Idol +By OLIVER HARVEY + +WELCOME to Crop Idol – your chance to choose Britain's most out-of-this-wor= +ld corn circle. + + +The intricate patterns, which some say are the work of aliens, are big news= + again thanks to the spooky new Mel Gibson film Signs. + + +Nine of the best are shown on the right. You can vote for your favourite by= + clicking on the image and dialling the number shown beneath. + +Calls cost only 10p, or 12 cents from the Republic of Ireland (though it ma= +y be a bit more if you contact us from other planets). + +Lines close at 6pm today. We will reveal the +winner tomorrow. + + +Aliens ... or hoaxers? +THE debate continues to rage over the origin of crop circles. + +Many believe they are simply the work of human hoaxers — while others are c= +onvinced they are made by aliens trying to communicate with us. + +Crop circle enthusiasts insist that some of the designs appear so quickly a= +nd on such a vast scale that it is impossible for humans to have made them. = + + +Witnesses even claim to have seen balls of light moving through the fields = +on the nights that circles appear. + +Researchers have found connections between some patterns and symbols from a= +ncient religions, mathematics and even music. + +Crop circles were first spotted in Britain in the early 1970s and now appea= +r throughout the world. The weird outlines are still most common in the sout= +h of England. + +Theories about their cause include whirlwinds — known to circle experts as = +plasma vortexes — earth energies from ley lines or even forces from the huma= +n mind. + +In the past the circles have also been blamed on mating roe deer, hedgehogs= +, helicopters and holes in the ozone layer. + +Raymond Cox, Chairman of the Centre for Crop Circle Studies, said last nigh= +t: "It's a great unsolved mystery. + +"We know not all crop circles are created by humans but we cannot say for s= +ure what is making them." + +Plus lots of photos + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00185.d596ca9befa5afe75fd8ebca4c215d46 b/Ch3/datasets/spam/easy_ham/00185.d596ca9befa5afe75fd8ebca4c215d46 new file mode 100644 index 000000000..a80bc48d7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00185.d596ca9befa5afe75fd8ebca4c215d46 @@ -0,0 +1,77 @@ +From martin@srv0.ems.ed.ac.uk Wed Aug 28 10:55:21 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9AB2F43F9B + for ; Wed, 28 Aug 2002 05:55:20 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:55:20 +0100 (IST) +Received: from n19.grp.scd.yahoo.com (n19.grp.scd.yahoo.com + [66.218.66.74]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S8q0Z16982 for ; Wed, 28 Aug 2002 09:52:00 +0100 +X-Egroups-Return: sentto-2242572-53138-1030524726-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.199] by n19.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 08:52:06 -0000 +X-Sender: martin@srv0.ems.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 08:52:06 -0000 +Received: (qmail 18008 invoked from network); 28 Aug 2002 08:52:06 -0000 +Received: from unknown (66.218.66.216) by m6.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 08:52:06 -0000 +Received: from unknown (HELO haymarket.ed.ac.uk) (129.215.128.53) by + mta1.grp.scd.yahoo.com with SMTP; 28 Aug 2002 08:52:05 -0000 +Received: from srv0.ems.ed.ac.uk (srv0.ems.ed.ac.uk [129.215.117.0]) by + haymarket.ed.ac.uk (8.11.6/8.11.6) with ESMTP id g7S8q4311684 for + ; Wed, 28 Aug 2002 09:52:04 +0100 (BST) +Received: from EMS-SRV0/SpoolDir by srv0.ems.ed.ac.uk (Mercury 1.44); + 28 Aug 02 09:52:04 +0000 +Received: from SpoolDir by EMS-SRV0 (Mercury 1.44); 28 Aug 02 09:51:51 +0000 +Organization: Management School +To: zzzzteana@yahoogroups.com +Message-Id: <3D6C9D54.27778.240F6D50@localhost> +Priority: normal +In-Reply-To: +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Description: Mail message body +From: "Martin Adamson" +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 09:51:47 +0100 +Subject: Re: [zzzzteana] That wacky imam +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + + +> Sheikh Abu Hamza al-Masri, our maddest of mad mullahs and a cartoon bogeyman +> to scare the kiddies, spent a quiet and contemplative bank holiday playing +> with his own children in Victoria Park, Hackney. + +For an alternative, and rather more factually based, rundown on Hamza's +career, including his belief that all non Muslims in Yemen should be murdered +outright: + +http://memri.org/bin/articles.cgi?Page=archives&Area=ia&ID=IA7201 + +Martin + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00186.7fb6108d51b6cf37e682b16713376f98 b/Ch3/datasets/spam/easy_ham/00186.7fb6108d51b6cf37e682b16713376f98 new file mode 100644 index 000000000..b58cb5789 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00186.7fb6108d51b6cf37e682b16713376f98 @@ -0,0 +1,114 @@ +From martin@srv0.ems.ed.ac.uk Wed Aug 28 10:55:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 506A044155 + for ; Wed, 28 Aug 2002 05:55:22 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:55:22 +0100 (IST) +Received: from n16.grp.scd.yahoo.com (n16.grp.scd.yahoo.com + [66.218.66.71]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S9ENZ17810 for ; Wed, 28 Aug 2002 10:14:23 +0100 +X-Egroups-Return: sentto-2242572-53139-1030526069-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.196] by n16.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 09:14:29 -0000 +X-Sender: martin@srv0.ems.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 09:14:29 -0000 +Received: (qmail 31918 invoked from network); 28 Aug 2002 09:14:29 -0000 +Received: from unknown (66.218.66.217) by m3.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 09:14:29 -0000 +Received: from unknown (HELO haymarket.ed.ac.uk) (129.215.128.53) by + mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 09:14:28 -0000 +Received: from srv0.ems.ed.ac.uk (srv0.ems.ed.ac.uk [129.215.117.0]) by + haymarket.ed.ac.uk (8.11.6/8.11.6) with ESMTP id g7S9ER320256 for + ; Wed, 28 Aug 2002 10:14:27 +0100 (BST) +Received: from EMS-SRV0/SpoolDir by srv0.ems.ed.ac.uk (Mercury 1.44); + 28 Aug 02 10:14:26 +0000 +Received: from SpoolDir by EMS-SRV0 (Mercury 1.44); 28 Aug 02 10:14:08 +0000 +Organization: Management School +To: zzzzteana@yahoogroups.com +Message-Id: <3D6CA290.8179.2423E1FC@localhost> +Priority: normal +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Description: Mail message body +From: "Martin Adamson" +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 10:14:08 +0100 +Subject: [zzzzteana] It's August, and big cats are on the prowl +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7S9ENZ17810 + +The Times + + August 28, 2002 + + It's August, and big cats are on the prowl + By Alan Hamilton + + + + ROUND up the sheep. Pull on the gauntlets. Oil the shotgun. The British + countryside is crawling with pumas, black panthers, fen tigers and other big, + vicious cats. No corner of the nation is safe. Evidence released yesterday, + including sightings, photographs, paw prints, livestock kills and hair + samples, claims to prove that every county has big cats lurking in its + undergrowth, poised to pounce on man and beast alike. + + Sightings have reached record levels in 2002, according to Daniel Bamping, + founder of the British Big Cats Society, which in the past 12 months has + received more than 800 reports of big cat sightings. + + “During the first six months we have seen an incredible amount of big cat + activity. We have now had reports in every single county; the response from + the public has been fantastic,” Mr Bamping said. “Big cats in Britain are + real. They are out there, they are breeding; there’s more of them.” + + Scotland and Gloucestershire are said to be hotspots of big cat activity. Mark + Fraser, who heads the society’s Scottish arm, said: “Lynx are now present in + the Scottish countryside; I believe they are established and breeding. I don’t + want to hazard a guess at the numbers; suffice it to say there are several + hotspots, notably Fife, Aberdeenshire, Inverness and the Borders.” + + Next month the society plans to unveil its full dossier of evidence, which + includes two dead wild cats, pictures of paw prints and tree scratchings, as + well as stories of a horse strangely lacerated in West Wales and a man in + Gravesham, Kent, who had to beat a hasty retreat to his garage after his hand + was cut by a creature the size of a labrador dog, except that it had black + hairy tufts on the tips of its ears. + + The society is taking the sightings seriously. It plans to set up a network of + trigger-cameras throughout the country to capture further evidence of the + beasts, which it will then present to the Government. + + It is not, however, clear on what it wants the Government to do about it all. + Throwing its weight behind the pro-hunting lobby might be a start. + + Next in August: record abductions by aliens. + + + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00187.f2e1e617b73fa1c5137d78383372886f b/Ch3/datasets/spam/easy_ham/00187.f2e1e617b73fa1c5137d78383372886f new file mode 100644 index 000000000..f1afb09d7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00187.f2e1e617b73fa1c5137d78383372886f @@ -0,0 +1,137 @@ +From skitster@hotmail.com Wed Aug 28 10:55:28 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AC12B44156 + for ; Wed, 28 Aug 2002 05:55:25 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:55:25 +0100 (IST) +Received: from n36.grp.scd.yahoo.com (n36.grp.scd.yahoo.com + [66.218.66.104]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S9EPZ17814 for ; Wed, 28 Aug 2002 10:14:25 +0100 +X-Egroups-Return: sentto-2242572-53140-1030526071-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.198] by n36.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 09:14:31 -0000 +X-Sender: skitster@hotmail.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 09:14:31 -0000 +Received: (qmail 85461 invoked from network); 28 Aug 2002 09:14:31 -0000 +Received: from unknown (66.218.66.218) by m5.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 09:14:31 -0000 +Received: from unknown (HELO hotmail.com) (64.4.17.167) by + mta3.grp.scd.yahoo.com with SMTP; 28 Aug 2002 09:14:31 -0000 +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Wed, 28 Aug 2002 02:14:30 -0700 +Received: from 213.121.94.124 by lw11fd.law11.hotmail.msn.com with HTTP; + Wed, 28 Aug 2002 09:14:30 GMT +To: clare.bunkham@prudential.co.uk, zzzzteana@yahoogroups.com, + forteana@taint.org +Message-Id: +X-Originalarrivaltime: 28 Aug 2002 09:14:30.0994 (UTC) FILETIME=[512D8B20:01C24E73] +From: "Scott Wood" +X-Originating-Ip: [213.121.94.124] +X-Yahoo-Profile: fromage_frenzy +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 10:14:30 +0100 +Subject: [zzzzteana] Fwd: Hill Monuments defaced to promote hunting +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +The hunting community showing, yet again, how utterly out of touch they +are....(though the anti-Esso sign on the Long Man made me smirk last week) + + +>From: "Carol" +> +>The white horses at Uffington and Kilburn have had hunters painted +>onto them to 'keep the pro-hunt image in the media' +> +>http://www.ananova.com/news/story/sm_658592.html +> +>*boggle* How can the pro-hunt people think this will help their cause? +> +>Carol + + +Giant horse images 'defaced by hunting activists' + +Pro-hunt activists have defaced two of the country's national monuments - +the two giant white horses - to highlight their cause + +Campaigners for the Real Countryside Alliance say they targeted the two +images, on hills in Oxfordshire and North Yorkshire, "to keep the pro-hunt +thing in the papers". + + +Ananova: + +Giant horse images 'defaced by hunting activists' + +Pro-hunt activists have defaced two of the country's national monuments - +the two giant white horses - to highlight their cause. + + + +Campaigners for the Real Countryside Alliance say they targeted the two +images, on hills in Oxfordshire and North Yorkshire, "to keep the pro-hunt +thing in the papers". + + + +Aerial shots show the 374ft-long Bronze Age image on the Berkshire Downs +near Uffington in Oxfordshire complete with three white hounds and a rider. + +In North Yorkshire, a rider in full hunt regalia has been added to the 300ft +White Horse cut in to the hills at Kilburn, which dates back to the 1700s. + +But no-one reported anything to the police. + +A spokesman for North Yorkshire police said no reports had been received but +he had seen "a red blob" on the horse and had sent officers to investigate. + +In Uffington, no-one in the village had heard anything about the reported +incident. A spokesman for Thames Valley police said he was not aware of any +complaints. + +Activists say the image in Oxfordshire was drawn in paint used for marking +lines on grass tennis courts and will wash away in the first rains. + + +Story filed: 21:17 Tuesday 27th August 2002 + + + + + + +Scott +"I cried for madder music and for stronger wine" +Ernest Dowson + + +_________________________________________________________________ +MSN Photos is the easiest way to share and print your photos: +http://photos.msn.com/support/worldwide.aspx + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00188.f416128c8a1bc74ac615e5bdf7ae0172 b/Ch3/datasets/spam/easy_ham/00188.f416128c8a1bc74ac615e5bdf7ae0172 new file mode 100644 index 000000000..9a26bec2c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00188.f416128c8a1bc74ac615e5bdf7ae0172 @@ -0,0 +1,86 @@ +From Steve_Burt@cursor-system.com Wed Aug 28 10:55:32 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 876C943F99 + for ; Wed, 28 Aug 2002 05:55:27 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:55:27 +0100 (IST) +Received: from n17.grp.scd.yahoo.com (n17.grp.scd.yahoo.com + [66.218.66.72]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7S9gNZ18555 for ; Wed, 28 Aug 2002 10:42:23 +0100 +X-Egroups-Return: sentto-2242572-53141-1030527749-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.193] by n17.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 09:42:29 -0000 +X-Sender: steve.burt@cursor-system.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 09:42:28 -0000 +Received: (qmail 83424 invoked from network); 28 Aug 2002 09:42:27 -0000 +Received: from unknown (66.218.66.217) by m11.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 09:42:27 -0000 +Received: from unknown (HELO mailgateway.cursor-system.com) (62.189.7.27) + by mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 09:42:27 -0000 +Received: from exchange1.cps.local (unverified) by + mailgateway.cursor-system.com (Content Technologies SMTPRS 4.2.10) with + ESMTP id for + ; Wed, 28 Aug 2002 10:43:38 +0100 +Received: by exchange1.cps.local with Internet Mail Service (5.5.2653.19) + id ; Wed, 28 Aug 2002 10:42:26 +0100 +Message-Id: <5EC2AD6D2314D14FB64BDA287D25D9EF12B50F@exchange1.cps.local> +To: "'zzzzteana@yahoogroups.com'" +X-Mailer: Internet Mail Service (5.5.2653.19) +X-Egroups-From: Steve Burt +From: Steve Burt +X-Yahoo-Profile: pyruse +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 10:42:25 +0100 +Subject: RE: [zzzzteana] Digest Number 2453 +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +>JUST as the pyramids of Egypt were built in honour of great kings, it was +>fitting that sandy replicas were created on Weymouth beach in memory of the +>king of the castle. Fred Darrington, who became the world's most famous +sand +>sculptor, died last week aged 91. His grandson, Mark Anderson, who has +taken +>over his Dorset seafront pitch, is determined that his grandfather's name +will +>not be forgotten, despite the impermanence of his creations. + +Can someone please tell me what a "pitch" constitutes? I have an idea +it is somewhat like the spots street musicians claim, but this sounds +more formal. +------------------ +Just an area of the beach by the prom where he's allowed to make his +sculptures. +Weymouth is where I spent my teenage years. My mum and one sister still live +there. +So I'm pretty familiar with the sculptures; pretty impressive, and very big. +(I think he uses some sort of armature for some bits - it's not just sand) +They usually get vandalised, though; after a lot of drinks, it obviously is +a good idea to break into the enclosure and kick all the sculptures to bits. +Then again, Weymouth is pretty run down, and attracts holiday makers of the +worst sort. + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00189.b66293957540969a231d2fd09886ee0f b/Ch3/datasets/spam/easy_ham/00189.b66293957540969a231d2fd09886ee0f new file mode 100644 index 000000000..e56ab41d7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00189.b66293957540969a231d2fd09886ee0f @@ -0,0 +1,59 @@ +From tony@svanstrom.com Wed Aug 28 11:02:33 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3334043F99 + for ; Wed, 28 Aug 2002 06:02:32 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 11:02:32 +0100 (IST) +Received: from moon.campus.luth.se (root@moon.campus.luth.se + [130.240.202.158]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7S4MwZ10483 for ; Wed, 28 Aug 2002 05:22:58 +0100 +Received: from moon.campus.luth.se (tony@moon.campus.luth.se + [130.240.202.158]) by moon.campus.luth.se (8.12.3/8.12.3) with ESMTP id + g7S4N9Mg010720; Wed, 28 Aug 2002 06:23:09 +0200 (CEST) (envelope-from + tony@svanstrom.com) +Date: Wed, 28 Aug 2002 06:23:09 +0200 (CEST) +From: "Tony L. Svanstrom" +X-X-Sender: tony@moon.campus.luth.se +To: Robin Lynn Frank +Cc: Justin Mason , + , +Subject: Re: [SAtalk] Re: patent on TMDA-like system +In-Reply-To: <1030506273.18567.TMDA@omega.paradigm-omega.net> +Message-Id: <20020828062019.Y10668-100000@moon.campus.luth.se> +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII + +On Tue, 27 Aug 2002 the voices made Robin Lynn Frank write: + +> > Tony Svanstrom, on SpamAssassin-talk, noted this US patent: +> > +> > http://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&u=/netah +> >tml/PTO/search-adv.html&r=62&f=G&l=50&d=PG01&s1=spam&p=2&OS=haiku&RS=spam + +> I took a bit of time to review what is on the above URL. If I were a news +> editor, the headline would be: +> +> "Inventor" from country that ignores patents and copyrights, seeks patent for +> inventing the wheel! + + The wheel is already patented in Australia; Melbourne man patents the wheel: + + + + + The sad news is that there seems to be a lot of patents (pending or not) +that's for very basic/general ideas; it's the current form of "domainnapping", +and it might turn uggly when people start trying to enfoce these patents. + + + /Tony +-- +# Per scientiam ad libertatem! // Through knowledge towards freedom! # +# Genom kunskap mot frihet! =*= (c) 1999-2002 tony@svanstrom.com =*= # + + perl -e'print$_{$_} for sort%_=`lynx -dump svanstrom.com/t`' + + diff --git a/Ch3/datasets/spam/easy_ham/00190.e26c75eb1c827ea35cf2e3407595fa67 b/Ch3/datasets/spam/easy_ham/00190.e26c75eb1c827ea35cf2e3407595fa67 new file mode 100644 index 000000000..1119d71b4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00190.e26c75eb1c827ea35cf2e3407595fa67 @@ -0,0 +1,134 @@ +From fork-admin@xent.com Wed Aug 28 10:50:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E8BC743F99 + for ; Wed, 28 Aug 2002 05:49:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:49:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7RIKgZ20480 for ; + Tue, 27 Aug 2002 19:20:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4E9BD2940C3; Tue, 27 Aug 2002 11:18:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id C557E2940C3 for ; + Tue, 27 Aug 2002 11:17:58 -0700 (PDT) +Received: (qmail 1107 invoked from network); 27 Aug 2002 18:19:59 -0000 +Received: from unknown (HELO maya.dyndns.org) (165.154.190.88) by + smtp1.superb.net with SMTP; 27 Aug 2002 18:19:59 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 16A5F1C388; + Tue, 27 Aug 2002 13:49:26 -0400 (EDT) +To: Mike Masnick +Cc: "Adam L. Beberg" , Tom , + +Subject: Re: The GOv gets tough on Net Users.....er Pirates.. +References: + <5.1.1.6.0.20020826113243.034de5d0@techdirt.com> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 27 Aug 2002 13:49:25 -0400 + +>>>>> "M" == Mike Masnick writes: + + M> In which world are we talking about? That may be true for the + M> first sale, but once something is out in the world, the + M> "creator" loses control... If I buy a chair you built, and then + M> decide to give it away to my neighbor, by you're definition, he + M> just stole from you. + +I don't endorse the whole RIAA thing, but to be accurate, you would +have to duplicate the chair so that both you and your neighbour could +continue to sit down, and yes, I suppose that would be more serious. + +They can sit on /your/ copy, but if you start churning out exact dups +of a name-brand artifact, people with law degrees start to smell +money. For example, I could copy a Gibson Guitar /exactly/ so long as +(a) I don't put Orville's name on the headstock and (b) I license the +patented bracing methods. If I instead try to sell a homebuilt guitar +on eBay with "Gibson" written in crayon on the headstock, and then +claim it is a true Les Paul limited edition, I expect people would get +upset. + + M> Why is it that people don't understand that giving stuff away + M> is a perfectly acceptable tactic in capitalist businesses? + +To play the Devil's Advocate here, it's not about giving /stuff/ away, +it is about granting endless and cascading duplication/distribution +rights. Even if _I_ only make the copy I give to you, that doesn't +stop you from making 10000 copies to sell. + + M> Access to free stuff often helps to sell other stuff. + +This is the difficult question: How will they draw the distinction? +The "other stuff" is just as easy to duplicate as the free stuff. +This is why MS is hunting people with illegal Windows; it's no harder +to dup than a Linux CD, only what is there that actually prevents +people from doing it? + +Personally, I don't think the issue should have anything to do with +sales or units. The issue is that basic phallacy that says a suit +should be able to "own" someone else's intellectual property. Sarah +McLaughlin isn't suing you, it's her label's legal dept because it's +the label who stands to lose; Sarah's already fat beyond her wildest +dreams, so a few bucks here or there, or even if the well dried up +tomorrow, it's not going to really traumatize her (unless she's been +blazingly stupid with her money) + +But the label ... like Disney and Mickey, they need the cash cow so +they can keep all sorts of uncreative hangers-on in limos and coke. +If you thought only Elvis or Brian Jones or Dennis Wilson had problems +with beautiful-people deadbeat leech "friends" draining their riches, +think again. + +The problem is really very simple because it is semantic, and until we +make the semantic flip, it's unsolvable, but like trisecting an angle, +all it takes is looking at the same situation in a different +way. Here's the revelation: Elvis never ever made a hit record. + +Elvis didn't make the hits, his /fans/ made the hits. His fans did +the work cleaning toilets, manning the convenience stores, driving +milk trucks, sitting at endless office desks, they did the /real/ +labour that paid for every last one of Elvis Presley's pills. All +Elvis did was sing into a microphone every so often, and pen or +collect the odd song that all those /people/ liked and wanted as +something of their own. But it's not _Elvis_ who made them universal +statements, it is the universe of fans who slurped the songs into +their own lives, it was pull-technology, not push. + +Therefore the question becomes: how many times must these fans pay +before they own what they themselves have created? They pay royalties +for listening to the radio, for blank tapes, for concert tickets, for +a beer in a bar with a cover band ... they pay over and over and over +again for the /right/ to make some hack writer's song /their/ +favourite song???? That's where the whole system has been seriously +warped by the record companies and ad companies reframing it into your +thinking that it is the Elvis who makes the Elvis. It's not. It's +the people who make them; the songs are already theirs. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00191.41a15d7d511bc977b0fcb93cd9492bd1 b/Ch3/datasets/spam/easy_ham/00191.41a15d7d511bc977b0fcb93cd9492bd1 new file mode 100644 index 000000000..3e22110ed --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00191.41a15d7d511bc977b0fcb93cd9492bd1 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Wed Aug 28 10:50:16 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3678844155 + for ; Wed, 28 Aug 2002 05:50:00 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:50:00 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7RKrhZ25471 for ; + Tue, 27 Aug 2002 21:53:44 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6D4392940D4; Tue, 27 Aug 2002 13:51:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav46.law15.hotmail.com [64.4.22.18]) by + xent.com (Postfix) with ESMTP id D4FAA29409A for ; + Tue, 27 Aug 2002 13:50:41 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Tue, 27 Aug 2002 13:52:43 -0700 +X-Originating-Ip: [63.224.51.161] +From: "Mr. FoRK" +To: "FoRK (E-mail)" +References: +Subject: Re: Startups, Bubbles, and Unemployment (fwd) +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Message-Id: +X-Originalarrivaltime: 27 Aug 2002 20:52:43.0733 (UTC) FILETIME=[B0C87850:01C24E0B] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 13:50:31 -0700 + +> Ultimately, there was a big +> disagreement about how to sell the product (sales guys wanted to sell +> the thing for a gazillion dollars to megaclients, but we thought it +> would make more sense to get more people using it so we could get more +> feedback from many different places). The bottom line was that the +> route we wound up going (megaclients for megabucks) had a megalong +> sales cycle. The sales force staffed up and tried to sell the +> earliest releases of the software -- even succeeding in a few +> significant cases -- but couldn't get enough to cover their own +> expenses, much less the actual development of the product. + +Now where have I seen that before.... oh yeah... its happening to me right +now... + + + diff --git a/Ch3/datasets/spam/easy_ham/00192.9ab41d05f7b9bad7f7eccf7d393293dc b/Ch3/datasets/spam/easy_ham/00192.9ab41d05f7b9bad7f7eccf7d393293dc new file mode 100644 index 000000000..e51ba1c09 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00192.9ab41d05f7b9bad7f7eccf7d393293dc @@ -0,0 +1,76 @@ +From fork-admin@xent.com Wed Aug 28 10:50:15 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 235A143F9B + for ; Wed, 28 Aug 2002 05:49:50 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:49:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7RInkZ21336 for ; + Tue, 27 Aug 2002 19:49:46 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 33F332940D2; Tue, 27 Aug 2002 11:47:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.auracom.net (smtp1.auracom.net [165.154.140.23]) by + xent.com (Postfix) with ESMTP id 33AAF29409A for ; + Tue, 27 Aug 2002 11:46:35 -0700 (PDT) +Received: from maya.dyndns.org (ts5-007.ptrb.interhop.net + [165.154.190.71]) by smtp1.auracom.net (8.11.2/8.11.2) with ESMTP id + g7RIMMS12577 for ; Tue, 27 Aug 2002 14:22:23 -0400 (EDT) +Received: by maya.dyndns.org (Postfix, from userid 501) id 032861C388; + Tue, 27 Aug 2002 14:28:18 -0400 (EDT) +To: +Subject: Re: The GOv gets tough on Net Users.....er Pirates.. +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 27 Aug 2002 13:30:53 -0400 + +>>>>> "A" == Adam L Beberg writes: + + A> I'm not displeased you're trying to help, just frustrated that + A> employers can demand such rediculous combinations of skills + A> with insane years of experience. + +>>>From my 25+ years in the playing field, IMHO the art of job-hunting +(for those not yet de-jobbed) is the art of getting past the HR-stage +interview and into the engineer-to-engineer interview. HR is not +being honest with you so there's no ethical quandry to be totally +honest with them: If they want experience numbers that would place you +in the OAK project, lead them to believe that you have "something +roughly equivalent" (ie "it wasn't 5 years, but it was three intense +years with plenty of overtime") -- they are playing a bluff in saying +/they/ know the job requirements so you're perfectly within poker +rules to bluff back to say you have it. + +If you /don't/ have the requisite Right Stuff, the engineers can +usually suss it out pretty fast during the second interview. Most +often, their choice is based 90% on "who can I work with" and only +maybe 10% on "how much/little will we have to tutor this candidate?" + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00193.56c58a594fe8a1e7b830f48eaf12e654 b/Ch3/datasets/spam/easy_ham/00193.56c58a594fe8a1e7b830f48eaf12e654 new file mode 100644 index 000000000..8a02e65a3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00193.56c58a594fe8a1e7b830f48eaf12e654 @@ -0,0 +1,53 @@ +From fork-admin@xent.com Wed Aug 28 11:30:34 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8A5C343F99 + for ; Wed, 28 Aug 2002 06:30:33 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 11:30:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SAViZ20088 for ; + Wed, 28 Aug 2002 11:31:45 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id ED9F32940D7; Wed, 28 Aug 2002 03:29:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id B372C29409A for + ; Wed, 28 Aug 2002 03:28:09 -0700 (PDT) +Received: from [192.168.123.198] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17k02i-0006OF-00 for ; Wed, 28 Aug 2002 07:27:20 -0300 +Message-Id: <3D6CA455.4010907@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) + Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Canadians +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 07:22:13 -0300 + + From the local paper this morning. +"Canadians eat about seven times as many doughnuts per capita"... (as +Americans) . D'oh! + +Owen + + + diff --git a/Ch3/datasets/spam/easy_ham/00194.c2c3f757416af5818ec89cf01a9aa601 b/Ch3/datasets/spam/easy_ham/00194.c2c3f757416af5818ec89cf01a9aa601 new file mode 100644 index 000000000..fafa63cd2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00194.c2c3f757416af5818ec89cf01a9aa601 @@ -0,0 +1,75 @@ +From barbarabarrett@orchidserve.com Wed Aug 28 11:19:29 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5010B43F99 + for ; Wed, 28 Aug 2002 06:19:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 11:19:28 +0100 (IST) +Received: from n17.grp.scd.yahoo.com (n17.grp.scd.yahoo.com + [66.218.66.72]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7SAGnZ19702 for ; Wed, 28 Aug 2002 11:16:49 +0100 +X-Egroups-Return: sentto-2242572-53143-1030529815-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.94] by n17.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 10:16:56 -0000 +X-Sender: barbarabarrett@orchidserve.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 10:16:55 -0000 +Received: (qmail 22034 invoked from network); 28 Aug 2002 10:16:55 -0000 +Received: from unknown (66.218.66.217) by m1.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 10:16:55 -0000 +Received: from unknown (HELO clustermail.minx.net.uk) (212.85.249.131) by + mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 10:16:55 -0000 +Received: from ppp-0-61.read-a-2.access.uk.tiscali.com ([80.40.83.61] + helo=orchidserve.com) by clustermail.minx.net.uk with esmtp (Exim 3.22 #2) + id 17jztk-0006me-00 for forteana@yahoogroups.com; Wed, 28 Aug 2002 + 11:18:04 +0100 +Message-Id: <3D6CA2D5.B4EFBBC7@orchidserve.com> +X-Mailer: Mozilla 4.73 [en] (Win95; I) +X-Accept-Language: en +To: zzzzteana@yahoogroups.com +References: <3D6ABC96.BFCEE890@mindspring.com> + <3D6B7C90.73475C1C@orchidserve.com> <3D6B7FA8.9060000@ee.ed.ac.uk> +From: Barbara Barrett +X-Yahoo-Profile: nfrwalso +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 11:15:49 +0100 +Subject: Re: [zzzzteana] FWD [fort] Evidence Britons Were In The US In The6th Century +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + + + +> > Barbara Blithered; +> > Others indicators this was a late invention are the use of the f rune +> > not only for "f", but inverted to mean "ff" (the welsh "v" phoneme) - + +> Stew Stired; +> Isn't it the other way round, f(welsh)=v(english) ff(welsh)=f(english). + +Barbara Babbles; +Mea culpa. That's what I get for reading my welsh dictionary upside +down; "F"n trouble ;-). +Barbara + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00195.d01606c130956bbbe4d0571e187a03de b/Ch3/datasets/spam/easy_ham/00195.d01606c130956bbbe4d0571e187a03de new file mode 100644 index 000000000..63399682f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00195.d01606c130956bbbe4d0571e187a03de @@ -0,0 +1,79 @@ +From barbarabarrett@orchidserve.com Wed Aug 28 11:19:35 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1BEAE43F9B + for ; Wed, 28 Aug 2002 06:19:34 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 11:19:34 +0100 (IST) +Received: from n32.grp.scd.yahoo.com (n32.grp.scd.yahoo.com + [66.218.66.100]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7SAL7Z19761 for ; Wed, 28 Aug 2002 11:21:07 +0100 +X-Egroups-Return: sentto-2242572-53142-1030529779-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.199] by n32.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 10:16:19 -0000 +X-Sender: barbarabarrett@orchidserve.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 10:16:18 -0000 +Received: (qmail 92514 invoked from network); 28 Aug 2002 10:16:18 -0000 +Received: from unknown (66.218.66.216) by m6.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 10:16:18 -0000 +Received: from unknown (HELO clustermail.minx.net.uk) (212.85.249.131) by + mta1.grp.scd.yahoo.com with SMTP; 28 Aug 2002 10:16:18 -0000 +Received: from ppp-0-61.read-a-2.access.uk.tiscali.com ([80.40.83.61] + helo=orchidserve.com) by clustermail.minx.net.uk with esmtp (Exim 3.22 #2) + id 17jzt8-0006a2-00 for forteana@yahoogroups.com; Wed, 28 Aug 2002 + 11:17:27 +0100 +Message-Id: <3D6CA2B0.EEF2DD84@orchidserve.com> +X-Mailer: Mozilla 4.73 [en] (Win95; I) +X-Accept-Language: en +To: zzzzteana@yahoogroups.com +References: <3D6B46AB.16257.1ED4E92C@localhost> + +From: Barbara Barrett +X-Yahoo-Profile: nfrwalso +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 11:15:12 +0100 +Subject: Re: [zzzzteana] Secondhand books online +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + + + +> Martin Mentioned: +> >I've used this a few times and can thoroughly recommend it. It really +> >doeswork. Frankly, the only drawback is finding too much stuff. + +>Rachel Rote; +> I'll be amazed if there's anyone on here who isn't already a heavy user! + +Barbara Babbles; +Be amazed - I've never bought anything online since an almighty cock up +with amazon dot con (that's not a typo) a few years back where I lost +all the dosh I'd paid them and had no books to show for it either. Had +it been the UK branch I'd have had them in the small claims court +quicker than you could drop LOTR on your foot and say "ouch", but as it +was the US branch I'd just no comeback. +Barbara + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00196.5a8ba13e30d79286b01472ef383d773d b/Ch3/datasets/spam/easy_ham/00196.5a8ba13e30d79286b01472ef383d773d new file mode 100644 index 000000000..aebe7da48 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00196.5a8ba13e30d79286b01472ef383d773d @@ -0,0 +1,65 @@ +From timc@2ubh.com Wed Aug 28 11:30:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 72BFA43F99 + for ; Wed, 28 Aug 2002 06:30:47 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 11:30:47 +0100 (IST) +Received: from n24.grp.scd.yahoo.com (n24.grp.scd.yahoo.com + [66.218.66.80]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7SANNZ19961 for ; Wed, 28 Aug 2002 11:23:23 +0100 +X-Egroups-Return: sentto-2242572-53144-1030530202-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.197] by n24.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 10:23:22 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 10:23:22 -0000 +Received: (qmail 42080 invoked from network); 28 Aug 2002 10:23:22 -0000 +Received: from unknown (66.218.66.217) by m4.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 10:23:22 -0000 +Received: from unknown (HELO carbon) (194.73.73.92) by + mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 10:23:21 -0000 +Received: from host217-34-71-140.in-addr.btopenworld.com ([217.34.71.140]) + by carbon with esmtp (Exim 3.22 #8) id 17jzyr-00072w-00 for + forteana@yahoogroups.com; Wed, 28 Aug 2002 11:23:21 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 11:22:33 +0100 +Subject: [zzzzteana] The new Steve Earle +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://www.nme.com/news/102774.htm + +CAM'RON associate JUELZ SANTANA has vehemently defended a lyric on the +forthcoming album by the pair's DIPLOMATS crew that pays tribute to +September 11 hijacker OMAR ATTA +... + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00197.811a3c4022f3c7c548fcc7df7782e1d8 b/Ch3/datasets/spam/easy_ham/00197.811a3c4022f3c7c548fcc7df7782e1d8 new file mode 100644 index 000000000..4092441c1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00197.811a3c4022f3c7c548fcc7df7782e1d8 @@ -0,0 +1,72 @@ +From martin@srv0.ems.ed.ac.uk Wed Aug 28 11:30:56 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0750643F9B + for ; Wed, 28 Aug 2002 06:30:55 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 11:30:55 +0100 (IST) +Received: from n23.grp.scd.yahoo.com (n23.grp.scd.yahoo.com + [66.218.66.79]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7SAOnZ19975 for ; Wed, 28 Aug 2002 11:24:49 +0100 +X-Egroups-Return: sentto-2242572-53145-1030530295-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.199] by n23.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 10:24:55 -0000 +X-Sender: martin@srv0.ems.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 10:24:55 -0000 +Received: (qmail 99948 invoked from network); 28 Aug 2002 10:24:55 -0000 +Received: from unknown (66.218.66.217) by m6.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 10:24:55 -0000 +Received: from unknown (HELO haymarket.ed.ac.uk) (129.215.128.53) by + mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 10:24:54 -0000 +Received: from srv0.ems.ed.ac.uk (srv0.ems.ed.ac.uk [129.215.117.0]) by + haymarket.ed.ac.uk (8.11.6/8.11.6) with ESMTP id g7SAOr312348 for + ; Wed, 28 Aug 2002 11:24:53 +0100 (BST) +Received: from EMS-SRV0/SpoolDir by srv0.ems.ed.ac.uk (Mercury 1.44); + 28 Aug 02 11:24:53 +0000 +Received: from SpoolDir by EMS-SRV0 (Mercury 1.44); 28 Aug 02 11:24:37 +0000 +Organization: Management School +To: zzzzteana@yahoogroups.com +Message-Id: <3D6CB30F.8946.246450AE@localhost> +Priority: normal +In-Reply-To: +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Description: Mail message body +From: "Martin Adamson" +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 11:24:30 +0100 +Subject: Re: [zzzzteana] The new Steve Earle +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + + +> CAM'RON associate JUELZ SANTANA has vehemently defended a lyric on the +> forthcoming album by the pair's DIPLOMATS crew that pays tribute to +> September 11 hijacker OMAR ATTA + +No, Steve Earle at least USED to make great records. + +Martin + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00198.abf0f5bd6209bb8e268d51902158e0aa b/Ch3/datasets/spam/easy_ham/00198.abf0f5bd6209bb8e268d51902158e0aa new file mode 100644 index 000000000..c58a88f39 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00198.abf0f5bd6209bb8e268d51902158e0aa @@ -0,0 +1,63 @@ +From ilug-admin@linux.ie Wed Aug 28 10:47:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5909644155 + for ; Wed, 28 Aug 2002 05:47:19 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:47:19 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7RIH1Z20293 for + ; Tue, 27 Aug 2002 19:17:01 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id TAA09344; Tue, 27 Aug 2002 19:15:38 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from mail03.svc.cra.dublin.eircom.net + (mail03.svc.cra.dublin.eircom.net [159.134.118.19]) by lugh.tuatha.org + (8.9.3/8.9.3) with SMTP id TAA09307 for ; Tue, + 27 Aug 2002 19:15:31 +0100 +Received: (qmail 47575 messnum 530151 invoked from + network[159.134.254.134/p134.as1.naas1.eircom.net]); 27 Aug 2002 18:15:00 + -0000 +Received: from p134.as1.naas1.eircom.net (HELO r1o8p1) (159.134.254.134) + by mail03.svc.cra.dublin.eircom.net (qp 47575) with SMTP; 27 Aug 2002 + 18:15:00 -0000 +From: "Jon" +To: +Date: Tue, 27 Aug 2002 19:14:48 +0100 +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.00.2919.6700 +Subject: [ILUG] Got me a crappy laptop +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Hey, +I has just been given an old Toshiba CS100 with earliest pentium and 400mb +of HD but only a floppy drive on it, its got Win3.1 which is funny to see +again but gonna be cleared as soon as i stop messing with it. What I was +wondering was could anyone advise what O/S would be good for this, I want a +small usable *nix distro for it that i can transfer to it fom floppy. +Connecting this to Winblows>i know that winblows allows pier-to-pier +connections over serial and parellel ports to other winblows but is this +easy do for connecting winblows to *nix??? + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00199.05aa582ea00818b07c867878ced559fb b/Ch3/datasets/spam/easy_ham/00199.05aa582ea00818b07c867878ced559fb new file mode 100644 index 000000000..c872939c3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00199.05aa582ea00818b07c867878ced559fb @@ -0,0 +1,58 @@ +From ilug-admin@linux.ie Wed Aug 28 10:47:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 71DA244159 + for ; Wed, 28 Aug 2002 05:47:21 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:47:21 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7RJWXZ22727 for + ; Tue, 27 Aug 2002 20:32:33 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id UAA12532; Tue, 27 Aug 2002 20:32:04 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from web13705.mail.yahoo.com (web13705.mail.yahoo.com + [216.136.175.138]) by lugh.tuatha.org (8.9.3/8.9.3) with SMTP id UAA12489 + for ; Tue, 27 Aug 2002 20:31:55 +0100 +Message-Id: <20020827193152.56961.qmail@web13705.mail.yahoo.com> +Received: from [194.237.142.5] by web13705.mail.yahoo.com via HTTP; + Tue, 27 Aug 2002 12:31:52 PDT +Date: Tue, 27 Aug 2002 12:31:52 -0700 (PDT) +From: Inn Share +To: ilug@linux.ie +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Subject: [ILUG] find the biggest file +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + + +Hi,all: + +Does anyone know how to list the biggest file in my +root directory?or the second biggest ..etc... + +Because I want to find out what is the reason cause my +root all most full. + +The system is Solaris 8 Sparc. + +Thanks !!! + +__________________________________________________ +Do You Yahoo!? +Yahoo! Finance - Get real-time stock quotes +http://finance.yahoo.com + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00200.883884dc35bd45feb65b9a351371a7c9 b/Ch3/datasets/spam/easy_ham/00200.883884dc35bd45feb65b9a351371a7c9 new file mode 100644 index 000000000..bb35844a7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00200.883884dc35bd45feb65b9a351371a7c9 @@ -0,0 +1,76 @@ +From ilug-admin@linux.ie Wed Aug 28 10:47:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7309344157 + for ; Wed, 28 Aug 2002 05:47:20 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:47:20 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7RISSZ20675 for + ; Tue, 27 Aug 2002 19:28:29 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id TAA10007; Tue, 27 Aug 2002 19:28:11 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from fiachra.ucd.ie (fiachra.ucd.ie [137.43.12.82]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id TAA09972 for ; + Tue, 27 Aug 2002 19:28:03 +0100 +Received: from gavin by fiachra.ucd.ie with local (Exim 3.35 #1 (Debian)) + id 17jl3C-0000Rs-00 for ; Tue, 27 Aug 2002 19:26:50 +0100 +Date: Tue, 27 Aug 2002 19:26:50 +0100 +From: Gavin McCullagh +To: ilug@linux.ie +Subject: Re: [ILUG] Got me a crappy laptop +Message-Id: <20020827182650.GC23883@fiachra.ucd.ie> +Reply-To: Irish Linux Users Group +Mail-Followup-To: ilug@linux.ie +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: +User-Agent: Mutt/1.3.28i +X-Gnupg-Publickey: http://fiachra.ucd.ie/~gavin/public.gpg +X-Operating-System: Linux 2.4.18 i686 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +On Tue, 27 Aug 2002, Jon wrote: + +> I has just been given an old Toshiba CS100 with earliest pentium and 400mb +> of HD but only a floppy drive on it, its got Win3.1 which is funny to see +> again but gonna be cleared as soon as i stop messing with it. What I was +> wondering was could anyone advise what O/S would be good for this, I want a +> small usable *nix distro for it that i can transfer to it fom floppy. +> Connecting this to Winblows>i know that winblows allows pier-to-pier +> connections over serial and parellel ports to other winblows but is this +> easy do for connecting winblows to *nix??? + +Have done exactly this with debian, only I used a PCMCIA network card and +did it off ftp.esat.net (ucd bandwidth is rather good). + +However, if you've another machine, look into this null modem cable jobby: + +http://rosebud.sps.queensu.ca/~edd/t100cs.html + +whether you can connect that to direct cable connectionI've no idea. You +could however, put the files onto windows, boot onto a ILUG BBC[tm] and +mount the fat32 partition. + +Easier/Quicker way is to get your hands on a PCMCIA nic. Also makes the +maptop far more useful in the long run. + +Gavin + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00201.190add142b96a42eec8969c51dcf89c7 b/Ch3/datasets/spam/easy_ham/00201.190add142b96a42eec8969c51dcf89c7 new file mode 100644 index 000000000..0c621da3c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00201.190add142b96a42eec8969c51dcf89c7 @@ -0,0 +1,62 @@ +From ilug-admin@linux.ie Wed Aug 28 10:47:51 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BD9B044156 + for ; Wed, 28 Aug 2002 05:47:26 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:47:26 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7RKKoZ24338 for + ; Tue, 27 Aug 2002 21:20:50 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id VAA14593; Tue, 27 Aug 2002 21:19:19 +0100 +Received: from marklar.elive.net (smtp.elive.ie [212.120.138.41]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id VAA14557 for ; + Tue, 27 Aug 2002 21:19:09 +0100 +Received: from gonzo.waider.ie + (IDENT:zbCsu2qvvPxAMgKG5/1BoVz7fvAHq4ae@1Cust48.tnt3.dub2.ie.uudial.net + [213.116.44.48]) by marklar.elive.net (8.11.6/8.11.6) with ESMTP id + g7RJolM28597 for ; Tue, 27 Aug 2002 20:50:47 +0100 +Received: from klortho.waider.ie + (IDENT:rRil9DCzd2WX06YswshhhkU/ahFcueXZ@klortho.waider.ie [10.0.0.100]) by + gonzo.waider.ie (8.11.6/8.11.6) with ESMTP id g7RKJ8730825 for + ; Tue, 27 Aug 2002 21:19:08 +0100 +Received: (from waider@localhost) by klortho.waider.ie (8.11.6/8.11.6) id + g7RKJAA18082; Tue, 27 Aug 2002 21:19:10 +0100 +X-Authentication-Warning: klortho.waider.ie: waider set sender to + waider@waider.ie using -f +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Message-Id: <15723.57022.25028.68954@klortho.waider.ie> +Date: Tue, 27 Aug 2002 21:19:10 +0100 +From: Ronan Waide +To: ILUG list +X-Mailer: VM 7.07 under Emacs 21.2.1 +Organization: poor at best. +Subject: [ILUG] doolin +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +If you're not in Doolin, beg, borrow, or steal your way there before +the LBW folk depart. It's far too much fun. + +Cheers, +Waider. Just back. +-- +waider@waider.ie / Yes, it /is/ very personal of me. +"...we are in fact well and truly doomed. She says that if I leave now, + I can probably get a good head start before they realize that I'm gone." + - Jamie Zawinski + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00202.fc22c26924eef6d26b3818db4450e2b6 b/Ch3/datasets/spam/easy_ham/00202.fc22c26924eef6d26b3818db4450e2b6 new file mode 100644 index 000000000..0ae0de114 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00202.fc22c26924eef6d26b3818db4450e2b6 @@ -0,0 +1,71 @@ +From ilug-admin@linux.ie Wed Aug 28 10:47:49 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8E6C243F99 + for ; Wed, 28 Aug 2002 05:47:23 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:47:23 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7RJaWZ22801 for + ; Tue, 27 Aug 2002 20:36:32 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id UAA12883; Tue, 27 Aug 2002 20:36:11 +0100 +Received: from hawk.dcu.ie (mail.dcu.ie [136.206.1.5]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id UAA12855 for ; Tue, + 27 Aug 2002 20:36:03 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host mail.dcu.ie [136.206.1.5] + claimed to be hawk.dcu.ie +Received: from prodigy.redbrick.dcu.ie (136.206.15.10) by hawk.dcu.ie + (6.0.040) id 3D6203D30002F387 for ilug@linux.ie; Tue, 27 Aug 2002 20:36:02 + +0100 +Received: by prodigy.redbrick.dcu.ie (Postfix, from userid 1023) id + 87B45DA4A; Tue, 27 Aug 2002 20:36:02 +0100 (IST) +Date: Tue, 27 Aug 2002 20:36:02 +0100 +From: Philip Reynolds +To: ilug@linux.ie +Subject: Re: [ILUG] find the biggest file +Message-Id: <20020827203602.G17908@prodigy.Redbrick.DCU.IE> +References: <20020827193152.56961.qmail@web13705.mail.yahoo.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +In-Reply-To: <20020827193152.56961.qmail@web13705.mail.yahoo.com>; + from shareinnn@yahoo.com on Tue, Aug 27, 2002 at 12:31:52PM -0700 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Inn Share's [shareinnn@yahoo.com] 22 lines of wisdom included: +> +> Hi,all: +> +> Does anyone know how to list the biggest file in my +> root directory?or the second biggest ..etc... +> +> Because I want to find out what is the reason cause my +> root all most full. + +$ find /dir -name \* | xargs du -s | sort -n + +Smallest files are listed first with the largest at the end. So if +you want to get the 5 largest files, pipe through tail. + +e.g. + +$ find /dir -name \* | xargs du -s | sort -n | tail -5 +-- + Philip Reynolds + RFC Networks tel: 01 8832063 +www.rfc-networks.ie fax: 01 8832041 + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00203.b5773afbae12d0d79df74b32b2f46697 b/Ch3/datasets/spam/easy_ham/00203.b5773afbae12d0d79df74b32b2f46697 new file mode 100644 index 000000000..9563950e0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00203.b5773afbae12d0d79df74b32b2f46697 @@ -0,0 +1,57 @@ +From ilug-admin@linux.ie Wed Aug 28 10:48:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id F1BA944158 + for ; Wed, 28 Aug 2002 05:47:30 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:47:31 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7RKP8Z24562 for + ; Tue, 27 Aug 2002 21:25:08 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id VAA14835; Tue, 27 Aug 2002 21:24:13 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from escargot.esatclear.ie (escargot.esatclear.ie + [194.145.128.30]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id VAA14809 + for ; Tue, 27 Aug 2002 21:24:05 +0100 +Received: from esatclear.ie (z-airlock153.esatclear.ie [213.202.166.153]) + by escargot.esatclear.ie (8.9.3/8.9.3) with ESMTP id VAA20194 for + ; Tue, 27 Aug 2002 21:23:34 +0100 +Message-Id: <3D6BE01E.9060403@esatclear.ie> +Date: Tue, 27 Aug 2002 21:25:02 +0100 +From: Paul Kelly +User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.1) + Gecko/20020824 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: ilug@linux.ie +Subject: Re: [ILUG] find the biggest file +References: <20020827193152.56961.qmail@web13705.mail.yahoo.com> + <20020827203602.G17908@prodigy.Redbrick.DCU.IE> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Philip Reynolds wrote: +>>Does anyone know how to list the biggest file in my +>>root directory?or the second biggest ..etc... +> $ find /dir -name \* | xargs du -s | sort -n + +You might want to put a '-type f' on that find. + +Paul. + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00204.5c64400ff51925eb0ca4bc7bdab0bc09 b/Ch3/datasets/spam/easy_ham/00204.5c64400ff51925eb0ca4bc7bdab0bc09 new file mode 100644 index 000000000..4947936bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00204.5c64400ff51925eb0ca4bc7bdab0bc09 @@ -0,0 +1,123 @@ +From ilug-admin@linux.ie Wed Aug 28 10:48:11 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3DDB64415A + for ; Wed, 28 Aug 2002 05:47:34 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:47:34 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7RKXmZ24942 for + ; Tue, 27 Aug 2002 21:33:48 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id VAA15298; Tue, 27 Aug 2002 21:32:40 +0100 +Received: from hibernia.jakma.org (hibernia.clubi.ie [212.17.32.129]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id VAA15263 for ; + Tue, 27 Aug 2002 21:32:32 +0100 +Received: from fogarty.jakma.org (fogarty.jakma.org [192.168.0.4]) by + hibernia.jakma.org (8.11.6/8.11.6) with ESMTP id g7RKWT715112; + Tue, 27 Aug 2002 21:32:29 +0100 +Received: from localhost (paul@localhost) by fogarty.jakma.org + (8.11.6/8.11.6) with ESMTP id g7RKWRn04752; Tue, 27 Aug 2002 21:32:27 + +0100 +X-Authentication-Warning: fogarty.jakma.org: paul owned process doing -bs +Date: Tue, 27 Aug 2002 21:32:26 +0100 (IST) +From: Paul Jakma +X-X-Sender: paul@fogarty.jakma.org +To: David Neary +Cc: ILUG list +Subject: Re: [ILUG] converting strings of hex to ascii +In-Reply-To: <20020827182940.A6217@wanadoo.fr> +Message-Id: +X-Nsa: iraq saddam hammas hisballah rabin ayatollah korea vietnam revolt + mustard gas +X-Dumb-Filters: aryan marijuiana cocaine heroin hardcore cum pussy porn + teen tit sex lesbian group +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +On Tue, 27 Aug 2002, David Neary wrote: + +> > Actually the following would be in some way sensible: +> > echo -e "`echo "$enc" | sed 's/%\([0-9a-fA-F]\{2,2\}\)/\\\x\1/g'`" +> +> Why {2,2}? Why not {2}? + +no idea. + +the above was something along the lines i was attempting, once i +realised it was a straight swap. but i couldnt get awk's gensub to +insert the \x for %'s and ='s. + +anyway, in the end i found something on the internet and adapted it: + +function decode_url (str, hextab,i,c,c1,c2,len,code) { + + # hex to dec lookup table + hextab ["0"] = 0; hextab ["8"] = 8; + hextab ["1"] = 1; hextab ["9"] = 9; + hextab ["2"] = 2; hextab ["A"] = 10; + hextab ["3"] = 3; hextab ["B"] = 11; + hextab ["4"] = 4; hextab ["C"] = 12; + hextab ["5"] = 5; hextab ["D"] = 13; + hextab ["6"] = 6; hextab ["E"] = 14; + hextab ["7"] = 7; hextab ["F"] = 15; + + decoded = ""; + i = 1; + len = length (str); + while ( i <= len ) { + c = substr (str, i, 1); + # check for usual start of URI hex encoding chars + if ( c == "%" || c == "=" ) { + if ( i+2 <= len ) { + # valid hex encoding? + c1 = toupper(substr(str, i+1, 1)); + c2 = toupper(substr(str, i+2, 1)); + if ( !(hextab [c1] == "" && hextab [c2] == "") ) { + code = 0 + hextab [c1] * 16 + hextab [c2] + 0 + c = sprintf ("%c", code) + i = i + 2 + } + } + # + is space apparently + } else if ( c == "+" ) { + c = " " + } + decoded = decoded c; + ++i; + } + return decoded +} + +> Cheers, +> Dave. + +> PS the late reply is because the footer on the original mail (If +> you received this mail in error yadda yadda) got caught in my +> spam filter, and ended up in my junkmail directory. + +he he... + +might not have been the footer - check my headers. :) + +regards, +-- +Paul Jakma paul@clubi.ie paul@jakma.org Key ID: 64A2FF6A + warning: do not ever send email to spam@dishone.st +Fortune: +One nuclear bomb can ruin your whole day. + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00205.a7ef07a6046817705ce83f59e2bd3ac8 b/Ch3/datasets/spam/easy_ham/00205.a7ef07a6046817705ce83f59e2bd3ac8 new file mode 100644 index 000000000..7f22ac676 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00205.a7ef07a6046817705ce83f59e2bd3ac8 @@ -0,0 +1,81 @@ +From ilug-admin@linux.ie Wed Aug 28 10:48:15 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 32D6B43F9B + for ; Wed, 28 Aug 2002 05:47:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:47:37 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7RKdcZ25021 for + ; Tue, 27 Aug 2002 21:39:38 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id VAA15702; Tue, 27 Aug 2002 21:39:17 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from smtp02do.de.uu.net (smtp02do.de.uu.net [192.76.144.69]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id VAA15670 for ; + Tue, 27 Aug 2002 21:39:09 +0100 +Received: from mayhem ([195.238.44.248]) by smtp02do.de.uu.net + (5.5.5/5.5.5) with ESMTP id WAA04757; Tue, 27 Aug 2002 22:39:02 +0200 (MET + DST) +From: "Spam" +To: "'Ronan Waide'" , "'ILUG list'" +Subject: RE: [ILUG] doolin +Date: Tue, 27 Aug 2002 21:38:40 +0100 +Message-Id: <003f01c24e09$bfbd1f70$f82ceec3@mayhem> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +In-Reply-To: <15723.57022.25028.68954@klortho.waider.ie> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Might just take a trip over there later tomorrow, it is after all only +on my backdoor-step... + +E. + + + +-----Original Message----- +From: ilug-admin@linux.ie [mailto:ilug-admin@linux.ie] On Behalf Of +Ronan Waide +Sent: 27 August 2002 21:19 +To: ILUG list +Subject: [ILUG] doolin + + +If you're not in Doolin, beg, borrow, or steal your way there before the +LBW folk depart. It's far too much fun. + +Cheers, +Waider. Just back. +-- +waider@waider.ie / Yes, it /is/ very personal of me. +"...we are in fact well and truly doomed. She says that if I leave now, + I can probably get a good head start before they realize that I'm +gone." + - Jamie Zawinski + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription +information. List maintainer: listmaster@linux.ie + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00206.5c77fcb0b64166d0fd0795b9d5f7330b b/Ch3/datasets/spam/easy_ham/00206.5c77fcb0b64166d0fd0795b9d5f7330b new file mode 100644 index 000000000..c8dbdcef5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00206.5c77fcb0b64166d0fd0795b9d5f7330b @@ -0,0 +1,67 @@ +From ilug-admin@linux.ie Wed Aug 28 10:48:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AE3D444155 + for ; Wed, 28 Aug 2002 05:47:38 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:47:38 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7RLWwZ26701 for + ; Tue, 27 Aug 2002 22:32:58 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id WAA17885; Tue, 27 Aug 2002 22:32:04 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from patan.sun.com (patan.Sun.COM [192.18.98.43]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id WAA17844 for ; + Tue, 27 Aug 2002 22:31:52 +0100 +Received: from dub-mail1.Ireland.Sun.COM ([129.156.220.69]) by + patan.sun.com (8.9.3+Sun/8.9.3) with ESMTP id PAA07217 for ; + Tue, 27 Aug 2002 15:31:50 -0600 (MDT) +Received: from Sun.COM (dbl-isdn-107 [129.156.227.107]) by + dub-mail1.Ireland.Sun.COM (8.10.2+Sun/8.10.2/ENSMAIL,v2.1p1) with ESMTP id + g7RLVmW07771 for ; Tue, 27 Aug 2002 22:31:48 +0100 (BST) +Message-Id: <3D6BEFBB.2030103@Sun.COM> +Date: Tue, 27 Aug 2002 22:31:39 +0100 +From: Darren Kenny +Reply-To: Darren.Kenny@Sun.COM +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: ilug@linux.ie +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Subject: [ILUG] Using Normal IDE Device with a Dell Latitude CPx laptop +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Hi, + +I've got an normal 3.5" CD-RW IDE drive that I'd like to be able to use with a +Dell Latitude CPx laptop that I've got. Does anyone know any way to enable this, +for example through the use of a special cable for the Modular Bay (where CD-ROM +or floppy drive is normally). + +There is also the possibility of using a docking station, but Dell's docking +solution for the Latitude series doesn't seem to allow for the use of an IDE +drive, only SCSI... Unless someone knows of a "non-Dell" solution that's +compatible. + +Anyone any ideas? + +Thanks, + +Darren. + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00207.13171e04f004b9e401b749be95abb2ea b/Ch3/datasets/spam/easy_ham/00207.13171e04f004b9e401b749be95abb2ea new file mode 100644 index 000000000..70663ebde --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00207.13171e04f004b9e401b749be95abb2ea @@ -0,0 +1,68 @@ +From ilug-admin@linux.ie Wed Aug 28 10:48:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E908B4415B + for ; Wed, 28 Aug 2002 05:47:43 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:47:43 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7RMdvZ28910 for + ; Tue, 27 Aug 2002 23:39:57 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id XAA20690; Tue, 27 Aug 2002 23:38:51 +0100 +Received: from claymore.diva.ie (diva.ie [195.218.115.17] (may be forged)) + by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id XAA20655 for + ; Tue, 27 Aug 2002 23:38:34 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host diva.ie [195.218.115.17] + (may be forged) claimed to be claymore.diva.ie +Received: from cunniffe.net (ts12-155.dublin.indigo.ie [194.125.172.155]) + by claymore.diva.ie (8.9.3/8.9.3) with ESMTP id XAA11539 for + ; Tue, 27 Aug 2002 23:38:31 +0100 +Message-Id: <3D6BFF48.8050306@cunniffe.net> +Date: Tue, 27 Aug 2002 23:38:00 +0100 +From: Vincent Cunniffe +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0.0) + Gecko/20020530 +X-Accept-Language: en, en-us +MIME-Version: 1.0 +To: ilug@linux.ie +Subject: Re: [ILUG] Using Normal IDE Device with a Dell Latitude CPx laptop +References: <3D6BEFBB.2030103@Sun.COM> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Darren Kenny wrote: +> Hi, +> +> I've got an normal 3.5" CD-RW IDE drive that I'd like to be able to use +> with a Dell Latitude CPx laptop that I've got. Does anyone know any way + > enable this, for example through the use of a special cable for the + > Modular Bay (where CD-ROM or floppy drive is normally). + +There is absolutely no way to use a conventional 3.5" drive with a +laptop directly. However, you can get an external firewire or USB +cradle and attach it to the laptop like that, and any 3.5" drive +will work in that case. + +Example : + +http://www.microsense.com/USB_35_combo.asp + +Regards, + +Vin + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00208.f6805ede51fb25adfc2bebfa72e70f3b b/Ch3/datasets/spam/easy_ham/00208.f6805ede51fb25adfc2bebfa72e70f3b new file mode 100644 index 000000000..526ddf32e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00208.f6805ede51fb25adfc2bebfa72e70f3b @@ -0,0 +1,79 @@ +From ilug-admin@linux.ie Wed Aug 28 10:48:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E75534415C + for ; Wed, 28 Aug 2002 05:47:47 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:47:47 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S6ntZ13755 for + ; Wed, 28 Aug 2002 07:49:55 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id HAA06566; Wed, 28 Aug 2002 07:49:03 +0100 +Received: from mel-rto6.wanadoo.fr (smtp-out-6.wanadoo.fr [193.252.19.25]) + by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id HAA06529 for + ; Wed, 28 Aug 2002 07:48:55 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host smtp-out-6.wanadoo.fr + [193.252.19.25] claimed to be mel-rto6.wanadoo.fr +Received: from mel-rta9.wanadoo.fr (193.252.19.69) by mel-rto6.wanadoo.fr + (6.5.007) id 3D6246E80033535F for ilug@linux.ie; Wed, 28 Aug 2002 08:48:24 + +0200 +Received: from bolsh.wanadoo.fr (80.8.224.71) by mel-rta9.wanadoo.fr + (6.5.007) id 3D49FFB7009AA6CF for ilug@linux.ie; Wed, 28 Aug 2002 08:48:24 + +0200 +Received: from dave by bolsh.wanadoo.fr with local (Exim 3.32 #1 (Debian)) + id 17jwiB-0003OJ-00 for ; Wed, 28 Aug 2002 08:53:55 +0200 +Date: Wed, 28 Aug 2002 08:53:55 +0200 +From: David Neary +To: ilug@linux.ie +Subject: Re: [ILUG] find the biggest file +Message-Id: <20020828085355.A12976@wanadoo.fr> +References: <20020827193152.56961.qmail@web13705.mail.yahoo.com> + <20020827203602.G17908@prodigy.Redbrick.DCU.IE> +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-15 +Content-Disposition: inline +In-Reply-To: <20020827203602.G17908@prodigy.Redbrick.DCU.IE> +User-Agent: Mutt/1.3.23i +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Philip Reynolds wrote: +> Inn Share's [shareinnn@yahoo.com] 22 lines of wisdom included: +> > +> > Hi,all: +> > +> > Does anyone know how to list the biggest file in my +> > root directory?or the second biggest ..etc... +> > +> > Because I want to find out what is the reason cause my +> > root all most full. +> +> $ find /dir -name \* | xargs du -s | sort -n +> +> Smallest files are listed first with the largest at the end. So if +> you want to get the 5 largest files, pipe through tail. + +Adding -r to the sort options, and piping through head instead, +might be a better idea. tail needs to read teh whole buffer, head +only reads the first n lines. + +Cheers, +Dave. + +-- + David Neary, + Marseille, France + E-Mail: bolsh@gimp.org + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00209.d685082621cfefa2f7a2e614b455258d b/Ch3/datasets/spam/easy_ham/00209.d685082621cfefa2f7a2e614b455258d new file mode 100644 index 000000000..16a75e3d3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00209.d685082621cfefa2f7a2e614b455258d @@ -0,0 +1,68 @@ +From ilug-admin@linux.ie Wed Aug 28 10:48:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D449644157 + for ; Wed, 28 Aug 2002 05:47:55 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:47:55 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S8BaZ15830 for + ; Wed, 28 Aug 2002 09:11:36 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA09504; Wed, 28 Aug 2002 09:10:56 +0100 +Received: from moe.jinny.ie (homer.jinny.ie [193.120.171.3]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id JAA09477 for ; + Wed, 28 Aug 2002 09:10:50 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host homer.jinny.ie + [193.120.171.3] claimed to be moe.jinny.ie +Received: from jlooney.jinny.ie (fw.jinny.ie [193.120.171.2]) by + moe.jinny.ie (Postfix) with ESMTP id B868C7FC40 for ; + Wed, 28 Aug 2002 09:10:49 +0100 (IST) +Received: by jlooney.jinny.ie (Postfix, from userid 500) id B797C9A1; + Wed, 28 Aug 2002 09:11:21 +0100 (IST) +Date: Wed, 28 Aug 2002 09:11:21 +0100 +From: "John P. Looney" +To: ilug@linux.ie +Subject: Re: [ILUG] Using Normal IDE Device with a Dell Latitude CPx laptop +Message-Id: <20020828081121.GI1696@jinny.ie> +Reply-To: ilug@linux.ie +Mail-Followup-To: ilug@linux.ie +References: <3D6BEFBB.2030103@Sun.COM> <3D6BFF48.8050306@cunniffe.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <3D6BFF48.8050306@cunniffe.net> +User-Agent: Mutt/1.4i +X-Os: Red Hat Linux 7.3/Linux 2.4.18-3 +X-Url: http://www.redbrick.dcu.ie/~valen +X-Gnupg-Publickey: http://www.redbrick.dcu.ie/~valen/public.asc +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +On Tue, Aug 27, 2002 at 11:38:00PM +0100, Vincent Cunniffe mentioned: +> There is absolutely no way to use a conventional 3.5" drive with a +> laptop directly. However, you can get an external firewire or USB +> cradle and attach it to the laptop like that, and any 3.5" drive +> will work in that case. + + Ah, they told me that about my A1200. Just got a video box, cut air holes +and a hole for the cables, then got an extra-long 2.5" to 3.5" IDE cable, +and connected it up. Had to make a few holes in the A1200 case for the +IDE cable too. + + Worked a charm. Until I dropped the disk one day onto concrete. + +Kate + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00210.a85c0673394ffce41e84cbd558ade870 b/Ch3/datasets/spam/easy_ham/00210.a85c0673394ffce41e84cbd558ade870 new file mode 100644 index 000000000..b263c8eed --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00210.a85c0673394ffce41e84cbd558ade870 @@ -0,0 +1,69 @@ +From ilug-admin@linux.ie Wed Aug 28 10:48:51 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3448844159 + for ; Wed, 28 Aug 2002 05:47:59 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:47:59 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S8UiZ16366 for + ; Wed, 28 Aug 2002 09:30:45 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA10413; Wed, 28 Aug 2002 09:29:33 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from motgate4.mot.com (motgate4.mot.com [144.189.100.102]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id JAA10378 for ; + Wed, 28 Aug 2002 09:29:25 +0100 +Received: [from mothost.mot.com (mothost.mot.com [129.188.137.101]) by + motgate4.mot.com (motgate4 2.1) with ESMTP id BAA25720 for ; + Wed, 28 Aug 2002 01:29:22 -0700 (MST)] +Received: [from zei02exm02.cork.cig.mot.com (zei02exm02.cork.cig.mot.com + [175.3.80.202]) by mothost.mot.com (MOT-pobox 2.0) with ESMTP id BAA21939 + for ; Wed, 28 Aug 2002 01:29:49 -0700 (MST)] +Received: by zei02exm02.cork.cig.mot.com with Internet Mail Service + (5.5.2654.52) id ; Wed, 28 Aug 2002 09:29:20 +0100 +Message-Id: <496E31A690F7D311B93C0008C789494C07F08AC1@zei02exm01.cork.cig.mot.com> +From: Aherne Peter-pahern02 +To: "'ilug@linux.ie'" +Date: Wed, 28 Aug 2002 09:29:19 +0100 +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2654.52) +Content-Type: text/plain; charset="iso-8859-1" +Subject: [ILUG] [OT] Dell machine giving me hassle. +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Ok, Iknow this is blatantly OT but I'm beginning to go insane. +Had an old Dell Dimension XPS sitting in the corner and decided to +put it to use, I know it was working pre being stuck in the +corner, but when I plugged it in, hit the power nothing happened. +I opened her up and had a look and say nothing much. A little orange +LED comes on when I plug her in but that's it, after some googling +I found some reference to re-seating all the parts, but no change. +The problem I'm having is that since the power supply is some Dell +specific one, ATX block with what looks like one of the old AT +power connectors, I cant figure out weather this is a Mobo prob +or a PSU prob. Just to futily try and drag this back OT, I want +to install Linux on it when I get it working. If anyone knows +what the problem might be give me a shout. + +Cheers, +Peter. + +-- +Peter Aherne, Software Engineer, +Motorola Ireland Ltd. +Ph: +353 21 4511234 Mobile: +353 87 2246834 + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00211.3ccf7a2df02a7f7ec7160e29eacfd8ee b/Ch3/datasets/spam/easy_ham/00211.3ccf7a2df02a7f7ec7160e29eacfd8ee new file mode 100644 index 000000000..cf36c6e19 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00211.3ccf7a2df02a7f7ec7160e29eacfd8ee @@ -0,0 +1,61 @@ +From ilug-admin@linux.ie Wed Aug 28 10:48:59 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5F6FD44156 + for ; Wed, 28 Aug 2002 05:48:04 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:48:04 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S8UwZ16376 for + ; Wed, 28 Aug 2002 09:30:58 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA10572; Wed, 28 Aug 2002 09:30:39 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from escargot.esatclear.ie (escargot.esatclear.ie + [194.145.128.30]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id JAA10541 + for ; Wed, 28 Aug 2002 09:30:30 +0100 +Received: from esatclear.ie (r-airlock096.esatclear.ie [194.165.171.96]) + by escargot.esatclear.ie (8.9.3/8.9.3) with ESMTP id JAA11953 for + ; Wed, 28 Aug 2002 09:30:25 +0100 +Message-Id: <3D6C8A7A.6090302@esatclear.ie> +Date: Wed, 28 Aug 2002 09:31:55 +0100 +From: Paul Kelly +User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.1) + Gecko/20020824 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: ilug@linux.ie +Subject: Re: [ILUG] Using Normal IDE Device with a Dell Latitude CPx laptop +References: <3D6BEFBB.2030103@Sun.COM> <3D6BFF48.8050306@cunniffe.net> + <20020828081121.GI1696@jinny.ie> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +John P. Looney wrote: +>>There is absolutely no way to use a conventional 3.5" drive with a +>>laptop directly. +> Ah, they told me that about my A1200. +> +> Worked a charm. Until I dropped the disk one day onto concrete. + +Go on. Tell them how long the /first/ one lasted. + +I vote external firewire if the laptop has the ports for it. + +Paul. + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00212.51860640683706a0041c8576cf35fe26 b/Ch3/datasets/spam/easy_ham/00212.51860640683706a0041c8576cf35fe26 new file mode 100644 index 000000000..2bc90318b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00212.51860640683706a0041c8576cf35fe26 @@ -0,0 +1,87 @@ +From ilug-admin@linux.ie Wed Aug 28 10:49:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3A6414415D + for ; Wed, 28 Aug 2002 05:48:07 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:48:07 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S8bdZ16583 for + ; Wed, 28 Aug 2002 09:37:39 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA10924; Wed, 28 Aug 2002 09:36:58 +0100 +Received: from ATLAS2K.atlasalu.ie ([217.78.4.138]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA10888 for ; Wed, + 28 Aug 2002 09:36:49 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host [217.78.4.138] claimed to + be ATLAS2K.atlasalu.ie +Received: by ATLAS2K.atlasalu.ie with Internet Mail Service (5.5.2653.19) + id ; Wed, 28 Aug 2002 09:36:40 +0100 +Message-Id: <97E3260093E08D43A791F2DF1584C29708369C@ATLAS2K.atlasalu.ie> +From: Philip O Brien +To: "'ilug@linux.ie'" +Subject: FW: [ILUG] Using Normal IDE Device with a Dell Latitude CPx lapto p +Date: Wed, 28 Aug 2002 09:36:39 +0100 +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2653.19) +Content-Type: text/plain; charset="iso-8859-1" +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +I vote usb 1.1 as the chances are the cdr drive is not over 8x write and +thus fireware is of no real use... +but i cant see how you are going to get it working without a cradle. I cant +even get my dell laptop dvd drive to work +as the connectors are not the same as my cd drive ones.. seems dell cant +keep any standards going :-( + + +-----Original Message----- +From: Paul Kelly [mailto:longword@esatclear.ie] +Sent: 28 August 2002 09:32 +To: ilug@linux.ie +Subject: Re: [ILUG] Using Normal IDE Device with a Dell Latitude CPx +laptop + + +John P. Looney wrote: +>>There is absolutely no way to use a conventional 3.5" drive with a +>>laptop directly. +> Ah, they told me that about my A1200. +> +> Worked a charm. Until I dropped the disk one day onto concrete. + +Go on. Tell them how long the /first/ one lasted. + +I vote external firewire if the laptop has the ports for it. + +Paul. + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + +DISCLAIMER: The information in this message is confidential and may be +legally privileged. It is intended solely for the addressee. Access to this +message by anyone else is unauthorised. If you are not the intended +recipient, any disclosure, copying, or distribution of the message, or any +action or omission taken by you in reliance on it, is prohibited and may be +unlawful. Please immediately contact the sender if you have received this +message in error. Thank you. + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00213.cbab995631e4345875a326d533cf6cd6 b/Ch3/datasets/spam/easy_ham/00213.cbab995631e4345875a326d533cf6cd6 new file mode 100644 index 000000000..82f197371 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00213.cbab995631e4345875a326d533cf6cd6 @@ -0,0 +1,96 @@ +From ilug-admin@linux.ie Wed Aug 28 10:49:13 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C7CCF4415E + for ; Wed, 28 Aug 2002 05:48:09 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:48:09 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S8eIZ16642 for + ; Wed, 28 Aug 2002 09:40:18 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA11246; Wed, 28 Aug 2002 09:39:22 +0100 +Received: from kbs01.kbs.ie ([213.190.156.48]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA11221 for ; Wed, + 28 Aug 2002 09:39:14 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host [213.190.156.48] claimed + to be kbs01.kbs.ie +Received: by KBS01 with Internet Mail Service (5.5.2653.19) id ; + Wed, 28 Aug 2002 09:56:42 +0100 +Message-Id: <55DA5264CE16D41186F600D0B74D6B092472BB@KBS01> +From: "Brian O'Donoghue" +To: "'ilug@linux.ie'" +Subject: RE: [ILUG] [OT] Dell machine giving me hassle. +Date: Wed, 28 Aug 2002 09:56:41 +0100 +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2653.19) +Content-Type: text/plain; charset="iso-8859-1" +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + + + +> -----Original Message----- +> From: Aherne Peter-pahern02 [mailto:peter.aherne@motorola.com] +> Sent: 28 August 2002 09:29 +> To: 'ilug@linux.ie' +> Subject: [ILUG] [OT] Dell machine giving me hassle. +> +> Ok, Iknow this is blatantly OT but I'm beginning to go insane. +> Had an old Dell Dimension XPS sitting in the corner and decided to +> put it to use, I know it was working pre being stuck in the +> corner, but when I plugged it in, hit the power nothing happened. +> I opened her up and had a look and say nothing much. A little orange +> LED comes on when I plug her in but that's it, after some googling +> I found some reference to re-seating all the parts, but no change. +> The problem I'm having is that since the power supply is some Dell +> specific one, ATX block with what looks like one of the old AT +> power connectors, I cant figure out weather this is a Mobo prob +> or a PSU prob. Just to futily try and drag this back OT, I want +> to install Linux on it when I get it working. If anyone knows +> what the problem might be give me a shout. + + +Here is what you do. + +Remove all the PCI & ISA/EISA cards. +Remove the floppy disk cable from the mobo, the ide cables from the mobo... +essentially leaving only a video card... ram and a keyboard plugged in. + +Turn on the system. +If it doesn't POST then, switch it off and remove the video card. + +Switch it back on ... if your mobo doesn't emit some beeps complaining about +lack of video card then. + +Switch it off. +Remove it's ram. + +Same procedure as above. + +If you still don't have any kind of mobo beep codes then you can try as a +last ditch effort to reseat the cpu... (remembering to never ever ever power +up your system without a heatsink & fan). + +If after reseating the cpu into the mobo... you still get no beep codes, +from it with just the cpu inserted into the mobo ie(no pci,*isa cards or and +no actual ide or floppy cables connected to the system)... even though you +have power... you either have a faulty motherboard or a faulty cpu. + +Once you get beep codes various permutations of the above should eventually +disjunct which device it is, is causing the lack of POST. +Power On Self Test. + +Bod + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00214.ccc58960373c957d965f300ace6c9576 b/Ch3/datasets/spam/easy_ham/00214.ccc58960373c957d965f300ace6c9576 new file mode 100644 index 000000000..2f8164f27 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00214.ccc58960373c957d965f300ace6c9576 @@ -0,0 +1,60 @@ +From ilug-admin@linux.ie Wed Aug 28 10:49:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 92B1943F99 + for ; Wed, 28 Aug 2002 05:48:12 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:48:12 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S8h3Z16828 for + ; Wed, 28 Aug 2002 09:43:03 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA11476; Wed, 28 Aug 2002 09:42:02 +0100 +Received: from kbs01.kbs.ie ([213.190.156.48]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA11440 for ; Wed, + 28 Aug 2002 09:41:53 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host [213.190.156.48] claimed + to be kbs01.kbs.ie +Received: by KBS01 with Internet Mail Service (5.5.2653.19) id ; + Wed, 28 Aug 2002 09:59:21 +0100 +Message-Id: <55DA5264CE16D41186F600D0B74D6B092472BC@KBS01> +From: "Brian O'Donoghue" +To: "'ilug@linux.ie'" +Subject: RE: [ILUG] [OT] Dell machine giving me hassle. +Date: Wed, 28 Aug 2002 09:59:21 +0100 +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2653.19) +Content-Type: text/plain; charset="iso-8859-1" +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + + + +> > Ok, Iknow this is blatantly OT but I'm beginning to go insane. +> > Had an old Dell Dimension XPS sitting in the corner and decided to +> > put it to use, I know it was working pre being stuck in the +> > corner, but when I plugged it in, hit the power nothing happened. +> > I opened her up and had a look and say nothing much. A little orange +> > LED comes on when I plug her in but that's it, after some googling +> > I found some reference to re-seating all the parts, but no change. +> > The problem I'm having is that since the power supply is some Dell +> > specific one, ATX block with what looks like one of the old AT +> > power connectors, I cant figure out weather this is a Mobo prob +> > or a PSU prob. Just to futily try and drag this back OT, I want +> > to install Linux on it when I get it working. If anyone knows +> > what the problem might be give me a shout. + +Ie if you are getting a little orange LED when you plug it in then your PSU +is probably working. + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00215.d09b3f3c0df56258c17c3de4dfbfc6c6 b/Ch3/datasets/spam/easy_ham/00215.d09b3f3c0df56258c17c3de4dfbfc6c6 new file mode 100644 index 000000000..f452bd63d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00215.d09b3f3c0df56258c17c3de4dfbfc6c6 @@ -0,0 +1,65 @@ +From ilug-admin@linux.ie Wed Aug 28 10:49:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 684BD44158 + for ; Wed, 28 Aug 2002 05:48:19 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:48:19 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S8wTZ17205 for + ; Wed, 28 Aug 2002 09:58:29 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA12291; Wed, 28 Aug 2002 09:57:42 +0100 +Received: from corvil.com. (k100-159.bas1.dbn.dublin.eircom.net + [159.134.100.159]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id JAA12252 + for ; Wed, 28 Aug 2002 09:57:32 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host k100-159.bas1.dbn.dublin.eircom.net + [159.134.100.159] claimed to be corvil.com. +Received: from corvil.com (pixelbeat.local.corvil.com [172.18.1.170]) by + corvil.com. (8.12.5/8.12.5) with ESMTP id g7S8vSn4051594 for + ; Wed, 28 Aug 2002 09:57:28 +0100 (IST) (envelope-from + padraig.brady@corvil.com) +Message-Id: <3D6C9060.7090308@corvil.com> +Date: Wed, 28 Aug 2002 09:57:04 +0100 +From: Padraig Brady +Organization: Corvil Networks +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020408 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: ilug@linux.ie +Subject: Re: [ILUG] directory merging +References: <20020827082935.GS13271@jinny.ie> +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 8bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +John P. Looney wrote: +> I've two directories, that once upon a time contained the same files. +> +> Now, they don't. +> +> Is there a tool to merge the two - create a new directory where if the +> files are the same, they aren't changed, if they are different, the one +> with the most recent datestamp is used... + +Just for the record mc has a nice directory +comparison function. This is really nice +when using the ftp VFS for e.g. Of course +if you use something like ftpfs you can use +the previously mentioned tools. + +Pádraig. + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00216.70fc915ba97c52baa07a10c19b89f848 b/Ch3/datasets/spam/easy_ham/00216.70fc915ba97c52baa07a10c19b89f848 new file mode 100644 index 000000000..823fc93fc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00216.70fc915ba97c52baa07a10c19b89f848 @@ -0,0 +1,81 @@ +From ilug-admin@linux.ie Wed Aug 28 10:49:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id CD2E84415A + for ; Wed, 28 Aug 2002 05:48:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:48:28 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S90nZ17251 for + ; Wed, 28 Aug 2002 10:00:49 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id KAA12731; Wed, 28 Aug 2002 10:00:21 +0100 +Received: from storm.liquidweb.com ([66.96.230.15]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id KAA12673 for ; Wed, + 28 Aug 2002 10:00:09 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host [66.96.230.15] claimed to + be storm.liquidweb.com +Received: from [213.190.156.25] (helo=dogBear) by storm.liquidweb.com with + smtp (Exim 3.35 #1) id 17jyfg-0001yN-00 for ilug@linux.ie; Wed, + 28 Aug 2002 04:59:28 -0400 +Message-Id: <002501c24e71$68298e20$f600a8c0@dogBear> +From: "Carlos Luna" +To: +Date: Wed, 28 Aug 2002 10:00:45 +0100 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - storm.liquidweb.com +X-Antiabuse: Original Domain - linux.ie +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - steorn.com +Subject: [ILUG] PPPD disconnects on me! +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Hello folks! +I'm new to Linux, so here goes... +I've been trying to get connected to the outside world through my modem. +I've got Debian with kernel 2.4.18. +I've got this Win-Modem(yes, I know) and managed to locate a proper driver +for it. +Minicom is very much able to dial out. +But there seems to be a problem with my PPPD installation. +When I type 'ppp' in the minicom terminal, all I get (after the initial info +of my dynamic IP, etc) is a ~ and then the NO CARRIER signal. +Then I looked into calling pppd directly using chat. +I used this command: pppd call Provider (where Provider is some script +somewhere). +It dials, it connects, it sends my username & password, and when connection +is established, it gives the SIGHUP signal and exits. +This is confirmed when me friend and I tried to connect through a serial +port using pppd to connect ttyS0. I ran pppd waiting for a connection, me +friend tried connecting and as soon as he did, pppd exited. + +Some expert help would be greatly appreciated as I'm sick and tired of +having to reboot, get into Windoze to hook up to the net and then back to +Linux, mounting this drive to get that file, etc. It'd be nice never have +to go back to Windoze(except for games, that is). + +Thanks a million. +Carlos + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00217.e2416507f33a5350042484cc38de4800 b/Ch3/datasets/spam/easy_ham/00217.e2416507f33a5350042484cc38de4800 new file mode 100644 index 000000000..ea39f7b23 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00217.e2416507f33a5350042484cc38de4800 @@ -0,0 +1,83 @@ +From ilug-admin@linux.ie Wed Aug 28 10:49:32 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 359AF43F9B + for ; Wed, 28 Aug 2002 05:48:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:48:37 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S91AZ17260 for + ; Wed, 28 Aug 2002 10:01:10 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA12592; Wed, 28 Aug 2002 09:59:28 +0100 +Received: from mel-rto6.wanadoo.fr (smtp-out-6.wanadoo.fr [193.252.19.25]) + by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id JAA12553 for + ; Wed, 28 Aug 2002 09:59:19 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host smtp-out-6.wanadoo.fr + [193.252.19.25] claimed to be mel-rto6.wanadoo.fr +Received: from mel-rta9.wanadoo.fr (193.252.19.69) by mel-rto6.wanadoo.fr + (6.5.007) id 3D6246E800347B50 for ilug@linux.ie; Wed, 28 Aug 2002 10:58:49 + +0200 +Received: from bolsh.wanadoo.fr (80.8.224.71) by mel-rta9.wanadoo.fr + (6.5.007) id 3D49FFB7009BCDDF for ilug@linux.ie; Wed, 28 Aug 2002 10:58:49 + +0200 +Received: from dave by bolsh.wanadoo.fr with local (Exim 3.32 #1 (Debian)) + id 17jykN-0003gD-00 for ; Wed, 28 Aug 2002 11:04:19 +0200 +Date: Wed, 28 Aug 2002 11:04:19 +0200 +From: David Neary +To: ILUG list +Subject: Re: [ILUG] converting strings of hex to ascii +Message-Id: <20020828110419.C7705@wanadoo.fr> +References: <20020827182940.A6217@wanadoo.fr> + +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-15 +Content-Disposition: inline +In-Reply-To: +User-Agent: Mutt/1.3.23i +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Paul Jakma wrote: +> On Tue, 27 Aug 2002, David Neary wrote: +> +> > > Actually the following would be in some way sensible: +> > > echo -e "`echo "$enc" | sed 's/%\([0-9a-fA-F]\{2,2\}\)/\\\x\1/g'`" +> > +> > Why {2,2}? Why not {2}? +> +> the above was something along the lines i was attempting, once i +> realised it was a straight swap. but i couldnt get awk's gensub to +> insert the \x for %'s and ='s. + +Perl's pack() would do the job... + +> > PS the late reply is because the footer on the original mail (If +> > you received this mail in error yadda yadda) got caught in my +> > spam filter, and ended up in my junkmail directory. +> +> might not have been the footer - check my headers. :) + +Actually, it was worse - a bodycheck showed up a "remove" URL. I +need a new spam filter (but I want to be able to process false +positives, rather than dump them). + +Cheers, +Dave. + +-- + David Neary, + Marseille, France + E-Mail: bolsh@gimp.org + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00218.17547ce08d682678c539484cf094982d b/Ch3/datasets/spam/easy_ham/00218.17547ce08d682678c539484cf094982d new file mode 100644 index 000000000..bff99a1df --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00218.17547ce08d682678c539484cf094982d @@ -0,0 +1,73 @@ +From ilug-admin@linux.ie Wed Aug 28 10:49:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AAE4B44155 + for ; Wed, 28 Aug 2002 05:48:43 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:48:43 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S9M7Z17908 for + ; Wed, 28 Aug 2002 10:22:07 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id KAA14199; Wed, 28 Aug 2002 10:21:10 +0100 +Received: from corvil.com. (k100-159.bas1.dbn.dublin.eircom.net + [159.134.100.159]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id KAA14163 + for ; Wed, 28 Aug 2002 10:21:00 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host k100-159.bas1.dbn.dublin.eircom.net + [159.134.100.159] claimed to be corvil.com. +Received: from corvil.com (pixelbeat.local.corvil.com [172.18.1.170]) by + corvil.com. (8.12.5/8.12.5) with ESMTP id g7S9Kxn4053202; Wed, + 28 Aug 2002 10:20:59 +0100 (IST) (envelope-from padraig.brady@corvil.com) +Message-Id: <3D6C95E3.4000308@corvil.com> +Date: Wed, 28 Aug 2002 10:20:35 +0100 +From: Padraig Brady +Organization: Corvil Networks +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020408 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Inn Share +Cc: ilug@linux.ie +Subject: Re: [ILUG] find the biggest file +References: <20020827193152.56961.qmail@web13705.mail.yahoo.com> +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 8bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Inn Share wrote: +> Hi,all: +> +> Does anyone know how to list the biggest file in my +> root directory?or the second biggest ..etc... +> +> Because I want to find out what is the reason cause my +> root all most full. +> +> The system is Solaris 8 Sparc. +> +> Thanks !!! + +I think everybody has their own version of this, +but in case it's useful.. (only tested on Linux): + +find $* \( -type f -o -type l \) -maxdepth 1 -mindepth 1 -print0 | +xargs -r0 du -b --max-depth 0 | +sort -k1n | +grep -v "^0" + +Pádraig. + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00219.642f44312e1eaf0fbecf90d6b39876d9 b/Ch3/datasets/spam/easy_ham/00219.642f44312e1eaf0fbecf90d6b39876d9 new file mode 100644 index 000000000..b2039e1de --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00219.642f44312e1eaf0fbecf90d6b39876d9 @@ -0,0 +1,80 @@ +From ilug-admin@linux.ie Wed Aug 28 10:49:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 968644415F + for ; Wed, 28 Aug 2002 05:48:38 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:48:38 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S9FtZ17840 for + ; Wed, 28 Aug 2002 10:15:55 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id KAA13581; Wed, 28 Aug 2002 10:14:51 +0100 +Received: from nl-nie-irelay01.cmg.nl ([212.136.56.7]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id KAA13544 for ; Wed, + 28 Aug 2002 10:14:41 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host [212.136.56.7] claimed to + be nl-nie-irelay01.cmg.nl +Received: from nl-nie-route01.cmg.nl (nl-nie-route01.cmg.nl + [10.224.191.106]) by nl-nie-irelay01.cmg.nl (8.12.1/8.12.1) with ESMTP id + g7S9CF7e003573; Wed, 28 Aug 2002 11:12:15 +0200 (MEST) +Received: from wintermute.att.cmg.nl (ieattp1ifs6.att.cmg.nl + [10.226.4.202]) by nl-nie-route01.cmg.nl with SMTP (Microsoft Exchange + Internet Mail Service Version 5.5.2653.13) id RPZHMLB1; Wed, + 28 Aug 2002 11:14:03 +0200 +Received: from ocorrain by wintermute.att.cmg.nl with local (Exim 3.35 #1 + (Debian)) id 17jyuO-0001tY-00; Wed, 28 Aug 2002 10:14:40 +0100 +To: Inn Share +Cc: ilug@linux.ie +Subject: Re: [ILUG] find the biggest file +References: <20020827193152.56961.qmail@web13705.mail.yahoo.com> +From: Tiarnan O Corrain +Date: 28 Aug 2002 10:14:34 +0100 +In-Reply-To: <20020827193152.56961.qmail@web13705.mail.yahoo.com> +Message-Id: <871y8jibut.fsf@wintermute.att.cmg.nl> +User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/21.2 +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-15 +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by lugh.tuatha.org id + KAA13544 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Inn Share writes: + +> Hi,all: +> +> Does anyone know how to list the biggest file in my +> root directory?or the second biggest ..etc... +> +> Because I want to find out what is the reason cause my +> root all most full. + +find / -xdev -type f -exec du -sk {} \; | sort -rn | head -5 + + -xdev will stop find recursing into other filesystems. + +Cheers +Tiarnan + + +-- +Tiarnán Ó Corráin +Consultant / System Administrator +CMG Wireless Data Solutions Ltd. +Tel.: +353 21 4933200 +Fax: +353 21 4933201 + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00220.7c18420ed3257e8630e67dd0045f6563 b/Ch3/datasets/spam/easy_ham/00220.7c18420ed3257e8630e67dd0045f6563 new file mode 100644 index 000000000..74518b265 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00220.7c18420ed3257e8630e67dd0045f6563 @@ -0,0 +1,76 @@ +From ilug-admin@linux.ie Wed Aug 28 10:49:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 022664415B + for ; Wed, 28 Aug 2002 05:48:52 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:48:52 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S9OZZ18095 for + ; Wed, 28 Aug 2002 10:24:35 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id KAA14364; Wed, 28 Aug 2002 10:23:52 +0100 +Received: from corvil.com. (k100-159.bas1.dbn.dublin.eircom.net + [159.134.100.159]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id KAA14339 + for ; Wed, 28 Aug 2002 10:23:44 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host k100-159.bas1.dbn.dublin.eircom.net + [159.134.100.159] claimed to be corvil.com. +Received: from corvil.com (pixelbeat.local.corvil.com [172.18.1.170]) by + corvil.com. (8.12.5/8.12.5) with ESMTP id g7S9Nin4053396 for + ; Wed, 28 Aug 2002 10:23:44 +0100 (IST) (envelope-from + padraig.brady@corvil.com) +Message-Id: <3D6C9688.6010203@corvil.com> +Date: Wed, 28 Aug 2002 10:23:20 +0100 +From: Padraig Brady +Organization: Corvil Networks +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020408 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: ILUG list +Subject: Re: [ILUG] converting strings of hex to ascii +References: + <3D6A0BB1.8050607@corvil.com> <3D6A0DA5.6050104@corvil.com> + <20020827182940.A6217@wanadoo.fr> +Content-Type: text/plain; charset=ISO-8859-15; format=flowed +Content-Transfer-Encoding: 8bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +David Neary wrote: +> Padraig Brady wrote: +> +>>>Paul Jakma wrote: +>>> +>>>>chars in hex to plain ASCII? +>>>> +>>>>eg given +>>>> http://w%77%77%2Eo%70%74%6F%72%69um.n%65t/remove.html +>>>> +>>>>is there an easy way to turn it into +>>>> +>>>> http://www.optorium.net/remove.html +>>>>eg, whether by piping through some already available tool, or +>>>>programmatically (printf? - but i dont see how.). +>>> +>>Actually the following would be in some way sensible: +>>echo -e "`echo "$enc" | sed 's/%\([0-9a-fA-F]\{2,2\}\)/\\\x\1/g'`" +> +> +> Why {2,2}? Why not {2}? + +Me being silly, that's all. + +Pádraig. + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00221.073d8414c8d4801265b1894e139284f9 b/Ch3/datasets/spam/easy_ham/00221.073d8414c8d4801265b1894e139284f9 new file mode 100644 index 000000000..a0e10b2d4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00221.073d8414c8d4801265b1894e139284f9 @@ -0,0 +1,66 @@ +From ilug-admin@linux.ie Wed Aug 28 10:49:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id F0D4B4415C + for ; Wed, 28 Aug 2002 05:48:56 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:48:56 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S9TnZ18148 for + ; Wed, 28 Aug 2002 10:29:49 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id KAA14801; Wed, 28 Aug 2002 10:29:09 +0100 +Received: from dirac1.thphys.may.ie (IDENT:0@dirac1.thphys.may.ie + [149.157.205.161]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id KAA14770 + for ; Wed, 28 Aug 2002 10:29:02 +0100 +Received: from dirac1.thphys.may.ie (IDENT:1208@localhost [127.0.0.1]) by + dirac1.thphys.may.ie (8.12.4/8.11.4) with ESMTP id g7S9T0Qq018215 for + ; Wed, 28 Aug 2002 10:29:01 +0100 +Received: from localhost (mpaturya@localhost) by dirac1.thphys.may.ie + (8.12.4/8.12.4/Submit) with ESMTP id g7S9T0C5018212 for ; + Wed, 28 Aug 2002 10:29:00 +0100 +X-Authentication-Warning: dirac1.thphys.may.ie: mpaturya owned process + doing -bs +Date: Wed, 28 Aug 2002 10:28:59 +0100 (IST) +From: Vanush Paturyan +To: ilug@linux.ie +Subject: Re: [ILUG] [OT] Dell machine giving me hassle. +In-Reply-To: <496E31A690F7D311B93C0008C789494C07F08AC1@zei02exm01.cork.cig.mot.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + + +I'm not familiar with Dell Dimension XPS, and, to be honest, not familiar +with any brand-name computers. Most of my experience is China +motherboards, but I've seen same behavior once. Changing the battery helps +that time. It was big round battery with 'Panasonic' on it. +Computer starts beeping then we removed battery from MB. It even booted up +(well, loosing time and some other things). + +Just my 2 cents. + +Misha + +On Wed, 28 Aug 2002, Aherne Peter-pahern02 wrote: + +> Ok, Iknow this is blatantly OT but I'm beginning to go insane. +> Had an old Dell Dimension XPS sitting in the corner and decided to +> put it to use, + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00222.09f314ba527328f1537a99a2423af0c6 b/Ch3/datasets/spam/easy_ham/00222.09f314ba527328f1537a99a2423af0c6 new file mode 100644 index 000000000..77a825f34 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00222.09f314ba527328f1537a99a2423af0c6 @@ -0,0 +1,58 @@ +From ilug-admin@linux.ie Wed Aug 28 10:50:01 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 947BF44157 + for ; Wed, 28 Aug 2002 05:49:06 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:49:06 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S9l1Z18753 for + ; Wed, 28 Aug 2002 10:47:01 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id KAA15554; Wed, 28 Aug 2002 10:45:58 +0100 +Received: from webshield (webshield.tcd.ie [134.226.1.66]) by + lugh.tuatha.org (8.9.3/8.9.3) with SMTP id KAA15518 for ; + Wed, 28 Aug 2002 10:45:51 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host webshield.tcd.ie + [134.226.1.66] claimed to be webshield +Received: FROM barge.dsg.cs.tcd.ie BY webshield ; Wed Aug 28 10:45:49 2002 + +0100 +Received: (from david@localhost) by barge.dsg.cs.tcd.ie (8.11.2/8.11.2) id + g7S9mDY03689 for ilug@linux.ie; Wed, 28 Aug 2002 10:48:13 +0100 +Date: Wed, 28 Aug 2002 10:48:13 +0100 +From: "David O'Callaghan" +To: ilug@linux.ie +Subject: Re: [ILUG] Newbie seeks advice - Suse 7.2 +Message-Id: <20020828104813.C1470@barge.tcd.ie> +Mail-Followup-To: ilug@linux.ie +References: <3d65260f.948.0@mail.dnet.co.uk> <3D65F1C7.3080500@corvil.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.3.12i +In-Reply-To: <3D65F1C7.3080500@corvil.com>; from padraig.brady@corvil.com + on Fri, Aug 23, 2002 at 09:26:47AM +0100 +X-Operating-System: Linux barge 2.4.19 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +On Fri, Aug 23, 2002 at 09:26:47AM +0100, Padraig Brady wrote: +[...] +> probably a bit old, 7.3 and 8.0 are out. + +And I've been told by a SuSE rep that 8.1 will be out in October, +for those who are interested. + +David + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00223.02084417d77ed822ef1ba7391a7ff417 b/Ch3/datasets/spam/easy_ham/00223.02084417d77ed822ef1ba7391a7ff417 new file mode 100644 index 000000000..01102964a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00223.02084417d77ed822ef1ba7391a7ff417 @@ -0,0 +1,120 @@ +From rpm-list-admin@freshrpms.net Wed Aug 28 10:45:55 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A89CC44158 + for ; Wed, 28 Aug 2002 05:45:22 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:45:22 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7RMwrZ29512 for + ; Tue, 27 Aug 2002 23:58:53 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7RMt8J31837; Wed, 28 Aug 2002 00:55:08 + +0200 +Received: from unknown (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7RMs1J23188; Wed, 28 Aug 2002 00:54:01 +0200 +From: Matthias Saou +To: valhalla-list@spamassassin.taint.org, RPM-List +Subject: ALSA (almost) made easy +Message-Id: <20020828004215.4bca2588.matthias@rpmforge.net> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.1claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 00:42:15 +0200 +Date: Wed, 28 Aug 2002 00:42:15 +0200 + +Hi all, + +I've decided at last to test the ALSA sound drivers. As usual the result is +that I've spent much more time repackaging the darn thing than actually +testing the functionalities or trying to hear the great sound quality +people seem to think it outputs... but hey, some of you will benefit from +that, right? ;-) + +I've got the whole thing working on a Valhalla system, but the packages +should easily install or at least recompile on Enigma, Limbo/(null) and +maybe others, who knows ;-) + +Here are quick instructions for those of you that wish to try it out : +- Recompile the "alsa-driver" source rpm for your running kernel + (you can install the binary package if you're using the i686 2.4.18-10) +- Install this "alsa-driver" package +- Install the "alsa-libs" package +- Install the "alsa-utils" package + +Now go to this URL and find out what you need to change in your +/etc/modules.conf file to replace the default OSS driver loading : +http://www.alsa-project.org/alsa-doc/ +(very complete and very good documentation!) +Hopefully you'll see that your card *is* supported ;-) + +Reboot, or remove by hand your current sound modules (you'll probably need +to stop many applications to free the sound resource...) "by hand" and +insert the new ones. If all is well you've got ALSA working! ("dmesg" to +check is a good idea), you now just need to adjust the volume levels with +e.g. aumix and alsamixer because everything is muted by default. + +With "aplay" you can already test files to see if you hear anything. You +can also install the XMMS plugin (seems to make my XMMS segfault on exit... +hmmm, but maybe it's another plugin) to listen to your good ol' mp3 +files... that's it! + +It really isn't complicated, and has never been from what I see. The only +thing I disliked was to have to install from source... but as I can't +imagine myself doing that ;-) I've repackaged everything cleanly. Even the +/dev entries are included in the rpm package (and *not* created by an ugly +%post script, I insist!) and seamlessly integrate into the /etc/makedev.d +structure. There are also a few other noticeable differences with the +default provided ALSA spec files, for example I've split alsa-lib's +development files into an alsa-lib-devel package and included static +libraries... there are others of course (oh yes, the kernel version against +which the "alsa-driver" package is compiled gets neatly integrated in the +rpm release, so does the architecture!). + +I'm open to any comments or suggestions about these packages! + +Download : +http://ftp.freshrpms.net/pub/freshrpms/testing/alsa/ + +Current spec files : +http://freshrpms.net/builds/alsa-driver/alsa-driver.spec +http://freshrpms.net/builds/alsa-lib/alsa-lib.spec +http://freshrpms.net/builds/alsa-utils/alsa-utils.spec +(All others, patches etc. : http://freshrpms.net/builds/ ) + +Matthias + +PS: As an extra bonus, I've also recompiled xine with alsa support! Simply +run "xine -A alsa09" and off you go! It may even support 5.1 and S/PDIF ;-) + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10 +Load : 0.57 0.42 0.42, AC on-line, battery charging: 29% (1:55) + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/00224.937d82e92fbb4a21cc11cc49310eff39 b/Ch3/datasets/spam/easy_ham/00224.937d82e92fbb4a21cc11cc49310eff39 new file mode 100644 index 000000000..19a04320e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00224.937d82e92fbb4a21cc11cc49310eff39 @@ -0,0 +1,112 @@ +From exmh-workers-admin@redhat.com Wed Aug 28 11:51:59 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5244143F99 + for ; Wed, 28 Aug 2002 06:51:59 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 11:51:59 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SAjqZ20559 for + ; Wed, 28 Aug 2002 11:45:55 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 96FA13EC3A; Wed, 28 Aug 2002 + 06:46:01 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 9E13B3EC3A + for ; Wed, 28 Aug 2002 06:45:18 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7SAjFW14386 for exmh-workers@listman.redhat.com; Wed, 28 Aug 2002 + 06:45:15 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7SAjFY14382 for + ; Wed, 28 Aug 2002 06:45:15 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g7SAU7l27968 for ; + Wed, 28 Aug 2002 06:30:08 -0400 +Received: from delta.cs.mu.OZ.AU (dhcp253.cc.psu.ac.th [192.168.2.253]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7SAikU28134 for + ; Wed, 28 Aug 2002 17:44:46 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g7SAiSW20156 for ; + Wed, 28 Aug 2002 17:44:28 +0700 (ICT) +From: Robert Elz +To: exmh-workers@spamassassin.taint.org +Subject: Patch to enable/disable log +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <20154.1030531468@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 17:44:28 +0700 + +While I was playing with the past issues, it annoyed me that there was +no easy way to make the log stop growing (I don't mean to truncate it, +I mean to just freeze it for a while). + +The following patch adds a new button to the log window, which allows +the log to be switched on/off (the button says "Disable" when the +log is enabled, and the button disables it, and "Enable" when the log +is frozen, and the button enables it again). + +kre + +--- main.tcl Wed Aug 21 15:01:48 2002 ++++ /usr/local/lib/exmh-2.5/main.tcl Wed Aug 28 17:36:59 2002 +@@ -385,6 +385,9 @@ + ExmhLogCreate + wm withdraw $exmh(logTop) + } ++ if {! $exmh(logWrite)} { ++ return ++ } + if [info exists exmh(log)] { + catch { + # $exmh(log) insert end " [bw_delta] " +@@ -407,6 +410,9 @@ + set exmh(logWindow) 1 + Exwin_Toplevel .log "Exmh Log" Log + set exmh(logTop) .log ++ set exmh(logDisableBut) \ ++ [Widget_AddBut $exmh(logTop).but swap "Disable" ExmhLogToggle] ++ set exmh(logWrite) 1 + Widget_AddBut $exmh(logTop).but trunc "Truncate" ExmhLogTrunc + Widget_AddBut $exmh(logTop).but save "Save To File" ExmhLogSave + set exmh(logYview) 1 +@@ -457,6 +463,12 @@ + } msg] { + Exmh_Status "Cannot save log: $msg" error + } ++} ++proc ExmhLogToggle {} { ++ global exmh ++ ++ set exmh(logWrite) [expr ! $exmh(logWrite)] ++ $exmh(logDisableBut) configure -text [lindex {"Enable " Disable} $exmh(logWrite)] + } + #### Misc + + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00225.13c1eaece69dd93afacadb48189e65fc b/Ch3/datasets/spam/easy_ham/00225.13c1eaece69dd93afacadb48189e65fc new file mode 100644 index 000000000..bc1ef3661 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00225.13c1eaece69dd93afacadb48189e65fc @@ -0,0 +1,146 @@ +From mcardier@hotmail.com Wed Aug 28 11:52:09 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1463743F99 + for ; Wed, 28 Aug 2002 06:52:06 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 11:52:06 +0100 (IST) +Received: from n21.grp.scd.yahoo.com (n21.grp.scd.yahoo.com + [66.218.66.77]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7SAo7Z20688 for ; Wed, 28 Aug 2002 11:50:07 +0100 +X-Egroups-Return: sentto-2242572-53147-1030531814-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.196] by n21.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 10:50:14 -0000 +X-Sender: mcardier@hotmail.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 10:50:13 -0000 +Received: (qmail 43692 invoked from network); 28 Aug 2002 10:50:13 -0000 +Received: from unknown (66.218.66.216) by m3.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 10:50:13 -0000 +Received: from unknown (HELO hotmail.com) (64.4.16.121) by + mta1.grp.scd.yahoo.com with SMTP; 28 Aug 2002 10:50:13 -0000 +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Wed, 28 Aug 2002 03:50:13 -0700 +To: "Forteana List" +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Message-Id: +X-Originalarrivaltime: 28 Aug 2002 10:50:13.0702 (UTC) FILETIME=[B0193E60:01C24E80] +From: "Matt Cardier" +X-Originating-Ip: [210.49.51.78] +X-Yahoo-Profile: matthewcardier2001 +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 20:42:14 +1000 +Subject: [zzzzteana] Compensation for World's youngest mother +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://www.cnn.com/2002/WORLD/americas/08/26/peru.mother.reut/index.html + +LIMA, Peru (Reuters) -- Lina Medina's parents thought their 5-year-old daughter had a huge abdominal tumor and when shamans in their remote village in Peru's Andes could find no cure, her father carried her to hospital. + +Just over a month later, she gave birth to a boy. + +Aged 5 years, seven months and 21 days old when her child was born by Caesarean section in May 1939, Medina made medical history, and is still the youngest known mother in the world. + +At the time, Peru's government promised aid that never materialized. Six decades on, Medina lives with her husband in a cramped house in a poor, crime-ridden district of the Peruvian capital known as "Little Chicago." + +Now 68, she keeps herself to herself and has long refused requests to rake up the past. Gerardo, the son she delivered while still a child herself, died in 1979 at the age of 40. + +But a new book, written by an obstetrician who has been interested in her case, has drawn fresh attention to Medina's story, and raised the prospect that the Peruvian government may belatedly offer her financial and other assistance. + +"The government condemned them to live in poverty. In any other country, they would be the objects of special care," Jose Sandoval, author of "Mother Aged 5," told Reuters. + +"We still have time to repair the damage done to her. That's my fundamental objective," he added. + +'Totally willing to help' +Sandoval has raised Medina's case with the office of first lady Eliane Karp, and has asked the government to grant her a life pension -- something officials say is possible. + +"We're totally willing to help her," said spokeswoman Marta Castaneda. But Suni Ramos, of the social action department of Karp's office, said that before the government could grant her a pension or any other of the aid it was already planning -- such as kitchen and other household equipment -- it needed to talk to her to discuss what she wanted and needed. It is currently trying to contact Medina and her family. + +Medina's husband, Raul Jurado, told Reuters his wife remained skeptical. "She got no help (in 1939) that I know about," he said. "She thinks governments never deliver. Maybe today there will be a promise that will never come true." + +Jurado said his wife, whose story is a medical textbook classic and whose case is confirmed as true by such bodies as the American College of Obstetricians and Gynecologists, had turned down Reuters' request for an interview. + +Medical rarity +No one has ever established who was the father of Medina's child, or confirmed she became pregnant after being raped. + +One of nine children born to country folk in Ticrapo, an Andean village at an altitude of 7,400 feet (2,250 meters) in Peru's poorest province, Medina is believed to be the youngest case of precocious puberty in history, Sandoval said. + +He said she had her first period at 2 1/2, became pregnant aged 4 years and eight months and that when doctors performed the Caesarean to deliver her baby, they found she already had fully mature sexual organs. + +Her swelling stomach worried her parents. "They thought it was a tumor," he said. But shamans ruled out village superstitions -- including one in which locals believed a snake grew inside a person until it killed them -- and recommended they take her to hospital in the nearest big town, Pisco. + +There came the staggering diagnosis that she was pregnant. + +Her father was jailed temporarily on suspicion of incest -- he was later released for lack of evidence -- and doctors, police and even a film crew set off for her village for preliminary investigations into her case. + +Sandoval, who based his book on media and other published information, and some interviews with relatives as Medina herself declined to comment, said news of the child mother-to-be drew instant offers of aid, including one worth $5,000 from a U.S. businessman, which was turned down. + +More offers followed after Medina was transferred to a Lima hospital, where her fully developed 6-pound (2.7 kg) baby was born on May 14, 1939 -- Mother's Day. + +One offer was worth $1,000 a week, plus expenses, for Medina and her baby to be exhibited at the World's Fair in New York. Another, from a U.S. business that the family accepted in early June 1939, was for the pair to travel to the United States for scientists to study the case. The offer included setting up a fund to ensure their lifelong financial comfort. + +But within days, the state trumped all previous offers, decreeing that Medina and her baby were in "moral danger," and resolving to set up a special commission to protect them. + +But Sandoval said: "It abandoned the case after six months ...It did absolutely nothing for them." + +Happy ending? +Though physically mature, Medina -- who Sandoval said was mentally normal and showed no other unusual medical symptoms -- still behaved like a child, preferring to play with her dolls instead of the new baby, who was fed by a wet nurse. + +Medina stayed in hospital for 11 months, finally returning to her family after it began legal proceedings that led to a Supreme Court ruling allowing her to live with them again. + +After taunting from schoolmates, Gerardo -- who was named after one of the doctors who attended Medina and became their mentor -- discovered when he was 10 that the woman he had grown up believing to be his sister was in fact his mother. + +He died in 1979 from a disease that attacks the body's bone marrow, but Sandoval said it was not clear there was any link with his illness and the fact his mother had been so young. + +Medina married and in 1972 had a second son, 33 years after her first. Her second child now lives in Mexico. + +She appears to have turned her bizarre story into a taboo subject. "We just want to get on with our lives, that's it," said Jurado, adding he thought "absolutely nothing" of the fact his wife was the world's youngest mother. + +He said the couple's main concern now, if the government's offer of aid was genuine, was to be granted the value of a property that belonged to Medina and which the then-government expropriated more than two decades ago. That house has now been destroyed and there is a road on the site. + +He said its value was "more or less $25,000" and settling the property question would conclude a long legal battle to get back a home of their own -- they live now in a modest house, accessed down a dingy alley half blocked by a wooden board, in a tough neighborhood known to locals as a thieves' paradise. + +"If the government really wants to help...they should give us the value of our property," he said. + +As for Sandoval, he said he was optimistic that Medina's story, which he has studied since his student days, would turn out well. "I believe there will be a happy ending," he said. + +"As a result of the war, corporations have now been enthroned and an era +of corruption in high places will follow and the money-power of the +country will endeavor to prolong its reign by working upon the +prejudices of the people until the wealth is aggregated in a few hands +and the Republic is destroyed." +Abraham Lincoln (Nov 21, 1864 in a letter to Col. William F Elkins) + + + + + +[Non-text portions of this message have been removed] + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00226.b629152d594cf90a252b1f45dce90a65 b/Ch3/datasets/spam/easy_ham/00226.b629152d594cf90a252b1f45dce90a65 new file mode 100644 index 000000000..dabeba46b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00226.b629152d594cf90a252b1f45dce90a65 @@ -0,0 +1,71 @@ +From Steve_Burt@cursor-system.com Wed Aug 28 12:02:23 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 928E843F9B + for ; Wed, 28 Aug 2002 07:02:22 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 12:02:22 +0100 (IST) +Received: from n24.grp.scd.yahoo.com (n24.grp.scd.yahoo.com + [66.218.66.80]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7SB3PZ21257 for ; Wed, 28 Aug 2002 12:03:25 +0100 +X-Egroups-Return: sentto-2242572-53149-1030532611-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.195] by n24.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 11:03:31 -0000 +X-Sender: steve.burt@cursor-system.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 11:03:31 -0000 +Received: (qmail 72439 invoked from network); 28 Aug 2002 11:03:30 -0000 +Received: from unknown (66.218.66.218) by m2.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 11:03:30 -0000 +Received: from unknown (HELO mailgateway.cursor-system.com) (62.189.7.27) + by mta3.grp.scd.yahoo.com with SMTP; 28 Aug 2002 11:03:30 -0000 +Received: from exchange1.cps.local (unverified) by + mailgateway.cursor-system.com (Content Technologies SMTPRS 4.2.10) with + ESMTP id for + ; Wed, 28 Aug 2002 12:04:42 +0100 +Received: by exchange1.cps.local with Internet Mail Service (5.5.2653.19) + id ; Wed, 28 Aug 2002 12:03:29 +0100 +Message-Id: <5EC2AD6D2314D14FB64BDA287D25D9EF12B510@exchange1.cps.local> +To: "'zzzzteana@yahoogroups.com'" +X-Mailer: Internet Mail Service (5.5.2653.19) +X-Egroups-From: Steve Burt +From: Steve Burt +X-Yahoo-Profile: pyruse +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 12:03:28 +0100 +Subject: [zzzzteana] RE:Pictish +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Barbara wrote: +Pictish pictograms (still undeciphered) +----------------------- +I'd be interested in an update on the latest thinking on these things. +Particularly the 'swimming elephant' pictogram. + +There's a book come out recently on the world's undeciphered scripts +(including Linear A and Etruscan). +Has any list member read it? + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00227.9e23fa007bc1e12a6b957372d24116f0 b/Ch3/datasets/spam/easy_ham/00227.9e23fa007bc1e12a6b957372d24116f0 new file mode 100644 index 000000000..7509cb46c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00227.9e23fa007bc1e12a6b957372d24116f0 @@ -0,0 +1,76 @@ +From robert.chambers@baesystems.com Wed Aug 28 12:22:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C9D2643F99 + for ; Wed, 28 Aug 2002 07:22:42 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 12:22:42 +0100 (IST) +Received: from n29.grp.scd.yahoo.com (n29.grp.scd.yahoo.com + [66.218.66.85]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7SBKeZ21715 for ; Wed, 28 Aug 2002 12:20:41 +0100 +X-Egroups-Return: sentto-2242572-53150-1030533640-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.201] by n29.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 11:20:43 -0000 +X-Sender: robert.chambers@baesystems.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 11:20:40 -0000 +Received: (qmail 58973 invoked from network); 28 Aug 2002 11:20:40 -0000 +Received: from unknown (66.218.66.218) by m9.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 11:20:40 -0000 +Received: from unknown (HELO n9.grp.scd.yahoo.com) (66.218.66.93) by + mta3.grp.scd.yahoo.com with SMTP; 28 Aug 2002 11:20:42 -0000 +Received: from [66.218.67.156] by n9.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 11:20:42 -0000 +To: zzzzteana@yahoogroups.com +Message-Id: +In-Reply-To: <3D6C9D54.27778.240F6D50@localhost> +User-Agent: eGroups-EW/0.82 +X-Mailer: Yahoo Groups Message Poster +From: "uncle_slacky" +X-Originating-Ip: 20.138.254.2 +X-Yahoo-Profile: uncle_slacky +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 11:20:41 -0000 +Subject: [zzzzteana] Re: That wacky imam +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +--- In forteana@y..., "Martin Adamson" wrote: +> For an alternative, and rather more factually based, rundown on +Hamza's +> career, including his belief that all non Muslims in Yemen should +be murdered +> outright: +> +> http://memri.org/bin/articles.cgi?Page=archives&Area=ia&ID=IA7201 + +And we know how unbiased MEMRI is, don't we.... + +http://www.guardian.co.uk/elsewhere/journalist/story/0,7792,773258,00. +html + +Rob + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00228.6cf71899d7146e93641d4ad9d0aeb34e b/Ch3/datasets/spam/easy_ham/00228.6cf71899d7146e93641d4ad9d0aeb34e new file mode 100644 index 000000000..fe7b9f8b0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00228.6cf71899d7146e93641d4ad9d0aeb34e @@ -0,0 +1,76 @@ +From timc@2ubh.com Wed Aug 28 13:03:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A1E1943F99 + for ; Wed, 28 Aug 2002 08:03:47 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 13:03:47 +0100 (IST) +Received: from n9.grp.scd.yahoo.com (n9.grp.scd.yahoo.com [66.218.66.93]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7SC2RZ22876 for + ; Wed, 28 Aug 2002 13:02:27 +0100 +X-Egroups-Return: sentto-2242572-53151-1030536148-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.201] by n9.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 12:02:30 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 12:02:27 -0000 +Received: (qmail 33671 invoked from network); 28 Aug 2002 12:02:27 -0000 +Received: from unknown (66.218.66.216) by m9.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 12:02:27 -0000 +Received: from unknown (HELO carbon) (194.73.73.92) by + mta1.grp.scd.yahoo.com with SMTP; 28 Aug 2002 12:02:29 -0000 +Received: from host217-34-71-140.in-addr.btopenworld.com ([217.34.71.140]) + by carbon with esmtp (Exim 3.22 #8) id 17k1Wm-0001UI-00 for + forteana@yahoogroups.com; Wed, 28 Aug 2002 13:02:29 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 13:01:34 +0100 +Subject: [zzzzteana] Lincs lizard +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://yorkshirepost.co.uk/scripts/editorial2.cgi?cid=news&aid=481687 + +2.5ft lizard 'abandoned' at resort + +Holidaymakers at a seaside resort were stunned to find a 2.5ft lizard +sunning itself at a caravan park close to a beach. +The savannah monitor lizard was captured at Chapel St Leonards, Lincs, on +Sunday by a member of the public before being collected by an RSPCA team. +RSPCA officer Justin Stubbs, who took the lizard to a specialist carer, +said: "Savannah monitors can give a nasty bite and we certainly wouldn't +have wanted one loose in a busy holiday resort for long." +Officials believe the animal may have been abandoned by a private owner +because it has not been reported missing. +Savannah monitor lizards originate in Africa and are carnivorous, eating +rats and small rodents. They can grow to 4ft in length. +Anyone with information about the lizard can contact the RSPCA in confidence +on 08705 555 999. + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00229.5ee5fd3867d69cd25a5fde771fda0094 b/Ch3/datasets/spam/easy_ham/00229.5ee5fd3867d69cd25a5fde771fda0094 new file mode 100644 index 000000000..53c6b5cfc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00229.5ee5fd3867d69cd25a5fde771fda0094 @@ -0,0 +1,100 @@ +From timc@2ubh.com Wed Aug 28 13:03:49 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9686143F9B + for ; Wed, 28 Aug 2002 08:03:48 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 13:03:48 +0100 (IST) +Received: from n26.grp.scd.yahoo.com (n26.grp.scd.yahoo.com + [66.218.66.82]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7SC4OZ23062 for ; Wed, 28 Aug 2002 13:04:24 +0100 +X-Egroups-Return: sentto-2242572-53152-1030536261-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.201] by n26.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 12:04:23 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 12:04:20 -0000 +Received: (qmail 37203 invoked from network); 28 Aug 2002 12:04:20 -0000 +Received: from unknown (66.218.66.217) by m9.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 12:04:20 -0000 +Received: from unknown (HELO carbon) (194.73.73.92) by + mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 12:04:22 -0000 +Received: from host217-34-71-140.in-addr.btopenworld.com ([217.34.71.140]) + by carbon with esmtp (Exim 3.22 #8) id 17k1Yb-0001UI-00 for + forteana@yahoogroups.com; Wed, 28 Aug 2002 13:04:22 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 13:03:39 +0100 +Subject: [zzzzteana] Hot rock +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7SC4OZ23062 + +http://yorkshirepost.co.uk/scripts/editorial2.cgi?cid=news&aid=481620 + +Close encounter of burnt kind + +IT came from outer space ­ or did it? Teenager Siobhan Cowton is convinced +the object which struck her as she climbed into the family car at her home +in Northallerton is extra-terrestrial. +But while her claims are being treated with a certain amount of studied +academic scepticism by experts in these matters, the 14-year-old schoolgirl +is adamant she was hit on the foot by a meteorite. +Siobhan initially thought there was a more prosaic explanation ­ that the +odd-looking stone had been thrown at her by a child,. +But on closer inspection, she discovered all was not as it seemed ­ because +it was hot when she picked it up. It hit her on a foot but caused no injury. +"I looked at it again and it had a black and grey colour with a shiny bubble +surface," she said. +After closer inspection by her father Niel, and comparison with pictures on +the Internet, Siobhan plans to ask scientists at Durham University to check +the object for authenticity. +If it is from outer space, Siobhan says she will consider putting it up for +auction. +She added: "If it isn't worth anything then I suppose I will keep it myself +for sentimental value. It is not every day that you are hit by a meteorite." +But Dr Ben Horton, a lecturer in physical geography, was the acme of +academic caution. +"Meteors have features that can be used to establish whether it is a piece +of extraterrestrial rock," he said. +"They have a very smooth surface but sometimes they have shallow depressions +and cavities. If they are hot, they should have a black ash like crust burnt +around the edge. +"Most are between five and 60 centimetres but five centimetres is the +smallest that they usually appear." +To establish the provenance of Siobhan's suspected meteorite it would have +to be subject to a mineral breakdown but Dr Horton thinks the chances of it +being extra-terrestrial are slim. +"Around 50,000 a year strike the Earth's surface and, considering the size +of the Earth, it is very unlikely to be a meteorite. +"However, there is a possibility and there is no reason it couldn't happen," +he added. + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00230.9a0c6d7bc5e78a2b597bc050e491d05e b/Ch3/datasets/spam/easy_ham/00230.9a0c6d7bc5e78a2b597bc050e491d05e new file mode 100644 index 000000000..a834ceb51 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00230.9a0c6d7bc5e78a2b597bc050e491d05e @@ -0,0 +1,89 @@ +From martin@srv0.ems.ed.ac.uk Wed Aug 28 13:34:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5C66043F9B + for ; Wed, 28 Aug 2002 08:34:42 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 13:34:42 +0100 (IST) +Received: from n21.grp.scd.yahoo.com (n21.grp.scd.yahoo.com + [66.218.66.77]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7SCXBZ24033 for ; Wed, 28 Aug 2002 13:33:11 +0100 +X-Egroups-Return: sentto-2242572-53154-1030537997-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.198] by n21.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 12:33:17 -0000 +X-Sender: martin@srv0.ems.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 12:33:17 -0000 +Received: (qmail 84489 invoked from network); 28 Aug 2002 12:33:17 -0000 +Received: from unknown (66.218.66.216) by m5.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 12:33:17 -0000 +Received: from unknown (HELO haymarket.ed.ac.uk) (129.215.128.53) by + mta1.grp.scd.yahoo.com with SMTP; 28 Aug 2002 12:33:16 -0000 +Received: from srv0.ems.ed.ac.uk (srv0.ems.ed.ac.uk [129.215.117.0]) by + haymarket.ed.ac.uk (8.11.6/8.11.6) with ESMTP id g7SCXF319746 for + ; Wed, 28 Aug 2002 13:33:15 +0100 (BST) +Received: from EMS-SRV0/SpoolDir by srv0.ems.ed.ac.uk (Mercury 1.44); + 28 Aug 02 13:33:14 +0000 +Received: from SpoolDir by EMS-SRV0 (Mercury 1.44); 28 Aug 02 13:33:05 +0000 +Organization: Management School +To: zzzzteana@yahoogroups.com +Message-Id: <3D6CD12A.10660.24D9E9BA@localhost> +Priority: normal +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Description: Mail message body +From: "Martin Adamson" +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 13:32:56 +0100 +Subject: [zzzzteana] 'Lost' penguins found alive +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Evening Standard - 28 August 2002 + +[Deft use of Fortean Unit of Measurement in 2nd para - MA] + + 'Lost' penguins found alive + + by Charles Miranda + + A colony of emperor penguins which was thought to have starved to death in + Antarctica has been found alive in a "big huddle". + + The birds were spotted by the crew of a USAF jet returning to base in New + Zealand. Researchers had feared that a breakaway iceberg the size of Jamaica + had all but wiped out the colony at Cape Crozier on Ross Island. + + Thousands of chicks are believed to have died as an increase in sea ice made + it impossible for the adults to find food. A detailed count is planned in + October. Antarctica (New Zealand) chief executive Lou Sanson said: "The + penguins were in a big huddle. We can now hope that the emperors have had a + successful breeding season over the winter." + + Some 1,000 pairs of emperors - the largest penguins in the world at 3.3ft tall + and 88lb - usually nest at Cape Crozier, 50 miles from the US McMurdo research + station. The 200,000-strong Adelie penguin colony, which also nests at the + cape, may have lost up to third of its population. + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00231.b295668c907d5f4d50f8e9db78ae5714 b/Ch3/datasets/spam/easy_ham/00231.b295668c907d5f4d50f8e9db78ae5714 new file mode 100644 index 000000000..416ce2c6e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00231.b295668c907d5f4d50f8e9db78ae5714 @@ -0,0 +1,73 @@ +From rpm-list-admin@freshrpms.net Wed Aug 28 13:45:01 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 96C6E43F99 + for ; Wed, 28 Aug 2002 08:45:00 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 13:45:00 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SCbXZ24192 for + ; Wed, 28 Aug 2002 13:37:33 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7SCX2J20905; Wed, 28 Aug 2002 14:33:03 + +0200 +Received: from bonzo.nirvana (pD9E7EF40.dip.t-dialin.net [217.231.239.64]) + by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7SCWfJ20844 for + ; Wed, 28 Aug 2002 14:32:41 +0200 +From: Axel Thimm +To: rpm-zzzlist@freshrpms.net +Subject: /home/dude +Message-Id: <20020828143235.A5779@bonzo.nirvana> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 14:32:35 +0200 +Date: Wed, 28 Aug 2002 14:32:35 +0200 + +Hi, + +some time now the following messages were haunting me: + + automount[11593]: attempting to mount entry /home/dude + +It just came to my attention, that only freshrpm benefitting hosts showed this +up. I grepped through the binaries and found referrences to /home/dude. + +# grep /home/dude /usr/bin/* +Binary file /usr/bin/aaxine matches +Binary file /usr/bin/gentoo matches +Binary file /usr/bin/gphoto2 matches +Binary file /usr/bin/gtkam matches +... + +I am now relaxed again ;), and pass this info on. Probably Matthias Saou +himself is "dude", and some package has hardwired a path in his build +directory. It would be nice to find out which and fix it, but I am using too +many of the freshrpm suite to narrow it down. + +Regards, Axel. +-- +Axel.Thimm@physik.fu-berlin.de + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/00232.dba1ba74b7372e3b13b0a351e2d45b89 b/Ch3/datasets/spam/easy_ham/00232.dba1ba74b7372e3b13b0a351e2d45b89 new file mode 100644 index 000000000..d0798f98b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00232.dba1ba74b7372e3b13b0a351e2d45b89 @@ -0,0 +1,122 @@ +From andy@r2-dvd.org Wed Aug 28 13:55:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id DA0A343F99 + for ; Wed, 28 Aug 2002 08:55:24 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 13:55:24 +0100 (IST) +Received: from n15.grp.scd.yahoo.com (n15.grp.scd.yahoo.com + [66.218.66.70]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7SCoBZ24634 for ; Wed, 28 Aug 2002 13:50:11 +0100 +X-Egroups-Return: sentto-2242572-53155-1030539017-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.94] by n15.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 12:50:17 -0000 +X-Sender: andy@r2-dvd.org +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 12:50:17 -0000 +Received: (qmail 89878 invoked from network); 28 Aug 2002 12:50:17 -0000 +Received: from unknown (66.218.66.217) by m1.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 12:50:17 -0000 +Received: from unknown (HELO dulce.mic.dundee.ac.uk) (134.36.34.9) by + mta2.grp.scd.yahoo.com with SMTP; 28 Aug 2002 12:50:16 -0000 +Received: by dulce with Internet Mail Service (5.5.2653.19) id ; + Wed, 28 Aug 2002 13:40:52 +0100 +Message-Id: <31C6D68FA597D411B04D00E02965883BD239F9@mailhost> +To: "'zzzzteana@yahoogroups.com'" +X-Mailer: Internet Mail Service (5.5.2653.19) +From: Andy +X-Yahoo-Profile: acobley +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 13:47:35 +0100 +Subject: [zzzzteana] Big cats 'on the increase' +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://news.bbc.co.uk/1/hi/uk/2220922.stm + + +Big cats are on the loose in Britain and breeding their way towards record +numbers, a monitoring group has claimed. +The British Big Cats Society said it has received more than 800 reports of +animals including pumas, black panthers, leopards and so-called Fen tigers +over the past 12 months. + +And while it admits that many sightings are of nothing more exotic than the +average moggy, it claims to have "firm evidence" that the majority are real. + + +Society founder Daniel Bamping told BBC News Online he could cope with the +critics and doubters, adding: "I was a sceptic, I thought it was in the same +realm as the Loch Ness monster. + +"But it's not, they are really out there." + +'Cats with cubs' + +Mr Bamping said there have been reports of big cats from every corner of the +country. + +Big cat reports +Hotspots include Scotland and Gloucestershire +January 2002 - Kent man clawed by suspected Lynx +November 2001 - farmer reports animals mauled by big cat +April 2001 - Lynx captured in north London +1999 - Puma-like cat attacks horse in Wales +"This weekend alone I have had sightings from Wales, the Scottish borders, +Kent, the West Midlands, Devon, Somerset and Wiltshire," he said. + +The society claims some of the big cats are breeding with domestic animals. + +But Mr Bamping said others, particularly lynx and puma, probably exist in +sufficient numbers to breed among themselves. + +"We have had sightings of cats with cubs," he added. + +'Trigger camera' + +The society claims to have evidence proving the cats' existence, including +photographs, paw prints, sheep kills and hair samples. + +But it knows it will have to do even more to convince a sceptical public +that it is not spinning them a shaggy cat story. + +A national "trigger camera" project is planned which, the society hopes, +will provide footage to prove the existence of the big cats. + +Mr Bamping said: "The idea is that the cat will walk past the camera and +take a picture of itself." + +'Like dogs' + +The society believes many of the sighting are of pets released into the +wild, or their descendants. + +Its spokesman Danny Nineham said: "In the 1960s and 1970s, people had big +cats like leopards as pets and they used to walk them like dogs. + +"But in 1976 when the Dangerous Wild Animals Act came into force, people +released their cats because they did not want to pay for a licence, put them +down, or take them to a zoo." + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00233.46a5a0be6835c796dac95e1c5b691673 b/Ch3/datasets/spam/easy_ham/00233.46a5a0be6835c796dac95e1c5b691673 new file mode 100644 index 000000000..1bcd4220a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00233.46a5a0be6835c796dac95e1c5b691673 @@ -0,0 +1,119 @@ +From andy@r2-dvd.org Wed Aug 28 13:55:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E99ED44155 + for ; Wed, 28 Aug 2002 08:55:25 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 13:55:25 +0100 (IST) +Received: from n16.grp.scd.yahoo.com (n16.grp.scd.yahoo.com + [66.218.66.71]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7SCrUZ24872 for ; Wed, 28 Aug 2002 13:53:30 +0100 +X-Egroups-Return: sentto-2242572-53156-1030539216-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.95] by n16.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 12:53:37 -0000 +X-Sender: andy@r2-dvd.org +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 12:53:36 -0000 +Received: (qmail 94374 invoked from network); 28 Aug 2002 12:53:36 -0000 +Received: from unknown (66.218.66.216) by m7.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 12:53:36 -0000 +Received: from unknown (HELO dulce.mic.dundee.ac.uk) (134.36.34.9) by + mta1.grp.scd.yahoo.com with SMTP; 28 Aug 2002 12:53:36 -0000 +Received: by dulce with Internet Mail Service (5.5.2653.19) id ; + Wed, 28 Aug 2002 13:44:11 +0100 +Message-Id: <31C6D68FA597D411B04D00E02965883BD239FB@mailhost> +To: "'zzzzteana@yahoogroups.com'" +X-Mailer: Internet Mail Service (5.5.2653.19) +From: Andy +X-Yahoo-Profile: acobley +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 13:50:58 +0100 +Subject: [zzzzteana] US Army tests portable translator +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://news.bbc.co.uk/1/hi/technology/2219079.stm + +US soldiers on peacekeeping duties in the future could find that a portable +translation device will be an essential part of their equipment. +Scientists at Carnegie Mellon University have developed a prototype of a +speech translator that was road-tested by US Army chaplains in Croatia. + +"This project shows how a relatively simple speech-to-speech translation +system can be rapidly and successfully constructed using today's tools," +said the team from Carnegie Mellon University in a research paper published +recently. + +The research was commissioned by the US Army, which is increasingly finding +itself in peace-keeping roles where communication is key. + +Speaking in tongues + +"In the Balkans, the Army is not just supposed to conquer somebody," Robert +Frederking of Carnegie Mellon University told the BBC programme Go Digital. + + +Translators could be essential for US soldiers + +"In a peacekeeping situation, you have two guys trying to beat each other up +and you are holding them apart. + +"You can't just shot one of them, you have to figure what is going on and +talk to them," he said. + +The portable translator was developed with a year, using commercially +available laptops. + +The Army did not want to field-test the device in a battlefield situation. +So instead the translator was tested by US Army chaplains in Croatia. + +"The chaplains very often end up having to talk to foreign nationals and +typically don't have any translation support," explained Mr Frederking. + +Slow system + +For the trials, the chaplains used the translator to speak to Croatians who +knew just a smattering of English. + +The system works by having a speech recogniser that picks up the words in +Croatian, turns the speech into text. The written words are then translated +into English and read out by a speech synthesizer. + +"It went reasonably well half the time," said Mr Frederking, though it was +slow in translating phrases. + +The research team admit that the system is not ready to be deployed in the +field. + +But they say their trials showed that a portable translator could be made to +work with further research and development. + +The Audio Voice Translation Guide System project was a joint venture between +the US Army, the military manufacturer Lockheed Martin and Carnegie Mellon +University. + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Receive Phone Calls and Faxes While You're Online! +Emerson Switchboard eliminates the need for a second phone line. +Order the Switchboard today for $39.95 + shipping and handling. +http://us.click.yahoo.com/P2sPyA/o6kEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00234.335356ba4b116d347be3199b40cdaed2 b/Ch3/datasets/spam/easy_ham/00234.335356ba4b116d347be3199b40cdaed2 new file mode 100644 index 000000000..3548404c5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00234.335356ba4b116d347be3199b40cdaed2 @@ -0,0 +1,86 @@ +From timc@2ubh.com Wed Aug 28 13:55:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id ECE7343F9B + for ; Wed, 28 Aug 2002 08:55:26 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 13:55:26 +0100 (IST) +Received: from n16.grp.scd.yahoo.com (n16.grp.scd.yahoo.com + [66.218.66.71]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7SCv3Z24934 for ; Wed, 28 Aug 2002 13:57:03 +0100 +X-Egroups-Return: sentto-2242572-53157-1030539429-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.94] by n16.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 12:57:09 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 12:57:09 -0000 +Received: (qmail 98674 invoked from network); 28 Aug 2002 12:57:09 -0000 +Received: from unknown (66.218.66.216) by m1.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 12:57:09 -0000 +Received: from unknown (HELO tungsten.btinternet.com) (194.73.73.81) by + mta1.grp.scd.yahoo.com with SMTP; 28 Aug 2002 12:57:09 -0000 +Received: from host217-34-71-140.in-addr.btopenworld.com ([217.34.71.140]) + by tungsten.btinternet.com with esmtp (Exim 3.22 #8) id 17k2Nf-000447-00 + for forteana@yahoogroups.com; Wed, 28 Aug 2002 13:57:08 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 13:55:54 +0100 +Subject: [zzzzteana] Worryingly sophisticated bees +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7SCv3Z24934 + +Ananova:  +Brazilian bees keep their own 'insect ranch' + +Scientists have found a new species of bee that behaves like a farmer by +keeping herds of insects. +The Amazonian Schwarzula use their own 'insect ranches' to provide food and +building materials. +The bees nest in holes in trees alongside 200 aphid-like insects from a +species called cryptostigma. +Cryptostigma feed on tree sap and excrete a sugar solution, which the bees +stop them from drowning in, by licking it up and turning it into honey. +The insects also produce wax from glands on their backs, which the bees +scrape off and use for their nest. +Nature reports it is the first time farming behaviour has been discovered in +bees. +Biologist Joao Camargo, of the University of Sao Paulo in Brazil, said: "In +turn the bees provide the insects with sanitary benefits and protection." +Writing in the journal Biotropica, Camargo says the bees might even carry +their insect ranches around the forest with them and is planning further +research on how they tend to their herd. +Studies of the Schwarzula showed the bees seemed to get most of their sugar +from the insect farms. Some bees were seen licking human sweat for salt. +Story filed: 13:49 Wednesday 28th August 2002 + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Super Blue Stuff Pain Relief - On Sale Today for $29.95 + shipping! +With Super Blue Stuff you¿ll feel the results in just minutes. +Relieves arthritis pain, back pain, sore muscles, and more! +http://us.click.yahoo.com/N2sPyA/q6kEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00235.c3a09c057f8fec7d833a8f38062b9a48 b/Ch3/datasets/spam/easy_ham/00235.c3a09c057f8fec7d833a8f38062b9a48 new file mode 100644 index 000000000..cf9231bdd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00235.c3a09c057f8fec7d833a8f38062b9a48 @@ -0,0 +1,113 @@ +From andy@r2-dvd.org Wed Aug 28 13:55:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id CABEA44156 + for ; Wed, 28 Aug 2002 08:55:27 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 13:55:27 +0100 (IST) +Received: from n5.grp.scd.yahoo.com (n5.grp.scd.yahoo.com [66.218.66.89]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7SCvBZ24941 for + ; Wed, 28 Aug 2002 13:57:11 +0100 +X-Egroups-Return: sentto-2242572-53158-1030539437-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.198] by n5.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 12:57:18 -0000 +X-Sender: andy@r2-dvd.org +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 12:57:17 -0000 +Received: (qmail 15115 invoked from network); 28 Aug 2002 12:57:17 -0000 +Received: from unknown (66.218.66.216) by m5.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 12:57:17 -0000 +Received: from unknown (HELO dulce.mic.dundee.ac.uk) (134.36.34.9) by + mta1.grp.scd.yahoo.com with SMTP; 28 Aug 2002 12:57:17 -0000 +Received: by dulce with Internet Mail Service (5.5.2653.19) id ; + Wed, 28 Aug 2002 13:47:52 +0100 +Message-Id: <31C6D68FA597D411B04D00E02965883BD239FD@mailhost> +To: "'zzzzteana@yahoogroups.com'" +X-Mailer: Internet Mail Service (5.5.2653.19) +From: Andy +X-Yahoo-Profile: acobley +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 13:54:36 +0100 +Subject: [zzzzteana] Betamax finally laid to rest +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Not fortean, but a moment in time all the same... + +http://news.bbc.co.uk/1/hi/entertainment/film/2220972.stm + + +Betamax video recorders are finally being phased out almost 20 years after +losing the battle for dominance of the home video market to VHS. +Betamax's manufacturer, Sony, has announced that it will make only 2,000 +more machines for the Japanese market. + +They have not been on sale in the rest of the world since 1998. + + +VHS became the dominant format by the mid-1980s + +Betamax was launched in 1975, and won many fans who said it was better +quality than its VHS rival. + +Some 2.3 million Betamax machines were sold worldwide in its peak year, +1984, but it soon went downhill as VHS became the format of choice for the +film rental industry and in homes. + +Just 2,800 machines were sold in the 12 months to March 2002. + +"With digital machines and other new recording formats taking hold in the +market, demand has continued to decline and it has become difficult to +secure parts," Sony said in a statement. + +Sony said it would continue to offer repairs and manufacture tapes for the +format. + +The professional Betamax format, Betacam, is still widely used in the +television and film industries and will be unaffected. + +But the recent rise of DVDs seems to have put the final nail in the coffin +for Betamax home players. + +In the 1980s, many video rental chains preferred the VHS format. + +Betamax lovers became so passionate about the format in the face of +competition from VHS that they set up the Betaphile Club in 1988. + +The picture and sound quality of Beta was superior to VHS, Betaphiles say, +although VHS tapes had a longer duration. + +A total of 18 million Betamax machines were sold around the world, but no +new ones will be made after the end of 2002. + +Sony is now planning to focus its efforts on new digital technologies. + See also: + + + + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Kwick Pick Portable Lock Pick - Opens Almost Any Lock! +Locked out? Try the Kwick Pick. For $17.95, you can open car doors, +desk drawers, padlocks, and much more! Never get locked out again! +http://us.click.yahoo.com/O2sPyA/p6kEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00236.0d42e8e99de86aae42a4f3e3cdc2465b b/Ch3/datasets/spam/easy_ham/00236.0d42e8e99de86aae42a4f3e3cdc2465b new file mode 100644 index 000000000..0ecb925f2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00236.0d42e8e99de86aae42a4f3e3cdc2465b @@ -0,0 +1,60 @@ +From ilug-admin@linux.ie Wed Aug 28 13:55:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id EE8BC43F9B + for ; Wed, 28 Aug 2002 08:55:21 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 13:55:22 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SCrbZ24883 for + ; Wed, 28 Aug 2002 13:53:37 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id NAA26270; Wed, 28 Aug 2002 13:52:45 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from bramg1.net.external.hp.com (bramg1.net.external.hp.com + [192.6.126.73]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id NAA26233 + for ; Wed, 28 Aug 2002 13:52:36 +0100 +Received: from fowey.BR.ITC.HP.COM (fowey.br.itc.hp.com [15.145.8.186]) by + bramg1.net.external.hp.com (Postfix) with SMTP id 04D30200 for + ; Wed, 28 Aug 2002 14:52:35 +0200 (METDST) +Received: from 15.145.8.186 by fowey.BR.ITC.HP.COM (InterScan E-Mail + VirusWall NT); Wed, 28 Aug 2002 13:52:35 +0100 +Received: by fowey.br.itc.hp.com with Internet Mail Service (5.5.2655.55) + id ; Wed, 28 Aug 2002 13:52:35 +0100 +Message-Id: <253B1BDA4E68D411AC3700D0B77FC5F807C0F1CE@patsydan.dublin.hp.com> +From: "HAMILTON,DAVID (HP-Ireland,ex2)" +To: "'ilug@linux.ie'" +Date: Wed, 28 Aug 2002 13:52:32 +0100 +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2655.55) +Content-Type: text/plain; charset="windows-1251" +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by lugh.tuatha.org id + NAA26233 +Subject: [ILUG] Hayes Accura ISDN PCI +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Does anyone know if this is supported under 2.4.18 kernels or higher? + +I need to buy an ISDN TA quick, and PC World have these in stock for ˆ65. + +Thanks, + David. + +David Hamilton +Senior Technical Consultant +HP Ireland + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00237.885411da9a2cf59e223a953a1747d44f b/Ch3/datasets/spam/easy_ham/00237.885411da9a2cf59e223a953a1747d44f new file mode 100644 index 000000000..7f4b9ab29 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00237.885411da9a2cf59e223a953a1747d44f @@ -0,0 +1,52 @@ +From ilug-admin@linux.ie Wed Aug 28 14:05:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id EE31043F99 + for ; Wed, 28 Aug 2002 09:05:35 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 14:05:35 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SD3aZ25220 for + ; Wed, 28 Aug 2002 14:03:37 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id OAA26884; Wed, 28 Aug 2002 14:03:03 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from redpie.com (redpie.com [216.122.135.208] (may be forged)) + by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id OAA26835 for + ; Wed, 28 Aug 2002 14:02:43 +0100 +Received: from justin (p253.as2.prp.dublin.eircom.net [159.134.170.253]) + by redpie.com (8.8.7/8.8.5) with SMTP id GAA10183 for ; + Wed, 28 Aug 2002 06:02:28 -0700 (PDT) +From: "Kiall Mac Innes" +To: "ILUG" +Date: Wed, 28 Aug 2002 14:09:48 +0100 +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Importance: Normal +Subject: [ILUG] Modem Problems +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +ive just gotton myself a modem (no its not a winmodem, yes im sure) it dials +the internet grant using the RedHat PPP Dialer... and i can ping the server +i dial into but i cant get any furthur than that server? any ideas? + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00238.dab1868a3b43de1e01ebdfd0e53de50f b/Ch3/datasets/spam/easy_ham/00238.dab1868a3b43de1e01ebdfd0e53de50f new file mode 100644 index 000000000..7b650bb07 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00238.dab1868a3b43de1e01ebdfd0e53de50f @@ -0,0 +1,83 @@ +From Stewart.Smith@ee.ed.ac.uk Wed Aug 28 14:15:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1050E44155 + for ; Wed, 28 Aug 2002 09:15:57 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 14:15:57 +0100 (IST) +Received: from n36.grp.scd.yahoo.com (n36.grp.scd.yahoo.com + [66.218.66.104]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7SDEfZ25700 for ; Wed, 28 Aug 2002 14:14:41 +0100 +X-Egroups-Return: sentto-2242572-53160-1030540488-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.97] by n36.grp.scd.yahoo.com with NNFMP; + 28 Aug 2002 13:14:48 -0000 +X-Sender: Stewart.Smith@ee.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 28 Aug 2002 13:14:47 -0000 +Received: (qmail 15337 invoked from network); 28 Aug 2002 13:14:47 -0000 +Received: from unknown (66.218.66.218) by m14.grp.scd.yahoo.com with QMQP; + 28 Aug 2002 13:14:47 -0000 +Received: from unknown (HELO postbox.ee.ed.ac.uk) (129.215.80.253) by + mta3.grp.scd.yahoo.com with SMTP; 28 Aug 2002 13:14:47 -0000 +Received: from ee.ed.ac.uk (sxs@dunblane [129.215.34.86]) by + postbox.ee.ed.ac.uk (8.11.0/8.11.0) with ESMTP id g7SDEku07852 for + ; Wed, 28 Aug 2002 14:14:46 +0100 (BST) +Message-Id: <3D6CCCC5.5000608@ee.ed.ac.uk> +Organization: Scottish Microelectronics Centre +User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.1b) Gecko/20020628 +X-Accept-Language: en, en-us +To: zzzzteana@yahoogroups.com +References: <3D6C9D54.27778.240F6D50@localhost> + <3D6CCFD7.18123.24D4BE4D@localhost> +From: Stewart Smith +X-Yahoo-Profile: stochasticus +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Wed, 28 Aug 2002 14:14:45 +0100 +Subject: Re: [zzzzteana] Re: That wacky imam +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Martin Adamson wrote:>>And we know how unbiased MEMRI is, don't we.... +>> +> +> Oh, of course, you're right, any information not coming from a source that +> fits your pre-conceived world view can simply be dismissed out of hand. +> +> Martin +> + +For goddess' sake Martin that seems to be exactly what you're doing. You +started your reply to Tim's posting of the Guardian article by suggesting that +it was factually inaccurate. Did you actually read it or did you just assume +that if the Grauniad writes about a Muslim extremist they must be making him out +as an all round nice guy? + +Stewart +-- +Stewart Smith +Scottish Microelectronics Centre, University of Edinburgh. +http://www.ee.ed.ac.uk/~sxs/ + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00239.849f683f7532fe3ef85d3ae6cf2d7153 b/Ch3/datasets/spam/easy_ham/00239.849f683f7532fe3ef85d3ae6cf2d7153 new file mode 100644 index 000000000..d3974c5bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00239.849f683f7532fe3ef85d3ae6cf2d7153 @@ -0,0 +1,93 @@ +From sentto-2242572-53752-1031262644-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Fri Sep 6 11:48:46 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 4A1F116F72 + for ; Fri, 6 Sep 2002 11:41:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:41:48 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869sgC29478 for + ; Fri, 6 Sep 2002 10:54:42 +0100 +Received: from n3.grp.scd.yahoo.com (n3.grp.scd.yahoo.com [66.218.66.86]) + by webnote.net (8.9.3/8.9.3) with SMTP id WAA18793 for ; + Thu, 5 Sep 2002 22:51:22 +0100 +X-Egroups-Return: sentto-2242572-53752-1031262644-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.200] by n3.grp.scd.yahoo.com with NNFMP; + 05 Sep 2002 21:50:44 -0000 +X-Sender: felinda@frogstone.net +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 5 Sep 2002 21:50:44 -0000 +Received: (qmail 62905 invoked from network); 5 Sep 2002 21:50:43 -0000 +Received: from unknown (66.218.66.218) by m8.grp.scd.yahoo.com with QMQP; + 5 Sep 2002 21:50:43 -0000 +Received: from unknown (HELO mail2.athenet.net) (209.103.196.16) by + mta3.grp.scd.yahoo.com with SMTP; 5 Sep 2002 21:50:43 -0000 +Received: from [209.103.203.117] (209-103-203-117.dial-in1.osh.athenet.net + [209.103.203.117]) by mail2.athenet.net (8.11.6/8.11.6) with ESMTP id + g85LofA17102 for ; Thu, 5 Sep 2002 16:50:42 + -0500 +X-Sender: felinda@pop2.athenet.net +Message-Id: +In-Reply-To: +References: +To: zzzzteana@yahoogroups.com +From: That Goddess Chick +X-Yahoo-Profile: felinda +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 5 Sep 2002 16:50:38 -0500 +Subject: [zzzzteana] Re: Cincinnati Group Wants To Stamp Out Hotel Sex Movies +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +> +>> (CNSNews.com) - A pro-family group in Cincinnati that has pressured +>> two area hotels to stop showing adult pay-per-view movies has vowed +>to +>> expand its grass- roots campaign nationwide. +> +> +>Quite right. And while they're at it, they can get that bunch of +>religious nuts to stop sneaking their book of hate and intolerence +>into the bedside cabinets, you know, that one with all the telephone +>humbers in it. +> +>Oh, and the Gideon Society can take their bibles back as well. +> +>RobinH +> + +What are you talking about??? That book is where all the best free porn is!! + +Piece of trivia: the thing is so pithy it floats!! +-- + + +Fel +http://www.frogstone.net +Weird Page: http://my.athenet.net/~felinda/WeirdPage.html + +[Non-text portions of this message have been removed] + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00240.6430542510c59bcb5e4cca0112eff3ac b/Ch3/datasets/spam/easy_ham/00240.6430542510c59bcb5e4cca0112eff3ac new file mode 100644 index 000000000..bce84c248 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00240.6430542510c59bcb5e4cca0112eff3ac @@ -0,0 +1,104 @@ +From sentto-2242572-53806-1031307758-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Fri Sep 6 11:48:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 301FC16F91 + for ; Fri, 6 Sep 2002 11:41:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:41:46 +0100 (IST) +Received: from n6.grp.scd.yahoo.com (n6.grp.scd.yahoo.com [66.218.66.90]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g86AMRC31994 for + ; Fri, 6 Sep 2002 11:22:27 +0100 +X-Egroups-Return: sentto-2242572-53806-1031307758-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.201] by n6.grp.scd.yahoo.com with NNFMP; + 06 Sep 2002 10:22:41 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 6 Sep 2002 10:22:38 -0000 +Received: (qmail 63899 invoked from network); 6 Sep 2002 10:22:38 -0000 +Received: from unknown (66.218.66.216) by m9.grp.scd.yahoo.com with QMQP; + 6 Sep 2002 10:22:38 -0000 +Received: from unknown (HELO gadolinium.btinternet.com) (194.73.73.111) by + mta1.grp.scd.yahoo.com with SMTP; 6 Sep 2002 10:22:40 -0000 +Received: from host217-36-8-232.in-addr.btopenworld.com ([217.36.8.232]) + by gadolinium.btinternet.com with esmtp (Exim 3.22 #8) id 17nGG6-0004s6-00 + for forteana@yahoogroups.com; Fri, 06 Sep 2002 11:22:40 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana@yahoogroups.com +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Fri, 06 Sep 2002 11:21:48 +0100 +Subject: Re: [zzzzteana] Save the planet, kill the people +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +the latest - +http://news.bbc.co.uk/1/hi/world/africa/2240487.stm + +Friday, 6 September, 2002, 08:53 GMT 09:53 UK +Zimbabwe eases GM stance + +Zimbabwe has dropped objections to accepting genetically modified (GM) grain +so that urgently-needed food aid can be delivered, says the UN food agency. +The executive director of the World Food Programme, James Morris, said +Zimbabwe's decision would send an important message to other countries in +the region which have refused food aid because it might contain GM grain. +Until now, Zimbabwe had said it would only allow aid workers to distribute +ground maize to allay fears that GM grain could be planted. +But a Zimbabwean minister says the government has now set up a system of +checks to ensure the grain will not enter the eco-system. +There have been fears that Southern African nations could lose lucrative +export markets in Europe if they cannot certify that their crops are +GM-free. +Aid +Mr Morris announced the policy reversal after talks in Harare with +Zimbabwean President Robert Mugabe. +"The fact that they have now concluded that they are comfortable in +accepting GM crops or commodities will be an important signal to other +countries in the region," Mr Morris told journalists. +"It will enable us to do our job," he said. +Aid workers say up to 13 million people in seven countries in Southern +Africa face famine. In Zimbabwe which was once the bread basket of the +region, some six million people are estimated to need food aid. +The WFP says it already has aid pledges for about half of the 600,000 tonnes +of food it intends to bring into Zimbabwe in the next few months. +The government blames the shortages solely on drought, but the government's +campaign to transfer land from large scale commercial white farmers has +worsened the situation, say many donors. +Lost markets +The GM row has complicated relief efforts across the region. +Zambia's president is refusing to overturn his ban on GM food aid, labelling +it as 'poison' . +Deals to mill GM food before being distributed, so that it could not be +planted, have placated fears in Malawi and Mozambique. +United States aid officials deny that the food is unsafe, pointing out that +Americans eat GM maize every day. +The World Health Organisation has certified the grain for human consumption +and says it does not constitute a danger to people's health. + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Looking for a more powerful website? Try GeoCities for $8.95 per month. +Register your domain name (http://your-name.com). More storage! No ads! +http://geocities.yahoo.com/ps/info +http://us.click.yahoo.com/aHOo4D/KJoEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00241.45aeb31a71118db41c3757eee21f8757 b/Ch3/datasets/spam/easy_ham/00241.45aeb31a71118db41c3757eee21f8757 new file mode 100644 index 000000000..39039c591 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00241.45aeb31a71118db41c3757eee21f8757 @@ -0,0 +1,85 @@ +From sentto-2242572-53767-1031270245-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Fri Sep 6 11:48:49 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 3696216F92 + for ; Fri, 6 Sep 2002 11:41:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:41:50 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869pnC29052 for + ; Fri, 6 Sep 2002 10:51:49 +0100 +Received: from n4.grp.scd.yahoo.com (n4.grp.scd.yahoo.com [66.218.66.88]) + by webnote.net (8.9.3/8.9.3) with SMTP id AAA19348 for ; + Fri, 6 Sep 2002 00:57:57 +0100 +X-Egroups-Return: sentto-2242572-53767-1031270245-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.197] by n4.grp.scd.yahoo.com with NNFMP; + 05 Sep 2002 23:57:26 -0000 +X-Sender: wt046@vtn1.victoria.tc.ca +X-Apparently-To: zzzzteana@egroups.com +Received: (EGP: mail-8_1_0_1); 5 Sep 2002 23:57:25 -0000 +Received: (qmail 44694 invoked from network); 5 Sep 2002 23:57:24 -0000 +Received: from unknown (66.218.66.218) by m4.grp.scd.yahoo.com with QMQP; + 5 Sep 2002 23:57:24 -0000 +Received: from unknown (HELO vtn1.victoria.tc.ca) (199.60.222.3) by + mta3.grp.scd.yahoo.com with SMTP; 5 Sep 2002 23:57:24 -0000 +Received: from vtn1.victoria.tc.ca (wt046@localhost [127.0.0.1]) by + vtn1.victoria.tc.ca (8.12.5/8.12.5) with ESMTP id g85NvNPL001355 for + ; Thu, 5 Sep 2002 16:57:23 -0700 (PDT) +Received: (from wt046@localhost) by vtn1.victoria.tc.ca + (8.12.5/8.12.3/Submit) id g85NvNIO001354; Thu, 5 Sep 2002 16:57:23 -0700 + (PDT) +X-Sender: wt046@vtn1 +To: "zzzzteana@egroups" +Message-Id: +From: Brian Chapman +X-Yahoo-Profile: mf8r31p +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 5 Sep 2002 16:57:23 -0700 (PDT) +Subject: [zzzzteana] Frog Fall at Cheapside +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Near the end of his *Memoirs of Extraordinary Popular Delusions and the +Madness of Crowds* (1851), Charles Mackay discusses various catch phrases +briefly popular in mid-19th-century London. One of them, he observes, +"like a mushroom, seems to have sprung up in the night, or, like a frog in +Cheapside, to have come down in a sudden shower. One day it was unheard, +unknown, uninvented; the next it pervaded London." + +Was "like a frog in Cheapside" (or something similar) a catch phrase +itself, or did Mackay come up with the simile on his own? + +And to what event or events does it refer? + +I didn't find anything relevant in Partridge's *A Dictionary of Catch +Phrases.* + +bc + + + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Looking for a more powerful website? Try GeoCities for $8.95 per month. +Register your domain name (http://your-name.com). More storage! No ads! +http://geocities.yahoo.com/ps/info +http://us.click.yahoo.com/aHOo4D/KJoEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00242.640f27e47a5754dbf4893781ce156a75 b/Ch3/datasets/spam/easy_ham/00242.640f27e47a5754dbf4893781ce156a75 new file mode 100644 index 000000000..bd392e454 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00242.640f27e47a5754dbf4893781ce156a75 @@ -0,0 +1,78 @@ +From sentto-2242572-53755-1031262956-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Fri Sep 6 11:48:54 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id E8CE616F93 + for ; Fri, 6 Sep 2002 11:41:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:41:51 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869rvC29374 for + ; Fri, 6 Sep 2002 10:53:57 +0100 +Received: from n14.grp.scd.yahoo.com (n14.grp.scd.yahoo.com + [66.218.66.69]) by webnote.net (8.9.3/8.9.3) with SMTP id WAA18821 for + ; Thu, 5 Sep 2002 22:56:27 +0100 +X-Egroups-Return: sentto-2242572-53755-1031262956-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.196] by n14.grp.scd.yahoo.com with NNFMP; + 05 Sep 2002 21:55:56 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 5 Sep 2002 21:55:56 -0000 +Received: (qmail 85939 invoked from network); 5 Sep 2002 21:55:55 -0000 +Received: from unknown (66.218.66.217) by m3.grp.scd.yahoo.com with QMQP; + 5 Sep 2002 21:55:55 -0000 +Received: from unknown (HELO tungsten.btinternet.com) (194.73.73.81) by + mta2.grp.scd.yahoo.com with SMTP; 5 Sep 2002 21:55:55 -0000 +Received: from host213-121-126-176.in-addr.btopenworld.com + ([213.121.126.176]) by tungsten.btinternet.com with esmtp (Exim 3.22 #8) + id 17n4bR-0004TX-00 for forteana@yahoogroups.com; Thu, 05 Sep 2002 + 22:55:54 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana@yahoogroups.com +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 05 Sep 2002 22:54:52 +0100 +Subject: Re: [zzzzteana] Free Web Hosting? +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Bill: +> I've decided that I ought to put some of my writing samples on-line for +> potential employers to mock. And I don't want to pay for it. There are still +> a couple dozen places to do this, do any of you have preferences? +> +Getting your own domain needn't be expensive, looks more professional, and +you're not going to suddenly lose your site with little or no notice (yes, +I'm still smarting from bastard Geocities). I registered mine through +http://www.easyspace.com/ - works out about a pound a week for registration +and 30Mb hosting. It's a valuable service, there's no reason not to expect +to pay. + +TimC + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Looking for a more powerful website? Try GeoCities for $8.95 per month. +Register your domain name (http://your-name.com). More storage! No ads! +http://geocities.yahoo.com/ps/info +http://us.click.yahoo.com/aHOo4D/KJoEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00243.356078a6eb0847e4670477133553b3af b/Ch3/datasets/spam/easy_ham/00243.356078a6eb0847e4670477133553b3af new file mode 100644 index 000000000..53f7cb05f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00243.356078a6eb0847e4670477133553b3af @@ -0,0 +1,79 @@ +From sentto-2242572-53763-1031265221-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Fri Sep 6 11:48:55 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id D2D7516F94 + for ; Fri, 6 Sep 2002 11:41:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:41:53 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869rCC29246 for + ; Fri, 6 Sep 2002 10:53:12 +0100 +Received: from n11.grp.scd.yahoo.com (n11.grp.scd.yahoo.com + [66.218.66.66]) by webnote.net (8.9.3/8.9.3) with SMTP id XAA19037 for + ; Thu, 5 Sep 2002 23:34:12 +0100 +X-Egroups-Return: sentto-2242572-53763-1031265221-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.94] by n11.grp.scd.yahoo.com with NNFMP; + 05 Sep 2002 22:33:41 -0000 +X-Sender: jon@eclipse.co.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 5 Sep 2002 22:33:40 -0000 +Received: (qmail 30555 invoked from network); 5 Sep 2002 22:33:40 -0000 +Received: from unknown (66.218.66.216) by m1.grp.scd.yahoo.com with QMQP; + 5 Sep 2002 22:33:40 -0000 +Received: from unknown (HELO carbon) (194.73.73.92) by + mta1.grp.scd.yahoo.com with SMTP; 5 Sep 2002 22:33:40 -0000 +Received: from [217.42.100.248] (helo=oemcomputer) by carbon with smtp + (Exim 3.22 #8) id 17n5Bz-0005zZ-00 for forteana@yahoogroups.com; + Thu, 05 Sep 2002 23:33:39 +0100 +Message-Id: <006001c25523$9ab58980$f8642ad9@oemcomputer> +To: +References: + <002d01c2552c$076e8240$e66278d5@b5w3e9> +Organization: CFZ +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2615.200 +X-Mimeole: Produced By Microsoft MimeOLE V5.00.2615.200 +From: "Jon Downes" +X-Yahoo-Profile: jondownes2001 +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Thu, 5 Sep 2002 22:31:31 +0100 +Subject: Re: [zzzzteana] FWD (TLCB) Jimmy Carter: The Troubling, New Face of America +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=Windows-1252 +Content-Transfer-Encoding: 7bit + +Of course, everyone knows that Owlman is a work of fuggin` genius + +J + + + + +> Hey, I met the wizard bloke from Owlman, who wants to touch me!! +> +> Dave + + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00244.d6a35c3356b3796b5ddc77ed1b1995e2 b/Ch3/datasets/spam/easy_ham/00244.d6a35c3356b3796b5ddc77ed1b1995e2 new file mode 100644 index 000000000..d39cd4bb7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00244.d6a35c3356b3796b5ddc77ed1b1995e2 @@ -0,0 +1,101 @@ +From sentto-2242572-53808-1031308225-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Fri Sep 6 11:49:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id E17DE16F96 + for ; Fri, 6 Sep 2002 11:41:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:41:58 +0100 (IST) +Received: from n21.grp.scd.yahoo.com (n21.grp.scd.yahoo.com + [66.218.66.77]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g86AUBC32505 for ; Fri, 6 Sep 2002 11:30:11 +0100 +X-Egroups-Return: sentto-2242572-53808-1031308225-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.195] by n21.grp.scd.yahoo.com with NNFMP; + 06 Sep 2002 10:30:25 -0000 +X-Sender: martin@srv0.ems.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 6 Sep 2002 10:30:24 -0000 +Received: (qmail 76905 invoked from network); 6 Sep 2002 10:30:24 -0000 +Received: from unknown (66.218.66.217) by m2.grp.scd.yahoo.com with QMQP; + 6 Sep 2002 10:30:24 -0000 +Received: from unknown (HELO haymarket.ed.ac.uk) (129.215.128.53) by + mta2.grp.scd.yahoo.com with SMTP; 6 Sep 2002 10:30:24 -0000 +Received: from srv0.ems.ed.ac.uk (srv0.ems.ed.ac.uk [129.215.117.0]) by + haymarket.ed.ac.uk (8.11.6/8.11.6) with ESMTP id g86AUN309856 for + ; Fri, 6 Sep 2002 11:30:23 +0100 (BST) +Received: from EMS-SRV0/SpoolDir by srv0.ems.ed.ac.uk (Mercury 1.44); + 6 Sep 02 11:30:22 +0000 +Received: from SpoolDir by EMS-SRV0 (Mercury 1.44); 6 Sep 02 11:30:13 +0000 +Organization: Management School +To: zzzzteana@yahoogroups.com +Message-Id: <3D7891CB.3124.52C34AEB@localhost> +Priority: normal +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Description: Mail message body +From: "Martin Adamson" +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Fri, 6 Sep 2002 11:30:04 +0100 +Subject: [zzzzteana] Scissors are a snip for Third World +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g86AUBC32505 + +The Times + + September 06, 2002 + + Scissors are a snip for Third World + From Richard Owen in Rome + + + + IT IS one of the unanswered questions of the past year: what happens to the + millions of nail scissors confiscated by airport security officials from + passengers’ hand luggage? Most are thrown away or recycled after being seized + as part of security measures since September 11. But an enterprising chaplain + is sending them to Catholic missionaries for distribution to Third World + hospitals and clinics. In theory travellers who have left nail scissors, nail + files, corkscrews or manicure sets from their hand luggage can arrange for + them to be returned. In practice many just shrug and leave the scissors by the + X-ray scanners. + + Father Arturo Rossini, chaplain of Malpensa airport in Milan, said that + scissors were costly or unavailable in many parts of Africa, Asia and Latin + America. + + He told Corriere della Sera that he had “plucked up the courage” to ask the + authorities if he could have the confiscated scissors. With the help of a + retired airport policeman, he had packaged 60,000 nail scissors and manicure + sets, using the airport chapel as a packing centre. + + Packages were shipped in aircraft holds to Peru, Brasil, India, Mozambique, + Argentina, Zambia and Kenya. “In such countries, what we think of as a + personal grooming accessory can be a vital tool.” + + The idea has been taken up at other Italian airports. + + + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Plan to Sell a Home? +http://us.click.yahoo.com/J2SnNA/y.lEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00245.5d4317b10e081f87fd2cd84e6fc94cd7 b/Ch3/datasets/spam/easy_ham/00245.5d4317b10e081f87fd2cd84e6fc94cd7 new file mode 100644 index 000000000..10502b575 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00245.5d4317b10e081f87fd2cd84e6fc94cd7 @@ -0,0 +1,73 @@ +From sentto-2242572-53807-1031307957-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Fri Sep 6 11:48:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 3912316F1F + for ; Fri, 6 Sep 2002 11:41:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:41:57 +0100 (IST) +Received: from n3.grp.scd.yahoo.com (n3.grp.scd.yahoo.com [66.218.66.86]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g86APhC32138 for + ; Fri, 6 Sep 2002 11:25:43 +0100 +X-Egroups-Return: sentto-2242572-53807-1031307957-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.98] by n3.grp.scd.yahoo.com with NNFMP; + 06 Sep 2002 10:25:57 -0000 +X-Sender: martin@srv0.ems.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 6 Sep 2002 10:25:57 -0000 +Received: (qmail 30549 invoked from network); 6 Sep 2002 10:25:57 -0000 +Received: from unknown (66.218.66.217) by m15.grp.scd.yahoo.com with QMQP; + 6 Sep 2002 10:25:57 -0000 +Received: from unknown (HELO haymarket.ed.ac.uk) (129.215.128.53) by + mta2.grp.scd.yahoo.com with SMTP; 6 Sep 2002 10:25:56 -0000 +Received: from srv0.ems.ed.ac.uk (srv0.ems.ed.ac.uk [129.215.117.0]) by + haymarket.ed.ac.uk (8.11.6/8.11.6) with ESMTP id g86APt308136 for + ; Fri, 6 Sep 2002 11:25:55 +0100 (BST) +Received: from EMS-SRV0/SpoolDir by srv0.ems.ed.ac.uk (Mercury 1.44); + 6 Sep 02 11:25:54 +0000 +Received: from SpoolDir by EMS-SRV0 (Mercury 1.44); 6 Sep 02 11:25:45 +0000 +Organization: Management School +To: zzzzteana@yahoogroups.com +Message-Id: <3D7890C7.21244.52BF5419@localhost> +Priority: normal +In-Reply-To: +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Description: Mail message body +From: "Martin Adamson" +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Fri, 6 Sep 2002 11:25:44 +0100 +Subject: Re: [zzzzteana] Save the planet, kill the people +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + + +> Zimbabwe has dropped objections to accepting genetically modified (GM) grain +> so that urgently-needed food aid can be delivered, says the UN food agency. + +Yes, confirming what I said in my last message. Ah! I see where the problem +lies! You seem to be labouring under the misapprehension that Zimbabwe and +Zambia are the same country. + +Martin + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Sell a Home for Top $ +http://us.click.yahoo.com/RrPZMC/jTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00246.b7cc35e095c9fae344813bf6e1bc681a b/Ch3/datasets/spam/easy_ham/00246.b7cc35e095c9fae344813bf6e1bc681a new file mode 100644 index 000000000..068fa9dc2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00246.b7cc35e095c9fae344813bf6e1bc681a @@ -0,0 +1,72 @@ +From sentto-2242572-53810-1031308774-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Fri Sep 6 11:49:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id ABBEC16F98 + for ; Fri, 6 Sep 2002 11:42:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:42:02 +0100 (IST) +Received: from n26.grp.scd.yahoo.com (n26.grp.scd.yahoo.com + [66.218.66.82]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g86AdLC00595 for ; Fri, 6 Sep 2002 11:39:21 +0100 +X-Egroups-Return: sentto-2242572-53810-1031308774-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.66.98] by n26.grp.scd.yahoo.com with NNFMP; + 06 Sep 2002 10:39:34 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 6 Sep 2002 10:39:34 -0000 +Received: (qmail 42687 invoked from network); 6 Sep 2002 10:39:34 -0000 +Received: from unknown (66.218.66.218) by m15.grp.scd.yahoo.com with QMQP; + 6 Sep 2002 10:39:34 -0000 +Received: from unknown (HELO protactinium.btinternet.com) (194.73.73.176) + by mta3.grp.scd.yahoo.com with SMTP; 6 Sep 2002 10:39:34 -0000 +Received: from host217-36-8-232.in-addr.btopenworld.com ([217.36.8.232]) + by protactinium.btinternet.com with esmtp (Exim 3.22 #8) id + 17nGWT-0001pi-00 for forteana@yahoogroups.com; Fri, 06 Sep 2002 11:39:33 + +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana@yahoogroups.com +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Fri, 06 Sep 2002 11:38:42 +0100 +Subject: Re: [zzzzteana] Save the planet, kill the people +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Martin: +> Yes, confirming what I said in my last message. Ah! I see where the problem +> lies! You seem to be labouring under the misapprehension that Zimbabwe and +> Zambia are the same country. +> +No, that would be rather silly. There are conflicting reports on whether +Zambia is prepared to accept milled GM grain or not - and, from reports from +various sources, considerable debate within that country. There's complex +issues, not all of which can be dismissed by blaming those nasty +environmentalists, which was my original point. + +TimC + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00247.e14fcbf137267399278507b469811f0a b/Ch3/datasets/spam/easy_ham/00247.e14fcbf137267399278507b469811f0a new file mode 100644 index 000000000..06fb1b3f1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00247.e14fcbf137267399278507b469811f0a @@ -0,0 +1,127 @@ +From sentto-2242572-53809-1031308404-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Fri Sep 6 11:49:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id B586716F97 + for ; Fri, 6 Sep 2002 11:42:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:42:00 +0100 (IST) +Received: from n30.grp.scd.yahoo.com (n30.grp.scd.yahoo.com + [66.218.66.87]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g86AXBC32639 for ; Fri, 6 Sep 2002 11:33:11 +0100 +X-Egroups-Return: sentto-2242572-53809-1031308404-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.192] by n30.grp.scd.yahoo.com with NNFMP; + 06 Sep 2002 10:33:25 -0000 +X-Sender: martin@srv0.ems.ed.ac.uk +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_1_0_1); 6 Sep 2002 10:33:24 -0000 +Received: (qmail 28742 invoked from network); 6 Sep 2002 10:33:24 -0000 +Received: from unknown (66.218.66.217) by m10.grp.scd.yahoo.com with QMQP; + 6 Sep 2002 10:33:24 -0000 +Received: from unknown (HELO haymarket.ed.ac.uk) (129.215.128.53) by + mta2.grp.scd.yahoo.com with SMTP; 6 Sep 2002 10:33:24 -0000 +Received: from srv0.ems.ed.ac.uk (srv0.ems.ed.ac.uk [129.215.117.0]) by + haymarket.ed.ac.uk (8.11.6/8.11.6) with ESMTP id g86AXM310892 for + ; Fri, 6 Sep 2002 11:33:22 +0100 (BST) +Received: from EMS-SRV0/SpoolDir by srv0.ems.ed.ac.uk (Mercury 1.44); + 6 Sep 02 11:33:22 +0000 +Received: from SpoolDir by EMS-SRV0 (Mercury 1.44); 6 Sep 02 11:33:01 +0000 +Organization: Management School +To: zzzzteana@yahoogroups.com +Message-Id: <3D789278.23084.52C5EEE3@localhost> +Priority: normal +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Description: Mail message body +From: "Martin Adamson" +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Fri, 6 Sep 2002 11:32:57 +0100 +Subject: [zzzzteana] Hitler-style applicant welcomed by parties +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g86AXBC32639 + +The Times + + + September 06, 2002 + + Hitler-style applicant welcomed by parties + By Roger Boyes + + + + MANAGERS of Germany’s political parties are having difficulty explaining their + enthusiastic reaction to a man who applied for membership with letters cribbed + largely from Mein Kampf, Hitler’s personal manifesto. The incident illustrates + how indiscriminate parties have become in taking on new members during an + election campaign, even when their sentiments bear a suspicious resemblance to + those of the Führer. + + “Edmund Stoiber is a thousand times more suited to leading Germany than the + present Chancellor,” said one letter sent to the Christian Social Union + headquarters in Ingolstadt. “Chancellor Schröder is doing nothing to stop the + flood of foreigners who are spreading around our Fatherland,” said the letter, + signed by a certain Rudolph Lewald. + + The CSU immediately spotted a potential member. “Many thanks for your nice + thoughts,” replied the local party manager, who enclosed an application for + membership. + + The letter used chunks of Hitler’s book, which is still banned in Germany. + History students have to apply for access to the book in university libraries. + + + “The strongest, the brave and the hardworking will receive the birthright of + existence, only those who are born weaklings could regard this as offensive,” + the letter-writer said. “So-called humanity is melting like snow in the March + sun.” Such phrases were lifted from Mein Kampf, which was written while Hitler + was in jail after the failed Munich putsch of 1923. + + Similar letters, also using the Nazi leader’s words, were sent to the other + political parties and drew sympathetic responses. “I read your letter with + great interest and pleasure,” the manager of the Christian Democratic Union in + Cologne, said. + + “Great that you want to join us!” enthused the Green Party headquarters. The + Free Democrats invited the aspiring party member to a fundraising charity ball + at which Hans- Dietrich Genscher, the former Foreign Minister, would be the + star guest. The Social Democrats sent a list of rallies to be attended by + Gerhard Schröder, the Chancellor. + + “I wanted to test how serious parties are about combating right-wing + extremism,” said the letter-writer, who was in fact the Cologne novelist + Rainer Popp. “I had no idea that they would be so enthusiastic. + + “For the first few days I expected two men in leather coats from the Special + Branch to knock on my door. Instead only the postman called — with packets of + election material from zealous political headquarters,” Herr Popp said. + + “I was stunned that political parties could react in this way — I reckon I + would have had the same response if I had signed the letter ‘Adolf Hitler’.” + + + + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +4 DVDs Free +s&p Join Now +http://us.click.yahoo.com/pt6YBB/NXiEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00248.668706b3eca383f610723863786d422d b/Ch3/datasets/spam/easy_ham/00248.668706b3eca383f610723863786d422d new file mode 100644 index 000000000..d27fc71cf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00248.668706b3eca383f610723863786d422d @@ -0,0 +1,52 @@ +From ilug-admin@linux.ie Fri Sep 6 11:40:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 0350816F49 + for ; Fri, 6 Sep 2002 11:38:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:38:07 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868NkW25395 for + ; Fri, 6 Sep 2002 09:23:46 +0100 +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + webnote.net (8.9.3/8.9.3) with ESMTP id JAA20738 for ; + Fri, 6 Sep 2002 09:24:06 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA01579; Fri, 6 Sep 2002 09:22:54 +0100 +Received: from milexc01.maxtor.com ([134.6.205.206]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA01545 for ; Fri, + 6 Sep 2002 09:22:37 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host [134.6.205.206] claimed to + be milexc01.maxtor.com +Received: by milexc01.maxtor.com with Internet Mail Service (5.5.2653.19) + id ; Fri, 6 Sep 2002 09:22:33 +0100 +Message-Id: <0D443C91DCE9CD40B1C795BA222A729E0188571E@milexc01.maxtor.com> +From: "Wynne, Conor" +To: "'ilug@linux.ie'" +Date: Fri, 6 Sep 2002 09:22:32 +0100 +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2653.19) +Content-Type: text/plain; charset="iso-8859-1" +Subject: [ILUG] Flat rate is back lads! +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Hi all, + +Saw this on the register this morning, +http://theregister.co.uk/content/6/26983.html, and they support ISDN dual +channel. Whoo Hoo! + +CW + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00249.5123280972d4935e630a46f92266f6c8 b/Ch3/datasets/spam/easy_ham/00249.5123280972d4935e630a46f92266f6c8 new file mode 100644 index 000000000..e9fe1fe89 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00249.5123280972d4935e630a46f92266f6c8 @@ -0,0 +1,67 @@ +From ilug-admin@linux.ie Fri Sep 6 11:40:08 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id AE33716F56 + for ; Fri, 6 Sep 2002 11:38:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:38:08 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g86921C27133 for + ; Fri, 6 Sep 2002 10:02:02 +0100 +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + webnote.net (8.9.3/8.9.3) with ESMTP id DAA19755 for ; + Fri, 6 Sep 2002 03:14:46 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id DAA21093; Fri, 6 Sep 2002 03:13:57 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from linuxmafia.com (linuxmafia.COM [198.144.195.186]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id DAA21056 for ; + Fri, 6 Sep 2002 03:13:44 +0100 +Received: from rick by linuxmafia.com with local (Exim 3.35 #1 (Debian)) + id 17n8dx-0002w4-00 for ; Thu, 05 Sep 2002 19:14:45 -0700 +Date: Thu, 5 Sep 2002 19:14:45 -0700 +To: Irish Linux Users Group +Subject: Re: [ILUG] modem problems +Message-Id: <20020906021444.GK12787@linuxmafia.com> +References: <6561EF50BF493D4B9B161C6FA41932C34998CE@ns1.ward.ie> + <20020904130735.B2712@barge.tcd.ie> + <1031141868.1361.2.camel@ishmael.niallsheridan.com> + <3D75F9CF.9040306@waider.ie> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <3D75F9CF.9040306@waider.ie> +User-Agent: Mutt/1.4i +From: Rick Moen +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Quoting Waider (waider@waider.ie): + +> Niall Sheridan wrote: +> | A power cycle will do it. +> | Other than that it's chipset specific. +> +> sure. tried powercycling an internal modem recently? :) +> +> Waider. This is Rick Moen bait. + +Thanks. It was delicious. ;-> + +-- +Cheers, "That article and its poster have been cancelled." +Rick Moen -- David B. O'Donnel, sysadmin for America Online +rick@linuxmafia.com + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00250.c99c3af1901ffb471442f3ef4580ffc8 b/Ch3/datasets/spam/easy_ham/00250.c99c3af1901ffb471442f3ef4580ffc8 new file mode 100644 index 000000000..749e96be5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00250.c99c3af1901ffb471442f3ef4580ffc8 @@ -0,0 +1,109 @@ +From ilug-admin@linux.ie Fri Sep 6 11:40:17 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id DC9AD16F17 + for ; Fri, 6 Sep 2002 11:38:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:38:13 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869eCC28625 for + ; Fri, 6 Sep 2002 10:40:12 +0100 +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + webnote.net (8.9.3/8.9.3) with ESMTP id BAA19479 for ; + Fri, 6 Sep 2002 01:32:43 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id BAA17211; Fri, 6 Sep 2002 01:31:38 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from mail00.svc.cra.dublin.eircom.net + (mail00.svc.cra.dublin.eircom.net [159.134.118.16]) by lugh.tuatha.org + (8.9.3/8.9.3) with SMTP id BAA17175 for ; Fri, + 6 Sep 2002 01:31:26 +0100 +Received: (qmail 54537 messnum 527868 invoked from + network[159.134.112.65/p112-65.as1.bdt.dublin.eircom.net]); 6 Sep 2002 + 00:30:55 -0000 +Received: from p112-65.as1.bdt.dublin.eircom.net (HELO calm.mc) + (159.134.112.65) by mail00.svc.cra.dublin.eircom.net (qp 54537) with SMTP; + 6 Sep 2002 00:30:55 -0000 +Received: from mconry by calm.mc with local (Exim 3.35 #1 (Debian)) id + 17n71T-00012j-00 for ; Fri, 06 Sep 2002 01:30:55 +0100 +Date: Fri, 6 Sep 2002 01:30:55 +0100 +From: Michael Conry +To: ilug@linux.ie +Subject: Re: [ILUG] Newby to Linux looking for information on cvs +Message-Id: <20020906003054.GA3997@calm.mc> +Reply-To: michael.conry@ucd.ie +References: <5FE418B3F962D411BED40000E818B33C9C8FEC@HASSLE> + <000c01c2552f$11748cf0$10a87dc2@desktop> <20020906002841.GA995@calm.mc> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <20020906002841.GA995@calm.mc> +User-Agent: Mutt/1.3.28i +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +On 0020 +0100 %{!Thu, Sep 05, 2002 at 11:53:32PM +0100}, Darragh wrote: +> the help that I received today. Then though I tried to build them. I +> started by trying the w3 program. I used the following lines which produced +> some strange results. Would any one be able to set me straight? +> +> ./configure --with-emacs --prefix=/usr/local/src/beta/w3 --exec-prefix=/usr/ +> local/src/beta/w3 --with-url=/url/url +One thing I _think_ you might be doing slightly wrong is your +specification of prefixes. --prefix is the directory to be used as root +for _installing_ files. Typically packages use /usr/local as default +(so binaries might then go in /usr/local/bin, documentation in +/usr/local/doc and so forth). +Normally, I find it sufficient to put --prefix=/usr/local, and do not +further specify things like --exec-prefix. + +Maybe you have a special reason for using the prefixes you chose, in +which case ignore me! +> That worked fine so I moved to the next step. +> make +> At the bottem of the text I got the following messages: +> Cannot open load file: /url/url/url-vars.el +> make[1]: *** [custom-load.el] Error 255 +> make[1]: Leaving directory `/usr/local/src/beta/w3/lisp' +> make: *** [w3] Error 2 +> +> When I got around to trying the url package I had no problems. In saying +> that this doesn't necessarily mean that I was doing it right so below are +> the commands I used. +> ./configure --with-emacs --prefix=/url/url --exec-prefix=/url/url +I'd make the same remarks about prefixes here. I would use the command + ./configure --with-emacs --prefix=/usr/local + +To get w3 to compile, I think the with-url flag you should use is + --with-url=/usr/local/share/emacs/site-lisp/ +(Assuming you compiled/installed url with --prefix=/usr/local +Since you appear to have installed url in /url/url, configure w3 with +./configure --with-emacs --prefix=/usr/local/ --with-url=/url/url/share/emacs/site-lisp + +A command you would have found useful would have been + find / -name 'url-vars.el' -print +Which would have told you where the url-vars.el file was installed. + +A program which is very useful is checkinstall +http://asic-linux.com.mx/~izto/checkinstall/ +It allows you to install packages from source while still registering +them in the package management system of your distro (rpm,deb,tgz). +Instead of "make install" type "checkinstall", and a package is put +together and installed for you. Makes uninstallation simpler than it +might otherwise be. +-- +Michael Conry Ph.:+353-1-7161987, Web: http://www.acronymchile.com +Key fingerprint = 5508 B563 6791 5C84 A947 CB01 997B 3598 09DE 502C + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00251.7b7563dab83993b166e03ab8f052c5ac b/Ch3/datasets/spam/easy_ham/00251.7b7563dab83993b166e03ab8f052c5ac new file mode 100644 index 000000000..398bd033c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00251.7b7563dab83993b166e03ab8f052c5ac @@ -0,0 +1,201 @@ +From ilug-admin@linux.ie Fri Sep 6 11:40:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id A1FF116F69 + for ; Fri, 6 Sep 2002 11:38:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:38:40 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869r0C29204 for + ; Fri, 6 Sep 2002 10:53:00 +0100 +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + webnote.net (8.9.3/8.9.3) with ESMTP id AAA19175 for ; + Fri, 6 Sep 2002 00:05:29 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id XAA13593; Thu, 5 Sep 2002 23:54:34 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from mail03.svc.cra.dublin.eircom.net + (mail03.svc.cra.dublin.eircom.net [159.134.118.19]) by lugh.tuatha.org + (8.9.3/8.9.3) with SMTP id XAA13503 for ; Thu, + 5 Sep 2002 23:54:04 +0100 +Received: (qmail 37104 messnum 523993 invoked from + network[194.125.168.16/ts01-016.drogheda.indigo.ie]); 5 Sep 2002 22:53:32 + -0000 +Received: from ts01-016.drogheda.indigo.ie (HELO desktop) (194.125.168.16) + by mail03.svc.cra.dublin.eircom.net (qp 37104) with SMTP; 5 Sep 2002 + 22:53:32 -0000 +Message-Id: <000c01c2552f$11748cf0$10a87dc2@desktop> +From: "Darragh" +To: +References: <5FE418B3F962D411BED40000E818B33C9C8FEC@HASSLE> +Subject: RE: [ILUG] Newby to Linux looking for information on cvs +Date: Thu, 5 Sep 2002 23:53:32 +0100 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Hello all, +Firstly I'd like to thank all of you for the fast and very helpful feedback +that I got to my question today. I have one more question though. I +downloaded the w3 and url files from the server at the first try thanks to +the help that I received today. Then though I tried to build them. I +started by trying the w3 program. I used the following lines which produced +some strange results. Would any one be able to set me straight? + +./configure --with-emacs --prefix=/usr/local/src/beta/w3 --exec-prefix=/usr/ +local/src/beta/w3 --with-url=/url/url +That worked fine so I moved to the next step. +make +At the bottem of the text I got the following messages: +Cannot open load file: /url/url/url-vars.el +make[1]: *** [custom-load.el] Error 255 +make[1]: Leaving directory `/usr/local/src/beta/w3/lisp' +make: *** [w3] Error 2 + +When I got around to trying the url package I had no problems. In saying +that this doesn't necessarily mean that I was doing it right so below are +the commands I used. +./configure --with-emacs --prefix=/url/url --exec-prefix=/url/url +followed by the commands make and make install. +There is no text files which contain help on installing the url package so +I'm not completely certain if I've used the right method here. + +Thanks again + +Darragh +----- Original Message ----- +From: "Hunt, Bryan" +To: ; +Cc: +Sent: Thursday, September 05, 2002 5:08 PM +Subject: OT: RE: [ILUG] Newby to Linux looking for information on cvs + + +> +> speaking of that IDE (weblogic developer) the open source version called +> eclipse is free from eclipse.org If you are doing java development you +> need to get this IDE . I've been using it for the last month and it is +> absolutly superb. Best thing about it is that rather than using swing +> (which is crap) is that they have their own native widget set called swt. +> +> When you run it on windows it uses windows widgets but when you run it on +> linux it uses gtk, you should see it on gnome 2 ! Absolutely stunning ! +> +> --B +> +> -----Original Message----- +> From: Justin MacCarthy [mailto:macarthy@iol.ie] +> Sent: 05 September 2002 16:53 +> To: michael.conry@ucd.ie +> Cc: ilug@linux.ie +> Subject: RE: [ILUG] Newby to Linux looking for information on cvs +> +> +> This is the best step by step guide to setting up cvs on Redhat.. +> +> +http://www7b.software.ibm.com/wsdd/library/techarticles/0205_yu/yu.html?open +> &l=456,t=gr +> +> It is for a particular IBM ide, but the setup and testing of the server is +> the same for any CVS client +> +> Both The "Using Linux" and "Linux in a nutshell" book by Oreilly have +> sections on cvs /rcs , and both books are a must buy for any linux newbie +> +> +> Justin +> +> +> > -----Original Message----- +> > From: ilug-admin@linux.ie [mailto:ilug-admin@linux.ie]On Behalf Of +> > Michael Conry +> > Sent: 05 September 2002 16:34 +> > To: Darragh +> > Cc: ilug@linux.ie +> > Subject: Re: [ILUG] Newby to Linux looking for information on cvs +> > +> > +> > On 0020 +0100 %{!Thu, Sep 05, 2002 at 3:55:16PM +0100}, Darragh wrote: +> > > Hello, +> > > I am very new to Linux and need some help on a utility called +> > cvs. As far +> > > as I'm aware its a similar protocol to FTP. I need to use it +> > to download a +> > > program from :pserver:anoncvs@subversions.gnu.org:/cvsroot/w3. +> > I am looking +> > > for information on how to use it. I'll have another look at +> > the man pages +> > > but I think I have to set it up before I can download anything. +> > cvs is really a very different kind of thing to FTP, but the details of +> > that statement are left as an exercise to the reader (won't show up my +> > own ignorance that way ;-) +> > The application you want is cvsclient... +> > There is documentation here: +> > http://www.fokus.gmd.de/gnu/docs/cvs/cvsclient_toc.html +> > +> > You might get a quick idea of how it works from here: +> > http://www.sci.muni.cz/~mikulik/gnuplot.html +> > where he explains how to get cvs gnuplot... +> > The commands are: +> > +> > export +> > CVSROOT=:pserver:anonymous@cvs.gnuplot.sourceforge.net:/cvsroot/gnuplot +> > cvs login +> > cvs -z3 checkout gnuplot +> > +> > Something similar will probably do the job for you. I'm guessing the +> > following MIGHT work... +> > +> > export CVSROOT=:pserver:anoncvs@subversions.gnu.org:/cvsroot/w3 +> > cvs login +> > cvs -z3 checkout w3 +> > +> > m +> > -- +> > Michael Conry Ph.:+353-1-7161987, Web: http://www.acronymchile.com +> > Key fingerprint = 5508 B563 6791 5C84 A947 CB01 997B 3598 09DE 502C +> > +> > -- +> > Irish Linux Users' Group: ilug@linux.ie +> > http://www.linux.ie/mailman/listinfo/ilug for (un)subscription +> > information. +> > List maintainer: listmaster@linux.ie +> > +> > +> > +> +> +> -- +> Irish Linux Users' Group: ilug@linux.ie +> http://www.linux.ie/mailman/listinfo/ilug for (un)subscription +information. +> List maintainer: listmaster@linux.ie +> +> -- +> Irish Linux Users' Group: ilug@linux.ie +> http://www.linux.ie/mailman/listinfo/ilug for (un)subscription +information. +> List maintainer: listmaster@linux.ie +> + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00252.18ef1111d1d7543890e6b0a7eb13e014 b/Ch3/datasets/spam/easy_ham/00252.18ef1111d1d7543890e6b0a7eb13e014 new file mode 100644 index 000000000..7f5b28e39 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00252.18ef1111d1d7543890e6b0a7eb13e014 @@ -0,0 +1,62 @@ +From ilug-admin@linux.ie Fri Sep 6 11:40:19 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 0353616F1A + for ; Fri, 6 Sep 2002 11:38:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:38:17 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869e1C28599 for + ; Fri, 6 Sep 2002 10:40:01 +0100 +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + webnote.net (8.9.3/8.9.3) with ESMTP id BAA19534 for ; + Fri, 6 Sep 2002 01:43:59 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id BAA17409; Fri, 6 Sep 2002 01:37:27 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from linuxmafia.com (linuxmafia.COM [198.144.195.186]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id BAA17380 for ; + Fri, 6 Sep 2002 01:37:10 +0100 +Received: from rick by linuxmafia.com with local (Exim 3.35 #1 (Debian)) + id 17n78V-00087V-00; Thu, 05 Sep 2002 17:38:11 -0700 +Date: Thu, 5 Sep 2002 17:38:11 -0700 +To: irish linux users group +Cc: kevin+dated+1031593647.e87527@ie.suberic.net +Subject: Re: [ILUG] windows users accessing cvs... +Message-Id: <20020906003811.GF12787@linuxmafia.com> +References: <20020904184725.A19528@ie.suberic.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <20020904184725.A19528@ie.suberic.net> +User-Agent: Mutt/1.4i +From: Rick Moen +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Quoting kevin lyda (kevin+dated+1031593647.e87527@ie.suberic.net): + +> anyone here have experience with windows cvs clients accessing a cvs +> server *securely*. preferably using ssh of some form (putty or cygwin's +> openssh port) and the wincvs client? + +Here's something I cobbled together: +http://sourceforge.net/docman/display_doc.php?docid=9026&group_id=13487 + +-- +Cheers, "I don't like country music, but I don't mean to denigrate +Rick Moen those who do. And, for the people who like country music, +rick@linuxmafia.com denigrate means 'put down'." -- Bob Newhart + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/easy_ham/00253.a396ca42887c9f843052432ff1bcbf41 b/Ch3/datasets/spam/easy_ham/00253.a396ca42887c9f843052432ff1bcbf41 new file mode 100644 index 000000000..29e868929 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00253.a396ca42887c9f843052432ff1bcbf41 @@ -0,0 +1,75 @@ +From ilug-admin@linux.ie Fri Sep 6 11:40:51 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id CDED116F18 + for ; Fri, 6 Sep 2002 11:39:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:39:11 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869rbC29317 for + ; Fri, 6 Sep 2002 10:53:37 +0100 +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + webnote.net (8.9.3/8.9.3) with ESMTP id XAA19032 for ; + Thu, 5 Sep 2002 23:31:39 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id XAA12567; Thu, 5 Sep 2002 23:30:20 +0100 +Received: from omta03.mta.everyone.net (sitemail3.everyone.net + [216.200.145.37]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id XAA12494 + for ; Thu, 5 Sep 2002 23:29:54 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host sitemail3.everyone.net + [216.200.145.37] claimed to be omta03.mta.everyone.net +Received: from sitemail.everyone.net (dsnat [216.200.145.62]) by + omta03.mta.everyone.net (Postfix) with ESMTP id 9B4DD4B332 for + ; Thu, 5 Sep 2002 15:17:36 -0700 (PDT) +Received: by sitemail.everyone.net (Postfix, from userid 99) id 822B53942; + Thu, 5 Sep 2002 15:17:36 -0700 (PDT) +Content-Type: text/plain +Content-Disposition: inline +Content-Transfer-Encoding: 7bit +MIME-Version: 1.0 +X-Mailer: MIME-tools 5.41 (Entity 5.404) +Date: Thu, 5 Sep 2002 15:17:36 -0700 (PDT) +From: eric nichols +To: ilug@linux.ie +Reply-To: matchsprint@trackbike.com +X-Originating-Ip: [194.145.128.31] +Message-Id: <20020905221736.822B53942@sitemail.everyone.net> +Subject: [ILUG] PCTel modules +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Hello again. I tried all the suggestions for the PCTel driver and at the end of it, everything still goes smoothly until I type "make" after I get the output from the ./configure. + +However, there were a couple of things I noticed along the way. After typing +* cp configs/kernel-2.4...config .config +* make oldconfig +* make dep +The 2nd to last line I got back said that the modversions.h file was not updated. When I looked at this path to the modversions.h file, it was 281 lines and every line started with a # mark. Is it the case that nothing is read on a line after a # mark (or am I just thinking of another language?) and so should I delete the # at certain places? + +Also, when I was in the pctel directory and typed "make", I noticed that a different subdirectory is taken to a different modversions.h file. Inside this other file, there's nothing at all. And so I moved the modversions.h file with 281 lines to the empty modversions.h file - and got a different reply after "make". The output after I moved the file over mostly looked like this: +/usr/src/linux-2.4.18-3/linux/modversions.h:11:33: linux/modules/adb.ver: No such file or directory +/usr/src/linux-2.4.18-3/linux/modversions.h:12:37: linux/modules/af_ax25.ver: No such file or directory +/usr/src/linux-2.4.18-3/linux/modversions.h:13:36: linux/modules/af_ipx.ver: No such file or directory + +The odd lines being the path and the first half of the other lines are what's written after the # in the modversions.h file. Should there be a file at each of these (one at each of the 281 lines of the file) that I'd have to compile/make? + +It's taken plenty of elbow grease, but I'm glad it hasn't gone smoothly, it's a good learning experience. Again, any help is appreciated. Thanks, Eric + +_____________________________________________________________ +email services provided by trackbike.com, your source for alleycat and trackbike photos. submissions welcome. + +_____________________________________________________________ +Promote your group and strengthen ties to your members with email@yourgroup.org by Everyone.net http://www.everyone.net/?btn=tag + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00254.84ee8f124a5dbb36412c2e2d5cca3095 b/Ch3/datasets/spam/easy_ham/00254.84ee8f124a5dbb36412c2e2d5cca3095 new file mode 100644 index 000000000..3f28f585c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00254.84ee8f124a5dbb36412c2e2d5cca3095 @@ -0,0 +1,127 @@ +From ilug-admin@linux.ie Fri Sep 6 11:40:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 8725D16F03 + for ; Fri, 6 Sep 2002 11:39:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:39:09 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869kOC28806 for + ; Fri, 6 Sep 2002 10:47:47 +0100 +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + webnote.net (8.9.3/8.9.3) with ESMTP id AAA19327 for ; + Fri, 6 Sep 2002 00:52:16 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id AAA15843; Fri, 6 Sep 2002 00:50:53 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from mail05.svc.cra.dublin.eircom.net + (mail05.svc.cra.dublin.eircom.net [159.134.118.21]) by lugh.tuatha.org + (8.9.3/8.9.3) with SMTP id AAA15809 for ; Fri, + 6 Sep 2002 00:50:45 +0100 +Received: (qmail 46890 messnum 300912 invoked from + network[159.134.112.65/p112-65.as1.bdt.dublin.eircom.net]); 5 Sep 2002 + 23:50:14 -0000 +Received: from p112-65.as1.bdt.dublin.eircom.net (HELO calm.mc) + (159.134.112.65) by mail05.svc.cra.dublin.eircom.net (qp 46890) with SMTP; + 5 Sep 2002 23:50:14 -0000 +Received: from mconry by calm.mc with local (Exim 3.35 #1 (Debian)) id + 17n6O5-0000Fh-00; Fri, 06 Sep 2002 00:50:13 +0100 +Date: Fri, 6 Sep 2002 00:50:13 +0100 +From: Michael Conry +To: eric nichols +Cc: ilug@linux.ie +Subject: Re: [ILUG] PCTel modules +Message-Id: <20020905235013.GC887@calm.mc> +Reply-To: michael.conry@ucd.ie +References: <20020905221736.822B53942@sitemail.everyone.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <20020905221736.822B53942@sitemail.everyone.net> +User-Agent: Mutt/1.3.28i +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +On 0020 -0700 %{!Thu, Sep 05, 2002 at 3:17:36PM -0700}, eric nichols wrote: +> Hello again. I tried all the suggestions for the PCTel driver and at +> the end of it, everything still goes smoothly until I type "make" +> after I get the output from the ./configure. +> +> However, there were a couple of things I noticed along the way. After typing +> * cp configs/kernel-2.4...config .config +> * make oldconfig +> * make dep +> The 2nd to last line I got back said that the modversions.h file was +> not updated. When I looked at this path to the modversions.h file, it +> was 281 lines and every line started with a # mark. +> Is it the case +> that nothing is read on a line after a # mark (or am I just thinking +> of another language?) and so should I delete the # at certain places? +No that is appropriate content for the file. I'm not a C programmer, +but I think that these sort of things (#include ) are +instructions to the compiler processed by a pre-processor in the compile +process, and include all sorts of symbols/functions +e.g. "#include " gives you maths type functions. Since they +start with "#" they are ignored in the final compilation. + +Regarding the rest of the compile process, you need to tell the PCtel +software to look in the right place for the kernel headers/source. +I recall from your previous mail that there was a flag + --with-kernel-includes=/usr/src/linux-2.4 +which could be passed to the ./configure script (with the appropriate +directory in place of /usr/src/linux-2.4). This might allow you to +persuade the code to compile against the correct headers. I think this +is the right way to proceed. + +Alternatively, maybe the steps above regarding "make dep" and so forth +should have been performed in the directory where the make process is +looking for modversions.h & Co. + +I don't think it is a good idea keep moving files into the directory as +you describe below. First of all you will move modversions.h (which you +have done), then you would have to move all those *.ver files, after +that, there will almost certainly be a need for further header (*.h) +files. This could be quickly done, but is probably bad (those files +don't really belong there). + +For what it's worth I think you are very close to a successful +compilation. + +m + +> +> Also, when I was in the pctel directory and typed "make", I noticed +> that a different subdirectory is taken to a different modversions.h +> file. Inside this other file, there's nothing at all. And so I moved +> the modversions.h file with 281 lines to the empty modversions.h file +> - and got a different reply after "make". The output after I moved the +> file over mostly looked like this: +> /usr/src/linux-2.4.18-3/linux/modversions.h:11:33: +> linux/modules/adb.ver: No such file or directory +> /usr/src/linux-2.4.18-3/linux/modversions.h:12:37: +> linux/modules/af_ax25.ver: No such file or directory +> /usr/src/linux-2.4.18-3/linux/modversions.h:13:36: +> linux/modules/af_ipx.ver: No such file or directory +> +> The odd lines being the path and the first half of the other lines are +> what's written after the # in the modversions.h file. Should there be +> a file at each of these (one at each of the 281 lines of the file) +> that I'd have to compile/make? + +-- +Michael Conry Ph.:+353-1-7161987, Web: http://www.acronymchile.com +Key fingerprint = 5508 B563 6791 5C84 A947 CB01 997B 3598 09DE 502C + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00255.11be25bd4a3d55702ed4a1f13e7d2a3d b/Ch3/datasets/spam/easy_ham/00255.11be25bd4a3d55702ed4a1f13e7d2a3d new file mode 100644 index 000000000..8bde493c6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00255.11be25bd4a3d55702ed4a1f13e7d2a3d @@ -0,0 +1,96 @@ +From ilug-admin@linux.ie Fri Sep 6 11:40:54 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 7D5C516F19 + for ; Fri, 6 Sep 2002 11:39:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:39:13 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g86AQeC32186 for + ; Fri, 6 Sep 2002 11:26:40 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id LAA06471; Fri, 6 Sep 2002 11:24:33 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from web12102.mail.yahoo.com (web12102.mail.yahoo.com + [216.136.172.22]) by lugh.tuatha.org (8.9.3/8.9.3) with SMTP id LAA06436 + for ; Fri, 6 Sep 2002 11:24:22 +0100 +Message-Id: <20020906102417.66047.qmail@web12102.mail.yahoo.com> +Received: from [159.134.146.155] by web12102.mail.yahoo.com via HTTP; + Fri, 06 Sep 2002 11:24:17 BST +Date: Fri, 6 Sep 2002 11:24:17 +0100 (BST) +From: =?iso-8859-1?q?Colin=20Nevin?= +To: ilug@linux.ie +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit +Subject: [ILUG] semaphores on linux RH7.3 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Hi All, + +I have a question which is a bit tricky and was +wondering of anyone has come across this problem +before or could point me in the right direction. + +I am involved in porting a SCO unix application to +Linux, and we have encountered a problem with the way +semaphores are being handled. The application uses +mulitple processes to run application code with the +main process known as the bsh which controls all i/o +be it screen, or file i/o, syncronisation is handled +via semaphores. + +In certain circumstances the main process and the +application child process seem to lock up both waiting +for the syncronisation semaphores to change state, I +have attached ddd to the processes and it seems that +the semaphore code is doing the correct things for +syncronisation but the processes stay stuck in the +semop() system call. + +I have also noticed that if I introduce a slight delay +between changing semaphore states the problem goes +away, but this causes our entire application to run +really sloooww !! lol + +Is there anything weird or different with the standard +implemenation of semaphores on modern linux that could +cause a semop() to fail to pick up the change in state + +in a semaphore immediately? + +Setting sem_flg = IPC_NOWAIT and checking for errno == +EAGAIN and recalling semop() if the semop() call fails +(-1) also fixes the problem but again system +performance goes down the toilet. + +both the parent controlling process run as the same +uid, and the parent creates the semaphores with +permissions 0666. + +Any pointers would be appreciated! + +Rgds, + +Colin Nevin + +__________________________________________________ +Do You Yahoo!? +Everything you'll ever need on one web page +from News and Sport to Email and Music Charts +http://uk.my.yahoo.com + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00256.53663e6f042c696de327ed117c0990c4 b/Ch3/datasets/spam/easy_ham/00256.53663e6f042c696de327ed117c0990c4 new file mode 100644 index 000000000..d5d0e22bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00256.53663e6f042c696de327ed117c0990c4 @@ -0,0 +1,64 @@ +From secprog-return-484-zzzz=spamassassin.taint.org@securityfocus.com Fri Sep 6 15:24:57 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 67C5716F03 + for ; Fri, 6 Sep 2002 15:24:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 15:24:57 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g86A13C30435 for + ; Fri, 6 Sep 2002 11:01:03 +0100 +Received: from outgoing.securityfocus.com (outgoing3.securityfocus.com + [66.38.151.27]) by webnote.net (8.9.3/8.9.3) with ESMTP id SAA16998 for + ; Thu, 5 Sep 2002 18:30:53 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 421EEA312D; Thu, 5 Sep 2002 10:39:46 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 17568 invoked from network); 5 Sep 2002 08:02:24 -0000 +Date: Thu, 5 Sep 2002 10:17:03 +0200 +From: Andrey Kolishak +X-Mailer: The Bat! (v1.61) Personal +Reply-To: Andrey Kolishak +Organization: none +X-Priority: 3 (Normal) +Message-Id: <5780619972.20020905101703@sandy.ru> +To: SECPROG Securityfocus +Subject: Re: use of base image / delta image for automated recovery from attacks +In-Reply-To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + + + +take a look at http://www.pcworld.com/news/article/0,aid,102881,00.asp + + Andrey mailto:andr@sandy.ru + + + +BM> Does anyone do this already? Or is this a new concept? Or has this concept +BM> been discussed before and abandoned for some reasons that I don't yet know? +BM> I use the physical architecture of a basic web application as an example in +BM> this post, but this concept could of course be applied to most server +BM> systems. It would allow for the hardware-separation of volatile and +BM> non-volatile disk images. It would be analogous to performing nightly +BM> ghosting operations, only it would be more efficient and involve less (or +BM> no) downtime. + +BM> Thanks for any opinions, +BM> Ben + + diff --git a/Ch3/datasets/spam/easy_ham/00257.3e5b4e24045e108fedeff7d6ff8eecc5 b/Ch3/datasets/spam/easy_ham/00257.3e5b4e24045e108fedeff7d6ff8eecc5 new file mode 100644 index 000000000..2f5659a76 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00257.3e5b4e24045e108fedeff7d6ff8eecc5 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Wed Oct 9 10:55:09 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 0B57C16F17 + for ; Wed, 9 Oct 2002 10:52:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g98JKUK30723 for ; + Tue, 8 Oct 2002 20:20:31 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 563212940E5; Tue, 8 Oct 2002 12:20:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from qu.to (njl.ne.client2.attbi.com [24.218.112.39]) by + xent.com (Postfix) with SMTP id 0C42F2940E4 for ; + Tue, 8 Oct 2002 12:19:03 -0700 (PDT) +Received: (qmail 3564 invoked by uid 500); 8 Oct 2002 19:25:13 -0000 +From: Ned Jackson Lovely +To: fork@spamassassin.taint.org +Subject: Re: The absurdities of life. +Message-Id: <20021008152513.C1063@ibu.internal.qu.to> +References: + <3DA3294A.8000209@cse.ucsc.edu> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <3DA3294A.8000209@cse.ucsc.edu>; from elias@cse.ucsc.edu on + Tue, Oct 08, 2002 at 11:51:54AM -0700 +X-Cell: +1.617.877.3444 +X-Web: http://www.njl.us/ +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 8 Oct 2002 15:25:13 -0400 + +On Tue, Oct 08, 2002 at 11:51:54AM -0700, Elias wrote: +> So, given the apparent commonality of these occurances, companies appear +> to be losing a large amount of money by mailing these tiny checks out. +> Why can't they simply credit the account in question on the next bill? +> Granted, if an account has been closed there is no such option... + +I've been waiting for Hettinga to regale us with one of his well-tuned +micro-cash-bearer-settlement-geodesic-finance rants. Bob, you are SO +disappointing me. + +-- +njl + + diff --git a/Ch3/datasets/spam/easy_ham/00258.586a8a7ca9e58ea82936ef0487ae8638 b/Ch3/datasets/spam/easy_ham/00258.586a8a7ca9e58ea82936ef0487ae8638 new file mode 100644 index 000000000..18d5d7885 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00258.586a8a7ca9e58ea82936ef0487ae8638 @@ -0,0 +1,83 @@ +From fork-admin@xent.com Wed Oct 9 10:55:10 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id A521A16F18 + for ; Wed, 9 Oct 2002 10:52:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:53 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g98K4PK32066 for ; + Tue, 8 Oct 2002 21:04:25 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B76262940BB; Tue, 8 Oct 2002 13:04:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from blount.mail.mindspring.net (blount.mail.mindspring.net + [207.69.200.226]) by xent.com (Postfix) with ESMTP id 55BAB29409A for + ; Tue, 8 Oct 2002 13:03:35 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + blount.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17z0aJ-0005I4-00; + Tue, 08 Oct 2002 16:04:03 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: <20021008152513.C1063@ibu.internal.qu.to> +References: + <3DA3294A.8000209@cse.ucsc.edu> <20021008152513.C1063@ibu.internal.qu.to> +To: Ned Jackson Lovely , fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: Re: The absurdities of life. +Cc: Digital Bearer Settlement List +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 8 Oct 2002 15:26:28 -0400 + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +At 3:25 PM -0400 on 10/8/02, Ned Jackson Lovely wrote: + + +> I've been waiting for Hettinga to regale us with one of his +> well-tuned micro-cash-bearer-settlement-geodesic-finance rants. +> Bob, you are SO disappointing me. + +How about if I include it by reference... + + + +:-). + +Blue in the face, +RAH + +-----BEGIN PGP SIGNATURE----- +Version: PGP 7.5 + +iQA/AwUBPaMxL8PxH8jf3ohaEQJOvwCgwLjDfcRLc/15ohgtx/Y7Vvrl/5IAn0iA +eEFqCWCvykjwv+8jPA/PpDsf +=vNcJ +-----END PGP SIGNATURE----- + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00259.7310c53a2b5baca35187f0ee38aab709 b/Ch3/datasets/spam/easy_ham/00259.7310c53a2b5baca35187f0ee38aab709 new file mode 100644 index 000000000..1884d067a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00259.7310c53a2b5baca35187f0ee38aab709 @@ -0,0 +1,55 @@ +From fork-admin@xent.com Wed Oct 9 10:55:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 4D33A16F1A + for ; Wed, 9 Oct 2002 10:52:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:55 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g98KmWK01353 for ; + Tue, 8 Oct 2002 21:48:33 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6D8812940D4; Tue, 8 Oct 2002 13:48:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc53.attbi.com (rwcrmhc53.attbi.com [204.127.198.39]) + by xent.com (Postfix) with ESMTP id 7E61A2940D1 for ; + Tue, 8 Oct 2002 13:47:56 -0700 (PDT) +Received: from Intellistation ([66.31.2.27]) by rwcrmhc53.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20021008204826.IFB12956.rwcrmhc53.attbi.com@Intellistation> for + ; Tue, 8 Oct 2002 20:48:26 +0000 +Content-Type: text/plain; charset="us-ascii" +From: Eirikur Hallgrimsson +Organization: Electric Brain +To: fork@spamassassin.taint.org +Subject: process music: Mekons +User-Agent: KMail/1.4.1 +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200210081647.31774.eh@mad.scientist.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 8 Oct 2002 16:47:31 -0400 + +http://reuters.com/news_article.jhtml?type=entertainmentnews&StoryID=1543345 + +Working this loose knit fashion is what keeps the Mekons so exciting, +Langford said. "When the Mekons was our whole day job, it became a +drudgery," he said. " Sometimes we get bogged down and trapped. But we're +usually pretty greasy enough to bite our leg off, squirm free and run +off." + + + diff --git a/Ch3/datasets/spam/easy_ham/00260.9c633d54c32d46465f4162f3a91f553c b/Ch3/datasets/spam/easy_ham/00260.9c633d54c32d46465f4162f3a91f553c new file mode 100644 index 000000000..df8527488 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00260.9c633d54c32d46465f4162f3a91f553c @@ -0,0 +1,65 @@ +From fork-admin@xent.com Wed Oct 9 10:55:14 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 6CF7116F1B + for ; Wed, 9 Oct 2002 10:52:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:57 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g98KvXK01584 for ; + Tue, 8 Oct 2002 21:57:33 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A7D1F2940E7; Tue, 8 Oct 2002 13:57:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx2.ucsc.edu [128.114.129.35]) by + xent.com (Postfix) with ESMTP id 281BC2940E4 for ; + Tue, 8 Oct 2002 13:56:43 -0700 (PDT) +Received: from Tycho (dhcp-55-196.cse.ucsc.edu [128.114.55.196]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g98Kuj520661 for + ; Tue, 8 Oct 2002 13:56:45 -0700 (PDT) +From: "Jim Whitehead" +To: "FoRK" +Subject: Origins of Software Engineering +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Importance: Normal +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 8 Oct 2002 13:53:58 -0700 + +The academic discipline of Software Engineering was launched at a conference +sponsored by NATO, at Garmisch, Germany, in October, 1968. Intriguingly, the +term Software Engineering was chosen to be deliberately provocative -- why +can't software be developed with the same rigor used by other engineering +disciplines? + +The proceedings of this conference are now available online, at: +http://www.cs.ncl.ac.uk/old/people/brian.randell/home.formal/NATO/index.html + +Also, don't miss the pictures of attendees, including many significant +contributors to the field of Software Engineering: +http://www.cs.ncl.ac.uk/old/people/brian.randell/home.formal/NATO/N1968/inde +x.html + +- Jim + + diff --git a/Ch3/datasets/spam/easy_ham/00261.9e12183461e1f5e5061eb9f8d39d9822 b/Ch3/datasets/spam/easy_ham/00261.9e12183461e1f5e5061eb9f8d39d9822 new file mode 100644 index 000000000..882b053dc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00261.9e12183461e1f5e5061eb9f8d39d9822 @@ -0,0 +1,150 @@ +From fork-admin@xent.com Wed Oct 9 10:55:17 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 03FAB16F1C + for ; Wed, 9 Oct 2002 10:52:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:59 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g98MwbK05339 for ; + Tue, 8 Oct 2002 23:58:41 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 904F22940DE; Tue, 8 Oct 2002 15:58:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from blount.mail.mindspring.net (blount.mail.mindspring.net + [207.69.200.226]) by xent.com (Postfix) with ESMTP id 1F68229409A for + ; Tue, 8 Oct 2002 15:57:30 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + blount.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17z3IZ-0007ta-00; + Tue, 08 Oct 2002 18:57:55 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: Digital Bearer Settlement List , fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: The Disappearing Alliance +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 8 Oct 2002 18:18:20 -0400 + +http://www.techcentralstation.com/1051/printer.jsp?CID=1051-100802B + + + +The Disappearing Alliance +By Dale Franks 10/08/2002 + + +For over two generations, the countries of Western Europe have been our +closest allies. We stood beside each other through the darkest days of the +Cold War as partners in the North Atlantic Treaty Organization. We +celebrated with them over the fall of the Soviet Empire and the liberation +of Eastern Europe from the yoke of communism. + +Tragically, a generation from now, we may be bitter adversaries. + +Europe has increasingly fallen under the spell of a political ideology that +Hudson Institute scholar John Fonte has termed "progressive +transnationalism". The key doctrines of this form of post-communist +progressivism contain some fairly pernicious ideas. Among these are the +deconstruction of nationalism, the promotion of post-nationalist ideas of +citizenship (i.e. a "global" citizenry), a redefinition of democracy, and +the pooling of national sovereignty into multinational groups such as the +United Nations. + +The European Union, itself a multinational organization built through the +pooling of sovereignty by European nations, is post-democratic. While there +is a European Parliament, the EU's power resides mainly in the unelected +European Commission (EC) and its unelected President, who face few limits +to their power. Instead of a limited, consensual form of government, where +elected representatives promulgate constitutional laws, the EU has an +appointed, oligarchic executive, along with a large attendant bureaucracy, +whose orders are not constitutionally limited in any real sense. Moreover, +the EU has been unwilling to accept the democratically expressed wishes of +the people themselves when those wishes conflict with the results desired +by the EU's political elite. Both the EC and the European Court of Justice +regularly overturn the national laws of democratically elected EU member +governments. This is a step backward in Europe's political development. + +European criticism of America is on the rise, and the European list of +complaints about America is a long and growing one. They dislike the fact +that our republican system of government is not based on proportional +representation. They hate the fact that our citizens own guns. They despise +the fact that we execute murderers. They resent the fact that our economy +is so large, and that Americans consume so much. They also resent?and fear +- the fact that we have the ability to project American power anywhere +in the world. + +On August 9, 2002, Adrian Hamilton wrote a column in the UK's Independent +newspaper, in which he identified the US as a rogue state who should be +restrained, perhaps by a European military invasion, followed by a decade +or so of occupation. Fortunately, the article is satirical not because it +exaggerates the way European progressives view the US, but rather because +the impotence of European military power makes the idea of an invasion of +the US literally fantastic. + +At least, for now. + +Despite the tongue-in-cheek nature of this editorial, however, the fact +remains that America is increasingly viewed this way by the European +intellectual and political elite. + +The Europeans actively desire a world where the United Nations keeps in +check the activities of sovereign states. Because they have built such a +system in Europe, they feel it's valid for the rest of the world. America, +however, is the biggest obstacle to such a system. The Europeans cannot +understand why America places a higher value on the ethos of national +sovereignty and limited, consensual, and constitutional government, than it +does on compliance with international "norms." They view all departures +from such norms as aberrant. Because the UN member states all have an equal +vote in prescribing international norms, they assume that, since the +process is ostensibly legitimate, the results must be as well. The trouble +with this idea, of course, is that it gives the views of non-democratic, +authoritarian states the same weight as those of free, democratic +societies. It sanctifies the process, with no regard to the actual results. + +Thus, they are unable to make any moral distinction between the US refusals +to join in a given international effort because we wish to preserve the +liberty of our citizens, and similar refusals from Iraq because its +dictator wishes to maintain his firm grip on power. Our repeated references +to the US Constitution, and our unwillingness to bypass its provisions to +comply with international norms, are incomprehensible to them. They assume, +therefore, that our refusal is based on arrogance, rather than on a +commitment to +constitutional rights. + +None of this bodes well for the future of Euro-American friendship, or +cooperation. If the Europeans continue to reject traditional liberalism in +favor of the new progressivism, their criticism of the US will rise, while +their tolerance of our differences will fall. Obviously, in such a +political atmosphere, the opportunities for conflict will inevitably +increase. + +That thought is frightening enough. Even more frightening, however, is the +thought that such a conflict might be averted by our own acceptance of the +new ideology of transnational progressivism. + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00262.ce0f0852efe359866e64ad9a524e51d4 b/Ch3/datasets/spam/easy_ham/00262.ce0f0852efe359866e64ad9a524e51d4 new file mode 100644 index 000000000..8a997250b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00262.ce0f0852efe359866e64ad9a524e51d4 @@ -0,0 +1,57 @@ +From fork-admin@xent.com Wed Oct 9 10:55:18 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 8F18616F1E + for ; Wed, 9 Oct 2002 10:53:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:53:01 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g98NCcK06266 for ; + Wed, 9 Oct 2002 00:12:39 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C4A622940EA; Tue, 8 Oct 2002 16:12:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id DD7442940E9 for ; Tue, + 8 Oct 2002 16:11:36 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id D10A43ED70; + Tue, 8 Oct 2002 19:17:04 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id CF81B3ED4D; Tue, 8 Oct 2002 19:17:04 -0400 (EDT) +From: Tom +To: "R. A. Hettinga" +Cc: fork@spamassassin.taint.org +Subject: Re: The Disappearing Alliance +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 8 Oct 2002 19:17:04 -0400 (EDT) + + + +OK, lets break this down into the Kevin Smith worldview taht equate +everything with Star Wars... + +EU is the Republic/empire and we are..what,..the Trade Federation? +Stretch this out and it could be seen that the UN is the Jedi, complete +with faling powers. + +Work with me folks... + + + diff --git a/Ch3/datasets/spam/easy_ham/00263.6be4d6f2afb3d1b5b8acee019e560ce4 b/Ch3/datasets/spam/easy_ham/00263.6be4d6f2afb3d1b5b8acee019e560ce4 new file mode 100644 index 000000000..15f51cb0c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00263.6be4d6f2afb3d1b5b8acee019e560ce4 @@ -0,0 +1,63 @@ +From fork-admin@xent.com Wed Oct 9 10:55:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 60C3E16F16 + for ; Wed, 9 Oct 2002 10:52:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g98J0UK29943 for ; + Tue, 8 Oct 2002 20:00:31 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 20B8E2940E2; Tue, 8 Oct 2002 12:00:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta6.snfc21.pbi.net (mta6.snfc21.pbi.net [206.13.28.240]) + by xent.com (Postfix) with ESMTP id 430572940DE for ; + Tue, 8 Oct 2002 11:59:40 -0700 (PDT) +Received: from cse.ucsc.edu ([63.194.88.161]) by mta6.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H3O00A1ZFGAXP@mta6.snfc21.pbi.net> for fork@xent.com; Tue, + 08 Oct 2002 12:00:11 -0700 (PDT) +From: Elias +Subject: Re: The absurdities of life. +To: fork@spamassassin.taint.org +Reply-To: fork@spamassassin.taint.org +Message-Id: <3DA3294A.8000209@cse.ucsc.edu> +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en,pdf +User-Agent: Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:0.9.2) + Gecko/20010726 Netscape6/6.1 +References: +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 08 Oct 2002 11:51:54 -0700 + +So, given the apparent commonality of these occurances, companies appear +to be losing a large amount of money by mailing these tiny checks out. +Why can't they simply credit the account in question on the next bill? +Granted, if an account has been closed there is no such option... + +Elias + + +Christopher Haun wrote: + +> eheh i'll do yah one better i have a check some place (i just moved or i'd +> go scan it in) for $0.01 from Time Warner Cable. + + + diff --git a/Ch3/datasets/spam/easy_ham/00264.cef5d54bbce2f4a833aab06487467f82 b/Ch3/datasets/spam/easy_ham/00264.cef5d54bbce2f4a833aab06487467f82 new file mode 100644 index 000000000..54ffd7ad0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00264.cef5d54bbce2f4a833aab06487467f82 @@ -0,0 +1,84 @@ +From fork-admin@xent.com Wed Oct 9 10:55:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 1299416F67 + for ; Wed, 9 Oct 2002 10:53:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:53:03 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g9902iK08056 for ; + Wed, 9 Oct 2002 01:02:47 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 828FB2940EB; Tue, 8 Oct 2002 17:02:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 7F8EF2940E3 for ; Tue, + 8 Oct 2002 17:01:36 -0700 (PDT) +Received: (qmail 509 invoked from network); 9 Oct 2002 00:02:07 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 9 Oct 2002 00:02:07 -0000 +Reply-To: +From: "John Hall" +To: +Subject: RE: The Disappearing Alliance +Message-Id: <000801c26f27$1c087840$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 8 Oct 2002 17:02:08 -0700 + + +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of R. +A. +> Hettinga +> Subject: The Disappearing Alliance +> +> http://www.techcentralstation.com/1051/printer.jsp?CID=1051-100802B +> +> +> +> The Disappearing Alliance +> By Dale Franks 10/08/2002 + +> Obviously, in such a +> political atmosphere, the opportunities for conflict will inevitably +> increase. + +Given current trends, particularly in demographics, such conflict won't +be military. Europe wouldn't stand a chance now and things are getting +worse in a hurry. They are SOL. + +Not to mention that when push comes to shove they wouldn't stand united. + +> +> That thought is frightening enough. Even more frightening, however, is +the +> thought that such a conflict might be averted by our own acceptance of +the +> new ideology of transnational progressivism. + +Now that is a scary thought. +] + + + diff --git a/Ch3/datasets/spam/easy_ham/00265.d0ebd6ba8f3e2b8d71e9cdaa2ec6fd91 b/Ch3/datasets/spam/easy_ham/00265.d0ebd6ba8f3e2b8d71e9cdaa2ec6fd91 new file mode 100644 index 000000000..41a5bbb81 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00265.d0ebd6ba8f3e2b8d71e9cdaa2ec6fd91 @@ -0,0 +1,621 @@ +From fork-admin@xent.com Wed Oct 9 10:55:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 4D30016F6A + for ; Wed, 9 Oct 2002 10:53:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:53:06 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g992VDK14914 for ; + Wed, 9 Oct 2002 03:31:22 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9F2922940C9; Tue, 8 Oct 2002 19:30:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from gremlin.ics.uci.edu (gremlin.ics.uci.edu [128.195.1.70]) by + xent.com (Postfix) with ESMTP id 2021E29409A for ; + Tue, 8 Oct 2002 19:29:33 -0700 (PDT) +Received: from localhost (godzilla.ics.uci.edu [128.195.1.58]) by + gremlin.ics.uci.edu (8.12.5/8.12.5) with ESMTP id g992TbgB024238 for + ; Tue, 8 Oct 2002 19:29:37 -0700 (PDT) +MIME-Version: 1.0 (Apple Message framework v482) +Content-Type: text/plain; charset=WINDOWS-1252; format=flowed +Subject: Lord of the Ringtones: Arbocks vs. Seelecks +From: Rohit Khare +To: Fork@xent.com +Message-Id: +X-Mailer: Apple Mail (2.482) +X-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 8 Oct 2002 19:29:41 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g992VDK14914 + +I can't believe I actually read a laugh-out-loud funny profile of the +*FCC Commissioner* fer crissakes! So the following article comes +recommended, a fine explanation of Michael Powell's extraordinary +equivocation. + +On the other hand, I can also agree with Werbach's Werblog entry... Rohit + +> A Trip to F.C.C. World +> +> Nicholas Lemann has a piece in the New Yorker this week about FCC +> Chairman Michael Powell.  It's one of the first articles I've seen that +> captures some of Powell's real personality, and the way he's viewed in +> Washington.  Unfortunately, Lemann ends by endorsing conventional +> political wisdom.  After describing how Powell isn't really a +> fire-breathing ideological conservative, he concludes that, in essence, +> Powell favors the inumbent local Bell telephone companies, while a +> Democratic FCC would favor new entrants.  I know that's not how Powell +> sees the world, and though I disagree with him on many issues, I think +> he's right to resist the old dichotomy. +> +> The telecom collapse should be a humbling experience for anyone who +> went through it.  The disaster wasn't the regulators' fault, as some +> conservatives argue.  But something clearly went horribly wrong, and +> policy-makers should learn from that experience.  Contrary to Lemann's +> speculation, the upstart carriers won't be successful in a Gore +> administration, because it's too late.  Virtually all of them are dead, +> and Wall Street has turned off the capital tap for the foreseeable +> future.  Some may survive, but as small players rather than +> world-dominators.  +> +> The battle between CLECs and RBOCs that Lemann so astutely parodies is +> old news.  The next important battle in telecom will be between those +> who want to stay within the traditional boxes, and those who use +> different models entirely.  That's why open broadband networks and open +> spectrum are so important.  Whatever the regulatory environment, there +> is going to be consolidation in telecom.  Those left out in that +> consolidation will face increasing pressure to create new pipes into +> the home, or slowly die. The victors in the consolidation game will cut +> back on innovation and raise prices, which will create further pressure +> for alternatives.  +> +> Lemann is right that policy-making looks much drier and more ambiguous +> on the ground than through the lens of history.  But he's wrong in +> thinking that telecom's future will be something like its past. +> +> Friday, October 04, 2002 +> 11:17:11 AM  comments {0}  + +============================================================== +http://www.newyorker.com/printable/?fact/021007fa_fact + +THE CHAIRMAN +by NICHOLAS LEMANN +He's the other Powell, and no one is sure what he's up to. +New Yorker, October 8, 2002 + +Last year, my middle son, in eighth grade and encountering his first +fairly serious American-history course, indignantly reported that the +whole subject was incomprehensible. I was shocked. What about Gettysburg +and the Declaration of Independence and the Selma-to-Montgomery march? +Just look at my textbook, he said, and when I did I saw his point. His +class had got up to the eighteen-forties. What I expected was a big +beefing up of the roles of Sacagawea and Crispus Attucks, and, in-deed, +there was some of that. But the main difference between my son's text +and that of my own childhood was that somebody had made the disastrous +decision to devote most of it to what had actually happened in American +history. There were pages and pages on tariffs and bank charters and +reciprocal trade agreements. I skipped ahead, past the Civil War, hoping +for easier going, only to encounter currency floats and the regulation +of freight rates. Only a few decades into the twentieth century did it +become possible to see the federal government's main function as +responding to dramatic crises and launching crusades for social justice, +instead of attempting to referee competing claims from economic +interests. + +Even now, if one were to reveal what really goes on behind the pretty +speeches and the sanctimonious hearings in Washington, what you'd find +is thousands of lawyers and lobbyists madly vying for advantage, not so +much over the public as over each other: agribusiness versus real +estate, banks versus insurance companies, and so on. The arena in which +this competition mainly takes place is regulatory agencies and +commissions and the congressional committees that supervise them. It's +an insider's game, less because the players are secretive than because +the public and the press—encouraged by the players, who speak in jargon— +can't get themselves interested. + +One corner of Washington might be called F.C.C. World, for the Federal +Communications Commission. F.C.C. World has perhaps five thousand +denizens. They work at the commission itself, at the House and Senate +commerce committees, and at the Washington offices of the companies that +the commission regulates. They read Communications Daily (subscription +price: $3,695 a year), and every year around Christmastime they +grumblingly attend the Chairman's Dinner, at a Washington hotel, where +the high point of the evening is a scripted, supposedly self-deprecating +comedy routine by the commission's chairman. + +Of all the federal agencies and commissions, the F.C.C. is the one that +Americans ought to be most interested in; after all, it is involved with +a business sector that accounts for about fifteen per cent of the +American economy, as well as important aspects of daily life—telephone +and television and radio and newspapers and the Internet. And right now +F.C.C. World is in, if not a crisis, at least a very soapy lather, +because a good portion of what the angry public thinks of as the +"corporate scandals" concerns the economic collapse of companies +regulated by the F.C.C. Qwest, WorldCom, Adelphia, and Global Crossing, +among others, are (or were) part of F.C.C. World. AOL Time Warner is +part of F.C.C. World. Jack Grubman, the former Salomon Smith Barney +analyst who seems to have succeeded Kenneth Lay, of Enron, as the +embodiment of the corporate scandals, is part of F.C.C. World. In the +past two years, companies belonging to F.C.C. World have lost trillions +of dollars in stock-market valuation, and have collectively served as a +dead weight pulling down the entire stock market. + +This year, an alarmed and acerbic anonymous memorandum about the state +of the F.C.C. has been circulating widely within F.C.C. World. It evokes +F.C.C. World's feverish mood ("The F.C.C. is fiddling while Rome burns") +and suggests why nobody besides residents of F.C.C. World has thought of +the commission in connection with the corporate scandals. The sentence I +just quoted is followed by this explanation: "The ILECs appear likely to +enter all l.d. markets within twelve months, while losing virtually no +residential customers to attackers since 1996, and suffering about 10% +market share loss in business lines to CLECs." It's a lot easier to +think about evil C.E.O.s than to decipher that. + + +Even in good times, F.C.C. World pays obsessive attention to the +commission's chairman. In bad times, the attention becomes especially +intense; and when the chairman is a celebrity F.C.C. World devotes +itself to full-time chairman-watching. The current chairman, Michael +Powell, is a celebrity, at least by government-official standards, +because he is the only son of Colin Powell, the Secretary of State. +Unlike his father, he has a kind of mesmerizing ambiguity, which +generates enormous, and at times apoplectically toned, speculation about +who he really is and what he's really up to. Powell is young to be the +head of a federal agency—he is thirty-nine—and genially charming. +Everybody likes him. Before becoming chairman, he was for three years +one of the F.C.C.'s five commissioners; not only is he fluent in the +F.C.C.'s incomprehensible patois, he has a Clintonesque love of the +arcane details of communications policy. He's always saying that he's an +"avid moderate." And yet he has a rage-inciting quality. One of his +predecessors as chairman, Reed Hundt, quoted in Forbes, compared Powell +to Herbert Hoover. Mark Cooper, of the Consumer Federation of America, +calls him "radical and extreme." Just as often as he's accused of being +a right-wing ideologue, Powell gets accused of being paralytically +cautious. "It ain't about singing 'Kum-Ba-Yah' around the campfire," +another former chairman, William Kennard, says. "You have to have an +answer." One day last spring, Powell, testifying before a Senate +subcommittee, delivered an anodyne opening statement, and the +subcommittee's chairman, Ernest Hollings, of South Carolina, berated +him. "You don't care about these regulations," Hollings said. "You don't +care about the law or what Congress sets down. . . . That's the +fundamental. That's the misgiving I have of your administration over +there. It just is amazing to me. You just pell-mell down the road and +seem to not care at all. I think you'd be a wonderful executive +vice-president of a chamber of commerce, but not a chairman of a +regulatory commission at the government level. Are you happy in your +job?" + +"Extremely," Powell said, with an amiable smile. + + +One cannot understand Powell's maddening effect, at least on Democrats +and liberal activists, without understanding not just the stated purpose +of the commission he chairs but also its real purpose. The F.C.C. was +created by Congress in 1934, but it existed in prototype well before the +New Deal, because it performs a function that is one of the classic easy +cases for government intervention in the private economy: making sure +that broadcasters stick to their assigned spots on the airwaves. Its +other original function was preventing American Telephone & Telegraph, +the national monopoly phone company, from treating its customers +unfairly. Over the decades, as F.C.C. World grew up into a comfortable, +well-established place, the F.C.C. segued into the role of industrial +supervision—its real purpose. It was supposed to manage the competition +among communications companies so that it didn't become too bloody, by +artfully deciding who would be allowed to enter what line of business. +In addition to looking out for the public's interest, the commission +more specifically protected the interests of members of Congress, many +of whom regard the media companies in their districts as the single most +terrifying category of interest group—you can cross the local bank +president and live to tell the tale, but not the local broadcaster. +According to an oft-told F.C.C. World anecdote, President Clinton once +blocked an attempt to allow television stations to buy daily newspapers +in the same city because, he said, if the so-and-so who owned the +anti-Clinton Little Rock Democrat-Gazette had owned the leading TV +station in Little Rock, too, Clinton would never have become President. + + +F.C.C. World may have been con tentious, but it was settled, too, +because all the reasonably powerful players had created secure economic +niches for themselves. Then, in the nineteen-eighties, the successful +breakup of A.T. & T.—by far the biggest and most important company the +commission regulated—deposited a thick additional sediment of +self-confidence onto the consciousness of F.C.C. World. A generation +ago, for most Americans, there was one local phone company, one +long-distance company, and one company that manufactured telephones, +which customers were not permitted to own—and they were all the same +company. It was illegal to plug any device into a phone line. By the +mid-nineteen-nineties, there were a dozen economically viable local +phone companies, a handful of national long-distance companies competing +to offer customers the lowest price and best service, and stores +everywhere selling telephone equipment from many manufacturers—and +millions of Americans had a fax machine and a modem operating over the +telephone lines. A.T. & T. had argued for years that it was a "natural +monopoly," requiring protection from economic competition and total +control over its lines. So much for that argument. Over the same period, +the F.C.C. had assisted in the birth of cable television and cell phones +and the Internet. It was the dream of federal-agency success come true: +consumers vastly better served, and the industry much bigger and more +prosperous, too. + +The next big step was supposed to be the Telecommunications Act of 1996, +one of those massive, endlessly lobbied-over pieces of legislation which +most people outside F.C.C. World probably felt it was safe to ignore. +Although the Telecom Act sailed under the rhetorical banner of +modernization and deregulation, its essence was a grand interest-group +bargain, in which the local phone companies, known to headline writers +as "baby Bells" and to F.C.C. World as "arbocks" (the pronounced version +of RBOCs, or regional Bell operating companies), would be permitted to +offer long-distance service in exchange for letting the long-distance +companies and smaller new phone companies use their lines to compete for +customers. Consumers would win, because for the first time they would +get the benefits of competition in local service while getting even more +competition than they already had in long distance. But the politics and +economics of the Telecom Act (which was shepherded through Congress by +Vice-President Gore) were just as important. Democrats saw the act as +helping to reposition them as the technology party—the party that +brought the Internet into every home, created hundreds of thousands of +jobs in new companies, and, not least, set off an investment boom whose +beneficiaries might become the party's new contributor base. Clinton's +slogans about the "information superhighway" and "building a bridge to +the twenty-first century," which, like all Clinton slogans, artfully +sent different messages to different constituencies, were the rhetorical +correlates of the Telecom Act, and Gore's cruise to the Presidency was +supposed to be powered substantially by the act's success. + +The F.C.C. had a crucial role in all this. The arbocks are rich, +aggressive, politically powerful, and generally Republican (though like +all important interest groups they work with both parties); they +immediately filed lawsuits, which wound up tying the hands of their new +competitors in the local phone market for more than three years. Through +rule-making, enforcement, and litigation, the F.C.C., then headed by +Reed Hundt, who was Gore's classmate at St. Albans, was supposed to keep +the arbocks in their cages, so that not only long-distance companies +like A.T. & T. and MCI WorldCom but also a whole category of new +companies, "see-lecks" (the pronounced version of CLECs, or competitive +local exchange carriers), could emerge. This entailed the regulatory +equivalent of hand-to-hand combat: the see-leck is supposed to have +access to the arbock's switching equipment, the arbock won't give the +seeleck a key to the room where it's kept, so the see-leck asks the +F.C.C. to rule that the arbock has to give it the key. + +Partly because Hundt assured the see-lecks and other new companies that +he would protect them, and partly because of the generally booming +condition of the economy then, investment capital flooded into the +see-lecks—companies with names like Winstar, Covad, and Teligent—and +into other telecommunications companies. Even not obviously related +technology companies like Cisco Systems benefitted from the telecom +boom: demand for their products was supposed to come from the see-lecks +and other new players. There would be no conflict between the interests +of the new telecom companies and those of consumers; as one of Hundt's +former lieutenants told me, "Reed used to joke that my job was to make +sure that all prices went down and all stocks went up." + + +The years following the passage of the Telecom Act were the peak of the +boom. Wall Street had its blood up, and that meant not just more +startups but also more mergers of existing communications companies: +Time Warner and AOL decided to throw in together, and A.T. & T. and +Comcast, and so on. (Surely, WorldCom and the other telecom bad guys +believed that their self-dealing, stock-overselling, and creative +accounting would go unnoticed because the market was so +undiscriminating.) + +By the time the outcome of the 2000 Presidential election had been +determined, the telecom crash was well under way. Nonetheless, the +chairmanship of the F.C.C. remained one of the best jobs, in terms of +influence and visibility, available to a career government regulator. +Three Republicans emerged as candidates: Powell, who was a commissioner; +Harold Furchtgott-Roth, the farthest-to-the-right commissioner; and +Patrick Wood, the head of the Texas Public Utility Commission and, as +such, a George W. Bush guy. In Texas, however, Wood had crossed the most +powerful person in the arbock camp, Edward Whitacre, the C.E.O. of +S.B.C. Communications, which is headquartered in San Antonio. This meant +that the arbocks didn't want Wood as head of the F.C.C., because he +might be too pro-see-leck. (Wood is now the head of the Federal Energy +Regulatory Commission.) Michael Powell had to signal the arbocks that he +wasn't as threatening as Wood, while also signalling the conservative +movement that he was only negligibly farther to the left than +Furchtgott-Roth. + +Powell did this deftly. For example, in December of 2000 he appeared +before a conservative group called the Progress & Freedom Foundation and +gave a very Michael Powell speech—whimsical, intellectual, and +free-associative (Biblical history, Joseph Schumpeter, Moore's Law)—that +began by making fun of the idea that the F.C.C. should try to keep new +telecom companies alive. "In the wake of the 1996 Act, the F.C.C. is +often cast as the Grinch who stole Christmas," Powell said. "Like the +Whos, down in Who-ville, who feast on Who-pudding and rare Who-roast +beast, the communications industry was preparing to feast on the +deregulatory fruits it believed would inevitably sprout from the Act's +fertile soil. But this feast the F.C.C. Grinch did not like in the +least, so it is thought." Thus Powell was indicating that if he became +chairman he didn't expect to administer first aid to the see-lecks as +part of the job. He was appointed to the chairmanship on the first day +of the Bush Administration. + +Twenty months into the Administration, nearly all the see-lecks are dead +or dying; nearly all long-distance companies, not just WorldCom, are in +serious trouble; cable companies have lost half their value; satellite +companies are staggering. The crash has had an automatically +concentrating effect, because as new companies die the existing +companies' market share increases, and, if the existing companies are in +good shape financially, they have the opportunity to pick up damaged +companies at bargain prices. During the Bush Administration, as the +financial carnage in communications has worsened, the communications +industry has moved in the direction of more concentration. If the Bells +wind up protecting their regional monopolies in local phone service, and +if they also merge, the country will be on its way to having a national +duopoly in local service: Verizon, in the East, and S.B.C., in the West. +And these companies could dominate long distance as well, because of the +poor health of the long-distance companies. + +The cable business also seems close to having two dominant national +companies, AOL Time Warner and Comcast. Unlike the phone companies, they +don't have to share their wiring with other companies and so can more +fully control what material they allow to enter people's homes. As part +of the complicated bargaining with interest groups that led to the 1996 +Telecom Act, the limits on concentration in the radio industry were +significantly loosened, and in the past six years the number of +radio-station owners in the United States has been cut by twenty-five +per cent; today, a large portion of local and national radio news +programming is supplied by a single company, Westwood One, a subsidiary +of Viacom. + +In this situation, many Democrats and liberals think, the F.C.C. should +be hyperactive—the superhero of government regulation, springing to the +rescue of both consumers and the communications industry. It should try +to breathe life into the see-lecks and other new companies. It should +disallow mergers, maintain ownership limits, and otherwise restrain the +forces of concentration. It should use the government's money and muscle +to get new technology—especially fast Internet connections—into the +homes of people who can't afford it at current market prices. (An +analogy that a lot of people in F.C.C. World make is between telecom and +the Middle East: the Clinton people blame the bloodshed on the Bush +people, because they disengaged when they came into office, and the Bush +people blame it on the Clinton people, because they raised too many +expectations and stirred too many passions.) + +But Michael Powell's F.C.C. has not been hyperactive. Powell has been +conducting internal policy reviews and reforming the management of the +F.C.C. and waiting for the federal courts and the Congress to send him +signals. (In mid-September, Powell finally initiated a formal review of +the F.C.C.'s limits on media concentration.) This doesn't mean he has +been inactive; rather, he has been active in a way that further +infuriates his critics—in a manner that smoothly blends the genial and +the provocative, he muses about whether the fundamental premises of +F.C.C. World really make sense, while giving the impression that he's +having the time of his life as chairman. At his first press conference, +when he was asked what he was going to do about the "digital +divide"—that is, economic inequality in access to the Internet—he said, +"You know, I think there is a Mercedes divide. I'd like to have one and +I can't afford one." At the National Cable & Telecommunications +Association convention, in Chicago, Powell, following a troupe of +tumblers to the stage, interrupted his walk to the podium to perform a +somersault. + + +Not long ago, I went to see Powell in his office at the F.C.C. Until +1998, when the commission moved to a new building in Southwest +Washington, near the city's open-air fish market, F.C.C. World was at +the western edge of downtown, where everybody would encounter everybody +else at a few familiar restaurants and bars. Today, the F.C.C. building +looks like the office of a mortgage company in a suburban office park. +Even the chairman's suite, though large, is beige, carpeted, and +fluorescent. Powell is a bulky man who wears gold-rimmed glasses and +walks with a pronounced limp, the result of injuries he suffered in a +jeep accident in Germany, in 1987, when he was an Army officer. Because +of the accident, he left the Army and went to law school, where he +became entranced with conservative ideas about regulation, particularly +the idea that the government, rather than trying to correct the flaws of +the market before the fact—"prophylactically," as he likes to say—should +wait till the flaws manifest themselves and then use antitrust +litigation to fix them. He worked briefly at a corporate law firm, and +then became a protégé of Joel Klein, the head of the antitrust division +of the Clinton Justice Department and the man who led the government's +legal case against Microsoft. (He was recently appointed chancellor of +the New York public-school system.) It testifies to Powell's political +skill that he is probably the only high official in the Bush +Administration who not only served in the Clinton Administration but +also maintains close ties to Bush's nemesis Senator John McCain, of +Arizona. One of the things about Powell that annoy people is his +enduring love of law school—"It's sort of like a law-school study +session over there," one Democratic former commissioner said. As if to +confirm the charge, Powell, when I arrived, introduced me to four law +students, summer interns at the commission, whom he'd invited to sit in. + +I began by asking Powell whether he agreed with the founding assumptions +of the F.C.C. For example, could private companies have apportioned the +airwaves among themselves without the government being involved? + +"I think we'll never know," Powell said. "I don't think it's an +automatically bad idea, the way some people will argue. Land is probably +the best analogue. We don't seize all the land in the United States and +say, 'The government will issue licenses to use land.' If my neighbor +puts a fence one foot onto my property line, there's a whole body of law +about what I can do about that, including whether I can tear it down. If +a wireless company was interfering with another wireless company, it's a +similar proposition. There are scholars who argue—indeed, the famous +Ronald Coase treatise that won the Nobel Prize was about this—that +spectrum policy is lunacy. The market could work this out, in the kinds +of ways that we're accustomed to." + +Talking to Powell was fun. Unlike most high government officials, he +doesn't seem to be invested in appearing dignified or commanding. He +slumps in his chair and fiddles with his tie and riffs. He speaks in +ironic air quotes. He's like your libertarian friend in college who +enjoyed staying up all night asking impertinent rhetorical questions +about aspects of life that everybody else takes for granted but that he +sees as sentimental or illogical. After a while, I asked him whether he +thought his predecessors' excitement about the 1996 Telecommunications +Act had been excessive. + +"I would start with a caveat," Powell said. "Look, I can't fault those +judgments in and of themselves, given the time and what people thought. +They were not the only ones who were hysterical about the opportunities. +But, frankly, I've always been a little bit critical. First of all, +anybody who works with the act knows that it doesn't come anywhere close +to matching the hyperbole that was associated with it, by the President +on down, about the kinds of things it's going to open up. I mean, I +don't know what provisions are the information-superhighway provisions, +or what provisions are so digitally oriented, or some of the things that +were a big part of the theatre of its introduction. When one starts +reading the details, one searches, often in vain, for these provisions. +But, nonetheless, there was a rising dot-com excitement, and an Internet +excitement, and people thought this was historic legislation, and it +certainly was. + +"But. We were sucking helium out of balloons, with the kinds of +expectations that were being bandied around, and this is before the +economy or the market even gets in trouble. It was a dramatically +exaggerated expectation—by the leadership of the commission, by +politicians, by the market itself, by companies themselves. It was a +gold rush, and led to some very detrimental business decisions, ones +that government encouraged by its policies, frankly. Everybody wanted to +see numbers go up on the board." + +Powell began imitating an imagined true believer in the Telecom Act. " +'I want to see ten competitors. Twenty competitors! I want to see +thirty-per-cent market share. Fifty-per-cent market share! I want the +Bells to bleed! Then we'll know we've succeeded.' " Now Powell returned +to being Powell. "I think that expectation was astonishingly +unrealistic, in the short term. They wanted to see it while they're +there. We were starting to get drunk on the juice we were drinking. And +the market was getting drunk on the juice we were drinking. There's no +question, we went too soon too fast. Too many companies took on too much +debt too fast before the market really had a product, or a business +model." + +How could the Telecom Act have been handled better? "We could have +chosen policies that were less hellbent on a single objective, and were +slightly more balanced and put more economic discipline in the system," +Powell said. "Money chased what seemed like government-promised +opportunity. The problem with that is there's a morning after, and we're +in it. And the problem is there is no short fix for this problem. This +debt is going to take years to bring down to a realistic level. In some +ways, for short-term gain, we paid a price in long-term stability." + +Powell went on to say that it might have turned out differently if there +had been a more "reasonable" level of investment. "No, we wouldn't have +every home in America with competitive choice yet—but we don't anyway. I +don't think it's the remonopolization of telephone service. I don't buy +that. The Bells will prosper, but did anybody believe they wouldn't? The +part of the story that didn't materialize was that people thought so +would MCI WorldCom and Sprint." + +Other local phone companies, he added, hadn't materialized as viable +businesses, either, and they never might. "Everybody's always saying, +'The regulators did this and this and this.' But, candidly, the story's +quite the opposite. I think the regulators bent over backward for six +years to give them a chance. Conditions don't get that good except once +every thirty years, and it didn't happen. So, whatever the reason, we're +looking at a WorldCom that's teetering. We're looking at a long-distance +business that has had a rapid decline in its revenue base. A.T. & T. is +breaking itself up. Sprint has struggled." + +Could the F.C.C. have done anything to make the long-distance companies +stronger? "At the F.C.C.? I think I'll just be blunt. My political +answer? Yes, there's all kinds of things we can do at the margin to try +to help. But I can't find thirty billion dollars for WorldCom somewhere. +I can't mitigate the impacts of an accounting scandal and an S.E.C. +investigation. Were I king, it would be wonderful, but I don't have +those kinds of levers. I don't know whether anybody does. At some point, +companies are expected to run themselves in a way that keeps them from +dying." Powell couldn't have made it much clearer that he doesn't think +it's his responsibility to do anything about the telecom crash. He has +demonstrated his sure political touch by making accommodationist +gestures—in August, for example, five months after disbanding the +F.C.C.'s Accounting Safeguards Division, Powell announced that he was +appointing a committee to study accounting standards in the +communications industry. But that shows that Powell is better at riding +out the storm than, say, Harvey Pitt, his counterpart at the Securities +and Exchange Commission, and does not mean that he plans to try to shore +up the telecom industry. + +I asked Powell if it would bother him if, for most people, only one +company provided cable television and only one provided local phone +service. "Yes," he said. "It concerns us that there's one of each of +those things, but let's not diminish the importance of there being one +of each of those things. That still is a nice suite of communications +capabilities, even if they aren't direct analogues of each other." +Anyway, Powell said, before long the phone companies will be able to +provide video service over their lines, and the cable companies will +provide data service over their lines, so there will be more choice. +"So, yeah, we have this anxiety: we have one of everything. The question +is, Does it stay that way?" + +The concentration of ownership and the concentrated control of +information did not appear to trouble Powell, either. He said that +people confuse bigness, which brings many benefits, with concentration, +which distorts markets. "If this were just economics, it's easy. If you +were to say to me, 'Mike, just worry about economic concentration,' we +know how to do that—the econometrics of antitrust. I can tell you when a +market's too concentrated and prices are going to rise. The problem is +other dimensions, like political, ideological, sometimes emotional. Take +the question of, if everybody's controlling what you see, the assumption +there is that somehow there'll be this viewpoint, a monolithic +viewpoint, pushed on you by your media and you won't get diversity. I +think that's a possibility. I don't think it's nearly the possibility +that's ascribed to it sometimes." + +Powell explained, "Sometimes when we see very pointed political or +parochial programming, it gets attacked as unfair. I see some of the +same people who claim they want diversity go crazy when Rush Limbaugh +exists. They love diversity, but somehow we should run Howard Stern off +the planet. If it has a point of view, then it becomes accused of bias, +and then we have policies like"—here his tone went from ironic to +sarcastic—"the fairness doctrine, which seems to me like the antithesis +of what I thought those people cared about. So when somebody is pointed +and opinionated, we do all this stuff in the name of journalistic +fairness and integrity or whatever, to make them balance it out." + + +F.C.C. World abounds in theories about Michael Powell. One is that he +can't make up his mind about how to address the crisis in the industries +he regulates—so he talks (and talks and talks) flamboyantly about the +market, in order to buy himself time. Another is that he's carrying +water for the arbocks and the big cable companies. Another is that he is +planning to run for the Senate from Virginia (or to be appointed +Attorney General in a second Bush term), and doesn't want to do anything +at the F.C.C. that would diminish his chances. Another is that he's +waiting to move until there is more consensus on some course of action, +so that he doesn't wind up going first and getting caught in the +crossfire between the arbocks and the cable companies and the television +networks. (In F.C.C. World, this is known as the Powell Doctrine of +Telecom, after Colin Powell's idea that the United States should never +commit itself militarily without a clear objective, overwhelming force, +and an exit strategy.) And another is that he actually believes what he +says, and thinks the telecommunications crash is natural, healthy, and +irreversible, and more concentration would be just fine. + +"This is why elections matter," Reed Hundt, who isn't happy about what +has become of his Telecom Act, told me. It's true that the F.C.C.—much +more than, say, the war in Afghanistan—is a case in which a Gore +Administration would be acting quite differently from the Bush +Administration. Consumers might have noticed the difference by now, but +there's no question whether communications companies have noticed. The +arbocks are doing better against their internal rivals than they would +have done if Gore had won. Next election, they'll help the party that +helped them. If the Republicans win, policy will tilt further in the +arbocks' favor. If they lose, perhaps the arbocks' rivals—the +long-distance companies and the telecommunications upstarts—with their +friends now in power, will stage a comeback. America's present is not +unrecognizably different from America's past. + + diff --git a/Ch3/datasets/spam/easy_ham/00266.edda19cbe2bb12d6aca8f9550b870824 b/Ch3/datasets/spam/easy_ham/00266.edda19cbe2bb12d6aca8f9550b870824 new file mode 100644 index 000000000..0a827fba3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00266.edda19cbe2bb12d6aca8f9550b870824 @@ -0,0 +1,67 @@ +From fork-admin@xent.com Wed Oct 9 10:55:35 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id A033516F69 + for ; Wed, 9 Oct 2002 10:53:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:53:04 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g991NXK12924 for ; + Wed, 9 Oct 2002 02:23:34 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id CB1FF2940EF; Tue, 8 Oct 2002 18:23:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx2.ucsc.edu [128.114.129.35]) by + xent.com (Postfix) with ESMTP id 858A72940EC for ; + Tue, 8 Oct 2002 18:22:15 -0700 (PDT) +Received: from Tycho (dhcp-55-196.cse.ucsc.edu [128.114.55.196]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g991Mc523727 for + ; Tue, 8 Oct 2002 18:22:38 -0700 (PDT) +From: "Jim Whitehead" +To: "FoRK" +Subject: [NYT] Korea's Real Rage for Virtual Games +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Importance: Normal +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 8 Oct 2002 18:19:49 -0700 + +http://www.nytimes.com/2002/10/09/technology/09KORE.html + +Broadband's killer application — the one activity that dwarfs all others — +is online gaming, which 80 percent of South Koreans under 25 play, according +to one recent study. Critics say the burgeoning industry is creating +millions of zombified addicts who are turning on and tuning into computer +games, and dropping out of school and traditional group activities, becoming +uncommunicative and even violent because of the electronic games they play. + +"Game players don't have normal social relationships anymore," said Kim Hyun +Soo, a 36-year-old psychiatrist who is chairman of the Net Addiction +Treatment Center, one of many groups that have sprung up to cope with +Internet game addiction. "Young people are losing the ability to relate to +others, except through games. People who become addicted are prone to +violence, even when they are not playing. + +- Jim + + diff --git a/Ch3/datasets/spam/easy_ham/00267.332a04bf60ba54e3a303ee253fb977ee b/Ch3/datasets/spam/easy_ham/00267.332a04bf60ba54e3a303ee253fb977ee new file mode 100644 index 000000000..58be8dea2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00267.332a04bf60ba54e3a303ee253fb977ee @@ -0,0 +1,68 @@ +From fork-admin@xent.com Wed Oct 9 10:56:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 8CAA216F19 + for ; Wed, 9 Oct 2002 10:53:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:53:17 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g9959VK20233 for ; + Wed, 9 Oct 2002 06:09:32 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A36DA2940E3; Tue, 8 Oct 2002 22:09:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from frodo.hserus.net (202-77-223-48.outblaze.com + [202.77.223.48]) by xent.com (Postfix) with ESMTP id DAF4029409A for + ; Tue, 8 Oct 2002 22:08:10 -0700 (PDT) +Received: from [202.56.248.94] (helo=rincewind.pobox.com) by + frodo.hserus.net with asmtp (Exim 4.10) id 17z95B-0007kV-00; + Wed, 09 Oct 2002 13:08:33 +0800 +X-PGP-Dsskey: 0x55FAB8D3 +X-PGP-Rsakey: 0xCAA67415 +Message-Id: <5.1.0.14.2.20021009103526.02ec2050@frodo.hserus.net> +X-Nil: +To: "Stephen D. Williams" , + Lorin Rivers +From: Udhay Shankar N +Subject: Re: ActiveBuddy +Cc: "Mr. FoRK" , FoRK List +In-Reply-To: <6E8631AD.30501@lig.net> +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii"; format=flowed +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 09 Oct 2002 10:35:55 +0530 + +At 12:05 PM 10/4/28 -0400, Stephen D. Williams wrote: + +>Date: Wed, 04 Oct 2028 12:05:01 -0400 +> +>I actually thought of this kind of active chat at AOL (in 1996 I think), +>bringing up ads based on what was being discussed and other features. For +>a while, the VP of dev. (now still CTO I think) was really hot on the idea +>and they discussed patenting it. Then they lost interest. Probably a +>good thing. + +[note date: header] + +Can I borrow your time machine, pretty please? + +Udhay + +-- +((Udhay Shankar N)) ((udhay @ pobox.com)) ((www.digeratus.com)) + + diff --git a/Ch3/datasets/spam/easy_ham/00268.ed64201ab977eaad5fd6ad999c2f8255 b/Ch3/datasets/spam/easy_ham/00268.ed64201ab977eaad5fd6ad999c2f8255 new file mode 100644 index 000000000..0419a812c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00268.ed64201ab977eaad5fd6ad999c2f8255 @@ -0,0 +1,95 @@ +From ilug-admin@linux.ie Wed Oct 9 10:53:55 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 521E516F85 + for ; Wed, 9 Oct 2002 10:52:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:29 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98GfSK25050 for + ; Tue, 8 Oct 2002 17:41:28 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 46A21340D5; Tue, 8 Oct 2002 17:42:13 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from home.hostireland.com (home.hostireland.com [64.65.56.3]) by + lugh.tuatha.org (Postfix) with ESMTP id 2D3BB340A2 for ; + Tue, 8 Oct 2002 17:41:08 +0100 (IST) +Received: from pluto.meritsolutions.ie (p218.as1.prp.dublin.eircom.net + [159.134.168.218]) (authenticated) by home.hostireland.com (8.11.6/8.11.6) + with ESMTP id g98Gf1l25092 for ; Tue, 8 Oct 2002 17:41:01 + +0100 +From: Colin Nevin +To: ilug@linux.ie +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.3 (1.0.3-4) +Message-Id: <1034098479.1602.13.camel@pluto> +MIME-Version: 1.0 +Subject: [ILUG] connecting at 1200bps in RH7.3 (help!) +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 08 Oct 2002 17:34:37 +0000 +Date: 08 Oct 2002 17:34:37 +0000 + +Hi All, + +Anyone ever try connecting at 1200bps in Linux? I've got a USR 56K +Faxmodem which is meant to connect to another (same) modem and I have to +connect at this speed due to the (NT) port settings on the remote side, +but the modem handshake always fails at this speed. + +The modem handshake works at slightly higher speeds (4800bps to +~57600bps) but that is no good for tx/rx'ing data to the remote server +as it insists at talking at the speed of treacle/1200bps. + +Note Minicom fails to handshake at 1200bps, but HyperTerm in Windows +worked first time(!?), any ideas? + +Baud 1200 7 data bits Even Parity + +I am doing a ATZ3 to reset the modem then I send this init string: + +AT&F1E1V1Q0X4Y0S32=232&A1&B0&C1&D2&H0&I0&K1&M4&N0&P0&R1&S0&U0&Y1 + +... which is most of the defaults. + +USR said to set S15=128 (disables v.42)) +& set S32=98 (disable v.92 & X2) + +But the S15=128 just makes the handshake lockup instead of just giving +up. + +btw this is a bank's system I am connecting to so reconfiguring their +modems may be difficult. + +Colin. + + +-- +Colin Nevin, +Software Engineer, +Merit Solutions Ltd. (Dublin), +5 Goatstown Cross, +Dublin 14. +------------------------------------------ +Printed using 100% recycled electrons. + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00269.b2b5cff76f0c1d2811d88cdfc81a2b4a b/Ch3/datasets/spam/easy_ham/00269.b2b5cff76f0c1d2811d88cdfc81a2b4a new file mode 100644 index 000000000..8de4f6ba4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00269.b2b5cff76f0c1d2811d88cdfc81a2b4a @@ -0,0 +1,96 @@ +From ilug-admin@linux.ie Wed Oct 9 10:53:57 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id E22D316F1F + for ; Wed, 9 Oct 2002 10:52:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:30 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98HVYK26934 for + ; Tue, 8 Oct 2002 18:31:34 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 0A57C341F2; Tue, 8 Oct 2002 18:32:19 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from area52.nsa.ie (unknown [193.120.253.1]) by lugh.tuatha.org + (Postfix) with ESMTP id D8388341E8 for ; Tue, + 8 Oct 2002 18:31:56 +0100 (IST) +Received: from hackwatch.com (void.nsa.ie [193.120.253.3]) by + area52.nsa.ie (8.12.4/8.12.4) with ESMTP id g98HmuG6023998; Tue, + 8 Oct 2002 18:48:56 +0100 +Message-Id: <3DA31781.19CBEEA6@hackwatch.com> +From: John McCormac +Organization: WhoisIreland.com +X-Mailer: Mozilla 4.78 [en] (Win98; U) +X-Accept-Language: en +MIME-Version: 1.0 +To: Colin Nevin +Cc: ilug +Subject: Re: [ILUG] connecting at 1200bps in RH7.3 (help!) +References: <1034098479.1602.13.camel@pluto> +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 08 Oct 2002 18:36:01 +0100 +Date: Tue, 08 Oct 2002 18:36:01 +0100 + +Colin Nevin wrote: +> +> Hi All, +> The modem handshake works at slightly higher speeds (4800bps to +> ~57600bps) but that is no good for tx/rx'ing data to the remote server +> as it insists at talking at the speed of treacle/1200bps. + +It sounds like the flow control is set to Xon/Xoff rather than hardware. + +> Baud 1200 7 data bits Even Parity + +Unusual - 8 n 1 is more common. + +> +> I am doing a ATZ3 to reset the modem then I send this init string: +> +> AT&F1E1V1Q0X4Y0S32=232&A1&B0&C1&D2&H0&I0&K1&M4&N0&P0&R1&S0&U0&Y1 + +I think that the AT command for hardware flow control is &E4 though this +may vary from modem to modem. + +Regards...zzzzcc +-- +******************************************** +John McCormac * Hack Watch News +zzzzcc@hackwatch.com * 22 Viewmount, +Voice: +353-51-873640 * Waterford, +BBS&Fax: +353-51-850143 * Ireland +http://www.hackwatch.com/~kooltek +******************************************** + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6 + +mQCNAzAYPNsAAAEEAPGTHaNyitUTNAwF8BU6mF5PcbLQXdeuHf3xT6UOL+/Od+z+ +ZOCAx8Ka9LJBjuQYw8hlqvTV5kceLlrP2HPqmk7YPOw1fQWlpTJof+ZMCxEVd1Qz +TRet2vS/kiRQRYvKOaxoJhqIzUr1g3ovBnIdpKeo4KKULz9XKuxCgZsuLKkVAAUX +tCJKb2huIE1jQ29ybWFjIDxqbWNjQGhhY2t3YXRjaC5jb20+tBJqbWNjQGhhY2t3 +YXRjaC5jb20= +=sTfy +-----END PGP PUBLIC KEY BLOCK----- +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00270.d0a83be3891cf0ea26d2af0102e9a875 b/Ch3/datasets/spam/easy_ham/00270.d0a83be3891cf0ea26d2af0102e9a875 new file mode 100644 index 000000000..58c500506 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00270.d0a83be3891cf0ea26d2af0102e9a875 @@ -0,0 +1,75 @@ +From ilug-admin@linux.ie Wed Oct 9 10:53:55 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id D85A816F84 + for ; Wed, 9 Oct 2002 10:52:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:27 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98GUWK24540 for + ; Tue, 8 Oct 2002 17:30:32 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id D0445340D5; Tue, 8 Oct 2002 17:31:15 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from wivenhoe.staff8.ul.ie (wivenhoe.staff8.ul.ie + [136.201.147.134]) by lugh.tuatha.org (Postfix) with ESMTP id DE2F8340A2 + for ; Tue, 8 Oct 2002 17:30:57 +0100 (IST) +Received: (from brendan@localhost) by wivenhoe.staff8.ul.ie + (8.11.6/8.11.6) id g98GUaJ02261; Tue, 8 Oct 2002 17:30:36 +0100 +X-Authentication-Warning: wivenhoe.staff8.ul.ie: brendan set sender to + brendan.halpin@ul.ie using -f +To: zzzz@spamassassin.taint.org (Justin Mason) +Cc: ilug@linux.ie +Subject: Re: [ILUG] cups question +References: <20021008161145.DA84416F16@spamassassin.taint.org> +From: Brendan Halpin +In-Reply-To: <20021008161145.DA84416F16@spamassassin.taint.org> +Message-Id: +User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1 +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 08 Oct 2002 17:30:36 +0100 +Date: 08 Oct 2002 17:30:36 +0100 + +zzzz@spamassassin.taint.org (Justin Mason) writes: + +> /dev/fd/0 is STDIN -- filedescriptor 0. Looks like the PS file wants +> to know its filename, but it's being read from STDIN, that's my +> guess. + +I don't think so: it should be getting a stream of PS from stdin, +but it's not. The printing/spooling system is executing gs but +somehow failing to provide it with input. + +> Try tweaking the scripts to run "gs" with the ps file on +> the command line instead of as "-". + +That might clarify that the later part of the system works, but I +suspect the problem is earlier. + +B +-- +Brendan Halpin, Dept of Government and Society, Limerick University, Ireland +Tel: w +353-61-213147 f +353-61-202569 h +353-61-390476; Room F2-025 x 3147 + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00271.b67b5b37ce874d5ccea3391922f14506 b/Ch3/datasets/spam/easy_ham/00271.b67b5b37ce874d5ccea3391922f14506 new file mode 100644 index 000000000..3f17fab59 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00271.b67b5b37ce874d5ccea3391922f14506 @@ -0,0 +1,454 @@ +From ilug-admin@linux.ie Wed Oct 9 10:54:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 1ECDE16F22 + for ; Wed, 9 Oct 2002 10:52:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:35 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98LpZK03515 for + ; Tue, 8 Oct 2002 22:51:35 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 2F704341D0; Tue, 8 Oct 2002 22:52:19 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from web13904.mail.yahoo.com (web13904.mail.yahoo.com + [216.136.175.67]) by lugh.tuatha.org (Postfix) with SMTP id AE0E03410E for + ; Tue, 8 Oct 2002 22:51:56 +0100 (IST) +Message-Id: <20021008215152.80676.qmail@web13904.mail.yahoo.com> +Received: from [159.134.177.169] by web13904.mail.yahoo.com via HTTP; + Tue, 08 Oct 2002 23:51:52 CEST +From: =?iso-8859-1?q?Paul=20Linehan?= +Subject: Re: [ILUG] Interesting article on free software licences +To: ilug@linux.ie +In-Reply-To: <20021007101909.A16074@wanadoo.fr> +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 23:51:52 +0200 (CEST) +Date: Tue, 8 Oct 2002 23:51:52 +0200 (CEST) + + + +I have translated the article in full - see +end of post (I think that I've done a far +better job than the Google translation - at +least it's readable now - any corrections +appreciated). + +Stuff in {}'s is my (and others) additions +to the debate. + +My apologies if I've paraphrased anybody +incorrectly, I will be glad to retract if +anyone is miffed. + + + +The article makes four main points. + + +1) Absence of critical clauses. + + +In this case, the idea is that the licence +is invalid because it doesn't specify +under what country's law the GPL is governed. + + +2) Specification in English only. + +That for the end user (as opposed to businesses), +the GPL doesn't apply because it's not written +in French. + + +3) Arbitary licence change. + +The point here is that (under French law) the +author can change the terms of the licence +arbitarily. This is because any granting of +rights by an author must be clearly delimited +in terms of how long, where, to whom, dates and +times. In the absence of such limitations, the +original author has the right to change his +software back to closed on a whim. + + +{ + +David Neary makes the point that the copyright +holder automatically retains the right to change +the licence. + +Scott replies it simply requires authorisation from +all *copyright holders* + +That's not my understanding. French law allows a +GPL type licence *_on condition_* that the +specific conditions of the granting of such +rights are clear - if they are not, there is +nothing to stop the original author taking +back "his work". The lawyers see this +(correctly IMHO) as a weakness in the GPL). + +} + + + +4) Hidden defects. + +Roughly, this clause means that the author(s) +is/are liable for any defects if the consumer +is not an IT engineer, so if Linux blows up +and data is lost, then the authors are liable. + + +{ + +Ciaran Johnson says that M$oft and others have +similar clauses - the point here is that they +are *_all_* invalid - just that this one +affects the GPL also. + +Niall O'Broinn makes the point that it is not +a sale, but rather a service/leasing arrangement +and that's why it doesn't come under this point. + +I would suggest that the whole thrust of this +article has been to see software "sales" (even +if no money changes hands) as governed very +much by consumer law (in France anyway). + + +Rick Moen makes the point that it is not +a sale but rather a granting of rights which +are not default. + +See the bit about even the granting of +rights by an author having to be +explicitly specified - under French law. + + +The fact that two IP lawyers in France think that +the GPL is covered as a sale make me feel that +there is a de facto sale and a de facto contract. + +} + + + +5) Roughly. + +There may be other reasons under French +law why the GPL may be invalid. + + + +----- Whole Article. ----------- + + +Freedom(a) is worth more than these +imperfect licences. + + +Specialised lawyers look at the GPL. + + + +Lawyer Cyril Rojinsky (duly appointed to +the court) and the jurist Vincent Grynbaum, both +specialised in the area of intellectual property +examine the "free" licences and in particular the +GPL. They have published their study +in the review "Proprietes intellectuelles +(Intellectual property)[1]" and their +conclusion is grim. + + +Their approach is interesting. The problem for +them is not to know whether freedom is valid under +French law (for them the question is a moot point) +but rather they asked themselves about the form +and the content of the text of free licences, and +in particular the GPL. The problem is not free +programmes, but rather the licence contracts of +free programmes. + + + +Absence of critical clauses. + + + +The authors tell us that first of all, the +reference to "copyright" is not legally +sufficient in the framework of international +contracts (which is the case of licence +contracts for programmes developed and spread +via the Internet). The idea of copyright can +basically include differences from one country +to another. This is why, under international +contracts, it is necessary to specify to which +laws one is referring (French law, American &c.). + +The authors only found three public licences +which were correctly formulated on this point: +QPL, IBM Public Licence and the Mozilla Public +Licence). + + + +Specification in the English language. + + + +Next, the authors remind us that (at least in +France), no clause in a contract may be contrary +to French law [2]. However, it turns out that a +licence such as the GPL is contrary to French law +in several respects. Firstly, it is written in +English and the FSF doesn't officially approve +translations. + +The "Toubon law" obliges this sort +of contract to be written in French, including for +businesses since the notion of "user" applies not +only to consumers, but also to businesses, +professionals &c. + + +Contacted by the editors of LinuxFrench, +lawyer Cyril Rojinsky declared that, as +far as business is concerned, the "Toubon +law" is probably doomed to change since +it is in contradiction of European directives +on the subject, but whatever about that, the +problem is still valid for individuals, and +while waiting for it (French law) to change, +French companies have to deal with it, since +it is the law of the land. + + +A programme under the GPL can suddenly +change licence. + + +Another problem, much more serious, is +that according to French law, the author of +a free programme can, at any time, invoke +the invalidity of the licence for this +software by simply changing the licence. + + +In effect, the law of intellectual +property stipulates that the granting of +rights by the author is subordinate to +the condition that each of these granted +rights be the object of a distinct clause +in the granting act (i.e. the licence) and +that the granting of any such rights be +delimited with respect to its scope and its +grantees, and also with respect to its +location (i.e. where such rights may be +excersised) and duration of any such grants. +[3] This is not the case of the GPL nor of +other free licences. Briefly, this means +that in France, or elsewhere if the author +is French, that which is under the GPL could +revert to proprietary from one day to the next. + + + +The problem of the guarantee "hidden defects". + + +An other very serious flaw is that of the +guarantee. The GPL licences and others show +that the software is delivered "without +guarantee". You are going to immediately +reply that commercical programmes carry the +same clause in their licence contracts, +and this is correct. However, whatever is +written in a licence contract, one cannot +free oneself from the "guarantee from +hidden defects", since it is imposed in the +Civil Code. This concept is poorly understood +by the layman, it protects the buyer +(whoever it may be, individual or business, +since it specifies the Civil Code and not +consumer protection law) against hidden +defects, deliberate or made in good faith by +the seller. + + +For example, if one buys a pair of socks +in a sale, and the shop has a notice +specifying that "Sale items are neither +refunded nor exchanged", and on arriving +home you notice that one of the socks has +a hole in it, several scenarios are possible. + + +You could have checked the socks before +purchase: the flaw is deemed "obvious" and +you can sing for your money. + + +You couldn't check the socks (they were +packaged for example), and in this case, +despite the notice "neither refund nor +exchange", you may invoke "hidden defect" +and have them changed or obtain a refund, +it's up to you. + +Personally, I have already invoked in shops +the "hidden defect" clause and it always +worked well (shopkeepers are always very +cooperative if you quote a couple of words +of the Civil Code). + + +The concept of hidden defect is rather +wide, it is necessary that you hadn't +the possibility of discovering the defect +before buying the product and then +(according to the Civil Code) that you +wouldn't have bought it at that price if +you had known about the +defect. + + +The third case which is much rarer , is +if you are able to show that the vendor had +knowledge of the defect (hidden), but didn't +inform you. In this case, not only does he +have to reimburse the product, but all +expenses incurred by the sale (metro +tickets to go to the shop, the fuse +which blew when you plugged it in &c.) + + +This idea of "hidden defect" applies to + all products, including programmes. This +was made abundantly clear by the +authorities (and the courts) surrounding +Y2K. + +This is particularly inconvenient for +free programmes, since a site which +offers a Linux distro for download is +supposed to provide a guarantee against +hidden flaws. + + +LinuxFrench asked Cyril ROJINSKY if +in the case of a free programme, +one could speak about a "hidden" defect +since the source code was available, +he replied "Actually, concerning the +guarantee, the question of obvious +defect will arise. This analyis will +be different depending on whether the +person who downloads the distribution +is an IT professional or not". + +OpenSource has this advantage over +the proprietary programme: it protects +the distributor against a guarantee of +hidden defect insofar as the buy is an +IT person. But, for distribution to the +public at large, the problem remains +the same. + + + +Roughly Speaking. + + +Lawyer Cyril ROJINSKY said it himself, +this study is far from being exhaustive +and many other areas could be explored. + +During this interview, we asked ourselves, +for example, about the fragility of the +GPL clause which forbids linking source +code under the GPL with proprietary code. + +In effect, the laws of intellectual +property give the right to the user +to modify a programme with the +intention of permitting interoperability +with another programme. If for that, +I need to link with a proprietary library +(communication protocol, device driver) +I may consider as "null and void" this +clause of the GPL. + + +The conclusion of this study is a wake +up call for the community. "Freedom" +merits more than these shoddy licences, +which should be modified before court +cases over them proliferate and put at +risk the undeniable originality of +this effort. + + +--------------------------- + + +[1] Une publication de l'Institut +de recherche en propriété +intellectuelle, No4 Juillet 2002 + +[2] Une telle clause de contrat +qui est opposée à ce que dit la Loi +française est qualifiée en terme +juridique de « clause réputée +non-écrite », c'est-à-dire +qu'on fait comme si cette clause +n'était pas écrite dans le contrat. + +C'est pour cela par exemple que vous +pouvez signer un bail pour un +appartement qui stipule que +les enfants sont interdits dans +l'immeuble, et envisager sans +inquiétude d'avoir quand même +un enfant, en effet le code civil +stipule que le devoir d'un locataire +d'un appartement doit se comporter +en « bon père de famille » + +[3] Article L131-3 + + + + + + + +___________________________________________________________ +Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français ! +Yahoo! Mail : http://fr.mail.yahoo.com +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00272.c319ce83bd9b379fda60a7991da1b9d5 b/Ch3/datasets/spam/easy_ham/00272.c319ce83bd9b379fda60a7991da1b9d5 new file mode 100644 index 000000000..9a9e45092 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00272.c319ce83bd9b379fda60a7991da1b9d5 @@ -0,0 +1,81 @@ +From ilug-admin@linux.ie Wed Oct 9 10:53:59 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 87C3616F21 + for ; Wed, 9 Oct 2002 10:52:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:32 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98J3VK29996 for + ; Tue, 8 Oct 2002 20:03:31 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 86B9F341CF; Tue, 8 Oct 2002 20:04:15 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from linuxmafia.com (linuxmafia.COM [198.144.195.186]) by + lugh.tuatha.org (Postfix) with ESMTP id D5CE23410E for ; + Tue, 8 Oct 2002 20:03:42 +0100 (IST) +Received: from rick by linuxmafia.com with local (Exim 3.36 #1 (Debian)) + id 17yzgl-0001zv-00 for ; Tue, 08 Oct 2002 12:06:39 -0700 +To: "'ILUG'" +Subject: Re: [ILUG] Modem question +Message-Id: <20021008190633.GV11235@linuxmafia.com> +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: +User-Agent: Mutt/1.4i +X-Mas: Bah humbug. +From: Rick Moen +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 12:06:33 -0700 +Date: Tue, 8 Oct 2002 12:06:33 -0700 + +Quoting Breathnach, Proinnsias (Dublin) (breatpro@exchange.ie.ml.com): + +> Is there any reliable way to calculate your connection speed if you don't +> trust what the modem reports? + +Do a wget of a file of known length, in a script that runs "date" before +and after (or equivalent). + +Be aware that speed between you and your upstream link is one thing; +speed through countless congested routers to a faraway location may be +quite another. Remember that hardware-level compression is a factor. +(The file you wget will probably be precompressed.) + +In the area of the slightly more exotic, be aware that different traffic +may have higher priority and thus more available bandwidth at various +points in the transit to/from you -- and that some traffic may go via +different paths coming vs. going. + +Be aware that raw bulk transfer speed may not be the only thing that +matters: Depending on what you're doing, the modem's connection latency +might matter, and this differs widely between modems. (It matters more +for interactive sessions, e.g., ssh remote logins, where each keystroke +is echoed from remote.) + +-- +Cheers, "Send a policeman, and have it arrested." +Rick Moen -- Otto von Bismarck, when asked what he +rick@linuxmafia.com would do if the British Army landed. +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00273.b57629503558401c3945450dc5dfc5eb b/Ch3/datasets/spam/easy_ham/00273.b57629503558401c3945450dc5dfc5eb new file mode 100644 index 000000000..2f93c2037 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00273.b57629503558401c3945450dc5dfc5eb @@ -0,0 +1,72 @@ +From ilug-admin@linux.ie Wed Oct 9 10:54:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id A788616F20 + for ; Wed, 9 Oct 2002 10:52:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:40 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9991aK27453 for + ; Wed, 9 Oct 2002 10:01:36 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id F1B36340D5; Wed, 9 Oct 2002 10:02:15 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from hawk.dcu.ie (mail.dcu.ie [136.206.1.5]) by lugh.tuatha.org + (Postfix) with ESMTP id 4E2B1340A2 for ; Wed, + 9 Oct 2002 10:01:36 +0100 (IST) +Received: from prodigy.redbrick.dcu.ie (136.206.15.10) by hawk.dcu.ie + (6.0.040) id 3D738B08001080FF for ilug@linux.ie; Wed, 9 Oct 2002 10:01:36 + +0100 +Received: by prodigy.redbrick.dcu.ie (Postfix, from userid 7541) id + AC1C5DA4A; Wed, 9 Oct 2002 10:01:34 +0100 (IST) +Received: from localhost (localhost [127.0.0.1]) by + prodigy.redbrick.dcu.ie (Postfix) with ESMTP id A15766E2F6 for + ; Wed, 9 Oct 2002 10:01:34 +0100 (IST) +From: Trevor Johnston +X-X-Sender: trevj@Prodigy +To: ilug@linux.ie +Subject: Re: [ILUG] mini-itx +In-Reply-To: <3DA2DA0E.6080402@rte.ie> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 10:01:34 +0100 (IST) +Date: Wed, 9 Oct 2002 10:01:34 +0100 (IST) + +On Tue, 8 Oct 2002, John Moylan wrote: +> Hmm, speaking of cheap machines etc, has anyone tried this sort of +> thing: http://www.mini-itx.com/projects/humidor64/ ? or more importantly +> has anyone had any positive/negative experiences with the Via mini-itx +> boards/via c3 processors. + +My laptop has a Via C3 processor. I use Debian with a self-compiled +2.4.19 kernel, and have had absolutely no problems with the chip at all +(quite the opposite, in fact). + +I had to compile for "686" in order for 3D acceleration to work (the +kernel has an option specifically for the Via C3), but I assume that was +a kernel problem rather than a hardware problem. + +Trevor Johnston + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00274.ecbd86ce57edcb6a419a92479216e43c b/Ch3/datasets/spam/easy_ham/00274.ecbd86ce57edcb6a419a92479216e43c new file mode 100644 index 000000000..c899dfe9b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00274.ecbd86ce57edcb6a419a92479216e43c @@ -0,0 +1,88 @@ +From ilug-admin@linux.ie Wed Oct 9 10:54:29 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id BFED716F49 + for ; Wed, 9 Oct 2002 10:52:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:38 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98MeVK04957 for + ; Tue, 8 Oct 2002 23:40:31 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 3DBD0341E8; Tue, 8 Oct 2002 23:41:16 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from linuxmafia.com (linuxmafia.COM [198.144.195.186]) by + lugh.tuatha.org (Postfix) with ESMTP id 6435B3410E for ; + Tue, 8 Oct 2002 23:40:48 +0100 (IST) +Received: from rick by linuxmafia.com with local (Exim 3.36 #1 (Debian)) + id 17z34V-0008QK-00 for ; Tue, 08 Oct 2002 15:43:23 -0700 +To: ilug@linux.ie +Subject: Re: [ILUG] Interesting article on free software licences +Message-Id: <20021008224312.GB11235@linuxmafia.com> +References: <20021007101909.A16074@wanadoo.fr> + <20021008215152.80676.qmail@web13904.mail.yahoo.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <20021008215152.80676.qmail@web13904.mail.yahoo.com> +User-Agent: Mutt/1.4i +X-Mas: Bah humbug. +From: Rick Moen +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 15:43:12 -0700 +Date: Tue, 8 Oct 2002 15:43:12 -0700 + +Quoting Paul Linehan (plinehan@yahoo.com): + +> The point here is that (under French law) the author can change the +> terms of the licence arbitarily. This is because any granting of +> rights by an author must be clearly delimited in terms of how long, +> where, to whom, dates and times. + +The GPL and similar licences are explicitly permanent grants of rights +attached to an instance of his work. (The other stuff mentioned +concerns contract law, e.g., the required element of privity, etc.) + +> In the absence of such limitations, the original author has the right +> to change his software back to closed on a whim. + +No, the author has the right to issue _additional_ instances under a +different licence, such as a proprietary ("closed" [sic]) licence. + +> Rick Moen makes the point that it is not a sale but rather a granting +> of rights which are not default. +> +> See the bit about even the granting of rights by an author having to +> be explicitly specified - under French law. + +The analysis, here and elsewhere, concerns contract law. This isn't +contract law. + +This isn't the first time copyright attorneys have stumbled on this +subject. I'm sure it won't be the last. + +-- +Cheers, "The front line of defense against such sophisticated +Rick Moen viruses is a continually evolving computer operating +rick@linuxmafia.com system that attracts the efforts of eager software + developers." -- Bill Gates +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/easy_ham/00275.4602fde18bf961c7bdff1a65e4e0fcbe b/Ch3/datasets/spam/easy_ham/00275.4602fde18bf961c7bdff1a65e4e0fcbe new file mode 100644 index 000000000..eda8f94f3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00275.4602fde18bf961c7bdff1a65e4e0fcbe @@ -0,0 +1,68 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:49:37 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 6614616F49 + for ; Wed, 9 Oct 2002 10:47:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:47:51 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98KFUK32595 for + ; Tue, 8 Oct 2002 21:15:31 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g98Jx6f06103; Tue, 8 Oct 2002 21:59:06 + +0200 +Received: from adsl-63-192-217-110.dsl.snfc21.pacbell.net + (adsl-63-192-217-110.dsl.snfc21.pacbell.net [63.192.217.110]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g98Jvtf01473 for + ; Tue, 8 Oct 2002 21:57:56 +0200 +Received: from eecs.berkeley.edu (localhost [127.0.0.1]) by + adsl-63-192-217-110.dsl.snfc21.pacbell.net (Postfix) with ESMTP id + DE7083BA5D for ; Tue, 8 Oct 2002 12:57:53 -0700 + (PDT) +Message-Id: <3DA338C1.1072D5E7@eecs.berkeley.edu> +From: Ben Liblit +X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.19 i686) +X-Accept-Language: en +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: RedHat 8.0 and his own freetype +References: <20021004155451.52f9ecd5.matthias_haase@bennewitz.com> + <3D9E1F20.3050300@eecs.berkeley.edu> + <20021008175554.7d471cf0.matthias_haase@bennewitz.com> +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 08 Oct 2002 12:57:53 -0700 +Date: Tue, 08 Oct 2002 12:57:53 -0700 + +Matthias Haase wrote: +> The bytecode-interpreter *is* disabled on RH8, defined at line 3 in +> the Specfile of the SRPM. + +Right you are. The SRPM includes a patch to enable it, but then the +specfile defaults to not applying that patch. I saw the former but +missed the later. Egad, what a convoluted maze. + +Sorry for the misinformation! + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00276.5068c9f11be01b50bd179e900cee257e b/Ch3/datasets/spam/easy_ham/00276.5068c9f11be01b50bd179e900cee257e new file mode 100644 index 000000000..e1e384d18 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00276.5068c9f11be01b50bd179e900cee257e @@ -0,0 +1,70 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:49:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 6827316F67 + for ; Wed, 9 Oct 2002 10:47:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:47:55 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98KYnK00702 for + ; Tue, 8 Oct 2002 21:34:49 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g98KO2f21027; Tue, 8 Oct 2002 22:24:02 + +0200 +Received: from drone5.qsi.net.nz (drone5-svc-skyt.qsi.net.nz + [202.89.128.5]) by egwn.net (8.11.6/8.11.6/EGWN) with SMTP id g98KNAf17613 + for ; Tue, 8 Oct 2002 22:23:10 +0200 +Received: (qmail 9026 invoked by uid 0); 8 Oct 2002 20:22:57 -0000 +Received: from unknown (HELO se7en.org) ([202.89.145.8]) (envelope-sender + ) by 0 (qmail-ldap-1.03) with SMTP for + ; 8 Oct 2002 20:22:57 -0000 +Received: from spawn.se7en.org ([10.0.0.3]) by se7en.org with esmtp (Exim + 3.36 #1 (Debian)) id 17zFBJ-0003ZY-00 for ; + Thu, 10 Oct 2002 00:39:13 +1300 +From: Mark Derricutt +To: RPM-List +Subject: KVim 6.1.141 +Message-Id: <4620000.1034176968@spawn.se7en.org> +X-Mailer: Mulberry/2.2.1 (Linux/x86) +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Content-Disposition: inline +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 10 Oct 2002 04:22:48 +1300 +Date: Thu, 10 Oct 2002 04:22:48 +1300 + +Any one out their have any RPMs for the new KVim that was just released +that'd be suitable for RH7.3? + +The website ( http://freehackers.org/kvim/screenshots.html ) mentions some +experimental RPMs for Suse/COnnectiva/Slackware but none for Mandrake... + + -- \m/ -- + ...in 29 days - The Odyssey begins... + www.symphonyx.com + + mark@talios.com - ICQ: 1934853 JID: talios@myjabber.net + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00277.0b91824bfb092e74957ecff204754944 b/Ch3/datasets/spam/easy_ham/00277.0b91824bfb092e74957ecff204754944 new file mode 100644 index 000000000..7a9ac8ded --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00277.0b91824bfb092e74957ecff204754944 @@ -0,0 +1,112 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:49:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 8CACC16F6A + for ; Wed, 9 Oct 2002 10:47:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:47:59 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98KlmK01186 for + ; Tue, 8 Oct 2002 21:47:49 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g98KO8f21454; Tue, 8 Oct 2002 22:24:08 + +0200 +Received: from snickers.hotpop.com (snickers.hotpop.com [204.57.55.49]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g98KNcf17971 for + ; Tue, 8 Oct 2002 22:23:38 +0200 +Received: from punkass.com (kubrick.hotpop.com [204.57.55.16]) by + snickers.hotpop.com (Postfix) with SMTP id B145E73E78 for + ; Tue, 8 Oct 2002 20:23:25 +0000 (UTC) +Received: from punkass.com (unknown [80.178.1.203]) by smtp-1.hotpop.com + (Postfix) with ESMTP id DE5182F814A for ; + Tue, 8 Oct 2002 20:22:44 +0000 (UTC) +Message-Id: <3DA33EFE.4090109@punkass.com> +From: Roi Dayan +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830 +X-Accept-Language: en-us, en, he +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: mplayer not working for me +References: <200210071433.g97EXKo02265@astraeus.hpcf.upr.edu> + <3DA288E8.4060006@punkass.com> + <20021008094334.57b0c988.matthias@rpmforge.net> + <3DA2E63D.8090104@punkass.com> + <20021008162406.0aaaa275.matthias@rpmforge.net> + <20021008190840.38aeca19.papier@tuxfan.net> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Hotpop: ----------------------------------------------- Sent By + HotPOP.com FREE Email Get your FREE POP email at www.HotPOP.com + ----------------------------------------------- +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 08 Oct 2002 22:24:30 +0200 +Date: Tue, 08 Oct 2002 22:24:30 +0200 + +Laurent Papier wrote: + +>On Tue, 8 Oct 2002 16:24:06 +0200 +>Matthias Saou wrote: +> +> +> +>>Once upon a time, Roi wrote : +>> +>> +>> +>>>mplayer works with dga (if i am root) and works with x11 +>>>and always worked with sdl (but not now with redhat 8) +>>>now it gives black screen window and play the music of the movie. +>>> +>>> +>>Strange, because as I said in an earlier post, it works for me. Maybe +>>you're missing the SDL_image or something? :-/ +>> +>> +> +>It also works nicely for me. +> +>Laurent +> +> + +[roi@roi roi]$ rpm -qa | grep -i sdl +SDL_image-devel-1.2.2-3 +xmame-SDL-0.60.1-fr2 +SDL_mixer-1.2.4-5 +SDL-1.2.4-5 +SDL-devel-1.2.4-5 +SDL_mixer-devel-1.2.4-5 +SDL_net-1.2.4-3 +SDL_net-devel-1.2.4-3 +SDL_image-1.2.2-3 + +Seems I got all packages I need. +It worked on redhat 7.3 I did upgrade not reinstall so packages +shouldn't make a problem. + +Roi + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00278.143effa95043688280ced372741d3862 b/Ch3/datasets/spam/easy_ham/00278.143effa95043688280ced372741d3862 new file mode 100644 index 000000000..655ae249e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00278.143effa95043688280ced372741d3862 @@ -0,0 +1,83 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:49:49 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id B62FF16F6B + for ; Wed, 9 Oct 2002 10:48:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:48:01 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98KtcK01561 for + ; Tue, 8 Oct 2002 21:55:38 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g98Kh1f08923; Tue, 8 Oct 2002 22:43:01 + +0200 +Received: from fep07-app.kolumbus.fi (fep07-0.kolumbus.fi [193.229.0.51]) + by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g98KgRf04205 for + ; Tue, 8 Oct 2002 22:42:27 +0200 +Received: from azrael.blades.cxm ([62.248.234.77]) by + fep07-app.kolumbus.fi with ESMTP id + <20021008204224.RXYD8133.fep07-app.kolumbus.fi@azrael.blades.cxm> for + ; Tue, 8 Oct 2002 23:42:24 +0300 +Received: (from blades@localhost) by azrael.blades.cxm (SGI-8.9.3/8.9.3) + id XAA27178 for rpm-list@freshrpms.net; Tue, 8 Oct 2002 23:42:14 +0300 + (EEST) +X-Authentication-Warning: azrael.blades.cxm: blades set sender to + harri.haataja@cs.helsinki.fi using -f +From: Harri Haataja +To: rpm-zzzlist@freshrpms.net +Subject: Re: Zoot apt/openssh & new DVD playing doc +Message-Id: <20021008234209.B26549@azrael.smilehouse.com> +Mail-Followup-To: rpm-zzzlist@freshrpms.net +References: <20021008163613.0c1dcc72.matthias@rpmforge.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <20021008163613.0c1dcc72.matthias@rpmforge.net>; + from matthias@rpmforge.net on Tue, Oct 08, 2002 at 04:36:13PM +0200 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 23:42:14 +0300 +Date: Tue, 8 Oct 2002 23:42:14 +0300 + +On Tue, Oct 08, 2002 at 04:36:13PM +0200, Matthias Saou wrote: +> Two new things today : +> +> 1) I've had to install a Red Hat Linux 6.2 server because of an old +> proprietary IVR software that doesn't work on newer releases :-( So +> I've recompiled both the latest apt and openssh packages for it, and +> they are now available with a complete "os, updates & freshrpms" apt +> repository at apt.freshrpms.net, for those who might be interested. + +Oh, neat. + +I have similiar thing in my hands, though it might be migratable if I +had the time to try. I've been using another 6.x repository though. +http://apt-rpm.tuxfamily.org/apt + +Anyone tried (dist-)upgrade from 6.x to 7? Theoretically it should drop +in some -compat's (notably libc) and upgrade the rest and after a reboot +and maybe a new kernel (and grub, but I have long before put those to +v6's :) run just fine. Haven't had a spare machine to try it on myself, +though. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00279.db581b9c25766016fa42b54f426e1838 b/Ch3/datasets/spam/easy_ham/00279.db581b9c25766016fa42b54f426e1838 new file mode 100644 index 000000000..f89a3287e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00279.db581b9c25766016fa42b54f426e1838 @@ -0,0 +1,71 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:49:42 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 5E65C16F56 + for ; Wed, 9 Oct 2002 10:47:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:47:53 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98KFbK32601 for + ; Tue, 8 Oct 2002 21:15:37 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g98K72f04022; Tue, 8 Oct 2002 22:07:02 + +0200 +Received: from adsl-63-192-217-110.dsl.snfc21.pacbell.net + (adsl-63-192-217-110.dsl.snfc21.pacbell.net [63.192.217.110]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g98K5xf29420 for + ; Tue, 8 Oct 2002 22:06:00 +0200 +Received: from eecs.berkeley.edu (localhost [127.0.0.1]) by + adsl-63-192-217-110.dsl.snfc21.pacbell.net (Postfix) with ESMTP id + A34CB3BA5D for ; Tue, 8 Oct 2002 13:05:53 -0700 + (PDT) +Message-Id: <3DA33AA1.1A724EF5@eecs.berkeley.edu> +From: Ben Liblit +X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.19 i686) +X-Accept-Language: en +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: RedHat 8.0 and his own freetype +References: <20021004155451.52f9ecd5.matthias_haase@bennewitz.com> + <3D9E1F20.3050300@eecs.berkeley.edu> + <20021008202424.67c6e32c.matthias_haase@bennewitz.com> +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 08 Oct 2002 13:05:53 -0700 +Date: Tue, 08 Oct 2002 13:05:53 -0700 + +Matthias Haase wrote: +> The recompile of the SPRM failed for me with: +> #---- +> RPM build errors: +> File not found by glob: +> /var/tmp/freetype-2.1.2-root/usr/lib/libttf.so.* +> File not found: /var/tmp/freetype-2.1.2-root/usr/lib/libttf.so + +Weird. I had no problems at all rebuilding from the SRPM with specfile +modified to enable the bytecode interpreter. The "check-files" test +warns that "/usr/share/aclocal/freetype2.m4" was not included in any +package, but other then that, it's all perfectly clean. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00280.c853f6dc1379a418f0a48e7ec7009744 b/Ch3/datasets/spam/easy_ham/00280.c853f6dc1379a418f0a48e7ec7009744 new file mode 100644 index 000000000..c8b57fb98 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00280.c853f6dc1379a418f0a48e7ec7009744 @@ -0,0 +1,135 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:49:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id E703F16F6C + for ; Wed, 9 Oct 2002 10:48:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:48:03 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98MF6K04249 for + ; Tue, 8 Oct 2002 23:15:06 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g98M5Df17411; Wed, 9 Oct 2002 00:05:13 + +0200 +Received: from mailout11.sul.t-online.com (mailout11.sul.t-online.com + [194.25.134.85]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g98M46f16709 for ; Wed, 9 Oct 2002 00:04:06 +0200 +Received: from fwd08.sul.t-online.de by mailout11.sul.t-online.com with + smtp id 17z2ST-0003jb-03; Wed, 09 Oct 2002 00:04:05 +0200 +Received: from puariko.homeip.net (520039812576-0001@[217.231.233.201]) by + fmrl08.sul.t-online.com with esmtp id 17z2SO-0ymuK8C; Wed, 9 Oct 2002 + 00:04:00 +0200 +Received: (from thimm@localhost) by bonzo.nirvana (8.12.5/8.12.5/Submit) + id g98M3scx019124; Wed, 9 Oct 2002 00:03:54 +0200 +From: Axel Thimm +To: rpm-zzzlist@freshrpms.net +Subject: Re: Nessus? +Message-Id: <20021008220353.GA17382@bonzo.nirvana> +References: <20021008114911.GB37924@nessus.org> + <1034013325.8419.88.camel@bobcat.ods.org> + <20021007200642.27614e1b.matthias@rpmforge.net> + <20021007230521.0f1727aa.matthias@rpmforge.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <20021008114911.GB37924@nessus.org> + <20021007230521.0f1727aa.matthias@rpmforge.net> +User-Agent: Mutt/1.4i +X-Sender: 520039812576-0001@t-dialin.net +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 00:03:53 +0200 +Date: Wed, 9 Oct 2002 00:03:53 +0200 + +On Mon, Oct 07, 2002 at 11:05:21PM +0200, Matthias Saou wrote: +> I've put up a new Red Hat Linux 8.0 build of nessus here : +> http://ftp.freshrpms.net/pub/freshrpms/testing/nessus/ +> +> It's 100% untested, although the build should be ok. The new menu was +> added, but some configuration files may be better with new or different +> defaults. +> +> Feedback is very welcome! + +It works very nice, would you consider upgrading it to 1.2.6 released only a +few hours after your build? + +Thanks! + +On Tue, Oct 08, 2002 at 01:49:11PM +0200, Renaud Deraison wrote: +> I'm pleased to announce the availability of Nessus 1.2.6, which should +> be one of the last versions of Nessus 1.2.x (hopefully), as I will soon +> open a new unstable tree and start to break things again :) +> +> What is new in Nessus 1.2.6, in comparison to 1.2.5 : +> +> * changes by Michael Slifcak (Michael.Slifcak at guardent.com) +> + Added Bugtraq cross reference in the plugins +> + Added support for BID in nessusd (this has yet to be done on +> the client side) +> +> * changes by Axel Nennker (Axel.Nennker at t-systems.com) +> + fixed the xml and html outputs +> + fixed array issues in a couple of plugins +> +> * changes by Michel Arboi (arboi at bigfoot.com) +> + find_service now detects services protected by TCP wrappers +> or ACL +> + find_service detects gnuserv +> + ptyexecvp() replaced by nessus_popen() (*) +> +> * changes by Renaud Deraison (deraison at cvs.nessus.org) +> + Fixed a bug which may make nasl interpret backquoted strings +> (\n and \r) received from the network (problem noted by Pavel +> Kankovsky) +> + nmap_wrapper.nes calls _exit() instead of exit() (*) +> + Solved the lack of bpf's on Free/Open/NetBSD and MacOSX by +> sharing _one_ among all the Nessus processes. As a result, +> Nessus's ping is much more effective on these platforms +> + bugfix in plug_set_key() which would eventually make some +> scripts take too long when writing in the KB +> + Plugins of family ACT_SETTINGS are run *after* plugins of +> family ACT_SCANNERS +> + replaced the implementation of md5 which was used when +> OpenSSL is disabled by the one from RSA (the old one would +> not work on a big-endian host) +> + Fixed plugins build issues on MacOS X +> + The nessus client compiles and links against GTK+-2.0. Of +> course, it will be horrible and unstable, as the GTK team +> does not care about backward compatibility +> +> (*) These two modifications solve the problems of nmap hanging under FreeBSD +> +> +> +> Special thanks go to Michael Slifcak, whose work on Nessus during the +> last months have been truly appreciated even if they have not always +> been as underlined as they should have been. Michael, thanks again ! +> +> +> AVAILABILITY: +> +> Nessus 1.2.6 is available at http://www.nessus.org/posix.html +-- +Axel.Thimm@physik.fu-berlin.de + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00281.a143a6b20ae0f54335a78d477b3d82fe b/Ch3/datasets/spam/easy_ham/00281.a143a6b20ae0f54335a78d477b3d82fe new file mode 100644 index 000000000..7e34c41e4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00281.a143a6b20ae0f54335a78d477b3d82fe @@ -0,0 +1,78 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:50:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 8A47F16F18 + for ; Wed, 9 Oct 2002 10:48:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:48:36 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98MLVK04458 for + ; Tue, 8 Oct 2002 23:21:31 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g98MF3f29297; Wed, 9 Oct 2002 00:15:03 + +0200 +Received: from tgpsolutions.com (dsl-gte-15882-1.linkline.com + [64.30.214.144]) by egwn.net (8.11.6/8.11.6/EGWN) with SMTP id + g98MEDf26738 for ; Wed, 9 Oct 2002 00:14:13 +0200 +Received: (qmail 32392 invoked for bounce); 8 Oct 2002 22:13:06 -0000 +Received: from unknown (HELO damocles.turtle-rock) (68.5.247.81) by + dsl-gte-15882-1.linkline.com with SMTP; 8 Oct 2002 22:13:06 -0000 +Subject: xine cannot play DVDs - "liba52: a52_block error" +From: Jon +To: rpm-zzzlist@freshrpms.net +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1034115445.10490.4.camel@damocles> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 08 Oct 2002 15:17:25 -0700 +Date: 08 Oct 2002 15:17:25 -0700 + +Since libdvdcss-1.2.0, I have been unable to play DVDs using ogle, xine, +vlc, or mplayer. They all show a scrambled picture with (VERY) choppy +audio. When I run xine I see tons of these in the console: + +liba52: a52_block error +liba52: a52_block error +liba52: a52_block error +liba52: a52_block error +audio_out: inserting 5859 0-frames to fill a gap of 10989 pts +metronom: audio jump +liba52: a52_block error + +Has anyone seen this before and know how to fix it? Or should I file a +bug report? + +Thanks for your help. + +- Jon + +-- +jon@tgpsolutions.com + +Administrator, tgpsolutions +http://www.tgpsolutions.com + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00282.865809c7b627e9c6f0d5b32b5a80b02c b/Ch3/datasets/spam/easy_ham/00282.865809c7b627e9c6f0d5b32b5a80b02c new file mode 100644 index 000000000..73a703848 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00282.865809c7b627e9c6f0d5b32b5a80b02c @@ -0,0 +1,112 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:51:21 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id A2A4F16F22 + for ; Wed, 9 Oct 2002 10:50:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:50:06 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g990AhK08455 for + ; Wed, 9 Oct 2002 01:10:43 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g99032f32058; Wed, 9 Oct 2002 02:03:02 + +0200 +Received: from canarsie.horizonlive.com (slim-eth0.horizonlive.net + [208.185.78.2]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g9901of17012 for ; Wed, 9 Oct 2002 02:01:51 +0200 +Received: from canarsie.horizonlive.com (localhost.localdomain + [127.0.0.1]) by canarsie.horizonlive.com (8.12.5/8.12.5) with ESMTP id + g9901n8f016950 for ; Tue, 8 Oct 2002 20:01:49 + -0400 +Received: (from stevek@localhost) by canarsie.horizonlive.com + (8.12.5/8.12.5/Submit) id g9901nwO016948 for rpm-list@freshrpms.net; + Tue, 8 Oct 2002 20:01:49 -0400 +X-Authentication-Warning: canarsie.horizonlive.com: stevek set sender to + stevek@horizonlive.com using -f +From: Steve Kann +To: rpm-zzzlist@freshrpms.net +Subject: Ack, apt-get still failing for me, stumped. [RH8] +Message-Id: <20021008200145.A16895@canarsie.horizonlive.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.3.21i +X-Blank-Header-Line: (this header intentionally left blank) +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 20:01:49 -0400 +Date: Tue, 8 Oct 2002 20:01:49 -0400 + + +I posted about this last week, and I'm still stumped. apt-get is just +not working for me, and I can't figure out what the problem is. + +I've tried removing the apt rpms, making sure to remove any traces left +behind (/etc/apt /var/state/apt /var/cache/apt), and still, I get +"couldn't find package xmms-mp3" when running "apt-get install xmms-mp3". + +Any clues? Here's a log of a fresh try: + +root@canarsie:/tmp # rpm -e apt apt-devel +root@canarsie:/tmp # rm -rf /etc/apt /var/cache/apt /var/state/apt +root@canarsie:/tmp # rpm -ivh apt-0.5.4cnc7-fr1.i386.rpm apt-devel-0.5.4cnc7-fr1.i386.rpm +warning: apt-0.5.4cnc7-fr1.i386.rpm: V3 DSA signature: NOKEY, key ID +e42d547b +Preparing... ########################################### [100%] + 1:apt ########################################### [ 50%] + 2:apt-devel ########################################### [100%] +root@canarsie:/tmp # apt-get update +Ign http://apt.freshrpms.net redhat/8.0/en/i386 release +Get:1 http://apt.freshrpms.net redhat/8.0/en/i386/os pkglist [1276kB] +Get:2 http://apt.freshrpms.net redhat/8.0/en/i386/os release [108B] +Get:3 http://apt.freshrpms.net redhat/8.0/en/i386/updates pkglist [14B] +Get:4 http://apt.freshrpms.net redhat/8.0/en/i386/updates release [113B] +Get:5 http://apt.freshrpms.net redhat/8.0/en/i386/freshrpms pkglist +[57.1kB] +Get:6 http://apt.freshrpms.net redhat/8.0/en/i386/freshrpms release +[125B] +Get:7 http://apt.freshrpms.net redhat/8.0/en/i386/os srclist [152kB] +Get:8 http://apt.freshrpms.net redhat/8.0/en/i386/updates srclist [14B] +Get:9 http://apt.freshrpms.net redhat/8.0/en/i386/freshrpms srclist +[14.4kB] +Fetched 1500kB in 11s (125kB/s) +Reading Package Lists... Done +root@canarsie:/tmp # apt-get install xmms-mp3 +Reading Package Lists... Done +Building Dependency Tree... Done +E: Couldn't find package xmms-mp3 +root@canarsie:/tmp # apt-cache search xmms +root@canarsie:/tmp # + + +Beats me.. + +-SteveK + + + +-- + Steve Kann - Chief Engineer - 520 8th Ave #2300 NY 10018 - (212) 533-1775 + HorizonLive.com - collaborate . interact . learn + "The box said 'Requires Windows 95, NT, or better,' so I installed Linux." + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00283.3049b55cf228fd4add06e7b701f71878 b/Ch3/datasets/spam/easy_ham/00283.3049b55cf228fd4add06e7b701f71878 new file mode 100644 index 000000000..a951a56d3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00283.3049b55cf228fd4add06e7b701f71878 @@ -0,0 +1,101 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:51:41 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 7B97316F03 + for ; Wed, 9 Oct 2002 10:51:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:51:09 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g993QaK17008 for + ; Wed, 9 Oct 2002 04:26:36 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g993I2f30971; Wed, 9 Oct 2002 05:18:02 + +0200 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [66.187.233.31]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g993HEf22898 for + ; Wed, 9 Oct 2002 05:17:14 +0200 +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id + g992vTX03844 for ; Tue, 8 Oct 2002 22:57:29 -0400 +Received: from pobox.corp.spamassassin.taint.org (pobox.corp.spamassassin.taint.org + [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id + g993HAf02250 for ; Tue, 8 Oct 2002 23:17:10 -0400 +Received: from ckk.rdu.spamassassin.taint.org (ckk.rdu.spamassassin.taint.org [172.16.57.72]) by + pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g993H9a05656 for + ; Tue, 8 Oct 2002 23:17:09 -0400 +Subject: Re: RH 8 no DMA for DVD drive +From: Chris Kloiber +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20021007192851.11d250b8.matthias@rpmforge.net> +References: <1033953429.13890.4.camel@AMD1800> + <1033954359.28832.4.camel@athlon.ckloiber.com> + <1033964717.1263.8.camel@AMD1800> + <20021007085643.5b9bb88c.matthias@rpmforge.net> + <1034007312.2296.8.camel@bobcat.ods.org> + <20021007183629.40ab9860.matthias@rpmforge.net> + <1034011232.8419.65.camel@bobcat.ods.org> + <20021007192851.11d250b8.matthias@rpmforge.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1034133437.26329.75.camel@ckk.rdu.spamassassin.taint.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 08 Oct 2002 23:17:17 -0400 +Date: 08 Oct 2002 23:17:17 -0400 + +On Mon, 2002-10-07 at 13:28, Matthias Saou wrote: + +> I've never heard of any CD-ROM or DVD-ROM drive having problems with DMA... +> although there probably is since Red Hat decided to default disabling it a +> few releases back :-/ + +Heh. I get to see bad CDROM problems all the time. Mostly when vendors +buy crap cables to try to save $0.02/each, but there are chipsets and +drives with known DMA issues as well. + +> Normally, even if you try to enable DMA and your device doesn't support it, +> it simply don't be able to make the change, and that's it. The problem IIRC +> is with crappy hardware that is supposed to support DMA but doesn't work as +> expected when it's enabled... maybe Chris could confirm this? ;-) + +Usually if you enable DMA on a CDROM that can't handle it gracefully you +won't be able to read data off it relably, and that's about it. No +end_of_the_world problems, and easily fixed. + +> I guess I'll settle for the /dev/dvd link change as described and putting +> the DMA tip in the %description :-) + +My biggest beef with automatically setting /dev/dvd is that I always +seem to have a CD-Burner and a DVD drive (or DVD burner) in the same +box, and I usually have the DVD as the second drive /dev/cdrom1 in +"kudzu-speak". I agree that the %description is the best place for the +tip. Unless someone can come up with a way to probe CD/DVD drives to +divulge their largest supported media size without loading ide-scsi or +having that media currently in the drive. + +-- +Chris Kloiber + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00284.74169e544362fc645322f98d1de72128 b/Ch3/datasets/spam/easy_ham/00284.74169e544362fc645322f98d1de72128 new file mode 100644 index 000000000..c153674bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00284.74169e544362fc645322f98d1de72128 @@ -0,0 +1,86 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:51:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id D37CE16F16 + for ; Wed, 9 Oct 2002 10:51:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:51:13 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g993VxK17266 for + ; Wed, 9 Oct 2002 04:32:00 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g993O1f25212; Wed, 9 Oct 2002 05:24:01 + +0200 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [66.187.233.31]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g993NDf21608 for + ; Wed, 9 Oct 2002 05:23:13 +0200 +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id + g9933UX05426 for ; Tue, 8 Oct 2002 23:03:31 -0400 +Received: from pobox.corp.spamassassin.taint.org (pobox.corp.spamassassin.taint.org + [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id + g993NBf03670 for ; Tue, 8 Oct 2002 23:23:11 -0400 +Received: from ckk.rdu.spamassassin.taint.org (ckk.rdu.spamassassin.taint.org [172.16.57.72]) by + pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g993NBa05834 for + ; Tue, 8 Oct 2002 23:23:11 -0400 +Subject: Re: RH 8 no DMA for DVD drive +From: Chris Kloiber +To: rpm-zzzlist@freshrpms.net +In-Reply-To: +References: +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1034133799.26329.80.camel@ckk.rdu.spamassassin.taint.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 08 Oct 2002 23:23:19 -0400 +Date: 08 Oct 2002 23:23:19 -0400 + +On Tue, 2002-10-08 at 04:48, Panu Matilainen wrote: +> On Mon, 7 Oct 2002, Jesse Keating wrote: +> +> > On Mon, 7 Oct 2002 19:28:51 +0200 +> > Matthias Saou wrote: +> > +> > # I've never heard of any CD-ROM or DVD-ROM drive having problems with +> > # DMA... although there probably is since Red Hat decided to default +> > # disabling it a few releases back :-/ +> > +> > When I worked as a PC repair tech for a Computer store chain, I did +> > run across quite a few DVD drives that would lock up if DMA was +> > enabled. It's more of a chipset/drive problem than a Drive by itself. +> +> And my IBM Intellistation would lock up instantly .. now this is actually +> quite funny .. if DMA was enabled for the CD-ROM *and* you tried to access +> a CD with Joliet extensions. Otherwise it worked just fine with DMA +> enabled :) + +Odd. Did I certify that one? What's the 7-digit IBM model number, and +which version of Red Hat were you running? + +-- +Chris Kloiber + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00285.c422b202e0487f766ba13baa7b755bfd b/Ch3/datasets/spam/easy_ham/00285.c422b202e0487f766ba13baa7b755bfd new file mode 100644 index 000000000..8a29eee52 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00285.c422b202e0487f766ba13baa7b755bfd @@ -0,0 +1,78 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:51:45 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 680ED16F17 + for ; Wed, 9 Oct 2002 10:51:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:51:15 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g993a8K17381 for + ; Wed, 9 Oct 2002 04:36:08 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g993S1f10437; Wed, 9 Oct 2002 05:28:01 + +0200 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [66.187.233.31]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g993R3f32233 for + ; Wed, 9 Oct 2002 05:27:03 +0200 +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id + g9937LX06956 for ; Tue, 8 Oct 2002 23:07:21 -0400 +Received: from pobox.corp.spamassassin.taint.org (pobox.corp.spamassassin.taint.org + [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id + g993R2f05090 for ; Tue, 8 Oct 2002 23:27:02 -0400 +Received: from ckk.rdu.spamassassin.taint.org (ckk.rdu.spamassassin.taint.org [172.16.57.72]) by + pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g993R2a06030 for + ; Tue, 8 Oct 2002 23:27:02 -0400 +Subject: Re: Zoot apt/openssh & new DVD playing doc +From: Chris Kloiber +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20021008163613.0c1dcc72.matthias@rpmforge.net> +References: <20021008163613.0c1dcc72.matthias@rpmforge.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1034134030.26329.85.camel@ckk.rdu.spamassassin.taint.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 08 Oct 2002 23:27:10 -0400 +Date: 08 Oct 2002 23:27:10 -0400 + +On Tue, 2002-10-08 at 10:36, Matthias Saou wrote: +> Hi there, +> +> Two new things today : +> +> 1) I've had to install a Red Hat Linux 6.2 server because of an old +> proprietary IVR software that doesn't work on newer releases :-( So I've +> recompiled both the latest apt and openssh packages for it, and they are +> now available with a complete "os, updates & freshrpms" apt repository at +> apt.freshrpms.net, for those who might be interested. + +Gack. Did you try 7.3 with the compat-glibc first? Or does it require an +antique kernel? + +-- +Chris Kloiber + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00286.74f122eeb4cd901867d74f5676c85809 b/Ch3/datasets/spam/easy_ham/00286.74f122eeb4cd901867d74f5676c85809 new file mode 100644 index 000000000..5ac586f5c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00286.74f122eeb4cd901867d74f5676c85809 @@ -0,0 +1,83 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:51:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 8078D16F1C + for ; Wed, 9 Oct 2002 10:51:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:51:23 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9964ZK21903 for + ; Wed, 9 Oct 2002 07:04:35 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g99622f12905; Wed, 9 Oct 2002 08:02:02 + +0200 +Received: from bennew01.localdomain (pD900DDF4.dip.t-dialin.net + [217.0.221.244]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g9960vf06792 for ; Wed, 9 Oct 2002 08:00:57 +0200 +Received: from bennew01.localdomain (bennew01.localdomain [192.168.3.1]) + by bennew01.localdomain (8.12.5/linuxconf) with SMTP id g9960n3S018401 for + ; Wed, 9 Oct 2002 08:00:50 +0200 +From: Matthias Haase +To: rpm-zzzlist@freshrpms.net +Subject: Re: RedHat 8.0 and his own freetype +Message-Id: <20021009080049.5620bea1.matthias_haase@bennewitz.com> +In-Reply-To: <3DA33AA1.1A724EF5@eecs.berkeley.edu> +References: <20021004155451.52f9ecd5.matthias_haase@bennewitz.com> + <3D9E1F20.3050300@eecs.berkeley.edu> + <20021008202424.67c6e32c.matthias_haase@bennewitz.com> + <3DA33AA1.1A724EF5@eecs.berkeley.edu> +X-Operating-System: customized linux smp kernel 2.4* on i686 +X-Mailer: Sylpheed +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 08:00:49 +0200 +Date: Wed, 9 Oct 2002 08:00:49 +0200 + +On Tue, 08 Oct 2002 13:05:53 -0700 +Ben Liblit wrote: + +> > RPM build errors: +> > File not found by glob: +> > /var/tmp/freetype-2.1.2-root/usr/lib/libttf.so.* +> > File not found: /var/tmp/freetype-2.1.2-root/usr/lib/libttf.so +> +> Weird. I had no problems at all rebuilding from the SRPM with specfile +> modified to enable the bytecode interpreter. The "check-files" test +> warns that "/usr/share/aclocal/freetype2.m4" was not included in any +> package, but other then that, it's all perfectly clean. +Hi, Ben, + +it seems, the RH freetype package should be repacked, +see for this +https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=74415 + +Please, can you atach and send your sucessfully rebuild of the RH freetype +rpm with the bytecode enabled to me? + +-- + Regards from Germany + Matthias + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00287.175dfcaba6a69ffe40222e3937308e2f b/Ch3/datasets/spam/easy_ham/00287.175dfcaba6a69ffe40222e3937308e2f new file mode 100644 index 000000000..a56e40a88 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00287.175dfcaba6a69ffe40222e3937308e2f @@ -0,0 +1,71 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:52:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id DAD2D16F21 + for ; Wed, 9 Oct 2002 10:51:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:51:29 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g996ujK23217 for + ; Wed, 9 Oct 2002 07:56:45 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g996h2f09269; Wed, 9 Oct 2002 08:43:02 + +0200 +Received: from adsl-63-192-217-110.dsl.snfc21.pacbell.net + (adsl-63-192-217-110.dsl.snfc21.pacbell.net [63.192.217.110]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g996fmf24650 for + ; Wed, 9 Oct 2002 08:41:48 +0200 +Received: from eecs.berkeley.edu (localhost [127.0.0.1]) by + adsl-63-192-217-110.dsl.snfc21.pacbell.net (Postfix) with ESMTP id + 814973B72C for ; Tue, 8 Oct 2002 23:41:46 -0700 + (PDT) +Message-Id: <3DA3CFAA.9EFC7FB7@eecs.berkeley.edu> +From: Ben Liblit +X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.19 i686) +X-Accept-Language: en +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: RedHat 8.0 and his own freetype +References: <20021004155451.52f9ecd5.matthias_haase@bennewitz.com> + <3D9E1F20.3050300@eecs.berkeley.edu> + <20021008202424.67c6e32c.matthias_haase@bennewitz.com> + <3DA3C96B.7050007@eecs.berkeley.edu> +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 08 Oct 2002 23:41:46 -0700 +Date: Tue, 08 Oct 2002 23:41:46 -0700 + +I wrote: +> [The bytecode interpreter] may improve non-antialiased rendering, but +> only at the expense of making a mess of antialiased rendering. + +Then again, perhaps the particular font I'm using just has bad +bytecodes. That font is "QuickType II", grabbed off my Windows +partition, where it was installed by I-have-no-idea-which-application. + +Anybody else experimenting with bytecode-enabled freetype, presumably +with different fonts? Do you find the same bad antialiased rendering +that I found, or do other fonts work well? + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00288.3bf1e169fdf5504b8fa28e9998da147a b/Ch3/datasets/spam/easy_ham/00288.3bf1e169fdf5504b8fa28e9998da147a new file mode 100644 index 000000000..9bb207d15 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00288.3bf1e169fdf5504b8fa28e9998da147a @@ -0,0 +1,80 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:52:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 7E0A116F22 + for ; Wed, 9 Oct 2002 10:51:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:51:32 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g996xEK23238 for + ; Wed, 9 Oct 2002 07:59:14 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g996u5f26135; Wed, 9 Oct 2002 08:56:05 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g996tHf25655 for ; Wed, 9 Oct 2002 08:55:17 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Zoot apt/openssh & new DVD playing doc +Message-Id: <20021009085508.7d183613.matthias@rpmforge.net> +In-Reply-To: <1034134030.26329.85.camel@ckk.rdu.spamassassin.taint.org> +References: <20021008163613.0c1dcc72.matthias@rpmforge.net> + <1034134030.26329.85.camel@ckk.rdu.redhat.com> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 08:55:08 +0200 +Date: Wed, 9 Oct 2002 08:55:08 +0200 + +Once upon a time, Chris wrote : + +> On Tue, 2002-10-08 at 10:36, Matthias Saou wrote: +> > Hi there, +> > +> > Two new things today : +> > +> > 1) I've had to install a Red Hat Linux 6.2 server because of an old +> > proprietary IVR software that doesn't work on newer releases :-( So +> > I've recompiled both the latest apt and openssh packages for it, and +> > they are now available with a complete "os, updates & freshrpms" apt +> > repository at apt.freshrpms.net, for those who might be interested. +> +> Gack. Did you try 7.3 with the compat-glibc first? Or does it require an +> antique kernel? + +It requires a 2.2 kernel, plus antique just-about-everything :-/ Real crap! + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.00 0.03 0.00 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00289.759738dc8d12e85d6e26b866faa94337 b/Ch3/datasets/spam/easy_ham/00289.759738dc8d12e85d6e26b866faa94337 new file mode 100644 index 000000000..98fb687bb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00289.759738dc8d12e85d6e26b866faa94337 @@ -0,0 +1,80 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:52:07 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 3254416F20 + for ; Wed, 9 Oct 2002 10:51:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:51:28 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g996jAK22972 for + ; Wed, 9 Oct 2002 07:45:10 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g996b2f06803; Wed, 9 Oct 2002 08:37:02 + +0200 +Received: from bennew01.localdomain (pD900DDF4.dip.t-dialin.net + [217.0.221.244]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g996aAf01341 for ; Wed, 9 Oct 2002 08:36:10 +0200 +Received: from bennew01.localdomain (bennew01.localdomain [192.168.3.1]) + by bennew01.localdomain (8.12.5/linuxconf) with SMTP id g996a33S019398 for + ; Wed, 9 Oct 2002 08:36:03 +0200 +From: Matthias Haase +To: rpm-zzzlist@freshrpms.net +Subject: Re: RedHat 8.0 and his own freetype +Message-Id: <20021009083602.6a8bcf32.matthias_haase@bennewitz.com> +In-Reply-To: <3DA3C96B.7050007@eecs.berkeley.edu> +References: <20021004155451.52f9ecd5.matthias_haase@bennewitz.com> + <3D9E1F20.3050300@eecs.berkeley.edu> + <20021008202424.67c6e32c.matthias_haase@bennewitz.com> + <3DA3C96B.7050007@eecs.berkeley.edu> +X-Operating-System: customized linux smp kernel 2.4* on i686 +X-Mailer: Sylpheed +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 08:36:02 +0200 +Date: Wed, 9 Oct 2002 08:36:02 +0200 + +On Tue, 08 Oct 2002 23:15:07 -0700 +Ben Liblit wrote: + +> Ick. Perhaps this is why Red Hat turned the bytecode interpreter off. +> It may improve non-antialiased rendering, but only at the expense of +> making a mess of antialiased rendering. +> +> This may come down to a matter of personal aesthetics, but for my part, +> I'm going back to Red Hat's standard packages with the bytecode +> interpreter turned *off*. +Yes, confirmed, but for my part, I'm using mostly non-antialiased fonts +and +they are true ugly without the bytecode interpreter enabled. + +Remember my stupid request about your RPM ;-) + + +-- + Regards from Germany + Matthias + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00290.98400fc8bb102f11e201c037a613cf85 b/Ch3/datasets/spam/easy_ham/00290.98400fc8bb102f11e201c037a613cf85 new file mode 100644 index 000000000..2a3a27030 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00290.98400fc8bb102f11e201c037a613cf85 @@ -0,0 +1,72 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:53:11 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id AC66A16F7C + for ; Wed, 9 Oct 2002 10:52:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:11 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g998YdK26404 for + ; Wed, 9 Oct 2002 09:34:39 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g998V3f31189; Wed, 9 Oct 2002 10:31:03 + +0200 +Received: from mail.addix.net (kahless.addix.net [195.179.139.19]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g998UHf30709 for + ; Wed, 9 Oct 2002 10:30:17 +0200 +Received: from wolf359.ision-cic.de (soran.int.addix.net [212.51.6.15] + (may be forged)) by mail.addix.net (8.9.3/8.9.3) with SMTP id KAA26671 for + ; Wed, 9 Oct 2002 10:29:47 +0200 +From: Ralf Ertzinger +To: rpm-zzzlist@freshrpms.net +Subject: Re: Apt repository authentication: it's time +Message-Id: <20021009102823.0e442ee6.ralf@camperquake.de> +In-Reply-To: <20021008175452.581c0e50.kilroy@kamakiriad.com> +References: <20021008175452.581c0e50.kilroy@kamakiriad.com> +Organization: [NDC] ;-) +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 10:28:23 +0200 +Date: Wed, 9 Oct 2002 10:28:23 +0200 + +Hi. + +Brian Fahrlander wrote: + +> What's it take to ensure we're covered against this kind of +> childish/moronic/Microsoft-era problems? + +Well, I am checking the packet signatures while building the apt-tree. +Not very pretty, not very fast, but it works. + +Nonetheless: +did anyone ever play with this: +http://distro.conectiva.com.br/pipermail/apt-rpm/2002-August/000653.html + +-- +R! + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00291.69656be850c89e739f4ae1db5b43d90f b/Ch3/datasets/spam/easy_ham/00291.69656be850c89e739f4ae1db5b43d90f new file mode 100644 index 000000000..d72975346 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00291.69656be850c89e739f4ae1db5b43d90f @@ -0,0 +1,83 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:53:15 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id 7447D16F7F + for ; Wed, 9 Oct 2002 10:52:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:16 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9999BK27619 for + ; Wed, 9 Oct 2002 10:09:11 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g99941f25722; Wed, 9 Oct 2002 11:04:01 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g9993Df23422 for + ; Wed, 9 Oct 2002 11:03:13 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Apt repository authentication: it's time +Message-Id: <20021009110311.32c22ea5.matthias@rpmforge.net> +In-Reply-To: <20021008175452.581c0e50.kilroy@kamakiriad.com> +References: <20021008175452.581c0e50.kilroy@kamakiriad.com> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 11:03:11 +0200 +Date: Wed, 9 Oct 2002 11:03:11 +0200 + +Once upon a time, Brian wrote : + +> OK, it's now time to work out the PGP securing of apt repository +> traffic. I've never gotten anything but "sitename.whatever will not +> be authenticated" until running Redhat 8.0 when I get something +> about having "No Key" for various files. + +I don't think gpg signing my repositories will help anything, as it will +just ensure that my passphrase was typed to confirm the md5 signatures of +all pgklists and srclists. Basically, you'll then just be sure that it's me +who generated the files, and this will of course prevent automating the +process of updating the apt repository when Red Hat updates show up. + +In Red Hat Linux 8.0 though, the warnings about "No Key" appear until you +import the right gpg public keys directly with rpm, for example : +rpm --import /usr/share/doc/apt-0.5.4cnc7/RPM-GPG-KEY +(this will import my key, which is used to sign all freshrpms.net packages) + +Hopefully it is possible to the tell rpm to install *only* packages who +verify against an imported gpg key? This for me would be the optimal way to +ensure integrity with the way things curently work. + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.14 0.18 0.17 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00292.d70b6d753352d01060579b1c34df4e4d b/Ch3/datasets/spam/easy_ham/00292.d70b6d753352d01060579b1c34df4e4d new file mode 100644 index 000000000..27cb04eac --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00292.d70b6d753352d01060579b1c34df4e4d @@ -0,0 +1,87 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 10:53:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id C262316F82 + for ; Wed, 9 Oct 2002 10:52:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 09 Oct 2002 10:52:20 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g999a0K28408 for + ; Wed, 9 Oct 2002 10:36:01 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g999T2f09799; Wed, 9 Oct 2002 11:29:02 + +0200 +Received: from evv.kamakiriad.local (cable-b-36.sigecom.net + [63.69.210.36]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g999Rif01254 for ; Wed, 9 Oct 2002 11:27:45 +0200 +Received: from aquila.kamakiriad.local (aquila.kamakiriad.local + [192.168.1.3]) by kamakiriad.com (8.11.6/8.11.6) with SMTP id g999RWP18078 + for ; Wed, 9 Oct 2002 04:27:32 -0500 +From: Brian Fahrlander +To: rpm-zzzlist@freshrpms.net +Subject: Re: Apt repository authentication: it's time +Message-Id: <20021009042734.049ea20e.kilroy@kamakiriad.com> +In-Reply-To: <20021009110311.32c22ea5.matthias@rpmforge.net> +References: <20021008175452.581c0e50.kilroy@kamakiriad.com> + <20021009110311.32c22ea5.matthias@rpmforge.net> +X-Mailer: Sylpheed version 0.8.5 (GTK+ 1.2.10; i386-redhat-linux) +X-Message-Flag: : Shame on you! You know Outlook is how viruses are spread! +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 04:27:34 -0500 +Date: Wed, 9 Oct 2002 04:27:34 -0500 + +On Wed, 9 Oct 2002 11:03:11 +0200, Matthias Saou wrote: + +> I don't think gpg signing my repositories will help anything, as it will +> just ensure that my passphrase was typed to confirm the md5 signatures of +> all pgklists and srclists. Basically, you'll then just be sure that it's me +> who generated the files, and this will of course prevent automating the +> process of updating the apt repository when Red Hat updates show up. + + Isn't there a packager-key that's concealed inside the rpm? Things have changed a bit since I used to work with'em, but I thought there was some internal number that must be compared to be correct (or, presumably, return an error.) + +> In Red Hat Linux 8.0 though, the warnings about "No Key" appear until you +> import the right gpg public keys directly with rpm, for example : +> rpm --import /usr/share/doc/apt-0.5.4cnc7/RPM-GPG-KEY +> (this will import my key, which is used to sign all freshrpms.net packages) + + Hey, cool; wether it protects me or not, I feel better about it. + +> Hopefully it is possible to the tell rpm to install *only* packages who +> verify against an imported gpg key? This for me would be the optimal way to +> ensure integrity with the way things curently work. + + Yeah, surely there's a flag for that; there is, for everything else, aye? :) + +------------------------------------------------------------------------ +Brian Fahrländer Linux Zealot, Conservative, and Technomad +Evansville, IN My Voyage: http://www.CounterMoon.com +ICQ 5119262 +------------------------------------------------------------------------ +angegangen, Schlange-Hüften, sein es ganz rüber jetzt. Bügel innen fest, +weil es eine lange, süsse Fahrt ist. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/00293.d74734bf5cf13ea138e4ee4df7555008 b/Ch3/datasets/spam/easy_ham/00293.d74734bf5cf13ea138e4ee4df7555008 new file mode 100644 index 000000000..12c291e9a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00293.d74734bf5cf13ea138e4ee4df7555008 @@ -0,0 +1,118 @@ +From sentto-2242572-56027-1034088329-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 17:02:17 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id D702416F16 + for ; Tue, 8 Oct 2002 17:01:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 17:01:47 +0100 (IST) +Received: from n18.grp.scd.yahoo.com (n18.grp.scd.yahoo.com + [66.218.66.73]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g98EjEK20113 for ; Tue, 8 Oct 2002 15:45:15 +0100 +X-Egroups-Return: sentto-2242572-56027-1034088329-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.198] by n18.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 14:45:29 -0000 +X-Sender: skitster@hotmail.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 14:45:28 -0000 +Received: (qmail 27266 invoked from network); 8 Oct 2002 14:45:28 -0000 +Received: from unknown (66.218.66.216) by m5.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 14:45:28 -0000 +Received: from unknown (HELO hotmail.com) (64.4.17.165) by + mta1.grp.scd.yahoo.com with SMTP; 8 Oct 2002 14:45:28 -0000 +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Tue, 8 Oct 2002 07:45:28 -0700 +Received: from 217.34.194.18 by lw11fd.law11.hotmail.msn.com with HTTP; + Tue, 08 Oct 2002 14:45:28 GMT +To: zzzzteana@yahoogroups.com +Cc: clare.bunkham@prudential.co.uk +Message-Id: +X-Originalarrivaltime: 08 Oct 2002 14:45:28.0554 (UTC) FILETIME=[58247CA0:01C26ED9] +From: "Scott Wood" +X-Originating-Ip: [217.34.194.18] +X-Yahoo-Profile: fromage_frenzy +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 08 Oct 2002 15:45:28 +0100 +Subject: [zzzzteana] Plumstead Panther - Pictures! +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +Looks and sounds a hell of a lot like Clare's cat, Violence... + +A tall tail or is it a prowling panther? + + +http://www.thisislocallondon.co.uk/news/weird/display.var.633939.Bizarre+London.0.html + + +Security cameras at the Gardiner house filmed the cat +The Plumstead panther has been spotted just yards from the scene of a +sighting made three weeks ago but this time it was caught on camera. + +Steve Gardiner, 41, claims to have spotted the large cat in his garden in +Upton Road, Plumstead, in the sixth reported sighting in Woolwich and Bexley +in just four weeks. + +Mr Gardiner told News Shopper he watched the big cat as it walked alongside +the house at about 7.15am, on Wednesday, September 25, while his security +cameras captured it on film. + +The father-of-four described the black cat as about 3ft long and +two-and-a-half-foot high, with a large body. + +He said: "It prowled past the patio doors moving with all the mannerisms of +a hunter. + +"It looked at me calmly before moving on." + +The bricklayer told how his work colleagues let him know News Shopper had +been following the big cat story so he decided to call our offices with news +of the sighting. + +His wife, Karen, 41, later checked the tape which had captured grainy images +of the large cat prowling through their garden. + +She said: "I feel sorry for it not living in its natural habitat I'd hate +for it to get hurt." + +Mr Gardiner told how he is convinced of the cat's existence saying how their +usually quiet 18-year-old dog barks at "nothing" in the garden but barked +that morning. + +He warned: "I don't think these cats are dangerous but, if cornered, they +might jump you." + +Sightings of the large black cat are being reported all over the Plumstead +Common and Shooters Hill as well at the Bexley area. + +If you have seen the big cat, call News Shopper on 01689 885712. + +12:27 Tuesday 8th October 2002 + + + +_________________________________________________________________ +Send and receive Hotmail on your mobile device: http://mobile.msn.com + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Sell a Home for Top $ +http://us.click.yahoo.com/RrPZMC/jTmEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00294.73bcb5b3dfaccc628419d7ecfe69ff1b b/Ch3/datasets/spam/easy_ham/00294.73bcb5b3dfaccc628419d7ecfe69ff1b new file mode 100644 index 000000000..f0e51eaa6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00294.73bcb5b3dfaccc628419d7ecfe69ff1b @@ -0,0 +1,70 @@ +From sentto-2242572-56029-1034088748-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 17:02:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id BC63716F1A + for ; Tue, 8 Oct 2002 17:01:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 17:01:51 +0100 (IST) +Received: from n19.grp.scd.yahoo.com (n19.grp.scd.yahoo.com + [66.218.66.74]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g98ExDK20727 for ; Tue, 8 Oct 2002 15:59:13 +0100 +X-Egroups-Return: sentto-2242572-56029-1034088748-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.192] by n19.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 14:52:30 -0000 +X-Sender: timc@2ubh.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 14:52:28 -0000 +Received: (qmail 8966 invoked from network); 8 Oct 2002 14:52:14 -0000 +Received: from unknown (66.218.66.218) by m10.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 14:52:14 -0000 +Received: from unknown (HELO tungsten.btinternet.com) (194.73.73.81) by + mta3.grp.scd.yahoo.com with SMTP; 8 Oct 2002 14:52:14 -0000 +Received: from host217-35-11-51.in-addr.btopenworld.com ([217.35.11.51]) + by tungsten.btinternet.com with esmtp (Exim 3.22 #8) id 17yviW-0003Cq-00 + for forteana@yahoogroups.com; Tue, 08 Oct 2002 15:52:12 +0100 +X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410) +To: zzzzteana +X-Priority: 3 +Message-Id: +From: "Tim Chapman" +X-Yahoo-Profile: tim2ubh +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 08 Oct 2002 15:51:16 +0100 +Subject: [zzzzteana] A Billy for the septics +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + +http://news.bbc.co.uk/1/hi/uk/2310209.stm + +Tuesday, 8 October, 2002, 13:53 GMT 14:53 UK +Quiz: Know your Cockney Rhyming Slang? + +Cockney Rhyming Slang is alive and well with new terms being invented all +the time, according to the new Oxford Dictionary of Rhyming Slang being +published this week. +But do you know a Raquel Welch (belch) from a Billie Piper (windscreen +wiper)? +... + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Plan to Sell a Home? +http://us.click.yahoo.com/J2SnNA/y.lEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00295.00390d9365839897c097b0db0d0a567b b/Ch3/datasets/spam/easy_ham/00295.00390d9365839897c097b0db0d0a567b new file mode 100644 index 000000000..3938424f4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00295.00390d9365839897c097b0db0d0a567b @@ -0,0 +1,96 @@ +From sentto-2242572-56028-1034088521-zzzz=spamassassin.taint.org@returns.groups.yahoo.com Tue Oct 8 17:02:19 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by spamassassin.taint.org (Postfix) with ESMTP id DC7B516F17 + for ; Tue, 8 Oct 2002 17:01:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 17:01:48 +0100 (IST) +Received: from n13.grp.scd.yahoo.com (n13.grp.scd.yahoo.com + [66.218.66.68]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g98EuBK20554 for ; Tue, 8 Oct 2002 15:56:14 +0100 +X-Egroups-Return: sentto-2242572-56028-1034088521-zzzz=spamassassin.taint.org@returns.groups.yahoo.com +Received: from [66.218.67.193] by n13.grp.scd.yahoo.com with NNFMP; + 08 Oct 2002 14:48:41 -0000 +X-Sender: skitster@hotmail.com +X-Apparently-To: zzzzteana@yahoogroups.com +Received: (EGP: mail-8_2_2_0); 8 Oct 2002 14:48:41 -0000 +Received: (qmail 60589 invoked from network); 8 Oct 2002 14:48:40 -0000 +Received: from unknown (66.218.66.217) by m11.grp.scd.yahoo.com with QMQP; + 8 Oct 2002 14:48:40 -0000 +Received: from unknown (HELO hotmail.com) (64.4.17.7) by + mta2.grp.scd.yahoo.com with SMTP; 8 Oct 2002 14:48:40 -0000 +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Tue, 8 Oct 2002 07:48:40 -0700 +Received: from 217.34.194.18 by lw11fd.law11.hotmail.msn.com with HTTP; + Tue, 08 Oct 2002 14:48:40 GMT +To: zzzzteana@yahoogroups.com +Message-Id: +X-Originalarrivaltime: 08 Oct 2002 14:48:40.0859 (UTC) FILETIME=[CAC3E6B0:01C26ED9] +From: "Scott Wood" +X-Originating-Ip: [217.34.194.18] +X-Yahoo-Profile: fromage_frenzy +MIME-Version: 1.0 +Mailing-List: list zzzzteana@yahoogroups.com; contact + forteana-owner@yahoogroups.com +Delivered-To: mailing list zzzzteana@yahoogroups.com +Precedence: bulk +List-Unsubscribe: +Date: Tue, 08 Oct 2002 15:48:40 +0100 +Subject: [zzzzteana] Punch bags filled with incontinence pads +Reply-To: zzzzteana@yahoogroups.com +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit + + + +http://www.thisislocallondon.co.uk/news/weird/display.var.633932.Bizarre+London.0.html + +An investigation has been launched after punch bags on sale in Greenwich +were found to be stuffed with incontinence pads and bandages. + +Trading standards officers, working for Greenwich Council, were alerted to +the situation after a Bryan punch bag, purchased in Argos, in Charlton Road, +Charlton, was found to be full of bandages. + +Also stuffed inside the piece of sporting equipment was a letter from a +woman in Fife stating how she felt quite disgusted' about the bag and asking +for the filling to be tested. + +The unfortunate shopper had bought his first bag, at Argos, in Lewisham High +Street, but had returned it because on investigation of a leak he was +horrified to discover it was filled with incontinence pads. + +So far, officers have purchased two of the punch bags, only to find they +contain incontinence pads and strips of shredded duvet. + +Cabinet member for public services Councillor Angela Cornforth said: "This +is one of the strangest stories I have every heard. + +"Our officers are in the process of investigating and will no doubt discover +why the bags contain such unusual contents." + +12:18 Tuesday 8th October 2002 + + + + +_________________________________________________________________ +Chat with friends online, try MSN Messenger: http://messenger.msn.com + + +------------------------ Yahoo! Groups Sponsor ---------------------~--> +Plan to Sell a Home? +http://us.click.yahoo.com/J2SnNA/y.lEAA/MVfIAA/7gSolB/TM +---------------------------------------------------------------------~-> + +To unsubscribe from this group, send an email to: +forteana-unsubscribe@egroups.com + + + +Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ + + + diff --git a/Ch3/datasets/spam/easy_ham/00296.fd066cc4153d4d6e65dc8f06165e3f78 b/Ch3/datasets/spam/easy_ham/00296.fd066cc4153d4d6e65dc8f06165e3f78 new file mode 100644 index 000000000..f49d186fd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00296.fd066cc4153d4d6e65dc8f06165e3f78 @@ -0,0 +1,60 @@ +From fork-admin@xent.com Mon Aug 26 15:31:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8D4B94415E + for ; Mon, 26 Aug 2002 10:26:03 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:26:03 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7OEuYZ06483 for ; + Sat, 24 Aug 2002 15:56:34 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 258B52940EF; Sat, 24 Aug 2002 07:54:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 935DE2940BF for ; Sat, + 24 Aug 2002 07:53:16 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id D04403ECF4; + Sat, 24 Aug 2002 10:57:13 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id CEC393EC7A; Sat, 24 Aug 2002 10:57:13 -0400 (EDT) +From: Tom +To: "Adam L. Beberg" +Cc: fork@spamassassin.taint.org +Subject: Re: The GOv gets tough on Net Users.....er Pirates.. +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 24 Aug 2002 10:57:13 -0400 (EDT) + +On Sat, 24 Aug 2002, Adam L. Beberg wrote: + +--]And yet STILL noone is out there creating _public domain_ content. Is there +--]even one person out there can can even begin to talk without being a +--]complete hypocrite? And no the "open source" people cant talk either, the +--]GPL aint even close. I know I cant talk. + + +All my music is in the Public Domain. + + +There are others. + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00297.be029fdbe088fc14a8124640f0bb053e b/Ch3/datasets/spam/easy_ham/00297.be029fdbe088fc14a8124640f0bb053e new file mode 100644 index 000000000..f7b4fba3b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00297.be029fdbe088fc14a8124640f0bb053e @@ -0,0 +1,55 @@ +From fork-admin@xent.com Mon Aug 26 15:31:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 69B344416D + for ; Mon, 26 Aug 2002 10:26:05 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:26:05 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7OExmZ06568 for ; + Sat, 24 Aug 2002 15:59:48 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 230472940FB; Sat, 24 Aug 2002 07:57:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail2.panix.com (mail2.panix.com [166.84.1.73]) by xent.com + (Postfix) with ESMTP id 9FFFF2940F8 for ; Sat, + 24 Aug 2002 07:56:53 -0700 (PDT) +Received: from 159-98.nyc.dsl.access.net (159-98.nyc.dsl.access.net + [166.84.159.98]) by mail2.panix.com (Postfix) with ESMTP id 496AA9279 for + ; Sat, 24 Aug 2002 10:58:43 -0400 (EDT) +From: Lucas Gonze +X-X-Sender: lgonze@localhost.localdomain +Cc: FoRK +Subject: Re: The GOv gets tough on Net Users.....er Pirates.. +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 24 Aug 2002 10:51:05 -0400 (EDT) + +> If the creator didnt say you could have it without paying, it's theft, so +> simple, hell that's even in all the major holy books. + +Wow, I've got a great idea! I'll hire a skywriter to write "you can't +look at this without paying," then lock up everybody who looked at it and +didn't pay! It can't fail -- Jesus is on my side! + + + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00298.8b7d79e9cff4860a08188dd3d0c4ceb9 b/Ch3/datasets/spam/easy_ham/00298.8b7d79e9cff4860a08188dd3d0c4ceb9 new file mode 100644 index 000000000..fcc3554fc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00298.8b7d79e9cff4860a08188dd3d0c4ceb9 @@ -0,0 +1,71 @@ +From fork-admin@xent.com Mon Aug 26 15:32:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AF7494416E + for ; Mon, 26 Aug 2002 10:26:08 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:26:08 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7OF4eZ06772 for ; + Sat, 24 Aug 2002 16:04:40 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D60FB2940FF; Sat, 24 Aug 2002 07:59:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f199.law15.hotmail.com [64.4.23.199]) by + xent.com (Postfix) with ESMTP id 447D92940FF for ; + Sat, 24 Aug 2002 07:58:25 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Sat, 24 Aug 2002 08:00:15 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Sat, 24 Aug 2002 15:00:15 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Re: The case for spam +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 24 Aug 2002 15:00:15.0691 (UTC) FILETIME=[F45419B0:01C24B7E] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 24 Aug 2002 15:00:15 +0000 + +Lucas Gonze: +>Senders should vary the recipient list to include non-targets, like party +>officials, and to exclude targets enough to give them plausible +>deniability. + +Which means the sender has a list of who the true +targets are, and who the fake targets are, and +scripts for mixing these. On the receiving side, +my email client distinguishes between messages +that are read, and messages that are not. I like +to mark or save messages that are particularly +interresting or important to me. And even if I +make a point to delete "suspicious material" +immediately upon reading it, even THAT might +leave an interesting kind of trace on my machine. + +Sorry, but I don't buy the argument that spam +protects people who want to distribute or see +material the government disapproves. + + +_________________________________________________________________ +MSN Photos is the easiest way to share and print your photos: +http://photos.msn.com/support/worldwide.aspx + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00299.7e89319a2d14ca28a61ad12fcb49eff8 b/Ch3/datasets/spam/easy_ham/00299.7e89319a2d14ca28a61ad12fcb49eff8 new file mode 100644 index 000000000..18d0d7c40 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00299.7e89319a2d14ca28a61ad12fcb49eff8 @@ -0,0 +1,72 @@ +From fork-admin@xent.com Mon Aug 26 15:32:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 291E04415F + for ; Mon, 26 Aug 2002 10:26:12 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:26:12 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7OFZXZ07798 for ; + Sat, 24 Aug 2002 16:35:34 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2BA432940DA; Sat, 24 Aug 2002 08:33:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail2.panix.com (mail2.panix.com [166.84.1.73]) by xent.com + (Postfix) with ESMTP id D8F952940BF for ; Sat, + 24 Aug 2002 08:32:22 -0700 (PDT) +Received: from 159-98.nyc.dsl.access.net (159-98.nyc.dsl.access.net + [166.84.159.98]) by mail2.panix.com (Postfix) with ESMTP id 972AC91F0 for + ; Sat, 24 Aug 2002 11:34:12 -0400 (EDT) +From: Lucas Gonze +X-X-Sender: lgonze@localhost.localdomain +Cc: FoRK +Subject: Re: The case for spam +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 24 Aug 2002 11:26:34 -0400 (EDT) + +Russell Turpin wrote: +> On the receiving side, +> my email client distinguishes between messages +> that are read, and messages that are not. I like +> to mark or save messages that are particularly +> interresting or important to me. And even if I +> make a point to delete "suspicious material" +> immediately upon reading it, even THAT might +> leave an interesting kind of trace on my machine. + +You choose to have your email client do that. You don't have to. Short +of Palladium, you can do whatever you want with bytes you hold, including +reading messages and erasing the traces. I'll buy a chocolate sundae for +anyone who can show otherwise. + +An attacker might be able to verify that you *have* read a message (e.g. +by seeing that you saved and edited a copy) but not that you *haven't*. +If your email client was compromised you could put a packet sniffer on the +line before downloading mail. If an attacker installed a packet sniffer +sniffer, you could run it in a spoofing VM. + +The only exception to the rule that your machine belongs to you is -- +maybe -- Palladium. + +- Lucas + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00300.e98a210bc3981e1d64524ed9984be049 b/Ch3/datasets/spam/easy_ham/00300.e98a210bc3981e1d64524ed9984be049 new file mode 100644 index 000000000..552772186 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00300.e98a210bc3981e1d64524ed9984be049 @@ -0,0 +1,111 @@ +From fork-admin@xent.com Mon Aug 26 15:32:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AE56244160 + for ; Mon, 26 Aug 2002 10:26:22 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:26:22 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7OHwZZ11990 for ; + Sat, 24 Aug 2002 18:58:36 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 238042940C9; Sat, 24 Aug 2002 10:56:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barry.mail.mindspring.net (barry.mail.mindspring.net + [207.69.200.25]) by xent.com (Postfix) with ESMTP id 5FDF62940BF for + ; Sat, 24 Aug 2002 10:55:43 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + barry.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17if8s-0008IP-00; + Sat, 24 Aug 2002 13:56:10 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: Re: "Ouch. Ouch. Ouch. Ouch. Ouch...."(was Re: My brain hurts) +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 24 Aug 2002 11:45:18 -0400 + + +--- begin forwarded text + + +Date: Sat, 24 Aug 2002 11:39:34 -0400 +To: "R. A. Hettinga" +From: Somebody +Subject: Re: "Ouch. Ouch. Ouch. Ouch. Ouch...."(was Re: My brain hurts) + +And then there was the one from Prairie Home Companion: + +Q. Why is a viola larger than a violin? +A. It just looks that way because a violin player's head is bigger. + + +>--- begin forwarded text +> +> +>Status: RO +>Delivered-To: fork@spamassassin.taint.org +>From: "Joseph S. Barrera III" +>Organization: Rose Garden Funeral of Sores +>User-Agent: Mutt/1.5.0 [-1214711651] +>To: Flatware or Road Kill? +>Subject: Re: "Ouch. Ouch. Ouch. Ouch. Ouch...."(was Re: My brain hurts) +>Sender: fork-admin@xent.com +>Date: Wed, 24 Jul 2002 15:17:40 -0700 +> +>There are so many good musician jokes. +> +>A couple of my favorites: +> +>Q. What's the difference between a viola and a violin? +>A. A viola burns longer. +> +>Q. What's the definition of a minor second? +>A. Two oboes playing in unison. +> +>- Joe +> +> +>http://xent.com/mailman/listinfo/fork +> +>--- end forwarded text +> +> +>-- +>----------------- +>R. A. Hettinga +>The Internet Bearer Underwriting Corporation +>44 Farquhar Street, Boston, MA 02131 USA +>"... however it may deserve respect for its usefulness and antiquity, +>[predicting the end of the world] has not been found agreeable to +>experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + +-- + +--- end forwarded text + + +-- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"Never underestimate the power of stupid people in large groups." +--George Carlin +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00301.48ccf486575754a29b80e4eae2c5e227 b/Ch3/datasets/spam/easy_ham/00301.48ccf486575754a29b80e4eae2c5e227 new file mode 100644 index 000000000..8a54fcaab --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00301.48ccf486575754a29b80e4eae2c5e227 @@ -0,0 +1,74 @@ +From fork-admin@xent.com Mon Aug 26 15:32:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 836D244161 + for ; Mon, 26 Aug 2002 10:26:30 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:26:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7OI8aZ12419 for ; + Sat, 24 Aug 2002 19:08:37 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A42A9294106; Sat, 24 Aug 2002 11:06:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 786AE2940BF for ; Sat, + 24 Aug 2002 11:05:35 -0700 (PDT) +Received: (qmail 4519 invoked from network); 24 Aug 2002 18:07:25 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 24 Aug 2002 18:07:25 -0000 +Reply-To: +From: "John Hall" +To: +Subject: A biblical digression +Message-Id: <004501c24b99$1a6596a0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 24 Aug 2002 11:07:00 -0700 + +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Adam +> L. Beberg + +> +> If the creator didnt say you could have it without paying, it's theft, +so +> simple, hell that's even in all the major holy books. + +Ran across a site which claimed to explain the original meaning of the +Ten Commandments. It seems some of those meanings have evolved a bit, +too. + +In particular, there was a claim that the commandment on stealing was +actually specifically about 'man stealing -- selling a free man into +slavery. Certainly the US southerners were particularly sensitive to +the term 'man stealer' in a way I didn't understand. + +Yep, I know he said all holy books. No, I don't know if this site was +blowing hot air. It just read like someone had done their homework. + + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00302.9aa28800eefcb167ac80f4b6b1e939d6 b/Ch3/datasets/spam/easy_ham/00302.9aa28800eefcb167ac80f4b6b1e939d6 new file mode 100644 index 000000000..25da91dbe --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00302.9aa28800eefcb167ac80f4b6b1e939d6 @@ -0,0 +1,427 @@ +From fork-admin@xent.com Mon Aug 26 15:32:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B7AB64416F + for ; Mon, 26 Aug 2002 10:26:32 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:26:32 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7PCdeZ13033 for ; + Sun, 25 Aug 2002 13:39:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4023E2940A8; Sun, 25 Aug 2002 05:37:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from ms4.lga2.nytimes.com (ms4.lga2.nytimes.com [64.15.247.148]) + by xent.com (Postfix) with ESMTP id 1BA0F2940A1 for ; + Sun, 25 Aug 2002 05:36:23 -0700 (PDT) +Received: from email5.lga2.nytimes.com (email5 [10.0.0.170]) by + ms4.lga2.nytimes.com (Postfix) with SMTP id 4029C5A607 for ; + Sun, 25 Aug 2002 08:42:23 -0400 (EDT) +Received: by email5.lga2.nytimes.com (Postfix, from userid 202) id + 9168758A4D; Sun, 25 Aug 2002 08:34:47 -0400 (EDT) +Reply-To: khare@alumni.caltech.edu +From: khare@alumni.caltech.edu +To: fork@spamassassin.taint.org +Subject: NYTimes.com Article: Texas Pacific Goes Where Others Fear to Spend +Message-Id: <20020825123447.9168758A4D@email5.lga2.nytimes.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 25 Aug 2002 08:34:47 -0400 (EDT) + +This article from NYTimes.com +has been sent to you by khare@alumni.caltech.edu. + + +Texas Pacific, in addition to its multibillion dollar portfolio detailed below, actually does invest in promising new companies, not just turnarounds. It's just that KnowNow is waaay to small of a part of their $7.2B portfolio... so far! + +Rohit + +khare@alumni.caltech.edu + + +Texas Pacific Goes Where Others Fear to Spend + +August 25, 2002 +By RIVA D. ATLAS and EDWARD WONG + + + + + + +It was one of the first calls David N. Siegel placed when +he became chief executive of the beleaguered US Airways +last March. Seeking advice on how to hammer out a leaner +and meaner business plan, keep his planes flying and +renegotiate costly contracts with the unions, he flipped +through his files and found the number for the Texas +Pacific Group, an investment firm headed by David +Bonderman, a former civil rights lawyer with a reputation +for fixing problem companies. + +Mr. Siegel, once a top executive at Continental Airlines, +had watched Texas Pacific's partners turn an investment of +$66 million in the airline, made three years after it filed +for bankruptcy in 1990, into a profit of more than $600 +million. And they had made nearly as much on their stake in +America West, which filed for bankruptcy in 1992. + +That search for advice turned into an offer. Why not let +Texas Pacific have a role in US Airways' revival? asked +Richard Schifter, the Texas Pacific executive whom Mr. +Siegel reached. + +In June, Mr. Siegel called Mr. Schifter again. And days +before US Airways announced its plans to file for +bankruptcy two weeks ago - but after it had negotiated +about $550 million in concessions with its unions - Texas +Pacific, based in Fort Worth and San Francisco, agreed to +kick in $100 million as part of a $500 million loan to keep +the company operating during bankruptcy. It also agreed to +buy $200 million of stock, or 38 percent of the company, +and take 5 of 13 seats on the board if US Airways emerges +from bankruptcy - unless another investor surfaces with a +better offer. + +"One of the reasons we were interested is few other folks +were," said James Coulter, a partner at Texas Pacific, in +an interview after the bankruptcy filing. "There aren't +many people around with the stomach or the knowledge to +delve into the airline industry." + +Texas Pacific, which manages $8 billion, thrives by buying +businesses no one else wants. Mr. Coulter and Mr. Bonderman +made their names during the recession of the early 1990's +with investments in Continental and America West. The +firm's hallmark is to take an active hand in shaping +companies, sometimes ousting poor managers and tapping its +extensive network of contacts for talented replacements. + +Now the partners are again looking for trouble. In the last +year alone, Texas Pacific has announced or completed six +acquisitions, most in unloved industries like +semiconductors, reinsurance and airlines. Just last month, +it announced plans to buy Burger King, which has been +losing market share, for $2.26 billion. It is also bidding +for Bankgesellschaft Berlin, a large and troubled bank. + +The most creative, and potentially lucrative, of these +deals could be Texas Pacific's acquisition last November of +MEMC Electronic Materials, a semiconductor company, for $6 +- yes, just $6 - in cash. It will also guarantee a $150 +million bank loan. + +In the last few years, most firms that specialize in +leveraged buyouts - the use of junk bonds, bank loans and +other borrowings to buy or take big stakes in companies - +have been largely inactive. Falling stock prices have made +managements reluctant to sell cheaply. Companies that are +for sale have tangled finances or face a cash squeeze. + +Texas Pacific is different. "This is a terrific environment +for them," said Stephen Schwarzman, chief executive of the +Blackstone Group, which also specializes in buyouts. + +Mark Attanasio, a managing director at Trust Company of the +West, which has invested with Texas Pacific, said: "Most +other buyout firms want to buy companies that are growing. +You don't see many guys wanting to take on operational +fixes." + +Like most other buyout firms, Texas Pacific tries to keep +its inner workings private: its partners rarely grant +interviews and its Web site is perpetually under +construction. Mr. Bonderman, Mr. Coulter and William Price, +the third founding partner, declined to be interviewed for +this article. + +Mr. Bonderman, 59, is known for his rumpled shirts and +bright, patterned socks. "He likes argyle socks, and they +tend to fall down around his ankles," said Henry Miller, an +investment banker who advises troubled companies. Early in +his career, when he was a Washington lawyer, Mr. Bonderman +argued a case in court wearing a brown velvet suit. + +When a Texas Pacific deal is being negotiated, he is known +for obsessively staying in touch, even when he is trekking +in places like Pakistan, Nepal and, most recently, Bhutan. +"Whenever I see a long, unfamiliar phone number pop up on +my caller I.D., I know it's David calling," said one +investment banker who often works with Mr. Bonderman. + +Mr. Bonderman made his reputation in the 1980's as the +chief investment officer for Robert Bass, the Texas oilman. +Mr. Bonderman enriched Mr. Bass a second time by making +early bets in industries like cable television and taking +stakes in troubled companies like American Savings & Loan, +which had been seized by the government. Over nearly a +decade, Mr. Bonderman's picks earned an average annual +return of 63 percent for Mr. Bass. + +In 1993, Mr. Bonderman struck out on his own with Mr. +Coulter, a former Lehman Brothers banker who had also +worked for Mr. Bass. They teamed up later that year with +Mr. Price, a veteran of GE Capital Capital and Bain & +Company, a consulting firm, to form Texas Pacific. + +The three men have complementary skills, investment bankers +and other deal makers said. Mr. Bonderman is the master +strategist and Mr. Coulter is good at structuring deals and +the detailed management of the firm's purchases. Mr. Price +often recruits managers and advises on operational issues. + +"David is very much the optimist, very much the deal +maker," said Greg Brenneman, a former president of +Continental. "Jim is very much a counterbalance to David. +He will sit back and ask the tough questions. He will +approach investments a little bit more skeptically than +David does." + +By the end of the 1990's, Texas Pacific was well +established in deal making. It easily raised $4.5 billion +from pension funds and other investors in early 2000. To +celebrate their war chest, the firm's partners rented San +Francisco's City Hall and hired the B-52's to play at a +party. + +But as the stock market began to tumble, Texas Pacific +hesitated. For a 17-month stretch, the partners made no +deals. They checked out some of the biggest corporate +blowups, including Adelphia, Xerox and Global Crossing, but +stayed away, finding the prices and the quality of the +businesses untenable. + +Instead, Texas Pacific began to hastily exit some existing +investments, taking more than $2 billion in profits during +that stretch. + +"They started to cash out early in the cycle," said Mario +Giannini, chief executive of Hamilton Lane, a money +management firm, some of whose clients are Texas Pacific +investors. + +The good times of the late 1990's were not ideal for Texas +Pacific - it struggled to find downtrodden companies that +needed its help. + +But Texas Pacific did manage to spot a few diamonds in the +rough. It revived Oxford Health Plans, the health +maintenance organization that nearly collapsed in the +mid-1990's, almost doubling its money after bringing in new +managers and upgrading computer systems. In 1996, it made a +$280 million investment in Ducati Motor, the Italian +motorcycle maker, whose profits have since more than +quadrupled. + +But Texas Pacific also stumbled, usually when it bought at +the top of the market. Texas Pacific's $560 million +investment in the J. Crew Group, the clothing retailer, for +which it paid a steep price of 10 times cash flow in 1997, +has been a disappointment. So has its 1999 purchase of +Bally, the shoe maker, which has suffered from lower demand +for luxury goods. + +Texas Pacific also lost more than $100 million on Zilog, a +semiconductor company, and Favorite Brands, a candy maker, +both of which filed for bankruptcy. + +Some of these investments have taken a toll on the firm's +performance. Texas Pacific is still selling off holdings in +two investment funds it raised over the last decade. The +first fund, a $720 million portfolio raised in 1993 and +including investments made through March 1997, should +return more than 40 percent, according to one Texas Pacific +investor. But its second fund - $2.5 billion raised in 1997 +- could return less than half that, this investor +estimated, since the firm had less time to take profits on +these investments before the stock market sank. + +But because Texas Pacific has not sold many of its holdings +in the second fund, profits on these investments could +rebound. It is hoping, for example, that with new +management in place, J. Crew will turn around as the +economy rebounds. In any case, one competitor said, "their +returns look pretty good when you consider that some other +funds won't return any capital" to investors. + +But with the weak economy throwing many companies into +trouble, Texas Pacific seems poised to repeat its earlier +success, the investor said. "They should do exceptionally +well," he said. + +Texas Pacific has a distinct style - if not formula. It +relies on talented, self-sufficient managers to restructure +troubled companies, preferring to remain hands-off, except +for surveillance from the boardroom. When necessary, it +replaces managers. + +Less than a year after Continental emerged from bankruptcy, +for example, Mr. Bonderman watched with frustration as his +old friend Robert R. Ferguson, the chief executive, led it +to the edge of another trip to bankruptcy court. + +Continental's board, where Mr. Bonderman was chairman, then +brought in Gordon M. Bethune, an executive at Boeing, and +in October 1994 he replaced Mr. Ferguson as chief +executive. Mr. Bethune quickly did a top-to-bottom overhaul +of the company and is now considered a great turnaround +artist of the industry. + +"The biggest conflict I've ever seen was with Bob +Ferguson," said Clark Onstad, a former general counsel for +the Federal Aviation Administration, in describing the +thinking of Mr. Bonderman, whom he has known since the 1982 +Braniff bankruptcy. "He chose Bethune over his longtime +friend Ferguson because he thought Bethune would do a +better job." + +At America West, Texas Pacific initiated an even more +extensive management overhaul. This time, the charge was +led by Mr. Coulter and Mr. Schifter, both directors. + +W. Douglas Parker, the current chief executive, flew to Mr. +Coulter's home in San Francisco to interview for the job of +chief financial officer. They talked for hours, and Mr. +Parker said the two men quickly realized they had "somewhat +kindred spirits." + +The board replaced most senior managers at America West, +except William Franke, the chief executive, who stepped +down last September. His restructuring plan had made the +airline profitable a year and a half before it emerged from +bankruptcy in August 1994. + +Texas Pacific owns just 3 percent of America West, worth +about $33.7 million. But those are controlling shares, and +the group holds more than 50 percent of the votes. + +"These are not passive investors, nor am I," said Donald L. +Sturm, a Denver businessman who serves on Continental's +board with Mr. Bonderman and Mr. Price. "You're active. +Your money is at stake. Your reputation is at stake." + +After overseeing managers who worked successfully with +unions at Continental and America West, Texas Pacific has a +good reputation with labor. That was one reason US Airways +was interested in a Texas Pacific investment, said Chris +Chiames, a spokesman for the airline. + +Mr. Siegel wanted an investor who would "be as labor +friendly as possible," Mr. Chiames said. But US Airways can +still entertain other bids this fall, and Marvin Davis, the +billionaire investor from Los Angeles, has expressed +interest. + +Texas Pacific's investment in Burger King, made with +Goldman, Sachs and Bain Capital, was announced after two +years of discussions among Texas Pacific's partners and the +chain's franchisees - even before the company, which had +been owned by Diageo, the liquor company, was put up for +sale, said Julian Josephson, chairman of the National +Franchisee Association, which represents most Burger King +franchisees. + +"We liked what they had to say about the human component of +the businesses they buy," Mr. Josephson said. Many other +owners, he added, "are dismissive of labor." + +At Burger King, Texas Pacific will also be working with an +executive it knows. Burger King's chief executive is John +Dasburg, the former chief executive of Northwest Airlines, +who met Mr. Bonderman and his partners when Northwest +bought out their stake in Continental in 1998. + +Unlike most buyout firms, Texas Pacific remains enamored +with the technology industry, despite the failure of so +many start-ups the last two years. It has focused on the +semiconductor industry, which like the airline industry is +highly cyclical. So far, though, results have been mixed. + +The firm's 1996 acquisition of the Paradyne Corporation, +which makes equipment for high-speed Internet connections, +has been a huge success. Texas Pacific split it in two and +took both parts public in the late 1990's, selling most of +its stakes for 23 times its investment. But a much larger +investment, its $400 million acquisition of Zilog, the chip +maker, in 1998, was made just before the economic crisis in +Asia caused chip prices to plummet. Zilog filed for +bankruptcy last year. + +Texas Pacific is still hoping for a turnaround at a third +company, ON Semiconductor, which it acquired for $1.6 +billion three years ago. It invested $100 million more last +year. + +Its latest gamble on the industry, the $6 deal for MEMC, +may prove the most lucrative. The cost of mailing the +payment to E.On, based in Düsseldorf, Germany, was actually +more than the acquisition, one executive close to the deal +said. + +Texas Pacific, and its partners in the deal, Trust Company +of the West and Leonard Green & Partners, agreed to +guarantee a $150 million revolving line of credit. Texas +Pacific also assumed $900 million worth of debt, most of +which it swapped for more stock in the company. + +"They did a good job of timing the acquisition," said +Nabeel Gareeb, the company's chief executive, who noted +that in the last quarter MEMC reported its first profit +since the fourth quarter of 2000. + +But Texas Pacific's interest in airlines is clearly +sizable. Besides its involvement in Continental, America +West and US Airways, the company plans to buy Gate Gourmet, +the catering business of the bankrupt Swissair Group. + +Two years ago, Texas Pacific started a Web-based discount +ticket service called Hotwire. It put up most of the $75 +million in seed money, then persuaded six airlines to +invest with it, said Karl Peterson, the chief executive. +Hotwire, instead of asking consumers to bid on tickets, as +Priceline does, shows the cheapest ticket on its Web site +but does not reveal the exact flight and travel time until +after the sale. + +The contraction of the new economy has undoubtedly hurt +Hotwire, which is privately owned. Mr. Peterson said that +the company was still unprofitable but that Texas Pacific +remains committed to it. + +Last spring, Mr. Peterson met Mr. Bonderman in Aspen to +talk about Hotwire and to go snowboarding. Mr. Bonderman +seemed perfectly willing to accompany Hotwire down the +steep Internet chute. But he does have his limits on risk, +Mr. Peterson discovered. Before going down the mountain, +Mr. Bonderman strapped on a helmet.   + +http://www.nytimes.com/2002/08/25/business/yourmoney/25TEXA.html?ex=1031278887&ei=1&en=05fca479b8bcee6b + + + +HOW TO ADVERTISE +--------------------------------- +For information on advertising in e-mail newsletters +or other creative advertising opportunities with The +New York Times on the Web, please contact +onlinesales@nytimes.com or visit our online media +kit at http://www.nytimes.com/adinfo + +For general information about NYTimes.com, write to +help@nytimes.com. + +Copyright 2002 The New York Times Company +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00303.72eec73b937da55ad1c649c0092f75ad b/Ch3/datasets/spam/easy_ham/00303.72eec73b937da55ad1c649c0092f75ad new file mode 100644 index 000000000..19953d609 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00303.72eec73b937da55ad1c649c0092f75ad @@ -0,0 +1,122 @@ +From fork-admin@xent.com Mon Aug 26 15:32:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8C4B844170 + for ; Mon, 26 Aug 2002 10:26:39 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:26:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7PHJaZ20140 for ; + Sun, 25 Aug 2002 18:19:37 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6E1B329410F; Sun, 25 Aug 2002 10:17:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id A08F329410C for ; Sun, + 25 Aug 2002 10:16:19 -0700 (PDT) +Received: (qmail 25936 invoked from network); 25 Aug 2002 17:18:12 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 25 Aug 2002 17:18:12 -0000 +Reply-To: +From: "John Hall" +To: "'James Tauber'" , +Subject: My source: RE: A biblical digression +Message-Id: <000e01c24c5b$64b78980$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: <20020825165054.C0EE52FD33@server3.fastmail.fm> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 25 Aug 2002 10:17:46 -0700 + +Remember I didn't say it was necessarily a good source, just that it +looked good. + +The site was http://www.religioustolerance.org/chr_10c7.htm + +My memory of what they said was accurate. I do not have the competence +to defend what they said. James Tauber's response indicates a breadth +of knowledge I can't match. + + +> -----Original Message----- +> From: James Tauber [mailto:jtauber@jtauber.com] +> Sent: Sunday, August 25, 2002 9:51 AM +> To: johnhall@evergo.net; fork@spamassassin.taint.org +> Subject: Re: A biblical digression +> +> On Sat, 24 Aug 2002 11:07:00 -0700, "John Hall" +> said: +> > Ran across a site which claimed to explain the original meaning of +the +> > Ten Commandments. It seems some of those meanings have evolved a +bit, +> > too. +> +> By "meanings have evolved" do you [or they] mean that the Hebrew words +> have changed meaning or that our understanding of the Hebrew words +have +> changed? Or do they posit a pre-Mosaic form of the laws that had +> evolved by time of the Pentateuch? +> +> > In particular, there was a claim that the commandment on stealing +was +> > actually specifically about 'man stealing -- selling a free man into +> > slavery. +> +> This seems bogus to me. A quick check of the text indicates the the +> Hebrew word in question is GANAV which elsewhere in the Pentateuch (eg +> Gen 44.8) is used to mean steal silver and gold amongst other things. +> +> In July 1999, I made the following comment in response to a similar +> claim about the "real" meaning of one of the ten commandments: +> +> """ +> > The translations since cause problems at each successive remove +> +> We have the original language versions, though, so this is not an +> issue. +> +> > I'm sure most everyone is familiar with the argument that the +meaning of +> the commandment +> > is 'thou shalt not murder' rather than 'kill,' +> +> This has nothing to do with successive translations. It is based on +our +> knowledge of the meaning of the Hebrew word "ratsach". Most modern +> translations I've seen translate it "murder" but elsewhere the word is +> used +> of an animal killing a human (something for which most English +speakers +> wouldn't use the word "murder"). +> """ +> - http://www.xent.com/FoRK-archive/july99/0163.html +> +> +> +> James +> -- +> James Tauber +> jtauber@jtauber.com + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00304.d02fe9b0a4d9111f79643c1e0793d846 b/Ch3/datasets/spam/easy_ham/00304.d02fe9b0a4d9111f79643c1e0793d846 new file mode 100644 index 000000000..ea0204e6f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00304.d02fe9b0a4d9111f79643c1e0793d846 @@ -0,0 +1,99 @@ +From fork-admin@xent.com Mon Aug 26 15:32:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 25B3444162 + for ; Mon, 26 Aug 2002 10:26:38 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:26:38 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7PGqXZ19440 for ; + Sun, 25 Aug 2002 17:52:34 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D98332940AA; Sun, 25 Aug 2002 09:50:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from www.fastmail.fm (fastmail.fm [209.61.183.86]) by xent.com + (Postfix) with ESMTP id EC96C2940A2 for ; Sun, + 25 Aug 2002 09:49:07 -0700 (PDT) +Received: from www.fastmail.fm (localhost [127.0.0.1]) by + localhost.localdomain (Postfix) with ESMTP id 6EF3D6DB19; Sun, + 25 Aug 2002 11:50:57 -0500 (CDT) +Received: from server3.fastmail.fm (server3.internal [10.202.2.134]) by + www.fastmail.fm (Postfix) with ESMTP id 9B61F6DAFF; Sun, 25 Aug 2002 + 11:50:56 -0500 (CDT) +Received: by server3.fastmail.fm (Postfix, from userid 99) id C0EE52FD33; + Sun, 25 Aug 2002 11:50:54 -0500 (CDT) +Content-Disposition: inline +Content-Transfer-Encoding: 8bit +Content-Type: text/plain; charset="ISO-8859-1" +MIME-Version: 1.0 +X-Mailer: MIME::Lite 1.2 (F2.6; T1.001; A1.48; B2.12; Q2.03) +From: "James Tauber" +To: johnhall@evergo.net, fork@spamassassin.taint.org +X-Epoch: 1030294257 +X-Sasl-Enc: P8OwrRaDs2VlLKfQnqm1Zg +Subject: Re: A biblical digression +Message-Id: <20020825165054.C0EE52FD33@server3.fastmail.fm> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 25 Aug 2002 16:50:54 UT + +On Sat, 24 Aug 2002 11:07:00 -0700, "John Hall" +said: +> Ran across a site which claimed to explain the original meaning of the +> Ten Commandments. It seems some of those meanings have evolved a bit, +> too. + +By "meanings have evolved" do you [or they] mean that the Hebrew words +have changed meaning or that our understanding of the Hebrew words have +changed? Or do they posit a pre-Mosaic form of the laws that had +evolved by time of the Pentateuch? + +> In particular, there was a claim that the commandment on stealing was +> actually specifically about 'man stealing -- selling a free man into +> slavery. + +This seems bogus to me. A quick check of the text indicates the the +Hebrew word in question is GANAV which elsewhere in the Pentateuch (eg +Gen 44.8) is used to mean steal silver and gold amongst other things. + +In July 1999, I made the following comment in response to a similar +claim about the "real" meaning of one of the ten commandments: + +""" +> The translations since cause problems at each successive remove + +We have the original language versions, though, so this is not an +issue. + +> I'm sure most everyone is familiar with the argument that the meaning of the commandment +> is 'thou shalt not murder' rather than 'kill,' + +This has nothing to do with successive translations. It is based on our +knowledge of the meaning of the Hebrew word "ratsach". Most modern +translations I've seen translate it "murder" but elsewhere the word is +used +of an animal killing a human (something for which most English speakers +wouldn't use the word "murder"). +""" +- http://www.xent.com/FoRK-archive/july99/0163.html + + + +James +-- + James Tauber + jtauber@jtauber.com +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00305.4d30f302b0e02fed5944d83cf2de08e4 b/Ch3/datasets/spam/easy_ham/00305.4d30f302b0e02fed5944d83cf2de08e4 new file mode 100644 index 000000000..91467d5d0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00305.4d30f302b0e02fed5944d83cf2de08e4 @@ -0,0 +1,346 @@ +From fork-admin@xent.com Mon Aug 26 15:32:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0AE2744171 + for ; Mon, 26 Aug 2002 10:26:41 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:26:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7Q1SxZ04063 for ; + Mon, 26 Aug 2002 02:29:08 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D77BA2940A0; Sun, 25 Aug 2002 18:26:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from granger.mail.mindspring.net (granger.mail.mindspring.net + [207.69.200.148]) by xent.com (Postfix) with ESMTP id DB8FA29409E for + ; Sun, 25 Aug 2002 18:25:57 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + granger.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17j8fN-0006PA-00; + Sun, 25 Aug 2002 21:27:42 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: Digital Bearer Settlement List , fork@spamassassin.taint.org, + cypherpunks@lne.com, dcsb@ai.mit.edu +From: "R. A. Hettinga" +Subject: TGE: Thugs of South Boston and The Revenge of the Bandit Princess +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 25 Aug 2002 21:18:34 -0400 + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Thugs of South Boston and The Revenge of the Bandit Princess + + +The Geodesic Economy +Robert A. Hettinga +Sunday, August 25, 2002 + +(BOSTON) When you think about it one way, the FBI/Winter Hill vs. +Patriarcha/Angiulo Cosa Nostra fight was just another race war +between thugs. + +Put crudely, and at its most racist, the FBI and the Winter Hill Gang +were the (mostly) Irish thugs, and Patriarcha's "family" were, of +course, the (mostly) Italian thugs. + + +Think Scorsese's upcoming "Gangs of New York", only with +counter-reformatory overtones. Hoover's South Boston "social-club" +putsch, starting in the mid 1960's, was particularly audacious in +hindsight. The U.S. Federal Government actually decided to underwrite +a reversal of the prohibition-era capture of the nation's rackets by +the Italians from the Irish. The fact that the plot was hatched not +for New York, but for South Boston, the most Irish place in the US, +only makes even more gigantic the Big Lie that was told by the FBI to +its ostensible political masters about bringing down organized crime +there once and for all. + +The result, as we all found out, wasn't swapping the heroin of +Italian Boston mob violence for Irish methadone. Hoover was, +posthumously, swapping it for Oxycontin, or crystal methamphetamine +- -- or, more properly, PCP. The absolute psychopathology of violence +in Whitey Bulger's crack-cocaine-era reign of Boston's drug markets, +like the identical FBI-sponsored reigns or violent horror by other +also-rans in cities across the US as a whole, went up whole orders of +magnitude, not mere percentage points. + +As Stalin said once, quantity has a quality all it's own. And, make +no mistake, J. Edgar Hoover was directly responsible that "quality" +of carnage, nation-wide. + + +So, yes, on paper at least, it really *was* just the swapping of one +gang of racist thugs for another, and the result was, on paper, at +least, business as usual. Same stuff, different century, with +apparently decent people like Mr. Salvati et.al accidently ground on +the gears of "justice" like so much hamburger. + +However, to be much more macabre about it, that hamburger was +"greasing", if you will, an auto de fe only a homicidal lunatic could +love: a perfectly functioning market, legislated out of existence -- +on paper, if nowhere else -- by government fiat and the, back-door, +but still elitist, will to power of H.L. Mencken's famous "bluenoses +and busybodies". + + +It all starts, like all true evil does, from the most innocent of +beginnings. What she couldn't do to alcohol, teatotaling Mrs. Grundy +then tried to do to anything else she could think of that had a +smaller, "manageable" demand. The bloody result was, like nine more +heads of the hydra, an increasingly ubiquitous universal prohibition, +in more markets, and for more things, as the 20th century wore on. + +Every time some recreational drug was found to be addictive, or +harmful, or physically distasteful, or carcinogenic -- or, now, +apparently, fattening -- and then prohibited, exactly the same thing +happened to its markets that happened to alcohol during the Volstead +years. A *larger* market than before the prohibition. Hugely +lucrative profits for anyone with the moral stomach to violently +scale newly-legislated "barriers to competition" imposed on them by +the state. Increasingly violent attacks by the government on users of +those substances. And, finally, the ultimate in evil -- the kind of +evil this country actually fought wars to end -- increasingly +coercive axe-handle beatings, by our own government, of the sacred +liberty of the average, but now unavoidably-law-breaking, citizenry. + +As Ayn Rand cynically observed a long time ago, you don't need +government if nobody's breaking the law. In some twisted corollary to +Parkinson's Law, governments, to survive, *need* more people, +breaking more laws, or they can never justify the money they +confiscate at tax time. + +And, to bring us back to the point, David Friedman would probably +echo here his father Milton's famous observation that government +regulations only benefit the regulated sellers in a given market, and +never the consumer, much less the economy as a whole. Even, +*especially*, if those sellers are *breaking* the law, as they are in +the increasingly ubiquitous prohibition of risky behavior that our +government now imposes on us. + + +And there, absent the apparent grace of Mr. Hoover, went Mr. Salvati. + +In fact, Hayek himself, in "The Road to Serfdom", couldn't have +predicted any better the gory consequences of Hoover's blatant +imposition, "for our own good", of Vietnam-era statist power at the +neighborhood level. And, furthermore, *Stalin* couldn't have had +better "useful idiots" than Hoover did -- and neither, by an +absolutely literal extension, did Whitey Bulger after Hoover. + +Useful idiots on both sides of the congressional aisle. Idiots who +were eating out of Hoover's power-craven hand for the entire middle +of the 20th century -- and Whitey Bulger's hand, whether they knew it +or not, until the end of the millennium. A time, you'll notice, which +saw the increasingly steady imposition of "mob" violence, and market +control, from both state and illegal interests, way beyond the +imaginings of even the most power-mad, rum-running, stock-kiting, +movie-flopping, bureau-pumping, Nazi-appeasing Irish-Bostonian Little +Caesar. Or, as for that matter, his safely trust-funded, and now +strictly political, descendents. + +In terms of actual financial economics, think of what happened to Mr. +Salvati and the others, dead or alive, as a "transfer-price", in +human lives, of the inevitable consequence of MacNamara-style +Vietnam-era Keynesian "social-cost" input-output accounting at its +most despicable, and you can almost begin to fathom the atrocity that +was committed by Hoover, and his co-religionists in state economic +control, in the name of what really was, as you'll now agree, just a +race war between thugs up in Boston. + + +This shouldn't be a surprise, really. All race wars are at least +fought by thugs, though they're usually conceived elsewhere, and +endorsed, at the time, by all the "right" people, for all the "right" +reasons. + +As far as the FBI itself goes, remember Mancur Olson's observation +that a "prince" is just a stationary bandit. + +Though, given his penchant for women's clothing, for other men, and, +what's actually obscene, for violently hypocritical treatment of +people of his own affectional preference, I suppose we can call J. +Edgar Hoover a bandit "princess", instead. + +"Bandit Queen", of course, would be a grievous insult to queens -- +and real bandits -- everywhere. + +Cheers, +RAH +- --------- + + +http://www.nytimes.com/2002/08/25/national/25FBI.html?todaysheadlines= +&pagewanted=print&position=top + + +The New York Times +August 25, 2002 +Hoover's F.B.I. and the Mafia: Case of Bad Bedfellows Grows By FOX +BUTTERFIELD + +BOSTON, Aug. 24 - It was March 1965, in the early days of J. Edgar +Hoover's war against the Mafia. F.B.I. agents, say Congressional +investigators, eavesdropped on a conversation in the headquarters of +New England's organized-crime boss, Raymond Patriarca. + +Two gangsters, Joseph Barboza and Vincent Flemmi, wanted Mr. +Patriarca's permission to kill a small-time hoodlum, Edward Deegan, +"as they were having a problem with him," according to an F.B.I. log +of the conversation. "Patriarca ultimately furnished this O.K.," the +F.B.I. reported, and three days later Mr. Deegan turned up dead in an +alley, shot six times. + +It was an extraordinary situation: The Federal Bureau of +Investigation had evidence ahead of time that two well-known +gangsters were planning a murder and that the head of the New England +Mafia was involved. + +But when indictments in the case were handed down in 1967, the real +killers - who also happened to be informers for the F.B.I. - were +left alone. Four other men were tried, convicted and sentenced to +death or life in prison for the murder, though they had had nothing +to do with it. + +One, Joseph Salvati, who spent 30 years in prison, filed notice with +the Justice Department last week that he planned to sue the F.B.I. +for $300 million for false imprisonment. + +His is the latest in a series of lawsuits against the F.B.I., the +Justice Department and some F.B.I. agents growing out of the tangled, +corrupt collaboration between gangsters and the F.B.I.'s Boston +office in its effort to bring down the mob. + +The lawsuits are based on evidence uncovered in the last five years +in a judicial hearing and a Justice Department inquiry. But some of +the most explosive evidence has only recently come to light, +including documents detailing conversation in which Mr. Patriarca +approved the murder. They were released as part of an investigation +by the House Committee on Government Reform, which has pressured the +department into turning over records about the F.B.I in Boston. + +The documents show that officials at F.B.I. headquarters, apparently +including Mr. Hoover, knew as long ago as 1965 that Boston agents +were employing killers and gang leaders as informers and were +protecting them from prosecution. + +"J. Edgar Hoover crossed over the line and became a criminal +himself," said Vincent Garo, Mr. Salvati's lawyer. "He allowed a +witness to lie to put an innocent man in prison so he could protect +one of his informants." + +Mr. Barboza was a crucial witness at trial against Mr. Salvati and +may have implicated him because Mr. Salvati owed $400 to a loan shark +who worked for Mr. Barboza. + +Asked about the documents showing that Mr. Hoover knew of Mr. +Salvati's innocence when he was put on trial, Gail Marcinkiewicz, a +spokeswoman for the F.B.I. in Boston, declined to comment, citing the +pending litigation. + +A Justice Department task force is continuing to investigate +misconduct in the Boston office. In one of the first results of the +investigation, one retired agent, John J. Connolly, is awaiting +sentencing next month after being convicted of racketeering and +obstruction of justice for helping two other mob leaders who were +F.B.I. informers, James Bulger and Stephen Flemmi. Vincent and +Stephen Flemmi are brothers. + +The Government Reform Committee, led by Representative Dan Burton, +Republican of Indiana, has uncovered memorandums from the Boston +office to headquarters in Washington revealing the bureau's knowledge +that Vincent Flemmi and Mr. Barboza were involved in killing Mr. +Deegan. A memorandum a week after the killing described the crime, +including who fired the first shot. + +Then, on June 4, 1965, Mr. Hoover's office demanded to know what +progress was being made in developing Vincent Flemmi as an informer. + +In a reply five days later, the special agent in charge of the Boston +office said that Mr. Flemmi was in a hospital recovering from gunshot +wounds but because of his connections to Mr. Patriarca "potentially +could be an excellent informant." + +The agent also informed Mr. Hoover that Mr. Flemmi was known to have +killed seven men, "and, from all indications, he is going to continue +to commit murder." Nevertheless, the agent said, "the informant's +potential outweighs the risk involved." + +A Congressional investigator called the exchange chilling. "The most +frightening part is that after being warned about Flemmi's murders, +the director does not even respond," the investigator said. "There is +no message not to use a murderer as a government informant." + +The origin of the corruption scandal was public and political +pressure on Mr. Hoover to move more forcefully against the growing +power of the Mafia, which he had largely ignored. In Boston, F.B.I. +agents recruited Mr. Barboza and Mr. Flemmi and developed close ties +to a rival criminal organization, the Winter Hill Gang, led by Mr. +Bulger. + +Both sides got what they wanted, according to the investigations and +the trial of Mr. Connolly. The F.B.I. got information that eventually +helped destroy the Patriarca and Angiulo families, which controlled +organized crime in New England. Mr. Bulger's gang was able to take +over the rackets in Boston, sell drugs and even commit murder while +the F.B.I. looked the other way. + +One reason the F.B.I. may not have used its information about Mr. +Patriarca's involvement in the Deegan murder, Congressional +investigators say, is that it came from an illegal listening device +in his Providence, R.I., headquarters. The F.B.I. agent who +transcribed the conversation made it appear that the information was +coming from unnamed informants, to disguise the use of the device, +the investigators say. + +Mr. Salvati, a former truck driver, now 69, had his sentence commuted +in 1997 by Gov. William F. Weld. Last year, while he was still on +parole, his murder conviction was dismissed by a Massachusetts state +judge after the Justice Department task force made public documents +suggesting his innocence. + +Two of the other wrongly convicted men died in prison. Their +survivors have joined the fourth man, Peter Limone, in a $375 million +lawsuit against the Justice Department. Mr. Limone was sentenced to +die in the electric chair. His life was spared only when +Massachusetts outlawed the death penalty in 1974. + +Mr. Salvati lives in a modest apartment in Boston's North End with +his wife, Marie, who visited him in prison every week during those 30 +years. Each week Mr. Salvati sent her a romantic card, which she put +on the television set. It was, Mr. Garo said, all they had of each +other. + +-----BEGIN PGP SIGNATURE----- +Version: PGP 7.5 + +iQA/AwUBPWmB2sPxH8jf3ohaEQL9qgCgxHq0ee06UEsNv8u8wgvmjf9K7S4An3Rb +3srsGomWjNDwIaKoEHOfNHpI +=OELD +-----END PGP SIGNATURE----- + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00306.a94c65293f1aa18dd41198b867329cb9 b/Ch3/datasets/spam/easy_ham/00306.a94c65293f1aa18dd41198b867329cb9 new file mode 100644 index 000000000..badeaf7bc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00306.a94c65293f1aa18dd41198b867329cb9 @@ -0,0 +1,76 @@ +From fork-admin@xent.com Mon Aug 26 16:02:17 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D03F84415D + for ; Mon, 26 Aug 2002 11:00:01 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 16:00:01 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QEbFZ25119 for ; + Mon, 26 Aug 2002 15:37:20 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 37F612940CF; Mon, 26 Aug 2002 07:12:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from www.fastmail.fm (fastmail.fm [209.61.183.86]) by xent.com + (Postfix) with ESMTP id DD0C42940C6 for ; Mon, + 26 Aug 2002 07:11:25 -0700 (PDT) +Received: from www.fastmail.fm (localhost [127.0.0.1]) by + localhost.localdomain (Postfix) with ESMTP id 5D82E6DC0B; Mon, + 26 Aug 2002 09:13:19 -0500 (CDT) +Received: from server3.fastmail.fm (server3.internal [10.202.2.134]) by + www.fastmail.fm (Postfix) with ESMTP id 0A70F6DC05; Mon, 26 Aug 2002 + 09:13:18 -0500 (CDT) +Received: by server3.fastmail.fm (Postfix, from userid 99) id 668E12FD84; + Mon, 26 Aug 2002 09:13:15 -0500 (CDT) +Content-Disposition: inline +Content-Transfer-Encoding: 8bit +Content-Type: text/plain; charset="ISO-8859-1" +MIME-Version: 1.0 +X-Mailer: MIME::Lite 1.2 (F2.6; T1.001; A1.48; B2.12; Q2.03) +From: "James Tauber" +To: johnhall@evergo.net, fork@spamassassin.taint.org +X-Epoch: 1030371199 +X-Sasl-Enc: iWV+p6yrD5pZuD2zbyVJhA +Subject: Re: My source: RE: A biblical digression +Message-Id: <20020826141315.668E12FD84@server3.fastmail.fm> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 14:13:15 UT + + +>>From what I read, the rest of it looked quite good so it does seem odd +they would make the seemingly incorrect blanket statement about the +Hebrew for "steal". One possibility is that the page is a summary of +information gathered from a variety of sources of varying qualities. + +James + +On Sun, 25 Aug 2002 10:17:46 -0700, "John Hall" +said: +> Remember I didn't say it was necessarily a good source, just that it +> looked good. +> +> The site was http://www.religioustolerance.org/chr_10c7.htm +> +> My memory of what they said was accurate. I do not have the competence +> to defend what they said. James Tauber's response indicates a breadth +> of knowledge I can't match. + + +-- + James Tauber + jtauber@jtauber.com +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00307.a2256465cea488cb0ffe6da0a2b0fb07 b/Ch3/datasets/spam/easy_ham/00307.a2256465cea488cb0ffe6da0a2b0fb07 new file mode 100644 index 000000000..34f17f83b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00307.a2256465cea488cb0ffe6da0a2b0fb07 @@ -0,0 +1,52 @@ +From fork-admin@xent.com Mon Aug 26 16:46:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8D16644156 + for ; Mon, 26 Aug 2002 11:46:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 16:46:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QFjcZ31117 for ; + Mon, 26 Aug 2002 16:45:39 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id CAE872940CD; Mon, 26 Aug 2002 08:43:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mx.spiritone.com (mx.spiritone.com [216.99.221.5]) by + xent.com (Postfix) with SMTP id 326B92940B7 for ; + Mon, 26 Aug 2002 08:42:57 -0700 (PDT) +Received: (qmail 7711 invoked from network); 26 Aug 2002 15:38:11 -0000 +Received: (ofmipd 216.99.213.165); 26 Aug 2002 15:37:49 -0000 +Message-Id: +From: "RossO" +To: fork@spamassassin.taint.org +MIME-Version: 1.0 (Apple Message framework v482) +Content-Type: text/plain; charset=US-ASCII; format=flowed +Subject: Computational Recreations +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 26 Aug 2002 08:38:09 -0700 + +Does anyone here know if the Computational Recreations columns from +Scientific American in the 70's/80's were compiled into a book or two? I +think I remember Martin Gardner publishing the earlier Mathematical +Recreations in a couple of hard covers, but I'm unsure about the later +column. Help? + +...Ross... + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00308.ba65bb8c48b44b1767ed1c1de1825892 b/Ch3/datasets/spam/easy_ham/00308.ba65bb8c48b44b1767ed1c1de1825892 new file mode 100644 index 000000000..0940df3f4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00308.ba65bb8c48b44b1767ed1c1de1825892 @@ -0,0 +1,60 @@ +From fork-admin@xent.com Mon Aug 26 16:57:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9B45F44156 + for ; Mon, 26 Aug 2002 11:57:02 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 16:57:02 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QFqfZ31604 for ; + Mon, 26 Aug 2002 16:52:42 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E2431294171; Mon, 26 Aug 2002 08:50:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mlug.missouri.edu (mlug.missouri.edu [128.206.61.230]) by + xent.com (Postfix) with ESMTP id 7371B29416F for ; + Mon, 26 Aug 2002 08:49:33 -0700 (PDT) +Received: from mlug.missouri.edu (mogmios@localhost [127.0.0.1]) by + mlug.missouri.edu (8.12.3/8.12.3/Debian -4) with ESMTP id g7QFpTKL021128 + (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=FAIL); + Mon, 26 Aug 2002 10:51:30 -0500 +Received: from localhost (mogmios@localhost) by mlug.missouri.edu + (8.12.3/8.12.3/Debian -4) with ESMTP id g7QFpTIt021124; Mon, + 26 Aug 2002 10:51:29 -0500 +From: Michael +To: Lucas Gonze +Cc: FoRK +Subject: Re: The GOv gets tough on Net Users.....er Pirates.. +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 10:51:29 -0500 (CDT) + +Hire a really talented skywriter to doodle nudie pics in the sky and see +if they figure out what to charge you with. Exactly how far into the sky +does the border of your local district reach? + +> > If the creator didnt say you could have it without paying, it's theft, +> > so simple, hell that's even in all the major holy books. +> +> Wow, I've got a great idea! I'll hire a skywriter to write "you can't +> look at this without paying," then lock up everybody who looked at it +> and didn't pay! It can't fail -- Jesus is on my side! + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00309.ac6da28f3f125547c80fb3fccc295f0d b/Ch3/datasets/spam/easy_ham/00309.ac6da28f3f125547c80fb3fccc295f0d new file mode 100644 index 000000000..9cd28edd9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00309.ac6da28f3f125547c80fb3fccc295f0d @@ -0,0 +1,65 @@ +From fork-admin@xent.com Mon Aug 26 18:01:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A263843F99 + for ; Mon, 26 Aug 2002 13:01:12 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 18:01:12 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QGvfZ01544 for ; + Mon, 26 Aug 2002 17:57:41 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9FA452940B7; Mon, 26 Aug 2002 09:55:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 42DCE2940A2 for ; Mon, + 26 Aug 2002 09:54:52 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 347AA3EE33; + Mon, 26 Aug 2002 12:59:07 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 3305F3EE32; Mon, 26 Aug 2002 12:59:07 -0400 (EDT) +From: Tom +To: RossO +Cc: fork@spamassassin.taint.org +Subject: Re: Computational Recreations +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 12:59:07 -0400 (EDT) + +On 26 Aug 2002, RossO wrote: + +--]Does anyone here know if the Computational Recreations columns from +--]Scientific American in the 70's/80's were compiled into a book or two? I +--]think I remember Martin Gardner publishing the earlier Mathematical +--]Recreations in a couple of hard covers, but I'm unsure about the later +--]column. Help? +--] + +Not sure about MG, though I know pretty much everything he penned got into +print at one time or another. SA needs to do what National Geo did and +put out thier back issues on CD. + +Post MG in the 80's there were the colums by A K Dewdney that I dug a +bunch put into a book called Turing Omnibus and then there is , of +course, all the goodens put out by Dougy Hoffstadler. + + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00310.66b26e342f980a716f81bb66e9b28c92 b/Ch3/datasets/spam/easy_ham/00310.66b26e342f980a716f81bb66e9b28c92 new file mode 100644 index 000000000..1b19f3c78 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00310.66b26e342f980a716f81bb66e9b28c92 @@ -0,0 +1,63 @@ +From fork-admin@xent.com Mon Aug 26 18:01:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D912643F9B + for ; Mon, 26 Aug 2002 13:01:14 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 18:01:14 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QH2GZ01630 for ; + Mon, 26 Aug 2002 18:02:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 98CA7294176; Mon, 26 Aug 2002 09:56:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (cpe-65-172-233-109.sanbrunocable.com + [65.172.233.109]) by xent.com (Postfix) with ESMTP id 4C77F29416F for + ; Mon, 26 Aug 2002 09:55:54 -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Mon, 26 Aug 2002 16:56:55 -08:00 +Message-Id: <3D6A5DD7.1030008@barrera.org> +From: "Joseph S. Barrera III" +Organization: Wings over the World +User-Agent: Mutt 5.00.2919.6900 DM (Nigerian Scammer Special Edition) +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: "R. A. Hettinga" +Cc: fork@spamassassin.taint.org, Juliet Barrera +Subject: Re: "Ouch. Ouch. Ouch. Ouch. Ouch...."(was Re: My brain hurts) +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 09:56:55 -0700 + +R. A. Hettinga wrote: +> And then there was the one from Prairie Home Companion: +> +> Q. Why is a viola larger than a violin? +> A. It just looks that way because a violin player's head is bigger. + +Suggested variation: + +Q. Why does the concertmaster play a smaller violin + than the rest of the violinists? +A. It just looks that way because his head is bigger. + +&c&c&c + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00311.44caa311ef0bcbaf2efd0c9a4e09673f b/Ch3/datasets/spam/easy_ham/00311.44caa311ef0bcbaf2efd0c9a4e09673f new file mode 100644 index 000000000..428e9c770 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00311.44caa311ef0bcbaf2efd0c9a4e09673f @@ -0,0 +1,66 @@ +From fork-admin@xent.com Mon Aug 26 19:34:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 83D2443F9B + for ; Mon, 26 Aug 2002 14:34:22 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 19:34:22 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QISdZ04518 for ; + Mon, 26 Aug 2002 19:28:40 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6ECAE2940A2; Mon, 26 Aug 2002 11:26:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (cpe-65-172-233-109.sanbrunocable.com + [65.172.233.109]) by xent.com (Postfix) with ESMTP id C89C129409E for + ; Mon, 26 Aug 2002 11:25:06 -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Mon, 26 Aug 2002 15:26:04 -08:00 +Message-Id: <3D6A488C.7000609@barrera.org> +From: "Joseph S. Barrera III" +Organization: Wings over the World +User-Agent: Mutt 5.00.2919.6900 DM (Nigerian Scammer Special Edition) +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: "Adam L. Beberg" +Cc: Tom , fork@spamassassin.taint.org +Subject: Re: The GOv gets tough on Net Users.....er Pirates.. +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 08:26:04 -0700 + +Adam L. Beberg wrote: +> Fair use needs to be clarified a bit + +That's an understatement!!! + +> How else do i ever have hope of finding a job working for someone +> that makes things people are supposed to ... *drumroll* pay for. + +Well, you could damn well get a fucking better attitude. +I practically handed you a job the other week and you +pissed all over me. I'm done helping you. You have joined +a very exclusive club that up to now has only had my sister +as a member. + +- Joe + + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00312.2909c5a1114ade0b2aa7c3da6960a3f7 b/Ch3/datasets/spam/easy_ham/00312.2909c5a1114ade0b2aa7c3da6960a3f7 new file mode 100644 index 000000000..c05d270f5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00312.2909c5a1114ade0b2aa7c3da6960a3f7 @@ -0,0 +1,67 @@ +From fork-admin@xent.com Mon Aug 26 19:34:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 371FA44155 + for ; Mon, 26 Aug 2002 14:34:23 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 19:34:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QIY4Z04572 for ; + Mon, 26 Aug 2002 19:34:04 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DAEAB29417D; Mon, 26 Aug 2002 11:29:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx2.ucsc.edu [128.114.129.35]) by + xent.com (Postfix) with ESMTP id 3657C29417B for ; + Mon, 26 Aug 2002 11:29:00 -0700 (PDT) +Received: from Tycho (dhcp-63-177.cse.ucsc.edu [128.114.63.177]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g7QIULg21491 for + ; Mon, 26 Aug 2002 11:30:21 -0700 (PDT) +From: "Jim Whitehead" +To: "FoRK" +Subject: How unlucky can you get? +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Importance: Normal +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 11:28:11 -0700 + +So, last night around 5:30AM I'm woken up by a loud *craaack*, followed by +one of the most dreaded sounds a homeowner ever hears: vast quantities of +water spilling onto the floor. The water is coming from the bathroom, the +toilet specifically. Turns out the water cistern on the top of the toilet +had cracked down the side, and was spilling out all the water. + +So, after shutting off the water and mopping up, I was left to ponder what +are the odds of having mechanical failure of a large rectangular porcelain +bowl, in the absence of any visible stressors (like someone striking it with +a sledgehammer)? We hadn't done anything unusual to the toilet in the recent +past -- just normal use. I've *never* heard of this happening to anyone I +know. The guts, yeah, they fail all the time. But the storage bowl -- never. + +Geesh. + +- Jim + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00313.966f088102b6c7932c1a3655abd2a9be b/Ch3/datasets/spam/easy_ham/00313.966f088102b6c7932c1a3655abd2a9be new file mode 100644 index 000000000..2efafd13d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00313.966f088102b6c7932c1a3655abd2a9be @@ -0,0 +1,54 @@ +From fork-admin@xent.com Mon Aug 26 19:44:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7E64E43F99 + for ; Mon, 26 Aug 2002 14:44:42 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 19:44:42 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QIgfZ04806 for ; + Mon, 26 Aug 2002 19:42:42 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B7B46294164; Mon, 26 Aug 2002 11:40:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 2495E294162 for ; Mon, + 26 Aug 2002 11:39:11 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 55E983EE34; + Mon, 26 Aug 2002 14:43:23 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 4E6013EDEC; Mon, 26 Aug 2002 14:43:23 -0400 (EDT) +From: Tom +To: Jim Whitehead +Cc: FoRK +Subject: Re: How unlucky can you get? +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 14:43:23 -0400 (EDT) + +On Mon, 26 Aug 2002, Jim Whitehead wrote: +--]a sledgehammer)? We hadn't done anything unusual to the toilet in the recent +--]past -- just normal use. I've *never* heard of this happening to anyone I +--]know. The guts, yeah, they fail all the time. But the storage bowl -- never. +--] + +Do you have any Tesla nuts inthe hood? Them hooligans and thier beams.. + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00314.611159749e214b996589d557e335648e b/Ch3/datasets/spam/easy_ham/00314.611159749e214b996589d557e335648e new file mode 100644 index 000000000..ecfc0271f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00314.611159749e214b996589d557e335648e @@ -0,0 +1,76 @@ +From fork-admin@xent.com Mon Aug 26 19:54:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A126543F99 + for ; Mon, 26 Aug 2002 14:54:52 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 19:54:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QIlbZ05026 for ; + Mon, 26 Aug 2002 19:47:37 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 168A62941BE; Mon, 26 Aug 2002 11:42:11 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from t2.serverbox.net (t2.serverbox.net [64.71.187.100]) by + xent.com (Postfix) with SMTP id D8BBA294182 for ; + Mon, 26 Aug 2002 11:41:58 -0700 (PDT) +Received: (qmail 28885 invoked from network); 26 Aug 2002 18:43:34 -0000 +Received: from unknown (HELO techdirt.techdirt.com) (12.236.16.241) by + t2.serverbox.net with SMTP; 26 Aug 2002 18:43:34 -0000 +Message-Id: <5.1.1.6.0.20020826113243.034de5d0@techdirt.com> +X-Sender: mikenospam@techdirt.com +X-Mailer: QUALCOMM Windows Eudora Version 5.1.1 +To: "Adam L. Beberg" , Tom +From: Mike Masnick +Subject: Re: The GOv gets tough on Net Users.....er Pirates.. +Cc: +In-Reply-To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii"; format=flowed +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 11:41:12 -0700 + +At 01:12 AM 8/24/02 -0700, Adam L. Beberg wrote: + +>If the creator didnt say you could have it without paying, it's theft, so +>simple, hell that's even in all the major holy books. + +In which world are we talking about? That may be true for the first sale, +but once something is out in the world, the "creator" loses control... If I +buy a chair you built, and then decide to give it away to my neighbor, by +you're definition, he just stole from you. + +>Fair use needs to be clarified a bit and then I hope they start locking +>people up. How else do i ever have hope of finding a job working for someone +>that makes things people are supposed to ... *drumroll* pay for. + +Why is it that people don't understand that giving stuff away is a +perfectly acceptable tactic in capitalist businesses? In many places, it's +called "advertising": "buy one, get one free", "free shipping on any order +over $25", "buy this couch, and get a coffee table for free", "free popcorn +with any movie rental", "free doorprize to the first 100 people who enter", +"the author will be signing books (for free) at such and such bookstore". + +Access to free stuff often helps to sell other stuff. Just because you +(and the entertainment industry, it seems) can't be creative enough to come +up with a business model to leverage free stuff into paid stuff... don't +take it out on the rest of us. + +Mike + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00315.57e3c784e646e449c12675f2981a956f b/Ch3/datasets/spam/easy_ham/00315.57e3c784e646e449c12675f2981a956f new file mode 100644 index 000000000..6d7da9984 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00315.57e3c784e646e449c12675f2981a956f @@ -0,0 +1,94 @@ +From fork-admin@xent.com Mon Aug 26 20:25:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BD71C43F9B + for ; Mon, 26 Aug 2002 15:25:35 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 20:25:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QJPhZ06227 for ; + Mon, 26 Aug 2002 20:25:44 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B6855294162; Mon, 26 Aug 2002 12:23:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id 245A8294139 for ; + Mon, 26 Aug 2002 12:22:56 -0700 (PDT) +Received: (qmail 11661 invoked by uid 19621); 26 Aug 2002 19:24:22 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 26 Aug 2002 19:24:22 -0000 +Subject: Re: The GOv gets tough on Net Users.....er Pirates.. +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: <5.1.1.6.0.20020826113243.034de5d0@techdirt.com> +References: + <5.1.1.6.0.20020826113243.034de5d0@techdirt.com> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1030390769.2768.141.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 26 Aug 2002 12:39:29 -0700 + +On Mon, 2002-08-26 at 11:41, Mike Masnick wrote: +> +> In which world are we talking about? That may be true for the first sale, +> but once something is out in the world, the "creator" loses control... If I +> buy a chair you built, and then decide to give it away to my neighbor, by +> you're definition, he just stole from you. + + +There are specific statutory exemptions to the "first sale" principle of +fair use in the US. For example, audio recordings have such an +exemption (dating from the early '80s IIRC), which is why you can't +(legally) be in the business of renting audio CDs; the creators can +control what you do with it after they've sold it to you. Certain +industries would like to extend similar exemptions to other products -- +there is no theoretical limit to what Congress could revoke such +privileges on. + + +> Access to free stuff often helps to sell other stuff. Just because you +> (and the entertainment industry, it seems) can't be creative enough to come +> up with a business model to leverage free stuff into paid stuff... don't +> take it out on the rest of us. + + +The problem with the entertainment industry is that they engage in +business and pricing tactics that make anything Microsoft was ever +accused of pale in comparison. If they can't figure out how to make +money doing something, they'll actually burn money to make sure no +"industry outsider" can either for all intents and purposes; control is +more important than maximizing profit as long as they can make a +profit. They don't need your carrot, so they only engage in reasonable +business behavior when you are carrying a very large stick, and few +people swing a stick large enough. They are being chronically +"investigated" by the DoJ for anti-trust, collusion, and similar +activities, but that is mostly just for show. + +Which isn't to say that the entertainment industry won't fall victim to +its own stupidity, but their ability to do arbitrary and capricious +price manipulation with impunity is going to make it a slow decline. + +-James Rogers + jamesr@best.com + + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00316.cec9411f0e3de588aaffde5847356a72 b/Ch3/datasets/spam/easy_ham/00316.cec9411f0e3de588aaffde5847356a72 new file mode 100644 index 000000000..53297831f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00316.cec9411f0e3de588aaffde5847356a72 @@ -0,0 +1,59 @@ +From fork-admin@xent.com Mon Aug 26 21:16:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7324D43F99 + for ; Mon, 26 Aug 2002 16:16:52 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 21:16:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QKGjZ07875 for ; + Mon, 26 Aug 2002 21:16:46 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E4975294172; Mon, 26 Aug 2002 13:14:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f125.law15.hotmail.com [64.4.23.125]) by + xent.com (Postfix) with ESMTP id 4DCE42940AE for ; + Mon, 26 Aug 2002 13:13:31 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 26 Aug 2002 13:15:28 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Mon, 26 Aug 2002 20:15:28 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Re: How unlucky can you get? +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 26 Aug 2002 20:15:28.0792 (UTC) FILETIME=[523DC980:01C24D3D] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 20:15:28 +0000 + +Actually, this is common. I've known a couple of +people who have suffered this. Believe it or not, +you were lucky. You were home, rather than on +vacation, and so you didn't have the intake line +flowing onto the floor for two weeks. + +Now, don't you feel better? + + + +_________________________________________________________________ +Chat with friends online, try MSN Messenger: http://messenger.msn.com + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00317.62e22febb8eeb1d0a49673ddd92b543d b/Ch3/datasets/spam/easy_ham/00317.62e22febb8eeb1d0a49673ddd92b543d new file mode 100644 index 000000000..f078d1b44 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00317.62e22febb8eeb1d0a49673ddd92b543d @@ -0,0 +1,141 @@ +From fork-admin@xent.com Mon Aug 26 21:47:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5F4A043F99 + for ; Mon, 26 Aug 2002 16:47:35 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 21:47:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QKefZ08734 for ; + Mon, 26 Aug 2002 21:40:41 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0A7612940D0; Mon, 26 Aug 2002 13:38:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from axiom.braindust.com (axiom.braindust.com [64.69.71.79]) by + xent.com (Postfix) with ESMTP id 0BD8D294099 for ; + Tue, 20 Aug 2002 15:00:25 -0700 (PDT) +X-Envelope-To: fork@spamassassin.taint.org +Received: from localhost (muses.westel.com [204.244.110.7]) (authenticated + (0 bits)) by axiom.braindust.com (8.12.5/8.11.6) with ESMTP id + g7KM1reH011924 (using TLSv1/SSLv3 with cipher EDH-RSA-DES-CBC3-SHA (168 + bits) verified NO); Tue, 20 Aug 2002 15:01:54 -0700 +Subject: Re: The Curse of India's Socialism +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Cc: "FoRK" +To: +From: Ian Andrew Bell +In-Reply-To: <003f01c2487d$1a326f60$0200a8c0@JMHALL> +Message-Id: <65C23A43-B488-11D6-B8E9-0030657C53EA@ianbell.com> +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 20 Aug 2002 15:01:36 -0700 + +I think that this and other articles confuse Socialism with +Bureaucracy. Libertarianism as implemented in North America is not +exactly the shining pinnacle of economic efficiency. + +Just try starting a telephone company in the US or (even worse) +Canada. It can take a year or more to get the blessing of our own +"Permit Rajs" at the FCC, PUC, and PTTs (or, in the decidedly more +socialist leaning Canada, Industry Canada and the CRTC). + +Yet, despite all of this intense regulation and paper pushing, as +well as regulatory scrutiny by the FTC, SEC, and IRS, the +executives of Telecom Companies have managed to bilk the investment +community for what looks to be tens of billions of dollars. They +finished their routine with the a quadruple lutz -- laying off +hundreds of thousands of workers when it all came crashing down. + +So.. tell me again.. how are we better off? + +-Ian. + + +On Tuesday, August 20, 2002, at 12:09 PM, John Hall wrote: + +> The Mystery of Capital: Why Capitalism Triumphs in the West and Fails +> Everywhere Else -- by Hernando De Soto +> +> Is something I'm reading now. +> +> My impression is that France is not anywhere near the "Permit Raj" +> nightmare that India is (and became). Nor has its market been closed +> like India's has. +> +> But De Soto's work is perhaps just as important or more so. He hasn't +> dealt specifically with India, but I recall examples from Peru, +> Philippines, and Egypt. In Lima, his team took over a year (I think it +> was 2) working 8 hr days to legally register a 1 person company. +> In the +> Philippines, getting legal title can take 20 years. In Egypt, +> about 80% +> of the population in Cairo lives in places where they are officially +> illegal. +> +> India hasn't been helped by its socialism. Socialism has certainly +> helped strangle the country in permits. But perhaps De Soto is right +> that the real crippling thing is keeping most of the people out of the +> legal, official property system. +> +> Putting most of the people in the property system was something +> the west +> only finished about 100 years ago, or Japan did 50 years ago. It +> wasn't +> easy, but we live in a society that doesn't even remember we did it. +> +> +>> -----Original Message----- +>> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +> Robert +>> Harley +>> Sent: Tuesday, August 20, 2002 11:24 AM +>> To: fork@spamassassin.taint.org +>> Subject: Re: The Curse of India's Socialism +>> +>> RAH quoted: +>>> Indians are not poor because there are too many of them; they are +> poor +>>> because there are too many regulations and too much government +>> intervention +>>> -- even today, a decade after reforms were begun. India's greatest +>> problems +>>> arise from a political culture guided by socialist instincts on the +> one +>>> hand and an imbedded legal obligation on the other hand. +>> +>> Nice theory and all, but s/India/France/g and the statements hold just +>> as true, yet France is #12 in the UN's HDI ranking, not #124. +>> +>> +>>> Since all parties must stand for socialism, no party espouses +>>> classical liberalism +>> +>> I'm not convinced that that classical liberalism is a good solution +>> for countries in real difficulty. See Joseph Stiglitz (Nobel for +>> Economics) on the FMI's failed remedies. Of course googling on +>> "Stiglitz FMI" only brings up links in Spanish and French. I guess +>> that variety of spin is non grata in many anglo circles. +>> +>> +>> R +>> http://xent.com/mailman/listinfo/fork +> +> http://xent.com/mailman/listinfo/fork + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00318.5b1d22882c6fbfebcebe12a792b3c6c8 b/Ch3/datasets/spam/easy_ham/00318.5b1d22882c6fbfebcebe12a792b3c6c8 new file mode 100644 index 000000000..84cf3f576 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00318.5b1d22882c6fbfebcebe12a792b3c6c8 @@ -0,0 +1,144 @@ +From fork-admin@xent.com Mon Aug 26 21:47:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7D0AF43F9B + for ; Mon, 26 Aug 2002 16:47:36 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 21:47:36 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QKi8Z08784 for ; + Mon, 26 Aug 2002 21:44:08 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id CB8E2294189; Mon, 26 Aug 2002 13:38:17 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from axiom.braindust.com (axiom.braindust.com [64.69.71.79]) by + xent.com (Postfix) with ESMTP id DA705294099 for ; + Tue, 20 Aug 2002 15:03:21 -0700 (PDT) +X-Envelope-To: fork@spamassassin.taint.org +Received: from localhost (muses.westel.com [204.244.110.7]) (authenticated + (0 bits)) by axiom.braindust.com (8.12.5/8.11.6) with ESMTP id + g7KM4qeH011945 (using TLSv1/SSLv3 with cipher EDH-RSA-DES-CBC3-SHA (168 + bits) verified NO); Tue, 20 Aug 2002 15:04:53 -0700 +Resent-Date: Tue, 20 Aug 2002 15:04:35 -0700 +MIME-Version: 1.0 (Apple Message framework v482) +Cc: "FoRK" +Resent-Message-Id: <65C23A43-B488-11D6-B8E9-0030657C53EA@ianbell.com> +Resent-To: fork@spamassassin.taint.org +To: +Content-Type: text/plain; charset=US-ASCII; format=flowed +Subject: Re: The Curse of India's Socialism +From: Ian Andrew Bell +Content-Transfer-Encoding: 7bit +Message-Id: +Resent-From: Ian Andrew Bell +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 20 Aug 2002 15:01:36 -0700 + +I think that this and other articles confuse Socialism with +Bureaucracy. Libertarianism as implemented in North America is not +exactly the shining pinnacle of economic efficiency. + +Just try starting a telephone company in the US or (even worse) +Canada. It can take a year or more to get the blessing of our own +"Permit Rajs" at the FCC, PUC, and PTTs (or, in the decidedly more +socialist leaning Canada, Industry Canada and the CRTC). + +Yet, despite all of this intense regulation and paper pushing, as +well as regulatory scrutiny by the FTC, SEC, and IRS, the +executives of Telecom Companies have managed to bilk the investment +community for what looks to be tens of billions of dollars. They +finished their routine with the a quadruple lutz -- laying off +hundreds of thousands of workers when it all came crashing down. + +So.. tell me again.. how are we better off? + +-Ian. + + +On Tuesday, August 20, 2002, at 12:09 PM, John Hall wrote: + +> The Mystery of Capital: Why Capitalism Triumphs in the West and Fails +> Everywhere Else -- by Hernando De Soto +> +> Is something I'm reading now. +> +> My impression is that France is not anywhere near the "Permit Raj" +> nightmare that India is (and became). Nor has its market been closed +> like India's has. +> +> But De Soto's work is perhaps just as important or more so. He hasn't +> dealt specifically with India, but I recall examples from Peru, +> Philippines, and Egypt. In Lima, his team took over a year (I think it +> was 2) working 8 hr days to legally register a 1 person company. +> In the +> Philippines, getting legal title can take 20 years. In Egypt, +> about 80% +> of the population in Cairo lives in places where they are officially +> illegal. +> +> India hasn't been helped by its socialism. Socialism has certainly +> helped strangle the country in permits. But perhaps De Soto is right +> that the real crippling thing is keeping most of the people out of the +> legal, official property system. +> +> Putting most of the people in the property system was something +> the west +> only finished about 100 years ago, or Japan did 50 years ago. It +> wasn't +> easy, but we live in a society that doesn't even remember we did it. +> +> +>> -----Original Message----- +>> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +> Robert +>> Harley +>> Sent: Tuesday, August 20, 2002 11:24 AM +>> To: fork@spamassassin.taint.org +>> Subject: Re: The Curse of India's Socialism +>> +>> RAH quoted: +>>> Indians are not poor because there are too many of them; they are +> poor +>>> because there are too many regulations and too much government +>> intervention +>>> -- even today, a decade after reforms were begun. India's greatest +>> problems +>>> arise from a political culture guided by socialist instincts on the +> one +>>> hand and an imbedded legal obligation on the other hand. +>> +>> Nice theory and all, but s/India/France/g and the statements hold just +>> as true, yet France is #12 in the UN's HDI ranking, not #124. +>> +>> +>>> Since all parties must stand for socialism, no party espouses +>>> classical liberalism +>> +>> I'm not convinced that that classical liberalism is a good solution +>> for countries in real difficulty. See Joseph Stiglitz (Nobel for +>> Economics) on the FMI's failed remedies. Of course googling on +>> "Stiglitz FMI" only brings up links in Spanish and French. I guess +>> that variety of spin is non grata in many anglo circles. +>> +>> +>> R +>> http://xent.com/mailman/listinfo/fork +> +> http://xent.com/mailman/listinfo/fork + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00319.2c5f52556f53f685fc0a72c6c12cd590 b/Ch3/datasets/spam/easy_ham/00319.2c5f52556f53f685fc0a72c6c12cd590 new file mode 100644 index 000000000..e4cb86a65 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00319.2c5f52556f53f685fc0a72c6c12cd590 @@ -0,0 +1,144 @@ +From fork-admin@xent.com Mon Aug 26 21:47:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8FA4B44155 + for ; Mon, 26 Aug 2002 16:47:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 21:47:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QKmwZ09009 for ; + Mon, 26 Aug 2002 21:48:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D79E22941C2; Mon, 26 Aug 2002 13:38:25 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from axiom.braindust.com (axiom.braindust.com [64.69.71.79]) by + xent.com (Postfix) with ESMTP id 5C145294099 for ; + Tue, 20 Aug 2002 15:31:42 -0700 (PDT) +X-Envelope-To: fork@spamassassin.taint.org +Received: from localhost (muses.westel.com [204.244.110.7]) (authenticated + (0 bits)) by axiom.braindust.com (8.12.5/8.11.6) with ESMTP id + g7KMXDeH012160 (using TLSv1/SSLv3 with cipher EDH-RSA-DES-CBC3-SHA (168 + bits) verified NO); Tue, 20 Aug 2002 15:33:13 -0700 +Resent-Date: Tue, 20 Aug 2002 15:32:55 -0700 +MIME-Version: 1.0 (Apple Message framework v482) +Cc: "FoRK" +Resent-Message-Id: +Resent-To: fork@spamassassin.taint.org +To: +Content-Type: text/plain; charset=US-ASCII; format=flowed +Subject: Re: The Curse of India's Socialism +From: Ian Andrew Bell +Content-Transfer-Encoding: 7bit +Message-Id: +Resent-From: Ian Andrew Bell +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 20 Aug 2002 15:01:36 -0700 + +I think that this and other articles confuse Socialism with +Bureaucracy. Libertarianism as implemented in North America is not +exactly the shining pinnacle of economic efficiency. + +Just try starting a telephone company in the US or (even worse) +Canada. It can take a year or more to get the blessing of our own +"Permit Rajs" at the FCC, PUC, and PTTs (or, in the decidedly more +socialist leaning Canada, Industry Canada and the CRTC). + +Yet, despite all of this intense regulation and paper pushing, as +well as regulatory scrutiny by the FTC, SEC, and IRS, the +executives of Telecom Companies have managed to bilk the investment +community for what looks to be tens of billions of dollars. They +finished their routine with the a quadruple lutz -- laying off +hundreds of thousands of workers when it all came crashing down. + +So.. tell me again.. how are we better off? + +-Ian. + + +On Tuesday, August 20, 2002, at 12:09 PM, John Hall wrote: + +> The Mystery of Capital: Why Capitalism Triumphs in the West and Fails +> Everywhere Else -- by Hernando De Soto +> +> Is something I'm reading now. +> +> My impression is that France is not anywhere near the "Permit Raj" +> nightmare that India is (and became). Nor has its market been closed +> like India's has. +> +> But De Soto's work is perhaps just as important or more so. He hasn't +> dealt specifically with India, but I recall examples from Peru, +> Philippines, and Egypt. In Lima, his team took over a year (I think it +> was 2) working 8 hr days to legally register a 1 person company. +> In the +> Philippines, getting legal title can take 20 years. In Egypt, +> about 80% +> of the population in Cairo lives in places where they are officially +> illegal. +> +> India hasn't been helped by its socialism. Socialism has certainly +> helped strangle the country in permits. But perhaps De Soto is right +> that the real crippling thing is keeping most of the people out of the +> legal, official property system. +> +> Putting most of the people in the property system was something +> the west +> only finished about 100 years ago, or Japan did 50 years ago. It +> wasn't +> easy, but we live in a society that doesn't even remember we did it. +> +> +>> -----Original Message----- +>> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +> Robert +>> Harley +>> Sent: Tuesday, August 20, 2002 11:24 AM +>> To: fork@spamassassin.taint.org +>> Subject: Re: The Curse of India's Socialism +>> +>> RAH quoted: +>>> Indians are not poor because there are too many of them; they are +> poor +>>> because there are too many regulations and too much government +>> intervention +>>> -- even today, a decade after reforms were begun. India's greatest +>> problems +>>> arise from a political culture guided by socialist instincts on the +> one +>>> hand and an imbedded legal obligation on the other hand. +>> +>> Nice theory and all, but s/India/France/g and the statements hold just +>> as true, yet France is #12 in the UN's HDI ranking, not #124. +>> +>> +>>> Since all parties must stand for socialism, no party espouses +>>> classical liberalism +>> +>> I'm not convinced that that classical liberalism is a good solution +>> for countries in real difficulty. See Joseph Stiglitz (Nobel for +>> Economics) on the FMI's failed remedies. Of course googling on +>> "Stiglitz FMI" only brings up links in Spanish and French. I guess +>> that variety of spin is non grata in many anglo circles. +>> +>> +>> R +>> http://xent.com/mailman/listinfo/fork +> +> http://xent.com/mailman/listinfo/fork + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00320.9933c126186ef60960c78df427a2d8d6 b/Ch3/datasets/spam/easy_ham/00320.9933c126186ef60960c78df427a2d8d6 new file mode 100644 index 000000000..0acb0ed63 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00320.9933c126186ef60960c78df427a2d8d6 @@ -0,0 +1,126 @@ +From fork-admin@xent.com Mon Aug 26 21:57:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id CBCAE43F99 + for ; Mon, 26 Aug 2002 16:57:49 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 21:57:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QKsKZ09118 for ; + Mon, 26 Aug 2002 21:54:21 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3DEFE2941C6; Mon, 26 Aug 2002 13:38:33 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from plato.einstein (unknown [65.170.226.173]) by xent.com + (Postfix) with ESMTP id A6CBF294099 for ; Tue, + 20 Aug 2002 23:34:52 -0700 (PDT) +Received: from RSHAVELL ([63.101.39.6]) by plato.einstein with Microsoft + SMTPSVC(5.0.2195.3779); Tue, 20 Aug 2002 23:36:30 -0700 +From: "Rob Shavell" +To: "'Eugen Leitl'" , + "'Mike Masnick'" , + "'Joseph S. Barrera III'" , + "'Ian Andrew Bell'" +Cc: +Subject: RE: sprint delivers the next big thing?? +Message-Id: <00dc01c248dd$0c740ea0$6765010a@einstein> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook CWS, Build 9.0.2416 (9.0.2910.0) +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Importance: Normal +In-Reply-To: +X-Originalarrivaltime: 21 Aug 2002 06:36:30.0964 (UTC) FILETIME=[15BF8340:01C248DD] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 20 Aug 2002 23:36:13 -0700 + +thx for the thoughts gentlemen (yes as someone said i use terms loosely) - + +more than cool ---> + +quality: snobs only care about mpixels. this is about communications. the +general public cares about speed not quality. how is akamai doing these +days? not to mention any other QOS businesses that come to mind. + +implementation: point about hooking to usb, wires, etc. AGREE 100%. these +implementations are super clunky, attachable camera needs to be integrated a +la nokia model. basically useless until better handsets are released i +think. + +adoption: ian brought up the 'fax' problem. brilliant thing is, this is far +more personal than faxes so can be justified more easily and marketed in +family packs etc. but yes, the usual rules apply as MMS phones have network +efx. + +content: who cares about content? that no one can think of 'useful' content +is always the business persons mistake. the content is the users +communications. its anything and everything. avg person could easily send +half dozen pics to a dozen people a day. mainly humorous i'd guess. who +cares if content is trivial in nature. picture speaks a thousand words. + +display: why are dig camera displays better than cell phones? does anyone +know who makes these small displays and what the trends are around them? + +misc ramblings: i suppose you skeptical forkers would have said the same +thing about '1 hour photo' processing. trivial, who needs it, i get better +resultion elswhere. and yet, it had great decentralizing impact - the plant +had to be downsized and pushed to the retail operation - the digital camera, +and finally the integrated digital camera phone brings this cycle of +decentralization in photography to a logical conclusion (which will put the +photo giants to bed) and change the world in a meaningful way. also, SMS +didn't take off because its easy, it took off because it costs less. its +greatly ironic the carriers often trumpet the 'profitabilty' of their SMS +traffic over others because of its ratio of cost to bandwidth. in reality, +SMS cannibilizes the voice rev's they bought their networks to handle. + +ps: it is relatively amusing that one 'low resolution' complaint dropped +just after Joe watched a CARTOON on his television.. + +You're right. Or at least, I don't. I saw an advert for it on TV last +night (can't miss Futurama :-) and I thought, "boy, that's dumb." +If I wanted to share pictures with someone, I'd email them to them, +where they could see them on a 1024x or 1600x display, instead of + +rob + + +-----Original Message----- +From: Eugen Leitl [mailto:eugen@leitl.org] +Sent: Monday, August 19, 2002 1:34 AM +To: Rob Shavell +Cc: fork@spamassassin.taint.org +Subject: Re: sprint delivers the next big thing?? + + +On Sun, 18 Aug 2002, Rob Shavell wrote: + +> down in the tech world than mobile visual communications.. and yet no one +> seems to give much of a damn that right now that 2 persons can take photos +> and share them instantly across space. this is one of the biggest - and + +The word "trivial" comes to mind. + +> last - fundamental changes in human communications. will be as big as the +> browser. + +Remote realtime streaming video is neat, but sharing pictures? You invoke +big words rather readily. + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00321.c3dda1549b97568144b8290208504673 b/Ch3/datasets/spam/easy_ham/00321.c3dda1549b97568144b8290208504673 new file mode 100644 index 000000000..846717300 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00321.c3dda1549b97568144b8290208504673 @@ -0,0 +1,169 @@ +From fork-admin@xent.com Mon Aug 26 21:57:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E472D43F9B + for ; Mon, 26 Aug 2002 16:57:50 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 21:57:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QKwdZ09291 for ; + Mon, 26 Aug 2002 21:58:39 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4863F2941CA; Mon, 26 Aug 2002 13:38:41 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from plato.einstein (unknown [65.170.226.173]) by xent.com + (Postfix) with ESMTP id E80D0294099 for ; Wed, + 21 Aug 2002 01:08:33 -0700 (PDT) +Received: from RSHAVELL ([209.151.242.53]) by plato.einstein with + Microsoft SMTPSVC(5.0.2195.3779); Wed, 21 Aug 2002 01:10:12 -0700 +From: "Rob Shavell" +To: "'Mike Masnick'" +Cc: +Subject: RE: sprint delivers the next big thing?? +Message-Id: <000301c248ea$43c44ac0$0601a8c0@einstein> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook CWS, Build 9.0.2416 (9.0.2910.0) +In-Reply-To: <5.1.1.6.0.20020820234041.03213bd0@techdirt.com> +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Importance: Normal +X-Originalarrivaltime: 21 Aug 2002 08:10:12.0401 (UTC) FILETIME=[2C62BA10:01C248EA] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 21 Aug 2002 01:10:50 -0700 + +right Mike, + +i will agree to disagree but i take your comments to heart. my opinion is +only that this is one of the last frontiers of communications ('instant +show') that we cross easily (though you are right as rain on pricing). i am +mildly amused at the level of skepticism and innatention it is getting. + +my premise is that the world will change in dramatic and unexpected ways +once there are a billion 'eye's' which can instantly share what they see +amongst each other. that doesn't mean that people will stop talking on +their phones, or that people will spend more time w/images than voice. just +that it is fundamental. from news to crime to privacy to dating to family +life to bloopers and practical jokes, i believe there will be an explosion +of images unleashed specifically by cell phone integrated lenses because of +their utter ubiquity that dwarfs all pictures taken in the history of +photography by orders of magnitude and in short order. and yes, changes +things 'big time'. + +rgds, +rob + + +-----Original Message----- +From: Mike Masnick [mailto:mike@techdirt.com] +Sent: Tuesday, August 20, 2002 11:58 PM +To: Rob Shavell +Cc: fork@spamassassin.taint.org +Subject: RE: sprint delivers the next big thing?? + + +Not to keep harping on this, but... + +At 11:36 PM 8/20/02 -0700, Rob Shavell wrote: + +>content: who cares about content? that no one can think of 'useful' +content +>is always the business persons mistake. the content is the users +>communications. its anything and everything. avg person could easily send +>half dozen pics to a dozen people a day. mainly humorous i'd guess. who +>cares if content is trivial in nature. picture speaks a thousand words. + +This does nothing to answer my question. I *do* care about content. Hell, +if I could be convinced that people would send stupid pics back and forth +all day, I'd have a different opinion of this. I just am not convinced +that they will (stupid or not). + +While a picture may be worth a thousand words (and this is the same +argument the guy who works for me made), how many people do you know who +communicate by pictures? Sure, it sounds nice to say that a picture is +such an efficient messaging mechanism, but how often do you actually find +yourself drawing someone a picture to explain something? + +I don't buy it. + +For most messages, text works fine and is the most efficient +mechanism. For some messages, pictures do the job, but I would say not +nearly as often as words. Why do you think Pictionary and Charades and +such are games? Because images are usually not the most efficient way to +get a message across. + +>misc ramblings: i suppose you skeptical forkers would have said the same +>thing about '1 hour photo' processing. trivial, who needs it, i get better +>resultion elswhere. and yet, it had great decentralizing impact - the +plant +>had to be downsized and pushed to the retail operation - the digital +camera, +>and finally the integrated digital camera phone brings this cycle of +>decentralization in photography to a logical conclusion (which will put the +>photo giants to bed) and change the world in a meaningful way. also, SMS +>didn't take off because its easy, it took off because it costs less. its +>greatly ironic the carriers often trumpet the 'profitabilty' of their SMS +>traffic over others because of its ratio of cost to bandwidth. in reality, +>SMS cannibilizes the voice rev's they bought their networks to handle. + +Again, this is the same argument my colleague made (along with "you just +don't understand kids today, and they'll run with this"). I wasn't saying +that MMS wouldn't take off because it wasn't high quality or that it wasn't +easy. I was saying that I couldn't see why people would use it in a way +that "changed the face of communications". + +I'm looking for the compelling reason (even if it's a stupid one) why +people would want to do this. Sure, if they integrate cameras into the +phone, and the quality improves (even only marginally) I can certainly see +people taking pictures with their cameras and occasionally sending them to +other people. But, mostly, I don't see what the benefit is to this over +sending them to someone's email address, or putting together an online (or +offline) photoalbum. + +I don't think 1 hour photos are trivial. People want to see their own pics +right away, and the quality is plenty good enough for snapshots. That's +one of the main reasons why digital cameras are catching on. The instant +view part. I'm guessing your argument is that people not only want +"instant view", but also "instant show". Which is what this service +offers. I'm not convinced that most people want "instant show". I think +people like to package their pictures and show them. That's why people put +together fancy albums, and sit there and force you to go through them while +they explain every picture. Sure, occasionally "instant show" is nice, but +it's just "nice" on occasion. I still can't see how it becomes a integral +messaging method. + +What's the specific benefit of taking a picture and immediately sending it +from one phone to another? There has to be *some* benefit, even if it's +silly if people are going to flock to it. + +I'm searching... no one has given me a straight answer yet. + +The *only* really intriguing idea I've heard about things like MMS lately +are Dan Gillmor's assertion that one day in the near future some news event +will happen, and a bunch of people will snap pictures with their mobile +phones, from all different angles, and those photos tell the real story of +what happened - before the press even gets there. + +Willing to be proven wrong, +Mike + +PS If the wireless carriers continue to price these services as stupidly as +they currently are, then MMS is *never* going to catch on. + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00322.4eeafc78a7cbb0eb92f9030742660997 b/Ch3/datasets/spam/easy_ham/00322.4eeafc78a7cbb0eb92f9030742660997 new file mode 100644 index 000000000..e0ca47da2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00322.4eeafc78a7cbb0eb92f9030742660997 @@ -0,0 +1,58 @@ +From fork-admin@xent.com Mon Aug 26 22:08:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3EBF543F99 + for ; Mon, 26 Aug 2002 17:08:02 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 22:08:02 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QL37Z09355 for ; + Mon, 26 Aug 2002 22:03:08 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 653B92941CE; Mon, 26 Aug 2002 13:38:48 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from leng.uraeus.com (leng.uraeus.com [198.6.196.18]) by + xent.com (Postfix) with ESMTP id 240022940AE for ; + Wed, 21 Aug 2002 10:15:15 -0700 (PDT) +Received: by leng.uraeus.com (Postfix, from userid 1013) id 9A54528B21; + Wed, 21 Aug 2002 17:16:54 +0000 (UTC) +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Message-Id: <15715.51974.572757.759436@leng.uraeus.com> +From: yyyyalcolm@uraeus.com +To: yyyy@spamassassin.taint.org (Justin Mason) +Cc: "R. A. Hettinga" , fork@spamassassin.taint.org +Subject: Re: The Curse of India's Socialism +In-Reply-To: <20020821120335.9B96E43C32@phobos.labs.netnoteinc.com> +References: + <20020821120335.9B96E43C32@phobos.labs.netnoteinc.com> +X-Mailer: VM 6.89 under 21.1 (patch 14) "Cuyahoga Valley" XEmacs Lucid +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 21 Aug 2002 17:16:54 +0000 + +Justin Mason writes: +>So IMO it's the corruption that's the problem; and corruption != +>regulation, and corruption != socialism. Also, over-population is really +>a symptom of that. + +Without addressing the overpopulation argument, the more bureaucracy, +the more opportunity for corruption. If a corporation is corrupt, +there are generally, absent more government intervention, +alternatives. With bureacracy that is more difficult; one generally +most uproot oneself and move. +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00323.8f7195f98946c42be7c95881ad779fbe b/Ch3/datasets/spam/easy_ham/00323.8f7195f98946c42be7c95881ad779fbe new file mode 100644 index 000000000..ef705c2c2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00323.8f7195f98946c42be7c95881ad779fbe @@ -0,0 +1,106 @@ +From fork-admin@xent.com Mon Aug 26 22:08:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id DF1ED43F9B + for ; Mon, 26 Aug 2002 17:08:02 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 22:08:02 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QL8DZ09668 for ; + Mon, 26 Aug 2002 22:08:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4C7C22941D2; Mon, 26 Aug 2002 13:38:57 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from docserver.cac.washington.edu (docserver.cac.washington.edu + [140.142.32.13]) by xent.com (Postfix) with ESMTP id 825EF294099 for + ; Wed, 21 Aug 2002 16:33:32 -0700 (PDT) +Received: (from daemon@localhost) by docserver.cac.washington.edu + (8.12.1+UW01.12/8.12.1+UW02.06) id g7LNKH73018839 for fork ; + Wed, 21 Aug 2002 16:20:17 -0700 +Message-Id: <200208212320.g7LNKH73018839@docserver.cac.washington.edu> +To: fork +From: UW Email Robot +Subject: The MIME information you requested (last changed 3154 Feb 14) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 21 Aug 2002 16:20:17 -0700 + +-------------------------------------------------------------------------- + +What is MIME? + +MIME stands for "Multipurpose Internet Mail Extensions". It is the +standard for how to send multipart, multimedia, and binary data using the +world-wide Internet email system. Typical uses of MIME include sending +images, audio, wordprocessing documents, programs, or even plain text +files when it is important that the mail system does not modify any part +of the file. MIME also allows for labelling message parts so that a +recipient (or mail program) may determine what to do with them. + +How can I read a MIME message? + +Since MIME is only a few years old, there are still some mailers in use +which do not understand MIME messages. However, there are a growing +number of mail programs that have MIME support built-in. (One popular +MIME-capable mailer for Unix, VMS and PCs is Pine, developed at the +University of Washington and available via anonymous FTP from the host +ftp.cac.washington.edu in the file /pine/pine.tar.Z) + +In addition, several proprietary email systems provide MIME translation +capability in their Internet gateway products. However, even if you do +not have access to a MIME-capable mailer or suitable gateway, there is +still hope! + +There are a number of stand-alone programs that can interpret a MIME +message. One of the more versatile is called "munpack". It was developed +at Carnegie Mellon University and is available via anonymous FTP from the +host ftp.andrew.cmu.edu in the directory pub/mpack/. There are versions +available for Unix, PC, Mac and Amiga systems. For compabibility with +older forms of transferring binary files, the munpack program can also +decode messages in split-uuencoded format. + +Does MIME replace UUENCODE? + +Yes. UUENCODE has been used for some time for encoding binary files so +that they can be sent via Internet mail, but it has several technical +limitations and interoperability problems. MIME uses a more robust +encoding called "Base64" which has been carefully designed to survive the +message transformations made by certain email gateways. + +How can I learn more about MIME? + +The MIME Internet standard is described in RFC-1521, available via +anonymous FTP from many different Internet hosts, including: + + o US East Coast + Address: ds.internic.net (198.49.45.10) + + o US West Coast + Address: ftp.isi.edu (128.9.0.32) + + o Pacific Rim + Address: munnari.oz.au (128.250.1.21) + + o Europe + Address: nic.nordu.net (192.36.148.17) + +Look for the file /rfc/rfc1521.txt + +Another source of information is the Internet news group "comp.mail.mime", +which includes a periodic posting of a "Frequently Asked Questions" list. + +-------------------------------------------------------------------------- +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00324.ce7f14e25bb864ee4084ce6179f975fc b/Ch3/datasets/spam/easy_ham/00324.ce7f14e25bb864ee4084ce6179f975fc new file mode 100644 index 000000000..2ffc8d4d7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00324.ce7f14e25bb864ee4084ce6179f975fc @@ -0,0 +1,69 @@ +From fork-admin@xent.com Mon Aug 26 22:18:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6106E43F9B + for ; Mon, 26 Aug 2002 17:18:19 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 22:18:19 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QLIPZ10013 for ; + Mon, 26 Aug 2002 22:18:25 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9F9792941DA; Mon, 26 Aug 2002 13:39:14 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from tux.w3.org (tux.w3.org [18.29.0.27]) by xent.com (Postfix) + with ESMTP id 16C54294099 for ; Thu, 22 Aug 2002 16:38:02 + -0700 (PDT) +Received: from localhost (danbri@localhost) by tux.w3.org (8.9.3/8.9.3) + with ESMTP id TAA12658; Thu, 22 Aug 2002 19:39:45 -0400 +From: Dan Brickley +To: Lucas Gonze +Cc: "Fork@Xent.Com" +Subject: Re: The case for spam +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 19:39:45 -0400 (EDT) + +On Thu, 22 Aug 2002, Lucas Gonze wrote: + +> +> Political mail (the snail kind) doesn't bother me. I like it a lot of the +> time, because as crap as it is at least it's not the kind of info you get +> on TV. Particularly for small time local politics, it's the best way to +> get information. + +Except that thanks to the magic of spam, it's usually some else's locale + +> but what matters is that mail is speech, and political email has to be as +> well protected as any other political speech. Spam is *the* tool for +> dissident news, since the face that it's unsolicited means that recipients +> can't be blamed for being on a mailing list. + +A terrible argument. There are better technical solutions to privacy +protection than sending a copy of the same message to everyone on the +Internet, so the recipients can't be blamed for reading it. + +Wait till phone spam is as cheap to send as email spam... + +Dan + + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00325.4c10ab2dbc1ca699e7ce7a4f8aa89498 b/Ch3/datasets/spam/easy_ham/00325.4c10ab2dbc1ca699e7ce7a4f8aa89498 new file mode 100644 index 000000000..f2520044d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00325.4c10ab2dbc1ca699e7ce7a4f8aa89498 @@ -0,0 +1,283 @@ +From fork-admin@xent.com Mon Aug 26 22:18:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0D76343F99 + for ; Mon, 26 Aug 2002 17:18:17 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 22:18:17 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QLDMZ09780 for ; + Mon, 26 Aug 2002 22:13:22 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E08232941D6; Mon, 26 Aug 2002 13:39:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from seawall.homeport.org (Seawall.Homeport.org [66.152.246.82]) + by xent.com (Postfix) with ESMTP id 503A5294099 for ; + Thu, 22 Aug 2002 07:06:28 -0700 (PDT) +Received: from lightship.internal.homeport.org + (lightship.internal.homeport.org [10.0.0.11]) by seawall.homeport.org + (Postfix) with ESMTP id 2FCE9568; Thu, 22 Aug 2002 11:07:55 -0400 (EDT) +Received: by lightship.internal.homeport.org (Postfix, from userid 125) id + 372302C92B; Thu, 22 Aug 2002 10:08:09 -0400 (EDT) +From: Adam Shostack +To: Kragen Sitaker +Cc: fork@spamassassin.taint.org +Subject: Re: the underground software vulnerability marketplace and its + hazards (fwd) +Message-Id: <20020822100808.A72593@lightship.internal.homeport.org> +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: ; + from eugen@leitl.org on Thu, Aug 22, 2002 at 08:42:12AM +0200 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 10:08:09 -0400 + +Hi Kragen, + + This is an interesting analysis. I think that there are a couple +of nits I might pick (for example, I don't expect that the market will +be well developed with highest bidders for while), I think that the +most important issue, which is that end users won't be able to fix +their systems, is almost passed over. I know that you know this, and +you allude to it, but your essay is getting passed around, so you +might want to add to it bits about the sysadmin and others. + + There's one other point which you don't make, which I think is very +important, which is that research into defining and addressing classes +of vulnerabilities can't happen without libraries of available +vulnerability code. I can think of three researchers into automated +methods for addressing vulnerabilities who griped, uninvited, about +the quality of the existing vulnerability sites. Doing research into +a set requires that you have enough examples, in the open, that you +can define a set, and that the set is added to from time to time so +you can make and test predictions. + + I feel fairly confident in saying that without full disclosure, we +wouldn't have Stackguard, ITS4, Nissus, or snort. And the security +admin's job would be a lot harder. + +Adam + + +On Thu, Aug 22, 2002 at 08:42:12AM +0200, Eugen Leitl wrote: +| -- +| -- Eugen* Leitl leitl +| ______________________________________________________________ +| ICBMTO: N48 04'14.8'' E11 36'41.2'' http://eugen.leitl.org +| 83E5CA02: EDE4 7193 0833 A96B 07A7 1A88 AA58 0E89 83E5 CA02 +| +| +| ---------- Forwarded message ---------- +| Date: Thu, 22 Aug 2002 00:24:54 -0400 (EDT) +| From: Kragen Sitaker +| To: fork@spamassassin.taint.org +| Subject: the underground software vulnerability marketplace and its hazards +| +| On August 7th, an entity known as "iDEFENSE" sent out an announcement, +| which is appended to this email. Briefly, "iDEFENSE", which bills +| itself as "a global security intelligence company", is offering cash +| for information about security vulnerabilities in computer software +| that are not publicly known, especially if you promise not to tell +| anyone else. +| +| If this kind of secret traffic is allowed to continue, it will pose a +| very serious threat to our computer communications infrastructure. +| +| At the moment, the dominant paradigm for computer security research +| known as "full disclosure"; people who discover security +| vulnerabilities in software tell the vendor about them, and a short +| while later --- after the vendor has had a chance to fix the problem +| --- they publish the information, including code to exploit the +| vulnerability, if possible. +| +| This method has proven far superior to the old paradigm established by +| CERT in the late 1980s, which its proponents might call "responsible +| disclosure" --- never release working exploit code, and never release +| any information on the vulnerability before all vendors have released +| a patch. This procedure often left hundreds of thousands of computers +| vulnerable to known bugs for months or years while the vendors worked +| on features, and often, even after the patches were released, people +| wouldn't apply them because they didn't know how serious the problem +| was. +| +| The underground computer criminal community would often discover and +| exploit these same holes for months or years while the "responsible +| disclosure" process kept their victims, who had no connections in the +| underground, vulnerable. +| +| The problem with this is that vulnerabilities that are widely known +| are much less dangerous, because their victims can take steps to +| reduce their potential impact --- including disabling software, +| turning off vulnerable features, filtering traffic in transit, and +| detecting and responding to intrusions. They are therefore much less +| useful to would-be intruders. Also, software companies usually see +| security vulnerabilities in their software as PR problems, and so +| prefer to delay publication (and the expense of fixing the bugs) as +| long as possible. +| +| iDEFENSE is offering a new alternative that appears far more dangerous +| than either of the two previous paradigms. They want to be a buyer in +| a marketplace for secret software vulnerability information, rewarding +| discoverers of vulnerabilities with cash. +| +| Not long before, Snosoft, a group of security researchers evidently +| including some criminal elements, apparently made an offer to sell the +| secrecy of some software vulnerability information to the software +| vendor; specifically, they apparently made a private offer to +| Hewlett-Packard to keep a vulnerability in HP's Tru64 Unix secret if +| HP retained Snosoft's "consulting services". HP considered this +| extortion and responded with legal threats, and Snosoft published the +| information. +| +| If this is allowed to happen, it will cause two problems which, +| together, add up to a catastrophe. +| +| First, secret software vulnerability information will be available to +| the highest bidder, and to nobody else. For reasons explained later, +| I think the highest bidders will generally be organized crime +| syndicates, although that will not be obvious to the sellers. +| +| Second, finding software vulnerabilities and keeping them secret will +| become lucrative for many more talented people. The result will be +| --- just as in the "responsible disclosure" days --- that the good +| guys will remain vulnerable for months and years, while the majority +| of current vulnerabilities are kept secret. +| +| I've heard it argued that the highest bidders will generally be the +| vendors of the vulnerable software, but I don't think that's +| plausible. If someone can steal $20 000 because a software bug lets +| them, the software vendor is never held liable; often, in fact, the +| people who administer the software aren't liable, either --- when +| credit card data are stolen from an e-commerce site, for example. +| Knowing about a vulnerability before anyone else might save a web-site +| administrator some time, and it might save the software vendor some +| negative PR, but it can net the thief thousands of dollars. +| +| I think the highest bidders will be those for whom early vulnerability +| information is most lucrative --- the thieves who can use it to +| execute the largest heists without getting caught. Inevitably, that +| means organized crime syndicates, although the particular gangs who +| are good at networked theft may not yet exist. +| +| There might be the occasional case where a market leader, such as +| Microsoft, could make more money by giving their competitors bad PR +| than a gang could make by theft. Think of a remote-root hole in +| Samba, for example. +| +| Right now, people who know how to find security exploits are either +| motivated by personal interest in the subject, motivated by the public +| interest, motivated by a desire for individual recognition, or +| personally know criminals that benefit from their exploits. Creating +| a marketplace in secret vulnerability information would vastly +| increase the availability of that information to the people who can +| afford to pay the most for it: spies, terrorists, and organized crime. +| +| Let's not let that happen. +| +| +| +| +| This is the original iDEFENSE announcement: +| +| From: Sunil James [mailto:SJames@iDefense.com] +| Sent: Wednesday, August 07, 2002 12:32 PM +| Subject: Introducing iDEFENSE's Vulnerability Contributor Program +| +| +| Greetings, +| +| iDEFENSE is pleased to announce the official launch of its Vulnerability +| Contributor Program (VCP). The VCP pays contributors for the advance +| notification of vulnerabilities, exploit code and malicious code. +| +| iDEFENSE hopes you might consider contributing to the VCP. The following +| provides answers to some basic questions about the program: +| +| Q. How will it work? +| A. iDEFENSE understands the majority of security researchers do not publish +| security research for compensation; rather, it could be for any of a number +| of motivations, including the following: +| +| * Pure love of security research +| * The desire to protect against harm to targeted networks +| * The desire to urge vendors to fix their products +| * The publicity that often accompanies disclosure +| +| The VCP is for those who want to have their research made public to the +| Internet community, but who would also like to be paid for doing the +| work.The compensation will depend, among other things, on the following +| items: +| +| * The kind of information being shared (i.e. vulnerability or exploit) +| * The amount of detail and analysis provided +| * The potential severity level for the information shared +| * The types of applications, operating systems, and other +| software and hardware potentially affected +| * Verification by iDEFENSE Labs +| * The level of exclusivity, if any, for data granted to iDEFENSE +| +| Q. Who should contribute to the VCP? +| A. The VCP is open to any individual, security research group or other +| entity. +| +| Q. Why are you launching this program? +| A. Timeliness remains a key aspect in security intelligence. Contributions +| to some lists take time before publication to the public at large. More +| often, many of these services charge clients for access without paying the +| original contributor. Under the iDEFENSE program, the contributor is +| compensated, iDEFENSE Labs verifies the issue, and iDEFENSE clients and the +| public at large are warned in a timely manner. +| +| Q. Who gets the credit? +| A. The contributor is always credited for discovering the vulnerability or +| exploit information. +| +| Q. When can I contribute? +| The VCP is active. You are welcome to begin contributing today. +| +| To learn more, go to http://www.idefense.com/contributor.html. If you have +| questions or would like to sign up as a contributor to the VCP, please +| contact us at contributor@idefense.com. +| +| Regards, +| +| Sunil James +| Technical Analyst +| iDEFENSE +| +| "iDEFENSE is a global security intelligence company that proactively +| monitors sources throughout the world -- from technical vulnerabilities and +| hacker profiling to the global spread of viruses and other malicious code. +| The iALERT security intelligence service provides decision-makers, frontline +| security professionals and network administrators with timely access to +| actionable intelligence and decision support on cyber-related threats. +| iDEFENSE Labs is the research wing that verifies vulnerabilities, examines +| the behavior of exploits and other malicious code and discovers new +| software/hardware weaknesses in a controlled lab environment." +| +| http://xent.com/mailman/listinfo/fork +| + +-- +"It is seldom that liberty of any kind is lost all at once." + -Hume + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00326.e77a07ed3bc9f0e54bc12c3ea32e25fa b/Ch3/datasets/spam/easy_ham/00326.e77a07ed3bc9f0e54bc12c3ea32e25fa new file mode 100644 index 000000000..d60111b4d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00326.e77a07ed3bc9f0e54bc12c3ea32e25fa @@ -0,0 +1,116 @@ +From fork-admin@xent.com Mon Aug 26 22:28:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B33CC43F9B + for ; Mon, 26 Aug 2002 17:28:34 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 22:28:34 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QLRRZ10197 for ; + Mon, 26 Aug 2002 22:27:28 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6C2EC2941E2; Mon, 26 Aug 2002 13:39:30 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta7.pltn13.pbi.net (mta7.pltn13.pbi.net [64.164.98.8]) by + xent.com (Postfix) with ESMTP id B1C902940BF for ; + Sat, 24 Aug 2002 11:38:24 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta7.pltn13.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H1D0047H2J3JI@mta7.pltn13.pbi.net> for fork@xent.com; Sat, + 24 Aug 2002 11:40:15 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: buffer overflows +To: FoRK +Reply-To: gbolcer@endeavors.com +Message-Id: <3D67D0D0.E6AF7683@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8BIT +X-Accept-Language: en, pdf +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 24 Aug 2002 11:30:40 -0700 + +Didn't we just have a discussion on FoRK how hard +it is nowadays to write something that's not +buffer overflow protected? + +http://news.zdnet.co.uk/story/0,,t269-s2121250,00.html + + + +Location: http://news.zdnet.co.uk/story/0,,t269-s2121250,00.html + +IM client vulnerable to attack +IM client vulnerable to attack + +James Pearce, ZDNet Australia + +Users of messenger client Trillian are vulnerable to attack, according to +information security analyst John Hennessy. + +Hennessy has published a proof-of-concept showing the latest version of +Trillian, v0.73, is vulnerable to a buffer-overflow attack that will +allow individuals with malicious intent to run any program on the +computer. + +Trillion is a piece of software that allows you to connect to ICQ, AOL +Instant Messenger, MSN Messenger, Yahoo! Messenger and IRC with a single +interface, despite some companies actively avoiding messenger +interoperability. + +According to Jason Ross, senior analyst at amr interactive, in June 2002 +there were 28,000 home users of Trillian in Australia, about 0.4 percent +of the Internet population, and 55,000 people using it at work, about 1.8 +percent of the Internet population. + +David Banes, regional manager of Symantec security response, told ZDNet +Australia the code appeared to be valid. + +"With these sort of things you have to find some process that would +accept a connection, then throw loads of random data at it and get it to +crash," he said. "Once it's crashed, you can try to find a way to exploit +it." + +He said the proof-of-concept that was published is designed to run on +Notepad, but could be easily modified to run any program on the system. +He said the problem was easy to fix by "writing protective code around +that particular piece to more closely validate the data around that +piece." + +"Because people are pushed for productivity you tend to leave out the +checks and balances you should put in, which is why we have all these +buffer overflows and exploits out there now," said Banes. + +Cerulean Studios, creator of Trillian, was contacted for comment but had +not responded by the time of publication. + +------------------------------------------------------------------------ + +For all security-related news, including updates on the latest viruses, +hacking exploits and patches, check out ZDNet UK's Security News Section. + +Have your say instantly, and see what others have said. Go to the +Security forum. + +Let the editors know what you think in the Mailroom. + +Copyright © 2002 CNET Networks, Inc. All Rights Reserved. +ZDNET is a registered service mark of CNET Networks, Inc. ZDNET Logo is a service mark of CNET NETWORKS, +Inc. +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00327.f160a103dfff0676aad343813aeab390 b/Ch3/datasets/spam/easy_ham/00327.f160a103dfff0676aad343813aeab390 new file mode 100644 index 000000000..01a959ba6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00327.f160a103dfff0676aad343813aeab390 @@ -0,0 +1,96 @@ +From fork-admin@xent.com Mon Aug 26 22:28:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id DEFB243F99 + for ; Mon, 26 Aug 2002 17:28:33 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 22:28:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QLMwZ10120 for ; + Mon, 26 Aug 2002 22:22:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 878672941DE; Mon, 26 Aug 2002 13:39:22 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta6.snfc21.pbi.net (mta6.snfc21.pbi.net [206.13.28.240]) + by xent.com (Postfix) with ESMTP id A9E7F2940F8 for ; + Sat, 24 Aug 2002 08:02:21 -0700 (PDT) +Received: from endeavors.com ([66.126.120.171]) by mta6.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H1C007C2SIRJB@mta6.snfc21.pbi.net> for fork@xent.com; Sat, + 24 Aug 2002 08:04:11 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: Re: Entrepreneurs +To: fork@spamassassin.taint.org +Message-Id: <3D67A063.7080502@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en-us +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:0.9.4.1) + Gecko/20020508 Netscape6/6.2.3 +References: +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 24 Aug 2002 08:04:03 -0700 + +There's been well documented articles, studies of the +French tax laws, corporate governance, and financial +oversight that 1) dont' easily allow for ISOs, the root +of almost all entrepreneurialship, and 2) the easy flow +of capital to new ventures. It was an extremely large +issue, even debated widely in France. + +Greg + +Chuck Murcko wrote: + +> According to my son, it was actually Homer Simpson, who claimed the +> French had no word for victory. +> +> Chuck +> +> On Thursday, August 22, 2002, at 01:58 PM, Robert Harley wrote: +> +>> An apparent quote from Dubya, from the Times (sent to me by my Dad): +>> +>> http://www.timesonline.co.uk/printFriendly/0,,1-43-351083,00.html +>> +>> ------------------------------------------------------------------------------ +>> +>> TONY BLAIR's special relationship with George W. Bush is under +>> considerable strain. Not only do the two disagree on Yassir Arafat's +>> tenure as leader of the Palestinian Authority, but Blair has started +>> telling disparaging anecdotes about the President. +>> +>> Baroness Williams of Crosby recalled a story told to her by 'my good +>> friend Tony Blair' recently in Brighton. Blair, Bush and Jacques +>> Chirac were discussing economics and, in particular, the decline of +>> the French economy. 'The problem with the French,' Bush confided in +>> Blair, 'is that they don't have a word for entrepreneur.' +>> ------------------------------------------------------------------------------ +>> +>> +>> R +>> http://xent.com/mailman/listinfo/fork +>> +> +> http://xent.com/mailman/listinfo/fork +> + + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00328.3f61d8085d0a6376ce225b4d9e5630e8 b/Ch3/datasets/spam/easy_ham/00328.3f61d8085d0a6376ce225b4d9e5630e8 new file mode 100644 index 000000000..9fbeb02f7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00328.3f61d8085d0a6376ce225b4d9e5630e8 @@ -0,0 +1,74 @@ +From fork-admin@xent.com Mon Aug 26 22:38:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3876243F99 + for ; Mon, 26 Aug 2002 17:38:51 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 22:38:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QLVSZ10400 for ; + Mon, 26 Aug 2002 22:31:28 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 48C552941E6; Mon, 26 Aug 2002 13:39:38 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta6.snfc21.pbi.net (mta6.snfc21.pbi.net [206.13.28.240]) + by xent.com (Postfix) with ESMTP id 3AA8529409E for ; + Sun, 25 Aug 2002 17:33:11 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta6.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H1F00AIADMHQK@mta6.snfc21.pbi.net> for fork@xent.com; Sun, + 25 Aug 2002 17:35:06 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: Doom 3 +To: FoRK +Message-Id: <3D69757C.B5046390@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 25 Aug 2002 17:25:32 -0700 + +Doom 3 will be based on a peer to peer architecture says +CmdrTaco quoting Ant quoting Carmack. + +Greg + +http://slashdot.org/article.pl?sid=02/08/25/1310220 + +DOOM 3 will use P2P System? + + Posted by CmdrTaco on Sunday August + 25, @09:19AM + from the + i'll-believe-it-when-I'm-fragged-on-it + dept. + Ant writes "From Page 6 of FiringSquad's + QuakeCon 2002 Postmortem article: John Carmack said + something at the end of the Q&A about how the + multiplayer will be only four players? Tim: After 2 hours of + talking up at the podium, sometimes you leave a few details + out. Doom 3 multiplayer will be fully scalable. It will be a + peer to peer system. We haven't started working on it yet. + Tell everyone not to panic - it will be fine. John just forgot + to mention it'll be scalable past four players. It's hard to + give a hard number because we haven't started working on + it yet. Right now we're focused on making Doom 3 a + kickass, over the top single player game." +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00329.84bd9e3cd5592c4335ded8736acbccae b/Ch3/datasets/spam/easy_ham/00329.84bd9e3cd5592c4335ded8736acbccae new file mode 100644 index 000000000..374d9b0a8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00329.84bd9e3cd5592c4335ded8736acbccae @@ -0,0 +1,79 @@ +From fork-admin@xent.com Mon Aug 26 22:38:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0B06943F9B + for ; Mon, 26 Aug 2002 17:38:52 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 22:38:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QLZHZ10464 for ; + Mon, 26 Aug 2002 22:35:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 44C6D2941EA; Mon, 26 Aug 2002 13:39:45 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta7.pltn13.pbi.net (mta7.pltn13.pbi.net [64.164.98.8]) by + xent.com (Postfix) with ESMTP id DC24729416D for ; + Mon, 26 Aug 2002 07:33:07 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta7.pltn13.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H1G00CUQGIGZW@mta7.pltn13.pbi.net> for fork@xent.com; Mon, + 26 Aug 2002 07:35:05 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: Enlightenment +To: FoRK +Reply-To: gbolcer@endeavors.com +Message-Id: <3D6A3A5A.CDCD89BB@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 07:25:30 -0700 + +I finally let go of my Irix Magic desktop and window manager +and evaluated several other window managers. Having lost my 10 years +of customization with my X10 and then X11 desktop at one point +at UCI, I promised myself that I'd never get attached to +another WM. I limped along in the default Gnome desktop, I +had a few unsuccessful stabs at the Solaris open view +desktop, but nothing really stuck. Because of this along +with SGI's love of pre-configured, pre-compiled freeware[1], +I never really made the jump from Irix to Linux either. + +After installing the enlightenment WM, I have to say, I am +really enlightened. It's definitely a far cry from the no frills +first look from previous versions. It's only on version 0.17,[2] +but it's a careful balance between simplicity, performance, +(fun) features, applications, and ease of customization. The +number of themes they have on freshmeat is amazing. [3] After +less than an hour or two of "nesting" I already have almost +all my menus and controls setup just the way I want. + +I definitely recommend this to any Irix desktop holdouts. It's +a great way to refresh your machine SGI without having to bite the +bullet and rebuild it as a Linux machine. + +Greg + + + +[1] http://freeware.sgi.com/ +[2] http://www.enlightenment.org/ +[3] http://themes.freshmeat.net/browse/60/?topic_id=60 +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00330.9676b57232270d009783f5276a1efde3 b/Ch3/datasets/spam/easy_ham/00330.9676b57232270d009783f5276a1efde3 new file mode 100644 index 000000000..bd9773a62 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00330.9676b57232270d009783f5276a1efde3 @@ -0,0 +1,90 @@ +From fork-admin@xent.com Mon Aug 26 22:38:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id CC9D144155 + for ; Mon, 26 Aug 2002 17:38:52 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 22:38:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QLd3Z10719 for ; + Mon, 26 Aug 2002 22:39:03 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 039252941EE; Mon, 26 Aug 2002 13:39:53 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta7.pltn13.pbi.net (mta7.pltn13.pbi.net [64.164.98.8]) by + xent.com (Postfix) with ESMTP id A082F29416D for ; + Mon, 26 Aug 2002 07:50:40 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta7.pltn13.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H1G00CNMHBPZO@mta7.pltn13.pbi.net> for fork@xent.com; Mon, + 26 Aug 2002 07:52:38 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: UCI Creative Writing +To: FoRK +Reply-To: gbolcer@endeavors.com +Message-Id: <3D6A3E77.E1DE2E71@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 07:43:03 -0700 + +More articles that support my fantasy that Irvine is the +center of the universe. We've got the corner on electric +cars, fuel cells, two types of Nobel winning physics, +outside the box computer science, and lot of creative writers. + +UCI's creative writing department has been in the +news a lot over the course of the last decade. Some +quotes from the article[1]: + + "In 1992, Newsweek called UCI's fiction writing workshop + 'the hottest writing program in the country.' Now it's + exponentially hotter, thanks only in part to Sebold's daring + and uncannily timely novel. + +The novel they are talking about is Alice Sebold's "The +Lovely Bones" which is on the way to the top of the +NY Times best-sellers list. My uncle used to tease me +about UCI (being a USC graduate from '54) that nobody +knew who UC Irvine was just two states over. In fact, +I used to refer to UCI as one of the lesser known UC +schools, and when I went off to college in 1985, my +relatives told everyone I was off to Cal State Irvine. +I took a class as an undergrad by one of the department's +faculty called "the art of writing fiction". If there +was ever any two classes that helped contributed to writing +my dissertation, it was that one which taught me how to +get the writing flowing and my high school typing class +which taught me how to type really fast. + +One of the advantages they cite in the article is that they +seem to take a chance on the "not-so-sure" bet, but according +to the article, the number of UCI graduates that have gone on +to write best sellers and the handful that feed the film industry +is creating a viscious cycle that lures more talent which +creates the right writing ecosystem, which churns out more +success stories which lures more talent. + +Greg + + +[1] http://www.ocregister.com/sitearchives/2002/8/25/news/uci00825cci1.shtml +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00331.ccd0a9edb0852f4811a401d533542237 b/Ch3/datasets/spam/easy_ham/00331.ccd0a9edb0852f4811a401d533542237 new file mode 100644 index 000000000..077eb7d41 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00331.ccd0a9edb0852f4811a401d533542237 @@ -0,0 +1,63 @@ +From fork-admin@xent.com Mon Aug 26 22:49:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id ADC4843F9B + for ; Mon, 26 Aug 2002 17:49:03 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 22:49:03 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QLgvZ10819 for ; + Mon, 26 Aug 2002 22:42:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8A6362941FD; Mon, 26 Aug 2002 13:45:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from stories2.idg.net (stories2.idg.net [65.220.224.133]) by + xent.com (Postfix) with ESMTP id 289912941F2 for ; + Mon, 26 Aug 2002 13:44:47 -0700 (PDT) +Received: by stories2.idg.net (8.9.1/8.9.1) id NAA20810; Mon, + 26 Aug 2002 13:39:46 -0700 (PDT) +Message-Id: <200208262039.NAA20810@stories2.idg.net> +To: fork@spamassassin.taint.org +From: Geege +Subject: Rambus, Man +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 13:39:46 -0700 (PDT) + +This message was sent to you from http://www.idg.net + +Geege would like you to read the story below: + +http://www.idg.net/gomail.cgi?id=940026 + +Title: +A first look at the 2.8-GHz Pentium 4 + +Summary: +Latest Rambus memory plus fast bus appear to give Intel's newest P4 the jolt it needs. + +Geege attached the following message: +------------------------------------------------------------ +ha ha ha harley. rambus earns it. +------------------------------------------------------------ + +Stay on top of the world of Information Technology with your own +FREE subscription to our specialized newsletters. Subscribe now +at http://www.idg.net/subscribe + + +7132 + + diff --git a/Ch3/datasets/spam/easy_ham/00332.5f70a83716da60e6dde2cc0c29d0a0f9 b/Ch3/datasets/spam/easy_ham/00332.5f70a83716da60e6dde2cc0c29d0a0f9 new file mode 100644 index 000000000..82c70b6aa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00332.5f70a83716da60e6dde2cc0c29d0a0f9 @@ -0,0 +1,85 @@ +From fork-admin@xent.com Mon Aug 26 22:49:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 579F344155 + for ; Mon, 26 Aug 2002 17:49:04 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 22:49:04 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QLkmZ10892 for ; + Mon, 26 Aug 2002 22:46:48 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 268482941C1; Mon, 26 Aug 2002 14:03:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id E36E72940AE for ; + Mon, 26 Aug 2002 14:02:24 -0700 (PDT) +Received: (qmail 15908 invoked by uid 19621); 26 Aug 2002 21:03:51 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 26 Aug 2002 21:03:51 -0000 +Subject: Re: The Curse of India's Socialism +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: <65C23A43-B488-11D6-B8E9-0030657C53EA@ianbell.com> +References: <65C23A43-B488-11D6-B8E9-0030657C53EA@ianbell.com> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1030396738.2767.162.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 26 Aug 2002 14:18:57 -0700 + +On Tue, 2002-08-20 at 15:01, Ian Andrew Bell wrote: +> +> Yet, despite all of this intense regulation and paper pushing, as +> well as regulatory scrutiny by the FTC, SEC, and IRS, the +> executives of Telecom Companies have managed to bilk the investment +> community for what looks to be tens of billions of dollars. + + +This is a good thing. Getting hammered for stupid investments is likely +to result in smarter investments in the future. Nobody is supposed to +win all the time, particularly not people who don't do due diligence. +"A fool and his money are soon parted" and all that. It isn't the job +of the FTC/SEC/IRS/etc to make sure you invest your money wisely (and I +have grave doubts that they could even if it was their job). + + +> They +> finished their routine with the a quadruple lutz -- laying off +> hundreds of thousands of workers when it all came crashing down. + + +So what? Nobody is guaranteed employment. Laying people off is not a +crime nor is it immoral. Companies don't exist to provide employment, +nor should they. The closest we have to such a thing in the US is a +Government Job, and look at the quality THAT breeds. + + +> So.. tell me again.. how are we better off? + + +Perhaps it is just a matter of personal preference, but I'd rather not +live in a "feed lot" society, thank-you-very-much. + + +-James Rogers + jamesr@best.com + + + diff --git a/Ch3/datasets/spam/easy_ham/00333.9542450892a144f44e4d63faabbdb27c b/Ch3/datasets/spam/easy_ham/00333.9542450892a144f44e4d63faabbdb27c new file mode 100644 index 000000000..ad30b866e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00333.9542450892a144f44e4d63faabbdb27c @@ -0,0 +1,79 @@ +From fork-admin@xent.com Mon Aug 26 22:59:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 01AFA43F9B + for ; Mon, 26 Aug 2002 17:59:22 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 22:59:22 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QLqYZ11111 for ; + Mon, 26 Aug 2002 22:52:35 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A6BF42941CD; Mon, 26 Aug 2002 14:47:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id CCDAC294175 for ; + Mon, 26 Aug 2002 14:46:20 -0700 (PDT) +Received: (qmail 17818 invoked by uid 19621); 26 Aug 2002 21:47:47 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 26 Aug 2002 21:47:47 -0000 +Subject: Re: Entrepreneurs +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: <3D67A063.7080502@endeavors.com> +References: + <3D67A063.7080502@endeavors.com> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1030399374.2768.183.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 26 Aug 2002 15:02:54 -0700 + +On Sat, 2002-08-24 at 08:04, Gregory Alan Bolcer wrote: +> There's been well documented articles, studies of the +> French tax laws, corporate governance, and financial +> oversight that 1) dont' easily allow for ISOs, the root +> of almost all entrepreneurialship, and 2) the easy flow +> of capital to new ventures. It was an extremely large +> issue, even debated widely in France. + + +It is actually a lot worse than this. What it boils down to is that +only the privileged class is really allowed to start a serious company. +What I found fascinating is that the old French aristocracy effectively +still exists (literally the same families), but they now hold top +executive and management positions in the major French firms and the +government, positions which are only passed on to other blue bloods. Not +officially of course, but as a strict matter of practice. And the laws +and legal structures make sure that this system stays firmly in place. +Even for a young French blue blood, strict age hierarchies keep them +from branching out into a new venture in their own country (though many +can leverage this to start companies in OTHER countries). I know about +the French system first-hand and the executives are quite candid about +it (at least to Yanks like me who are working with them), but I suspect +this may hold true for other European countries as well. + +After all those "revolutions", France is still nothing more than a +thinly veiled old-school aristocracy, with all the trappings. + +-James Rogers + jamesr@best.com + + + diff --git a/Ch3/datasets/spam/easy_ham/00334.c7dd12784ce69de4bb49147cce037d76 b/Ch3/datasets/spam/easy_ham/00334.c7dd12784ce69de4bb49147cce037d76 new file mode 100644 index 000000000..db281c735 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00334.c7dd12784ce69de4bb49147cce037d76 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Tue Aug 27 00:33:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8118E44155 + for ; Mon, 26 Aug 2002 19:32:59 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 00:32:59 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QNUfZ14577 for ; + Tue, 27 Aug 2002 00:30:42 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A2EF62940B0; Mon, 26 Aug 2002 16:28:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (cpe-65-172-233-109.sanbrunocable.com + [65.172.233.109]) by xent.com (Postfix) with ESMTP id 77FD32940AE for + ; Mon, 26 Aug 2002 16:27:24 -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Mon, 26 Aug 2002 23:28:55 -08:00 +Message-Id: <3D6AB9B7.8020407@barrera.org> +From: "Joseph S. Barrera III" +Organization: Wings over the World +User-Agent: Mutt 5.00.2919.6900 DM (Nigerian Scammer Special Edition) +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: Jim Whitehead +Cc: FoRK , juliet@barrera.org +Subject: Re: How unlucky can you get? +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 16:28:55 -0700 + +Jim Whitehead wrote: +> So, after shutting off the water and mopping up, I was left to ponder what +> are the odds of having mechanical failure of a large rectangular porcelain +> bowl, in the absence of any visible stressors (like someone striking it with +> a sledgehammer)? We hadn't done anything unusual to the toilet in the recent + +All it takes is an overtorqued nut (e.g. at the water intake entrance) +to stress the porcelain, and you've got a time bomb waiting to go off. +Of course, if you're lucky, you'll overtorque it enough that the tank +will break right away, while you still have the water intake shut off. + +- Joe + + + diff --git a/Ch3/datasets/spam/easy_ham/00335.a48aba9076c75a8eb74f74ae1f9be1e9 b/Ch3/datasets/spam/easy_ham/00335.a48aba9076c75a8eb74f74ae1f9be1e9 new file mode 100644 index 000000000..0b1586ca9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00335.a48aba9076c75a8eb74f74ae1f9be1e9 @@ -0,0 +1,47 @@ +From fork-admin@xent.com Tue Aug 27 00:53:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0480643F99 + for ; Mon, 26 Aug 2002 19:53:25 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 00:53:25 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7QNnfZ15088 for ; + Tue, 27 Aug 2002 00:49:42 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4CF8F2941C9; Mon, 26 Aug 2002 16:47:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id 4F1B129417F for ; Mon, 26 Aug 2002 16:46:53 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id 4DAC7C44D; + Tue, 27 Aug 2002 01:40:02 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: A biblical digression +Message-Id: <20020826234002.4DAC7C44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 01:40:02 +0200 (CEST) + +John Hall: +>Ran across a site which claimed to explain the original meaning of the +>Ten Commandments. It seems some of those meanings have evolved a bit, too. + +You mean that "Thou shalt not covet thy neighbour's ass" used to be +about donkeys??? Inconceivable!!! + +R + diff --git a/Ch3/datasets/spam/easy_ham/00336.6d3511fa350ee5cf350ec4827fab5100 b/Ch3/datasets/spam/easy_ham/00336.6d3511fa350ee5cf350ec4827fab5100 new file mode 100644 index 000000000..bb057208e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00336.6d3511fa350ee5cf350ec4827fab5100 @@ -0,0 +1,73 @@ +From fork-admin@xent.com Tue Aug 27 02:14:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3141D43F9B + for ; Mon, 26 Aug 2002 21:14:54 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 02:14:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7R1AiZ20372 for ; + Tue, 27 Aug 2002 02:10:45 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4DFFC2941E1; Mon, 26 Aug 2002 18:08:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id 5C55729417F for ; + Mon, 26 Aug 2002 18:07:34 -0700 (PDT) +Received: (qmail 5844 invoked by uid 1111); 27 Aug 2002 01:09:28 -0000 +From: "Adam L. Beberg" +To: "Joseph S. Barrera III" +Cc: +Subject: Re: The GOv gets tough on Net Users.....er Pirates.. +In-Reply-To: <3D6A488C.7000609@barrera.org> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 18:09:28 -0700 (PDT) + +On Mon, 26 Aug 2002, Joseph S. Barrera III wrote: + +> Adam L. Beberg wrote: +> > Fair use needs to be clarified a bit +> +> That's an understatement!!! + +Yes, it is :( + +> > How else do i ever have hope of finding a job working for someone +> > that makes things people are supposed to ... *drumroll* pay for. +> +> Well, you could damn well get a fucking better attitude. I practically +> handed you a job the other week and you pissed all over me. I'm done +> helping you. You have joined a very exclusive club that up to now has +> only had my sister as a member. + +Forwarding me stuff from a list is hardly handing me a job. I tracked them +down, they dont exist anymore, like 99% of the things I track down the req's +are pulled or there is a freeze. + +The real problem is you cant even train for jobs now, since they _demand_ +7-10 years at a job paid to do the wierd collection of skills they want. + +But I'll get lucky eventually and someone I know will be a hiring manager. + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + + diff --git a/Ch3/datasets/spam/easy_ham/00337.2214ccddb3c9bd9cae70fc25dc9b1de6 b/Ch3/datasets/spam/easy_ham/00337.2214ccddb3c9bd9cae70fc25dc9b1de6 new file mode 100644 index 000000000..3b030798d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00337.2214ccddb3c9bd9cae70fc25dc9b1de6 @@ -0,0 +1,55 @@ +From fork-admin@xent.com Tue Aug 27 02:35:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id F038C43F9B + for ; Mon, 26 Aug 2002 21:35:14 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 02:35:15 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7R1WfZ20918 for ; + Tue, 27 Aug 2002 02:32:41 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3FF0B2941F1; Mon, 26 Aug 2002 18:30:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (cpe-65-172-233-109.sanbrunocable.com + [65.172.233.109]) by xent.com (Postfix) with ESMTP id DE4E52941ED for + ; Mon, 26 Aug 2002 18:29:26 -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Tue, 27 Aug 2002 01:30:45 -08:00 +Message-Id: <3D6AD645.7000709@barrera.org> +From: "Joseph S. Barrera III" +Organization: Wings over the World +User-Agent: Mutt 5.00.2919.6900 DM (Nigerian Scammer Special Edition) +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Re: The GOv gets tough on Net Users.....er Pirates.. +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 18:30:45 -0700 + +Adam L. Beberg wrote: + > Forwarding me stuff from a list is hardly handing me a job. + +I was talking about the open reqs at Kana (the company I work for). +Oh, but programming in Java is beneath you. + +- Joe + + + diff --git a/Ch3/datasets/spam/easy_ham/00338.e761d6d7c88c70b86e0dc9d7f0003fbf b/Ch3/datasets/spam/easy_ham/00338.e761d6d7c88c70b86e0dc9d7f0003fbf new file mode 100644 index 000000000..19d223f0e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00338.e761d6d7c88c70b86e0dc9d7f0003fbf @@ -0,0 +1,55 @@ +From fork-admin@xent.com Tue Aug 27 03:46:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AC53643F99 + for ; Mon, 26 Aug 2002 22:46:39 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 03:46:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7R2juZ23016 for ; + Tue, 27 Aug 2002 03:45:59 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 529562940A1; Mon, 26 Aug 2002 19:43:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id EE12829409E for + ; Mon, 26 Aug 2002 19:42:13 -0700 (PDT) +Received: (qmail 18632 invoked by uid 508); 27 Aug 2002 02:44:03 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.9) by + venus.phpwebhosting.com with SMTP; 27 Aug 2002 02:44:03 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g7R2i2a27964; Tue, 27 Aug 2002 04:44:03 + +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: Geege +Cc: +Subject: Re: Rambus, Man +In-Reply-To: <200208262039.NAA20810@stories2.idg.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 04:44:02 +0200 (CEST) + +On Mon, 26 Aug 2002, Geege wrote: + +> Latest Rambus memory plus fast bus appear to give Intel's newest P4 the jolt it needs. + +Well, Athlon FSB 333 is almost there. And I'm really looking forward to +the Hammer series. + + diff --git a/Ch3/datasets/spam/easy_ham/00339.865b307b144029f04b1fc94110acdb91 b/Ch3/datasets/spam/easy_ham/00339.865b307b144029f04b1fc94110acdb91 new file mode 100644 index 000000000..53ddeda5f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00339.865b307b144029f04b1fc94110acdb91 @@ -0,0 +1,72 @@ +From fork-admin@xent.com Tue Aug 27 04:17:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id EC09943F9B + for ; Mon, 26 Aug 2002 23:17:14 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 04:17:15 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7R3FvZ23841 for ; + Tue, 27 Aug 2002 04:16:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4C3AE2940AE; Mon, 26 Aug 2002 20:13:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id E4ED229409E for ; + Mon, 26 Aug 2002 20:12:14 -0700 (PDT) +Received: (qmail 6353 invoked by uid 1111); 27 Aug 2002 03:13:53 -0000 +From: "Adam L. Beberg" +To: Geege +Cc: +Subject: Re: Rambus, Man +In-Reply-To: <200208262039.NAA20810@stories2.idg.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 20:13:53 -0700 (PDT) + +On Mon, 26 Aug 2002, Geege wrote: + +> Summary: +> Latest Rambus memory plus fast bus appear to give Intel's newest P4 the +> jolt it needs. +> +> Geege attached the following message: +> ------------------------------------------------------------ +> ha ha ha harley. rambus earns it. +> ------------------------------------------------------------ + +"Expect a 3 percent to 5 percent boost with PC1066" + +5% faster for only 4 times [pricewatch at 7:55PM - 93 vs 379] the cost. + +Gimme gimme gimme! And I better get the full 5% speedup. + +And gime me that 20% faster GeForce 4600 at twice the cost of the 4200 too. + +Seriously, who falls for this scam? + +P.S. finished the PS2 port, it benchmarks at fp:1 int:40. a celeron 525 +benches at fp:460 int:400... If it's not a polygon fill the thing is +useless. There will be no beowolf cluster of these. It is 3x faster then +the iPaq tho at 1/13 :) + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00340.91d8c92aa5eccc84c40364fc4fc1ed63 b/Ch3/datasets/spam/easy_ham/00340.91d8c92aa5eccc84c40364fc4fc1ed63 new file mode 100644 index 000000000..8af337d8e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00340.91d8c92aa5eccc84c40364fc4fc1ed63 @@ -0,0 +1,71 @@ +From fork-admin@xent.com Tue Aug 27 05:18:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7C04E43F99 + for ; Tue, 27 Aug 2002 00:18:20 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 05:18:20 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7R4J5Z25625 for ; + Tue, 27 Aug 2002 05:19:09 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 439232941F6; Mon, 26 Aug 2002 21:16:11 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id D558829409E for ; Mon, + 26 Aug 2002 21:15:25 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id CB2493ED7E; + Tue, 27 Aug 2002 00:19:37 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id C9A6B3ED3B for ; Tue, + 27 Aug 2002 00:19:37 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Re: The GOv gets tough on Net Users.....er Pirates.. +In-Reply-To: <5.1.1.6.0.20020826113243.034de5d0@techdirt.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 00:19:37 -0400 (EDT) + + +What are you trying to sell???? What is the Value??? + +Example...Does Pratchett sell paper bound by glue or does he sell stories? + + + +Question...When I buy a book have I purchased the story? When I sell the +book does any of that revenue go to mr Pratchett? + +What if I read the book and give it to someone, who then reads it +and gives it to someone who then reads it and gives it to +someones....(bookcrossing.com though with more succesfull passings). Does +each reader send Mr Pratchett money? + +Have Used Bookstores, Recorstores etc destroyed the system of book/record +economy? + +AS to the resident sourpuss, in germany bitter may be better but here its +just plain stinkin thinkin. + + +-tom + + + + diff --git a/Ch3/datasets/spam/easy_ham/00341.c7f56e7cd829d52190cfd4af810bebce b/Ch3/datasets/spam/easy_ham/00341.c7f56e7cd829d52190cfd4af810bebce new file mode 100644 index 000000000..d0a7bb3c5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00341.c7f56e7cd829d52190cfd4af810bebce @@ -0,0 +1,73 @@ +From fork-admin@xent.com Tue Aug 27 06:29:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0C77F43F99 + for ; Tue, 27 Aug 2002 01:29:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 06:29:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7R5RvZ27153 for ; + Tue, 27 Aug 2002 06:28:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 46DFA2941F9; Mon, 26 Aug 2002 22:25:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc01.attbi.com (sccrmhc01.attbi.com [204.127.202.61]) + by xent.com (Postfix) with ESMTP id AA1B529409E for ; + Mon, 26 Aug 2002 22:24:00 -0700 (PDT) +Received: from Intellistation ([66.31.2.27]) by sccrmhc01.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020827052553.DSDH11061.sccrmhc01.attbi.com@Intellistation> for + ; Tue, 27 Aug 2002 05:25:53 +0000 +Content-Type: text/plain; charset="us-ascii" +From: Eirikur Hallgrimsson +Organization: Electric Brain +To: FoRK +Subject: Gecko adhesion finally sussed. +User-Agent: KMail/1.4.1 +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200208270124.00426.eh@mad.scientist.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 01:24:00 -0400 + +(Via Robot Wisdom) Maybe you UC folk know these people? + +http://www.eurekalert.org/pub_releases/2002-08/lcc-sph082202.php + +Working at Lewis & Clark College, the University of California at Berkeley, +the University of California at Santa Barbara, and Stanford University, +the interdisciplinary team: + + * confirmed speculation that the gecko's amazing climbing ability +depends on weak molecular attractive forces called van der Waals forces, + + * rejected a competing model based on the adhesion chemistry of water +molecules, and + +* discovered that the gecko's adhesive depends on geometry, not surface +chemistry. In other words, the size and shape of the tips of gecko foot +hairs--not what they are made of--determine the gecko's stickiness. + +To verify its experimental and theoretical results, the gecko group then +used its new data to fabricate prototype synthetic foot-hair tips from two +different materials. + +"Both artificial setal tips stuck as predicted," notes Autumn, assistant +professor of biology at Lewis & Clark College in Portland, Ore. "Our +initial prototypes open the door to manufacturing the first biologically +inspired dry, adhesive microstructures, which can have widespread +applications." + diff --git a/Ch3/datasets/spam/easy_ham/00342.e6c781df2ebba44a429b49b86b376559 b/Ch3/datasets/spam/easy_ham/00342.e6c781df2ebba44a429b49b86b376559 new file mode 100644 index 000000000..1694ff912 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00342.e6c781df2ebba44a429b49b86b376559 @@ -0,0 +1,176 @@ +From fork-admin@xent.com Tue Aug 27 10:35:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B96A943F9B + for ; Tue, 27 Aug 2002 05:35:48 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 10:35:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7R9XgZ01633 for ; + Tue, 27 Aug 2002 10:33:42 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 81A3A29409E; Tue, 27 Aug 2002 02:31:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from alumnus.caltech.edu (alumnus.caltech.edu [131.215.49.51]) + by xent.com (Postfix) with ESMTP id 02B8429409C for ; + Tue, 27 Aug 2002 02:30:48 -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) by alumnus.caltech.edu + (8.12.3/8.12.3) with ESMTP id g7R98Zfw023197 for ; + Tue, 27 Aug 2002 02:08:36 -0700 (PDT) +MIME-Version: 1.0 (Apple Message framework v482) +Content-Type: text/plain; charset=WINDOWS-1252; format=flowed +Subject: "A billion here, a billion there..." +From: Rohit Khare +To: Fork@xent.com +Message-Id: <82D4B3A0-B961-11D6-80A5-000393A46DEA@alumni.caltech.edu> +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 19:05:50 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7R9XgZ01633 + +> Bottom line: the late Senate Minority Leader certainly would have +> endorsed the meaning behind the phrase, but it is questionable that he +> ever coined it. + +An interesting link courtesy of the Harrow Report: there's no written +evidence so far that Senator Everett Dirksen is the source of the +infamous quote attributed to him. It's kind of astounding that there is +enough general social consensus (25% of all queries makes it a *very* +FAQ) and "eyewitness" reporting without a single written source. What +the essay below doesn't seem to answer, though, is what the earliest +attributed quote in print by any other writer is. I'd naturally be much +more skeptical if the "quote" emerged after his death... RK + +=============================================================== +http://www.dirksencenter.org/featuresBillionHere.htm + +"A billion here, a billion there . . ." + +Did Dirksen ever say, " A billion here, a billion there, and pretty soon +you're talking real money"? (or anything very close to that?) + +Perhaps not. Based on an exhaustive search of the paper and audio +records of The Dirksen Congressional Center, staffers there have found +no evidence that Dirksen ever uttered the phrase popularly attributed to +him. + +Archivists undertook the search after studying research statistics +showing that more than 25 percent of inquiries have to do with the quote +or its variations. + +Here is what they examined: all of the existing audio tapes of the famed +"Ev and Charlie" and "Ev and Jerry" shows, all newspapers clippings in +the Dirksen Papers, about 12,500 pages of Dirksen's own speech notes, +transcripts of his speeches and media appearances, transcripts of +Republican leadership press conferences, and Dirksen's statements on the +Senate floor as documented in the Congressional Record. + +Although Dirksen rarely prepared the text of a speech, preferring to +rely on notes, he did employ brief phrases to remind him of a particular +turn of phrase. For example, in referring to the public debt or +excessive government spending, Dirksen would jot the word "pothole" to +remind him to tell the following story, on this occasion in reference to +the debt ceiling: + + +"As I think of this bill, and the fact that the more progress we make +the deeper we go into the hole, I am reminded of a group of men who were +working on a street. They had dug quite a number of holes. When they got +through, they failed to puddle or tamp the earth when it was returned to +the hole, and they had a nice little mound, which was quite a traffic +hazard. + +"Not knowing what to do with it, they sat down on the curb and had a +conference. After a while, one of the fellows snapped his fingers and +said, ‘I have it. I know how we will get rid of that overriding earth +and remove the hazard. We will just dig the hole deeper.'" +[Congressional Record, June 16, 1965, p. 13884]. + + +On the same occasion, Dirksen relied on yet another "spending" story, +one he labeled "cat in the well": + + +"One time in the House of Representatives [a colleague] told me a story +about a proposition that a teacher put to a boy. He said, ‘Johnny, a cat +fell in a well 100 feet deep. Suppose that cat climbed up 1 foot and +then fell back 2 feet. How long would it take the cat to get out of the +well?' + +"Johnny worked assiduously with his slate and slate pencil for quite a +while, and then when the teacher came down and said, ‘How are you +getting along?' Johnny said, ‘Teacher, if you give me another slate and +a couple of slate pencils, I am pretty sure that in the next 30 minutes +I can land that cat in hell.' + +"If some people get any cheer our of a $328 billion debt ceiling, I do +not find much to cheer about concerning it." [Congressional Record, June +16, 1965, p. 13884]. + + +But there are no such reminders for the "A billion here, a billion +there . . . " tag line as there surely should have been given Dirksen's +note-making tendencies. He spoke often and passionately about the debt +ceiling, federal spending, and the growth of government. Yet there is no +authoritative reference to the "billion" phrase. + +The chief evidence in support of Dirksen making the statement comes from +people who claim to have heard him. The Library of Congress, for +example, cites someone's personal observation on the campaign trail as +evidence. The Dirksen Center has received calls from people who heard +Dirksen say those words, some even providing the date of the event. But +cross-checking that information with the records has, so far, turned up +nothing in the way of confirmation. + +The closest documented statement came at a joint Senate-House Republican +leadership press conference on March 8, 1962, when Dirksen said, "The +favorite sum of money is $1 billion – a billion a year for a fatter +federal payroll, a billion here, a billion there." [EMD Papers, +Republican Congressional Leadership File, f. 25] But the "and pretty +soon you're talking real money" is missing. + +In another close call, the New York Times, January 23, 1961, quoted +Dirksen: "Look at education – two-and-one-half billion – a billion for +this, a billion for that, a billion for something else. Three to five +billion for public works. You haven't got any budget balance left. +You'll be deeply in the red." [Cited in Byron Hulsey's "Everett Dirksen +and the Modern Presidents," Ph.D. dissertation (May 1998, University of +Texas, p. 226] + +Of course, the Dirksen Papers do not document completely the late +Senator's comments. For example, The Center that bears his name does not +have his testimony before committees. Their collection of Congressional +Records ends in 1965, omitting the last four years of Dirksen's life and +career – he might have employed the phrase only late, although witnesses +claim he said it throughout his career. Dirksen's campaign speeches +tended not to produce transcripts, only sketchy notes or abbreviated +newspaper accounts. Dirksen also held center stage before the video age, +meaning that many remarks, particularly those in campaigns, escaped +capture. + +Bottom line: the late Senate Minority Leader certainly would have +endorsed the meaning behind the phrase, but it is questionable that he +ever coined it. + +  + +  +--- +My permanent email address is khare@alumni.caltech.edu + + diff --git a/Ch3/datasets/spam/easy_ham/00343.81675074f7fcb53fd83ebabd4d158cb7 b/Ch3/datasets/spam/easy_ham/00343.81675074f7fcb53fd83ebabd4d158cb7 new file mode 100644 index 000000000..8a44d865e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00343.81675074f7fcb53fd83ebabd4d158cb7 @@ -0,0 +1,75 @@ +From fork-admin@xent.com Tue Aug 27 11:06:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7D8EC43F99 + for ; Tue, 27 Aug 2002 06:06:58 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 11:06:58 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7RA7gZ02703 for ; + Tue, 27 Aug 2002 11:07:47 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 19A6B2940BD; Tue, 27 Aug 2002 03:05:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mandark.labs.netnoteinc.com (unknown [212.2.188.179]) by + xent.com (Postfix) with ESMTP id C765D29409C for ; + Tue, 27 Aug 2002 03:04:33 -0700 (PDT) +Received: from phobos.labs.netnoteinc.com (phobos.labs.netnoteinc.com + [192.168.2.14]) by mandark.labs.netnoteinc.com (8.11.6/8.11.6) with ESMTP + id g7RA6X501222 for ; Tue, 27 Aug 2002 11:06:33 +0100 +Received: by phobos.labs.netnoteinc.com (Postfix, from userid 500) id + 9E4E343F99; Tue, 27 Aug 2002 06:04:25 -0400 (EDT) +Received: from phobos (localhost [127.0.0.1]) by + phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9857933D8B for + ; Tue, 27 Aug 2002 11:04:25 +0100 (IST) +To: fork +Subject: Re: The MIME information you requested (last changed 3154 Feb 14) +In-Reply-To: Message from UW Email Robot + of + "Wed, 21 Aug 2002 16:20:17 PDT." + <200208212320.g7LNKH73018839@docserver.cac.washington.edu> +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020827100425.9E4E343F99@phobos.labs.netnoteinc.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 11:04:20 +0100 + + +UW Email Robot said: + +> What is MIME? + +I know what MIME is godammit ;) + +> Since MIME is only a few years old, ... + +a *few*? Time to update pine-robot-blurb.txt on +docserver.cac.washington.edu, I think. + +Has anyone figured out what's up with this? Does someone out there think +that FoRK needs some MIME tutoring? + +--j. + diff --git a/Ch3/datasets/spam/easy_ham/00344.99ffe210a9d425a86ab01840bdfd86c9 b/Ch3/datasets/spam/easy_ham/00344.99ffe210a9d425a86ab01840bdfd86c9 new file mode 100644 index 000000000..1fca8c212 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00344.99ffe210a9d425a86ab01840bdfd86c9 @@ -0,0 +1,60 @@ +From fork-admin@xent.com Tue Aug 27 17:34:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D392343F99 + for ; Tue, 27 Aug 2002 12:34:35 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 17:34:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7RGUhZ16819 for ; + Tue, 27 Aug 2002 17:30:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 5B27D294204; Tue, 27 Aug 2002 09:28:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from panacea.canonical.org (ns1.canonical.org [209.115.72.29]) + by xent.com (Postfix) with ESMTP id 625DA2940CE for ; + Tue, 27 Aug 2002 09:27:33 -0700 (PDT) +Received: by panacea.canonical.org (Postfix, from userid 1004) id + 3C5C23F4F3; Tue, 27 Aug 2002 12:27:40 -0400 (EDT) +From: Kragen Sitaker +To: fork@spamassassin.taint.org +Subject: Re: The MIME information you requested (last changed 3154 Feb 14) +Message-Id: <20020827162740.GA24107@canonical.org> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.3.28i +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 12:27:40 -0400 + +Justin Mason writes: +> Has anyone figured out what's up with this? Does someone out there +> think that FoRK needs some MIME tutoring? + +I was puzzled at first, but I think I understand what happened. + +First, I approved the post because it didn't appear to be spam, even +though it wasn't from a member. I thought it was odd that someone +wanted to send the MIME blurb to the list, but it was not really that +different from causing the New York Times web site to send a story to +the list. (Except that the bits here are antediluvian, but old bits are +a problem to be solved by social opporobrium, not technical constraints.) + +But I think what actually happened is that some idiot got infected by +Klez and had both FoRK and the pine-robot autoresponder address in their +mailbox or addressbook, so Klez forged mail from fork@xent.com to the +autoresponder, which responded. To FoRK. + diff --git a/Ch3/datasets/spam/easy_ham/00345.20c35f26ff6b56d678fdbe7750477668 b/Ch3/datasets/spam/easy_ham/00345.20c35f26ff6b56d678fdbe7750477668 new file mode 100644 index 000000000..52622dc36 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00345.20c35f26ff6b56d678fdbe7750477668 @@ -0,0 +1,83 @@ +From fork-admin@xent.com Wed Aug 28 14:47:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1938343F99 + for ; Wed, 28 Aug 2002 09:47:19 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 14:47:19 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SDekZ26573 for ; + Wed, 28 Aug 2002 14:40:47 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 57A2C29418C; Wed, 28 Aug 2002 06:38:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (oe34.law12.hotmail.com [64.4.18.91]) by + xent.com (Postfix) with ESMTP id CB26E29409A for ; + Wed, 28 Aug 2002 06:37:51 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Wed, 28 Aug 2002 06:39:56 -0700 +X-Originating-Ip: [66.92.145.79] +Reply-To: "Bill Kearney" +From: "Bill Kearney" +To: +References: <20020828132525.19031.23950.Mailman@lair.xent.com> +Subject: Re: DataPower announces XML-in-silicon +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4807.1700 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Message-Id: +X-Originalarrivaltime: 28 Aug 2002 13:39:56.0340 (UTC) FILETIME=[656C7F40:01C24E98] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 09:39:52 -0400 + +> Now, to do this, we all know they have to be cracking the strong crypto used +> on all transaction in order to process them... So this has some preaty heavy +> implications, unless it's just BS. + +Anybody buying a box like this is undoubtledly going to integrate it into their +crypto infrastructure. What's the point of putting in a box like this if it's +not an active participant in your security framework? + +> Or.... you could just not bloat it 20x to begin with. Nah! (that was the +> whole point of XML afterall, to sell more CPUs - much like Oracle's use of +> Java allows them to sell 3x more CPU licenses due to the performance hit) + +Blah, blah, blah. The marketing FUD gets compounded by the Beberg FUD, talk +about 20x bloat. + +> Again, see above... they _are_ claiming to decode the crypto... + +What gives you the impression that's what they're doing? That's not what the +text says. It's largely fluff anyway. + +> > "Our XG3 execution core converts XML to machine code," said Kelly, +> Mmmmmmmmmmm, machine code, never a good idea ;) + +Uhhh, fundamentally it's all machine code. Kelly's comment seems more like +drivel from a clueless marketroid than anything of technical concern. + +Having what appears to be a silicon XML router would be a cool thing. Having +one integrated with your crypto environment would kick ass. Let it +deserialize/decrypt/repackage the XML before handing it off to the app servers. +The question, of course, is does it work with actual applications in the field +without tremendously reworking them. Somehow I doubt it... + +-Bill Kearney + diff --git a/Ch3/datasets/spam/easy_ham/00346.f1d941485f6a20b29329111c59760585 b/Ch3/datasets/spam/easy_ham/00346.f1d941485f6a20b29329111c59760585 new file mode 100644 index 000000000..500e39d7d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00346.f1d941485f6a20b29329111c59760585 @@ -0,0 +1,69 @@ +From fork-admin@xent.com Wed Aug 28 17:15:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 26FCA4415C + for ; Wed, 28 Aug 2002 12:15:10 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 17:15:10 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SGApZ32324 for ; + Wed, 28 Aug 2002 17:10:52 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 650832940FA; Wed, 28 Aug 2002 09:08:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.auracom.net (smtp1.auracom.net [165.154.140.23]) by + xent.com (Postfix) with ESMTP id E813129409A for ; + Wed, 28 Aug 2002 09:07:23 -0700 (PDT) +Received: from maya.dyndns.org (ts5-016.ptrb.interhop.net + [165.154.190.80]) by smtp1.auracom.net (8.11.2/8.11.2) with ESMTP id + g7SFh0m23800; Wed, 28 Aug 2002 11:43:01 -0400 (EDT) +Received: by maya.dyndns.org (Postfix, from userid 501) id EB2AA1C388; + Wed, 28 Aug 2002 12:07:24 -0400 (EDT) +To: Owen Byrne +Cc: fork@spamassassin.taint.org +Subject: Re: Canadians +References: <3D6CA455.4010907@permafrost.net> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 28 Aug 2002 12:07:24 -0400 + +>>>>> "O" == Owen Byrne writes: + + O> From the local paper this morning. "Canadians eat about seven + O> times as many doughnuts per capita"... (as Americans) . D'oh! + +If we had more variety of franchise food than the +Wendys/KFC/PizzaHut/TacoBell/TimHorton's monopoly (they are all Pepsi +under the hood, aren't they?), things might be different. When a New +Yorker has biscotti, we have a timbit, when a Parisienne has a +croissant, we have a timbit ... because that's all we can buy. + +The USA is a nation founded on creative free enterprise entrepreneurs; +Canada is a nation built on monopolies. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00347.f133df7e59af41ba1c596e60dde9dc48 b/Ch3/datasets/spam/easy_ham/00347.f133df7e59af41ba1c596e60dde9dc48 new file mode 100644 index 000000000..ff1972805 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00347.f133df7e59af41ba1c596e60dde9dc48 @@ -0,0 +1,70 @@ +From fork-admin@xent.com Wed Aug 28 17:25:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BA87E44156 + for ; Wed, 28 Aug 2002 12:25:47 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 17:25:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SGRkZ00449 for ; + Wed, 28 Aug 2002 17:27:47 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4C3562940D3; Wed, 28 Aug 2002 09:25:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f29.law15.hotmail.com [64.4.23.29]) by + xent.com (Postfix) with ESMTP id 6F89829409A for ; + Wed, 28 Aug 2002 09:24:30 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Wed, 28 Aug 2002 09:26:35 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Wed, 28 Aug 2002 16:26:34 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Re: Canadians +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 28 Aug 2002 16:26:35.0206 (UTC) FILETIME=[AD365E60:01C24EAF] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 16:26:34 +0000 + +Gary Lawrence Murphy: +>If we had more variety of franchise food than +>the Wendys/KFC/PizzaHut/TacoBell/TimHorton's monopoly .. The USA is a +>nation founded on creative free enterprise entrepreneurs; Canada +>is a nation built on monopolies. + +Things aren't all that bad. I remember Vancouver +as having a broad variety of good, local eateries. +And Toronto as having a variety of good, local +strip joints. ;-) I never ate a doughnut in +Canada, so I cannot vouch for their quality. I +could live in either of these cities quite happily, +but Carolyn doesn't like cold weather. + +Personally, I almost never eat at a franchise +restaurant. Usually you can find better fare or +cheaper fare (and often both!) at a local +restaurant. + + + +_________________________________________________________________ +Join the world’s largest e-mail service with MSN Hotmail. +http://www.hotmail.com + + diff --git a/Ch3/datasets/spam/easy_ham/00348.009168209d00ae1cb41ebe3a7f113d4b b/Ch3/datasets/spam/easy_ham/00348.009168209d00ae1cb41ebe3a7f113d4b new file mode 100644 index 000000000..049c79481 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00348.009168209d00ae1cb41ebe3a7f113d4b @@ -0,0 +1,49 @@ +From fork-admin@xent.com Wed Aug 28 17:56:47 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BF57A44156 + for ; Wed, 28 Aug 2002 12:56:47 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 17:56:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SGskZ01542 for ; + Wed, 28 Aug 2002 17:54:46 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id ED86E294199; Wed, 28 Aug 2002 09:52:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id A350829409A for ; Wed, 28 Aug 2002 09:51:22 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id 8826AC44D; + Wed, 28 Aug 2002 18:44:09 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: Java is for kiddies +Message-Id: <20020828164409.8826AC44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 18:44:09 +0200 (CEST) + +JoeBar wrote: +>C is more reliable than Java?? + +Depends who writes it. One guy will write a bug every 5 lines, +another every 5000 lines. Put them both on a project and that will +average out to a bug every 4.995 lines. +(Irrespective of language. Pick the one +that best suits what you're trying to do.) + +R + diff --git a/Ch3/datasets/spam/easy_ham/00349.0a6507ca70c84e4beab8698a733970f6 b/Ch3/datasets/spam/easy_ham/00349.0a6507ca70c84e4beab8698a733970f6 new file mode 100644 index 000000000..f3be06c6a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00349.0a6507ca70c84e4beab8698a733970f6 @@ -0,0 +1,75 @@ +From fork-admin@xent.com Wed Aug 28 18:07:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id DF39144155 + for ; Wed, 28 Aug 2002 13:07:11 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 18:07:11 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SGxkZ01730 for ; + Wed, 28 Aug 2002 17:59:46 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6D0B929421A; Wed, 28 Aug 2002 09:57:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.auracom.net (smtp1.auracom.net [165.154.140.23]) by + xent.com (Postfix) with ESMTP id 950BB29421A for ; + Wed, 28 Aug 2002 09:56:53 -0700 (PDT) +Received: from maya.dyndns.org (ts5-044.ptrb.interhop.net + [165.154.190.108]) by smtp1.auracom.net (8.11.2/8.11.2) with ESMTP id + g7SGWeV29536; Wed, 28 Aug 2002 12:32:41 -0400 (EDT) +Received: by maya.dyndns.org (Postfix, from userid 501) id E85451C388; + Wed, 28 Aug 2002 12:57:04 -0400 (EDT) +To: "Russell Turpin" +Cc: fork@spamassassin.taint.org +Subject: Re: Canadians +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 28 Aug 2002 12:57:04 -0400 + +>>>>> "R" == Russell Turpin writes: + + R> Things aren't all that bad. I remember Vancouver as having a + R> broad variety of good, local eateries. And Toronto as having a + R> variety of good, local strip joints. ;-) + +I haven't been to Van in years, but I do know that in Toronto, outside +of the small deeply ethnic neighbourhoods, if you stray more than 50 +feet from Wellesley and Jarvis or Queen and Spadina, you're in +doughnutland; there's far more like the eateries in the Eaton Centre +than there are quaint cafes like McCaul north of Dundas, and the rare +little eateries are not brimming with lunchtime traffic (you can still +find a seat at noon at Village by the Grange) + +When most of Toronto does not live in those neighbourhoods but instead +lives in Scarborough, Malton, Mississauga and Markham (franchisevilles), you +will quickly see that one or two trendy strips does not save an entire +nation. + + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00350.b01dafc878fcedbeee6a4d7c120ef0c4 b/Ch3/datasets/spam/easy_ham/00350.b01dafc878fcedbeee6a4d7c120ef0c4 new file mode 100644 index 000000000..829599309 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00350.b01dafc878fcedbeee6a4d7c120ef0c4 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Wed Aug 28 18:07:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AE58744156 + for ; Wed, 28 Aug 2002 13:07:12 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 18:07:12 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SH4cZ01940 for ; + Wed, 28 Aug 2002 18:04:38 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 53FDD29421E; Wed, 28 Aug 2002 09:59:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.auracom.net (smtp1.auracom.net [165.154.140.23]) by + xent.com (Postfix) with ESMTP id 5ACFA29421D for ; + Wed, 28 Aug 2002 09:58:23 -0700 (PDT) +Received: from maya.dyndns.org (ts5-044.ptrb.interhop.net + [165.154.190.108]) by smtp1.auracom.net (8.11.2/8.11.2) with ESMTP id + g7SGY4V29693; Wed, 28 Aug 2002 12:34:04 -0400 (EDT) +Received: by maya.dyndns.org (Postfix, from userid 501) id 3A3B21C38C; + Wed, 28 Aug 2002 12:58:27 -0400 (EDT) +To: harley@argote.ch (Robert Harley) +Cc: fork@spamassassin.taint.org +Subject: Re: Java is for kiddies +References: <20020828164409.8826AC44D@argote.ch> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 28 Aug 2002 12:58:26 -0400 + +>>>>> "R" == Robert Harley writes: + + R> Depends who writes it. One guy will write a bug every 5 lines, + R> another every 5000 lines. Put them both on a project and that + R> will average out to a bug every 4.995 lines. + +And a Java program, due to the extensive class libraries, will weigh +in at 10% the number of lines of the equivalent C program. QED. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00351.edc235781cd0e2e3b562d868d3a8df62 b/Ch3/datasets/spam/easy_ham/00351.edc235781cd0e2e3b562d868d3a8df62 new file mode 100644 index 000000000..4e4b8f269 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00351.edc235781cd0e2e3b562d868d3a8df62 @@ -0,0 +1,54 @@ +From fork-admin@xent.com Wed Aug 28 18:07:17 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5108144157 + for ; Wed, 28 Aug 2002 13:07:13 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 18:07:13 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SH8TZ02179 for ; + Wed, 28 Aug 2002 18:08:29 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AA10D294226; Wed, 28 Aug 2002 09:59:17 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id 38F5B29421D for ; Wed, 28 Aug 2002 09:58:44 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id 34E98C44D; + Wed, 28 Aug 2002 18:51:32 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: The GOv gets tough on Net Users.....er Pirates.. +Message-Id: <20020828165132.34E98C44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 18:51:32 +0200 (CEST) + +Mike Masnick wrote: +>Why is it that people don't understand that giving stuff away is a +>perfectly acceptable tactic in capitalist businesses? In many places, it's +>called "advertising": "buy one, get one free" + +I'll just take the free one, OK? + +No? + +Oh, so actually it's not free at all; you're just bundling, with a unit +price half of what's advertised. + +How about some truth in that advertising? + +R + diff --git a/Ch3/datasets/spam/easy_ham/00352.986723b3325cd57e893cfcdf992d59b3 b/Ch3/datasets/spam/easy_ham/00352.986723b3325cd57e893cfcdf992d59b3 new file mode 100644 index 000000000..36b602888 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00352.986723b3325cd57e893cfcdf992d59b3 @@ -0,0 +1,57 @@ +From fork-admin@xent.com Wed Aug 28 18:17:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7157043F99 + for ; Wed, 28 Aug 2002 13:17:25 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 18:17:25 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SHBYZ02287 for ; + Wed, 28 Aug 2002 18:11:34 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 95A6A294224; Wed, 28 Aug 2002 10:07:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id DEE3229421D for ; Wed, 28 Aug 2002 10:06:49 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id B53E9C44D; + Wed, 28 Aug 2002 18:59:37 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: Java is for kiddies +Message-Id: <20020828165937.B53E9C44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 18:59:37 +0200 (CEST) + +GLM wrote: +>And a Java program, due to the extensive class libraries, will weigh +>in at 10% the number of lines of the equivalent C program. QED. + +Quod erat not demonstrandum at all. + +There are massive amounts of libraries for C, Fortran and so on. +To pick an obvious example., if you want to do linear algebra, then +Java isn't a serious candidate at all. + +Furthermore, plenty of bugs occur in the libraries too, at a lower +rate due to more users having been bitten by them, but they are much +harder for you to fix than in your own code. + +Why do so many people outside of Sun's marketing department consider +Java to be "Write Once, Debug Everywhere" ? + +R + diff --git a/Ch3/datasets/spam/easy_ham/00353.ec01b62420323fffe253643fe0439c86 b/Ch3/datasets/spam/easy_ham/00353.ec01b62420323fffe253643fe0439c86 new file mode 100644 index 000000000..8a5ef42de --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00353.ec01b62420323fffe253643fe0439c86 @@ -0,0 +1,80 @@ +From fork-admin@xent.com Wed Aug 28 18:28:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A52A143F99 + for ; Wed, 28 Aug 2002 13:28:06 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 18:28:06 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SHLxZ02684 for ; + Wed, 28 Aug 2002 18:22:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 631EE29422C; Wed, 28 Aug 2002 10:19:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id 81DA529409A for ; + Wed, 28 Aug 2002 10:18:35 -0700 (PDT) +Received: (qmail 53311 invoked by uid 19621); 28 Aug 2002 17:20:03 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 28 Aug 2002 17:20:03 -0000 +Subject: Re: Java is for kiddies +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: <3D6BA1A1.90306@barrera.org> +References: + <3D6BA1A1.90306@barrera.org> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1030556128.7585.29.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 28 Aug 2002 10:35:27 -0700 + +On Tue, 2002-08-27 at 08:58, Joseph S. Barrera III wrote: +> +> C is more reliable than Java?? + + +Both are reliable. "Reliability" is more a function of the software +engineer. I've written complicated mission-critical server software in +Java that will run without a hiccup as long as the Unix box it is +sitting on is running. Same with C. For processes that are running +months at a time, and in my case constantly touching databases and doing +lots of low-level network stuff, reliability is obtained by making sure +every conceivable problem (and problems you didn't conceive of) recovers +to a clean/safe process state so that things keep running i.e. it is a +design/programming issue. + +That said, we usually prototype serious systems in Java and then +re-implement them in C if we have time. Java doesn't scale well as a +language for server apps, though not for the reasons usually offered. +The problem is that for high-end server apps, you really need fairly +detailed and low-level control of system resources to get around +bottlenecks that show up relatively quickly in languages that don't give +you access to it. You can squeeze several times the performance out of +a C server program than a Java one simply by being able to finely tune +(or more frequently, bypass) the system resource management. +Nonetheless, this is not a significant factor for most applications you +could conceivably develop in either language, as most aren't limited by +raw performance scalability. + + +-James Rogers + jamesr@best.com + + diff --git a/Ch3/datasets/spam/easy_ham/00354.2302c4c1801e52a59346a64a5a31ed85 b/Ch3/datasets/spam/easy_ham/00354.2302c4c1801e52a59346a64a5a31ed85 new file mode 100644 index 000000000..5e16c96e9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00354.2302c4c1801e52a59346a64a5a31ed85 @@ -0,0 +1,93 @@ +From fork-admin@xent.com Wed Aug 28 18:38:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0AAF744155 + for ; Wed, 28 Aug 2002 13:38:58 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 18:38:58 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SHbmZ03288 for ; + Wed, 28 Aug 2002 18:37:49 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6058729422F; Wed, 28 Aug 2002 10:35:11 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx1.ucsc.edu [128.114.129.36]) by + xent.com (Postfix) with ESMTP id AED9329409A for ; + Wed, 28 Aug 2002 10:34:28 -0700 (PDT) +Received: from Tycho (dhcp-63-177.cse.ucsc.edu [128.114.63.177]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g7SHaGT09111 for + ; Wed, 28 Aug 2002 10:36:16 -0700 (PDT) +From: "Jim Whitehead" +To: "FoRK" +Subject: RE: Gecko adhesion finally sussed. +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <200208270124.00426.eh@mad.scientist.com> +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 10:34:04 -0700 + +Great, this is half of what I'd need to become Spider Man! Now all I need to +figure out is how to do that spider web shooting thing. + +- Jim + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +> Eirikur Hallgrimsson +> Sent: Monday, August 26, 2002 10:24 PM +> To: FoRK +> Subject: Gecko adhesion finally sussed. +> +> +> (Via Robot Wisdom) Maybe you UC folk know these people? +> +> http://www.eurekalert.org/pub_releases/2002-08/lcc-sph082202.php +> +> Working at Lewis & Clark College, the University of California at +> Berkeley, +> the University of California at Santa Barbara, and Stanford University, +> the interdisciplinary team: +> +> * confirmed speculation that the gecko's amazing climbing ability +> depends on weak molecular attractive forces called van der Waals forces, +> +> * rejected a competing model based on the adhesion chemistry of water +> molecules, and +> +> * discovered that the gecko's adhesive depends on geometry, not surface +> chemistry. In other words, the size and shape of the tips of gecko foot +> hairs--not what they are made of--determine the gecko's stickiness. +> +> To verify its experimental and theoretical results, the gecko group then +> used its new data to fabricate prototype synthetic foot-hair tips +> from two +> different materials. +> +> "Both artificial setal tips stuck as predicted," notes Autumn, assistant +> professor of biology at Lewis & Clark College in Portland, Ore. "Our +> initial prototypes open the door to manufacturing the first biologically +> inspired dry, adhesive microstructures, which can have widespread +> applications." + + diff --git a/Ch3/datasets/spam/easy_ham/00355.9fabc0fb3da1d8376c6db0702b60fb39 b/Ch3/datasets/spam/easy_ham/00355.9fabc0fb3da1d8376c6db0702b60fb39 new file mode 100644 index 000000000..a89b3522d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00355.9fabc0fb3da1d8376c6db0702b60fb39 @@ -0,0 +1,79 @@ +From fork-admin@xent.com Wed Aug 28 18:49:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A716744156 + for ; Wed, 28 Aug 2002 13:49:13 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 18:49:13 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SHmKZ03633 for ; + Wed, 28 Aug 2002 18:48:20 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D7126294236; Wed, 28 Aug 2002 10:42:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id 45E04294235 for ; + Wed, 28 Aug 2002 10:41:43 -0700 (PDT) +Received: (qmail 54312 invoked by uid 19621); 28 Aug 2002 17:43:11 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 28 Aug 2002 17:43:11 -0000 +Subject: Re: Java is for kiddies +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: +References: <20020828164409.8826AC44D@argote.ch> + +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1030557516.7585.53.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 28 Aug 2002 10:58:35 -0700 + +On Wed, 2002-08-28 at 09:58, Gary Lawrence Murphy wrote: +> +> And a Java program, due to the extensive class libraries, will weigh +> in at 10% the number of lines of the equivalent C program. QED. + + +My typical Java-to-C conversion doesn't increase the lines of code by +more than 20%, and a fair portion of that is the implementation of +additional features that drove us to do the conversion in the first +place. Some things are substantially more succinct when written in C +than in Java. C and most other mature languages have an endless +collection of libraries. I personally don't use anything beyond the +core libraries of any language that much though. + +On a tangent, I find libraries nearly useless for a great many things +due primarily to the fact that most of them are so general that a given +non-trivial API almost always has a context in which it will function in +a pathological manner. Code reuse is wonderful and all that, but +libraries frequently make design trade-offs that won't work for me even +if they theoretically do exactly what I need. Unfortunately, it isn't +particularly easy nor does it make a nice simple API to design a library +that really is optimizable to a wide range of design cases. I've built +a small collection of flexible psuedo-polymorphic APIs over the years +that I tend to use, but it is a pretty ugly solution for code reuse when +you get right down to it. + + +-James Rogers + jamesr@best.com + + + diff --git a/Ch3/datasets/spam/easy_ham/00356.f414aefc1fc74d9cd77da0f07f64546c b/Ch3/datasets/spam/easy_ham/00356.f414aefc1fc74d9cd77da0f07f64546c new file mode 100644 index 000000000..496f08529 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00356.f414aefc1fc74d9cd77da0f07f64546c @@ -0,0 +1,60 @@ +From fork-admin@xent.com Wed Aug 28 18:49:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D8EC444155 + for ; Wed, 28 Aug 2002 13:49:12 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 18:49:13 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SHhjZ03437 for ; + Wed, 28 Aug 2002 18:43:46 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E7B7F294232; Wed, 28 Aug 2002 10:41:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx1.ucsc.edu [128.114.129.36]) by + xent.com (Postfix) with ESMTP id 6152029409A for ; + Wed, 28 Aug 2002 10:40:51 -0700 (PDT) +Received: from Tycho (dhcp-63-177.cse.ucsc.edu [128.114.63.177]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g7SHgeT10615 for + ; Wed, 28 Aug 2002 10:42:40 -0700 (PDT) +From: "Jim Whitehead" +To: "FoRK" +Subject: Another low probability event +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 10:40:28 -0700 + +So, a new family moved in down the street, with two kids, making us very +excited that there might be a child around the same age (20 months) as our +daughter Tatum. While we're talking to the family, we discover that their +daughter Kiara was born the same day as Tatum, within two hours, in the same +exact maternity ward. Both mothers were undoubtedly in labor at the same +time. + +Wow. + +- Jim + + diff --git a/Ch3/datasets/spam/easy_ham/00357.d559b71616f64ba1d1c1e61a03644fd4 b/Ch3/datasets/spam/easy_ham/00357.d559b71616f64ba1d1c1e61a03644fd4 new file mode 100644 index 000000000..07111a212 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00357.d559b71616f64ba1d1c1e61a03644fd4 @@ -0,0 +1,69 @@ +From fork-admin@xent.com Thu Aug 29 11:03:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5E92E43F9B + for ; Thu, 29 Aug 2002 06:03:44 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:03:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SIfpZ05766 for ; + Wed, 28 Aug 2002 19:41:52 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7AB33294235; Wed, 28 Aug 2002 11:39:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp10.atl.mindspring.net (smtp10.atl.mindspring.net + [207.69.200.246]) by xent.com (Postfix) with ESMTP id C798F29409A for + ; Wed, 28 Aug 2002 11:38:18 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + smtp10.atl.mindspring.net with esmtp (Exim 3.33 #1) id 17k7jk-00025x-00; + Wed, 28 Aug 2002 14:40:16 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: +References: +To: "Jim Whitehead" , "FoRK" +From: "R. A. Hettinga" +Subject: RE: Gecko adhesion finally sussed. +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 13:43:03 -0400 + +At 10:34 AM -0700 on 8/28/02, Jim Whitehead wrote: + + +> Great, this is half of what I'd need to become Spider Man! Now all I need to +> figure out is how to do that spider web shooting thing. + +...That and be able to stick yourself upside down on a 20 foot ceiling from +a standing jump... + +I remember someone recently doing the calculations in kilocalories required +to be spiderman somewhere. Kind of like those flaming processor "analyses" +done a couple of years ago... + +Cheers, +RAH + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + diff --git a/Ch3/datasets/spam/easy_ham/00358.df37619f4cc3d224acd6f8e57e67fd24 b/Ch3/datasets/spam/easy_ham/00358.df37619f4cc3d224acd6f8e57e67fd24 new file mode 100644 index 000000000..10123e1e0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00358.df37619f4cc3d224acd6f8e57e67fd24 @@ -0,0 +1,119 @@ +From fork-admin@xent.com Thu Aug 29 11:03:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 55F2C44156 + for ; Thu, 29 Aug 2002 06:03:45 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:03:45 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SJIkZ07106 for ; + Wed, 28 Aug 2002 20:18:47 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4B6B129423C; Wed, 28 Aug 2002 12:16:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.auracom.net (smtp1.auracom.net [165.154.140.23]) by + xent.com (Postfix) with ESMTP id 7200129423B for ; + Wed, 28 Aug 2002 12:15:20 -0700 (PDT) +Received: from maya.dyndns.org (ts5-015.ptrb.interhop.net + [165.154.190.79]) by smtp1.auracom.net (8.11.2/8.11.2) with ESMTP id + g7SIp0V22231; Wed, 28 Aug 2002 14:51:01 -0400 (EDT) +Received: by maya.dyndns.org (Postfix, from userid 501) id 643D01C388; + Wed, 28 Aug 2002 15:06:40 -0400 (EDT) +To: harley@argote.ch (Robert Harley) +Cc: fork@spamassassin.taint.org +Subject: Re: Java is for kiddies +References: <20020828165937.B53E9C44D@argote.ch> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 28 Aug 2002 15:06:39 -0400 + +>>>>> "R" == Robert Harley writes: + + R> GLM wrote: + >> And a Java program, due to the extensive class libraries, will + >> weigh in at 10% the number of lines of the equivalent C + >> program. QED. + + R> There are massive amounts of libraries for C, Fortran and so + R> on. To pick an obvious example., if you want to do linear + R> algebra, then Java isn't a serious candidate at all. + +If you want to do http, C gets pretty muddy (curl is about the best +choice I've found) but I grant you that: No language is the be-all and +end-all. + +I envy some of those posting to this list. I've been in business for +24 years and I haven't yet had the luxury of writing every line of +code for any project. We are always coerced by budgets and time to +maximize the amount of work done elsewhere. + +As much as I hate dealing with someone else's blackbox, as much as +I've spent sleepless nights second-guessing external libs, I've never +ever had the luxury to do otherwise. It must be wonderful to be +responsible for something you are actually responsible for, and I am +so sick of being blamed for other people's design mistakes. + +Maybe there's an archive somewhere I need to know about, but I've been +using C since DrDobbs first published SmallC and yet I've never found +any decent LGPL libs cataloged in such a way that I can just type in +the task and get back an API. Because of Javadoc, which is by no +means perfect, Java provides me the second best catalog of 3rd-party +libs, second only to Perl's CPAN -- Perl is one language I also really +hate with a passion, yet end up using the most for exactly this reason. + +For example, take the recent CBC Olympics site: I needed to roll +together a telnet client with a tokenizer, perl-regex preprocessing a +stream to produce parseable XML, project that XML into relational +databases using only the DTD to generate the rdbms schema, and open an +XMLRPC interface to read and post items into the news stream. Where +can I find C libs for those components? + +On the webserver, we then needed a multithreaded read-only http socket +which can spawn persistent data-caching servlets that periodically +refresh themselves over socket connections to the relational database, +presenting the retreived values through XSLT-defined transforms, and +again, where can I find such stuff for C ... or for any other langauge +but Java? Wombat (servlet spec for Perl) was inviting, but it's not +ready for prime-time, and re-inventing that entire shopping list in C +is just not feasible for one programmer to do inside of 8 weeks. + +When you need C libs, or even C++ libs, where's the best place to shop? +Where do you find standards-based portable RDBMS API? (ODBC?) How do +you evaluate these things without actually fetching every one and +trying it out? + +In a perfect universe, I'd use Ocaml or even Ruby, but I don't see the +social infrastructure for either happening during my professional +lifetime. + + R> Why do so many people outside of Sun's marketing department + R> consider Java to be "Write Once, Debug Everywhere" ? + +A collegue at Cognos (Henk?) called C "the nearly-portable assembler" + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00359.dad4917f824800d6623db29ea557b514 b/Ch3/datasets/spam/easy_ham/00359.dad4917f824800d6623db29ea557b514 new file mode 100644 index 000000000..8350ea5a4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00359.dad4917f824800d6623db29ea557b514 @@ -0,0 +1,54 @@ +From fork-admin@xent.com Thu Aug 29 11:03:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id DB50544158 + for ; Thu, 29 Aug 2002 06:03:47 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:03:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SK5jZ08648 for ; + Wed, 28 Aug 2002 21:05:46 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A9BAE2940ED; Wed, 28 Aug 2002 13:03:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx1.ucsc.edu [128.114.129.36]) by + xent.com (Postfix) with ESMTP id 88BCC2940E4 for ; + Wed, 28 Aug 2002 13:02:22 -0700 (PDT) +Received: from Tycho (dhcp-63-177.cse.ucsc.edu [128.114.63.177]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g7SK48T11280 for + ; Wed, 28 Aug 2002 13:04:08 -0700 (PDT) +From: "Jim Whitehead" +To: "FoRK" +Subject: RIAA site hacked overnight +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 13:01:54 -0700 + +First seen on Dave Winer's Scrpiting News (www.scripting.com) Details here: + +http://www.digichapman.com/index.php?permalink=67 + +- Jim + diff --git a/Ch3/datasets/spam/easy_ham/00360.5e45677c7b7a664d516da6b003d9656d b/Ch3/datasets/spam/easy_ham/00360.5e45677c7b7a664d516da6b003d9656d new file mode 100644 index 000000000..eb2b86ad2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00360.5e45677c7b7a664d516da6b003d9656d @@ -0,0 +1,57 @@ +From fork-admin@xent.com Thu Aug 29 11:04:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A13754415A + for ; Thu, 29 Aug 2002 06:03:49 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:03:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7T0giZ21358 for ; + Thu, 29 Aug 2002 01:42:45 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4D72F2940A9; Wed, 28 Aug 2002 17:40:12 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc01.attbi.com (sccrmhc01.attbi.com [204.127.202.61]) + by xent.com (Postfix) with ESMTP id 41C212940A5 for ; + Wed, 28 Aug 2002 17:39:26 -0700 (PDT) +Received: from Intellistation ([66.31.2.27]) by sccrmhc01.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020829004128.SNIW11061.sccrmhc01.attbi.com@Intellistation> for + ; Thu, 29 Aug 2002 00:41:28 +0000 +Content-Type: text/plain; charset="us-ascii" +From: Eirikur Hallgrimsson +Organization: Electric Brain +To: FoRK +Subject: "Holiday Season" 2002 begins +User-Agent: KMail/1.4.1 +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200208282039.25043.eh@mad.scientist.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 20:39:25 -0400 + +It's official, the holidays are here. I got HTML mail from one of the +little catalogs I've been known to purchase from....basically the front +page of their first holiday catalog. + +Must have been released simultaneously with mailing for a delivery target +of just after Labor Day. + +Ick. + +Eirikur + + diff --git a/Ch3/datasets/spam/easy_ham/00361.6a215262fed7b15f657b22c65107eafd b/Ch3/datasets/spam/easy_ham/00361.6a215262fed7b15f657b22c65107eafd new file mode 100644 index 000000000..fe9690100 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00361.6a215262fed7b15f657b22c65107eafd @@ -0,0 +1,63 @@ +From fork-admin@xent.com Thu Aug 29 11:04:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A04C543F99 + for ; Thu, 29 Aug 2002 06:03:48 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:03:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SM2mZ11821 for ; + Wed, 28 Aug 2002 23:02:48 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 70E2C2940AC; Wed, 28 Aug 2002 15:00:11 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx1.ucsc.edu [128.114.129.36]) by + xent.com (Postfix) with ESMTP id BDE2F2940A5 for ; + Wed, 28 Aug 2002 14:59:09 -0700 (PDT) +Received: from Tycho (dhcp-63-177.cse.ucsc.edu [128.114.63.177]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g7SLxET06253; Wed, + 28 Aug 2002 14:59:15 -0700 (PDT) +From: "Jim Whitehead" +To: "Gary Lawrence Murphy" +Cc: +Subject: RE: Java is for kiddies +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 14:57:00 -0700 + +> For example, take the recent CBC Olympics site: I needed to roll +> together a telnet client with a tokenizer, perl-regex preprocessing a +> stream to produce parseable XML, project that XML into relational +> databases using only the DTD to generate the rdbms schema, and open an +> XMLRPC interface to read and post items into the news stream. Where +> can I find C libs for those components? + +You open sourced the new components you developed for this project, so the +next person who comes along won't have to reimplement them, right? + +- Jim + + diff --git a/Ch3/datasets/spam/easy_ham/00362.bfb007d2df523d5e4ad58dfcdbc1b8cb b/Ch3/datasets/spam/easy_ham/00362.bfb007d2df523d5e4ad58dfcdbc1b8cb new file mode 100644 index 000000000..6a65e5b98 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00362.bfb007d2df523d5e4ad58dfcdbc1b8cb @@ -0,0 +1,73 @@ +From fork-admin@xent.com Thu Aug 29 11:04:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5B3624415B + for ; Thu, 29 Aug 2002 06:03:50 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:03:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7T1KjZ22489 for ; + Thu, 29 Aug 2002 02:20:46 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0305A29418F; Wed, 28 Aug 2002 18:18:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav26.law15.hotmail.com [64.4.22.83]) by + xent.com (Postfix) with ESMTP id 5709E2940AD for ; + Wed, 28 Aug 2002 18:17:12 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Wed, 28 Aug 2002 18:19:15 -0700 +X-Originating-Ip: [63.224.51.161] +From: "Mr. FoRK" +To: "FoRK" +References: +Subject: Re: Another low probability event +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Message-Id: +X-Originalarrivaltime: 29 Aug 2002 01:19:15.0803 (UTC) FILETIME=[173672B0:01C24EFA] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 18:18:53 -0700 + +We met a family in our parent-baby group with a son born a few minutes +before our daughter - not unlikely as all members were from the same +hospital. But, this family happened to have lived in the exact same +apartment unit a year before we had... + +----- Original Message ----- +From: "Jim Whitehead" +To: "FoRK" +Sent: Wednesday, August 28, 2002 10:40 AM +Subject: Another low probability event + + +> So, a new family moved in down the street, with two kids, making us very +> excited that there might be a child around the same age (20 months) as our +> daughter Tatum. While we're talking to the family, we discover that their +> daughter Kiara was born the same day as Tatum, within two hours, in the +same +> exact maternity ward. Both mothers were undoubtedly in labor at the same +> time. +> +> Wow. +> +> - Jim +> + diff --git a/Ch3/datasets/spam/easy_ham/00363.64af27f0c753ccf6ec2e9c4e64c14b76 b/Ch3/datasets/spam/easy_ham/00363.64af27f0c753ccf6ec2e9c4e64c14b76 new file mode 100644 index 000000000..3fede1bae --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00363.64af27f0c753ccf6ec2e9c4e64c14b76 @@ -0,0 +1,68 @@ +From fork-admin@xent.com Thu Aug 29 11:04:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A67884415C + for ; Thu, 29 Aug 2002 06:03:51 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:03:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7T2DpZ23960 for ; + Thu, 29 Aug 2002 03:13:52 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 21B3D2941C7; Wed, 28 Aug 2002 19:11:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.auracom.net (smtp1.auracom.net [165.154.140.23]) by + xent.com (Postfix) with ESMTP id 93618294099 for ; + Wed, 28 Aug 2002 19:10:45 -0700 (PDT) +Received: from maya.dyndns.org (ts5-016.ptrb.interhop.net + [165.154.190.80]) by smtp1.auracom.net (8.11.2/8.11.2) with ESMTP id + g7T1kLU16275; Wed, 28 Aug 2002 21:46:21 -0400 (EDT) +Received: by maya.dyndns.org (Postfix, from userid 501) id 062961C388; + Wed, 28 Aug 2002 21:52:11 -0400 (EDT) +To: "Jim Whitehead" +Cc: +Subject: Re: Java is for kiddies +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 28 Aug 2002 21:52:11 -0400 + +>>>>> "J" == Jim Whitehead writes: + + J> You open sourced the new components you developed for this + J> project, so the next person who comes along won't have to + J> reimplement them, right? + +No need: All those components already exist either in the Java +class libraries or from the various java jar collections. Most +of the classes I used came from the Jakarta project and ApacheXML + +But if it's any consolation, my threading of them all together into +a newswire server /is/ GPL and available on sourceforge. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00364.30f174421507d353f1f602919dec35af b/Ch3/datasets/spam/easy_ham/00364.30f174421507d353f1f602919dec35af new file mode 100644 index 000000000..33a312f20 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00364.30f174421507d353f1f602919dec35af @@ -0,0 +1,55 @@ +From fork-admin@xent.com Thu Aug 29 11:04:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 766AF44159 + for ; Thu, 29 Aug 2002 06:03:52 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:03:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7T42lZ28532 for ; + Thu, 29 Aug 2002 05:02:47 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id EBF752940A5; Wed, 28 Aug 2002 21:00:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (unknown [63.145.31.2]) by xent.com (Postfix) + with ESMTP id 8E53B294099 for ; Wed, 28 Aug 2002 20:59:05 + -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Thu, 29 Aug 2002 04:00:33 -08:00 +Message-Id: <3D6D9C61.3020108@barrera.org> +From: "Joseph S. Barrera III" +Organization: Wings over the World +User-Agent: Mutt 5.00.2919.6900 DM (Nigerian Scammer Special Edition) +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: Eirikur Hallgrimsson +Cc: FoRK +Subject: Re: "Holiday Season" 2002 begins +References: <200208282039.25043.eh@mad.scientist.com> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 21:00:33 -0700 + +Eirikur Hallgrimsson wrote: +> It's official, the holidays are here. + +For which year, 2003 or 2004? + +- Joe + + + diff --git a/Ch3/datasets/spam/easy_ham/00365.b73623c2ea40e64854121432f02a5a15 b/Ch3/datasets/spam/easy_ham/00365.b73623c2ea40e64854121432f02a5a15 new file mode 100644 index 000000000..97e040b42 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00365.b73623c2ea40e64854121432f02a5a15 @@ -0,0 +1,76 @@ +From fork-admin@xent.com Thu Aug 29 11:04:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 394F244155 + for ; Thu, 29 Aug 2002 06:03:53 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:03:53 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7T81lZ04029 for ; + Thu, 29 Aug 2002 09:01:48 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8C1972940AD; Thu, 29 Aug 2002 00:59:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc52.attbi.com (rwcrmhc52.attbi.com [216.148.227.88]) + by xent.com (Postfix) with ESMTP id 22429294099 for ; + Thu, 29 Aug 2002 00:58:02 -0700 (PDT) +Received: from Intellistation ([66.31.2.27]) by rwcrmhc52.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020829080009.BFJC1186.rwcrmhc52.attbi.com@Intellistation> for + ; Thu, 29 Aug 2002 08:00:09 +0000 +Content-Type: text/plain; charset="us-ascii" +From: Eirikur Hallgrimsson +Organization: Electric Brain +To: FoRK +Subject: Internet saturation (but not in Iceland) +User-Agent: KMail/1.4.1 +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200208290358.03815.eh@mad.scientist.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 29 Aug 2002 03:58:03 -0400 + +Gary's news service at teledyn.com has an article on Internet Saturation. + +Let me ask you....If you were on a rock in the middle of the Atlantic, +mostly in the dark for half the year, wouldn't *you* like a bit of +internet distraction? They've already done the obvious and fiber-ringed +the island. + +Eirikur + +-------- + +Latest guestimate stats from Ireland's NUA show a flattening Internet +population growth. It seems there's two kinds of people, those who will go +online with the status quo, and those who won't: Canada levels out at 53%, +the USA at 59% (since 2000!), Denmark flatlines at 60%, Norway at 54%, +Sweden at 64%, and the UK at 55% ... only Iceland continues unfettered +beyond 60%. Could this be evidence of a usability barrier? If so, it's a +clear signal that there's as much fortune to be gained from a +substantially new Internet interface than all that has been gained so far. +Latest guestimate stats from Ireland's NUA show a flattening Internet +population growth. It seems there's two kinds of people, those who will go +online with the status quo, and those who won't: Canada levels out at 53%, +the USA at 59% (since 2000!), Denmark flatlines at 60%, Norway at 54%, +Sweden at 64%, and the UK at 55% ... only Iceland continues unfettered +beyond 60%. Could this be evidence of a usability barrier? If so, it's a +clear signal that there's as much fortune to be gained from a +substantially new Internet interface than all that has been gained so far. + +http://www.nua.ie/surveys/how_many_online/ + + diff --git a/Ch3/datasets/spam/easy_ham/00366.e6bc462793d21f588e2368dc089399fc b/Ch3/datasets/spam/easy_ham/00366.e6bc462793d21f588e2368dc089399fc new file mode 100644 index 000000000..21dda3eba --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00366.e6bc462793d21f588e2368dc089399fc @@ -0,0 +1,85 @@ +From fork-admin@xent.com Thu Aug 29 11:27:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 074EC43F99 + for ; Thu, 29 Aug 2002 06:27:33 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:27:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7TASnZ08263 for ; + Thu, 29 Aug 2002 11:28:49 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7A1BF2940C4; Thu, 29 Aug 2002 03:26:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mandark.labs.netnoteinc.com (unknown [212.2.188.179]) by + xent.com (Postfix) with ESMTP id 00B5C294099 for ; + Thu, 29 Aug 2002 03:25:11 -0700 (PDT) +Received: from phobos.labs.netnoteinc.com (phobos.labs.netnoteinc.com + [192.168.2.14]) by mandark.labs.netnoteinc.com (8.11.6/8.11.6) with ESMTP + id g7TARC502451; Thu, 29 Aug 2002 11:27:12 +0100 +Received: by phobos.labs.netnoteinc.com (Postfix, from userid 500) id + 93A1F43F99; Thu, 29 Aug 2002 06:24:44 -0400 (EDT) +Received: from phobos (localhost [127.0.0.1]) by + phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8EA5933D8D; + Thu, 29 Aug 2002 11:24:44 +0100 (IST) +To: Gary Lawrence Murphy +Cc: harley@argote.ch (Robert Harley), fork@spamassassin.taint.org +Subject: Re: Java is for kiddies +In-Reply-To: Message from Gary Lawrence Murphy of + "28 Aug 2002 15:06:39 EDT." + +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020829102444.93A1F43F99@phobos.labs.netnoteinc.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 29 Aug 2002 11:24:39 +0100 + + +Gary Lawrence Murphy said: + +> I envy some of those posting to this list. I've been in business for +> 24 years and I haven't yet had the luxury of writing every line of +> code for any project. We are always coerced by budgets and time to +> maximize the amount of work done elsewhere. + +For consultancy, integration or open source work, sure, perl, python or +java with free use of external libs makes a lot of sense IMO. + +I should note that normally when I've used C or C++ in the past, it's +dictated by the fact that I would be working on a commercial product, +written from the ground up, where the code you're generating is important +IP for the company; in this case, using a third-party lib often is not an +option, or would be a PITA licensing-wise. + +Also, cutting out third-party dependencies can reduce the risk of "oops, +there goes the company that makes that library I depend on, now to shop +around for something vaguely similar, figure out what bugs it's got, +rewrite my code to use the new API, and hope for the best". + +This can be a *very* big deal, for obvious reasons ;) Open source +knockers should note that this is not a problem when using LGPL'd libs ;) + +--j. + diff --git a/Ch3/datasets/spam/easy_ham/00367.d44ba629ed6383ee94999179bb6a04e2 b/Ch3/datasets/spam/easy_ham/00367.d44ba629ed6383ee94999179bb6a04e2 new file mode 100644 index 000000000..64c382f65 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00367.d44ba629ed6383ee94999179bb6a04e2 @@ -0,0 +1,72 @@ +From fork-admin@xent.com Thu Aug 29 11:37:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7FCA444155 + for ; Thu, 29 Aug 2002 06:37:49 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:37:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7TAXiZ08357 for ; + Thu, 29 Aug 2002 11:33:44 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 69282294191; Thu, 29 Aug 2002 03:28:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mandark.labs.netnoteinc.com (unknown [212.2.188.179]) by + xent.com (Postfix) with ESMTP id 6F3EF294109 for ; + Thu, 29 Aug 2002 03:27:38 -0700 (PDT) +Received: from phobos.labs.netnoteinc.com (phobos.labs.netnoteinc.com + [192.168.2.14]) by mandark.labs.netnoteinc.com (8.11.6/8.11.6) with ESMTP + id g7TATZ502455; Thu, 29 Aug 2002 11:29:35 +0100 +Received: by phobos.labs.netnoteinc.com (Postfix, from userid 500) id + 23F6343F99; Thu, 29 Aug 2002 06:27:08 -0400 (EDT) +Received: from phobos (localhost [127.0.0.1]) by + phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1E5D533D8D; + Thu, 29 Aug 2002 11:27:08 +0100 (IST) +To: Eirikur Hallgrimsson +Cc: FoRK +Subject: Re: Internet saturation (but not in Iceland) +In-Reply-To: Message from Eirikur Hallgrimsson of + "Thu, 29 Aug 2002 03:58:03 EDT." + <200208290358.03815.eh@mad.scientist.com> +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020829102708.23F6343F99@phobos.labs.netnoteinc.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 29 Aug 2002 11:27:03 +0100 + + +Eirikur Hallgrimsson said: + +> Let me ask you....If you were on a rock in the middle of the Atlantic, +> mostly in the dark for half the year, wouldn't *you* like a bit of +> internet distraction? They've already done the obvious and fiber-ringed +> the island. + +BTW did they do the same as they did in Ireland, namely: spend millions +burying copious miles of dark fibre, then neglect to provide any way of +actually hooking it up to any ISPs? ;) + +--j. (frustrated) + diff --git a/Ch3/datasets/spam/easy_ham/00368.f86324a03e7ae7070cc40f302385f5d3 b/Ch3/datasets/spam/easy_ham/00368.f86324a03e7ae7070cc40f302385f5d3 new file mode 100644 index 000000000..d181a8b51 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00368.f86324a03e7ae7070cc40f302385f5d3 @@ -0,0 +1,116 @@ +From fork-admin@xent.com Thu Aug 29 16:12:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B817843F9B + for ; Thu, 29 Aug 2002 11:12:03 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 16:12:03 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7TF4pZ17337 for ; + Thu, 29 Aug 2002 16:04:52 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3C5E92940E8; Thu, 29 Aug 2002 08:02:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id 907C8294099 for + ; Thu, 29 Aug 2002 08:01:13 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17kQmZ-0001bn-00; Thu, 29 Aug 2002 12:00:27 -0300 +Message-Id: <3D6E3883.8090500@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.0) Gecko/20020530 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Geege +Cc: fork@spamassassin.taint.org +Subject: Re: Rambus, Man +References: <200208262039.NAA20810@stories2.idg.net> +Content-Type: multipart/related; + boundary="------------090602010909000705010009" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 29 Aug 2002 12:06:43 -0300 + + +--------------090602010909000705010009 +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 8bit + +Geege wrote: + +>This message was sent to you from http://www.idg.net +> +>Geege would like you to read the story below: +> +>http://www.idg.net/gomail.cgi?id=940026 +> +>Title: +>A first look at the 2.8-GHz Pentium 4 +> +>Summary: +>Latest Rambus memory plus fast bus appear to give Intel's newest P4 the jolt it needs. +> +>Geege attached the following message: +>------------------------------------------------------------ +>ha ha ha harley. rambus earns it. +>------------------------------------------------------------ +> +>Stay on top of the world of Information Technology with your own +>FREE subscription to our specialized newsletters. Subscribe now +>at http://www.idg.net/subscribe +> +> +>7132 +> +> +> +The overclockers have given it another jolt, perhaps to potential sales +(and maybe sales of liquid nitrogen): + +via slashdot +Owen + +http://www.muropaketti.com/artikkelit/cpu/nw2800/index3.phtml +*Päivämäärä:* 26.8.2002 +*Artikkeli:* Intel Northwood 2,8GHz +*Tekijä:* Sampsa Kurri + + + + +*English Summary* + +When the Intel Pentium 4 2,8GHz CPU arrived to our testlab we ordered 10 +liters of Liquid Nitrogen (LN2 -196°C) and decided to run some tests in +very low temperatures. + +After some adjusting and testing we were able to run SiSoft Sandra CPU +and Memory benchmarks and Pifast benchmark smoothly when the CPU was +running at 3917MHz. We raised the FSB one more step and managed to run +succesfully SuperPi benchmark while CPU was running at 3998MHz. The +result was 39 seconds. + +Test setup: P4 2,8GHz, Modified Asus P4T533-C, Samsung PC800 RDRAM, PNY +GeForce 4 MX440 and Windows XP OS. + +Check out the pictures. + + + + +--------------090602010909000705010009-- + + diff --git a/Ch3/datasets/spam/easy_ham/00369.f6f9d4cac4af831140abf032d0378365 b/Ch3/datasets/spam/easy_ham/00369.f6f9d4cac4af831140abf032d0378365 new file mode 100644 index 000000000..27b9834b5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00369.f6f9d4cac4af831140abf032d0378365 @@ -0,0 +1,82 @@ +From fork-admin@xent.com Mon Sep 2 13:13:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8512B47C86 + for ; Mon, 2 Sep 2002 07:46:29 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:46:29 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8200sZ09145 for ; + Mon, 2 Sep 2002 01:00:54 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7A51A2940BB; Sun, 1 Sep 2002 16:58:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id BF835294099 for ; + Sun, 1 Sep 2002 16:57:08 -0700 (PDT) +Received: (qmail 2826 invoked by uid 1111); 1 Sep 2002 23:59:24 -0000 +From: "Adam L. Beberg" +To: Bill Stoddard +Cc: "Fork@Xent.Com" +Subject: RE: Gasp! +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 1 Sep 2002 16:59:24 -0700 (PDT) + +On Sun, 1 Sep 2002, Bill Stoddard wrote: + +> > +> > "Red Hat Linux Advanced Server provides many high end features such as: +> > Support for Asynchronous I/O. Now read I/O no longer needs to stall your +> > application while waiting for completion." +> +> Can you provide a reference? I could find it myself but I'm too lazy. + +Well, i saw it on the Compaq Testdrive site, then had to seriously dig on +the redhat site... It's in one of their whitepapers... +http://www.redhat.com/pdf/as/as_rasm.pdf + + +> > Could it be? After 20 years without this feature UNIX finally +> > catches up to +> > Windows and has I/O that doesnt totally suck for nontrivial apps? No way! +> +> Do /dev/poll and FreeBSD's KQ event driven APIs count? IMHO, true async +> io as implemented by Windows 4.0 and beyond is pretty slick, but the +> programming model is substantially more complex than programming to an +> event API like /dev/poll. And true async does not buy much if the +> system call overhead is low (as it is with Linux). + +I havent used the FBSD poll, as it's not portable, select and poll(still not +100%) are all that exist in the UNIX world. Redhat of course doesnt count as +portable either, but it's nice they are trying. The Windows I/O model does +definately blow the doors off the UNIX one, but then they had select to +point at in it's suckiness and anything would have been an improvement. UNIX +is just now looking at it's I/O model and adapting to a multiprocess +multithreaded world so it's gonna be years yet before a posix API comes out +of it. Bottom line is the "do stuff when something happens" model turned out +to be right, and the UNIX "look for something to do and keep looking till +you find it no matter how many times you have to look" is not really working +so great anymore. + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00370.0a2e3b397565840b5c4e46d5c5700444 b/Ch3/datasets/spam/easy_ham/00370.0a2e3b397565840b5c4e46d5c5700444 new file mode 100644 index 000000000..1fd7eb297 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00370.0a2e3b397565840b5c4e46d5c5700444 @@ -0,0 +1,66 @@ +From fork-admin@xent.com Mon Sep 2 13:15:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B13D947C85 + for ; Mon, 2 Sep 2002 07:46:24 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:46:24 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g81NewZ08629 for ; + Mon, 2 Sep 2002 00:40:59 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0AF062940A2; Sun, 1 Sep 2002 16:38:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc01.attbi.com (sccrmhc01.attbi.com [204.127.202.61]) + by xent.com (Postfix) with ESMTP id 6DCFA294099 for ; + Sun, 1 Sep 2002 16:37:18 -0700 (PDT) +Received: from h00e098788e1f.ne.client2.attbi.com ([24.61.143.15]) by + sccrmhc01.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) + with ESMTP id + <20020901233938.WYKD11061.sccrmhc01.attbi.com@h00e098788e1f.ne.client2.attbi.com>; + Sun, 1 Sep 2002 23:39:38 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.52f) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <6464589899.20020901193917@magnesium.net> +To: "Adam L. Beberg" +Cc: fork@spamassassin.taint.org +Subject: Re: revocation of grlygrl201@ +In-Reply-To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 1 Sep 2002 19:39:17 -0400 + + +Well Beberg, unless you're really into Anime and actually hold true +that dead people can send email, I think Geege's subject is just dandy. +Especially since she removed herself from the hive that is aol (and +placed herself unto another, but hey :-)) + +Geege: I think its cute when he worries like that, don't you? +:) + +*ducks and runs* + +(bonus FoRK points if Adam knows what anime i'm refering to) + +BB + + diff --git a/Ch3/datasets/spam/easy_ham/00371.3d08a5b828fb31bdacd4d07cad065171 b/Ch3/datasets/spam/easy_ham/00371.3d08a5b828fb31bdacd4d07cad065171 new file mode 100644 index 000000000..6dbd1ad1a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00371.3d08a5b828fb31bdacd4d07cad065171 @@ -0,0 +1,85 @@ +From fork-admin@xent.com Mon Sep 2 16:22:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 54EB744159 + for ; Mon, 2 Sep 2002 11:21:52 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 16:21:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8217rZ14223 for ; + Mon, 2 Sep 2002 02:07:53 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B2B372940B0; Sun, 1 Sep 2002 18:05:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from imf07bis.bellsouth.net (mail307.mail.bellsouth.net + [205.152.58.167]) by xent.com (Postfix) with ESMTP id B20EC294099 for + ; Sun, 1 Sep 2002 18:04:21 -0700 (PDT) +Received: from regina ([68.154.230.7]) by imf07bis.bellsouth.net + (InterMail vM.5.01.04.19 201-253-122-122-119-20020516) with SMTP id + <20020902010819.PEKG29588.imf07bis.bellsouth.net@regina>; Sun, + 1 Sep 2002 21:08:19 -0400 +From: "Geege Schuman" +To: "Joseph S. Barrera III" , "FoRK" +Subject: RE: revocation of grlygrl201@ +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <3D72A81A.1010901@barrera.org> +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 1 Sep 2002 21:05:28 -0400 + +beberg, would you rather mrsrobinson@bellsouth.net? + +into plastics too, +schuman + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +Joseph S. Barrera III +Sent: Sunday, September 01, 2002 7:52 PM +To: FoRK +Subject: Re: revocation of grlygrl201@ + + +bitbitch@magnesium.net wrote: + > Well Beberg, unless you're really into Anime and actually hold true + > that dead people can send email, I think Geege's subject is just + > dandy. + +Funny you should mention that, as I just came back from refilling +the green coolant in my Navi. + + > (bonus FoRK points if Adam knows what anime i'm refering to) + +I guess I don't get any points, do I? No, didn't think so. + +- Joe + +P.S. We've just started watching Boogiepop Phantom... + +-- +The Combatant State is your father and your mother, your only +protector, the totality of your interests. No discipline can +be stern enough for the man who denies that by word or deed. + + + diff --git a/Ch3/datasets/spam/easy_ham/00372.caa02bf9e0bbd7643dbe83fbac984003 b/Ch3/datasets/spam/easy_ham/00372.caa02bf9e0bbd7643dbe83fbac984003 new file mode 100644 index 000000000..7c901045f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00372.caa02bf9e0bbd7643dbe83fbac984003 @@ -0,0 +1,63 @@ +From fork-admin@xent.com Mon Sep 2 16:22:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6B7D844156 + for ; Mon, 2 Sep 2002 11:21:58 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 16:21:58 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g823QqZ17868 for ; + Mon, 2 Sep 2002 04:26:53 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1B43229410A; Sun, 1 Sep 2002 20:24:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (cpe-65-172-233-109.sanbrunocable.com + [65.172.233.109]) by xent.com (Postfix) with ESMTP id DEF12294099 for + ; Sun, 1 Sep 2002 20:23:55 -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Mon, 02 Sep 2002 01:10:39 -08:00 +Message-Id: <3D72BA8F.30303@barrera.org> +From: "Joseph S. Barrera III" +Organization: Wings over the World +User-Agent: Mutt 5.00.2919.6900 DM (Nigerian Scammer Special Edition) +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: FoRK +Subject: Re: Java is for kiddies +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 01 Sep 2002 18:10:39 -0700 + +Reza B'Far (eBuilt) wrote: + > problems.... Why do most computer scientists insist on solving the + > same problems over and over again when there are some many more + > important and interesting problems (high level) to be solved ????? + +Amen! + +Doing it in an (unecessarily) harder way does NOT make you more of a man +(or less of a kiddie). + +- Joe + +-- +The Combatant State is your father and your mother, your only +protector, the totality of your interests. No discipline can +be stern enough for the man who denies that by word or deed. + + + diff --git a/Ch3/datasets/spam/easy_ham/00373.818730ce90950ecbf244e045a713de53 b/Ch3/datasets/spam/easy_ham/00373.818730ce90950ecbf244e045a713de53 new file mode 100644 index 000000000..9561f2f1a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00373.818730ce90950ecbf244e045a713de53 @@ -0,0 +1,180 @@ +From fork-admin@xent.com Mon Sep 2 16:22:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2955A44155 + for ; Mon, 2 Sep 2002 11:21:56 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 16:21:56 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g822fqZ16863 for ; + Mon, 2 Sep 2002 03:41:52 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 448352940EE; Sun, 1 Sep 2002 19:39:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id 9A697294099 for ; + Sun, 1 Sep 2002 19:38:10 -0700 (PDT) +Received: (qmail 3351 invoked by uid 1111); 2 Sep 2002 02:40:27 -0000 +From: "Adam L. Beberg" +To: +Subject: Tech's Major Decline +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 1 Sep 2002 19:40:27 -0700 (PDT) + +"Once we thought of the Internet as this thing with infinite capabilities. +It was basically just a fad that came along." + +Missing from the article is the percentage of foreign enrolement, I would +bet the numbers of students from Asia (China specificly) has gone up quite a +bit, and is the only thing keeping the overall numbers from plummiting. + +"you can't get the chicks with that anymore." + +About time us geeks were outcasts again. I was getting sick of hearing about +geeks breeding and ending up with autistic children - proving that +intelligence is a genetic defect and a "do not breed" flag.) + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + +----------------- + +Tech's Major Decline +College Students Turning Away From Bits and Bytes + +By Ellen McCarthy +Washington Post Staff Writer +Tuesday, August 27, 2002; Page E01 + +If John Yandziak had been entering college a few years ago, he might have +sought a stake in the "new" economy. He might have dreamed of becoming an +ace code-cracker for the CIA or the National Security Agency, or imagined +toppling an empire with revolutionary software. Maybe he would have tried to +use the Internet to end world hunger. + +But as Yandziak attends his first college classes this week, he's harboring +different academic ambitions. The Ashburn native says he wants to do +something more social and more interesting than working with computers. + +Besides, he said while packing for a Charlottesville dormitory room, "you +can't get the chicks with that anymore." + +The tech industry's financial problems are enough to bankrupt the dreams of +some fair-weather students. But now there's another consequence of the tech +bust: Enrollment growth in undergraduate computer science departments has +come to a halt. + +The number of undergraduates majoring in computer science fell 1 percent in +2001, according to a report by the Computing Research Association. And +educators in the field say the trend seems to be accelerating, with some +colleges seeing much greater drops as the new academic year begins. + +The word is out among department deans that the bust's fallout has trickled +into the classroom, said Maria Clavez, president of the Association of +Computing Machinery. + +"I've heard everything from no change to modest decline to more dramatic +declines," said Clavez, who will become the dean of science and engineering +at Princeton University in January. "It can be hard to see this, because at +some colleges the number of people who want to study computer science so far +exceeds the available space. [But] it is going to have an effect." + +At Virginia Tech, enrollment of undergraduates in the computer science +department will drop 25 percent this year, to 300. At George Washington +University, the number of incoming freshmen who plan to study computer +science fell by more than half this year. + +Interest in undergraduate computer science programs had grown rapidly in the +past decade. In 1997, schools with PhD programs in computer science and +computer engineering granted 8,063 degrees, according to the Computing +Research Association. The numbers rose through 2001, when 17,048 degrees +were awarded. + +The Labor Department projects that software engineering will be the +fastest-growing occupation between 2000 and 2010, with other +computer-related industries trailing close behind. + +But in the short term that growth may slow, based on the changes among +college students. For example, 900 of the 2,000-plus undergraduates studying +information technology and engineering at George Mason University were +computer science majors last year. This year the enrollment in that major is +down to 800, although a newly created and more general information +technology major has attracted 200 students. + +"Having it ease off for a while is a bit of a relief," said Lloyd Griffith, +dean of George Mason's information technology and engineering school. +"Particularly with the field as it has been, they don't want to spend four +years on something and then not get a job." + +Freshman enrollment for the University of Maryland's computer science major +is expected to be about 167 this fall, down from 329 last year. Maryland +decreased its total freshman enrollment by 11 percent, but that alone does +not account for the drop, said Steve Halperin, dean of Maryland's College of +Computer, Mathematical and Physical Sciences. + +"We are seeing a decrease in the number of freshmen who are declaring their +interest in pursuing computer science as a major," Halperin said. "That's a +factual statement. But I would say that at this point . . . we don't expect +to see a decrease in the number of graduates. Many of the kids who are no +longer expressing an interest in majoring in CS would have fallen off." + +Yandziak, who began at the University of Virginia on Saturday, is not +convinced that's the case. He graduated in the top 5 percent of his class, +with a 3.9 grade-point average, and nailed the highest possible score on his +advanced-placement exam in computer science. + +"All of my classes have been easy for me. Math and sciences were always fun, +so I looked for professions in which I could use those things," Yandziak +said. "I'm just not sure I want my life to be immersed in [technology]. I +want to do something that will contribute to the practical world." + +Harris N. Miller, president of the Information Technology Association of +America, said the last time there was a dearth of computing professionals, +salaries skyrocketed and workers benefited from the labor shortage. + +"There was a tremendous imbalance in the late '90s; potentially you have the +same sort of thing going on right now. People are saying, 'I don't need this +kind of IT training right now,' " Miller said. "Our concern as an industry +is that if they begin to again see major declines in enrollment, down the +road four years, as the economy picks up, once again companies are going to +find themselves in a shortage situation." + +Economic potential weighs heavily in many student career choices, but other +factors, including program difficulty, personal interests and social +influences, also come into play, said Judy Hingle, director of professional +development at the American College Counseling Association. The perception +of computer science as an isolating, "nerdy" profession is one that many in +the industry have tried to squelch. That stereotype went underground during +the tech bubble but reemerged during the bust. + +"All the hipness is gone," Yandziak said. "Once we thought of the Internet +as this thing with infinite capabilities. It was basically just a fad that +came along." + +Lamont Thompson, a recent graduate of Calvin Coolidge Senior High School in +the District, is headed to Morehouse College in Atlanta to study business +marketing, with the intention of going into real estate development. + +"Technology comes natural to people my age; it's not fascinating anymore," +Thompson said. "To be honest with you, when I think computer science, I +think of some guy sitting behind a computer all day in a dark room. It's a +necessity, but I wouldn't take it any further." + + diff --git a/Ch3/datasets/spam/easy_ham/00374.67d51286926b6af9ae9be32a9e446b29 b/Ch3/datasets/spam/easy_ham/00374.67d51286926b6af9ae9be32a9e446b29 new file mode 100644 index 000000000..ae006ac9f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00374.67d51286926b6af9ae9be32a9e446b29 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Mon Sep 2 16:22:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 93FAC44158 + for ; Mon, 2 Sep 2002 11:22:02 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 16:22:02 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g824AoZ19092 for ; + Mon, 2 Sep 2002 05:10:50 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E481E294177; Sun, 1 Sep 2002 21:08:01 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id B95FA294099 for ; + Sun, 1 Sep 2002 21:07:49 -0700 (PDT) +Received: (qmail 3740 invoked by uid 1111); 2 Sep 2002 04:10:06 -0000 +From: "Adam L. Beberg" +To: "Joseph S. Barrera III" +Cc: FoRK +Subject: Re: Java is for kiddies +In-Reply-To: <3D72BA8F.30303@barrera.org> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 1 Sep 2002 21:10:06 -0700 (PDT) + +On Sun, 1 Sep 2002, Joseph S. Barrera III wrote: + +> Reza B'Far (eBuilt) wrote: +> > problems.... Why do most computer scientists insist on solving the +> > same problems over and over again when there are some many more +> > important and interesting problems (high level) to be solved ????? +> +> Amen! + +Like what exactly? All the problems are in chemisty and physics and biology +and mathematics. We're just enablers :) + +> Doing it in an (unecessarily) harder way does NOT make you more of a man +> (or less of a kiddie). + +Yes, but doing it an order of magnitude or 2 easier does :) Which with the +way things are now, is not hard at all to do. + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00375.205477cf488dba15ec6dbc46011b8251 b/Ch3/datasets/spam/easy_ham/00375.205477cf488dba15ec6dbc46011b8251 new file mode 100644 index 000000000..9d85f926b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00375.205477cf488dba15ec6dbc46011b8251 @@ -0,0 +1,58 @@ +From fork-admin@xent.com Mon Sep 2 16:22:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 26E564415D + for ; Mon, 2 Sep 2002 11:22:01 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 16:22:01 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8241pZ18745 for ; + Mon, 2 Sep 2002 05:01:51 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A6EBE29417C; Sun, 1 Sep 2002 20:59:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id 3C8BD294099 for ; + Sun, 1 Sep 2002 20:58:46 -0700 (PDT) +Received: (qmail 3706 invoked by uid 1111); 2 Sep 2002 04:01:03 -0000 +From: "Adam L. Beberg" +To: "Mr. FoRK" +Cc: +Subject: Re: Java is for kiddies +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 1 Sep 2002 21:01:03 -0700 (PDT) + +On Sun, 1 Sep 2002, Mr. FoRK wrote: + +> > 6. Hardware is getting so fast that I'm not sure if the performance +> > difference between Java and C/C++ are relevant any more. +> +> When out-of-the-box parsing & transform of XML in java is 25x slower than +> C++ on the same hardware then it does matter. + +Yea, and that on top of the 100x of all the parsing engines over just +bigendian'ing it and passing the data (5x+++) in the raw. Then it REALLY +matters. + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00376.3d17aeac1de8eee4383e077b9e0fe703 b/Ch3/datasets/spam/easy_ham/00376.3d17aeac1de8eee4383e077b9e0fe703 new file mode 100644 index 000000000..7ae40dbda --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00376.3d17aeac1de8eee4383e077b9e0fe703 @@ -0,0 +1,73 @@ +From fork-admin@xent.com Mon Sep 2 16:22:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 63F7644157 + for ; Mon, 2 Sep 2002 11:22:05 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 16:22:05 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g827KoZ23723 for ; + Mon, 2 Sep 2002 08:20:51 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1FA91294185; Mon, 2 Sep 2002 00:18:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc51.attbi.com (rwcrmhc51.attbi.com [204.127.198.38]) + by xent.com (Postfix) with ESMTP id 7B663294099 for ; + Mon, 2 Sep 2002 00:17:03 -0700 (PDT) +Received: from Intellistation ([66.31.2.27]) by rwcrmhc51.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020902071920.PLEQ12451.rwcrmhc51.attbi.com@Intellistation> for + ; Mon, 2 Sep 2002 07:19:20 +0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Eirikur Hallgrimsson +Organization: Electric Brain +To: FoRK +Subject: Re: Java is for kiddies +User-Agent: KMail/1.4.1 +References: +In-Reply-To: +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200209020319.13260.eh@mad.scientist.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 2 Sep 2002 03:19:13 -0400 + +On Sunday 01 September 2002 08:43 pm, Reza B'Far (eBuilt) wrote: +> 3. Java is not just a programming language! + +The astounding thing about java is that despite all of the many significant +points in its favor, it still manages to suck, and break across JVMs. + +I was really looking forward to being able to use a better language like +java and get it compiled to real platform-specific binaries via the GNU +compiler collection. But this seems to have never really gotten anywhere +because it would require porting or reimplementing libraries, which are +probably not source-available or tolerably licenced. When I looked at +what I had to do to gcc and link "hello world," I lost interest. + +Who the hell is writing the runtimes, anyway? Why are Perl/Python/Ruby +more reliable? In a world where the Macs all ran emulated 68K code +utterly reliably, it's just hard to accept that there can't be a single +portable JVM that just works. + +My opinion is biased because of the disgraceful state of non-Windoze +browser java implementations. + +Eirikur + + + + diff --git a/Ch3/datasets/spam/easy_ham/00377.6adf708637c5f1dac1822d80ad0a5740 b/Ch3/datasets/spam/easy_ham/00377.6adf708637c5f1dac1822d80ad0a5740 new file mode 100644 index 000000000..13fade1fc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00377.6adf708637c5f1dac1822d80ad0a5740 @@ -0,0 +1,58 @@ +From fork-admin@xent.com Mon Sep 2 16:22:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8B2E34415E + for ; Mon, 2 Sep 2002 11:22:09 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 16:22:09 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g82DZtZ03051 for ; + Mon, 2 Sep 2002 14:35:56 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8E9302940A0; Mon, 2 Sep 2002 06:33:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 00D3D294099 for ; + Mon, 2 Sep 2002 06:32:38 -0700 (PDT) +Received: from adsl-154-230-7.jax.bellsouth.net ([68.154.230.7] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.35 #1) id + 17lrM4-00041F-00 for fork@xent.com; Mon, 02 Sep 2002 09:35:00 -0400 +From: "Geege Schuman" +To: +Subject: Er +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 2 Sep 2002 09:33:47 -0400 + +use this address instead, please. + +prerogatively, +geege + diff --git a/Ch3/datasets/spam/easy_ham/00378.46432f84e1aab28c26cf1bc5aa2d36bc b/Ch3/datasets/spam/easy_ham/00378.46432f84e1aab28c26cf1bc5aa2d36bc new file mode 100644 index 000000000..8949333d0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00378.46432f84e1aab28c26cf1bc5aa2d36bc @@ -0,0 +1,62 @@ +From fork-admin@xent.com Mon Sep 2 16:22:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 63EB744162 + for ; Mon, 2 Sep 2002 11:22:10 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 16:22:10 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g82EMrZ04651 for ; + Mon, 2 Sep 2002 15:22:53 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 26B0F2940F2; Mon, 2 Sep 2002 07:20:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from qu.to (njl.ne.client2.attbi.com [24.218.112.39]) by + xent.com (Postfix) with SMTP id C957B294099 for ; + Mon, 2 Sep 2002 07:19:57 -0700 (PDT) +Received: (qmail 3087 invoked by uid 500); 2 Sep 2002 14:26:52 -0000 +From: Ned Jackson Lovely +To: fork@spamassassin.taint.org +Subject: Re: Java is for kiddies +Message-Id: <20020902142652.GF13700@ibu.internal.qu.to> +References: + <200209020319.13260.eh@mad.scientist.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <200209020319.13260.eh@mad.scientist.com> +User-Agent: Mutt/1.3.25i +X-Cell: +1.617.877.3444 +X-Web: http://www.njl.us/ +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 2 Sep 2002 10:26:52 -0400 + +On Mon, Sep 02, 2002 at 03:19:13AM -0400, Eirikur Hallgrimsson wrote: +> My opinion is biased because of the disgraceful state of non-Windoze +> browser java implementations. + +Horrors. Applets are kinda sucky. The cool kids are using Java to write +server applications, not browser craplets. + +The giggle-inducing irony of the whole Java thing is how Sun's strategy +backfired. They produced a platform that was supposed to dwell on the +client side, where it would commoditize those clients. Instead, it turns +out to be the perfect language to write server applications in, and it has +successfully commoditized servers. Ooops! + +-- +njl + diff --git a/Ch3/datasets/spam/easy_ham/00379.9c4d9f4fb86361e3c21f376f2cbd0ac1 b/Ch3/datasets/spam/easy_ham/00379.9c4d9f4fb86361e3c21f376f2cbd0ac1 new file mode 100644 index 000000000..92a7a2bd4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00379.9c4d9f4fb86361e3c21f376f2cbd0ac1 @@ -0,0 +1,85 @@ +From fork-admin@xent.com Mon Sep 2 23:01:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C86A516F23 + for ; Mon, 2 Sep 2002 23:01:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 23:01:07 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g82GXqZ09955 for ; + Mon, 2 Sep 2002 17:33:53 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 751382940A6; Mon, 2 Sep 2002 09:31:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mojo-jojo.ebuilt.net (mojo-jojo.ebuilt.net [209.216.43.10]) + by xent.com (Postfix) with SMTP id 9B7F2294099 for ; + Mon, 2 Sep 2002 09:30:17 -0700 (PDT) +Received: (qmail 23019 invoked from network); 2 Sep 2002 16:32:40 -0000 +Received: from nat.ebuilt.com (HELO thedudebvi1wob) (209.216.46.200) by + mojo-jojo.ebuilt.net with SMTP; 2 Sep 2002 16:32:40 -0000 +Reply-To: +From: "Reza B'Far (eBuilt)" +To: "Adam L. Beberg" , + "Mr. FoRK" +Cc: +Subject: RE: Java is for kiddies +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +In-Reply-To: +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 2 Sep 2002 09:30:22 -0700 + +With the increasing prevalence of web services (not that they are always a +good thing), I doubt that parsing XML will be something that will remain at +the Java application layer for long... Recent threads here on Fork +indicating the move towards hardware parsing or this code even become part +of the native implementation of Java on various platforms... + +Reza B'Far + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of Adam +L. Beberg +Sent: Sunday, September 01, 2002 9:01 PM +To: Mr. FoRK +Cc: fork@spamassassin.taint.org +Subject: Re: Java is for kiddies + + +On Sun, 1 Sep 2002, Mr. FoRK wrote: + +> > 6. Hardware is getting so fast that I'm not sure if the performance +> > difference between Java and C/C++ are relevant any more. +> +> When out-of-the-box parsing & transform of XML in java is 25x slower than +> C++ on the same hardware then it does matter. + +Yea, and that on top of the 100x of all the parsing engines over just +bigendian'ing it and passing the data (5x+++) in the raw. Then it REALLY +matters. + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00380.9426f88747cb44438bb358841649f326 b/Ch3/datasets/spam/easy_ham/00380.9426f88747cb44438bb358841649f326 new file mode 100644 index 000000000..6adcf03ef --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00380.9426f88747cb44438bb358841649f326 @@ -0,0 +1,59 @@ +From fork-admin@xent.com Mon Sep 2 23:01:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5254316F2C + for ; Mon, 2 Sep 2002 23:01:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 23:01:09 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g82HZrZ12867 for ; + Mon, 2 Sep 2002 18:35:54 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E386D2940D7; Mon, 2 Sep 2002 10:33:01 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id E1D08294099 for ; Mon, + 2 Sep 2002 10:32:15 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id AACD03EBEB; + Mon, 2 Sep 2002 13:37:32 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id A96463EBD0; Mon, 2 Sep 2002 13:37:32 -0400 (EDT) +From: Tom +To: vox@mindvox.com +Cc: fork@spamassassin.taint.org +Subject: SChoolHouseRocks DVD +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 2 Sep 2002 13:37:32 -0400 (EDT) + + +Of course they had to do this AFTER we purcahsed these all on vhs, and yes +it is now run by the great evil empire known as disney...but we got the +new School House Rocks DVD anyway and man is it an amazing item. + +First off , my 8 year old has been singing them since she was 6. Second +off, these are much easier to rip to divx and mp3. Third, new songs, +remastered originals and other dvd goodies. Its a 2 dvd set so its well +worth the 17$ we paid for it. + +Even if you dont have kids, run do not walk to pick this one up. + +Man, I would sure love to have a *nix Rocks for the kids. + + diff --git a/Ch3/datasets/spam/easy_ham/00381.235df96b897714cb8dd4fdb74113428d b/Ch3/datasets/spam/easy_ham/00381.235df96b897714cb8dd4fdb74113428d new file mode 100644 index 000000000..2698e9128 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00381.235df96b897714cb8dd4fdb74113428d @@ -0,0 +1,62 @@ +From fork-admin@xent.com Mon Sep 2 23:01:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D4FED16F30 + for ; Mon, 2 Sep 2002 23:01:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 23:01:13 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g82KurZ20740 for ; + Mon, 2 Sep 2002 21:56:53 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 33ECB29409A; Mon, 2 Sep 2002 13:54:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav38.law15.hotmail.com [64.4.22.95]) by + xent.com (Postfix) with ESMTP id 7C2B3294099 for ; + Mon, 2 Sep 2002 13:53:47 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 2 Sep 2002 13:56:11 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: <20020902095455.EDC5CC44D@argote.ch> +Subject: Re: Java is for kiddies +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 02 Sep 2002 20:56:11.0597 (UTC) FILETIME=[2B287FD0:01C252C3] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 2 Sep 2002 14:00:04 -0700 + +> +> Microsoft has announced that they plan to remove Java from Windows. +> They took it out of XP already and it has to be installed with a +> service pack. Somehow, I can't imagine them removing the ability to +> run C programs. +They removed /their/ Java VM. They didn't remove the ability to run Java +programs. +Anybody is free to develop their own Java VM and make it kick ass. As +someone said earlier in the thread, nobody is capable or willing to do that. + +I've done a bunch of Java and haven't run into huge problems running the +same bytecode across Solaris or Win2K. +What actual problems have people actually run into. Actually. + diff --git a/Ch3/datasets/spam/easy_ham/00382.457cf61e60b0e7fe754a478f2e2c0592 b/Ch3/datasets/spam/easy_ham/00382.457cf61e60b0e7fe754a478f2e2c0592 new file mode 100644 index 000000000..b1f09dfc2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00382.457cf61e60b0e7fe754a478f2e2c0592 @@ -0,0 +1,181 @@ +From fork-admin@xent.com Mon Sep 2 23:01:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 43BD516F2F + for ; Mon, 2 Sep 2002 23:01:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 23:01:11 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g82IpqZ17406 for ; + Mon, 2 Sep 2002 19:51:54 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 20F252940D3; Mon, 2 Sep 2002 11:49:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mojo-jojo.ebuilt.net (mojo-jojo.ebuilt.net [209.216.43.10]) + by xent.com (Postfix) with SMTP id EB39B294099 for ; + Mon, 2 Sep 2002 11:48:31 -0700 (PDT) +Received: (qmail 23025 invoked from network); 2 Sep 2002 18:50:55 -0000 +Received: from nat.ebuilt.com (HELO thedudebvi1wob) (209.216.46.200) by + mojo-jojo.ebuilt.net with SMTP; 2 Sep 2002 18:50:55 -0000 +Reply-To: +From: "Reza B'Far (eBuilt)" +To: "Robert Harley" , +Subject: RE: Java is for kiddies +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +In-Reply-To: <20020902095455.EDC5CC44D@argote.ch> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 2 Sep 2002 11:48:36 -0700 + + + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +Robert Harley +Sent: Monday, September 02, 2002 2:55 AM +To: fork@spamassassin.taint.org +Subject: RE: Java is for kiddies + + +Reza B'Far wrote: +>This thread kind of surprises me... I started coding with C, then C++, and +>moved on to Java... And, I think that: +Robert Harley wrote: +>Looks like a case of "MY experience is comprehensive, YOUR'S is +>anecdotal, THEY don't know what they're talking about". + +Well, I sure don't claim that... I think most people on Fork probably have +more programming knowledge than I do... There's lots of experience out +here... + +Reza B'Far wrote: +>1. The people who pay the wages don't give a flyin' heck what programming +>language you write things in... they just want it to work. +Robert Harley wrote: +>In my experience, they do care. It has to work certainly, and in +>particular it has to work with what they've already got, and it has to +>work on client's systems. +>My limited experience of Java started a few years ago when support on +>Linux was so terrible that I ran away screaming and haven't come back yet. + +Well, I think until recently, support for most things on Linux was kind of +shady... Things have got much better... You're right in that the JDK used to +suck on Linux... But then, IMHO, Linux is still maturing.... or at least +development tools for Linux are maturing... I've been developing a few +server side apps that run on Linux recently with JDK 1.3.x and they've had +no problems with great performance. + +Robert Harley worte: +>Microsoft has announced that they plan to remove Java from Windows. +>They took it out of XP already and it has to be installed with a +>service pack. Somehow, I can't imagine them removing the ability to +>run C programs. + +Hmmm... Do you really think that MS is pulling out Java because it's a "Bad" +programming language or application platform? You don't think this has +anything to do with .NET being a competitor to Java do you? Or that MS has +basically copied Java (with some additional features) and called it C#? +Isn't that alone an indication that they actually DO think that a VM is the +right way to go for most high level applications? + +Reza B'Far wrote: +>2. C and C++ forces the developer to solve problems such as memory +>management over and over again. +Robert Harley wrote: +>Can't say I spend any noticeable amount of time on memory management +>issues, apart from the fact that I frequently need > 4 GB. + +Hmmm again.... You're telling me that you've never had a nasty bug that took +you a couple of days to track down that had to do with a memory leak? I am +not the best C/C++ programmer... not even close... But I've known really +good ones... and even they have nasty bugs that have to do with memory +management, however occasional they may be. + +>It's about design patterns, architecture, high level stuff... +Robert Harley wrote: +>If your problem just requires application of a "design pattern" to solve, +>then it's trivial anyway irrespective of language. + +Wow! So you're telling me that unless the application involves +bit-counting, it's trivial? What about the application itself? What about +high level problems such as task distribution, work-flow, etc.? Aren't most +high level problems solved with high level solutions like design patterns? +Or do you solve high level problems by writing optimal C/C++ code? For +example, do you think that most people working on collaboration frameworks +(there are lots of them on this list), are working on writing an operating +system with assembly that provides for a collaborative environment? + +>I am amazed by the amount of time wasted by people talking about low +>level problems that have been solved 10 million times over and over +>and over again... +Robert Harley wrote: +>You appear to be gratuitously asserting that C programmers waste time +>on irrelevant low-level problems and Java programmers don't. Depends +>entirely on the programmer, not the language. + +I can see how you could infer this. However, what I believe to really be the +case is that Java is one of the best languages for writing large +applications with many components that involves the collaboration of more +than three programmers. In those cases, it's always very hard to get the +programmers to agree on API's, memory management techniques, etc. With +Java, the JCP takes care of the discussions so that you don't sit around in +a long meeting trying to decide what API to use to hook up to a database +(JDBC) or a messaging bus (JMS). + + +>3. Java is not just a programming language! It's also a platform... +Robert Harley wrote: +>Buzzword. + +YIKES! Have you written db code with C/C++ for different databases (just an +example)? Tried porting a persistence layer from Windows to Unix? Say you +have Informix running on Solaris and you want to port to Windows with MS SQL +(bad idea...but for the sake of the example), would you rather deal with +JDBC port or C/C++ port that uses Informix drivers and now you have to use +ODBC? + + +>a monolithic set of API's or a crap load of different API's slicing +>and dicing the same problems 50 different ways? +Robert Harley wrote: +>Unsupported assertion. + +So, are you saying that there is a standard set of API's for C/C++ for +everything? (aside to the minimal ANSI stuff). Is there a standard way of +dealing with C/C++ applications for various domain problems (messaging, +database persistence, etc.) that rivals Java? I'd like to know if there is +one accepted by everyone who writes C/C++... In that case, I claim +ignorance... + +Not suggesting that Java is the golden hammer.... Just that C/C++ is +overkill for most things... I even coded in VB... But VB is a true disgrace +to programming... It's just lame... Java is Object Oriented... (no +flame-mail from the anti-OO people please... that is a religious +discussion...) and relatively clean... And I don't think that every "Kid" +can write a well designed Java program. Kids typically don't understand +various design patterns and principles... To my experience, they actually +tend to think more of the low level problems, wanting to rewrite and +reinvent the world... a tendency that is much more possible, IMHO, in C/C++ +than in Java due to existence of standard API's. + + diff --git a/Ch3/datasets/spam/easy_ham/00383.5b3e8da8353f48bae364fa900109c027 b/Ch3/datasets/spam/easy_ham/00383.5b3e8da8353f48bae364fa900109c027 new file mode 100644 index 000000000..834ba5146 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00383.5b3e8da8353f48bae364fa900109c027 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Tue Sep 3 14:24:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4ED5416F37 + for ; Tue, 3 Sep 2002 14:22:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 14:22:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g82NJuZ25567 for ; + Tue, 3 Sep 2002 00:19:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AF2BA2940C5; Mon, 2 Sep 2002 16:17:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id 060C7294099 for ; + Mon, 2 Sep 2002 16:16:57 -0700 (PDT) +Received: (qmail 7856 invoked by uid 1111); 2 Sep 2002 23:19:13 -0000 +From: "Adam L. Beberg" +To: "Reza B'Far (eBuilt)" +Cc: +Subject: RE: Java is for kiddies +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 2 Sep 2002 16:19:13 -0700 (PDT) + +On Mon, 2 Sep 2002, Reza B'Far (eBuilt) wrote: + +> Hmmm again.... You're telling me that you've never had a nasty bug that took +> you a couple of days to track down that had to do with a memory leak? I am +> not the best C/C++ programmer... not even close... But I've known really +> good ones... and even they have nasty bugs that have to do with memory +> management, however occasional they may be. + +OK, noone has been tool-less for memory management for a LONG time. Most +systems you just add a flag and memory is tracked (that's how i've always +done it) or worst case yuo have to run it through one of the 2.3E7 tools +where you simply recompile and it it tells you where the leaks are. + +Memory management is a non-issue for anyone that has any idea at all how the +hardware functions. Granted, this takes 30 minutes to go over, and so is far +beyond the scope of the "Learn Java in 90 minutes without thinking" book +every Java programmer learned from. + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00384.956b8ffd2bf74442b89dcfc3b3ea32af b/Ch3/datasets/spam/easy_ham/00384.956b8ffd2bf74442b89dcfc3b3ea32af new file mode 100644 index 000000000..8f8fdb50e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00384.956b8ffd2bf74442b89dcfc3b3ea32af @@ -0,0 +1,65 @@ +From fork-admin@xent.com Tue Sep 3 14:24:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A5FEA16F3A + for ; Tue, 3 Sep 2002 14:22:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 14:22:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g82NOvZ25819 for ; + Tue, 3 Sep 2002 00:24:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C612C2940ED; Mon, 2 Sep 2002 16:22:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id E7D342940AC for ; + Mon, 2 Sep 2002 16:21:45 -0700 (PDT) +Received: (qmail 7871 invoked by uid 1111); 2 Sep 2002 23:24:05 -0000 +From: "Adam L. Beberg" +To: "Reza B'Far (eBuilt)" +Cc: +Subject: RE: Java is for kiddies +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 2 Sep 2002 16:24:05 -0700 (PDT) + +On Mon, 2 Sep 2002, Reza B'Far (eBuilt) wrote: + +> With the increasing prevalence of web services (not that they are always a +> good thing), I doubt that parsing XML will be something that will remain at +> the Java application layer for long... Recent threads here on Fork +> indicating the move towards hardware parsing or this code even become part +> of the native implementation of Java on various platforms... + +OK, so, you get the XML toss it through hardware and turn it back into a +struct/object whatever you call your binary data. I agree this is the way +things will go, as XML parsing has just too much overhead to survive in the +application layer. So why turn it into XML in the first place? Becasue it +gives geeks something to do and sells XML hardware accelerators and way more +CPUs? + +Is there anyone out there actually doing anything new that actually IMPROVES +things anymore, or are they all too scared of the fact that improvements put +people out of work and cut #1 is the creators... + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00385.c874a33cb7def0721807ea870e3c31c8 b/Ch3/datasets/spam/easy_ham/00385.c874a33cb7def0721807ea870e3c31c8 new file mode 100644 index 000000000..d5bc14ecc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00385.c874a33cb7def0721807ea870e3c31c8 @@ -0,0 +1,76 @@ +From fork-admin@xent.com Tue Sep 3 14:24:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A5F7E16F38 + for ; Tue, 3 Sep 2002 14:22:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 14:22:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g833dsZ03346 for ; + Tue, 3 Sep 2002 04:39:54 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 90DBA2940A9; Mon, 2 Sep 2002 20:37:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mx.spiritone.com (mx.spiritone.com [216.99.221.5]) by + xent.com (Postfix) with SMTP id C6C9C294099 for ; + Mon, 2 Sep 2002 20:36:10 -0700 (PDT) +Received: (qmail 22313 invoked from network); 3 Sep 2002 03:38:35 -0000 +Received: (ofmipd 216.99.213.165); 3 Sep 2002 03:38:13 -0000 +Message-Id: <9FD20548-BEEE-11D6-88BE-00039344DDD6@ordersomewherechaos.com> +From: "RossO" +To: fork@spamassassin.taint.org +Subject: Re: Electric car an Edsel... +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Content-Transfer-Encoding: 7bit +In-Reply-To: +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 2 Sep 2002 20:38:34 -0700 + +Sunday I drove from Portland down to the Woodburn Dragstrip to check out +the NEDRA Nationals. + +The electric cars, motorcycles and dragsters had some great times and I +ended up with a few pics and a nice deep burn... + +John Waylan (who was interviewed in Wired a few years back) pulled out a +14.4 second run in the quarter mile (91mph), on a battery pack that +hasn't been broken in yet. He expects to break his record next year +topping his 13.1sec/99mph run a couple of years ago. He's shooting for a +12 second run. + +John also took out a replica 1908 Oldsmobile for a respectable 47mph +run. (Remember, we started out with electric cars.) + +Near the end of the day, Kilacycle took the track with an amazing 111mph +run. Talk about a crotch rocket. + +...Ross... + + +On Saturday, August 31, 2002, at 01:45 AM, Adam L. Beberg wrote: +> Personally I don't think Americans will ever go electric, there is too +> much +> testosterone linked to the auto as the male's primary form of +> compesating +> for other things. See.. now that's a job for you femanists, teach women +> not +> to fall for a fast environmentally destuctive vehicle, you should only +> have +> to rewrite 98% of the genome ;) + + diff --git a/Ch3/datasets/spam/easy_ham/00386.d929d7bb175845f6eaa3549dedd8a1e6 b/Ch3/datasets/spam/easy_ham/00386.d929d7bb175845f6eaa3549dedd8a1e6 new file mode 100644 index 000000000..a117ba5d5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00386.d929d7bb175845f6eaa3549dedd8a1e6 @@ -0,0 +1,134 @@ +From exmh-workers-admin@redhat.com Thu Aug 22 16:06:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 589F043F99 + for ; Thu, 22 Aug 2002 11:06:46 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 16:06:46 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MF3DZ11193 for + ; Thu, 22 Aug 2002 16:03:14 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 1B2F740D61; Thu, 22 Aug 2002 + 11:01:56 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id C68863F25A + for ; Thu, 22 Aug 2002 10:59:44 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MExf318929 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 10:59:41 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MExfY18925 for + ; Thu, 22 Aug 2002 10:59:41 -0400 +Received: from austin-jump.vircio.com + (IDENT:YqU2jK6KvEsqbKys30KHeSGWzOOJOhiQ@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7MEjDl31350 + for ; Thu, 22 Aug 2002 10:45:13 -0400 +Received: (qmail 2165 invoked by uid 104); 22 Aug 2002 14:59:40 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4218. . Clean. Processed in 0.32426 + secs); 22/08/2002 09:59:40 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 22 Aug 2002 14:59:40 -0000 +Received: (qmail 4916 invoked from network); 22 Aug 2002 14:59:37 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?ZErIZ4W1xL3wqqSeSDI+IwJstMi7bK+b?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 22 Aug 2002 14:59:37 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Anders Eriksson +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: CVS report +In-Reply-To: <20020819210535.A30583F21@milou.dyndns.org> +References: <20020819210535.A30583F21@milou.dyndns.org> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-403670396P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030028377.4901.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 09:59:35 -0500 + +--==_Exmh_-403670396P +Content-Type: text/plain; charset=us-ascii + +> From: Anders Eriksson +> Date: Mon, 19 Aug 2002 23:05:30 +0200 +> +> +> > > Just cvs up'ed and nowadays Catch-up Unseen is __extremely__ slow on +> > > large (>100 msgs) unseen sequences. Anybody else having this problem? +> > +> > I'll take the blame. +> > +> > The reason, I suspect, is that we're needlessly reading the .sequences file +> > multiple times because of other sequences. I need to make the code much +> > smarter about handling that file, but first I have a few other fish to fry in +> > my rather large patch that's on it's way. +> > +> +> No panic, +> +> I'm all for cleaning things up before getting it optimized. + +Okay, this fix is now checked in. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-403670396P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9ZPxXK9b4h5R0IUIRAvrpAJ47Bzr8fOBqRvDy70Zo+q/dBaDv+wCdGlkP +35PlaPfCqzM6h0Y9RwT/JmQ= +=7ghD +-----END PGP SIGNATURE----- + +--==_Exmh_-403670396P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00387.1a5243d401fec09abe374e77ad201d79 b/Ch3/datasets/spam/easy_ham/00387.1a5243d401fec09abe374e77ad201d79 new file mode 100644 index 000000000..30ed4a49a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00387.1a5243d401fec09abe374e77ad201d79 @@ -0,0 +1,149 @@ +From exmh-workers-admin@redhat.com Thu Aug 22 16:17:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E996343F9B + for ; Thu, 22 Aug 2002 11:17:01 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 16:17:01 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MFCqZ11700 for + ; Thu, 22 Aug 2002 16:12:52 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 4F7FE3ED52; Thu, 22 Aug 2002 + 11:13:01 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 3DC6D3F694 + for ; Thu, 22 Aug 2002 11:04:15 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MF4CB20210 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 11:04:12 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MF4BY20206 for + ; Thu, 22 Aug 2002 11:04:11 -0400 +Received: from austin-jump.vircio.com + (IDENT:fNvIkVrQXE++HaTA/6ypIi4y1Wtrr9ht@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7MEnhl32559 + for ; Thu, 22 Aug 2002 10:49:43 -0400 +Received: (qmail 2519 invoked by uid 104); 22 Aug 2002 15:04:11 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4218. . Clean. Processed in 0.490086 + secs); 22/08/2002 10:04:10 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 22 Aug 2002 15:04:10 -0000 +Received: (qmail 6472 invoked from network); 22 Aug 2002 15:04:07 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?452/qlXxNxh1NFyZ1xqzI8xN4GiYl2vM?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 22 Aug 2002 15:04:07 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Robert Elz +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <13277.1030015920@munnari.OZ.AU> +References: <1029945287.4797.TMDA@deepeddy.vircio.com> + <1029882468.3116.TMDA@deepeddy.vircio.com> <9627.1029933001@munnari.OZ.AU> + <1029943066.26919.TMDA@deepeddy.vircio.com> + <1029944441.398.TMDA@deepeddy.vircio.com> <13277.1030015920@munnari.OZ.AU> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-398538836P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030028647.6462.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 10:04:06 -0500 + +--==_Exmh_-398538836P +Content-Type: text/plain; charset=us-ascii + +> From: Robert Elz +> Date: Thu, 22 Aug 2002 18:32:00 +0700 +> +> Date: Wed, 21 Aug 2002 10:54:46 -0500 +> From: Chris Garrigues +> Message-ID: <1029945287.4797.TMDA@deepeddy.vircio.com> +> +> | I can't reproduce this error. +> +> Ah, I think I just found the cause, nmh is broken (which is probably +> obvious from my previous mail). +> +> The man page for pick (and how it always used to work) was that -list +> would list messages matched. -nolist would supress that. If -sequence +> is given the default is -nolist, without -sequence the default is -list. +> +> That's all fine - but it appears now (which probably means I had never +> used pick since I upgraded nmh last) that what counts is the order of +> -list and -sequence - that is, if -sequence comes after -list, the -list +> gets turned off (-sequence implies -nolist instead of just making -nolist +> the default). +> +> An easy workaround for this is to make sure that -list is the last arg +> given to pick, so if I run ... +> +> delta$ pick +inbox -lbrace -lbrace -subject ftp -rbrace -rbrace 4852-4852 +> -sequence mercury -list +> 4852 +> +> which is just as it should be. + +hmmm, I assume you're going to report this to the nmh folks? + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-398538836P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9ZP1lK9b4h5R0IUIRAhSFAJ0dWespJZxDa1q6t1yyulLXBp1ryACfUF+D +ltpgX3KXYwpbhGV2bUHY6gY= +=H9ck +-----END PGP SIGNATURE----- + +--==_Exmh_-398538836P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00388.18e2a6069150c2c9139f760fda7668ac b/Ch3/datasets/spam/easy_ham/00388.18e2a6069150c2c9139f760fda7668ac new file mode 100644 index 000000000..5832931a8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00388.18e2a6069150c2c9139f760fda7668ac @@ -0,0 +1,137 @@ +From exmh-workers-admin@redhat.com Thu Aug 22 17:45:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D12EA43F99 + for ; Thu, 22 Aug 2002 12:45:47 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 17:45:47 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MGZGZ14887 for + ; Thu, 22 Aug 2002 17:35:21 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 97A343EF5C; Thu, 22 Aug 2002 + 12:32:26 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 0AFFA3F6E2 + for ; Thu, 22 Aug 2002 12:28:49 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MGSkq07323 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 12:28:46 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MGSjY07319 for + ; Thu, 22 Aug 2002 12:28:45 -0400 +Received: from austin-jump.vircio.com + (IDENT:2iViV5856IJtIfZjXdJ/4WQv+Y4YNzRs@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7MGEGl19957 + for ; Thu, 22 Aug 2002 12:14:16 -0400 +Received: (qmail 7820 invoked by uid 104); 22 Aug 2002 16:28:45 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4218. . Clean. Processed in 0.361135 + secs); 22/08/2002 11:28:44 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 22 Aug 2002 16:28:44 -0000 +Received: (qmail 27667 invoked from network); 22 Aug 2002 16:28:41 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?J4V6zM2M2R342hJKC4K43k7kijsOmD9U?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 22 Aug 2002 16:28:41 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: "J. W. Ballantine" , exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <1030025538.25487.TMDA@deepeddy.vircio.com> +References: <200208211351.JAA15807@hera.homer.att.com> + <1030025538.25487.TMDA@deepeddy.vircio.com> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-763629846P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030033720.27656.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 11:28:39 -0500 + +--==_Exmh_-763629846P +Content-Type: text/plain; charset=us-ascii + +> From: Chris Garrigues +> Date: Thu, 22 Aug 2002 09:12:16 -0500 +> +> > From: "J. W. Ballantine" +> > Date: Wed, 21 Aug 2002 09:51:31 -0400 +> > +> > I CVS'ed the unseen/Sequences changes and installed them, and have only one +> > real issue. +> > +> > I use the unseen window rather than the exmh icon, and with the new code +> > I can't seem to be able to. How many unseen when when I have the main window open +> > is not really necessary. +> +> hmmm, I stole the code from unseenwin, but I never tested it since I don't use +> that functionality. Consider it on my list of things to check. + +Well, unfortunately, I appear to be using a window manager that doesn't +support the icon window. + +However, I did fix some bugs in the related "Hide When Empty" functionality +which may solve the issue. You may need to remove "unseen" from the "always +show sequences" to make this work. If so, let me know so I can put that in +the help window for "Icon Window" as it already is for "Hide When Empty". + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-763629846P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9ZRE3K9b4h5R0IUIRAjS+AJ4m8f6zA6kMkzYOCI7d+HelmpapYQCfbbDi +LCumaahI4ILE6tbF8nUd0r8= +=nwh1 +-----END PGP SIGNATURE----- + +--==_Exmh_-763629846P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00389.8606961eaeef7b921ce1c53773248d69 b/Ch3/datasets/spam/easy_ham/00389.8606961eaeef7b921ce1c53773248d69 new file mode 100644 index 000000000..f9dc531e7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00389.8606961eaeef7b921ce1c53773248d69 @@ -0,0 +1,121 @@ +From exmh-workers-admin@redhat.com Fri Aug 23 11:03:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id F1FAA44160 + for ; Fri, 23 Aug 2002 06:03:01 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:03:02 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MHtRZ18495 for + ; Thu, 22 Aug 2002 18:55:27 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 5EB7940C9B; Thu, 22 Aug 2002 + 13:54:33 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 01F9E40CA5 + for ; Thu, 22 Aug 2002 13:49:50 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MHnlm27893 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 13:49:47 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MHnkY27888 for + ; Thu, 22 Aug 2002 13:49:46 -0400 +Received: from austin-jump.vircio.com + (IDENT:x+/ivI5ArO9HY2fXAOul2K2/JJQWTYB+@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7MHZHl08139 + for ; Thu, 22 Aug 2002 13:35:17 -0400 +Received: (qmail 13052 invoked by uid 104); 22 Aug 2002 17:49:46 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4218. . Clean. Processed in 0.379095 + secs); 22/08/2002 12:49:45 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 22 Aug 2002 17:49:45 -0000 +Received: (qmail 14340 invoked from network); 22 Aug 2002 17:49:42 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?xFJVSZF7fEkXF7r8Vrvju/8otQ7qdgKJ?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 22 Aug 2002 17:49:42 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Anders Eriksson , exmh-workers@spamassassin.taint.org +Subject: Re: CVS report +In-Reply-To: <1030037019.7938.TMDA@deepeddy.vircio.com> +References: <20020822165508.1F95B3F24@milou.dyndns.org> + <1030037019.7938.TMDA@deepeddy.vircio.com> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-451422450P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030038582.14329.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 12:49:41 -0500 + +--==_Exmh_-451422450P +Content-Type: text/plain; charset=us-ascii + +> From: Chris Garrigues +> Date: Thu, 22 Aug 2002 12:23:38 -0500 +> +> Okay....Catchup unseen is something that I don't use often, but i can +> certainly reproduce this. I'll dig into it. It's probably simple. + +Try it now. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-451422450P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9ZSQ1K9b4h5R0IUIRAt6BAJ4lZwVy40vrhgO5SRoToDOjp7jkdwCfUSw7 +vei8luehray6oqTftNPId8g= +=6Ao0 +-----END PGP SIGNATURE----- + +--==_Exmh_-451422450P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00390.1b4f14e80c8e7797dce79cf5dc22b625 b/Ch3/datasets/spam/easy_ham/00390.1b4f14e80c8e7797dce79cf5dc22b625 new file mode 100644 index 000000000..cc842d464 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00390.1b4f14e80c8e7797dce79cf5dc22b625 @@ -0,0 +1,115 @@ +From exmh-users-admin@redhat.com Fri Aug 23 11:03:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A55B843F99 + for ; Fri, 23 Aug 2002 06:03:05 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:03:05 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MIBOZ19019 for + ; Thu, 22 Aug 2002 19:11:25 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 6175B401E0; Thu, 22 Aug 2002 + 14:11:07 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id A6A3440E04 + for ; Thu, 22 Aug 2002 14:04:16 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MI4Dx31981 for exmh-users@listman.redhat.com; Thu, 22 Aug 2002 + 14:04:13 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MI4DY31977 for + ; Thu, 22 Aug 2002 14:04:13 -0400 +Received: from mail.banirh.com + (adsl-javier-quezada-55499267.prodigy.net.mx [200.67.254.229]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7MHnhl12034 for + ; Thu, 22 Aug 2002 13:49:43 -0400 +Received: from mail.banirh.com (IDENT:ulises@localhost [127.0.0.1]) by + mail.banirh.com (8.10.2/8.9.3) with ESMTP id g7MI3vV17471 for + ; Thu, 22 Aug 2002 13:03:58 -0500 +Message-Id: <200208221803.g7MI3vV17471@mail.banirh.com> +X-Mailer: exmh version 2.3.1 01/15/2001 with nmh-1.0.3 +To: exmh-users@spamassassin.taint.org +Subject: Re: Insert signature +In-Reply-To: Your message of + "Thu, 22 Aug 2002 23:36:32 +1000." + <200208221336.g7MDaWX26868@hobbit.linuxworks.com.au.nospam> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Ulises Ponce +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 13:03:57 -0500 + +Thanks Tony, but I think doing it using component files will get a .signature +by default, but I have many diferent signatures and I want to insert one of +that signatures using a keyboard command. So for a message I will insert a +signature, but for another message I will insert a different signature. + +Is it possible? I am using sedit for my messages. + +Thanks. +Ulises + +> > Hi! +> > +> > Is there a command to insert the signature using a combination of keys and not +> > to have sent the mail to insert it then? +> +> I simply put it (them) into my (nmh) component files (components, +> replcomps, forwcomps and so on). That way you get them when you are +> editing your message. Also, by using comps files for specific +> folders you can alter your .sig per folder (and other tricks). See +> the docs for (n)mh for all the details. +> +> There might (must?) also be a way to get sedit to do it, but I've +> been using gvim as my exmh message editor for a long time now. I +> load it with a command that loads some email-specific settings, eg, +> to "syntax" colour-highlight the headers and quoted parts of an +> email)... it would be possible to map some (vim) keys that would add +> a sig (or even give a selection of sigs to choose from). +> +> And there are all sorts of ways to have randomly-chosen sigs... +> somewhere at rtfm.mit.edu... ok, here we go: +> rtfm.mit.edu/pub/usenet-by-group/news.answers/signature_finger_faq. +> (Warning... it's old, May 1995). +> +> > Regards, +> > Ulises +> +> Hope this helps. +> +> Cheers +> Tony +> +> +> +> _______________________________________________ +> Exmh-users mailing list +> Exmh-users@redhat.com +> https://listman.redhat.com/mailman/listinfo/exmh-users + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + diff --git a/Ch3/datasets/spam/easy_ham/00391.57ff08c2830235fc1315c1745829d190 b/Ch3/datasets/spam/easy_ham/00391.57ff08c2830235fc1315c1745829d190 new file mode 100644 index 000000000..bb07a97a1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00391.57ff08c2830235fc1315c1745829d190 @@ -0,0 +1,70 @@ +From exmh-users-admin@redhat.com Mon Aug 26 15:19:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6041C44162 + for ; Mon, 26 Aug 2002 10:16:31 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:16:31 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7ODSJZ04030 for + ; Sat, 24 Aug 2002 14:28:20 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id B54A83EFC0; Sat, 24 Aug 2002 + 09:28:26 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 876FF3FACD + for ; Sat, 24 Aug 2002 09:27:16 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7ODRDT02634 for exmh-users@listman.redhat.com; Sat, 24 Aug 2002 + 09:27:13 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7ODRDY02630 for + ; Sat, 24 Aug 2002 09:27:13 -0400 +Received: from washington.bellatlantic.net + (pool-151-203-19-38.bos.east.verizon.net [151.203.19.38]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7ODCUl01339 for + ; Sat, 24 Aug 2002 09:12:30 -0400 +Received: by washington.bellatlantic.net (Postfix, from userid 500) id + 25B6E6F982; Sat, 24 Aug 2002 09:31:27 -0400 (EDT) +Received: from washington (localhost [127.0.0.1]) by + washington.bellatlantic.net (Postfix) with ESMTP id 1FC7F6F96C for + ; Sat, 24 Aug 2002 09:31:27 -0400 (EDT) +To: exmh-users@spamassassin.taint.org +Subject: defaulting to showing plaintext versions of e-mails +X-Attribution: HWF +X-Uri: +X-Image-Url: http://www.feinsteins.net/harlan/images/harlanface.jpg +From: Harlan Feinstein +Message-Id: <20020824133127.25B6E6F982@washington.bellatlantic.net> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sat, 24 Aug 2002 09:31:22 -0400 + +What's the trick again to have it default to showing text/plain instead of +html? + +--Harlan + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + diff --git a/Ch3/datasets/spam/easy_ham/00392.1a94887ca585cbdaeec97524b9308b63 b/Ch3/datasets/spam/easy_ham/00392.1a94887ca585cbdaeec97524b9308b63 new file mode 100644 index 000000000..f6c3dd7a6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00392.1a94887ca585cbdaeec97524b9308b63 @@ -0,0 +1,86 @@ +From exmh-users-admin@redhat.com Mon Aug 26 15:24:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 325104415B + for ; Mon, 26 Aug 2002 10:22:40 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:22:40 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7Q359Z07072 for + ; Mon, 26 Aug 2002 04:05:10 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 0C69A3F8A7; Sun, 25 Aug 2002 + 23:03:13 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 74B213FAB7 + for ; Sun, 25 Aug 2002 22:58:34 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7Q2wV113287 for exmh-users@listman.redhat.com; Sun, 25 Aug 2002 + 22:58:31 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7Q2wUY13283 for + ; Sun, 25 Aug 2002 22:58:30 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g7Q2hfl13432 for ; Sun, 25 Aug 2002 22:43:41 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id D73FF38DA9; + Sun, 25 Aug 2002 21:58:29 -0500 (CDT) +Received: from dimebox (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id CD30B38DA2 for ; + Sun, 25 Aug 2002 21:58:29 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +In-Reply-To: <20020824133127.25B6E6F982@washington.bellatlantic.net> +References: <20020824133127.25B6E6F982@washington.bellatlantic.net> +Comments: In-reply-to Harlan Feinstein message + dated "Sat, 24 Aug 2002 09:31:22 -0400." +To: exmh-users@spamassassin.taint.org +Subject: Re: defaulting to showing plaintext versions of e-mails +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <29947.1030330704@dimebox> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sun, 25 Aug 2002 21:58:24 -0500 + + + +>>>>> On Sat, 24 Aug 2002, "Harlan" == Harlan Feinstein wrote: + + Harlan> What's the trick again to have it default to showing + Harlan> text/plain instead of html? + +In ~/.exmh/exmh-defaults add: + +*mime_alternative_prefs: text/plain text/enriched text/richtext text/html + +Order possible alternatives from _your_ most preferred to least +preferred. + +--Hal + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + diff --git a/Ch3/datasets/spam/easy_ham/00393.b7ba3f196286b0c5ce6e5b1ec9078cd3 b/Ch3/datasets/spam/easy_ham/00393.b7ba3f196286b0c5ce6e5b1ec9078cd3 new file mode 100644 index 000000000..31a37f484 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00393.b7ba3f196286b0c5ce6e5b1ec9078cd3 @@ -0,0 +1,119 @@ +From exmh-workers-admin@redhat.com Mon Aug 26 15:25:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3C7354416C + for ; Mon, 26 Aug 2002 10:22:56 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:22:56 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7Q5twZ11356 for + ; Mon, 26 Aug 2002 06:55:58 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id B3C033EA30; Mon, 26 Aug 2002 + 01:56:03 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id A3DBC3EA1F + for ; Mon, 26 Aug 2002 01:55:38 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7Q5tZq02785 for exmh-workers@listman.redhat.com; Mon, 26 Aug 2002 + 01:55:35 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7Q5tZY02781 for + ; Mon, 26 Aug 2002 01:55:35 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g7Q5eVl00679 for ; + Mon, 26 Aug 2002 01:40:31 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7Q5stl16170; + Mon, 26 Aug 2002 12:55:00 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g7OBu5W25411; Sat, 24 Aug 2002 18:56:05 + +0700 (ICT) +From: Robert Elz +To: Chris Garrigues +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <1030028647.6462.TMDA@deepeddy.vircio.com> +References: <1030028647.6462.TMDA@deepeddy.vircio.com> + <1029945287.4797.TMDA@deepeddy.vircio.com> + <1029882468.3116.TMDA@deepeddy.vircio.com> <9627.1029933001@munnari.OZ.AU> + <1029943066.26919.TMDA@deepeddy.vircio.com> + <1029944441.398.TMDA@deepeddy.vircio.com> <13277.1030015920@munnari.OZ.AU> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <25409.1030190165@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Sat, 24 Aug 2002 18:56:05 +0700 + + Date: Thu, 22 Aug 2002 10:04:06 -0500 + From: Chris Garrigues + Message-ID: <1030028647.6462.TMDA@deepeddy.vircio.com> + + | hmmm, I assume you're going to report this to the nmh folks? + +Yes, I will, sometime, after I look at the nmh sources and see what +they have managed to break, and why. + +But we really want exmh to operate with all the versions of nmh that +exist, don't we? The patch to have exmh do the right thing, whether this +bug exists, or not, is trivial, so I'd suggest including it. + +Patch follows ... + +I have no idea why the sequences were being added after the message list +before, not that it should make any difference to nmh (or MH). But since +I stopped doing that, the variable "msgs" isn't really needed any more, +rather than assigning $pick(msgs) to msgs, and then using $msgs the code +could just use $pick(msgs) where $msgs is now used. This is just a +frill though, so I didn't change that. + +kre + +--- pick.tcl Fri Aug 23 16:28:14 2002 ++++ /usr/local/lib/exmh-2.5/pick.tcl Sat Aug 24 18:14:44 2002 +@@ -128,7 +128,7 @@ + } + proc Pick_It {} { + global pick exmh +- set cmd [list exec pick +$exmh(folder) -list] ++ set cmd [list exec pick +$exmh(folder)] + set inpane 0 + set hadpane 0 + for {set pane 1} {$pane <= $pick(panes)} {incr pane} { +@@ -175,8 +175,9 @@ + } + set msgs $pick(msgs) + foreach s $pick(sequence) { +- lappend msgs -sequence $s ++ lappend cmd -sequence $s + } ++ lappend cmd -list + + Exmh_Debug Pick_It $cmd $msgs + busy PickInner $cmd $msgs + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00394.608684acea4bef2ae7f5b89309a6046e b/Ch3/datasets/spam/easy_ham/00394.608684acea4bef2ae7f5b89309a6046e new file mode 100644 index 000000000..bab6fa2f3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00394.608684acea4bef2ae7f5b89309a6046e @@ -0,0 +1,85 @@ +From exmh-workers-admin@redhat.com Mon Aug 26 15:25:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D8FCE4416D + for ; Mon, 26 Aug 2002 10:22:59 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:22:59 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7Q77tZ12954 for + ; Mon, 26 Aug 2002 08:07:56 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id B34B73EEBC; Mon, 26 Aug 2002 + 03:08:02 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id E8B823EB9F + for ; Mon, 26 Aug 2002 03:07:37 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7Q77Yb11568 for exmh-workers@listman.redhat.com; Mon, 26 Aug 2002 + 03:07:34 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7Q77YY11562 for + ; Mon, 26 Aug 2002 03:07:34 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g7Q6kHl08393 for ; + Mon, 26 Aug 2002 02:46:18 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7Q70jl22935; + Mon, 26 Aug 2002 14:00:45 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g7Q70IW06855; Mon, 26 Aug 2002 14:00:18 + +0700 (ICT) +From: Robert Elz +To: Chris Garrigues +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Anolther sequence related traceback +In-Reply-To: <1030118301.3993.TMDA@deepeddy.vircio.com> +References: <1030118301.3993.TMDA@deepeddy.vircio.com> + <16323.1030043119@munnari.OZ.AU> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <6853.1030345218@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 14:00:18 +0700 + + Date: Fri, 23 Aug 2002 10:58:20 -0500 + From: Chris Garrigues + Message-ID: <1030118301.3993.TMDA@deepeddy.vircio.com> + + | Interesting...I don't think this was my bug. + | It appears that Msg_Change was asked to change to message "-". + +Something like that is quite possible, but perviously typing nonsense +in didn't cause tracebacks, and now it does, and the traceback came +from the sequence code... + +Perviously this would have just caused red messages in the status +line complaining about my lousy typing. That's probably what it +should keep on doing (the "red" part isn't important obviously..) + +kre + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00395.01a60f5f85141b74be6aa6e347feb5d9 b/Ch3/datasets/spam/easy_ham/00395.01a60f5f85141b74be6aa6e347feb5d9 new file mode 100644 index 000000000..be7dc699a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00395.01a60f5f85141b74be6aa6e347feb5d9 @@ -0,0 +1,88 @@ +From rpm-list-admin@freshrpms.net Fri Aug 23 11:06:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 78C504415E + for ; Fri, 23 Aug 2002 06:04:27 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:04:27 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MNG1Z29565 for + ; Fri, 23 Aug 2002 00:16:01 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7MNB2J07914; Fri, 23 Aug 2002 01:11:02 + +0200 +Received: from yak.fluid.com + (IDENT:pxKWT0cuA+V9VHAuVghBFUQZ5my3ivDF@yak.fluid.com [63.76.105.204]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7MNAkJ07823 for + ; Fri, 23 Aug 2002 01:10:46 +0200 +Received: from lefty.fluid.com ([63.76.105.89]) by yak.fluid.com with + esmtp (Exim 4.10 #1) for rpm-list@freshrpms.net id 17i15U-0008EV-00; + Thu, 22 Aug 2002 16:10:00 -0700 +Message-Id: <3D656F6E.3050504@fluid.com> +From: Troy Engel +Organization: Fluid +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020607 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: latest php upgrade in 7.3 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +X-Reply-To: tengel@fluid.com +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 16:10:38 -0700 +Date: Thu, 22 Aug 2002 16:10:38 -0700 + +Today an apt-get upgrade holds back php (and submodules, like php-imap). + Running an apt-get install php to see what's up, I get: + +# apt-get install php +Processing File Dependencies... Done +Reading Package Lists... Done +Building Dependency Tree... Done +The following extra packages will be installed: + curl-devel imap imap-devel mysql mysql-devel php-imap php-ldap postgresql + postgresql-devel postgresql-libs pspell-devel ucd-snmp-devel +ucd-snmp-utils + unixODBC unixODBC-devel +The following NEW packages will be installed: + curl-devel imap imap-devel mysql mysql-devel postgresql postgresql-devel + postgresql-libs pspell-devel ucd-snmp-devel ucd-snmp-utils unixODBC + unixODBC-devel +The following packages will be upgraded + php php-imap php-ldap +3 packages upgraded, 13 newly installed, 0 to remove(replace) and 1 not +upgraded. + +Anyone have an idea what the heck RedHat did here, and why we're now +trying to install a ton of crap I don't want? (I'm hoping someone else +has chased this down and could save me time... ;) ) + +thx, +-te + +-- +Troy Engel, Systems Engineer +Cool as the other side of the pillow + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/00396.e9b98e25827d06c7a9cc304282011961 b/Ch3/datasets/spam/easy_ham/00396.e9b98e25827d06c7a9cc304282011961 new file mode 100644 index 000000000..ab8900091 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00396.e9b98e25827d06c7a9cc304282011961 @@ -0,0 +1,89 @@ +From rpm-list-admin@freshrpms.net Fri Aug 23 11:06:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8C9514416E + for ; Fri, 23 Aug 2002 06:04:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:04:28 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MNHfZ29607 for + ; Fri, 23 Aug 2002 00:17:41 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7MNE1J26765; Fri, 23 Aug 2002 01:14:01 + +0200 +Received: from mail.phy.duke.edu (mail.phy.duke.edu [152.3.182.2]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7MND2J26232 for + ; Fri, 23 Aug 2002 01:13:02 +0200 +Received: from user-152-16-65-136.adsl.duke.edu + (user-152-16-65-136.adsl.duke.edu [152.16.65.136]) by mail.phy.duke.edu + (Postfix) with ESMTP id 1226630197 for ; + Thu, 22 Aug 2002 19:13:00 -0400 (EDT) +Subject: Re: latest php upgrade in 7.3 +From: seth vidal +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <3D656F6E.3050504@fluid.com> +References: <3D656F6E.3050504@fluid.com> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) +Message-Id: <1030057980.1199.4.camel@binkley> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 22 Aug 2002 19:12:59 -0400 +Date: 22 Aug 2002 19:12:59 -0400 + +On Thu, 2002-08-22 at 19:10, Troy Engel wrote: +> Today an apt-get upgrade holds back php (and submodules, like php-imap). +> Running an apt-get install php to see what's up, I get: +> +> # apt-get install php +> Processing File Dependencies... Done +> Reading Package Lists... Done +> Building Dependency Tree... Done +> The following extra packages will be installed: +> curl-devel imap imap-devel mysql mysql-devel php-imap php-ldap postgresql +> postgresql-devel postgresql-libs pspell-devel ucd-snmp-devel +> ucd-snmp-utils +> unixODBC unixODBC-devel +> The following NEW packages will be installed: +> curl-devel imap imap-devel mysql mysql-devel postgresql postgresql-devel +> postgresql-libs pspell-devel ucd-snmp-devel ucd-snmp-utils unixODBC +> unixODBC-devel +> The following packages will be upgraded +> php php-imap php-ldap +> 3 packages upgraded, 13 newly installed, 0 to remove(replace) and 1 not +> upgraded. +> +> Anyone have an idea what the heck RedHat did here, and why we're now +> trying to install a ton of crap I don't want? (I'm hoping someone else +> has chased this down and could save me time... ;) ) +> + +rh bugzilla 72007 + +thats the answer + +-sv + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/00397.8e97b74b0753e9f56160fc8cb8d933c9 b/Ch3/datasets/spam/easy_ham/00397.8e97b74b0753e9f56160fc8cb8d933c9 new file mode 100644 index 000000000..8550648ef --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00397.8e97b74b0753e9f56160fc8cb8d933c9 @@ -0,0 +1,75 @@ +From rpm-list-admin@freshrpms.net Fri Aug 23 11:07:21 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 04CCB4415A + for ; Fri, 23 Aug 2002 06:06:06 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:06:06 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7N82sZ15461 for + ; Fri, 23 Aug 2002 09:02:54 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7N7p3J32524; Fri, 23 Aug 2002 09:51:03 + +0200 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [66.187.233.31]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7N7oBJ30858 for + ; Fri, 23 Aug 2002 09:50:11 +0200 +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id + g7N7Zal24437 for ; Fri, 23 Aug 2002 03:35:36 -0400 +Received: from pobox.corp.spamassassin.taint.org (pobox.corp.spamassassin.taint.org + [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id + g7N7oAY14355 for ; Fri, 23 Aug 2002 03:50:10 -0400 +Received: from ckk.rdu.spamassassin.taint.org (ckk.rdu.spamassassin.taint.org [172.16.57.72]) by + pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g7N7o9J22551 for + ; Fri, 23 Aug 2002 03:50:10 -0400 +Subject: Re: latest php upgrade in 7.3 +From: Chris Kloiber +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <3D656F6E.3050504@fluid.com> +References: <3D656F6E.3050504@fluid.com> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-7) +Message-Id: <1030089010.2661.11.camel@ckk.rdu.spamassassin.taint.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 23 Aug 2002 03:50:09 -0400 +Date: 23 Aug 2002 03:50:09 -0400 + +On Thu, 2002-08-22 at 19:10, Troy Engel wrote: + +> Anyone have an idea what the heck RedHat did here, and why we're now +> trying to install a ton of crap I don't want? (I'm hoping someone else +> has chased this down and could save me time... ;) ) + +I'm told that even our best people occasionally screw up. And QA had +tested the rpm on an "Everything" install. Expect a fixed version soon, +and QA procedures have been adjusted to catch this kind of braindamage +in the future. There is nothing really wrong with the binary inside the +rpm, so if you want to --nodeps for now it's ok. + +-- +Chris Kloiber + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/00398.d6847698229e6211c91085261e0a9002 b/Ch3/datasets/spam/easy_ham/00398.d6847698229e6211c91085261e0a9002 new file mode 100644 index 000000000..1f2e716b8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00398.d6847698229e6211c91085261e0a9002 @@ -0,0 +1,76 @@ +From rpm-list-admin@freshrpms.net Mon Aug 26 15:21:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1D80443F9B + for ; Mon, 26 Aug 2002 10:17:34 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:17:34 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7ON8HZ20781 for + ; Sun, 25 Aug 2002 00:08:18 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7ON62J23655; Sun, 25 Aug 2002 01:06:02 + +0200 +Received: from mel-rto6.wanadoo.fr (smtp-out-6.wanadoo.fr [193.252.19.25]) + by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7ON5XJ19722 for + ; Sun, 25 Aug 2002 01:05:33 +0200 +Received: from mel-rta8.wanadoo.fr (193.252.19.79) by mel-rto6.wanadoo.fr + (6.5.007) id 3D6246E8001B8714 for rpm-list@freshrpms.net; Sun, + 25 Aug 2002 01:05:27 +0200 +Received: from localhost.localdomain (193.250.146.99) by + mel-rta8.wanadoo.fr (6.5.007) id 3D49FF79007CFF4F for + rpm-list@freshrpms.net; Sun, 25 Aug 2002 01:05:27 +0200 +Content-Type: text/plain; charset="iso-8859-1" +From: Gilles Fabio +To: rpm-zzzlist@freshrpms.net +Subject: hello everybody +User-Agent: KMail/1.4.1 +References: <20020824.rme.78600400@www.dudex.net> +In-Reply-To: <20020824.rme.78600400@www.dudex.net> +MIME-Version: 1.0 +Message-Id: <200208250058.27705.gilougero@wanadoo.fr> +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g7ON5XJ19722 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 25 Aug 2002 00:58:27 +0200 +Date: Sun, 25 Aug 2002 00:58:27 +0200 + +Hi everybody ! + +My name is Gilles, I'm 19 and I'm french. My english is very bad and I'm sorry +if you do not understand correctly my emails. + +I use Linux since 3 months. Before I worked with Windows 2000 Pro. I enjoy Red +Hat... I tried Mandrake, SuSE, Debian, Slackware and my favorite of all of +them is Red Hat. + +Actually I use Red Hat 7.3. + +I visited the web site Freshrpms, I congratulated Thias for his work. + +And I subscribed to this list for to know more about Red Hat and RPMs' news. + +Pleased to read U soon. +Gilles (Nice, South of France) + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/00399.a7f6ab4a02fcda6c06662a660a75e677 b/Ch3/datasets/spam/easy_ham/00399.a7f6ab4a02fcda6c06662a660a75e677 new file mode 100644 index 000000000..64c6f253a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00399.a7f6ab4a02fcda6c06662a660a75e677 @@ -0,0 +1,158 @@ +From rpm-list-admin@freshrpms.net Mon Aug 26 15:21:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 35DE544174 + for ; Mon, 26 Aug 2002 10:17:46 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:17:46 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7P0glZ25869 for + ; Sun, 25 Aug 2002 01:42:47 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7P0f2J13996; Sun, 25 Aug 2002 02:41:02 + +0200 +Received: from imf17bis.bellsouth.net (mail217.mail.bellsouth.net + [205.152.58.157]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7P0eEJ05587 for ; Sun, 25 Aug 2002 02:40:14 +0200 +Received: from adsl-157-17-129.msy.bellsouth.net ([66.157.17.129]) by + imf17bis.bellsouth.net (InterMail vM.5.01.04.19 + 201-253-122-122-119-20020516) with ESMTP id + <20020825004145.MZZJ23893.imf17bis.bellsouth.net@adsl-157-17-129.msy.bellsouth.net> + for ; Sat, 24 Aug 2002 20:41:45 -0400 +Subject: Re: Fw: Re: When are we going to get. [making ALSA rpms] +From: Lance +To: FreshRPMs List +In-Reply-To: <20020824.rme.78600400@www.dudex.net> +References: <20020824.rme.78600400@www.dudex.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-6) +Message-Id: <1030236009.27767.5.camel@localhost.localdomain> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 24 Aug 2002 19:40:08 -0500 +Date: 24 Aug 2002 19:40:08 -0500 + +Thanks for this information. I gave Alsa a try, couldn't figure out how +to enable digital out, although I'm sure if I put enough time into it, +could have gotten it working. Also when playing mp3s in analog mode, +every time I switched between mp3s there was a bit of static. Noticed a +new distribution geared towards audio applications, AGNULA +(http://www.agnula.org/) uses Alsa as well. Seems though the latest +open source emu10k1 drivers (SBLive! 5.1) work fair enough. Anyone else +experience these problems with Alsa? Are there alot of people on this +list using Alsa? + +Regards, + +Lance + +On Sat, 2002-08-24 at 17:45, Angles Puglisi wrote: +> FYI, This is how I make my ALSA rpms ... some people on the (null) list did not +> realize it was pretty easy. +> +> btw, I do this lot since I've upgraded from RH7.3 to Limbo1 to Limbo2 to Null all in +> a week (probably). +> +> forward - original mail: +> From "Angles Puglisi" +> Date 08/24/2002 - 06:38:03 pm +> Subject Re: When are we going to get.... +> ---- +> + +> From: Angles Puglisi +> To: limbo-list@spamassassin.taint.org +> Subject: Re: When are we going to get.... +> Date: 24 Aug 2002 22:40:40 +0000 +> +> OK, I do this every time I update a kernel. +> +> The 1st time I added ALSA, I tried a non-root rpom build but the DEV things were not +> made. Other than that, I bet you could do non-root. The following can be scripted +> easily. +> +> 1. get (a) alsa-drivers, (b) alas-lib, and (c) alsa-utils tarballs (if upgrading the +> kernel then you probably have them from your last install). +> 2. unpack them somewhere. +> 3. for each of them, go to the top directory of the unpacked tarball, and do +> ../configure, then look in (I'm going by memory) TOPDIR/utils/* you should see a spec +> file there. Do this for the 3 tarballs and you get 3 spec files. +> +> 4. put the source tarballs in SOURCES and the spec files in SPECS, go in order from +> a, b, then c, doing +> "rpmbuild -ba SPECS/alsa-[X].spec; rpm -Uvh RPMS/i386/alsa-[X].rpm" +> +> 5. do that in order for the 3 spec files and you have just installed the alsa +> drivers on your system. The 1st time you do this you need to put the correct stuff +> in your modules.conf file (may take some research) then you get the alsa driver and +> OSS compat capabilities, or you can choose not to use the OOS compat stuff. +> +> Script making the spec, then building and upgrading, as above, and you have +> "no-sweat" ALSA. +> +> NOTE: the (null) rpmbuild did take some tweaking, it does a check for files in the +> buildroot that you don't specify in your files section. In this case there is an +> extra file (going by memory) "/include/sys/asound.h". Add a line at the end on the +> "install" section of the spec file to delete that file and you are good to go. +> +> Gordon Messmer (yinyang@eburg.com) wrote*: +> > +> >On Fri, 2002-08-23 at 03:41, Matthias Saou wrote: +> >> +> >> Probably when Red Hat Linux gets a 2.6 kernel ;-) Until then, a few places +> >> provide good quality alsa packages, but indeed you still have to patch and +> >> recompile your kernel. +> > +> >Not so. Alsa is build-able independently of the kernel. +> > +> >> Maybe some day I'll try ALSA (never done it yet), and that day you can +> >> expect all needed packages to appear on freshrpms.net :-) +> > +> >I'd be interested in working with you on that if you want those +> >packages. +> > +> > +> > +> > +> >_______________________________________________ +> >Limbo-list mailing list +> >Limbo-list@redhat.com +> > +> +> -- +> That's "angle" as in geometry. +-- +: +####[ Linux One Stanza Tip (LOST) ]########################### + +Sub : Extracting lines X to Y in a text file LOST #261 + +Use sed ... Syntax: [$sed -n 'X,Yp' < textfile.txt]. Following +will extract lines 5-10 from textin.fil to textout.fil ... +$sed -n '5,10p' < textin.fil > textout.fil + +######################################## +: + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/00400.ff81f656b45e5f910a2a64116ea00fc8 b/Ch3/datasets/spam/easy_ham/00400.ff81f656b45e5f910a2a64116ea00fc8 new file mode 100644 index 000000000..3e87f47a3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00400.ff81f656b45e5f910a2a64116ea00fc8 @@ -0,0 +1,69 @@ +From rpm-list-admin@freshrpms.net Mon Aug 26 15:25:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2A96C4415E + for ; Mon, 26 Aug 2002 10:23:29 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:23:29 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QAT8Z17584 for + ; Mon, 26 Aug 2002 11:29:08 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7QAO3J18551; Mon, 26 Aug 2002 12:24:03 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7QANDJ18475 for + ; Mon, 26 Aug 2002 12:23:13 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Fw: Re: When are we going to get. [making ALSA rpms] +Message-Id: <20020826121421.542d2dd3.matthias@egwn.net> +In-Reply-To: <20020824.rme.78600400@www.dudex.net> +References: <20020824.rme.78600400@www.dudex.net> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.1claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 12:14:21 +0200 +Date: Mon, 26 Aug 2002 12:14:21 +0200 + +Once upon a time, ""Angles" wrote : + +> FYI, This is how I make my ALSA rpms ... some people on the (null) list +> did not realize it was pretty easy. + +Thanks Angles! I really think I'll give ALSA a shot fairly soon then ;-) + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/00401.fccfd3c52e43aa3512874c3efec9edcb b/Ch3/datasets/spam/easy_ham/00401.fccfd3c52e43aa3512874c3efec9edcb new file mode 100644 index 000000000..1f49026ec --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00401.fccfd3c52e43aa3512874c3efec9edcb @@ -0,0 +1,77 @@ +From rpm-list-admin@freshrpms.net Mon Aug 26 19:44:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8A07943F9B + for ; Mon, 26 Aug 2002 14:44:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 19:44:37 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QIe3Z04782 for + ; Mon, 26 Aug 2002 19:40:04 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7QIa2J28203; Mon, 26 Aug 2002 20:36:02 + +0200 +Received: from fep01-app.kolumbus.fi (fep01-0.kolumbus.fi [193.229.0.41]) + by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7QIZ8J26297 for + ; Mon, 26 Aug 2002 20:35:08 +0200 +Received: from azrael.blades.cxm ([62.248.237.248]) by + fep01-app.kolumbus.fi with ESMTP id + <20020826183506.RBIE18308.fep01-app.kolumbus.fi@azrael.blades.cxm> for + ; Mon, 26 Aug 2002 21:35:06 +0300 +Received: (from blades@localhost) by azrael.blades.cxm (SGI-8.9.3/8.9.3) + id VAA40143 for rpm-list@freshrpms.net; Mon, 26 Aug 2002 21:35:09 +0300 + (EEST) +X-Authentication-Warning: azrael.blades.cxm: blades set sender to + harri.haataja@cs.helsinki.fi using -f +From: Harri Haataja +To: rpm-zzzlist@freshrpms.net +Subject: Re: New gkrellm 2.0.0, gtk2 version +Message-Id: <20020826213508.A40199@azrael.smilehouse.com> +References: <20020826191454.43e6c15f.matthias@egwn.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <20020826191454.43e6c15f.matthias@egwn.net>; from + matthias@egwn.net on Mon, Aug 26, 2002 at 07:14:54PM +0200 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 21:35:08 +0300 +Date: Mon, 26 Aug 2002 21:35:08 +0300 + +On Mon, Aug 26, 2002 at 07:14:54PM +0200, Matthias Saou wrote: +> I've repackaged the new gkrellm 2.0.0 which is now ported to gtk2 +> (woohoo!). Unfortunately, the plugins are incompatible with the +> previous 1.2.x ones, and since not many/all have been ported yet, I +> prefer not to release the package on the main freshrpms.net site for +> now. + +You could go the same way as the others and call it gkrellm2 and +conflict with v1 if the executables or paths are the same. + +-- +Hey, you're right. I don't want to call a destructor on my objects, +I want to call a *destroyer*. Gozer has come for your memory, +little PersistentNode! + -- Joel Gluth + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/00402.8e937401f8a8a7a1c7661e076f96cd55 b/Ch3/datasets/spam/easy_ham/00402.8e937401f8a8a7a1c7661e076f96cd55 new file mode 100644 index 000000000..80cff5000 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00402.8e937401f8a8a7a1c7661e076f96cd55 @@ -0,0 +1,84 @@ +From rpm-list-admin@freshrpms.net Mon Aug 26 20:15:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A7E4643F99 + for ; Mon, 26 Aug 2002 15:15:18 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 20:15:18 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QJ8VZ05732 for + ; Mon, 26 Aug 2002 20:08:31 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7QJ52J30477; Mon, 26 Aug 2002 21:05:02 + +0200 +Received: from kamakiriad.com + (IDENT:nZbdv/p4nmL0skumLgaQPfpaAEkGbyHy@cable-b-36.sigecom.net + [63.69.210.36]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7QJ4uJ30412 for ; Mon, 26 Aug 2002 21:04:56 +0200 +Received: from aquila.kamakiriad.local (aquila.kamakiriad.local + [192.168.1.3]) by kamakiriad.com (8.11.6/8.11.0) with SMTP id g7QJ4me30195 + for ; Mon, 26 Aug 2002 14:04:49 -0500 +From: Brian Fahrlander +To: rpm-zzzlist@freshrpms.net +Subject: Re: New gkrellm 2.0.0, gtk2 version +Message-Id: <20020826140448.208e3da8.kilroy@kamakiriad.com> +In-Reply-To: <20020826191454.43e6c15f.matthias@egwn.net> +References: <20020826191454.43e6c15f.matthias@egwn.net> +X-Mailer: Sylpheed version 0.8.1 (GTK+ 1.2.10; i386-redhat-linux) +X-Message-Flag: : Shame on you! You know Outlook is how viruses are spread! +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 14:04:48 -0500 +Date: Mon, 26 Aug 2002 14:04:48 -0500 + +On Mon, 26 Aug 2002 19:14:54 +0200, Matthias Saou wrote: + +> Hi all, +> +> I've repackaged the new gkrellm 2.0.0 which is now ported to gtk2 +> (woohoo!). Unfortunately, the plugins are incompatible with the previous +> 1.2.x ones, and since not many/all have been ported yet, I prefer not to +> release the package on the main freshrpms.net site for now. +> +> For those of you who'd like to try it out, you can grab it here : +> http://ftp.freshrpms.net/pub/freshrpms/testing/gkrellm/ +> +> I think the themes are still compatible, but haven't tried to install some +> with 2.0.0 yet. +> Last note, the above packages are for Valhalla. And yes, although GNOME 2 +> is not in Valhalla, gtk2 and glib2 have been from the very beginning! ;-) + + Sweet, dude- I was really hoping it'd be out sooner or later; thanks a bunch! + +------------------------------------------------------------------------ +Brian Fahrländer Linux Zealot, Conservative, and Technomad +Evansville, IN My Voyage: http://www.CounterMoon.com +ICQ 5119262 +------------------------------------------------------------------------ +I've been complaining for years, and almost no one listened. "Windows is +just easier" you said. "I don't want to learn anything new", you said. +Tell me how easy THIS is: +http://www.guardian.co.uk/Archive/Article/0,4273,4477138,00.html + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/00403.bda6864694236a9ec97714233b831c31 b/Ch3/datasets/spam/easy_ham/00403.bda6864694236a9ec97714233b831c31 new file mode 100644 index 000000000..b44c41453 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00403.bda6864694236a9ec97714233b831c31 @@ -0,0 +1,78 @@ +From rpm-list-admin@freshrpms.net Tue Aug 27 00:43:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5A2D443F99 + for ; Mon, 26 Aug 2002 19:43:09 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 00:43:09 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QNYrZ14635 for + ; Tue, 27 Aug 2002 00:34:53 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7QNX3J30783; Tue, 27 Aug 2002 01:33:03 + +0200 +Received: from ex02.idirect.net (ex02.idirect.net [208.226.76.48]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7QNVtJ24854 for + ; Tue, 27 Aug 2002 01:31:57 +0200 +X-Mimeole: Produced By Microsoft Exchange V6.0.4417.0 +Content-Class: urn:content-classes:message +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Subject: RE: Re: When are we going to get. [making ALSA rpms] +Message-Id: +X-MS-Has-Attach: +X-MS-Tnef-Correlator: +Thread-Topic: Fw: Re: When are we going to get. [making ALSA rpms] +Thread-Index: AcJL0Ge3xdOQJ42YRtK5WEOfWLTZfABh53sw +From: "Harig, Mark A." +To: +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g7QNVtJ24854 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 19:31:49 -0400 +Date: Mon, 26 Aug 2002 19:31:49 -0400 + +> made. Other than that, I bet you could do non-root. The following can +be scripted +> easily. +> +... +> 2. unpack them somewhere. +> 3. for each of them, go to the top directory of the unpacked tarball, +and do +> ../configure, then look in (I'm going by memory) TOPDIR/utils/* you +should see a spec +> file there. Do this for the 3 tarballs and you get 3 spec files. +> + +The above steps can all be performed "automatically", +if the .spec files are updated to include the necessary +macros in the %prep (%setup -q) and %build stages. +This would make the building of the .rpm files less +error prone and more self-contained, and it would be +somewhat self-documenting. + +--- + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/00404.fb2c69f7df37b12bc62737254d0ea36a b/Ch3/datasets/spam/easy_ham/00404.fb2c69f7df37b12bc62737254d0ea36a new file mode 100644 index 000000000..306a27206 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00404.fb2c69f7df37b12bc62737254d0ea36a @@ -0,0 +1,59 @@ +From fork-admin@xent.com Tue Sep 3 14:24:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 40A2F16F3B + for ; Tue, 3 Sep 2002 14:22:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 14:22:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g830itZ31453 for ; + Tue, 3 Sep 2002 01:44:55 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7DC372940AC; Mon, 2 Sep 2002 17:42:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav39.law15.hotmail.com [64.4.22.96]) by + xent.com (Postfix) with ESMTP id 38E4D294099 for ; + Mon, 2 Sep 2002 17:41:26 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 2 Sep 2002 17:43:50 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: +Subject: Re: Java is for kiddies +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 03 Sep 2002 00:43:50.0929 (UTC) FILETIME=[F8C12810:01C252E2] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 2 Sep 2002 17:47:44 -0700 + + +----- Original Message ----- +From: "Adam L. Beberg" +> +> Memory management is a non-issue for anyone that has any idea at all how +the +> hardware functions. +In theory there is no difference between theory and practice. In practice +there is. + + diff --git a/Ch3/datasets/spam/easy_ham/00405.c838c0717624d85d5a53371fdbce5955 b/Ch3/datasets/spam/easy_ham/00405.c838c0717624d85d5a53371fdbce5955 new file mode 100644 index 000000000..3970a8dd5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00405.c838c0717624d85d5a53371fdbce5955 @@ -0,0 +1,153 @@ +From fork-admin@xent.com Tue Sep 3 14:24:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 04D8916F3D + for ; Tue, 3 Sep 2002 14:22:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 14:22:59 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8366uZ07156 for ; + Tue, 3 Sep 2002 07:06:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8C84F2940B3; Mon, 2 Sep 2002 23:04:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 1A407294099 for + ; Mon, 2 Sep 2002 23:03:06 -0700 (PDT) +Received: (qmail 1783 invoked by uid 508); 3 Sep 2002 06:05:30 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.48) by + venus.phpwebhosting.com with SMTP; 3 Sep 2002 06:05:30 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8365Sb03549; Tue, 3 Sep 2002 08:05:28 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: +Cc: forkit! +Subject: Making a mesh on the move +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=ISO-8859-1 +Content-Transfer-Encoding: 8BIT +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 3 Sep 2002 08:05:27 +0200 (CEST) + + +http://www.guardian.co.uk/Print/0%2c3858%2c4489999%2c00.html + +Making a mesh on the move + +A new way to give us fast mobile net access spells further trouble for 3G, +reports Peter Rojas + +Peter Rojas +Thursday August 29, 2002 +The Guardian + +Imagine being able to surf the net at speeds faster than DSL from +anywhere, at any time - you could watch a live video webcast while waiting +for the bus, email photos to your friends while sitting in the park, or +download the MP3 of the song that's playing in the pub before it finishes. + +This is the vision of a high-speed wireless internet paradise that the +third-generation (3G) mobile phone companies have been promoting for +years. 3G services are just beginning to be rolled out, but a new +technology called mesh networking promises to deliver on this vision +sooner and more effectively than the mobile phone companies could ever +dream. + +Two companies, US startup MeshNetworks and Moteran Networks of Germany, +are each developing their own competing version of mesh networking. +Instead of the current hub-and-spoke model of wireless communications, +with every device connecting to an overburdened central antenna, any time +"mesh-enabled" devices - mobile phones, PDAs, laptops - are in close +proximity to each other, they automatically create a wireless mesh +network. Every device in the area acts as a repeater or router, relaying +traffic for everyone else. Traffic hops from person to person until it +reaches the nearest internet access point, reducing the need for central +antennas, and improving wireless coverage. + +As the number of mobile phones soars, and wireless PDAs, laptops, and +other devices begin to crowd the spectrum, this approach to wireless +networking may be inevitable. + +Mesh networks also have several other advantages over 3G wireless +networks. While 3G operators roll out mobile services that offer users +connection speeds of up to 144 kbps (roughly three times faster than a +dial-up modem), Moteran and MeshNetworks are able to offer connection +speeds of up to 6Mbps, over a hundred times faster than dial-up. The +technologies they use include Wi-Fi - the emerging standard for high-speed +wireless networking also known as 802.11b. A similarly short-range +protocol called UltraWideBand, which is poised to succeed Wi-Fi, is even +faster and could, by 2005, approach 400 Mbps. + +The range of a typical Wi-Fi network is generally too limited to be of +much use when travelling around a city. Mesh networks get around the +problem of coverage by having every device in the network relay traffic. +Even though the range of any individual device is relatively small, +because (in theory) there will be so many users in the surrounding area, +connections will be faster and better than that of a standard 3G wireless +connection. + +Because mesh networks use Wi-Fi, the equipment and infrastructure needed +to create them is cheap and readily available. Instead of building +cellular phone towers that often cost hundreds of thousands of pounds, all +that is needed to get a network going are wireless access points (around +£100 now) placed strategically around town to relay traffic, and the +proper software. Existing laptops and PDAs can be mesh-enabled by +software. + +It also means that anyone could set up their own mobile phone network. +Unlike with 3G cellular, the part of the spectrum that Wi-Fi operates on +is unregulated in the US, Britain. The mobile phone companies are none too +pleased about this, especially since many of them spent billions of pounds +acquiring 3G licences. + +All that's needed are cheap relays and mobile phones equipped to connect +to the network. With every additional customer that signs up coverage gets +better, instead of getting worse, as is the case with mobile phone +networks. + +But things get very interesting when you realise that when you have +high-speed internet connections everywhere, and everyone's laptops, PDAs, +and mobile phones are connected together at blazingly fast speeds, sharing +music, movies, or whatever else becomes ridiculously easy. When +UltraWideBand hits, all of this will just accelerate. + +At 400Mbps, copying a pirated copy of the Lord of the Rings from the +person sitting across from you at the cafe would take about 15 seconds. +Sooner or later, playgrounds will be filled with kids swapping files of +their favourite songs, movies, and video games. + +But the first mesh networks are not likely to be available to consumers. +MeshNetworks has no plans to offer its own high-speed wireless service. +Instead the company plans to sell its technology to others, such as cities +that want to provide wireless internet to police, fire, and public works +employees, or businesses that want to establish wireless networks on the +cheap. Moteran has similar aspirations for small businesses and for +enterprise networks. + +The first place average users may use the technology is when it is +incorporated into vehicles, enabling motorists to access the internet at +high speeds, which both companies see happening soon. + +When will you be able to wander around town with a 6Mbps connection in +your pocket? It's too soon to say, but just as broadband internet service +was initially available only to businesses and universities, eventually +someone will see the profit in bringing mesh networking to the masses. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00406.fe97503539c60ff6814fa2fadf1aa630 b/Ch3/datasets/spam/easy_ham/00406.fe97503539c60ff6814fa2fadf1aa630 new file mode 100644 index 000000000..0d98628e9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00406.fe97503539c60ff6814fa2fadf1aa630 @@ -0,0 +1,63 @@ +From fork-admin@xent.com Tue Sep 3 14:24:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5A6DE16F3C + for ; Tue, 3 Sep 2002 14:22:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 14:22:53 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g834TbZ04719 for ; + Tue, 3 Sep 2002 05:29:38 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 068F7294197; Mon, 2 Sep 2002 21:23:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id 8DF23294099 for ; + Mon, 2 Sep 2002 21:22:54 -0700 (PDT) +Received: (qmail 8874 invoked by uid 1111); 3 Sep 2002 04:24:47 -0000 +From: "Adam L. Beberg" +To: RossO +Cc: +Subject: Re: Electric car an Edsel... +In-Reply-To: <9FD20548-BEEE-11D6-88BE-00039344DDD6@ordersomewherechaos.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 2 Sep 2002 21:24:47 -0700 (PDT) + +On 2 Sep 2002, RossO wrote: + +> John Waylan (who was interviewed in Wired a few years back) pulled out a +> 14.4 second run in the quarter mile (91mph), on a battery pack that +> hasn't been broken in yet. He expects to break his record next year +> topping his 13.1sec/99mph run a couple of years ago. He's shooting for a +> 12 second run. + +Battery pack, huh what??? + +You dont use batteries for a 1/4 mile run, you use capacitors. MANY times +the energy density, and you can get the energy out fast enough. Note that +the battery packs are fully swapped out for recharging after each run +anyway, just like a gas dragster is refueled, so this wouldnt be cheating. +200 MPH should be no problem. + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + + diff --git a/Ch3/datasets/spam/easy_ham/00407.11425a14d7fd9c3e1806fd7dc648001a b/Ch3/datasets/spam/easy_ham/00407.11425a14d7fd9c3e1806fd7dc648001a new file mode 100644 index 000000000..82c8a46a4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00407.11425a14d7fd9c3e1806fd7dc648001a @@ -0,0 +1,75 @@ +From fork-admin@xent.com Tue Sep 3 14:24:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E969316F3E + for ; Tue, 3 Sep 2002 14:23:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 14:23:05 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g836KxZ07386 for ; + Tue, 3 Sep 2002 07:20:59 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7A8812941C2; Mon, 2 Sep 2002 23:18:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 0AECF294199 for + ; Mon, 2 Sep 2002 23:17:40 -0700 (PDT) +Received: (qmail 5529 invoked by uid 508); 3 Sep 2002 06:20:00 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.48) by + venus.phpwebhosting.com with SMTP; 3 Sep 2002 06:20:00 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g836JvX03835; Tue, 3 Sep 2002 08:19:57 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: "Adam L. Beberg" +Cc: RossO , +Subject: Re: Electric car an Edsel... +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 3 Sep 2002 08:19:57 +0200 (CEST) + +On Mon, 2 Sep 2002, Adam L. Beberg wrote: + +> Battery pack, huh what??? +> +> You dont use batteries for a 1/4 mile run, you use capacitors. MANY times + +Actually, you use both. + +> the energy density, and you can get the energy out fast enough. Note that + +No, even best supercapacitors are a long way to go from reasonably good +electrochemical energy sources. But you can recharge and discharge them +very quickly, and they take lots more of cycles than the best battery. +Ideal for absorbing the braking energy and turn them into smoking tires +few moments or minutes afterwards. + +> the battery packs are fully swapped out for recharging after each run +> anyway, just like a gas dragster is refueled, so this wouldnt be cheating. +> 200 MPH should be no problem. + +I don't see any reason why EVs shouldn't dominate dragster runs. The +traction is the limiting factor, not motor power. You can basically put +the motors into wheelhubs mounted on a composite frame, and dump juice +into them until they melt, which will be some 100 sec downstream. Plenty +of time to smoke anything. + +Of course, it doesn't roar, and spew smokage, so it won't happen. + + diff --git a/Ch3/datasets/spam/easy_ham/00408.d52d0dde484c37acb79bfdc18d4a2aa9 b/Ch3/datasets/spam/easy_ham/00408.d52d0dde484c37acb79bfdc18d4a2aa9 new file mode 100644 index 000000000..6957f0d4a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00408.d52d0dde484c37acb79bfdc18d4a2aa9 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Tue Sep 3 18:04:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 39FBF16F56 + for ; Tue, 3 Sep 2002 18:04:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 18:04:36 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g83H0wZ28126 for + ; Tue, 3 Sep 2002 18:01:04 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id SAA02554 for ; Tue, 3 Sep 2002 18:01:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9FC4D2940E8; Tue, 3 Sep 2002 09:53:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.datastore.ca (unknown [207.61.5.2]) by xent.com + (Postfix) with ESMTP id 68F07294099 for ; Tue, + 3 Sep 2002 09:52:12 -0700 (PDT) +Received: from maya.dyndns.org [207.61.5.143] by mail.datastore.ca + (SMTPD32-7.00) id A982B010040; Tue, 03 Sep 2002 12:55:30 -0400 +Received: by maya.dyndns.org (Postfix, from userid 501) id 02C1F1C327; + Tue, 3 Sep 2002 12:53:58 -0400 (EDT) +To: "Russell Turpin" +Cc: fork@spamassassin.taint.org +Subject: Re: Signers weren't angry young men (was: Java is for kiddies) +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 03 Sep 2002 12:53:58 -0400 + + +I stand corrected --- I'd thought I'd seen a display there listing in +the Ben Franklin museum which showed them as ranging in age from 19 to +just over 30 for the oldest, most in their early twenties. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00409.6219d28fb4f2ca0173e3f76acbbec8ce b/Ch3/datasets/spam/easy_ham/00409.6219d28fb4f2ca0173e3f76acbbec8ce new file mode 100644 index 000000000..73785fce8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00409.6219d28fb4f2ca0173e3f76acbbec8ce @@ -0,0 +1,69 @@ +From fork-admin@xent.com Tue Sep 3 22:20:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0A1F716F67 + for ; Tue, 3 Sep 2002 22:19:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 22:19:31 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g83KO1Z01894 for + ; Tue, 3 Sep 2002 21:24:01 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id VAA03489 for ; Tue, 3 Sep 2002 21:24:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E84A72940F6; Tue, 3 Sep 2002 13:16:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm7-47.sba1.netlojix.net + [207.71.222.143]) by xent.com (Postfix) with ESMTP id 1404F294099 for + ; Tue, 3 Sep 2002 13:15:06 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id NAA06379; + Tue, 3 Sep 2002 13:04:23 -0700 +Message-Id: <200209032004.NAA06379@maltesecat> +To: fork@spamassassin.taint.org +Subject: Re: no matter where you go +In-Reply-To: Message from + "James Tauber" + of + "Thu, 29 Aug 2002 10:58:35 GMT." + <20020829105836.0628D2FD34@server3.fastmail.fm> +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 03 Sep 2002 13:04:22 -0700 + + + +> Another thing to note about Australia is that, while the highest income +> tax bracket (47%) isn't *that* high, it kicks in at around USD33,000. + +and it looks like PPP for USD 33k is only +about USD 50k*, at least in Big Macs: + + +Australia A$3.00 USD 1.62 -35% +US $2.49 USD 2.49 +Switzerland SFr6.30 USD 3.81 +53% + +Interestingly enough, although housing in +Perth seems cheap, housing in Switzerland +doesn't seem to be as expensive as the Big +Macs would imply. + +-Dave + +* which still doesn't sound bad, if one +can convert urban CA equity into free and +clear Oz ownership. + diff --git a/Ch3/datasets/spam/easy_ham/00410.2bd60034fe4c3f781e44ddac87195fd3 b/Ch3/datasets/spam/easy_ham/00410.2bd60034fe4c3f781e44ddac87195fd3 new file mode 100644 index 000000000..11630ae85 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00410.2bd60034fe4c3f781e44ddac87195fd3 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Tue Sep 3 22:20:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DC11E16F6A + for ; Tue, 3 Sep 2002 22:19:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 22:19:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g83KYLZ02183 for ; + Tue, 3 Sep 2002 21:34:21 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1F4782941C7; Tue, 3 Sep 2002 13:29:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id A10642941C4 for ; + Tue, 3 Sep 2002 13:28:41 -0700 (PDT) +Received: (qmail 11992 invoked by uid 1111); 3 Sep 2002 20:31:03 -0000 +From: "Adam L. Beberg" +To: Russell Turpin +Cc: +Subject: Re: Signers weren't angry young men (was: Java is for kiddies) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 3 Sep 2002 13:31:03 -0700 (PDT) + +On Tue, 3 Sep 2002, Russell Turpin wrote: + +> For the most part, these were angry, middle-aged men. A column in this +> table shows their age at the time: + +Mainly they were a bunch of rich people (the white/old/male is irrelivant +but how it happened to be at the time) that didnt want to pay their taxes to +da man er... king. So they had a revolution and formed a no-tax zone, +leading to a very fast growing economy and dreams for all - amazing what +an economy without 40% of everything disappearing to taxes. It was a great +many years before their were federal taxes in the US. + +Now we give rich men who dont want to pay any taxes corporations to run, +with enough writeoffs and loopholes that they dont have to pay any :) + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00411.478dc892fbb1a7970a4442fd6b977c25 b/Ch3/datasets/spam/easy_ham/00411.478dc892fbb1a7970a4442fd6b977c25 new file mode 100644 index 000000000..4f3c35513 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00411.478dc892fbb1a7970a4442fd6b977c25 @@ -0,0 +1,93 @@ +From fork-admin@xent.com Tue Sep 3 22:20:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 149C716F69 + for ; Tue, 3 Sep 2002 22:19:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 22:19:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g83KStZ01954 for ; + Tue, 3 Sep 2002 21:28:56 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D8361294103; Tue, 3 Sep 2002 13:26:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id A643E294099 for ; Tue, + 3 Sep 2002 13:25:12 -0700 (PDT) +Received: (qmail 18433 invoked from network); 3 Sep 2002 20:27:39 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 3 Sep 2002 20:27:39 -0000 +Reply-To: +From: "John Hall" +To: +Subject: RE: Gasp! +Message-Id: <005601c25388$59f8f220$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 3 Sep 2002 13:27:40 -0700 + +I used Async IO on System V in the '87, '88 time frame. I did it that +way cause I thought it was cool to see if I could keep the tape +spinning. + +I can believe Linux is catching up to this, but some ability to do async +IO already existed in the UNIX world. + +John Hall +13464 95th Ave NE +Kirkland WA 98034 + + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Adam +> L. Beberg +> Sent: Saturday, August 31, 2002 7:35 PM +> To: fork@spamassassin.taint.org +> Subject: Gasp! +> +> "Red Hat Linux Advanced Server provides many high end features such +as: +> Support for Asynchronous I/O. Now read I/O no longer needs to stall +your +> application while waiting for completion." +> +> Could it be? After 20 years without this feature UNIX finally catches +up +> to +> Windows and has I/O that doesnt totally suck for nontrivial apps? No +way! +> +> OK, so they do it with signals or a flag, which is completely ghetto, +but +> at +> least they are trying. Keep trying guys, you got the idea, but not the +> clue. +> +> - Adam L. "Duncan" Beberg +> http://www.mithral.com/~beberg/ +> beberg@mithral.com + + + diff --git a/Ch3/datasets/spam/easy_ham/00412.2f7375258785a03b8f8ca2adb0c72620 b/Ch3/datasets/spam/easy_ham/00412.2f7375258785a03b8f8ca2adb0c72620 new file mode 100644 index 000000000..92fadba49 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00412.2f7375258785a03b8f8ca2adb0c72620 @@ -0,0 +1,56 @@ +From fork-admin@xent.com Tue Sep 3 22:20:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E36DA16F6B + for ; Tue, 3 Sep 2002 22:20:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 22:20:04 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g83KhwZ02538 for ; + Tue, 3 Sep 2002 21:43:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9B2CC2940FD; Tue, 3 Sep 2002 13:41:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (gateway.ximian.com [141.154.95.125]) + by xent.com (Postfix) with ESMTP id 5D715294099 for ; + Tue, 3 Sep 2002 13:40:44 -0700 (PDT) +Received: (from louie@localhost) by localhost.localdomain (8.11.6/8.11.6) + id g83KgAs02179 for fork@xent.com; Tue, 3 Sep 2002 16:42:10 -0400 +X-Authentication-Warning: localhost.localdomain: louie set sender to + louie@ximian.com using -f +Subject: Re: Signers weren't angry young men (was: Java is for kiddies) +From: Luis Villa +To: fork@spamassassin.taint.org +In-Reply-To: +References: +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +Organization: +Message-Id: <1031085728.1780.11.camel@localhost.localdomain> +MIME-Version: 1.0 +X-Mailer: Ximian Evolution 1.1.0.99 (Preview Release) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 03 Sep 2002 16:42:09 -0400 + +On Tue, 2002-09-03 at 16:31, Adam L. Beberg wrote: + +> It was a great many years before their were federal taxes in the US. + +And during said period there were more than a few serious depressions. +Amazing what economies tend to do with or without taxes. + +Luis + diff --git a/Ch3/datasets/spam/easy_ham/00413.e637d3bed73c6df691dc86dd61d46192 b/Ch3/datasets/spam/easy_ham/00413.e637d3bed73c6df691dc86dd61d46192 new file mode 100644 index 000000000..72d0e37db --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00413.e637d3bed73c6df691dc86dd61d46192 @@ -0,0 +1,125 @@ +From fork-admin@xent.com Wed Sep 4 11:41:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D9B4916F7A + for ; Wed, 4 Sep 2002 11:40:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 11:40:00 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g83LawZ04243 for ; + Tue, 3 Sep 2002 22:36:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A0104294108; Tue, 3 Sep 2002 14:34:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from alumnus.caltech.edu (alumnus.caltech.edu [131.215.49.51]) + by xent.com (Postfix) with ESMTP id D675F294099; Tue, 3 Sep 2002 14:33:22 + -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) by alumnus.caltech.edu + (8.12.3/8.12.3) with ESMTP id g83LZnfw010916; Tue, 3 Sep 2002 14:35:50 + -0700 (PDT) +Subject: InfoWorld profile of Max Levchin +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +From: Rohit Khare +To: fork@spamassassin.taint.org +Message-Id: <1C5D938E-BF85-11D6-8989-000393A46DEA@alumni.caltech.edu> +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 3 Sep 2002 14:35:48 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g83LawZ04243 + +Congrats, in the end... +> "If they didn't have Max, they might have succumbed, because PayPal was +> susceptible to fraud and money laundering, and Max tightened them up," + +http://www.infoworld.com/articles/ct/xml/02/09/02/020902ctspotlight.xml + +Secure and at ease +By Jack Mccarthy +August 30, 2002 1:01 pm PT + +MAX LEVCHIN'S FASCINATION with encryption started when he was a teenager +in Kiev, Ukraine, and continued as he immigrated to the United States +where he attended the University of Illinois at Urbana-Champaign. In +late 1998, not two years out of college, he drew on his passion to +co-found PayPal, the online payment system that has since attracted tens +of millions of users and gained the reputation as the premier Internet +transaction processor. Now online auction house eBay has acquired his +company for a king's ransom. + +Not bad for a 27-year-old kid from Ukraine. + +A programmer since he was 10 years old, Levchin and his family moved to +Chicago in 1991, and since then he has pursued security as if on a +mission. He created a startup right out of college to build secure +passwords for Palm Pilots. He met Peter Thiel, and the two founded +PayPal to target online payment security. Thiel is now CEO of the +company. + +"This company was founded on the notion of security value," Levchin +says. "Peter Thiel and I shared that vision from the very beginning." + +Thiel concentrates on company business matters, whereas Levchin remains +focused on security, which he says is the key to the company's good +fortune. + +"I explain [PayPal] as a security company posing as a transaction +processor," Levchin says. "We spend a lot of time designing security so +it doesn't step on the toes of convenience and not the other way around. +The trade-off is fundamental." + +Mountain View, Calif.-based PayPal allows businesses and consumers with +e-mail addresses to send and receive payments via the Internet, +accepting credit card or bank account payments for purchases. The +service extends to 38 countries, with more than 17 million users and +more than 3 million business accounts. + +Most of PayPal's users are participants in online auctions, which led +PayPal to be closely linked with eBay, the leading Web auction site. +Although they were once rivals, the relationship between the two +companies resulted July 8 in eBay's tentative $1.5 billion acquisition +of PayPal. The agreement is subject to regulatory review. + +Levchin says he will stay at PayPal as it merges with eBay. "There are +areas of synergy and collaboration we can explore." + +Although security is a dominant feature for PayPal, the company's +ability to carry out open communications among the millions of +participants fits the growing Web services model, Levchin says. + +"This is a service that links people and allows them to send messages to +one another," he says. Levchin is a panelist at InfoWorld's +Next-Generation Web Services II conference Sept. 20 + +PayPal, as an online payment system, is a natural target for fraud. And +Levchin has almost singlehandedly saved the company from thieves bent on +exploiting the system, says Avivah Litan, a vice president and analyst +covering financial services at Stamford, Conn.-based Gartner. + +"If they didn't have Max, they might have succumbed, because PayPal was +susceptible to fraud and money laundering, and Max tightened them up," +Litan says. + +To combat criminals, Levchin established "Igor," an antifraud program +that monitors transactions and warns of suspicious accounts. Levchin +says building security and antifraud systems is a job he relishes. "The +work I do is important to PayPal and to consumers in general because the +work makes Internet shopping safe. It's the view that ecommerce has +arrived." + + diff --git a/Ch3/datasets/spam/easy_ham/00414.c2dee68136358ceec7d235d03185822b b/Ch3/datasets/spam/easy_ham/00414.c2dee68136358ceec7d235d03185822b new file mode 100644 index 000000000..14690240d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00414.c2dee68136358ceec7d235d03185822b @@ -0,0 +1,127 @@ +From fork-admin@xent.com Wed Sep 4 11:41:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6A10416F7B + for ; Wed, 4 Sep 2002 11:40:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 11:40:03 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g83MKvZ05458 for ; + Tue, 3 Sep 2002 23:20:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6F2942940C9; Tue, 3 Sep 2002 15:18:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from panacea.canonical.org (ns1.canonical.org [209.115.72.29]) + by xent.com (Postfix) with ESMTP id 6B789294099 for ; + Tue, 3 Sep 2002 15:17:08 -0700 (PDT) +Received: by panacea.canonical.org (Postfix, from userid 1004) id + D93F83F4EB; Tue, 3 Sep 2002 18:17:30 -0400 (EDT) +From: kragen@pobox.com (Kragen Sitaker) +To: fork@spamassassin.taint.org +Subject: asynchronous I/O (was Re: Gasp!) +Message-Id: <20020903221730.D93F83F4EB@panacea.canonical.org> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 3 Sep 2002 18:17:30 -0400 (EDT) + +Of course we've had select() since BSD 4.2 and poll() since System V +or so, and they work reasonably well for asynchronous I/O up to a +hundred or so channels, but suck after that; /dev/poll (available in +Solaris and Linux) is one approach to solving this; Linux has a way to +do essentially the same thing with real-time signals, and has for +years; and FreeBSD has kqueue. + +More details about these are at +http://www.citi.umich.edu/projects/linux-scalability/ + +None of this helps with disk I/O; most programs that need to overlap +disk I/O with computation, on either proprietary Unixes or Linux, just +use multiple threads or processes to handle the disk I/O. + +POSIX specifies a mechanism for nonblocking disk I/O that most +proprietary Unixes implement. The Linux kernel hackers are currently +rewriting Linux's entire I/O subsystem essentially from scratch to +work asynchronously, because they can easily build efficient +synchronous I/O primitives from asynchronous ones, but not the other +way around. So now Linux will support this mechanism too. + +It probably doesn't need saying for anyone who's read Beberg saying +things like "Memory management is a non-issue for anyone that has any +idea at all how the hardware functions," but he's totally off-base. +People should know by now not to take anything he says seriously, but +apparently some don't, so I'll rebut. + +Not surprisingly, the rebuttal requires many more words than the +original stupid errors. + +In detail, he wrote: +> Could it be? After 20 years without this feature UNIX finally +> catches up to Windows and has I/O that doesnt [sic] totally suck for +> nontrivial apps? No way! + +Unix acquired nonblocking I/O in the form of select() about 23 years +ago, and Solaris has had the particular aio_* calls we are discussing +for many years. Very few applications need the aio_* calls --- +essentially only high-performance RDBMS servers even benefit from them +at all, and most of those have been faking it fine for a while with +multiple threads or processes. This just provides a modicum of extra +performance. + +> OK, so they do it with signals or a flag, which is completely +> ghetto, but at least they are trying. Keep trying guys, you got the +> idea, but not the clue. + +Readers can judge who lacks the clue here. + +> The Windows I/O model does definately [sic] blow the doors off the +> UNIX one, but then they had select to point at in it's [sic] +> suckiness and anything would have been an improvement. UNIX is just +> now looking at it's [sic] I/O model and adapting to a multiprocess +> multithreaded world so it's gonna be years yet before a posix API +> comes out of it. + +Although I don't have a copy of the spec handy, I think the aio_* APIs +come from the POSIX spec IEEE Std 1003.1-1990, section 6.7.9, which is +13 years old, and which I think documented then-current practice. +They might be even older than that. + +Unix has been multiprocess since 1969, and most Unix implementations +have supported multithreading for a decade or more. + +> Bottom line is the "do stuff when something happens" model turned +> out to be right, and the UNIX "look for something to do and keep +> looking till you find it no matter how many times you have to look" +> is not really working so great anymore. + +Linux's aio_* routines can notify the process of their completion with +a "signal", a feature missing in Microsoft Windows; a "signal" causes +the immediate execution of a "signal handler" in a process. By +contrast, the Microsoft Windows mechanisms to do similar things (such +as completion ports) do not deliver a notification until the process +polls them. + +I don't think signals are a better way to do things in this case +(although I haven't written any RDBMSes myself), but you got the +technical descriptions of the two operating systems exactly backwards. +Most programs that use Linux real-time signals for asynchronous +network I/O, in fact, block the signal in question and poll the signal +queue in a very Windowsish way, using sigtimedwait() or sigwaitinfo(). + +-- + Kragen Sitaker +Edsger Wybe Dijkstra died in August of 2002. This is a terrible loss after +which the world will never be the same. +http://www.xent.com/pipermail/fork/2002-August/013974.html + diff --git a/Ch3/datasets/spam/easy_ham/00415.62ff4ec7f1c4aa5e5ff0d1165892c0bd b/Ch3/datasets/spam/easy_ham/00415.62ff4ec7f1c4aa5e5ff0d1165892c0bd new file mode 100644 index 000000000..5f79a63fa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00415.62ff4ec7f1c4aa5e5ff0d1165892c0bd @@ -0,0 +1,49 @@ +From fork-admin@xent.com Wed Sep 4 11:41:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 47DE916F7C + for ; Wed, 4 Sep 2002 11:40:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 11:40:06 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g842OvZ16287 for ; + Wed, 4 Sep 2002 03:24:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BC64A2941C9; Tue, 3 Sep 2002 19:22:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id 6022F294099 for ; + Tue, 3 Sep 2002 19:21:23 -0700 (PDT) +Received: (qmail 13308 invoked by uid 1111); 4 Sep 2002 02:23:46 -0000 +From: "Adam L. Beberg" +To: +Subject: Re: Electric car an Edsel... +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 3 Sep 2002 19:23:46 -0700 (PDT) + +Ah, THIS is the car i've seen on discovery channel, but url via a lurker. + +http://arivettracing.com/battery.html + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00416.ea1ffcacd8dd84214e745d86a5013115 b/Ch3/datasets/spam/easy_ham/00416.ea1ffcacd8dd84214e745d86a5013115 new file mode 100644 index 000000000..7f1520144 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00416.ea1ffcacd8dd84214e745d86a5013115 @@ -0,0 +1,54 @@ +From fork-admin@xent.com Wed Sep 4 11:42:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E649116F7E + for ; Wed, 4 Sep 2002 11:40:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 11:40:10 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g842WvZ16398 for ; + Wed, 4 Sep 2002 03:32:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 984352941CF; Tue, 3 Sep 2002 19:30:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (unknown [63.145.31.2]) by xent.com (Postfix) + with ESMTP id 6C9A4294099 for ; Tue, 3 Sep 2002 19:29:40 + -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Wed, 04 Sep 2002 02:30:43 -08:00 +Message-Id: <3D757053.7030006@barrera.org> +From: "Joseph S. Barrera III" +Organization: Wings over the World +User-Agent: Mutt 5.00.2919.6900 DM (Nigerian Scammer Special Edition) +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: "Adam L. Beberg" +Cc: Kragen Sitaker , fork@spamassassin.taint.org +Subject: Re: asynchronous I/O (was Re: Gasp!) +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 03 Sep 2002 19:30:43 -0700 + +Adam L. Beberg wrote: +> On Tue, 3 Sep 2002, Kragen Sitaker wrote: +> [entire post included] + +Yep, he sure did. But thanks for reminding us. + + + diff --git a/Ch3/datasets/spam/easy_ham/00417.7ec0b5a250ddfd52a9b46385688f9f9c b/Ch3/datasets/spam/easy_ham/00417.7ec0b5a250ddfd52a9b46385688f9f9c new file mode 100644 index 000000000..bc84770dc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00417.7ec0b5a250ddfd52a9b46385688f9f9c @@ -0,0 +1,138 @@ +From fork-admin@xent.com Wed Sep 4 11:41:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D05D716F7D + for ; Wed, 4 Sep 2002 11:40:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 11:40:07 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g842TMZ16374 for ; + Wed, 4 Sep 2002 03:29:22 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7910E2941D0; Tue, 3 Sep 2002 19:23:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id CED692941CF for ; + Tue, 3 Sep 2002 19:22:11 -0700 (PDT) +Received: (qmail 13312 invoked by uid 1111); 4 Sep 2002 02:24:24 -0000 +From: "Adam L. Beberg" +To: Kragen Sitaker +Cc: +Subject: Re: asynchronous I/O (was Re: Gasp!) +In-Reply-To: <20020903221730.D93F83F4EB@panacea.canonical.org> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 3 Sep 2002 19:24:24 -0700 (PDT) + +On Tue, 3 Sep 2002, Kragen Sitaker wrote: + +> Of course we've had select() since BSD 4.2 and poll() since System V +> or so, and they work reasonably well for asynchronous I/O up to a +> hundred or so channels, but suck after that; /dev/poll (available in +> Solaris and Linux) is one approach to solving this; Linux has a way to +> do essentially the same thing with real-time signals, and has for +> years; and FreeBSD has kqueue. +> +> More details about these are at +> http://www.citi.umich.edu/projects/linux-scalability/ +> +> None of this helps with disk I/O; most programs that need to overlap +> disk I/O with computation, on either proprietary Unixes or Linux, just +> use multiple threads or processes to handle the disk I/O. +> +> POSIX specifies a mechanism for nonblocking disk I/O that most +> proprietary Unixes implement. The Linux kernel hackers are currently +> rewriting Linux's entire I/O subsystem essentially from scratch to +> work asynchronously, because they can easily build efficient +> synchronous I/O primitives from asynchronous ones, but not the other +> way around. So now Linux will support this mechanism too. +> +> It probably doesn't need saying for anyone who's read Beberg saying +> things like "Memory management is a non-issue for anyone that has any +> idea at all how the hardware functions," but he's totally off-base. +> People should know by now not to take anything he says seriously, but +> apparently some don't, so I'll rebut. +> +> Not surprisingly, the rebuttal requires many more words than the +> original stupid errors. +> +> In detail, he wrote: +> > Could it be? After 20 years without this feature UNIX finally +> > catches up to Windows and has I/O that doesnt [sic] totally suck for +> > nontrivial apps? No way! +> +> Unix acquired nonblocking I/O in the form of select() about 23 years +> ago, and Solaris has had the particular aio_* calls we are discussing +> for many years. Very few applications need the aio_* calls --- +> essentially only high-performance RDBMS servers even benefit from them +> at all, and most of those have been faking it fine for a while with +> multiple threads or processes. This just provides a modicum of extra +> performance. +> +> > OK, so they do it with signals or a flag, which is completely +> > ghetto, but at least they are trying. Keep trying guys, you got the +> > idea, but not the clue. +> +> Readers can judge who lacks the clue here. +> +> > The Windows I/O model does definately [sic] blow the doors off the +> > UNIX one, but then they had select to point at in it's [sic] +> > suckiness and anything would have been an improvement. UNIX is just +> > now looking at it's [sic] I/O model and adapting to a multiprocess +> > multithreaded world so it's gonna be years yet before a posix API +> > comes out of it. +> +> Although I don't have a copy of the spec handy, I think the aio_* APIs +> come from the POSIX spec IEEE Std 1003.1-1990, section 6.7.9, which is +> 13 years old, and which I think documented then-current practice. +> They might be even older than that. +> +> Unix has been multiprocess since 1969, and most Unix implementations +> have supported multithreading for a decade or more. +> +> > Bottom line is the "do stuff when something happens" model turned +> > out to be right, and the UNIX "look for something to do and keep +> > looking till you find it no matter how many times you have to look" +> > is not really working so great anymore. +> +> Linux's aio_* routines can notify the process of their completion with +> a "signal", a feature missing in Microsoft Windows; a "signal" causes +> the immediate execution of a "signal handler" in a process. By +> contrast, the Microsoft Windows mechanisms to do similar things (such +> as completion ports) do not deliver a notification until the process +> polls them. +> +> I don't think signals are a better way to do things in this case +> (although I haven't written any RDBMSes myself), but you got the +> technical descriptions of the two operating systems exactly backwards. +> Most programs that use Linux real-time signals for asynchronous +> network I/O, in fact, block the signal in question and poll the signal +> queue in a very Windowsish way, using sigtimedwait() or sigwaitinfo(). +> +> -- +> Kragen Sitaker +> Edsger Wybe Dijkstra died in August of 2002. This is a terrible loss after +> which the world will never be the same. +> http://www.xent.com/pipermail/fork/2002-August/013974.html +> + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00418.93eb266673b3731d82ce305ce6f9aef4 b/Ch3/datasets/spam/easy_ham/00418.93eb266673b3731d82ce305ce6f9aef4 new file mode 100644 index 000000000..64c5ded1d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00418.93eb266673b3731d82ce305ce6f9aef4 @@ -0,0 +1,148 @@ +From fork-admin@xent.com Wed Sep 4 11:42:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3EC1A16F76 + for ; Wed, 4 Sep 2002 11:40:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 11:40:18 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g845KvZ20808 for ; + Wed, 4 Sep 2002 06:20:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DD10829409C; Tue, 3 Sep 2002 22:18:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp6.mindspring.com (smtp6.mindspring.com + [207.69.200.110]) by xent.com (Postfix) with ESMTP id B8988294099 for + ; Tue, 3 Sep 2002 22:17:41 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + smtp6.mindspring.com with esmtp (Exim 3.33 #1) id 17mSaG-0006jX-00; + Wed, 04 Sep 2002 01:20:08 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: +From: "R. A. Hettinga" +Subject: Re: Electric car an Edsel... +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 4 Sep 2002 01:08:58 -0400 + + +--- begin forwarded text + + +From: A guy who models plasma all day... +To: "R. A. Hettinga" +Subject: Re: Electric car an Edsel... +Date: Tue, 3 Sep 2002 22:49:20 -0600 + +Bob, + +This capacitor drive idea isn't completely stupid, but neither is it well +thought out. + +Maxwell (www.maxwell.com) makes and sells high energy density capacitors, +called ultracapacitors. They deliver them in an air-cooled, voltage +regulated module that will charge to 42 V and hold 128 kilojoules -- roughly +the energy in 2 teaspoons of sugar or a bite of a donut -- and weighs 16 +kilograms. If that electrical energy could all be converted to kinetic +energy, there's enough to get the capacitor module up to about 200 mph -- in +a vacuum. + +Suppose you take the entire power density of the capacitor module -- 2.8 +kw/kg (~4 hp/kg!) -- and punch it through an electric motor. How much does +the 64 hp electric motor weigh? If it were as little as 50 kg -- and I bet +it isn't -- that capacitor and motor would have a top speed of 100 mph -- +the speed at which their energy is the 128 kJ that was initially stored +electrically in the capacitor. And it's not at all obvious that the torque +vs. speed characteristic of 42 V DC motors will support this, or how they do +it without wheels, drive train, etc. + +But if they can, they can only do it in a vacuum where there is no drag! + +On to the Lunarnationals? Or would you prefer the bite of donut? + + + + +----- Original Message ----- +From: "R. A. Hettinga" +To: "Vinnie Moscaritolo" ; "Randolph Elliott" +; ; "Duncan Goldie-Scot" +; "G. Gruff" ; + +Sent: Monday, September 02, 2002 11:15 PM +Subject: Re: Electric car an Edsel... + + +> +> --- begin forwarded text +> +> +> Status: RO +> Delivered-To: fork@spamassassin.taint.org +> From: "Adam L. Beberg" +> To: RossO +> Cc: +> Subject: Re: Electric car an Edsel... +> Sender: fork-admin@xent.com +> Date: Mon, 2 Sep 2002 21:24:47 -0700 (PDT) +> +> On 2 Sep 2002, RossO wrote: +> +> > John Waylan (who was interviewed in Wired a few years back) pulled out a +> > 14.4 second run in the quarter mile (91mph), on a battery pack that +> > hasn't been broken in yet. He expects to break his record next year +> > topping his 13.1sec/99mph run a couple of years ago. He's shooting for a +> > 12 second run. +> +> Battery pack, huh what??? +> +> You dont use batteries for a 1/4 mile run, you use capacitors. MANY times +> the energy density, and you can get the energy out fast enough. Note that +> the battery packs are fully swapped out for recharging after each run +> anyway, just like a gas dragster is refueled, so this wouldnt be cheating. +> 200 MPH should be no problem. +> +> - Adam L. "Duncan" Beberg +> http://www.mithral.com/~beberg/ +> beberg@mithral.com +> +> --- end forwarded text +> +> +> -- +> ----------------- +> R. A. Hettinga +> The Internet Bearer Underwriting Corporation +> 44 Farquhar Street, Boston, MA 02131 USA +> "... however it may deserve respect for its usefulness and antiquity, +> [predicting the end of the world] has not been found agreeable to +> experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' +> + +--- end forwarded text + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + diff --git a/Ch3/datasets/spam/easy_ham/00419.a88b7702054f8fe1ea38daf082124a6f b/Ch3/datasets/spam/easy_ham/00419.a88b7702054f8fe1ea38daf082124a6f new file mode 100644 index 000000000..3a022a6a6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00419.a88b7702054f8fe1ea38daf082124a6f @@ -0,0 +1,71 @@ +From fork-admin@xent.com Wed Sep 4 11:42:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2F2D116F7F + for ; Wed, 4 Sep 2002 11:40:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 11:40:15 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8446wZ19174 for ; + Wed, 4 Sep 2002 05:07:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1428D2941CC; Tue, 3 Sep 2002 21:04:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hall.mail.mindspring.net (hall.mail.mindspring.net + [207.69.200.60]) by xent.com (Postfix) with ESMTP id 18CEB294099 for + ; Tue, 3 Sep 2002 21:03:16 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + hall.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17mRPg-0006Ag-00; + Wed, 04 Sep 2002 00:05:09 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: +References: +To: "Russell Turpin" , fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: Re: Signers weren't angry young men (was: Java is for kiddies) +Cc: Digital Bearer Settlement List +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 3 Sep 2002 23:18:58 -0400 + +At 4:12 PM +0000 on 9/3/02, Russell Turpin wrote: + + +> Of the 56 signers of the Declaration of Independence, +> only two were in their twenties at the time. Their +> average age was forty-five. There were no teenagers. +> Fourteen were over fifty. Ben Franklin was the oldest, +> at seventy. For the most part, these were angry, +> middle-aged men. + +I think it was George Carlin who said something to the effect that young +men in general are boring, but, around fifty, men either have everything +they ever wanted, or have almost nothing of what they wanted; either of +which makes them behave quite interestingly. + +Cheers, +RAH + + +-- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"Never underestimate the power of stupid people in large groups." +--George Carlin + diff --git a/Ch3/datasets/spam/easy_ham/00420.04f6a1501e06ccfc93978982ee7ece8a b/Ch3/datasets/spam/easy_ham/00420.04f6a1501e06ccfc93978982ee7ece8a new file mode 100644 index 000000000..a89f4c50a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00420.04f6a1501e06ccfc93978982ee7ece8a @@ -0,0 +1,137 @@ +From fork-admin@xent.com Wed Sep 4 16:52:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BE41F16F22 + for ; Wed, 4 Sep 2002 16:51:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 16:51:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g84Fn1Z08711 for ; + Wed, 4 Sep 2002 16:49:02 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id EE0762940A8; Wed, 4 Sep 2002 08:46:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id 1926F294099 for ; + Wed, 4 Sep 2002 08:45:45 -0700 (PDT) +Received: (qmail 15964 invoked by uid 1111); 4 Sep 2002 15:48:11 -0000 +From: "Adam L. Beberg" +To: +Subject: EPA Stunned: Diesel Exhaust Can Cause Cancer +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 4 Sep 2002 08:48:11 -0700 (PDT) + +Glad they finally figured this one out... Note the very careful wording, so +exhaust may be beneficial to ones health as long as you have a glass a day +with some cheese. + +Interesting timing, since 16,000 truckers just lost their jobs and dont have +to worry about death from this anymore. + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + +-------- + +EPA: Diesel Exhaust Can Cause Cancer +Wed Sep 4, 3:29 AM ET +By H. JOSEF HEBERT, Associated Press Writer + +WASHINGTON (AP) - Inhaling diesel exhausts from large trucks and other +sources over time can cause cancer in humans, an Environmental Protection +Agency ( news - web sites) report concludes after a decade of study. + +The EPA finding, released Tuesday, is expected to buttress the government's +push to reduce truck tailpipe emissions by requiring cleaner-burning engines +and diesel fuel with ultra-low sulfur content. + +While acknowledging uncertainties about the long-term health effects of +exposure to diesel exhausts, the EPA report said studies involving both +animal tests and occupational exposure suggest strong evidence of a cancer +risk to humans. + +"It is reasonable to presume that the hazard extends to environmental +exposure levels" as well, the report said. "The potential human health +effects of diesel exhausts is persuasive, even though assumptions and +uncertainties are involved." + +The report mirrors conclusions made previously in documents from various +world health agencies and studies in California and is particularly +significant because the EPA is the federal agency that regulates diesel +emissions under the Clean Air Act. + +Some environmentalists have raised concerns recently that the Bush +administration might try to back away from a Clinton-era regulation that +would establish tougher requirements on emissions from large trucks and a +separate rule that virtually would eliminate sulfur from diesel fuel. + +EPA Administrator Christie Whitman repeatedly has promised to go ahead with +the tougher truck and diesel rules. Last month, with White House approval, +the EPA rebuffed attempts by some diesel engine manufacturers to postpone +the requirements, approving new penalties against manufacturers who fail to +meet an October deadline for making cleaner-burning truck engines. + +The engine rule does not affect emissions from trucks already on the road, +although the separate regulation cutting the amount of sulfur in diesel fuel +is expected to produce pollution reductions. + +The EPA's 651-page diesel health assessment did not attempt to estimate the +probability of an individual getting cancer, given certain exposure to +diesel exhaust. Such a risk assessment is commonly made by the EPA when +gauging pollution health concerns. + +But in this case, the report said, "the exposure-response data are +considered too uncertain" to produce a confident quantitative estimate of +cancer risk to an individual. + +Nevertheless, said the report, the "totality of evidence from human, animal +and other supporting studies" suggests that diesel exhaust "is likely to be +carcinogenic to humans by inhalation, and that this hazard applies to +environmental exposure." + +The report reiterated that environmental exposure to diesel exhausts poses +short-term health problems and in the long term has been shown to be a +"chronic respiratory hazard to humans" contributing to increased asthma and +other respiratory problems. In some urban areas diesel exhausts account for +as much as a quarter of the airborne microscopic soot, the report said. + +Environmentalists welcomed the study as clear evidence that pollution needs +to be curtailed not only from large trucks but also from off-road +diesel-powered vehicles. EPA spokeswoman Steffanie Bell said the agency +expects to publish a rule early next year dealing with those diesel exhaust +sources, which include farm tractors and construction equipment. + +Emily Figdor of the U.S. Public Interest Research Group, a private +environmental organization, said: "To reduce the public's exposure to +harmful diesel emissions, the Bush administration should ... fully implement +clean air standards for diesel trucks and buses and should pass equivalent +standards for diesel construction and farm equipment." + +Allen Schaeffer, executive director of the industry group Diesel Technology +Forum, said the EPA's report "focused on the past," whereas "the future is +clean diesel. Diesel trucks and buses built today are more than eight times +cleaner than just a dozen years ago." + +The report acknowledged that its findings were based on emissions levels in +the mid-1990s, but said the results continued to be valid because the slow +turnover of truck engines has kept many of these vehicles on the road. + + + diff --git a/Ch3/datasets/spam/easy_ham/00421.805fdd426ce515374b9e0b42a83a4042 b/Ch3/datasets/spam/easy_ham/00421.805fdd426ce515374b9e0b42a83a4042 new file mode 100644 index 000000000..c915459fe --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00421.805fdd426ce515374b9e0b42a83a4042 @@ -0,0 +1,105 @@ +From fork-admin@xent.com Wed Sep 4 19:01:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 483C116F49 + for ; Wed, 4 Sep 2002 18:59:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 18:59:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g84GkFZ10966 for ; + Wed, 4 Sep 2002 17:46:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2B544294271; Wed, 4 Sep 2002 09:43:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id C3A082941DD for ; Wed, + 4 Sep 2002 09:42:48 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id EC5183EE16; + Wed, 4 Sep 2002 12:48:04 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id EAB013ED4C for ; Wed, + 4 Sep 2002 12:48:04 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Kill Your Gods +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 4 Sep 2002 12:48:04 -0400 (EDT) + +Hindus mourn 'monkey god' + + +By Omer Farooq +BBC reporter in Hyderabad + +Hundreds of people have attended the funeral of a monkey which became +revered as a divine incarnation of a Hindu god in the southern Indian +state of Andhra Pradesh. + + +The monkey was quite old and both its hind legs were paralysed + +Animal rights campaigners say the monkey died of starvation and exhaustion +after being trapped in a temple for a month by over-zealous worshippers. + +The animal was cremated in Anantapur district, 400 kilometres (250 miles) +south of the state capital, Hyderabad, on Sunday. + +It had not eaten for three weeks. + +Last rites were performed by priests in the village of Timmiganipally in +the presence of hundreds of devotees who had come to believe that the +monkey was a reincarnation of the Hindu monkey god, Hanuman. + +Garlanded + +One animal rights activist said his group's efforts to save the monkey had +failed because of the blind faith of the people. + + +The monkey's death came a day after he and others tried to move the animal +out of the temple, but were prevented by villagers. + +The monkey, which was found perched on top of an idol of Hanuman a month +ago, attracted hundreds of devotees every day from surrounding villages, +as well as from the neighbouring state of Karnataka. + +Devotees showered the monkey with fruit and flowers and worshipped it +around the clock. + +'Exploited' + +Locals said they believed that Lord Hanuman was visiting the village, as +the temple had stopped daily rituals after a dispute between two groups of +residents. + +But animal rights campaigners complained that the animal was being +mistreated. + +They filed a petition in the state's High Court saying the monkey had been +forcibly confined in the temple. + +The group also alleged that people's religious feelings were being +exploited to make money. + +The court then ordered the local administration to rescue the monkey - but +villagers prevented officials from taking him for treatment in time. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00422.ac4b66f9c3390c3a98d9c8cbe75f403a b/Ch3/datasets/spam/easy_ham/00422.ac4b66f9c3390c3a98d9c8cbe75f403a new file mode 100644 index 000000000..c6142ebb7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00422.ac4b66f9c3390c3a98d9c8cbe75f403a @@ -0,0 +1,138 @@ +From fork-admin@xent.com Wed Sep 4 19:01:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A4E7C16F1E + for ; Wed, 4 Sep 2002 19:00:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 19:00:19 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g84GtxZ11326 for ; + Wed, 4 Sep 2002 17:56:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 07D262941FE; Wed, 4 Sep 2002 09:53:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from web14002.mail.yahoo.com (web14002.mail.yahoo.com + [216.136.175.93]) by xent.com (Postfix) with SMTP id B7E4A2941DD for + ; Wed, 4 Sep 2002 09:52:47 -0700 (PDT) +Message-Id: <20020904165518.58627.qmail@web14002.mail.yahoo.com> +Received: from [208.142.210.229] by web14002.mail.yahoo.com via HTTP; + Wed, 04 Sep 2002 09:55:18 PDT +From: sateesh narahari +Subject: Re: Kill Your Gods +To: Tom , fork@spamassassin.taint.org +In-Reply-To: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 4 Sep 2002 09:55:18 -0700 (PDT) + +Hindus got 3 billion gods..... So, losing one is no +big deal, really.... + +Its just sick that they killed an innocent animal, +which doesn't even know the concept of "God". + +Sateesh +--- Tom wrote: +> Hindus mourn 'monkey god' +> +> +> By Omer Farooq +> BBC reporter in Hyderabad +> +> Hundreds of people have attended the funeral of a +> monkey which became +> revered as a divine incarnation of a Hindu god in +> the southern Indian +> state of Andhra Pradesh. +> +> +> The monkey was quite old and both its hind legs were +> paralysed +> +> Animal rights campaigners say the monkey died of +> starvation and exhaustion +> after being trapped in a temple for a month by +> over-zealous worshippers. +> +> The animal was cremated in Anantapur district, 400 +> kilometres (250 miles) +> south of the state capital, Hyderabad, on Sunday. +> +> It had not eaten for three weeks. +> +> Last rites were performed by priests in the village +> of Timmiganipally in +> the presence of hundreds of devotees who had come to +> believe that the +> monkey was a reincarnation of the Hindu monkey god, +> Hanuman. +> +> Garlanded +> +> One animal rights activist said his group's efforts +> to save the monkey had +> failed because of the blind faith of the people. +> +> +> The monkey's death came a day after he and others +> tried to move the animal +> out of the temple, but were prevented by villagers. +> +> The monkey, which was found perched on top of an +> idol of Hanuman a month +> ago, attracted hundreds of devotees every day from +> surrounding villages, +> as well as from the neighbouring state of Karnataka. +> +> Devotees showered the monkey with fruit and flowers +> and worshipped it +> around the clock. +> +> 'Exploited' +> +> Locals said they believed that Lord Hanuman was +> visiting the village, as +> the temple had stopped daily rituals after a dispute +> between two groups of +> residents. +> +> But animal rights campaigners complained that the +> animal was being +> mistreated. +> +> They filed a petition in the state's High Court +> saying the monkey had been +> forcibly confined in the temple. +> +> The group also alleged that people's religious +> feelings were being +> exploited to make money. +> +> The court then ordered the local administration to +> rescue the monkey - but +> villagers prevented officials from taking him for +> treatment in time. +> +> +> + + +__________________________________________________ +Do You Yahoo!? +Yahoo! Finance - Get real-time stock quotes +http://finance.yahoo.com + diff --git a/Ch3/datasets/spam/easy_ham/00423.cfe8ba459149d893789505dcac7db306 b/Ch3/datasets/spam/easy_ham/00423.cfe8ba459149d893789505dcac7db306 new file mode 100644 index 000000000..a2ca45c1a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00423.cfe8ba459149d893789505dcac7db306 @@ -0,0 +1,110 @@ +From fork-admin@xent.com Wed Sep 4 19:11:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B7C6416F1F + for ; Wed, 4 Sep 2002 19:11:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 19:11:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g84I75Z13842 for ; + Wed, 4 Sep 2002 19:07:06 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 43A7B29420F; Wed, 4 Sep 2002 11:04:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx1.ucsc.edu [128.114.129.36]) by + xent.com (Postfix) with ESMTP id AE02C2941DD for ; + Wed, 4 Sep 2002 11:03:09 -0700 (PDT) +Received: from Tycho (dhcp-60-118.cse.ucsc.edu [128.114.60.118]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g84I5JT12707 for + ; Wed, 4 Sep 2002 11:05:20 -0700 (PDT) +From: "Jim Whitehead" +To: "FoRK" +Subject: CD player UI for toddlers +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 4 Sep 2002 11:03:03 -0700 + +So, like many young children, my daughter Tatum (age 21 months) *really* +likes music. She also likes to have control over her environment, and this +means she wants to be the one putting CDs into the CD player, and getting +the music playing. + +By watching Tatum, I've discovered that you can learn a lot about UI design +from watching 21-month-olds use technology. There is definitely a market +niche for a toddler-friendly CD/MP3 player. + +The CD player we have combines play and pause in a single button, but +doesn't provide *instantaneous* feedback that the button was pushed, instead +requiring you to wait until the music starts, 5-10 seconds. This is a UI +disaster. Since Tatum doesn't get feedback right away, she presses the +button again, thereby pausing the CD before it even plays. She'll only ever +get music if she presses the button an odd number of times. This happens a +surprising amount of the time, since she eventually hits the button again +when the music doesn't play. + +For toddlers, pressing play must cause the music to start immediately, +within half a second, for the toddler to get the causality and not press the +button multiple times. As well, pressing the button multiple times shouldn't +change the semantics, like an elevator button. No matter how many times you +press, the elevator still comes to that floor. The play button needs to be +the same. + +The back-hinged door mechanism feeding the CD into the player is also a UI +disaster for Tatum. Since the door hinges on the back, Tatum has to angle +CDs to put them in, and take them out. Putting CDs in isn't much of a +problem, but taking them out is. Since Tatum grabs CDs by the back edge, +that edge comes out first, hitting the lid. Tatum eventually forces and +wiggles the CD out, a process that's hard on the CD and the player (but +which hasn't yet resulted in the CD player being broken). Surprisingly, it +hasn't been a problem getting the CD hole onto the spindle -- Tatum seems to +understand this concept, and the CD load area geometry naturally guides the +CD. + +Tatum's CD player also plays tapes and has FM radio. For a toddler, this is +a mistake. Tatum doesn't understand the need to flick a switch to put the +player into a specific mode. She understands putting a CD in, and pressing +the play button. She sometimes understands the buttons for advancing a song, +but uses them erratically. As well, the radio feature has both FM mono and +FM stero, a distinction totally lost on Tatum. Tatum only understands the +binary distinction of music/no music. + +What would the ideal toddler CD player be like? It would immediately start +playing a CD after it was loaded. As soon as the CD load door was closed, it +would give some audible feedback. It would have a single large play button. +The other typical CD controls would be larger than normal, but at least half +the size of the play button, and located far away from the play button, so +there is no chance of them getting accidentally pressed on the way to play. +The play button would be a bright color that is different from the color of +the player, and different from the color of the other CD control keys. The +device would only play CDs, no other functions. The CD load area would flip +open at least 80 degrees. It should be small, approachable for a toddler. It +should be possible to repeatedly drop the player from a height of 1-2' +without affecting the player. + +- Jim + + + + diff --git a/Ch3/datasets/spam/easy_ham/00424.9975dd35a0bc8834d9ccd7dfb27ae7e6 b/Ch3/datasets/spam/easy_ham/00424.9975dd35a0bc8834d9ccd7dfb27ae7e6 new file mode 100644 index 000000000..5361ea3fd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00424.9975dd35a0bc8834d9ccd7dfb27ae7e6 @@ -0,0 +1,68 @@ +From fork-admin@xent.com Thu Sep 5 11:30:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E0B6A16F78 + for ; Thu, 5 Sep 2002 11:28:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:24 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g84In0Z15104 for ; + Wed, 4 Sep 2002 19:49:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 24D3F2941DD; Wed, 4 Sep 2002 11:46:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.datastore.ca (unknown [207.61.5.2]) by xent.com + (Postfix) with ESMTP id 243BB29410F for ; Wed, + 4 Sep 2002 11:45:43 -0700 (PDT) +Received: from maya.dyndns.org [207.61.5.143] by mail.datastore.ca + (SMTPD32-7.00) id A5AA6DD00CA; Wed, 04 Sep 2002 14:49:14 -0400 +Received: by maya.dyndns.org (Postfix, from userid 501) id 24C731C336; + Wed, 4 Sep 2002 14:47:45 -0400 (EDT) +To: "Jim Whitehead" +Cc: "FoRK" +Subject: Re: CD player UI for toddlers +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 04 Sep 2002 14:47:45 -0400 + + +Our preschoolers (2 and 4) use Winamp with a Pokemon skin. It's the +2-yr-old who figured out he could put it into a sidebar menu so all +he need do is click there to launch their favourite MP3 playlist. + +What /we/ need is a good "barely literate" email program. Years ago +the university of Hawaii had a word processor that included a +voice-assist and also would pop up menus for common completions as +words were typed; even further back there was a DOS shareware editor +that did that latter function extremely well (targetted at the +handicapped). With just those little bits of assists, maybe some +clever use of pictograms too, I bet kindergarten kids could handle +email. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00425.0ba16e840d94d629f8a3881b4e03a3ad b/Ch3/datasets/spam/easy_ham/00425.0ba16e840d94d629f8a3881b4e03a3ad new file mode 100644 index 000000000..0ca8578e4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00425.0ba16e840d94d629f8a3881b4e03a3ad @@ -0,0 +1,52 @@ +From fork-admin@xent.com Thu Sep 5 11:30:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B488816F79 + for ; Thu, 5 Sep 2002 11:28:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:25 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g84KZ2Z18149 for ; + Wed, 4 Sep 2002 21:35:02 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0F11A29413C; Wed, 4 Sep 2002 13:32:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain + (pool-162-83-146-127.ny5030.east.verizon.net [162.83.146.127]) by xent.com + (Postfix) with ESMTP id 5E6622940AA for ; Wed, + 4 Sep 2002 13:31:18 -0700 (PDT) +Received: from localhost (lgonze@localhost) by localhost.localdomain + (8.11.6/8.11.6) with ESMTP id g84KRun04845 for ; + Wed, 4 Sep 2002 16:27:56 -0400 +X-Authentication-Warning: localhost.localdomain: lgonze owned process + doing -bs +From: lucas@gonze.com +X-X-Sender: lgonze@localhost.localdomain +To: FoRK +Subject: whoa +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 4 Sep 2002 16:27:56 -0400 (EDT) + + +This just blew my mind: +http://www.earthviewer.com/ + +The detail of my neighborhood -- even my building -- is unbelievable. + + diff --git a/Ch3/datasets/spam/easy_ham/00426.dbc70af5d406b97fdf70de03697f5a5a b/Ch3/datasets/spam/easy_ham/00426.dbc70af5d406b97fdf70de03697f5a5a new file mode 100644 index 000000000..02bd5e5af --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00426.dbc70af5d406b97fdf70de03697f5a5a @@ -0,0 +1,69 @@ +From fork-admin@xent.com Thu Sep 5 11:30:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9D76316F7B + for ; Thu, 5 Sep 2002 11:28:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:28 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g850c1Z29435 for ; + Thu, 5 Sep 2002 01:38:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4FAAB294206; Wed, 4 Sep 2002 17:35:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id 683DD2940AA for ; + Wed, 4 Sep 2002 17:34:07 -0700 (PDT) +Received: (qmail 17717 invoked by uid 1111); 5 Sep 2002 00:36:34 -0000 +From: "Adam L. Beberg" +To: +Subject: Ouch... +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 4 Sep 2002 17:36:34 -0700 (PDT) + +Shouldn't a politician know not to tell the truth? Odds he's impeached by +next Monday? [ob: no-clue-how-they-remove-mayors-in-italy] + +Ouch. Ouch. Ouch. + +------------ + +Get Sexier, Keep Husbands, Mayor Tells Wives +Wed Sep 4, 9:14 AM ET + +MISSAGLIA, Italy (Reuters) - Husband's eyes wandering? Make yourself sexier. +At least that's the solution proposed by an Italian mayor -- and a woman +mayor at that. + +Wives in the northern town of Missaglia had complained to mayor Marta +Casiraghi about a young woman who sunbathed topless on her terrace. + +They complained that the men in the town of some 7,000 people were spending +too much time ogling, so they asked Casiraghi to order the woman to put her +clothes back on. + +But the mayor, far from sympathizing, told the wives to get sexy if they +wanted to keep their men. "The girl was very pretty and was soaking up some +sun. Topless sunbathing is largely tolerated and widespread nowadays. +There's nothing we can do," Casiraghi told Il Nuovo, a web-based newspaper. + +"Instead, I'd advise the wives to play their rival at her own game -- make +themselves more beautiful." + + diff --git a/Ch3/datasets/spam/easy_ham/00427.49db73be9017efca7355ee80f173a26c b/Ch3/datasets/spam/easy_ham/00427.49db73be9017efca7355ee80f173a26c new file mode 100644 index 000000000..1175e7327 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00427.49db73be9017efca7355ee80f173a26c @@ -0,0 +1,76 @@ +From fork-admin@xent.com Thu Sep 5 11:30:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1E88116F7A + for ; Thu, 5 Sep 2002 11:28:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:27 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g84MJ5Z21570 for ; + Wed, 4 Sep 2002 23:19:05 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9926D2942CC; Wed, 4 Sep 2002 15:16:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from dream.darwin.nasa.gov (betlik.darwin.nasa.gov + [198.123.160.11]) by xent.com (Postfix) with ESMTP id 679302942CA for + ; Wed, 4 Sep 2002 15:15:17 -0700 (PDT) +Received: from cse.ucsc.edu (paperweight.darwin.nasa.gov [198.123.160.27]) + by dream.darwin.nasa.gov ( -- Info omitted by ASANI Solutions, + LLC.) with ESMTP id g84MHeh28258; Wed, 4 Sep 2002 15:17:42 -0700 (PDT) +Message-Id: <3D768684.30702@cse.ucsc.edu> +From: Elias Sinderson +User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:0.9.4.1) + Gecko/20020518 Netscape6/6.2.3 +X-Accept-Language: en-us +MIME-Version: 1.0 +To: Jim Whitehead +Cc: FoRK +Subject: Re: Gecko adhesion finally sussed. +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 04 Sep 2002 15:17:40 -0700 + +Jim Whitehead wrote: + +>Great, this is half of what I'd need to become Spider Man! Now all I need to +>figure out is how to do that spider web shooting thing. +> + +Heheheh... So becomming a university professor was your second career +choice? ;-) + +Seriously though (or not, as the case may be), The Amazing Spiderman had +many other abilities to help him out. Most notable, perhaps, was his +'spidey strength' and 'spidey senses'. The strength to weight ratio of a +spider is so high that Spiderman is able to throw a bus several city +blocks with little effort. His endurance is similarly enhanced as well. + +As for the spidey senses, well they're really great, but AFAIK not +really well explained in the comic series. Spiders have multiple eyes, +ears, noses and tongues which Peter Parker did not visibly have. There +have been a few attempts to explain his heightened reflexes, from the +biological to hidden methamphetamine use, but none seem to do the spidey +sense justice... I seem to recall Spiderman being able to detect the +presence of well concealed weapons and even sense evil-doers while they +were in their street clothes. Perhaps the spidey senses are the result +of some sort of quantum entanglement? + + +Elias + + diff --git a/Ch3/datasets/spam/easy_ham/00428.f28828195802a97e84fbace0b81dbe53 b/Ch3/datasets/spam/easy_ham/00428.f28828195802a97e84fbace0b81dbe53 new file mode 100644 index 000000000..a82e6e440 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00428.f28828195802a97e84fbace0b81dbe53 @@ -0,0 +1,142 @@ +From fork-admin@xent.com Thu Sep 5 11:31:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8C39616F7D + for ; Thu, 5 Sep 2002 11:28:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:32 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g85302Z01844 for ; + Thu, 5 Sep 2002 04:00:03 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 797F429420D; Wed, 4 Sep 2002 19:57:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mis-dns.mv.timesten.com (host209.timesten.com + [63.75.22.209]) by xent.com (Postfix) with ESMTP id 226EF2940AA for + ; Wed, 4 Sep 2002 19:56:05 -0700 (PDT) +Received: from mis-exchange.mv.timesten.com (mis-exchange.mv.timesten.com + [10.10.10.8]) by mis-dns.mv.timesten.com (8.11.0/8.11.0) with ESMTP id + g852waA32721 for ; Wed, 4 Sep 2002 19:58:36 -0700 +Received: by mis-exchange.mv.timesten.com with Internet Mail Service + (5.5.2653.19) id ; Wed, 4 Sep 2002 19:58:36 -0700 +Message-Id: <80CE2C46294CD61198BA00508BADCA830FD384@mis-exchange.mv.timesten.com> +From: Sherry Listgarten +To: "'fork@spamassassin.taint.org'" +Subject: RE: Java is for kiddies +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2653.19) +Content-Type: text/plain; charset="iso-8859-1" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 4 Sep 2002 19:58:36 -0700 + + +Misc rants about finding jobs, java vs C, what makes a good programmer, etc. + + +Okay, hmm, I thought twice about this, but what the hey, jobs are hard to +come by. There's a company hiring in Mountain View, looking for a few good +hackers, no Java, no GUI, not even C++ -- just C and Linux and networking +and good old stuff like that. They just raised a wad of money and they're +looking for a few "really good programmers", says the CTO. I know him -- +very smart guy. Drives too fast, though, for what that's worth. + +Joe Bob says "check it out". I'd be happy to pass on your resume, or you can +send it straight to them. Probably won't matter if I pass it on, since I +don't know you guys anyway... + +http://www.netli.com + +-- Sherry. + +> -----Original Message----- +> From: Joseph S. Barrera III [mailto:joe@barrera.org] +> Sent: Tuesday, August 27, 2002 8:58 AM +> To: Adam L. Beberg +> Cc: fork@spamassassin.taint.org +> Subject: Re: Java is for kiddies +> +> +> Adam L. Beberg wrote: +> >>> Forwarding me stuff from a list is hardly handing me a job. +> >> +> >> I was talking about the open reqs at Kana (the company I +> work for). +> >> Oh, but programming in Java is beneath you. +> > +> > Nope just lacking years and years of it. For some silly +> reason people +> > always want things to be reliable, fast, and +> cross-platform so all my +> > employers have forced me to code in C :) +> +> C is more reliable than Java?? +> +> As for cross-platform, C exists on more platforms, but a Java program +> is much easier to move from one platform to another. So I'm not sure +> what you mean. +> +> I'm not trying to fight a language war, but I'm puzzled by the depth +> of your anti-Java hatred. +> +> > I know lots of high school +> > kiddies with plenty of Java tho, not having to teach people about +> > pointers or optimization or anything shaves years off the +> coder boot +> > time. I'll send them your way when they graduate. +> +> Pointers. So a language has to have pointers to be real? And +> references +> don't count, I gather. What's so great about pointers? Why do you +> miss them? If your doing embedded stuff, fine, yes, you need the +> performance and control over memory that C provides. Probably. +> But if your implementing tier N-1 of a tier N system, and pounding +> against a database, then Java is OFTEN a very reasonable choice. +> Especially if you want that system to run without leaking memory. +> +> Optimization. Who says you can't optimize Java? I can and have, +> and there are good tools that allow you to do it (I use OptimizeIt). +> But usually I find myself optimizing (reducing) database accesses +> instead. I sped one part of the system up by a factor of ten by +> grouping more operations into fewer transactions. +> +> But this is beside the point. If you have decent C++ experience, and +> have poked around in Java, you should be able to convince most +> employers that you can be trusted writing Java. That's what I did -- +> I mean, I joined Kana from Microsoft, and I didn't exactly write +> a lot of Java code at Microsoft. +> +> > I'm not displeased you're trying to help, just frustrated that +> > employers can demand such rediculous combinations of skills with +> > insane years of experience. +> +> I don't think I've ever interviewed at a place where I actually +> met all the prerequisites. Do you just give up when you don't? +> +> > Interview tommorow with Kodak, doing I have no idea what as the +> > recruiter isnt even sure, but cross your fingers it wont require 10 +> > years of Java and 5 years of Windows/IA-64's device driver +> experience +> > (both common requirements). +> +> I wish you best of luck, and I apologies for being a bitch. +> But God DAMN, you piss me off sometimes. My son occasionally +> displays your "can't-do" attitude and I do my damnest to +> get him to reverse course. +> +> - Joe +> +> + diff --git a/Ch3/datasets/spam/easy_ham/00429.5c83e9a65ee27155654607ee770b8142 b/Ch3/datasets/spam/easy_ham/00429.5c83e9a65ee27155654607ee770b8142 new file mode 100644 index 000000000..93a7e5df5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00429.5c83e9a65ee27155654607ee770b8142 @@ -0,0 +1,84 @@ +From fork-admin@xent.com Thu Sep 5 11:31:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 986A116F7E + for ; Thu, 5 Sep 2002 11:28:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:34 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8534vZ01961 for ; + Thu, 5 Sep 2002 04:04:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 98482294239; Wed, 4 Sep 2002 19:58:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id D286E294230 for + ; Wed, 4 Sep 2002 19:57:08 -0700 (PDT) +Received: (qmail 25374 invoked by uid 501); 5 Sep 2002 02:59:28 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 5 Sep 2002 02:59:28 -0000 +From: CDale +To: "Adam L. Beberg" +Cc: fork@spamassassin.taint.org +Subject: Re: Ouch... +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 4 Sep 2002 21:59:28 -0500 (CDT) + +Someone needs to tell the mayor about this: +http://www.cb-2000.com/ +kinkily yours, +Cindy + +On Wed, 4 Sep 2002, Adam L. Beberg wrote: + +> Shouldn't a politician know not to tell the truth? Odds he's impeached by +> next Monday? [ob: no-clue-how-they-remove-mayors-in-italy] +> +> Ouch. Ouch. Ouch. +> +> ------------ +> +> Get Sexier, Keep Husbands, Mayor Tells Wives +> Wed Sep 4, 9:14 AM ET +> +> MISSAGLIA, Italy (Reuters) - Husband's eyes wandering? Make yourself sexier. +> At least that's the solution proposed by an Italian mayor -- and a woman +> mayor at that. +> +> Wives in the northern town of Missaglia had complained to mayor Marta +> Casiraghi about a young woman who sunbathed topless on her terrace. +> +> They complained that the men in the town of some 7,000 people were spending +> too much time ogling, so they asked Casiraghi to order the woman to put her +> clothes back on. +> +> But the mayor, far from sympathizing, told the wives to get sexy if they +> wanted to keep their men. "The girl was very pretty and was soaking up some +> sun. Topless sunbathing is largely tolerated and widespread nowadays. +> There's nothing we can do," Casiraghi told Il Nuovo, a web-based newspaper. +> +> "Instead, I'd advise the wives to play their rival at her own game -- make +> themselves more beautiful." +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00430.3fc5dbd2463ea79d094b859e9d7e3465 b/Ch3/datasets/spam/easy_ham/00430.3fc5dbd2463ea79d094b859e9d7e3465 new file mode 100644 index 000000000..95f089df2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00430.3fc5dbd2463ea79d094b859e9d7e3465 @@ -0,0 +1,65 @@ +From fork-admin@xent.com Thu Sep 5 11:31:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1E5C716F7F + for ; Thu, 5 Sep 2002 11:28:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g85391Z02231 for ; + Thu, 5 Sep 2002 04:09:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 40175294230; Wed, 4 Sep 2002 20:06:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc52.attbi.com (rwcrmhc52.attbi.com [216.148.227.88]) + by xent.com (Postfix) with ESMTP id B789E2940AA for ; + Wed, 4 Sep 2002 20:05:37 -0700 (PDT) +Received: from h00e098788e1f.ne.client2.attbi.com ([24.61.143.15]) by + rwcrmhc52.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) + with ESMTP id + <20020905030809.WIJJ19514.rwcrmhc52.attbi.com@h00e098788e1f.ne.client2.attbi.com>; + Thu, 5 Sep 2002 03:08:09 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.52f) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <143118772134.20020904230741@magnesium.net> +To: Sherry Listgarten +Cc: "'fork@spamassassin.taint.org'" +Subject: Re[2]: Java is for kiddies +In-Reply-To: <80CE2C46294CD61198BA00508BADCA830FD384@mis-exchange.mv.timesten.com> +References: <80CE2C46294CD61198BA00508BADCA830FD384@mis-exchange.mv.timesten.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 4 Sep 2002 23:07:41 -0400 + + +SL> +SL> Misc rants about finding jobs, java vs C, what makes a good programmer, etc. +SL> + +SL> Okay, hmm, I thought twice about this, but what the hey, jobs are hard to +SL> come by. There's a company hiring in Mountain View, looking for a few good + + +I give Adam an hour or so to come up with an adequate number of +excuses as to why -this- job isn't worth it. :) + +GO Adam GO! + + diff --git a/Ch3/datasets/spam/easy_ham/00431.7f3adeb8cda736429bbe7ee757a07232 b/Ch3/datasets/spam/easy_ham/00431.7f3adeb8cda736429bbe7ee757a07232 new file mode 100644 index 000000000..234a67f19 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00431.7f3adeb8cda736429bbe7ee757a07232 @@ -0,0 +1,50 @@ +From fork-admin@xent.com Thu Sep 5 11:31:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 78EE616F80 + for ; Thu, 5 Sep 2002 11:28:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:38 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g853F1Z02278 for ; + Thu, 5 Sep 2002 04:15:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id CADE029422D; Wed, 4 Sep 2002 20:12:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 8DE6E2940AA for ; Wed, + 4 Sep 2002 20:11:13 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 49B613ED5B; + Wed, 4 Sep 2002 23:16:51 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 46F9A3EC0F for ; Wed, + 4 Sep 2002 23:16:51 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Adam dont job for no one, see. +In-Reply-To: <143118772134.20020904230741@magnesium.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 4 Sep 2002 23:16:51 -0400 (EDT) + + +A groys gesheft zol er hobn mit shroyre vus er hot, zol men bay im nit +fregn, un vos men fregt zol er nisht hobn, and if that aint the truth +nutin is. + + diff --git a/Ch3/datasets/spam/easy_ham/00432.039993123f40c5865c1a9831b3e32297 b/Ch3/datasets/spam/easy_ham/00432.039993123f40c5865c1a9831b3e32297 new file mode 100644 index 000000000..2830602f1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00432.039993123f40c5865c1a9831b3e32297 @@ -0,0 +1,73 @@ +From fork-admin@xent.com Thu Sep 5 11:31:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C472B16F81 + for ; Thu, 5 Sep 2002 11:28:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8548xZ03881 for ; + Thu, 5 Sep 2002 05:09:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id CB4DD29421F; Wed, 4 Sep 2002 21:06:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav16.law15.hotmail.com [64.4.22.120]) by + xent.com (Postfix) with ESMTP id 889CA2940AA for ; + Wed, 4 Sep 2002 21:05:23 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Wed, 4 Sep 2002 21:07:55 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: "FoRK" +References: +Subject: Re: CD player UI for toddlers +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 05 Sep 2002 04:07:55.0358 (UTC) FILETIME=[CFD43FE0:01C25491] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 4 Sep 2002 21:11:50 -0700 + + +----- Original Message ----- +From: "Jim Whitehead" + +> +> For toddlers, pressing play must cause the music to start immediately, +> within half a second, for the toddler to get the causality and not press +the +> button multiple times. +Or some sound indicating that the music will start real soon now. + +> As well, pressing the button multiple times shouldn't +> change the semantics, like an elevator button. No matter how many times +you +> press, the elevator still comes to that floor. The play button needs to be +> the same. +Idempotency everywhere you look... + + +> What would the ideal toddler CD player be like? It would immediately start +> playing a CD after it was loaded. +It'd be an MP3 player with solid state storage... instant on. + + + diff --git a/Ch3/datasets/spam/easy_ham/00433.881e63c5f176a80aeb5428f36bd0810e b/Ch3/datasets/spam/easy_ham/00433.881e63c5f176a80aeb5428f36bd0810e new file mode 100644 index 000000000..9165e2257 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00433.881e63c5f176a80aeb5428f36bd0810e @@ -0,0 +1,108 @@ +From fork-admin@xent.com Thu Sep 5 11:31:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 346B616F7C + for ; Thu, 5 Sep 2002 11:28:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g852Y1Z01236 for ; + Thu, 5 Sep 2002 03:34:02 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 806EB294200; Wed, 4 Sep 2002 19:31:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.datastore.ca (unknown [207.61.5.2]) by xent.com + (Postfix) with ESMTP id C5C9E2940AA for ; Wed, + 4 Sep 2002 19:30:05 -0700 (PDT) +Received: from maya.dyndns.org [207.61.5.143] by mail.datastore.ca + (SMTPD32-7.00) id A28361A001C; Wed, 04 Sep 2002 22:33:39 -0400 +Received: by maya.dyndns.org (Postfix, from userid 501) id 959DC1C336; + Wed, 4 Sep 2002 22:32:07 -0400 (EDT) +To: Elias Sinderson +Cc: Jim Whitehead , FoRK +Subject: Re: Gecko adhesion finally sussed. +References: + <3D768684.30702@cse.ucsc.edu> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 04 Sep 2002 22:32:07 -0400 + +>>>>> "E" == Elias Sinderson writes: + + E> ... The strength to weight ratio of a spider is so high + E> that Spiderman is able to throw a bus several city blocks with + E> little effort. His endurance is similarly enhanced as well. + +Could this be as simple as a modified molecular structure where the +humanoid cells are in fact exo-skeletally structured with more atoms +per cubic angstrom to achieve the distance-squared tensile strength +enhancements we find when we introduce smaller metal atoms between the +lattice packed grid of iron atoms to create steel? + +This 'steel-effect' might give bone structure and tendons dramatically +(several orders of magnitude) more tensile strength without the need +to significantly increase the weight (like magnesium-alloy or +carbon-fiber weight compared to iron, Spidey could even be way under +weight). Only increasing tensile strength could accommodate the +mobility and leverage feats since bones are actually formed from +bubbles of organic material hydrolically assisted, tensile strength +cross-sectionally would give his frame the strength to withstand the +muscular enhancement. + + E> As for the spidey senses, well they're really great, but AFAIK + E> not really well explained in the comic series. + +If the same close-packing gap-filling arachne-molecular structure +modification occurs in neural tissues, and there'd be no reason to +think that these would grow differently from bones and tendons, then +what we are seeing in spidey sense is no more than the heightened +cerebral functions due to shorter/faster/stronger synapses throughout +the entire nervous system. + +Since we know dogs and cats measure human emotions by smell, clearly +hearing the heartbeats, and other subtle clues within their normal +sensory ranges (but seem mystical to us) ... for Peter Parker, +everything from air currents on his facial-hairs to extremely subtle +hormone smells might coallesce into a general gestalt of Spidey-Sense; +don't forget that he'd acquired this ability in adolescence and thus +would lack any cultural or even pathological basis to explain the +heightened awareness to himself in anything but mystical terms. We +know from issue #1 that his collision-avoidance reflex response time +was far swifter than his cognitive awareness since he 'found' himself +already stuck to the tree when the bicycle was already past and hence +his disorientation ("You ok, Mister?") as if it was a hallucination. + +Hmmm ... it may even be physio-psychologically interesting to examine +if Peter Parker's personal quandries arose _because_ his physiological +'Spidey' infrastructure had been advanced whereas his psychological +perception of his self had not, ie, "Peter" was not "Spiderman" but +just the "driver of the bus". Only, unlike ourselves, he found his +self driving a body-vehicle not evolutionarily matched to his +cognitive time-scales. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00434.41010fa84308b599b5ca5b597185a576 b/Ch3/datasets/spam/easy_ham/00434.41010fa84308b599b5ca5b597185a576 new file mode 100644 index 000000000..0b229103a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00434.41010fa84308b599b5ca5b597185a576 @@ -0,0 +1,87 @@ +From fork-admin@xent.com Thu Sep 5 11:31:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 62B7916F72 + for ; Thu, 5 Sep 2002 11:28:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g854v0Z04855 for ; + Thu, 5 Sep 2002 05:57:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 528BA294248; Wed, 4 Sep 2002 21:54:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from relay.pair.com (relay1.pair.com [209.68.1.20]) by xent.com + (Postfix) with SMTP id A2B1E2940AA for ; Wed, + 4 Sep 2002 21:53:54 -0700 (PDT) +Received: (qmail 69458 invoked from network); 5 Sep 2002 04:56:26 -0000 +Received: from adsl-63-196-1-72.dsl.snfc21.pacbell.net (HELO golden) + (63.196.1.72) by relay1.pair.com with SMTP; 5 Sep 2002 04:56:26 -0000 +X-Pair-Authenticated: 63.196.1.72 +Message-Id: <02ff01c25498$9695d840$640a000a@golden> +From: "Gordon Mohr" +To: "FoRK" +References: + +Subject: Re: CD player UI for toddlers +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 4 Sep 2002 21:56:24 -0700 + +Mr Fork writes: + Jim Whitehead writes: +> > For toddlers, pressing play must cause the music to start immediately, +> > within half a second, for the toddler to get the causality and not press +> the +> > button multiple times. +> Or some sound indicating that the music will start real soon now. + +A tonal countdown would be nice. + +> > What would the ideal toddler CD player be like? It would immediately start +> > playing a CD after it was loaded. +> It'd be an MP3 player with solid state storage... instant on. + +Hmm. Seems like every CD player should include the +capability to rip, encode, and cache the last few CDs +inserted. + +Playback would then never need to face seek delays... +after the initial ripping, the only use of the laser +pickup would be recognizing which CD is inserted -- +which might be doable faster than a seek-and-start-at- +first-track operation. + +You could also take the CD out while it is "playing". + +Hmm. If the CD is still in the cache, maybe you don't +even have to insert it. Or choose it from a step-through +UI. Instead, you just wave it at an electronic eye of +some sort... and the player recognizes it from the +silkscreening. Kids would like that. "Play this," they'd +say, facing the CD at the player, and the player would +start immediately. + +- Gordon + + + diff --git a/Ch3/datasets/spam/easy_ham/00435.01f1329e5314b30b44b36c20a98ed846 b/Ch3/datasets/spam/easy_ham/00435.01f1329e5314b30b44b36c20a98ed846 new file mode 100644 index 000000000..998e15437 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00435.01f1329e5314b30b44b36c20a98ed846 @@ -0,0 +1,57 @@ +From fork-admin@xent.com Thu Sep 5 11:31:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9117416F1E + for ; Thu, 5 Sep 2002 11:28:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g85531Z04930 for ; + Thu, 5 Sep 2002 06:03:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9D680294274; Wed, 4 Sep 2002 22:00:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 11AFB2940AA for ; Wed, + 4 Sep 2002 21:59:05 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 6E3123ED52; + Thu, 5 Sep 2002 01:04:43 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 6C9353ED4C; Thu, 5 Sep 2002 01:04:43 -0400 (EDT) +From: Tom +To: Gordon Mohr +Cc: FoRK +Subject: Re: CD player UI for toddlers +In-Reply-To: <02ff01c25498$9695d840$640a000a@golden> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 01:04:43 -0400 (EDT) + +On Wed, 4 Sep 2002, Gordon Mohr wrote: + +--]Hmm. Seems like every CD player should include the +--]capability to rip, encode, and cache the last few CDs +--]inserted. + +There are companies doing just that, but given the current state of the +DRm sceen and the litigiouness of the RIAA, who wants to go down like +circus seals? + + + + diff --git a/Ch3/datasets/spam/easy_ham/00436.90165e25df2411e4bef93391f57d2257 b/Ch3/datasets/spam/easy_ham/00436.90165e25df2411e4bef93391f57d2257 new file mode 100644 index 000000000..93b2efa6a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00436.90165e25df2411e4bef93391f57d2257 @@ -0,0 +1,72 @@ +From fork-admin@xent.com Thu Sep 5 11:31:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3BC4F16F82 + for ; Thu, 5 Sep 2002 11:28:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g854d1Z04493 for ; + Thu, 5 Sep 2002 05:39:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1EC3E294241; Wed, 4 Sep 2002 21:36:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 8130C2940AA for ; Wed, + 4 Sep 2002 21:35:46 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id A49DC3EDF7; + Thu, 5 Sep 2002 00:41:24 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id A33413EDAD; Thu, 5 Sep 2002 00:41:24 -0400 (EDT) +From: Tom +To: "Mr. FoRK" +Cc: FoRK +Subject: Re: CD player UI for toddlers +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 00:41:24 -0400 (EDT) + +On Wed, 4 Sep 2002, Mr. FoRK wrote: +--]It'd be an MP3 player with solid state storage... instant on. + + +Getting new media on is a bit out of the reach of the kindala. With a CD +solution you hand em a disc and in it goes. + +Tradeoffs abound. + +Heather got a CD player when she was 5. Even though it was a crappy +handmedown it worked great other than the batterys poping out..bad bad ui +there. Her next one was a store bought. Its an all Audio player, no mp3 +decoders for her yet. I wanted to do the bottom line Volt but momala put +the kabash on anything costing over 30 bucks. heck I had to scrounge ebay +to get her a palm m100 for about 25 bucks. + +The only hitch is new music. Upshot is we spend time going over usenet +listing togther:)- + +Its a happy family. + +Now for Benjamin, yea id love to have something like the amazingly cool +Fisher Price My First (cd, casset, vasectomy, dirtybomb) products. Perhaps +the My First Cd might work...time to let ebay do the walking. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00437.a1f4bc09ef8406e572438adeb849d31c b/Ch3/datasets/spam/easy_ham/00437.a1f4bc09ef8406e572438adeb849d31c new file mode 100644 index 000000000..e6b0fa9dd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00437.a1f4bc09ef8406e572438adeb849d31c @@ -0,0 +1,64 @@ +From fork-admin@xent.com Thu Sep 5 11:31:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9AE3216F56 + for ; Thu, 5 Sep 2002 11:28:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g857iEZ09117 for ; + Thu, 5 Sep 2002 08:44:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B1E99294233; Thu, 5 Sep 2002 00:38:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain + (dsl-208-151-246-47.dsl.easystreet.com [208.151.246.47]) by xent.com + (Postfix) with ESMTP id 92FAB294221 for ; Thu, + 5 Sep 2002 00:37:34 -0700 (PDT) +Received: (from karl@localhost) by localhost.localdomain (8.11.6/8.11.6) + id g857qCu12404; Thu, 5 Sep 2002 00:52:12 -0700 +X-Authentication-Warning: localhost.localdomain: karl set sender to + kra@monkey.org using -f +To: "Jim Whitehead" +Cc: "FoRK" +Subject: Re: CD player UI for toddlers +References: +From: Karl Anderson +Organization: Ape Mgt. +In-Reply-To: "Jim Whitehead"'s message of "Wed, 4 Sep 2002 11:03:03 -0700" +Message-Id: +User-Agent: Gnus/5.0802 (Gnus v5.8.2) Emacs/20.7 +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 05 Sep 2002 00:52:12 -0700 + +"Jim Whitehead" writes: + +> The CD player we have combines play and pause in a single button, but +> doesn't provide *instantaneous* feedback that the button was pushed, instead +> requiring you to wait until the music starts, 5-10 seconds. This is a UI +> disaster. Since Tatum doesn't get feedback right away, she presses the +> button again, thereby pausing the CD before it even plays. She'll only ever +> get music if she presses the button an odd number of times. This happens a +> surprising amount of the time, since she eventually hits the button again +> when the music doesn't play. + +Nice to hear that somebody else does this too. + +-- +Karl Anderson kra@monkey.org http://www.monkey.org/~kra/ + diff --git a/Ch3/datasets/spam/easy_ham/00438.e56e66c54e734033b4f014a98615eeb0 b/Ch3/datasets/spam/easy_ham/00438.e56e66c54e734033b4f014a98615eeb0 new file mode 100644 index 000000000..9d6b1394c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00438.e56e66c54e734033b4f014a98615eeb0 @@ -0,0 +1,55 @@ +From fork-admin@xent.com Thu Sep 5 11:31:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B103316F22 + for ; Thu, 5 Sep 2002 11:28:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:53 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g859B1Z12257 for ; + Thu, 5 Sep 2002 10:11:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6A358294221; Thu, 5 Sep 2002 02:08:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 3012B2940AA for + ; Thu, 5 Sep 2002 02:07:57 -0700 (PDT) +Received: (qmail 31095 invoked by uid 508); 5 Sep 2002 09:09:56 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.112) by + venus.phpwebhosting.com with SMTP; 5 Sep 2002 09:09:56 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8599qg28673; Thu, 5 Sep 2002 11:09:52 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: Tom +Cc: +Subject: Re: Adam dont job for no one, see. +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 11:09:52 +0200 (CEST) + +On Wed, 4 Sep 2002, Tom wrote: + +> A groys gesheft zol er hobn mit shroyre vus er hot, zol men bay im nit +> fregn, un vos men fregt zol er nisht hobn, and if that aint the truth +> nutin is. + +A nice curse. Don't get "shroyre", though. + + diff --git a/Ch3/datasets/spam/easy_ham/00439.982a2ff6189badfe70c2fe3c972466a2 b/Ch3/datasets/spam/easy_ham/00439.982a2ff6189badfe70c2fe3c972466a2 new file mode 100644 index 000000000..3125befcf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00439.982a2ff6189badfe70c2fe3c972466a2 @@ -0,0 +1,75 @@ +From fork-admin@xent.com Thu Sep 5 11:31:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 02A0716F21 + for ; Thu, 5 Sep 2002 11:28:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:28:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g857d0Z09055 for ; + Thu, 5 Sep 2002 08:39:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 353312940DF; Thu, 5 Sep 2002 00:36:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain + (dsl-208-151-246-47.dsl.easystreet.com [208.151.246.47]) by xent.com + (Postfix) with ESMTP id 4F30B2940AA for ; Thu, + 5 Sep 2002 00:35:33 -0700 (PDT) +Received: (from karl@localhost) by localhost.localdomain (8.11.6/8.11.6) + id g857oAO12400; Thu, 5 Sep 2002 00:50:10 -0700 +X-Authentication-Warning: localhost.localdomain: karl set sender to + kra@monkey.org using -f +To: bitbitch@magnesium.net +Cc: "'fork@spamassassin.taint.org'" +Subject: Re: Re[2]: Java is for kiddies +References: <80CE2C46294CD61198BA00508BADCA830FD384@mis-exchange.mv.timesten.com> + <143118772134.20020904230741@magnesium.net> +From: Karl Anderson +Organization: Ape Mgt. +In-Reply-To: bitbitch@magnesium.net's message of + "Wed, 4 Sep 2002 23:07:41 -0400" +Message-Id: +User-Agent: Gnus/5.0802 (Gnus v5.8.2) Emacs/20.7 +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 05 Sep 2002 00:50:10 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g857d0Z09055 + +bitbitch@magnesium.net writes: + +> SL> +> SL> Misc rants about finding jobs, java vs C, what makes a good programmer, etc. +> SL> +> +> SL> Okay, hmm, I thought twice about this, but what the hey, jobs are hard to +> SL> come by. There's a company hiring in Mountain View, looking for a few good +> +> +> I give Adam an hour or so to come up with an adequate number of +> excuses as to why -this- job isn't worth it. :) + +http://www.netli.com/careers/index.htm + +>* Along with your resume, please answer this question: What does this “C” statement do? #define XY(s, m) (&((s *)0)->m) + +Besides provide job security? + +-- +Karl Anderson kra@monkey.org http://www.monkey.org/~kra/ + diff --git a/Ch3/datasets/spam/easy_ham/00440.02086b5f064e33a48c34183441934bd3 b/Ch3/datasets/spam/easy_ham/00440.02086b5f064e33a48c34183441934bd3 new file mode 100644 index 000000000..5b7e39af5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00440.02086b5f064e33a48c34183441934bd3 @@ -0,0 +1,71 @@ +From fork-admin@xent.com Thu Sep 5 17:23:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 59B7A16F69 + for ; Thu, 5 Sep 2002 17:22:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 17:22:01 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g85Ds1Z22871 for ; + Thu, 5 Sep 2002 14:54:02 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4BB8329424F; Thu, 5 Sep 2002 06:51:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (oe57.law12.hotmail.com [64.4.18.192]) by + xent.com (Postfix) with ESMTP id 7ED7A2940AA for ; + Thu, 5 Sep 2002 06:50:01 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Thu, 5 Sep 2002 06:52:35 -0700 +X-Originating-Ip: [66.92.145.79] +Reply-To: "Bill Kearney" +From: "Bill Kearney" +To: +References: <20020905132642.29383.47386.Mailman@lair.xent.com> +Subject: Re: CD player UI for toddlers +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4807.1700 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Message-Id: +X-Originalarrivaltime: 05 Sep 2002 13:52:35.0281 (UTC) FILETIME=[7D17B410:01C254E3] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 09:52:33 -0400 + +> Now for Benjamin, yea id love to have something like the amazingly cool +> Fisher Price My First (cd, casset, vasectomy, dirtybomb) products. Perhaps +> the My First Cd might work...time to let ebay do the walking. + +Sony makes such a line of products. + +My father was legendary for his abilty to break things. His 'thumbs of death' +would rival anything a toddler could do to devices. After countless numbers of +Walkman devices having their lids broken or buttons pressed into oblivion I +found the Sony devices. I got him a "My First Sony" (be afraid of the +marketing) CD player. It was /fire engine red/ but was completely +indestructible. I hacked a headphone jack into it and gave it to him. He +complained of it's looks but used it nonetheless. I also gave him a pack of +headphones as there's no such things indestuctible headphones that aren't +obscenely bulky. + +Now that we're riding up the curve of an ever increasing geezer population, how +soon before device makers get wise? Not to be morbid, but would the marketing +be "My Last Sony"? + +-Bill Kearney + diff --git a/Ch3/datasets/spam/easy_ham/00441.d98a50dfe00c17a9d864f859480617e2 b/Ch3/datasets/spam/easy_ham/00441.d98a50dfe00c17a9d864f859480617e2 new file mode 100644 index 000000000..09833c096 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00441.d98a50dfe00c17a9d864f859480617e2 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Thu Sep 5 17:23:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 770FD16F70 + for ; Thu, 5 Sep 2002 17:22:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 17:22:04 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g85EoEZ24987 for ; + Thu, 5 Sep 2002 15:50:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 599BB294276; Thu, 5 Sep 2002 07:47:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain + (pool-162-83-146-23.ny5030.east.verizon.net [162.83.146.23]) by xent.com + (Postfix) with ESMTP id 62AE52940AA for ; Thu, + 5 Sep 2002 07:46:41 -0700 (PDT) +Received: from localhost (lgonze@localhost) by localhost.localdomain + (8.11.6/8.11.6) with ESMTP id g85Eh2j06377; Thu, 5 Sep 2002 10:43:02 -0400 +X-Authentication-Warning: localhost.localdomain: lgonze owned process + doing -bs +From: Lucas Gonze +X-X-Sender: lgonze@localhost.localdomain +To: Eirikur Hallgrimsson +Cc: FoRK +Subject: Re: Ouch... +In-Reply-To: <200209050922.11995.eh@mad.scientist.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 10:43:02 -0400 (EDT) + +Eirikur said: +> This incident is an interesting microcosm of how society and law develop. +> The women of this town are attempting to regulate competition. The social +> standards mechanisms (I expect that shame has already been tried) have +> failed, so legal is next. + +The point could also be to hassle the sunbather for reasons not given in +the story. The sunbather has probably pissed off the complainers in other +ways, too. + +Law and society are wholeheartedly trivial. Big fuzzy concepts like +"sluts vs. moms" are convenient vehicles for petty disputes as often as +not. + +- Lucas + + + diff --git a/Ch3/datasets/spam/easy_ham/00442.d35b7a477107b2e6bcf47f07eca41fa6 b/Ch3/datasets/spam/easy_ham/00442.d35b7a477107b2e6bcf47f07eca41fa6 new file mode 100644 index 000000000..d34c23688 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00442.d35b7a477107b2e6bcf47f07eca41fa6 @@ -0,0 +1,92 @@ +From fork-admin@xent.com Thu Sep 5 17:23:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E4F9C16F6F + for ; Thu, 5 Sep 2002 17:22:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 17:22:02 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g85Eh1Z24688 for ; + Thu, 5 Sep 2002 15:43:02 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 38C7D29424A; Thu, 5 Sep 2002 07:40:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id C53832940AA for ; + Thu, 5 Sep 2002 07:39:04 -0700 (PDT) +Received: from sashimi (dmz-firewall [206.199.198.4]) by Boron.MeepZor.Com + (8.11.6/8.11.6) with SMTP id g85EfYE13663 for ; + Thu, 5 Sep 2002 10:41:34 -0400 +From: "Bill Stoddard" +To: "Fork@Xent.Com" +Subject: RE: Re[2]: Java is for kiddies +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 8bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 10:40:04 -0400 + + + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of Karl +> Anderson +> Sent: Thursday, September 05, 2002 3:50 AM +> To: bitbitch@magnesium.net +> Cc: 'fork@spamassassin.taint.org' +> Subject: Re: Re[2]: Java is for kiddies +> +> +> bitbitch@magnesium.net writes: +> +> > SL> +> > SL> Misc rants about finding jobs, java vs C, what makes a good +> programmer, etc. +> > SL> +> > +> > SL> Okay, hmm, I thought twice about this, but what the hey, +> jobs are hard to +> > SL> come by. There's a company hiring in Mountain View, looking +> for a few good +> > +> > +> > I give Adam an hour or so to come up with an adequate number of +> > excuses as to why -this- job isn't worth it. :) +> +> http://www.netli.com/careers/index.htm +> +> >* Along with your resume, please answer this question: What does +> this C statement do? #define XY(s, m) (&((s *)0)->m) +> +> Besides provide job security? + +This is more useful... + +#define CONTAINING_RECORD(address, type, field) ((type *)( \ + (PCHAR)(address) - \ + (PCHAR)(&((type +*)0)->field))) + +Bill + + diff --git a/Ch3/datasets/spam/easy_ham/00443.cbff6c2a1679fe0ffa99c07c61c123ae b/Ch3/datasets/spam/easy_ham/00443.cbff6c2a1679fe0ffa99c07c61c123ae new file mode 100644 index 000000000..e8390c2f4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00443.cbff6c2a1679fe0ffa99c07c61c123ae @@ -0,0 +1,122 @@ +From fork-admin@xent.com Fri Sep 6 11:41:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1859C16F1B + for ; Fri, 6 Sep 2002 11:39:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:19 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868GaW25080 for + ; Fri, 6 Sep 2002 09:16:37 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id IAA20644 for ; Fri, 6 Sep 2002 08:43:30 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DACCF29427B; Fri, 6 Sep 2002 00:40:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 2EFA029409F for + ; Fri, 6 Sep 2002 00:39:12 -0700 (PDT) +Received: (qmail 12774 invoked by uid 501); 6 Sep 2002 07:41:48 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 6 Sep 2002 07:41:48 -0000 +From: CDale +To: bitbitch@magnesium.net +Cc: "Adam L. Beberg" , +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: <155207191859.20020905234116@magnesium.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 02:41:48 -0500 (CDT) + +I dunno, BB. Women who like to be thought of this way should have the +right to choose to be treated this way. Men too... ahem. (: My boy +cleans, washes clothes, cooks, fixes stuff, etc, and works the same number +of hours I do, sometimes more, if he has to catch up with me. (: I +close him because he is industrious and creative, and because he +unfailingly makes my bed the minute I get out of it. And boy #2 will be +here soon to help boy #1 with other things such as pedicures, backrubs, +and sure, fucking. LOL! (along with the aforementioned "chores") Adam can +have his cake and eat it too, if he can only find the right girl who has +the same beliefs about gender roles that he has. Of course, he has NO +clue where to look, so we will be constantly laughing at him while he +stumbles around in the dark. +Cindy +P.S. the numbers do not in any way indicate importance or favor -- only +the order in which they move into my house. -smiles at chris- +P.S. #2. I'm moving. Going to New Orleans. Can't handle any more cab +driving. The summer sucked here on the MS Gulf Coast, instead of rocking +like it normally does. Wish me luck. I'm going to look for another +computer job. Le Sigh. (: + +On Thu, 5 Sep 2002 bitbitch@magnesium.net wrote: + +> Hello Adam, +> +> Thursday, September 05, 2002, 11:33:18 PM, you wrote: +> +> +> ALB> So, you're saying that product bundling works? Good point. +> +> Sometimes I wish I was still in CA. You deserve a good beating every +> so often... (anyone else want to do the honors?) +> +> ALB> And how is this any different from "normal" marriage exactly? Other then +> ALB> that the woman not only gets a man, but one in a country where both she and +> ALB> her offspring will have actual opportunities? Oh and the lack of +> ALB> "de-feminized, over-sized, self-centered, mercenary-minded" choices? +> +> Mmkay. For the nth time Adam, we don't live in the land of +> Adam-fantasy. Women actually are allowed to do things productive, +> independent and entirely free of their male counterparts. They aren't +> forced to cook and clean and merely be sexual vessels. Sometimes, +> and this will come as a shock to you, no doubt, men and women even +> find -love- (which is the crucial distinction between this system) and +> they marry one another for the satisfaction of being together. I +> know, far-fetched and idealistically crazy as it is, but such things +> do happen. I can guarantee you, if my mother was approached by my +> father, and 25 years ago, he commented on her cleaning ability as a +> motivator for marrying her, we would not be having this conversation +> now. +> +> If guys still have silly antequated ideas about 'women's role' then +> their opportunities for finding women _will_ be scarce. Again, these +> situations are great, provided everyone is aware that the relationship +> is a contractual one -- he wants a maid, a dog and a prostitute he +> doesn't have to pay, and she wants a country that isn't impoverished +> and teeming with AIDS. A contract, versus a true love-interest +> marriage. +> +> Egh. I really need to stop analyzing your posts to this extent. I +> blame law school and my cat. +> +> -BB +> +> ALB> - Adam L. "Duncan" Beberg +> ALB> http://www.mithral.com/~beberg/ +> ALB> beberg@mithral.com +> +> +> +> +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00444.eca3cc749e5630f73f2243f1f35563e7 b/Ch3/datasets/spam/easy_ham/00444.eca3cc749e5630f73f2243f1f35563e7 new file mode 100644 index 000000000..ee5f4d431 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00444.eca3cc749e5630f73f2243f1f35563e7 @@ -0,0 +1,83 @@ +From fork-admin@xent.com Fri Sep 6 11:41:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A94F516F6A + for ; Fri, 6 Sep 2002 11:39:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:24 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868GQW25062 for + ; Fri, 6 Sep 2002 09:16:27 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id IAA20662 for ; Fri, 6 Sep 2002 08:48:27 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 99094294282; Fri, 6 Sep 2002 00:42:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 7A103294280 for + ; Fri, 6 Sep 2002 00:41:32 -0700 (PDT) +Received: (qmail 13057 invoked by uid 501); 6 Sep 2002 07:44:06 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 6 Sep 2002 07:44:06 -0000 +From: CDale +To: "Adam L. Beberg" +Cc: bitbitch@magnesium.net, +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 02:44:06 -0500 (CDT) + +It's a fair trade, IMO. Same for some mid-east bloke who's dying to marry +American so he can start his own business. But BB is right. When the +thrill is gone, she should take his shit. LOL +CindyDrinking + +On Thu, 5 Sep 2002, Adam L. Beberg wrote: + +> On Thu, 5 Sep 2002 bitbitch@magnesium.net wrote: +> +> > Again, these situations are great, provided everyone is aware that the +> > relationship is a contractual one -- he wants a maid, a dog and a +> > prostitute he doesn't have to pay, and she wants a country that isn't +> > impoverished and teeming with AIDS. +> +> You assume that they just match people up and marry them off, and neither is +> attracted to the other, which is not the case. Even this has arranged +> marrage beat by a long way. +> +> Males gets: A wife for a while, and if they actually like each other, for a +> long time. +> Female gets: Into Britan, out of a country with no real rights for women, no +> opportunities for her or her children, out of the polution, AIDS, and an +> uncountable number of scary tropical diseases. Not to mention in most cases +> living conditions that us spoiled Americans cannot even comprehend. +> +> Yea, the women is definately getting tha bad end of the deal here. +> +> You're so easy to taunt :) +> +> - Adam L. "Duncan" Beberg +> http://www.mithral.com/~beberg/ +> beberg@mithral.com +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00445.45f666c21ff201e070e34c0ddc33dbe0 b/Ch3/datasets/spam/easy_ham/00445.45f666c21ff201e070e34c0ddc33dbe0 new file mode 100644 index 000000000..7c24356d0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00445.45f666c21ff201e070e34c0ddc33dbe0 @@ -0,0 +1,48 @@ +From fork-admin@xent.com Fri Sep 6 11:41:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9356016F6B + for ; Fri, 6 Sep 2002 11:39:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:26 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g868ORW25414 for ; + Fri, 6 Sep 2002 09:24:32 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 049C229410C; Fri, 6 Sep 2002 00:58:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id C651029409F for + ; Fri, 6 Sep 2002 00:57:46 -0700 (PDT) +Received: (qmail 15153 invoked by uid 501); 6 Sep 2002 08:00:13 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 6 Sep 2002 08:00:13 -0000 +From: CDale +To: fork@spamassassin.taint.org +Subject: EFnet #fork +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 03:00:13 -0500 (CDT) + +Someone has taken it. Mostly newtel users. I think we can take the. +C + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00446.8305adb883b4b3721b4c9e541d5017f7 b/Ch3/datasets/spam/easy_ham/00446.8305adb883b4b3721b4c9e541d5017f7 new file mode 100644 index 000000000..3b68f4ea0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00446.8305adb883b4b3721b4c9e541d5017f7 @@ -0,0 +1,56 @@ +From fork-admin@xent.com Fri Sep 6 11:41:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 871DF16F6C + for ; Fri, 6 Sep 2002 11:39:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:30 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868U5W25638 for + ; Fri, 6 Sep 2002 09:30:32 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id JAA20751 for ; Fri, 6 Sep 2002 09:30:24 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C7045294283; Fri, 6 Sep 2002 01:27:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from panacea.canonical.org (ns1.canonical.org [209.115.72.29]) + by xent.com (Postfix) with ESMTP id 1F2C629427E for ; + Fri, 6 Sep 2002 01:26:10 -0700 (PDT) +Received: by panacea.canonical.org (Postfix, from userid 1004) id + DDBB83F4EB; Fri, 6 Sep 2002 04:26:37 -0400 (EDT) +From: kragen@pobox.com (Kragen Sitaker) +To: fork@spamassassin.taint.org +Subject: Re: Ouch... [Bebergflame] +Message-Id: <20020906082637.DDBB83F4EB@panacea.canonical.org> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 04:26:37 -0400 (EDT) + +Adam Beberg writes: +> Shouldn't a politician know not to tell the truth? Odds he's impeached by + +As the article you forwarded explained in the second line of text, +this politician is a woman. + +> next Monday? [ob: no-clue-how-they-remove-mayors-in-italy] + +ob: no-clue-full-stop, as in nearly all Adam Beberg posts. + +-- + Kragen Sitaker +Edsger Wybe Dijkstra died in August of 2002. The world has lost a great +man. See http://advogato.org/person/raph/diary.html?start=252 and +http://www.kode-fu.com/geek/2002_08_04_archive.shtml for details. + diff --git a/Ch3/datasets/spam/easy_ham/00447.decc7752d5a6bc685e47b094f76bb2c1 b/Ch3/datasets/spam/easy_ham/00447.decc7752d5a6bc685e47b094f76bb2c1 new file mode 100644 index 000000000..7369f3767 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00447.decc7752d5a6bc685e47b094f76bb2c1 @@ -0,0 +1,70 @@ +From fork-admin@xent.com Fri Sep 6 11:41:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6500616F6D + for ; Fri, 6 Sep 2002 11:39:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:32 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868VuW25829 for + ; Fri, 6 Sep 2002 09:32:00 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id FAA20207 for ; Fri, 6 Sep 2002 05:18:24 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DEADF2940A1; Thu, 5 Sep 2002 21:15:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id C0E2929409F for ; + Thu, 5 Sep 2002 21:14:19 -0700 (PDT) +Received: (qmail 23553 invoked by uid 1111); 6 Sep 2002 04:16:51 -0000 +From: "Adam L. Beberg" +To: +Cc: +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: <155207191859.20020905234116@magnesium.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 21:16:51 -0700 (PDT) + +On Thu, 5 Sep 2002 bitbitch@magnesium.net wrote: + +> Again, these situations are great, provided everyone is aware that the +> relationship is a contractual one -- he wants a maid, a dog and a +> prostitute he doesn't have to pay, and she wants a country that isn't +> impoverished and teeming with AIDS. + +You assume that they just match people up and marry them off, and neither is +attracted to the other, which is not the case. Even this has arranged +marrage beat by a long way. + +Males gets: A wife for a while, and if they actually like each other, for a +long time. +Female gets: Into Britan, out of a country with no real rights for women, no +opportunities for her or her children, out of the polution, AIDS, and an +uncountable number of scary tropical diseases. Not to mention in most cases +living conditions that us spoiled Americans cannot even comprehend. + +Yea, the women is definately getting tha bad end of the deal here. + +You're so easy to taunt :) + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00448.18e06f65c923e685fb4f72d90962c217 b/Ch3/datasets/spam/easy_ham/00448.18e06f65c923e685fb4f72d90962c217 new file mode 100644 index 000000000..8d0cadc72 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00448.18e06f65c923e685fb4f72d90962c217 @@ -0,0 +1,125 @@ +From fork-admin@xent.com Fri Sep 6 11:41:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E8CAD16F6F + for ; Fri, 6 Sep 2002 11:39:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g868XVW25919 for ; + Fri, 6 Sep 2002 09:33:31 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 429D3294289; Fri, 6 Sep 2002 01:27:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from panacea.canonical.org (ns1.canonical.org [209.115.72.29]) + by xent.com (Postfix) with ESMTP id 7586129427E for ; + Fri, 6 Sep 2002 01:26:11 -0700 (PDT) +Received: by panacea.canonical.org (Postfix, from userid 1004) id + 9369B3F4EB; Fri, 6 Sep 2002 04:26:44 -0400 (EDT) +From: kragen@pobox.com (Kragen Sitaker) +To: fork@spamassassin.taint.org +Subject: Re: asynchronous I/O (was Re: Gasp!) +Message-Id: <20020906082644.9369B3F4EB@panacea.canonical.org> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 04:26:44 -0400 (EDT) + +Adam Beberg writes: +> On Tue, 3 Sep 2002, Kragen Sitaker wrote: +> > Unix acquired nonblocking I/O in the form of select() about 23 years +> > ago, and Solaris has had the particular aio_* calls we are discussing +> > for many years. +> +> select() "scaling" is a joke at best, and I know you know that. poll() is +> only a bit better. + +Not only do I know that, the post to which you were responding +explained that, with somewhat more detail than "a joke". As you +should know, but evidently don't, poll() isn't even "a bit better" --- +in fact, it's about an order of magnitude worse --- for dense file +descriptor sets, which is the normal case. (Except on operating +systems where select() isn't a system call but a library routine that +calls poll().) + +> > Very few applications need the aio_* calls --- essentially only +> > high-performance RDBMS servers even benefit from them at all, and +> > most of those have been faking it fine for a while with multiple +> > threads or processes. This just provides a modicum of extra +> > performance. +> +> Wrong, it makes a huge difference in even what I consider small programs. + +Why don't you explain this in more detail? + +> > Although I don't have a copy of the spec handy, I think the aio_* APIs +> > come from the POSIX spec IEEE Std 1003.1-1990, section 6.7.9, which is +> > 13 years old, and which I think documented then-current practice. +> > They might be even older than that. +> +> Yes, SGI has a patch to the linux kernel to implement the aio_ interfaces, +> but it's still not built in, who knows when it will be. The point is it's +> not portable in either case. + +You originally said: + + Could it be? After 20 years without this feature UNIX finally + catches up to Windows and has I/O that doesnt [sic] totally suck for + nontrivial apps? No way! + +The point --- my point, the point I was discussing; please don't try +to tell me you were trying to make a different point, because I don't +care --- is that you had no clue what you were talking about; Unix +hasn't been without this feature, and in fact has had it since you +were in elementary school, and operating systems without it don't +"totally suck for nontrivial apps". + +For what it's worth, glibc has actually implemented the aio_* calls +for a while, just in a way that doesn't scale to large numbers of +concurrent I/O requests. I find references to the glibc +implementation as far back as 1999 and glibc 2.1.1, and I could +probably find much earlier references if I had time: +http://sources.redhat.com/ml/libc-hacker/1999-12/msg00070.html + +(more details at +http://www.atnf.csiro.au/people/rgooch/linux/docs/io-events.html; +details on the SGI patch are at +http://oss.sgi.com/projects/kaio/faq.html) + +> > Unix has been multiprocess since 1969, and most Unix implementations +> > have supported multithreading for a decade or more. +> +> And most UNIX is still kinda-sorta supporting the pthreads (POSIX) +> interface, each in their own 7/8 implementation. You're safe if you +> stick to the basics. + +Your original complaint was that Unix didn't do multithreading or +multiprogramming well. Now that I've pointed out how obviously +idiotic that claim is, you've amended your complaint: now, although +individual Unixes do these things well, you complain that their +implementations are not entirely conformant with the POSIX threads +specification. Well, that's probably true, but I haven't written +pthreads programs in C much myself, so I can't confirm it from my own +experience. But, even if it's true, it's not a very good reason to +prefer Windows. + +I'm sure you can provide examples of bugs in particular threading +implementations. Spare us. Just shut up. + +-- + Kragen Sitaker +Edsger Wybe Dijkstra died in August of 2002. The world has lost a great +man. See http://advogato.org/person/raph/diary.html?start=252 and +http://www.kode-fu.com/geek/2002_08_04_archive.shtml for details. + diff --git a/Ch3/datasets/spam/easy_ham/00449.a5774525dc915cffc54433a1793cbf1a b/Ch3/datasets/spam/easy_ham/00449.a5774525dc915cffc54433a1793cbf1a new file mode 100644 index 000000000..c091413de --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00449.a5774525dc915cffc54433a1793cbf1a @@ -0,0 +1,63 @@ +From fork-admin@xent.com Fri Sep 6 11:41:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AFF3616F70 + for ; Fri, 6 Sep 2002 11:39:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:36 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868Y3W25987 for + ; Fri, 6 Sep 2002 09:34:33 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id EAA20098 for ; Fri, 6 Sep 2002 04:34:22 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B4DF82940AA; Thu, 5 Sep 2002 20:31:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id C71A029409F for ; + Thu, 5 Sep 2002 20:30:46 -0700 (PDT) +Received: (qmail 23335 invoked by uid 1111); 6 Sep 2002 03:33:18 -0000 +From: "Adam L. Beberg" +To: +Cc: +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: <77205735221.20020905231659@magnesium.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 20:33:18 -0700 (PDT) + +On Thu, 5 Sep 2002 bitbitch@magnesium.net wrote: + +> Yet another case where 'marriage' is actually an inappropriate word +> for these guys. What they want is 'housekeeper' 'dog' and +> 'prostitute'. + +So, you're saying that product bundling works? Good point. + +And how is this any different from "normal" marriage exactly? Other then +that the woman not only gets a man, but one in a country where both she and +her offspring will have actual opportunities? Oh and the lack of +"de-feminized, over-sized, self-centered, mercenary-minded" choices? + + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + + diff --git a/Ch3/datasets/spam/easy_ham/00450.72b1e6931947f5bfcc7c116431e2a093 b/Ch3/datasets/spam/easy_ham/00450.72b1e6931947f5bfcc7c116431e2a093 new file mode 100644 index 000000000..5ca308878 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00450.72b1e6931947f5bfcc7c116431e2a093 @@ -0,0 +1,106 @@ +From fork-admin@xent.com Fri Sep 6 11:41:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6DB4416F71 + for ; Fri, 6 Sep 2002 11:39:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:38 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868YnW26014 for + ; Fri, 6 Sep 2002 09:34:51 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id EAA20104 for ; Fri, 6 Sep 2002 04:43:26 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E666C2940C2; Thu, 5 Sep 2002 20:40:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc02.attbi.com (sccrmhc02.attbi.com [204.127.202.62]) + by xent.com (Postfix) with ESMTP id A06A229409F for ; + Thu, 5 Sep 2002 20:39:33 -0700 (PDT) +Received: from h00e098788e1f.ne.client2.attbi.com ([24.61.143.15]) by + sccrmhc02.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) + with ESMTP id + <20020906034209.EOBI13899.sccrmhc02.attbi.com@h00e098788e1f.ne.client2.attbi.com>; + Fri, 6 Sep 2002 03:42:09 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.52f) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <155207191859.20020905234116@magnesium.net> +To: "Adam L. Beberg" +Cc: fork@spamassassin.taint.org +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 23:41:16 -0400 + +Hello Adam, + +Thursday, September 05, 2002, 11:33:18 PM, you wrote: + + +ALB> So, you're saying that product bundling works? Good point. + +Sometimes I wish I was still in CA. You deserve a good beating every +so often... (anyone else want to do the honors?) + +ALB> And how is this any different from "normal" marriage exactly? Other then +ALB> that the woman not only gets a man, but one in a country where both she and +ALB> her offspring will have actual opportunities? Oh and the lack of +ALB> "de-feminized, over-sized, self-centered, mercenary-minded" choices? + +Mmkay. For the nth time Adam, we don't live in the land of +Adam-fantasy. Women actually are allowed to do things productive, +independent and entirely free of their male counterparts. They aren't +forced to cook and clean and merely be sexual vessels. Sometimes, +and this will come as a shock to you, no doubt, men and women even +find -love- (which is the crucial distinction between this system) and +they marry one another for the satisfaction of being together. I +know, far-fetched and idealistically crazy as it is, but such things +do happen. I can guarantee you, if my mother was approached by my +father, and 25 years ago, he commented on her cleaning ability as a +motivator for marrying her, we would not be having this conversation +now. + +If guys still have silly antequated ideas about 'women's role' then +their opportunities for finding women _will_ be scarce. Again, these +situations are great, provided everyone is aware that the relationship +is a contractual one -- he wants a maid, a dog and a prostitute he +doesn't have to pay, and she wants a country that isn't impoverished +and teeming with AIDS. A contract, versus a true love-interest +marriage. + +Egh. I really need to stop analyzing your posts to this extent. I +blame law school and my cat. + +-BB + +ALB> - Adam L. "Duncan" Beberg +ALB> http://www.mithral.com/~beberg/ +ALB> beberg@mithral.com + + + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00451.939a31fdd3afff7c049dd3224ced6261 b/Ch3/datasets/spam/easy_ham/00451.939a31fdd3afff7c049dd3224ced6261 new file mode 100644 index 000000000..12802db9c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00451.939a31fdd3afff7c049dd3224ced6261 @@ -0,0 +1,238 @@ +From fork-admin@xent.com Fri Sep 6 11:41:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4EFDF16F72 + for ; Fri, 6 Sep 2002 11:39:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:40 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868Z9W26065 for + ; Fri, 6 Sep 2002 09:35:10 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id EAA20073 for ; Fri, 6 Sep 2002 04:19:27 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7824F294258; Thu, 5 Sep 2002 20:16:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc01.attbi.com (sccrmhc01.attbi.com [204.127.202.61]) + by xent.com (Postfix) with ESMTP id E22432940AA for ; + Thu, 5 Sep 2002 20:15:14 -0700 (PDT) +Received: from h00e098788e1f.ne.client2.attbi.com ([24.61.143.15]) by + sccrmhc01.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) + with ESMTP id + <20020906031744.ORWY11061.sccrmhc01.attbi.com@h00e098788e1f.ne.client2.attbi.com>; + Fri, 6 Sep 2002 03:17:44 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.52f) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <77205735221.20020905231659@magnesium.net> +To: "Adam L. Beberg" +Cc: fork@spamassassin.taint.org +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 23:16:59 -0400 + +Ah yes.. + +Yet another case where 'marriage' is actually an inappropriate word +for these guys. What they want is 'housekeeper' 'dog' and +'prostitute'. + +All I can say, is I hope these girls come out, take the men for what +they have, be glorified housekeepers for as short a term as possible, +and enjoy the free travel. + +Love my arse. + +-BB +ALB> ...an alternative to the "kind of de-feminized, over-sized, self-centered, +ALB> mercenary-minded lady available on the British singles scene," + +ALB> Glad to see American culture is making it's way into the British bars too :) +ALB> God bless us uncivilized bastards, every one. + +ALB> Still, definately something not right about the below. People are now +ALB> cheaper then a decent laptop? (ok, so we knew that already) + +ALB> ------------- + +ALB> Selling Wedded Bliss Big Business in Thailand +ALB> Thu Aug 29,10:19 AM ET +ALB> By Andrew Marshall + +ALB> BANGKOK, Thailand (Reuters) - English dentist Ken Moylan came to Thailand +ALB> looking for a wife. It took two hours to find her. + +ALB> "The first day I went out with Wan, she came back to my hotel and hung all +ALB> my clothes up and tidied the room. I thought it was marvelous," he said. "I +ALB> knew then there was something special." + +ALB> Moylan, 49, is one of thousands of men who use introduction agencies to meet +ALB> -- and marry -- Thai women. He lives in England now with 28-year-old Wan, +ALB> who is expecting their first child. + +ALB> Critics of marriage agencies say they exploit the grinding poverty of women +ALB> in developing countries, offering dreams of a new life in the West that +ALB> often turn sour. But Moylan says he has no regrets about coming to Thailand +ALB> in search of a wife. + +ALB> "I got to Thailand at 2 p.m., and by 4 p.m. I'd met Wan," he said. "I knew I +ALB> found her attractive. I could tell straight away that she was very caring." + +ALB> Moylan spent a week in Thailand, and after returning to England kept in +ALB> touch with Wan by phone and mail. Six months later she came to England and +ALB> the couple married. + +ALB> MR. MARRIAGE + +ALB> Lawrence Lynch, 49, runs Thai Professional Introduction Services, the agency +ALB> Moylan used to meet his wife. Lynch, who calls himself "Mr. Marriage," +ALB> started the company after also marrying a Thai woman through an introduction +ALB> agency. + +ALB> Since then he has helped set up hundreds of marriages. + +ALB> "In the last five years we've done about 400," he said. "To the best of my +ALB> knowledge, they have all been successful." + +ALB> Male clients pay $2,213 for the service, although men from countries that +ALB> require them to handle some of the visa work on their own get a discount. +ALB> Clients then get to view catalogs and videos of hundreds of Thai women +ALB> looking for a husband. If they like what they see they come to Bangkok. + +ALB> Clients are introduced to several women in chaperoned meetings in Lynch's +ALB> office -- encounters that can often be awkward given mutual shyness and +ALB> language problems. + +ALB> "We find that the gentlemen are usually just as nervous as the ladies," +ALB> Lynch said. "But once they start meeting the ladies they soon relax." + +ALB> After the first meeting, couples can decide to go on dates to get to know +ALB> each other better. Within two weeks of arrival, Lynch says, almost every +ALB> client has found a potential wife. + +ALB> "At the end of a fortnight it's very, very rare for a guy to go back and +ALB> think he hasn't made his mind up," he said. In most cases, marriage follows, +ALB> usually within the next year. + +ALB> Roongthip Kamchat, managing director of Thai No. 1 Connections, a +ALB> Bangkok-based agency, says she has introduced about 1,000 couples, and less +ALB> than 10 percent have broken up. + +ALB> Roongthip says she sometimes has a difficult time calming men who have just +ALB> arrived in Bangkok looking for a wife. + +ALB> "Sometimes they are very nervous," she said. "And sometimes they are very +ALB> impatient and say 'Give me a lady, I want to get married now.' I say: 'Calm +ALB> down, OK, we'll talk."' + +ALB> But if men are really in a hurry, Roongthip says, she can find them a wife +ALB> and get them married within a week. Lynch says clients he has found wives +ALB> for include a blind man, a man with one leg and a man with post-traumatic +ALB> stress disorder. + +ALB> WHY? + +ALB> Similar marriage agencies can be found in many developing countries. Critics +ALB> say they thrive on the neediness of lonely Western men who are unable to +ALB> form relationships in their own country, and on the desperation of +ALB> impoverished women who believe they can find a better life in the West. + +ALB> But Moylan says that if the arrangement makes both partners happy, there is +ALB> no reason to object. "If you talk about people who are needy, I think +ALB> everybody wants someone to love them, and wants someone to love, so yes, I +ALB> need Wan," he said. + +ALB> "Thai women are dissatisfied with life in Thailand. I think there's no +ALB> secret there. They are looking for a better life. I don't have a problem +ALB> with that. In return they are willing to give a lot of love and care to +ALB> their future husband." + +ALB> Lynch says men are dissatisfied with Western women too, and that is why they +ALB> choose to use his agency. + +ALB> His brochure promises an alternative to the "kind of de-feminized, +ALB> over-sized, self-centered, mercenary-minded lady available on the British +ALB> singles scene," and says he can make dreams come true even for men who are +ALB> not "God's gift to women." + +ALB> Roongthip said many Western men found it difficult to meet women in their +ALB> own countries -- and found Thai women attractive. + +ALB> "They don't know how to meet women. Even if they go to pubs or discotheques +ALB> or restaurants or department stores, how can they ask people to marry them? +ALB> Impossible," she said. + +ALB> "Many Thai girls are slim, have long hair, black eyes, small nose. They are +ALB> good at taking care and joking and laughing, not strict. Different from +ALB> ladies from other countries." + +ALB> Although many couples married through agencies have a considerable age gap, +ALB> the agencies say this is not a problem. They say language problems are also +ALB> not a major obstacle. + +ALB> "Thai ladies are not ageist, and they have no qualms whatsoever about having +ALB> a husband who is significantly older," Lynch said. "When I met my wife she +ALB> couldn't speak a word of English. We muddled along with a phonetic +ALB> dictionary. The ladies are very keen to learn English and they pick it up +ALB> very quickly." + +ALB> Many agencies also offer tuition for woman on what to expect when they move +ALB> to the West. + +ALB> "We have kitchens, we have study classes," Roongthip said. "We teach them +ALB> how to eat, and when to make tea." + +ALB> PITFALLS + +ALB> But not all dreams come true. "Bee" is a 26-year-old Thai woman who went to +ALB> Switzerland two years ago with a man she met through an agency. Now she is +ALB> back in Bangkok, sad and angry. + +ALB> "He had no friends, and I was so lonely," she said. "I tried to make him +ALB> happy but he just wanted sex and somebody to keep his house clean. He never +ALB> spoke to me." + +ALB> Bee came back to Bangkok earlier this year. "I thought I would be happy +ALB> there," she said. "But it was the worst time of my life." + +ALB> Lynch says that while some agencies are badly run, he makes checks to ensure +ALB> unsuitable candidates are weeded out. + +ALB> "We are ethical and professional," he said. "We will not take on all +ALB> comers." + +ALB> Moylan says that despite possible pitfalls, his own marriage is proof the +ALB> arrangement can work. Wan's sister has just signed up with Lynch's company, +ALB> looking for a foreign husband. + +ALB> "Perhaps there are cases of women being exploited. I'm sure there are," +ALB> Moylan said. "But in the majority of cases the women get a good deal." + + + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00452.82e58fa634669d9f5543b297cec9b6b7 b/Ch3/datasets/spam/easy_ham/00452.82e58fa634669d9f5543b297cec9b6b7 new file mode 100644 index 000000000..9f0ce2c11 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00452.82e58fa634669d9f5543b297cec9b6b7 @@ -0,0 +1,156 @@ +From fork-admin@xent.com Fri Sep 6 11:41:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0D18E16F1F + for ; Fri, 6 Sep 2002 11:39:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:28 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868U2W25611 for + ; Fri, 6 Sep 2002 09:30:02 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id GAA20300 for ; Fri, 6 Sep 2002 06:00:23 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D5E902940CD; Thu, 5 Sep 2002 21:57:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from blount.mail.mindspring.net (blount.mail.mindspring.net + [207.69.200.226]) by xent.com (Postfix) with ESMTP id C333829409F for + ; Thu, 5 Sep 2002 21:56:22 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + blount.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17nBCo-00014G-00; + Fri, 06 Sep 2002 00:58:54 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net (Unverified) +Message-Id: +To: fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: Re: Electric car an Edsel... +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 21:27:18 -0400 + +Ouch.... hooooo.... + +Cheers, +RAH + +--- begin forwarded text + + +Date: Thu, 5 Sep 2002 09:17:13 -0700 +From: Same Guy +Subject: Re: Electric car an Edsel... +To: "R. A. Hettinga" + +Bob, + +This guy's an idiot. + +I design loads for systems with the 50 kV capacitors. One of those has 864 +of such capacitors and stores only 10 megajoules, which means 11 kilojoules +each. They weigh 125 kg. + +You need high energy per unit mass, and the capacitive system I picked +maximizes that. + +It is precisely the system that Maxwell is touting for electrical braking +and power augmentation for regenerative use in automobiles. You also need +voltage you can use in a DC motor, which is why though the actual +capacitors in the system are charged to 2.5 volts, the system has them +arranged in series to boost the voltage. + +Ignore him. He's a waste of my time. + + + +------------------------ + From: "R. A. Hettinga" + Subject: Re: Electric car an Edsel... + Date: Wed, 4 Sep 2002 15:31:39 -0400 + To: Some people... + + + +--- begin forwarded text + + +Date: Wed, 4 Sep 2002 07:59:10 -0700 (PDT) +From: "Adam L. Beberg" +To: "R. A. Hettinga" +cc: +Subject: Re: Electric car an Edsel... + +On Wed, 4 Sep 2002, R. A. Hettinga wrote: + +> Maxwell (www.maxwell.com) makes and sells high energy density capacitors, +> called ultracapacitors. They deliver them in an air-cooled, voltage +> regulated module that will charge to 42 V and hold 128 kilojoules -- roughly +> the energy in 2 teaspoons of sugar or a bite of a donut -- and weighs 16 +> kilograms. If that electrical energy could all be converted to kinetic +> energy, there's enough to get the capacitor module up to about 200 mph -- in +> a vacuum. + +Since the energy you can pack into a capacitor is something like +1/2*C*(V^2), you want to design your system with the lowest voltage possible +to fully exploit that V^2 ;) So yea, a 42V system will only be useful for +accelerating insects, not cars. That must be why 40kV is standard not 42. +(the joke of putting 42 into goggle to find that model was not missed BTW) + +Most production systems use a mix of batteries and capacitors, as very few +real world applications run for less then 10 seconds like the car we were +talking about originally. Even 10 seconds is pushing the "capactior is the +wrong choice" limits. Thats why the landspeed record model is a battery one, +it's got to run for a much longer period of time and needs a steady +discharge curve. + +But it should be safe to say that most people want the Indy 500 version, not +the 1/4 mile sprint version when they are looking for a vehice :) For those +you dont want a battery or a capacitor, you want to take advantage of whole +atoms, not just electrons. Then you can suck off the electrons you need with +a fuel cell. However, you will use both capacitors for the braking/accel, +and batteries to not just dump excess energy in the design. + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + +--- end forwarded text + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + +---------------End of Original Message----------------- + +--- end forwarded text + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + diff --git a/Ch3/datasets/spam/easy_ham/00453.1b26da8f96711b00e186def7371d1e0d b/Ch3/datasets/spam/easy_ham/00453.1b26da8f96711b00e186def7371d1e0d new file mode 100644 index 000000000..40ea37d46 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00453.1b26da8f96711b00e186def7371d1e0d @@ -0,0 +1,208 @@ +From fork-admin@xent.com Fri Sep 6 11:41:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 47A3A16F74 + for ; Fri, 6 Sep 2002 11:39:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:47 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g86923C27140 for + ; Fri, 6 Sep 2002 10:02:03 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id DAA19743 for ; Fri, 6 Sep 2002 03:09:23 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E8FBD294171; Thu, 5 Sep 2002 19:06:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id 6A03A2940AA for ; + Thu, 5 Sep 2002 19:05:13 -0700 (PDT) +Received: (qmail 22974 invoked by uid 1111); 6 Sep 2002 02:07:40 -0000 +From: "Adam L. Beberg" +To: +Subject: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 19:07:40 -0700 (PDT) + +...an alternative to the "kind of de-feminized, over-sized, self-centered, +mercenary-minded lady available on the British singles scene," + +Glad to see American culture is making it's way into the British bars too :) +God bless us uncivilized bastards, every one. + +Still, definately something not right about the below. People are now +cheaper then a decent laptop? (ok, so we knew that already) + +------------- + +Selling Wedded Bliss Big Business in Thailand +Thu Aug 29,10:19 AM ET +By Andrew Marshall + +BANGKOK, Thailand (Reuters) - English dentist Ken Moylan came to Thailand +looking for a wife. It took two hours to find her. + +"The first day I went out with Wan, she came back to my hotel and hung all +my clothes up and tidied the room. I thought it was marvelous," he said. "I +knew then there was something special." + +Moylan, 49, is one of thousands of men who use introduction agencies to meet +-- and marry -- Thai women. He lives in England now with 28-year-old Wan, +who is expecting their first child. + +Critics of marriage agencies say they exploit the grinding poverty of women +in developing countries, offering dreams of a new life in the West that +often turn sour. But Moylan says he has no regrets about coming to Thailand +in search of a wife. + +"I got to Thailand at 2 p.m., and by 4 p.m. I'd met Wan," he said. "I knew I +found her attractive. I could tell straight away that she was very caring." + +Moylan spent a week in Thailand, and after returning to England kept in +touch with Wan by phone and mail. Six months later she came to England and +the couple married. + +MR. MARRIAGE + +Lawrence Lynch, 49, runs Thai Professional Introduction Services, the agency +Moylan used to meet his wife. Lynch, who calls himself "Mr. Marriage," +started the company after also marrying a Thai woman through an introduction +agency. + +Since then he has helped set up hundreds of marriages. + +"In the last five years we've done about 400," he said. "To the best of my +knowledge, they have all been successful." + +Male clients pay $2,213 for the service, although men from countries that +require them to handle some of the visa work on their own get a discount. +Clients then get to view catalogs and videos of hundreds of Thai women +looking for a husband. If they like what they see they come to Bangkok. + +Clients are introduced to several women in chaperoned meetings in Lynch's +office -- encounters that can often be awkward given mutual shyness and +language problems. + +"We find that the gentlemen are usually just as nervous as the ladies," +Lynch said. "But once they start meeting the ladies they soon relax." + +After the first meeting, couples can decide to go on dates to get to know +each other better. Within two weeks of arrival, Lynch says, almost every +client has found a potential wife. + +"At the end of a fortnight it's very, very rare for a guy to go back and +think he hasn't made his mind up," he said. In most cases, marriage follows, +usually within the next year. + +Roongthip Kamchat, managing director of Thai No. 1 Connections, a +Bangkok-based agency, says she has introduced about 1,000 couples, and less +than 10 percent have broken up. + +Roongthip says she sometimes has a difficult time calming men who have just +arrived in Bangkok looking for a wife. + +"Sometimes they are very nervous," she said. "And sometimes they are very +impatient and say 'Give me a lady, I want to get married now.' I say: 'Calm +down, OK, we'll talk."' + +But if men are really in a hurry, Roongthip says, she can find them a wife +and get them married within a week. Lynch says clients he has found wives +for include a blind man, a man with one leg and a man with post-traumatic +stress disorder. + +WHY? + +Similar marriage agencies can be found in many developing countries. Critics +say they thrive on the neediness of lonely Western men who are unable to +form relationships in their own country, and on the desperation of +impoverished women who believe they can find a better life in the West. + +But Moylan says that if the arrangement makes both partners happy, there is +no reason to object. "If you talk about people who are needy, I think +everybody wants someone to love them, and wants someone to love, so yes, I +need Wan," he said. + +"Thai women are dissatisfied with life in Thailand. I think there's no +secret there. They are looking for a better life. I don't have a problem +with that. In return they are willing to give a lot of love and care to +their future husband." + +Lynch says men are dissatisfied with Western women too, and that is why they +choose to use his agency. + +His brochure promises an alternative to the "kind of de-feminized, +over-sized, self-centered, mercenary-minded lady available on the British +singles scene," and says he can make dreams come true even for men who are +not "God's gift to women." + +Roongthip said many Western men found it difficult to meet women in their +own countries -- and found Thai women attractive. + +"They don't know how to meet women. Even if they go to pubs or discotheques +or restaurants or department stores, how can they ask people to marry them? +Impossible," she said. + +"Many Thai girls are slim, have long hair, black eyes, small nose. They are +good at taking care and joking and laughing, not strict. Different from +ladies from other countries." + +Although many couples married through agencies have a considerable age gap, +the agencies say this is not a problem. They say language problems are also +not a major obstacle. + +"Thai ladies are not ageist, and they have no qualms whatsoever about having +a husband who is significantly older," Lynch said. "When I met my wife she +couldn't speak a word of English. We muddled along with a phonetic +dictionary. The ladies are very keen to learn English and they pick it up +very quickly." + +Many agencies also offer tuition for woman on what to expect when they move +to the West. + +"We have kitchens, we have study classes," Roongthip said. "We teach them +how to eat, and when to make tea." + +PITFALLS + +But not all dreams come true. "Bee" is a 26-year-old Thai woman who went to +Switzerland two years ago with a man she met through an agency. Now she is +back in Bangkok, sad and angry. + +"He had no friends, and I was so lonely," she said. "I tried to make him +happy but he just wanted sex and somebody to keep his house clean. He never +spoke to me." + +Bee came back to Bangkok earlier this year. "I thought I would be happy +there," she said. "But it was the worst time of my life." + +Lynch says that while some agencies are badly run, he makes checks to ensure +unsuitable candidates are weeded out. + +"We are ethical and professional," he said. "We will not take on all +comers." + +Moylan says that despite possible pitfalls, his own marriage is proof the +arrangement can work. Wan's sister has just signed up with Lynch's company, +looking for a foreign husband. + +"Perhaps there are cases of women being exploited. I'm sure there are," +Moylan said. "But in the majority of cases the women get a good deal." + + + diff --git a/Ch3/datasets/spam/easy_ham/00454.e4cd59db7f7856303052e3e882be313c b/Ch3/datasets/spam/easy_ham/00454.e4cd59db7f7856303052e3e882be313c new file mode 100644 index 000000000..7397a43fa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00454.e4cd59db7f7856303052e3e882be313c @@ -0,0 +1,69 @@ +From fork-admin@xent.com Fri Sep 6 11:42:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id ABC3916F76 + for ; Fri, 6 Sep 2002 11:39:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g869e8C28612 for ; + Fri, 6 Sep 2002 10:40:08 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 10D7D294291; Fri, 6 Sep 2002 02:37:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id DDED7294290 for + ; Fri, 6 Sep 2002 02:36:04 -0700 (PDT) +Received: (qmail 31903 invoked by uid 508); 6 Sep 2002 09:38:40 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.31) by + venus.phpwebhosting.com with SMTP; 6 Sep 2002 09:38:40 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g869caH32655; Fri, 6 Sep 2002 11:38:36 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: +Cc: "Adam L. Beberg" , +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: <155207191859.20020905234116@magnesium.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 11:38:36 +0200 (CEST) + +On Thu, 5 Sep 2002 bitbitch@magnesium.net wrote: + +> If guys still have silly antequated ideas about 'women's role' then +> their opportunities for finding women _will_ be scarce. + +What is silly and antiquated depends a lot on which country you live in. + +I don't have statistics on the love half life, but it seems long-term +relationships use something else for glue. + +Clearly our non-silly non-antiquated ideas about relationships have +resulted in mostly short-duration relationships and single-parented, +dysfunctional kids (not enough of them too boot, so to keep our +demographics from completely keeling over we're importing them from places +with mostly silly and antiquated ideas). + +At least from the viewpoint of demographics sustainability and +counterpressure to gerontocracy and resulting innovatiophobia we're doing +something wrong. + +Maybe we should really go dirty Tleilaxu all the way. + + diff --git a/Ch3/datasets/spam/easy_ham/00455.d88c833e795f29473c862b4e4a43ac20 b/Ch3/datasets/spam/easy_ham/00455.d88c833e795f29473c862b4e4a43ac20 new file mode 100644 index 000000000..5eff2b77b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00455.d88c833e795f29473c862b4e4a43ac20 @@ -0,0 +1,178 @@ +From fork-admin@xent.com Fri Sep 6 11:42:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 42C4F16F77 + for ; Fri, 6 Sep 2002 11:39:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:53 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869r9C29228 for + ; Fri, 6 Sep 2002 10:53:09 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id XAA19090 for ; Thu, 5 Sep 2002 23:41:25 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8052829425A; Thu, 5 Sep 2002 15:06:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta03-svc.ntlworld.com (mta03-svc.ntlworld.com + [62.253.162.43]) by xent.com (Postfix) with ESMTP id 12F792940AA for + ; Thu, 5 Sep 2002 15:05:12 -0700 (PDT) +Received: from cynosure.stanford.edu ([80.7.27.124]) by + mta03-svc.ntlworld.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) + with ESMTP id + <20020905220745.IIXA23840.mta03-svc.ntlworld.com@cynosure.stanford.edu> + for ; Thu, 5 Sep 2002 23:07:45 +0100 +Message-Id: <5.1.0.14.2.20020905150722.054fb3c8@rescomp.stanford.edu> +X-Sender: extant@rescomp.stanford.edu (Unverified) +X-Mailer: QUALCOMM Windows Eudora Version 5.1 +To: fork@spamassassin.taint.org +From: Hussein Kanji +Subject: RE: sprint delivers the next big thing?? +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 05 Sep 2002 15:07:44 -0700 + +i agree with rob. i think if the phones (and mms is building traction in europe in handsets), this might be interesting. bottom line is will it a) help sell phones and b) bill enough time on the wcarriers networks? + +anyone remember the polariod photo sticker fad? low quality, small in size. but kids totally dug that stuff. seems like every adolescent girl had that stuff at one point. and it never replaced or aimed to replace digital cameras or normal photographs. i don't think mms photos will be a substitute for other photography - developed at the local 1 hour joint or digital photos on your pc. i think it expands the market and forms a new category. the extent of the category size is the big question (will it be a fad or will it a sustained market). that's consumer behavior and marketing. but i don't think the technology adoption will follow a substitution of another product on the market (in this case, digital photos or normal photos). europe's the one to watch - more teenagers have wireless phones and if the pricing and marketing is right, they'll figure out what to do with it once the carriers how to figure out how to market it to them. + +-h + +>From: "Rob Shavell" +>To: "'Mike Masnick'" +>Cc: +>Subject: RE: sprint delivers the next big thing?? +>Date: Wed, 21 Aug 2002 01:10:50 -0700 +> +>right Mike, +> +>i will agree to disagree but i take your comments to heart. my opinion is +>only that this is one of the last frontiers of communications ('instant +>show') that we cross easily (though you are right as rain on pricing). i am +>mildly amused at the level of skepticism and innatention it is getting. +> +>my premise is that the world will change in dramatic and unexpected ways +>once there are a billion 'eye's' which can instantly share what they see +>amongst each other. that doesn't mean that people will stop talking on +>their phones, or that people will spend more time w/images than voice. just +>that it is fundamental. from news to crime to privacy to dating to family +>life to bloopers and practical jokes, i believe there will be an explosion +>of images unleashed specifically by cell phone integrated lenses because of +>their utter ubiquity that dwarfs all pictures taken in the history of +>photography by orders of magnitude and in short order. and yes, changes +>things 'big time'. +> +>rgds, +>rob +> +> +>-----Original Message----- +>From: Mike Masnick [mailto:mike@techdirt.com] +>Sent: Tuesday, August 20, 2002 11:58 PM +>To: Rob Shavell +>Cc: fork@spamassassin.taint.org +>Subject: RE: sprint delivers the next big thing?? +> +> +>Not to keep harping on this, but... +> +>At 11:36 PM 8/20/02 -0700, Rob Shavell wrote: +> +>>content: who cares about content? that no one can think of 'useful' +>content +>>is always the business persons mistake. the content is the users +>>communications. its anything and everything. avg person could easily send +>>half dozen pics to a dozen people a day. mainly humorous i'd guess. who +>>cares if content is trivial in nature. picture speaks a thousand words. +> +>This does nothing to answer my question. I *do* care about content. Hell, +>if I could be convinced that people would send stupid pics back and forth +>all day, I'd have a different opinion of this. I just am not convinced +>that they will (stupid or not). +> +>While a picture may be worth a thousand words (and this is the same +>argument the guy who works for me made), how many people do you know who +>communicate by pictures? Sure, it sounds nice to say that a picture is +>such an efficient messaging mechanism, but how often do you actually find +>yourself drawing someone a picture to explain something? +> +>I don't buy it. +> +>For most messages, text works fine and is the most efficient +>mechanism. For some messages, pictures do the job, but I would say not +>nearly as often as words. Why do you think Pictionary and Charades and +>such are games? Because images are usually not the most efficient way to +>get a message across. +> +>>misc ramblings: i suppose you skeptical forkers would have said the same +>>thing about '1 hour photo' processing. trivial, who needs it, i get better +>>resultion elswhere. and yet, it had great decentralizing impact - the +>plant +>>had to be downsized and pushed to the retail operation - the digital +>camera, +>>and finally the integrated digital camera phone brings this cycle of +>>decentralization in photography to a logical conclusion (which will put the +>>photo giants to bed) and change the world in a meaningful way. also, SMS +>>didn't take off because its easy, it took off because it costs less. its +>>greatly ironic the carriers often trumpet the 'profitabilty' of their SMS +>>traffic over others because of its ratio of cost to bandwidth. in reality, +>>SMS cannibilizes the voice rev's they bought their networks to handle. +> +>Again, this is the same argument my colleague made (along with "you just +>don't understand kids today, and they'll run with this"). I wasn't saying +>that MMS wouldn't take off because it wasn't high quality or that it wasn't +>easy. I was saying that I couldn't see why people would use it in a way +>that "changed the face of communications". +> +>I'm looking for the compelling reason (even if it's a stupid one) why +>people would want to do this. Sure, if they integrate cameras into the +>phone, and the quality improves (even only marginally) I can certainly see +>people taking pictures with their cameras and occasionally sending them to +>other people. But, mostly, I don't see what the benefit is to this over +>sending them to someone's email address, or putting together an online (or +>offline) photoalbum. +> +>I don't think 1 hour photos are trivial. People want to see their own pics +>right away, and the quality is plenty good enough for snapshots. That's +>one of the main reasons why digital cameras are catching on. The instant +>view part. I'm guessing your argument is that people not only want +>"instant view", but also "instant show". Which is what this service +>offers. I'm not convinced that most people want "instant show". I think +>people like to package their pictures and show them. That's why people put +>together fancy albums, and sit there and force you to go through them while +>they explain every picture. Sure, occasionally "instant show" is nice, but +>it's just "nice" on occasion. I still can't see how it becomes a integral +>messaging method. +> +>What's the specific benefit of taking a picture and immediately sending it +>from one phone to another? There has to be *some* benefit, even if it's +>silly if people are going to flock to it. +> +>I'm searching... no one has given me a straight answer yet. +> +>The *only* really intriguing idea I've heard about things like MMS lately +>are Dan Gillmor's assertion that one day in the near future some news event +>will happen, and a bunch of people will snap pictures with their mobile +>phones, from all different angles, and those photos tell the real story of +>what happened - before the press even gets there. +> +>Willing to be proven wrong, +>Mike +> +>PS If the wireless carriers continue to price these services as stupidly as +>they currently are, then MMS is *never* going to catch on. + + diff --git a/Ch3/datasets/spam/easy_ham/00456.6932df857bc1b0c8766e5a9794d167ba b/Ch3/datasets/spam/easy_ham/00456.6932df857bc1b0c8766e5a9794d167ba new file mode 100644 index 000000000..18069e2e9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00456.6932df857bc1b0c8766e5a9794d167ba @@ -0,0 +1,94 @@ +From fork-admin@xent.com Fri Sep 6 11:42:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 787CB16F20 + for ; Fri, 6 Sep 2002 11:39:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:56 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869s7C29392 for + ; Fri, 6 Sep 2002 10:54:07 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id XAA18922 for ; Thu, 5 Sep 2002 23:08:05 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0662B294209; Thu, 5 Sep 2002 14:38:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id CB37C2940AA for + ; Thu, 5 Sep 2002 14:37:48 -0700 (PDT) +Received: (qmail 3166 invoked by uid 501); 5 Sep 2002 21:40:13 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 5 Sep 2002 21:40:13 -0000 +From: CDale +To: Eirikur Hallgrimsson +Cc: FoRK +Subject: Re: Ouch... +In-Reply-To: <200209051432.42151.eh@mad.scientist.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 16:40:13 -0500 (CDT) + +LOL! They're not doomed at all. Thousands of men wear cb2000s to work +every day (along with other chastity devices). They are not just +decorations. You will not get a woody or have an orgasm until your +keyholder allows you to. Anyhow, I know better than to have this +type of conversation with a 'nilla, but these men wear these happily, and +consensually. (: There is little power struggle in the lifestyles of the +people who use these. There is power exchange instead. Lots of +variations on the definition, but this one's from Gloria Brame's site: + +Power exchange: the consensual transfer of power by the submissive to the +dominant. The exchange takes place when the returned energy from the +dominant empowers the submissive. + +Anyhow, there are tons of informative sites out there for anyone who cares +to read them, but I assure you, the chastity device business is doing very +well, and it is illegal to force someone to wear one. It's not coercion, +it is creative sensuality. (: +Cindy + +On Thu, 5 Sep 2002, Eirikur Hallgrimsson wrote: + +> On Wednesday 04 September 2002 10:59 pm, CDale wrote: +> > Someone needs to tell the mayor about this: +> > http://www.cb-2000.com/ +> +> "Chastity" technologies were doomed from the start, and I'll add chemical +> ones to the trash heap. (Yeah, Cindy, these are decorative toys for the +> subculture, but....) +> +> Generally,someone is attempting to preserve a relationship with this +> nonsense, when quite plainly the the relationship is in a state where +> preserving it is of little value. Hardware is of no real use save for +> playing the power-struggle game. I don't want to see the future of this. +> "Invisible Fence" for your mate. "Must wear" location transponders and +> endocrine monitors. More movies like "Minority Report." +> +> It seems so automatic for people to reach for coercive solutions. So +> surprizing given the low absolute effectiveness of coercion in the absense +> of overwhelming force advantage. +> +> Eirikur +> +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00457.89579a11f9036c69e46063fb22057fe6 b/Ch3/datasets/spam/easy_ham/00457.89579a11f9036c69e46063fb22057fe6 new file mode 100644 index 000000000..bc488a092 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00457.89579a11f9036c69e46063fb22057fe6 @@ -0,0 +1,73 @@ +From fork-admin@xent.com Fri Sep 6 11:42:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9946E16F78 + for ; Fri, 6 Sep 2002 11:39:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:58 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869r6C29218 for + ; Fri, 6 Sep 2002 10:53:06 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id XAA19142 for ; Thu, 5 Sep 2002 23:58:05 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 515A5294174; Thu, 5 Sep 2002 11:31:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc51.attbi.com (rwcrmhc51.attbi.com [204.127.198.38]) + by xent.com (Postfix) with ESMTP id AABDC2940AA for ; + Thu, 5 Sep 2002 11:30:34 -0700 (PDT) +Received: from Intellistation ([66.31.2.27]) by rwcrmhc51.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020905183308.ZUIL1399.rwcrmhc51.attbi.com@Intellistation> for + ; Thu, 5 Sep 2002 18:33:08 +0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Eirikur Hallgrimsson +Organization: Electric Brain +To: FoRK +Subject: Re: Ouch... +User-Agent: KMail/1.4.1 +References: +In-Reply-To: +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200209051432.42151.eh@mad.scientist.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 14:32:42 -0400 + +On Wednesday 04 September 2002 10:59 pm, CDale wrote: +> Someone needs to tell the mayor about this: +> http://www.cb-2000.com/ + +"Chastity" technologies were doomed from the start, and I'll add chemical +ones to the trash heap. (Yeah, Cindy, these are decorative toys for the +subculture, but....) + +Generally,someone is attempting to preserve a relationship with this +nonsense, when quite plainly the the relationship is in a state where +preserving it is of little value. Hardware is of no real use save for +playing the power-struggle game. I don't want to see the future of this. +"Invisible Fence" for your mate. "Must wear" location transponders and +endocrine monitors. More movies like "Minority Report." + +It seems so automatic for people to reach for coercive solutions. So +surprizing given the low absolute effectiveness of coercion in the absense +of overwhelming force advantage. + +Eirikur + + + + diff --git a/Ch3/datasets/spam/easy_ham/00458.ad4375d9c03bdcd1828da9c405441b65 b/Ch3/datasets/spam/easy_ham/00458.ad4375d9c03bdcd1828da9c405441b65 new file mode 100644 index 000000000..30ab67cff --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00458.ad4375d9c03bdcd1828da9c405441b65 @@ -0,0 +1,90 @@ +From fork-admin@xent.com Fri Sep 6 11:42:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3E1CA16F6E + for ; Fri, 6 Sep 2002 11:40:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:40:00 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86A2wC30579 for ; + Fri, 6 Sep 2002 11:02:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 47990294295; Fri, 6 Sep 2002 03:00:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 95CCF294294 for + ; Fri, 6 Sep 2002 02:59:19 -0700 (PDT) +Received: (qmail 30958 invoked by uid 501); 6 Sep 2002 10:01:51 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 6 Sep 2002 10:01:51 -0000 +From: CDale +To: Eugen Leitl +Cc: bitbitch@magnesium.net, "Adam L. Beberg" , + +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 05:01:51 -0500 (CDT) + +On Fri, 6 Sep 2002, Eugen Leitl wrote: + +> On Thu, 5 Sep 2002 bitbitch@magnesium.net wrote: +> +> > If guys still have silly antequated ideas about 'women's role' then +> > their opportunities for finding women _will_ be scarce. +> +> What is silly and antiquated depends a lot on which country you live in. + +It also depends on what the fad is or what is in style. (: + +> I don't have statistics on the love half life, but it seems long-term +> relationships use something else for glue. +> +> Clearly our non-silly non-antiquated ideas about relationships have +> resulted in mostly short-duration relationships and single-parented, +> dysfunctional kids (not enough of them too boot, so to keep our +> demographics from completely keeling over we're importing them from places +> with mostly silly and antiquated ideas). + +Actualy our silly antiquated ideas about relationships and love have +resulted in the bleedings of many upon many a page (and musical instrumnet, +and canvas) What's the problem if we dash a little Mrs. Dash on them? (: +Or cayenne. Or ginger. (mm ask me about ginger root play). + +And let me tell you this: just because a child happens to be +single-parented (what a word), does not mean that child is dysfunctional +or lives in a dysfunctional home. The govt/media/church has tried to make +it look like there is a disintegration, when in fact, there is a coming +together of other family members and friends to raise children. It's not +decaying -- it's changing. Nothing wrong with change. + + +> At least from the viewpoint of demographics sustainability and +> counterpressure to gerontocracy and resulting innovatiophobia we're doing +> something wrong. +> +> Maybe we should really go dirty Tleilaxu all the way. +> + +Maybe y'all should buy m-w some more bandwidth. +C +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00459.1b37170cbdad7f2ad4051ccff4d2b863 b/Ch3/datasets/spam/easy_ham/00459.1b37170cbdad7f2ad4051ccff4d2b863 new file mode 100644 index 000000000..c87157900 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00459.1b37170cbdad7f2ad4051ccff4d2b863 @@ -0,0 +1,88 @@ +From fork-admin@xent.com Fri Sep 6 11:42:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 034B916F16 + for ; Fri, 6 Sep 2002 11:40:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:40:02 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869qHC29143 for + ; Fri, 6 Sep 2002 10:52:17 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id AAA19167 for ; Fri, 6 Sep 2002 00:04:22 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 08AF9294250; Thu, 5 Sep 2002 16:01:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id 28EA02940AA for ; + Thu, 5 Sep 2002 16:00:25 -0700 (PDT) +Received: (qmail 22247 invoked by uid 1111); 5 Sep 2002 23:02:55 -0000 +From: "Adam L. Beberg" +To: +Subject: Pitch Dark Bar Opens for Blind Dates +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 16:02:55 -0700 (PDT) + +This is preaty neat. + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + +Pitch Dark Bar Opens for Blind Dates +Thu Sep 5,10:09 AM ET + +BERLIN (Reuters) - Diners at Berlin's newest restaurant cannot see what they +are eating and have to be guided to their table by blind waiters because the +bar is pitch black. + +The restaurant, which opened Wednesday, aims to make guests concentrate on +senses other than sight. + +Holding on to one another, the first visitors followed waiter Roland +Zimmermann, 33, into the dining room. Although the PhD student has been +blind since childhood, he is the only one able to point out chairs, cutlery +and drinks. + +"I'm putting your plate right in front of you," Zimmermann said. "I can't +find my mouth," one voice replied out of the dark. "I wonder what this dish +is -- Lasagne? Or some casserole?" another invisible guest said. + +In the "unsicht-Bar," which means invisible in German, diners cannot choose +complete dishes from the menu but can only indicate whether they would like +a fish, meat or vegetarian option. + +"We want people to have an extraordinary experience of tasting, feeling and +smelling," said Manfred Scharbach, head of the organization for blind and +sight-restricted people, which is running the bar. + +"People are surprised that their tongues and taste senses are taking over +and are sending signals, which their eyes would normally have sent," he +added. + +Of the 30 staff, 22 are blind. + +An average meal lasts about three hours and the waiters are always around to +help, Scharnbach said. + +And at the end of the night, they will even reveal what customers have +actually been eating. + + + diff --git a/Ch3/datasets/spam/easy_ham/00460.ae11aa8c20cf158f55b6a180679d74ea b/Ch3/datasets/spam/easy_ham/00460.ae11aa8c20cf158f55b6a180679d74ea new file mode 100644 index 000000000..b983bc3d9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00460.ae11aa8c20cf158f55b6a180679d74ea @@ -0,0 +1,62 @@ +From fork-admin@xent.com Fri Sep 6 11:42:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3777816F75 + for ; Fri, 6 Sep 2002 11:39:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:39:50 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869VOC28104 for + ; Fri, 6 Sep 2002 10:31:24 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id KAA20920 for ; Fri, 6 Sep 2002 10:23:30 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4DB6229428D; Fri, 6 Sep 2002 02:20:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id BB54729428C for + ; Fri, 6 Sep 2002 02:19:27 -0700 (PDT) +Received: (qmail 25953 invoked by uid 501); 6 Sep 2002 09:21:45 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 6 Sep 2002 09:21:45 -0000 +From: CDale +To: Kragen Sitaker +Cc: fork@spamassassin.taint.org +Subject: Re: Ouch... [Bebergflame] +In-Reply-To: <20020906082637.DDBB83F4EB@panacea.canonical.org> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 04:21:45 -0500 (CDT) + +On Fri, 6 Sep 2002, Kragen Sitaker wrote: + +> Adam Beberg writes: +> > Shouldn't a politician know not to tell the truth? Odds he's impeached by +> +> As the article you forwarded explained in the second line of text, +> this politician is a woman. +> +> > next Monday? [ob: no-clue-how-they-remove-mayors-in-italy] +> +> ob: no-clue-full-stop, as in nearly all Adam Beberg posts. + +posts, or pouts? +in rare webster form, +C + + diff --git a/Ch3/datasets/spam/easy_ham/00461.94c0b7cab722e5ac253b285e50b047e1 b/Ch3/datasets/spam/easy_ham/00461.94c0b7cab722e5ac253b285e50b047e1 new file mode 100644 index 000000000..006593c75 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00461.94c0b7cab722e5ac253b285e50b047e1 @@ -0,0 +1,178 @@ +From fork-admin@xent.com Fri Sep 6 11:42:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C62F416F21 + for ; Fri, 6 Sep 2002 11:40:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:40:03 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869sQC29417 for + ; Fri, 6 Sep 2002 10:54:27 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id WAA18845 for ; Thu, 5 Sep 2002 22:59:23 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0EA7B294256; Thu, 5 Sep 2002 14:56:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta03-svc.ntlworld.com (mta03-svc.ntlworld.com + [62.253.162.43]) by xent.com (Postfix) with ESMTP id BEF662940AA for + ; Thu, 5 Sep 2002 14:55:19 -0700 (PDT) +Received: from cynosure.stanford.edu ([80.7.27.124]) by + mta03-svc.ntlworld.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) + with ESMTP id + <20020905215753.IAUL23840.mta03-svc.ntlworld.com@cynosure.stanford.edu> + for ; Thu, 5 Sep 2002 22:57:53 +0100 +Message-Id: <5.1.0.14.2.20020905040452.04b51b88@rescomp.stanford.edu> +X-Sender: extant@rescomp.stanford.edu (Unverified) +X-Mailer: QUALCOMM Windows Eudora Version 5.1 +To: fork@spamassassin.taint.org +From: Hussein Kanji +Subject: RE: sprint delivers the next big thing?? +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 05 Sep 2002 04:14:26 -0700 + +i agree with rob. i think if the phones (and mms is building traction in europe in handsets), this might be interesting. bottom line is will it a) help sell phones and b) bill enough time on the wcarriers networks? + +anyone remember the polariod photo sticker fad? low quality, small in size. but kids totally dug that stuff. seems like every adolescent girl had that stuff at one point. and it never replaced or aimed to replace digital cameras or normal photographs. i don't think mms photos will be a substitute for other photography - developed at the local 1 hour joint or digital photos on your pc. i think it expands the market and forms a new category. the extent of the category size is the big question (will it be a fad or will it a sustained market). that's consumer behavior and marketing. but i don't think the technology adoption will follow a substitution of another product on the market (in this case, digital photos or normal photos). europe's the one to watch - more teenagers have wireless phones and if the pricing and marketing is right, they'll figure out what to do with it once the carriers how to figure out how to market it to them. + +-h + +>From: "Rob Shavell" +>To: "'Mike Masnick'" +>Cc: +>Subject: RE: sprint delivers the next big thing?? +>Date: Wed, 21 Aug 2002 01:10:50 -0700 +> +>right Mike, +> +>i will agree to disagree but i take your comments to heart. my opinion is +>only that this is one of the last frontiers of communications ('instant +>show') that we cross easily (though you are right as rain on pricing). i am +>mildly amused at the level of skepticism and innatention it is getting. +> +>my premise is that the world will change in dramatic and unexpected ways +>once there are a billion 'eye's' which can instantly share what they see +>amongst each other. that doesn't mean that people will stop talking on +>their phones, or that people will spend more time w/images than voice. just +>that it is fundamental. from news to crime to privacy to dating to family +>life to bloopers and practical jokes, i believe there will be an explosion +>of images unleashed specifically by cell phone integrated lenses because of +>their utter ubiquity that dwarfs all pictures taken in the history of +>photography by orders of magnitude and in short order. and yes, changes +>things 'big time'. +> +>rgds, +>rob +> +> +>-----Original Message----- +>From: Mike Masnick [mailto:mike@techdirt.com] +>Sent: Tuesday, August 20, 2002 11:58 PM +>To: Rob Shavell +>Cc: fork@spamassassin.taint.org +>Subject: RE: sprint delivers the next big thing?? +> +> +>Not to keep harping on this, but... +> +>At 11:36 PM 8/20/02 -0700, Rob Shavell wrote: +> +>>content: who cares about content? that no one can think of 'useful' +>content +>>is always the business persons mistake. the content is the users +>>communications. its anything and everything. avg person could easily send +>>half dozen pics to a dozen people a day. mainly humorous i'd guess. who +>>cares if content is trivial in nature. picture speaks a thousand words. +> +>This does nothing to answer my question. I *do* care about content. Hell, +>if I could be convinced that people would send stupid pics back and forth +>all day, I'd have a different opinion of this. I just am not convinced +>that they will (stupid or not). +> +>While a picture may be worth a thousand words (and this is the same +>argument the guy who works for me made), how many people do you know who +>communicate by pictures? Sure, it sounds nice to say that a picture is +>such an efficient messaging mechanism, but how often do you actually find +>yourself drawing someone a picture to explain something? +> +>I don't buy it. +> +>For most messages, text works fine and is the most efficient +>mechanism. For some messages, pictures do the job, but I would say not +>nearly as often as words. Why do you think Pictionary and Charades and +>such are games? Because images are usually not the most efficient way to +>get a message across. +> +>>misc ramblings: i suppose you skeptical forkers would have said the same +>>thing about '1 hour photo' processing. trivial, who needs it, i get better +>>resultion elswhere. and yet, it had great decentralizing impact - the +>plant +>>had to be downsized and pushed to the retail operation - the digital +>camera, +>>and finally the integrated digital camera phone brings this cycle of +>>decentralization in photography to a logical conclusion (which will put the +>>photo giants to bed) and change the world in a meaningful way. also, SMS +>>didn't take off because its easy, it took off because it costs less. its +>>greatly ironic the carriers often trumpet the 'profitabilty' of their SMS +>>traffic over others because of its ratio of cost to bandwidth. in reality, +>>SMS cannibilizes the voice rev's they bought their networks to handle. +> +>Again, this is the same argument my colleague made (along with "you just +>don't understand kids today, and they'll run with this"). I wasn't saying +>that MMS wouldn't take off because it wasn't high quality or that it wasn't +>easy. I was saying that I couldn't see why people would use it in a way +>that "changed the face of communications". +> +>I'm looking for the compelling reason (even if it's a stupid one) why +>people would want to do this. Sure, if they integrate cameras into the +>phone, and the quality improves (even only marginally) I can certainly see +>people taking pictures with their cameras and occasionally sending them to +>other people. But, mostly, I don't see what the benefit is to this over +>sending them to someone's email address, or putting together an online (or +>offline) photoalbum. +> +>I don't think 1 hour photos are trivial. People want to see their own pics +>right away, and the quality is plenty good enough for snapshots. That's +>one of the main reasons why digital cameras are catching on. The instant +>view part. I'm guessing your argument is that people not only want +>"instant view", but also "instant show". Which is what this service +>offers. I'm not convinced that most people want "instant show". I think +>people like to package their pictures and show them. That's why people put +>together fancy albums, and sit there and force you to go through them while +>they explain every picture. Sure, occasionally "instant show" is nice, but +>it's just "nice" on occasion. I still can't see how it becomes a integral +>messaging method. +> +>What's the specific benefit of taking a picture and immediately sending it +>from one phone to another? There has to be *some* benefit, even if it's +>silly if people are going to flock to it. +> +>I'm searching... no one has given me a straight answer yet. +> +>The *only* really intriguing idea I've heard about things like MMS lately +>are Dan Gillmor's assertion that one day in the near future some news event +>will happen, and a bunch of people will snap pictures with their mobile +>phones, from all different angles, and those photos tell the real story of +>what happened - before the press even gets there. +> +>Willing to be proven wrong, +>Mike +> +>PS If the wireless carriers continue to price these services as stupidly as +>they currently are, then MMS is *never* going to catch on. + + diff --git a/Ch3/datasets/spam/easy_ham/00462.d20502b45c48c8bb613feb09cd9219c7 b/Ch3/datasets/spam/easy_ham/00462.d20502b45c48c8bb613feb09cd9219c7 new file mode 100644 index 000000000..59f71a83f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00462.d20502b45c48c8bb613feb09cd9219c7 @@ -0,0 +1,95 @@ +From fork-admin@xent.com Fri Sep 6 11:42:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 453DE16F22 + for ; Fri, 6 Sep 2002 11:40:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:40:07 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86AI4C31652 for ; + Fri, 6 Sep 2002 11:18:04 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 958CC294299; Fri, 6 Sep 2002 03:15:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 5B8F9294298 for + ; Fri, 6 Sep 2002 03:14:50 -0700 (PDT) +Received: (qmail 10193 invoked by uid 508); 6 Sep 2002 10:16:34 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.31) by + venus.phpwebhosting.com with SMTP; 6 Sep 2002 10:16:34 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g86AGUi01401; Fri, 6 Sep 2002 12:16:30 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: CDale +Cc: , "Adam L. Beberg" , + +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 12:16:29 +0200 (CEST) + +On Fri, 6 Sep 2002, CDale wrote: + +> It also depends on what the fad is or what is in style. (: + +DNA's idea of fads is on the 100 kiloyear scale, unfortunately. As long as +current fads don't involve in-vivo rewrite of the genome, homeoboxes +including (now there's a problem for you, homeoboxing the adult), they're +not all that smart an idear. + +> Actualy our silly antiquated ideas about relationships and love have +> resulted in the bleedings of many upon many a page (and musical +> instrumnet, and canvas) What's the problem if we dash a little Mrs. + +Art is sure nice. However, if art is our first priority we're kinda +fux0red, if we've set our sight on a sustainable culture. + +> Dash on them? (: Or cayenne. Or ginger. (mm ask me about ginger +> root play). +> +> And let me tell you this: just because a child happens to be +> single-parented (what a word), does not mean that child is +> dysfunctional or lives in a dysfunctional home. The govt/media/church + +Our firmware is not built to be single-parented. You can counteract that +somewhat by exposing the kid to a community of close friends, but not too +many do that. + +> has tried to make it look like there is a disintegration, when in +> fact, there is a coming together of other family members and friends +> to raise children. It's not decaying -- it's changing. Nothing wrong +> with change. + +I don't know what exactly is wrong, but something is definitely wrong. +This is way too important to be left to just our intuition of what is +right and what is wrong. + +> > At least from the viewpoint of demographics sustainability and +> > counterpressure to gerontocracy and resulting innovatiophobia we're doing +> > something wrong. +> > +> > Maybe we should really go dirty Tleilaxu all the way. +> > +> +> Maybe y'all should buy m-w some more bandwidth. + +m-w? + + diff --git a/Ch3/datasets/spam/easy_ham/00463.4d93152b4c4c397486807b53501aed8b b/Ch3/datasets/spam/easy_ham/00463.4d93152b4c4c397486807b53501aed8b new file mode 100644 index 000000000..db91652cd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00463.4d93152b4c4c397486807b53501aed8b @@ -0,0 +1,49 @@ +From fork-admin@xent.com Fri Sep 6 15:28:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4F35B16F6B + for ; Fri, 6 Sep 2002 15:26:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 15:26:08 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86Ck4C07281 for ; + Fri, 6 Sep 2002 13:46:05 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C255B29429D; Fri, 6 Sep 2002 05:43:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from imo-m10.mx.aol.com (imo-m10.mx.aol.com [64.12.136.165]) by + xent.com (Postfix) with ESMTP id 7F28229429C for ; + Fri, 6 Sep 2002 05:42:08 -0700 (PDT) +Received: from ThosStew@aol.com by imo-m10.mx.aol.com (mail_out_v34.10.) + id 9.ac.2ce1f831 (30950); Fri, 6 Sep 2002 08:44:38 -0400 (EDT) +From: ThosStew@aol.com +Message-Id: +Subject: Re: sprint delivers the next big thing?? +To: hussein@stanfordalumni.org, fork@spamassassin.taint.org +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Mailer: AOL 5.0 for Mac sub 45 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 08:44:38 EDT + +these are being advertised all over the UK/ Chief come-on seems to be to the +same people who use phones for text messaging--i.e. teenagers. "Hi, we're at +the beach and I met this awesome guy--here's his pic" + +Tom + + diff --git a/Ch3/datasets/spam/easy_ham/00464.5a7f552394a07524c4aa23b06c9e5915 b/Ch3/datasets/spam/easy_ham/00464.5a7f552394a07524c4aa23b06c9e5915 new file mode 100644 index 000000000..eb6056bc5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00464.5a7f552394a07524c4aa23b06c9e5915 @@ -0,0 +1,74 @@ +From fork-admin@xent.com Fri Sep 6 15:28:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B5D3C16F6C + for ; Fri, 6 Sep 2002 15:26:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 15:26:09 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86Dh7C09364 for ; + Fri, 6 Sep 2002 14:43:08 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C420A2942A1; Fri, 6 Sep 2002 06:40:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f229.law15.hotmail.com [64.4.23.229]) by + xent.com (Postfix) with ESMTP id 88E6C2942A0 for ; + Fri, 6 Sep 2002 06:39:09 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Fri, 6 Sep 2002 06:41:46 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Fri, 06 Sep 2002 13:41:46 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 06 Sep 2002 13:41:46.0632 (UTC) FILETIME=[24E17880:01C255AB] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 06 Sep 2002 13:41:46 +0000 + +Eugen Leitl: +>Clearly our non-silly non-antiquated ideas about relationships have +>resulted in mostly short-duration relationships and single-parented, +>dysfunctional kids .. + +Don't swallow too quickly what you have read about +more traditional cultures, today or in the past. Do +we have any statistics on the poor man's divorce from +centuries past? Are you so sure that the kids in 18th +century England were any more "functional" than those +today? What about 20th century Saudi Arabia? + +>At least from the viewpoint of demographics sustainability and +>counterpressure to gerontocracy and resulting innovatiophobia we're doing +>something wrong. + +Granting your first two points, I'm skeptical about +the last. Do you see ANY signs that America specifically +or the west generally are suffering from lack of +innovation, vis-a-vis youth nations such as Iran? The +last I read, the third generation of the revolution all +(a) want to move to America, and (b) failing that, are +importing everything they can American. + + +_________________________________________________________________ +Join the world’s largest e-mail service with MSN Hotmail. +http://www.hotmail.com + + diff --git a/Ch3/datasets/spam/easy_ham/00465.772004398b9f98bc63ab9c603b10ce08 b/Ch3/datasets/spam/easy_ham/00465.772004398b9f98bc63ab9c603b10ce08 new file mode 100644 index 000000000..745eaf958 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00465.772004398b9f98bc63ab9c603b10ce08 @@ -0,0 +1,98 @@ +From fork-admin@xent.com Fri Sep 6 15:28:17 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8507E16F6D + for ; Fri, 6 Sep 2002 15:26:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 15:26:11 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86Dx4C09730 for ; + Fri, 6 Sep 2002 14:59:05 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 617C82942A3; Fri, 6 Sep 2002 06:56:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id EC5C22941F0 for + ; Fri, 6 Sep 2002 06:55:15 -0700 (PDT) +Received: (qmail 18986 invoked by uid 508); 6 Sep 2002 13:57:51 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.31) by + venus.phpwebhosting.com with SMTP; 6 Sep 2002 13:57:51 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g86DvlS07637; Fri, 6 Sep 2002 15:57:47 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: Russell Turpin +Cc: +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 15:57:47 +0200 (CEST) + +On Fri, 6 Sep 2002, Russell Turpin wrote: + +> Don't swallow too quickly what you have read about +> more traditional cultures, today or in the past. Do + +I don't swallow ;> + +I was just offering anecdotal first-hand experiences from a number of +cultures indicating 1) we apparently have a problem 2) which requires more +than ad hoc hand-waving approach (it's trivial! it's obvious! all we have +to do is XY!). + +> we have any statistics on the poor man's divorce from +> centuries past? Are you so sure that the kids in 18th + +That's easy. Divorce didn't happen. The church and the society looked +after that. Only relatively recently that privilege was granted to kings, +and only very recently to commoners. + +> century England were any more "functional" than those +> today? What about 20th century Saudi Arabia? + +Is Saudi Arabia a meaningful emigration source? + +> >At least from the viewpoint of demographics sustainability and +> >counterpressure to gerontocracy and resulting innovatiophobia we're doing +> >something wrong. +> +> Granting your first two points, I'm skeptical about +> the last. Do you see ANY signs that America specifically + +I wasn't talking about the US specifically. (Though the demographics +problem exists there as well, albeit not in that extent we Eurotrash are +facing right now). + +> or the west generally are suffering from lack of +> innovation, vis-a-vis youth nations such as Iran? The + +1) I'm seeing lack of innovation, and -- more disturbing -- trend towards +even less innovation by an autocatalytic process (gerontocracy favors +gerontocracy). + +> last I read, the third generation of the revolution all +> (a) want to move to America, and (b) failing that, are +> importing everything they can American. + +My point was that the west, US first and foremost, importing innovation +carriers and working against bad trend in the demographics by large scale +import. While this kinda, sorta works on the short run, this is not +something sustainable. + + diff --git a/Ch3/datasets/spam/easy_ham/00466.cfc9f0d8a4e28c000bc8962d4d3924d9 b/Ch3/datasets/spam/easy_ham/00466.cfc9f0d8a4e28c000bc8962d4d3924d9 new file mode 100644 index 000000000..6e11574ae --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00466.cfc9f0d8a4e28c000bc8962d4d3924d9 @@ -0,0 +1,84 @@ +From fork-admin@xent.com Fri Sep 6 15:28:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CD1FC16F03 + for ; Fri, 6 Sep 2002 15:26:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 15:26:06 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869uDC29684 for + ; Fri, 6 Sep 2002 10:56:14 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id WAA18500 for ; Thu, 5 Sep 2002 22:03:22 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B4C442940CF; Thu, 5 Sep 2002 14:00:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx1.ucsc.edu [128.114.129.36]) by + xent.com (Postfix) with ESMTP id 63F082940AA for ; + Thu, 5 Sep 2002 13:59:20 -0700 (PDT) +Received: from Tycho (dhcp-63-177.cse.ucsc.edu [128.114.63.177]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g85L1cq01833 for + ; Thu, 5 Sep 2002 14:01:38 -0700 (PDT) +From: "Jim Whitehead" +To: "FoRK" +Subject: SoE at UCSC looking for an experienced IT support person +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Importance: Normal +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 5 Sep 2002 13:59:19 -0700 + +Hi all, + +We're looking for an experienced IT support person in the School of +Engineering at UC Santa Cruz -- please foward to anyone who you think might +be interested. + +- Jim + +-----Original Message----- +From: Michael Perrone [mailto:mperrone@cs.ucsc.edu] +Sent: Thursday, September 05, 2002 12:31 PM +To: techstaff@cse.ucsc.edu +Subject: Recruiting for PAIII-IV Supervisor + + + +Dear SoE Community, + +Forgive the spam, but I wanted to make sure that everyone is aware that +we are recruiting to replace the position vacated by Gary Moro. + +This is a technical position with supervisor responsibilities. The focus is +on Solaris and Linux systems administration with Veritas and Irix experience +a plus. + +The posting is here: + +http://www2.ucsc.edu/staff_hr/employment/listings/020809.htm + +Regards, + +Michael Perrone + + diff --git a/Ch3/datasets/spam/easy_ham/00467.db0549489738f320732f286f74986743 b/Ch3/datasets/spam/easy_ham/00467.db0549489738f320732f286f74986743 new file mode 100644 index 000000000..55d9d5a86 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00467.db0549489738f320732f286f74986743 @@ -0,0 +1,77 @@ +From fork-admin@xent.com Fri Sep 6 15:28:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 281FE16F6E + for ; Fri, 6 Sep 2002 15:26:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 15:26:15 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86EPWC10780 for ; + Fri, 6 Sep 2002 15:25:35 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1C3CB2942AA; Fri, 6 Sep 2002 07:18:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain + (pool-162-83-146-23.ny5030.east.verizon.net [162.83.146.23]) by xent.com + (Postfix) with ESMTP id 9CC6B2942A9 for ; Fri, + 6 Sep 2002 07:17:28 -0700 (PDT) +Received: from localhost (lgonze@localhost) by localhost.localdomain + (8.11.6/8.11.6) with ESMTP id g86EE0508904 for ; + Fri, 6 Sep 2002 10:14:01 -0400 +X-Authentication-Warning: localhost.localdomain: lgonze owned process + doing -bs +From: Lucas Gonze +X-X-Sender: lgonze@localhost.localdomain +Cc: FoRK +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 10:14:00 -0400 (EDT) + + +Related anecdote: + +I was eating in a restaurant in chinatown in Boston. The place was empty. +The only other customer was a white guy reading an asian-language +newspaper. The guy asked the waiter for help translating a word. +Eventually his story came out. + +He had married an asian woman through one of these introduction services. +after about a year of marriage she had charged him with assault and left +him, leaving no contact information. He was hanging around in Chinatown, +asking random asians for help finding her. + +I obviously don't know if he did assault her, but what struck me was that +the possibility of mutual exploitation is high. + +Anecdote number two: + +In college I had a job as a street vendor. There was a guy I worked with +who was a lifer in the job. He was a noticably messed up guy. Among +other odd characteristics he fawned on women customers, doing stuff like +offering them flowers. + +I asked him about it. He said that he'd never had sex with a woman who +wasn't a prostitute, and his dream was to save up enough money to get a +mail order bride. + +I was really moved. The guy was a loon, but he wanted a companion as much +as anyone else and he was realistic about his chances. + + diff --git a/Ch3/datasets/spam/easy_ham/00468.0aeb96f2dc4a95abedb750a6cff7f343 b/Ch3/datasets/spam/easy_ham/00468.0aeb96f2dc4a95abedb750a6cff7f343 new file mode 100644 index 000000000..05dfb4785 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00468.0aeb96f2dc4a95abedb750a6cff7f343 @@ -0,0 +1,54 @@ +From fork-admin@xent.com Fri Sep 6 15:28:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B5C8216F1C + for ; Fri, 6 Sep 2002 15:26:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 15:26:13 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86EK4C10630 for ; + Fri, 6 Sep 2002 15:20:04 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 90D1129429A; Fri, 6 Sep 2002 07:17:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id BEACE2941EC for ; Fri, + 6 Sep 2002 07:16:44 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 033B23ED7E; + Fri, 6 Sep 2002 10:22:35 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 01C213ED56 for ; Fri, + 6 Sep 2002 10:22:34 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: The Needle and the damage done +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 10:22:34 -0400 (EDT) + +>>From the Hoax or Hack Dept: +Digital Needle - A Virtual Gramophone , a reported method to scan yourr +old LPs on a flat bed scanner and then use the resulting images to make +MP3's of the fine playing conatined therein. Its all still sketchy to the +point of possible hoaxdom, but the idea is dang interesting. + +http://www.cs.huji.ac.il/~springer/ + + + + diff --git a/Ch3/datasets/spam/easy_ham/00469.b1d31cab7c1b3b5897393f46ce62b3e9 b/Ch3/datasets/spam/easy_ham/00469.b1d31cab7c1b3b5897393f46ce62b3e9 new file mode 100644 index 000000000..c88698e92 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00469.b1d31cab7c1b3b5897393f46ce62b3e9 @@ -0,0 +1,81 @@ +From fork-admin@xent.com Fri Sep 6 18:24:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 45BAE16F1A + for ; Fri, 6 Sep 2002 18:23:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 18:23:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86G14C13913 for ; + Fri, 6 Sep 2002 17:01:05 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D9ACF2940B7; Fri, 6 Sep 2002 08:58:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f66.law15.hotmail.com [64.4.23.66]) by + xent.com (Postfix) with ESMTP id CEB102940AE for ; + Fri, 6 Sep 2002 08:57:57 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Fri, 6 Sep 2002 09:00:35 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Fri, 06 Sep 2002 16:00:34 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 06 Sep 2002 16:00:35.0000 (UTC) FILETIME=[88F99380:01C255BE] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 06 Sep 2002 16:00:34 +0000 + +Turpin: +>>Do we have any statistics on the poor man's divorce from centuries past? + +Eugen Leitl: +>That's easy. Divorce didn't happen. + +You seem not to know what a "poor man's divorce" is. +It is an old term, from the time when divorce was +difficult, but walking was easy, and identity was +not so locked down as it is today. Not every widow +had a dead husband. + +>I'm seeing lack of innovation .. + +That doesn't tell us anything except what is +happening in Eugen Leitl's life. The more common +observation is that the rate of change is increasing. +Do you have any data that might persuade us that what +you see is more telling than what others see? + +>gerontocracy favors gerontocracy. + +I would have thought that gerontocracy favors biotech +research and plenty of young workers to pay taxes. +Note that the fertility rate doesn't result from +decisions made by the old, but by the young. If we +want more kids, we have to convince people who are +in their twenties to become parents. + + + + +_________________________________________________________________ +Join the world’s largest e-mail service with MSN Hotmail. +http://www.hotmail.com + + diff --git a/Ch3/datasets/spam/easy_ham/00470.efaf4cc30f0107b82eaee72c68af5bec b/Ch3/datasets/spam/easy_ham/00470.efaf4cc30f0107b82eaee72c68af5bec new file mode 100644 index 000000000..47d8e5093 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00470.efaf4cc30f0107b82eaee72c68af5bec @@ -0,0 +1,94 @@ +From fork-admin@xent.com Fri Sep 6 18:35:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C343816F03 + for ; Fri, 6 Sep 2002 18:35:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 18:35:53 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86HO6C16793 for ; + Fri, 6 Sep 2002 18:24:12 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D61E22940BD; Fri, 6 Sep 2002 10:21:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 7796729409E for + ; Fri, 6 Sep 2002 10:20:47 -0700 (PDT) +Received: (qmail 32622 invoked by uid 508); 6 Sep 2002 17:19:18 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.31) by + venus.phpwebhosting.com with SMTP; 6 Sep 2002 17:19:18 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g86HJEt13411; Fri, 6 Sep 2002 19:19:14 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: Russell Turpin +Cc: +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 19:19:14 +0200 (CEST) + +On Fri, 6 Sep 2002, Russell Turpin wrote: + +> You seem not to know what a "poor man's divorce" is. + +I know very little in general. I hope you can excuse me for that. + +> It is an old term, from the time when divorce was +> difficult, but walking was easy, and identity was +> not so locked down as it is today. Not every widow +> had a dead husband. + +Yeah, you could always run away, strangle your wife, your wife could +always poison you, scooby dooby doo. It wasn't the rule, and I don't feel +like desintegrating into a nitpicking orgy. You win. + +> >I'm seeing lack of innovation .. +> +> That doesn't tell us anything except what is +> happening in Eugen Leitl's life. The more common + +Yeah, I happen to live in a small hole, under the roots of an old oak +tree. You don't, so innovation is a global phenomenon. + +> observation is that the rate of change is increasing. +> Do you have any data that might persuade us that what +> you see is more telling than what others see? +> +> >gerontocracy favors gerontocracy. +> +> I would have thought that gerontocracy favors biotech +> research and plenty of young workers to pay taxes. + +So thought I, but apparently all it favours is a lot of whining about good +old times, the inability of youngn's to pay for your pension and the +health insurance, and the generic influx of uncouth furriners, which must +be stopped, Somehow. + +> Note that the fertility rate doesn't result from +> decisions made by the old, but by the young. If we + +Uh, I'm kinda aware of that. + +> want more kids, we have to convince people who are +> in their twenties to become parents. + +Now we're talking. Got a plan? + + diff --git a/Ch3/datasets/spam/easy_ham/00471.4275aa8908e9754226118eb99aad8c6d b/Ch3/datasets/spam/easy_ham/00471.4275aa8908e9754226118eb99aad8c6d new file mode 100644 index 000000000..3c5f487db --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00471.4275aa8908e9754226118eb99aad8c6d @@ -0,0 +1,59 @@ +From fork-admin@xent.com Fri Sep 6 18:46:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BE30A16F16 + for ; Fri, 6 Sep 2002 18:46:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 18:46:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86Hk6C18090 for ; + Fri, 6 Sep 2002 18:46:07 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B620029429E; Fri, 6 Sep 2002 10:43:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx2.ucsc.edu [128.114.129.35]) by + xent.com (Postfix) with ESMTP id 58941294296 for ; + Fri, 6 Sep 2002 10:42:24 -0700 (PDT) +Received: from Tycho (dhcp-63-177.cse.ucsc.edu [128.114.63.177]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g86GvAT00774 for + ; Fri, 6 Sep 2002 09:57:11 -0700 (PDT) +From: "Jim Whitehead" +To: "FoRK" +Subject: Googlecooking +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 09:54:52 -0700 + +Originally linked by Dave's Scripting News: + +http://www.megnut.com/archive.asp?which=2002_09_01_archive.inc#000194 + +We've got Googlewhacking, Googlebombing and now we can add Googlecooking to +our lexicon. My mother types whatever ingredients she has on hand into +Google and then picks the most appealing recipe returned in the results. +What a good idea! + +- Jim + + diff --git a/Ch3/datasets/spam/easy_ham/00472.32120f66ef86d03baf663889b0235d94 b/Ch3/datasets/spam/easy_ham/00472.32120f66ef86d03baf663889b0235d94 new file mode 100644 index 000000000..2f24520a5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00472.32120f66ef86d03baf663889b0235d94 @@ -0,0 +1,55 @@ +From fork-admin@xent.com Fri Sep 6 18:46:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7F8BB16F03 + for ; Fri, 6 Sep 2002 18:46:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 18:46:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86Hf4C17954 for ; + Fri, 6 Sep 2002 18:41:05 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9ED6F29428A; Fri, 6 Sep 2002 10:38:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx2.ucsc.edu [128.114.129.35]) by + xent.com (Postfix) with ESMTP id 28C23294288 for ; + Fri, 6 Sep 2002 10:37:46 -0700 (PDT) +Received: from Tycho (dhcp-63-177.cse.ucsc.edu [128.114.63.177]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g86HTJT04034 for + ; Fri, 6 Sep 2002 10:29:19 -0700 (PDT) +From: "Jim Whitehead" +To: "FoRK" +Subject: Hoag's Object +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 10:27:00 -0700 + +http://oposite.stsci.edu/pubinfo/pr/2002/21/ +(Shows a picture of a wheel within a wheel galaxy). + +The universe is a strange and wonderful place. + +- Jim + + diff --git a/Ch3/datasets/spam/easy_ham/00473.18c8849136c818c42e6429e94bb42f6a b/Ch3/datasets/spam/easy_ham/00473.18c8849136c818c42e6429e94bb42f6a new file mode 100644 index 000000000..04f67d4de --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00473.18c8849136c818c42e6429e94bb42f6a @@ -0,0 +1,57 @@ +From fork-admin@xent.com Sat Sep 7 21:52:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6087E16EFC + for ; Sat, 7 Sep 2002 21:52:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:12 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86JS5C20937 for ; + Fri, 6 Sep 2002 20:28:06 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 270F329409F; Fri, 6 Sep 2002 12:25:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 78BE729409E for ; Fri, + 6 Sep 2002 12:24:50 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 7462C3ED61; + Fri, 6 Sep 2002 15:30:42 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 72E0A3ED56; Fri, 6 Sep 2002 15:30:42 -0400 (EDT) +From: Tom +To: Russell Turpin +Cc: fork@spamassassin.taint.org +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 15:30:42 -0400 (EDT) + +On Fri, 6 Sep 2002, Russell Turpin wrote: +--]want more kids, we have to convince people who are +--]in their twenties to become parents. +--] + +Hey give me a break, I was working on finding the right mate. Once I did, +boomsky theres a puppy and if you would kindly not put on So much preasure +there culd well be another. +3 is a magic number...yes it is , its a magic number + + + + diff --git a/Ch3/datasets/spam/easy_ham/00474.df7437b06e0b8725f8309196ba8dd09d b/Ch3/datasets/spam/easy_ham/00474.df7437b06e0b8725f8309196ba8dd09d new file mode 100644 index 000000000..4c118596d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00474.df7437b06e0b8725f8309196ba8dd09d @@ -0,0 +1,80 @@ +From fork-admin@xent.com Sat Sep 7 21:52:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 568B316F16 + for ; Sat, 7 Sep 2002 21:52:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:16 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86Jl5C21549 for ; + Fri, 6 Sep 2002 20:47:05 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 20ACF294172; Fri, 6 Sep 2002 12:44:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx2.ucsc.edu [128.114.129.35]) by + xent.com (Postfix) with ESMTP id 7303329409E for ; + Fri, 6 Sep 2002 12:43:25 -0700 (PDT) +Received: from Tycho (dhcp-63-177.cse.ucsc.edu [128.114.63.177]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g86HQXT03756; Fri, + 6 Sep 2002 10:26:33 -0700 (PDT) +From: "Jim Whitehead" +To: "Eugen Leitl" , +Subject: RE: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 10:24:14 -0700 + +> Clearly our non-silly non-antiquated ideas about relationships have +> resulted in mostly short-duration relationships and single-parented, +> dysfunctional kids (not enough of them too boot, so to keep our +> demographics from completely keeling over we're importing them from places +> with mostly silly and antiquated ideas). +> +> At least from the viewpoint of demographics sustainability and +> counterpressure to gerontocracy and resulting innovatiophobia we're doing +> something wrong. + +There was a fascinating article in the Economist 1-2 weeks back (the issue +with a pregnant-looking Statue of Liberty on the Front) that stated that +even for the native US population, fertility had jumped in the last decade +and a half. I think the current figure for the US is a little over 2, but +not quite the ~2.1 of replacement rate. Combined with the very fertile +non-native population, the article implied the US was going to have a +significant increase in population over earlier predictions. As well, the +population would overall be more youthful, with associated implications for +being able to fund social programs, military spending, consumer spending, +etc. + +Europe did not show the same increase in fertility. + +Some actual data for the US are here: + +http://www.census.gov/population/pop-profile/2000/chap04.pdf +Part of: +http://www.census.gov/population/www/pop-profile/profile2000.html + +- Jim + + diff --git a/Ch3/datasets/spam/easy_ham/00475.90154e8e3f3761b155d35323f54aaad7 b/Ch3/datasets/spam/easy_ham/00475.90154e8e3f3761b155d35323f54aaad7 new file mode 100644 index 000000000..9986089ca --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00475.90154e8e3f3761b155d35323f54aaad7 @@ -0,0 +1,63 @@ +From fork-admin@xent.com Sat Sep 7 21:52:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 086B516F17 + for ; Sat, 7 Sep 2002 21:52:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:18 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86KG4C22437 for ; + Fri, 6 Sep 2002 21:16:08 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BA2A92940AE; Fri, 6 Sep 2002 13:13:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx1.ucsc.edu [128.114.129.36]) by + xent.com (Postfix) with ESMTP id 15ADE29409E for ; + Fri, 6 Sep 2002 13:12:53 -0700 (PDT) +Received: from Tycho (dhcp-63-177.cse.ucsc.edu [128.114.63.177]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g86K17q07388 for + ; Fri, 6 Sep 2002 13:01:08 -0700 (PDT) +From: "Jim Whitehead" +To: "FoRK" +Subject: Google? Not in China +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 12:58:46 -0700 + +In a slightly old news story, it turns out the Chinese government has banned +all access to the Google and AltaVista search engines. + +http://www.nytimes.com/2002/09/04/international/asia/04BEIJ.html +http://www.bayarea.com/mld/bayarea/business/3996218.htm +http://news.bbc.co.uk/1/hi/technology/2233229.stm +http://news.bbc.co.uk/1/hi/technology/2238236.stm + +The reason appears to be the Google cache feature. I can only imagine the +Internet Archive will soon follow, if it isn't already blocked. + +Seems that governments do have some power over the Web, after all. + +- Jim + + diff --git a/Ch3/datasets/spam/easy_ham/00476.7133902476448f294ee064117d96c988 b/Ch3/datasets/spam/easy_ham/00476.7133902476448f294ee064117d96c988 new file mode 100644 index 000000000..bb909af89 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00476.7133902476448f294ee064117d96c988 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Sat Sep 7 21:52:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C977A16F03 + for ; Sat, 7 Sep 2002 21:52:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:13 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86JWFC21196 for ; + Fri, 6 Sep 2002 20:32:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7A3DE294176; Fri, 6 Sep 2002 12:29:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 7218E294172 for ; Fri, + 6 Sep 2002 12:28:48 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 92ED43ED61; + Fri, 6 Sep 2002 15:34:40 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 9083D3ED56; Fri, 6 Sep 2002 15:34:40 -0400 (EDT) +From: Tom +To: Jim Whitehead +Cc: FoRK +Subject: Re: Googlecooking +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 15:34:40 -0400 (EDT) + +On Fri, 6 Sep 2002, Jim Whitehead wrote: +--]We've got Googlewhacking, Googlebombing and now we can add Googlecooking to +--]our lexicon. My mother types whatever ingredients she has on hand into +--]Google and then picks the most appealing recipe returned in the results. +--]What a good idea! + + +Dude, this is at least two years old and probably older. Of course we had +a more catchy phrase for it, we call it Iron Chef Google. + +When the garden was in full bloom a few summers back Dawn and I would +google the ingrediants we just grew to come up with tasty recipes, or more +often ideas from recipes from which toi make our own. + +Fight the hypebuzzword war, be an army of one:)- + +-tom (iron che tempah)wsmf + + + diff --git a/Ch3/datasets/spam/easy_ham/00477.ae6b0e13cfb834b905857a31327dda32 b/Ch3/datasets/spam/easy_ham/00477.ae6b0e13cfb834b905857a31327dda32 new file mode 100644 index 000000000..003abf04b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00477.ae6b0e13cfb834b905857a31327dda32 @@ -0,0 +1,121 @@ +From fork-admin@xent.com Sat Sep 7 21:52:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8281416F18 + for ; Sat, 7 Sep 2002 21:52:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:19 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86KLLC22654 for ; + Fri, 6 Sep 2002 21:21:21 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 21833294287; Fri, 6 Sep 2002 13:16:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm0-8.sba1.netlojix.net + [207.71.218.8]) by xent.com (Postfix) with ESMTP id 55EC929427E for + ; Fri, 6 Sep 2002 13:15:34 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id NAA21491; + Fri, 6 Sep 2002 13:25:33 -0700 +Message-Id: <200209062025.NAA21491@maltesecat> +To: fork@spamassassin.taint.org +Subject: Re: asynchronous I/O (was Re: Gasp!) +In-Reply-To: Message from fork-request@xent.com of + "Fri, 06 Sep 2002 06:25:37 PDT." + <20020906132537.6311.58517.Mailman@lair.xent.com> +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 06 Sep 2002 13:25:32 -0700 + + + +> Wrong, [VMS-like async io] makes a huge difference in even what I +> consider small programs. + +So it sounds as if, to your thinking, +most useful apps are also trivial. +Unless each key on my keyboard were +(to the apps) distinct event sources, +I can't think of any of my usual job +mix that would need hundreds, or even +tens, of async requests; perhaps you +can explain how nontrivial apps will +be compellingly useful? + +> but it's still not built in, who knows when it will be. The point is it's +> not portable in either case. + +Does that lack of portability imply it +isn't generally useful? (When it was +apparent that TCP networks were useful, +berkeley sockets could be found even +on VMS and Win 3.1 boxen) + +Why would early Unix have run with the +idea that, if one wishes to do multiple +things at the same time, one can use a +group of processes to do them? + +- they had Multics as a counterexample? + +- in the days of tiny memories and tapes, + people were more accustomed to writing + programs that didn't run entirely in a + single address space? + +- one is a great number for an interface, + as log(1) is 0, and specification can + be implicit? + +- some combination of the above? + +Now, as Hoare says: +> There are two ways of constructing a software design. One way is to make +> it so simple that there are obviously no deficiencies and the other is to +> make it so complicated that there are no obvious deficiencies. + +As programmers, we've been able to make +our lives complicated for at least half +a century; the hardware interrupt gives +us the rope. + +Part of Dijkstra's inspiration for THE +was the counterexample of IBM's multi- +programmed boxes (were these the same +ones that inspired Mythical Man Month?) +and I suppose he would say the question +is how not to make a mess of it -- how +should we structure computations so if +we try to do ten times as many things +at the same time, reasoning about the +resulting system is at most ten times +more complex -- not one hundred, and +certainly not three and a half million +times more. + +Compared to that project, the prospect +of writing a driver library for various +vendors' aio implementations seems to +be truly trivial. + +-Dave + +(Oracle, in their quest for portability, +used to use raw disks for the database. +This finessed the filesystem issue; did +it also allow them to roll their own set +of async drivers?) + + diff --git a/Ch3/datasets/spam/easy_ham/00478.416296a9700921997bbda37e62c65035 b/Ch3/datasets/spam/easy_ham/00478.416296a9700921997bbda37e62c65035 new file mode 100644 index 000000000..d07142988 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00478.416296a9700921997bbda37e62c65035 @@ -0,0 +1,122 @@ +From fork-admin@xent.com Sat Sep 7 21:52:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4938B16F1A + for ; Sat, 7 Sep 2002 21:52:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g871S7C02024 for ; + Sat, 7 Sep 2002 02:28:08 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1F1F42940A2; Fri, 6 Sep 2002 18:25:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 31EAE29409E for + ; Fri, 6 Sep 2002 18:24:02 -0700 (PDT) +Received: (qmail 16015 invoked by uid 501); 7 Sep 2002 01:26:31 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 7 Sep 2002 01:26:31 -0000 +From: CDale +To: Eugen Leitl +Cc: bitbitch@magnesium.net, "Adam L. Beberg" , + +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 20:26:31 -0500 (CDT) + +On Fri, 6 Sep 2002, Eugen Leitl wrote: + +> On Fri, 6 Sep 2002, CDale wrote: +> +> > It also depends on what the fad is or what is in style. (: +> +> DNA's idea of fads is on the 100 kiloyear scale, unfortunately. As long as +> current fads don't involve in-vivo rewrite of the genome, homeoboxes +> including (now there's a problem for you, homeoboxing the adult), they're +> not all that smart an idear. + +I forgot what we were taking about. (: + +> +> > Actualy our silly antiquated ideas about relationships and love have +> > resulted in the bleedings of many upon many a page (and musical +> > instrumnet, and canvas) What's the problem if we dash a little Mrs. +> +> Art is sure nice. However, if art is our first priority we're kinda +> fux0red, if we've set our sight on a sustainable culture. + +Nah, didn't say art's our priority. Said our ideas about relationships +and love are. + +> > And let me tell you this: just because a child happens to be +> > single-parented (what a word), does not mean that child is +> > dysfunctional or lives in a dysfunctional home. The govt/media/church +> +> Our firmware is not built to be single-parented. You can counteract that +> somewhat by exposing the kid to a community of close friends, but not too +> many do that. + +I see it a lot in the south. Also family. + +> +> > has tried to make it look like there is a disintegration, when in +> > fact, there is a coming together of other family members and friends +> > to raise children. It's not decaying -- it's changing. Nothing wrong +> > with change. +> +> I don't know what exactly is wrong, but something is definitely wrong. +> This is way too important to be left to just our intuition of what is +> right and what is wrong. + +One thing that's wrong is who some of us choose as babysitters. Too many +kids are put in front of the television for hours each day, to be +influenced by what the media and government thinks is important. I +learned a long time ago that what they think is important and what is are +two different things. I threw the TV out when Xi was 9. She's got her +own place now, and still doesn't have one. YaY! Another thing that's +wrong is what goes on in public schools. Some allow a bit of +individuality, but only for a class or a short period of time, depending +on the teachers, most of the time. I dunno how many times I've seen Xi +come home from school absolutely miserable or outraged about something +that happened at school. She made it to college, though, whew. It's a +big problem to tackle, and I don't know the answer. I like the idea of +the voucher system, because in a way it is a way parents can vote more +efficiently for how their kids are taught. + + +> > > > At least from the viewpoint of demographics sustainability and +> > > counterpressure to gerontocracy and resulting innovatiophobia we're doing +> > > something wrong. +> > > +> > > Maybe we should really go dirty Tleilaxu all the way. +> > > +> > +> > Maybe y'all should buy m-w some more bandwidth. +> +> m-w? +> +merriam-webster. (: +C + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00479.1bf2cda4c4b42b94b9b0b14ecb9f826c b/Ch3/datasets/spam/easy_ham/00479.1bf2cda4c4b42b94b9b0b14ecb9f826c new file mode 100644 index 000000000..bc306c119 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00479.1bf2cda4c4b42b94b9b0b14ecb9f826c @@ -0,0 +1,77 @@ +From fork-admin@xent.com Sat Sep 7 21:52:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 51EE716F1B + for ; Sat, 7 Sep 2002 21:52:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:25 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8721FC02762 for ; + Sat, 7 Sep 2002 03:01:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6472E2940B0; Fri, 6 Sep 2002 18:58:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id BA46729409E for ; + Fri, 6 Sep 2002 18:57:38 -0700 (PDT) +Received: (qmail 21595 invoked from network); 7 Sep 2002 02:00:15 -0000 +Received: from unknown (HELO maya.dyndns.org) (165.154.190.91) by + smtp1.superb.net with SMTP; 7 Sep 2002 02:00:15 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 9307D1C0B3; + Fri, 6 Sep 2002 21:54:41 -0400 (EDT) +To: "Jim Whitehead" +Cc: "FoRK" +Subject: Re: Google? Not in China +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 06 Sep 2002 21:54:41 -0400 + +>>>>> "J" == Jim Whitehead writes: + + J> Seems that governments do have some power over the + J> Web, after all. + +At the 1993 ITAC "Roadwork" Conference, Peter Mansbridge asked the +panel of experts how it might be possible to censor the internet. All +of the panelists laughed except Bill Buxton. Peter asked him if he +knew something the others didn't. Bill replied that it /was/ possible +to censor the internet, which drew a gasp from the audience. "All you +need is a global government more Draconian than any that has occured +before in history" + +Scientology DMCA suits against Norwegians, legal RIAA file-trading +virii, Bush's Homeland Insecurity, Canada using ISPs as spies, RIAA +suing Prodigy for P2P users and having Foreign sites barred from the +US, France tempers Yahoo, China IP-filters Google ... + +Seems Bill didn't know much about how Government really works. Either +that, or there's a smelly similarity between Buxton's global Big +Brother and the US and Chinese. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00480.a12b636b1444ed8273930c901422c6d8 b/Ch3/datasets/spam/easy_ham/00480.a12b636b1444ed8273930c901422c6d8 new file mode 100644 index 000000000..3848fd695 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00480.a12b636b1444ed8273930c901422c6d8 @@ -0,0 +1,151 @@ +From fork-admin@xent.com Sat Sep 7 21:53:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0AE8916F1C + for ; Sat, 7 Sep 2002 21:52:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:27 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g872JEC03279 for ; + Sat, 7 Sep 2002 03:19:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7B44E2940BB; Fri, 6 Sep 2002 19:16:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id CF27929409E for ; + Fri, 6 Sep 2002 19:15:28 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17nVB4-0006lz-00; Fri, 06 Sep 2002 22:18:27 -0400 +From: "Geege Schuman" +To: "CDale" , +Cc: "Adam L. Beberg" , +Subject: RE: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 22:16:46 -0400 + +quitcherbraggin. + +:-) +gg + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of CDale +Sent: Friday, September 06, 2002 3:42 AM +To: bitbitch@magnesium.net +Cc: Adam L. Beberg; fork@spamassassin.taint.org +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) + + +I dunno, BB. Women who like to be thought of this way should have the +right to choose to be treated this way. Men too... ahem. (: My boy +cleans, washes clothes, cooks, fixes stuff, etc, and works the same number +of hours I do, sometimes more, if he has to catch up with me. (: I +close him because he is industrious and creative, and because he +unfailingly makes my bed the minute I get out of it. And boy #2 will be +here soon to help boy #1 with other things such as pedicures, backrubs, +and sure, fucking. LOL! (along with the aforementioned "chores") Adam can +have his cake and eat it too, if he can only find the right girl who has +the same beliefs about gender roles that he has. Of course, he has NO +clue where to look, so we will be constantly laughing at him while he +stumbles around in the dark. +Cindy +P.S. the numbers do not in any way indicate importance or favor -- only +the order in which they move into my house. -smiles at chris- +P.S. #2. I'm moving. Going to New Orleans. Can't handle any more cab +driving. The summer sucked here on the MS Gulf Coast, instead of rocking +like it normally does. Wish me luck. I'm going to look for another +computer job. Le Sigh. (: + +On Thu, 5 Sep 2002 bitbitch@magnesium.net wrote: + +> Hello Adam, +> +> Thursday, September 05, 2002, 11:33:18 PM, you wrote: +> +> +> ALB> So, you're saying that product bundling works? Good point. +> +> Sometimes I wish I was still in CA. You deserve a good beating every +> so often... (anyone else want to do the honors?) +> +> ALB> And how is this any different from "normal" marriage exactly? Other +then +> ALB> that the woman not only gets a man, but one in a country where both +she and +> ALB> her offspring will have actual opportunities? Oh and the lack of +> ALB> "de-feminized, over-sized, self-centered, mercenary-minded" choices? +> +> Mmkay. For the nth time Adam, we don't live in the land of +> Adam-fantasy. Women actually are allowed to do things productive, +> independent and entirely free of their male counterparts. They aren't +> forced to cook and clean and merely be sexual vessels. Sometimes, +> and this will come as a shock to you, no doubt, men and women even +> find -love- (which is the crucial distinction between this system) and +> they marry one another for the satisfaction of being together. I +> know, far-fetched and idealistically crazy as it is, but such things +> do happen. I can guarantee you, if my mother was approached by my +> father, and 25 years ago, he commented on her cleaning ability as a +> motivator for marrying her, we would not be having this conversation +> now. +> +> If guys still have silly antequated ideas about 'women's role' then +> their opportunities for finding women _will_ be scarce. Again, these +> situations are great, provided everyone is aware that the relationship +> is a contractual one -- he wants a maid, a dog and a prostitute he +> doesn't have to pay, and she wants a country that isn't impoverished +> and teeming with AIDS. A contract, versus a true love-interest +> marriage. +> +> Egh. I really need to stop analyzing your posts to this extent. I +> blame law school and my cat. +> +> -BB +> +> ALB> - Adam L. "Duncan" Beberg +> ALB> http://www.mithral.com/~beberg/ +> ALB> beberg@mithral.com +> +> +> +> +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00481.a7bee7a7de9cfdb9ad19c88c0440be61 b/Ch3/datasets/spam/easy_ham/00481.a7bee7a7de9cfdb9ad19c88c0440be61 new file mode 100644 index 000000000..a0a8480f4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00481.a7bee7a7de9cfdb9ad19c88c0440be61 @@ -0,0 +1,85 @@ +From fork-admin@xent.com Sat Sep 7 21:52:47 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 71A1E16F19 + for ; Sat, 7 Sep 2002 21:52:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:21 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g86LG7C24176 for ; + Fri, 6 Sep 2002 22:16:08 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B80DC29417A; Fri, 6 Sep 2002 14:13:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx1.ucsc.edu [128.114.129.36]) by + xent.com (Postfix) with ESMTP id AA50F29409E for ; + Fri, 6 Sep 2002 14:12:33 -0700 (PDT) +Received: from Tycho (dhcp-63-177.cse.ucsc.edu [128.114.63.177]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g86Kugq11953 for + ; Fri, 6 Sep 2002 13:56:43 -0700 (PDT) +From: "Jim Whitehead" +To: "FoRK" +Subject: Online contents of Electronic Publishing journal +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 13:54:21 -0700 + +I recently stumbled across the contents of the journal, "Electronic +Publishing", which was published from January, 1988 through December, 1995. +All papers are available online in PDF (this was apparently one of the first +journals to disseminate in PDF, in 1994). The journal also reprints some of +the better papers from the Electronic Publishing conferences, held bi-yearly +from 1986-1992 (EP86, EP88, EP90, EP92). + +http://cajun.cs.nott.ac.uk/compsci/epo/papers/epoddtoc.html + +Today's reader might look at the contents and wonder about their relevance, +since they don't directly discuss the Web. As an academic, I find this +journal valuable, since the papers are of generally high quality (by top +researchers), and they provide lots of pointers to the evolution of the +ideas that led to many Web technologies. It's one source among many for +sifting through the intellectual lineage of electronic publishing +technologies. + +Rohit and Adam might find the following papers especially relevant, in the +context of their WWW7 "Evolution of Document Species" paper: + +Page Description Languages: Development, Implementation and Standardization: +A. L. Oakley and A. C. Norris +http://cajun.cs.nott.ac.uk/compsci/epo/papers/volume1/issue2/epalo012.pdf + +Important papers in the history of document preparation systems: basic +sources: +Richard K. Furuta +http://cajun.cs.nott.ac.uk/compsci/epo/papers/volume5/issue1/ep057rf.pdf +(Excellent overview of sources) + +Several of the authors of papers in this journal are now involved in the ACM +Document Engineering conference series: +http://www.documentengineering.org/ + +- Jim + + + diff --git a/Ch3/datasets/spam/easy_ham/00482.6967f5ac2b3b99a8c940773658f4c406 b/Ch3/datasets/spam/easy_ham/00482.6967f5ac2b3b99a8c940773658f4c406 new file mode 100644 index 000000000..764e1a393 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00482.6967f5ac2b3b99a8c940773658f4c406 @@ -0,0 +1,149 @@ +From fork-admin@xent.com Sat Sep 7 21:53:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 19E2716F1E + for ; Sat, 7 Sep 2002 21:52:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:29 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g872ONC03451 for ; + Sat, 7 Sep 2002 03:24:23 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 46EAD2940E5; Fri, 6 Sep 2002 19:19:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id DDBAB2940D8 for + ; Fri, 6 Sep 2002 19:18:46 -0700 (PDT) +Received: (qmail 22857 invoked by uid 501); 7 Sep 2002 02:21:09 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 7 Sep 2002 02:21:09 -0000 +From: CDale +To: Geege Schuman +Cc: bitbitch@magnesium.net, "Adam L. Beberg" , + +Subject: RE: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 6 Sep 2002 21:21:09 -0500 (CDT) + +Why should I? (: +C + +On Fri, 6 Sep 2002, Geege Schuman wrote: + +> quitcherbraggin. +> +> :-) +> gg +> +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of CDale +> Sent: Friday, September 06, 2002 3:42 AM +> To: bitbitch@magnesium.net +> Cc: Adam L. Beberg; fork@spamassassin.taint.org +> Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +> +> +> I dunno, BB. Women who like to be thought of this way should have the +> right to choose to be treated this way. Men too... ahem. (: My boy +> cleans, washes clothes, cooks, fixes stuff, etc, and works the same number +> of hours I do, sometimes more, if he has to catch up with me. (: I +> close him because he is industrious and creative, and because he +> unfailingly makes my bed the minute I get out of it. And boy #2 will be +> here soon to help boy #1 with other things such as pedicures, backrubs, +> and sure, fucking. LOL! (along with the aforementioned "chores") Adam can +> have his cake and eat it too, if he can only find the right girl who has +> the same beliefs about gender roles that he has. Of course, he has NO +> clue where to look, so we will be constantly laughing at him while he +> stumbles around in the dark. +> Cindy +> P.S. the numbers do not in any way indicate importance or favor -- only +> the order in which they move into my house. -smiles at chris- +> P.S. #2. I'm moving. Going to New Orleans. Can't handle any more cab +> driving. The summer sucked here on the MS Gulf Coast, instead of rocking +> like it normally does. Wish me luck. I'm going to look for another +> computer job. Le Sigh. (: +> +> On Thu, 5 Sep 2002 bitbitch@magnesium.net wrote: +> +> > Hello Adam, +> > +> > Thursday, September 05, 2002, 11:33:18 PM, you wrote: +> > +> > +> > ALB> So, you're saying that product bundling works? Good point. +> > +> > Sometimes I wish I was still in CA. You deserve a good beating every +> > so often... (anyone else want to do the honors?) +> > +> > ALB> And how is this any different from "normal" marriage exactly? Other +> then +> > ALB> that the woman not only gets a man, but one in a country where both +> she and +> > ALB> her offspring will have actual opportunities? Oh and the lack of +> > ALB> "de-feminized, over-sized, self-centered, mercenary-minded" choices? +> > +> > Mmkay. For the nth time Adam, we don't live in the land of +> > Adam-fantasy. Women actually are allowed to do things productive, +> > independent and entirely free of their male counterparts. They aren't +> > forced to cook and clean and merely be sexual vessels. Sometimes, +> > and this will come as a shock to you, no doubt, men and women even +> > find -love- (which is the crucial distinction between this system) and +> > they marry one another for the satisfaction of being together. I +> > know, far-fetched and idealistically crazy as it is, but such things +> > do happen. I can guarantee you, if my mother was approached by my +> > father, and 25 years ago, he commented on her cleaning ability as a +> > motivator for marrying her, we would not be having this conversation +> > now. +> > +> > If guys still have silly antequated ideas about 'women's role' then +> > their opportunities for finding women _will_ be scarce. Again, these +> > situations are great, provided everyone is aware that the relationship +> > is a contractual one -- he wants a maid, a dog and a prostitute he +> > doesn't have to pay, and she wants a country that isn't impoverished +> > and teeming with AIDS. A contract, versus a true love-interest +> > marriage. +> > +> > Egh. I really need to stop analyzing your posts to this extent. I +> > blame law school and my cat. +> > +> > -BB +> > +> > ALB> - Adam L. "Duncan" Beberg +> > ALB> http://www.mithral.com/~beberg/ +> > ALB> beberg@mithral.com +> > +> > +> > +> > +> > +> > +> +> -- +> "I don't take no stocks in mathematics, anyway" --Huckleberry Finn +> +> +> +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00483.0ce5057dc155d6a6aca6c917b4eb0793 b/Ch3/datasets/spam/easy_ham/00483.0ce5057dc155d6a6aca6c917b4eb0793 new file mode 100644 index 000000000..521d1f817 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00483.0ce5057dc155d6a6aca6c917b4eb0793 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Sat Sep 7 21:53:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6060316F1F + for ; Sat, 7 Sep 2002 21:52:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:31 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g875g8C08186 for ; + Sat, 7 Sep 2002 06:42:09 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 624FC2940CE; Fri, 6 Sep 2002 22:39:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc01.attbi.com (sccrmhc01.attbi.com [204.127.202.61]) + by xent.com (Postfix) with ESMTP id D4B0F29409E for ; + Fri, 6 Sep 2002 22:38:28 -0700 (PDT) +Received: from Intellistation ([66.31.2.27]) by sccrmhc01.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020907054108.EMT9751.sccrmhc01.attbi.com@Intellistation> for + ; Sat, 7 Sep 2002 05:41:08 +0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Eirikur Hallgrimsson +Organization: Electric Brain +To: FoRK@xent.com +Subject: Re: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +User-Agent: KMail/1.4.1 +References: +In-Reply-To: +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200209070140.32845.eh@mad.scientist.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 7 Sep 2002 01:40:32 -0400 + +On Friday 06 September 2002 06:16 am, Eugen Leitl wrote: +> I don't know what exactly is wrong, but something is definitely wrong. +> This is way too important to be left to just our intuition of what is +> right and what is wrong. + +This is one of those formally difficult points from a philosophy +perspective. You can't really throw out intuition and emotion because +reason really only gets you answers that reflect the genome and the +ancestral environment. Going forward requires creativity and experiment. + +Eirikur + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00484.0196194ad15151d749ec445f38a2ab47 b/Ch3/datasets/spam/easy_ham/00484.0196194ad15151d749ec445f38a2ab47 new file mode 100644 index 000000000..dfd84543e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00484.0196194ad15151d749ec445f38a2ab47 @@ -0,0 +1,178 @@ +From fork-admin@xent.com Sat Sep 7 21:53:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6F27F16F20 + for ; Sat, 7 Sep 2002 21:52:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g87Df8C21641 for ; + Sat, 7 Sep 2002 14:41:09 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 231932940E9; Sat, 7 Sep 2002 06:38:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 0852229409E for + ; Sat, 7 Sep 2002 06:37:46 -0700 (PDT) +Received: (qmail 10557 invoked by uid 501); 7 Sep 2002 13:40:16 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 7 Sep 2002 13:40:16 -0000 +From: CDale +To: Geege Schuman +Cc: bitbitch@magnesium.net, "Adam L. Beberg" , + +Subject: RE: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 7 Sep 2002 08:40:16 -0500 (CDT) + +If it's unwritten, how'm I supposed to know unless someone CALLS me up and +tells me/ hint hint. LOL (: Well, I reckon it's a written rule now, +since it's on the internet in text format w/ your name attached, but then +again, when have I ever followed any damned rules??? (: +C + +On Sat, 7 Sep 2002, Geege Schuman wrote: + +> unwritten rule. 8-) +> +> gg +> +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of CDale +> Sent: Friday, September 06, 2002 10:21 PM +> To: Geege Schuman +> Cc: bitbitch@magnesium.net; Adam L. Beberg; fork@spamassassin.taint.org +> Subject: RE: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +> +> +> Why should I? (: +> C +> +> On Fri, 6 Sep 2002, Geege Schuman wrote: +> +> > quitcherbraggin. +> > +> > :-) +> > gg +> > +> > -----Original Message----- +> > From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of CDale +> > Sent: Friday, September 06, 2002 3:42 AM +> > To: bitbitch@magnesium.net +> > Cc: Adam L. Beberg; fork@spamassassin.taint.org +> > Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +> > +> > +> > I dunno, BB. Women who like to be thought of this way should have the +> > right to choose to be treated this way. Men too... ahem. (: My boy +> > cleans, washes clothes, cooks, fixes stuff, etc, and works the same number +> > of hours I do, sometimes more, if he has to catch up with me. (: I +> > close him because he is industrious and creative, and because he +> > unfailingly makes my bed the minute I get out of it. And boy #2 will be +> > here soon to help boy #1 with other things such as pedicures, backrubs, +> > and sure, fucking. LOL! (along with the aforementioned "chores") Adam can +> > have his cake and eat it too, if he can only find the right girl who has +> > the same beliefs about gender roles that he has. Of course, he has NO +> > clue where to look, so we will be constantly laughing at him while he +> > stumbles around in the dark. +> > Cindy +> > P.S. the numbers do not in any way indicate importance or favor -- only +> > the order in which they move into my house. -smiles at chris- +> > P.S. #2. I'm moving. Going to New Orleans. Can't handle any more cab +> > driving. The summer sucked here on the MS Gulf Coast, instead of rocking +> > like it normally does. Wish me luck. I'm going to look for another +> > computer job. Le Sigh. (: +> > +> > On Thu, 5 Sep 2002 bitbitch@magnesium.net wrote: +> > +> > > Hello Adam, +> > > +> > > Thursday, September 05, 2002, 11:33:18 PM, you wrote: +> > > +> > > +> > > ALB> So, you're saying that product bundling works? Good point. +> > > +> > > Sometimes I wish I was still in CA. You deserve a good beating every +> > > so often... (anyone else want to do the honors?) +> > > +> > > ALB> And how is this any different from "normal" marriage exactly? Other +> > then +> > > ALB> that the woman not only gets a man, but one in a country where both +> > she and +> > > ALB> her offspring will have actual opportunities? Oh and the lack of +> > > ALB> "de-feminized, over-sized, self-centered, mercenary-minded" +> choices? +> > > +> > > Mmkay. For the nth time Adam, we don't live in the land of +> > > Adam-fantasy. Women actually are allowed to do things productive, +> > > independent and entirely free of their male counterparts. They aren't +> > > forced to cook and clean and merely be sexual vessels. Sometimes, +> > > and this will come as a shock to you, no doubt, men and women even +> > > find -love- (which is the crucial distinction between this system) and +> > > they marry one another for the satisfaction of being together. I +> > > know, far-fetched and idealistically crazy as it is, but such things +> > > do happen. I can guarantee you, if my mother was approached by my +> > > father, and 25 years ago, he commented on her cleaning ability as a +> > > motivator for marrying her, we would not be having this conversation +> > > now. +> > > +> > > If guys still have silly antequated ideas about 'women's role' then +> > > their opportunities for finding women _will_ be scarce. Again, these +> > > situations are great, provided everyone is aware that the relationship +> > > is a contractual one -- he wants a maid, a dog and a prostitute he +> > > doesn't have to pay, and she wants a country that isn't impoverished +> > > and teeming with AIDS. A contract, versus a true love-interest +> > > marriage. +> > > +> > > Egh. I really need to stop analyzing your posts to this extent. I +> > > blame law school and my cat. +> > > +> > > -BB +> > > +> > > ALB> - Adam L. "Duncan" Beberg +> > > ALB> http://www.mithral.com/~beberg/ +> > > ALB> beberg@mithral.com +> > > +> > > +> > > +> > > +> > > +> > > +> > +> > -- +> > "I don't take no stocks in mathematics, anyway" --Huckleberry Finn +> > +> > +> > +> > +> > +> +> -- +> "I don't take no stocks in mathematics, anyway" --Huckleberry Finn +> +> +> +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00485.51303357b6e195501f2bf225d60161b1 b/Ch3/datasets/spam/easy_ham/00485.51303357b6e195501f2bf225d60161b1 new file mode 100644 index 000000000..0f3403989 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00485.51303357b6e195501f2bf225d60161b1 @@ -0,0 +1,55 @@ +From fork-admin@xent.com Sat Sep 7 21:53:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CE34616F16 + for ; Sat, 7 Sep 2002 21:52:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g87Du7C22075 for ; + Sat, 7 Sep 2002 14:56:07 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AD1A32940A0; Sat, 7 Sep 2002 06:53:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id 4B03129409E for ; Sat, 7 Sep 2002 06:52:10 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id 7E5CBC44D; + Sat, 7 Sep 2002 15:52:57 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +Message-Id: <20020907135257.7E5CBC44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 7 Sep 2002 15:52:57 +0200 (CEST) + +CDale URLed thusly: +>http://www.news.harvard.edu/gazette/2000/10.19/01_monogamy.html + +>The assumption that females of all species tend to be less promiscuous +>than males simply does not fit the facts, Hrdy contended. + +Well, DUH!!! + +It is perfectly obvious that (heterosexual) promiscuity is exactly, +precisely identical between males and females. + +Of course the shapes of the distributions may differ. + + +R + + diff --git a/Ch3/datasets/spam/easy_ham/00486.8294dd2af26dd3d759390f412bbec227 b/Ch3/datasets/spam/easy_ham/00486.8294dd2af26dd3d759390f412bbec227 new file mode 100644 index 000000000..25b58e1bb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00486.8294dd2af26dd3d759390f412bbec227 @@ -0,0 +1,84 @@ +From fork-admin@xent.com Sat Sep 7 21:53:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2FAF116F21 + for ; Sat, 7 Sep 2002 21:52:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g87F73C23979 for ; + Sat, 7 Sep 2002 16:07:09 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9FE482940E7; Sat, 7 Sep 2002 08:04:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f221.law15.hotmail.com [64.4.23.221]) by + xent.com (Postfix) with ESMTP id 6573229409E for ; + Sat, 7 Sep 2002 08:03:10 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Sat, 7 Sep 2002 08:05:51 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Sat, 07 Sep 2002 15:05:51 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 07 Sep 2002 15:05:51.0647 (UTC) FILETIME=[0E5B6AF0:01C25680] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 07 Sep 2002 15:05:51 +0000 + +Robert Harley: +>It is perfectly obvious that (heterosexual) promiscuity is exactly, +>precisely identical between males and females. + +Yeah, assuming approximately equal populations. +But that obscures the different modes of +promiscuity. Both the person who gives sex for +money or power or companionship and the person +who uses money and power and companionship to +get sex are promiscuous, in the broadest sense +of the word. But their motives and behavior are +quite different. + +Langur monkeys were the example in the cited +article. "Dominant males .. kill babies that +are not their own." "The dominant male monkey +.. seeks to defend his harem of females." But +cozying up to the current dominant male isn't +the best strategy for female langurs, because +"dominant males are dethroned by rivals every +27 months or so." "By mating with as many +extra-group males as possible, female langurs +ensure their offspring against infanticide," +by the male who is likely next to rule the +roost. + +Maybe it's just me, but that doesn't paint a +picture of carefree females engaged in joyously +promiscuous couplings. The dom cab driver who +is taking her two boy toys to New Orleans is a +better picture of that. ;-) + + + + + +_________________________________________________________________ +Chat with friends online, try MSN Messenger: http://messenger.msn.com + + diff --git a/Ch3/datasets/spam/easy_ham/00487.3f2dcd848a26fee4af6be79673ca12ad b/Ch3/datasets/spam/easy_ham/00487.3f2dcd848a26fee4af6be79673ca12ad new file mode 100644 index 000000000..6cc86d368 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00487.3f2dcd848a26fee4af6be79673ca12ad @@ -0,0 +1,179 @@ +From fork-admin@xent.com Sat Sep 7 21:53:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E6A6716EFC + for ; Sat, 7 Sep 2002 21:52:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:32 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g87DA8C20610 for ; + Sat, 7 Sep 2002 14:10:09 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C6F7E2940D8; Sat, 7 Sep 2002 06:07:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 50B0D29409E for ; + Sat, 7 Sep 2002 06:06:56 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17nfLB-0006QR-00; Sat, 07 Sep 2002 09:09:33 -0400 +From: "Geege Schuman" +To: "CDale" , + "Geege Schuman" +Cc: , "Adam L. Beberg" , + +Subject: RE: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 7 Sep 2002 09:07:50 -0400 + +unwritten rule. 8-) + +gg + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of CDale +Sent: Friday, September 06, 2002 10:21 PM +To: Geege Schuman +Cc: bitbitch@magnesium.net; Adam L. Beberg; fork@spamassassin.taint.org +Subject: RE: Re[2]: Selling Wedded Bliss (was Re: Ouch...) + + +Why should I? (: +C + +On Fri, 6 Sep 2002, Geege Schuman wrote: + +> quitcherbraggin. +> +> :-) +> gg +> +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of CDale +> Sent: Friday, September 06, 2002 3:42 AM +> To: bitbitch@magnesium.net +> Cc: Adam L. Beberg; fork@spamassassin.taint.org +> Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +> +> +> I dunno, BB. Women who like to be thought of this way should have the +> right to choose to be treated this way. Men too... ahem. (: My boy +> cleans, washes clothes, cooks, fixes stuff, etc, and works the same number +> of hours I do, sometimes more, if he has to catch up with me. (: I +> close him because he is industrious and creative, and because he +> unfailingly makes my bed the minute I get out of it. And boy #2 will be +> here soon to help boy #1 with other things such as pedicures, backrubs, +> and sure, fucking. LOL! (along with the aforementioned "chores") Adam can +> have his cake and eat it too, if he can only find the right girl who has +> the same beliefs about gender roles that he has. Of course, he has NO +> clue where to look, so we will be constantly laughing at him while he +> stumbles around in the dark. +> Cindy +> P.S. the numbers do not in any way indicate importance or favor -- only +> the order in which they move into my house. -smiles at chris- +> P.S. #2. I'm moving. Going to New Orleans. Can't handle any more cab +> driving. The summer sucked here on the MS Gulf Coast, instead of rocking +> like it normally does. Wish me luck. I'm going to look for another +> computer job. Le Sigh. (: +> +> On Thu, 5 Sep 2002 bitbitch@magnesium.net wrote: +> +> > Hello Adam, +> > +> > Thursday, September 05, 2002, 11:33:18 PM, you wrote: +> > +> > +> > ALB> So, you're saying that product bundling works? Good point. +> > +> > Sometimes I wish I was still in CA. You deserve a good beating every +> > so often... (anyone else want to do the honors?) +> > +> > ALB> And how is this any different from "normal" marriage exactly? Other +> then +> > ALB> that the woman not only gets a man, but one in a country where both +> she and +> > ALB> her offspring will have actual opportunities? Oh and the lack of +> > ALB> "de-feminized, over-sized, self-centered, mercenary-minded" +choices? +> > +> > Mmkay. For the nth time Adam, we don't live in the land of +> > Adam-fantasy. Women actually are allowed to do things productive, +> > independent and entirely free of their male counterparts. They aren't +> > forced to cook and clean and merely be sexual vessels. Sometimes, +> > and this will come as a shock to you, no doubt, men and women even +> > find -love- (which is the crucial distinction between this system) and +> > they marry one another for the satisfaction of being together. I +> > know, far-fetched and idealistically crazy as it is, but such things +> > do happen. I can guarantee you, if my mother was approached by my +> > father, and 25 years ago, he commented on her cleaning ability as a +> > motivator for marrying her, we would not be having this conversation +> > now. +> > +> > If guys still have silly antequated ideas about 'women's role' then +> > their opportunities for finding women _will_ be scarce. Again, these +> > situations are great, provided everyone is aware that the relationship +> > is a contractual one -- he wants a maid, a dog and a prostitute he +> > doesn't have to pay, and she wants a country that isn't impoverished +> > and teeming with AIDS. A contract, versus a true love-interest +> > marriage. +> > +> > Egh. I really need to stop analyzing your posts to this extent. I +> > blame law school and my cat. +> > +> > -BB +> > +> > ALB> - Adam L. "Duncan" Beberg +> > ALB> http://www.mithral.com/~beberg/ +> > ALB> beberg@mithral.com +> > +> > +> > +> > +> > +> > +> +> -- +> "I don't take no stocks in mathematics, anyway" --Huckleberry Finn +> +> +> +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00488.88642710e6c206d0de1d8a0093ed2700 b/Ch3/datasets/spam/easy_ham/00488.88642710e6c206d0de1d8a0093ed2700 new file mode 100644 index 000000000..8ec9ae54e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00488.88642710e6c206d0de1d8a0093ed2700 @@ -0,0 +1,112 @@ +From fork-admin@xent.com Sat Sep 7 21:53:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D58E016F17 + for ; Sat, 7 Sep 2002 21:52:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:42 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g87Ht9C28092 for ; + Sat, 7 Sep 2002 18:55:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9F7BA2940A6; Sat, 7 Sep 2002 10:52:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id C7E4B29409E for ; + Sat, 7 Sep 2002 10:51:16 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17njmv-0005z1-00; Sat, 07 Sep 2002 13:54:30 -0400 +From: "Geege Schuman" +To: "Russell Turpin" , +Subject: RE: Selling Wedded Bliss (was Re: Ouch...) +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 7 Sep 2002 13:52:44 -0400 + +cdale is a double chocolate chip macadamia to my vanilla wafer. wait, maybe +i'm a ginger snap. + + +gg + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +Russell Turpin +Sent: Saturday, September 07, 2002 11:06 AM +To: fork@spamassassin.taint.org +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) + + +Robert Harley: +>It is perfectly obvious that (heterosexual) promiscuity is exactly, +>precisely identical between males and females. + +Yeah, assuming approximately equal populations. +But that obscures the different modes of +promiscuity. Both the person who gives sex for +money or power or companionship and the person +who uses money and power and companionship to +get sex are promiscuous, in the broadest sense +of the word. But their motives and behavior are +quite different. + +Langur monkeys were the example in the cited +article. "Dominant males .. kill babies that +are not their own." "The dominant male monkey +.. seeks to defend his harem of females." But +cozying up to the current dominant male isn't +the best strategy for female langurs, because +"dominant males are dethroned by rivals every +27 months or so." "By mating with as many +extra-group males as possible, female langurs +ensure their offspring against infanticide," +by the male who is likely next to rule the +roost. + +Maybe it's just me, but that doesn't paint a +picture of carefree females engaged in joyously +promiscuous couplings. The dom cab driver who +is taking her two boy toys to New Orleans is a +better picture of that. ;-) + + + + + +_________________________________________________________________ +Chat with friends online, try MSN Messenger: http://messenger.msn.com + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00489.2a739cd71c4667d635698fff5120bceb b/Ch3/datasets/spam/easy_ham/00489.2a739cd71c4667d635698fff5120bceb new file mode 100644 index 000000000..5f954420d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00489.2a739cd71c4667d635698fff5120bceb @@ -0,0 +1,111 @@ +From fork-admin@xent.com Sat Sep 7 21:54:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7EE1D16F49 + for ; Sat, 7 Sep 2002 21:52:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g87ID8C28529 for ; + Sat, 7 Sep 2002 19:13:08 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 45BFE29417C; Sat, 7 Sep 2002 11:10:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id D1A3129409E for + ; Sat, 7 Sep 2002 11:09:10 -0700 (PDT) +Received: (qmail 11729 invoked by uid 501); 7 Sep 2002 18:11:42 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 7 Sep 2002 18:11:42 -0000 +From: CDale +To: Geege Schuman +Cc: Russell Turpin , +Subject: RE: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 7 Sep 2002 13:11:42 -0500 (CDT) + +Hah. I guess she doesn't want everyone to know about all the kinky sex +she and I have had. LOL +C + +On Sat, 7 Sep 2002, Geege Schuman wrote: + +> cdale is a double chocolate chip macadamia to my vanilla wafer. wait, maybe +> i'm a ginger snap. +> +> +> gg +> +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +> Russell Turpin +> Sent: Saturday, September 07, 2002 11:06 AM +> To: fork@spamassassin.taint.org +> Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +> +> +> Robert Harley: +> >It is perfectly obvious that (heterosexual) promiscuity is exactly, +> >precisely identical between males and females. +> +> Yeah, assuming approximately equal populations. +> But that obscures the different modes of +> promiscuity. Both the person who gives sex for +> money or power or companionship and the person +> who uses money and power and companionship to +> get sex are promiscuous, in the broadest sense +> of the word. But their motives and behavior are +> quite different. +> +> Langur monkeys were the example in the cited +> article. "Dominant males .. kill babies that +> are not their own." "The dominant male monkey +> .. seeks to defend his harem of females." But +> cozying up to the current dominant male isn't +> the best strategy for female langurs, because +> "dominant males are dethroned by rivals every +> 27 months or so." "By mating with as many +> extra-group males as possible, female langurs +> ensure their offspring against infanticide," +> by the male who is likely next to rule the +> roost. +> +> Maybe it's just me, but that doesn't paint a +> picture of carefree females engaged in joyously +> promiscuous couplings. The dom cab driver who +> is taking her two boy toys to New Orleans is a +> better picture of that. ;-) +> +> +> +> +> +> _________________________________________________________________ +> Chat with friends online, try MSN Messenger: http://messenger.msn.com +> +> +> +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00490.4734366879f0805c510b6665d99d8fec b/Ch3/datasets/spam/easy_ham/00490.4734366879f0805c510b6665d99d8fec new file mode 100644 index 000000000..92c341b95 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00490.4734366879f0805c510b6665d99d8fec @@ -0,0 +1,92 @@ +From fork-admin@xent.com Sat Sep 7 21:53:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2604216F22 + for ; Sat, 7 Sep 2002 21:52:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g87Fp7C24925 for ; + Sat, 7 Sep 2002 16:51:08 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DAA892940F2; Sat, 7 Sep 2002 08:48:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id BFFB129409E for + ; Sat, 7 Sep 2002 08:47:11 -0700 (PDT) +Received: (qmail 26499 invoked by uid 501); 7 Sep 2002 15:49:41 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 7 Sep 2002 15:49:41 -0000 +From: CDale +To: Russell Turpin +Cc: fork@spamassassin.taint.org +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 7 Sep 2002 10:49:41 -0500 (CDT) + +Oh, well, uh, thank you, Russell. LOL@#! (I think?) +C + +On Sat, 7 Sep 2002, Russell Turpin wrote: + +> Robert Harley: +> >It is perfectly obvious that (heterosexual) promiscuity is exactly, +> >precisely identical between males and females. +> +> Yeah, assuming approximately equal populations. +> But that obscures the different modes of +> promiscuity. Both the person who gives sex for +> money or power or companionship and the person +> who uses money and power and companionship to +> get sex are promiscuous, in the broadest sense +> of the word. But their motives and behavior are +> quite different. +> +> Langur monkeys were the example in the cited +> article. "Dominant males .. kill babies that +> are not their own." "The dominant male monkey +> .. seeks to defend his harem of females." But +> cozying up to the current dominant male isn't +> the best strategy for female langurs, because +> "dominant males are dethroned by rivals every +> 27 months or so." "By mating with as many +> extra-group males as possible, female langurs +> ensure their offspring against infanticide," +> by the male who is likely next to rule the +> roost. +> +> Maybe it's just me, but that doesn't paint a +> picture of carefree females engaged in joyously +> promiscuous couplings. The dom cab driver who +> is taking her two boy toys to New Orleans is a +> better picture of that. ;-) +> +> +> +> +> +> _________________________________________________________________ +> Chat with friends online, try MSN Messenger: http://messenger.msn.com +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00491.c0d9405bdda12781f96bc37c00a382d9 b/Ch3/datasets/spam/easy_ham/00491.c0d9405bdda12781f96bc37c00a382d9 new file mode 100644 index 000000000..306960cd5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00491.c0d9405bdda12781f96bc37c00a382d9 @@ -0,0 +1,87 @@ +From fork-admin@xent.com Sat Sep 7 21:54:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8ECCB16F03 + for ; Sat, 7 Sep 2002 21:52:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g87KAIC31918 for ; + Sat, 7 Sep 2002 21:10:21 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 820932940D3; Sat, 7 Sep 2002 13:07:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from relay.pair.com (relay1.pair.com [209.68.1.20]) by xent.com + (Postfix) with SMTP id 394F429409E for ; Sat, + 7 Sep 2002 13:06:04 -0700 (PDT) +Received: (qmail 19746 invoked from network); 7 Sep 2002 20:08:45 -0000 +Received: from adsl-67-119-24-60.dsl.snfc21.pacbell.net (HELO golden) + (67.119.24.60) by relay1.pair.com with SMTP; 7 Sep 2002 20:08:45 -0000 +X-Pair-Authenticated: 67.119.24.60 +Message-Id: <005701c256aa$5d12d6e0$640a000a@golden> +From: "Gordon Mohr" +To: +References: <20020907135257.7E5CBC44D@argote.ch> +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 7 Sep 2002 13:08:41 -0700 + +Definitional nit to pick: + +Robert Harley writes: +> It is perfectly obvious that (heterosexual) promiscuity is exactly, +> precisely identical between males and females. +> +> Of course the shapes of the distributions may differ. + +You've redefined "promiscuity" above as "total" or "average" +activity, which seems to rob it of its common meaning: +activity above some specific threshold (usually "one") or +norm, or involving extra or indiscriminate variety. +"Promiscuity" is thus inherently a description of +distributions rather than averages. + +Consider a population of 3 males and 3 females. Let +there be three pairings which result in each person +having sex once. Then, let one of the males also have +sex with the other two females. + +Sure, the average number of sex acts and sex partners +is equal between the sexes, tautologically. + +But here more women than men are: + - above the single partner threshold + - above the overall average 1.67 acts/partners threshold + - above the overall median 1.5 acts/partners + - above the overall mode 1 acts/partners + +And here women have a higher mode (2) and median (2) +number of partners. + +So in this contrived population, females are more +"promiscuous" than males, unless "promiscuity" is +defined uselessly. + +- Gordon + + diff --git a/Ch3/datasets/spam/easy_ham/00492.3ffb38f175e41790b1f05096dbe339d8 b/Ch3/datasets/spam/easy_ham/00492.3ffb38f175e41790b1f05096dbe339d8 new file mode 100644 index 000000000..82eff78f2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00492.3ffb38f175e41790b1f05096dbe339d8 @@ -0,0 +1,59 @@ +From fork-admin@xent.com Sat Sep 7 21:54:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3236B16F56 + for ; Sat, 7 Sep 2002 21:52:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 21:52:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g87J8AC30255 for ; + Sat, 7 Sep 2002 20:08:11 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4799C294180; Sat, 7 Sep 2002 12:05:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f198.law15.hotmail.com [64.4.23.198]) by + xent.com (Postfix) with ESMTP id 4FCCB29409E for ; + Sat, 7 Sep 2002 12:04:48 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Sat, 7 Sep 2002 12:07:30 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Sat, 07 Sep 2002 19:07:29 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: RE: Selling Wedded Bliss (was Re: Ouch...) +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 07 Sep 2002 19:07:30.0068 (UTC) FILETIME=[D016E540:01C256A1] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 07 Sep 2002 19:07:29 +0000 + +CDale: +>I guess [Geege] doesn't want everyone to know about all the kinky sex she +>and I have had. + +Yeah, like I'm going to believe that without +seeing the photos. Next, you'll be telling me +that Beberg found a job he likes. + + + +_________________________________________________________________ +Join the world’s largest e-mail service with MSN Hotmail. +http://www.hotmail.com + + diff --git a/Ch3/datasets/spam/easy_ham/00493.29a23aaa27a825c8cfb67264b9d7aeb3 b/Ch3/datasets/spam/easy_ham/00493.29a23aaa27a825c8cfb67264b9d7aeb3 new file mode 100644 index 000000000..28a902d0f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00493.29a23aaa27a825c8cfb67264b9d7aeb3 @@ -0,0 +1,89 @@ +From fork-admin@xent.com Sat Sep 7 22:08:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0271B16EFC + for ; Sat, 7 Sep 2002 22:08:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 07 Sep 2002 22:08:12 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g87Kx8C00526 for ; + Sat, 7 Sep 2002 21:59:09 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 817592940F3; Sat, 7 Sep 2002 13:56:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 76A7529409E for ; + Sat, 7 Sep 2002 13:55:20 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17nmf5-0004Ay-00; Sat, 07 Sep 2002 16:58:35 -0400 +From: "Geege Schuman" +To: "Russell Turpin" , +Subject: RE: Selling Wedded Bliss (was Re: Ouch...) +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 7 Sep 2002 16:56:48 -0400 + +intersectedness: i'd be surprised if beberg ever had a BLOWjob he liked. i +mean, it would have involved OTHERS, less EVOLVED others. + +:-) +gg + + + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +Russell Turpin +Sent: Saturday, September 07, 2002 3:07 PM +To: fork@spamassassin.taint.org +Subject: RE: Selling Wedded Bliss (was Re: Ouch...) + + +CDale: +>I guess [Geege] doesn't want everyone to know about all the kinky sex she +>and I have had. + +Yeah, like I'm going to believe that without +seeing the photos. Next, you'll be telling me +that Beberg found a job he likes. + + + +_________________________________________________________________ +Join the world’s largest e-mail service with MSN Hotmail. +http://www.hotmail.com + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00494.ba6ae1d625f2a4e039f6822868ee48ad b/Ch3/datasets/spam/easy_ham/00494.ba6ae1d625f2a4e039f6822868ee48ad new file mode 100644 index 000000000..acf85f142 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00494.ba6ae1d625f2a4e039f6822868ee48ad @@ -0,0 +1,53 @@ +From fork-admin@xent.com Sun Sep 8 23:50:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 234FF16F18 + for ; Sun, 8 Sep 2002 23:50:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 08 Sep 2002 23:50:20 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g88F4BC00823 for ; + Sun, 8 Sep 2002 16:04:11 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 31F1A294294; Sun, 8 Sep 2002 08:01:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id 510742940AD for ; Sun, 8 Sep 2002 08:00:52 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id 44010C44D; + Sun, 8 Sep 2002 17:01:26 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: The Big Jump +Message-Id: <20020908150126.44010C44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 8 Sep 2002 17:01:26 +0200 (CEST) + +Today a French officer called Michel Fournier is supposed to get in a +350-metre tall helium balloon, ride it up to the edge of space (40 km +altitude) and jump out. His fall should last 6.5 minutes and reach +speeds of Mach 1.5. He hopes to open his parachute manually at the +end, although with an automatic backup if he is 7 seconds from the +ground and still hasn't opened it. + +R + +ObQuote: + "Vederò, si averò si grossi li coglioni, come ha il re di Franza." + ("Let's see if I've got as much balls as the King of France!") + - Pope Julius II, 2 January 1511 + + diff --git a/Ch3/datasets/spam/easy_ham/00495.3bba63110f3a2a97ae71ce53268766cf b/Ch3/datasets/spam/easy_ham/00495.3bba63110f3a2a97ae71ce53268766cf new file mode 100644 index 000000000..4ab786eb1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00495.3bba63110f3a2a97ae71ce53268766cf @@ -0,0 +1,78 @@ +From fork-admin@xent.com Sun Sep 8 23:50:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B841116F19 + for ; Sun, 8 Sep 2002 23:50:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 08 Sep 2002 23:50:21 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g88FbBC01701 for ; + Sun, 8 Sep 2002 16:37:11 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D4D772942A0; Sun, 8 Sep 2002 08:34:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc01.attbi.com (sccrmhc01.attbi.com [204.127.202.61]) + by xent.com (Postfix) with ESMTP id 9C23329429C for ; + Sun, 8 Sep 2002 08:33:18 -0700 (PDT) +Received: from h00e098788e1f.ne.client2.attbi.com ([24.61.143.15]) by + sccrmhc01.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) + with ESMTP id + <20020908153602.IDWF9751.sccrmhc01.attbi.com@h00e098788e1f.ne.client2.attbi.com>; + Sun, 8 Sep 2002 15:36:02 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.52f) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <15861948735.20020908113611@magnesium.net> +To: harley@argote.ch ((Robert Harley)) +Cc: fork@spamassassin.taint.org +Subject: Re: The Big Jump +In-Reply-To: <20020908150126.44010C44D@argote.ch> +References: <20020908150126.44010C44D@argote.ch> +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 8 Sep 2002 11:36:11 -0400 + + + +So uh, would this qualify for the Darwin awards if he doesn't make it? + +Freaking french people... + :-) +-BB +RH> Today a French officer called Michel Fournier is supposed to get in a +RH> 350-metre tall helium balloon, ride it up to the edge of space (40 km +RH> altitude) and jump out. His fall should last 6.5 minutes and reach +RH> speeds of Mach 1.5. He hopes to open his parachute manually at the +RH> end, although with an automatic backup if he is 7 seconds from the +RH> ground and still hasn't opened it. + +RH> R + +RH> ObQuote: +RH> "Vederò, si averò si grossi li coglioni, come ha il re di Franza." +RH> ("Let's see if I've got as much balls as the King of France!") +RH> - Pope Julius II, 2 January 1511 + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00496.6ebe7969144149d6c8c170732a1b63e1 b/Ch3/datasets/spam/easy_ham/00496.6ebe7969144149d6c8c170732a1b63e1 new file mode 100644 index 000000000..8f0388c40 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00496.6ebe7969144149d6c8c170732a1b63e1 @@ -0,0 +1,74 @@ +From fork-admin@xent.com Sun Sep 8 23:50:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3BBC216F1A + for ; Sun, 8 Sep 2002 23:50:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 08 Sep 2002 23:50:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g88HOEC03926 for ; + Sun, 8 Sep 2002 18:24:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8EA012940F0; Sun, 8 Sep 2002 10:21:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta5.snfc21.pbi.net (mta5.snfc21.pbi.net [206.13.28.241]) + by xent.com (Postfix) with ESMTP id C03002940C4 for ; + Sun, 8 Sep 2002 10:20:34 -0700 (PDT) +Received: from [192.168.123.100] ([64.173.24.253]) by mta5.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H240092BQYV6K@mta5.snfc21.pbi.net> for fork@xent.com; Sun, + 08 Sep 2002 10:23:19 -0700 (PDT) +From: James Rogers +Subject: Re: whoa +In-Reply-To: +To: fork@spamassassin.taint.org +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +User-Agent: Microsoft-Entourage/9.0.1.3108 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 08 Sep 2002 00:55:00 -0700 + +On 9/8/02 7:38 AM, "Gary Lawrence Murphy" wrote: +> J> ... If you want a region of the globe mapped out to a very +> J> high resolution (e.g. 1-meter), they can scan the area with +> J> aircraft LIDAR and add it to the database, thereby making that +> J> region zoomable to the resolution of the database for that +> J> area. +> +> Can you give us an example of an application where 1-m resolution +> would be worth the considerable expense? + + +An example: Being able to model RF propagation in three dimensions for a +metro area when deploying wireless networks. By having every single tree +and building detail and similar, you can "see" even tiny dead spots due to +physical blockage and signal attenuation. Overlay this with fiber map data +for yourself and your competitors (when you can glean such data), which is +also useful at this resolution, and you have a very slick way of modeling +existing network deployments in excruciating detail and optimizing further +deployments to maximize coverage and bandwidth. Take that and tie it into a +slick geo-physically aware real-time network monitoring and management +system and you've really got something... + +For many applications though, 5-meter data is probably adequate. + + +-James Rogers + jamesr@best.com + + diff --git a/Ch3/datasets/spam/easy_ham/00497.d1de10013dcdc07beee6507aa0d274c9 b/Ch3/datasets/spam/easy_ham/00497.d1de10013dcdc07beee6507aa0d274c9 new file mode 100644 index 000000000..014cbd794 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00497.d1de10013dcdc07beee6507aa0d274c9 @@ -0,0 +1,110 @@ +From fork-admin@xent.com Sun Sep 8 23:50:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 14B0816F16 + for ; Sun, 8 Sep 2002 23:50:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 08 Sep 2002 23:50:25 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g88KrDC10175 for ; + Sun, 8 Sep 2002 21:53:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A291F2940E8; Sun, 8 Sep 2002 13:50:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from relay.pair.com (relay1.pair.com [209.68.1.20]) by xent.com + (Postfix) with SMTP id 525372940DA for ; Sun, + 8 Sep 2002 13:49:23 -0700 (PDT) +Received: (qmail 98324 invoked from network); 8 Sep 2002 20:52:07 -0000 +Received: from adsl-67-119-24-60.dsl.snfc21.pacbell.net (HELO golden) + (67.119.24.60) by relay1.pair.com with SMTP; 8 Sep 2002 20:52:07 -0000 +X-Pair-Authenticated: 67.119.24.60 +Message-Id: <011e01c25779$96151aa0$640a000a@golden> +From: "Gordon Mohr" +To: +References: <20020908113331.15383C44D@argote.ch> +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 8 Sep 2002 13:52:02 -0700 + +Robert Harley: +> Gordon Mohr wrote: +> >Definitional nit to pick: +> >You've redefined "promiscuity" above as "total" or "average" activity, +> +> I think it's clear that I'm talking about averages, so I'm not sure +> why that nit needs to be picked... + +It was clear you were talking about averages. But it should +be equally clear that that isn't what people mean when they +use the word "promiscuity". + +> >which seems to rob it of its common meaning: +> >activity above some specific threshold (usually "one") +> +> In that case, "promiscous" is a vacuous term in modern Western +> societies (but we knew that :), where people average 7 partners or so +> in their adult lives. + +Not at all. There are still people who only have one partner. +There are many more whoe only have one partner over "long" +periods of time. So it is far from "vacuous" to describe some +people as "promiscuous" and others as "not promiscuous", +especially over a set period. ("He was promiscuous in college. +He is no longer promiscuous.") + +The word has a clear meaning, despite your continuing tendency +to gloss that meaning over with population averages. + +> >Consider a population of 3 males and 3 females. +> >[...] +> >so in this contrived population, females are more "promiscuous" than males, +> +> So 1 girl gets 1 guy, 2 girls get 2 guys, 2 guys get 1 girl, 1 guy +> gets 3 girls. Sounds like six of one versus half a dozen of the other +> to me. + +OK, then. Consider a population of 1,000,000. 500,000 men each +pair off with 500,000 women. Then, 1 man, let's call him "Wilt", +also has sex with the other 499,999 women. + +499,999 women have had more than one partner. 499,999 men have +only had one partner. It is now "perfectly obvious" that in the +common meaning of the term, among this contrived population, +that women are "more promiscuous" than men -- even though the +single "most promiscuous" person, Wilt, is a man. + +"Promiscuity" is not "exactly, perfectly identical between males +and females", except under a degenerate custom definition of +"promiscuity". + +> >unless "promiscuity" is defined uselessly. +> +> Ain't nothin' useless about averages. + +Averages are useful, sure -- but much more so if called by their +actual name, rather than conflated with another concept. + +- Gordon + + + diff --git a/Ch3/datasets/spam/easy_ham/00498.05456f69b8ce95cc1846f396b73f31b8 b/Ch3/datasets/spam/easy_ham/00498.05456f69b8ce95cc1846f396b73f31b8 new file mode 100644 index 000000000..23f2bc891 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00498.05456f69b8ce95cc1846f396b73f31b8 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Sun Sep 8 23:50:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F076316F1B + for ; Sun, 8 Sep 2002 23:50:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 08 Sep 2002 23:50:26 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g88L4BC10410 for ; + Sun, 8 Sep 2002 22:04:11 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E9AA72940F6; Sun, 8 Sep 2002 14:01:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id AEFF82940EF for + ; Sun, 8 Sep 2002 14:00:20 -0700 (PDT) +Received: (qmail 18694 invoked by uid 508); 8 Sep 2002 21:03:04 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.61) by + venus.phpwebhosting.com with SMTP; 8 Sep 2002 21:03:04 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g88L2vW10429; Sun, 8 Sep 2002 23:02:57 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: Gordon Mohr +Cc: +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: <011e01c25779$96151aa0$640a000a@golden> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 8 Sep 2002 23:02:57 +0200 (CEST) + +On Sun, 8 Sep 2002, Gordon Mohr wrote: + +> OK, then. Consider a population of 1,000,000. 500,000 men each +> pair off with 500,000 women. Then, 1 man, let's call him "Wilt", +> also has sex with the other 499,999 women. + +It is not uncommon to find gay males who had sex with several thousands +partners (there would be more, in fact lots more, probably, but a lot of +them have died). Don't have to be a callboy, if considering that you can +have intercourse with several partners in a single day in a bathouse it +doesn't look particularly difficult to do. + +Clearly this is not something what hets do, prostitution not taken into +account. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00499.e9a4884055f2ee93c2c0d974c8b2e7cd b/Ch3/datasets/spam/easy_ham/00499.e9a4884055f2ee93c2c0d974c8b2e7cd new file mode 100644 index 000000000..f6871d04e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00499.e9a4884055f2ee93c2c0d974c8b2e7cd @@ -0,0 +1,72 @@ +From fork-admin@xent.com Sun Sep 8 23:51:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 62CB316F1C + for ; Sun, 8 Sep 2002 23:50:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 08 Sep 2002 23:50:28 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g88MIBC13138 for ; + Sun, 8 Sep 2002 23:18:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7EA3B294103; Sun, 8 Sep 2002 15:15:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 843E1294101 for ; + Sun, 8 Sep 2002 15:14:14 -0700 (PDT) +Received: (qmail 21023 invoked from network); 8 Sep 2002 22:17:01 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 8 Sep 2002 22:17:01 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 500C81CC98; + Sun, 8 Sep 2002 18:16:58 -0400 (EDT) +To: James Rogers +Cc: fork@spamassassin.taint.org +Subject: Re: whoa +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 08 Sep 2002 18:16:57 -0400 + +>>>>> "J" == James Rogers writes: + + J> An example: Being able to model RF propagation in three + J> dimensions for a metro area when deploying wireless networks. + J> By having every single tree and building detail and similar, + J> you can "see" even tiny dead spots due to physical blockage and + J> signal attenuation. + +Hmmm, just as I thought. In other words, it has no practical uses +whatsoever ;) ... do the biz guys in your office /really/ think WISPs +are really going to shell out /their/ money to find a house or two +they can't reach? Experience suggests (a) they won't care and (b) +they will even sign up that errant house and then give them a +run-around blaming the dead-spot on "unsupported vendor equipment". + +Thus, yes, it is 'cool': Expensive toy with no apparent function ;) + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00500.eb1460f32ec4693ed36e356f0401c8e1 b/Ch3/datasets/spam/easy_ham/00500.eb1460f32ec4693ed36e356f0401c8e1 new file mode 100644 index 000000000..a863115a1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00500.eb1460f32ec4693ed36e356f0401c8e1 @@ -0,0 +1,68 @@ +From fork-admin@xent.com Mon Sep 9 10:46:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 995E316F03 + for ; Mon, 9 Sep 2002 10:45:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 10:45:45 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g88NRCC16739 for ; + Mon, 9 Sep 2002 00:27:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D97302941C7; Sun, 8 Sep 2002 16:24:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from panacea.canonical.org (ns1.canonical.org [209.115.72.29]) + by xent.com (Postfix) with ESMTP id 52EE52941C4 for ; + Sun, 8 Sep 2002 16:23:43 -0700 (PDT) +Received: by panacea.canonical.org (Postfix, from userid 1004) id + 51F943F4E8; Sun, 8 Sep 2002 19:24:16 -0400 (EDT) +From: kragen@pobox.com (Kragen Sitaker) +To: fork@spamassassin.taint.org +Subject: earthviewer (was Re: whoa} +Message-Id: <20020908232416.51F943F4E8@panacea.canonical.org> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 8 Sep 2002 19:24:16 -0400 (EDT) + +On 9/8/02 7:38 AM, "Gary Lawrence Murphy" wrote: +> J> ... If you want a region of the globe mapped out to a very +> J> high resolution (e.g. 1-meter), they can scan the area with +> J> aircraft LIDAR and add it to the database, thereby making that +> J> region zoomable to the resolution of the database for that +> J> area. +> +> Can you give us an example of an application where 1-m resolution +> would be worth the considerable expense? + +Planning battle tactics; for this reason, the intelligence press +reports, spy satellites have had 1-meter resolution for many years. + +Finding an individual vehicle in a city might occasionally be possible +with 1-m images and might occasionally also be worth the money. + +For small areas you have legitimate access to, it's probably cheaper +to go there with a digital camera and a GPS and take some snapshots +from ground level. Aerial photos might be cheaper for large areas, +areas where you're not allowed --- or, perhaps, physically able --- to +go, and cases where you don't have time to send a ground guy around +the whole area. + +-- + Kragen Sitaker +Edsger Wybe Dijkstra died in August of 2002. The world has lost a great +man. See http://advogato.org/person/raph/diary.html?start=252 and +http://www.kode-fu.com/geek/2002_08_04_archive.shtml for details. + + diff --git a/Ch3/datasets/spam/easy_ham/00501.d49136e1973b2bb467093cc28419b214 b/Ch3/datasets/spam/easy_ham/00501.d49136e1973b2bb467093cc28419b214 new file mode 100644 index 000000000..24178dc57 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00501.d49136e1973b2bb467093cc28419b214 @@ -0,0 +1,98 @@ +From fork-admin@xent.com Mon Sep 9 10:46:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 02BD716F18 + for ; Mon, 9 Sep 2002 10:45:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 10:45:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g88NtCC17997 for ; + Mon, 9 Sep 2002 00:55:12 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 59E3B2941CD; Sun, 8 Sep 2002 16:52:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta7.pltn13.pbi.net (mta7.pltn13.pbi.net [64.164.98.8]) by + xent.com (Postfix) with ESMTP id D90462940C9 for ; + Sun, 8 Sep 2002 16:51:25 -0700 (PDT) +Received: from [192.168.123.100] ([64.173.24.253]) by mta7.pltn13.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H250058U92AJ5@mta7.pltn13.pbi.net> for fork@xent.com; Sun, + 08 Sep 2002 16:54:10 -0700 (PDT) +From: James Rogers +Subject: Re: whoa +In-Reply-To: +To: fork@spamassassin.taint.org +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +User-Agent: Microsoft-Entourage/9.0.1.3108 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 08 Sep 2002 16:54:09 -0700 + +On 9/8/02 3:16 PM, "Gary Lawrence Murphy" wrote: +>>>>>> "J" == James Rogers writes: +> +> J> An example: Being able to model RF propagation in three +> J> dimensions for a metro area when deploying wireless networks. +> J> By having every single tree and building detail and similar, +> J> you can "see" even tiny dead spots due to physical blockage and +> J> signal attenuation. +> +> Hmmm, just as I thought. In other words, it has no practical uses +> whatsoever ;) ... do the biz guys in your office /really/ think WISPs +> are really going to shell out /their/ money to find a house or two +> they can't reach? Experience suggests (a) they won't care and (b) +> they will even sign up that errant house and then give them a +> run-around blaming the dead-spot on "unsupported vendor equipment". + + +Errrr....the biz guys in my office don't care what the "WISPs" want to do +with their little WiFi networks. And the bandwidth shadows in most cities +are surprisingly large and common. They aren't selling the software, which +is pretty pricy as it happens. They are using it to optimize next +generation wireless canopies over metro areas and fiber networks on a large +scale. There are an essentially infinite number of metro wireless +configurations, some of which generate far more dead or marginal spots and +others which are very expensive to operate (due to backhaul transit +considerations) or both. This software can be used as a tool to optimize +the canopy coverage and minimize the actual transit costs since the wireless +is tied into fiber at multiple points. + +The canopies we are talking about aren't short-range wifi technologies, but +a mixture of long-range high-performance wireless networking, with bandwidth +measured in tens to hundreds of mbits and ranges measured in miles (up to +well over a hundred miles on the extreme end). At those ranges and +bandwidth levels, the cost of providing the network can easily vary by an +order of magnitude or more depending on how you manage RF shadows and +proximity to fiber access points. The idea ultimately is to optimize the +cost and performance such that no existing network infrastructure providers +can remotely compete and maintain profitability. This is a surprisingly low +bar, and it is about time networks were designed with this level of +large-scale optimization (cost per mbit, maximizing coverage, and effective +bandwidth available per unit area) in any case. And for this company's +long-term plans, this type of capability will be absolutely necessary to +keep things sane. + +Or at least investors find this capability very sexy and compelling, +especially since we have this lovely visualization engine tied into the +system (CLI batches never have the same effect, even if it is more +efficient). + +-James Rogers + jamesr@best.com + + diff --git a/Ch3/datasets/spam/easy_ham/00502.19da1b53a1529e45350243255bee8fd2 b/Ch3/datasets/spam/easy_ham/00502.19da1b53a1529e45350243255bee8fd2 new file mode 100644 index 000000000..d2190a704 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00502.19da1b53a1529e45350243255bee8fd2 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Mon Sep 9 10:46:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 709B616F1A + for ; Mon, 9 Sep 2002 10:45:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 10:45:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8939BC29610 for ; + Mon, 9 Sep 2002 04:09:12 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id EAD422942B4; Sun, 8 Sep 2002 20:06:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id C14BB2941D0 for ; Sun, + 8 Sep 2002 20:05:39 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id B3EB03ED4A; + Sun, 8 Sep 2002 23:11:51 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id B25D63ECDA; Sun, 8 Sep 2002 23:11:51 -0400 (EDT) +From: Tom +To: Eugen Leitl +Cc: Gordon Mohr , +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 8 Sep 2002 23:11:51 -0400 (EDT) + +On Sun, 8 Sep 2002, Eugen Leitl wrote: + +--]doesn't look particularly difficult to do. +--] +--]Clearly this is not something what hets do, prostitution not taken into +--]account. + +So lets see, hets dont go to swing clubs, meat markets or the like at all? +Hmm. And being gay means hanging in the bath house being a cum dumpster +while you listen to the Devine Ms M belt one out for the boys? + +Ugh, with thinking like this who needs the bible belt? + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00503.8371a5419a277838b32355a79e9d00cc b/Ch3/datasets/spam/easy_ham/00503.8371a5419a277838b32355a79e9d00cc new file mode 100644 index 000000000..8dfa26ca0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00503.8371a5419a277838b32355a79e9d00cc @@ -0,0 +1,60 @@ +From fork-admin@xent.com Mon Sep 9 10:46:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 116F316F19 + for ; Mon, 9 Sep 2002 10:45:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 10:45:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g892IDC28193 for ; + Mon, 9 Sep 2002 03:18:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7DEE32942B0; Sun, 8 Sep 2002 19:15:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 1EB8B2942AE for ; + Sun, 8 Sep 2002 19:14:27 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17oE7b-0005Gg-00 for Fork@xent.com; Sun, 08 Sep 2002 22:17:51 -0400 +From: "Geege Schuman" +To: +Subject: Recommended Viewing +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 8 Sep 2002 22:15:54 -0400 + +who watched Lathe of Heaven? (A&E, 8 pm EDT) who has seen the original? + +if it's airing now on the west coast, do catch it. + +gg + + diff --git a/Ch3/datasets/spam/easy_ham/00504.9f783e81d6dd916618dc079f58606b8d b/Ch3/datasets/spam/easy_ham/00504.9f783e81d6dd916618dc079f58606b8d new file mode 100644 index 000000000..6f1f36bdc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00504.9f783e81d6dd916618dc079f58606b8d @@ -0,0 +1,102 @@ +From fork-admin@xent.com Mon Sep 9 10:46:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E841C16F1B + for ; Mon, 9 Sep 2002 10:45:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 10:45:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g893E4C29655 for ; + Mon, 9 Sep 2002 04:14:04 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 218112942B8; Sun, 8 Sep 2002 20:07:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 773FB2942B7 for ; + Sun, 8 Sep 2002 20:06:32 -0700 (PDT) +Received: (qmail 21992 invoked from network); 9 Sep 2002 03:09:21 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 9 Sep 2002 03:09:21 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 1FC381CC98; + Sun, 8 Sep 2002 23:09:17 -0400 (EDT) +To: kragen@pobox.com (Kragen Sitaker) +Cc: fork@spamassassin.taint.org +Subject: Re: earthviewer (was Re: whoa} +References: <20020908232416.51F943F4E8@panacea.canonical.org> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 08 Sep 2002 23:09:17 -0400 + +>>>>> "K" == Kragen Sitaker writes: + + K> Planning battle tactics; for this reason, the intelligence + K> press reports, spy satellites have had 1-meter resolution for + K> many years. + +The military already have these spy satellites; they are basically +Hubble pointed the other way, so I doubt they will be a big enough +customer of this service to justify a next-generation wireless +network rollout for the rest of us. + + K> Finding an individual vehicle in a city might occasionally be + K> possible with 1-m images and might occasionally also be worth + K> the money. + +My car is only just over 1.5 meters across and maybe 3 meters long, so +that means roughly six pixels total surface area. You might find a +16-wheeler this way, but how often do people misplace a 16-wheeler +such that it is _that_ important to get old images of the terrain? +Since they can't send up aircraft to update images in realtime every +time, how is this different from just releasing the map on DVDs? Why +wireless? + +I thought of the common problem of lost prize cattle, but there again, +will there really be business-case for creating a hi-res map of +wyoming on the fly instead of just doing what they do now and hiring a +helicopter for a few hours? + + K> For small areas you have legitimate access to, it's probably + K> cheaper to go there with a digital camera and a GPS and take + K> some snapshots from ground level. Aerial photos might be + K> cheaper for large areas, areas where you're not allowed --- or, + K> perhaps, physically able --- to go, and cases where you don't + K> have time to send a ground guy around the whole area. + +I can see lower-res being useful for Geologists, but considering their +points of interest change only a few times every few million years, +there's not much need to be wireless based on up-to-the-minute data. +I expect most geologists travel with a laptop perfectly capable of DVD +playback, and I also expect the most interesting geology is in regions +where the wireless ain't going to go ;) + +I don't mean to nit-pick, it's just that I'm curious as to (a) the +need for this product that justifies the extreme cost and (b) how we'd +justify the ubiquitous next-generation wireless network that this +product postulates when we /still/ can't find the killer app for 3G. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00505.22cfc49506156219ff2e4441d92e077a b/Ch3/datasets/spam/easy_ham/00505.22cfc49506156219ff2e4441d92e077a new file mode 100644 index 000000000..b746adf1d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00505.22cfc49506156219ff2e4441d92e077a @@ -0,0 +1,77 @@ +From fork-admin@xent.com Mon Sep 9 10:46:21 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D246D16F1C + for ; Mon, 9 Sep 2002 10:45:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 10:45:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g893HIC29684 for ; + Mon, 9 Sep 2002 04:17:18 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B6EB12942BC; Sun, 8 Sep 2002 20:11:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id B2B352942BB for ; + Sun, 8 Sep 2002 20:10:08 -0700 (PDT) +Received: (qmail 23455 invoked from network); 9 Sep 2002 03:12:58 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 9 Sep 2002 03:12:58 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id BDC5C1CC98; + Sun, 8 Sep 2002 23:12:53 -0400 (EDT) +To: James Rogers +Cc: fork@spamassassin.taint.org +Subject: Re: whoa +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 08 Sep 2002 23:12:53 -0400 + +>>>>> "J" == James Rogers writes: + + J> ... They aren't selling the software, which is pretty pricy as + J> it happens. They are using it to optimize next generation + J> wireless canopies over metro areas and fiber networks on a + J> large scale. There are an essentially infinite number of metro + J> wireless configurations, some of which generate far more dead + J> or marginal spots and others which are very expensive to + J> operate (due to backhaul transit considerations) or both. This + J> software can be used as a tool to optimize the canopy coverage + J> and minimize the actual transit costs since the wireless is + J> tied into fiber at multiple points. + +So you only need to map a handful of metropolitan areas? + + J> Or at least investors find this capability very sexy and + J> compelling + +Ah ... now /that/ I will believe :) + +Don't mind me; I'm just getting even more cynical in my old age. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00506.e8f8279bf8b010bab338e085be47dd9b b/Ch3/datasets/spam/easy_ham/00506.e8f8279bf8b010bab338e085be47dd9b new file mode 100644 index 000000000..a8b643f4d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00506.e8f8279bf8b010bab338e085be47dd9b @@ -0,0 +1,71 @@ +From fork-admin@xent.com Mon Sep 9 10:46:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6466316F1E + for ; Mon, 9 Sep 2002 10:45:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 10:45:56 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g893aMC30158 for ; + Mon, 9 Sep 2002 04:36:22 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 59F822942C0; Sun, 8 Sep 2002 20:33:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta7.pltn13.pbi.net (mta7.pltn13.pbi.net [64.164.98.8]) by + xent.com (Postfix) with ESMTP id B7ADB2942BF for ; + Sun, 8 Sep 2002 20:32:13 -0700 (PDT) +Received: from [192.168.123.100] ([64.173.24.253]) by mta7.pltn13.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H25005UQJA6KW@mta7.pltn13.pbi.net> for fork@xent.com; Sun, + 08 Sep 2002 20:34:55 -0700 (PDT) +From: James Rogers +Subject: Re: earthviewer (was Re: whoa} +In-Reply-To: +To: fork@spamassassin.taint.org +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +User-Agent: Microsoft-Entourage/9.0.1.3108 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 08 Sep 2002 20:34:54 -0700 + +On 9/8/02 8:09 PM, "Gary Lawrence Murphy" wrote: +> My car is only just over 1.5 meters across and maybe 3 meters long, so +> that means roughly six pixels total surface area. You might find a +> 16-wheeler this way, but how often do people misplace a 16-wheeler +> such that it is _that_ important to get old images of the terrain? +> Since they can't send up aircraft to update images in realtime every +> time, how is this different from just releasing the map on DVDs? Why +> wireless? + + +It seems that several people are missing the point that this is NOT an image +database. It is high-resolution topological data rendered in three +dimensions. Images are overlayed on the topological data to help people +navigate familiar terrain visually. In other words, it is not intended as a +wannabe spy satellite. Rather it is a very accurate three dimensional model +of the earth's surface. When a particular region in question is covered in +a city, the buildings in the city are mapped as though they are part of the +earth's surface. The part that makes the app killer is that you can map all +sorts of data layers on top of their core topological data. + +Got it? + +-James Rogers + jamesr@best.com + + diff --git a/Ch3/datasets/spam/easy_ham/00507.accde385fd6700b6e66aaeaf9032bfc0 b/Ch3/datasets/spam/easy_ham/00507.accde385fd6700b6e66aaeaf9032bfc0 new file mode 100644 index 000000000..39667532d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00507.accde385fd6700b6e66aaeaf9032bfc0 @@ -0,0 +1,72 @@ +From fork-admin@xent.com Mon Sep 9 10:46:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id ED20116F1F + for ; Mon, 9 Sep 2002 10:45:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 10:45:57 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g893vGC30619 for ; + Mon, 9 Sep 2002 04:57:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0372F2941CE; Sun, 8 Sep 2002 20:54:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id ABEC92941C9 for + ; Sun, 8 Sep 2002 20:53:40 -0700 (PDT) +Received: (qmail 9858 invoked by uid 501); 9 Sep 2002 03:56:09 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 9 Sep 2002 03:56:09 -0000 +From: CDale +To: Tom +Cc: Eugen Leitl , Gordon Mohr , + +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 8 Sep 2002 22:56:09 -0500 (CDT) + +I agree w/ ya Tom. That kind of thinking is SO idiotic. Sure, gays are +promiscuous, and so are hets, but I betcha gays are more AIDSphobic than +hets, generally speaking.... +C + +On Sun, 8 Sep 2002, Tom wrote: + +> On Sun, 8 Sep 2002, Eugen Leitl wrote: +> +> --]doesn't look particularly difficult to do. +> --] +> --]Clearly this is not something what hets do, prostitution not taken into +> --]account. +> +> So lets see, hets dont go to swing clubs, meat markets or the like at all? +> Hmm. And being gay means hanging in the bath house being a cum dumpster +> while you listen to the Devine Ms M belt one out for the boys? +> +> Ugh, with thinking like this who needs the bible belt? +> +> +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00508.80880b09c43a6a31fdf49578eb5692f1 b/Ch3/datasets/spam/easy_ham/00508.80880b09c43a6a31fdf49578eb5692f1 new file mode 100644 index 000000000..6eb8e1ca1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00508.80880b09c43a6a31fdf49578eb5692f1 @@ -0,0 +1,79 @@ +From fork-admin@xent.com Mon Sep 9 10:46:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E0F2116F21 + for ; Mon, 9 Sep 2002 10:46:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 10:46:00 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8956EC00328 for ; + Mon, 9 Sep 2002 06:06:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D4FC42942C3; Sun, 8 Sep 2002 22:03:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from relay.pair.com (relay1.pair.com [209.68.1.20]) by xent.com + (Postfix) with SMTP id 651382941D9 for ; Sun, + 8 Sep 2002 22:02:12 -0700 (PDT) +Received: (qmail 71750 invoked from network); 9 Sep 2002 05:04:58 -0000 +Received: from adsl-67-119-24-60.dsl.snfc21.pacbell.net (HELO golden) + (67.119.24.60) by relay1.pair.com with SMTP; 9 Sep 2002 05:04:58 -0000 +X-Pair-Authenticated: 67.119.24.60 +Message-Id: <02f701c257be$6f1d9e50$640a000a@golden> +From: "Gordon Mohr" +To: +References: +Subject: earthviewer apps Re: whoa +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 8 Sep 2002 22:04:51 -0700 + +Gary Lawrence Murphy cynicizes: +> Hmmm, just as I thought. In other words, it has no practical uses +> whatsoever ;) + +Tourism is the world's largest industry. Using this +to preview your travels, or figure out where you are, +would be very valuable. + +Online gaming continues to grow. Screw "Britannia", +real-life Britain would be a fun world to wander/ +conquer/explore virtually, in role-playing or real- +time-strategy games. + +And of course, as James Rogers points out, it's an +ideal display substrate for all sorts of other +overlaid data. Maps are great, photrealistic 3-D +maps of everywhere which can have many other static +and dynamic datasets overlaid are spectacular. + +(Combining those last two thoughts: consider the +static world map, in faded colors, with patches +here-and-there covered by live webcams, stitched +over the static info in bright colors... it'd be +like the "fog of war" view in games like Warcraft, +over the real world.) + +- Gordon + + + + diff --git a/Ch3/datasets/spam/easy_ham/00509.d5737f6af394368a65215162e3cb23f4 b/Ch3/datasets/spam/easy_ham/00509.d5737f6af394368a65215162e3cb23f4 new file mode 100644 index 000000000..da3df2059 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00509.d5737f6af394368a65215162e3cb23f4 @@ -0,0 +1,72 @@ +From fork-admin@xent.com Mon Sep 9 10:46:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5D27316F20 + for ; Mon, 9 Sep 2002 10:45:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 10:45:59 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g894fDC32162 for ; + Mon, 9 Sep 2002 05:41:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6A6AC2941D3; Sun, 8 Sep 2002 21:38:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 480DB2941CC for ; + Sun, 8 Sep 2002 21:37:14 -0700 (PDT) +Received: (qmail 22976 invoked from network); 9 Sep 2002 04:40:04 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 9 Sep 2002 04:40:04 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id C7A5D1CC98; + Mon, 9 Sep 2002 00:39:58 -0400 (EDT) +To: James Rogers +Cc: fork@spamassassin.taint.org +Subject: Re: earthviewer (was Re: whoa} +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 09 Sep 2002 00:39:58 -0400 + +>>>>> "J" == James Rogers writes: + + J> ... The part that makes the app killer is that you can map all + J> sorts of data layers on top of their core topological data. + + J> Got it? + +Ah, ok ... so some sample applications come to mind, although none of +them require wireless and would do with a DVD, but nonetheless ... + +- Forestry: Maps of the terrain are essential in predicting the spread +of forest fires, esp if this is overlaid with the type of vegetation, +recent waterfall &c + +- farming/conservation can use the high-resolution terrain to overlay +water tables or watershed info. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00510.850dcc2f8864451743299b60cbd4dd5b b/Ch3/datasets/spam/easy_ham/00510.850dcc2f8864451743299b60cbd4dd5b new file mode 100644 index 000000000..09a459598 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00510.850dcc2f8864451743299b60cbd4dd5b @@ -0,0 +1,55 @@ +From fork-admin@xent.com Mon Sep 9 14:34:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6FEC016EFC + for ; Mon, 9 Sep 2002 14:34:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 14:34:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89B4DC10789 for ; + Mon, 9 Sep 2002 12:04:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6B8722941D5; Mon, 9 Sep 2002 04:01:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp01.mrf.mail.rcn.net (smtp01.mrf.mail.rcn.net + [207.172.4.60]) by xent.com (Postfix) with ESMTP id DC76F29409C for + ; Mon, 9 Sep 2002 04:00:08 -0700 (PDT) +Received: from 216-164-236-234.s234.tnt3.frdb.va.dialup.rcn.com + ([216.164.236.234] helo=TOSHIBA-L8QYR7M) by smtp01.mrf.mail.rcn.net with + esmtp (Exim 3.35 #6) id 17oMJg-000417-00 for Fork@xent.com; Mon, + 09 Sep 2002 07:02:52 -0400 +From: "John Evdemon" +To: +MIME-Version: 1.0 +Subject: Re: Recommended Viewing +Message-Id: <3D7C479A.6222.1C08076@localhost> +Priority: normal +In-Reply-To: +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7BIT +Content-Description: Mail message body +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 07:02:50 -0400 + +On 8 Sep 2002 at 22:15, Geege Schuman wrote: + +> who watched Lathe of Heaven? (A&E, 8 pm EDT) who has seen +> the original? +> +By "original" if you are referring to the old PBS version, I liked that version much better. Much more thought provoking. + + diff --git a/Ch3/datasets/spam/easy_ham/00511.a729fad46d130c7f0990e0586ed25aa9 b/Ch3/datasets/spam/easy_ham/00511.a729fad46d130c7f0990e0586ed25aa9 new file mode 100644 index 000000000..8980dade0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00511.a729fad46d130c7f0990e0586ed25aa9 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Mon Sep 9 14:34:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0BCAB16EFC + for ; Mon, 9 Sep 2002 14:34:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 14:34:32 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89BAFC11147 for ; + Mon, 9 Sep 2002 12:10:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 470D52942CA; Mon, 9 Sep 2002 04:07:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 514C52942C9 for + ; Mon, 9 Sep 2002 04:06:10 -0700 (PDT) +Received: (qmail 3525 invoked by uid 508); 9 Sep 2002 11:08:55 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.112) by + venus.phpwebhosting.com with SMTP; 9 Sep 2002 11:08:55 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g89B8p201980; Mon, 9 Sep 2002 13:08:51 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: CDale +Cc: Tom , Gordon Mohr , + +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 13:08:51 +0200 (CEST) + +On Sun, 8 Sep 2002, CDale wrote: + +> I agree w/ ya Tom. That kind of thinking is SO idiotic. Sure, gays + +So how many of your hetero friends had >3 k lovers? + +> are promiscuous, and so are hets, but I betcha gays are more +> AIDSphobic than hets, generally speaking.... + +The virus load issue is orthogonal to the fact. Bzzt. Switch on your +brain, you both. I was mentioning that a subpopulation outside of the sex +industry is/used to be extremely promiscuous, about two orders of +magnitude higher than average. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00512.c77705cc5e9a878a5c1f5b17583720f6 b/Ch3/datasets/spam/easy_ham/00512.c77705cc5e9a878a5c1f5b17583720f6 new file mode 100644 index 000000000..b328ddf79 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00512.c77705cc5e9a878a5c1f5b17583720f6 @@ -0,0 +1,78 @@ +From fork-admin@xent.com Mon Sep 9 14:34:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5238816EFC + for ; Mon, 9 Sep 2002 14:34:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 14:34:34 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89BSDC11487 for ; + Mon, 9 Sep 2002 12:28:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 5384A2942D0; Mon, 9 Sep 2002 04:25:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 1CA9D2942CF for ; + Mon, 9 Sep 2002 04:24:52 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17oMi0-0008Uu-00; Mon, 09 Sep 2002 07:28:01 -0400 +From: "Geege Schuman" +To: "John Evdemon" +Cc: +Subject: RE: Recommended Viewing +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <3D7C479A.6222.1C08076@localhost> +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Importance: Normal +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 07:25:59 -0400 + +Agreed, completely. I totally grokked the notion of unintened consequence +with the original. + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of John +Evdemon +Sent: Monday, September 09, 2002 7:03 AM +To: Fork@xent.com +Subject: Re: Recommended Viewing + + +On 8 Sep 2002 at 22:15, Geege Schuman wrote: + +> who watched Lathe of Heaven? (A&E, 8 pm EDT) who has seen +> the original? +> +By "original" if you are referring to the old PBS version, I liked that +version much better. Much more thought provoking. + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00513.8454cc27ffb04db6d63c81e33c0067e8 b/Ch3/datasets/spam/easy_ham/00513.8454cc27ffb04db6d63c81e33c0067e8 new file mode 100644 index 000000000..d7e91135b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00513.8454cc27ffb04db6d63c81e33c0067e8 @@ -0,0 +1,71 @@ +From fork-admin@xent.com Mon Sep 9 14:34:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2895A16EFC + for ; Mon, 9 Sep 2002 14:34:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 14:34:36 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89BrGC12442 for ; + Mon, 9 Sep 2002 12:53:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A94B72942D3; Mon, 9 Sep 2002 04:50:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 53ADC2941D7 for + ; Mon, 9 Sep 2002 04:49:16 -0700 (PDT) +Received: (qmail 4755 invoked by uid 500); 9 Sep 2002 11:51:52 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 9 Sep 2002 11:51:52 -0000 +From: Chris Haun +X-X-Sender: chris@isolnetsux.techmonkeys.net +To: Eugen Leitl +Cc: CDale , Tom , + Gordon Mohr , +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 07:51:52 -0400 (EDT) + +ok i read back, thats not a typo, you mean three thousand lovers. +where do you get your data? It seems very unlikely, but if you have +supporting evidence i'd like to see it. + +Chris + +On Mon, 9 Sep 2002, Eugen Leitl wrote: + +> On Sun, 8 Sep 2002, CDale wrote: +> +> > I agree w/ ya Tom. That kind of thinking is SO idiotic. Sure, gays +> +> So how many of your hetero friends had >3 k lovers? +> +> > are promiscuous, and so are hets, but I betcha gays are more +> > AIDSphobic than hets, generally speaking.... +> +> The virus load issue is orthogonal to the fact. Bzzt. Switch on your +> brain, you both. I was mentioning that a subpopulation outside of the sex +> industry is/used to be extremely promiscuous, about two orders of +> magnitude higher than average. +> +> +> + + diff --git a/Ch3/datasets/spam/easy_ham/00514.d44bd760b7ea720b9d1e1a7ba105e696 b/Ch3/datasets/spam/easy_ham/00514.d44bd760b7ea720b9d1e1a7ba105e696 new file mode 100644 index 000000000..bee34b814 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00514.d44bd760b7ea720b9d1e1a7ba105e696 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Mon Sep 9 14:34:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B86F816EFC + for ; Mon, 9 Sep 2002 14:34:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 14:34:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89DS9C15806 for ; + Mon, 9 Sep 2002 14:28:10 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A7D812942D6; Mon, 9 Sep 2002 06:25:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 8E3032940B8 for + ; Mon, 9 Sep 2002 06:24:38 -0700 (PDT) +Received: (qmail 5996 invoked by uid 508); 9 Sep 2002 13:27:23 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.112) by + venus.phpwebhosting.com with SMTP; 9 Sep 2002 13:27:23 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g89DRJu05727; Mon, 9 Sep 2002 15:27:20 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: Chris Haun +Cc: CDale , Tom , + Gordon Mohr , +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 15:27:19 +0200 (CEST) + +On Mon, 9 Sep 2002, Chris Haun wrote: + +> ok i read back, thats not a typo, you mean three thousand lovers. +> where do you get your data? It seems very unlikely, but if you have +> supporting evidence i'd like to see it. + +I haven't seen any official data on the web (the high-ranking hits are +overrun by religious bigots), but there's some anecdotal evidence to be +found in + + http://sunsite.berkeley.edu:2020/dynaweb/teiproj/oh/science/aidsnur2/@Generic__BookTextView/5406 + +(search for promiscuity). They mention 300 to 500 partners a year. +(Anecdotally. This is not a statistic). They also mention that this was +specific to gay males. Lesbians don't dig promiscuity in that degree. + + diff --git a/Ch3/datasets/spam/easy_ham/00515.e84988067a252d765f7d24f15c0b0670 b/Ch3/datasets/spam/easy_ham/00515.e84988067a252d765f7d24f15c0b0670 new file mode 100644 index 000000000..99486700b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00515.e84988067a252d765f7d24f15c0b0670 @@ -0,0 +1,104 @@ +From fork-admin@xent.com Mon Sep 9 19:27:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D77F816EFC + for ; Mon, 9 Sep 2002 19:27:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89DgDC16853 for ; + Mon, 9 Sep 2002 14:42:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 348A82942DA; Mon, 9 Sep 2002 06:39:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc51.attbi.com (rwcrmhc51.attbi.com [204.127.198.38]) + by xent.com (Postfix) with ESMTP id 4E3402942D9 for ; + Mon, 9 Sep 2002 06:38:26 -0700 (PDT) +Received: from h00e098788e1f.ne.client2.attbi.com ([24.61.143.15]) by + rwcrmhc51.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) + with ESMTP id + <20020909134114.LFBW19682.rwcrmhc51.attbi.com@h00e098788e1f.ne.client2.attbi.com>; + Mon, 9 Sep 2002 13:41:14 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.52f) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <10770315074.20020909094137@magnesium.net> +To: Eugen Leitl +Cc: fork@spamassassin.taint.org +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 09:41:37 -0400 + + +EL> On Sun, 8 Sep 2002, CDale wrote: + +>> I agree w/ ya Tom. That kind of thinking is SO idiotic. Sure, gays + +EL> So how many of your hetero friends had >3 k lovers? + +So Eugen, how many of your homo friends have -had- 3k lovers? + +In fact, thats a general question for FoRK proper. + +Do you know anyone, outside of meybee Wilt Chamberlin and a few of the +gang-bang porn queens who -have- had even 1.5k lovers? + +Eegads, if you're hypothesizing numbers like -that- Eugen, you at +least owe it to FoRK to back that shit up. + +Otherwise we're liable to assume rampant unfounded homophobia and that +would just be a lose. + +Just a quick assumption here. I'm not a math geek or anything, but +assuming 1 lover every day, that would be like at least one lover +everyday for 8 years and some change. I don't know about you, but +very very few of us are -that- lucky (or even close to that lucky) +and after awhile, even the sexaholics get bored and have to mingle +something new into their weekends. You really are assumiing that the +homosexual population is a) that large in a given area (The meccas +might qualify, but try finding that kind of homosexual population in +say, Tulsa, Oklahoma or Manchester, NH (Tho Manchester does have quite +a few nifty gaybars, but thats a different story) b) that bored/sex +obsessed/recreationally free to pursue sex that often, with that many +partners or that they'd even WANT that many partners. + +Qualify yourself, or at least lower your outrageous numbers. + +=BB +>> are promiscuous, and so are hets, but I betcha gays are more +>> AIDSphobic than hets, generally speaking.... + +EL> The virus load issue is orthogonal to the fact. Bzzt. Switch on your +EL> brain, you both. I was mentioning that a subpopulation outside of the sex +EL> industry is/used to be extremely promiscuous, about two orders of +EL> magnitude higher than average. + + + + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00516.139a390f9320423395da77f14f7118db b/Ch3/datasets/spam/easy_ham/00516.139a390f9320423395da77f14f7118db new file mode 100644 index 000000000..d9ebfd879 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00516.139a390f9320423395da77f14f7118db @@ -0,0 +1,125 @@ +From fork-admin@xent.com Mon Sep 9 19:27:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 13B7316F03 + for ; Mon, 9 Sep 2002 19:27:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:26 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89DuPC17836 for ; + Mon, 9 Sep 2002 14:56:27 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id EB2FD2940A5; Mon, 9 Sep 2002 06:53:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc52.attbi.com (rwcrmhc52.attbi.com [216.148.227.88]) + by xent.com (Postfix) with ESMTP id 9296229409C for ; + Mon, 9 Sep 2002 06:52:43 -0700 (PDT) +Received: from h00e098788e1f.ne.client2.attbi.com ([24.61.143.15]) by + rwcrmhc52.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) + with ESMTP id + <20020909135531.IXCR14182.rwcrmhc52.attbi.com@h00e098788e1f.ne.client2.attbi.com>; + Mon, 9 Sep 2002 13:55:31 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.52f) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <19271172739.20020909095555@magnesium.net> +To: eugen Leitl +Cc: fork@spamassassin.taint.org +Subject: Re[3]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: <10770315074.20020909094137@magnesium.net> +References: + <10770315074.20020909094137@magnesium.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 09:55:55 -0400 + +In addition, one bit of anecdotal evidence from a conversation in +1984! in San Fransisco is hardly enough to extrapolate 500 to 3k. + +This is the only quote I could find relating to promiscuity in +homosexual men. + +"I think people feel a certain invulnerability, especially young +people, like this disease doesn't affect me. The publicity about the disease was very much the kind where it was easy to say, "That isn't me. I'm not promiscuous." Promiscuity, especially, was a piece where people could easily say, "Well, I'm not. Promiscuous is more than I do." If you have 300 partners a year, you can think you're not promiscuous if you know somebody who has 500. So it's all relative, and it was easy to feel that that isn't me." + +You could find hets who have the same kind of partner volume. BFD. +This kind of random generation of numbers that leads the nutty +religious bigots (as you mentioned earlier). + +Grr. Bits damnit. Now, I must go brief. + +-BB + + +EL>> On Sun, 8 Sep 2002, CDale wrote: + +>>> I agree w/ ya Tom. That kind of thinking is SO idiotic. Sure, gays + +EL>> So how many of your hetero friends had >3 k lovers? + +bmn> So Eugen, how many of your homo friends have -had- 3k lovers? + +bmn> In fact, thats a general question for FoRK proper. + +bmn> Do you know anyone, outside of meybee Wilt Chamberlin and a few of the +bmn> gang-bang porn queens who -have- had even 1.5k lovers? + +bmn> Eegads, if you're hypothesizing numbers like -that- Eugen, you at +bmn> least owe it to FoRK to back that shit up. + +bmn> Otherwise we're liable to assume rampant unfounded homophobia and that +bmn> would just be a lose. + +bmn> Just a quick assumption here. I'm not a math geek or anything, but +bmn> assuming 1 lover every day, that would be like at least one lover +bmn> everyday for 8 years and some change. I don't know about you, but +bmn> very very few of us are -that- lucky (or even close to that lucky) +bmn> and after awhile, even the sexaholics get bored and have to mingle +bmn> something new into their weekends. You really are assumiing that the +bmn> homosexual population is a) that large in a given area (The meccas +bmn> might qualify, but try finding that kind of homosexual population in +bmn> say, Tulsa, Oklahoma or Manchester, NH (Tho Manchester does have quite +bmn> a few nifty gaybars, but thats a different story) b) that bored/sex +bmn> obsessed/recreationally free to pursue sex that often, with that many +bmn> partners or that they'd even WANT that many partners. + +bmn> Qualify yourself, or at least lower your outrageous numbers. + +bmn> =BB +>>> are promiscuous, and so are hets, but I betcha gays are more +>>> AIDSphobic than hets, generally speaking.... + +EL>> The virus load issue is orthogonal to the fact. Bzzt. Switch on your +EL>> brain, you both. I was mentioning that a subpopulation outside of the sex +EL>> industry is/used to be extremely promiscuous, about two orders of +EL>> magnitude higher than average. + + + + + + + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00517.4610bfad0be0872b61a11e2e7786a4e5 b/Ch3/datasets/spam/easy_ham/00517.4610bfad0be0872b61a11e2e7786a4e5 new file mode 100644 index 000000000..361c17024 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00517.4610bfad0be0872b61a11e2e7786a4e5 @@ -0,0 +1,63 @@ +From fork-admin@xent.com Mon Sep 9 19:27:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A372D16EFC + for ; Mon, 9 Sep 2002 19:27:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:29 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89E6FC18201 for ; + Mon, 9 Sep 2002 15:06:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4EAF6294101; Mon, 9 Sep 2002 07:03:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain + (pool-162-83-147-92.ny5030.east.verizon.net [162.83.147.92]) by xent.com + (Postfix) with ESMTP id 7D35A2940EC for ; Mon, + 9 Sep 2002 07:02:21 -0700 (PDT) +Received: from localhost (lgonze@localhost) by localhost.localdomain + (8.11.6/8.11.6) with ESMTP id g89DxI203461; Mon, 9 Sep 2002 09:59:19 -0400 +X-Authentication-Warning: localhost.localdomain: lgonze owned process + doing -bs +From: Lucas Gonze +X-X-Sender: lgonze@localhost.localdomain +To: bitbitch@magnesium.net +Cc: FoRK +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: <10770315074.20020909094137@magnesium.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 09:59:18 -0400 (EDT) + +> So Eugen, how many of your homo friends have -had- 3k lovers? +> +> In fact, thats a general question for FoRK proper. + +Uh, zero. I'm sort of offended at having to take this question seriously, +like being black and having to actually explain that black people don't +all sing and dance. I'd guess that gay men compared to straight men have +a linearly greater number of sexual partners on the order of 1.5-2X. But +then again, it not a monolithic or homogeneous community. Who knows? + +3K is utter shite. + +- Lucas + + + + diff --git a/Ch3/datasets/spam/easy_ham/00518.9aaa49b7c1be4cece3992633347b8a40 b/Ch3/datasets/spam/easy_ham/00518.9aaa49b7c1be4cece3992633347b8a40 new file mode 100644 index 000000000..2926708c1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00518.9aaa49b7c1be4cece3992633347b8a40 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Mon Sep 9 19:27:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5787D16F03 + for ; Mon, 9 Sep 2002 19:27:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:31 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89EBEC18519 for ; + Mon, 9 Sep 2002 15:11:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 5C5E22941D0; Mon, 9 Sep 2002 07:05:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 729112941CC for ; Mon, + 9 Sep 2002 07:04:02 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 722573EDCA; + Mon, 9 Sep 2002 10:10:18 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 6510A3EDC6; Mon, 9 Sep 2002 10:10:18 -0400 (EDT) +From: Tom +To: Gordon Mohr +Cc: fork@spamassassin.taint.org +Subject: Re: earthviewer apps Re: whoa +In-Reply-To: <02f701c257be$6f1d9e50$640a000a@golden> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 10:10:18 -0400 (EDT) + +On Sun, 8 Sep 2002, Gordon Mohr wrote: + +--]Gary Lawrence Murphy cynicizes: +--]> Hmmm, just as I thought. In other words, it has no practical uses +--]> whatsoever ;) +--] +--]Online gaming continues to grow. Screw "Britannia", +--]real-life Britain would be a fun world to wander/ +--]conquer/explore virtually, in role-playing or real- +--]time-strategy games. + + +Andthus....Geocaching.....this would make a nice little "let me check this +set of coord out before we trek into 10 feet of quicksand" + + + diff --git a/Ch3/datasets/spam/easy_ham/00519.595dfd5bc0bec7bd5f06673fc428bbb3 b/Ch3/datasets/spam/easy_ham/00519.595dfd5bc0bec7bd5f06673fc428bbb3 new file mode 100644 index 000000000..4853dec40 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00519.595dfd5bc0bec7bd5f06673fc428bbb3 @@ -0,0 +1,106 @@ +From fork-admin@xent.com Mon Sep 9 19:27:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1CB1516EFC + for ; Mon, 9 Sep 2002 19:27:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89EDJC18586 for ; + Mon, 9 Sep 2002 15:13:19 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 396C72942BB; Mon, 9 Sep 2002 07:10:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 7FCFA2940EC for + ; Mon, 9 Sep 2002 07:09:53 -0700 (PDT) +Received: (qmail 19477 invoked by uid 508); 9 Sep 2002 14:12:38 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.112) by + venus.phpwebhosting.com with SMTP; 9 Sep 2002 14:12:38 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g89ECa407063; Mon, 9 Sep 2002 16:12:36 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: +Cc: +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: <10770315074.20020909094137@magnesium.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 16:12:36 +0200 (CEST) + +On Mon, 9 Sep 2002 bitbitch@magnesium.net wrote: + +> So Eugen, how many of your homo friends have -had- 3k lovers? + +Just one. Not everybody does that. Most of them are now dead, anyway. + +> Do you know anyone, outside of meybee Wilt Chamberlin and a few of the +> gang-bang porn queens who -have- had even 1.5k lovers? + +Yes. Notice that I've specifically excluded sex industry. That be +cheating. + +> Eegads, if you're hypothesizing numbers like -that- Eugen, you at +> least owe it to FoRK to back that shit up. + +Ain't done no hypothesizing. Anecdotal evidence'R'Us. Couldn't you just +Google, or something? + +> Otherwise we're liable to assume rampant unfounded homophobia and that +> would just be a lose. + +Yeah, I'm a gay Jew Nazi Muslim who's also a lead character on Kaz's +underworld. Can we go on with the programme now? + +> Just a quick assumption here. I'm not a math geek or anything, but +> assuming 1 lover every day, that would be like at least one lover +> everyday for 8 years and some change. I don't know about you, but +> very very few of us are -that- lucky (or even close to that lucky) + +Which was my point. Gurls don't do hyperpromiscuity as a life style. It's +interesting that you're launching into a diatribe, and threaten using +instant argument (just add hominem) instead of assuming I might be not +just pulling this whole thing out my nether orifice. + +> and after awhile, even the sexaholics get bored and have to mingle +> something new into their weekends. You really are assumiing that the +> homosexual population is a) that large in a given area (The meccas + +You ever been to San Francisco? + +> might qualify, but try finding that kind of homosexual population in +> say, Tulsa, Oklahoma or Manchester, NH (Tho Manchester does have quite + +Yeah, I think it could be also difficult finding a gay bathhouse in Thule, +Greenland. Or parts of central Africa. To think of it, both Oort and +Kuiper belts are utterly devoid of gay people as well. Isn't this +remarkable? + +> a few nifty gaybars, but thats a different story) b) that bored/sex +> obsessed/recreationally free to pursue sex that often, with that many +> partners or that they'd even WANT that many partners. + +This doesn't happen because it couldn't happen. No one would want to. +Because you feel that way. Correct? + +> Qualify yourself, or at least lower your outrageous numbers. + +I didn't expect so much reflexive knee-jerking on this list. + + diff --git a/Ch3/datasets/spam/easy_ham/00520.823579bff3285c4aefe85db5bff0d6c9 b/Ch3/datasets/spam/easy_ham/00520.823579bff3285c4aefe85db5bff0d6c9 new file mode 100644 index 000000000..a1acb46a8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00520.823579bff3285c4aefe85db5bff0d6c9 @@ -0,0 +1,55 @@ +From fork-admin@xent.com Mon Sep 9 19:27:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4DBDA16F03 + for ; Mon, 9 Sep 2002 19:27:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89EJ9C18674 for ; + Mon, 9 Sep 2002 15:19:10 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 13FC72942E0; Mon, 9 Sep 2002 07:13:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 30FB92942DF for ; Mon, + 9 Sep 2002 07:12:47 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 526E03EDC6; + Mon, 9 Sep 2002 10:19:02 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 50B803ED79; Mon, 9 Sep 2002 10:19:02 -0400 (EDT) +From: Tom +To: Lucas Gonze +Cc: bitbitch@magnesium.net, FoRK +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 10:19:02 -0400 (EDT) + +On Mon, 9 Sep 2002, Lucas Gonze wrote: + +--]3K is utter shite. +--] + +3k is a number that probably sounds good to some closted homophobe with +secret desires to be "belle of the balls". Twinks dinks and dorks, this +thread sounds to me like someone needs a little luvin. + + + diff --git a/Ch3/datasets/spam/easy_ham/00521.900f67b5696388c58966c58e3aaaf90c b/Ch3/datasets/spam/easy_ham/00521.900f67b5696388c58966c58e3aaaf90c new file mode 100644 index 000000000..4fda3d2a6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00521.900f67b5696388c58966c58e3aaaf90c @@ -0,0 +1,70 @@ +From fork-admin@xent.com Mon Sep 9 19:27:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0FC3616EFC + for ; Mon, 9 Sep 2002 19:27:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89EPOC18907 for ; + Mon, 9 Sep 2002 15:25:26 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0C4B72942DF; Mon, 9 Sep 2002 07:22:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 7C2012940EC for + ; Mon, 9 Sep 2002 07:21:16 -0700 (PDT) +Received: (qmail 23212 invoked by uid 508); 9 Sep 2002 14:24:01 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.112) by + venus.phpwebhosting.com with SMTP; 9 Sep 2002 14:24:01 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g89ENvB07381; Mon, 9 Sep 2002 16:23:58 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: Lucas Gonze +Cc: , FoRK +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 16:23:57 +0200 (CEST) + +On Mon, 9 Sep 2002, Lucas Gonze wrote: + +> a linearly greater number of sexual partners on the order of 1.5-2X. But +> then again, it not a monolithic or homogeneous community. Who knows? + +Did I claim "all gay people are hyperpromiscuous"? For what this is worth, +I would claim they're considerably more promiscuous on the average than +your average het. My utterly unscientific, unsubstatiated claim is that +the typical male would *like* to be considerably more promiscous than your +average female (ay, and here's the rub. pray don't forget the kleenex). +Look up different reproduction strategies, due to basic hardware +difference (sexual dimorphism). You'd do that too if it happened to you. + +Once you go past the first three of four pages of hysterical propaganda on +Google you might actually run into real studies. Anyone game? I have to +work (well, pretend to). + +> 3K is utter shite. + +This is getting better and better. You know 3K is utter shite how? You +just feel the number can't be right, yes? Deep inside? I'm way overposting +today, but I find this entire exchange hee-lay-rious. + + diff --git a/Ch3/datasets/spam/easy_ham/00522.db4b857b35a54049c2dc88b2516eb1ea b/Ch3/datasets/spam/easy_ham/00522.db4b857b35a54049c2dc88b2516eb1ea new file mode 100644 index 000000000..5914318a3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00522.db4b857b35a54049c2dc88b2516eb1ea @@ -0,0 +1,61 @@ +From fork-admin@xent.com Mon Sep 9 19:27:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CB94F16F03 + for ; Mon, 9 Sep 2002 19:27:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:38 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89EVDC19144 for ; + Mon, 9 Sep 2002 15:31:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 788F629409C; Mon, 9 Sep 2002 07:28:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain + (pool-162-83-147-92.ny5030.east.verizon.net [162.83.147.92]) by xent.com + (Postfix) with ESMTP id CAAA329409A for ; Mon, + 9 Sep 2002 07:27:06 -0700 (PDT) +Received: from localhost (lgonze@localhost) by localhost.localdomain + (8.11.6/8.11.6) with ESMTP id g89EO6f03565 for ; + Mon, 9 Sep 2002 10:24:06 -0400 +X-Authentication-Warning: localhost.localdomain: lgonze owned process + doing -bs +From: Lucas Gonze +X-X-Sender: lgonze@localhost.localdomain +Cc: FoRK +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 10:24:06 -0400 (EDT) + +Tom wrote: +> 3k is a number that probably sounds good to some closted homophobe with +> secret desires to be "belle of the balls". Twinks dinks and dorks, this +> thread sounds to me like someone needs a little luvin. + +I dunno if I'd accuse everybody who believes the 3K number of needing a +little luvin, but I completely believe that this myth has survived because +there's a lot of people who need more lovin. Plus it fits in with a bunch +of different archetypes. + +- Lucas + + + + diff --git a/Ch3/datasets/spam/easy_ham/00523.9fcc28348487963a8ae5f43c3deb4334 b/Ch3/datasets/spam/easy_ham/00523.9fcc28348487963a8ae5f43c3deb4334 new file mode 100644 index 000000000..556f080a0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00523.9fcc28348487963a8ae5f43c3deb4334 @@ -0,0 +1,145 @@ +From fork-admin@xent.com Mon Sep 9 19:27:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 786EB16EFC + for ; Mon, 9 Sep 2002 19:27:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:40 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89EaTC19304 for ; + Mon, 9 Sep 2002 15:36:30 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 42C87294185; Mon, 9 Sep 2002 07:30:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc51.attbi.com (rwcrmhc51.attbi.com [204.127.198.38]) + by xent.com (Postfix) with ESMTP id 10FFC2940FC for ; + Mon, 9 Sep 2002 07:29:37 -0700 (PDT) +Received: from h00e098788e1f.ne.client2.attbi.com ([24.61.143.15]) by + rwcrmhc51.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) + with ESMTP id + <20020909143224.NTSV19682.rwcrmhc51.attbi.com@h00e098788e1f.ne.client2.attbi.com>; + Mon, 9 Sep 2002 14:32:24 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.52f) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <15773384464.20020909103246@magnesium.net> +To: Eugen Leitl +Cc: fork@spamassassin.taint.org +Subject: Re[3]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 10:32:46 -0400 + + + + +EL> On Mon, 9 Sep 2002 bitbitch@magnesium.net wrote: + +>> So Eugen, how many of your homo friends have -had- 3k lovers? + +EL> Just one. Not everybody does that. Most of them are now dead, anyway. + +Point is, you're not likely to extrapolate much. I could probably +find one hetero who had just as much sex. Does that mean we're all +rampant hos? No. + + +>> Eegads, if you're hypothesizing numbers like -that- Eugen, you at +>> least owe it to FoRK to back that shit up. + +EL> Ain't done no hypothesizing. Anecdotal evidence'R'Us. Couldn't you just +EL> Google, or something? + +Listen. If you pull numbers like that without a fact, the automagic +assumption is yes, they were extracted out of your neither orifice. +Point wasn't to conclude otherwise unless you had any relevant bits. +Its not my job to do _your_ bit searching for you, but I figured I'd +humor fork with this bit of finding: + +http://www.thebody.com/bp/apr01/research_notebook.html (Pointing ot +averages of about 13 for every 3 months (for gay men), which totals to +about 52 a year. 52 a year doesn't equal 3000. Or even 300. + + +>> Just a quick assumption here. I'm not a math geek or anything, but +>> assuming 1 lover every day, that would be like at least one lover +>> everyday for 8 years and some change. I don't know about you, but +>> very very few of us are -that- lucky (or even close to that lucky) + +EL> Which was my point. Gurls don't do hyperpromiscuity as a life style. It's +EL> interesting that you're launching into a diatribe, and threaten using +EL> instant argument (just add hominem) instead of assuming I might be not +EL> just pulling this whole thing out my nether orifice. + +WTF do my shitty math skillz have to do with girls and +hyperpromiscuity? I was speaking -generally- meaning that guys and +girls probably have better things to do than boink everything they +see. As above, I am assuming you're pulling things out of your ass, I +just felt like calling you on it. + +BTW, there's nothing wrong with calling someone on a silly idea. Its +allowed, and its generally not considered ad hominem, but the +homophobia statement might be. + +>> and after awhile, even the sexaholics get bored and have to mingle +>> something new into their weekends. You really are assumiing that the +>> homosexual population is a) that large in a given area (The meccas + +EL> You ever been to San Francisco? + +Many times. Which is why I said 'assuming that large ... (The meccas +dont count). SF is a mecca in this example. I obviously wasn't +clear, tho one could assume I wasn't talking about Medina. + + + +>> a few nifty gaybars, but thats a different story) b) that bored/sex +>> obsessed/recreationally free to pursue sex that often, with that many +>> partners or that they'd even WANT that many partners. + +EL> This doesn't happen because it couldn't happen. No one would want to. +EL> Because you feel that way. Correct? + +doesn't happen? true. Couldn't happen? who knows. It has nothing +to do with how I 'feel' and everything to do with the fact that people +do concern themselves with more than just sex (otherwise I think we'd +see a helluva lot more of sex, and a helluva lot less of everything +else). + + +>> Qualify yourself, or at least lower your outrageous numbers. + +EL> I didn't expect so much reflexive knee-jerking on this list. + +Well my suggestion is, if you can't take the responses, don't post +flamebait. + + + + + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00524.8635e65e0ff007a8d5cc29de21c04cfc b/Ch3/datasets/spam/easy_ham/00524.8635e65e0ff007a8d5cc29de21c04cfc new file mode 100644 index 000000000..666df8b25 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00524.8635e65e0ff007a8d5cc29de21c04cfc @@ -0,0 +1,72 @@ +From fork-admin@xent.com Mon Sep 9 19:27:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C65FB16F03 + for ; Mon, 9 Sep 2002 19:27:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:42 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89EeJC19551 for ; + Mon, 9 Sep 2002 15:40:19 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E75512942C9; Mon, 9 Sep 2002 07:33:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 6171C2941DC for + ; Mon, 9 Sep 2002 07:32:09 -0700 (PDT) +Received: (qmail 28839 invoked by uid 501); 9 Sep 2002 14:34:47 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 9 Sep 2002 14:34:47 -0000 +From: CDale +To: Eugen Leitl +Cc: Tom , Gordon Mohr , + +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 09:34:47 -0500 (CDT) + + + +On Mon, 9 Sep 2002, Eugen Leitl wrote: + +> On Sun, 8 Sep 2002, CDale wrote: +> +> > I agree w/ ya Tom. That kind of thinking is SO idiotic. Sure, gays +> +> So how many of your hetero friends had >3 k lovers? + +None. How many of my gay friends have had > 3k lovers? None. + +> +> > are promiscuous, and so are hets, but I betcha gays are more +> > AIDSphobic than hets, generally speaking.... +> +> The virus load issue is orthogonal to the fact. Bzzt. Switch on your +> brain, you both. I was mentioning that a subpopulation outside of the sex +> industry is/used to be extremely promiscuous, about two orders of +> magnitude higher than average. + + +two orders of magnitude higher than average isn't 3k, I don't think. Why +don't ya give us a url or something that told you all this stuff? Or did +you just pull it out of your ass? (: +C + + diff --git a/Ch3/datasets/spam/easy_ham/00525.08f2f03dc58bc667d28140d30c203cea b/Ch3/datasets/spam/easy_ham/00525.08f2f03dc58bc667d28140d30c203cea new file mode 100644 index 000000000..8f8281563 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00525.08f2f03dc58bc667d28140d30c203cea @@ -0,0 +1,54 @@ +From fork-admin@xent.com Mon Sep 9 19:27:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8DF2B16EFC + for ; Mon, 9 Sep 2002 19:27:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89EiTC19659 for ; + Mon, 9 Sep 2002 15:44:30 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 19E212942E6; Mon, 9 Sep 2002 07:36:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain + (pool-162-83-147-92.ny5030.east.verizon.net [162.83.147.92]) by xent.com + (Postfix) with ESMTP id 9D32529409A for ; Mon, + 9 Sep 2002 07:35:12 -0700 (PDT) +Received: from localhost (lgonze@localhost) by localhost.localdomain + (8.11.6/8.11.6) with ESMTP id g89EW8J03592 for ; + Mon, 9 Sep 2002 10:32:08 -0400 +X-Authentication-Warning: localhost.localdomain: lgonze owned process + doing -bs +From: Lucas Gonze +X-X-Sender: lgonze@localhost.localdomain +Cc: FoRK +Subject: Re[2]: Selling Wedded Bliss (was Re: Ouch...) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 10:32:07 -0400 (EDT) + +> This is getting better and better. You know 3K is utter shite how? + +I'm not going to be your spokesman, Eugen. Figure it out yourself. + +over and out. + + + diff --git a/Ch3/datasets/spam/easy_ham/00526.27d0075c192b704fd3b804497b8c33d1 b/Ch3/datasets/spam/easy_ham/00526.27d0075c192b704fd3b804497b8c33d1 new file mode 100644 index 000000000..f9660c08a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00526.27d0075c192b704fd3b804497b8c33d1 @@ -0,0 +1,88 @@ +From fork-admin@xent.com Mon Sep 9 19:27:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1159116F03 + for ; Mon, 9 Sep 2002 19:27:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89FIvC20754 for ; + Mon, 9 Sep 2002 16:19:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 168242940E2; Mon, 9 Sep 2002 08:15:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from relay.pair.com (relay1.pair.com [209.68.1.20]) by xent.com + (Postfix) with SMTP id 762402940C9 for ; Mon, + 9 Sep 2002 08:14:22 -0700 (PDT) +Received: (qmail 86095 invoked from network); 9 Sep 2002 15:16:59 -0000 +Received: from adsl-63-196-1-228.dsl.snfc21.pacbell.net (HELO golden) + (63.196.1.228) by relay1.pair.com with SMTP; 9 Sep 2002 15:16:59 -0000 +X-Pair-Authenticated: 63.196.1.228 +Message-Id: <00e701c25813$eec5ab70$640a000a@golden> +From: "Gordon Mohr" +To: +References: + <15773384464.20020909103246@magnesium.net> +Subject: Re: Re[3]: Selling Wedded Bliss (was Re: Ouch...) +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 08:16:53 -0700 + +Bitbitch writes: +> Listen. If you pull numbers like that without a fact, the automagic +> assumption is yes, they were extracted out of your neither orifice. +> Point wasn't to conclude otherwise unless you had any relevant bits. +> Its not my job to do _your_ bit searching for you, but I figured I'd +> humor fork with this bit of finding: +> +> http://www.thebody.com/bp/apr01/research_notebook.html (Pointing ot +> averages of about 13 for every 3 months (for gay men), which totals to +> about 52 a year. 52 a year doesn't equal 3000. Or even 300. + +Er, that study would seem to lend credence to Eugen's +estimations, rather than casting fresh doubts. + +52 a year *does* exceed 300, in under 6 years' time. The average +age of that study's participants was *39* -- meaning some +participants may have had 20-25+ years of active sex life. + +At that age, and further ** HIV+ **, it seems reasonable to +think that some the participants may have actually slowed +their pace a bit. + +So while this study's summary info is incomplete, you could +easily conclude that the *average* participant in this one study +will have had over a thousand partners over a 40-50+ year active +sex life, and so the even-more-active tails of the distribution +could easily be in the 3000+ range. + +Of course this says very little, almost nothing, about the overall +population behavior, gay or straight, and the relative prevalence +of 3K+ individuals in either group. But it does strongly suggest +that gay males with 3K+ partners exist in measurable numbers, so +people should stop treating Eugen's anecdotal estimation as if it +were sheer fantasy. BitBitch's own citation suggests otherwise. + +- Gordon + + + diff --git a/Ch3/datasets/spam/easy_ham/00527.fe739430917f1facd61acbc162d71970 b/Ch3/datasets/spam/easy_ham/00527.fe739430917f1facd61acbc162d71970 new file mode 100644 index 000000000..571ae506d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00527.fe739430917f1facd61acbc162d71970 @@ -0,0 +1,213 @@ +From fork-admin@xent.com Mon Sep 9 19:27:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1863516EFC + for ; Mon, 9 Sep 2002 19:27:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89FrJC21961 for ; + Mon, 9 Sep 2002 16:53:26 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 01F7D2940AD; Mon, 9 Sep 2002 08:50:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from blount.mail.mindspring.net (blount.mail.mindspring.net + [207.69.200.226]) by xent.com (Postfix) with ESMTP id 9F98C2940AD for + ; Mon, 9 Sep 2002 08:49:09 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + blount.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17oQpI-0007U4-00; + Mon, 09 Sep 2002 11:51:49 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: Digital Bearer Settlement List , fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: [CYBERIA] [Final CfP]: Int. J. on IT Standards Research +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 09:09:47 -0400 + + +--- begin forwarded text + + +Priority: normal +Date: Mon, 9 Sep 2002 08:56:49 +0000 +Reply-To: Law & Policy of Computer Communications + +Sender: Law & Policy of Computer Communications + +Comments: Authenticated sender is jakobs@i4mail.informatik.rwth-aachen.de +From: Kai Jakobs +Subject: [CYBERIA] [Final CfP]: Int. J. on IT Standards Research +To: CYBERIA-L@LISTSERV.AOL.COM + +Hello, + +Just a brief reminder that the deadline for submisisons for issue 2 +of the + +'International Journal of IT Standards & Standardization Research' (JITSR) + +is October 1. + +JITSR is a new, multi-disciplinary publication outlet for everyone who +is doing research into IT standards and standardisation (from whichever +perspective). + +So if you think you've got a paper that might fit - why not submit +it for JITSR? + +And please do ask if you need any further information. + + +Greetings from Aachen. + +Cheers, +Kai. + + +----------------------------- + + +Call for Papers + +for Issue 2 of the + +International Journal of +IT Standards & Standardization Research + + +This new journal aims to be a platform for presenting, and +discussing, the broad variety of aspects that make up IT standards +research. This includes, but is certainly not limited to, +contributions from the disciplines of computer science, information +systems, management, business, social sciences (especially science +and technology studies), economics, engineering, political science, +public policy, sociology, communication, and human factors/ +usability. In particular, the journal wants to both support and +promote multi-disciplinary research on IT standards; 'IT' +should be understood in a very broad sense. + +Topics to be covered include, but are not limited to: + + - Technological innovation and standardisation + - Standards for information infrastructures + - Standardisation and economic development + - Open Source and standardisation + - Intellectual property rights + - Economics of standardisation + - Emerging roles of formal standards organisations and consortia + - Conformity assessment + - National, regional, international and corporate standards + strategies + - Standardisation and regulation + - Standardisation as a form of the Public Sphere + - Standardisation and public policy formation + - Analyses of standards setting processes, products, and + organisation + - Case studies of standardisation + - Impacts of market-driven standardisation and emerging players + - The future of standardisation + - Multinational and transnational perspectives and impacts + - Commercial value of proprietary specifications + - Descriptive & prescriptive theories of standardisation + - Standards research and education activities + - Tools and services supporting improved standardisation + - User related issues + - Risks of standardisation + - Management of standards + - History of Standards + - Standards and technology transfer + +Authors are requested to submit their manuscripts as an e-mail +attachment in RTF or PDF to the editor-in-chief at +Kai.Jakobs@i4.informatik.rwth-aachen.de. + +If this form of submission is not possible, please send one hardcopy +of the manuscript together with a disk containing the electronic +version of the manuscript in RTF or PDF to: +Kai Jakobs, +Technical University of Aachen, Computer Science Department, +Informatik IV +Ahornstr. 55, D-52074 Aachen, Germany. + +Manuscripts must be written in English on letter-size or A4 paper, +one side only, double-spaced throughout, and include at least 1" +(2.54 cm) of margin on all sides. The cover page should contain the +paper title, and the name, affiliation, address, phone number, fax +number, and e-mail address of each author. The second page should +start with the paper title at the top and be immediately followed by +the abstract. Except on the cover page, the authors' names and +affiliations must NOT appear in the manuscript. The abstract of 100- +150 words should clearly summarise the objectives and content of the +manuscript. Submitted manuscript should normally be 4000-6000 words +long; longer ones will be considered but may be subject to editorial +revision. + +Submission of a paper implies that its content is original and that +it has not been published previously, and that it is not under +consideration for publication elsewhere. Yet, significantly extended +papers previously presented at conferences may be acceptable. + +For more information please see +http://www-i4.informatik.rwth-aachen.de/~jakobs/standards_journal/journal_home.html + +or visit the publisher's web site at +http://www.idea-group.com/journals/details.asp?id=497 + + +Important Dates for the Inaugural Issue: + +Submission Deadline for Issue 2: October 1, 2002 +Notification of Acceptance: December 1, 2002 +Camera-ready Paper Due: January 15, 2003 + + +________________________________________________________________ + + +Kai Jakobs + +Technical University of Aachen +Computer Science Department +Informatik IV (Communication and Distributed Systems) +Ahornstr. 55, D-52074 Aachen, Germany +Tel.: +49-241-80-21405 +Fax: +49-241-80-22220 +Kai.Jakobs@i4.informatik.rwth-aachen.de +http://www-i4.informatik.rwth-aachen.de/~jakobs/kai/kai_home.html + + +********************************************************************** +For Listserv Instructions, see http://www.lawlists.net/cyberia +Off-Topic threads: http://www.lawlists.net/mailman/listinfo/cyberia-ot +Need more help? Send mail to: Cyberia-L-Request@listserv.aol.com +********************************************************************** + +--- end forwarded text + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00528.4069e359640cbe831b602fd3cc387469 b/Ch3/datasets/spam/easy_ham/00528.4069e359640cbe831b602fd3cc387469 new file mode 100644 index 000000000..e73965cdf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00528.4069e359640cbe831b602fd3cc387469 @@ -0,0 +1,83 @@ +From fork-admin@xent.com Mon Sep 9 19:27:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0E0C916F03 + for ; Mon, 9 Sep 2002 19:27:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89G1GC22304 for ; + Mon, 9 Sep 2002 17:01:18 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AAE842941DB; Mon, 9 Sep 2002 08:53:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 097712941D9 for + ; Mon, 9 Sep 2002 08:52:45 -0700 (PDT) +Received: (qmail 6401 invoked by uid 500); 9 Sep 2002 15:55:16 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 9 Sep 2002 15:55:16 -0000 +From: Chris Haun +X-X-Sender: chris@isolnetsux.techmonkeys.net +To: fork@spamassassin.taint.org +Subject: Internet radio - example from a college station +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 11:55:16 -0400 (EDT) + +Just thought i'd pass this on, my favorite radio station in raleigh is +going off the internet due to the new fees and restrictions associated +with remaining online. this is from the station manager and describes the +situation. + +---------- Forwarded message ---------- +Date: Tue, 3 Sep 2002 13:13:17 -0400 +From: Arielle +Subject: RE: KNC Stream [1:51144:51751] + +This message was sent from: WKNC Chat. + +---------------------------------------------------------------- + +It does, but it's not the cost that is causing us to shut it down. The cost +is a "minimum $500 per year"... but that only accounts for 18 people +streaming and playing like 13 or 14 songs an hour. But we could maybe manage +the 2 cents per person, per 100 songs. + +The problem comes with the record keeping they mandate with webstreaming. +Start and end times for every song (not too hard), artist (okay), title +(okay), composers (a little harder), serial number (wtf??). I think there +are a few more things they wanted, but honestly, programming this info in +for every song that we play is ridiculous. This means we'd also have to get +all the DJs to find this info and write it down any time they play a +request, vinyl, or CDs not loaded into the computer. It's ridiculous and +nearly impossible... + +We would need someone to sit in the studio 24/7 writing down all this info - +which sometimes isn't available, like from earlier album that don't have +serial numbers and barcodes. Then still if only the magic 18 people +webstream our signal, the price would become quite exponential since we play +on average 16 songs an hour, we'd be paying $22.11 everyday to stream to +those 18 people. So really, it does have to do with the internet tax, but it +is a few reasons together why we can't do it after their kill-date. :( + + +---------------------------------------------------------------- +Sent using Phorum software version 3.2.6 + + diff --git a/Ch3/datasets/spam/easy_ham/00529.f267247f996b2eab55c6e18b63e3968b b/Ch3/datasets/spam/easy_ham/00529.f267247f996b2eab55c6e18b63e3968b new file mode 100644 index 000000000..3ae811cb3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00529.f267247f996b2eab55c6e18b63e3968b @@ -0,0 +1,80 @@ +From fork-admin@xent.com Mon Sep 9 19:27:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B5D8C16EFC + for ; Mon, 9 Sep 2002 19:27:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:27:56 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89G8TC22536 for ; + Mon, 9 Sep 2002 17:08:29 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E7DB52940A8; Mon, 9 Sep 2002 09:05:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from imo-d04.mx.aol.com (imo-d04.mx.aol.com [205.188.157.36]) by + xent.com (Postfix) with ESMTP id 1866529409A for ; + Mon, 9 Sep 2002 09:04:18 -0700 (PDT) +Received: from ThosStew@aol.com by imo-d04.mx.aol.com (mail_out_v34.10.) + id x.3e.23ec2d20 (3842); Mon, 9 Sep 2002 12:06:48 -0400 (EDT) +From: ThosStew@aol.com +Message-Id: <3e.23ec2d20.2aae2118@aol.com> +Subject: Re: Re[3]: Selling Wedded Bliss (was Re: Ouch...) +To: gojomo@usa.net, fork@spamassassin.taint.org +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Mailer: AOL 5.0 for Mac sub 45 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 12:06:48 EDT + +Here are numbers that come from a study of a couple of thousand swedes, with +no reference to sexual preference that I could find. The point would seem to +be that (1) sexual activity follows a power curve, with a few people, a la +Wilt Chamberlain, having an extaordinarily large number of sexual contacts, +ev en in a short period of time and (2) a tendency for men to have more +partners than women. I have no idea, being a statistical ignoramus, whether +the fact that there seem to be more men than women at the extremely +promiscuous end of the sex-partners-distribution curve means that you'd get +even more extreme results in a group of men who chiefly have sex with other +men. + + +http://polymer.bu.edu/~amaral/Sex_partners/Content_sex.html + +<> + + +As for gay men: There is indeed anecdotal evidence of cases of extreme +promiscuity among gay men. You can read about it in Randy Schiltz's And the +Band Played On. He writes about bathhouse culture pre-HIV; he also discusses +how, in the gay politics of the time, there was a sub-culture of what you +might call radical gay men who argued (and acted on the argument) that having +many partners was an essential part of what being gay actually was. It was an +explicitly political statement: monogamy is an artifact of straight culture. + That view seems to have died, in more ways than one. Part of the point of +Schiltz's book was to condemn the role that it and bathhouse culture played +in spreading the AIDs epidemic that eventually killed Schiltz, among so many +others. This doesn't let Eugen off the hook--but it is accurate to say that +there was a cult of promiscuity that was particular to the gay community. + +Tom + + diff --git a/Ch3/datasets/spam/easy_ham/00530.1a07bbd6fe2438ed2b3f11e92449327c b/Ch3/datasets/spam/easy_ham/00530.1a07bbd6fe2438ed2b3f11e92449327c new file mode 100644 index 000000000..e5f1a05d7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00530.1a07bbd6fe2438ed2b3f11e92449327c @@ -0,0 +1,69 @@ +From fork-admin@xent.com Mon Sep 9 19:28:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7866016EFC + for ; Mon, 9 Sep 2002 19:28:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:28:00 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89GVPC23468 for ; + Mon, 9 Sep 2002 17:31:26 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 816472941D1; Mon, 9 Sep 2002 09:28:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id 9543229409A for ; + Mon, 9 Sep 2002 09:27:03 -0700 (PDT) +Received: from Golux.Com (dsl-64-192-128-105.telocity.com + [64.192.128.105]) by Boron.MeepZor.Com (8.11.6/8.11.6) with ESMTP id + g89GTkE23656; Mon, 9 Sep 2002 12:29:46 -0400 +Message-Id: <3D7CCC7F.F8EBCAE@Golux.Com> +From: Rodent of Unusual Size +Organization: The Apache Software Foundation +X-Mailer: Mozilla 4.79 [en] (Windows NT 5.0; U) +X-Accept-Language: en +MIME-Version: 1.0 +To: Chris Haun +Cc: fork@spamassassin.taint.org +Subject: Re: Internet radio - example from a college station +References: +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 09 Sep 2002 12:29:51 -0400 + +Chris Haun wrote: +> +> We would need someone to sit in the studio 24/7 writing down all this info - +> which sometimes isn't available, like from earlier album that don't have +> serial numbers and barcodes. Then still if only the magic 18 people +> webstream our signal, the price would become quite exponential since we play +> on average 16 songs an hour, we'd be paying $22.11 everyday to stream to +> those 18 people. So really, it does have to do with the internet tax, but it +> is a few reasons together why we can't do it after their kill-date. :( + +Who is John Galt? + +(RoUS in the throes of reading Atlas Shrugged again) +-- +#ken P-)} + +Ken Coar, Sanagendamgagwedweinini http://Golux.Com/coar/ +Author, developer, opinionist http://Apache-Server.Com/ + +"Millennium hand and shrimp!" + + diff --git a/Ch3/datasets/spam/easy_ham/00531.711a16c97d6955bdc3d4b09656e44d93 b/Ch3/datasets/spam/easy_ham/00531.711a16c97d6955bdc3d4b09656e44d93 new file mode 100644 index 000000000..4e55d1111 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00531.711a16c97d6955bdc3d4b09656e44d93 @@ -0,0 +1,75 @@ +From fork-admin@xent.com Mon Sep 9 19:28:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D274616EFC + for ; Mon, 9 Sep 2002 19:28:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:28:04 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89HfEC25594 for ; + Mon, 9 Sep 2002 18:41:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2D9942941DF; Mon, 9 Sep 2002 10:38:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from maynard.mail.mindspring.net (maynard.mail.mindspring.net + [207.69.200.243]) by xent.com (Postfix) with ESMTP id 808CB29409A for + ; Mon, 9 Sep 2002 10:37:48 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + maynard.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17oSWL-0007E3-00; + Mon, 09 Sep 2002 13:40:22 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: <00e701c25813$eec5ab70$640a000a@golden> +References: + <15773384464.20020909103246@magnesium.net> + <00e701c25813$eec5ab70$640a000a@golden> +To: "Gordon Mohr" , +From: "R. A. Hettinga" +Subject: Re: Re[3]: Selling Wedded Bliss (was Re: Ouch...) +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 13:18:54 -0400 + +At 8:16 AM -0700 on 9/9/02, Gordon Mohr wrote: + + + +> Of course this says very little, almost nothing, about the overall +> population behavior, gay or straight, and the relative prevalence +> of 3K+ individuals in either group. But it does strongly suggest +> that gay males with 3K+ partners exist in measurable numbers, so +> people should stop treating Eugen's anecdotal estimation as if it +> were sheer fantasy. BitBitch's own citation suggests otherwise. + +That math stuff's, a, um, bitch, i'nit? + +;-) + +Cheers, +RAH +[Who could care less who boinks whom, or for how much, though watching the +Righteous Anger(tm) around here this morning *has* been amusing...] +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00532.81180d4d1d632bb50c189b51f83921e0 b/Ch3/datasets/spam/easy_ham/00532.81180d4d1d632bb50c189b51f83921e0 new file mode 100644 index 000000000..bcbdd867a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00532.81180d4d1d632bb50c189b51f83921e0 @@ -0,0 +1,96 @@ +From fork-admin@xent.com Mon Sep 9 19:28:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7C8DA16EFC + for ; Mon, 9 Sep 2002 19:28:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:28:07 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89I2EC26245 for ; + Mon, 9 Sep 2002 19:02:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 487422941FE; Mon, 9 Sep 2002 10:59:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 65C3729409A for ; Mon, + 9 Sep 2002 10:58:34 -0700 (PDT) +Received: (qmail 17942 invoked from network); 9 Sep 2002 18:01:22 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 9 Sep 2002 18:01:22 -0000 +Reply-To: +From: "John Hall" +Cc: +Subject: RE: The Big Jump +Message-Id: <002201c2582a$e84211f0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: <15861948735.20020908113611@magnesium.net> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 11:01:22 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g89I2EC26245 + + +Why so fast? Normal terminal velocity is much slower. + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +> bitbitch@magnesium.net +> Sent: Sunday, September 08, 2002 8:36 AM +> To: (Robert Harley) +> Cc: fork@spamassassin.taint.org +> Subject: Re: The Big Jump +> +> +> +> So uh, would this qualify for the Darwin awards if he doesn't make it? +> +> Freaking french people... +> :-) +> -BB +> RH> Today a French officer called Michel Fournier is supposed to get +in a +> RH> 350-metre tall helium balloon, ride it up to the edge of space (40 +km +> RH> altitude) and jump out. His fall should last 6.5 minutes and +reach +> RH> speeds of Mach 1.5. He hopes to open his parachute manually at +the +> RH> end, although with an automatic backup if he is 7 seconds from the +> RH> ground and still hasn't opened it. +> +> RH> R +> +> RH> ObQuote: +> RH> "Vederò, si averò si grossi li coglioni, come ha il re di +Franza." +> RH> ("Let's see if I've got as much balls as the King of France!") +> RH> - Pope Julius II, 2 January 1511 +> +> +> +> -- +> Best regards, +> bitbitch mailto:bitbitch@magnesium.net + + + diff --git a/Ch3/datasets/spam/easy_ham/00533.ebdd2ab43a73a867388b595061d66d59 b/Ch3/datasets/spam/easy_ham/00533.ebdd2ab43a73a867388b595061d66d59 new file mode 100644 index 000000000..af750d453 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00533.ebdd2ab43a73a867388b595061d66d59 @@ -0,0 +1,91 @@ +From fork-admin@xent.com Mon Sep 9 19:28:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3C68F16EFC + for ; Mon, 9 Sep 2002 19:28:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:28:12 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89I6gC26382 for ; + Mon, 9 Sep 2002 19:06:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0928D2942E9; Mon, 9 Sep 2002 11:00:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id ED9D22942BF for ; Mon, + 9 Sep 2002 11:00:00 -0700 (PDT) +Received: (qmail 18058 invoked from network); 9 Sep 2002 18:02:49 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 9 Sep 2002 18:02:49 -0000 +Reply-To: +From: "John Hall" +To: "FoRK" +Subject: RE: Recommended Viewing +Message-Id: <002301c2582b$1c040a20$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 11:02:49 -0700 + +Isn't this the story where someone's "Dream" has the ability to change +reality -- then you find the whole world is their dream? + + + + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Geege +> Schuman +> Sent: Monday, September 09, 2002 4:26 AM +> To: John Evdemon +> Cc: fork@spamassassin.taint.org +> Subject: RE: Recommended Viewing +> +> Agreed, completely. I totally grokked the notion of unintened +consequence +> with the original. +> +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +John +> Evdemon +> Sent: Monday, September 09, 2002 7:03 AM +> To: Fork@xent.com +> Subject: Re: Recommended Viewing +> +> +> On 8 Sep 2002 at 22:15, Geege Schuman wrote: +> +> > who watched Lathe of Heaven? (A&E, 8 pm EDT) who has seen +> > the original? +> > +> By "original" if you are referring to the old PBS version, I liked +that +> version much better. Much more thought provoking. +> +> +> + + + diff --git a/Ch3/datasets/spam/easy_ham/00534.6db349fcd98d25f61e5bcc4552b45f57 b/Ch3/datasets/spam/easy_ham/00534.6db349fcd98d25f61e5bcc4552b45f57 new file mode 100644 index 000000000..ec2d68120 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00534.6db349fcd98d25f61e5bcc4552b45f57 @@ -0,0 +1,139 @@ +From fork-admin@xent.com Mon Sep 9 19:28:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DAE4016F03 + for ; Mon, 9 Sep 2002 19:28:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 19:28:14 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89IHDC26697 for ; + Mon, 9 Sep 2002 19:17:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 644942942BF; Mon, 9 Sep 2002 11:14:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id ADD5B29409A for + ; Mon, 9 Sep 2002 11:13:57 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17oT2j-0006UA-00; Mon, 09 Sep 2002 15:13:49 -0300 +Message-Id: <3D7CE662.9040000@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.1) Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: johnhall@evergo.net +Cc: fork@spamassassin.taint.org +Subject: Re: The Big Jump +References: <002201c2582a$e84211f0$0200a8c0@JMHALL> +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 8bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 09 Sep 2002 15:20:18 -0300 + +John Hall wrote: + +>Why so fast? Normal terminal velocity is much slower. +> +> +Not at 40,000 m. I found this article +(http://www.wired.com/news/print/0,1294,53928,00.html) : + +"The last person to try to break the highest free fall record died in +the attempt. In 1965, New Jersey truck driver Nick Piantanida suffered +catastrophic equipment failure when his facemask blew out at 57,000 +feet. Lack of oxygen caused such severe brain damage that he went into a +coma and died four months later." + +And in amongst the flash at +http://www.legrandsaut.org/site_en/ + +you can discover that he will break the sound barrier at 35,000 m, +presumably reaching top speed somewhere above 30,000. + +Owen + +> +> +>>-----Original Message----- +>>From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +>>bitbitch@magnesium.net +>>Sent: Sunday, September 08, 2002 8:36 AM +>>To: (Robert Harley) +>>Cc: fork@spamassassin.taint.org +>>Subject: Re: The Big Jump +>> +>> +>> +>>So uh, would this qualify for the Darwin awards if he doesn't make it? +>> +>>Freaking french people... +>> :-) +>>-BB +>>RH> Today a French officer called Michel Fournier is supposed to get +>> +>> +>in a +> +> +>>RH> 350-metre tall helium balloon, ride it up to the edge of space (40 +>> +>> +>km +> +> +>>RH> altitude) and jump out. His fall should last 6.5 minutes and +>> +>> +>reach +> +> +>>RH> speeds of Mach 1.5. He hopes to open his parachute manually at +>> +>> +>the +> +> +>>RH> end, although with an automatic backup if he is 7 seconds from the +>>RH> ground and still hasn't opened it. +>> +>>RH> R +>> +>>RH> ObQuote: +>>RH> "Vederò, si averò si grossi li coglioni, come ha il re di +>> +>> +>Franza." +> +> +>>RH> ("Let's see if I've got as much balls as the King of France!") +>>RH> - Pope Julius II, 2 January 1511 +>> +>> +>> +>>-- +>>Best regards, +>> bitbitch mailto:bitbitch@magnesium.net +>> +>> +> +> +> +> + + + + diff --git a/Ch3/datasets/spam/easy_ham/00535.2c21f614f9593edc5049248d6e873ce8 b/Ch3/datasets/spam/easy_ham/00535.2c21f614f9593edc5049248d6e873ce8 new file mode 100644 index 000000000..5e3d1ac11 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00535.2c21f614f9593edc5049248d6e873ce8 @@ -0,0 +1,73 @@ +From fork-admin@xent.com Tue Sep 10 11:07:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7FAAA16F03 + for ; Tue, 10 Sep 2002 11:07:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:07:15 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8A0lFC09652 for ; + Tue, 10 Sep 2002 01:47:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2C50029413C; Mon, 9 Sep 2002 17:44:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from qu.to (njl.ne.client2.attbi.com [24.218.112.39]) by + xent.com (Postfix) with SMTP id 154D729409A for ; + Mon, 9 Sep 2002 17:43:37 -0700 (PDT) +Received: (qmail 19647 invoked by uid 500); 10 Sep 2002 00:46:17 -0000 +From: Ned Jackson Lovely +To: fork@spamassassin.taint.org +Subject: Re: The Big Jump +Message-Id: <20020910004617.GB1045@ibu.internal.qu.to> +References: <15861948735.20020908113611@magnesium.net> + <002201c2582a$e84211f0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <002201c2582a$e84211f0$0200a8c0@JMHALL> +User-Agent: Mutt/1.3.25i +X-Cell: +1.617.877.3444 +X-Web: http://www.njl.us/ +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 20:46:17 -0400 + +On Mon, Sep 09, 2002 at 11:01:22AM -0700, John Hall wrote: +> Why so fast? Normal terminal velocity is much slower. + +Terminal velocity can be calculated by $v_{T} = \sqrt{\frac{2mg}{CpA}}$ +where C is an experimentally determined coefficient, p is the density of the +air, and A is the area of the object. These calculations only work if the +object is blunt and the airflow is turbulent, blah blah blah. Terminal velocity +for a skydiver actually varies with how the diver holds themselves -- you go +faster if you pull yourself into a cannonball. That is the "A", for the +most part. + +All else being equal, the terminal velocity is inversely proportional to the +square root of air density. Air density drops off pretty quickly, and I +really should be doing something other than digging up the math for that. I +think it involves calculus to integrate the amount of mass as the column of +the atmosphere trails off. I grabbed the other stuff directly out of a book :). + +In '87 a guy named Gregory Robertson noticed a fellow parachutist Debbie +Williams had been knocked unconscious. He shifted so that he was head down, +hit about 200 mi/h, and caught up with her and pulled her chute with 10 seconds +to spare. + +-- +njl + + + diff --git a/Ch3/datasets/spam/easy_ham/00536.ee0a85c68f0db6388d6f8a3468af70ac b/Ch3/datasets/spam/easy_ham/00536.ee0a85c68f0db6388d6f8a3468af70ac new file mode 100644 index 000000000..c32481091 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00536.ee0a85c68f0db6388d6f8a3468af70ac @@ -0,0 +1,124 @@ +From fork-admin@xent.com Tue Sep 10 11:07:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 11F3416F03 + for ; Tue, 10 Sep 2002 11:07:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:07:21 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8A1sEC11916 for ; + Tue, 10 Sep 2002 02:54:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DCBE9294206; Mon, 9 Sep 2002 18:51:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 18B4429409A for ; + Mon, 9 Sep 2002 18:50:11 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17oaDu-0004py-00; Mon, 09 Sep 2002 21:53:50 -0400 +From: "Geege Schuman" +To: , "FoRK" +Subject: RE: Recommended Viewing +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <002301c2582b$1c040a20$0200a8c0@JMHALL> +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Importance: Normal +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 21:51:44 -0400 + +more accurately: someone's dream changes reality for everyone, and +everyone's memory adjusts to perceive the new realities as a continuum, +replete with new pasts and new memories. + +ever have dreams that "create" their own history to make their irrealities +plausible and authentic feeling? + +ever notice how the feelings evoked in some dreams stick with you all day? +i'm sure it's some neurochemical process initiated during the dream that is +still cycling thru - like a deja vu, triggered by memory processes, where +you don't actually remember but you feel like you're remembering. + +ggggggggg + + + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of John +Hall +Sent: Monday, September 09, 2002 2:03 PM +To: FoRK +Subject: RE: Recommended Viewing + + +Isn't this the story where someone's "Dream" has the ability to change +reality -- then you find the whole world is their dream? + + + + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Geege +> Schuman +> Sent: Monday, September 09, 2002 4:26 AM +> To: John Evdemon +> Cc: fork@spamassassin.taint.org +> Subject: RE: Recommended Viewing +> +> Agreed, completely. I totally grokked the notion of unintened +consequence +> with the original. +> +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +John +> Evdemon +> Sent: Monday, September 09, 2002 7:03 AM +> To: Fork@xent.com +> Subject: Re: Recommended Viewing +> +> +> On 8 Sep 2002 at 22:15, Geege Schuman wrote: +> +> > who watched Lathe of Heaven? (A&E, 8 pm EDT) who has seen +> > the original? +> > +> By "original" if you are referring to the old PBS version, I liked +that +> version much better. Much more thought provoking. +> +> +> + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00537.0b676300c214afdc2dd6a5007e8b8e2a b/Ch3/datasets/spam/easy_ham/00537.0b676300c214afdc2dd6a5007e8b8e2a new file mode 100644 index 000000000..92418b0f3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00537.0b676300c214afdc2dd6a5007e8b8e2a @@ -0,0 +1,64 @@ +From fork-admin@xent.com Tue Sep 10 11:07:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6EB6816F03 + for ; Tue, 10 Sep 2002 11:07:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:07:29 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8A28CC12363 for ; + Tue, 10 Sep 2002 03:08:12 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E2A982942F0; Mon, 9 Sep 2002 19:05:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc01.attbi.com (sccrmhc01.attbi.com [204.127.202.61]) + by xent.com (Postfix) with ESMTP id 7198F29409A for ; + Mon, 9 Sep 2002 19:04:41 -0700 (PDT) +Received: from Intellistation ([66.31.2.27]) by sccrmhc01.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020910020728.OFEI9751.sccrmhc01.attbi.com@Intellistation> for + ; Tue, 10 Sep 2002 02:07:28 +0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Eirikur Hallgrimsson +Organization: Electric Brain +To: "FoRK" +Subject: Re: Recommended Viewing +User-Agent: KMail/1.4.1 +References: +In-Reply-To: +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200209092206.33219.eh@mad.scientist.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 22:06:33 -0400 + +On Monday 09 September 2002 09:51 pm, Geege Schuman wrote +> ever notice how the feelings evoked in some dreams stick with you all +> day?i'm sure it's some neurochemical process initiated during the dream +> that is still cycling thru - like a deja vu, triggered by memory +> processes, where > you don't actually remember but you feel like you're +> remembering. + +Absolutely, and I've wanted to recapture it. I've done some writing based +on dreams, and there is a mysterious "mood" to that feeling that drives +some creative stuff for me. I've never tried to write music in that +state, but I will next time. + +Eirikur + + + + diff --git a/Ch3/datasets/spam/easy_ham/00538.313057481a3b1638c05066fad46ae65f b/Ch3/datasets/spam/easy_ham/00538.313057481a3b1638c05066fad46ae65f new file mode 100644 index 000000000..dde69c8a5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00538.313057481a3b1638c05066fad46ae65f @@ -0,0 +1,72 @@ +From fork-admin@xent.com Tue Sep 10 11:07:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C403016F03 + for ; Tue, 10 Sep 2002 11:07:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:07:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8A2SGC13041 for ; + Tue, 10 Sep 2002 03:28:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 073D22942F6; Mon, 9 Sep 2002 19:25:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 4740C29409A for + ; Mon, 9 Sep 2002 19:24:47 -0700 (PDT) +Received: (qmail 20041 invoked by uid 501); 10 Sep 2002 02:27:27 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 10 Sep 2002 02:27:27 -0000 +From: CDale +To: Eirikur Hallgrimsson +Cc: FoRK +Subject: Re: Recommended Viewing +In-Reply-To: <200209092206.33219.eh@mad.scientist.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 21:27:27 -0500 (CDT) + +Any of your writing online anywhere? Would love to take a look. I was +plagued with night terrors for years and tried to capture that feeling +after waking up (if you want to call that waking up), but was never able +to... +Cindy + +On Mon, 9 Sep 2002, Eirikur Hallgrimsson wrote: + +> On Monday 09 September 2002 09:51 pm, Geege Schuman wrote +> > ever notice how the feelings evoked in some dreams stick with you all +> > day?i'm sure it's some neurochemical process initiated during the dream +> > that is still cycling thru - like a deja vu, triggered by memory +> > processes, where > you don't actually remember but you feel like you're +> > remembering. +> +> Absolutely, and I've wanted to recapture it. I've done some writing based +> on dreams, and there is a mysterious "mood" to that feeling that drives +> some creative stuff for me. I've never tried to write music in that +> state, but I will next time. +> +> Eirikur +> +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00539.f3a3a009e8410ed004b045e724be525a b/Ch3/datasets/spam/easy_ham/00539.f3a3a009e8410ed004b045e724be525a new file mode 100644 index 000000000..96764f80d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00539.f3a3a009e8410ed004b045e724be525a @@ -0,0 +1,73 @@ +From fork-admin@xent.com Tue Sep 10 11:07:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9112B16F03 + for ; Tue, 10 Sep 2002 11:07:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:07:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8A3HQC14875 for ; + Tue, 10 Sep 2002 04:17:30 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 5679E29421B; Mon, 9 Sep 2002 20:14:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 045C929409A for ; + Mon, 9 Sep 2002 20:13:16 -0700 (PDT) +Received: (qmail 2423 invoked from network); 10 Sep 2002 03:16:08 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 10 Sep 2002 03:16:08 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id F11ED1CC98; + Mon, 9 Sep 2002 23:16:01 -0400 (EDT) +To: "Geege Schuman" +Cc: , "FoRK" +Subject: Re: Recommended Viewing +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 09 Sep 2002 23:16:01 -0400 + +>>>>> "G" == Geege Schuman writes: + + G> ... i'm sure it's some neurochemical process initiated during + G> the dream that is still cycling thru - like a deja vu, + G> triggered by memory processes, where you don't actually + G> remember but you feel like you're remembering. + +That's very perceptive of you. Many people are not so willing to +accept their personal reality as skewed by their neuro-physiology. A +great many popular con games exist by exploiting the perceptions of +these states. + +Another oft-exploited neuro-plausibility: The brain is a pretty darn +fine analog associative computer, so it could be the neurochemical +events during the dream have associated themselves with some inner or +external cue to mentally _recreate_ the state-perception like the +predictable tone on striking a bell. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00540.c9e660864381381e6a16c599c8f2e1fe b/Ch3/datasets/spam/easy_ham/00540.c9e660864381381e6a16c599c8f2e1fe new file mode 100644 index 000000000..7f0729a40 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00540.c9e660864381381e6a16c599c8f2e1fe @@ -0,0 +1,76 @@ +From fork-admin@xent.com Tue Sep 10 11:07:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7871116F03 + for ; Tue, 10 Sep 2002 11:07:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:07:40 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8A3MHC15100 for ; + Tue, 10 Sep 2002 04:22:18 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 91E052942FB; Mon, 9 Sep 2002 20:19:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 7FE942942FA for ; + Mon, 9 Sep 2002 20:18:30 -0700 (PDT) +Received: (qmail 4750 invoked from network); 10 Sep 2002 03:21:23 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 10 Sep 2002 03:21:23 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 80DAB1CC98; + Mon, 9 Sep 2002 23:21:19 -0400 (EDT) +To: Eirikur Hallgrimsson +Cc: "FoRK" +Subject: Re: Recommended Viewing +References: + <200209092206.33219.eh@mad.scientist.com> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 09 Sep 2002 23:21:19 -0400 + +>>>>> "E" == Eirikur Hallgrimsson writes: + + E> Absolutely, and I've wanted to recapture it. + +I don't know about this /particular/ mood, but I have used +neuro-conditioning with aiding children in stressful +life-circumstances. + +Basically, you somehow evoke the state you want, and when you get it, +you do something odd, anything at all will do, but I used a gentle +"vulcan grip" on their shoulder. Later, when faced with the +uncomfortable situation, you can retrieve /part/ of that earlier more +desireable state by giving them the pinch; it's not perfect (like you +get with simpler brains) but it is an inescapable effect. + +This is probably the neuro-effect that leads to performance-enhancing +superstitions such as Bob Dylan not performing without his favourite +jean jacket: Because it provides the cue to a more relaxed mental +state, he really does play better with it than without it. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00541.cbdcefd1a6109b8f95e1c8dddfbd7bb2 b/Ch3/datasets/spam/easy_ham/00541.cbdcefd1a6109b8f95e1c8dddfbd7bb2 new file mode 100644 index 000000000..de8af3dac --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00541.cbdcefd1a6109b8f95e1c8dddfbd7bb2 @@ -0,0 +1,155 @@ +From fork-admin@xent.com Tue Sep 10 11:07:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 38FFB16F03 + for ; Tue, 10 Sep 2002 11:07:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:07:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8A5x5C19356 for ; + Tue, 10 Sep 2002 06:59:11 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 32E09294200; Mon, 9 Sep 2002 22:55:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sierra.birch.net (sierra.birch.net [216.212.0.61]) by + xent.com (Postfix) with ESMTP id 096E829409A for ; + Mon, 9 Sep 2002 22:54:23 -0700 (PDT) +Received: (qmail 27565 invoked from network); 10 Sep 2002 05:56:58 -0000 +Received: from unknown (HELO there) ([216.212.1.121]) (envelope-sender + ) by mailserver.birch.net (qmail-ldap-1.03) with SMTP for + ; 10 Sep 2002 05:56:58 -0000 +Content-Type: text/plain; charset="iso-8859-15" +From: Steve Nordquist +To: interested@amiga.com +Subject: UAE/Ami*/Linux Laptop: Important details. +X-Mailer: KMail [version 1.3.2] +Cc: fork@spamassassin.taint.org +MIME-Version: 1.0 +Message-Id: <20020910055423.096E829409A@xent.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 06:35:54 -0500 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8A5x5C19356 + +Well, for one, it would free up the similar laptop I already got to +just run Amithlon (or if that wasn't so fun, bsd) to run just OpenBSD! + +This is a near-term thing I could look forward to! + +However, an 'official' laptop seems unexciting to me with only +the items mentioned. Most important are the particulars distinguishing +the listed spec from a Dell 2650, preferably: +1- GeForce4 440 Go or newer, pleasingly modern GPU; the + GeForce2Go (with 16MB video RAM; too little) I have is + not so much too slow as inefficient; with factory settings it would + actually crash from running too hot and too fast. + (Accelerating the Ami* and possibly OpenUAE graphics + is a necessity to meet for good speed in those environments, + but an energy-efficient GPU is a good sideeffect and + portability (read: battery lifetime) enabler.) + +1.5- Great control over CPU state; by use of 'internet keys' + wired to BIOS/bhipset routines directly or preferably a scroll + wheel. Also, hibernate that works, please. + +1.7- Bootable to USB 2.0 drives (e.g. larger external ones) + in BIOS, please. + +2- P4 Dells overheat. They have a big heatsink and a little fan + to pull air through it, and if you don't elevate thelaptop off + the desk or table or bed it's on, the fan will -stay- on. Not good + for MTBS (mean time between service; unless you've got an + angle on making money on service from Amigans.....) + One excellent solution is to include a heatpipe which runs + behind the AMLCD, thus using the backside of the display + half as a radiator.; though it interferes with the case notion + below. (yes, Aavid or such makes some as a standard part.) + I prefer to include the heatpipe but employ the radiative + mass in elevating the laptop (i.e. in the form of a catch-handle + and second logo device behind the laptop, which generally + provides stow and attachment for elevation legs (move them + out farther to get to the next-higher ekevation, until the sides + of the laptop are met.) This also happens to provide a little + protection for USB 2 and 1394 cables that I tend to keep + plugged in all the time (a bit longer port life? Please.) + +3- A case color other than brown or black, and preferably (if the + display module NRE is entirely permissive) the capability to + -run with the backlight off.- Again, to save battery power, but + also as a feature; maybe you remember the iBooks modified + in this manner. The user has the privilege to pull out the + backlight diffuser and fiberoptic lightpipe/CF assembly, with + its backreflector, and the whole warrantee. This provides + for excellent outdoor use, often with the diffuser reinserted + to keep depth-of-field distractions minimised. + What would I like? A1200 putty color, any translucency, + in or over a rosewood-colored (in KDE color browser, I see + chocolate, firebrick and a couple of 'indian red' that are great + candidates) base. + I would also like to be able to at least turn off the backlight + without closing the lid, and to be -able- to fit an -external- + light source such as a UV-filtered solar collector (and glare + hood) to feed + into the backlight. Not only does this make an excellent + color environment but lets one work outdoors tolerably. + The logo should be a coloration of a + minimal surface, as the MAA is trying to get me to renew + with: demos at http://astronomy.swin.edu.au/pbourke/geometry/ + at first blush. We'll see what comes out of the contest and + maybe you'll like the mapping MathCAD does of the + logo to a minimal surface or manifold that reflects the + openness of AmigaOS, Ami* and Amiga community. + MAA.org has more references, I'm sure. + +4- Obviously Elfin details., e,g, the backlight inlet. + +Other details: +USB2.x preferred; FireWire would be needed if that's unavailable. +Options like 802.11b or attabhable WiFi hub for ethernet port +should round out the offering. An option for just-released +.13 micron P4 (with mobile power features) could make more +reviewers greenlight the series; much better power consumption, +and almost certainly a higher a top clock come with that. +CompactFlash, SmartMedia and MMC flash memory card +interfaces would be very pleasant. I've mentioned booting to +USB, and booting from CF would be a pleasant extigency also. +To that end, a backup solution with compression using +USB 2 storage or the multimode drive is always a nice +bundle item; that or a chance to back out a patch under 3 OS..... + + +Blue skies (and clear water and fresh air): +Waterproof to 30 feet, 3 Ethernet ports plus onboard WiFi. +Svelte; 3-line frontpanel LCD and bright red pager LED, +builtin G4 cellphone functions, choice of side and +frontpanel trim: Ivory-like stuff inscribed with M68k memory map +and various OS 3.9 structures or textured fur that +says 'This is Amiga Speaking' when stroked 'round. +Decent keyboard, as in Toshiba or IBM laptops; perhaps +an ergonomic fingerworks.com device (they work as +keyboard and mouse) as the keyboard/trackpad. +2 Directional planar mics atop AMLCD; soundcard with multiple +18 bit A-D and noise reduction DSP that work in our +(second-through-fourth, at least) favorite OS. +Actual 7" bellows pulls out at nominal ventilation +fan location for real void-comp (the test in Blade +Runner) style cooling and extended bass; active cooling +and airfiltering is available to adjust humidity at user +seat and provide mineral water. +HyperTransport ports. + + diff --git a/Ch3/datasets/spam/easy_ham/00542.1db9cca8020648c0ed80436b9aea4d33 b/Ch3/datasets/spam/easy_ham/00542.1db9cca8020648c0ed80436b9aea4d33 new file mode 100644 index 000000000..584c30720 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00542.1db9cca8020648c0ed80436b9aea4d33 @@ -0,0 +1,57 @@ +From fork-admin@xent.com Tue Sep 10 11:07:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C1BD916F03 + for ; Tue, 10 Sep 2002 11:07:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:07:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8A9hXC25466 for ; + Tue, 10 Sep 2002 10:43:36 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C9D6F2940DF; Tue, 10 Sep 2002 02:40:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 2DE5529409A for + ; Tue, 10 Sep 2002 02:39:37 -0700 (PDT) +Received: (qmail 13570 invoked by uid 508); 10 Sep 2002 08:25:49 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.110) by + venus.phpwebhosting.com with SMTP; 10 Sep 2002 08:25:49 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8A57f100842; Tue, 10 Sep 2002 07:07:42 + +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: Ned Jackson Lovely +Cc: +Subject: Re: The Big Jump +In-Reply-To: <20020910004617.GB1045@ibu.internal.qu.to> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 07:07:41 +0200 (CEST) + +On Mon, 9 Sep 2002, Ned Jackson Lovely wrote: + +> In '87 a guy named Gregory Robertson noticed a fellow parachutist Debbie +> Williams had been knocked unconscious. He shifted so that he was head down, +> hit about 200 mi/h, and caught up with her and pulled her chute with 10 seconds +> to spare. + +IIRC it's ~180 km/s spreadeagled and ~210 km/h head-down. + + diff --git a/Ch3/datasets/spam/easy_ham/00543.0641e755767b41b404070e155708cee6 b/Ch3/datasets/spam/easy_ham/00543.0641e755767b41b404070e155708cee6 new file mode 100644 index 000000000..1441d626e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00543.0641e755767b41b404070e155708cee6 @@ -0,0 +1,99 @@ +From fork-admin@xent.com Tue Sep 10 18:15:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 074CD16F03 + for ; Tue, 10 Sep 2002 18:15:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 18:15:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8ABGZC28333 for ; + Tue, 10 Sep 2002 12:16:38 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 40205294227; Tue, 10 Sep 2002 04:13:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 9693A29409A for ; + Tue, 10 Sep 2002 04:12:08 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17oizF-0008Di-00; Tue, 10 Sep 2002 07:15:17 -0400 +From: "Geege Schuman" +To: "Gary Lawrence Murphy" , + "Geege Schuman" +Cc: , "FoRK" +Subject: RE: Recommended Viewing +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Importance: Normal +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 07:13:08 -0400 + +you meant "SURPRISINGLY perceptive," didn't you? :-) + +recent exceptionally vivid and strange dreams lead me to believe i'm +sparking synapses that have lain dormant lo these many years. Lots of +problem solving going on up there at night. + +-----Original Message----- +From: garym@maya.dyndns.org [mailto:garym@maya.dyndns.org]On Behalf Of +Gary Lawrence Murphy +Sent: Monday, September 09, 2002 11:16 PM +To: Geege Schuman +Cc: johnhall@evergo.net; FoRK +Subject: Re: Recommended Viewing + + +>>>>> "G" == Geege Schuman writes: + + G> ... i'm sure it's some neurochemical process initiated during + G> the dream that is still cycling thru - like a deja vu, + G> triggered by memory processes, where you don't actually + G> remember but you feel like you're remembering. + +That's very perceptive of you. Many people are not so willing to +accept their personal reality as skewed by their neuro-physiology. A +great many popular con games exist by exploiting the perceptions of +these states. + +Another oft-exploited neuro-plausibility: The brain is a pretty darn +fine analog associative computer, so it could be the neurochemical +events during the dream have associated themselves with some inner or +external cue to mentally _recreate_ the state-perception like the +predictable tone on striking a bell. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00544.5a9365cf80100b89b50656045cb8b80c b/Ch3/datasets/spam/easy_ham/00544.5a9365cf80100b89b50656045cb8b80c new file mode 100644 index 000000000..e479d48a9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00544.5a9365cf80100b89b50656045cb8b80c @@ -0,0 +1,75 @@ +From fork-admin@xent.com Tue Sep 10 18:15:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9F91216F16 + for ; Tue, 10 Sep 2002 18:15:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 18:15:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8ADXcC32622 for ; + Tue, 10 Sep 2002 14:33:42 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 753DA29410F; Tue, 10 Sep 2002 06:30:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id E540729409A for ; Tue, 10 Sep 2002 06:29:49 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id 04720C44D; + Tue, 10 Sep 2002 15:29:51 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: Selling Wedded Bliss (was Re: Ouch...) +Message-Id: <20020910132951.04720C44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 15:29:51 +0200 (CEST) + +Gordon Mohr: +>It was clear you were talking about averages. But it should +>be equally clear that that isn't what people mean when they +>use the word "promiscuity". + +Sigh. + +This sprung out of a report linked by Cindy about the promiscuity of +female monkeys with males other than the alpha male, i.e, specifically +not the tail end of the distribution. "By mating with as many +extra-group males as possible, female langurs ensure [etc.]" + + +>OK, then. Consider a population of 1,000,000. 500,000 men each +>pair off with 500,000 women. Then, 1 man, let's call him "Wilt", +>also has sex with the other 499,999 women + +This has never happened. Its relevance is nil. + + +>Averages are useful, sure -- but much more so if called by their +>actual name, rather than conflated with another concept. + +So I chose not to type "on average" explicitly in my post, since this +is FoRK and one tends to assume that people have a clue. + + +There is no disagreement between us, except that I am more interested +in typical behaviour and you in extreme. Actually, you probably just +had a bad day and felt like jumping down my throat for the hell of it. + + +EOT, AFAIC. + +R + + diff --git a/Ch3/datasets/spam/easy_ham/00545.99996f28814c7028ce6aac44270ff3cd b/Ch3/datasets/spam/easy_ham/00545.99996f28814c7028ce6aac44270ff3cd new file mode 100644 index 000000000..e0fe5bcef --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00545.99996f28814c7028ce6aac44270ff3cd @@ -0,0 +1,81 @@ +From fork-admin@xent.com Tue Sep 10 18:15:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 38ABC16F03 + for ; Tue, 10 Sep 2002 18:15:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 18:15:53 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8AEFWC02028 for ; + Tue, 10 Sep 2002 15:15:34 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6650029423B; Tue, 10 Sep 2002 07:12:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 52760294237 for ; + Tue, 10 Sep 2002 07:11:07 -0700 (PDT) +Received: (qmail 25260 invoked from network); 10 Sep 2002 14:13:58 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 10 Sep 2002 14:13:58 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 9F9EB1CC97; + Tue, 10 Sep 2002 10:13:50 -0400 (EDT) +To: "Geege Schuman" +Cc: , "FoRK" +Subject: Re: Recommended Viewing +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 10 Sep 2002 10:13:50 -0400 + +>>>>> "G" == Geege Schuman writes: + + G> you meant "SURPRISINGLY perceptive," didn't you? :-) + +Of course, dear. Especially without zazen training. Veritably +Operational Thetan-like. + + G> recent exceptionally vivid and strange dreams lead me to + G> believe i'm sparking synapses that have lain dormant lo these + G> many years. Lots of problem solving going on up there at + G> night. + +It's a myth that we don't use parts of our brain. We use it all, +always. It's just that our culturally-induced focal-point causes most +of us to most of the time ignore and waste 99.999% of it. "Lucid" is +a measure of notch-filter bandwidth; all stations are broadcasting, +but we only /choose/ Easy Rock 105. + +For example, don't look now but your shoes are full of feet. + +The sensation of toes the above statement evokes is not a "turning on" +of circuits, it is a "tuning in". The next step, of course, is to +"drop out" :) + +To paraphrase an old saw: Life is wasted on the living. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00546.30fed3b8e986dc41b1865b9285e84e56 b/Ch3/datasets/spam/easy_ham/00546.30fed3b8e986dc41b1865b9285e84e56 new file mode 100644 index 000000000..493dd25a9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00546.30fed3b8e986dc41b1865b9285e84e56 @@ -0,0 +1,65 @@ +From fork-admin@xent.com Tue Sep 10 18:15:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B766D16F03 + for ; Tue, 10 Sep 2002 18:15:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 18:15:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8AGUZC07111 for ; + Tue, 10 Sep 2002 17:30:38 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B01232940A5; Tue, 10 Sep 2002 09:27:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 95ECA2940A0 for ; Tue, + 10 Sep 2002 09:26:37 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id DE6C93EDAE; + Tue, 10 Sep 2002 12:32:56 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id DCC693ED1B; Tue, 10 Sep 2002 12:32:56 -0400 (EDT) +From: Tom +To: Gary Lawrence Murphy +Cc: Geege Schuman , , + FoRK +Subject: Re: Recommended Viewing +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 12:32:56 -0400 (EDT) + +On 10 Sep 2002, Gary Lawrence Murphy wrote: + +--]It's a myth that we don't use parts of our brain. We use it all, +--]always. It's just that our culturally-induced focal-point causes most +--]of us to most of the time ignore and waste 99.999% of it. "Lucid" is +--]a measure of notch-filter bandwidth; all stations are broadcasting, +--]but we only /choose/ Easy Rock 105. +--] +--]For example, don't look now but your shoes are full of feet. + +Nice imagery. When the filters come down ( choose your method)it is very +much the case. Not only are your shoes full of toes, but your toes are +full of bones, blood , muscle and toejam. All these things are +evident...unless you got your filters up. + +Life, the ultimate spam:)- + +-tom + + diff --git a/Ch3/datasets/spam/easy_ham/00547.59bf01e07cf08c7e3a778b747e020989 b/Ch3/datasets/spam/easy_ham/00547.59bf01e07cf08c7e3a778b747e020989 new file mode 100644 index 000000000..325bb5b81 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00547.59bf01e07cf08c7e3a778b747e020989 @@ -0,0 +1,79 @@ +From fork-admin@xent.com Wed Sep 11 13:49:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 13ECF16F03 + for ; Wed, 11 Sep 2002 13:49:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:49:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8AIcYC11645 for ; + Tue, 10 Sep 2002 19:38:38 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 5ADDE2940A0; Tue, 10 Sep 2002 11:35:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm1-15.sba1.netlojix.net + [207.71.218.63]) by xent.com (Postfix) with ESMTP id CA94C29409A for + ; Tue, 10 Sep 2002 11:34:34 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id LAA10179; + Tue, 10 Sep 2002 11:21:56 -0700 +Message-Id: <200209101821.LAA10179@maltesecat> +To: fork@spamassassin.taint.org +Subject: Re: Tech's Major Decline +In-Reply-To: Message from fork-request@xent.com of + "Sun, 01 Sep 2002 20:24:01 PDT." + <20020902032401.29860.6932.Mailman@lair.xent.com> +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 11:21:56 -0700 + + +I'm not sure which way to make +the old bits call on this: + +[A] +was posted well after +[B] +was in the archives, but then +again, [B] didn't bother with +any commentary (new bits). + +If you two can agree upon who +was at fault, penance will be +to explain how feedback phase +is affected by time lags, and +tie that in to the spontaneous +generation of "business cycles" +in the Beer Game. * + +-Dave + +* + +see also: + +Explaining Capacity Overshoot and Price War: Misperceptions + of Feedback in Competitive Growth Markets + + +in which the scenario 4 (margin +oriented tit for tat) seems close +to the strategy described in: + +"game theoretical gandhi / more laptops" + + + + diff --git a/Ch3/datasets/spam/easy_ham/00548.120e45c5d33311bc09e844bf236521d2 b/Ch3/datasets/spam/easy_ham/00548.120e45c5d33311bc09e844bf236521d2 new file mode 100644 index 000000000..afe705a32 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00548.120e45c5d33311bc09e844bf236521d2 @@ -0,0 +1,250 @@ +From fork-admin@xent.com Wed Sep 11 13:49:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B5D9316F03 + for ; Wed, 11 Sep 2002 13:49:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:49:24 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8AJEbC13175 for ; + Tue, 10 Sep 2002 20:15:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1860F2940B8; Tue, 10 Sep 2002 12:11:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from ms4.lga2.nytimes.com (ms4.lga2.nytimes.com [64.15.247.148]) + by xent.com (Postfix) with ESMTP id 50FC229409A for ; + Tue, 10 Sep 2002 12:10:23 -0700 (PDT) +Received: from email4.lga2.nytimes.com (email4 [10.0.0.169]) by + ms4.lga2.nytimes.com (Postfix) with ESMTP id 60C775A4D4 for + ; Tue, 10 Sep 2002 15:17:17 -0400 (EDT) +Received: by email4.lga2.nytimes.com (Postfix, from userid 202) id + 56DC6C432; Tue, 10 Sep 2002 15:06:36 -0400 (EDT) +Reply-To: khare@alumni.caltech.edu +From: khare@alumni.caltech.edu +To: fork@spamassassin.taint.org +Subject: NYTimes.com Article: Some Friends, Indeed, Do More Harm Than Good +Message-Id: <20020910190636.56DC6C432@email4.lga2.nytimes.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 15:06:36 -0400 (EDT) + +This article from NYTimes.com +has been sent to you by khare@alumni.caltech.edu. + + +Sure does explain FoRK :-) + +not yet abandoned, + Rohit + +khare@alumni.caltech.edu + + +Some Friends, Indeed, Do More Harm Than Good + +September 10, 2002 +By MARY DUENWALD + + + + + + +Friends are supposed to be good for you. In recent years, +scientific research has suggested that people who have +strong friendships experience less stress, they recover +more quickly from heart attacks and they are likely to live +longer than the friendless. They are even less susceptible +to the common cold, studies show. + +But not all friends have such a salutary effect. Some lie, +insult and betray. Some are overly needy. Some give too +much advice. Psychologists and sociologists are now calling +attention to the negative health effects of bad friends. + +"Friendship is often very painful," said Dr. Harriet +Lerner, a psychologist and the author of "The Dance of +Connection." "In a close, enduring friendship, jealousy, +envy, anger and the entire range of difficult emotions will +rear their heads. One has to decide whether the best thing +is to consider it a phase in a long friendship or say this +is bad for my health and I'm disbanding it." + +Another book, "When Friendship Hurts," by Dr. Jan Yager, a +sociologist at the University of Connecticut at Stamford, +advises deliberately leaving bad friends by the wayside. +"There's this myth that friendships should last a +lifetime," Dr. Yager said. "But sometimes it's better that +they end." + +That social scientists would wait until now to spotlight +the dangers of bad friends is understandable, considering +that they have only recently paid close attention to +friendship at all. Marriage and family relationships - +between siblings or parents and children - have been seen +as more important. + +Of course, troubled friendships are far less likely to lead +to depression or suicide than troubled marriages are. And +children are seldom seriously affected when friendships go +bad. + +As a popular author of relationship advice books, Dr. +Lerner said, "Never once have I had anyone write and say my +best friend hits me." + +Dr. Beverley Fehr, a professor of psychology at the +University of Winnipeg, noted that sociological changes, +like a 50 percent divorce rate, have added weight to the +role of friends in emotional and physical health. + +"Now that a marital relationship can't be counted on for +stability the way it was in the past, and because people +are less likely to be living with or near extended family +members, people are shifting their focus to friendships as +a way of building community and finding intimacy," said Dr. +Fehr, the author of "Friendship Processes." + +Until the past couple of years, the research on friendship +focused on its health benefits. "Now we're starting to look +at it as a more full relationship," said Dr. Suzanna Rose, +a professor of psychology at Florida International +University in Miami. "Like marriage, friendship also has +negative characteristics." + +The research is in its infancy. Psychologists have not yet +measured the ill effects of bad friendship, Dr. Fehr said. +So far they have only, through surveys and interviews, +figured out that it is a significant problem. The early +research, Dr. Fehr added, is showing that betrayal by a +friend can be more devastating than experts had thought. + +How can a friend be bad? Most obviously, Dr. Rose said, by +drawing a person into criminal or otherwise ill-advised +pursuit. "When you think of people who were friends at +Enron," she added, "you can see how friendship can support +antisocial behavior." + +Betrayal also makes for a bad friendship. "When friends +split up," said Dr. Keith E. Davis, a professor of +psychology at the University of South Carolina, "it is +often in cases where one has shared personal information or +secrets that the other one wanted to be kept confidential." + + +Another form of betrayal, Dr. Yager said, is when a friend +suddenly turns cold, without ever explaining why. "It's +more than just pulling away," she said. "The silent +treatment is actually malicious." + +At least as devastating is an affair with the friend's +romantic partner, as recently happened to one of Dr. +Lerner's patients. "I would not encourage her to hang in +there and work this one out," Dr. Lerner said. + +A third type of bad friendship involves someone who insults +the other person, Dr. Yager said. One of the 180 people who +responded to Dr. Yager's most recent survey on friendship +described how, when she was 11, her best friend called her +"a derogatory name." The woman, now 32, was so devastated +that she feels she has been unable to be fully open with +people ever since, Dr. Yager said. + +Emotional abuse may be less noticeable than verbal abuse, +but it is "more insidious," Dr. Yager said. "Some people +constantly set up their friends," she explained. "They'll +have a party, not invite the friend, but make sure he or +she finds out." + +Risk takers, betrayers and abusers are the most extreme +kinds of bad friends, Dr. Yager said, but they are not the +only ones. She identifies 21 different varieties. Occupying +the second tier of badness are the liar, the person who is +overly dependent, the friend who never listens, the person +who meddles too much in a friend's life, the competitor and +the loner, who prefers not to spend time with friends. + +Most common is the promise breaker. "This includes everyone +from the person who says let's have a cup of coffee but +something always comes up at the last minute to someone who +promises to be there for you when you need them, but then +isn't," Dr. Yager said. + +Some friendships go bad, as some romantic relationships do, +when one of the people gradually or suddenly finds reasons +to dislike the other one. + +"With couples, it can take 18 to 24 months for someone to +discover there's something important they don't like about +the other person," said Dr. Rose of Florida International. +"One might find, for example, that in subtle ways the other +person is a racist. In friendships, which are less intense, +it may take even more time for one person to meet the +other's dislike criteria." + +Whether a friendship is worth saving, Dr. Lerner said, +"depends on how large the injury is." + +"Sometimes the mature thing is to lighten up and let +something go," she added. "It's also an act of maturity +sometimes to accept another person's limitations." + +Acceptance should come easier among friends than among +spouses, Dr. Lerner said, because people have more than one +friend and do not need a full range of emotional support +from each one. + +But if the friendship has deteriorated to the point where +one friend truly dislikes the other one or finds that the +friendship is causing undue stress, the healthy response is +to pull away, Dr. Yager said, to stop sharing the personal +or intimate details of life, and start being too busy to +get together, ever. + +"It takes two people to start and maintain a friendship, +but only one to end it," Dr. Yager said. + +Friendship, because it is voluntary and unregulated, is far +easier to dissolve than marriage. But it is also +comparatively fragile, experts say. Ideally, the loss of a +bad friendship should leave a person with more time and +appreciation for good ones, Dr. Lerner said. + +"It is wise to pay attention to your friendships and have +them in order while you're healthy and your life and work +are going well," she said. "Because when a crisis hits, +when someone you love dies, or you lose your job and your +health insurance, when the universe gives you a crash +course in vulnerability, you will discover how crucial and +life-preserving good friendship is." + +http://www.nytimes.com/2002/09/10/health/psychology/10FRIE.html?ex=1032684795&ei=1&en=2a88a6d1b985c977 + + + +HOW TO ADVERTISE +--------------------------------- +For information on advertising in e-mail newsletters +or other creative advertising opportunities with The +New York Times on the Web, please contact +onlinesales@nytimes.com or visit our online media +kit at http://www.nytimes.com/adinfo + +For general information about NYTimes.com, write to +help@nytimes.com. + +Copyright 2002 The New York Times Company + + diff --git a/Ch3/datasets/spam/easy_ham/00549.a847ea8934802a0ec67a7fd1d136d26d b/Ch3/datasets/spam/easy_ham/00549.a847ea8934802a0ec67a7fd1d136d26d new file mode 100644 index 000000000..bd2450edc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00549.a847ea8934802a0ec67a7fd1d136d26d @@ -0,0 +1,126 @@ +From fork-admin@xent.com Wed Sep 11 13:49:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 82ACC16F03 + for ; Wed, 11 Sep 2002 13:49:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:49:28 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8AKkmC16112 for ; + Tue, 10 Sep 2002 21:46:52 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 47F5B2940AC; Tue, 10 Sep 2002 13:43:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from relay.pair.com (relay1.pair.com [209.68.1.20]) by xent.com + (Postfix) with SMTP id C6FF029409A for ; Tue, + 10 Sep 2002 13:42:34 -0700 (PDT) +Received: (qmail 34817 invoked from network); 10 Sep 2002 20:45:19 -0000 +Received: from adsl-67-119-24-188.dsl.snfc21.pacbell.net (HELO golden) + (67.119.24.188) by relay1.pair.com with SMTP; 10 Sep 2002 20:45:19 -0000 +X-Pair-Authenticated: 67.119.24.188 +Message-Id: <016f01c2590a$f9a6abf0$640a000a@golden> +From: "Gordon Mohr" +To: +References: <20020910132951.04720C44D@argote.ch> +Subject: More on promiscuity and word choice Re: Selling Wedded Bliss (was + Re: Ouch...) +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 13:45:17 -0700 + +Robert Harley writes: +> >OK, then. Consider a population of 1,000,000. 500,000 men each +> >pair off with 500,000 women. Then, 1 man, let's call him "Wilt", +> >also has sex with the other 499,999 women +> +> This has never happened. Its relevance is nil. + +It was a extreme contrived example because you glosded over the +point of the earlier 3-person example. + +But OK, Mr Math, let it be N men and women, for any N>2. They +all pair off. Then, some number H, N>H>0, of men has sex with +all the other N-1 women he hasn't yet had sex with. + +Pick any N and H that might be interesting. Any choice of +values results in meaningful differences between the sexes' +"promiscuity", as commonly understood. It should be more +obvious with extreme choices of numbers, but it is also true +for any choice of N and H, if unrealistic totals distract you. + +Further, and I was hoping this would be clear without saying +so outright, this model actually approximates the cliche +"common wisdom" about per-gender sexual behavior, if you +reverse the male and female roles. + +Those stereotypes are: that more men than women seek multiple +partners -- men being "more promiscuous" than women -- and that +surplus of male interest is satisfied by a smaller number of +hyperpromiscuous women (often derisively labelled "sluts"). + +> So I chose not to type "on average" explicitly in my post, since this +> is FoRK and one tends to assume that people have a clue. +> +> There is no disagreement between us, except that I am more interested +> in typical behaviour and you in extreme. + +Nope, now you've amended the meaning of your initial statement to +make it more defensible. What I objected to was: + +Robert Harley: +# >The assumption that females of all species tend to be less promiscuous +# >than males simply does not fit the facts, Hrdy contended. +# +# Well, DUH!!! +# +# It is perfectly obvious that (heterosexual) promiscuity is exactly, +# precisely identical between males and females. +# +# Of course the shapes of the distributions may differ. + +If you assumed people on FoRK had a clue, would you have needed +to jump in with a patronizing "DUH!!"? + +If you were talking about fuzzy, typical behavior, would you have +huffed and puffed with the words "perfectly obvious" and "exactly, +precisely identical"? + +If your concern was with the "typical", why didn't you adopt the +typical definition of "promiscuous", rather than a straw-man +definition which allowed you to interject "DUH!!" and mock an +anthrolopology professor's conclusions? + +> Actually, you probably just +> had a bad day and felt like jumping down my throat for the hell of it. + +You are welcome to that theory! + +But here's an alternate theory: when you jump in with a patronizing +and overblown pronouncement -- e.g. "DUH!!... perfectly obvious... +exactly, precisely identical..." -- and that pronouncement is +itself sloppy and erroneous, then others may get a kick out of +popping your balloon. + +- Gordon + + + diff --git a/Ch3/datasets/spam/easy_ham/00550.02e6c81fb637ae555b997d6fd72df731 b/Ch3/datasets/spam/easy_ham/00550.02e6c81fb637ae555b997d6fd72df731 new file mode 100644 index 000000000..00246b68e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00550.02e6c81fb637ae555b997d6fd72df731 @@ -0,0 +1,104 @@ +From fork-admin@xent.com Wed Sep 11 13:49:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E1CB916F03 + for ; Wed, 11 Sep 2002 13:49:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:49:31 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8ANxgC22582 for ; + Wed, 11 Sep 2002 00:59:46 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 82F272940AA; Tue, 10 Sep 2002 16:56:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id EDBCF29409A for ; + Tue, 10 Sep 2002 16:55:35 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17outV-0000l4-00; Tue, 10 Sep 2002 19:58:09 -0400 +From: "Geege Schuman" +To: "Gary Lawrence Murphy" , + "Geege Schuman" +Cc: , "FoRK" +Subject: RE: Recommended Viewing +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Importance: Normal +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 19:56:56 -0400 + +dreams-are-like-radio analogy: i program my Jetta Monsoon for Planet 93.3, +80's 102.9, and NPR 89.9 but when i leave my local broadcast range i have to +scan for new stations. dreaming is outside my local broadcast range. + +-----Original Message----- +From: garym@maya.dyndns.org [mailto:garym@maya.dyndns.org]On Behalf Of +Gary Lawrence Murphy +Sent: Tuesday, September 10, 2002 10:14 AM +To: Geege Schuman +Cc: johnhall@evergo.net; FoRK +Subject: Re: Recommended Viewing + + +>>>>> "G" == Geege Schuman writes: + + G> you meant "SURPRISINGLY perceptive," didn't you? :-) + +Of course, dear. Especially without zazen training. Veritably +Operational Thetan-like. + + G> recent exceptionally vivid and strange dreams lead me to + G> believe i'm sparking synapses that have lain dormant lo these + G> many years. Lots of problem solving going on up there at + G> night. + +It's a myth that we don't use parts of our brain. We use it all, +always. It's just that our culturally-induced focal-point causes most +of us to most of the time ignore and waste 99.999% of it. "Lucid" is +a measure of notch-filter bandwidth; all stations are broadcasting, +but we only /choose/ Easy Rock 105. + +For example, don't look now but your shoes are full of feet. + +The sensation of toes the above statement evokes is not a "turning on" +of circuits, it is a "tuning in". The next step, of course, is to +"drop out" :) + +To paraphrase an old saw: Life is wasted on the living. + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00551.1c59fd8e4f3176c859b79b9a75fcc3b6 b/Ch3/datasets/spam/easy_ham/00551.1c59fd8e4f3176c859b79b9a75fcc3b6 new file mode 100644 index 000000000..682c6e275 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00551.1c59fd8e4f3176c859b79b9a75fcc3b6 @@ -0,0 +1,97 @@ +From fork-admin@xent.com Wed Sep 11 13:49:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 14DE716F03 + for ; Wed, 11 Sep 2002 13:49:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:49:34 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8B6aQC04905 for ; + Wed, 11 Sep 2002 07:36:27 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2B9962940A1; Tue, 10 Sep 2002 23:33:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav60.law15.hotmail.com [64.4.22.195]) by + xent.com (Postfix) with ESMTP id 17D4E29409A for ; + Tue, 10 Sep 2002 23:32:52 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Tue, 10 Sep 2002 23:35:46 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +Subject: Microsoft Buys XDegrees - Secure Access Company +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 11 Sep 2002 06:35:46.0333 (UTC) FILETIME=[75D21CD0:01C2595D] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 23:39:58 -0700 + + +== +http://siliconvalley.internet.com/news/article.php/10862_1460701 + +Microsoft Tuesday said it has purchased a Mountain View, Calif.-based +security company to better secure its core file services including its +Windows platform and .NET initiative. + +The Redmond, Wash-based software giant has acquired the assets of XDegrees +for an undisclosed amount of cash and is in the process of relocating the +team of 12 or 14 engineers to the Microsoft campus. + +XDegrees' technology assigns URLs to Word files, video clips, and other +digital documents for access across a peer-to-peer network + +XDegrees founder Michael Tanne was offered a job, but decided instead to +play his hand in the Silicon Valley. +========== + +"XDegrees' technology assigns URLs to Word files, video clips, and other +digital documents for access across a peer-to-peer network" - assigns URLs +to Word files... and somebody /bought/ that? + +=== +http://www.xdegrees.com/pr_2001-11-12_1.html +"The XDegrees System allows users to easily and consistently locate, access +and manage information by assigning each document a unique link. Providing +end-to-end security, the XDegrees System unifies authentication of all +users, provides file-level access control and encrypts all stored and +transferred files. Seamless integration with existing applications such as +email clients and Microsoft Office products allows companies to rapidly +deploy the XDegrees System and users to get up-and-running quickly." + +Whoa... high tech... + +=== +More bits here... +http://www.openp2p.com/pub/a/p2p/2001/04/27/xdegrees.html + +"The essence of XDegrees consists of a naming system and a distributed +database that allows peers to resolve resource names. XDegrees manages these +services for customers on its own hosts, and sells its software to +enterprises so they can define and run their own namespaces on in-house +servers. You can search for a particular person (whatever device the person +is currently using), for a particular device, for a file, or even for a web +service. The software that resolves resource names is called XRNS (the +eXtensible Resource Name System)." + + + diff --git a/Ch3/datasets/spam/easy_ham/00552.2a17c933697e682b93c2f32b66230a3b b/Ch3/datasets/spam/easy_ham/00552.2a17c933697e682b93c2f32b66230a3b new file mode 100644 index 000000000..03eb075f6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00552.2a17c933697e682b93c2f32b66230a3b @@ -0,0 +1,87 @@ +From fork-admin@xent.com Wed Sep 11 13:49:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C984816F03 + for ; Wed, 11 Sep 2002 13:49:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:49:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8B6gJC04943 for ; + Wed, 11 Sep 2002 07:42:19 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AD47D2940CD; Tue, 10 Sep 2002 23:39:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav60.law15.hotmail.com [64.4.22.195]) by + xent.com (Postfix) with ESMTP id 8076A29409A for ; + Tue, 10 Sep 2002 23:38:21 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Tue, 10 Sep 2002 23:41:15 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +Subject: Microsoft buys XDegress - more of a p2p/distributed data thing... +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 11 Sep 2002 06:41:15.0835 (UTC) FILETIME=[3A3820B0:01C2595E] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 23:45:31 -0700 + +I like this part - sounds like httpd on the client... + +http://www.openp2p.com/pub/a/p2p/2001/04/27/xdegrees.html + +"Once the Client Component is installed, a server can order a program to run +on the client. Any CGI script, Java servlet, ASP component, etc. could be +run on the client. This is like breaking the Web server into two parts. +Originally, Web servers just understood HTTP and sent pages. Then the field +started demanding more from the Web and the servers got loaded down with CGI +and mod_perl and active pages and stuff. So now the Web server can choose to +go back to simple serving and (where the application is appropriate) let the +client do the other razzamatazz. This is superior to JavaScript in one +important detail: the program doesn't have to reload when a new page is +loaded, as JavaScript functions do. + +And because XDegrees uses Web-compatible technology, users can access +XDegrees resources without installing any software, simply by using their +browser." + +=== +"Scaling is the main question that comes to mind when somebody describes a +new naming and searching system. CEO Michael Tanne claims to have figured +out mathematically that the system can scale up to millions of users and +billions of resources. Scaling is facilitated by the careful location of +servers (XDegrees will colocate servers at key routing points, as Akamai +does), and by directing clients to the nearest server as their default +"home" server. Enterprise customers can use own servers to manage in-house +applications." + +"Files can be cached on multiple systems randomly scattered around the +Internet, as with Napster or Freenet. In fact, the caching in XDegrees is +more sophisticated than it is on those systems: users with high bandwidth +connections can download portions, or "stripes," of a file from several +cached locations simultaneously. The XDegrees software then reassembles +these stripes into the whole file and uses digital signatures to verify that +the downloaded file is the same as the original. A key component of this +digital signature is a digest of the file, which is stored as an HTTP header +for the file." + + diff --git a/Ch3/datasets/spam/easy_ham/00553.d1e0ab732c8cbe70432e98301e352954 b/Ch3/datasets/spam/easy_ham/00553.d1e0ab732c8cbe70432e98301e352954 new file mode 100644 index 000000000..6eb8e8202 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00553.d1e0ab732c8cbe70432e98301e352954 @@ -0,0 +1,76 @@ +From fork-admin@xent.com Wed Sep 11 13:49:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 913A716F16 + for ; Wed, 11 Sep 2002 13:49:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:49:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8B71IC05326 for ; + Wed, 11 Sep 2002 08:01:18 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C99EB2940FF; Tue, 10 Sep 2002 23:58:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from relay.pair.com (relay1.pair.com [209.68.1.20]) by xent.com + (Postfix) with SMTP id 9F7CE29409A for ; Tue, + 10 Sep 2002 23:57:12 -0700 (PDT) +Received: (qmail 54161 invoked from network); 11 Sep 2002 07:00:06 -0000 +Received: from adsl-67-119-24-188.dsl.snfc21.pacbell.net (HELO golden) + (67.119.24.188) by relay1.pair.com with SMTP; 11 Sep 2002 07:00:06 -0000 +X-Pair-Authenticated: 67.119.24.188 +Message-Id: <029801c25960$db348560$640a000a@golden> +From: "Gordon Mohr" +To: +References: +Subject: Re: Microsoft buys XDegress - more of a p2p/distributed data thing... +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 00:00:01 -0700 + +Mr. FoRK writes: +> "Files can be cached on multiple systems randomly scattered around the +> Internet, as with Napster or Freenet. In fact, the caching in XDegrees is +> more sophisticated than it is on those systems: users with high bandwidth +> connections can download portions, or "stripes," of a file from several +> cached locations simultaneously. The XDegrees software then reassembles +> these stripes into the whole file and uses digital signatures to verify that +> the downloaded file is the same as the original. A key component of this +> digital signature is a digest of the file, which is stored as an HTTP header +> for the file." + +This "more sophisticated than [Napster or Freenet]" part seems +to be the same behavior implemented in many other P2P CDNs, +such as: + + - Kazaa + - EDonkey/Overnet + - BitTorrent + - Gnutella (with HUGE extensions) + - OnionNetworks WebRAID + +...though the quality of the "digest" used by each system varies +wildly. + +- Gordon + + + diff --git a/Ch3/datasets/spam/easy_ham/00554.a01a74aee9653a7ae8d1d558c75f0a5d b/Ch3/datasets/spam/easy_ham/00554.a01a74aee9653a7ae8d1d558c75f0a5d new file mode 100644 index 000000000..bd02bc5ab --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00554.a01a74aee9653a7ae8d1d558c75f0a5d @@ -0,0 +1,178 @@ +From fork-admin@xent.com Wed Sep 11 13:49:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1C45016F17 + for ; Wed, 11 Sep 2002 13:49:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:49:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8B8HTC07346 for ; + Wed, 11 Sep 2002 09:17:31 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AA98A2940C2; Wed, 11 Sep 2002 01:14:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from frodo.hserus.net (202-77-223-48.outblaze.com + [202.77.223.48]) by xent.com (Postfix) with ESMTP id CA79329409A for + ; Wed, 11 Sep 2002 01:13:34 -0700 (PDT) +Received: from ppp-177-198.bng.vsnl.net.in ([203.197.177.198] + helo=rincewind.pobox.com) by frodo.hserus.net with asmtp (Exim 4.10) id + 17p2fg-000C65-00; Wed, 11 Sep 2002 16:16:25 +0800 +X-PGP-Dsskey: 0x55FAB8D3 +X-PGP-Rsakey: 0xCAA67415 +Message-Id: <5.1.0.14.2.20020911114003.02e170f0@frodo.hserus.net> +X-Nil: +To: Adam Rifkin , FoRK@xent.com +From: Udhay Shankar N +Subject: storage bits +In-Reply-To: <200012281832.MAA00992@server1.KnowNow.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1"; format=flowed +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 11:45:45 +0530 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8B8HTC07346 + +At 12:32 PM 12/28/00 -0600, Adam Rifkin wrote: + +>I repeat, IBM 76.8Gb ultra dma/100 hard drive at Fry's for $375... +>"home of fast, friendly courteous service! (R)" +> +>I kid you not. That's a half a cent a Megabyte for storage. +>Not El Cheapo storage but top of the line storage. + +less than two years later, we have 320 GB for the same price: + +http://www.shareholder.com/maxtor/news/20020909-89588.cfm + +Maxtor Driving Capacity-Centric Enterprise Apps With "Super-Sized" ATA Drives + +Maxtor Continues its Leadership in the Market it Pioneered with a New +Category of High-Density ATA Drives + +MILPITAS, Calif., September 9, 2002- + +Maxtor Corporation (NYSE: MXO), a worldwide leader in hard disk drives and +data storage solutions, today announced Maxtor MaXLineTM, its newest +generation of ATA drives designed specifically for rapidly emerging +enterprise storage applications including near-line, media storage and +network storage. The MaXLine family features two critical differentiators: +huge capacities up to 320 GB for corporate archiving and media recording; +and unique manufacturing and quality for 24/7 operations with mean time to +failure (MTTF) rates exceeding one million hours. + +The MaXLine family is designed to bring hard disk drives into "near-line" +archive applications. By adding a layer of MaXLine drives to archive +architectures, companies can instantly recover time-critical data including +executive e-mail, transaction data and accounting data that may need to be +recovered on demand. + +These new drives are designed to solve another enterprise problem with the +storage of video, media and audio conference call files. Even compressed, +these files take up tremendous amounts of high-cost server space. Priced +starting around $299.95 to $399.95 MSRP, Maxtor's MaXLine family offers +high capacity drives for enterprise applications at price points between +traditional ATA and SCSI drives. + +For system OEMs and white box builders, MaXLine offers high-density, +easy-to-integrate storage for use in entry-level and mid-size server +environments. + +"The demand for instant recall of archived data is expanding as companies +are meeting their obligations to quickly access executive e-mails, +financial documents and transaction records," said Mike Dooley, senior +director of marketing for the Desktop Products Group at Maxtor. "Users may +not need to access information in these applications on a daily basis, but +when they do need access, it must be instant. Recent advances in ATA +technology and our manufacturing processes allow us to build upon our +legacy of experience and provide our customers with a family of premium ATA +hard drives that can be integrated into a variety of systems for these +enterprise applications." + +The MaXLine family includes the 5400-RPM MaXLine II, designed for +capacities up to 320 GB and the 7200-RPM MaXLine Plus II, designed for +capacities up to 250 GB. At these capacities, MaXLine offers higher storage +density than many tape and optical solutions. These drives have also been +tested and are projected to meet enterprise reliability requirements, +already exceeded by prior drives employing the same robust Maxtor designs, +which exceed MTTF of over one million hours. These drives will also carry a +three-year warranty. + +The MaXLine II and MaXLine Plus II feature the Maxtor Fast DriveTM +UltraATA/133 interface for data transfer speeds up to 133 MB per second. +The MaXLine II and MaXLine Plus II will be available with next-generation +serial ATA interface for higher performance. At 150 MB per second maximum +data transfer rate, serial ATA improves hard drive performance to keep pace +with the rapidly increasing performance requirements of data intensive +environments and enterprise applications. + +With a point-to-point connection architecture, and rich command set for +managing hard drive activity and data flow along the interface, serial ATA +advances the performance and efficiency of the drive to system interface. +The interface's reduced pin count allows for simpler cabling which in turn +allows better airflow within a system and further benefits the user with +increased design flexibility and hot plug capability. + +"Maxtor's MaXLine family of drives provide a solution for storing data that +has previously been too expensive to keep on disk," said Dave Reinsel, +analyst at IDC. "The ATA drives offer a great value, low cost per GB and +when integrated into storage systems and file servers offer a compelling +cost-effective alternative to tape libraries and optical drives, which have +been the traditional solutions used for near-line applications." + +Availability +Limited qualification units of the parallel ATA versions of Maxtor MaXLine +II and MaXLine Plus II are now available; with volume units available in +the fourth quarter. Qualification units of the MaXLine II and MaXLine Plus +II with serial ATA will be available later this month with volume shipments +scheduled to begin in the first quarter of 2003. + +About Maxtor +Maxtor Corporation (www.maxtor.com) is one of the world's leading suppliers +of information storage solutions. The company has an expansive line of +storage products for desktop computers, storage systems, high-performance +servers and consumer electronics. Maxtor has a reputation as a proven +market leader built by consistently providing high-quality products and +service and support for its customers. Maxtor and its products can be found +at www.maxtor.com or by calling toll-free (800) 2-MAXTOR. Maxtor is traded +on the NYSE under the MXO symbol. + +Note: Maxtor, MaXLine and the Maxtor logo are registered trademarks of +Maxtor Corporation. Fast Drive is a trademark of Maxtor Corporation. All +other trademarks are properties of their respective owners. + +GB means 1 billion bytes. Total accessible capacity varies depending on +operating environment. + +This announcement relating to Maxtor may contain forward-looking statements +concerning future technology, products incorporating that technology, and +Maxtor's execution. These statements are based on current expectations and +are subject to risks and uncertainties which could materially affect the +company's results, including, but not limited to, market demand for hard +disk drives, the company's ability to execute future production ramps and +utilize manufacturing assets efficiently, pricing, competition, and the +significant uncertainty of market acceptance of new products. These and +other risk factors are contained in documents that the company files with +the SEC, including the Form 10-K for fiscal 2001 and its recent 10-Qs. + +Copyright © 2001, Maxtor Corporation ®. Privacy Policy. + + + +-- +((Udhay Shankar N)) ((udhay @ pobox.com)) ((www.digeratus.com)) + + diff --git a/Ch3/datasets/spam/easy_ham/00555.4139b207075574b3774942a3a42013d8 b/Ch3/datasets/spam/easy_ham/00555.4139b207075574b3774942a3a42013d8 new file mode 100644 index 000000000..dbbfded5c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00555.4139b207075574b3774942a3a42013d8 @@ -0,0 +1,65 @@ +From fork-admin@xent.com Wed Sep 11 14:10:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A3E2116F03 + for ; Wed, 11 Sep 2002 14:10:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 14:10:32 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8BD4KC15488 for ; + Wed, 11 Sep 2002 14:04:20 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D538D2940D0; Wed, 11 Sep 2002 06:01:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 5A29629409A for ; + Wed, 11 Sep 2002 06:00:44 -0700 (PDT) +Received: (qmail 19867 invoked from network); 11 Sep 2002 13:03:44 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 11 Sep 2002 13:03:44 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 584B91CC98; + Wed, 11 Sep 2002 09:03:37 -0400 (EDT) +To: Udhay Shankar N +Cc: Adam Rifkin , FoRK@xent.com +Subject: Re: storage bits +References: <5.1.0.14.2.20020911114003.02e170f0@frodo.hserus.net> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 11 Sep 2002 09:03:37 -0400 + +>>>>> "U" == Udhay Shankar N writes: + + U> At 12:32 PM 12/28/00 -0600, Adam Rifkin wrote: + >> I repeat, IBM 76.8Gb ultra dma/100 hard drive at Fry's for + >> $375... "home of fast, friendly courteous service! (R)" + + U> less than two years later, we have 320 GB for the same price: + +So then why does my webhost _still_ only give me 200MB? + +-- +Gary Lawrence Murphy TeleDynamics Communications Inc + Business Advantage through Community Software : http://www.teledyn.com +"Computers are useless. They can only give you answers."(Pablo Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00556.eea9a26e128c1b4b676b4180adbd547a b/Ch3/datasets/spam/easy_ham/00556.eea9a26e128c1b4b676b4180adbd547a new file mode 100644 index 000000000..e8ee93ce7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00556.eea9a26e128c1b4b676b4180adbd547a @@ -0,0 +1,88 @@ +From fork-admin@xent.com Wed Sep 11 14:21:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4CE2316F03 + for ; Wed, 11 Sep 2002 14:21:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 14:21:29 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8BDAaC15784 for ; + Wed, 11 Sep 2002 14:10:39 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 623E029410C; Wed, 11 Sep 2002 06:07:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id EB10C29409A for + ; Wed, 11 Sep 2002 06:06:34 -0700 (PDT) +Received: (qmail 17344 invoked by uid 501); 11 Sep 2002 13:09:14 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 11 Sep 2002 13:09:14 -0000 +From: CDale +To: Paul Chvostek +Cc: discuss-list@opensrs.net, +Subject: Re: Snow +In-Reply-To: <20020910165007.A66650@mail.it.ca> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 08:09:14 -0500 (CDT) + +September Haiku + +Freezing my ass off +Air conditioning on high +heats small apartment. + + +Cindy, in Mississippie +P.S. this one's for you, geege. + + + +On Tue, 10 Sep 2002, Paul Chvostek wrote: + +> +> I can tell I'm not the only one without air conditioning. ;-) +> +> Maybe I'll move to Canmore. +> +> p +> +> +> On Tue, Sep 10, 2002 at 03:37:08PM -0400, Swerve wrote: +> > +> > moo hahahaha. +> > +> > i need a smoke. +> > +> > stop this heatwave. +> > +> > bring on winter. +> > +> > bring on fall. +> > +> > +> > Swerve, shut up. +> > +> > bye. +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00557.62ed7b82fd342ca4d7932ccee2552337 b/Ch3/datasets/spam/easy_ham/00557.62ed7b82fd342ca4d7932ccee2552337 new file mode 100644 index 000000000..10ea712a2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00557.62ed7b82fd342ca4d7932ccee2552337 @@ -0,0 +1,95 @@ +From fork-admin@xent.com Wed Sep 11 19:42:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 18FA416F03 + for ; Wed, 11 Sep 2002 19:42:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 19:42:11 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8BFdKC21045 for ; + Wed, 11 Sep 2002 16:39:21 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0B0F32940FB; Wed, 11 Sep 2002 08:36:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx1.ucsc.edu [128.114.129.36]) by + xent.com (Postfix) with ESMTP id 74A3F29409A for ; + Wed, 11 Sep 2002 08:35:34 -0700 (PDT) +Received: from Tycho (dhcp-63-177.cse.ucsc.edu [128.114.63.177]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g8BFbsq13928 for + ; Wed, 11 Sep 2002 08:37:54 -0700 (PDT) +From: "Jim Whitehead" +To: +Subject: RE: Microsoft buys XDegress - more of a p2p/distributed data thing... +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <029801c25960$db348560$640a000a@golden> +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Importance: Normal +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 08:35:31 -0700 + +XDegrees was at the WebDAV Interoperability Testing Event last year, so +there may be some DAV under the hood there someplace. + +- Jim + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +> Gordon Mohr +> Sent: Wednesday, September 11, 2002 12:00 AM +> To: fork@spamassassin.taint.org +> Subject: Re: Microsoft buys XDegress - more of a p2p/distributed data +> thing... +> +> +> Mr. FoRK writes: +> > "Files can be cached on multiple systems randomly scattered around the +> > Internet, as with Napster or Freenet. In fact, the caching in +> XDegrees is +> > more sophisticated than it is on those systems: users with high +> bandwidth +> > connections can download portions, or "stripes," of a file from several +> > cached locations simultaneously. The XDegrees software then reassembles +> > these stripes into the whole file and uses digital signatures +> to verify that +> > the downloaded file is the same as the original. A key component of this +> > digital signature is a digest of the file, which is stored as +> an HTTP header +> > for the file." +> +> This "more sophisticated than [Napster or Freenet]" part seems +> to be the same behavior implemented in many other P2P CDNs, +> such as: +> +> - Kazaa +> - EDonkey/Overnet +> - BitTorrent +> - Gnutella (with HUGE extensions) +> - OnionNetworks WebRAID +> +> ...though the quality of the "digest" used by each system varies +> wildly. +> +> - Gordon +> + + diff --git a/Ch3/datasets/spam/easy_ham/00558.95b8c2677759a2f569a5dc0bd70b8cc0 b/Ch3/datasets/spam/easy_ham/00558.95b8c2677759a2f569a5dc0bd70b8cc0 new file mode 100644 index 000000000..b0dae754a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00558.95b8c2677759a2f569a5dc0bd70b8cc0 @@ -0,0 +1,182 @@ +From fork-admin@xent.com Wed Sep 11 19:42:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D5BE316F03 + for ; Wed, 11 Sep 2002 19:42:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 19:42:12 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8BGdKC23029 for ; + Wed, 11 Sep 2002 17:39:21 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 86CBB294164; Wed, 11 Sep 2002 09:36:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id 4485229409A for ; + Wed, 11 Sep 2002 09:35:06 -0700 (PDT) +Received: from sashimi (rdu162-235-094.nc.rr.com [24.162.235.94]) by + Boron.MeepZor.Com (8.11.6/8.11.6) with SMTP id g8BGbpg15734 for + ; Wed, 11 Sep 2002 12:37:51 -0400 +From: "Bill Stoddard" +To: "Fork@Xent.Com" +Subject: Hanson's Sept 11 message in the National Review +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 12:37:15 -0400 + + +http://www.nationalreview.com/hanson/hanson091102.asp + + +September 11, 2002 8:00 a.m. +The Wages of September 11 +There is no going back. + + + +September 11 changed our world. Those who deny such a watershed event take a +superficially short-term view, and seem to think all is as before simply +because the sun still rises and sets. + +This is a colossal misjudgment. The collapse of the towers, the crashing +into the Pentagon, and the murder of 3,000 Americans — all seen live in real +time by millions the world over — tore off a scab and exposed deep wounds, +which, if and when they heal, will leave ugly scars for decades. The killers +dealt in icons — the choice of 911 as the date of death, targeting the +manifest symbols of global capitalism and American military power, and +centering their destruction on the largest Jewish city in the world. Yes, +they got their symbols in spades, but they have no idea that their killing +has instead become emblematic of changes that they could scarcely imagine. + +Islamic fundamentalism has proved not ascendant, but static, morally +repugnant — and the worst plague upon the Arab world since the Crusades. By +lurking in the shadows and killing incrementally through stealth, the +vampirish terrorists garnered bribes and subsidies through threats and +bombs; but pale and wrinkled in the daylight after 9/11, they prove only +ghoulish not fearsome. + +The more the world knows of al Qaeda and bin Laden, the more it has found +them both vile and yet banal — and so is confident and eager to eradicate +them and all they stand for. It is one thing to kill innocents, quite +another to take on the armed might of an aroused United States. Easily +dodging a solo cruise missile in the vastness of Afghanistan may make good +theater and bring about braggadocio; dealing with grim American and British +commandos who have come 7,000 miles for your head prompts abject flight and +an occasional cheap infomercial on the run. And the ultimate consequence of +the attacks of September 11 will not merely be the destruction of al Qaeda, +but also the complete repudiation of the Taliban, the Iranian mullocracy, +the plague of the Pakistani madrassas, and any other would-be fundamentalist +paradise on earth. + +Foreign relations will not be the same in our generation. Our coalition with +Europe, we learn, was not a partnership, but more mere alphabetic +nomenclature and the mutual back scratching of Euro-American globetrotters — +a paper alliance without a mission nearly 15 years after the end of the Cold +War. The truth is that Europe, out of noble purposes, for a decade has +insidiously eroded its collective national sovereignty in order to craft an +antidemocratic EU, a 80,000-person fuzzy bureaucracy whose executive power +is as militarily weak as it is morally ambiguous in its reliance on often +dubious international accords. This sad realization September 11 brutally +exposed, and we all should cry for the beloved continent that has for the +moment completely lost its moral bearings. Indeed, as the months progressed +the problems inherent in "the European way" became all too apparent: +pretentious utopian manifestos in lieu of military resoluteness, abstract +moralizing to excuse dereliction of concrete ethical responsibility, and +constant American ankle-biting even as Europe lives in a make-believe Shire +while we keep back the forces of Mordor from its picturesque borders, with +only a few brave Frodos and Bilbos tagging along. Nothing has proved more +sobering to Americans than the skepticism of these blinkered European +hobbits after September 11. + +America learned that "moderate" Arab countries are as dangerous as hostile +Islamic nations. After September 11, being a Saudi, Egyptian, or Kuwaiti +means nothing special to an American — at least not proof of being any more +friendly or hostile than having Libyan, Syrian, or Lebanese citizenship. +Indeed, our entire postwar policy of propping up autocracies on the triad of +their anticommunism, oil, and arms purchases — like NATO — belongs to a +pre-9/11 age of Soviet aggrandizement and petroleum monopolies. Now we learn +that broadcasting state-sponsored hatred of Israel and the United States is +just as deadly to our interests as scud missiles — and as likely to come +from friends as enemies. Worst-case scenarios like Iran and Afghanistan +offer more long-term hope than "stable regimes" like the Saudis; governments +that hate us have populations that like us — and vice versa; the Saudi royal +family, whom 5,000 American troops protect, and the Mubarak autocracy, which +has snagged billions of American dollars, are as afraid of democratic +reformers as they are Islamic fundamentalists. And with good reason: Islamic +governments in Iran and under the Taliban were as hated by the masses as +Arab secular reformers in exile in the West are praised and championed. + +The post-9/11 domestic calculus is just as confusing. Generals and the +military brass call civilians who seek the liberation of Iraq "chicken +hawks" and worse. Yet such traditional Vietnam-era invective I think rings +hollow after September 11, and sounds more like McClellan's shrillness +against his civilian overseers who precipitously wanted an odious slavery +ended than resonant of Patton's audacity in charging after murderous Nazis. +More Americans were destroyed at work in a single day than all those +soldiers killed in enemy action since the evacuation of Vietnam nearly 30 +years ago. Indeed, most troops who went through the ghastly inferno of +Vietnam are now in or nearing retirement; and, thank God, there is no +generation of Americans in the present military — other than a few thousand +brave veterans of the Gulf, Mogadishu, and Panama — who have been in +sustained and deadly shooting with heavy casualties. Because American +soldiers and their equipment are as impressive as our own domestic security +is lax, in this gruesome war it may well be more perilous to work high up in +lower Manhattan, fly regularly on a jumbo jet, or handle mail at the +Pentagon or CIA than be at sea on a sub or destroyer. + +Real concern for the sanctity of life may hinge on employing rather than +rejecting force, inasmuch as our troops are as deadly and protected abroad +as our women, children, aged, and civilians are impotent and vulnerable at +home. It seems to me a more moral gamble to send hundreds of pilots into +harm's way than allow a madman to further his plots to blow up or infect +thousands in high-rises. + +Politics have been turned upside down. In the old days, cynical +conservatives were forced to hold their noses and to practice a sometimes +repellent Realpolitik. In the age of Russian expansionism, they were loathe +to champion democracy when it might usher in a socialist Trojan Horse whose +belly harbored totalitarians disguised as parliamentarians. Thus they were +so often at loggerheads with naïve and idealist leftists. + +No longer. The end of the specter of a deadly and aggressive Soviet +Communism has revived democratic ideology as a force in diplomacy. Champions +of freedom no longer sigh and back opportunistic rightist thugs who promise +open economics, loot their treasuries, and keep out the Russians. Instead, +even reactionaries are now more likely to push for democratic governments in +the Middle East than are dour and skeptical leftists. The latter, if +multiculturalists, often believe that democracy is a value-neutral Western +construct, not necessarily a universal good; if pacifists, they claim +nonintervention, not justice, as their first priority. The Right, not the +Left, now is the greater proponent of global freedom, liberation, and +idealism — with obvious domestic ramifications for any Republican president +astute enough to tap that rich vein of popular support. + +All this and more are the wages of the disaster of September 11 and the +subsequent terrible year — and yet it is likely that, for good or evil, we +will see things even more incredible in the twelve months ahead. + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00559.caa975fbe7e1641a76de679bdf213adc b/Ch3/datasets/spam/easy_ham/00559.caa975fbe7e1641a76de679bdf213adc new file mode 100644 index 000000000..4c260ee12 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00559.caa975fbe7e1641a76de679bdf213adc @@ -0,0 +1,220 @@ +From fork-admin@xent.com Wed Sep 11 19:42:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2F50C16F03 + for ; Wed, 11 Sep 2002 19:42:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 19:42:16 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8BGsbC23365 for ; + Wed, 11 Sep 2002 17:54:41 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0BEEF2941C2; Wed, 11 Sep 2002 09:51:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from granger.mail.mindspring.net (granger.mail.mindspring.net + [207.69.200.148]) by xent.com (Postfix) with ESMTP id 3F0DB29409A for + ; Wed, 11 Sep 2002 09:50:38 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + granger.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17pAgb-0005yV-00; + Wed, 11 Sep 2002 12:49:53 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: Digital Bearer Settlement List , fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: A Living Memorial +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 12:47:58 -0400 + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Say 'amen' somebody. What the WSJ said, appended below. + + +The WTC, as constructed, was a confiscatory government boondoggle, +expropriated from the original pre-construction property owners at +the behest of a third-generation trust-fund-aristocrat for the "good" +of the city, and owned by an "authority" looking for something else +to do after it, and its coach-hounds in organized labor and organized +crime, had killed what was the largest port in the world's richest +nation. + +Now, of course, it's about to get worse. The sins of 40 years ago +have been compounded at the hands of two kinds of literally +irrational fanatics, first those in religion, and now those in +government. + +As a result, a large part of 10 million square feet of once perfectly +usable office space, devoted, at least ostensibly, to commerce, will +be "granted" away in a potlatch that only government, and +special-interest "communities", (or "stakeholders", or whatever the +cryptosocialist psycho-rabble call themselves this week) can organize +to such perfection. + + +All this in probably the *only* city in the country that was founded +by a *business*, explicitly for the purpose of *commerce*. Not +religious fanaticism. Not colonial expansion in a monarch's name. +*Commerce*. + + +If they *really* wanted to make a point to the superstitious luddites +who collapsed those buildings (using probably the only sharp objects +on a plane full of government-disarmed passengers) the so-called +"authority" should disband itself and sell its property off to the +highest bidder and let the *market* -- the cure to all luddism, +foreign and domestic, government and superstitious -- decide. + +If the new, *private* owner wants to sell, or give away, a space for +a memorial, fine. They could sell tickets and donate the money to the +families of the dead and injured. Probably great for marketing the +property, at least during the lifetime of anyone who remembers the +event. + +And, of course, if the new owner wants to build something twice as +tall, or with twice as much space than the original 10 million square +feet, splendid. Whatever the market will bear. + + +In these days of increasingly ubiquitous trans-national geodesic +internetworks, of strong financial cryptography, and of exponentially +decreasing transaction costs in formerly monolithic industries, +economics and freedom can, and will, prevail over both superstition +and statism. + +It's probably too much to hope for an actual market in lower +Manhattan mega-real-estate to prevail this early in the game, but +it's going to happen sooner or later. + +And, whenever it does, *that* will be a fitting memorial to those who +died at the World Trade Center. + +Cheers, +RAH + +- ------- + +http://online.wsj.com/article_print/0,,SB1031705210159756235,00.html + + +The Wall Street Journal + +September 11, 2002 +REVIEW & OUTLOOK + +A Living Memorial + +As we write these words, we can look down from our offices into the +six-story crater where the Twin Towers once stood. Like everyone +else, we want that site to be rebuilt in a way that honors those who +died a year ago. But we also think the best memorial to those who +perished would be a living one. + +The site of the World Trade Center calls forth many emotions, +especially today: anger, grief and respect for the many acts of +heroism that took place there. But underlying it all is the memory of +the enormous vitality that distinguished the towers before they were +attacked and was a large reason they were targeted. The best +expression of the spirit of New York and of those who died would be +to once again see thousands of people from dozens of countries +working, meeting, shopping, eating -- that is, engaged in the sort of +productive work and play that used to take place there. Osama bin +Laden should not be allowed to have turned it into a cemetery. + +But restoring this memory is not what the discussion in New York has +been about. So far no one is talking seriously about the vigorous +rebuilding of downtown Manhattan, which lost 100,000 jobs when the +Trade Center fell. Instead the discussion centers on the size and +scale of the memorial, and on satisfying every political interest now +clamoring for a piece of the action. New York's political leadership, +and its financial and media elites, are squandering a historic chance +to rebuild a better, more prosperous city. + +This is in part the fault of the commission tasked with figuring out +what to do with the site. In consultation with New York Governor +George Pataki, who is thinking primarily about his own November +re-election, the commission made the decision to focus first on the +memorial. The Manhattan Institute's Steve Malanga argues that the +commission would have been better off setting aside a limited space +for the memorial, getting on with the rebuilding and then returning +to the memorial. This is in essence what the Pentagon has so +successfully done -- rebuild immediately and set aside two acres for +an outdoor memorial, a design for which has yet to be decided. + +A big part of the problem in New York is that the city's +anti-development activists know an opening when they see one. They +want the World Trade Center site -- and even some surrounding areas +- -- transformed into an enormous park. These political advocates have +had plenty of practice at turning proposed development projects in +New York into a nightmare of delay and litigation, and the World +Trade Center site is now getting the same treatment. Worse, they are +cynically using some bereaved family members to advance their own +anti-development agenda in the name of "honoring" the dead. One +family group even called a press conference to reject as +disrespectful a proposed train line under the site. + +We are not experts in designing war memorials, but we're confident +that a gigantic park in the heart of the world's financial center +isn't the appropriate choice for those who died a year ago. The great +cities of Europe and Japan, devastated in World War II, have all +rebuilt, and with memorials that are integrated into modern urban +life. Perhaps the most powerful is found in Rotterdam, the Dutch port +city reduced to rubble by German bombing, where survivors erected a +statue of a man with a hole where his heart used to be. + +In this country, the practice has been for the names of war dead to +be inscribed on the walls of institutions with which they were +affiliated. If you walk into Nassau Hall at Princeton University, +you'll find the names of 644 alumni who died in the Revolutionary +War, the War of 1812, the Civil War, the Spanish-American War, World +War I, World War II, Korea and Southeast Asia. No one thinks it +disrespectful to the dead that the life of the university goes on +around the walls containing their names. + +In New York now, it would help if political leaders looked beyond the +emotional tug of the victims and their families to the city's future. +Rudolph Giuliani, now that he's out office, wants the entire 16 acres +devoted to the memorial. Governor Pataki has called for no structures +on the "footprints," which, being in the center of the site, would +severely curtail options. Mayor Michael Bloomberg initially raised +his voice in favor of commercial development but was bloodied by the +press and has since ducked for cover. + +Maybe things will be different after this anniversary is past. Maybe +those responsible for the World Trade Center site will start thinking +more about the next 50 or 100 years than the past 12 months. The best +way to honor the dead is by reviving normal life and commerce. + +-----BEGIN PGP SIGNATURE----- +Version: PGP 7.5 + +iQA/AwUBPX9zD8PxH8jf3ohaEQI2aACgv7mtb5VKTpRj5MJQt1OyzyifzusAn273 +fgNkOntna6+SmLO8TB4XYbC2 +=09az +-----END PGP SIGNATURE----- + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00560.e49654efbb65ad7539d43d356457a322 b/Ch3/datasets/spam/easy_ham/00560.e49654efbb65ad7539d43d356457a322 new file mode 100644 index 000000000..cd9e1cfcb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00560.e49654efbb65ad7539d43d356457a322 @@ -0,0 +1,86 @@ +From fork-admin@xent.com Wed Sep 11 19:42:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 140D616F16 + for ; Wed, 11 Sep 2002 19:42:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 19:42:19 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8BHgaC24933 for ; + Wed, 11 Sep 2002 18:42:38 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 878C32940B7; Wed, 11 Sep 2002 10:39:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id B0F7F29409A for ; Wed, + 11 Sep 2002 10:38:17 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 9284F3ED63; + Wed, 11 Sep 2002 13:44:46 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 90C9A3ED55 for ; Wed, + 11 Sep 2002 13:44:46 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Keillor voices up on what to do with the WTC site +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 13:44:46 -0400 (EDT) + + +http://www.phc.mpr.org/posthost/index.shtml + +Dear Garrison, + +There are at least six plans about what to do with +"Ground Zero" in New York. I believe a suitable memorial +surrounded by a lovely park with benches, walkways, +children's playgrounds, possibly some concessions such +as a restaurant, small theater and a place for art works +would be the best tribute to those who lost their lives. +What do you think should done with the space? + +Joe Adams +Hillsdale, New Jersey + +I dread the thought of a big memorial in Manhattan +that's designed by committee and that's gone through +public hearings and so forth ----- it's going to be cold +and ugly and pretentious and the upshot will be one more +public space that the public hates, of which there are +plenty already. New York is a bustling commercial city +and that's the beauty of it, it's a city of young +ambitious dreamy people, like the folks who died in the +towers, and it's not a memorializing city. Historic +events occurred in New York that in any other city would +be commemorated with interpretive centers and guides and +historical museums and in New York there's barely a +little plaque. That's a great thing, in my estimation. +It's a hustling city, full of immigrants looking for +their big chance, and compared to that spirit of +entrepreneurship, a memorial plaza with a fountain and a +statue of something seems dead to me. Look at Grant's +Tomb. Who walks past it and thinks about President +Grant? Nobody. People sit in the plaza by Grant's Tomb +and think about lunch, about sex, about money, about all +the things that New York is about. If you want to find +Grant, read his memoirs. His monument seems odd in New +York: it belongs in Washington, which is our memorial +city. New York is for the young and lively. + + + diff --git a/Ch3/datasets/spam/easy_ham/00561.4fb75fe802e36488a6acbbcccbcde3c1 b/Ch3/datasets/spam/easy_ham/00561.4fb75fe802e36488a6acbbcccbcde3c1 new file mode 100644 index 000000000..c61653a9b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00561.4fb75fe802e36488a6acbbcccbcde3c1 @@ -0,0 +1,57 @@ +From fork-admin@xent.com Wed Sep 11 19:42:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AB50A16F03 + for ; Wed, 11 Sep 2002 19:42:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 19:42:20 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8BIQeC26236 for ; + Wed, 11 Sep 2002 19:26:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8A3AF294197; Wed, 11 Sep 2002 11:23:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id D715929409A for + ; Wed, 11 Sep 2002 11:22:08 -0700 (PDT) +Received: (qmail 32002 invoked by uid 508); 11 Sep 2002 18:24:47 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (62.226.149.78) by + venus.phpwebhosting.com with SMTP; 11 Sep 2002 18:24:47 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8BIOej25918; Wed, 11 Sep 2002 20:24:41 + +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: Gary Lawrence Murphy +Cc: Udhay Shankar N , + Adam Rifkin , +Subject: Re: storage bits +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 20:24:40 +0200 (CEST) + +On 11 Sep 2002, Gary Lawrence Murphy wrote: + +> So then why does my webhost _still_ only give me 200MB? + +Because ~10 krpm server SCSII doesn't follow the curve. Most rackspace is +ridiculously expensive/unit, so people don't use low end EIDE hardware +there. + + diff --git a/Ch3/datasets/spam/easy_ham/00562.3f2a351171504facae22864c794c26b6 b/Ch3/datasets/spam/easy_ham/00562.3f2a351171504facae22864c794c26b6 new file mode 100644 index 000000000..dbddd1d41 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00562.3f2a351171504facae22864c794c26b6 @@ -0,0 +1,71 @@ +From fork-admin@xent.com Wed Sep 11 19:42:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EA91E16F03 + for ; Wed, 11 Sep 2002 19:42:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 19:42:21 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8BIZ1C26541 for ; + Wed, 11 Sep 2002 19:35:05 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 400AC2941DC; Wed, 11 Sep 2002 11:24:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 3B7422941D8 for ; Wed, + 11 Sep 2002 11:23:14 -0700 (PDT) +Received: (qmail 21570 invoked from network); 11 Sep 2002 18:25:50 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 11 Sep 2002 18:25:50 -0000 +Reply-To: +From: "John Hall" +To: "FoRK" +Subject: RE: Hanson's Sept 11 message in the National Review +Message-Id: <000001c259c0$a8559890$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 11:25:50 -0700 + + +Hanson is always good. + +One of my sci-fi authors is planning on slipping the following line into +one of their stories: + +"The worst strategic mistake since the 911 attacks". + + + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Bill +> Stoddard +> Sent: Wednesday, September 11, 2002 9:37 AM +> To: Fork@Xent.Com +> Subject: Hanson's Sept 11 message in the National Review +> +> +> http://www.nationalreview.com/hanson/hanson091102.asp + + diff --git a/Ch3/datasets/spam/easy_ham/00563.8c8efdf5034a0ba771e48494fd2d8099 b/Ch3/datasets/spam/easy_ham/00563.8c8efdf5034a0ba771e48494fd2d8099 new file mode 100644 index 000000000..da86ca9d0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00563.8c8efdf5034a0ba771e48494fd2d8099 @@ -0,0 +1,50 @@ +From fork-admin@xent.com Wed Sep 11 20:16:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1D89F16F03 + for ; Wed, 11 Sep 2002 20:16:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 20:16:24 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8BJ9WC27901 for ; + Wed, 11 Sep 2002 20:09:35 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2D3B82940BD; Wed, 11 Sep 2002 12:06:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 875BF29409A for + ; Wed, 11 Sep 2002 12:05:33 -0700 (PDT) +Received: (qmail 29242 invoked by uid 500); 11 Sep 2002 19:08:10 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 11 Sep 2002 19:08:10 -0000 +From: Chris Haun +X-X-Sender: chris@isolnetsux.techmonkeys.net +To: fork@spamassassin.taint.org +Subject: From salon.com - Forbidden thoughts about 9/11 +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 15:08:10 -0400 (EDT) + +i though this was all rather interesting, first bit of 9/11 coverage that +i've liked. + +http://www.salon.com/mwt/feature/2002/09/11/forbidden_letters/index.html + +Chris + + diff --git a/Ch3/datasets/spam/easy_ham/00564.e6fc359c277f507a2e01198b9c60ae61 b/Ch3/datasets/spam/easy_ham/00564.e6fc359c277f507a2e01198b9c60ae61 new file mode 100644 index 000000000..d54347def --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00564.e6fc359c277f507a2e01198b9c60ae61 @@ -0,0 +1,55 @@ +From fork-admin@xent.com Thu Sep 12 13:39:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E406616F03 + for ; Thu, 12 Sep 2002 13:39:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 13:39:38 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8BNZbC05295 for ; + Thu, 12 Sep 2002 00:35:39 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 581BB29409F; Wed, 11 Sep 2002 16:32:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 44AB529409A for ; Wed, + 11 Sep 2002 16:31:30 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 47BD83ECF4; + Wed, 11 Sep 2002 19:37:59 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 467163EB72 for ; Wed, + 11 Sep 2002 19:37:59 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: TheThresher +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 19:37:59 -0400 (EDT) + + +Is this old bits? It should be. + +I was browsing the local zine store here in Portland OR and found the +second issue of The Thresher...very very sweet. Poltical socio articles on +all manner of things from names you have come to love/despise over the +years. If you have not already, tombobjoewhore says check it out. + +www.thethresher.com + + + diff --git a/Ch3/datasets/spam/easy_ham/00565.4ef76da45577ee17827cec345ac543b0 b/Ch3/datasets/spam/easy_ham/00565.4ef76da45577ee17827cec345ac543b0 new file mode 100644 index 000000000..edb03d177 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00565.4ef76da45577ee17827cec345ac543b0 @@ -0,0 +1,96 @@ +From fork-admin@xent.com Thu Sep 12 13:39:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 686C716F03 + for ; Thu, 12 Sep 2002 13:39:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 13:39:40 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8C0KdC09588 for ; + Thu, 12 Sep 2002 01:20:42 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 782582940AE; Wed, 11 Sep 2002 17:17:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 0A5A429409A for ; Wed, + 11 Sep 2002 17:16:05 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 935633ED61; + Wed, 11 Sep 2002 20:22:18 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 91B813ECF4 for ; Wed, + 11 Sep 2002 20:22:18 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Since we were on the subject... +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 20:22:18 -0400 (EDT) + + +Gays, gay sex, gay marriage.....wooohooo its been a mano e mano week and +thursady will be the mass market consumer period on it. + +The WWE's gay marriage cermemony is in the can, that is its been filmed +last night for thursady nights Smackdown. Did they do it tastefully? Oh +come on its the WWE for cripssake, of course they didnt. Did they use it +ot promote an story line? Despite the WWE throwing away more good story +lines in the last 2 years than a wood chuck who could chuck wood if the +enviromentalists did not slap lawsuits on them, the sotrywrites seemed to +have finaly hit on a big tie togther event for several story lines. + +But of course, no one here watches the WWE, and not even because you would +rather watch old Divxs of the ECW, so this little bit is probably fallign +on the old killsawfiles. + +SO I wont be bursting anyones thursdaynight plans if I smarkout and say +that B and C waver near the final vows, the blame is falling on Ricco, +thier "manager"*, for pushing them to carry out their "gay" act far too +long and just when things look to be heating up with that story +arc......the mask comes off the justice of the piece as he pronounces +that they have gone 3 minutes, yes 3 minutes, too long.....Yep, its the +Bisch and in come Rosey and Jamal to attempt a stomping on Stpehnie +McMahon. Hopefully they did not get off a kick like they did on the first +lesbain back on Mondays raw as that broke a rib. + +Of course the editing truck boys might change some none or all of this +around, so if thursday nights tape play reveals them hitch and on thier +way to a honeymoon, thats the luck o the smarkies. I doubt it will be +edited much though from the way I heard it. + +So the bottomline is, they really were not gay all along, they were play +acting and it got out of hand because Ricco made them, Steaphnie gets a +face push while the Bisch gets a thursady night special 3 min heel push, +thus furthing the story arc of the brand split. Rosey and Jamala get heat +and B and C get a new Tag Team to play with. Ricco..who knows, maybe some +heat time would be good for him as a single. + +All this of course at a time when the ratting are in the bottom of a 4 +year valley of gloom, the last 2 years have been mostly squandered on +borken story arc promises and bad acting, and to top it all off Mick is no +longer ont he sceen so...bang bang...how can it be all good? + +Well, its back to my growing ECW divx collection where Tajiri was the shiz +and Mick cut promos unrivaled by any of todays mic monkeys. + +* Todays managers are a far cry form the managers of the 80's/early 90's. +Ricco is nota Paul Bearer or a Jimmy Heart at all but more like a buddy +who goes to the ring with them and occasional interferes..ugh. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00566.4ce66e249726f98555ef3a7ba1f666d5 b/Ch3/datasets/spam/easy_ham/00566.4ce66e249726f98555ef3a7ba1f666d5 new file mode 100644 index 000000000..e88c297aa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00566.4ce66e249726f98555ef3a7ba1f666d5 @@ -0,0 +1,66 @@ +From fork-admin@xent.com Thu Sep 12 13:39:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 80C1D16F16 + for ; Thu, 12 Sep 2002 13:39:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 13:39:42 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8C1DeC11612 for ; + Thu, 12 Sep 2002 02:13:42 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B90D329417A; Wed, 11 Sep 2002 18:10:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 4E7B529409A for ; Wed, + 11 Sep 2002 18:09:16 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id AAE1C3ECD9; + Wed, 11 Sep 2002 21:15:53 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id A98703EBCC for ; Wed, + 11 Sep 2002 21:15:53 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Bush blew take two +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 21:15:53 -0400 (EDT) + +http://www.washingtonpost.com/wp-dyn/articles/A63543-2002Sep10.html + +"MIAMI, Sept. 10 -- A two-gram rock of crack +cocaine was found inside the shoe of Florida +Gov. Jeb Bush's 25-year-old daughter by workers +at the central Florida rehabilitation center +where she is undergoing court-ordered drug +treatment, Orlando police said today. + +Noelle Bush was not arrested because witnesses +would not give sworn statements, but the +incident is under investigation, according to +Orlando police spokesman Orlando Rolon." + +Wow, the witnesses would not nark of a Bush girl in an era where there are +no mare restrictions on being held without a cause? + +Imagine that... + +-tom + + + diff --git a/Ch3/datasets/spam/easy_ham/00567.aa0b1a5ccd63ce58ca09389b7dd7a5aa b/Ch3/datasets/spam/easy_ham/00567.aa0b1a5ccd63ce58ca09389b7dd7a5aa new file mode 100644 index 000000000..ed3287566 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00567.aa0b1a5ccd63ce58ca09389b7dd7a5aa @@ -0,0 +1,96 @@ +From fork-admin@xent.com Thu Sep 12 13:39:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 23FC716F03 + for ; Thu, 12 Sep 2002 13:39:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 13:39:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8C1ZvC12173 for ; + Thu, 12 Sep 2002 02:36:03 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9EE5A294172; Wed, 11 Sep 2002 18:32:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 9564429409A for ; + Wed, 11 Sep 2002 18:31:20 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17pIrX-0000gf-00; Wed, 11 Sep 2002 21:33:43 -0400 +From: "Geege Schuman" +To: "Tom" , +Subject: RE: Bush blew take two +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 21:32:23 -0400 + +yeshterday we f*cked up our gubernatorial election, too. results to be +contested by reno. same six districts that were sued in 2000 still came up +gimpy. + +i suggested to jeb via e-mail we hold a run-off pinata party. hoist up a +papier mache donkey and a papier mache elephant. first one to batted open +wins. + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of Tom +Sent: Wednesday, September 11, 2002 9:16 PM +To: fork@spamassassin.taint.org +Subject: Bush blew take two + + +http://www.washingtonpost.com/wp-dyn/articles/A63543-2002Sep10.html + +"MIAMI, Sept. 10 -- A two-gram rock of crack +cocaine was found inside the shoe of Florida +Gov. Jeb Bush's 25-year-old daughter by workers +at the central Florida rehabilitation center +where she is undergoing court-ordered drug +treatment, Orlando police said today. + +Noelle Bush was not arrested because witnesses +would not give sworn statements, but the +incident is under investigation, according to +Orlando police spokesman Orlando Rolon." + +Wow, the witnesses would not nark of a Bush girl in an era where there are +no mare restrictions on being held without a cause? + +Imagine that... + +-tom + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00568.e5478bfa670cbd9bc3d26ed23e7b3eb6 b/Ch3/datasets/spam/easy_ham/00568.e5478bfa670cbd9bc3d26ed23e7b3eb6 new file mode 100644 index 000000000..bce8abab1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00568.e5478bfa670cbd9bc3d26ed23e7b3eb6 @@ -0,0 +1,109 @@ +From fork-admin@xent.com Thu Sep 12 13:39:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D634316F03 + for ; Thu, 12 Sep 2002 13:39:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 13:39:45 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8C1iOC12414 for ; + Thu, 12 Sep 2002 02:44:28 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 258C92941F0; Wed, 11 Sep 2002 18:38:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id B91BF29409A for ; + Wed, 11 Sep 2002 18:37:54 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17pIy5-00013u-00 for fork@xent.com; Wed, 11 Sep 2002 21:40:29 -0400 +From: "Geege Schuman" +To: +Subject: FW: Bush blew take two +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 21:39:08 -0400 + +meant "gubernatorial PRIMARY." + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of Geege +Schuman +Sent: Wednesday, September 11, 2002 9:32 PM +To: Tom; fork@spamassassin.taint.org +Subject: RE: Bush blew take two + + +yeshterday we f*cked up our gubernatorial election, too. results to be +contested by reno. same six districts that were sued in 2000 still came up +gimpy. + +i suggested to jeb via e-mail we hold a run-off pinata party. hoist up a +papier mache donkey and a papier mache elephant. first one to batted open +wins. + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of Tom +Sent: Wednesday, September 11, 2002 9:16 PM +To: fork@spamassassin.taint.org +Subject: Bush blew take two + + +http://www.washingtonpost.com/wp-dyn/articles/A63543-2002Sep10.html + +"MIAMI, Sept. 10 -- A two-gram rock of crack +cocaine was found inside the shoe of Florida +Gov. Jeb Bush's 25-year-old daughter by workers +at the central Florida rehabilitation center +where she is undergoing court-ordered drug +treatment, Orlando police said today. + +Noelle Bush was not arrested because witnesses +would not give sworn statements, but the +incident is under investigation, according to +Orlando police spokesman Orlando Rolon." + +Wow, the witnesses would not nark of a Bush girl in an era where there are +no mare restrictions on being held without a cause? + +Imagine that... + +-tom + + + + + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00569.d6da87140fd0ef187bcf217a57153cca b/Ch3/datasets/spam/easy_ham/00569.d6da87140fd0ef187bcf217a57153cca new file mode 100644 index 000000000..ea2572d5f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00569.d6da87140fd0ef187bcf217a57153cca @@ -0,0 +1,52 @@ +From fork-admin@xent.com Thu Sep 12 13:39:47 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9E08D16F03 + for ; Thu, 12 Sep 2002 13:39:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 13:39:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8C5fKC18851 for ; + Thu, 12 Sep 2002 06:41:21 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4D14C2940A2; Wed, 11 Sep 2002 22:38:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id B17D929409A for ; Wed, + 11 Sep 2002 22:37:19 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id A03FA3ED82; + Thu, 12 Sep 2002 01:43:58 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 9EBB53ECE4 for ; Thu, + 12 Sep 2002 01:43:58 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Something for the person who has everything +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 12 Sep 2002 01:43:58 -0400 (EDT) + + +Interesting ebay item......(and no it wasnt me even though the spellingis +oddly familar) + +http://cgi.ebay.com/aw-cgi/eBayISAPI.dll?MfcISAPICommand=ViewItem&item=1764085998 + + + + diff --git a/Ch3/datasets/spam/easy_ham/00570.d98ca90ac201b5d881f2397c95838eb2 b/Ch3/datasets/spam/easy_ham/00570.d98ca90ac201b5d881f2397c95838eb2 new file mode 100644 index 000000000..115c662f3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00570.d98ca90ac201b5d881f2397c95838eb2 @@ -0,0 +1,868 @@ +From fork-admin@xent.com Thu Sep 12 13:39:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1551816F03 + for ; Thu, 12 Sep 2002 13:39:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 13:39:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8C9BtC24644 for ; + Thu, 12 Sep 2002 10:12:04 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D667E2940B0; Thu, 12 Sep 2002 02:08:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from alumnus.caltech.edu (alumnus.caltech.edu [131.215.49.51]) + by xent.com (Postfix) with ESMTP id 1846129409A; Thu, 12 Sep 2002 02:07:52 + -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) by alumnus.caltech.edu + (8.12.3/8.12.3) with ESMTP id g8C9AnSV012069; Thu, 12 Sep 2002 02:10:49 + -0700 (PDT) +Subject: CBS News' interview w/Bush & reconstruction of his peregrinations +Content-Type: text/plain; charset=WINDOWS-1252; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +From: Rohit Khare +To: fork@spamassassin.taint.org +Message-Id: +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 12 Sep 2002 01:14:22 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8C9BtC24644 + + +"60 Minutes II" Bush Interview: + +(CBS) No president since Abraham Lincoln has seen such horrific loss of +life in a war on American soil. No president since James Madison, nearly +200 years ago, has seen the nation’s capital city successfully attacked. +But, one year ago, President George W. Bush was thrown into the first +great crisis of the 21st century. + +This is the president’s story of September 11th and the week America +went to war. 60 Minutes II spent two hours with Mr. Bush, one, on Air +Force One and another in the Oval Office last week. Even after a year, +the president is still moved, sometimes to the point of tears, when he +remembers Sept. 11. + +“I knew, the farther we get away from Sept.11, the more likely it is for +some around the world to forget the mission, but not me,” Mr. Bush says +during the Air Force One interview. “Not me. I made the pledge to myself +and to people that I’m not going to forget what happened on Sept. 11. So +long as I’m president, we will pursue the killers and bring them to +justice. We owe that to those who have lost their lives.” + +The memories come back sharp and clear on Air Force One, where Pelley +joined the president for a recent trip across country. 60 Minutes II +wanted to talk to him there because that is where he spent the first +hours after the attack. + +Not since Lyndon Johnson was sworn in on Air Force One has the airplane +been so central to America in a crisis. + +For President Bush, Sept. 11 2001, started with the usual routine. +Before dawn, the president was on his four-mile run. It was just before +6 a.m. and, at the same moment, another man was on the move: Mohammad +Atta. Two hours later, as Mr. Bush drove to an elementary school, +hijackers on four planes were murdering the flight crews and turning the +airliners east. As the motorcade neared the school at 8:45 a.m., jet +engines echoed in Manhattan. + +Atta plunged the 767 jumbo jet into World Trade Center Tower One. + +“I thought it was an accident,” says Mr. Bush. “I thought it was a pilot +error. I thought that some foolish soul had gotten lost and - and made a +terrible mistake.” + +Mr. Bush was told about the first plane just before sitting down with a +class of second graders. He was watching a reading drill when, just +after nine, United Flight 175 exploded into the second tower. There was +the sudden realization that what had seemed like a terrible mistake was +a coordinated attack. + +Back in the Florida classroom, press secretary Ari Fleischer got the +news on his pager. The president’s chief-of-staff, Andy Card stepped in. + +“A second plane hit the second tower; America is under attack,” Card +told the president + +When he said those words, what did he see in the President’s face? + +“I saw him coming to recognition of what I had said,” Card recalls. “I +think he understood that he was going to have to take command as +commander-in-chief, not just as president.” + +What was going through Bush’s mind when he heard the news? + +“We’re at war and somebody has dared attack us and we’re going to do +something about it,” Mr. Bush recalls. “I realized I was in a unique +setting to receive a message that somebody attacked us, and I was +looking at these little children and all of the sudden we were at war. I +can remember noticing the press pool and the press corps beginning to +get the calls and seeing the look on their face. And it became evident +that we were, you know, that the world had changed.” + +Mr. Bush walked into a classroom set up with a secure phone. He called +the vice president, pulling the phone cord tight as he spun to see the +attack on TV. Then he grabbed a legal pad and quickly wrote his first +words to the nation. + +"Ladies and gentlemen, this is a difficult moment for America,” he said +in the speech. “Today, we’ve had a national tragedy.” + +It was 9:30 a.m. As he spoke, Mr. Bush didn’t know that two more +hijacked jets were streaking toward Washington. Vice Pesident Dick +Cheney was in his office at the White House when a Secret Service agent +ran in. + +“He said to me, ‘Sir, we have to leave immediately’ and grabbed, put a +hand on my belt, another hand on my shoulder and propelled me out the +door of my office,” Cheney recalls. “I’m not sure how they do it, but +they sort of levitate you down the hallway, you move very fast.” + +“There wasn’t a lot of time for chitchat, you know, with the vice +president,” says Secret Service Director Brian Stafford, who was in his +command center ordering the round-up of top officials and the First +Family. He felt that he had only minutes to work with. “We knew there +were unidentified planes tracking in our direction,” he says. + +Cheney was rushed deep under the White House into a bunker called the +Presidential Emergency Operations Center. It was built for war, and this +was it. On her way down, National Security Advisor Condoleezza Rice +called Mr. Bush. + +“It was brief because I was being pushed to get off the phone and get +out of the West Wing,” says Rice. “They were hurrying me off the phone +with the president and I just said, he said, ‘I’m coming back’ and we +said ‘Mr. President that may not be wise.’ I remember stopping briefly +to call my family, my aunt and uncle in Alabama and say, ‘I’m fine. You +have to tell everybody that I’m fine’ but then settling into trying to +deal with the enormity of that moment, and in the first few hours, I +think the thing that was on everybody’s mind was how many more planes +are coming.” + +The Capitol was evacuated. And for the first time ever, the Secret +Service executed the emergency plan to ensure the presidential line of +succession. Agents swept up the 15 officials who stood to become +president if the others were killed. They wanted to move Vice President +Cheney, fearing he was in danger even in the bunker. But Cheney says +when he heard the other officials were safe, he decided to stay at the +White House, no matter what. + +“It’s important to emphasize it's not personal, you don’t think of it in +personal terms, you’ve got a professional job to do,” says Cheney. + +Cheney was joined by transportation secretary Norm Mineta who remembers +hearing the FAA counting down the hijacked jets closing in on the +capital. + +Says Mineta: “Someone came in and said ‘Mr. Vice president there’s a +plane 50 miles out,’ then he came in and said ‘Its now 10 miles out, we +don’t know where it is exactly, but it’s coming in low and fast.’” + +It was American Flight 77. At 9:38 a.m., it exploded into the Pentagon, +the first successful attack on Washington since the War of 1812. + +As the Pentagon burned, Mr. Bush’s limousine sped toward Air Force One +in Florida. At that moment, United Flight 93 - the last hijacked plane - +was taking dead aim at Washington. At the White House, the staff was in +the West Wing cafeteria, watching on TV. Press Secretary Jennifer +Millerwise was in the crowd when the order came to evacuate. + +“I no sooner walked outside when someone from the Secret Service yelled +‘Women drop your heels and run, drop your heels and run,’ and suddenly +the gates that never open except for authorized vehicles just opened and +the whole White House just flooded out,” she recalls. + +In Florida, as Mr. Bush boarded Air Force One, he was overheard telling +a Secret Service agent “Be sure to get the First Lady and my daughters +protected.” At 9:57 a.m., Air Force One thundered down the runway, +blasting smoke and dust in a full -hrust take off. Communications +Director Dan Bartlett was on board. + +“It was like a rocket,” he remembers. “For a good ten minutes, the plane +was going almost straight up.” + +At the same moment, 56 minutes after it was hit, World Trade Center +Tower Two began to falter, then cascade in an incomprehensible avalanche +of steel, concrete and human lives. + +“Someone said to me, ‘Look at that’ I remember that, ‘Look at that’ and +I looked up and I saw and I just remember a cloud of dust and smoke and +the horror of that moment,” recalls Rice of the TV newscast. + +She also felt something in her gut: “That we’ve lost a lot of Americans +and that eventually we would get these people. I felt the anger. Of +course I felt the anger.” + +Down in the bunker, Cheney was trying to figure out how many hijacked +planes there were. Officials feared there could be as many as 11. + +As the planes track toward Washington, a discussion begins about whether +to shoot them down. “I discussed it with the president,” Cheney +recalls. “‘Are we prepared to order our aircraft to shoot down these +airliners that have been hijacked?’ He said yes.” + +“It was my advice. It was his decision,” says Cheney. + +“That’s a sobering moment to order your own combat aircraft to shoot +down your own civilian aircraft,” says Bush. “But it was an easy +decision to make given the – given the fact that we had learned that a +commercial aircraft was being used as a weapon. I say easy decision, it +was, I didn’t hesitate, let me put it that way. I knew what had to be +done.” + +The passengers on United Flight 93 also knew what had to be done. They +fought for control and sacrificed themselves in a Pennsylvania meadow. +The flight was 15 minutes from Washington. + +“Clearly, the terrorists were trying to take out as many symbols of +government as they could: the Pentagon, perhaps the Capitol, perhaps the +White House. These people saved us not only physically but they saved us +psychologically and symbolically in a very important way, too,” says +Rice. + +Meanwhile, Tower One was weakening. It had stood for an hour and 43 +minutes. At 10:29 a.m., it buckled in a mirror image of the collapse of +its twin. + +The image that went round the world reached the First Lady in a secure +location somewhere in Washington. “I was horrified,” she says. “I +thought, ‘Dear God, protect as many citizens as you can.’ It was a +nightmare.” + +By 10:30 a.m., America’s largest city was devastated, its military +headquarters were burning. Air force One turned west along the Gulf +Coast. + +“I can remember sitting right here in this office thinking about the +consequences of what had taken place and realizing it was the defining +moment in the history of the United States,” says President Bush. “I +didn’t need any legal briefs, I didn’t need any consultations, I knew we +were at war.” + +Mr. Bush says the first hours were frustrating. He watched the +horrifying pictures, but the TV signal was breaking up. His calls to +Cheney were cutting out. Mr. Bush says he pounded his desk shouting, +“This is inexcusable; get me the vice president.” + +“I was trying to clear the fog of war, and there is a fog of war, says +the president. "Information was just flying from all directions.” + +Chief of staff Card brought in the reports. There was word Camp David +had been hit. A jet was thought to be targeting Mr. Bush’s ranch. + +“I remember hearing that the State Department might have been hit, or +that the White House had a fire in it. So we were hearing lots of +different information,” says Card. + +They also feared that Air Force One itself was a target. Cheney told the +president there was a credible threat against the plane. Using the code +name for Air Force One, Mr. Bush told an aide, “Angel is next.” The +threat was passed to presidential pilot Colonel Mark Tillman. + +“It was serious before that but now it is -no longer is it a time to get +the president home,” Tillman says. “We actually have to consider +everything we say, everything we do could be intercepted, and we have to +make sure that no one knows what our position is.” + +Tillman asked for an armed guard at his cockpit door while Secret +Service agents double-checked the identity of everyone on board. The +crew reviewed the emergency evacuation plan. Then came a warning from +air traffic control – a suspect airliner was dead ahead. + +“Coming out of Sarasota there was one call that said there was an +airliner off our nose that they did not have contact with,” Tillman +remembers. + +Tillman took evasive action, pulling his plane high above normal +traffic. They were on course for Washington, but by now no one thought +that was a good idea, except the president. + +“I wanted to come back to Washington, but the circumstances were such +that it was just impossible for the Secret Service or the national +security team to clear the way for Air Force One to come back,” says +Bush. + +So Air Force One set course for an underground command center in +Nebraska. Back in Washington, the president’s closest advisor, Karen +Hughes, heard about the threat to the plane and placed a call to Mr. +Bush. + +“And the military operator came back to me and in a voice that, to me, +sounded very shaken said, ‘Ma’am, I’m sorry, we can’t reach Air Force +One.’” Hughes recalls. Hughes was out of the White House during the +attacks. When she came back, it was a place she didn’t recognize. + +“There were either military, or maybe Secret Service, dressed all in +black, holding machine guns as, as we drove up. And I never expected to +see something like that in, in our nation's capital,” says Hughes. + +When she walked into the White House, no one was inside. “I knew it was +a day that you didn't want to surprise anybody, and so I yelled, +‘Hello?’ and two, again, kind of SWAT team members came running, running +through the, the hall with, again, guns drawn, and then took me to, to +the location where I met the vice president.” + +On Air Force One, Col. Tillman had a problem. He needed to hide the most +visible plane in the world, a 747 longer than the White House itself. He +didn’t want to use his radio, because the hijackers could be listening +to air traffic control. So he called air traffic control on the +telephone. + +“We actually didn't tell them our destination or what directions we were +heading,” says Tillman. “We, we basically just talked to 'em and said, +'OK, fine, we have no clearance at this time, we are just going to fly +across the United States.'” + +Controllers passed Air Force One from one sector to another, warning +each other to keep the route secret. + +“OK, where’s he going?” one tower radioed to another. + +“Just watch him,” a second tower responded. “Don’t question him where’s +he's going. Just work him and watch him, there’s no flight plan in and +we’re not going to put anything in. Ok, sir?” + +Air Force One ordered a fighter escort, and air traffic control radioed +back: “Air Force One, got two F-16s at about your 10 o’clock position.” + +“The staff, and the president and us, were filed out along the outside +hallway of his presidential cabin there and looking out the windows,” +says Bartlett. “And the president gives them a signal of salute, and the +pilot kind of tips his wing, and fades off and backs into formation.” + +The men in the F-16s were Shane Brotherton and Randy Roberts, from the +Texas Air National Guard. Their mission was so secret their commander +wouldn’t tell them where they were going. + +“He just said, 'You’ll know when you see it,' and that was my first +clue, I didn’t have any idea what we were going up until that point,” +says Brotherton. He knew when he saw it. + +“We, we were trying to keep an 80-mile bubble, bubble around Air Force +One, and we'd investigate anything that was within 80 miles,” says +Roberts. + +Bush says he was not worried about the safety of the people on this +aircraft, or for his own safety: “I looked out the airplane and saw two +F-16s on each wing. It was going to have to be a pretty good pilot to +get us.” + +We now know that the threat to Air Force One was part of the fog of war, +a false alarm. But it had a powerful effect at the time. Some wondered, +with the president out of sight, was he still running the government? He +hadn’t appeared after the attack on Washington. Mr. Bush was clearly +worried about it. At one point he was overheard saying, “The American +people want to know where their dang president is.” The staff considered +an address to the nation by phone but instead Mr. Bush ordered Air Force +One to land somewhere within 30 minutes so he could appear on TV. At +11:45 a.m., they landed at Barksdale Air Force Base in Louisiana. + +“The resolve of our great nation is being tested. But make no mistake, +we will show the world that we will pass this test. God bless,” Bush +said to the nation from Barksdale. + +At Barksdale, the Secret Service believed the situation in Washington +was still unsafe. So the plane continued on to Nebraska, to the command +center where Mr. Bush would be secure and have all the communications +gear he needed to run the government. Aboard Air Force One, Mr. Bush had +a job for press secretary Fleischer. + +“The president asked me to make sure that I took down everything that +was said. I think he wanted to make certain that a record existed,” says +Fleischer + +Fleischer’s notes capture Mr. Bush’s language, plain and unguarded. To +the vice president he said: “We’re at war, Dick, we’re going to find out +who did this and kick their ass.” Another time, Mr. Bush said, “We’re +not going to have any slap-on-the-wrist crap this time.” + +The President adds, “I can remember telling the Secretary of Defense, I +said, ‘We’re going to find out who did this and then Mr. Secretary, you +and Dick Myers,’ who we just named as chairman of the joint chiefs, ‘are +going to go get them.’” + +By 3 p.m., Air Force One touched down at Offutt Air Force Base in +Nebraska. Mr. Bush and his team were herded into a small brick hut that +gave no hint of what they would find below. + +At the bottom of the stairs was the U.S. Strategic Command Underground +Command Center. It was built to transmit a president’s order to go to +nuclear war. But when Mr. Bush walked in, the battle staff was watching +the skies over the United States. Many airplanes had still not landed. +After a short briefing, Mr. Bush and Card were taken to a teleconference +center which connected them to the White House, the Pentagon, the FBI +and the CIA. Mr. Bush had a question for his CIA Director George Tenent. + +According to Rice, Bush asked Tenent who had done this. Rice recalls +that Tenent answered: “Sir, I believe its al Qaeda. We’re doing the +assessment but it looks like, it feels like, it smells like al Qaeda.” + +The evidence would build. FBI Director Robert Mueller says that an +essential clue came from one of the hijacked planes before it crashed. + +A flight attendant on American Flight 11, Amy Sweeney, had the presence +of mind to call her office as the plane was hijacked and give them the +seat numbers of the hijackers. “That was the first piece of hard +evidence. We could then go to the manifest, find out who was sitting in +those seats and immediately conduct an investigation of those +individuals, as opposed to taking all the passengers on the plane and +going through a process of elimination,” says Mueller. + +In Nebraska, the White House staff was preparing for an address to the +nation from the Air Force bunker, but by then the president had had +enough. He decided to come back. + +“At one point, he said he didn’t want any tinhorn terrorist keeping him +out of Washington,” Fleischer says. “That verbatim.” + +On board, he was already thinking of issuing an ultimatum to the world: +“I had time to think and a couple of thoughts emerged. One was that +you're guilty if you harbor a terrorist, because I knew these terrorists +like al-Qaeda liked to prey on weak government and weak people. The +other thought that came was the opportunity to fashion a vast coalition +of countries that would either be with us or with the terrorists.” + +As Air Force One sped east, the last casualty of the attack on America +collapsed, one of the nation’s worst days wore into evening. At the +World Trade Center, 2,801 were killed; at the Pentagon, 184; and in +Pennsylvania 40. Altogether, there were 3,025 dead. + +“Anybody who would attack America the way they did, anybody who would +take innocent life the way they did, anybody who's so devious, is evil,” +Bush said recently. + +Mr. Bush would soon see that evil face to face. After arriving in +Washington, he boarded his helicopter and flew past the Pentagon on the +way to the White House. + +Was there a time when he was afraid that there might not be a White +House to return to? “I don’t remember thinking about whether or not the +White House would have been obliterated," he recalls. "I think I might +have thought they took their best shot, and now it was time for us to +take our best shot.” + +Mr. Bush arrived back at the White House nine hours after the attacks. +His next step was an address to the nation. Karen Hughes and her staff +were already working on the speech. + +“He decided that the primary tone he wanted to strike that night was +reassurance,” remembers Hughes. “We had to show resolve, we had to +reassure people, we had to let them know that we would be OK.” + +Just off the Oval Office, Mr. Bush added the words that would become +known as the Bush Doctrine - no distinction between terrorists and those +who harbor them. The staff wanted to add a declaration of war but Mr. +Bush didn’t think the American people wanted to hear it that night and +he was emphatic about that. + +He prepared to say it from the same desk where Franklin Roosevelt first +heard the news of Pearl Harbor. Now Bush was commander in chief. Eighty +million Americans were watching. + +“Today our fellow citizens, our way of life, our very freedom came under +attack in a series of deliberate and deadly terrorist acts,” he said +from the Oval Office that night. + +The Oval Office speech came at the end of the bloodiest day in American +history since the Civil War. Before he walked to the White House +residence for the night, Mr. Bush dictated these words for the White +House daily log: “The Pearl Harbor of the 21st century took place today. +We think it's Osama bin Laden.” + +(CBS) When Sept. 12 dawned, President Bush was demanding a war plan. No +one in the White House or the Pentagon could be sure of what the +president would do. In office for just eight months, he’d never been +tested as commander-in-chief. + +“I never asked them what they thought,” President Bush said of the +Pentagon brass, “because I didn’t really – because I knew what I was +gonna do. I knew exactly what had to be done, Scott. And that was to set +a strategy to seek justice. Find out who did it, hunt them down and +bring them to justice.” + +In the cabinet room, the president made clear what was next: “The +deliberate and deadly attacks which were carried out yesterday against +our country were more than acts of terror, they were acts of war,” he +said. + +To the war cabinet, al Qaeda was no surprise. National Security Advisor +Condoleezza Rice says the administration had been at work on a plan to +strike bin Laden’s organization well before Sept. 11. + +“The president said, ‘You know I’m tired of swatting at flies, I need a +strategy to eliminate these guys,’” Rice recalls. + +In one of the worst intelligence failures ever, the CIA and FBI didn’t +pick up clues that an attack in the United States was imminent. Without +a sense of urgency, the White House strategy the president had asked for +came too late. + +Chief of Staff Andrew Card recalls that the plan Mr. Bush had asked for +was “literally headed to the president’s desk, I think, on the eleventh, +tenth or eleventh, of September.” + +On Sept. 12, the war cabinet was debating the full range of options - +who to hit and how to hit them. There were some at the Pentagon who +worried in the early hours that Mr. Bush would order up an immediate +cruise missile strike, of the kind that had not deterred bin Laden in +the past. + +“Well, there’s a lot of nervous Nellies at the Pentagon, anyway,” Mr. +Bush tells Pelley. “A lot of people like to chatter, you know, more than +they should. But no, I appreciate that very much. Secretary of Defense +(Donald) Rumsfeld early on discussed the idea of making sure we had what +we called ‘boots on the ground.’ That if you’re gonna go to war, then +you’ve gotta go to war with all your assets.” + +The president says he wanted to “fight and win a guerilla war with +conventional means.” + +It was an innovative but risky idea being proposed by CIA Director +George Tenent. Tenent wanted to combine American technology and +intelligence with the brute force of Afghan fighters hostile to the +Taliban government. + +Secretary of State Colin Powell, noting that the CIA had already +developed a long relationship with the Afghan resistance, called it an +unconventional solution to an unconventional problem. + +“As I like to describe it to my friends,” Powell says, “we had on the +ground a Fourth World army riding horses and living in tents with some +CIA and special forces with them and we had a First World air force, the +best in the world. How do you connect it all?” + +The president gave them 48 hours to figure it out. + +Meanwhile, Mr. Bush went to the battlefield himself. Just the day +before, he had called the Pentagon the “mightiest building in the +world.” Now one-fifth of it was in ruins. The wreckage of American +Flight 77 was being examined by Navy investigators. And before Mr. Bush +left, he made a point of speaking personally with the team recovering +the remains of the first casualties of war on his watch. +The next day, Sept. 13, there was another warning of attack that the +public never heard about. Threats had been were coming in constantly but +this one sounded credible: a large truck bomb headed to the White House. +The Secret Service wanted the president back in the bunker. + +“He wasn’t real receptive to that, to that recommendation,” remembers +Brian Stafford, director of the Secret Service. “And he ordered a +hamburger and said he was going to stay in the White House that evening +and that’s what he did.” + +The next day, would be one of the longest and the most difficult for the +president. On Friday, Sept. 14, Mr. Bush started the day with a cabinet +meeting, but he wept when he walked in and was surprised by applause. + +“He sat down, slightly overcome, for a moment but he recaptured it,” +says Powell who remembers being worried that the president might have +trouble getting through his speech at the national memorial service +later that morning. + +“And I just scribbled a little note to him,” Powell recalls, “and I +said, ‘Mr. President, I’ve learned over the years when you are going to +give a very emotional speech, watch out for certain words that will +cause you to start to tear up.’ He looked at me and he smiled and then +at the next break in the conversation he said, ‘The Secretary of State +told me not to break down at the memorial service,’ and that broke the +tension and everybody started laughing and I felt embarrassed.” + +First Lady Laura Bush was involved in planning the memorial service and +she says she wanted it to be both dignified and comforting. “I wanted +the Psalms and everything to be read to be comforting, because I think +we were a country, that needed, everyone of us, needed comforting.” + +It also stirred the mourners’ resolve, as Rice remember. “As we stood to +sing the Battle Hymn of the Republic,” she says, “you could feel the +entire congregation and I could certainly feel myself stiffen, the kind +of spine, and this deep sadness was being replaced by resolve. + +“We all felt that we still had mourning to do for our countrymen who had +been lost but that we also had a new purpose in not just avenging what +had happened to them but making certain that the world was eventually +going to be safe from this kind of attack ever again.” + +Next came a visit to ground zero. The president was not prepared for +what he encountered there. + +“You couldn’t brief me, you couldn’t brief anybody on ground zero until +you saw it," Mr. Bush says. “It was like – it was ghostly. Like you’re +having a bad dream and you’re walking through the dream.” + +The president found the scene very powerful, particularly when the men +and women at ground zero began to chant, “USA! USA!.” + +“There was a lot of bloodlust,” the president recalls. “People were, you +know, pointing their big old hands at me saying, ‘Don’t you ever forget +this, Mr. President. Don’t let us down.’ The scene was very powerful. +Very powerful.” + +When Mr. Bush tried to speak, the crowd kept shouting, “We can’t hear +you.” + +The president responded, “I can hear you. I can hear you. The rest of +the world hears you. And the people who knocked these buildings down +will hear all of us soon.” + +Mr. Bush had been in New York just a few weeks before; he’d posed with +the firemen who always stood by whenever the president’s helicopter +landed there. Now, five of the men who stood with the president in the +picture were dead – lost at ground zero. + +When the president arrived Sept. 14, Manhattan was papered with the +faces of the lost. Families, unable to believe that so many had vanished +in an instant, held onto the hope that their loved ones were just +missing. It was a place where a child comforted a grieving mother. + +At a meeting the public never saw, the president spoke with several +hundred of these families in a convention hall. + +“People said to me, ‘He’ll come out. Don’t worry, Mr. president, we’ll +see him soon. I know my loved one, he will - he’ll find a place to +survive underneath the rubble and we’ll get him out.’ I, on the other +hand had been briefed about the realities, and my job was to hug and +cry, but I remember the whole time thinking, ‘This is incredibly sad +because the loved ones won’t come out.’” + +One little boy handed the president a picture of his father in his +firefighter uniform and as he signed it, Mr. Bush remembers, he told the +boy, “Your daddy won’t believe that I was here, so you show him that +autograph.” + +It was an effort “to provide a little hope,” the president recalls. “I +still get emotional thinking about it because we’re dealing with people +who loved their dads or loved their mom, or loved their…wives who loved +their husbands. It was a tough time, you know, it was a tough time for +all of us because we were a very emotional, and I was emotional at +times. I felt, I felt the same now as I did then, which is sad. And I +still feel sad for those who grieve for their families, but through my +tears, I see opportunity.” + +The president was supposed to be with the families for about 30 minutes; +he stayed for two and a half hours. It was there he met Arlene Howard. +The body of her son, George, was among the first to be found at ground +zero. + +“I called the police department,” Howard remembers, “ and they said he +hadn’t called in for roll call and to call back in an hour and I said, +‘No, I don’t need to call back.’ If he hadn’t called in, I knew where he +was.” + +George Howard had rescued children trapped in an elevator back in 1993 +when the World Trade Center was bombed. He had been off duty that day, +and he was off duty on Sept. 11, but couldn’t stay away. The police +department gave his badge to his mother and she gave it to the president. + +“He (the president) he leaned over to talk to me,” Howard recalls. “And +he extends his sympathy to me and that’s when I asked him I’d like to +present George’s shield to him in honor of all the men and women who +were killed over there.” + +By the end of that day, Mr. Bush flew to Camp David visibly drained. + +“He was physically exhausted, he was mentally exhausted, he was +emotionally exhausted, he was spiritually exhausted,” recalls Card.. + +The next day – Saturday, Sept. 15 - Mr. Bush met members of his war +cabinet at the presidential retreat for a last decisive meeting. + +“My message is for everybody who wears the uniform – get ready. The +United States will do what it takes,” Mr. Bush told them. + +As Powell remembers it, “He was encouraging us to think boldly. He was +listening to all ideas; he was not constrained to any one idea; he +wanted to hear his advisors talk and argue and debate with each other.” + +President Bush was pleased with the progress that had been made. “On the +other hand,” he says, “I wanted to clarify plans and I went around the +room and I asked everybody what they thought ought to happen.” + +When he left that meeting on Saturday night, he still had not told the +cabinet what he was planning. + +“I wanted to just think it through,” Mr. Bush remembers. “Any time you +commit troops to harm’s way, a president must make sure that he fully +understands all the consequences and ramifications. And I wanted to just +spend some time on it alone. And did.” + +What were his reservations? + +Mr. Bush says, “Could we win? I didn’t want to be putting our troops in +there unless I was certain we could win. And I was certain we could win.” + +Nine days after the attacks on America, before a joint session of +Congress the president committed the nation to the war on terror. + +“Each of us will remember what happened that day and to whom it +happened,” Mr. Bush told the Congress and the nation. “We’ll remember +the moment the news came, where we were and what we were doing. Some +will remember an image of a fire or a story of rescue. Some will carry +memories of a face and a voice gone forever. And I will carry this. It +is the police shield of a man named George Howard, who died at the World +Trade Center trying to save others. It was given to me by his mom, +Arlene, as a proud memorial to her son. It is my reminder of lives that +ended and a task that does not end.” + +A year has passed since then, but the president says his job is still to +remind Americans of what happened and of the war that is still being +waged, a war he reminds himself of every day in the Oval Office, +literally keeping score, one terrorist at a time. + +In his desk, the president says, “I have a classified document that +might have some pictures on there, just to keep reminding me about who’s +out there, where they might be” + +And as the terrorists are captures or killed? “I might make a little +check there, yeah,” Mr. Bush admits. + +But there is no check by the name that must be on the top of that list – +Osama bin Laden. + +(CBS) A lot has happened in the year since Sept. 11. One year ago, the +president was new on the job, with little experience in foreign policy. +He had wanted to pull the military back from foreign entanglements. Now, +on his orders, U.S. forces are engaged around the globe in a war he did +not expect, in a world completely changed. In the Oval Office last week, +CBS News Correspondent Scott Pelley asked the president about Iraq, +about whether Americans are safe at home and about Osama bin Laden. +------------------------------------------------------------------------ + + +Scott Pelley: You must be frustrated, maybe angry. After a year, we +still don’t have Osama Bin Laden? + +President Bush: How do you know that? I don’t know whether Osama bin +Laden is dead or alive. I don’t know that. He’s not leading a lot of +parades. And he’s not nearly the hero that a lot of people thought he +was. This is much bigger than one person anyway. This is — we’re slowly +but surely dismantling and disrupting the al Qaeda network that, that +hates America. And we will stay on task until we complete the task. I +always knew this was a different kind of war, Scott. See, in the old +days, you measure the size and the strength of the enemy by counting his +tanks or his airplanes and his ships. This is an international manhunt. +We’re after these people one at the time. They’re killers. Period. + +Pelley: But have you won the war before you find Osama bin Laden dead or +alive? + +Mr. Bush: If he were dead, there’s somebody else to replace him. And we +would find that person. But slowly but surely, we will dismantle the al +Qaeda network. And those who sponsor them and those who harbor them. And +at the same time, hopefully lay the seeds for, the conditions necessary +so that people don’t feel like they’ve got to conduct terror to achieve +objectives. + +Pelley: Do you look back on the Afghan campaign with any doubts? +Certainly, we’ve overthrown the Taliban government. Certainly, al Qaeda +has been scattered. But some of the Taliban leaders appear to have +gotten away. And there have been many civilian casualties as well. + +Mr. Bush: Uh huh. Well, you know, I am sad that civilians lost their +life. But I understand war. We did everything we can to — everything we +could to protect people. When civilians did die, it was because of a +mistake. Certainly not because of intention. We liberated a country for +which I’m extremely proud. No, — I don’t second guess things. It’s — +things never go perfect in a time of war. + +Pelley: Are you committed to ending the rule of Saddam Hussein? + +Mr. Bush: I’m committed to regime change. + +Pelley: There are those who have been vocal in their advice against war +in Iraq. Some of our allies in the Gulf War, Saudi Arabia, Turkey for +example. Even your father’s former national security advisor, Mr. +Scowcroft has written about it in the paper. What is it in your +estimation that they don’t understand about the Iraq question that you +do appreciate? + +Mr. Bush: The policy of the government is regime change, Scott, hasn’t +changed. I get all kinds of advice. I’m listening to the advice. I +appreciate the consultations. And we’ll consult with a lot of people but +our policy hasn’t changed. + +Pelley: On Air Force One you described the terrorists as evil. + +Mr. Bush: Yeah. + +Pelley: I don’t think anyone would disagree with that, but at the same +time, many in the Arab world are angry at the United States for +political reasons because of our policy in Israel or our troops in the +oil region of the Middle East. Is there any change in foreign policy +that you’re considering that might reduce Arab anger against the United +States. + +Mr. Bush: Hmm. Well, I’m working for peace in the Middle East. I’m the +first president that ever went to the United Nations and publicly +declared the need to have a Palestinian state living side-by-side with +Israel in peace. I’ve made it clear that in order for there to be peace +the Palestinians have gotta to get some leadership that renounces terror +and believes in peaces and quits using the Palestinian people as pawns. +I've also made it clear to the other Arab nations in the region that +they’ve got responsibilities. If you want peace they gotta work toward +it. We’re more than willing to work for it, but they have to work for it +as well. But all this business isn’t going to happen as long as a few +are willing to blow up the hopes of many. So we all gotta work to fight +off terror. + +Pelley: Arafat has to go? + +Mr. Bush: Either, he’s, he’s been a complete failure as far as I am +concerned. Utter disappointment. + +Pelley: There has been some concern over the year about civil liberties. + +Mr. Bush: Yeah… + +Pelley: In fact, an appeals court recently was harsh about your +administration’s decision to close certain deportation hearings. They +said, quote, “A government operating in secrecy stands in opposition to +the Constitution.” Where do you draw the line sir? + +Mr. Bush: I draw the line at the Constitution. We will protect America. +But we will do so on, within the guidelines of the Constitution, +confines of the Constitution, spirit of the Constitution. + +Pelley: Is there anything that the Justice Department has brought to you +as an idea that you’ve thought, “No, that’s too far. I don’t wanna go…" + +Mr. Bush: Nah, not that that I remember. And I am pleased with the +Justice Department. I think that Attorney General’s doing a fine job, by +the way...and to the extent that our courts are willing to make sure +that they review decisions we make, I think that’s fine. I mean, that’s +good. It’s healthy. It’s part of America. + +Pelley: Franklin Roosevelt said that America should stand in defense of +four freedoms. Freedom of speech, freedom of religion, freedom from want +and freedom from fear. Do we have that today Mr. President? Freedom from +fear? + +Mr. Bush: I think more than we did, in retrospect. The fact that we are +on alert, the fact that we understand the new circumstances makes us +more free from fear than on that fateful day of September the 11th. +We’ve got more work to do. + +Pelley: And Americans should not live their lives in fear? + +Mr. Bush: I don’t think so. No. I think Americans oughta know their +government’s doing everything possible to help. And obviously if we get +information that relates directly a particular attack we’ll deal with +it. And if we get noise that deals with a general attack, we’ll alert +people. There are a lot of good folks working hard to disrupt and deny +and run down leads. And the American people need to go about their +lives. It seems like they are. + + diff --git a/Ch3/datasets/spam/easy_ham/00571.8f35c46bee6d7a238eabf207a5696b0c b/Ch3/datasets/spam/easy_ham/00571.8f35c46bee6d7a238eabf207a5696b0c new file mode 100644 index 000000000..45b794ccc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00571.8f35c46bee6d7a238eabf207a5696b0c @@ -0,0 +1,60 @@ +From fork-admin@xent.com Thu Sep 12 21:21:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 43C7E16F03 + for ; Thu, 12 Sep 2002 21:21:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 21:21:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8CJGPC12159 for ; + Thu, 12 Sep 2002 20:16:25 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D1C992940A6; Thu, 12 Sep 2002 12:13:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm1-38.sba1.netlojix.net + [207.71.218.86]) by xent.com (Postfix) with ESMTP id 7B8A429409A for + ; Thu, 12 Sep 2002 12:12:01 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id MAA07568; + Thu, 12 Sep 2002 12:22:41 -0700 +Message-Id: <200209121922.MAA07568@maltesecat> +To: fork@spamassassin.taint.org +Subject: dylsexics of the wrold, untie! +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 12 Sep 2002 12:22:40 -0700 + + +> (and no it wasnt me even though the spellingis +> oddly familar) + +Not that this is news to FoRKs, but: + + + +> ... randomising letters in the middle of words [has] little or no +> effect on the ability of skilled readers to understand the text. This +> is easy to denmtrasote. In a pubiltacion of New Scnieitst you could +> ramdinose all the letetrs, keipeng the first two and last two the same, +> and reibadailty would hadrly be aftcfeed. My ansaylis did not come +> to much beucase the thoery at the time was for shape and senqeuce +> retigcionon. Saberi's work sugsegts we may have some pofrweul palrlael +> prsooscers at work. The resaon for this is suerly that idnetiyfing +> coentnt by paarllel prseocsing speeds up regnicoiton. We only need +> the first and last two letetrs to spot chganes in meniang. + +-Dave + + diff --git a/Ch3/datasets/spam/easy_ham/00572.c406ac5bc5c42bedbce48f5661d29976 b/Ch3/datasets/spam/easy_ham/00572.c406ac5bc5c42bedbce48f5661d29976 new file mode 100644 index 000000000..21f4331c2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00572.c406ac5bc5c42bedbce48f5661d29976 @@ -0,0 +1,73 @@ +From fork-admin@xent.com Thu Sep 12 21:21:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D73B916F03 + for ; Thu, 12 Sep 2002 21:21:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 21:21:40 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8CJZNC12728 for ; + Thu, 12 Sep 2002 20:35:24 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E7FB02940D4; Thu, 12 Sep 2002 12:32:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from relay.pair.com (relay1.pair.com [209.68.1.20]) by xent.com + (Postfix) with SMTP id D4B1629409A for ; Thu, + 12 Sep 2002 12:31:22 -0700 (PDT) +Received: (qmail 26030 invoked from network); 12 Sep 2002 19:34:21 -0000 +Received: from adsl-67-119-24-40.dsl.snfc21.pacbell.net (HELO golden) + (67.119.24.40) by relay1.pair.com with SMTP; 12 Sep 2002 19:34:21 -0000 +X-Pair-Authenticated: 67.119.24.40 +Message-Id: <011501c25a93$63a70de0$640a000a@golden> +From: "Gordon Mohr" +To: +References: <200209121922.MAA07568@maltesecat> +Subject: Re: dylsexics of the wrold, untie! +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 12 Sep 2002 12:34:18 -0700 + +Dave Long writes: +> > (and no it wasnt me even though the spellingis +> > oddly familar) +> +> Not that this is news to FoRKs, but: +> +> +> +> > ... randomising letters in the middle of words [has] little or no +> > effect on the ability of skilled readers to understand the text. This +> > is easy to denmtrasote. In a pubiltacion of New Scnieitst you could +> > ramdinose all the letetrs, keipeng the first two and last two the same, +> > and reibadailty would hadrly be aftcfeed. My ansaylis did not come +> > to much beucase the thoery at the time was for shape and senqeuce +> > retigcionon. Saberi's work sugsegts we may have some pofrweul palrlael +> > prsooscers at work. The resaon for this is suerly that idnetiyfing +> > coentnt by paarllel prseocsing speeds up regnicoiton. We only need +> > the first and last two letetrs to spot chganes in meniang. + +Hmm, there's probably a patentable input-method for +touch-tone keypads in there somewhere. + +- Gordon + + diff --git a/Ch3/datasets/spam/easy_ham/00573.f36b8bb4af93f6b0736e7475eb6cbcba b/Ch3/datasets/spam/easy_ham/00573.f36b8bb4af93f6b0736e7475eb6cbcba new file mode 100644 index 000000000..b48e629c3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00573.f36b8bb4af93f6b0736e7475eb6cbcba @@ -0,0 +1,80 @@ +From fork-admin@xent.com Thu Sep 12 21:21:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6BC0416F03 + for ; Thu, 12 Sep 2002 21:21:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 21:21:42 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8CJhOC12964 for ; + Thu, 12 Sep 2002 20:43:24 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AA9402940E9; Thu, 12 Sep 2002 12:40:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id AE5D229409A for ; + Thu, 12 Sep 2002 12:39:34 -0700 (PDT) +Received: (qmail 64339 invoked by uid 19621); 12 Sep 2002 19:41:15 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 12 Sep 2002 19:41:15 -0000 +Subject: Re: dylsexics of the wrold, untie! +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: <200209121922.MAA07568@maltesecat> +References: <200209121922.MAA07568@maltesecat> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1031860743.14237.42.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 12 Sep 2002 12:59:03 -0700 + +On Thu, 2002-09-12 at 12:22, Dave Long wrote: +> +> +> > ... randomising letters in the middle of words [has] little or no +> > effect on the ability of skilled readers to understand the text. This +> > is easy to denmtrasote. In a pubiltacion of New Scnieitst you could +> > ramdinose all the letetrs, keipeng the first two and last two the same, +> > and reibadailty would hadrly be aftcfeed. My ansaylis did not come +> > to much beucase the thoery at the time was for shape and senqeuce +> > retigcionon. Saberi's work sugsegts we may have some pofrweul palrlael +> > prsooscers at work. The resaon for this is suerly that idnetiyfing +> > coentnt by paarllel prseocsing speeds up regnicoiton. We only need +> > the first and last two letetrs to spot chganes in meniang. + + +I'm working with an experimental text recognition/processing engine that +exhibits similar characteristics. It can read right through +misspellings like the above without any difficulty. And as the author +above suggested, the pattern matching is inherently parallel internally. + +If the text recognition algorithm/architecture humans use is anything +like the algorithm/structure we've been working with, the reason the +first letter (and to a lesser extent, the last letter) is important is +that without it the text pattern recognition problem is exponentially +more difficult (from a theoretical standpoint anyway) and has to be +resolved using deeper abstraction analysis. The middle letters are far +less important and computationally much easier to resolve correctly. + +Cheers, + +-James Rogers + jamesr@best.com + + diff --git a/Ch3/datasets/spam/easy_ham/00574.6c736036ab8317e753dae53ef19123e9 b/Ch3/datasets/spam/easy_ham/00574.6c736036ab8317e753dae53ef19123e9 new file mode 100644 index 000000000..3d480bf1f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00574.6c736036ab8317e753dae53ef19123e9 @@ -0,0 +1,58 @@ +From fork-admin@xent.com Thu Sep 12 21:21:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2283616F03 + for ; Thu, 12 Sep 2002 21:21:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 21:21:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8CJm8C13051 for ; + Thu, 12 Sep 2002 20:48:09 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8D1932940F5; Thu, 12 Sep 2002 12:41:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 4C18429409A for ; + Thu, 12 Sep 2002 12:40:02 -0700 (PDT) +Received: (qmail 8253 invoked from network); 12 Sep 2002 19:43:02 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 12 Sep 2002 19:43:02 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 841E21C0A9; + Thu, 12 Sep 2002 15:43:00 -0400 (EDT) +To: Dave Long +Cc: fork@spamassassin.taint.org +Subject: Re: dylsexics of the wrold, untie! +References: <200209121922.MAA07568@maltesecat> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 12 Sep 2002 15:43:00 -0400 + + +So much for carnivore ;) + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00575.c4b32c1dc29245ce6298f5abf2f0b085 b/Ch3/datasets/spam/easy_ham/00575.c4b32c1dc29245ce6298f5abf2f0b085 new file mode 100644 index 000000000..5753a25f2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00575.c4b32c1dc29245ce6298f5abf2f0b085 @@ -0,0 +1,54 @@ +From fork-admin@xent.com Thu Sep 12 21:21:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 757FA16F03 + for ; Thu, 12 Sep 2002 21:21:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 21:21:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8CK2NC13516 for ; + Thu, 12 Sep 2002 21:02:23 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 472FD2940F2; Thu, 12 Sep 2002 12:59:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 9146329409A for ; Thu, + 12 Sep 2002 12:58:47 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 90C683EDE2; + Thu, 12 Sep 2002 16:05:31 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 8F34E3EDD2; Thu, 12 Sep 2002 16:05:31 -0400 (EDT) +From: Tom +To: Gary Lawrence Murphy +Cc: Dave Long , +Subject: Re: dylsexics of the wrold, untie! +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 12 Sep 2002 16:05:28 -0400 (EDT) + +On 12 Sep 2002, Gary Lawrence Murphy wrote: + +--] +--]So much for carnivore ;) + +Yep, that ws the plan all alng with my typos, I am the only one to be +consistently fighting the evls of da vore. + + + diff --git a/Ch3/datasets/spam/easy_ham/00576.36892439c0a6bdd5b4231b639b639399 b/Ch3/datasets/spam/easy_ham/00576.36892439c0a6bdd5b4231b639b639399 new file mode 100644 index 000000000..b26a8a328 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00576.36892439c0a6bdd5b4231b639b639399 @@ -0,0 +1,65 @@ +From fork-admin@xent.com Thu Sep 12 21:21:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D729D16F03 + for ; Thu, 12 Sep 2002 21:21:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 21:21:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8CKAeC13786 for ; + Thu, 12 Sep 2002 21:10:42 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 292C1294178; Thu, 12 Sep 2002 13:07:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 345EC29409A for + ; Thu, 12 Sep 2002 13:06:28 -0700 (PDT) +Received: (qmail 26088 invoked by uid 508); 12 Sep 2002 20:08:53 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.9) by + venus.phpwebhosting.com with SMTP; 12 Sep 2002 20:08:53 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8CK8l805874; Thu, 12 Sep 2002 22:08:47 + +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: Tom +Cc: Gary Lawrence Murphy , + Dave Long , +Subject: Re: dylsexics of the wrold, untie! +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 12 Sep 2002 22:08:47 +0200 (CEST) + +On Thu, 12 Sep 2002, Tom wrote: + +> Yep, that ws the plan all alng with my typos, I am the only one to be +> consistently fighting the evls of da vore. + +Well, yeah, but there's an easier way. + + http://www.google.com/search?hl=en&lr=&ie=UTF-8&oe=UTF-8&q=STARTTLS&spell=1 + +There's still MITM, but it requires a far higher capability, and is easier +to detect once you go beyond the scamed interaction of two parties, since +being manipulative in principle. + +If you run your own mailserver, or have a say in what your host does, make +him adopt STARTTLS. + + diff --git a/Ch3/datasets/spam/easy_ham/00577.8f3db8ab8b69d38bddf8e5a91b353da2 b/Ch3/datasets/spam/easy_ham/00577.8f3db8ab8b69d38bddf8e5a91b353da2 new file mode 100644 index 000000000..6c3b17f29 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00577.8f3db8ab8b69d38bddf8e5a91b353da2 @@ -0,0 +1,63 @@ +From fork-admin@xent.com Fri Sep 13 13:37:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B297916F03 + for ; Fri, 13 Sep 2002 13:37:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 13:37:24 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8CKYhC14626 for ; + Thu, 12 Sep 2002 21:34:46 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0D3A82940E5; Thu, 12 Sep 2002 13:31:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id D38FF29409A for ; + Thu, 12 Sep 2002 13:30:29 -0700 (PDT) +Received: from sashimi (dmz-firewall [206.199.198.4]) by Boron.MeepZor.Com + (8.11.6/8.11.6) with SMTP id g8CKXVO32620 for ; + Thu, 12 Sep 2002 16:33:31 -0400 +From: "Bill Stoddard" +To: "Fork@Xent.Com" +Subject: RE: dylsexics of the wrold, untie! +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <1031860743.14237.42.camel@avalon> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 12 Sep 2002 16:32:52 -0400 + +> If the text recognition algorithm/architecture humans use is anything +> like the algorithm/structure we've been working with, the reason the +> first letter (and to a lesser extent, the last letter) is important is +> that without it the text pattern recognition problem is exponentially +> more difficult (from a theoretical standpoint anyway) and has to be +> resolved using deeper abstraction analysis. The middle letters are far +> less important and computationally much easier to resolve correctly. + +I think keeping the number of middle letters consistent with the correct +spelling is important. Would be interesting to see if this same effect is +applicable to written forms of other languages, maybe even Japanese romongi. + +Bill + + diff --git a/Ch3/datasets/spam/easy_ham/00578.8c710aa944374d631b9969a806e32a30 b/Ch3/datasets/spam/easy_ham/00578.8c710aa944374d631b9969a806e32a30 new file mode 100644 index 000000000..66ca5f69c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00578.8c710aa944374d631b9969a806e32a30 @@ -0,0 +1,75 @@ +From fork-admin@xent.com Fri Sep 13 13:37:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C2C2316F16 + for ; Fri, 13 Sep 2002 13:37:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 13:37:26 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8CNsQC20509 for ; + Fri, 13 Sep 2002 00:54:27 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A31B02940D3; Thu, 12 Sep 2002 16:51:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from web13003.mail.yahoo.com (web13003.mail.yahoo.com + [216.136.174.13]) by xent.com (Postfix) with SMTP id 5696629409A for + ; Thu, 12 Sep 2002 16:50:13 -0700 (PDT) +Message-Id: <20020912235313.4003.qmail@web13003.mail.yahoo.com> +Received: from [67.114.193.54] by web13003.mail.yahoo.com via HTTP; + Thu, 12 Sep 2002 16:53:13 PDT +From: Michael Watson +Subject: Re: From salon.com - Forbidden thoughts about 9/11 +To: Chris Haun +Cc: fork@spamassassin.taint.org +In-Reply-To: +MIME-Version: 1.0 +Content-Type: multipart/alternative; boundary="0-1051763016-1031874793=:3397" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 12 Sep 2002 16:53:13 -0700 (PDT) + +--0-1051763016-1031874793=:3397 +Content-Type: text/plain; charset=us-ascii + + +I am delurking to comment on the Salon article. I just wanted to say that I am grateful they choose not to publish my forbidden thought. I sent it in a couple of days before the 9/11 commeration. If I had just watched the sentimental network and cable shows on 9/11 my cynical thoughts would have remain unchanged. However, I watch the Frontline show "Faith and Doubt at Ground Zero" on PBS. That show tackled head on, with much more courage than I have seen elsewhere, the larger questions about good and evil, about art as an alternate religion (Karlheinz Stockhausen -- 9/11 was a great work of art), and especially the question about how religion has a darker side which when carried to fanatic extremes tends to negate the humanity of the non-believers. +I am not a religious person but I stunned at the scope of this program. It talked about the Lutheran minister who spoke at Yankees Stadium on a podium with other religious leaders present who was charged with heresy by his own church for promoting the idea that all religions are equal (presumably the Lutherans have the one true path?). +Thanks for listening, I just felt like I needed to put the word out about this program. My shallow comment on Salon and others like it (my boyfriend and I had sex while the towers collapsed) gives me pause about how some of us tend to harden ourselves to the suffering of others. +Mike + Chris Haun wrote:i though this was all rather interesting, first bit of 9/11 coverage that +i've liked. + +http://www.salon.com/mwt/feature/2002/09/11/forbidden_letters/index.html + +Chris + + + +--------------------------------- +Do you Yahoo!? +Yahoo! News - Today's headlines +--0-1051763016-1031874793=:3397 +Content-Type: text/html; charset=us-ascii + +

I am delurking to comment on the Salon article. I just wanted to say that I am grateful they choose not to publish my forbidden thought. I sent it in a couple of days before the 9/11 commeration. If I had just watched the sentimental network and cable shows on 9/11 my cynical thoughts would have remain unchanged. However, I watch the Frontline show "Faith and Doubt at Ground Zero" on PBS. That show tackled head on, with much more courage than I have seen elsewhere, the larger questions about good and evil, about art as an alternate religion (Karlheinz Stockhausen -- 9/11 was a great work of art), and especially the question about how religion has a darker side which when carried to fanatic extremes tends to negate the humanity of the non-believers. +

I am not a religious person but I stunned at the scope of this program. It talked about the Lutheran minister who spoke at Yankees Stadium on a podium with other religious leaders present who was charged with heresy by his own church for promoting the idea that all religions are equal (presumably the Lutherans have the one true path?). +

Thanks for listening, I just felt like I needed to put the word out about this program. My shallow comment on Salon and others like it (my boyfriend and I had sex while the towers collapsed) gives me pause about how some of us tend to harden ourselves to the suffering of others. +

Mike +

 Chris Haun wrote: +

i though this was all rather interesting, first bit of 9/11 coverage that
i've liked.

http://www.salon.com/mwt/feature/2002/09/11/forbidden_letters/index.html

Chris



Do you Yahoo!?
+Yahoo! News - Today's headlines +--0-1051763016-1031874793=:3397-- + + diff --git a/Ch3/datasets/spam/easy_ham/00579.566d8e05220571bff1c2f392a1c7bf41 b/Ch3/datasets/spam/easy_ham/00579.566d8e05220571bff1c2f392a1c7bf41 new file mode 100644 index 000000000..b7da91a4f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00579.566d8e05220571bff1c2f392a1c7bf41 @@ -0,0 +1,94 @@ +From fork-admin@xent.com Fri Sep 13 20:45:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 76A6B16F03 + for ; Fri, 13 Sep 2002 20:45:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 20:45:03 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8DIVRC30305 for ; + Fri, 13 Sep 2002 19:31:28 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4ECE72940AC; Fri, 13 Sep 2002 11:28:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm7-33.sba1.netlojix.net + [207.71.222.129]) by xent.com (Postfix) with ESMTP id BEF5429409A for + ; Fri, 13 Sep 2002 11:27:37 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id LAA15344; + Fri, 13 Sep 2002 11:38:22 -0700 +Message-Id: <200209131838.LAA15344@maltesecat> +To: fork@spamassassin.taint.org +Subject: plate tectonics update +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 11:38:21 -0700 + + + +When we were discussing Kuhn, I wrote: + + +> My understanding of the history of +> plate tectonics is that the magnetic +> reversal patterns encoded in seafloor +> basalts were crucial supporting data +> which suddenly became available only +> after Navy declassification, so the +> adoption curve may be skewed. + +Many of the essays in Oreskes' _Plate +Tectonics_ seem to support this idea: + +Sandwell, "Plate Tectonics: A Martian View" +> In this essay, I'll describe a few of the important confirmations of +> plate tectonic theory provided by satellites and ships. These tools +> were largely developed to support the Cold War effort, and many are +> labeled geodetic since they are used to make precise measurements +> of the size and shape of the earth and the spatial variations in the +> pull of gravity. The tools of satellite geodesy are needed for all +> aspects of global warfare; precise satellite tracking and gravity +> field development are needed for precision satellite surveillance +> as well as for targeting ballistic missiles; the global positioning +> system is used in all aspects of modern warfare; radar altimetery is +> used or aiming submarine-launched ballistic missiles as well as for +> inertial navigation when submerged. +> +> The global seismic networks were developed, primarily, to monitor +> underground nuclear tests. Marine magnetometers were developed, +> primarily, for detection of submarines. Multibeam sea floor mapping +> systems were developed, primarily, for surveying critical and +> operational areas of the northern oceans. + +... and the Navy was in no hurry +to declassify any of these data, +as any uneven coverage could have +revealed the parts of the oceans +they found most interesting. + +-Dave + +(What do our seismic networks say +about the middle east? I hazily +recall a story about LA reporters +asking their local geophysicists +about an early morning quake, to +be told that, as far as could be +figured, the "epicenter" was at a +negative depth, travelling near +mach speed, and presumably headed +towards Edwards) + + diff --git a/Ch3/datasets/spam/easy_ham/00580.41f4f9793351fe7c7d3abe77cedc5528 b/Ch3/datasets/spam/easy_ham/00580.41f4f9793351fe7c7d3abe77cedc5528 new file mode 100644 index 000000000..7fdbb2530 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00580.41f4f9793351fe7c7d3abe77cedc5528 @@ -0,0 +1,74 @@ +From fork-admin@xent.com Fri Sep 13 20:45:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 26AB416F16 + for ; Fri, 13 Sep 2002 20:45:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 20:45:05 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8DJ5PC31289 for ; + Fri, 13 Sep 2002 20:05:26 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4E9812940B3; Fri, 13 Sep 2002 12:02:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm2-6.sba1.netlojix.net + [207.71.218.102]) by xent.com (Postfix) with ESMTP id 4537D29409A for + ; Fri, 13 Sep 2002 12:01:42 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id MAA16027; + Fri, 13 Sep 2002 12:12:23 -0700 +Message-Id: <200209131912.MAA16027@maltesecat> +To: fork@spamassassin.taint.org +Subject: Re: dylsexics of the wrold, untie! +In-Reply-To: Message from fork-request@xent.com of + "Fri, 13 Sep 2002 06:26:17 PDT." + <20020913132617.9935.12598.Mailman@lair.xent.com> +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 12:12:23 -0700 + + + +> I think keeping the number of middle letters consistent with the correct +> spelling is important. + +Aeftr tinryg it out on my lacol daciinorty, +the worst I cloud find were teilprs, and of +tehm the most cfinnosug seeemd to be: + + parental paternal prenatal + +as cenotxt wloud be mcuh more sacfgiiinnt +with the rest, scuh as: + + bakers beakers breaks + +98% of the 45k wdors were uinque. + +-Dave + +1. romaji, or european languages which +tend to end in vowels, would presumably +work better with attention on the ending +syllable (or at least consonant sound) + +2. are typos a larger or smaller space? +I had a whoromatic proggy that scattered +transpositions at hazard where the hands +alternated quickly; that would be a much +smaller space -- but transposing/eliding +spaces might make for a much larger one. + + diff --git a/Ch3/datasets/spam/easy_ham/00581.9922b0f34aa8f51fb4adf4bf4ecf1464 b/Ch3/datasets/spam/easy_ham/00581.9922b0f34aa8f51fb4adf4bf4ecf1464 new file mode 100644 index 000000000..aaa60382c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00581.9922b0f34aa8f51fb4adf4bf4ecf1464 @@ -0,0 +1,139 @@ +From fork-admin@xent.com Fri Sep 13 20:45:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 944DB16F03 + for ; Fri, 13 Sep 2002 20:45:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 20:45:06 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8DJfQC32333 for ; + Fri, 13 Sep 2002 20:41:27 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 22DED2940DF; Fri, 13 Sep 2002 12:38:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hughes-fe01.direcway.com (hughes-fe01.direcway.com + [66.82.20.91]) by xent.com (Postfix) with ESMTP id 0306B29409A for + ; Fri, 13 Sep 2002 12:37:33 -0700 (PDT) +Received: from spinnaker ([64.157.32.1]) by hughes-fe01.direcway.com + (InterMail vK.4.04.00.00 201-232-137 license + dcc4e84cb8fc01ca8f8654c982ec8526) with ESMTP id + <20020913194106.BWPD670.hughes-fe01@spinnaker> for ; + Fri, 13 Sep 2002 15:41:06 -0400 +Subject: Re: The Big Jump +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +From: Chuck Murcko +To: fork@spamassassin.taint.org +In-Reply-To: <3D7CE662.9040000@permafrost.net> +Message-Id: +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 12:40:23 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8DJfQC32333 + +The USAF had a program in the 1959-1960 in which successful free jumps +were made from balloons at up to ~32 km (100,000 ft.). The relevance was +astronauts and SR-71 bailouts. This would top that achievement +comfortably. + +http://www.wpafb.af.mil/museum/history/postwwii/pe.htm + +Chuck + +On Monday, September 9, 2002, at 11:20 AM, Owen Byrne wrote: + +> John Hall wrote: +> +>> Why so fast? Normal terminal velocity is much slower. +>> +> Not at 40,000 m. I found this article +> (http://www.wired.com/news/print/0,1294,53928,00.html) : +> +> "The last person to try to break the highest free fall record died in +> the attempt. In 1965, New Jersey truck driver Nick Piantanida suffered +> catastrophic equipment failure when his facemask blew out at 57,000 +> feet. Lack of oxygen caused such severe brain damage that he went into +> a coma and died four months later." +> +> And in amongst the flash at +> http://www.legrandsaut.org/site_en/ +> +> you can discover that he will break the sound barrier at 35,000 m, +> presumably reaching top speed somewhere above 30,000. +> +> Owen +> +>> +>>> -----Original Message----- +>>> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +>>> bitbitch@magnesium.net +>>> Sent: Sunday, September 08, 2002 8:36 AM +>>> To: (Robert Harley) +>>> Cc: fork@spamassassin.taint.org +>>> Subject: Re: The Big Jump +>>> +>>> +>>> +>>> So uh, would this qualify for the Darwin awards if he doesn't make it? +>>> +>>> Freaking french people... +>>> :-) +>>> -BB +>>> RH> Today a French officer called Michel Fournier is supposed to get +>>> +>> in a +>> +>>> RH> 350-metre tall helium balloon, ride it up to the edge of space (40 +>>> +>> km +>> +>>> RH> altitude) and jump out. His fall should last 6.5 minutes and +>>> +>> reach +>> +>>> RH> speeds of Mach 1.5. He hopes to open his parachute manually at +>>> +>> the +>> +>>> RH> end, although with an automatic backup if he is 7 seconds from the +>>> RH> ground and still hasn't opened it. +>>> +>>> RH> R +>>> +>>> RH> ObQuote: +>>> RH> "Vederò, si averò si grossi li coglioni, come ha il re di +>>> +>> Franza." +>> +>>> RH> ("Let's see if I've got as much balls as the King of France!") +>>> RH> - Pope Julius II, 2 January 1511 +>>> +>>> +>>> +>>> -- +>>> Best regards, +>>> bitbitch mailto:bitbitch@magnesium.net +>>> +>> +>> +>> +> +> +> + + diff --git a/Ch3/datasets/spam/easy_ham/00582.25153a03da1710fd133d6ff373d612d3 b/Ch3/datasets/spam/easy_ham/00582.25153a03da1710fd133d6ff373d612d3 new file mode 100644 index 000000000..bc71bd24c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00582.25153a03da1710fd133d6ff373d612d3 @@ -0,0 +1,60 @@ +From fork-admin@xent.com Sat Sep 14 16:17:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D5B2F16F16 + for ; Sat, 14 Sep 2002 16:17:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 14 Sep 2002 16:17:01 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8EEVRC06592 for ; + Sat, 14 Sep 2002 15:31:28 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id F23252940C2; Sat, 14 Sep 2002 07:28:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta6.snfc21.pbi.net (mta6.snfc21.pbi.net [206.13.28.240]) + by xent.com (Postfix) with ESMTP id E6A3629409A for ; + Sat, 14 Sep 2002 07:27:13 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta6.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H2F005SJMYJWD@mta6.snfc21.pbi.net> for fork@xent.com; Sat, + 14 Sep 2002 07:30:20 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: introductions +To: FoRK +Reply-To: gbolcer@endeavors.com +Message-Id: <3D8345B0.85F424CF@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 14 Sep 2002 07:20:32 -0700 + +As I've had to resubscribe to fork and fork-noarchive, +I guess I have to reintroduce myself. I'm formerly +known as gbolcer at endtech dot com to the FoRK +mailman program, formerly an overposter, and love +soaking up bits through avid reading or scanning +of almost every single list that's got informative to say. + +Hopefully all those overpost will get cleared out at +somepoint and fork-archived. + +Greg + + diff --git a/Ch3/datasets/spam/easy_ham/00583.7db5166f3ec5a8bcf81bf1b639b48361 b/Ch3/datasets/spam/easy_ham/00583.7db5166f3ec5a8bcf81bf1b639b48361 new file mode 100644 index 000000000..680ed70c5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00583.7db5166f3ec5a8bcf81bf1b639b48361 @@ -0,0 +1,167 @@ +From fork-admin@xent.com Mon Sep 16 10:42:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A99B116F03 + for ; Mon, 16 Sep 2002 10:42:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 10:42:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8G1HYC07158 for ; + Mon, 16 Sep 2002 02:17:35 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8A9D12940AA; Sun, 15 Sep 2002 18:14:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.lig.net (unknown [204.248.145.126]) by xent.com + (Postfix) with ESMTP id 92B8829409A for ; Sun, + 15 Sep 2002 18:13:06 -0700 (PDT) +Received: from lig.net (unknown [66.95.227.18]) by mail.lig.net (Postfix) + with ESMTP id 5E531680F6; Sun, 15 Sep 2002 21:17:04 -0400 (EDT) +Message-Id: <3D85326C.7010801@lig.net> +From: "Stephen D. Williams" +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0rc2) + Gecko/20020512 Netscape/7.0b1 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: fork@spamassassin.taint.org, lea@lig.net +Subject: Slaughter in the Name of God +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 8bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 15 Sep 2002 21:22:52 -0400 + +An old Indian friend forwarded this to me a while ago. + +http://www.washingtonpost.com/ac2/wp-dyn?pagename=article&node=&contentId=A58173-2002Mar7¬Found=true + +Slaughter in the Name of God +By Salman Rushdie +Friday, March 8, 2002; Page A33 Washington Post + +The defining image of the week, for me, is of a small child's burned and +blackened arm, its tiny fingers curled into a fist, protruding from the +remains of a human bonfire in Ahmadabad, Gujarat, in India. The murder +of children is something of an Indian specialty. The routine daily +killings of unwanted girl babies . . . the massacre of innocents in +Nellie, Assam, in the 1980s when village turned against neighboring +village . . . the massacre of Sikh children in Delhi during the +horrifying reprisal murders that followed Indira Gandhi's assassination: +They bear witness to our particular gift, always most dazzlingly in +evidence at times of religious unrest, for dousing our children in +kerosene and setting them alight, or cutting their throats, or +smothering them or just clubbing them to death with a good strong length +of wood. + +I say "our" because I write as an Indian man, born and bred, who loves +India deeply and knows that what one of us does today, any of us is +potentially capable of doing tomorrow. If I take pride in India's +strengths, then India's sins must be mine as well. Do I sound angry? +Good. Ashamed and disgusted? I certainly hope so. Because, as India +undergoes its worst bout of Hindu-Muslim bloodletting in more than a +decade, many people have not been sounding anything like angry, ashamed +or disgusted enough. Police chiefs have been excusing their men's +unwillingness to defend the citizens of India, without regard to +religion, by saying that these men have feelings too and are subject to +the same sentiments as the nation in general. + +Meanwhile, India's political masters have been tut-tutting and offering +the usual soothing lies about the situation being brought under control. +(It has escaped nobody's notice that the ruling party, the Bharatiya +Janata Party (BJP), or Indian People's Party, and the Hindu extremists +of the Vishwa Hindu Parishad (VHP), or World Hindu Council, are sister +organizations and offshoots of the same parent body.) Even some +international commentators, such as Britain's Independent newspaper, +urge us to "beware excess pessimism." + +The horrible truth about communal slaughter in India is that we're used +to it. It happens every so often; then it dies down. That's how life is, +folks. Most of the time India is the world's largest secular democracy; +and if, once in a while, it lets off a little crazy religious steam, we +mustn't let that distort the picture. + +Of course, there are political explanations. Ever since December 1992, +when a VHP mob demolished a 400-year-old Muslim mosque in Ayodhya, which +they claim was built on the sacred birthplace of the god Ram, Hindu +fanatics have been looking for this fight. The pity of it is that some +Muslims were ready to give it to them. Their murderous attack on the +train-load of VHP activists at Godhra (with its awful, atavistic echoes +of the killings of Hindus and Muslims by the train-load during the +partition riots of 1947) played right into the Hindu extremists' hands. + +The VHP has evidently tired of what it sees as the equivocations and +insufficient radicalism of India's BJP government. Prime Minister Atal +Bihari Vajpayee is more moderate than his party; he also heads a +coalition government and has been obliged to abandon much of the BJP's +more extreme Hindu nationalist rhetoric to hold the coalition together. +But it isn't working anymore. In state elections across the country, the +BJP is being trounced. This may have been the last straw for the VHP +firebrands. Why put up with the government's betrayal of their fascistic +agenda when that betrayal doesn't even result in electoral success? + +The electoral failure of the BJP is thus, in all probability, the spark +that lit the fire. The VHP is determined to build a Hindu temple on the +site of the demolished Ayodhya mosque -- that's where the Godhra dead +were coming from -- and there are, reprehensibly, idiotically, +tragically, Muslims in India equally determined to resist them. Vajpayee +has insisted that the slow Indian courts must decide the rights and +wrongs of the Ayodhya issue. The VHP is no longer prepared to wait. + +The distinguished Indian writer Mahasveta Devi, in a letter to India's +president, K. R. Narayanan, blames the Gujarat government (led by a BJP +hard-liner) as well as the central government for doing "too little too +late." She pins the blame firmly on the "motivated, well-planned out and +provocative actions" of the Hindu nationalists. But another writer, the +Nobel laureate V. S. Naipaul, speaking in India just a week before the +violence erupted, denounced India's Muslims en masse and praised the +nationalist movement. + +The murderers of Godhra must indeed be denounced, and Mahasveta Devi in +her letter demands "stern legal action" against them. But the VHP is +determined to destroy that secular democracy in which India takes such +public pride and which it does so little to protect; and by supporting +them, Naipaul makes himself a fellow traveler of fascism and disgraces +the Nobel award. + +The political discourse matters, and explains a good deal. But there's +something beneath it, something we don't want to look in the face: +namely, that in India, as elsewhere in our darkening world, religion is +the poison in the blood. Where religion intervenes, mere innocence is no +excuse. Yet we go on skating around this issue, speaking of religion in +the fashionable language of "respect." What is there to respect in any +of this, or in any of the crimes now being committed almost daily around +the world in religion's dreaded name? How well, with what fatal results, +religion erects totems, and how willing we are to kill for them! And +when we've done it often enough, the deadening of affect that results +makes it easier to do it again. + +So India's problem turns out to be the world's problem. What happened in +India has happened in God's name. The problem's name is God. + +Salman Rushdie is a novelist and author of the forthcoming essay +collection "Step Across This Line." + +© 2002 The Washington Post Company + + +sdw + +-- +sdw@lig.net http://sdw.st +Stephen D. Williams 43392 Wayside Cir,Ashburn,VA 20147-4622 +703-724-0118W 703-995-0407Fax Dec2001 + + + + diff --git a/Ch3/datasets/spam/easy_ham/00584.1994033689471c5000d715aeaaf7be24 b/Ch3/datasets/spam/easy_ham/00584.1994033689471c5000d715aeaaf7be24 new file mode 100644 index 000000000..78a48b7dd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00584.1994033689471c5000d715aeaaf7be24 @@ -0,0 +1,77 @@ +From fork-admin@xent.com Mon Sep 16 10:42:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C7E0716F03 + for ; Mon, 16 Sep 2002 10:42:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 10:42:57 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8G20WC08154 for ; + Mon, 16 Sep 2002 03:00:32 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id EDE5D2940CA; Sun, 15 Sep 2002 18:57:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 2801229409A for ; Sun, + 15 Sep 2002 18:56:21 -0700 (PDT) +Received: (qmail 5394 invoked from network); 16 Sep 2002 01:59:32 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 16 Sep 2002 01:59:32 -0000 +Reply-To: +From: "John Hall" +To: "'Stephen D. Williams'" , , + +Subject: RE: Slaughter in the Name of God +Message-Id: <000201c25d24$b3272c90$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: <3D85326C.7010801@lig.net> +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 15 Sep 2002 18:59:32 -0700 + +What I understood was that the activists on the train refused to pay for +the food and other items they acquired from the Muslim vendors -- then +taunted them. + +That may not be true, but it would put things in a more interesting +light. Taking food from a small vendor in India and not paying them is +trying to starve them. + +It sounded consistent with the ideas and purpose of the train full of +activists. + +I'm rarely an apologist for Muslims anywhere. Yet I find my sympathies +with the Muslims in this case, even after they burned the train. + + +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +> Stephen D. Williams + +> The pity of it is that some +> Muslims were ready to give it to them. Their murderous attack on the +> train-load of VHP activists at Godhra (with its awful, atavistic +echoes +> of the killings of Hindus and Muslims by the train-load during the +> partition riots of 1947) played right into the Hindu extremists' +hands. + + diff --git a/Ch3/datasets/spam/easy_ham/00585.a55a40c5fca535871d78848d27efd540 b/Ch3/datasets/spam/easy_ham/00585.a55a40c5fca535871d78848d27efd540 new file mode 100644 index 000000000..fae0ea417 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00585.a55a40c5fca535871d78848d27efd540 @@ -0,0 +1,42 @@ +From fork-admin@xent.com Mon Sep 16 15:33:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D97EA16F03 + for ; Mon, 16 Sep 2002 15:33:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 15:33:27 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8GDxYC27975 for ; + Mon, 16 Sep 2002 14:59:34 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 84CE32940A1; Mon, 16 Sep 2002 06:56:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id 9CE1329409A for ; Mon, 16 Sep 2002 06:55:39 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id 03CCEC44D; + Mon, 16 Sep 2002 15:54:31 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: Hanson's Sept 11 message in the National Review +Message-Id: <20020916135431.03CCEC44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 16 Sep 2002 15:54:31 +0200 (CEST) + +The usual crud. Why do morons ranting and beating their chests in the +National Review (or similar rags) merit FoRKing? + + diff --git a/Ch3/datasets/spam/easy_ham/00586.7ca83d6acc8e5b0e44b78a4fe8bab72c b/Ch3/datasets/spam/easy_ham/00586.7ca83d6acc8e5b0e44b78a4fe8bab72c new file mode 100644 index 000000000..159965bc6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00586.7ca83d6acc8e5b0e44b78a4fe8bab72c @@ -0,0 +1,141 @@ +From fork-admin@xent.com Tue Sep 17 11:29:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 657D616F03 + for ; Tue, 17 Sep 2002 11:29:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 11:29:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8GJJZC06421 for ; + Mon, 16 Sep 2002 20:19:36 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 97E102940CF; Mon, 16 Sep 2002 12:16:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id BEBD02940CD for ; Mon, + 16 Sep 2002 12:15:47 -0700 (PDT) +Received: (qmail 30648 invoked from network); 16 Sep 2002 19:19:01 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 16 Sep 2002 19:19:01 -0000 +Reply-To: +From: "John Hall" +To: "'Stephen D. Williams'" +Cc: , +Subject: RE: Slaughter in the Name of God +Message-Id: <003701c25db5$e9d7e860$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +In-Reply-To: <3D8628B3.1020906@hpti.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 16 Sep 2002 12:18:59 -0700 + +First, it was my understanding that they had the food before they +refused to pay. I often have the goods in my possession before I settle +the paycheck. + +Second, 'not being paid for a little food' is an awfully big deal in +India. It isn't far from stealing the only food my children have so +I'll have to watch them starve. The margin of survival is very, very, +thin. + +So yes. In my particular reality distortion field 'not paying for a +little food' in India is akin to a direct act of violence intended to +cause suffering if not death on the victims family. That such an act +triggers a violent response is, IMHO, hardly surprising. + +In other words, as far as I could tell the people on the train fired the +first shot. + +With all of that said I still don't know if this happened or not. Nor +do I know for sure that the margin of survival for those Muslim vendors +was that thin. + + +> -----Original Message----- +> From: Stephen D. Williams [mailto:swilliams@hpti.com] +> Sent: Monday, September 16, 2002 11:54 AM +> To: johnhall@evergo.net +> Cc: fork@spamassassin.taint.org; lea@lig.net +> Subject: Re: Slaughter in the Name of God +> +> Wow! It seems you are evaluating this with a large reality distortion +> field. +> +> If the activists on the train refused to pay for food, then the +vendors +> shouldn't give it to them. And the local police force should be +> arresting them. Etc. +> +> You have to be operating from a particularly primitive point of view, +> which obviously was in operation with the participants here, to think +> that religious differences or not being paid for a little food (or +> taunting!) was even a remote justification for burning a train full of +> people alive. +> +> sdw +> +> John Hall wrote: +> > What I understood was that the activists on the train refused to pay +for +> > the food and other items they acquired from the Muslim vendors -- +then +> > taunted them. +> > +> > That may not be true, but it would put things in a more interesting +> > light. Taking food from a small vendor in India and not paying them +is +> > trying to starve them. +> > +> > It sounded consistent with the ideas and purpose of the train full +of +> > activists. +> > +> > I'm rarely an apologist for Muslims anywhere. Yet I find my +sympathies +> > with the Muslims in this case, even after they burned the train. +> > +> > +> > +> >>From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +> >>Stephen D. Williams +> > +> > +> >>The pity of it is that some +> >>Muslims were ready to give it to them. Their murderous attack on the +> >>train-load of VHP activists at Godhra (with its awful, atavistic +> > +> > echoes +> > +> >>of the killings of Hindus and Muslims by the train-load during the +> >>partition riots of 1947) played right into the Hindu extremists' +> > +> > hands. +> +> sdw +> -- +> swilliams@hpti.com http://www.hpti.com +> Stephen D. Williams, Senior Technical Director +> +> + + + diff --git a/Ch3/datasets/spam/easy_ham/00587.8d78332c747a44bf017724d66bf71647 b/Ch3/datasets/spam/easy_ham/00587.8d78332c747a44bf017724d66bf71647 new file mode 100644 index 000000000..242db0f2c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00587.8d78332c747a44bf017724d66bf71647 @@ -0,0 +1,83 @@ +From fork-admin@xent.com Tue Sep 17 11:29:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DB4C516F03 + for ; Tue, 17 Sep 2002 11:29:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 11:29:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8GJhcC07013 for ; + Mon, 16 Sep 2002 20:43:39 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 89BE82940D0; Mon, 16 Sep 2002 12:40:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id B6F8B2940CD for + ; Mon, 16 Sep 2002 12:39:05 -0700 (PDT) +Received: (qmail 8446 invoked by uid 508); 16 Sep 2002 19:43:47 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (62.155.144.96) by + venus.phpwebhosting.com with SMTP; 16 Sep 2002 19:43:47 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8GJBlB15944; Mon, 16 Sep 2002 21:11:47 + +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: +Cc: Gary Lawrence Murphy , + Udhay Shankar N , Adam Rifkin , + +Subject: Re: storage bits +In-Reply-To: <3D862A52.1080502@hpti.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 16 Sep 2002 21:11:47 +0200 (CEST) + +On Mon, 16 Sep 2002, Stephen D. Williams wrote: + +> It's efficient-end, not low end. At 1Million hour MTBF, 133MB/sec, +> and pretty good buffering and speed, the only thing going for SCSI is +> 15,000 RPM vs. 7200 and in a very small number of cases, slightly +> better scatter-gather. (Actually, I think there might be a 15,000 RPM +> IDE now.) + +It's not just krpm, the desktop HDs have a higher failure rate. But I +agree, EIDE has high density, and EIDE hardware RAID can offer SCSI a +sound beating for reliability, performance, and storage density/rack units +for the money, if designed for it, and if people would actually start +buying it. + +> The other issues are pretty much non-issues: using multiple drives and +> controller contention (just use many IDE channels with extra PCI +> cards, up to 10 in some systems), and long cable runs (just split + +There are not all that many hard drives inside an 1U enclosure. Airflow +blockage (you have to fit in 2-3x the number of SCSI disks with EIDE) will +soon be a thing of the past due to SATA. + +> storage between nodes). Dual-port SCSI is also a non-issue since it +> is very expensive, doesn't work that well in practice because there +> are numerous secondary failure modes for shared disk systems, and +> because you still end up with a single point of failure. + +Since rack-space costs dominate, and our systems need more or less decent +I/O we're going with 1U Dells with SCSI. The hard drive prices don't +really make a visible difference, given the cost of the iron, and the +rackspace/month. Plus, 1U Dells don't have any space left for lots of EIDE +drives. + + diff --git a/Ch3/datasets/spam/easy_ham/00588.708ecb20113d4c80b91936cd1c86b186 b/Ch3/datasets/spam/easy_ham/00588.708ecb20113d4c80b91936cd1c86b186 new file mode 100644 index 000000000..9493694de --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00588.708ecb20113d4c80b91936cd1c86b186 @@ -0,0 +1,79 @@ +From fork-admin@xent.com Tue Sep 17 11:29:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4667316F03 + for ; Tue, 17 Sep 2002 11:29:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 11:29:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8GL4ZC09586 for ; + Mon, 16 Sep 2002 22:04:35 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 23AD52940D2; Mon, 16 Sep 2002 14:01:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 5EE0E2940CD for ; + Mon, 16 Sep 2002 14:00:40 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17r32k-00063A-00; Mon, 16 Sep 2002 17:04:31 -0400 +From: "Geege Schuman" +To: "Jim Whitehead" , "FoRK" +Subject: RE: introductions +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +In-Reply-To: +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 16 Sep 2002 17:02:29 -0400 + +the doctor wears many hats, including but not limited to a rubber skullcap +for playing water polo, a beret for making sparkling wines, and an oversized +fedora to deflect his own cigar smoke, which he regularly blows up my ... + + +geege + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of Jim +Whitehead +Sent: Monday, September 16, 2002 2:08 PM +To: FoRK +Subject: RE: introductions + + +> Aren't you Dr. Gregory A. Bolcer, Dutch Uncle of P2P? + +I thought he was Greg Bolcer, recovering XPilot & Doom junkie... + +- Jim + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00589.38f809ae603fbabb0d3f2389011e9150 b/Ch3/datasets/spam/easy_ham/00589.38f809ae603fbabb0d3f2389011e9150 new file mode 100644 index 000000000..6f1a7a83f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00589.38f809ae603fbabb0d3f2389011e9150 @@ -0,0 +1,101 @@ +From fork-admin@xent.com Tue Sep 17 11:29:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4660216F03 + for ; Tue, 17 Sep 2002 11:29:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 11:29:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8GLdYC10822 for ; + Mon, 16 Sep 2002 22:39:34 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9DDC52940CD; Mon, 16 Sep 2002 14:36:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 853882940C9 for ; Mon, + 16 Sep 2002 14:35:18 -0700 (PDT) +Received: (qmail 17526 invoked from network); 16 Sep 2002 21:38:32 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 16 Sep 2002 21:38:32 -0000 +Reply-To: +From: "John Hall" +To: +Cc: , +Subject: RE: Slaughter in the Name of God +Message-Id: <004601c25dc9$67a436a0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +In-Reply-To: <3D864AC8.60005@hpti.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 16 Sep 2002 14:38:32 -0700 + + + +> From: Stephen D. Williams [mailto:swilliams@hpti.com] + +> +> Just to further weaken the food transaction argument, I'll note that +in +> my neighborhood, the local McDonalds won't even hand you your drink in +> the drive through until you fork over the cash. + + +Maybe you never bought a hot dog from a street vendor. + +> And why is it that the margin of survival is so thin? Could it be +that +> all of these tribal rivalries are part of what's holding back +wholesale +> movement to the modern, first world patterns of constructive thinking? + +Well, yes. But it doesn't change the idea that the margin of survival +probably IS that thin in this region. + +> I'm sure that both sides were ready to be the agressor. + +I'm not. I'm sure both sides were equally ready to be the aggressor +provided they were in a predominant position of power. + +> Bush's reluctance to blast blind obeyance of religion as taught by +your +> local madrassa or KKK leader, apparently because he is fully involved +> with the general effort to expand unfettered religiosity as the +solution +> to the world's ills, is disappointing. He has spoke against madrassa, +> but what I heard sounded lame and carefully crafted to shield religion +> in general from scrutiny. + +1. Which religion and how it is currently being expressed matters. +2. The US is trying to avoid making war on the Muslim religion. +3. US Leadership remains reflexively multi-cultural. + +> We all have +> disagreements, but at some point it becomes a crime against humanity. + +I didn't say burning the train was a good thing. I said I understood it +wasn't a spontaneous attack on people who had done no wrong. + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00590.3b596d6b2e6ad9b9f5cf3593a398260b b/Ch3/datasets/spam/easy_ham/00590.3b596d6b2e6ad9b9f5cf3593a398260b new file mode 100644 index 000000000..f5f7cc5e5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00590.3b596d6b2e6ad9b9f5cf3593a398260b @@ -0,0 +1,148 @@ +From fork-admin@xent.com Tue Sep 17 11:30:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F144816F03 + for ; Tue, 17 Sep 2002 11:30:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 11:30:00 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8H2hZC23657 for ; + Tue, 17 Sep 2002 03:43:36 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2922C2940C9; Mon, 16 Sep 2002 19:40:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.lig.net (unknown [204.248.145.126]) by xent.com + (Postfix) with ESMTP id 23E8229409F for ; Mon, + 16 Sep 2002 19:39:11 -0700 (PDT) +Received: from lig.net (unknown [66.95.227.18]) by mail.lig.net (Postfix) + with ESMTP id 4FD2C681FA; Mon, 16 Sep 2002 22:43:09 -0400 (EDT) +Message-Id: <3D869694.1060906@lig.net> +From: "Stephen D. Williams" +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.1) + Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: johnhall@evergo.net +Cc: fork@spamassassin.taint.org, lea@lig.net +Subject: Re: Slaughter in the Name of God +References: <004601c25dc9$67a436a0$0200a8c0@JMHALL> +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 16 Sep 2002 22:42:28 -0400 + +John Hall wrote: + +>>From: Stephen D. Williams [mailto:swilliams@hpti.com] +>> +>> +>>Bush's reluctance to blast blind obeyance of religion as taught by +>> +>your +> +> +>>local madrassa or KKK leader, apparently because he is fully involved +>>with the general effort to expand unfettered religiosity as the +>> +>> +>solution +> +>>to the world's ills, is disappointing. He has spoke against madrassa, +>>but what I heard sounded lame and carefully crafted to shield religion +>>in general from scrutiny. +>> +>> +> +>1. Which religion and how it is currently being expressed matters. +> +A) Which religion is it that can claim no foul actions in its past? + Certainly not Christianity, Islam, etc. +B) "How it is currently being expressed" amounts to a tacit +acknowledgement that the sophistication of the society involved and +people's self-limiting reasonableness are important to avoid primitive +expression. This leads to the point that religion and less +sophisticated societies are a dangerous mix. It also tends to invoke +the image of extremes that might occur without diligent maintenance of +society. +C) Many splinter Christianity religions have 'clean hands' but they also +aren't 'found in the wild'. + +(By "primitive expression", I don't mean to slight any society, but that +there is some chronic evidence of irrational mob actions and uncivilized +behavior (killing infants, women to break religious blue laws, etc.). + The US has only really been mostly free of "primitive expression" for +40-50 years, although large categories, including serious religious +conflict, were settled quite a while ago.) + +D) The Northern Ireland Protestant vs. Catholic feud, recently more or +less concluded, is not completely unlike this kind of friction generated +by splitting society too much along religious lines. One Post article +pointed out that the problem basically stemmed from the vertical +integration of areas along religious lines all the way to schools, +government, political party, etc. (Of course both cases have a heritage +of British conquest, but who doesn't?) + +(I couldn't find the article I remember, but here are a couple of others:) +http://www.washingtonpost.com/ac2/wp-dyn?pagename=article&node=&contentId=A33761-2001Jul8¬Found=true +http://www.washingtonpost.com/ac2/wp-dyn?pagename=article&node=&contentId=A15956-2002Jul16¬Found=true + +'Northern Ireland is a British province of green valleys and +cloud-covered hills whose 1.6 million people are politically and +religiously divided. About 54 percent of the population is Protestant, +and most Protestants are unionists who want the province to remain part +of Britain. The Roman Catholic minority is predominantly republican, or +nationalist; they want to merge with the Republic of Ireland to the south. + + +In 1968, Catholic leaders launched a civil rights drive modeled on the +Rev. Martin Luther King Jr.'s campaign in the American South. But +violence quickly broke out, with ancient religious animosities fueling +the political argument. Armed paramilitary groups sprung up on both +sides. Police records and historians agree that the most lethal group by +far was the IRA, fighting on the Catholic side with a goal of a united +Ireland + +The provincial police force estimates that about 3,600 people were +killed during the 30-year conflict known, with characteristic Northern +Ireland understatement, as "The Troubles."' + +>2. The US is trying to avoid making war on the Muslim religion. +> +That's fine, as it would be an inappropriate concentration. It would be +difficult to address the issues raised here in a clean way. I'd be +happy with an acknowledgement that the connection is there. + +>3. US Leadership remains reflexively multi-cultural. +> +This is ok to a point, as long as it doesn't shy away from logical, +objective analysis of when a society could be seriously improved in +certain ways. + +>>We all have +>>disagreements, but at some point it becomes a crime against humanity. +>> +>> +> +>I didn't say burning the train was a good thing. I said I understood it +>wasn't a spontaneous attack on people who had done no wrong. +> + +True, although I don't think you were as clear originally. :-) + +sdw + + + diff --git a/Ch3/datasets/spam/easy_ham/00591.3bca4fff29ae5e89e2e2948401a24ab8 b/Ch3/datasets/spam/easy_ham/00591.3bca4fff29ae5e89e2e2948401a24ab8 new file mode 100644 index 000000000..02c2009f8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00591.3bca4fff29ae5e89e2e2948401a24ab8 @@ -0,0 +1,138 @@ +From fork-admin@xent.com Tue Sep 17 11:30:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E9F7216F03 + for ; Tue, 17 Sep 2002 11:30:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 11:30:03 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8H3BaC24508 for ; + Tue, 17 Sep 2002 04:11:37 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 52B5E2940E7; Mon, 16 Sep 2002 20:08:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 6BE8F2940E2 for ; Mon, + 16 Sep 2002 20:07:56 -0700 (PDT) +Received: (qmail 5491 invoked from network); 17 Sep 2002 03:11:11 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 17 Sep 2002 03:11:11 -0000 +Reply-To: +From: "John Hall" +To: "'Stephen D. Williams'" +Cc: , +Subject: RE: Slaughter in the Name of God +Message-Id: <002401c25df7$dfb547a0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: <3D869694.1060906@lig.net> +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 16 Sep 2002 20:11:10 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8H3BaC24508 + + +> From: Stephen D. Williams [mailto:sdw@lig.net] +> Sent: Monday, September 16, 2002 7:42 PM + +> >1. Which religion and how it is currently being expressed matters. +> > +> A) Which religion is it that can claim no foul actions in its past? +> Certainly not Christianity, Islam, etc. + +Hence the qualifier 'current'. + +> B) "How it is currently being expressed" amounts to a tacit +> acknowledgement that the sophistication of the society involved and +> people's self-limiting reasonableness are important to avoid primitive +> expression. This leads to the point that religion and less +> sophisticated societies are a dangerous mix. It also tends to invoke +> the image of extremes that might occur without diligent maintenance of +> society. + +The tacit acknowledgement and self-limiting you speak of is not a given +or a function of 'sophistication' but is primarily a feature of +(current) Western Civilization. Of course, 'sophisticated' and 'Western +Civilization' are essentially equivalent IMHO. But it need not be so. + +> D) The Northern Ireland Protestant vs. Catholic feud, recently more or +> less concluded, is not completely unlike this kind of friction +generated +> by splitting society too much along religious lines. One Post article +> pointed out that the problem basically stemmed from the vertical +> integration of areas along religious lines all the way to schools, +> government, political party, etc. (Of course both cases have a +heritage +> of British conquest, but who doesn't?) + +And sometimes the religious component is a façade for an equally +dangerous ethnic affiliation. Hindu extremism isn't about the Hindu +religious theology as far as I can see. It is a peg to hang an ethnic +identity and identity politics on. + +Muslim extremism appears to have a far greater connection to theology. + +> 'Northern Ireland is a British province of green valleys and +> cloud-covered hills whose 1.6 million people are politically and +> religiously divided. About 54 percent of the population is Protestant, +> and most Protestants are unionists who want the province to remain +part +> of Britain. The Roman Catholic minority is predominantly republican, +or +> nationalist; they want to merge with the Republic of Ireland to the +south. + +Yep, all because the Scots ate oats and starved their Irish out long +ago, while the English preferred wheat and that doesn't grow so well in +Ireland. That and the introduction of potatoes saved the Irish as +Irish. + +> That's fine, as it would be an inappropriate concentration. It would +be +> difficult to address the issues raised here in a clean way. I'd be +> happy with an acknowledgement that the connection is there. + +Oh, I think we are in a war with wide aspects of the Muslim religion. I +know it is there, but it just might not be appropriate to admit it +publicly. + +> >3. US Leadership remains reflexively multi-cultural. +> > +> This is ok to a point, as long as it doesn't shy away from logical, +> objective analysis of when a society could be seriously improved in +> certain ways. + +I didn't say this was a *good* thing. With the exception of ethnic +restaurants, I can generally be counted on to oppose anything labeled +'multi-cultural'. + +> >I didn't say burning the train was a good thing. I said I understood +it +> >wasn't a spontaneous attack on people who had done no wrong. +> > +> +> True, although I don't think you were as clear originally. :-) + +I'm sure I wasn't. + + + diff --git a/Ch3/datasets/spam/easy_ham/00592.9608ca87c212f35feae1ebde5567c0e2 b/Ch3/datasets/spam/easy_ham/00592.9608ca87c212f35feae1ebde5567c0e2 new file mode 100644 index 000000000..4209f05ad --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00592.9608ca87c212f35feae1ebde5567c0e2 @@ -0,0 +1,102 @@ +From fork-admin@xent.com Tue Sep 17 11:30:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 772D816F03 + for ; Tue, 17 Sep 2002 11:30:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 11:30:06 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8H4lZC27844 for ; + Tue, 17 Sep 2002 05:47:36 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3EA9D2940DA; Mon, 16 Sep 2002 21:44:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barry.mail.mindspring.net (barry.mail.mindspring.net + [207.69.200.25]) by xent.com (Postfix) with ESMTP id 064D129409F for + ; Mon, 16 Sep 2002 21:43:35 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + barry.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17rAG0-0000iI-00; + Tue, 17 Sep 2002 00:46:41 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: Digital Bearer Settlement List , fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: The War Prayer +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 00:43:39 -0400 + + +--- begin forwarded text + + +Date: Mon, 16 Sep 2002 14:57:27 -0700 +To: nettime-l@bbs.thing.net +From: Phil Duncan +Subject: The War Prayer +Sender: nettime-l-request@bbs.thing.net +Reply-To: Phil Duncan + +The following prayer is from a story by Mark Twain, and was quoted by Lewis +Laphan in the October issue of Harper's magazine. It occurs at the very end +of an excellent article which I recommend to you. + +In the story, an old man enters a church where the congregation has been +listening to an heroic sermon about "the glory to be won in battle by young +patriots armed with the love of God." He usurps the pulpit and prays the +following: + +"O Lord our God, help us to tear their soldiers to bloody shreads with our +shells; help us to cover their smiling fields with the pale forms of their +patriot dead; help us to drown the thunder of the guns with the shrieks of +their wounded, writhing in pain; help us to lay waste their humble homes with +a hurricane of fire; help us to wring the hearts of their unoffending widows +with unavailing grief; help us to turn them out roofless with their little +children to wander unfriended the wastes of their desolated land in rags and +hunger and thirst, sports of the sun flames in summer and the icy winds of +winter, broken in spirit, worn with travail, imploring Thee for the refuge of +the grave and denied it -- for our sakes who adore Thee, Lord, blast their +hopes, blight their lives, protract their bitter pilgrimage, make heavy their +steps, water their way with their tears, stain the white snow with the blood +of their wounded feet! We ask it, in the spirit of love, of Him Who is the +Source of Love, and Who is the ever-faithful refuge and friend of all that +are sore beset and seek His aid with humble and contrite hearts. Amen." + +Twain wrote the story, "The War Prayer," in 1905 during the American +occupation of the Philippines, but the story wasn't printed until 1923, +thirteen years after his death, because the editors thought it "unsuitable" +for publication at the time it was written. + +# distributed via : no commercial use without permission +# is a moderated mailing list for net criticism, +# collaborative text filtering and cultural politics of the nets +# more info: majordomo@bbs.thing.net and "info nettime-l" in the msg body +# archive: http://www.nettime.org contact: nettime@bbs.thing.net + +--- end forwarded text + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00593.f71a708b88b51c4d428bb3bd741ece2d b/Ch3/datasets/spam/easy_ham/00593.f71a708b88b51c4d428bb3bd741ece2d new file mode 100644 index 000000000..dcfb2a8a9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00593.f71a708b88b51c4d428bb3bd741ece2d @@ -0,0 +1,88 @@ +From fork-admin@xent.com Tue Sep 17 11:30:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8ABEC16F03 + for ; Tue, 17 Sep 2002 11:30:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 11:30:11 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8H9JaC03588 for ; + Tue, 17 Sep 2002 10:19:37 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AB2CD2940D8; Tue, 17 Sep 2002 02:16:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 7132229409F for + ; Tue, 17 Sep 2002 02:15:25 -0700 (PDT) +Received: (qmail 24536 invoked by uid 508); 17 Sep 2002 09:18:40 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.43) by + venus.phpwebhosting.com with SMTP; 17 Sep 2002 09:18:40 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8H9IXY03200; Tue, 17 Sep 2002 11:18:33 + +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: "Stephen D. Williams" +Cc: Gary Lawrence Murphy , + Udhay Shankar N , Adam Rifkin , + +Subject: Re: storage bits +In-Reply-To: <3D8684B4.7060801@lig.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 11:18:33 +0200 (CEST) + +On Mon, 16 Sep 2002, Stephen D. Williams wrote: + +> To make what work? I already pointed out that a single drive is +> comparable between IDE/SCSI. + +Alas, that's wrong. Both the drives are faster (10..15 krpm vs. ~7 krpm, +faster seek), and the EIDE protocol is ridiculously dumb (queing; +disconnect). + +> I think you're wrong with recent releases. I'll check this week. +> There's also JFS and XFS. + +None of them are production quality. Right now only ext2 and ext3 qualify. +It will take a good while (a year, or two) before we can trust anything +else. + +> >SCSI has got advantages still, particular if it comes to off-shelf +> >high-density racks. +> > +> Check out RaidZone.com. + +Have you looked inside a dual-CPU 1U Dell? Three drives are easy to get +in. Anything else would require a redesign, and would in nontrivial +thermal engineering issues. + +> A number of vendors are putting the Promise IDE hardware on the +> motherboard. All that remains is the proper drive socket. + +I can't think of a single major vendor who sells 1U systems with hardware +EIDE RAID. + +> Additionally, you can get hardware IDE raid as a pair of drive bays or +> even an IDE-IDEx2 controller that can be screwed into a 1U chassis. + +I believe you that stuff can be found, if one is looking for it. However, +I wouldn't put this into production unless I've had that system hanging in +the local rack under simulated load for a half a year. + + diff --git a/Ch3/datasets/spam/easy_ham/00594.805dae98d1ad6f99a7792418c1faccfd b/Ch3/datasets/spam/easy_ham/00594.805dae98d1ad6f99a7792418c1faccfd new file mode 100644 index 000000000..2da67fbbe --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00594.805dae98d1ad6f99a7792418c1faccfd @@ -0,0 +1,87 @@ +From fork-admin@xent.com Tue Sep 17 15:09:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E911B16F03 + for ; Tue, 17 Sep 2002 15:09:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 15:09:09 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HDlaC12241 for ; + Tue, 17 Sep 2002 14:47:37 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7D0BD2940A2; Tue, 17 Sep 2002 06:44:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta5.snfc21.pbi.net (mta5.snfc21.pbi.net [206.13.28.241]) + by xent.com (Postfix) with ESMTP id 6DA1E29409F for ; + Tue, 17 Sep 2002 06:43:06 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta5.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H2L005KI4X92S@mta5.snfc21.pbi.net> for fork@xent.com; Tue, + 17 Sep 2002 06:46:22 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: Re: introductions +To: Geege Schuman +Cc: FoRK +Reply-To: gbolcer@endeavors.com +Message-Id: <3D872FE0.651D6DD7@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +References: +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 06:36:32 -0700 + +I'd like to claim the parenthood of desktop web services, +but then there's a ton of people doing it now. + +What I am the parent of is, Jackson Alan Bolcer--I just +realized that the birth announcement was something that +didn't get sent through due to my general laziness of +being kicked off of FoRK from our stupid DNS fiasco +mixed with the post filtering. August 20th, 7lbs, 14oz, +8:30pm. + +Greg + + + +Geege Schuman wrote: +> +> Aren't you Dr. Gregory A. Bolcer, Dutch Uncle of P2P? +> +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +> Gregory Alan Bolcer +> Sent: Saturday, September 14, 2002 10:21 AM +> To: FoRK +> Subject: introductions +> +> As I've had to resubscribe to fork and fork-noarchive, +> I guess I have to reintroduce myself. I'm formerly +> known as gbolcer at endtech dot com to the FoRK +> mailman program, formerly an overposter, and love +> soaking up bits through avid reading or scanning +> of almost every single list that's got informative to say. +> +> Hopefully all those overpost will get cleared out at +> somepoint and fork-archived. +> +> Greg + + diff --git a/Ch3/datasets/spam/easy_ham/00595.7182665eb052808e2061bacbc75ed5ee b/Ch3/datasets/spam/easy_ham/00595.7182665eb052808e2061bacbc75ed5ee new file mode 100644 index 000000000..5cbd2bfc4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00595.7182665eb052808e2061bacbc75ed5ee @@ -0,0 +1,183 @@ +From fork-admin@xent.com Tue Sep 17 15:09:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 87A8516F03 + for ; Tue, 17 Sep 2002 15:09:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 15:09:17 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HE0kC12569 for ; + Tue, 17 Sep 2002 15:00:47 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2BA312940E2; Tue, 17 Sep 2002 06:57:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta7.pltn13.pbi.net (mta7.pltn13.pbi.net [64.164.98.8]) by + xent.com (Postfix) with ESMTP id 69F8129409F for ; + Tue, 17 Sep 2002 06:56:53 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta7.pltn13.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H2L0038T5K9KU@mta7.pltn13.pbi.net> for fork@xent.com; Tue, + 17 Sep 2002 07:00:10 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: Re: RSA (repost) +To: fork@spamassassin.taint.org +Reply-To: gbolcer@endeavors.com +Message-Id: <3D87331C.4AC53007@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8BIT +X-Accept-Language: en, pdf +References: +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 06:50:20 -0700 + +"Adam L. Beberg" wrote: +> +> So, who has done RSA implementation before? +> Having a typo-I-cant-spot problem with my CRT... +> +> - Adam L. "Duncan" Beberg +> http://www.mithral.com/~beberg/ +> beberg@mithral.com +> +> http://xent.com/mailman/listinfo/fork + +Done a ton of them, both with and without their +stuff. With is definitely easier.[1] + +Greg + +[1] http://www.endeavors.com/PressReleases/rsa.htm + + + + + + Endeavors Technology and RSA Security Form Strategic Partnership to + Enhance SSL Performance in Secure, Enterprise-Scalable P2P Computing + +Endeavors Technology and RSA Security combine their respective peer-to-peer Magi Enterprise +Web collaboration and RSA BSAFE® software for SSL users to instantly extend security and improve performance +of +desktop and corporate data sharing, and Web interaction between workgroups inside and across corporations. + +Irvine (CA) and Cambridge (UK), September 12, 2002 - Secure web collaboration software leader Endeavors +Technology, Inc. today +announced a technology sharing and marketing agreement with RSA Security Inc. the most trusted name in +e-security.® This strategic +partnership is aimed at extending the security and improving the performance of the standard SSL security +protocol used by every e-based +desktop, laptop and server. + +Under the terms of the agreement, RSA Security's trusted security tools are embedded into Endeavors +Technology's award-winning Magi +Enterprise software product. The combined solution enables IT managers and users to simply extend security and +encryption to every +Magi-enabled device for the direct device-to-device sharing and interaction of corporate data and workflow +between workgroups within and +beyond the enterprise. + +Secure collaboration between desktops and corporate systems calls for enterprises to build complex and costly +network infrastructures. This +combination of technologies from the two companies eliminates both overheads, and also the need for specific +security tools for each desktop +application such as Microsoft Project. With Magi's secure RSA Security-based peer environment, collaboration +can now be rapidly, easily and +securely extended across all devices and company firewalls, and workgroups can interact with colleagues, +partners and clients without concern +in compromising corporate information. This brings true Internet scaling to corporations needing to interact +highly securely with strong +encryption and authentication across firewalls. + +"In these challenging times, there can be no compromise in safeguarding corporate data and knowledge," says +Bernard Hulme, chairman and +CEO of Endeavors Technology. "Embedding RSA Security encryption software into Magi products provides IT +managers with added +assurance, speed and cost savings, and a proven security net to accelerate the deployment of business-centric +peer-to-peer computing" + +Endeavors Technology joins the RSA Secured® Partner Program. The program is designed to ensure complete +interoperability between +partner products and RSA Security's solutions including RSA SecurID® two-factor authentication, RSA +ClearTrust® Web access +management, RSA BSAFE® encryption and RSA Keon® digital certificate management. + +The strategic partnership paves the way for Magi Enterprise to bear the RSA Secured brand on product packaging +and advertising, be listed in +RSA Secured Partner Solutions directories, and have RSA Security's out-of-the-box, certified interoperability. +It will also lead to joint +marketing and promotional activities between the two firms, mutual field sales engagement opportunities on +joint accounts, and 24x7 worldwide +business continuity support. + +"Endeavors Technology is taking a leadership role by providing the highest-level of security in its enterprise +products and streamlining the +deployment process for IT managers," says Stuart Cohen, director of partner development at RSA Security. "By +combining our products, +enterprise customers have a solution that provides encryption and authentication across firewalls." + +About Magi +Magi Enterprise 3.0, an award-winning web collaboration system, transforms today's Web into a highly secure +inter- and intra-enterprise +collaboration network. For the first time, enterprises can implement ad-hoc Virtual Private Networks for +collaboration very rapidly and +affordably without disrupting existing applications, networks or work practices. Magi Enterprise 3.0 does this +by effectively transforming +unsecured, "read-only" Web networks into two-way trusted and transparent collaboration environments, through +the use of such features as +cross-firewall connections, advanced data extraction, an intuitive graphical interface, and universal name +spaces generating "follow me URLs" +for mobile professionals. + +About RSA Security, Inc. +RSA Security Inc., the most trusted name in e-security, helps organizations build secure, trusted foundations +for e-business through its RSA +SecurID two-factor authentication, RSA ClearTrust Web access management, RSA BSAFE encryption and RSA Keon +digital certificate +management product families. With approximately one billion RSA BSAFE-enabled applications in use worldwide, +more than ten million RSA +SecurID authentication users and almost 20 years of industry experience, RSA Security has the proven +leadership and innovative technology to +address the changing security needs of e-business and bring trust to the online economy. RSA Security can be +reached at +www.rsasecurity.com. + +About Endeavors Technology, Inc. +Endeavors Technology, Inc. is a wholly-owned subsidiary of mobile computing and network infrastructure vendor +Tadpole Technology plc +(www.tadpole.com), which has plants and offices in Irvine and Carlsbad (California), and Cambridge, Edinburgh, +and Bristol (UK). For further +information on Endeavors' P2P solutions, call 949-833-2800, email to p2p@endeavors.com, or visit the company's +website +www.endeavors.com. + + +Copyright 2002 Endeavors Technology, Inc. Magi, and Magi Enterprise are registered trademarks of Endeavors +Technology, Inc. RSA, BSAFE, ClearTrust, Keon, SecurID, RSA Secured and The Most +Trusted Name in e-Security are registered trademarks or trademarks of RSA Security Inc. in the United States +and/or other countries. All other products and services mentioned are trademarks of their +respective companies. + + + + © 2002 Endeavors Technology, Inc., 19600 Fairchild, Suite 350, Irvine, CA 92612, phone +949-833-2800, fax 949-833-2881, email info@endeavors.com. + All rights reserved; specifications and descriptions subject to change without +notice. + + diff --git a/Ch3/datasets/spam/easy_ham/00596.73c2473a9c778e096f3a9160d72567e9 b/Ch3/datasets/spam/easy_ham/00596.73c2473a9c778e096f3a9160d72567e9 new file mode 100644 index 000000000..4dc51b1ba --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00596.73c2473a9c778e096f3a9160d72567e9 @@ -0,0 +1,55 @@ +From fork-admin@xent.com Tue Sep 17 15:09:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 56A0F16F03 + for ; Tue, 17 Sep 2002 15:09:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 15:09:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HE7aC12891 for ; + Tue, 17 Sep 2002 15:07:37 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A15352940EC; Tue, 17 Sep 2002 07:04:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id F16B529409F for ; + Tue, 17 Sep 2002 07:03:22 -0700 (PDT) +Received: from Golux.Com (dmz-firewall [206.199.198.4]) by + Boron.MeepZor.Com (8.11.6/8.11.6) with ESMTP id g8HE6ZN18534; + Tue, 17 Sep 2002 10:06:35 -0400 +Message-Id: <3D8739C4.65DE6FEE@Golux.Com> +From: Rodent of Unusual Size +Organization: The Apache Software Foundation +X-Mailer: Mozilla 4.79 [en] (WinNT; U) +X-Accept-Language: en +MIME-Version: 1.0 +To: Flatware or Road Kill? +Subject: Harvest Moon +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 10:18:44 -0400 + +http://spineless.org/~mod/pix/octoberMoon.jpg +-- +#ken P-)} + +Ken Coar, Sanagendamgagwedweinini http://Golux.Com/coar/ +Author, developer, opinionist http://Apache-Server.Com/ + +"Millennium hand and shrimp!" + + diff --git a/Ch3/datasets/spam/easy_ham/00597.d69fd43248612845c272cc277b890e1a b/Ch3/datasets/spam/easy_ham/00597.d69fd43248612845c272cc277b890e1a new file mode 100644 index 000000000..6a296721a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00597.d69fd43248612845c272cc277b890e1a @@ -0,0 +1,135 @@ +From fork-admin@xent.com Tue Sep 17 17:22:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A560216F03 + for ; Tue, 17 Sep 2002 17:22:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 17:22:14 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HEplC14370 for ; + Tue, 17 Sep 2002 15:51:48 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BDAA62940F0; Tue, 17 Sep 2002 07:48:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id B35E729409F for ; + Tue, 17 Sep 2002 07:47:34 -0700 (PDT) +Received: (qmail 2030 invoked from network); 17 Sep 2002 14:50:50 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 17 Sep 2002 14:50:50 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 1275E1C2C4; + Tue, 17 Sep 2002 10:50:47 -0400 (EDT) +To: "Stephen D. Williams" +Cc: johnhall@evergo.net, fork@spamassassin.taint.org, lea@lig.net +Subject: Re: Slaughter in the Name of God +References: <004601c25dc9$67a436a0$0200a8c0@JMHALL> <3D869694.1060906@lig.net> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 17 Sep 2002 10:50:46 -0400 + +>>>>> "S" == Stephen D Williams writes: + + S> A) Which religion is it that can claim no foul actions in its + S> past? Certainly not Christianity, Islam, etc. + +Rastafari. + +That is, if you concede that of the two founding branches, only the +one founded by the Nyabingi were legit and the others were +thinly-veneered anti-colonial hooligans. + +There is also Vietnamese Buddhism, unless you count setting fire to +oneself as a "foul action". + + S> C) Many splinter Christianity religions have 'clean hands' but + S> they also aren't 'found in the wild'. + +You'd have to explain "found in the wild". For example, I know of +no violence perpetrated by the South Pacific "Cargo Cults" outside +of a pretty darn /mean/ game of cricket. + + S> D) The Northern Ireland Protestant vs. Catholic feud, recently + S> more or less concluded, is not completely unlike this kind of + S> friction generated by splitting society too much along + S> religious lines. One Post article pointed out that the problem + S> basically stemmed from the vertical integration of areas along + S> religious lines all the way to schools, government, political + S> party, etc. (Of course both cases have a heritage of British + S> conquest, but who doesn't?) + +When we launched the Native Net in 1989, one of the first things we +noticed on networking aboriginal groups around the world is that the +British Army, with the US Army as a proxy by extension, were the +common thread. Where neither was present (physically or through +influence) there /tended/ to be less violence. + +The issue in Ireland is complex, but rest assured that religious +aspects are only a co-incidence of the invader/colonials being +predominantly members of the Royal-headed Anglicans and the aboriginal +population being predominantly members of the Pope-headed Catholics. +The conflict itself has nothing to do with ideology or practice, since +the Anglican Church is a near-identical clone of Catholicism. + +(now I bet that's going to attract some healthy debate ;) + + S> .. most Protestants are unionists who want the + S> province to remain part of Britain. + +Mebst. Mebst. It's the other way around. Most Unionists are protestants. +It's their _Unionism_ that is the source of the conflict, not their +sacriments. + + S> ... Police records and historians agree that the most lethal + S> group by far was the IRA, fighting on the Catholic side with a + S> goal of a united Ireland + +And which side of the colonial fence do you suppose the Police and +Historians sit? If the Russians had invaded the USA as feared in +episodes such as the Bay of Pigs, would the Americans have organized +to become a "lethal force", or would they have just said, "Oh well, +there goes /that/ democracy!" and settle in under communist rule? + +Just wondering. + + >> 2. The US is trying to avoid making war on the Muslim religion. + +It is interesting to me that the Canadian media is trying to paint +Chretien as some sort of buffoon for saying that 3rd-world poverty was +a major contributor to 9-11. If they'd /watch/ his now-infamous +interview, they'd see that it's still us-against-hooligans, but his +point is that the hooligans would not be able to find friendly states +so easily if those states were not so bled-dry by the west. + +The same is true of street-gangs: When people are disenfranchised, +it's easier to offer them the Triad as a new family. You get +cellphones, cars, a dry place to live. Triad, biker gangs, mafia, the +IRA, Al Queda ... we've been fighting the War on Terrorism for as long +as there's been commerce, so you'd think we'd /realize/ that +escalation of violence is not a solution. + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00598.583ed313ddee00f0dc9929f76d3bb24e b/Ch3/datasets/spam/easy_ham/00598.583ed313ddee00f0dc9929f76d3bb24e new file mode 100644 index 000000000..feec5403a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00598.583ed313ddee00f0dc9929f76d3bb24e @@ -0,0 +1,106 @@ +From fork-admin@xent.com Tue Sep 17 17:57:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7250516F03 + for ; Tue, 17 Sep 2002 17:57:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 17:57:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HGpbC19130 for ; + Tue, 17 Sep 2002 17:51:37 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id EEB412940BB; Tue, 17 Sep 2002 09:48:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from relay06.indigo.ie (relay06.indigo.ie [194.125.133.230]) by + xent.com (Postfix) with SMTP id 0C55D29409F for ; + Tue, 17 Sep 2002 09:47:30 -0700 (PDT) +Received: (qmail 32637 messnum 1040879 invoked from + network[194.125.173.182/ts13-182.dublin.indigo.ie]); 17 Sep 2002 16:50:45 + -0000 +Received: from ts13-182.dublin.indigo.ie (HELO spamassassin.taint.org) + (194.125.173.182) by relay06.indigo.ie (qp 32637) with SMTP; + 17 Sep 2002 16:50:45 -0000 +Received: by spamassassin.taint.org (Postfix, from userid 500) id 4F4EA16F03; + Tue, 17 Sep 2002 17:50:28 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) by spamassassin.taint.org (Postfix) + with ESMTP id 4D6C1F7B1; Tue, 17 Sep 2002 17:50:28 +0100 (IST) +To: Gary Lawrence Murphy +Cc: "Stephen D. Williams" , johnhall@evergo.net, + fork@xent.com, lea@lig.net +Subject: Re: Slaughter in the Name of God +In-Reply-To: Message from Gary Lawrence Murphy of + "17 Sep 2002 10:50:46 EDT." + +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020917165028.4F4EA16F03@spamassassin.taint.org> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 17:50:23 +0100 + + +Gary Lawrence Murphy said: +> >>>>> "S" == Stephen D Williams writes: +> S> A) Which religion is it that can claim no foul actions in its +> S> past? Certainly not Christianity, Islam, etc. +> Rastafari. +> That is, if you concede that of the two founding branches, only the +> one founded by the Nyabingi were legit and the others were +> thinly-veneered anti-colonial hooligans. +> There is also Vietnamese Buddhism, unless you count setting fire to +> oneself as a "foul action". + +What about Tibetan Buddhism BTW? They seem like an awfully nice bunch +of chaps (and chapesses). + +> When we launched the Native Net in 1989, one of the first things we +> noticed on networking aboriginal groups around the world is that the +> British Army, with the US Army as a proxy by extension, were the +> common thread. Where neither was present (physically or through +> influence) there /tended/ to be less violence. +> +> The issue in Ireland is complex, but rest assured that religious +> aspects are only a co-incidence of the invader/colonials being +> predominantly members of the Royal-headed Anglicans and the aboriginal +> population being predominantly members of the Pope-headed Catholics. +> The conflict itself has nothing to do with ideology or practice, since +> the Anglican Church is a near-identical clone of Catholicism. +> +> (now I bet that's going to attract some healthy debate ;) + +Man, I'm not going *there* again ;) I'll agree, though, that the ideology +or practices of the religions have very little to do with the conflict. + +> The same is true of street-gangs: When people are disenfranchised, +> it's easier to offer them the Triad as a new family. You get +> cellphones, cars, a dry place to live. Triad, biker gangs, mafia, the +> IRA, Al Queda ... we've been fighting the War on Terrorism for as long +> as there's been commerce, so you'd think we'd /realize/ that +> escalation of violence is not a solution. + +Well said! + +--j. + + diff --git a/Ch3/datasets/spam/easy_ham/00599.94c013ab7037d45045aafbac3389bef0 b/Ch3/datasets/spam/easy_ham/00599.94c013ab7037d45045aafbac3389bef0 new file mode 100644 index 000000000..cb8b44b11 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00599.94c013ab7037d45045aafbac3389bef0 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Tue Sep 17 18:42:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E307E16F03 + for ; Tue, 17 Sep 2002 18:42:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 18:42:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HHRaC20431 for ; + Tue, 17 Sep 2002 18:27:37 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 526962940ED; Tue, 17 Sep 2002 10:24:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id C1FCC29409F for ; Tue, 17 Sep 2002 10:23:31 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id A1DBDC44D; + Tue, 17 Sep 2002 19:26:27 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: Hanson's Sept 11 message in the National Review +Message-Id: <20020917172627.A1DBDC44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 19:26:27 +0200 (CEST) + +Chuck Murcko wrote: +> > The usual crud. Why do morons ranting and beating their chests in the +> > National Review (or similar rags) merit FoRKing? +> Probably because we have this pesky 1st Amendment thing here. [...] + +It must be so great in the US. The rest of us live in caves and have +no such thing as free speech. + +BTW, I wasn't aware that the 1st Amendment mandated that crap must be FoRKed. + + +> You can just ignore it if you wish. + +I will, thanks. + + +> But I must feel obligated to defend to the death your right to do so. + +«Je désapprouve ce que vous dites, mais je défendrai jusqu'à ma mort votre +droit de le dire» +- Arouet Le Jeune, dit «Voltaire» (1694-1778). + + +R + + diff --git a/Ch3/datasets/spam/easy_ham/00600.a1c1bac6e4b69ad676c35512fec98e05 b/Ch3/datasets/spam/easy_ham/00600.a1c1bac6e4b69ad676c35512fec98e05 new file mode 100644 index 000000000..b79b5de50 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00600.a1c1bac6e4b69ad676c35512fec98e05 @@ -0,0 +1,62 @@ +From fork-admin@xent.com Tue Sep 17 18:42:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6B71216F03 + for ; Tue, 17 Sep 2002 18:42:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 18:42:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HHbbC20660 for ; + Tue, 17 Sep 2002 18:37:37 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2C8212940E8; Tue, 17 Sep 2002 10:34:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from towel.boston.ximian.com (gateway.ximian.com + [141.154.95.125]) by xent.com (Postfix) with ESMTP id 7BBA729409F for + ; Tue, 17 Sep 2002 10:33:37 -0700 (PDT) +Received: (from louie@localhost) by towel.boston.ximian.com + (8.11.6/8.11.6) id g8HHaok02484 for fork@xent.com; Tue, 17 Sep 2002 + 13:36:50 -0400 +X-Authentication-Warning: towel.boston.ximian.com: louie set sender to + louie@ximian.com using -f +Subject: Re: Slaughter in the Name of God +From: Luis Villa +To: fork@spamassassin.taint.org +In-Reply-To: <20020917165028.4F4EA16F03@spamassassin.taint.org> +References: <20020917165028.4F4EA16F03@spamassassin.taint.org> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +Organization: +Message-Id: <1032284209.2347.186.camel@towel.boston.ximian.com> +MIME-Version: 1.0 +X-Mailer: Ximian Evolution 1.1.1.99 (Preview Release) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 17 Sep 2002 13:36:49 -0400 + +On Tue, 2002-09-17 at 12:50, Justin Mason wrote: +> What about Tibetan Buddhism BTW? They seem like an awfully nice bunch +> of chaps (and chapesses). + +They were the ruling class of a feudal, farming society for quite some +time; I believe there were more than a few issues there. Certainly, not +everyone in Tibet is as excited about the Dalai Lama as Hollywood +appears to be. [Not that the Chinese are much better rights-wise, but +they've actually built roads and such, which led to the creation of +merchant classes and the like that never existed under the Tibetans.] + +Luis + + diff --git a/Ch3/datasets/spam/easy_ham/00601.3db4b70f50e83050fcec38b75dee609e b/Ch3/datasets/spam/easy_ham/00601.3db4b70f50e83050fcec38b75dee609e new file mode 100644 index 000000000..e17056ba8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00601.3db4b70f50e83050fcec38b75dee609e @@ -0,0 +1,88 @@ +From fork-admin@xent.com Tue Sep 17 23:29:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D354E16F03 + for ; Tue, 17 Sep 2002 23:29:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 23:29:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HHgaC20754 for ; + Tue, 17 Sep 2002 18:42:36 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 200432940EE; Tue, 17 Sep 2002 10:39:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from advantageservices.net (wddx002.wddx.net [216.235.120.252]) + by xent.com (Postfix) with ESMTP id 073B22940EE for ; + Tue, 17 Sep 2002 10:38:37 -0700 (PDT) +Received: from durnik [64.34.232.217] by advantageservices.net with ESMTP + (SMTPD32-7.12) id A95F5D0110; Tue, 17 Sep 2002 13:41:51 -0400 +From: +To: +Subject: FW: Wanna buy a nuke? +Message-Id: <000b01c25e71$813bf1e0$c809a8c0@imagery.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook CWS, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +X-Note: This E-mail was scanned by the wddx.net servers for spam. +X-Note: Please send abuse reports to abuse@advantageservices.net. Thank you. +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 13:41:50 -0400 + +I have been told to take anything read in Pravda with a grain of salt... +but +this article certainly looks impressive when paired together with this other +one from the associated press... + +Just the concept makes me shudder, imagining how easy it must be to smuggle +these things around some parts of Europe right now. + +Hopefully, it's just my imagination. + +-- Michael Cummins + Fort Lauderdale, FL + +---------------------------------------------------------------------------- +---- +http://english.pravda.ru/main/2002/09/13/36519.html +11:14 2002-09-13 +200 SOVIET NUKES LOST IN UKRAINE +---------------------------------------------------------------------------- +---- +http://story.news.yahoo.com/news?tmpl=story2&cid=518&ncid=518&e=51&u=/ap/200 +20903/ap_on_re_eu/ukraine_iraq_3 +Ukraine-Iraq Arms Deals Alleged +Tue Sep 3, 6:07 PM ET +By TIM VICKERY, Associated Press Writer +---------------------------------------------------------------------------- +---- + +Rohit Khare - I wish you the best of luck in your search. I found *my* Very +Special Lady when I was intentionally looking elsewhere... you never know +what +lurks around every corner. Love certainly has its *own* agenda. + + + + +--------------------------------------------------------------- +Scanned for viruses by the advanced mail servers at advantageservices.net + + diff --git a/Ch3/datasets/spam/easy_ham/00602.2dc7ba42179a34e52badfe383f7fe08a b/Ch3/datasets/spam/easy_ham/00602.2dc7ba42179a34e52badfe383f7fe08a new file mode 100644 index 000000000..a044081b2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00602.2dc7ba42179a34e52badfe383f7fe08a @@ -0,0 +1,79 @@ +From fork-admin@xent.com Tue Sep 17 23:29:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 813E816F03 + for ; Tue, 17 Sep 2002 23:29:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 23:29:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HHmaC20997 for ; + Tue, 17 Sep 2002 18:48:36 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AE79A2940F3; Tue, 17 Sep 2002 10:45:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from permafrost.net (unknown [64.5.214.38]) by xent.com + (Postfix) with SMTP id D39BB29409F for ; Tue, + 17 Sep 2002 10:44:05 -0700 (PDT) +Received: (qmail 14583 invoked by uid 1000); 17 Sep 2002 17:38:52 -0000 +From: "Owen Byrne" +To: Chuck Murcko +Cc: fork@spamassassin.taint.org +Subject: Re: Hanson's Sept 11 message in the National Review +Message-Id: <20020917173852.GB5613@www.NT-NETWORK> +References: <96394F38-CA61-11D6-A53C-003065F93D3A@topsail.org> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <96394F38-CA61-11D6-A53C-003065F93D3A@topsail.org> +User-Agent: Mutt/1.4i +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 14:38:52 -0300 + +On Tue, Sep 17, 2002 at 10:19:13AM -0700, Chuck Murcko wrote: +> Probably because we have this pesky 1st Amendment thing here. Still, +> lots of us in the States have developed a disturbing tendency to shout +> down or (in recent years) shackle in legal BS opinions, thoughts, and +> individual behaviors we don't agree with. +> + +Except that parroting the party line doesn't really require much +freedom of speech. Now if you had posted something from a left of +center source, you would have been shouted down in flames, buried in +ad hominem attacks, and probably get your name added to an FBI list. + + +Besides the basic rule in the United States now is "I'll defend your +rights to say anything you want, but if it isn't appropriately +neoconish, well, don't expect to work": + + +HHS Seeks Science Advice to Match Bush Views + +By Rick Weiss +Washington Post Staff Writer +Tuesday, September 17, 2002; Page A01 + +The Bush administration has begun a broad restructuring of the +scientific advisory committees that guide federal policy in areas such +as patients' rights and public health, eliminating some committees +that were coming to conclusions at odds with the president's views and +in other cases replacing members with handpicked choices. +... +http://www.washingtonpost.com/wp-dyn/articles/A26554-2002Sep16.html + +Owen + + diff --git a/Ch3/datasets/spam/easy_ham/00603.712b15c7b1e7bef7235068a3e4d9bd39 b/Ch3/datasets/spam/easy_ham/00603.712b15c7b1e7bef7235068a3e4d9bd39 new file mode 100644 index 000000000..f2fc45c89 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00603.712b15c7b1e7bef7235068a3e4d9bd39 @@ -0,0 +1,52 @@ +From garym@canada.com Tue Sep 17 23:29:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5C9D216F03 + for ; Tue, 17 Sep 2002 23:29:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 23:29:41 +0100 (IST) +Received: from smtp1.superb.net (IDENT:qmailr@smtp1.superb.net + [207.228.225.14]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8HIGUC21769 for ; Tue, 17 Sep 2002 19:16:31 +0100 +Received: (qmail 6439 invoked from network); 17 Sep 2002 18:16:58 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 17 Sep 2002 18:16:58 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 7F08F1C2C4; + Tue, 17 Sep 2002 14:16:56 -0400 (EDT) +Sender: garym@maya.dyndns.org +To: yyyy@spamassassin.taint.org (Justin Mason) +Cc: "Stephen D. Williams" , johnhall@evergo.net, + fork@xent.com, lea@lig.net +Subject: Re: Slaughter in the Name of God +References: <20020917165028.4F4EA16F03@spamassassin.taint.org> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Date: 17 Sep 2002 14:16:56 -0400 +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii + +>>>>> "J" == Justin Mason writes: + + J> What about Tibetan Buddhism BTW? They seem like an awfully + J> nice bunch of chaps (and chapesses). + +Yes, them too. When wolves attack their sheep, they coral the wolf +into a quarry and then throw rocks from the surrounding cliffs so +that "no one will know who killed the wolf" + +In Samskar, before the Chinese arrived, there had not been a killing +in over 2000 years, and the last recorded skirmish, over rights to +a water hole, had happened several generations ago. + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00604.2241c022167d341022d1f345689801d7 b/Ch3/datasets/spam/easy_ham/00604.2241c022167d341022d1f345689801d7 new file mode 100644 index 000000000..eec7828a6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00604.2241c022167d341022d1f345689801d7 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Tue Sep 17 18:42:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 831BA16F03 + for ; Tue, 17 Sep 2002 18:42:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 18:42:36 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HHKeC20202 for ; + Tue, 17 Sep 2002 18:20:48 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DC8BE2940DE; Tue, 17 Sep 2002 10:17:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hughes-fe01.direcway.com (hughes-fe01.direcway.com + [66.82.20.91]) by xent.com (Postfix) with ESMTP id 9EAC029409F for + ; Tue, 17 Sep 2002 10:16:07 -0700 (PDT) +Received: from spinnaker ([64.157.32.1]) by hughes-fe01.direcway.com + (InterMail vK.4.04.00.00 201-232-137 license + dcc4e84cb8fc01ca8f8654c982ec8526) with ESMTP id + <20020917171953.BJNK977.hughes-fe01@spinnaker> for ; + Tue, 17 Sep 2002 13:19:53 -0400 +MIME-Version: 1.0 (Apple Message framework v482) +Content-Type: text/plain; charset=US-ASCII; format=flowed +Subject: Re: Hanson's Sept 11 message in the National Review +From: Chuck Murcko +To: fork@spamassassin.taint.org +Content-Transfer-Encoding: 7bit +Message-Id: <96394F38-CA61-11D6-A53C-003065F93D3A@topsail.org> +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 10:19:13 -0700 + +Probably because we have this pesky 1st Amendment thing here. Still, +lots of us in the States have developed a disturbing tendency to shout +down or (in recent years) shackle in legal BS opinions, thoughts, and +individual behaviors we don't agree with. + +You can just ignore it if you wish. But I must feel obligated to defend +to the death your right to do so. + +Chuck + +On Monday, September 16, 2002, at 06:54 AM, Robert Harley wrote: + +The usual crud. Why do morons ranting and beating their chests in the +National Review (or similar rags) merit FoRKing? + + diff --git a/Ch3/datasets/spam/easy_ham/00605.63a8dd42dd6ce5499718d03acfeb0746 b/Ch3/datasets/spam/easy_ham/00605.63a8dd42dd6ce5499718d03acfeb0746 new file mode 100644 index 000000000..bb1eadcc9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00605.63a8dd42dd6ce5499718d03acfeb0746 @@ -0,0 +1,88 @@ +From fork-admin@xent.com Tue Sep 17 23:29:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AAC1216F03 + for ; Tue, 17 Sep 2002 23:29:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 23:29:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HIibC22560 for ; + Tue, 17 Sep 2002 19:44:37 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C08382940EF; Tue, 17 Sep 2002 11:41:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id 4DEC029409F for ; + Tue, 17 Sep 2002 11:40:56 -0700 (PDT) +Received: (qmail 31352 invoked by uid 19621); 17 Sep 2002 18:42:41 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 17 Sep 2002 18:42:41 -0000 +Subject: Re: Slaughter in the Name of God +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: +References: <20020917165028.4F4EA16F03@spamassassin.taint.org> + +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1032289276.2646.35.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 17 Sep 2002 12:01:16 -0700 + +On Tue, 2002-09-17 at 11:16, Gary Lawrence Murphy wrote: +> >>>>> "J" == Justin Mason writes: +> +> J> What about Tibetan Buddhism BTW? They seem like an awfully +> J> nice bunch of chaps (and chapesses). +> +> Yes, them too. When wolves attack their sheep, they coral the wolf +> into a quarry and then throw rocks from the surrounding cliffs so +> that "no one will know who killed the wolf" +> +> In Samskar, before the Chinese arrived, there had not been a killing +> in over 2000 years, and the last recorded skirmish, over rights to +> a water hole, had happened several generations ago. + + +I'm skeptical. + +One of the many perversions of modern civilization is the fictitious +rendering of various peoples, frequently to the point where the fiction +is more "real" than the reality. You see it over and over again in +history: The Primitive People pull a fast one on Whitey The Junior +Anthropologist, playing to all the prejudices of Whitey (who only became +Junior Anthropologists to support personal ideologies), and before you +know it the charade takes on a life of its own which the Primitive +People are compelled to perpetuate. Worse, even when there is +substantial evidence to the contrary with some basic scholarship, the +facts have a hard time competing with the ideologically pleasing fiction +that is already firmly entrenched. And many peoples (e.g. American +Indians) develop a profit motive for maintaining and promoting the myth +in popular culture. + +I'm far more inclined to believe that people is people, no matter where +you are on the planet. The only time you see any anomalies is when you +have a self-selecting sub-population within an otherwise normal +population, which is hardly a fair way to look at any major population. + +-James Rogers + jamesr@best.com + + + diff --git a/Ch3/datasets/spam/easy_ham/00606.9733a34d34069bbc9671b0292068449d b/Ch3/datasets/spam/easy_ham/00606.9733a34d34069bbc9671b0292068449d new file mode 100644 index 000000000..484a5cb78 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00606.9733a34d34069bbc9671b0292068449d @@ -0,0 +1,111 @@ +From fork-admin@xent.com Tue Sep 17 23:29:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3F52416F03 + for ; Tue, 17 Sep 2002 23:29:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 23:29:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HJXcC23989 for ; + Tue, 17 Sep 2002 20:33:38 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 454BD2940A6; Tue, 17 Sep 2002 12:30:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm1-28.sba1.netlojix.net + [207.71.218.76]) by xent.com (Postfix) with ESMTP id 1DD2429409F for + ; Tue, 17 Sep 2002 12:29:01 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id MAA26187; + Tue, 17 Sep 2002 12:40:05 -0700 +Message-Id: <200209171940.MAA26187@maltesecat> +To: fork@spamassassin.taint.org +Subject: Re: The Big Jump +In-Reply-To: Message from fork-request@xent.com of + "Mon, 09 Sep 2002 19:25:02 PDT." + <20020910022502.8777.4915.Mailman@lair.xent.com> +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 12:40:05 -0700 + + + +> All else being equal, the terminal velocity is inversely proportional to the +> square root of air density. Air density drops off pretty quickly, and I +> really should be doing something other than digging up the math for that. I +> think it involves calculus to integrate the amount of mass as the column of +> the atmosphere trails off. + +Chemistry types have a method for +dealing with this question without +dragging in the calculus: + +Suppose an atmosphere to be mainly +affected by gravity, resulting in +the potential energy for a mass M +to be linear in height h: Mgh. + +What relative concentrations will +we have when two different packets +of air are in equilibrium? + +If they are at the same height, we +will have half the mass in one, and +half the mass in the other, and the +amount flowing from one to the other +balances the amount flowing in the +opposite direction.[0] + +If they are at differing heights, +then a greater percentage of the +higher air tends to descend than +that percentage of the lower air +which ascends. In order for the +two flows to balance, the higher +packet must contain less air than +the lower, and the mass balance +of the flows corresponds thusly: + + high percentage of thin air + --------------------------- + low percentage of dense air + +Now, rates are exponential in +energy differences[1], so that +theoretically we should expect +an exponential decay in height, +to compensate. How does it go +in practice? + +-Dave + +[0] How well does it balance? + Chemical equilibria seem + stable, as they deal with + very large numbers over a + very long time. Economic + equilibria are viewed from + the mayfly standpoint of + individual people, and so, + at best, the shot noise is + very visible. + +[1] That is to say, rates will + be exponential in the free + energy differences between + endpoints and a transition + state. We can ignore that + complication in this model. + + diff --git a/Ch3/datasets/spam/easy_ham/00607.5032b5e20289cecc351fc872b92c2003 b/Ch3/datasets/spam/easy_ham/00607.5032b5e20289cecc351fc872b92c2003 new file mode 100644 index 000000000..2950c150a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00607.5032b5e20289cecc351fc872b92c2003 @@ -0,0 +1,50 @@ +From johnhall@evergo.net Tue Sep 17 23:29:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CF5C316F03 + for ; Tue, 17 Sep 2002 23:29:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 23:29:47 +0100 (IST) +Received: from mail.evergo.net ([206.191.151.2]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g8HKUvC25665 for ; + Tue, 17 Sep 2002 21:30:58 +0100 +Received: (qmail 31515 invoked from network); 17 Sep 2002 20:31:20 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 17 Sep 2002 20:31:20 -0000 +Reply-To: +From: "John Hall" +To: , "'Gary Lawrence Murphy'" +Cc: "'Stephen D. Williams'" , , + +Subject: RE: Slaughter in the Name of God +Date: Tue, 17 Sep 2002 13:31:20 -0700 +Message-Id: <001601c25e89$2f06a3d0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +In-Reply-To: <20020917165028.4F4EA16F03@spamassassin.taint.org> +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 + + + +> From: yyyy@spamassassin.taint.org [mailto:yyyy@spamassassin.taint.org] +> Sent: Tuesday, September 17, 2002 9:50 AM +> > ... we've been fighting the War on Terrorism for as long +> > as there's been commerce, so you'd think we'd /realize/ that +> > escalation of violence is not a solution. +> +> Well said! +> +> --j. + +Yeah. It certainly wasn't a solution to the Carthaginian problem or the +Barbary Pirates. Wait ... no ... actually ... it was a rather permanent +solution. + + diff --git a/Ch3/datasets/spam/easy_ham/00608.36856bbc19336f3fd57897105b32c720 b/Ch3/datasets/spam/easy_ham/00608.36856bbc19336f3fd57897105b32c720 new file mode 100644 index 000000000..e7fd26446 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00608.36856bbc19336f3fd57897105b32c720 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Tue Sep 17 23:29:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7517616F03 + for ; Tue, 17 Sep 2002 23:29:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 23:29:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HKbbC25882 for ; + Tue, 17 Sep 2002 21:37:38 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3B2DE2940C8; Tue, 17 Sep 2002 13:34:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav26.law15.hotmail.com [64.4.22.83]) by + xent.com (Postfix) with ESMTP id B4D652940C8 for ; + Tue, 17 Sep 2002 13:33:04 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Tue, 17 Sep 2002 13:36:22 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: "Luis Villa" , +References: <20020917165028.4F4EA16F03@spamassassin.taint.org> + <1032284209.2347.186.camel@towel.boston.ximian.com> +Subject: Re: Slaughter in the Name of God +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 17 Sep 2002 20:36:22.0259 (UTC) FILETIME=[E2742C30:01C25E89] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 13:40:12 -0700 + + +----- Original Message ----- +From: "Luis Villa" + +> +> They were the ruling class of a feudal, farming society for quite some +> time; I believe there were more than a few issues there. Certainly, not +> everyone in Tibet is as excited about the Dalai Lama as Hollywood +> appears to be. [Not that the Chinese are much better rights-wise, but +> they've actually built roads and such, which led to the creation of +> merchant classes and the like that never existed under the Tibetans.] +And it's not /going/ to exist under the Tibetans, because it'll be owned and +operated by Chinese nationals. + + diff --git a/Ch3/datasets/spam/easy_ham/00609.07f3cfa331e44f1fc138217fc9f9eb86 b/Ch3/datasets/spam/easy_ham/00609.07f3cfa331e44f1fc138217fc9f9eb86 new file mode 100644 index 000000000..bf7c7b29b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00609.07f3cfa331e44f1fc138217fc9f9eb86 @@ -0,0 +1,66 @@ +From fork-admin@xent.com Tue Sep 17 23:29:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C0B9816F03 + for ; Tue, 17 Sep 2002 23:29:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 23:29:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8HLnbC27965 for ; + Tue, 17 Sep 2002 22:49:38 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C82AF2940A8; Tue, 17 Sep 2002 14:46:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barry.mail.mindspring.net (barry.mail.mindspring.net + [207.69.200.25]) by xent.com (Postfix) with ESMTP id 27C3E29409F for + ; Tue, 17 Sep 2002 14:45:50 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + barry.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17rQDJ-0002rP-00; + Tue, 17 Sep 2002 17:48:58 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net (Unverified) +Message-Id: +In-Reply-To: <1032289276.2646.35.camel@avalon> +References: <20020917165028.4F4EA16F03@spamassassin.taint.org> + <1032289276.2646.35.camel@avalon> +To: fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: Re: Slaughter in the Name of God +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 17:26:09 -0400 + +At 12:01 PM -0700 on 9/17/02, James Rogers wrote: + + +> The Primitive People pull a fast one on Whitey The Junior +> Anthropologist + +Or Margaret, in the case of a famous proto-feminist... + +Cheers, +RAH + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00610.ef7ca9c067516bdd7e29aebc488d1edd b/Ch3/datasets/spam/easy_ham/00610.ef7ca9c067516bdd7e29aebc488d1edd new file mode 100644 index 000000000..6ae684286 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00610.ef7ca9c067516bdd7e29aebc488d1edd @@ -0,0 +1,56 @@ +From fork-admin@xent.com Wed Sep 18 11:52:21 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 76DA416F03 + for ; Wed, 18 Sep 2002 11:52:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 11:52:21 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8I2geC08306 for ; + Wed, 18 Sep 2002 03:42:40 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A34FE2940BF; Tue, 17 Sep 2002 19:39:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 26E6B29409F for + ; Tue, 17 Sep 2002 19:38:32 -0700 (PDT) +Received: (qmail 11587 invoked by uid 501); 18 Sep 2002 02:41:40 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 18 Sep 2002 02:41:40 -0000 +From: CDale +To: fork@spamassassin.taint.org +Subject: boycotting yahoo +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 21:41:40 -0500 (CDT) + +Because of this: +http://hrw.org/press/2002/08/yahoo080902.htm +there are several of us who are in the BDSM lifestyle who are trying to +encourage our local groups to find alternatives to yahoo groups as a way +of communicating with each other. I've set up a place to have maillists +on my server for any group who wants to use it, but I was wondering if +anyone knows of an alternative that allows all the bells and whistles that +yahoo has, such as reminders, file storage, calendars, etc. Anyone? +TIA, +Cindy + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00611.62116da308e2b9eb2e57ee12de12b677 b/Ch3/datasets/spam/easy_ham/00611.62116da308e2b9eb2e57ee12de12b677 new file mode 100644 index 000000000..960af2672 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00611.62116da308e2b9eb2e57ee12de12b677 @@ -0,0 +1,80 @@ +From fork-admin@xent.com Wed Sep 18 11:52:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2245516F03 + for ; Wed, 18 Sep 2002 11:52:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 11:52:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8I4MeC12215 for ; + Wed, 18 Sep 2002 05:22:40 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 954A62940C7; Tue, 17 Sep 2002 21:19:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from c007.snv.cp.net (h013.c007.snv.cp.net [209.228.33.241]) by + xent.com (Postfix) with SMTP id 0346C29409F for ; + Tue, 17 Sep 2002 21:18:29 -0700 (PDT) +Received: (cpmta 17587 invoked from network); 17 Sep 2002 21:21:48 -0700 +Received: from 65.189.7.13 (HELO alumni.rice.edu) by + smtp.directvinternet.com (209.228.33.241) with SMTP; 17 Sep 2002 21:21:48 + -0700 +X-Sent: 18 Sep 2002 04:21:48 GMT +Message-Id: <3D87FF0F.1000309@alumni.rice.edu> +From: Wayne E Baisley +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.1) + Gecko/20020823 Netscape/7.0 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: FoRK@xent.com +Subject: Re: storage bits +References: +Content-Type: text/plain; charset=US-ASCII; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 23:20:31 -0500 + +At Fermi (yes I'm back there; long story), we're buying 4U systems like +the fiscal year is ending. We have ~20 ASA IR4US1 systems (not pushing +them, there are some other similar units available), with 60 more on +order. They're 2-1/2 TB for $10K, although we add a separate IDE or +SCSI system disk, because the 3Ware RAID controllers can saturate. +Intel SDS2 motherboard, 2 1.4GHz P3s, 2 GB ram, 2 3Ware 7850 Raid +controllers, 16 160GB Maxtors, SysKonnect gigabit enet, Fermi RedHat 7.3. + +http://www.asacomputers.com/cgi-bin/index.fcg?action=displayscreen&templateid=25 + +There's some interesting info at: + +http://mit.fnal.gov/~msn/cdf/caf/server_evaluation.html + +We've decided to go with XFS (which Linus has just merged into the 2.5 +tree), mostly because none of the other journaled fs's can maintain >30 +GB/s rates with a nearly full filesystem (mostly GB files) with random +deletions (we use these systems for caching our 2 petabyte tape store). + Ext3 almost did it but dropped from from ~38MB/s to 10 with random +deletions, and didn't want to do direct io at all. Only concern is an +occasional system lock-up we haven't chased down yet. A load avg > 100 +is always a patio of fun. + +Oddly, even fairly beefy systems like these will breathe hard to keep up +with the new STK 9940B tape drives, which crank along at a steady +30GB/s. And you oldforktimers will remember "doofus" my old file server +system. It would only take 2.1" of rackspace now, instead of 14 racks. + +Cheers, +Wayne + + diff --git a/Ch3/datasets/spam/easy_ham/00612.97d0559a45fd4630e954b8687dfff55a b/Ch3/datasets/spam/easy_ham/00612.97d0559a45fd4630e954b8687dfff55a new file mode 100644 index 000000000..2a76f6fa7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00612.97d0559a45fd4630e954b8687dfff55a @@ -0,0 +1,58 @@ +From fork-admin@xent.com Wed Sep 18 11:52:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2E7BC16F03 + for ; Wed, 18 Sep 2002 11:52:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 11:52:25 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8I4vZC13372 for ; + Wed, 18 Sep 2002 05:57:35 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id F3C7B2940D1; Tue, 17 Sep 2002 21:54:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from c007.snv.cp.net (h008.c007.snv.cp.net [209.228.33.236]) by + xent.com (Postfix) with SMTP id 8C0BC29409F for ; + Tue, 17 Sep 2002 21:53:30 -0700 (PDT) +Received: (cpmta 966 invoked from network); 17 Sep 2002 21:56:49 -0700 +Received: from 65.189.7.13 (HELO alumni.rice.edu) by + smtp.directvinternet.com (209.228.33.236) with SMTP; 17 Sep 2002 21:56:49 + -0700 +X-Sent: 18 Sep 2002 04:56:49 GMT +Message-Id: <3D880744.1050300@alumni.rice.edu> +From: Wayne E Baisley +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.1) + Gecko/20020823 Netscape/7.0 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Florida Our Recount Kapitol +Subject: Re: FWD: Florida Primary 2002: Back to the Future +References: <3D8216C8.8F0D61DA@Golux.Com> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 17 Sep 2002 23:55:32 -0500 + +Yes, it's nice to be back in America's flaccid state ... + +Seems like only yesterday we were suffering electile dysfunction ... + +Maybe if they made the ballot ovals look like little blue pills ... + +No, seriously ... I'm here all week ... You were great ... +'nite everybody + + diff --git a/Ch3/datasets/spam/easy_ham/00613.b8dd681e75a5583349b54f16991b096b b/Ch3/datasets/spam/easy_ham/00613.b8dd681e75a5583349b54f16991b096b new file mode 100644 index 000000000..2971cf549 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00613.b8dd681e75a5583349b54f16991b096b @@ -0,0 +1,62 @@ +From fork-admin@xent.com Wed Sep 18 11:52:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C0FEF16F03 + for ; Wed, 18 Sep 2002 11:52:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 11:52:26 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8I5wYC15711 for ; + Wed, 18 Sep 2002 06:58:34 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 083F02940C6; Tue, 17 Sep 2002 22:55:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 7555029409F for ; + Tue, 17 Sep 2002 22:54:27 -0700 (PDT) +Received: (qmail 20902 invoked from network); 18 Sep 2002 05:57:48 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 18 Sep 2002 05:57:48 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id AE0ED1C2C4; + Wed, 18 Sep 2002 01:57:43 -0400 (EDT) +To: CDale +Cc: fork@spamassassin.taint.org +Subject: Re: boycotting yahoo +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 18 Sep 2002 01:57:43 -0400 + + +I'm a bit confused about this boycott thing. How is what China is +doing any different than having Scientology and who ever else +state-side who takes the whim evoking the DMCA to close down foreign +sites they deem inappropriate? At least the Chinese make it voluntary +and ask politely, rather than just sending legal musclemen first off. + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00614.2487f80400eb954b7c3ab257771ed393 b/Ch3/datasets/spam/easy_ham/00614.2487f80400eb954b7c3ab257771ed393 new file mode 100644 index 000000000..7550475a3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00614.2487f80400eb954b7c3ab257771ed393 @@ -0,0 +1,157 @@ +From fork-admin@xent.com Wed Sep 18 11:52:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5CDB816F03 + for ; Wed, 18 Sep 2002 11:52:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 11:52:28 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8I7UpC19432 for ; + Wed, 18 Sep 2002 08:30:54 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id CFB012940CB; Wed, 18 Sep 2002 00:27:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from relay.pair.com (relay1.pair.com [209.68.1.20]) by xent.com + (Postfix) with SMTP id 1207F29409F for ; Wed, + 18 Sep 2002 00:26:08 -0700 (PDT) +Received: (qmail 17500 invoked from network); 18 Sep 2002 07:29:22 -0000 +Received: from adsl-66-124-227-84.dsl.snfc21.pacbell.net (HELO golden) + (66.124.227.84) by relay1.pair.com with SMTP; 18 Sep 2002 07:29:22 -0000 +X-Pair-Authenticated: 66.124.227.84 +Message-Id: <008201c25ee5$1285de40$640a000a@golden> +From: "Gordon Mohr" +To: +References: <20020917172627.A1DBDC44D@argote.ch> +Subject: Defending Unliked Speech Re: Hanson's Sept 11 message in the + National Review +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 8bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 00:29:01 -0700 + +Robert Harley writes: +> Chuck Murcko wrote: + +> > But I must feel obligated to defend to the death your right to do so. +> +> «Je désapprouve ce que vous dites, mais je défendrai jusqu'à ma mort votre +> droit de le dire» +> - Arouet Le Jeune, dit «Voltaire» (1694-1778). + +Here's hoping that tradition perseveres for the novelist +currently on trial in Paris for calling Islam "the stupidest +religion"... + +http://ca.news.yahoo.com/020917/5/ozxa.html + +# Tuesday September 17 11:07 AM EST +# +# French Writer Tried As Anti-Islam, Protest Erupts +# By Caroline Brothers +# +# PARIS (Reuters) - Provocative French novelist Michel Houellebecq +# faced a Paris court on Tuesday for allegedly inciting racial hatred +# by calling Islam "the stupidest religion" and its holy book the +# Koran a depressing read. +# +# The case, brought against him by four Muslim groups, is a cause +# celebre reminiscent of the Salman Rushdie affair, pitting freedom of +# expression against religious sensitivities. +# +# The Muslim groups, which include the Mecca-based World Islamic +# League and the Paris Mosque, accuse the writer of insulting Islam in +# an interview with the literary magazine "Lire" during last year's +# launch of his novel "Plateforme." +# +# Lire is also on trial over the remarks, which have taken on an added +# significance in France in the atmosphere of heightened sensitivity +# and concern about Islam following the September 11 attacks by Muslim +# radicals in the United States. +# +# Shortly after the trial started, 11 people in the courtroom stripped +# off their shirts to reveal T-shirts saying "No to the censure of the +# imams" and "Marianne veiled, Marianne raped" -- a reference to the +# female symbol of the French republic. +# +# "Freedom of expression! freedom of expression!" they and other +# Houellebecq supporters chanted after they were thrown out of the +# courtroom at the main law courts in central Paris. +# +# While intellectuals argued before the trial that Houellebecq should +# be free to write what he wants, Lyon Mosque rector Kamel Kabtan +# retorted: "We are for freedom of expression, but not for insulting +# communities." +# +# BETE NOIRE +# +# Houellebecq, 45, the bete noire of contemporary French literature, +# is no stranger to controversy. He offended conservatives and the +# politically correct left with his 1998 novel "Les Particules +# Elementaires" ("Atomised" in English). +# +# Paris Mosque rector Dalil Boubakeur says Muslims have been insulted +# once before by Houellebecq, who had the main character in Plateforme +# admit he felt "a quiver of glee" every time a "Palestinian +# terrorist" was killed. +# +# The World Islamic League, the Lyon Mosque and the National +# Federation of Muslims in France have joined the Paris Mosque in +# bringing Houellebecq to trial. +# +# France's Human Rights League joined them as a civil party, saying +# Houellebecq's comments amounted to "Islamophobia" and deserved to be +# sanctioned as part of the league's struggle against discrimination +# and racism. +# +# The Paris Mosque has hired Jean-Marc Varaut, one of France's leading +# trial lawyers, whose past clients include Maurice Papon, the former +# official condemned in 1998 for Nazi-era crimes against humanity for +# sending Jews to death camps. +# +# RESTORING BLASPHEMY? +# +# Houellebecq's lawyer Emmanuel Pierrat argues that the case +# effectively re-establishes the notion of blasphemy, despite the fact +# that France as a secular state has no such law, and says +# Houellebecq's opponents want to deny him freedom of expression. +# +# He also argues that the interview in Lire truncated a six-hour +# conversation and Houellebecq was not given the chance to approve the +# article before it appeared. +# +# Houellebecq's publisher Flammarion has distanced itself from the +# author, whose comments some say may have cost him France's +# prestigious Goncourt prize -- for which he had been a contender. +# +# The novelist, who lives outside Cork, Ireland, writes in a detached +# style about a bleak world in which people have forgotten how to +# love. +# +# Translated into 25 languages, "Atomised" incensed France's 1968 +# generation with its scathing descriptions of the hippie era but won +# him France's November prize in 1998 and the Impac award, one of the +# world's biggest fiction prizes. +# +# Losing his case may mean a year in jail or a $51,000 fine. + +- Gordon + + diff --git a/Ch3/datasets/spam/easy_ham/00615.4762e05d7ff70fa43cccbad6745b34cb b/Ch3/datasets/spam/easy_ham/00615.4762e05d7ff70fa43cccbad6745b34cb new file mode 100644 index 000000000..1fb3b3126 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00615.4762e05d7ff70fa43cccbad6745b34cb @@ -0,0 +1,52 @@ +From fork-admin@xent.com Wed Sep 18 11:52:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D206816F03 + for ; Wed, 18 Sep 2002 11:52:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 11:52:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8I9SdC23677 for ; + Wed, 18 Sep 2002 10:28:40 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BE5482940D3; Wed, 18 Sep 2002 02:25:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id CABFF29409F for ; Wed, 18 Sep 2002 02:24:23 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id DB839C44D; + Wed, 18 Sep 2002 11:27:12 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: RSA (repost) +Message-Id: <20020918092712.DB839C44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 11:27:12 +0200 (CEST) + +"Adam L. Beberg" wrote: +> So, who has done RSA implementation before? + +/me raises hand. + + +> Having a typo-I-cant-spot problem with my CRT... + +Send me the source. + + +R + + diff --git a/Ch3/datasets/spam/easy_ham/00616.1111fc61de078f069db9d72e961ab5a1 b/Ch3/datasets/spam/easy_ham/00616.1111fc61de078f069db9d72e961ab5a1 new file mode 100644 index 000000000..b964b1e9c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00616.1111fc61de078f069db9d72e961ab5a1 @@ -0,0 +1,46 @@ +From fork-admin@xent.com Wed Sep 18 11:52:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6697216F03 + for ; Wed, 18 Sep 2002 11:52:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 11:52:32 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IAmeC26123 for ; + Wed, 18 Sep 2002 11:48:40 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 976052940D4; Wed, 18 Sep 2002 03:45:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id BA31D29409F for ; Wed, 18 Sep 2002 03:44:51 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id 5A00BC44D; + Wed, 18 Sep 2002 12:47:40 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: [VoID] a new low on the personals tip... +Message-Id: <20020918104740.5A00BC44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 12:47:40 +0200 (CEST) + +Pity. Reading that woman's ad and knowing Rohit for years, they sound +like a match made in heaven. But why, oh, why, keep that shaved-head +photo on prominent display??? There are lots of photos of Rohit +looking rather dashing, and with the crucial hair feature enabled! + +R + + diff --git a/Ch3/datasets/spam/easy_ham/00617.5433c6be9644f6d773afef39392cb24c b/Ch3/datasets/spam/easy_ham/00617.5433c6be9644f6d773afef39392cb24c new file mode 100644 index 000000000..3c2efa6b1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00617.5433c6be9644f6d773afef39392cb24c @@ -0,0 +1,62 @@ +From fork-admin@xent.com Wed Sep 18 14:06:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6F01716F03 + for ; Wed, 18 Sep 2002 14:06:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 14:06:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IBEdC27094 for ; + Wed, 18 Sep 2002 12:14:39 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8FA052940D6; Wed, 18 Sep 2002 04:11:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id EB19C29409F for ; + Wed, 18 Sep 2002 04:10:10 -0700 (PDT) +Received: from Golux.Com (dsl-64-192-128-105.telocity.com + [64.192.128.105]) by Boron.MeepZor.Com (8.11.6/8.11.6) with ESMTP id + g8IBDUi31333; Wed, 18 Sep 2002 07:13:30 -0400 +Message-Id: <3D885FE0.37C1C9EA@Golux.Com> +From: Rodent of Unusual Size +Organization: The Apache Software Foundation +X-Mailer: Mozilla 4.79 [en] (Windows NT 5.0; U) +X-Accept-Language: en +MIME-Version: 1.0 +To: Flatware or Road Kill? +Subject: Re: boycotting yahoo +References: +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 07:13:36 -0400 + +CDale wrote: +> +> I was wondering if anyone knows of an alternative that allows +> all the bells and whistles that yahoo has, such as reminders, +> file storage, calendars, etc. + +SmartGroups, I think. +-- +#ken P-)} + +Ken Coar, Sanagendamgagwedweinini http://Golux.Com/coar/ +Author, developer, opinionist http://Apache-Server.Com/ + +"Millennium hand and shrimp!" + + diff --git a/Ch3/datasets/spam/easy_ham/00618.bec430e993398552fbf09c76e04b9994 b/Ch3/datasets/spam/easy_ham/00618.bec430e993398552fbf09c76e04b9994 new file mode 100644 index 000000000..4edac1ce0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00618.bec430e993398552fbf09c76e04b9994 @@ -0,0 +1,75 @@ +From fork-admin@xent.com Wed Sep 18 14:06:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B1A4716F03 + for ; Wed, 18 Sep 2002 14:06:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 14:06:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IBUcC27697 for ; + Wed, 18 Sep 2002 12:30:39 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 5EEED2940E1; Wed, 18 Sep 2002 04:27:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from permafrost.net (unknown [64.5.214.38]) by xent.com + (Postfix) with SMTP id 2A5332940E0 for ; Wed, + 18 Sep 2002 04:26:51 -0700 (PDT) +Received: (qmail 767 invoked by uid 1000); 18 Sep 2002 11:21:39 -0000 +From: "Owen Byrne" +To: Paul Prescod +Cc: Owen Byrne , fork@spamassassin.taint.org +Subject: Re: Hanson's Sept 11 message in the National Review +Message-Id: <20020918112139.GA740@www.NT-NETWORK> +References: <96394F38-CA61-11D6-A53C-003065F93D3A@topsail.org> + <20020917173852.GB5613@www.NT-NETWORK> <3D87FCD5.8000302@prescod.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <3D87FCD5.8000302@prescod.net> +User-Agent: Mutt/1.4i +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 08:21:39 -0300 + +On Tue, Sep 17, 2002 at 09:11:01PM -0700, Paul Prescod wrote: +> Owen Byrne wrote: +> >... +> > +> >Except that parroting the party line doesn't really require much +> >freedom of speech. Now if you had posted something from a left of +> >center source, you would have been shouted down in flames, buried in +> >ad hominem attacks, and probably get your name added to an FBI list. +> +> Do you think it is really useful to combat hysterical right-wing +> propoganda with hysterical left-wing propoganda? +> +Sure it is - it tends to bring out the people who let "hysterical +right wing propaganda" spew forth, while reaching for their gun +whenever a "liberal" enters the room. + +my hysterical left wing "propaganda" is generally an emotional +reaction on a mailing list, not an organizaed attempt at converting +people's thinking through lies and distortion (as was the original +article). + +Whereas your constant and predictable brandings of my postings are, to + my mind, a deliberate and reasoned effort to reduce debate, and + discourage left of center postngs. + +Owen + + + + diff --git a/Ch3/datasets/spam/easy_ham/00619.b2a33ba25583113a3d435bcbc8759244 b/Ch3/datasets/spam/easy_ham/00619.b2a33ba25583113a3d435bcbc8759244 new file mode 100644 index 000000000..21a1d572d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00619.b2a33ba25583113a3d435bcbc8759244 @@ -0,0 +1,70 @@ +From fork-admin@xent.com Wed Sep 18 14:06:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 54A4716F03 + for ; Wed, 18 Sep 2002 14:06:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 14:06:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8ICOeC29554 for ; + Wed, 18 Sep 2002 13:24:40 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C502129409F; Wed, 18 Sep 2002 05:21:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id BB5BC29409E for + ; Wed, 18 Sep 2002 05:20:52 -0700 (PDT) +Received: (qmail 19572 invoked by uid 501); 18 Sep 2002 12:24:02 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 18 Sep 2002 12:24:02 -0000 +From: CDale +To: Gary Lawrence Murphy +Cc: fork@spamassassin.taint.org +Subject: Re: boycotting yahoo +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 07:24:02 -0500 (CDT) + +Well I don't think China could force Yahoo! to give up info. So if they +are so willing to give it, why wouldn't they be willing to give info to +some silly group who may one day decide to get a hair up their ass about +the practice of BDSMers? (not to mention folks who don't even practice, +but who are just interested in information) What about folks who are +interested in talking about software security issues? Didja read about +the guy in China who got 11 years for downloading and printing out pro-democracy +info? +http://www.democracy.org.hk/EN/2002/aug/news_04.html +I'm confused about what you're confused about. +Cindy + +On 18 Sep 2002, Gary Lawrence Murphy wrote: + +> +> I'm a bit confused about this boycott thing. How is what China is +> doing any different than having Scientology and who ever else +> state-side who takes the whim evoking the DMCA to close down foreign +> sites they deem inappropriate? At least the Chinese make it voluntary +> and ask politely, rather than just sending legal musclemen first off. +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00620.8d1ccac5b4a36e47f5f168c19e6ac573 b/Ch3/datasets/spam/easy_ham/00620.8d1ccac5b4a36e47f5f168c19e6ac573 new file mode 100644 index 000000000..1fbd54531 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00620.8d1ccac5b4a36e47f5f168c19e6ac573 @@ -0,0 +1,67 @@ +From fork-admin@xent.com Wed Sep 18 17:43:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EA23316F03 + for ; Wed, 18 Sep 2002 17:43:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 17:43:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IGDeC06492 for ; + Wed, 18 Sep 2002 17:13:40 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3C54E2940E3; Wed, 18 Sep 2002 09:10:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from tisch.mail.mindspring.net (tisch.mail.mindspring.net + [207.69.200.157]) by xent.com (Postfix) with ESMTP id 459DC29409E for + ; Wed, 18 Sep 2002 09:09:05 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + tisch.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17rhQz-0003iE-00; + Wed, 18 Sep 2002 12:12:14 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: <3D885FE0.37C1C9EA@Golux.Com> +References: + <3D885FE0.37C1C9EA@Golux.Com> +To: Rodent of Unusual Size , + Flatware or Road Kill? +From: "R. A. Hettinga" +Subject: Re: boycotting yahoo +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 11:06:01 -0400 + +At 7:13 AM -0400 on 9/18/02, Rodent of Unusual Size wrote: + + +> SmartGroups, I think. + +Dave Farber's Interesting People list just went over to + + +Cheers, +RAH + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00621.2b161b5c7c09b45b568c1982ed49a008 b/Ch3/datasets/spam/easy_ham/00621.2b161b5c7c09b45b568c1982ed49a008 new file mode 100644 index 000000000..88d2aefeb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00621.2b161b5c7c09b45b568c1982ed49a008 @@ -0,0 +1,81 @@ +From fork-admin@xent.com Wed Sep 18 17:43:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 52A8916F03 + for ; Wed, 18 Sep 2002 17:43:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 17:43:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IGUdC07204 for ; + Wed, 18 Sep 2002 17:30:39 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3AB012940E5; Wed, 18 Sep 2002 09:27:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id EE98E29409E for ; + Wed, 18 Sep 2002 09:26:31 -0700 (PDT) +Received: (qmail 14126 invoked from network); 18 Sep 2002 16:26:35 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 18 Sep 2002 16:26:35 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 49CB21C2C4; + Wed, 18 Sep 2002 12:26:32 -0400 (EDT) +To: fork@spamassassin.taint.org +Subject: Re: [VoID] a new low on the personals tip... +References: <20020918104740.5A00BC44D@argote.ch> + <200209181145.50631.eh@mad.scientist.com> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 18 Sep 2002 12:26:32 -0400 + +>>>>> "E" == Eirikur Hallgrimsson writes: + + E> You just can't tell important things from a picture and a few + E> words. It's not how we are built. There's no geek code for + E> the heart and soul. + +Nor is there a Turing Test, even for someone with whom you've spent 11 +years, boom, bust and boom again, and 3 children (trust me) There is +no magic litmus test other than the totally empirical: "Try it and +see" + +"String bags full of oranges + And matters of the heart, + People laugh at /anything/ + And things just fall apart." + - michael leunig + +The only real test, the only /sensible/ test, is to look back and +realize your relationship has lasted 50 years and see no reason to +believe it couldn't last another 50. In the absense of 50 years of +actual (ahem) hands-on experiential data, a photo and a few words are +as good as any, provided you are prepared for the dynamics of it. + +Love is a verb. Sex is a /shared/ pursuit. There is no +'relation-ship', there is only the crew. sail away! + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00622.80ded6eb7b17a2bb45d502b85244dad1 b/Ch3/datasets/spam/easy_ham/00622.80ded6eb7b17a2bb45d502b85244dad1 new file mode 100644 index 000000000..492663fe3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00622.80ded6eb7b17a2bb45d502b85244dad1 @@ -0,0 +1,120 @@ +From fork-admin@xent.com Wed Sep 18 17:43:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1544E16F03 + for ; Wed, 18 Sep 2002 17:43:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 17:43:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IFmlC05232 for ; + Wed, 18 Sep 2002 16:48:48 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 579FF2940C5; Wed, 18 Sep 2002 08:45:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc52.attbi.com (rwcrmhc52.attbi.com [216.148.227.88]) + by xent.com (Postfix) with ESMTP id 92CFB29409E for ; + Wed, 18 Sep 2002 08:44:14 -0700 (PDT) +Received: from Intellistation ([66.31.2.27]) by rwcrmhc52.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020918154734.SMXN6128.rwcrmhc52.attbi.com@Intellistation> for + ; Wed, 18 Sep 2002 15:47:34 +0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Eirikur Hallgrimsson +Organization: Electric Brain +To: fork@spamassassin.taint.org +Subject: Re: [VoID] a new low on the personals tip... +User-Agent: KMail/1.4.1 +References: <20020918104740.5A00BC44D@argote.ch> +In-Reply-To: <20020918104740.5A00BC44D@argote.ch> +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200209181145.50631.eh@mad.scientist.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 11:45:50 -0400 + +On Wednesday 18 September 2002 06:47 am, Robert Harley wrote: +> ....and with the crucial hair feature enabled! + +That got a good laugh out of me. Just saying "crucial hair feature" +improves my day immeasurably. + +I've done a fair amount of thinking about the "media intermediated" meeting +thing. It seriously loses for reasons like Rohit's just encountered. +One is both rejected for trivial reasons and rejects for the same. +Some people loudly defend that these choices are not trivial. + +I'd have never met my best friend if I had to pick her out of a crowd for +getting to know. I was a teen at the time, but I won't say I'm much +improved at being able to spot "interesting" at a distance. Interesting +isn't an external thing. I have that brought home to me again every so +often. I may think that interesting people dress differently or whatever, +but that's total superstition. How do I know what your version of +creative attire is? Maybe it's purely functional. + +I was at a loud party recently, sufficiently loud that conversation of any +kind was extremely difficult, and intoxication was the norm. I was +working on what my algorithm for meeting people there should be and one of +the candidates was "women, in order of attractiveness." I flinched from +that, rather violently. At a trade show, or something, I might elect to +talk to the people who are looking at interesting exhibits. At a +party.....well, if you can't hear the conversation they are having, or if +on the net all you have is a photo..... + +You just can't tell important things from a picture and a few words. It's +not how we are built. There's no geek code for the heart and soul. +(And if there were people would lie and game the system.) +It's too easy to say "Oh, no! He's a geek!" or "She's a CAT person, +ick!" when you might have a great time together. + +We are constructed to form alliances based on how we fit together as +people, how we feel in the other person's company, how well we partner on +tasks and recreation. This is all entirely speculative based on nothing +but superstitious association unless you actually have time in the +person's company. Which is why we tend to be screwed when our circle of +exposure shrinks after school. + +Personally, as a writer, the whole internet meet & email thing ought to +work better for me than it does for other people, but interestingly, it +doesn't. I have to put out the same amount of effort and reap about the +same poor results. I have to think it's not the people, but the tool. + +An aside (okay, yes, I'm a tool geek): Speed Dating +Speed Dating (aka 7 Minute Dating) is a live-action stab at actual time in +the company of a variety of people, compressed into one event. I think +it's noticably better, but still absolutely nothing like working on a +project together, cooking, climbing a mountain or whatever. +It was, in fact, invented as a jewish thing seeking to match up the young +people to avoid total assimilation. It has too much "interview" context +and no shared activity beyond that. I give it several points for effort +though. + +I guess my impression that even the Speed Dating thing doesn't do much for +you means that the traditional advice of "join activities groups" is +actually sound. + +Eirikur + + + + + + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00623.37932984e4241279e60e9c28f7fd6706 b/Ch3/datasets/spam/easy_ham/00623.37932984e4241279e60e9c28f7fd6706 new file mode 100644 index 000000000..0c4bde933 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00623.37932984e4241279e60e9c28f7fd6706 @@ -0,0 +1,96 @@ +From fork-admin@xent.com Thu Sep 19 11:04:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EEB6716F03 + for ; Thu, 19 Sep 2002 11:04:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:04:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IH9dC08730 for ; + Wed, 18 Sep 2002 18:09:40 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AE2802940E9; Wed, 18 Sep 2002 10:06:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id 8967929409E for ; Wed, 18 Sep 2002 10:05:09 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id 80FA1C44D; + Wed, 18 Sep 2002 19:07:52 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: Defending Unliked Speech +Message-Id: <20020918170752.80FA1C44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 19:07:52 +0200 (CEST) + +Gordon Mohr quoted: +># French Writer Tried As Anti-Islam, Protest Erupts +># By Caroline Brothers +># +># PARIS (Reuters) - Provocative French novelist Michel Houellebecq +># faced a Paris court on Tuesday for allegedly inciting racial hatred +># by calling Islam "the stupidest religion" and its holy book the +># Koran a depressing read. +># +># The case, brought against him by four Muslim groups, is a cause +># celebre reminiscent of the Salman Rushdie affair, pitting freedom of +># expression against religious sensitivities. + +Very reminiscent indeed. Ayatollah Chirac has decreed a death +sentence on Houellebecq and liked-minded fundamentalists have offered +millions of euros bounty for his head, so he has gone into hiding +under police protection for a few years. + +Or maybe some handful of Muslims are acting uppity and dragging him to +court under "hate speech" laws make a point about people not showin' +dem da massive respect dat dey deserve, especially these days. + +Or maybe some journo is trying to fill column inches on a boring day. + + +BTW I read Houellebecq's "Extension du domaine de la lutte" recently, +about a depressed computer services dude working in Paris, looking for +love and not finding it, slowing losing his marbles and trying to get +a friend of his to kill a woman, and ending up in a clinic for +nutcases... Yikes! Purposely provocative, very depressing, with some +unbelievably boring passages where the anti-hero writes little stories +about animals talking philosophical mumbo-jumbo to each other, quoted +inline in full for pages on end. + +It starts out: + +"On Friday evening, I was invited to a party with some colleagues from +work. There were about thrity of us, all professionals aged from +twenty-five to forty. At one point, some cunt started getting +undressed. She took off her T-shirt, then her bra, then her skirt, all +the while making unbelievable faces. She pranced around for a few +seconds, then she started getting dresesd again because she didn't +know what else to do. Anyway she never sleeps with anyone. Which +underlines the absurdity of her behaviour. + +After my fourth glass of vodka I started to feel pretty bad so I had +to go lie down on a bunch of cushions behind the couch. Shortly after +that, two girls came and sat on the couch. Those girls are not pretty +at all, the two fat office cows actually. They go to eat together and +read books about the development of language in children, all that +sort of stuff." + +... and it's downhill from there! + + +R + + diff --git a/Ch3/datasets/spam/easy_ham/00624.2847b091fbcbd97af477c23439e0f22f b/Ch3/datasets/spam/easy_ham/00624.2847b091fbcbd97af477c23439e0f22f new file mode 100644 index 000000000..ca6089cce --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00624.2847b091fbcbd97af477c23439e0f22f @@ -0,0 +1,84 @@ +From fork-admin@xent.com Thu Sep 19 11:04:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 86B8616F16 + for ; Thu, 19 Sep 2002 11:04:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:04:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IHExC08992 for ; + Wed, 18 Sep 2002 18:15:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BFEED2940F2; Wed, 18 Sep 2002 10:08:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 053DF2940A9 for + ; Wed, 18 Sep 2002 10:07:13 -0700 (PDT) +Received: (qmail 23158 invoked by uid 501); 18 Sep 2002 17:10:17 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 18 Sep 2002 17:10:17 -0000 +From: CDale +To: Gary Lawrence Murphy +Cc: fork@spamassassin.taint.org +Subject: Re: [VoID] a new low on the personals tip... +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 12:10:17 -0500 (CDT) + +Hear hear, Gary. I'm living with a guy right now who I met at a party, +emailed with for 2 weeks, then powie! We were both looking at similar +goals in life in general, had some attraction for each other, and decided +to wing it. I can't say what's going to happen tomorrow, but right now, +and for the past few months, we've been happy. Onward Ho! (: +Cindy + +On 18 Sep 2002, Gary Lawrence Murphy wrote: + +> >>>>> "E" == Eirikur Hallgrimsson writes: +> +> E> You just can't tell important things from a picture and a few +> E> words. It's not how we are built. There's no geek code for +> E> the heart and soul. +> +> Nor is there a Turing Test, even for someone with whom you've spent 11 +> years, boom, bust and boom again, and 3 children (trust me) There is +> no magic litmus test other than the totally empirical: "Try it and +> see" +> +> "String bags full of oranges +> And matters of the heart, +> People laugh at /anything/ +> And things just fall apart." +> - michael leunig +> +> The only real test, the only /sensible/ test, is to look back and +> realize your relationship has lasted 50 years and see no reason to +> believe it couldn't last another 50. In the absense of 50 years of +> actual (ahem) hands-on experiential data, a photo and a few words are +> as good as any, provided you are prepared for the dynamics of it. +> +> Love is a verb. Sex is a /shared/ pursuit. There is no +> 'relation-ship', there is only the crew. sail away! +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00625.bc9f45777515eeeb8da0c8898c0526c4 b/Ch3/datasets/spam/easy_ham/00625.bc9f45777515eeeb8da0c8898c0526c4 new file mode 100644 index 000000000..696c06af9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00625.bc9f45777515eeeb8da0c8898c0526c4 @@ -0,0 +1,69 @@ +From fork-admin@xent.com Thu Sep 19 11:04:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id ED42216F03 + for ; Thu, 19 Sep 2002 11:04:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:04:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IHH0C09020 for ; + Wed, 18 Sep 2002 18:17:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A2CD82940F1; Wed, 18 Sep 2002 10:12:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from dream.darwin.nasa.gov (betlik.darwin.nasa.gov + [198.123.160.11]) by xent.com (Postfix) with ESMTP id 139AF29409E for + ; Wed, 18 Sep 2002 10:11:40 -0700 (PDT) +Received: from cse.ucsc.edu (paperweight.darwin.nasa.gov [198.123.160.27]) + by dream.darwin.nasa.gov ( -- Info omitted by ASANI Solutions, + LLC.) with ESMTP id g8IHF0h02719 for ; Wed, 18 Sep 2002 + 10:15:00 -0700 (PDT) +Message-Id: <3D88B494.1050702@cse.ucsc.edu> +From: Elias Sinderson +Reply-To: fork@spamassassin.taint.org +User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:0.9.4.1) + Gecko/20020518 Netscape6/6.2.3 +X-Accept-Language: en-us +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Re: [VoID] a new low on the personals tip... +References: <20020918104740.5A00BC44D@argote.ch> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 10:15:00 -0700 + +Perhaps we should start a grass roots movement here on FoRK and send the +nice lady a few emails on his behalf? Better yet, why don't we see on +who can write the best personals ad for Rohit? I'll post the best one to +Craigs' list on his behalf. The winner can take me out to dinner. (No, +really, I'm charming.) + +Elias + + +Robert Harley wrote: + +>Pity. Reading that woman's ad and knowing Rohit for years, they sound +>like a match made in heaven. But why, oh, why, keep that shaved-head +>photo on prominent display??? There are lots of photos of Rohit +>looking rather dashing, and with the crucial hair feature enabled! +> +>R +> + + + diff --git a/Ch3/datasets/spam/easy_ham/00626.349d4ef602ebce0ec03f1505989ab135 b/Ch3/datasets/spam/easy_ham/00626.349d4ef602ebce0ec03f1505989ab135 new file mode 100644 index 000000000..4faed043a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00626.349d4ef602ebce0ec03f1505989ab135 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Thu Sep 19 11:04:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 229DB16F03 + for ; Thu, 19 Sep 2002 11:04:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:04:53 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IHweC10151 for ; + Wed, 18 Sep 2002 18:58:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AA8072940A9; Wed, 18 Sep 2002 10:55:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 2B3C229409E for + ; Wed, 18 Sep 2002 10:54:02 -0700 (PDT) +Received: (qmail 12294 invoked by uid 508); 18 Sep 2002 17:57:04 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (62.155.144.50) by + venus.phpwebhosting.com with SMTP; 18 Sep 2002 17:57:04 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8IHvFP15382; Wed, 18 Sep 2002 19:57:15 + +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: Tom +Cc: CDale , + Gary Lawrence Murphy , +Subject: Re: boycotting yahoo +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 19:57:15 +0200 (CEST) + +On Wed, 18 Sep 2002, Tom wrote: + +> The others are on mailing list only status for now. A few of the +> groups I was in that are run by others are harder to deal with since +> many folks just dont want to have to deal with the inconvienence of a +> understanding. + +I've terminated a number of my own mailing lists at yahoogroups many +months ago because of similiar sentiments. I've tried lobbying other +people to move, but with about zero success. + +I've got currently only one own mailing list there, which I'm going to +move as soon as it is technically possible (which is my ISP's problem, +basically). After that, I intend to kick yahoogroups for good. + + diff --git a/Ch3/datasets/spam/easy_ham/00627.fcd38764f184dd61db99e15081590e7c b/Ch3/datasets/spam/easy_ham/00627.fcd38764f184dd61db99e15081590e7c new file mode 100644 index 000000000..ecc0ae21a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00627.fcd38764f184dd61db99e15081590e7c @@ -0,0 +1,130 @@ +From fork-admin@xent.com Thu Sep 19 11:04:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 44D5C16F03 + for ; Thu, 19 Sep 2002 11:04:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:04:55 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IIcfC11476 for ; + Wed, 18 Sep 2002 19:38:41 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 76BD12940AC; Wed, 18 Sep 2002 11:35:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hall.mail.mindspring.net (hall.mail.mindspring.net + [207.69.200.60]) by xent.com (Postfix) with ESMTP id F364929409E for + ; Wed, 18 Sep 2002 11:34:49 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + hall.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17rjiB-0006LF-00; + Wed, 18 Sep 2002 14:38:07 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: +References: <20020918104740.5A00BC44D@argote.ch> + <200209181145.50631.eh@mad.scientist.com> +To: fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: Re: [VoID] a new low on the personals tip... +Cc: Digital Bearer Settlement List +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 14:13:32 -0400 + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +I know it's not the popular choice for a lot of people, but I'd +suggest, um, church. :-). Like Woody Allen said, 90% of life is +showing up, right? + + +Almost anyone can find a church where the sermons don't make you bust +out laughing, and you're set. I, for instance, am a Unitarian, which, +as someone once observed, is merely a decompression chamber between a +real church and a golf course. (ObUUJokes: Mid 70's bumper-sticker: +"Honk if you're not sure"; Lenny Bruce: "Did you hear about how the +Klan burned a question mark on the Unitarian's lawn?"; "Unitarians +would rather go to a discussion group about heaven than to heaven +itself."; "Unitarians pray 'to whom it may concern'"; etc...) + +But, seriously, folks, my teenage-adopted denomination (I'm, um, +lapsed, on several fronts, a Dutch-Reformed-turned-atheist father and +an agnostic mother who used to be a southern Baptist of some stripe +or another) and frankly limousine liberal secular-humanist +congregation is about as orthogonal to my present +congenital-Republican small-l libertarian turned anarchocapitalist +politics as it is possible to be (except for the secular-humanist +bit...), and I still go pretty regularly, though not as much as I +used to. Heck, the older I get the less of the divine I believe in. +I'm asymptotically approaching my father's atheism, these days, and I +show up at least once a month. Nice folks though, when I can keep a +civil tongue in my head -- smart too, when I can't and end up arguing +with them. :-). + + +Anyway, if *I* can end up hitched, anyone can. Talk about orthogonal. +I met my practically-socialist state-education-bureaucrat wife one +year after I started, moved in with her 6 weeks later :-), married +her 2 years after that, and I wasn't even trying meet women. I was +just looking to make friends as I was new in town. + + +The trick to the church thing is, whatever denomination/congregation +you end up in, expect to end up with a mate, not a date. I mean, some +guys manage to stay single, but most, like me, don't. You can +practically see the laser-sights light up when you walk into a +room... + +That's because, of course, most churches are *run* by women. Most +regular attendants are women. Hell, 65% of all new *ministers*, in +protestant denominations, at least, are women. No matter your age, +looks, intelligence, whatever, you'll end up surrounded by women. +You'll be outnumbered, even several to one -- some of whom are at +least better looking than you are. :-). The only place where there +are *more* women running things is in grass-roots Republican politics +- -- but I won't go there, I promise. + + +If I may make a presumption here, since you brought it up, I figure +that between the sophistication and diversity of the subcontinent's +religions, and the ubiquity of Indians in various stages of +assimilation in So/NoCal, you can find some place to hang out near +you, Rohit. You probably don't even have to go, um, native, like I +did -- backsliding on my own ostensibly rational godless upbringing +and becoming, horrors, a Unitarian... + +Cheers, +RAH + +-----BEGIN PGP SIGNATURE----- +Version: PGP 7.5 + +iQA/AwUBPYjCBcPxH8jf3ohaEQI2vwCbB2UkMyii/XwKQvvJFSWlMMRheBsAmwUB +jDmfQrNRQED3LmW6V8YutN54 +=vQ/A +-----END PGP SIGNATURE----- + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00628.4a185fee450d8239cf82bee902dbd1af b/Ch3/datasets/spam/easy_ham/00628.4a185fee450d8239cf82bee902dbd1af new file mode 100644 index 000000000..053fb1c27 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00628.4a185fee450d8239cf82bee902dbd1af @@ -0,0 +1,76 @@ +From fork-admin@xent.com Thu Sep 19 11:04:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EAD0116F03 + for ; Thu, 19 Sep 2002 11:04:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:04:57 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IKQfC15006 for ; + Wed, 18 Sep 2002 21:26:42 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C09BF2940B3; Wed, 18 Sep 2002 13:23:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 51BD329409E for ; Wed, + 18 Sep 2002 13:22:05 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id AB1203ECF5; + Wed, 18 Sep 2002 16:29:40 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id A94CF3ECE9; Wed, 18 Sep 2002 16:29:40 -0400 (EDT) +From: Tom +To: "R. A. Hettinga" +Cc: fork@spamassassin.taint.org, Digital Bearer Settlement List +Subject: Re: [VoID] a new low on the personals tip... +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 16:29:40 -0400 (EDT) + +On Wed, 18 Sep 2002, R. A. Hettinga wrote: +--]I know it's not the popular choice for a lot of people, but I'd +--]suggest, um, church. :-). Like Woody Allen said, 90% of life is +--]showing up, right? +--] + +I think another venue for finding people is the workplace. As a contractor +I have had the opertunity to meet lots of eligables over the course of my +wandering workhistory. + +My wife was my Task Order Manager years ago, thats how we met. Her joke +is that she is still my Task Order Manager but now I dont get paid:)- + +By starting up your own companies or working in sterile thinklabs you are +cutting yourself off from one heck of a fertile ground for linkages....the +common office. + +I like the shurch idea as well. Other ideas... + +Book circles, geocaching groups, heck Rhorho your still young enough to +hit the campus mixers...and I mean the social stuff not the techtech +events. + + +Above all, ask yourself whats important to you.. + +Life, you either life it or you waste it. + + +-tom + + diff --git a/Ch3/datasets/spam/easy_ham/00629.370fec99ddca8da57ef5cb0bf30375e5 b/Ch3/datasets/spam/easy_ham/00629.370fec99ddca8da57ef5cb0bf30375e5 new file mode 100644 index 000000000..c76c70083 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00629.370fec99ddca8da57ef5cb0bf30375e5 @@ -0,0 +1,95 @@ +From fork-admin@xent.com Thu Sep 19 11:05:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C630516F03 + for ; Thu, 19 Sep 2002 11:05:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:05:00 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IMweC21024 for ; + Wed, 18 Sep 2002 23:58:41 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C67DD2940DF; Wed, 18 Sep 2002 15:55:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hall.mail.mindspring.net (hall.mail.mindspring.net + [207.69.200.60]) by xent.com (Postfix) with ESMTP id 671CB29409E for + ; Wed, 18 Sep 2002 15:54:31 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + hall.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17rnlR-0001Dl-00; + Wed, 18 Sep 2002 18:57:45 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: AA Meetings the Hottest Place to Meet Women With Big Bucks +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 18:39:11 -0400 + +Church, AA, same diff? + +;-). + +Cheers, +RAH + + +http://www.newsmax.com/archive/print.shtml?a=2002/9/18/161934 + +NewsMax.com + + + +Wednesday, September 18, 2002 + +AA Meetings the Hottest Place to Meet Women With Big Bucks + +If you're looking to hook up with female millionaires you could try some of +the classier restaurants or clubs, but the best place of all is a certain +New York City Alcoholics Anonymous meeting. + +According to a Details magazine story cited in the New York Post, "the No. +1 location to score a megabucks babe is an Alcoholics Anonymous center on +[New York's] Upper East Side. + +"It's the choicest meeting in town, right next to the Ralph Lauren store" +on Madison Avenue, which features "rich vulnerable women," the mag's +October issue says. + +AA officials were not overjoyed by having the address of their meeting +place published, or being cited as the "in" place for finding loaded women +- or rather, women who are loaded. + +"The purpose of our meetings is to let people share their experiences and +help others find sobriety. It is not a place to pick up women!" an AA +spokesman told The Post. + +O.K. + +Return + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00630.d4dad4b8734a30afbf8c80499e652c2c b/Ch3/datasets/spam/easy_ham/00630.d4dad4b8734a30afbf8c80499e652c2c new file mode 100644 index 000000000..6f370f4b3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00630.d4dad4b8734a30afbf8c80499e652c2c @@ -0,0 +1,52 @@ +From fork-admin@xent.com Thu Sep 19 11:05:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1B47316F03 + for ; Thu, 19 Sep 2002 11:05:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:05:03 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IN3qC21611 for ; + Thu, 19 Sep 2002 00:03:52 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E87962940F5; Wed, 18 Sep 2002 15:57:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 165692940F4 for ; Wed, + 18 Sep 2002 15:56:58 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id D14CC3EBC5; + Wed, 18 Sep 2002 19:04:34 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id CFCBC3EBB9; Wed, 18 Sep 2002 19:04:34 -0400 (EDT) +From: Tom +To: "R. A. Hettinga" +Cc: fork@spamassassin.taint.org +Subject: Re: AA Meetings the Hottest Place to Meet Women With Big Bucks +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 19:04:34 -0400 (EDT) + +On Wed, 18 Sep 2002, R. A. Hettinga wrote: + +--]Church, AA, same diff? + +AA is sort of church with ashtrays. + + + diff --git a/Ch3/datasets/spam/easy_ham/00631.585978ee5a109ebd04ea2289ddaa3f20 b/Ch3/datasets/spam/easy_ham/00631.585978ee5a109ebd04ea2289ddaa3f20 new file mode 100644 index 000000000..be9e026d5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00631.585978ee5a109ebd04ea2289ddaa3f20 @@ -0,0 +1,67 @@ +From fork-admin@xent.com Thu Sep 19 11:05:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1B49E16F03 + for ; Thu, 19 Sep 2002 11:05:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:05:05 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8IN9eC21950 for ; + Thu, 19 Sep 2002 00:09:41 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B797F2940EB; Wed, 18 Sep 2002 16:06:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 9746729409E for ; Wed, + 18 Sep 2002 16:05:43 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 8A8FB3EBC5; + Wed, 18 Sep 2002 19:13:20 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 8903A3EBB9; Wed, 18 Sep 2002 19:13:20 -0400 (EDT) +From: Tom +To: "R. A. Hettinga" +Cc: fork@spamassassin.taint.org +Subject: Re: AA Meetings the Hottest Place to Meet Women With Big Bucks +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 19:13:20 -0400 (EDT) + +On Wed, 18 Sep 2002, R. A. Hettinga wrote: +--]AA Meetings the Hottest Place to Meet Women With Big Bucks + +And, as always, you can take a page out of Fight Club and start showing up +at all sorts of support groups. Look what it did for Marla and Jack... + +"JACK You can't have *both* parasites. You take blood parasites and -- +MARLA I want brain parasites. +She opens another dryer and does the same thing again. PG 19 +JACK Okay. I'll take blood parasites and I'll take organic brain dementia +and -- +MARLA I want that. +JACK You can't have the whole brain! +MARLA So far, you have four and I have two! +JACK Well, then, take blood parasites. Now, we each have three. +MARLA So, we each have three -- that's six. What about the seventh day? I +want ascending bowel cancer. +JACK *I* want ascending bowel cancer. +MARLA That's your favorite, too? Tried to slip it by me, huh? +JACK We'll split it. You get it the first and third Sunday of the month. +MARLA Deal." + + diff --git a/Ch3/datasets/spam/easy_ham/00632.5aaf2a16e34b00ee971d17bd4343e61e b/Ch3/datasets/spam/easy_ham/00632.5aaf2a16e34b00ee971d17bd4343e61e new file mode 100644 index 000000000..59fd6780b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00632.5aaf2a16e34b00ee971d17bd4343e61e @@ -0,0 +1,96 @@ +From fork-admin@xent.com Thu Sep 19 11:05:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5FAB816F03 + for ; Thu, 19 Sep 2002 11:05:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:05:07 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8J1NgC30462 for ; + Thu, 19 Sep 2002 02:23:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3E8CE2940B8; Wed, 18 Sep 2002 18:20:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 0B49E29409E for ; + Wed, 18 Sep 2002 18:19:57 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17rq2g-0004zr-00; Wed, 18 Sep 2002 21:23:42 -0400 +From: "Geege Schuman" +To: "Tom" , "R. A. Hettinga" +Cc: +Subject: RE: AA Meetings the Hottest Place to Meet Women With Big Bucks +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 21:21:22 -0400 + +advice to the lovelorn haiku + +serendipity +pilots synchronicity: +turn the next corner. + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of Tom +Sent: Wednesday, September 18, 2002 7:13 PM +To: R. A. Hettinga +Cc: fork@spamassassin.taint.org +Subject: Re: AA Meetings the Hottest Place to Meet Women With Big Bucks + + +On Wed, 18 Sep 2002, R. A. Hettinga wrote: +--]AA Meetings the Hottest Place to Meet Women With Big Bucks + +And, as always, you can take a page out of Fight Club and start showing up +at all sorts of support groups. Look what it did for Marla and Jack... + +"JACK You can't have *both* parasites. You take blood parasites and -- +MARLA I want brain parasites. +She opens another dryer and does the same thing again. PG 19 +JACK Okay. I'll take blood parasites and I'll take organic brain dementia +and -- +MARLA I want that. +JACK You can't have the whole brain! +MARLA So far, you have four and I have two! +JACK Well, then, take blood parasites. Now, we each have three. +MARLA So, we each have three -- that's six. What about the seventh day? I +want ascending bowel cancer. +JACK *I* want ascending bowel cancer. +MARLA That's your favorite, too? Tried to slip it by me, huh? +JACK We'll split it. You get it the first and third Sunday of the month. +MARLA Deal." + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00633.a3d861bf0435fda936962c572ce0956a b/Ch3/datasets/spam/easy_ham/00633.a3d861bf0435fda936962c572ce0956a new file mode 100644 index 000000000..bed1ab5b7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00633.a3d861bf0435fda936962c572ce0956a @@ -0,0 +1,66 @@ +From fork-admin@xent.com Thu Sep 19 11:05:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A678E16F03 + for ; Thu, 19 Sep 2002 11:05:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:05:09 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8J1VfC30826 for ; + Thu, 19 Sep 2002 02:31:41 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 703832940F4; Wed, 18 Sep 2002 18:28:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from frodo.hserus.net (202-77-223-48.outblaze.com + [202.77.223.48]) by xent.com (Postfix) with ESMTP id 0E8DC29409E for + ; Wed, 18 Sep 2002 18:27:07 -0700 (PDT) +Received: from ppp-181-80.bng.vsnl.net.in ([203.197.181.80] + helo=rincewind.pobox.com) by frodo.hserus.net with asmtp (Exim 4.10) id + 17rq93-0006mA-00; Thu, 19 Sep 2002 09:30:21 +0800 +X-PGP-Dsskey: 0x55FAB8D3 +X-PGP-Rsakey: 0xCAA67415 +Message-Id: <5.1.0.14.2.20020918220930.02fa8c60@frodo.hserus.net> +X-Nil: +To: "R. A. Hettinga" , + Rodent of Unusual Size , + Flatware or Road Kill? +From: Udhay Shankar N +Subject: Re: boycotting yahoo +In-Reply-To: +References: <3D885FE0.37C1C9EA@Golux.Com> + + <3D885FE0.37C1C9EA@Golux.Com> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii"; format=flowed +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 22:10:35 +0530 + +At 11:06 AM 9/18/02 -0400, R. A. Hettinga wrote: + +>Dave Farber's Interesting People list just went over to +> + +It always was, I think. Meng Weng Wong, the founder of pobox, listbox et al +was a student of Dave Farber's. + +Listbox just upgraded its software, however. + +Udhay + +-- +((Udhay Shankar N)) ((udhay @ pobox.com)) ((www.digeratus.com)) + + diff --git a/Ch3/datasets/spam/easy_ham/00634.3215eb7dfc919ae5ca49520f9fcd43df b/Ch3/datasets/spam/easy_ham/00634.3215eb7dfc919ae5ca49520f9fcd43df new file mode 100644 index 000000000..fde5906df --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00634.3215eb7dfc919ae5ca49520f9fcd43df @@ -0,0 +1,100 @@ +From fork-admin@xent.com Thu Sep 19 11:05:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1E0ED16F16 + for ; Thu, 19 Sep 2002 11:05:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:05:13 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8J1adC31099 for ; + Thu, 19 Sep 2002 02:36:39 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 51F482940FD; Wed, 18 Sep 2002 18:29:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 1272D2940FC for ; + Wed, 18 Sep 2002 18:28:30 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17rqB4-0005Kn-00; Wed, 18 Sep 2002 21:32:22 -0400 +From: "Geege Schuman" +To: "Tom" , "R. A. Hettinga" +Cc: +Subject: RE: AA Meetings the Hottest Place to Meet Women With Big Bucks +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 21:30:02 -0400 + +less obscure haiku + +buy a puppy, ro! +they are chick magnets. master +ventriloquism. + +gg + + + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of Tom +Sent: Wednesday, September 18, 2002 7:13 PM +To: R. A. Hettinga +Cc: fork@spamassassin.taint.org +Subject: Re: AA Meetings the Hottest Place to Meet Women With Big Bucks + + +On Wed, 18 Sep 2002, R. A. Hettinga wrote: +--]AA Meetings the Hottest Place to Meet Women With Big Bucks + +And, as always, you can take a page out of Fight Club and start showing up +at all sorts of support groups. Look what it did for Marla and Jack... + +"JACK You can't have *both* parasites. You take blood parasites and -- +MARLA I want brain parasites. +She opens another dryer and does the same thing again. PG 19 +JACK Okay. I'll take blood parasites and I'll take organic brain dementia +and -- +MARLA I want that. +JACK You can't have the whole brain! +MARLA So far, you have four and I have two! +JACK Well, then, take blood parasites. Now, we each have three. +MARLA So, we each have three -- that's six. What about the seventh day? I +want ascending bowel cancer. +JACK *I* want ascending bowel cancer. +MARLA That's your favorite, too? Tried to slip it by me, huh? +JACK We'll split it. You get it the first and third Sunday of the month. +MARLA Deal." + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00635.b30f8636725812c0d15a96f31c07f8b6 b/Ch3/datasets/spam/easy_ham/00635.b30f8636725812c0d15a96f31c07f8b6 new file mode 100644 index 000000000..ccdfc4272 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00635.b30f8636725812c0d15a96f31c07f8b6 @@ -0,0 +1,110 @@ +From fork-admin@xent.com Thu Sep 19 11:05:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9A3FF16F03 + for ; Thu, 19 Sep 2002 11:05:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:05:15 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8J1ggC31403 for ; + Thu, 19 Sep 2002 02:42:42 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id EC6ED2940FB; Wed, 18 Sep 2002 18:39:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc51.attbi.com (rwcrmhc51.attbi.com [204.127.198.38]) + by xent.com (Postfix) with ESMTP id D5ED629409E; Wed, 18 Sep 2002 18:38:15 + -0700 (PDT) +Received: from [24.61.113.164] by rwcrmhc51.attbi.com (InterMail + vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020919014137.ZVCQ29827.rwcrmhc51.attbi.com@[24.61.113.164]>; + Thu, 19 Sep 2002 01:41:37 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <18198133428.20020918214126@magnesium.net> +To: fork-admin@xent.com, "Geege Schuman" +Cc: "Tom" , + "R. A. Hettinga" , fork@xent.com +Subject: Re[2]: AA Meetings the Hottest Place to Meet Women With Big Bucks +In-Reply-To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 21:41:26 -0400 + +And the ever popular... + + +Or bring a baby, +Provided you do not own, +Women come, at baby's cry. + + +GS> less obscure haiku + +GS> buy a puppy, ro! +GS> they are chick magnets. master +GS> ventriloquism. + +GS> gg + + + +GS> -----Original Message----- +GS> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of Tom +GS> Sent: Wednesday, September 18, 2002 7:13 PM +GS> To: R. A. Hettinga +GS> Cc: fork@spamassassin.taint.org +GS> Subject: Re: AA Meetings the Hottest Place to Meet Women With Big Bucks + + +GS> On Wed, 18 Sep 2002, R. A. Hettinga wrote: +GS> --]AA Meetings the Hottest Place to Meet Women With Big Bucks + +GS> And, as always, you can take a page out of Fight Club and start showing up +GS> at all sorts of support groups. Look what it did for Marla and Jack... + +GS> "JACK You can't have *both* parasites. You take blood parasites and -- +GS> MARLA I want brain parasites. +GS> She opens another dryer and does the same thing again. PG 19 +GS> JACK Okay. I'll take blood parasites and I'll take organic brain dementia +GS> and -- +GS> MARLA I want that. +GS> JACK You can't have the whole brain! +GS> MARLA So far, you have four and I have two! +GS> JACK Well, then, take blood parasites. Now, we each have three. +GS> MARLA So, we each have three -- that's six. What about the seventh day? I +GS> want ascending bowel cancer. +GS> JACK *I* want ascending bowel cancer. +GS> MARLA That's your favorite, too? Tried to slip it by me, huh? +GS> JACK We'll split it. You get it the first and third Sunday of the month. +GS> MARLA Deal." + + + + + + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00636.f15c6eabe3d5204cb8704b0a4b845403 b/Ch3/datasets/spam/easy_ham/00636.f15c6eabe3d5204cb8704b0a4b845403 new file mode 100644 index 000000000..e4de0e21c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00636.f15c6eabe3d5204cb8704b0a4b845403 @@ -0,0 +1,74 @@ +From fork-admin@xent.com Thu Sep 19 11:05:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E382516F03 + for ; Thu, 19 Sep 2002 11:05:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:05:17 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8J23fC32033 for ; + Thu, 19 Sep 2002 03:03:41 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 500572940F6; Wed, 18 Sep 2002 19:00:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (unknown [24.222.172.16]) by + xent.com (Postfix) with ESMTP id CFA1129409E for ; + Wed, 18 Sep 2002 18:59:22 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17rqbX-0006bn-00; Wed, 18 Sep 2002 22:59:43 -0300 +Message-Id: <3D893115.7070102@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.1) Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Tom +Cc: "R. A. Hettinga" , fork@spamassassin.taint.org, + Digital Bearer Settlement List +Subject: Re: [VoID] a new low on the personals tip... +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 23:06:13 -0300 + +Tom wrote: + +>On Wed, 18 Sep 2002, R. A. Hettinga wrote: +>--]I know it's not the popular choice for a lot of people, but I'd +>--]suggest, um, church. :-). Like Woody Allen said, 90% of life is +>--]showing up, right? +>--] +> +>I think another venue for finding people is the workplace. As a contractor +>I have had the opertunity to meet lots of eligables over the course of my +>wandering workhistory. +> +>My wife was my Task Order Manager years ago, thats how we met. Her joke +>is that she is still my Task Order Manager but now I dont get paid:)- +> +> +Sure if you're willing to risk firing, lawsuits, etc. The last full time +job I had the sexual harassement seminar +was pretty clear - yes you can have relationships at the office, but its +extremely difficult, and the pitfalls are +horrendous. + +Owen + + + + diff --git a/Ch3/datasets/spam/easy_ham/00637.0f0bbdfd5cab1e45883719f70f691862 b/Ch3/datasets/spam/easy_ham/00637.0f0bbdfd5cab1e45883719f70f691862 new file mode 100644 index 000000000..d444023f1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00637.0f0bbdfd5cab1e45883719f70f691862 @@ -0,0 +1,66 @@ +From fork-admin@xent.com Thu Sep 19 11:05:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0CA7C16F03 + for ; Thu, 19 Sep 2002 11:05:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:05:20 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8J28fC32196 for ; + Thu, 19 Sep 2002 03:08:42 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C75E0294100; Wed, 18 Sep 2002 19:05:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from dream.darwin.nasa.gov (betlik.darwin.nasa.gov + [198.123.160.11]) by xent.com (Postfix) with ESMTP id A7316294101 for + ; Wed, 18 Sep 2002 19:04:31 -0700 (PDT) +Received: from cse.ucsc.edu (paperweight.darwin.nasa.gov [198.123.160.27]) + by dream.darwin.nasa.gov ( -- Info omitted by ASANI Solutions, + LLC.) with ESMTP id g8J27rh04391 for ; Wed, 18 Sep 2002 + 19:07:53 -0700 (PDT) +Message-Id: <3D893179.4020208@cse.ucsc.edu> +From: Elias Sinderson +Reply-To: fork@spamassassin.taint.org +User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:0.9.4.1) + Gecko/20020518 Netscape6/6.2.3 +X-Accept-Language: en-us +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Re: [VoID] a new low on the personals tip... +References: + <3D893115.7070102@permafrost.net> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 19:07:53 -0700 + +This sort of thing is, in my (limited?) experience, increasingly a thing +of the past. Not one person I know has found it worth the risk to pursue +a relationship with someone in the workplace. It's terrible to think we +could litigate our way into extinction...! + +Elias + + +Owen Byrne wrote: + +> ... The last full time job I had the sexual harassement seminar +> was pretty clear - yes you can have relationships at the office, but +> its extremely difficult, and the pitfalls are horrendous. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00638.62a452b9264fb77572bb34181f71a325 b/Ch3/datasets/spam/easy_ham/00638.62a452b9264fb77572bb34181f71a325 new file mode 100644 index 000000000..869cc3a40 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00638.62a452b9264fb77572bb34181f71a325 @@ -0,0 +1,145 @@ +From irregulars-admin@tb.tf Thu Sep 19 11:05:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C15EC16F03 + for ; Thu, 19 Sep 2002 11:05:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:05:22 +0100 (IST) +Received: from web.tb.tf (route-64-131-126-36.telocity.com + [64.131.126.36]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8J2iJC01203 for ; Thu, 19 Sep 2002 03:44:24 +0100 +Received: from web.tb.tf (localhost.localdomain [127.0.0.1]) by web.tb.tf + (8.11.6/8.11.6) with ESMTP id g8J2rCI29343; Wed, 18 Sep 2002 22:53:20 + -0400 +Received: from red.harvee.home (red [192.168.25.1] (may be forged)) by + web.tb.tf (8.11.6/8.11.6) with ESMTP id g8J2qXI29333 for + ; Wed, 18 Sep 2002 22:52:49 -0400 +Received: from hall.mail.mindspring.net (hall.mail.mindspring.net + [207.69.200.60]) by red.harvee.home (8.11.6/8.11.6) with ESMTP id + g8J2hYD30568 for ; Wed, 18 Sep 2002 22:43:37 -0400 +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + hall.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17rrHn-00086k-00; + Wed, 18 Sep 2002 22:43:24 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: dcsb@ai.mit.edu, cryptography@wasabisystems.com, e$@vmeng.com, + mac_crypto@vmeng.com, + Digital Bearer Settlement List , fork@xent.com, + irregulars@tb.tf +From: "R. A. Hettinga" +Content-Type: text/plain; charset="us-ascii" +Subject: [IRR] [dgc.chat] First public release of NeuDist Distributed + Transaction Clearing Framework +Sender: irregulars-admin@tb.tf +Errors-To: irregulars-admin@tb.tf +X-Beenthere: irregulars@tb.tf +X-Mailman-Version: 2.0.6 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: New home of the TBTF Irregulars mailing list +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 22:42:35 -0400 + + +--- begin forwarded text + + +Subject: [dgc.chat] First public release of NeuDist Distributed Transaction +Clearing Framework +From: Pelle Braendgaard +To: dgcchat@lists.goldmoney.com +Cc: Digital Bearer Settlement List , DGCChat +, xmlx +Date: 19 Sep 2002 00:05:39 -0500 +Reply-To: + +I'm happy to announce the first public release of NeuDist + +NeuDist is an Open Source Software framework for building applications +for the Neubia Distributed Clearing Platform. + +This release contains early java libraries and documentation that would +primarily be of interest to developers. + +Talking about documentation, it is still a bit slim and mainly oriented +towards people with experience in Java/XML development. + +There are currently no sample applications, but they will be available +in the next release. + +The framework currently contains the following: +- Classes for creating "Named Objects", which are authenticated using +digital signatures within a hierarchy. +- Storage framework for "Named Objects". +- Simple XML-Signature implementation (Almost certainly not yet +interoperable with other implementations) +- Simple SOAP client +- Simple Servlet API for handling SOAP requests based on "Named + Objects". +- Current types of "Named Objects" include: + NameSpace objects -- for maintaining the NameSpace Authentication + Framework + AuthenticationTickets -- for doing web site authentication using + digital signatures. + + +Next major release is scheduled to contain: + - Core: + hard coded root public key, for authenticating top level NameSpaces + - Signing Services: + Implementation of web based signing services + End user hosted signing service + - Example User Authentication Application + - Example Payment System based on NeuDist + +I will be expanding the documentation over the next few weeks. This will +cover not only more indepth technical documentation, but also higher +level documentation about the business side of things. + +Read more about NeuDist or download our early version at +http://neudist.org +I would love to hear your questions and suggestions. To discuss it +further please join neudist-discuss@lists.sourceforge.net +You can join it at: +http://lists.sourceforge.net/mailman/listinfo/neudist-discuss + + +Regards +Pelle +-- +Antilles Software Ventures SA http://neubia.com/asv +My Web Log Live and Direct from Panama http://talk.org +Views of an EconoFist http://econofist.com + + + +subscribe: send blank email to dgcchat-join@lists.goldmoney.com +unsubscribe: send blank email to dgcchat-leave@lists.goldmoney.com +digest: send an email to dgcchat-request@lists.goldmoney.com +with "set yourname@yourdomain.com digest=on" in the message body + +--- end forwarded text + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' +_______________________________________________ +Irregulars mailing list +Irregulars@tb.tf +http://tb.tf/mailman/listinfo/irregulars + + diff --git a/Ch3/datasets/spam/easy_ham/00639.bf2aca6432694667dc120fff4224e5be b/Ch3/datasets/spam/easy_ham/00639.bf2aca6432694667dc120fff4224e5be new file mode 100644 index 000000000..75874aeb6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00639.bf2aca6432694667dc120fff4224e5be @@ -0,0 +1,319 @@ +From fork-admin@xent.com Thu Sep 19 11:05:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7CF0F16F03 + for ; Thu, 19 Sep 2002 11:05:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:05:28 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8J3eiC03141 for ; + Thu, 19 Sep 2002 04:40:45 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D81B92940FA; Wed, 18 Sep 2002 20:37:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav37.law15.hotmail.com [64.4.22.94]) by + xent.com (Postfix) with ESMTP id D033729409E for ; + Wed, 18 Sep 2002 20:36:12 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Wed, 18 Sep 2002 20:39:35 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +Subject: Oh ma gawd - funny site of the day... +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 19 Sep 2002 03:39:35.0500 (UTC) FILETIME=[2C6B00C0:01C25F8E] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 20:44:08 -0700 + +This is for those that have interacted with D Winer + +"Dave's idea of love is fucking everyone else without so much as a reach +around. You're supposed to just shut up and take it." + +http://winerlog.inspiredsites.net/ + +=========== + +Who's the real monster? + + +It seems good Ol' Uncle Dave is once again trying to savage anyone that +dares to disagree with him. It seems Ben, Kevin and Bill are making too +strong a case. So here we Dave's attempt to fool you into thinking they're +some sort of monsters, violent ones no less. + +Anyone who works with Hemenway or Kearney should be aware that these people +are nothing less than monsters, who will stoop to any level to get their +way. + +Yeah sure Dave, whatever you need to believe. + +The truth is these folks do a fine job of actually helping others and +improving RSS in general. Each with their own brand of attitude, to be +sure, but they seem to be pretty focused on actually helping things move +forward. How is that being monstrous? + +Is Dave trying to slander their good names and thus poison the public's +perception of them? If you haven't already, contact them and ask them how +they feel about this foolishness. + + + 9/18/02; 10:07:38 AM - Discuss + + + +Dave deflects what he can't take the time to understand + + +It's really quite pitiful. When normal people don't understand something +they usually try learning about it. They read up, ask questions and seek +the help of those that understand it. This before shooting their mouths off +and looking like fools. + +What Dave does is just the opposite. + +Posts a link to something he doesn't understand +Get's a bunch of e-mail from people who do understand it +Derides the idea as being 'too much trouble' and blogs it. +Expects others to do research for him +Abuses anyone who tries to help him +Pontificates, incorrectly, about only part of the issue +Realizes he's been a fool but refuses to correct himself +Plods forward pedantically trying to defend his idiocy +Tries making the educated people look like fools. +Sends private e-mails to them trying to scare them off. +Exposes any private e-mail they write, out of context. +Deflects and runs off to some new topic, repeats from #1 +His continued diatribes about RSS-1.0 and it's use of RDF reveal this to be +true. Dave doesn't get the idea of the semantic web. He'd rather have you +follow his stupid ideas than dare admit that the work of others is worth +trying. + +One reader wrote to us with a good analogy. "It's like that movie The +Poseidon Adventure. Dave's like the purser ranting and raving that the +passengers should follow him and march toward the bow. I don't know about +you but I'd rather be with the fat lady swimming toward the engine room. +The ship's fucking sinking and I don't want to be following the idiot." + +Dave's idea of love is fucking everyone else without so much as a reach +around. You're supposed to just shut up and take it. After all, why would +good ol' Uncle Dave want to hurt you? It's all about love, right? To hell +with asking you if you want to get shafted. And if you dare complain, he +savages you. Then he tries to make everyone think you're the one causing +all the trouble. + +We've news for you Dave, we're wise to your tactics and we're talking +amongst ourselves about it. We're routing around you damaging behavoir. +That's where we're coming from. + +If you have an example of how you've tried to help Dave, please drop us an +e-mail about it. We'll keep it strictly confidential of course. Send it +along to zaphod@egroups.com + + + 9/12/02; 10:13:11 AM - Discuss + + + + +Trying to talk with Dave is like trying to wrestle a pig... + + +The trouble is, you get dirty and the pig seems to like it. + +Another developer tries talking to Dave and discovers it's fundamentally +impossible: + +His basic response was just that RDF was a joke and the Semantic Web +developers are doing a terrible job. + +In the span of less than five minutes Dave makes such an ass of himself that +people at other tables start whispering "that guy is an idiot..." + +The zaphodim, however, are veteran pig wrestlers. If you've got a similar +tale from the mud pit, be sure to drop us a line at: zaphod@egroups.com. + + + 9/11/02; 2:17:58 PM - Discuss (1 response) + + + + +Aha! Some backing down by the whining one? + + +It would appear the 'dictator release' strategy that Dave's been trying on +his crappy little set of RSS hacks is failing to gain support. + +I'm going to push back the caveat-removing on the 2.0 spec by 24 hours. +Still have work to do on the sample file, I want to look into the RFC for +time-date specs, and get started on the Radio implementation of 2.0. I have +to prepare for Seybold tomorrow, and I want to a little memorial for 9-11. A +busy few days for a guy still recovering. Also, it would be great if people +who make content tools could review the 2.0 spec and see if there are any +deal-stoppers. + +Hell yeah there are deal stoppers, like nobody wants it nor will they use +it! + +The poor Radio customers! The poor Salon blog users! They're going to be +dragged unwillingly into producing XML content that nobody will use! So +with the flip of his mighty upgrade switch Dave is going to turn all their +content into totally unsupported garbage!!! + +Ya better speak up now folks otherwise your content is going to start +getting rejected! + +Of course at the same time Dave tries to play the sympathy card. What utter +fucking nonsense. This past weekend, the blogosphere excoriates him for his +'blame America' bullshit. Then the RSS community tells him to get stuffed +with his dictator release of RSS. Now he's trying to pretend we should be +nice to him because he's still recovering? + +Uh, Dave, if you want to take a rest from the battle then stop picking +fights. We'll still kick your ass regardless. That's what years of your +abusing people has gotten you Dave. No sympathy anymore, none whatsoever. + + + 9/11/02; 1:56:10 PM - Discuss + + + + +Dave is Scary on 9/11 + +Posted on Scripting News on 9/10/2002: + + +Note: During the day tomorrow there will be no updates to Scripting News. +I'll be in SF at Seybold, leading a discussion on Web Services for +Publishing with people from Amazon, Apple, Google and Jake Savin of +UserLand. I may be able to update my Radio weblog, but only if there's +something really important to report. So best wishes for a happy and safe +9-11. +What kind of asshole wishes people a happy 9/11??!?!?!?!??!! Obviously +someone who doesn't have a clue nor lost anyone in the tragedy. + + + 9/11/02; 7:56:06 AM - Discuss + + + + +Yeow and we though we were harsh! + + +Wow, apparently Dave's sticking his neck out quite far these days. Craig +Schamp practically keel-hauls him with this one. He wraps it up with: + +The man seems to show over and over that he's nothing more than a whining +buffoon + +Give that man an honorary Zaphodim membership card and secret decoder ring! + +Related links over at PhotoDude, Richard Bennett, Andrea Harris, Reid Stott, +Jeff Jarvis, Ipse Dixit, and the Fat Guy. + + + 9/9/02; 12:29:45 PM - Discuss + + + + +RSS 2.0: code name "Hitler" + + +If Dave tries to steamroll RSS 2.0 through without formal community +consensus, here now we call it the "Hitler" release of 2.0. + +"No objections"? No, he means "No objections I choose to hear." + +Dave is simply not listening. People are objecting all over. + + + + + 9/6/02; 9:00:02 AM - Discuss + + + + +Referral log funnies + + +Every now and then we check the referral logs to see what's pointing back to +us. We sincerely apologize to the pool soul that used this search. + + + 9/5/02; 12:15:07 PM - Discuss + + + + +Luserland Attempts to Trademark "RSS" + + +Dave has waxed and waned about intellectual property rights and how any +BigCo that tries to patent its technology or methods is corrupt or morally +bankrupt. Scripting News is full of examples. + +So we found it surprising, as did many others, when Luserland software tried +to patent the term 'RSS' back in 2000. Here's the patent application: + +http://tarr.uspto.gov/servlet/tarr?regser=serial&entry=78025336 + +This was apparently just between the start of the RSS 1.0 development +efforts, and the publication of the specification. Winer knew about the RSS +1.0 stuff - indeed, he complained about it bitterly at the time. + +Could Dave be any more transparent?!?!??!?!!!!!!! + +Since when has Dave been required to follow anything he says he wants others +to do??? A good quote from before he filed the patent application: + +Tim O'Reilly says patents are OK, he's just against stupid patents. In the +spirit of Touch of Grey, Tim man, patents are lock-in of the worst kind. +There's no way to route around them. + + 9/4/02; 6:06:51 AM - Discuss + + + + +When's a Permalink not a Permalink? + + +When Dave writes an item, then removes it!!!!!!!!!!! The permalink links to +nothing at that point. So apparently the "perma-" part in permalink is +permanent. For everyone except Dave. Too bad his little attempt at a +definition fails to mention this...!!!!!!!!! + + + 9/2/02; 6:16:03 PM - Discuss + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00640.bd6aaf961fe455813d6cd9448c29f312 b/Ch3/datasets/spam/easy_ham/00640.bd6aaf961fe455813d6cd9448c29f312 new file mode 100644 index 000000000..f5a59f53a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00640.bd6aaf961fe455813d6cd9448c29f312 @@ -0,0 +1,60 @@ +From fork-admin@xent.com Thu Sep 19 11:05:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6E4D416F03 + for ; Thu, 19 Sep 2002 11:05:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 11:05:32 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8J3vhC03678 for ; + Thu, 19 Sep 2002 04:57:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3F42B2940FE; Wed, 18 Sep 2002 20:54:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from red.totalnetnh.net (red.totalnetnh.net [63.173.138.18]) by + xent.com (Postfix) with ESMTP id 767C529409E for ; + Wed, 18 Sep 2002 20:53:53 -0700 (PDT) +Received: from [63.173.138.142] (s112.terminal3.totalnetnh.net + [63.173.138.142]) by red.totalnetnh.net (8.11.2/8.11.2/SuSE Linux + 8.11.1-0.5) with ESMTP id g8J3unx27395; Wed, 18 Sep 2002 23:56:53 -0400 +MIME-Version: 1.0 +Message-Id: +In-Reply-To: +References: +To: "Mr. FoRK" , +From: Morbus Iff +Subject: Re: Oh ma gawd - funny site of the day... +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 23:56:38 -0400 + +>It seems good Ol' Uncle Dave is once again trying to savage anyone that +>dares to disagree with him. It seems Ben, Kevin and Bill are making too +>strong a case. So here we Dave's attempt to fool you into thinking they're +>some sort of monsters, violent ones no less. +> +>Anyone who works with Hemenway or Kearney should be aware that these people +>are nothing less than monsters, who will stoop to any level to get their + +/me coughs... I'm part of the Monster club. They call me... Hemenway! + +-- +Morbus Iff ( i assault your sensibilities! ) +Culture: http://www.disobey.com/ and http://www.gamegrene.com/ +Tech: http://www.oreillynet.com/pub/au/779 - articles and weblog +icq: 2927491 / aim: akaMorbus / yahoo: morbus_iff / jabber.org: morbus + + diff --git a/Ch3/datasets/spam/easy_ham/00641.96719d053974ef201283237fc146f384 b/Ch3/datasets/spam/easy_ham/00641.96719d053974ef201283237fc146f384 new file mode 100644 index 000000000..dc0038049 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00641.96719d053974ef201283237fc146f384 @@ -0,0 +1,99 @@ +From fork-admin@xent.com Thu Sep 19 13:03:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0300E16F03 + for ; Thu, 19 Sep 2002 13:03:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 13:03:04 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JBnGC18091 for ; + Thu, 19 Sep 2002 12:49:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 73E31294101; Thu, 19 Sep 2002 04:42:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hughes-fe01.direcway.com (hughes-fe01.direcway.com + [66.82.20.91]) by xent.com (Postfix) with ESMTP id F25032940FF for + ; Thu, 19 Sep 2002 04:41:06 -0700 (PDT) +Received: from spinnaker ([64.157.35.6]) by hughes-fe01.direcway.com + (InterMail vK.4.04.00.00 201-232-137 license + dcc4e84cb8fc01ca8f8654c982ec8526) with ESMTP id + <20020919114459.OUTA977.hughes-fe01@spinnaker>; Thu, 19 Sep 2002 07:44:59 + -0400 +Subject: Re: Hanson's Sept 11 message in the National Review +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Cc: fork@spamassassin.taint.org +To: "Owen Byrne" +From: Chuck Murcko +In-Reply-To: <20020917173852.GB5613@www.NT-NETWORK> +Message-Id: <2404C790-CBC5-11D6-9930-003065F93D3A@topsail.org> +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 04:44:22 -0700 + +Heh, ten years ago saying the exact same words was most definitely not +"parroting the party line". + +It was even less so thirty years ago. My story remains the same, take it +or leave it. I've said the same words to white supremacists as to +suburban leftist punks as to homeys as to French Irish, etc. etc.: + +I don't have to agree with anything you say. I *am* obligated to defend +to the death your right to say it. I don't give a rat's ass where you +say it, even in France. I don't care where the political pendulum has +swung currently. + +Chuck + +On Tuesday, September 17, 2002, at 10:38 AM, Owen Byrne wrote: + +> On Tue, Sep 17, 2002 at 10:19:13AM -0700, Chuck Murcko wrote: +>> Probably because we have this pesky 1st Amendment thing here. Still, +>> lots of us in the States have developed a disturbing tendency to shout +>> down or (in recent years) shackle in legal BS opinions, thoughts, and +>> individual behaviors we don't agree with. +>> +> +> Except that parroting the party line doesn't really require much +> freedom of speech. Now if you had posted something from a left of +> center source, you would have been shouted down in flames, buried in +> ad hominem attacks, and probably get your name added to an FBI list. +> +> +> Besides the basic rule in the United States now is "I'll defend your +> rights to say anything you want, but if it isn't appropriately +> neoconish, well, don't expect to work": +> +> +> HHS Seeks Science Advice to Match Bush Views +> +> By Rick Weiss +> Washington Post Staff Writer +> Tuesday, September 17, 2002; Page A01 +> +> The Bush administration has begun a broad restructuring of the +> scientific advisory committees that guide federal policy in areas such +> as patients' rights and public health, eliminating some committees +> that were coming to conclusions at odds with the president's views and +> in other cases replacing members with handpicked choices. +> ... +> http://www.washingtonpost.com/wp-dyn/articles/A26554-2002Sep16.html +> +> Owen +> + + diff --git a/Ch3/datasets/spam/easy_ham/00642.19131d951ee16af5a157685213dbc7b8 b/Ch3/datasets/spam/easy_ham/00642.19131d951ee16af5a157685213dbc7b8 new file mode 100644 index 000000000..695c69250 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00642.19131d951ee16af5a157685213dbc7b8 @@ -0,0 +1,71 @@ +From fork-admin@xent.com Thu Sep 19 13:14:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E6F3016F03 + for ; Thu, 19 Sep 2002 13:14:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 13:14:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JC7hC18737 for ; + Thu, 19 Sep 2002 13:07:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2E69B2940FC; Thu, 19 Sep 2002 05:04:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id 4BE5029409E for + ; Thu, 19 Sep 2002 05:03:15 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17s01y-00081V-00; Thu, 19 Sep 2002 09:03:38 -0300 +Message-Id: <3D89BEA8.4010107@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.1) Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Chuck Murcko +Cc: fork@spamassassin.taint.org +Subject: Re: Hanson's Sept 11 message in the National Review +References: <2404C790-CBC5-11D6-9930-003065F93D3A@topsail.org> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 09:10:16 -0300 + +Chuck Murcko wrote: + +> Heh, ten years ago saying the exact same words was most definitely not +> "parroting the party line". +> +> It was even less so thirty years ago. My story remains the same, take +> it or leave it. I've said the same words to white supremacists as to +> suburban leftist punks as to homeys as to French Irish, etc. etc.: +> +> I don't have to agree with anything you say. I *am* obligated to +> defend to the death your right to say it. I don't give a rat's ass +> where you say it, even in France. I don't care where the political +> pendulum has swung currently. +> +> Chuck + + +I had to laugh at Rumsfield yesterday - when he was heckled by +protestors, he said something like "They couldn't do that in Iraq." +Meanwhile, from what I could tell, the protestors were being arrested. + +Owen + + + diff --git a/Ch3/datasets/spam/easy_ham/00643.25062169a6a9d2109b047a95c633f885 b/Ch3/datasets/spam/easy_ham/00643.25062169a6a9d2109b047a95c633f885 new file mode 100644 index 000000000..af64aff9f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00643.25062169a6a9d2109b047a95c633f885 @@ -0,0 +1,46 @@ +From fork-admin@xent.com Thu Sep 19 13:26:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DEA8516F03 + for ; Thu, 19 Sep 2002 13:26:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 13:26:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JCFfC18989 for ; + Thu, 19 Sep 2002 13:15:42 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B101E294108; Thu, 19 Sep 2002 05:12:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id 19FF329409E for ; Thu, 19 Sep 2002 05:11:32 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id CA1F9C44D; + Thu, 19 Sep 2002 14:14:06 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: Hanson's Sept 11 message in the National Review +Message-Id: <20020919121406.CA1F9C44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 14:14:06 +0200 (CEST) + +Chuck Murcko wrote: +>[...stuff...] + +Yawn. + +R + + diff --git a/Ch3/datasets/spam/easy_ham/00644.47e9eaa5c1cac5f991f30201ae7fda6e b/Ch3/datasets/spam/easy_ham/00644.47e9eaa5c1cac5f991f30201ae7fda6e new file mode 100644 index 000000000..5a5c5c650 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00644.47e9eaa5c1cac5f991f30201ae7fda6e @@ -0,0 +1,57 @@ +From fork-admin@xent.com Thu Sep 19 16:25:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C0BA816F03 + for ; Thu, 19 Sep 2002 16:25:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 16:25:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JDVmC21501 for ; + Thu, 19 Sep 2002 14:31:49 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9B7EB2940D5; Thu, 19 Sep 2002 06:28:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f100.law15.hotmail.com [64.4.23.100]) by + xent.com (Postfix) with ESMTP id 4D3A729409E for ; + Thu, 19 Sep 2002 06:27:22 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Thu, 19 Sep 2002 06:30:46 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Thu, 19 Sep 2002 13:30:45 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Re: AA Meetings the Hottest Place to Meet Women With Big Bucks +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 19 Sep 2002 13:30:46.0039 (UTC) FILETIME=[C281BA70:01C25FE0] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 13:30:45 +0000 + +R. A. Hettinga: +>Church, AA, same diff? + +It's difficult to measure which is the greater +liability in a potential mate, religiosity or +alcoholism. + + +_________________________________________________________________ +Join the world’s largest e-mail service with MSN Hotmail. +http://www.hotmail.com + + diff --git a/Ch3/datasets/spam/easy_ham/00645.2d95a6a89614625aafb7b333e799e111 b/Ch3/datasets/spam/easy_ham/00645.2d95a6a89614625aafb7b333e799e111 new file mode 100644 index 000000000..c98c024f3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00645.2d95a6a89614625aafb7b333e799e111 @@ -0,0 +1,65 @@ +From fork-admin@xent.com Thu Sep 19 16:25:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id ADC1216F03 + for ; Thu, 19 Sep 2002 16:25:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 16:25:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JDZqC21671 for ; + Thu, 19 Sep 2002 14:35:52 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D8CCB294159; Thu, 19 Sep 2002 06:32:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f174.law15.hotmail.com [64.4.23.174]) by + xent.com (Postfix) with ESMTP id A7D9629410C for ; + Thu, 19 Sep 2002 06:31:12 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Thu, 19 Sep 2002 06:34:36 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Thu, 19 Sep 2002 13:34:36 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Re: [VoID] a new low on the personals tip... +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 19 Sep 2002 13:34:36.0926 (UTC) FILETIME=[4C2049E0:01C25FE1] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 13:34:36 +0000 + +Owne Byrne: +>Sure if you're willing to risk firing, lawsuits, etc. The last full time +>job I had the sexual harassement seminar was pretty clear - yes you can +>have relationships at the office, but its extremely difficult, and the +>pitfalls are +>horrendous. + +Despite that, this is how a lot of couples meet. +People tease me about Carolyn, that I just hired +a lot of software engineering babes, and then +chose the one I liked best. ;-) + + + + + + +_________________________________________________________________ +Send and receive Hotmail on your mobile device: http://mobile.msn.com + + diff --git a/Ch3/datasets/spam/easy_ham/00646.866a1abeab0f141ef2de39b398134d0b b/Ch3/datasets/spam/easy_ham/00646.866a1abeab0f141ef2de39b398134d0b new file mode 100644 index 000000000..3fe31b3e9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00646.866a1abeab0f141ef2de39b398134d0b @@ -0,0 +1,72 @@ +From fork-admin@xent.com Thu Sep 19 16:25:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2750716F03 + for ; Thu, 19 Sep 2002 16:25:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 16:25:57 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JDdtC21726 for ; + Thu, 19 Sep 2002 14:39:56 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id EC3D9294109; Thu, 19 Sep 2002 06:36:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from imo-d07.mx.aol.com (imo-d07.mx.aol.com [205.188.157.39]) by + xent.com (Postfix) with ESMTP id 734B829409E for ; + Thu, 19 Sep 2002 06:35:45 -0700 (PDT) +Received: from ThosStew@aol.com by imo-d07.mx.aol.com (mail_out_v34.10.) + id 2.d3.11f46440 (4410) for ; Thu, 19 Sep 2002 09:39:00 + -0400 (EDT) +From: ThosStew@aol.com +Message-Id: +Subject: Re: Hanson's Sept 11 message in the National Review +Cc: fork@spamassassin.taint.org +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Mailer: AOL 5.0 for Mac sub 45 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 09:39:00 EDT + + +In a message dated 9/19/2002 7:46:37 AM, chuck@topsail.org writes: + +>That means *you* can't say anything may not be FoRKed or printed or +>whatever. You have the choice to ignore it + + +That's not what the First Amendment says at all. It says that Congress cannot +say what can't be FoRKed. FoRK can establish any rules it wants. Similarly, +The New York Times gets to choose what news IT thinks is "fit to print." If +the Times chose not to print anything about, say, Rosie O'Donnell, it would +be exercising its First Amendment rights, just as much as it would be if it +chose to print something Rosie O'Donnell doesn't like. The necessary +corollary of the freedom to say/publish what one wants is the freedom to +refuse to publish or say what one doesn't like. The alternative is a +state-controlled press that reprints government press releases and calls them +news. + +The question of what is or is not FoRKed is (except for libel or other +specific exceptions) not a matter of law, but a matter of what the +"publisher" (if any) decides or the "community" (if any) negotiates or does +as a matter of custom. + +For my part, I'd rather people didn't use FoRK as a place in which to dump an +expression of their political beliefs. + +Tom + + diff --git a/Ch3/datasets/spam/easy_ham/00647.7d9cd4058b01e8b7f5f788e7fc159aae b/Ch3/datasets/spam/easy_ham/00647.7d9cd4058b01e8b7f5f788e7fc159aae new file mode 100644 index 000000000..b5cc2a523 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00647.7d9cd4058b01e8b7f5f788e7fc159aae @@ -0,0 +1,69 @@ +From fork-admin@xent.com Thu Sep 19 16:26:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 81B3B16F03 + for ; Thu, 19 Sep 2002 16:26:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 16:26:01 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JDjkC21962 for ; + Thu, 19 Sep 2002 14:45:46 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8A413294167; Thu, 19 Sep 2002 06:39:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f91.law15.hotmail.com [64.4.23.91]) by + xent.com (Postfix) with ESMTP id B461629410C for ; + Thu, 19 Sep 2002 06:38:10 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Thu, 19 Sep 2002 06:41:34 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Thu, 19 Sep 2002 13:41:34 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Re: Hanson's Sept 11 message in the National Review +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 19 Sep 2002 13:41:34.0606 (UTC) FILETIME=[451532E0:01C25FE2] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 13:41:34 +0000 + +Robert Harley: +>>BTW, I wasn't aware that the 1st Amendment mandated that crap must be +>>FoRKed. + +Chuck Murcko : +>It doesn't, BTW. It says the right to free speech shall not be abridged. +>That means *you* can't say anything may not be FoRKed or printed or +>whatever. + +Actually, it means just the opposite. The first +amendment guarantees Harley's right to say just +that. For the outlets where he has editorial +control, it even guarantees his right to CENSOR +content published through those outlets. The +first amendment doesn't limit Harley's speech, +and it is neutral with regard to the selection +policies of FoRK and other private venues. + + + +_________________________________________________________________ +MSN Photos is the easiest way to share and print your photos: +http://photos.msn.com/support/worldwide.aspx + + diff --git a/Ch3/datasets/spam/easy_ham/00648.d3808dc202cff72d0326d74d23eaad17 b/Ch3/datasets/spam/easy_ham/00648.d3808dc202cff72d0326d74d23eaad17 new file mode 100644 index 000000000..1030b1250 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00648.d3808dc202cff72d0326d74d23eaad17 @@ -0,0 +1,176 @@ +From fork-admin@xent.com Thu Sep 19 16:26:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6208D16F03 + for ; Thu, 19 Sep 2002 16:26:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 16:26:06 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JDncC22056 for ; + Thu, 19 Sep 2002 14:49:38 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 77C9D294103; Thu, 19 Sep 2002 06:42:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta6.snfc21.pbi.net (mta6.snfc21.pbi.net [206.13.28.240]) + by xent.com (Postfix) with ESMTP id D878829409E for ; + Thu, 19 Sep 2002 06:41:09 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta6.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H2O004E9U695B@mta6.snfc21.pbi.net> for fork@xent.com; Thu, + 19 Sep 2002 06:44:33 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: Webex Endeavors +To: FoRK +Message-Id: <3D89D273.EE040F95@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 06:34:43 -0700 + +We have a partnership with Webex. We use their serivce +for cross-firewall app sharing--something that Netmeeting/Messenger +and Sametime require a lot of configuration of firewalls, +authentications, access controls and user training for. + +Now Webex has invites, instant meeting launch without any +configuration. Users like it as now they have something to do +in between Web conferences and places to store and author +documents, reschedule meetings, relaunch meetings. Webex likes +it as people are signed on all the time. + +Greg + + + +September 19, 2002 + + Tadpole's Secure Web Software Subsidiary Endeavors Technology Teams With Web + Meetings Leader WebEx Communications + To Provide Best-of-Breed Solution For Extended Group Collaboration During + and Between Online Meetings + + Web meetings raise the quality of team interaction and communications for + users of the Web's secure, P2P collaboration network + + ### + + Tadpole Technology plc, the mobile computing and network infrastructure + group, today announces that its web collaboration subsidiary, Endeavors + Technology, Inc., has teamed with Web meetings leader, WebEx + Communications,Inc. to help professionals make better use of corporate time + and resources, and gain competitive advantage. By integrating the advanced + communications capabilities of the WebEx platform with Endeavors' secure P2P + collaboration network, Endeavors has created a new method of world-class + teamwork and interaction without the hassle of travel. + + With the rapid growth in popularity of Web meetings, the rationale for this + world-class relationship stems from the growing need for workgroups around + the world to maintain the quality of the team collaboration experience + between online meetings. The issue by those preferring not to travel is how + to continue to collaborate and share information with team members between + meetings rather than depending on intermittent, insecure email and multiple + copies of constantly changing documents. + + Inter-meeting collaboration needs an asynchronous medium, independent of + time. In asynchronous mode, a team member can access, read and edit + information relevant to the meeting group at his/her convenience rather than + having to fit into the schedules and timeframes of others. A secured + environment available only to members of a meeting or project is also + essential. + + Endeavors' Magi technology converts the Web into a secure platform for + sharing information directly from people's desktops. WebEx meetings can be + recorded and reviewed at any time, documents shared in the meeting can be + actioned in real-time or at a later date, calendars and project schedules + can be updated at any time, and new individuals added to the workgroup at + will . all in a secure environment with people working across the globe, + inside or outside company firewalls. + + Magi peer collaboration securely delivers significant benefits to Web + meeting participants. Not only can they share and access information at + will, but they can also know which other participants are online or + "present." This enables them to chat and message each other, search across + other people's Magi environment, and work jointly on relevant documents + highly productively. With Magi collaboration, in tandem with WebEx + conferencing, the savings can be huge in terms of travel costs, phone bills, + and, most importantly, timely completion of projects and tasks. + + "In order to realise the full potential of Web meetings, best-of-breed + services are needed to eliminate time and geographical boundaries," says + Bernard Hulme, Tadpole's group chief executive. "The powerful combination + of Endeavors' Magi and WebEx's communications technologies will assist + global work teams to better meet critical business goals and deadlines by + maintaining teamwork momentum within and between Web meetings." + + "WebEx is transforming the way businesses use the Web for sales, marketing, + training, support and product design," says David Farrington, vice president + of corporate development at WebEx Communications. "By integrating the + communications capabilities of the WebEx platform with Endeavors' secure + collaboration network, Endeavors has created an offering that provides the + best in synchronous and asynchronous communications." + + About Magi + Magi Enterprise 3.0, an award-winning web collaboration system, transforms + today's Web into a highly secure inter- and intra-enterprise collaboration + network of files and web resources. For the first time, enterprises can + implement ad-hoc Virtual Private Networks for collaboration very rapidly and + affordably without disrupting existing applications, networks or work + practices. Magi Enterprise 3.0 does this by effectively transforming + unsecured, "read-only" Web networks into two-way trusted and transparent + collaboration environments, through the use of such features as + cross-firewall connections, advanced data extraction, an intuitive graphical + interface, and universal name spaces generating "follow me URLs" for mobile + professionals. + + About Endeavors Technology, Inc. + Endeavors Technology, Inc. is a wholly-owned subsidiary of mobile computing + and network infrastructure vendor Tadpole Technology plc (LSE-TAD, + www.tadpole.com), which has plants and offices in Irvine and Carlsbad + (California), and Cambridge, Edinburgh, and Bristol (UK). For further + information on Endeavors' P2P solutions, call 949-833-2800, email to + p2p@endeavors.com, or visit the company's website http://www.endeavors.com. + + ends + + For further information, please contact: + + Bernard Hulme, Tadpole Technology - via Patcom Media + Hugh Paterson, Patcom Media - Tel 0207 987 4888, Email + hughp@patcom-media.com + + Bullets for Editors + + WebEx + Web communications services (synchronous): network-based platform for + delivering highly interactive, visually dynamic Web communications. The + WebEx platform supports real-time data, voice and video communications. + WebEx is the only company to design, develop and deploy a global network for + real-time Web communications. + + Magi + On and off-line (asynchronous) communication and collaboration: cross + enterprise search and discovery, transparent security and trust (SSL & PKI), + 2-way web access to files and applications, permanent cross firewall access, + ad hoc and permanent secure groups, centralized or decentralized control of + access lists and security privileges, centralized caching of information + (never lose anything critical), multi-device access to information (desktop, + laptop, PDA). + + diff --git a/Ch3/datasets/spam/easy_ham/00649.b630711c0f63812f552cbe85b22f4568 b/Ch3/datasets/spam/easy_ham/00649.b630711c0f63812f552cbe85b22f4568 new file mode 100644 index 000000000..735c484ab --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00649.b630711c0f63812f552cbe85b22f4568 @@ -0,0 +1,66 @@ +From fork-admin@xent.com Thu Sep 19 16:26:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6E20216F03 + for ; Thu, 19 Sep 2002 16:26:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 16:26:13 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JEQhC23271 for ; + Thu, 19 Sep 2002 15:26:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A5FE92940B5; Thu, 19 Sep 2002 07:23:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from ns.archangelintelligence.com (ns.archangelintelligence.com + [217.199.170.171]) by xent.com (Postfix) with ESMTP id AB98829409E for + ; Thu, 19 Sep 2002 07:22:55 -0700 (PDT) +Received: from benhammersley.com ([193.122.23.52]) by + ns.archangelintelligence.com (8.11.0/8.11.0) with ESMTP id g8JEQ5B06828 + for ; Thu, 19 Sep 2002 15:26:05 +0100 +Subject: Re: Avast there matey +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v546) +Cc: +From: Ben Hammersley +Content-Transfer-Encoding: 7bit +In-Reply-To: +Message-Id: +X-Mailer: Apple Mail (2.546) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 15:26:18 +0100 + + +On Thursday, Sep 19, 2002, at 14:51 Europe/London, Bill Kearney wrote: + +>> From the completely unrelated but funny department... +> +> "Talk like a Pirate Day". +> http://www.washingtonpost.com/wp-dyn/articles/A5011-2002Sep11.html +> +> Which is today, of course. +> +> That and 'piratecore' rapping style... +> http://poorman.blogspot.com/2002_09_01_poorman_archive.html#81798893 +> +> Anything, just anything, to get us off the geek dating tips topic.... +> +> -Bill Kearney +> + + +Arrr, he be a scurvy dog, that Bill Kearney. + + diff --git a/Ch3/datasets/spam/easy_ham/00650.2c20a3ae4da8ff5186f738ee5d833fda b/Ch3/datasets/spam/easy_ham/00650.2c20a3ae4da8ff5186f738ee5d833fda new file mode 100644 index 000000000..d92836f88 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00650.2c20a3ae4da8ff5186f738ee5d833fda @@ -0,0 +1,102 @@ +From fork-admin@xent.com Thu Sep 19 16:26:17 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 18B1C16F03 + for ; Thu, 19 Sep 2002 16:26:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 16:26:16 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JF2nC24198 for ; + Thu, 19 Sep 2002 16:02:49 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 67EEA2940FF; Thu, 19 Sep 2002 07:59:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id F41F129409E for + ; Thu, 19 Sep 2002 07:58:58 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17s2m3-0008OH-00 for ; Thu, 19 Sep 2002 11:59:23 -0300 +Message-Id: <3D89E7DD.6010506@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.1) Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Re: Avast there matey +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 12:06:05 -0300 + +Ben Hammersley wrote: + +> +> On Thursday, Sep 19, 2002, at 14:51 Europe/London, Bill Kearney wrote: +> +>>> From the completely unrelated but funny department... +>> +>> +>> "Talk like a Pirate Day". +>> http://www.washingtonpost.com/wp-dyn/articles/A5011-2002Sep11.html +>> +>> Which is today, of course. +>> +>> That and 'piratecore' rapping style... +>> http://poorman.blogspot.com/2002_09_01_poorman_archive.html#81798893 +>> +>> Anything, just anything, to get us off the geek dating tips topic.... +>> +>> -Bill Kearney +>> +> +> +> Arrr, he be a scurvy dog, that Bill Kearney. + +Well, shiver me timbers, but my favorite pirate phrase is missing from +both of those.Arrr.... +and wondering if there's a rap equivalent. +Owen + +http://www.quinion.com/words/qa/qa-shi2.htm +*Q AND A SECTION* + +*SHIVER MY TIMBERS* + +/From Tad Spencer/: "Please could you tell me where the phrase /shiver +my timbers/ originated?" + +This is one of those supposedly nautical expressions that seem to be +better known through a couple of appearances in fiction than by any +actual sailors' usage. + +It's an exclamation that may allude to a ship striking some rock or +other obstacle so hard that her timbers shiver, or shake, so implying a +calamity has occurred. It is first recorded as being used by Captain +Frederick Marryat in /Jacob Faithful/ in 1835: "I won't thrash you Tom. +Shiver my timbers if I do". + +It has gained a firm place in the language because almost fifty years +later Robert Louis Stevenson found it to be just the kind of old-salt +saying that fitted the character of Long John Silver in /Treasure +Island/: "Cross me, and you'll go where many a good man's gone before +you ... some to the yard-arm, shiver my timbers, and some by the board, +and all to feed the fishes". Since then, it's mainly been the preserve +of second-rate seafaring yarns. + + + diff --git a/Ch3/datasets/spam/easy_ham/00651.10adacfbcf0526d9aa331dbecc1a9509 b/Ch3/datasets/spam/easy_ham/00651.10adacfbcf0526d9aa331dbecc1a9509 new file mode 100644 index 000000000..ee79e1a05 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00651.10adacfbcf0526d9aa331dbecc1a9509 @@ -0,0 +1,65 @@ +From fork-admin@xent.com Thu Sep 19 16:26:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A41F016F16 + for ; Thu, 19 Sep 2002 16:26:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 16:26:18 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JF7oC24538 for ; + Thu, 19 Sep 2002 16:07:50 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1EFA3294160; Thu, 19 Sep 2002 08:01:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (unknown [63.145.31.2]) by xent.com (Postfix) + with ESMTP id C194D29413C for ; Thu, 19 Sep 2002 08:00:06 + -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Thu, 19 Sep 2002 15:02:14 -08:00 +Message-Id: <3D89E6F6.2060105@barrera.org> +From: "Joseph S. Barrera III" +Organization: NERV +User-Agent: Mutt 5.00.2919.6900 DM (Nigerian Scammer Special Edition) +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: Geege Schuman +Cc: Tom , "R. A. Hettinga" , + fork@xent.com +Subject: Re: AA Meetings the Hottest Place to Meet Women With Big Bucks +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 08:02:14 -0700 + +Geege Schuman wrote: +> less obscure haiku +> +> buy a puppy, ro! +> they are chick magnets. master +> ventriloquism. + +Reminds me of a Gary Larson cartoon, +woman walking dog, man walking aligator, +dog mostly eaten by aligator, thought cloud +above man's head, +"This is *such* a great way to meet chicks!" + +- Joe + + + + diff --git a/Ch3/datasets/spam/easy_ham/00652.dde353b33fdd09f8daa33ffcdb016188 b/Ch3/datasets/spam/easy_ham/00652.dde353b33fdd09f8daa33ffcdb016188 new file mode 100644 index 000000000..ae0d9e913 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00652.dde353b33fdd09f8daa33ffcdb016188 @@ -0,0 +1,76 @@ +From fork-admin@xent.com Thu Sep 19 16:26:21 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 81D5616F03 + for ; Thu, 19 Sep 2002 16:26:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 16:26:20 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JFFhC24825 for ; + Thu, 19 Sep 2002 16:15:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7F83F29410F; Thu, 19 Sep 2002 08:12:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id B42C529409E for ; Thu, + 19 Sep 2002 08:11:23 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id AB4F13ED70; + Thu, 19 Sep 2002 11:19:06 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id A9BD83ED53; Thu, 19 Sep 2002 11:19:06 -0400 (EDT) +From: Tom +To: "Mr. FoRK" +Cc: fork@spamassassin.taint.org +Subject: Re: Oh ma gawd - funny site of the day... +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 11:19:06 -0400 (EDT) + + +Ahhhh Dave Winer..Seems like only yesterday fork was knee deep in +winerrants..hes gone away though...so sad (insert real honest to goshness +tears) + +But the past live on...in the archives... + +Remeber when Dave was being betrayed by O'Reilly? +http://www.xent.com/aug00/0725.html + + +On "closed source" justifications +http://www.xent.com/FoRK-archive/sept00/0346.html + + +Daves trys to grok fork +http://www.xent.com/FoRK-archive/sept00/0953.html + + +NT runs just as good as linux...really +http://www.xent.com/aug00/0069.html + +There are a few months of this stuff (just google or forkcrawl the +archives) then he got truly fedup with all our not polite unfresh +thinking and went silent, for the most part. + +oh well, back to life. + +-tom + + + diff --git a/Ch3/datasets/spam/easy_ham/00653.5bf375439fd118575f08b85000c0d3c7 b/Ch3/datasets/spam/easy_ham/00653.5bf375439fd118575f08b85000c0d3c7 new file mode 100644 index 000000000..f6c8b8f55 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00653.5bf375439fd118575f08b85000c0d3c7 @@ -0,0 +1,89 @@ +From fork-admin@xent.com Thu Sep 19 17:50:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 86DA316F03 + for ; Thu, 19 Sep 2002 17:50:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 17:50:29 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JFTpC25473 for ; + Thu, 19 Sep 2002 16:29:53 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id F2EFD2940C2; Thu, 19 Sep 2002 08:26:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id 548702940C2 for ; + Thu, 19 Sep 2002 08:25:44 -0700 (PDT) +Received: from sashimi (dmz-firewall [206.199.198.4]) by Boron.MeepZor.Com + (8.11.6/8.11.6) with SMTP id g8JFT5i25255; Thu, 19 Sep 2002 11:29:05 -0400 +From: "Bill Stoddard" +To: "Owen Byrne" , + "Fork@Xent.Com" +Subject: RE: Hanson's Sept 11 message in the National Review +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <3D89BEA8.4010107@permafrost.net> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 11:11:47 -0400 + + +> Chuck Murcko wrote: +> +> > Heh, ten years ago saying the exact same words was most definitely not +> > "parroting the party line". +> > +> > It was even less so thirty years ago. My story remains the same, take +> > it or leave it. I've said the same words to white supremacists as to +> > suburban leftist punks as to homeys as to French Irish, etc. etc.: +> > +> > I don't have to agree with anything you say. I *am* obligated to +> > defend to the death your right to say it. I don't give a rat's ass +> > where you say it, even in France. I don't care where the political +> > pendulum has swung currently. +> > +> > Chuck +> +> +> I had to laugh at Rumsfield yesterday - when he was heckled by +> protestors, he said something like "They couldn't do that in Iraq." +> Meanwhile, from what I could tell, the protestors were being arrested. +> +> Owen + +Trying to shoutdown a speaker or being loud and rowdy while someone else is +trying to speak (in the vernacular, 'getting in their face') is rude and +disrespectful. And persistently getting in someones face is assault, a +criminal offense. If these people have something to say, they can say it +with signs or get their own venue. And here is something else to chew on... +these protesters are NOT interested in changing anyones mind about what +Rumsfield is saying. How likely are you to change someone's mind by being +rude and disrespectful to them? Is this how to win friends and influence +people? Either these folks are social misfits who have no understanding of +human interactions (else they would try more constructive means to get their +message across) or they are just out to get their rocks off regardless of +how it affects other people, and that is immoral at best and downright evil +at worst. + +Bill + + diff --git a/Ch3/datasets/spam/easy_ham/00654.820dea38bee9162874d734e791ef5ab9 b/Ch3/datasets/spam/easy_ham/00654.820dea38bee9162874d734e791ef5ab9 new file mode 100644 index 000000000..4db46948f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00654.820dea38bee9162874d734e791ef5ab9 @@ -0,0 +1,114 @@ +From fork-admin@xent.com Thu Sep 19 17:50:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8C79916F03 + for ; Thu, 19 Sep 2002 17:50:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 17:50:36 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JFkqC26250 for ; + Thu, 19 Sep 2002 16:46:55 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BD75F29416E; Thu, 19 Sep 2002 08:43:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id C11E529409E for + ; Thu, 19 Sep 2002 08:42:40 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17s3SH-0008U3-00; Thu, 19 Sep 2002 12:43:01 -0300 +Message-Id: <3D89F216.1000807@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.1) Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Bill Stoddard +Cc: "Fork@Xent.Com" +Subject: Re: Hanson's Sept 11 message in the National Review +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 12:49:42 -0300 + +Bill Stoddard wrote: + +>>Chuck Murcko wrote: +>> +>> +>> +>>>Heh, ten years ago saying the exact same words was most definitely not +>>>"parroting the party line". +>>> +>>>It was even less so thirty years ago. My story remains the same, take +>>>it or leave it. I've said the same words to white supremacists as to +>>>suburban leftist punks as to homeys as to French Irish, etc. etc.: +>>> +>>>I don't have to agree with anything you say. I *am* obligated to +>>>defend to the death your right to say it. I don't give a rat's ass +>>>where you say it, even in France. I don't care where the political +>>>pendulum has swung currently. +>>> +>>>Chuck +>>> +>>> +>>I had to laugh at Rumsfield yesterday - when he was heckled by +>>protestors, he said something like "They couldn't do that in Iraq." +>>Meanwhile, from what I could tell, the protestors were being arrested. +>> +>>Owen +>> +>> +> +>Trying to shoutdown a speaker or being loud and rowdy while someone else is +>trying to speak (in the vernacular, 'getting in their face') is rude and +>disrespectful. And persistently getting in someones face is assault, a +>criminal offense. If these people have something to say, they can say it +>with signs or get their own venue. And here is something else to chew on... +>these protesters are NOT interested in changing anyones mind about what +>Rumsfield is saying. How likely are you to change someone's mind by being +>rude and disrespectful to them? Is this how to win friends and influence +>people? Either these folks are social misfits who have no understanding of +>human interactions (else they would try more constructive means to get their +>message across) or they are just out to get their rocks off regardless of +>how it affects other people, and that is immoral at best and downright evil +>at worst. +> +>Bill +> +> +Polite and respectful protest is acceptable then. No dumping tea in the +harbour or anything like that. +I think the primary purpose of loud and rowdy protests is to get on +television, and that the tactics can be +justified as a reaction to a systematic removal of alternative +viewpoints from that medium. On the other hand, +it was a priceless TV moment. There was nothing resembling assault, and +the protestors were not in anybody's face +(at least in my understanding of the vernacular). + +And no, being rude and disrespectful is not the way to influence +politicians, but the standard way of using lobbyists and +writing checks is beyond many of us. + +Owen + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00655.cf1f1255898932a567c5f7c39faab3b9 b/Ch3/datasets/spam/easy_ham/00655.cf1f1255898932a567c5f7c39faab3b9 new file mode 100644 index 000000000..09a9a96bb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00655.cf1f1255898932a567c5f7c39faab3b9 @@ -0,0 +1,82 @@ +From fork-admin@xent.com Thu Sep 19 17:50:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A2B6116F03 + for ; Thu, 19 Sep 2002 17:50:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 17:50:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JGmiC28731 for ; + Thu, 19 Sep 2002 17:48:44 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id CEC0A29409E; Thu, 19 Sep 2002 09:45:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id CB36C29409C for ; Thu, + 19 Sep 2002 09:44:34 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id AC1843ED7B; + Thu, 19 Sep 2002 12:52:17 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id AA7183ED76; Thu, 19 Sep 2002 12:52:17 -0400 (EDT) +From: Tom +To: Bill Stoddard +Cc: Owen Byrne , "Fork@Xent.Com" +Subject: RE: Hanson's Sept 11 message in the National Review +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 12:52:17 -0400 (EDT) + +On Thu, 19 Sep 2002, Bill Stoddard wrote: +--]How likely are you to change someone's mind by being +--]rude and disrespectful to them? Is this how to win friends and influence +--]people? + +Point the first, I doubt if they are trying to change Rumsy's mind but +rather to show others that there is a vocal and violent opposition to his +views. With such flagrant showings of opposition there would be more +coverage of the opposing ideas and thus the spreading of the dissenting +meme. A viri need not comply with the wishes of the attacked host, rather +the host had better make some antibodies or learn to adapt. + +Point the second. Historicaly the "in yer face" mode of confrontation has +been used to gain popular support and to grow from seeds "grass roots" +movements. Witness the big bold "in yer face" signature of Hancock on the +"in yer face" Declaration of the american colonies to the governing +powers of england. Witness also the chicago seven, Others will follow in +examplare form upon digging. + +Now point the third, is it annoying? Yes, and if your annoyed then the "in +yer facers" have done thier job. Sad to say the polite persnikiters are +teh very fule the "in yer facers" hope to ignite. If your burning, your +being used. + +Pointed the personal...The politics of the polite are more often the +refuge of backstabings, closed mouth recourlessness and hypocritcal +behavoirs. Id rather hear what those who oppose me have to say than +quietly be knifed by the slow hand of the coward. + + + +Seek not the polite or impolite but rather the reasons why. + + +-tom + + + diff --git a/Ch3/datasets/spam/easy_ham/00656.7d0db073b656ae5ecd234e0c59e97623 b/Ch3/datasets/spam/easy_ham/00656.7d0db073b656ae5ecd234e0c59e97623 new file mode 100644 index 000000000..0247735dc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00656.7d0db073b656ae5ecd234e0c59e97623 @@ -0,0 +1,79 @@ +From fork-admin@xent.com Fri Sep 20 11:32:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A7A0316F03 + for ; Fri, 20 Sep 2002 11:32:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:32:29 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JHLgC29973 for ; + Thu, 19 Sep 2002 18:21:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id EBFB229410C; Thu, 19 Sep 2002 10:18:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from panacea.canonical.org (ns1.canonical.org [209.115.72.29]) + by xent.com (Postfix) with ESMTP id B0D0329409C for ; + Thu, 19 Sep 2002 10:17:04 -0700 (PDT) +Received: by panacea.canonical.org (Postfix, from userid 1004) id + E51EC3F522; Thu, 19 Sep 2002 13:18:04 -0400 (EDT) +From: Kragen Sitaker +To: fork@spamassassin.taint.org +Cc: webmaster@worldwidewords.org +Subject: Re: Avast there matey +Message-Id: <20020919171804.GA18065@canonical.org> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.3.28i +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 13:18:04 -0400 + +Owen Byrne writes: +> [quoting http://www.quinion.com/words/qa/qa-shi2.htm] +> *SHIVER MY TIMBERS* +> +> /From Tad Spencer/: "Please could you tell me where the phrase /shiver +> my timbers/ originated?" +> +> This is one of those supposedly nautical expressions that seem to be +> better known through a couple of appearances in fiction than by any +> actual sailors' usage. +> +> It's an exclamation that may allude to a ship striking some rock or +> other obstacle so hard that her timbers shiver, or shake, so implying a +> calamity has occurred. It is first recorded as being used by Captain +> Frederick Marryat in /Jacob Faithful/ in 1835: "I won't thrash you Tom. +> Shiver my timbers if I do". + +It seems implausible to me that "shiver" here means "to shake"; I don't +recall seeing the word used transitively in that sense, and web1913 +lists that sense as "v. i.", or intransitive. The transitive sense of +"shiver", which we no longer use but which people used widely in the +1800s (web1913 doesn't even list it as archaic or obsolete), means +"to shatter into splinters, normally with a blow". + +Shivering a boat's timbers, of course, leaves you with no boat. +(Shivering some of them, which will happen if you hit a rock hard enough, +leaves you with a sinking boat.) + +So, "Shiver my timbers if I do," can be reasonably interpreted as a more +vivid way of saying, "May I die suddenly if I do." The interpretation +suggested by Quinion, "May my boat be damaged," neither makes as much +sense in context nor obeys the normal rules of grammar. + +I've sent a copy of this to Quinion. + + diff --git a/Ch3/datasets/spam/easy_ham/00657.9095f1e5c94587ee44a269318647bf4d b/Ch3/datasets/spam/easy_ham/00657.9095f1e5c94587ee44a269318647bf4d new file mode 100644 index 000000000..8ca05cc1c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00657.9095f1e5c94587ee44a269318647bf4d @@ -0,0 +1,96 @@ +From fork-admin@xent.com Fri Sep 20 11:32:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F1F7C16F03 + for ; Fri, 20 Sep 2002 11:32:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:32:31 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JHtlC30977 for ; + Thu, 19 Sep 2002 18:55:47 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 647532940BD; Thu, 19 Sep 2002 10:52:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id 21A8129409C for ; + Thu, 19 Sep 2002 10:51:32 -0700 (PDT) +Received: from sashimi (dmz-firewall [206.199.198.4]) by Boron.MeepZor.Com + (8.11.6/8.11.6) with SMTP id g8JHsui32025; Thu, 19 Sep 2002 13:54:56 -0400 +From: "Bill Stoddard" +To: "Tom" +Cc: "Owen Byrne" , + "Fork@Xent.Com" +Subject: RE: Hanson's Sept 11 message in the National Review +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 13:55:33 -0400 + +> On Thu, 19 Sep 2002, Bill Stoddard wrote: +> --]How likely are you to change someone's mind by being +> --]rude and disrespectful to them? Is this how to win friends and +> influence +> --]people? +> +> Point the first, I doubt if they are trying to change Rumsy's mind but +> rather to show others that there is a vocal and violent opposition to his +> views. With such flagrant showings of opposition there would be more +> coverage of the opposing ideas and thus the spreading of the dissenting +> meme. A viri need not comply with the wishes of the attacked host, rather +> the host had better make some antibodies or learn to adapt. +> +> Point the second. Historicaly the "in yer face" mode of confrontation has +> been used to gain popular support and to grow from seeds "grass roots" +> movements. Witness the big bold "in yer face" signature of Hancock on the +> "in yer face" Declaration of the american colonies to the governing +> powers of england. Witness also the chicago seven, Others will follow in +> examplare form upon digging. +> +> Now point the third, is it annoying? Yes, and if your annoyed then the "in +> yer facers" have done thier job. Sad to say the polite persnikiters are +> teh very fule the "in yer facers" hope to ignite. If your burning, your +> being used. +> +> Pointed the personal...The politics of the polite are more often the +> refuge of backstabings, closed mouth recourlessness and hypocritcal +> behavoirs. Id rather hear what those who oppose me have to say than +> quietly be knifed by the slow hand of the coward. +> +> +> +> Seek not the polite or impolite but rather the reasons why. +> +> +> -tom + +Good points all but they don't apply in this case. Someone is speaking and +a group of selfish bastards only interested in getting their rocks off are +trying to shout him down (they are doing it because 'it's good for the +soul'. Kind like Chuckie Manson doing the stuff he did cause 'it was good +for his soul'). Unprincipled and evil. It's got nothing to do with throwing +tea in the harbor or the DoI. + +Bill + + diff --git a/Ch3/datasets/spam/easy_ham/00658.b990e54a957ef200aa8d668dff83e83c b/Ch3/datasets/spam/easy_ham/00658.b990e54a957ef200aa8d668dff83e83c new file mode 100644 index 000000000..0df80a2e0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00658.b990e54a957ef200aa8d668dff83e83c @@ -0,0 +1,85 @@ +From fork-admin@xent.com Fri Sep 20 11:32:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1808416F03 + for ; Fri, 20 Sep 2002 11:32:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:32:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JI2hC31074 for ; + Thu, 19 Sep 2002 19:02:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9B2CC294162; Thu, 19 Sep 2002 10:59:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hughes-fe01.direcway.com (hughes-fe01.direcway.com + [66.82.20.91]) by xent.com (Postfix) with ESMTP id AC28329409C for + ; Thu, 19 Sep 2002 10:58:50 -0700 (PDT) +Received: from spinnaker ([64.157.35.6]) by hughes-fe01.direcway.com + (InterMail vK.4.04.00.00 201-232-137 license + dcc4e84cb8fc01ca8f8654c982ec8526) with ESMTP id + <20020919180238.RUXM977.hughes-fe01@spinnaker>; Thu, 19 Sep 2002 14:02:38 + -0400 +Subject: Re: Hanson's Sept 11 message in the National Review +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Cc: fork@spamassassin.taint.org +To: "Russell Turpin" +From: Chuck Murcko +In-Reply-To: +Message-Id: +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 11:01:49 -0700 + +What I meant was that neither he nor anyone else has any *authority* to +say something can or can't be published, and make that stick, at least +in the US, and from some descriptions, France. Of course he can say +anything he wants. And I can choose to ignore it, or not. Works both +ways. + +Fscking semantics. + +Chuck + +On Thursday, September 19, 2002, at 06:41 AM, Russell Turpin wrote: + +> Robert Harley: +>>> BTW, I wasn't aware that the 1st Amendment mandated that crap must be +>>> FoRKed. +> +> Chuck Murcko : +>> It doesn't, BTW. It says the right to free speech shall not be +>> abridged. That means *you* can't say anything may not be FoRKed or +>> printed or whatever. +> +> Actually, it means just the opposite. The first +> amendment guarantees Harley's right to say just +> that. For the outlets where he has editorial +> control, it even guarantees his right to CENSOR +> content published through those outlets. The +> first amendment doesn't limit Harley's speech, +> and it is neutral with regard to the selection +> policies of FoRK and other private venues. +> +> +> +> _________________________________________________________________ +> MSN Photos is the easiest way to share and print your photos: +> http://photos.msn.com/support/worldwide.aspx +> + + diff --git a/Ch3/datasets/spam/easy_ham/00659.1217006d88c29f2f900a9406c51feb64 b/Ch3/datasets/spam/easy_ham/00659.1217006d88c29f2f900a9406c51feb64 new file mode 100644 index 000000000..16c1dd1f3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00659.1217006d88c29f2f900a9406c51feb64 @@ -0,0 +1,67 @@ +From fork-admin@xent.com Fri Sep 20 11:32:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AF97016F03 + for ; Fri, 20 Sep 2002 11:32:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:32:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JI9hC31398 for ; + Thu, 19 Sep 2002 19:09:44 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2D0D829413C; Thu, 19 Sep 2002 11:06:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 1CD0529409C for ; Thu, + 19 Sep 2002 11:05:27 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 96F983EDAF; + Thu, 19 Sep 2002 14:13:10 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 9553F3ED19; Thu, 19 Sep 2002 14:13:10 -0400 (EDT) +From: Tom +To: Bill Stoddard +Cc: Owen Byrne , "Fork@Xent.Com" +Subject: RE: Hanson's Sept 11 message in the National Review +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 14:13:10 -0400 (EDT) + +On Thu, 19 Sep 2002, Bill Stoddard wrote: + +--]Good points all but they don't apply in this case. Someone is speaking and +--]a group of selfish bastards only interested in getting their rocks off are +--]trying to shout him down (they are doing it because 'it's good for the +--]soul'. Kind like Chuckie Manson doing the stuff he did cause 'it was good +--]for his soul'). Unprincipled and evil. It's got nothing to do with throwing +--]tea in the harbor or the DoI. + + +History is written by the victors. If the rabble can put forth there ideas +they will be tempered in the pages of yore as "strong willed voices +decrying the obvious injustices of the day" + +Once again, look at the Chicago 7, a loud and rude a crowd of selfish +pricks as you were want to find in the day. History of course colors them +with times great blur filter. The jagged bits that , at the time, were +called rude and obnoxious are now seen as a stab of justive doing in the +sideof the ill pathed goverment. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00660.91d1af396b1bc7b8703f5fae9de020d8 b/Ch3/datasets/spam/easy_ham/00660.91d1af396b1bc7b8703f5fae9de020d8 new file mode 100644 index 000000000..6a5717e33 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00660.91d1af396b1bc7b8703f5fae9de020d8 @@ -0,0 +1,88 @@ +From fork-admin@xent.com Fri Sep 20 11:32:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A3CF716F03 + for ; Fri, 20 Sep 2002 11:32:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:32:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JJhrC01513 for ; + Thu, 19 Sep 2002 20:43:56 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C089629416F; Thu, 19 Sep 2002 12:40:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm0-17.sba1.netlojix.net + [207.71.218.17]) by xent.com (Postfix) with ESMTP id 21AD529416D for + ; Thu, 19 Sep 2002 12:39:47 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id MAA18640; + Thu, 19 Sep 2002 12:51:00 -0700 +Message-Id: <200209191951.MAA18640@maltesecat> +To: fork@spamassassin.taint.org +Subject: Re: [meta-forkage] +In-Reply-To: Message from fork-request@xent.com of + "Thu, 19 Sep 2002 09:45:02 PDT." + <20020919164502.31514.11488.Mailman@lair.xent.com> +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 12:50:46 -0700 + + + +> For my part, I'd rather people didn't use FoRK as a place in which to dump an +> expression of their political beliefs. + +I'll second that, although with emphasis +upon /dump/, rather than on /political/. + +I don't mind if people advocate nuking +gay baby whales for jesus, if they can +make a good, original, argument for it. + +I do mind if someone should attempt to +further the notion that 1+1=2, merely +by cut-and-pasting a few pages of W&R. + +"New bits" are not a temporal property; +we create them when we add context or +clarification to the old bits of others' +thoughts. + +-Dave + +:::::::::::: + +> ... being rude and disrespectful is not the way to influence +> politicians, but the standard way of using lobbyists and +> writing checks is beyond many of us. + +The standard way has some extreme precedents: + +> Q: When was the Roman empire sold, and who bought it? +> +> A: On March 28th, 193 AD, the Roman empire was auctioned off by the +> Praetorian guards to the wealthy senator Didius Julianus for the price +> of 6250 drachms per soldier. +(as found in , +quoting Gibbon) + +Now, an economist might argue that selling +offices is the most efficient way to fill +them (what would Coase say?), but wouldn't +that convince everyone (but the supporters +of plutocracy) that efficiency is not the +primary virtue of politics? + + diff --git a/Ch3/datasets/spam/easy_ham/00661.e779083f6d4522af5231edf0b9371a1d b/Ch3/datasets/spam/easy_ham/00661.e779083f6d4522af5231edf0b9371a1d new file mode 100644 index 000000000..1d57db595 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00661.e779083f6d4522af5231edf0b9371a1d @@ -0,0 +1,62 @@ +From fork-admin@xent.com Fri Sep 20 11:32:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CA74016F03 + for ; Fri, 20 Sep 2002 11:32:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:32:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JLlhC05097 for ; + Thu, 19 Sep 2002 22:47:44 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id F0A9029416D; Thu, 19 Sep 2002 14:44:05 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav56.law15.hotmail.com [64.4.22.191]) by + xent.com (Postfix) with ESMTP id 650A729409C for ; + Thu, 19 Sep 2002 14:43:56 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Thu, 19 Sep 2002 14:47:21 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: <20020919171804.GA18065@canonical.org> +Subject: Re: Avast there matey +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 19 Sep 2002 21:47:21.0730 (UTC) FILETIME=[221F5E20:01C26026] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 14:51:59 -0700 + + +----- Original Message ----- +From: "Kragen Sitaker" + +> > It's an exclamation that may allude to a ship striking some rock or +> > other obstacle so hard that her timbers shiver, or shake, so implying a +> > calamity has occurred. It is first recorded as being used by Captain +> > Frederick Marryat in /Jacob Faithful/ in 1835: "I won't thrash you Tom. +> > Shiver my timbers if I do". +I think it went like this: "I won't thrash you Tom, if you shiver my +timber..." +Or maybe that was just the butt pirates... + + diff --git a/Ch3/datasets/spam/easy_ham/00662.020708cee6e991e3c3a58aa83df7f8d0 b/Ch3/datasets/spam/easy_ham/00662.020708cee6e991e3c3a58aa83df7f8d0 new file mode 100644 index 000000000..ca9a33d89 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00662.020708cee6e991e3c3a58aa83df7f8d0 @@ -0,0 +1,70 @@ +From fork-admin@xent.com Fri Sep 20 11:32:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1D1B916F03 + for ; Fri, 20 Sep 2002 11:32:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:32:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JLpkC05159 for ; + Thu, 19 Sep 2002 22:51:46 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 78054294173; Thu, 19 Sep 2002 14:48:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id CE7C1294172 for ; + Thu, 19 Sep 2002 14:47:14 -0700 (PDT) +Received: (qmail 32349 invoked from network); 19 Sep 2002 21:50:41 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 19 Sep 2002 21:50:41 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 665551C0A9; + Thu, 19 Sep 2002 17:50:37 -0400 (EDT) +To: Rodent of Unusual Size +Cc: Flatware or Road Kill? +Subject: Re: boycotting yahoo +References: + <3D885FE0.37C1C9EA@Golux.Com> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 19 Sep 2002 17:50:37 -0400 + + +Just tried smartgroups: The layout of pages is pretty challenging to +use quickly, but the most interesting aspect is that once you are in, +there is no way to get out. You can unsubscribe yourself as the sole +member of a group, but you cannot delete the group. + +Or if you can, I couldn't find it before deleting myself, and now it's +invisible to me. Another interesting thing: Security forms are reset +to full-public settings each time you load them, rather than set from +your current settings. + +All in all, I wasn't impressed and have stayed with the Yahooligans +for another run. + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00663.cbfae39e27122415329840060e7619e8 b/Ch3/datasets/spam/easy_ham/00663.cbfae39e27122415329840060e7619e8 new file mode 100644 index 000000000..129de4d7c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00663.cbfae39e27122415329840060e7619e8 @@ -0,0 +1,58 @@ +From fork-admin@xent.com Fri Sep 20 11:32:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3F4B416F03 + for ; Fri, 20 Sep 2002 11:32:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:32:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8JLxjC05374 for ; + Thu, 19 Sep 2002 22:59:45 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2BFDB294171; Thu, 19 Sep 2002 14:56:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 4071F29409C for ; Thu, + 19 Sep 2002 14:55:07 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 812293EDAF; + Thu, 19 Sep 2002 18:02:52 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 7F93F3EB72; Thu, 19 Sep 2002 18:02:52 -0400 (EDT) +From: Tom +To: "Mr. FoRK" +Cc: fork@spamassassin.taint.org +Subject: Re: Avast there matey +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 18:02:52 -0400 (EDT) + +On Thu, 19 Sep 2002, Mr. FoRK wrote: +--]I think it went like this: "I won't thrash you Tom, if you shiver my +--]timber..." +--]Or maybe that was just the butt pirates... +--] + +How did I get wrangled into this thread? +Do I really need to make pewp deck jokes at this point. + +Arrrrg ye mateys, now best ya be off tis topic or Ill hoist my jib and +hope for a stiff wind. Arrrg when Im happy and arrrg when Im not. + + + diff --git a/Ch3/datasets/spam/easy_ham/00664.dd3769251f79f493bd990b8c3f870f24 b/Ch3/datasets/spam/easy_ham/00664.dd3769251f79f493bd990b8c3f870f24 new file mode 100644 index 000000000..2b01da092 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00664.dd3769251f79f493bd990b8c3f870f24 @@ -0,0 +1,68 @@ +From fork-admin@xent.com Fri Sep 20 11:32:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7D67916F03 + for ; Fri, 20 Sep 2002 11:32:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:32:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8K2ZoC17214 for ; + Fri, 20 Sep 2002 03:35:50 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1531D294170; Thu, 19 Sep 2002 19:32:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from qu.to (njl.ne.client2.attbi.com [24.218.112.39]) by + xent.com (Postfix) with SMTP id E1DD729409C for ; + Thu, 19 Sep 2002 19:31:24 -0700 (PDT) +Received: (qmail 29405 invoked by uid 500); 20 Sep 2002 02:39:53 -0000 +From: Ned Jackson Lovely +To: fork@spamassassin.taint.org +Subject: Re: Hanson's Sept 11 message in the National Review +Message-Id: <20020920023953.GH1024@ibu.internal.qu.to> +References: <3D89BEA8.4010107@permafrost.net> + +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: +User-Agent: Mutt/1.3.25i +X-Cell: +1.617.877.3444 +X-Web: http://www.njl.us/ +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 22:39:53 -0400 + +On Thu, Sep 19, 2002 at 11:11:47AM -0400, Bill Stoddard wrote: +> people? Either these folks are social misfits who have no understanding of +> human interactions (else they would try more constructive means to get their +> message across) or they are just out to get their rocks off regardless of +> how it affects other people, and that is immoral at best and downright evil +> at worst. + +Are you kidding? It was fucking BRILLIANT. Do you know what exposure that got +them? They sat perfectly so that the cameras could focus on the mildly +exasperated Rumsfeld and their "UN Inspections not war" banner. That picture +will be dominating the news cycles in China, Iraq, Russia, Germany, and +France, at least. For goodness sakes, you're arguing about it on FoRK. In +politics by sound-bite, those two rude hags kicked ass and took names. + +For the record, I don't think they even got arrested, which is a shame. It +is part of the game -- make an ass of yourself, get your point on the nightly +news, spend a couple days in the clink for disorderly. + +-- +njl + + diff --git a/Ch3/datasets/spam/easy_ham/00665.f1547d981d26d8c8ccfa9375dcd7d222 b/Ch3/datasets/spam/easy_ham/00665.f1547d981d26d8c8ccfa9375dcd7d222 new file mode 100644 index 000000000..2acc8f8d1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00665.f1547d981d26d8c8ccfa9375dcd7d222 @@ -0,0 +1,68 @@ +From fork-admin@xent.com Fri Sep 20 11:32:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8AF6D16F03 + for ; Fri, 20 Sep 2002 11:32:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:32:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8K63jC24590 for ; + Fri, 20 Sep 2002 07:03:46 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A0DE8294172; Thu, 19 Sep 2002 23:00:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 2CB4A29409C for + ; Thu, 19 Sep 2002 22:59:51 -0700 (PDT) +Received: (qmail 1460 invoked by uid 508); 20 Sep 2002 06:03:11 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (62.155.144.34) by + venus.phpwebhosting.com with SMTP; 20 Sep 2002 06:03:11 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8K63DI32727 for ; + Fri, 20 Sep 2002 08:03:13 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: forkit! +Subject: Sun donates elliptic curve code to OpenSSL? (fwd) +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 20 Sep 2002 08:03:13 +0200 (CEST) + +---------- Forwarded message ---------- +Date: 19 Sep 2002 22:18:46 -0400 +From: Perry E. Metzger +To: cryptography@wasabisystems.com +Subject: Sun donates elliptic curve code to OpenSSL? + + +According to this: + +http://www.sun.com/smi/Press/sunflash/2002-09/sunflash.20020919.8.html + +Sun is donating some elliptic curve code to the OpenSSL project. Does +anyone know details that they would care to share on the nature of the +donation? + +-- +Perry E. Metzger perry@piermont.com + +--------------------------------------------------------------------- +The Cryptography Mailing List +Unsubscribe by sending "unsubscribe cryptography" to majordomo@wasabisystems.com + + diff --git a/Ch3/datasets/spam/easy_ham/00666.9f288224f19ca69b2663b5b9a85d8d62 b/Ch3/datasets/spam/easy_ham/00666.9f288224f19ca69b2663b5b9a85d8d62 new file mode 100644 index 000000000..baa633d14 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00666.9f288224f19ca69b2663b5b9a85d8d62 @@ -0,0 +1,59 @@ +From fork-admin@xent.com Fri Sep 20 16:15:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2B7D716F03 + for ; Fri, 20 Sep 2002 16:15:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 16:15:27 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8KDVtC07056 for ; + Fri, 20 Sep 2002 14:31:55 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DE396294177; Fri, 20 Sep 2002 06:28:12 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from imo-d10.mx.aol.com (imo-d10.mx.aol.com [205.188.157.42]) by + xent.com (Postfix) with ESMTP id 6519529409C for ; + Fri, 20 Sep 2002 06:27:22 -0700 (PDT) +Received: from ThosStew@aol.com by imo-d10.mx.aol.com (mail_out_v34.11.) + id k.53.1c91dda8 (3310); Fri, 20 Sep 2002 09:30:30 -0400 (EDT) +From: ThosStew@aol.com +Message-Id: <53.1c91dda8.2abc7cf6@aol.com> +Subject: Re: [meta-forkage] +To: dl@silcom.com, fork@spamassassin.taint.org +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Mailer: AOL 5.0 for Mac sub 45 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 20 Sep 2002 09:30:30 EDT + + +In a message dated 9/19/2002 3:45:45 PM, dl@silcom.com writes: + +>I don't mind if people advocate nuking +>gay baby whales for jesus, if they can +>make a good, original, argument for it. + + +I can't imagine any other kind of argument for nuking gay baby whales for +jesus. But do you mean nuking baby gay whales who are for jesus; or nuking +baby gay whales for Jesus's sake? + +splitting hairs with a FoRK, + +Tom + + diff --git a/Ch3/datasets/spam/easy_ham/00667.dfa0ab3eb4214034892b8cda76d9d750 b/Ch3/datasets/spam/easy_ham/00667.dfa0ab3eb4214034892b8cda76d9d750 new file mode 100644 index 000000000..e078f7eb2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00667.dfa0ab3eb4214034892b8cda76d9d750 @@ -0,0 +1,93 @@ +From fork-admin@xent.com Fri Sep 20 16:15:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 901F216F03 + for ; Fri, 20 Sep 2002 16:15:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 16:15:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8KE7pC08317 for ; + Fri, 20 Sep 2002 15:07:52 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8D8602940C3; Fri, 20 Sep 2002 07:04:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta6.snfc21.pbi.net (mta6.snfc21.pbi.net [206.13.28.240]) + by xent.com (Postfix) with ESMTP id AB2B829409C for ; + Fri, 20 Sep 2002 07:03:25 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta6.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H2Q004RHPVH35@mta6.snfc21.pbi.net> for fork@xent.com; Fri, + 20 Sep 2002 07:06:53 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: Sun +To: FoRK +Reply-To: gbolcer@endeavors.com +Message-Id: <3D8B2931.B8321588@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 20 Sep 2002 06:57:05 -0700 + +Well, it looks like Sun are going ahead with +their ubiquitous computing plans without Mithril. + +Greg + +Reuters Market News + Sun Micro Outlines Roadmap for Managing Networks + Friday September 20, 5:00 am ET + By Peter Henderson + + SAN FRANCISCO (Reuters) - Computer maker Sun Microsystems Inc. on Thursday + said it would create in a few years a network environment that will be as + straightforward to handle as a single machine, a strategy it calls N1. + + It laid out a road map for a new layer of intelligent software and systems that will meld + unwieldy networks into easy-to-use systems, a goal similar to those of most rivals + making computers which manage networks. + EMC Corp. announced this week software aimed at allowing users to manage storage + resources as a pool. Hewlett-Packard Co has a Utility Data Center, designed for + broader management. International Business Machines Corp's project eLiza is working + to make computers "self-healing" when systems break. + + "Applications still have to run zeroes and ones on some computing engine but the + whole idea behind N1 is you stop thinking about that. You don't think about what box + it is running on," Sun Vice President Steve MacKay, head of the N1 program, said in an + interview on the sidelines of a Sun user conference. + + Many industry executives see computer power eventually being sold like power or + water, as a utility that can be turned on or off, in whatever volume one wants whenever + needed. + For that to happen computers must be tied together seamlessly, rather than cobbling + them together with tenuous links, as most networks do today, experts say. There are + still major barriers, though, such as communications standards for machines from + different vendors to interoperate closely. + Sun promised to deliver a "virtualization engine" that would let administrators look at + their entire network as a pool by the end of the year. Network administrators today + often have no automatic system to report what is in the network. + + "It'll tell you what you have and how it is laid out," promised MacKay + The second stage, beginning in 2003, would allow users to identify a service, such as + online banking, and allocate resources for them with a few clicks, Sun said. + Finally, in 2004, Sun's software should allow networks to change uses of resources on + the fly in response to changing needs, such as a bank assuring quicker online response + time for priority users, the company said. + + diff --git a/Ch3/datasets/spam/easy_ham/00668.c788422df192a179d3a6ddbcb8b8b612 b/Ch3/datasets/spam/easy_ham/00668.c788422df192a179d3a6ddbcb8b8b612 new file mode 100644 index 000000000..27f33f0b7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00668.c788422df192a179d3a6ddbcb8b8b612 @@ -0,0 +1,106 @@ +From fork-admin@xent.com Fri Sep 20 16:16:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DCDE116F03 + for ; Fri, 20 Sep 2002 16:16:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 16:16:01 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8KEvoC09954 for ; + Fri, 20 Sep 2002 15:57:51 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DF6F4294176; Fri, 20 Sep 2002 07:54:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id 87F8F294176 for ; + Fri, 20 Sep 2002 07:53:05 -0700 (PDT) +Received: from sashimi (dmz-firewall [206.199.198.4]) by Boron.MeepZor.Com + (8.11.6/8.11.6) with SMTP id g8KEuUQ02494; Fri, 20 Sep 2002 10:56:31 -0400 +From: "Bill Stoddard" +To: "Ned Jackson Lovely" , + "Fork@Xent.Com" +Subject: RE: Hanson's Sept 11 message in the National Review +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <20020920023953.GH1024@ibu.internal.qu.to> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 20 Sep 2002 10:45:19 -0400 + + +> On Thu, Sep 19, 2002 at 11:11:47AM -0400, Bill Stoddard wrote: +> > people? Either these folks are social misfits who have no +> understanding of +> > human interactions (else they would try more constructive means +> to get their +> > message across) or they are just out to get their rocks off +> regardless of +> > how it affects other people, and that is immoral at best and +> downright evil +> > at worst. +> +> Are you kidding? It was fucking BRILLIANT. Do you know what +> exposure that got +> them? They sat perfectly so that the cameras could focus on the mildly +> exasperated Rumsfeld and their "UN Inspections not war" banner. + +What I am specifically referring to is protesters shouting down speakers or +making so much noise that it interferes with the speaker. That's wrong, +immoral and unethical no matter what the political bent of the speakers and +the protesters. Rowdy protests in their own venue (on a college campus or +some of the commons areas of DC) is perfectly fine by me. Waving signs to +get attention is fine. + +> That picture +> will be dominating the news cycles in China, Iraq, Russia, Germany, and +> France, at least. For goodness sakes, you're arguing about it on FoRK. In +> politics by sound-bite, those two rude hags kicked ass and took names. +> +> For the record, I don't think they even got arrested, which is a shame. + +Well, Owen implied the protesters were arrested. Was he just jacking himself +off at the expense of other people? Exactly why is it a shame that they were +not arrested? Think about what you are saying and what you are telegraphing +about your state of mind here. You WANT people to do bad things (ie, police +arresting peaceful protesters) if it can help you further your cause? That +attitude just sucks. You have no moral ground to stand on if that is what +you believe. + +> It is part of the game -- make an ass of yourself, get your point on +> the nightly +> news, spend a couple days in the clink for disorderly. + +Sure, just don't whine about getting arrested if you make it a point to get +in someone's face. + +One other comment... Most of the people that are protesting against taking +out the Iraqi dictator wouldn't give a rats ass if a nuke went off in NYC. +They simply wouldn't care so why in the hell should the Americal public +listen to them on matters of national security? + +So enlighten me, exactly why shouldn't Hussein be taken out? And if your +answr boils down to "i don't give a shit about what happens to the US", you +can kiss my ass :-) + +Bill + + diff --git a/Ch3/datasets/spam/easy_ham/00669.1324e7460b86ccd5cf81ea949704351d b/Ch3/datasets/spam/easy_ham/00669.1324e7460b86ccd5cf81ea949704351d new file mode 100644 index 000000000..395d163d2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00669.1324e7460b86ccd5cf81ea949704351d @@ -0,0 +1,153 @@ +From fork-admin@xent.com Fri Sep 20 21:47:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 43C3116F03 + for ; Fri, 20 Sep 2002 21:47:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 21:47:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8KJYlC20016 for ; + Fri, 20 Sep 2002 20:34:48 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A79E82940A5; Fri, 20 Sep 2002 12:31:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 5F74029409C for ; Fri, + 20 Sep 2002 12:30:31 -0700 (PDT) +Received: (qmail 14749 invoked from network); 20 Sep 2002 19:33:59 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 20 Sep 2002 19:33:59 -0000 +Reply-To: +From: "John Hall" +To: +Subject: RE: The War Prayer +Message-Id: <005201c260dc$ab1580e0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 20 Sep 2002 12:33:59 -0700 + +I'm sure Patton used it. + +I'm all for using it in the coming war with Iraq. + +Yet I'd be queasy about doing it in the Philippines circa 1905, which +was his point. + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of R. +A. +> Hettinga +> Sent: Monday, September 16, 2002 9:44 PM +> To: Digital Bearer Settlement List; fork@spamassassin.taint.org +> Subject: The War Prayer +> +> +> --- begin forwarded text +> +> +> Status: RO +> Date: Mon, 16 Sep 2002 14:57:27 -0700 +> To: nettime-l@bbs.thing.net +> From: Phil Duncan +> Subject: The War Prayer +> Sender: nettime-l-request@bbs.thing.net +> Reply-To: Phil Duncan +> +> The following prayer is from a story by Mark Twain, and was quoted by +> Lewis +> Laphan in the October issue of Harper's magazine. It occurs at the +very +> end +> of an excellent article which I recommend to you. +> +> In the story, an old man enters a church where the congregation has +been +> listening to an heroic sermon about "the glory to be won in battle by +> young +> patriots armed with the love of God." He usurps the pulpit and prays +the +> following: +> +> "O Lord our God, help us to tear their soldiers to bloody shreads with +our +> shells; help us to cover their smiling fields with the pale forms of +their +> patriot dead; help us to drown the thunder of the guns with the +shrieks of +> their wounded, writhing in pain; help us to lay waste their humble +homes +> with +> a hurricane of fire; help us to wring the hearts of their unoffending +> widows +> with unavailing grief; help us to turn them out roofless with their +little +> children to wander unfriended the wastes of their desolated land in +rags +> and +> hunger and thirst, sports of the sun flames in summer and the icy +winds of +> winter, broken in spirit, worn with travail, imploring Thee for the +refuge +> of +> the grave and denied it -- for our sakes who adore Thee, Lord, blast +their +> hopes, blight their lives, protract their bitter pilgrimage, make +heavy +> their +> steps, water their way with their tears, stain the white snow with the +> blood +> of their wounded feet! We ask it, in the spirit of love, of Him Who is +the +> Source of Love, and Who is the ever-faithful refuge and friend of all +that +> are sore beset and seek His aid with humble and contrite hearts. +Amen." +> +> Twain wrote the story, "The War Prayer," in 1905 during the American +> occupation of the Philippines, but the story wasn't printed until +1923, +> thirteen years after his death, because the editors thought it +> "unsuitable" +> for publication at the time it was written. +> +> # distributed via : no commercial use without permission +> # is a moderated mailing list for net criticism, +> # collaborative text filtering and cultural politics of the nets +> # more info: majordomo@bbs.thing.net and "info nettime-l" in the msg +body +> # archive: http://www.nettime.org contact: nettime@bbs.thing.net +> +> --- end forwarded text +> +> +> -- +> ----------------- +> R. A. Hettinga +> The Internet Bearer Underwriting Corporation +> 44 Farquhar Street, Boston, MA 02131 USA +> "... however it may deserve respect for its usefulness and antiquity, +> [predicting the end of the world] has not been found agreeable to +> experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00670.be029e37187b8615a231865e3663dcf9 b/Ch3/datasets/spam/easy_ham/00670.be029e37187b8615a231865e3663dcf9 new file mode 100644 index 000000000..7f3259a6c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00670.be029e37187b8615a231865e3663dcf9 @@ -0,0 +1,1728 @@ +From fork-admin@xent.com Sat Sep 21 10:42:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B584816F03 + for ; Sat, 21 Sep 2002 10:42:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:42:27 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L0CPC32195 for ; + Sat, 21 Sep 2002 01:13:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 14FEC294179; Fri, 20 Sep 2002 17:08:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from gremlin.ics.uci.edu (gremlin.ics.uci.edu [128.195.1.70]) by + xent.com (Postfix) with ESMTP id DF76529409C for ; + Fri, 20 Sep 2002 17:07:52 -0700 (PDT) +Received: from localhost (godzilla.ics.uci.edu [128.195.1.58]) by + gremlin.ics.uci.edu (8.12.5/8.12.5) with ESMTP id g8L0AoBO028706 for + ; Fri, 20 Sep 2002 17:10:51 -0700 (PDT) +MIME-Version: 1.0 (Apple Message framework v482) +Content-Type: text/plain; charset=US-ASCII; format=flowed +Subject: sed /s/United States/Roman Empire/g +From: Rohit Khare +To: fork@spamassassin.taint.org +Content-Transfer-Encoding: 7bit +Message-Id: <979BE8FE-CCF6-11D6-817E-000393A46DEA@alumni.caltech.edu> +X-Mailer: Apple Mail (2.482) +X-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 20 Sep 2002 17:10:48 -0700 + +> A world where some live in comfort and plenty, while half of the human +> race lives on less than $2 a day, is neither just nor stable. + +Absolutely correct. Perhaps the most fundamental thing to realize about +life on Earth today. + +The following is a fascinating document of official Government policy +that bears close reading. It is the aspirations of a wonderful nation in +an imperfect world. + +> The war on terrorism is not a clash of civilizations. It does, +> however, reveal the clash inside a civilization, a battle for the +> future of the Muslim world. This is a struggle of ideas and this is an +> area where America must excel. + +I was recently at a lecture about the surprising success of Radio Sawa, +our new music-and-news channel for 15-30 year old Arabs. It's #1 in +practically every market it's entered, nearing 90% listenership in +Amman. And it's even beginning to be trusted for news, well past BBC and +taking share from every other government broadcaster. + +It is as hard to imagine America losing a war of ideas in the long-term +as it is to imagine America making any headway at all in the short term. + +Many of you may disagree, but I found the document below surprisingly +centrist. If you know the code, you can hear clearly partisan tones, re: +ICC, Taiwan Relations Act, etc. But, still, this is as much a Democratic +platform as not. Africa and AIDS take up more mindshare than I feared +they might. + +As you read, replace "United States" with "Roman Empire" and it may make +as much sense, in the long view of history. I don't know how proud to be +about that, but it is telling. Sometime I daydream that the President +might sit down with the nation with Perotista flip charts and explain to +our citizens the sheer vastness of our 700+ military installations +overseas and what they do for us. It would be a powerful education on +how engaged we are in the world around us. + +Heck, I'd love to see a real-time map of Federal expenditures around the +globe, a softly glowing necklace of embassies, carriers, arctic research +stations, hotels, golf courses, warehouses, libraries, clinics and all +the rest of the influence a trillion dollars here or there can buy. + +Of course, this still doesn't leave me any more comfortable with the +real news in this document: the Bush Doctrine for pre-emptive strikes. +I'd sooner repeal the Church amendments on covert action than permit +such a principle to be loosed upon the world. + +Rohit + +----------------------------------------------------- +September 20, 2002 + +Full Text: Bush's National Security Strategy + +Following is the full text of President Bush's new national security +strategy. The document, entitled "The National Security Strategy of the +United States," will soon be transmitted to Congress as a declaration of +the Administration's policy. + +INTRODUCTION + +THE great struggles of the twentieth century between liberty and +totalitarianism ended with a decisive victory for the forces of +freedom -- and a single sustainable model for national success: freedom, +democracy, and free enterprise. In the twenty-first century, only +nations that share a commitment to protecting basic human rights and +guaranteeing political and economic freedom will be able to unleash the +potential of their people and assure their future prosperity. People +everywhere want to say what they think; choose who will govern them; +worship as they please; educate their children -- male and female; own +property; and enjoy the benefits of their labor. These values of freedom +are right and true for every person, in every society -- and the duty of +protecting these values against their enemies is the common calling of +freedom-loving people across the globe and across the ages. + +Today, the United States enjoys a position of unparalleled military +strength and great economic and political influence. In keeping with our +heritage and principles, we do not use our strength to press for +unilateral advantage. We seek instead to create a balance of power that +favors human freedom: conditions in which all nations and all societies +can choose for themselves the rewards and challenges of political and +economic liberty. By making the world safer, we allow the people of the +world to make their own lives better. We will defend this just peace +against threats from terrorists and tyrants. We will preserve the peace +by building good relations among the great powers. We will extend the +peace by encouraging free and open societies on every continent. + +Defending our Nation against its enemies is the first and fundamental +commitment of the Federal Government. Today, that task has changed +dramatically. Enemies in the past needed great armies and great +industrial capabilities to endanger America. Now, shadowy networks of +individuals can bring great chaos and suffering to our shores for less +than it costs to purchase a single tank. Terrorists are organized to +penetrate open societies and to turn the power of modern technologies +against us. + +To defeat this threat we must make use of every tool in our arsenal -- +from better homeland defenses and law enforcement to intelligence and +cutting off terrorist financing. The war against terrorists of global +reach is a global enterprise of uncertain duration. America will help +nations that need our assistance in combating terror. And America will +hold to account nations that are compromised by terror -- because the +allies of terror are the enemies of civilization. The United States and +countries cooperating with us must not allow the terrorists to develop +new home bases. Together, we will seek to deny them sanctuary at every +turn. + +The gravest danger our Nation faces lies at the crossroads of radicalism +and technology. Our enemies have openly declared that they are seeking +weapons of mass destruction, and evidence indicates that they are doing +so with determination. The United States will not allow these efforts to +succeed. We will build defenses against ballistic missiles and other +means of delivery. We will cooperate with other nations to deny, +contain, and curtail our enemies' efforts to acquire dangerous +technologies. And, as a matter of common sense and self-defense, America +will act against such emerging threats before they are fully formed. We +cannot defend America and our friends by hoping for the best. So we must +be prepared to defeat our enemies' plans, using the best intelligence +and proceeding with deliberation. History will judge harshly those who +saw this coming danger but failed to act. In the new world we have +entered, the only path to safety is the path of action. + +As we defend the peace, we will also take advantage of an historic +opportunity to preserve the peace. Today, the international community +has the best chance since the rise of the nation-state in the +seventeenth century to build a world where great powers compete in peace +instead of continually prepare for war. Today, the world's great powers +find ourselves on the same side -- united by common dangers of terrorist +violence and chaos. The United States will build on these common +interests to promote global security. We are also increasingly united by +common values. Russia is in the midst of a hopeful transition, reaching +for its democratic future and a partner in the war on terror. Chinese +leaders are discovering that economic freedom is the only source of +national wealth. In time, they will find that social and political +freedom is the only source of national greatness. America will encourage +the advancement of democracy and economic openness in both nations, +because these are the best foundations for domestic stability and +international order. We will strongly resist aggression from other great +powers -- even as we welcome their peaceful pursuit of prosperity, +trade, and cultural advancement. + +Finally, the United States will use this moment of opportunity to extend +the benefits of freedom across the globe. We will actively work to bring +the hope of democracy, development, free markets, and free trade to +every corner of the world. The events of September 11, 2001, taught us +that weak states, like Afghanistan, can pose as great a danger to our +national interests as strong states. Poverty does not make poor people +into terrorists and murderers. Yet poverty, weak institutions, and +corruption can make weak states vulnerable to terrorist networks and +drug cartels within their borders. + +The United States will stand beside any nation determined to build a +better future by seeking the rewards of liberty for its people. Free +trade and free markets have proven their ability to lift whole societies +out of poverty -- so the United States will work with individual +nations, entire regions, and the entire global trading community to +build a world that trades in freedom and therefore grows in prosperity. +The United States will deliver greater development assistance through +the New Millennium Challenge Account to nations that govern justly, +invest in their people, and encourage economic freedom. We will also +continue to lead the world in efforts to reduce the terrible toll of +AIDS and other infectious diseases. + +In building a balance of power that favors freedom, the United States is +guided by the conviction that all nations have important +responsibilities. Nations that enjoy freedom must actively fight terror. +Nations that depend on international stability must help prevent the +spread of weapons of mass destruction. Nations that seek international +aid must govern themselves wisely, so that aid is well spent. For +freedom to thrive, accountability must be expected and required. + +We are also guided by the conviction that no nation can build a safer, +better world alone. Alliances and multilateral institutions can multiply +the strength of freedom-loving nations. The United States is committed +to lasting institutions like the United Nations, the World Trade +Organization, the Organization of American States, and NATO as well as +other long-standing alliances. Coalitions of the willing can augment +these permanent institutions. In all cases, international obligations +are to be taken seriously. They are not to be undertaken symbolically to +rally support for an ideal without furthering its attainment. + +Freedom is the non-negotiable demand of human dignity; the birthright of +every person -- in every civilization. Throughout history, freedom has +been threatened by war and terror; it has been challenged by the +clashing wills of powerful states and the evil designs of tyrants; and +it has been tested by widespread poverty and disease. Today, humanity +holds in its hands the opportunity to further freedom's triumph over all +these foes. The United States welcomes our responsibility to lead in +this great mission. + +I. Overview of America's International Strategy + + +"Our Nation's cause has always been larger than our Nation's defense. We +fight, as we always fight, for a just peace -- a peace that favors +liberty. We will defend the peace against the threats from terrorists +and tyrants. We will preserve the peace by building good relations among +the great powers. And we will extend the peace by encouraging free and +open societies on every continent." + + + + + + +President Bush +West Point, New York +June 1, 2002 + + + +The United States possesses unprecedented -- and unequaled -- strength +and influence in the world. Sustained by faith in the principles of +liberty, and the value of a free society, this position comes with +unparalleled responsibilities, obligations, and opportunity. The great +strength of this nation must be used to promote a balance of power that +favors freedom. + +For most of the twentieth century, the world was divided by a great +struggle over ideas: destructive totalitarian visions versus freedom and +equality. + +That great struggle is over. The militant visions of class, nation, and +race which promised utopia and delivered misery have been defeated and +discredited. America is now threatened less by conquering states than we +are by failing ones. We are menaced less by fleets and armies than by +catastrophic technologies in the hands of the embittered few. We must +defeat these threats to our Nation, allies, and friends. + +This is also a time of opportunity for America. We will work to +translate this moment of influence into decades of peace, prosperity, +and liberty. The U.S. national security strategy will be based on a +distinctly American internationalism that reflects the union of our +values and our national interests. The aim of this strategy is to help +make the world not just safer but better. Our goals on the path to +progress are clear: political and economic freedom, peaceful relations +with other states, and respect for human dignity. + +And this path is not America's alone. It is open to all. + +To achieve these goals, the United States will: + +* champion aspirations for human dignity; + +* strengthen alliances to defeat global terrorism and work to prevent +attacks against us and our friends; + +* work with others to defuse regional conflicts; + +* prevent our enemies from threatening us, our allies, and our +friends, with weapons of mass destruction; + +* ignite a new era of global economic growth through free markets and +free trade; + +* expand the circle of development by opening societies and building +the infrastructure of democracy; + +* develop agendas for cooperative action with other main centers of +global power; and + +* transform America's national security institutions to meet the +challenges and opportunities of the twenty-first century. + + +II. Champion Aspirations for Human Dignity + + +"Some worry that it is somehow undiplomatic or impolite to speak the +language of right and wrong. I disagree. Different circumstances require +different methods, but not different moralities." + + + + + +President Bush +West Point, New York +June 1, 2002 + + + +In pursuit of our goals, our first imperative is to clarify what we +stand for: the United States must defend liberty and justice because +these principles are right and true for all people everywhere. No nation +owns these aspirations, and no nation is exempt from them. Fathers and +mothers in all societies want their children to be educated and to live +free from poverty and violence. No people on earth yearn to be +oppressed, aspire to servitude, or eagerly await the midnight knock of +the secret police. + +America must stand firmly for the nonnegotiable demands of human +dignity: the rule of law; limits on the absolute power of the state; +free speech; freedom of worship; equal justice; respect for women; +religious and ethnic tolerance; and respect for private property. + +These demands can be met in many ways. America's constitution has served +us well. Many other nations, with different histories and cultures, +facing different circumstances, have successfully incorporated these +core principles into their own systems of governance. History has not +been kind to those nations which ignored or flouted the rights and +aspirations of their people. + +Our own history is a long struggle to live up to our ideals. But even in +our worst moments, the principles enshrined in the Declaration of +Independence were there to guide us. As a result, America is not just a +stronger, but is a freer and more just society. + +Today, these ideals are a lifeline to lonely defenders of liberty. And +when openings arrive, we can encourage change -- as we did in central +and eastern Europe between 1989 and 1991, or in Belgrade in 2000. When +we see democratic processes take hold among our friends in Taiwan or in +the Republic of Korea, and see elected leaders replace generals in Latin +America and Africa, we see examples of how authoritarian systems can +evolve, marrying local history and traditions with the principles we all +cherish. + +Embodying lessons from our past and using the opportunity we have today, +the national security strategy of the United States must start from +these core beliefs and look outward for possibilities to expand liberty. + +Our principles will guide our government's decisions about international +cooperation, the character of our foreign assistance, and the allocation +of resources. They will guide our actions and our words in international +bodies. + +We will: + +* speak out honestly about violations of the nonnegotiable demands of +human dignity using our voice and vote in international institutions to +advance freedom; + +* use our foreign aid to promote freedom and support those who +struggle non-violently for it, ensuring that nations moving toward +democracy are rewarded for the steps they take; + +* make freedom and the development of democratic institutions key +themes in our bilateral relations, seeking solidarity and cooperation +from other democracies while we press governments that deny human rights +to move toward a better future; and + +* take special efforts to promote freedom of religion and conscience +and defend it from encroachment by repressive governments. + + +We will champion the cause of human dignity and oppose those who resist +it. + +III. Strengthen Alliances to Defeat Global Terrorism and Work to Prevent +Attacks Against Us and Our Friends + + +"Just three days removed from these events, Americans do not yet have +the distance of history. But our responsibility to history is already +clear: to answer these attacks and rid the world of evil. War has been +waged against us by stealth and deceit and murder. This nation is +peaceful, but fierce when stirred to anger. The conflict was begun on +the timing and terms of others. It will end in a way, and at an hour, of +our choosing." + + + + + +President Bush +Washington, D.C. (The National Cathedral) +September 14, 2001 + + + +The United States of America is fighting a war against terrorists of +global reach. The enemy is not a single political regime or person or +religion or ideology. The enemy is terrorism -- premeditated, +politically motivated violence perpetrated against innocents. + +In many regions, legitimate grievances prevent the emergence of a +lasting peace. Such grievances deserve to be, and must be, addressed +within a political process. But no cause justifies terror. The United +States will make no concessions to terrorist demands and strike no deals +with them. We make no distinction between terrorists and those who +knowingly harbor or provide aid to them. + +The struggle against global terrorism is different from any other war in +our history. It will be fought on many fronts against a particularly +elusive enemy over an extended period of time. Progress will come +through the persistent accumulation of successes -- some seen, some +unseen. + +Today our enemies have seen the results of what civilized nations can, +and will, do against regimes that harbor, support, and use terrorism to +achieve their political goals. Afghanistan has been liberated; coalition +forces continue to hunt down the Taliban and al-Qaida. But it is not +only this battlefield on which we will engage terrorists. Thousands of +trained terrorists remain at large with cells in North America, South +America, Europe, Africa, the Middle East, and across Asia. + +Our priority will be first to disrupt and destroy terrorist +organizations of global reach and attack their leadership; command, +control, and communications; material support; and finances. This will +have a disabling effect upon the terrorists' ability to plan and operate. + +We will continue to encourage our regional partners to take up a +coordinated effort that isolates the terrorists. Once the regional +campaign localizes the threat to a particular state, we will help ensure +the state has the military, law enforcement, political, and financial +tools necessary to finish the task. + +The United States will continue to work with our allies to disrupt the +financing of terrorism. We will identify and block the sources of +funding for terrorism, freeze the assets of terrorists and those who +support them, deny terrorists access to the international financial +system, protect legitimate charities from being abused by terrorists, +and prevent the movement of terrorists' assets through alternative +financial networks. + +However, this campaign need not be sequential to be effective, the +cumulative effect across all regions will help achieve the results we +seek. + +We will disrupt and destroy terrorist organizations by: + +* direct and continuous action using all the elements of national and +international power. Our immediate focus will be those terrorist +organizations of global reach and any terrorist or state sponsor of +terrorism which attempts to gain or use weapons of mass destruction +(WMD) or their precursors; + +* defending the United States, the American people, and our interests +at home and abroad by identifying and destroying the threat before it +reaches our borders. While the United States will constantly strive to +enlist the support of the international community, we will not hesitate +to act alone, if necessary, to exercise our right of self-defense by +acting preemptively against such terrorists, to prevent them from doing +harm against our people and our country; and + +* denying further sponsorship, support, and sanctuary to terrorists +by convincing or compelling states to accept their sovereign +responsibilities. + + +We will also wage a war of ideas to win the battle against international +terrorism. This includes: + +* using the full influence of the United States, and working closely +with allies and friends, to make clear that all acts of terrorism are +illegitimate so that terrorism will be viewed in the same light as +slavery, piracy, or genocide: behavior that no respectable government +can condone or support and all must oppose; + +* supporting moderate and modern government, especially in the Muslim +world, to ensure that the conditions and ideologies that promote +terrorism do not find fertile ground in any nation; + +* diminishing the underlying conditions that spawn terrorism by +enlisting the international community to focus its efforts and resources +on areas most at risk; and + +* using effective public diplomacy to promote the free flow of +information and ideas to kindle the hopes and aspirations of freedom of +those in societies ruled by the sponsors of global terrorism. + + +While we recognize that our best defense is a good offense we are also +strengthening America's homeland security to protect against and deter +attack. + +This Administration has proposed the largest government reorganization +since the Truman Administration created the National Security Council +and the Department of Defense. Centered on a new Department of Homeland +Security and including a new unified military command and a fundamental +reordering of the FBI, our comprehensive plan to secure the homeland +encompasses every level of government and the cooperation of the public +and the private sector. + +This strategy will turn adversity into opportunity. For example, +emergency management systems will be better able to cope not just with +terrorism but with all hazards. Our medical system will be strengthened +to manage not just bioterror, but all infectious diseases and +mass-casualty dangers. Our border controls will not just stop +terrorists, but improve the efficient movement of legitimate traffic. + +While our focus is protecting America, we know that to defeat terrorism +in today's globalized world we need support from our allies and friends. +Wherever possible, the United States will rely on regional organizations +and state powers to meet their obligations to fight terrorism. Where +governments find the fight against terrorism beyond their capacities, we +will match their willpower and their resources with whatever help we and +our allies can provide. + +As we pursue the terrorists in Afghanistan, we will continue to work +with international organizations such as the United Nations, as well as +non-governmental organizations, and other countries to provide the +humanitarian, political, economic, and security assistance necessary to +rebuild Afghanistan so that it will never again abuse its people, +threaten its neighbors, and provide a haven for terrorists + +In the war against global terrorism, we will never forget that we are +ultimately fighting for our democratic values and way of life. Freedom +and fear are at war, and there will be no quick or easy end to this +conflict. In leading the campaign against terrorism, we are forging new, +productive international relationships and redefining existing ones in +ways that meet the challenges of the twenty-first century. + +IV. Work with Others To Defuse Regional Conflicts + + +"We build a world of justice, or we will live in a world of coercion. +The magnitude of our shared responsibilities makes our disagreements +look so small." + + + + + +President Bush +Berlin, Germany +May 23, 2002 + + + +Concerned nations must remain actively engaged in critical regional +disputes to avoid explosive escalation and minimize human suffering. In +an increasingly interconnected world, regional crisis can strain our +alliances, rekindle rivalries among the major powers, and create +horrifying affronts to human dignity. When violence erupts and states +falter, the United States will work with friends and partners to +alleviate suffering and restore stability. + +No doctrine can anticipate every circumstance in which U.S. action -- +direct or indirect -- is warranted. We have finite political, economic, +and military resources to meet our global priorities. The United States +will approach each case with these strategic principles in mind: + +* The United States should invest time and resources into building +international relationships and institutions that can help manage local +crises when they emerge. + +* The United States should be realistic about its ability to help +those who are unwilling or unready to help themselves. Where and when +people are ready to do their part, we will be willing to move decisively. + + +Policies in several key regions offer some illustrations of how we will +apply these principles: + +The Israeli-Palestinian conflict is critical because of the toll of +human suffering, because of America's close relationship with the state +of Israel and key Arab states, and because of that region's importance +to other global priorities of the United States. There can be no peace +for either side without freedom for both sides. America stands committed +to an independent and democratic Palestine, living beside Israel in +peace and security. Like all other people, Palestinians deserve a +government that serves their interests, and listens to their voices, and +counts their votes. The United States will continue to encourage all +parties to step up to their responsibilities as we seek a just and +comprehensive settlement to the conflict. + +The United States, the international donor community, and the World Bank +stand ready to work with a reformed Palestinian government on economic +development, increased humanitarian assistance and a program to +establish, finance, and monitor a truly independent judiciary. If +Palestinians embrace democracy, and the rule of law, confront +corruption, and firmly reject terror, they can count on American support +for the creation of a Palestinian state. + +Israel also has a large stake in the success of a democratic Palestine. +Permanent occupation threatens Israel's identity and democracy. So the +United States continues to challenge Israeli leaders to take concrete +steps to support the emergence of a viable, credible Palestinian state. +As there is progress towards security, Israel forces need to withdraw +fully to positions they held prior to September 28, 2000. And consistent +with the recommendations of the Mitchell Committee, Israeli settlement +activity in the occupied territories must stop. As violence subsides, +freedom of movement should be restored, permitting innocent Palestinians +to resume work and normal life. The United States can play a crucial +role but, ultimately, lasting peace can only come when Israelis and +Palestinians resolve the issues and end the conflict between them. + +In South Asia, the United States has also emphasized the need for India +and Pakistan to resolve their disputes. This administration invested +time and resources building strong bilateral relations with India and +Pakistan. These strong relations then gave us leverage to play a +constructive role when tensions in the region became acute. With +Pakistan, our bilateral relations have been bolstered by Pakistan's +choice to join the war against terror and move toward building a more +open and tolerant society. The Administration sees India's potential to +become one of the great democratic powers of the twenty-first century +and has worked hard to transform our relationship accordingly. Our +involvement in this regional dispute, building on earlier investments in +bilateral relations, looks first to concrete steps by India and Pakistan +that can help defuse military confrontation. + +Indonesia took courageous steps to create a working democracy and +respect for the rule of law. By tolerating ethnic minorities, respecting +the rule of law, and accepting open markets, Indonesia may be able to +employ the engine of opportunity that has helped lift some of its +neighbors out of poverty and desperation. It is the initiative by +Indonesia that allows U.S. assistance to make a difference. + +In the Western Hemisphere we have formed flexible coalitions with +countries that share our priorities, particularly Mexico, Brazil, +Canada, Chile, and Colombia. Together we will promote a truly democratic +hemisphere where our integration advances security, prosperity, +opportunity, and hope. We will work with regional institutions, such as +the Summit of the Americas process, the Organization of American States +(OAS), and the Defense Ministerial of the Americas for the benefit of +the entire hemisphere. + +Parts of Latin America confront regional conflict, especially arising +from the violence of drug cartels and their accomplices. This conflict +and unrestrained narcotics trafficking could imperil the health and +security of the United States. Therefore we have developed an active +strategy to help the Andean nations adjust their economies, enforce +their laws, defeat terrorist organizations, and cut off the supply of +drugs, while -- as important -- we work to reduce the demand for drugs +in our own country. + +In Colombia, we recognize the link between terrorist and extremist +groups that challenge the security of the state and drug trafficking +activities that help finance the operations of such groups. We are +working to help Colombia defend its democratic institutions and defeat +illegal armed groups of both the left and right by extending effective +sovereignty over the entire national territory and provide basic +security to the Colombian people. + +In Africa, promise and opportunity sit side by side with disease, war, +and desperate poverty. This threatens both a core value of the United +States -- preserving human dignity -- and our strategic priority -- +combating global terror. American interests and American principles, +therefore, lead in the same direction: we will work with others for an +African continent that lives in liberty, peace, and growing prosperity. +Together with our European allies, we must help strengthen Africa's +fragile states, help build indigenous capability to secure porous +borders, and help build up the law enforcement and intelligence +infrastructure to deny havens for terrorists. + +An ever more lethal environment exists in Africa as local civil wars +spread beyond borders to create regional war zones. Forming coalitions +of the willing and cooperative security arrangements are key to +confronting these emerging transnational threats. + +Africa's great size and diversity requires a security strategy that +focuses bilateral engagement, and builds coalitions of the willing. This +administration will focus on three interlocking strategies for the +region: + +* countries with major impact on their neighborhood such as South +Africa, Nigeria, Kenya, and Ethiopia are anchors for regional engagement +and require focused attention; + +* coordination with European allies and international institutions is +essential for constructive conflict mediation and successful peace +operations; and + +* Africa's capable reforming states and sub-regional organizations +must be strengthened as the primary means to address transnational +threats on a sustained basis. + + +Ultimately the path of political and economic freedom presents the +surest route to progress in sub-Saharan Africa, where most wars are +conflicts over material resources and political access often tragically +waged on the basis of ethnic and religious difference. The transition to +the African Union with its stated commitment to good governance and a +common responsibility for democratic political systems offers +opportunities to strengthen democracy on the continent. + +V. Prevent Our Enemies from Threatening Us, Our Allies, and Our Friends +with Weapons of Mass Destruction + + +"The gravest danger to freedom lies at the crossroads of radicalism and +technology. When the spread of chemical and biological and nuclear +weapons, along with ballistic missile technology -- when that occurs, +even weak states and small groups could attain a catastrophic power to +strike great nations. Our enemies have declared this very intention, and +have been caught seeking these terrible weapons. They want the +capability to blackmail us, or to harm us, or to harm our friends -- and +we will oppose them with all our power." + + + + + +President Bush +West Point, New York +June 1, 2002 + + + +The nature of the Cold War threat required the United States -- with our +allies and friends -- to emphasize deterrence of the enemy's use of +force, producing a grim strategy of mutual assured destruction. With the +collapse of the Soviet Union and the end of the Cold War, our security +environment has undergone profound transformation. + +Having moved from confrontation to cooperation as the hallmark of our +relationship with Russia, the dividends are evident: an end to the +balance of terror that divided us; an historic reduction in the nuclear +arsenals on both sides; and cooperation in areas such as +counterterrorism and missile defense that until recently were +inconceivable. + +But new deadly challenges have emerged from rogue states and terrorists. +None of these contemporary threats rival the sheer destructive power +that was arrayed against us by the Soviet Union. However, the nature and +motivations of these new adversaries, their determination to obtain +destructive powers hitherto available only to the world's strongest +states, and the greater likelihood that they will use weapons of mass +destruction against us, make today's security environment more complex +and dangerous. + +In the 1990s we witnessed the emergence of a small number of rogue +states that, while different in important ways, share a number of +attributes. These states: + +* brutalize their own people and squander their national resources +for the personal gain of the rulers; + +* display no regard for international law, threaten their neighbors, +and callously violate international treaties to which they are party; + +* are determined to acquire weapons of mass destruction, along with +other advanced military technology, to be used as threats or offensively +to achieve the aggressive designs of these regimes; + +* sponsor terrorism around the globe; and + +* reject basic human values and hate the United States and everything +for which it stands. + + +At the time of the Gulf War, we acquired irrefutable proof that Iraq's +designs were not limited to the chemical weapons it had used against +Iran and its own people, but also extended to the acquisition of nuclear +weapons and biological agents. In the past decade North Korea has become +the world's principal purveyor of ballistic missiles, and has tested +increasingly capable missiles while developing its own WMD arsenal. +Other rogue regimes seek nuclear, biological, and chemical weapons as +well. These states' pursuit of, and global trade in, such weapons has +become a looming threat to all nations. + +We must be prepared to stop rogue states and their terrorist clients +before they are able to threaten or use weapons of mass destruction +against the United States and our allies and friends. Our response must +take full advantage of strengthened alliances, the establishment of new +partnerships with former adversaries, innovation in the use of military +forces, modern technologies, including the development of an effective +missile defense system, and increased emphasis on intelligence +collection and analysis. + +Our comprehensive strategy to combat WMD includes: + +* Proactive counterproliferation efforts. We must deter and defend +against the threat before it is unleashed. We must ensure that key +capabilities -- detection, active and passive defenses, and counterforce +capabilities -- are integrated into our defense transformation and our +homeland security systems. Counterproliferation must also be integrated +into the doctrine, training, and equipping of our forces and those of +our allies to ensure that we can prevail in any conflict with WMD-armed +adversaries. + +* Strengthened nonproliferation efforts to prevent rogue states and +terrorists from acquiring the materials, technologies and expertise +necessary for weapons of mass destruction. We will enhance diplomacy, +arms control, multilateral export controls, and threat reduction +assistance that impede states and terrorists seeking WMD, and when +necessary, interdict enabling technologies and materials. We will +continue to build coalitions to support these efforts, encouraging their +increased political and financial support for nonproliferation and +threat reduction programs. The recent G-8 agreement to commit up to $20 +billion to a global partnership against proliferation marks a major step +forward. + +* Effective consequence management to respond to the effects of WMD +use, whether by terrorists or hostile states. Minimizing the effects of +WMD use against our people will help deter those who possess such +weapons and dissuade those who seek to acquire them by persuading +enemies that they cannot attain their desired ends. The United States +must also be prepared to respond to the effects of WMD use against our +forces abroad, and to help friends and allies if they are attacked. + + +It has taken almost a decade for us to comprehend the true nature of +this new threat. Given the goals of rogue states and terrorists, the +United States can no longer solely rely on a reactive posture as we have +in the past. The inability to deter a potential attacker, the immediacy +of today's threats, and the magnitude of potential harm that could be +caused by our adversaries' choice of weapons, do not permit that option. +We cannot let our enemies strike first. + +* In the Cold War, especially following the Cuban missile crisis, we +faced a generally status quo, risk-averse adversary. Deterrence was an +effective defense. But deterrence based only upon the threat of +retaliation is far less likely to work against leaders of rogue states +more willing to take risks, gambling with the lives of their people, and +the wealth of their nations. + +* In the Cold War, weapons of mass destruction were considered +weapons of last resort whose use risked the destruction of those who +used them. Today, our enemies see weapons of mass destruction as weapons +of choice. For rogue states these weapons are tools of intimidation and +military aggression against their neighbors. These weapons may also +allow these states to attempt to blackmail the United States and our +allies to prevent us from deterring or repelling the aggressive behavior +of rogue states. Such states also see these weapons as their best means +of overcoming the conventional superiority of the United States. + +* Traditional concepts of deterrence will not work against a +terrorist enemy whose avowed tactics are wanton destruction and the +targeting of innocents; whose so-called soldiers seek martyrdom in death +and whose most potent protection is statelessness. The overlap between +states that sponsor terror and those that pursue WMD compels us to +action. + + +For centuries, international law recognized that nations need not suffer +an attack before they can lawfully take action to defend themselves +against forces that present an imminent danger of attack. Legal scholars +and international jurists often conditioned the legitimacy of preemption +on the existence of an imminent threat -- most often a visible +mobilization of armies, navies, and air forces preparing to attack. + +We must adapt the concept of imminent threat to the capabilities and +objectives of today's adversaries. Rogue states and terrorists do not +seek to attack us using conventional means. They know such attacks would +fail. Instead, they rely on acts of terrorism and, potentially, the use +of weapons of mass destruction -- weapons that can be easily concealed +and delivered covertly and without warning. + +The targets of these attacks are our military forces and our civilian +population, in direct violation of one of the principal norms of the law +of warfare. As was demonstrated by the losses on September 11, 2001, +mass civilian casualties is the specific objective of terrorists and +these losses would be exponentially more severe if terrorists acquired +and used weapons of mass destruction. + +The United States has long maintained the option of preemptive actions +to counter a sufficient threat to our national security. The greater the +threat, the greater is the risk of inaction -- and the more compelling +the case for taking anticipatory action to defend ourselves, even if +uncertainty remains as to the time and place of the enemy's attack. To +forestall or prevent such hostile acts by our adversaries, the United +States will, if necessary, act preemptively. + +The United States will not use force in all cases to preempt emerging +threats, nor should nations use preemption as a pretext for aggression. +Yet in an age where the enemies of civilization openly and actively seek +the world's most destructive technologies, the United States cannot +remain idle while dangers gather. + +We will always proceed deliberately, weighing the consequences of our +actions. To support preemptive options, we will: + +* build better, more integrated intelligence capabilities to provide +timely, accurate information on threats, wherever they may emerge; + +* coordinate closely with allies to form a common assessment of the +most dangerous threats; and + +* continue to transform our military forces to ensure our ability to +conduct rapid and precise operations to achieve decisive results. + + +The purpose of our actions will always be to eliminate a specific threat +to the United States or our allies and friends. The reasons for our +actions will be clear, the force measured, and the cause just. + +VI. Ignite a New Era of Global Economic Growth through Free Markets and +Free Trade. + + +"When nations close their markets and opportunity is hoarded by a +privileged few, no amount -- no amount -- of development aid is ever +enough. When nations respect their people, open markets, invest in +better health and education, every dollar of aid, every dollar of trade +revenue and domestic capital is used more effectively." + + + + + +President Bush +Monterrey, Mexico +March 22, 2002 + + + +A strong world economy enhances our national security by advancing +prosperity and freedom in the rest of the world. Economic growth +supported by free trade and free markets creates new jobs and higher +incomes. It allows people to lift their lives out of poverty, spurs +economic and legal reform, and the fight against corruption, and it +reinforces the habits of liberty. + +We will promote economic growth and economic freedom beyond America's +shores. All governments are responsible for creating their own economic +policies and responding to their own economic challenge. We will use our +economic engagement with other countries to underscore the benefits of +policies that generate higher productivity and sustained economic +growth, including: + +* pro-growth legal and regulatory policies to encourage business +investment, innovation, and entrepreneurial activity; + +* tax policies -- particularly lower marginal tax rates -- that +improve incentives for work and investment; + +* rule of law and intolerance of corruption so that people are +confident that they will be able to enjoy the fruits of their economic +endeavors; + +* strong financial systems that allow capital to be put to its most +efficient use; + +* sound fiscal policies to support business activity; + +* investments in health and education that improve the well-being and +skills of the labor force and population as a whole; and + +* free trade that provides new avenues for growth and fosters the +diffusion of technologies and ideas that increase productivity and +opportunity. + + +The lessons of history are clear: market economies, not +command-and-control economies with the heavy hand of government, are the +best way to promote prosperity and reduce poverty. Policies that further +strengthen market incentives and market institutions are relevant for +all economies -- industrialized countries, emerging markets, and the +developing world. + +A return to strong economic growth in Europe and Japan is vital to U.S. +national security interests. We want our allies to have strong economies +for their own sake, for the sake of the global economy, and for the sake +of global security. European efforts to remove structural barriers in +their economies are particularly important in this regard, as are +Japan's efforts to end deflation and address the problems of +non-performing loans in the Japanese banking system. We will continue to +use our regular consultations with Japan and our European partners -- +including through the Group of Seven (G-7) -- to discuss policies they +are adopting to promote growth in their economies and support higher +global economic growth. + +Improving stability in emerging markets is also key to global economic +growth. International flows of investment capital are needed to expand +the productive potential of these economies. These flows allow emerging +markets and developing countries to make the investments that raise +living standards and reduce poverty. Our long-term objective should be a +world in which all countries have investment-grade credit ratings that +allow them access to international capital markets and to invest in +their future. + +We are committed to policies that will help emerging markets achieve +access to larger capital flows at lower cost. To this end, we will +continue to pursue reforms aimed at reducing uncertainty in financial +markets. We will work actively with other countries, the International +Monetary Fund (IMF), and the private sector to implement the G-7 Action +Plan negotiated earlier this year for preventing financial crises and +more effectively resolving them when they occur. + +The best way to deal with financial crises is to prevent them from +occurring, and we have encouraged the IMF to improve its efforts doing +so. We will continue to work with the IMF to streamline the policy +conditions for its lending and to focus its lending strategy on +achieving economic growth through sound fiscal and monetary policy, +exchange rate policy, and financial sector policy. + +The concept of "free trade" arose as a moral principle even before it +became a pillar of economics. If you can make something that others +value, you should be able to sell it to them. If others make something +that you value, you should be able to buy it. This is real freedom, the +freedom for a person -- or a nation -- to make a living. To promote free +trade, the Unites States has developed a comprehensive strategy: + +* Seize the global initiative. The new global trade negotiations we +helped launch at Doha in November 2001 will have an ambitious agenda, +especially in agriculture, manufacturing, and services, targeted for +completion in 2005. The United States has led the way in completing the +accession of China and a democratic Taiwan to the World Trade +Organization. We will assist Russia's preparations to join the WTO. + +* Press regional initiatives. The United States and other democracies +in the Western Hemisphere have agreed to create the Free Trade Area of +the Americas, targeted for completion in 2005. This year the United +States will advocate market-access negotiations with its partners, +targeted on agriculture, industrial goods, services, investment, and +government procurement. We will also offer more opportunity to the +poorest continent, Africa, starting with full use of the preferences +allowed in the African Growth and Opportunity Act, and leading to free +trade. + +* Move ahead with bilateral free trade agreements. Building on the +free trade agreement with Jordan enacted in 2001, the Administration +will work this year to complete free trade agreements with Chile and +Singapore. Our aim is to achieve free trade agreements with a mix of +developed and developing countries in all regions of the world. +Initially, Central America, Southern Africa, Morocco, and Australia will +be our principal focal points. + +* Renew the executive-congressional partnership. Every +administration's trade strategy depends on a productive partnership with +Congress. After a gap of 8 years, the Administration reestablished +majority support in the Congress for trade liberalization by passing +Trade Promotion Authority and the other market opening measures for +developing countries in the Trade Act of 2002. This Administration will +work with Congress to enact new bilateral, regional, and global trade +agreements that will be concluded under the recently passed Trade +Promotion Authority. + +* Promote the connection between trade and development. Trade +policies can help developing countries strengthen property rights, +competition, the rule of law, investment, the spread of knowledge, open +societies, the efficient allocation of resources, and regional +integration -- all leading to growth, opportunity, and confidence in +developing countries. The United States is implementing The Africa +Growth and Opportunity Act to provide market-access for nearly all goods +produced in the 35 countries of sub-Saharan Africa. We will make more +use of this act and its equivalent for the Caribbean Basin and continue +to work with multilateral and regional institutions to help poorer +countries take advantage of these opportunities. Beyond market access, +the most important area where trade intersects with poverty is in public +health. We will ensure that the WTO intellectual property rules are +flexible enough to allow developing nations to gain access to critical +medicines for extraordinary dangers like HIV/AIDS, tuberculosis, and +malaria. + +* Enforce trade agreements and laws against unfair practices. +Commerce depends on the rule of law; international trade depends on +enforceable agreements. Our top priorities are to resolve ongoing +disputes with the European Union, Canada, and Mexico and to make a +global effort to address new technology, science, and health regulations +that needlessly impede farm exports and improved agriculture. Laws +against unfair trade practices are often abused, but the international +community must be able to address genuine concerns about government +subsidies and dumping. International industrial espionage which +undermines fair competition must be detected and deterred. + +* Help domestic industries and workers adjust. There is a sound +statutory framework for these transitional safeguards which we have used +in the agricultural sector and which we are using this year to help the +American steel industry. The benefits of free trade depend upon the +enforcement of fair trading practices. These safeguards help ensure that +the benefits of free trade do not come at the expense of American +workers. Trade adjustment assistance will help workers adapt to the +change and dynamism of open markets. + +* Protect the environment and workers. The United States must foster +economic growth in ways that will provide a better life along with +widening prosperity. We will incorporate labor and environmental +concerns into U.S. trade negotiations, creating a healthy "network" +between multilateral environmental agreements with the WTO, and use the +International Labor Organization, trade preference programs, and trade +talks to improve working conditions in conjunction with freer trade. + +* Enhance energy security. We will strengthen our own energy security +and the shared prosperity of the global economy by working with our +allies, trading partners, and energy producers to expand the sources and +types of global energy supplied, especially in the Western Hemisphere, +Africa, Central Asia, and the Caspian region. We will also continue to +work with our partners to develop cleaner and more energy efficient +technologies. + + +Economic growth should be accompanied by global efforts to stabilize +greenhouse gas concentrations associated with this growth, containing +them at a level that prevents dangerous human interference with the +global climate. Our overall objective is to reduce America's greenhouse +gas emissions relative to the size of our economy, cutting such +emissions per unit of economic activity by 18 percent over the next 10 +years, by the year 2012. Our strategies for attaining this goal will be +to: + +* remain committed to the basic U.N. Framework Convention for +international cooperation; + +* obtain agreements with key industries to cut emissions of some of +the most potent greenhouse gases and give transferable credits to +companies that can show real cuts; + +* develop improved standards for measuring and registering emission +reductions; + +* promote renewable energy production and clean coal technology, as +well as nuclear power -- which produces no greenhouse gas emissions, +while also improving fuel economy for U.S. cars and trucks; + +* increase spending on research and new conservation technologies, to +a total of $4.5 billion -- the largest sum being spent on climate change +by any country in the world and a $700 million increase over last year's +budget; and + +* assist developing countries, especially the major greenhouse gas +emitters such as China and India, so that they will have the tools and +resources to join this effort and be able to grow along a cleaner and +better path. + + +VII. Expand the Circle of Development by Opening Societies and Building +the Infrastructure of Democracy + + +"In World War II we fought to make the world safer, then worked to +rebuild it. As we wage war today to keep the world safe from terror, we +must also work to make the world a better place for all its citizens." + + + + + +President Bush +Washington, D.C. (Inter-American +Development Bank) +March 14, 2002 + + + +A world where some live in comfort and plenty, while half of the human +race lives on less than $2 a day, is neither just nor stable. Including +all of the world's poor in an expanding circle of development -- and +opportunity -- is a moral imperative and one of the top priorities of +U.S. international policy. + +Decades of massive development assistance have failed to spur economic +growth in the poorest countries. Worse, development aid has often served +to prop up failed policies, relieving the pressure for reform and +perpetuating misery. Results of aid are typically measured in dollars +spent by donors, not in the rates of growth and poverty reduction +achieved by recipients. These are the indicators of a failed strategy. + +Working with other nations, the United States is confronting this +failure. We forged a new consensus at the U.N. Conference on Financing +for Development in Monterrey that the objectives of assistance -- and +the strategies to achieve those objectives -- must change. + +This Administration's goal is to help unleash the productive potential +of individuals in all nations. Sustained growth and poverty reduction is +impossible without the right national policies. Where governments have +implemented real policy changes we will provide significant new levels +of assistance. The United States and other developed countries should +set an ambitious and specific target: to double the size of the world's +poorest economies within a decade. + +The United States Government will pursue these major strategies to +achieve this goal: + +* Provide resources to aid countries that have met the challenge of +national reform. We propose a 50 percent increase in the core +development assistance given by the United States. While continuing our +present programs, including humanitarian assistance based on need alone, +these billions of new dollars will form a new Millennium Challenge +Account for projects in countries whose governments rule justly, invest +in their people, and encourage economic freedom. Governments must fight +corruption, respect basic human rights, embrace the rule of law, invest +in health care and education, follow responsible economic policies, and +enable entrepreneurship. The Millennium Challenge Account will reward +countries that have demonstrated real policy change and challenge those +that have not to implement reforms. + +* Improve the effectiveness of the World Bank and other development +banks in raising living standards. The United States is committed to a +comprehensive reform agenda for making the World Bank and the other +multilateral development banks more effective in improving the lives of +the world's poor. We have reversed the downward trend in U.S. +contributions and proposed an 18 percent increase in the U.S. +contributions to the International Development Association (IDA) -- the +World Bank's fund for the poorest countries -- and the African +Development Fund. The key to raising living standards and reducing +poverty around the world is increasing productivity growth, especially +in the poorest countries. We will continue to press the multilateral +development banks to focus on activities that increase economic +productivity, such as improvements in education, health, rule of law, +and private sector development. Every project, every loan, every grant +must be judged by how much it will increase productivity growth in +developing countries. + +* Insist upon measurable results to ensure that development +assistance is actually making a difference in the lives of the world's +poor. When it comes to economic development, what really matters is that +more children are getting a better education, more people have access to +health care and clean water, or more workers can find jobs to make a +better future for their families. We have a moral obligation to measure +the success of our development assistance by whether it is delivering +results. For this reason, we will continue to demand that our own +development assistance as well as assistance from the multilateral +development banks has measurable goals and concrete benchmarks for +achieving those goals. Thanks to U.S. leadership, the recent IDA +replenishment agreement will establish a monitoring and evaluation +system that measures recipient countries' progress. For the first time, +donors can link a portion of their contributions to IDA to the +achievement of actual development results, and part of the U.S. +contribution is linked in this way. We will strive to make sure that the +World Bank and other multilateral development banks build on this +progress so that a focus on results is an integral part of everything +that these institutions do. + +* Increase the amount of development assistance that is provided in +the form of grants instead of loans. Greater use of results-based grants +is the best way to help poor countries make productive investments, +particularly in the social sectors, without saddling them with +ever-larger debt burdens. As a result of U.S. leadership, the recent IDA +agreement provided for significant increases in grant funding for the +poorest countries for education, HIV/AIDS, health, nutrition, water, +sanitation, and other human needs. Our goal is to build on that progress +by increasing the use of grants at the other multilateral development +banks. We will also challenge universities, nonprofits, and the private +sector to match government efforts by using grants to support +development projects that show results. + +* Open societies to commerce and investment. Trade and investment are +the real engines of economic growth. Even if government aid increases, +most money for development must come from trade, domestic capital, and +foreign investment. An effective strategy must try to expand these flows +as well. Free markets and free trade are key priorities of our national +security strategy. + +* Secure public health. The scale of the public health crisis in poor +countries is enormous. In countries afflicted by epidemics and pandemics +like HIV/AIDS, malaria, and tuberculosis, growth and development will be +threatened until these scourges can be contained. Resources from the +developed world are necessary but will be effective only with honest +governance, which supports prevention programs and provides effective +local infrastructure. The United States has strongly backed the new +global fund for HIV/AIDS organized by U.N. Secretary General Kofi Annan +and its focus on combining prevention with a broad strategy for +treatment and care. The United States already contributes more than +twice as much money to such efforts as the next largest donor. If the +global fund demonstrates its promise, we will be ready to give even more. + +* Emphasize education. Literacy and learning are the foundation of +democracy and development. Only about 7 percent of World Bank resources +are devoted to education. This proportion should grow. The United States +will increase its own funding for education assistance by at least 20 +percent with an emphasis on improving basic education and teacher +training in Africa. The United States can also bring information +technology to these societies, many of whose education systems have been +devastated by AIDS. + +* Continue to aid agricultural development. New technologies, +including biotechnology, have enormous potential to improve crop yields +in developing countries while using fewer pesticides and less water. +Using sound science, the United States should help bring these benefits +to the 800 million people, including 300 million children, who still +suffer from hunger and malnutrition. + + +VIII. Develop Agendas for Cooperative Action with the Other Main Centers +of Global Power + + +"We have our best chance since the rise of the nation-state in the 17th +century to build a world where the great powers compete in peace instead +of prepare for war." + + + + + +President Bush +West Point, New York +June 1, 2002 + + + +America will implement its strategies by organizing coalitions -- as +broad as practicable -- of states able and willing to promote a balance +of power that favors freedom. Effective coalition leadership requires +clear priorities, an appreciation of others' interests, and consistent +consultations among partners with a spirit of humility. + +There is little of lasting consequence that the United States can +accomplish in the world without the sustained cooperation of its allies +and friends in Canada and Europe. Europe is also the seat of two of the +strongest and most able international institutions in the world: the +North Atlantic Treaty Organization (NATO), which has, since its +inception, been the fulcrum of transatlantic and inter-European +security, and the European Union (EU), our partner in opening world +trade. + +The attacks of September 11 were also an attack on NATO, as NATO itself +recognized when it invoked its Article V self-defense clause for the +first time. NATO's core mission -- collective defense of the +transatlantic alliance of democracies -- remains, but NATO must develop +new structures and capabilities to carry out that mission under new +circumstances. NATO must build a capability to field, at short notice, +highly mobile, specially trained forces whenever they are needed to +respond to a threat against any member of the alliance. + +The alliance must be able to act wherever our interests are threatened, +creating coalitions under NATO's own mandate, as well as contributing to +mission-based coalitions. To achieve this, we must: + +* expand NATO's membership to those democratic nations willing and +able to share the burden of defending and advancing our common interests; + +* ensure that the military forces of NATO nations have appropriate +combat contributions to make in coalition warfare; + +* develop planning processes to enable those contributions to become +effective multinational fighting forces; + +* take advantage of the technological opportunities and economies of +scale in our defense spending to transform NATO military forces so that +they dominate potential aggressors and diminish our vulnerabilities; + +* streamline and increase the flexibility of command structures to +meet new operational demands and the associated requirements of +training, integrating, and experimenting with new force configurations; +and + +* maintain the ability to work and fight together as allies even as +we take the necessary steps to transform and modernize our forces. + + +If NATO succeeds in enacting these changes, the rewards will be a +partnership as central to the security and interests of its member +states as was the case during the Cold War. We will sustain a common +perspective on the threats to our societies and improve our ability to +take common action in defense of our nations and their interests. At the +same time, we welcome our European allies' efforts to forge a greater +foreign policy and defense identity with the EU, and commit ourselves to +close consultations to ensure that these developments work with NATO. We +cannot afford to lose this opportunity to better prepare the family of +transatlantic democracies for the challenges to come. + +The attacks of September 11 energized America's Asian alliances. +Australia invoked the ANZUS Treaty to declare the September 11 was an +attack on Australia itself, following that historic decision with the +dispatch of some of the world's finest combat forces for Operation +Enduring Freedom. Japan and the Republic of Korea provided unprecedented +levels of military logistical support within weeks of the terrorist +attack. We have deepened cooperation on counter-terrorism with our +alliance partners in Thailand and the Philippines and received +invaluable assistance from close friends like Singapore and New Zealand. + +The war against terrorism has proven that America's alliances in Asia +not only underpin regional peace and stability, but are flexible and +ready to deal with new challenges. To enhance our Asian alliances and +friendships, we will: + + +* look to Japan to continue forging a leading role in regional and +global affairs based on our common interests, our common values, and our +close defense and diplomatic cooperation; + +* work with South Korea to maintain vigilance towards the North while +preparing our alliance to make contributions to the broader stability of +the region over the longer-term; + +* build on 50 years of U.S.-Australian alliance cooperation as we +continue working together to resolve regional and global problems -- as +we have so many times from the Battle of Leyte Gulf to Tora Bora; + +* maintain forces in the region that reflect our commitments to our +allies, our requirements, our technological advances, and the strategic +environment; and + +* build on stability provided by these alliances, as well as with +institutions such as ASEAN and the Asia-Pacific Economic Cooperation +forum, to develop a mix of regional and bilateral strategies to manage +change in this dynamic region. + + +We are attentive to the possible renewal of old patterns of great power +competition. Several potential great powers are now in the midst of +internal transition -- most importantly Russia, India, and China. In all +three cases, recent developments have encouraged our hope that a truly +global consensus about basic principles is slowly taking shape. + +With Russia, we are already building a new strategic relationship based +on a central reality of the twenty-first century: the United States and +Russia are no longer strategic adversaries. The Moscow Treaty on +Strategic Reductions is emblematic of this new reality and reflects a +critical change in Russian thinking that promises to lead to productive, +long-term relations with the Euro-Atlantic community and the United +States. Russia's top leaders have a realistic assessment of their +country's current weakness and the policies -- internal and external -- +needed to reverse those weaknesses. They understand, increasingly, that +Cold War approaches do not serve their national interests and that +Russian and American strategic interests overlap in many areas. + +United States policy seeks to use this turn in Russian thinking to +refocus our relationship on emerging and potential common interests and +challenges. We are broadening our already extensive cooperation in the +global war on terrorism. We are facilitating Russia's entry into the +World Trade Organization, without lowering standards for accession, to +promote beneficial bilateral trade and investment relations. We have +created the NATO-Russia Council with the goal of deepening security +cooperation among Russia, our European allies, and ourselves. We will +continue to bolster the independence and stability of the states of the +former Soviet Union in the belief that a prosperous and stable +neighborhood will reinforce Russia's growing commitment to integration +into the Euro-Atlantic community. + +At the same time, we are realistic about the differences that still +divide us from Russia and about the time and effort it will take to +build an enduring strategic partnership. Lingering distrust of our +motives and policies by key Russian elites slows improvement in our +relations. Russia's uneven commitment to the basic values of free-market +democracy and dubious record in combating the proliferation of weapons +of mass destruction remain matters of great concern. Russia's very +weakness limits the opportunities for cooperation. Nevertheless, those +opportunities are vastly greater now than in recent years -- or even +decades. + +The United States has undertaken a transformation in its bilateral +relationship with India based on a conviction that U.S. interests +require a strong relationship with India. We are the two largest +democracies, committed to political freedom protected by representative +government. India is moving toward greater economic freedom as well. We +have a common interest in the free flow of commerce, including through +the vital sea lanes of the Indian Ocean. Finally, we share an interest +in fighting terrorism and in creating a strategically stable Asia. + +Differences remain, including over the development of India's nuclear +and missile programs, and the pace of India's economic reforms. But +while in the past these concerns may have dominated our thinking about +India, today we start with a view of India as a growing world power with +which we have common strategic interests. Through a strong partnership +with India, we can best address any differences and shape a dynamic +future. + +The United States relationship with China is an important part of our +strategy to promote a stable, peaceful, and prosperous Asia-Pacific +region. We welcome the emergence of a strong, peaceful, and prosperous +China. The democratic development of China is crucial to that future. +Yet, a quarter century after beginning the process of shedding the worst +features of the Communist legacy, China's leaders have not yet made the +next series of fundamental choices about the character of their state. +In pursuing advanced military capabilities that can threaten its +neighbors in the Asia-Pacific region, China is following an outdated +path that, in the end, will hamper its own pursuit of national +greatness. In time, China will find that social and political freedom is +the only source of that greatness. + +The United States seeks a constructive relationship with a changing +China. We already cooperate well where our interests overlap, including +the current war on terrorism and in promoting stability on the Korean +peninsula. Likewise, we have coordinated on the future of Afghanistan +and have initiated a comprehensive dialogue on counter-terrorism and +similar transitional concerns. Shared health and environmental threats, +such as the spread of HIV/AIDS, challenge us to promote jointly the +welfare of our citizens. + +Addressing these transnational threats will challenge China to become +more open with information, promote the development of civil society, +and enhance individual human rights. China has begun to take the road to +political openness, permitting many personal freedoms and conducting +village-level elections, yet remains strongly committed to national +one-party rule by the Communist Party. To make that nation truly +accountable to its citizen's needs and aspirations, however, much work +remains to be done. Only by allowing the Chinese people to think, +assemble, and worship freely can China reach its full potential. + +Our important trade relationship will benefit from China's entry into +the World Trade Organization, which will create more export +opportunities and ultimately more jobs for American farmers, workers, +and companies. China is our fourth largest trading partner, with over +$100 billion in annual two-way trade. The power of market principles and +the WTO's requirements for transparency and accountability will advance +openness and the rule of law in China to help establish basic +protections for commerce and for citizens. There are, however, other +areas in which we have profound disagreements. Our commitment to the +self-defense of Taiwan under the Taiwan Relations Act is one. Human +rights is another. We expect China to adhere to its nonproliferation +commitments. We will work to narrow differences where they exist, but +not allow them to preclude cooperation where we agree. + +The events of September 11, 2001, fundamentally changed the context for +relations between the United States and other main centers of global +power, and opened vast, new opportunities. With our long-standing allies +in Europe and Asia, and with leaders in Russia, India, and China, we +must develop active agendas of cooperation lest these relationships +become routine and unproductive. + +Every agency of the United States Government shares the challenge. We +can build fruitful habits of consultation, quiet argument, sober +analysis, and common action. In the long-term, these are the practices +that will sustain the supremacy of our common principles and keep open +the path of progress. + +IX. Transform America's National Security Institutions to Meet the +Challenges and Opportunities of the Twenty-First Century + + +"Terrorists attacked a symbol of American prosperity. They did not touch +its source. America is successful because of the hard work, creativity, +and enterprise of our people." + + + + + +President Bush +Washington, D.C. (Joint Session of Congress) +September 20, 2001 + + + +The major institutions of American national security were designed in a +different era to meet different requirements. All of them must be +transformed. + +It is time to reaffirm the essential role of American military strength. +We must build and maintain our defenses beyond challenge. Our military's +highest priority is to defend the United States. To do so effectively, +our military must: + +* assure our allies and friends; + +* dissuade future military competition; + +* deter threats against U.S. interests, allies, and friends; and + +* decisively defeat any adversary if deterrence fails. + + +The unparalleled strength of the United States armed forces, and their +forward presence, have maintained the peace in some of the world's most +strategically vital regions. However, the threats and enemies we must +confront have changed, and so must our forces. A military structured to +deter massive Cold War-era armies must be transformed to focus more on +how an adversary might fight rather than where and when a war might +occur. We will channel our energies to overcome a host of operational +challenges. + +The presence of American forces overseas is one of the most profound +symbols of the U.S. commitments to allies and friends. Through our +willingness to use force in our own defense and in defense of others, +the United States demonstrates its resolve to maintain a balance of +power that favors freedom. To contend with uncertainty and to meet the +many security challenges we face, the United States will require bases +and stations within and beyond Western Europe and Northeast Asia, as +well as temporary access arrangements for the long-distance deployment +of U.S. forces. + +Before the war in Afghanistan, that area was low on the list of major +planning contingencies. Yet, in a very short time, we had to operate +across the length and breadth of that remote nation, using every branch +of the armed forces. We must prepare for more such deployments by +developing assets such as advanced remote sensing, long-range precision +strike capabilities, and transformed maneuver and expeditionary forces. +This broad portfolio of military capabilities must also include the +ability to defend the homeland, conduct information operations, ensure +U.S. access to distant theaters, and protect critical U.S. +infrastructure and assets in outer space. + +Innovation within the armed forces will rest on experimentation with new +approaches to warfare, strengthening joint operations, exploiting U.S. +intelligence advantages, and taking full advantage of science and +technology. We must also transform the way the Department of Defense is +run, especially in financial management and recruitment and retention. +Finally, while maintaining near-term readiness and the ability to fight +the war on terrorism, the goal must be to provide the President with a +wider range of military options to discourage aggression or any form of +coercion against the United States, our allies, and our friends. + +We know from history that deterrence can fail; and we know from +experience that some enemies cannot be deterred. The United States must +and will maintain the capability to defeat any attempt by an enemy -- +whether a state or non-state actor -- to impose its will on the United +States, our allies, or our friends. We will maintain the forces +sufficient to support our obligations, and to defend freedom. Our forces +will be strong enough to dissuade potential adversaries from pursuing a +military build-up in hopes of surpassing, or equaling, the power of the +United States. + +Intelligence -- and how we use it -- is our first line of defense +against terrorists and the threat posed by hostile states. Designed +around the priority of gathering enormous information about a massive, +fixed object -- the Soviet bloc -- the intelligence community is coping +with the challenge of following a far more complex and elusive set of +targets. + +We must transform our intelligence capabilities and build new ones to +keep pace with the nature of these threats. Intelligence must be +appropriately integrated with our defense and law enforcement systems +and coordinated with our allies and friends. We need to protect the +capabilities we have so that we do not arm our enemies with the +knowledge of how best to surprise us. Those who would harm us also seek +the benefit of surprise to limit our prevention and response options and +to maximize injury. + +We must strengthen intelligence warning and analysis to provide +integrated threat assessments for national and homeland security. Since +the threats inspired by foreign governments and groups may be conducted +inside the United States, we must also ensure the proper fusion of +information between intelligence and law enforcement. + +Initiatives in this area will include: + +* strengthening the authority of the Director of Central Intelligence +to lead the development and actions of the Nation's foreign intelligence +capabilities; + +* establishing a new framework for intelligence warning that provides +seamless and integrated warning across the spectrum of threats facing +the nation and our allies; + +* continuing to develop new methods of collecting information to +sustain our intelligence advantage; + +* investing in future capabilities while working to protect them +through a more vigorous effort to prevent the compromise of intelligence +capabilities; and + +* collecting intelligence against the terrorist danger across the +government with all-source analysis. + + +As the United States Government relies on the armed forces to defend +America's interests, it must rely on diplomacy to interact with other +nations. We will ensure that the Department of State receives funding +sufficient to ensure the success of American diplomacy. The State +Department takes the lead in managing our bilateral relationships with +other governments. And in this new era, its people and institutions must +be able to interact equally adroitly with non-governmental organizations +and international institutions. Officials trained mainly in +international politics must also extend their reach to understand +complex issues of domestic governance around the world, including public +health, education, law enforcement, the judiciary, and public diplomacy. + +Our diplomats serve at the front line of complex negotiations, civil +wars, and other humanitarian catastrophes. As humanitarian relief +requirements are better understood, we must also be able to help build +police forces, court systems, and legal codes, local and provincial +government institutions, and electoral systems. Effective international +cooperation is needed to accomplish these goals, backed by American +readiness to play our part. + +Just as our diplomatic institutions must adapt so that we can reach out +to others, we also need a different and more comprehensive approach to +public information efforts that can help people around the world learn +about and understand America. The war on terrorism is not a clash of +civilizations. It does, however, reveal the clash inside a civilization, +a battle for the future of the Muslim world. This is a struggle of ideas +and this is an area where America must excel. + +We will take the actions necessary to ensure that our efforts to meet +our global security commitments and protect Americans are not impaired +by the potential for investigations, inquiry, or prosecution by the +International Criminal Court (ICC), whose jurisdiction does not extend +to Americans and which we do not accept. We will work together with +other nations to avoid complications in our military operations and +cooperation, through such mechanisms as multilateral and bilateral +agreements that will protect U.S. nationals from the ICC. We will +implement fully the American Servicemembers Protection Act, whose +provisions are intended to ensure and enhance the protection of U.S. +personnel and officials. + +We will make hard choices in the coming year and beyond to ensure the +right level and allocation of government spending on national security. +The United States Government must strengthen its defenses to win this +war. At home, our most important priority is to protect the homeland for +the American people. + +Today, the distinction between domestic and foreign affairs is +diminishing. In a globalized world, events beyond America's borders have +a greater impact inside them. Our society must be open to people, ideas, +and goods from across the globe. The characteristics we most cherish -- +our freedom, our cities, our systems of movement, and modern life -- are +vulnerable to terrorism. This vulnerability will persist long after we +bring to justice those responsible for the September eleventh attacks. +As time passes, individuals may gain access to means of destruction that +until now could be wielded only by armies, fleets, and squadrons. This +is a new condition of life. We will adjust to it and thrive -- in spite +of it. + +In exercising our leadership, we will respect the values, judgment, and +interests of our friends and partners. Still, we will be prepared to act +apart when our interests and unique responsibilities require. When we +disagree on particulars, we will explain forthrightly the grounds for +our concerns and strive to forge viable alternatives. We will not allow +such disagreements to obscure our determination to secure together, with +our allies and our friends, our shared fundamental interests and values. + +Ultimately, the foundation of American strength is at home. It is in the +skills of our people, the dynamism of our economy, and the resilience of +our institutions. A diverse, modern society has inherent, ambitious, +entrepreneurial energy. Our strength comes from what we do with that +energy. That is where our national security begins. + + diff --git a/Ch3/datasets/spam/easy_ham/00671.daf16d838d9b71f5f6cf09d54ebc1e3c b/Ch3/datasets/spam/easy_ham/00671.daf16d838d9b71f5f6cf09d54ebc1e3c new file mode 100644 index 000000000..02510e5ba --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00671.daf16d838d9b71f5f6cf09d54ebc1e3c @@ -0,0 +1,79 @@ +From fork-admin@xent.com Sat Sep 21 10:42:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7626A16F03 + for ; Sat, 21 Sep 2002 10:42:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:42:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L0tsC01045 for ; + Sat, 21 Sep 2002 01:55:55 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6BC522940C4; Fri, 20 Sep 2002 17:52:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id A685129409C for ; + Fri, 20 Sep 2002 17:51:16 -0700 (PDT) +Received: (qmail 29709 invoked from network); 21 Sep 2002 00:54:46 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 21 Sep 2002 00:54:46 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 3649B1C2C4; + Fri, 20 Sep 2002 20:54:32 -0400 (EDT) +To: "Geege Schuman" +Cc: "Russell Turpin" , +Subject: Re: AA Meetings the Hottest Place to Meet Women With Big Bucks +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 20 Sep 2002 20:54:32 -0400 + +>>>>> "G" == Geege Schuman writes: + + G> SURELY you meant political extremes and not politics? baisley? + G> help me out here. + +OK, but only if you also meant religious and alcoholic extremes ;) + +When the political canvassers come to my door during the campaigns, +I always wonder why cigarette packages are labelled with warnings +whereas political brochures are not; the statistics clearly show +which is the greater, more senseless, and more preventable killer. + +>>>>> "R" == Russell Turpin writes: + + R> It's difficult to measure which is the greater liability in a + R> potential mate, religiosity or alcoholism. + + G> Or politics. + + + + + + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00672.f7e4f9c91f81b7506b0e9a22ef1fdfe5 b/Ch3/datasets/spam/easy_ham/00672.f7e4f9c91f81b7506b0e9a22ef1fdfe5 new file mode 100644 index 000000000..e7f9708b3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00672.f7e4f9c91f81b7506b0e9a22ef1fdfe5 @@ -0,0 +1,90 @@ +From fork-admin@xent.com Sat Sep 21 10:42:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 05C4216F03 + for ; Sat, 21 Sep 2002 10:42:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:42:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L1QpC01898 for ; + Sat, 21 Sep 2002 02:26:51 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9F12E29417B; Fri, 20 Sep 2002 18:23:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc52.attbi.com (rwcrmhc52.attbi.com [216.148.227.88]) + by xent.com (Postfix) with ESMTP id 3FCF2294178 for ; + Fri, 20 Sep 2002 18:22:51 -0700 (PDT) +Received: from [24.61.113.164] by rwcrmhc52.attbi.com (InterMail + vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020921012620.ZEUU464.rwcrmhc52.attbi.com@[24.61.113.164]>; + Sat, 21 Sep 2002 01:26:20 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <162160870749.20020920212606@magnesium.net> +To: Gary Lawrence Murphy +Cc: fork@spamassassin.taint.org +Subject: Re[2]: AA Meetings the Hottest Place to Meet Women With Big Bucks +In-Reply-To: +References: + +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 20 Sep 2002 21:26:06 -0400 + +GLM> whereas political brochures are not; the statistics clearly show +GLM> which is the greater, more senseless, and more preventable killer. + +So outside of the occasional hit by a mafia-boy, where's the killing? + +If you said mind-numbing, rights destroying, cynic-making force, I'd +agree. But, does politics really kill? + +I'm bitter atm. Two reasons mostly: +1) I was listening to what I heard being the First Amendment +Foundation? on NPR releasing a poll noting that their +very-unscientific poll found that half the population thinks the first +amendment goes too far. And (their quote was 1 in 5, but I'm finding +sources of 1 in 4) of the population don't even know what rights are +guaranteed in the first amendment. + +2) I have a paper due that will make or break my law school career. I +hate being a forced sheep. + +baaaa.... +>>>>>> "R" == Russell Turpin writes: + +GLM> R> It's difficult to measure which is the greater liability in a +GLM> R> potential mate, religiosity or alcoholism. + +GLM> G> Or politics. + + + + + + + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00673.aa68749868d6679697146490282dc908 b/Ch3/datasets/spam/easy_ham/00673.aa68749868d6679697146490282dc908 new file mode 100644 index 000000000..12efb8cd7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00673.aa68749868d6679697146490282dc908 @@ -0,0 +1,67 @@ +From fork-admin@xent.com Sat Sep 21 10:42:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8E77D16F03 + for ; Sat, 21 Sep 2002 10:42:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:42:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L1VlC02067 for ; + Sat, 21 Sep 2002 02:31:47 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id EFA6529417E; Fri, 20 Sep 2002 18:28:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc51.attbi.com (rwcrmhc51.attbi.com [204.127.198.38]) + by xent.com (Postfix) with ESMTP id 6F4C729417F for ; + Fri, 20 Sep 2002 18:27:19 -0700 (PDT) +Received: from [24.61.113.164] by rwcrmhc51.attbi.com (InterMail + vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020921013046.UJKD21615.rwcrmhc51.attbi.com@[24.61.113.164]> for + ; Sat, 21 Sep 2002 01:30:46 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <63161136381.20020920213031@magnesium.net> +To: fork@spamassassin.taint.org +Subject: Fwd: Re[2]: AA Meetings the Hottest Place to Meet Women With Big + Bucks +In-Reply-To: <162160870749.20020920212606@magnesium.net> +References: + + <162160870749.20020920212606@magnesium.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 20 Sep 2002 21:30:31 -0400 + +And of course I forget the link that I did find. + +http://www.constitutioncenter.org/sections/news/8b4.asp + +Neither NPR nor the first amendment foundation seem to have the +article I was looking for declaring the study. + +Even if its half true, its still frightening. + +It makes me want to pass out CATO bibles... + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00674.6dcadfb64e1a333f826a1c7b5c722f5f b/Ch3/datasets/spam/easy_ham/00674.6dcadfb64e1a333f826a1c7b5c722f5f new file mode 100644 index 000000000..1f61af3b1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00674.6dcadfb64e1a333f826a1c7b5c722f5f @@ -0,0 +1,79 @@ +From fork-admin@xent.com Sat Sep 21 10:42:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F028716F16 + for ; Sat, 21 Sep 2002 10:42:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:42:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L3mmC06358 for ; + Sat, 21 Sep 2002 04:48:49 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 989112940AA; Fri, 20 Sep 2002 20:45:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f87.law15.hotmail.com [64.4.23.87]) by + xent.com (Postfix) with ESMTP id DB2D829409C for ; + Fri, 20 Sep 2002 20:44:48 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Fri, 20 Sep 2002 20:48:18 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Sat, 21 Sep 2002 03:48:18 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Re: AA Meetings the Hottest Place to Meet Women With Big Bucks +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 21 Sep 2002 03:48:18.0788 (UTC) FILETIME=[B925EA40:01C26121] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 03:48:18 +0000 + +Gary Lawrence Murphy: +>OK, but only if you also meant religious and alcoholic extremes ;) + +Since it was my quip, I'll point out that I used +the term "alcoholism," implying addiction. I +drink. I'm not an alcoholic. Most people who drink +don't go to AA meetings. Most people who go to AA +meetings do (try very hard) not to drink. + +As to religion, I think it is harmful and risky in +almost any degree. Were I single, I might consider +potential mates who partook of the less irrational +or more light-hearted religions. A Unitarian or +Buddhist might be an example of the first, a Wiccan +of the second. But someone who is both irrational +and serious about that irrationality strikes me as +a bad choice of partner, moreso than someone who +was addicted to some drug. Alcoholics and drug +addicts at least have the sense to battle their +problem, and to keep their children from suffering +it. The religious revel in their irrationality, +and want to raise their children in it. That's a +difficult difference for two parents to +reconcile. + +Fortunately, I am long and happily enamored of +someone who has no religious tendencies. + + + + +_________________________________________________________________ +Send and receive Hotmail on your mobile device: http://mobile.msn.com + + diff --git a/Ch3/datasets/spam/easy_ham/00675.2b3aefd8378ddbd20396c4b9d961a0bd b/Ch3/datasets/spam/easy_ham/00675.2b3aefd8378ddbd20396c4b9d961a0bd new file mode 100644 index 000000000..cb7932650 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00675.2b3aefd8378ddbd20396c4b9d961a0bd @@ -0,0 +1,48 @@ +From fork-admin@xent.com Sat Sep 21 10:43:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A6EB016F16 + for ; Sat, 21 Sep 2002 10:43:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:43:14 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L4uZC09481 for ; + Sat, 21 Sep 2002 05:56:35 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7E5EF294186; Fri, 20 Sep 2002 21:52:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (unknown [64.243.46.20]) by + xent.com (Postfix) with SMTP id EAF02294181 for ; + Fri, 20 Sep 2002 21:51:05 -0700 (PDT) +Received: (qmail 31487 invoked by uid 501); 21 Sep 2002 04:54:00 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 21 Sep 2002 04:54:00 -0000 +From: CDale +To: fork@spamassassin.taint.org +Subject: calling wayne baisley@#! +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 20 Sep 2002 23:54:00 -0500 (CDT) + +You around? +C + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00676.5a7325cc70b1732867ec5b831da86eca b/Ch3/datasets/spam/easy_ham/00676.5a7325cc70b1732867ec5b831da86eca new file mode 100644 index 000000000..21ac02e3a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00676.5a7325cc70b1732867ec5b831da86eca @@ -0,0 +1,64 @@ +From fork-admin@xent.com Sat Sep 21 10:43:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 034D216F16 + for ; Sat, 21 Sep 2002 10:43:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:43:16 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L5NmC10269 for ; + Sat, 21 Sep 2002 06:23:49 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E73CB294180; Fri, 20 Sep 2002 22:20:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from c007.snv.cp.net (h014.c007.snv.cp.net [209.228.33.242]) by + xent.com (Postfix) with SMTP id 0D4C929409C for ; + Fri, 20 Sep 2002 22:19:06 -0700 (PDT) +Received: (cpmta 18810 invoked from network); 20 Sep 2002 22:22:35 -0700 +Received: from 65.189.7.13 (HELO alumni.rice.edu) by + smtp.directvinternet.com (209.228.33.242) with SMTP; 20 Sep 2002 22:22:35 + -0700 +X-Sent: 21 Sep 2002 05:22:35 GMT +Message-Id: <3D8C01C8.6040502@alumni.rice.edu> +From: Wayne E Baisley +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.1) + Gecko/20020823 Netscape/7.0 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Re: calling wayne baisley, the 12-Step Calvinist +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 00:21:12 -0500 + + > help me out here. + > You around? + +Barely, but don't call me Shirley. ;-) + +I'm sleeping with one eye open. + +I wouldn't have married me if I'd known how extremely shallow my +politics are. + +"The ward lurks in Wisteria's maze." + +Cheers, +Wayne + + diff --git a/Ch3/datasets/spam/easy_ham/00677.b957e34b4dd0d9263b56bf71b1168d8a b/Ch3/datasets/spam/easy_ham/00677.b957e34b4dd0d9263b56bf71b1168d8a new file mode 100644 index 000000000..7032aafde --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00677.b957e34b4dd0d9263b56bf71b1168d8a @@ -0,0 +1,1747 @@ +From fork-admin@xent.com Sat Sep 21 10:43:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8C13F16F03 + for ; Sat, 21 Sep 2002 10:42:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:42:55 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L4VYC08647 for ; + Sat, 21 Sep 2002 05:32:22 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6C046294178; Fri, 20 Sep 2002 21:27:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav72.law15.hotmail.com [64.4.22.207]) by + xent.com (Postfix) with ESMTP id BCFAE29409C for ; + Fri, 20 Sep 2002 21:26:52 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Fri, 20 Sep 2002 21:30:22 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: <979BE8FE-CCF6-11D6-817E-000393A46DEA@alumni.caltech.edu> +Subject: Re: sed /s/United States/Roman Empire/g +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 21 Sep 2002 04:30:22.0799 (UTC) FILETIME=[99936DF0:01C26127] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 20 Sep 2002 21:34:51 -0700 + + +"Free trade and free markets have proven their ability to lift whole +societies out of poverty" +I'm not a socio-political/history buff - does anybody have some clear +examples? + + +----- Original Message ----- +From: "Rohit Khare" +To: +Sent: Friday, September 20, 2002 5:10 PM +Subject: sed /s/United States/Roman Empire/g + + +> > A world where some live in comfort and plenty, while half of the human +> > race lives on less than $2 a day, is neither just nor stable. +> +> Absolutely correct. Perhaps the most fundamental thing to realize about +> life on Earth today. +> +> The following is a fascinating document of official Government policy +> that bears close reading. It is the aspirations of a wonderful nation in +> an imperfect world. +> +> > The war on terrorism is not a clash of civilizations. It does, +> > however, reveal the clash inside a civilization, a battle for the +> > future of the Muslim world. This is a struggle of ideas and this is an +> > area where America must excel. +> +> I was recently at a lecture about the surprising success of Radio Sawa, +> our new music-and-news channel for 15-30 year old Arabs. It's #1 in +> practically every market it's entered, nearing 90% listenership in +> Amman. And it's even beginning to be trusted for news, well past BBC and +> taking share from every other government broadcaster. +> +> It is as hard to imagine America losing a war of ideas in the long-term +> as it is to imagine America making any headway at all in the short term. +> +> Many of you may disagree, but I found the document below surprisingly +> centrist. If you know the code, you can hear clearly partisan tones, re: +> ICC, Taiwan Relations Act, etc. But, still, this is as much a Democratic +> platform as not. Africa and AIDS take up more mindshare than I feared +> they might. +> +> As you read, replace "United States" with "Roman Empire" and it may make +> as much sense, in the long view of history. I don't know how proud to be +> about that, but it is telling. Sometime I daydream that the President +> might sit down with the nation with Perotista flip charts and explain to +> our citizens the sheer vastness of our 700+ military installations +> overseas and what they do for us. It would be a powerful education on +> how engaged we are in the world around us. +> +> Heck, I'd love to see a real-time map of Federal expenditures around the +> globe, a softly glowing necklace of embassies, carriers, arctic research +> stations, hotels, golf courses, warehouses, libraries, clinics and all +> the rest of the influence a trillion dollars here or there can buy. +> +> Of course, this still doesn't leave me any more comfortable with the +> real news in this document: the Bush Doctrine for pre-emptive strikes. +> I'd sooner repeal the Church amendments on covert action than permit +> such a principle to be loosed upon the world. +> +> Rohit +> +> ----------------------------------------------------- +> September 20, 2002 +> +> Full Text: Bush's National Security Strategy +> +> Following is the full text of President Bush's new national security +> strategy. The document, entitled "The National Security Strategy of the +> United States," will soon be transmitted to Congress as a declaration of +> the Administration's policy. +> +> INTRODUCTION +> +> THE great struggles of the twentieth century between liberty and +> totalitarianism ended with a decisive victory for the forces of +> freedom -- and a single sustainable model for national success: freedom, +> democracy, and free enterprise. In the twenty-first century, only +> nations that share a commitment to protecting basic human rights and +> guaranteeing political and economic freedom will be able to unleash the +> potential of their people and assure their future prosperity. People +> everywhere want to say what they think; choose who will govern them; +> worship as they please; educate their children -- male and female; own +> property; and enjoy the benefits of their labor. These values of freedom +> are right and true for every person, in every society -- and the duty of +> protecting these values against their enemies is the common calling of +> freedom-loving people across the globe and across the ages. +> +> Today, the United States enjoys a position of unparalleled military +> strength and great economic and political influence. In keeping with our +> heritage and principles, we do not use our strength to press for +> unilateral advantage. We seek instead to create a balance of power that +> favors human freedom: conditions in which all nations and all societies +> can choose for themselves the rewards and challenges of political and +> economic liberty. By making the world safer, we allow the people of the +> world to make their own lives better. We will defend this just peace +> against threats from terrorists and tyrants. We will preserve the peace +> by building good relations among the great powers. We will extend the +> peace by encouraging free and open societies on every continent. +> +> Defending our Nation against its enemies is the first and fundamental +> commitment of the Federal Government. Today, that task has changed +> dramatically. Enemies in the past needed great armies and great +> industrial capabilities to endanger America. Now, shadowy networks of +> individuals can bring great chaos and suffering to our shores for less +> than it costs to purchase a single tank. Terrorists are organized to +> penetrate open societies and to turn the power of modern technologies +> against us. +> +> To defeat this threat we must make use of every tool in our arsenal -- +> from better homeland defenses and law enforcement to intelligence and +> cutting off terrorist financing. The war against terrorists of global +> reach is a global enterprise of uncertain duration. America will help +> nations that need our assistance in combating terror. And America will +> hold to account nations that are compromised by terror -- because the +> allies of terror are the enemies of civilization. The United States and +> countries cooperating with us must not allow the terrorists to develop +> new home bases. Together, we will seek to deny them sanctuary at every +> turn. +> +> The gravest danger our Nation faces lies at the crossroads of radicalism +> and technology. Our enemies have openly declared that they are seeking +> weapons of mass destruction, and evidence indicates that they are doing +> so with determination. The United States will not allow these efforts to +> succeed. We will build defenses against ballistic missiles and other +> means of delivery. We will cooperate with other nations to deny, +> contain, and curtail our enemies' efforts to acquire dangerous +> technologies. And, as a matter of common sense and self-defense, America +> will act against such emerging threats before they are fully formed. We +> cannot defend America and our friends by hoping for the best. So we must +> be prepared to defeat our enemies' plans, using the best intelligence +> and proceeding with deliberation. History will judge harshly those who +> saw this coming danger but failed to act. In the new world we have +> entered, the only path to safety is the path of action. +> +> As we defend the peace, we will also take advantage of an historic +> opportunity to preserve the peace. Today, the international community +> has the best chance since the rise of the nation-state in the +> seventeenth century to build a world where great powers compete in peace +> instead of continually prepare for war. Today, the world's great powers +> find ourselves on the same side -- united by common dangers of terrorist +> violence and chaos. The United States will build on these common +> interests to promote global security. We are also increasingly united by +> common values. Russia is in the midst of a hopeful transition, reaching +> for its democratic future and a partner in the war on terror. Chinese +> leaders are discovering that economic freedom is the only source of +> national wealth. In time, they will find that social and political +> freedom is the only source of national greatness. America will encourage +> the advancement of democracy and economic openness in both nations, +> because these are the best foundations for domestic stability and +> international order. We will strongly resist aggression from other great +> powers -- even as we welcome their peaceful pursuit of prosperity, +> trade, and cultural advancement. +> +> Finally, the United States will use this moment of opportunity to extend +> the benefits of freedom across the globe. We will actively work to bring +> the hope of democracy, development, free markets, and free trade to +> every corner of the world. The events of September 11, 2001, taught us +> that weak states, like Afghanistan, can pose as great a danger to our +> national interests as strong states. Poverty does not make poor people +> into terrorists and murderers. Yet poverty, weak institutions, and +> corruption can make weak states vulnerable to terrorist networks and +> drug cartels within their borders. +> +> The United States will stand beside any nation determined to build a +> better future by seeking the rewards of liberty for its people. Free +> trade and free markets have proven their ability to lift whole societies +> out of poverty -- so the United States will work with individual +> nations, entire regions, and the entire global trading community to +> build a world that trades in freedom and therefore grows in prosperity. +> The United States will deliver greater development assistance through +> the New Millennium Challenge Account to nations that govern justly, +> invest in their people, and encourage economic freedom. We will also +> continue to lead the world in efforts to reduce the terrible toll of +> AIDS and other infectious diseases. +> +> In building a balance of power that favors freedom, the United States is +> guided by the conviction that all nations have important +> responsibilities. Nations that enjoy freedom must actively fight terror. +> Nations that depend on international stability must help prevent the +> spread of weapons of mass destruction. Nations that seek international +> aid must govern themselves wisely, so that aid is well spent. For +> freedom to thrive, accountability must be expected and required. +> +> We are also guided by the conviction that no nation can build a safer, +> better world alone. Alliances and multilateral institutions can multiply +> the strength of freedom-loving nations. The United States is committed +> to lasting institutions like the United Nations, the World Trade +> Organization, the Organization of American States, and NATO as well as +> other long-standing alliances. Coalitions of the willing can augment +> these permanent institutions. In all cases, international obligations +> are to be taken seriously. They are not to be undertaken symbolically to +> rally support for an ideal without furthering its attainment. +> +> Freedom is the non-negotiable demand of human dignity; the birthright of +> every person -- in every civilization. Throughout history, freedom has +> been threatened by war and terror; it has been challenged by the +> clashing wills of powerful states and the evil designs of tyrants; and +> it has been tested by widespread poverty and disease. Today, humanity +> holds in its hands the opportunity to further freedom's triumph over all +> these foes. The United States welcomes our responsibility to lead in +> this great mission. +> +> I. Overview of America's International Strategy +> +> +> "Our Nation's cause has always been larger than our Nation's defense. We +> fight, as we always fight, for a just peace -- a peace that favors +> liberty. We will defend the peace against the threats from terrorists +> and tyrants. We will preserve the peace by building good relations among +> the great powers. And we will extend the peace by encouraging free and +> open societies on every continent." +> +> +> +> +> +> +> President Bush +> West Point, New York +> June 1, 2002 +> +> +> +> The United States possesses unprecedented -- and unequaled -- strength +> and influence in the world. Sustained by faith in the principles of +> liberty, and the value of a free society, this position comes with +> unparalleled responsibilities, obligations, and opportunity. The great +> strength of this nation must be used to promote a balance of power that +> favors freedom. +> +> For most of the twentieth century, the world was divided by a great +> struggle over ideas: destructive totalitarian visions versus freedom and +> equality. +> +> That great struggle is over. The militant visions of class, nation, and +> race which promised utopia and delivered misery have been defeated and +> discredited. America is now threatened less by conquering states than we +> are by failing ones. We are menaced less by fleets and armies than by +> catastrophic technologies in the hands of the embittered few. We must +> defeat these threats to our Nation, allies, and friends. +> +> This is also a time of opportunity for America. We will work to +> translate this moment of influence into decades of peace, prosperity, +> and liberty. The U.S. national security strategy will be based on a +> distinctly American internationalism that reflects the union of our +> values and our national interests. The aim of this strategy is to help +> make the world not just safer but better. Our goals on the path to +> progress are clear: political and economic freedom, peaceful relations +> with other states, and respect for human dignity. +> +> And this path is not America's alone. It is open to all. +> +> To achieve these goals, the United States will: +> +> * champion aspirations for human dignity; +> +> * strengthen alliances to defeat global terrorism and work to prevent +> attacks against us and our friends; +> +> * work with others to defuse regional conflicts; +> +> * prevent our enemies from threatening us, our allies, and our +> friends, with weapons of mass destruction; +> +> * ignite a new era of global economic growth through free markets and +> free trade; +> +> * expand the circle of development by opening societies and building +> the infrastructure of democracy; +> +> * develop agendas for cooperative action with other main centers of +> global power; and +> +> * transform America's national security institutions to meet the +> challenges and opportunities of the twenty-first century. +> +> +> II. Champion Aspirations for Human Dignity +> +> +> "Some worry that it is somehow undiplomatic or impolite to speak the +> language of right and wrong. I disagree. Different circumstances require +> different methods, but not different moralities." +> +> +> +> +> +> President Bush +> West Point, New York +> June 1, 2002 +> +> +> +> In pursuit of our goals, our first imperative is to clarify what we +> stand for: the United States must defend liberty and justice because +> these principles are right and true for all people everywhere. No nation +> owns these aspirations, and no nation is exempt from them. Fathers and +> mothers in all societies want their children to be educated and to live +> free from poverty and violence. No people on earth yearn to be +> oppressed, aspire to servitude, or eagerly await the midnight knock of +> the secret police. +> +> America must stand firmly for the nonnegotiable demands of human +> dignity: the rule of law; limits on the absolute power of the state; +> free speech; freedom of worship; equal justice; respect for women; +> religious and ethnic tolerance; and respect for private property. +> +> These demands can be met in many ways. America's constitution has served +> us well. Many other nations, with different histories and cultures, +> facing different circumstances, have successfully incorporated these +> core principles into their own systems of governance. History has not +> been kind to those nations which ignored or flouted the rights and +> aspirations of their people. +> +> Our own history is a long struggle to live up to our ideals. But even in +> our worst moments, the principles enshrined in the Declaration of +> Independence were there to guide us. As a result, America is not just a +> stronger, but is a freer and more just society. +> +> Today, these ideals are a lifeline to lonely defenders of liberty. And +> when openings arrive, we can encourage change -- as we did in central +> and eastern Europe between 1989 and 1991, or in Belgrade in 2000. When +> we see democratic processes take hold among our friends in Taiwan or in +> the Republic of Korea, and see elected leaders replace generals in Latin +> America and Africa, we see examples of how authoritarian systems can +> evolve, marrying local history and traditions with the principles we all +> cherish. +> +> Embodying lessons from our past and using the opportunity we have today, +> the national security strategy of the United States must start from +> these core beliefs and look outward for possibilities to expand liberty. +> +> Our principles will guide our government's decisions about international +> cooperation, the character of our foreign assistance, and the allocation +> of resources. They will guide our actions and our words in international +> bodies. +> +> We will: +> +> * speak out honestly about violations of the nonnegotiable demands of +> human dignity using our voice and vote in international institutions to +> advance freedom; +> +> * use our foreign aid to promote freedom and support those who +> struggle non-violently for it, ensuring that nations moving toward +> democracy are rewarded for the steps they take; +> +> * make freedom and the development of democratic institutions key +> themes in our bilateral relations, seeking solidarity and cooperation +> from other democracies while we press governments that deny human rights +> to move toward a better future; and +> +> * take special efforts to promote freedom of religion and conscience +> and defend it from encroachment by repressive governments. +> +> +> We will champion the cause of human dignity and oppose those who resist +> it. +> +> III. Strengthen Alliances to Defeat Global Terrorism and Work to Prevent +> Attacks Against Us and Our Friends +> +> +> "Just three days removed from these events, Americans do not yet have +> the distance of history. But our responsibility to history is already +> clear: to answer these attacks and rid the world of evil. War has been +> waged against us by stealth and deceit and murder. This nation is +> peaceful, but fierce when stirred to anger. The conflict was begun on +> the timing and terms of others. It will end in a way, and at an hour, of +> our choosing." +> +> +> +> +> +> President Bush +> Washington, D.C. (The National Cathedral) +> September 14, 2001 +> +> +> +> The United States of America is fighting a war against terrorists of +> global reach. The enemy is not a single political regime or person or +> religion or ideology. The enemy is terrorism -- premeditated, +> politically motivated violence perpetrated against innocents. +> +> In many regions, legitimate grievances prevent the emergence of a +> lasting peace. Such grievances deserve to be, and must be, addressed +> within a political process. But no cause justifies terror. The United +> States will make no concessions to terrorist demands and strike no deals +> with them. We make no distinction between terrorists and those who +> knowingly harbor or provide aid to them. +> +> The struggle against global terrorism is different from any other war in +> our history. It will be fought on many fronts against a particularly +> elusive enemy over an extended period of time. Progress will come +> through the persistent accumulation of successes -- some seen, some +> unseen. +> +> Today our enemies have seen the results of what civilized nations can, +> and will, do against regimes that harbor, support, and use terrorism to +> achieve their political goals. Afghanistan has been liberated; coalition +> forces continue to hunt down the Taliban and al-Qaida. But it is not +> only this battlefield on which we will engage terrorists. Thousands of +> trained terrorists remain at large with cells in North America, South +> America, Europe, Africa, the Middle East, and across Asia. +> +> Our priority will be first to disrupt and destroy terrorist +> organizations of global reach and attack their leadership; command, +> control, and communications; material support; and finances. This will +> have a disabling effect upon the terrorists' ability to plan and operate. +> +> We will continue to encourage our regional partners to take up a +> coordinated effort that isolates the terrorists. Once the regional +> campaign localizes the threat to a particular state, we will help ensure +> the state has the military, law enforcement, political, and financial +> tools necessary to finish the task. +> +> The United States will continue to work with our allies to disrupt the +> financing of terrorism. We will identify and block the sources of +> funding for terrorism, freeze the assets of terrorists and those who +> support them, deny terrorists access to the international financial +> system, protect legitimate charities from being abused by terrorists, +> and prevent the movement of terrorists' assets through alternative +> financial networks. +> +> However, this campaign need not be sequential to be effective, the +> cumulative effect across all regions will help achieve the results we +> seek. +> +> We will disrupt and destroy terrorist organizations by: +> +> * direct and continuous action using all the elements of national and +> international power. Our immediate focus will be those terrorist +> organizations of global reach and any terrorist or state sponsor of +> terrorism which attempts to gain or use weapons of mass destruction +> (WMD) or their precursors; +> +> * defending the United States, the American people, and our interests +> at home and abroad by identifying and destroying the threat before it +> reaches our borders. While the United States will constantly strive to +> enlist the support of the international community, we will not hesitate +> to act alone, if necessary, to exercise our right of self-defense by +> acting preemptively against such terrorists, to prevent them from doing +> harm against our people and our country; and +> +> * denying further sponsorship, support, and sanctuary to terrorists +> by convincing or compelling states to accept their sovereign +> responsibilities. +> +> +> We will also wage a war of ideas to win the battle against international +> terrorism. This includes: +> +> * using the full influence of the United States, and working closely +> with allies and friends, to make clear that all acts of terrorism are +> illegitimate so that terrorism will be viewed in the same light as +> slavery, piracy, or genocide: behavior that no respectable government +> can condone or support and all must oppose; +> +> * supporting moderate and modern government, especially in the Muslim +> world, to ensure that the conditions and ideologies that promote +> terrorism do not find fertile ground in any nation; +> +> * diminishing the underlying conditions that spawn terrorism by +> enlisting the international community to focus its efforts and resources +> on areas most at risk; and +> +> * using effective public diplomacy to promote the free flow of +> information and ideas to kindle the hopes and aspirations of freedom of +> those in societies ruled by the sponsors of global terrorism. +> +> +> While we recognize that our best defense is a good offense we are also +> strengthening America's homeland security to protect against and deter +> attack. +> +> This Administration has proposed the largest government reorganization +> since the Truman Administration created the National Security Council +> and the Department of Defense. Centered on a new Department of Homeland +> Security and including a new unified military command and a fundamental +> reordering of the FBI, our comprehensive plan to secure the homeland +> encompasses every level of government and the cooperation of the public +> and the private sector. +> +> This strategy will turn adversity into opportunity. For example, +> emergency management systems will be better able to cope not just with +> terrorism but with all hazards. Our medical system will be strengthened +> to manage not just bioterror, but all infectious diseases and +> mass-casualty dangers. Our border controls will not just stop +> terrorists, but improve the efficient movement of legitimate traffic. +> +> While our focus is protecting America, we know that to defeat terrorism +> in today's globalized world we need support from our allies and friends. +> Wherever possible, the United States will rely on regional organizations +> and state powers to meet their obligations to fight terrorism. Where +> governments find the fight against terrorism beyond their capacities, we +> will match their willpower and their resources with whatever help we and +> our allies can provide. +> +> As we pursue the terrorists in Afghanistan, we will continue to work +> with international organizations such as the United Nations, as well as +> non-governmental organizations, and other countries to provide the +> humanitarian, political, economic, and security assistance necessary to +> rebuild Afghanistan so that it will never again abuse its people, +> threaten its neighbors, and provide a haven for terrorists +> +> In the war against global terrorism, we will never forget that we are +> ultimately fighting for our democratic values and way of life. Freedom +> and fear are at war, and there will be no quick or easy end to this +> conflict. In leading the campaign against terrorism, we are forging new, +> productive international relationships and redefining existing ones in +> ways that meet the challenges of the twenty-first century. +> +> IV. Work with Others To Defuse Regional Conflicts +> +> +> "We build a world of justice, or we will live in a world of coercion. +> The magnitude of our shared responsibilities makes our disagreements +> look so small." +> +> +> +> +> +> President Bush +> Berlin, Germany +> May 23, 2002 +> +> +> +> Concerned nations must remain actively engaged in critical regional +> disputes to avoid explosive escalation and minimize human suffering. In +> an increasingly interconnected world, regional crisis can strain our +> alliances, rekindle rivalries among the major powers, and create +> horrifying affronts to human dignity. When violence erupts and states +> falter, the United States will work with friends and partners to +> alleviate suffering and restore stability. +> +> No doctrine can anticipate every circumstance in which U.S. action -- +> direct or indirect -- is warranted. We have finite political, economic, +> and military resources to meet our global priorities. The United States +> will approach each case with these strategic principles in mind: +> +> * The United States should invest time and resources into building +> international relationships and institutions that can help manage local +> crises when they emerge. +> +> * The United States should be realistic about its ability to help +> those who are unwilling or unready to help themselves. Where and when +> people are ready to do their part, we will be willing to move decisively. +> +> +> Policies in several key regions offer some illustrations of how we will +> apply these principles: +> +> The Israeli-Palestinian conflict is critical because of the toll of +> human suffering, because of America's close relationship with the state +> of Israel and key Arab states, and because of that region's importance +> to other global priorities of the United States. There can be no peace +> for either side without freedom for both sides. America stands committed +> to an independent and democratic Palestine, living beside Israel in +> peace and security. Like all other people, Palestinians deserve a +> government that serves their interests, and listens to their voices, and +> counts their votes. The United States will continue to encourage all +> parties to step up to their responsibilities as we seek a just and +> comprehensive settlement to the conflict. +> +> The United States, the international donor community, and the World Bank +> stand ready to work with a reformed Palestinian government on economic +> development, increased humanitarian assistance and a program to +> establish, finance, and monitor a truly independent judiciary. If +> Palestinians embrace democracy, and the rule of law, confront +> corruption, and firmly reject terror, they can count on American support +> for the creation of a Palestinian state. +> +> Israel also has a large stake in the success of a democratic Palestine. +> Permanent occupation threatens Israel's identity and democracy. So the +> United States continues to challenge Israeli leaders to take concrete +> steps to support the emergence of a viable, credible Palestinian state. +> As there is progress towards security, Israel forces need to withdraw +> fully to positions they held prior to September 28, 2000. And consistent +> with the recommendations of the Mitchell Committee, Israeli settlement +> activity in the occupied territories must stop. As violence subsides, +> freedom of movement should be restored, permitting innocent Palestinians +> to resume work and normal life. The United States can play a crucial +> role but, ultimately, lasting peace can only come when Israelis and +> Palestinians resolve the issues and end the conflict between them. +> +> In South Asia, the United States has also emphasized the need for India +> and Pakistan to resolve their disputes. This administration invested +> time and resources building strong bilateral relations with India and +> Pakistan. These strong relations then gave us leverage to play a +> constructive role when tensions in the region became acute. With +> Pakistan, our bilateral relations have been bolstered by Pakistan's +> choice to join the war against terror and move toward building a more +> open and tolerant society. The Administration sees India's potential to +> become one of the great democratic powers of the twenty-first century +> and has worked hard to transform our relationship accordingly. Our +> involvement in this regional dispute, building on earlier investments in +> bilateral relations, looks first to concrete steps by India and Pakistan +> that can help defuse military confrontation. +> +> Indonesia took courageous steps to create a working democracy and +> respect for the rule of law. By tolerating ethnic minorities, respecting +> the rule of law, and accepting open markets, Indonesia may be able to +> employ the engine of opportunity that has helped lift some of its +> neighbors out of poverty and desperation. It is the initiative by +> Indonesia that allows U.S. assistance to make a difference. +> +> In the Western Hemisphere we have formed flexible coalitions with +> countries that share our priorities, particularly Mexico, Brazil, +> Canada, Chile, and Colombia. Together we will promote a truly democratic +> hemisphere where our integration advances security, prosperity, +> opportunity, and hope. We will work with regional institutions, such as +> the Summit of the Americas process, the Organization of American States +> (OAS), and the Defense Ministerial of the Americas for the benefit of +> the entire hemisphere. +> +> Parts of Latin America confront regional conflict, especially arising +> from the violence of drug cartels and their accomplices. This conflict +> and unrestrained narcotics trafficking could imperil the health and +> security of the United States. Therefore we have developed an active +> strategy to help the Andean nations adjust their economies, enforce +> their laws, defeat terrorist organizations, and cut off the supply of +> drugs, while -- as important -- we work to reduce the demand for drugs +> in our own country. +> +> In Colombia, we recognize the link between terrorist and extremist +> groups that challenge the security of the state and drug trafficking +> activities that help finance the operations of such groups. We are +> working to help Colombia defend its democratic institutions and defeat +> illegal armed groups of both the left and right by extending effective +> sovereignty over the entire national territory and provide basic +> security to the Colombian people. +> +> In Africa, promise and opportunity sit side by side with disease, war, +> and desperate poverty. This threatens both a core value of the United +> States -- preserving human dignity -- and our strategic priority -- +> combating global terror. American interests and American principles, +> therefore, lead in the same direction: we will work with others for an +> African continent that lives in liberty, peace, and growing prosperity. +> Together with our European allies, we must help strengthen Africa's +> fragile states, help build indigenous capability to secure porous +> borders, and help build up the law enforcement and intelligence +> infrastructure to deny havens for terrorists. +> +> An ever more lethal environment exists in Africa as local civil wars +> spread beyond borders to create regional war zones. Forming coalitions +> of the willing and cooperative security arrangements are key to +> confronting these emerging transnational threats. +> +> Africa's great size and diversity requires a security strategy that +> focuses bilateral engagement, and builds coalitions of the willing. This +> administration will focus on three interlocking strategies for the +> region: +> +> * countries with major impact on their neighborhood such as South +> Africa, Nigeria, Kenya, and Ethiopia are anchors for regional engagement +> and require focused attention; +> +> * coordination with European allies and international institutions is +> essential for constructive conflict mediation and successful peace +> operations; and +> +> * Africa's capable reforming states and sub-regional organizations +> must be strengthened as the primary means to address transnational +> threats on a sustained basis. +> +> +> Ultimately the path of political and economic freedom presents the +> surest route to progress in sub-Saharan Africa, where most wars are +> conflicts over material resources and political access often tragically +> waged on the basis of ethnic and religious difference. The transition to +> the African Union with its stated commitment to good governance and a +> common responsibility for democratic political systems offers +> opportunities to strengthen democracy on the continent. +> +> V. Prevent Our Enemies from Threatening Us, Our Allies, and Our Friends +> with Weapons of Mass Destruction +> +> +> "The gravest danger to freedom lies at the crossroads of radicalism and +> technology. When the spread of chemical and biological and nuclear +> weapons, along with ballistic missile technology -- when that occurs, +> even weak states and small groups could attain a catastrophic power to +> strike great nations. Our enemies have declared this very intention, and +> have been caught seeking these terrible weapons. They want the +> capability to blackmail us, or to harm us, or to harm our friends -- and +> we will oppose them with all our power." +> +> +> +> +> +> President Bush +> West Point, New York +> June 1, 2002 +> +> +> +> The nature of the Cold War threat required the United States -- with our +> allies and friends -- to emphasize deterrence of the enemy's use of +> force, producing a grim strategy of mutual assured destruction. With the +> collapse of the Soviet Union and the end of the Cold War, our security +> environment has undergone profound transformation. +> +> Having moved from confrontation to cooperation as the hallmark of our +> relationship with Russia, the dividends are evident: an end to the +> balance of terror that divided us; an historic reduction in the nuclear +> arsenals on both sides; and cooperation in areas such as +> counterterrorism and missile defense that until recently were +> inconceivable. +> +> But new deadly challenges have emerged from rogue states and terrorists. +> None of these contemporary threats rival the sheer destructive power +> that was arrayed against us by the Soviet Union. However, the nature and +> motivations of these new adversaries, their determination to obtain +> destructive powers hitherto available only to the world's strongest +> states, and the greater likelihood that they will use weapons of mass +> destruction against us, make today's security environment more complex +> and dangerous. +> +> In the 1990s we witnessed the emergence of a small number of rogue +> states that, while different in important ways, share a number of +> attributes. These states: +> +> * brutalize their own people and squander their national resources +> for the personal gain of the rulers; +> +> * display no regard for international law, threaten their neighbors, +> and callously violate international treaties to which they are party; +> +> * are determined to acquire weapons of mass destruction, along with +> other advanced military technology, to be used as threats or offensively +> to achieve the aggressive designs of these regimes; +> +> * sponsor terrorism around the globe; and +> +> * reject basic human values and hate the United States and everything +> for which it stands. +> +> +> At the time of the Gulf War, we acquired irrefutable proof that Iraq's +> designs were not limited to the chemical weapons it had used against +> Iran and its own people, but also extended to the acquisition of nuclear +> weapons and biological agents. In the past decade North Korea has become +> the world's principal purveyor of ballistic missiles, and has tested +> increasingly capable missiles while developing its own WMD arsenal. +> Other rogue regimes seek nuclear, biological, and chemical weapons as +> well. These states' pursuit of, and global trade in, such weapons has +> become a looming threat to all nations. +> +> We must be prepared to stop rogue states and their terrorist clients +> before they are able to threaten or use weapons of mass destruction +> against the United States and our allies and friends. Our response must +> take full advantage of strengthened alliances, the establishment of new +> partnerships with former adversaries, innovation in the use of military +> forces, modern technologies, including the development of an effective +> missile defense system, and increased emphasis on intelligence +> collection and analysis. +> +> Our comprehensive strategy to combat WMD includes: +> +> * Proactive counterproliferation efforts. We must deter and defend +> against the threat before it is unleashed. We must ensure that key +> capabilities -- detection, active and passive defenses, and counterforce +> capabilities -- are integrated into our defense transformation and our +> homeland security systems. Counterproliferation must also be integrated +> into the doctrine, training, and equipping of our forces and those of +> our allies to ensure that we can prevail in any conflict with WMD-armed +> adversaries. +> +> * Strengthened nonproliferation efforts to prevent rogue states and +> terrorists from acquiring the materials, technologies and expertise +> necessary for weapons of mass destruction. We will enhance diplomacy, +> arms control, multilateral export controls, and threat reduction +> assistance that impede states and terrorists seeking WMD, and when +> necessary, interdict enabling technologies and materials. We will +> continue to build coalitions to support these efforts, encouraging their +> increased political and financial support for nonproliferation and +> threat reduction programs. The recent G-8 agreement to commit up to $20 +> billion to a global partnership against proliferation marks a major step +> forward. +> +> * Effective consequence management to respond to the effects of WMD +> use, whether by terrorists or hostile states. Minimizing the effects of +> WMD use against our people will help deter those who possess such +> weapons and dissuade those who seek to acquire them by persuading +> enemies that they cannot attain their desired ends. The United States +> must also be prepared to respond to the effects of WMD use against our +> forces abroad, and to help friends and allies if they are attacked. +> +> +> It has taken almost a decade for us to comprehend the true nature of +> this new threat. Given the goals of rogue states and terrorists, the +> United States can no longer solely rely on a reactive posture as we have +> in the past. The inability to deter a potential attacker, the immediacy +> of today's threats, and the magnitude of potential harm that could be +> caused by our adversaries' choice of weapons, do not permit that option. +> We cannot let our enemies strike first. +> +> * In the Cold War, especially following the Cuban missile crisis, we +> faced a generally status quo, risk-averse adversary. Deterrence was an +> effective defense. But deterrence based only upon the threat of +> retaliation is far less likely to work against leaders of rogue states +> more willing to take risks, gambling with the lives of their people, and +> the wealth of their nations. +> +> * In the Cold War, weapons of mass destruction were considered +> weapons of last resort whose use risked the destruction of those who +> used them. Today, our enemies see weapons of mass destruction as weapons +> of choice. For rogue states these weapons are tools of intimidation and +> military aggression against their neighbors. These weapons may also +> allow these states to attempt to blackmail the United States and our +> allies to prevent us from deterring or repelling the aggressive behavior +> of rogue states. Such states also see these weapons as their best means +> of overcoming the conventional superiority of the United States. +> +> * Traditional concepts of deterrence will not work against a +> terrorist enemy whose avowed tactics are wanton destruction and the +> targeting of innocents; whose so-called soldiers seek martyrdom in death +> and whose most potent protection is statelessness. The overlap between +> states that sponsor terror and those that pursue WMD compels us to +> action. +> +> +> For centuries, international law recognized that nations need not suffer +> an attack before they can lawfully take action to defend themselves +> against forces that present an imminent danger of attack. Legal scholars +> and international jurists often conditioned the legitimacy of preemption +> on the existence of an imminent threat -- most often a visible +> mobilization of armies, navies, and air forces preparing to attack. +> +> We must adapt the concept of imminent threat to the capabilities and +> objectives of today's adversaries. Rogue states and terrorists do not +> seek to attack us using conventional means. They know such attacks would +> fail. Instead, they rely on acts of terrorism and, potentially, the use +> of weapons of mass destruction -- weapons that can be easily concealed +> and delivered covertly and without warning. +> +> The targets of these attacks are our military forces and our civilian +> population, in direct violation of one of the principal norms of the law +> of warfare. As was demonstrated by the losses on September 11, 2001, +> mass civilian casualties is the specific objective of terrorists and +> these losses would be exponentially more severe if terrorists acquired +> and used weapons of mass destruction. +> +> The United States has long maintained the option of preemptive actions +> to counter a sufficient threat to our national security. The greater the +> threat, the greater is the risk of inaction -- and the more compelling +> the case for taking anticipatory action to defend ourselves, even if +> uncertainty remains as to the time and place of the enemy's attack. To +> forestall or prevent such hostile acts by our adversaries, the United +> States will, if necessary, act preemptively. +> +> The United States will not use force in all cases to preempt emerging +> threats, nor should nations use preemption as a pretext for aggression. +> Yet in an age where the enemies of civilization openly and actively seek +> the world's most destructive technologies, the United States cannot +> remain idle while dangers gather. +> +> We will always proceed deliberately, weighing the consequences of our +> actions. To support preemptive options, we will: +> +> * build better, more integrated intelligence capabilities to provide +> timely, accurate information on threats, wherever they may emerge; +> +> * coordinate closely with allies to form a common assessment of the +> most dangerous threats; and +> +> * continue to transform our military forces to ensure our ability to +> conduct rapid and precise operations to achieve decisive results. +> +> +> The purpose of our actions will always be to eliminate a specific threat +> to the United States or our allies and friends. The reasons for our +> actions will be clear, the force measured, and the cause just. +> +> VI. Ignite a New Era of Global Economic Growth through Free Markets and +> Free Trade. +> +> +> "When nations close their markets and opportunity is hoarded by a +> privileged few, no amount -- no amount -- of development aid is ever +> enough. When nations respect their people, open markets, invest in +> better health and education, every dollar of aid, every dollar of trade +> revenue and domestic capital is used more effectively." +> +> +> +> +> +> President Bush +> Monterrey, Mexico +> March 22, 2002 +> +> +> +> A strong world economy enhances our national security by advancing +> prosperity and freedom in the rest of the world. Economic growth +> supported by free trade and free markets creates new jobs and higher +> incomes. It allows people to lift their lives out of poverty, spurs +> economic and legal reform, and the fight against corruption, and it +> reinforces the habits of liberty. +> +> We will promote economic growth and economic freedom beyond America's +> shores. All governments are responsible for creating their own economic +> policies and responding to their own economic challenge. We will use our +> economic engagement with other countries to underscore the benefits of +> policies that generate higher productivity and sustained economic +> growth, including: +> +> * pro-growth legal and regulatory policies to encourage business +> investment, innovation, and entrepreneurial activity; +> +> * tax policies -- particularly lower marginal tax rates -- that +> improve incentives for work and investment; +> +> * rule of law and intolerance of corruption so that people are +> confident that they will be able to enjoy the fruits of their economic +> endeavors; +> +> * strong financial systems that allow capital to be put to its most +> efficient use; +> +> * sound fiscal policies to support business activity; +> +> * investments in health and education that improve the well-being and +> skills of the labor force and population as a whole; and +> +> * free trade that provides new avenues for growth and fosters the +> diffusion of technologies and ideas that increase productivity and +> opportunity. +> +> +> The lessons of history are clear: market economies, not +> command-and-control economies with the heavy hand of government, are the +> best way to promote prosperity and reduce poverty. Policies that further +> strengthen market incentives and market institutions are relevant for +> all economies -- industrialized countries, emerging markets, and the +> developing world. +> +> A return to strong economic growth in Europe and Japan is vital to U.S. +> national security interests. We want our allies to have strong economies +> for their own sake, for the sake of the global economy, and for the sake +> of global security. European efforts to remove structural barriers in +> their economies are particularly important in this regard, as are +> Japan's efforts to end deflation and address the problems of +> non-performing loans in the Japanese banking system. We will continue to +> use our regular consultations with Japan and our European partners -- +> including through the Group of Seven (G-7) -- to discuss policies they +> are adopting to promote growth in their economies and support higher +> global economic growth. +> +> Improving stability in emerging markets is also key to global economic +> growth. International flows of investment capital are needed to expand +> the productive potential of these economies. These flows allow emerging +> markets and developing countries to make the investments that raise +> living standards and reduce poverty. Our long-term objective should be a +> world in which all countries have investment-grade credit ratings that +> allow them access to international capital markets and to invest in +> their future. +> +> We are committed to policies that will help emerging markets achieve +> access to larger capital flows at lower cost. To this end, we will +> continue to pursue reforms aimed at reducing uncertainty in financial +> markets. We will work actively with other countries, the International +> Monetary Fund (IMF), and the private sector to implement the G-7 Action +> Plan negotiated earlier this year for preventing financial crises and +> more effectively resolving them when they occur. +> +> The best way to deal with financial crises is to prevent them from +> occurring, and we have encouraged the IMF to improve its efforts doing +> so. We will continue to work with the IMF to streamline the policy +> conditions for its lending and to focus its lending strategy on +> achieving economic growth through sound fiscal and monetary policy, +> exchange rate policy, and financial sector policy. +> +> The concept of "free trade" arose as a moral principle even before it +> became a pillar of economics. If you can make something that others +> value, you should be able to sell it to them. If others make something +> that you value, you should be able to buy it. This is real freedom, the +> freedom for a person -- or a nation -- to make a living. To promote free +> trade, the Unites States has developed a comprehensive strategy: +> +> * Seize the global initiative. The new global trade negotiations we +> helped launch at Doha in November 2001 will have an ambitious agenda, +> especially in agriculture, manufacturing, and services, targeted for +> completion in 2005. The United States has led the way in completing the +> accession of China and a democratic Taiwan to the World Trade +> Organization. We will assist Russia's preparations to join the WTO. +> +> * Press regional initiatives. The United States and other democracies +> in the Western Hemisphere have agreed to create the Free Trade Area of +> the Americas, targeted for completion in 2005. This year the United +> States will advocate market-access negotiations with its partners, +> targeted on agriculture, industrial goods, services, investment, and +> government procurement. We will also offer more opportunity to the +> poorest continent, Africa, starting with full use of the preferences +> allowed in the African Growth and Opportunity Act, and leading to free +> trade. +> +> * Move ahead with bilateral free trade agreements. Building on the +> free trade agreement with Jordan enacted in 2001, the Administration +> will work this year to complete free trade agreements with Chile and +> Singapore. Our aim is to achieve free trade agreements with a mix of +> developed and developing countries in all regions of the world. +> Initially, Central America, Southern Africa, Morocco, and Australia will +> be our principal focal points. +> +> * Renew the executive-congressional partnership. Every +> administration's trade strategy depends on a productive partnership with +> Congress. After a gap of 8 years, the Administration reestablished +> majority support in the Congress for trade liberalization by passing +> Trade Promotion Authority and the other market opening measures for +> developing countries in the Trade Act of 2002. This Administration will +> work with Congress to enact new bilateral, regional, and global trade +> agreements that will be concluded under the recently passed Trade +> Promotion Authority. +> +> * Promote the connection between trade and development. Trade +> policies can help developing countries strengthen property rights, +> competition, the rule of law, investment, the spread of knowledge, open +> societies, the efficient allocation of resources, and regional +> integration -- all leading to growth, opportunity, and confidence in +> developing countries. The United States is implementing The Africa +> Growth and Opportunity Act to provide market-access for nearly all goods +> produced in the 35 countries of sub-Saharan Africa. We will make more +> use of this act and its equivalent for the Caribbean Basin and continue +> to work with multilateral and regional institutions to help poorer +> countries take advantage of these opportunities. Beyond market access, +> the most important area where trade intersects with poverty is in public +> health. We will ensure that the WTO intellectual property rules are +> flexible enough to allow developing nations to gain access to critical +> medicines for extraordinary dangers like HIV/AIDS, tuberculosis, and +> malaria. +> +> * Enforce trade agreements and laws against unfair practices. +> Commerce depends on the rule of law; international trade depends on +> enforceable agreements. Our top priorities are to resolve ongoing +> disputes with the European Union, Canada, and Mexico and to make a +> global effort to address new technology, science, and health regulations +> that needlessly impede farm exports and improved agriculture. Laws +> against unfair trade practices are often abused, but the international +> community must be able to address genuine concerns about government +> subsidies and dumping. International industrial espionage which +> undermines fair competition must be detected and deterred. +> +> * Help domestic industries and workers adjust. There is a sound +> statutory framework for these transitional safeguards which we have used +> in the agricultural sector and which we are using this year to help the +> American steel industry. The benefits of free trade depend upon the +> enforcement of fair trading practices. These safeguards help ensure that +> the benefits of free trade do not come at the expense of American +> workers. Trade adjustment assistance will help workers adapt to the +> change and dynamism of open markets. +> +> * Protect the environment and workers. The United States must foster +> economic growth in ways that will provide a better life along with +> widening prosperity. We will incorporate labor and environmental +> concerns into U.S. trade negotiations, creating a healthy "network" +> between multilateral environmental agreements with the WTO, and use the +> International Labor Organization, trade preference programs, and trade +> talks to improve working conditions in conjunction with freer trade. +> +> * Enhance energy security. We will strengthen our own energy security +> and the shared prosperity of the global economy by working with our +> allies, trading partners, and energy producers to expand the sources and +> types of global energy supplied, especially in the Western Hemisphere, +> Africa, Central Asia, and the Caspian region. We will also continue to +> work with our partners to develop cleaner and more energy efficient +> technologies. +> +> +> Economic growth should be accompanied by global efforts to stabilize +> greenhouse gas concentrations associated with this growth, containing +> them at a level that prevents dangerous human interference with the +> global climate. Our overall objective is to reduce America's greenhouse +> gas emissions relative to the size of our economy, cutting such +> emissions per unit of economic activity by 18 percent over the next 10 +> years, by the year 2012. Our strategies for attaining this goal will be +> to: +> +> * remain committed to the basic U.N. Framework Convention for +> international cooperation; +> +> * obtain agreements with key industries to cut emissions of some of +> the most potent greenhouse gases and give transferable credits to +> companies that can show real cuts; +> +> * develop improved standards for measuring and registering emission +> reductions; +> +> * promote renewable energy production and clean coal technology, as +> well as nuclear power -- which produces no greenhouse gas emissions, +> while also improving fuel economy for U.S. cars and trucks; +> +> * increase spending on research and new conservation technologies, to +> a total of $4.5 billion -- the largest sum being spent on climate change +> by any country in the world and a $700 million increase over last year's +> budget; and +> +> * assist developing countries, especially the major greenhouse gas +> emitters such as China and India, so that they will have the tools and +> resources to join this effort and be able to grow along a cleaner and +> better path. +> +> +> VII. Expand the Circle of Development by Opening Societies and Building +> the Infrastructure of Democracy +> +> +> "In World War II we fought to make the world safer, then worked to +> rebuild it. As we wage war today to keep the world safe from terror, we +> must also work to make the world a better place for all its citizens." +> +> +> +> +> +> President Bush +> Washington, D.C. (Inter-American +> Development Bank) +> March 14, 2002 +> +> +> +> A world where some live in comfort and plenty, while half of the human +> race lives on less than $2 a day, is neither just nor stable. Including +> all of the world's poor in an expanding circle of development -- and +> opportunity -- is a moral imperative and one of the top priorities of +> U.S. international policy. +> +> Decades of massive development assistance have failed to spur economic +> growth in the poorest countries. Worse, development aid has often served +> to prop up failed policies, relieving the pressure for reform and +> perpetuating misery. Results of aid are typically measured in dollars +> spent by donors, not in the rates of growth and poverty reduction +> achieved by recipients. These are the indicators of a failed strategy. +> +> Working with other nations, the United States is confronting this +> failure. We forged a new consensus at the U.N. Conference on Financing +> for Development in Monterrey that the objectives of assistance -- and +> the strategies to achieve those objectives -- must change. +> +> This Administration's goal is to help unleash the productive potential +> of individuals in all nations. Sustained growth and poverty reduction is +> impossible without the right national policies. Where governments have +> implemented real policy changes we will provide significant new levels +> of assistance. The United States and other developed countries should +> set an ambitious and specific target: to double the size of the world's +> poorest economies within a decade. +> +> The United States Government will pursue these major strategies to +> achieve this goal: +> +> * Provide resources to aid countries that have met the challenge of +> national reform. We propose a 50 percent increase in the core +> development assistance given by the United States. While continuing our +> present programs, including humanitarian assistance based on need alone, +> these billions of new dollars will form a new Millennium Challenge +> Account for projects in countries whose governments rule justly, invest +> in their people, and encourage economic freedom. Governments must fight +> corruption, respect basic human rights, embrace the rule of law, invest +> in health care and education, follow responsible economic policies, and +> enable entrepreneurship. The Millennium Challenge Account will reward +> countries that have demonstrated real policy change and challenge those +> that have not to implement reforms. +> +> * Improve the effectiveness of the World Bank and other development +> banks in raising living standards. The United States is committed to a +> comprehensive reform agenda for making the World Bank and the other +> multilateral development banks more effective in improving the lives of +> the world's poor. We have reversed the downward trend in U.S. +> contributions and proposed an 18 percent increase in the U.S. +> contributions to the International Development Association (IDA) -- the +> World Bank's fund for the poorest countries -- and the African +> Development Fund. The key to raising living standards and reducing +> poverty around the world is increasing productivity growth, especially +> in the poorest countries. We will continue to press the multilateral +> development banks to focus on activities that increase economic +> productivity, such as improvements in education, health, rule of law, +> and private sector development. Every project, every loan, every grant +> must be judged by how much it will increase productivity growth in +> developing countries. +> +> * Insist upon measurable results to ensure that development +> assistance is actually making a difference in the lives of the world's +> poor. When it comes to economic development, what really matters is that +> more children are getting a better education, more people have access to +> health care and clean water, or more workers can find jobs to make a +> better future for their families. We have a moral obligation to measure +> the success of our development assistance by whether it is delivering +> results. For this reason, we will continue to demand that our own +> development assistance as well as assistance from the multilateral +> development banks has measurable goals and concrete benchmarks for +> achieving those goals. Thanks to U.S. leadership, the recent IDA +> replenishment agreement will establish a monitoring and evaluation +> system that measures recipient countries' progress. For the first time, +> donors can link a portion of their contributions to IDA to the +> achievement of actual development results, and part of the U.S. +> contribution is linked in this way. We will strive to make sure that the +> World Bank and other multilateral development banks build on this +> progress so that a focus on results is an integral part of everything +> that these institutions do. +> +> * Increase the amount of development assistance that is provided in +> the form of grants instead of loans. Greater use of results-based grants +> is the best way to help poor countries make productive investments, +> particularly in the social sectors, without saddling them with +> ever-larger debt burdens. As a result of U.S. leadership, the recent IDA +> agreement provided for significant increases in grant funding for the +> poorest countries for education, HIV/AIDS, health, nutrition, water, +> sanitation, and other human needs. Our goal is to build on that progress +> by increasing the use of grants at the other multilateral development +> banks. We will also challenge universities, nonprofits, and the private +> sector to match government efforts by using grants to support +> development projects that show results. +> +> * Open societies to commerce and investment. Trade and investment are +> the real engines of economic growth. Even if government aid increases, +> most money for development must come from trade, domestic capital, and +> foreign investment. An effective strategy must try to expand these flows +> as well. Free markets and free trade are key priorities of our national +> security strategy. +> +> * Secure public health. The scale of the public health crisis in poor +> countries is enormous. In countries afflicted by epidemics and pandemics +> like HIV/AIDS, malaria, and tuberculosis, growth and development will be +> threatened until these scourges can be contained. Resources from the +> developed world are necessary but will be effective only with honest +> governance, which supports prevention programs and provides effective +> local infrastructure. The United States has strongly backed the new +> global fund for HIV/AIDS organized by U.N. Secretary General Kofi Annan +> and its focus on combining prevention with a broad strategy for +> treatment and care. The United States already contributes more than +> twice as much money to such efforts as the next largest donor. If the +> global fund demonstrates its promise, we will be ready to give even more. +> +> * Emphasize education. Literacy and learning are the foundation of +> democracy and development. Only about 7 percent of World Bank resources +> are devoted to education. This proportion should grow. The United States +> will increase its own funding for education assistance by at least 20 +> percent with an emphasis on improving basic education and teacher +> training in Africa. The United States can also bring information +> technology to these societies, many of whose education systems have been +> devastated by AIDS. +> +> * Continue to aid agricultural development. New technologies, +> including biotechnology, have enormous potential to improve crop yields +> in developing countries while using fewer pesticides and less water. +> Using sound science, the United States should help bring these benefits +> to the 800 million people, including 300 million children, who still +> suffer from hunger and malnutrition. +> +> +> VIII. Develop Agendas for Cooperative Action with the Other Main Centers +> of Global Power +> +> +> "We have our best chance since the rise of the nation-state in the 17th +> century to build a world where the great powers compete in peace instead +> of prepare for war." +> +> +> +> +> +> President Bush +> West Point, New York +> June 1, 2002 +> +> +> +> America will implement its strategies by organizing coalitions -- as +> broad as practicable -- of states able and willing to promote a balance +> of power that favors freedom. Effective coalition leadership requires +> clear priorities, an appreciation of others' interests, and consistent +> consultations among partners with a spirit of humility. +> +> There is little of lasting consequence that the United States can +> accomplish in the world without the sustained cooperation of its allies +> and friends in Canada and Europe. Europe is also the seat of two of the +> strongest and most able international institutions in the world: the +> North Atlantic Treaty Organization (NATO), which has, since its +> inception, been the fulcrum of transatlantic and inter-European +> security, and the European Union (EU), our partner in opening world +> trade. +> +> The attacks of September 11 were also an attack on NATO, as NATO itself +> recognized when it invoked its Article V self-defense clause for the +> first time. NATO's core mission -- collective defense of the +> transatlantic alliance of democracies -- remains, but NATO must develop +> new structures and capabilities to carry out that mission under new +> circumstances. NATO must build a capability to field, at short notice, +> highly mobile, specially trained forces whenever they are needed to +> respond to a threat against any member of the alliance. +> +> The alliance must be able to act wherever our interests are threatened, +> creating coalitions under NATO's own mandate, as well as contributing to +> mission-based coalitions. To achieve this, we must: +> +> * expand NATO's membership to those democratic nations willing and +> able to share the burden of defending and advancing our common interests; +> +> * ensure that the military forces of NATO nations have appropriate +> combat contributions to make in coalition warfare; +> +> * develop planning processes to enable those contributions to become +> effective multinational fighting forces; +> +> * take advantage of the technological opportunities and economies of +> scale in our defense spending to transform NATO military forces so that +> they dominate potential aggressors and diminish our vulnerabilities; +> +> * streamline and increase the flexibility of command structures to +> meet new operational demands and the associated requirements of +> training, integrating, and experimenting with new force configurations; +> and +> +> * maintain the ability to work and fight together as allies even as +> we take the necessary steps to transform and modernize our forces. +> +> +> If NATO succeeds in enacting these changes, the rewards will be a +> partnership as central to the security and interests of its member +> states as was the case during the Cold War. We will sustain a common +> perspective on the threats to our societies and improve our ability to +> take common action in defense of our nations and their interests. At the +> same time, we welcome our European allies' efforts to forge a greater +> foreign policy and defense identity with the EU, and commit ourselves to +> close consultations to ensure that these developments work with NATO. We +> cannot afford to lose this opportunity to better prepare the family of +> transatlantic democracies for the challenges to come. +> +> The attacks of September 11 energized America's Asian alliances. +> Australia invoked the ANZUS Treaty to declare the September 11 was an +> attack on Australia itself, following that historic decision with the +> dispatch of some of the world's finest combat forces for Operation +> Enduring Freedom. Japan and the Republic of Korea provided unprecedented +> levels of military logistical support within weeks of the terrorist +> attack. We have deepened cooperation on counter-terrorism with our +> alliance partners in Thailand and the Philippines and received +> invaluable assistance from close friends like Singapore and New Zealand. +> +> The war against terrorism has proven that America's alliances in Asia +> not only underpin regional peace and stability, but are flexible and +> ready to deal with new challenges. To enhance our Asian alliances and +> friendships, we will: +> +> +> * look to Japan to continue forging a leading role in regional and +> global affairs based on our common interests, our common values, and our +> close defense and diplomatic cooperation; +> +> * work with South Korea to maintain vigilance towards the North while +> preparing our alliance to make contributions to the broader stability of +> the region over the longer-term; +> +> * build on 50 years of U.S.-Australian alliance cooperation as we +> continue working together to resolve regional and global problems -- as +> we have so many times from the Battle of Leyte Gulf to Tora Bora; +> +> * maintain forces in the region that reflect our commitments to our +> allies, our requirements, our technological advances, and the strategic +> environment; and +> +> * build on stability provided by these alliances, as well as with +> institutions such as ASEAN and the Asia-Pacific Economic Cooperation +> forum, to develop a mix of regional and bilateral strategies to manage +> change in this dynamic region. +> +> +> We are attentive to the possible renewal of old patterns of great power +> competition. Several potential great powers are now in the midst of +> internal transition -- most importantly Russia, India, and China. In all +> three cases, recent developments have encouraged our hope that a truly +> global consensus about basic principles is slowly taking shape. +> +> With Russia, we are already building a new strategic relationship based +> on a central reality of the twenty-first century: the United States and +> Russia are no longer strategic adversaries. The Moscow Treaty on +> Strategic Reductions is emblematic of this new reality and reflects a +> critical change in Russian thinking that promises to lead to productive, +> long-term relations with the Euro-Atlantic community and the United +> States. Russia's top leaders have a realistic assessment of their +> country's current weakness and the policies -- internal and external -- +> needed to reverse those weaknesses. They understand, increasingly, that +> Cold War approaches do not serve their national interests and that +> Russian and American strategic interests overlap in many areas. +> +> United States policy seeks to use this turn in Russian thinking to +> refocus our relationship on emerging and potential common interests and +> challenges. We are broadening our already extensive cooperation in the +> global war on terrorism. We are facilitating Russia's entry into the +> World Trade Organization, without lowering standards for accession, to +> promote beneficial bilateral trade and investment relations. We have +> created the NATO-Russia Council with the goal of deepening security +> cooperation among Russia, our European allies, and ourselves. We will +> continue to bolster the independence and stability of the states of the +> former Soviet Union in the belief that a prosperous and stable +> neighborhood will reinforce Russia's growing commitment to integration +> into the Euro-Atlantic community. +> +> At the same time, we are realistic about the differences that still +> divide us from Russia and about the time and effort it will take to +> build an enduring strategic partnership. Lingering distrust of our +> motives and policies by key Russian elites slows improvement in our +> relations. Russia's uneven commitment to the basic values of free-market +> democracy and dubious record in combating the proliferation of weapons +> of mass destruction remain matters of great concern. Russia's very +> weakness limits the opportunities for cooperation. Nevertheless, those +> opportunities are vastly greater now than in recent years -- or even +> decades. +> +> The United States has undertaken a transformation in its bilateral +> relationship with India based on a conviction that U.S. interests +> require a strong relationship with India. We are the two largest +> democracies, committed to political freedom protected by representative +> government. India is moving toward greater economic freedom as well. We +> have a common interest in the free flow of commerce, including through +> the vital sea lanes of the Indian Ocean. Finally, we share an interest +> in fighting terrorism and in creating a strategically stable Asia. +> +> Differences remain, including over the development of India's nuclear +> and missile programs, and the pace of India's economic reforms. But +> while in the past these concerns may have dominated our thinking about +> India, today we start with a view of India as a growing world power with +> which we have common strategic interests. Through a strong partnership +> with India, we can best address any differences and shape a dynamic +> future. +> +> The United States relationship with China is an important part of our +> strategy to promote a stable, peaceful, and prosperous Asia-Pacific +> region. We welcome the emergence of a strong, peaceful, and prosperous +> China. The democratic development of China is crucial to that future. +> Yet, a quarter century after beginning the process of shedding the worst +> features of the Communist legacy, China's leaders have not yet made the +> next series of fundamental choices about the character of their state. +> In pursuing advanced military capabilities that can threaten its +> neighbors in the Asia-Pacific region, China is following an outdated +> path that, in the end, will hamper its own pursuit of national +> greatness. In time, China will find that social and political freedom is +> the only source of that greatness. +> +> The United States seeks a constructive relationship with a changing +> China. We already cooperate well where our interests overlap, including +> the current war on terrorism and in promoting stability on the Korean +> peninsula. Likewise, we have coordinated on the future of Afghanistan +> and have initiated a comprehensive dialogue on counter-terrorism and +> similar transitional concerns. Shared health and environmental threats, +> such as the spread of HIV/AIDS, challenge us to promote jointly the +> welfare of our citizens. +> +> Addressing these transnational threats will challenge China to become +> more open with information, promote the development of civil society, +> and enhance individual human rights. China has begun to take the road to +> political openness, permitting many personal freedoms and conducting +> village-level elections, yet remains strongly committed to national +> one-party rule by the Communist Party. To make that nation truly +> accountable to its citizen's needs and aspirations, however, much work +> remains to be done. Only by allowing the Chinese people to think, +> assemble, and worship freely can China reach its full potential. +> +> Our important trade relationship will benefit from China's entry into +> the World Trade Organization, which will create more export +> opportunities and ultimately more jobs for American farmers, workers, +> and companies. China is our fourth largest trading partner, with over +> $100 billion in annual two-way trade. The power of market principles and +> the WTO's requirements for transparency and accountability will advance +> openness and the rule of law in China to help establish basic +> protections for commerce and for citizens. There are, however, other +> areas in which we have profound disagreements. Our commitment to the +> self-defense of Taiwan under the Taiwan Relations Act is one. Human +> rights is another. We expect China to adhere to its nonproliferation +> commitments. We will work to narrow differences where they exist, but +> not allow them to preclude cooperation where we agree. +> +> The events of September 11, 2001, fundamentally changed the context for +> relations between the United States and other main centers of global +> power, and opened vast, new opportunities. With our long-standing allies +> in Europe and Asia, and with leaders in Russia, India, and China, we +> must develop active agendas of cooperation lest these relationships +> become routine and unproductive. +> +> Every agency of the United States Government shares the challenge. We +> can build fruitful habits of consultation, quiet argument, sober +> analysis, and common action. In the long-term, these are the practices +> that will sustain the supremacy of our common principles and keep open +> the path of progress. +> +> IX. Transform America's National Security Institutions to Meet the +> Challenges and Opportunities of the Twenty-First Century +> +> +> "Terrorists attacked a symbol of American prosperity. They did not touch +> its source. America is successful because of the hard work, creativity, +> and enterprise of our people." +> +> +> +> +> +> President Bush +> Washington, D.C. (Joint Session of Congress) +> September 20, 2001 +> +> +> +> The major institutions of American national security were designed in a +> different era to meet different requirements. All of them must be +> transformed. +> +> It is time to reaffirm the essential role of American military strength. +> We must build and maintain our defenses beyond challenge. Our military's +> highest priority is to defend the United States. To do so effectively, +> our military must: +> +> * assure our allies and friends; +> +> * dissuade future military competition; +> +> * deter threats against U.S. interests, allies, and friends; and +> +> * decisively defeat any adversary if deterrence fails. +> +> +> The unparalleled strength of the United States armed forces, and their +> forward presence, have maintained the peace in some of the world's most +> strategically vital regions. However, the threats and enemies we must +> confront have changed, and so must our forces. A military structured to +> deter massive Cold War-era armies must be transformed to focus more on +> how an adversary might fight rather than where and when a war might +> occur. We will channel our energies to overcome a host of operational +> challenges. +> +> The presence of American forces overseas is one of the most profound +> symbols of the U.S. commitments to allies and friends. Through our +> willingness to use force in our own defense and in defense of others, +> the United States demonstrates its resolve to maintain a balance of +> power that favors freedom. To contend with uncertainty and to meet the +> many security challenges we face, the United States will require bases +> and stations within and beyond Western Europe and Northeast Asia, as +> well as temporary access arrangements for the long-distance deployment +> of U.S. forces. +> +> Before the war in Afghanistan, that area was low on the list of major +> planning contingencies. Yet, in a very short time, we had to operate +> across the length and breadth of that remote nation, using every branch +> of the armed forces. We must prepare for more such deployments by +> developing assets such as advanced remote sensing, long-range precision +> strike capabilities, and transformed maneuver and expeditionary forces. +> This broad portfolio of military capabilities must also include the +> ability to defend the homeland, conduct information operations, ensure +> U.S. access to distant theaters, and protect critical U.S. +> infrastructure and assets in outer space. +> +> Innovation within the armed forces will rest on experimentation with new +> approaches to warfare, strengthening joint operations, exploiting U.S. +> intelligence advantages, and taking full advantage of science and +> technology. We must also transform the way the Department of Defense is +> run, especially in financial management and recruitment and retention. +> Finally, while maintaining near-term readiness and the ability to fight +> the war on terrorism, the goal must be to provide the President with a +> wider range of military options to discourage aggression or any form of +> coercion against the United States, our allies, and our friends. +> +> We know from history that deterrence can fail; and we know from +> experience that some enemies cannot be deterred. The United States must +> and will maintain the capability to defeat any attempt by an enemy -- +> whether a state or non-state actor -- to impose its will on the United +> States, our allies, or our friends. We will maintain the forces +> sufficient to support our obligations, and to defend freedom. Our forces +> will be strong enough to dissuade potential adversaries from pursuing a +> military build-up in hopes of surpassing, or equaling, the power of the +> United States. +> +> Intelligence -- and how we use it -- is our first line of defense +> against terrorists and the threat posed by hostile states. Designed +> around the priority of gathering enormous information about a massive, +> fixed object -- the Soviet bloc -- the intelligence community is coping +> with the challenge of following a far more complex and elusive set of +> targets. +> +> We must transform our intelligence capabilities and build new ones to +> keep pace with the nature of these threats. Intelligence must be +> appropriately integrated with our defense and law enforcement systems +> and coordinated with our allies and friends. We need to protect the +> capabilities we have so that we do not arm our enemies with the +> knowledge of how best to surprise us. Those who would harm us also seek +> the benefit of surprise to limit our prevention and response options and +> to maximize injury. +> +> We must strengthen intelligence warning and analysis to provide +> integrated threat assessments for national and homeland security. Since +> the threats inspired by foreign governments and groups may be conducted +> inside the United States, we must also ensure the proper fusion of +> information between intelligence and law enforcement. +> +> Initiatives in this area will include: +> +> * strengthening the authority of the Director of Central Intelligence +> to lead the development and actions of the Nation's foreign intelligence +> capabilities; +> +> * establishing a new framework for intelligence warning that provides +> seamless and integrated warning across the spectrum of threats facing +> the nation and our allies; +> +> * continuing to develop new methods of collecting information to +> sustain our intelligence advantage; +> +> * investing in future capabilities while working to protect them +> through a more vigorous effort to prevent the compromise of intelligence +> capabilities; and +> +> * collecting intelligence against the terrorist danger across the +> government with all-source analysis. +> +> +> As the United States Government relies on the armed forces to defend +> America's interests, it must rely on diplomacy to interact with other +> nations. We will ensure that the Department of State receives funding +> sufficient to ensure the success of American diplomacy. The State +> Department takes the lead in managing our bilateral relationships with +> other governments. And in this new era, its people and institutions must +> be able to interact equally adroitly with non-governmental organizations +> and international institutions. Officials trained mainly in +> international politics must also extend their reach to understand +> complex issues of domestic governance around the world, including public +> health, education, law enforcement, the judiciary, and public diplomacy. +> +> Our diplomats serve at the front line of complex negotiations, civil +> wars, and other humanitarian catastrophes. As humanitarian relief +> requirements are better understood, we must also be able to help build +> police forces, court systems, and legal codes, local and provincial +> government institutions, and electoral systems. Effective international +> cooperation is needed to accomplish these goals, backed by American +> readiness to play our part. +> +> Just as our diplomatic institutions must adapt so that we can reach out +> to others, we also need a different and more comprehensive approach to +> public information efforts that can help people around the world learn +> about and understand America. The war on terrorism is not a clash of +> civilizations. It does, however, reveal the clash inside a civilization, +> a battle for the future of the Muslim world. This is a struggle of ideas +> and this is an area where America must excel. +> +> We will take the actions necessary to ensure that our efforts to meet +> our global security commitments and protect Americans are not impaired +> by the potential for investigations, inquiry, or prosecution by the +> International Criminal Court (ICC), whose jurisdiction does not extend +> to Americans and which we do not accept. We will work together with +> other nations to avoid complications in our military operations and +> cooperation, through such mechanisms as multilateral and bilateral +> agreements that will protect U.S. nationals from the ICC. We will +> implement fully the American Servicemembers Protection Act, whose +> provisions are intended to ensure and enhance the protection of U.S. +> personnel and officials. +> +> We will make hard choices in the coming year and beyond to ensure the +> right level and allocation of government spending on national security. +> The United States Government must strengthen its defenses to win this +> war. At home, our most important priority is to protect the homeland for +> the American people. +> +> Today, the distinction between domestic and foreign affairs is +> diminishing. In a globalized world, events beyond America's borders have +> a greater impact inside them. Our society must be open to people, ideas, +> and goods from across the globe. The characteristics we most cherish -- +> our freedom, our cities, our systems of movement, and modern life -- are +> vulnerable to terrorism. This vulnerability will persist long after we +> bring to justice those responsible for the September eleventh attacks. +> As time passes, individuals may gain access to means of destruction that +> until now could be wielded only by armies, fleets, and squadrons. This +> is a new condition of life. We will adjust to it and thrive -- in spite +> of it. +> +> In exercising our leadership, we will respect the values, judgment, and +> interests of our friends and partners. Still, we will be prepared to act +> apart when our interests and unique responsibilities require. When we +> disagree on particulars, we will explain forthrightly the grounds for +> our concerns and strive to forge viable alternatives. We will not allow +> such disagreements to obscure our determination to secure together, with +> our allies and our friends, our shared fundamental interests and values. +> +> Ultimately, the foundation of American strength is at home. It is in the +> skills of our people, the dynamism of our economy, and the resilience of +> our institutions. A diverse, modern society has inherent, ambitious, +> entrepreneurial energy. Our strength comes from what we do with that +> energy. That is where our national security begins. +> + + diff --git a/Ch3/datasets/spam/easy_ham/00678.28c4d8cffba35f7a4fa077efb4836fc0 b/Ch3/datasets/spam/easy_ham/00678.28c4d8cffba35f7a4fa077efb4836fc0 new file mode 100644 index 000000000..b8ccb26d4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00678.28c4d8cffba35f7a4fa077efb4836fc0 @@ -0,0 +1,115 @@ +From fork-admin@xent.com Sat Sep 21 10:43:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4FDC116F16 + for ; Sat, 21 Sep 2002 10:43:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:43:17 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L5XnC10483 for ; + Sat, 21 Sep 2002 06:33:49 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 201F1294182; Fri, 20 Sep 2002 22:30:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav76.law15.hotmail.com [64.4.22.211]) by + xent.com (Postfix) with ESMTP id 7F18429409C for ; + Fri, 20 Sep 2002 22:29:58 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Fri, 20 Sep 2002 22:33:28 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +Subject: Senate Committee Passes Nanotech Bill +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 21 Sep 2002 05:33:28.0761 (UTC) FILETIME=[6A2F6290:01C26130] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 20 Sep 2002 22:38:08 -0700 + +Weird... I never thought the govmint would get into funding this. You know +'weapons of mass destruction'. etc. etc. + +== +http://dc.internet.com/news/article.php/10849_1467121 + +September 20, 2002 +Senate Committee Passes Nanotech Bill +By Roy Mark + +The Senate Commerce Committee unanimously passed on Thursday legislation to +promote nanotechnology research and development. Introduced by Sen. Ron +Wyden (D-Ore.), the 21st Century Nanotechnology Research and Development Act +would create the National Nanotechnology Research Program. The bill is +co-sponsored by Sen. Joe Lieberman (D-Conn.) and Sen. George Allen (R-Va.). + +The proposed program would be a coordinated interagency effort that would +support long-term nanoscale research and development and promote effective +education and training for the next generation of nanotechnology researchers +and professionals. + +"The unanimous support of the Senate Commerce Committee is a very big step +forward for this very small technology," Lieberman, who vowed to pushed to +full Senate passage before the end of the year, said. "Nowhere in the world +are the wheels of innovation spinning more rapidly than in the realm of +nanotechnology. The U.S. certainly possesses the raw resources and talent to +lead the world in developing this technology. Our legislation will provide +the nation with a long-term focus and sustained commitment, and facilitate +new collaborations between government, academia, and industry that will +ensure our place at the head of the next wave of innovation." + +The bill would place coordination and management of the nanotechnology +program under the National Science and Technology Council. It would also +create a Presidential National Nanotechnology Advisory Panel and National +Nanotechnology Coordination Office, which would provide administrative and +technical support for the Advisory Panel and the Council. + +"My own judgment is the nanotechnology revolution has the potential to +change America on a scale equal to, if not greater than, the computer +revolution. I am determined that the United States will not miss, but will +mine the opportunities of nanotechnology," Wyden said in introducing the +bill. "At present, efforts in the nanotechnology field are strewn across a +half-dozen federal agencies. I want America to marshal its various +nanotechnology efforts into one driving force to remain the world's leader +in this burgeoning field. And I believe federal support is essential to +achieving that goal. + +To study the potential long-term effects of nanotechnology, a new Center for +Societal, Ethical, Educational, Legal and Workforce Issues Related to +Nanotechnology would also be established. + +According to Lieberman, the bill closely tracks the recommendations of the +National Research Council (NRC), which completed a thorough review of the +National Nanotechnology Initiative in June. + +Those recommendations included establishing an independent advisory panel; +emphasizing long-term goals; striking a balance between long-term and +short-term research; supporting the development of research facilities, +equipment and instrumentation; creating special funding to support research +that falls in the breach between agency missions and programs; promoting +interdisciplinary research and research groups; facilitating technology +transition and outreach to industry; conducting studies on the societal +implications of nanotechnology, including those related to ethical, +educational, legal and workforce issues; and the development of metrics for +measuring progress toward program goals. + + + diff --git a/Ch3/datasets/spam/easy_ham/00679.7c3eae8e28aadb8ea378fb5c04bc5d29 b/Ch3/datasets/spam/easy_ham/00679.7c3eae8e28aadb8ea378fb5c04bc5d29 new file mode 100644 index 000000000..5e6e3effe --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00679.7c3eae8e28aadb8ea378fb5c04bc5d29 @@ -0,0 +1,99 @@ +From fork-admin@xent.com Sat Sep 21 10:43:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 42C7B16F03 + for ; Sat, 21 Sep 2002 10:43:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:43:19 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L5dvC10671 for ; + Sat, 21 Sep 2002 06:39:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id F17B6294183; Fri, 20 Sep 2002 22:36:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav27.law15.hotmail.com [64.4.22.84]) by + xent.com (Postfix) with ESMTP id B5DB129409C for ; + Fri, 20 Sep 2002 22:35:22 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Fri, 20 Sep 2002 22:38:34 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +Subject: Sun Nabs Storage Startup - buys Pirus Networks +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 21 Sep 2002 05:38:34.0023 (UTC) FILETIME=[2022AB70:01C26131] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 20 Sep 2002 22:43:14 -0700 + + +Related to the MS acquisition of XDegrees? + +== +http://www.internetnews.com/infra/article.php/1466271 + +Sun Nabs Storage Startup +By Clint Boulton +Amid the flurry of news at its own SunNetwork 2002 conference in San +Francisco, Sun Microsystems Thursday said it has agreed to purchase data +storage concern Pirus Networks for an undisclosed amount of stock. + +The Palo Alto, Calif. networking firm bought the Acton, Mass.-based startup +with a keen eye for the startup's switching (define) devices and +virtualization technology. Used as part of a storage area network (define), +virtualization is the pooling of storage from many network storage devices +into what appears to the operating system to be a single storage device that +is managed from a central console. + +Though major vendors make similar technology, Pirus competes with the likes +of Rhapsody Networks and Confluence Networks. Sun plucked Pirus after +scouting some 65 companies. + +Mark Lovington, vice president of marketing for Pirus, told internetnews.com +that Pirus and Sun have been in discussion for a while about a possible +acquisition. Pirus, he said, succeeded in a goal it shares with a lot of +storage startups -- to be acquired by one of the major systems vendors, such +as Sun IBM, HP, Hitachi. + +"This is a huge opportunity for Pirus in a storage market dominated by 6,7 +or 8 system-level players," Lovington said. "Sun sees this acquisition as a +critical element to their N1 initiative. The synergies were quite obvious." + +N1 is Sun's hopeful tour de force in distributed computing (define) +architecture, which involves multiple, remote computers that each have a +role in a computation problem or information processing. N1 is being styled +as the answer for companies looking to manage groups of computers and +networks as a single system -- at a lower cost and with greater flexibility. + +While lagging behind other, more entrenched players, Sun is gaining ground +in the storage market with its Sun StorEdge Complete Storage Solutions, +according to a new report by IDC. John McArthur, group vice president of +IDC's Storage program, said Sun Microsystems and IBM posted the largest +increases in total storage revenue over Q1 2002, with 32% and 11% gains, +respectively. As of Q2, Sun held a 9 percent market share, with revenues of +$411 million. + +Sun's acquisition of Pirus is expected to close in the second quarter of +Sun's 2003 fiscal year, which ends December 29, 2002. + + + diff --git a/Ch3/datasets/spam/easy_ham/00680.fba9fe0db5780caca8155fb4defdc679 b/Ch3/datasets/spam/easy_ham/00680.fba9fe0db5780caca8155fb4defdc679 new file mode 100644 index 000000000..8bf5355a9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00680.fba9fe0db5780caca8155fb4defdc679 @@ -0,0 +1,55 @@ +From fork-admin@xent.com Sat Sep 21 10:43:21 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2F3E116F03 + for ; Sat, 21 Sep 2002 10:43:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:43:21 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L68oC11240 for ; + Sat, 21 Sep 2002 07:08:51 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7AA5329418A; Fri, 20 Sep 2002 23:05:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 53CF229409C for ; Fri, + 20 Sep 2002 23:04:35 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 6FCD43ECD9; + Sat, 21 Sep 2002 02:12:25 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 6E35C3EC10; Sat, 21 Sep 2002 02:12:25 -0400 (EDT) +From: Tom +To: "Mr. FoRK" +Cc: fork@spamassassin.taint.org +Subject: SunMSapple meta4 of the day +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 02:12:25 -0400 (EDT) + + +Im feeling a bit farklempt having spent the night at Todais with the +family so talk amongst yourself..here Ill give you a topic + +The current state of IT can be thought of in terms of the Cold war with +the US and the UUSR being MS and Sun/IBM/OSS (does it matter which side +is which?), Apple as Cuba and the US legal system as the UN. + +Discuss. + + diff --git a/Ch3/datasets/spam/easy_ham/00681.fd01c0551b4b72201697bfbd55bccd25 b/Ch3/datasets/spam/easy_ham/00681.fd01c0551b4b72201697bfbd55bccd25 new file mode 100644 index 000000000..38b0964f9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00681.fd01c0551b4b72201697bfbd55bccd25 @@ -0,0 +1,68 @@ +From fork-admin@xent.com Sat Sep 21 10:43:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 761B016F03 + for ; Sat, 21 Sep 2002 10:43:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:43:22 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L6KmC11592 for ; + Sat, 21 Sep 2002 07:20:48 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C8A0829418D; Fri, 20 Sep 2002 23:17:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 0550D29409C for + ; Fri, 20 Sep 2002 23:16:33 -0700 (PDT) +Received: (qmail 9790 invoked by uid 501); 21 Sep 2002 06:19:53 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 21 Sep 2002 06:19:53 -0000 +From: CDale +To: fork@spamassassin.taint.org +Subject: AmeriCorpsVISTA +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 01:19:53 -0500 (CDT) + +The pay's not good (9,300 a year), but there is insurance, a 4,700 (I +think) off a student loan, or for future education, and non-compete status +for any govt. job after a year's service. I moved to New Orleans +yesterday, and I should be flying to DC in about a month to start the +AmeriCorps training. I'll be setting up a community technology center which +will be used to teach computer literacy skills to low income folks (just, +like, learning MS shit (yeah yeah, wtf am i doing? I know.)) so that +they can possibly find better jobs. I'm sure I'll be doing all sorts +of other things too, like helping folks with their taxes, writing grants, +etc. The website is www.americorps.org. There are -all- sorts of jobs +all over the country, so if someone out there can survive on the small +salary, it's something s/he might want to take a look at. + +Since Xi is in college and getting grants + scholarship + child support +from dad, my load has gone down terrifically. The IRS is after me for +money I didn't make on the stock market, so it's a way to at least get +into a situation where they will have to understand that yes, they will +have to wait. + +But bottom line benefit and motivation is the feelgood that ya get when +you do this type of job. I'm up for some of that. +Cindy + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00682.7b96194cc45dfc4d54679a198dda3244 b/Ch3/datasets/spam/easy_ham/00682.7b96194cc45dfc4d54679a198dda3244 new file mode 100644 index 000000000..ddf2dc2a9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00682.7b96194cc45dfc4d54679a198dda3244 @@ -0,0 +1,70 @@ +From fork-admin@xent.com Sat Sep 21 10:43:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2CD6B16F03 + for ; Sat, 21 Sep 2002 10:43:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:43:24 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L8BnC15006 for ; + Sat, 21 Sep 2002 09:11:49 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D0A912940CA; Sat, 21 Sep 2002 01:08:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp10.atl.mindspring.net (smtp10.atl.mindspring.net + [207.69.200.246]) by xent.com (Postfix) with ESMTP id 801AB29409C for + ; Sat, 21 Sep 2002 01:07:18 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + smtp10.atl.mindspring.net with esmtp (Exim 3.33 #1) id 17sfLg-0004Pk-00; + Sat, 21 Sep 2002 04:10:44 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: +References: <979BE8FE-CCF6-11D6-817E-000393A46DEA@alumni.caltech.edu> + +To: "Mr. FoRK" , +From: "R. A. Hettinga" +Subject: Re: sed /s/United States/Roman Empire/g +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 04:03:36 -0400 + +At 9:34 PM -0700 on 9/20/02, Mr. FoRK wrote: + + +> "Free trade and free markets have proven their ability to lift whole +> societies out of poverty" +> I'm not a socio-political/history buff - does anybody have some clear +> examples? + +You're probably living in one, or you wouldn't be able to post here. + +;-). + +Cheers, +RAH + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00683.7d0233053c9421fe2bf29e23a4aa5b18 b/Ch3/datasets/spam/easy_ham/00683.7d0233053c9421fe2bf29e23a4aa5b18 new file mode 100644 index 000000000..5e0c621e8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00683.7d0233053c9421fe2bf29e23a4aa5b18 @@ -0,0 +1,67 @@ +From fork-admin@xent.com Sat Sep 21 10:43:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 824F616F03 + for ; Sat, 21 Sep 2002 10:43:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:43:25 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8L91mC16323 for ; + Sat, 21 Sep 2002 10:01:49 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8A19929417F; Sat, 21 Sep 2002 01:58:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id CFD3D29409C for ; Sat, + 21 Sep 2002 01:57:11 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id DFDB23ECF9; + Sat, 21 Sep 2002 05:05:09 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id DE6593EC9F; Sat, 21 Sep 2002 05:05:09 -0400 (EDT) +From: Tom +To: "R. A. Hettinga" +Cc: "Mr. FoRK" , +Subject: Re: sed /s/United States/Roman Empire/g +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 05:05:09 -0400 (EDT) + + +It was the best of times, it was the worst of times, +it was the age of wisdom, it was the age of foolishness, +it was the epoch of belief, it was the epoch of incredulity, +it was the season of Light, it was the season of Darkness, +it was the spring of hope, it was the winter of despair, +we had everything before us, we had nothing before us, +we were all going direct to Heaven, we were all going direct the other way +---C Dickens + +G'Quon Wrote "There is a greater darkness than the one we fight. It is the +darkness of the soul that has lost its way." The war we fight is not +against powers and principalities - it is against chaos and despair. +Greater than the death of flesh is the death of hope, the death of +dreams. Against this peril we can never surrender. The future is all +around us, waiting in moments of transition, to be born in moments of +revelation. No one knows the shape of that future, or where it will take +us. We know only that it is always born in pain. +--JWS + + + + diff --git a/Ch3/datasets/spam/easy_ham/00684.1969c6baadceb721cc2a565b93e7f63f b/Ch3/datasets/spam/easy_ham/00684.1969c6baadceb721cc2a565b93e7f63f new file mode 100644 index 000000000..bc4a34413 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00684.1969c6baadceb721cc2a565b93e7f63f @@ -0,0 +1,64 @@ +From fork-admin@xent.com Sat Sep 21 15:19:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 52E3116F03 + for ; Sat, 21 Sep 2002 15:19:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 15:19:01 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8LDdnC23421 for ; + Sat, 21 Sep 2002 14:39:50 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B3039294184; Sat, 21 Sep 2002 06:36:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc03.attbi.com (sccrmhc03.attbi.com [204.127.202.63]) + by xent.com (Postfix) with ESMTP id 528C629409C for ; + Sat, 21 Sep 2002 06:35:35 -0700 (PDT) +Received: from [24.61.113.164] by sccrmhc03.attbi.com (InterMail + vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020921133906.LKWQ28420.sccrmhc03.attbi.com@[24.61.113.164]> for + ; Sat, 21 Sep 2002 13:39:06 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <1204837300.20020921093852@magnesium.net> +To: fork@spamassassin.taint.org +Subject: Oh my... +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 09:38:52 -0400 + +Hello fork, + + So they have Aaron Schwartz on NPR's Weekend Edition talking + about Warchalking. I'll agree, its funny, his voice is squeaky and + I'm jealous that he got on radio and I didn't... + + But really, WTF is the big deal about warchalking? I have yet to + see any of it, anywhere. + + LInk will probably pop up on www.npr.org later today. + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00685.0c2b26b54c5bb9e9072515d58ccc14ea b/Ch3/datasets/spam/easy_ham/00685.0c2b26b54c5bb9e9072515d58ccc14ea new file mode 100644 index 000000000..b65f7ded2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00685.0c2b26b54c5bb9e9072515d58ccc14ea @@ -0,0 +1,86 @@ +From fork-admin@xent.com Sat Sep 21 15:19:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D4B3716F03 + for ; Sat, 21 Sep 2002 15:19:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 15:19:02 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8LDsmC23911 for ; + Sat, 21 Sep 2002 14:54:49 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7F7AA294185; Sat, 21 Sep 2002 06:51:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc02.attbi.com (sccrmhc02.attbi.com [204.127.202.62]) + by xent.com (Postfix) with ESMTP id 4239429409C for ; + Sat, 21 Sep 2002 06:50:41 -0700 (PDT) +Received: from [24.61.113.164] by sccrmhc02.attbi.com (InterMail + vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020921135412.IQRU14454.sccrmhc02.attbi.com@[24.61.113.164]>; + Sat, 21 Sep 2002 13:54:12 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <0205743092.20020921095358@magnesium.net> +To: Chris Olds +Cc: fork@spamassassin.taint.org +Subject: Re[2]: Oh my... +In-Reply-To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 09:53:58 -0400 + +Hello Chris, + +Oh I don't know, Time-lag synchrocity? + +Or mutual shared experience over time? +:) + +Its like 930 am..I can't function yet. Lord knows its 630 where you +are. + +I say this should be a FoRK Posit. + + +CO> Scary. I was just listening to the radio (stream, from KUOW), and heard +CO> the story just moments ago. + +CO> We're on opposite sides of the continent, yet we appear to have just had a +CO> shared experience. There should be a name for that... + +CO> Cheers - + +CO> /cco + +CO> On Sat, 21 Sep 2002 bitbitch@magnesium.net wrote: +>> +>> So they have Aaron Schwartz on NPR's Weekend Edition talking +>> about Warchalking. I'll agree, its funny, his voice is squeaky and +>> I'm jealous that he got on radio and I didn't... + + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00686.24376d10c9d96b5aad34a8ed8e6b7586 b/Ch3/datasets/spam/easy_ham/00686.24376d10c9d96b5aad34a8ed8e6b7586 new file mode 100644 index 000000000..58c2b9534 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00686.24376d10c9d96b5aad34a8ed8e6b7586 @@ -0,0 +1,89 @@ +From fork-admin@xent.com Sat Sep 21 20:22:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AD09C16F03 + for ; Sat, 21 Sep 2002 20:21:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 20:21:59 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8LEVuC24942 for ; + Sat, 21 Sep 2002 15:31:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7E63F294189; Sat, 21 Sep 2002 07:28:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id B6EA829409C for ; + Sat, 21 Sep 2002 07:27:07 -0700 (PDT) +Received: (qmail 11884 invoked from network); 21 Sep 2002 14:30:44 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 21 Sep 2002 14:30:44 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id A5A041C2C4; + Sat, 21 Sep 2002 10:30:37 -0400 (EDT) +To: "Mr. FoRK" +Cc: +Subject: Re: sed /s/United States/Roman Empire/g +References: <979BE8FE-CCF6-11D6-817E-000393A46DEA@alumni.caltech.edu> + +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 21 Sep 2002 10:30:37 -0400 + +>>>>> "f" == fork list writes: + + f> "Free trade and free markets have proven their ability to lift + f> whole societies out of poverty" I'm not a + f> socio-political/history buff - does anybody have some clear + f> examples? + +China? Ooops, no wait, scratch that. + +There is one counter example that I can think of, but it may not be +precisely "free trade/markets" -- when Ben Franklin first visited +England he was asked why the colonies were so prosperous. Ben +explained that they used "Colonial Script", a kind of barter-dollar, +and increasing the supply of script ensured complete employment. The +British bankers were furious and immediately lobbied parliament to +clamp down on the practice. Within a few years, the colonies were +rife with unemployment and poverty just like the rest of the Empire. + +According to questionable literature handed out by a fringe political +party here in Canada, the Founding Fathers had no real complaint about +tea taxes, it was the banning of colonial script they were +protesting. If this is true, then it comes right back to the forces +that killed Ned Ludd's followers as to why popular opinion believes +they were protesting a tea tax. The same pamphlet claimed that Canada +was also a prosperous nation until, by an act of parliament in the +late-50's or early 60's, the right to print money was removed from the +juristiction of parliament and handed over to the Bank of Canada. + +I've wondered about all this. Certainly the timeline of the collapse +of the Canadian economy fits the profile, but there are oodles of +other causes (for example, spending money like we had 300M people when +we only had 20M) Anyone have any further information on this? + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00687.a044e978152b1411bd3ea6ddc0f537b2 b/Ch3/datasets/spam/easy_ham/00687.a044e978152b1411bd3ea6ddc0f537b2 new file mode 100644 index 000000000..a264ef41d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00687.a044e978152b1411bd3ea6ddc0f537b2 @@ -0,0 +1,73 @@ +From fork-admin@xent.com Sat Sep 21 20:22:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B2F5516F03 + for ; Sat, 21 Sep 2002 20:22:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 20:22:01 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8LEatC24979 for ; + Sat, 21 Sep 2002 15:36:55 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DB956294191; Sat, 21 Sep 2002 07:29:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 5A0AD29418F for ; + Sat, 21 Sep 2002 07:28:44 -0700 (PDT) +Received: (qmail 12362 invoked from network); 21 Sep 2002 14:32:21 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 21 Sep 2002 14:32:21 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 9679B1C2C4; + Sat, 21 Sep 2002 10:32:14 -0400 (EDT) +To: "R. A. Hettinga" +Cc: "Mr. FoRK" , +Subject: Re: sed /s/United States/Roman Empire/g +References: <979BE8FE-CCF6-11D6-817E-000393A46DEA@alumni.caltech.edu> + + +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 21 Sep 2002 10:32:14 -0400 + +>>>>> "R" == R A Hettinga writes: + + R> At 9:34 PM -0700 on 9/20/02, Mr. FoRK wrote: + >> "Free trade and free markets have proven their ability to lift + >> whole societies out of poverty" I'm not a + >> socio-political/history buff - does anybody have some clear + >> examples? + + R> You're probably living in one, or you wouldn't be able to post + R> here. + +Cool --- I wasn't aware that the US had lifted it's population out of +poverty! When did this happen? I wonder where the media gets the +idea that the wealth gap is widening and deepening... + + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00688.b05bdac7f180a6947d701b974b413dec b/Ch3/datasets/spam/easy_ham/00688.b05bdac7f180a6947d701b974b413dec new file mode 100644 index 000000000..c0b32a4ef --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00688.b05bdac7f180a6947d701b974b413dec @@ -0,0 +1,120 @@ +From fork-admin@xent.com Sat Sep 21 20:22:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0803616F03 + for ; Sat, 21 Sep 2002 20:22:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 20:22:07 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8LIKsC31138 for ; + Sat, 21 Sep 2002 19:20:55 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 93A1229418E; Sat, 21 Sep 2002 11:17:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hall.mail.mindspring.net (hall.mail.mindspring.net + [207.69.200.60]) by xent.com (Postfix) with ESMTP id BF0E029409C for + ; Sat, 21 Sep 2002 11:16:16 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + hall.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17soqA-0006V3-00; + Sat, 21 Sep 2002 14:18:50 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: +References: <979BE8FE-CCF6-11D6-817E-000393A46DEA@alumni.caltech.edu> + + +To: Gary Lawrence Murphy +From: "R. A. Hettinga" +Subject: Re: sed /s/United States/Roman Empire/g +Cc: "Mr. FoRK" , , + Digital Bearer Settlement List +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 14:18:29 -0400 + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +At 10:32 AM -0400 on 9/21/02, Gary Lawrence Murphy wrote: + + +> Cool --- I wasn't aware that the US had lifted it's population out +> of poverty! When did this happen? I wonder where the media gets the +> idea that the wealth gap is widening and deepening... + +All the world loves a smartass... + +:-). + +Seriously. Look at he life expectancy and human carrying capacity of +this continent before the Europeans got here. Look at it now. Even +for descendants of the original inhabitants. Even for the descendents +of slaves, who were brought here by force. + +More stuff, cheaper. That's progress. + +Poverty, of course, is not relative. It's absolute. Disparity in +wealth has nothing to do with it. + +It's like saying that groups have rights, when, in truth, only +individuals do. Like group rights, "disparity" in wealth is +statistical sophistry. + + +Besides, even if you can't help the distribution, industrial wealth +is almost always transitory, and so is relative poverty, even when +there are no confiscatory death-taxes. The 20th anniversary Forbes +400 just came out, and only a few tens of people are still there +since 1982, a time which had significantly higher marginal taxes on +wealth, income, and inheritance than we do now. More to the point, +they're nowhere near the top. + +I'll take those odds. It is only when neofeudalism reasserts itself, +in the form of government regulation, confiscatory taxes, legislated +monopoly, corporate welfare, "non-profit" neoaristocratic tax dodges, +and legalized labor extortion that we get slowdowns in progress, like +what happened in Fabian-era Britain, or 1970's USA. + +In fact, it is in countries where wealth is the most "unfairly" +distributed, that you get the most improvement in the general -- +economic -- welfare. More stuff cheaper, fewer people dying, more +people living longer. + +I'll take those odds as well. People take greater risks when the +returns are higher, improving the lot of us all as a result. + +Cheers, +RAH + +-----BEGIN PGP SIGNATURE----- +Version: PGP 7.5 + +iQA/AwUBPYy3ysPxH8jf3ohaEQLqNQCg14YvF8NVYwKiRrghHdisBoNCOn8AoPcR +QUzorXeaLe5h3T1syKl7DFNT +=9kff +-----END PGP SIGNATURE----- + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00689.baf30774fe011781f6822746345015d5 b/Ch3/datasets/spam/easy_ham/00689.baf30774fe011781f6822746345015d5 new file mode 100644 index 000000000..408ef3bc5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00689.baf30774fe011781f6822746345015d5 @@ -0,0 +1,63 @@ +From fork-admin@xent.com Sat Sep 21 20:22:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CDAC616F16 + for ; Sat, 21 Sep 2002 20:22:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 20:22:08 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8LJ2nC32521 for ; + Sat, 21 Sep 2002 20:02:50 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B4A9C29409C; Sat, 21 Sep 2002 11:59:06 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav31.law15.hotmail.com [64.4.22.88]) by + xent.com (Postfix) with ESMTP id 28B5129409A for ; + Sat, 21 Sep 2002 11:58:38 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Sat, 21 Sep 2002 12:02:10 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: <000d01c2613a$5f9b35c0$0200a8c0@JMHALL> +Subject: Re: sed /s/United States/Roman Empire/g +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 21 Sep 2002 19:02:10.0398 (UTC) FILETIME=[63559FE0:01C261A1] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 12:06:52 -0700 + + +----- Original Message ----- +From: "John Hall" + + +> Take a list of the richest countries. +> +> Take a list of the countries that have the counties where markets are +> the most free. +> +> They are, essentially, the same list. +Umm... how many of these countries were in poverty & lifted themselves up +after switching? + + diff --git a/Ch3/datasets/spam/easy_ham/00690.f56ab439b3ce565dd3fbbefa5fefd0bc b/Ch3/datasets/spam/easy_ham/00690.f56ab439b3ce565dd3fbbefa5fefd0bc new file mode 100644 index 000000000..a0cae26fb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00690.f56ab439b3ce565dd3fbbefa5fefd0bc @@ -0,0 +1,67 @@ +From fork-admin@xent.com Sat Sep 21 20:22:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4294916F03 + for ; Sat, 21 Sep 2002 20:22:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 20:22:10 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8LJ7cC32677 for ; + Sat, 21 Sep 2002 20:07:38 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4F4B6294197; Sat, 21 Sep 2002 12:00:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav28.law15.hotmail.com [64.4.22.85]) by + xent.com (Postfix) with ESMTP id 789A5294195 for ; + Sat, 21 Sep 2002 11:59:42 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Sat, 21 Sep 2002 12:03:14 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: , "R. A. Hettinga" +References: <979BE8FE-CCF6-11D6-817E-000393A46DEA@alumni.caltech.edu> + + +Subject: Re: sed /s/United States/Roman Empire/g +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 21 Sep 2002 19:03:14.0886 (UTC) FILETIME=[89C5B660:01C261A1] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 12:07:57 -0700 + + +----- Original Message ----- +From: "R. A. Hettinga" +> +> +> > "Free trade and free markets have proven their ability to lift whole +> > societies out of poverty" +> > I'm not a socio-political/history buff - does anybody have some clear +> > examples? +> +> You're probably living in one, or you wouldn't be able to post here. +> +When was the whole US society in poverty & was that before free trade & free +markets? +I'm looking for transitions due to free xyz. + + diff --git a/Ch3/datasets/spam/easy_ham/00691.fe0daf79c97e1e314de953d18efc37e2 b/Ch3/datasets/spam/easy_ham/00691.fe0daf79c97e1e314de953d18efc37e2 new file mode 100644 index 000000000..2097862ec --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00691.fe0daf79c97e1e314de953d18efc37e2 @@ -0,0 +1,66 @@ +From fork-admin@xent.com Sat Sep 21 20:22:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A1B8916F03 + for ; Sat, 21 Sep 2002 20:22:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 20:22:11 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8LJDoC00461 for ; + Sat, 21 Sep 2002 20:13:50 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A02B92941BC; Sat, 21 Sep 2002 12:10:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav53.law15.hotmail.com [64.4.22.46]) by + xent.com (Postfix) with ESMTP id BADAD294192 for ; + Sat, 21 Sep 2002 12:09:18 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Sat, 21 Sep 2002 12:12:51 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: <979BE8FE-CCF6-11D6-817E-000393A46DEA@alumni.caltech.edu> + + + +Subject: Re: sed /s/United States/Roman Empire/g +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 21 Sep 2002 19:12:51.0172 (UTC) FILETIME=[E143FA40:01C261A2] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 12:17:33 -0700 + + +----- Original Message ----- +From: "R. A. Hettinga" + +> +> Seriously. Look at he life expectancy and human carrying capacity of +> this continent before the Europeans got here. Look at it now. Even +> for descendants of the original inhabitants. Even for the descendents +> of slaves, who were brought here by force. +I wouldn't say that the societies of humans here before European occupancy +was 'lifted' by free xyz. Perhaps 'replaced' or 'sunk' or some other +description, but not 'lifted'. Also, the lifestyle of the remnants of those +societies is on average only marginally above poverty even today. + + diff --git a/Ch3/datasets/spam/easy_ham/00692.9761f9740766106c5f982e773069a76d b/Ch3/datasets/spam/easy_ham/00692.9761f9740766106c5f982e773069a76d new file mode 100644 index 000000000..b5b3e9d15 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00692.9761f9740766106c5f982e773069a76d @@ -0,0 +1,86 @@ +From fork-admin@xent.com Sun Sep 22 00:25:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AB34216F03 + for ; Sun, 22 Sep 2002 00:25:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 00:25:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8LNHxC08760 for ; + Sun, 22 Sep 2002 00:17:59 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B99282940D7; Sat, 21 Sep 2002 16:14:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.endeavors.com (unknown [66.161.8.83]) by xent.com + (Postfix) with ESMTP id 80A4A2940CD for ; Sat, + 21 Sep 2002 16:13:03 -0700 (PDT) +Received: from endeavors.com ([66.161.8.83] RDNS failed) by + mail.endeavors.com with Microsoft SMTPSVC(5.0.2195.5329); Sat, + 21 Sep 2002 16:14:43 -0700 +Message-Id: <3D8CFD5E.10406@endeavors.com> +From: Gregory Alan Bolcer +Organization: Endeavors Technology, Inc. +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.1) + Gecko/20020823 Netscape/7.0 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: bitbitch@magnesium.net +Cc: fork@spamassassin.taint.org +Subject: Re: Oh my... +References: <1204837300.20020921093852@magnesium.net> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Originalarrivaltime: 21 Sep 2002 23:14:43.0702 (UTC) FILETIME=[AB685160:01C261C4] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 16:14:38 -0700 + +I went out and drew some chalk circles on my +sidewalk just so I wouldn't miss out on the experience. +I've collected half a dozen passwords & +access to email accounts so far. + +Greg + +bitbitch@magnesium.net wrote: +> Hello fork, +> +> So they have Aaron Schwartz on NPR's Weekend Edition talking +> about Warchalking. I'll agree, its funny, his voice is squeaky and +> I'm jealous that he got on radio and I didn't... +> +> But really, WTF is the big deal about warchalking? I have yet to +> see any of it, anywhere. +> +> LInk will probably pop up on www.npr.org later today. +> +> +> + + +-- +Gregory Alan Bolcer, CTO | work: +1.949.833.2800 +gbolcer at endeavors.com | http://endeavors.com +Endeavors Technology, Inc.| cell: +1.714.928.5476 + + + + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00693.6849440c3e1d1584a9f05b067d0062aa b/Ch3/datasets/spam/easy_ham/00693.6849440c3e1d1584a9f05b067d0062aa new file mode 100644 index 000000000..f1d0488de --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00693.6849440c3e1d1584a9f05b067d0062aa @@ -0,0 +1,65 @@ +From fork-admin@xent.com Sun Sep 22 14:11:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 013C316F03 + for ; Sun, 22 Sep 2002 14:11:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 14:11:38 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8M1hpC16146 for ; + Sun, 22 Sep 2002 02:43:51 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 847482940AE; Sat, 21 Sep 2002 18:40:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from pimout2-ext.prodigy.net (pimout2-ext.prodigy.net + [207.115.63.101]) by xent.com (Postfix) with ESMTP id 7116929409A for + ; Sat, 21 Sep 2002 18:39:52 -0700 (PDT) +Received: from MAX (adsl-66-122-60-240.dsl.sntc01.pacbell.net + [66.122.60.240]) by pimout2-ext.prodigy.net (8.12.3 da nor stuldap/8.12.3) + with ESMTP id g8M1hGI7171706 for ; Sat, 21 Sep 2002 + 21:43:25 -0400 +From: "Max Dunn" +To: +Subject: RE: sed /s/United States/Roman Empire/g +Message-Id: <000101c261d9$6ef54340$6401a8c0@MAX> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.3416 +Importance: Normal +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 18:43:16 -0700 + +> As I've said before, American +> Indian Reservations are quite +> possibly the only place on the +> planet where you can find trailer +> park shantytowns where every +> household is bringing in a +> six-figure income. I wish I +> could be exploited like that. + +Like what, like the rare exception case you've raised or like the "on +average" case mentioned in the post you were replying to? + +Max + + + diff --git a/Ch3/datasets/spam/easy_ham/00694.d04cd6e81d2ff9a678a18607d32e229d b/Ch3/datasets/spam/easy_ham/00694.d04cd6e81d2ff9a678a18607d32e229d new file mode 100644 index 000000000..227926dd9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00694.d04cd6e81d2ff9a678a18607d32e229d @@ -0,0 +1,63 @@ +From fork-admin@xent.com Sun Sep 22 14:11:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6A2B316F03 + for ; Sun, 22 Sep 2002 14:11:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 14:11:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8M21pC16617 for ; + Sun, 22 Sep 2002 03:01:51 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A135129418C; Sat, 21 Sep 2002 18:58:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav27.law15.hotmail.com [64.4.22.84]) by + xent.com (Postfix) with ESMTP id 5DBC829409A for ; + Sat, 21 Sep 2002 18:57:11 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Sat, 21 Sep 2002 19:00:44 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: <1204837300.20020921093852@magnesium.net> + <3D8CFD5E.10406@endeavors.com> +Subject: Re: Oh my... +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 22 Sep 2002 02:00:44.0516 (UTC) FILETIME=[DC83EA40:01C261DB] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 19:05:28 -0700 + + +----- Original Message ----- +From: "Gregory Alan Bolcer" + + +> I went out and drew some chalk circles on my +> sidewalk just so I wouldn't miss out on the experience. +> I've collected half a dozen passwords & +> access to email accounts so far. +> +> Greg +hahaha! It takes a thief to catch a thief? + + diff --git a/Ch3/datasets/spam/easy_ham/00695.4ea4110f03a11a6f24b27420647d375f b/Ch3/datasets/spam/easy_ham/00695.4ea4110f03a11a6f24b27420647d375f new file mode 100644 index 000000000..cf2b10d18 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00695.4ea4110f03a11a6f24b27420647d375f @@ -0,0 +1,61 @@ +From fork-admin@xent.com Sun Sep 22 14:11:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D339216F03 + for ; Sun, 22 Sep 2002 14:11:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 14:11:40 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8M26qC16756 for ; + Sun, 22 Sep 2002 03:06:53 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BC5A72941CF; Sat, 21 Sep 2002 19:03:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav75.law15.hotmail.com [64.4.22.210]) by + xent.com (Postfix) with ESMTP id 5A9A02941CE for ; + Sat, 21 Sep 2002 19:02:22 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Sat, 21 Sep 2002 19:05:55 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: +Subject: Re: sed /s/United States/Roman Empire/g +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 22 Sep 2002 02:05:55.0838 (UTC) FILETIME=[9613E1E0:01C261DC] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 19:10:40 -0700 + +----- Original Message ----- +From: "James Rogers" + +> As I've said before, American +> Indian Reservations are quite possibly the only place on the planet where +> you can find trailer park shantytowns where every household is bringing in +a +> six-figure income. I wish I could be exploited like that. +Got bits? +(and I bet you probably /are/ being exploited, but you just don't know by +whom...) + + diff --git a/Ch3/datasets/spam/easy_ham/00696.767a9ee8575785978ea5174d3ad3ee26 b/Ch3/datasets/spam/easy_ham/00696.767a9ee8575785978ea5174d3ad3ee26 new file mode 100644 index 000000000..8c93ecce8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00696.767a9ee8575785978ea5174d3ad3ee26 @@ -0,0 +1,90 @@ +From fork-admin@xent.com Sun Sep 22 14:11:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 47FC516F03 + for ; Sun, 22 Sep 2002 14:11:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 14:11:42 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8M2CJC16977 for ; + Sun, 22 Sep 2002 03:12:19 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3294B2941D3; Sat, 21 Sep 2002 19:06:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav42.law15.hotmail.com [64.4.22.100]) by + xent.com (Postfix) with ESMTP id D6A6D2941D2 for ; + Sat, 21 Sep 2002 19:05:34 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Sat, 21 Sep 2002 19:09:08 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: +Subject: Re: sed /s/United States/Roman Empire/g +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 22 Sep 2002 02:09:08.0308 (UTC) FILETIME=[08CC7940:01C261DD] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 19:13:52 -0700 + + +----- Original Message ----- +From: "James Rogers" + +> As I've said before, American +> Indian Reservations are quite possibly the only place on the planet where +> you can find trailer park shantytowns where every household is bringing in +a +> six-figure income. I wish I could be exploited like that. + +If you can't trust the guvmint census, who can you trust? + +=== + +http://www.census.gov/Press-Release/www/2001/cb01fff15.html + +Income and Poverty + +$31,799 +Median household income for American Indians and Alaska Natives, based on a +1998-2000 average. This is higher than for African Americans ($28,679), not +statistically different from Hispanics ($31,703) and lower than for +non-Hispanic Whites ($45,514), and Asians and Pacific Islanders ($52,553). + + +25.9% +The poverty rate for American Indians and Alaska Natives, based on a +1998-2000 average. This rate was not statistically different from the rates +for African Americans and Hispanics, but was higher than those for +non-Hispanic Whites, and Asians and Pacific Islanders. + + +701,000 +Number of American Indians and Alaska Natives below the poverty line, based +on a 1998-2000 average. + + +=== + + + + diff --git a/Ch3/datasets/spam/easy_ham/00697.edd28212eb2b368046311fd1918aae7d b/Ch3/datasets/spam/easy_ham/00697.edd28212eb2b368046311fd1918aae7d new file mode 100644 index 000000000..c9d75ec1a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00697.edd28212eb2b368046311fd1918aae7d @@ -0,0 +1,64 @@ +From fork-admin@xent.com Sun Sep 22 14:11:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D385916F03 + for ; Sun, 22 Sep 2002 14:11:43 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 14:11:43 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8M3XqC20987 for ; + Sun, 22 Sep 2002 04:33:52 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B3B2F2940C9; Sat, 21 Sep 2002 20:30:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav32.law15.hotmail.com [64.4.22.89]) by + xent.com (Postfix) with ESMTP id 68FCF29409A for ; + Sat, 21 Sep 2002 20:29:25 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Sat, 21 Sep 2002 20:32:59 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +Subject: E-Textiles Come into Style +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 22 Sep 2002 03:32:59.0095 (UTC) FILETIME=[BF61A670:01C261E8] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 20:37:43 -0700 + + +Cool - I wonder what you'd look like standing in front of a bunch of +corporate executives... + +== +http://www.technologyreview.com/articles/wo_hellweg080102.asp + +That's why, for example, Orth is trying to catch the interest of the +military with fabrics that change color when conductive fibers stitched into +the cloth heat and cool the material's thermochromatic inks. "The army wants +fully addressable, interactive camouflage," she says, "so that when you're +standing in front of bricks, your clothing looks like bricks. When you're in +grass, you look like grass. Accomplishing that would be like a space program +for e-textiles." + + + diff --git a/Ch3/datasets/spam/easy_ham/00698.09cdefd75c1242540db1183f9fc54461 b/Ch3/datasets/spam/easy_ham/00698.09cdefd75c1242540db1183f9fc54461 new file mode 100644 index 000000000..f6dc48c4e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00698.09cdefd75c1242540db1183f9fc54461 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Sun Sep 22 14:11:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3E16716F03 + for ; Sun, 22 Sep 2002 14:11:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 14:11:45 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8M61rC24676 for ; + Sun, 22 Sep 2002 07:01:54 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3AAB22940B7; Sat, 21 Sep 2002 22:58:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (unknown [63.145.31.2]) by xent.com (Postfix) + with ESMTP id B8E9529409A for ; Sat, 21 Sep 2002 22:57:19 + -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Sun, 22 Sep 2002 05:59:23 -08:00 +Message-Id: <3D8D5C3B.2090202@barrera.org> +From: "Joseph S. Barrera III" +Organization: NERV +User-Agent: Mutt 5.00.2919.6900 DM (Nigerian Scammer Special Edition) +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: FoRK +Subject: flavor cystals +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 21 Sep 2002 22:59:23 -0700 + +Can anyone stop talking politics long enough to let me know that, +yes, indeed, they do remember the Suburban Lawns? + +Better yet, tell me where I should be listening for new music now that +P2P is dead and I still can't pick up KFJC very well. + +- Joe + +-- +Give me time I will be clear; given time you'll understand. +What possesses me to right what you have suffered. +I'm in this mood because of scorn; I'm in a mood for total war. +To the darkened skies once more and ever onward. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00699.29e599983f044aee500f3a58c34acffc b/Ch3/datasets/spam/easy_ham/00699.29e599983f044aee500f3a58c34acffc new file mode 100644 index 000000000..f6a4e0829 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00699.29e599983f044aee500f3a58c34acffc @@ -0,0 +1,79 @@ +From fork-admin@xent.com Sun Sep 22 14:11:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A9B7316F03 + for ; Sun, 22 Sep 2002 14:11:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 14:11:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8M6AsC24974 for ; + Sun, 22 Sep 2002 07:10:55 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A19B329418B; Sat, 21 Sep 2002 23:07:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id B952529409A for + ; Sat, 21 Sep 2002 23:06:02 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17sznb-0000ZL-00; Sun, 22 Sep 2002 03:00:55 -0300 +Message-Id: <3D8D5F74.8000102@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.1) Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Gary Lawrence Murphy +Cc: "R. A. Hettinga" , + "Mr. FoRK" , fork@xent.com +Subject: Re: sed /s/United States/Roman Empire/g +References: <979BE8FE-CCF6-11D6-817E-000393A46DEA@alumni.caltech.edu> + + +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 03:13:08 -0300 + +Gary Lawrence Murphy wrote: + +>>>>>>"R" == R A Hettinga writes: +>>>>>> +>>>>>> +> +> R> At 9:34 PM -0700 on 9/20/02, Mr. FoRK wrote: +> >> "Free trade and free markets have proven their ability to lift +> >> whole societies out of poverty" I'm not a +> >> socio-political/history buff - does anybody have some clear +> >> examples? +> +> R> You're probably living in one, or you wouldn't be able to post +> R> here. +> +>Cool --- I wasn't aware that the US had lifted it's population out of +>poverty! When did this happen? I wonder where the media gets the +>idea that the wealth gap is widening and deepening... +> +> +> +> +I wasn't aware that there was anyone who could use the words "free +trade" about the United States and keep a straight face. + +Owen + + + + diff --git a/Ch3/datasets/spam/easy_ham/00700.7eee792482a5a8cf20f1e4225f905f6b b/Ch3/datasets/spam/easy_ham/00700.7eee792482a5a8cf20f1e4225f905f6b new file mode 100644 index 000000000..bf2ed2472 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00700.7eee792482a5a8cf20f1e4225f905f6b @@ -0,0 +1,87 @@ +From fork-admin@xent.com Sun Sep 22 14:11:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C6F0F16F03 + for ; Sun, 22 Sep 2002 14:11:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 14:11:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8M7GwC26608 for ; + Sun, 22 Sep 2002 08:16:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 370062940CE; Sun, 22 Sep 2002 00:13:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id A6CB429409A for ; Sun, + 22 Sep 2002 00:12:17 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 94E553ED7F; + Sun, 22 Sep 2002 03:20:22 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 8D9703ECFC for ; Sun, + 22 Sep 2002 03:20:22 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: [vox] Anarchist 'Scavenger Hunt' Raises D.C. Police Ire (fwd) +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 03:20:22 -0400 (EDT) + + + +Anarchist 'Scavenger Hunt' Raises D.C. Police Ire +Sat Sep 21, 3:37 PM ET + +WASHINGTON (Reuters) - An online "anarchist scavenger +hunt" proposed for next week's annual meeting of the +International Monetary Fund ( news - web sites) and +World Bank ( news - web sites) here has raised the ire +of police, who fear demonstrators could damage +property and wreak havoc. + +Break a McDonald's window, get 300 points. Puncture a +Washington D.C. police car tire to win 75 points. +Score 400 points for a pie in the face of a corporate +executive or World Bank delegate. + +D.C. Assistant Police Chief Terrance Gainer told a +congressional hearing on Friday that law authorities +were in talks to decide whether planned protests were, +"so deleterious to security efforts that we ought to +take proactive action." + +Several thousand people are expected to demonstrate +outside the IMF and World Bank headquarters next +weekend. + +The Anti-Capitalist Convergence, a D.C.-based +anarchist group, is also planning a day-long traffic +blockade, banner-drops and protests against major +corporations in the downtown core. + +Chuck, the 37 year-old webmaster of the anarchist site +www.infoshop.org who declined to give his last name, +told Reuters his scavenger hunt was meant as a joke. + +"People were asking for things to do when they come to +D.C. We made the list to get people thinking, so they +don't do the boring, standard stuff," he said. "I +doubt people will actually keep track of what they do +for points." + + + diff --git a/Ch3/datasets/spam/easy_ham/00701.4c1a296394c3afdcb38020e8283d1a5d b/Ch3/datasets/spam/easy_ham/00701.4c1a296394c3afdcb38020e8283d1a5d new file mode 100644 index 000000000..a68201daa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00701.4c1a296394c3afdcb38020e8283d1a5d @@ -0,0 +1,69 @@ +From fork-admin@xent.com Sun Sep 22 14:11:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BFA4916F03 + for ; Sun, 22 Sep 2002 14:11:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 14:11:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8M7RqC26893 for ; + Sun, 22 Sep 2002 08:27:52 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C0CA0294195; Sun, 22 Sep 2002 00:24:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 4015729409A for ; Sun, + 22 Sep 2002 00:23:17 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id F40833ED7F; + Sun, 22 Sep 2002 03:31:22 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id F2B1F3EB72 for ; Sun, + 22 Sep 2002 03:31:22 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: [vox] Founding Fathers on Religion +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 03:31:22 -0400 (EDT) + + +Some interesting quotes... + +http://www.postfun.com/pfp/worbois.html + + +Thomas Jefferson: + +"I have examined all the known superstitions of the word, and I do not +find in our particular superstition of Christianity one redeeming feature. +They are all alike founded on fables and mythology. Millions of innocent +men, women and children, since the introduction of Christianity, have been +burnt, tortured, fined and imprisoned. What has been the effect of this +coercion? To make one half the world fools and the other half hypocrites; +to support roguery and error all over the earth." + +SIX HISTORIC AMERICANS, +by John E. Remsburg, letter to William Short +Jefferson again: + +"Christianity...(has become) the most perverted system that ever shone on +man. ...Rogueries, absurdities and untruths were perpetrated upon the +teachings of Jesus by a large band of dupes and importers led by Paul, the +first great corrupter of the teaching of Jesus." + + diff --git a/Ch3/datasets/spam/easy_ham/00702.bf064c61d1ba308535d0d8af3bcb1789 b/Ch3/datasets/spam/easy_ham/00702.bf064c61d1ba308535d0d8af3bcb1789 new file mode 100644 index 000000000..fdf724149 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00702.bf064c61d1ba308535d0d8af3bcb1789 @@ -0,0 +1,76 @@ +From fork-admin@xent.com Sun Sep 22 14:11:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1E83716F03 + for ; Sun, 22 Sep 2002 14:11:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 14:11:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8M83qC27815 for ; + Sun, 22 Sep 2002 09:03:53 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 22B462941C1; Sun, 22 Sep 2002 01:00:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 7A0872941BD for + ; Sun, 22 Sep 2002 00:57:24 -0700 (PDT) +Received: (qmail 6808 invoked by uid 501); 22 Sep 2002 08:00:48 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 22 Sep 2002 08:00:48 -0000 +From: CDale +To: Gregory Alan Bolcer +Cc: bitbitch@magnesium.net, +Subject: Re: Oh my... +In-Reply-To: <3D8CFD5E.10406@endeavors.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 03:00:48 -0500 (CDT) + +LOL you rool (: + +On Sat, 21 Sep 2002, Gregory Alan Bolcer wrote: + +> I went out and drew some chalk circles on my +> sidewalk just so I wouldn't miss out on the experience. +> I've collected half a dozen passwords & +> access to email accounts so far. +> +> Greg +> +> bitbitch@magnesium.net wrote: +> > Hello fork, +> > +> > So they have Aaron Schwartz on NPR's Weekend Edition talking +> > about Warchalking. I'll agree, its funny, his voice is squeaky and +> > I'm jealous that he got on radio and I didn't... +> > +> > But really, WTF is the big deal about warchalking? I have yet to +> > see any of it, anywhere. +> > +> > LInk will probably pop up on www.npr.org later today. +> > +> > +> > +> +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00703.ec6e20ebdbfec16d51db2989785583ed b/Ch3/datasets/spam/easy_ham/00703.ec6e20ebdbfec16d51db2989785583ed new file mode 100644 index 000000000..00c37ea8b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00703.ec6e20ebdbfec16d51db2989785583ed @@ -0,0 +1,69 @@ +From fork-admin@xent.com Sun Sep 22 14:11:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7B54516F03 + for ; Sun, 22 Sep 2002 14:11:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 14:11:55 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8MCerC01967 for ; + Sun, 22 Sep 2002 13:40:53 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 39E012940D8; Sun, 22 Sep 2002 05:37:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 3EB0E29409A for ; + Sun, 22 Sep 2002 05:36:09 -0700 (PDT) +Received: (qmail 12302 invoked from network); 22 Sep 2002 12:39:49 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 22 Sep 2002 12:39:49 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id CB21B1B648; + Sun, 22 Sep 2002 08:39:42 -0400 (EDT) +To: "Joseph S. Barrera III" +Cc: FoRK +Subject: Re: flavor cystals +References: <3D8D5C3B.2090202@barrera.org> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 22 Sep 2002 08:39:42 -0400 + +>>>>> "J" == Joseph S Barrera, writes: + + J> Better yet, tell me where I should be listening for new music + J> now that P2P is dead and I still can't pick up KFJC very well. + +How about your local pub? + +(sorry couldn't resist) + +I still use Live365; slowly the disconnected stations are returning, +since the fee to stay on the air can be as low as $6/month, and if +your fave broadcaster won't pay, you're given the option to pay for +them. + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00704.e077ad131955ba1fa3b9ba7a68b78f62 b/Ch3/datasets/spam/easy_ham/00704.e077ad131955ba1fa3b9ba7a68b78f62 new file mode 100644 index 000000000..54d3b609e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00704.e077ad131955ba1fa3b9ba7a68b78f62 @@ -0,0 +1,158 @@ +From fork-admin@xent.com Sun Sep 22 21:57:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 631F116F03 + for ; Sun, 22 Sep 2002 21:57:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 21:57:42 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8MF0sC05387 for ; + Sun, 22 Sep 2002 16:00:54 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A07E72940A2; Sun, 22 Sep 2002 07:57:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id 4C99329409A for + ; Sun, 22 Sep 2002 07:56:18 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17t84r-0001m6-00; Sun, 22 Sep 2002 11:51:17 -0300 +Message-Id: <3D8DDBC8.8030602@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.1) Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Owen Byrne +Cc: Gary Lawrence Murphy , + "Mr. FoRK" , fork@xent.com, + Digital Bearer Settlement List +Subject: Re: sed /s/United States/Roman Empire/g +References: <979BE8FE-CCF6-11D6-817E-000393A46DEA@alumni.caltech.edu> + + + <3D8DCF62.4040809@permafrost.net> +Content-Type: multipart/related; + boundary="------------090600030109070305070809" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 12:03:36 -0300 + + +--------------090600030109070305070809 +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 7bit + +Owen Byrne wrote: + +> R. A. Hettinga wrote: +> +>> -----BEGIN PGP SIGNED MESSAGE----- +>> Hash: SHA1 +>> +>> At 10:32 AM -0400 on 9/21/02, Gary Lawrence Murphy wrote: +>> +>> +>> +>> +>>> Cool --- I wasn't aware that the US had lifted it's population out +>>> of poverty! When did this happen? I wonder where the media gets the +>>> idea that the wealth gap is widening and deepening... +>>> +>> +>> +>> All the world loves a smartass... +>> +>> :-). +>> +>> Seriously. Look at he life expectancy and human carrying capacity of +>> this continent before the Europeans got here. Look at it now. Even +>> for descendants of the original inhabitants. Even for the descendents +>> of slaves, who were brought here by force. +>> +>> More stuff, cheaper. That's progress. +>> +>> Poverty, of course, is not relative. It's absolute. Disparity in +>> wealth has nothing to do with it. +>> +>> It's like saying that groups have rights, when, in truth, only +>> individuals do. Like group rights, "disparity" in wealth is +>> statistical sophistry. +>> +>> +>> Besides, even if you can't help the distribution, industrial wealth +>> is almost always transitory, and so is relative poverty, even when +>> there are no confiscatory death-taxes. The 20th anniversary Forbes +>> 400 just came out, and only a few tens of people are still there +>> since 1982, a time which had significantly higher marginal taxes on +>> wealth, income, and inheritance than we do now. More to the point, +>> they're nowhere near the top. +>> +>> +Lovely quote from the Forbes 400 list: +"and not a single Astor, Vanderbilt or Morgan rates a mention on the +current Forbes Four Hundred. " + +But you have to studiously ignore the 4 Rockefellers, 3 Gettys, 3 +Hearsts, Fords, Kelloggs, Wrigleys, +and so on. + +There are more self-made people on the list than I previously alluded to +- I made a mistake. Most +of them seem to have Ivy League educations, or are Ivy League dropouts, +suggesting to me that they weren't +exactly poor to start with. Some of them have lovely self-made stories +like: +#347, Johnston, Summerfield K Jr +track this personTrack This Person + + + | See all Bacon Makers + + + +70 , self made +*Source: Food +, +Coca-Cola* (quote +, +executives +, +news ) + +Net Worth: *$680 mil* returnee +Hometown: Chattanooga , TN + +*Marital Status:* married , 5 children + + +Grandfather James and partner landed first Coca-Cola bottling franchise +in 1899. Company passed down 3 generations to Summerfield 1950s. Became +largest independent Coke bottler. Merged with Coca-Cola Enterprises 1991. + + + + + +(...by a compensation committee) +Owen + + + + + + +--------------090600030109070305070809-- + + diff --git a/Ch3/datasets/spam/easy_ham/00705.e481bd3281b960fad92e6dfaeb567d14 b/Ch3/datasets/spam/easy_ham/00705.e481bd3281b960fad92e6dfaeb567d14 new file mode 100644 index 000000000..548f421e8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00705.e481bd3281b960fad92e6dfaeb567d14 @@ -0,0 +1,70 @@ +From fork-admin@xent.com Sun Sep 22 21:57:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EE4D716F03 + for ; Sun, 22 Sep 2002 21:57:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 21:57:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8MF64C05641 for ; + Sun, 22 Sep 2002 16:06:04 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 826FA2941C6; Sun, 22 Sep 2002 07:59:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.endeavors.com (unknown [66.161.8.83]) by xent.com + (Postfix) with ESMTP id B2ADC2941C4 for ; Sun, + 22 Sep 2002 07:58:24 -0700 (PDT) +Received: from endeavors.com ([66.126.120.171] RDNS failed) by + mail.endeavors.com with Microsoft SMTPSVC(5.0.2195.5329); Sun, + 22 Sep 2002 08:00:05 -0700 +Message-Id: <3D8DDB64.9070600@endeavors.com> +From: Gregory Alan Bolcer +Organization: Endeavors Technology, Inc. +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.1) + Gecko/20020823 Netscape/7.0 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: "Joseph S. Barrera III" +Cc: FoRK +Subject: Re: flavor cystals +References: <3D8D5C3B.2090202@barrera.org> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Originalarrivaltime: 22 Sep 2002 15:00:05.0952 (UTC) FILETIME=[BC80CC00:01C26248] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 08:01:56 -0700 + +"Oh my Janitor, boom, boom, boom." + +The best place for new music is right where it's +always been. College radio. UCI, UCSD,USD, Claremont(?)'s +KSPC, UCLA, Cal Fullerton, Cal LA, Cal Pomona. + +Greg + +Joseph S. Barrera III wrote: +> Can anyone stop talking politics long enough to let me know that, +> yes, indeed, they do remember the Suburban Lawns? +> +> Better yet, tell me where I should be listening for new music now that +> P2P is dead and I still can't pick up KFJC very well. +> +> - Joe +> + + + + diff --git a/Ch3/datasets/spam/easy_ham/00706.a5e10c660dcdf09e6e760d87c0589b9b b/Ch3/datasets/spam/easy_ham/00706.a5e10c660dcdf09e6e760d87c0589b9b new file mode 100644 index 000000000..f9d8dab7d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00706.a5e10c660dcdf09e6e760d87c0589b9b @@ -0,0 +1,190 @@ +From fork-admin@xent.com Sun Sep 22 21:57:47 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 805E016F03 + for ; Sun, 22 Sep 2002 21:57:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 21:57:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8MFIsC05952 for ; + Sun, 22 Sep 2002 16:18:55 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8A8032940EC; Sun, 22 Sep 2002 08:15:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 5189129409A for ; + Sun, 22 Sep 2002 08:14:05 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17t8V8-00042A-00; Sun, 22 Sep 2002 11:18:26 -0400 +From: "Geege Schuman" +To: "Owen Byrne" +Cc: "Gary Lawrence Murphy" , + "Mr. FoRK" , , + "Digital Bearer Settlement List" +Subject: Crony Capitalism (was RE: sed /s/United States/Roman Empire/g) +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <3D8DDBC8.8030602@permafrost.net> +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 11:15:34 -0400 + +reminds me of Cheney during the VP debates, when he declared his wealth was +not the product of government favors. + +http://www.ibiblio.org/pub/academic/communications/logs/Gulf-War/desert-stor +m/07 + +(good time to refresh our memories re iraq . . .) + +starting a debate on govt. contracts, +gg + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of Owen +Byrne +Sent: Sunday, September 22, 2002 11:04 AM +To: Owen Byrne +Cc: Gary Lawrence Murphy; Mr. FoRK; fork@spamassassin.taint.org; Digital Bearer +Settlement List +Subject: Re: sed /s/United States/Roman Empire/g + + +Owen Byrne wrote: + +> R. A. Hettinga wrote: +> +>> -----BEGIN PGP SIGNED MESSAGE----- +>> Hash: SHA1 +>> +>> At 10:32 AM -0400 on 9/21/02, Gary Lawrence Murphy wrote: +>> +>> +>> +>> +>>> Cool --- I wasn't aware that the US had lifted it's population out +>>> of poverty! When did this happen? I wonder where the media gets the +>>> idea that the wealth gap is widening and deepening... +>>> +>> +>> +>> All the world loves a smartass... +>> +>> :-). +>> +>> Seriously. Look at he life expectancy and human carrying capacity of +>> this continent before the Europeans got here. Look at it now. Even +>> for descendants of the original inhabitants. Even for the descendents +>> of slaves, who were brought here by force. +>> +>> More stuff, cheaper. That's progress. +>> +>> Poverty, of course, is not relative. It's absolute. Disparity in +>> wealth has nothing to do with it. +>> +>> It's like saying that groups have rights, when, in truth, only +>> individuals do. Like group rights, "disparity" in wealth is +>> statistical sophistry. +>> +>> +>> Besides, even if you can't help the distribution, industrial wealth +>> is almost always transitory, and so is relative poverty, even when +>> there are no confiscatory death-taxes. The 20th anniversary Forbes +>> 400 just came out, and only a few tens of people are still there +>> since 1982, a time which had significantly higher marginal taxes on +>> wealth, income, and inheritance than we do now. More to the point, +>> they're nowhere near the top. +>> +>> +Lovely quote from the Forbes 400 list: +"and not a single Astor, Vanderbilt or Morgan rates a mention on the +current Forbes Four Hundred. " + +But you have to studiously ignore the 4 Rockefellers, 3 Gettys, 3 +Hearsts, Fords, Kelloggs, Wrigleys, +and so on. + +There are more self-made people on the list than I previously alluded to +- I made a mistake. Most +of them seem to have Ivy League educations, or are Ivy League dropouts, +suggesting to me that they weren't +exactly poor to start with. Some of them have lovely self-made stories +like: +#347, Johnston, Summerfield K Jr +track this personTrack This Person + + + | See all Bacon Makers + + + +70 , self made +*Source: Food +, +Coca-Cola* (quote +, +executives +, +news ) + +Net Worth: *$680 mil* returnee +Hometown: Chattanooga , TN + +*Marital Status:* married , 5 children + + +Grandfather James and partner landed first Coca-Cola bottling franchise +in 1899. Company passed down 3 generations to Summerfield 1950s. Became +largest independent Coke bottler. Merged with Coca-Cola Enterprises 1991. + + + + + +(...by a compensation committee) +Owen + + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00707.72dce8440a545f840d53765a11adce4f b/Ch3/datasets/spam/easy_ham/00707.72dce8440a545f840d53765a11adce4f new file mode 100644 index 000000000..e5a2c5426 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00707.72dce8440a545f840d53765a11adce4f @@ -0,0 +1,83 @@ +From fork-admin@xent.com Sun Sep 22 21:57:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4830516F03 + for ; Sun, 22 Sep 2002 21:57:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 21:57:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8MG4mC07020 for ; + Sun, 22 Sep 2002 17:04:48 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7A8012940F0; Sun, 22 Sep 2002 09:01:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc02.attbi.com (sccrmhc02.attbi.com [204.127.202.62]) + by xent.com (Postfix) with ESMTP id C700229409A for ; + Sun, 22 Sep 2002 09:00:04 -0700 (PDT) +Received: from [24.61.113.164] by sccrmhc02.attbi.com (InterMail + vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020922160338.KCXY14454.sccrmhc02.attbi.com@[24.61.113.164]> for + ; Sun, 22 Sep 2002 16:03:38 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <126299908004.20020922120323@magnesium.net> +To: fork@spamassassin.taint.org +Subject: dubyadubyadubya.dubyaspeak.com +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 12:03:23 -0400 + + + +A worthy study procrastination tool: ) + +A few choice phrases from ol dubya himself: + +"And all our history says we believe in liberty and justice for all, +that when we see oppression, we cry." + +"If you want to keep the peace, you've got to have the authorization to use force. +-- White House, Sep. 19, 2002" + +"The United States will remain strong in our conviction that we must not, and will not, + allow the world's worst leaders to hold the United States and our friends and allies blackmail, + or threaten us with the world's worst weapons." -- Whats truly sad + about the "United States and our friends and allies /blackmail/, is + that he said the same thing in the SAME speech in a paragraph or two + before. + + + "If you find a neighbor in need, you're responsible for serving that neighbor in need, + you're responsible for loving a neighbor just like you'd like to + love yourself." + -- Snerk. This just begs for potty-mouth comedy. Too bad the kids + on southpark just aren't that political. + + "I want to send the signal to our enemy that you have aroused a compassionate and decent and mighty nation, and we're going to hunt you down. +-- No, I didn't make this one up. Louisville, Kentucky, Sep. 5, 2002 + +Hee.. Mkay. +http://www.dubyaspeak.com + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00708.d3270ed75122fa3989cec02ffb5b3066 b/Ch3/datasets/spam/easy_ham/00708.d3270ed75122fa3989cec02ffb5b3066 new file mode 100644 index 000000000..062bc754b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00708.d3270ed75122fa3989cec02ffb5b3066 @@ -0,0 +1,60 @@ +From fork-admin@xent.com Sun Sep 22 21:57:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C4BD416F03 + for ; Sun, 22 Sep 2002 21:57:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 21:57:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8MHGrC09099 for ; + Sun, 22 Sep 2002 18:16:53 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D09342940BB; Sun, 22 Sep 2002 10:13:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jasper.he.net (jasper.he.net [216.218.145.2]) by xent.com + (Postfix) with ESMTP id 2F4DD29409A for ; Sun, + 22 Sep 2002 10:12:49 -0700 (PDT) +Received: from whump.com (sdsl-216-36-66-183.dsl.sjc.megapath.net + [216.36.66.183]) by jasper.he.net (8.8.6/8.8.2) with ESMTP id KAA29069; + Sun, 22 Sep 2002 10:16:24 -0700 +Subject: Re: flavor cystals +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v546) +Cc: FoRK +To: "Joseph S. Barrera III" +From: Bill Humphries +In-Reply-To: <3D8D5C3B.2090202@barrera.org> +Message-Id: <15EFC2CD-CE4F-11D6-A857-003065F62CD6@whump.com> +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.546) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 10:16:51 -0700 + +On Saturday, September 21, 2002, at 10:59 PM, Joseph S. Barrera III +wrote: + +> Better yet, tell me where I should be listening for new music now that +> P2P is dead and I still can't pick up KFJC very well. + +KFJC has a MP3 stream at kfjc.org. I'd also recommend radioparadise.com. + +I remember the Suburban Lawns, but I don't know what became of them. + +Apropos of nothing: "Spirited Away" is amazing. Go see it now. + +-- whump + + diff --git a/Ch3/datasets/spam/easy_ham/00709.ab6879788945a66541ed05b4f23edbed b/Ch3/datasets/spam/easy_ham/00709.ab6879788945a66541ed05b4f23edbed new file mode 100644 index 000000000..511b62b25 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00709.ab6879788945a66541ed05b4f23edbed @@ -0,0 +1,133 @@ +From fork-admin@xent.com Sun Sep 22 23:59:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0305C16F03 + for ; Sun, 22 Sep 2002 23:58:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 23:58:59 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8MMWsC17856 for ; + Sun, 22 Sep 2002 23:32:55 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7A1702940C1; Sun, 22 Sep 2002 15:29:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 943C329409A for ; Sun, + 22 Sep 2002 15:28:57 -0700 (PDT) +Received: (qmail 31218 invoked from network); 22 Sep 2002 22:32:33 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 22 Sep 2002 22:32:33 -0000 +Reply-To: +From: "John Hall" +To: "FoRK" +Subject: Colonial Script ... +Message-Id: <000801c26287$f2960460$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 15:32:34 -0700 + +Oh, they were plenty upset about the tea taxes. + +But the crack down on colonial script certainly screwed over the +American Colonies. And, BTW, England as well. + +Dear Ben Franklin was right for the wrong reasons. First of all the +colonies were not prosperous compared to England proper. Second, the +issuance of colonial script had nothing to do with full employeement. + +(In fact, it is almost inconceivable he would make that claim. It +sounds like a modern Keynsian was creating an urban legend.) + +OTOH the lack of sufficient circulating monetary instruments was +economically crippling. Imagine trying to buy your supplies by offering +IOUs on your own name -- and then trying to market / exchange the paper +as the merchant who took the IOU. + +=========================== + +The most common problem in the world is when a government prints too +much money. The effects are a complete disaster. There are a lot of +incentives that push governments into doing this even though it is +incredibly stupid. + +So almost all the literature talks about that. + +But you can ALSO screw an economy over by taking all the money out of +circulation. The fundamental cause of the American Great Depression was +exactly this, courtesy of the Federal Reserve Board. + +I don't think shifting the power to print money to the bank of Canada +had much effect. And Canada is still a prosperous country. + + + + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Gary +> Lawrence Murphy +> Sent: Saturday, September 21, 2002 7:31 AM +> To: Mr. FoRK +> Cc: fork@spamassassin.taint.org +> Subject: Re: sed /s/United States/Roman Empire/g +> +> >>>>> "f" == fork list writes: +> +> f> "Free trade and free markets have proven their ability to lift +> f> whole societies out of poverty" I'm not a +> f> socio-political/history buff - does anybody have some clear +> f> examples? +> +> China? Ooops, no wait, scratch that. +> +> There is one counter example that I can think of, but it may not be +> precisely "free trade/markets" -- when Ben Franklin first visited +> England he was asked why the colonies were so prosperous. Ben +> explained that they used "Colonial Script", a kind of barter-dollar, +> and increasing the supply of script ensured complete employment. The +> British bankers were furious and immediately lobbied parliament to +> clamp down on the practice. Within a few years, the colonies were +> rife with unemployment and poverty just like the rest of the Empire. +> +> According to questionable literature handed out by a fringe political +> party here in Canada, the Founding Fathers had no real complaint about +> tea taxes, it was the banning of colonial script they were +> protesting. If this is true, then it comes right back to the forces +> that killed Ned Ludd's followers as to why popular opinion believes +> they were protesting a tea tax. The same pamphlet claimed that Canada +> was also a prosperous nation until, by an act of parliament in the +> late-50's or early 60's, the right to print money was removed from the +> juristiction of parliament and handed over to the Bank of Canada. +> +> I've wondered about all this. Certainly the timeline of the collapse +> of the Canadian economy fits the profile, but there are oodles of +> other causes (for example, spending money like we had 300M people when +> we only had 20M) Anyone have any further information on this? +> +> -- +> Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications +> - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - +> "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00710.ab32156df4d26cf061b7e553b51547b5 b/Ch3/datasets/spam/easy_ham/00710.ab32156df4d26cf061b7e553b51547b5 new file mode 100644 index 000000000..d533053da --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00710.ab32156df4d26cf061b7e553b51547b5 @@ -0,0 +1,76 @@ +From fork-admin@xent.com Sun Sep 22 23:59:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3494216F03 + for ; Sun, 22 Sep 2002 23:59:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 23:59:01 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8MMssC18527 for ; + Sun, 22 Sep 2002 23:54:54 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BB1302940A8; Sun, 22 Sep 2002 15:51:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id B3EF729409A for ; Sun, + 22 Sep 2002 15:50:06 -0700 (PDT) +Received: (qmail 32383 invoked from network); 22 Sep 2002 22:53:43 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 22 Sep 2002 22:53:43 -0000 +Reply-To: +From: "John Hall" +To: "FoRK" +Subject: RE: sed /s/United States/Roman Empire/g +Message-Id: <000f01c2628a$e71a61f0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 15:53:43 -0700 + + +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Mr. +> FoRK + +> Also, the lifestyle of the remnants of those +> societies is on average only marginally above poverty even today. + +As I understand it, there is a huge difference between native Americans +who speak english at home and those who do not. I don't have figures +that separate those at hand, though. + +1989 American Indians (US Pop as a whole) -- Families below poverty +27.2% (10%), Persons below poverty 31.2 (13.1), Speak a language other +than English 23 (13.8) Married couple families 65.8 (79.5) Median family +income $21,619 ($35,225) Per Capita $8,284 ($14,420). + +Note: High Income countries in 1989 were defined as having over $6,000 +per capita. American Indians separated from the rest of the US society +would still be considered a high-income society. + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00711.cd5fd593ba9d0f75c0af12f4fd2d64f0 b/Ch3/datasets/spam/easy_ham/00711.cd5fd593ba9d0f75c0af12f4fd2d64f0 new file mode 100644 index 000000000..3e47e07df --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00711.cd5fd593ba9d0f75c0af12f4fd2d64f0 @@ -0,0 +1,74 @@ +From fork-admin@xent.com Mon Sep 23 12:09:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A314416F03 + for ; Mon, 23 Sep 2002 12:09:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 12:09:31 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8N1StC26553 for ; + Mon, 23 Sep 2002 02:28:55 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DEBEF2940EA; Sun, 22 Sep 2002 18:25:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.lig.net (unknown [204.248.145.126]) by xent.com + (Postfix) with ESMTP id 2403A29409A for ; Sun, + 22 Sep 2002 18:24:46 -0700 (PDT) +Received: from lig.net (unknown [66.95.227.18]) by mail.lig.net (Postfix) + with ESMTP id B5DB8680BB; Sun, 22 Sep 2002 21:29:20 -0400 (EDT) +Message-Id: <3D8E6FE0.9070204@lig.net> +From: "Stephen D. Williams" +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0rc2) + Gecko/20020512 Netscape/7.0b1 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Tom +Cc: "Mr. FoRK" , fork@spamassassin.taint.org +Subject: Re: SunMSapple meta4 of the day +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 21:35:28 -0400 + +Clearly, it is US/NATO = Sun/IBM/OSS, USSR = MS + +"Where we want you to go in our 5 year plan?" + +sdw + +Tom wrote: + +>Im feeling a bit farklempt having spent the night at Todais with the +>family so talk amongst yourself..here Ill give you a topic +> +>The current state of IT can be thought of in terms of the Cold war with +>the US and the UUSR being MS and Sun/IBM/OSS (does it matter which side +>is which?), Apple as Cuba and the US legal system as the UN. +> +>Discuss. +> +> + +-- +sdw@lig.net http://sdw.st +Stephen D. Williams 43392 Wayside Cir,Ashburn,VA 20147-4622 +703-724-0118W 703-995-0407Fax Dec2001 + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00712.89e45eecae00da0b8207bc79d2e843f1 b/Ch3/datasets/spam/easy_ham/00712.89e45eecae00da0b8207bc79d2e843f1 new file mode 100644 index 000000000..75b02d065 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00712.89e45eecae00da0b8207bc79d2e843f1 @@ -0,0 +1,172 @@ +From fork-admin@xent.com Mon Sep 23 12:09:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4250816F03 + for ; Mon, 23 Sep 2002 12:09:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 12:09:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8N3ZuC31017 for ; + Mon, 23 Sep 2002 04:35:56 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id CD0BE2940BF; Sun, 22 Sep 2002 20:32:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from tisch.mail.mindspring.net (tisch.mail.mindspring.net + [207.69.200.157]) by xent.com (Postfix) with ESMTP id AF61829409A for + ; Sun, 22 Sep 2002 20:31:55 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + tisch.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17tJzZ-0007HQ-00; + Sun, 22 Sep 2002 23:34:37 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: +References: +To: "Geege Schuman" , + "Owen Byrne" +From: "R. A. Hettinga" +Subject: Comrade Communism (was Re: Crony Capitalism (was RE: sed + /s/United States/Roman Empire/g)) +Cc: "Gary Lawrence Murphy" , + "Mr. FoRK" , , + "Digital Bearer Settlement List" +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 22:01:22 -0400 + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +At 11:15 AM -0400 on 9/22/02, Geege Schuman wrote: + + +> Most of them seem to have Ivy League educations, or are Ivy League +> dropouts suggesting to me that they weren't exactly poor to start +> with. + +Actually, if I remember correctly from discussion of the list's +composition in Forbes about five or six years ago, the *best* way to +get on the Forbes 400 is to have *no* college at all. Can you say +"Bootstraps", boys and girls? I knew you could... + +[Given that an undergraduate liberal arts degree from a state school, +like, say, mine, :-), is nothing but stuff they should have taught +you in a government-run "high" school, you'll probably get more of +*those* on the Forbes 400 as well as time goes on. If we ever get +around to having a good old fashioned government-collapsing +transfer-payment depression (an economic version of this summer's +government-forest conflagration, caused by the same kind of +innumeracy that not clear-cutting enough forests did out west this +summer :-)) that should motivate more than a few erst-slackers out +there, including me, :-), to learn to actually feed themselves.] + + +The *next* category on the Forbes 400 list is someone with a +"terminal" professional degree, like an MBA, PhD, MD, etc., from the +best school possible. + +Why? Because, as of about 1950, the *best* way to get into Harvard, +for instance, is to be *smart*, not rich. Don't take my word for it, +ask their admissions office. Look at the admissions stats over the +years for proof. + +Meritocracy, American Style, was *invented* at the Ivy League after +World War II. Even Stanford got the hint, :-), and, of course, +Chicago taught them all how, right? :-). Practically *nobody* who +goes to a top-20 American institution of higher learning can actually +afford to go there these days. Unless, of course, their parents, who +couldn't afford to go there themselves, got terminal degrees in the +last 40 years or so. And their kids *still* had to get the grades, +and "biased" (by intelligence :-)), test scores, to get in. + + +The bizarre irony is that almost all of those people with "terminal" +degrees, until they actually *own* something and *hire* people, or +learn to *make* something for a living all day on a profit and loss +basis, persist in the practically insane belief, like life after +death, that economics is some kind of zero sum game, that dumb people +who don't work hard for it make all the money, and, if someone *is* +smart, works hard, and is rich, then they stole their wealth somehow. + +BTW, none of you guys out there holding the short end of this +rhetorical stick can blame *me* for the fact that I'm using it to +beat you severely all over your collective head and shoulders. You +were, apparently, too dumb to grab the right end. *I* went to +Missouri, and *I* don't have a degree in anything actually useful, +much less a "terminal" one, which means *I*'m broker than anyone on +this list -- it's just that *you*, of all people, lots with +educations far surpassing my own, should just plain know better. The +facts speak for themselves, if you just open your eyes and *look*. +There are no epicycles, the universe does not orbit the earth, and +economics is not a zero-sum game. The cost of anything, including +ignorance and destitution, is the forgone alternative, in this case, +intelligence and effort. + +[I will, however, admit to being educated *waay* past my level of +competence, and, by the way *you* discuss economics, so have you, +apparently.] + + + +BTW, if we ever actually *had* free markets in this country, +*including* the abolition of redistributive income and death taxes, +all those smart people in the Forbes 400 would have *more* money, and +there would be *more* self-made people on that list. In addition, +most of the people who *inherited* money on the list would have +*much* less of it, not even relatively speaking. Finally, practically +all of that "new" money would have come from economic efficiency and +not "stolen" from someone else, investment bubbles or not. + +That efficiency is called "progress", for those of you in The +People's Republics of Berkeley or Cambridge. It means more and better +stuff, cheaper, over time -- a terrible, petit-bourgeois concept +apparently not worthy of teaching by the educational elite, or you'd +know about it by now. In economic terms, it's also called an increase +in general welfare, and, no, Virginia, I'm not talking about +extorting money from someone who works, and giving it to someone who +doesn't in order to keep them from working and they can think of some +politician as Santa Claus come election time... + + +In short, then, economics is not a zero sum game, property is not +theft, the rich don't get rich off the backs of the poor, and +redistributionist labor "theory" of value happy horseshit is just +that: horseshit, happy or otherwise. + +To believe otherwise, is -- quite literally, given the time Marx +wrote Capital and the Manifesto -- romantic nonsense. + +Cheers, +RAH + +-----BEGIN PGP SIGNATURE----- +Version: PGP 7.5 + +iQA/AwUBPY511cPxH8jf3ohaEQLAsgCfZhsQMSvUy6GqJ5wgL52DwZKpIhMAnRuR +YYboc+IcylP5TlKL58jpwEfu +=z877 +-----END PGP SIGNATURE----- + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00713.7b4a3ad6c8b6bbcf358ee5ee23dcdc12 b/Ch3/datasets/spam/easy_ham/00713.7b4a3ad6c8b6bbcf358ee5ee23dcdc12 new file mode 100644 index 000000000..423f03fd2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00713.7b4a3ad6c8b6bbcf358ee5ee23dcdc12 @@ -0,0 +1,231 @@ +From fork-admin@xent.com Mon Sep 23 12:09:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0C92116F03 + for ; Mon, 23 Sep 2002 12:09:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 12:09:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8N58vC01842 for ; + Mon, 23 Sep 2002 06:08:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E345F2940A6; Sun, 22 Sep 2002 22:05:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 22A5029409A for ; + Sun, 22 Sep 2002 22:04:18 -0700 (PDT) +Received: (qmail 8494 invoked from network); 23 Sep 2002 05:07:58 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 23 Sep 2002 05:07:58 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 4C8501C4E2; + Mon, 23 Sep 2002 01:07:53 -0400 (EDT) +To: fork +Subject: Goodbye Global Warming +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 23 Sep 2002 01:07:53 -0400 + + +... and say hello to the cool: Oooo ... /this/ is going to cause +some stir ... + +http://www.atmos.uah.edu./essl/msu/background.html received via +http://ontario.indymedia.org:8081/front.php3?article_id=12280 + +Using satellites to monitor global climate change + +Earth System Science Laboratory + +The University of Alabama in Huntsville + + +For Additional Information: + + + +Dr. John Christy, Associate Professor of Atmospheric Science + +Earth System Science Laboratory, The University of Alabama in Huntsville + +Phone: (205) 922-5763 E-mail: christy@atmos.uah.edu + + +Dr. Roy Spencer, Space Scientist + +Global Hydrology & Climate Center, NASA/Marshall Space Flight Center + +Phone: (205) 922-5960 E-mail: roy.spencer@msfc.nasa.gov + + +SUMMARY + +As part of an ongoing NASA/UAH joint project, Dr. John Christy of UAH and Dr. Roy Spencer of NASA's Marshall Space Flight Center use data gathered by microwave sounding units (MSUs) on National Oceanic and Atmospheric Administration TIROS-N satellites to get accurate, direct measurements of atmospheric temperatures for almost all regions of the Earth, including remote deserts, rain forests and oceans for which reliable temperature data are not otherwise available. + +The accuracy and reliability of temperature data gathered by the satellites since January 1979 has been confirmed by comparing the satellite data to independent temperature data. A recent study (1) found a 97 percent agreement between the MSU data and temperatures measured by thermometers suspended beneath weather balloons released by meteorologists for weather observations. + +Once the monthly temperature data is collected from the satellites and processed, it is placed in a "public" computer file for immediate access by atmospheric scientists in the U.S. and abroad. It has become the basis for a number of major studies in global climate change, and is cited in reports from the Intergovernmental Panel on Climate Change. + + + +GATHERING THE DATA + +While traditional thermometers measure the temperature at a specific point in the air, a microwave sounding unit on a satellite takes readings that are average temperatures in a huge volume of the atmosphere. Each of the more than 30,000 readings per day per satellite is an average temperature for more than 75,000 cubic kilometers of air. + +The MSU makes a direct measurement of the temperature by looking at microwaves emitted by oxygen molecules in the atmosphere. The intensity of the microwave emissions - their "brightness" - varies according to temperature. + +Christy and Spencer developed a method to take the data from several satellites and produce a unified temperature dataset. + + + +VERIFYING THE ACCURACY OF MSU MEASUREMENTS + +A recent comparison (1) of temperature readings from two major climate monitoring systems - microwave sounding units on satellites and thermometers suspended below helium balloons - found a "remarkable" level of agreement between the two. + +To verify the accuracy of temperature data collected by microwave sounding units, Christy compared temperature readings recorded by "radiosonde" thermometers to temperatures reported by the satellites as they orbited over the balloon launch sites. + +He found a 97 percent correlation over the 16-year period of the study. The overall composite temperature trends at those sites agreed to within 0.03 degrees Celsius (about 0.054° Fahrenheit) per decade. The same results were found when considering only stations in the polar or arctic regions. + +"The idea was to determine the reliability of the satellite data by comparing it to an established independent measurement," Christy said. "If satellite data are reliable when the satellites are over the radiosonde sites, that means you should be able to trust them everywhere else." + +The 99 radiosondes reported an aggregate warming trend of 0.155 degrees Celsius (about 0.28° Fahrenheit) per decade since 1979. Over those 99 spots on the globe, the satellites also recorded a warming trend: 0.128 degrees Celsius (about 0.23° Fahrenheit) per decade. + +Globally, however, the satellite data show a cooling trend of 0.03 degrees Celsius per decade since the first NOAA TIROS-N satellites went into service. + +"These 99 radiosonde launch sites are just not distributed evenly around the planet," Christy said. "They are not representative of the total globe." + +Radiosonde balloons are released from stations around the world, usually at noon and midnight Greenwich standard time. As each balloon climbs from the surface to the stratosphere, the temperature is measured and relayed to the ground by radio. + +While there are more than 1,000 radiosonde launch sites globally, the data from many sites either are not readily available or are not consistently collected. Christy used data from 99 sites at which there has been long-term systematic and reliable data collection. These 99 radiosonde launch sites are in a box bounded by Iceland, Trinidad, Truk Island and Alaska. + +In an earlier study, an upper air temperature record compiled by NOAA from 63 daily weather balloon sites around the world indicated a 17-year climate trend of -0.05° C per decade, which was in exact agreement with the satellite data at that time, Christy said. + + + +GLOBAL COVERAGE + +One advantage of the MSU dataset is its global coverage. Microwave sounding units aboard NOAA satellites directly measure the temperature of the atmosphere over more than 95 percent of the globe. Each satellite measures the temperature above most points on Earth every 12 hours. + +The 'global temperature' that has been frequently reported from surface measurements is neither global in extent nor systematic in measurement method. It neglects vast oceanic and continental regions, including Antarctica, the Brazilian rain forests, the Sahara Desert and Greenland. + +The most commonly cited historical temperature dataset is from ground-based thermometers. More than 5,000 thermometers worldwide provide almost instantaneous local temperature data through links to weather services and scientists. + +Most of these thermometers, which are usually in small shelters about five feet above the ground, are in areas easily accessible to people. In the U.S. and other industrial countries, these thermometers are most often found at airports. + +The ground-based network is extensive in North America, Europe, Russia, China and Japan. It is less comprehensive in Africa, South America, Australia and across much of Southern Asia. + +Temperatures on the surface and vertically through the atmosphere are gathered daily by thermometers carried aloft by helium balloons. "Radiosonde" balloons are released from stations around the world, usually at noon and midnight Greenwich standard time. + +While balloon release sites are scattered throughout the world, they are concentrated in industrial nations. There are more than 1,000 radiosonde launch sites globally. If they were evenly distributed around the world, that would equal approximately one for every 195,000 square miles of the Earth's surface. + +Water temperatures, which are used to derive estimates of atmospheric temperatures, come from thermometers on piers and buoys, and aboard "ships of opportunity." The ships record the temperature of water drawn in to cool their engines. The water temperature data from these instruments is also not global in its coverage, tending instead to be concentrated in heavily-travelled shipping lanes, and in harbors. + +In the past 12 years, a new system of approximately 100 deep ocean buoys has been established, gathering both atmospheric and water temperature data. + + + +INSTRUMENT ACCURACY; MSU + +With nine satellites measuring the temperature over periods of from one to six years, a method was devised to merge all the data into a single, consistent time series. + +Each satellite has its own bias that, if not calculated and removed, would introduce spurious trends. The biases are calculated by directly comparing each satellite with others in operation at that time. Periods of overlapping operation ranged from three months to three years, and were sufficient to determine these biases. + +Because the MSU instruments are so stable and have so many thousands of observations, the biases between the satellites are known to within 0.01 deg. The final product removes these biases so that all data are referenced to a common base. (2) + +To check the final product, comparisons were made over a 16-year period with balloon measurements as stated above, and the phenomenal agreement provided the independent validation necessary to conclude that the merging technique developed for this dataset was accurate. + + + +INSTRUMENT ACCURACY; GROUND-BASED THERMOMETERS + +Of great concern to scientists is the lack of consistency in the way readings are taken and in the thermometer surroundings. Since most thermometers for which long-term records exist are in towns and cities, the effects of population growth and the construction of nearby roads, parking lots, runways and buildings may cause the temperature to rise a little due of urbanization. This temperature change may be an artifact of a local "asphalt effect" rather than a long-term widespread climate change. + + + +INSTRUMENT ACCURACY; SHIPS OF OPPORTUNITY + +While the temperature data collected by ships at sea is reported as a sea surface temperature, this data reflects water temperatures from about three to 60 feet below the surface - the level from which water is drawn into the ships. + +The thousands of individual thermometers used to collect this data are not calibrated against a scientific standard, nor is there a method for verifying the accuracy of either the thermometers or the reports matching temperature readings to specific times and places. + +Only in places where there are many overlapping observations can there be any confidence in their accuracy. + + + +THE SCIENTISTS + +In 1996, Spencer and Christy received the American Meteorological Society's Special Award. They were honored "for developing a global, precise record of the Earth's temperature from operational polar-orbiting satellites, fundamentally advancing our ability to monitor climate." + +AMS Special Awards are given to individuals or organizations not appropriately recognized by more specifically-defined awards, and who have made important contributions to the science or practice of meteorology or to the society. + +In 1991, Spencer and Christy received NASA's Exceptional Scientific Achievement Medal. + + + +DR. JOHN CHRISTY + +Christy began his scientific career as a senior research associate at UAH in 1987, after earning his B.A. (1973) in mathematics from California State University-Fresno, his M.Div. (1978) from Golden Gate Baptist Theological Seminary, and his M.S. (1984) and Ph.D. (1987) degrees in atmospheric sciences from the University of Illinois. + +He was an instructor of mathematics at Parkland College in Champaign, IL, 1983-87, an instructor of mathematics at the University of South Dakota, 1981-82, and an instructor of mathematical sciences at Yankton (S.D.) College, 1980-81. + +He also served as pastor of the Grace Baptist Church in Vermillion, S.D., 1978-82, and as science master at Baptist High School, Nyeri, Kenya, 1973-75. He has published more than 20 refereed scientific papers. + +Christy serves on the NOAA National Scientific Review Panel for the National Climatic Data Center, and on NOAA's Pathfinder Review Panel. He was an "invited key contributor" to the 1995 Intergovernmental Panel on Climate Change's scientific assessment of climate change, and served as a contributor to the 1992 and 1994 IPCC reports. + + + +DR. ROY SPENCER + +Spencer began his career as a research associate at the Space Science and Engineering Center in Madison, WI, in 1981, after earning his B.S. (1978) in meteorology at the University of Michigan and his M.S. (1979) and Ph.D. (1981) degrees in meteorology from the University of Wisconsin-Madison. He was a Universities Space Research Association visiting scientist at MSFC, 1984-87, before joining the MSFC staff in 1987. + +He is the U.S. team leader for the Multichannel Microwave Imaging Radiometer Team and has served on numerous committees relating to remote sensing. He directs a program involving satellite and aircraft passive microwave data to build global climate data sets and to address climate research issues. Spencer is lead author on sixteen scientific papers. + + + +BIBLIOGRAPHY + +(1) J.R. Christy, 1995, "Climatic Change," Vol. 31, pp. 455-474. + +(2) J.R. Christy, R.W. Spencer and R.T. McNider, 1995, "Journal of Climate," + +Vol. 8, pp. 888-896. + +R.W. Spencer, J.R. Christy and N.C. Grody, 1990, "Journal of Climate," Vol. 3, + +pp. 111-1128. + +R.W. Spencer and J.R. Christy, 1992, "Journal of Climate," Vol. 5, pp. 858- + +SEE ALSO +http://science.nasa.gov/newhome/headlines/essd5feb97_1.htm +http://science.nasa.gov/newhome/headlines/notebook/essd13aug98_1.htm +http://www.ghcc.msfc.nasa.gov/MSU/hl_measuretemp.htm +http://www.atmos.uah.edu/atmos/christy.html + + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00714.16c4d34ab2c9622fe82de9570946f9ef b/Ch3/datasets/spam/easy_ham/00714.16c4d34ab2c9622fe82de9570946f9ef new file mode 100644 index 000000000..854101823 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00714.16c4d34ab2c9622fe82de9570946f9ef @@ -0,0 +1,101 @@ +From fork-admin@xent.com Mon Sep 23 12:09:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8B84816F03 + for ; Mon, 23 Sep 2002 12:09:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 12:09:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8N995C09508 for ; + Mon, 23 Sep 2002 10:09:06 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BB4F12940B0; Mon, 23 Sep 2002 02:05:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id 1F41029409A for ; Mon, 23 Sep 2002 02:04:19 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id 0A6ABC44D; + Mon, 23 Sep 2002 11:06:05 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: Goodbye Global Warming +Cc: ""@argote.ch +Message-Id: <20020923090605.0A6ABC44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 11:06:05 +0200 (CEST) + +Gary Lawrence Murphy wrote: +>and say hello to the cool: Oooo ... /this/ is going to cause some stir ... + +Of course not. Some people just don't want to be confused by the facts. + + +>SUMMARY +> +>As part of an ongoing NASA/UAH joint project, Dr. John Christy of UAH +>and Dr. Roy Spencer of NASA's Marshall Space Flight Center use data +>gathered by microwave sounding units (MSUs) on National Oceanic and +>Atmospheric Administration TIROS-N satellites to get accurate, direct +>measurements of atmospheric temperatures for almost all regions of the +>Earth [...] + +But some plonker will come up with yet another computer model +predicting global warming and storms and floods in 50 years even +though it can't predict next week's weather. And predict widespread +cooling in some parts of the globe (which is now part of global +"warming"). And will get plenty of publicity for even more conclusive +scaremong^H^H^H^H^H^H^H^H^H proof. + + +>[...] +>Globally, however, the satellite data show a cooling trend of 0.03 +>degrees Celsius per decade since the first NOAA TIROS-N satellites +>went into service. + +Umpteen studies have already shown that temperature variations, when +even detectable in the noise, go either way depending on which data +you look at. + + +>Of great concern to scientists is the lack of consistency in the way +>readings are taken [...] the construction of +>nearby roads, parking lots, runways and buildings may cause the +>temperature to rise a little due of urbanization. This temperature +>change may be an artifact of a local "asphalt effect" rather than a +>long-term widespread climate change. + +One study from Vienna showed long-term warming from thermometers at +the airport, and none from other sites. Another study with data from +Antarctica which was touted as supporting global warming while being +free from this urbanization effect later turned out to be dominated by +the time of day at which the airplane that made the measurements flew +(I may have mentioned this one b4...) + + +"There are no facts, only interpretations." +- Friedrich Nietzsche. +"Bullshit!" +- Rob. + + .-. .-. + / \ .-. .-. / \ + / \ / \ .-. _ .-. / \ / \ + / \ / \ / \ / \ / \ / \ / \ + / \ / \ / `-' `-' \ / \ / \ + \ / `-' `-' \ / + `-' `-' + + diff --git a/Ch3/datasets/spam/easy_ham/00715.ca0843463580080429cb2d0192b9ce0a b/Ch3/datasets/spam/easy_ham/00715.ca0843463580080429cb2d0192b9ce0a new file mode 100644 index 000000000..d90fa08ab --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00715.ca0843463580080429cb2d0192b9ce0a @@ -0,0 +1,55 @@ +From fork-admin@xent.com Mon Sep 23 15:00:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7996716F03 + for ; Mon, 23 Sep 2002 15:00:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 15:00:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8ND1vC17317 for ; + Mon, 23 Sep 2002 14:01:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B329429409F; Mon, 23 Sep 2002 05:58:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from imo-r02.mx.aol.com (imo-r02.mx.aol.com [152.163.225.98]) by + xent.com (Postfix) with ESMTP id ACCED29409A for ; + Mon, 23 Sep 2002 05:57:36 -0700 (PDT) +Received: from ThosStew@aol.com by imo-r02.mx.aol.com (mail_out_v34.10.) + id 2.ff.1e413a9d (4328) for ; Mon, 23 Sep 2002 09:00:57 + -0400 (EDT) +From: ThosStew@aol.com +Message-Id: +Subject: Re: Comrade Communism (was Re: Crony Capitalism (was RE: sed + /s/United States/Roman Empire/g)) +Cc: fork@spamassassin.taint.org +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Mailer: AOL 5.0 for Mac sub 45 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 09:00:57 EDT + + +In a message dated 9/22/2002 11:38:01 PM, rah@shipwright.com writes: + +>the *best* way to +>get on the Forbes 400 is + +historically: real estate + +Tom + + diff --git a/Ch3/datasets/spam/easy_ham/00716.c0e0c922db8f605b6475839d8fec9985 b/Ch3/datasets/spam/easy_ham/00716.c0e0c922db8f605b6475839d8fec9985 new file mode 100644 index 000000000..18a9cd4d4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00716.c0e0c922db8f605b6475839d8fec9985 @@ -0,0 +1,144 @@ +From fork-admin@xent.com Mon Sep 23 18:32:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4FEC716F03 + for ; Mon, 23 Sep 2002 18:32:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:32:16 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NFpxC24153 for ; + Mon, 23 Sep 2002 16:51:59 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 277B22940D1; Mon, 23 Sep 2002 08:48:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from blount.mail.mindspring.net (blount.mail.mindspring.net + [207.69.200.226]) by xent.com (Postfix) with ESMTP id E620C29409A for + ; Mon, 23 Sep 2002 08:48:00 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + blount.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17tVUk-0001Cs-00; + Mon, 23 Sep 2002 11:51:34 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: Digital Bearer Settlement List , fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: High-Altitude Rambos +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 10:36:39 -0400 + +http://www.nytimes.com/2002/09/23/opinion/23HERB.html?todaysheadlines=&pagewanted=print&position=top + + The New York Times +September 23, 2002 +High-Altitude Rambos +By BOB HERBERT + +Dr. Bob Rajcoomar, a U.S. citizen and former military physician from Lake +Worth, Fla., found himself handcuffed and taken into custody last month in +one of the many episodes of hysteria to erupt on board airliners in the +U.S. since the Sept. 11 attacks. + +Dr. Rajcoomar was seated in first class on a Delta Airlines flight from +Atlanta to Philadelphia on Aug. 31 when a passenger in the coach section +began behaving erratically. The passenger, Steven Feuer, had nothing to do +with Dr. Rajcoomar. + +Two U.S. air marshals got up from their seats in first class and moved back +to coach to confront Mr. Feuer, who was described by witnesses as a slight +man who seemed disoriented. What ensued was terrifying. When Mr. Feuer +refused to remain in his seat, the marshals reacted as if they were trying +out for the lead roles in Hollywood's latest action extravaganza. + +They handcuffed Mr. Feuer, hustled him into first class and restrained him +in a seat next to Dr. Rajcoomar. The 180 or so passengers were now quite +jittery. Dr. Rajcoomar asked to have his seat changed and a flight +attendant obliged, finding him another seat in first class. The incident, +already scary, could - and should - have ended there. But the marshals were +not ready to let things quiet down. + +One of the marshals pulled a gun and brandished it at the passengers. The +marshals loudly demanded that all passengers remain in their seats, and +remain still. They barked a series of orders. No one should stand for any +reason. Arms and legs should not extend into the aisles. No one should try +to visit the restroom. The message could not have been clearer: anyone who +disobeyed the marshals was in danger of being shot. + +The passengers were petrified, with most believing that there were +terrorists on the plane. + +"I was afraid there was going to be a gun battle in that pressurized +cabin," said Senior Judge James A. Lineberger of the Philadelphia Court of +Common Pleas, a veteran of 20 years in the military, who was sitting in an +aisle seat in coach. "I was afraid that I was going to die from the gunfire +in a shootout." + +Dr. Rajcoomar's wife, Dorothy, who was seated quite a distance from her +husband, said, "It was really like Rambo in the air." She worried that +there might be people on the plane who did not speak English, and therefore +did not understand the marshals' orders. If someone got up to go to the +bathroom, he or she might be shot. + +There were no terrorists on board. There was no threat of any kind. When +the plane landed about half an hour later, Mr. Feuer was taken into +custody. And then, shockingly, so was Dr. Rajcoomar. The air marshals +grabbed the doctor from behind, handcuffed him and, for no good reason that +anyone has been able to give, hauled him to an airport police station where +he was thrown into a filthy cell. + +This was airline security gone berserk. No one ever suggested that Dr. +Rajcoomar, a straight-arrow retired Army major, had done anything wrong. + +Dr. Rajcoomar, who is of Indian descent, said he believes he was taken into +custody solely because of his brown skin. He was held for three frightening +hours and then released without being charged. Mr. Feuer was also released. + +Officials tried to conceal the names of the marshals, but they were +eventually identified by a Philadelphia Inquirer reporter as Shawn B. +McCullers and Samuel Mumma of the Transportation Security Administration, +which is part of the U.S. Transportation Department. + +The Transportation Security Administration has declined to discuss the +incident in detail. A spokesman offered the absurd explanation that Dr. +Rajcoomar was detained because he had watched the unfolding incident "too +closely." + +If that becomes a criterion for arrest in the U.S., a lot of us reporters +are headed for jail. + +Dr. Rajcoomar told me yesterday that he remains shaken by the episode. "I +had never been treated like that in my life," he said. "I was afraid that I +was about to be beaten up or killed." + +Lawyers for the American Civil Liberties Union have taken up his case and +he has filed notice that he may sue the federal government for unlawful +detention. + +"We have to take a look at what we're doing in the name of security," said +Dr. Rajcoomar. "So many men and women have fought and died for freedom in +this great country, and now we are in danger of ruining that in the name of +security." + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00717.041b5d95813b24c07616f52509bb9fd9 b/Ch3/datasets/spam/easy_ham/00717.041b5d95813b24c07616f52509bb9fd9 new file mode 100644 index 000000000..60a39c329 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00717.041b5d95813b24c07616f52509bb9fd9 @@ -0,0 +1,152 @@ +From fork-admin@xent.com Mon Sep 23 18:32:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3245616F03 + for ; Mon, 23 Sep 2002 18:32:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:32:19 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NFvDC24423 for ; + Mon, 23 Sep 2002 16:57:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 792D12940DE; Mon, 23 Sep 2002 08:50:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from blount.mail.mindspring.net (blount.mail.mindspring.net + [207.69.200.226]) by xent.com (Postfix) with ESMTP id 4D48C2940DD for + ; Mon, 23 Sep 2002 08:49:03 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + blount.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17tVVj-0001Cs-00; + Mon, 23 Sep 2002 11:52:35 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: Digital Bearer Settlement List , fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: Rebuild at Ground Zero +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 11:18:55 -0400 + +http://online.wsj.com/article_print/0,,SB10327475102363433,00.html + + +The Wall Street Journal + +September 23, 2002 +COMMENTARY + +Rebuild at Ground Zero + +By LARRY SILVERSTEIN + +Earlier this month, we New Yorkers observed the solemn anniversary of the +horrific events that befell our city on Sept. 11, 2001. All of those who +perished must never be forgotten. The footprints of the fallen Twin Towers +and a portion of the 16-acre site must be dedicated to a memorial and civic +amenities that recall the sacrifices that were made there and the anguish +that those senseless acts of terror created for the victims' families and, +indeed, for all of us. + +But for the good of the city and the region, the 10-million-plus square +feet of commercial and retail space that was destroyed with the Twin Towers +must be replaced on the site. + +About 50,000 people worked in the World Trade Center. Those jobs are lost, +along with those of another 50,000 people who worked in the vicinity. +Together, those jobs in lower Manhattan, for which the Trade Center was the +economic stimulus, produced annual gross wages of about $47 billion, or 15% +of the annual gross wages earned in the entire state. Some of the firms +have relocated elsewhere in the city and region, but many have not. New +York City is facing a budget deficit. Without additional jobs, the deficit +may become permanent. This is one reason for the importance of rebuilding. + +If we do not replace the lost space, lower Manhattan never will regain the +vibrancy it had as the world's financial center. Love them or hate them, +and there were lots of New Yorkers on both sides of the issue, the Towers +made a powerful statement to the world that said, "This is New York, a +symbol of our free economy and of our way of life." That is why they were +destroyed. This is a second reason why the towers must be replaced, and +with buildings that make a potent architectural statement. + +In recent weeks, redevelopment proposals have been circulated from many +sources. Most of these focus not on the Trade Center site, however, but on +all of lower Manhattan. Further, many believe that the 10 million square +feet either could be located elsewhere, scattered in several sites, or +simply never rebuilt. + +These proposals miss the point. What was destroyed, and what must be +recovered, was the Trade Center, not all of lower Manhattan. Except over +the towers' footprints, where there must be no commercial development, the +office and retail space lost has to be rebuilt on or close to where it was. + +Access to mass transit makes the site ideal for office space of this size. +That was a major reason why the Twin Towers were leased to 97% occupancy +before 9/11. None of the other sites proposed for office development has +remotely equal transportation access. With the reconstruction of the subway +and PATH stations, plus an additional $4.5 billion in transit improvements +planned, such as the new Fulton Transit Center and the direct +"Train-to-the-Plane" Long Island Rail Road connection, the site becomes +even more the logical locus of office development. + +And New York will need the space. Before 9/11, the Group of 35, a task +force of civic leaders led by Sen. Charles Schumer and former Treasury +Secretary Robert Rubin, concluded that the city would need an additional 60 +million square feet of new office space by 2020 to accommodate the +anticipated addition of 300,000 new jobs. The loss of the Twin Towers only +heightens the need. + +As for those who say that 10 million square feet of office space downtown +cannot be absorbed by the real estate market, I would simply point out that +history shows them wrong. New York now has about 400 million square feet of +office space. All new construction underway already is substantially leased +up. New York had 48 million square feet of vacant office space at the +beginning of the recession in 1990. By 1998, this space had been absorbed, +at an annual rate of about 6 million square feet. + +We are seeking to rebuild 10 million square feet on the Trade Center site +over a period of about 10 years, with the first buildings not coming on +line until 2008 and the project reaching completion in 2012. This is an +annual absorption rate of about a million feet, much lower than the 1990s' +rate. + +Those who argue that New York cannot reabsorb office space that it +previously had are saying that the city has had its day and is entering an +extended period of stagnation and decline. I will not accept this view, nor +will most New Yorkers. + +Mayor Michael Bloomberg said in a recent interview with the New York Times +that the city "has to do two things: memorialize, but also build for the +future." I believe that the Twin Towers site can gracefully accommodate -- +and that downtown requires -- office and retail space of architectural +significance, a dignified memorial that both witnesses and recalls what +happened, and cultural amenities that would benefit workers as well as +residents of the area. + +The challenge to accomplish this is enormous. But our city is up to the task. + +Mr. Silverstein is president of Silverstein Properties, a real estate firm +whose affiliates hold 99-year leases on the World Trade Center site. + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00718.1fc4cf16dbe6d0395c754671b24782e1 b/Ch3/datasets/spam/easy_ham/00718.1fc4cf16dbe6d0395c754671b24782e1 new file mode 100644 index 000000000..2f12bbd78 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00718.1fc4cf16dbe6d0395c754671b24782e1 @@ -0,0 +1,89 @@ +From fork-admin@xent.com Mon Sep 23 18:32:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D066216F03 + for ; Mon, 23 Sep 2002 18:32:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:32:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NGPwC25284 for ; + Mon, 23 Sep 2002 17:25:59 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1EAB32940E1; Mon, 23 Sep 2002 09:22:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 93C352940D6 for ; Mon, + 23 Sep 2002 09:21:10 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 9061D3EDB8; + Mon, 23 Sep 2002 12:29:28 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 8EF2F3ED75 for ; Mon, + 23 Sep 2002 12:29:28 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Anarchist 'Scavenger Hunt' Raises D.C. Police Ire (fwd) +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 12:29:28 -0400 (EDT) + + +[Destined to be a new reality TV Show?] + + +Anarchist 'Scavenger Hunt' Raises D.C. Police Ire +Sat Sep 21, 3:37 PM ET + +WASHINGTON (Reuters) - An online "anarchist scavenger +hunt" proposed for next week's annual meeting of the +International Monetary Fund ( news - web sites) and +World Bank ( news - web sites) here has raised the ire +of police, who fear demonstrators could damage +property and wreak havoc. + +Break a McDonald's window, get 300 points. Puncture a +Washington D.C. police car tire to win 75 points. +Score 400 points for a pie in the face of a corporate +executive or World Bank delegate. + +D.C. Assistant Police Chief Terrance Gainer told a +congressional hearing on Friday that law authorities +were in talks to decide whether planned protests were, +"so deleterious to security efforts that we ought to +take proactive action." + +Several thousand people are expected to demonstrate +outside the IMF and World Bank headquarters next +weekend. + +The Anti-Capitalist Convergence, a D.C.-based +anarchist group, is also planning a day-long traffic +blockade, banner-drops and protests against major +corporations in the downtown core. + +Chuck, the 37 year-old webmaster of the anarchist site +www.infoshop.org who declined to give his last name, +told Reuters his scavenger hunt was meant as a joke. + +"People were asking for things to do when they come to +D.C. We made the list to get people thinking, so they +don't do the boring, standard stuff," he said. "I +doubt people will actually keep track of what they do +for points." + + + diff --git a/Ch3/datasets/spam/easy_ham/00719.6d73cfb0bea6fe5002fbd3b260d480e6 b/Ch3/datasets/spam/easy_ham/00719.6d73cfb0bea6fe5002fbd3b260d480e6 new file mode 100644 index 000000000..ca6a0dd6f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00719.6d73cfb0bea6fe5002fbd3b260d480e6 @@ -0,0 +1,297 @@ +From fork-admin@xent.com Mon Sep 23 18:32:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C67F216F03 + for ; Mon, 23 Sep 2002 18:32:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:32:25 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NGhxC25817 for ; + Mon, 23 Sep 2002 17:44:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 768F82940E3; Mon, 23 Sep 2002 09:40:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id B57C729409A for + ; Mon, 23 Sep 2002 09:39:42 -0700 (PDT) +Received: from [192.168.123.198] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17tWA9-00072J-00; Mon, 23 Sep 2002 13:34:21 -0300 +Message-Id: <3D8F4288.2000103@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) + Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +Cc: Geege Schuman , + Gary Lawrence Murphy , + "Mr. FoRK" , fork@xent.com, + Digital Bearer Settlement List +Subject: Re: Comrade Communism (was Re: Crony Capitalism (was RE: sed + /s/United States/Roman Empire/g)) +References: + +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 13:34:16 -0300 + +R. A. Hettinga wrote: + +>-----BEGIN PGP SIGNED MESSAGE----- +>Hash: SHA1 +> +>At 11:15 AM -0400 on 9/22/02, Geege Schuman wrote: +> +> +> +> +>>Most of them seem to have Ivy League educations, or are Ivy League +>>dropouts suggesting to me that they weren't exactly poor to start +>>with. +>> +>> +> +>Actually, if I remember correctly from discussion of the list's +>composition in Forbes about five or six years ago, the *best* way to +>get on the Forbes 400 is to have *no* college at all. Can you say +>"Bootstraps", boys and girls? I knew you could... +> +> +Sure - discussion in Forbes - rigorous research, that. Especially when +the data in their own list +contradicts them. I continue to look at the list and all the "inherited, +growed" entries. I guess if +I read it enough times my vision will clear. + +>[Given that an undergraduate liberal arts degree from a state school, +>like, say, mine, :-), is nothing but stuff they should have taught +>you in a government-run "high" school, you'll probably get more of +>*those* on the Forbes 400 as well as time goes on. If we ever get +>around to having a good old fashioned government-collapsing +>transfer-payment depression (an economic version of this summer's +>government-forest conflagration, caused by the same kind of +>innumeracy that not clear-cutting enough forests did out west this +>summer :-)) that should motivate more than a few erst-slackers out +>there, including me, :-), to learn to actually feed themselves.] +> +> +>The *next* category on the Forbes 400 list is someone with a +>"terminal" professional degree, like an MBA, PhD, MD, etc., from the +>best school possible. +> +>Why? Because, as of about 1950, the *best* way to get into Harvard, +>for instance, is to be *smart*, not rich. Don't take my word for it, +>ask their admissions office. Look at the admissions stats over the +>years for proof. +> +> +I, at on point, looked into Stanford Business School. After learning +that tuition was > 20K, +no financial aid was available, and part-time work was disallowed, this +smart person decided +that I was not willing to spend the $150 application fee +(non-refundable). During attendance at +my local business school, I was told repeatedly I should have gone for +it - to quote a prof, (Northwestern MBA), it +has nothing to do with the education you receive - in general European +(and Canadian) business +schools are better and more innovative - its the connections. He used +the words "American nobility." + +>Meritocracy, American Style, was *invented* at the Ivy League after +>World War II. Even Stanford got the hint, :-), and, of course, +>Chicago taught them all how, right? :-). Practically *nobody* who +>goes to a top-20 American institution of higher learning can actually +>afford to go there these days. Unless, of course, their parents, who +>couldn't afford to go there themselves, got terminal degrees in the +>last 40 years or so. And their kids *still* had to get the grades, +>and "biased" (by intelligence :-)), test scores, to get in. +> +> +"invented" being the right word. Dubya went to Yale and HBS. I guess +"practically" gets you +around that problem. + +> +>The bizarre irony is that almost all of those people with "terminal" +>degrees, until they actually *own* something and *hire* people, or +>learn to *make* something for a living all day on a profit and loss +>basis, persist in the practically insane belief, like life after +>death, that economics is some kind of zero sum game, that dumb people +>who don't work hard for it make all the money, and, if someone *is* +>smart, works hard, and is rich, then they stole their wealth somehow. +> +>BTW, none of you guys out there holding the short end of this +>rhetorical stick can blame *me* for the fact that I'm using it to +>beat you severely all over your collective head and shoulders. You +>were, apparently, too dumb to grab the right end. *I* went to +>Missouri, and *I* don't have a degree in anything actually useful, +>much less a "terminal" one, which means *I*'m broker than anyone on +>this list -- it's just that *you*, of all people, lots with +>educations far surpassing my own, should just plain know better. The +>facts speak for themselves, if you just open your eyes and *look*. +>There are no epicycles, the universe does not orbit the earth, and +>economics is not a zero-sum game. The cost of anything, including +>ignorance and destitution, is the forgone alternative, in this case, +>intelligence and effort. +> +>[I will, however, admit to being educated *waay* past my level of +>competence, and, by the way *you* discuss economics, so have you, +>apparently.] +> +> +> +Its interesting but in this part of the World (Nova Scotia) a recent +study found that college graduates +earn less than graduates of 2 year community colleges (trade schools). +They did decline to mention +that the demand for some trades is so great that some of +them are demanding university degrees to get in. Just for the record - +the average salary for +a university graduate (including advanced degree holders) here is C$ +21,000 -- < $14,000 US. No wonder +half of San Francisco has set up here - we have a whole whack of call +centers that +have arrived here in the last couple of years - I think they hire some +entry level IT people for around $10 ($6 US) an +hour, which of course, fits perfectly for me - my entry level job, in +1986, paid $11.00 an hour. The fundamental difference +is that most of the jobs that require a trade are *unionized*.In other +words, in this part of the world, for the vast majority of people, + union dues are a better investment than tuition. The counter-argument +to this is that many college graduates + leave for better work elsewhere, but the counter-counter argument is +that we are the thin edge +(one of several really - prison labor in the US would be another) of +third-world wages and work practices coming + to North America. + +I worked at a company that had a 14-year wage freeze. The fact that they +could maintain that (and prosper) just says + volumes about the economy in this part of the world. I met many people +there, like me, who felt that was fine, I can vote +with my feet. They didn't quite realize that just about every large +employer in the area has similar, or worse, policies. Anyway +eventually they started a union drive. During the vote, retired +employees were brought in by the employer (rumours were +that they were paid the going rate for a vote around here - a bottle of +rum) and somehow allowed to vote . The union filed + a grievance - which was denied - by a Minister of Labour, who, hey, +guess what - used to be a VP at the company. +That's free labor markets at work. The business continues to prosper - +as I was told when I was there - it is a cash cow as long +as the JOA (Joint Operating Agreement) with the competing paper is in +place. + +And if you think that any of those wonderful American companies, out of +some free-enterprise belief in competing for the best talent, +are going to do anything about that, sorry, most of them received +generous subsidies, in return, I'm sure, for an understanding about +the labor markets here. + +> +>BTW, if we ever actually *had* free markets in this country, +>*including* the abolition of redistributive income and death taxes, +>all those smart people in the Forbes 400 would have *more* money, and +>there would be *more* self-made people on that list. In addition, +>most of the people who *inherited* money on the list would have +>*much* less of it, not even relatively speaking. Finally, practically +>all of that "new" money would have come from economic efficiency and +>not "stolen" from someone else, investment bubbles or not. +> +>That efficiency is called "progress", for those of you in The +>People's Republics of Berkeley or Cambridge. It means more and better +>stuff, cheaper, over time -- a terrible, petit-bourgeois concept +>apparently not worthy of teaching by the educational elite, or you'd +>know about it by now. In economic terms, it's also called an increase +>in general welfare, and, no, Virginia, I'm not talking about +>extorting money from someone who works, and giving it to someone who +>doesn't in order to keep them from working and they can think of some +>politician as Santa Claus come election time... +> +> +Much as I like to accept what you say - I do believe in free markets , I +have difficulty finding any - except of course for +labor markets, which governments go to great lengths to protect (well +unless the supply is tight) +It was a great run with the technology industry - producing most of the +self-made billionaires on +the list, but now we've got a government-sponsored monopoly, and the +concept of "more stuff, cheaper" +which it has always promised - seems to be disappearing. A particularly +galling example is +high-speed internet access. An article I read a couple of years ago that +it is an area where the pricing +approaches of the IT industry (cheaper, better or you die) and the +telecom industry (maintain your +monopoly through regulation, and get guaranteed price increases through +the same regulators) meet. +Sadly to say, the telecom industry seems to have won. The whole +entertainment industry/RIAA/Palladium thing +seems to be another instance where actually giving value to the customer +seems less important than using +regulation to reduce competition and substitute products in order to +produce profits for the favored few. + +> +>In short, then, economics is not a zero sum game, property is not +>theft, the rich don't get rich off the backs of the poor, and +>redistributionist labor "theory" of value happy horseshit is just +>that: horseshit, happy or otherwise. +> +>To believe otherwise, is -- quite literally, given the time Marx +>wrote Capital and the Manifesto -- romantic nonsense. +> +> +I usually agree - but when there's a Republican in office - I feel like +they're the biggest believers in +the Manifesto, in reverse. Create a reserve pool of labor, reduce the +rights of that "proletariat" you've +just created with bogus "law and order" policies , concentrate capital +in the hands of a few (ideally people +who can get you reelected) and the economy will take care of itself. Oh, +and lie - use +the word "compassionate" a lot. I guess I tend to believe that a certain +amount of poverty reduction actually +helps a modern capitalist state - the basic economic tenet of the +Republic party seems to be the more homeless under + each overpass, the more efficient the rest of us will be. + +And the facts are, for most people in the Western world are declining +standards of living, declining benefits, disappearing social safety net, +greater working hours, essentially since the entrance of women into the +work force (not blaming women in any way, they have a right + to work but its now 2 wage-earners in each family and still declining +standards of living) is the reality. + +Again to quote that wonderfully liberal document I keep coming back to - +the CIA world factbook - on the US economy: + +"Since 1975, practically all the gains in household income have gone to +the top 20% of households" + +Owen + + + + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00720.60fb431980df487172ca5ba412bbedc4 b/Ch3/datasets/spam/easy_ham/00720.60fb431980df487172ca5ba412bbedc4 new file mode 100644 index 000000000..b4012df5f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00720.60fb431980df487172ca5ba412bbedc4 @@ -0,0 +1,96 @@ +From fork-admin@xent.com Mon Sep 23 18:48:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 792B616F03 + for ; Mon, 23 Sep 2002 18:48:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:48:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NHhuC27760 for ; + Mon, 23 Sep 2002 18:43:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DF03A2940C5; Mon, 23 Sep 2002 10:40:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from dream.darwin.nasa.gov (betlik.darwin.nasa.gov + [198.123.160.11]) by xent.com (Postfix) with ESMTP id CD46B29409A for + ; Mon, 23 Sep 2002 10:39:34 -0700 (PDT) +Received: from cse.ucsc.edu (paperweight.darwin.nasa.gov [198.123.160.27]) + by dream.darwin.nasa.gov ( -- Info omitted by ASANI Solutions, + LLC.) with ESMTP id g8NHh2h19764 for ; Mon, 23 Sep 2002 + 10:43:04 -0700 (PDT) +Message-Id: <3D8F52A5.5090709@cse.ucsc.edu> +From: Elias Sinderson +Reply-To: fork@spamassassin.taint.org +User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:0.9.4.1) + Gecko/20020518 Netscape6/6.2.3 +X-Accept-Language: en-us +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Re: sed /s/United States/Roman Empire/g +References: <979BE8FE-CCF6-11D6-817E-000393A46DEA@alumni.caltech.edu> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 10:43:01 -0700 + +Hmm, if the shoe fits... I think these five attributes could more or +less describe various actions of the US over the past decade or so... + +> In the 1990s we witnessed the emergence of a small number of rogue +> states that, while different in important ways, share a number of +> attributes. These states: +> +> * brutalize their own people and squander their national resources +> for the personal gain of the rulers; + +The first part of this doesn't really fit, except in isolated cases - +certainly not en mass. The second part though... Hmm... + +> * display no regard for international law, threaten their +> neighbors, and callously violate international treaties to which they +> are party; + +Well, think about it. + +> * are determined to acquire weapons of mass destruction, along with +> other advanced military technology, to be used as threats or +> offensively to achieve the aggressive designs of these regimes; + +We already have weapons of mass destruction, but are actively developing +bigger and better ones. + +> * sponsor terrorism around the globe; and + +Heheh... Anyone know about the 'School of the Americas'? What about the +monies, supplies, and training that supported the contra rebels? Oh, I +forgot, their government was "bad" and needed to be overthrown (with out +help). + +> * reject basic human values and hate the United States and +> everything for which it stands. + +Basic human values like the first ammendment? The fourth ammendment? + +Sorry, Shrub, your political newspeak is falling on deaf ears. Oh, +sorry, maybe I should self-censor my thoughts to avoid being put in a +'re-education camp' by Ashcrofts gestappo? Gads, maybe someone on FoRK +has joined your T.I.P.S. program and became an official citizen spy? + + +In disgust, +Elias + + diff --git a/Ch3/datasets/spam/easy_ham/00721.9f0c973b343b808cdf4ab26c9e9b3b50 b/Ch3/datasets/spam/easy_ham/00721.9f0c973b343b808cdf4ab26c9e9b3b50 new file mode 100644 index 000000000..d5e768e79 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00721.9f0c973b343b808cdf4ab26c9e9b3b50 @@ -0,0 +1,90 @@ +From fork-admin@xent.com Mon Sep 23 22:47:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C7FD116F03 + for ; Mon, 23 Sep 2002 22:47:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:47:29 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NICuC29160 for ; + Mon, 23 Sep 2002 19:12:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 85A642940DD; Mon, 23 Sep 2002 11:09:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm0-37.sba1.netlojix.net + [207.71.218.37]) by xent.com (Postfix) with ESMTP id EE45E29409A for + ; Mon, 23 Sep 2002 11:08:35 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id LAA25732; + Mon, 23 Sep 2002 11:18:16 -0700 +Message-Id: <200209231818.LAA25732@maltesecat> +To: fork@spamassassin.taint.org +Subject: Re: [VoID] a new low on the personals tip... +In-Reply-To: Message from fork-request@xent.com of + "Tue, 17 Sep 2002 04:29:01 PDT." + <20020917112901.10408.10485.Mailman@lair.xent.com> +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 11:18:16 -0700 + + + +> * Too much information? + +The saying, as I recall, is along +the lines of "put your best foot +forward". + +(In this case, you seem to have put +everything forward, in a Fosbury +Flop consisting of the best foot, +the worst foot, enough arms for a +diety and his consort, and even a +set of spare limbs from Hoffa or +the space aliens or whatever it is +you keep locked up in the trunk of +the Bonneville) + +> ... replied ... in one go, in a matter of minutes. I *do* +> really think this way, complete with footnotes. So if it's too much +> information, I still stand by my reply: I wouldn't be myself if I +> started off playing games. + +Pascal could write short letters, +when he had the time. Is editing +to provide an "executive summary" +really being untrue to yourself? + +(We are all used to a full-bore +real-time Rohit streaming, but +that's because we are already +"Friends of", and know to set +our buffers accordingly. For a +stranger's sake, it may be best +to provide the "elevator pitch +Rohit" -- and negotiate upwards +only after a session has been +established) + +-Dave + +::::: + +Thomas Jefferson writes: +> I served with General Washington in the legislature of Virginia before +> the revolution and during it with Dr. Franklin in Congress. I never +> heard either of them speak [for as long as] ten minutes at a time ... + + diff --git a/Ch3/datasets/spam/easy_ham/00722.6520838870f11a569a006ac7e119782f b/Ch3/datasets/spam/easy_ham/00722.6520838870f11a569a006ac7e119782f new file mode 100644 index 000000000..0618223f0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00722.6520838870f11a569a006ac7e119782f @@ -0,0 +1,65 @@ +From fork-admin@xent.com Mon Sep 23 22:47:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 972F816F03 + for ; Mon, 23 Sep 2002 22:47:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:47:32 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NIIwC29440 for ; + Mon, 23 Sep 2002 19:18:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A62EE2940E8; Mon, 23 Sep 2002 11:15:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id 0F4D429409A for + ; Mon, 23 Sep 2002 11:14:36 -0700 (PDT) +Received: from [192.168.123.198] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17tXeK-0007Fh-00 for ; Mon, 23 Sep 2002 15:09:36 -0300 +Message-Id: <3D8F58EA.5050307@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) + Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Re: sed /s/United States/Roman Empire/g +References: <979BE8FE-CCF6-11D6-817E-000393A46DEA@alumni.caltech.edu> + <3D8F52A5.5090709@cse.ucsc.edu> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 15:09:46 -0300 + +> +> Sorry, Shrub, your political newspeak is falling on deaf ears. Oh, +> sorry, maybe I should self-censor my thoughts to avoid being put in a +> 're-education camp' by Ashcrofts gestappo? Gads, maybe someone on FoRK +> has joined your T.I.P.S. program and became an official citizen spy? +> +> +> In disgust, +> Elias + + +Well the message was clear to me - the US wants to start an arms race to +jack up their world arms sales monopoly. + +Owen + + + diff --git a/Ch3/datasets/spam/easy_ham/00723.e72e8e80f67f30983c089943e184f5e6 b/Ch3/datasets/spam/easy_ham/00723.e72e8e80f67f30983c089943e184f5e6 new file mode 100644 index 000000000..4595e1321 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00723.e72e8e80f67f30983c089943e184f5e6 @@ -0,0 +1,65 @@ +From fork-admin@xent.com Mon Sep 23 22:47:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 21FAA16F03 + for ; Mon, 23 Sep 2002 22:47:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:47:34 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NJQvC31734 for ; + Mon, 23 Sep 2002 20:26:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id CF9EB2940A9; Mon, 23 Sep 2002 12:23:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx2.ucsc.edu [128.114.129.35]) by + xent.com (Postfix) with ESMTP id BC8F129409A for ; + Mon, 23 Sep 2002 12:22:15 -0700 (PDT) +Received: from Tycho (dhcp-55-196.cse.ucsc.edu [128.114.55.196]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g8NJPgT24139; Mon, + 23 Sep 2002 12:25:43 -0700 (PDT) +From: "Jim Whitehead" +To: "Robert Harley" , +Subject: RE: Goodbye Global Warming +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <20020923090605.0A6ABC44D@argote.ch> +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 12:23:08 -0700 + +> Gary Lawrence Murphy wrote: +> >and say hello to the cool: Oooo ... /this/ is going to cause +> some stir ... +> +> Of course not. Some people just don't want to be confused by the facts. + +For anyone to fully bury global warming, they would need to explain why the +dramatic increase in CO2 concentrations are not increasing the global +temperature. They would also need to explain why, worldwide, glaciers are +melting faster than they have previously in the historical record. That is, +people need more than refutations, they need a compelling alternate +explanation (hint: climate variability doesn't cover all the bases). + +- Jim + + diff --git a/Ch3/datasets/spam/easy_ham/00724.06d186a9890c1bc07b1e0bd89b7efb8f b/Ch3/datasets/spam/easy_ham/00724.06d186a9890c1bc07b1e0bd89b7efb8f new file mode 100644 index 000000000..63f4ba18b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00724.06d186a9890c1bc07b1e0bd89b7efb8f @@ -0,0 +1,75 @@ +From fork-admin@xent.com Mon Sep 23 22:47:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 99ADD16F03 + for ; Mon, 23 Sep 2002 22:47:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:47:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NK5uC00600 for ; + Mon, 23 Sep 2002 21:05:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A7E552940AC; Mon, 23 Sep 2002 13:02:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 8B4CA29409A for ; + Mon, 23 Sep 2002 13:01:09 -0700 (PDT) +Received: (qmail 31937 invoked from network); 23 Sep 2002 20:04:49 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 23 Sep 2002 20:04:49 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 13C2C1B647; + Mon, 23 Sep 2002 16:04:46 -0400 (EDT) +To: "Jim Whitehead" +Cc: "Robert Harley" , +Subject: Re: Goodbye Global Warming +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 23 Sep 2002 16:04:45 -0400 + +>>>>> "J" == Jim Whitehead writes: + + J> For anyone to fully bury global warming, they would need to + J> explain why the dramatic increase in CO2 concentrations are not + J> increasing the global temperature. They would also need to + J> explain why, worldwide, glaciers are melting faster than they + J> have previously in the historical record. + +The associated links cover that: The surface temperature in spots +frequented by people is warmer (hence all our groundbased sensors +reporting global warming) although the overall environmental +temperature is decreasing. + +Apparently, the real news is not that there is no global warming, but +that our models of the warming were seriously flawed by naive +convection models. This too was not news to the theoreticians: All +that has happened is that NASA has confirmed the naiive convection +concerns. + + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00725.5d2dec63252bb5fc57f3de280129656a b/Ch3/datasets/spam/easy_ham/00725.5d2dec63252bb5fc57f3de280129656a new file mode 100644 index 000000000..272dcc4d4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00725.5d2dec63252bb5fc57f3de280129656a @@ -0,0 +1,99 @@ +From fork-admin@xent.com Mon Sep 23 22:47:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 52CEB16F03 + for ; Mon, 23 Sep 2002 22:47:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:47:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NKJ0C01133 for ; + Mon, 23 Sep 2002 21:19:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4598B2940F2; Mon, 23 Sep 2002 13:15:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id 4269B29409A for ; + Mon, 23 Sep 2002 13:14:51 -0700 (PDT) +Received: (qmail 44616 invoked by uid 19621); 23 Sep 2002 20:16:41 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 23 Sep 2002 20:16:41 -0000 +Subject: RE: Goodbye Global Warming +From: James Rogers +To: Jim Whitehead +Cc: fork@spamassassin.taint.org +In-Reply-To: +References: +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1032813374.21921.43.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 23 Sep 2002 13:36:10 -0700 + +"the historical record", by which you mean *human* historical record, is +highly overrated (nigh worthless) when you are talking about geological +timescales, even on topics with as short a timescale as climate. + +My problem with global warming (or cooling for that matter), is that the +supposedly profound recent changes in temperature, both in absolute +terms and as a function time, very arguably fall well below the noise +floor of the natural fluctuations that have occurred over the last +50,000 years both in terms of absolute average temperature and the rate +of temperature change. People unfamiliar with history of global +temperature since the advent of modern humans may think that a degree +here or there over a century is a lot, not realizing that global +temperatures regularly whipsaw with far greater extremity. I therefore +immediately dismiss any theory of global warming that cannot explain why +temperatures whipsawed more severely in pre-history than in the last +couple thousand years (which have been relatively calm by geological +standards). This is a very inconvenient fact for people trying to use +climate to push a particular social agenda. + +It is worth noting that underneath the receding glaciers deposited +during the last major ice age, they are finding substantial evidence of +humans living in what was a nice temperate climate before the glaciers +paved over their civilization. The receding glaciers have turned into a +bit of an archaeological treasure chest, as they expose artifacts buried +in and underneath them as they shrink that have been preserved by the +ice for thousands of years. I don't see any compelling reason to "save +the glaciers" anyway, particularly in light of the fact that their +existence has always been transient. + +For anyone to insist that the current negligible fluctuations are +anthropogenic just heaps one ridiculous assertion upon another. I'll +just stick with Occam's Razor for now. + +In my humble opinion. + +Cheers, + +-James Rogers + jamesr@best.com + + +On Mon, 2002-09-23 at 12:23, Jim Whitehead wrote: +> +> For anyone to fully bury global warming, they would need to explain why the +> dramatic increase in CO2 concentrations are not increasing the global +> temperature. They would also need to explain why, worldwide, glaciers are +> melting faster than they have previously in the historical record. That is, +> people need more than refutations, they need a compelling alternate +> explanation (hint: climate variability doesn't cover all the bases). + + + diff --git a/Ch3/datasets/spam/easy_ham/00726.96933510684f33c2eea5711f969fe444 b/Ch3/datasets/spam/easy_ham/00726.96933510684f33c2eea5711f969fe444 new file mode 100644 index 000000000..8598310d1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00726.96933510684f33c2eea5711f969fe444 @@ -0,0 +1,117 @@ +From fork-admin@xent.com Mon Sep 23 22:47:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2E4A016F03 + for ; Mon, 23 Sep 2002 22:47:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:47:40 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NKivC01922 for ; + Mon, 23 Sep 2002 21:44:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E027B29418F; Mon, 23 Sep 2002 13:41:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 798BE29409A for ; Mon, + 23 Sep 2002 13:40:16 -0700 (PDT) +Received: (qmail 7877 invoked from network); 23 Sep 2002 20:43:55 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 23 Sep 2002 20:43:55 -0000 +Reply-To: +From: "John Hall" +To: "FoRK" +Subject: RE: Goodbye Global Warming +Message-Id: <000201c26341$ef5f75f0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +In-Reply-To: +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 13:43:55 -0700 + + +For anyone to fully bury global warming, they would have to bury the +Greens. A Green once said that if the Spotted Owl hadn't existed they +would have had to invent it. So it is with global warming. Their +fundamental opposition isn't to a warmer earth, it is to industrial +civilization. + +The fact that the sattelites didn't match what the global warming +theorists said should be there is old news. The news here is that the +temperature measures via sattelite have gotten even better and they have +been validated with a different means of measurement. + +Rather than have to defend CO2 concentrations as not causing global +warming, people who believe in CO2 need a good explanation of the +"Medieval Warm Period". Said period was warmer than what we have now, +and it obvioiusly wasn't caused by CO2. + +In point of fact the predicted global warming due to CO2 is not caused +DIRECTLY by CO2. CO2 doesn't trap that much heat. Water vapor does, +and if you can get more water vapor in the air due to CO2 then you have +your warming theory. + +Yet it would seem that the very stability of the earth's climate over +long periods argues not for an unstable system with positive feedback +loops but one where negative feedback loops predominate. + +More water vapor can increase temperatuers, but that also leads to more +clouds. Clouds both trap heat and reflect it, so it depends a great +deal on how the cloud formation shakes out. Most climate models admit +they do clouds very poorly. + +A good link is: +http://www.techcentralstation.be/2051/wrapper.jsp?PID=2051-100&CID=2051- +060302A + + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Jim +> Whitehead +> Sent: Monday, September 23, 2002 12:23 PM +> To: Robert Harley; fork@spamassassin.taint.org +> Subject: RE: Goodbye Global Warming +> +> > Gary Lawrence Murphy wrote: +> > >and say hello to the cool: Oooo ... /this/ is going to cause +> > some stir ... +> > +> > Of course not. Some people just don't want to be confused by the +facts. +> +> For anyone to fully bury global warming, they would need to explain +why +> the +> dramatic increase in CO2 concentrations are not increasing the global +> temperature. They would also need to explain why, worldwide, glaciers +are +> melting faster than they have previously in the historical record. +That +> is, +> people need more than refutations, they need a compelling alternate +> explanation (hint: climate variability doesn't cover all the bases). +> +> - Jim +> + + + diff --git a/Ch3/datasets/spam/easy_ham/00727.ea5bab335cc61c1d3d85a8566232f5e8 b/Ch3/datasets/spam/easy_ham/00727.ea5bab335cc61c1d3d85a8566232f5e8 new file mode 100644 index 000000000..c8aaf9091 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00727.ea5bab335cc61c1d3d85a8566232f5e8 @@ -0,0 +1,69 @@ +From fork-admin@xent.com Mon Sep 23 22:47:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1357016F03 + for ; Mon, 23 Sep 2002 22:47:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:47:42 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NKvxC02420 for ; + Mon, 23 Sep 2002 21:57:59 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0C7F62940B3; Mon, 23 Sep 2002 13:54:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx2.ucsc.edu [128.114.129.35]) by + xent.com (Postfix) with ESMTP id CAD5C29409A for ; + Mon, 23 Sep 2002 13:53:01 -0700 (PDT) +Received: from Tycho (dhcp-55-196.cse.ucsc.edu [128.114.55.196]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g8NKuTT20027 for + ; Mon, 23 Sep 2002 13:56:29 -0700 (PDT) +From: "Jim Whitehead" +To: +Subject: RE: Goodbye Global Warming +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 13:53:56 -0700 + +> J> For anyone to fully bury global warming, they would need to +> J> explain why the dramatic increase in CO2 concentrations are not +> J> increasing the global temperature. + +You have not explained why the increase in CO2 concentrations is not +contributing to increasing global temperature. + +> This too was not news to the theoreticians: All +> that has happened is that NASA has confirmed the naiive convection +> concerns. + +Precisely which theoreticians do you mean? What, exactly, do you mean by a +global warming theoretician -- scientists in this area don't use that term. + +I assure you that not all scientists performing modeling of global +temperature phenomena agree with your assertions. + +- Jim + + diff --git a/Ch3/datasets/spam/easy_ham/00728.b5de363dc254b32b4a44fc37743d9322 b/Ch3/datasets/spam/easy_ham/00728.b5de363dc254b32b4a44fc37743d9322 new file mode 100644 index 000000000..e1d3fdcd8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00728.b5de363dc254b32b4a44fc37743d9322 @@ -0,0 +1,96 @@ +From fork-admin@xent.com Mon Sep 23 22:47:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8FF1516F03 + for ; Mon, 23 Sep 2002 22:47:43 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:47:43 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NL1PC02473 for ; + Mon, 23 Sep 2002 22:01:26 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 034932941C4; Mon, 23 Sep 2002 13:54:16 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx2.ucsc.edu [128.114.129.35]) by + xent.com (Postfix) with ESMTP id BC0F629409A for ; + Mon, 23 Sep 2002 13:53:15 -0700 (PDT) +Received: from Tycho (dhcp-55-196.cse.ucsc.edu [128.114.55.196]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g8NKuUT20028; Mon, + 23 Sep 2002 13:56:31 -0700 (PDT) +From: "Jim Whitehead" +To: "James Rogers" +Cc: +Subject: RE: Goodbye Global Warming +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <1032813374.21921.43.camel@avalon> +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 13:53:56 -0700 + +> "the historical record", by which you mean *human* historical record, is +> highly overrated (nigh worthless) when you are talking about geological +> timescales, even on topics with as short a timescale as climate. + +There has been a significant recent increase in global CO2 concentrations. +The vast preponderance of the new CO2 in the atmosphere is due to human +activity starting around the industrialization of Europe, and accelerating +after WWII. Most scientists studying global climate change believe that +these increased CO2 concentrations are the primary causal agent for +increased global warming. Hence our interest in items of human time scale. + +> It is worth noting that underneath the receding glaciers deposited +> during the last major ice age, they are finding substantial evidence of +> humans living in what was a nice temperate climate before the glaciers +> paved over their civilization. The receding glaciers have turned into a +> bit of an archaeological treasure chest, as they expose artifacts buried +> in and underneath them as they shrink that have been preserved by the +> ice for thousands of years. I don't see any compelling reason to "save +> the glaciers" anyway, particularly in light of the fact that their +> existence has always been transient. + +Most global climate change scientists would agree that temperatures in the +past have often been much warmer than today. The point of global warming +isn't to save the Earth -- the planet is not sentient. The point is to +understand and potentially reduce the impact of increasing temperatures on +global human activity. + +> For anyone to insist that the current negligible fluctuations are +> anthropogenic just heaps one ridiculous assertion upon another. I'll +> just stick with Occam's Razor for now. + +The increase in atmospheric CO2 concentration is due to human activity. + +It is generally accepted that increases in CO2 in a closed environment +subject to solar heating retain more of that solar energy. This is the +current best explanation for the high temperature of Venus. If the CO2 +concentration goes up globally (which it has), then theory states the earth +should be retaining greater solar energy. This process may be slow, and may +be difficult to monitor due to the variability of temperatures worldwide. I +encourage you to refute any part of this causal chain linking CO2 to +eventual increases in global energy content, part of which will be evident +as heat. + +- Jim + + diff --git a/Ch3/datasets/spam/easy_ham/00729.d8f3ba695fd4f3c1ac6361f2e118ae55 b/Ch3/datasets/spam/easy_ham/00729.d8f3ba695fd4f3c1ac6361f2e118ae55 new file mode 100644 index 000000000..8c3660133 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00729.d8f3ba695fd4f3c1ac6361f2e118ae55 @@ -0,0 +1,65 @@ +From fork-admin@xent.com Mon Sep 23 22:47:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6B4D216F03 + for ; Mon, 23 Sep 2002 22:47:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:47:45 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NL61C02599 for ; + Mon, 23 Sep 2002 22:06:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8320A2941C0; Mon, 23 Sep 2002 14:02:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav26.law15.hotmail.com [64.4.22.83]) by + xent.com (Postfix) with ESMTP id 828C829409A for ; + Mon, 23 Sep 2002 14:01:49 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 23 Sep 2002 14:05:29 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: + <1032813374.21921.43.camel@avalon> +Subject: Re: Goodbye Global Warming +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 23 Sep 2002 21:05:29.0490 (UTC) FILETIME=[F25CF720:01C26344] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 14:10:17 -0700 + + +----- Original Message ----- +From: "James Rogers" + +> +> It is worth noting that underneath the receding glaciers deposited +> during the last major ice age, they are finding substantial evidence of +> humans living in what was a nice temperate climate before the glaciers +> paved over their civilization. The receding glaciers have turned into a +> bit of an archaeological treasure chest, as they expose artifacts buried +> in and underneath them as they shrink that have been preserved by the +> ice for thousands of years. + +Got bits? + + diff --git a/Ch3/datasets/spam/easy_ham/00730.b2c9b979063d66d1a14f8d834a1c6dfa b/Ch3/datasets/spam/easy_ham/00730.b2c9b979063d66d1a14f8d834a1c6dfa new file mode 100644 index 000000000..08ed8cc6f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00730.b2c9b979063d66d1a14f8d834a1c6dfa @@ -0,0 +1,57 @@ +From fork-admin@xent.com Mon Sep 23 22:47:47 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 94DE216F03 + for ; Mon, 23 Sep 2002 22:47:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:47:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NLCXC02944 for ; + Mon, 23 Sep 2002 22:12:33 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id ABD012941CB; Mon, 23 Sep 2002 14:04:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav39.law15.hotmail.com [64.4.22.96]) by + xent.com (Postfix) with ESMTP id C6DDB2941C8 for ; + Mon, 23 Sep 2002 14:03:21 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 23 Sep 2002 14:07:00 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: "FoRK" +References: <000201c26341$ef5f75f0$0200a8c0@JMHALL> +Subject: Re: Goodbye Global Warming +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 23 Sep 2002 21:07:00.0775 (UTC) FILETIME=[28C5F370:01C26345] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 14:11:49 -0700 + + +----- Original Message ----- +From: "John Hall" + +> A Green once said that if the Spotted Owl hadn't existed they +> would have had to invent it. +A Republican once said "I am not a crook". + + diff --git a/Ch3/datasets/spam/easy_ham/00731.23dbba60cc6ea56f735599461109200d b/Ch3/datasets/spam/easy_ham/00731.23dbba60cc6ea56f735599461109200d new file mode 100644 index 000000000..2610d284b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00731.23dbba60cc6ea56f735599461109200d @@ -0,0 +1,56 @@ +From fork-admin@xent.com Mon Sep 23 22:47:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E5E5516F16 + for ; Mon, 23 Sep 2002 22:47:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:47:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NLIxC03143 for ; + Mon, 23 Sep 2002 22:18:59 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 87A4D2941C8; Mon, 23 Sep 2002 14:15:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id EBE7B29409A for ; Mon, + 23 Sep 2002 14:14:04 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 40D7A3ED6A; + Mon, 23 Sep 2002 17:22:24 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 3F55B3ED5A; Mon, 23 Sep 2002 17:22:24 -0400 (EDT) +From: Tom +To: "Mr. FoRK" +Cc: FoRK +Subject: Re: Goodbye Global Warming +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 17:22:24 -0400 (EDT) + + +--]> A Green once said that if the Spotted Owl hadn't existed they +--]> would have had to invent it. +--]A Republican once said "I am not a crook". +--] + +Oh great, another round of Lableisms....Let me know when you get back to +real data.. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00732.3ed34429d759468e94c14ca1e2bb231c b/Ch3/datasets/spam/easy_ham/00732.3ed34429d759468e94c14ca1e2bb231c new file mode 100644 index 000000000..74730841c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00732.3ed34429d759468e94c14ca1e2bb231c @@ -0,0 +1,69 @@ +From fork-admin@xent.com Mon Sep 23 22:48:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D6C0916F03 + for ; Mon, 23 Sep 2002 22:48:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:48:10 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NLNuC03200 for ; + Mon, 23 Sep 2002 22:23:56 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 218502941CD; Mon, 23 Sep 2002 14:20:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 70E842941CE for ; Mon, + 23 Sep 2002 14:19:43 -0700 (PDT) +Received: (qmail 11109 invoked from network); 23 Sep 2002 21:23:23 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 23 Sep 2002 21:23:23 -0000 +Reply-To: +From: "John Hall" +To: "FoRK" +Subject: RE: Goodbye Global Warming +Message-Id: <000c01c26347$730dd770$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +In-Reply-To: +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 14:23:24 -0700 + +"I did not have sex with that woman." + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Mr. +> FoRK +> Sent: Monday, September 23, 2002 2:12 PM +> To: FoRK +> Subject: Re: Goodbye Global Warming +> +> +> ----- Original Message ----- +> From: "John Hall" +> +> > A Green once said that if the Spotted Owl hadn't existed they +> > would have had to invent it. +> A Republican once said "I am not a crook". + + + diff --git a/Ch3/datasets/spam/easy_ham/00733.8cd99b24ae020e6028d85ad0c4f06186 b/Ch3/datasets/spam/easy_ham/00733.8cd99b24ae020e6028d85ad0c4f06186 new file mode 100644 index 000000000..70efd0487 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00733.8cd99b24ae020e6028d85ad0c4f06186 @@ -0,0 +1,168 @@ +From fork-admin@xent.com Mon Sep 23 22:48:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 30C7916F03 + for ; Mon, 23 Sep 2002 22:48:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:48:13 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NLVwC03435 for ; + Mon, 23 Sep 2002 22:31:59 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4FE892941D1; Mon, 23 Sep 2002 14:28:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id E170D2941D0 for ; + Mon, 23 Sep 2002 14:27:18 -0700 (PDT) +Received: (qmail 60573 invoked by uid 19621); 23 Sep 2002 21:29:07 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 23 Sep 2002 21:29:07 -0000 +Subject: Re: Goodbye Global Warming +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: +References: + <1032813374.21921.43.camel@avalon> + +Content-Type: text/plain; charset=windows-1251 +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1032817721.21925.54.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 23 Sep 2002 14:48:41 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8NLVwC03435 + +I've seen articles on this type of stuff passing through various forums +for several years. I've always found archaeology interesting for no +particular reason. Here is a recent article from U.S. News that I +actually still have in the dank recesses of my virtual repository. + +-James Rogers + jamesr@best.com + + +-------------------------------------------- +http://www.usnews.com/usnews/issue/020916/misc/16meltdown.htm + +Defrosting the past + +Ancient human and animal remains are melting out of glaciers, a bounty +of a warming world + +BY ALEX MARKELS + +As he hiked near Colorado's Continental Divide in the summer of 2001, Ed +Knapp noticed a strange shape jutting from a melting ice field at 13,000 +feet. "It looked like a bison skull," the building contractor and +amateur archaeologist recalls. "I thought, 'That's strange. Bison don't +live this high up.' " + +Knapp brought the skull to the Denver Museum of Nature and Science, +where scientists last month announced that it was indeed from a +bison–one that died about 340 years ago. "This was an extraordinary +discovery," says Russ Graham, the museum's chief curator, adding that it +could alter notions of the mountain environment centuries ago. "There's +probably a lot more like it yet to be found." + +And not just bison. Colorado isn't the only place where glaciers and +snowfields are melting. Decades of unusual warmth in regions from Peru +to Alaska–a trend some think is linked to emissions from cars and +industry–have shrunk or thawed many of the world's 70,000 glaciers. As +the ice recedes, a treasure-trove of human and animal artifacts is +emerging, extraordinarily well preserved after centuries in the deep +freeze. The fabrics, wood, bone, and DNA-rich tissue found on the mucky +fringes of the ice are revising scientists' understanding of our +predecessors' health, habits, and technology, and the prey they pursued. + +"It's mind-boggling how many different fields are being advanced through +studying these remains," says Johan Reinhard, a high-altitude +archaeologist and explorer-in-residence at the National Geographic +Society. Rare, spectacular finds like the frozen mummies he discovered +in the Andes of Peru in the 1990s and the legendary 5,300-year-old "Ice +Man," found at the edge of a receding glacier in the Alps in 1991, have +offered time capsules of cultural and biological information. Now, as +the ice continues to retreat, it is yielding not just occasional +treasures but long records of humans and animals in the high mountains. + +Vanishing act. The trick is finding such specimens before Mother +Nature–and looters–take them first. Once uncovered, frozen remains can +deteriorate within hours or be gnawed by animals. Moreover, they're +often so well preserved when they emerge that people who come upon them +don't even realize they're ancient. + +That was the case when three men hunting sheep near a high glacier in +British Columbia, Canada, three years ago saw what they thought was a +dead animal. "It looked a little like sealskin buried in the ice," +recalls Warren Ward, a teacher from nearby Nelson. "But when I looked +closer I could see leather fringe from a coat and finger bones." + +Figuring they had found the remains of another hunter, or perhaps a fur +trapper, the men stowed a flint knife and other artifacts in a Zip-Loc +bag and delivered them to local officials. Archaeologists later exhumed +the fallen hunter's body, along with a woven hat, fur clothing, and what +seemed to be a medicine bag. Carbon dating revealed that the hunter +lived about 550 years ago. Dubbed Kwaday Dan Ts'inchi, or Long Ago +Person Found, by people of the Champagne and Aishihik First Nations (who +may be his direct descendants), he is perhaps the best-preserved human +from the period ever found in North America. + +Other findings from melting ice in the neighboring Yukon region could +explain what that long-ago person was doing in the mountains in the +first place. "Before this there was no archaeological record of people +living here," says Greg Hare, a Yukon government archaeologist. "Now we +see that this area was very much part of people's seasonal activities." + +Like Ward's discovery, the search began by chance, when Kristin Benedek +caught a whiff of what smelled like a barnyard as she and her husband, +Gerry Kuzyk, hunted sheep at 6,000 feet in the mountains of the south +Yukon. They followed the scent to a melting patch of ice covered in +caribou dung. "It was really odd, because I knew there hadn't been +caribou in the area for at least 100 years," recalls Kuzyk, then a +wildlife biologist with the Yukon government. + +Caribou cake. Returning a week later, he found "what looked like a +pencil with string wrapped around it." It turned out to be a +4,300-year-old atlatl, or spear thrower. Further investigation of the +ice patch–and scores of others around the region–revealed icy layer +cakes filled with caribou remains and human detritus chronicling 7,800 +years of changing hunting practices. + +Scientists now believe ancient caribou and other animals flocked to the +ice each summer to cool down and escape swarming mosquitoes and flies. +Hunters followed the game. They returned for centuries and discarded +some equipment in the ice. "We've got people hunting with throwing darts +up until 1,200 years ago," says Hare, who now oversees the research +project. "Then we see the first appearance of the bow and arrow about +1,300 years ago. And by 1,200 years ago, there's no more throwing +darts." + +Now scientists are trying to make the search less a matter of luck. They +are developing sophisticated computer models that combine data on where +glaciers are melting fastest and where humans and animals are known to +have migrated to pinpoint the best places to search in Alaska's Wrangell +and St. Elias mountain ranges–the United States' most glaciated +terrain–and in the Andes. Johan Reinhard thinks the fast- thawing +European Alps could also deliver more findings, perhaps as exquisite as +the Ice Man. "Global warming is providing us high-altitude +archaeologists with some fantastic opportunities right now. We're +probably about the only ones happy about it." + + + + diff --git a/Ch3/datasets/spam/easy_ham/00734.e37922bdfd9e3246c18322e4b07a4b23 b/Ch3/datasets/spam/easy_ham/00734.e37922bdfd9e3246c18322e4b07a4b23 new file mode 100644 index 000000000..a5d300d79 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00734.e37922bdfd9e3246c18322e4b07a4b23 @@ -0,0 +1,127 @@ +From fork-admin@xent.com Mon Sep 23 22:48:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1AAAD16F03 + for ; Mon, 23 Sep 2002 22:48:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:48:29 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NLixC03765 for ; + Mon, 23 Sep 2002 22:44:59 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 84DFC2941D4; Mon, 23 Sep 2002 14:41:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from alumnus.caltech.edu (alumnus.caltech.edu [131.215.49.51]) + by xent.com (Postfix) with ESMTP id 75D6B2941D0 for ; + Mon, 23 Sep 2002 14:40:57 -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) by alumnus.caltech.edu + (8.12.3/8.12.3) with ESMTP id g8NLiaSV002734 for ; + Mon, 23 Sep 2002 14:44:36 -0700 (PDT) +MIME-Version: 1.0 (Apple Message framework v482) +Content-Type: text/plain; charset=WINDOWS-1252; format=flowed +Subject: How about subsidizing SSL access to Google? +From: Rohit Khare +To: fork@spamassassin.taint.org +Message-Id: +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 14:44:41 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8NLixC03765 + +[a cheeky letter to the editors of the Economist follows, along with the +article I was commenting on... Rohit] + +In your article about Chinese attempts to censor Google last week ("The +Search Goes On", Sept. 19th), the followup correctly noted that the most +subversive aspect of Google's service is not its card catalog, which +merely points surfers in the right direction, but the entire library. By +maintaining what amounts to a live backup of the entire World Wide Web, +if you can get to Google's cache, you can read anything you'd like. + +The techniques Chinese Internet Service Providers are using to enforce +these rules, however, all depend on the fact that traffic to and from +Google, or indeed almost all public websites, is unencrypted. Almost all +Web browsers, however, include support for Secure Sockets Layer (SSL) +encryption for securing credit card numbers and the like. Upgrading to +SSL makes it effectively impossible for a 'man-in-the-middle' to meddle; +censorship would have to be imposed on each individual computer in +China. The only choice left is to either ban the entire site (range of +IP addresses), but not the kind of selective filtering reported on in +the article. + +Of course, the additional computing power to encrypt all this traffic +costs real money. If the United States is so concerned about the free +flow of information, why shouldn't the Broadcasting Board of Governors +sponsor an encrypted interface to Google, or for that matter, the rest +of the Web? + +To date, public diplomacy efforts have focused on public-sector +programming for the Voice of America, Radio Sawa, and the like. Just +imagine if the US government got into the business of subsidizing secure +access to private-sector media instead. Nothing illustrates the freedom +of the press as much as the wacky excess of the press itself -- and most +of it is already salted away at Google and the Internet Archive project. + +On second thought, I can hardly imagine this Administration *promoting* +the use of encryption to uphold privacy rights. Never mind... + +Best, + Rohit Khare + +=========================================================== + +The search goes on +China backtracks on banning Google—up to a point + +Sep 19th 2002 | BEIJING + From The Economist print edition + +IN CHINESE, the nickname for Google, an American Internet search engine, +is gougou, meaning “doggy”. For the country's fast-growing population of +Internet users (46m, according to an official estimate), it is proving +an elusive creature. Earlier this month, the Chinese authorities blocked +access to Google from Internet service providers in China—apparently +because the search engine helped Chinese users to get access to +forbidden sites. Now, after an outcry from those users, access has been +restored. + +An unusual climbdown by China's zealous Internet censors? Hardly. More +sophisticated controls have now been imposed that make it difficult to +use Google to search for material deemed offensive to the government. +Access is still blocked to the cached versions of web pages taken by +Google as it trawls the Internet. These once provided a handy way for +Chinese users to see material stored on blocked websites. + +After the blocking of Google on August 31st, many Chinese Internet users +posted messages on bulletin boards in China protesting against the move. +Their anger was again aroused last week when some Chinese Internet +providers began rerouting users trying to reach the blocked Google site +to far less powerful search engines in China. + +Duncan Clark, the head of a Beijing-based technology consultancy firm, +BDA (China) Ltd, says China is trying a new tactic in its efforts to +censor the Internet. Until recently, it had focused on blocking +individual sites, including all pages stored on them. Now it seems to be +filtering data transmitted to or from foreign websites to search for key +words that might indicate undesirable content. For example earlier this +week when using Eastnet, a Beijing-based Internet provider, a search on +Google for Falun Gong—a quasi-Buddhist exercise sect outlawed in China— +usually aborted before all the results had time to appear. Such a search +also rendered Google impossible to use for several minutes. + + diff --git a/Ch3/datasets/spam/easy_ham/00735.97b119b8e994bfd0c9a3455b407e52a3 b/Ch3/datasets/spam/easy_ham/00735.97b119b8e994bfd0c9a3455b407e52a3 new file mode 100644 index 000000000..fd7de3fb0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00735.97b119b8e994bfd0c9a3455b407e52a3 @@ -0,0 +1,217 @@ +From fork-admin@xent.com Mon Sep 23 23:01:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2610C16F03 + for ; Mon, 23 Sep 2002 23:01:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 23:01:12 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NLnpC03988 for ; + Mon, 23 Sep 2002 22:49:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 636B02941DA; Mon, 23 Sep 2002 14:42:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from 192.168.1.2 (smtp.piercelaw.edu [216.204.12.219]) by + xent.com (Postfix) with ESMTP id 8C5E72941D8; Mon, 23 Sep 2002 14:41:37 + -0700 (PDT) +Received: from 192.168.30.220 ([192.168.30.220]) by 192.168.1.2; + Mon, 23 Sep 2002 17:45:03 -0400 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <13434889868.20020923174444@magnesium.net> +To: fork-admin@xent.com, "John Hall" +Cc: "FoRK" +Subject: Re[2]: Goodbye Global Warming +In-Reply-To: <000c01c26347$730dd770$0200a8c0@JMHALL> +References: <000c01c26347$730dd770$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 17:44:44 -0400 + + + +How about this: A bored FoRKer said: "YAWN" + +I believe Tom had it right. Signal not noise. + +I'll start: + + + Los Angeles Times September 23, 2002 Monday + Copyright 2002 / Los Angeles Times + Los Angeles Times + +September 23, 2002 Monday Home Edition +SECTION: Main News Main News; Part 1; Page 13; National Desk +LENGTH: 1013 words +BYLINE: DANA CALVO, TIMES STAFF WRITER +DATELINE: SEATTLE + +BODY: + +The idea came at the end of a long, frustrating brown-bag session at a +public-policy think tank here. + +The challenge was to save the city's child-care programs. Staring into +his empty coffee cup, the meeting coordinator's mind landed on an +unlikely solution: Put a tax--just a "benign" dime a shot--on +espresso. + +That led to a petition signed by more than 20,000 Seattle residents, +and next year, voters will decide whether the tax becomes law, one +that taps right into Seattle's legendary addiction to coffee. This is, +after all, the town where Starbucks was born and where the $12 pound +of beans became a staple. There is one Starbucks for every 7,000 +residents in Seattle, compared to one per 64,000 in New York. Seattle +also has two other major coffee chains, Tully's Coffee and Seattle's +Best Coffee, as well as countless cafes and espresso carts. + +A recent poll showed that 74% of Seattle residents would vote for the +tax. "For people outside of Seattle who don't understand the +consumption of espresso, [the tax proposal] can be seen as crazy," +said John Burbank, the think tank's executive director, "but it was +common sense." + +Research by his nonprofit Economic Opportunity Institute showed that +people preferred a tax on liquor or beer over one on espresso. But +because of the large number of lattes and cappuccinos sold, a tax on +espresso could be lower than one levied on alcohol. + +Burbank estimates the tax could generate $7 million to $10 million a +year. City Council aides dispute his figures, saying their research +shows the tax would bring in $1.5 million to $3 million a year. + +Burbank's institute is funded by foundations and labor unions. The +think tank's mission is to promote public policy in the interests of +low-income people, and it has long championed child-care issues. + +Burbank says the tax would restore cuts to the child-care programs +made earlier this year by Gov. Gary Locke. He also says it would +provide more low-income families with subsidies for child care, +improve preschool programs and increase teacher salaries. + +At Bauhaus Books & Coffee, the sidewalk is dotted with tables of +customers for whom coffee is a half-day activity, not just a drink. + +Espresso lovers like Chris Altman, who at a dime a day would spend an +extra $36.50 a year, said the investment is worth it. "I'm OK with +it," said the 35-year-old, stirring his iced latte. "The money's got +to come from somewhere." + +Hope Revuelto, 25, was cooling her regular coffee ($1 because she +brought her own mug) and reading "Zen and the Art of Pottery." She +supports the initiative and said its critics are behaving as would be +expected of espresso drinkers: They want the most expensive thing on +the menu but resist paying 10 cents to help the needy. + +Some say the tax isn't the issue; they just resent being singled out. + +David Marsh, 45, a costume manager, drinks up to three espressos a +day, which means he'd be shelling out an extra $109.50 a year. "I, for +one, don't have kids, but I drink espresso," he said, as he sewed a +leather collar onto a chain-mail tunic. "I don't mind paying, but I +think everyone should pay." + +Coffeehouses are steamed about it, and they've organized as +JOLT--Joined to Oppose the Latte Tax. Among the members are Seattle's +Chamber of Commerce and the city's two largest coffee franchises, +Starbucks and Tully's. + +The tax would force coffeehouses to track sales of any beverage that +contains espresso, a task that could be an administrative nightmare +for smaller cafes, especially during the frantic morning rush. If +espresso counts come under suspicion, coffeehouse owners could face a +city audit. + +University of Chicago economics professor Michael Greenstone said the tax doesn't add up. + +"The purpose of any tax is to be efficient and equitable, and this is +neither," he said. "On the efficiency side, it's surely going to lead +to costly efforts by both businesses and consumers to find ways to +avoid the tax. For example, Starbucks could claim that they are using +finely ground coffee, [instead of coffee run though an espresso maker] +and that consequently, they are exempt from the tax. Would they be +right? I don't know, but finding out will surely take lots of legal +fees that could have gone to child care. + +"Of course, from a public-relations perspective, this is an ingenious +idea, and I mean that in a cynical way. They've pitted espresso +drinkers against child-care supporters, and who's going to side with +the espresso drinkers?" + +In fact, the proposed tax has forced opponents into a political +two-step, where their criticism must remain a beat behind their public +stance of political correctness. In a liberal city like Seattle, +corporations continually advertise their commitment to social +activism, and throughout the debate over the initiative, JOLT members +prefaced their opposition with endorsements of good child care. + +"Starbucks will continue to support early-learning and +childhood-development programs through the millions of dollars we +contribute annually," the company said. "However, Starbucks does not +understand why the Economic Opportunity Institute would recommend an +additional consumer tax on espresso beverages, or any other single +consumer product." + +The City Council has yet to decide when the initiative will go before +voters next year. The initiative's authors say it is directed at +vendors; critics predict it will be passed on to consumers through +higher prices, effectively punishing them for their choice of coffee. +The tax would be applied to any drink with at least half an ounce of +espresso, including decaf. Drip coffee would be exempt. + +Burbank says the tax would reach only a pre-selected group of +consumers who are wealthier than those who drink drip. So, he's been +pitching it as a modern-day Robin Hood tax, where the needy get a dime +every time the affluent spend $3 to $4 on an espresso. + +It's the kind of political marketing that Fran Beulah, 43, finds +funny. "I drink espresso," she said, laughing, "and I am not rich." + + + + +JH> "I did not have sex with that woman." + +>> -----Original Message----- +>> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +JH> Mr. +>> FoRK +>> Sent: Monday, September 23, 2002 2:12 PM +>> To: FoRK +>> Subject: Re: Goodbye Global Warming +>> +>> +>> ----- Original Message ----- +>> From: "John Hall" +>> +>> > A Green once said that if the Spotted Owl hadn't existed they +>> > would have had to invent it. +>> A Republican once said "I am not a crook". + + + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00736.ca47a5a3b86318e4f1ae4d6bcaa7fc80 b/Ch3/datasets/spam/easy_ham/00736.ca47a5a3b86318e4f1ae4d6bcaa7fc80 new file mode 100644 index 000000000..54d426e1c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00736.ca47a5a3b86318e4f1ae4d6bcaa7fc80 @@ -0,0 +1,76 @@ +From fork-admin@xent.com Mon Sep 23 23:01:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8FF8416F16 + for ; Mon, 23 Sep 2002 23:01:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 23:01:15 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NLsCC04080 for ; + Mon, 23 Sep 2002 22:54:12 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 892D82941D0; Mon, 23 Sep 2002 14:50:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav58.law15.hotmail.com [64.4.22.193]) by + xent.com (Postfix) with ESMTP id 50B2C2941D0 for ; + Mon, 23 Sep 2002 14:49:20 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 23 Sep 2002 14:53:00 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: "Tom" +Cc: "FoRK" +References: +Subject: Re: Goodbye Global Warming +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 23 Sep 2002 21:53:00.0497 (UTC) FILETIME=[95B21C10:01C2634B] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 14:57:49 -0700 + +Sorry... I just had a run-in with a neighbor whom I've never met before who +pigeonholed me within one minute after I asked a question - he said 'Are you +one of them environmentalists?' For some reason that narrowminded attitude +of not listening to what I was saying and categorizing me into a box in his +little paranoid republican fantasy world just pissed me off. + +Sheesh... I've been out of work too long... + +----- Original Message ----- +From: "Tom" +To: "Mr. FoRK" +Cc: "FoRK" +Sent: Monday, September 23, 2002 2:22 PM +Subject: Re: Goodbye Global Warming + + +> +> --]> A Green once said that if the Spotted Owl hadn't existed they +> --]> would have had to invent it. +> --]A Republican once said "I am not a crook". +> --] +> +> Oh great, another round of Lableisms....Let me know when you get back to +> real data.. +> + + diff --git a/Ch3/datasets/spam/easy_ham/00737.fe2d8d182d9bc421411c9ca9012f3afc b/Ch3/datasets/spam/easy_ham/00737.fe2d8d182d9bc421411c9ca9012f3afc new file mode 100644 index 000000000..f2394f234 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00737.fe2d8d182d9bc421411c9ca9012f3afc @@ -0,0 +1,71 @@ +From fork-admin@xent.com Mon Sep 23 23:34:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9D98A16F03 + for ; Mon, 23 Sep 2002 23:34:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 23:34:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NMMxC05277 for ; + Mon, 23 Sep 2002 23:22:59 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 500DD2940EF; Mon, 23 Sep 2002 15:19:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id CFD6D29409A for ; Mon, + 23 Sep 2002 15:19:00 -0700 (PDT) +Received: (qmail 15673 invoked from network); 23 Sep 2002 22:22:40 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 23 Sep 2002 22:22:40 -0000 +Reply-To: +From: "John Hall" +To: "FoRK" +Subject: RE: Re[2]: Goodbye Global Warming +Message-Id: <001a01c2634f$bb54d3a0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +In-Reply-To: <13434889868.20020923174444@magnesium.net> +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 15:22:41 -0700 + +> From: bitbitch@magnesium.net [mailto:bitbitch@magnesium.net] + +> +> Burbank says the tax would reach only a pre-selected group of +> consumers who are wealthier than those who drink drip. So, he's been +> pitching it as a modern-day Robin Hood tax, where the needy get a dime +> every time the affluent spend $3 to $4 on an espresso. + +The people who pour the espresso aren't rich. An interesting issue +might be how it affects employment. + +Still, it is a 1% or less sales tax. That might not make that big of a +difference. + +The costs of tracking revenue and collecting the tax might be onerous. +Worse than the cost of the tax itself. + +Me: I hate coffee anyway. But if they put a $.10/can tax on Diet Dr. +Pepper I might have to start buying them in Oregon. (Yes, I drink that +much Diet Dr. Pepper). + + diff --git a/Ch3/datasets/spam/easy_ham/00738.5c6ce770da4cc06ebea777b8be30abaa b/Ch3/datasets/spam/easy_ham/00738.5c6ce770da4cc06ebea777b8be30abaa new file mode 100644 index 000000000..ae03131c5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00738.5c6ce770da4cc06ebea777b8be30abaa @@ -0,0 +1,154 @@ +From fork-admin@xent.com Mon Sep 23 23:34:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1841616F03 + for ; Mon, 23 Sep 2002 23:34:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 23:34:26 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NMSIC05539 for ; + Mon, 23 Sep 2002 23:28:19 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 529EB2941DD; Mon, 23 Sep 2002 15:22:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from alumnus.caltech.edu (alumnus.caltech.edu [131.215.49.51]) + by xent.com (Postfix) with ESMTP id 067E12941DC for ; + Mon, 23 Sep 2002 15:21:02 -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) by alumnus.caltech.edu + (8.12.3/8.12.3) with ESMTP id g8NMOeSV005331; Mon, 23 Sep 2002 15:24:40 + -0700 (PDT) +Subject: SF Weekly's Ultimate SF Date lineup :-) +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Cc: arvind@bea.com +To: Fork@xent.com +From: Rohit Khare +Message-Id: <431A5C36-CF43-11D6-817E-000393A46DEA@alumni.caltech.edu> +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 15:24:44 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8NMSIC05539 + +I love the absurd sense of humor it takes to build up such an elaborate +evening only to note that "even if the date's a bust you can always have +a hundred people up for cocktails" in your penthouse suite at the end of +the night :-) + +Personally, I'd put one point in favor of the Redwood Room over Lapis: +on a weeknight, you can still whip out a TiBook and write, since it's a +hotel bar. And it seems to give people all sorts of license to +interrogate you as to why you're writing with a double of scotch :-) + +Best, + Rohit + +> Five Best Ways to Impress Your Date +> +> You've met the biped of your dreams at the corner laundromat and, +> wonder of wonders, she's agreed to go out with you this Saturday. Don't +> blow it! Follow the instructions below and even if you impress your +> date so much you never see her again, your evening will be a memorable +> one. All you need are a chauffeur, a change of clothes, and several +> hundred thousand dollars. +> +> Luxury Suite at Pacific Bell Park +> +> Third and King streets, 972-2000, www.sfgiants.com +> +> Kick off your date with an afternoon at the ballpark -- not just any +> ballpark, but just about the best ballpark in the country, and not in +> some drafty, behind-the-plate box seat but in one of the park's lushly +> accessorized luxury suites. An elevator whisks you from a private +> entrance on Willie Mays Plaza to your dwelling place above the infield. +> Besides the excellent views of the bay, the park, and the Giants in +> action, there's a balcony, a wet bar, a refrigerator, two televisions, +> a stereo/CD player, a dual-line phone, Internet access, room service, +> and a concierge to call you a cab or make your restaurant reservations +> for you. No one is admitted without proper clearance, ensuring your +> utmost privacy. Next: Pull yourself together for ... +> +> Cocktails at Lapis +> +> Pier 33 (Embarcadero at Bay), 982-0203, +> +> www.lapis-sf.com +> +> Now that the Redwood Room has devolved into just another velvet-rope +> yuppie hangout, the city has no clear-cut, top-of-the-line cocktail +> lounge such as Chicago's Pump Room or New York's King Cole Bar +> (although Maxfield's, the Compass Rose, and the Top of the Mark are +> excellent runners-up). Best of all is Lapis, where the wannabe Noel +> Coward can sip an estimable Gibson in the lounge adjoining the dining +> room. The dramatically backlit bar is framed by lush bronze draperies +> that complement the room's deep-blue setting, and towering ceilings +> give the lounge a graceful, airy ambience. Floor-to-ceiling windows +> provide a lush panorama of the bay and the hills beyond. +> +> +> Dinner at the Dining Room +> +> Ritz-Carlton Hotel, 600 Stockton (between Pine and +> +> California), 296-7465, www.ritzcarlton.com +> +> Your next stop on the road to beguilement is one of the handsomest +> dining rooms in the country. The tranquil sounds of a harp underscore a +> sumptuous setting of polished mahogany, soft linens, and fine crystal +> gleaming in the candlelight. Chef Sylvain Portay prepares luxurious +> nouvelle cuisine in several courses: lobster salad with caviar cream; +> turbot with crayfish and truffles; roasted squab with port-marinated +> figs; saffron-poached pear with guanaja chocolate gratin. Sommelier +> Stéphane Lacroix maintains a fabulous cellar, the service is impeccable +> and inviting, and intimate discourse is practically inevitable. Next: +> +> Charter the Rendezvous From Rendezvous Charters +> +> Pier 40 (in South Beach Harbor), 543-7333, +> +> www.baysail.com +> +> Nothing's more enticing than an evening cruise around San Francisco +> Bay, and the islands, bridges, and lights of the city are especially +> entrancing viewed from this vintage brigantine schooner. Built in 1933 +> and recently restored to its former glory, the 78-foot Rendezvous looks +> like a clipper ship out of the Gold Rush era, with its 80-foot masts +> and square-rigged sails. Intricately carved mahogany, pecan, ash, and +> rosewood accent the brass-railed, velvet-cushioned rooms below decks, +> the perfect spot for a sip of Veuve Cliquot and some subtle canoodling. +> +> Penthouse Suite at the Fairmont Hotel +> +> 950 Mason (between California and Sacramento), +> +> 772-5000, www.fairmont.com +> +> Last but not least, escort your companion to what has been described as +> the most expensive hotel accommodation in the world: the Fairmont's +> elaborate penthouse. The eight-room suite (including three bedrooms, +> three baths, a dining room, a library, a billiard room, a fully +> equipped kitchen, and a living room with fireplace and baby grand +> piano) comes with its own maid, butler, and limousine and is accessed +> by private elevator. The library alone is worth investigating: two +> circular floors of books encapsulated by a domed ceiling etched with +> the constellations. The view from the terrace is enthralling, and even +> if the date's a bust you can always have a hundred people up for +> cocktails. +> +> sfweekly.com | originally published: May 15, 2002 + + diff --git a/Ch3/datasets/spam/easy_ham/00739.9034df113ffe0cff225c698efcea7426 b/Ch3/datasets/spam/easy_ham/00739.9034df113ffe0cff225c698efcea7426 new file mode 100644 index 000000000..20609d0a8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00739.9034df113ffe0cff225c698efcea7426 @@ -0,0 +1,53 @@ +From fork-admin@xent.com Mon Sep 23 23:45:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7795716F03 + for ; Mon, 23 Sep 2002 23:45:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 23:45:34 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NMfvC06032 for ; + Mon, 23 Sep 2002 23:41:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8BC202941D8; Mon, 23 Sep 2002 15:38:07 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 3EB2329409A for ; Mon, + 23 Sep 2002 15:37:54 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 59BF13ED81; + Mon, 23 Sep 2002 18:46:14 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 4EA673ED60 for ; Mon, + 23 Sep 2002 18:46:14 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Googlenews +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 18:46:14 -0400 (EDT) + + +The further googlization of my screentimes....News...No not just +news...google news. I love the line that tells me how fresh/stale the news +item is....phreaking cewl. + +So far I like the content range. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00740.aef9889d927eccf01a365d72db48882e b/Ch3/datasets/spam/easy_ham/00740.aef9889d927eccf01a365d72db48882e new file mode 100644 index 000000000..07f17a9e9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00740.aef9889d927eccf01a365d72db48882e @@ -0,0 +1,70 @@ +From fork-admin@xent.com Mon Sep 23 23:56:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B52D016F03 + for ; Mon, 23 Sep 2002 23:56:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 23:56:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NMl3C06138 for ; + Mon, 23 Sep 2002 23:47:03 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BB1172941DF; Mon, 23 Sep 2002 15:43:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 030E829409A for ; Mon, + 23 Sep 2002 15:42:57 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 405193ED5A; + Mon, 23 Sep 2002 18:51:17 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 3CB413ECE7 for ; Mon, + 23 Sep 2002 18:51:17 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Here Come Da Feds +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 18:51:16 -0400 (EDT) + +The damn Federalists are at it again, another bumsrush on Oregons states +rights.. + +[Being a 5 year translplant out here I say the best thing to do is bring +back the plans to make the state of Jefferson, then have Oregon, +Washington and Jefferson break away from the union.] + +http://www.cnn.com/2002/LAW/09/23/oregon.assisted.suicide/ + +SAN FRANCISCO, California (CNN) -- The U.S. +Justice Department filed an appeal Monday to +overturn a federal judge's ruling that +upheld Oregon's doctor-assisted suicide law. + +A spokesman for Oregon Attorney General +Hardy Myers said the state views the appeal +as "same story, different day." + +Oregon voters approved doctor-assisted +suicide twice, in ballot initiatives in 1994 +and 1997. But in November, U.S. Attorney +General John Ashcroft warned Oregon doctors +they would be prosecuted under federal law +if they prescribed lethal doses of drugs for +dying patients. + + diff --git a/Ch3/datasets/spam/easy_ham/00741.03396e9c6182ba4f821ba2cd3740d1e4 b/Ch3/datasets/spam/easy_ham/00741.03396e9c6182ba4f821ba2cd3740d1e4 new file mode 100644 index 000000000..469ffce20 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00741.03396e9c6182ba4f821ba2cd3740d1e4 @@ -0,0 +1,75 @@ +From fork-admin@xent.com Mon Sep 23 23:56:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 78CB216F03 + for ; Mon, 23 Sep 2002 23:56:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 23:56:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NMq1C06332 for ; + Mon, 23 Sep 2002 23:52:02 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 040592941EC; Mon, 23 Sep 2002 15:48:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f167.law15.hotmail.com [64.4.23.167]) by + xent.com (Postfix) with ESMTP id 0CEF929409A for ; + Mon, 23 Sep 2002 15:47:49 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 23 Sep 2002 15:51:29 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Mon, 23 Sep 2002 22:51:29 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Re: SF Weekly's Ultimate SF Date lineup :-) +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 23 Sep 2002 22:51:29.0328 (UTC) FILETIME=[C11F3B00:01C26353] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 22:51:29 +0000 + +SF Weekly: +>Nothing's more enticing than an evening cruise around San Francisco Bay, +>and the islands, bridges, and lights of the city are especially entrancing +>viewed from this vintage brigantine schooner. Built in 1933 and recently +>restored to its former glory, the 78-foot Rendezvous looks like a clipper +>ship out of the Gold Rush era, with its 80-foot masts and square-rigged +>sails. + +That sounds like fun. But it sets the wrong precedent. +Here's the better idea. Invite her for an afternoon +cruise under the Golden Gate bridge in your Stonehorse +day sailor. Under way, ask her if she'd like to take +the stick. Back at slip, cook her dinner. Something +simple, but good, maybe a stir fry or a stew, served +in the cockpit, with an inexpensive but potable wine. + +If she runs away after that, 'tis good riddance. If +she wants to try it again, another day, she shows +promise. If she asks you to show her the V berth, you +have a girlfriend. If she notes your brightwork needs +another coat, and asks what you're using on it, +propose on the spot. + +;-) + + +_________________________________________________________________ +MSN Photos is the easiest way to share and print your photos: +http://photos.msn.com/support/worldwide.aspx + + diff --git a/Ch3/datasets/spam/easy_ham/00742.1be305d2baafb0b3699c2750ee546787 b/Ch3/datasets/spam/easy_ham/00742.1be305d2baafb0b3699c2750ee546787 new file mode 100644 index 000000000..1356e8a8f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00742.1be305d2baafb0b3699c2750ee546787 @@ -0,0 +1,71 @@ +From fork-admin@xent.com Tue Sep 24 10:48:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B899416F03 + for ; Tue, 24 Sep 2002 10:48:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:48:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NN10C06961 for ; + Tue, 24 Sep 2002 00:01:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 04BAB2941D9; Mon, 23 Sep 2002 15:57:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 8D22029409A for ; Mon, + 23 Sep 2002 15:56:50 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 7CB693ED5A; + Mon, 23 Sep 2002 19:05:10 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 7B19A3EC9E; Mon, 23 Sep 2002 19:05:10 -0400 (EDT) +From: Tom +To: Russell Turpin +Cc: fork@spamassassin.taint.org +Subject: Re: SF Weekly's Ultimate SF Date lineup :-) +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 19:05:10 -0400 (EDT) + +On Mon, 23 Sep 2002, Russell Turpin wrote: + +--]Here's the better idea. Invite her for an afternoon +--]cruise under the Golden Gate bridge in your Stonehorse +--]day sailor. + + +Good way, heres one that worked for me. + +Work on a database project with that person. After a while hand her the +keyboard to go get some lunch. + +If when you come back she is talking to the person in the next cube about +survivor all the time you were gone...go for the one night boom boom plan + +If when you return she has read thru the help screen to try to figure out +what your working on...go fro the week long dine and do with options for +more IF she finishes the help docs and does some code. + +If when you come back she has done some work on the db's infrastructure, +cleaned up your code and made a few "additions" to make it work +better and figures that since you have done enough work for the day asks +that you bring lunch and your lap top to the big screen projection room +to watch your new DVD of startship troopers..marry her + + + diff --git a/Ch3/datasets/spam/easy_ham/00743.1ee0d64b26edd4ab988d5b848232f554 b/Ch3/datasets/spam/easy_ham/00743.1ee0d64b26edd4ab988d5b848232f554 new file mode 100644 index 000000000..1943fe691 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00743.1ee0d64b26edd4ab988d5b848232f554 @@ -0,0 +1,57 @@ +From fork-admin@xent.com Tue Sep 24 10:48:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 45AD116F03 + for ; Tue, 24 Sep 2002 10:48:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:48:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NNIxC07647 for ; + Tue, 24 Sep 2002 00:18:59 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 963582940DF; Mon, 23 Sep 2002 16:15:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 25E6B29409A for ; Mon, + 23 Sep 2002 16:14:04 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 5EB1E3ED6A; + Mon, 23 Sep 2002 19:22:24 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 5D55A3EC7A for ; Mon, + 23 Sep 2002 19:22:24 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Not just like a virgin...a virgin...birth +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 19:22:24 -0400 (EDT) + + +Rare Virgin Shark Births Reported in Detroit +Voice of America - 5 hours ago +A female shark has become a single mother - in the strictest sense of the +term. Officials at Detroit's Belle Isle Aquarium say a shark there +recently produced three babies in an event they are calling virgin births. + +http://www.cnn.com/2002/US/Midwest/09/23/offbeat.shark.births.ap/ +http://www.miami.com/mld/miamiherald/4124307.htm +http://www.startribune.com/stories/1451/3320433.html + + + + diff --git a/Ch3/datasets/spam/easy_ham/00744.667c8aba4400684b27c339f72ad86968 b/Ch3/datasets/spam/easy_ham/00744.667c8aba4400684b27c339f72ad86968 new file mode 100644 index 000000000..262d68fe7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00744.667c8aba4400684b27c339f72ad86968 @@ -0,0 +1,220 @@ +From fork-admin@xent.com Tue Sep 24 10:48:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E481816F03 + for ; Tue, 24 Sep 2002 10:48:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:48:36 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NNm5C08423 for ; + Tue, 24 Sep 2002 00:48:06 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 559952940F5; Mon, 23 Sep 2002 16:44:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 1A8DB29409A for ; + Mon, 23 Sep 2002 16:43:16 -0700 (PDT) +Received: from [66.157.233.109] (helo=regina) by homer.perfectpresence.com + with smtp (Exim 3.36 #1) id 17tcvH-000093-00; Mon, 23 Sep 2002 19:47:27 + -0400 +From: "Geege Schuman" +To: "R. A. Hettinga" , + "Geege Schuman" , + "Owen Byrne" +Cc: "Gary Lawrence Murphy" , + "Mr. FoRK" , , + "Digital Bearer Settlement List" +Subject: RE: Comrade Communism (was Re: Crony Capitalism (was RE: sed + /s/United States/Roman Empire/g)) +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 19:44:22 -0400 + +First, misattribution. I did not write the blurb below. I made one +statement about VP Cheney only, to wit, that he has a short memory. + +I couldn't agree with you more on this: "in short, then, economics is not a +zero sum game, property is not theft, the rich don't get rich off the backs +of the poor, and redistributionist labor "theory" of value happy horseshit +is just that: horseshit, happy or otherwise," however, I resent being lumped +in a zero-sum-zealot category for suggesting nothing more than that rich and +successful at face value is apropos of nothing and I am beginning to +understand that people who immediately and so fiercely object to my ad +hominem (re Cheney) align themselves weird sylogisms like "if rich then +deservedly" or "if rich then smarter." Given that, I am also beginning to +understand why some people NEED to be rich. + +WRT to meritocracies - all hail, meritocracies! WRT Harvard: over 90% of +2002 graduates were cum laude +. INTERESTING curve. Those eager to be +measured got their wish; those unwashed shy folk who just live it provide +the balast. + +Speaking of Forbes, was reading about Peter Norton just today in an old +issue while waiting for my doctor. Norton attributes his success to LUCK. +Imagine. + +Geege + +-----Original Message----- +From: R. A. Hettinga [mailto:rah@shipwright.com] +Sent: Sunday, September 22, 2002 10:01 PM +To: Geege Schuman; Owen Byrne +Cc: Gary Lawrence Murphy; Mr. FoRK; fork@spamassassin.taint.org; Digital Bearer +Settlement List +Subject: Comrade Communism (was Re: Crony Capitalism (was RE: sed +/s/United States/Roman Empire/g)) + + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +At 11:15 AM -0400 on 9/22/02, Geege Schuman wrote: + + +> Most of them seem to have Ivy League educations, or are Ivy League +> dropouts suggesting to me that they weren't exactly poor to start +> with. + +Actually, if I remember correctly from discussion of the list's +composition in Forbes about five or six years ago, the *best* way to +get on the Forbes 400 is to have *no* college at all. Can you say +"Bootstraps", boys and girls? I knew you could... + +[Given that an undergraduate liberal arts degree from a state school, +like, say, mine, :-), is nothing but stuff they should have taught +you in a government-run "high" school, you'll probably get more of +*those* on the Forbes 400 as well as time goes on. If we ever get +around to having a good old fashioned government-collapsing +transfer-payment depression (an economic version of this summer's +government-forest conflagration, caused by the same kind of +innumeracy that not clear-cutting enough forests did out west this +summer :-)) that should motivate more than a few erst-slackers out +there, including me, :-), to learn to actually feed themselves.] + + +The *next* category on the Forbes 400 list is someone with a +"terminal" professional degree, like an MBA, PhD, MD, etc., from the +best school possible. + +Why? Because, as of about 1950, the *best* way to get into Harvard, +for instance, is to be *smart*, not rich. Don't take my word for it, +ask their admissions office. Look at the admissions stats over the +years for proof. + +Meritocracy, American Style, was *invented* at the Ivy League after +World War II. Even Stanford got the hint, :-), and, of course, +Chicago taught them all how, right? :-). Practically *nobody* who +goes to a top-20 American institution of higher learning can actually +afford to go there these days. Unless, of course, their parents, who +couldn't afford to go there themselves, got terminal degrees in the +last 40 years or so. And their kids *still* had to get the grades, +and "biased" (by intelligence :-)), test scores, to get in. + + +The bizarre irony is that almost all of those people with "terminal" +degrees, until they actually *own* something and *hire* people, or +learn to *make* something for a living all day on a profit and loss +basis, persist in the practically insane belief, like life after +death, that economics is some kind of zero sum game, that dumb people +who don't work hard for it make all the money, and, if someone *is* +smart, works hard, and is rich, then they stole their wealth somehow. + +BTW, none of you guys out there holding the short end of this +rhetorical stick can blame *me* for the fact that I'm using it to +beat you severely all over your collective head and shoulders. You +were, apparently, too dumb to grab the right end. *I* went to +Missouri, and *I* don't have a degree in anything actually useful, +much less a "terminal" one, which means *I*'m broker than anyone on +this list -- it's just that *you*, of all people, lots with +educations far surpassing my own, should just plain know better. The +facts speak for themselves, if you just open your eyes and *look*. +There are no epicycles, the universe does not orbit the earth, and +economics is not a zero-sum game. The cost of anything, including +ignorance and destitution, is the forgone alternative, in this case, +intelligence and effort. + +[I will, however, admit to being educated *waay* past my level of +competence, and, by the way *you* discuss economics, so have you, +apparently.] + + + +BTW, if we ever actually *had* free markets in this country, +*including* the abolition of redistributive income and death taxes, +all those smart people in the Forbes 400 would have *more* money, and +there would be *more* self-made people on that list. In addition, +most of the people who *inherited* money on the list would have +*much* less of it, not even relatively speaking. Finally, practically +all of that "new" money would have come from economic efficiency and +not "stolen" from someone else, investment bubbles or not. + +That efficiency is called "progress", for those of you in The +People's Republics of Berkeley or Cambridge. It means more and better +stuff, cheaper, over time -- a terrible, petit-bourgeois concept +apparently not worthy of teaching by the educational elite, or you'd +know about it by now. In economic terms, it's also called an increase +in general welfare, and, no, Virginia, I'm not talking about +extorting money from someone who works, and giving it to someone who +doesn't in order to keep them from working and they can think of some +politician as Santa Claus come election time... + + +In short, then, economics is not a zero sum game, property is not +theft, the rich don't get rich off the backs of the poor, and +redistributionist labor "theory" of value happy horseshit is just +that: horseshit, happy or otherwise. + +To believe otherwise, is -- quite literally, given the time Marx +wrote Capital and the Manifesto -- romantic nonsense. + +Cheers, +RAH + +-----BEGIN PGP SIGNATURE----- +Version: PGP 7.5 + +iQA/AwUBPY511cPxH8jf3ohaEQLAsgCfZhsQMSvUy6GqJ5wgL52DwZKpIhMAnRuR +YYboc+IcylP5TlKL58jpwEfu +=z877 +-----END PGP SIGNATURE----- + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + + + diff --git a/Ch3/datasets/spam/easy_ham/00745.d2df6fc9d5de220dc9b34cf04addf9e2 b/Ch3/datasets/spam/easy_ham/00745.d2df6fc9d5de220dc9b34cf04addf9e2 new file mode 100644 index 000000000..ea3be17b6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00745.d2df6fc9d5de220dc9b34cf04addf9e2 @@ -0,0 +1,169 @@ +From fork-admin@xent.com Tue Sep 24 10:48:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C982D16F03 + for ; Tue, 24 Sep 2002 10:48:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:48:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8NNu4C08643 for ; + Tue, 24 Sep 2002 00:56:05 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 594552941FE; Mon, 23 Sep 2002 16:52:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from relay.pair.com (relay1.pair.com [209.68.1.20]) by xent.com + (Postfix) with SMTP id 82B5529409A for ; Mon, + 23 Sep 2002 16:51:44 -0700 (PDT) +Received: (qmail 13169 invoked from network); 23 Sep 2002 23:55:23 -0000 +Received: from adsl-66-124-225-82.dsl.snfc21.pacbell.net (HELO golden) + (66.124.225.82) by relay1.pair.com with SMTP; 23 Sep 2002 23:55:23 -0000 +X-Pair-Authenticated: 66.124.225.82 +Message-Id: <0b3901c2635c$ab557240$640a000a@golden> +From: "Gordon Mohr" +To: +References: +Subject: Re: How about subsidizing SSL access to Google? +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 8bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 16:55:17 -0700 + +Good idea! + +This could also be a job for P2P; lots of people would love to +devote their spare cycles, bandwidth, and unblocked IP addresses +to giving the Chinese unfettered net access. + +In a sense, this is what the "peek-a-booty" project does: + + http://www.peek-a-booty.org + +But let's play out the next few moves: + +Good Guys: Google enables SSL access + Bad Guys: Chinese government again blocks all access to Google domains +Good Guys: Set up Google proxies on ever-changing set of hosts (peek-a-booty) + Bad Guys: Ban SSL (or any unlicensed opaque traffic) at the national firewall +Good Guys: Hide Google traffic inside other innocuous-looking activity + Bad Guys: Require nationwide installation of client-side NetNannyish + software +Good Guys: Offer software which disables/spoofs monitoring software + Bad Guys: Imprison and harvest organs from people found using + monitoring-disabling-software + +...and on and on. + +The best we can hope is that technological cleverness, by raising the +costs of oppression or by provoking intolerable oppression, brings +social liberalization sooner rather than later. + +- Gordon + +----- Original Message ----- +From: "Rohit Khare" +To: +Sent: Monday, September 23, 2002 2:44 PM +Subject: How about subsidizing SSL access to Google? + + +[a cheeky letter to the editors of the Economist follows, along with the +article I was commenting on... Rohit] + +In your article about Chinese attempts to censor Google last week ("The +Search Goes On", Sept. 19th), the followup correctly noted that the most +subversive aspect of Google's service is not its card catalog, which +merely points surfers in the right direction, but the entire library. By +maintaining what amounts to a live backup of the entire World Wide Web, +if you can get to Google's cache, you can read anything you'd like. + +The techniques Chinese Internet Service Providers are using to enforce +these rules, however, all depend on the fact that traffic to and from +Google, or indeed almost all public websites, is unencrypted. Almost all +Web browsers, however, include support for Secure Sockets Layer (SSL) +encryption for securing credit card numbers and the like. Upgrading to +SSL makes it effectively impossible for a 'man-in-the-middle' to meddle; +censorship would have to be imposed on each individual computer in +China. The only choice left is to either ban the entire site (range of +IP addresses), but not the kind of selective filtering reported on in +the article. + +Of course, the additional computing power to encrypt all this traffic +costs real money. If the United States is so concerned about the free +flow of information, why shouldn't the Broadcasting Board of Governors +sponsor an encrypted interface to Google, or for that matter, the rest +of the Web? + +To date, public diplomacy efforts have focused on public-sector +programming for the Voice of America, Radio Sawa, and the like. Just +imagine if the US government got into the business of subsidizing secure +access to private-sector media instead. Nothing illustrates the freedom +of the press as much as the wacky excess of the press itself -- and most +of it is already salted away at Google and the Internet Archive project. + +On second thought, I can hardly imagine this Administration *promoting* +the use of encryption to uphold privacy rights. Never mind... + +Best, + Rohit Khare + +=========================================================== + +The search goes on +China backtracks on banning Google—up to a point + +Sep 19th 2002 | BEIJING + From The Economist print edition + +IN CHINESE, the nickname for Google, an American Internet search engine, +is gougou, meaning “doggy”. For the country's fast-growing population of +Internet users (46m, according to an official estimate), it is proving +an elusive creature. Earlier this month, the Chinese authorities blocked +access to Google from Internet service providers in China—apparently +because the search engine helped Chinese users to get access to +forbidden sites. Now, after an outcry from those users, access has been +restored. + +An unusual climbdown by China's zealous Internet censors? Hardly. More +sophisticated controls have now been imposed that make it difficult to +use Google to search for material deemed offensive to the government. +Access is still blocked to the cached versions of web pages taken by +Google as it trawls the Internet. These once provided a handy way for +Chinese users to see material stored on blocked websites. + +After the blocking of Google on August 31st, many Chinese Internet users +posted messages on bulletin boards in China protesting against the move. +Their anger was again aroused last week when some Chinese Internet +providers began rerouting users trying to reach the blocked Google site +to far less powerful search engines in China. + +Duncan Clark, the head of a Beijing-based technology consultancy firm, +BDA (China) Ltd, says China is trying a new tactic in its efforts to +censor the Internet. Until recently, it had focused on blocking +individual sites, including all pages stored on them. Now it seems to be +filtering data transmitted to or from foreign websites to search for key +words that might indicate undesirable content. For example earlier this +week when using Eastnet, a Beijing-based Internet provider, a search on +Google for Falun Gong—a quasi-Buddhist exercise sect outlawed in China— +usually aborted before all the results had time to appear. Such a search +also rendered Google impossible to use for several minutes. + + + diff --git a/Ch3/datasets/spam/easy_ham/00746.0ca47650bbc1a73fcfdb519b04fb635e b/Ch3/datasets/spam/easy_ham/00746.0ca47650bbc1a73fcfdb519b04fb635e new file mode 100644 index 000000000..174da8582 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00746.0ca47650bbc1a73fcfdb519b04fb635e @@ -0,0 +1,267 @@ +From fork-admin@xent.com Tue Sep 24 10:48:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4F72516F03 + for ; Tue, 24 Sep 2002 10:48:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:48:42 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O0TsC13135 for ; + Tue, 24 Sep 2002 01:29:54 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6F07C294206; Mon, 23 Sep 2002 17:26:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 8884929409A for ; Mon, + 23 Sep 2002 17:25:55 -0700 (PDT) +Received: (qmail 24684 invoked from network); 24 Sep 2002 00:29:33 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 24 Sep 2002 00:29:33 -0000 +Reply-To: +From: "John Hall" +To: "FoRK" +Subject: Pluck and Luck +Message-Id: <000701c26361$74e027a0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 17:29:29 -0700 + +Anyone who doesn't appreciate both PLUCK and LUCK is only looking at +part of the equation. + +America has, in fact, moved hard toward Meritocracy. But -- and this is +a huge one -- you don't necessarily find it on the Forbes list. There +is an element of LUCK, even if only being in the right place at the +right time, to go that high. + +Beyond the Forbes List, there are many ways in which almost pure LUCK is +involved in significant wealth. Being a super-model, for example. +Though I think most people would be surprised by a lot of super-models. +Cindy Crawford was valedictorian of her high school. + +Most people, of course, aren't in those stratified realms. It is the +rest of us who tend to sort. + +There is a huge philosophical problem with the concept of Merit in the +first place. Rawls claims Merit doesn't exist. Sowell seems to agree +at least in part, but I'm sure Sowell would also state that the benefits +of pretending it exists for society at large are enormous. + +And if Merit does exist then exactly what is it measuring? IQ? Purity +of heart? Or the ability to satisfy customers? Functionally most +people seem to equate Merit with IQ though they say it would be better +if it were purity of heart. Yet the type of Merit that lands you on the +Forbes list, or even just being a garden variety 'millionaire next door' +is more likely to be the 'serving customers' definition. + +Differences due to merit, when they are perceived as such, generate far +more animosity than differences due to luck. Luck can be forgiven. +Superior performance, often not. + + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Geege +> Schuman +> Sent: Monday, September 23, 2002 4:44 PM +> To: R. A. Hettinga; Geege Schuman; Owen Byrne +> Cc: Gary Lawrence Murphy; Mr. FoRK; fork@spamassassin.taint.org; Digital Bearer +> Settlement List +> Subject: RE: Comrade Communism (was Re: Crony Capitalism (was RE: sed +> /s/United States/Roman Empire/g)) +> +> First, misattribution. I did not write the blurb below. I made one +> statement about VP Cheney only, to wit, that he has a short memory. +> +> I couldn't agree with you more on this: "in short, then, economics is +not +> a +> zero sum game, property is not theft, the rich don't get rich off the +> backs +> of the poor, and redistributionist labor "theory" of value happy +horseshit +> is just that: horseshit, happy or otherwise," however, I resent being +> lumped +> in a zero-sum-zealot category for suggesting nothing more than that +rich +> and +> successful at face value is apropos of nothing and I am beginning to +> understand that people who immediately and so fiercely object to my ad +> hominem (re Cheney) align themselves weird sylogisms like "if rich +then +> deservedly" or "if rich then smarter." Given that, I am also +beginning to +> understand why some people NEED to be rich. +> +> WRT to meritocracies - all hail, meritocracies! WRT Harvard: over 90% +of +> 2002 graduates were cum laude +. INTERESTING curve. Those eager to be +> measured got their wish; those unwashed shy folk who just live it +provide +> the balast. +> +> Speaking of Forbes, was reading about Peter Norton just today in an +old +> issue while waiting for my doctor. Norton attributes his success to +LUCK. +> Imagine. +> +> Geege +> +> -----Original Message----- +> From: R. A. Hettinga [mailto:rah@shipwright.com] +> Sent: Sunday, September 22, 2002 10:01 PM +> To: Geege Schuman; Owen Byrne +> Cc: Gary Lawrence Murphy; Mr. FoRK; fork@spamassassin.taint.org; Digital Bearer +> Settlement List +> Subject: Comrade Communism (was Re: Crony Capitalism (was RE: sed +> /s/United States/Roman Empire/g)) +> +> +> -----BEGIN PGP SIGNED MESSAGE----- +> Hash: SHA1 +> +> At 11:15 AM -0400 on 9/22/02, Geege Schuman wrote: +> +> +> > Most of them seem to have Ivy League educations, or are Ivy League +> > dropouts suggesting to me that they weren't exactly poor to start +> > with. +> +> Actually, if I remember correctly from discussion of the list's +> composition in Forbes about five or six years ago, the *best* way to +> get on the Forbes 400 is to have *no* college at all. Can you say +> "Bootstraps", boys and girls? I knew you could... +> +> [Given that an undergraduate liberal arts degree from a state school, +> like, say, mine, :-), is nothing but stuff they should have taught +> you in a government-run "high" school, you'll probably get more of +> *those* on the Forbes 400 as well as time goes on. If we ever get +> around to having a good old fashioned government-collapsing +> transfer-payment depression (an economic version of this summer's +> government-forest conflagration, caused by the same kind of +> innumeracy that not clear-cutting enough forests did out west this +> summer :-)) that should motivate more than a few erst-slackers out +> there, including me, :-), to learn to actually feed themselves.] +> +> +> The *next* category on the Forbes 400 list is someone with a +> "terminal" professional degree, like an MBA, PhD, MD, etc., from the +> best school possible. +> +> Why? Because, as of about 1950, the *best* way to get into Harvard, +> for instance, is to be *smart*, not rich. Don't take my word for it, +> ask their admissions office. Look at the admissions stats over the +> years for proof. +> +> Meritocracy, American Style, was *invented* at the Ivy League after +> World War II. Even Stanford got the hint, :-), and, of course, +> Chicago taught them all how, right? :-). Practically *nobody* who +> goes to a top-20 American institution of higher learning can actually +> afford to go there these days. Unless, of course, their parents, who +> couldn't afford to go there themselves, got terminal degrees in the +> last 40 years or so. And their kids *still* had to get the grades, +> and "biased" (by intelligence :-)), test scores, to get in. +> +> +> The bizarre irony is that almost all of those people with "terminal" +> degrees, until they actually *own* something and *hire* people, or +> learn to *make* something for a living all day on a profit and loss +> basis, persist in the practically insane belief, like life after +> death, that economics is some kind of zero sum game, that dumb people +> who don't work hard for it make all the money, and, if someone *is* +> smart, works hard, and is rich, then they stole their wealth somehow. +> +> BTW, none of you guys out there holding the short end of this +> rhetorical stick can blame *me* for the fact that I'm using it to +> beat you severely all over your collective head and shoulders. You +> were, apparently, too dumb to grab the right end. *I* went to +> Missouri, and *I* don't have a degree in anything actually useful, +> much less a "terminal" one, which means *I*'m broker than anyone on +> this list -- it's just that *you*, of all people, lots with +> educations far surpassing my own, should just plain know better. The +> facts speak for themselves, if you just open your eyes and *look*. +> There are no epicycles, the universe does not orbit the earth, and +> economics is not a zero-sum game. The cost of anything, including +> ignorance and destitution, is the forgone alternative, in this case, +> intelligence and effort. +> +> [I will, however, admit to being educated *waay* past my level of +> competence, and, by the way *you* discuss economics, so have you, +> apparently.] +> +> +> +> BTW, if we ever actually *had* free markets in this country, +> *including* the abolition of redistributive income and death taxes, +> all those smart people in the Forbes 400 would have *more* money, and +> there would be *more* self-made people on that list. In addition, +> most of the people who *inherited* money on the list would have +> *much* less of it, not even relatively speaking. Finally, practically +> all of that "new" money would have come from economic efficiency and +> not "stolen" from someone else, investment bubbles or not. +> +> That efficiency is called "progress", for those of you in The +> People's Republics of Berkeley or Cambridge. It means more and better +> stuff, cheaper, over time -- a terrible, petit-bourgeois concept +> apparently not worthy of teaching by the educational elite, or you'd +> know about it by now. In economic terms, it's also called an increase +> in general welfare, and, no, Virginia, I'm not talking about +> extorting money from someone who works, and giving it to someone who +> doesn't in order to keep them from working and they can think of some +> politician as Santa Claus come election time... +> +> +> In short, then, economics is not a zero sum game, property is not +> theft, the rich don't get rich off the backs of the poor, and +> redistributionist labor "theory" of value happy horseshit is just +> that: horseshit, happy or otherwise. +> +> To believe otherwise, is -- quite literally, given the time Marx +> wrote Capital and the Manifesto -- romantic nonsense. +> +> Cheers, +> RAH +> +> -----BEGIN PGP SIGNATURE----- +> Version: PGP 7.5 +> +> iQA/AwUBPY511cPxH8jf3ohaEQLAsgCfZhsQMSvUy6GqJ5wgL52DwZKpIhMAnRuR +> YYboc+IcylP5TlKL58jpwEfu +> =z877 +> -----END PGP SIGNATURE----- +> +> -- +> ----------------- +> R. A. Hettinga +> The Internet Bearer Underwriting Corporation +> 44 Farquhar Street, Boston, MA 02131 USA +> "... however it may deserve respect for its usefulness and antiquity, +> [predicting the end of the world] has not been found agreeable to +> experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' +> +> + + + diff --git a/Ch3/datasets/spam/easy_ham/00747.39967f26d6c1cba3713e2b9f318d0531 b/Ch3/datasets/spam/easy_ham/00747.39967f26d6c1cba3713e2b9f318d0531 new file mode 100644 index 000000000..6e23ca687 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00747.39967f26d6c1cba3713e2b9f318d0531 @@ -0,0 +1,175 @@ +From fork-admin@xent.com Tue Sep 24 10:48:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 132EF16F03 + for ; Tue, 24 Sep 2002 10:48:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:48:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O0f5C13558 for ; + Tue, 24 Sep 2002 01:41:06 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 14FAC294221; Mon, 23 Sep 2002 17:29:16 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav44.law15.hotmail.com [64.4.22.16]) by + xent.com (Postfix) with ESMTP id E00F929420F for ; + Mon, 23 Sep 2002 17:28:43 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 23 Sep 2002 17:32:24 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: "James Rogers" , +References: <1032813374.21921.43.camel@avalon> + + <1032817721.21925.54.camel@avalon> +Subject: Re: Goodbye Global Warming +MIME-Version: 1.0 +Content-Type: text/plain; charset="windows-1251" +Content-Transfer-Encoding: 8bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 24 Sep 2002 00:32:24.0433 (UTC) FILETIME=[DA3EEE10:01C26361] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 17:37:12 -0700 + +Thanks for the link - I'm fascinated by archaeology as well. + +----- Original Message ----- +From: "James Rogers" +To: +Sent: Monday, September 23, 2002 2:48 PM +Subject: Re: Goodbye Global Warming + + +I've seen articles on this type of stuff passing through various forums +for several years. I've always found archaeology interesting for no +particular reason. Here is a recent article from U.S. News that I +actually still have in the dank recesses of my virtual repository. + +-James Rogers + jamesr@best.com + + +-------------------------------------------- +http://www.usnews.com/usnews/issue/020916/misc/16meltdown.htm + +Defrosting the past + +Ancient human and animal remains are melting out of glaciers, a bounty +of a warming world + +BY ALEX MARKELS + +As he hiked near Colorado's Continental Divide in the summer of 2001, Ed +Knapp noticed a strange shape jutting from a melting ice field at 13,000 +feet. "It looked like a bison skull," the building contractor and +amateur archaeologist recalls. "I thought, 'That's strange. Bison don't +live this high up.' " + +Knapp brought the skull to the Denver Museum of Nature and Science, +where scientists last month announced that it was indeed from a +bison–one that died about 340 years ago. "This was an extraordinary +discovery," says Russ Graham, the museum's chief curator, adding that it +could alter notions of the mountain environment centuries ago. "There's +probably a lot more like it yet to be found." + +And not just bison. Colorado isn't the only place where glaciers and +snowfields are melting. Decades of unusual warmth in regions from Peru +to Alaska–a trend some think is linked to emissions from cars and +industry–have shrunk or thawed many of the world's 70,000 glaciers. As +the ice recedes, a treasure-trove of human and animal artifacts is +emerging, extraordinarily well preserved after centuries in the deep +freeze. The fabrics, wood, bone, and DNA-rich tissue found on the mucky +fringes of the ice are revising scientists' understanding of our +predecessors' health, habits, and technology, and the prey they pursued. + +"It's mind-boggling how many different fields are being advanced through +studying these remains," says Johan Reinhard, a high-altitude +archaeologist and explorer-in-residence at the National Geographic +Society. Rare, spectacular finds like the frozen mummies he discovered +in the Andes of Peru in the 1990s and the legendary 5,300-year-old "Ice +Man," found at the edge of a receding glacier in the Alps in 1991, have +offered time capsules of cultural and biological information. Now, as +the ice continues to retreat, it is yielding not just occasional +treasures but long records of humans and animals in the high mountains. + +Vanishing act. The trick is finding such specimens before Mother +Nature–and looters–take them first. Once uncovered, frozen remains can +deteriorate within hours or be gnawed by animals. Moreover, they're +often so well preserved when they emerge that people who come upon them +don't even realize they're ancient. + +That was the case when three men hunting sheep near a high glacier in +British Columbia, Canada, three years ago saw what they thought was a +dead animal. "It looked a little like sealskin buried in the ice," +recalls Warren Ward, a teacher from nearby Nelson. "But when I looked +closer I could see leather fringe from a coat and finger bones." + +Figuring they had found the remains of another hunter, or perhaps a fur +trapper, the men stowed a flint knife and other artifacts in a Zip-Loc +bag and delivered them to local officials. Archaeologists later exhumed +the fallen hunter's body, along with a woven hat, fur clothing, and what +seemed to be a medicine bag. Carbon dating revealed that the hunter +lived about 550 years ago. Dubbed Kwaday Dan Ts'inchi, or Long Ago +Person Found, by people of the Champagne and Aishihik First Nations (who +may be his direct descendants), he is perhaps the best-preserved human +from the period ever found in North America. + +Other findings from melting ice in the neighboring Yukon region could +explain what that long-ago person was doing in the mountains in the +first place. "Before this there was no archaeological record of people +living here," says Greg Hare, a Yukon government archaeologist. "Now we +see that this area was very much part of people's seasonal activities." + +Like Ward's discovery, the search began by chance, when Kristin Benedek +caught a whiff of what smelled like a barnyard as she and her husband, +Gerry Kuzyk, hunted sheep at 6,000 feet in the mountains of the south +Yukon. They followed the scent to a melting patch of ice covered in +caribou dung. "It was really odd, because I knew there hadn't been +caribou in the area for at least 100 years," recalls Kuzyk, then a +wildlife biologist with the Yukon government. + +Caribou cake. Returning a week later, he found "what looked like a +pencil with string wrapped around it." It turned out to be a +4,300-year-old atlatl, or spear thrower. Further investigation of the +ice patch–and scores of others around the region–revealed icy layer +cakes filled with caribou remains and human detritus chronicling 7,800 +years of changing hunting practices. + +Scientists now believe ancient caribou and other animals flocked to the +ice each summer to cool down and escape swarming mosquitoes and flies. +Hunters followed the game. They returned for centuries and discarded +some equipment in the ice. "We've got people hunting with throwing darts +up until 1,200 years ago," says Hare, who now oversees the research +project. "Then we see the first appearance of the bow and arrow about +1,300 years ago. And by 1,200 years ago, there's no more throwing +darts." + +Now scientists are trying to make the search less a matter of luck. They +are developing sophisticated computer models that combine data on where +glaciers are melting fastest and where humans and animals are known to +have migrated to pinpoint the best places to search in Alaska's Wrangell +and St. Elias mountain ranges–the United States' most glaciated +terrain–and in the Andes. Johan Reinhard thinks the fast- thawing +European Alps could also deliver more findings, perhaps as exquisite as +the Ice Man. "Global warming is providing us high-altitude +archaeologists with some fantastic opportunities right now. We're +probably about the only ones happy about it." + + diff --git a/Ch3/datasets/spam/easy_ham/00748.d6ca40c29f4224487fc8d802cb5dca88 b/Ch3/datasets/spam/easy_ham/00748.d6ca40c29f4224487fc8d802cb5dca88 new file mode 100644 index 000000000..1404d72d9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00748.d6ca40c29f4224487fc8d802cb5dca88 @@ -0,0 +1,77 @@ +From fork-admin@xent.com Tue Sep 24 10:48:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AEA8F16F03 + for ; Tue, 24 Sep 2002 10:48:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:48:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O0irC13647 for ; + Tue, 24 Sep 2002 01:44:54 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 91FC7294230; Mon, 23 Sep 2002 17:30:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav36.law15.hotmail.com [64.4.22.93]) by + xent.com (Postfix) with ESMTP id 2307929422D for ; + Mon, 23 Sep 2002 17:29:44 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 23 Sep 2002 17:33:23 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: "FoRK" +References: <000c01c26347$730dd770$0200a8c0@JMHALL> +Subject: Re: Goodbye Global Warming +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 24 Sep 2002 00:33:23.0749 (UTC) FILETIME=[FD99D550:01C26361] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 17:38:08 -0700 + +Of the three lying politicians, which liar would you take? + +----- Original Message ----- +From: "John Hall" +To: "FoRK" +Sent: Monday, September 23, 2002 2:23 PM +Subject: RE: Goodbye Global Warming + + +> "I did not have sex with that woman." +> +> > -----Original Message----- +> > From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +> Mr. +> > FoRK +> > Sent: Monday, September 23, 2002 2:12 PM +> > To: FoRK +> > Subject: Re: Goodbye Global Warming +> > +> > +> > ----- Original Message ----- +> > From: "John Hall" +> > +> > > A Green once said that if the Spotted Owl hadn't existed they +> > > would have had to invent it. +> > A Republican once said "I am not a crook". +> + + diff --git a/Ch3/datasets/spam/easy_ham/00749.5f32bf86d99139f3256aa4afdd607f58 b/Ch3/datasets/spam/easy_ham/00749.5f32bf86d99139f3256aa4afdd607f58 new file mode 100644 index 000000000..49f449ec3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00749.5f32bf86d99139f3256aa4afdd607f58 @@ -0,0 +1,76 @@ +From fork-admin@xent.com Tue Sep 24 10:49:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1EB1116F03 + for ; Tue, 24 Sep 2002 10:49:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:49:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O1eEC15617 for ; + Tue, 24 Sep 2002 02:40:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A8753294240; Mon, 23 Sep 2002 18:31:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hall.mail.mindspring.net (hall.mail.mindspring.net + [207.69.200.60]) by xent.com (Postfix) with ESMTP id EAE8529423D for + ; Mon, 23 Sep 2002 18:30:05 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + hall.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17teZU-0005jj-00; + Mon, 23 Sep 2002 21:33:04 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: +References: +To: Tom , "Mr. FoRK" +From: "R. A. Hettinga" +Subject: Re: Goodbye Global Warming +Cc: FoRK , + Digital Bearer Settlement List +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 18:25:50 -0400 + +At 5:22 PM -0400 on 9/23/02, Tom wrote: + + +> --]> A Green once said that if the Spotted Owl hadn't existed they +> --]> would have had to invent it. +> --]A Republican once said "I am not a crook". +> --] +> +> Oh great, another round of Lableisms....Let me know when you get back to +> real data.. + +Not me. I have another one, instead: + + Green = Red. + +;-). + +Cheers, +RAH + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00750.5bf605243948976794d149274a18159b b/Ch3/datasets/spam/easy_ham/00750.5bf605243948976794d149274a18159b new file mode 100644 index 000000000..3030653bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00750.5bf605243948976794d149274a18159b @@ -0,0 +1,72 @@ +From fork-admin@xent.com Tue Sep 24 10:49:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8542716F03 + for ; Tue, 24 Sep 2002 10:49:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:49:24 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O1hiC15696 for ; + Tue, 24 Sep 2002 02:43:44 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 00CE4294246; Mon, 23 Sep 2002 18:31:15 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hall.mail.mindspring.net (hall.mail.mindspring.net + [207.69.200.60]) by xent.com (Postfix) with ESMTP id 2CA4A29423D for + ; Mon, 23 Sep 2002 18:30:22 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + hall.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17teZd-0005jj-00; + Mon, 23 Sep 2002 21:33:14 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: +References: + +To: "Mr. FoRK" , "Tom" +From: "R. A. Hettinga" +Subject: Re: Goodbye Global Warming +Cc: "FoRK" , + Digital Bearer Settlement List +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 18:32:44 -0400 + +At 2:57 PM -0700 on 9/23/02, Mr. FoRK wrote: + + +> I just had a run-in with a neighbor whom I've never met before who +> pigeonholed me within one minute after I asked a question - he said 'Are you +> one of them environmentalists?' +> +> Sheesh... I've been out of work too long... + +We'll ignore the possibility of a correlation here in the interest of +charity... + +Cheers, +RAH + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00751.1e509bcc1e777532f90081474defea62 b/Ch3/datasets/spam/easy_ham/00751.1e509bcc1e777532f90081474defea62 new file mode 100644 index 000000000..1521bb1bc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00751.1e509bcc1e777532f90081474defea62 @@ -0,0 +1,75 @@ +From fork-admin@xent.com Tue Sep 24 10:49:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E4AB216F03 + for ; Tue, 24 Sep 2002 10:49:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:49:25 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O1mWC15770 for ; + Tue, 24 Sep 2002 02:48:32 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D8D6F29421F; Mon, 23 Sep 2002 18:43:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 4F33C29409A for ; Mon, + 23 Sep 2002 18:42:42 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id C459C3ECBD; + Mon, 23 Sep 2002 21:51:03 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id BE1A53EC9F; Mon, 23 Sep 2002 21:51:03 -0400 (EDT) +From: Tom +To: Gordon Mohr +Cc: fork@spamassassin.taint.org +Subject: Re: How about subsidizing SSL access to Google? +In-Reply-To: <0b3901c2635c$ab557240$640a000a@golden> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 21:51:03 -0400 (EDT) + +On Mon, 23 Sep 2002, Gordon Mohr wrote: +--] +--]The best we can hope is that technological cleverness, by raising the +--]costs of oppression or by provoking intolerable oppression, brings +--]social liberalization sooner rather than later. + +In a very real sense we are still playing the "stone hurst man, man wears +hide, stone dont hurt no more so now we use arrows, arrows go thru hide +dang lets try this chain mail stuff, arrows dont go thru chain mail so now +we try crafting long spears with chain ripping heads, hey there buddy try +that against my plate mail, well F you and the horse you plated try doging +a bullets, holy shit where is my kevlar, does you kevlar stop nukes..." +game. + +In this mad mad mad mad james burkian cum chucky darwin world there is no +rest for either the wicked or the nonwicked, there is just the ramp up to +the Brand New Jimmiez. + +the trick I think should all be learning is not so much looking for the +THE KILLER APP but instead to look for the "really cool app that mutates +to meet changes" + +Bascialy give china no choise but to shoot its own head off to stop the +music. + +bang bang ... have a nice day. + +-tom + + + diff --git a/Ch3/datasets/spam/easy_ham/00752.3ce51c783c3d6160d34de35e429dc470 b/Ch3/datasets/spam/easy_ham/00752.3ce51c783c3d6160d34de35e429dc470 new file mode 100644 index 000000000..f7793823b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00752.3ce51c783c3d6160d34de35e429dc470 @@ -0,0 +1,70 @@ +From fork-admin@xent.com Tue Sep 24 10:49:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A022E16F03 + for ; Tue, 24 Sep 2002 10:49:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:49:27 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O203C16181 for ; + Tue, 24 Sep 2002 03:00:04 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3DADB2940B8; Mon, 23 Sep 2002 18:56:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail-out2.apple.com (mail-out2.apple.com [17.254.0.51]) by + xent.com (Postfix) with ESMTP id F1A9C29409A for ; + Mon, 23 Sep 2002 18:55:42 -0700 (PDT) +Received: from mailgate1.apple.com (A17-128-100-225.apple.com + [17.128.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id + g8O1xI926223 for ; Mon, 23 Sep 2002 18:59:19 -0700 (PDT) +Received: from scv1.apple.com (scv1.apple.com) by mailgate1.apple.com + (Content Technologies SMTPRS 4.2.5) with ESMTP id + for ; + Mon, 23 Sep 2002 18:59:13 -0700 +Received: from whump.com (to0202a-dhcp24.apple.com [17.212.22.152]) by + scv1.apple.com (8.11.3/8.11.3) with ESMTP id g8O1xIb06941 for + ; Mon, 23 Sep 2002 18:59:18 -0700 (PDT) +Subject: Re: Goodbye Global Warming +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v546) +From: Bill Humphries +To: fork@spamassassin.taint.org +Content-Transfer-Encoding: 7bit +In-Reply-To: +Message-Id: <4CD47AE0-CF61-11D6-B8C1-003065F62CD6@whump.com> +X-Mailer: Apple Mail (2.546) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 18:59:46 -0700 + +On Monday, September 23, 2002, at 03:25 PM, R. A. Hettinga wrote: + +> Green = Red. + + Capitalist = Nazi. + + Information content of the above statements === 0. + +Meanwhile, the angels of light (tm) are having a great knock-down +drag-out with the eldrich kings of .NET on XML-DEV. + +-- whump + + +---- +Bill Humphries +http://www.whump.com/moreLikeThis/ + + diff --git a/Ch3/datasets/spam/easy_ham/00753.880e08a60a1c96760d26d37f2d6b1cbb b/Ch3/datasets/spam/easy_ham/00753.880e08a60a1c96760d26d37f2d6b1cbb new file mode 100644 index 000000000..468dd96fe --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00753.880e08a60a1c96760d26d37f2d6b1cbb @@ -0,0 +1,60 @@ +From fork-admin@xent.com Tue Sep 24 10:49:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EE33A16F03 + for ; Tue, 24 Sep 2002 10:49:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:49:28 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O250C16259 for ; + Tue, 24 Sep 2002 03:05:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1871C29423B; Mon, 23 Sep 2002 18:58:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f68.law15.hotmail.com [64.4.23.68]) by + xent.com (Postfix) with ESMTP id BDEA82940FD for ; + Mon, 23 Sep 2002 18:57:17 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 23 Sep 2002 19:00:58 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Tue, 24 Sep 2002 02:00:58 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Re: Goodbye Global Warming +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 24 Sep 2002 02:00:58.0571 (UTC) FILETIME=[39B809B0:01C2636E] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 02:00:58 +0000 + +Mr. FoRK: +>Of the three lying politicians, which liar would you take? + +No, no. The riddle is, asking only one question, how +do you determine which is which? "If I were to ask +you whether he would say you were a crook, or if the +other had sex ..?" + + + + + +_________________________________________________________________ +Send and receive Hotmail on your mobile device: http://mobile.msn.com + + diff --git a/Ch3/datasets/spam/easy_ham/00754.35836a337d451aa3b7cfc7a7e617c2b2 b/Ch3/datasets/spam/easy_ham/00754.35836a337d451aa3b7cfc7a7e617c2b2 new file mode 100644 index 000000000..225c9e5f2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00754.35836a337d451aa3b7cfc7a7e617c2b2 @@ -0,0 +1,63 @@ +From fork-admin@xent.com Tue Sep 24 10:49:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5BC3B16F03 + for ; Tue, 24 Sep 2002 10:49:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:49:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O28aC16435 for ; + Tue, 24 Sep 2002 03:08:36 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4C9F529424A; Mon, 23 Sep 2002 19:00:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail-out2.apple.com (mail-out2.apple.com [17.254.0.51]) by + xent.com (Postfix) with ESMTP id CA18B294248 for ; + Mon, 23 Sep 2002 18:59:10 -0700 (PDT) +Received: from mailgate2.apple.com (A17-129-100-225.apple.com + [17.129.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id + g8O22p926540 for ; Mon, 23 Sep 2002 19:02:51 -0700 (PDT) +Received: from scv2.apple.com (scv2.apple.com) by mailgate2.apple.com + (Content Technologies SMTPRS 4.2.1) with ESMTP id + for ; + Mon, 23 Sep 2002 19:02:51 -0700 +Received: from whump.com (to0202a-dhcp24.apple.com [17.212.22.152]) by + scv2.apple.com (8.11.3/8.11.3) with ESMTP id g8O22oV17422 for + ; Mon, 23 Sep 2002 19:02:50 -0700 (PDT) +Subject: Re: How about subsidizing SSL access to Google? +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v546) +From: Bill Humphries +To: fork@spamassassin.taint.org +Content-Transfer-Encoding: 7bit +In-Reply-To: +Message-Id: +X-Mailer: Apple Mail (2.546) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 19:03:18 -0700 + +On Monday, September 23, 2002, at 06:51 PM, Tom wrote: + +> Bascialy give china no choise but to shoot its own head off to stop the +> music. + +Or we could have the audacity to tell them to shape up or get cut out +of the global marbles game. Unfortunately that model only seems to +apply to despots with oil and WMDs, rather than despots with WMDs. + +-- whump + + diff --git a/Ch3/datasets/spam/easy_ham/00755.798a2e0b9045d90a9bddbb501dc1fcfb b/Ch3/datasets/spam/easy_ham/00755.798a2e0b9045d90a9bddbb501dc1fcfb new file mode 100644 index 000000000..373cf6c85 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00755.798a2e0b9045d90a9bddbb501dc1fcfb @@ -0,0 +1,98 @@ +From fork-admin@xent.com Tue Sep 24 10:49:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BFC3F16F03 + for ; Tue, 24 Sep 2002 10:49:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:49:31 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O3I2C18539 for ; + Tue, 24 Sep 2002 04:18:02 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id ABDDA2940E4; Mon, 23 Sep 2002 20:14:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 48A7429409A for ; + Mon, 23 Sep 2002 20:13:37 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17tfF3-0005jq-00; Mon, 23 Sep 2002 22:16:01 -0400 +From: "Geege Schuman" +To: "Bill Humphries" , +Subject: RE: Goodbye Global Warming +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +Importance: Normal +In-Reply-To: <4CD47AE0-CF61-11D6-B8C1-003065F62CD6@whump.com> +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 22:12:56 -0400 + +funny. i read it as green = red, as in accounting, as in fiscally +irresponsible. which do you think is the worse indictment - overregulation +or overspending? there are many (dickheads) who buy into the +neo-conservative media's (fox's) definiton of "liberal" as "one who seeks to +impose both." + +hannity and glove. + +best quote, wish i could remember who said it: "we tend to describe our own +party by its ideals and our opponents' party by its reality." + +geege + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of Bill +Humphries +Sent: Monday, September 23, 2002 10:00 PM +To: fork@spamassassin.taint.org +Subject: Re: Goodbye Global Warming + + +On Monday, September 23, 2002, at 03:25 PM, R. A. Hettinga wrote: + +> Green = Red. + + Capitalist = Nazi. + + Information content of the above statements === 0. + +Meanwhile, the angels of light (tm) are having a great knock-down +drag-out with the eldrich kings of .NET on XML-DEV. + +-- whump + + +---- +Bill Humphries +http://www.whump.com/moreLikeThis/ + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00756.286dd5a4431bc1a94af390a6bf4d0349 b/Ch3/datasets/spam/easy_ham/00756.286dd5a4431bc1a94af390a6bf4d0349 new file mode 100644 index 000000000..b04b24f53 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00756.286dd5a4431bc1a94af390a6bf4d0349 @@ -0,0 +1,70 @@ +From fork-admin@xent.com Tue Sep 24 10:49:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4363116F03 + for ; Tue, 24 Sep 2002 10:49:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:49:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O3s0C19758 for ; + Tue, 24 Sep 2002 04:54:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C6E022940FB; Mon, 23 Sep 2002 20:50:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from granger.mail.mindspring.net (granger.mail.mindspring.net + [207.69.200.148]) by xent.com (Postfix) with ESMTP id 755D829409A for + ; Mon, 23 Sep 2002 20:49:13 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + granger.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17tgkl-0002Fb-00; + Mon, 23 Sep 2002 23:52:51 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: <000701c26361$74e027a0$0200a8c0@JMHALL> +References: <000701c26361$74e027a0$0200a8c0@JMHALL> +To: , "FoRK" +From: "R. A. Hettinga" +Subject: Re: Pluck and Luck +Cc: Digital Bearer Settlement List +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 23:34:53 -0400 + +At 5:29 PM -0700 on 9/23/02, John Hall wrote: + + +> Rawls claims Merit doesn't exist. + +Nozick claims that Rawls doesn't exist. + +God says that Nozick is dead? + +:-). + +Cheers, +RAH +Quine, of course, read the Herald, not the Globe. With him and Nozick went +political "diversity" at Hahvahd... +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00757.0c98cd042bf54bed37dc526f0b57bf26 b/Ch3/datasets/spam/easy_ham/00757.0c98cd042bf54bed37dc526f0b57bf26 new file mode 100644 index 000000000..fae4c100d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00757.0c98cd042bf54bed37dc526f0b57bf26 @@ -0,0 +1,69 @@ +From fork-admin@xent.com Tue Sep 24 10:49:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AC5EA16F03 + for ; Tue, 24 Sep 2002 10:49:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:49:34 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O3vIC19867 for ; + Tue, 24 Sep 2002 04:57:18 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 33257294239; Mon, 23 Sep 2002 20:50:17 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from granger.mail.mindspring.net (granger.mail.mindspring.net + [207.69.200.148]) by xent.com (Postfix) with ESMTP id 99BBD29409A for + ; Mon, 23 Sep 2002 20:49:43 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + granger.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17tgkb-0002Fb-00; + Mon, 23 Sep 2002 23:52:42 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: +References: +To: "Geege Schuman" , + "Owen Byrne" +From: "R. A. Hettinga" +Subject: RE: Comrade Communism (was Re: Crony Capitalism (was RE: sed + /s/United States/Roman Empire/g)) +Cc: "Gary Lawrence Murphy" , + "Mr. FoRK" , , + "Digital Bearer Settlement List" +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 23:32:14 -0400 + +At 7:44 PM -0400 on 9/23/02, Geege Schuman wrote: + + +> First, misattribution. + +My apologies. Rave on... + +Cheers, +RAH +"Where all the children are above average..." +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00758.af02ef2952273218fb9d6c7ddbec7910 b/Ch3/datasets/spam/easy_ham/00758.af02ef2952273218fb9d6c7ddbec7910 new file mode 100644 index 000000000..84fa9bf95 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00758.af02ef2952273218fb9d6c7ddbec7910 @@ -0,0 +1,90 @@ +From fork-admin@xent.com Tue Sep 24 10:49:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 19C8B16F03 + for ; Tue, 24 Sep 2002 10:49:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:49:36 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O41BC20122 for ; + Tue, 24 Sep 2002 05:01:11 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2A305294248; Mon, 23 Sep 2002 20:53:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id AC7FB294245 for ; Mon, + 23 Sep 2002 20:53:00 -0700 (PDT) +Received: (qmail 4847 invoked from network); 24 Sep 2002 03:56:41 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 24 Sep 2002 03:56:41 -0000 +Reply-To: +From: "John Hall" +To: "FoRK" +Subject: liberal defnitions +Message-Id: <001b01c2637e$643836f0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 20:56:41 -0700 + +Depends on how much over spending vs. how much (and what type) over +regulation. + +The biggest problem with over regulation is the costs can be invisible. +It also has the ability to single out particular people, while over +spending spreads the damage more evenly. Rent control would be an +example of a regulation solution that is in general worse than spending +tons of money on public housing. + +As for the definition of a liberal being someone who seeks to impose +both, I find no fault in that definition whatsoever. The opinion that +EITHER we are spending too much OR we have too much regulation is pretty +much anathema to liberal politics. + +Finally, those who argue that there are private replacements for much +government regulation are not saying that a state of nature (no private +replacements, no government regulation) is better than government +regulation itself. + +And in my experience people who label themselves 'Green' (which does not +include everyone who loves trees and thinks smokestacks are ugly) is a +watermelon. + + + + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Geege +> Schuman +> +> funny. i read it as green = red, as in accounting, as in fiscally +> irresponsible. which do you think is the worse indictment - +> overregulation +> or overspending? there are many (dickheads) who buy into the +> neo-conservative media's (fox's) definiton of "liberal" as "one who +seeks +> to +> impose both." + + diff --git a/Ch3/datasets/spam/easy_ham/00759.1c5ec35412195e0c2d80ae829d68e8e9 b/Ch3/datasets/spam/easy_ham/00759.1c5ec35412195e0c2d80ae829d68e8e9 new file mode 100644 index 000000000..d249bcf0f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00759.1c5ec35412195e0c2d80ae829d68e8e9 @@ -0,0 +1,57 @@ +From fork-admin@xent.com Tue Sep 24 10:49:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B607E16F03 + for ; Tue, 24 Sep 2002 10:49:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 10:49:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O4fwC21492 for ; + Tue, 24 Sep 2002 05:41:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E9CED2940FA; Mon, 23 Sep 2002 21:38:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from c007.snv.cp.net (h000.c007.snv.cp.net [209.228.33.228]) by + xent.com (Postfix) with SMTP id 05A0E29409A for ; + Mon, 23 Sep 2002 21:37:34 -0700 (PDT) +Received: (cpmta 3999 invoked from network); 23 Sep 2002 21:41:14 -0700 +Received: from 65.189.7.13 (HELO alumni.rice.edu) by + smtp.directvinternet.com (209.228.33.228) with SMTP; 23 Sep 2002 21:41:14 + -0700 +X-Sent: 24 Sep 2002 04:41:14 GMT +Message-Id: <3D8FEC94.8050207@alumni.rice.edu> +From: Wayne E Baisley +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.1) + Gecko/20020823 Netscape/7.0 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: "Joseph S. Barrera III" +Cc: FoRK +Subject: Re: flavor cystals +References: <3D8D5C3B.2090202@barrera.org> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 23:39:48 -0500 + +It's only 64kbps, but http://noise.ktru.org/ can be tasty. Presently +playing Fille Qui Mousse, Collage in Progress, and other happy nibbles. +Sounds a bit like The Avalanches, but that will change soon. + +Cheers, +Wayne + + diff --git a/Ch3/datasets/spam/easy_ham/00760.705760ac23c26098abf407bfdfd30499 b/Ch3/datasets/spam/easy_ham/00760.705760ac23c26098abf407bfdfd30499 new file mode 100644 index 000000000..d9155cf95 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00760.705760ac23c26098abf407bfdfd30499 @@ -0,0 +1,67 @@ +From fork-admin@xent.com Tue Sep 24 15:52:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E5F6916F03 + for ; Tue, 24 Sep 2002 15:52:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 15:52:19 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OCDxC02791 for ; + Tue, 24 Sep 2002 13:14:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B7AD1294237; Tue, 24 Sep 2002 05:10:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id AA9B229409A for ; + Tue, 24 Sep 2002 05:09:37 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17toaj-0003A5-00; Tue, 24 Sep 2002 08:15:01 -0400 +From: "Geege Schuman" +To: , "FoRK" +Subject: RE: liberal defnitions +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <001b01c2637e$643836f0$0200a8c0@JMHALL> +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 08:11:52 -0400 + +per john hall: +"The opinion that EITHER we are spending too much OR we have too much +regulation is pretty +much anathema to liberal politics." + +no it's not. + +geege + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00761.b4bbbb76fb1fa8407236f5cb167c33d8 b/Ch3/datasets/spam/easy_ham/00761.b4bbbb76fb1fa8407236f5cb167c33d8 new file mode 100644 index 000000000..904f7c9bc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00761.b4bbbb76fb1fa8407236f5cb167c33d8 @@ -0,0 +1,118 @@ +From fork-admin@xent.com Tue Sep 24 15:52:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 67B3816F03 + for ; Tue, 24 Sep 2002 15:52:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 15:52:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OCKlC03038 for ; + Tue, 24 Sep 2002 13:20:47 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 353C8294256; Tue, 24 Sep 2002 05:15:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id E451F29409A for ; + Tue, 24 Sep 2002 05:14:50 -0700 (PDT) +Received: from adsl-157-233-109.jax.bellsouth.net ([66.157.233.109] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17tofv-0003ID-00 for fork@xent.com; Tue, 24 Sep 2002 08:20:23 -0400 +From: "Geege Schuman" +To: "FoRK" +Subject: RE: liberal defnitions +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <001b01c2637e$643836f0$0200a8c0@JMHALL> +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 08:17:14 -0400 + +from slate's "today's papers": +The New York Times and Los Angeles Times both lead with word that +a federal judge ruled yesterday that the nation's largest +national gas pipeline company, El Paso, illegally withheld gas +from the market during California's energy squeeze in 2000-01. +The judge concluded that El Paso left 21 percent of its capacity +in the state off-line, thus driving up the price of gas and +helping to induce rolling blackouts. + +and this is the product of overregulation? + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of John +Hall +Sent: Monday, September 23, 2002 11:57 PM +To: FoRK +Subject: liberal defnitions + + +Depends on how much over spending vs. how much (and what type) over +regulation. + +The biggest problem with over regulation is the costs can be invisible. +It also has the ability to single out particular people, while over +spending spreads the damage more evenly. Rent control would be an +example of a regulation solution that is in general worse than spending +tons of money on public housing. + +As for the definition of a liberal being someone who seeks to impose +both, I find no fault in that definition whatsoever. The opinion that +EITHER we are spending too much OR we have too much regulation is pretty +much anathema to liberal politics. + +Finally, those who argue that there are private replacements for much +government regulation are not saying that a state of nature (no private +replacements, no government regulation) is better than government +regulation itself. + +And in my experience people who label themselves 'Green' (which does not +include everyone who loves trees and thinks smokestacks are ugly) is a +watermelon. + + + + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Geege +> Schuman +> +> funny. i read it as green = red, as in accounting, as in fiscally +> irresponsible. which do you think is the worse indictment - +> overregulation +> or overspending? there are many (dickheads) who buy into the +> neo-conservative media's (fox's) definiton of "liberal" as "one who +seeks +> to +> impose both." + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00762.c95ecbfb41e18e9ae4b9aceb4a7de176 b/Ch3/datasets/spam/easy_ham/00762.c95ecbfb41e18e9ae4b9aceb4a7de176 new file mode 100644 index 000000000..13210ee2b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00762.c95ecbfb41e18e9ae4b9aceb4a7de176 @@ -0,0 +1,54 @@ +From fork-admin@xent.com Tue Sep 24 15:52:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 33CEB16F03 + for ; Tue, 24 Sep 2002 15:52:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 15:52:27 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OCl1C03831 for ; + Tue, 24 Sep 2002 13:47:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0DC3B29425F; Tue, 24 Sep 2002 05:43:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from imo-m04.mx.aol.com (imo-m04.mx.aol.com [64.12.136.7]) by + xent.com (Postfix) with ESMTP id C818529409A for ; + Tue, 24 Sep 2002 05:42:36 -0700 (PDT) +Received: from ThosStew@aol.com by imo-m04.mx.aol.com (mail_out_v34.10.) + id 1.138.14d4d29a (30960); Tue, 24 Sep 2002 08:46:08 -0400 (EDT) +From: ThosStew@aol.com +Message-Id: <138.14d4d29a.2ac1b890@aol.com> +Subject: Re: SF Weekly's Ultimate SF Date lineup :-) +To: khare@alumni.caltech.edu, Fork@xent.com +Cc: arvind@bea.com +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Mailer: AOL 5.0 for Mac sub 45 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 08:46:08 EDT + + +In a message dated 9/23/2002 6:30:31 PM, khare@alumni.caltech.edu writes: + +> why you're writing with a double of scotch :-) + +because, obviously, after the inevitable second double, you won't remember +anything you say unless you write it down :-) + +Tom + + diff --git a/Ch3/datasets/spam/easy_ham/00763.509a13b8ff69430aacaa8b786b322939 b/Ch3/datasets/spam/easy_ham/00763.509a13b8ff69430aacaa8b786b322939 new file mode 100644 index 000000000..0a60526d1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00763.509a13b8ff69430aacaa8b786b322939 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Tue Sep 24 15:52:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 691B216F03 + for ; Tue, 24 Sep 2002 15:52:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 15:52:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OE00C06344 for ; + Tue, 24 Sep 2002 15:00:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3F0502940A0; Tue, 24 Sep 2002 06:56:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 441E529409A for ; Tue, + 24 Sep 2002 06:55:40 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 2E1873EC1F; + Tue, 24 Sep 2002 10:04:06 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 2B7B63EBF4 for ; Tue, + 24 Sep 2002 10:04:06 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Re: 2002.06.00.00 +In-Reply-To: <1a9.8ff8ef4.2ac1b88a@aol.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 10:04:06 -0400 (EDT) + +On Tue, 24 Sep 2002 ThosStew@aol.com wrote: + +--]Klez, most likely. It'll pick up your address and send mail to all your +--]friends, and your strangers, as if coming from you. Nice way to lose friends +--]and meet strangers. Better than typing gibberish (or Hemingway, but I repeat +--]myself) in a bar with a double of scotch. + + +Friends dont let friends use Outlook....even after a douly shot of the +scotch with a chaser. + +All hands on the stinky one. + +-tom(the other tommeat) + + + diff --git a/Ch3/datasets/spam/easy_ham/00764.13a2828e7c0475a4d67413331b3f7b2d b/Ch3/datasets/spam/easy_ham/00764.13a2828e7c0475a4d67413331b3f7b2d new file mode 100644 index 000000000..ffd8f6581 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00764.13a2828e7c0475a4d67413331b3f7b2d @@ -0,0 +1,57 @@ +From fork-admin@xent.com Tue Sep 24 15:52:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0261F16F03 + for ; Tue, 24 Sep 2002 15:52:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 15:52:32 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OE5AC06660 for ; + Tue, 24 Sep 2002 15:05:10 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B537029410A; Tue, 24 Sep 2002 06:59:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id 46615294108 for ; + Tue, 24 Sep 2002 06:58:40 -0700 (PDT) +Received: from Golux.Com (dmz-firewall [206.199.198.4]) by + Boron.MeepZor.Com (8.11.6/8.11.6) with ESMTP id g8OE2NB28712; + Tue, 24 Sep 2002 10:02:23 -0400 +Message-Id: <3D907351.2B191F58@Golux.Com> +From: Rodent of Unusual Size +Organization: The Apache Software Foundation +X-Mailer: Mozilla 4.79 [en] (WinNT; U) +X-Accept-Language: en +MIME-Version: 1.0 +To: Flatware or Road Kill? +Subject: A different sort of Fox News +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 10:14:41 -0400 + +This was just *too* funny.. rotflma. + +http://www.ozyandmillie.org/comics/om20020924.gif +-- +#ken P-)} + +Ken Coar, Sanagendamgagwedweinini http://Golux.Com/coar/ +Author, developer, opinionist http://Apache-Server.Com/ + +"Millennium hand and shrimp!" + + diff --git a/Ch3/datasets/spam/easy_ham/00765.ea01c46568902b1338c9685b55d77f6c b/Ch3/datasets/spam/easy_ham/00765.ea01c46568902b1338c9685b55d77f6c new file mode 100644 index 000000000..6ffc6cf50 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00765.ea01c46568902b1338c9685b55d77f6c @@ -0,0 +1,601 @@ +From fork-admin@xent.com Tue Sep 24 15:52:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B212716F03 + for ; Tue, 24 Sep 2002 15:52:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 15:52:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OEMYC07324 for ; + Tue, 24 Sep 2002 15:22:38 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C5FBB294103; Tue, 24 Sep 2002 07:18:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hall.mail.mindspring.net (hall.mail.mindspring.net + [207.69.200.60]) by xent.com (Postfix) with ESMTP id EF6CD29409A for + ; Tue, 24 Sep 2002 07:17:45 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + hall.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17tqYy-0005TE-00; + Tue, 24 Sep 2002 10:21:20 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net (Unverified) +Message-Id: +To: Digital Bearer Settlement List , fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: The Next World Order +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 09:52:15 -0400 + +http://newyorker.com/fact/content/?020401fa_FACT1 + +The New Yorker + +THE NEXT WORLD ORDER +by NICHOLAS LEMANN +The Bush Administration may have a brand-new doctrine of power. +Issue of 2002-04-01 +Posted 2002-03-25 + +When there is a change of command-and not just in government-the new people +often persuade themselves that the old people were much worse than anyone +suspected. This feeling seems especially intense in the Bush +Administration, perhaps because Bill Clinton has been bracketed by a +father-son team. It's easy for people in the Administration to believe +that, after an unfortunate eight-year interlude, the Bush family has +resumed its governance-and about time, too. + +The Bush Administration's sense that the Clinton years were a waste, or +worse, is strongest in the realms of foreign policy and military affairs. +Republicans tend to regard Democrats as untrustworthy in defense and +foreign policy, anyway, in ways that coincide with what people think of as +Clinton's weak points: an eagerness to please, a lack of discipline. +Condoleezza Rice, Bush's national-security adviser, wrote an article in +Foreign Affairs two years ago in which she contemptuously accused Clinton +of "an extraordinary neglect of the fiduciary responsibilities of the +commander in chief." Most of the top figures in foreign affairs in this +Administration also served under the President's father. They took office +last year, after what they regard as eight years of small-time flyswatting +by Clinton, thinking that they were picking up where they'd left off. + +Not long ago, I had lunch with-sorry!-a senior Administration +foreign-policy official, at a restaurant in Washington called the Oval +Room. Early in the lunch, he handed me a twenty-seven- page report, whose +cover bore the seal of the Department of Defense, an outline map of the +world, and these words: + +Defense Strategy for the 1990s: +The Regional Defense Strategy +Secretary of Defense +Dick Cheney +January 1993 + +One of the difficulties of working at the highest level of government is +communicating its drama. Actors, professional athletes, and even elected +politicians train for years, go through a great winnowing, and then perform +publicly. People who have titles like Deputy Assistant Secretary of Defense +are just as ambitious and competitive, have worked just as long and hard, +and are often playing for even higher stakes-but what they do all day is go +to meetings and write memos and prepare briefings. How, possibly, to +explain that some of the documents, including the report that the senior +official handed me, which was physically indistinguishable from a +high-school term paper, represent the government version of playing +Carnegie Hall? + +After the fall of the Berlin Wall, Dick Cheney, then the Secretary of +Defense, set up a "shop," as they say, to think about American foreign +policy after the Cold War, at the grand strategic level. The project, whose +existence was kept quiet, included people who are now back in the game, at +a higher level: among them, Paul Wolfowitz, the Deputy Secretary of +Defense; Lewis Libby, Cheney's chief of staff; and Eric Edelman, a senior +foreign-policy adviser to Cheney-generally speaking, a cohesive group of +conservatives who regard themselves as bigger-thinking, tougher-minded, and +intellectually bolder than most other people in Washington. (Donald +Rumsfeld, the Secretary of Defense, shares these characteristics, and has +been closely associated with Cheney for more than thirty years.) Colin +Powell, then the chairman of the Joint Chiefs of Staff, mounted a +competing, and presumably more ideologically moderate, effort to reimagine +American foreign policy and defense. A date was set-May 21, 1990-on which +each team would brief Cheney for an hour; Cheney would then brief President +Bush, after which Bush would make a foreign-policy address unveiling the +new grand strategy. + +Everybody worked for months on the "five-twenty-one brief," with a sense +that the shape of the post-Cold War world was at stake. When Wolfowitz and +Powell arrived at Cheney's office on May 21st, Wolfowitz went first, but +his briefing lasted far beyond the allotted hour, and Cheney (a hawk who, +perhaps, liked what he was hearing) did not call time on him. Powell didn't +get to present his alternate version of the future of the United States in +the world until a couple of weeks later. Cheney briefed President Bush, +using material mostly from Wolfowitz, and Bush prepared his major +foreign-policy address. But he delivered it on August 2, 1990, the day that +Iraq invaded Kuwait, so nobody noticed. + +The team kept working. In 1992, the Times got its hands on a version of the +material, and published a front-page story saying that the Pentagon +envisioned a future in which the United States could, and should, prevent +any other nation or alliance from becoming a great power. A few weeks of +controversy ensued about the Bush Administration's hawks being +"unilateral"-controversy that Cheney's people put an end to with denials +and the counter-leak of an edited, softer version of the same material. + +As it became apparent that Bush was going to lose to Clinton, the Cheney +team's efforts took on the quality of a parting shot. The report that the +senior official handed me at lunch had been issued only a few days before +Clinton took office. It is a somewhat bland, opaque document-a "scrubbed," +meaning unclassified, version of something more candid-but it contained the +essential ideas of "shaping," rather than reacting to, the rest of the +world, and of preventing the rise of other superpowers. Its tone is one of +skepticism about diplomatic partnerships. A more forthright version of the +same ideas can be found in a short book titled "From Containment to Global +Leadership?," which Zalmay Khalilzad, who joined Cheney's team in 1991 and +is now special envoy to Afghanistan, published a couple of years into the +Clinton Administration, when he was out of government. It recommends that +the United States "preclude the rise of another global rival for the +indefinite future." Khalilzad writes, "It is a vital U.S. interest to +preclude such a development-i.e., to be willing to use force if necessary +for the purpose." + +When George W. Bush was campaigning for President, he and the people around +him didn't seem to be proposing a great doctrinal shift, along the lines of +the policy of containment of the Soviet Union's sphere of influence which +the United States maintained during the Cold War. In his first major +foreign-policy speech, delivered in November of 1999, Bush declared that "a +President must be a clear-eyed realist," a formulation that seems to +connote an absence of world-remaking ambition. "Realism" is exactly the +foreign-policy doctrine that Cheney's Pentagon team rejected, partly +because it posits the impossibility of any one country's ever dominating +world affairs for any length of time. + +One gets many reminders in Washington these days of how much the terrorist +attacks of September 11th have changed official foreign-policy thinking. +Any chief executive, of either party, would probably have done what Bush +has done so far-made war on the Taliban and Al Qaeda and enhanced domestic +security. It is only now, six months after the attacks, that we are truly +entering the realm of Presidential choice, and all indications are that +Bush is going to use September 11th as the occasion to launch a new, +aggressive American foreign policy that would represent a broad change in +direction rather than a specific war on terrorism. All his rhetoric, +especially in the two addresses he has given to joint sessions of Congress +since September 11th, and all the information about his state of mind which +his aides have leaked, indicate that he sees this as the nation's moment of +destiny-a perception that the people around him seem to be encouraging, +because it enhances Bush's stature and opens the way to more assertive +policymaking. + +Inside government, the reason September 11th appears to have been "a +transformative moment," as the senior official I had lunch with put it, is +not so much that it revealed the existence of a threat of which officials +had previously been unaware as that it drastically reduced the American +public's usual resistance to American military involvement overseas, at +least for a while. The Clinton Administration, beginning with the "Black +Hawk Down" operation in Mogadishu, during its first year, operated on the +conviction that Americans were highly averse to casualties; the all-bombing +Kosovo operation, in Clinton's next-to-last year, was the ideal foreign +military adventure. Now that the United States has been attacked, the +options are much broader. The senior official approvingly mentioned a 1999 +study of casualty aversion by the Triangle Institute for Security Studies, +which argued that the "mass public" is much less casualty-averse than the +military or the civilian élite believes; for example, the study showed that +the public would tolerate thirty thousand deaths in a military operation to +prevent Iraq from acquiring weapons of mass destruction. (The American +death total in the Vietnam War was about fifty-eight thousand.) September +11th presumably reduced casualty aversion even further. + +Recently, I went to the White House to interview Condoleezza Rice. Rice's +Foreign Affairs article from 2000 begins with this declaration: "The United +States has found it exceedingly difficult to define its 'national interest' +in the absence of Soviet power." I asked her whether that is still the +case. "I think the difficulty has passed in defining a role," she said +immediately. "I think September 11th was one of those great earthquakes +that clarify and sharpen. Events are in much sharper relief." Like Bush, +she said that opposing terrorism and preventing the accumulation of weapons +of mass destruction "in the hands of irresponsible states" now define the +national interest. (The latter goal, by the way, is new-in Bush's speech to +Congress on September 20th, America's sole grand purpose was ending +terrorism.) We talked in her West Wing office; its tall windows face the +part of the White House grounds where television reporters do their +standups. In her bearing, Rice seemed less crisply military than she does +in public. She looked a little tired, but she was projecting a kind of +missionary calm, rather than belligerence. + +In the Foreign Affairs article, Rice came across as a classic realist, +putting forth "the notions of power politics, great powers, and power +balances" as the proper central concerns of the United States. Now she +sounded as if she had moved closer to the one-power idea that Cheney's +Pentagon team proposed ten years ago-or, at least, to the idea that the +other great powers are now in harmony with the United States, because of +the terrorist attacks, and can be induced to remain so. "Theoretically, the +realists would predict that when you have a great power like the United +States it would not be long before you had other great powers rising to +challenge it or trying to balance against it," Rice said. "And I think what +you're seeing is that there's at least a predilection this time to move to +productive and coöperative relations with the United States, rather than to +try to balance the United States. I actually think that statecraft matters +in how it all comes out. It's not all foreordained." + +Rice said that she had called together the senior staff people of the +National Security Council and asked them to think seriously about "how do +you capitalize on these opportunities" to fundamentally change American +doctrine, and the shape of the world, in the wake of September 11th. "I +really think this period is analogous to 1945 to 1947," she said-that is, +the period when the containment doctrine took shape-"in that the events so +clearly demonstrated that there is a big global threat, and that it's a big +global threat to a lot of countries that you would not have normally +thought of as being in the coalition. That has started shifting the +tectonic plates in international politics. And it's important to try to +seize on that and position American interests and institutions and all of +that before they harden again." + +The National Security Council is legally required to produce an annual +document called the National Security Strategy, stating the over-all goals +of American policy-another government report whose importance is great but +not obvious. The Bush Administration did not produce one last year, as the +Clinton Administration did not in its first year. Rice said that she is +working on the report now. + +"There are two ways to handle this document," she told me. "One is to do it +in a kind of minimalist way and just get it out. But it's our view that, +since this is going to be the first one for the Bush Administration, it's +important. An awful lot has happened since we started this process, prior +to 9/11. I can't give you a certain date when it's going to be out, but I +would think sometime this spring. And it's important that it be a real +statement of what the Bush Administration sees as the strategic direction +that it's going." + +It seems clear already that Rice will set forth the hope of a more dominant +American role in the world than she might have a couple of years ago. Some +questions that don't appear to be settled yet, but are obviously being +asked, are how much the United States is willing to operate alone in +foreign affairs, and how much change it is willing to try to engender +inside other countries-and to what end, and with what means. The leak a +couple of weeks ago of a new American nuclear posture, adding offensive +capability against "rogue states," departed from decades of official +adherence to a purely defensive position, and was just one indication of +the scope of the reconsideration that is going on. Is the United States now +in a position to be redrawing regional maps, especially in the Middle East, +and replacing governments by force? Nobody thought that the Bush +Administration would be thinking in such ambitious terms, but plainly it +is, and with the internal debate to the right of where it was only a few +months ago. + +Just before the 2000 election, a Republican foreign-policy figure suggested +to me that a good indication of a Bush Administration's direction in +foreign affairs would be who got a higher-ranking job, Paul Wolfowitz or +Richard Haass. Haass is another veteran of the first Bush Administration, +and an intellectual like Wolfowitz, but much more moderate. In 1997, he +published a book titled "The Reluctant Sheriff," in which he poked a little +fun at Wolfowitz's famous strategy briefing of the early nineties (he +called it the "Pentagon Paper") and disagreed with its idea that the United +States should try to be the world's only great power over the long term. +"For better or worse, such a goal is beyond our reach," Haass wrote. "It +simply is not doable." Elsewhere in the book, he disagreed with another of +the Wolfowitz team's main ideas, that of the United States expanding the +"democratic zone of peace": "Primacy is not to be confused with hegemony. +The United States cannot compel others to become more democratic." Haass +argued that the United States is becoming less dominant in the world, not +more, and suggested "a revival of what might be called traditional +great-power politics." + +Wolfowitz got a higher-ranking job than Haass: he is Deputy Secretary of +Defense, and Haass is Director of Policy Planning for the State Department- +in effect, Colin Powell's big-think guy. Recently, I went to see him in his +office at the State Department. On the wall of his waiting room was an +array of photographs of every past director of the policy-planning staff, +beginning with George Kennan, the father of the containment doctrine and +the first holder of the office that Haass now occupies. + +It's another indication of the way things are moving in Washington that +Haass seems to have become more hawkish. I mentioned the title of his book. +"Using the word 'reluctant' was itself reflective of a period when foreign +policy seemed secondary, and sacrificing for foreign policy was a hard case +to make," he said. "It was written when Bill Clinton was saying, 'It's the +economy, stupid'-not 'It's the world, stupid.' Two things are very +different now. One, the President has a much easier time making the case +that foreign policy matters. Second, at the top of the national-security +charts is this notion of weapons of mass destruction and terrorism." + +I asked Haass whether there is a doctrine emerging that is as broad as +Kennan's containment. "I think there is," he said. "What you're seeing from +this Administration is the emergence of a new principle or body of +ideas-I'm not sure it constitutes a doctrine-about what you might call the +limits of sovereignty. Sovereignty entails obligations. One is not to +massacre your own people. Another is not to support terrorism in any way. +If a government fails to meet these obligations, then it forfeits some of +the normal advantages of sovereignty, including the right to be left alone +inside your own territory. Other governments, including the United States, +gain the right to intervene. In the case of terrorism, this can even lead +to a right of preventive, or peremptory, self-defense. You essentially can +act in anticipation if you have grounds to think it's a question of when, +and not if, you're going to be attacked." + +Clearly, Haass was thinking of Iraq. "I don't think the American public +needs a lot of persuading about the evil that is Saddam Hussein," he said. +"Also, I'd fully expect the President and his chief lieutenants to make the +case. Public opinion can be changed. We'd be able to make the case that +this isn't a discretionary action but one done in self-defense." + +On the larger issue of the American role in the world, Haass was still +maintaining some distance from the hawks. He had made a speech not long +before called "Imperial America," but he told me that there is a big +difference between imperial and imperialist. "I just think that we have to +be a little bit careful," he said. "Great as our advantages are, there are +still limits. We have to have allies. We can't impose our ideas on +everyone. We don't want to be fighting wars alone, so we need others to +join us. American leadership, yes; but not American unilateralism. It has +to be multilateral. We can't win the war against terror alone. We can't +send forces everywhere. It really does have to be a collaborative endeavor." + +He stopped for a moment. "Is there a successor idea to containment? I think +there is," he said. "It is the idea of integration. The goal of U.S. +foreign policy should be to persuade the other major powers to sign on to +certain key ideas as to how the world should operate: opposition to +terrorism and weapons of mass destruction, support for free trade, +democracy, markets. Integration is about locking them into these policies +and then building institutions that lock them in even more." + +The first, but by no means the last, obvious manifestation of a new +American foreign policy will be the effort to remove Saddam Hussein. What +the United States does in an Iraq operation will very likely dwarf what's +been done so far in Afghanistan, both in terms of the scale of the +operation itself and in terms of its aftermath. + +Several weeks ago, Ahmad Chalabi, the head of the Iraqi National Congress, +the Iraqi opposition party, came through Washington with an entourage of +his aides. Chalabi went to the State Department and the White House to ask, +evidently successfully, for more American funding. His main public event +was a panel discussion at the American Enterprise Institute. Chalabi's +leading supporter in town, Richard Perle, the prominent hawk and former +Defense Department official, acted as moderator. Smiling and supremely +confident, Perle opened the discussion by saying, "Evidence is mounting +that the Administration is looking very carefully at strategies for dealing +with Saddam Hussein." The war on terrorism, he said, will not be complete +"until Saddam is successfully dealt with. And that means replacing his +regime. . . . That action will be taken, I have no doubt." + +Chalabi, who lives in London, is a charming, suave middle-aged man with a +twinkle in his eye. He was dressed in a double-breasted pin-striped suit +and a striped shirt with a white spread collar. Although he and his +supporters argue that the Iraqi National Congress, with sufficient American +support, can defeat Saddam just as the Northern Alliance defeated the +Taliban in Afghanistan, this view hasn't won over most people in +Washington. It isn't just that Chalabi doesn't look the part of a rebel +military leader ("He could fight you for the last petit four on the tray +over tea at the Savoy, but that's about it," one skeptical former Pentagon +official told me), or that he isn't in Iraq. It's also that Saddam's +military is perhaps ten times the size that the Taliban's was, and has been +quite successful at putting down revolts over the last decade. The United +States left Iraq in 1991 believing that Saddam might soon fall to an +internal rebellion; Chalabi's supporters believe that Saddam is much weaker +now, and that even signs that a serious operation was in the offing could +finish him off. But non-true believers seem to be coming around to the idea +that a military operation against Saddam would mean the deployment of +anywhere from a hundred thousand to three hundred thousand American ground +troops. + +Kenneth Pollack, a former C.I.A. analyst who was the National Security +Council's staff expert on Iraq during the last years of the Clinton +Administration, recently caused a stir in the foreign-policy world by +publishing an article in Foreign Affairs calling for war against Saddam. +This was noteworthy because three years ago Pollack and two co-authors +published an article, also in Foreign Affairs, arguing that the Iraqi +National Congress was incapable of defeating Saddam. Pollack still doesn't +think Chalabi can do the job. He believes that it would require a +substantial American ground, air, and sea force, closer in size to the one +we used in Kuwait in 1990-91 than to the one we are using now in +Afghanistan. + +Pollack, who is trim, quick, and crisp, is obviously a man who has given a +briefing or two in his day. When I went to see him at his office in +Washington, with a little encouragement he got out from behind his desk and +walked over to his office wall, where three maps of the Middle East were +hanging. "The only way to do it is a full-scale invasion," he said, using a +pen as a pointer. "We're talking about two grand corps, two to three +hundred thousand people altogether. The population is here, in the +Tigris-Euphrates valley." He pointed to the area between Baghdad and Basra. +"Ideally, you'd have the Saudis on board." He pointed to the Prince Sultan +airbase, near Riyadh. "You could make Kuwait the base, but it's much easier +in Saudi. You need to take western Iraq and southern Iraq"-pointing +again-"because otherwise they'll fire Scuds at Israel and at the Saudi oil +fields. You probably want to prevent Iraq from blowing up its own oil +fields, so troops have to occupy them. And you need troops to defend the +Kurds in northern Iraq." Point, point. "You go in as hard as you can, as +fast as you can." He slapped his hand on the top of his desk. "You get the +enemy to divide his forces, by threatening him in two places at once." His +hand hit the desk again, hard. "Then you crush him." Smack. + +That would be a reverberating blow. The United States has already removed +the government of one country, Afghanistan, the new government is obviously +shaky, and American military operations there are not completed. Pakistan, +which before September 11th clearly met the new test of national +unacceptability (it both harbors terrorists and has weapons of mass +destruction), will also require long-term attention, since the country is +not wholly under the control of the government, as the murder of Daniel +Pearl demonstrated, and even parts of the government, like the intelligence +service, may not be entirely under the control of the President. In Iraq, +if America invades and brings down Saddam, a new government must be +established-an enormous long-term task in a country where there is no +obvious, plausible new leader. The prospective Iraq operation has drawn +strong objections from the neighboring nations, one of which, Russia, is a +nuclear superpower. An invasion would have a huge effect on the internal +affairs of all the biggest Middle Eastern nations: Iran, Turkey, Saudi +Arabia, and even Egypt. Events have forced the Administration to become +directly involved in the Israeli-Palestinian conflict, as it hadn't wanted +to do. So it's really the entire region that is in play, in much the way +that Europe was immediately after the Second World War. + +In September, Bush rejected Paul Wolfowitz's recommendation of immediate +moves against Iraq. That the President seems to have changed his mind is an +indication, in part, of the bureaucratic skill of the Administration's +conservatives. "These guys are relentless," one former official, who is +close to the high command at the State Department, told me. "Resistance is +futile." The conservatives' other weapon, besides relentlessness, is +intellectualism. Colin Powell tends to think case by case, and since +September 11th the conservatives have outflanked him by producing at least +the beginning of a coherent, hawkish world view whose acceptance +practically requires invading Iraq. If the United States applies the +doctrines of Cheney's old Pentagon team, "shaping" and expanding "the zone +of democracy," the implications would extend far beyond that one operation. + +The outside experts on the Middle East who have the most credibility with +the Administration seem to be Bernard Lewis, of Princeton, and Fouad Ajami, +of the Johns Hopkins School of Advanced International Studies, both of whom +see the Arab Middle East as a region in need of radical remediation. Lewis +was invited to the White House in December to brief the senior +foreign-policy staff. "One point he made is, Look, in that part of the +world, nothing matters more than resolute will and force," the senior +official I had lunch with told me-in other words, the United States needn't +proceed gingerly for fear of inflaming the "Arab street," as long as it is +prepared to be strong. The senior official also recommended as interesting +thinkers on the Middle East Charles Hill, of Yale, who in a recent essay +declared, "Every regime of the Arab-Islamic world has proved a failure," +and Reuel Marc Gerecht, of the American Enterprise Institute, who published +an article in The Weekly Standard about the need for a change of regime in +Iran and Syria. (Those goals, Gerecht told me when we spoke, could be +accomplished through pressure short of an invasion.) + +Several people I spoke with predicted that most, or even all, of the +nations that loudly oppose an invasion of Iraq would privately cheer it on, +if they felt certain that this time the Americans were really going to +finish the job. One purpose of Vice-President Cheney's recent diplomatic +tour of the region was to offer assurances on that matter, while gamely +absorbing all the public criticism of an Iraq operation. In any event, the +Administration appears to be committed to acting forcefully in advance of +the world's approval. When I spoke to Condoleezza Rice, she said that the +United States should assemble "coalitions of the willing" to support its +actions, rather than feel it has to work within the existing infrastructure +of international treaties and organizations. An invasion of Iraq would test +that policy in more ways than one: the Administration would be betting that +it can continue to eliminate Al Qaeda cells in countries that publicly +opposed the Iraq operation. + +When the Administration submitted its budget earlier this year, it asked +for a forty-eight-billion-dollar increase in defense spending for fiscal +2003, which begins in October, 2002. Much of that sum would go to improve +military pay and benefits, but ten billion dollars of it is designated as +an unspecified contingency fund for further operations in the war on +terrorism. That's probably at least the initial funding for an invasion of +Iraq. + +This spring, the Administration will be talking to other countries about +the invasion, trying to secure basing and overflight privileges, while Bush +builds up a rhetorical case for it by giving speeches about the +unacceptability of developing weapons of mass destruction. A drama +involving weapons inspections in Iraq will play itself out over the spring +and summer, and will end with the United States declaring that the terms +that Saddam offers for the inspections, involving delays and restrictions, +are unacceptable. Then, probably in the late summer or early fall, the +enormous troop positioning, which will take months, will begin. The +Administration obviously feels confident that the United States can +effectively parry whatever aggressive actions Saddam takes during the troop +buildup, and hopes that its moves will destabilize Iraq enough to cause the +Republican Guard, the military key to the country, to turn against Saddam +and topple him on its own. But the chain of events leading inexorably to a +full-scale American invasion, if it hasn't already begun, evidently will +begin soon. + +Lewis (Scooter) Libby, who was the principal drafter of Cheney's +future-of-the-world documents during the first Bush Administration, now +works in an office in the Old Executive Office Building, overlooking the +West Wing, where he has a second, smaller office. A packet of +public-relations material prompted by the recent paperback publication of +his 1996 novel, "The Apprentice," quotes the Times' calling him "Dick +Cheney's Dick Cheney," which seems like an apt description: he appears +absolutely sure of himself, and, whether by coincidence or as a result of +the influence of his boss, speaks in a tough, confidential, gravelly +rumble. Like Condoleezza Rice and Bush himself, he gives the impression of +having calmly accepted the idea that the project of war and reconstruction +which the Administration has now taken on may be a little exhausting for +those charged with carrying it out but is unquestionably right, the only +truly prudent course. + +When I went to see Libby, not long ago, I asked him whether, before +September 11th, American policy toward terrorism should have been +different. He went to his desk and got out a large black loose-leaf binder, +filled with typewritten sheets interspersed with foldout maps of the Middle +East. He looked through it for a long minute, formulating his answer. + +"Let us stack it up," he said at last. "Somalia, 1993; 1994, the discovery +of the Al Qaeda-related plot in the Philippines; 1993, the World Trade +Center, first bombing; 1993, the attempt to assassinate President Bush, +former President Bush, and the lack of response to that, the lack of a +serious response to that; 1995, the Riyadh bombing; 1996, the Khobar +bombing; 1998, the Kenyan embassy bombing and the Tanzanian embassy +bombing; 1999, the plot to launch millennium attacks; 2000, the bombing of +the Cole. Throughout this period, infractions on inspections by the Iraqis, +and eventually the withdrawal of the entire inspection regime; and the +failure to respond significantly to Iraqi incursions in the Kurdish areas. +No one would say these challenges posed easy problems, but if you take that +long list and you ask, 'Did we respond in a way which discouraged people +from supporting terrorist activities, or activities clearly against our +interests? Did we help to shape the environment in a way which discouraged +further aggressions against U.S. interests?,' many observers conclude no, +and ask whether it was then easier for someone like Osama bin Laden to rise +up and say credibly, 'The Americans don't have the stomach to defend +themselves. They won't take casualties to defend their interests. They are +morally weak.' " + +Libby insisted that the American response to September 11th has not been +standard or foreordained. "Look at what the President has done in +Afghanistan," he said, "and look at his speech to the joint session of +Congress"-meaning the State of the Union Message, in January. "He made it +clear that it's an important area. He made it clear that we believe in +expanding the zone of democracy even in this difficult part of the world. +He made it clear that we stand by our friends and defend our interests. And +he had the courage to identify those states which present a problem, and to +begin to build consensus for action that would need to be taken if there is +not a change of behavior on their part. Take the Afghan case, for example. +There are many other courses that the President could have taken. He could +have waited for juridical proof before we responded. He could have engaged +in long negotiations with the Taliban. He could have failed to seek a new +relationship with Pakistan, based on its past nuclear tests, or been so +afraid of weakening Pakistan that we didn't seek its help. This list could +go on to twice or three times the length I've mentioned so far. But, +instead, the President saw an opportunity to refashion relations while +standing up for our interests. The problem is complex, and we don't know +yet how it will end, but we have opened new prospects for relations not +only with Afghanistan, as important as it was as a threat, but with the +states of Central Asia, Pakistan, Russia, and, as it may develop, with the +states of Southwest Asia more generally." + +We moved on to Iraq, and the question of what makes Saddam Hussein +unacceptable, in the Administration's eyes. "The issue is not inspections," +Libby said. "The issue is the Iraqis' promise not to have weapons of mass +destruction, their promise to recognize the boundaries of Kuwait, their +promise not to threaten other countries, and other promises that they made +in '91, and a number of U.N. resolutions, including all the other problems +I listed. Whether it was wise or not-and that is the subject of debate-Iraq +was given a second chance to abide by international norms. It failed to +take that chance then, and annually for the next ten years." + +"What's your level of confidence," I asked him, "that the current regime +will, in fact, change its behavior in a way that you will be satisfied by?" + +He ran his hand over his face and then gave me a direct gaze and spoke +slowly and deliberately. "There is no basis in Iraq's past behavior to have +confidence in good-faith efforts on their part to change their behavior." + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00766.9ac5716a891643ea31d43388a282cbbb b/Ch3/datasets/spam/easy_ham/00766.9ac5716a891643ea31d43388a282cbbb new file mode 100644 index 000000000..5a8a88ead --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00766.9ac5716a891643ea31d43388a282cbbb @@ -0,0 +1,72 @@ +From fork-admin@xent.com Tue Sep 24 17:55:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6380A16F03 + for ; Tue, 24 Sep 2002 17:55:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 17:55:25 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OFN0C09794 for ; + Tue, 24 Sep 2002 16:23:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C3B8B2940B5; Tue, 24 Sep 2002 08:19:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id 6D2D629409A for ; + Tue, 24 Sep 2002 08:18:46 -0700 (PDT) +Received: (qmail 14882 invoked by uid 19621); 24 Sep 2002 15:20:37 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 24 Sep 2002 15:20:37 -0000 +Subject: RE: liberal defnitions +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: +References: +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +Message-Id: <1032881662.24435.8.camel@avalon> +MIME-Version: 1.0 +X-Mailer: Evolution/1.0.2-5mdk +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 24 Sep 2002 08:40:17 -0700 + +This situation wouldn't have happened in the first place if California +didn't have economically insane regulations. They created a regulatory +climate that facilitated this. So yes, it is the product of +over-regulation. + + +-James Rogers + jamesr@best.com + + +On Tue, 2002-09-24 at 05:17, Geege Schuman wrote: +> from slate's "today's papers": +> The New York Times and Los Angeles Times both lead with word that +> a federal judge ruled yesterday that the nation's largest +> national gas pipeline company, El Paso, illegally withheld gas +> from the market during California's energy squeeze in 2000-01. +> The judge concluded that El Paso left 21 percent of its capacity +> in the state off-line, thus driving up the price of gas and +> helping to induce rolling blackouts. +> +> and this is the product of overregulation? + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00767.d5b223070f2a19834daa88bc4338354d b/Ch3/datasets/spam/easy_ham/00767.d5b223070f2a19834daa88bc4338354d new file mode 100644 index 000000000..99a63bd00 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00767.d5b223070f2a19834daa88bc4338354d @@ -0,0 +1,102 @@ +From fork-admin@xent.com Tue Sep 24 17:55:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EA6B116F03 + for ; Tue, 24 Sep 2002 17:55:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 17:55:26 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OG31C11128 for ; + Tue, 24 Sep 2002 17:03:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DFDD42940C2; Tue, 24 Sep 2002 08:59:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 19DB129409A for + ; Tue, 24 Sep 2002 08:58:09 -0700 (PDT) +Received: (qmail 13492 invoked by uid 508); 24 Sep 2002 15:59:41 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.2) by + venus.phpwebhosting.com with SMTP; 24 Sep 2002 15:59:41 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8OG1iA18403; Tue, 24 Sep 2002 18:01:45 + +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: forkit! +Cc: grisvalpen +Subject: Re: [s-t] Scoot boss's wife orders hit. +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 18:01:44 +0200 (CEST) + +---------- Forwarded message ---------- +Date: Mon, 23 Sep 2002 09:52:44 -0700 +From: mis@seiden.com +Subject: Re: [s-t] Scoot boss's wife orders hit. + + +the "independent", a shopper's newspaper in the sf bay area, (the +operational definition of that media category is "no matter how hard +you try you can't get them to stop delivering it") had this story on +aug 24, 2002: + +"Dot-com downturn linked to domestic violence" + +Domestic-violence worker Kathy Black remembers watching the Nasdaq +take a nastydive on MSNBC, in March 2000. + +"I knew then that we would have a lot of work on our hands," Black said, +referring to the caseload at La Casa de las Madres, the city's largest +organization serving women and children affected by domestic violence. + +She was right. + +Calls to La Casa's crisis line increased by 33% in the last financial +year, and the service saw a 10 percent increase in the demand for +beds, with 232 women and 215 children utilizing the shelter service. +... + +Black said the dot-com collapse and a growing awareness of La Casa's +services were the two main reasons for the increase in calls. + +She said many of her clients had partners who were employed in +service-industry jobs utilized by dot-com workers +... + + + +On Mon, Sep 23, 2002 at 04:23:17PM +0100, Gordon Joly wrote: +> +> +> +> http://news.bbc.co.uk/1/low/england/2276467.stm +> +> +> Woman admits trying to hire hitman +> +> The former wife of an internet tycoon has admitted trying to hire a +> hitman to kill him after the breakdown of their 21-year marriage. +> +> +> -- +> Linux User No. 256022/// +> http://pobox.com/~gordo/ +> gordon.joly@pobox.com/// + + + diff --git a/Ch3/datasets/spam/easy_ham/00768.ce54703f83eb3bf04a04f665dbf55e96 b/Ch3/datasets/spam/easy_ham/00768.ce54703f83eb3bf04a04f665dbf55e96 new file mode 100644 index 000000000..1a205138e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00768.ce54703f83eb3bf04a04f665dbf55e96 @@ -0,0 +1,72 @@ +From fork-admin@xent.com Tue Sep 24 17:55:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9E96A16F16 + for ; Tue, 24 Sep 2002 17:55:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 17:55:28 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OG7iC11326 for ; + Tue, 24 Sep 2002 17:07:45 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3C7DB2940D4; Tue, 24 Sep 2002 09:00:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 1FA202940D3 for ; Tue, + 24 Sep 2002 08:59:24 -0700 (PDT) +Received: (qmail 14157 invoked from network); 24 Sep 2002 16:03:05 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 24 Sep 2002 16:03:05 -0000 +Reply-To: +From: "John Hall" +To: "FoRK" +Subject: RE: liberal defnitions +Message-Id: <004301c263e3$df487930$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +In-Reply-To: +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 09:03:00 -0700 + + +Yes, it is. You just want to be called a liberal when you really +aren't. + +> -----Original Message----- +> From: Geege Schuman [mailto:geege@barrera.org] +> Sent: Tuesday, September 24, 2002 5:12 AM +> To: johnhall@evergo.net; FoRK +> Subject: RE: liberal defnitions +> +> per john hall: +> "The opinion that EITHER we are spending too much OR we have too much +> regulation is pretty +> much anathema to liberal politics." +> +> no it's not. +> +> geege +> +> + + + diff --git a/Ch3/datasets/spam/easy_ham/00769.25bf9a767b5db0ed93f03c1637281663 b/Ch3/datasets/spam/easy_ham/00769.25bf9a767b5db0ed93f03c1637281663 new file mode 100644 index 000000000..727e2f9e7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00769.25bf9a767b5db0ed93f03c1637281663 @@ -0,0 +1,75 @@ +From fork-admin@xent.com Tue Sep 24 17:55:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 070DF16F03 + for ; Tue, 24 Sep 2002 17:55:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 17:55:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OGAEC11404 for ; + Tue, 24 Sep 2002 17:10:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id ACE072940DA; Tue, 24 Sep 2002 09:06:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from imo-r09.mx.aol.com (imo-r09.mx.aol.com [152.163.225.105]) + by xent.com (Postfix) with ESMTP id 522F329409A for ; + Tue, 24 Sep 2002 09:05:51 -0700 (PDT) +Received: from ThosStew@aol.com by imo-r09.mx.aol.com (mail_out_v34.10.) + id 2.1a3.92f0d57 (4418) for ; Tue, 24 Sep 2002 12:09:26 + -0400 (EDT) +From: ThosStew@aol.com +Message-Id: <1a3.92f0d57.2ac1e836@aol.com> +Subject: Re: liberal defnitions +To: fork@spamassassin.taint.org +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Mailer: AOL 5.0 for Mac sub 45 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 12:09:26 EDT + + +In a message dated 9/24/2002 11:24:58 AM, jamesr@best.com writes: + +>This situation wouldn't have happened in the first place if California +>didn't have economically insane regulations. They created a regulatory +>climate that facilitated this. So yes, it is the product of +>over-regulation. +> + +Which is to say, if you reduce the argument to absurdity, that law causes +crime. + +(Yes, I agree that badly written law can make life so frustrating that people +have little choice but to subvery it if they want to get anything done. This +is also true of corporate policies, and all other attempts to regulate +conduct by rules. Rules just don't work well when situations are fluid or +ambiguous. But I don't think that the misbehavior of energy companies in +California can properly be called well-intentioned lawbreaking by parties who +were trying to do the right thing but could do so only by falling afoul of +some technicality.) + +If you want to get to root causes, we should probably go to the slaying of +Abel by Cain. Perhaps we can figure out what went wrong then, and roll our +learning forward through history and create a FoRKtopia. + +Nonpartisanly, which is to say casting stones on all houses, whether +bicameral or unicameral, built on sand or on rock, to the left of them or to +the right of them, of glass or brick or twig or straw, + +Tom + + diff --git a/Ch3/datasets/spam/easy_ham/00770.b6b328aeb18316cabd60aa75025771d0 b/Ch3/datasets/spam/easy_ham/00770.b6b328aeb18316cabd60aa75025771d0 new file mode 100644 index 000000000..27123fee9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00770.b6b328aeb18316cabd60aa75025771d0 @@ -0,0 +1,109 @@ +From fork-admin@xent.com Tue Sep 24 17:55:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8E58B16F03 + for ; Tue, 24 Sep 2002 17:55:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 17:55:31 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OGQ7C11927 for ; + Tue, 24 Sep 2002 17:26:07 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E44E62940C6; Tue, 24 Sep 2002 09:22:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id B035829409A for ; + Tue, 24 Sep 2002 09:21:10 -0700 (PDT) +Received: (qmail 17772 invoked by uid 19621); 24 Sep 2002 16:23:01 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 24 Sep 2002 16:23:01 -0000 +Subject: CO2 and climate (was RE: Goodbye Global Warming) +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: +References: +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1032885762.24435.78.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 24 Sep 2002 09:42:42 -0700 + +On Mon, 2002-09-23 at 13:53, Jim Whitehead wrote: +> +> You have not explained why the increase in CO2 concentrations is not +> contributing to increasing global temperature. + + +There are a number of reasons to think that CO2 is not important to +controlling global temperature and that much of the CO2 increase may not +be anthropogenic. Some recent research points worth mentioning: + +Recent high-resolution studies of historical CO2 concentrations and +temperatures over hundreds of thousands of years have shown a modest +correlation between the two. In a number of cases, CO2 level increases +are not in phase with temperature increases and actually trail the +increase in temperature by a short time i.e. increases in temperature +preceded increases in CO2 concentrations. The more studies that are done +of the geological record, the more it seems that CO2 concentrations are +correlated with temperature increases, but are not significantly +causative. There is a lot of evidence that CO2 levels are regulated in a +fairly stable fashion. I don't believe anyone really has an +authoritative answer as to exactly how this works yet. + +With respect to absolute CO2 concentrations, it is also important to +point out that our best data to date suggests that they follow a fairly +regular cycle with a period of about 100,000 years. At previous cycle +peaks, the concentrations were similar to what they are now. If this +cycle has any validity (and we only have good data for 4-5 complete +cyclical periods, but which look surprisingly regular in shape and +time), then we should be almost exactly at a peak right now. As it +happens, current CO2 concentrations are within 10% of other previous +cyclical concentration peaks for which we have good data. In other +words, we may be adding to the CO2 levels, but it looks a lot like we +would be building a molehill on top of a mountain in the historical +record. At the very least, there is nothing anomalous about current CO2 +concentrations. + +Also, CO2 levels interact with the biosphere in a manner that ultimately +affects temperature. Again, the interaction is not entirely +predictable, but this is believed to be one of the regulating negative +feedback systems mentioned above. + +Last, as greenhouse gases go, CO2 isn't particularly potent, although it +makes up for it in volume in some cases. Gases such as water and +methane have a far greater impact as greenhouse gases on a per molecule +basis. Water vapor may actually be the key greenhouse gas, something +that CO2 only indirectly effects through its interaction with the +biosphere. + +CO2 was an easy mark for early environmentalism, but all the recent +studies and data I've seen gives me the impression that it is largely a +passenger on the climate ride rather than the driver. I certainly don't +think it is a healthy fixation if we're actually interested in +understanding warming trends. + +Cheers, + +-James Rogers + jamesr@best.com + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00771.2ce14d08f77127e0720658404cc4ce11 b/Ch3/datasets/spam/easy_ham/00771.2ce14d08f77127e0720658404cc4ce11 new file mode 100644 index 000000000..41e3fe38a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00771.2ce14d08f77127e0720658404cc4ce11 @@ -0,0 +1,137 @@ +From fork-admin@xent.com Tue Sep 24 23:31:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A36DC16F03 + for ; Tue, 24 Sep 2002 23:31:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 23:31:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OJD0C18266 for ; + Tue, 24 Sep 2002 20:13:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 19D072940D3; Tue, 24 Sep 2002 12:09:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id CB2E42940C8 for ; Tue, + 24 Sep 2002 12:08:09 -0700 (PDT) +Received: (qmail 30166 invoked from network); 24 Sep 2002 19:11:52 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 24 Sep 2002 19:11:52 -0000 +Reply-To: +From: "John Hall" +To: "FoRK" +Subject: RE: liberal defnitions +Message-Id: <000d01c263fe$3df8be30$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +In-Reply-To: +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 12:11:52 -0700 + + +Read the article. I'm afraid I don't understand how the transmission +prices could have hit $50/tcf. + +But I'm also really leery of telling a pipeline company they have to run +a pipeline at a higher pressure and that they should forego maintenance. +We had a big pipeline explosion up here awhile ago. + +So maybe the judge has a point. We'll see as the appeals work its way +out. + +> -----Original Message----- +> From: Geege Schuman [mailto:geege@barrera.org] +> Sent: Tuesday, September 24, 2002 5:16 AM +> To: johnhall@evergo.net +> Subject: RE: liberal defnitions +> +> from slate's "today's papers": The New York Times and Los Angeles +Times +> both lead with word that +> a federal judge ruled yesterday that the nation's largest +> national gas pipeline company, El Paso, illegally withheld gas +> from the market during California's energy squeeze in 2000-01. +> The judge concluded that El Paso left 21 percent of its capacity +> in the state off-line, thus driving up the price of gas and +> helping to induce rolling blackouts. +> +> and this is the product of overregulation? +> +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +John +> Hall +> Sent: Monday, September 23, 2002 11:57 PM +> To: FoRK +> Subject: liberal defnitions +> +> +> Depends on how much over spending vs. how much (and what type) over +> regulation. +> +> The biggest problem with over regulation is the costs can be +invisible. +> It also has the ability to single out particular people, while over +> spending spreads the damage more evenly. Rent control would be an +> example of a regulation solution that is in general worse than +spending +> tons of money on public housing. +> +> As for the definition of a liberal being someone who seeks to impose +> both, I find no fault in that definition whatsoever. The opinion that +> EITHER we are spending too much OR we have too much regulation is +pretty +> much anathema to liberal politics. +> +> Finally, those who argue that there are private replacements for much +> government regulation are not saying that a state of nature (no +private +> replacements, no government regulation) is better than government +> regulation itself. +> +> And in my experience people who label themselves 'Green' (which does +not +> include everyone who loves trees and thinks smokestacks are ugly) is a +> watermelon. +> +> +> +> +> > -----Original Message----- +> > From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +> Geege +> > Schuman +> > +> > funny. i read it as green = red, as in accounting, as in fiscally +> > irresponsible. which do you think is the worse indictment - +> > overregulation +> > or overspending? there are many (dickheads) who buy into the +> > neo-conservative media's (fox's) definiton of "liberal" as "one who +> seeks +> > to +> > impose both." +> +> +> + + + diff --git a/Ch3/datasets/spam/easy_ham/00772.ab8da3bd11afb162b0ccbd65edaf6cc8 b/Ch3/datasets/spam/easy_ham/00772.ab8da3bd11afb162b0ccbd65edaf6cc8 new file mode 100644 index 000000000..1a556e094 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00772.ab8da3bd11afb162b0ccbd65edaf6cc8 @@ -0,0 +1,63 @@ +From fork-admin@xent.com Tue Sep 24 23:31:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6232A16F03 + for ; Tue, 24 Sep 2002 23:31:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 23:31:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OKN0C20652 for ; + Tue, 24 Sep 2002 21:23:01 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 42D262940C7; Tue, 24 Sep 2002 13:19:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm2-36.sba1.netlojix.net + [207.71.218.132]) by xent.com (Postfix) with ESMTP id 68C3029409A for + ; Tue, 24 Sep 2002 13:18:18 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id NAA07757; + Tue, 24 Sep 2002 13:28:04 -0700 +Message-Id: <200209242028.NAA07757@maltesecat> +To: fork@spamassassin.taint.org +Subject: Re: SF Weekly's Ultimate SF Date lineup :-) +In-Reply-To: Message from fork-request@xent.com of + "Tue, 24 Sep 2002 10:15:01 PDT." + <20020924171501.13381.94248.Mailman@lair.xent.com> +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 13:28:04 -0700 + + + +> Proving, once again, that aviators get all the chicks... + +Just as long as they have the wherewithal +for avgas, anyway. + +I think Turpin once calculated that one +could do a decent amount of messing about +for about $30K of boat and $12K/year in +living expenses. + +What are the equivalent figures for live +aboard aircraft? + +-Dave + +(How difficult would it be to find the +harbormaster, after mooring to the top +of the Empire State Building?) + + diff --git a/Ch3/datasets/spam/easy_ham/00773.d8b19e7b6c9a53f4f37242b3f1ca1276 b/Ch3/datasets/spam/easy_ham/00773.d8b19e7b6c9a53f4f37242b3f1ca1276 new file mode 100644 index 000000000..af20d2e1b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00773.d8b19e7b6c9a53f4f37242b3f1ca1276 @@ -0,0 +1,57 @@ +From fork-admin@xent.com Tue Sep 24 23:55:17 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B383416F03 + for ; Tue, 24 Sep 2002 23:55:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 23:55:16 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OMnNC25822 for ; + Tue, 24 Sep 2002 23:49:23 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id F2D4F2940D5; Tue, 24 Sep 2002 15:45:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from alumnus.caltech.edu (alumnus.caltech.edu [131.215.49.51]) + by xent.com (Postfix) with ESMTP id DAAED29409A for ; + Tue, 24 Sep 2002 15:43:50 -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) by alumnus.caltech.edu + (8.12.3/8.12.3) with ESMTP id g8OMlSSV016389 for ; + Tue, 24 Sep 2002 15:47:29 -0700 (PDT) +MIME-Version: 1.0 (Apple Message framework v482) +Content-Type: text/plain; charset=US-ASCII; format=flowed +Subject: Random hack Q: drawing on CDs with lasers? +From: Rohit Khare +To: fork@spamassassin.taint.org +Content-Transfer-Encoding: 7bit +Message-Id: <977639A4-D00F-11D6-8F1E-000393A46DEA@alumni.caltech.edu> +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 15:47:23 -0700 + +O utensils of the world -- + +I wonder if it is possible to reverse-engineer the Reed-Solomon +error-correcting codes to create a bytestream such that, when burned +onto a CD, you can make out a picture in the diffraction pattern? + +I suppose this is a modern equivalent to line-printer artwork; I was +imagining using a CD-RW drive to use the outer track, say, to spell out +the disc title, creation time, etc. It would sure beat feeding CDs +through a laser printer :-) + +Rohit + + diff --git a/Ch3/datasets/spam/easy_ham/00774.1af9be3cd1aba6a371ee11dacc7d1025 b/Ch3/datasets/spam/easy_ham/00774.1af9be3cd1aba6a371ee11dacc7d1025 new file mode 100644 index 000000000..e5fd6d4de --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00774.1af9be3cd1aba6a371ee11dacc7d1025 @@ -0,0 +1,58 @@ +From fork-admin@xent.com Wed Sep 25 10:24:47 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1019C16F03 + for ; Wed, 25 Sep 2002 10:24:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 25 Sep 2002 10:24:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8P1A8C02395 for ; + Wed, 25 Sep 2002 02:10:09 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6F4DC2940D6; Tue, 24 Sep 2002 18:06:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 6FB8E29409A for + ; Tue, 24 Sep 2002 18:05:29 -0700 (PDT) +Received: (qmail 29904 invoked by uid 508); 25 Sep 2002 01:05:57 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.7) by + venus.phpwebhosting.com with SMTP; 25 Sep 2002 01:05:57 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8P195v31691; Wed, 25 Sep 2002 03:09:05 + +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: Rohit Khare +Cc: +Subject: Re: Random hack Q: drawing on CDs with lasers? +In-Reply-To: <977639A4-D00F-11D6-8F1E-000393A46DEA@alumni.caltech.edu> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 03:09:05 +0200 (CEST) + +On Tue, 24 Sep 2002, Rohit Khare wrote: + +> I suppose this is a modern equivalent to line-printer artwork; I was +> imagining using a CD-RW drive to use the outer track, say, to spell out +> the disc title, creation time, etc. It would sure beat feeding CDs +> through a laser printer :-) + +There are commercial burners which can be labeled that way. Patterns in +the unburnt section. + + diff --git a/Ch3/datasets/spam/easy_ham/00775.0e012f373467846510d9db297e99a008 b/Ch3/datasets/spam/easy_ham/00775.0e012f373467846510d9db297e99a008 new file mode 100644 index 000000000..9a9e786bb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00775.0e012f373467846510d9db297e99a008 @@ -0,0 +1,98 @@ +From fork-admin@xent.com Wed Sep 25 10:24:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B222216F03 + for ; Wed, 25 Sep 2002 10:24:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 25 Sep 2002 10:24:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8P1d1C03520 for ; + Wed, 25 Sep 2002 02:39:02 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 102A32940C8; Tue, 24 Sep 2002 18:35:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 3DEC729409A for ; + Tue, 24 Sep 2002 18:34:07 -0700 (PDT) +Received: from adsl-17-246-231.jax.bellsouth.net ([68.17.246.231] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17u19W-0007AG-00 for fork@xent.com; Tue, 24 Sep 2002 21:39:46 -0400 +From: "Geege Schuman" +To: +Subject: Liberalism in America +Message-Id: +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----=_NextPart_000_0005_01C26412.7545C1D0" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 21:36:35 -0400 + +This is a multi-part message in MIME format. + +------=_NextPart_000_0005_01C26412.7545C1D0 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit + +liberalism +propagandized as meddling +in truth, the middle + +"American liberalism believes that in this respect it has made a major +contribution to the grand strategy of freedom. Where both capitalists and +socialists in the 1930's were trying to narrow the choice to either/or -- +either laissez-faire capitalism or bureaucratic socialism -- the New Deal +persisted in its vigorous faith that human intelligence and social +experiment could work out a stable foundation for freedom in a context of +security and for security in a context of freedom. That faith remains the +best hope of free society today." + +fluid yet crunchy, +gg + + + + + http://www.english.upenn.edu/~afilreis/50s/schleslib.html + +------=_NextPart_000_0005_01C26412.7545C1D0 +Content-Type: application/octet-stream; + name="Liberalism in America.url" +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment; + filename="Liberalism in America.url" + +[DEFAULT] +BASEURL=http://www.english.upenn.edu/~afilreis/50s/schleslib.html +[InternetShortcut] +URL=http://www.english.upenn.edu/~afilreis/50s/schleslib.html +Modified=E0824ED43364C201DE + +------=_NextPart_000_0005_01C26412.7545C1D0-- + + + diff --git a/Ch3/datasets/spam/easy_ham/00776.20cdc88a69e453f1ef0dd3b5f55cc717 b/Ch3/datasets/spam/easy_ham/00776.20cdc88a69e453f1ef0dd3b5f55cc717 new file mode 100644 index 000000000..9bca83d71 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00776.20cdc88a69e453f1ef0dd3b5f55cc717 @@ -0,0 +1,138 @@ +From fork-admin@xent.com Wed Sep 25 10:24:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8B23816F03 + for ; Wed, 25 Sep 2002 10:24:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 25 Sep 2002 10:24:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8P1i3C03770 for ; + Wed, 25 Sep 2002 02:44:04 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id EFBC62940F4; Tue, 24 Sep 2002 18:38:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hall.mail.mindspring.net (hall.mail.mindspring.net + [207.69.200.60]) by xent.com (Postfix) with ESMTP id 40A022940F3 for + ; Tue, 24 Sep 2002 18:37:43 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + hall.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17u1B3-0000AQ-00; + Tue, 24 Sep 2002 21:41:22 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: Re: SF Weekly's Ultimate SF Date lineup :-) +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 21:34:55 -0400 + +Righ, somebody. Reminds me of the old Divorced Man's exposition of what +happened to him. + +"First, you get a ring. Then you give it away. Then, you get a house. And +you give *that* away...." + +Just kidding, Darling... + +;-). + +Cheers, +RAH +Who, um, doesn't own a house... + + +--- begin forwarded text + + +Date: Tue, 24 Sep 2002 20:12:12 -0400 +From: Somebody +To: "R. A. Hettinga" +Subject: Re: SF Weekly's Ultimate SF Date lineup :-) + +Bob, + + Living aboard a Cessna 172 would be challenging, but I did meet a +couple at an airshow in Point Mugu in 1995 or so that had converted an +old seaplane (it was a bit larger than a PBY, I think) to something of a +floating, flying RV. They visited a lot of airshows and covered a lot of +miles. I'm sure maintenance (on a 50+ year old airframe), fuel (for two +large radial engines) insurance and other costs were out of my price +range, but what a hoot! + + On a more realistic note, the flight to Half Moon bay was probably 2 +hours of flight time at about $75/hour in the Cessna. Not exactly a +cheap date, but that's nothing compared to the money I've spent on her +since. (And loved every minute of it, Darling!!) + + + + +"R. A. Hettinga" wrote: + +> --- begin forwarded text +> +> Status: RO +> Delivered-To: fork@spamassassin.taint.org +> To: fork@spamassassin.taint.org +> Subject: Re: SF Weekly's Ultimate SF Date lineup :-) +> From: Dave Long +> Sender: fork-admin@xent.com +> Date: Tue, 24 Sep 2002 13:28:04 -0700 +> +> > Proving, once again, that aviators get all the chicks... +> +> Just as long as they have the wherewithal +> for avgas, anyway. +> +> I think Turpin once calculated that one +> could do a decent amount of messing about +> for about $30K of boat and $12K/year in +> living expenses. +> +> What are the equivalent figures for live +> aboard aircraft? +> +> -Dave +> +> (How difficult would it be to find the +> harbormaster, after mooring to the top +> of the Empire State Building?) +> +> --- end forwarded text +> +> -- +> ----------------- +> R. A. Hettinga +> The Internet Bearer Underwriting Corporation +> 44 Farquhar Street, Boston, MA 02131 USA +> "... however it may deserve respect for its usefulness and antiquity, +> [predicting the end of the world] has not been found agreeable to +> experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + +--- end forwarded text + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00777.5abc0824f35b966cf589b15c4f10f2d2 b/Ch3/datasets/spam/easy_ham/00777.5abc0824f35b966cf589b15c4f10f2d2 new file mode 100644 index 000000000..f48eb1933 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00777.5abc0824f35b966cf589b15c4f10f2d2 @@ -0,0 +1,74 @@ +From fork-admin@xent.com Wed Sep 25 10:24:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0C25616F03 + for ; Wed, 25 Sep 2002 10:24:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 25 Sep 2002 10:24:53 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8P8L3C18779 for ; + Wed, 25 Sep 2002 09:21:03 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 5B3A22940E5; Wed, 25 Sep 2002 01:17:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from alumnus.caltech.edu (alumnus.caltech.edu [131.215.49.51]) + by xent.com (Postfix) with ESMTP id B170529409A for ; + Wed, 25 Sep 2002 01:16:18 -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) by alumnus.caltech.edu + (8.12.3/8.12.3) with ESMTP id g8P8K2SV027166 for ; + Wed, 25 Sep 2002 01:20:03 -0700 (PDT) +MIME-Version: 1.0 (Apple Message framework v482) +Content-Type: text/plain; charset=US-ASCII; format=flowed +Subject: Digital radio playlists are prohibited?! +From: Rohit Khare +To: Fork@xent.com +Content-Transfer-Encoding: 7bit +Message-Id: <95745878-D05F-11D6-8F1E-000393A46DEA@alumni.caltech.edu> +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 01:19:59 -0700 + +Anyone heard of this law before? + +> Q. Can I get a playlist? +> A. We are unable to offer a playlist. The Digital Performance Right in +> Sound Recordings Act of 1995 passed by Congress prevents us from +> disclosing such information. The Digital Law states that if one is +> transmitting a digital signal, song information cannot be +> pre-announced. It is a Music Choice policy not to release a playlist of +> upcoming or previously played songs. + +Recently, MusicChoice upgraded their website with a very important +service, as far as I'm concerned: real-time song info from their +website. My DirecTV receiver is up on a shelf (and its display scrolls +intermittently); and I'm surely not going to fire up my projector while +listening to the "radio", so I'm quite happy that I can retrieve r/t +song info with URLs like: + +http://backstage.musicchoice.com/songid/channels/soundsoftheseasons.asp +http://backstage.musicchoice.com/songid/channels/rap.asp +http://backstage.musicchoice.com/songid/channels/opera.asp +etc... + +Now, if I were a more eager hacker, I'd write up little WSDL stubs for +these event streams (they're clearly not worried about load, since their +own web pages specify 15 sec meta-refresh) and then feed 'em through a +content router to alert me to cool songs. Heck, cross-reference the +service to CDDB and... :-) + +RK + + diff --git a/Ch3/datasets/spam/easy_ham/00778.d83af9d544ca2957ea6f326728ad004c b/Ch3/datasets/spam/easy_ham/00778.d83af9d544ca2957ea6f326728ad004c new file mode 100644 index 000000000..3f4fa7d99 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00778.d83af9d544ca2957ea6f326728ad004c @@ -0,0 +1,66 @@ +From fork-admin@xent.com Wed Sep 25 10:24:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7ED4016F03 + for ; Wed, 25 Sep 2002 10:24:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 25 Sep 2002 10:24:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8P8b2C19248 for ; + Wed, 25 Sep 2002 09:37:02 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6CF4D2940EB; Wed, 25 Sep 2002 01:33:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id 858F029409A for ; Wed, 25 Sep 2002 01:32:34 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id EC486C44D; + Wed, 25 Sep 2002 10:35:59 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: SF Weekly's Ultimate SF Date lineup :-) +Message-Id: <20020925083559.EC486C44D@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 10:35:59 +0200 (CEST) + +Russell Turpin wrote: +>Invite her for an afternoon cruise under the Golden Gate bridge in +>your Stonehorse day sailor. + +Sounds good. + + +>Under way, ask her if she'd like to take the stick. + +Whoah! That's a rather direct approach! + + +R. A. Hettinga quoted: +>From: Somebody +>[...] what I did in 1983 was to rent a plane from the Moffett Field +>flying club and take her on an aerial tour + +Sounds great. + + +>I can't recall whether or not I gave her any stick time. + +Can't remember if he's in the mile-high club? Even worse!!! + + +R + + diff --git a/Ch3/datasets/spam/easy_ham/00779.d5e815dc2dda6819f41227fce324b31d b/Ch3/datasets/spam/easy_ham/00779.d5e815dc2dda6819f41227fce324b31d new file mode 100644 index 000000000..253de9785 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00779.d5e815dc2dda6819f41227fce324b31d @@ -0,0 +1,81 @@ +From fork-admin@xent.com Wed Sep 25 21:33:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CE0C416F03 + for ; Wed, 25 Sep 2002 21:33:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 25 Sep 2002 21:33:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8PIM9C08544 for ; + Wed, 25 Sep 2002 19:22:09 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4263029409F; Wed, 25 Sep 2002 11:18:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain + (pool-162-83-148-146.ny5030.east.verizon.net [162.83.148.146]) by xent.com + (Postfix) with ESMTP id 2507429409A for ; Wed, + 25 Sep 2002 11:17:46 -0700 (PDT) +Received: from localhost (lgonze@localhost) by localhost.localdomain + (8.11.6/8.11.6) with ESMTP id g8PIKQg00488 for ; + Wed, 25 Sep 2002 14:20:30 -0400 +X-Authentication-Warning: localhost.localdomain: lgonze owned process + doing -bs +From: Lucas Gonze +X-X-Sender: lgonze@localhost.localdomain +Cc: FoRK +Subject: Re: The Great Power-Shortage Myth +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 14:20:26 -0400 (EDT) + +> The only circumstances in which a business will not be ready--indeed, +> eager--to do an additional volume of business is if it is physically unable +> to do so because it lacks the necessary physical means of doing so, or +> because the costs it incurs in doing so exceed the additional sales revenue +> it will receive. + +That is a fully retarded view of economics, and pretty much the same kind +of clueless oversimplication that led to the blackouts. There are a +bazillion factors that affect game strategies, which is what the state of +California messed up and the energy producers exploited. + +I'm not convinced that the only way to prevent future energy debacles like +the blackouts is to reregulate. Ultimately we have to blame the people +who crafted the game rules in a way that invited blackouts and +exploitation. Given that the particular set of rules crafted by the state +of California sucked, does there exist a set of rules that doesn't suck? +If there does exist a better set of rules, then reregulation isn't +necessarily the answer. + +You can't blame businesses for being profit maximizers. Yes, the people +involved were heartless and corrupt. But mainly they just did their +jobs. + +The guilty parties are either the mathematicians and economists who wrote +the rules or, if the mathematicians and economists said there were no good +rules, pro-deregulation politicians who went ahead anyway. + +- Lucas + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00780.3c407d4d7361184c739b0346741036dd b/Ch3/datasets/spam/easy_ham/00780.3c407d4d7361184c739b0346741036dd new file mode 100644 index 000000000..da4be0940 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00780.3c407d4d7361184c739b0346741036dd @@ -0,0 +1,176 @@ +From fork-admin@xent.com Thu Sep 26 11:04:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DB70116F03 + for ; Thu, 26 Sep 2002 11:04:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:04:27 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8PL1BC13774 for ; + Wed, 25 Sep 2002 22:01:12 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id CD62F2940A5; Wed, 25 Sep 2002 13:57:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barry.mail.mindspring.net (barry.mail.mindspring.net + [207.69.200.25]) by xent.com (Postfix) with ESMTP id 8C11429409A for + ; Wed, 25 Sep 2002 13:54:33 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + barry.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17uI1g-00011d-00 + for fork@xent.com; Wed, 25 Sep 2002 15:40:48 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: California needs intelligent energy deregulation +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 15:39:40 -0400 + + +--- begin forwarded text + + +Date: Wed, 25 Sep 2002 13:57:15 -0400 +To: Digital Bearer Settlement List +From: "R. A. Hettinga" +Subject: California needs intelligent energy deregulation +Sender: + +http://www.siliconvalley.com/mld/siliconvalley/4144696.htm?template=contentModules/printstory.jsp + +Posted on Tue, Sep. 24, 2002 + + +Dan Gillmor: State needs intelligent energy deregulation + +By Dan Gillmor +Mercury News Technology Columnist + +The facts were trade and government secrets at the time. But the energy +industry failed the smell test in 2000 and 2001 as it tried to justify +soaring wholesale electricity and natural-gas prices in California. + +Now, as investigators and regulators unravel the reasons for a financial +and fiscal mess we'll be cleaning up for decades, we're learning what +everyone suspected. Market games helped engineer the price spikes. + +The latest manipulation was highlighted in Monday's finding by a federal +administrative law judge, who said a dominant natural-gas company squeezed +supplies in order to squeeze customers. His ruling came a few days after +California's Public Utilities Commission reported that electricity +generators mysteriously failed to use available capacity during the crunch, +also driving up prices. + +And don't forget the sleazy games by energy traders who gleefully worked +the system, in schemes best summed up by an Enron insider's boast in a +memorandum made public in May, that ``Enron gets paid for moving energy to +relieve congestion without actually moving any energy or relieving any +congestion.'' + +How much of this was illegal, as opposed to simply amoral, remains to be +seen. Unfortunately, California's response -- confusion, lawsuits and +policy tweaks -- hasn't been sufficient. + +More unfortunately, even if the state suddenly did all the right things -- +including a hard-nosed program designed to free ourselves from the gougers' +grips -- we would need a willing federal partner. But it's foolish to think +that the Bush administration would do much to help one of its least +favorite states, or do anything that conflicts with its love of +traditional, non-renewable energy sources. + +If the lawsuits against various energy companies and traders bear any +fruit, the best we can expect is to pay off some of the massive debts the +state amassed to prevent a total collapse in early 2001. That's a +reasonable approach, but don't expect miracles. + +State policies are moving the wrong way on utility regulation, meanwhile. +Instead of relentlessly pursuing smart deregulation -- still a good idea if +it gives customers genuine choices -- state laws and regulations ``put the +utilities back in the business of buying energy for captive customers,'' +notes V. John White, executive director of the Sacramento-based Center for +Energy Efficiency and Renewable Technologies (www.ceert.org). + +It's tempting to call for an outright state takeover of the utilities -- +tempting but a bad idea. When there's genuine competition, as we could +achieve in electricity generation, the private sector tends to do a better +job. Instead of abandoning deregulation, California should find a way to +inject real competition into the market. + +We do need to recognize that the current system of delivering electricity +defies privatization, at least under current conditions. Smart regulation +is essential. + +But the best response to gouging is to use less of what the gougers +control. There are two ways: conservation and replacement. We need more of +both. + +The best recent step is a new state law that slowly but surely ratchets up +the use of electricity from renewables. By 2017, California's utilities +will have to get 20 percent of their power from solar and other renewable +sources. Several power companies are expected to do this even sooner. + +But this law has an element of old-line thinking, the captive-customer +model we need to be getting away from, not sustaining. Lip service to newer +ideas isn't enough. + +The state should be removing barriers to micro-generation systems, small +generators that can run on a variety of fuels and provide decentralized, +harder-to-disrupt electricity to homes and businesses. This technology is +coming along fast. State policies are not keeping pace. + +Investing to save energy is increasingly the smartest move of all. +California should be doing more to encourage this, whether through tax +incentives or outright grants in low-income households. California hasn't +done badly on conservation in a general sense, and energy customers did +react to last year's soaring rates and blackouts by cutting back, but it's +lunacy to wait for the next crisis when we can do something to avoid it +altogether. + +Maybe this is all pointless. The Bush administration's energy policies, so +grossly tilted toward the unholy trinity of oil, coal and nuclear, are +making us all more vulnerable. Never mind what might happen if the coming +war in Iraq goes badly. + +It's pointless to hope for a sane federal policy -- a crash program to +drastically speed the inevitable transition to a hydrogen-based energy +system. But the largest state, one of the world's major economies in its +own right, does have some clout. We can hit the rip-off artists where it +hurts, and protect ourselves from even more serious disruptions. Maybe next +year. + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + +--- end forwarded text + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00781.f2f409be2c85d1303022b58db1551d85 b/Ch3/datasets/spam/easy_ham/00781.f2f409be2c85d1303022b58db1551d85 new file mode 100644 index 000000000..7f316e068 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00781.f2f409be2c85d1303022b58db1551d85 @@ -0,0 +1,160 @@ +From fork-admin@xent.com Thu Sep 26 11:04:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 90BF116F03 + for ; Thu, 26 Sep 2002 11:04:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:04:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8PLFFC14432 for ; + Wed, 25 Sep 2002 22:15:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id CB1062940E9; Wed, 25 Sep 2002 14:11:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx2.ucsc.edu [128.114.129.35]) by + xent.com (Postfix) with ESMTP id BD72429409A for ; + Wed, 25 Sep 2002 14:10:49 -0700 (PDT) +Received: from Tycho (dhcp-55-196.cse.ucsc.edu [128.114.55.196]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g8PHxFT27510 for + ; Wed, 25 Sep 2002 10:59:15 -0700 (PDT) +From: "Jim Whitehead" +To: +Subject: RE: CO2 and climate (was RE: Goodbye Global Warming) +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <1032885762.24435.78.camel@avalon> +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 10:56:41 -0700 + +OK, let's bring some data into the discussion: +http://www.grida.no/climate/vital/02.htm +(A graph, derived from Vostok ice core samples, of CO2 and temperature +fluctuations over the past 400k years). + +> Recent high-resolution studies of historical CO2 concentrations and +> temperatures over hundreds of thousands of years have shown a modest +> correlation between the two. In a number of cases, CO2 level increases +> are not in phase with temperature increases and actually trail the +> increase in temperature by a short time i.e. increases in temperature +> preceded increases in CO2 concentrations. The more studies that are done +> of the geological record, the more it seems that CO2 concentrations are +> correlated with temperature increases, but are not significantly +> causative. + +Based on the Vostok data, you are right, there is a very strong correlation +between temperature and CO2 concentrations, but it doesn't always appear to +be causal. + +> With respect to absolute CO2 concentrations, it is also important to +> point out that our best data to date suggests that they follow a fairly +> regular cycle with a period of about 100,000 years. + +Also correct -- the peak of each cycle is at about 290-300 ppm CO2. + +> As it +> happens, current CO2 concentrations are within 10% of other previous +> cyclical concentration peaks for which we have good data. + +Not correct. Mauna Loa data and + show that the current CO2 +concentrations are at 370ppm, 18% *greater* than the *highest* recorded +value from the past 400k years. Furthermore, CO2 concentrations are growing +at 15ppm every 10 years, much faster than any recorded increase in the +Vostok data (though perhaps the Vostok data isn't capable of such fine +resolution). + +> In other words, we may be adding to the CO2 levels, + +No, we are *definitely* adding to CO2 levels. Look at the following chart: +http://www.grida.no/climate/vital/07.htm +(Shows CO2 concentrations since 1870, the "historical record"). + +Not only is the CO2 increase over 130 years unprecedented in the Vostok +record, it is clear that the rate of change is *increasing*, not decreasing. +There is no other compelling explanation for this increase, except for +anthropogenic input. You're really out on the fringe if you're debating +this -- even global warming skeptics generally concede this point. + +> but it looks a lot like we +> would be building a molehill on top of a mountain in the historical +> record. At the very least, there is nothing anomalous about current CO2 +> concentrations. + +Wrong again. Current CO2 levels are currently unprecedented over the past +400k years, unless there is some mechanism that allows CO2 levels to quickly +spike, and then return back to "normal" background levels (and hence the +spike might not show up in the ice cores). + +Still, by around 2075-2100 we will have reached 500 ppm CO2, a level that +even you would have a hard time arguing away. + +> Also, CO2 levels interact with the biosphere in a manner that ultimately +> affects temperature. Again, the interaction is not entirely +> predictable, but this is believed to be one of the regulating negative +> feedback systems mentioned above. + +Yes, clouds and oceans are a big unknown. Still, we know ocean water has a +finite capacity to store CO2, and if the world temperature doesn't increase, +but we all have Seattle-like weather all the time, the effects would be +enormous. + +> Last, as greenhouse gases go, CO2 isn't particularly potent, although it +> makes up for it in volume in some cases. Gases such as water and +> methane have a far greater impact as greenhouse gases on a per molecule +> basis. Water vapor may actually be the key greenhouse gas, something +> that CO2 only indirectly effects through its interaction with the +> biosphere. + +Correct. + +Data on relative contributions of greenhouse gasses: +http://www.grida.no/climate/vital/05.htm + +Note that methane concentrations now are *much* higher than pre-industrial +levels (many cows farting, and rice paddies outgassing), and methane is also +a contributor in the formation of atmospheric water vapor. Another clearly +anthropogenic increase in a greenhouse gas. I'm in favor of reductions in +methane levels as well. + +Data on water vapor here: +http://www.agu.org/sci_soc/mockler.html + +> CO2 was an easy mark for early environmentalism, but all the recent +> studies and data I've seen gives me the impression that it is largely a +> passenger on the climate ride rather than the driver. + +I tend to think that holistic, and techical approaches would work best in +reducing global warming. I favor an energy policy that has a mix of solar, +wind and nuclear, with all carbon-based combustion using renewable sources +of C-H bonds. Aggressive pursuit of carbon sink strategies also makes sense +(burying trees deep underground, for example). Approaches that involve +reductions in lifestyle to a "sustainable" level are unrealistic -- +Americans just won't do it (you'd be surprised at the number of climate +change researchers driving SUVs). But, as California showed during last +year's energy crisis, shifts in patterns of consumption are possible, and +improved efficiency is an easy sell. + +- Jim + + diff --git a/Ch3/datasets/spam/easy_ham/00782.6600ba2aef2816e4852a4c8e43130591 b/Ch3/datasets/spam/easy_ham/00782.6600ba2aef2816e4852a4c8e43130591 new file mode 100644 index 000000000..bce566725 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00782.6600ba2aef2816e4852a4c8e43130591 @@ -0,0 +1,116 @@ +From fork-admin@xent.com Thu Sep 26 11:04:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6C03016F03 + for ; Thu, 26 Sep 2002 11:04:43 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:04:43 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8PMZ8C16870 for ; + Wed, 25 Sep 2002 23:35:08 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BC05E29410C; Wed, 25 Sep 2002 15:31:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm3-11.sba1.netlojix.net + [207.71.218.155]) by xent.com (Postfix) with ESMTP id D9DAC294108 for + ; Wed, 25 Sep 2002 15:30:20 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id PAA24122; + Wed, 25 Sep 2002 15:40:12 -0700 +Message-Id: <200209252240.PAA24122@maltesecat> +To: fork@spamassassin.taint.org +Subject: Kissinger +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 15:40:12 -0700 + + +[can't think of how I'd be running +afoul of the spam filters with this +post, so here's the second try...] + +Kissinger's book _Does America Need +a Foreign Policy?_ provides a few +handy abstractions: + +> The ultimate dilemma of the statesman is to strike a balance between +> values ["idealism"] and interests ["realism"] and, occasionally, +> between peace and justice. + +Also, he views historical American +approaches to foreign policy as a +bundle of three fibers: + +Hamiltonian - We should only get + involved in foreign adventures + to preserve balances of power. + +Wilsonian - We should only get + involved in foreign adventures + to further democracy, etc. + +Jacksonian - We should never get + involved in foreign adventures. + Unless we're attacked. Then we + go Rambo. + +He has tactfully left out the hard +realists*; as for the rest I gather +wilsonians play the idealists, and +hamiltonians act where values and +interests intersect, and jacksonians +act only when values and interests +overlap. + +Kissinger himself seems to be a +Hamiltonian; much of the book is +about how he thinks we ought to +be shaping the balance of power +in various foreign regions. + +Maybe I've been too affected by +Kant, but I can't see that such +a strategy works unless one can +count on a Bismarck runnning it: +how lopsided does the US look if +everyone tries to run a balance +of power politics? + +- -Dave + +* +> The road to empire leads to domestic decay because, in time, the claims +> of omnipotence erode domestic restraints. No empire has avoided the +> road to Caesarism unless, like the British Empire, it devolved its +> power before this process could develop. In long-lasting empires, +> every problem turns into a domestic issue [which should be handled +> very differently from international ones] because the outside world +> no longer provides a counterweight. And as challenges grow more +> diffuse and increasingly remote from the historic domestic base, +> internal struggles become ever more bitter and in time violent. +> A deliberate quest for hegemony is the surest way to destroy the +> values that made the United States great. + +Kings and tyrants generically have +followed the same power politics: +garner popular support by keeping +potential oligarchs down. In other +traditions, a king is a legitimate +tyrant, and a tyrant an illegitimate +king. In the US, I'd hope that we, +like Samuel, wouldn't naturally make +such fine distinctions. + + diff --git a/Ch3/datasets/spam/easy_ham/00783.14a724489223eda0063e308c6914ee38 b/Ch3/datasets/spam/easy_ham/00783.14a724489223eda0063e308c6914ee38 new file mode 100644 index 000000000..79a3a953d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00783.14a724489223eda0063e308c6914ee38 @@ -0,0 +1,69 @@ +From fork-admin@xent.com Thu Sep 26 11:04:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 428D116F03 + for ; Thu, 26 Sep 2002 11:04:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:04:45 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8PMfPC17153 for ; + Wed, 25 Sep 2002 23:41:27 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BE1B9294101; Wed, 25 Sep 2002 15:37:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 47C0229409A for ; Wed, + 25 Sep 2002 15:36:57 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 8FF933EDD7; + Wed, 25 Sep 2002 18:45:29 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 8BFAD3EDD6 for ; Wed, + 25 Sep 2002 18:45:29 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Re: Digital radio playlists are prohibited?! +In-Reply-To: <132203498905.20020925163453@magnesium.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 18:45:29 -0400 (EDT) + +--] +--] Anyone heard of this law before? + +Back when I was running the WSMF shoutcast server these restrictions were +just being placed on netcasters. Most folks laughed it off. Now with the +license fees its not laughable anymore. If you pay the fee you are bound +to the restrictions, if you dont your running the criminal line. + +I still run a stream up on live365. Its been playing the same 10 hour +block of Jean Shepard shows for the last year. I really should change them +up. + +If I were going to do the old WSMF shoutcast now adays I would either +spend lots of time going over regulations to see what I can or cannot do +or I would just chuck the regs out and do what I want. Or I might write +some apps to stay in regs ..I dont know..one thing is for sure it +defiently takes the spontaneous edge off things:)- + +F Murray Abraham +F Scott Fitzgerald +F Hillary Rossen + +-tom + + diff --git a/Ch3/datasets/spam/easy_ham/00784.372fcb5f8a0507aa4a8fa0de1e76fe79 b/Ch3/datasets/spam/easy_ham/00784.372fcb5f8a0507aa4a8fa0de1e76fe79 new file mode 100644 index 000000000..1d4015d88 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00784.372fcb5f8a0507aa4a8fa0de1e76fe79 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Thu Sep 26 11:04:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 53A1F16F03 + for ; Thu, 26 Sep 2002 11:04:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:04:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8PMuSC17641 for ; + Wed, 25 Sep 2002 23:56:28 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BCCE0294167; Wed, 25 Sep 2002 15:50:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain + (pool-162-83-148-146.ny5030.east.verizon.net [162.83.148.146]) by xent.com + (Postfix) with ESMTP id 71207294164 for ; Wed, + 25 Sep 2002 15:49:29 -0700 (PDT) +Received: from localhost (lgonze@localhost) by localhost.localdomain + (8.11.6/8.11.6) with ESMTP id g8PMqAZ01264; Wed, 25 Sep 2002 18:52:10 + -0400 +X-Authentication-Warning: localhost.localdomain: lgonze owned process + doing -bs +From: Lucas Gonze +X-X-Sender: lgonze@localhost.localdomain +To: Gordon Mohr +Cc: FoRK +Subject: Re: The Great Power-Shortage Myth +In-Reply-To: <053b01c264db$456e57f0$640a000a@golden> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 18:52:09 -0400 (EDT) + +On Wed, 25 Sep 2002, Gordon Mohr wrote: +> In contrast, take a look at this article by Simon J. Wilkie of +> Caltech: + +Wow, that Wilkie article is the single best explanation I've seen. + +The open question is whether any analysis before the fact warned the +politicians, or whether the politicians were forewarned and went ahead. +What did they know and when did they know it? + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00785.95b5f5d3a4210fd76015c4659c5b3ca0 b/Ch3/datasets/spam/easy_ham/00785.95b5f5d3a4210fd76015c4659c5b3ca0 new file mode 100644 index 000000000..cae8649b4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00785.95b5f5d3a4210fd76015c4659c5b3ca0 @@ -0,0 +1,80 @@ +From fork-admin@xent.com Thu Sep 26 11:04:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9A72816F03 + for ; Thu, 26 Sep 2002 11:04:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:04:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8PMxPC17679 for ; + Wed, 25 Sep 2002 23:59:26 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7AB48294164; Wed, 25 Sep 2002 15:55:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id AB87D29409A for ; + Wed, 25 Sep 2002 15:54:07 -0700 (PDT) +Received: (qmail 7297 invoked by uid 19621); 25 Sep 2002 22:55:59 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 25 Sep 2002 22:55:59 -0000 +Subject: Re: Digital radio playlists are prohibited?! +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: <132203498905.20020925163453@magnesium.net> +References: <95745878-D05F-11D6-8F1E-000393A46DEA@alumni.caltech.edu> + <132203498905.20020925163453@magnesium.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1032995753.27386.88.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 25 Sep 2002 16:15:52 -0700 + +On Wed, 2002-09-25 at 13:34, bitbitch@magnesium.net wrote: +> +> This, kiddies was apparently the legislative beginnings of the whole +> streaming audio-gets-spanked-by-fees ruling that came down in the +> earlier parts of this year. This first act applied to non-exempt, +> non-subscription transmission services. When Congress got around in +> 1998 and realized that webcasting services -might- be different +> (though I honestly can't see how) they wrote in the provision through +> the DMCA to include such transmissions. + + +The restrictive law regarding audio is actually the accumulated cruft of +30 years of various legislative acts. The totality of what we have now +come from various parts of all the following re: sound recordings: + +1998 - DMCA +1995 - Digital Performance Right in Sound Recordings Act +1992 - Audio Home Recording Act +1976 - Copyright Act amendment +1972 - Copyright Act amendment + +It is worth noting that many people have forgotten about the 1976 +Copyright Act Amendment which created the foundational law stating that +the copyright owners have the right to limit personal use of audio +recordings after First Sale even if you are not "making copies" in any +commercial sense. Sound recordings, for many intents and purposes, are +explicitly excluded from Fair Use by the 1976 amendment. + +-James Rogers + jamesr@best.com + + + diff --git a/Ch3/datasets/spam/easy_ham/00786.ca79d7745b67c62712e5a5553c3b83e1 b/Ch3/datasets/spam/easy_ham/00786.ca79d7745b67c62712e5a5553c3b83e1 new file mode 100644 index 000000000..ea012a2a2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00786.ca79d7745b67c62712e5a5553c3b83e1 @@ -0,0 +1,60 @@ +From fork-admin@xent.com Thu Sep 26 11:04:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5885516F03 + for ; Thu, 26 Sep 2002 11:04:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:04:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8PN5VC18316 for ; + Thu, 26 Sep 2002 00:05:31 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BBD29294160; Wed, 25 Sep 2002 16:01:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (kana-130.kana.com [207.5.62.130]) by xent.com + (Postfix) with ESMTP id EEFBA294160 for ; Wed, + 25 Sep 2002 16:00:18 -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Wed, 25 Sep 2002 23:01:20 -08:00 +Message-Id: <3D924040.1080303@barrera.org> +From: "Joseph S. Barrera III" +Organization: NERV +User-Agent: KayPro Perfect Writer 1.31S +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: FoRK +Subject: dumb question: X client behind a firewall? +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 16:01:20 -0700 + +Let's say you're behind a firewall and have a NAT address. +Is there any way to telnet to a linux box out there in the world +and set your DISPLAY in some way that you can create +xterms on your own screen? + +- Joe + +-- +That girl became the spring wind +She flew somewhere, far away +Undoing her hair, lying down, in her sleep +She becomes the wind. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00787.2ffb20c151e974ecf6dceb42547761d8 b/Ch3/datasets/spam/easy_ham/00787.2ffb20c151e974ecf6dceb42547761d8 new file mode 100644 index 000000000..82914a0e3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00787.2ffb20c151e974ecf6dceb42547761d8 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Thu Sep 26 11:04:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B54CE16F03 + for ; Thu, 26 Sep 2002 11:04:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:04:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8PNN4C18770 for ; + Thu, 26 Sep 2002 00:23:04 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AE5D1294162; Wed, 25 Sep 2002 16:19:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail-out1.apple.com (mail-out1.apple.com [17.254.0.52]) by + xent.com (Postfix) with ESMTP id 7ACC829409A for ; + Wed, 25 Sep 2002 16:18:24 -0700 (PDT) +Received: from mailgate2.apple.com (A17-129-100-225.apple.com + [17.129.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id + g8PNMBh10541 for ; Wed, 25 Sep 2002 16:22:12 -0700 (PDT) +Received: from scv2.apple.com (scv2.apple.com) by mailgate2.apple.com + (Content Technologies SMTPRS 4.2.1) with ESMTP id + for ; + Wed, 25 Sep 2002 16:22:11 -0700 +Received: from whump.com (to0202a-dhcp24.apple.com [17.212.22.152]) by + scv2.apple.com (8.11.3/8.11.3) with ESMTP id g8PNMBV29055 for + ; Wed, 25 Sep 2002 16:22:11 -0700 (PDT) +MIME-Version: 1.0 (Apple Message framework v546) +Content-Type: text/plain; charset=US-ASCII; format=flowed +Subject: "Free" Elvis Costello CD a trojan horse for DRM malware +From: Bill Humphries +To: fork@spamassassin.taint.org +Content-Transfer-Encoding: 7bit +Message-Id: +X-Mailer: Apple Mail (2.546) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 16:22:40 -0700 + +A friend in Dublin is mailing me the CD which was in the UK Sunday +Times. I've just been advised that running it in a Win32 machine is +dangerous as all get out. + +http://www.theregister.co.uk/content/4/27232.html + +-- whump + + +---- +Bill Humphries +http://www.whump.com/moreLikeThis/ + + diff --git a/Ch3/datasets/spam/easy_ham/00788.cae8367898a24746723decabdd20ac38 b/Ch3/datasets/spam/easy_ham/00788.cae8367898a24746723decabdd20ac38 new file mode 100644 index 000000000..8c60bd719 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00788.cae8367898a24746723decabdd20ac38 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Thu Sep 26 11:04:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1913E16F03 + for ; Thu, 26 Sep 2002 11:04:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:04:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8PNk4C19765 for ; + Thu, 26 Sep 2002 00:46:04 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9C676294172; Wed, 25 Sep 2002 16:42:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail-out1.apple.com (mail-out1.apple.com [17.254.0.52]) by + xent.com (Postfix) with ESMTP id 4508629409A for ; + Wed, 25 Sep 2002 16:41:50 -0700 (PDT) +Received: from mailgate1.apple.com (A17-128-100-225.apple.com + [17.128.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id + g8PNjbh14937 for ; Wed, 25 Sep 2002 16:45:37 -0700 (PDT) +Received: from scv3.apple.com (scv3.apple.com) by mailgate1.apple.com + (Content Technologies SMTPRS 4.2.5) with ESMTP id + for ; + Wed, 25 Sep 2002 16:45:31 -0700 +Received: from whump.com (to0202a-dhcp24.apple.com [17.212.22.152]) by + scv3.apple.com (8.11.3/8.11.3) with ESMTP id g8PNjb302858 for + ; Wed, 25 Sep 2002 16:45:37 -0700 (PDT) +MIME-Version: 1.0 (Apple Message framework v546) +Content-Type: text/plain; charset=US-ASCII; format=flowed +Subject: "Free" Elvis Costello CD a trojan horse for DRM malware +From: Bill Humphries +To: fork@spamassassin.taint.org +Content-Transfer-Encoding: 7bit +Message-Id: +X-Mailer: Apple Mail (2.546) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 16:46:06 -0700 + +A friend in Dublin is mailing me the CD which was in the UK Sunday +Times. I've just been advised that running it in a Win32 machine is +dangerous as all get out. + +http://www.theregister.co.uk/content/4/27232.html + +-- whump + + +---- +Bill Humphries +http://www.whump.com/moreLikeThis/ + + diff --git a/Ch3/datasets/spam/easy_ham/00789.87278efee0d73a7e902af35c49084230 b/Ch3/datasets/spam/easy_ham/00789.87278efee0d73a7e902af35c49084230 new file mode 100644 index 000000000..669de9c73 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00789.87278efee0d73a7e902af35c49084230 @@ -0,0 +1,63 @@ +From fork-admin@xent.com Thu Sep 26 11:04:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6E82016F03 + for ; Thu, 26 Sep 2002 11:04:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:04:55 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8Q0A9C22567 for ; + Thu, 26 Sep 2002 01:10:10 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DDB752940AD; Wed, 25 Sep 2002 17:06:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain + (dsl-208-151-246-47.dsl.easystreet.com [208.151.246.47]) by xent.com + (Postfix) with ESMTP id 9272029409A for ; Wed, + 25 Sep 2002 17:05:15 -0700 (PDT) +Received: (from karl@localhost) by localhost.localdomain (8.11.6/8.11.6) + id g8Q0HKL03367; Wed, 25 Sep 2002 17:17:20 -0700 +X-Authentication-Warning: localhost.localdomain: karl set sender to + kra@monkey.org using -f +To: "Joseph S. Barrera III" +Cc: FoRK +Subject: Re: dumb question: X client behind a firewall? +References: <3D924040.1080303@barrera.org> +From: Karl Anderson +Organization: Ape Mgt. +In-Reply-To: "Joseph S. Barrera III"'s + message of + "Wed, 25 Sep 2002 16:01:20 -0700" +Message-Id: +User-Agent: Gnus/5.0802 (Gnus v5.8.2) Emacs/20.7 +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 25 Sep 2002 17:17:19 -0700 + +"Joseph S. Barrera III" writes: + +> Let's say you're behind a firewall and have a NAT address. +> Is there any way to telnet to a linux box out there in the world +> and set your DISPLAY in some way that you can create +> xterms on your own screen? + +Assuming your local display is X, SSH. + +-- +Karl Anderson kra@monkey.org http://www.monkey.org/~kra/ + + diff --git a/Ch3/datasets/spam/easy_ham/00790.226ce4b62d85d7ca13f3f837b731b082 b/Ch3/datasets/spam/easy_ham/00790.226ce4b62d85d7ca13f3f837b731b082 new file mode 100644 index 000000000..128d3ca99 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00790.226ce4b62d85d7ca13f3f837b731b082 @@ -0,0 +1,56 @@ +From fork-admin@xent.com Thu Sep 26 11:04:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BA2D416F03 + for ; Thu, 26 Sep 2002 11:04:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:04:56 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8Q0i6C24938 for ; + Thu, 26 Sep 2002 01:44:07 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 66880294171; Wed, 25 Sep 2002 17:40:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (cpe-65-172-233-109.sanbrunocable.com + [65.172.233.109]) by xent.com (Postfix) with ESMTP id 99F4229409A for + ; Wed, 25 Sep 2002 17:39:25 -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Thu, 26 Sep 2002 00:40:54 -08:00 +Message-Id: <3D925796.6070305@barrera.org> +From: "Joseph S. Barrera III" +Organization: NERV +User-Agent: KayPro Perfect Writer 1.31S +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: FoRK +Subject: Re: dumb question: X client behind a firewall? +References: <3D924040.1080303@barrera.org> + +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 17:40:54 -0700 + +Wow, three replies already, all recommending ssh. Thanks! + +- Joe + +Back in my day, they didn't have ssh. Then again, back in my day, +they didn't have firewalls. And I still miss X10's active icons. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00791.0150510afcb54992415d2eff33d5a8cb b/Ch3/datasets/spam/easy_ham/00791.0150510afcb54992415d2eff33d5a8cb new file mode 100644 index 000000000..3a9c0951b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00791.0150510afcb54992415d2eff33d5a8cb @@ -0,0 +1,71 @@ +From fork-admin@xent.com Thu Sep 26 16:35:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BD5A516F20 + for ; Thu, 26 Sep 2002 16:34:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 16:34:42 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8QCWCg18115 for ; + Thu, 26 Sep 2002 13:32:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9B6E82940AA; Thu, 26 Sep 2002 05:28:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp001.nwlink.com (smtp001.nwlink.com [209.20.130.75]) by + xent.com (Postfix) with ESMTP id 5166E29409A for ; + Thu, 26 Sep 2002 05:28:00 -0700 (PDT) +Received: from monster (kola.vertexdev.com [209.20.218.149] (may be + forged)) by smtp001.nwlink.com (8.12.2/8.12.2) with SMTP id g8QCVn22018247 + for ; Thu, 26 Sep 2002 05:31:49 -0700 +Message-Id: <04da01c26558$d9bf8550$070d0dc0@monster> +From: "Jeff Barr" +To: +References: <20020925215801.23505.49195.Mailman@lair.xent.com> +Subject: Re: Digital radio playlists are prohibited?! +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4807.1700 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4807.1700 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 26 Sep 2002 05:32:01 -0700 + +> Subject: Re: Digital radio playlists are prohibited?! +> From: James Rogers +> To: fork@spamassassin.taint.org +> Date: 25 Sep 2002 12:52:15 -0700 +> +> On Wed, 2002-09-25 at 01:19, Rohit Khare wrote: +> > Anyone heard of this law before? +> +> +> Absolutely. More accurately, it is part of the RIAAs "regulation" for +> broadcasting music under their auspices. This is actually part of the +> default statutory license the RIAA is compelled to issue. You can try +> and establish your own contract with each of the individual publishers +> in addition to the writers, but that is a Herculean undertaking in its +> own right. The details are really gross and complicated. + +Perhaps the stations cannot publish digital playlists, but you can get +them from www.starcd.com anyway. They use some sort of +listening and recognition technology to identify the music played +on over 1000 US radio stations. + +Jeff; + + diff --git a/Ch3/datasets/spam/easy_ham/00792.f321af7901fa6c9e85362d921eadf2ae b/Ch3/datasets/spam/easy_ham/00792.f321af7901fa6c9e85362d921eadf2ae new file mode 100644 index 000000000..9f22a286e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00792.f321af7901fa6c9e85362d921eadf2ae @@ -0,0 +1,63 @@ +From fork-admin@xent.com Thu Sep 26 16:35:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9785016F22 + for ; Thu, 26 Sep 2002 16:34:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 16:34:45 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8QE97g21435 for ; + Thu, 26 Sep 2002 15:09:07 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AEE82294176; Thu, 26 Sep 2002 07:05:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 14EC829409A for + ; Thu, 26 Sep 2002 07:04:32 -0700 (PDT) +Received: (qmail 12305 invoked by uid 508); 26 Sep 2002 14:03:31 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.4) by + venus.phpwebhosting.com with SMTP; 26 Sep 2002 14:03:31 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8QE8ES16438; Thu, 26 Sep 2002 16:08:16 + +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: "Joseph S. Barrera III" +Cc: FoRK +Subject: Re: dumb question: X client behind a firewall? +In-Reply-To: <3D924040.1080303@barrera.org> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 26 Sep 2002 16:08:14 +0200 (CEST) + +On Wed, 25 Sep 2002, Joseph S. Barrera III wrote: + +> Let's say you're behind a firewall and have a NAT address. +> Is there any way to telnet to a linux box out there in the world +> and set your DISPLAY in some way that you can create +> xterms on your own screen? + +As other people suggested: SSH. PuTTY + + http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html + +can do it. Can run, say xclock (I'm running an X server under W32 at work, +tunneling through a NAT box), but from Linux, not from Solaris. Probably +OpenSSH misconfigurat5ion. + + diff --git a/Ch3/datasets/spam/easy_ham/00793.6da29475fba399c38bb0a93efabcae5c b/Ch3/datasets/spam/easy_ham/00793.6da29475fba399c38bb0a93efabcae5c new file mode 100644 index 000000000..5e56c3835 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00793.6da29475fba399c38bb0a93efabcae5c @@ -0,0 +1,196 @@ +From fork-admin@xent.com Fri Sep 27 10:43:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6B87616F18 + for ; Fri, 27 Sep 2002 10:42:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 27 Sep 2002 10:42:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8R7O9g32127 for ; + Fri, 27 Sep 2002 08:24:10 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2B16C2940B7; Fri, 27 Sep 2002 00:20:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta6.snfc21.pbi.net (mta6.snfc21.pbi.net [206.13.28.240]) + by xent.com (Postfix) with ESMTP id 6B1E229409A for ; + Fri, 27 Sep 2002 00:19:51 -0700 (PDT) +Received: from [192.168.123.100] ([64.171.2.19]) by mta6.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H33001IM5VJWJ@mta6.snfc21.pbi.net> for fork@xent.com; Fri, + 27 Sep 2002 00:23:43 -0700 (PDT) +From: James Rogers +Subject: Native American economics (was Re: sed /s/United States/Roman + Empire/g) +In-Reply-To: <000f01c2628a$e71a61f0$0200a8c0@JMHALL> +To: fork@spamassassin.taint.org +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +User-Agent: Microsoft-Entourage/9.0.1.3108 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 27 Sep 2002 00:23:39 -0700 + + +I wanted to get back to this but didn't have the time. I actually lived on +a couple different Indian reservations growing up in the Pacific Northwest +and also spent a fair amount time in Lakota/Sioux country as well. And my +parents have lived on an even more diverse range of Indian reservations than +I have (my experience being a direct result of living with my parents). I +do get a lot of my information first-hand, or in some cases, second-hand +from my father. + +The income figures for the Indians are somewhat misleading, mostly because +it is really hard to do proper accounting of the effective income. While it +is true that some Indians live in genuine poverty, it is typically as a +consequence of previous poor decisions that were made by the tribe, not +something that was impressed upon them. + +The primary problem with the accounting is that there is a tribal entity +that exists separately from the individuals, typically an "Indian +Corporation" of one type or another where each member of the tribe owns a +single share (the details of when and how a share becomes active varies from +tribe to tribe). In most tribes, a dividend is paid out to each of the +tribal members from the corporation, usually to the tune of $10-30k per +person, depending on the tribe. The dividend money comes from a number of +places, with the primary sources being the Federal Gov't and various +businesses/assets owned by the Indian corporation. + +You have to understand a couple things: First, a great many Indian tribes +are run as purely communist enterprises. Everyone gets a check for their +share no matter what. One of the biggest problems this has caused is very +high unemployment (often 70-90%) for tribal members, who are more than happy +take their dividend and not work. The dividend they receive from the +corporation often constitutes their sole "income" for government accounting +purposes. Unfortunately, to support this type of economics when no one +works, they've had to sell off most of their useful assets to maintain those +dividends. Many of the tribes genuinely living in poverty do so because +they have run out of things to sell yet nobody works. One of the ironies is +that on many of the reservations where the tribes still have assets to burn, +many of the people working in the stores and such are actually poor white +folk, not Indians. + +Second, even though the tribe members each get a cash dividend, they also +receive an enormous range of benefits and perks from the Indian corporation +to the tune of tens of thousands of dollars per person annually. By +benefits and perks, we are talking about the kinds of things no other +ordinary American receives from either their employer or the government. + +It should be pointed out that while many of these Indian corporations are +ineptly run, and mostly provide sinecures for other Indians, a minority are +very smartly managed and a few hire non-Indian business executives with good +credentials to run their business divisions. An example of this is the +Haida Corporation, which while having less 1,000 tribal shareholders, has +billions of dollars in assets and the various corporations they own have +gross revenues in the $200-300 million range (and growing). Yet the +dividend paid out is strictly controlled, about $20k in this particular +case, and they engaged in a practice of waiting a couple decades before +drawing money from any of the assets they were granted which has led to +intelligent investment and use. They don't eat their seed corn, and have +actually managed to grow their stash. In contrast, a couple islands over, +there is another tribe of ~2,000 people that has a net loss of about $50 +million annually IIRC while being regularly endowed by the Federal +government with several billions of dollars in valuable assets. This +particular tribe has a modest income in theory, but the actual expenditures +per person annually is in the hundreds of thousands of dollars, and many +borrow money against future income. Incidentally, in this particular case, +the people that ARE working frequently pull in a few hundred thousand +dollars a year, much of which goes back to the tribal corporation rather +than their own pockets. + +Somewhat annoying, the Federal government semi-regularly grants valuable +assets to these tribes when they've burned through the ones previously given +where feasible, typically selling the assets to American or foreign +companies. And the cycle continues. + +So what is the primary problem for the tribes that have problems? In a +nutshell, a thoroughly pathological culture and society. + +Few women reach the age of 16 without getting pregnant. Incest, rape, and +gross promiscuity is rampant. Inbreeding, heavy drug abuse during +pregnancy, and other environmental factors have created tribes where a very +substantial fraction of the tribe is literally mentally retarded. Many of +the thoughtful and intelligent tribe members leave the reservation at the +earliest opportunity, mostly to avoid the problems mentioned above. On one +reservation my parents lived, the HIV infection rate was >70%. Many of +these societies are thoroughly corrupt, and the administration of the law is +arbitrary and capricious (they do have their own judges, courts, police +etc). + +In short, many of these tribes that are still hanging together are in a +shambles because they have become THE most pathological societies that I +have ever seen anywhere. Because of their legal status, there really aren't +that many consequences for their behavior. There are many things that I +could tell you that I've seen that you probably would not believe unless +you'd seen it yourself. There are always good people in these tribes, but +it has gotten to the point where the losers and idiots outnumber the good +guys by a fair margin many times, and this IS a mobocracy typically. (BTW, +if any of you white folk wants to experience overt and aggressive racism as +a minority in a place where the rule of law is fiction and the police are +openly thugs, try living on one of these messed up Indian reservations. It +will give you an interesting perspective on things.) + +There are only two real situations where you find reasonably prosperous +Indians. The first is in the rare case of tribes run by disciplined and +intelligent people that have managed their assets wisely. The second is +where the tribe has dispersed and assimilated for the most part, even if +they maintain their tribal identity. In both of these cases, the tribal +leaders reject the insular behavior that tends to lead to the pathological +cases mentioned above. + +The Indians are often quite wealthy technically, and a lot of money is spent +by the tribe per capita. And the actual reportable income is quite high +when you consider how many are living entirely off the tribal dole. It is +just that their peculiar economic structure does not lend itself well to +ordinary economic analysis by merely looking at their nominal income. The +poverty is social and cultural in nature, not economic. This was my +original point. + + +On a tangent: + +One thing that has always interested me is the concept of quasi-tribal +corporate socialism. Many Indian tribes implement a type of corporate +socialism that is mind-bogglingly bad in execution. That they use this +structure at all is an accident of history more than anything. But what has +interested me is that the very smartly managed ones do surprisingly well +over the long run. It is like a Family Corporation writ large. + +It seems that in a future where "familial" ties will be increasingly +voluntary, the general concept may have some merit in general Western +society, serving to create a facsimile of a biological extended family with +the included dynamics, but with an arbitrary set of self-selecting +individuals. + +Damn that was long (and its late), and it could have been a lot longer. + +-James Rogers + jamesr@best.com + + + +On 9/22/02 3:53 PM, "John Hall" wrote: +> +> As I understand it, there is a huge difference between native Americans +> who speak english at home and those who do not. I don't have figures +> that separate those at hand, though. +> +> 1989 American Indians (US Pop as a whole) -- Families below poverty +> 27.2% (10%), Persons below poverty 31.2 (13.1), Speak a language other +> than English 23 (13.8) Married couple families 65.8 (79.5) Median family +> income $21,619 ($35,225) Per Capita $8,284 ($14,420). + + diff --git a/Ch3/datasets/spam/easy_ham/00794.ce4c417f911968e4be6ee1203db0bd94 b/Ch3/datasets/spam/easy_ham/00794.ce4c417f911968e4be6ee1203db0bd94 new file mode 100644 index 000000000..33df8385b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00794.ce4c417f911968e4be6ee1203db0bd94 @@ -0,0 +1,94 @@ +From fork-admin@xent.com Fri Sep 27 10:43:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CC4A616F03 + for ; Fri, 27 Sep 2002 10:42:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 27 Sep 2002 10:42:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8QNc9g14610 for ; + Fri, 27 Sep 2002 00:38:10 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id F011A2940CF; Thu, 26 Sep 2002 16:34:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 5A5AE29409A for ; Thu, + 26 Sep 2002 16:33:42 -0700 (PDT) +Received: (qmail 26554 invoked from network); 26 Sep 2002 23:37:32 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 26 Sep 2002 23:37:32 -0000 +Reply-To: +From: "John Hall" +To: "FoRK" +Subject: RE: Liberalism in America +Message-Id: <003b01c265b5$af603900$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +In-Reply-To: +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 26 Sep 2002 16:37:27 -0700 + + +In essence, hindsight justification. The progressives weren't in the +middle, they were in a society at one end and they wanted a society at +the other end. The middle is more or less where they got stopped. + +As to an intervention that worked, I actually have some nice things to +say about the SEC, at least in theory. I have a few nasty things to say +as well, but on the whole it has been a very good thing. + + +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Geege +> Schuman +> Sent: Tuesday, September 24, 2002 6:37 PM +> To: fork@spamassassin.taint.org +> Subject: Liberalism in America +> +> liberalism +> propagandized as meddling +> in truth, the middle +> +> "American liberalism believes that in this respect it has made a major +> contribution to the grand strategy of freedom. Where both capitalists +and +> socialists in the 1930's were trying to narrow the choice to either/or +-- +> either laissez-faire capitalism or bureaucratic socialism -- the New +Deal +> persisted in its vigorous faith that human intelligence and social +> experiment could work out a stable foundation for freedom in a context +of +> security and for security in a context of freedom. That faith remains +the +> best hope of free society today." +> +> fluid yet crunchy, +> gg +> +> +> +> +> http://www.english.upenn.edu/~afilreis/50s/schleslib.html + + diff --git a/Ch3/datasets/spam/easy_ham/00795.ea9b54832cc27bb552e483a6aefbde47 b/Ch3/datasets/spam/easy_ham/00795.ea9b54832cc27bb552e483a6aefbde47 new file mode 100644 index 000000000..76096e3a8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00795.ea9b54832cc27bb552e483a6aefbde47 @@ -0,0 +1,67 @@ +From fork-admin@xent.com Mon Sep 30 13:52:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B856F16F7C + for ; Mon, 30 Sep 2002 13:48:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:48:36 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8RJJFg24695 for ; + Fri, 27 Sep 2002 20:19:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BEE662940AE; Fri, 27 Sep 2002 12:15:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail-out2.apple.com (mail-out2.apple.com [17.254.0.51]) by + xent.com (Postfix) with ESMTP id C6F452940A2 for ; + Fri, 27 Sep 2002 12:14:28 -0700 (PDT) +Received: from mailgate2.apple.com (A17-129-100-225.apple.com + [17.129.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id + g8RJIM914010 for ; Fri, 27 Sep 2002 12:18:22 -0700 (PDT) +Received: from scv2.apple.com (scv2.apple.com) by mailgate2.apple.com + (Content Technologies SMTPRS 4.2.1) with ESMTP id + ; Fri, 27 Sep 2002 12:18:22 + -0700 +Received: from whump.com (to0202a-dhcp24.apple.com [17.212.22.152]) by + scv2.apple.com (8.11.3/8.11.3) with ESMTP id g8RJILV27632; Fri, + 27 Sep 2002 12:18:21 -0700 (PDT) +Subject: Re: OSCOM Berkeley report: Xopus, Bitflux, Plone, Xoops +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v546) +Cc: "FoRK" +To: "Jim Whitehead" +From: Bill Humphries +In-Reply-To: +Message-Id: +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.546) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 27 Sep 2002 12:18:52 -0700 + +On Friday, September 27, 2002, at 11:17 AM, Jim Whitehead wrote: + +> I attended the OSCOM Open Source Content Management workshop at +> Berkeley +> yesterday. + +I really wanted to go to this, especially to look at XOPUS. +Unfortunately, we're launching a new intranet at work next week and I +couldn't get away. XOPUS + an XML native DB such as Xindice looks like +something that could hit a home run. + +-- whump +"I have a theory, it could be bunnies." + + diff --git a/Ch3/datasets/spam/easy_ham/00796.1c06b1656c17f8aa92a42a82ef0ad2e9 b/Ch3/datasets/spam/easy_ham/00796.1c06b1656c17f8aa92a42a82ef0ad2e9 new file mode 100644 index 000000000..51e642246 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00796.1c06b1656c17f8aa92a42a82ef0ad2e9 @@ -0,0 +1,80 @@ +From fork-admin@xent.com Mon Sep 30 13:52:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3BD6E16F7D + for ; Mon, 30 Sep 2002 13:48:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:48:38 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8RJbDg25388 for ; + Fri, 27 Sep 2002 20:37:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 83B8D2940CE; Fri, 27 Sep 2002 12:33:12 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx2.ucsc.edu [128.114.129.35]) by + xent.com (Postfix) with ESMTP id 2479C2940C9 for ; + Fri, 27 Sep 2002 12:32:26 -0700 (PDT) +Received: from Tycho (dhcp-55-196.cse.ucsc.edu [128.114.55.196]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g8RJZwT25586; Fri, + 27 Sep 2002 12:35:59 -0700 (PDT) +From: "Jim Whitehead" +To: "Robert Harley" , +Subject: RE: The Big Jump +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +In-Reply-To: <20020908150126.44010C44D@argote.ch> +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 27 Sep 2002 12:33:23 -0700 + +Adjournment of Michel Fournier's big Jump in May, 2003. + +Two attempts of launch failed : the first because of the wind which got up +prematurely and the second due to a technical hitch during the inflating of +the envelope. +The team of the Big Jump, folds luggage, having waited up to the end for an +opportunity for the launch of the balloon stratosphérique allowing to raise +the + +capsule pressurized by Michel Fournier at more than 40 000 metres in height. +As expected, in the date of September 20, the jets stream strengthened in +300 kph announcing the imminent arrival of the winter and closing until next +May the meteorological window favorable to a human raid in the stratosphere. +On the plains of Saskatchewan, the first snows are waited in the days which +come.Meeting in all in May, 2003. + +> Today a French officer called Michel Fournier is supposed to get in a +> 350-metre tall helium balloon, ride it up to the edge of space (40 km +> altitude) and jump out. His fall should last 6.5 minutes and reach +> speeds of Mach 1.5. He hopes to open his parachute manually at the +> end, although with an automatic backup if he is 7 seconds from the +> ground and still hasn't opened it. +> +> R +> +> ObQuote: +> "Vederò, si averò si grossi li coglioni, come ha il re di Franza." +> ("Let's see if I've got as much balls as the King of France!") +> - Pope Julius II, 2 January 1511 + + diff --git a/Ch3/datasets/spam/easy_ham/00797.f9905519971d08a70a6d9815016f8295 b/Ch3/datasets/spam/easy_ham/00797.f9905519971d08a70a6d9815016f8295 new file mode 100644 index 000000000..2af1cf4bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00797.f9905519971d08a70a6d9815016f8295 @@ -0,0 +1,102 @@ +From fork-admin@xent.com Mon Sep 30 13:52:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D83C616F7E + for ; Mon, 30 Sep 2002 13:48:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:48:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8S6XBg17611 for ; + Sat, 28 Sep 2002 07:33:12 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B35872940A2; Fri, 27 Sep 2002 23:29:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from pimout2-ext.prodigy.net (pimout2-ext.prodigy.net + [207.115.63.101]) by xent.com (Postfix) with ESMTP id 31DA329409A for + ; Fri, 27 Sep 2002 23:20:01 -0700 (PDT) +Received: from MAX (adsl-64-171-27-180.dsl.sntc01.pacbell.net + [64.171.27.180]) by pimout2-ext.prodigy.net (8.12.3 da nor stuldap/8.12.3) + with ESMTP id g8S4FoI7444696 for ; Sat, 28 Sep 2002 + 00:15:59 -0400 +From: "Max Dunn" +To: "'FoRK'" +Subject: RE: OSCOM Berkeley report: Xopus, Bitflux, Plone, Xoops +Message-Id: <000001c266a5$b5ba5600$6401a8c0@MAX> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.3416 +Importance: Normal +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 27 Sep 2002 21:15:36 -0700 + +I attended the same conference, and was impressed by a few systems that +Jim didn't mention. In terms of CMS, the following all had apparently +been used in some fairly large implementations and looked like some +pretty strong competition to commercial systems: +- Midgard, http://www.midgard-project.org/ , a PHP-based content +management framework that with other programs combines to be a full CMS +- Redhat CCM CMS, Java-based: http://www.spamassassin.taint.org/software/ccm/cms/ +- OpenCMS, Java-based: http://www.opencms.org + +There was agreement that usability has not generally been an open source +strength, but both Plone and Xopus represented some real movement +towards improving that situation. + +I was impressed by the spectrum of perspectives on XML. Some took for +granted that XSLT was relevant to content management, others took it +just as for granted that XSLT was irrelevant and seemed happy to ignore +XML almost completely. + +I attended realizing that "content management" is generally used to +apply to *Web* content management, but I was still a bit shocked how +completely out of scope document management was (almost no consideration +of the potential print/PDF dimension to content other than the +occasional "...and you can use FOP to make PDF" as if that was +functional): this seems more the case in open source content management +than in commercial content management, and probably makes XML easier to +ignore (if HTML is the be-all and end-all of the output...). + +The honesty was refreshing, Phil Suh complained about the state of +current tools (both open source and commercial), and I wish I'd written +down what he said, something like "it sucks so extremely, it sucks so +widely, and it is so generally sucking, that it seems sometimes there is +no hope." For a moment there was contemplation that perhaps commercial +systems scaled so well that the commercial "big boys" were really much +more functional than open source, until someone pointed out, "OK, take +some average blog software, spend $500,000 on the rollout... it'll scale +pretty well." Another quote (citing Brendan Quinn): "content management +problems are either trivial or impossible." + +Mac OS X is getting popular, of the laptops there it was an even 1/3 +each of Mac, Linux, Windows. + +I am sure it wasn't news to Jim, but I can't wait to try Subversion, a +CVS replacement that supports some of the newer features of WebDAV: +http://subversion.tigris.org/ + +I'm also eager to try Xopus, I hope the developers make it back home +safely, they said they'd only been in America four days but were already +homeless... + +Max + + + diff --git a/Ch3/datasets/spam/easy_ham/00798.789e730c08cdcd58675c1f273fe507ab b/Ch3/datasets/spam/easy_ham/00798.789e730c08cdcd58675c1f273fe507ab new file mode 100644 index 000000000..6538ef669 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00798.789e730c08cdcd58675c1f273fe507ab @@ -0,0 +1,101 @@ +From fork-admin@xent.com Mon Sep 30 13:52:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DA7FD16F7F + for ; Mon, 30 Sep 2002 13:48:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:48:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8SFTFg31942 for ; + Sat, 28 Sep 2002 16:29:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 55A982940A8; Sat, 28 Sep 2002 08:25:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta7.pltn13.pbi.net (mta7.pltn13.pbi.net [64.164.98.8]) by + xent.com (Postfix) with ESMTP id 387922940A6 for ; + Sat, 28 Sep 2002 08:24:12 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta7.pltn13.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H35003JGMYX9G@mta7.pltn13.pbi.net> for fork@xent.com; Sat, + 28 Sep 2002 08:28:09 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: EBusiness Webforms: cluetrain has left the station +To: FoRK +Reply-To: gbolcer@endeavors.com +Message-Id: <3D95C839.8E8701FD@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 28 Sep 2002 08:18:17 -0700 + +What's wrong with doing business over the Web? Web forms. There's +promising replacements forms, but this is the current state of the +industry: + + o You find something that you want to fill out. It's a partnership form, + a signup for a Web seminar, a request for more information, anything. + o You start wasting time typing in all those stupid fields and spend + about 10 minutes going through all their stupid qualification hoops + just to get a small piece of information , whitepaper, or a callback + when halfway through, you start to wonder if it's really worth your + time to forever be stuck on their stupid prospect list. + o Pull down tags are never put in order of use instead of alphabetized. + I was on a site just now that had every single country in the world + listed; the selection of your country was absolutely critical for you + to hit submit, but due to the layout, the "more>" tag on the second + row was offscreen so it was impossible to select any country except + about two dozen third world countries. + o Even worse, ever time you hit submit, all forms based things complain + about using the universal country phone number format and will cause + you to re-enter dashes instead of dots. + o When you get something that's not entered right, you will go back and + enter it right, but then some other field or most likely pulldown will + automatically get reset to the default value so that you will have to + go back and resent that freaking thing too. Finally after all combinations + of all pulldowns, you may get a successful submit. + o You wait freaking forever just to get a confirmation. + o Sometimes, like today, you won't be able to ever submit anything due + to it being impossible to ever submit a valid set of information that + is internally non-conflicting according to whatever fhead wrote their + forms submission. + +What's wrong with this picture? The company is screwing you by wasting +your time enforcing their data collection standards on you. I'm sure there's +someone in that company that would be willing to accept "US", "U.S", "USA" +"United States", "U of A", "America", etc. and would know exactly which +freaking country the interested party was from instead of forcing them +to waste even more time playing Web form geography. + +I'm starting to see the light of Passport. You want more information? Hit +this passport button. Voila. IE6 and Netscape 6,7 have pre-forms sutff, +but I always turn it off because you never know when there's that one field +that you don't want to submit to the person you are submitting to that +automatically gets sent, i.e. the privacy stuff is well beyond the +average user who will get screwed on privacy stuff. + +So, if crappy forms-based submission is the state of practice for +business enablement on the Web, I can't see this whole data submission +and hurry up and wait for us to get back to you business process as +working all that well. + + +Greg + + diff --git a/Ch3/datasets/spam/easy_ham/00799.160a04b5935b5a9610b4dc15951b5d30 b/Ch3/datasets/spam/easy_ham/00799.160a04b5935b5a9610b4dc15951b5d30 new file mode 100644 index 000000000..655e2e5ef --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00799.160a04b5935b5a9610b4dc15951b5d30 @@ -0,0 +1,115 @@ +From fork-admin@xent.com Mon Sep 30 13:52:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4CE6816F1B + for ; Mon, 30 Sep 2002 13:48:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:48:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8SGMDg00851 for ; + Sat, 28 Sep 2002 17:22:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 67ED02940BB; Sat, 28 Sep 2002 09:18:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id 34E0F2940B0 for + ; Sat, 28 Sep 2002 09:17:30 -0700 (PDT) +Received: (qmail 18301 invoked by uid 500); 28 Sep 2002 16:21:17 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 28 Sep 2002 16:21:17 -0000 +From: Chris Haun +X-X-Sender: chris@isolnetsux.techmonkeys.net +To: Gregory Alan Bolcer +Cc: FoRK +Subject: Re: EBusiness Webforms: cluetrain has left the station +In-Reply-To: <3D95C839.8E8701FD@endeavors.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 28 Sep 2002 12:21:17 -0400 (EDT) + +I'll agree that webforms are a pain in the ass, however it would seem to +me that the problem with passport is the same one you noted with the +autoform function, providing more info than you want to. That and some +entity would be holding the passport info, thus have all that data in the +first place. +Personally i'd never trust them not to at least use it internally to +market to me, if not sell/rent out. Just think of the ability +they'd have to build a profile for you since everything you went to was +tracked to you. And thats just the marketing side of it. + +Chris + + + +On Sat, 28 Sep 2002, Gregory Alan Bolcer wrote: + +> What's wrong with doing business over the Web? Web forms. There's +> promising replacements forms, but this is the current state of the +> industry: +> +> o You find something that you want to fill out. It's a partnership form, +> a signup for a Web seminar, a request for more information, anything. +> o You start wasting time typing in all those stupid fields and spend +> about 10 minutes going through all their stupid qualification hoops +> just to get a small piece of information , whitepaper, or a callback +> when halfway through, you start to wonder if it's really worth your +> time to forever be stuck on their stupid prospect list. +> o Pull down tags are never put in order of use instead of alphabetized. +> I was on a site just now that had every single country in the world +> listed; the selection of your country was absolutely critical for you +> to hit submit, but due to the layout, the "more>" tag on the second +> row was offscreen so it was impossible to select any country except +> about two dozen third world countries. +> o Even worse, ever time you hit submit, all forms based things complain +> about using the universal country phone number format and will cause +> you to re-enter dashes instead of dots. +> o When you get something that's not entered right, you will go back and +> enter it right, but then some other field or most likely pulldown will +> automatically get reset to the default value so that you will have to +> go back and resent that freaking thing too. Finally after all combinations +> of all pulldowns, you may get a successful submit. +> o You wait freaking forever just to get a confirmation. +> o Sometimes, like today, you won't be able to ever submit anything due +> to it being impossible to ever submit a valid set of information that +> is internally non-conflicting according to whatever fhead wrote their +> forms submission. +> +> What's wrong with this picture? The company is screwing you by wasting +> your time enforcing their data collection standards on you. I'm sure there's +> someone in that company that would be willing to accept "US", "U.S", "USA" +> "United States", "U of A", "America", etc. and would know exactly which +> freaking country the interested party was from instead of forcing them +> to waste even more time playing Web form geography. +> +> I'm starting to see the light of Passport. You want more information? Hit +> this passport button. Voila. IE6 and Netscape 6,7 have pre-forms sutff, +> but I always turn it off because you never know when there's that one field +> that you don't want to submit to the person you are submitting to that +> automatically gets sent, i.e. the privacy stuff is well beyond the +> average user who will get screwed on privacy stuff. +> +> So, if crappy forms-based submission is the state of practice for +> business enablement on the Web, I can't see this whole data submission +> and hurry up and wait for us to get back to you business process as +> working all that well. +> +> +> Greg +> + + diff --git a/Ch3/datasets/spam/easy_ham/00800.0a94761ce8069732112ac9fe52b14e9d b/Ch3/datasets/spam/easy_ham/00800.0a94761ce8069732112ac9fe52b14e9d new file mode 100644 index 000000000..332493c22 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00800.0a94761ce8069732112ac9fe52b14e9d @@ -0,0 +1,98 @@ +From fork-admin@xent.com Mon Sep 30 13:52:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5499516F80 + for ; Mon, 30 Sep 2002 13:48:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:48:53 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8SJtIg06463 for ; + Sat, 28 Sep 2002 20:55:18 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DB38D2940BF; Sat, 28 Sep 2002 12:51:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 6C9FE2940A9 for ; + Sat, 28 Sep 2002 12:50:46 -0700 (PDT) +Received: (qmail 18407 invoked from network); 28 Sep 2002 19:54:45 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 28 Sep 2002 19:54:45 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 3158A1B62B; + Sat, 28 Sep 2002 15:54:42 -0400 (EDT) +To: gbolcer@endeavors.com +Cc: FoRK +Subject: Re: EBusiness Webforms: cluetrain has left the station +References: <3D95C839.8E8701FD@endeavors.com> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 28 Sep 2002 15:54:42 -0400 + +>>>>> "G" == Gregory Alan Bolcer writes: + + G> So, if crappy forms-based submission is the state of practice + G> for business enablement on the Web, I can't see this whole data + G> submission and hurry up and wait for us to get back to you + G> business process as working all that well. + +I love this business. If a bridge falls over, the architect or the +engineer is in court the next day, but when a /software/ bridge falls +over, we blame the air beneath it, or the phase of the moon, or +(more often) the people walking on it. + + "What idiots! Don't they know you're supposed to walk on the + /balls/ of your feet, not lead with your heels? Didn't they read + the blueprints? They were posted in the town hall. Any idiot + would know the 0.75Hz heel cadence would pop rivets on the + structural supports! Geez. Pedestrians are /so/ stupid." + +Ours is the /only/ industry that can hold itself 100% un-responsible +for any and all sloth-inflicted doom, and the only industry which can +/also/ get away with feeding this myth of infallibility unquestioned +to the media, to investors, to students and to each other. + + "God I hate telephones. Telephones are stupid. I used a telephone + to, like, call my broker yesterday, and y'know, just /after/ I'd + ordered those 2000 shares of Nortel ..." + +You just gotta love a mass-delusion like that. + +Although it's like a total shock to 99.999% (5nines) of all the +employed website designers out there, the truth is webforms /can/ +accept "U.S. of A" as a country. Incredible, but true. Web forms can +also accept /multiple/ or even /free-form/ telephone numbers and can +even be partitioned into manageable steps. All this can also be done +without selling exclusive rights to your wallet to the World's +Second-Richest Corporation (assuming Cisco is still #1) and vendor +locking your business into their "small transaction fee" tithe. + +Of course, try and tell one of those 5-niners that and they'll get all +defensive, black list you as a sh*t disturber and undermine your +reputation with the boss... not that I'm speaking first-hand or +anything ;) + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00801.0a1ec38cd598d6c2e02323487c74e53c b/Ch3/datasets/spam/easy_ham/00801.0a1ec38cd598d6c2e02323487c74e53c new file mode 100644 index 000000000..d734ef051 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00801.0a1ec38cd598d6c2e02323487c74e53c @@ -0,0 +1,93 @@ +From fork-admin@xent.com Mon Sep 30 13:52:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C34E016F81 + for ; Mon, 30 Sep 2002 13:48:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:48:56 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8SLeEg10229 for ; + Sat, 28 Sep 2002 22:40:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3B50A2940B3; Sat, 28 Sep 2002 14:36:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail-out2.apple.com (mail-out2.apple.com [17.254.0.51]) by + xent.com (Postfix) with ESMTP id 6AB3C2940AC for ; + Sat, 28 Sep 2002 14:32:50 -0700 (PDT) +Received: from mailgate2.apple.com (A17-129-100-225.apple.com + [17.129.100.225]) by mail-out2.apple.com (8.11.3/8.11.3) with ESMTP id + g8SLam921564 for ; Sat, 28 Sep 2002 14:36:48 -0700 (PDT) +Received: from scv3.apple.com (scv3.apple.com) by mailgate2.apple.com + (Content Technologies SMTPRS 4.2.1) with ESMTP id + ; Sat, 28 Sep 2002 14:36:48 + -0700 +Received: from whump.com (to0202a-dhcp24.apple.com [17.212.22.152]) by + scv3.apple.com (8.11.3/8.11.3) with ESMTP id g8SLal312161; Sat, + 28 Sep 2002 14:36:47 -0700 (PDT) +Subject: Re: EBusiness Webforms: cluetrain has left the station +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v546) +Cc: gbolcer@endeavors.com, FoRK +To: Gary Lawrence Murphy +From: Bill Humphries +In-Reply-To: +Message-Id: <774F0112-D32A-11D6-8BB1-003065F62CD6@whump.com> +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.546) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 28 Sep 2002 14:37:19 -0700 + +On Saturday, September 28, 2002, at 12:54 PM, Gary Lawrence Murphy +wrote: + +> Although it's like a total shock to 99.999% (5nines) of all the +> employed website designers out there, the truth is webforms /can/ +> accept "U.S. of A" as a country. Incredible, but true. Web forms can +> also accept /multiple/ or even /free-form/ telephone numbers and can +> even be partitioned into manageable steps. All this can also be done +> without selling exclusive rights to your wallet to the World's +> Second-Richest Corporation (assuming Cisco is still #1) and vendor +> locking your business into their "small transaction fee" tithe. + +Yes, but this is what normally happened: + +Engineer: we can put an input validator/parser on the backend to do +that. + +Designer: there's a JavaScript library that can do some of the +pre-validation. + +Creative Director: I want it in blue, with a zooming logo. + +Engineer: can we get to that later, we need to meet functional specs. + +Creative Director: You *don't* understand. *I* want it in blue. + +Creative Director: Oh, and the site launches this Friday because I sent +out a press release about our new strategic partnership with HypeCorp. + +Designer: fine, we'll just put a list of countries in a drop down. + +Engineer: and we can validate against that list. + +Creative Director: I don't give a shit. As long as it's in blue. And +has a link to my press release. + +---- +Bill Humphries +http://www.whump.com/moreLikeThis/ + + diff --git a/Ch3/datasets/spam/easy_ham/00802.c2f1957d9e67ae45f06a7c0845b02f3f b/Ch3/datasets/spam/easy_ham/00802.c2f1957d9e67ae45f06a7c0845b02f3f new file mode 100644 index 000000000..15ba33b45 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00802.c2f1957d9e67ae45f06a7c0845b02f3f @@ -0,0 +1,66 @@ +From fork-admin@xent.com Mon Sep 30 13:53:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E1DD616F83 + for ; Mon, 30 Sep 2002 13:49:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:49:03 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8T4NHg29392 for ; + Sun, 29 Sep 2002 05:23:18 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9ADB32940D0; Sat, 28 Sep 2002 21:23:11 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from frodo.hserus.net (202-77-223-48.outblaze.com + [202.77.223.48]) by xent.com (Postfix) with ESMTP id F33592940B8 for + ; Sat, 28 Sep 2002 21:22:15 -0700 (PDT) +Received: from ppp-200-1-93.bng.vsnl.net.in ([203.200.1.93] + helo=rincewind.pobox.com) by frodo.hserus.net with asmtp (Exim 4.10) id + 17vUls-000BqI-00; Sun, 29 Sep 2002 11:29:32 +0800 +X-PGP-Dsskey: 0x55FAB8D3 +X-PGP-Rsakey: 0xCAA67415 +Message-Id: <5.1.0.14.2.20020928232350.02c2f030@frodo.hserus.net> +X-Nil: +To: gbolcer@endeavors.com, FoRK +From: Udhay Shankar N +Subject: Re: EBusiness Webforms: cluetrain has left the station +In-Reply-To: <3D95C839.8E8701FD@endeavors.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii"; format=flowed +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 28 Sep 2002 23:25:21 +0530 + +At 08:18 AM 9/28/02 -0700, Gregory Alan Bolcer wrote: + +>IE6 and Netscape 6,7 have pre-forms sutff, +>but I always turn it off because you never know when there's that one field +>that you don't want to submit to the person you are submitting to that +>automatically gets sent, i.e. the privacy stuff is well beyond the +>average user who will get screwed on privacy stuff. + +Opera 6 has an interesting way around this. You just right-click on each +field and bring up a choice of prefilled local information that you can +then choose to enter into the form. + +Now if they can just fix the $@!$@$# irritating memory problems that Opera6 +has....Hakon, you listening? + +Udhay + +-- +((Udhay Shankar N)) ((udhay @ pobox.com)) ((www.digeratus.com)) + + diff --git a/Ch3/datasets/spam/easy_ham/00803.a9faabf181ecae3ece9f7003a005aeea b/Ch3/datasets/spam/easy_ham/00803.a9faabf181ecae3ece9f7003a005aeea new file mode 100644 index 000000000..04c7cc878 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00803.a9faabf181ecae3ece9f7003a005aeea @@ -0,0 +1,68 @@ +From fork-admin@xent.com Mon Sep 30 13:52:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0138E16F82 + for ; Mon, 30 Sep 2002 13:49:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:49:00 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8SNcOg14512 for ; + Sun, 29 Sep 2002 00:38:24 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2EBD02940C9; Sat, 28 Sep 2002 16:34:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 4AA672940C1 for ; + Sat, 28 Sep 2002 16:33:47 -0700 (PDT) +Received: (qmail 486 invoked from network); 28 Sep 2002 23:37:47 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 28 Sep 2002 23:37:47 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id E8CB21B62C; + Sat, 28 Sep 2002 19:37:42 -0400 (EDT) +To: Bill Humphries +Cc: gbolcer@endeavors.com, FoRK +Subject: Re: EBusiness Webforms: cluetrain has left the station +References: <774F0112-D32A-11D6-8BB1-003065F62CD6@whump.com> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 28 Sep 2002 19:37:42 -0400 + +>>>>> "B" == Bill Humphries writes: + + B> Yes, but this is what normally happened: + + B> Engineer: we can put ... + B> Designer: there's a ... + B> Creative Director: I want it in blue ... + + +Yup, seen it happen oodles of times, only all three of those folks +are one and the same person. The fourth is the business manager +who says "whatever, so long as you do it on your own time" + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00804.a27b268d92e03d488d534b6e69d98f43 b/Ch3/datasets/spam/easy_ham/00804.a27b268d92e03d488d534b6e69d98f43 new file mode 100644 index 000000000..f2da741d9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00804.a27b268d92e03d488d534b6e69d98f43 @@ -0,0 +1,68 @@ +From fork-admin@xent.com Mon Sep 30 13:53:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 978C016F1E + for ; Mon, 30 Sep 2002 13:49:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:49:18 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8TGCPg18864 for ; + Sun, 29 Sep 2002 17:12:28 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B73752940B8; Sun, 29 Sep 2002 09:12:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta7.pltn13.pbi.net (mta7.pltn13.pbi.net [64.164.98.8]) by + xent.com (Postfix) with ESMTP id E98312940A0 for ; + Sun, 29 Sep 2002 09:11:04 -0700 (PDT) +Received: from cse.ucsc.edu ([63.194.88.161]) by mta7.pltn13.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H3700IVFJMHS3@mta7.pltn13.pbi.net> for fork@xent.com; Sun, + 29 Sep 2002 09:11:06 -0700 (PDT) +From: Elias +Subject: Content management for MP3s +To: fork@spamassassin.taint.org +Message-Id: <3D972433.40804@cse.ucsc.edu> +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en,pdf +User-Agent: Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:0.9.2) + Gecko/20010726 Netscape6/6.1 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 29 Sep 2002 09:02:59 -0700 + +Dear flatware, + +I'm about to undertake a massive project to index/catalog well over one +thousand CDs that have been ripped to MP3 and set up a server to stream +them to different rooms in the house. (Yes, I own them all, no I'm not +broadcasting them to the 'net.) Can anyone give me some recommendations +as to what (free? opensource?) software is best suited for this task? I +know there are a few FoRKs out there who have tackled this problem before... + +I'd like to be able to dynamically generate play lists from queries like +"Jazz released between 1950 and 1960" or "Artist such and such between +these dates" or "Just these artists" or "Just this genre" - you get the +idea. In addition to having multiple streams that I can tune in to (a la +DMX), I'd like to be able to browse the database through a web interface +from other computers in the house and pull specific music down to +wherever I am. + + +Thanks, +Elias + + diff --git a/Ch3/datasets/spam/easy_ham/00805.15e21951a8e03def748ffb6b0de7220a b/Ch3/datasets/spam/easy_ham/00805.15e21951a8e03def748ffb6b0de7220a new file mode 100644 index 000000000..18e3faa56 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00805.15e21951a8e03def748ffb6b0de7220a @@ -0,0 +1,99 @@ +From fork-admin@xent.com Mon Sep 30 13:53:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A4CBF16F19 + for ; Mon, 30 Sep 2002 13:49:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:49:15 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8TErFg15436 for ; + Sun, 29 Sep 2002 15:53:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4C3772940A9; Sun, 29 Sep 2002 07:53:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta5.snfc21.pbi.net (mta5.snfc21.pbi.net [206.13.28.241]) + by xent.com (Postfix) with ESMTP id B97682940A0 for ; + Sun, 29 Sep 2002 07:52:35 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta5.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H3700J8CFZOE4@mta5.snfc21.pbi.net> for fork@xent.com; Sun, + 29 Sep 2002 07:52:36 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: Re: EBusiness Webforms: cluetrain has left the station +To: FoRK +Reply-To: gbolcer@endeavors.com +Message-Id: <3D971165.1CA9D617@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +References: <3D95C839.8E8701FD@endeavors.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 29 Sep 2002 07:42:45 -0700 + +Gary Lawrence Murphy wrote: +> +> Although it's like a total shock to 99.999% (5nines) of all the +> employed website designers out there, the truth is webforms /can/ +> accept "U.S. of A" as a country. Incredible, but true. Web forms can +> also accept /multiple/ or even /free-form/ telephone numbers and can +> even be partitioned into manageable steps. All this can also be done +> without selling exclusive rights to your wallet to the World's +> Second-Richest Corporation (assuming Cisco is still #1) and vendor +> locking your business into their "small transaction fee" tithe. + + +Ah, but you've just gotten to the crux of the +situation. There's good design and bad design. +There's good testing and bad testing. The problem +is, anyone can design a good Web form, but nobody +does. I think "best practices" hasn't caught up +on main street Web enablement yet. There's some +really great packages on how to do this stuff and +in fact the usability people knew that Web forms needed +to be fixed 5 years ago, so that's why we got XForms +and XHTML. You can shoot yourself in the foot and +people usually do. What the problem is, they don't +even recognize that they're gimpy--ever. They just +keeping trundling along making a mess of everything +assured in their job security that they can build +Web forms without even caring if they can be +used or not beyond their test machine. + +If you had a piece of software and a security warning +came out 5 years ago on it, would you run that software? +Wouldn't you have patched or upgraded something so fundamentally +broken 4 years and 11 months ago? What I want to know +is why would someone use Web forms best practices from +5 years ago? I mean you can get a college degree in that +time. Imagine if the next version of Microsoft Windows +or Red Hat Linux forced you to use a tiled window +manager? Sure, tiled windows were the best we had for +a brief period of time, but they are completely useless +except for some terminal based replacement applications. + +The bottom line is, if you can't get across the +bridge, then it's broken regardless of whose fault +it really is, and it's the business that +needs to take responsibility as they are the ones that +wanted to put the bridge there in the first place. + + +Greg + + diff --git a/Ch3/datasets/spam/easy_ham/00806.eed01b7d2bc05e5490e75f366a534353 b/Ch3/datasets/spam/easy_ham/00806.eed01b7d2bc05e5490e75f366a534353 new file mode 100644 index 000000000..56d2623a3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00806.eed01b7d2bc05e5490e75f366a534353 @@ -0,0 +1,62 @@ +From fork-admin@xent.com Mon Sep 30 13:53:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F2EB116F6D + for ; Mon, 30 Sep 2002 13:49:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:49:21 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8THHFg20794 for ; + Sun, 29 Sep 2002 18:17:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 92CD02940B5; Sun, 29 Sep 2002 10:17:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from texas.pobox.com (texas.pobox.com [64.49.223.111]) by + xent.com (Postfix) with ESMTP id 2B56E2940A0 for ; + Sun, 29 Sep 2002 10:16:21 -0700 (PDT) +Received: from rincewind.pobox.com (unknown [202.56.248.7]) by + texas.pobox.com (Postfix) with ESMTP id 6B81A4535D; Sun, 29 Sep 2002 + 13:15:31 -0400 (EDT) +X-PGP-Dsskey: 0x55FAB8D3 +X-PGP-Rsakey: 0xCAA67415 +Message-Id: <5.1.0.14.2.20020929224244.02d33c50@frodo.hserus.net> +X-Nil: +To: Elias , fork@spamassassin.taint.org +From: Udhay Shankar N +Subject: Re: Content management for MP3s +In-Reply-To: <3D972433.40804@cse.ucsc.edu> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii"; format=flowed +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 29 Sep 2002 22:43:04 +0530 + +At 09:02 AM 9/29/02 -0700, Elias wrote: + +>I'm about to undertake a massive project to index/catalog well over one +>thousand CDs that have been ripped to MP3 and set up a server to stream +>them to different rooms in the house. (Yes, I own them all, no I'm not +>broadcasting them to the 'net.) Can anyone give me some recommendations as +>to what (free? opensource?) software is best suited for this task? I know +>there are a few FoRKs out there who have tackled this problem before... + +See if http://www.jwz.org/gronk/ meets your needs. + +Udhay + +-- +((Udhay Shankar N)) ((udhay @ pobox.com)) ((www.digeratus.com)) + + diff --git a/Ch3/datasets/spam/easy_ham/00807.ee4df461634d0e9d9c7ef72046c3fa2c b/Ch3/datasets/spam/easy_ham/00807.ee4df461634d0e9d9c7ef72046c3fa2c new file mode 100644 index 000000000..f9236f209 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00807.ee4df461634d0e9d9c7ef72046c3fa2c @@ -0,0 +1,49 @@ +From fork-admin@xent.com Mon Sep 30 13:53:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 718B016F6E + for ; Mon, 30 Sep 2002 13:49:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:49:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8TIiOg23608 for ; + Sun, 29 Sep 2002 19:44:25 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id CD8742940A0; Sun, 29 Sep 2002 11:44:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mlug.missouri.edu (mlug.missouri.edu [128.206.61.230]) by + xent.com (Postfix) with ESMTP id BE05C29409E for ; + Sun, 29 Sep 2002 11:43:52 -0700 (PDT) +Received: from mlug.missouri.edu (mogmios@localhost [127.0.0.1]) by + mlug.missouri.edu (8.12.3/8.12.3/Debian -4) with ESMTP id g8TIhhKL005444 + (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=FAIL); + Sun, 29 Sep 2002 13:43:43 -0500 +Received: from localhost (mogmios@localhost) by mlug.missouri.edu + (8.12.3/8.12.3/Debian -4) with ESMTP id g8TIhZoc005436; Sun, + 29 Sep 2002 13:43:35 -0500 +From: Michael +To: discussion@mlug.missouri.edu, , +Subject: A moment of silence for the First Amendment (fwd) +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 29 Sep 2002 13:43:35 -0500 (CDT) + +http://www.post-gazette.com/columnists/20020905brian5.asp + + + diff --git a/Ch3/datasets/spam/easy_ham/00808.1398044c30f7120129aed031ce56ba58 b/Ch3/datasets/spam/easy_ham/00808.1398044c30f7120129aed031ce56ba58 new file mode 100644 index 000000000..aea88157a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00808.1398044c30f7120129aed031ce56ba58 @@ -0,0 +1,299 @@ +From fork-admin@xent.com Mon Sep 30 13:54:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A736116F70 + for ; Mon, 30 Sep 2002 13:49:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:49:24 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UCTOg30449 for ; + Mon, 30 Sep 2002 13:29:25 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B5F7C2940A6; Mon, 30 Sep 2002 05:29:11 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from ms4.lga2.nytimes.com (ms4.lga2.nytimes.com [64.15.247.148]) + by xent.com (Postfix) with ESMTP id 4D42029409E for ; + Mon, 30 Sep 2002 05:28:13 -0700 (PDT) +Received: from email5.lga2.nytimes.com (email5 [10.0.0.170]) by + ms4.lga2.nytimes.com (Postfix) with SMTP id A2E285A5BD for ; + Mon, 30 Sep 2002 08:32:25 -0400 (EDT) +Received: by email5.lga2.nytimes.com (Postfix, from userid 202) id + A653E58A4D; Mon, 30 Sep 2002 08:24:23 -0400 (EDT) +Reply-To: khare@alumni.caltech.edu +From: khare@alumni.caltech.edu +To: fork@spamassassin.taint.org +Subject: NYTimes.com Article: Vast Detail on Towers' Collapse May Be Sealed +Message-Id: <20020930122423.A653E58A4D@email5.lga2.nytimes.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 08:24:23 -0400 (EDT) + +This article from NYTimes.com +has been sent to you by khare@alumni.caltech.edu. + + +Another reminder that the moral writ of intellectual property is -- and ought to --be more limited than real property. Private money paid for these bits, but expropriation may be fairer for IP than real-P. + +Rohit + +khare@alumni.caltech.edu + + +Vast Detail on Towers' Collapse May Be Sealed + +September 30, 2002 +By JAMES GLANZ and ERIC LIPTON + + + + + + +What is almost certainly the most sophisticated and +complete understanding of exactly how and why the twin +towers of the World Trade Center fell has been compiled as +part of a largely secret proceeding in federal court in +Lower Manhattan. + +Amassed during the initial stages of a complicated +insurance lawsuit involving the trade center, the +confidential material contains data and expert analysis +developed by some of the nation's most respected +engineering minds. It includes computer calculations that +have produced a series of three-dimensional images of the +crumpled insides of the towers after the planes hit, +helping to identify the sequence of failures that led to +the collapses. + +An immense body of documentary evidence, like maps of the +debris piles, rare photos and videos, has also been +accumulated in a collection that far outstrips what +government analysts have been able to put together as they +struggle to answer the scientifically complex and +emotionally charged questions surrounding the deadly +failures of the buildings. + +But everyone from structural engineers to relatives of +victims fear that the closely held information, which +includes the analysis and the possible answers that +families and engineers around the world have craved, may +remain buried in sealed files, or even destroyed. + +Bound by confidentiality agreements with their clients, the +experts cannot disclose their findings publicly as they +wait for the case to play out. Such restrictions are +typical during the discovery phase of litigation. And as it +now stands, the judge in the case - who has agreed that +certain material can remain secret for the time being - has +approved standard legal arrangements that, should the +lawsuit be settled before trial, could cause crucial +material generated by the competing sides to be withheld. + +"We're obviously in favor of releasing the information, but +we can't until we're told what to do," said Matthys Levy, +an engineer and founding partner at Weidlinger Associates, +who is a consultant in the case and the author of "Why +Buildings Fall Down: How Structures Fail" (Norton, 2nd +edition, 2002). + +"Let's just say we understand the mechanics of the whole +process" of the collapse, Mr. Levy said. + +Monica Gabrielle, who lost her husband, Richard, when the +south tower fell and who is a member of the Skyscraper +Safety Campaign, said the information should be disclosed. +"If they have answers and are not going to share them, I +would be devastated," Mrs. Gabrielle said. "They have a +moral obligation." + +The lawsuit that has generated the information involves +Larry A. Silverstein, whose companies own a lease on the +trade center property, and a consortium of insurance +companies. Mr. Silverstein maintains that each jetliner +that hit the towers constituted a separate terrorist +attack, entitling him to some $7 billion, rather than half +that amount, as the insurance companies say. + +As both sides have prepared their arguments, they have +spent hundreds of thousands of dollars acquiring expert +opinion about exactly what happened to the towers. + +Dean Davison, a spokesman for Industrial Risk Insurers of +Hartford, one of the insurance companies in the suit, said +of the findings, "There are some confidentiality agreements +that are keeping those out of the public domain today." He +conceded that differing opinions among the more than 20 +insurers on his side of the case could complicate any +release of the material. + +As for his own company, whose consultants alone have +produced more than 1,700 pages of analysis and thousands of +diagrams and photographs, Mr. Davison said every attempt +would be made to give the material eventually to "public +authorities and investigative teams." + +Still, some of that analysis relies on information like +blueprints and building records from other sources, like +the Port Authority of New York and New Jersey, which built +and owned the trade center and supports Mr. Silverstein in +the suit. Mr. Davison said he was uncertain how the +differing origins of the material would influence his +company's ability to release information. + +In a statement, the Port Authority said access to documents +would be "decided on a case-by-case basis consistent with +applicable law and policy," adding that it would cooperate +with "federal investigations." + +The fate of the research is particularly critical to +resolve unanswered questions about why the towers fell, +given the dissatisfaction with the first major inquiry into +the buildings' collapse. That investigation, led by the +Federal Emergency Management Agency, was plagued by few +resources, a lack of access to crucial information like +building plans, and infighting among experts and officials. +A new federal investigation intended to remedy those +failings has just begun at the National Institute of +Standards and Technology, or NIST, an agency that has +studied many building disasters. + +Officials with NIST have said it could take years to make +final determinations and recommendations for other +buildings, a process they now acknowledge might be speeded +up with access to the analysis done by the consultants on +the lawsuit. + +Gerald McKelvey, a spokesman for Mr. Silverstein, said of +the real estate executive's own heavily financed +investigative work, "We decline to comment other than to +say that Silverstein is cooperating fully with the NIST +investigation." A spokesman for the agency confirmed it was +in discussions with Mr. Silverstein on the material, but +said no transfer had taken place. + +With no shortage of money or expertise, investigations by +both sides in the legal case have produced a startling body +of science and theory, some of it relevant not only to the +trade center disaster but to other skyscrapers as well. + +"The work should be available to other investigators," said +Ramon Gilsanz, a structural engineer and managing partner +at Gilsanz Murray Steficek, who was a member of the earlier +inquiry. "It could be used to build better buildings in the +future." + +Legal experts say confidentiality arrangements like the one +governing the material can lead to a variety of outcomes, +from full or partial disclosure to destruction of such +information. In some cases, litigants who paid for the +reports may make them public themselves. Or they may ask to +have them sealed forever. +"It is not unusual for one party or another to try to keep +some of those documents secret for one reason or another, +some legitimate, some not," said Lee Levine, a First +Amendment lawyer at Levine Sullivan & Koch in Washington. + +Mr. Levine said that because of the presumed value of the +information, the court might look favorably on requests to +make it public. But the uncertainty over the fate of the +material is unnerving to many people, especially experts +who believe that only a complete review of the evidence - +not piecemeal disclosures by litigants eager to protect +their own interests - could lead to an advance in the +federal investigation of the trade center. + +"It's important for this to get presented and published and +subjected to some scrutiny," said Dr. John Osteraas, +director of civil engineering practice at Exponent Failure +Analysis in Menlo Park, Calif., and a consultant on the +case, "because then the general engineering community can +sort it out." + +The scope of the investigation behind the scenes is vast by +any measure. Mr. Levy and his colleagues at Weidlinger +Associates, hired by Silverstein Properties, have called +upon powerful computer programs, originally developed with +the Pentagon for classified research, to create a model of +the Sept. 11 attack from beginning to end. + +The result is a compilation of three-dimensional images of +the severed exterior columns, smashed floor and damaged +core of the towers, beginning with the impacts and +proceeding up to the moments of collapse. Those images - +which Mr. Levy is not allowed to release - have helped +pinpoint the structural failures. + +The FEMA investigators did not have access to such computer +modeling. Nor did the FEMA team have unfettered access to +the trade center site, with all its evidence, in the weeks +immediately after the attacks. But no such constraints +hampered engineers at LZA/Thornton-Tomasetti, brought to +the site for emergency work beginning on the afternoon of +Sept. 11. Daniel A. Cuoco, the company president and a +consultant to Silverstein Properties on the case, said he +had assembled detailed maps of the blazing debris at ground +zero in models that perhaps contain further clues about how +the towers fell. + +Though the FEMA team could not determine "where things +actually fell," Mr. Cuoco said, "we've indicated the +specific locations." + +Mr. Cuoco said he could not reveal any additional details +of the findings. Nor would Mr. Osteraas discuss the details +of computer calculations his company has done on the spread +of fires in large buildings like the twin towers. Mr. +Osteraas has also compiled an extensive archive of +photographs and videos of the towers that day, some of +which he believes have not been available to other +investigators. + +And the investigation has not limited itself to computers +and documentary evidence. For months, experiments in wind +tunnels in the United States and Canada have been examining +the aerodynamics that fed the flames that day and stressed +the weakening structures. + +Jack Cermak, president of Cermak Peterka Peterson in Fort +Collins, Colo., was retained by the insurance companies but +had previously performed wind-tunnel studies for the +original design of the twin towers nearly 40 years ago. For +the legal case, Dr. Cermak said, "we've done probably more +detailed measurements than in the original design." + +"The data that have been acquired are very valuable in +themselves for understanding how wind and buildings +interact," Dr. Cermak said. "Some of the information may be +valuable for the litigation," he said, adding, "I think +I've told you all I can." + +http://www.nytimes.com/2002/09/30/nyregion/30TOWE.html?ex=1034388663&ei=1&en=0d3143a997e5e2e1 + + + +HOW TO ADVERTISE +--------------------------------- +For information on advertising in e-mail newsletters +or other creative advertising opportunities with The +New York Times on the Web, please contact +onlinesales@nytimes.com or visit our online media +kit at http://www.nytimes.com/adinfo + +For general information about NYTimes.com, write to +help@nytimes.com. + +Copyright 2002 The New York Times Company + + diff --git a/Ch3/datasets/spam/easy_ham/00809.93dfdb8801515083fde97a7fe6c921e4 b/Ch3/datasets/spam/easy_ham/00809.93dfdb8801515083fde97a7fe6c921e4 new file mode 100644 index 000000000..c1d905323 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00809.93dfdb8801515083fde97a7fe6c921e4 @@ -0,0 +1,97 @@ +From fork-admin@xent.com Mon Sep 30 17:56:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 966B716F1E + for ; Mon, 30 Sep 2002 17:53:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 17:53:59 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8UEYCK02639 for + ; Mon, 30 Sep 2002 15:34:12 +0100 +Received: from xent.com ([64.161.22.236]) by webnote.net (8.9.3/8.9.3) + with ESMTP id PAA20708 for ; Mon, 30 Sep 2002 15:14:55 + +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A6AE52940BD; Mon, 30 Sep 2002 07:14:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta5.snfc21.pbi.net (mta5.snfc21.pbi.net [206.13.28.241]) + by xent.com (Postfix) with ESMTP id 4516C29409E for ; + Mon, 30 Sep 2002 07:13:26 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta5.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H3900H7P8UF84@mta5.snfc21.pbi.net> for Fork@xent.com; Mon, + 30 Sep 2002 07:13:27 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: Re: A moment of silence for the First Amendment (fwd) +To: Fork@xent.com +Reply-To: gbolcer@endeavors.com +Message-Id: <3D9859B9.3A7F80C2@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +References: +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 07:03:37 -0700 + +Michael wrote: +> +> http://www.post-gazette.com/columnists/20020905brian5.asp + + +I thought this nekkid URL was going to be about the +infringement of 1st amendment rights for broadcasters +and proposed campaign finanice restrictions preventing them +from making money on advertisements that are deemed +thinly veiled campaign contributions by some arbitrary +government board. As it was posted to "discussion" I +thought there'd be some. + +Instead it's a Post-Gazette column by Brian O'Neill +lamenting the fact that some people know how to +fill out a permit so that they can take advantage +of their right to peaceable assembly. Obviously +he's poking fun at the idea that specific groups +get specific "zones" and that it's not up to the +police to decide what messages and signs get put into +what zones to most expediently keep order. + +The problem is that politics have gotten so muddied +nowadays, that shouting down and unpeaceably disrupting +political rallies that you don't agree with has become +common practice. The courts have constantly ruled +that there are some restrictions on the first amendment. +They teach you that your very first year of law school. + +I think that given the information as laid out by the story, +Mr. O'Neill has confused free speech with action. Free +speech or even protected speech as practiced by almost +every American seems to involve the ability to communicate +an idea to an unknown audience. Action involves directing +a specific comment to a specific well-defined individual or audience +that has immediate, harmful, and sometimes physical +effects that is easily forseeable by any reasonable person. + +I think Bill Neel of Butler needs to go back to school +as obviously he must have been sleeping in his civics +class or else they didn't teach civics in mini-guantanamo, OH +65 years ago. + +Greg + + diff --git a/Ch3/datasets/spam/easy_ham/00810.a290b36b1210ae7d5ad8d224aef851bf b/Ch3/datasets/spam/easy_ham/00810.a290b36b1210ae7d5ad8d224aef851bf new file mode 100644 index 000000000..fdf6b1c7d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00810.a290b36b1210ae7d5ad8d224aef851bf @@ -0,0 +1,87 @@ +From fork-admin@xent.com Mon Sep 30 17:56:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5BD1516F1F + for ; Mon, 30 Sep 2002 17:54:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 17:54:01 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UErJK03292 for ; + Mon, 30 Sep 2002 15:53:20 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6CDF32940C8; Mon, 30 Sep 2002 07:53:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta7.pltn13.pbi.net (mta7.pltn13.pbi.net [64.164.98.8]) by + xent.com (Postfix) with ESMTP id 73C6529409E for ; + Mon, 30 Sep 2002 07:52:30 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta7.pltn13.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H3900BC9ANJDV@mta7.pltn13.pbi.net> for Fork@xent.com; Mon, + 30 Sep 2002 07:52:31 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: Re: A moment of silence for the First Amendment (fwd) +To: Fork@xent.com +Message-Id: <3D9862DE.1AE7525D@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +References: + <3D9859B9.3A7F80C2@endeavors.com> <3D986033.2060903@permafrost.net> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 07:42:38 -0700 + +Owen Byrne wrote: + +> What a load of crap. Politics are somehow more muddy now? I'd say that +> its considerably +> clearer - the vast majority of people feel disenfranchised, and the +> common practice of +> putting protestors in boxes is done usually to hide them from TV +> cameras, visiting dignitaries, +> etc, further exacerbating those feelings. +> "Unpeaceably disrupting political rallies" is now usually done by police +> with riot gear and pepper spray. +> +> We had a good one here a month or so ago - a few people peaceably +> strayed from the permit area, +> which was nearly a mile from the site of the meeting of finance +> ministers held here (the motorcade drove +> by it for about 10 seconds), and were immediately gassed, beaten and +> arrested. Not very muddied at all. + + +What does that exactly have to do with the statement that +distruption of peacable political assembly has become +a common practice disruption tool? It's an observation +not a judgement, comment, approval. You've focused on the +word "muddy" to use it in a different context than the one +I posted. + +Maybe the distinction I was trying to make was too subtle and +I was trying to be too clever with my writing this morning. +Let me summarize the important parts of my post for you: I +have a premise that there is a difference between free and protected +speech and action. I think O'Neill on his soapbox doesn't +understand the distinction. + +All better? + +Greg + + diff --git a/Ch3/datasets/spam/easy_ham/00811.caf6de89b99d2266288dfeff16359be3 b/Ch3/datasets/spam/easy_ham/00811.caf6de89b99d2266288dfeff16359be3 new file mode 100644 index 000000000..5b16b167d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00811.caf6de89b99d2266288dfeff16359be3 @@ -0,0 +1,147 @@ +From fork-admin@xent.com Mon Sep 30 17:56:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 98D9216F20 + for ; Mon, 30 Sep 2002 17:54:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 17:54:03 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UF9NK03893 for ; + Mon, 30 Sep 2002 16:09:25 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1E2792940D1; Mon, 30 Sep 2002 08:09:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc02.attbi.com (sccrmhc02.attbi.com [204.127.202.62]) + by xent.com (Postfix) with ESMTP id C5B4429409E for ; + Mon, 30 Sep 2002 08:08:21 -0700 (PDT) +Received: from [24.61.113.164] by sccrmhc02.attbi.com (InterMail + vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020930150823.BGMT27763.sccrmhc02.attbi.com@[24.61.113.164]>; + Mon, 30 Sep 2002 15:08:23 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <10654501659.20020930110821@magnesium.net> +To: Gregory Alan Bolcer +Cc: Fork@xent.com +Subject: Re[2]: A moment of silence for the First Amendment (fwd) +In-Reply-To: <3D9859B9.3A7F80C2@endeavors.com> +References: + <3D9859B9.3A7F80C2@endeavors.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 11:08:21 -0400 + +>> +>> http://www.post-gazette.com/columnists/20020905brian5.asp + + +GAB> I thought this nekkid URL was going to be about the +GAB> infringement of 1st amendment rights for broadcasters +GAB> and proposed campaign finanice restrictions preventing them +GAB> from making money on advertisements that are deemed +GAB> thinly veiled campaign contributions by some arbitrary +GAB> government board. As it was posted to "discussion" I +GAB> thought there'd be some. + +GAB> Instead it's a Post-Gazette column by Brian O'Neill +GAB> lamenting the fact that some people know how to +GAB> fill out a permit so that they can take advantage +GAB> of their right to peaceable assembly. Obviously +GAB> he's poking fun at the idea that specific groups +GAB> get specific "zones" and that it's not up to the +GAB> police to decide what messages and signs get put into +GAB> what zones to most expediently keep order. + +Oh thats right Greg. Because was explicitly clear that the pro-Bush +folks went out and did the permit dance. So where in the article is +this again? + +Lets get something straight here. This -is- a First Amendment issue. +Public streets, provided one isn't blocking traffic, generally tend to +be sorta ok, at least from my last interpretation of Con Law a few +years ago (I'll feign ignorance wrt the fact that laws may have +changed, and the specific facts in this case are weak). IF this guy +_was_ merely holding a sign (which it seems was the case for all the +pro-bush folks) he did nothing wrong. He certainly didn't do enough +of a wrong to warrant a disorderly conduct charge. + +I'll play with your perspective though. Lets assume a few things. +If I walk into the city office and tell them I want to peacably +assemble against Bush, do you think they'll give me a permit? +Probably not. So I lie. Then the cop does what happened in this +scenario. HE walks up, checks my permit and finds out that I +falsified my statement to get this said document. He arrests me. +End of story. + +GAB> The problem is that politics have gotten so muddied +GAB> nowadays, that shouting down and unpeaceably disrupting +GAB> political rallies that you don't agree with has become +GAB> common practice. The courts have constantly ruled +GAB> that there are some restrictions on the first amendment. +GAB> They teach you that your very first year of law school. + +I'll agree with Owen on this one. Muddied my ass. How hard is it to +chose between a Republocrat or a Demipublican? Not very. Shouting +down has grown to become the answer because the government, over a +span of years, and with the help of the Courts -has- limited the +rights we have as citizens under the First Amendment. If you +question the policy about terrorism, or drugs, or Iraq, or Bush in +general, you're aiding terrorism. If you challenge the beliefs of +the folks attending the various shadowy G8 conferences, you're an +anarchist, and you're herded off to a 'designated protest spot' miles +away from anything. Part of the point of speech is to be -heard-. +I can scream on my soapbox in the forest somewhere, and while thats +speech, its not effective speech. People are screaming and shouting +over the political figures because they cannot be heard in any other +way. + + + + +GAB> I think that given the information as laid out by the story, +GAB> Mr. O'Neill has confused free speech with action. Free +GAB> speech or even protected speech as practiced by almost +GAB> every American seems to involve the ability to communicate +GAB> an idea to an unknown audience. Action involves directing +GAB> a specific comment to a specific well-defined individual or audience +GAB> that has immediate, harmful, and sometimes physical +GAB> effects that is easily forseeable by any reasonable person. + +Getting back to my original point. How do you communicate an idea to +an unknown audience, if you're miles from where the audience is? How +do you bypass the rules for being -miles- away from the audience +without violating the rules of the regime? I don't think Mr. Nell was +throwing pies at Bush. A sign, the last time I checked, didn't cause +physical injury, or even emotional harm. If I remember Cohen v. +California, 403 U.S. 15 (1971), its not the individual speaking that +has the requirement to desist, but the individual listening who has +the option to leave. + + +Just my .02, while its still considered legal. + + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00812.5c9165b987d6010d672516ea28ffe213 b/Ch3/datasets/spam/easy_ham/00812.5c9165b987d6010d672516ea28ffe213 new file mode 100644 index 000000000..8c1598c84 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00812.5c9165b987d6010d672516ea28ffe213 @@ -0,0 +1,62 @@ +From fork-admin@xent.com Mon Sep 30 17:56:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 60B0E16F21 + for ; Mon, 30 Sep 2002 17:54:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 17:54:06 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UFXEK04693 for ; + Mon, 30 Sep 2002 16:33:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id A45ED2940D3; Mon, 30 Sep 2002 08:33:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id B4F1329409E for ; + Mon, 30 Sep 2002 08:32:53 -0700 (PDT) +Received: from sashimi (dmz-firewall [206.199.198.4]) by Boron.MeepZor.Com + (8.11.6/8.11.6) with SMTP id g8UFWu222753 for ; + Mon, 30 Sep 2002 11:32:56 -0400 +From: "Bill Stoddard" +To: "Fork@Xent.Com" +Subject: RE: A moment of silence for the First Amendment (fwd) +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: <3D9859B9.3A7F80C2@endeavors.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 11:33:47 -0400 + +> The problem is that politics have gotten so muddied +> nowadays, that shouting down and unpeaceably disrupting +> political rallies that you don't agree with has become +> common practice. The courts have constantly ruled +> that there are some restrictions on the first amendment. +> They teach you that your very first year of law school. +> + +I don't think politics is any muddier. People are becoming increasingly +unethical. It's a breakdown in home training. + +Bill + + diff --git a/Ch3/datasets/spam/easy_ham/00813.3bb7842dbc6ea433e2fa5fb94f3d2571 b/Ch3/datasets/spam/easy_ham/00813.3bb7842dbc6ea433e2fa5fb94f3d2571 new file mode 100644 index 000000000..db692c420 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00813.3bb7842dbc6ea433e2fa5fb94f3d2571 @@ -0,0 +1,87 @@ +From fork-admin@xent.com Mon Sep 30 17:56:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D272116F16 + for ; Mon, 30 Sep 2002 17:53:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 17:53:57 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UESFK02460 for ; + Mon, 30 Sep 2002 15:28:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E268B2940C6; Mon, 30 Sep 2002 07:28:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id BA87429409E for + ; Mon, 30 Sep 2002 07:27:20 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17w1Nl-0007yE-00; Mon, 30 Sep 2002 11:18:45 -0300 +Message-Id: <3D986033.2060903@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.1) Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: gbolcer@endeavors.com +Cc: Fork@xent.com +Subject: Re: A moment of silence for the First Amendment (fwd) +References: + <3D9859B9.3A7F80C2@endeavors.com> +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 11:31:15 -0300 + +Gregory Alan Bolcer wrote: + +>at zones to most expediently keep order. +> +>The problem is that politics have gotten so muddied +>nowadays, that shouting down and unpeaceably disrupting +>political rallies that you don't agree with has become +>common practice. The courts have constantly ruled +>that there are some restrictions on the first amendment. +>They teach you that your very first year of law school. +> +> +What a load of crap. Politics are somehow more muddy now? I'd say that +its considerably +clearer - the vast majority of people feel disenfranchised, and the +common practice of +putting protestors in boxes is done usually to hide them from TV +cameras, visiting dignitaries, +etc, further exacerbating those feelings. +"Unpeaceably disrupting political rallies" is now usually done by police +with riot gear and pepper spray. + +We had a good one here a month or so ago - a few people peaceably +strayed from the permit area, +which was nearly a mile from the site of the meeting of finance +ministers held here (the motorcade drove +by it for about 10 seconds), and were immediately gassed, beaten and +arrested. Not very muddied at all. + +Owen + + + + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00814.6095f126eed33df37a63e3a37b2728fb b/Ch3/datasets/spam/easy_ham/00814.6095f126eed33df37a63e3a37b2728fb new file mode 100644 index 000000000..41858dadc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00814.6095f126eed33df37a63e3a37b2728fb @@ -0,0 +1,53 @@ +From fork-admin@xent.com Mon Sep 30 17:56:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E714116F22 + for ; Mon, 30 Sep 2002 17:54:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 17:54:07 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UFdOK05074 for ; + Mon, 30 Sep 2002 16:39:26 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 11F4E2940D5; Mon, 30 Sep 2002 08:39:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id 02EB029409E for + ; Mon, 30 Sep 2002 08:38:27 -0700 (PDT) +Received: (qmail 6705 invoked by uid 508); 30 Sep 2002 15:37:49 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.106) by + venus.phpwebhosting.com with SMTP; 30 Sep 2002 15:37:48 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8UFcEQ20748 for ; + Mon, 30 Sep 2002 17:38:15 +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: forkit! +Subject: MIT OpenCourseWare +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 17:38:14 +0200 (CEST) + + + +Looks useful. Hopefully, they'll put up some more material soon. + + http://ocw.mit.edu/global/all-courses.html + + + diff --git a/Ch3/datasets/spam/easy_ham/00815.141d4c82a4df4a06f0c0967a608109e6 b/Ch3/datasets/spam/easy_ham/00815.141d4c82a4df4a06f0c0967a608109e6 new file mode 100644 index 000000000..231672511 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00815.141d4c82a4df4a06f0c0967a608109e6 @@ -0,0 +1,90 @@ +From fork-admin@xent.com Mon Sep 30 17:56:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3730D16F49 + for ; Mon, 30 Sep 2002 17:54:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 17:54:09 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UFjHK05143 for ; + Mon, 30 Sep 2002 16:45:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D48C92940D7; Mon, 30 Sep 2002 08:45:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id 66D4929409E for ; + Mon, 30 Sep 2002 08:44:26 -0700 (PDT) +Received: from sashimi (dmz-firewall [206.199.198.4]) by Boron.MeepZor.Com + (8.11.6/8.11.6) with SMTP id g8UFiO223184 for ; + Mon, 30 Sep 2002 11:44:24 -0400 +From: "Bill Stoddard" +To: "Fork@Xent.Com" +Subject: RE: Re[2]: A moment of silence for the First Amendment (fwd) +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: <10654501659.20020930110821@magnesium.net> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 11:45:16 -0400 + +> +> GAB> The problem is that politics have gotten so muddied +> GAB> nowadays, that shouting down and unpeaceably disrupting +> GAB> political rallies that you don't agree with has become +> GAB> common practice. The courts have constantly ruled +> GAB> that there are some restrictions on the first amendment. +> GAB> They teach you that your very first year of law school. +> +> I'll agree with Owen on this one. Muddied my ass. How hard is it to +> chose between a Republocrat or a Demipublican? Not very. Shouting +> down has grown to become the answer because the government, over a +> span of years, and with the help of the Courts -has- limited the +> rights we have as citizens under the First Amendment. + +Wishful thinking. People are just bigger dickheads now. Culture is changing +and it is becoming acceptable to get in peoples face and shout them down +when you disagree with them. The people that do this are NOT +disenfranchised. They +get their rocks off on being disagreeable assholes. The act of protesting is +more important than the actual issue being protested for most of these +people. + +> question the policy about terrorism, or drugs, or Iraq, or Bush in +> general, you're aiding terrorism. If you challenge the beliefs of +> the folks attending the various shadowy G8 conferences, you're an +> anarchist, and you're herded off to a 'designated protest spot' miles +> away from anything. Part of the point of speech is to be -heard-. +> I can scream on my soapbox in the forest somewhere, and while thats +> speech, its not effective speech. People are screaming and shouting +> over the political figures because they cannot be heard in any other +> way. + +And where does this end? Shouting down speakers is an obviously stupid +tactic if they are -really- interested in advocating change. Are they such +clueless social morons that they don't see this or are they just interested +in stroking their pathetic egos? + +OBTW, 'clueless social moron syndrom' does not have political boundaries. + +Bill + + diff --git a/Ch3/datasets/spam/easy_ham/00816.5fa114769164d0ff93317bc714a3f68f b/Ch3/datasets/spam/easy_ham/00816.5fa114769164d0ff93317bc714a3f68f new file mode 100644 index 000000000..966eeb1a3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00816.5fa114769164d0ff93317bc714a3f68f @@ -0,0 +1,67 @@ +From fork-admin@xent.com Mon Sep 30 17:57:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E485516F75 + for ; Mon, 30 Sep 2002 17:54:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 17:54:10 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UFuFK05473 for ; + Mon, 30 Sep 2002 16:56:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id DE7ED2940DA; Mon, 30 Sep 2002 08:56:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id 7CF2729409E for ; + Mon, 30 Sep 2002 08:55:46 -0700 (PDT) +Received: from Golux.Com (dmz-firewall [206.199.198.4]) by + Boron.MeepZor.Com (8.11.6/8.11.6) with ESMTP id g8UFtm223707; + Mon, 30 Sep 2002 11:55:48 -0400 +Message-Id: <3D9876EE.2951E0DD@Golux.Com> +From: Rodent of Unusual Size +Organization: The Apache Software Foundation +X-Mailer: Mozilla 4.79 [en] (WinNT; U) +X-Accept-Language: en +MIME-Version: 1.0 +To: Flatware or Road Kill? +Subject: Re: A moment of silence for the First Amendment (fwd) +References: +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 12:08:14 -0400 + +Bill Stoddard wrote: +> +> Wishful thinking. People are just bigger dickheads now. + +nah, they've always been this way. + +> Culture is changing and it is becoming acceptable to get in +> peoples face and shout them down when you disagree with them. + +culture changing, yeh. 'those who fail to learn from history..' +what does it tell you when a market chain is named 'bread and circus' +and no-one twigs? +-- +#ken P-)} + +Ken Coar, Sanagendamgagwedweinini http://Golux.Com/coar/ +Author, developer, opinionist http://Apache-Server.Com/ + +"Millennium hand and shrimp!" + + diff --git a/Ch3/datasets/spam/easy_ham/00817.6dd747cab2629ac615233a528525bb8f b/Ch3/datasets/spam/easy_ham/00817.6dd747cab2629ac615233a528525bb8f new file mode 100644 index 000000000..0f088daed --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00817.6dd747cab2629ac615233a528525bb8f @@ -0,0 +1,84 @@ +From fork-admin@xent.com Mon Sep 30 17:57:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CE90F16F77 + for ; Mon, 30 Sep 2002 17:54:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 17:54:13 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UGNIK07243 for ; + Mon, 30 Sep 2002 17:23:18 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 600562940E3; Mon, 30 Sep 2002 09:23:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc03.attbi.com (sccrmhc03.attbi.com [204.127.202.63]) + by xent.com (Postfix) with ESMTP id 30F5B2940E1 for ; + Mon, 30 Sep 2002 09:22:28 -0700 (PDT) +Received: from [24.61.113.164] by sccrmhc03.attbi.com (InterMail + vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020930162229.FGFL22381.sccrmhc03.attbi.com@[24.61.113.164]>; + Mon, 30 Sep 2002 16:22:29 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <11958948363.20020930122228@magnesium.net> +To: Owen Byrne +Cc: Fork@xent.com +Subject: Re[2]: A moment of silence for the First Amendment (fwd) +In-Reply-To: <3D9879E9.7020708@permafrost.net> +References: + <3D9879E9.7020708@permafrost.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 12:22:28 -0400 + + +>> +>>Wishful thinking. People are just bigger dickheads now. Culture is changing +>>and it is becoming acceptable to get in peoples face and shout them down +>>when you disagree with them. The people that do this are NOT +>>disenfranchised. They +>>get their rocks off on being disagreeable assholes. The act of protesting is +>>more important than the actual issue being protested for most of these +>>people. +>> +>> +OB> In my experience, this is classic "American" behaviour, and I don't +OB> think its on the increase outside of the US of A. +OB> I am willing to accept the premise that Americans are bigger dickheads +OB> then they used to be. + +*sighs* + +Right. Because Americans are the only people capable of being +assholes. Shit. History keeps fucking up when they keep mentioning +all the historical examples of dickhead-ness that have proceeded the +US. + +After all, we're the only country who gets unruly when it comes to +issues. Thats why its always just the Americans at those crazy WTO +meetings... Right, Owen? + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00818.02224a14a25dd7014fd4f48518f48e5b b/Ch3/datasets/spam/easy_ham/00818.02224a14a25dd7014fd4f48518f48e5b new file mode 100644 index 000000000..390c59d80 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00818.02224a14a25dd7014fd4f48518f48e5b @@ -0,0 +1,97 @@ +From fork-admin@xent.com Mon Sep 30 17:57:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6F5A016F78 + for ; Mon, 30 Sep 2002 17:54:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 17:54:15 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UGmEK08081 for ; + Mon, 30 Sep 2002 17:48:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2CBD12940E1; Mon, 30 Sep 2002 09:48:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id 6233229409E for + ; Mon, 30 Sep 2002 09:47:25 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17w3ZK-0008BL-00; Mon, 30 Sep 2002 13:38:50 -0300 +Message-Id: <3D988106.90000@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.1) Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: bitbitch@magnesium.net +Cc: Fork@xent.com +Subject: Re: A moment of silence for the First Amendment (fwd) +References: + <3D9879E9.7020708@permafrost.net> + <11958948363.20020930122228@magnesium.net> +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 13:51:18 -0300 + +bitbitch@magnesium.net wrote: + +>>>Wishful thinking. People are just bigger dickheads now. Culture is changing +>>>and it is becoming acceptable to get in peoples face and shout them down +>>>when you disagree with them. The people that do this are NOT +>>>disenfranchised. They +>>>get their rocks off on being disagreeable assholes. The act of protesting is +>>>more important than the actual issue being protested for most of these +>>>people. +>>> +>>> +>>> +>>> +>OB> In my experience, this is classic "American" behaviour, and I don't +>OB> think its on the increase outside of the US of A. +>OB> I am willing to accept the premise that Americans are bigger dickheads +>OB> then they used to be. +> +>*sighs* +> +>Right. Because Americans are the only people capable of being +>assholes. Shit. History keeps fucking up when they keep mentioning +>all the historical examples of dickhead-ness that have proceeded the +>US. +> +>After all, we're the only country who gets unruly when it comes to +>issues. Thats why its always just the Americans at those crazy WTO +>meetings... Right, Owen? +> +> +> +> +> +A flippant remark that I will probably regret - sure there's assholes +everywhere. I just remember a lunch in Spain with +a semi-famous American - I think we had about 10 nationalities at the +table, and he managed to insult each of them within +15 minutes. A historical perspective makes me think that empires - +Roman, British, Russian, American, whatever - produce + a larger proportion of assholes than subject nations (and are more +likely to have them in positions of authority). +Owen + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00819.cbb61ae5d168944f5a02eccfd7217173 b/Ch3/datasets/spam/easy_ham/00819.cbb61ae5d168944f5a02eccfd7217173 new file mode 100644 index 000000000..4606477a0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00819.cbb61ae5d168944f5a02eccfd7217173 @@ -0,0 +1,83 @@ +From fork-admin@xent.com Mon Sep 30 17:57:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4F9BC16F76 + for ; Mon, 30 Sep 2002 17:54:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 17:54:12 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UGIDK06989 for ; + Mon, 30 Sep 2002 17:18:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 5A0892940DE; Mon, 30 Sep 2002 09:18:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id 2F80A29409E for + ; Mon, 30 Sep 2002 09:17:04 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17w35x-000884-00; Mon, 30 Sep 2002 13:08:29 -0300 +Message-Id: <3D9879E9.7020708@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.1) Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Bill Stoddard +Cc: "Fork@Xent.Com" +Subject: Re: A moment of silence for the First Amendment (fwd) +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 13:20:57 -0300 + +Bill Stoddard wrote: + +>>GAB> The problem is that politics have gotten so muddied +>>GAB> nowadays, that shouting down and unpeaceably disrupting +>>GAB> political rallies that you don't agree with has become +>>GAB> common practice. The courts have constantly ruled +>>GAB> that there are some restrictions on the first amendment. +>>GAB> They teach you that your very first year of law school. +>> +>>I'll agree with Owen on this one. Muddied my ass. How hard is it to +>>chose between a Republocrat or a Demipublican? Not very. Shouting +>>down has grown to become the answer because the government, over a +>>span of years, and with the help of the Courts -has- limited the +>>rights we have as citizens under the First Amendment. +>> +>> +> +>Wishful thinking. People are just bigger dickheads now. Culture is changing +>and it is becoming acceptable to get in peoples face and shout them down +>when you disagree with them. The people that do this are NOT +>disenfranchised. They +>get their rocks off on being disagreeable assholes. The act of protesting is +>more important than the actual issue being protested for most of these +>people. +> +> +In my experience, this is classic "American" behaviour, and I don't +think its on the increase outside of the US of A. +I am willing to accept the premise that Americans are bigger dickheads +then they used to be. + +Owen + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00820.13f6cb2d10777d8b8ff18399657607e8 b/Ch3/datasets/spam/easy_ham/00820.13f6cb2d10777d8b8ff18399657607e8 new file mode 100644 index 000000000..08c19786e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00820.13f6cb2d10777d8b8ff18399657607e8 @@ -0,0 +1,65 @@ +From fork-admin@xent.com Mon Sep 30 19:58:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6902316F16 + for ; Mon, 30 Sep 2002 19:57:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 19:57:31 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UHFEK09117 for ; + Mon, 30 Sep 2002 18:15:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B30ED2940E0; Mon, 30 Sep 2002 10:15:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav72.law15.hotmail.com [64.4.22.207]) by + xent.com (Postfix) with ESMTP id CF87129409E for ; + Mon, 30 Sep 2002 10:14:07 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 30 Sep 2002 10:14:09 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: + <3D9859B9.3A7F80C2@endeavors.com> + <10654501659.20020930110821@magnesium.net> +Subject: Re: Re[2]: A moment of silence for the First Amendment (fwd) +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 30 Sep 2002 17:14:09.0728 (UTC) FILETIME=[CA459C00:01C268A4] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 10:19:12 -0700 + + +----- Original Message ----- +From: + +> People are screaming and shouting over the political figures because +> they cannot be heard in any other way. +What, are they illiterate? Mute? What's their problem? If somebody stops +them from posting web pages, or printing newsletters, or talking on the +phone, or organizing their /own/ conference then that would be wrong. + +I don't think free speech is a license to speak directly at and be in the +physical presence of any particular individual of your choosing - especially +when that individual is busy doing something else and isn't interested. + + diff --git a/Ch3/datasets/spam/easy_ham/00821.610507766f9b9a60431a96042fc135a5 b/Ch3/datasets/spam/easy_ham/00821.610507766f9b9a60431a96042fc135a5 new file mode 100644 index 000000000..4603d96f1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00821.610507766f9b9a60431a96042fc135a5 @@ -0,0 +1,76 @@ +From fork-admin@xent.com Mon Sep 30 19:58:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1913016F21 + for ; Mon, 30 Sep 2002 19:57:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 19:57:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UHJUK09309 for ; + Mon, 30 Sep 2002 18:19:30 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 63C382940EB; Mon, 30 Sep 2002 10:19:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id 916262940EA for ; + Mon, 30 Sep 2002 10:18:07 -0700 (PDT) +Received: (qmail 36539 invoked by uid 19621); 30 Sep 2002 17:15:59 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 30 Sep 2002 17:15:59 -0000 +Subject: Re: A moment of silence for the First Amendment (fwd) +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: <3D9879E9.7020708@permafrost.net> +References: + <3D9879E9.7020708@permafrost.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1033407397.13480.34.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 30 Sep 2002 10:36:37 -0700 + +On Mon, 2002-09-30 at 09:20, Owen Byrne wrote: +> In my experience, this is classic "American" behaviour, and I don't +> think its on the increase outside of the US of A. + + +In my experience, this protest behavior is really only an issue in +"ultra-liberal" coastal cities, which is where I normally live. It is +part of the culture and that behavior is viewed as acceptable. + +For comparison, contrast this with the character of the arguably more +serious protests against Federal government abuse in the inter-mountain +West. They have a very different idea of what constitutes acceptable +protest practice. Those protests remain largely civil and polite, if +heated and aggressive, and those involve a far greater percentage of the +local population. And unlike 99% of the liberal coastal city protests +I've seen, the people protesting in the inter-mountain West are actually +facing immediate dire consequences from the activities they are +protesting and are strongly motivated to protest in a manner that gets +results. Some of their tactics, such as the practice of many businesses +and restaurants in northern Nevada to not give service to anyone known +to be in the employ of the BLM and related agencies, have been very +effective at forcing dialog. I don't recall anyone characterizing their +protests as impolite, rude, or violent, but then they have more to lose. + + +-James Rogers + jamesr@best.com + + diff --git a/Ch3/datasets/spam/easy_ham/00822.9d70f64546100d8f04b7394760cf512b b/Ch3/datasets/spam/easy_ham/00822.9d70f64546100d8f04b7394760cf512b new file mode 100644 index 000000000..342184dd9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00822.9d70f64546100d8f04b7394760cf512b @@ -0,0 +1,91 @@ +From fork-admin@xent.com Mon Sep 30 19:59:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8E17D16F18 + for ; Mon, 30 Sep 2002 19:57:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 19:57:34 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UI0FK10427 for ; + Mon, 30 Sep 2002 19:00:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6E6BE2940EA; Mon, 30 Sep 2002 11:00:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from 192.168.1.2 (smtp.piercelaw.edu [216.204.12.219]) by + xent.com (Postfix) with ESMTP id CC19C2940E8 for ; + Mon, 30 Sep 2002 10:59:59 -0700 (PDT) +Received: from 192.168.30.220 ([192.168.30.220]) by 192.168.1.2; + Mon, 30 Sep 2002 13:59:50 -0400 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <19164789201.20020930135949@magnesium.net> +To: "Mr. FoRK" +Cc: Fork@xent.com +Subject: Re[4]: A moment of silence for the First Amendment (fwd) +In-Reply-To: +References: + <3D9859B9.3A7F80C2@endeavors.com> + <10654501659.20020930110821@magnesium.net> + +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 13:59:49 -0400 + +Hello Mr., + +Monday, September 30, 2002, 1:19:12 PM, you wrote: + + +MF> ----- Original Message ----- +MF> From: + +>> People are screaming and shouting over the political figures because +>> they cannot be heard in any other way. +MF> What, are they illiterate? Mute? What's their problem? If somebody stops +MF> them from posting web pages, or printing newsletters, or talking on the +MF> phone, or organizing their /own/ conference then that would be wrong. + +Perhaps /cannot be heard in any other way (period)/ was incorrect. +What I meant, was a time-specific occurence. Sure, there are other +means outside of the circumstance of the occurence. BUt until we're +willing to eliminate the ability to speak in public -only- for the +side that doesn't agree with the political force, and make that part +of the 1st amendment, the parties -are- screaming and shouting over +political figures because they cannot be heard (to those figures) in +any other way. + +MF> I don't think free speech is a license to speak directly at and be in the +MF> physical presence of any particular individual of your choosing - especially +MF> when that individual is busy doing something else and isn't interested. + +Sure. And that goes back to my second argument -- Cohen. THey can +walk away. NObody compells them to stand there, I'll agree fully. +But we still have a Constitutional right to speak out against +policies, actions and grievances. + +Again. If you want it another way, lets change the Constitution. + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00823.187ae0372c96a338a86a19fc3215010d b/Ch3/datasets/spam/easy_ham/00823.187ae0372c96a338a86a19fc3215010d new file mode 100644 index 000000000..a23f7287b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00823.187ae0372c96a338a86a19fc3215010d @@ -0,0 +1,69 @@ +From fork-admin@xent.com Mon Sep 30 19:59:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3605C16F22 + for ; Mon, 30 Sep 2002 19:57:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 19:57:36 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UIgEK11688 for ; + Mon, 30 Sep 2002 19:42:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C9F7A2940E8; Mon, 30 Sep 2002 11:42:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav76.law15.hotmail.com [64.4.22.211]) by + xent.com (Postfix) with ESMTP id 0E3DF29409E for ; + Mon, 30 Sep 2002 11:41:18 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 30 Sep 2002 11:41:19 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: + <3D9859B9.3A7F80C2@endeavors.com> + <10654501659.20020930110821@magnesium.net> + + <19164789201.20020930135949@magnesium.net> +Subject: Re: Re[4]: A moment of silence for the First Amendment (fwd) +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 30 Sep 2002 18:41:19.0466 (UTC) FILETIME=[F7704CA0:01C268B0] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 11:46:26 -0700 + + +----- Original Message ----- +From: + +> the parties -are- screaming and shouting over +> political figures because they cannot be heard (to those figures) in +> any other way. +The right to speak is not the same as the right to be heard by the audience +of the speakers choice. + +Disruptive protests might be a means to create awareness - but that's a +pretty lame way to do it. If it truly is the only way, then I'm all for it, +but disruption for the sake of showing how committed the protesters are is +pretty weak. + + + diff --git a/Ch3/datasets/spam/easy_ham/00824.77239fe11a4e1336ea49ba0bfc2de54b b/Ch3/datasets/spam/easy_ham/00824.77239fe11a4e1336ea49ba0bfc2de54b new file mode 100644 index 000000000..8dfc3735c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00824.77239fe11a4e1336ea49ba0bfc2de54b @@ -0,0 +1,92 @@ +From fork-admin@xent.com Mon Sep 30 21:38:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 427BF16F03 + for ; Mon, 30 Sep 2002 21:38:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 21:38:11 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UJTFK13077 for ; + Mon, 30 Sep 2002 20:29:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B856029409F; Mon, 30 Sep 2002 12:29:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm2-5.sba1.netlojix.net + [207.71.218.101]) by xent.com (Postfix) with ESMTP id 44A5929409E for + ; Mon, 30 Sep 2002 12:27:59 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id MAA06188; + Mon, 30 Sep 2002 12:34:12 -0700 +Message-Id: <200209301934.MAA06188@maltesecat> +To: fork@spamassassin.taint.org +Subject: Re: EBusiness Webforms: cluetrain has left the station +In-Reply-To: Message from fork-request@xent.com of + "Mon, 30 Sep 2002 05:29:02 PDT." + <20020930122902.4016.16668.Mailman@lair.xent.com> +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 12:34:12 -0700 + + + +> > ... webforms /can/ +> > accept "U.S. of A" as a country. Incredible, but true. Web forms can +> > also accept /multiple/ or even /free-form/ telephone numbers ... + +Are the people who use procrustean web +forms practices the same ones who don't +accept faxes? + +When I *really* need to get something +done, instead of just idle surfing, I +call or fax. Faxing, like a web form, +can be done 24x7; it allows me to give +all the (and only the) pertinent info +in a single place; it also provides a +self-journalled correspondence, which +means rollback is easy and replay is +even easier. + +-Dave + +> Sure, tiled windows were the best we had for +> a brief period of time, but they are completely useless +> except for some terminal based replacement applications. + +I've been running a tiled (but somewhat +overlapped, yielding a horizontal stack) +window manager lately. Like filling in +a web form, finding edges and shuffling +windows may seem productive, but I find +that having a window manager manage the +windows means I can concentrate on what +I want to do with their contents. + +::::::::: + +"dumb question: X client behind a firewall?" +> Back in my day, they didn't have ssh. Then again, back in my day, +> they didn't have firewalls. + +Back in my day, when one changed computer +installations, email would be forwarded +as a courtesy. + +Now, we seem to have swung so far in the +opposite direction that it makes sense to +ditch addresses every couple of years to +shed spam. + + diff --git a/Ch3/datasets/spam/easy_ham/00825.49de040a4a48997da11b0e751d40c211 b/Ch3/datasets/spam/easy_ham/00825.49de040a4a48997da11b0e751d40c211 new file mode 100644 index 000000000..9a3130158 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00825.49de040a4a48997da11b0e751d40c211 @@ -0,0 +1,63 @@ +From fork-admin@xent.com Mon Sep 30 21:38:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B106F16F16 + for ; Mon, 30 Sep 2002 21:38:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 21:38:14 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UJuGK13757 for ; + Mon, 30 Sep 2002 20:56:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9F3A82940F0; Mon, 30 Sep 2002 12:56:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (oe31.law12.hotmail.com [64.4.18.88]) by + xent.com (Postfix) with ESMTP id 9072529409E for ; + Mon, 30 Sep 2002 12:55:48 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 30 Sep 2002 12:55:50 -0700 +X-Originating-Ip: [66.92.145.79] +Reply-To: "Bill Kearney" +From: "Bill Kearney" +To: +References: <20020930171901.6342.67818.Mailman@lair.xent.com> +Subject: Re: A moment of silence for the First Amendment (fwd) +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4807.1700 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Message-Id: +X-Originalarrivaltime: 30 Sep 2002 19:55:50.0795 (UTC) FILETIME=[608EF5B0:01C268BB] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 15:55:47 -0400 + +> From: Owen Byrne +> A flippant remark that I will probably regret - +> sure there's assholes everywhere. I just remember a lunch in Spain with +> a semi-famous American - I think we had about 10 nationalities at the +> table, and he managed to insult each of them within +> 15 minutes. A historical perspective makes me think that empires - +> Roman, British, Russian, American, whatever - produce +> a larger proportion of assholes than subject nations (and are more +> likely to have them in positions of authority). + +Yep, those that win battles collect tthe spoils. Lead and breed. Want it to be +different? Lead, don't whine. + + diff --git a/Ch3/datasets/spam/easy_ham/00826.6ab31aba455701b24c69fd1f6dd59184 b/Ch3/datasets/spam/easy_ham/00826.6ab31aba455701b24c69fd1f6dd59184 new file mode 100644 index 000000000..8f13ebb25 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00826.6ab31aba455701b24c69fd1f6dd59184 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Tue Oct 1 10:41:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9A12916F73 + for ; Tue, 1 Oct 2002 10:39:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:39:25 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8ULUFK16923 for ; + Mon, 30 Sep 2002 22:30:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 023022940FA; Mon, 30 Sep 2002 14:30:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from venus.phpwebhosting.com (venus.phpwebhosting.com + [64.29.16.27]) by xent.com (Postfix) with SMTP id D3C1629409E for + ; Mon, 30 Sep 2002 14:29:11 -0700 (PDT) +Received: (qmail 13272 invoked by uid 508); 30 Sep 2002 21:28:37 -0000 +Received: from unknown (HELO hydrogen.leitl.org) (217.80.40.106) by + venus.phpwebhosting.com with SMTP; 30 Sep 2002 21:28:37 -0000 +Received: from localhost (eugen@localhost) by hydrogen.leitl.org + (8.11.6/8.11.6) with ESMTP id g8ULSxF29136; Mon, 30 Sep 2002 23:28:59 + +0200 +X-Authentication-Warning: hydrogen.leitl.org: eugen owned process doing -bs +From: Eugen Leitl +To: Tom +Cc: Jim Whitehead , FoRK +Subject: Re: Internet Archive bookmobile +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 23:28:59 +0200 (CEST) + +On Mon, 30 Sep 2002, Tom wrote: + +> If the set passes around enough then more people have these works. the +> more folks that have them now, while they are still legal to have, the +> likely they will be left behind in the possible/probabale copyright +> chillout..and if that doesnt happen then more folks than not will still + +We will be getting BlackNet-like guerilla P2P pretty soon. Packaging it +into wormcode with an initial userbase of a few 100 k to Mnodes gives you +pretty bulletproof plausible deniability. + +> have it for uses all manner of shades. + + diff --git a/Ch3/datasets/spam/easy_ham/00827.b863d1780c6c6ed248a3e9136bd52b72 b/Ch3/datasets/spam/easy_ham/00827.b863d1780c6c6ed248a3e9136bd52b72 new file mode 100644 index 000000000..8ac0c0c3f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00827.b863d1780c6c6ed248a3e9136bd52b72 @@ -0,0 +1,80 @@ +From fork-admin@xent.com Tue Oct 1 10:41:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 49AAF16F74 + for ; Tue, 1 Oct 2002 10:39:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:39:27 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8ULkEK17256 for ; + Mon, 30 Sep 2002 22:46:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B86662940FE; Mon, 30 Sep 2002 14:46:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id 9499E29409E for ; + Mon, 30 Sep 2002 14:45:18 -0700 (PDT) +Received: from sashimi (dmz-firewall [206.199.198.4]) by Boron.MeepZor.Com + (8.11.6/8.11.6) with SMTP id g8ULjL205222 for ; + Mon, 30 Sep 2002 17:45:21 -0400 +From: "Bill Stoddard" +To: "Fork@Xent.Com" +Subject: RE: Re[4]: A moment of silence for the First Amendment (fwd) +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: <19164789201.20020930135949@magnesium.net> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 17:46:11 -0400 + + +> MF> I don't think free speech is a license to speak directly at +> and be in the +> MF> physical presence of any particular individual of your +> choosing - especially +> MF> when that individual is busy doing something else and isn't +> interested. + +Yep. I agree 100% + +> +> Sure. And that goes back to my second argument -- Cohen. THey can +> walk away. NObody compells them to stand there, I'll agree fully. +> But we still have a Constitutional right to speak out against +> policies, actions and grievances. +> +> Again. If you want it another way, lets change the Constitution. + +Huh? Are you saying that whoever has the loudest voice gets to be heard? +Shouting down a public speaker could be considered a form of censorship. If +shouting down public speakers is 'protected' it is only a matter of time +before the people doing the shouting have their tactic used against +them -every single time they open their mouth-. The tactic is stupid and +non-productive and if generally used, will only result in chaos. The tactic +is just stupid ego-bation at best, unless the goal is to generate chaos. +And humans whose goals and actions in life are to create chaos in society +should be locked up (provided you can accurately identify them, which is not +really possible anyway, but hey, this is my rant :-). IMHO. + +Bill + + diff --git a/Ch3/datasets/spam/easy_ham/00828.709e1ec58a2bf04455cdf5c0c83f444c b/Ch3/datasets/spam/easy_ham/00828.709e1ec58a2bf04455cdf5c0c83f444c new file mode 100644 index 000000000..f1314620f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00828.709e1ec58a2bf04455cdf5c0c83f444c @@ -0,0 +1,130 @@ +From fork-admin@xent.com Tue Oct 1 10:41:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E843216F75 + for ; Tue, 1 Oct 2002 10:39:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:39:28 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UMUDK18674 for ; + Mon, 30 Sep 2002 23:30:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3A9042940A5; Mon, 30 Sep 2002 15:30:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from 192.168.1.2 (smtp.piercelaw.edu [216.204.12.219]) by + xent.com (Postfix) with ESMTP id 316E029409E for ; + Mon, 30 Sep 2002 15:29:43 -0700 (PDT) +Received: from 192.168.30.220 ([192.168.30.220]) by 192.168.1.2; + Mon, 30 Sep 2002 18:29:31 -0400 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <16680971951.20020930182931@magnesium.net> +To: "Bill Stoddard" +Cc: Fork@xent.com +Subject: Re[6]: A moment of silence for the First Amendment (fwd) +In-Reply-To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 18:29:31 -0400 + +Hello Bill, + +Monday, September 30, 2002, 5:46:11 PM, you wrote: + + +>> MF> I don't think free speech is a license to speak directly at +>> and be in the +>> MF> physical presence of any particular individual of your +>> choosing - especially +>> MF> when that individual is busy doing something else and isn't +>> interested. + +BS> Yep. I agree 100% + +>> +>> Sure. And that goes back to my second argument -- Cohen. THey can +>> walk away. NObody compells them to stand there, I'll agree fully. +>> But we still have a Constitutional right to speak out against +>> policies, actions and grievances. +>> +>> Again. If you want it another way, lets change the Constitution. + +BS> Huh? Are you saying that whoever has the loudest voice gets to be heard? +BS> Shouting down a public speaker could be considered a form of censorship. If +BS> shouting down public speakers is 'protected' it is only a matter of time +BS> before the people doing the shouting have their tactic used against +BS> them -every single time they open their mouth-. The tactic is stupid and +BS> non-productive and if generally used, will only result in chaos. The tactic +BS> is just stupid ego-bation at best, unless the goal is to generate chaos. +BS> And humans whose goals and actions in life are to create chaos in society +BS> should be locked up (provided you can accurately identify them, which is not +BS> really possible anyway, but hey, this is my rant :-). IMHO. + +BS> Bill + + +No offense or anything, but there's a difference between holding a +sign that doesn't agree with Bush and screaming at him. + +My sole point, as far as the 1st Amendment goes is that there is more +to this game than just being an angry, liberal youth. (Which is the +gross culmination of everyone's argument sofar) The screaming isn't +the most effective method around. I don't believe I argued that it +was. But screaming is happening because the means to communicate to +the representatives involved are diminishing, at least as far as the +people doing the screaming are concerned. For the record, I don't +support the screamers in organized conferences (Such as the Colin +Powell shout-down that was mentioned earlier). I don't think that +this is what the 1st Amendment was implying. These folks -do- have a +right to be heard, and I think they have a right to be heard by the +folks they elected in the first place. + +My point, (my only point) was really more concerned with the cases +such as Mr. Nell. He wasn't engaged (at least from the limited facts +we have) in a shoutout, but rather in a difference of opinion. He +has a right to possess this opinion and make it known to the +representatives that are elected. A sign is not a shout-out. + +I think I may have missed (or not accurately addressed) the original +thread switch that took this example and mixed in the screaming +dissenters to the mix. I was mostly responding with my miffedness in +having broad-brush strokes applied to a group without examining the +policy reasons that might have contributed to it. IN this case, the +screaming parties are fed up with getting corralled miles away from +the folks they need to speak with. They're resorting to creative, +offensive and constitutionally challengable means, but its not simply +due to the fact that they're 20 and have lost all decorum. The 'My +generation never did this ' is all BS. THere's more to this story, +we just dont' know it all. + +I hope this clarifies my position. For the quick rehash: + +Screaming != Free speech on all cases. +Dissent = Free speech, provided you follow what has been laid down by +the Supremes. + +K? + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00829.7c74d7c59a6a5f0d0e54562ef671d14b b/Ch3/datasets/spam/easy_ham/00829.7c74d7c59a6a5f0d0e54562ef671d14b new file mode 100644 index 000000000..33d768310 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00829.7c74d7c59a6a5f0d0e54562ef671d14b @@ -0,0 +1,89 @@ +From fork-admin@xent.com Tue Oct 1 10:41:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A406616F1E + for ; Tue, 1 Oct 2002 10:39:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:39:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g91239K26727 for ; + Tue, 1 Oct 2002 03:03:09 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0EF6E2940AD; Mon, 30 Sep 2002 19:03:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sierra.birch.net (sierra.birch.net [216.212.0.61]) by + xent.com (Postfix) with ESMTP id D256329409E for ; + Mon, 30 Sep 2002 19:03:00 -0700 (PDT) +Received: (qmail 13138 invoked from network); 1 Oct 2002 02:02:59 -0000 +Received: from unknown (HELO there) ([216.212.1.217]) (envelope-sender + ) by mailserver.birch.net (qmail-ldap-1.03) with SMTP for + ; 1 Oct 2002 02:02:59 -0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Steve Nordquist +To: fork@spamassassin.taint.org +Subject: Re: EBusiness Webforms: cluetrain has left the station +X-Mailer: KMail [version 1.3.2] +References: <774F0112-D32A-11D6-8BB1-003065F62CD6@whump.com> +In-Reply-To: <774F0112-D32A-11D6-8BB1-003065F62CD6@whump.com> +MIME-Version: 1.0 +Message-Id: <20021001020300.D256329409E@xent.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 21:01:41 -0500 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g91239K26727 + +On Saturday 28 September 2002 04:37 pm, you struggled free to say: +&> > Although it's like a total shock to 99.999% (5nines) of all the +&> > employed website designers out there, the truth is webforms /can/ +&> > accept "U.S. of A" as a country. Incredible, but true. Web forms can +&> > also accept /multiple/ or even /free-form/ telephone numbers and can +&> > even be partitioned into manageable steps. All this can also be done +&> > without selling exclusive rights to your wallet to the World's +&> > Second-Richest Corporation (assuming Cisco is still #1) and vendor +&> > locking your business into their "small transaction fee" tithe. + +Think of all the people and places that would not get unsolicited mail +if we hadn't invented them. Though perhaps ordering a free Enron mug +as the King of Hell.... + +I think it's like P3P met whatever commercial /.like forum was rocking +yesterday, and they took all Greg's extra serotonin and lit up and +made a Successful go of personal address palettes you could occupy and +own or rent and even move or sell. So you'd reply to all the whitepaper +sites you wouldn't just call to get the real deal like: 'Okay, let's say +I'm in Factorytown, GuangZhou, and I'm a battery acid supervisor for +a multinational that sometimes buys B1s. e-mail me if you get your story +written up all the way;' or + 'Today, I'm a 200lb, 3m tall mophead with pearlecent teeth +and excellent sex-linked features, but who uses Solaris nntp clients. Got it?' + or merely + 'I can't read Base64 messages. I use small alphabets and +8-letter words that didn't come from the bible and use calculus, and +I'd thank you to class me as a Catamite.' + +&> Yes, but this is what normally happened: +&> Engineer: we can put an input validator/parser on the backend to do that. +&> ..... +&> Creative Director: I don't give a shit. As long as it's in blue. And +&> has a link to my press release. + +N3kk1D PRR3zzEw33Lz ahR 3V1L, but I thought it had to do with +coldfusion-compatiblie plugins (servlets, whatever) that overhyped +unimplemented features. Repeatedly. Openly. In rakish 10MB +branding-first downloads that meshed well with budgeting policies. + + diff --git a/Ch3/datasets/spam/easy_ham/00830.3a2cadbd29e654a7cbbf64ba4bdc378d b/Ch3/datasets/spam/easy_ham/00830.3a2cadbd29e654a7cbbf64ba4bdc378d new file mode 100644 index 000000000..a6bdd4a5d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00830.3a2cadbd29e654a7cbbf64ba4bdc378d @@ -0,0 +1,64 @@ +From fork-admin@xent.com Tue Oct 1 10:41:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C87C916F1F + for ; Tue, 1 Oct 2002 10:39:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:39:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g914V8K08142 for ; + Tue, 1 Oct 2002 05:31:08 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1FBAF2940C5; Mon, 30 Sep 2002 21:31:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f101.law15.hotmail.com [64.4.23.101]) by + xent.com (Postfix) with ESMTP id CEBD429409E for ; + Mon, 30 Sep 2002 21:30:57 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 30 Sep 2002 21:31:01 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Tue, 01 Oct 2002 04:31:01 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: Fork@xent.com +Subject: Re: A moment of silence for the First Amendment & Angry Liberal Yutes +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 01 Oct 2002 04:31:01.0444 (UTC) FILETIME=[58BDB040:01C26903] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 01 Oct 2002 04:31:01 +0000 + +Gregory Alan Bolcer: +>I'm not sure since I haven't attended civics class +>in quite some time, but the First Amendment doesn't cover protected speech, +>hate speech, or actions. .. + +The first two are wrong. The first amendment DOES +protect speech the Supreme Court decides it protects +(duh!), and that happens to include most of what +people consider hate speech. Unlike many other +nations, the US has no laws against hate speech, per +se. And the first amendment is the reason for that. + + + + +_________________________________________________________________ +Join the world’s largest e-mail service with MSN Hotmail. +http://www.hotmail.com + + diff --git a/Ch3/datasets/spam/easy_ham/00831.dfa70bbdaef79d5863917ba90097ba7a b/Ch3/datasets/spam/easy_ham/00831.dfa70bbdaef79d5863917ba90097ba7a new file mode 100644 index 000000000..27fe4d247 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00831.dfa70bbdaef79d5863917ba90097ba7a @@ -0,0 +1,172 @@ +From fork-admin@xent.com Tue Oct 1 10:41:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1D90F16F20 + for ; Tue, 1 Oct 2002 10:39:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:39:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g9157DK11395 for ; + Tue, 1 Oct 2002 06:07:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 08BDC2940EF; Mon, 30 Sep 2002 22:07:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav49.law15.hotmail.com [64.4.22.21]) by + xent.com (Postfix) with ESMTP id 29F2029409E for ; + Mon, 30 Sep 2002 22:06:03 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 30 Sep 2002 22:06:04 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +Subject: Dinosaurs Eggs and the Origins of Good and Evil +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 01 Oct 2002 05:06:04.0597 (UTC) FILETIME=[3E515E50:01C26908] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 22:11:10 -0700 + +One of the most bizarre pages I've seen on the Web. At first I thought it +might be some sort of back-story to a RPG, but, nope, it looks like somebody +believes this. + +=== +http://www.viking-z.org/r20i.htm + +M09. Dinosaurs Eggs and the Origins of Good and Evil. +DINOSAURS. Reptoid ETs are reported to be 12 foot high crocodiles walking on +their hind legs. This is a description of a dinosaur. It now appears in +Remote Viewing that the Reptoid ETs, dinosaurs and dragons are all linked +together and that they all originated on Earth. The Erideans who are Reptoid +derivatives have a home planet (in the Eridanus system) like all other ETs. +The Reptoids have no reported home planet. They also come over as entities +with little brain who control their bodies directly by spirit. This is a +description of a ghost or disincarnate entity regardless of how people see +them. Thus it could be that the Reptoids, Erideans, Nordics, Anunnaki, but +not the Greys, all have origins on Earth and have a strong link to Earth +even if they choose to live elsewhere. The Greys do not appear to have a +renal or urinary system and this points to them not originating on Earth. +The definitive work on dragons is "The Flight of Dragons" by Peter +Dickinson. If dragons did exist in the flesh, they did not survive the long +bow. Targets do not come much bigger. + +Truth is stranger than fiction. Thus the writer's current scenario is that +there were a race of dinosaurs which developed psychic intelligence to guard +their eggs and young, and who probably preferred to live underground. They +survived the wipe out of the dinosaurs 50 million years ago with difficulty. +They evolved into the Erideans and transferred to a more hospitable planet +(for them) possibly with the help of another race of ETs who wanted slaves +but otherwise had no interest in Earth or mind control. + +Thus it appears that the current Reptoids are the Spirits or ghosts of the +dinosaurs. They must have been powerful to survive 50 million years and also +to appear to some people. They have appeared to the writer in remote +viewing. They are living on as vampire entities. Such immortal minds are +contagious and can easily jump race and species barriers. If they can be +encouraged to reincarnate, then the power sources of the black magicians and +mind controllers will disappear. Encouraging them to reincarnate will help +so called immortal minds to disappear as immortal minds have great +difficulty surviving reincarnation. Purging people's dinosaurs should remove +all perverse psychic abilities not under their control. They are a source of +Satanic Guardian Angels and demons. They control us by owning our psi. Thus +if we regain ownership of psi, we must relinquish their control and that of +all other mind controllers. Encourage people to regain ownership of their +psi. + +THE ORIGINS OF LOVE, HATE AND PURE MALICE. The following scenario appears to +hold water and can account for the origins of our Universal Subconscious. + +Dinosaurs laid their eggs and buried them either underground or in piles of +rotting vegetation (a good source of beetles and grubs for young +hatchelings). They did not sit on their eggs to keep them warm, which made +them very vulnerable to drastic climate and temperature change. In order to +keep away predators some at least developed psychic mind control. To do this +they had to capture ownership of the psi of potential predators. This is an +act of hatred and outward looking. While a few dinosaurs did develop the +ability to bear living young, most did not. The dinosaurs got in first and +so their mind control tends to override all other latter minds. They have +become the source of all Satans, devils and demons. + +Birds on the other hand developed the ability to sit on their eggs and keep +them warm. A hen bird normally lays a series of eggs (say one per day) and +only starts sitting when the clutch is completely laid. Thus all eggs tend +to hatch together as they all have an equal period of warmth. This is +primarily an act of love but inward looking. Bearing live young is not +suitable to a bird of the air. A pregnant pigeon would not fly very far. +Antarctic penguins tuck a single egg between their legs to keep it warm, +even if they are standing on ice. + +Mammals developed live bearing of their young which is also primarily an act +of love and inward looking. This is especially true as a mammalian female +can not desert her young in the womb in case of emergency as can a bird +sitting on a nest. + +Dinosaurs developed hate and mind control of others to protect their young, +while birds and mammals developed love. Birds and mammals certainly do hate +all enemies of their young, but this is secondary. + +If one wants to purge the sources of malice of say a black magician, then +purge his dinosaurs and his dinosaur eggs. Unfortunately most of our +religions are based on dinosaur protection of eggs and thus mind control, +regardless of the front they put out to the public. Religion tends to +concentrate on "How to Brainwash your Neighbour". Conscious thought has +built many mighty empires, theologies and slave control systems out of using +"How to care for and protect one's young" as a foundation. + +Thus the foulest form of abuse possible is to call something "A load of +dinosaur's eggs". Purging the dinosaurs and dinosaur's eggs of any entity +tends to purge all malice back to its roots. + +It looks as if mighty immortal minds have built up from small beginnings, +aided and abetted by various occultists and other. As they will insist on +vampiring the living for energy to avoid reincarnation and disturbing the +serenity of the writer, he encourages them to reincarnate. + +ITEMS FOR INSPECTION. For mind control to take place, then someone must take +control or ownership of the target's psi and pleasure centres. Check for the +following. + +Nest of dinosaur's eggs, holy dinosaurs, etc. +Eggs, controllers or owners in peoples psi, pleasure centres, pain killing +hormones, abilities, etc. +Mind machines. +The original engraving or engram. +GOD and SATAN appear to be job titles and not entities in their own right. T +hey appear to be dinosaur engravings or engrams. No doubt dinosaurs were the +first job holders. +TIMETRACKS are worth investigating as our complete history from the start of +time. + +My, our, Man's timetracks, etc. +The time tracks of the Universe, Universal Subconscious, Galactic +Subconscious, etc. +EXTINCT RACES of ETs can cause problems when they live on in vampire mode. +Their virtues may known to channelers but they can also have vices. Whenever +one hears of races which have evolved on to higher planes, suspect that the +higher plane is a vampire one. One may never know what they looked like or +other basic characteristics, which makes linking back a trifle difficult. +Every extinct race, etc. +BLOOD ANCESTORS are also worth investigating as minds can be passed down via +genetic linkages. Some of these can be over 2,000 years old. +Every blood ancestor, ancestral mind, genetic mind, etc. + + diff --git a/Ch3/datasets/spam/easy_ham/00832.e30b18b8b964c0252bfcfbfe2b99efd6 b/Ch3/datasets/spam/easy_ham/00832.e30b18b8b964c0252bfcfbfe2b99efd6 new file mode 100644 index 000000000..f8a4955dd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00832.e30b18b8b964c0252bfcfbfe2b99efd6 @@ -0,0 +1,72 @@ +From fork-admin@xent.com Tue Oct 1 10:41:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9F04F16F16 + for ; Tue, 1 Oct 2002 10:39:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:39:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g915J2K11691 for ; + Tue, 1 Oct 2002 06:19:02 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 80E21294103; Mon, 30 Sep 2002 22:15:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav48.law15.hotmail.com [64.4.22.20]) by + xent.com (Postfix) with ESMTP id 2BAA82940F6 for ; + Mon, 30 Sep 2002 22:14:18 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 30 Sep 2002 22:14:21 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +Subject: Am I This Or Not? +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 01 Oct 2002 05:14:21.0746 (UTC) FILETIME=[66A44920:01C26909] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 22:19:29 -0700 + +Wow, talk about a pheenomeenon + +== +http://www.iamcal.com/software/ami/ + +AmIThisOrNot Dynamic Peer Rating System + +What is It? +It's a tool to help you build your own "Am I X Or Not" sites. + +Where Can I Get It? +Basic Version $20 +The basic version lets you build a specific "Am I X" site (example). The +license covers a single installation on a single site. + +Advanced Version $40 +The advanced version lets your users create their own "Am I X" sites +(example). The license covers a single installation on a single site. + +Installation $20 +Either version of the system can be installed on your web server, given FTP +access and MySQL login details. + + + diff --git a/Ch3/datasets/spam/easy_ham/00833.cc61a5d9b6ac040ef4ce65d1ee5ec069 b/Ch3/datasets/spam/easy_ham/00833.cc61a5d9b6ac040ef4ce65d1ee5ec069 new file mode 100644 index 000000000..c29bb5c00 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00833.cc61a5d9b6ac040ef4ce65d1ee5ec069 @@ -0,0 +1,84 @@ +From fork-admin@xent.com Tue Oct 1 10:41:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 01DB116F71 + for ; Tue, 1 Oct 2002 10:39:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:39:22 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8UKtFK15666 for ; + Mon, 30 Sep 2002 21:55:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id C0D8D2940F2; Mon, 30 Sep 2002 13:55:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from cats.ucsc.edu (cats-mx2.ucsc.edu [128.114.129.35]) by + xent.com (Postfix) with ESMTP id 5D7C329409E for ; + Mon, 30 Sep 2002 13:54:36 -0700 (PDT) +Received: from Tycho (dhcp-55-196.cse.ucsc.edu [128.114.55.196]) by + cats.ucsc.edu (8.10.1/8.10.1) with SMTP id g8UKsRT08173 for + ; Mon, 30 Sep 2002 13:54:27 -0700 (PDT) +From: "Jim Whitehead" +To: "FoRK" +Subject: Internet Archive bookmobile +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +X-Ucsc-Cats-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 13:51:47 -0700 + +http://www.sfgate.com/cgi-bin/article.cgi?file=/gate/archive/2002/09/26/bono +act.DTL + +Opening arguments are set to begin early next month in Eldred vs. Ashcroft, +a landmark U.S. Supreme Court case that will decide the future of copyright +law, including how and when artists and writers can build upon the work of +others. + +.... + +To heighten public awareness of the importance of the case an Internet +bookmobile is set to depart San Francisco next Monday on a trip that will +bring it to the steps of the Supreme Court building in Washington, D.C., +before arguments wrap up. The van, which will be stopping at schools, +libraries and senior centers along the way, is equipped to provide free +high-speed access to thousands of literary and artistic works that are +already in the public domain. + +-------- + +I had the opportunity to visit the Internet Archive about a month ago, and +saw the bookmobile under construction. It's a neat idea. Take an SUV, put a +small satellite dish on the top, and put a computer, printer, and binding +machine in the back. Voila -- people can search for a book, then print out a +copy right there on the spot. Quite literally on-demand printing. Total +fixed cost of the computer/printer/binding machine, if bought new (the IA +had the equipment donated) is under $10k. + +One of the goals is to show libraries across the country that they could, if +they wished, add these "virtual holdings" (public domain materials) to their +existing library, at a fixed cost most libraries can afford. This should be +compelling to small libraries in remote areas. + +- Jim + + diff --git a/Ch3/datasets/spam/easy_ham/00834.a73f96c83f5f638954df85ede58a3709 b/Ch3/datasets/spam/easy_ham/00834.a73f96c83f5f638954df85ede58a3709 new file mode 100644 index 000000000..fc654bb90 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00834.a73f96c83f5f638954df85ede58a3709 @@ -0,0 +1,52 @@ +From fork-admin@xent.com Tue Oct 1 10:42:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6987616F56 + for ; Tue, 1 Oct 2002 10:39:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:39:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g915nLK12339 for ; + Tue, 1 Oct 2002 06:49:22 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BD24829410F; Mon, 30 Sep 2002 22:49:01 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav45.law15.hotmail.com [64.4.22.17]) by + xent.com (Postfix) with ESMTP id 96E7729409E for ; + Mon, 30 Sep 2002 22:48:42 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Mon, 30 Sep 2002 22:48:45 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +Subject: If you like graphic novels/comics +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 01 Oct 2002 05:48:45.0620 (UTC) FILETIME=[34CE7740:01C2690E] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 22:53:53 -0700 + +http://www.thecliffguy.com/cliffs.htm + +Numerous artists drawing characters on a cliff. + + diff --git a/Ch3/datasets/spam/easy_ham/00835.9068443a73e2e4b91c9117ef9b022675 b/Ch3/datasets/spam/easy_ham/00835.9068443a73e2e4b91c9117ef9b022675 new file mode 100644 index 000000000..3fcdc7102 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00835.9068443a73e2e4b91c9117ef9b022675 @@ -0,0 +1,185 @@ +From fork-admin@xent.com Tue Oct 1 10:42:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CAFD316F49 + for ; Tue, 1 Oct 2002 10:39:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:39:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g915hGK12278 for ; + Tue, 1 Oct 2002 06:43:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BFDBC2940F6; Mon, 30 Sep 2002 22:43:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from pimout3-ext.prodigy.net (pimout3-ext.prodigy.net + [207.115.63.102]) by xent.com (Postfix) with ESMTP id 7A9FA29409E for + ; Mon, 30 Sep 2002 22:42:11 -0700 (PDT) +Received: from golden (adsl-67-119-25-240.dsl.snfc21.pacbell.net + [67.119.25.240]) by pimout3-ext.prodigy.net (8.12.3 da nor stuldap/8.12.3) + with SMTP id g915g485531044; Tue, 1 Oct 2002 01:42:04 -0400 +Message-Id: <006d01c2690d$42a02cc0$640a000a@golden> +From: "Gordon Mohr" +To: "Mr. FoRK" , +References: +Subject: Re: Dinosaurs Eggs and the Origins of Good and Evil +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 22:41:57 -0700 + +Neat stuff. Seems to combine elements of Scientology/Xenu and +David Icke (http://www.davidicke.com/icke/temp/reptconn.html). + +- Gordon + +----- Original Message ----- +From: "Mr. FoRK" +To: +Sent: Monday, September 30, 2002 10:11 PM +Subject: Dinosaurs Eggs and the Origins of Good and Evil + + +> One of the most bizarre pages I've seen on the Web. At first I thought it +> might be some sort of back-story to a RPG, but, nope, it looks like somebody +> believes this. +> +> === +> http://www.viking-z.org/r20i.htm +> +> M09. Dinosaurs Eggs and the Origins of Good and Evil. +> DINOSAURS. Reptoid ETs are reported to be 12 foot high crocodiles walking on +> their hind legs. This is a description of a dinosaur. It now appears in +> Remote Viewing that the Reptoid ETs, dinosaurs and dragons are all linked +> together and that they all originated on Earth. The Erideans who are Reptoid +> derivatives have a home planet (in the Eridanus system) like all other ETs. +> The Reptoids have no reported home planet. They also come over as entities +> with little brain who control their bodies directly by spirit. This is a +> description of a ghost or disincarnate entity regardless of how people see +> them. Thus it could be that the Reptoids, Erideans, Nordics, Anunnaki, but +> not the Greys, all have origins on Earth and have a strong link to Earth +> even if they choose to live elsewhere. The Greys do not appear to have a +> renal or urinary system and this points to them not originating on Earth. +> The definitive work on dragons is "The Flight of Dragons" by Peter +> Dickinson. If dragons did exist in the flesh, they did not survive the long +> bow. Targets do not come much bigger. +> +> Truth is stranger than fiction. Thus the writer's current scenario is that +> there were a race of dinosaurs which developed psychic intelligence to guard +> their eggs and young, and who probably preferred to live underground. They +> survived the wipe out of the dinosaurs 50 million years ago with difficulty. +> They evolved into the Erideans and transferred to a more hospitable planet +> (for them) possibly with the help of another race of ETs who wanted slaves +> but otherwise had no interest in Earth or mind control. +> +> Thus it appears that the current Reptoids are the Spirits or ghosts of the +> dinosaurs. They must have been powerful to survive 50 million years and also +> to appear to some people. They have appeared to the writer in remote +> viewing. They are living on as vampire entities. Such immortal minds are +> contagious and can easily jump race and species barriers. If they can be +> encouraged to reincarnate, then the power sources of the black magicians and +> mind controllers will disappear. Encouraging them to reincarnate will help +> so called immortal minds to disappear as immortal minds have great +> difficulty surviving reincarnation. Purging people's dinosaurs should remove +> all perverse psychic abilities not under their control. They are a source of +> Satanic Guardian Angels and demons. They control us by owning our psi. Thus +> if we regain ownership of psi, we must relinquish their control and that of +> all other mind controllers. Encourage people to regain ownership of their +> psi. +> +> THE ORIGINS OF LOVE, HATE AND PURE MALICE. The following scenario appears to +> hold water and can account for the origins of our Universal Subconscious. +> +> Dinosaurs laid their eggs and buried them either underground or in piles of +> rotting vegetation (a good source of beetles and grubs for young +> hatchelings). They did not sit on their eggs to keep them warm, which made +> them very vulnerable to drastic climate and temperature change. In order to +> keep away predators some at least developed psychic mind control. To do this +> they had to capture ownership of the psi of potential predators. This is an +> act of hatred and outward looking. While a few dinosaurs did develop the +> ability to bear living young, most did not. The dinosaurs got in first and +> so their mind control tends to override all other latter minds. They have +> become the source of all Satans, devils and demons. +> +> Birds on the other hand developed the ability to sit on their eggs and keep +> them warm. A hen bird normally lays a series of eggs (say one per day) and +> only starts sitting when the clutch is completely laid. Thus all eggs tend +> to hatch together as they all have an equal period of warmth. This is +> primarily an act of love but inward looking. Bearing live young is not +> suitable to a bird of the air. A pregnant pigeon would not fly very far. +> Antarctic penguins tuck a single egg between their legs to keep it warm, +> even if they are standing on ice. +> +> Mammals developed live bearing of their young which is also primarily an act +> of love and inward looking. This is especially true as a mammalian female +> can not desert her young in the womb in case of emergency as can a bird +> sitting on a nest. +> +> Dinosaurs developed hate and mind control of others to protect their young, +> while birds and mammals developed love. Birds and mammals certainly do hate +> all enemies of their young, but this is secondary. +> +> If one wants to purge the sources of malice of say a black magician, then +> purge his dinosaurs and his dinosaur eggs. Unfortunately most of our +> religions are based on dinosaur protection of eggs and thus mind control, +> regardless of the front they put out to the public. Religion tends to +> concentrate on "How to Brainwash your Neighbour". Conscious thought has +> built many mighty empires, theologies and slave control systems out of using +> "How to care for and protect one's young" as a foundation. +> +> Thus the foulest form of abuse possible is to call something "A load of +> dinosaur's eggs". Purging the dinosaurs and dinosaur's eggs of any entity +> tends to purge all malice back to its roots. +> +> It looks as if mighty immortal minds have built up from small beginnings, +> aided and abetted by various occultists and other. As they will insist on +> vampiring the living for energy to avoid reincarnation and disturbing the +> serenity of the writer, he encourages them to reincarnate. +> +> ITEMS FOR INSPECTION. For mind control to take place, then someone must take +> control or ownership of the target's psi and pleasure centres. Check for the +> following. +> +> Nest of dinosaur's eggs, holy dinosaurs, etc. +> Eggs, controllers or owners in peoples psi, pleasure centres, pain killing +> hormones, abilities, etc. +> Mind machines. +> The original engraving or engram. +> GOD and SATAN appear to be job titles and not entities in their own right. T +> hey appear to be dinosaur engravings or engrams. No doubt dinosaurs were the +> first job holders. +> TIMETRACKS are worth investigating as our complete history from the start of +> time. +> +> My, our, Man's timetracks, etc. +> The time tracks of the Universe, Universal Subconscious, Galactic +> Subconscious, etc. +> EXTINCT RACES of ETs can cause problems when they live on in vampire mode. +> Their virtues may known to channelers but they can also have vices. Whenever +> one hears of races which have evolved on to higher planes, suspect that the +> higher plane is a vampire one. One may never know what they looked like or +> other basic characteristics, which makes linking back a trifle difficult. +> Every extinct race, etc. +> BLOOD ANCESTORS are also worth investigating as minds can be passed down via +> genetic linkages. Some of these can be over 2,000 years old. +> Every blood ancestor, ancestral mind, genetic mind, etc. +> + + diff --git a/Ch3/datasets/spam/easy_ham/00836.0270377f02e23355cca97c0805001c03 b/Ch3/datasets/spam/easy_ham/00836.0270377f02e23355cca97c0805001c03 new file mode 100644 index 000000000..91893a7b5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00836.0270377f02e23355cca97c0805001c03 @@ -0,0 +1,100 @@ +From fork-admin@xent.com Tue Oct 1 15:30:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D32BA16F16 + for ; Tue, 1 Oct 2002 15:30:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 15:30:00 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g91EIEK28680 for ; + Tue, 1 Oct 2002 15:18:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 56C262940CB; Tue, 1 Oct 2002 07:18:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta6.snfc21.pbi.net (mta6.snfc21.pbi.net [206.13.28.240]) + by xent.com (Postfix) with ESMTP id BEDF429409E for ; + Tue, 1 Oct 2002 07:17:05 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta6.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H3B001XU3OMRY@mta6.snfc21.pbi.net> for fork@xent.com; Tue, + 01 Oct 2002 07:17:10 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: Re: A moment of silence for the First Amendment & Angry Liberal Yutes +To: FoRK +Reply-To: gbolcer@endeavors.com +Message-Id: <3D99AC17.6A04F9BB@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +References: +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 01 Oct 2002 07:07:19 -0700 + +Russell Turpin wrote: +> +> Gregory Alan Bolcer: +> >I'm not sure since I haven't attended civics class +> >in quite some time, but the First Amendment doesn't cover protected speech, +> >hate speech, or actions. .. +> +> The first two are wrong. The first amendment DOES +> protect speech the Supreme Court decides it protects +> (duh!), and that happens to include most of what +> people consider hate speech. Unlike many other +> nations, the US has no laws against hate speech, per +> se. And the first amendment is the reason for that. +> + + +This was poking fun of the practice of making +up differnt types of speech with different +types of protected status. I think the +laws specialing out hate and protected speech +are ridiculous. The point I keep trying to make +is that there's only two types, speech and action. +I agree, they are all speech and should be +covered by the First Amendment, but + +If hate speech is so protected, why are certain +states trying to prosecute people for it? There's +only two answers and one of them is wrong. + + 1) Because hate speech is different and needs to + have a different level of protection dictated + by whoever's offended at the time. + 2) It's because it's not just speech, but action. + A action who's consequences are foreseeable by + any reasonable person. + +Hate speech is mislabeled. It's really "threat". I think +they let the mislabeling perpetuate as there's advantage +in being able to counter-threat with loss of liberty and +money through civil and criminal lawsuits for people THEY +don't like. + + +Greg + + + +> _________________________________________________________________ +> Join the world?s largest e-mail service with MSN Hotmail. +> http://www.hotmail.com + + diff --git a/Ch3/datasets/spam/easy_ham/00837.d989d85087fd0d2297bdfc4c4d9039fb b/Ch3/datasets/spam/easy_ham/00837.d989d85087fd0d2297bdfc4c4d9039fb new file mode 100644 index 000000000..d80922578 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00837.d989d85087fd0d2297bdfc4c4d9039fb @@ -0,0 +1,63 @@ +From fork-admin@xent.com Tue Oct 1 15:30:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3E90416F1C + for ; Tue, 1 Oct 2002 15:29:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 15:29:58 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g91E8CK28391 for ; + Tue, 1 Oct 2002 15:08:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E56D52940C3; Tue, 1 Oct 2002 07:08:01 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from brain-stream.com (brain-stream.com [209.95.107.206]) by + xent.com (Postfix) with ESMTP id EF68929409E for ; + Tue, 1 Oct 2002 07:07:13 -0700 (PDT) +Received: from OCW-FL6.pobox.com (OCW-FL6.MIT.EDU [18.89.2.223]) by + brain-stream.com (8.9.3/8.9.3) with ESMTP id HAA05750; Tue, 1 Oct 2002 + 07:07:07 -0700 (PDT) +Message-Id: <5.0.2.1.2.20021001100532.02f0b398@brain-stream.com> +X-Sender: bkdelong@brain-stream.com +X-Mailer: QUALCOMM Windows Eudora Version 5.0.2 +To: Eugen Leitl , forkit! +From: "B.K. DeLong" +Subject: Re: MIT OpenCourseWare +In-Reply-To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii"; format=flowed +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 01 Oct 2002 10:05:59 -0400 + +At 05:38 PM 9/30/2002 +0200, Eugen Leitl wrote: + + +>Looks useful. Hopefully, they'll put up some more material soon. +> +> http://ocw.mit.edu/global/all-courses.html + +I'll be sure to keep everyone posted on the next update. :) + + +-- +B.K. DeLong +bkdelong@ceci.mit.edu +OpenCourseWare + ++1.617.258.0360 ++1.617.877.3271 (cell) + + diff --git a/Ch3/datasets/spam/easy_ham/00838.5d38f350c098436eb6d9cccda1e054e2 b/Ch3/datasets/spam/easy_ham/00838.5d38f350c098436eb6d9cccda1e054e2 new file mode 100644 index 000000000..ff302bda3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00838.5d38f350c098436eb6d9cccda1e054e2 @@ -0,0 +1,83 @@ +From fork-admin@xent.com Tue Oct 1 16:29:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B5F6916F1E + for ; Tue, 1 Oct 2002 16:28:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 16:28:05 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g91EuCK29923 for ; + Tue, 1 Oct 2002 15:56:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id EB2802940C2; Tue, 1 Oct 2002 07:56:01 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from usilms55.ca.com (mail3.cai.com [141.202.248.42]) by + xent.com (Postfix) with ESMTP id 0EECB29409E for ; + Tue, 1 Oct 2002 07:55:10 -0700 (PDT) +Received: from usilms27.ca.com ([141.202.201.27]) by usilms55.ca.com with + Microsoft SMTPSVC(5.0.2195.4905); Tue, 1 Oct 2002 10:55:14 -0400 +Content-Class: urn:content-classes:message +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Mimeole: Produced By Microsoft Exchange V6.0.6249.0 +Subject: RE: MIT OpenCourseWare +Message-Id: +X-MS-Has-Attach: +X-MS-Tnef-Correlator: +Thread-Topic: MIT OpenCourseWare +Thread-Index: AcJpVBJpAYFVF5dGSoq/PBdsu9oYGgAByyyy0A +From: "Meltsner, Kenneth" +To: "forkit!" +X-Originalarrivaltime: 01 Oct 2002 14:55:14.0868 (UTC) FILETIME=[8CB8A740:01C2695A] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 1 Oct 2002 10:55:14 -0400 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g91EuCK29923 + +Better late than never -- I received a grant from Project Athena, MIT's original courseware effort, and found at the end that they hadn't thought much about distribution of the courseware. Instead, they had gotten wrapped up with X and various Unix tools, and other useful, but not strictly educational efforts. + +Ken + + +> -----Original Message----- +> From: B.K. DeLong [mailto:bkdelong@pobox.com] +> Sent: Tuesday, October 01, 2002 9:06 AM +> To: Eugen Leitl; forkit! +> Subject: Re: MIT OpenCourseWare +> +> +> At 05:38 PM 9/30/2002 +0200, Eugen Leitl wrote: +> +> +> >Looks useful. Hopefully, they'll put up some more material soon. +> > +> > http://ocw.mit.edu/global/all-courses.html +> +> I'll be sure to keep everyone posted on the next update. :) +> +> +> -- +> B.K. DeLong +> bkdelong@ceci.mit.edu +> OpenCourseWare +> +> +1.617.258.0360 +> +1.617.877.3271 (cell) +> +> + + diff --git a/Ch3/datasets/spam/easy_ham/00839.e4777b19e2429f9cece122c1d56998d8 b/Ch3/datasets/spam/easy_ham/00839.e4777b19e2429f9cece122c1d56998d8 new file mode 100644 index 000000000..2f72d7971 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00839.e4777b19e2429f9cece122c1d56998d8 @@ -0,0 +1,59 @@ +From fork-admin@xent.com Tue Oct 1 16:28:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EBCB816F1C + for ; Tue, 1 Oct 2002 16:28:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 16:28:03 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g91EfDK29340 for ; + Tue, 1 Oct 2002 15:41:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8F0B32940AC; Tue, 1 Oct 2002 07:41:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc53.attbi.com (rwcrmhc53.attbi.com [204.127.198.39]) + by xent.com (Postfix) with ESMTP id 5B2FD29409E for ; + Tue, 1 Oct 2002 07:40:09 -0700 (PDT) +Received: from h0004ac962bf6neclient2attbicom ([66.31.2.27]) by + rwcrmhc53.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) + with ESMTP id + <20021001144014.OAUG18767.rwcrmhc53.attbi.com@h0004ac962bf6neclient2attbicom>; + Tue, 1 Oct 2002 14:40:14 +0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Eirikur Hallgrimsson +Organization: Electric Brain +To: "Mr. FoRK" , +Subject: Re: The Wrong Business +User-Agent: KMail/1.4.1 +References: +In-Reply-To: +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200210011040.01502.eh@mad.scientist.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 1 Oct 2002 10:40:01 -0400 + +On Tuesday 01 October 2002 01:27 am, Mr. FoRK wrote: +> http://www.rathergood.com/vikings/ + +Some classics from this period, now in a new English translation: +"The Sagas of Icelanders" in trade paperback, from (duh) Viking, in 2000. +Remaindered at my local Barnes & Ignoble. The historical reference +material is useful. + +Eirikur + + diff --git a/Ch3/datasets/spam/easy_ham/00840.fd947072df20db5eebb0d015f20073a4 b/Ch3/datasets/spam/easy_ham/00840.fd947072df20db5eebb0d015f20073a4 new file mode 100644 index 000000000..cdbbcfe6b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00840.fd947072df20db5eebb0d015f20073a4 @@ -0,0 +1,81 @@ +From fork-admin@xent.com Wed Oct 2 11:47:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0776016F19 + for ; Wed, 2 Oct 2002 11:47:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:47:31 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g9223BK21033 for ; + Wed, 2 Oct 2002 03:03:12 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 52B502940E4; Tue, 1 Oct 2002 19:03:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta6.snfc21.pbi.net (mta6.snfc21.pbi.net [206.13.28.240]) + by xent.com (Postfix) with ESMTP id DEE6E29409C for ; + Tue, 1 Oct 2002 19:02:03 -0700 (PDT) +Received: from cse.ucsc.edu ([63.194.88.161]) by mta6.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H3C00ASF0BMX6@mta6.snfc21.pbi.net> for fork@xent.com; Tue, + 01 Oct 2002 19:02:10 -0700 (PDT) +From: Elias +Subject: Re: So I missed this one... +To: fork@spamassassin.taint.org +Reply-To: fork@spamassassin.taint.org +Message-Id: <3D9A51BA.7090103@cse.ucsc.edu> +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en,pdf +User-Agent: Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:0.9.2) + Gecko/20010726 Netscape6/6.1 +References: <261233693.20021001182701@magnesium.net> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 01 Oct 2002 18:54:02 -0700 + +bitbitch@magnesium.net wrote: + +> Turns out the music industry settled ... quite a hefty +> settlement. + + +Funnky, I thought that it was minor in comparison the the gouging that +occurs on a standard CD. + + +> The Wall Street Journal +> Copyright (c) 2002, Dow Jones & Company, Inc. +> Tuesday, October 1, 2002 +> +> Five Music Concerns To Pay $143.1 Million In Price-Fixing Case +> Reuters News Service ... +> The companies, which didn't admit any wrongdoing, will pay $67.4 +> million in cash to compensate consumers who overpaid for CDs between +> 1995 and 2000. The companies also agreed to distribute $75.7 million +> worth of CDs to public entities and nonprofit organizations throughout +> the country. + + +The CDs will probably cost less than 7.5 million to produce and +distribute... "didn't admit any wrongdoing"?!? Give me a break. + + +Elias + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00841.d62d1f4d0dd8f02d0595dd52875776ef b/Ch3/datasets/spam/easy_ham/00841.d62d1f4d0dd8f02d0595dd52875776ef new file mode 100644 index 000000000..53281f8b9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00841.d62d1f4d0dd8f02d0595dd52875776ef @@ -0,0 +1,95 @@ +From fork-admin@xent.com Wed Oct 2 11:47:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C381516F17 + for ; Wed, 2 Oct 2002 11:47:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:47:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g922HCK21343 for ; + Wed, 2 Oct 2002 03:17:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 73D8C2940EC; Tue, 1 Oct 2002 19:17:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc02.attbi.com (sccrmhc02.attbi.com [204.127.202.62]) + by xent.com (Postfix) with ESMTP id AE91E29409C for ; + Tue, 1 Oct 2002 19:16:07 -0700 (PDT) +Received: from [24.61.113.164] by sccrmhc02.attbi.com (InterMail + vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20021002021614.LNVR27763.sccrmhc02.attbi.com@[24.61.113.164]> for + ; Wed, 2 Oct 2002 02:16:14 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <17214982834.20021001221610@magnesium.net> +To: Elias +Subject: Re[2]: So I missed this one... +In-Reply-To: <3D9A51BA.7090103@cse.ucsc.edu> +References: <261233693.20021001182701@magnesium.net> + <3D9A51BA.7090103@cse.ucsc.edu> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 1 Oct 2002 22:16:10 -0400 + +Hello Elias, + +Tuesday, October 1, 2002, 9:54:02 PM, you wrote: + +E> bitbitch@magnesium.net wrote: + +>> Turns out the music industry settled ... quite a hefty +>> settlement. + + +E> Funnky, I thought that it was minor in comparison the the gouging that +E> occurs on a standard CD. + + +>> The Wall Street Journal +>> Copyright (c) 2002, Dow Jones & Company, Inc. +>> Tuesday, October 1, 2002 +>> +>> Five Music Concerns To Pay $143.1 Million In Price-Fixing Case +>> Reuters News Service ... +>> The companies, which didn't admit any wrongdoing, will pay $67.4 +>> million in cash to compensate consumers who overpaid for CDs between +>> 1995 and 2000. The companies also agreed to distribute $75.7 million +>> worth of CDs to public entities and nonprofit organizations throughout +>> the country. + + +E> The CDs will probably cost less than 7.5 million to produce and +E> distribute... "didn't admit any wrongdoing"?!? Give me a break. + + +E> Elias + + + + + +Toobad none of this will go back to any of the people who were forced +to pay the rates. + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00842.85c0352fd0fd5ed7b6008fbe62b42bb2 b/Ch3/datasets/spam/easy_ham/00842.85c0352fd0fd5ed7b6008fbe62b42bb2 new file mode 100644 index 000000000..e9331f8a1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00842.85c0352fd0fd5ed7b6008fbe62b42bb2 @@ -0,0 +1,76 @@ +From fork-admin@xent.com Wed Oct 2 11:47:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1EFBB16F03 + for ; Wed, 2 Oct 2002 11:47:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:47:29 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g920DFK17990 for ; + Wed, 2 Oct 2002 01:13:19 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id ABE142940DF; Tue, 1 Oct 2002 17:13:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barry.mail.mindspring.net (barry.mail.mindspring.net + [207.69.200.25]) by xent.com (Postfix) with ESMTP id D85C029409C for + ; Tue, 1 Oct 2002 17:12:35 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + barry.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17wX80-0005d4-00; + Tue, 01 Oct 2002 20:12:36 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: +References: +To: "Mr. FoRK" , +From: "R. A. Hettinga" +Subject: Re: The Wrong Business +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 1 Oct 2002 20:06:38 -0400 + +At 10:27 PM -0700 on 9/30/02, Mr. FoRK wrote: + + +> I realize now, that after reviewing the past several years of work and +> career, I have been in the wrong business. The wrong business. +> +> This is what I should have been doing. +> +> http://www.rathergood.com/vikings/ + +A New Manual has been published: + + + +Or, the one I read... + + +And, of course, the open source versions... + +http://users.ev1.net/~theweb/njaltoc.htm + +http://sunsite.berkeley.edu/OMACL/Njal/ +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00843.0c778329d09499853d99746d0f6f2dc1 b/Ch3/datasets/spam/easy_ham/00843.0c778329d09499853d99746d0f6f2dc1 new file mode 100644 index 000000000..b57b51ae3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00843.0c778329d09499853d99746d0f6f2dc1 @@ -0,0 +1,100 @@ +From fork-admin@xent.com Wed Oct 2 11:48:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 66AE716F1A + for ; Wed, 2 Oct 2002 11:47:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:47:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g923MHK23416 for ; + Wed, 2 Oct 2002 04:22:18 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E59702940F3; Tue, 1 Oct 2002 20:22:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from axiom.braindust.com (axiom.braindust.com [64.69.71.79]) by + xent.com (Postfix) with ESMTP id F364529409C for ; + Tue, 1 Oct 2002 20:21:16 -0700 (PDT) +X-Envelope-To: fork@spamassassin.taint.org +Received: from ianbell.com (194125.aebc.com [209.53.194.125]) + (authenticated (0 bits)) by axiom.braindust.com (8.12.5/8.11.6) with ESMTP + id g923LJGT006774; Tue, 1 Oct 2002 20:21:20 -0700 +Subject: Re: Wifi query +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v546) +Cc: Damien Morton , , + +To: Eugen Leitl +From: Ian Andrew Bell +In-Reply-To: +Message-Id: <32BAD95E-D5B6-11D6-AD37-0030657C53EA@ianbell.com> +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.546) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 1 Oct 2002 20:22:36 -0700 + + +I think what you're looking at with the dual antenna mounts is a +diversity antenna. It won't work too well with one hooked up to the +pringles can and the other hooked up to a regular rubber duck. + +-Ian. + + +On Tuesday, October 1, 2002, at 01:04 PM, Eugen Leitl wrote: + +> +> 1) reinforced concrete shields like the dickens; wood lots less so +> 2) line of sight is best (o'really?) +> 3) if you want to boost range, use directional aerials, not omnis +> +> Direct line of sight (no trees, no nothing) can give you ~10 km with +> well +> aligned directional aerials (and, say, no sleet, no locusts, nor rain +> of +> blood). If you want to fan out afterwards, use a bridge of a +> directional +> coupling to an omni. 802.11a should shield within building lots more +> than +> 802.11b, ditto line of sight with lots of precipitation inbetween. +> +> On Tue, 1 Oct 2002, Damien Morton wrote: +> +>> I just bought a LinkSys BEFW1154v2 Access Point Router for $150 +>> (http://www.linksys.com/products/product.asp?grid=22&prid=415). Im +>> doing +>> some dev work on a Symbol PocketPC device with built in 802.11b. +>> +>> In this 600 sq ft pre-war New York apartment it goes through 2 or 3 +>> walls, into the hallway and halfway down the first flight of stairs +>> before it loses contact with the base station. That's less than 50 ft. +>> Inside the apartment, it works just fine. +>> +>> I just did some further testing - through 2 brick walls the range is +>> about 25 feet. The signal also goes through the roof pretty much +>> unimpeded. +>> +>> That said, the Symbol device doesn't have an antenna to speak of, and +>> I +>> havent done any tweaking to try to extend the range. +>> +>> The Linksys unit has two antenna mounts - you could leave one as an +>> omni +>> antenna while hooking up a directional antenna to the other. +>> +>> You might find that you have to use several access points and/or +>> repeaters to get the coverage you want. + + diff --git a/Ch3/datasets/spam/easy_ham/00844.4af56580a8f02ae25ec39faffafba8ce b/Ch3/datasets/spam/easy_ham/00844.4af56580a8f02ae25ec39faffafba8ce new file mode 100644 index 000000000..b794e08bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00844.4af56580a8f02ae25ec39faffafba8ce @@ -0,0 +1,69 @@ +From fork-admin@xent.com Wed Oct 2 11:48:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4E40D16F1B + for ; Wed, 2 Oct 2002 11:47:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:47:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g923VAK23777 for ; + Wed, 2 Oct 2002 04:31:11 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 792772940FB; Tue, 1 Oct 2002 20:31:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc51.attbi.com (rwcrmhc51.attbi.com [204.127.198.38]) + by xent.com (Postfix) with ESMTP id 3166629409C for ; + Tue, 1 Oct 2002 20:30:56 -0700 (PDT) +Received: from Intellistation ([66.31.2.27]) by rwcrmhc51.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20021002033102.BBXR17535.rwcrmhc51.attbi.com@Intellistation>; + Wed, 2 Oct 2002 03:31:02 +0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Eirikur Hallgrimsson +Organization: Electric Brain +To: Rohit Khare , fork@spamassassin.taint.org +Subject: Re: Optical analog computing? +User-Agent: KMail/1.4.1 +References: +In-Reply-To: +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200210012330.47704.eh@mad.scientist.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 1 Oct 2002 23:30:47 -0400 + +Uh, WWII Enigma was cracked at Bletchly Park, based on the work of some +Poles, who had been trying to figure out when they would be invaded. +Entirely mechanical! Definitely not optical at all. Enigma was +originally broken based on bad use practice. If it had been employed more +sensibly it would have been a lot harder. + +See "The Code Book" by Singh, Doubleday, 1999. Or, for that matter, +"Cryptonomicon" by Stephenson, which is a fictionalization of the Enigma +cracking story, and pretty accurate. + +I eventually get born as a side-effect of the Battle of Britain, you +see.... + +Computing with interference patterns, etc, makes perfect sense, but Enigma +was cracked by building mechanical systems that were essentially Enigma +machines and brute-forcing. + +Eirikur + + + + diff --git a/Ch3/datasets/spam/easy_ham/00845.c74b7d7bdbbbab316dcb7498825bba9c b/Ch3/datasets/spam/easy_ham/00845.c74b7d7bdbbbab316dcb7498825bba9c new file mode 100644 index 000000000..dcc677fab --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00845.c74b7d7bdbbbab316dcb7498825bba9c @@ -0,0 +1,124 @@ +From fork-admin@xent.com Wed Oct 2 11:48:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0788616F1C + for ; Wed, 2 Oct 2002 11:47:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:47:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g923qEK24441 for ; + Wed, 2 Oct 2002 04:52:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 212C02940F1; Tue, 1 Oct 2002 20:52:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from nycsmtp1out.rdc-nyc.rr.com (nycsmtp1out.rdc-nyc.rr.com + [24.29.99.226]) by xent.com (Postfix) with ESMTP id 8822629409C for + ; Tue, 1 Oct 2002 20:51:14 -0700 (PDT) +Received: from damien (66-108-144-106.nyc.rr.com [66.108.144.106]) by + nycsmtp1out.rdc-nyc.rr.com (8.12.1/Road Runner SMTP Server 1.0) with ESMTP + id g923pH6d025958; Tue, 1 Oct 2002 23:51:17 -0400 (EDT) +From: "Damien Morton" +To: "'Ian Andrew Bell'" , + "'Eugen Leitl'" +Cc: , +Subject: RE: Wifi query +Message-Id: <007e01c269c6$85605800$6401a8c0@damien> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.3416 +Importance: Normal +In-Reply-To: <32BAD95E-D5B6-11D6-AD37-0030657C53EA@ianbell.com> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 1 Oct 2002 23:48:02 -0400 + +That's what the manual said - a diversity antenna. + +Why wouldn't it work well with one omni and one directional antena? + +IANAEE, but doesn't that count as diversity? + +> -----Original Message----- +> From: Ian Andrew Bell [mailto:fork@ianbell.com] +> Sent: Tuesday, 1 October 2002 23:23 +> To: Eugen Leitl +> Cc: Damien Morton; tomwhore@slack.net; fork@spamassassin.taint.org +> Subject: Re: Wifi query +> +> +> +> I think what you're looking at with the dual antenna mounts is a +> diversity antenna. It won't work too well with one hooked up to the +> pringles can and the other hooked up to a regular rubber duck. +> +> -Ian. +> +> +> On Tuesday, October 1, 2002, at 01:04 PM, Eugen Leitl wrote: +> +> > +> > 1) reinforced concrete shields like the dickens; wood lots less so +> > 2) line of sight is best (o'really?) +> > 3) if you want to boost range, use directional aerials, not omnis +> > +> > Direct line of sight (no trees, no nothing) can give you ~10 km with +> > well +> > aligned directional aerials (and, say, no sleet, no +> locusts, nor rain +> > of +> > blood). If you want to fan out afterwards, use a bridge of a +> > directional +> > coupling to an omni. 802.11a should shield within building +> lots more +> > than +> > 802.11b, ditto line of sight with lots of precipitation inbetween. +> > +> > On Tue, 1 Oct 2002, Damien Morton wrote: +> > +> >> I just bought a LinkSys BEFW1154v2 Access Point Router for $150 +> >> (http://www.linksys.com/products/product.asp?grid=22&prid=415). Im +> >> doing some dev work on a Symbol PocketPC device with built in +> >> 802.11b. +> >> +> >> In this 600 sq ft pre-war New York apartment it goes +> through 2 or 3 +> >> walls, into the hallway and halfway down the first flight +> of stairs +> >> before it loses contact with the base station. That's less than 50 +> >> ft. Inside the apartment, it works just fine. +> >> +> >> I just did some further testing - through 2 brick walls +> the range is +> >> about 25 feet. The signal also goes through the roof pretty much +> >> unimpeded. +> >> +> >> That said, the Symbol device doesn't have an antenna to +> speak of, and +> >> I +> >> havent done any tweaking to try to extend the range. +> >> +> >> The Linksys unit has two antenna mounts - you could leave one as an +> >> omni +> >> antenna while hooking up a directional antenna to the other. +> >> +> >> You might find that you have to use several access points and/or +> >> repeaters to get the coverage you want. +> + + diff --git a/Ch3/datasets/spam/easy_ham/00846.cd171eed5306de66f8ebf444aa61e718 b/Ch3/datasets/spam/easy_ham/00846.cd171eed5306de66f8ebf444aa61e718 new file mode 100644 index 000000000..a6107fdd4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00846.cd171eed5306de66f8ebf444aa61e718 @@ -0,0 +1,74 @@ +From fork-admin@xent.com Wed Oct 2 11:47:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5F55016F18 + for ; Wed, 2 Oct 2002 11:47:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:47:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g9236FK22873 for ; + Wed, 2 Oct 2002 04:06:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 36EF22940E7; Tue, 1 Oct 2002 20:06:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from rwcrmhc53.attbi.com (rwcrmhc53.attbi.com [204.127.198.39]) + by xent.com (Postfix) with ESMTP id E7ECE29409C for ; + Tue, 1 Oct 2002 20:05:53 -0700 (PDT) +Received: from [24.61.113.164] by rwcrmhc53.attbi.com (InterMail + vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20021002030600.OZEX18767.rwcrmhc53.attbi.com@[24.61.113.164]> for + ; Wed, 2 Oct 2002 03:06:00 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <1917968978.20021001230556@magnesium.net> +To: Fork@xent.com +Subject: Creative political speech +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 1 Oct 2002 23:05:56 -0400 + + + +http://www.quitpalestine.org./ + +Funny as all hell. So a group of 25 QUIT (Queers Undermining Israeli +Terrorism) marched into the local starbucks in Berkeley (Of course, +they pick a safe city like Berkeley, but hey, still funny) and +'settle' driving away straights and other prior inhabitants with +supersoakers :) + +Incredibly creative, in my opinion. Not terribly violent (I mean, how +much damage can you -really- do with a supersoaker?) but definintely +a newscatcher. + +Its nice to see folks are finding some creative means to make a point. + Even if you don't -agree- with it, its a hard sell to say that this + has been done before. + + + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00847.f752ba326e2f6670fb6fecc5fd655d3a b/Ch3/datasets/spam/easy_ham/00847.f752ba326e2f6670fb6fecc5fd655d3a new file mode 100644 index 000000000..f85335d87 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00847.f752ba326e2f6670fb6fecc5fd655d3a @@ -0,0 +1,106 @@ +From fork-admin@xent.com Wed Oct 2 11:48:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5F64316F17 + for ; Wed, 2 Oct 2002 11:47:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:47:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g9263CK28792 for ; + Wed, 2 Oct 2002 07:03:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B4AA12940FF; Tue, 1 Oct 2002 23:03:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav68.law15.hotmail.com [64.4.22.203]) by + xent.com (Postfix) with ESMTP id 3926529409C for ; + Tue, 1 Oct 2002 23:02:43 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Tue, 1 Oct 2002 23:02:50 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +Cc: "Rohit Khare" +Subject: ActiveBuddy +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 02 Oct 2002 06:02:50.0320 (UTC) FILETIME=[56B33500:01C269D9] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 1 Oct 2002 23:07:59 -0700 + +Kind of interesting application of 'agent' technology. +A mix of telnet and Eliza? +(wonder if KnowNow needs this as a partner...) + +== +http://www.activebuddy.com/products/index.shtml +ActiveBuddy, Inc. has developed patented technology for building and +deploying interactive agents. ActiveBuddy's BuddyScript technology powers +business solutions that leverage the functionality, convenience and appeal +of instant messaging to provide an efficient and immediate means of +communication with customers and constituents. + +ActiveBuddy technology is proven in the marketplace by the smash success of +SmarterChild, ActiveBuddy's showcase interactive agent launched in June 2001 +and visited by over 8 million consumers in its first year of life. + +Interactive agents allow your customers and constituents to receive +information and services in a natural, conversational interface. + + +Software Products +BuddyScriptT Server - an end-to-end software solution for deploying +interactive agents. BuddyScript Server provides every component required to +operate an interactive agent, including connectivity with the messaging +network, message routing, data access, message formatting, user and session +management, and detailed tracking. BuddyScript Server is offered in four +configurations to meet your capacity needs. Its scaleable architecture +supports virtually unlimited usage. More... + +=== +Here is a sample conversation on (MSN Messenger with 'SmarterChild'): + +Mike says: +how are you? + +SmarterChild says: +Great thx! You? + +Mike says: +Fine. What is the weather like in seattle? + +SmarterChild says: +Current weather conditions for Seattle, WA: + +Currently: 57 F +Condition: Few Clouds +Real Feel: 57 F +Dewpoint: 44 +Humidity: 62 % +Visibility: 10 mi +Wind: N/0 mph + +Next time, just type "weather seattle, wa." + +To get the forecast for Seattle, WA, just type "forecast." + + + diff --git a/Ch3/datasets/spam/easy_ham/00848.a99e7c1ff97407816f4c0b323421b5c9 b/Ch3/datasets/spam/easy_ham/00848.a99e7c1ff97407816f4c0b323421b5c9 new file mode 100644 index 000000000..610d4c323 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00848.a99e7c1ff97407816f4c0b323421b5c9 @@ -0,0 +1,66 @@ +From fork-admin@xent.com Wed Oct 2 16:02:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id ACD6416F6B + for ; Wed, 2 Oct 2002 16:00:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 16:00:38 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92EoAK13476 for ; + Wed, 2 Oct 2002 15:50:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 87A4229410C; Wed, 2 Oct 2002 07:50:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from 192.168.1.2 (smtp.piercelaw.edu [216.204.12.219]) by + xent.com (Postfix) with ESMTP id 6591929409C for ; + Wed, 2 Oct 2002 07:49:26 -0700 (PDT) +Received: from 192.168.30.220 ([192.168.30.220]) by 192.168.1.2; + Wed, 02 Oct 2002 10:49:03 -0400 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <3460152885.20021002104900@magnesium.net> +To: "Mr. FoRK" +Cc: Fork@xent.com +Subject: Re: ActiveBuddy +In-Reply-To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 10:49:00 -0400 + +MF> Here is a sample conversation on (MSN Messenger with 'SmarterChild'): + +MF> Mike says: +MF> how are you? + +MF> SmarterChild says: +MF> Great thx! You? + + + +Oh freaking great. In their adoption to make it 'more human' they +have to add in all the broken english and shortened AOL-style +phrasings. YAY. + +Next thing you know, the AI will be asking for ASL... + +Evil. + + diff --git a/Ch3/datasets/spam/easy_ham/00849.5ff774a5add00c6739307f6950b4ddf5 b/Ch3/datasets/spam/easy_ham/00849.5ff774a5add00c6739307f6950b4ddf5 new file mode 100644 index 000000000..63ad370fa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00849.5ff774a5add00c6739307f6950b4ddf5 @@ -0,0 +1,102 @@ +From fork-admin@xent.com Thu Sep 26 18:11:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CA74B16F17 + for ; Thu, 26 Sep 2002 18:11:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 18:11:13 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8QGi7g28312 for ; + Thu, 26 Sep 2002 17:44:07 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0FC6B2940FD; Thu, 26 Sep 2002 09:40:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (oe32.pav2.hotmail.com [64.4.36.89]) by + xent.com (Postfix) with ESMTP id 9419729409A for ; + Thu, 26 Sep 2002 09:39:31 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Thu, 26 Sep 2002 09:43:18 -0700 +X-Originating-Ip: [4.63.110.224] +From: "Jason Ling" +To: "Joseph S. Barrera III" , "FoRK" +Subject: Re: dumb question: X client behind a firewall? +MIME-Version: 1.0 +X-Mailer: MSN Explorer 7.02.0005.2201 +Content-Type: multipart/alternative; + boundary="----=_NextPart_001_0004_01C2655A.4ABB3500" +Message-Id: +X-Originalarrivaltime: 26 Sep 2002 16:43:18.0336 (UTC) FILETIME=[D11A9C00:01C2657B] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 26 Sep 2002 12:43:19 -0400 + + +------=_NextPart_001_0004_01C2655A.4ABB3500 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +----- Original Message ----- +From: Joseph S. Barrera III +Sent: Wednesday, September 25, 2002 7:06 PM +To: FoRK +Subject: dumb question: X client behind a firewall? + +Let's say you're behind a firewall and have a NAT address. +Is there any way to telnet to a linux box out there in the world +and set your DISPLAY in some way that you can create +xterms on your own screen? + +- Joe + +-------------------- +I'm in no way a pro but perhaps you could set your Firewall to accept con= +nections from that Linux box and then somehow set the Linux box to transm= +it on a specific port. Then configure your router to forward all informat= +ion from that port to your box. + +But then again, that pretty much defeats the entire point of a firewall =3D= +P.Get more from the Web. FREE MSN Explorer download : http://explorer.ms= +n.com + +------=_NextPart_001_0004_01C2655A.4ABB3500 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +
 
<= +DIV> 
= +
----- Original Message -----
From: Joseph S. Barrera III
Sent: Wednesday, September 25, 2002 7:06 PM
To: FoRK
Subject: dumb question: X client behind a firewall?
 

L= +et's say you're behind a firewall and have a NAT address.
Is there any= + way to telnet to a linux box out there in the world
and set your DISP= +LAY in some way that you can create
xterms on your own screen?

= +- Joe

 

--------------------

I'm in no way a pr= +o but perhaps you could set your Firewall to accept connections from that= + Linux box and then somehow set the Linux box to transmit on a specific p= +ort. Then configure your router to forward all information from that port= + to your box.

 

But then again, that pretty much defea= +ts the entire point of a firewall =3DP.


Get more from the Web. FREE MSN Explorer download : http://explorer.msn.com

+ +------=_NextPart_001_0004_01C2655A.4ABB3500-- + + diff --git a/Ch3/datasets/spam/easy_ham/00850.9435ce0e094b16d0f2c9c458f2900706 b/Ch3/datasets/spam/easy_ham/00850.9435ce0e094b16d0f2c9c458f2900706 new file mode 100644 index 000000000..235bfcd1b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00850.9435ce0e094b16d0f2c9c458f2900706 @@ -0,0 +1,82 @@ +From fork-admin@xent.com Wed Oct 2 17:51:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F178116F03 + for ; Wed, 2 Oct 2002 17:51:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 17:51:10 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92FDDK14240 for ; + Wed, 2 Oct 2002 16:13:13 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9953229410A; Wed, 2 Oct 2002 08:13:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id D68E529409C for ; + Wed, 2 Oct 2002 08:12:37 -0700 (PDT) +Received: (qmail 3216 invoked from network); 2 Oct 2002 15:12:43 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 2 Oct 2002 15:12:43 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 6F3AB1B62C; + Wed, 2 Oct 2002 11:12:42 -0400 (EDT) +To: fork +Subject: Polit-spam +References: <20021002103833.700FC1B624@maya.dyndns.org> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 02 Oct 2002 11:12:42 -0400 + + +This is something new, or at least new to me: + + Politspam (n): Using a spam engine for political purposes. + +In this particular case, to get back at the University of Groningen. +The content suggests its more prank than vigilante activism (in the +old days we used to say "someone left their terminal unguarded") +but what's interesting is that it's not trying to sell me anything +or lead me to any for-fee service, it's just trying to spread +a meme that RUG is evil. + +>>>>> "w" == wpin writes: + + w> Those who want to leave for the Netherlands to carry on any + w> kind of education,including for PHD, must be careful + w> . Especially the university of Groningen(RUG) should be + w> avoided. This university was once a good one but now it has + w> lost its reputation. ... Studying is a good investment in time + w> and money. So invest in the right place and time. You are + w> warned. + + w> Sincerely yours, + w> hyohxsycjlakdbmhjpiouupngoqrm + +Has anyone else started to receive either consumer vigilante or +political activism messages via spam methods? + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00851.51d3571c945fd64a210d477de46e14b7 b/Ch3/datasets/spam/easy_ham/00851.51d3571c945fd64a210d477de46e14b7 new file mode 100644 index 000000000..44a2fcf2d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00851.51d3571c945fd64a210d477de46e14b7 @@ -0,0 +1,99 @@ +From fork-admin@xent.com Wed Oct 2 17:51:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DE47216F17 + for ; Wed, 2 Oct 2002 17:51:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 17:51:14 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92GQDK16972 for ; + Wed, 2 Oct 2002 17:26:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8F55C2940B7; Wed, 2 Oct 2002 09:26:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 0300129409C for ; + Wed, 2 Oct 2002 09:25:52 -0700 (PDT) +Received: (qmail 19429 invoked from network); 2 Oct 2002 16:25:59 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 2 Oct 2002 16:25:59 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 907FB1B62C; + Wed, 2 Oct 2002 12:25:52 -0400 (EDT) +To: "Mr. FoRK" +Cc: , "Rohit Khare" +Subject: Re: ActiveBuddy +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 02 Oct 2002 12:25:52 -0400 + + +How is this any different from attaching an Infobot or A.L.I.C.E +through licq's console-hook? People have been doing that for years, +and for over a decade in IRC and the MUDs. + +... and the one thing I think we've learned in all that time is that, +as a help-desk, it doesn't work. People just don't like talking to +robots, especially when the robots, once confused, become imbeciles. +I think the humans may feel cheated, deceived and tricked when they +discover, as with the Seattle answer, that they are talking to a +machine; there's no real intelligence behind that simulated-friendly +and therefore empty 'thx'. + +AIML is clever and cute, but for /practical/ applications as a first +line of technical support? It's been tried over and over, and while I +/also/ think that it /should/ work, for the most part, people won't +use it. What's worse, as we make the NL processing more and more +clever, it only means it fails more dramatically; ALICE doesn't just +stumble a bit, it starts to drool. And ALICE is the best we have. + +Like a Dalek: All very impressive when things are going well, but all +it takes to betray the chicken-brain inside is a towel over it's +ill-placed eye, or a spin off the metal surface ;) + +In all the prolog-based NL database query systems of the 1980's and +other later chatterbot helpdesk projects like Shallow Red, even +simpler tries like Ask Jeeves, people very quickly know they're +talking to a robot, and the queries anneal to short, truncated and +terse database-like verb-noun or just noun-keyword requests. + +People are just too quick to adapt, and too impatient to forgive a +clunky interface, and for now, especially when the /average/ computer +user still can't type more than maybe 5-10wpm, NL is a painfully slow +clunky interface. + +Put it this way: Would you login, wake the bot and ask for the Seattle +weather, or would you do as we /all/ do and just click the weather +icon sitting there on your desktop? + +Just for fun, here's an interesting conversation between Shallow Red, +ALICE and Eliza as they decide to play the Turing Game: + +http://www.botspot.com/best/12-09-97.htm + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00852.8be48f515c9ecb089aa3fc5983eaf038 b/Ch3/datasets/spam/easy_ham/00852.8be48f515c9ecb089aa3fc5983eaf038 new file mode 100644 index 000000000..50270050e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00852.8be48f515c9ecb089aa3fc5983eaf038 @@ -0,0 +1,59 @@ +From fork-admin@xent.com Wed Oct 2 17:52:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B1E3016F1A + for ; Wed, 2 Oct 2002 17:51:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 17:51:18 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92GgFK17580 for ; + Wed, 2 Oct 2002 17:42:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D5F2829413C; Wed, 2 Oct 2002 09:42:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 3C76E29409C for ; Wed, + 2 Oct 2002 09:42:01 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 02BF93ED83; + Wed, 2 Oct 2002 12:46:45 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id EE5DE3ED79 for ; Wed, + 2 Oct 2002 12:46:45 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Re: ActiveBuddy +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 12:46:45 -0400 (EDT) + + +Wow, if they put a VRML front end on it it would be 100% worthless rather +than just 99% + +IRC...Bots....scripts.....been there done that and much better. + +If these folks actualy saw the xddc instafilesharing scripts must 12 year +olds hang off of Mirc they might get a clue, then again they might +already have teh clue that sometimes you can packege the obvious and sell +it to the clueless. + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00853.8b209d0398d8c0f76b676097759e24e5 b/Ch3/datasets/spam/easy_ham/00853.8b209d0398d8c0f76b676097759e24e5 new file mode 100644 index 000000000..63f7cda25 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00853.8b209d0398d8c0f76b676097759e24e5 @@ -0,0 +1,68 @@ +From fork-admin@xent.com Wed Oct 2 17:52:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 43CCD16F19 + for ; Wed, 2 Oct 2002 17:51:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 17:51:20 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92GlMK17657 for ; + Wed, 2 Oct 2002 17:47:22 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D819E294172; Wed, 2 Oct 2002 09:44:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav75.law15.hotmail.com [64.4.22.210]) by + xent.com (Postfix) with ESMTP id D326029416D for ; + Wed, 2 Oct 2002 09:43:24 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Wed, 2 Oct 2002 09:43:33 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: "fork" +References: <20021002103833.700FC1B624@maya.dyndns.org> + +Subject: Re: Polit-spam +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 02 Oct 2002 16:43:33.0124 (UTC) FILETIME=[D8659440:01C26A32] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 09:48:45 -0700 + + +----- Original Message ----- +From: "Gary Lawrence Murphy" + +> +> >>>>> "w" == wpin writes: +> +> w> Those who want to leave for the Netherlands to carry on any +> w> kind of education,including for PHD, must be careful +> w> . Especially the university of Groningen(RUG) should be +> w> avoided. This university was once a good one but now it has +> w> lost its reputation. ... Studying is a good investment in time +> w> and money. So invest in the right place and time. You are +> w> warned. + +Dear gawd - 'lost its reputation' - how horrible for those Northern +Europeans. What could possibly be worse than that? + + diff --git a/Ch3/datasets/spam/easy_ham/00854.357b5bdeea553ec020631b131b7e2278 b/Ch3/datasets/spam/easy_ham/00854.357b5bdeea553ec020631b131b7e2278 new file mode 100644 index 000000000..6a89c94f8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00854.357b5bdeea553ec020631b131b7e2278 @@ -0,0 +1,64 @@ +From fork-admin@xent.com Wed Oct 2 17:51:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 813C416F18 + for ; Wed, 2 Oct 2002 17:51:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 17:51:17 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92GWFK17228 for ; + Wed, 2 Oct 2002 17:32:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9077C294167; Wed, 2 Oct 2002 09:28:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id A4F4329413C for ; + Wed, 2 Oct 2002 09:27:40 -0700 (PDT) +Received: (qmail 20619 invoked from network); 2 Oct 2002 16:27:49 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 2 Oct 2002 16:27:49 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 4BC251B62C; + Wed, 2 Oct 2002 12:27:48 -0400 (EDT) +To: +Subject: Re: ActiveBuddy +References: +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 02 Oct 2002 12:27:48 -0400 + + +let me put it /another/ way ... + + f> Mike says: how are you? + f> SmarterChild says: Great thx! You? + f> Mike says: Fine. What is the weather like in seattle? + f> SmarterChild says: Current weather conditions for Seattle, WA: + +Out of 8 /million/ alledged visitors, this is the /best/ example??? + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00855.8e0647984e6592b6400021a5b87ee133 b/Ch3/datasets/spam/easy_ham/00855.8e0647984e6592b6400021a5b87ee133 new file mode 100644 index 000000000..a54d98769 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00855.8e0647984e6592b6400021a5b87ee133 @@ -0,0 +1,140 @@ +From fork-admin@xent.com Wed Oct 2 18:18:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E68B216F03 + for ; Wed, 2 Oct 2002 18:18:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 18:18:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92GpiK17868 for ; + Wed, 2 Oct 2002 17:51:48 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7E5B7294176; Wed, 2 Oct 2002 09:47:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barry.mail.mindspring.net (barry.mail.mindspring.net + [207.69.200.25]) by xent.com (Postfix) with ESMTP id 8E1E7294175 for + ; Wed, 2 Oct 2002 09:46:13 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + barry.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17wmdg-0005BM-00; + Wed, 02 Oct 2002 12:46:20 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: Digital Bearer Settlement List , fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: Re: Optical analog computing? +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 10:37:02 -0400 + + +--- begin forwarded text + + +Date: Wed, 02 Oct 2002 01:30:24 -0400 +From: "John S. Denker" +Subject: Re: Optical analog computing? +Sender: jsd@no.domain.spam +To: "R. A. Hettinga" +Cc: Digital Bearer Settlement List , + cryptography@wasabisystems.com + +"R. A. Hettinga" wrote: +... +> "the first computer to crack enigma was optical" +> "the first synthetic-aperture-radar processor was optical" +> "but all these early successes were classified -- 100 to 200 projects, +> and I probably know of less than half." +> +> --> Do these claims compute?! is this really a secret history, or does +> this mean holography, of am I just completely out of the loop?1 + +Gimme a break. This is remarkable for its lack of +newsworthiness. + +1) Bletchley Park used optical sensors, which were (and +still are) the best way to read paper tape at high speed. +You can read about it in the standard accounts, e.g. + http://www.picotech.com/applications/colossus.html + +2) For decades before that, codebreakers were using optical +computing in the form of superposed masks to find patterns. +You can read about it in Kahn. + +3) People have been doing opto-electronic computing for +decades. There's a lot more to it than just holography. +I get 14,000 hits from + http://www.google.com/search?q=optical-computing + +> Optical info is a complex-valued wave (spatial frequency, amplitude and +> phase) + +It isn't right to make it sound like three numbers (frequency, +amplitude, and phase); actually there are innumerable +frequencies, each of which has its own amplitude and phase. + +> lenses, refractions, and interference are the computational operators. +> (add, copy, multiply, fft, correlation, convolution) of 1D and 2D arrays +> +> and, of course, massively parallel by default. +> +> and, of course, allows free-space interconnects. + +Some things that are hard with wires are easy with +light-waves. But most things that are easy with wires +are hard with light-waves. + +> Here's a commercialized effort from israel: a "space integrating +> vector-matric multiplier" [ A ] B = [ C ] +> laser-> 512-gate modulator -> spread over 2D +> "256 Teraflop equivalent" for one multiply per nanosecond. + +People were doing smaller versions of that in +the 1980s. + +> Unclassified example: acousto-optic spectrometer, 500 Gflops equivalent +> (for 12 watts!) doing continuous FFTs. Launched in 1998 on a 2-year +> mission. Submillimeter wave observatory. + +Not "FFTs". FTs. Fourier Transforms. All you need for +taking a D=2 Fourier Transform is a lens. It's undergrad +physics-lab stuff. I get 6,000 hits from: + http://www.google.com/search?q=fourier-optics + +> Of course, the rest of the talk is about the promise of moving from +> optoelectronic to all-optical processors (on all-optical nets & with +> optical encryption, & so on). + +All optical??? No optoelectronics anywhere??? +That's medicinal-grade pure snake oil, USP. + +Photons are well known for not interacting with +each other. It's hard to do computing without +interactions. + +--- end forwarded text + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00856.b71f98991ee068f642498810ba0c5383 b/Ch3/datasets/spam/easy_ham/00856.b71f98991ee068f642498810ba0c5383 new file mode 100644 index 000000000..77e6ea41d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00856.b71f98991ee068f642498810ba0c5383 @@ -0,0 +1,87 @@ +From fork-admin@xent.com Wed Oct 2 18:18:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DB3F816F03 + for ; Wed, 2 Oct 2002 18:18:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 18:18:58 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92GuEK17987 for ; + Wed, 2 Oct 2002 17:56:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0E6C0294175; Wed, 2 Oct 2002 09:56:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav23.law15.hotmail.com [64.4.22.80]) by + xent.com (Postfix) with ESMTP id BDEC529409C for ; + Wed, 2 Oct 2002 09:55:26 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Wed, 2 Oct 2002 09:55:35 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: + +Subject: Re: ActiveBuddy +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 02 Oct 2002 16:55:35.0610 (UTC) FILETIME=[870831A0:01C26A34] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 10:00:48 -0700 + + +----- Original Message ----- +From: "Gary Lawrence Murphy" + +> ... and the one thing I think we've learned in all that time is that, +> as a help-desk, it doesn't work. +I'm not sure they are doing strictly help-desk stuff. +But the whole 'who in their right mind would use that? it doesn't have all +these cool features!' isn't always a guarantee of failure - maybe there is a +strength in this approach (agents and/or IM as ui) than can find a nich +application space. + +> +> In all the prolog-based NL database query systems of the 1980's and +> other later chatterbot helpdesk projects like Shallow Red, even +> simpler tries like Ask Jeeves, people very quickly know they're +> talking to a robot, and the queries anneal to short, truncated and +> terse database-like verb-noun or just noun-keyword requests. +Kind of like a web query - and with google, someone else can turn them into +a link so you don't even have to type anything. + +> +> People are just too quick to adapt, and too impatient to forgive a +> clunky interface, and for now, especially when the /average/ computer +> user still can't type more than maybe 5-10wpm, NL is a painfully slow +> clunky interface. +Yes - true true. + +> +> Put it this way: Would you login, wake the bot and ask for the Seattle +> weather, or would you do as we /all/ do and just click the weather +> icon sitting there on your desktop? +What about a situation where you don't directly ask/talk to the bot, but +they listen in and advise/correct/interject/etc? +example: two people discussing trips, etc. may trigger a weather bot to +mention what the forecast says - without directly being asked. + + diff --git a/Ch3/datasets/spam/easy_ham/00857.cea46b6fc4077476d49923b4d56621e7 b/Ch3/datasets/spam/easy_ham/00857.cea46b6fc4077476d49923b4d56621e7 new file mode 100644 index 000000000..eb4e9c8b9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00857.cea46b6fc4077476d49923b4d56621e7 @@ -0,0 +1,82 @@ +From fork-admin@xent.com Wed Oct 2 21:16:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 84A4316F18 + for ; Wed, 2 Oct 2002 21:16:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 21:16:23 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92IfEK22005 for ; + Wed, 2 Oct 2002 19:41:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 68B44294173; Wed, 2 Oct 2002 11:41:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from dream.darwin.nasa.gov (betlik.darwin.nasa.gov + [198.123.160.11]) by xent.com (Postfix) with ESMTP id A119629409C for + ; Wed, 2 Oct 2002 11:40:31 -0700 (PDT) +Received: from cse.ucsc.edu (paperweight.darwin.nasa.gov [198.123.160.27]) + by dream.darwin.nasa.gov ( -- Info omitted by ASANI Solutions, + LLC.) with ESMTP id g92Iech26818 for ; Wed, 2 Oct 2002 + 11:40:40 -0700 (PDT) +Message-Id: <3D9B3DA6.2090204@cse.ucsc.edu> +From: Elias Sinderson +Reply-To: fork@spamassassin.taint.org +User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:0.9.4.1) + Gecko/20020518 Netscape6/6.2.3 +X-Accept-Language: en-us +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Re: Wifi query +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 02 Oct 2002 11:40:38 -0700 + +802.11b - 11Mbps per channel over three channels in the 2.4GHz range +(also shared with microwaves and cordless phones) at rages up to ~300 ft. +802.11a runs on 12 channels in the 5GHz range and up to around five +times more bandwidth (~54Mbps or so) but has less range (60-100 ft). +8021.11a also adds Forward Error Correction into the scheme to allow for +more reliable data transmission. +Which to use really depends on what you're doing with it. Streaming +video almost necessitates 802.11a, while streaming just audio can be +comfortably done with 802.11b provided that there isn't much +interference or too many clients. +Prices? Don't know... Haven't done the research. For covering a large +area 802.11a will be more expensive due to the need for more APs. If you +want to reach the local coffee shop, however, you will need a +directional antenna either way. + +Check out http://www.80211-planet.com, they've got some good articles on +802.11... Also, some of the best info on 802.11 security I've seen can +be found at http://www.drizzle.com/~aboba/IEEE/. + + +Give me bandwidth or give me death, +Elias + + +Tom wrote: + +>... I have one very pressing question.... Wifi ranges.. ... +> +>Do I got for 802.11b stuff or do I gold out for 802.11a ? Is the price +>point break goign to warrant the differnce? +> + + + diff --git a/Ch3/datasets/spam/easy_ham/00858.54a727ce6b2e452f05e2719d99393999 b/Ch3/datasets/spam/easy_ham/00858.54a727ce6b2e452f05e2719d99393999 new file mode 100644 index 000000000..1632f537b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00858.54a727ce6b2e452f05e2719d99393999 @@ -0,0 +1,153 @@ +From fork-admin@xent.com Thu Oct 3 12:55:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CC95216F6B + for ; Thu, 3 Oct 2002 12:53:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:29 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92KaKK27506 for ; + Wed, 2 Oct 2002 21:36:21 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4618A294159; Wed, 2 Oct 2002 13:36:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hall.mail.mindspring.net (hall.mail.mindspring.net + [207.69.200.60]) by xent.com (Postfix) with ESMTP id 6162C2940CE for + ; Wed, 2 Oct 2002 13:35:03 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + hall.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17wqD6-0002X7-00; + Wed, 02 Oct 2002 16:35:08 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: Digital Bearer Settlement List , fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: Re: Optical analog computing? +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 16:34:21 -0400 + + +--- begin forwarded text + + +Delivered-To: fork@spamassassin.taint.org +To: fork@spamassassin.taint.org +Subject: Re: Optical analog computing? +From: Dave Long +Sender: fork-admin@xent.com +Date: Wed, 02 Oct 2002 11:09:34 -0700 + + + +> > "the first computer to crack enigma was optical" +> +> Computing with interference patterns, etc, makes perfect sense, but Enigma +> was cracked by building mechanical systems that were essentially Enigma +> machines and brute-forcing. + +Look for "Zygalski sheets". + +By Koerner's* narrative, it wound up +being a hybrid affair: Bletchley had +mock Enigmas which cycled through the +Enigma's ~18k starting positions in a +quarter of an hour, but the Germans +started using a plugboard which then +had ~1.5x10^14 possibilities. The +Poles noticed that there were some +patterns in the messages which were +only possible via certain plugboard +settings, and so: + +> When we have collected several such cards corresponding to different +> initial signals ..., we place them in a pile so that the squares +> corresponding to the same daily settings are aligned and shine a +> light beneath the pile. Only those squares which let the light +> through will correspond to possible daily settings. + +So the brute force hardware allowed +precalculation of "optical" computing +devices which then narrowed down the +possibilities enough for brute force +to again be used for daily decodes, +until: + +> On 10 May, the Germans invaded France and, on the same day, in +> accordance with the best cryptographic principles, they changed their +> Enigma procedures in such a way that the 1560 Zygalski sheets, each +> with their carefully drilled 1000 or so holes, became just so much +> waste cardboard. + +-Dave + +:::::: + +> > "the first synthetic-aperture-radar processor was optical" + +This is also easy to believe, given Dr. +Elachi's description of the 1981 Shuttle +Imaging Radar: + +> The received signal is recorded on an optical film which is retrieved +> after landing. The film ... is then processed in an optical correlator +> to generate the final image. + +which makes sense, as one wishes to shift +each component of the return in proportion +to its frequency, for which one presumably +needs a glorified prism. + +> Alternatively, the ... signal can be digitized and then recorded on +> board or transmitted to the ground via a digital data link. This was +> the case with the ... sensor flown in 1984. + +:::::: + +* Koerner, _The Pleasures of Counting_, +in which various aspects of the Enigma +decoding cover four chapters, of which +I quote from two sections of one: +14.2: Beautiful Polish females, and +14.3: Passing the torch +> Churchill's romantic soul loved the excitement and secrecy surrounding +> Bletchley. He relished the way that +> > [t]he old procedures, like the setting up of agents, the suborning +> > of informants, the sending of messages written in invisible ink, +> > the masquerading, the dressing-up, the secret transmitters, and the +> > examining of the contents of waste-paper baskets, all turned out +> > to be largely cover for this other source, as one might keep some +> > old-established business in rare books going in order to be able, +> > under cover of it, to do a thriving trade in pornography and erotica +> ... +> Looking at the disparate, unkempt and definitely unmilitary crew +> formed by his top code-breakers, he is said to have added to his head +> of Intelligence "I know I told you to leave no stone unturned to find +> the necessary staff, but I did not mean you to take me so literally!" + +--- end forwarded text + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00859.54a8c500034dd8056834ee17cec9c4cc b/Ch3/datasets/spam/easy_ham/00859.54a8c500034dd8056834ee17cec9c4cc new file mode 100644 index 000000000..117daa50a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00859.54a8c500034dd8056834ee17cec9c4cc @@ -0,0 +1,66 @@ +From fork-admin@xent.com Thu Oct 3 12:55:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0680816F6C + for ; Thu, 3 Oct 2002 12:53:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:32 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92KjMK27910 for ; + Wed, 2 Oct 2002 21:45:23 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8F13F294164; Wed, 2 Oct 2002 13:45:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav27.law15.hotmail.com [64.4.22.84]) by + xent.com (Postfix) with ESMTP id D1B4A29409C for ; + Wed, 2 Oct 2002 13:44:34 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Wed, 2 Oct 2002 13:44:44 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: + + +Subject: Re: ActiveBuddy +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 02 Oct 2002 20:44:44.0024 (UTC) FILETIME=[89B9AF80:01C26A54] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 13:49:53 -0700 + + +----- Original Message ----- +From: "Gary Lawrence Murphy" + +> +> f> What about a situation where you don't directly ask/talk to the +> f> bot, but they listen in and advise/correct/interject/etc? +> +> Do you do that? Do you hear two people at the next table say "I'm +> going to Seattle tomorrow" and you just /have/ to lean over and +> interject compulsively to tell them what you know about Seattle's +> weather? + +Have you ever worked with Kragen? + + diff --git a/Ch3/datasets/spam/easy_ham/00860.a2a3bca553c3ec8e6ce24f45b3f2a9a4 b/Ch3/datasets/spam/easy_ham/00860.a2a3bca553c3ec8e6ce24f45b3f2a9a4 new file mode 100644 index 000000000..6ad30e766 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00860.a2a3bca553c3ec8e6ce24f45b3f2a9a4 @@ -0,0 +1,69 @@ +From fork-admin@xent.com Thu Oct 3 12:55:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DE19616F6D + for ; Thu, 3 Oct 2002 12:53:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:34 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92LFEK29156 for ; + Wed, 2 Oct 2002 22:15:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 51900294160; Wed, 2 Oct 2002 14:15:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav18.law15.hotmail.com [64.4.22.122]) by + xent.com (Postfix) with ESMTP id C4B9A2940CE for ; + Wed, 2 Oct 2002 14:14:35 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Wed, 2 Oct 2002 14:14:45 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +References: + + +Subject: Re: ActiveBuddy +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 02 Oct 2002 21:14:45.0233 (UTC) FILETIME=[BB545E10:01C26A58] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 14:19:58 -0700 + + +----- Original Message ----- +From: "Mr. FoRK" + +> ----- Original Message ----- +> From: "Gary Lawrence Murphy" +> +> > +> > f> What about a situation where you don't directly ask/talk to the +> > f> bot, but they listen in and advise/correct/interject/etc? +> > +> > Do you do that? Do you hear two people at the next table say "I'm +> > going to Seattle tomorrow" and you just /have/ to lean over and +> > interject compulsively to tell them what you know about Seattle's +> > weather? +> +Oh, please, quit with all that StopEnergy(tm) + + diff --git a/Ch3/datasets/spam/easy_ham/00861.6e526bc95d6eb4736211696fec13d9f0 b/Ch3/datasets/spam/easy_ham/00861.6e526bc95d6eb4736211696fec13d9f0 new file mode 100644 index 000000000..f11505abc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00861.6e526bc95d6eb4736211696fec13d9f0 @@ -0,0 +1,94 @@ +From fork-admin@xent.com Thu Oct 3 12:54:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3E7DE16F03 + for ; Thu, 3 Oct 2002 12:53:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:26 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92KRGK27278 for ; + Wed, 2 Oct 2002 21:27:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 68C04294179; Wed, 2 Oct 2002 13:27:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp6.mindspring.com (smtp6.mindspring.com + [207.69.200.110]) by xent.com (Postfix) with ESMTP id 2BC2129409C for + ; Wed, 2 Oct 2002 13:26:52 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + smtp6.mindspring.com with esmtp (Exim 3.33 #1) id 17wq58-0000da-00; + Wed, 02 Oct 2002 16:26:54 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: Digital Bearer Settlement List , fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: Re: Optical analog computing? +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 16:25:26 -0400 + + +--- begin forwarded text + + +Date: Thu, 03 Oct 2002 03:21:05 +1000 +To: "John S. Denker" +From: Greg Rose +Subject: Re: Optical analog computing? +Cc: "R. A. Hettinga" , + Digital Bearer Settlement List , + cryptography@wasabisystems.com + +At 01:30 AM 10/2/2002 -0400, John S. Denker wrote: +>"R. A. Hettinga" wrote: +>... +> > "the first computer to crack enigma was optical" +>1) Bletchley Park used optical sensors, which were (and +>still are) the best way to read paper tape at high speed. +>You can read about it in the standard accounts, e.g. +> http://www.picotech.com/applications/colossus.html + +But Colossus was not for Enigma. The bombes used for Enigma were +electro-mechanical. I'm not aware of any application of optical techniques +to Enigma, unless they were done in the US and are still classified. And +clearly, the first bulk breaks of Enigma were done by the bombes, so I +guess it depends whether you count bombes as computers or not, whether this +statement has any credibility at all. + +Greg. + + + +Williams/Zenon 2004 campaign page: http://www.ben4prez.org + +Greg Rose INTERNET: ggr@qualcomm.com +Qualcomm Australia VOICE: +61-2-9817 4188 FAX: +61-2-9817 5199 +Level 3, 230 Victoria Road, http://people.qualcomm.com/ggr/ +Gladesville NSW 2111 232B EC8F 44C6 C853 D68F E107 E6BF CD2F 1081 A37C + +--- end forwarded text + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00862.b3e793b7c8e41cd45a0eccaa7abaf722 b/Ch3/datasets/spam/easy_ham/00862.b3e793b7c8e41cd45a0eccaa7abaf722 new file mode 100644 index 000000000..1a312a94b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00862.b3e793b7c8e41cd45a0eccaa7abaf722 @@ -0,0 +1,75 @@ +From fork-admin@xent.com Thu Oct 3 12:55:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BADF916F6E + for ; Thu, 3 Oct 2002 12:53:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:35 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92LJPK29410 for ; + Wed, 2 Oct 2002 22:19:27 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 7E277294174; Wed, 2 Oct 2002 14:19:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.endeavors.com (unknown [66.161.8.83]) by xent.com + (Postfix) with ESMTP id 047C4294171 for ; Wed, + 2 Oct 2002 14:18:56 -0700 (PDT) +Received: from endeavors.com ([66.161.8.83] RDNS failed) by + mail.endeavors.com with Microsoft SMTPSVC(5.0.2195.5329); Wed, + 2 Oct 2002 14:16:56 -0700 +Message-Id: <3D9B6247.8090205@endeavors.com> +From: Gregory Alan Bolcer +Organization: Endeavors Technology, Inc. +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.1) + Gecko/20020823 Netscape/7.0 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Re: Wifi query +References: + <3D9B3DA6.2090204@cse.ucsc.edu> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Originalarrivaltime: 02 Oct 2002 21:16:56.0843 (UTC) FILETIME=[09C675B0:01C26A59] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 02 Oct 2002 14:16:55 -0700 + + + +Elias Sinderson wrote: +> 802.11b - 11Mbps per channel over three channels in the 2.4GHz range +> (also shared with microwaves and cordless phones) + +Microwaves, cordless phones and video-based baby monitors.... + +Greg + + + +-- +Gregory Alan Bolcer, CTO | work: +1.949.833.2800 +gbolcer at endeavors.com | http://endeavors.com +Endeavors Technology, Inc.| cell: +1.714.928.5476 + + + + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00863.f20cfe969a2e3162ce6ce19fd80188bd b/Ch3/datasets/spam/easy_ham/00863.f20cfe969a2e3162ce6ce19fd80188bd new file mode 100644 index 000000000..214b29c36 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00863.f20cfe969a2e3162ce6ce19fd80188bd @@ -0,0 +1,90 @@ +From fork-admin@xent.com Thu Oct 3 12:55:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2F78D16F16 + for ; Thu, 3 Oct 2002 12:53:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92LeEK30274 for ; + Wed, 2 Oct 2002 22:40:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B2ECD2940CE; Wed, 2 Oct 2002 14:40:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 1075A29409C for ; Wed, + 2 Oct 2002 14:39:38 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 9EF443ECAE; + Wed, 2 Oct 2002 17:44:24 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 9D4D23EC76; Wed, 2 Oct 2002 17:44:24 -0400 (EDT) +From: Tom +To: Gregory Alan Bolcer +Cc: fork@spamassassin.taint.org +Subject: Re: Wifi query +In-Reply-To: <3D9B6247.8090205@endeavors.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 17:44:24 -0400 (EDT) + +On Wed, 2 Oct 2002, Gregory Alan Bolcer wrote: +--]Elias Sinderson wrote: +--]> 802.11b - 11Mbps per channel over three channels in the 2.4GHz range +--]> (also shared with microwaves and cordless phones) +--] +--]Microwaves, cordless phones and video-based baby monitors.... + +Well I dont have to worry about microwavers in the house. Ours died a week +or so ago and due to doing some research we will nto be getting anysuch +device in the near or far future. I mean even if one half of the crap it +is reported to do is true it s just not worth it for a quick cup or warm +chai. + +Which brings me to the fact that finding a good Convection only (not combo +with a microwaver) oven of any good size is dang near impossible unless +you go up to the bizness sizes. thankfully there is Dehlongi of which +costco has thru thier online store. + +Now of course the question is do we get it delivered to the old house or +the new one (yep we got our offer approved and are in the short run down +to a long mortage:) we close on oct 31. though the realestate agent says +t happens like that a lot, I still find it incrediably jolting to have +found a house inthe hood I want with the space dawn wants on sunday and we +are signing papers on tuesday night with a close at the end of the month. + +Which of course means....wifi land for wsmf:)- ) + +So far I like the Linksys dsl/cable router all in one wifi ap. The Dlink +has the funky 22mb stuff IF you use all thier stuff across the net and the +way things go I cant say thats gonna happen for sure. Pluse the Linksys +stuff is all over the mass market sotres so I cna walk home with parts at +any time. + +The fun now comes with a realization that with ATTbi cable as my main hose +tot he net offering up bwf might be a tad problematic....So i am thinking +of ways around/through/under that. the setup of the particualrs are far +form set in stone...any ideas would be welcome. + +Also any portlanders.....party time. + + +-tom + + + + diff --git a/Ch3/datasets/spam/easy_ham/00864.95da38aac2ee9c6c8d36d0f2f1e8c8e5 b/Ch3/datasets/spam/easy_ham/00864.95da38aac2ee9c6c8d36d0f2f1e8c8e5 new file mode 100644 index 000000000..4518fff7c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00864.95da38aac2ee9c6c8d36d0f2f1e8c8e5 @@ -0,0 +1,70 @@ +From fork-admin@xent.com Thu Oct 3 12:55:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C665116F6F + for ; Thu, 3 Oct 2002 12:53:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92LjkK30410 for ; + Wed, 2 Oct 2002 22:45:50 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4FDD429417C; Wed, 2 Oct 2002 14:43:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from maynard.mail.mindspring.net (maynard.mail.mindspring.net + [207.69.200.243]) by xent.com (Postfix) with ESMTP id 68FF129417B for + ; Wed, 2 Oct 2002 14:42:50 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + maynard.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17wrGj-0005gr-00 + for fork@xent.com; Wed, 02 Oct 2002 17:42:58 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: +References: +To: fork@spamassassin.taint.org +From: "R. A. Hettinga" +Subject: Re: Optical analog computing? +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 17:42:32 -0400 + +At 4:34 PM -0400 on 10/2/02, R. A. Hettinga wrote: + + +> --- begin forwarded text +> +> +> Status: RO +> Delivered-To: fork@spamassassin.taint.org + +Sigh. Shoot me, now... + +My apologies. + +Cheers, +RAH + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00865.ffa802dadbaca77b74f05cc1c23c30bd b/Ch3/datasets/spam/easy_ham/00865.ffa802dadbaca77b74f05cc1c23c30bd new file mode 100644 index 000000000..d5afb68ab --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00865.ffa802dadbaca77b74f05cc1c23c30bd @@ -0,0 +1,90 @@ +From fork-admin@xent.com Thu Oct 3 12:55:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C173C16F1A + for ; Thu, 3 Oct 2002 12:53:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92MXEK32150 for ; + Wed, 2 Oct 2002 23:33:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 052ED29416D; Wed, 2 Oct 2002 15:33:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 0F5F429409C for ; Wed, + 2 Oct 2002 15:32:42 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 03F8B3EDCD; + Wed, 2 Oct 2002 18:37:29 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 025D63ED4E for ; Wed, + 2 Oct 2002 18:37:28 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Apple Sauced...again +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 18:37:28 -0400 (EDT) + + +Over on Arstechnica (www.arstechnica.com) I saw mention of a Wired article +that goes into the many wonderfull ways Apple is showing its love and +respect for its users. + +http://www.wired.com/news/mac/0,2125,55395,00.html + +There is a good rundown of all the whys and whatfores over at +http://arstechnica.com/reviews/02q3/macosx-10.2/macosx-10.2-5.html + +"True to form, industrious third party developers saw that they could gain +a competitive advantage by supporting this more capable user interface in +their applications. Apple's private menu extras APIs were reverse +engineered and leveraged to great effect. The architecture was so popular +that an application for managing predefined sets of menu extras (third +party or otherwise) was in development. + +All of that changed with the release of Jaguar--but not because the +private APIs had changed. If they had, third party developers would have +updated their applications to work with the new APIs, as they have +resigned themselves to doing by choosing to use private APIs in the first +place. + +But what actually happened in Jaguar was that Apple added code to forcibly +exclude all non-Apple menu extras. Other parts of the API did not change. +But when a menu extra is loaded, it is compared to a hard-coded list of +"known" menu extras from Apple. If the menu extra is not on that list, it +is not allowed to load. + +It's easy to laugh at Steve Ballmer's sweat-soaked gyrations as he chants +"developers, developers, developers!", but Microsoft clearly understands +something that Apple is still struggling with. It is in a platform +vendor's best interest to encourage development for its platform. In +Apple's case, this doesn't mean that they have to bend over backwards to +make every single system service and UI element "pluggable" via public +APIs. That's clearly a lot of work, and not something that needs to be the +number one priority for an OS in its infancy. And in the meantime, if +third party developers want to sell into a market that requires the +desired functionality to be added in "unsupported" ways, then they must be +prepared for the maintenance consequences of their decisions. + +But for Apple to go out of its way--to actually expend developer +effort--to stop these third party developers, while still failing to +provide a supported alternative, is incredibly foolish. " + + + diff --git a/Ch3/datasets/spam/easy_ham/00866.670508b848fa453d194f443f4737b351 b/Ch3/datasets/spam/easy_ham/00866.670508b848fa453d194f443f4737b351 new file mode 100644 index 000000000..86bf4195a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00866.670508b848fa453d194f443f4737b351 @@ -0,0 +1,166 @@ +From fork-admin@xent.com Thu Oct 3 12:55:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B9D2616F70 + for ; Thu, 3 Oct 2002 12:53:43 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:43 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g92MwHK00398 for ; + Wed, 2 Oct 2002 23:58:18 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 14C98294178; Wed, 2 Oct 2002 15:58:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from ms4.lga2.nytimes.com (ms4.lga2.nytimes.com [64.15.247.148]) + by xent.com (Postfix) with ESMTP id B280429409C for ; + Wed, 2 Oct 2002 15:57:44 -0700 (PDT) +Received: from email4.lga2.nytimes.com (email4 [10.0.0.169]) by + ms4.lga2.nytimes.com (Postfix) with ESMTP id 5F4A85A4A7 for + ; Wed, 2 Oct 2002 19:02:07 -0400 (EDT) +Received: by email4.lga2.nytimes.com (Postfix, from userid 202) id + AFE7EC403; Wed, 2 Oct 2002 18:51:11 -0400 (EDT) +Reply-To: khare@alumni.caltech.edu +From: khare@alumni.caltech.edu +To: fork@spamassassin.taint.org +Subject: NYTimes.com Article: Stop Those Presses! Blonds, It Seems, Will + Survive After All +Message-Id: <20021002225111.AFE7EC403@email4.lga2.nytimes.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 18:51:11 -0400 (EDT) + +This article from NYTimes.com +has been sent to you by khare@alumni.caltech.edu. + + +Excellent evidence of the herd. Just imagine if the anonymous noise injected into our world newsphere (noosphere?) was, say, a fraudulent story that a stock accounting scandal had been accused and the evildoers were shorting. + +Oh, wait, that happened. An unemployed Orange County student took down Emulex... + +Enjoy! + Rohit + +khare@alumni.caltech.edu + + +Stop Those Presses! Blonds, It Seems, Will Survive After All + +October 2, 2002 +By LAWRENCE K. ALTMAN + + + + + + +Apparently it fell into the category "too good to check." + + +Last Friday, several British newspapers reported that the +World Health Organization had found in a study that blonds +would become extinct within 200 years, because blondness +was caused by a recessive gene that was dying out. The +reports were repeated on Friday by anchors for the ABC News +program "Good Morning America," and on Saturday by CNN. + +There was only one problem, the health organization said in +a statement yesterday that it never reported that blonds +would become extinct, and it had never done a study on the +subject. + +"W.H.O. has no knowledge of how these news reports +originated," said the organization, an agency of the United +Nations based in Geneva, "but would like to stress that we +have no opinion of the future existence of blonds." + +All the news reports, in Britain and the United States, +cited a study from the World Health Organization - "a +blonde-shell study," as The Daily Star of London put it. +But none reported any scientific details from the study or +the names of the scientists who conducted it. + +On "Good Morning America," Charles Gibson began a +conversation with his co-anchor, Diane Sawyer, by saying: +"There's a study from the World Health Organization, this +is for real, that blonds are an endangered species. Women +and men with blond hair, eyebrows and blue eyes, natural +blonds, they say will vanish from the face of the earth +within 200 years, because it is not as strong a gene as +brunets." + +Ms. Sawyer said she was "somewhat of a natural blonde." + + +Jeffrey Schneider, a spokesman for ABC News, said the +anchors got the information from an ABC producer in London +who said he had read it in a British newspaper. + +In London, The Sun and The Express both reported that +unnamed scientists said blonds would survive longest in +Scandinavia, where they are most concentrated, and expected +the last true blond to hail from Finland. + +The British accounts were replete with the views of +bleached blonds who said hairdressers would never allow +blondness to become extinct, and doctors who said that rare +genes would pop up to keep natural blonds from becoming an +endangered species. + +Journalists in London said last night that the source of +the reports was probably one of several European news +agencies that are used by the British press, but it +remained unclear which one. + +Tim Hall, a night news editor at The Daily Mail, said the +report was probably distributed by The Press Association, +Britain's domestic news agency. "Several papers picked it +up," he said. + +But Charlotte Gapper, night editor at The Press +Association, said that although it had considered running +the report on Sept. 27, it had decided not to after talking +to the World Health Organization. + +"We didn't do that story because we made an inquiry to the +World Health Organization first," she said. "They told us +that report was two years old, and had been covered at the +time. They said it had been picked up again that day by a +German news agency." + +She added that she did not know which agency the +organization was referring to. + +Dr. Ray White, a geneticist at the University of California +at San Francisco, said that the disappearance of a gene for +blond hair "sounds patently incorrect." + +http://www.nytimes.com/2002/10/02/health/02BLON.html?ex=1034599071&ei=1&en=3a0e4f0b2b251593 + + + +HOW TO ADVERTISE +--------------------------------- +For information on advertising in e-mail newsletters +or other creative advertising opportunities with The +New York Times on the Web, please contact +onlinesales@nytimes.com or visit our online media +kit at http://www.nytimes.com/adinfo + +For general information about NYTimes.com, write to +help@nytimes.com. + +Copyright 2002 The New York Times Company + + diff --git a/Ch3/datasets/spam/easy_ham/00867.9e8b300d814c941ba6bbedba138239f0 b/Ch3/datasets/spam/easy_ham/00867.9e8b300d814c941ba6bbedba138239f0 new file mode 100644 index 000000000..cc287004e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00867.9e8b300d814c941ba6bbedba138239f0 @@ -0,0 +1,65 @@ +From fork-admin@xent.com Thu Oct 3 12:55:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3EF9116F71 + for ; Thu, 3 Oct 2002 12:53:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g935HKK15871 for ; + Thu, 3 Oct 2002 06:17:22 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9839F29416F; Wed, 2 Oct 2002 22:17:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 3326929409C for ; + Wed, 2 Oct 2002 22:16:44 -0700 (PDT) +Received: (qmail 26129 invoked from network); 3 Oct 2002 05:16:58 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 3 Oct 2002 05:16:58 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id C6EBE1B62C; + Thu, 3 Oct 2002 01:16:52 -0400 (EDT) +To: Eirikur Hallgrimsson +Cc: fork@spamassassin.taint.org +Subject: Re: Apple Sauced...again +References: + <200210022317.13639.eh@mad.scientist.com> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 03 Oct 2002 01:16:52 -0400 + +>>>>> "E" == Eirikur Hallgrimsson writes: + + E> ... If my environment cannot be made beautiful, in + E> some sense I cannot live. + + "The first question I ask myself when something doesn't seem to be + beautiful is why do I think it's not beautiful. And very shortly you + discover that there is no reason." -- John Cage + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00868.f6059340a945c22b175f306ee79e674e b/Ch3/datasets/spam/easy_ham/00868.f6059340a945c22b175f306ee79e674e new file mode 100644 index 000000000..7e6bb17d9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00868.f6059340a945c22b175f306ee79e674e @@ -0,0 +1,84 @@ +From fork-admin@xent.com Thu Oct 3 12:55:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3C5D116F73 + for ; Thu, 3 Oct 2002 12:53:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g936gFK17769 for ; + Thu, 3 Oct 2002 07:42:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 98831294171; Wed, 2 Oct 2002 23:42:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id A9E0629409C for ; Wed, + 2 Oct 2002 23:41:42 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 573AE3EC7C; + Thu, 3 Oct 2002 02:46:21 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 559873EDF4 for ; Thu, + 3 Oct 2002 02:46:21 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: wifi progress +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 3 Oct 2002 02:46:21 -0400 (EDT) + + +Well it looks pretty much 99% sure that we will be moving in on Nov 1 to +the new house. I think the only thing that stops us now are acts of +dieties and total economic collapse..so no one mention the dow for the +next few weeks.. + +In preperation we drove to Best Buy tonight and picked up the test core +for the wifi net. I got a linksys BEFW11S4(1) for the router/hub/wireless +ap/firewall/etc and a linksys wifi pcmcia card for the laptop + +I made one false move so it took about 30 mins all told to set up the +card, the router, and the other 3 machines in the house on the wire ether +hub. All vfery neat very easy and very very cool set up via the +webinterface. I have to dig into the firewall/nat/routing features some +more (i have been reading up the wifi security blackpaper on ars technica) +but all in all a smooth move. + + +Now the place im at now, the house soon to be the ex house, has lots of +funky things going on in the walls and in the area. We are in , +essentialy, a gravel pit..recption of all types suck and transmisions get +goofy inside the pit. That being said... with 2 walls and 40 feet between +the AP and the pcmica card (no external antena on it) Im still getting +11mbs and at least 60% goodness. + + +Some cool things about the new house...its a 1912 job so no metal works +inthe walls to speak of , mostly wood and plaster. We dont have a +microwave and our cordless phines are on 900mhz (yea so I can use my bear +cat to listen in on some calls, with kids in the house is that such a bad +thing? Ben or heather, if you read this years from now...well by then I +hope youare better at countermoeasures:)- ) + +Ok, enough testing for tonight. I gota say, being able to do this in bed +by vncing via wifi to my desktop is a blast...oh no...wifes pillow is +heading this way....DUCKKKKK + + +(1)http://www.linksys.com/Products/product.asp?grid=23&prid=173 + + diff --git a/Ch3/datasets/spam/easy_ham/00869.96acf5a2b0543fd7c1767e5562891eae b/Ch3/datasets/spam/easy_ham/00869.96acf5a2b0543fd7c1767e5562891eae new file mode 100644 index 000000000..0d427c5d6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00869.96acf5a2b0543fd7c1767e5562891eae @@ -0,0 +1,62 @@ +From fork-admin@xent.com Thu Oct 3 12:55:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5A26816F1B + for ; Thu, 3 Oct 2002 12:53:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g933IPK12641 for ; + Thu, 3 Oct 2002 04:18:28 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E14362940AE; Wed, 2 Oct 2002 20:18:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc01.attbi.com (sccrmhc01.attbi.com [204.127.202.61]) + by xent.com (Postfix) with ESMTP id 2A8B029409C for ; + Wed, 2 Oct 2002 20:17:24 -0700 (PDT) +Received: from Intellistation ([66.31.2.27]) by sccrmhc01.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20021003031734.DJSZ6431.sccrmhc01.attbi.com@Intellistation> for + ; Thu, 3 Oct 2002 03:17:34 +0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Eirikur Hallgrimsson +Organization: Electric Brain +To: fork@spamassassin.taint.org +Subject: Re: Apple Sauced...again +User-Agent: KMail/1.4.1 +References: +In-Reply-To: +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200210022317.13639.eh@mad.scientist.com> +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 2 Oct 2002 23:17:13 -0400 + +On Wednesday 02 October 2002 06:37 pm, Tom wrote: +> But what actually happened in Jaguar was that Apple added code to +> exclude all non-Apple menu extras. + +Too, too, too, true. Just you try to muck with Job's blessed Aqua +interface. Or remove the fscking dock. OSX is such a step down from +Classic with Kaleidoscope skinning the entire UI. As an artist, I resent +it deeply. (This is not in praise of Classic.) If my environment cannot +be made beautiful, in some sense I cannot live. + +Eirikur + + + + diff --git a/Ch3/datasets/spam/easy_ham/00870.cf6be25af593cc88d0c7f58e7deccea4 b/Ch3/datasets/spam/easy_ham/00870.cf6be25af593cc88d0c7f58e7deccea4 new file mode 100644 index 000000000..53e7af95d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00870.cf6be25af593cc88d0c7f58e7deccea4 @@ -0,0 +1,86 @@ +From fork-admin@xent.com Thu Oct 3 12:55:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D0E4116F74 + for ; Thu, 3 Oct 2002 12:53:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:53 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g93BUBK26515 for ; + Thu, 3 Oct 2002 12:30:12 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E39372940A2; Thu, 3 Oct 2002 04:30:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from maynard.mail.mindspring.net (maynard.mail.mindspring.net + [207.69.200.243]) by xent.com (Postfix) with ESMTP id 80C0829409C for + ; Thu, 3 Oct 2002 04:29:49 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + maynard.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17x4Ay-00057H-00; + Thu, 03 Oct 2002 07:29:53 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: dcsb@ai.mit.edu, cryptography@wasabisystems.com, + mac_crypto@vmeng.com, e$@vmeng.com, fork@xent.com, irregulars@tb.tf +From: "R. A. Hettinga" +Subject: The 3rd Annual Consult Hyperion Digital Identity Forum +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 3 Oct 2002 07:06:51 -0400 + + +--- begin forwarded text + + +User-Agent: Microsoft-Entourage/10.1.0.2006 +Date: Thu, 03 Oct 2002 07:56:39 +0100 +Subject: The 3rd Annual Consult Hyperion Digital Identity Forum +From: "David G.W. Birch" +To: Bob Hettinga +Cc: Digital Bearer Settlement List + +Dear All, + +See www.digitalidentityforum.com for more details. Speakers include +Microsoft and Liberty Alliance, UK central and local government, law +enforcement, financial services (Egg and RBS/NatWest), EC Research Centre, a +psychologist and others. Look forward to seeing you there. + +Regards, +Dave Birch. + +-- +-- David Birch, Director, Consult Hyperion +-- +-- tel +44 (0)1483 301793, fax +44 (0)1483 561657 +-- mail dave@chyp.com, web http://www.chyp.com +-- +-- See you at the 2nd Annual Digital Transactions Forum in Singapore +-- October 16th/17th 2002, see http://www.digitaltransactionsforum.com/ + +--- end forwarded text + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00871.f3bb3f8e157f00992af581a509234858 b/Ch3/datasets/spam/easy_ham/00871.f3bb3f8e157f00992af581a509234858 new file mode 100644 index 000000000..af6fd9286 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00871.f3bb3f8e157f00992af581a509234858 @@ -0,0 +1,73 @@ +From fork-admin@xent.com Thu Oct 3 12:56:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C951D16F76 + for ; Thu, 3 Oct 2002 12:53:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:53:56 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g93BYSK26753 for ; + Thu, 3 Oct 2002 12:34:28 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 227E3294181; Thu, 3 Oct 2002 04:31:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from maynard.mail.mindspring.net (maynard.mail.mindspring.net + [207.69.200.243]) by xent.com (Postfix) with ESMTP id CE1D029417B for + ; Thu, 3 Oct 2002 04:30:23 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + maynard.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17x4BF-00057H-00; + Thu, 03 Oct 2002 07:30:09 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +In-Reply-To: +References: + <200210022317.13639.eh@mad.scientist.com> +To: Gary Lawrence Murphy , + Eirikur Hallgrimsson +From: "R. A. Hettinga" +Subject: Re: Apple Sauced...again +Cc: fork@spamassassin.taint.org, Digital Bearer Settlement List +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 3 Oct 2002 07:27:27 -0400 + +At 1:16 AM -0400 on 10/3/02, Gary Lawrence Murphy wrote: + + +> "The first question I ask myself when something doesn't seem to be +> beautiful is why do I think it's not beautiful. And very shortly you +> discover that there is no reason." -- John Cage + +"When I'm working on a problem, I never think about beauty. I think only +how to solve the problem. But when I have finished, if the solution is not +beautiful, I know it is wrong." -- R. Buckminster Fuller + +"Simplicity is the highest goal, achievable when you have overcome all +difficulties." -- Frederic Chopin + +"Externalities are the last refuge of the dirigistes." -- Friedrich Hayek + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"The stoical scheme of supplying our wants by lopping off our +desires is like cutting off our feet when we want shoes." + -- Jonathan Swift + + diff --git a/Ch3/datasets/spam/easy_ham/00872.b037dfd3ef82cc1690c6692ed42c4dd5 b/Ch3/datasets/spam/easy_ham/00872.b037dfd3ef82cc1690c6692ed42c4dd5 new file mode 100644 index 000000000..79f5fa972 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00872.b037dfd3ef82cc1690c6692ed42c4dd5 @@ -0,0 +1,68 @@ +From fork-admin@xent.com Thu Oct 3 16:08:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A435D16F1B + for ; Thu, 3 Oct 2002 16:04:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 16:04:07 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g93EgIK00962 for ; + Thu, 3 Oct 2002 15:42:19 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 5BF1C294177; Thu, 3 Oct 2002 07:42:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id D643029409C for ; + Thu, 3 Oct 2002 07:41:21 -0700 (PDT) +Received: (qmail 19226 invoked from network); 3 Oct 2002 14:41:38 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 3 Oct 2002 14:41:38 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 4748F1B62C; + Thu, 3 Oct 2002 10:41:29 -0400 (EDT) +To: "R. A. Hettinga" +Cc: Eirikur Hallgrimsson , fork@spamassassin.taint.org, + Digital Bearer Settlement List +Subject: Re: Apple Sauced...again +References: + <200210022317.13639.eh@mad.scientist.com> + +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 03 Oct 2002 10:41:29 -0400 + +>>>>> "R" == R A Hettinga writes: + + R> "When I'm working on a problem, I never think about beauty. I + R> think only how to solve the problem. But when I have finished, + R> if the solution is not beautiful, I know it is wrong." -- + R> R. Buckminster Fuller + +"It was only /after/ I'd completed the geodesic dome that I noticed it +was beautiful" --- R. Buckminster Fuller + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00873.9fa4518a4adfab3e6b194ee33a89b2e0 b/Ch3/datasets/spam/easy_ham/00873.9fa4518a4adfab3e6b194ee33a89b2e0 new file mode 100644 index 000000000..acf222a22 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00873.9fa4518a4adfab3e6b194ee33a89b2e0 @@ -0,0 +1,65 @@ +From fork-admin@xent.com Thu Oct 3 19:30:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1C3D016F16 + for ; Thu, 3 Oct 2002 19:29:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 19:29:08 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g93GgKK05592 for ; + Thu, 3 Oct 2002 17:42:21 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D2B8C2940A8; Thu, 3 Oct 2002 09:42:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from Boron.MeepZor.Com (i.meepzor.com [204.146.167.214]) by + xent.com (Postfix) with ESMTP id 8464B29409C for ; + Thu, 3 Oct 2002 09:41:01 -0700 (PDT) +Received: from Golux.Com (dmz-firewall [206.199.198.4]) by + Boron.MeepZor.Com (8.11.6/8.11.6) with ESMTP id g93Gf6K02603; + Thu, 3 Oct 2002 12:41:06 -0400 +Message-Id: <3D9C760E.3D49B993@Golux.Com> +From: Rodent of Unusual Size +Organization: The Apache Software Foundation +X-Mailer: Mozilla 4.79 [en] (WinNT; U) +X-Accept-Language: en +MIME-Version: 1.0 +To: Flatware or Road Kill? +Subject: Re: The Wrong Business +References: + <3D99DEF1.1020709@endeavors.com> +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 03 Oct 2002 12:53:34 -0400 + +people with too much time on their hands.. + +look at this first (8meg, so takes a loong time): + +http://www.ntk.net/2002/09/27/jesus_large.jpg + +and then look at this reduction: + +http://www.ntk.net/2002/09/27/jesus_small.jpg +-- +#ken P-)} + +Ken Coar, Sanagendamgagwedweinini http://Golux.Com/coar/ +Author, developer, opinionist http://Apache-Server.Com/ + +"Millennium hand and shrimp!" + + diff --git a/Ch3/datasets/spam/easy_ham/00874.d9f0374ce55cb5e03ca46a5459894e34 b/Ch3/datasets/spam/easy_ham/00874.d9f0374ce55cb5e03ca46a5459894e34 new file mode 100644 index 000000000..2cde5b158 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00874.d9f0374ce55cb5e03ca46a5459894e34 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Thu Oct 3 19:30:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 96B4716F03 + for ; Thu, 3 Oct 2002 19:29:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 19:29:11 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g93HqGK08100 for ; + Thu, 3 Oct 2002 18:52:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 2571629417B; Thu, 3 Oct 2002 10:52:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 5BD972940BB for ; + Thu, 3 Oct 2002 10:51:25 -0700 (PDT) +Received: (qmail 6379 invoked from network); 3 Oct 2002 17:51:36 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 3 Oct 2002 17:51:36 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id B436F1B62C; + Thu, 3 Oct 2002 13:51:28 -0400 (EDT) +To: Rodent of Unusual Size +Cc: Flatware or Road Kill? +Subject: Re: The Wrong Business +References: + <3D99DEF1.1020709@endeavors.com> <3D9C760E.3D49B993@Golux.Com> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 03 Oct 2002 13:51:28 -0400 + + +Actually this is output from an old java program called jitter. +It's very useful for those of us with digital cameras who end up +taking 50+ pictures a day while on vacation ;) + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00875.b8e33b6137c804fbf4e77135aeae2283 b/Ch3/datasets/spam/easy_ham/00875.b8e33b6137c804fbf4e77135aeae2283 new file mode 100644 index 000000000..0912e00f7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00875.b8e33b6137c804fbf4e77135aeae2283 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Thu Oct 3 20:13:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 753FE16F03 + for ; Thu, 3 Oct 2002 20:13:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 20:13:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g93J3GK10720 for ; + Thu, 3 Oct 2002 20:03:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D8CE5294185; Thu, 3 Oct 2002 12:03:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 3C7B6294183 for ; + Thu, 3 Oct 2002 12:02:53 -0700 (PDT) +Received: (qmail 21376 invoked from network); 3 Oct 2002 19:03:05 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 3 Oct 2002 19:03:05 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id 8F1EA1B62C; + Thu, 3 Oct 2002 15:02:54 -0400 (EDT) +To: "Gordon Mohr" +Cc: "Flatware or Road Kill?" +Subject: Re: The Wrong Business +References: + <3D99DEF1.1020709@endeavors.com> <3D9C760E.3D49B993@Golux.Com> + <00da01c26b0d$1d456830$640a000a@golden> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 03 Oct 2002 15:02:54 -0400 + + +egad ... you mean there's two of them??? I knew there was a reason +my jobs board had jumped to the top of my traffic list. + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00876.f075a944de6d2290fd7a1965ac72d94f b/Ch3/datasets/spam/easy_ham/00876.f075a944de6d2290fd7a1965ac72d94f new file mode 100644 index 000000000..408ce4bfa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00876.f075a944de6d2290fd7a1965ac72d94f @@ -0,0 +1,122 @@ +From fork-admin@xent.com Fri Oct 4 11:03:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 041BB16F1B + for ; Fri, 4 Oct 2002 11:02:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:02:30 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g940FIK25684 for ; + Fri, 4 Oct 2002 01:15:19 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6CDF1294183; Thu, 3 Oct 2002 17:15:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barry.mail.mindspring.net (barry.mail.mindspring.net + [207.69.200.25]) by xent.com (Postfix) with ESMTP id 3094B29409C for + ; Thu, 3 Oct 2002 17:14:47 -0700 (PDT) +Received: from user-119ac86.biz.mindspring.com ([66.149.49.6]) by + barry.mail.mindspring.net with esmtp (Exim 3.33 #1) id 17xG7I-0005TS-00; + Thu, 03 Oct 2002 20:14:52 -0400 +MIME-Version: 1.0 +X-Sender: rahettinga@pop.earthlink.net +Message-Id: +To: dcsb@ai.mit.edu, cryptography@wasabisystems.com, + mac_crypto@vmeng.com, e$@vmeng.com, fork@xent.com, irregulars@tb.tf +From: "R. A. Hettinga" +Subject: Re: The 3rd Annual Consult Hyperion Digital Identity Forum +Content-Type: text/plain; charset="us-ascii" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 3 Oct 2002 20:13:32 -0400 + + +--- begin forwarded text + + +To: rah@shipwright.com +From: hacker@vudu.net +Date: Thu, 03 Oct 2002 06:01:38 -0700 (PDT) +Subject: Re: The 3rd Annual Consult Hyperion Digital Identity Forum + + + +The guy messed up his own URL. It should be +http://www.digitalidforum.com which redirects to +http://www.consult.hyperion.co.uk/digid3.html + + +"R. A. Hettinga" wrote: +> +> Dear All, +> +> See www.digitalidentityforum.com for more details. Speakers +include +> Microsoft and Liberty Alliance, UK central and local government, +> law +> enforcement, financial services (Egg and RBS/NatWest), EC +Research +> Centre, a +> psychologist and others. Look forward to seeing you there. +> +> Regards, +> Dave Birch. +> +> -- +> -- David Birch, Director, Consult Hyperion +> -- +> -- tel +44 (0)1483 301793, fax +44 (0)1483 561657 +> -- mail dave@chyp.com, web http://www.chyp.com +> -- +> -- See you at the 2nd Annual Digital Transactions Forum in +> Singapore +> -- October 16th/17th 2002, see +> http://www.digitaltransactionsforum.com/ +> +> --- end forwarded text +> +> +> -- +> ----------------- +> R. A. Hettinga <mailto: rah@ibuc.com> +> The Internet Bearer Underwriting Corporation <http://www.ibuc.com/>; +> 44 Farquhar Street, Boston, MA 02131 USA +> "... however it may deserve respect for its usefulness and +> antiquity, +> [predicting the end of the world] has not been found agreeable to +> experience." -- Edward Gibbon, 'Decline and Fall of the +Roman +> Empire' +> +> For help on using this list (especially unsubscribing), send a +> message to +> "dcsb-request@reservoir.com" with one line of text: +"help". + +--- end forwarded text + + +-- +----------------- +R. A. Hettinga +The Internet Bearer Underwriting Corporation +44 Farquhar Street, Boston, MA 02131 USA +"... however it may deserve respect for its usefulness and antiquity, +[predicting the end of the world] has not been found agreeable to +experience." -- Edward Gibbon, 'Decline and Fall of the Roman Empire' + + diff --git a/Ch3/datasets/spam/easy_ham/00877.fb94c382f9f10548db78b9d0339621e7 b/Ch3/datasets/spam/easy_ham/00877.fb94c382f9f10548db78b9d0339621e7 new file mode 100644 index 000000000..81ebcf43f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00877.fb94c382f9f10548db78b9d0339621e7 @@ -0,0 +1,67 @@ +From fork-admin@xent.com Fri Oct 4 11:03:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A06BE16F1E + for ; Fri, 4 Oct 2002 11:02:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:02:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g941xIK30251 for ; + Fri, 4 Oct 2002 02:59:18 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AB1352940C9; Thu, 3 Oct 2002 18:59:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp1.superb.net (smtp1.superb.net [207.228.225.14]) by + xent.com (Postfix) with SMTP id 24D1A29409C for ; + Thu, 3 Oct 2002 18:58:44 -0700 (PDT) +Received: (qmail 31048 invoked from network); 4 Oct 2002 01:58:59 -0000 +Received: from unknown (HELO maya.dyndns.org) (207.61.5.143) by + smtp1.superb.net with SMTP; 4 Oct 2002 01:58:59 -0000 +Received: by maya.dyndns.org (Postfix, from userid 501) id DD64C1B62C; + Thu, 3 Oct 2002 21:58:55 -0400 (EDT) +To: "Stephen D. Williams" +Cc: fork@spamassassin.taint.org +Subject: Re: Living Love - Another legacy of the 60's +References: <3D9CB788.6050602@lig.net> +From: Gary Lawrence Murphy +X-Home-Page: http://www.teledyn.com +Organization: TCI Business Innovation through Open Source Computing +Message-Id: +Reply-To: Gary Lawrence Murphy +X-Url: http://www.teledyn.com/ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 03 Oct 2002 21:58:55 -0400 + +>>>>> "S" == Stephen D Williams writes: + + S> The purpose of our lives is to be free of all addictive traps, + S> and thus become one with the ocean of Living Love. + +"One choice is a psychosis. Two, a neurosis" -- Ven Joan Shikai +Woodward, Northern Mountain Order of the White Wind Zen Community + +just a thought. + +(oh, yes, the bits: Women in Zen - http://lhamo.tripod.com/2zen.htm) + +-- +Gary Lawrence Murphy - garym@teledyn.com - TeleDynamics Communications + - blog: http://www.auracom.com/~teledyn - biz: http://teledyn.com/ - + "Computers are useless. They can only give you answers." (Picasso) + + diff --git a/Ch3/datasets/spam/easy_ham/00878.23aea042030421f155edaf41a36b3701 b/Ch3/datasets/spam/easy_ham/00878.23aea042030421f155edaf41a36b3701 new file mode 100644 index 000000000..b5ff69be4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00878.23aea042030421f155edaf41a36b3701 @@ -0,0 +1,115 @@ +From fork-admin@xent.com Fri Oct 4 11:03:47 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 38C9F16F1A + for ; Fri, 4 Oct 2002 11:02:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:02:28 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g93LQFK15644 for ; + Thu, 3 Oct 2002 22:26:16 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9F14329417E; Thu, 3 Oct 2002 14:26:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.lig.net (unknown [204.248.145.126]) by xent.com + (Postfix) with ESMTP id DF9BF29409C for ; Thu, + 3 Oct 2002 14:25:42 -0700 (PDT) +Received: from lig.net (unknown [66.95.227.18]) by mail.lig.net (Postfix) + with ESMTP id 2D8186A131; Thu, 3 Oct 2002 17:27:10 -0400 (EDT) +Message-Id: <3D9CB788.6050602@lig.net> +From: "Stephen D. Williams" +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0.1) + Gecko/20020823 Netscape/7.0 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Living Love - Another legacy of the 60's +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 03 Oct 2002 17:32:56 -0400 + +Normally, I disdain any kind of mysticism, even when it is associated +with fairly good ideas. Just a big turnoff. A good example would be +the difference between Yoga/TM and the more scientifically pure, but +related, relaxation techniques including "betagenics", +hypnosis/auto-hypnosis, etc. (This was one of the many topics I +obsessively absorbed as a teenager.) Or Tai Chi etc. vs. Tai Bo / +G-Force Dyno-Staff. + +I have to say however that, having found this while looking for +something completely unrelated, it has some cute truisms. I +particularly like their addiction to non-addiction. Additionally, the +Mindprod treehugger site has some interesting quotes, etc. + +To my internal ear, nearly all of these 60's based new-age vernacular +seem to assume that you are a simple child (of the 60's?) who needs some +religion-like couching of ideas to relate and internalize. Very +irritating, but taken in small doses it's interesting to compare and +contrast with our (my) modern mental models. + +I found that a few of the principles could be used to explain and +justify US/UN foreign policy and actions. + +http://mindprod.com/methods.html +http://members.aol.com/inossence/Kenkey.html +http://www.mindprod.com/ +(Apologies for the embedded HTML.) + +We create the world we live in. +A loving person lives in a loving world, +A hostile person lives in a hostile world. +Everyone you meet is your mirror. + +You make yourself and others suffer just as much when you take offence +as when you give offence. To be upset over what you don't have is to +waste what you do have. + +The past is dead, +The future is imaginary, +Happiness can only be +in the Eternal Now Moment + +How soon will you realize that the only thing you don't have is the +direct experience that there's nothing you need that you don't have. + +Love a person because he or she is there. +This is the only reason. + +Happiness happens when your consciousness is not dominated by addictions +and demands~ and you experience life as a parade of preferences. + +The +purpose +of our lives +is to be free +of all addictive traps, +and thus +become one +with the ocean of +Living Love. + + +sdw + +-- +sdw@lig.net http://sdw.st +Stephen D. Williams 43392 Wayside Cir,Ashburn,VA 20147-4622 +703-724-0118W 703-995-0407Fax Dec2001 + + + + diff --git a/Ch3/datasets/spam/easy_ham/00879.798415ecafdee535a11c68481f5d66b2 b/Ch3/datasets/spam/easy_ham/00879.798415ecafdee535a11c68481f5d66b2 new file mode 100644 index 000000000..1e37f2fc3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00879.798415ecafdee535a11c68481f5d66b2 @@ -0,0 +1,153 @@ +From fork-admin@xent.com Fri Oct 4 11:04:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2165516F21 + for ; Fri, 4 Oct 2002 11:02:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:02:37 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g943TNK01286 for ; + Fri, 4 Oct 2002 04:29:24 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 219F8294195; Thu, 3 Oct 2002 20:26:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 2A7CD294192 for ; + Thu, 3 Oct 2002 20:25:11 -0700 (PDT) +Received: from adsl-17-226-227.jax.bellsouth.net ([68.17.226.227] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17xJ8v-0006Ml-00; Thu, 03 Oct 2002 23:28:46 -0400 +From: "Geege Schuman" +To: "Stephen D. Williams" , +Subject: RE: Living Love - Another legacy of the 60's +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +In-Reply-To: <3D9CB788.6050602@lig.net> +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 3 Oct 2002 23:24:15 -0400 + +draw the pain + +"Ken never wrote about this method, but he often demonstrated it in +workshops. Let us say you have a physical pain somewhere in your body. You +draw the pain in the air with your finger, about 30 cm (1 foot) high. Take +about 60 seconds to trace around the perimeter of the pain, carefully +listening to the pain to find the precise boundary between where it hurts +and where it does not. Repeat. You will find that after about 10 minutes of +this the pain will shift, shrink or disappear. A variant of this is to +imagine making a 3D model the pain in coloured clay." + +Works! There's this coworker - a real pain in my ass! I used my middle +finger to trace his outline for about 60 seconds. I listened to him, found +the boundary, and repeated the motion. He left my office! + + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +Stephen D. Williams +Sent: Thursday, October 03, 2002 5:33 PM +To: fork@spamassassin.taint.org +Subject: Living Love - Another legacy of the 60's + + +Normally, I disdain any kind of mysticism, even when it is associated +with fairly good ideas. Just a big turnoff. A good example would be +the difference between Yoga/TM and the more scientifically pure, but +related, relaxation techniques including "betagenics", +hypnosis/auto-hypnosis, etc. (This was one of the many topics I +obsessively absorbed as a teenager.) Or Tai Chi etc. vs. Tai Bo / +G-Force Dyno-Staff. + +I have to say however that, having found this while looking for +something completely unrelated, it has some cute truisms. I +particularly like their addiction to non-addiction. Additionally, the +Mindprod treehugger site has some interesting quotes, etc. + +To my internal ear, nearly all of these 60's based new-age vernacular +seem to assume that you are a simple child (of the 60's?) who needs some +religion-like couching of ideas to relate and internalize. Very +irritating, but taken in small doses it's interesting to compare and +contrast with our (my) modern mental models. + +I found that a few of the principles could be used to explain and +justify US/UN foreign policy and actions. + +http://mindprod.com/methods.html +http://members.aol.com/inossence/Kenkey.html +http://www.mindprod.com/ +(Apologies for the embedded HTML.) + +We create the world we live in. +A loving person lives in a loving world, +A hostile person lives in a hostile world. +Everyone you meet is your mirror. + +You make yourself and others suffer just as much when you take offence +as when you give offence. To be upset over what you don't have is to +waste what you do have. + +The past is dead, +The future is imaginary, +Happiness can only be +in the Eternal Now Moment + +How soon will you realize that the only thing you don't have is the +direct experience that there's nothing you need that you don't have. + +Love a person because he or she is there. +This is the only reason. + +Happiness happens when your consciousness is not dominated by addictions +and demands~ and you experience life as a parade of preferences. + +The +purpose +of our lives +is to be free +of all addictive traps, +and thus +become one +with the ocean of +Living Love. + + +sdw + +-- +sdw@lig.net http://sdw.st +Stephen D. Williams 43392 Wayside Cir,Ashburn,VA 20147-4622 +703-724-0118W 703-995-0407Fax Dec2001 + + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00880.146f15b727deb84e2459cecd3fd67088 b/Ch3/datasets/spam/easy_ham/00880.146f15b727deb84e2459cecd3fd67088 new file mode 100644 index 000000000..420dfe935 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00880.146f15b727deb84e2459cecd3fd67088 @@ -0,0 +1,60 @@ +From fork-admin@xent.com Fri Oct 4 11:04:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4EB7316F22 + for ; Fri, 4 Oct 2002 11:02:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:02:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g946aHK06807 for ; + Fri, 4 Oct 2002 07:36:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8ACA629418C; Thu, 3 Oct 2002 23:36:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from realsoftware.com (mail.realsoftware.com [209.198.132.126]) + by xent.com (Postfix) with ESMTP id 5B7B029409C for ; + Thu, 3 Oct 2002 23:35:11 -0700 (PDT) +Received: from [10.0.1.22] (66.68.99.248) by realsoftware.com with ESMTP + (Eudora Internet Mail Server 3.1.3); Fri, 4 Oct 2002 01:35:23 -0500 +User-Agent: Microsoft-Entourage/10.1.1.2418 +Subject: Re: ActiveBuddy +From: Lorin Rivers +To: "Mr. FoRK" , FoRK List +Message-Id: +In-Reply-To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 03 Oct 2002 23:51:46 -0500 + +On 10/2/02 12:00 PM, "Mr. FoRK" wrote: +> What about a situation where you don't directly ask/talk to the bot, but +> they listen in and advise/correct/interject/etc? +> example: two people discussing trips, etc. may trigger a weather bot to +> mention what the forecast says - without directly being asked. + +My guess is it's more insidious than that, it's going to be ActiveSpam. + +"Oh, you're going to Seattle? I can get you airline tickets for less" + +Yuck +-- +peregrine \PEH-ruh-grun or PEH-ruh-green\ (adjective) + : having a tendency to wander + + + diff --git a/Ch3/datasets/spam/easy_ham/00881.c1a373126fc964123ffbc018433b21d5 b/Ch3/datasets/spam/easy_ham/00881.c1a373126fc964123ffbc018433b21d5 new file mode 100644 index 000000000..0174e176e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00881.c1a373126fc964123ffbc018433b21d5 @@ -0,0 +1,57 @@ +From fork-admin@xent.com Fri Oct 4 11:03:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F33C516F1F + for ; Fri, 4 Oct 2002 11:02:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:02:34 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g943OHK01155 for ; + Fri, 4 Oct 2002 04:24:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3B0D229418D; Thu, 3 Oct 2002 20:24:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sccrmhc03.attbi.com (sccrmhc03.attbi.com [204.127.202.63]) + by xent.com (Postfix) with ESMTP id 4C5FA29409C for ; + Thu, 3 Oct 2002 20:23:12 -0700 (PDT) +Received: from [24.61.113.164] by sccrmhc03.attbi.com (InterMail + vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20021004032325.JUOB22381.sccrmhc03.attbi.com@[24.61.113.164]> for + ; Fri, 4 Oct 2002 03:23:25 +0000 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <18104609941.20021003232319@magnesium.net> +To: Fork@xent.com +Subject: Blatantly stolen from a friend's LJ +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 3 Oct 2002 23:23:19 -0400 + +Hello Fork, + + http://www.pimprig.com/sections.php?op=viewarticle&artid=72&page=2 + + This kid has -way- WAY too much time on his hands. + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00882.7d2cb3dcfbe9ae110726e656347c0628 b/Ch3/datasets/spam/easy_ham/00882.7d2cb3dcfbe9ae110726e656347c0628 new file mode 100644 index 000000000..94341de67 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00882.7d2cb3dcfbe9ae110726e656347c0628 @@ -0,0 +1,57 @@ +From fork-admin@xent.com Fri Oct 4 18:19:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8D65A16F18 + for ; Fri, 4 Oct 2002 18:19:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 18:19:16 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g94GuOK00540 for ; + Fri, 4 Oct 2002 17:56:25 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4ADEF2940B0; Fri, 4 Oct 2002 09:56:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (f141.law15.hotmail.com [64.4.23.141]) by + xent.com (Postfix) with ESMTP id DA9B729409A for ; + Fri, 4 Oct 2002 09:55:07 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Fri, 4 Oct 2002 09:55:23 -0700 +Received: from 216.30.74.2 by lw15fd.law15.hotmail.msn.com with HTTP; + Fri, 04 Oct 2002 16:55:23 GMT +X-Originating-Ip: [216.30.74.2] +From: "Russell Turpin" +To: fork@spamassassin.taint.org +Subject: Economist: Internet models, viral spread, social diseases +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Message-Id: +X-Originalarrivaltime: 04 Oct 2002 16:55:23.0757 (UTC) FILETIME=[D4CB11D0:01C26BC6] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 04 Oct 2002 16:55:23 +0000 + +Not exactly new bits, but I enjoyed seeing The Economist +pick up on the similarity between computer and social +networks: + +http://www.economist.com/science/displayStory.cfm?story_id=1365118 + + + + +_________________________________________________________________ +Chat with friends online, try MSN Messenger: http://messenger.msn.com + + diff --git a/Ch3/datasets/spam/easy_ham/00883.c44a035e7589e83076b7f1fed8fa97d5 b/Ch3/datasets/spam/easy_ham/00883.c44a035e7589e83076b7f1fed8fa97d5 new file mode 100644 index 000000000..acae75f94 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00883.c44a035e7589e83076b7f1fed8fa97d5 @@ -0,0 +1,125 @@ +From fork-admin@xent.com Fri Oct 4 18:19:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DABDF16F17 + for ; Fri, 4 Oct 2002 18:19:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 18:19:14 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g94G6JK31288 for ; + Fri, 4 Oct 2002 17:06:20 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 70C6C2940A9; Fri, 4 Oct 2002 09:06:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.lig.net (unknown [204.248.145.126]) by xent.com + (Postfix) with ESMTP id 9B5A629409A for ; Fri, + 4 Oct 2002 09:05:16 -0700 (PDT) +Received: from lig.net (unknown [204.248.145.125]) by mail.lig.net + (Postfix) with ESMTP id F2D816A5B1; Fri, 4 Oct 2002 12:06:30 -0400 (EDT) +Message-Id: <6E8631AD.30501@lig.net> +From: "Stephen D. Williams" +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) + Gecko/20020823 Netscape/7.0 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Lorin Rivers +Cc: "Mr. FoRK" , FoRK List +Subject: Re: ActiveBuddy +References: +Content-Type: multipart/alternative; + boundary="------------080209060700030309080805" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 04 Oct 2028 12:05:01 -0400 + + +--------------080209060700030309080805 +Content-Type: text/plain; charset=US-ASCII; format=flowed +Content-Transfer-Encoding: 7bit + +I actually thought of this kind of active chat at AOL (in 1996 I think), +bringing up ads based on what was being discussed and other features. +For a while, the VP of dev. (now still CTO I think) was really hot on +the idea and they discussed patenting it. Then they lost interest. +Probably a good thing. + +sdw + +Lorin Rivers wrote: + +>On 10/2/02 12:00 PM, "Mr. FoRK" wrote: +> +> +>>What about a situation where you don't directly ask/talk to the bot, but +>>they listen in and advise/correct/interject/etc? +>>example: two people discussing trips, etc. may trigger a weather bot to +>>mention what the forecast says - without directly being asked. +>> +>> +> +>My guess is it's more insidious than that, it's going to be ActiveSpam. +> +>"Oh, you're going to Seattle? I can get you airline tickets for less" +> +>Yuck +> +> + + +--------------080209060700030309080805 +Content-Type: text/html; charset=US-ASCII +Content-Transfer-Encoding: 7bit + + + + + + + +I actually thought of this kind of active chat at AOL (in 1996 I think), +bringing up ads based on what was being discussed and other features.  For +a while, the VP of dev. (now still CTO I think) was really hot on the idea +and they discussed patenting it.  Then they lost interest.  Probably a good +thing.
+
+sdw
+
+Lorin Rivers wrote:
+
+
On 10/2/02 12:00 PM, "Mr. FoRK" <fork_list@hotmail.com> wrote:
+  
+
+
What about a situation where you don't directly ask/talk to the bot, but
+they listen in and advise/correct/interject/etc?
+example: two people discussing trips, etc. may trigger a weather bot to
+mention what the forecast says - without directly being asked.
+    
+
+

+My guess is it's more insidious than that, it's going to be ActiveSpam.
+
+"Oh, you're going to Seattle? I can get you airline tickets for less"
+
+Yuck
+  
+
+
+ + + +--------------080209060700030309080805-- + + diff --git a/Ch3/datasets/spam/easy_ham/00884.48ae15dc5f48f6caafa8c235d148782a b/Ch3/datasets/spam/easy_ham/00884.48ae15dc5f48f6caafa8c235d148782a new file mode 100644 index 000000000..f0ece3f8c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00884.48ae15dc5f48f6caafa8c235d148782a @@ -0,0 +1,54 @@ +From fork-admin@xent.com Sat Oct 5 12:38:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 40B6216F03 + for ; Sat, 5 Oct 2002 12:38:43 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 12:38:43 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g94I3NK02589 for ; + Fri, 4 Oct 2002 19:03:23 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1DF052940B3; Fri, 4 Oct 2002 11:03:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from conan.f2.com.au (conan.f2.com.au [203.26.177.24]) by + xent.com (Postfix) with ESMTP id A428B29409A for ; + Fri, 4 Oct 2002 11:02:35 -0700 (PDT) +Received: from localhost.localdomain (fec7.prod.f2.com.au [172.26.24.27]) + by conan.f2.com.au (8.12.3/8.12.3) with ESMTP id g94I2nXP028567 for + ; Sat, 5 Oct 2002 04:02:50 +1000 +Message-Id: <200210041802.g94I2nXP028567@conan.f2.com.au> +To: fork@spamassassin.taint.org +From: Carey +Subject: Headline - Navel gazing wins an Ig Nobel +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 5 Oct 2002 04:02:49 +1000 + +Greetings, + +Carey wants you to know about a story on www.theage.com.au + + +Personal Message: +Ah the Ig Nobels, always worth a read :) If only they had a cat-mood decipherer. ^__^ + +Navel gazing wins an Ig Nobel +By Jay Lindsay
Boston +October 05 2002 + +URL: http://www.theage.com.au/articles/2002/10/04/1033538774048.html + + diff --git a/Ch3/datasets/spam/easy_ham/00885.5923b3938b5b422e7d514cc4bf403316 b/Ch3/datasets/spam/easy_ham/00885.5923b3938b5b422e7d514cc4bf403316 new file mode 100644 index 000000000..70925b4f9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00885.5923b3938b5b422e7d514cc4bf403316 @@ -0,0 +1,103 @@ +From fork-admin@xent.com Sat Oct 5 12:38:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 85C1F16F16 + for ; Sat, 5 Oct 2002 12:38:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 12:38:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g94IKFK03312 for ; + Fri, 4 Oct 2002 19:20:15 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 27F2E2940BF; Fri, 4 Oct 2002 11:20:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm6-16.sba1.netlojix.net + [207.71.222.64]) by xent.com (Postfix) with ESMTP id 7AA5A29409A for + ; Fri, 4 Oct 2002 11:19:36 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id LAA06042; + Fri, 4 Oct 2002 11:28:12 -0700 +Message-Id: <200210041828.LAA06042@maltesecat> +To: fork@spamassassin.taint.org +Subject: Re: no matter where you go +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 04 Oct 2002 11:28:11 -0700 + + +... nor what color your passport? + +More American exceptionalism: + + +> "The United States is the only country in the world to tax its citizens +> on a worldwide basis, irrespective of whether they spend time in the +> country or whether they have assets there," said Philip Marcovici, +> a Zurich-based lawyer with international law firm Baker and Mackenzie. + +and perhaps even irrespective of their +current citizenship: + +> Under current expatriation law, there are wealth thresholds based on +> net worth which lead to a presumption that a person giving up U.S. +> citizenship is doing so for tax reasons. +> +> Individuals who have given up their citizenship and who have earned +> $100,000 in any one of the 10 years before expatriation, or who have a +> net worth exceeding $500,000, would automatically be deemed a so-called +> "taxpatriate." Those persons would be subject to ordinary income tax +> on U.S. source income for 10 years. They would also be subject to +> U.S. estate and gift tax during the 10-year period. + +I suppose it could be much worse; +there could be some twee affinity +program for US citizenship, and a +bank of phone people who only get +paid well if they manage to keep +one from cancelling membership... + +-Dave + +::::::: + +> Last month, Congress proposed a new exit tax on all citizens who give up +> their U.S. status. If the proposal becomes law, individuals will be taxed +> as if they had either sold everything or died. This would give rise to +> immediate exposure to capital gains tax. + +To be fair, would this mean that they'd +also immediately pay out the difference +for anyone whose tax basis was greater +than current estate value? + +::::::: + + +> ... Australian cities overall scored particularly highly in the +> [Economist Intelligence Unit] survey [of desirability for expats], +> with all five the country's urban centres surveyed ranked near the +> top of the table. +> +> Europe was also well represented among the top 10 places. +> +> The top US city, Honolulu, ranked 21st, with Boston, at 28th, the +> highest ranked city on the US mainland. Canada, in contrast, sneaked +> three cities into the top ten. +> +> The UK cities of London, 44th, and Manchester, 50th, gained only a +> mid-table rating, with Port Moresby in Papua New Guinea bottom of +> the list. + + diff --git a/Ch3/datasets/spam/easy_ham/00886.6d792e0aa2cd6975ef5e050f7b0173b5 b/Ch3/datasets/spam/easy_ham/00886.6d792e0aa2cd6975ef5e050f7b0173b5 new file mode 100644 index 000000000..d475a600f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00886.6d792e0aa2cd6975ef5e050f7b0173b5 @@ -0,0 +1,86 @@ +From fork-admin@xent.com Sat Oct 5 12:38:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4FD6D16F03 + for ; Sat, 5 Oct 2002 12:38:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 12:38:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g94J8PK04887 for ; + Fri, 4 Oct 2002 20:08:28 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 4A27F2940B5; Fri, 4 Oct 2002 12:08:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav19.law15.hotmail.com [64.4.22.123]) by + xent.com (Postfix) with ESMTP id EDC8829409A for ; + Fri, 4 Oct 2002 12:07:10 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Fri, 4 Oct 2002 12:07:27 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: +Subject: Documentum Acquires E-Room, Melding Content, Collaboration +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 04 Oct 2002 19:07:27.0088 (UTC) FILETIME=[47776F00:01C26BD9] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 4 Oct 2002 12:12:44 -0700 + + +Don't know much about eRoom - but there is the magic phrase 'collaborate in +real-time'... Groove really has people running scared. Wonder if any users +actually /benefit/ from collaborating in real-time. + + +=== +http://www.internetwk.com/breakingNews/INW20021004S0001 + +Content-management vendor Documentum said late Thursday it plans to acquire +privately held e-Room Technologies in a deal worth about $100 million. + +Documentum will issue approximately 7.7 million shares of its common stock +and pay about $12.6 million in cash for all of the outstanding shares of +eRoom. + +Documentum makes a platform for enterprise-wide content management. ERoom +makes tools for enterprise collaboration. Its customers include Airbus, +Bausch & Lomb, Ford Motor Co., and Sony. + +Documentum announced plans this summer to deliver a new Collaboration +Edition of its content-management suite. ERoom was already integrating its +tools to the Documentum platform, making an acquisition an easy target, +according to Documentum president and CEO Dave DeWalt. + +With the upcoming joint product, customers will be able to collaborate in +real-time via virtual workspaces, sharing schedules, resources, and even +jointly creating content. + +Content creation and management has always been a collaborative task, but +workflow has usually been delivered via a Web browser interface or even +simple e-mail -- and rarely in real-time. + +For now, Documentum will sell the eRoom platform and its own +content-management system through combined sales channels. Further +integration is planned down the line, the companies said. + + + diff --git a/Ch3/datasets/spam/easy_ham/00887.07d5efdf4a700dc6d1a7926e0008e57f b/Ch3/datasets/spam/easy_ham/00887.07d5efdf4a700dc6d1a7926e0008e57f new file mode 100644 index 000000000..c81c67e4a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00887.07d5efdf4a700dc6d1a7926e0008e57f @@ -0,0 +1,69 @@ +From irregulars-admin@tb.tf Sat Oct 5 12:38:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 102BF16F16 + for ; Sat, 5 Oct 2002 12:38:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 12:38:48 +0100 (IST) +Received: from web.tb.tf (route-64-131-126-36.telocity.com + [64.131.126.36]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g94JcjK05789 for ; Fri, 4 Oct 2002 20:38:46 +0100 +Received: from web.tb.tf (localhost.localdomain [127.0.0.1]) by web.tb.tf + (8.11.6/8.11.6) with ESMTP id g94Jm2I26430; Fri, 4 Oct 2002 15:48:03 -0400 +Received: from red.harvee.home (red [192.168.25.1] (may be forged)) by + web.tb.tf (8.11.6/8.11.6) with ESMTP id g94JlKI26420 for + ; Fri, 4 Oct 2002 15:47:21 -0400 +Received: from texas.pobox.com (texas.pobox.com [64.49.223.111]) by + red.harvee.home (8.11.6/8.11.6) with ESMTP id g94JcLD11866 for + ; Fri, 4 Oct 2002 15:38:22 -0400 +Received: from [192.168.0.4] (pc2-woki1-4-cust149.gfd.cable.ntl.com + [62.254.239.149]) by texas.pobox.com (Postfix) with ESMTP id 860AE4535A; + Fri, 4 Oct 2002 15:38:18 -0400 (EDT) +User-Agent: Microsoft-Entourage/10.1.0.2006 +From: "David G.W. Birch" +To: , , + , , + , +Message-Id: +In-Reply-To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +Subject: [IRR] Re: The 3rd Annual Consult Hyperion Digital Identity Forum +Sender: irregulars-admin@tb.tf +Errors-To: irregulars-admin@tb.tf +X-Beenthere: irregulars@tb.tf +X-Mailman-Version: 2.0.6 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: New home of the TBTF Irregulars mailing list +List-Unsubscribe: , + +List-Archive: +Date: Fri, 04 Oct 2002 20:22:59 +0100 + +On 4/10/02 1:13 am, someone e-said: + +> The guy messed up his own URL. It should be +> http://www.digitalidforum.com which redirects to +> http://www.consult.hyperion.co.uk/digid3.html + +I didn't mess it up: I f*cked it up by not paying attention to a +copy-and-paste from something else. + +Next time, I really will leave it to the PR guys. + +Best regards, +Dave Birch. + +_______________________________________________ +Irregulars mailing list +Irregulars@tb.tf +http://tb.tf/mailman/listinfo/irregulars + + diff --git a/Ch3/datasets/spam/easy_ham/00888.b1cc484869abb3e20ae3843f597dc307 b/Ch3/datasets/spam/easy_ham/00888.b1cc484869abb3e20ae3843f597dc307 new file mode 100644 index 000000000..c66752af4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00888.b1cc484869abb3e20ae3843f597dc307 @@ -0,0 +1,102 @@ +From fork-admin@xent.com Sat Oct 5 12:38:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7420E16F03 + for ; Sat, 5 Oct 2002 12:38:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 12:38:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g94JfEK05823 for ; + Fri, 4 Oct 2002 20:41:14 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 8467C2940B8; Fri, 4 Oct 2002 12:41:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from colossus.systems.pipex.net (colossus.systems.pipex.net + [62.241.160.73]) by xent.com (Postfix) with ESMTP id 88BD429409A for + ; Fri, 4 Oct 2002 12:40:46 -0700 (PDT) +Received: from PETER (81-86-177-135.dsl.pipex.com [81.86.177.135]) by + colossus.systems.pipex.net (Postfix) with SMTP id 74FB216000571; + Fri, 4 Oct 2002 20:41:01 +0100 (BST) +Message-Id: <036901c26bdd$f2f03c50$0100a8c0@PETER> +From: "Peter Kilby" +To: +Cc: "Mr. FoRK" +References: +Subject: Re: Documentum Acquires E-Room, Melding Content, Collaboration +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 4 Oct 2002 20:40:51 +0100 + +"Groove really has people running scared" + +....oh shit here comes that Groove thingy, run for your life ;-) +----- Original Message ----- +From: "Mr. FoRK" +To: +Sent: Friday, October 04, 2002 8:12 PM +Subject: Documentum Acquires E-Room, Melding Content, Collaboration + + +> +> Don't know much about eRoom - but there is the magic phrase 'collaborate +in +> real-time'... Groove really has people running scared. Wonder if any users +> actually /benefit/ from collaborating in real-time. +> +> +> === +> http://www.internetwk.com/breakingNews/INW20021004S0001 +> +> Content-management vendor Documentum said late Thursday it plans to +acquire +> privately held e-Room Technologies in a deal worth about $100 million. +> +> Documentum will issue approximately 7.7 million shares of its common stock +> and pay about $12.6 million in cash for all of the outstanding shares of +> eRoom. +> +> Documentum makes a platform for enterprise-wide content management. ERoom +> makes tools for enterprise collaboration. Its customers include Airbus, +> Bausch & Lomb, Ford Motor Co., and Sony. +> +> Documentum announced plans this summer to deliver a new Collaboration +> Edition of its content-management suite. ERoom was already integrating its +> tools to the Documentum platform, making an acquisition an easy target, +> according to Documentum president and CEO Dave DeWalt. +> +> With the upcoming joint product, customers will be able to collaborate in +> real-time via virtual workspaces, sharing schedules, resources, and even +> jointly creating content. +> +> Content creation and management has always been a collaborative task, but +> workflow has usually been delivered via a Web browser interface or even +> simple e-mail -- and rarely in real-time. +> +> For now, Documentum will sell the eRoom platform and its own +> content-management system through combined sales channels. Further +> integration is planned down the line, the companies said. +> +> +> + + + diff --git a/Ch3/datasets/spam/easy_ham/00889.8f1ca88d8dc661c9ffcd25a2104efe7a b/Ch3/datasets/spam/easy_ham/00889.8f1ca88d8dc661c9ffcd25a2104efe7a new file mode 100644 index 000000000..9a287dc8e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00889.8f1ca88d8dc661c9ffcd25a2104efe7a @@ -0,0 +1,71 @@ +From fork-admin@xent.com Sat Oct 5 12:39:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D2FDB16F17 + for ; Sat, 5 Oct 2002 12:38:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 12:38:51 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g94KgLK07889 for ; + Fri, 4 Oct 2002 21:42:25 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 09C8929417A; Fri, 4 Oct 2002 13:42:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.lig.net (unknown [204.248.145.126]) by xent.com + (Postfix) with ESMTP id 5AF2E29409A for ; Fri, + 4 Oct 2002 13:41:21 -0700 (PDT) +Received: from lig.net (unknown [66.95.227.18]) by mail.lig.net (Postfix) + with ESMTP id 9AB216A474 for ; Fri, 4 Oct 2002 16:42:35 + -0400 (EDT) +Message-Id: <3D9DFCF5.9080008@lig.net> +From: "Stephen D. Williams" +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.1) + Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Whither vCard? +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 04 Oct 2002 16:41:25 -0400 + +Does anyone know what happened to vCard support in Netscape 7.0/Mozilla +1.1? + (Not there yet in Mozilla and therefore not in the new mail engine I +presume?) + +Netscape Messenger/Mozilla have LDAP LDIF import/export, but I can't +find vCard or a reference to it anywhere. I like the Netscape/Mozilla +email client. I avoid LookOut for at least two reasons: Windows Only +(my main environment is Linux with 30% on Windows) and security issues. + +Now that LDAP, and the related DSML and DNS SRV record methods, are +becoming more popular, is there a decline of vCard? +Is there a standard emerging to deal with the mismatch in naming between +the two? + +I've brushed with directories in the past, but I'm getting in deep along +with more PKI oriented focus. Any wisdom would be appreciated. In +particular, I'm going to start integrating smart cards into my linux and +Win32 systems and integrating them with Netscape Messenger/Mozilla and +Outlook. + +Thanks +sdw + + + diff --git a/Ch3/datasets/spam/easy_ham/00890.85334af70442efdbf0b83768fb1d2eb3 b/Ch3/datasets/spam/easy_ham/00890.85334af70442efdbf0b83768fb1d2eb3 new file mode 100644 index 000000000..462e4dd99 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00890.85334af70442efdbf0b83768fb1d2eb3 @@ -0,0 +1,86 @@ +From fork-admin@xent.com Sat Oct 5 12:39:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D2B6316F19 + for ; Sat, 5 Oct 2002 12:38:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 12:38:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g951uOK22393 for ; + Sat, 5 Oct 2002 02:56:24 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 338362940F5; Fri, 4 Oct 2002 18:56:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 7E4CE29409A for ; + Fri, 4 Oct 2002 18:55:16 -0700 (PDT) +Received: from adsl-17-226-227.jax.bellsouth.net ([68.17.226.227] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17xeDQ-0008MN-00; Fri, 04 Oct 2002 21:58:48 -0400 +From: "Geege Schuman" +To: "Carey" , +Subject: RE: Headline - Navel gazing wins an Ig Nobel +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +In-Reply-To: <200210041802.g94I2nXP028567@conan.f2.com.au> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 4 Oct 2002 21:54:13 -0400 + +"British scientists were honoured for research that found ostriches became +more amorous with each other when a human was around. In fact, ostriches +eventually started putting the moves on humans." + +this is true of manatees also. you don't want to know. + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of Carey +Sent: Friday, October 04, 2002 2:03 PM +To: fork@spamassassin.taint.org +Subject: Headline - Navel gazing wins an Ig Nobel + + +Greetings, + +Carey wants you to know about a story on www.theage.com.au + + +Personal Message: +Ah the Ig Nobels, always worth a read :) If only they had a cat-mood +decipherer. ^__^ + +Navel gazing wins an Ig Nobel +By Jay Lindsay
Boston +October 05 2002 + +URL: http://www.theage.com.au/articles/2002/10/04/1033538774048.html + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00891.e165e538480dcd42dc62b43b7622ecb3 b/Ch3/datasets/spam/easy_ham/00891.e165e538480dcd42dc62b43b7622ecb3 new file mode 100644 index 000000000..ede8a8b47 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00891.e165e538480dcd42dc62b43b7622ecb3 @@ -0,0 +1,71 @@ +From fork-admin@xent.com Sat Oct 5 12:39:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4759016F1A + for ; Sat, 5 Oct 2002 12:38:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 12:38:56 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g952GJK23199 for ; + Sat, 5 Oct 2002 03:16:19 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1DF0B294182; Fri, 4 Oct 2002 19:16:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id 20F0F294180 for + ; Fri, 4 Oct 2002 19:15:48 -0700 (PDT) +Received: from [192.168.123.198] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17xeLP-0000si-00; Fri, 04 Oct 2002 23:07:03 -0300 +Message-Id: <3D9E493F.1070501@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) + Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Geege Schuman +Cc: Carey , fork@spamassassin.taint.org +Subject: Re: Headline - Navel gazing wins an Ig Nobel +References: +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 04 Oct 2002 23:06:55 -0300 + +Geege Schuman wrote: + +>"British scientists were honoured for research that found ostriches became +>more amorous with each other when a human was around. In fact, ostriches +>eventually started putting the moves on humans." +> +>this is true of manatees also. you don't want to know. +> +> +> +So how much of it is due to jumping the inter-species boundary for +STATUS - i.e. I can fuck any of several +reasonable candidates from my own species, or I can be ambitious, and +go after the authority figure in the room. +The alternative hypothesis is that its due to novelty, and then of +course, there's the "they'll fuck anything given +appropriate conditions." Hmmm, is this a potential intelligence test, +seeing as the last is a particularily human response? + +Owen + + + + diff --git a/Ch3/datasets/spam/easy_ham/00892.9dc7dadb7e1258d9d1256673f2ae741c b/Ch3/datasets/spam/easy_ham/00892.9dc7dadb7e1258d9d1256673f2ae741c new file mode 100644 index 000000000..6c68fa9e5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00892.9dc7dadb7e1258d9d1256673f2ae741c @@ -0,0 +1,105 @@ +From fork-admin@xent.com Sat Oct 5 12:39:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6C45F16F18 + for ; Sat, 5 Oct 2002 12:38:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 12:38:53 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g94N1LK13169 for ; + Sat, 5 Oct 2002 00:01:21 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6C2912940A0; Fri, 4 Oct 2002 16:01:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.endeavors.com (unknown [66.161.8.83]) by xent.com + (Postfix) with ESMTP id A3D0F29409A for ; Fri, + 4 Oct 2002 16:00:03 -0700 (PDT) +Received: from endeavors.com ([66.161.8.83] RDNS failed) by + mail.endeavors.com with Microsoft SMTPSVC(5.0.2195.5329); Fri, + 4 Oct 2002 15:58:08 -0700 +Message-Id: <3D9E1CFE.6020405@endeavors.com> +From: Gregory Alan Bolcer +Organization: Endeavors Technology, Inc. +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.1) + Gecko/20020823 Netscape/7.0 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Re: Economist: Internet models, viral spread, social diseases +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Originalarrivaltime: 04 Oct 2002 22:58:08.0608 (UTC) FILETIME=[81A7C600:01C26BF9] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 04 Oct 2002 15:58:06 -0700 + +The structure of the Internet has never +been about where the ditches and ruts +are dug although the world needs +ditch diggers too. + +It's a simple inductive concept: +You are you and see the world as such, +You plus 1 degree of separation is a new you. + +All this stuff about scale-free Internets, viruses, +sex, and money is silly. Scale-free statistically +indistinguishable models really means Internet-Scale +as rediscovered by social networks people. + +> Research has shown that the network of human sexual partners + > seems to be scale-free, too + +I tend to prefer the Harvard Business Review +to the Economist as they tend to spend less +time writing about who's sleeping with whom and +come up with real statistical models. + +Greg + +Lies, Damn lies, and statistics. + + +Russell Turpin wrote: +> Not exactly new bits, but I enjoyed seeing The Economist +> pick up on the similarity between computer and social +> networks: +> +> http://www.economist.com/science/displayStory.cfm?story_id=1365118 +> +> +> +> +> _________________________________________________________________ +> Chat with friends online, try MSN Messenger: http://messenger.msn.com +> +> + + +-- +Gregory Alan Bolcer, CTO | work: +1.949.833.2800 +gbolcer at endeavors.com | http://endeavors.com +Endeavors Technology, Inc.| cell: +1.714.928.5476 + + + + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00893.6edf02e68e0e172b2142e5a75d467057 b/Ch3/datasets/spam/easy_ham/00893.6edf02e68e0e172b2142e5a75d467057 new file mode 100644 index 000000000..26d34ee2a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00893.6edf02e68e0e172b2142e5a75d467057 @@ -0,0 +1,360 @@ +From fork-admin@xent.com Sat Oct 5 17:22:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6DB7B16F16 + for ; Sat, 5 Oct 2002 17:22:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 17:22:16 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g95E6SK11973 for ; + Sat, 5 Oct 2002 15:06:30 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 246ED29418A; Sat, 5 Oct 2002 07:06:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mta5.snfc21.pbi.net (mta5.snfc21.pbi.net [206.13.28.241]) + by xent.com (Postfix) with ESMTP id 4673F29409A for ; + Sat, 5 Oct 2002 07:05:41 -0700 (PDT) +Received: from endeavors.com ([66.126.120.174]) by mta5.snfc21.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H3I00GDEHTZ6T@mta5.snfc21.pbi.net> for fork@xent.com; Sat, + 05 Oct 2002 07:06:00 -0700 (PDT) +From: Gregory Alan Bolcer +Subject: Re: Apple Sauced...again +Cc: fork@spamassassin.taint.org +Reply-To: gbolcer@endeavors.com +Message-Id: <3D9EEF77.CBAE56C@endeavors.com> +Organization: Endeavors Technology, Inc. +MIME-Version: 1.0 +X-Mailer: Mozilla 4.79 [en] (X11; U; IRIX 6.5 IP32) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en, pdf +References: + <200210022317.13639.eh@mad.scientist.com> + +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 05 Oct 2002 06:56:07 -0700 + +Gary Lawrence Murphy wrote: +> R. Buckminster Fuller +> +> "It was only /after/ I'd completed the geodesic dome that I noticed it +> was beautiful" --- R. Buckminster Fuller + + +I had cited the information theoretic concept of "elegance" +in my dissertation & did a Google to find the reference and instead +found a really great tech report for UoT Knoxville by Bruce +MacLennan. He cites Efficiency, Economy, and Elegance, but +I think he's wrong. The middle E should be Effectiveness. +Otherwise kudos. + + +Efficiency is the relation of output to input effectiveness is +the total output. In information theory, something is both elegant +and efficient if no smaller or less costly something can product the +same output in the same amount of time. + +Greg + +[1] http://www.cs.utk.edu/~mclennan/anon-ftp/Elegance.html + +``Who Cares About Elegance?'' + + The Role of Aesthetics in Programming Language Design + + Technical Report UT-CS-97-344 + + Bruce J. MacLennan + + Computer Science Department + University of Tennessee, Knoxville + MacLennan@cs.utk.edu + +Abstract + +The crucial role played by aesthetics in programming language design and the importance of elegance in +programming languages are defended on the basis of analogies with structural engineering, as presented in +Billington's The Tower and the Bridge. + +This report may be used for any nonprofit purpose provided that its source is acknowledged. It will be adapted +for +inclusion in the third edition of my Principles of Programming Languages. + + + 1.The Value of Analogies + 2.Efficiency Seeks to Minimize Resources Used + 3.Economy Seeks to Maximize Benefit versus Cost + 4.Elegance Symbolizes Good Design + 1.For the Designer + 2.For the User + 5.The Programming Language as Work Environment + 6.Acquiring a Sense of Elegance + 7.References + + + +The Value of Analogies + +Programming language design is a comparatively new activity - it has existed for less than half a century, so +it is +often worthwhile to look to older design disciplines to understand better this new activity. Thus, my book +Principles of Programming Languages: Design, Evaluation, and Implementation, grew out of a study of teaching +methods in architecture, primarily, but also of pedagogy in other disciplines, such as aircraft design. +Perhaps you +have also seen analogies drawn between programming languages and cars (FORTRAN = Model T, C = dune +buggy, etc.). + +These analogies can be very informative, and can serve as ``intuition pumps'' to enhance our creativity, but +they +cannot be used uncritically because they are, in the end, just analogies. Ultimately our design decisions must +be +based on more than analogies, since analogies can be misleading as well as informative. + +In this essay I'll address the role of aesthetics in programming language design, but I will base my remarks +on a +book about structural engineering, The Tower and the Bridge, by David P. Billington. Although there are many +differences between bridges and programming languages, we will find that many ideas and insights transfer +rather +directly. + +According to Billington, there are three values common to many technological activities, which we can call +``the +three E's'': Efficiency, Economy and Elegance. These values correspond to three dimensions of technology, +which +Billington calls the scientific, social and symbolic dimensions (the three S's). We will consider each in +turn. + + +Efficiency Seeks to Minimize Resources Used + +In structural engineering, efficiency deals with the amount of material used; the basic criterion is safety +and the +issues are scientific (strength of materials, disposition of forces, etc.). Similarly, in programming language +design, +efficiency is a scientific question dealing with the use of resources. There are many examples where +efficiency +considerations influenced programming language design (some are reviewed in my Principles of Programming +Languages). In the early days, the resources to be minimized were often runtime memory usage and processing +time, although compile-time resource utilization was also relevant. In other cases the resource economized was +programmer typing time, and there are well-known cases in which this compromised safety (e.g. FORTRAN's +implicit declarations). There are also many well-known cases in which security (i.e. safety) was sacrificed +for the +sake of efficiency by neglecting runtime error checking (e.g. array bounds checking). + +Efficiency issues often can be quantified in terms of computer memory or time, but we must be careful that we +are +not comparing apples and oranges. Compile time is not interchangeable run time, and neither one is the same as +programmer time. Similarly, computer memory cannot be traded off against computer time unless both are +reduced to a common denominator, such as money, but this brings in economic considerations, to which we now +turn. + + +Economy Seeks to Maximize Benefit versus Cost + +Whereas efficiency is a scientific issue, economy is a social issue. In structural engineering, economy seeks +to +maximize social benefit compared to its cost. (This is especially appropriate since structures like bridges +are +usually built at public expense for the benefit of the public.) In programming language design, the ``public'' +that +must be satisfied is the programming community that will use the language and the institutions for which these +programmers work. + +Economic tradeoffs are hard to make because economic values change and are difficult to predict. For example, +the shift from first to second generation programming languages was largely a result of a decrease in the cost +of +computer time compared to programmer time, the shift from the second to the third generation involved the +increasing cost of residual bugs in programs, and the fourth generation reflected the increasing cost of +program +maintenance compared to program development. + +Other social factors involved in the success or failure of a programming language include: whether major +manufacturers support the language, whether prestigious universities teach it, whether it is approved in some +way +by influential organizations (such as the US Department of Defense), whether it has been standardized, whether +it +comes to be perceived as a ``real'' language (used by ``real programmers'') or as a ``toy'' language (used by +novices +or dilettantes), and so forth. As can be seen from the historical remarks in my Principles, social factors are +frequently more important than scientific factors in determining the success or failure of a programming +language. + +Often economic issues can be quantified in terms of money, but the monetary values of costs and benefits are +often +unstable and unpredictable because they depend on changing market forces. Also, many social issues, from +dissatisfaction with poorly designed software to human misery resulting from system failures, are inaccurately +represented by the single dimension of monetary cost. All kinds of ``cost'' and ``benefit'' must be considered +in +seeking an economical design. + + +Elegance Symbolizes Good Design + +``Elegance? Who cares about elegance?'' snorts the hard-nosed engineer, but Billington shows clearly the +critical +role of elegance in ``hard-nosed'' engineering. + +For the Designer + +It is well-known that feature interaction poses a serious problem for language designers because of the +difficulty +of analyzing all the possible interactions of features in a language (see my Principles for examples). +Structural +engineers face similar problems of analytic complexity, but Billington observes that the best designers don't +make +extensive use of computer models and calculation. + +One reason is that mathematical analysis is always incomplete. The engineer must make a decision about which +variables are significant and which are not, and an analysis may lead to incorrect conclusions if this +decision is not +made well. Also, equations are often simplified (e.g., made linear) to make their analysis feasible, and this +is +another potential source of error. Because of these limitations, engineers that depend on mathematical +analysis +may overdesign a structure to compensate for unforeseen effects left out of the analysis. Thus the price of +safety is +additional material and increased cost (i.e. decreased efficiency and economy). + +Similarly in programming language design, the limitations of the analytic approach often force us to make a +choice between an under-engineered design, in which we run the risk of unanticipated interactions, and an +over-engineered design, in which we have confidence, but which is inefficient or uneconomical. + +Many people have seen the famous film of the collapse in 1940 of the four-month-old Tacoma Narrows bridge; it +vibrated itself to pieces in a storm because aerodynamical stability had not been considered in its design. +Billington explains that this accident, along with a number of less dramatic bridge failures, was a +consequence of +an increasing use of theoretical analyses that began in the 1920s. However, the very problem that destroyed +the +Tacoma Narrows bridge had been anticipated and avoided a century before by bridge designers who were guided +by aesthetic principles. + +According to Billington, the best structural engineers do not rely on mathematical analysis (although they do +not +abandon it altogether). Rather, their design activity is guided by a sense of elegance. This is because +solutions to +structural engineering problems are usually greatly underdetermined, that is, there are many possible +solutions to a +particular problem, such as bridging a particular river. Therefore, expert designers restrict their attention +to +designs in which the interaction of the forces is easy to see. The design looks unbalanced if the forces are +unbalanced, and the design looks stable if it is stable. + +The general principle is that designs that look good will also be good, and therefore the design process can +be +guided by aesthetics without extensive (but incomplete) mathematical analysis. Billington expresses this idea +by +inverting the old architectural maxim and asserting that, in structural design, function follows form. He adds +(p. +21), ``When the form is well chosen, its analysis becomes astoundingly simple.'' In other words, the choice of +form is open and free, so we should pick forms where elegant design expresses good design (i.e. efficient and +economical design). If we do so, then we can let aesthetics guide design. + +The same applies to programming language design. By restricting our attention to designs in which the +interaction +of features is manifest - in which good interactions look good, and bad interactions look bad - we can let our +aesthetic sense guide our design and we can be much more confident that we have a good design, without having +to +check all the possible interactions. + +For the User + +In this case, what's good for the designer also is good for the user. Nobody is comfortable crossing a bridge +that +looks like it will collapse at any moment, and nobody is comfortable using a programming language in which +features may ``explode'' if combined in the wrong way. The manifest balance of forces in a well-designed +bridge +gives us confidence when we cross it. So also, the manifestly good design of our programming language should +reinforce our confidence when we program in it, because we have (well-justified) confidence in the +consequences +of our actions. + +We accomplish little by covering an unbalanced structure in a beautiful facade. When the bridge is unable to +sustain the load for which it was designed, and collapses, it won't much matter that it was beautiful on the +outside. +So also in programming languages. If the elegance is only superficial, that is, if it is not the manifestation +of a +deep coherence in the design, then programmers will quickly see through the illusion and loose their +(unwarranted) +confidence. + +In summary, good designers choose to work in a region of the design space where good designs look good. As a +consequence, these designers can rely on their aesthetic sense, as can the users of the structures (bridges or +programming languages) they design. We may miss out on some good designs this way, but they are of limited +value unless both the designer and the user can be confident that they are good designs. We may summarize the +preceding discussion in a maxim analogous to those in my Principles of Programming Languages: + The Elegance Principle + + Confine your attention to designs that look good because they are good. + + + +The Programming Language as Work Environment + +There are other reasons that elegance is relevant to a well-engineered programming language. The programming +language is something the professional programmer will live with - even live in. It should feel comfortable +and +safe, like a well-designed home or office; in this way it can contribute to the quality of the activities that +take +place within it. Would you work better in an oriental garden or a sweatshop? + +A programming language should be a joy to use. This will encourage its use and decrease the programmer's +fatigue +and frustration. The programming language should not be a hindrance, but should serve more as a collaborator, +encouraging programmers to do their jobs better. As some automobiles are ``driving machines'' and work as a +natural extension of the driver, so a programming language should be a ``programming machine'' by encouraging +the programmer to acquire the smooth competence and seemingly effortless skill of a virtuoso. The programming +language should invite the programmer to design elegant, efficient and economical programs. + +Through its aesthetic dimension a programming language symbolizes many values. For example, in the variety of +its features it may symbolize profligate excess, sparing economy or asceticism; the kind of its features may +represent intellectual sophistication, down-to-earth practicality or ignorant crudeness. Thus a programming +language can promote a set of values. By embodying certain values, it encourages us to think about them; by +neglecting or negating other values, it allows them to recede into the background and out of our attention. +Out of +sight, out of mind. + + +Acquiring a Sense of Elegance + +Aesthetics is notoriously difficult to teach, so you may wonder how you are supposed to acquire that refined +sense +of elegance necessary to good design. Billington observes that this sense is acquired through extensive +experience +in design, which, especially in Europe, is encouraged by a competitive process for choosing bridge designers. +Because of it, structural engineers design many more bridges than they build, and they learn from each +competition they loose by comparing their own designs with those of the winner and other losers. The public +also +critiques the competing designs, and in this way becomes more educated; their sense of elegance develops along +with that of the designers. + +So also, to improve as a programming language designer you should design many languages - design obsessively - +and criticize, revise and discard your designs. You should also evaluate and criticize other people's designs +and try +to improve them. In this way you will acquire the body of experience you will need when the ``real thing'' +comes +along. + + +References + + 1.Billington, David P., The Tower and the Bridge: The New Art of Structural Engineering, Princeton: + Princeton University Press, 1983. Chapters 1 and 6 are the most relevant. + + 2.MacLennan, Bruce J., Principles of Programming Languages: Design, Evaluation, and Implementation, + second edition, New York: Holt, Rinehart & Winston (now Oxford University Press), 1987. + + diff --git a/Ch3/datasets/spam/easy_ham/00894.5b21597d342d44631ebc33acf460883c b/Ch3/datasets/spam/easy_ham/00894.5b21597d342d44631ebc33acf460883c new file mode 100644 index 000000000..bb3d35332 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00894.5b21597d342d44631ebc33acf460883c @@ -0,0 +1,68 @@ +From fork-admin@xent.com Sun Oct 6 22:56:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5C4E816F6D + for ; Sun, 6 Oct 2002 22:54:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:54:39 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g963uMK08866 for ; + Sun, 6 Oct 2002 04:56:23 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 633D729409F; Sat, 5 Oct 2002 20:56:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 0FBAE29409A for ; Sat, + 5 Oct 2002 20:55:44 -0700 (PDT) +Received: (qmail 9260 invoked from network); 6 Oct 2002 03:56:01 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 6 Oct 2002 03:56:01 -0000 +Reply-To: +From: "John Hall" +To: "FoRK" +Subject: Our friends the Palestinians, Our servants in government. +Message-Id: <003001c26cec$49505bc0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 5 Oct 2002 20:56:01 -0700 + + + +Hijacker High (8/30) +Dalal Mughrabi was a Palestinian woman who participated in a 1978 bus +hijacking in which 36 Israelis and an American nature photographer, Gail +Ruban, were killed. Mughrabi has a Palestinian high school named after +her, and it's apparently starting to show signs of wear. Fortunately, +the United States Agency for International Development has stepped in +with money to help renovate it. + +http://reason.com/brickbats/bb-april.shtml + +Links to: + +http://www.cnsnews.com/ViewForeignBureaus.asp?Page=\ForeignBureaus\archi +ve\200208\FOR20020807e.html + +Praeterea censeo Palestininem esse delendam. + + diff --git a/Ch3/datasets/spam/easy_ham/00895.0c7898bdc5199ca3efd6af04c80430d0 b/Ch3/datasets/spam/easy_ham/00895.0c7898bdc5199ca3efd6af04c80430d0 new file mode 100644 index 000000000..03d951e15 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00895.0c7898bdc5199ca3efd6af04c80430d0 @@ -0,0 +1,95 @@ +From fork-admin@xent.com Sun Oct 6 22:56:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3617216F6E + for ; Sun, 6 Oct 2002 22:54:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:54:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g964aHK10100 for ; + Sun, 6 Oct 2002 05:36:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BE1372940AD; Sat, 5 Oct 2002 21:36:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id D238429409A for ; + Sat, 5 Oct 2002 21:35:24 -0700 (PDT) +Received: from adsl-17-226-227.jax.bellsouth.net ([68.17.226.227] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17y38u-0007QB-00; Sun, 06 Oct 2002 00:35:48 -0400 +From: "Geege Schuman" +To: , "FoRK" +Subject: RE: Our friends the Palestinians, Our servants in government. +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +In-Reply-To: <003001c26cec$49505bc0$0200a8c0@JMHALL> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 6 Oct 2002 00:34:38 -0400 + +she read the links. what must it be like, she wondered, to devote ones life +to pointing out neighbors' mistakes, mishaps, inconsistencies and +frailties? + +gloating is definitely underrated in the good book - eh, john? + +bring it on, +gg + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of John +Hall +Sent: Saturday, October 05, 2002 11:56 PM +To: FoRK +Subject: Our friends the Palestinians, Our servants in government. + + + + +Hijacker High (8/30) +Dalal Mughrabi was a Palestinian woman who participated in a 1978 bus +hijacking in which 36 Israelis and an American nature photographer, Gail +Ruban, were killed. Mughrabi has a Palestinian high school named after +her, and it's apparently starting to show signs of wear. Fortunately, +the United States Agency for International Development has stepped in +with money to help renovate it. + +http://reason.com/brickbats/bb-april.shtml + +Links to: + +http://www.cnsnews.com/ViewForeignBureaus.asp?Page=\ForeignBureaus\archi +ve\200208\FOR20020807e.html + +Praeterea censeo Palestininem esse delendam. + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00896.73f4eb6d676530f00ca391dd522034ac b/Ch3/datasets/spam/easy_ham/00896.73f4eb6d676530f00ca391dd522034ac new file mode 100644 index 000000000..8a4ff4952 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00896.73f4eb6d676530f00ca391dd522034ac @@ -0,0 +1,134 @@ +From fork-admin@xent.com Sun Oct 6 22:56:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7F57716F19 + for ; Sun, 6 Oct 2002 22:54:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:54:44 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g967ORK14317 for ; + Sun, 6 Oct 2002 08:24:27 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 595B72940C8; Sun, 6 Oct 2002 00:24:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from axiom.braindust.com (axiom.braindust.com [64.69.71.79]) by + xent.com (Postfix) with ESMTP id 6ADB129409A for ; + Sun, 6 Oct 2002 00:23:45 -0700 (PDT) +X-Envelope-To: +Received: from ianbell.com (194125.aebc.com [209.53.194.125]) + (authenticated (0 bits)) by axiom.braindust.com (8.12.5/8.11.6) with ESMTP + id g967O4GT006034 for ; Sun, 6 Oct 2002 00:24:04 -0700 +Subject: Re: Our friends the Palestinians, Our servants in government. +Content-Type: text/plain; delsp=yes; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v546) +From: Ian Andrew Bell +To: "'FoRK'" +Content-Transfer-Encoding: 7bit +In-Reply-To: <003c01c26cfd$ce23e5e0$0200a8c0@JMHALL> +Message-Id: +X-Mailer: Apple Mail (2.546) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 6 Oct 2002 00:25:36 -0700 + +I propose they rename it "Charlie Heston High" and maybe the students +will learn to take AR-15s with extended military-spec scopes and .223 +high-velocity ammo and start plinking innocent civilians at random in +the suburbs of Washington. That's far more effectual than blowing +oneself up in a bus. + +In America these days, it seems that violence ascribed to any political +doctrine foreign to Bushism is vile and repugnant. But random violence +is entertainment and intrigue. + +A couple of ex-FBI "consultants" speaking on the shootings in DC were +quoted as saying the shooters, presumed to be a pair, were getting a +"heroin-like high" from each successful kill and that they "for +whatever reason decided to level the playing field, thumbing their nose +at law enforcement and society." + +See? Just a couple of kids having fun with Daddy's semi-automatic +hunting rifle. Harmless! + +-Ian. + +On Saturday, October 5, 2002, at 11:01 PM, John Hall wrote: + +> +> It wasn't gloating, it was one for the horror file. +> +> And of course for the Palestinians it wasn't a mistake, which is a key +> part of the horror. +> +> I'm not against American taxpayers remodeling a school honoring a +> killer +> if we do it with a daisy cutter. +> +> +> +>> -----Original Message----- +>> From: Geege Schuman [mailto:geege@barrera.org] +>> Sent: Saturday, October 05, 2002 9:35 PM +>> To: johnhall@evergo.net; FoRK +>> Subject: RE: Our friends the Palestinians, Our servants in government. +>> +>> she read the links. what must it be like, she wondered, to devote ones +>> life +>> to pointing out neighbors' mistakes, mishaps, inconsistencies and +>> frailties? +>> +>> gloating is definitely underrated in the good book - eh, john? +>> +>> bring it on, +>> gg +>> +>> -----Original Message----- +>> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +> John +>> Hall +>> Sent: Saturday, October 05, 2002 11:56 PM +>> To: FoRK +>> Subject: Our friends the Palestinians, Our servants in government. +>> +>> +>> +>> +>> Hijacker High (8/30) +>> Dalal Mughrabi was a Palestinian woman who participated in a 1978 bus +>> hijacking in which 36 Israelis and an American nature photographer, +> Gail +>> Ruban, were killed. Mughrabi has a Palestinian high school named after +>> her, and it's apparently starting to show signs of wear. Fortunately, +>> the United States Agency for International Development has stepped in +>> with money to help renovate it. +>> +>> http://reason.com/brickbats/bb-april.shtml +>> +>> Links to: +>> +>> +> http://www.cnsnews.com/ +> ViewForeignBureaus.asp?Page=\ForeignBureaus\archi +>> ve\200208\FOR20020807e.html +>> +>> Praeterea censeo Palestininem esse delendam. +>> +>> +>> +>> +>> +> + + diff --git a/Ch3/datasets/spam/easy_ham/00897.116b99f81aa0d54498bca28abf4c29ab b/Ch3/datasets/spam/easy_ham/00897.116b99f81aa0d54498bca28abf4c29ab new file mode 100644 index 000000000..801e7f2b9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00897.116b99f81aa0d54498bca28abf4c29ab @@ -0,0 +1,113 @@ +From fork-admin@xent.com Sun Oct 6 22:56:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BC61716F6F + for ; Sun, 6 Oct 2002 22:54:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:54:42 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g9662JK12335 for ; + Sun, 6 Oct 2002 07:02:20 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BCAC62940C5; Sat, 5 Oct 2002 23:02:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 3821C29409A for ; Sat, + 5 Oct 2002 23:01:05 -0700 (PDT) +Received: (qmail 15528 invoked from network); 6 Oct 2002 06:01:25 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 6 Oct 2002 06:01:25 -0000 +Reply-To: +From: "John Hall" +To: "'Geege Schuman'" , "'FoRK'" +Subject: RE: Our friends the Palestinians, Our servants in government. +Message-Id: <003c01c26cfd$ce23e5e0$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sat, 5 Oct 2002 23:01:25 -0700 + + +It wasn't gloating, it was one for the horror file. + +And of course for the Palestinians it wasn't a mistake, which is a key +part of the horror. + +I'm not against American taxpayers remodeling a school honoring a killer +if we do it with a daisy cutter. + + + +> -----Original Message----- +> From: Geege Schuman [mailto:geege@barrera.org] +> Sent: Saturday, October 05, 2002 9:35 PM +> To: johnhall@evergo.net; FoRK +> Subject: RE: Our friends the Palestinians, Our servants in government. +> +> she read the links. what must it be like, she wondered, to devote ones +> life +> to pointing out neighbors' mistakes, mishaps, inconsistencies and +> frailties? +> +> gloating is definitely underrated in the good book - eh, john? +> +> bring it on, +> gg +> +> -----Original Message----- +> From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of +John +> Hall +> Sent: Saturday, October 05, 2002 11:56 PM +> To: FoRK +> Subject: Our friends the Palestinians, Our servants in government. +> +> +> +> +> Hijacker High (8/30) +> Dalal Mughrabi was a Palestinian woman who participated in a 1978 bus +> hijacking in which 36 Israelis and an American nature photographer, +Gail +> Ruban, were killed. Mughrabi has a Palestinian high school named after +> her, and it's apparently starting to show signs of wear. Fortunately, +> the United States Agency for International Development has stepped in +> with money to help renovate it. +> +> http://reason.com/brickbats/bb-april.shtml +> +> Links to: +> +> +http://www.cnsnews.com/ViewForeignBureaus.asp?Page=\ForeignBureaus\archi +> ve\200208\FOR20020807e.html +> +> Praeterea censeo Palestininem esse delendam. +> +> +> +> +> + + + diff --git a/Ch3/datasets/spam/easy_ham/00898.611a5a9738e5905aaff6344c1cdaf32a b/Ch3/datasets/spam/easy_ham/00898.611a5a9738e5905aaff6344c1cdaf32a new file mode 100644 index 000000000..2242515ce --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00898.611a5a9738e5905aaff6344c1cdaf32a @@ -0,0 +1,57 @@ +From fork-admin@xent.com Sun Oct 6 22:57:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A8CDB16F70 + for ; Sun, 6 Oct 2002 22:54:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:54:47 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g96GvOK28498 for ; + Sun, 6 Oct 2002 17:57:24 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 294642940AC; Sun, 6 Oct 2002 09:57:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from hotmail.com (dav55.law15.hotmail.com [64.4.22.63]) by + xent.com (Postfix) with ESMTP id B76A529409A for ; + Sun, 6 Oct 2002 09:56:29 -0700 (PDT) +Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; + Sun, 6 Oct 2002 09:56:52 -0700 +X-Originating-Ip: [207.202.171.254] +From: "Mr. FoRK" +To: "'FoRK'" +References: <003c01c26cfd$ce23e5e0$0200a8c0@JMHALL> +Subject: Re: Our friends the Palestinians, Our servants in government. +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4133.2400 +Message-Id: +X-Originalarrivaltime: 06 Oct 2002 16:56:52.0759 (UTC) FILETIME=[5EAB3270:01C26D59] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 6 Oct 2002 10:02:04 -0700 + + +----- Original Message ----- +From: "John Hall" +> +> I'm not against American taxpayers remodeling a school honoring a killer +> if we do it with a daisy cutter. +With or without occupants? + + diff --git a/Ch3/datasets/spam/easy_ham/00899.d7f9c80cf9bbd1355322a75886903b65 b/Ch3/datasets/spam/easy_ham/00899.d7f9c80cf9bbd1355322a75886903b65 new file mode 100644 index 000000000..899d277a0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00899.d7f9c80cf9bbd1355322a75886903b65 @@ -0,0 +1,66 @@ +From fork-admin@xent.com Sun Oct 6 22:56:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4255716F20 + for ; Sun, 6 Oct 2002 22:54:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:54:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g96DHOK23147 for ; + Sun, 6 Oct 2002 14:17:25 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B24812940BD; Sun, 6 Oct 2002 06:17:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id 9A14629409A for + ; Sun, 6 Oct 2002 06:16:26 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17yB8T-0003iK-00; Sun, 06 Oct 2002 10:07:53 -0300 +Message-Id: <3DA038A5.6080408@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.1) Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: johnhall@evergo.net +Cc: "'Geege Schuman'" , "'FoRK'" +Subject: Re: Our friends the Palestinians, Our servants in government. +References: <003c01c26cfd$ce23e5e0$0200a8c0@JMHALL> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 06 Oct 2002 10:20:37 -0300 + +John Hall wrote: + +>It wasn't gloating, it was one for the horror file. +> +>And of course for the Palestinians it wasn't a mistake, which is a key +>part of the horror. +> +>I'm not against American taxpayers remodeling a school honoring a killer +>if we do it with a daisy cutter. +> +> +> +> +I'm sure the plan is that it will be renamed for the settler who kills +the last Palestinian in a few years. + +Owen + + + diff --git a/Ch3/datasets/spam/easy_ham/00900.04d3fc4b18f2def855155994cd956529 b/Ch3/datasets/spam/easy_ham/00900.04d3fc4b18f2def855155994cd956529 new file mode 100644 index 000000000..3de5b6c5f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00900.04d3fc4b18f2def855155994cd956529 @@ -0,0 +1,92 @@ +From fork-admin@xent.com Sun Oct 6 22:57:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8E08716F03 + for ; Sun, 6 Oct 2002 22:54:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:54:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g96JS2K32212 for ; + Sun, 6 Oct 2002 20:28:03 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 285A12940C6; Sun, 6 Oct 2002 12:26:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 925F72940C3 for ; + Sun, 6 Oct 2002 12:25:21 -0700 (PDT) +Received: from adsl-17-226-227.jax.bellsouth.net ([68.17.226.227] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17yH1x-0003G9-00; Sun, 06 Oct 2002 15:25:33 -0400 +From: "Geege Schuman" +To: "Owen Byrne" , +Cc: "'Geege Schuman'" , "'FoRK'" +Subject: RE: Our friends the Palestinians, Our servants in government. +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +In-Reply-To: <3DA038A5.6080408@permafrost.net> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 6 Oct 2002 15:24:16 -0400 + +see my first line: I READ THE LINKS. brickbats. idiot. + + + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of Owen +Byrne +Sent: Sunday, October 06, 2002 9:21 AM +To: johnhall@evergo.net +Cc: 'Geege Schuman'; 'FoRK' +Subject: Re: Our friends the Palestinians, Our servants in government. + + +John Hall wrote: + +>It wasn't gloating, it was one for the horror file. +> +>And of course for the Palestinians it wasn't a mistake, which is a key +>part of the horror. +> +>I'm not against American taxpayers remodeling a school honoring a killer +>if we do it with a daisy cutter. +> +> +> +> +I'm sure the plan is that it will be renamed for the settler who kills +the last Palestinian in a few years. + +Owen + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00901.dd49a05f9b0b28396c8a91b5b2fb0e2a b/Ch3/datasets/spam/easy_ham/00901.dd49a05f9b0b28396c8a91b5b2fb0e2a new file mode 100644 index 000000000..1345bc7b3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00901.dd49a05f9b0b28396c8a91b5b2fb0e2a @@ -0,0 +1,79 @@ +From fork-admin@xent.com Sun Oct 6 22:57:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2295016F71 + for ; Sun, 6 Oct 2002 22:54:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:54:49 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g96JNOK32161 for ; + Sun, 6 Oct 2002 20:23:25 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E66932940AA; Sun, 6 Oct 2002 12:23:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 5831E29409A for ; Sun, + 6 Oct 2002 12:22:19 -0700 (PDT) +Received: (qmail 20672 invoked from network); 6 Oct 2002 19:22:41 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 6 Oct 2002 19:22:41 -0000 +Reply-To: +From: "John Hall" +To: "'FoRK'" +Subject: RE: Our friends the Palestinians, Our servants in government. +Message-Id: <002601c26d6d$be14c410$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +In-Reply-To: <3DA038A5.6080408@permafrost.net> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 6 Oct 2002 12:22:42 -0700 + +When a settler goes postal and kills some Palestinians they are treated +as a criminal, not celebrated in word and song. + +But you knew that. + +When a Palestinian sets out, to great rejoicing, to attempt to target +children with a homicide-bomb, they are careful to dip the shrapnel in +rat poison. It helps prevent blood clotting in the victims, you see. + +I'm sure all those Jewish homicide-bombers do the same. Oh wait, there +aren't any. + +If the Palestinians are driven completely out, either by expulsion or +death, they will have nobody to blame but themselves. That won't stop +them or you from pretending otherwise. + + +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Owen +> Byrne + + +> I'm sure the plan is that it will be renamed for the settler who kills +> the last Palestinian in a few years. +> +> Owen +> + + + diff --git a/Ch3/datasets/spam/easy_ham/00902.1e45b913616e9e1f42bab6b6f31ea830 b/Ch3/datasets/spam/easy_ham/00902.1e45b913616e9e1f42bab6b6f31ea830 new file mode 100644 index 000000000..3291e8142 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00902.1e45b913616e9e1f42bab6b6f31ea830 @@ -0,0 +1,90 @@ +From fork-admin@xent.com Sun Oct 6 22:57:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6E3E516F73 + for ; Sun, 6 Oct 2002 22:54:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:54:54 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g96LVOK03617 for ; + Sun, 6 Oct 2002 22:31:24 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 58E2C2940C3; Sun, 6 Oct 2002 14:31:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from homer.perfectpresence.com (unknown [209.123.207.194]) by + xent.com (Postfix) with ESMTP id 17E092940C2 for ; + Sun, 6 Oct 2002 14:30:27 -0700 (PDT) +Received: from adsl-17-226-227.jax.bellsouth.net ([68.17.226.227] + helo=regina) by homer.perfectpresence.com with smtp (Exim 3.36 #1) id + 17yIzF-0006lO-00; Sun, 06 Oct 2002 17:30:53 -0400 +From: "Geege Schuman" +To: +Cc: "'FoRK'" +Subject: RE: Our friends the Palestinians, Our servants in government. +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +In-Reply-To: <003c01c26d7b$b82ac190$0200a8c0@JMHALL> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - homer.perfectpresence.com +X-Antiabuse: Original Domain - xent.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - barrera.org +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 6 Oct 2002 17:29:35 -0400 + +when brickbats or fox exposes the folly of government they do so to +accomplish a specific end; dumping truckload after truckload of bad acts +proves their point: stupidity and greed typify government, therefore any +government is too much government. + + + +-----Original Message----- +From: fork-admin@xent.com [mailto:fork-admin@xent.com]On Behalf Of John +Hall +Sent: Sunday, October 06, 2002 5:03 PM +Cc: 'FoRK' +Subject: RE: Our friends the Palestinians, Our servants in government. + + +Yes, you read the links. + +Sorry, but exposing folly is not only humorous but also instructive. It +is only by exposing folly to ridicule that you stop it in the first +place. + +'Brickbats' leans heavily on both, though the item I highlighted was a +'horror' item not a 'gee that is stupid' item. For an example of the +latter, see the city that wanted a woman to pay a ticket for parking in +an UNmarked no-parking space. + +> From: Geege Schuman [mailto:geege@barrera.org] +> +> see my first line: I READ THE LINKS. brickbats. idiot. + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00903.49d4e076baf5a4d6272fa9a4e510dc5b b/Ch3/datasets/spam/easy_ham/00903.49d4e076baf5a4d6272fa9a4e510dc5b new file mode 100644 index 000000000..048b4b3c3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00903.49d4e076baf5a4d6272fa9a4e510dc5b @@ -0,0 +1,65 @@ +From fork-admin@xent.com Sun Oct 6 22:57:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 424A616F72 + for ; Sun, 6 Oct 2002 22:54:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:54:52 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g96L3PK02803 for ; + Sun, 6 Oct 2002 22:03:25 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id BA5F329409E; Sun, 6 Oct 2002 14:03:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id DA55E29409A for ; Sun, + 6 Oct 2002 14:02:21 -0700 (PDT) +Received: (qmail 26059 invoked from network); 6 Oct 2002 21:02:45 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 6 Oct 2002 21:02:45 -0000 +Reply-To: +From: "John Hall" +Cc: "'FoRK'" +Subject: RE: Our friends the Palestinians, Our servants in government. +Message-Id: <003c01c26d7b$b82ac190$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 6 Oct 2002 14:02:45 -0700 + +Yes, you read the links. + +Sorry, but exposing folly is not only humorous but also instructive. It +is only by exposing folly to ridicule that you stop it in the first +place. + +'Brickbats' leans heavily on both, though the item I highlighted was a +'horror' item not a 'gee that is stupid' item. For an example of the +latter, see the city that wanted a woman to pay a ticket for parking in +an UNmarked no-parking space. + +> From: Geege Schuman [mailto:geege@barrera.org] +> +> see my first line: I READ THE LINKS. brickbats. idiot. + + diff --git a/Ch3/datasets/spam/easy_ham/00904.42d2e7951496bc3b1ee4b67185ce2746 b/Ch3/datasets/spam/easy_ham/00904.42d2e7951496bc3b1ee4b67185ce2746 new file mode 100644 index 000000000..e558cebc8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00904.42d2e7951496bc3b1ee4b67185ce2746 @@ -0,0 +1,94 @@ +From fork-admin@xent.com Mon Oct 7 20:37:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9F8FC16F03 + for ; Mon, 7 Oct 2002 20:37:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 20:37:00 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97JKSK13730 for ; + Mon, 7 Oct 2002 20:20:29 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E4C8B2940D2; Mon, 7 Oct 2002 12:20:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from dream.darwin.nasa.gov (betlik.darwin.nasa.gov + [198.123.160.11]) by xent.com (Postfix) with ESMTP id 7975629409A for + ; Mon, 7 Oct 2002 12:19:14 -0700 (PDT) +Received: from cse.ucsc.edu (paperweight.darwin.nasa.gov [198.123.160.27]) + by dream.darwin.nasa.gov ( -- Info omitted by ASANI Solutions, + LLC.) with ESMTP id g97JJdh14958 for ; Mon, 7 Oct 2002 + 12:19:41 -0700 (PDT) +Message-Id: <3DA1DE4B.7080401@cse.ucsc.edu> +From: Elias Sinderson +Reply-To: fork@spamassassin.taint.org +User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:0.9.4.1) + Gecko/20020518 Netscape6/6.2.3 +X-Accept-Language: en-us +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Re: The absurdities of life. +References: <3283394680.20021007145936@magnesium.net> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 07 Oct 2002 12:19:39 -0700 + +I call PacBell/SBC every two or three months about a recurring problem +we have at my house: + +We get a phone bill every month for someone who no longer lives at our +house for a phone line which has been disconnected for over three years +and the account balance is (drum roll please) $0.00! Sometimes the +people I talk to cannot locate the account in their system and tell me +that the phone number doesn't exist. Some people are able to locate the +account but say that it has been disconnected and there is no way we +could get a bill sent to us for that account. Some people can locate the +account and verify that the line has been disconnected for three years +and that the amount owed is $0.00 and then they say somthing along the +lines of "Huh?" or "I'm not sure what's going on... Hold please." And +eventually I have similar conversations with their managers and the +account representatives and billing people and their managers and their +managers' managers ad naseum. + +The outcome of every phone call is that they'll "look into it" and fix +the problem and I might receive one or two more bills depending on when +it's resolved. So I wait a month or two and send the bills back marked +"Not at this address, please fsck off." and then eventually call them +back and go through the whole process again. Lately I just explain to +the phone jockeys that I know it's not their fault and I'm not mad at +them and it's just not their day because I'm about to give them hell. +Then I give them the opportunity to have me yell at their boss which +they seem all too happy to do. + +At least it gives me a positive way to vent my aggressions and it's a +lot cheaper than seeing a therapist. + +Perplexed, +Elias + + +bitbitch@magnesium.net wrote: + +> +>So I get a check from Pac Bell today (SBC as they're called now). +>Turns out, they went to the trouble of printing out, signing, sealing +>and stamping a check just to refund me for a whole $0.33. +> +>[...] +> + + + diff --git a/Ch3/datasets/spam/easy_ham/00905.05268a196c3e0e6464a45e41958a4554 b/Ch3/datasets/spam/easy_ham/00905.05268a196c3e0e6464a45e41958a4554 new file mode 100644 index 000000000..48fd9b600 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00905.05268a196c3e0e6464a45e41958a4554 @@ -0,0 +1,80 @@ +From fork-admin@xent.com Mon Oct 7 20:37:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 290C316F16 + for ; Mon, 7 Oct 2002 20:37:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 20:37:02 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97JOmK13925 for ; + Mon, 7 Oct 2002 20:24:49 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 5AE5E2940D6; Mon, 7 Oct 2002 12:21:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from isolnetsux.techmonkeys.net (isolnetsux.techmonkeys.net + [64.243.46.20]) by xent.com (Postfix) with SMTP id B46D32940D5 for + ; Mon, 7 Oct 2002 12:20:17 -0700 (PDT) +Received: (qmail 28151 invoked by uid 501); 7 Oct 2002 19:20:33 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 7 Oct 2002 19:20:33 -0000 +From: CDale +To: bitbitch@magnesium.net +Cc: fork@spamassassin.taint.org +Subject: Re: The absurdities of life. +In-Reply-To: <3283394680.20021007145936@magnesium.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 7 Oct 2002 14:20:33 -0500 (CDT) + +It was a kick when an apt manager kept mailing me a notice that I owed +them .08. I just waited to see how many times they'd mail me a notice. 7 +times by the time I left and paid them the .08. Funny thing was, I lived +right behind the office where it was mailed from. (: +Cindy + +On Mon, 7 Oct 2002 bitbitch@magnesium.net wrote: + +> +> +> So I get a check from Pac Bell today (SBC as they're called now). +> Turns out, they went to the trouble of printing out, signing, sealing +> and stamping a check just to refund me for a whole $0.33. +> +> They easily spent more than this just getting the materials together. +> Why the hell do companies bother to do this crap? I mean, isn't there +> a bottom line in terms of cost effectiveness? I don't think I missed +> the .33, but I sure as hell would have appreciated lower rates in lieu +> of being returned pennies. +> +> I'm truly stuck on this though. I don't know whether to frame the +> check, burn it, or cash it in. Maybe I should find a way to return to +> sender, so they have to spend -more- money on giving me my .33 dues. +> +> +> Does .33 even buy anything anymore? Funny bit of it, is I couldn't +> even make a phone call these days. +> +> *boggled* +> BB. +> +> + +-- +"I don't take no stocks in mathematics, anyway" --Huckleberry Finn + + diff --git a/Ch3/datasets/spam/easy_ham/00906.bdc0d543b54cc81cf378c33bdfa39d4d b/Ch3/datasets/spam/easy_ham/00906.bdc0d543b54cc81cf378c33bdfa39d4d new file mode 100644 index 000000000..239e5f2d7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00906.bdc0d543b54cc81cf378c33bdfa39d4d @@ -0,0 +1,57 @@ +From fork-admin@xent.com Mon Oct 7 20:37:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7945216F03 + for ; Mon, 7 Oct 2002 20:37:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 20:37:04 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97JQnK13955 for ; + Mon, 7 Oct 2002 20:26:49 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E97FC2940DD; Mon, 7 Oct 2002 12:25:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 580372940DA for ; Mon, + 7 Oct 2002 12:24:54 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 9CAA83ED70; + Mon, 7 Oct 2002 15:30:11 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 9B28D3ED6B; Mon, 7 Oct 2002 15:30:11 -0400 (EDT) +From: Tom +To: bitbitch@magnesium.net +Cc: fork@spamassassin.taint.org +Subject: Re: The absurdities of life. +In-Reply-To: <3283394680.20021007145936@magnesium.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 7 Oct 2002 15:30:11 -0400 (EDT) + +On Mon, 7 Oct 2002 bitbitch@magnesium.net wrote: + +--]I'm truly stuck on this though. I don't know whether to frame the +--]check, burn it, or cash it in. + +I framed my 2$ check from mp3.com. Someone bought the Cd I have up there +some years back and it is my real and actual proof in saying I am a paid +musician. Of course I never cashed the check so techinaly I never did get +paid...but thats another matter alltogther. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00907.647447c8ce096234074b65ea25655a10 b/Ch3/datasets/spam/easy_ham/00907.647447c8ce096234074b65ea25655a10 new file mode 100644 index 000000000..f28c3f9d4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00907.647447c8ce096234074b65ea25655a10 @@ -0,0 +1,71 @@ +From fork-admin@xent.com Mon Oct 7 20:37:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B8B4F16F16 + for ; Mon, 7 Oct 2002 20:37:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 20:37:05 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97JUQK14006 for ; + Mon, 7 Oct 2002 20:30:26 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9D9B02940E1; Mon, 7 Oct 2002 12:27:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from 192.168.1.2 (smtp.piercelaw.edu [216.204.12.219]) by + xent.com (Postfix) with ESMTP id 07B122940E0 for ; + Mon, 7 Oct 2002 12:26:21 -0700 (PDT) +Received: from 192.168.30.220 ([192.168.30.220]) by 192.168.1.2; + Mon, 07 Oct 2002 15:26:20 -0400 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <171284997644.20021007152619@magnesium.net> +To: fork@spamassassin.taint.org +Subject: And yet more absurdity. +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 7 Oct 2002 15:26:19 -0400 + +I knew it'd be a day for insanity. + +so anyway, news.com decided to write up two wonderful articles on the +DMCA and decided to link to decss.exe, the very verboten code that +ended up getting 2600 (but none of the other news services that +originally linked) spanked. + +Slashdot, of course, links to them. + +So now, I link to slashdot. + +http://slashdot.org/articles/02/10/07/1331217.shtml?tid=123 + +I find this all incredibly funny really. Congress _and_ the courts +relaly do need to be considering how laws such as the DMCA are +applied. For the most part, these rules are coming down to whose +friend you happen to be, how nefarious the defendant party is, and how +asleep the judge is behind the case (asleep/self-interested/bought). +Its giving me a real cynical view on being a lawyer, thats for sure. + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00908.0be94e6d9ef62596e0dd488fc4d98b8f b/Ch3/datasets/spam/easy_ham/00908.0be94e6d9ef62596e0dd488fc4d98b8f new file mode 100644 index 000000000..0ac9af8e3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00908.0be94e6d9ef62596e0dd488fc4d98b8f @@ -0,0 +1,96 @@ +From fork-admin@xent.com Mon Oct 7 21:56:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D86A616F18 + for ; Mon, 7 Oct 2002 21:56:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 21:56:13 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97JjsK14541 for ; + Mon, 7 Oct 2002 20:45:55 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 793592940D5; Mon, 7 Oct 2002 12:45:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id 4FCB52940D4 for + ; Mon, 7 Oct 2002 12:44:19 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.36 #1 (Debian)) id + 17ydfa-00074D-00; Mon, 07 Oct 2002 16:35:58 -0300 +Message-Id: <3DA1E514.9080807@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.1) Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Dave Long +Cc: fork@spamassassin.taint.org +Subject: Re: erratum [Re: no matter ...] & errors +References: <200210071841.LAA25074@maltesecat> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 07 Oct 2002 16:48:36 -0300 + +Dave Long wrote: + +>> +>> +>> +>>>"The United States is the only country in the world to tax its citizens +>>>on a worldwide basis, ... +>>> +>>> +> +>I am told this is also true (at least) +>for Australia. I suppose I shouldn't +>rely upon editorial fact-checking. +> +>:::::: +> +> +> +>> If they manage to emulate the process +>>that occurred in Northern Ireland, then maybe in 20 years or so +>>they'll be yelling at each other across the floor of some legislative +>>assembly instead. Label me an optimist. +>> +>> +> +>Since "let's you and him fight" worked +>so remarkably poorly in Ireland, there +>must've been plenty of places it worked +>well for the British to have tried it +>again in Israel. What were they? +> +>-Dave +> +> +I'm not sure what you mean by "let's you and him fight", but it is +important to remember that England was in control of Ireland +for 300 years, and that it was only thanks to the distraction of WW I +that the south managed to gain its independence. If you mean +splitting countries upon arbitrary lines and assigning different groups +to opposite sides of the line, it also seems to have not worked in +India/Pakistan. +I suppose Canada, which is supposed to be a "loose confederation" of 2 +founding nations (French and English) can be cited as a success. The +jury is still out, but so far only a few brief rebellions and +referendums and such, still together after 130+ years. + +Owen + + + diff --git a/Ch3/datasets/spam/easy_ham/00909.777e83e14a0637cb3ffae7b5c8b0e77f b/Ch3/datasets/spam/easy_ham/00909.777e83e14a0637cb3ffae7b5c8b0e77f new file mode 100644 index 000000000..16b389c83 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00909.777e83e14a0637cb3ffae7b5c8b0e77f @@ -0,0 +1,57 @@ +From fork-admin@xent.com Mon Oct 7 21:56:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5A4B316F19 + for ; Mon, 7 Oct 2002 21:56:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 21:56:15 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97KeUK16207 for ; + Mon, 7 Oct 2002 21:40:31 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 97CB52940D7; Mon, 7 Oct 2002 13:40:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id E93522940D3 for ; Mon, + 7 Oct 2002 13:39:44 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 1A2773ED52; + Mon, 7 Oct 2002 16:45:03 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 18AC83EBCC for ; Mon, + 7 Oct 2002 16:45:03 -0400 (EDT) +From: Tom +To: fork@spamassassin.taint.org +Subject: Quick, Outlaw Touching +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 7 Oct 2002 16:45:02 -0400 (EDT) + + +I know I heard of this a few years back but Wired and Slashyrot are both +running stories on 10mbs data transfer via human touch. + +Oh I can see it now, The first bicostal file exchange system that will see +the newsest Offspring tunes distribute by handshake, copulation and +moshpiting. + +http://www.newscientist.com/news/news.jsp?id=ns99992891 +http://www.news.com.au/common/story_page/0,4057,5239758%255E13762,00.html +http://slashdot.org/articles/02/10/07/0238234.shtml?tid=100 + + + diff --git a/Ch3/datasets/spam/easy_ham/00910.ba4833ce4dbc0ae64d1c148cf41aedcf b/Ch3/datasets/spam/easy_ham/00910.ba4833ce4dbc0ae64d1c148cf41aedcf new file mode 100644 index 000000000..7ef2c2cf1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00910.ba4833ce4dbc0ae64d1c148cf41aedcf @@ -0,0 +1,76 @@ +From fork-admin@xent.com Mon Oct 7 21:56:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A5C3F16F1A + for ; Mon, 7 Oct 2002 21:56:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 21:56:16 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97KkXK16440 for ; + Mon, 7 Oct 2002 21:46:33 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 5E6252940E0; Mon, 7 Oct 2002 13:46:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from 192.168.1.2 (smtp.piercelaw.edu [216.204.12.219]) by + xent.com (Postfix) with ESMTP id A446F2940DF for ; + Mon, 7 Oct 2002 13:45:36 -0700 (PDT) +Received: from 192.168.30.220 ([192.168.30.220]) by 192.168.1.2; + Mon, 07 Oct 2002 16:45:43 -0400 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <16289760343.20021007164541@magnesium.net> +To: Tom +Cc: fork@spamassassin.taint.org +Subject: Re: Quick, Outlaw Touching +In-Reply-To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 7 Oct 2002 16:45:41 -0400 + +Hello Tom, + +Monday, October 7, 2002, 4:45:02 PM, you wrote: + + +T> I know I heard of this a few years back but Wired and Slashyrot are both +T> running stories on 10mbs data transfer via human touch. + +T> Oh I can see it now, The first bicostal file exchange system that will see +T> the newsest Offspring tunes distribute by handshake, copulation and +T> moshpiting. + +T> http://www.newscientist.com/news/news.jsp?id=ns99992891 +T> http://www.news.com.au/common/story_page/0,4057,5239758%255E13762,00.html +T> http://slashdot.org/articles/02/10/07/0238234.shtml?tid=100 + + + +Wow. I'm just wondering how the earliest adopter of all new +technologies, the porn market will spin this one... + + "New... Now you can transfer porn while you screw!' Talk about + exchanging energy. + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00911.dcbdde154d9f25c1afe32f4b8f5f1f9b b/Ch3/datasets/spam/easy_ham/00911.dcbdde154d9f25c1afe32f4b8f5f1f9b new file mode 100644 index 000000000..576a286de --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00911.dcbdde154d9f25c1afe32f4b8f5f1f9b @@ -0,0 +1,94 @@ +From fork-admin@xent.com Mon Oct 7 22:40:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 238AF16F03 + for ; Mon, 7 Oct 2002 22:40:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 22:40:45 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97L3ZK16898 for ; + Mon, 7 Oct 2002 22:03:36 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3664D2940D8; Mon, 7 Oct 2002 14:03:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id E8F6D2940A1 for ; Mon, + 7 Oct 2002 14:02:03 -0700 (PDT) +Received: (qmail 10982 invoked from network); 7 Oct 2002 21:02:27 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 7 Oct 2002 21:02:27 -0000 +Reply-To: +From: "John Hall" +To: +Subject: RE: The absurdities of life. +Message-Id: <000001c26e44$d8780150$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +In-Reply-To: <3283394680.20021007145936@magnesium.net> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 7 Oct 2002 14:02:28 -0700 + +They are legally required to do that. I got a similar check because an +insurance company didn't pay a claim quickly enough. It might have been +$.02. + +Although they spent lots more than $.33 to mail you the check, the +alternative seems to be to keep the money. Do you really want companies +to have a financial incentive to over-bill you 'just a bit' so they +could keep it? For a company with millions of customers, $.33/customer +starts adding up. + + + + + + +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +> bitbitch@magnesium.net + +> So I get a check from Pac Bell today (SBC as they're called now). +> Turns out, they went to the trouble of printing out, signing, sealing +> and stamping a check just to refund me for a whole $0.33. +> +> They easily spent more than this just getting the materials together. +> Why the hell do companies bother to do this crap? I mean, isn't there +> a bottom line in terms of cost effectiveness? I don't think I missed +> the .33, but I sure as hell would have appreciated lower rates in lieu +> of being returned pennies. +> +> I'm truly stuck on this though. I don't know whether to frame the +> check, burn it, or cash it in. Maybe I should find a way to return to +> sender, so they have to spend -more- money on giving me my .33 dues. +> +> +> Does .33 even buy anything anymore? Funny bit of it, is I couldn't +> even make a phone call these days. +> +> *boggled* +> BB. +> +> -- +> Best regards, +> bitbitch mailto:bitbitch@magnesium.net + + + diff --git a/Ch3/datasets/spam/easy_ham/00912.f7faf669f2794a54dd91d62e7ac3b904 b/Ch3/datasets/spam/easy_ham/00912.f7faf669f2794a54dd91d62e7ac3b904 new file mode 100644 index 000000000..44e27f761 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00912.f7faf669f2794a54dd91d62e7ac3b904 @@ -0,0 +1,112 @@ +From fork-admin@xent.com Mon Oct 7 22:40:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E520916F17 + for ; Mon, 7 Oct 2002 22:40:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 22:40:46 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97LBtK17261 for ; + Mon, 7 Oct 2002 22:11:57 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 743AF2940DF; Mon, 7 Oct 2002 14:11:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from 192.168.1.2 (smtp.piercelaw.edu [216.204.12.219]) by + xent.com (Postfix) with ESMTP id E8C3B2940A1 for ; + Mon, 7 Oct 2002 14:10:19 -0700 (PDT) +Received: from 192.168.30.220 ([192.168.30.220]) by 192.168.1.2; + Mon, 07 Oct 2002 17:10:17 -0400 +From: bitbitch@magnesium.net +X-Mailer: The Bat! (v1.61) Educational +Reply-To: bitbitch@magnesium.net +X-Priority: 3 (Normal) +Message-Id: <157291235594.20021007171017@magnesium.net> +To: John Hall +Cc: fork@spamassassin.taint.org +Subject: Re[2]: The absurdities of life. +In-Reply-To: <000001c26e44$d8780150$0200a8c0@JMHALL> +References: <000001c26e44$d8780150$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 7 Oct 2002 17:10:17 -0400 + + +JH> They are legally required to do that. I got a similar check because an +JH> insurance company didn't pay a claim quickly enough. It might have been +JH> $.02. + +JH> Although they spent lots more than $.33 to mail you the check, the +JH> alternative seems to be to keep the money. Do you really want companies +JH> to have a financial incentive to over-bill you 'just a bit' so they +JH> could keep it? For a company with millions of customers, $.33/customer +JH> starts adding up. + + +Christ, you sound worse than me. + +What I -said- in my post, John, was that instead of having to dole out +stupid refunds, I'd rather they save the costs incurred, knock off one +of those bullshit surcharges that they inevitably charge for promoting +services like these, and move on. SOmething tells me, it'd balance +out. Problem is, they're silly, they don't want to do this, and +rather than the legislation coming up with an affective means of +controlling the situation (overcharging) they impose silly +requirements like this. + + + + + + +>> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +>> bitbitch@magnesium.net + +>> So I get a check from Pac Bell today (SBC as they're called now). +>> Turns out, they went to the trouble of printing out, signing, sealing +>> and stamping a check just to refund me for a whole $0.33. +>> +>> They easily spent more than this just getting the materials together. +>> Why the hell do companies bother to do this crap? I mean, isn't there +>> a bottom line in terms of cost effectiveness? I don't think I missed +>> the .33, but I sure as hell would have appreciated lower rates in lieu +>> of being returned pennies. +>> +>> I'm truly stuck on this though. I don't know whether to frame the +>> check, burn it, or cash it in. Maybe I should find a way to return to +>> sender, so they have to spend -more- money on giving me my .33 dues. +>> +>> +>> Does .33 even buy anything anymore? Funny bit of it, is I couldn't +>> even make a phone call these days. +>> +>> *boggled* +>> BB. +>> +>> -- +>> Best regards, +>> bitbitch mailto:bitbitch@magnesium.net + + + + + +-- +Best regards, + bitbitch mailto:bitbitch@magnesium.net + + diff --git a/Ch3/datasets/spam/easy_ham/00913.bc83c1f37836dee281cc5282e61acdee b/Ch3/datasets/spam/easy_ham/00913.bc83c1f37836dee281cc5282e61acdee new file mode 100644 index 000000000..7a5431fee --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00913.bc83c1f37836dee281cc5282e61acdee @@ -0,0 +1,100 @@ +From fork-admin@xent.com Tue Oct 8 00:32:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 07AF716F03 + for ; Tue, 8 Oct 2002 00:32:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 00:32:02 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97NQTK21525 for ; + Tue, 8 Oct 2002 00:26:30 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id EF30E2940A1; Mon, 7 Oct 2002 16:26:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id A152A29409A for ; + Mon, 7 Oct 2002 16:25:44 -0700 (PDT) +Received: (qmail 59714 invoked by uid 19621); 7 Oct 2002 23:23:42 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 7 Oct 2002 23:23:42 -0000 +Subject: Re: erratum [Re: no matter ...] & errors +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: <3DA1E514.9080807@permafrost.net> +References: <200210071841.LAA25074@maltesecat> + <3DA1E514.9080807@permafrost.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1034034330.14068.144.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 07 Oct 2002 16:45:30 -0700 + +On Mon, 2002-10-07 at 12:48, Owen Byrne wrote: +> I suppose Canada, which is supposed to be a "loose confederation" of 2 +> founding nations (French and English) can be cited as a success. The +> jury is still out, but so far only a few brief rebellions and +> referendums and such, still together after 130+ years. + + +Alberta, and to a lesser extent some of the other Western provinces, is +definitely not happy with the current arrangement. Some of this has to +do with the strange way the Canadian government is structured. When I +was last up in Alberta (a month ago), the newspapers were reporting +something like 70% of Albertans favor separating from Canada, and over +several distinct issues. + +The problem is basically that while Alberta is an economic powerhouse +that is propping up the weaker economies of the Eastern provinces, their +interests are openly and unapologetically ignored by the government in +Ottawa. While Alberta sends something like twice the tax dollars to +Ottawa per capita of the average Canadian, they only have token +representation in the federal government. While I'm not clear on +exactly how the government works up there, representation is not +entirely based on population, and it works out that some eastern +provinces with populations smaller than the city of Calgary alone have +substantially more representatives in the legislature than the entire +province of Alberta. + +The long and the short of it is that the eastern provinces use Alberta +as a personal ATM machine for their social programs while not even so +much as throwing Alberta a bone, and are able to do so because even the +sparsely populated eastern provinces can out-vote Alberta despite having +fewer people. Or something like that. The Canadian government is less +restricted than the US government, so they can do strange things, like +having restrictive regulations that only apply to certain provinces, +Alberta being on the receiving end of many such obscenities. It is +essentially a much worse version of what is happening in the +inter-mountain West of the US. Unlike the US case though, the rest of +Canada would really be hurting if they weren't receiving all those tax +dollars from Alberta. OTOH, Alberta would probably thrive. + +I have friends in Alberta, and visit occasionally, but I'm not totally +clear on everything that goes on in that country, due to my partial +unfamiliarity with how the government works up there, so I'm a little +fuzzy on some of the details. What I do know is that on average the +Albertans are quite unhappy with their current position in Canada and +the sentiment has been getting worse over the years. + +Cheers, + +-James Rogers + jamesr@best.com + + + diff --git a/Ch3/datasets/spam/easy_ham/00914.a24840d53c5f49a00e66fa4425e4626d b/Ch3/datasets/spam/easy_ham/00914.a24840d53c5f49a00e66fa4425e4626d new file mode 100644 index 000000000..afa0a2db4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00914.a24840d53c5f49a00e66fa4425e4626d @@ -0,0 +1,75 @@ +From fork-admin@xent.com Tue Oct 8 10:56:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CCC2316F16 + for ; Tue, 8 Oct 2002 10:56:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 10:56:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g989KUK08679 for ; + Tue, 8 Oct 2002 10:20:31 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 431202940AE; Tue, 8 Oct 2002 02:20:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from gremlin.ics.uci.edu (gremlin.ics.uci.edu [128.195.1.70]) by + xent.com (Postfix) with ESMTP id D50442940AE; Tue, 8 Oct 2002 02:19:38 + -0700 (PDT) +Received: from localhost (godzilla.ics.uci.edu [128.195.1.58]) by + gremlin.ics.uci.edu (8.12.5/8.12.5) with ESMTP id g989JCgB000573; + Tue, 8 Oct 2002 02:19:12 -0700 (PDT) +Subject: why is decentralization worth worrying about? +Content-Type: text/plain; charset=WINDOWS-1252; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +From: Rohit Khare +To: fork@spamassassin.taint.org +Message-Id: <2583F1FA-DA52-11D6-B1B1-000393A46DEA@alumni.caltech.edu> +X-Mailer: Apple Mail (2.482) +X-Mailscanner: Found to be clean +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Mon, 7 Oct 2002 17:09:00 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g989KUK08679 + +Why am I so passionate about decentralization? Because I believe some of +today’s most profound problems with networked applications are caused by +centralization. + +Generically, a centralized political or economic system permits only one +answer to a question, while decentralization permits many separate +agents to hold different opinions of the same matter. In the specific +context of software, centralized variables can only contain one valid +value at a time. That limits us to only representing information A) +according to the beliefs of a single agency, and B) that changes more +slowly than it takes to propagate. Nevertheless, centralization is the +basis for today’s most popular architectural style for developing +network applications: client-server interaction using request-response +communication protocols. + +I believe these are profound limitations, which we are already +encountering in practice. Spam, for example, is in the eye of the +beholder, yet our email protocols and tools do not acknowledge the +separate interests of senders and receivers. Slamming, for another, +unfairly advantages the bidder with the lowest-latency connection to a +centralized auction server. Sharing ad-hoc wireless networks is yet a +third example of decentralized resource allocation. Furthermore, as +abstract as centralization-induced failures might seem today, these +limits will _not_ improve as the cost of computing, storage, and +communication bandwidth continue to plummet. Instead, the speed of light +and human independence constitute _fundamental_ limits to centralized +information representation, and hence centralized software architecture. + + diff --git a/Ch3/datasets/spam/easy_ham/00915.22a9c52df39c264be488f62bba9d621c b/Ch3/datasets/spam/easy_ham/00915.22a9c52df39c264be488f62bba9d621c new file mode 100644 index 000000000..b88409c11 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00915.22a9c52df39c264be488f62bba9d621c @@ -0,0 +1,59 @@ +From fork-admin@xent.com Fri Aug 23 11:08:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id CA27244171 + for ; Fri, 23 Aug 2002 06:06:45 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:06:45 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7MJHVZ21324 for ; + Thu, 22 Aug 2002 20:17:32 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id B6BE92940DE; Thu, 22 Aug 2002 12:15:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (unknown [207.5.62.130]) by xent.com (Postfix) + with ESMTP id 8BCBA294099 for ; Thu, 22 Aug 2002 12:14:38 + -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Thu, 22 Aug 2002 19:16:04 -08:00 +Message-Id: <3D653874.8010204@barrera.org> +From: "Joseph S. Barrera III" +Organization: Wings over the World +User-Agent: Mutt 5.00.2919.6900 DM (Nigerian Scammer Special Edition) +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: Chris Haun +Cc: fork@spamassassin.taint.org +Subject: Re: lifegem +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 12:16:04 -0700 + +Chris Haun wrote: +> A LifeGem is a certified, high quality diamond created from the carbon of +> your loved one as a memorial to their unique and wonderful life. + +Why wait until you're dead? I'm sure there's enough carbon in +the fat from your typical liposuction job to make a decent diamond. + +- Joe + + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00916.1ea7a40e892220d43795fee49ab4849e b/Ch3/datasets/spam/easy_ham/00916.1ea7a40e892220d43795fee49ab4849e new file mode 100644 index 000000000..2f806d5a3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00916.1ea7a40e892220d43795fee49ab4849e @@ -0,0 +1,129 @@ +From fork-admin@xent.com Fri Aug 23 11:08:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BE9C147C69 + for ; Fri, 23 Aug 2002 06:06:48 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:06:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7MK4SZ22618 for ; + Thu, 22 Aug 2002 21:04:29 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id E6AD62940D8; Thu, 22 Aug 2002 13:02:08 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 790A7294099 for ; Thu, + 22 Aug 2002 13:01:08 -0700 (PDT) +Received: (qmail 21546 invoked from network); 22 Aug 2002 20:02:51 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 22 Aug 2002 20:02:51 -0000 +Reply-To: +From: "John Hall" +To: +Subject: Property rights in the 3rd World (De Soto's Mystery of Capital) +Message-Id: <008701c24a16$e3443830$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +In-Reply-To: <200208221811.LAA21283@maltesecat> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 13:02:45 -0700 + + + +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +Dave +> Long +> Sent: Thursday, August 22, 2002 11:12 AM +> To: fork@spamassassin.taint.org +> Subject: RE: The Curse of India's Socialism +> +> +> +> When I'd read that "getting legal title +> can take 20 years", when I believe that +> 1 year ought to be more than sufficient, +> (and helped by the Cairo reference) I'd +> assumed that we were talking about the +> urban poor. +> +> If I see people living in mansions, or +> even in suburban subdivisions, I assume +> they didn't have too much trouble with +> their titles. + +Pg 177: +In another country, a local newspaper, intrigued by our evidence of +extralegal real estate holdings, checked to see if the head of state's +official residence had a recorded title. It did not. + +Pg 92: +The value of land in the formal sector of Lima averages US$50 per square +meter, whereas in the area of Gamarra, where a great deal of Peru's +informal manufacturing sector resides, the value per square meter can go +as high as US$3,000. + +========== + +I'd have made the same assumption you did. De Soto says that isn't +correct. You can find mansions that don't have title. A lot of them, +in fact. But they can't be used for collateral for a loan, or otherwise +participate as 'capital' because of their extra-legal status. + + +> > Mr. Long, I think you'd particularly enjoy the De Soto work. +> +> On the "to find" list. Any chance of +> an explanation of that "Bell Jar" in +> the meantime? + +French historian Fernand Braudel (so Braudel's Bell Jar, not De Soto's) + +==> + +The key problem is to find out why that sector of society of the past, +which I would not hesitate to call capitalist, should have lived as if +in a bell jar, cut off from the rest; why was it not able to expand and +conquer the whole of society? ... [Why was it that] a significant rate +of capital formation was possible only in certain sectors and not in the +whole market economy of the time? ... It would perhaps be teasingly +paradoxial to say that whatever was in short supply, money certainly was +not ... so this was an age where poor land was bought up and magnificent +country residents built ... [How do we] resolve the contradiction ... +between the depressed economic climate and the splendors of Florence +under Lorenzo the Magnificent? + + +-------------- + +De Soto's theory is that the Bell Jar is formed when you segregate those +who have *practical* access to legal property rights and those who do +not. The poor[1] have property -- lots and lots of property. What they +don't have is access to the systems where we turn property into capital +and allow it to start growing. Their property can only be exchanged +with a small section of people who know them personally. + +[1] Actual poor people, not 'poor' Americans with a living standard that +is the envy of most of the world. + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00917.b633b615b29b9483b6e3ec54dd6914b9 b/Ch3/datasets/spam/easy_ham/00917.b633b615b29b9483b6e3ec54dd6914b9 new file mode 100644 index 000000000..271bd5b21 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00917.b633b615b29b9483b6e3ec54dd6914b9 @@ -0,0 +1,61 @@ +From fork-admin@xent.com Fri Aug 23 11:08:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6D38B47C6C + for ; Fri, 23 Aug 2002 06:06:53 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:06:53 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7MNQTZ29953 for ; + Fri, 23 Aug 2002 00:26:29 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 02B56294186; Thu, 22 Aug 2002 16:24:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail1.panix.com (mail1.panix.com [166.84.1.72]) by xent.com + (Postfix) with ESMTP id 403D8294099 for ; Thu, + 22 Aug 2002 16:23:54 -0700 (PDT) +Received: from 159-98.nyc.dsl.access.net (159-98.nyc.dsl.access.net + [166.84.159.98]) by mail1.panix.com (Postfix) with ESMTP id 414A54877A for + ; Thu, 22 Aug 2002 19:25:38 -0400 (EDT) +From: Lucas Gonze +X-X-Sender: lgonze@localhost.localdomain +Cc: "Fork@Xent.Com" +Subject: Re: The case for spam +In-Reply-To: <3D6556DC.5070408@permafrost.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 19:18:12 -0400 (EDT) + + +Political mail (the snail kind) doesn't bother me. I like it a lot of the +time, because as crap as it is at least it's not the kind of info you get +on TV. Particularly for small time local politics, it's the best way to +get information. + +but what matters is that mail is speech, and political email has to be as +well protected as any other political speech. Spam is *the* tool for +dissident news, since the face that it's unsolicited means that recipients +can't be blamed for being on a mailing list. + + + + + + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00918.4fb416f486e8b21ffe522b4074598b69 b/Ch3/datasets/spam/easy_ham/00918.4fb416f486e8b21ffe522b4074598b69 new file mode 100644 index 000000000..47824c105 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00918.4fb416f486e8b21ffe522b4074598b69 @@ -0,0 +1,66 @@ +From fork-admin@xent.com Fri Aug 23 11:08:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A091D47C70 + for ; Fri, 23 Aug 2002 06:06:56 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:06:56 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7N5EVZ11380 for ; + Fri, 23 Aug 2002 06:14:32 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 0B70E2940D7; Thu, 22 Aug 2002 22:12:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from crank.slack.net (slack.net [166.84.151.181]) by xent.com + (Postfix) with ESMTP id 4A7D2294099 for ; Thu, + 22 Aug 2002 22:11:44 -0700 (PDT) +Received: by crank.slack.net (Postfix, from userid 596) id 8F5E23EDE0; + Fri, 23 Aug 2002 01:15:29 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by crank.slack.net + (Postfix) with ESMTP id 8DD423ECF3; Fri, 23 Aug 2002 01:15:29 -0400 (EDT) +From: Tom +To: Robert Harley +Cc: fork@spamassassin.taint.org +Subject: Re: Entrepreneurs +In-Reply-To: <20020823005705.D63AEC44E@argote.ch> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 01:15:29 -0400 (EDT) + +On Fri, 23 Aug 2002, Robert Harley wrote: + + +--]It's an amusing anecdote, I don't know if it's true or not, but certainly +--]nothing here supports the authoritative sounding conclusion "Status: False". +--] + +So thats the trick, just let any anecdotal utterances you LIKE be deemed +true until proven false, and then hold other data to the opposite +standard... + +Yeah, I see how that could be a handy tool RH. + + +(before teh lablemongers are out and about, I could give a shit what +BubbaU utters, its all shite. Kill your idols folks, your slips are +showing) + +-tom + +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00919.3ca1925f3bab9136611b8222f8cb047b b/Ch3/datasets/spam/easy_ham/00919.3ca1925f3bab9136611b8222f8cb047b new file mode 100644 index 000000000..3beb0d060 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00919.3ca1925f3bab9136611b8222f8cb047b @@ -0,0 +1,48 @@ +From fork-admin@xent.com Fri Aug 23 11:09:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0D1FA47C71 + for ; Fri, 23 Aug 2002 06:06:59 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:06:59 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7N9vXZ19107 for ; + Fri, 23 Aug 2002 10:57:34 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 1993F294197; Fri, 23 Aug 2002 02:55:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from argote.ch (argote.ch [80.65.224.17]) by xent.com (Postfix) + with ESMTP id D28BB294099 for ; Fri, 23 Aug 2002 02:54:38 + -0700 (PDT) +Received: by argote.ch (Postfix, from userid 500) id ABDF4C44E; + Fri, 23 Aug 2002 11:48:33 +0200 (CEST) +To: fork@spamassassin.taint.org +Subject: Re: Entrepreneurs +Message-Id: <20020823094833.ABDF4C44E@argote.ch> +From: harley@argote.ch (Robert Harley) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 11:48:33 +0200 (CEST) + +I wrote: +>I personally doubt it simply because I never heard of Bush and Chirac +>going to Brighton. + +Actually it doesn't say that they did, just that Blair spoke to +Williams there. + +R +http://xent.com/mailman/listinfo/fork + diff --git a/Ch3/datasets/spam/easy_ham/00920.d7c069763cedddefa021e23cae0dd259 b/Ch3/datasets/spam/easy_ham/00920.d7c069763cedddefa021e23cae0dd259 new file mode 100644 index 000000000..63aea7939 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00920.d7c069763cedddefa021e23cae0dd259 @@ -0,0 +1,67 @@ +From fork-admin@xent.com Mon Sep 2 13:14:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E05BF47C87 + for ; Mon, 2 Sep 2002 07:46:45 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:46:45 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8206tZ09311 for ; + Mon, 2 Sep 2002 01:06:56 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9687C2940D2; Sun, 1 Sep 2002 17:04:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from barrera.org (cpe-65-172-233-109.sanbrunocable.com + [65.172.233.109]) by xent.com (Postfix) with ESMTP id 1A70F294099 for + ; Sun, 1 Sep 2002 17:03:55 -0700 (PDT) +Received: from (127.0.0.1 [127.0.0.1]) by MailEnable Inbound Mail Agent + with ESMTP; Sun, 01 Sep 2002 23:51:54 -08:00 +Message-Id: <3D72A81A.1010901@barrera.org> +From: "Joseph S. Barrera III" +Organization: Wings over the World +User-Agent: Mutt 5.00.2919.6900 DM (Nigerian Scammer Special Edition) +X-Accept-Language: en-us, en, ja +MIME-Version: 1.0 +To: FoRK +Subject: Re: revocation of grlygrl201@ +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 01 Sep 2002 16:51:54 -0700 + +bitbitch@magnesium.net wrote: + > Well Beberg, unless you're really into Anime and actually hold true + > that dead people can send email, I think Geege's subject is just + > dandy. + +Funny you should mention that, as I just came back from refilling +the green coolant in my Navi. + + > (bonus FoRK points if Adam knows what anime i'm refering to) + +I guess I don't get any points, do I? No, didn't think so. + +- Joe + +P.S. We've just started watching Boogiepop Phantom... + +-- +The Combatant State is your father and your mother, your only +protector, the totality of your interests. No discipline can +be stern enough for the man who denies that by word or deed. + + + diff --git a/Ch3/datasets/spam/easy_ham/00921.0407865778a278e577c287a9a04763a7 b/Ch3/datasets/spam/easy_ham/00921.0407865778a278e577c287a9a04763a7 new file mode 100644 index 000000000..bcaf12c5b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00921.0407865778a278e577c287a9a04763a7 @@ -0,0 +1,70 @@ +From fork-admin@xent.com Mon Sep 2 13:12:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0CE9D47C88 + for ; Mon, 2 Sep 2002 07:47:08 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:47:08 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g820ExZ12578 for ; + Mon, 2 Sep 2002 01:15:00 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9F3192940C3; Sun, 1 Sep 2002 17:12:02 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id E4F93294099 for ; + Sun, 1 Sep 2002 17:11:08 -0700 (PDT) +Received: (qmail 2889 invoked by uid 1111); 2 Sep 2002 00:13:25 -0000 +From: "Adam L. Beberg" +To: +Cc: +Subject: Re: revocation of grlygrl201@ +In-Reply-To: <6464589899.20020901193917@magnesium.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Sun, 1 Sep 2002 17:13:25 -0700 (PDT) + +On Sun, 1 Sep 2002 bitbitch@magnesium.net wrote: + +> Well Beberg, unless you're really into Anime and actually hold true +> that dead people can send email, I think Geege's subject is just dandy. +> Especially since she removed herself from the hive that is aol (and +> placed herself unto another, but hey :-)) + +Bandwidth is bandwidth. AOL is still the only mom-friendly place to get it. + +> *ducks and runs* + +What, like i'm not skilled with a bow? You better run really fast :-P + +> (bonus FoRK points if Adam knows what anime i'm refering to) + +Well lets see, about 99% of all anime? In anime dead people can talk, email, +hang out, and generally lead normal lives. Come to think of it they tend to +be the primary characters ;) + +But I suspect you mean Serial Experiments Lain, in which the initial "i'm +not dead yet" is via email. + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + + + diff --git a/Ch3/datasets/spam/easy_ham/00922.699506b21f6625eaaa1482c7fa034e1d b/Ch3/datasets/spam/easy_ham/00922.699506b21f6625eaaa1482c7fa034e1d new file mode 100644 index 000000000..3da9838df --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00922.699506b21f6625eaaa1482c7fa034e1d @@ -0,0 +1,77 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 22 15:46:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 67C3247C68 + for ; Thu, 22 Aug 2002 10:46:29 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 15:46:29 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MEknZ10703 for ; Thu, 22 Aug 2002 15:46:49 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17htDp-0003Z5-00; Thu, + 22 Aug 2002 07:46:05 -0700 +Received: from neo.pittstate.edu ([198.248.208.13]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17htDE-0003e0-00 for ; + Thu, 22 Aug 2002 07:45:28 -0700 +Received: from [198.248.208.11] (macdaddy.pittstate.edu [198.248.208.11]) + by neo.pittstate.edu (8.12.2/8.12.2) with ESMTP id g7MEisW7023315; + Thu, 22 Aug 2002 09:44:54 -0500 +MIME-Version: 1.0 +Message-Id: +In-Reply-To: <5.1.0.14.0.20020821203325.031d5d60@imap.greenberg.org> +References: <5.1.0.14.0.20020821203325.031d5d60@imap.greenberg.org> +To: Ed Greenberg , + spamassassin-talk@lists.sourceforge.net +From: Justin Shore +Subject: Re: [SAtalk] SA and Patented Ideas (was: SA In The News) +Content-Type: text/plain; charset="us-ascii" ; format="flowed" +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 09:45:16 -0500 +Date: Thu, 22 Aug 2002 09:45:16 -0500 + +At 8:43 PM -0700 8/21/02, Ed Greenberg wrote: +>At 11:19 PM 8/20/2002 -0700, dan@dankohn.com wrote: +> +>>The nature of our patent is about putting a warrant mark in RFC 2822 +>>X-headers (or in the body) to allow senders to warrant their mail as +>>*not-spam*, and then to use copyright and trademark infringement to +>>enable Habeas to enforce that warranty. + +Why is it that I envision Verisign doing something like this. Yeah, +like I want Verisign to sign all my spam, er, mail for me. Pay them +enough and they'd probably sign spam too. ;) + +J +-- + +-- +Justin Shore, ES-SS ES-SSR Pittsburg State University +Network & Systems Manager http://www.pittstate.edu/ois/ + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/00923.1a2af021ec7490b689a04ecd0226f9d5 b/Ch3/datasets/spam/easy_ham/00923.1a2af021ec7490b689a04ecd0226f9d5 new file mode 100644 index 000000000..352a149cf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00923.1a2af021ec7490b689a04ecd0226f9d5 @@ -0,0 +1,78 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 22 16:17:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 163C943F99 + for ; Thu, 22 Aug 2002 11:17:09 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 16:17:09 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MFDmZ11714 for ; Thu, 22 Aug 2002 16:13:49 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17htdx-00014Y-00; Thu, + 22 Aug 2002 08:13:05 -0700 +Received: from moonbase.zanshin.com ([167.160.213.139]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17htdj-0006PE-00 for + ; Thu, 22 Aug 2002 08:12:52 -0700 +Received: from aztec.zanshin.com (IDENT:schaefer@aztec.zanshin.com + [167.160.213.132]) by moonbase.zanshin.com (8.11.0/8.11.0) with ESMTP id + g7MFCoW07498; Thu, 22 Aug 2002 08:12:50 -0700 +From: Bart Schaefer +To: SpamAssassin Talk ML +Subject: Re: [SAtalk] SA In The News +In-Reply-To: <200208202047.45470.matt@nightrealms.com> +Message-Id: +Mail-Followup-To: spamassassin-talk@example.sourceforge.net +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 08:12:50 -0700 (PDT) +Date: Thu, 22 Aug 2002 08:12:50 -0700 (PDT) + +On Tue, 20 Aug 2002, Matthew Cline wrote: + +> On Tuesday 20 August 2002 07:57 pm, Harold Hallikainen wrote: +> > http://www.wired.com/news/technology/0,1282,54645,00.html +> +> Summary: a company will offer short snippets of original, copyrighted +> and trademarked text that can be inserted into email message headers, +> and email filters can recognize this as a "not-spam" indicator. Any +> spammers who use the text will be sued for copyright and trademark +> infringement. + +They may be in for a patent fight before any of this goes forward: + +http://www.eweek.com/article2/0,3959,476558,00.asp + +"Banking on the fact that few enterprises sending commercial mail want to +be associated with spam, IronPort Systems Inc., in San Bruno, Calif., has +developed the Bonded Sender program in an effort to give legitimate bulk +e-mailers some credibility." + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/00924.4dbdc2c81ad764bfe29627498857b6f3 b/Ch3/datasets/spam/easy_ham/00924.4dbdc2c81ad764bfe29627498857b6f3 new file mode 100644 index 000000000..b0168da42 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00924.4dbdc2c81ad764bfe29627498857b6f3 @@ -0,0 +1,70 @@ +From spamassassin-devel-admin@lists.sourceforge.net Thu Aug 22 16:27:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5B79347C67 + for ; Thu, 22 Aug 2002 11:27:27 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 16:27:27 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MFN5Z12029 for ; Thu, 22 Aug 2002 16:23:05 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17htji-00023z-00; Thu, + 22 Aug 2002 08:19:02 -0700 +Received: from www.ctyme.com ([209.237.228.10] helo=darwin.ctyme.com) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17htj3-00077f-00 for + ; Thu, 22 Aug 2002 08:18:21 + -0700 +Received: from m206-56.dsl.tsoft.com ([198.144.206.56] helo=perkel.com) by + darwin.ctyme.com with asmtp (TLSv1:RC4-MD5:128) (Exim 3.35 #1) id + 17htjs-0005OZ-00 for spamassassin-devel@lists.sourceforge.net; + Thu, 22 Aug 2002 08:19:12 -0700 +Message-Id: <3D65009B.4080707@perkel.com> +From: Marc Perkel +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.1b) + Gecko/20020721 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: spamassassin-devel@example.sourceforge.net +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Subject: [SAdev] Body Test Question /d ? +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 08:17:47 -0700 +Date: Thu, 22 Aug 2002 08:17:47 -0700 + +Suppose I created a rule that was in this form: + +body RULE_NAME /text to delete/d + +Would the "/d" delete this text from the body and mask it from the rest of the +rules? If so - I'm thinking about applying it to Yahoo and SN and Juno ads so +that FPs are reduced. + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/00925.f32ef12bc4c8a7f4831cdfecd3b743e5 b/Ch3/datasets/spam/easy_ham/00925.f32ef12bc4c8a7f4831cdfecd3b743e5 new file mode 100644 index 000000000..3a39e65f9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00925.f32ef12bc4c8a7f4831cdfecd3b743e5 @@ -0,0 +1,93 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 22 16:27:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 772C543F99 + for ; Thu, 22 Aug 2002 11:27:26 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 16:27:26 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MFLfZ11996 for ; Thu, 22 Aug 2002 16:21:41 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17htlf-00036z-00; Thu, + 22 Aug 2002 08:21:03 -0700 +Received: from neo.pittstate.edu ([198.248.208.13]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17htky-0007J7-00 for ; + Thu, 22 Aug 2002 08:20:21 -0700 +Received: from [198.248.208.11] (macdaddy.pittstate.edu [198.248.208.11]) + by neo.pittstate.edu (8.12.2/8.12.2) with ESMTP id g7MFJfW7024986; + Thu, 22 Aug 2002 10:19:42 -0500 +MIME-Version: 1.0 +Message-Id: +In-Reply-To: <20020822145952.A3C2E43F99@phobos.labs.netnoteinc.com> +References: <20020822145952.A3C2E43F99@phobos.labs.netnoteinc.com> +To: yyyy@spamassassin.taint.org (Justin Mason) +From: Justin Shore +Subject: Re: [SAtalk] Highest-scoring false positive +Cc: SpamAssassin List +Content-Type: text/plain; charset="us-ascii" ; format="flowed" +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 10:20:06 -0500 +Date: Thu, 22 Aug 2002 10:20:06 -0500 + +At 3:59 PM +0100 8/22/02, Justin Mason wrote: +>Justin Shore said: +> +>> I just ran across a false positive that scored 8.6. The message was +>> a solicited ad from Apple.com on educator deals. I can send a copy +>> if anyone wants it. +> +>Yes, please do send it on, and I'll add it to the non-spam corpus. + +To any particular address? I checked the lists page but didn't see +an address to see a FP to. + +>To date, the scores evolved by SpamAssassin are very biased towards +>non-HTML, non-newsletter-ish mail. This release should be different, as +>I've been spending the last month signing up a "nonspamtrap" to every +>legit newsletter I can find ;) + +That's understandable. HTML mail is the worst thing since female +shoe sales at the mall. ;-) Signup for the cruisercustomizing.com +newsletter. Great place to find and review motorcycle parts. :) + +>This should mean that tests which match common-enough newsletter practices +>will no longer get such high scores once we re-run the GA. + +Sound pretty slick. If I come across any more legit newsletters, +I'll send them your way. + +Thanks for the info + Justin +-- + +-- +Justin Shore, ES-SS ES-SSR Pittsburg State University +Network & Systems Manager http://www.pittstate.edu/ois/ + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/00926.11b20c87f289b3743af174cd5a1d2c4f b/Ch3/datasets/spam/easy_ham/00926.11b20c87f289b3743af174cd5a1d2c4f new file mode 100644 index 000000000..258e05c73 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00926.11b20c87f289b3743af174cd5a1d2c4f @@ -0,0 +1,114 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 22 17:19:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B977147C6C + for ; Thu, 22 Aug 2002 12:19:30 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 17:19:30 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MGIHZ14209 for ; Thu, 22 Aug 2002 17:18:17 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hudv-00041d-00; Thu, + 22 Aug 2002 09:17:07 -0700 +Received: from dsl-175-112.web-ster.com ([12.111.175.112] + helo=mail.hotp.com) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17hudn-0004s1-00 for + ; Thu, 22 Aug 2002 09:16:59 -0700 +Received: from gilmanhunt (russ@RussGilmanHunt.hotp.com [10.10.10.220]) by + mail.hotp.com (8.12.4/8.12.4) with SMTP id g7MG8hQI004189 for + ; Thu, 22 Aug 2002 09:08:43 -0700 +Content-Type: text/plain; charset="iso-8859-1" +From: Russ Gilman-Hunt +To: SpamAssassin List +X-Mailer: KMail [version 1.2] +MIME-Version: 1.0 +Message-Id: <0208220909120B.13454@gilmanhunt> +Content-Transfer-Encoding: 8bit +Subject: [SAtalk] procmail help +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 09:09:12 -0700 +Date: Thu, 22 Aug 2002 09:09:12 -0700 + +I'm fairly confused here, with Procmail. +I know this isn't a procmail list per-se; feel free to answer my questions in +private email to r_gilmanhunt@hotp.com. + +I've looked for web-stuff to answer this question but I can't find anything +specific on this scenario. + +Here's the situation. +I have a global /etc/procmailrc file. It works, and when I insert stuff into +it for logging (LOGFILE=/root/procmail.log, VERBOSE=yeah. LOGABSTRACT=all) it +shows up where I expect it to (the log in /root/procmail.log) At the end of +this file, I use + :0fw + | spamc +to call spamassassin. + +Also in it is a carboncopy recipe (yes, I know, it's one of the evils we do +for our corporate masters) (at the top) (to their credit, I am instructed +that they are not interested in the actual contents, but are concerned about +future lawsuits and their culpability, so they want a record made. Discussion +on this point is immaterial) +:0 + * ? test -d $ARCHIVEDIR/$DATEDIR || mkdir -p --mode=750 $ARCHIVEDIR/$DATEDIR + { } +:0 c + $SAVEAT + +I have several users where I forward certain spams to /dev/null . . .their +procmailrc file (/home/$user/.procmailrc) looks like this: +:0 + * ^From: .*spermfun.com + /dev/null + +Now I've got a person who needs a copy of her inbound emails sent to another +email address (outside the company), so I've got this recipe in her +/home/$user/.procmailrc file: +:0 c + !user@domain.tld + +It almost looks like procmail's not running a user's copy recipe after a +global copy recipe, except that I can replace that user's one with +:0 + * ^Subject: .*test + procmail.holder +and get the same result. + +The result, to put it succinctly, is "nothing". No forwards go out, no files +are made, if I try to log information, no logs are set up. I've modified the +user/group and permissions to match known-working recipes (the spermfun +example above) and still nothing. However, I can redirect those other +messages. In other words- just this user's procmailrc file is not working- +other users have no problems. + +Any suggestions would be helpful :) + +-Russ + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/00927.acbc1da1de97d9257d57b4f46ed7a3f4 b/Ch3/datasets/spam/easy_ham/00927.acbc1da1de97d9257d57b4f46ed7a3f4 new file mode 100644 index 000000000..ebac16b15 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00927.acbc1da1de97d9257d57b4f46ed7a3f4 @@ -0,0 +1,79 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 22 18:41:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 947DD47C67 + for ; Thu, 22 Aug 2002 13:41:24 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 18:41:24 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MHYcZ17839 for ; Thu, 22 Aug 2002 18:34:38 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hvqO-0002io-00; Thu, + 22 Aug 2002 10:34:04 -0700 +Received: from hall.mail.mindspring.net ([207.69.200.60]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17hvpz-0007Ng-00 for ; + Thu, 22 Aug 2002 10:33:39 -0700 +Received: from user-105nd99.dialup.mindspring.com ([64.91.181.41] + helo=belphegore.hughes-family.org) by hall.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17hvpw-0000t6-00; Thu, 22 Aug 2002 13:33:36 -0400 +Received: from balam.hughes-family.org + (adsl-67-118-234-50.dsl.pltn13.pacbell.net [67.118.234.50]) by + belphegore.hughes-family.org (Postfix) with ESMTP id 5399CA3FEB; + Thu, 22 Aug 2002 10:33:32 -0700 (PDT) +Subject: Re: [SAtalk] Highest-scoring false positive +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Cc: SpamAssassin List +To: "Karsten M. Self" +From: "Craig R.Hughes" +In-Reply-To: <20020822000239.GJ30870@miles.freerun.com> +Message-Id: <47DAEAB9-B5F5-11D6-A91E-00039396ECF2@deersoft.com> +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.482) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 10:33:33 -0700 +Date: Thu, 22 Aug 2002 10:33:33 -0700 + +Interesting. It's possible, of course, that the shitty economy +is hurting the spammers as much as anyone else. But if you've +been aggressively reporting, then it could just be that. Could +be your upstream ISP is being more aggressive too... + +C + +On Wednesday, August 21, 2002, at 05:02 PM, Karsten M. Self wrote: + +> ...what these plots *don't* show is the drop from ~55 +> mails/daily to ~30 +> daily that I've seen at work, since 1st week of May, when spam receipts +> peaked. Not sure if it's aggressive reporting that's getting us off +> lists, or if other people are seeing similar. + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/00928.83cc6f8987cb3dd6090a8928f04bd608 b/Ch3/datasets/spam/easy_ham/00928.83cc6f8987cb3dd6090a8928f04bd608 new file mode 100644 index 000000000..7a9e48b46 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00928.83cc6f8987cb3dd6090a8928f04bd608 @@ -0,0 +1,77 @@ +From spamassassin-devel-admin@lists.sourceforge.net Thu Aug 22 18:41:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id ABFAA43F99 + for ; Thu, 22 Aug 2002 13:41:26 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 18:41:26 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MHZUZ17861 for ; Thu, 22 Aug 2002 18:35:30 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hvqN-0002iI-00; Thu, + 22 Aug 2002 10:34:03 -0700 +Received: from p995.as3.adl.dublin.eircom.net ([159.134.231.227] + helo=mandark.labs.netnoteinc.com) by usw-sf-list1.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hvpg-0006xf-00 for + ; Thu, 22 Aug 2002 10:33:24 + -0700 +Received: from phobos.labs.netnoteinc.com (phobos.labs.netnoteinc.com + [192.168.2.14]) by mandark.labs.netnoteinc.com (8.11.6/8.11.6) with ESMTP + id g7MHWi800961; Thu, 22 Aug 2002 18:32:44 +0100 +Received: by phobos.labs.netnoteinc.com (Postfix, from userid 500) id + D54CB47C67; Thu, 22 Aug 2002 13:30:52 -0400 (EDT) +Received: from phobos (localhost [127.0.0.1]) by + phobos.labs.netnoteinc.com (Postfix) with ESMTP id 62B8B33D8C; + Thu, 22 Aug 2002 18:30:52 +0100 (IST) +To: Theo Van Dinter +Cc: Justin Mason , + SpamAssassin-devel@lists.sourceforge.net +Subject: Re: [SAdev] 2.40 RELEASE PROCESS: mass-check status, folks? +In-Reply-To: Message from Theo Van Dinter of + "Thu, 22 Aug 2002 13:20:30 EDT." + <20020822172030.GC16421@kluge.net> +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +Message-Id: <20020822173052.D54CB47C67@phobos.labs.netnoteinc.com> +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 18:30:45 +0100 +Date: Thu, 22 Aug 2002 18:30:45 +0100 + + +Theo Van Dinter said: + +> > nonspam-theo.log +> +> Hmmm. I did re-run mass-check and resubmit... I sort the log by score, +> so the timestamp is at the end: + +ah, OK. didn't see that. + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/00929.8de0f155d0404d74ae006c0edff6b957 b/Ch3/datasets/spam/easy_ham/00929.8de0f155d0404d74ae006c0edff6b957 new file mode 100644 index 000000000..2c77afd6a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00929.8de0f155d0404d74ae006c0edff6b957 @@ -0,0 +1,81 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 22 18:41:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E307F47C68 + for ; Thu, 22 Aug 2002 13:41:27 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 18:41:28 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MHbqZ17896 for ; Thu, 22 Aug 2002 18:37:52 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hvtH-0003kF-00; Thu, + 22 Aug 2002 10:37:03 -0700 +Received: from neo.pittstate.edu ([198.248.208.13]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17hvsH-0008RU-00 for ; + Thu, 22 Aug 2002 10:36:01 -0700 +Received: from [198.248.208.11] (macdaddy.pittstate.edu [198.248.208.11]) + by neo.pittstate.edu (8.12.2/8.12.2) with ESMTP id g7MHZLW7031540; + Thu, 22 Aug 2002 12:35:23 -0500 +MIME-Version: 1.0 +Message-Id: +In-Reply-To: <20020822171604.GB16421@kluge.net> +References: <200208221905.33723@malte.stretz.eu.org> + <20020822171604.GB16421@kluge.net> +To: Theo Van Dinter , + "Malte S. Stretz" +From: Justin Shore +Subject: Re: [SAtalk] 2800 sightings this month +Cc: SpamAssassin Talk ML +Content-Type: text/plain; charset="us-ascii" ; format="flowed" +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 12:35:46 -0500 +Date: Thu, 22 Aug 2002 12:35:46 -0500 + +At 1:16 PM -0400 8/22/02, Theo Van Dinter wrote: +>On Thu, Aug 22, 2002 at 07:05:33PM +0200, Malte S. Stretz wrote: +>> Ummm... has somebody noticed that spamassassin-sightings is the fourth most +>> active list for this month on [1]? There is more sighting than talk and +>> devel together ;-) +> +>hmmm. do people know that they should only send false negatives there? +>either there's a lot of stuff SA is missing, or some people are just +>sending all their spam there. + +I've sent in some spam that either didn't score or scored practically +nothing, like below 5. I figure that most people run at 5 so if it +scores less than that, a rule needs to be honed to catch it. + +Justin +-- + +-- +Justin Shore, ES-SS ES-SSR Pittsburg State University +Network & Systems Manager http://www.pittstate.edu/ois/ + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/00930.dd136d3d36e14ab324b79c3cf8c9e6e2 b/Ch3/datasets/spam/easy_ham/00930.dd136d3d36e14ab324b79c3cf8c9e6e2 new file mode 100644 index 000000000..3dd9f750c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00930.dd136d3d36e14ab324b79c3cf8c9e6e2 @@ -0,0 +1,51 @@ +From tony@svanstrom.com Fri Aug 23 11:05:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0E44B4416B + for ; Fri, 23 Aug 2002 06:04:16 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:04:16 +0100 (IST) +Received: from moon.campus.luth.se (root@moon.campus.luth.se + [130.240.202.158]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MLQGZ25558 for ; Thu, 22 Aug 2002 22:26:16 +0100 +Received: from moon.campus.luth.se (tony@moon.campus.luth.se + [130.240.202.158]) by moon.campus.luth.se (8.12.3/8.12.3) with ESMTP id + g7MLQHMg068923; Thu, 22 Aug 2002 23:26:17 +0200 (CEST) (envelope-from + tony@svanstrom.com) +Date: Thu, 22 Aug 2002 23:26:17 +0200 (CEST) +From: "Tony L. Svanstrom" +X-X-Sender: tony@moon.campus.luth.se +To: Justin Mason +Cc: patrick@vonderhagen.de, + +Subject: Re: [SAdev] Integrating SA with Mail::CheckUser ? +In-Reply-To: <32932.194.125.172.55.1030050447.squirrel@spamassassin.taint.org> +Message-Id: <20020822232458.L68187-100000@moon.campus.luth.se> +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII + +On Thu, 22 Aug 2002 the voices made Justin Mason write: + +> > The perl-module Mail::CheckUser implements a smtp-callback and I hope +> > it might be integrated rather easily. +> > Has this extension been discussed before (and perhaps rejected)? +> > Or perhaps someone is already planning to implement it? +> > Or would you be interested to integrate a smtp-callback-patch in +> > SpamAssassin if contributed by my department? We would not be to happy +> > about such a patch which we had to manage and integrate with SA in the +> > future, but I believe a one-time contribution would be no problem. + + How'd this deal with you running SA on an account where all the mail from some +domain on another server ends up? + + + /Tony +-- +# Per scientiam ad libertatem! // Through knowledge towards freedom! # +# Genom kunskap mot frihet! =*= (c) 1999-2002 tony@svanstrom.com =*= # + + perl -e'print$_{$_} for sort%_=`lynx -dump svanstrom.com/t`' + + diff --git a/Ch3/datasets/spam/easy_ham/00931.c27bf5c9bcb24c213aafe1b28fcbcc7a b/Ch3/datasets/spam/easy_ham/00931.c27bf5c9bcb24c213aafe1b28fcbcc7a new file mode 100644 index 000000000..b50e97694 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00931.c27bf5c9bcb24c213aafe1b28fcbcc7a @@ -0,0 +1,418 @@ +From fork-admin@xent.com Wed Aug 28 10:50:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B246644158 + for ; Wed, 28 Aug 2002 05:50:12 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:50:12 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7RM2tZ27575 for ; + Tue, 27 Aug 2002 23:02:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 6595D2940EA; Tue, 27 Aug 2002 15:00:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from alumnus.caltech.edu (alumnus.caltech.edu [131.215.49.51]) + by xent.com (Postfix) with ESMTP id CB93729409A; Tue, 27 Aug 2002 14:59:09 + -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) by alumnus.caltech.edu + (8.12.3/8.12.3) with ESMTP id g7RM0Gfw020877; Tue, 27 Aug 2002 15:00:17 + -0700 (PDT) +Subject: DataPower announces XML-in-silicon +Content-Type: text/plain; charset=WINDOWS-1252; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +From: Rohit Khare +To: fork@spamassassin.taint.org +Message-Id: <5D5CC294-BA08-11D6-837F-000393A46DEA@alumni.caltech.edu> +X-Mailer: Apple Mail (2.482) +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 15:00:13 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7RM2tZ27575 + +No analysis yet... don't know what to make of it yet. But here's the raw +bits for all to peruse and check out what's really going on... Best, +Rohit + +=========================================================== + +DataPower delivers XML acceleration device +By Scott Tyler Shafer +August 27, 2002 5:46 am PT + +DATAPOWER TECHNOLOGY ON Monday unveiled its network device designed +specifically to process XML data. Unlike competing solutions that +process XML data in software, DataPower's device processes the data in +hardware -- a technology achievement that provides greater performance, +according to company officials. + +The new device, dubbed DataPower XA35 XML Accelerator, is the first in a +family of products expected from the Cambridge, Mass.-based startup. The +DataPower family is based on a proprietary processing core technology +called XG3 that does the analysis, parsing, and processing of the XML +data. + +According to Steve Kelly, CEO of DataPower, the XA35 Accelerator was +conceived to meet the steady adoption of XML, the anticipated future +proliferation of Web services, and as a means to share data between two +businesses. + +"Our vision is to build out an XML-aware infrastructure," Kelly said. +"The XA35 is the first of a family." + +Kelly explained that converting data into XML increases the file size up +to 20 times. This, he said, makes processing the data very taxing on +application servers; DataPower believes an inline device is the best +alternative. + +In addition to the large file sizes, security is also of paramount +importance in the world of XML. + +"Today's firewalls are designed to inspect HTTP traffic only," Kelly +said. "A SOAP packet with XML will go straight through a firewall. +Firewalls are blind to XML today." + +Future products in DataPowers family will focus more specifically on +security, especially as Web services proliferate, Kelly said. + +According to DataPower, most existing solutions to offload XML +processing are homegrown and done in software -- an approach the company +itself tried initially and found to be inadequate with regards to speed +and security. After trying the software path, the company turned to +creating a solution that would process XML in hardware. + +"Our XG3 execution core converts XML to machine code," said Kelly, +adding that to his knowledge no other company's solution does. Kelly +said in the next few months he expects the market to be flooded with +technologies that claim to do XML processing -- claims that he believes +will be mostly false. +Other content-aware switches, such as SSL (secure socket layer) +accelerators and load balancers, look at the first 64 bytes of a packet, +while the XA35 provides deeper packet inspection, looking at 1,400 bytes +and thus enabling greater processing of XML data, Kelly explained. + +The 1U-high network device has been tested against a large collection of +XML and XSL data types and can learn new flavors of the markup language +as they pass through the device. + +The XA35 can be deployed in proxy mode behind a firewall and a load +balancer, and it will inspect all traffic that passes and will identify +and process those packets that are XML, Kelly said. + +In addition to proxy mode, the device can also be used as an application +co-processor. This deployment method gives administrators more granular +control over what data is inspected and the application server itself +controls the device. + +DataPower is not the only company chasing this emerging market. Startup +Sarvega, based in Burr Ridge, Ill., introduced the Sarvega XPE switch in +May, and earlier this month Tarari, an Intel spin-off, launched with a +focus on content processing and acceleration. +The DataPower device is now available, priced starting at $54,995. The +company has announced one customer to date and says the product is in +field trails at a number of other enterprises. + +========================================================================= + +DataPower has been addressing enterprise networking needs since it was +founded in early 1999 by Eugene Kuznetsov, a technology visionary who +foresaw the adverse effects XML and other next generation protocols +would have on enterprise networks. Long before industry interest in XML +grew, Kuznetsov assembled a team of world-class M.I.T. engineers and +designed the industry's first solutions to address the unique +requirements for processing XML. The first such solution was a software +interpreter called DGXT. This software-based approach to XML processing +is still licensed by many companies for use in their own products today. + +Leveraging the detailed knowledge and customer experience gained from +developing software-based accelerators, Kuznetsov's team raised the bar +and designed a system for processing XML in purpose-built hardware. In +2001, DataPower's effort produced XML Generation Three (XG3™), the +industry's fastest technology for XML processing, bar none. + +Today, XG3™ technology powers the industry's first wire-speed XML +network devices, enabling secure, high-speed applications and XML Web +Services. While other companies are just now marketing first versions of +products, DataPower is delivering its third generation of technology, +providing an immediate return on technology investments to +industry-leading customers and partners. + +DataPower's M.I.T. heritage is complemented by a management team that +brings decades of experience in the networking and computing industries, +drawing veteran leaders from several successful companies including +Akamai, Argon, Cascade, Castle Networks, Sycamore and Wellfleet. + +========================================================================= + +DataPower Technology Secures $9.5 Million in Funding + +Venrock Associates, Mobius Venture Capital and Seed Capital Back Pioneer +in XML-Aware Networking for Web Services + +CAMBRIDGE, Mass. - July 8, 2002 - DataPower Technology, Inc., the +leading provider of XML-Aware network infrastructure, today announced +that it has secured $9.5 million in series B financing. Investors for +this round include Venrock Associates, Mobius Venture Capital and Seed +Capital Partners. Michael Tyrrell, of Venrock, Bill Burnham, of Mobius, +and Jeff Fagnan, of Seed Capital, have joined DataPower’s Board of +Directors. + +DataPower will use this funding to accelerate development, marketing and +sales of the company’s breakthrough technology for XML-Aware networking. +Founded in 1999, DataPower invented the world’s first intelligent XML +networking devices, capable of transforming XML traffic and transactions +at the wire-speed enterprises need to effectively embrace Web services +and other XML-centric initiatives. DataPower’s solutions are based on +its patent-pending XML Generation Three (XG3™) technology. + +"Enterprises are adopting XML at rapid rate to facilitate inter-and +intra-company communications but their network infrastructure is ill +prepared to support the requirements of this new traffic type. +DataPower’s XML-acceleration devices enable the wirespeed processing of +XML that is required to support next generation enterprise +applications," said Eugene Kuznetsov, CTO and founder of DataPower +Technology. + +"DataPower gives companies the ability to use XML that’s critical to Web +services projects without sacrificing an ounce of performance." A single +DataPower acceleration engine delivers the processing power of 10 +servers—breaking the performance bottleneck associated with XML +processing and delivering an extraordinary return on investment. In +addition, the DataPower platform provides enhanced XML security, +protection against XML-based denial-of-service attacks, connection of +e-business protocols for incompatible XML data streams, load balancing +between back-end servers and real-time statistics reports. + +"In the post-bubble economy, technology investment decisions require +laser-focused scrutiny. DataPower’s patent-pending technology addresses +a very real and growing pain point for enterprises," said Michael +Tyrrell of Venrock Associates. "By turbo-charging their networks with +DataPower’s unique XML-Aware networking technology, companies will be +free to adopt next generation Web services without encountering +performance and security pitfalls." + +"We looked long and hard for a company capable of addressing the rapidly +growing problems surrounding XML message processing performance and +security," said Bill Burnham of Mobius Venture Capital. "DataPower is on +their third generation of technology. Their patent pending XML +Generation Three (XG3) technology was quite simply the single most +compelling technology solution we have seen to date." + +"XML is not a nice-to-have, it is a must have for enterprises serious +about optimizing application efficiency. Since 1999, DataPower has been +developing solutions to facilitate enterprise use of XML and Web +services," said Jeff Fagnan of Seed Capital Partners. "DataPower’s +XML-acceleration devices are a key requirement for enterprises that rely +on XML for mission critical applications." + +About Venrock Associates +Venrock Associates was founded as the venture capital arm of the +Rockefeller Family and continues a tradition of funding entrepreneurs +that now spans over seven decades. Laurance S. Rockefeller pioneered +early stage venture financing in the 1930s. With over 300 investments +over a span of more than 70 years, the firm has an established a track +record of identifying and supporting promising early stage, technology- +based enterprises. As one of most experienced venture firms in the +United States, Venrock maintains a tradition of collaboration with +talented entrepreneurs to establish successful, enduring companies. +Venrock's continuing goal is to create long-term value by assisting +entrepreneurs in building companies from the formative stages. Their +consistent focus on Information Technology and Life Sciences-related +opportunities provides a reservoir of knowledge and a network of +contacts that have proven to be a catalyst for the growth of developing +organizations. Venrock's investments have included CheckPoint Software, +USinternetworking, Caliper Technologies, Illumina, Niku, DoubleClick, +Media Metrix, 3COM, Intel, and Apple Computer. With offices in New York +City, Cambridge, MA, and Menlo Park, CA, Venrock is well positioned to +respond to opportunities in any locale. For more information on Venrock +Associates, please visit www.venrock.com + +About Mobius Venture Capital +Mobius Venture Capital, formerly SOFTBANK Venture Capital, is a $2.5 +billion U.S.-based private equity venture capital firm managed by an +unparalleled team of former CEOs and entrepreneurs, technology pioneers, +senior executives from major technology corporations, and leaders from +the investment banking community. Mobius Venture Capital specializes +primarily in early-stage investments in the areas of: communications +systems software and services; infrastructure software and services; +professional services; enterprise applications; healthcare informatics; +consumer and small business applications; components; and emerging +technologies. Mobius Venture Capital combines its technology expertise +and broad financial assets with the industry's best entrepreneurs to +create a powerhouse portfolio of over 100 of the world's leading high +technology companies. Mobius Venture Capital can be contacted by +visiting their web site www.mobiusvc.com. + +About Seed Capital Partners +Seed Capital Partners is an early-stage venture fund affiliated with +SoftBank Corporation, one of the world's leading Internet market forces. +Seed Capital manages funds focused primarily on companies addressing +Internet-enabled business-to-business digital information technology +opportunities, which are located in the Northeastern U.S., the +southeastern region of the Province of Ontario, Canada, and Israel. Seed +Capital’s portfolio includes Spearhead Technologies, Concentric Visions +and CompanyDNA. For more information on Seed Capital Partners, please +visit www.seedcp.com. + +About DataPower Technology +DataPower Technology provides enterprises with intelligent XML-Aware +network infrastructure to ensure unparalleled performance, security and +manageability of next-generation protocols. DataPower’s patent-pending +XML Generation Three (XG3™) technology powers the industry’s first +wirespeed XML network devices, enabling secure, high-speed applications +and XML Web Services. Founded in 1999, DataPower is now delivering its +third generation of technology, providing immediate return on technology +investments to industry-leading customers and partners. DataPower is +privately held and based in Cambridge, MA. Investors include Mobius +Venture Capital, Seed Capital Partners, and Venrock Associates. + +CONTACT: + +DataPower Technology, Inc. +Kieran Taylor +617-864-0455 +kieran@datapower.com + +Schwartz Communications +John Moran/Heather Chichakly +781-684-0770 +datapower@schwartz-pr.com + +======================================================================== + +Steve Kelly, chairman and CEO + +During over twenty years in the technology industry, Steve Kelly has +built and managed global enterprise networks, provided consulting +services to Fortune 50 businesses, and been involved in the launch of +several start-ups. Prior to DataPower, Kelly was an +entrepreneur-in-residence at Venrock Associates, and was co-founder of +Castle Networks, where he led the company's sales, service and marketing +functions. Castle was acquired by Siemens AG in 1999 to create Unisphere +Networks, which was subsequently purchased by Juniper Networks. Kelly +was an early contributor at Cascade Communications, where he built and +managed the company's core switching business; Cascade's annual revenues +grew from $2 million to $300 million annually during Kelly's tenure. +Kelly also worked at Digital Equipment Corporation where he managed and +grew their corporate network to 50,000+ nodes in 28 countries, the +largest in the world at the time. Kelly has a B.S. in Information +Systems from Bentley College. + +Eugene Kuznetsov, founder, president and CTO + +Eugene Kuznetsov is a technology visionary that has been working to +address enterprise XML issues since the late 90s. Kuznetsov founded +DataPower Technology, Inc. in 1999 to provide enterprises with an +intelligent, XML-aware network infrastructure to support next-generation +applications. Prior to starting DataPower, Kuznetsov led the Java JIT +Compiler effort for Microsoft Internet Explorer for Macintosh 4.0. He +was also part of the team which developed one of the first clean room +Java VM's. This high-speed runtime technology was licensed by some of +the industry's largest technology companies, including Apple Computer. +He has consulted to numerous companies and worked on a variety of +hardware and software engineering problems in the areas of memory +management, power electronics, optimized execution engines and +application integration. Kuznetsov holds a B.S. in electrical +engineering from MIT. + +Steve Willis, vice president of advanced technology + +Steve Willis is an accomplished entrepreneur and a pioneer in protocol +optimization. Prior to joining DataPower, Willis was co-founder and CTO +of Argon Networks, a provider of high-performance switching routers that +was acquired by Siemens AG in 1999 to create Unisphere Networks; +Unisphere was subsequently purchased by Juniper Networks. Before Argon, +Steve was vice president of advanced technology at Bay Networks (now +Nortel Networks) where he led both IP and ATM-related technology +development and managed a group that generated 24 patent applications, +developed a 1 Mbps forwarding engine and led the specification of the +ATM Forum's PNNI routing protocol. Most notably, Steve was co-founder, +original software director and architect for Wellfleet Communications, a +leading pioneer of multi-protocol routers. Wellfleet was rated as the +fastest growing company in the U.S. for two consecutive years by Fortune +magazine. Willis is currently a member of the Institute of Electrical +and Electronics Engineers (IEEE) and the Internet Research Task Force +(IRTF) Routing Research Group. Willis has a B.D.I.C. in Computer Science +from the University of Massachusetts. + +Bill Tao, vice president of engineering + +With a vast understanding of network optimization technologies and +extensive experience in LAN and WAN networking, Bill Tao brings over 25 +years of critical knowledge to lead DataPower's engineering efforts. +Prior to DataPower, Tao was the vice president of engineering for +Sycamore Networks, developing a family of metro/regional optical network +switches. He is also well acquainted with network optimization +techniques as he was previously vice president of engineering at +InfoLibria, where he led development and software quality assurance +engineering for a family of network caching products. Tao has held +senior engineering positions at NetEdge, Proteon, Codex and Wang. Tao +received a B.S. in Electrical Engineering from the University of +Connecticut and an M.S. in Computer Science from the University of +Illinois. + +Kieran Taylor, director of product marketing + +Kieran Taylor has an accomplished record as a marketing professional, +industry analyst and journalist. Prior to joining DataPower, Taylor was +the director of product management and marketing for Akamai Technologies +(NASDAQ: AKAM). As an early contributor at Akamai, he helped develop the +company's initial positioning and led the technical development and +go-to-market activities for Akamai's flagship EdgeSuite service. +Taylor's early contribution helped position the service provider to +secure a $12.6 billion IPO. He has also held senior marketing management +positions at Nortel Networks, Inc. and Bay Networks. Taylor was +previously an analyst at TeleChoice, Inc. and the Wide Area Networks +editor for Data Communications, a McGraw Hill publication. Taylor holds +a B.A. in Print Journalism from the Pennsylvania State University School +of Communications. + +================================================================= +Board of Advisors + +Mark Hoover +Mark Hoover is President and co-founder of Acuitive, Inc., a start-up +accelerator. With over 20 years experience in the networking industry, +Hoover's expertise spans product development, marketing, and business +development. Before launching Acuitive, Hoover worked at AT&T Bell +Laboratories, AT&T Computer Systems, SynOptics, and Bay Networks, where +he played a role in the development of key technologies, such as +10-BASET, routing, FDDI, ATM, Ethernet switching, firewall, Internet +traffic management, and edge WAN switch industries. + +George Kassabgi +Currently Vice President of Engineering at BEA Systems, Mr. Kassabgi has +held executive-level positions in engineering, sales and marketing, and +has spearheaded leading-edge developments in the application server +marketplace since 1996. He is widely known for his regular speaking +engagements at JavaOne, as well as columns and contributions in JavaPro, +Java Developer's Journal and other publications. In addition to being a +venerated Java expert, George Kassabgi holds a patent on SmartObject +Technology, and authored the technical book Progress V8. + +Marshall T. Rose +Marshall T. Rose runs his own firm, Dover Beach Consulting, Inc. He +formerly held the position of the Internet Engineering Task Force (IETF) +Area Director for Network Management, one of a dozen individuals who +oversaw the Internet's standardization process. Rose is the author of +several professional texts on subjects such as Internet Management, +Electronic Mail, and Directory Services, which have been published in +four languages. He is well known for his implementations of core +Internet technologies (such as POP, SMTP, and SNMP) and OSI technologies +(such as X.500 and FTAM). Rose received a PhD in Information and +Computer Science from the University of California, Irvine, in 1984. + + diff --git a/Ch3/datasets/spam/easy_ham/00932.659c11cb26c11baa33395f6f6c363ef6 b/Ch3/datasets/spam/easy_ham/00932.659c11cb26c11baa33395f6f6c363ef6 new file mode 100644 index 000000000..e4db0da1c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00932.659c11cb26c11baa33395f6f6c363ef6 @@ -0,0 +1,96 @@ +From fork-admin@xent.com Wed Aug 28 10:50:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id CBC6A44156 + for ; Wed, 28 Aug 2002 05:50:08 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:50:08 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7RLFhZ26129 for ; + Tue, 27 Aug 2002 22:15:43 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id AE7E42940D8; Tue, 27 Aug 2002 14:13:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.evergo.net (unknown [206.191.151.2]) by xent.com + (Postfix) with SMTP id 94B3729409A for ; Tue, + 27 Aug 2002 14:12:25 -0700 (PDT) +Received: (qmail 2729 invoked from network); 27 Aug 2002 21:14:27 -0000 +Received: from dsl.206.191.151.102.evergo.net (HELO JMHALL) + (206.191.151.102) by mail.evergo.net with SMTP; 27 Aug 2002 21:14:27 -0000 +Reply-To: +From: "John Hall" +To: +Subject: RE: The Curse of India's Socialism +Message-Id: <007001c24e0e$b4e9e010$0200a8c0@JMHALL> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +In-Reply-To: <1030396738.2767.162.camel@avalon> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 14:14:18 -0700 + + +> From: fork-admin@xent.com [mailto:fork-admin@xent.com] On Behalf Of +James +> Rogers + +> Subject: Re: The Curse of India's Socialism +> +> On Tue, 2002-08-20 at 15:01, Ian Andrew Bell wrote: + +> > They +> > finished their routine with the a quadruple lutz -- laying off +> > hundreds of thousands of workers when it all came crashing down. +> +> So what? Nobody is guaranteed employment. Laying people off is not a +> crime nor is it immoral. Companies don't exist to provide employment, +> nor should they. The closest we have to such a thing in the US is a +> Government Job, and look at the quality THAT breeds. + +And further, why focus on the fact they were laid off and not on the +fact they were hired in the first place? + +BTW: I saw someone claim that aside from the efficiency of the market +there were also gains to society from irrational behavior. + +If a society has business people that systematically overestimate their +chances, that is bad for the businessmen but on net a big gain for +society. On the social level, the law of averages works to societies +benefit in a manner it can't for an individual. + +A key reason, in this view, that the US wound up outperforming England +was that the English investors were too rational for their societies own +good. + +(Except, of course, when US investors were bilking them to build canals +and railroads over here. Thanks, guys.) + +===================== + +Applied to telecom: a lot of dark wire (glass) and innovation will +eventually be used for pennies on the dollar, the benefits to society +and the costs to the investors. + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00933.20b1ef5013048f152931fb6c4e92e9ce b/Ch3/datasets/spam/easy_ham/00933.20b1ef5013048f152931fb6c4e92e9ce new file mode 100644 index 000000000..d93a65e77 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00933.20b1ef5013048f152931fb6c4e92e9ce @@ -0,0 +1,60 @@ +From fork-admin@xent.com Wed Aug 28 10:50:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id ED32243F9B + for ; Wed, 28 Aug 2002 05:50:41 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:50:41 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7RMUiZ28625 for ; + Tue, 27 Aug 2002 23:30:44 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D88112940B5; Tue, 27 Aug 2002 15:28:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp03.mrf.mail.rcn.net (smtp03.mrf.mail.rcn.net + [207.172.4.62]) by xent.com (Postfix) with ESMTP id 4CE5B29409A for + ; Tue, 27 Aug 2002 15:27:59 -0700 (PDT) +X-Info: This message was accepted for relay by smtp03.mrf.mail.rcn.net as + the sender used SMTP authentication +X-Trace: UmFuZG9tSVZS1MQn43DX+mF8g/trLv8mynH5s/LrEHehkhaZqH3TtcK5PDdI09YGwM0XUAYWOKM= +Received: from eb-174121.od.nih.gov ([156.40.174.121] + helo=TOSHIBA-L8QYR7M) by smtp03.mrf.mail.rcn.net with asmtp (Exim 3.35 #6) + id 17joqW-0005wP-00 for fork@xent.com; Tue, 27 Aug 2002 18:30:00 -0400 +From: "John Evdemon" +To: fork@spamassassin.taint.org +MIME-Version: 1.0 +Subject: Re: DataPower announces XML-in-silicon +Message-Id: <3D6BC527.28671.1437E0A@localhost> +Priority: normal +In-Reply-To: <5D5CC294-BA08-11D6-837F-000393A46DEA@alumni.caltech.edu> +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7BIT +Content-Description: Mail message body +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 18:29:59 -0400 + +On 27 Aug 2002 at 15:00, Rohit Khare wrote: +> +> DATAPOWER TECHNOLOGY ON Monday unveiled its network device +> designed specifically to process XML data. Unlike competing +> solutions that process XML data in software, DataPower's +> device processes the data in hardware -- a technology +> achievement that provides greater performance, according to +> company officials. +> +Sarvega seems to have a similar product. http://www.sarvega.com. + diff --git a/Ch3/datasets/spam/easy_ham/00934.f9ba910a655535304bf26a3e281cb324 b/Ch3/datasets/spam/easy_ham/00934.f9ba910a655535304bf26a3e281cb324 new file mode 100644 index 000000000..9141cef3d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00934.f9ba910a655535304bf26a3e281cb324 @@ -0,0 +1,539 @@ +From fork-admin@xent.com Wed Aug 28 10:50:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 301BA43F99 + for ; Wed, 28 Aug 2002 05:50:34 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:50:34 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7RMJvZ28133 for ; + Tue, 27 Aug 2002 23:19:58 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 058882940E9; Tue, 27 Aug 2002 15:17:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from usilms55.ca.com (mail3.cai.com [141.202.248.42]) by + xent.com (Postfix) with ESMTP id 3BE0D29409A for ; + Tue, 27 Aug 2002 15:16:36 -0700 (PDT) +Received: from usilms27.ca.com ([141.202.201.27]) by usilms55.ca.com with + Microsoft SMTPSVC(5.0.2195.4905); Tue, 27 Aug 2002 18:18:37 -0400 +Content-Class: urn:content-classes:message +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +X-Mimeole: Produced By Microsoft Exchange V6.0.6249.0 +Subject: RE: DataPower announces XML-in-silicon +Message-Id: +X-MS-Has-Attach: +X-MS-Tnef-Correlator: +Thread-Topic: DataPower announces XML-in-silicon +Thread-Index: AcJOFaOfnL+c8iYjSPGX6aQl6iGg7wAAdJ+g +From: "Meltsner, Kenneth" +To: "Rohit Khare" , +X-Originalarrivaltime: 27 Aug 2002 22:18:37.0915 (UTC) FILETIME=[B0EA3AB0:01C24E17] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 18:18:37 -0400 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7RMJvZ28133 + +If it's not stateful, it wouldn't seem to be worth the effort, although I guess it might help with DDoS attacks. + +Sounds snake-oilish to me, but I'm biased by lots of experience with firewalls and proxy servers, and the limitations thereof. + +Ken + + +> -----Original Message----- +> From: Rohit Khare [mailto:khare@alumni.caltech.edu] +> Sent: Tuesday, August 27, 2002 5:00 PM +> To: fork@spamassassin.taint.org +> Subject: DataPower announces XML-in-silicon +> +> +> No analysis yet... don't know what to make of it yet. But +> here's the raw +> bits for all to peruse and check out what's really going on... Best, +> Rohit +> +> =========================================================== +> +> DataPower delivers XML acceleration device +> By Scott Tyler Shafer +> August 27, 2002 5:46 am PT +> +> DATAPOWER TECHNOLOGY ON Monday unveiled its network device designed +> specifically to process XML data. Unlike competing solutions that +> process XML data in software, DataPower's device processes +> the data in +> hardware -- a technology achievement that provides greater +> performance, +> according to company officials. +> +> The new device, dubbed DataPower XA35 XML Accelerator, is the +> first in a +> family of products expected from the Cambridge, Mass.-based +> startup. The +> DataPower family is based on a proprietary processing core technology +> called XG3 that does the analysis, parsing, and processing of the XML +> data. +> +> According to Steve Kelly, CEO of DataPower, the XA35 Accelerator was +> conceived to meet the steady adoption of XML, the anticipated future +> proliferation of Web services, and as a means to share data +> between two +> businesses. +> +> "Our vision is to build out an XML-aware infrastructure," Kelly said. +> "The XA35 is the first of a family." +> +> Kelly explained that converting data into XML increases the +> file size up +> to 20 times. This, he said, makes processing the data very taxing on +> application servers; DataPower believes an inline device is the best +> alternative. +> +> In addition to the large file sizes, security is also of paramount +> importance in the world of XML. +> +> "Today's firewalls are designed to inspect HTTP traffic only," Kelly +> said. "A SOAP packet with XML will go straight through a firewall. +> Firewalls are blind to XML today." +> +> Future products in DataPowers family will focus more specifically on +> security, especially as Web services proliferate, Kelly said. +> +> According to DataPower, most existing solutions to offload XML +> processing are homegrown and done in software -- an approach +> the company +> itself tried initially and found to be inadequate with +> regards to speed +> and security. After trying the software path, the company turned to +> creating a solution that would process XML in hardware. +> +> "Our XG3 execution core converts XML to machine code," said Kelly, +> adding that to his knowledge no other company's solution does. Kelly +> said in the next few months he expects the market to be flooded with +> technologies that claim to do XML processing -- claims that +> he believes +> will be mostly false. +> Other content-aware switches, such as SSL (secure socket layer) +> accelerators and load balancers, look at the first 64 bytes +> of a packet, +> while the XA35 provides deeper packet inspection, looking at +> 1,400 bytes +> and thus enabling greater processing of XML data, Kelly explained. +> +> The 1U-high network device has been tested against a large +> collection of +> XML and XSL data types and can learn new flavors of the +> markup language +> as they pass through the device. +> +> The XA35 can be deployed in proxy mode behind a firewall and a load +> balancer, and it will inspect all traffic that passes and +> will identify +> and process those packets that are XML, Kelly said. +> +> In addition to proxy mode, the device can also be used as an +> application +> co-processor. This deployment method gives administrators +> more granular +> control over what data is inspected and the application server itself +> controls the device. +> +> DataPower is not the only company chasing this emerging +> market. Startup +> Sarvega, based in Burr Ridge, Ill., introduced the Sarvega +> XPE switch in +> May, and earlier this month Tarari, an Intel spin-off, +> launched with a +> focus on content processing and acceleration. +> The DataPower device is now available, priced starting at +> $54,995. The +> company has announced one customer to date and says the product is in +> field trails at a number of other enterprises. +> +> ============================================================== +> =========== +> +> DataPower has been addressing enterprise networking needs +> since it was +> founded in early 1999 by Eugene Kuznetsov, a technology visionary who +> foresaw the adverse effects XML and other next generation protocols +> would have on enterprise networks. Long before industry +> interest in XML +> grew, Kuznetsov assembled a team of world-class M.I.T. engineers and +> designed the industry's first solutions to address the unique +> requirements for processing XML. The first such solution was +> a software +> interpreter called DGXT. This software-based approach to XML +> processing +> is still licensed by many companies for use in their own +> products today. +> +> Leveraging the detailed knowledge and customer experience gained from +> developing software-based accelerators, Kuznetsov's team +> raised the bar +> and designed a system for processing XML in purpose-built +> hardware. In +> 2001, DataPower's effort produced XML Generation Three (XG3™), the +> industry's fastest technology for XML processing, bar none. +> +> Today, XG3™ technology powers the industry's first wire-speed XML +> network devices, enabling secure, high-speed applications and XML Web +> Services. While other companies are just now marketing first +> versions of +> products, DataPower is delivering its third generation of technology, +> providing an immediate return on technology investments to +> industry-leading customers and partners. +> +> DataPower's M.I.T. heritage is complemented by a management team that +> brings decades of experience in the networking and computing +> industries, +> drawing veteran leaders from several successful companies including +> Akamai, Argon, Cascade, Castle Networks, Sycamore and Wellfleet. +> +> ============================================================== +> =========== +> +> DataPower Technology Secures $9.5 Million in Funding +> +> Venrock Associates, Mobius Venture Capital and Seed Capital +> Back Pioneer +> in XML-Aware Networking for Web Services +> +> CAMBRIDGE, Mass. - July 8, 2002 - DataPower Technology, Inc., the +> leading provider of XML-Aware network infrastructure, today announced +> that it has secured $9.5 million in series B financing. Investors for +> this round include Venrock Associates, Mobius Venture Capital +> and Seed +> Capital Partners. Michael Tyrrell, of Venrock, Bill Burnham, +> of Mobius, +> and Jeff Fagnan, of Seed Capital, have joined DataPower’s Board of +> Directors. +> +> DataPower will use this funding to accelerate development, +> marketing and +> sales of the company’s breakthrough technology for XML-Aware +> networking. +> Founded in 1999, DataPower invented the world’s first intelligent XML +> networking devices, capable of transforming XML traffic and +> transactions +> at the wire-speed enterprises need to effectively embrace Web +> services +> and other XML-centric initiatives. DataPower’s solutions are based on +> its patent-pending XML Generation Three (XG3™) technology. +> +> "Enterprises are adopting XML at rapid rate to facilitate inter-and +> intra-company communications but their network infrastructure is ill +> prepared to support the requirements of this new traffic type. +> DataPower’s XML-acceleration devices enable the wirespeed +> processing of +> XML that is required to support next generation enterprise +> applications," said Eugene Kuznetsov, CTO and founder of DataPower +> Technology. +> +> "DataPower gives companies the ability to use XML that’s +> critical to Web +> services projects without sacrificing an ounce of +> performance." A single +> DataPower acceleration engine delivers the processing power of 10 +> servers—breaking the performance bottleneck associated with XML +> processing and delivering an extraordinary return on investment. In +> addition, the DataPower platform provides enhanced XML security, +> protection against XML-based denial-of-service attacks, connection of +> e-business protocols for incompatible XML data streams, load +> balancing +> between back-end servers and real-time statistics reports. +> +> "In the post-bubble economy, technology investment decisions require +> laser-focused scrutiny. DataPower’s patent-pending technology +> addresses +> a very real and growing pain point for enterprises," said Michael +> Tyrrell of Venrock Associates. "By turbo-charging their networks with +> DataPower’s unique XML-Aware networking technology, companies will be +> free to adopt next generation Web services without encountering +> performance and security pitfalls." +> +> "We looked long and hard for a company capable of addressing +> the rapidly +> growing problems surrounding XML message processing performance and +> security," said Bill Burnham of Mobius Venture Capital. +> "DataPower is on +> their third generation of technology. Their patent pending XML +> Generation Three (XG3) technology was quite simply the single most +> compelling technology solution we have seen to date." +> +> "XML is not a nice-to-have, it is a must have for enterprises serious +> about optimizing application efficiency. Since 1999, +> DataPower has been +> developing solutions to facilitate enterprise use of XML and Web +> services," said Jeff Fagnan of Seed Capital Partners. "DataPower’s +> XML-acceleration devices are a key requirement for +> enterprises that rely +> on XML for mission critical applications." +> +> About Venrock Associates +> Venrock Associates was founded as the venture capital arm of the +> Rockefeller Family and continues a tradition of funding entrepreneurs +> that now spans over seven decades. Laurance S. Rockefeller pioneered +> early stage venture financing in the 1930s. With over 300 investments +> over a span of more than 70 years, the firm has an +> established a track +> record of identifying and supporting promising early stage, +> technology- +> based enterprises. As one of most experienced venture firms in the +> United States, Venrock maintains a tradition of collaboration with +> talented entrepreneurs to establish successful, enduring companies. +> Venrock's continuing goal is to create long-term value by assisting +> entrepreneurs in building companies from the formative stages. Their +> consistent focus on Information Technology and Life Sciences-related +> opportunities provides a reservoir of knowledge and a network of +> contacts that have proven to be a catalyst for the growth of +> developing +> organizations. Venrock's investments have included CheckPoint +> Software, +> USinternetworking, Caliper Technologies, Illumina, Niku, DoubleClick, +> Media Metrix, 3COM, Intel, and Apple Computer. With offices +> in New York +> City, Cambridge, MA, and Menlo Park, CA, Venrock is well +> positioned to +> respond to opportunities in any locale. For more information +> on Venrock +> Associates, please visit www.venrock.com +> +> About Mobius Venture Capital +> Mobius Venture Capital, formerly SOFTBANK Venture Capital, is a $2.5 +> billion U.S.-based private equity venture capital firm managed by an +> unparalleled team of former CEOs and entrepreneurs, +> technology pioneers, +> senior executives from major technology corporations, and +> leaders from +> the investment banking community. Mobius Venture Capital specializes +> primarily in early-stage investments in the areas of: communications +> systems software and services; infrastructure software and services; +> professional services; enterprise applications; healthcare +> informatics; +> consumer and small business applications; components; and emerging +> technologies. Mobius Venture Capital combines its technology +> expertise +> and broad financial assets with the industry's best entrepreneurs to +> create a powerhouse portfolio of over 100 of the world's leading high +> technology companies. Mobius Venture Capital can be contacted by +> visiting their web site www.mobiusvc.com. +> +> About Seed Capital Partners +> Seed Capital Partners is an early-stage venture fund affiliated with +> SoftBank Corporation, one of the world's leading Internet +> market forces. +> Seed Capital manages funds focused primarily on companies addressing +> Internet-enabled business-to-business digital information technology +> opportunities, which are located in the Northeastern U.S., the +> southeastern region of the Province of Ontario, Canada, and +> Israel. Seed +> Capital’s portfolio includes Spearhead Technologies, +> Concentric Visions +> and CompanyDNA. For more information on Seed Capital Partners, please +> visit www.seedcp.com. +> +> About DataPower Technology +> DataPower Technology provides enterprises with intelligent XML-Aware +> network infrastructure to ensure unparalleled performance, +> security and +> manageability of next-generation protocols. DataPower’s +> patent-pending +> XML Generation Three (XG3™) technology powers the industry’s first +> wirespeed XML network devices, enabling secure, high-speed +> applications +> and XML Web Services. Founded in 1999, DataPower is now +> delivering its +> third generation of technology, providing immediate return on +> technology +> investments to industry-leading customers and partners. DataPower is +> privately held and based in Cambridge, MA. Investors include Mobius +> Venture Capital, Seed Capital Partners, and Venrock Associates. +> +> CONTACT: +> +> DataPower Technology, Inc. +> Kieran Taylor +> 617-864-0455 +> kieran@datapower.com +> +> Schwartz Communications +> John Moran/Heather Chichakly +> 781-684-0770 +> datapower@schwartz-pr.com +> +> ============================================================== +> ========== +> +> Steve Kelly, chairman and CEO +> +> During over twenty years in the technology industry, Steve Kelly has +> built and managed global enterprise networks, provided consulting +> services to Fortune 50 businesses, and been involved in the launch of +> several start-ups. Prior to DataPower, Kelly was an +> entrepreneur-in-residence at Venrock Associates, and was +> co-founder of +> Castle Networks, where he led the company's sales, service +> and marketing +> functions. Castle was acquired by Siemens AG in 1999 to +> create Unisphere +> Networks, which was subsequently purchased by Juniper Networks. Kelly +> was an early contributor at Cascade Communications, where he +> built and +> managed the company's core switching business; Cascade's +> annual revenues +> grew from $2 million to $300 million annually during Kelly's tenure. +> Kelly also worked at Digital Equipment Corporation where he +> managed and +> grew their corporate network to 50,000+ nodes in 28 countries, the +> largest in the world at the time. Kelly has a B.S. in Information +> Systems from Bentley College. +> +> Eugene Kuznetsov, founder, president and CTO +> +> Eugene Kuznetsov is a technology visionary that has been working to +> address enterprise XML issues since the late 90s. Kuznetsov founded +> DataPower Technology, Inc. in 1999 to provide enterprises with an +> intelligent, XML-aware network infrastructure to support +> next-generation +> applications. Prior to starting DataPower, Kuznetsov led the Java JIT +> Compiler effort for Microsoft Internet Explorer for Macintosh 4.0. He +> was also part of the team which developed one of the first clean room +> Java VM's. This high-speed runtime technology was licensed by some of +> the industry's largest technology companies, including Apple +> Computer. +> He has consulted to numerous companies and worked on a variety of +> hardware and software engineering problems in the areas of memory +> management, power electronics, optimized execution engines and +> application integration. Kuznetsov holds a B.S. in electrical +> engineering from MIT. +> +> Steve Willis, vice president of advanced technology +> +> Steve Willis is an accomplished entrepreneur and a pioneer in +> protocol +> optimization. Prior to joining DataPower, Willis was +> co-founder and CTO +> of Argon Networks, a provider of high-performance switching +> routers that +> was acquired by Siemens AG in 1999 to create Unisphere Networks; +> Unisphere was subsequently purchased by Juniper Networks. +> Before Argon, +> Steve was vice president of advanced technology at Bay Networks (now +> Nortel Networks) where he led both IP and ATM-related technology +> development and managed a group that generated 24 patent +> applications, +> developed a 1 Mbps forwarding engine and led the specification of the +> ATM Forum's PNNI routing protocol. Most notably, Steve was +> co-founder, +> original software director and architect for Wellfleet +> Communications, a +> leading pioneer of multi-protocol routers. Wellfleet was rated as the +> fastest growing company in the U.S. for two consecutive years +> by Fortune +> magazine. Willis is currently a member of the Institute of Electrical +> and Electronics Engineers (IEEE) and the Internet Research Task Force +> (IRTF) Routing Research Group. Willis has a B.D.I.C. in +> Computer Science +> from the University of Massachusetts. +> +> Bill Tao, vice president of engineering +> +> With a vast understanding of network optimization technologies and +> extensive experience in LAN and WAN networking, Bill Tao +> brings over 25 +> years of critical knowledge to lead DataPower's engineering efforts. +> Prior to DataPower, Tao was the vice president of engineering for +> Sycamore Networks, developing a family of metro/regional +> optical network +> switches. He is also well acquainted with network optimization +> techniques as he was previously vice president of engineering at +> InfoLibria, where he led development and software quality assurance +> engineering for a family of network caching products. Tao has held +> senior engineering positions at NetEdge, Proteon, Codex and Wang. Tao +> received a B.S. in Electrical Engineering from the University of +> Connecticut and an M.S. in Computer Science from the University of +> Illinois. +> +> Kieran Taylor, director of product marketing +> +> Kieran Taylor has an accomplished record as a marketing professional, +> industry analyst and journalist. Prior to joining DataPower, +> Taylor was +> the director of product management and marketing for Akamai +> Technologies +> (NASDAQ: AKAM). As an early contributor at Akamai, he helped +> develop the +> company's initial positioning and led the technical development and +> go-to-market activities for Akamai's flagship EdgeSuite service. +> Taylor's early contribution helped position the service provider to +> secure a $12.6 billion IPO. He has also held senior marketing +> management +> positions at Nortel Networks, Inc. and Bay Networks. Taylor was +> previously an analyst at TeleChoice, Inc. and the Wide Area Networks +> editor for Data Communications, a McGraw Hill publication. +> Taylor holds +> a B.A. in Print Journalism from the Pennsylvania State +> University School +> of Communications. +> +> ================================================================= +> Board of Advisors +> +> Mark Hoover +> Mark Hoover is President and co-founder of Acuitive, Inc., a start-up +> accelerator. With over 20 years experience in the networking +> industry, +> Hoover's expertise spans product development, marketing, and business +> development. Before launching Acuitive, Hoover worked at AT&T Bell +> Laboratories, AT&T Computer Systems, SynOptics, and Bay +> Networks, where +> he played a role in the development of key technologies, such as +> 10-BASET, routing, FDDI, ATM, Ethernet switching, firewall, Internet +> traffic management, and edge WAN switch industries. +> +> George Kassabgi +> Currently Vice President of Engineering at BEA Systems, Mr. +> Kassabgi has +> held executive-level positions in engineering, sales and +> marketing, and +> has spearheaded leading-edge developments in the application server +> marketplace since 1996. He is widely known for his regular speaking +> engagements at JavaOne, as well as columns and contributions +> in JavaPro, +> Java Developer's Journal and other publications. In addition +> to being a +> venerated Java expert, George Kassabgi holds a patent on SmartObject +> Technology, and authored the technical book Progress V8. +> +> Marshall T. Rose +> Marshall T. Rose runs his own firm, Dover Beach Consulting, Inc. He +> formerly held the position of the Internet Engineering Task +> Force (IETF) +> Area Director for Network Management, one of a dozen individuals who +> oversaw the Internet's standardization process. Rose is the author of +> several professional texts on subjects such as Internet Management, +> Electronic Mail, and Directory Services, which have been published in +> four languages. He is well known for his implementations of core +> Internet technologies (such as POP, SMTP, and SNMP) and OSI +> technologies +> (such as X.500 and FTAM). Rose received a PhD in Information and +> Computer Science from the University of California, Irvine, in 1984. +> +> + diff --git a/Ch3/datasets/spam/easy_ham/00935.8ecbeab3ef30caba2c29e25744a2265a b/Ch3/datasets/spam/easy_ham/00935.8ecbeab3ef30caba2c29e25744a2265a new file mode 100644 index 000000000..f712560da --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00935.8ecbeab3ef30caba2c29e25744a2265a @@ -0,0 +1,62 @@ +From fork-admin@xent.com Wed Aug 28 10:50:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 77A5C44155 + for ; Wed, 28 Aug 2002 05:50:50 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:50:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7RMhiZ29101 for ; + Tue, 27 Aug 2002 23:43:44 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 17EAF294183; Tue, 27 Aug 2002 15:41:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from smtp03.mrf.mail.rcn.net (smtp03.mrf.mail.rcn.net + [207.172.4.62]) by xent.com (Postfix) with ESMTP id D2F5129409A for + ; Tue, 27 Aug 2002 15:40:27 -0700 (PDT) +X-Info: This message was accepted for relay by smtp03.mrf.mail.rcn.net as + the sender used SMTP authentication +X-Trace: UmFuZG9tSVa87sYWrSluYXSK7DPiKMqonQmSCJAzc+sc8Ru+zPNZzmuJmF6sE0EFamayqye2fwY= +Received: from eb-174121.od.nih.gov ([156.40.174.121] + helo=TOSHIBA-L8QYR7M) by smtp03.mrf.mail.rcn.net with asmtp (Exim 3.35 #6) + id 17jp2b-0007bg-00 for fork@xent.com; Tue, 27 Aug 2002 18:42:29 -0400 +From: "John Evdemon" +To: fork@spamassassin.taint.org +MIME-Version: 1.0 +Subject: Re: DataPower announces XML-in-silicon +Message-Id: <3D6BC814.23250.14EE9A8@localhost> +Priority: normal +In-Reply-To: <5D5CC294-BA08-11D6-837F-000393A46DEA@alumni.caltech.edu> +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Type: text/plain; charset=ISO-8859-1 +Content-Description: Mail message body +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 18:42:28 -0400 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from Quoted-printable to 8bit by dogma.slashnull.org + id g7RMhiZ29101 + +On 27 Aug 2002 at 15:00, Rohit Khare wrote: + +> DataPower delivers XML acceleration device +> By Scott Tyler Shafer +> August 27, 2002 5:46 am PT +> +Intel also had a similar device a couple of years ago (Netstructure). They have, afaik, abandoned it. + +Intel is still in the XML hardware game though. On 8/19 they spun off a company named Tarari. Tarari develops hardware to check the headers of IP packets. Tarari calls +this Layer 7 processing (atop the OSI model). From what I can tell, Tarari plans to combine virus scanning and XML acceleration into a single hardware device. + diff --git a/Ch3/datasets/spam/easy_ham/00936.e8fd8c240b680e948f85f2326cc87250 b/Ch3/datasets/spam/easy_ham/00936.e8fd8c240b680e948f85f2326cc87250 new file mode 100644 index 000000000..3f217ec2a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00936.e8fd8c240b680e948f85f2326cc87250 @@ -0,0 +1,480 @@ +From fork-admin@xent.com Wed Aug 28 10:51:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 27C9E43F9B + for ; Wed, 28 Aug 2002 05:51:00 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:51:01 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7S0KvZ03252 for ; + Wed, 28 Aug 2002 01:20:59 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 93DD1294216; Tue, 27 Aug 2002 17:18:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mrwhite.privacyright.com (unknown [64.169.55.226]) by + xent.com (Postfix) with ESMTP id 8017829409A for ; + Tue, 27 Aug 2002 17:17:03 -0700 (PDT) +Received: by mrwhite.privacyright.com with Internet Mail Service + (5.5.2650.21) id ; Tue, 27 Aug 2002 17:17:44 -0700 +Message-Id: +From: Paul Sholtz +To: "'Rohit Khare '" , + "'fork@xent.com '" +Subject: RE: DataPower announces XML-in-silicon +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2650.21) +Content-Type: text/plain; charset="windows-1252" +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 17:17:41 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7S0KvZ03252 + +Hardware acceleration for SSL makes sense since PKI can slow down a +transaction by as much as 1,000-fold. Per this article, XML formatting only +increases doc size by about 20-fold.. I'm not sure there are enough "powers +of ten" in there to justify hardware acceleration. + +Expect the next major release from DataPower to be the revolutionary new +"email chip" - allows you to offload the sending and receiving of email +messages onto dedicated hardware while you get on w/ more important things +.. like listening to MP3s.. + +Best, +Paul Sholtz + +-----Original Message----- +From: Rohit Khare +To: fork@spamassassin.taint.org +Sent: 8/27/02 3:00 PM +Subject: DataPower announces XML-in-silicon + +No analysis yet... don't know what to make of it yet. But here's the raw + +bits for all to peruse and check out what's really going on... Best, +Rohit + +=========================================================== + +DataPower delivers XML acceleration device +By Scott Tyler Shafer +August 27, 2002 5:46 am PT + +DATAPOWER TECHNOLOGY ON Monday unveiled its network device designed +specifically to process XML data. Unlike competing solutions that +process XML data in software, DataPower's device processes the data in +hardware -- a technology achievement that provides greater performance, +according to company officials. + +The new device, dubbed DataPower XA35 XML Accelerator, is the first in a + +family of products expected from the Cambridge, Mass.-based startup. The + +DataPower family is based on a proprietary processing core technology +called XG3 that does the analysis, parsing, and processing of the XML +data. + +According to Steve Kelly, CEO of DataPower, the XA35 Accelerator was +conceived to meet the steady adoption of XML, the anticipated future +proliferation of Web services, and as a means to share data between two +businesses. + +"Our vision is to build out an XML-aware infrastructure," Kelly said. +"The XA35 is the first of a family." + +Kelly explained that converting data into XML increases the file size up + +to 20 times. This, he said, makes processing the data very taxing on +application servers; DataPower believes an inline device is the best +alternative. + +In addition to the large file sizes, security is also of paramount +importance in the world of XML. + +"Today's firewalls are designed to inspect HTTP traffic only," Kelly +said. "A SOAP packet with XML will go straight through a firewall. +Firewalls are blind to XML today." + +Future products in DataPowers family will focus more specifically on +security, especially as Web services proliferate, Kelly said. + +According to DataPower, most existing solutions to offload XML +processing are homegrown and done in software -- an approach the company + +itself tried initially and found to be inadequate with regards to speed +and security. After trying the software path, the company turned to +creating a solution that would process XML in hardware. + +"Our XG3 execution core converts XML to machine code," said Kelly, +adding that to his knowledge no other company's solution does. Kelly +said in the next few months he expects the market to be flooded with +technologies that claim to do XML processing -- claims that he believes +will be mostly false. +Other content-aware switches, such as SSL (secure socket layer) +accelerators and load balancers, look at the first 64 bytes of a packet, + +while the XA35 provides deeper packet inspection, looking at 1,400 bytes + +and thus enabling greater processing of XML data, Kelly explained. + +The 1U-high network device has been tested against a large collection of + +XML and XSL data types and can learn new flavors of the markup language +as they pass through the device. + +The XA35 can be deployed in proxy mode behind a firewall and a load +balancer, and it will inspect all traffic that passes and will identify +and process those packets that are XML, Kelly said. + +In addition to proxy mode, the device can also be used as an application + +co-processor. This deployment method gives administrators more granular +control over what data is inspected and the application server itself +controls the device. + +DataPower is not the only company chasing this emerging market. Startup +Sarvega, based in Burr Ridge, Ill., introduced the Sarvega XPE switch in + +May, and earlier this month Tarari, an Intel spin-off, launched with a +focus on content processing and acceleration. +The DataPower device is now available, priced starting at $54,995. The +company has announced one customer to date and says the product is in +field trails at a number of other enterprises. + +======================================================================== += + +DataPower has been addressing enterprise networking needs since it was +founded in early 1999 by Eugene Kuznetsov, a technology visionary who +foresaw the adverse effects XML and other next generation protocols +would have on enterprise networks. Long before industry interest in XML +grew, Kuznetsov assembled a team of world-class M.I.T. engineers and +designed the industry's first solutions to address the unique +requirements for processing XML. The first such solution was a software +interpreter called DGXT. This software-based approach to XML processing +is still licensed by many companies for use in their own products today. + +Leveraging the detailed knowledge and customer experience gained from +developing software-based accelerators, Kuznetsov's team raised the bar +and designed a system for processing XML in purpose-built hardware. In +2001, DataPower's effort produced XML Generation Three (XG3™), the +industry's fastest technology for XML processing, bar none. + +Today, XG3™ technology powers the industry's first wire-speed XML +network devices, enabling secure, high-speed applications and XML Web +Services. While other companies are just now marketing first versions of + +products, DataPower is delivering its third generation of technology, +providing an immediate return on technology investments to +industry-leading customers and partners. + +DataPower's M.I.T. heritage is complemented by a management team that +brings decades of experience in the networking and computing industries, + +drawing veteran leaders from several successful companies including +Akamai, Argon, Cascade, Castle Networks, Sycamore and Wellfleet. + +======================================================================== += + +DataPower Technology Secures $9.5 Million in Funding + +Venrock Associates, Mobius Venture Capital and Seed Capital Back Pioneer + +in XML-Aware Networking for Web Services + +CAMBRIDGE, Mass. - July 8, 2002 - DataPower Technology, Inc., the +leading provider of XML-Aware network infrastructure, today announced +that it has secured $9.5 million in series B financing. Investors for +this round include Venrock Associates, Mobius Venture Capital and Seed +Capital Partners. Michael Tyrrell, of Venrock, Bill Burnham, of Mobius, +and Jeff Fagnan, of Seed Capital, have joined DataPower’s Board of +Directors. + +DataPower will use this funding to accelerate development, marketing and + +sales of the company’s breakthrough technology for XML-Aware networking. + +Founded in 1999, DataPower invented the world’s first intelligent XML +networking devices, capable of transforming XML traffic and transactions + +at the wire-speed enterprises need to effectively embrace Web services +and other XML-centric initiatives. DataPower’s solutions are based on +its patent-pending XML Generation Three (XG3™) technology. + +"Enterprises are adopting XML at rapid rate to facilitate inter-and +intra-company communications but their network infrastructure is ill +prepared to support the requirements of this new traffic type. +DataPower’s XML-acceleration devices enable the wirespeed processing of +XML that is required to support next generation enterprise +applications," said Eugene Kuznetsov, CTO and founder of DataPower +Technology. + +"DataPower gives companies the ability to use XML that’s critical to Web + +services projects without sacrificing an ounce of performance." A single + +DataPower acceleration engine delivers the processing power of 10 +servers—breaking the performance bottleneck associated with XML +processing and delivering an extraordinary return on investment. In +addition, the DataPower platform provides enhanced XML security, +protection against XML-based denial-of-service attacks, connection of +e-business protocols for incompatible XML data streams, load balancing +between back-end servers and real-time statistics reports. + +"In the post-bubble economy, technology investment decisions require +laser-focused scrutiny. DataPower’s patent-pending technology addresses +a very real and growing pain point for enterprises," said Michael +Tyrrell of Venrock Associates. "By turbo-charging their networks with +DataPower’s unique XML-Aware networking technology, companies will be +free to adopt next generation Web services without encountering +performance and security pitfalls." + +"We looked long and hard for a company capable of addressing the rapidly + +growing problems surrounding XML message processing performance and +security," said Bill Burnham of Mobius Venture Capital. "DataPower is on + +their third generation of technology. Their patent pending XML +Generation Three (XG3) technology was quite simply the single most +compelling technology solution we have seen to date." + +"XML is not a nice-to-have, it is a must have for enterprises serious +about optimizing application efficiency. Since 1999, DataPower has been +developing solutions to facilitate enterprise use of XML and Web +services," said Jeff Fagnan of Seed Capital Partners. "DataPower’s +XML-acceleration devices are a key requirement for enterprises that rely + +on XML for mission critical applications." + +About Venrock Associates +Venrock Associates was founded as the venture capital arm of the +Rockefeller Family and continues a tradition of funding entrepreneurs +that now spans over seven decades. Laurance S. Rockefeller pioneered +early stage venture financing in the 1930s. With over 300 investments +over a span of more than 70 years, the firm has an established a track +record of identifying and supporting promising early stage, technology- +based enterprises. As one of most experienced venture firms in the +United States, Venrock maintains a tradition of collaboration with +talented entrepreneurs to establish successful, enduring companies. +Venrock's continuing goal is to create long-term value by assisting +entrepreneurs in building companies from the formative stages. Their +consistent focus on Information Technology and Life Sciences-related +opportunities provides a reservoir of knowledge and a network of +contacts that have proven to be a catalyst for the growth of developing +organizations. Venrock's investments have included CheckPoint Software, +USinternetworking, Caliper Technologies, Illumina, Niku, DoubleClick, +Media Metrix, 3COM, Intel, and Apple Computer. With offices in New York +City, Cambridge, MA, and Menlo Park, CA, Venrock is well positioned to +respond to opportunities in any locale. For more information on Venrock +Associates, please visit www.venrock.com + +About Mobius Venture Capital +Mobius Venture Capital, formerly SOFTBANK Venture Capital, is a $2.5 +billion U.S.-based private equity venture capital firm managed by an +unparalleled team of former CEOs and entrepreneurs, technology pioneers, + +senior executives from major technology corporations, and leaders from +the investment banking community. Mobius Venture Capital specializes +primarily in early-stage investments in the areas of: communications +systems software and services; infrastructure software and services; +professional services; enterprise applications; healthcare informatics; +consumer and small business applications; components; and emerging +technologies. Mobius Venture Capital combines its technology expertise +and broad financial assets with the industry's best entrepreneurs to +create a powerhouse portfolio of over 100 of the world's leading high +technology companies. Mobius Venture Capital can be contacted by +visiting their web site www.mobiusvc.com. + +About Seed Capital Partners +Seed Capital Partners is an early-stage venture fund affiliated with +SoftBank Corporation, one of the world's leading Internet market forces. + +Seed Capital manages funds focused primarily on companies addressing +Internet-enabled business-to-business digital information technology +opportunities, which are located in the Northeastern U.S., the +southeastern region of the Province of Ontario, Canada, and Israel. Seed + +Capital’s portfolio includes Spearhead Technologies, Concentric Visions +and CompanyDNA. For more information on Seed Capital Partners, please +visit www.seedcp.com. + +About DataPower Technology +DataPower Technology provides enterprises with intelligent XML-Aware +network infrastructure to ensure unparalleled performance, security and +manageability of next-generation protocols. DataPower’s patent-pending +XML Generation Three (XG3™) technology powers the industry’s first +wirespeed XML network devices, enabling secure, high-speed applications +and XML Web Services. Founded in 1999, DataPower is now delivering its +third generation of technology, providing immediate return on technology + +investments to industry-leading customers and partners. DataPower is +privately held and based in Cambridge, MA. Investors include Mobius +Venture Capital, Seed Capital Partners, and Venrock Associates. + +CONTACT: + +DataPower Technology, Inc. +Kieran Taylor +617-864-0455 +kieran@datapower.com + +Schwartz Communications +John Moran/Heather Chichakly +781-684-0770 +datapower@schwartz-pr.com + +======================================================================== + +Steve Kelly, chairman and CEO + +During over twenty years in the technology industry, Steve Kelly has +built and managed global enterprise networks, provided consulting +services to Fortune 50 businesses, and been involved in the launch of +several start-ups. Prior to DataPower, Kelly was an +entrepreneur-in-residence at Venrock Associates, and was co-founder of +Castle Networks, where he led the company's sales, service and marketing + +functions. Castle was acquired by Siemens AG in 1999 to create Unisphere + +Networks, which was subsequently purchased by Juniper Networks. Kelly +was an early contributor at Cascade Communications, where he built and +managed the company's core switching business; Cascade's annual revenues + +grew from $2 million to $300 million annually during Kelly's tenure. +Kelly also worked at Digital Equipment Corporation where he managed and +grew their corporate network to 50,000+ nodes in 28 countries, the +largest in the world at the time. Kelly has a B.S. in Information +Systems from Bentley College. + +Eugene Kuznetsov, founder, president and CTO + +Eugene Kuznetsov is a technology visionary that has been working to +address enterprise XML issues since the late 90s. Kuznetsov founded +DataPower Technology, Inc. in 1999 to provide enterprises with an +intelligent, XML-aware network infrastructure to support next-generation + +applications. Prior to starting DataPower, Kuznetsov led the Java JIT +Compiler effort for Microsoft Internet Explorer for Macintosh 4.0. He +was also part of the team which developed one of the first clean room +Java VM's. This high-speed runtime technology was licensed by some of +the industry's largest technology companies, including Apple Computer. +He has consulted to numerous companies and worked on a variety of +hardware and software engineering problems in the areas of memory +management, power electronics, optimized execution engines and +application integration. Kuznetsov holds a B.S. in electrical +engineering from MIT. + +Steve Willis, vice president of advanced technology + +Steve Willis is an accomplished entrepreneur and a pioneer in protocol +optimization. Prior to joining DataPower, Willis was co-founder and CTO +of Argon Networks, a provider of high-performance switching routers that + +was acquired by Siemens AG in 1999 to create Unisphere Networks; +Unisphere was subsequently purchased by Juniper Networks. Before Argon, +Steve was vice president of advanced technology at Bay Networks (now +Nortel Networks) where he led both IP and ATM-related technology +development and managed a group that generated 24 patent applications, +developed a 1 Mbps forwarding engine and led the specification of the +ATM Forum's PNNI routing protocol. Most notably, Steve was co-founder, +original software director and architect for Wellfleet Communications, a + +leading pioneer of multi-protocol routers. Wellfleet was rated as the +fastest growing company in the U.S. for two consecutive years by Fortune + +magazine. Willis is currently a member of the Institute of Electrical +and Electronics Engineers (IEEE) and the Internet Research Task Force +(IRTF) Routing Research Group. Willis has a B.D.I.C. in Computer Science + +from the University of Massachusetts. + +Bill Tao, vice president of engineering + +With a vast understanding of network optimization technologies and +extensive experience in LAN and WAN networking, Bill Tao brings over 25 +years of critical knowledge to lead DataPower's engineering efforts. +Prior to DataPower, Tao was the vice president of engineering for +Sycamore Networks, developing a family of metro/regional optical network + +switches. He is also well acquainted with network optimization +techniques as he was previously vice president of engineering at +InfoLibria, where he led development and software quality assurance +engineering for a family of network caching products. Tao has held +senior engineering positions at NetEdge, Proteon, Codex and Wang. Tao +received a B.S. in Electrical Engineering from the University of +Connecticut and an M.S. in Computer Science from the University of +Illinois. + +Kieran Taylor, director of product marketing + +Kieran Taylor has an accomplished record as a marketing professional, +industry analyst and journalist. Prior to joining DataPower, Taylor was +the director of product management and marketing for Akamai Technologies + +(NASDAQ: AKAM). As an early contributor at Akamai, he helped develop the + +company's initial positioning and led the technical development and +go-to-market activities for Akamai's flagship EdgeSuite service. +Taylor's early contribution helped position the service provider to +secure a $12.6 billion IPO. He has also held senior marketing management + +positions at Nortel Networks, Inc. and Bay Networks. Taylor was +previously an analyst at TeleChoice, Inc. and the Wide Area Networks +editor for Data Communications, a McGraw Hill publication. Taylor holds +a B.A. in Print Journalism from the Pennsylvania State University School + +of Communications. + +================================================================= +Board of Advisors + +Mark Hoover +Mark Hoover is President and co-founder of Acuitive, Inc., a start-up +accelerator. With over 20 years experience in the networking industry, +Hoover's expertise spans product development, marketing, and business +development. Before launching Acuitive, Hoover worked at AT&T Bell +Laboratories, AT&T Computer Systems, SynOptics, and Bay Networks, where +he played a role in the development of key technologies, such as +10-BASET, routing, FDDI, ATM, Ethernet switching, firewall, Internet +traffic management, and edge WAN switch industries. + +George Kassabgi +Currently Vice President of Engineering at BEA Systems, Mr. Kassabgi has + +held executive-level positions in engineering, sales and marketing, and +has spearheaded leading-edge developments in the application server +marketplace since 1996. He is widely known for his regular speaking +engagements at JavaOne, as well as columns and contributions in JavaPro, + +Java Developer's Journal and other publications. In addition to being a +venerated Java expert, George Kassabgi holds a patent on SmartObject +Technology, and authored the technical book Progress V8. + +Marshall T. Rose +Marshall T. Rose runs his own firm, Dover Beach Consulting, Inc. He +formerly held the position of the Internet Engineering Task Force (IETF) + +Area Director for Network Management, one of a dozen individuals who +oversaw the Internet's standardization process. Rose is the author of +several professional texts on subjects such as Internet Management, +Electronic Mail, and Directory Services, which have been published in +four languages. He is well known for his implementations of core +Internet technologies (such as POP, SMTP, and SNMP) and OSI technologies + +(such as X.500 and FTAM). Rose received a PhD in Information and +Computer Science from the University of California, Irvine, in 1984. + diff --git a/Ch3/datasets/spam/easy_ham/00937.1442bfa30552275d60548860104339c3 b/Ch3/datasets/spam/easy_ham/00937.1442bfa30552275d60548860104339c3 new file mode 100644 index 000000000..4f7ead460 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00937.1442bfa30552275d60548860104339c3 @@ -0,0 +1,80 @@ +From fork-admin@xent.com Wed Aug 28 10:51:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 43AC144155 + for ; Wed, 28 Aug 2002 05:51:15 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:51:15 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7S0T9Z03618 for ; + Wed, 28 Aug 2002 01:29:09 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id D6E5A294220; Tue, 27 Aug 2002 17:21:09 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mithral.com (watcher.mithral.com [204.153.244.1]) by + xent.com (Postfix) with SMTP id 3F0BC294220 for ; + Tue, 27 Aug 2002 17:20:25 -0700 (PDT) +Received: (qmail 10891 invoked by uid 1111); 28 Aug 2002 00:22:01 -0000 +From: "Adam L. Beberg" +To: Rohit Khare +Cc: +Subject: Re: DataPower announces XML-in-silicon +In-Reply-To: <5D5CC294-BA08-11D6-837F-000393A46DEA@alumni.caltech.edu> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 17:22:01 -0700 (PDT) + +On Tue, 27 Aug 2002, Rohit Khare wrote: + +> DATAPOWER TECHNOLOGY ON Monday unveiled its network device designed +> specifically to process XML data. Unlike competing solutions that +> process XML data in software, DataPower's device processes the data in +> hardware -- a technology achievement that provides greater performance, +> according to company officials. + +Now, to do this, we all know they have to be cracking the strong crypto used +on all transaction in order to process them... So this has some preaty heavy +implications, unless it's just BS. + +> Kelly explained that converting data into XML increases the file size up +> to 20 times. This, he said, makes processing the data very taxing on +> application servers; DataPower believes an inline device is the best +> alternative. + +Or.... you could just not bloat it 20x to begin with. Nah! (that was the +whole point of XML afterall, to sell more CPUs - much like Oracle's use of +Java allows them to sell 3x more CPU licenses due to the performance hit) + +> In addition to the large file sizes, security is also of paramount +> importance in the world of XML. +> +> "Today's firewalls are designed to inspect HTTP traffic only," Kelly +> said. "A SOAP packet with XML will go straight through a firewall. +> Firewalls are blind to XML today." + +Again, see above... they _are_ claiming to decode the crypto... + +> "Our XG3 execution core converts XML to machine code," said Kelly, + +Mmmmmmmmmmm, machine code, never a good idea ;) + +- Adam L. "Duncan" Beberg + http://www.mithral.com/~beberg/ + beberg@mithral.com + + diff --git a/Ch3/datasets/spam/easy_ham/00938.e1a61251ecebf0f323c7815e68bdaa27 b/Ch3/datasets/spam/easy_ham/00938.e1a61251ecebf0f323c7815e68bdaa27 new file mode 100644 index 000000000..c7ba0b5c4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00938.e1a61251ecebf0f323c7815e68bdaa27 @@ -0,0 +1,167 @@ +From fork-admin@xent.com Wed Aug 28 12:02:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 46BFF43F99 + for ; Wed, 28 Aug 2002 07:02:20 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 12:02:20 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7SAwqZ20999 for ; + Wed, 28 Aug 2002 11:58:52 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 382622940F5; Wed, 28 Aug 2002 03:56:10 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from sunserver.permafrost.net (u172n16.hfx.eastlink.ca + [24.222.172.16]) by xent.com (Postfix) with ESMTP id 3C43329409A for + ; Wed, 28 Aug 2002 03:55:46 -0700 (PDT) +Received: from [192.168.123.179] (helo=permafrost.net) by + sunserver.permafrost.net with esmtp (Exim 3.35 #1 (Debian)) id + 17k0TQ-0006Up-00 for ; Wed, 28 Aug 2002 07:54:56 -0300 +Message-Id: <3D6CAD7B.6010800@permafrost.net> +From: Owen Byrne +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.0) Gecko/20020530 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: fork@spamassassin.taint.org +Subject: Canadians again - something a little more substantive +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 08:01:15 -0300 + +Politicians worldwide are discovering the internet - what a great tool +for fascism, once you got the laws in place to solve that whole +'anonymity' thing. Also I notice this story shows the truth - the +Canadian government is really located in Washington, DC, Ottawa is just +a branch office. Come to think of it, the last story I posted about +Canada featured the head of its military, 'speaking to us from military +HQ in Palm Beach, Florida.' +Owen +---------------------------------------------------------------------------------------------------------------------------- +. +*Will Canada's ISPs become spies?* +By Declan McCullagh +Staff Writer, CNET News.com +August 27, 2002, 12:56 PM PT +http://news.com.com/2100-1023-955595.html + + +*WASHINGTON--The Canadian government is considering a proposal that +would force Internet providers to rewire their networks for easy +surveillance by police and spy agencies.* + +A discussion draft +released Sunday also contemplates creating a national database of every +Canadian with an Internet account, a plan that could sharply curtail the +right to be anonymous online. + +The Canadian government, including the Department of Justice + and Industry Canada +, wrote the 21-page blueprint as a near-final step +in a process that seeks to give law enforcement agents more authority to +conduct electronic surveillance. A proposed law based on the discussion +draft is expected to be introduced in Parliament late this year or in +early 2003. + +Arguing that more and more communications take place in electronic form, +Canadian officials say such laws are necessary to fight terrorism and +combat even run-of-the-mill crimes. They also claim that by enacting +these proposals, Canada will be following its obligations under the +Council of Europe's cybercrime treaty +, which the country is in the +process of considering. + +If the discussion draft were to become law, it would outlaw the +possession of computer viruses, authorize police to order Internet +providers to retain logs of all Web browsing for up to six months, and +permit police to obtain a search warrant allowing them to find "hidden +electronic and digital devices" that a suspect might be concealing. In +most circumstances, a court order would be required for government +agents to conduct Internet monitoring. + +Canada and the United States are nonvoting members of the Council of +Europe, and representatives from both countries' police agencies have +endorsed the controversial cybercrime treaty +, which has +drawn protests from human rights activists and civil liberties groups. +Of nearly 50 participating nations, only Albania has formally adopted +, +or ratified, the treaty. + +Michael Geist , a professor at the +University of Ottawa who specializes in e-commerce law, says that the +justification for adopting such sweeping changes to Canadian law seems +weak. + +"It seems to me that the main justification they've given for all the +changes is that we want to ratify the cybercrime treaty and we need to +make changes," Geist said. "To me that's not a particularly convincing +argument. If there are new powers needed for law enforcement authority, +make that case." + +Geist added that "there's nothing in the document that indicates (new +powers) are needed. I don't know that there have been a significant +number of cases where police have run into problems." + +Probably the most sweeping change the legal blueprint contemplates is +compelling Internet providers and telephone companies to reconfigure +their networks to facilitate government eavesdropping and data-retention +orders. The United States has a similar requirement, called the +Communications Assistance for Law Enforcement Act +, but it +applies only to pre-Internet telecommunications companies. + +"It is proposed that all service providers (wireless, wireline and +Internet) be required to ensure that their systems have the technical +capability to provide lawful access to law enforcement and national +security agencies," according to the proposal. Companies would be +responsible for paying the costs of buying new equipment. + +Sarah Andrews, an analyst at the Electronic Privacy Information Center + (EPIC) who specializes in international law, says +the proposal goes beyond what the cybercrime treaty specifies. "Their +proposal for intercept capability talks about all service providers, not +just Internet providers," Andrews said. "The cybercrime treaty deals +only with computer data." EPIC opposes + +the cybercrime treaty, saying it grants too much power to police and +does not adequately respect privacy rights. + +Another section of the proposal says the Canadian Association of Chiefs +of Police recommends "the establishment of a national database" with +personal information about all Canadian Internet users. "The +implementation of such a database would presuppose that service +providers are compelled to provide accurate and current information," +the draft says. + +Gus Hosein, a visiting fellow at the London School of Economics and an +activist with Privacy International, calls the database "a dumb idea." + +"Immediately you have to wonder if you're allowed to use anonymous +mobile phones or whether you're allowed to connect to the Internet +anonymously," Hosein said. + +A representative for George Radwanski +, Canada's privacy commissioner, said +the office is reviewing the blueprint and does not "have any comments on +the paper as it stands." + +Comments on the proposal can be sent to la-al@justice.gc.ca + no later than Nov. 15. + + + + diff --git a/Ch3/datasets/spam/easy_ham/00939.e48ae1c641ef0958595719db1befb0d9 b/Ch3/datasets/spam/easy_ham/00939.e48ae1c641ef0958595719db1befb0d9 new file mode 100644 index 000000000..0134ccad8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00939.e48ae1c641ef0958595719db1befb0d9 @@ -0,0 +1,94 @@ +From fork-admin@xent.com Wed Oct 9 10:55:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 782C316F03 + for ; Wed, 9 Oct 2002 10:52:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 10:52:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g98IjTK29427 for ; + Tue, 8 Oct 2002 19:45:30 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9CC582940A8; Tue, 8 Oct 2002 11:45:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from localhost.localdomain (pm5-47.sba1.netlojix.net + [207.71.222.47]) by xent.com (Postfix) with ESMTP id 3767D29409A for + ; Tue, 8 Oct 2002 11:44:51 -0700 (PDT) +Received: (from dave@localhost) by maltesecat (8.8.7/8.8.7a) id LAA09633; + Tue, 8 Oct 2002 11:53:52 -0700 +Message-Id: <200210081853.LAA09633@maltesecat> +To: fork@spamassassin.taint.org +Subject: Re: erratum [Re: no matter ...] & errors +In-Reply-To: Message from Owen Byrne of + "Mon, 07 Oct 2002 16:48:36 -0300." + <3DA1E514.9080807@permafrost.net> +From: Dave Long +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Tue, 08 Oct 2002 11:53:52 -0700 + + + +> I'm not sure what you mean by "let's you and him fight", but it is +> important to remember that England was in control of Ireland +> for 300 years ... + +Exactly -- "let's you and him fight" is a +way of dealing with troublesome populations +by moving them next to one another, so they +give each other, and not the Man, grief*. + +So by my understanding (and, you all will +understand, with tongue firmly in cheek): + +Ireland: Irish? Uppity barbarians overly + fond of "risings". Scots? More uppity + barbarians overly fond of "risings". + Why not plonk down a bunch of the latter + next to the former and kill two birds + with one stone? + +Israel: Ex-ottomans? Uppity barbarians + (didn't they help kick out the Ottomans?) + Zionists? Uppity sorts who aren't happy + with perfectly good land in Uganda. Why + not plonk down a bunch of the latter next + to the former and kill two birds with one + stone? + +but not: + +India: in which the muslims and hindus were + originally intermixed to some degree, + but Partioned due to their own conflict, + not due to English resettlement policy. + +Canada: in which the french and english were + already established, and it was just the + balance of power on the continent that + determined events in the colonies. The + Acadians got resettled, but they don't + seem to have been that good for picking + fights with their neighbors, so no one + had them plonked down next door. + +-Dave + +* this works best with a populace who, +given "one man, one vote", immediately +deduce "one less man, one less vote" -- +eh, Magnan? + + diff --git a/Ch3/datasets/spam/easy_ham/00940.2d6167e70e2aaa01e531409f1dbdd551 b/Ch3/datasets/spam/easy_ham/00940.2d6167e70e2aaa01e531409f1dbdd551 new file mode 100644 index 000000000..9dcc32fee --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00940.2d6167e70e2aaa01e531409f1dbdd551 @@ -0,0 +1,88 @@ +From fork-admin@xent.com Wed Oct 9 22:44:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B320A16F22 + for ; Wed, 9 Oct 2002 22:41:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 22:41:48 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g99HfZK14316 for ; + Wed, 9 Oct 2002 18:41:35 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 9C11529409C; Wed, 9 Oct 2002 10:41:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.endeavors.com (unknown [66.161.8.83]) by xent.com + (Postfix) with ESMTP id 542C629409A for ; Wed, + 9 Oct 2002 10:40:38 -0700 (PDT) +Received: from endeavors.com ([66.161.8.83] RDNS failed) by + mail.endeavors.com with Microsoft SMTPSVC(5.0.2195.5329); Wed, + 9 Oct 2002 10:28:03 -0700 +Message-Id: <3DA4671F.3030501@endeavors.com> +From: Gregory Alan Bolcer +Organization: Endeavors Technology, Inc. +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.1) + Gecko/20020823 Netscape/7.0 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: FoRK +Subject: Netscape 7 Review +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Originalarrivaltime: 09 Oct 2002 17:28:03.0620 (UTC) FILETIME=[39072E40:01C26FB9] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 09 Oct 2002 10:27:59 -0700 + +This is my Netscape 7.0 Review. + +o They finally got the email search speed back up to + where it was in 4.7.x +o Setting up user mail accounts doesn't have that really + odd, sometimes it lets me sometimes it doesn't problem that + previous versions had. +o I still have to manually update all my address books by + hand but at least it lets me import them as Netscape 4.x + address books (there's not 6.x import as they just assume + it works--which it doesn't) +o The mail filters are still broken and have the same problem that + I've tried to report since 4.0.2 where you can't store a mail + filter of the type: Age in days, is greater than, 21 (or some number) + Gawd I'd really wish they'd fix that freakin' bug, it's the single + biggest annoyance that I have with Netscape as it's one of the + most effective anti-spam tools that I have. +o Webex doesn't support Netscape 7.0 and the plugin doesn't + work which causes problems when you want to use Webex to + work on something with someone remotely. + +I've given up trying to report bugs and any changes to the +source I send always get lost. + +Greg + + +-- +Gregory Alan Bolcer, CTO | work: +1.949.833.2800 +gbolcer at endeavors.com | http://endeavors.com +Endeavors Technology, Inc.| cell: +1.714.928.5476 + + + + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00941.6805692546cf6517f808151dcc9dd6f4 b/Ch3/datasets/spam/easy_ham/00941.6805692546cf6517f808151dcc9dd6f4 new file mode 100644 index 000000000..4de4681a2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00941.6805692546cf6517f808151dcc9dd6f4 @@ -0,0 +1,174 @@ +From fork-admin@xent.com Wed Oct 9 22:44:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5000A16F49 + for ; Wed, 9 Oct 2002 22:41:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 22:41:50 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g99JeCK18599 for ; + Wed, 9 Oct 2002 20:40:17 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 02E4C2940B0; Wed, 9 Oct 2002 12:39:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from jamesr.best.vwh.net (jamesr.best.vwh.net [192.220.76.165]) + by xent.com (Postfix) with SMTP id 7F8352940A9 for ; + Wed, 9 Oct 2002 12:38:03 -0700 (PDT) +Received: (qmail 95084 invoked by uid 19621); 9 Oct 2002 19:36:00 -0000 +Received: from unknown (HELO avalon) ([64.125.200.18]) (envelope-sender + ) by 192.220.76.165 (qmail-ldap-1.03) with SMTP for + ; 9 Oct 2002 19:36:00 -0000 +Subject: RE: The Disappearing Alliance +From: James Rogers +To: fork@spamassassin.taint.org +In-Reply-To: <001e01c26f9a$8d775550$592c243e@detmold> +References: <001e01c26f9a$8d775550$592c243e@detmold> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1034193484.20790.116.camel@avalon> +MIME-Version: 1.0 +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: 09 Oct 2002 12:58:04 -0700 + +On Wed, 2002-10-09 at 06:48, Frank Bergmann wrote: +> +> A more reasonable explication of the EU - US differences (according +> to some American journalist cited in a German magazine, can someone +> help me?) is that the American public perceives the rest of the world +> basically as a thread, against which you have to defend yourself using +> power. + + +This is not a correct assessment. The American public couldn't care +less. However, the US intelligence community correctly perceives a +threat, and it isn't the third-world. Many European and other developed +nations aggressively engage in covert operations against American +interests. Its been going on for years and isn't even news. Things +have stepped up in recent years and the US DoD is none too pleased. For +better or worse, the US is relatively good at that game too. As with +most backwater wars, they are proxies for the interests of the big +players. + +Find a current list of the top intelligence threats to the US. You'll +find that half the countries on that list are European. Most people are +unaware of how aggressive these things have gotten in recent years. + + +> On the other hand the Europeans are used to the peace of their cozy +> post-war system where external security is not an issue. All security +> threads can be resolved by giving money to the threatening people +> and to integrate them into the wealthy sphere (Balkan, Palestinians, +> ...) + + +Bullshit. The European governments ruthlessly suppress real opposition, +obviously some more than others. US SpecOps are often brought in to do +dirty work inside Europe for European governments (usually with +government "advisors" along for the mission). I've always wondered what +the deal was such that we got involved at all. The point being that +we've acted as assassins for European governments inside their borders +against their own citizens under the auspices of those governments, and +in recent years, not ancient history. I know SpecOp guys who left the +military specifically because of the circumstances of some of these +missions while they were posted for that duty. I'm certainly glad I was +never assigned missions in that theater, because there is a lot of +covert nastiness going on in nominally friendly European democracies. + +Regardless, giving money to people that threaten you has never created +meaningful peace in the history of civilization. We call it extortion +under any other guise. + + +> A lot of the current EU - US issues can be explained by this difference +> of perception, such as the current American unilateralism (nobody wants +> to help us!), the American arrogance towards Europe (they don't want to +> do anything, so why should we ask them?) and the growing rejection of the +> American policy in Europe (they want to abolish the law!). + + +Europe is looking increasingly like a basket case. Whatever problems +the US is having these days, Europe looks worse and is going downhill +faster. Why the US would want to emulate European behavior or the +European way of doing things is beyond me. + +The US asking for major policy advice from Europe is like asking a quack +for medical advice. I really don't see what is wrong with "unilateral" +anyway. Why should anyone join a stampede that is heading for a cliff? +I hope the incessant knee-jerk conformist screeching that Americans see +coming from Europe doesn't actually represent the views of Europeans. + +For various reasons I'm not exactly a cheerleader for the US government, +but the premises of the argument against them here are lame. + + +> My personal point is that few Americans (percentage of overall population) +> have ever left their country, while even German construction workers +> regularly spend their holidays in Spain. So I'm not surprised that +> paranoia is growing. + + +I'm betting you are underestimating the actual percentage. The vast +majority of people I know have lived, worked, and traveled outside the +country at one time or another. And I doubt Europeans have traveled +anywhere near as much in the Western hemisphere as Americans have. +Despite the best efforts of France, Europe is *still* not the center of +the universe. I'll throw you a bone though: most Americans do consider +Europe to be drifting into irrelevancy and therefore ignore it. But +from the perspective of an American, how could you NOT look at it this +way? The impact of Europe on America has diminished greatly over the +years. + +I love the smell of Euro-chauvinism in the morning. + +First, you assume that the North American continent is ethnically and +culturally homogenous. Anybody that has actually traveled throughout +North America knows this isn't true; there are more than five major and +very distinct cultures and societies in the US alone, never mind the +hundreds of diverse regional sub-populations, some of which are truly +foreign. Apparently Europeans confuse speaking the same language with +having the same culture. That would be like saying Mexico is culturally +identical to Spain because they nominally speak the same language. A +Wyoming rancher has almost nothing in common culturally or socially with +your average person living in San Francisco, despite speaking the same +language and nominally living in the same country. If I want to visit a +wildly different culture for the holidays, I'll go to Oakland, New +Orleans, or similar -- they are far more different from where I live +than some countries I've traveled to. And a lot of these places are +farther from where I live than Spain is from Germany. + +Second, the State I live in is the size of Germany. When I travel to a +neighboring State (which I do regularly), how is this not equivalent? +In fact, I probably travel much farther for the holidays than your +German construction workers. If you look at the EU as a single country, +only then does your analogy become comparable. What kind of ridiculous +superiority do Europeans get from having (relatively) tiny countries? + +In truth, I find Europe to be about as culturally homogeneous as the +US. There are a lot of cultural similarities across the EU with +relatively minor local deviations that vary with distance in ways very +similar to the US. The only real difference is that Europeans have +dozens of different languages, which is hardly something I would call an +advantage. Although there are a couple parts of the US where I can't +understand a word they are saying either. + + +-James Rogers + jamesr@best.com + + + + diff --git a/Ch3/datasets/spam/easy_ham/00942.727cb1619115cdee240fa418da19dd1f b/Ch3/datasets/spam/easy_ham/00942.727cb1619115cdee240fa418da19dd1f new file mode 100644 index 000000000..424660196 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00942.727cb1619115cdee240fa418da19dd1f @@ -0,0 +1,676 @@ +From fork-admin@xent.com Thu Oct 10 12:34:47 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 98D4616F1F + for ; Thu, 10 Oct 2002 12:33:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 10 Oct 2002 12:33:24 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g9A1omK03066 for ; + Thu, 10 Oct 2002 02:50:52 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id 3352B2940A0; Wed, 9 Oct 2002 18:50:04 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from mail.endeavors.com (unknown [66.161.8.83]) by xent.com + (Postfix) with ESMTP id 2409F29409A for ; Wed, + 9 Oct 2002 18:49:31 -0700 (PDT) +Received: from endeavors.com ([66.161.8.83] RDNS failed) by + mail.endeavors.com with Microsoft SMTPSVC(5.0.2195.5329); Wed, + 9 Oct 2002 18:50:05 -0700 +Message-Id: <3DA4DCC7.6060601@endeavors.com> +From: Gregory Alan Bolcer +Organization: Endeavors Technology, Inc. +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.1) + Gecko/20020823 Netscape/7.0 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Rohit Khare +Cc: Fork@xent.com +Subject: Re: Lord of the Ringtones: Arbocks vs. Seelecks +References: +Content-Type: text/plain; charset=windows-1252; format=flowed +Content-Transfer-Encoding: 8bit +X-Originalarrivaltime: 10 Oct 2002 01:50:05.0878 (UTC) FILETIME=[5B4AFD60:01C26FFF] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 09 Oct 2002 18:49:59 -0700 + +I got to see Powell talk in March 2001 at the beginning of his +reign at the FCC. He said they were going to take a real +hands off approach, so it's funny that they would blame +the regulators for causing the collapse. One thing he did +get right, is that he wasn't worried that the US was behind +Europe in the wireless licensing spectrum. This is something +very prescient in that most of those licensors have had to +eat their lunch over the huge licensing costs they paid for +very little benefit. His legacy was/is supposed to be +rethinking the FCC's role to stay out of the way in this +period of business innovation in the wireless space as he +didn't want the government forcing business models onto +the private sector. + +His full transcript is here [1]. Interestingly enough I +got to see his speech in person as he was part of the whole +CTIA'2001 Las Vegas keynote series of speakers. Clay and +I hoped a flight out of Ontario to Las Vegas to do demo support +for Craig Barrett [2]. His message was that there's no difference +between wired and wireless Internet--it's all the same thing. +Instead of scalable networks, we should be thinking about scalable +content (& using Magi he showed sending a blue man tv commercial +from a desktop to a laptop to an ipaq to a color smartphone with +the content scaling back for each target platform). + +The best part of the whole trip wasn't hobnobbing at all, +but really the fact that the Venetian had ran out of rooms. +They decided to put us up in one of their $10,000/night high +roller rooms. They put Clay in one and me in another. +The Venetian is known for having the largest hotel rooms +anywhere, but these ones were bigger than my whole house. 8-) + +Greg + + +[1] http://www.fcc.gov/Speeches/Powell/2001/spmkp101.html +[2] http://www.intel.com/pressroom/archive/speeches/cb20010320.htm + +Rohit Khare wrote: +> I can't believe I actually read a laugh-out-loud funny profile of the +> *FCC Commissioner* fer crissakes! So the following article comes +> recommended, a fine explanation of Michael Powell's extraordinary +> equivocation. +> +> On the other hand, I can also agree with Werbach's Werblog entry... Rohit +> +>> A Trip to F.C.C. World +>> +>> Nicholas Lemann has a piece in the New Yorker this week about FCC +>> Chairman Michael Powell. It's one of the first articles I've seen +>> that captures some of Powell's real personality, and the way he's +>> viewed in Washington. Unfortunately, Lemann ends by endorsing +>> conventional political wisdom. After describing how Powell isn't +>> really a fire-breathing ideological conservative, he concludes that, +>> in essence, Powell favors the inumbent local Bell telephone companies, +>> while a Democratic FCC would favor new entrants. I know that's not +>> how Powell sees the world, and though I disagree with him on many +>> issues, I think he's right to resist the old dichotomy. +>> +>> The telecom collapse should be a humbling experience for anyone who +>> went through it. The disaster wasn't the regulators' fault, as some +>> conservatives argue. But something clearly went horribly wrong, and +>> policy-makers should learn from that experience. Contrary to Lemann's +>> speculation, the upstart carriers won't be successful in a Gore +>> administration, because it's too late. Virtually all of them are +>> dead, and Wall Street has turned off the capital tap for the +>> foreseeable future. Some may survive, but as small players rather +>> than world-dominators. +>> +>> The battle between CLECs and RBOCs that Lemann so astutely parodies is +>> old news. The next important battle in telecom will be between those +>> who want to stay within the traditional boxes, and those who use +>> different models entirely. That's why open broadband networks and +>> open spectrum are so important. Whatever the regulatory environment, +>> there is going to be consolidation in telecom. Those left out in that +>> consolidation will face increasing pressure to create new pipes into +>> the home, or slowly die. The victors in the consolidation game will +>> cut back on innovation and raise prices, which will create further +>> pressure for alternatives. +>> +>> Lemann is right that policy-making looks much drier and more ambiguous +>> on the ground than through the lens of history. But he's wrong in +>> thinking that telecom's future will be something like its past. +>> +>> Friday, October 04, 2002 +>> 11:17:11 AM comments {0} +> +> +> ============================================================== +> http://www.newyorker.com/printable/?fact/021007fa_fact +> +> THE CHAIRMAN +> by NICHOLAS LEMANN +> He's the other Powell, and no one is sure what he's up to. +> New Yorker, October 8, 2002 +> +> Last year, my middle son, in eighth grade and encountering his first +> fairly serious American-history course, indignantly reported that the +> whole subject was incomprehensible. I was shocked. What about Gettysburg +> and the Declaration of Independence and the Selma-to-Montgomery march? +> Just look at my textbook, he said, and when I did I saw his point. His +> class had got up to the eighteen-forties. What I expected was a big +> beefing up of the roles of Sacagawea and Crispus Attucks, and, in-deed, +> there was some of that. But the main difference between my son's text +> and that of my own childhood was that somebody had made the disastrous +> decision to devote most of it to what had actually happened in American +> history. There were pages and pages on tariffs and bank charters and +> reciprocal trade agreements. I skipped ahead, past the Civil War, hoping +> for easier going, only to encounter currency floats and the regulation +> of freight rates. Only a few decades into the twentieth century did it +> become possible to see the federal government's main function as +> responding to dramatic crises and launching crusades for social justice, +> instead of attempting to referee competing claims from economic interests. +> +> Even now, if one were to reveal what really goes on behind the pretty +> speeches and the sanctimonious hearings in Washington, what you'd find +> is thousands of lawyers and lobbyists madly vying for advantage, not so +> much over the public as over each other: agribusiness versus real +> estate, banks versus insurance companies, and so on. The arena in which +> this competition mainly takes place is regulatory agencies and +> commissions and the congressional committees that supervise them. It's +> an insider's game, less because the players are secretive than because +> the public and the press—encouraged by the players, who speak in jargon— +> can't get themselves interested. +> +> One corner of Washington might be called F.C.C. World, for the Federal +> Communications Commission. F.C.C. World has perhaps five thousand +> denizens. They work at the commission itself, at the House and Senate +> commerce committees, and at the Washington offices of the companies that +> the commission regulates. They read Communications Daily (subscription +> price: $3,695 a year), and every year around Christmastime they +> grumblingly attend the Chairman's Dinner, at a Washington hotel, where +> the high point of the evening is a scripted, supposedly self-deprecating +> comedy routine by the commission's chairman. +> +> Of all the federal agencies and commissions, the F.C.C. is the one that +> Americans ought to be most interested in; after all, it is involved with +> a business sector that accounts for about fifteen per cent of the +> American economy, as well as important aspects of daily life—telephone +> and television and radio and newspapers and the Internet. And right now +> F.C.C. World is in, if not a crisis, at least a very soapy lather, +> because a good portion of what the angry public thinks of as the +> "corporate scandals" concerns the economic collapse of companies +> regulated by the F.C.C. Qwest, WorldCom, Adelphia, and Global Crossing, +> among others, are (or were) part of F.C.C. World. AOL Time Warner is +> part of F.C.C. World. Jack Grubman, the former Salomon Smith Barney +> analyst who seems to have succeeded Kenneth Lay, of Enron, as the +> embodiment of the corporate scandals, is part of F.C.C. World. In the +> past two years, companies belonging to F.C.C. World have lost trillions +> of dollars in stock-market valuation, and have collectively served as a +> dead weight pulling down the entire stock market. +> +> This year, an alarmed and acerbic anonymous memorandum about the state +> of the F.C.C. has been circulating widely within F.C.C. World. It evokes +> F.C.C. World's feverish mood ("The F.C.C. is fiddling while Rome burns") +> and suggests why nobody besides residents of F.C.C. World has thought of +> the commission in connection with the corporate scandals. The sentence I +> just quoted is followed by this explanation: "The ILECs appear likely to +> enter all l.d. markets within twelve months, while losing virtually no +> residential customers to attackers since 1996, and suffering about 10% +> market share loss in business lines to CLECs." It's a lot easier to +> think about evil C.E.O.s than to decipher that. +> +> +> Even in good times, F.C.C. World pays obsessive attention to the +> commission's chairman. In bad times, the attention becomes especially +> intense; and when the chairman is a celebrity F.C.C. World devotes +> itself to full-time chairman-watching. The current chairman, Michael +> Powell, is a celebrity, at least by government-official standards, +> because he is the only son of Colin Powell, the Secretary of State. +> Unlike his father, he has a kind of mesmerizing ambiguity, which +> generates enormous, and at times apoplectically toned, speculation about +> who he really is and what he's really up to. Powell is young to be the +> head of a federal agency—he is thirty-nine—and genially charming. +> Everybody likes him. Before becoming chairman, he was for three years +> one of the F.C.C.'s five commissioners; not only is he fluent in the +> F.C.C.'s incomprehensible patois, he has a Clintonesque love of the +> arcane details of communications policy. He's always saying that he's an +> "avid moderate." And yet he has a rage-inciting quality. One of his +> predecessors as chairman, Reed Hundt, quoted in Forbes, compared Powell +> to Herbert Hoover. Mark Cooper, of the Consumer Federation of America, +> calls him "radical and extreme." Just as often as he's accused of being +> a right-wing ideologue, Powell gets accused of being paralytically +> cautious. "It ain't about singing 'Kum-Ba-Yah' around the campfire," +> another former chairman, William Kennard, says. "You have to have an +> answer." One day last spring, Powell, testifying before a Senate +> subcommittee, delivered an anodyne opening statement, and the +> subcommittee's chairman, Ernest Hollings, of South Carolina, berated +> him. "You don't care about these regulations," Hollings said. "You don't +> care about the law or what Congress sets down. . . . That's the +> fundamental. That's the misgiving I have of your administration over +> there. It just is amazing to me. You just pell-mell down the road and +> seem to not care at all. I think you'd be a wonderful executive +> vice-president of a chamber of commerce, but not a chairman of a +> regulatory commission at the government level. Are you happy in your job?" +> +> "Extremely," Powell said, with an amiable smile. +> +> +> One cannot understand Powell's maddening effect, at least on Democrats +> and liberal activists, without understanding not just the stated purpose +> of the commission he chairs but also its real purpose. The F.C.C. was +> created by Congress in 1934, but it existed in prototype well before the +> New Deal, because it performs a function that is one of the classic easy +> cases for government intervention in the private economy: making sure +> that broadcasters stick to their assigned spots on the airwaves. Its +> other original function was preventing American Telephone & Telegraph, +> the national monopoly phone company, from treating its customers +> unfairly. Over the decades, as F.C.C. World grew up into a comfortable, +> well-established place, the F.C.C. segued into the role of industrial +> supervision—its real purpose. It was supposed to manage the competition +> among communications companies so that it didn't become too bloody, by +> artfully deciding who would be allowed to enter what line of business. +> In addition to looking out for the public's interest, the commission +> more specifically protected the interests of members of Congress, many +> of whom regard the media companies in their districts as the single most +> terrifying category of interest group—you can cross the local bank +> president and live to tell the tale, but not the local broadcaster. +> According to an oft-told F.C.C. World anecdote, President Clinton once +> blocked an attempt to allow television stations to buy daily newspapers +> in the same city because, he said, if the so-and-so who owned the +> anti-Clinton Little Rock Democrat-Gazette had owned the leading TV +> station in Little Rock, too, Clinton would never have become President. +> +> +> F.C.C. World may have been con tentious, but it was settled, too, +> because all the reasonably powerful players had created secure economic +> niches for themselves. Then, in the nineteen-eighties, the successful +> breakup of A.T. & T.—by far the biggest and most important company the +> commission regulated—deposited a thick additional sediment of +> self-confidence onto the consciousness of F.C.C. World. A generation +> ago, for most Americans, there was one local phone company, one +> long-distance company, and one company that manufactured telephones, +> which customers were not permitted to own—and they were all the same +> company. It was illegal to plug any device into a phone line. By the +> mid-nineteen-nineties, there were a dozen economically viable local +> phone companies, a handful of national long-distance companies competing +> to offer customers the lowest price and best service, and stores +> everywhere selling telephone equipment from many manufacturers—and +> millions of Americans had a fax machine and a modem operating over the +> telephone lines. A.T. & T. had argued for years that it was a "natural +> monopoly," requiring protection from economic competition and total +> control over its lines. So much for that argument. Over the same period, +> the F.C.C. had assisted in the birth of cable television and cell phones +> and the Internet. It was the dream of federal-agency success come true: +> consumers vastly better served, and the industry much bigger and more +> prosperous, too. +> +> The next big step was supposed to be the Telecommunications Act of 1996, +> one of those massive, endlessly lobbied-over pieces of legislation which +> most people outside F.C.C. World probably felt it was safe to ignore. +> Although the Telecom Act sailed under the rhetorical banner of +> modernization and deregulation, its essence was a grand interest-group +> bargain, in which the local phone companies, known to headline writers +> as "baby Bells" and to F.C.C. World as "arbocks" (the pronounced version +> of RBOCs, or regional Bell operating companies), would be permitted to +> offer long-distance service in exchange for letting the long-distance +> companies and smaller new phone companies use their lines to compete for +> customers. Consumers would win, because for the first time they would +> get the benefits of competition in local service while getting even more +> competition than they already had in long distance. But the politics and +> economics of the Telecom Act (which was shepherded through Congress by +> Vice-President Gore) were just as important. Democrats saw the act as +> helping to reposition them as the technology party—the party that +> brought the Internet into every home, created hundreds of thousands of +> jobs in new companies, and, not least, set off an investment boom whose +> beneficiaries might become the party's new contributor base. Clinton's +> slogans about the "information superhighway" and "building a bridge to +> the twenty-first century," which, like all Clinton slogans, artfully +> sent different messages to different constituencies, were the rhetorical +> correlates of the Telecom Act, and Gore's cruise to the Presidency was +> supposed to be powered substantially by the act's success. +> +> The F.C.C. had a crucial role in all this. The arbocks are rich, +> aggressive, politically powerful, and generally Republican (though like +> all important interest groups they work with both parties); they +> immediately filed lawsuits, which wound up tying the hands of their new +> competitors in the local phone market for more than three years. Through +> rule-making, enforcement, and litigation, the F.C.C., then headed by +> Reed Hundt, who was Gore's classmate at St. Albans, was supposed to keep +> the arbocks in their cages, so that not only long-distance companies +> like A.T. & T. and MCI WorldCom but also a whole category of new +> companies, "see-lecks" (the pronounced version of CLECs, or competitive +> local exchange carriers), could emerge. This entailed the regulatory +> equivalent of hand-to-hand combat: the see-leck is supposed to have +> access to the arbock's switching equipment, the arbock won't give the +> seeleck a key to the room where it's kept, so the see-leck asks the +> F.C.C. to rule that the arbock has to give it the key. +> +> Partly because Hundt assured the see-lecks and other new companies that +> he would protect them, and partly because of the generally booming +> condition of the economy then, investment capital flooded into the +> see-lecks—companies with names like Winstar, Covad, and Teligent—and +> into other telecommunications companies. Even not obviously related +> technology companies like Cisco Systems benefitted from the telecom +> boom: demand for their products was supposed to come from the see-lecks +> and other new players. There would be no conflict between the interests +> of the new telecom companies and those of consumers; as one of Hundt's +> former lieutenants told me, "Reed used to joke that my job was to make +> sure that all prices went down and all stocks went up." +> +> +> The years following the passage of the Telecom Act were the peak of the +> boom. Wall Street had its blood up, and that meant not just more +> startups but also more mergers of existing communications companies: +> Time Warner and AOL decided to throw in together, and A.T. & T. and +> Comcast, and so on. (Surely, WorldCom and the other telecom bad guys +> believed that their self-dealing, stock-overselling, and creative +> accounting would go unnoticed because the market was so undiscriminating.) +> +> By the time the outcome of the 2000 Presidential election had been +> determined, the telecom crash was well under way. Nonetheless, the +> chairmanship of the F.C.C. remained one of the best jobs, in terms of +> influence and visibility, available to a career government regulator. +> Three Republicans emerged as candidates: Powell, who was a commissioner; +> Harold Furchtgott-Roth, the farthest-to-the-right commissioner; and +> Patrick Wood, the head of the Texas Public Utility Commission and, as +> such, a George W. Bush guy. In Texas, however, Wood had crossed the most +> powerful person in the arbock camp, Edward Whitacre, the C.E.O. of +> S.B.C. Communications, which is headquartered in San Antonio. This meant +> that the arbocks didn't want Wood as head of the F.C.C., because he +> might be too pro-see-leck. (Wood is now the head of the Federal Energy +> Regulatory Commission.) Michael Powell had to signal the arbocks that he +> wasn't as threatening as Wood, while also signalling the conservative +> movement that he was only negligibly farther to the left than +> Furchtgott-Roth. +> +> Powell did this deftly. For example, in December of 2000 he appeared +> before a conservative group called the Progress & Freedom Foundation and +> gave a very Michael Powell speech—whimsical, intellectual, and +> free-associative (Biblical history, Joseph Schumpeter, Moore's Law)—that +> began by making fun of the idea that the F.C.C. should try to keep new +> telecom companies alive. "In the wake of the 1996 Act, the F.C.C. is +> often cast as the Grinch who stole Christmas," Powell said. "Like the +> Whos, down in Who-ville, who feast on Who-pudding and rare Who-roast +> beast, the communications industry was preparing to feast on the +> deregulatory fruits it believed would inevitably sprout from the Act's +> fertile soil. But this feast the F.C.C. Grinch did not like in the +> least, so it is thought." Thus Powell was indicating that if he became +> chairman he didn't expect to administer first aid to the see-lecks as +> part of the job. He was appointed to the chairmanship on the first day +> of the Bush Administration. +> +> Twenty months into the Administration, nearly all the see-lecks are dead +> or dying; nearly all long-distance companies, not just WorldCom, are in +> serious trouble; cable companies have lost half their value; satellite +> companies are staggering. The crash has had an automatically +> concentrating effect, because as new companies die the existing +> companies' market share increases, and, if the existing companies are in +> good shape financially, they have the opportunity to pick up damaged +> companies at bargain prices. During the Bush Administration, as the +> financial carnage in communications has worsened, the communications +> industry has moved in the direction of more concentration. If the Bells +> wind up protecting their regional monopolies in local phone service, and +> if they also merge, the country will be on its way to having a national +> duopoly in local service: Verizon, in the East, and S.B.C., in the West. +> And these companies could dominate long distance as well, because of the +> poor health of the long-distance companies. +> +> The cable business also seems close to having two dominant national +> companies, AOL Time Warner and Comcast. Unlike the phone companies, they +> don't have to share their wiring with other companies and so can more +> fully control what material they allow to enter people's homes. As part +> of the complicated bargaining with interest groups that led to the 1996 +> Telecom Act, the limits on concentration in the radio industry were +> significantly loosened, and in the past six years the number of +> radio-station owners in the United States has been cut by twenty-five +> per cent; today, a large portion of local and national radio news +> programming is supplied by a single company, Westwood One, a subsidiary +> of Viacom. +> +> In this situation, many Democrats and liberals think, the F.C.C. should +> be hyperactive—the superhero of government regulation, springing to the +> rescue of both consumers and the communications industry. It should try +> to breathe life into the see-lecks and other new companies. It should +> disallow mergers, maintain ownership limits, and otherwise restrain the +> forces of concentration. It should use the government's money and muscle +> to get new technology—especially fast Internet connections—into the +> homes of people who can't afford it at current market prices. (An +> analogy that a lot of people in F.C.C. World make is between telecom and +> the Middle East: the Clinton people blame the bloodshed on the Bush +> people, because they disengaged when they came into office, and the Bush +> people blame it on the Clinton people, because they raised too many +> expectations and stirred too many passions.) +> +> But Michael Powell's F.C.C. has not been hyperactive. Powell has been +> conducting internal policy reviews and reforming the management of the +> F.C.C. and waiting for the federal courts and the Congress to send him +> signals. (In mid-September, Powell finally initiated a formal review of +> the F.C.C.'s limits on media concentration.) This doesn't mean he has +> been inactive; rather, he has been active in a way that further +> infuriates his critics—in a manner that smoothly blends the genial and +> the provocative, he muses about whether the fundamental premises of +> F.C.C. World really make sense, while giving the impression that he's +> having the time of his life as chairman. At his first press conference, +> when he was asked what he was going to do about the "digital +> divide"—that is, economic inequality in access to the Internet—he said, +> "You know, I think there is a Mercedes divide. I'd like to have one and +> I can't afford one." At the National Cable & Telecommunications +> Association convention, in Chicago, Powell, following a troupe of +> tumblers to the stage, interrupted his walk to the podium to perform a +> somersault. +> +> +> Not long ago, I went to see Powell in his office at the F.C.C. Until +> 1998, when the commission moved to a new building in Southwest +> Washington, near the city's open-air fish market, F.C.C. World was at +> the western edge of downtown, where everybody would encounter everybody +> else at a few familiar restaurants and bars. Today, the F.C.C. building +> looks like the office of a mortgage company in a suburban office park. +> Even the chairman's suite, though large, is beige, carpeted, and +> fluorescent. Powell is a bulky man who wears gold-rimmed glasses and +> walks with a pronounced limp, the result of injuries he suffered in a +> jeep accident in Germany, in 1987, when he was an Army officer. Because +> of the accident, he left the Army and went to law school, where he +> became entranced with conservative ideas about regulation, particularly +> the idea that the government, rather than trying to correct the flaws of +> the market before the fact—"prophylactically," as he likes to say—should +> wait till the flaws manifest themselves and then use antitrust +> litigation to fix them. He worked briefly at a corporate law firm, and +> then became a protégé of Joel Klein, the head of the antitrust division +> of the Clinton Justice Department and the man who led the government's +> legal case against Microsoft. (He was recently appointed chancellor of +> the New York public-school system.) It testifies to Powell's political +> skill that he is probably the only high official in the Bush +> Administration who not only served in the Clinton Administration but +> also maintains close ties to Bush's nemesis Senator John McCain, of +> Arizona. One of the things about Powell that annoy people is his +> enduring love of law school—"It's sort of like a law-school study +> session over there," one Democratic former commissioner said. As if to +> confirm the charge, Powell, when I arrived, introduced me to four law +> students, summer interns at the commission, whom he'd invited to sit in. +> +> I began by asking Powell whether he agreed with the founding assumptions +> of the F.C.C. For example, could private companies have apportioned the +> airwaves among themselves without the government being involved? +> +> "I think we'll never know," Powell said. "I don't think it's an +> automatically bad idea, the way some people will argue. Land is probably +> the best analogue. We don't seize all the land in the United States and +> say, 'The government will issue licenses to use land.' If my neighbor +> puts a fence one foot onto my property line, there's a whole body of law +> about what I can do about that, including whether I can tear it down. If +> a wireless company was interfering with another wireless company, it's a +> similar proposition. There are scholars who argue—indeed, the famous +> Ronald Coase treatise that won the Nobel Prize was about this—that +> spectrum policy is lunacy. The market could work this out, in the kinds +> of ways that we're accustomed to." +> +> Talking to Powell was fun. Unlike most high government officials, he +> doesn't seem to be invested in appearing dignified or commanding. He +> slumps in his chair and fiddles with his tie and riffs. He speaks in +> ironic air quotes. He's like your libertarian friend in college who +> enjoyed staying up all night asking impertinent rhetorical questions +> about aspects of life that everybody else takes for granted but that he +> sees as sentimental or illogical. After a while, I asked him whether he +> thought his predecessors' excitement about the 1996 Telecommunications +> Act had been excessive. +> +> "I would start with a caveat," Powell said. "Look, I can't fault those +> judgments in and of themselves, given the time and what people thought. +> They were not the only ones who were hysterical about the opportunities. +> But, frankly, I've always been a little bit critical. First of all, +> anybody who works with the act knows that it doesn't come anywhere close +> to matching the hyperbole that was associated with it, by the President +> on down, about the kinds of things it's going to open up. I mean, I +> don't know what provisions are the information-superhighway provisions, +> or what provisions are so digitally oriented, or some of the things that +> were a big part of the theatre of its introduction. When one starts +> reading the details, one searches, often in vain, for these provisions. +> But, nonetheless, there was a rising dot-com excitement, and an Internet +> excitement, and people thought this was historic legislation, and it +> certainly was. +> +> "But. We were sucking helium out of balloons, with the kinds of +> expectations that were being bandied around, and this is before the +> economy or the market even gets in trouble. It was a dramatically +> exaggerated expectation—by the leadership of the commission, by +> politicians, by the market itself, by companies themselves. It was a +> gold rush, and led to some very detrimental business decisions, ones +> that government encouraged by its policies, frankly. Everybody wanted to +> see numbers go up on the board." +> +> Powell began imitating an imagined true believer in the Telecom Act. " +> 'I want to see ten competitors. Twenty competitors! I want to see +> thirty-per-cent market share. Fifty-per-cent market share! I want the +> Bells to bleed! Then we'll know we've succeeded.' " Now Powell returned +> to being Powell. "I think that expectation was astonishingly +> unrealistic, in the short term. They wanted to see it while they're +> there. We were starting to get drunk on the juice we were drinking. And +> the market was getting drunk on the juice we were drinking. There's no +> question, we went too soon too fast. Too many companies took on too much +> debt too fast before the market really had a product, or a business model." +> +> How could the Telecom Act have been handled better? "We could have +> chosen policies that were less hellbent on a single objective, and were +> slightly more balanced and put more economic discipline in the system," +> Powell said. "Money chased what seemed like government-promised +> opportunity. The problem with that is there's a morning after, and we're +> in it. And the problem is there is no short fix for this problem. This +> debt is going to take years to bring down to a realistic level. In some +> ways, for short-term gain, we paid a price in long-term stability." +> +> Powell went on to say that it might have turned out differently if there +> had been a more "reasonable" level of investment. "No, we wouldn't have +> every home in America with competitive choice yet—but we don't anyway. I +> don't think it's the remonopolization of telephone service. I don't buy +> that. The Bells will prosper, but did anybody believe they wouldn't? The +> part of the story that didn't materialize was that people thought so +> would MCI WorldCom and Sprint." +> +> Other local phone companies, he added, hadn't materialized as viable +> businesses, either, and they never might. "Everybody's always saying, +> 'The regulators did this and this and this.' But, candidly, the story's +> quite the opposite. I think the regulators bent over backward for six +> years to give them a chance. Conditions don't get that good except once +> every thirty years, and it didn't happen. So, whatever the reason, we're +> looking at a WorldCom that's teetering. We're looking at a long-distance +> business that has had a rapid decline in its revenue base. A.T. & T. is +> breaking itself up. Sprint has struggled." +> +> Could the F.C.C. have done anything to make the long-distance companies +> stronger? "At the F.C.C.? I think I'll just be blunt. My political +> answer? Yes, there's all kinds of things we can do at the margin to try +> to help. But I can't find thirty billion dollars for WorldCom somewhere. +> I can't mitigate the impacts of an accounting scandal and an S.E.C. +> investigation. Were I king, it would be wonderful, but I don't have +> those kinds of levers. I don't know whether anybody does. At some point, +> companies are expected to run themselves in a way that keeps them from +> dying." Powell couldn't have made it much clearer that he doesn't think +> it's his responsibility to do anything about the telecom crash. He has +> demonstrated his sure political touch by making accommodationist +> gestures—in August, for example, five months after disbanding the +> F.C.C.'s Accounting Safeguards Division, Powell announced that he was +> appointing a committee to study accounting standards in the +> communications industry. But that shows that Powell is better at riding +> out the storm than, say, Harvey Pitt, his counterpart at the Securities +> and Exchange Commission, and does not mean that he plans to try to shore +> up the telecom industry. +> +> I asked Powell if it would bother him if, for most people, only one +> company provided cable television and only one provided local phone +> service. "Yes," he said. "It concerns us that there's one of each of +> those things, but let's not diminish the importance of there being one +> of each of those things. That still is a nice suite of communications +> capabilities, even if they aren't direct analogues of each other." +> Anyway, Powell said, before long the phone companies will be able to +> provide video service over their lines, and the cable companies will +> provide data service over their lines, so there will be more choice. +> "So, yeah, we have this anxiety: we have one of everything. The question +> is, Does it stay that way?" +> +> The concentration of ownership and the concentrated control of +> information did not appear to trouble Powell, either. He said that +> people confuse bigness, which brings many benefits, with concentration, +> which distorts markets. "If this were just economics, it's easy. If you +> were to say to me, 'Mike, just worry about economic concentration,' we +> know how to do that—the econometrics of antitrust. I can tell you when a +> market's too concentrated and prices are going to rise. The problem is +> other dimensions, like political, ideological, sometimes emotional. Take +> the question of, if everybody's controlling what you see, the assumption +> there is that somehow there'll be this viewpoint, a monolithic +> viewpoint, pushed on you by your media and you won't get diversity. I +> think that's a possibility. I don't think it's nearly the possibility +> that's ascribed to it sometimes." +> +> Powell explained, "Sometimes when we see very pointed political or +> parochial programming, it gets attacked as unfair. I see some of the +> same people who claim they want diversity go crazy when Rush Limbaugh +> exists. They love diversity, but somehow we should run Howard Stern off +> the planet. If it has a point of view, then it becomes accused of bias, +> and then we have policies like"—here his tone went from ironic to +> sarcastic—"the fairness doctrine, which seems to me like the antithesis +> of what I thought those people cared about. So when somebody is pointed +> and opinionated, we do all this stuff in the name of journalistic +> fairness and integrity or whatever, to make them balance it out." +> +> +> F.C.C. World abounds in theories about Michael Powell. One is that he +> can't make up his mind about how to address the crisis in the industries +> he regulates—so he talks (and talks and talks) flamboyantly about the +> market, in order to buy himself time. Another is that he's carrying +> water for the arbocks and the big cable companies. Another is that he is +> planning to run for the Senate from Virginia (or to be appointed +> Attorney General in a second Bush term), and doesn't want to do anything +> at the F.C.C. that would diminish his chances. Another is that he's +> waiting to move until there is more consensus on some course of action, +> so that he doesn't wind up going first and getting caught in the +> crossfire between the arbocks and the cable companies and the television +> networks. (In F.C.C. World, this is known as the Powell Doctrine of +> Telecom, after Colin Powell's idea that the United States should never +> commit itself militarily without a clear objective, overwhelming force, +> and an exit strategy.) And another is that he actually believes what he +> says, and thinks the telecommunications crash is natural, healthy, and +> irreversible, and more concentration would be just fine. +> +> "This is why elections matter," Reed Hundt, who isn't happy about what +> has become of his Telecom Act, told me. It's true that the F.C.C.—much +> more than, say, the war in Afghanistan—is a case in which a Gore +> Administration would be acting quite differently from the Bush +> Administration. Consumers might have noticed the difference by now, but +> there's no question whether communications companies have noticed. The +> arbocks are doing better against their internal rivals than they would +> have done if Gore had won. Next election, they'll help the party that +> helped them. If the Republicans win, policy will tilt further in the +> arbocks' favor. If they lose, perhaps the arbocks' rivals—the +> long-distance companies and the telecommunications upstarts—with their +> friends now in power, will stage a comeback. America's present is not +> unrecognizably different from America's past. +> +> + + +-- +Gregory Alan Bolcer, CTO | work: +1.949.833.2800 +gbolcer at endeavors.com | http://endeavors.com +Endeavors Technology, Inc.| cell: +1.714.928.5476 + + + + + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/00943.c87bed16cca1b008f6e796a9e652ddbf b/Ch3/datasets/spam/easy_ham/00943.c87bed16cca1b008f6e796a9e652ddbf new file mode 100644 index 000000000..5f8ea9394 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00943.c87bed16cca1b008f6e796a9e652ddbf @@ -0,0 +1,351 @@ +From fork-admin@xent.com Thu Oct 10 12:34:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 04BD316F20 + for ; Thu, 10 Oct 2002 12:33:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 10 Oct 2002 12:33:33 +0100 (IST) +Received: from xent.com ([64.161.22.236]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g9A6HqK11334 for ; + Thu, 10 Oct 2002 07:17:53 +0100 +Received: from lair.xent.com (localhost [127.0.0.1]) by xent.com (Postfix) + with ESMTP id ACC8E2940B3; Wed, 9 Oct 2002 23:17:03 -0700 (PDT) +Delivered-To: fork@spamassassin.taint.org +Received: from slc02.smtp.stsn.com (p5.n-usslc14.stsn.com [12.23.74.5]) by + xent.com (Postfix) with ESMTP id 783F529409A for ; + Wed, 9 Oct 2002 23:16:05 -0700 (PDT) +Received: from ianbell.com ([10.16.39.92]) by slc02.smtp.stsn.com with + Microsoft SMTPSVC(5.0.2195.3779); Thu, 10 Oct 2002 00:16:03 -0600 +MIME-Version: 1.0 (Apple Message framework v546) +Content-Type: text/plain; charset=US-ASCII; format=flowed +Subject: Fwd: [POLITICOS] Re: "Bowling for Columbine," Opens This Friday +From: Ian Andrew Bell +To: fork@spamassassin.taint.org +Content-Transfer-Encoding: 7bit +Message-Id: <1271ABB6-DC18-11D6-B3AB-0030657C53EA@ianbell.com> +X-Mailer: Apple Mail (2.546) +X-Originalarrivaltime: 10 Oct 2002 06:16:04.0000 (UTC) FILETIME=[83132A00:01C27024] +Sender: fork-admin@xent.com +Errors-To: fork-admin@xent.com +X-Beenthere: fork@spamassassin.taint.org +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , +List-Id: Friends of Rohit Khare +List-Unsubscribe: , + +List-Archive: +Date: Wed, 9 Oct 2002 23:18:20 -0700 + + + +Begin forwarded message: + +> From: Ian Andrew Bell +> Date: Wed Oct 9, 2002 11:16:09 PM US/Pacific +> To: mike@michaelmoore.com +> Cc: foib@ianbell.com +> Subject: [POLITICOS] Re: "Bowling for Columbine," Opens This Friday +> +> Michael, +> +> Why is it that people who consider voting in an election an +> inconvenience would go to see a movie to show support for its message? +> Don't get me wrong -- I think this is the case. People will go to +> see your movie as much to be entertained and informed as they will to +> express their malice and discontent towards not only the present +> regime in America, but also the corrupt, empty, shallow pantomime +> which cast them into power. +> +> In reality, today the voting that takes place via the act of +> consumption far outweighs the impact caused by people going to a booth +> and dimpling the appropriate chad, or some other such convoluted act +> of free democratic expression. +> +> Why? Because in America, they believe in dollars. Dollars don't lie. +> In practise, they are the last frontier of truth in America, +> universally accepted as expressions of fear, desire, passion, and +> need. Compared to the swing of the almighty buck, and Jeb Bush knows +> this, a hanging chad has only the nethermost meaning. +> +> Given that fact, I modestly propose an entirely new, though wholly +> logical, extension to the current democratic system in place in +> America: +> +> I propose we augment, and effectively replace, the electoral system +> with a political stock market. We should accept that Politicians are +> entrepreneurs just like any other businessperson in America, and +> embrace this fact in building an economic system which truly reflects +> their intent. A politician should issue a constant number of shares +> dependent upon his tenure in government. Those shares should be +> traded on an open exchange, say the G.R.E.E.D. (short, of course, for +> the "Global Realists' Electoral Exchange -- Democratic"). Politicians +> we believe in will see their stocks rise higher as faith in their +> ability to maintain office grows. As the truth about their embezzling +> campaign funds for weekend trips to Maui with their interns is +> revealed, of course, their fortunes will fall. +> +> This represents an opportunity for the market forces -- those same +> forces which you intend to harness to express your own personal +> protest -- to voice their opinion on the quality of America's +> governance during the intervening four years between elections. +> Elections themselves will in effect become meaningless, as they are +> now, since their outcome will be influenced by the stock price of each +> and every congressman, senator, and presidential candidate. +> +> Just think of the coverage that could be given on MSNBC! "Strom +> Thurman (STROM: news - quotes) was down 15% today on fears that his +> latest heart operation will render him unable to attend Senate Armed +> Services committee meetings until November.." This would provide +> rejuvenating content to the econo-political news sector, which has +> found post-economic-bubble coverage to be both tiresome and +> deoressing. The establishment of this new stock exchange would of +> course create jobs for newly unemployed (and governmentally retrained) +> IT systems engineers who could, after passing the electoral securities +> exam, become floor traders. +> +> This would also allow for a convenient and very public method by which +> candidates could raise capital in the public markets to support their +> multi-billion-dollar campaigns. The requirement for the support of +> legions of spin doctors, permanent campaign managers, and investor +> relations personnel would also create jobs -- perhaps even a new +> practice for Ernst & Young, Arthur Anderson, et al. Insider trading +> scandals and misleading revenue declarations would of course catch +> Martha Stewart as an unwitting beneficiary, thus spreading her +> influence to politics. +> +> Dividends, if there are any on record, at the close of a politician's +> career could be paid to current shareholders based on the holdings. +> Pensions funds could provide the institutional investment support +> necessary to underpin even the biggest dogs among the Beltway set. +> Union funds, brokerages, and even pump-and-dump houses could benefit +> from meteoric rises in conservative candidates running in the +> Southeast, and the Bush Governmet would be allowed to place Social +> Security bets where they really mattered. investors who lose their +> retirement, life savings, and support could rest assured that they +> were indeed robbed by crooks rather than poor investors. +> +> Although there's no way to protect any of these for Worldcom-like +> crashes, ambitious, inspired, District Attorneys could file criminal +> suits against Candidates and Campaign Managers who underperform +> expectations, thus assuring investors that their logic was not faulty +> -- instead, they were merely defrauded by crooks and thieves. +> +> On the whole, I believe the system could work. I could certainly work +> as well as our beloved securities trading industry and, given the +> American electoral system's success at effectively expressing the will +> of the people, it certainly couldn't do any worse... +> +> In the meantime, Mike, I think I'll go see your movie and try to +> depose the President. +> +> -Ian. +> +> +> +> On Wednesday, October 9, 2002, at 03:53 PM, Michael Moore's Mailing +> List wrote: +> +>> October 9, 2002 +>> +>> My Film, "Bowling for Columbine," Opens This Friday +>> +>> Dear friends, fans, and fellow evildoers: +>> +>> I am very happy and excited to tell you that this Friday, October 11, +>> my +>> new +>> film, "Bowling for Columbine," will open in New York and Los Angeles. +>> +>> It is, I promise, the last thing the Bushies want projected on the +>> movie +>> screens across America this week. The film is, first and foremost, a +>> devastating indictment of the violence that is done in our name for +>> profit +>> and power -- and no one, in all the advance screenings I have +>> attended, has +>> left the theatre with anything short of rage. I truly believe this +>> film has +>> the potential to rock the nation and get people energized to do +>> something. +>> +>> This is not good news for Junior and Company. Not when they are +>> trying to +>> drag us into another war. Not when a crazed sniper is exercising his +>> constitutional right to own a high-powered rifle. Not when John +>> Ashcroft is +>> still prohibiting the FBI from looking through the gun background +>> check +>> files to see if any of the 19 hijackers or their associates purchased +>> any +>> weapons prior to 9/11 -- because THAT, we are told, would "violate" +>> these +>> terrorists' sacred Second Amendment rights! +>> +>> Yes, I believe this movie can create a lot of havoc -- but I will +>> need ALL +>> of you to help me do this. Are you game? +>> +>> Last February 5th, I wrote to tell you about a book I had written and +>> how +>> the publisher had decided to dump it because they were afraid to +>> publish +>> anything critical of Bush after 9/11. I appealed to you to save +>> "Stupid +>> White Men" from the shredder and to go out and buy it. I promised you +>> would +>> not regret it, and that the book would not only be a great read but an +>> important organizing tool in gumming up the plans of George W. Bush. +>> +>> Within 24 hours, the book went to #1 on the Amazon best seller list. +>> By the +>> fifth day, the book was already into its 9th printing. The publisher +>> was +>> torn between its desire to kill the book or make a wad of money. +>> Greed won +>> out, and this Sunday the book enters its 31st week on the New York +>> Times +>> best seller list -- and its 32nd printing. This is all because of +>> you, my +>> crazy and loyal friends. You made this happen, against all the odds. +>> +>> Now I would like to ask you again to help me with my latest work, +>> "Bowling +>> for Columbine." It's a movie that many critics have already called my +>> best +>> film to date. They may be right. It is certainly the most provocative +>> thing +>> I have ever done. I have spent three years on it and, I have to say, +>> it +>> cuts +>> deeper, harder and funnier that anything I have given you so far. +>> +>> The movie opens this Friday in New York and Los Angeles, and then in +>> 8 more +>> cities next week. How it does in these first ten cities will determine +>> whether or not the rest of the country gets to see it. That is the +>> nutty +>> way +>> our films are released. If it doesn't have a big opening weekend, you +>> can +>> kiss the film good-bye. Therefore, this weekend, this film must be +>> seen by +>> millions of Americans. Can you help me make that happen? +>> +>> "Bowling for Columbine" is not a film simply about guns or school +>> shootings. +>> That is only the starting point for my 2-hour journey into the dark +>> soul of +>> a country that is both victim and master of an enormous amount of +>> violence, +>> both at home and around the world. With this movie I have broadened my +>> canvas to paint a portrait of our nation at the beginning of the 21st +>> century, a nation that seems hell-bent on killing first and asking +>> questions +>> later. It is a movie about the state sponsored acts of violence and +>> terrorism against our own poor, and how we have created a culture of +>> fear +>> that is based on the racial dilemma we continue to ignore. And it's a +>> devastating comedy. +>> +>> This film is going to upset some pretty big apple carts. No film has +>> EVER +>> said the things I am saying in "Bowling for Columbine." I expect to be +>> attacked. I expect certain theatres will not show it for fear of +>> retribution. I expect that this movie will be a bitter pill for many +>> to +>> swallow. +>> +>> This is why I need your help. Movies live or die based on what +>> happens at +>> the box office the first weekend of its release. I need you, if you +>> live in +>> the New York or L.A. area, to go see "Bowling for Columbine" this +>> Friday +>> and +>> Saturday -- and take as many family members and friends with you as +>> possible. I guarantee you will not be disappointed -- and you may +>> just see +>> one of the best films of the year. +>> +>> Monday night in Times Square, "Bowling for Columbine" had its +>> premiere. The +>> crowd was amazing, as it was this past Saturday night at the Chicago +>> Film +>> Festival. The audience kept laughing or hooting or applauding so loud +>> throughout the film that it was hard to hear the next line. +>> +>> The hate mail, the threats, the promises of retribution have already +>> started +>> to roll in to the distributor of this movie, United Artists. They are +>> not +>> backing down. But how long will this last? I need all of you in the +>> New +>> York +>> tri-state and southern California areas to go see "Bowling for +>> Columbine" +>> THIS weekend -- the rest of you can see it in a couple of weeks when +>> it +>> comes to your town. A strong opening not only means that the rest of +>> America +>> will see this film, it means that a good number of people who see it +>> are +>> going to leave the film angry enough to get active and get involved. +>> If it +>> does poorly, I will have a difficult time finding the funding for the +>> movie +>> I want to make next -- a film about 9/11 and how Bush is using that +>> tragic +>> day as a cover for his right-wing agenda. +>> +>> Don't let that happen. Don't let the NRA have one more success by +>> stopping +>> the wider distribution of this movie. And, together, let us not remain +>> silent in our opposition to Bush's phony war against Iraq. +>> +>> If you live in New York, you can see it at the Lincoln Plaza, the +>> Sunshine +>> and the Loews 19th St. In L.A., you can catch it at the Sunset 5, the +>> Westwood Regent, Laemmle Sunset, Laemmle Towncenter (Encino), Landmark +>> Rialto (Pasadena), and Regal University (Irvine). Also, please +>> forward this +>> to your other friends and tell them to go see "Bowling for Columbine" +>> this +>> weekend. +>> +>> And finally, don't miss our new website www.bowlingforcolumbine.com +>> +>> Thank you for your help with this. I feel so honored and privileged +>> to have +>> so many people interested in my work. Last January I was getting +>> 70,000 +>> hits +>> a month on my website. Last month, I got 17 million hits. This alone +>> speaks +>> volumes about the vast majority all of us belong to who are sick and +>> tired +>> of what is going on and are longing for an alternative source of +>> information. +>> +>> I hope that you enjoy "Bowling for Columbine." +>> +>> Thank you again... +>> +>> Yours, +>> +>> Michael Moore +>> +>> --- +>> +>> If you wish to be be unsubscribed from this mailing list, please +>> click the +>> link below and follow the instructions. +>> +>> http://www.michaelmoore.com/mailing/unsubscribe.php +> + + diff --git a/Ch3/datasets/spam/easy_ham/00944.4c4f3aa0e543af3cab4859ad1b1b16be b/Ch3/datasets/spam/easy_ham/00944.4c4f3aa0e543af3cab4859ad1b1b16be new file mode 100644 index 000000000..9affcf72b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00944.4c4f3aa0e543af3cab4859ad1b1b16be @@ -0,0 +1,134 @@ +From exmh-workers-admin@redhat.com Mon Aug 26 16:02:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 79EB244155 + for ; Mon, 26 Aug 2002 10:59:54 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:59:54 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QEStZ24764 for + ; Mon, 26 Aug 2002 15:28:56 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id DBF9B3F3B0; Mon, 26 Aug 2002 + 10:29:02 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 15AFC3EB8D + for ; Mon, 26 Aug 2002 10:28:06 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7QES2e11973 for exmh-workers@listman.redhat.com; Mon, 26 Aug 2002 + 10:28:02 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7QES2Y11967 for + ; Mon, 26 Aug 2002 10:28:02 -0400 +Received: from austin-jump.vircio.com + (IDENT:OLfls4QDQmj2faeCmXKPqkGx1QJwp7Af@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7QEDBl04826 + for ; Mon, 26 Aug 2002 10:13:11 -0400 +Received: (qmail 1431 invoked by uid 104); 26 Aug 2002 14:28:01 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4219. . Clean. Processed in 0.321213 + secs); 26/08/2002 09:28:01 +Received: from deepeddy.vircio.com ([10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 26 Aug 2002 14:28:01 -0000 +Received: (qmail 11081 invoked from network); 26 Aug 2002 14:27:58 -0000 +Received: from localhost (HELO deepeddy.vircio.com) ([127.0.0.1]) + (envelope-sender ) by localhost (qmail-ldap-1.03) + with SMTP for ; 26 Aug 2002 14:27:58 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Robert Elz +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Anolther sequence related traceback +In-Reply-To: <6853.1030345218@munnari.OZ.AU> +References: <1030118301.3993.TMDA@deepeddy.vircio.com> + <16323.1030043119@munnari.OZ.AU> <6853.1030345218@munnari.OZ.AU> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-695163552P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030372078.11075.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 09:27:56 -0500 + +--==_Exmh_-695163552P +Content-Type: text/plain; charset=us-ascii + +> From: Robert Elz +> Date: Mon, 26 Aug 2002 14:00:18 +0700 +> +> Date: Fri, 23 Aug 2002 10:58:20 -0500 +> From: Chris Garrigues +> Message-ID: <1030118301.3993.TMDA@deepeddy.vircio.com> +> +> | Interesting...I don't think this was my bug. +> | It appears that Msg_Change was asked to change to message "-". +> +> Something like that is quite possible, but perviously typing nonsense +> in didn't cause tracebacks, and now it does, and the traceback came +> from the sequence code... +> +> Perviously this would have just caused red messages in the status +> line complaining about my lousy typing. That's probably what it +> should keep on doing (the "red" part isn't important obviously..) + +Tell me what keystroke made it happen so I can reproduce it and I'll see what +I can do about it (or if I can't, I'll hand it off to Brent). + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-695163552P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9ajrsK9b4h5R0IUIRAmd+AJ9WU9Wzf7ey0YYYTpYGcyJfpZuUFwCfX4CN +KE8fxn3ZKKmtJCWgS2fXK/w= +=enN3 +-----END PGP SIGNATURE----- + +--==_Exmh_-695163552P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00945.e6eb589db145071f678c95f19b162b9b b/Ch3/datasets/spam/easy_ham/00945.e6eb589db145071f678c95f19b162b9b new file mode 100644 index 000000000..a4322ee67 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00945.e6eb589db145071f678c95f19b162b9b @@ -0,0 +1,145 @@ +From exmh-workers-admin@redhat.com Mon Aug 26 16:02:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A6A6E44159 + for ; Mon, 26 Aug 2002 10:59:55 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:59:55 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QETrZ24800 for + ; Mon, 26 Aug 2002 15:29:53 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 6AFB63F3B0; Mon, 26 Aug 2002 + 10:30:03 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id DF3893EEF8 + for ; Mon, 26 Aug 2002 10:29:30 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7QETRN12313 for exmh-workers@listman.redhat.com; Mon, 26 Aug 2002 + 10:29:27 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7QETRY12309 for + ; Mon, 26 Aug 2002 10:29:27 -0400 +Received: from austin-jump.vircio.com + (IDENT:f0BF3PrOASQe3KDkXhU9BlKJvR5us9rz@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7QEEZl05220 + for ; Mon, 26 Aug 2002 10:14:36 -0400 +Received: (qmail 1462 invoked by uid 104); 26 Aug 2002 14:29:26 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4219. . Clean. Processed in 0.347504 + secs); 26/08/2002 09:29:26 +Received: from deepeddy.vircio.com ([10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 26 Aug 2002 14:29:26 -0000 +Received: (qmail 11403 invoked from network); 26 Aug 2002 14:29:25 -0000 +Received: from localhost (HELO deepeddy.vircio.com) ([127.0.0.1]) + (envelope-sender ) by localhost (qmail-ldap-1.03) + with SMTP for ; 26 Aug 2002 14:29:25 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Robert Elz +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <25409.1030190165@munnari.OZ.AU> +References: <1030028647.6462.TMDA@deepeddy.vircio.com> + <1029945287.4797.TMDA@deepeddy.vircio.com> + <1029882468.3116.TMDA@deepeddy.vircio.com> <9627.1029933001@munnari.OZ.AU> + <1029943066.26919.TMDA@deepeddy.vircio.com> + <1029944441.398.TMDA@deepeddy.vircio.com> <13277.1030015920@munnari.OZ.AU> + <25409.1030190165@munnari.OZ.AU> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-694865624P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030372165.11396.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 09:29:23 -0500 + +--==_Exmh_-694865624P +Content-Type: text/plain; charset=us-ascii + +> From: Robert Elz +> Date: Sat, 24 Aug 2002 18:56:05 +0700 +> +> Date: Thu, 22 Aug 2002 10:04:06 -0500 +> From: Chris Garrigues +> Message-ID: <1030028647.6462.TMDA@deepeddy.vircio.com> +> +> | hmmm, I assume you're going to report this to the nmh folks? +> +> Yes, I will, sometime, after I look at the nmh sources and see what +> they have managed to break, and why. +> +> But we really want exmh to operate with all the versions of nmh that +> exist, don't we? The patch to have exmh do the right thing, whether this +> bug exists, or not, is trivial, so I'd suggest including it. +> +> Patch follows ... +> +> I have no idea why the sequences were being added after the message list +> before, not that it should make any difference to nmh (or MH). But since +> I stopped doing that, the variable "msgs" isn't really needed any more, +> rather than assigning $pick(msgs) to msgs, and then using $msgs the code +> could just use $pick(msgs) where $msgs is now used. This is just a +> frill though, so I didn't change that. + +I'll fix this in CVS this afternoon. + +Thanks, +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-694865624P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9ajtDK9b4h5R0IUIRAlFjAKCJRCAKR2dkmh5oqHfkagDddfmrBwCdH6vv +FCRlUSeu14edQaoD4yCWoDQ= +=+lzS +-----END PGP SIGNATURE----- + +--==_Exmh_-694865624P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00946.36ac3a6b0fc1b34bb8c125fe75cff193 b/Ch3/datasets/spam/easy_ham/00946.36ac3a6b0fc1b34bb8c125fe75cff193 new file mode 100644 index 000000000..b1d8c1904 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00946.36ac3a6b0fc1b34bb8c125fe75cff193 @@ -0,0 +1,83 @@ +From exmh-workers-admin@redhat.com Mon Aug 26 19:03:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6FD6043F99 + for ; Mon, 26 Aug 2002 14:03:29 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 19:03:29 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QI4SZ03731 for + ; Mon, 26 Aug 2002 19:04:32 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id AAE003F362; Mon, 26 Aug 2002 + 14:04:26 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 2D5FB3F407 + for ; Mon, 26 Aug 2002 14:01:02 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7QI0wM26240 for exmh-workers@listman.redhat.com; Mon, 26 Aug 2002 + 14:00:58 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7QI0wY26236 for + ; Mon, 26 Aug 2002 14:00:58 -0400 +Received: from milou.dyndns.org (h189n1fls22o974.telia.com + [213.64.79.189]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g7QHk5l18771 for ; Mon, 26 Aug 2002 13:46:05 + -0400 +Received: by milou.dyndns.org (Postfix, from userid 500) id 913C73F05; + Mon, 26 Aug 2002 20:00:41 +0200 (CEST) +Received: from tippex.localdomain (localhost [127.0.0.1]) by + milou.dyndns.org (Postfix) with ESMTP id 7DCE73F04 for + ; Mon, 26 Aug 2002 20:00:41 +0200 (CEST) +X-Mailer: exmh version 2.5_20020826 01/15/2001 with nmh-1.0.4 +To: exmh-workers@spamassassin.taint.org +Subject: Exmh && speed +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Anders Eriksson +Message-Id: <20020826180041.913C73F05@milou.dyndns.org> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 20:00:36 +0200 + + +lately I've got the feeling that exmh is getting slower and slower. I +just decided to check that vs. reality, and yes, speed has left the +scene somewhere between the release of 2.5 and now. + +I checked on a number of small messages in a big folder (~10000 +msgs). The delay of the Next button has increased considerably: + +2.5-release: 350-450 msec +latest cvs: 1000-12000 msec + +Frankly I think this is getting close to non-acceptable since the +user settings hasn't changed. + +Anybody have any ideas where performance disappeared? + +/Anders + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00947.488310e3c7ba27ec9d99d390007b8c53 b/Ch3/datasets/spam/easy_ham/00947.488310e3c7ba27ec9d99d390007b8c53 new file mode 100644 index 000000000..5d1bc1cb2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00947.488310e3c7ba27ec9d99d390007b8c53 @@ -0,0 +1,140 @@ +From exmh-workers-admin@redhat.com Mon Aug 26 19:24:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 80A1143F9B + for ; Mon, 26 Aug 2002 14:24:02 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 19:24:02 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QIMAZ04311 for + ; Mon, 26 Aug 2002 19:22:20 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id C4FCB3EA9E; Mon, 26 Aug 2002 + 14:22:20 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 745E13F778 + for ; Mon, 26 Aug 2002 14:17:48 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7QIHjQ04467 for exmh-workers@listman.redhat.com; Mon, 26 Aug 2002 + 14:17:45 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7QIHjY04463 for + ; Mon, 26 Aug 2002 14:17:45 -0400 +Received: from austin-jump.vircio.com (jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7QI2ql23235 + for ; Mon, 26 Aug 2002 14:02:52 -0400 +Received: (qmail 25872 invoked by uid 104); 26 Aug 2002 18:17:44 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4219. . Clean. Processed in 0.323491 + secs); 26/08/2002 13:17:44 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 26 Aug 2002 18:17:43 -0000 +Received: (qmail 10445 invoked from network); 26 Aug 2002 18:17:39 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?2fF9ssrzq9reRjnAkbOlzR5iItlzuL0M?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 26 Aug 2002 18:17:39 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Anders Eriksson +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Exmh && speed +In-Reply-To: <20020826180041.913C73F05@milou.dyndns.org> +References: <20020826180041.913C73F05@milou.dyndns.org> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_1521948024P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030385858.10433.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 13:17:37 -0500 + +--==_Exmh_1521948024P +Content-Type: text/plain; charset=us-ascii + +> From: Anders Eriksson +> Date: Mon, 26 Aug 2002 20:00:36 +0200 +> +> +> lately I've got the feeling that exmh is getting slower and slower. I +> just decided to check that vs. reality, and yes, speed has left the +> scene somewhere between the release of 2.5 and now. +> +> I checked on a number of small messages in a big folder (~10000 +> msgs). The delay of the Next button has increased considerably: +> +> 2.5-release: 350-450 msec +> latest cvs: 1000-12000 msec +> +> Frankly I think this is getting close to non-acceptable since the +> user settings hasn't changed. +> +> Anybody have any ideas where performance disappeared? + +Most likely in the added overhead of managing more sequences. + +I'm sure it can be tuned a bunch, but as I'm leaving for a vacation on Friday, +and have plenty of "real work" to do, I won't be able to do much until I get +back. + +I *will* look at all this when I get back, but if you want to check into +what's slow and fix things while I'm gone, my feelings won't be hurt. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_1521948024P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9anDAK9b4h5R0IUIRAi7qAJsEAXgadxpxYR5yEcwl9VcuhonraACcDI87 +yyhj/sCflWdxrSbT4ZsT9yU= +=AcMk +-----END PGP SIGNATURE----- + +--==_Exmh_1521948024P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00948.12717d1c7815c5e226f5b4324220dcd8 b/Ch3/datasets/spam/easy_ham/00948.12717d1c7815c5e226f5b4324220dcd8 new file mode 100644 index 000000000..c68ed62c3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00948.12717d1c7815c5e226f5b4324220dcd8 @@ -0,0 +1,156 @@ +From exmh-workers-admin@redhat.com Mon Aug 26 19:24:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8FC6844155 + for ; Mon, 26 Aug 2002 14:24:03 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 19:24:03 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QIPeZ04341 for + ; Mon, 26 Aug 2002 19:25:40 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 421593FA4E; Mon, 26 Aug 2002 + 14:25:52 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 202603EA03 + for ; Mon, 26 Aug 2002 14:23:02 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7QIMwx05888 for exmh-workers@listman.redhat.com; Mon, 26 Aug 2002 + 14:22:58 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7QIMwY05884 for + ; Mon, 26 Aug 2002 14:22:58 -0400 +Received: from turing-police.cc.vt.edu (turing-police.cc.vt.edu + [198.82.160.121]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g7QI85l24455 for ; Mon, 26 Aug 2002 14:08:05 + -0400 +Received: from turing-police.cc.vt.edu (localhost [127.0.0.1]) by + turing-police.cc.vt.edu (8.12.5/8.12.5) with ESMTP id g7QIMk7P005756; + Mon, 26 Aug 2002 14:22:46 -0400 +Message-Id: <200208261822.g7QIMk7P005756@turing-police.cc.vt.edu> +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4+dev +To: Anders Eriksson +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Exmh && speed +In-Reply-To: Your message of + "Mon, 26 Aug 2002 20:00:36 +0200." + <20020826180041.913C73F05@milou.dyndns.org> +From: Valdis.Kletnieks@vt.edu +X-Url: http://black-ice.cc.vt.edu/~valdis/ +X-Face-Viewer: See ftp://cs.indiana.edu/pub/faces/index.html to decode picture +X-Face: 34C9$Ewd2zeX+\!i1BA\j{ex+$/V'JBG#;3_noWWYPa"|,I#`R"{n@w>#:{)FXyiAS7(8t( + ^*w5O*!8O9YTe[r{e%7(yVRb|qxsRYw`7J!`AM}m_SHaj}f8eb@d^L>BrX7iO[ +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-1913987426P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 14:22:46 -0400 + +--==_Exmh_-1913987426P +Content-Type: text/plain; charset=us-ascii + +On Mon, 26 Aug 2002 20:00:36 +0200, Anders Eriksson said: + +> I checked on a number of small messages in a big folder (~10000 +> msgs). The delay of the Next button has increased considerably: +> +> 2.5-release: 350-450 msec +> latest cvs: 1000-12000 msec + +I'm not seeing a hit on 'next'. A quick "just pound on 'next' and watch the +wall clock" test shows me able to go through 20 messages in under 5 seconds, +so it's well under 250ms per switch, but I'm seeing a really piggy CPU spike +(100% for a few seconds) in the 'flist' code. Of course, it seems to be +related to number-of-folders: + +[~] wc Mail/.folders + 131 131 1122 Mail/.folders + +It's particularly annoying because things just hose-and-hang for 10 seconds, so +when it hits, you have a long latency before what you're doing actually +happens... + +14:08:54 Background_DoPeriodic flist +14:08:54 Flist_FindSeqs reset=0 +14:08:54 FlistFindStart reset=0 active=0 +14:08:56 Reading /home/valdis/Mail/exmh/.mh_sequences +14:08:56 exmh has 1 msgs in unseen +14:08:56 1 unseen message in 1 folder +14:08:56 {In FlagInner up iconup labelup} +14:08:56 {Setting flag glyph to iconup} +14:08:56 {Set flag state to up} +14:08:58 Reading /home/valdis/Mail/list-spams/.mh_sequences +14:08:58 list-spams has 1 msgs in unseen +14:08:58 2 unseen messages in 2 folders +14:08:58 {In FlagInner up iconup labelup} +14:09:02 Reading /home/valdis/Mail/trash/.mh_sequences +14:09:02 trash has 2 msgs in pseq +14:09:03 /home/valdis/Mail/xemacs/7508 not found +14:09:03 /home/valdis/Mail/xemacs/7507 not found +14:09:03 /home/valdis/Mail/xemacs/7508 not found +14:09:03 /home/valdis/Mail/xemacs/7507 not found +14:09:03 {pseq: 7506-7508 => 7506} +14:09:03 Writing /home/valdis/Mail/xemacs/.mh_sequences +14:09:03 xemacs has 1 msgs in pseq +14:09:03 Flist_Done + +And it takes a hit even if there's no new mail: + +14:11:03 Background_DoPeriodic flist +14:11:03 Flist_FindSeqs reset=0 +14:11:03 FlistFindStart reset=0 active=0 +14:11:12 Flist_Done +14:11:12 Flist_FindSeqs end {9018315 microseconds per iteration} + +I'm perfectly willing to can-opener that code and see where the CPU is +going, but only if nobody is slapping their forehead and mumbling about +a brown-paper-bag bug... ;) +-- + Valdis Kletnieks + Computer Systems Senior Engineer + Virginia Tech + + +--==_Exmh_-1913987426P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (GNU/Linux) +Comment: Exmh version 2.5 07/13/2001 + +iD8DBQE9anH1cC3lWbTT17ARAvzuAKDShPISux8PrLitv4WIzUiCxfj60gCgvEPy +QnWKrjGimFVroJcIHICt2e4= +=T3wR +-----END PGP SIGNATURE----- + +--==_Exmh_-1913987426P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00949.5a860f580179b99a227c4064ac28724c b/Ch3/datasets/spam/easy_ham/00949.5a860f580179b99a227c4064ac28724c new file mode 100644 index 000000000..bf50b20d8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00949.5a860f580179b99a227c4064ac28724c @@ -0,0 +1,128 @@ +From exmh-workers-admin@redhat.com Mon Aug 26 19:44:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7667244155 + for ; Mon, 26 Aug 2002 14:44:38 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 19:44:38 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QIfLZ04793 for + ; Mon, 26 Aug 2002 19:41:22 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id AC48A3F03A; Mon, 26 Aug 2002 + 14:41:20 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 3B5753F3D3 + for ; Mon, 26 Aug 2002 14:39:59 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7QIduZ10272 for exmh-workers@listman.redhat.com; Mon, 26 Aug 2002 + 14:39:56 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7QIdtY10268 for + ; Mon, 26 Aug 2002 14:39:55 -0400 +Received: from austin-jump.vircio.com (jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7QIP3l28717 + for ; Mon, 26 Aug 2002 14:25:03 -0400 +Received: (qmail 27204 invoked by uid 104); 26 Aug 2002 18:39:55 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4219. . Clean. Processed in 0.321256 + secs); 26/08/2002 13:39:54 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 26 Aug 2002 18:39:54 -0000 +Received: (qmail 15683 invoked from network); 26 Aug 2002 18:39:50 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?Eb56NnaDnu2iOMAsaAJvGe2zQ07H1k7j?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 26 Aug 2002 18:39:50 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Valdis.Kletnieks@vt.edu +Cc: Anders Eriksson , exmh-workers@spamassassin.taint.org +Subject: Re: Exmh && speed +In-Reply-To: <200208261822.g7QIMk7P005756@turing-police.cc.vt.edu> +References: <20020826180041.913C73F05@milou.dyndns.org> + <200208261822.g7QIMk7P005756@turing-police.cc.vt.edu> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_1581673767P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030387189.15657.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 13:39:47 -0500 + +--==_Exmh_1581673767P +Content-Type: text/plain; charset=us-ascii + +> From: Valdis.Kletnieks@vt.edu +> Date: Mon, 26 Aug 2002 14:22:46 -0400 +> +> I'm perfectly willing to can-opener that code and see where the CPU is +> going, but only if nobody is slapping their forehead and mumbling about +> a brown-paper-bag bug... ;) + +As I mentioned in my email to Anders, it's certainly in my code and I don't +have time to work on it right now, so I would not be offended if you worked on +it. + +I just this moment found out that my partner has promised a few things would be +done before my vacation that will require my efforts, so it's even more true +that it was when I sent the mail to Anders. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_1581673767P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9anXzK9b4h5R0IUIRAqiEAJsEF+hfbYPkHDm0L6E8Q+a7yy/0pACcDZXl +u6aC2B1PKjc336D56TZvdxc= +=x6ru +-----END PGP SIGNATURE----- + +--==_Exmh_1581673767P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00950.552f3425d82204ce19d468127085b7d9 b/Ch3/datasets/spam/easy_ham/00950.552f3425d82204ce19d468127085b7d9 new file mode 100644 index 000000000..622e56fd8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00950.552f3425d82204ce19d468127085b7d9 @@ -0,0 +1,112 @@ +From exmh-workers-admin@redhat.com Mon Aug 26 23:40:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0EB0844155 + for ; Mon, 26 Aug 2002 18:40:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 23:40:28 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QMdLZ12693 for + ; Mon, 26 Aug 2002 23:39:22 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 40FD23FBDF; Mon, 26 Aug 2002 + 18:39:29 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 1CF8E40269 + for ; Mon, 26 Aug 2002 18:34:59 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7QMYtf01202 for exmh-workers@listman.redhat.com; Mon, 26 Aug 2002 + 18:34:55 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7QMYtY01198 for + ; Mon, 26 Aug 2002 18:34:55 -0400 +Received: from milou.dyndns.org (h189n1fls22o974.telia.com + [213.64.79.189]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g7QMK1l18661 for ; Mon, 26 Aug 2002 18:20:01 + -0400 +Received: by milou.dyndns.org (Postfix, from userid 500) id 0009A3F21; + Tue, 27 Aug 2002 00:34:48 +0200 (CEST) +Received: from tippex.localdomain (localhost [127.0.0.1]) by + milou.dyndns.org (Postfix) with ESMTP id DF7513F20 for + ; Tue, 27 Aug 2002 00:34:48 +0200 (CEST) +X-Mailer: exmh version 2.5_20020826 01/15/2001 with nmh-1.0.4 +To: exmh-workers@spamassassin.taint.org +Subject: Re: Exmh && speed +In-Reply-To: Message from Valdis.Kletnieks@vt.edu of + "Mon, 26 Aug 2002 14:22:46 EDT." + <200208261822.g7QIMk7P005756@turing-police.cc.vt.edu> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Anders Eriksson +Message-Id: <20020826223448.0009A3F21@milou.dyndns.org> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 00:34:43 +0200 + + + +cwg-dated-1030817858.a49b7e@DeepEddy.Com said: +> From: Anders Eriksson +> Date: Mon, 26 Aug 2002 20:00:36 +0200 > +> +> lately I've got the feeling that exmh is getting slower and slower. I +> just decided to check that vs. reality, and yes, speed has left the +> scene somewhere between the release of 2.5 and now. +> +> I checked on a number of small messages in a big folder (~10000 +> msgs). The delay of the Next button has increased considerably: +> +> 2.5-release: 350-450 msec +> latest cvs: 1000-12000 msec +> +> Frankly I think this is getting close to non-acceptable since the +> user settings hasn't changed. +> +> Anybody have any ideas where performance disappeared? +> Most likely in the added overhead of managing more sequences. +> I'm sure it can be tuned a bunch, but as I'm leaving for a vacation on +> Friday, and have plenty of "real work" to do, I won't be able to do +> much until I get back. + +> I *will* look at all this when I get back, but if you want to check +> into what's slow and fix things while I'm gone, my feelings won't be +> hurt. + +> Chris + +Just one more info. I measured the time spent wrapping the stuff in +Ftoc_Next with time {} so the data is for real. One difference +between mine and Valdis' setup (judging from his trace) is that I use +the address book. I've been doing that for ages so that can't be the +problem. + +Is there a way to get the log to print time with higher granularity? + +/A + + + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00951.23649926ba46e21259b518be64d300af b/Ch3/datasets/spam/easy_ham/00951.23649926ba46e21259b518be64d300af new file mode 100644 index 000000000..4928d02e7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00951.23649926ba46e21259b518be64d300af @@ -0,0 +1,92 @@ +From exmh-workers-admin@redhat.com Mon Aug 26 23:40:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 37BB744156 + for ; Mon, 26 Aug 2002 18:40:29 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 23:40:29 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QMdsZ12703 for + ; Mon, 26 Aug 2002 23:39:55 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id C29093F9B1; Mon, 26 Aug 2002 + 18:40:02 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id ABEFB3F553 + for ; Mon, 26 Aug 2002 18:38:20 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7QMcHo02036 for exmh-workers@listman.redhat.com; Mon, 26 Aug 2002 + 18:38:17 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7QMcHY02032 for + ; Mon, 26 Aug 2002 18:38:17 -0400 +Received: from milou.dyndns.org (h189n1fls22o974.telia.com + [213.64.79.189]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g7QMNMl19536 for ; Mon, 26 Aug 2002 18:23:22 + -0400 +Received: by milou.dyndns.org (Postfix, from userid 500) id AB8A13F21; + Tue, 27 Aug 2002 00:38:10 +0200 (CEST) +Received: from tippex.localdomain (localhost [127.0.0.1]) by + milou.dyndns.org (Postfix) with ESMTP id 69C793F20; Tue, 27 Aug 2002 + 00:38:10 +0200 (CEST) +X-Mailer: exmh version 2.5_20020826 01/15/2001 with nmh-1.0.4 +To: Valdis.Kletnieks@vt.edu +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Exmh && speed +In-Reply-To: Message from Valdis.Kletnieks@vt.edu of + "Mon, 26 Aug 2002 14:22:46 EDT." + <200208261822.g7QIMk7P005756@turing-police.cc.vt.edu> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Anders Eriksson +Message-Id: <20020826223810.AB8A13F21@milou.dyndns.org> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 00:38:05 +0200 + + +Valdis.Kletnieks@vt.edu said: +> I checked on a number of small messages in a big folder (~10000 +> msgs). The delay of the Next button has increased considerably: +> +> 2.5-release: 350-450 msec +> latest cvs: 1000-12000 msec +> I'm not seeing a hit on 'next'. A quick "just pound on 'next' and +> watch the wall clock" test shows me able to go through 20 messages in +> under 5 seconds, so it's well under 250ms per switch, but I'm seeing a +> really piggy CPU spike (100% for a few seconds) in the 'flist' code. +> Of course, it seems to be related to number-of-folders: + +> [~] wc Mail/.folders +> 131 131 1122 Mail/.folders + +I have 167 folders (!) and run with bg-proc set to flist (1 minute). +I see delays, but not that much. Maybe 1-3 seconds (which tend to +disappear these days). This is on a PII-266. + +BR, +/A + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00952.61bd88dce9acd2fd68dfd2c2e2d9b675 b/Ch3/datasets/spam/easy_ham/00952.61bd88dce9acd2fd68dfd2c2e2d9b675 new file mode 100644 index 000000000..4e400e711 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00952.61bd88dce9acd2fd68dfd2c2e2d9b675 @@ -0,0 +1,132 @@ +From exmh-workers-admin@redhat.com Tue Aug 27 00:00:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2F5D043F9B + for ; Mon, 26 Aug 2002 19:00:58 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 00:00:58 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QMsVZ13137 for + ; Mon, 26 Aug 2002 23:54:32 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 596833F0F3; Mon, 26 Aug 2002 + 18:54:37 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 1AA623F9F3 + for ; Mon, 26 Aug 2002 18:45:13 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7QMj9S03166 for exmh-workers@listman.redhat.com; Mon, 26 Aug 2002 + 18:45:09 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7QMj9Y03162 for + ; Mon, 26 Aug 2002 18:45:09 -0400 +Received: from austin-jump.vircio.com (jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7QMUFl20693 + for ; Mon, 26 Aug 2002 18:30:15 -0400 +Received: (qmail 5815 invoked by uid 104); 26 Aug 2002 22:45:09 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4219. . Clean. Processed in 0.363928 + secs); 26/08/2002 17:45:08 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 26 Aug 2002 22:45:08 -0000 +Received: (qmail 6638 invoked from network); 26 Aug 2002 22:45:05 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?mUS5Vc4pF2qLz/mLmfOBxJqd0SxJJKFu?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 26 Aug 2002 22:45:05 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Anders Eriksson +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Exmh && speed +In-Reply-To: <20020826223448.0009A3F21@milou.dyndns.org> +References: <20020826223448.0009A3F21@milou.dyndns.org> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-1977488590P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030401904.6628.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 17:45:03 -0500 + +--==_Exmh_-1977488590P +Content-Type: text/plain; charset=us-ascii + +> From: Anders Eriksson +> Date: Tue, 27 Aug 2002 00:34:43 +0200 +> +> Just one more info. I measured the time spent wrapping the stuff in +> Ftoc_Next with time {} so the data is for real. One difference +> between mine and Valdis' setup (judging from his trace) is that I use +> the address book. I've been doing that for ages so that can't be the +> problem. + +Assuming it's my fault (which it probably is since nobody else has really been +in there), it's most likely related to the number of sequences in a folder. +I'd guess that something is either being called that shouldn't be or is being +called more times than it should be. + +> Is there a way to get the log to print time with higher granularity? + +Not that I'm aware of. If you look in the code, there are various places +where the time function is called in order to see how long it took to do +things. You'll probably want to borrow that technique. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-1977488590P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9aq9vK9b4h5R0IUIRAkZrAJ4uCzn3j+5JlaqhDeEOVBMZlSATqwCdGO8z +gy5px3yMpRraa8JkwHRwmM0= +=fGBe +-----END PGP SIGNATURE----- + +--==_Exmh_-1977488590P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00953.39959392b9ccbbcbcacdb4211f2986f0 b/Ch3/datasets/spam/easy_ham/00953.39959392b9ccbbcbcacdb4211f2986f0 new file mode 100644 index 000000000..aeaaddc13 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00953.39959392b9ccbbcbcacdb4211f2986f0 @@ -0,0 +1,92 @@ +From exmh-workers-admin@redhat.com Tue Aug 27 02:35:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9371C43F99 + for ; Mon, 26 Aug 2002 21:35:11 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 02:35:11 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7R1ZjZ20953 for + ; Tue, 27 Aug 2002 02:35:45 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 2D7D64037E; Mon, 26 Aug 2002 + 21:35:27 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 1CC3240335 + for ; Mon, 26 Aug 2002 21:33:58 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7R1Xst31424 for exmh-workers@listman.redhat.com; Mon, 26 Aug 2002 + 21:33:54 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7R1XsY31420 for + ; Mon, 26 Aug 2002 21:33:54 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7R1Ixl17041 for + ; Mon, 26 Aug 2002 21:19:00 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + VAA02021; Mon, 26 Aug 2002 21:17:00 -0400 +Message-Id: <200208270117.VAA02021@blackcomb.panasas.com> +X-Mailer: exmh version 2.5.9 07/25/2002 with nmh-1.0.4 +To: Chris Garrigues +Cc: Robert Elz , exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <1030378636.4138.TMDA@deepeddy.vircio.com> +References: <1030378636.4138.TMDA@deepeddy.vircio.com> +Comments: In-reply-to Chris Garrigues message + dated "Mon, 26 Aug 2002 12:17:15 -0400." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=> + r5~UnRml1:4EglY{9B+ :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 26 Aug 2002 18:16:59 -0700 + + +>>>Chris Garrigues said: + + > Done. I also eliminated the msgs variable on the theory that simpler is + > + > better (I spent a lot of time hacking out the underbrush in exmh while + > working on the sequences window). + +Just a big *thank you* to Chris for being willing to dive in and get +very messy. The sequence management code is some of the very oldest +in exmh, and surely suffered as features were added over several years. +When this stabilizes, it will be a great excuse for a 2.6 release. + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00954.64e0c6e4f6fad8027420d8082164331d b/Ch3/datasets/spam/easy_ham/00954.64e0c6e4f6fad8027420d8082164331d new file mode 100644 index 000000000..16d18ff30 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00954.64e0c6e4f6fad8027420d8082164331d @@ -0,0 +1,95 @@ +From exmh-workers-admin@redhat.com Tue Aug 27 10:04:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 492AD43F9B + for ; Tue, 27 Aug 2002 05:04:58 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 10:04:58 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7R92sZ00417 for + ; Tue, 27 Aug 2002 10:02:54 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id AACBE3F1AE; Tue, 27 Aug 2002 + 05:03:02 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 904C23F67D + for ; Tue, 27 Aug 2002 05:02:10 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7R927T03959 for exmh-workers@listman.redhat.com; Tue, 27 Aug 2002 + 05:02:07 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7R927Y03952 for + ; Tue, 27 Aug 2002 05:02:07 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g7R8ixl14947 for ; + Tue, 27 Aug 2002 04:45:11 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7R8xJl24975; + Tue, 27 Aug 2002 15:59:21 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g7R8wwW12685; Tue, 27 Aug 2002 15:58:58 + +0700 (ICT) +From: Robert Elz +To: Chris Garrigues +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Anolther sequence related traceback +In-Reply-To: <1030372078.11075.TMDA@deepeddy.vircio.com> +References: <1030372078.11075.TMDA@deepeddy.vircio.com> + <1030118301.3993.TMDA@deepeddy.vircio.com> + <16323.1030043119@munnari.OZ.AU> <6853.1030345218@munnari.OZ.AU> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <12683.1030438738@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 15:58:58 +0700 + + Date: Mon, 26 Aug 2002 09:27:56 -0500 + From: Chris Garrigues + Message-ID: <1030372078.11075.TMDA@deepeddy.vircio.com> + + | Tell me what keystroke made it happen so I can reproduce it and I'll + | see what I can do about it (or if I can't, I'll hand it off to Brent). + +Don't worry too much about it, you seem to have plenty of other things +to do in the immediate future, and this one isn't so critical that people +can't use the code in normal ways. + +But, to make it happen, type (with normal key bindings) any digit, so the +code thinks you're trying a message number, then backspace, so the digit +goes away, then '-' (other junk characters don't seem to have the +problem, I have just been playing). That will do it (every time). + +That is: 0 ^h - + +Once you get into that state, the same traceback occurs for every +character you type, until a message is selected with the mouse. + +This is looking like it might be easy to find and fix, so I'll take a +look at it later. + +kre + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00955.34c902aff03e7a4911b6d5e378f69635 b/Ch3/datasets/spam/easy_ham/00955.34c902aff03e7a4911b6d5e378f69635 new file mode 100644 index 000000000..53c0fcb2d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00955.34c902aff03e7a4911b6d5e378f69635 @@ -0,0 +1,133 @@ +From exmh-workers-admin@redhat.com Wed Aug 28 10:46:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6B5B94415A + for ; Wed, 28 Aug 2002 05:45:38 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:45:38 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S1APZ05113 for + ; Wed, 28 Aug 2002 02:10:25 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 2B9FF3FEC4; Tue, 27 Aug 2002 + 21:10:29 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id DD3213F6EC + for ; Tue, 27 Aug 2002 21:08:32 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7S18TP24258 for exmh-workers@listman.redhat.com; Tue, 27 Aug 2002 + 21:08:29 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7S18TY24254 for + ; Tue, 27 Aug 2002 21:08:29 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7S0rSl17185 for + ; Tue, 27 Aug 2002 20:53:28 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + VAA30178; Tue, 27 Aug 2002 21:08:13 -0400 +Message-Id: <200208280108.VAA30178@blackcomb.panasas.com> +X-Mailer: exmh version 2.5.9 07/25/2002 with nmh-1.0.4 +To: Robert Elz +Cc: Chris Garrigues , + exmh-workers@redhat.com +Subject: Re: Anolther sequence related traceback +In-Reply-To: <12683.1030438738@munnari.OZ.AU> +References: <1030372078.11075.TMDA@deepeddy.vircio.com> + <1030118301.3993.TMDA@deepeddy.vircio.com> + <16323.1030043119@munnari.OZ.AU> <6853.1030345218@munnari.OZ.AU> + <12683.1030438738@munnari.OZ.AU> +Comments: In-reply-to Robert Elz message dated "Tue, + 27 Aug 2002 15:58:58 +0700." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=> + r5~UnRml1:4EglY{9B+ :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 18:08:12 -0700 + +You can also duplicate thiswith + +MsgChange - noshow + +at the Tcl prompt in the Log window. I suspect that the sequence +parser, which understands things like 5-22 to mean messages 5 through 22 +is confused when asked to add/remove message "-" from a sequence. + +If we are allowed to assume 8.2 or higher, which we can't really, then +we could add + +if {![string is integer $select(sel)]} { + # bail out of message select mode +} +to the SelectTypein procedure. + +We can probably survive with + +if {![regexp {^[0-9]+$} $select(sel)]} { + #bail out of message select mode +} + +>>>Robert Elz said: + > Date: Mon, 26 Aug 2002 09:27:56 -0500 + > From: Chris Garrigues + > Message-ID: <1030372078.11075.TMDA@deepeddy.vircio.com> + > + > | Tell me what keystroke made it happen so I can reproduce it and I'll + > | see what I can do about it (or if I can't, I'll hand it off to +Brent). + > + > Don't worry too much about it, you seem to have plenty of other things + > to do in the immediate future, and this one isn't so critical that people + > can't use the code in normal ways. + > + > But, to make it happen, type (with normal key bindings) any digit, so the + > code thinks you're trying a message number, then backspace, so the digit + > goes away, then '-' (other junk characters don't seem to have the + > problem, I have just been playing). That will do it (every time). + > + > That is: 0 ^h - + > + > Once you get into that state, the same traceback occurs for every + > character you type, until a message is selected with the mouse. + > + > This is looking like it might be easy to find and fix, so I'll take a + > look at it later. + + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00956.f566e64727b8f438aa73ee8d26e8f31d b/Ch3/datasets/spam/easy_ham/00956.f566e64727b8f438aa73ee8d26e8f31d new file mode 100644 index 000000000..0583c71b4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00956.f566e64727b8f438aa73ee8d26e8f31d @@ -0,0 +1,168 @@ +From exmh-workers-admin@redhat.com Wed Aug 28 10:46:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1DBA943F99 + for ; Wed, 28 Aug 2002 05:46:11 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:46:11 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S4DtZ10295 for + ; Wed, 28 Aug 2002 05:13:55 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 607353ECF2; Wed, 28 Aug 2002 + 00:14:04 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id E4BE240765 + for ; Wed, 28 Aug 2002 00:12:16 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7S4CDf21950 for exmh-workers@listman.redhat.com; Wed, 28 Aug 2002 + 00:12:13 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7S4CDY21946 for + ; Wed, 28 Aug 2002 00:12:13 -0400 +Received: from mail2.lsil.com (mail2.lsil.com [147.145.40.22]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7S3vBl11178 for + ; Tue, 27 Aug 2002 23:57:11 -0400 +Received: from mhbs.lsil.com (mhbs [147.145.31.100]) by mail2.lsil.com + (8.9.3+Sun/8.9.1) with ESMTP id VAA19515 for ; + Tue, 27 Aug 2002 21:12:05 -0700 (PDT) +From: kchrist@lsil.com +Received: from inca.co.lsil.com by mhbs.lsil.com with ESMTP; + Tue, 27 Aug 2002 21:11:53 -0700 +Received: from flytrap.co.lsil.com (flytrap.co.lsil.com [172.20.3.234]) by + inca.co.lsil.com (8.9.3/8.9.3) with ESMTP id WAA18072; Tue, 27 Aug 2002 + 22:11:51 -0600 (MDT) +Received: from bhuta.co.lsil.com (bhuta [172.20.12.135]) by + flytrap.co.lsil.com (8.9.3+Sun/8.9.1) with ESMTP id WAA20558; + Tue, 27 Aug 2002 22:11:50 -0600 (MDT) +Received: from bhuta (localhost [127.0.0.1]) by bhuta.co.lsil.com + (8.10.2+Sun/8.9.1) with ESMTP id g7S4Bfd21693; Tue, 27 Aug 2002 22:11:41 + -0600 (MDT) +To: Brent Welch +Cc: Robert Elz , + Chris Garrigues , + exmh-workers@redhat.com +Subject: Re: Anolther sequence related traceback +Reply-To: Kevin.Christian@lsil.com +In-Reply-To: Your message of + "Tue, 27 Aug 2002 18:08:12 PDT." + <200208280108.VAA30178@blackcomb.panasas.com> +References: <1030372078.11075.TMDA@deepeddy.vircio.com> + <1030118301.3993.TMDA@deepeddy.vircio.com> + <16323.1030043119@munnari.OZ.AU> <6853.1030345218@munnari.OZ.AU> + <12683.1030438738@munnari.OZ.AU> + <200208280108.VAA30178@blackcomb.panasas.com> +Message-Id: <21691.1030507901@bhuta> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Tue, 27 Aug 2002 22:11:41 -0600 + + +I may be wrong but I think a single select entry field is used +for selecting messages and switching folders. Restricting the entries +to be numeric would break the folder switching functionality, wouldn't +it? + +My version of MsgChange, not yet updated, has a check + + if {$msgid != {}} { + # Allow null msgid from Msg_ShowWhat, which supplies line instead + if {$msgid < 0} return + } else { + ... + +at the start of the procedure which takes care of the single '-' case. +Perhaps the thing to do is for MsgChange to validate a msgid as a +number before continuing. + +Kevin + +In message <200208280108.VAA30178@blackcomb.panasas.com>, Brent Welch writes: +> You can also duplicate thiswith +> +> MsgChange - noshow +> +> at the Tcl prompt in the Log window. I suspect that the sequence +> parser, which understands things like 5-22 to mean messages 5 through 22 +> is confused when asked to add/remove message "-" from a sequence. +> +> If we are allowed to assume 8.2 or higher, which we can't really, then +> we could add +> +> if {![string is integer $select(sel)]} { +> # bail out of message select mode +> } +> to the SelectTypein procedure. +> +> We can probably survive with +> +> if {![regexp {^[0-9]+$} $select(sel)]} { +> #bail out of message select mode +> } +> +> >>>Robert Elz said: +> > Date: Mon, 26 Aug 2002 09:27:56 -0500 +> > From: Chris Garrigues m> +> > Message-ID: <1030372078.11075.TMDA@deepeddy.vircio.com> +> > +> > | Tell me what keystroke made it happen so I can reproduce it and I'll +> > | see what I can do about it (or if I can't, I'll hand it off to +> Brent). +> > +> > Don't worry too much about it, you seem to have plenty of other things +> > to do in the immediate future, and this one isn't so critical that people +> > can't use the code in normal ways. +> > +> > But, to make it happen, type (with normal key bindings) any digit, so the +> > code thinks you're trying a message number, then backspace, so the digit +> > goes away, then '-' (other junk characters don't seem to have the +> > problem, I have just been playing). That will do it (every time). +> > +> > That is: 0 ^h - +> > +> > Once you get into that state, the same traceback occurs for every +> > character you type, until a message is selected with the mouse. +> > +> > This is looking like it might be easy to find and fix, so I'll take a +> > look at it later. +> +> +> -- +> Brent Welch +> Software Architect, Panasas Inc +> Pioneering the World's Most Scalable and Agile Storage Network +> www.panasas.com +> welch@panasas.com +> +> +> +> +> _______________________________________________ +> Exmh-workers mailing list +> Exmh-workers@redhat.com +> https://listman.redhat.com/mailman/listinfo/exmh-workers + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00957.7a0420bc5e7ed1ce8333c98dc766e702 b/Ch3/datasets/spam/easy_ham/00957.7a0420bc5e7ed1ce8333c98dc766e702 new file mode 100644 index 000000000..88c7b86bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00957.7a0420bc5e7ed1ce8333c98dc766e702 @@ -0,0 +1,93 @@ +From exmh-workers-admin@redhat.com Wed Aug 28 10:46:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 62EE944156 + for ; Wed, 28 Aug 2002 05:46:24 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:46:24 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S7elZ15054 for + ; Wed, 28 Aug 2002 08:40:47 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 7656D3EBF8; Wed, 28 Aug 2002 + 03:41:01 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 16EF03EBF8 + for ; Wed, 28 Aug 2002 03:40:54 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7S7eok19198 for exmh-workers@listman.redhat.com; Wed, 28 Aug 2002 + 03:40:50 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7S7eoY19194 for + ; Wed, 28 Aug 2002 03:40:50 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g7S7Phl04725 for ; + Wed, 28 Aug 2002 03:25:44 -0400 +Received: from delta.cs.mu.OZ.AU (dhcp253.cc.psu.ac.th [192.168.2.253]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7S7eIU14961; + Wed, 28 Aug 2002 14:40:18 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g7S24KW17300; Wed, 28 Aug 2002 09:04:20 + +0700 (ICT) +From: Robert Elz +To: Brent Welch +Cc: Chris Garrigues , + exmh-workers@redhat.com +Subject: Re: Anolther sequence related traceback +In-Reply-To: <200208280108.VAA30178@blackcomb.panasas.com> +References: <200208280108.VAA30178@blackcomb.panasas.com> + <1030372078.11075.TMDA@deepeddy.vircio.com> + <1030118301.3993.TMDA@deepeddy.vircio.com> + <16323.1030043119@munnari.OZ.AU> <6853.1030345218@munnari.OZ.AU> + <12683.1030438738@munnari.OZ.AU> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <17298.1030500260@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 09:04:20 +0700 + + Date: Tue, 27 Aug 2002 18:08:12 -0700 + From: Brent Welch + Message-ID: <200208280108.VAA30178@blackcomb.panasas.com> + + | If we are allowed to assume 8.2 or higher, which we can't really, then + | we could add +[...] + | to the SelectTypein procedure. + +Yes, I looked at "fixing" it there, but that code is really quite +general, with almost no understanding of what anything means, so I +didn't think that corrupting it with knowlwedge of the semantics of +what it is fetching would really be the best thing to do. + +I ran out of time last night while looking for a better place for +a similar check (I would have gone directly to the regexp - I'm not +that up to date with all the latest tcl changes...) and I'm not sure +I will have time today, but I will keep looking. + +kre + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00958.82f86525742d7ae45f4e6a9df49fb674 b/Ch3/datasets/spam/easy_ham/00958.82f86525742d7ae45f4e6a9df49fb674 new file mode 100644 index 000000000..55994917a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00958.82f86525742d7ae45f4e6a9df49fb674 @@ -0,0 +1,241 @@ +From exmh-workers-admin@redhat.com Wed Aug 28 10:46:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B421644159 + for ; Wed, 28 Aug 2002 05:46:25 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:46:25 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S7fqZ15069 for + ; Wed, 28 Aug 2002 08:41:52 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id B745A3EE66; Wed, 28 Aug 2002 + 03:42:02 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 085C43F409 + for ; Wed, 28 Aug 2002 03:41:16 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7S7fCQ19268 for exmh-workers@listman.redhat.com; Wed, 28 Aug 2002 + 03:41:12 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7S7fCY19264 for + ; Wed, 28 Aug 2002 03:41:12 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g7S7Q6l04801 for ; + Wed, 28 Aug 2002 03:26:07 -0400 +Received: from delta.cs.mu.OZ.AU (dhcp253.cc.psu.ac.th [192.168.2.253]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7S7eOU14972; + Wed, 28 Aug 2002 14:40:24 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g7S6pLW18368; Wed, 28 Aug 2002 13:51:21 + +0700 (ICT) +From: Robert Elz +To: Brent Welch +Cc: Chris Garrigues , + exmh-workers@redhat.com +Subject: Re: Anolther sequence related traceback +In-Reply-To: <200208280108.VAA30178@blackcomb.panasas.com> +References: <200208280108.VAA30178@blackcomb.panasas.com> + <1030372078.11075.TMDA@deepeddy.vircio.com> + <1030118301.3993.TMDA@deepeddy.vircio.com> + <16323.1030043119@munnari.OZ.AU> <6853.1030345218@munnari.OZ.AU> + <12683.1030438738@munnari.OZ.AU> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <18366.1030517481@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 13:51:21 +0700 + +I have some patches that seem to fix/avoid this problem now. (It is +amazing what one can achieve when mains power fails, long enough for +UPS's to run out, and all that is left operational is the laptop and +its battery supply...) + +First, I put in some defensive code into the area where the problem was +occurring, so that if exmh is attempting (for any reason) to expand a +sequence that isn't either a number, or a range of numbers (or a list of +such things) it will simply ignore the trash, rather than giving a traceback. +This one solves the initial problem: + +--- mh.tcl.WAS Thu Aug 22 21:15:06 2002 ++++ mh.tcl Wed Aug 28 12:39:11 2002 +@@ -487,6 +487,10 @@ + set seq {} + set rseq {} + foreach range [split [string trim $sequence]] { ++ if ![regexp {^[0-9]+(-[0-9]+)?$} $range] { ++ # just ignore anything bogus ++ continue; ++ } + set parts [split [string trim $range] -] + if {[llength $parts] == 1} { + lappend seq $parts + + +That is amending proc MhSeqExpand which is where the error was occurring +before (the code assumes that $range is either NNN or NNN-MMM so we should +probably make sure that's true - issue an error instead of just "continue" +if you like, but I don't think an error is needed). + +But that just allowed me to create a similar problem, in another place, +by typing "NNN-" ... and rather than continue to fight fires like this, +I thought I should think more about Brent's suggestion. But rather than +have the selection code actually validate the input, which would mean it +would have to know what is to be valid, I decided that the right thing to +do is just to ignore any errors caused by invalid input, so I just stuck +a "catch" around the MsgShow that is processing the nonsense that the +user has typed. + +This way, any later expansion to what MsgShow treats as legal (maybe +allowing a sequence name, like "prev" or "next", or anything else can +be handled just there, without someone needing to remember that they have +to go fix the selection processing code to allow it. + +But, while I was playing there, I noticed something I never new before. +If you type "66+" the "66" changes to "67" (and so on, for each + that +is typed). I suspect that's perhaps an artifact of "+ is bound to a +different function so it can be used as a toggle between changing the +current and the target folder, but it has to mean something if the current +input mode is a message number, so let it mean...", but now I found it, +I think its nice. But if we can type 66+ why not 66- as well? That +kind of limitation bugs me, so I fixed it. + +And then I wondered about folders with names containing '+' - the special +use of + as the toggle character means there's no way to type those from +the keyboard. So I fixed that as well. This makes two different +restrictions - there's no way to type a folder name that has a name +beginning with '+' (but such a thing in MH would be a pain to use anyway, +so I doubt this will bother anyone), and it is now only possible to +toggle between typing the current & target folder name when the name +being typed is empty. I'm less happy about that part, but I think I +can live with it in order to allow folder names with +'s in them to +exist and be typed. + +Then, since I was there anyway, I decided to do something about another +feature that has always bugged me. In "normal" keyboard mode, 's' is +the key used to show a message. But if you've just typed 123, and +the FTOC is highlighting 123 as the current message, and you want to now +show that message, you can't type 's', you have to type \r instead. +So I "fixed" this one as well. "Fixed" here is in quotes, as it assumes +that the keybinding for MsgShow is 's', if you change that to something +else, it will remain 's' in here. I don't know enough tk/tcl to have it +discover what key is bound to a function in the external world in order +to bind the same one here. \r continues to work of course. + +And now I got started in fixing irritants in this code, I also made it +clear the status line if you abort message/folder entry mode (^C or ^G). +Previously it used to leave the prompt sitting there until the next +message appeared, which made it less than obvious that the keyboard had +reverted to its usual bindings. + +In any case, what follows is the patch that does all of that. I believe +that if you apply this, then the one above is probably not needed, the +"catch" around the "MsgShow" will hide the problem (I don't think we really +need to fix Brent's way of invoking it). Or include it anyway, just +for completeness (I haven't run an exmh with the following patch, but not +the previous one, so I don't know for sure that all will be OK then). + +kre + +--- select.tcl.WAS Thu Aug 22 21:15:07 2002 ++++ select.tcl Wed Aug 28 13:36:17 2002 +@@ -49,9 +49,11 @@ + bindtags $w [list $w Entry] + bind $w {SelectTypein %W %A} + bind $w {SelectToggle %W } ++ bind $w {SelectPrev %W } + bind $w {SelectComplete %W} + bind $w {SelectComplete %W} + bind $w {SelectReturn %W} ++ bind $w {SelectReturn %W %A} + bind $w {SelectBackSpace %W} + bind $w {SelectBackSpace %W} + bind $w {SelectBackSpace %W} +@@ -72,7 +74,7 @@ + append select(sel) $a + Exmh_Status "$select(prompt) $select(sel)" + if ![info exists select(folder)] { +- Msg_Change $select(sel) noshow ++ catch { Msg_Change $select(sel) noshow } + } + } + proc SelectBackSpace { w } { +@@ -91,6 +93,10 @@ + proc SelectToggle {w} { + global select + if [info exists select(folder)] { ++ if {$select(sel) != ""} { ++ SelectTypein $w + ++ return ++ } + set select(toggle) [list [lindex $select(toggle) 1] [lindex $select(toggle) 0]] + set select(prompt) "[lindex $select(toggle) 0] Folder:" + } else { +@@ -101,6 +107,18 @@ + } + Exmh_Status "$select(prompt) $select(sel)" + } ++proc SelectPrev {w} { ++ global select ++ if [info exists select(folder)] { ++ SelectTypein $w "-" ++ } else { ++ catch { ++ incr select(sel) -1 ++ Msg_Change $select(sel) noshow ++ } ++ Exmh_Status "$select(prompt) $select(sel)" ++ } ++} + proc SelectComplete { w } { + global select + if [info exists select(folder)] { +@@ -126,9 +144,13 @@ + Exmh_Status "$select(prompt) $select(sel)" + } + } +-proc SelectReturn { w } { ++proc SelectReturn { w {a {}} } { + global select + if [info exists select(folder)] { ++ if {$a != {}} { ++ SelectTypein $w $a ++ return ++ } + if [info exists select(match)] { + set select(sel) $select(match) + unset select(match) +@@ -151,6 +173,7 @@ + unset select(folder) + } + $select(entry) configure -state disabled ++ Exmh_Status "" + Exmh_Focus + } + proc SelectClear { w } { + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00959.68fb2328c01cd34b7e0f1763c85f9c66 b/Ch3/datasets/spam/easy_ham/00959.68fb2328c01cd34b7e0f1763c85f9c66 new file mode 100644 index 000000000..2c549257c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00959.68fb2328c01cd34b7e0f1763c85f9c66 @@ -0,0 +1,85 @@ +From exmh-workers-admin@redhat.com Wed Aug 28 10:47:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 796F943F99 + for ; Wed, 28 Aug 2002 05:46:57 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:46:57 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S8qrZ17144 for + ; Wed, 28 Aug 2002 09:53:03 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 6C68A3EE13; Wed, 28 Aug 2002 + 04:53:02 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 1289C3ED60 + for ; Wed, 28 Aug 2002 04:52:41 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7S8qb131078 for exmh-workers@listman.redhat.com; Wed, 28 Aug 2002 + 04:52:37 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7S8qbY31074 for + ; Wed, 28 Aug 2002 04:52:37 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g7S8bUl14632 for ; + Wed, 28 Aug 2002 04:37:31 -0400 +Received: from delta.cs.mu.OZ.AU (dhcp253.cc.psu.ac.th [192.168.2.253]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7S8pmU21706; + Wed, 28 Aug 2002 15:51:48 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g7S8otW19656; Wed, 28 Aug 2002 15:50:55 + +0700 (ICT) +From: Robert Elz +To: Brent Welch , + Chris Garrigues , + exmh-workers@redhat.com +Subject: Re: Anolther sequence related traceback +In-Reply-To: <18366.1030517481@munnari.OZ.AU> +References: <18366.1030517481@munnari.OZ.AU> + <200208280108.VAA30178@blackcomb.panasas.com> + <1030372078.11075.TMDA@deepeddy.vircio.com> + <1030118301.3993.TMDA@deepeddy.vircio.com> + <16323.1030043119@munnari.OZ.AU> <6853.1030345218@munnari.OZ.AU> + <12683.1030438738@munnari.OZ.AU> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <19654.1030524655@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 15:50:55 +0700 + + Date: Wed, 28 Aug 2002 13:51:21 +0700 + From: Robert Elz + Message-ID: <18366.1030517481@munnari.OZ.AU> + + + | But, while I was playing there, I noticed something I never new before. + +I also no the difference between new & knew, but I don't always type well... +Um, I mean, I know the difference... + +kre + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00960.c4805da3c25d516184adc9343144c909 b/Ch3/datasets/spam/easy_ham/00960.c4805da3c25d516184adc9343144c909 new file mode 100644 index 000000000..ff0893fd2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00960.c4805da3c25d516184adc9343144c909 @@ -0,0 +1,97 @@ +From exmh-workers-admin@redhat.com Wed Aug 28 15:08:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5E3CC44155 + for ; Wed, 28 Aug 2002 10:08:07 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 15:08:07 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SEA6Z27663 for + ; Wed, 28 Aug 2002 15:10:07 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id C8E3F40A57; Wed, 28 Aug 2002 + 10:10:14 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id BFD1B40A05 + for ; Wed, 28 Aug 2002 10:09:21 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7SE9Iq22132 for exmh-workers@listman.redhat.com; Wed, 28 Aug 2002 + 10:09:18 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7SE9IY22128 for + ; Wed, 28 Aug 2002 10:09:18 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g7SDs9l32404 for ; + Wed, 28 Aug 2002 09:54:11 -0400 +Received: from delta.cs.mu.OZ.AU (dhcp253.cc.psu.ac.th [192.168.2.253]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7SE96U06027; + Wed, 28 Aug 2002 21:09:06 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g7SE6UW21101; Wed, 28 Aug 2002 21:06:30 + +0700 (ICT) +From: Robert Elz +To: Chris Garrigues +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <1030028647.6462.TMDA@deepeddy.vircio.com> +References: <1030028647.6462.TMDA@deepeddy.vircio.com> + <1029945287.4797.TMDA@deepeddy.vircio.com> + <1029882468.3116.TMDA@deepeddy.vircio.com> <9627.1029933001@munnari.OZ.AU> + <1029943066.26919.TMDA@deepeddy.vircio.com> + <1029944441.398.TMDA@deepeddy.vircio.com> <13277.1030015920@munnari.OZ.AU> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <21099.1030543590@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 21:06:30 +0700 + + Date: Thu, 22 Aug 2002 10:04:06 -0500 + From: Chris Garrigues + Message-ID: <1030028647.6462.TMDA@deepeddy.vircio.com> + + | hmmm, I assume you're going to report this to the nmh folks? + +It turns out, when I did some investigation, that my memory of how MH +worked here was wrong (that's not unusual) - the -seq switch seems to +have always done -nolist (requiring a subsequent -list to turn it on +again). + +Given that, I have no idea how the pick code as it was ever worked. In +fact, it quite possibly never did the way it was intended to (I have just +been browsing the 2.5 sources, and that seems to be attempting to do things +that I never saw happen). + +It may be that your new sequence method just exposed the bug that had been +there all along. + +Given this, I won't be sending any bug reports to the nmh people. If nmh +ever seems to be showing any signs further progress, and if I remember this +then, I might send them a change request. The code to make the change is +trivial. + +kre + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00961.509b19e210cc3cda4ae6615a47663d68 b/Ch3/datasets/spam/easy_ham/00961.509b19e210cc3cda4ae6615a47663d68 new file mode 100644 index 000000000..0becb938f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00961.509b19e210cc3cda4ae6615a47663d68 @@ -0,0 +1,131 @@ +From exmh-workers-admin@redhat.com Wed Aug 28 15:28:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9638143F99 + for ; Wed, 28 Aug 2002 10:28:59 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 15:28:59 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SENsZ28165 for + ; Wed, 28 Aug 2002 15:23:54 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 5535E40A1D; Wed, 28 Aug 2002 + 10:24:03 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 847F140A5D + for ; Wed, 28 Aug 2002 10:22:46 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7SEMhx25431 for exmh-workers@listman.redhat.com; Wed, 28 Aug 2002 + 10:22:43 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7SEMgY25422 for + ; Wed, 28 Aug 2002 10:22:42 -0400 +Received: from austin-jump.vircio.com (jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7SE7cl03021 + for ; Wed, 28 Aug 2002 10:07:38 -0400 +Received: (qmail 26320 invoked by uid 104); 28 Aug 2002 14:22:41 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4219. . Clean. Processed in 0.321088 + secs); 28/08/2002 09:22:41 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 28 Aug 2002 14:22:40 -0000 +Received: (qmail 28849 invoked from network); 28 Aug 2002 14:22:36 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?efl8zQ/V1BLT4hZT7Ok4rWYPnEB+v7Wu?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 28 Aug 2002 14:22:36 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Robert Elz +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <21099.1030543590@munnari.OZ.AU> +References: <1030028647.6462.TMDA@deepeddy.vircio.com> + <1029945287.4797.TMDA@deepeddy.vircio.com> + <1029882468.3116.TMDA@deepeddy.vircio.com> <9627.1029933001@munnari.OZ.AU> + <1029943066.26919.TMDA@deepeddy.vircio.com> + <1029944441.398.TMDA@deepeddy.vircio.com> <13277.1030015920@munnari.OZ.AU> + <21099.1030543590@munnari.OZ.AU> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-695600198P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030544555.28815.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 09:22:34 -0500 + +--==_Exmh_-695600198P +Content-Type: text/plain; charset=us-ascii + +> From: Robert Elz +> Date: Wed, 28 Aug 2002 21:06:30 +0700 +> +> It may be that your new sequence method just exposed the bug that had been +> there all along. + +*grin* That's what the past 3 or 4 months of exmh hacking has been all about +for me. + +I've now stabilized everything pretty well for my paid job, so I'll probably +poke around at the sequences performance issues, but rather than checking +changes in, I'll email anything I figure out since I'm leaving town in less +than 48 hours. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-695600198P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9bNyqK9b4h5R0IUIRAl7bAJ9ZjEqTQ4/rok/bB4bhULQSSqUADACdGdHI +egb2mI4CHykNVjHsUq07F3s= +=gxds +-----END PGP SIGNATURE----- + +--==_Exmh_-695600198P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00962.52e0a3b43febe264a7010803f7909f88 b/Ch3/datasets/spam/easy_ham/00962.52e0a3b43febe264a7010803f7909f88 new file mode 100644 index 000000000..4328d5227 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00962.52e0a3b43febe264a7010803f7909f88 @@ -0,0 +1,115 @@ +From exmh-workers-admin@redhat.com Wed Aug 28 15:50:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 550C044155 + for ; Wed, 28 Aug 2002 10:50:03 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 15:50:03 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SEmuZ29177 for + ; Wed, 28 Aug 2002 15:48:56 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 80E063EEE6; Wed, 28 Aug 2002 + 10:49:05 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id DD2FE40226 + for ; Wed, 28 Aug 2002 10:46:31 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7SEkST30975 for exmh-workers@listman.redhat.com; Wed, 28 Aug 2002 + 10:46:28 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7SEkSY30971 for + ; Wed, 28 Aug 2002 10:46:28 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g7SEVFl08404 for ; + Wed, 28 Aug 2002 10:31:16 -0400 +Received: from delta.cs.mu.OZ.AU (dhcp253.cc.psu.ac.th [192.168.2.253]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7SEiwU07437; + Wed, 28 Aug 2002 21:44:58 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g7SEiQW22630; Wed, 28 Aug 2002 21:44:26 + +0700 (ICT) +From: Robert Elz +To: Chris Garrigues +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <1030544555.28815.TMDA@deepeddy.vircio.com> +References: <1030544555.28815.TMDA@deepeddy.vircio.com> + <1030028647.6462.TMDA@deepeddy.vircio.com> + <1029945287.4797.TMDA@deepeddy.vircio.com> + <1029882468.3116.TMDA@deepeddy.vircio.com> <9627.1029933001@munnari.OZ.AU> + <1029943066.26919.TMDA@deepeddy.vircio.com> + <1029944441.398.TMDA@deepeddy.vircio.com> <13277.1030015920@munnari.OZ.AU> + <21099.1030543590@munnari.OZ.AU> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <22628.1030545866@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 21:44:26 +0700 + + Date: Wed, 28 Aug 2002 09:22:34 -0500 + From: Chris Garrigues + Message-ID: <1030544555.28815.TMDA@deepeddy.vircio.com> + + + | so I'll probably poke around at the sequences performance issues, + +Well, there's this wonderful piece of code in MhSeqExpand ... + + # Hack to weed out sequence numbers for messages that don't exist + foreach m $rseq { + if ![file exists $mhProfile(path)/$folder/$m] { + Exmh_Debug $mhProfile(path)/$folder/$m not found + set ix [lsearch $seq $m] + set seq [lreplace $seq $ix $ix] + } else { + # Real hack + break + } + } + +which is going to run slow if a sequence happens to start with a bunch +of messages that don't exist. I'm not sure why it is important that the +first message in the sequence returned exists, but not necessarily any +of the others, but I'm sure glad it is, as MhSeqExpand gets called lots, +and I don't know if I could cope if it were checking every file in the +sequences it is looking at, all the time... + +It may help to keep a list of the valid message numbers for the current +folder (though that would then need to be verified against changes to the +directory). Does tcl have a directory read function? I assume so... + +Mh_Sequence also goes and rereads the files (.mh_sequences and the +context file) but I'm not sure how frequently that one is called. + + | I'll email anything I figure out since I'm leaving town in less + | than 48 hours. + +Have a good vacation. + +kre + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00963.0cc9003be43ed6a642376156e98f5fb1 b/Ch3/datasets/spam/easy_ham/00963.0cc9003be43ed6a642376156e98f5fb1 new file mode 100644 index 000000000..a2bf2cf7b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00963.0cc9003be43ed6a642376156e98f5fb1 @@ -0,0 +1,182 @@ +From exmh-workers-admin@redhat.com Wed Aug 28 17:25:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id DD35543F9B + for ; Wed, 28 Aug 2002 12:25:33 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 17:25:33 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SGOjZ00420 for + ; Wed, 28 Aug 2002 17:24:45 +0100 +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + webnote.net (8.9.3/8.9.3) with ESMTP id RAA05535 for ; + Wed, 28 Aug 2002 17:24:56 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 904EC40FA9; Wed, 28 Aug 2002 + 12:17:08 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 5EB54411CA + for ; Wed, 28 Aug 2002 11:40:09 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7SFe5i16307 for exmh-workers@listman.redhat.com; Wed, 28 Aug 2002 + 11:40:05 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7SFe5Y16300 for + ; Wed, 28 Aug 2002 11:40:05 -0400 +Received: from austin-jump.vircio.com (jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7SFP0l27152 + for ; Wed, 28 Aug 2002 11:25:00 -0400 +Received: (qmail 30298 invoked by uid 104); 28 Aug 2002 15:40:04 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4219. . Clean. Processed in 0.361811 + secs); 28/08/2002 10:40:04 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 28 Aug 2002 15:40:04 -0000 +Received: (qmail 11441 invoked from network); 28 Aug 2002 15:40:01 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?t2lZKiBIqj1XaYC6urc1Q8OBukd5uEA0?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 28 Aug 2002 15:40:01 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Robert Elz +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <22628.1030545866@munnari.OZ.AU> +References: <1030544555.28815.TMDA@deepeddy.vircio.com> + <1030028647.6462.TMDA@deepeddy.vircio.com> + <1029945287.4797.TMDA@deepeddy.vircio.com> + <1029882468.3116.TMDA@deepeddy.vircio.com> <9627.1029933001@munnari.OZ.AU> + <1029943066.26919.TMDA@deepeddy.vircio.com> + <1029944441.398.TMDA@deepeddy.vircio.com> <13277.1030015920@munnari.OZ.AU> + <21099.1030543590@munnari.OZ.AU> <22628.1030545866@munnari.OZ.AU> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_893671157P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030549201.11428.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 10:39:59 -0500 + +--==_Exmh_893671157P +Content-Type: text/plain; charset=us-ascii + +> From: Robert Elz +> Date: Wed, 28 Aug 2002 21:44:26 +0700 +> +> Date: Wed, 28 Aug 2002 09:22:34 -0500 +> From: Chris Garrigues +> Message-ID: <1030544555.28815.TMDA@deepeddy.vircio.com> +> +> +> | so I'll probably poke around at the sequences performance issues, +> +> Well, there's this wonderful piece of code in MhSeqExpand ... +> +> # Hack to weed out sequence numbers for messages that don't exist +> foreach m $rseq { +> if ![file exists $mhProfile(path)/$folder/$m] { +> Exmh_Debug $mhProfile(path)/$folder/$m not found +> set ix [lsearch $seq $m] +> set seq [lreplace $seq $ix $ix] +> } else { +> # Real hack +> break +> } +> } +> +> which is going to run slow if a sequence happens to start with a bunch +> of messages that don't exist. I'm not sure why it is important that the +> first message in the sequence returned exists, but not necessarily any +> of the others, but I'm sure glad it is, as MhSeqExpand gets called lots, +> and I don't know if I could cope if it were checking every file in the +> sequences it is looking at, all the time... + +Although my fingerprints are all over that, it's not actually my code and has +been in there since before 1998. (It's code that I moved from mh.tcl to +sequences.tcl and back again). I'm no5 sure either, but it should be a +one-time penalty because the sequence will be re-written with the bad messages +removed. (I think.) + +> It may help to keep a list of the valid message numbers for the current +> folder (though that would then need to be verified against changes to the +> directory). Does tcl have a directory read function? I assume so... +> +> Mh_Sequence also goes and rereads the files (.mh_sequences and the +> context file) but I'm not sure how frequently that one is called. + +That *was* a problem, but if you look at Mh_Sequence (and Mh_Sequences and +Mh_SequenceUpdate), they all call MhReadSeqs to do the actual reading and it +only reads the sequences if the file has been touched. Look for the +"Exmh_Debug Reading $filename" output in the debug log to see when sequences +are actually reread from disk. + + +My theory is that Ftoc_ShowSequences is being called too often. I'm about to +investigate that. + +> | I'll email anything I figure out since I'm leaving town in less +> | than 48 hours. +> +> Have a good vacation. + +Thanks. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_893671157P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9bO7PK9b4h5R0IUIRAqBBAJ4uhmwloTb4sSG6jDwcm0ul4RvDegCfe8no ++6oHNBLG/UnfWMlQoaSidZA= +=44Ra +-----END PGP SIGNATURE----- + +--==_Exmh_893671157P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00964.4c5e48c8c2668559fbc379616893f3a7 b/Ch3/datasets/spam/easy_ham/00964.4c5e48c8c2668559fbc379616893f3a7 new file mode 100644 index 000000000..a21487145 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00964.4c5e48c8c2668559fbc379616893f3a7 @@ -0,0 +1,144 @@ +From exmh-workers-admin@redhat.com Wed Aug 28 17:25:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 266F744155 + for ; Wed, 28 Aug 2002 12:25:36 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 17:25:36 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SGRKZ00435 for + ; Wed, 28 Aug 2002 17:27:20 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id D5EA140D9E; Wed, 28 Aug 2002 + 12:27:04 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 25DCF3F5A2 + for ; Wed, 28 Aug 2002 12:07:11 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7SG77623708 for exmh-workers@listman.redhat.com; Wed, 28 Aug 2002 + 12:07:07 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7SG77Y23695 for + ; Wed, 28 Aug 2002 12:07:07 -0400 +Received: from austin-jump.vircio.com (jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7SFq2l01887 + for ; Wed, 28 Aug 2002 11:52:02 -0400 +Received: (qmail 32032 invoked by uid 104); 28 Aug 2002 16:07:06 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4219. . Clean. Processed in 0.322653 + secs); 28/08/2002 11:07:06 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 28 Aug 2002 16:07:06 -0000 +Received: (qmail 18053 invoked from network); 28 Aug 2002 16:07:03 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?Q0BayOH9epkaCyxIHBZgJNZAb+NawCfg?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 28 Aug 2002 16:07:03 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Anders Eriksson +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Exmh && speed +In-Reply-To: <20020826180041.913C73F05@milou.dyndns.org> +References: <20020826180041.913C73F05@milou.dyndns.org> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_927886807P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030550822.18045.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 11:07:01 -0500 + +--==_Exmh_927886807P +Content-Type: text/plain; charset=us-ascii + +> From: Anders Eriksson +> Date: Mon, 26 Aug 2002 20:00:36 +0200 +> +> +> lately I've got the feeling that exmh is getting slower and slower. I +> just decided to check that vs. reality, and yes, speed has left the +> scene somewhere between the release of 2.5 and now. +> +> I checked on a number of small messages in a big folder (~10000 +> msgs). The delay of the Next button has increased considerably: +> +> 2.5-release: 350-450 msec +> latest cvs: 1000-12000 msec +> +> Frankly I think this is getting close to non-acceptable since the +> user settings hasn't changed. +> +> Anybody have any ideas where performance disappeared? + +Here's a fix that I think will make a real difference. + +Ftoc_ShowSequences needs to be able to be called with an optional list of msgids +to update and if it's called that way it only removes or adds tags for those +messages. Then in places like MsgChange, we only update the messages which have +changed. + +Also, a separate Ftoc_ShowSequence function which only updates the display of +one sequence should be written which also takes an optional list of msgids. +In a place like MsgChange, it would only need to update the cur sequence. + +If nobody else gets to it, I'll do this when I get back. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_927886807P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9bPUlK9b4h5R0IUIRAqCdAJkBYATj6wLY6RM/EPECD3yGkXMXVgCcDADM +4n+q/8HdvWmkRlGJn3lUb1M= +=Rd2E +-----END PGP SIGNATURE----- + +--==_Exmh_927886807P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00965.5732172f491041028b563a9c919d9b4f b/Ch3/datasets/spam/easy_ham/00965.5732172f491041028b563a9c919d9b4f new file mode 100644 index 000000000..2744c3fbb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00965.5732172f491041028b563a9c919d9b4f @@ -0,0 +1,144 @@ +From exmh-workers-admin@redhat.com Wed Aug 28 18:49:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B0CDC43F99 + for ; Wed, 28 Aug 2002 13:49:08 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 18:49:08 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SHhuZ03444 for + ; Wed, 28 Aug 2002 18:43:56 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 67A4B3EC06; Wed, 28 Aug 2002 + 13:44:05 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id D3BD33EE6F + for ; Wed, 28 Aug 2002 13:33:23 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7SHXKV16333 for exmh-workers@listman.redhat.com; Wed, 28 Aug 2002 + 13:33:20 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7SHXKY16329 for + ; Wed, 28 Aug 2002 13:33:20 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7SHIEl27113 for + ; Wed, 28 Aug 2002 13:18:14 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + NAA05316; Wed, 28 Aug 2002 13:32:46 -0400 +Message-Id: <200208281732.NAA05316@blackcomb.panasas.com> +X-Mailer: exmh version 2.5.9 07/25/2002 with nmh-1.0.4 +To: Robert Elz +Cc: Chris Garrigues , + exmh-workers@redhat.com +Subject: Re: New Sequences Window +In-Reply-To: <22628.1030545866@munnari.OZ.AU> +References: <1030544555.28815.TMDA@deepeddy.vircio.com> + <1030028647.6462.TMDA@deepeddy.vircio.com> + <1029945287.4797.TMDA@deepeddy.vircio.com> + <1029882468.3116.TMDA@deepeddy.vircio.com> <9627.1029933001@munnari.OZ.AU> + <1029943066.26919.TMDA@deepeddy.vircio.com> + <1029944441.398.TMDA@deepeddy.vircio.com> <13277.1030015920@munnari.OZ.AU> + <21099.1030543590@munnari.OZ.AU> <22628.1030545866@munnari.OZ.AU> +Comments: In-reply-to Robert Elz message dated "Wed, + 28 Aug 2002 21:44:26 +0700." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=> + r5~UnRml1:4EglY{9B+ :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 10:32:42 -0700 + + +>>>Robert Elz said: + > Date: Wed, 28 Aug 2002 09:22:34 -0500 + > From: Chris Garrigues + > Message-ID: <1030544555.28815.TMDA@deepeddy.vircio.com> + > + > + > | so I'll probably poke around at the sequences performance issues, + > + > Well, there's this wonderful piece of code in MhSeqExpand ... + > + > # Hack to weed out sequence numbers for messages that don't exist + > foreach m $rseq { + > if ![file exists $mhProfile(path)/$folder/$m] { + > Exmh_Debug $mhProfile(path)/$folder/$m not found + > set ix [lsearch $seq $m] + > set seq [lreplace $seq $ix $ix] + > } else { + > # Real hack + +At least I'm up-front about my hacks :-) + + > break + > } + > } + > + > which is going to run slow if a sequence happens to start with a bunch + > of messages that don't exist. I'm not sure why it is important that the + > first message in the sequence returned exists, but not necessarily any + > of the others, but I'm sure glad it is, as MhSeqExpand gets called lots, + > and I don't know if I could cope if it were checking every file in the + > sequences it is looking at, all the time... + +That was my thinking. My recollection about the first message being valid +is that the ftoc code wants to find that message to start its highlighting, +for example, or you are selecting a message to display. + + > It may help to keep a list of the valid message numbers for the current + > folder (though that would then need to be verified against changes to the + > directory). Does tcl have a directory read function? I assume so... + +glob -nocomplain $mhProfile(path)/$folder * +will return an unsorted list of the directory's contents. +But the thought of keeping an in memory list of valid messages is not fun. +Exmh already maintains in-core lists of messages in sequences, which is +already pretty tricky + + > Mh_Sequence also goes and rereads the files (.mh_sequences and the + > context file) but I'm not sure how frequently that one is called. + +In some places I maintain caches of files by checking their modify time, +but the sequence files are soo small that by the time you stat them to +check their date stamp, you could just read them again. Also, now that +we checkpoint message state on every message view, that file will change +every time. In the old days exmh used to cache a bunch of state about +the folder. + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00966.2a4fb2559839748a35516c870f765211 b/Ch3/datasets/spam/easy_ham/00966.2a4fb2559839748a35516c870f765211 new file mode 100644 index 000000000..fd2d7d7a9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00966.2a4fb2559839748a35516c870f765211 @@ -0,0 +1,141 @@ +From exmh-workers-admin@redhat.com Thu Aug 29 10:57:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 035ED44156 + for ; Thu, 29 Aug 2002 05:57:52 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 10:57:52 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SJRDZ07339 for + ; Wed, 28 Aug 2002 20:27:13 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id A04BB40F04; Wed, 28 Aug 2002 + 15:27:27 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 9140C40E6D + for ; Wed, 28 Aug 2002 15:25:57 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7SJPs717242 for exmh-workers@listman.redhat.com; Wed, 28 Aug 2002 + 15:25:54 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7SJPrY17238 for + ; Wed, 28 Aug 2002 15:25:53 -0400 +Received: from austin-jump.vircio.com (jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7SJAll27212 + for ; Wed, 28 Aug 2002 15:10:47 -0400 +Received: (qmail 441 invoked by uid 104); 28 Aug 2002 19:25:53 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4219. . Clean. Processed in 0.331062 + secs); 28/08/2002 14:25:52 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 28 Aug 2002 19:25:52 -0000 +Received: (qmail 28127 invoked from network); 28 Aug 2002 19:25:49 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?f46tRJtoOisJVssRW1MCBE4W+rSkOi7T?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 28 Aug 2002 19:25:49 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Brent Welch +Cc: Robert Elz , exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <200208281732.NAA05316@blackcomb.panasas.com> +References: <1030544555.28815.TMDA@deepeddy.vircio.com> + <1030028647.6462.TMDA@deepeddy.vircio.com> + <1029945287.4797.TMDA@deepeddy.vircio.com> + <1029882468.3116.TMDA@deepeddy.vircio.com> <9627.1029933001@munnari.OZ.AU> + <1029943066.26919.TMDA@deepeddy.vircio.com> + <1029944441.398.TMDA@deepeddy.vircio.com> <13277.1030015920@munnari.OZ.AU> + <21099.1030543590@munnari.OZ.AU> <22628.1030545866@munnari.OZ.AU> + <200208281732.NAA05316@blackcomb.panasas.com> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_1089505257P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030562749.28110.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 14:25:47 -0500 + +--==_Exmh_1089505257P +Content-Type: text/plain; charset=us-ascii + +> From: Brent Welch +> Date: Wed, 28 Aug 2002 10:32:42 -0700 +> +> +> >>>Robert Elz said: +> > Mh_Sequence also goes and rereads the files (.mh_sequences and the +> > context file) but I'm not sure how frequently that one is called. +> +> In some places I maintain caches of files by checking their modify time, +> but the sequence files are soo small that by the time you stat them to +> check their date stamp, you could just read them again. + +Do you really think this is true? I added a modify time check thinking that +it would make an improvement since we were reading it a *lot* more times in +the new code because we're trying to use the sequences. + +On the other hand, the sequences files are probably being read out of cache +when that happens anyway. + +Even with a small file, I'd think that the time taken to do a +[file mtime $filename] would be worth it. My code is in proc MhReadSeqs. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_1089505257P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9bSO7K9b4h5R0IUIRArNLAKCEDkKX52y2P9sdtrcPsgTEmGZhBgCfe2QY +VNJN/s+r1/dmpUA2v+Gihc4= +=wxvL +-----END PGP SIGNATURE----- + +--==_Exmh_1089505257P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00967.e95bd7ad9ef796e4b8f762d898bfc690 b/Ch3/datasets/spam/easy_ham/00967.e95bd7ad9ef796e4b8f762d898bfc690 new file mode 100644 index 000000000..97efb1ae8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00967.e95bd7ad9ef796e4b8f762d898bfc690 @@ -0,0 +1,133 @@ +From exmh-workers-admin@redhat.com Thu Aug 29 11:03:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0C98F43F9B + for ; Thu, 29 Aug 2002 06:03:24 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:03:24 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7T5kvZ00327 for + ; Thu, 29 Aug 2002 06:46:57 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id CD4923EAF8; Thu, 29 Aug 2002 + 01:47:09 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 0B5373F712 + for ; Thu, 29 Aug 2002 01:40:41 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7T5ebR07573 for exmh-workers@listman.redhat.com; Thu, 29 Aug 2002 + 01:40:37 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7T5ebY07569 for + ; Thu, 29 Aug 2002 01:40:37 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7T5PRl05635 for + ; Thu, 29 Aug 2002 01:25:28 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + BAA23712; Thu, 29 Aug 2002 01:40:22 -0400 +Message-Id: <200208290540.BAA23712@blackcomb.panasas.com> +To: Chris Garrigues +Cc: Brent Welch , Robert Elz , + exmh-workers@redhat.com +Subject: Re: New Sequences Window +In-Reply-To: <1030562749.28110.TMDA@deepeddy.vircio.com> +References: <1030562749.28110.TMDA@deepeddy.vircio.com> +Comments: In-reply-to Chris Garrigues + message dated "Wed, 28 Aug 2002 15:25:47 -0400." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=>r5~UnRml1:4EglY{9B+ + :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 28 Aug 2002 22:40:21 -0700 + +Well, I've used the check-the-modify-time cache trick for files in +many places (not just exmh) so some part of me certainly thinks it +is effective. However, it occurred to me that if we do checkpoint +state, then aren't we modifying the sequences file for the current +folder on every message read? Perhaps we look at the sequences file +more than once per message view? Just idle speculation - we can +stick in some time calls to find out how expensive things are. + +Someone asked about increasing the time resolution in the exmh log. +We could make that conditional on some support available in 8.3 - +Tcl has had "clock seconds" (like gettimeofday) and "clock clicks" +(high resolution timer) for some time. But in 8.3 we've calibrated +clock clicks values to microseconds. It is still only useful for +relative times, but each call to Exmh_Log could emit the microsecond +delta since the last log record. Of course, we are measuring all +the overhead of taking the log record, etc. I'll try it out. + +>>>Chris Garrigues said: + > > From: Brent Welch + > > Date: Wed, 28 Aug 2002 10:32:42 -0700 + > > + > > + > > >>>Robert Elz said: + > > > Mh_Sequence also goes and rereads the files (.mh_sequences and the + > > > context file) but I'm not sure how frequently that one is called. + > > + > > In some places I maintain caches of files by checking their modify + > time, + > > but the sequence files are soo small that by the time you stat them to + > > check their date stamp, you could just read them again. + > + > Do you really think this is true? I added a modify time check thinking + > that + > it would make an improvement since we were reading it a *lot* more times + > in + > the new code because we're trying to use the sequences. + > + > On the other hand, the sequences files are probably being read out of + > cache + > when that happens anyway. + > + > Even with a small file, I'd think that the time taken to do a + > [file mtime $filename] would be worth it. My code is in proc + > MhReadSeqs. + > + > Chris + > + > -- + > Chris Garrigues http://www.DeepEddy.Com/~cwg/ + > virCIO http://www.virCIO.Com + > 716 Congress, Suite 200 + > Austin, TX 78701 +1 512 374 0500 + > + > World War III: The Wrong-Doers Vs. the Evil-Doers. + > + > + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00968.747f6cb40f4a18a2e7185454549d06c2 b/Ch3/datasets/spam/easy_ham/00968.747f6cb40f4a18a2e7185454549d06c2 new file mode 100644 index 000000000..a7d7b7f3d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00968.747f6cb40f4a18a2e7185454549d06c2 @@ -0,0 +1,139 @@ +From exmh-workers-admin@redhat.com Thu Aug 29 15:08:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id F232943F9B + for ; Thu, 29 Aug 2002 10:08:58 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 15:08:59 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TE9WZ15540 for + ; Thu, 29 Aug 2002 15:09:33 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id ACF243F73D; Thu, 29 Aug 2002 + 10:05:13 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 4778B41322 + for ; Thu, 29 Aug 2002 10:00:18 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7TE0Er28625 for exmh-workers@listman.redhat.com; Thu, 29 Aug 2002 + 10:00:14 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7TE0EY28615 for + ; Thu, 29 Aug 2002 10:00:14 -0400 +Received: from austin-jump.vircio.com + (IDENT:Qpq4/2TE3JD70VQFZ7eZ5JUVHIE5ZEvc@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7TDj2l17516 + for ; Thu, 29 Aug 2002 09:45:02 -0400 +Received: (qmail 24745 invoked by uid 104); 29 Aug 2002 14:00:13 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4220. . Clean. Processed in 0.32626 + secs); 29/08/2002 09:00:13 +Received: from deepeddy.vircio.com ([10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 29 Aug 2002 14:00:13 -0000 +Received: (qmail 14267 invoked from network); 29 Aug 2002 14:00:10 -0000 +Received: from localhost (HELO deepeddy.vircio.com) ([127.0.0.1]) + (envelope-sender ) by localhost (qmail-ldap-1.03) + with SMTP for ; 29 Aug 2002 14:00:10 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Brent Welch +Cc: Robert Elz , exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <200208290540.BAA23712@blackcomb.panasas.com> +References: <1030562749.28110.TMDA@deepeddy.vircio.com> + <200208290540.BAA23712@blackcomb.panasas.com> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_948625160P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030629610.14240.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 29 Aug 2002 09:00:08 -0500 + +--==_Exmh_948625160P +Content-Type: text/plain; charset=us-ascii + +> From: Brent Welch +> Date: Wed, 28 Aug 2002 22:40:21 -0700 +> +> Well, I've used the check-the-modify-time cache trick for files in +> many places (not just exmh) so some part of me certainly thinks it +> is effective. However, it occurred to me that if we do checkpoint +> state, then aren't we modifying the sequences file for the current +> folder on every message read? Perhaps we look at the sequences file +> more than once per message view? + +As I'd written the code a few months ago, we were reading the sequences file +first to see what sequences were in it and then once per sequence. This +happens anywhere that we look at sequences, most notably in Ftoc_ShowSequences. +That seemed to be an obvious lose performancewise, but I wanted my abstraction to +have a separate call for "what sequences are in this folder?" and "what +messages are in this sequence?". One option would have been to add another +call to get the data off of disk, but I felt that the check-the-modify-time +technique would be less error-prone. + +I think the biggest gains would be from augmenting Ftoc_ShowSequences to allow +a finer specification of what needs to be updated in the ftoc so that the +current code would only be run when we really do have to update all sequences +for all messages. I described these thoughts in an email message yesterday. + +And again, if it can wait a few weeks, I'm willing to do it. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_948625160P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9bijoK9b4h5R0IUIRApBEAJ9XB23cpckpVw7zWH/Uk1cG6rMCmQCfcNN9 +6I86NmGOWTSr1zajO3HHPnA= +=sApX +-----END PGP SIGNATURE----- + +--==_Exmh_948625160P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00969.2d5fb4b3c8c376b12157cc8e0a2e7111 b/Ch3/datasets/spam/easy_ham/00969.2d5fb4b3c8c376b12157cc8e0a2e7111 new file mode 100644 index 000000000..436e57b1c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00969.2d5fb4b3c8c376b12157cc8e0a2e7111 @@ -0,0 +1,124 @@ +From exmh-workers-admin@redhat.com Mon Sep 2 12:33:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 755BD43F99 + for ; Mon, 2 Sep 2002 07:33:31 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:33:31 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7V7jgZ26669 for + ; Sat, 31 Aug 2002 08:45:47 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 4F6583EFFF; Sat, 31 Aug 2002 + 03:45:54 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 5581C3EA02 + for ; Fri, 30 Aug 2002 19:58:41 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7UNwb619029 for exmh-workers@listman.redhat.com; Fri, 30 Aug 2002 + 19:58:37 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7UNwbY19025 for + ; Fri, 30 Aug 2002 19:58:37 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7UNhFl21007 for + ; Fri, 30 Aug 2002 19:43:15 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + TAA06163; Fri, 30 Aug 2002 19:58:20 -0400 +Message-Id: <200208302358.TAA06163@blackcomb.panasas.com> +X-Mailer: exmh version 2.5.9 07/25/2002 with nmh-1.0.4 +To: Chris Garrigues +Cc: Robert Elz , exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <1030629610.14240.TMDA@deepeddy.vircio.com> +References: <1030629610.14240.TMDA@deepeddy.vircio.com> +Comments: In-reply-to Chris Garrigues + message dated "Thu, 29 Aug 2002 10:00:08 -0400." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=> + r5~UnRml1:4EglY{9B+ :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Fri, 30 Aug 2002 16:58:19 -0700 + + +>>>Chris Garrigues said: + > > From: Brent Welch + > > Date: Wed, 28 Aug 2002 22:40:21 -0700 + > > + > > Well, I've used the check-the-modify-time cache trick for files in + > > many places (not just exmh) so some part of me certainly thinks it + > > is effective. However, it occurred to me that if we do checkpoint + > > state, then aren't we modifying the sequences file for the current + > > folder on every message read? Perhaps we look at the sequences file + > > more than once per message view? + > + > As I'd written the code a few months ago, we were reading the sequences + > file + > first to see what sequences were in it and then once per sequence. This + > + > happens anywhere that we look at sequences, most notably in + > Ftoc_ShowSequences. + > That seemed to be an obvious lose performancewise, but I wanted my + > abstraction to + > have a separate call for "what sequences are in this folder?" and "what + > messages are in this sequence?". One option would have been to add + > another + > call to get the data off of disk, but I felt that the + > check-the-modify-time + > technique would be less error-prone. + +I like the check-the-modify-time technique. + + > I think the biggest gains would be from augmenting Ftoc_ShowSequences to + > allow + > a finer specification of what needs to be updated in the ftoc so that + > the + > current code would only be run when we really do have to update all + > sequences + > for all messages. I described these thoughts in an email message + > yesterday. + > + > And again, if it can wait a few weeks, I'm willing to do it. + +OK - I've yet to dive into the latest round of changes, but I plan to. +I can say I'll make any progress, but I may dabble. Thanks again for +all your work in this area. Generalized sequence support has been on +my to do list for about 8 years. + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/00970.b567daf8f05ff88b2cc4418bdc993913 b/Ch3/datasets/spam/easy_ham/00970.b567daf8f05ff88b2cc4418bdc993913 new file mode 100644 index 000000000..8618d1b11 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00970.b567daf8f05ff88b2cc4418bdc993913 @@ -0,0 +1,106 @@ +From exmh-users-admin@redhat.com Mon Sep 2 13:12:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 20DEC4416D + for ; Mon, 2 Sep 2002 07:38:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:38:28 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g81K1WZ02392 for + ; Sun, 1 Sep 2002 21:01:35 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 3607E3FCDB; Sun, 1 Sep 2002 + 16:01:34 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 131FF3EA2C + for ; Sun, 1 Sep 2002 15:56:56 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g81JuqY32303 for exmh-users@listman.redhat.com; Sun, 1 Sep 2002 + 15:56:52 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g81JupY32299 for + ; Sun, 1 Sep 2002 15:56:51 -0400 +Received: from orion.dwf.com (bgp01360964bgs.sandia01.nm.comcast.net + [68.35.68.128]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g81JfLl20760 for ; Sun, 1 Sep 2002 15:41:21 -0400 +Received: from orion.dwf.com (localhost.dwf.com [127.0.0.1]) by + orion.dwf.com (8.12.1/8.12.1) with ESMTP id g81Ju7SO002623; Sun, + 1 Sep 2002 13:56:07 -0600 +Received: from orion.dwf.com (reg@localhost) by orion.dwf.com + (8.12.1/8.12.1/Submit) with ESMTP id g81Ju6TE002619; Sun, 1 Sep 2002 + 13:56:06 -0600 +Message-Id: <200209011956.g81Ju6TE002619@orion.dwf.com> +X-Mailer: exmh version 2.5 07/25/2002 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org, Ingo Frommholz +Cc: reg@orion.dwf.com +Subject: Re: ARRRGHHH Had GPG working, now it doesnt. +In-Reply-To: Message from Ingo Frommholz of + "Sun, 01 Sep 2002 16:14:11 +0200." + <200209011414.g81EEBP05889@eva.local> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Reg Clemens +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sun, 01 Sep 2002 13:56:06 -0600 + +> Hi, +> +> On Sun, 01 Sep 2002 00:05:03 MDT Reg Clemens wrote: +> +> [...] +> > in messages with GnuPG signatures. But punching the line ALWAYS +> > gives +> > +> > Signature made Thu Aug 29 00:27:17 2002 MDT using DSA key ID BDDF997A +> > Can't check signature: public key not found +> > +> > So, something else is missing. +> +> Yes, the public key of the signature you want to check :-). +> +> Are you really sure that you have the public key of the message's +> signature? If not, try downloading it or try to check a signature from +> which you know you have the public key. +> +> +> + +Ah, sorry for not making that clearer. +But no. +Previously (v1.0.6 of GnuPG) there would be a slight pause at this point while +it went out to get the public key from a keyserver. +Now, whether I have the key or NOT, I get the failure message. + +Its as if it cant find gpg to execute it (but I fixed that path), so there +must be something else that I am missing... + + +-- + Reg.Clemens + reg@dwf.com + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + diff --git a/Ch3/datasets/spam/easy_ham/00971.5b0ba338d08a9077b1256678781e4a93 b/Ch3/datasets/spam/easy_ham/00971.5b0ba338d08a9077b1256678781e4a93 new file mode 100644 index 000000000..75ebb535d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00971.5b0ba338d08a9077b1256678781e4a93 @@ -0,0 +1,104 @@ +From exmh-users-admin@redhat.com Mon Sep 2 13:12:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0DABD44166 + for ; Mon, 2 Sep 2002 07:38:15 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:38:15 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g81EH0Z26508 for + ; Sun, 1 Sep 2002 15:17:00 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 369723ED7C; Sun, 1 Sep 2002 + 10:15:01 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 3BD5B3EB68 + for ; Sun, 1 Sep 2002 10:13:48 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g81EDi615670 for exmh-users@listman.redhat.com; Sun, 1 Sep 2002 + 10:13:44 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g81EDiY15666 for + ; Sun, 1 Sep 2002 10:13:44 -0400 +Received: from iris.ping.de (iris.ping.de [62.72.93.101]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g81DwDl14086 for + ; Sun, 1 Sep 2002 09:58:13 -0400 +Received: from eva.local (eva.local [192.168.99.2]) by iris.ping.de + (8.11.2/8.11.2) with ESMTP id g81EEPH02268 for ; + Sun, 1 Sep 2002 16:14:26 +0200 +Received: from eva.local (localhost [127.0.0.1]) by eva.local + (8.11.2/8.11.2/SuSE Linux 8.11.1-0.5) with ESMTP id g81EEBP05889 for + ; Sun, 1 Sep 2002 16:14:11 +0200 +Message-Id: <200209011414.g81EEBP05889@eva.local> +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +Old-X-Loop: ingo@iris.ping.de +X-Image-Url: http://www.frommholz.org/ingo2small.gif +X-Url: http://www.frommholz.org/ +From: Ingo Frommholz +Organization: Home of Tux the penguin :-) +To: exmh-users@spamassassin.taint.org +Dcc: +Subject: Re: ARRRGHHH Had GPG working, now it doesnt. +In-Reply-To: Your message of + "Sun, 01 Sep 2002 00:05:03 MDT." + <200209010605.g81653XF010950@orion.dwf.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sun, 01 Sep 2002 16:14:11 +0200 + +Hi, + +On Sun, 01 Sep 2002 00:05:03 MDT Reg Clemens wrote: + +[...] +> in messages with GnuPG signatures. But punching the line ALWAYS +> gives +> +> Signature made Thu Aug 29 00:27:17 2002 MDT using DSA key ID BDDF997A +> Can't check signature: public key not found +> +> So, something else is missing. + +Yes, the public key of the signature you want to check :-). + +Are you really sure that you have the public key of the message's +signature? If not, try downloading it or try to check a signature from +which you know you have the public key. + + + +Regards, + +Ingo + +-- +Ingo Frommholz PGP public keys on homepage +ingo@frommholz.org http://www.frommholz.org/ +My childhood inspection is my record collection (Ned's Atomic Dustbin) + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + diff --git a/Ch3/datasets/spam/easy_ham/00972.b94b5871ba0d2d042da63d0fcaa2fa32 b/Ch3/datasets/spam/easy_ham/00972.b94b5871ba0d2d042da63d0fcaa2fa32 new file mode 100644 index 000000000..20e51b36a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00972.b94b5871ba0d2d042da63d0fcaa2fa32 @@ -0,0 +1,125 @@ +From exmh-users-admin@redhat.com Mon Sep 2 23:27:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6D94C16F30 + for ; Mon, 2 Sep 2002 23:26:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 23:26:35 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82HN1Z11538 for + ; Mon, 2 Sep 2002 18:23:02 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 99F623F901; Mon, 2 Sep 2002 + 13:23:08 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id A3E4140346 + for ; Mon, 2 Sep 2002 13:18:50 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g82HIkb11294 for exmh-users@listman.redhat.com; Mon, 2 Sep 2002 + 13:18:46 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g82HIkY11290 for + ; Mon, 2 Sep 2002 13:18:46 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g82H3Bl27025 for + ; Mon, 2 Sep 2002 13:03:11 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + NAA12734; Mon, 2 Sep 2002 13:18:39 -0400 +Message-Id: <200209021718.NAA12734@blackcomb.panasas.com> +To: exmh-users@spamassassin.taint.org +Cc: Ingo Frommholz , reg@orion.dwf.com +Subject: Re: ARRRGHHH Had GPG working, now it doesnt. +In-Reply-To: <200209011956.g81Ju6TE002619@orion.dwf.com> +References: <200209011956.g81Ju6TE002619@orion.dwf.com> +Comments: In-reply-to Reg Clemens message dated "Sun, 01 Sep + 2002 13:56:06 -0600." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=>r5~UnRml1:4EglY{9B+ + :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 02 Sep 2002 10:18:39 -0700 + +If you haven't already, you should enable the debug log under +Hacking Support preferences and look for clues there. + +>>>Reg Clemens said: + > > Hi, + > > + > > On Sun, 01 Sep 2002 00:05:03 MDT Reg Clemens wrote: + > > + > > [...] + > > > in messages with GnuPG signatures. But punching the line ALWAYS + > > > gives + > > > + > > > Signature made Thu Aug 29 00:27:17 2002 MDT using DSA key ID BDD + F997A + > > > Can't check signature: public key not found + > > > + > > > So, something else is missing. + > > + > > Yes, the public key of the signature you want to check :-). + > > + > > Are you really sure that you have the public key of the message's + > > signature? If not, try downloading it or try to check a signature from + > > which you know you have the public key. + > > + > > + > > + > + > Ah, sorry for not making that clearer. + > But no. + > Previously (v1.0.6 of GnuPG) there would be a slight pause at this point whi + le + > it went out to get the public key from a keyserver. + > Now, whether I have the key or NOT, I get the failure message. + > + > Its as if it cant find gpg to execute it (but I fixed that path), so there + > must be something else that I am missing... + > + > + > -- + > Reg.Clemens + > reg@dwf.com + > + > + > + > + > _______________________________________________ + > Exmh-users mailing list + > Exmh-users@redhat.com + > https://listman.redhat.com/mailman/listinfo/exmh-users + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + diff --git a/Ch3/datasets/spam/easy_ham/00973.42545038686536033b1032380502ae09 b/Ch3/datasets/spam/easy_ham/00973.42545038686536033b1032380502ae09 new file mode 100644 index 000000000..8e4e2e7d2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00973.42545038686536033b1032380502ae09 @@ -0,0 +1,186 @@ +From exmh-users-admin@redhat.com Tue Sep 3 14:20:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CB0A216F40 + for ; Tue, 3 Sep 2002 14:18:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 14:18:48 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8322hZ01052 for + ; Tue, 3 Sep 2002 03:02:44 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 31DB93F4F6; Mon, 2 Sep 2002 + 22:03:01 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id F1C093FFC4 + for ; Mon, 2 Sep 2002 22:02:07 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g83223J31599 for exmh-users@listman.redhat.com; Mon, 2 Sep 2002 + 22:02:03 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g83223Y31570 for + ; Mon, 2 Sep 2002 22:02:03 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g831kQl32226 for + ; Mon, 2 Sep 2002 21:46:26 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + WAA01468; Mon, 2 Sep 2002 22:01:50 -0400 +Message-Id: <200209030201.WAA01468@blackcomb.panasas.com> +To: Reg Clemens +Cc: exmh-users@spamassassin.taint.org +Subject: Re: ARRRGHHH Had GPG working, now it doesnt. +In-Reply-To: <200209021953.g82Jrerq003365@orion.dwf.com> +References: <200209021953.g82Jrerq003365@orion.dwf.com> +Comments: In-reply-to Reg Clemens message dated "Mon, 02 Sep + 2002 13:53:40 -0600." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=>r5~UnRml1:4EglY{9B+ + :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 02 Sep 2002 19:01:49 -0700 + +2 things - first, the switch parser changed in a subtle way with 8.4 - +byte-code compilation was added, and it is slightly more strict in +its parsing than the original parser. You can only have a comment where +Tcl would expect to find a command. Switch has a "pattern - body" +strucutre, so if you goof and put a comment where it is trying to find +a pattern, both of you will be confused with the results. The +subtlty arises with extra whitespace and newlines. I can't give you +the exact case, but I know exmh had one example that stopped parsing +correctly, and was arguably wrong before. + +2nd - I've managed to remain fairly ignoranat of the PGP support in +exmh, so you'll have to dig in yourself or see if someone else on +exmh-users or exmh-workers is having similar problems. + +>>>Reg Clemens said: + > > If you haven't already, you should enable the debug log under + > > Hacking Support preferences and look for clues there. + > > + > > >>>Reg Clemens said: + > > > > Hi, + > > > > + > > > > On Sun, 01 Sep 2002 00:05:03 MDT Reg Clemens wrote: + > > > > + > > > > [...] + > > > > > in messages with GnuPG signatures. But punching the line ALWAYS + > > > > > gives + > > > > > + > > > > > Signature made Thu Aug 29 00:27:17 2002 MDT using DSA key I + D BDD + > > F997A + > > > > > Can't check signature: public key not found + > > > > > + > > > > > So, something else is missing. + > > > > + > > > > Yes, the public key of the signature you want to check :-). + > > > > + > > > > Are you really sure that you have the public key of the message's + > > > > signature? If not, try downloading it or try to check a signature fro + m + > > > > which you know you have the public key. + > > > > + > > > > + > > > > + > > > + > > > Ah, sorry for not making that clearer. + > > > But no. + > > > Previously (v1.0.6 of GnuPG) there would be a slight pause at this poin + t whi + > > le + > > > it went out to get the public key from a keyserver. + > > > Now, whether I have the key or NOT, I get the failure message. + > > > + > > > Its as if it cant find gpg to execute it (but I fixed that path), so th + ere + > > > must be something else that I am missing... + > > > + > > > + > > > -- + > > > Reg.Clemens + > > > reg@dwf.com + > > > + > > > + > > > + > > > + > > > _______________________________________________ + > > > Exmh-users mailing list + > > > Exmh-users@redhat.com + > > > https://listman.redhat.com/mailman/listinfo/exmh-users + > > + > > -- + > > Brent Welch + > > Software Architect, Panasas Inc + > > Pioneering the World's Most Scalable and Agile Storage Network + > > www.panasas.com + > > welch@panasas.com + > > + > + > + > Partial solution. + > And this MAY be related to using tcl/tk 8.4b1, as I had a similar + > problem about a month ago elsewhere in EXMH (which you found). + > + > But first. + > I really feel like something has changed out from under me + > with my making no changes to EXMH. Namely, when I first got + > GPG up and working (for reading signatures) all I did was + > touch the 'Check Signature' button' and it went out and queried + > the keyserver for me. + > Now Im getting a separate box, after the failure to find the + > public key on my keyring, asking me of I want to 'Query keyserver' + > + > I KNOW that I never had to touch a 'Query keyserver' button in + > the past, but there it is now, and I havent touched EXMH. Spooky. + > + > I have been working back and forth between GPG 1.0.6 and 1.0.7 + > but its not clear how that could be the problem, as Im now getting + > the 'Query' message when running either... + > + > --- + > + > OK, enough about my confusion. + > The CURRENT problem seems to be a COMMENT in a SWITCH statement + > at line 86 in pgpWWW.tcl. Tcl 8.4b1 doesnt like it and I get your + > popup box. Remove it and no popupbox, but EXMH hangs (sigh). + > So, not a complete solution, but at least a start. + > + > Thanks for the interest. + > + > Reg.Clemens + > reg@dwf.com + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + diff --git a/Ch3/datasets/spam/easy_ham/00974.e075ae7ee23cfacb24d0d1b59ae5af83 b/Ch3/datasets/spam/easy_ham/00974.e075ae7ee23cfacb24d0d1b59ae5af83 new file mode 100644 index 000000000..d0da3cb2c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00974.e075ae7ee23cfacb24d0d1b59ae5af83 @@ -0,0 +1,83 @@ +From exmh-users-admin@redhat.com Fri Sep 6 11:36:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 650ED16F03 + for ; Fri, 6 Sep 2002 11:35:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:35:09 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869rwC29378 for + ; Fri, 6 Sep 2002 10:53:58 +0100 +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + webnote.net (8.9.3/8.9.3) with ESMTP id WAA18773 for ; + Thu, 5 Sep 2002 22:49:37 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 0537B40CA8; Thu, 5 Sep 2002 + 17:42:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id E230A3FB2C + for ; Thu, 5 Sep 2002 17:41:05 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g85Lf1x00556 for exmh-users@listman.redhat.com; Thu, 5 Sep 2002 + 17:41:01 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g85Lf1l00550 for + ; Thu, 5 Sep 2002 17:41:01 -0400 +Received: from siva.sandcraft.com (gw.sandcraft.com [206.171.22.2]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g85LP4106979 for + ; Thu, 5 Sep 2002 17:25:04 -0400 +Received: from siva (localhost [127.0.0.1]) by siva.sandcraft.com + (8.10.2+Sun/8.9.1) with ESMTP id g85Ler718109 for ; + Thu, 5 Sep 2002 14:40:53 -0700 (PDT) +Message-Id: <200209052140.g85Ler718109@siva.sandcraft.com> +To: exmh-users@spamassassin.taint.org +Subject: Changed location of incoming mail. exmh not working!! +From: Siva Doriaswamy +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Thu, 05 Sep 2002 14:40:53 -0700 + +I use exmh 2.5 with procmail for presorting incoming mail and move it to +the relevant folder using rcvstore. + +Recently, my incoming mail (or spool) location moved to another disk. +I'm not quite clear how to reconfigure procmail/rcvstore/exmh to accept +mail from the new location. + +There seems to be a variable in exmh-defaults (bgspool). It says at the +top of the file not to edit these lines. So, I went ahead and edited it :-) +That does not make a difference. + +It seems like procmail is the one that is actually reading the mail from +my spool/incoming mail area and piping it to rcvstore. So, I need to +configure that probably. + +Any idea how I would do this? + +Thanks +Siva + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00975.23aa3095e145bf342502ee60bc602c28 b/Ch3/datasets/spam/easy_ham/00975.23aa3095e145bf342502ee60bc602c28 new file mode 100644 index 000000000..a2ad0bcb2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00975.23aa3095e145bf342502ee60bc602c28 @@ -0,0 +1,126 @@ +From exmh-users-admin@redhat.com Fri Sep 6 11:38:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 391BB16F1C + for ; Fri, 6 Sep 2002 11:37:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:37:36 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869puC29076 for + ; Fri, 6 Sep 2002 10:51:56 +0100 +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + webnote.net (8.9.3/8.9.3) with ESMTP id AAA19323 for ; + Fri, 6 Sep 2002 00:51:59 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id D082A40C27; Thu, 5 Sep 2002 + 18:59:01 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id C1D1B4025A + for ; Thu, 5 Sep 2002 18:57:51 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g85Mvlb14608 for exmh-users@listman.redhat.com; Thu, 5 Sep 2002 + 18:57:47 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g85Mvkl14604 for + ; Thu, 5 Sep 2002 18:57:46 -0400 +Received: from ka.graffl.net (ka.graffl.net [193.154.165.8]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g85Mfk121532 for + ; Thu, 5 Sep 2002 18:41:49 -0400 +Received: from fsck.waldner.priv.at (fsck.waldner.priv.at + [213.225.31.166]) by ka.graffl.net (8.12.3/8.12.3/Debian -4) with ESMTP id + g85MvaYU031202 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 + verify=FAIL) for ; Fri, 6 Sep 2002 00:57:37 +0200 +Received: from fsck.intern.waldner.priv.at (localhost [127.0.0.1]) by + fsck.waldner.priv.at (8.12.3/8.12.3/Debian -4) with ESMTP id + g85MvZWb002051 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 + verify=OK) for ; Fri, 6 Sep 2002 00:57:35 +0200 +Received: (from waldner@localhost) by fsck.intern.waldner.priv.at + (8.12.3/8.12.3/Debian -4) id g85MvZm0002050 for exmh-users@redhat.com; + Fri, 6 Sep 2002 00:57:35 +0200 +Message-Id: <200209052257.g85MvZm0002050@fsck.intern.waldner.priv.at> +X-Mailer: exmh version 2.5 07/13/2001 (debian 2.5-1) with nmh-1.0.4+dev +To: exmh-users@spamassassin.taint.org +Subject: Re: Changed location of incoming mail. exmh not working!! +In-Reply-To: Your message of + "Thu, 05 Sep 2002 14:40:53 PDT." + <200209052140.g85Ler718109@siva.sandcraft.com> +From: Robert Waldner +X-Organization: Bah. Speaking only for me humble self. +X-GPG: telnet fsck.waldner.priv.at for public key +X-GPG-Fingerprint: 406F 241A 9E21 CF92 1DED A0A8 1343 7348 9AF9 DE82 +X-GPG-Keyid: 0x9AF9DE82 +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="----------=_1031266655-417-16"; + micalg="pgp-sha1"; + protocol="application/pgp-signature" +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 06 Sep 2002 00:57:32 +0200 + +This is a multi-part message in MIME format. +It has been signed conforming to RFC2015. +You'll need PGP or GPG to check the signature. + +------------=_1031266655-417-16 +Content-Type: text/plain; charset=us-ascii + + +On Thu, 05 Sep 2002 14:40:53 PDT, Siva Doriaswamy writes: +>Recently, my incoming mail (or spool) location moved to another disk. +>I'm not quite clear how to reconfigure procmail/rcvstore/exmh to accept +>mail from the new location. + +How do you feed procmail? Not with a .forward, I'd guess. + +How does mail enter your system anyway? Per fetchmail maybe? Or direct + SMTP-delivery? Or does it just magically hit your spool? + +Lotsa questions... + +cheers, +&rw +-- +-- Booze: because one doesn't solve the world's problems over white wine. + + + +------------=_1031266655-417-16 +Content-Type: application/pgp-signature; name="signature.ng" +Content-Disposition: inline; filename="signature.ng" +Content-Transfer-Encoding: 7bit + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (GNU/Linux) + +iD8DBQE9d+FfE0NzSJr53oIRAtvLAJ9Dq7N0j3WXKRCwPClW+S3mc9uvjACfc8F1 +tcsFzzucvnl9rvSegUfuBZU= +=G2/X +-----END PGP SIGNATURE----- + +------------=_1031266655-417-16-- + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00976.13ecce82e8d787ee17ae688d4c70737d b/Ch3/datasets/spam/easy_ham/00976.13ecce82e8d787ee17ae688d4c70737d new file mode 100644 index 000000000..80a3914f0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00976.13ecce82e8d787ee17ae688d4c70737d @@ -0,0 +1,76 @@ +From exmh-users-admin@redhat.com Mon Sep 9 20:33:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 223B916F03 + for ; Mon, 9 Sep 2002 20:33:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 20:33:38 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g89J9pC28601 for + ; Mon, 9 Sep 2002 20:09:51 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id D3D07406CD; Mon, 9 Sep 2002 + 15:09:13 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 020DD40C52 + for ; Mon, 9 Sep 2002 15:06:02 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g89J5vI26688 for exmh-users@listman.redhat.com; Mon, 9 Sep 2002 + 15:05:57 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g89J5vl26684 for + ; Mon, 9 Sep 2002 15:05:57 -0400 +Received: from lin12.triumf.ca + (IDENT:v+BDSWAha2IPsgxS0mz71/BYOZ+H0n0c@lin12.Triumf.CA [142.90.114.144]) + by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g89Ine131496 for + ; Mon, 9 Sep 2002 14:49:40 -0400 +Received: from lin12.triumf.ca (baartman@localhost) by lin12.triumf.ca + (8.11.6/8.11.6) with ESMTP id g89J5tH02285 for ; + Mon, 9 Sep 2002 12:05:55 -0700 +Message-Id: <200209091905.g89J5tH02285@lin12.triumf.ca> +X-Mailer: exmh version 2.4 06/23/2000 with nmh-1.0.4 +X-Url: http://www.triumf.ca/people/baartman/ +X-Image-Url: http://lin12.triumf.ca/me3.gif +To: exmh-users@spamassassin.taint.org +Subject: Sorting +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Rick Baartman +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 09 Sep 2002 12:05:55 -0700 + +Is there a way to do a global Sort command? Here's the situation: I like to +sort by date every folder. I'm cleaning up my inbox from most recent to oldest, +since I find this direction most efficient (I guess because it helps me +recognize the significance of individual, old messages). But this adds messages +to my other folders in the wrong order. When I'm done, I'd like to re-sort all +the folders I've changed. + +-- +rick + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00977.8046655ae38293b58a69a94389f20020 b/Ch3/datasets/spam/easy_ham/00977.8046655ae38293b58a69a94389f20020 new file mode 100644 index 000000000..1239997af --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00977.8046655ae38293b58a69a94389f20020 @@ -0,0 +1,82 @@ +From exmh-users-admin@redhat.com Mon Sep 9 20:33:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C7A5F16EFC + for ; Mon, 9 Sep 2002 20:33:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 20:33:41 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g89JFdC28784 for + ; Mon, 9 Sep 2002 20:15:40 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 8D6DA4079B; Mon, 9 Sep 2002 + 15:13:05 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id B8E3140CB0 + for ; Mon, 9 Sep 2002 15:12:41 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g89JCaV27753 for exmh-users@listman.redhat.com; Mon, 9 Sep 2002 + 15:12:36 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g89JCal27749 for + ; Mon, 9 Sep 2002 15:12:36 -0400 +Received: from whatexit.org (postfix@whatexit.org [64.7.3.122]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g89IuJ132613 for + ; Mon, 9 Sep 2002 14:56:19 -0400 +Received: from joisey.whatexit.org (localhost [127.0.0.1]) by whatexit.org + (Postfix) with ESMTP id EBB3DB1 for ; + Mon, 9 Sep 2002 15:12:28 -0400 (EDT) +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +From: Tom Reingold +X-Mailer: exmh version 2.5 07/13/2001 +X-Uri: http://whatexit.org/~tommy +X-Image-Url: http://whatexit.org/~tommy/zombie.gif +In-Reply-To: Message from Rick Baartman of Mon, + 09 Sep 2002 12:05:55 PDT <200209091905.g89J5tH02285@lin12.triumf.ca> +Message-Id: <20020909191229.EBB3DB1@whatexit.org> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 09 Sep 2002 15:12:28 -0400 + + +On Mon, 09 Sep 2002 12:05:55 PDT, + Rick Baartman wrote: + +> Is there a way to do a global Sort command? Here's the situation: +> I like to sort by date every folder. I'm cleaning up my inbox from +> most recent to oldest, since I find this direction most efficient (I +> guess because it helps me recognize the significance of individual, +> old messages). But this adds messages to my other folders in the +> wrong order. When I'm done, I'd like to re-sort all the folders I've +> changed. + +I don't understand. How does sorting one folder add messages to +other folders? What do you use to sort? + +Tom + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00978.a136387f15961a4f0a2c0ca583206199 b/Ch3/datasets/spam/easy_ham/00978.a136387f15961a4f0a2c0ca583206199 new file mode 100644 index 000000000..7ecd74699 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00978.a136387f15961a4f0a2c0ca583206199 @@ -0,0 +1,79 @@ +From exmh-users-admin@redhat.com Mon Sep 9 20:33:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4A6E416EFC + for ; Mon, 9 Sep 2002 20:33:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 20:33:48 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g89JUNC29185 for + ; Mon, 9 Sep 2002 20:30:23 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id F2DB540CFB; Mon, 9 Sep 2002 + 15:27:14 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 4300F40CFF + for ; Mon, 9 Sep 2002 15:21:49 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g89JLi030412 for exmh-users@listman.redhat.com; Mon, 9 Sep 2002 + 15:21:44 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g89JLil30408 for + ; Mon, 9 Sep 2002 15:21:44 -0400 +Received: from lin12.triumf.ca + (IDENT:sOKb8Z9CjEA+Gw8GPx3EBglRz+JI2cpw@lin12.Triumf.CA [142.90.114.144]) + by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g89J5Q102164 for + ; Mon, 9 Sep 2002 15:05:26 -0400 +Received: from lin12.triumf.ca (baartman@localhost) by lin12.triumf.ca + (8.11.6/8.11.6) with ESMTP id g89JLgt02406 for ; + Mon, 9 Sep 2002 12:21:42 -0700 +Message-Id: <200209091921.g89JLgt02406@lin12.triumf.ca> +X-Mailer: exmh version 2.4 06/23/2000 with nmh-1.0.4 +X-Url: http://www.triumf.ca/people/baartman/ +X-Image-Url: http://lin12.triumf.ca/me3.gif +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +In-Reply-To: <20020909191229.EBB3DB1@whatexit.org> +References: <20020909191229.EBB3DB1@whatexit.org> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Rick Baartman +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 09 Sep 2002 12:21:42 -0700 + +> I don't understand. How does sorting one folder add messages to +> other folders? What do you use to sort? +> + +Sorry I wasn't clear. I am transferring messages from my inbox to other folders +and since I am doing it from most recent to oldest, they appear in those +folders in the wrong order and need re-sorting. + +-- +rick + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00979.9eef0c20fa5a680d5d4d5b752bbf9453 b/Ch3/datasets/spam/easy_ham/00979.9eef0c20fa5a680d5d4d5b752bbf9453 new file mode 100644 index 000000000..372aed8cf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00979.9eef0c20fa5a680d5d4d5b752bbf9453 @@ -0,0 +1,103 @@ +From exmh-users-admin@redhat.com Tue Sep 10 11:22:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2324616F03 + for ; Tue, 10 Sep 2002 11:22:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:22:35 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g89JowC29985 for + ; Mon, 9 Sep 2002 20:50:58 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 645BB40D88; Mon, 9 Sep 2002 + 15:44:54 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 8C00340D88 + for ; Mon, 9 Sep 2002 15:36:46 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g89Jafm01952 for exmh-users@listman.redhat.com; Mon, 9 Sep 2002 + 15:36:41 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g89Jafl01946 for + ; Mon, 9 Sep 2002 15:36:41 -0400 +Received: from whatexit.org (postfix@whatexit.org [64.7.3.122]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g89JKO105999 for + ; Mon, 9 Sep 2002 15:20:24 -0400 +Received: from joisey.whatexit.org (localhost [127.0.0.1]) by whatexit.org + (Postfix) with ESMTP id 590BBB1 for ; + Mon, 9 Sep 2002 15:36:37 -0400 (EDT) +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +From: Tom Reingold +X-Mailer: exmh version 2.5 07/13/2001 +X-Uri: http://whatexit.org/~tommy +X-Image-Url: http://whatexit.org/~tommy/zombie.gif +In-Reply-To: Message from Rick Baartman of Mon, + 09 Sep 2002 12:21:42 PDT <20020909191229.EBB3DB1@whatexit.org> + <200209091921.g89JLgt02406@lin12.triumf.ca> +Message-Id: <20020909193637.590BBB1@whatexit.org> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 09 Sep 2002 15:36:37 -0400 + + +On Mon, 09 Sep 2002 12:21:42 PDT, + Rick Baartman wrote: + +> Sorry I wasn't clear. I am transferring messages from my inbox to +> other folders and since I am doing it from most recent to oldest, they +> appear in those folders in the wrong order and need re-sorting. + +OK, gotcha. + +I don't think you can do that with exmh, but you can do it on the +command line, if you use sh or ksh: + + for f in `folders -fast -r` + do + echo sorting $f ... + sortm +$f + done + +It could take a long time. + +At work, I have to use Outlook. Ick. I hate it. But it does a few +things right. Like making indices for each folder, and not just by +date, but also by sender, message size, subject. So I can sort by any +column instantly. + +I believe this is possible, too, with an IMAP compliant reader, +provided the IMAP server makes such indices. + +I am facing the fact that exmh has been left behind in some industry +standards. I use it for my personal mail. My mail server runs unix, +and I connect over ssh and tunnel my X traffic over ssh. With a slow +link, this makes exmh very slow. And mime handling is pretty bad +compared with modern mailers. I am just scared to move. I've been +using MH or nmh since 1985 and exmh since 1995. 17 years is a long +time! + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00980.c44ba5c1509adaeba8e9e496c91aef25 b/Ch3/datasets/spam/easy_ham/00980.c44ba5c1509adaeba8e9e496c91aef25 new file mode 100644 index 000000000..5ddda8b2f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00980.c44ba5c1509adaeba8e9e496c91aef25 @@ -0,0 +1,91 @@ +From exmh-users-admin@redhat.com Tue Sep 10 11:22:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7AF7F16F03 + for ; Tue, 10 Sep 2002 11:22:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:22:37 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g89Jw4C30116 for + ; Mon, 9 Sep 2002 20:58:04 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id C8BEE40E67; Mon, 9 Sep 2002 + 15:55:20 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id A013D40D00 + for ; Mon, 9 Sep 2002 15:43:44 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g89Jhd304706 for exmh-users@listman.redhat.com; Mon, 9 Sep 2002 + 15:43:39 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g89Jhdl04694 for + ; Mon, 9 Sep 2002 15:43:39 -0400 +Received: from pacific-carrier-annex.mit.edu + (PACIFIC-CARRIER-ANNEX.MIT.EDU [18.7.21.83]) by mx1.redhat.com + (8.11.6/8.11.6) with SMTP id g89JRM108236 for ; + Mon, 9 Sep 2002 15:27:22 -0400 +Received: from grand-central-station.mit.edu + (GRAND-CENTRAL-STATION.MIT.EDU [18.7.21.82]) by + pacific-carrier-annex.mit.edu (8.9.2/8.9.2) with ESMTP id PAA02947 for + ; Mon, 9 Sep 2002 15:43:38 -0400 (EDT) +Received: from manawatu-mail-centre.mit.edu (MANAWATU-MAIL-CENTRE.MIT.EDU + [18.7.7.71]) by grand-central-station.mit.edu (8.9.2/8.9.2) with ESMTP id + PAA05763 for ; Mon, 9 Sep 2002 15:43:37 -0400 (EDT) +Received: from multics.mit.edu (MULTICS.MIT.EDU [18.187.1.73]) by + manawatu-mail-centre.mit.edu (8.9.2/8.9.2) with ESMTP id PAA18588 for + ; Mon, 9 Sep 2002 15:43:35 -0400 (EDT) +Received: from localhost (yyyyorzins@localhost) by multics.mit.edu (8.9.3) + with ESMTP id PAA00022; Mon, 9 Sep 2002 15:43:34 -0400 (EDT) +From: Jacob Morzinski +To: +Subject: Re: Sorting +In-Reply-To: <200209091905.g89J5tH02285@lin12.triumf.ca> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 15:43:34 -0400 (EDT) + +On Mon, 9 Sep 2002, Rick Baartman wrote: +> Is there a way to do a global Sort command? + + +Wanting to sort like that is not common; I'd be surprised if exmh has +a widget for it. You can achieve what you want with the command-line +mh tools, though. +I suggest doing the following from a shell prompt: + + sh -c 'for f in "`folders -recurse -fast`" ; do sortm +"$f" ; done' + +(The command "sortm" will sort a particular folder, and +"folders -recurse -fast" prints out a list of all of your folders.) + + +I hope this helps, + Jacob Morzinski jmorzins@mit.edu + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00981.3eb28c739b5443730f65626c58e3995e b/Ch3/datasets/spam/easy_ham/00981.3eb28c739b5443730f65626c58e3995e new file mode 100644 index 000000000..e8cc77828 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00981.3eb28c739b5443730f65626c58e3995e @@ -0,0 +1,82 @@ +From exmh-users-admin@redhat.com Tue Sep 10 11:22:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C67A916F03 + for ; Tue, 10 Sep 2002 11:22:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:22:39 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g89KFoC30744 for + ; Mon, 9 Sep 2002 21:15:51 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id C38DE40F5F; Mon, 9 Sep 2002 + 16:15:45 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 2121D40EFB + for ; Mon, 9 Sep 2002 16:06:46 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g89K6fG10652 for exmh-users@listman.redhat.com; Mon, 9 Sep 2002 + 16:06:41 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g89K6el10648 for + ; Mon, 9 Sep 2002 16:06:40 -0400 +Received: from shelob.ce.ttu.edu (IDENT:root@shelob.ce.ttu.edu + [129.118.20.23]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g89JoN113677 for ; Mon, 9 Sep 2002 15:50:23 -0400 +Received: from shelob.ce.ttu.edu (IDENT:thompson@localhost [127.0.0.1]) by + shelob.ce.ttu.edu (8.11.6/8.11.6) with ESMTP id g89K6dd15026 for + ; Mon, 9 Sep 2002 15:06:39 -0500 +Message-Id: <200209092006.g89K6dd15026@shelob.ce.ttu.edu> +X-Mailer: exmh version 2.3.1 01/18/2001 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Subject: Exmh/nmh (was Sorting)... +In-Reply-To: Your message of + "Mon, 09 Sep 2002 15:36:37 EDT." + <20020909193637.590BBB1@whatexit.org> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: "David B. Thompson" +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 09 Sep 2002 15:06:39 -0500 + +> I am facing the fact that exmh has been left behind in some industry +> standards. I use it for my personal mail. My mail server runs unix, +> and I connect over ssh and tunnel my X traffic over ssh. With a slow +> link, this makes exmh very slow. And mime handling is pretty bad +> compared with modern mailers. + +These are some good comments and I'd like to share an opinion here. (Is that permitted? :) + +I started using linux about 8 or 9 years ago in rebellion against what the university was doing with Winder$. I just couldn't get good support and was using a lot of unix-based tools (ported to Winder$) anyway. So, I jumped ship and became my own sysadm. + +What I got was the easy ability to use a shell (now ssh) to connect to my office box from just about anywhere and use either exmh or nmh (from the command line). I can do email for the office fairly easily. + +I haven't seen any other tools that let me do that yet. But, I have to admit, that some of the web-based mail software is getting pretty close. Quoting and such is still primitive, but they're moving forward. + +-=d + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00982.4e1d46e8b99725e70515f1df7410aa44 b/Ch3/datasets/spam/easy_ham/00982.4e1d46e8b99725e70515f1df7410aa44 new file mode 100644 index 000000000..b20c9ec4d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00982.4e1d46e8b99725e70515f1df7410aa44 @@ -0,0 +1,92 @@ +From exmh-users-admin@redhat.com Tue Sep 10 11:22:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CB57716F03 + for ; Tue, 10 Sep 2002 11:22:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:22:50 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g89LNZC32760 for + ; Mon, 9 Sep 2002 22:23:36 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 5154A40FB9; Mon, 9 Sep 2002 + 17:19:07 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id ECBC13EB21 + for ; Mon, 9 Sep 2002 17:11:23 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g89LBIJ26810 for exmh-users@listman.redhat.com; Mon, 9 Sep 2002 + 17:11:18 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g89LBIl26806 for + ; Mon, 9 Sep 2002 17:11:18 -0400 +Received: from lin12.triumf.ca + (IDENT:lgb/i4fEP4F7dyc3dKC7OrOBMnt1aqrI@lin12.Triumf.CA [142.90.114.144]) + by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g89Kt0129698 for + ; Mon, 9 Sep 2002 16:55:00 -0400 +Received: from lin12.triumf.ca (baartman@localhost) by lin12.triumf.ca + (8.11.6/8.11.6) with ESMTP id g89LBH703076 for ; + Mon, 9 Sep 2002 14:11:17 -0700 +Message-Id: <200209092111.g89LBH703076@lin12.triumf.ca> +X-Mailer: exmh version 2.4 06/23/2000 with nmh-1.0.4 +X-Url: http://www.triumf.ca/people/baartman/ +X-Image-Url: http://lin12.triumf.ca/me3.gif +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +In-Reply-To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Rick Baartman +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 09 Sep 2002 14:11:17 -0700 + +> On Mon, 9 Sep 2002, Rick Baartman wrote: +> > Is there a way to do a global Sort command? +> +> +> Wanting to sort like that is not common; I'd be surprised if exmh has +> a widget for it. You can achieve what you want with the command-line +> mh tools, though. +> I suggest doing the following from a shell prompt: +> +> sh -c 'for f in "`folders -recurse -fast`" ; do sortm +"$f" ; done' +> +> (The command "sortm" will sort a particular folder, and +> "folders -recurse -fast" prints out a list of all of your folders.) +> +> +Thanks Tom and Jacob. The above works, but without the double quotes: i.e. + +sh -c 'for f in `folders -recurse -fast` ; do sortm +"$f" ; done' + +I'd attach this command to the sorting menu if I knew any tcl... + +-- +rick + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00983.42eb62cc4057d03dfd3eb1c8afc270e2 b/Ch3/datasets/spam/easy_ham/00983.42eb62cc4057d03dfd3eb1c8afc270e2 new file mode 100644 index 000000000..391f7e812 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00983.42eb62cc4057d03dfd3eb1c8afc270e2 @@ -0,0 +1,82 @@ +From exmh-users-admin@redhat.com Tue Sep 10 11:23:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BF59F16F16 + for ; Tue, 10 Sep 2002 11:23:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:23:14 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8A22rC12157 for + ; Tue, 10 Sep 2002 03:02:53 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 7BD7D400CF; Mon, 9 Sep 2002 + 22:02:22 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 105733FD4A + for ; Mon, 9 Sep 2002 21:51:15 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8A1p9611293 for exmh-users@listman.redhat.com; Mon, 9 Sep 2002 + 21:51:09 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8A1p9m11247 for + ; Mon, 9 Sep 2002 21:51:09 -0400 +Received: from lin12.triumf.ca + (IDENT:v9MDvCtdIjweE+mcqAIOp5nIo1sIIkcQ@lin12.Triumf.CA [142.90.114.144]) + by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8A0b2v01079 for + ; Mon, 9 Sep 2002 20:37:02 -0400 +Received: from lin12.triumf.ca (baartman@localhost) by lin12.triumf.ca + (8.11.6/8.11.6) with ESMTP id g89Ns8g04304 for ; + Mon, 9 Sep 2002 16:54:11 -0700 +Message-Id: <200209092354.g89Ns8g04304@lin12.triumf.ca> +X-Mailer: exmh version 2.4 06/23/2000 with nmh-1.0.4 +X-Url: http://www.triumf.ca/people/baartman/ +X-Image-Url: http://lin12.triumf.ca/me3.gif +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +In-Reply-To: <200209092111.g89LBH703076@lin12.triumf.ca> +References: <200209092111.g89LBH703076@lin12.triumf.ca> + +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Rick Baartman +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 09 Sep 2002 16:54:08 -0700 + +> > On Mon, 9 Sep 2002, Rick Baartman wrote: +> Thanks Tom and Jacob. The above works, but without the double quotes: i.e. +> +> sh -c 'for f in `folders -recurse -fast` ; do sortm +"$f" ; done' +> +But there is a problem with making changes outside of exmh: the .xmhcache files +don't get updated. This is dangerous; I have to remember to re-scan each folder +I enter. Is there a safeguard for this? + +-- +rick + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00984.6f4ec805e2e78d5310e0a4ae931e67b3 b/Ch3/datasets/spam/easy_ham/00984.6f4ec805e2e78d5310e0a4ae931e67b3 new file mode 100644 index 000000000..360fa3ed8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00984.6f4ec805e2e78d5310e0a4ae931e67b3 @@ -0,0 +1,91 @@ +From exmh-users-admin@redhat.com Tue Sep 10 11:23:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D2AFA16F03 + for ; Tue, 10 Sep 2002 11:23:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:23:17 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8A2HHC12737 for + ; Tue, 10 Sep 2002 03:17:18 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id CA01940694; Mon, 9 Sep 2002 + 22:15:33 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id E5D123FEFD + for ; Mon, 9 Sep 2002 22:00:12 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8A207l18463 for exmh-users@listman.redhat.com; Mon, 9 Sep 2002 + 22:00:07 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8A207m18459 for + ; Mon, 9 Sep 2002 22:00:07 -0400 +Received: from fort-point-station.mit.edu (FORT-POINT-STATION.MIT.EDU + [18.7.7.76]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8A1hmv13505 + for ; Mon, 9 Sep 2002 21:43:48 -0400 +Received: from central-city-carrier-station.mit.edu + (CENTRAL-CITY-CARRIER-STATION.MIT.EDU [18.7.7.72]) by + fort-point-station.mit.edu (8.9.2/8.9.2) with ESMTP id WAA20482 for + ; Mon, 9 Sep 2002 22:00:07 -0400 (EDT) +Received: from melbourne-city-street.mit.edu + (MELBOURNE-CITY-STREET.MIT.EDU [18.7.21.86]) by + central-city-carrier-station.mit.edu (8.9.2/8.9.2) with ESMTP id WAA23907 + for ; Mon, 9 Sep 2002 22:00:04 -0400 (EDT) +Received: from multics.mit.edu (MULTICS.MIT.EDU [18.187.1.73]) by + melbourne-city-street.mit.edu (8.9.2/8.9.2) with ESMTP id WAA19268 for + ; Mon, 9 Sep 2002 22:00:04 -0400 (EDT) +Received: from localhost (yyyyorzins@localhost) by multics.mit.edu (8.9.3) + with ESMTP id WAA09695; Mon, 9 Sep 2002 22:00:03 -0400 (EDT) +From: Jacob Morzinski +To: +Subject: Re: Sorting +In-Reply-To: <200209092111.g89LBH703076@lin12.triumf.ca> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 9 Sep 2002 22:00:03 -0400 (EDT) + +> > sh -c 'for f in "`folders -recurse -fast`" ; do sortm +"$f" ; done' + +> Thanks Tom and Jacob. The above works, but without the double quotes: i.e. +> +> sh -c 'for f in `folders -recurse -fast` ; do sortm +"$f" ; done' + +I may have a different version of "sh" than you do; the double quotes +around the backticks work for my "sh". + +(In the more-than-you-really-wanted-to-know category, you're probably +safe without the double quotes. The only reason I put them in is that +I have some pathologically-named folders, including folders whose +names contain spaces. If all your folders have safe names, you don't +need special quoting.) + + + -Jacob + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00985.e20b9f4f171d907fb8d8439584fe03b1 b/Ch3/datasets/spam/easy_ham/00985.e20b9f4f171d907fb8d8439584fe03b1 new file mode 100644 index 000000000..db2684e7c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00985.e20b9f4f171d907fb8d8439584fe03b1 @@ -0,0 +1,91 @@ +From exmh-users-admin@redhat.com Tue Sep 10 11:23:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B7D3116F03 + for ; Tue, 10 Sep 2002 11:23:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:23:21 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8A3C3C14737 for + ; Tue, 10 Sep 2002 04:12:03 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 5D85A40B63; Mon, 9 Sep 2002 + 23:10:53 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 1355B40BB1 + for ; Mon, 9 Sep 2002 23:07:10 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8A375S32417 for exmh-users@listman.redhat.com; Mon, 9 Sep 2002 + 23:07:05 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8A374m32413 for + ; Mon, 9 Sep 2002 23:07:04 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8A2ojv25839 for ; Mon, 9 Sep 2002 22:50:45 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id 90F5D38DA9; + Mon, 9 Sep 2002 22:07:03 -0500 (CDT) +Received: from dimebox (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id 8455538DA2; Mon, 9 Sep 2002 22:07:03 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +In-Reply-To: <200209092354.g89Ns8g04304@lin12.triumf.ca> +References: <200209092111.g89LBH703076@lin12.triumf.ca> + + <200209092354.g89Ns8g04304@lin12.triumf.ca> +Comments: In-reply-to Rick Baartman message + dated "Mon, 09 Sep 2002 16:54:08 -0700." +To: Rick Baartman +Cc: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <3642.1031627218@dimebox> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 09 Sep 2002 22:06:58 -0500 + + + +>>>>> On Mon, 9 Sep 2002, "Rick" == Rick Baartman wrote: + + Rick> This is dangerous; I have to remember to re-scan each + Rick> folder I enter. Is there a safeguard for this? + +Nope. Regenerate the cache in the script + + for f in `folders -fast -r` + do + echo sorting $f ... + sortm +$f + scan `mhpath +`/$f/.xmhcache + done + +--Hal + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00986.93b7eb74f26330872be1d58ec9d2b64c b/Ch3/datasets/spam/easy_ham/00986.93b7eb74f26330872be1d58ec9d2b64c new file mode 100644 index 000000000..0e0736e9d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00986.93b7eb74f26330872be1d58ec9d2b64c @@ -0,0 +1,113 @@ +From exmh-users-admin@redhat.com Tue Sep 10 11:23:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D7ADF16F03 + for ; Tue, 10 Sep 2002 11:23:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:23:32 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8A60fC19383 for + ; Tue, 10 Sep 2002 07:00:41 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id BB6323EA77; Tue, 10 Sep 2002 + 02:01:03 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id E26FD3EA24 + for ; Tue, 10 Sep 2002 02:00:32 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8A60RP01628 for exmh-users@listman.redhat.com; Tue, 10 Sep 2002 + 02:00:27 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8A60Rm01624 for + ; Tue, 10 Sep 2002 02:00:27 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g8A5b9v24994 for ; + Tue, 10 Sep 2002 01:43:43 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g8A5qYg11224 for + ; Tue, 10 Sep 2002 12:52:37 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g8A5qG805307 for ; + Tue, 10 Sep 2002 12:52:30 +0700 (ICT) +From: Robert Elz +To: exmh-users@spamassassin.taint.org +Subject: Patch to complete a change... +MIME-Version: 1.0 +Content-Type: multipart/mixed ; boundary="==_Exmh_16073047980" +Message-Id: <5305.1031637136@munnari.OZ.AU> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 12:52:16 +0700 + +This is a multipart MIME message. + +--==_Exmh_16073047980 +Content-Type: text/plain; charset=us-ascii + +I suspect that as part of Chris' set of changes, he cleaned up the +use of the variable that was named "L" in FtocCommit (in ftoc.tcl). +Its name got changed from L to lineno + +But there's one reference of $L left. That causes tracebacks if +you attempt to use "link" with the current CVS version of exmh. + +I guess that most of us don't use "link" very often ... I noticed it +last week, but only got time to look and see why today. + +If someone with the ability to commit to the CVS repository would +apply the following patch (to lib/ftoc.tcl) that would be nice. +(It works... and is trivial, and you could perhaps just apply it by +making the change with an editor faster than saving this patch and +applying it - there's only one instance of $L in the file, that +should be changed to $lineno) + +kre + + + +--==_Exmh_16073047980 +Content-Type: text/plain ; name="patch"; charset=us-ascii +Content-Description: patch +Content-Disposition: attachment; filename="PATCH" + +--- ftoc.tcl.PREV Wed Aug 21 15:01:48 2002 ++++ ftoc.tcl Tue Sep 10 12:47:06 2002 +@@ -1131,9 +1131,9 @@ + } + } + incr ftoc(numMsgs) -1 + } else { +- FtocUnmarkInner $L ++ FtocUnmarkInner $lineno + } + incr ftoc(changed) -1 + } + if {$delmsgs != {}} { + +--==_Exmh_16073047980-- + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00987.88641ac821f19f26060f12197bc585a4 b/Ch3/datasets/spam/easy_ham/00987.88641ac821f19f26060f12197bc585a4 new file mode 100644 index 000000000..4719f1fee --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00987.88641ac821f19f26060f12197bc585a4 @@ -0,0 +1,114 @@ +From exmh-users-admin@redhat.com Tue Sep 10 11:23:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BA41D16F03 + for ; Tue, 10 Sep 2002 11:23:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:23:34 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8A6BdC19749 for + ; Tue, 10 Sep 2002 07:11:39 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 0DDD23EC9C; Tue, 10 Sep 2002 + 02:12:03 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 056013EA24 + for ; Tue, 10 Sep 2002 02:11:55 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8A6Bom02865 for exmh-users@listman.redhat.com; Tue, 10 Sep 2002 + 02:11:50 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8A6Bnm02860 for + ; Tue, 10 Sep 2002 02:11:49 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8A5tTv26732 for + ; Tue, 10 Sep 2002 01:55:29 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + CAA13807 for ; Tue, 10 Sep 2002 02:11:43 -0400 +Message-Id: <200209100611.CAA13807@blackcomb.panasas.com> +To: exmh-users@spamassassin.taint.org +Subject: Re: Patch to complete a change... +In-Reply-To: <5305.1031637136@munnari.OZ.AU> +References: <5305.1031637136@munnari.OZ.AU> +Comments: In-reply-to Robert Elz message dated "Tue, + 10 Sep 2002 12:52:16 +0700." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=>r5~UnRml1:4EglY{9B+ + :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 09 Sep 2002 23:11:42 -0700 + +Done + +>>>Robert Elz said: + > I suspect that as part of Chris' set of changes, he cleaned up the + > use of the variable that was named "L" in FtocCommit (in ftoc.tcl). + > Its name got changed from L to lineno + > + > But there's one reference of $L left. That causes tracebacks if + > you attempt to use "link" with the current CVS version of exmh. + > + > I guess that most of us don't use "link" very often ... I noticed it + > last week, but only got time to look and see why today. + > + > If someone with the ability to commit to the CVS repository would + > apply the following patch (to lib/ftoc.tcl) that would be nice. + > (It works... and is trivial, and you could perhaps just apply it by + > making the change with an editor faster than saving this patch and + > applying it - there's only one instance of $L in the file, that + > should be changed to $lineno) + > + > kre + > + > + > --- ftoc.tcl.PREV Wed Aug 21 15:01:48 2002 + > +++ ftoc.tcl Tue Sep 10 12:47:06 2002 + > @@ -1131,9 +1131,9 @@ + > } + > } + > incr ftoc(numMsgs) -1 + > } else { + > - FtocUnmarkInner $L + > + FtocUnmarkInner $lineno + > } + > incr ftoc(changed) -1 + > } + > if {$delmsgs != {}} { + > + > --==_Exmh_16073047980-- + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00988.2154210bb53f94daded7a622e26225a1 b/Ch3/datasets/spam/easy_ham/00988.2154210bb53f94daded7a622e26225a1 new file mode 100644 index 000000000..0d4f91d2a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00988.2154210bb53f94daded7a622e26225a1 @@ -0,0 +1,125 @@ +From exmh-users-admin@redhat.com Tue Sep 10 11:23:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D79B316F03 + for ; Tue, 10 Sep 2002 11:23:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:23:36 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8A7TJC21707 for + ; Tue, 10 Sep 2002 08:29:19 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 6661E3EA7F; Tue, 10 Sep 2002 + 03:29:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id C7A203F316 + for ; Tue, 10 Sep 2002 03:24:25 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8A7OKL13912 for exmh-users@listman.redhat.com; Tue, 10 Sep 2002 + 03:24:20 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8A7OKm13904 for + ; Tue, 10 Sep 2002 03:24:20 -0400 +Received: from ka.graffl.net (ka.graffl.net [193.154.165.8]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8A77vv04319 for + ; Tue, 10 Sep 2002 03:07:59 -0400 +Received: from fsck.waldner.priv.at (fsck.waldner.priv.at + [213.225.31.166]) by ka.graffl.net (8.12.3/8.12.3/Debian -4) with ESMTP id + g8A7OACn016909 for ; Tue, 10 Sep 2002 09:24:10 + +0200 +Received: from fsck.intern.waldner.priv.at (localhost [127.0.0.1]) by + fsck.waldner.priv.at (8.12.3/8.12.3/Debian -4) with ESMTP id + g8A7O9M3004728 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 + verify=OK) for ; Tue, 10 Sep 2002 09:24:10 +0200 +Received: (from waldner@localhost) by fsck.intern.waldner.priv.at + (8.12.3/8.12.3/Debian -4) id g8A7O9jH004727 for exmh-users@redhat.com; + Tue, 10 Sep 2002 09:24:09 +0200 +Message-Id: <200209100724.g8A7O9jH004727@fsck.intern.waldner.priv.at> +X-Mailer: exmh version 2.5 07/13/2001 (debian 2.5-1) with nmh-1.0.4+dev +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +In-Reply-To: Your message of + "Mon, 09 Sep 2002 22:06:58 CDT." + <3642.1031627218@dimebox> +From: Robert Waldner +X-Organization: Bah. Speaking only for me humble self. +X-GPG: telnet fsck.waldner.priv.at for public key +X-GPG-Fingerprint: 406F 241A 9E21 CF92 1DED A0A8 1343 7348 9AF9 DE82 +X-GPG-Keyid: 0x9AF9DE82 +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="----------=_1031642648-417-32"; + micalg="pgp-sha1"; + protocol="application/pgp-signature" +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 09:23:50 +0200 + +This is a multi-part message in MIME format. +It has been signed conforming to RFC2015. +You'll need PGP or GPG to check the signature. + +------------=_1031642648-417-32 +Content-Type: text/plain; charset=us-ascii + + +On Mon, 09 Sep 2002 22:06:58 CDT, Hal DeVore writes: +> scan `mhpath +`/$f/.xmhcache + +Shouldn't that read + scan >`mhpath +`/$f/.xmhcache + ? + +(And, JIC something else changed the context in the background, it + doesn't hurt to explicitly state the folder: + scan "+$f" >`mhpath +`/$f/.xmhcache + ) + +cheers, +&rw +-- +-- "The problem with the IBM keyboards I have is that when you +-- use them to beat lusers, the caps come off the keys. +-- No real damage, but still a nuisance." -- Martijn Berlage + + + +------------=_1031642648-417-32 +Content-Type: application/pgp-signature; name="signature.ng" +Content-Disposition: inline; filename="signature.ng" +Content-Transfer-Encoding: 7bit + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (GNU/Linux) + +iD8DBQE9fZ4YE0NzSJr53oIRAlxqAJsG8DKAx7bxB6bGzz70VdsAkx6UiQCdG8pJ +s2JuFuUt7Kaz3xb0JyOx87A= +=RFA6 +-----END PGP SIGNATURE----- + +------------=_1031642648-417-32-- + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00989.59155225507b38fbee48407ebb6cc68d b/Ch3/datasets/spam/easy_ham/00989.59155225507b38fbee48407ebb6cc68d new file mode 100644 index 000000000..59a924923 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00989.59155225507b38fbee48407ebb6cc68d @@ -0,0 +1,99 @@ +From exmh-users-admin@redhat.com Tue Sep 10 11:23:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7AEE316F03 + for ; Tue, 10 Sep 2002 11:23:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:23:42 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8A8MCC23007 for + ; Tue, 10 Sep 2002 09:22:13 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 470A03F3CC; Tue, 10 Sep 2002 + 04:22:22 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 124A73EA64 + for ; Tue, 10 Sep 2002 04:21:06 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8A8L1i24928 for exmh-users@listman.redhat.com; Tue, 10 Sep 2002 + 04:21:01 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8A8L0m24924 for + ; Tue, 10 Sep 2002 04:21:00 -0400 +Received: from dingo.home.kanga.nu (ocker.kanga.nu [198.144.204.213]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8A84ev13908 for + ; Tue, 10 Sep 2002 04:04:40 -0400 +Received: from localhost ([127.0.0.1] helo=dingo.home.kanga.nu) by + dingo.home.kanga.nu with esmtp (Exim 3.35 #1 (Debian)) id 17ogGX-0007n7-00 + for ; Tue, 10 Sep 2002 01:20:57 -0700 +Received: from localhost ([127.0.0.1] helo=kanga.nu) by + dingo.home.kanga.nu with esmtp (Exim 3.35 #1 (Debian)) id 17ogGW-0007n0-00 + for ; Tue, 10 Sep 2002 01:20:56 -0700 +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +In-Reply-To: Message from Tom Reingold of + "Mon, 09 Sep 2002 15:36:37 EDT." + <20020909193637.590BBB1@whatexit.org> +References: <20020909193637.590BBB1@whatexit.org> +X-Face: ?^_yw@fA`CEX&}--=*&XqXbF-oePvxaT4(kyt\nwM9]{]N!>b^K}-Mb9 + YH%saz^>nq5usBlD"s{(.h'_w|U^3ldUq7wVZz$`u>MB(-4$f\a6Eu8.e=Pf\ +X-Image-Url: http://www.kanga.nu/~claw/kanga.face.tiff +X-Url: http://www.kanga.nu/~claw/ +Message-Id: <29945.1031646056@kanga.nu> +X-Envelope-To: exmh-users@spamassassin.taint.org +From: J C Lawrence +X-Delivery-Agent: TMDA/0.58 +X-Tmda-Fingerprint: cW2GfTfrr9KCw5sTO3gaUCJfK8Q +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 01:20:56 -0700 + +On Mon, 09 Sep 2002 15:36:37 -0400 +Tom Reingold wrote: + +> At work, I have to use Outlook. Ick. I hate it. + +Ahh. At work we fire people who use Outlook (Literally true: They get +escorted to the door, their badge confiscated, and told to return the +next day to collect their office contents). + +> But it does a few things right. Like making indices for each folder, +> and not just by date, but also by sender, message size, subject. So I +> can sort by any column instantly. + +Have you looked into using a custom sequences file? + +> And mime handling is pretty bad compared with modern mailers. + +The only thing I actually miss in that regard is support for S/MIME. + +-- +J C Lawrence +---------(*) Satan, oscillate my metallic sonatas. +claw@kanga.nu He lived as a devil, eh? +http://www.kanga.nu/~claw/ Evil is a name of a foeman, as I live. + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00990.ee34876c3873d8e6197432ad9c558429 b/Ch3/datasets/spam/easy_ham/00990.ee34876c3873d8e6197432ad9c558429 new file mode 100644 index 000000000..e2ec21e8e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00990.ee34876c3873d8e6197432ad9c558429 @@ -0,0 +1,98 @@ +From exmh-users-admin@redhat.com Tue Sep 10 15:47:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D561F16F03 + for ; Tue, 10 Sep 2002 15:47:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 15:47:04 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8AETfC02512 for + ; Tue, 10 Sep 2002 15:29:45 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 21BBD3EBDE; Tue, 10 Sep 2002 + 10:30:03 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id B4C643EAF8 + for ; Tue, 10 Sep 2002 10:29:35 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8AETUC14161 for exmh-users@listman.redhat.com; Tue, 10 Sep 2002 + 10:29:30 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8AETUm14157 for + ; Tue, 10 Sep 2002 10:29:30 -0400 +Received: from whatexit.org (postfix@whatexit.org [64.7.3.122]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8AED9v01013 for + ; Tue, 10 Sep 2002 10:13:09 -0400 +Received: from joisey.whatexit.org (localhost [127.0.0.1]) by whatexit.org + (Postfix) with ESMTP id C5DF2A7 for ; + Tue, 10 Sep 2002 10:29:26 -0400 (EDT) +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +From: Tom Reingold +X-Mailer: exmh version 2.5 07/13/2001 +X-Uri: http://whatexit.org/~tommy +X-Image-Url: http://whatexit.org/~tommy/zombie.gif +In-Reply-To: Message from J C Lawrence of Tue, + 10 Sep 2002 01:20:56 PDT <20020909193637.590BBB1@whatexit.org> + <29945.1031646056@kanga.nu> +Message-Id: <20020910142926.C5DF2A7@whatexit.org> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 10:29:26 -0400 + + +On Tue, 10 Sep 2002 01:20:56 PDT, + J C Lawrence wrote: + +> On Mon, 09 Sep 2002 15:36:37 -0400 +> Tom Reingold wrote: +> +> > At work, I have to use Outlook. Ick. I hate it. +> +> Ahh. At work we fire people who use Outlook (Literally true: They get +> escorted to the door, their badge confiscated, and told to return the +> next day to collect their office contents). + +Why? What threat does Outlook pose to your organization? + +> > But it does a few things right. Like making indices for each folder, +> > and not just by date, but also by sender, message size, subject. So I +> > can sort by any column instantly. +> +> Have you looked into using a custom sequences file? + +More detail please? I do use sequences, so I'm familiar with their +use, but how can I make indices with them, and how can I keep them +up to date? + +> > And mime handling is pretty bad compared with modern mailers. +> +> The only thing I actually miss in that regard is support for S/MIME. + +You're probably running exmh on a local machine. I'm running it on +a very remote machine. In this scenario, the mime handling is weak. + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00991.ec5d16cf8c633a2f15b8f98a39c58a60 b/Ch3/datasets/spam/easy_ham/00991.ec5d16cf8c633a2f15b8f98a39c58a60 new file mode 100644 index 000000000..6156e15fb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00991.ec5d16cf8c633a2f15b8f98a39c58a60 @@ -0,0 +1,87 @@ +From exmh-users-admin@redhat.com Tue Sep 10 15:47:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 93AA716F03 + for ; Tue, 10 Sep 2002 15:47:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 15:47:06 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8AEhhC03246 for + ; Tue, 10 Sep 2002 15:43:43 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id EAB713EF4F; Tue, 10 Sep 2002 + 10:44:03 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id D1F293F6A0 + for ; Tue, 10 Sep 2002 10:43:49 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8AEhig17290 for exmh-users@listman.redhat.com; Tue, 10 Sep 2002 + 10:43:44 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8AEhim17286 for + ; Tue, 10 Sep 2002 10:43:44 -0400 +Received: from localhost.localdomain (m53-mp1.cvx2-c.nth.dial.ntli.net + [62.253.56.53]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8AERLv04165 for ; Tue, 10 Sep 2002 10:27:21 -0400 +Received: from compaq (jg@localhost) by localhost.localdomain + (8.11.6/8.11.6) with ESMTP id g8AEhWS17947 for ; + Tue, 10 Sep 2002 15:43:34 +0100 +Message-Id: <200209101443.g8AEhWS17947@localhost.localdomain> +X-Authentication-Warning: localhost.localdomain: jg owned process doing -bs +X-Mailer: exmh version 2.4 06/23/2000 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +In-Reply-To: noglider's message of Tue, 10 Sep 2002 10:29:26 -0400. + <20020910142926.C5DF2A7@whatexit.org> +X-Image-Url: http://homepage.ntlworld.com/jgibbon/dlkface.gif +From: James Gibbon +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +X-Reply-To: james.gibbon@virgin.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 15:43:32 +0100 + + +Tom Reingold wrote: + +> > +> > Ahh. At work we fire people who use Outlook (Literally true: +> > They get escorted to the door, their badge confiscated, and +> > told to return the next day to collect their office contents). +> +> Why? What threat does Outlook pose to your organization? +> + +It has been described as "the technological equivalent of +soliciting blood transfusions from random strangers in the +street". In short - it's a virus magnet. + + + + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00992.4a6d6d9013a804213fff718806aaae49 b/Ch3/datasets/spam/easy_ham/00992.4a6d6d9013a804213fff718806aaae49 new file mode 100644 index 000000000..caaebd503 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00992.4a6d6d9013a804213fff718806aaae49 @@ -0,0 +1,121 @@ +From exmh-users-admin@redhat.com Wed Sep 11 13:41:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C494916F03 + for ; Wed, 11 Sep 2002 13:41:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:41:38 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8AIwRC12418 for + ; Tue, 10 Sep 2002 19:58:27 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id DD58640A9C; Tue, 10 Sep 2002 + 14:58:34 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx2.corp.spamassassin.taint.org (nat-pool-rdu-dmz.spamassassin.taint.org + [172.16.52.200]) by listman.redhat.com (Postfix) with ESMTP id A3CCC40200 + for ; Tue, 10 Sep 2002 14:00:44 -0400 (EDT) +Received: (from mail@localhost) by int-mx2.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8AGUOt11947 for exmh-users@listman.redhat.com; Tue, 10 Sep 2002 + 12:30:24 -0400 +Received: from mx2.spamassassin.taint.org ([172.16.26.25]) by int-mx2.corp.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g8AGUOd11941 for ; + Tue, 10 Sep 2002 12:30:24 -0400 +Received: from dingo.home.kanga.nu (ocker.kanga.nu [198.144.204.213]) by + mx2.redhat.com (8.11.6/8.11.6) with SMTP id g8AGE9s01322 for + ; Tue, 10 Sep 2002 12:14:09 -0400 +Received: from localhost ([127.0.0.1] helo=dingo.home.kanga.nu) by + dingo.home.kanga.nu with esmtp (Exim 3.35 #1 (Debian)) id 17onr6-0000Om-00 + for ; Tue, 10 Sep 2002 09:27:12 -0700 +Received: from localhost ([127.0.0.1] helo=kanga.nu) by + dingo.home.kanga.nu with esmtp (Exim 3.35 #1 (Debian)) id 17onr6-0000Of-00 + for ; Tue, 10 Sep 2002 09:27:12 -0700 +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +In-Reply-To: Message from Tom Reingold of + "Tue, 10 Sep 2002 10:29:26 EDT." + <20020910142926.C5DF2A7@whatexit.org> +References: <20020910142926.C5DF2A7@whatexit.org> +X-Face: ?^_yw@fA`CEX&}--=*&XqXbF-oePvxaT4(kyt\nwM9]{]N!>b^K}-Mb9 + YH%saz^>nq5usBlD"s{(.h'_w|U^3ldUq7wVZz$`u>MB(-4$f\a6Eu8.e=Pf\ +X-Image-Url: http://www.kanga.nu/~claw/kanga.face.tiff +X-Url: http://www.kanga.nu/~claw/ +Message-Id: <1528.1031675232@kanga.nu> +X-Envelope-To: exmh-users@spamassassin.taint.org +From: J C Lawrence +X-Delivery-Agent: TMDA/0.58 +X-Tmda-Fingerprint: IZTwCv6Mb2sWKrZwIYESaf7l9a8 +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 09:27:12 -0700 + +On Tue, 10 Sep 2002 10:29:26 -0400 +Tom Reingold wrote: +> On Tue, 10 Sep 2002 01:20:56 PDT, J C Lawrence wrote: + +>> Ahh. At work we fire people who use Outlook (Literally true: They +>> get escorted to the door, their badge confiscated, and told to return +>> the next day to collect their office contents). + +> Why? What threat does Outlook pose to your organization? + +It places the company, corporate network and data at risk. + +Outlook is subject to an (absurdly large) number of exploits with more +being regularly found. An exploited system, to whatever extent, places +other corporate systems at risk, customer systems at risk, company +reputation and liability with customers at risk, and +proprietary/corporate data at risk. Further, users cannot be reliably +expected to use Outlook in a safe manner. The net result is that +Outlook use is considered to be somewhere between criminal negligence +and deliberately malicious as far as the employer is concerned. + +>> Have you looked into using a custom sequences file? + +> More detail please? I do use sequences, so I'm familiar with their +> use, but how can I make indices with them, and how can I keep them up +> to date? + +I don't use custom sequences, so I can't comment well. I suspect that +you'd have to use a cron job to maintain the sequences. + +>> The only thing I actually miss in that regard is support for S/MIME. + +> You're probably running exmh on a local machine. I'm running it on a +> very remote machine. In this scenario, the mime handling is weak. + +Nope. I run exmh on my desktops at home and at work with the resulting +exmh windows being displayed on both my work and home desktops (gratis +SSH X11 forwarding). In fact, your message was read and replied to +(this message) while at work, using an exmh instance running on my home +machine. + +-- +J C Lawrence +---------(*) Satan, oscillate my metallic sonatas. +claw@kanga.nu He lived as a devil, eh? +http://www.kanga.nu/~claw/ Evil is a name of a foeman, as I live. + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00993.041d0d8e108657fd1ba5c605a10e2bfa b/Ch3/datasets/spam/easy_ham/00993.041d0d8e108657fd1ba5c605a10e2bfa new file mode 100644 index 000000000..972cef22a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00993.041d0d8e108657fd1ba5c605a10e2bfa @@ -0,0 +1,138 @@ +From exmh-users-admin@redhat.com Wed Sep 11 13:42:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2AB1316F03 + for ; Wed, 11 Sep 2002 13:42:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:42:07 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8AIwYC12426 for + ; Tue, 10 Sep 2002 19:58:34 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id DAA593ED6C; Tue, 10 Sep 2002 + 14:58:48 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx2.corp.spamassassin.taint.org (nat-pool-rdu-dmz.spamassassin.taint.org + [172.16.52.200]) by listman.redhat.com (Postfix) with ESMTP id D850E40193 + for ; Tue, 10 Sep 2002 14:00:34 -0400 (EDT) +Received: (from mail@localhost) by int-mx2.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8AFvEN06460 for exmh-users@listman.redhat.com; Tue, 10 Sep 2002 + 11:57:14 -0400 +Received: from mx2.spamassassin.taint.org ([172.16.26.25]) by int-mx2.corp.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g8AFvDd06453 for ; + Tue, 10 Sep 2002 11:57:14 -0400 +Received: from postal3.es.net (postal3.es.net [198.128.3.207]) by + mx2.redhat.com (8.11.6/8.11.6) with SMTP id g8AFews27980 for + ; Tue, 10 Sep 2002 11:40:59 -0400 +Received: from ptavv.es.net ([198.128.4.29]) by postal3.es.net (Postal + Node 3) with ESMTP id GQF37091; Tue, 10 Sep 2002 08:56:48 -0700 +Received: from ptavv (localhost [127.0.0.1]) by ptavv.es.net (Postfix) + with ESMTP id 0B7FF5D04; Tue, 10 Sep 2002 08:56:47 -0700 (PDT) +To: exmh-users@spamassassin.taint.org +Cc: Rick Baartman +Subject: Re: Sorting +In-Reply-To: Your message of + "Mon, 09 Sep 2002 22:06:58 CDT." + <3642.1031627218@dimebox> +MIME-Version: 1.0 (generated by tm-edit 1.8) +Content-Type: multipart/mixed; boundary="Multipart_Tue_Sep_10_08:56:11_2002-1" +Content-Transfer-Encoding: 7bit +From: "Kevin Oberman" +Message-Id: <20020910155647.0B7FF5D04@ptavv.es.net> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 08:56:47 -0700 + +--Multipart_Tue_Sep_10_08:56:11_2002-1 +Content-Type: text/plain; charset=US-ASCII + +> From: Hal DeVore +> Sender: exmh-users-admin@spamassassin.taint.org +> Date: Mon, 09 Sep 2002 22:06:58 -0500 +> +> +> +> >>>>> On Mon, 9 Sep 2002, "Rick" == Rick Baartman wrote: +> +> Rick> This is dangerous; I have to remember to re-scan each +> Rick> folder I enter. Is there a safeguard for this? +> +> Nope. Regenerate the cache in the script +> +> for f in `folders -fast -r` +> do +> echo sorting $f ... +> sortm +$f +> scan `mhpath +`/$f/.xmhcache +> done +> +> --Hal + +Here is the little script I run I run nightly from cron. It does a +general tidying of things including sorting and updating the cache. + +I didn't write it and I'm afraid I have lost track of who did, but +it's worked well for years. I run a similar one to update the glimpse +indices nightly. + +R. Kevin Oberman, Network Engineer +Energy Sciences Network (ESnet) +Ernest O. Lawrence Berkeley National Laboratory (Berkeley Lab) +E-mail: oberman@es.net Phone: +1 510 486-8634 + + +--Multipart_Tue_Sep_10_08:56:11_2002-1 +Content-Type: application/octet-stream +Content-Disposition: attachment; filename="swasort" +Content-Transfer-Encoding: 7bit + +#!/bin/tcsh -f +# +# Sorts all folders +# +# We don't want to sort the drafts folder (and the folders ~/Mail/.glimpse/) +# +# default field to sort .: date +# default scan width ....: 100 +# +set MH_DIR=/usr/local/nmh/bin +set MAIL=/home/oberman/Mail + +# update $MAIL/.folders +$MH_DIR/folders -fast -recurse -all > $MAIL/.folders + +# thru all folders ... +foreach i ( `cat $MAIL/.folders | grep -v \.glim | grep -v drafts` ) + + # sort the stuff + $MH_DIR/mh/sortm +$i -datefield date >& /dev/null + + # and update the cache + $MH_DIR/scan +$i -width 100 > $MAIL/$i/.xmhcache +end + +--Multipart_Tue_Sep_10_08:56:11_2002-1-- + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00994.63ad3cd73487972bfc2eb3e78e2e7cf9 b/Ch3/datasets/spam/easy_ham/00994.63ad3cd73487972bfc2eb3e78e2e7cf9 new file mode 100644 index 000000000..37948d2aa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00994.63ad3cd73487972bfc2eb3e78e2e7cf9 @@ -0,0 +1,84 @@ +From exmh-users-admin@redhat.com Wed Sep 11 13:42:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0166F16F03 + for ; Wed, 11 Sep 2002 13:42:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:42:12 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8AJ3lC12717 for + ; Tue, 10 Sep 2002 20:03:47 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 02ABB40AD6; Tue, 10 Sep 2002 + 15:00:37 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx2.corp.spamassassin.taint.org (nat-pool-rdu-dmz.spamassassin.taint.org + [172.16.52.200]) by listman.redhat.com (Postfix) with ESMTP id 27E20402CD + for ; Tue, 10 Sep 2002 14:01:09 -0400 (EDT) +Received: (from mail@localhost) by int-mx2.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8AFXuT02956 for exmh-users@listman.redhat.com; Tue, 10 Sep 2002 + 11:33:56 -0400 +Received: from mx2.spamassassin.taint.org ([172.16.26.25]) by int-mx2.corp.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g8AFXtd02947 for ; + Tue, 10 Sep 2002 11:33:56 -0400 +Received: from whatexit.org (postfix@whatexit.org [64.7.3.122]) by + mx2.redhat.com (8.11.6/8.11.6) with SMTP id g8AFHfs24010 for + ; Tue, 10 Sep 2002 11:17:41 -0400 +Received: from joisey.whatexit.org (localhost [127.0.0.1]) by whatexit.org + (Postfix) with ESMTP id 093F2A7 for ; + Tue, 10 Sep 2002 11:29:59 -0400 (EDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.3 +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +From: Tom Reingold +X-Uri: http://whatexit.org/~tommy +X-Image-Url: http://whatexit.org/~tommy/zombie.gif +In-Reply-To: Message from James Gibbon of Tue, + 10 Sep 2002 15:43:32 BST <200209101443.g8AEhWS17947@localhost.localdomain> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <20020910152959.093F2A7@whatexit.org> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 11:29:58 -0400 + + +On Tue, 10 Sep 2002 15:43:32 BST, + James Gibbon wrote: + +> +> Tom Reingold wrote: +> +> > Why? What threat does Outlook pose to your organization? +> > +> +> It has been described as "the technological equivalent of +> soliciting blood transfusions from random strangers in the +> street". In short - it's a virus magnet. + +Oh, that. Well, you're right. + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00995.11200ae0fc914c7056dcbf7dcfb4c107 b/Ch3/datasets/spam/easy_ham/00995.11200ae0fc914c7056dcbf7dcfb4c107 new file mode 100644 index 000000000..9a4e74240 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00995.11200ae0fc914c7056dcbf7dcfb4c107 @@ -0,0 +1,81 @@ +From exmh-users-admin@redhat.com Wed Sep 11 13:42:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1996C16F03 + for ; Wed, 11 Sep 2002 13:42:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:42:15 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8AKN8C15441 for + ; Tue, 10 Sep 2002 21:23:12 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id A3FE7410FC; Tue, 10 Sep 2002 + 16:22:25 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 990B440CC2 + for ; Tue, 10 Sep 2002 15:16:25 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8AJGKj31072 for exmh-users@listman.redhat.com; Tue, 10 Sep 2002 + 15:16:20 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8AJGKk31068 for + ; Tue, 10 Sep 2002 15:16:20 -0400 +Received: from shelob.ce.ttu.edu (IDENT:root@shelob.ce.ttu.edu + [129.118.20.23]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8AIxww24664 for ; Tue, 10 Sep 2002 14:59:58 -0400 +Received: from shelob.ce.ttu.edu (IDENT:thompson@localhost [127.0.0.1]) by + shelob.ce.ttu.edu (8.11.6/8.11.6) with ESMTP id g8AJGJd17943 for + ; Tue, 10 Sep 2002 14:16:19 -0500 +Message-Id: <200209101916.g8AJGJd17943@shelob.ce.ttu.edu> +X-Mailer: exmh version 2.3.1 01/18/2001 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +In-Reply-To: Your message of + "Tue, 10 Sep 2002 09:27:12 PDT." + <1528.1031675232@kanga.nu> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: "David B. Thompson" +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 14:16:19 -0500 + +> > You're probably running exmh on a local machine. I'm running it on a +> > very remote machine. In this scenario, the mime handling is weak. +> +> Nope. I run exmh on my desktops at home and at work with the resulting +> exmh windows being displayed on both my work and home desktops (gratis +> SSH X11 forwarding). + +I run exmh routinely from home (broadband) using an XWindows Client tunneled through ssh under WinXP. It works very well in this fashion. + +FWIW, I use Eudora under Winder$ because it's less of a virus magnet. :) + +There's more to the story why I run Winder$, but that's really off-topic and I'm already guilty! + +-=d + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00996.01a4386651fb07928d2314d8690e61cf b/Ch3/datasets/spam/easy_ham/00996.01a4386651fb07928d2314d8690e61cf new file mode 100644 index 000000000..adb054708 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00996.01a4386651fb07928d2314d8690e61cf @@ -0,0 +1,112 @@ +From exmh-users-admin@redhat.com Wed Sep 11 13:43:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2154316F03 + for ; Wed, 11 Sep 2002 13:43:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:43:12 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8ALpkC18012 for + ; Tue, 10 Sep 2002 22:51:46 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 029BA403DD; Tue, 10 Sep 2002 + 17:42:14 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 613AE3FEC0 + for ; Tue, 10 Sep 2002 17:32:00 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8ALVts11608 for exmh-users@listman.redhat.com; Tue, 10 Sep 2002 + 17:31:55 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8ALVtk11604 for + ; Tue, 10 Sep 2002 17:31:55 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8ALFWw31621 for + ; Tue, 10 Sep 2002 17:15:32 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + RAA22275 for ; Tue, 10 Sep 2002 17:31:48 -0400 +Message-Id: <200209102131.RAA22275@blackcomb.panasas.com> +X-Mailer: exmh version 2.5.9 07/25/2002 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +In-Reply-To: <200209092354.g89Ns8g04304@lin12.triumf.ca> +References: <200209092111.g89LBH703076@lin12.triumf.ca> + + <200209092354.g89Ns8g04304@lin12.triumf.ca> +Comments: In-reply-to Rick Baartman message + dated "Mon, 09 Sep 2002 16:54:08 -0700." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=> + r5~UnRml1:4EglY{9B+ :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 14:31:48 -0700 + +There is an "Update all scan caches" menu entry that rescans your +folders similar to the short scripts folks have shared around. It +runs in the background. + +>>>Rick Baartman said: + > > > On Mon, 9 Sep 2002, Rick Baartman wrote: + > > Thanks Tom and Jacob. The above works, but without the double quotes: +i.e. + + > > + > > sh -c 'for f in `folders -recurse -fast` ; do sortm +"$f" ; done' + > > + > But there is a problem with making changes outside of exmh: the +.xmhcache fi + les + > don't get updated. This is dangerous; I have to remember to re-scan each +fol + der + > I enter. Is there a safeguard for this? + > + > -- + > rick + > + > + > + > + > _______________________________________________ + > Exmh-users mailing list + > Exmh-users@redhat.com + > https://listman.redhat.com/mailman/listinfo/exmh-users + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00997.3e7c9ac060fb43183adc891520f41ce0 b/Ch3/datasets/spam/easy_ham/00997.3e7c9ac060fb43183adc891520f41ce0 new file mode 100644 index 000000000..3eda204b1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00997.3e7c9ac060fb43183adc891520f41ce0 @@ -0,0 +1,126 @@ +From exmh-users-admin@redhat.com Wed Sep 11 13:43:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2AB3B16F03 + for ; Wed, 11 Sep 2002 13:43:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:43:19 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8ANPeC21575 for + ; Wed, 11 Sep 2002 00:25:40 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 2306C3EA4B; Tue, 10 Sep 2002 + 19:26:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id C74863EAE7 + for ; Tue, 10 Sep 2002 19:25:17 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8ANPCU07117 for exmh-users@listman.redhat.com; Tue, 10 Sep 2002 + 19:25:12 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8ANPCk07113 for + ; Tue, 10 Sep 2002 19:25:12 -0400 +Received: from ka.graffl.net (ka.graffl.net [193.154.165.8]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8AN8kw23931 for + ; Tue, 10 Sep 2002 19:08:48 -0400 +Received: from fsck.waldner.priv.at (fsck.waldner.priv.at + [213.225.31.166]) by ka.graffl.net (8.12.3/8.12.3/Debian -4) with ESMTP id + g8ANP2Cn029488 for ; Wed, 11 Sep 2002 01:25:02 + +0200 +Received: from fsck.intern.waldner.priv.at (localhost [127.0.0.1]) by + fsck.waldner.priv.at (8.12.3/8.12.3/Debian -4) with ESMTP id + g8ANP2M3022605 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 + verify=OK) for ; Wed, 11 Sep 2002 01:25:02 +0200 +Received: (from waldner@localhost) by fsck.intern.waldner.priv.at + (8.12.3/8.12.3/Debian -4) id g8ANP2KX022602 for exmh-users@redhat.com; + Wed, 11 Sep 2002 01:25:02 +0200 +Message-Id: <200209102325.g8ANP2KX022602@fsck.intern.waldner.priv.at> +X-Mailer: exmh version 2.5 07/13/2001 (debian 2.5-1) with nmh-1.0.4+dev +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +In-Reply-To: Your message of + "Tue, 10 Sep 2002 09:27:12 PDT." + <1528.1031675232@kanga.nu> +From: Robert Waldner +X-Organization: Bah. Speaking only for me humble self. +X-GPG: telnet fsck.waldner.priv.at for public key +X-GPG-Fingerprint: 406F 241A 9E21 CF92 1DED A0A8 1343 7348 9AF9 DE82 +X-GPG-Keyid: 0x9AF9DE82 +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="----------=_1031700302-417-36"; + micalg="pgp-sha1"; + protocol="application/pgp-signature" +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 01:24:46 +0200 + +This is a multi-part message in MIME format. +It has been signed conforming to RFC2015. +You'll need PGP or GPG to check the signature. + +------------=_1031700302-417-36 +Content-Type: text/plain; charset=us-ascii + + +On Tue, 10 Sep 2002 09:27:12 PDT, J C Lawrence writes: +>I run exmh on my desktops at home and at work with the resulting +>exmh windows being displayed on both my work and home desktops (gratis +>SSH X11 forwarding). In fact, your message was read and replied to +>(this message) while at work, using an exmh instance running on my home +>machine. + +So you have 4 copies (1+1 per desktop) of exmh running? + +That's what I usually do, but what I'd really like would be some + automagism to tell them "Flist", "Rescan Folder", which I now do + manually whenever I'm going to work at the "other" machine. + +cheers, +&rw +-- +-- In the first place, God made idiots; +-- though this was for practice only; +-- then he made users. (Mark Twain, modified) + + + +------------=_1031700302-417-36 +Content-Type: application/pgp-signature; name="signature.ng" +Content-Disposition: inline; filename="signature.ng" +Content-Transfer-Encoding: 7bit + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (GNU/Linux) + +iD8DBQE9fn9OE0NzSJr53oIRAkEtAJwLbcoH2lx/CnhG/eQN1mJMDqnO7wCeLrKo +wFXc+1hVHd8T3cQZbbOYeUk= +=40Qu +-----END PGP SIGNATURE----- + +------------=_1031700302-417-36-- + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00998.84daa7907ccbbee4f20c4da1288cb196 b/Ch3/datasets/spam/easy_ham/00998.84daa7907ccbbee4f20c4da1288cb196 new file mode 100644 index 000000000..1663e368d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00998.84daa7907ccbbee4f20c4da1288cb196 @@ -0,0 +1,93 @@ +From exmh-users-admin@redhat.com Wed Sep 11 13:43:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6806516F03 + for ; Wed, 11 Sep 2002 13:43:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:43:25 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8ANseC22497 for + ; Wed, 11 Sep 2002 00:54:41 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 64F893EA8B; Tue, 10 Sep 2002 + 19:55:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 8D8613EA78 + for ; Tue, 10 Sep 2002 19:54:45 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8ANsem12415 for exmh-users@listman.redhat.com; Tue, 10 Sep 2002 + 19:54:40 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8ANsek12411 for + ; Tue, 10 Sep 2002 19:54:40 -0400 +Received: from lin12.triumf.ca + (IDENT:DxS4pR8U5YoPdULv16q3n6j+mSk51O0Y@lin12.Triumf.CA [142.90.114.144]) + by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8ANcGw29293 for + ; Tue, 10 Sep 2002 19:38:16 -0400 +Received: from lin12.triumf.ca (baartman@localhost) by lin12.triumf.ca + (8.11.6/8.11.6) with ESMTP id g8ANscL17172 for ; + Tue, 10 Sep 2002 16:54:38 -0700 +Message-Id: <200209102354.g8ANscL17172@lin12.triumf.ca> +X-Mailer: exmh version 2.4 06/23/2000 with nmh-1.0.4 +X-Url: http://www.triumf.ca/people/baartman/ +X-Image-Url: http://lin12.triumf.ca/me3.gif +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +In-Reply-To: <200209102131.RAA22275@blackcomb.panasas.com> +References: <200209102131.RAA22275@blackcomb.panasas.com> + <200209092111.g89LBH703076@lin12.triumf.ca> + + <200209092354.g89Ns8g04304@lin12.triumf.ca> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Rick Baartman +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 10 Sep 2002 16:54:38 -0700 + +Thanks Brent: now it's clearer (to me) what's needed. I've used the global +sort and J C Lawrence's re-scan, but there is still a vulnerability there: +If I have an instance of exmh running, the folder I'm visiting will have +its new, correct .xmhcache overwritten with an incorrect one when I switch +folders. I can cron the sort and re-scan process, but I should kill running +exmh's first. + +Best would be to have a button for "Global sort and update all scan caches" +in the exmh More... menu + +-- +rick + +>>>>> "Brent" == Brent Welch +>>>>> wrote the following on Tue, 10 Sep 2002 14:31:48 -0700 + + Brent> There is an "Update all scan caches" menu entry that rescans your + Brent> folders similar to the short scripts folks have shared around. It + Brent> runs in the background. + + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/00999.c78296e77769d280844fe48f2f3babde b/Ch3/datasets/spam/easy_ham/00999.c78296e77769d280844fe48f2f3babde new file mode 100644 index 000000000..ca520e955 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/00999.c78296e77769d280844fe48f2f3babde @@ -0,0 +1,107 @@ +From exmh-users-admin@redhat.com Wed Sep 11 13:43:47 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BFA5B16F03 + for ; Wed, 11 Sep 2002 13:43:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:43:46 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8B82rC06745 for + ; Wed, 11 Sep 2002 09:02:54 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 531063ED40; Wed, 11 Sep 2002 + 03:56:03 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 98B603ED40 + for ; Wed, 11 Sep 2002 03:55:30 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8B7tPk11473 for exmh-users@listman.redhat.com; Wed, 11 Sep 2002 + 03:55:25 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8B7tPk11468 for + ; Wed, 11 Sep 2002 03:55:25 -0400 +Received: from dingo.home.kanga.nu (ocker.kanga.nu [198.144.204.213]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8B7cuw23656 for + ; Wed, 11 Sep 2002 03:38:57 -0400 +Received: from localhost ([127.0.0.1] helo=dingo.home.kanga.nu) by + dingo.home.kanga.nu with esmtp (Exim 3.35 #1 (Debian)) id 17p2L6-0002bM-00 + for ; Wed, 11 Sep 2002 00:55:08 -0700 +Received: from localhost ([127.0.0.1] helo=kanga.nu) by + dingo.home.kanga.nu with esmtp (Exim 3.35 #1 (Debian)) id 17p2L6-0002bF-00 + for ; Wed, 11 Sep 2002 00:55:08 -0700 +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +In-Reply-To: Message from Robert Waldner of + "Wed, 11 Sep 2002 01:24:46 +0200." + <200209102325.g8ANP2KX022602@fsck.intern.waldner.priv.at> +References: <200209102325.g8ANP2KX022602@fsck.intern.waldner.priv.at> +X-Face: ?^_yw@fA`CEX&}--=*&XqXbF-oePvxaT4(kyt\nwM9]{]N!>b^K}-Mb9 + YH%saz^>nq5usBlD"s{(.h'_w|U^3ldUq7wVZz$`u>MB(-4$f\a6Eu8.e=Pf\ +X-Image-Url: http://www.kanga.nu/~claw/kanga.face.tiff +X-Url: http://www.kanga.nu/~claw/ +Message-Id: <9996.1031730908@kanga.nu> +X-Envelope-To: exmh-users@spamassassin.taint.org +From: J C Lawrence +X-Delivery-Agent: TMDA/0.58 +X-Tmda-Fingerprint: HP7OLOKowRnJvfkYd/QjGfm15K4 +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 00:55:08 -0700 + +On Wed, 11 Sep 2002 01:24:46 +0200 +Robert Waldner wrote: +> On Tue, 10 Sep 2002 09:27:12 PDT, J C Lawrence writes: + +>> I run exmh on my desktops at home and at work with the resulting exmh +>> windows being displayed on both my work and home desktops (gratis SSH +>> X11 forwarding). In fact, your message was read and replied to (this +>> message) while at work, using an exmh instance running on my home +>> machine. + +> So you have 4 copies (1+1 per desktop) of exmh running? + +Yes. + +One of the nicer aspects of exmh's colour handling is that while I have +the default background for the message pane set to black, the second +insance of exmh displaying to a given $DISPLAY will set the background +of the message pane to darkslategray. Very nice as it provides an +instant visual cue as to which is which. (No: I've not checked where it +gets that colour selection from). + +> That's what I usually do, but what I'd really like would be some +> automagism to tell them "Flist", "Rescan Folder", which I now do +> manually whenever I'm going to work at the "other" machine. + + + +-- +J C Lawrence +---------(*) Satan, oscillate my metallic sonatas. +claw@kanga.nu He lived as a devil, eh? +http://www.kanga.nu/~claw/ Evil is a name of a foeman, as I live. + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01000.bd0b18ad8256a7cb29f5508a20cd19ba b/Ch3/datasets/spam/easy_ham/01000.bd0b18ad8256a7cb29f5508a20cd19ba new file mode 100644 index 000000000..783829ca7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01000.bd0b18ad8256a7cb29f5508a20cd19ba @@ -0,0 +1,97 @@ +From exmh-users-admin@redhat.com Wed Sep 11 16:03:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1B88116F20 + for ; Wed, 11 Sep 2002 16:03:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 16:03:21 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8BDRcC16348 for + ; Wed, 11 Sep 2002 14:27:38 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 814B54002C; Wed, 11 Sep 2002 + 09:28:03 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id A065D3F65F + for ; Wed, 11 Sep 2002 09:27:36 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8BDRVS32571 for exmh-users@listman.redhat.com; Wed, 11 Sep 2002 + 09:27:31 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8BDRVk32567 for + ; Wed, 11 Sep 2002 09:27:31 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8BDB4w09569 for ; Wed, 11 Sep 2002 09:11:05 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id 143BB38DA9; + Wed, 11 Sep 2002 08:27:30 -0500 (CDT) +Received: from dimebox (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id 069E838DA2 for ; + Wed, 11 Sep 2002 08:27:30 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +In-Reply-To: <9996.1031730908@kanga.nu> +References: <200209102325.g8ANP2KX022602@fsck.intern.waldner.priv.at> + <9996.1031730908@kanga.nu> +Comments: In-reply-to J C Lawrence message dated "Wed, 11 + Sep 2002 00:55:08 -0700." +To: exmh-users@spamassassin.taint.org +Subject: Re: Sorting +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <14343.1031750844@dimebox> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 08:27:24 -0500 + + + +>> I run exmh on my desktops at home and at work with the resulting exmh +>> windows being displayed on both my work and home desktops (gratis SSH +>> X11 forwarding). In fact, your message was read and replied to (this +>> message) while at work, using an exmh instance running on my home +>> machine. + +Just to throw in another approach to solving the same problem. + +I run two copies of exmh, one at work, one at home. They both +display on a "virtual X server" created by vncserver on the home +box. I connect to that virtual X server using vncviewer wherever +I happen to be. The VNC connection is tunneled over ssh and is +carried over the Internet via an IPSEC appliance. + +That gives me access to both home and work email from either +place without the complications involved in having two copies of +exmh working on the same set of folders. + +It's a tad slow viewing work email when I'm at work ... but not +so bad that I can't stand it. + +--Hal + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01001.ea532debe8b8f0f94d2fdbbaa743204b b/Ch3/datasets/spam/easy_ham/01001.ea532debe8b8f0f94d2fdbbaa743204b new file mode 100644 index 000000000..d30f11888 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01001.ea532debe8b8f0f94d2fdbbaa743204b @@ -0,0 +1,113 @@ +From exmh-workers-admin@redhat.com Wed Sep 11 20:26:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E6F2A16F03 + for ; Wed, 11 Sep 2002 20:26:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 20:26:50 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8BJI8C28223 for + ; Wed, 11 Sep 2002 20:18:09 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 193B13FD11; Wed, 11 Sep 2002 + 15:18:29 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id BA7B73EE17 + for ; Wed, 11 Sep 2002 15:17:54 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8BJHna17335 for exmh-workers@listman.redhat.com; Wed, 11 Sep 2002 + 15:17:49 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8BJHnk17328 for + ; Wed, 11 Sep 2002 15:17:49 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8BJ1Lw24675 for + ; Wed, 11 Sep 2002 15:01:21 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + PAA02912; Wed, 11 Sep 2002 15:17:34 -0400 +Message-Id: <200209111917.PAA02912@blackcomb.panasas.com> +X-Mailer: exmh version 2.5.9 07/25/2002 with nmh-1.0.4 +To: Hacksaw +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: exmh bug? +In-Reply-To: hacksaw's message of Tue, 10 Sep 2002 19:28:18 -0400. + <200209102328.g8ANSIeP007847@habitrail.home.fools-errant.com> +X-Url: http://www.beedub.com/ +From: Brent Welch +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=> + r5~UnRml1:4EglY{9B+ :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 12:17:33 -0700 + +Hmm - I'm cc'ing the exmh-workers list, because I really don't know +much about the various PGP interfaces. I think there has been some +talk about "issues" with the latest version of gpg. + +>>>Hacksaw said: + > version 2.5 08/15/2002 + > Linux habitrail.home.fools-errant.com 2.4.7-10smp #1 SMP Thu Sep 6 +17:09:31 + > EDT 2001 i686 unknown + > Tk 8.3 Tcl 8.3 + > + > It's not clear to me this is a bug with exmh per se, but it's something +that + + > manifests through exmh, so I figured asking you might help me track it +down. + > + > When I receive a gpg encrypted message, and it asks me for a passphrase, +it + > first tries to ask me via the tty under which exmh is running. It tells +me m + y + > passphrase is incorrect every time, at which point exmh offers me the +line i + n + > the message about decrypting. I click the line and it offers me the +dialog + > box, and tells me the passphrase is correct, and shows me the decrypted + > message. + > + > Any ideas on that? + > -- + > Honour necessity. + > http://www.hacksaw.org -- http://www.privatecircus.com -- KB1FVD + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01002.c71b3eb67b112d8bf7d101cb3cacd6f0 b/Ch3/datasets/spam/easy_ham/01002.c71b3eb67b112d8bf7d101cb3cacd6f0 new file mode 100644 index 000000000..da4711b0e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01002.c71b3eb67b112d8bf7d101cb3cacd6f0 @@ -0,0 +1,121 @@ +From exmh-workers-admin@redhat.com Wed Sep 11 21:29:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 93EE616F03 + for ; Wed, 11 Sep 2002 21:29:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 21:29:13 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8BJrYC29444 for + ; Wed, 11 Sep 2002 20:53:34 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 99E4C3F8E1; Wed, 11 Sep 2002 + 15:53:46 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id F27CD3F1F9 + for ; Wed, 11 Sep 2002 15:49:29 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8BJnOp25735 for exmh-workers@listman.redhat.com; Wed, 11 Sep 2002 + 15:49:24 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8BJnOk25731 for + ; Wed, 11 Sep 2002 15:49:24 -0400 +Received: from mail2.lsil.com (mail2.lsil.com [147.145.40.22]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8BJWsw31928 for + ; Wed, 11 Sep 2002 15:32:54 -0400 +Received: from mhbs.lsil.com (mhbs [147.145.31.100]) by mail2.lsil.com + (8.9.3+Sun/8.9.1) with ESMTP id MAA12062 for ; + Wed, 11 Sep 2002 12:49:10 -0700 (PDT) +From: kchrist@lsil.com +Received: from inca.co.lsil.com by mhbs.lsil.com with ESMTP; + Wed, 11 Sep 2002 12:48:53 -0700 +Received: from flytrap.co.lsil.com (flytrap.co.lsil.com [172.20.3.234]) by + inca.co.lsil.com (8.9.3/8.9.3) with ESMTP id NAA16659; Wed, 11 Sep 2002 + 13:48:52 -0600 (MDT) +Received: from bhuta.co.lsil.com (bhuta [172.20.12.135]) by + flytrap.co.lsil.com (8.9.3+Sun/8.9.1) with ESMTP id NAA20468; + Wed, 11 Sep 2002 13:48:50 -0600 (MDT) +Received: from bhuta (localhost [127.0.0.1]) by bhuta.co.lsil.com + (8.10.2+Sun/8.9.1) with ESMTP id g8BJmed21224; Wed, 11 Sep 2002 13:48:40 + -0600 (MDT) +X-Mailer: exmh version 2.5 07/09/2001 with nmh-1.0.4+dev +To: Hacksaw +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: exmh bug? +Reply-To: Kevin.Christian@lsil.com +In-Reply-To: Your message of + "Wed, 11 Sep 2002 12:17:33 PDT." + <200209111917.PAA02912@blackcomb.panasas.com> +References: <200209111917.PAA02912@blackcomb.panasas.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <21222.1031773720@bhuta> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 13:48:40 -0600 + + +The way to debug something like this is to turn on the log (Preferences +-> Hacking Support -> Debug log enabled) and track the gpg commands +being issued and the responses. + +FWIW, using exmh 2.5 and gpg 1.0.7 I do not have problems sending +encrypted messages to myself. When I select the message, an xterm +window pops up asking for the passphrase. I don't recall exmh ever +asking me for the passphrase from the tty that started exmh nor from a +dialog box. (But then again, I'm not a heavy gpg user). + +Kevin + +In message <200209111917.PAA02912@blackcomb.panasas.com>, Brent Welch writes: +> Hmm - I'm cc'ing the exmh-workers list, because I really don't know +> much about the various PGP interfaces. I think there has been some +> talk about "issues" with the latest version of gpg. +> +> >>>Hacksaw said: +> > version 2.5 08/15/2002 +> > Linux habitrail.home.fools-errant.com 2.4.7-10smp #1 SMP Thu Sep 6 17:09:31 +> > EDT 2001 i686 unknown +> > Tk 8.3 Tcl 8.3 +> > +> > It's not clear to me this is a bug with exmh per se, but it's something +> > that manifests through exmh, so I figured asking you might help me track +> > it down. +> > +> > When I receive a gpg encrypted message, and it asks me for a passphrase, +> > it first tries to ask me via the tty under which exmh is running. It +> > tells me my passphrase is incorrect every time, at which point exmh +> > offers me the line in the message about decrypting. I click the line +> > and it offers me the dialog box, and tells me the passphrase is correct, +> > and shows me the decrypted message. +> > +> > Any ideas on that? + + + + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01003.56ffd3c6ad3dcb0598cb3b79a1e2dc11 b/Ch3/datasets/spam/easy_ham/01003.56ffd3c6ad3dcb0598cb3b79a1e2dc11 new file mode 100644 index 000000000..cf830c22e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01003.56ffd3c6ad3dcb0598cb3b79a1e2dc11 @@ -0,0 +1,115 @@ +From exmh-workers-admin@redhat.com Wed Sep 11 21:29:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1999E16F03 + for ; Wed, 11 Sep 2002 21:29:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 21:29:16 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8BJvaC29683 for + ; Wed, 11 Sep 2002 20:57:36 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id E614140976; Wed, 11 Sep 2002 + 15:54:46 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 11AF13F2EE + for ; Wed, 11 Sep 2002 15:52:54 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8BJqnR26738 for exmh-workers@listman.redhat.com; Wed, 11 Sep 2002 + 15:52:49 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8BJqmk26734 for + ; Wed, 11 Sep 2002 15:52:48 -0400 +Received: from turing-police.cc.vt.edu (turing-police.cc.vt.edu + [128.173.14.107]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8BJaKw00436 for ; Wed, 11 Sep 2002 15:36:20 + -0400 +Received: from turing-police.cc.vt.edu (localhost [127.0.0.1]) by + turing-police.cc.vt.edu (8.12.6.Beta1/8.12.6.Beta1) with ESMTP id + g8BJqPrl020350; Wed, 11 Sep 2002 15:52:25 -0400 +Message-Id: <200209111952.g8BJqPrl020350@turing-police.cc.vt.edu> +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4+dev +To: Brent Welch +Cc: Hacksaw , exmh-workers@spamassassin.taint.org +Subject: Re: exmh bug? +In-Reply-To: Your message of + "Wed, 11 Sep 2002 12:17:33 PDT." + <200209111917.PAA02912@blackcomb.panasas.com> +From: Valdis.Kletnieks@vt.edu +X-Url: http://black-ice.cc.vt.edu/~valdis/ +X-Face-Viewer: See ftp://cs.indiana.edu/pub/faces/index.html to decode picture +X-Face: 34C9$Ewd2zeX+\!i1BA\j{ex+$/V'JBG#;3_noWWYPa"|,I#`R"{n@w>#:{)FXyiAS7(8t( + ^*w5O*!8O9YTe[r{e%7(yVRb|qxsRYw`7J!`AM}m_SHaj}f8eb@d^L>BrX7iO[ +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_9304186P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 15:52:25 -0400 + +--==_Exmh_9304186P +Content-Type: text/plain; charset=us-ascii + +On Wed, 11 Sep 2002 12:17:33 PDT, Brent Welch said: + +> >>>Hacksaw said: + +> > When I receive a gpg encrypted message, and it asks me for a passphrase, +> it +> > first tries to ask me via the tty under which exmh is running. It tells +> +Hmm.. I've seen the *opposite* issue - if I go to *SEND* a signed message, +sometimes Exmh will put up the dialog box, but fail to set keyboard focus +there, so no passphrase can be entered. Of course, hitting 'return' doesnt +work so you need to click the 'OK' box, at which point it finds that the +passphrase that wasn't entered doesn't work, and asks again, this time with +proper focus set. + +I suspect some variable/codepath is getting hosed for the focus, or possibly +some borkedness with --no-tty and/or --status-fd flags to gnupg. + +/Valdis + +--==_Exmh_9304186P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (GNU/Linux) +Comment: Exmh version 2.5 07/13/2001 + +iD8DBQE9f575cC3lWbTT17ARApK5AKD+PToDpgdcd0Ore2BwJ1qVakfMDgCcDRsa +HqcPiRZRSxFvAQBe+Ma1qmY= +=lXe4 +-----END PGP SIGNATURE----- + +--==_Exmh_9304186P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01004.beda866d3cdf304a31d178d03960a3f3 b/Ch3/datasets/spam/easy_ham/01004.beda866d3cdf304a31d178d03960a3f3 new file mode 100644 index 000000000..cd9f1ffb8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01004.beda866d3cdf304a31d178d03960a3f3 @@ -0,0 +1,111 @@ +From exmh-workers-admin@redhat.com Wed Sep 11 21:29:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BA8F516F03 + for ; Wed, 11 Sep 2002 21:29:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 21:29:18 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8BJvlC29695 for + ; Wed, 11 Sep 2002 20:57:47 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id AF63E403DA; Wed, 11 Sep 2002 + 15:58:06 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 4C15340E51 + for ; Wed, 11 Sep 2002 15:56:43 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8BJucr27588 for exmh-workers@listman.redhat.com; Wed, 11 Sep 2002 + 15:56:38 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8BJuck27584 for + ; Wed, 11 Sep 2002 15:56:38 -0400 +Received: from qiclab.scn.rain.com (postfix@qiclab.scn.rain.com + [205.238.26.97]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8BJe9w01356 for ; Wed, 11 Sep 2002 15:40:09 + -0400 +Received: by qiclab.scn.rain.com (Postfix, from userid 177) id 4C64224E158; + Wed, 11 Sep 2002 12:56:36 -0700 (PDT) +>Received: by joseph.doink.com (Postfix, from userid 11334) id 92D352FEAB; + Wed, 11 Sep 2002 12:53:12 -0700 (PDT) +Received: from dOink.COM (localhost [127.0.0.1]) by joseph.doink.com + (Postfix) with ESMTP id 6EB8F4BDC3; Wed, 11 Sep 2002 12:53:12 -0700 (PDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +Cc: Hacksaw , exmh-workers@spamassassin.taint.org +X-Message-Flag: After so many viruses, why are you still using Outlook? +X-Priority: 3 +Subject: Re: exmh bug? +In-Reply-To: <200209111917.PAA02912@blackcomb.panasas.com> +MIME-Version: 1.0 +From: Kevin Cosgrove +Message-Id: <20020911195312.92D352FEAB@joseph.doink.com> +Content-Type: text/plain; charset=us-ascii +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 12:53:10 -0700 + + +Gotta wonder what the GPG config stuff in ~/.exmh/exmh-defaults looks +like. Also gotta wonder what the message headers in the offending +message are saying to nmh/exmh. My set-up works perfectly. That is, +I get a pop-up window to enter my passphrase into, and when I type it +correctly, the message display changes from a prompt to click to +decrypt to the message content. + +TTFN.... + +On 11 September 2002 at 12:17, Brent Welch wrote: + +Hmm - I'm cc'ing the exmh-workers list, because I really don't know +much about the various PGP interfaces. I think there has been some +talk about "issues" with the latest version of gpg. + +>>>Hacksaw said: + > version 2.5 08/15/2002 + > Linux habitrail.home.fools-errant.com 2.4.7-10smp #1 SMP Thu Sep 6 17:09:31 + > EDT 2001 i686 unknown + > Tk 8.3 Tcl 8.3 + > + > It's not clear to me this is a bug with exmh per se, but it's + > something that manifests through exmh, so I figured asking you + > might help me track it down. + > + > When I receive a gpg encrypted message, and it asks me for a + > passphrase, it first tries to ask me via the tty under which + > exmh is running. It tells me my passphrase is incorrect every + > time, at which point exmh offers me the line in the message + > about decrypting. I click the line and it offers me the dialog + > box, and tells me the passphrase is correct, and shows me the + > decrypted message. + > + > Any ideas on that? + > -- + > Honour necessity. + > http://www.hacksaw.org -- http://www.privatecircus.com -- KB1FVD + + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01005.5ad1b924b3315046822ae89493e5572f b/Ch3/datasets/spam/easy_ham/01005.5ad1b924b3315046822ae89493e5572f new file mode 100644 index 000000000..4cd12994a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01005.5ad1b924b3315046822ae89493e5572f @@ -0,0 +1,153 @@ +From exmh-workers-admin@redhat.com Wed Sep 11 21:52:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2055B16F03 + for ; Wed, 11 Sep 2002 21:52:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 21:52:08 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8BKhcC31373 for + ; Wed, 11 Sep 2002 21:43:38 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 0312B408EB; Wed, 11 Sep 2002 + 16:42:45 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id A11BB3F5C6 + for ; Wed, 11 Sep 2002 16:41:37 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8BKfWH05116 for exmh-workers@listman.redhat.com; Wed, 11 Sep 2002 + 16:41:32 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8BKfWk05112 for + ; Wed, 11 Sep 2002 16:41:32 -0400 +Received: from qiclab.scn.rain.com (postfix@qiclab.scn.rain.com + [205.238.26.97]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8BKP3w11308 for ; Wed, 11 Sep 2002 16:25:03 + -0400 +Received: by qiclab.scn.rain.com (Postfix, from userid 177) id DBB6324E06A; + Wed, 11 Sep 2002 13:41:30 -0700 (PDT) +>Received: by joseph.doink.com (Postfix, from userid 11334) id 348DD2FEAB; + Wed, 11 Sep 2002 13:26:30 -0700 (PDT) +Received: from dOink.COM (localhost [127.0.0.1]) by joseph.doink.com + (Postfix) with ESMTP id 113BA4BDC3; Wed, 11 Sep 2002 13:26:30 -0700 (PDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Hacksaw +Cc: exmh-workers@spamassassin.taint.org +Reply-To: exmh-workers@spamassassin.taint.org +X-Message-Flag: After so many viruses, why are you still using Outlook? +X-Priority: 3 +Subject: Re: exmh bug? +In-Reply-To: <200209112011.g8BKB71c016315@habitrail.home.fools-errant.com> +MIME-Version: 1.0 +From: Kevin Cosgrove +Message-Id: <20020911202630.348DD2FEAB@joseph.doink.com> +Content-Type: text/plain; charset=us-ascii +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 13:26:27 -0700 + + +Here's a message that works fine for me: + + + +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: kevinc@doink.com +Subject: gpg test +Mime-Version: 1.0 +Content-Type: text/x-pgp; format=mime; x-action=encrypt; + x-recipients="D165C0CC, D165C0CC" +Content-Transfer-Encoding: 7bit +Date: Wed, 11 Sep 2002 13:18:58 -0700 +From: Kevin Cosgrove +Message-Id: <20020911201900.492892FEAB@joseph.doink.com> + +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.0.7 (GNU/Linux) +Comment: Exmh version 2.5 10/15/1999 + +blah, blah, blah + +-----END PGP MESSAGE----- + + + + + +It could be that your content type of text/plain is messing you up. +Your config stuff looks substantially the same as mine. + +Cheers.... + + + + + + + +On 11 September 2002 at 16:11, Hacksaw wrote: + +You may assume the X's were originally a valid address. + +X-em-version: 5, 0, 0, 4 +X-em-registration: #01E0520310450300B900 +X-priority: 3 +X-mailer: My Own Email v4.00 +Mime-version: 1.0 +Content-type: text/plain; charset=US-ASCII +Subject: Discussion +From: "XXXXXXX" +Date: Tue, 10 Sep 2002 05:47:46 -0500 (06:47 EDT) +To: hacksaw@hacksaw.org + + +*gpgRfc822: 0 +*gpgChooseKey: 1 +*gpgRunTwice: 1 +*gpgCacheIds: persistent +*gpgMinMatch: 75 +*gpgShowInline: none +*gpgShortMessages: 1 +*gpgAutoExtract: 1 +*gpgKeyServer: pgp-public-keys@keys.pgp.net +*gpgKeyQueryMethod: hkp +*gpgHKPKeyServerUrl: keys.pgp.com +*gpgKeyServerURL: http://www-swiss.ai.mit.edu/htbin/pks-extract-key.pl?op +=get&search=0x%s +*gpgKeyOtherMethod: exec echo "can't find $id" > $tmp +*gpgComment: Exmh version 2.5 08/15/2002 +*gpgModulePath: /usr/lib/gnupg +*gpgCipherMods: skipjack idea +*gpgDigestMods: tiger +*gpgPubkeyMods: rsa +*gpgPgp5Compatibility: 1 +*gpgCipherAlgo: 3des +*gpgDigestAlgo: sha1 +*gpgCompressAlgo: zip + + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01006.4a648f164dd2f6076f59272ea14c3c03 b/Ch3/datasets/spam/easy_ham/01006.4a648f164dd2f6076f59272ea14c3c03 new file mode 100644 index 000000000..5f33b7033 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01006.4a648f164dd2f6076f59272ea14c3c03 @@ -0,0 +1,81 @@ +From exmh-users-admin@redhat.com Thu Sep 12 14:01:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 947EE16F03 + for ; Thu, 12 Sep 2002 14:01:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 14:01:40 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8C2LhC13465 for + ; Thu, 12 Sep 2002 03:21:43 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id A81BC3F7F8; Wed, 11 Sep 2002 + 22:22:04 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id D92653F7F8 + for ; Wed, 11 Sep 2002 22:21:59 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8C2LsK04918 for exmh-users@listman.redhat.com; Wed, 11 Sep 2002 + 22:21:54 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8C2Lsk04912 for + ; Wed, 11 Sep 2002 22:21:54 -0400 +Received: from garlic.apnic.net (garlic.apnic.net [202.12.29.224]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8C25Nw06472 for + ; Wed, 11 Sep 2002 22:05:23 -0400 +Received: from garlic.apnic.net (localhost [127.0.0.1]) by + garlic.apnic.net (8.11.6/8.11.6) with ESMTP id g8CCJTq17707 for + ; Thu, 12 Sep 2002 12:19:30 GMT +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +From: George Michaelson +To: exmh-users@spamassassin.taint.org +Subject: bad focus/click behaviours +In-Reply-To: Your message of + "Wed, 11 Sep 2002 08:27:24 -0500." + <14343.1031750844@dimebox> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <17705.1031833169@garlic.apnic.net> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Thu, 12 Sep 2002 12:19:29 +0000 + + +I am a (tv)twm user. when I snarf text into my mouse cut buffer, and then +attempt to inject it into the exmh input windows for comp/repl, the 'point' +is often an apparently random place in the text pane, not where I think I +have current flashing cursor. + +I usually wipe out any of To:/Subject:/ with the text. Its +often not even beginning of line denoted, ie its an unexplicable number +of char spaces in to the text where it inserts, + +What am I doing wrong in either X, WM, shell, EXMH which is causing this? + +cheers + -George + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01007.69e228a20df371852b13376f64d01002 b/Ch3/datasets/spam/easy_ham/01007.69e228a20df371852b13376f64d01002 new file mode 100644 index 000000000..095bfcf8b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01007.69e228a20df371852b13376f64d01002 @@ -0,0 +1,98 @@ +From exmh-users-admin@redhat.com Thu Sep 12 14:01:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8A8D116F03 + for ; Thu, 12 Sep 2002 14:01:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 14:01:42 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8C3H2C14719 for + ; Thu, 12 Sep 2002 04:17:03 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id BE30D4007B; Wed, 11 Sep 2002 + 23:17:23 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 9EEE741194 + for ; Wed, 11 Sep 2002 23:15:13 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8C3F8813342 for exmh-users@listman.redhat.com; Wed, 11 Sep 2002 + 23:15:08 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8C3F8k13338 for + ; Wed, 11 Sep 2002 23:15:08 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8C2wcw14812 for + ; Wed, 11 Sep 2002 22:58:38 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + XAA25189 for ; Wed, 11 Sep 2002 23:15:02 -0400 +Message-Id: <200209120315.XAA25189@blackcomb.panasas.com> +X-Mailer: exmh version 2.5.9 07/25/2002 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Subject: Re: bad focus/click behaviours +In-Reply-To: <17705.1031833169@garlic.apnic.net> +References: <17705.1031833169@garlic.apnic.net> +Comments: In-reply-to George Michaelson message dated + "Thu, 12 Sep 2002 12:19:29 -0000." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=> + r5~UnRml1:4EglY{9B+ :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 11 Sep 2002 20:15:00 -0700 + +exmh has a funky cut/paste model that is essentially all my fault. +The middle click sets the insert point. If you hate that, go to the +Bindings... Simple Edit preferences window and de-select +"Paste Sets Insert". + +>>>George Michaelson said: + > + > I am a (tv)twm user. when I snarf text into my mouse cut buffer, and then + > attempt to inject it into the exmh input windows for comp/repl, the +'point' + > is often an apparently random place in the text pane, not where I think I + > have current flashing cursor. + > + > I usually wipe out any of To:/Subject:/ with the text. Its + > often not even beginning of line denoted, ie its an unexplicable number + > of char spaces in to the text where it inserts, + > + > What am I doing wrong in either X, WM, shell, EXMH which is causing this? + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01008.507687dd01e1572bcd2392e1ba70345e b/Ch3/datasets/spam/easy_ham/01008.507687dd01e1572bcd2392e1ba70345e new file mode 100644 index 000000000..ea2b1a889 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01008.507687dd01e1572bcd2392e1ba70345e @@ -0,0 +1,92 @@ +From exmh-users-admin@redhat.com Thu Sep 12 21:21:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0059816F03 + for ; Thu, 12 Sep 2002 21:21:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 21:21:22 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8CJDmC12084 for + ; Thu, 12 Sep 2002 20:13:49 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id C03803FDDE; Thu, 12 Sep 2002 + 15:09:41 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 4EEF441687 + for ; Thu, 12 Sep 2002 15:05:53 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8CJ5mD22205 for exmh-users@listman.redhat.com; Thu, 12 Sep 2002 + 15:05:48 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8CJ5lk22201 for + ; Thu, 12 Sep 2002 15:05:47 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g8CInCw15959 for ; + Thu, 12 Sep 2002 14:49:12 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g8CJ40t23726 for + ; Fri, 13 Sep 2002 02:04:00 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g8CJ37821379 for ; + Fri, 13 Sep 2002 02:03:09 +0700 (ICT) +From: Robert Elz +To: exmh-users@spamassassin.taint.org +Subject: Re: bad focus/click behaviours +In-Reply-To: <200209120315.XAA25189@blackcomb.panasas.com> +References: <200209120315.XAA25189@blackcomb.panasas.com> + <17705.1031833169@garlic.apnic.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <21377.1031857387@munnari.OZ.AU> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 02:03:07 +0700 + + Date: Wed, 11 Sep 2002 20:15:00 -0700 + From: Brent Welch + Message-ID: <200209120315.XAA25189@blackcomb.panasas.com> + + | exmh has a funky cut/paste model that is essentially all my fault. + | The middle click sets the insert point. If you hate that, go to the + | Bindings... Simple Edit preferences window and de-select + | "Paste Sets Insert". + +Unfortunately, the side effect of that solution is that it is no longer +possible to cut/paste within one sedit window, some intermediate client +always must be used (except in the rare case where you want to select +some text, and then paste it at the same place). + +That's because the click that you have to (with this option) make to set +the insert point, also kills the selection (it ends up reverting to the +last selection made in some other window, or something like that). + +So, the vast majority of people probably want that "Paste Sets Insert" +enabled - that one you can learn to live with, the other is much more +painful. + +kre + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01009.a48979e302c75b3b7427e2a494f71469 b/Ch3/datasets/spam/easy_ham/01009.a48979e302c75b3b7427e2a494f71469 new file mode 100644 index 000000000..f06345da1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01009.a48979e302c75b3b7427e2a494f71469 @@ -0,0 +1,110 @@ +From exmh-users-admin@redhat.com Fri Sep 13 13:34:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 47E4C16F03 + for ; Fri, 13 Sep 2002 13:34:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 13:34:59 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8D1UfC27366 for + ; Fri, 13 Sep 2002 02:30:44 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 69E903EB9E; Thu, 12 Sep 2002 + 21:31:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 3461B3F7EB + for ; Thu, 12 Sep 2002 21:28:15 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8D1SAK10892 for exmh-users@listman.redhat.com; Thu, 12 Sep 2002 + 21:28:10 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8D1S9k10888 for + ; Thu, 12 Sep 2002 21:28:09 -0400 +Received: from hobbit.linuxworks.com.au + (CPE-203-51-196-87.qld.bigpond.net.au [203.51.196.87]) by mx1.redhat.com + (8.11.6/8.11.6) with SMTP id g8D1BWw05803 for ; + Thu, 12 Sep 2002 21:11:32 -0400 +Received: (from tony@localhost) by hobbit.linuxworks.com.au + (8.11.6/8.11.6) id g8D1QUf21470; Fri, 13 Sep 2002 11:26:30 +1000 +Message-Id: <200209130126.g8D1QUf21470@hobbit.linuxworks.com.au.nospam> +To: exmh-users@spamassassin.taint.org +From: Tony Nugent +X-Face: ]IrGs{LrofDtGfsrG!As5=G'2HRr2zt:H>djXb5@v|Dr!jOelxzAZ`!}("]}] + Q!)1w#X;)nLlb'XhSu,QL>;)L/l06wsI?rv-xy6%Y1e"BUiV%)mU;]f-5<#U6 + UthZ0QrF7\_p#q}*Cn}jd|XT~7P7ik]Q!2u%aTtvc;)zfH\:3f<[a:)M +Organization: Linux Works for network +X-Mailer: nmh-1.0.4 exmh-2.4 +X-Os: Linux-2.4 RedHat 7.2 +In-Reply-To: message-id <21377.1031857387@munnari.OZ.AU> of Fri, + Sep 13 02:03:07 2002 +Subject: Re: bad focus/click behaviours +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 11:26:30 +1000 + +On Fri Sep 13 2002 at 02:03, Robert Elz wrote: + +> Date: Wed, 11 Sep 2002 20:15:00 -0700 +> From: Brent Welch + +> | exmh has a funky cut/paste model that is essentially all my fault. +> | The middle click sets the insert point. If you hate that, go to the +> | Bindings... Simple Edit preferences window and de-select +> | "Paste Sets Insert". +> +> Unfortunately, the side effect of that solution is that it is no longer +> possible to cut/paste within one sedit window, some intermediate client +> always must be used (except in the rare case where you want to select +> some text, and then paste it at the same place). + +> So, the vast majority of people probably want that "Paste Sets Insert" +> enabled - that one you can learn to live with, the other is much more +> painful. + +For a long time I have used an external editor with exmh (gvim). + +I can cut'n'paste from exmh's message display window into spawned +gvim processes, but not into anything else. + +This is VERY annoying. + + (I have to look at the message with cat or less or whatever in a + terminal window if I want to do this - which is quite often. And + if the message is q-p encoded or a non-text/plain mime type, I end + up with all that raw garbage too). + +Anyway to fix this? + +(BTW: standard i386 redhat7.3) + +Thanks. + +> kre + +Cheers +Tony + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01010.d1dee04c1b00b3b3fd642a475b6ef52e b/Ch3/datasets/spam/easy_ham/01010.d1dee04c1b00b3b3fd642a475b6ef52e new file mode 100644 index 000000000..268520884 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01010.d1dee04c1b00b3b3fd642a475b6ef52e @@ -0,0 +1,96 @@ +From exmh-users-admin@redhat.com Fri Sep 13 13:35:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F2C0716F03 + for ; Fri, 13 Sep 2002 13:35:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 13:35:07 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8D2ZuC29994 for + ; Fri, 13 Sep 2002 03:35:56 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 7ED0F3FDA1; Thu, 12 Sep 2002 + 22:34:01 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 633FA3FC80 + for ; Thu, 12 Sep 2002 22:33:03 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8D2Wwc20428 for exmh-users@listman.redhat.com; Thu, 12 Sep 2002 + 22:32:58 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8D2Wvk20424 for + ; Thu, 12 Sep 2002 22:32:57 -0400 +Received: from hobbit.linuxworks.com.au + (CPE-203-51-196-87.qld.bigpond.net.au [203.51.196.87]) by mx1.redhat.com + (8.11.6/8.11.6) with SMTP id g8D2GKw15477 for ; + Thu, 12 Sep 2002 22:16:20 -0400 +Received: (from tony@localhost) by hobbit.linuxworks.com.au + (8.11.6/8.11.6) id g8D2VO021580; Fri, 13 Sep 2002 12:31:24 +1000 +Message-Id: <200209130231.g8D2VO021580@hobbit.linuxworks.com.au.nospam> +To: exmh-users@spamassassin.taint.org +From: Tony Nugent +X-Face: ]IrGs{LrofDtGfsrG!As5=G'2HRr2zt:H>djXb5@v|Dr!jOelxzAZ`!}("]}] + Q!)1w#X;)nLlb'XhSu,QL>;)L/l06wsI?rv-xy6%Y1e"BUiV%)mU;]f-5<#U6 + UthZ0QrF7\_p#q}*Cn}jd|XT~7P7ik]Q!2u%aTtvc;)zfH\:3f<[a:)M +Organization: Linux Works for network +X-Mailer: nmh-1.0.4 exmh-2.4 +X-Os: Linux-2.4 RedHat 7.2 +In-Reply-To: message-id <5305.1031637136@munnari.OZ.AU> of Tue, + Sep 10 12:52:16 2002 +Subject: Linking message [was: Re: Patch to complete a change...] +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 12:31:24 +1000 + +On Tue Sep 10 2002 at 12:52, Robert Elz wrote: + +> Subject: Patch to complete a change... + +> I guess that most of us don't use "link" very often ... I noticed it +> last week, but only got time to look and see why today. + +I would like to use [Link] a lot more, but is it rather +inconvenient. + +I have set my right mouse button to [Move] a message to another +folder, which works fine. + +However, [Link] also uses the same destination folder as [Move], and +so if I want to use [Link] I first have to mark the destination +folder with a message-move, undo the move, then I can use the +[Link]. Very inconvenient. + +Is there a better way for me to set this up so that [Link] works +with one or two simple clicks? + +(In essence: is there a way to mark a destination folder for a +message link or move without actually doing a move or link, I +couldn't see anything obvious). + +Cheers +Tony + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01011.026a9a3bdab758181c61e6d828a4e212 b/Ch3/datasets/spam/easy_ham/01011.026a9a3bdab758181c61e6d828a4e212 new file mode 100644 index 000000000..f7f3c349a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01011.026a9a3bdab758181c61e6d828a4e212 @@ -0,0 +1,89 @@ +From exmh-users-admin@redhat.com Fri Sep 13 13:35:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B346E16F03 + for ; Fri, 13 Sep 2002 13:35:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 13:35:10 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8D4R4C01333 for + ; Fri, 13 Sep 2002 05:27:04 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 29EB13F5C3; Fri, 13 Sep 2002 + 00:27:27 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 27D413EA41 + for ; Fri, 13 Sep 2002 00:26:46 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8D4Qe505081 for exmh-users@listman.redhat.com; Fri, 13 Sep 2002 + 00:26:40 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8D4Qek05077 for + ; Fri, 13 Sep 2002 00:26:40 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8D4A3w31410 for ; Fri, 13 Sep 2002 00:10:03 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id 1EAB838DA9; + Thu, 12 Sep 2002 23:26:38 -0500 (CDT) +Received: from dimebox (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id DD2D438DA7; Thu, 12 Sep 2002 23:26:38 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +In-Reply-To: <200209130231.g8D2VO021580@hobbit.linuxworks.com.au.nospam> +References: <200209130231.g8D2VO021580@hobbit.linuxworks.com.au.nospam> +Comments: In-reply-to Tony Nugent message dated + "Fri, 13 Sep 2002 12:31:24 +1000." +To: Tony Nugent +Cc: exmh-users@spamassassin.taint.org +Subject: Re: Linking message [was: Re: Patch to complete a change...] +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <23204.1031891193@dimebox> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Thu, 12 Sep 2002 23:26:33 -0500 + + + +>>>>> On Fri, 13 Sep 2002, "Tony" == Tony Nugent wrote: + + Tony> (In essence: is there a way to mark a destination folder + Tony> for a message link or move without actually doing a move + Tony> or link, I couldn't see anything obvious). + +1) Right click on the folder label in the folder list + +2) In the main window, the "+" key puts you into a "change + folder" mode (the first time you use it after starting exmh), + hit a second + and you go to "set a target" mode. Type a few + characters of the folder name and hit space for autocomplete. + +--Hal + +How's spring shaping up "down under"? + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01012.27f1267454edd513b56e375205d1cbdd b/Ch3/datasets/spam/easy_ham/01012.27f1267454edd513b56e375205d1cbdd new file mode 100644 index 000000000..d24f02731 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01012.27f1267454edd513b56e375205d1cbdd @@ -0,0 +1,114 @@ +From exmh-users-admin@redhat.com Fri Sep 13 13:35:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5EDF716F03 + for ; Fri, 13 Sep 2002 13:35:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 13:35:54 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8DACnC13369 for + ; Fri, 13 Sep 2002 11:12:50 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 285A13F372; Fri, 13 Sep 2002 + 06:13:12 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id A5DDB3F53B + for ; Fri, 13 Sep 2002 06:11:06 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8DAB1826852 for exmh-users@listman.redhat.com; Fri, 13 Sep 2002 + 06:11:01 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8DAB1k26848 for + ; Fri, 13 Sep 2002 06:11:01 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g8D9sAw16968 for ; + Fri, 13 Sep 2002 05:54:16 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g8DAA6t27100 for + ; Fri, 13 Sep 2002 17:10:09 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g8DA9t826042 for ; + Fri, 13 Sep 2002 17:10:02 +0700 (ICT) +From: Robert Elz +To: exmh-users@spamassassin.taint.org +Subject: Re: Linking message [was: Re: Patch to complete a change...] +In-Reply-To: <23204.1031891193@dimebox> +References: <23204.1031891193@dimebox> + <200209130231.g8D2VO021580@hobbit.linuxworks.com.au.nospam> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <26040.1031911795@munnari.OZ.AU> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 17:09:55 +0700 + + Date: Thu, 12 Sep 2002 23:26:33 -0500 + From: Hal DeVore + Message-ID: <23204.1031891193@dimebox> + + | 1) Right click on the folder label in the folder list + +That (the way I have it configured, and it sounds as if the way Tony does +too) just does a move (rather than select as target without moving). + +Of course, if you can manage to get no messages currently selected, then +it works fine. + + | 2) In the main window, the "+" key puts you into a "change + | folder" mode (the first time you use it after starting exmh), + | hit a second + and you go to "set a target" mode. Type a few + | characters of the folder name and hit space for autocomplete. + +This works, but is not nice if you're not using the keyboard, but just +the mouse. + +Tony: I agree - a nice way to link in one click would be good, and should +be easy to add, though currently adding mouse bindings (something like +shift right click would be a good choice) is much harder than adding +key bindings. + +But note there's no need to "undo" - the way I generally use link, if +the desired destination folder isn't the current selected target, is +to right click on the target, which selects it and moves the message, +(and because I have the "automatic move to the next message on move or +link option set) select the message again, and then "Link". + +Exmh only permits one uncomitted action to be selected for a message at a +time, that is, one of delete, move, or link. Selecting any of those +implicitly undoes any previous choice from the three (so you cannot +achieve a "move" by doing a link, then delete, then commit, it needs to +be link, commit, delete, commit). (xmh was just the same there incidentally). + + | How's spring shaping up "down under"? + +No meaningful comment from me, I'm not there at the minute. But I'm told +that where I'm from it is cold, wet, and miserable, though has been better +during the day (sunny days, cold nights) for the past few. In any case, +all of that is a good enough reason to stay away... + +kre + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01013.5e43d991c292968615961b1ccfc378b3 b/Ch3/datasets/spam/easy_ham/01013.5e43d991c292968615961b1ccfc378b3 new file mode 100644 index 000000000..8d9d25aad --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01013.5e43d991c292968615961b1ccfc378b3 @@ -0,0 +1,84 @@ +From exmh-users-admin@redhat.com Fri Sep 13 13:36:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D097916F03 + for ; Fri, 13 Sep 2002 13:35:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 13:35:59 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8DAudC14907 for + ; Fri, 13 Sep 2002 11:56:39 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id E901B3ED5E; Fri, 13 Sep 2002 + 06:57:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 4E0D53EC06 + for ; Fri, 13 Sep 2002 06:56:24 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8DAuJ932477 for exmh-users@listman.redhat.com; Fri, 13 Sep 2002 + 06:56:19 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8DAuIk32473 for + ; Fri, 13 Sep 2002 06:56:18 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g8DAdUw22284 for ; + Fri, 13 Sep 2002 06:39:34 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g8DAtbt01502 for + ; Fri, 13 Sep 2002 17:55:50 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g8DAtU826497 for ; + Fri, 13 Sep 2002 17:55:31 +0700 (ICT) +From: Robert Elz +To: exmh-users@spamassassin.taint.org +Subject: Re: bad focus/click behaviours +In-Reply-To: <200209130126.g8D1QUf21470@hobbit.linuxworks.com.au.nospam> +References: <200209130126.g8D1QUf21470@hobbit.linuxworks.com.au.nospam> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <26495.1031914530@munnari.OZ.AU> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 17:55:30 +0700 + + Date: Fri, 13 Sep 2002 11:26:30 +1000 + From: Tony Nugent + Message-ID: <200209130126.g8D1QUf21470@hobbit.linuxworks.com.au.nospam> + + | I can cut'n'paste from exmh's message display window into spawned + | gvim processes, but not into anything else. + +That's odd. I cut & paste between all kinds of windows (exmh into +mozilla, xterm, another wish script of mine I use for DNS tasks (but +that one I guess is to be expected) netscape (when I used to use it, +but I suppose it and mozilla are the same codebase, approx) - in fact +I can't thing of anything it fails for, that I have noticed. + +What is an example of an "anything else" that it fails for for you? + +kre + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01014.4268008fc066b05b4a6de75c8221bdde b/Ch3/datasets/spam/easy_ham/01014.4268008fc066b05b4a6de75c8221bdde new file mode 100644 index 000000000..fefe71ef3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01014.4268008fc066b05b4a6de75c8221bdde @@ -0,0 +1,106 @@ +From exmh-users-admin@redhat.com Fri Sep 13 13:36:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 568FD16F03 + for ; Fri, 13 Sep 2002 13:36:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 13:36:09 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8DBXaC16246 for + ; Fri, 13 Sep 2002 12:33:37 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id E67FE3EA26; Fri, 13 Sep 2002 + 07:34:00 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 2401C401C5 + for ; Fri, 13 Sep 2002 07:32:15 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8DBW9904558 for exmh-users@listman.redhat.com; Fri, 13 Sep 2002 + 07:32:09 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8DBW9k04554 for + ; Fri, 13 Sep 2002 07:32:09 -0400 +Received: from hobbit.linuxworks.com.au + (CPE-203-51-196-87.qld.bigpond.net.au [203.51.196.87]) by mx1.redhat.com + (8.11.6/8.11.6) with SMTP id g8DBFTw26632 for ; + Fri, 13 Sep 2002 07:15:29 -0400 +Received: (from tony@localhost) by hobbit.linuxworks.com.au + (8.11.6/8.11.6) id g8DBUZL24217; Fri, 13 Sep 2002 21:30:35 +1000 +Message-Id: <200209131130.g8DBUZL24217@hobbit.linuxworks.com.au.nospam> +To: exmh-users@spamassassin.taint.org +From: Tony Nugent +X-Face: ]IrGs{LrofDtGfsrG!As5=G'2HRr2zt:H>djXb5@v|Dr!jOelxzAZ`!}("]}] + Q!)1w#X;)nLlb'XhSu,QL>;)L/l06wsI?rv-xy6%Y1e"BUiV%)mU;]f-5<#U6 + UthZ0QrF7\_p#q}*Cn}jd|XT~7P7ik]Q!2u%aTtvc;)zfH\:3f<[a:)M +Organization: Linux Works for network +X-Mailer: nmh-1.0.4 exmh-2.4 +X-Os: Linux-2.4 RedHat 7.2 +In-Reply-To: message-id <26495.1031914530@munnari.OZ.AU> of Fri, + Sep 13 17:55:30 2002 +Subject: Re: bad focus/click behaviours +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 21:30:34 +1000 + +On Fri Sep 13 2002 at 17:55, Robert Elz wrote: + +> Date: Fri, 13 Sep 2002 11:26:30 +1000 +> From: Tony Nugent + +> | I can cut'n'paste from exmh's message display window into spawned +> | gvim processes, but not into anything else. +> +> That's odd. I cut & paste between all kinds of windows (exmh into + +Not so odd, this issue came up several weeks ago (with no real +resolution). + +> mozilla, xterm, another wish script of mine I use for DNS tasks (but +> that one I guess is to be expected) netscape (when I used to use it, +> but I suppose it and mozilla are the same codebase, approx) - in fact +> I can't thing of anything it fails for, that I have noticed. +> +> What is an example of an "anything else" that it fails for for you? + +Everything else :) I can't even mark text in an exmh message window +and then paste it into a terminal window, the cut buffer seems to be +completely empty (and its previous contents are no longer there +either). + +> kre + + BTW: talking of spring downunder... I'm in Queensland. It almost + feels like early summer already (winters here are dry and warm, + much better than cold wet miserable Melbourne :-) Despite some + recent rain (first in months), we are already into a drought, with + an El-Nino on the way it is only going to get worse... (the last + one in the 90s caused one of the worst droughts ever seen here in + aussie). + +Cheers +Tony + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01015.8a6eaecc5bc6782f0f60bc0cafd412d9 b/Ch3/datasets/spam/easy_ham/01015.8a6eaecc5bc6782f0f60bc0cafd412d9 new file mode 100644 index 000000000..47fce32d3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01015.8a6eaecc5bc6782f0f60bc0cafd412d9 @@ -0,0 +1,90 @@ +From exmh-users-admin@redhat.com Fri Sep 13 13:36:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 20D3316F03 + for ; Fri, 13 Sep 2002 13:36:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 13:36:15 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8DBwbC16917 for + ; Fri, 13 Sep 2002 12:58:41 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 63C7B3F4D0; Fri, 13 Sep 2002 + 07:59:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id BACAA4022B + for ; Fri, 13 Sep 2002 07:58:02 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8DBvvg08846 for exmh-users@listman.redhat.com; Fri, 13 Sep 2002 + 07:57:57 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8DBvvk08842 for + ; Fri, 13 Sep 2002 07:57:57 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8DBfIw30334 for ; Fri, 13 Sep 2002 07:41:18 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id CDA1F38DA9; + Fri, 13 Sep 2002 06:57:55 -0500 (CDT) +Received: from dimebox (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id C2E4E38DA2 for ; + Fri, 13 Sep 2002 06:57:55 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +In-Reply-To: <23204.1031891193@dimebox> +References: <200209130231.g8D2VO021580@hobbit.linuxworks.com.au.nospam> + <23204.1031891193@dimebox> +Comments: In-reply-to Hal DeVore message dated "Thu, + 12 Sep 2002 23:26:33 -0500." +To: exmh-users@spamassassin.taint.org +Subject: Re: Linking message [was: Re: Patch to complete a change...] +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <25104.1031918270@dimebox> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 06:57:50 -0500 + + +2) In the main window, the "+" key puts you into a "change + folder" mode (the first time you use it after starting exmh), + hit a second + and you go to "set a target" mode. Type a few + characters of the folder name and hit space for autocomplete. + +I should have finished this off. + +3) Keep hitting space to loop thru all the folders that match + the characters you typed. Hit return to actually select the + folder shown in the message area. + +I don't use this for navigating into nested folders as the only +thing I have nested is my archives. Someone else will have to +tell you how to do that if there are any tricks to it. + +--Hal + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01016.553813d21aa39e50dee2eb5af2d67cc6 b/Ch3/datasets/spam/easy_ham/01016.553813d21aa39e50dee2eb5af2d67cc6 new file mode 100644 index 000000000..9aad768ca --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01016.553813d21aa39e50dee2eb5af2d67cc6 @@ -0,0 +1,91 @@ +From exmh-users-admin@redhat.com Fri Sep 13 16:49:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 617DC16F03 + for ; Fri, 13 Sep 2002 16:49:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 16:49:59 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8DEJGC21884 for + ; Fri, 13 Sep 2002 15:19:16 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id AF2C03F162; Fri, 13 Sep 2002 + 10:19:11 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 3EFD13EA28 + for ; Fri, 13 Sep 2002 10:18:55 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8DEIoH01540 for exmh-users@listman.redhat.com; Fri, 13 Sep 2002 + 10:18:50 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8DEInk01536 for + ; Fri, 13 Sep 2002 10:18:49 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8DE29w21593 for ; Fri, 13 Sep 2002 10:02:10 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id 1428F38DAB; + Fri, 13 Sep 2002 09:18:46 -0500 (CDT) +Received: from dimebox (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id 0A90338DA2 for ; + Fri, 13 Sep 2002 09:18:46 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +In-Reply-To: <26040.1031911795@munnari.OZ.AU> +References: <23204.1031891193@dimebox> + <200209130231.g8D2VO021580@hobbit.linuxworks.com.au.nospam> + <26040.1031911795@munnari.OZ.AU> +Comments: In-reply-to Robert Elz message dated "Fri, + 13 Sep 2002 17:09:55 +0700." +To: exmh-users@spamassassin.taint.org +Subject: Re: Linking message [was: Re: Patch to complete a change...] +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <25618.1031926721@dimebox> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 09:18:41 -0500 + + + +>>>>> On Fri, 13 Sep 2002, "Robert" == Robert Elz wrote: + + Robert> That (the way I have it configured, and it sounds as if + Robert> the way Tony does too) just does a move (rather than + Robert> select as target without moving). + +Ah. I had forgotten that was settable. + +Preferences, Folder Display, "Action when Target Button +clicked..." set to "Select only" will change it. I seem to +recall that the button that is used as "Target button" is +configurable but I haven't had enough caffeine to recall where +that is. + +--Hal + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01017.6b308cae901605ef24e3cb038d89c3f7 b/Ch3/datasets/spam/easy_ham/01017.6b308cae901605ef24e3cb038d89c3f7 new file mode 100644 index 000000000..f166a6f04 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01017.6b308cae901605ef24e3cb038d89c3f7 @@ -0,0 +1,98 @@ +From exmh-users-admin@redhat.com Fri Sep 13 16:50:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3F1E916F03 + for ; Fri, 13 Sep 2002 16:50:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 16:50:01 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8DEShC22227 for + ; Fri, 13 Sep 2002 15:28:44 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id EB4213F138; Fri, 13 Sep 2002 + 10:29:03 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id E0C2B3EC07 + for ; Fri, 13 Sep 2002 10:28:28 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8DESNq03491 for exmh-users@listman.redhat.com; Fri, 13 Sep 2002 + 10:28:23 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8DESNk03487 for + ; Fri, 13 Sep 2002 10:28:23 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8DEBhw23464 for ; Fri, 13 Sep 2002 10:11:43 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id EB0F338DAB; + Fri, 13 Sep 2002 09:28:20 -0500 (CDT) +Received: from dimebox (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id E158E38DA2 for ; + Fri, 13 Sep 2002 09:28:20 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +In-Reply-To: <200209131130.g8DBUZL24217@hobbit.linuxworks.com.au.nospam> +References: <200209131130.g8DBUZL24217@hobbit.linuxworks.com.au.nospam> +Comments: In-reply-to Tony Nugent message dated + "Fri, 13 Sep 2002 21:30:34 +1000." +To: exmh-users@spamassassin.taint.org +Subject: Re: bad focus/click behaviours +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <25647.1031927295@dimebox> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 09:28:15 -0500 + + + +>>>>> On Fri, 13 Sep 2002, "Tony" == Tony Nugent wrote: + + Tony> I can't even mark text in an exmh message window and then + Tony> paste it into a terminal window, the cut buffer seems to + Tony> be completely empty (and its previous contents are no + Tony> longer there either). + +Brent confessed recently that he had tried to subvert the X +model(s) of copy and paste. Not in those words... but that +was how I read it. ;) + +I have a lot of trouble copying and pasting from or to exmh +across a VNC link (from things in the vncviewer to things not in +it and vice versa). As long as I stick to apps being "normally" +displayed on my X server I don't have much of a problem. + +My recollection from my X programming days is that the X model, +like everything in X, is more complex than the human brain can +handle. It also is very different from the MS-Windows model. +And I get the feeling that Tk tries to "unify" those two models +and fails. Not sure what the exmh-specific contribution to the +confusion is, frankly. + +--Hal + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01018.010877fb4fd12c66ec90c2d0dc36af4d b/Ch3/datasets/spam/easy_ham/01018.010877fb4fd12c66ec90c2d0dc36af4d new file mode 100644 index 000000000..d7dbe12a1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01018.010877fb4fd12c66ec90c2d0dc36af4d @@ -0,0 +1,120 @@ +From exmh-users-admin@redhat.com Fri Sep 13 16:50:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3E42916F03 + for ; Fri, 13 Sep 2002 16:50:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 16:50:06 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8DEkcC22817 for + ; Fri, 13 Sep 2002 15:46:43 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 5CA003F4AE; Fri, 13 Sep 2002 + 10:47:03 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id D79F83EF71 + for ; Fri, 13 Sep 2002 10:46:55 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8DEkoL07782 for exmh-users@listman.redhat.com; Fri, 13 Sep 2002 + 10:46:50 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8DEkok07778 for + ; Fri, 13 Sep 2002 10:46:50 -0400 +Received: from postal3.es.net (postal3.es.net [198.128.3.207]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8DEUAw27778 for + ; Fri, 13 Sep 2002 10:30:10 -0400 +Received: from ptavv.es.net ([198.128.4.29]) by postal3.es.net (Postal + Node 3) with ESMTP id GQF37091 for ; Fri, + 13 Sep 2002 07:46:48 -0700 +Received: from ptavv (localhost [127.0.0.1]) by ptavv.es.net (Postfix) + with ESMTP id E8CED5D04 for ; Fri, 13 Sep 2002 + 07:46:47 -0700 (PDT) +To: exmh-users@spamassassin.taint.org +Subject: Re: bad focus/click behaviours +In-Reply-To: Your message of + "Fri, 13 Sep 2002 21:30:34 +1000." + <200209131130.g8DBUZL24217@hobbit.linuxworks.com.au.nospam> +From: "Kevin Oberman" +Message-Id: <20020913144647.E8CED5D04@ptavv.es.net> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 07:46:47 -0700 + +> From: Tony Nugent +> Sender: exmh-users-admin@spamassassin.taint.org +> Date: Fri, 13 Sep 2002 21:30:34 +1000 +> +> On Fri Sep 13 2002 at 17:55, Robert Elz wrote: +> +> > Date: Fri, 13 Sep 2002 11:26:30 +1000 +> > From: Tony Nugent +> +> > | I can cut'n'paste from exmh's message display window into spawned +> > | gvim processes, but not into anything else. +> > +> > That's odd. I cut & paste between all kinds of windows (exmh into +> +> Not so odd, this issue came up several weeks ago (with no real +> resolution). +> +> > mozilla, xterm, another wish script of mine I use for DNS tasks (but +> > that one I guess is to be expected) netscape (when I used to use it, +> > but I suppose it and mozilla are the same codebase, approx) - in fact +> > I can't thing of anything it fails for, that I have noticed. +> > +> > What is an example of an "anything else" that it fails for for you? +> +> Everything else :) I can't even mark text in an exmh message window +> and then paste it into a terminal window, the cut buffer seems to be +> completely empty (and its previous contents are no longer there +> either). +> +> > kre +> +> BTW: talking of spring downunder... I'm in Queensland. It almost +> feels like early summer already (winters here are dry and warm, +> much better than cold wet miserable Melbourne :-) Despite some +> recent rain (first in months), we are already into a drought, with +> an El-Nino on the way it is only going to get worse... (the last +> one in the 90s caused one of the worst droughts ever seen here in +> aussie). + +(This is all guess work and may be bogus.) + +Are you running Gnome 1.4? I had similar problems as did several +co-workers. Updating my Gnome components has fixed it for me and +others, although I can't say exactly which component did the +trick. Gnomecore or gtk would seem most likely, but it may have been +something else. + +In any case, I have not seen the problem for quite a while, now. + +R. Kevin Oberman, Network Engineer +Energy Sciences Network (ESnet) +Ernest O. Lawrence Berkeley National Laboratory (Berkeley Lab) +E-mail: oberman@es.net Phone: +1 510 486-8634 + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01019.58335c892624e5dcf06dd7ba8706bfae b/Ch3/datasets/spam/easy_ham/01019.58335c892624e5dcf06dd7ba8706bfae new file mode 100644 index 000000000..7dec92a88 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01019.58335c892624e5dcf06dd7ba8706bfae @@ -0,0 +1,113 @@ +From exmh-users-admin@redhat.com Fri Sep 13 16:50:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5437616F03 + for ; Fri, 13 Sep 2002 16:50:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 16:50:08 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8DFJvC24079 for + ; Fri, 13 Sep 2002 16:19:57 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 9EC4E3F1F5; Fri, 13 Sep 2002 + 11:17:18 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id EBA9F40653 + for ; Fri, 13 Sep 2002 11:15:40 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8DFFZU15677 for exmh-users@listman.redhat.com; Fri, 13 Sep 2002 + 11:15:35 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8DFFZk15671 for + ; Fri, 13 Sep 2002 11:15:35 -0400 +Received: from mail2.lsil.com (mail2.lsil.com [147.145.40.22]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8DEwtw02432 for + ; Fri, 13 Sep 2002 10:58:55 -0400 +Received: from mhbs.lsil.com (mhbs [147.145.31.100]) by mail2.lsil.com + (8.9.3+Sun/8.9.1) with ESMTP id IAA24135 for ; + Fri, 13 Sep 2002 08:15:24 -0700 (PDT) +From: kchrist@lsil.com +Received: from inca.co.lsil.com by mhbs.lsil.com with ESMTP; + Fri, 13 Sep 2002 08:15:10 -0700 +Received: from flytrap.co.lsil.com (flytrap.co.lsil.com [172.20.3.234]) by + inca.co.lsil.com (8.9.3/8.9.3) with ESMTP id JAA25467; Fri, 13 Sep 2002 + 09:15:09 -0600 (MDT) +Received: from bhuta.co.lsil.com (bhuta [172.20.12.135]) by + flytrap.co.lsil.com (8.9.3+Sun/8.9.1) with ESMTP id JAA11684; + Fri, 13 Sep 2002 09:15:08 -0600 (MDT) +Received: from bhuta (localhost [127.0.0.1]) by bhuta.co.lsil.com + (8.10.2+Sun/8.9.1) with ESMTP id g8DFEwd26734; Fri, 13 Sep 2002 09:14:58 + -0600 (MDT) +X-Mailer: exmh version 2.5 07/09/2001 with nmh-1.0.4+dev +To: exmh-users@spamassassin.taint.org +Cc: Tony Nugent +Subject: Re: Linking message [was: Re: Patch to complete a change...] +In-Reply-To: Your message of + "Fri, 13 Sep 2002 12:31:24 +1000." + <200209130231.g8D2VO021580@hobbit.linuxworks.com.au.nospam> +References: <200209130231.g8D2VO021580@hobbit.linuxworks.com.au.nospam> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <26732.1031930098@bhuta> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +X-Reply-To: Kevin.Christian@lsil.com +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 09:14:58 -0600 + + +In message <200209130231.g8D2VO021580@hobbit.linuxworks.com.au.nospam>, Tony Nu +gent writes: +> +> I have set my right mouse button to [Move] a message to another +> folder, which works fine. +> +> However, [Link] also uses the same destination folder as [Move], and +> so if I want to use [Link] I first have to mark the destination +> folder with a message-move, undo the move, then I can use the +> [Link]. Very inconvenient. +> +> Is there a better way for me to set this up so that [Link] works +> with one or two simple clicks? +> + +According to some old documentation (man exmh-ref) + + The mouse bindings for the folders labels are: + + Left - Change to folder. + Middle - View nested folders. + Right - Refile current messages to the folder. + Shift-Right - Link current messages to the folder. + Shift-Middle - Drag a folder label to some drop target. + Control-Right - Clear the current target folder. + +It should be possible to link using shift-right-click the same way you +can move using only right-click. + +Kevin + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01020.5476f3169409fc3128ed353f765869a6 b/Ch3/datasets/spam/easy_ham/01020.5476f3169409fc3128ed353f765869a6 new file mode 100644 index 000000000..fed9615c7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01020.5476f3169409fc3128ed353f765869a6 @@ -0,0 +1,99 @@ +From exmh-users-admin@redhat.com Fri Sep 13 18:40:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 24E1616F03 + for ; Fri, 13 Sep 2002 18:40:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 18:40:34 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8DH5cC27575 for + ; Fri, 13 Sep 2002 18:05:38 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 0D89D3F9CE; Fri, 13 Sep 2002 + 13:06:03 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id E15EC3F9CE + for ; Fri, 13 Sep 2002 13:05:31 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8DH5Qi02324 for exmh-users@listman.redhat.com; Fri, 13 Sep 2002 + 13:05:26 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8DH5Qk02320 for + ; Fri, 13 Sep 2002 13:05:26 -0400 +Received: from lin12.triumf.ca + (IDENT:O1a17hgrh9hJ51MjhgnkNLni8RQK5mZ3@lin12.Triumf.CA [142.90.114.144]) + by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8DGmjw01679 for + ; Fri, 13 Sep 2002 12:48:45 -0400 +Received: from lin12.triumf.ca (baartman@localhost) by lin12.triumf.ca + (8.11.6/8.11.6) with ESMTP id g8DH5Or30284 for ; + Fri, 13 Sep 2002 10:05:24 -0700 +Message-Id: <200209131705.g8DH5Or30284@lin12.triumf.ca> +X-Mailer: exmh version 2.4 06/23/2000 with nmh-1.0.4 +X-Url: http://www.triumf.ca/people/baartman/ +X-Image-Url: http://lin12.triumf.ca/me3.gif +To: exmh-users@spamassassin.taint.org +Subject: Re: bad focus/click behaviours +In-Reply-To: <200209131130.g8DBUZL24217@hobbit.linuxworks.com.au.nospam> +References: <200209131130.g8DBUZL24217@hobbit.linuxworks.com.au.nospam> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Rick Baartman +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 10:05:23 -0700 + +I've never understood the mouse buffer operation with exmh either. Here's the +behaviour I have. I have exmh and XEmacs windows up, and a terminal window. (I +also have gnome1.4 running and enlightenment as wm.) I select text in the exmh +window and while it is highlighted, I can paste into anything else. If I select +it and then click so the highlighting is off, then what I paste is not the +recently-selected text in exmh, but an old selection. If I select in XEmacs and +leave it highlighted, I can paste it into exmh sedit window; but if it is no +longer highlighted, what I paste is an old selection. I can live with this +behaviour except for one additional thing. If nothing is highlighted, then what +I paste into exmh is different from what I paste into other windows. To be more +specific, here's what gets pasted if nothing is highlighted: + +Application What gets pasted + +XEmacs whatever was last selected unless it was last selected in exmh +xterm same as XEmacs +AbiWord nothing +Nedit nothing +sedit Whatever was last highlighted in sedit and overwritten + +The last needs some amplification. If I highlight something in sedit, then +obviously that's what gets pasted. If the highlighting is off, then what gets +pasted is NOT what was last highlighted in sedit, but what was last highlighted +and typed over (I have "Type Kills SEL" on.). + +It seems that exmh and sedit are the oddballs here. Very often when I try to +paste something in sedit I end up muttering WTF?? + +-- +rick + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01021.3fc1c0955f38f5873882a577f00a5f2c b/Ch3/datasets/spam/easy_ham/01021.3fc1c0955f38f5873882a577f00a5f2c new file mode 100644 index 000000000..76189b79f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01021.3fc1c0955f38f5873882a577f00a5f2c @@ -0,0 +1,96 @@ +From exmh-users-admin@redhat.com Sat Sep 14 16:22:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E931C16F03 + for ; Sat, 14 Sep 2002 16:22:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 14 Sep 2002 16:22:02 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8DNWcC07796 for + ; Sat, 14 Sep 2002 00:32:39 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 2C1143EA1A; Fri, 13 Sep 2002 + 19:33:04 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 1A01D3EF12 + for ; Fri, 13 Sep 2002 19:30:06 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8DNU0222121 for exmh-users@listman.redhat.com; Fri, 13 Sep 2002 + 19:30:00 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8DNU0k22117 for + ; Fri, 13 Sep 2002 19:30:00 -0400 +Received: from head-cfa.harvard.edu (head-cfa.harvard.edu [131.142.41.8]) + by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8DNDHw22160 for + ; Fri, 13 Sep 2002 19:13:17 -0400 +Received: from head-cfa.harvard.edu (neverland.harvard.edu + [131.142.42.198]) by head-cfa.harvard.edu (8.11.1/8.11.1) with ESMTP id + g8DNTx409571 for ; Fri, 13 Sep 2002 19:29:59 -0400 + (EDT) +Message-Id: <200209132329.g8DNTx409571@head-cfa.harvard.edu> +X-Mailer: exmh version 2.3.1 01/18/2001 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Subject: Automated forwarding +From: "Wendy P. Roberts" +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 13 Sep 2002 19:29:59 -0400 + + +Hi Folks, + +I've been trying to set a button called which automatically +forwards mail using a '-form mycomps' without going through +the editor, but so far haven't got the right recipe. + +I currently have in my .exmh-defaults: + +*Mops.spam.text: Spam +*Mops.spam.command: Msg_Forward -form spamcomps -noedit -nowhatnowproc ; Msg +_Remove + + +I've also tried with "SeditSend {$draft $t 0}" after the forward command. +It should forward to a spam address (where filters get adjusted) and then +delete. It does so, but not without producing the edit window. + +Any help appreciated. + +Wendy Roberts + + + +=========================================== +Wendy Roberts +HEAD System Administrator +High Energy Astrophsics Division +Harvard-Smithsonian Center for Astrophysics +Cambridge, MA USA 02138 +wendy@cfa.harvard.edu +Phone: 617-495-7153 +=========================================== + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01022.c0028d36bedd0f6be69cf55265ebce3f b/Ch3/datasets/spam/easy_ham/01022.c0028d36bedd0f6be69cf55265ebce3f new file mode 100644 index 000000000..28b5029cd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01022.c0028d36bedd0f6be69cf55265ebce3f @@ -0,0 +1,100 @@ +From exmh-users-admin@redhat.com Sat Sep 14 16:22:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6088A16F03 + for ; Sat, 14 Sep 2002 16:22:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 14 Sep 2002 16:22:40 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8E3MbC20623 for + ; Sat, 14 Sep 2002 04:22:38 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id BE6643EB86; Fri, 13 Sep 2002 + 23:23:01 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id C385C3EAB4 + for ; Fri, 13 Sep 2002 23:22:39 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8E3MYO19803 for exmh-users@listman.redhat.com; Fri, 13 Sep 2002 + 23:22:34 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8E3MYk19799 for + ; Fri, 13 Sep 2002 23:22:34 -0400 +Received: from hobbit.linuxworks.com.au + (CPE-203-51-194-212.qld.bigpond.net.au [203.51.194.212]) by mx1.redhat.com + (8.11.6/8.11.6) with SMTP id g8E35nw19374 for ; + Fri, 13 Sep 2002 23:05:49 -0400 +Received: (from tony@localhost) by hobbit.linuxworks.com.au + (8.11.6/8.11.6) id g8E3Kww29126; Sat, 14 Sep 2002 13:20:58 +1000 +Message-Id: <200209140320.g8E3Kww29126@hobbit.linuxworks.com.au.nospam> +To: exmh-users@spamassassin.taint.org +From: Tony Nugent +X-Face: ]IrGs{LrofDtGfsrG!As5=G'2HRr2zt:H>djXb5@v|Dr!jOelxzAZ`!}("]}] + Q!)1w#X;)nLlb'XhSu,QL>;)L/l06wsI?rv-xy6%Y1e"BUiV%)mU;]f-5<#U6 + UthZ0QrF7\_p#q}*Cn}jd|XT~7P7ik]Q!2u%aTtvc;)zfH\:3f<[a:)M +Organization: Linux Works for network +X-Mailer: nmh-1.0.4 exmh-2.4 +X-Os: Linux-2.4 RedHat 7.2 +In-Reply-To: message-id <20020913144647.E8CED5D04@ptavv.es.net> of Fri, + Sep 13 07:46:47 2002 +Subject: Re: bad focus/click behaviours +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sat, 14 Sep 2002 13:20:58 +1000 + +On Fri Sep 13 2002 at 07:46, "Kevin Oberman" wrote: + +> > > What is an example of an "anything else" that it fails for for you? +> > +> > Everything else :) I can't even mark text in an exmh message window +> > and then paste it into a terminal window, the cut buffer seems to be +> > completely empty (and its previous contents are no longer there +> > either). + +> (This is all guess work and may be bogus.) +> +> Are you running Gnome 1.4? I had similar problems as did several +> co-workers. Updating my Gnome components has fixed it for me and +> others, although I can't say exactly which component did the +> trick. Gnomecore or gtk would seem most likely, but it may have been +> something else. + +Indeed I am (this workstation is rh7.2 with gnome1.4, it [mostly?] +works, so I hadn't bothered to updated it to 7.3:) + +> In any case, I have not seen the problem for quite a while, now. + +So upgrading gnome will fix the problem, it's not an exmh/tktcl +issue. + +> R. Kevin Oberman, Network Engineer + +Thanks. + +Cheers +Tony + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01023.fc38576d2e2054cc52566252f8c75465 b/Ch3/datasets/spam/easy_ham/01023.fc38576d2e2054cc52566252f8c75465 new file mode 100644 index 000000000..b8900b449 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01023.fc38576d2e2054cc52566252f8c75465 @@ -0,0 +1,100 @@ +From exmh-users-admin@redhat.com Sat Sep 14 16:22:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1C31616F16 + for ; Sat, 14 Sep 2002 16:22:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 14 Sep 2002 16:22:57 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8ECobC04161 for + ; Sat, 14 Sep 2002 13:50:41 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id F1D6E3F95C; Sat, 14 Sep 2002 + 08:51:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 7AC293F95C + for ; Sat, 14 Sep 2002 08:50:36 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8ECoVm10789 for exmh-users@listman.redhat.com; Sat, 14 Sep 2002 + 08:50:31 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8ECoUk10785 for + ; Sat, 14 Sep 2002 08:50:30 -0400 +Received: from pacific-carrier-annex.mit.edu + (PACIFIC-CARRIER-ANNEX.MIT.EDU [18.7.21.83]) by mx1.redhat.com + (8.11.6/8.11.6) with SMTP id g8ECXjw01630 for ; + Sat, 14 Sep 2002 08:33:45 -0400 +Received: from central-city-carrier-station.mit.edu + (CENTRAL-CITY-CARRIER-STATION.MIT.EDU [18.7.7.72]) by + pacific-carrier-annex.mit.edu (8.9.2/8.9.2) with ESMTP id IAA11250 for + ; Sat, 14 Sep 2002 08:50:30 -0400 (EDT) +Received: from manawatu-mail-centre.mit.edu (MANAWATU-MAIL-CENTRE.MIT.EDU + [18.7.7.71]) by central-city-carrier-station.mit.edu (8.9.2/8.9.2) with + ESMTP id IAA21083 for ; Sat, 14 Sep 2002 08:50:29 + -0400 (EDT) +Received: from multics.mit.edu (MULTICS.MIT.EDU [18.187.1.73]) by + manawatu-mail-centre.mit.edu (8.9.2/8.9.2) with ESMTP id IAA15442 for + ; Sat, 14 Sep 2002 08:50:29 -0400 (EDT) +Received: from localhost (yyyyorzins@localhost) by multics.mit.edu (8.9.3) + with ESMTP id IAA02319; Sat, 14 Sep 2002 08:50:28 -0400 (EDT) +From: Jacob Morzinski +To: +Subject: Re: bad focus/click behaviours +In-Reply-To: <200209132022.g8DKMps00640@ms417l.math.okstate.edu> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sat, 14 Sep 2002 08:50:28 -0400 (EDT) + +On Fri, 13 Sep 2002, Dale Alspach wrote: +> My experience has been that if the item is showing in xclipboard +> and is highlighted that is what is pasted using the mouse. + +Classic X copy-and-paste behavior is that you can only paste what is +currently highlighted. In fact, it is the act of highlighting a +selection that actually copies that selection into the buffer. X has +no "copy" command -- if you highlighted it, you just copied it. + +> This does not seem to override what is in an application's own +> paste buffer. As far as I can tell Maple's cut and paste, for +> example, is isolated. + +If ab application has a "copy" command that you can choose to use +separately from the process of highlighting something, that command +is something the application authors wrote on their own. (And it it +likely that an application that wrote an internal "copy" command would +also have their own customized "paste" command, to make sure the two +work together.) Whether the internal (custom) select and paste +functions interoperate with the X server's global select and paste +functions will vary from program to program, because in each case you +are relying on the program's authors' efforts to blend separate systems. + + + Jacob Morzinski jmorzins@mit.edu + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01024.97d0b660e8cc7c56294ba3a801d46d28 b/Ch3/datasets/spam/easy_ham/01024.97d0b660e8cc7c56294ba3a801d46d28 new file mode 100644 index 000000000..eab5d4434 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01024.97d0b660e8cc7c56294ba3a801d46d28 @@ -0,0 +1,124 @@ +From exmh-users-admin@redhat.com Sat Sep 14 16:22:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D5BBA16F03 + for ; Sat, 14 Sep 2002 16:22:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 14 Sep 2002 16:22:58 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8EDNbC04904 for + ; Sat, 14 Sep 2002 14:23:37 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 605E03FB5A; Sat, 14 Sep 2002 + 09:24:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 611563EC22 + for ; Sat, 14 Sep 2002 09:23:12 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8EDN7j14880 for exmh-users@listman.redhat.com; Sat, 14 Sep 2002 + 09:23:07 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8EDN6k14876 for + ; Sat, 14 Sep 2002 09:23:06 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8ED6Kw05816 for ; Sat, 14 Sep 2002 09:06:21 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id 6C21138DAC; + Sat, 14 Sep 2002 08:23:04 -0500 (CDT) +Received: from dimebox (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id 2F41638DA7 for ; + Sat, 14 Sep 2002 08:23:04 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +In-Reply-To: <200209132329.g8DNTx409571@head-cfa.harvard.edu> +References: <200209132329.g8DNTx409571@head-cfa.harvard.edu> +Comments: In-reply-to "Wendy P. Roberts" + message dated "Fri, 13 Sep 2002 19:29:59 -0400." +To: exmh-users@spamassassin.taint.org +Subject: Re: Automated forwarding +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <29520.1032009778@dimebox> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sat, 14 Sep 2002 08:22:58 -0500 + + +>>>>> On Fri, 13 Sep 2002, "Wendy" == Wendy P. Roberts wrote: + + Wendy> I've been trying to set a button called which + Wendy> automatically forwards mail using a '-form mycomps' + Wendy> without going through the editor, but so far haven't got + Wendy> the right recipe. + +I have one that uses dist to send stuff from my work mail to my +home mail. The binding looks like this: + +set {bindings(key,HD_Dist_Silently -form distcomps.to-me)} + +The "HD_Dist_Silently" is a hacked up version of the proc that +does dist in exmh and is pasted in below. It's getting old and +probably should be "resynced" with the current code. But it +still works (on a relatively recent CVS copy of exmh) + +It's also possible that there's an easier way but I hacked this +together quickly a year or more ago and when it worked I moved +on to other tasks. + +--Hal + +proc HD_Dist_Silently { args } { + + global exmh msg + set exmh(ctype) {dist} + if {[string length $args] == 0} { + set args Mh_DistSetup + } + + if [MsgOk $msg(id) m] { + if {[string compare [info command $args] $args] == 0} { + # Old interface with hook procedure + if [catch {$args $exmh(folder) $m} err] { ;# Setup draft msg + Exmh_Status "${args}: $err" purple + return + } + } else { + if [catch { + Exmh_Status "dist +$exmh(folder) $m" + eval {MhExec dist +$exmh(folder) $m} -nowhatnowproc $args + MhAnnoSetup $exmh(folder) $m dist + } err] { + Exmh_Status "dist: $err" purple + return + } + } + Edit_Done send ;# Just send it + } +} + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01025.11e89c01b958ab83027b5ea3d508998a b/Ch3/datasets/spam/easy_ham/01025.11e89c01b958ab83027b5ea3d508998a new file mode 100644 index 000000000..495adb3b8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01025.11e89c01b958ab83027b5ea3d508998a @@ -0,0 +1,108 @@ +From exmh-users-admin@redhat.com Mon Sep 16 10:41:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6153916F03 + for ; Mon, 16 Sep 2002 10:41:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 10:41:54 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8G5YtC14552 for + ; Mon, 16 Sep 2002 06:34:56 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id E91E73EC79; Mon, 16 Sep 2002 + 01:34:25 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id BDE7A3EA2C + for ; Sun, 15 Sep 2002 16:29:07 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8FKT2r21372 for exmh-users@listman.redhat.com; Sun, 15 Sep 2002 + 16:29:02 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8FKT2k21368 for + ; Sun, 15 Sep 2002 16:29:02 -0400 +Received: from postal2.es.net (postal2.es.net [198.128.3.206]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8FKCAw30494 for + ; Sun, 15 Sep 2002 16:12:10 -0400 +Received: from ptavv.es.net ([198.128.4.29]) by postal2.es.net (Postal + Node 2) with ESMTP id GQF37091 for ; Sun, + 15 Sep 2002 13:29:00 -0700 +Received: from ptavv (localhost [127.0.0.1]) by ptavv.es.net (Postfix) + with ESMTP id F294C5D04 for ; Sun, 15 Sep 2002 + 13:28:59 -0700 (PDT) +To: exmh-users@spamassassin.taint.org +Subject: Re: bad focus/click behaviours +In-Reply-To: Your message of + "Sat, 14 Sep 2002 13:20:58 +1000." + <200209140320.g8E3Kww29126@hobbit.linuxworks.com.au.nospam> +From: "Kevin Oberman" +Message-Id: <20020915202900.F294C5D04@ptavv.es.net> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sun, 15 Sep 2002 13:28:59 -0700 + +> From: Tony Nugent +> Sender: exmh-users-admin@spamassassin.taint.org +> Date: Sat, 14 Sep 2002 13:20:58 +1000 +> +> On Fri Sep 13 2002 at 07:46, "Kevin Oberman" wrote: +> +> > > > What is an example of an "anything else" that it fails for for you? +> > > +> > > Everything else :) I can't even mark text in an exmh message window +> > > and then paste it into a terminal window, the cut buffer seems to be +> > > completely empty (and its previous contents are no longer there +> > > either). +> +> > (This is all guess work and may be bogus.) +> > +> > Are you running Gnome 1.4? I had similar problems as did several +> > co-workers. Updating my Gnome components has fixed it for me and +> > others, although I can't say exactly which component did the +> > trick. Gnomecore or gtk would seem most likely, but it may have been +> > something else. +> +> Indeed I am (this workstation is rh7.2 with gnome1.4, it [mostly?] +> works, so I hadn't bothered to updated it to 7.3:) +> +> > In any case, I have not seen the problem for quite a while, now. +> +> So upgrading gnome will fix the problem, it's not an exmh/tktcl +> issue. + +It did for me, but I am not willing to say it is not a tcl/tk issue as +other apps seemed to work OK for cut and paste and Tk does its +clipboard stuff a bit differently than most toolkits. So I'm not +about to place blame. Just reporting my experience. + +Also, I am not talking about installing Gnome2. Just updating the +many, many pieces of gnome to the current rev level. + +R. Kevin Oberman, Network Engineer +Energy Sciences Network (ESnet) +Ernest O. Lawrence Berkeley National Laboratory (Berkeley Lab) +E-mail: oberman@es.net Phone: +1 510 486-8634 + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01026.96f87ecca532224622e3910ba33d8a13 b/Ch3/datasets/spam/easy_ham/01026.96f87ecca532224622e3910ba33d8a13 new file mode 100644 index 000000000..34ec0314b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01026.96f87ecca532224622e3910ba33d8a13 @@ -0,0 +1,71 @@ +From exmh-users-admin@redhat.com Mon Sep 16 15:30:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4E22B16F03 + for ; Mon, 16 Sep 2002 15:30:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 15:30:56 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8GDbTC27396 for + ; Mon, 16 Sep 2002 14:37:29 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id A283F3EAA8; Mon, 16 Sep 2002 + 09:37:56 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 847DB3EF88 + for ; Mon, 16 Sep 2002 09:35:01 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8GDYtY31245 for exmh-users@listman.redhat.com; Mon, 16 Sep 2002 + 09:34:55 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8GDYtk31241 for + ; Mon, 16 Sep 2002 09:34:55 -0400 +Received: from opt.nrl.navy.mil (opt.nrl.navy.mil [132.250.123.123]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8GDI1w03532 for + ; Mon, 16 Sep 2002 09:18:01 -0400 +Received: from opt.nrl.navy.mil (hoppel@localhost) by opt.nrl.navy.mil + (8.11.6/8.11.6) with ESMTP id g8G1aQk05815 for ; + Sun, 15 Sep 2002 21:36:26 -0400 +Message-Id: <200209160136.g8G1aQk05815@opt.nrl.navy.mil> +X-Mailer: exmh version 2.4 06/23/2000 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Subject: MyIncErrors +From: "Karl Hoppel" +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sun, 15 Sep 2002 21:36:26 -0400 + +I recently transfered my exmh setup to a new system, and now +all my email ends up in Mail/MyIncErrors folder. This is true for +inbox or presort options. I'm having difficulty finding this condition +in the documention. Suggestions? + +Cheers, +Karl + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01027.427bd788f0799aabe46eb0d976bb3dc8 b/Ch3/datasets/spam/easy_ham/01027.427bd788f0799aabe46eb0d976bb3dc8 new file mode 100644 index 000000000..3774f34da --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01027.427bd788f0799aabe46eb0d976bb3dc8 @@ -0,0 +1,90 @@ +From exmh-users-admin@redhat.com Thu Sep 19 13:00:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0DC3D16F03 + for ; Thu, 19 Sep 2002 13:00:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 13:00:19 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8J2feC01001 for + ; Thu, 19 Sep 2002 03:41:41 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id D633B3EE40; Wed, 18 Sep 2002 + 22:42:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 80E523EA54 + for ; Wed, 18 Sep 2002 22:41:41 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8J2ffW30587 for exmh-users@listman.redhat.com; Wed, 18 Sep 2002 + 22:41:41 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8J2feh30583 for + ; Wed, 18 Sep 2002 22:41:40 -0400 +Received: from orion.dwf.com (bgp01360964bgs.sandia01.nm.comcast.net + [68.35.68.128]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8J2ORi12911 for ; Wed, 18 Sep 2002 22:24:27 -0400 +Received: from orion.dwf.com (localhost.dwf.com [127.0.0.1]) by + orion.dwf.com (8.12.1/8.12.1) with ESMTP id g8J2fYUb001632 for + ; Wed, 18 Sep 2002 20:41:34 -0600 +Received: from orion.dwf.com (reg@localhost) by orion.dwf.com + (8.12.1/8.12.1/Submit) with ESMTP id g8J2fY3o001629 for + ; Wed, 18 Sep 2002 20:41:34 -0600 +Message-Id: <200209190241.g8J2fY3o001629@orion.dwf.com> +X-Mailer: exmh version 2.5 07/25/2002 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Subject: (PGP problem) EXMH hangs during 'Query keyserver' +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Reg Clemens +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 18 Sep 2002 20:41:34 -0600 + +I guess the first question here should be does anyone have some +updates to the PGP code in EXMH that I should know about? + +My current problem is that if I get a PGP signed message, I first +get a button that reads: + "Check the signature with GnuPG" +If I punch the button, and I dont have the signature on my keyring +then I get a message saying just that, and the message: + "Can't check signature: public key not found" +along with a button with the inscription + "Query keyserver" +If I punch the button then EXMH just hangs. Forever. + +If instead of punching the button, I go out to the keyserver myself +and then try the message again, everything works, so it SEEMS that it +must be the code that goes out to the keyserver. + +Anyone else with this problem? +This is EXMH v2.5 and tcl/tk 8.4a4 +-- + Reg.Clemens + reg@dwf.com + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01028.9bc3697b9d9eb23fc4427b482b012f40 b/Ch3/datasets/spam/easy_ham/01028.9bc3697b9d9eb23fc4427b482b012f40 new file mode 100644 index 000000000..418b35281 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01028.9bc3697b9d9eb23fc4427b482b012f40 @@ -0,0 +1,76 @@ +From exmh-users-admin@redhat.com Thu Sep 19 13:01:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1006916F03 + for ; Thu, 19 Sep 2002 13:01:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 13:01:41 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8J9kbC14322 for + ; Thu, 19 Sep 2002 10:46:37 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id E59D23ECE2; Thu, 19 Sep 2002 + 05:47:01 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 90B8A3ECE2 + for ; Thu, 19 Sep 2002 05:46:14 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8J9kEq09095 for exmh-users@listman.redhat.com; Thu, 19 Sep 2002 + 05:46:14 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8J9kEh09088 for + ; Thu, 19 Sep 2002 05:46:14 -0400 +Received: from hobbit.linuxworks.com.au + (CPE-203-51-198-239.qld.bigpond.net.au [203.51.198.239]) by mx1.redhat.com + (8.11.6/8.11.6) with SMTP id g8J9Swi03770 for ; + Thu, 19 Sep 2002 05:28:58 -0400 +Received: (from tony@localhost) by hobbit.linuxworks.com.au + (8.11.6/8.11.6) id g8J9k1308152; Thu, 19 Sep 2002 19:46:01 +1000 +Message-Id: <200209190946.g8J9k1308152@hobbit.linuxworks.com.au.nospam> +To: exmh-users@spamassassin.taint.org +From: Tony Nugent +X-Face: ]IrGs{LrofDtGfsrG!As5=G'2HRr2zt:H>djXb5@v|Dr!jOelxzAZ`!}("]}] + Q!)1w#X;)nLlb'XhSu,QL>;)L/l06wsI?rv-xy6%Y1e"BUiV%)mU;]f-5<#U6 + UthZ0QrF7\_p#q}*Cn}jd|XT~7P7ik]Q!2u%aTtvc;)zfH\:3f<[a:)M +Organization: Linux Works for network +X-Mailer: nmh-1.0.4 exmh-2.4 +X-Os: Linux-2.4 RedHat 7.2 +Subject: customising FTOC display for specific folders... +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Thu, 19 Sep 2002 19:46:01 +1000 + +Is there any way to customise the folder table of contents for +specific folders? + +I know it is possible to do per-folder customisation with components +and replcomps for message templates, but what about -form format +files for scan? + +Cheers +Tony + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01029.2daa3bd281a583d4044a97d591e5155d b/Ch3/datasets/spam/easy_ham/01029.2daa3bd281a583d4044a97d591e5155d new file mode 100644 index 000000000..be0a6cab9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01029.2daa3bd281a583d4044a97d591e5155d @@ -0,0 +1,119 @@ +From exmh-users-admin@redhat.com Fri Sep 20 21:45:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C135216F03 + for ; Fri, 20 Sep 2002 21:45:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 21:45:35 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8KJ6HC19158 for + ; Fri, 20 Sep 2002 20:06:19 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id CDFC441197; Fri, 20 Sep 2002 + 15:03:05 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 3881240B8D + for ; Fri, 20 Sep 2002 14:57:05 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8KIv5K28339 for exmh-users@listman.redhat.com; Fri, 20 Sep 2002 + 14:57:05 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8KIv4h28335 for + ; Fri, 20 Sep 2002 14:57:04 -0400 +Received: from austin-jump.vircio.com + (IDENT:y9S4NRBm7xu5CJteofINMSj1AvueZzLf@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8KIddi01398 + for ; Fri, 20 Sep 2002 14:39:39 -0400 +Received: (qmail 20056 invoked by uid 104); 20 Sep 2002 18:57:03 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4223. . Clean. Processed in 0.330518 + secs); 20/09/2002 13:57:03 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 20 Sep 2002 18:57:03 -0000 +Received: (qmail 28209 invoked from network); 20 Sep 2002 18:57:00 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?arLzUBkPND7nmMFDfHxZLvzRwOF+H4Kq?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 20 Sep 2002 18:57:00 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Subject: I'm back in town... +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_1920300774P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +From: Chris Garrigues +Message-Id: <1032548220.28201.TMDA@deepeddy.vircio.com> +X-Delivery-Agent: TMDA/0.57 +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +X-Reply-To: Chris Garrigues +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 20 Sep 2002 13:56:59 -0500 + +--==_Exmh_1920300774P +Content-Type: text/plain; charset=us-ascii + +I've been working on salary related things the past few days, but I'm starting +to think about exmh again. + +Thanks to Robert for finding that s/$L/$lineno/ bug. + +So, has anybody else been looking at the performance issues that we were +talking about before I left, or should I dig right in? + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_1920300774P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9i297K9b4h5R0IUIRAiURAJ9aNU4uwQn+EwNOJlrvGJp9U4wVNQCcCkmT +KgDY1o8a2qpBe53DfoNyX9g= +=LClg +-----END PGP SIGNATURE----- + +--==_Exmh_1920300774P-- + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01030.c51edb65048a8f86717b049b00ed7356 b/Ch3/datasets/spam/easy_ham/01030.c51edb65048a8f86717b049b00ed7356 new file mode 100644 index 000000000..2911718ca --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01030.c51edb65048a8f86717b049b00ed7356 @@ -0,0 +1,105 @@ +From exmh-workers-admin@redhat.com Mon Sep 23 12:06:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CB0FE16F03 + for ; Mon, 23 Sep 2002 12:06:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 12:06:11 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8N2wYC29572 for + ; Mon, 23 Sep 2002 03:58:38 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 537483EA72; Sun, 22 Sep 2002 + 22:59:01 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 0244C3EE13 + for ; Sun, 22 Sep 2002 22:58:18 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8N2wHD02305 for exmh-workers@listman.redhat.com; Sun, 22 Sep 2002 + 22:58:17 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8N2wHh02301 for + ; Sun, 22 Sep 2002 22:58:17 -0400 +Received: from mercea.net (dsl092-151-122.wdc1.dsl.speakeasy.net + [66.92.151.122]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8N2eci08189 for ; Sun, 22 Sep 2002 22:40:39 + -0400 +Received: from mercea.mercea.net (localhost.mercea.net [127.0.0.1]) by + mercea.net (Postfix) with ESMTP id 8E7A34A8 for ; + Sun, 22 Sep 2002 22:58:16 -0400 (EDT) +X-Mailer: exmh version 2.5_20020922 (09/22/02) with nmh-1.0.4 +From: Scott Lipcon +To: exmh-workers@spamassassin.taint.org +Subject: traceback in new exmh +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <20020923025816.8E7A34A8@mercea.net> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 22:58:16 -0400 + +I just updated to the latest CVS - I had been running a build from June. +Hitting the Flist button gives the following traceback: + +syntax error in expression "int(17+1+(222-)*(19-17-2)/(224-))" + while executing +"expr int($minLine+1+($msgid-$minMsg)*($maxLine-$minLine-2)/($maxMsg-$minMsg))" + (procedure "Ftoc_FindMsg" line 57) + invoked from within +"Ftoc_FindMsg $i" + (procedure "Ftoc_ShowSequences" line 16) + invoked from within +"Ftoc_ShowSequences $F" + (procedure "ScanFolder" line 81) + invoked from within +"ScanFolder inbox 0" + invoked from within +"time [list ScanFolder $F $adjustDisplay" + (procedure "Scan_Folder" line 2) + invoked from within +"Scan_Folder $exmh(folder) $ftoc(showNew)" + (procedure "Inc_PresortFinish" line 7) + invoked from within +"Inc_PresortFinish" + invoked from within +".fops.flist invoke" + ("uplevel" body line 1) + invoked from within +"uplevel #0 [list $w invoke]" + (procedure "tkButtonUp" line 7) + invoked from within +"tkButtonUp .fops.flist +" + (command bound to event) + + +It seems to only happen in a folder with no unseen messages. + +Chris, is this related to your recent changes? + +Scott + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01031.58993bacb186b32660aae3fc69890840 b/Ch3/datasets/spam/easy_ham/01031.58993bacb186b32660aae3fc69890840 new file mode 100644 index 000000000..e03986196 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01031.58993bacb186b32660aae3fc69890840 @@ -0,0 +1,137 @@ +From exmh-users-admin@redhat.com Mon Sep 23 12:06:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9F1BE16F03 + for ; Mon, 23 Sep 2002 12:06:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 12:06:17 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8N4wUC01425 for + ; Mon, 23 Sep 2002 05:58:30 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 528BB3EA45; Mon, 23 Sep 2002 + 00:59:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id CF8A23EA09 + for ; Mon, 23 Sep 2002 00:58:37 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8N4wbt18650 for exmh-users@listman.redhat.com; Mon, 23 Sep 2002 + 00:58:37 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8N4wbh18646 for + ; Mon, 23 Sep 2002 00:58:37 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8N4ewi21751 for + ; Mon, 23 Sep 2002 00:40:58 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + AAA08321 for ; Mon, 23 Sep 2002 00:58:30 -0400 +Message-Id: <200209230458.AAA08321@blackcomb.panasas.com> +To: exmh-users@spamassassin.taint.org +Subject: Re: Linking message [was: Re: Patch to complete a change...] +In-Reply-To: <26040.1031911795@munnari.OZ.AU> +References: <23204.1031891193@dimebox> + <200209130231.g8D2VO021580@hobbit.linuxworks.com.au.nospam> + <26040.1031911795@munnari.OZ.AU> +Comments: In-reply-to Robert Elz message dated "Fri, + 13 Sep 2002 17:09:55 +0700." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=>r5~UnRml1:4EglY{9B+ + :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 21:58:30 -0700 + +Both Move and Link are one-click actions. + + on a folder label Move's the current message + on a folder label Link's the current message + +>>>Robert Elz said: + > Date: Thu, 12 Sep 2002 23:26:33 -0500 + > From: Hal DeVore + > Message-ID: <23204.1031891193@dimebox> + > + > | 1) Right click on the folder label in the folder list + > + > That (the way I have it configured, and it sounds as if the way Tony does + > too) just does a move (rather than select as target without moving). + > + > Of course, if you can manage to get no messages currently selected, then + > it works fine. + > + > | 2) In the main window, the "+" key puts you into a "change + > | folder" mode (the first time you use it after starting exmh), + > | hit a second + and you go to "set a target" mode. Type a few + > | characters of the folder name and hit space for autocomplete. + > + > This works, but is not nice if you're not using the keyboard, but just + > the mouse. + > + > Tony: I agree - a nice way to link in one click would be good, and should + > be easy to add, though currently adding mouse bindings (something like + > shift right click would be a good choice) is much harder than adding + > key bindings. + > + > But note there's no need to "undo" - the way I generally use link, if + > the desired destination folder isn't the current selected target, is + > to right click on the target, which selects it and moves the message, + > (and because I have the "automatic move to the next message on move or + > link option set) select the message again, and then "Link". + > + > Exmh only permits one uncomitted action to be selected for a message at a + > time, that is, one of delete, move, or link. Selecting any of those + > implicitly undoes any previous choice from the three (so you cannot + > achieve a "move" by doing a link, then delete, then commit, it needs to + > be link, commit, delete, commit). (xmh was just the same there incidentally + ). + > + > | How's spring shaping up "down under"? + > + > No meaningful comment from me, I'm not there at the minute. But I'm told + > that where I'm from it is cold, wet, and miserable, though has been better + > during the day (sunny days, cold nights) for the past few. In any case, + > all of that is a good enough reason to stay away... + > + > kre + > + > + > + > _______________________________________________ + > Exmh-users mailing list + > Exmh-users@redhat.com + > https://listman.redhat.com/mailman/listinfo/exmh-users + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01032.45c15f19b17814767f5e4e50e722e79d b/Ch3/datasets/spam/easy_ham/01032.45c15f19b17814767f5e4e50e722e79d new file mode 100644 index 000000000..7a8b8cb22 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01032.45c15f19b17814767f5e4e50e722e79d @@ -0,0 +1,81 @@ +From rpm-list-admin@freshrpms.net Tue Aug 27 04:47:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A2E5543F99 + for ; Mon, 26 Aug 2002 23:47:46 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 04:47:46 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7R3iJZ24528 for + ; Tue, 27 Aug 2002 04:44:20 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7R3g2J04120; Tue, 27 Aug 2002 05:42:02 + +0200 +Received: from r220-1.rz.RWTH-Aachen.DE (r220-1.rz.RWTH-Aachen.DE + [134.130.3.31]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7R3fKJ25597 for ; Tue, 27 Aug 2002 05:41:20 +0200 +Received: from r220-1.rz.RWTH-Aachen.DE (relay2.RWTH-Aachen.DE + [134.130.3.1]) by r220-1.rz.RWTH-Aachen.DE (8.12.1/8.11.3-2) with ESMTP id + g7R3fKam028262 for ; Tue, 27 Aug 2002 05:41:20 + +0200 (MEST) +Received: from wilson (wilson.weh.RWTH-Aachen.DE [137.226.141.141]) by + r220-1.rz.RWTH-Aachen.DE (8.12.1/8.11.3/24) with SMTP id g7R3fJwP028257 + for ; Tue, 27 Aug 2002 05:41:19 +0200 (MEST) +Content-Type: text/plain; charset="iso-8859-15" +From: Torsten Bronger +Organization: RWTH Aachen +Subject: "requires:" and relational operators +X-Mailer: KMail [version 1.2] +MIME-Version: 1.0 +Message-Id: <02082705410501.08779@wilson> +To: "RPM Mailing List" +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g7R3fKJ25597 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 27 Aug 2002 05:41:16 +0200 +Date: Tue, 27 Aug 2002 05:41:16 +0200 + +Halloechen! + +I have + +Requires: saxon >= 6.5.1 +Conflicts: saxon >= 7 + +in my spec file. But apparently rpm ignores all version numbers. So, + +Requires: saxon >= 6.5.1 +# Conflicts: saxon >= 7 + +would install even with saxon-3.0.0, and + +# Requires: saxon >= 6.5.1 +Conflicts: saxon >= 7 + +wouldn't install even with saxon-6.5.2. What could be the reason +for this? + +Tschoe, +Torsten. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01033.d64406df785dc24169d6026c61287e08 b/Ch3/datasets/spam/easy_ham/01033.d64406df785dc24169d6026c61287e08 new file mode 100644 index 000000000..dcb11554b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01033.d64406df785dc24169d6026c61287e08 @@ -0,0 +1,71 @@ +From rpm-list-admin@freshrpms.net Tue Aug 27 10:35:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 4C98F43F99 + for ; Tue, 27 Aug 2002 05:35:45 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 10:35:45 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7R9ZnZ01670 for + ; Tue, 27 Aug 2002 10:35:54 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7R9X2J23503; Tue, 27 Aug 2002 11:33:02 + +0200 +Received: from r220-1.rz.RWTH-Aachen.DE (r220-1.rz.RWTH-Aachen.DE + [134.130.3.31]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7R9VxJ07183 for ; Tue, 27 Aug 2002 11:31:59 +0200 +Received: from r220-1.rz.RWTH-Aachen.DE (relay2.RWTH-Aachen.DE + [134.130.3.1]) by r220-1.rz.RWTH-Aachen.DE (8.12.1/8.11.3-2) with ESMTP id + g7R9Vxam022047 for ; Tue, 27 Aug 2002 11:31:59 + +0200 (MEST) +Received: from wilson (wilson.weh.RWTH-Aachen.DE [137.226.141.141]) by + r220-1.rz.RWTH-Aachen.DE (8.12.1/8.11.3/24) with SMTP id g7R9VwwP022042 + for ; Tue, 27 Aug 2002 11:31:58 +0200 (MEST) +Content-Type: text/plain; charset="iso-8859-15" +From: Torsten Bronger +Organization: RWTH Aachen +To: rpm-zzzlist@freshrpms.net +Subject: Re: "requires:" and relational operators +X-Mailer: KMail [version 1.2] +References: <02082705410501.08779@wilson> +In-Reply-To: <02082705410501.08779@wilson> +MIME-Version: 1.0 +Message-Id: <02082711315303.08779@wilson> +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g7R9VxJ07183 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 27 Aug 2002 11:31:53 +0200 +Date: Tue, 27 Aug 2002 11:31:53 +0200 + +Halloechen! + +On Dienstag, 27. August 2002 05:41 schrieben Sie: +> [Question about require tag] + +Oops, sorry. Now I found out that there is a noewsgroup ... +:-) + +Tschoe, +Torsten. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01034.6a298abdc5efe614a638c2b55582cdc6 b/Ch3/datasets/spam/easy_ham/01034.6a298abdc5efe614a638c2b55582cdc6 new file mode 100644 index 000000000..d613be09e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01034.6a298abdc5efe614a638c2b55582cdc6 @@ -0,0 +1,82 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 10:57:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AF12F43F99 + for ; Thu, 29 Aug 2002 05:57:56 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 10:57:56 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SKqGZ09818 for + ; Wed, 28 Aug 2002 21:52:16 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7SKo3J29063; Wed, 28 Aug 2002 22:50:03 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7SKmvJ24463 for + ; Wed, 28 Aug 2002 22:48:57 +0200 +Received: from cs78128057.pp.htv.fi ([62.78.128.57]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g7SKmv627266; Wed, 28 Aug 2002 23:48:57 + +0300 (EETDST) +Subject: Re: ALSA (almost) made easy +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: rpm-zzzlist@freshrpms.net +Cc: valhalla-list@spamassassin.taint.org +In-Reply-To: <20020828190006.2200a154.matthias@rpmforge.net> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) +Message-Id: <1030567737.10901.9.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g7SKmvJ24463 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 28 Aug 2002 23:48:57 +0300 +Date: 28 Aug 2002 23:48:57 +0300 + +> The devices are there now, thank Gordon for reporting the problem (and as I +> said, you were the only one). Any further comments are very welcome! +> +> Download : http://ftp.freshrpms.net/pub/freshrpms/testing/alsa/ +> New spec : http://freshrpms.net/builds/alsa-driver/alsa-driver.spec + +Ahh, wonderful! Just tried out these and *finally* got sound working +with my Abit TH7II-RAID's integrated audio. I've been pulling hair +together with the (helpful) OpenSound people for quite some time now, +but we've failed to get sound to work, either with the drivers included +in kernel, or the commercial OSS. + +Thanks a *lot* ! The RPMs seem to be fine, they worked for me out of +the box (on vanilla Valhalla w/latest errata). + +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01035.1210cd8593aa0ed6eb21b86b9c97cc46 b/Ch3/datasets/spam/easy_ham/01035.1210cd8593aa0ed6eb21b86b9c97cc46 new file mode 100644 index 000000000..985f22d16 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01035.1210cd8593aa0ed6eb21b86b9c97cc46 @@ -0,0 +1,90 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 10:58:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7DA9E43F9B + for ; Thu, 29 Aug 2002 05:57:58 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 10:57:58 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SL8UZ10341 for + ; Wed, 28 Aug 2002 22:08:30 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7SL32J26091; Wed, 28 Aug 2002 23:03:02 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7SL2hJ26035 for + ; Wed, 28 Aug 2002 23:02:43 +0200 +Received: from cs78128057.pp.htv.fi ([62.78.128.57]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g7SL2i600486; Thu, 29 Aug 2002 00:02:44 + +0300 (EETDST) +Subject: Re: ALSA (almost) made easy +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: rpm-zzzlist@freshrpms.net +Cc: valhalla-list@spamassassin.taint.org +In-Reply-To: <1030567737.10901.9.camel@bobcat.ods.org> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030567737.10901.9.camel@bobcat.ods.org> +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) +Message-Id: <1030568564.10902.22.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g7SL2hJ26035 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 29 Aug 2002 00:02:43 +0300 +Date: 29 Aug 2002 00:02:43 +0300 + +On Wed, 2002-08-28 at 23:48, Ville Skyttä wrote: + +> > The devices are there now, thank Gordon for reporting the problem (and as I +> > said, you were the only one). Any further comments are very welcome! +> > +> > Download : http://ftp.freshrpms.net/pub/freshrpms/testing/alsa/ +> > New spec : http://freshrpms.net/builds/alsa-driver/alsa-driver.spec +> +> Ahh, wonderful! Just tried out these and *finally* got sound working +> with my Abit TH7II-RAID's integrated audio. I've been pulling hair +> together with the (helpful) OpenSound people for quite some time now, +> but we've failed to get sound to work, either with the drivers included +> in kernel, or the commercial OSS. +> +> Thanks a *lot* ! The RPMs seem to be fine, they worked for me out of +> the box (on vanilla Valhalla w/latest errata). + +...except that I don't see an init script in the RPMs, a sample one +designed for RH is supposed to be in "utils/alsasound". Could you take +a look if it can be included? + +Cheers, +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01036.e008967440cf8ad7931ff05a1a845084 b/Ch3/datasets/spam/easy_ham/01036.e008967440cf8ad7931ff05a1a845084 new file mode 100644 index 000000000..3791e72a4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01036.e008967440cf8ad7931ff05a1a845084 @@ -0,0 +1,96 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 10:58:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9033143F99 + for ; Thu, 29 Aug 2002 05:58:11 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 10:58:11 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SM9oZ12169 for + ; Wed, 28 Aug 2002 23:09:50 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7SM81J23338; Thu, 29 Aug 2002 00:08:01 + +0200 +Received: from unknown (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7SM6XJ23146 for ; Thu, 29 Aug 2002 00:06:33 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: ALSA (almost) made easy +Message-Id: <20020829000606.5906404a.matthias@egwn.net> +In-Reply-To: <1030568564.10902.22.camel@bobcat.ods.org> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030567737.10901.9.camel@bobcat.ods.org> + <1030568564.10902.22.camel@bobcat.ods.org> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.1claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 00:06:06 +0200 +Date: Thu, 29 Aug 2002 00:06:06 +0200 + +Once upon a time, Ville wrote : + +> > Thanks a *lot* ! The RPMs seem to be fine, they worked for me out of +> > the box (on vanilla Valhalla w/latest errata). +> +> ...except that I don't see an init script in the RPMs, a sample one +> designed for RH is supposed to be in "utils/alsasound". Could you take +> a look if it can be included? + +It doesn't need to as Red Hat Linux already sets correct permissions on all +ALSA audio devices for locally logged in users (through the console.perms +file) and the modules.conf files takes care of loading the right modules on +demand. Also, aumix and the scripts that come with Red Hat Linux still work +for controlling the volume, so it's still saved and restored when the +computer is halted, even using ALSA. + +I'm glad you got your card working with these! I'm now wondering if I won't +maybe buy an amplifier that supports Dolby Digial decoding (my current one +"only" does PRo Logic) since I've read that ALSA supports the S/PDIF +optical output of the sound chip of my Shuttle! +(http://freshrpms.net/shuttle/) + +>>From what I can tell after only 2 days using it : ALSA rocks, especially +since having a full OSS compatibility results that it breaks nothing at +all! :-) + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01037.6b42b5f3d3d9e6293bf24af66b250655 b/Ch3/datasets/spam/easy_ham/01037.6b42b5f3d3d9e6293bf24af66b250655 new file mode 100644 index 000000000..0283de358 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01037.6b42b5f3d3d9e6293bf24af66b250655 @@ -0,0 +1,89 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 10:58:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E43ED44157 + for ; Thu, 29 Aug 2002 05:58:14 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 10:58:14 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SMC3Z12215 for + ; Wed, 28 Aug 2002 23:12:03 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7SMB2J08733; Thu, 29 Aug 2002 00:11:02 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7SMA8J29427 for + ; Thu, 29 Aug 2002 00:10:08 +0200 +Received: from cs78128057.pp.htv.fi ([62.78.128.57]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g7SMA8612924 for ; + Thu, 29 Aug 2002 01:10:08 +0300 (EETDST) +Subject: Re: ALSA (almost) made easy +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <1030568564.10902.22.camel@bobcat.ods.org> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030567737.10901.9.camel@bobcat.ods.org> + <1030568564.10902.22.camel@bobcat.ods.org> +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) +Message-Id: <1030572601.1643.26.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g7SMA8J29427 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 29 Aug 2002 01:10:01 +0300 +Date: 29 Aug 2002 01:10:01 +0300 + +On Thu, 2002-08-29 at 00:02, Ville Skyttä wrote: + +> > Thanks a *lot* ! The RPMs seem to be fine, they worked for me out of +> > the box (on vanilla Valhalla w/latest errata). +> +> ...except that I don't see an init script in the RPMs, a sample one +> designed for RH is supposed to be in "utils/alsasound". Could you take +> a look if it can be included? + +Ok, some more nits: alsa-xmms doesn't work if I don't have +alsa-lib-devel installed, but xmms dies on startup telling me: + + Cannot load alsa library: libasound.so: cannot open shared object + file: No such file or directory + +libasound.so is part of alsa-lib-devel... if I install it, the ALSA XMMS +output plugins works fine. + +I can't install the xine stuff, because xine-libs needs libGLcore.so.1, +which I can't find anywhere (NVidia stuff? I have Radeon 7500...) + +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01038.2c9d48308237d4d7ad50bb6864602ab4 b/Ch3/datasets/spam/easy_ham/01038.2c9d48308237d4d7ad50bb6864602ab4 new file mode 100644 index 000000000..d38661858 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01038.2c9d48308237d4d7ad50bb6864602ab4 @@ -0,0 +1,91 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 10:58:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8F7F544155 + for ; Thu, 29 Aug 2002 05:58:16 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 10:58:16 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SMIMZ12443 for + ; Wed, 28 Aug 2002 23:18:23 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7SMG2J30252; Thu, 29 Aug 2002 00:16:02 + +0200 +Received: from unknown (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7SMFKJ21832 for ; Thu, 29 Aug 2002 00:15:20 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: ALSA (almost) made easy +Message-Id: <20020829001503.7aab8ccf.matthias@egwn.net> +In-Reply-To: <1030572601.1643.26.camel@bobcat.ods.org> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030567737.10901.9.camel@bobcat.ods.org> + <1030568564.10902.22.camel@bobcat.ods.org> + <1030572601.1643.26.camel@bobcat.ods.org> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.1claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 00:15:03 +0200 +Date: Thu, 29 Aug 2002 00:15:03 +0200 + +Once upon a time, Ville wrote : + +> Ok, some more nits: alsa-xmms doesn't work if I don't have +> alsa-lib-devel installed, but xmms dies on startup telling me: +> +> Cannot load alsa library: libasound.so: cannot open shared object +> file: No such file or directory +> +> libasound.so is part of alsa-lib-devel... if I install it, the ALSA XMMS +> output plugins works fine. + +OK, will fix :-) + +> I can't install the xine stuff, because xine-libs needs libGLcore.so.1, +> which I can't find anywhere (NVidia stuff? I have Radeon 7500...) + +Argh, got bitten again! :-( +Will fix too... + +Thanks a lot for pointing these out! +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01039.2b799ff9acbf233a7842eab00fcb848f b/Ch3/datasets/spam/easy_ham/01039.2b799ff9acbf233a7842eab00fcb848f new file mode 100644 index 000000000..0778397a2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01039.2b799ff9acbf233a7842eab00fcb848f @@ -0,0 +1,96 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 10:58:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5BEE744158 + for ; Thu, 29 Aug 2002 05:58:18 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 10:58:18 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SMf3Z13159 for + ; Wed, 28 Aug 2002 23:41:03 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7SMd2J27219; Thu, 29 Aug 2002 00:39:02 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7SMchJ27162 for + ; Thu, 29 Aug 2002 00:38:43 +0200 +Received: from cs78128057.pp.htv.fi ([62.78.128.57]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g7SMci617627 for ; + Thu, 29 Aug 2002 01:38:44 +0300 (EETDST) +Subject: Re: ALSA (almost) made easy +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20020829000606.5906404a.matthias@egwn.net> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030567737.10901.9.camel@bobcat.ods.org> + <1030568564.10902.22.camel@bobcat.ods.org> + <20020829000606.5906404a.matthias@egwn.net> +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) +Message-Id: <1030574318.1651.30.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g7SMchJ27162 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 29 Aug 2002 01:38:38 +0300 +Date: 29 Aug 2002 01:38:38 +0300 + +On Thu, 2002-08-29 at 01:06, Matthias Saou wrote: + +> > > Thanks a *lot* ! The RPMs seem to be fine, they worked for me out of +> > > the box (on vanilla Valhalla w/latest errata). +> > +> > ...except that I don't see an init script in the RPMs, a sample one +> > designed for RH is supposed to be in "utils/alsasound". Could you take +> > a look if it can be included? +> +> It doesn't need to as Red Hat Linux already sets correct permissions on all +> ALSA audio devices for locally logged in users (through the console.perms +> file) and the modules.conf files takes care of loading the right modules on +> demand. Also, aumix and the scripts that come with Red Hat Linux still work +> for controlling the volume, so it's still saved and restored when the +> computer is halted, even using ALSA. + +Ah! The mixer stuff was what made me look for an init script in the +first place, I didn't bother to check whether the existing stuff would +have worked with that. Will try that out, you can assume silence == +success :) + +> >From what I can tell after only 2 days using it : ALSA rocks, especially +> since having a full OSS compatibility results that it breaks nothing at +> all! :-) + +Agreed. Though with only 2 hours experience... + +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01040.07f0f1f73a3c4408b488be99114a32c0 b/Ch3/datasets/spam/easy_ham/01040.07f0f1f73a3c4408b488be99114a32c0 new file mode 100644 index 000000000..ed8fae1b5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01040.07f0f1f73a3c4408b488be99114a32c0 @@ -0,0 +1,100 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 10:58:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1E1654415A + for ; Thu, 29 Aug 2002 05:58:20 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 10:58:20 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SMs3Z13555 for + ; Wed, 28 Aug 2002 23:54:03 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7SMq2J28816; Thu, 29 Aug 2002 00:52:02 + +0200 +Received: from unknown (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7SMorJ22054 for ; Thu, 29 Aug 2002 00:50:53 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: ALSA (almost) made easy +Message-Id: <20020829005025.160073af.matthias@egwn.net> +In-Reply-To: <1030574318.1651.30.camel@bobcat.ods.org> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030567737.10901.9.camel@bobcat.ods.org> + <1030568564.10902.22.camel@bobcat.ods.org> + <20020829000606.5906404a.matthias@egwn.net> + <1030574318.1651.30.camel@bobcat.ods.org> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.1claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 00:50:25 +0200 +Date: Thu, 29 Aug 2002 00:50:25 +0200 + +Once upon a time, Ville wrote : + +> Ah! The mixer stuff was what made me look for an init script in the +> first place, I didn't bother to check whether the existing stuff would +> have worked with that. Will try that out, you can assume silence == +> success :) + +Well, from what I've tried, both the main and the PCM (at least) volume +levels can be controlled either by "alsamixer" or the good old "aumix". + +> > >From what I can tell after only 2 days using it : ALSA rocks, +> > >especially +> > since having a full OSS compatibility results that it breaks nothing at +> > all! :-) +> +> Agreed. Though with only 2 hours experience... + +I guess/hope some other people from the list will try it out ;-) + +Both problems you reported (libasound.so and wrong xine dependency) are now +fixed in the current packages. + +Oh, it's maybe also worth pointing out : I've implemented at last sorting +by both last change date and alphabetically for my "build list" in the php +code : http://freshrpms.net/builds/ + +And yes, I accept patches/comments/suggestions about all those spec files! + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01041.12f5732227f6d383a0e32355efbf0f59 b/Ch3/datasets/spam/easy_ham/01041.12f5732227f6d383a0e32355efbf0f59 new file mode 100644 index 000000000..1f6187c59 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01041.12f5732227f6d383a0e32355efbf0f59 @@ -0,0 +1,114 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 10:59:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1CC0643F9B + for ; Thu, 29 Aug 2002 05:59:26 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 10:59:26 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SNDjZ14734 for + ; Thu, 29 Aug 2002 00:13:45 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7SNB2J15836; Thu, 29 Aug 2002 01:11:02 + +0200 +Received: from imf03bis.bellsouth.net (mail203.mail.bellsouth.net + [205.152.58.143]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7SN9jJ31163 for ; Thu, 29 Aug 2002 01:09:45 +0200 +Received: from adsl-157-19-245.msy.bellsouth.net ([66.157.19.245]) by + imf03bis.bellsouth.net (InterMail vM.5.01.04.19 + 201-253-122-122-119-20020516) with ESMTP id + <20020828231115.SWA795.imf03bis.bellsouth.net@adsl-157-19-245.msy.bellsouth.net> + for ; Wed, 28 Aug 2002 19:11:15 -0400 +Subject: Re: ALSA (almost) made easy +From: Lance +To: RPM-List +In-Reply-To: <20020828190006.2200a154.matthias@rpmforge.net> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-6) +Message-Id: <1030576177.6448.1.camel@localhost.localdomain> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 28 Aug 2002 18:09:37 -0500 +Date: 28 Aug 2002 18:09:37 -0500 + +Thanks for this, I'm going to give them another try. One question: How +do I switch between digital out and analog out with ALSA? With +emu10k1-tools it's easy enough (emu-config -d for digital, emu-config -a +for analog) Is there a similar method with ALSA? + +Lance + +On Wed, 2002-08-28 at 12:00, Matthias Saou wrote: +> Followup to the story : +> +> I've now made a sub-package of alsa-driver called "alsa-kernel" which +> contains only the kernel modules, and alsa-driver contains everything else +> from the original package (device entries, include files and docs). +> +> This should allow installation of a single "alsa-driver" package and +> multiple "alsa-kernel" if you have more than one kernel installed. Right +> now the dependencies make it mandatory to have kernels installed through +> rpm... people who install from source can still install the ALSA modules +> from the source though ;-) +> +> The devices are there now, thank Gordon for reporting the problem (and as I +> said, you were the only one). Any further comments are very welcome! +> +> Download : http://ftp.freshrpms.net/pub/freshrpms/testing/alsa/ +> New spec : http://freshrpms.net/builds/alsa-driver/alsa-driver.spec +> +> If you aren't running kernel-2.4.18-10 for i686, simply --rebuild the +> alsa-driver source rpm and you'll get a package for your running kernel. +> +> Matthias +> +> -- +> Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +> Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10 +> Load : 0.08 0.42 0.84, AC on-line, battery charging: 100% (6:36) +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list +-- +: +####[ Linux One Stanza Tip (LOST) ]########################### + +Sub : Finding out files larger than given size LOST #324 + +To find out all files in a dir over a given size, try: +find /path/to/dir_of_file -type f -size +Nk +[Where N is a number like 1024 for 1mb, and multiples thereof] + +####[Discussions on LIH : 04 Jul 2002]######################## +: + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01042.5379f7151fef6cce3e2638aee3b193fa b/Ch3/datasets/spam/easy_ham/01042.5379f7151fef6cce3e2638aee3b193fa new file mode 100644 index 000000000..1ba97bb5d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01042.5379f7151fef6cce3e2638aee3b193fa @@ -0,0 +1,97 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 10:59:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5A04343F99 + for ; Thu, 29 Aug 2002 05:59:35 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 10:59:35 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SNEKZ14749 for + ; Thu, 29 Aug 2002 00:14:20 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7SN93J30796; Thu, 29 Aug 2002 01:09:03 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7SN83J30677 for + ; Thu, 29 Aug 2002 01:08:03 +0200 +Received: from cs78128057.pp.htv.fi ([62.78.128.57]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g7SN84622061 for ; + Thu, 29 Aug 2002 02:08:04 +0300 (EETDST) +Subject: Re: ALSA (almost) made easy +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20020829005025.160073af.matthias@egwn.net> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030567737.10901.9.camel@bobcat.ods.org> + <1030568564.10902.22.camel@bobcat.ods.org> + <20020829000606.5906404a.matthias@egwn.net> + <1030574318.1651.30.camel@bobcat.ods.org> + <20020829005025.160073af.matthias@egwn.net> +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) +Message-Id: <1030576078.1643.61.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g7SN83J30677 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 29 Aug 2002 02:07:58 +0300 +Date: 29 Aug 2002 02:07:58 +0300 + +On Thu, 2002-08-29 at 01:50, Matthias Saou wrote: + +> > Ah! The mixer stuff was what made me look for an init script in the +> > first place, I didn't bother to check whether the existing stuff would +> > have worked with that. Will try that out, you can assume silence == +> > success :) +> +> Well, from what I've tried, both the main and the PCM (at least) volume +> levels can be controlled either by "alsamixer" or the good old "aumix". + +Cool, I'll try it out as well as the new RPMs tomorrow. + +> > > >From what I can tell after only 2 days using it : ALSA rocks, +> > > >especially +> > > since having a full OSS compatibility results that it breaks nothing at +> > > all! :-) +> > +> > Agreed. Though with only 2 hours experience... +> +> I guess/hope some other people from the list will try it out ;-) +> +> Both problems you reported (libasound.so and wrong xine dependency) are now +> fixed in the current packages. + +Thanks, that was quick! + +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01043.e8e4f25ec1bd22dc927732b46860df36 b/Ch3/datasets/spam/easy_ham/01043.e8e4f25ec1bd22dc927732b46860df36 new file mode 100644 index 000000000..8288f1311 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01043.e8e4f25ec1bd22dc927732b46860df36 @@ -0,0 +1,140 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 11:01:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6AE6043F99 + for ; Thu, 29 Aug 2002 06:01:04 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:01:04 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7T0IgZ20518 for + ; Thu, 29 Aug 2002 01:18:42 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7T0G6J12978; Thu, 29 Aug 2002 02:16:06 + +0200 +Received: from imf24bis.bellsouth.net (mail124.mail.bellsouth.net + [205.152.58.84]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7T0FHJ03427 for ; Thu, 29 Aug 2002 02:15:17 +0200 +Received: from adsl-157-16-61.msy.bellsouth.net ([66.157.16.61]) by + imf24bis.bellsouth.net (InterMail vM.5.01.04.19 + 201-253-122-122-119-20020516) with ESMTP id + <20020829001508.JZK24863.imf24bis.bellsouth.net@adsl-157-16-61.msy.bellsouth.net> + for ; Wed, 28 Aug 2002 20:15:08 -0400 +Subject: Re: ALSA (almost) made easy +From: Lance +To: RPM-List +In-Reply-To: <1030576177.6448.1.camel@localhost.localdomain> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030576177.6448.1.camel@localhost.localdomain> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-6) +Message-Id: <1030580111.1388.2.camel@localhost.localdomain> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 28 Aug 2002 19:15:10 -0500 +Date: 28 Aug 2002 19:15:10 -0500 + +Ok, I got ALSA installed and there is no static inbetween mp3s like +before which is great! My setup is digital 4.1 but sound is only coming +from front 2 speakers and subwoofer, rear speakers there is no sound. +Also alsamixer or aumix are unresponsive as well. + +Lance + +On Wed, 2002-08-28 at 18:09, Lance wrote: +> Thanks for this, I'm going to give them another try. One question: How +> do I switch between digital out and analog out with ALSA? With +> emu10k1-tools it's easy enough (emu-config -d for digital, emu-config -a +> for analog) Is there a similar method with ALSA? +> +> Lance +> +> On Wed, 2002-08-28 at 12:00, Matthias Saou wrote: +> > Followup to the story : +> > +> > I've now made a sub-package of alsa-driver called "alsa-kernel" which +> > contains only the kernel modules, and alsa-driver contains everything else +> > from the original package (device entries, include files and docs). +> > +> > This should allow installation of a single "alsa-driver" package and +> > multiple "alsa-kernel" if you have more than one kernel installed. Right +> > now the dependencies make it mandatory to have kernels installed through +> > rpm... people who install from source can still install the ALSA modules +> > from the source though ;-) +> > +> > The devices are there now, thank Gordon for reporting the problem (and as I +> > said, you were the only one). Any further comments are very welcome! +> > +> > Download : http://ftp.freshrpms.net/pub/freshrpms/testing/alsa/ +> > New spec : http://freshrpms.net/builds/alsa-driver/alsa-driver.spec +> > +> > If you aren't running kernel-2.4.18-10 for i686, simply --rebuild the +> > alsa-driver source rpm and you'll get a package for your running kernel. +> > +> > Matthias +> > +> > -- +> > Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +> > Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10 +> > Load : 0.08 0.42 0.84, AC on-line, battery charging: 100% (6:36) +> > +> > _______________________________________________ +> > RPM-List mailing list +> > http://lists.freshrpms.net/mailman/listinfo/rpm-list +> -- +> : +> ####[ Linux One Stanza Tip (LOST) ]########################### +> +> Sub : Finding out files larger than given size LOST #324 +> +> To find out all files in a dir over a given size, try: +> find /path/to/dir_of_file -type f -size +Nk +> [Where N is a number like 1024 for 1mb, and multiples thereof] +> +> ####[Discussions on LIH : 04 Jul 2002]######################## +> : +> +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list +-- +: +####[ Linux One Stanza Tip (LOST) ]########################### + +Sub : Finding out files larger than given size LOST #324 + +To find out all files in a dir over a given size, try: +find /path/to/dir_of_file -type f -size +Nk +[Where N is a number like 1024 for 1mb, and multiples thereof] + +####[Discussions on LIH : 04 Jul 2002]######################## +: + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01044.33acf4acbd1ac5f96486771baeda20c7 b/Ch3/datasets/spam/easy_ham/01044.33acf4acbd1ac5f96486771baeda20c7 new file mode 100644 index 000000000..33489691f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01044.33acf4acbd1ac5f96486771baeda20c7 @@ -0,0 +1,83 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 11:01:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BFB2844156 + for ; Thu, 29 Aug 2002 06:01:24 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:01:24 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7T4XQZ29855 for + ; Thu, 29 Aug 2002 05:33:26 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7T4T2J30066; Thu, 29 Aug 2002 06:29:02 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7T4STJ29980 for ; Thu, 29 Aug 2002 06:28:29 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: ALSA (almost) made easy +Message-Id: <20020829062638.53279644.matthias@egwn.net> +In-Reply-To: <1030580111.1388.2.camel@localhost.localdomain> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030576177.6448.1.camel@localhost.localdomain> + <1030580111.1388.2.camel@localhost.localdomain> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.1claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 06:26:38 +0200 +Date: Thu, 29 Aug 2002 06:26:38 +0200 + +Once upon a time, Lance wrote : + +> Ok, I got ALSA installed and there is no static inbetween mp3s like +> before which is great! My setup is digital 4.1 but sound is only coming +> from front 2 speakers and subwoofer, rear speakers there is no sound. +> Also alsamixer or aumix are unresponsive as well. + +Maybe you could find more info or tips on the ALSA page for your card? +Also, you could try "alsactl store", editing /etc/asound.state" by hand +(for me it contains data similar to what I can control with "alsamixer") +then run "alsactl restore" and see if you're able to change what you want +that way. + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01045.5f6b92624699ddf883fc56e9b158c031 b/Ch3/datasets/spam/easy_ham/01045.5f6b92624699ddf883fc56e9b158c031 new file mode 100644 index 000000000..dd7c9b211 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01045.5f6b92624699ddf883fc56e9b158c031 @@ -0,0 +1,218 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 11:03:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 87D8943F99 + for ; Thu, 29 Aug 2002 06:03:34 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:03:34 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7T9uqZ07335 for + ; Thu, 29 Aug 2002 10:56:52 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7T9s2J15334; Thu, 29 Aug 2002 11:54:02 + +0200 +Received: from smtp-send.myrealbox.com (smtp-send.myrealbox.com + [192.108.102.143]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7T9rkJ15284 for ; Thu, 29 Aug 2002 11:53:46 +0200 +Received: from myrealbox.com danielpavel@smtp-send.myrealbox.com + [194.102.210.216] by smtp-send.myrealbox.com with NetMail SMTP Agent + $Revision: 3.11 $ on Novell NetWare via secured & encrypted transport + (TLS); Thu, 29 Aug 2002 03:53:42 -0600 +Message-Id: <3D6DED60.7070107@myrealbox.com> +From: Daniel Pavel +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) + Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: ALSA (almost) made easy +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030567737.10901.9.camel@bobcat.ods.org> + <1030568564.10902.22.camel@bobcat.ods.org> + <20020829000606.5906404a.matthias@egwn.net> + <1030574318.1651.30.camel@bobcat.ods.org> + <20020829005025.160073af.matthias@egwn.net> +Content-Type: multipart/mixed; boundary="------------090303060407010605030507" +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 12:46:08 +0300 +Date: Thu, 29 Aug 2002 12:46:08 +0300 + +This is a multi-part message in MIME format. +--------------090303060407010605030507 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit + +Matthias Saou wrote: + > I guess/hope some other people from the list will try it out ;-) + > + > Both problems you reported (libasound.so and wrong xine dependency) are now + > fixed in the current packages. + > + > Oh, it's maybe also worth pointing out : I've implemented at last sorting + > by both last change date and alphabetically for my "build list" in the php + > code : http://freshrpms.net/builds/ + > + > And yes, I accept patches/comments/suggestions about all those spec files! + +Sure thing :) + +I've added to the spec some flags to remove OSS and ISA-PNP support at +build time if one wishes to, so is's possible to do a + + rpmbuild --recompile --without oss --without isapnp + +(I haven't included OSS in my 2.4.19, because VT82433 on my motherboard +is not supported :( yet, and I'm too lazy to recompile the kernel :)). + +Also, having the kernel compiled by me, I have no kernel-source package +installed. I've added a flag "kernsrc", that also can be used +--without, to remove the dependency for kernel-source at build time. It +would be nice to check the correct kernel include files actually exist +(/lib/modules/`uname -r`/build/include/linux/*.h), though; however, I'm +a beginner in RPM building -- is it possible to BuildRequire for a file +not provided by a package at all? I've googled a bit, and found no way +to do that. + +I was also considering adding some sort of flag for the --with-cards +option in alsa's ./configure, but don't know how to do that. Only found +out about --without from your first alsa-driver.spec, and existing RPM docs +don't help much. + + +Oh, and one more thing :). At first I've installed the first version of +alsa-driver for 2.4.18-10, although I don't have that kernel, to supply +the dependency for the rest of the alsa rpm's, and compiled the modules +from source. It created the /dev files and all. + +Then wanted to make my own rpm for 2.4.19, so now I'm trying to rpmbuild +the alsa-kernel package. Removed all alsa rpms, and tried my spec: + +rpmbuild --ba alsa-driver.spec.mine --without oss --without isapnp +--without kernsrc + +But I get this: + +==[long successful compile snipped]===================================== +warning: File listed twice: /dev/adsp +warning: File listed twice: /dev/amidi +Finding Provides: /usr/lib/rpm/find-provides +Finding Requires: /usr/lib/rpm/find-requires +PreReq: /bin/sh /bin/sh rpmlib(PayloadFilesHavePrefix) <= 4.0-1 +rpmlib(CompressedFileNames) <= 3.0.4-1 +Requires(interp): /bin/sh /bin/sh +Requires(rpmlib): rpmlib(PayloadFilesHavePrefix) <= 4.0-1 +rpmlib(CompressedFileNames) <= 3.0.4-1 +Requires(post): /bin/sh +Requires(postun): /bin/sh +Requires: alsa-kernel = 0.9.0rc3 /sbin/depmod +Processing files: alsa-kernel-0.9.0rc3-fr4_2.4.19 +Finding Provides: /usr/lib/rpm/find-provides +Finding Requires: /usr/lib/rpm/find-requires +PreReq: rpmlib(PayloadFilesHavePrefix) <= 4.0-1 +rpmlib(CompressedFileNames) <= 3.0.4-1 +Requires(rpmlib): rpmlib(PayloadFilesHavePrefix) <= 4.0-1 +rpmlib(CompressedFileNames) <= 3.0.4-1 +Requires: alsa-driver = 0.9.0rc3 kernel = 2.4.19 +Checking for unpackaged file(s): /usr/lib/rpm/check-files +/var/tmp/alsa-driver-0.9.0rc3-root +error: Installed (but unpackaged) file(s) found: + /etc/makedev.d/00macros + /etc/rc.d/init.d/alsasound + + +RPM build errors: + File listed twice: /dev/adsp + File listed twice: /dev/amidi + Installed (but unpackaged) file(s) found: + /etc/makedev.d/00macros + /etc/rc.d/init.d/alsasound +======================================================================== + +Like I said, I'm a beginned with RPM building, so I don't understand +much of what's going on here. The 00macros file is from the MAKEDEV +rpm, and alsasound was supposed to be installed by alsa-driver, I think. + It is not in the filesystem, anyway. + +I've looked in /var/tmp/alsa-driver-0.9.0rc3-root, they are there in +etc. For 00macros I think the part that does it is this line +in alsa-driver.spec: + +cp -a %{_sysconfdir}/makedev.d/00macros /{buildroot}%{_sysconfdir}/makedev.d/ + +And alsasound is installed by %{BUILDIDR}/Makefile. + + +Oh, and I think I've forgot to mention, I'm running beta-null :). + + > Matthias + +-silent + +-- +... And on the seventh day, God was arrested for tresspassing. + + +--------------090303060407010605030507 +Content-Type: text/plain; + name="alsa-driver.spec.patch" +Content-Transfer-Encoding: 7bit +Content-Disposition: inline; + filename="alsa-driver.spec.patch" + +6a7,17 +> +> %define withoss yes +> %{?_without_oss:%define withoss no} +> +> %define withisapnp auto +> %{?_without_isapnp:%define withisapnp no} +> +> %define kernsrc 1 +> %{?_without_kernsrc:%define kernsrc 0} +> +> +20a32 +> %if %{kernsrc} +21a34,36 +> %else +> BuildRequires: MAKEDEV +> %endif +64c79 +< %configure +--- +> %configure --with-oss=%{withoss} --with-isapnp=%{withisapnp} +119a135,137 +> * Thu Aug 29 2002 Daniel Pavel +> - Added OSS and ISA-PNP build-time flags. +> - Added kernel-source requirement flag. + + +--------------090303060407010605030507-- + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01046.f0371dba9ae76787d5541e73a09099f9 b/Ch3/datasets/spam/easy_ham/01046.f0371dba9ae76787d5541e73a09099f9 new file mode 100644 index 000000000..304cac35c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01046.f0371dba9ae76787d5541e73a09099f9 @@ -0,0 +1,152 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 11:37:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A351843F99 + for ; Thu, 29 Aug 2002 06:37:44 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:37:44 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TAV8Z08321 for + ; Thu, 29 Aug 2002 11:31:08 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7TAS2J09618; Thu, 29 Aug 2002 12:28:02 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7TARYJ09551 for + ; Thu, 29 Aug 2002 12:27:35 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: ALSA (almost) made easy +Message-Id: <20020829120926.0e6f691e.matthias@egwn.net> +In-Reply-To: <3D6DED60.7070107@myrealbox.com> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030567737.10901.9.camel@bobcat.ods.org> + <1030568564.10902.22.camel@bobcat.ods.org> + <20020829000606.5906404a.matthias@egwn.net> + <1030574318.1651.30.camel@bobcat.ods.org> + <20020829005025.160073af.matthias@egwn.net> + <3D6DED60.7070107@myrealbox.com> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.1claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 12:09:26 +0200 +Date: Thu, 29 Aug 2002 12:09:26 +0200 + +Once upon a time, Daniel wrote : + +> > And yes, I accept patches/comments/suggestions about all those spec +> > files! +> +> Sure thing :) + +Cool :-) + +> I've added to the spec some flags to remove OSS and ISA-PNP support at +> build time if one wishes to, so is's possible to do a +> +> rpmbuild --recompile --without oss --without isapnp + +OK, I'll add this. + +> Also, having the kernel compiled by me, I have no kernel-source package +> installed. I've added a flag "kernsrc", that also can be used +> --without, to remove the dependency for kernel-source at build time. It +> would be nice to check the correct kernel include files actually exist +> (/lib/modules/`uname -r`/build/include/linux/*.h), though; however, I'm +> a beginner in RPM building -- is it possible to BuildRequire for a file +> not provided by a package at all? I've googled a bit, and found no way +> to do that. + +Requiring a file that isn't part of an rpm is not possible, no, except +maybe by stopping the build process if it isn't found... but that's errr... +ugly! +And I really think that for people who installed a kernel from sources, the +easiest is to install the alsa kernel drivers from source too... + +> I was also considering adding some sort of flag for the --with-cards +> option in alsa's ./configure, but don't know how to do that. Only found +> out about --without from your first alsa-driver.spec, and existing RPM +> docs don't help much. + +This would be a tricky one since to use the "--with " feature of +rpmbuild, I think you'd need to add individual handling of each and every +card :-/ + +> Oh, and one more thing :). At first I've installed the first version of +> alsa-driver for 2.4.18-10, although I don't have that kernel, to supply +> the dependency for the rest of the alsa rpm's, and compiled the modules +> from source. It created the /dev files and all. + +That's what the "alsa-driver" is there for, create all the base files +excluding the kernel drivers. What I would suggest for dependency reasons +it to install an "alsa-kernel" for the original kernel (you've kept it, +right? ;-)) and install ALSA modules from source for custom kernels built +from source. + +> Then wanted to make my own rpm for 2.4.19, so now I'm trying to rpmbuild +> the alsa-kernel package. Removed all alsa rpms, and tried my spec: +> +> rpmbuild --ba alsa-driver.spec.mine --without oss --without isapnp +> --without kernsrc +> +> But I get this: +> +> ==[long successful compile snipped]===================================== +> RPM build errors: +> File listed twice: /dev/adsp +> File listed twice: /dev/amidi +> Installed (but unpackaged) file(s) found: +> /etc/makedev.d/00macros +> /etc/rc.d/init.d/alsasound +> ======================================================================== +> +> Oh, and I think I've forgot to mention, I'm running beta-null :). + +Indeed : The rpm 4.1 snapshot in (null) has a few new features among which +having the build fail when files are present in the build root but not +listed in the %files section. I should remove them manually as part of the +build process... or maybe the new "%exclude /path/to/file" in the %files +section would do, but I don't know how older versions of rpm would handle +it. On my (null) build system, I've simply set the variable : +%_unpackaged_files_terminate_build 0 + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01047.16b625191a9dc2f7b4247daca75866a4 b/Ch3/datasets/spam/easy_ham/01047.16b625191a9dc2f7b4247daca75866a4 new file mode 100644 index 000000000..6f1b6eff7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01047.16b625191a9dc2f7b4247daca75866a4 @@ -0,0 +1,107 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 12:08:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2269443F9B + for ; Thu, 29 Aug 2002 07:08:26 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 12:08:26 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TBA6Z09559 for + ; Thu, 29 Aug 2002 12:10:06 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7TB53J17968; Thu, 29 Aug 2002 13:05:03 + +0200 +Received: from smtp-send.myrealbox.com (smtp-send.myrealbox.com + [192.108.102.143]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7TB40J03972 for ; Thu, 29 Aug 2002 13:04:00 +0200 +Received: from myrealbox.com danielpavel@smtp-send.myrealbox.com + [194.102.210.216] by smtp-send.myrealbox.com with NetMail SMTP Agent + $Revision: 3.11 $ on Novell NetWare via secured & encrypted transport + (TLS); Thu, 29 Aug 2002 05:03:58 -0600 +Message-Id: <3D6DFDED.3000304@myrealbox.com> +From: Daniel Pavel +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) + Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: ALSA (almost) made easy +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030567737.10901.9.camel@bobcat.ods.org> + <1030568564.10902.22.camel@bobcat.ods.org> + <20020829000606.5906404a.matthias@egwn.net> + <1030574318.1651.30.camel@bobcat.ods.org> + <20020829005025.160073af.matthias@egwn.net> + <3D6DED60.7070107@myrealbox.com> + <20020829120926.0e6f691e.matthias@egwn.net> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 13:56:45 +0300 +Date: Thu, 29 Aug 2002 13:56:45 +0300 + +Matthias Saou wrote: +> OK, I'll add this. + +Cool :) + +> Requiring a file that isn't part of an rpm is not possible, no, except +> maybe by stopping the build process if it isn't found... but that's errr... +> ugly! +> And I really think that for people who installed a kernel from sources, the +> easiest is to install the alsa kernel drivers from source too... + +Yes, it is... But then alsa-driver requires alsa-kernel, and I don't quite +like --nodeps... + +> This would be a tricky one since to use the "--with " feature of +> rpmbuild, I think you'd need to add individual handling of each and every +> card :-/ + +That's ok. I was only considering it for the sake of tweaking anyway, not +for some real-world need :). + +> That's what the "alsa-driver" is there for, create all the base files +> excluding the kernel drivers. What I would suggest for dependency reasons +> it to install an "alsa-kernel" for the original kernel (you've kept it, +> right? ;-)) and install ALSA modules from source for custom kernels built +> from source. + +Um... I keep 2.4.18-12.2 for emergency sitations (like I forget to include +keyboard support in kernel, dumb me), but alsa-kernel_2.4.18-10 does not +require kernel-2.4.18-10, so that's ok. + +> Matthias + +-silent + +-- +... And on the seventh day, God was arrested for tresspassing. + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01048.fb90c7a3003b8ea5117264b27842bf34 b/Ch3/datasets/spam/easy_ham/01048.fb90c7a3003b8ea5117264b27842bf34 new file mode 100644 index 000000000..b251285d6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01048.fb90c7a3003b8ea5117264b27842bf34 @@ -0,0 +1,84 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 13:31:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6C56844155 + for ; Thu, 29 Aug 2002 08:31:44 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 13:31:44 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TCSsZ12125 for + ; Thu, 29 Aug 2002 13:28:54 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7TCQ2J27786; Thu, 29 Aug 2002 14:26:02 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7TCOWJ11869 for + ; Thu, 29 Aug 2002 14:24:32 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: /home/dude +Message-Id: <20020829142252.7b20caab.matthias@egwn.net> +In-Reply-To: <20020828143235.A5779@bonzo.nirvana> +References: <20020828143235.A5779@bonzo.nirvana> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 14:22:52 +0200 +Date: Thu, 29 Aug 2002 14:22:52 +0200 + +Once upon a time, Axel wrote : + +> I am now relaxed again ;), and pass this info on. Probably Matthias Saou +> himself is "dude", and some package has hardwired a path in his build +> directory. It would be nice to find out which and fix it, but I am using +> too many of the freshrpm suite to narrow it down. + +Indeed, my usual login is "dude" (and has been since long before "The Big +Lebowsky" came out ;-)), and it seems the some programs wrongly hard code +my home directory when being compiled :-( +For instance : + +[dude@python dude]$ strings /usr/bin/gentoo | grep dude +/home/dude/ +[dude@python dude]$ strings /usr/bin/xine | grep dude +/home/dude/redhat/tmp/xine-root/usr/share/locale + +These should probably be considered bugs in the program's build process +(especially for xine, look at that!), I'll report them upstream if/when I +have some time. + +Thanks for noticing this! +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01049.91539978b8a1bbef1b7eef0bb123b07c b/Ch3/datasets/spam/easy_ham/01049.91539978b8a1bbef1b7eef0bb123b07c new file mode 100644 index 000000000..4a79e3721 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01049.91539978b8a1bbef1b7eef0bb123b07c @@ -0,0 +1,65 @@ +From rpm-list-admin@freshrpms.net Mon Sep 2 13:14:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 178CF44162 + for ; Mon, 2 Sep 2002 07:38:08 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:38:08 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g81BPqZ21787 for + ; Sun, 1 Sep 2002 12:25:53 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g81BN2J15735; Sun, 1 Sep 2002 13:23:02 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g81BMUJ13510; Sun, + 1 Sep 2002 13:22:30 +0200 +Received: from cs78128057.pp.htv.fi ([62.78.128.57]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g81BMZ624653; Sun, 1 Sep 2002 14:22:35 +0300 + (EETDST) +Subject: gkrellm 2 plugins? +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: rpm-zzzlist@freshrpms.net +Cc: matthias@egwn.net +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) +Message-Id: <1030879344.19404.2.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g81BMUJ13510 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 01 Sep 2002 14:22:23 +0300 +Date: 01 Sep 2002 14:22:23 +0300 + +Hi Matthias, + +I think I could do help you out with new plugins package for gkrellm 2. +Would you prefer to keep it as it is now, or package every plugin +separately? The latter would be probably easier to maintain. + +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01050.bb48dfade0a8f372957e8cb2be0476e9 b/Ch3/datasets/spam/easy_ham/01050.bb48dfade0a8f372957e8cb2be0476e9 new file mode 100644 index 000000000..64aa24618 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01050.bb48dfade0a8f372957e8cb2be0476e9 @@ -0,0 +1,166 @@ +From rpm-list-admin@freshrpms.net Tue Sep 3 14:20:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 90D3C16F45 + for ; Tue, 3 Sep 2002 14:19:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 14:19:11 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g837PZZ08887 for + ; Tue, 3 Sep 2002 08:25:35 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g837N3J21203; Tue, 3 Sep 2002 09:23:03 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g837M4J17841 + for ; Tue, 3 Sep 2002 09:22:08 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17m81B-0002vI-00; Tue, 03 Sep 2002 03:22:33 -0400 +X-Originating-Ip: [207.172.11.147] +From: "" Angles " Puglisi" +To: "Lance" +Cc: "FreshRPMs List" +Subject: Re: thanks for the gamix source rpms! [ALSA stuff] +Message-Id: <20020903.3BF.49876600@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 03 Sep 2002 07:21:19 +0000 +Date: Tue, 03 Sep 2002 07:21:19 +0000 + +I wish I could answer your question but my laptop does not have the digital stuff +hooked up :( so I so not know about it. I have an excellent ESS Maestro3 which OSS +supports pretty lame so I was forced to learn about ALSA. + +I have used these commands to explore ALSA and my chip: + +arecord -l (list devices) +arecord -L (list PCM decices) + +I get some output like this: + +> arecord -l +card 0: MAESTRO3 [ESS Allegro PCI], device 0: Allegro [Allegro] + Subdevices: 1/1 + Subdevice #0: subdevice #0 + +> arecord -L +PCM list: + (SNIP - craploads of output) + +I noticed that the output from this commands kind of maps to what the alsamixer or +gamix have. + +For what it is worth, here is what I have in modules.conf for my sound stuff: + +> ## ALSA portion +> alias char-major-116 snd +> ## OSS/Free portion +> alias char-major-14 soundcore +> +> ## ALSA portion +> alias snd-card-0 snd-maestro3 +> ## OSS/Free portion +> alias sound-slot-0 snd-card-0 +> +> ## OSS/Free portion - card #1 +> alias sound-service-0-0 snd-mixer-oss +> # BAD alias sound-service-0-1 snd-seq-oss +> alias sound-service-0-3 snd-pcm-oss +> # BAD alias sound-service-0-8 snd-seq-oss +> alias sound-service-0-12 snd-pcm-oss +> # +> ## ALSA Options (optional) +> options snd snd_major=116 snd_cards_limit=1 snd_device_mode=0666 +> options snd-maestro3 snd_index=0 snd_id=MAESTRO3 snd_amp_gpio=8 +> # +> ## OSS Options (optional) +> alias snd-card-1 off +> alias snd-card-2 off +> alias snd-card-3 off +> alias sound-slot-1 off +> alias sound-service-1-0 off +> +> ## Preserve Mixer Settings +> #post-install /usr/sbin/alsactl restore MAESTRO3 +> #pre-remove /usr/sbin/alsactl store MAESTRO3 +> post-install /usr/sbin/alsactl restore +> pre-remove /usr/sbin/alsactl store + +Hope that helps, good luck. + + +Lance (lance_tt@bellsouth.net) wrote*: +> +>Hello, +> +>Thanks for these rpms, I removed the binary built from source (.tar.gz) +>and installed your SRPM of gamix. One quick question, is there a way to +>switch between digital out and analog out with the ALSA driver and +>utilities, or, for that matter, with gamix? I know with the OSS drivers +>I was using it was as simple as 'emu-config -d for digital and +>emu-config -a for analog, with the emu-tools package for SBLive! I +>noticed there is SB Live Analog/Digital Output Jack in alsamixer but +>haven't figured out the key to use, if this is the right control in +>mixer. Also, I tried to expand gamix to display all possible controls +>but it defaults back to 'Wave' and 'Music' With LFE, Center, Surround +>and Playback under Wave (this is how I control output of front and rear +>speakers for digital out...'Surround' and 'Playback') Under 'Music' +>there are two controls but unresponsive. I have a tuner and cassette +>deck hooked up to an audio/video switch that goes into 'Line In' on the +>soundcard. Again, with the OSS drivers, it was as simple as emu-config +>-d and emu-config -a. Digital out for anything coming from the +>computer, analog out for the tuner and cassette deck. I don't know if +>this is necessary to switch inbetween to get 'Line In' to work or not, +>but an expansion of gamix would help, where I could see all the +>controls.... +> +>Any help would be greatly appreciated and thanks again for the gamix +>rpms. +> +>Kind Regards, +> +>Lance +>-- +>: +>####[ Linux One Stanza Tip (LOST) ]########################### +> +>Sub : Command line shortcuts (clear) LOST #310 +> +>Tired of typing in "clear" every time you want the screen to +>be cleared ? Press [Ctrl-L] ... This works for most shells, +>(except for ash, bsh and ksh) +> +>############################################# +>: +> + +-- +That's "angle" as in geometry. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01051.a739ef0dcd31c40cfeddcdcc017edd15 b/Ch3/datasets/spam/easy_ham/01051.a739ef0dcd31c40cfeddcdcc017edd15 new file mode 100644 index 000000000..8a751aeaa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01051.a739ef0dcd31c40cfeddcdcc017edd15 @@ -0,0 +1,64 @@ +From rpm-list-admin@freshrpms.net Wed Sep 4 11:39:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E8ADA16F72 + for ; Wed, 4 Sep 2002 11:37:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 11:37:35 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g84657Z21740 for + ; Wed, 4 Sep 2002 07:05:07 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g84633J17390; Wed, 4 Sep 2002 08:03:03 + +0200 +Received: from basket.ball.reliam.net (basket.ball.reliam.net + [213.91.6.7]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8462ZJ17321 + for ; Wed, 4 Sep 2002 08:02:35 +0200 +Received: from localhost.localdomain (pD9EB4D1B.dip.t-dialin.net + [217.235.77.27]) by basket.ball.reliam.net (Postfix) with SMTP id + E8BBC3F51 for ; Wed, 4 Sep 2002 08:02:28 +0200 + (CEST) +From: che +To: rpm-zzzlist@freshrpms.net +Subject: d4x 2.03 package +Message-Id: <20020904075504.391d7319.che666@uni.de> +Organization: che +X-Mailer: Sylpheed version 0.8.2 (GTK+ 1.2.10; i386-redhat-linux) +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 4 Sep 2002 07:55:04 -0400 +Date: Wed, 4 Sep 2002 07:55:04 -0400 + +Hello! + +i have just found a small issue with the downloader 4 x update. the ftp search engines are missing something like: + +%{_datadir}/d4x/ftpsearch.xml + +thanks in advance, +che + +p.s. i love the xmms-xosd plugin :) + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01052.15a1e32baa8fb172ca169cf8481897ff b/Ch3/datasets/spam/easy_ham/01052.15a1e32baa8fb172ca169cf8481897ff new file mode 100644 index 000000000..ad4a4a44e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01052.15a1e32baa8fb172ca169cf8481897ff @@ -0,0 +1,64 @@ +From rpm-list-admin@freshrpms.net Thu Sep 5 11:26:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4603716F1E + for ; Thu, 5 Sep 2002 11:26:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:26:16 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g84J6EZ15771 for + ; Wed, 4 Sep 2002 20:06:15 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g84J23J07677; Wed, 4 Sep 2002 21:02:03 + +0200 +Received: from web20808.mail.yahoo.com (web20808.mail.yahoo.com + [216.136.226.197]) by egwn.net (8.11.6/8.11.6/EGWN) with SMTP id + g84J10J07556 for ; Wed, 4 Sep 2002 21:01:00 +0200 +Message-Id: <20020904190059.87681.qmail@web20808.mail.yahoo.com> +Received: from [192.35.37.20] by web20808.mail.yahoo.com via HTTP; + Wed, 04 Sep 2002 12:00:59 PDT +From: Doug Stewart +Subject: Fluxbox +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20020904075504.391d7319.che666@uni.de> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 4 Sep 2002 12:00:59 -0700 (PDT) +Date: Wed, 4 Sep 2002 12:00:59 -0700 (PDT) + +I've noted that there are packaged versions of +Blackbox and hackedbox available from FreshRPMs. What +about FluxBox? http://fluxbox.sf.net + +I'd certainly enjoy a packaged version, since its +creators seem hesitant to provide .rpms (.debs, yes, +but no .rpms). + +.Doug + +__________________________________________________ +Do You Yahoo!? +Yahoo! Finance - Get real-time stock quotes +http://finance.yahoo.com + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01053.9f4c2fea143d25bf2680c444e547df55 b/Ch3/datasets/spam/easy_ham/01053.9f4c2fea143d25bf2680c444e547df55 new file mode 100644 index 000000000..7d42b4cf4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01053.9f4c2fea143d25bf2680c444e547df55 @@ -0,0 +1,161 @@ +From rpm-list-admin@freshrpms.net Thu Sep 5 11:26:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 39B3016F22 + for ; Thu, 5 Sep 2002 11:26:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:26:39 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g84M89Z21179 for + ; Wed, 4 Sep 2002 23:08:10 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g84Lw0J18179; Wed, 4 Sep 2002 23:58:00 + +0200 +Received: from horkos.telenet-ops.be (horkos.telenet-ops.be + [195.130.132.45]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g84LvCJ10274 for ; Wed, 4 Sep 2002 23:57:12 +0200 +Received: from localhost (localhost.localdomain [127.0.0.1]) by + horkos.telenet-ops.be (Postfix) with SMTP id C96B083E2D for + ; Wed, 4 Sep 2002 23:56:41 +0200 (CEST) +Received: from zoe (D5760A70.kabel.telenet.be [213.118.10.112]) by + horkos.telenet-ops.be (Postfix) with ESMTP id 9F76483D83 for + ; Wed, 4 Sep 2002 23:56:41 +0200 (CEST) +From: Nick Verhaegen +To: rpm-zzzlist@freshrpms.net +Subject: Re: Fluxbox +User-Agent: KMail/1.4.1 +References: <20020904190059.87681.qmail@web20808.mail.yahoo.com> +In-Reply-To: <20020904190059.87681.qmail@web20808.mail.yahoo.com> +MIME-Version: 1.0 +Content-Type: Multipart/Mixed; + boundary="------------Boundary-00=_OYOXHTVA0T2X8R5S233Y" +Message-Id: <200209042356.48124.nick@permflux.org> +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 4 Sep 2002 23:56:48 +0200 +Date: Wed, 4 Sep 2002 23:56:48 +0200 + + +--------------Boundary-00=_OYOXHTVA0T2X8R5S233Y +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +Hi, + +=09I made a spec file for it some weeks ago, maybe it can be included in = +fresh.=20 +If not, at least you can use it... + +I'm attaching it here... + +Hope it might be some use for you, does the trick for me. Might be an old= +=20 +version though, but should still work + +Nick + + + + +On Wednesday 04 September 2002 21:00, Doug Stewart wrote: +> I've noted that there are packaged versions of +> Blackbox and hackedbox available from FreshRPMs. What +> about FluxBox? http://fluxbox.sf.net +> +> I'd certainly enjoy a packaged version, since its +> creators seem hesitant to provide .rpms (.debs, yes, +> but no .rpms). +> +> .Doug +> +> __________________________________________________ +> Do You Yahoo!? +> Yahoo! Finance - Get real-time stock quotes +> http://finance.yahoo.com +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list + +--------------Boundary-00=_OYOXHTVA0T2X8R5S233Y +Content-Type: text/plain; + charset="iso-8859-1"; + name="fluxbox.spec" +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment; filename="fluxbox.spec" + +Summary: Blackbox derived window manager +Name: fluxbox +Version: 0.1.10 +Release: nv1 +License: other +Group: User Interface/Desktops +Source: http://prdownloads.sourceforge.net/fluxbox/%{name}-%{version}.tar.gz +URL: http://fluxbox.sourceforge.net +BuildRoot: %{_tmppath}/%{name}-root +BuildRequires: XFree86-devel, libstdc++-devel + +%description + + +Fluxbox is yet another windowmanager for X. +It's based on the Blackbox 0.61.1 code. Fluxbox looks like blackbox and +handles styles, colors, window placement and similar thing exactly like +blackbox (100% theme/style compability). +Many changes and improvements have been made to the code, such as window tabs, +iconbar, native keygrabber, gnome and kde support etc. + +%prep +%setup -q + + +%build +%configure --enable-xinerama --enable-gnome --enable-kde +make + +%install +rm -rf %{buildroot} +%makeinstall + +%clean +rm -rf %{buildroot} + + +%files +%defattr(-, root, root) +%doc README NEWS COPYING AUTHORS INSTALL TODO doc/Coding_style +%{_bindir}/* +%{_datadir}/%{name} +%{_mandir}/man1/* + +%changelog +* Thu Jul 19 2002 Nick Verhaegen +- Update to 0.1.10 + +* Tue Jul 9 2002 Nick Verhaegen +- Initial RPM release. + + +--------------Boundary-00=_OYOXHTVA0T2X8R5S233Y-- + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01054.7ed05844c2c47feea3059d7173a9f275 b/Ch3/datasets/spam/easy_ham/01054.7ed05844c2c47feea3059d7173a9f275 new file mode 100644 index 000000000..04d94aec3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01054.7ed05844c2c47feea3059d7173a9f275 @@ -0,0 +1,74 @@ +From rpm-list-admin@freshrpms.net Thu Sep 5 11:28:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 03A4F16F73 + for ; Thu, 5 Sep 2002 11:27:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:27:23 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g857KVZ08602 for + ; Thu, 5 Sep 2002 08:20:31 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g857C1J17031; Thu, 5 Sep 2002 09:12:02 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g857BnJ16997 + for ; Thu, 5 Sep 2002 09:11:50 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17mqoR-00053c-00 for rpm-list@freshrpms.net; + Thu, 05 Sep 2002 03:12:23 -0400 +X-Originating-Ip: [4.64.17.23] +From: "" Angles " Puglisi" +To: "FreshRPMs List" +Subject: apt and a hybrid system +Message-Id: <20020905.RoT.47903400@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 05 Sep 2002 07:11:23 +0000 +Date: Thu, 05 Sep 2002 07:11:23 +0000 + +Back when I had regular RH7.3 there was nothing better than "apt-get upgrade". But +now I'm running (null) beta and I have these questions: + +which version of "apt" can I use, the RH7.3 version or the "rawhide" version? + +Is there a way to use apt to update (null) with the rpms available for (null) +through up2date, since I prefer apt to that? + +If I can use apt, can I use it to get updates from these 3 different places: +1. the (null) up2date Redhat upgrades +2. the (null) files at Freshrpms.net +3. the regular RH7.3 files from freshrpms.net + +Am I asking for too much simplicity in this complicated world? + +-- +That's "angle" as in geometry. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01055.e1fbd6fb316f80e72bd883198f6098c9 b/Ch3/datasets/spam/easy_ham/01055.e1fbd6fb316f80e72bd883198f6098c9 new file mode 100644 index 000000000..189eb95cf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01055.e1fbd6fb316f80e72bd883198f6098c9 @@ -0,0 +1,67 @@ +From rpm-list-admin@freshrpms.net Thu Sep 5 11:46:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C08D916F1E + for ; Thu, 5 Sep 2002 11:45:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:45:55 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g85AcKZ15026 for + ; Thu, 5 Sep 2002 11:38:20 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g85AY1J22104; Thu, 5 Sep 2002 12:34:01 + +0200 +Received: from bonzo.nirvana (pD9E7E2B4.dip.t-dialin.net + [217.231.226.180]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g85AX4J12145 for ; Thu, 5 Sep 2002 12:33:04 +0200 +From: Axel Thimm +To: rpm-zzzlist@freshrpms.net +Subject: Re: apt and a hybrid system +Message-Id: <20020905123258.A9886@bonzo.nirvana> +References: <20020905.RoT.47903400@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <20020905.RoT.47903400@www.dudex.net>; from + angles@aminvestments.com on Thu, Sep 05, 2002 at 07:11:23AM +0000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 12:32:58 +0200 +Date: Thu, 5 Sep 2002 12:32:58 +0200 + +On Thu, Sep 05, 2002 at 07:11:23AM +0000, Angles Puglisi wrote: +> If I can use apt, can I use it to get updates from these 3 different places: +> 1. the (null) up2date Redhat upgrades +> 2. the (null) files at Freshrpms.net +> 3. the regular RH7.3 files from freshrpms.net + +You could build your own apt-repository. Just mirror the needed directories +(e.g. by using a wget cron job), symlink the needed rpms and recreate the +repository. It is already worth the trouble, if you have more than one +installation. + +In any case in order to acces the mentioned places, somebody must keep such a +repository up to date, be it yourself or someone else. +-- +Axel.Thimm@physik.fu-berlin.de + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01056.3b111e8f39863835cc7133841b4649b5 b/Ch3/datasets/spam/easy_ham/01056.3b111e8f39863835cc7133841b4649b5 new file mode 100644 index 000000000..aee0c1afa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01056.3b111e8f39863835cc7133841b4649b5 @@ -0,0 +1,86 @@ +From rpm-list-admin@freshrpms.net Thu Sep 5 12:50:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8599316F20 + for ; Thu, 5 Sep 2002 12:50:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 12:50:06 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g85BgHZ17290 for + ; Thu, 5 Sep 2002 12:42:18 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g85Bc1J10899; Thu, 5 Sep 2002 13:38:01 + +0200 +Received: from fep07-app.kolumbus.fi (fep07-0.kolumbus.fi [193.229.0.51]) + by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g85Bb1J04837 for + ; Thu, 5 Sep 2002 13:37:01 +0200 +Received: from azrael.blades.cxm ([62.248.235.88]) by + fep07-app.kolumbus.fi with ESMTP id + <20020905113657.LLNH1030.fep07-app.kolumbus.fi@azrael.blades.cxm> for + ; Thu, 5 Sep 2002 14:36:57 +0300 +Received: (from blades@localhost) by azrael.blades.cxm (SGI-8.9.3/8.9.3) + id OAA09272 for rpm-list@freshrpms.net; Thu, 5 Sep 2002 14:36:39 +0300 + (EEST) +X-Authentication-Warning: azrael.blades.cxm: blades set sender to + harri.haataja@cs.helsinki.fi using -f +From: Harri Haataja +To: rpm-zzzlist@freshrpms.net +Subject: Re: apt and a hybrid system +Message-Id: <20020905143630.B6397@azrael.smilehouse.com> +References: <20020905.RoT.47903400@www.dudex.net> + <20020905123258.A9886@bonzo.nirvana> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <20020905123258.A9886@bonzo.nirvana>; from + Axel.Thimm@physik.fu-berlin.de on Thu, Sep 05, 2002 at 12:32:58PM +0200 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 14:36:39 +0300 +Date: Thu, 5 Sep 2002 14:36:39 +0300 + +On Thu, Sep 05, 2002 at 12:32:58PM +0200, Axel Thimm wrote: +> On Thu, Sep 05, 2002 at 07:11:23AM +0000, Angles Puglisi wrote: +> > If I can use apt, can I use it to get updates from these 3 different +> > places: +> > 1. the (null) up2date Redhat upgrades +> > 2. the (null) files at Freshrpms.net +> > 3. the regular RH7.3 files from freshrpms.net +> You could build your own apt-repository. Just mirror the needed +> directories (e.g. by using a wget cron job), symlink the needed rpms +> and recreate the repository. It is already worth the trouble, if you +> have more than one installation. + +Always nice to have one to put stuff that overrides RH things. Like if +you absolutely detest qt and some programs are rebuildable from sources +with different %configure options. You can get src.rpm, edit spec, bump +release numberwith your initials and another number and rebuild, insert +into apt and let loose... :) + +Doesn't freshrpms have updates dir too? Maybe not quite as up to date as +up2date but still. I would never use up2date. There is another +repository at apt-rpm.tuxfamily.org IIRC. Not sure if that had The +updates. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01057.e1933319a8e0ed075aab6d302b132dbd b/Ch3/datasets/spam/easy_ham/01057.e1933319a8e0ed075aab6d302b132dbd new file mode 100644 index 000000000..5e171b82e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01057.e1933319a8e0ed075aab6d302b132dbd @@ -0,0 +1,70 @@ +From rpm-list-admin@freshrpms.net Thu Sep 5 13:04:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A03BF16F1E + for ; Thu, 5 Sep 2002 13:04:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 13:04:23 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g85BrnZ17635 for + ; Thu, 5 Sep 2002 12:53:49 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g85Bp2J07028; Thu, 5 Sep 2002 13:51:02 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g85Bo7J06794 + for ; Thu, 5 Sep 2002 13:50:07 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17mv9k-0005FX-00 for rpm-list@freshrpms.net; + Thu, 05 Sep 2002 07:50:40 -0400 +X-Originating-Ip: [4.64.17.23] +From: "" Angles " Puglisi" +To: "FreshRPMs List" +Subject: alsaplayer for (null) +Message-Id: <20020905.knH.90838400@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 05 Sep 2002 11:49:41 +0000 +Date: Thu, 05 Sep 2002 11:49:41 +0000 + +I spun another AlsaPlayer build, this time on my (null) box. I do not know what this +means but the Curl stuff compiled in this time. + +It's sounding damn cool with the new alsa drivers. Thanks to Matthias for the Alsa +RPMS. Great job bring sound to the masses. + +http://www.dudex.net/rpms/alsaplayer-0.99.71-aap2.i386.rpm +http://www.dudex.net/rpms/alsaplayer-0.99.71-aap2.i686.rpm +http://www.dudex.net/rpms/alsaplayer-0.99.71-aap2.src.rpm +http://www.dudex.net/rpms/alsaplayer-0.99.71.spec + +-- +That's "angle" as in geometry. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01058.89acc8a125f46d7fc204c132e3b37845 b/Ch3/datasets/spam/easy_ham/01058.89acc8a125f46d7fc204c132e3b37845 new file mode 100644 index 000000000..2e5ba5fe6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01058.89acc8a125f46d7fc204c132e3b37845 @@ -0,0 +1,88 @@ +From rpm-list-admin@freshrpms.net Fri Sep 6 11:34:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 676B616F17 + for ; Fri, 6 Sep 2002 11:33:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:33:59 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868I5W25134 for + ; Fri, 6 Sep 2002 09:18:06 +0100 +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by webnote.net + (8.9.3/8.9.3) with ESMTP id IAA20563 for ; + Fri, 6 Sep 2002 08:09:40 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g86711J18957; Fri, 6 Sep 2002 09:01:01 + +0200 +Received: from localhost.localdomain ([218.188.76.21]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8670ZJ18832 for + ; Fri, 6 Sep 2002 09:00:35 +0200 +Received: from localhost (localhost [[UNIX: localhost]]) by + localhost.localdomain (8.11.6/8.11.6) id g8670VX01954 for + rpm-list@freshrpms.net; Fri, 6 Sep 2002 15:00:31 +0800 +Content-Type: text/plain; charset="us-ascii" +From: Stephen Liu +To: rpm-zzzlist@freshrpms.net +Subject: Apt-get question +User-Agent: KMail/1.4.1 +MIME-Version: 1.0 +Message-Id: <200209061500.31306.satimis@writeme.com> +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g8670ZJ18832 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 6 Sep 2002 15:00:31 +0800 +Date: Fri, 6 Sep 2002 15:00:31 +0800 + +Hi All Folks, + +I have 'APT' installed and updated from 'freshmeat.net. But I failed using it + +# apt-get install +/mnt/cdrom/Linux/CDBurner/cdrtools-cdrecord-1.11a23-1.i386.rpm +Processing File Dependencies... Done +Reading Package Lists... Done +Building Dependency Tree... Done +E: Couldn't find package +/mnt/cdrom/Linux/CDBurner/cdrtools-cdrecord-1.11a23-1.i386.rpm + +The file 'cdrtools-cdrecord-1.11a23-1.i386.rpm' is there + +I performed another test copying the file +'cdrtools-cdrecord-1.11a23-1.i386.rpm' to /root/Download + +# apt-get install /root/Download/cdrtools-cdrecord-1.11a23-1.i386.rpm +Processing File Dependencies... Done +Reading Package Lists... Done +Building Dependency Tree... Done +E: Couldn't find package /root/Download/cdrtools-cdrecord-1.11a23-1.i386.rpm + +Still failed. Finally I rpm 'cdrtools-cdrecord-1.11a23-1.i386.rpm' from the +CD and suceeded. + +Kindly advise what mistake I have committed. + +Thanks in advance. + +Stephen Liu + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01059.f40b9601c05badff9a3f39ac01660d12 b/Ch3/datasets/spam/easy_ham/01059.f40b9601c05badff9a3f39ac01660d12 new file mode 100644 index 000000000..4a03039e1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01059.f40b9601c05badff9a3f39ac01660d12 @@ -0,0 +1,73 @@ +From rpm-list-admin@freshrpms.net Fri Sep 6 11:34:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9F97916F1A + for ; Fri, 6 Sep 2002 11:34:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:34:14 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8691YC27100 for + ; Fri, 6 Sep 2002 10:01:47 +0100 +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by webnote.net + (8.9.3/8.9.3) with ESMTP id JAA20784 for ; + Fri, 6 Sep 2002 09:42:23 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g868b2J21346; Fri, 6 Sep 2002 10:37:02 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g868a1J21197 for + ; Fri, 6 Sep 2002 10:36:01 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Apt-get question +Message-Id: <20020906103455.432893b2.matthias@egwn.net> +In-Reply-To: <200209061500.31306.satimis@writeme.com> +References: <200209061500.31306.satimis@writeme.com> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 6 Sep 2002 10:34:55 +0200 +Date: Fri, 6 Sep 2002 10:34:55 +0200 + +Once upon a time, Stephen wrote : + +> # apt-get install +> /mnt/cdrom/Linux/CDBurner/cdrtools-cdrecord-1.11a23-1.i386.rpm + +This is not how apt is meant to be used, see Gordon's answer to your post +on the Valhalla list for details. + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01060.9c32422288bf0e565cd43473fa6ac5c5 b/Ch3/datasets/spam/easy_ham/01060.9c32422288bf0e565cd43473fa6ac5c5 new file mode 100644 index 000000000..158f7671c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01060.9c32422288bf0e565cd43473fa6ac5c5 @@ -0,0 +1,71 @@ +From rpm-list-admin@freshrpms.net Fri Sep 6 11:37:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B0AD616F16 + for ; Fri, 6 Sep 2002 11:36:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:36:24 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869qFC29126 for + ; Fri, 6 Sep 2002 10:52:15 +0100 +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by webnote.net + (8.9.3/8.9.3) with ESMTP id AAA19189 for ; + Fri, 6 Sep 2002 00:10:06 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g85N63J14153; Fri, 6 Sep 2002 01:06:03 + +0200 +Received: from mel-rto4.wanadoo.fr (smtp-out-4.wanadoo.fr [193.252.19.23]) + by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g85N4hJ13842 for + ; Fri, 6 Sep 2002 01:04:43 +0200 +Received: from mel-rta9.wanadoo.fr (193.252.19.69) by mel-rto4.wanadoo.fr + (6.5.007) id 3D760D0800115165 for rpm-list@freshrpms.net; Fri, + 6 Sep 2002 01:04:37 +0200 +Received: from kalis.tuxfan.net (80.15.107.216) by mel-rta9.wanadoo.fr + (6.5.007) id 3D775B8400054AD0 for rpm-list@freshrpms.net; Fri, + 6 Sep 2002 01:04:37 +0200 +From: Laurent Papier +To: rpm-zzzlist@freshrpms.net +Subject: Pb with mplayer-0.90pre7 +Message-Id: <20020906010437.67707f3f.papier@tuxfan.net> +X-Mailer: Sylpheed version 0.8.2 (GTK+ 1.2.10; i386-redhat-linux) +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 6 Sep 2002 01:04:37 +0200 +Date: Fri, 6 Sep 2002 01:04:37 +0200 + +Hi, +this is my first problem with one of the freshrpms rpms ... +I just upgrade mplayer and now I get + +$ mplayer +mplayer: error while loading shared libraries: libdvdnav.so.1: cannot open shared object file: No such file or directory + +I guess Matthias has forgotten libdvdnav dependency. + +-- +They told me I needed WIN95 or better +So I chose Linux! + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01061.6610124afa2a5844d41951439d1c1068 b/Ch3/datasets/spam/easy_ham/01061.6610124afa2a5844d41951439d1c1068 new file mode 100644 index 000000000..8cc27a6e1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01061.6610124afa2a5844d41951439d1c1068 @@ -0,0 +1,75 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 17:57:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E5C2916EFC + for ; Mon, 9 Sep 2002 17:57:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 17:57:43 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g115mqY09154 for + ; Fri, 1 Feb 2002 05:48:53 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g115m1329353; + Fri, 1 Feb 2002 06:48:01 +0100 +Received: from pd5mo1so.prod.shaw.ca (h24-71-223-13.cg.shawcable.net + [24.71.223.13]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g115l5329118 for ; Fri, 1 Feb 2002 06:47:05 +0100 +Received: from pd5mr2so.prod.shaw.ca (pd5mr2so-qfe3.prod.shaw.ca + [10.0.141.233]) by l-daemon (iPlanet Messaging Server 5.1 (built May 7 + 2001)) with ESMTP id <0GQU00M3PAQCDI@l-daemon> for rpm-list@freshrpms.net; + Thu, 31 Jan 2002 22:47:00 -0700 (MST) +Received: from pn2ml3so (pn2ml3so-qfe0.prod.shaw.ca [10.0.121.147]) by + l-daemon (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0GQU00530AQCOI@l-daemon> for rpm-list@freshrpms.net; Thu, 31 Jan 2002 + 22:47:00 -0700 (MST) +Received: from shaw.ca (h24-86-194-126.ed.shawcable.net [24.86.194.126]) + by l-daemon (iPlanet Messaging Server 5.0 Patch 2 (built Dec 14 2000)) + with ESMTP id <0GQU000LJAQCZJ@l-daemon> for rpm-list@freshrpms.net; + Thu, 31 Jan 2002 22:47:00 -0700 (MST) +From: rob bains +Subject: Please help a newbie compile mplayer :-) +To: rpm-zzzlist@freshrpms.net +Message-Id: <3C5A2B2E.9050400@shaw.ca> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7BIT +X-Accept-Language: en-us +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.2.1) Gecko/20010901 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 31 Jan 2002 22:44:14 -0700 +Date: Thu, 31 Jan 2002 22:44:14 -0700 + + + Hello, + + I just installed redhat 7.2 and I think I have everything +working properly. Anyway I want to install mplayer because I heard it +can play quicktime movs. I apt-get source mplayer and dl'd it to +/usr/src. + + I tried to just rpm --rebuild mplayer-20020106-fr1.src.rpm, +then I get ; mplayer-20020106-fr1.src.rpm: No such file or directory. + + Any help or a link to some document would be appreciated, Thanks +-rob + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01062.ef7955b391f9b161f3f2106c8cda5edb b/Ch3/datasets/spam/easy_ham/01062.ef7955b391f9b161f3f2106c8cda5edb new file mode 100644 index 000000000..d9c0d9ab8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01062.ef7955b391f9b161f3f2106c8cda5edb @@ -0,0 +1,93 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 17:57:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 21BD716EFC + for ; Mon, 9 Sep 2002 17:57:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 17:57:57 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g116t3Y10985 for + ; Fri, 1 Feb 2002 06:55:04 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g116s1300608; + Fri, 1 Feb 2002 07:54:01 +0100 +Received: from imf08bis.bellsouth.net (mail108.mail.bellsouth.net + [205.152.58.48]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g116rY300594 for ; Fri, 1 Feb 2002 07:53:34 +0100 +Received: from adsl-157-18-205.msy.bellsouth.net ([66.157.18.205]) by + imf08bis.bellsouth.net (InterMail vM.5.01.04.00 201-253-122-122-20010827) + with ESMTP id + <20020201065447.BNKB29644.imf08bis.bellsouth.net@adsl-157-18-205.msy.bellsouth.net> + for ; Fri, 1 Feb 2002 01:54:47 -0500 +Subject: Re: Please help a newbie compile mplayer :-) +From: Lance +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <3C5A2B2E.9050400@shaw.ca> +References: <3C5A2B2E.9050400@shaw.ca> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2 +Message-Id: <1012546426.21971.5.camel@localhost.localdomain> +MIME-Version: 1.0 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 01 Feb 2002 00:53:41 -0600 +Date: 01 Feb 2002 00:53:41 -0600 + +Make sure you rebuild as root and you're in the directory that you +downloaded the file. Also it might complain of a few dependencies but +you can get these at freshrpms.net, except for gcc3, which you can find +on your Red Hat cd, Red Hat ftp, or rpmfind.net. + +After you rebuild the source rpm it should install a binary rpm in +/usr/src/redhat/RPMS/i386. With all dependencies met, install mplayer +with 'rpm -ivh mplayer-20020106-fr1.rpm' and you should be good to go. + +One last thing, you will need the win32 codecs, I found them on google, +create a directory /usr/lib/win32 and place the codecs in there. + +Good Luck! + +Lance + +On Thu, 2002-01-31 at 23:44, rob bains wrote: +> +> Hello, +> +> I just installed redhat 7.2 and I think I have everything +> working properly. Anyway I want to install mplayer because I heard it +> can play quicktime movs. I apt-get source mplayer and dl'd it to +> /usr/src. +> +> I tried to just rpm --rebuild mplayer-20020106-fr1.src.rpm, +> then I get ; mplayer-20020106-fr1.src.rpm: No such file or directory. +> +> Any help or a link to some document would be appreciated, Thanks +> -rob +> +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01063.ad3449bd2890a29828ac3978ca8c02ab b/Ch3/datasets/spam/easy_ham/01063.ad3449bd2890a29828ac3978ca8c02ab new file mode 100644 index 000000000..f4efff54d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01063.ad3449bd2890a29828ac3978ca8c02ab @@ -0,0 +1,106 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 17:58:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 47B6D16EFC + for ; Mon, 9 Sep 2002 17:58:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 17:58:05 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g1196YY14763 for + ; Fri, 1 Feb 2002 09:06:35 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11951308525; + Fri, 1 Feb 2002 10:05:01 +0100 +Received: from pd4mo1so.prod.shaw.ca (h24-71-223-10.cg.shawcable.net + [24.71.223.10]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g1194X308504 for ; Fri, 1 Feb 2002 10:04:33 +0100 +Received: from pd3mr1so.prod.shaw.ca (pd3mr1so-ser.prod.shaw.ca + [10.0.141.177]) by l-daemon (iPlanet Messaging Server 5.0 Patch 2 (built + Dec 14 2000)) with ESMTP id <0GQU0070ZJVIQ3@l-daemon> for + rpm-list@freshrpms.net; Fri, 01 Feb 2002 02:04:30 -0700 (MST) +Received: from pn2ml6so.prod.shaw.ca (pn2ml6so-qfe0.prod.shaw.ca + [10.0.121.150]) by l-daemon (iPlanet Messaging Server 5.0 Patch 2 (built + Dec 14 2000)) with ESMTP id <0GQU00C4CJVI6P@l-daemon> for + rpm-list@freshrpms.net; Fri, 01 Feb 2002 02:04:30 -0700 (MST) +Received: from shaw.ca (h24-86-194-126.ed.shawcable.net [24.86.194.126]) + by l-daemon (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP + id <0GQU0007PJV4YB@l-daemon> for rpm-list@freshrpms.net; Fri, + 01 Feb 2002 02:04:16 -0700 (MST) +From: rob bains +Subject: Re: Please help a newbie compile mplayer :-) +To: rpm-zzzlist@freshrpms.net +Message-Id: <3C5A5978.80500@shaw.ca> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7BIT +X-Accept-Language: en-us +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.2.1) Gecko/20010901 +References: <3C5A2B2E.9050400@shaw.ca> + <1012546426.21971.5.camel@localhost.localdomain> +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 01 Feb 2002 02:01:44 -0700 +Date: Fri, 01 Feb 2002 02:01:44 -0700 + +Lance wrote: + +>Make sure you rebuild as root and you're in the directory that you +>downloaded the file. Also it might complain of a few dependencies but +>you can get these at freshrpms.net, except for gcc3, which you can find +>on your Red Hat cd, Red Hat ftp, or rpmfind.net. +> +>After you rebuild the source rpm it should install a binary rpm in +>/usr/src/redhat/RPMS/i386. With all dependencies met, install mplayer +>with 'rpm -ivh mplayer-20020106-fr1.rpm' and you should be good to go. +> +>One last thing, you will need the win32 codecs, I found them on google, +>create a directory /usr/lib/win32 and place the codecs in there. +> +>Good Luck! +> +>Lance +> + I dl'd gcc3 and libgcc3, but I still get the same error message when I +try rpm --rebuild or recompile. I do this as root, I dl'd as root also. + +thanks for the help, any more idea what's going on? + +> +>> +>> +>> I tried to just rpm --rebuild mplayer-20020106-fr1.src.rpm, +>>then I get ; mplayer-20020106-fr1.src.rpm: No such file or directory. +>> +>> +>> +>> +> +> +> +> +>_______________________________________________ +>RPM-List mailing list +>http://lists.freshrpms.net/mailman/listinfo/rpm-list +> + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01064.9f4fc60b4e27bba3561e322c82d5f7ff b/Ch3/datasets/spam/easy_ham/01064.9f4fc60b4e27bba3561e322c82d5f7ff new file mode 100644 index 000000000..e27fc09ac --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01064.9f4fc60b4e27bba3561e322c82d5f7ff @@ -0,0 +1,75 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 17:58:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 59CE916EFC + for ; Mon, 9 Sep 2002 17:58:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 17:58:16 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g119YIY15716 for + ; Fri, 1 Feb 2002 09:34:19 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g119X1310603; + Fri, 1 Feb 2002 10:33:01 +0100 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g119WR310365 for + ; Fri, 1 Feb 2002 10:32:27 +0100 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Please help a newbie compile mplayer :-) +Message-Id: <20020201102923.3bfb81dc.matthias@egwn.net> +In-Reply-To: <3C5A5978.80500@shaw.ca> +References: <3C5A2B2E.9050400@shaw.ca> + <1012546426.21971.5.camel@localhost.localdomain> <3C5A5978.80500@shaw.ca> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.7.0claws5 (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 1 Feb 2002 10:29:23 +0100 +Date: Fri, 1 Feb 2002 10:29:23 +0100 + +Once upon a time, rob wrote : + +> I dl'd gcc3 and libgcc3, but I still get the same error message when I +> try rpm --rebuild or recompile. I do this as root, I dl'd as root also. +> +> thanks for the help, any more idea what's going on? + +I've never installed source rpms with apt, but I suppose that if you get +file not found, it's because the source rpm was installed. To see if this +is the case, go to /usr/src/redhat/SPECS/ and if you see mplayer.spec, +you'll just need to do "rpm -bb mplayer.spec" to get a binary build in +/usr/src/redhat/RPMS/i386/ + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01065.b1ad1862ff2ceeb1bfc9cbdf3f87ebee b/Ch3/datasets/spam/easy_ham/01065.b1ad1862ff2ceeb1bfc9cbdf3f87ebee new file mode 100644 index 000000000..42ccda583 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01065.b1ad1862ff2ceeb1bfc9cbdf3f87ebee @@ -0,0 +1,83 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 17:59:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D387716EFC + for ; Mon, 9 Sep 2002 17:58:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 17:58:58 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g11D1p824443 for + ; Fri, 1 Feb 2002 13:01:51 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11D11328911; + Fri, 1 Feb 2002 14:01:01 +0100 +Received: from porsta.cs.Helsinki.FI (root@porsta.cs.Helsinki.FI + [128.214.48.124]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g11D0S328894 for ; Fri, 1 Feb 2002 14:00:28 +0100 +Received: from melkki.cs.Helsinki.FI (sslwrap@localhost [127.0.0.1]) by + porsta.cs.Helsinki.FI (8.11.6/8.11.6) with ESMTP id g11D0Qp17387 for + ; Fri, 1 Feb 2002 15:00:27 +0200 +Received: (from hhaataja@localhost) by melkki.cs.Helsinki.FI + (8.11.6/8.11.2) id g11D0MD28004 for rpm-list@freshrpms.net; Fri, + 1 Feb 2002 15:00:22 +0200 +From: Harri Haataja +To: Freshrpms list +Subject: http://apt.nixia.no/ +Message-Id: <20020201150022.B11472@cs.helsinki.fi> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-md5; + protocol="application/pgp-signature"; + boundary="6sX45UoQRIJXqkqR" +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 1 Feb 2002 15:00:22 +0200 +Date: Fri, 1 Feb 2002 15:00:22 +0200 + + +--6sX45UoQRIJXqkqR +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +Title page has a login screen and I can't seem to get the apt indexes +anymore. Is it just me or is something going on there? + +--=20 +Additive E120 - "not suitable for vegetarians". +http://www.bryngollie.freeserve.co.uk/E120.htm + +--6sX45UoQRIJXqkqR +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE8WpFlQF8Oi9XNck4RAtn4AKC40mgaJXP7T+go1THM7XsZ1B8pNgCfZyoy +jDkvRp7pFzUF1Pw5sOuoFhY= +=9TDR +-----END PGP SIGNATURE----- + +--6sX45UoQRIJXqkqR-- + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01066.f1bb150ef4ede1f6e29ea63ad2ef5684 b/Ch3/datasets/spam/easy_ham/01066.f1bb150ef4ede1f6e29ea63ad2ef5684 new file mode 100644 index 000000000..8b0b195c4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01066.f1bb150ef4ede1f6e29ea63ad2ef5684 @@ -0,0 +1,72 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 17:59:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B4FD216EFC + for ; Mon, 9 Sep 2002 17:59:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 17:59:09 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g11EgF828113 for + ; Fri, 1 Feb 2002 14:42:15 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11Ef1310866; + Fri, 1 Feb 2002 15:41:01 +0100 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11Eed310845 for + ; Fri, 1 Feb 2002 15:40:39 +0100 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: http://apt.nixia.no/ +Message-Id: <20020201153541.1321cd9b.matthias@egwn.net> +In-Reply-To: <20020201150022.B11472@cs.helsinki.fi> +References: <20020201150022.B11472@cs.helsinki.fi> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.7.0claws5 (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 1 Feb 2002 15:35:41 +0100 +Date: Fri, 1 Feb 2002 15:35:41 +0100 + +Once upon a time, Harri wrote : + +> Title page has a login screen and I can't seem to get the apt indexes +> anymore. Is it just me or is something going on there? + +You can't get the file index from here either? +http://apt.nixia.no/apt/files/ + +During the past few days, I've experienced connection problems with that +site from time to time, but for me right now it's working. + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01067.960ee297ebec4e02bf924cdbccb893d4 b/Ch3/datasets/spam/easy_ham/01067.960ee297ebec4e02bf924cdbccb893d4 new file mode 100644 index 000000000..41be0667a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01067.960ee297ebec4e02bf924cdbccb893d4 @@ -0,0 +1,99 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 17:59:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C773316EFC + for ; Mon, 9 Sep 2002 17:59:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 17:59:17 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g11Eu8828580 for + ; Fri, 1 Feb 2002 14:56:08 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11Et0312114; + Fri, 1 Feb 2002 15:55:00 +0100 +Received: from porsta.cs.Helsinki.FI (root@porsta.cs.Helsinki.FI + [128.214.48.124]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g11EsZ312082 for ; Fri, 1 Feb 2002 15:54:35 +0100 +Received: from melkki.cs.Helsinki.FI (sslwrap@localhost [127.0.0.1]) by + porsta.cs.Helsinki.FI (8.11.6/8.11.6) with ESMTP id g11Esep24895 for + ; Fri, 1 Feb 2002 16:54:41 +0200 +Received: (from hhaataja@localhost) by melkki.cs.Helsinki.FI + (8.11.6/8.11.2) id g11EsZM05267 for rpm-list@freshrpms.net; Fri, + 1 Feb 2002 16:54:35 +0200 +From: Harri Haataja +To: rpm-zzzlist@freshrpms.net +Subject: Re: http://apt.nixia.no/ +Message-Id: <20020201165435.C11472@cs.helsinki.fi> +References: <20020201150022.B11472@cs.helsinki.fi> + <20020201153541.1321cd9b.matthias@egwn.net> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-md5; + protocol="application/pgp-signature"; + boundary="yLVHuoLXiP9kZBkt" +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <20020201153541.1321cd9b.matthias@egwn.net>; from + matthias@egwn.net on Fri, Feb 01, 2002 at 03:35:41PM +0100 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 1 Feb 2002 16:54:35 +0200 +Date: Fri, 1 Feb 2002 16:54:35 +0200 + + +--yLVHuoLXiP9kZBkt +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Fri, Feb 01, 2002 at 03:35:41PM +0100, Matthias Saou wrote: +> Once upon a time, Harri wrote : +>=20 +> > Title page has a login screen and I can't seem to get the apt indexes +> > anymore. Is it just me or is something going on there? +>=20 +> You can't get the file index from here either? +> http://apt.nixia.no/apt/files/ + +The requested URL /apt/files/ was not found on this server. + +> During the past few days, I've experienced connection problems with that +> site from time to time, but for me right now it's working. + +Maybe it's temporary :-/ + +--=20 +Win a live rat for your mother-in-law! + +--yLVHuoLXiP9kZBkt +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE8WqwpQF8Oi9XNck4RAmDLAJ9vdN7wlECYEdkP/MDwWnykFA97OQCfZxJc +F7RkwD9oaZV1rg/r8p06Dmw= +=OXj6 +-----END PGP SIGNATURE----- + +--yLVHuoLXiP9kZBkt-- + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01068.09401b10e30f84e5cb9c8c5579296f04 b/Ch3/datasets/spam/easy_ham/01068.09401b10e30f84e5cb9c8c5579296f04 new file mode 100644 index 000000000..c5fe2c81a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01068.09401b10e30f84e5cb9c8c5579296f04 @@ -0,0 +1,81 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 17:59:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6C4B816EFC + for ; Mon, 9 Sep 2002 17:59:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 17:59:26 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g11FNF829836 for + ; Fri, 1 Feb 2002 15:23:15 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11FM0314022; + Fri, 1 Feb 2002 16:22:00 +0100 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11FL5313996 for + ; Fri, 1 Feb 2002 16:21:06 +0100 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: http://apt.nixia.no/ +Message-Id: <20020201161552.3497fbfd.matthias@egwn.net> +In-Reply-To: <20020201165435.C11472@cs.helsinki.fi> +References: <20020201150022.B11472@cs.helsinki.fi> + <20020201153541.1321cd9b.matthias@egwn.net> + <20020201165435.C11472@cs.helsinki.fi> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.7.0claws5 (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 1 Feb 2002 16:15:52 +0100 +Date: Fri, 1 Feb 2002 16:15:52 +0100 + +Once upon a time, Harri wrote : + +> > You can't get the file index from here either? +> > http://apt.nixia.no/apt/files/ +> +> The requested URL /apt/files/ was not found on this server. + +Very strange then : It works fine from here, even shift-reloading and with +no proxy whatsoever! + +> > During the past few days, I've experienced connection problems with +> > that site from time to time, but for me right now it's working. +> +> Maybe it's temporary :-/ + +If you need another apt repository with Red Hat Linux 7.2 files, there are +a few others. See : http://freshrpms.net/apt/ + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01069.a94a9df489c4da9bf8cf3cbca70b3e53 b/Ch3/datasets/spam/easy_ham/01069.a94a9df489c4da9bf8cf3cbca70b3e53 new file mode 100644 index 000000000..c5b35a7d4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01069.a94a9df489c4da9bf8cf3cbca70b3e53 @@ -0,0 +1,107 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 17:59:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2446E16EFC + for ; Mon, 9 Sep 2002 17:59:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 17:59:35 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g11FhS830693 for + ; Fri, 1 Feb 2002 15:43:29 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11Fg2315537; + Fri, 1 Feb 2002 16:42:02 +0100 +Received: from porsta.cs.Helsinki.FI (root@porsta.cs.Helsinki.FI + [128.214.48.124]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g11FfW315510 for ; Fri, 1 Feb 2002 16:41:32 +0100 +Received: from melkki.cs.Helsinki.FI (sslwrap@localhost [127.0.0.1]) by + porsta.cs.Helsinki.FI (8.11.6/8.11.6) with ESMTP id g11Ffbp02684 for + ; Fri, 1 Feb 2002 17:41:37 +0200 +Received: (from hhaataja@localhost) by melkki.cs.Helsinki.FI + (8.11.6/8.11.2) id g11FfWI08881 for rpm-list@freshrpms.net; Fri, + 1 Feb 2002 17:41:32 +0200 +From: Harri Haataja +To: rpm-zzzlist@freshrpms.net +Subject: Re: http://apt.nixia.no/ +Message-Id: <20020201174132.A8690@cs.helsinki.fi> +References: <20020201150022.B11472@cs.helsinki.fi> + <20020201153541.1321cd9b.matthias@egwn.net> + <20020201165435.C11472@cs.helsinki.fi> + <20020201161552.3497fbfd.matthias@egwn.net> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-md5; + protocol="application/pgp-signature"; + boundary="J2SCkAp4GZ/dPZZf" +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <20020201161552.3497fbfd.matthias@egwn.net>; from + matthias@egwn.net on Fri, Feb 01, 2002 at 04:15:52PM +0100 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 1 Feb 2002 17:41:32 +0200 +Date: Fri, 1 Feb 2002 17:41:32 +0200 + + +--J2SCkAp4GZ/dPZZf +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Fri, Feb 01, 2002 at 04:15:52PM +0100, Matthias Saou wrote: +> Once upon a time, Harri wrote : +>=20 +> > > During the past few days, I've experienced connection problems with +> > > that site from time to time, but for me right now it's working. +> >=20 +> > Maybe it's temporary :-/ +>=20 +> If you need another apt repository with Red Hat Linux 7.2 files, there are +> a few others. See : http://freshrpms.net/apt/ + +I have a local one for the main and upgrades from somewhere plus my own +at $ORKPLACE. + +blades@remiel% grep nixia /etc/apt/sources.list=20 +#rpm http://apt.nixia.no redhat/7.2/i386 gnomehide +#rpm-src http://apt.nixia.no redhat/7.2/i386 gnomehide + +Ah, that's it. They had newer gnome there + +--=20 +"When life hands you a lemon, make batteries +=2E...then go electrocute someone." + -- Stevo, Scary Devil Monastery + +--J2SCkAp4GZ/dPZZf +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE8WrcrQF8Oi9XNck4RAur7AKDDRrfTI/kW7UZ1Vi0WXhPXycX4cwCgyd99 +PcYli3Z2sQrAZPcG5KWF4GY= +=CkwN +-----END PGP SIGNATURE----- + +--J2SCkAp4GZ/dPZZf-- + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01070.6e34c1053a1840779780a315fb083057 b/Ch3/datasets/spam/easy_ham/01070.6e34c1053a1840779780a315fb083057 new file mode 100644 index 000000000..643dce80f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01070.6e34c1053a1840779780a315fb083057 @@ -0,0 +1,76 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 17:59:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9D5CF16EFC + for ; Mon, 9 Sep 2002 17:59:43 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 17:59:43 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g11IBK804416 for + ; Fri, 1 Feb 2002 18:11:20 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11IA1326604; + Fri, 1 Feb 2002 19:10:01 +0100 +Received: from ematic.com (ematic-ecdc-191-64.digisle.net + [167.216.191.64]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with SMTP id + g11HZE324211 for ; Fri, 1 Feb 2002 18:35:18 +0100 +Received: from bfrench ([65.213.202.212]) by ematic.com ; Fri, + 01 Feb 2002 12:35:20 -0500 +From: "Brian French" +To: "Rpm-List at freshrpms" +Subject: Prob. w/ install/uninstall +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-RCPT-To: +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 1 Feb 2002 12:42:02 -0500 +Date: Fri, 1 Feb 2002 12:42:02 -0500 + +hey i have a problem: +i have a rpms that i have installed that i want to uninstall, i do it +like so: +rpm -e [rpm package] +and it gives the error: package not installed, so i install it like +so: +rpm -i [rpm package] +and it gives the error: package already installed, so i force it to +install like so: +rpm -i --force [rpm package] +this installs it and then i try to uninstall it again and it still +gives me the same error: package not installed. + +How can i get it to recognize that the package is indeed installed it, +and/or get it to unstall it? + +Thanx in advance, +Brian French + +-French + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01071.5d83f457fafaabe795b84a483a42a9e1 b/Ch3/datasets/spam/easy_ham/01071.5d83f457fafaabe795b84a483a42a9e1 new file mode 100644 index 000000000..0f0543f67 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01071.5d83f457fafaabe795b84a483a42a9e1 @@ -0,0 +1,101 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 17:59:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E82D316EFC + for ; Mon, 9 Sep 2002 17:59:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 17:59:51 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g11IJR804659 for + ; Fri, 1 Feb 2002 18:19:28 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11II0327258; + Fri, 1 Feb 2002 19:18:00 +0100 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11IHj327244 for + ; Fri, 1 Feb 2002 19:17:45 +0100 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Prob. w/ install/uninstall +Message-Id: <20020201191747.4ca19d1a.matthias@egwn.net> +In-Reply-To: +References: +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.7.0claws5 (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 1 Feb 2002 19:17:47 +0100 +Date: Fri, 1 Feb 2002 19:17:47 +0100 + +Once upon a time, Brian wrote : + +> hey i have a problem: +> i have a rpms that i have installed that i want to uninstall, i do it +> like so: +> rpm -e [rpm package] +> and it gives the error: package not installed, so i install it like +> so: +> rpm -i [rpm package] +> and it gives the error: package already installed, so i force it to +> install like so: +> rpm -i --force [rpm package] +> this installs it and then i try to uninstall it again and it still +> gives me the same error: package not installed. +> +> How can i get it to recognize that the package is indeed installed it, +> and/or get it to unstall it? + +You're a bit too vague on your "[rpm package]" here... +Maybe this will help you : + +[root@python apg]# rpm -e apg +[root@python apg]# rpm -ivh apg-1.2.13-fr1.i386.rpm +Preparing... ########################################### +[100%] 1:apg +########################################### [100%][root@python apg]# rpm -e +apg[root@python apg]# rpm -ivh apg-1.2.13-fr1.i386.rpm +Preparing... ########################################### +[100%] 1:apg +########################################### [100%][root@python apg]# rpm -e +apg-1.2.13-fr1[root@python apg]# rpm -ivh apg-1.2.13-fr1.i386.rpm +Preparing... ########################################### +[100%] 1:apg +########################################### [100%][root@python apg]# rpm -e +apg-1.2.13-fr1.i386.rpm error: package apg-1.2.13-fr1.i386.rpm is not +installed[root@python apg]# + +You can just put the name, of the name and version, and even the release, +but the entire filename will not work! + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01072.81ed44b31e111f9c1e47e53f4dfbefe3 b/Ch3/datasets/spam/easy_ham/01072.81ed44b31e111f9c1e47e53f4dfbefe3 new file mode 100644 index 000000000..39f55c572 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01072.81ed44b31e111f9c1e47e53f4dfbefe3 @@ -0,0 +1,121 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:00:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 87D0B16EFC + for ; Mon, 9 Sep 2002 18:00:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:00:00 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g11IdX805308 for + ; Fri, 1 Feb 2002 18:39:33 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11Ic1328696; + Fri, 1 Feb 2002 19:38:01 +0100 +Received: from ematic.com (ematic-ecdc-191-64.digisle.net + [167.216.191.64]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with SMTP id + g11IWm328332 for ; Fri, 1 Feb 2002 19:32:49 +0100 +Received: from bfrench ([65.213.202.212]) by ematic.com ; Fri, + 01 Feb 2002 13:32:49 -0500 +From: "Brian French" +To: +Subject: RE: Prob. w/ install/uninstall +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: <20020201191747.4ca19d1a.matthias@egwn.net> +X-RCPT-To: +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 1 Feb 2002 13:39:31 -0500 +Date: Fri, 1 Feb 2002 13:39:31 -0500 + +oh ok, thanx alot!! i was puttin the entire rpm package name like +php-4.0.4pl1.i386.rpm +that's why it wasn't working. + +-----Original Message----- +From: rpm-zzzlist-admin@freshrpms.net +[mailto:rpm-list-admin@freshrpms.net]On Behalf Of Matthias Saou (by way +of Matthias Saou ) +Sent: Friday, February 01, 2002 1:18 PM +To: rpm-zzzlist@freshrpms.net +Subject: Re: Prob. w/ install/uninstall + + +Once upon a time, Brian wrote : + +> hey i have a problem: +> i have a rpms that i have installed that i want to uninstall, i do it +> like so: +> rpm -e [rpm package] +> and it gives the error: package not installed, so i install it like +> so: +> rpm -i [rpm package] +> and it gives the error: package already installed, so i force it to +> install like so: +> rpm -i --force [rpm package] +> this installs it and then i try to uninstall it again and it still +> gives me the same error: package not installed. +> +> How can i get it to recognize that the package is indeed installed it, +> and/or get it to unstall it? + +You're a bit too vague on your "[rpm package]" here... +Maybe this will help you : + +[root@python apg]# rpm -e apg +[root@python apg]# rpm -ivh apg-1.2.13-fr1.i386.rpm +Preparing... ########################################### +[100%] 1:apg +########################################### [100%][root@python apg]# rpm -e +apg[root@python apg]# rpm -ivh apg-1.2.13-fr1.i386.rpm +Preparing... ########################################### +[100%] 1:apg +########################################### [100%][root@python apg]# rpm -e +apg-1.2.13-fr1[root@python apg]# rpm -ivh apg-1.2.13-fr1.i386.rpm +Preparing... ########################################### +[100%] 1:apg +########################################### [100%][root@python apg]# rpm -e +apg-1.2.13-fr1.i386.rpm error: package apg-1.2.13-fr1.i386.rpm is not +installed[root@python apg]# + +You can just put the name, of the name and version, and even the release, +but the entire filename will not work! + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01073.b7af066dcf93f399434af1a0872a33f0 b/Ch3/datasets/spam/easy_ham/01073.b7af066dcf93f399434af1a0872a33f0 new file mode 100644 index 000000000..3279523c3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01073.b7af066dcf93f399434af1a0872a33f0 @@ -0,0 +1,102 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:00:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E1BF816EFC + for ; Mon, 9 Sep 2002 18:00:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:00:11 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g11LwP811768 for + ; Fri, 1 Feb 2002 21:58:25 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11Lv1307726; + Fri, 1 Feb 2002 22:57:01 +0100 +Received: from Warthog.cg.shawcable.net + (root@h24-64-62-122.cg.shawcable.net [24.64.62.122]) by auth02.nl.egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g11LuW307711 for + ; Fri, 1 Feb 2002 22:56:32 +0100 +Received: (from phil@localhost) by Warthog.cg.shawcable.net + (8.11.6/8.11.6) id g11L3ul03314 for rpm-list@freshrpms.net; Fri, + 1 Feb 2002 14:03:56 -0700 +X-Authentication-Warning: Warthog.cg.shawcable.net: phil set sender to + marmot-linux@shaw.ca using -f +From: Phil Morris +To: rpm-zzzlist@freshrpms.net +Subject: Re: Prob. w/ install/uninstall +Message-Id: <20020201140356.A3308@Warthog.cg.shawcable.net> +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: ; + from bfrench@ematic.com on Fri, Feb 01, 2002 at 12:42:02PM -0500 +X-Operating-System: Linux Warthog.cg.shawcable.net 2.4.9-13 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 1 Feb 2002 14:03:56 -0700 +Date: Fri, 1 Feb 2002 14:03:56 -0700 + +On Fri, Feb 01, 2002 at 12:42:02PM -0500, Brian French wrote: +> hey i have a problem: +> i have a rpms that i have installed that i want to uninstall, i do it +> like so: +> rpm -e [rpm package] +> and it gives the error: package not installed, so i install it like +> so: +Its a little confusing but you install rpms like +rpm -ivh packagename-0.1.1.rpm +uninstalls must be done without the version info like +rpm -e packagename ie: rpm -e sendmail or +rpm -e sendmail-devel. + +give that a go and it should work np. + +Phil, + + +> rpm -i [rpm package] +> and it gives the error: package already installed, so i force it to +> install like so: +> rpm -i --force [rpm package] +> this installs it and then i try to uninstall it again and it still +> gives me the same error: package not installed. +> +> How can i get it to recognize that the package is indeed installed it, +> and/or get it to unstall it? +> +> Thanx in advance, +> Brian French +> +> -French +> +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list + +-- +"I say, bring on the brand new renaissance. 'Cause I +think I'm ready. I've been shaking all night long... +But my hands are steady." +Gord Downie http://www.thehip.com + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01074.8590d61ac0aeeadb58dc2f2ba776c406 b/Ch3/datasets/spam/easy_ham/01074.8590d61ac0aeeadb58dc2f2ba776c406 new file mode 100644 index 000000000..8d4eebf3c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01074.8590d61ac0aeeadb58dc2f2ba776c406 @@ -0,0 +1,93 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:00:21 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9D98A16EFC + for ; Mon, 9 Sep 2002 18:00:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:00:20 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g11MGS812405 for + ; Fri, 1 Feb 2002 22:16:28 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g11MF0308879; + Fri, 1 Feb 2002 23:15:00 +0100 +Received: from drone4.qsi.net.nz (drone4-svc-skyt.qsi.net.nz + [202.89.128.4]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with SMTP id + g11MEh308869 for ; Fri, 1 Feb 2002 23:14:43 +0100 +Received: (qmail 95088 invoked by uid 0); 1 Feb 2002 22:15:02 -0000 +Received: from unknown (HELO se7en.org) ([202.89.145.8]) (envelope-sender + ) by 0 (qmail-ldap-1.03) with SMTP for + ; 1 Feb 2002 22:15:02 -0000 +Received: from spawn.se7en.org ([10.0.0.3]) by se7en.org with esmtp (Exim + 3.12 #1 (Debian)) id 16WnZF-00036C-00 for ; + Sat, 02 Feb 2002 12:58:05 +1300 +From: Mark Derricutt +To: rpm-zzzlist@freshrpms.net +Subject: problems with apt update +Message-Id: <14220000.1012602017@spawn.se7en.org> +X-Mailer: Mulberry/2.1.2 (Linux/x86) +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Content-Disposition: inline +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 02 Feb 2002 11:20:17 +1300 +Date: Sat, 02 Feb 2002 11:20:17 +1300 + +Hiya, I always seem to get errors when I do an "apt update", is this a +problem on the repository itself, or on my end, or possibly a timeout in +the connection due to my connection being a crappy modem? + +[root@spawn root]# apt-get update +Hit http://apt.nixia.no redhat/7.2/i386/base/pkglist.gnomehide +Hit http://apt.freshrpms.net redhat/7.2/i386/base/pkglist.os +Ign http://apt.freshrpms.net redhat/7.2/i386 release.os +Err http://apt.freshrpms.net redhat/7.2/i386/base/pkglist.updates + Bad header line +Hit http://apt.freshrpms.net redhat/7.2/i386 release.updates +Err http://apt.freshrpms.net redhat/7.2/i386/base/pkglist.freshrpms + 400 Bad Request +Err http://apt.freshrpms.net redhat/7.2/i386 release.freshrpms + Bad header line +Hit http://apt.freshrpms.net redhat/7.2/i386/base/srclist.freshrpms +Ign http://apt.nixia.no redhat/7.2/i386 release.gnomehide +Ign http://apt.nixia.no redhat/7.2/i386/base/mirrors +Hit http://apt.freshrpms.net redhat/7.2/i386 release.freshrpms +Ign http://apt.freshrpms.net redhat/7.2/i386/base/mirrors +Ign http://apt.freshrpms.net redhat/7.2/i386/base/mirrors +Ign http://apt.freshrpms.net redhat/7.2/i386/base/mirrors +Ign http://apt.freshrpms.net redhat/7.2/i386/base/mirrors +Failed to fetch +http://apt.freshrpms.net/redhat/7.2/i386/base/pkglist.updates + Bad header line +Failed to fetch +http://apt.freshrpms.net/redhat/7.2/i386/base/pkglist.freshrpms + 400 Bad Request +Failed to fetch +http://apt.freshrpms.net/redhat/7.2/i386/base/release.freshrpms + Bad header line + + -- \m/ -- + "...if I seem super human I have been misunderstood." (c) Dream Theater + mark@talios.com - ICQ: 1934853 JID: talios@myjabber.net + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01075.510d4d750a3f004389358a0c715175a5 b/Ch3/datasets/spam/easy_ham/01075.510d4d750a3f004389358a0c715175a5 new file mode 100644 index 000000000..b160ebb49 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01075.510d4d750a3f004389358a0c715175a5 @@ -0,0 +1,86 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:00:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9FDD516EFC + for ; Mon, 9 Sep 2002 18:00:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:00:29 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g123ec832356 for + ; Sat, 2 Feb 2002 03:40:38 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g123a1327082; + Sat, 2 Feb 2002 04:36:02 +0100 +Received: from imf17bis.bellsouth.net (mail317.mail.bellsouth.net + [205.152.58.177]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g123Zp327072 for ; Sat, 2 Feb 2002 04:35:51 +0100 +Received: from adsl-157-22-214.msy.bellsouth.net ([66.157.22.214]) by + imf17bis.bellsouth.net (InterMail vM.5.01.04.00 201-253-122-122-20010827) + with ESMTP id + <20020202033703.ZMCA22816.imf17bis.bellsouth.net@adsl-157-22-214.msy.bellsouth.net> + for ; Fri, 1 Feb 2002 22:37:03 -0500 +Subject: Re: problems with 'apt-get -f install' +From: Lance +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <14220000.1012602017@spawn.se7en.org> +References: <14220000.1012602017@spawn.se7en.org> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2 +Message-Id: <1012620964.5580.5.camel@localhost.localdomain> +MIME-Version: 1.0 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 01 Feb 2002 21:36:04 -0600 +Date: 01 Feb 2002 21:36:04 -0600 + +I have failed dependencies in RPM database to I am unable to use +apt-get. I requests to run 'apt-get -f install' to fix these +dependencies, however, I get these errors when running 'apt-get -f +install' : + +[root@localhost root]# apt-get -f install +Processing File Dependencies... Done +Reading Package Lists... Done +Building Dependency Tree... Done +Correcting dependencies... Done +The following extra packages will be installed: + libgcj +The following NEW packages will be installed: + libgcj +0 packages upgraded, 1 newly installed, 0 to remove(replace) and 68 not +upgraded. +Need to get 2407kB of archives. After unpacking 8598kB will be used. +Do you want to continue? [Y/n] Y +Get:1 http://apt-rpm.tuxfamily.org redhat-7.2-i386/redhat/os libgcj +2.96-27 [2407kB] +Fetched 2407kB in 22s +(105kB/s) +Executing RPM (-U)... +Preparing... ########################################### +[100%] + 1:libgcj error: unpacking of archive failed on file +/usr/share/libgcj.zip;3c5b5e75: cpio: MD5 sum mismatch +E: Sub-process /bin/rpm returned an error code (1) +[root@localhost root]# + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01076.3a56372738701391cf04b8a1fd379d3b b/Ch3/datasets/spam/easy_ham/01076.3a56372738701391cf04b8a1fd379d3b new file mode 100644 index 000000000..5d2215942 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01076.3a56372738701391cf04b8a1fd379d3b @@ -0,0 +1,118 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:00:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9697B16EFC + for ; Mon, 9 Sep 2002 18:00:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:00:37 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g12CD3816653 for + ; Sat, 2 Feb 2002 12:13:03 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g12CC2323019; + Sat, 2 Feb 2002 13:12:02 +0100 +Received: from devel.freshrpms.net (80-24-132-206.uc.nombres.ttd.es + [80.24.132.206]) (authenticated) by auth02.nl.egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g12CBZ323009 for + ; Sat, 2 Feb 2002 13:11:35 +0100 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: problems with apt update +Message-Id: <20020202130604.54a97e4e.matthias@egwn.net> +In-Reply-To: <14220000.1012602017@spawn.se7en.org> +References: <14220000.1012602017@spawn.se7en.org> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.7.0claws5 (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 2 Feb 2002 13:06:04 +0100 +Date: Sat, 2 Feb 2002 13:06:04 +0100 + +Once upon a time, Mark wrote : + +> Hiya, I always seem to get errors when I do an "apt update", is this a +> problem on the repository itself, or on my end, or possibly a timeout in +> the connection due to my connection being a crappy modem? +> +> [root@spawn root]# apt-get update +> Hit http://apt.nixia.no redhat/7.2/i386/base/pkglist.gnomehide +> Hit http://apt.freshrpms.net redhat/7.2/i386/base/pkglist.os +> Ign http://apt.freshrpms.net redhat/7.2/i386 release.os +> Err http://apt.freshrpms.net redhat/7.2/i386/base/pkglist.updates +> Bad header line +> Hit http://apt.freshrpms.net redhat/7.2/i386 release.updates +> Err http://apt.freshrpms.net redhat/7.2/i386/base/pkglist.freshrpms +> 400 Bad Request +> Err http://apt.freshrpms.net redhat/7.2/i386 release.freshrpms +> Bad header line +> Hit http://apt.freshrpms.net redhat/7.2/i386/base/srclist.freshrpms +> Ign http://apt.nixia.no redhat/7.2/i386 release.gnomehide +> Ign http://apt.nixia.no redhat/7.2/i386/base/mirrors +> Hit http://apt.freshrpms.net redhat/7.2/i386 release.freshrpms +[...] + +It works for me (it should works with or without the "en" subdirectory). +Does it always give you the same error each time? Do you use an proxy +server? + +[root@python root]# apt-get update +Hit http://apt.freshrpms.net redhat/7.2/en/i386/base/srclist.os +Hit http://apt.freshrpms.net redhat/7.2/en/i386 release.os +Hit http://apt.freshrpms.net redhat/7.2/en/i386/base/srclist.updates +Hit http://apt.freshrpms.net redhat/7.2/en/i386 release.updates +Get:1 http://apt.freshrpms.net redhat/7.2/en/i386/base/pkglist.os [1035kB] +Hit http://apt.freshrpms.net redhat/7.2/en/i386 release.os +Get:2 http://apt.freshrpms.net redhat/7.2/en/i386/base/pkglist.updates +[331kB] Hit http://apt.freshrpms.net redhat/7.2/en/i386 release.updates +Hit http://apt.freshrpms.net redhat/7.2/en/i386/base/pkglist.freshrpms +Hit http://apt.freshrpms.net redhat/7.2/en/i386 release.freshrpms +Hit http://apt.freshrpms.net redhat/7.2/en/i386/base/srclist.os +Hit http://apt.freshrpms.net redhat/7.2/en/i386 release.os +Hit http://apt.freshrpms.net redhat/7.2/en/i386/base/srclist.updates +Hit http://apt.freshrpms.net redhat/7.2/en/i386 release.updates +Hit http://apt.freshrpms.net redhat/7.2/en/i386/base/srclist.freshrpms +Hit http://apt.freshrpms.net redhat/7.2/en/i386 release.freshrpms +Ign http://apt.freshrpms.net redhat/7.2/en/$(ARCH)/base/mirrors +Ign http://apt.freshrpms.net redhat/7.2/en/$(ARCH)/base/mirrors +Ign http://apt.freshrpms.net redhat/7.2/en/$(ARCH)/base/mirrors +Fetched 1366kB in 1m16s (17.9kB/s) +Processing File Dependencies... Done +Reading Package Lists... Done +Building Dependency Tree... Done +W: http://apt.freshrpms.net/ will not be authenticated. +W: http://apt.freshrpms.net/ will not be authenticated. +W: http://apt.freshrpms.net/ will not be authenticated. +[root@python root]# + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01077.01e634786d242f323e683dd39e468c47 b/Ch3/datasets/spam/easy_ham/01077.01e634786d242f323e683dd39e468c47 new file mode 100644 index 000000000..0be70a262 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01077.01e634786d242f323e683dd39e468c47 @@ -0,0 +1,78 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:00:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C6ED916EFC + for ; Mon, 9 Sep 2002 18:00:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:00:45 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g12CFE816686 for + ; Sat, 2 Feb 2002 12:15:14 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g12CF1323284; + Sat, 2 Feb 2002 13:15:01 +0100 +Received: from devel.freshrpms.net (80-24-132-206.uc.nombres.ttd.es + [80.24.132.206]) (authenticated) by auth02.nl.egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g12CE7323271 for + ; Sat, 2 Feb 2002 13:14:07 +0100 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: problems with 'apt-get -f install' +Message-Id: <20020202130844.32a8b78b.matthias@egwn.net> +In-Reply-To: <1012620964.5580.5.camel@localhost.localdomain> +References: <14220000.1012602017@spawn.se7en.org> + <1012620964.5580.5.camel@localhost.localdomain> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.7.0claws5 (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 2 Feb 2002 13:08:44 +0100 +Date: Sat, 2 Feb 2002 13:08:44 +0100 + +Once upon a time, Lance wrote : + +> I have failed dependencies in RPM database to I am unable to use +> apt-get. I requests to run 'apt-get -f install' to fix these +> dependencies, however, I get these errors when running 'apt-get -f +> install' : +[...] +> error: unpacking of archive failed on file +> /usr/share/libgcj.zip;3c5b5e75: cpio: MD5 sum mismatch +> E: Sub-process /bin/rpm returned an error code (1) +> [root@localhost root]# + +I'd say that the file apt downloaded is corrupted. Maybe trying "apt-get +clean" to remove all downloaded files first would solve the problem. + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01078.e83af8e93466283be2ba03e34854682e b/Ch3/datasets/spam/easy_ham/01078.e83af8e93466283be2ba03e34854682e new file mode 100644 index 000000000..04e0b2b05 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01078.e83af8e93466283be2ba03e34854682e @@ -0,0 +1,91 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:00:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7D89E16EFC + for ; Mon, 9 Sep 2002 18:00:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:00:53 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g12EC5820412 for + ; Sat, 2 Feb 2002 14:12:05 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g12EB5329636; + Sat, 2 Feb 2002 15:11:05 +0100 +Received: from imf16bis.bellsouth.net (mail016.mail.bellsouth.net + [205.152.58.36]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g12EAn329625 for ; Sat, 2 Feb 2002 15:10:49 +0100 +Received: from adsl-157-20-8.msy.bellsouth.net ([66.157.20.8]) by + imf16bis.bellsouth.net (InterMail vM.5.01.04.00 201-253-122-122-20010827) + with ESMTP id + <20020202141206.MQVJ18740.imf16bis.bellsouth.net@adsl-157-20-8.msy.bellsouth.net> + for ; Sat, 2 Feb 2002 09:12:06 -0500 +Subject: Re: problems with 'apt-get -f install' +From: Lance +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20020202130844.32a8b78b.matthias@egwn.net> +References: <14220000.1012602017@spawn.se7en.org> + <1012620964.5580.5.camel@localhost.localdomain> + <20020202130844.32a8b78b.matthias@egwn.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2 +Message-Id: <1012659069.7723.1.camel@localhost.localdomain> +MIME-Version: 1.0 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 02 Feb 2002 08:11:08 -0600 +Date: 02 Feb 2002 08:11:08 -0600 + +Hello, + +Tried 'apt-get clean' with same results. + +On Sat, 2002-02-02 at 06:08, Matthias Saou wrote: +> Once upon a time, Lance wrote : +> +> > I have failed dependencies in RPM database to I am unable to use +> > apt-get. I requests to run 'apt-get -f install' to fix these +> > dependencies, however, I get these errors when running 'apt-get -f +> > install' : +> [...] +> > error: unpacking of archive failed on file +> > /usr/share/libgcj.zip;3c5b5e75: cpio: MD5 sum mismatch +> > E: Sub-process /bin/rpm returned an error code (1) +> > [root@localhost root]# +> +> I'd say that the file apt downloaded is corrupted. Maybe trying "apt-get +> clean" to remove all downloaded files first would solve the problem. +> +> Matthias +> +> -- +> Matthias Saou World Trade Center +> ------------- Edificio Norte 4 Planta +> System and Network Engineer 08039 Barcelona, Spain +> Electronic Group Interactive Phone : +34 936 00 23 23 +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01079.da9e5ee6e70ae459ef6cc777d7b1621f b/Ch3/datasets/spam/easy_ham/01079.da9e5ee6e70ae459ef6cc777d7b1621f new file mode 100644 index 000000000..998fb3248 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01079.da9e5ee6e70ae459ef6cc777d7b1621f @@ -0,0 +1,76 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:01:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 62CAC16EFC + for ; Mon, 9 Sep 2002 18:01:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:01:02 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g12LGo806449 for + ; Sat, 2 Feb 2002 21:16:51 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g12LG1321570; + Sat, 2 Feb 2002 22:16:01 +0100 +Received: from drone5.qsi.net.nz (drone5-svc-skyt.qsi.net.nz + [202.89.128.5]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with SMTP id + g12LF7321559 for ; Sat, 2 Feb 2002 22:15:07 +0100 +Received: (qmail 37937 invoked by uid 0); 2 Feb 2002 21:15:06 -0000 +Received: from unknown (HELO se7en.org) ([202.89.145.8]) (envelope-sender + ) by 0 (qmail-ldap-1.03) with SMTP for + ; 2 Feb 2002 21:15:06 -0000 +Received: from spawn.se7en.org ([10.0.0.3]) by se7en.org with esmtp (Exim + 3.12 #1 (Debian)) id 16X96G-0004xf-00 for ; + Sun, 03 Feb 2002 11:57:36 +1300 +From: Mark Derricutt +To: freshrpms +Subject: creating rpms with subdirs (install command) +Message-Id: <2060000.1012684767@spawn.se7en.org> +X-Mailer: Mulberry/2.1.2 (Linux/x86) +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Content-Disposition: inline +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 03 Feb 2002 10:19:27 +1300 +Date: Sun, 03 Feb 2002 10:19:27 +1300 + +Hi, I'm building an rpm for the resin webserver, and I basically want to +install the entire tarball under a diretory, but, the tarball includes +subdirectorys, in my spec i have: + + +install -s -m 755 %{name}-%{version}.%{release}/* \ + $RPM_BUILD_ROOT/usr/local/resin + +and I'm getting: + +install: `resin-2.0.5/bin' is a directory +install: `resin-2.0.5/conf' is a directory + +Is there a proper/nice way I should handle this? + + + -- \m/ -- + "...if I seem super human I have been misunderstood." (c) Dream Theater + mark@talios.com - ICQ: 1934853 JID: talios@myjabber.net + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01080.b8d12c010e45434e95f67889e26ba456 b/Ch3/datasets/spam/easy_ham/01080.b8d12c010e45434e95f67889e26ba456 new file mode 100644 index 000000000..93f8d8510 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01080.b8d12c010e45434e95f67889e26ba456 @@ -0,0 +1,75 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:01:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 567D716EFC + for ; Mon, 9 Sep 2002 18:01:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:01:10 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g14CCY806776 for + ; Mon, 4 Feb 2002 12:12:34 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g14CB6314202; + Mon, 4 Feb 2002 13:11:06 +0100 +Received: from fep02-app.kolumbus.fi (fep02-0.kolumbus.fi [193.229.0.44]) + by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g14CAm314186 for + ; Mon, 4 Feb 2002 13:10:49 +0100 +Received: from pihlaja.kotilo ([62.248.147.215]) by fep02-app.kolumbus.fi + (InterMail vM.5.01.03.15 201-253-122-118-115-20011108) with ESMTP id + <20020204121034.DZCT1068.fep02-app.kolumbus.fi@pihlaja.kotilo> for + ; Mon, 4 Feb 2002 14:10:34 +0200 +Received: (from peter@localhost) by pihlaja.kotilo (8.11.6/8.11.6) id + g14CXTP02650 for rpm-list@freshrpms.net; Mon, 4 Feb 2002 14:33:29 +0200 +From: Peter Peltonen +To: rpm-zzzlist@freshrpms.net +Subject: Re: http://apt.nixia.no/ +Message-Id: <20020204143329.B2626@pihlaja.kotilo> +References: <20020201150022.B11472@cs.helsinki.fi> + <20020201153541.1321cd9b.matthias@egwn.net> + <20020201165435.C11472@cs.helsinki.fi> + <20020201161552.3497fbfd.matthias@egwn.net> + <20020201174132.A8690@cs.helsinki.fi> +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Disposition: inline +Content-Transfer-Encoding: 8bit +User-Agent: Mutt/1.2.5i +In-Reply-To: <20020201174132.A8690@cs.helsinki.fi>; from + harri.haataja@cs.helsinki.fi on Fri, Feb 01, 2002 at 05:41:32PM +0200 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 4 Feb 2002 14:33:29 +0200 +Date: Mon, 4 Feb 2002 14:33:29 +0200 + +On Fri, Feb 01, 2002 at 05:41:32PM +0200, Harri Haataja wrote: +> I have a local one for the main and upgrades from somewhere plus my own +> at $ORKPLACE. + +Olen ajatellut pystyttää itselleni lokaalin apt-varaston, kun Suomesta ei +tunnu löytyvän julkista peiliä. Osaisitko avittaa hiukan asiassa, eli +kuinka lähteä liikkeelle? Ensin kannattanee peilata varsinainen RH:n rpm:t +jostain, vaan millä softalla (rsync?) ja mistä (funet?) tuo kannattaa +tehdä, ajatuksia? + +-- +Peter + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01081.844461cf79fe409cdfed1c9456c064f0 b/Ch3/datasets/spam/easy_ham/01081.844461cf79fe409cdfed1c9456c064f0 new file mode 100644 index 000000000..d7a047347 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01081.844461cf79fe409cdfed1c9456c064f0 @@ -0,0 +1,100 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:01:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F2E5216EFC + for ; Mon, 9 Sep 2002 18:01:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:01:18 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g14CU9807477 for + ; Mon, 4 Feb 2002 12:30:09 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g14CT1315524; + Mon, 4 Feb 2002 13:29:01 +0100 +Received: from fep02-app.kolumbus.fi (fep02-0.kolumbus.fi [193.229.0.44]) + by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g14CSd315500 for + ; Mon, 4 Feb 2002 13:28:39 +0100 +Received: from pihlaja.kotilo ([62.248.147.215]) by fep02-app.kolumbus.fi + (InterMail vM.5.01.03.15 201-253-122-118-115-20011108) with ESMTP id + <20020204122844.EEAV1068.fep02-app.kolumbus.fi@pihlaja.kotilo> for + ; Mon, 4 Feb 2002 14:28:44 +0200 +Received: (from peter@localhost) by pihlaja.kotilo (8.11.6/8.11.6) id + g14CpeG02667 for rpm-list@freshrpms.net; Mon, 4 Feb 2002 14:51:40 +0200 +From: Peter Peltonen +To: rpm-zzzlist@freshrpms.net +Subject: Re: http://apt.nixia.no/ +Message-Id: <20020204145140.C2626@pihlaja.kotilo> +References: <20020201150022.B11472@cs.helsinki.fi> + <20020201153541.1321cd9b.matthias@egwn.net> + <20020201165435.C11472@cs.helsinki.fi> + <20020201161552.3497fbfd.matthias@egwn.net> + <20020201174132.A8690@cs.helsinki.fi> + <20020204143329.B2626@pihlaja.kotilo> +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Disposition: inline +Content-Transfer-Encoding: 8bit +User-Agent: Mutt/1.2.5i +In-Reply-To: <20020204143329.B2626@pihlaja.kotilo>; from pisara@iki.fi on + Mon, Feb 04, 2002 at 02:33:29PM +0200 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 4 Feb 2002 14:51:40 +0200 +Date: Mon, 4 Feb 2002 14:51:40 +0200 + +Sorry about that :) + +Didn't think before sending... So I didn't realize that Reply-To was to +the list and not to the sender (as it usually is). + +Anyawy, I was asking Harri if he could point me a few advices on how to +build my own apt repositry for RH updates. There is a tutorial of somekind +at http://apt-rpm.tuxfamily.org/ which I'm following right now, but if +there is some other good advices, let me know! + +Regards, +Peter + + +On Mon, Feb 04, 2002 at 02:33:29PM +0200, Peter Peltonen wrote: +> On Fri, Feb 01, 2002 at 05:41:32PM +0200, Harri Haataja wrote: +> > I have a local one for the main and upgrades from somewhere plus my own +> > at $ORKPLACE. +> +> Olen ajatellut pystyttää itselleni lokaalin apt-varaston, kun Suomesta ei +> tunnu löytyvän julkista peiliä. Osaisitko avittaa hiukan asiassa, eli +> kuinka lähteä liikkeelle? Ensin kannattanee peilata varsinainen RH:n rpm:t +> jostain, vaan millä softalla (rsync?) ja mistä (funet?) tuo kannattaa +> tehdä, ajatuksia? +> +> -- +> Peter +> +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list +> + +-- +Peter + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01082.39917c590e0204c5de0142acd3fb3d08 b/Ch3/datasets/spam/easy_ham/01082.39917c590e0204c5de0142acd3fb3d08 new file mode 100644 index 000000000..a9edc0c4f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01082.39917c590e0204c5de0142acd3fb3d08 @@ -0,0 +1,82 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:01:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D0BD716EFC + for ; Mon, 9 Sep 2002 18:01:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:01:25 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g14CVM807526 for + ; Mon, 4 Feb 2002 12:31:22 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g14CV1315577; + Mon, 4 Feb 2002 13:31:01 +0100 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g14CUN315554 for + ; Mon, 4 Feb 2002 13:30:23 +0100 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: http://apt.nixia.no/ +Message-Id: <20020204132927.3dc863a0.matthias@egwn.net> +In-Reply-To: <20020204143329.B2626@pihlaja.kotilo> +References: <20020201150022.B11472@cs.helsinki.fi> + <20020201153541.1321cd9b.matthias@egwn.net> + <20020201165435.C11472@cs.helsinki.fi> + <20020201161552.3497fbfd.matthias@egwn.net> + <20020201174132.A8690@cs.helsinki.fi> + <20020204143329.B2626@pihlaja.kotilo> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.7.0claws5 (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 4 Feb 2002 13:29:27 +0100 +Date: Mon, 4 Feb 2002 13:29:27 +0100 + +Once upon a time, Peter wrote : + +> On Fri, Feb 01, 2002 at 05:41:32PM +0200, Harri Haataja wrote: +> > I have a local one for the main and upgrades from somewhere plus my own +> > at $ORKPLACE. +> +> Olen ajatellut pystyttää itselleni lokaalin apt-varaston, kun Suomesta ei +> tunnu löytyvän julkista peiliä. Osaisitko avittaa hiukan asiassa, eli +> kuinka lähteä liikkeelle? Ensin kannattanee peilata varsinainen RH:n +> rpm:t jostain, vaan millä softalla (rsync?) ja mistä (funet?) tuo +> kannattaa tehdä, ajatuksia? + +Wow, Finnish seems even more complicated than German to me :-) +Could you send an English translation next time? I really didn't understand +a thing and I assume I'm not the only one ;-) + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01083.68ca1eec938ec95c00e6fcd3ed282dd3 b/Ch3/datasets/spam/easy_ham/01083.68ca1eec938ec95c00e6fcd3ed282dd3 new file mode 100644 index 000000000..cb6f68d82 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01083.68ca1eec938ec95c00e6fcd3ed282dd3 @@ -0,0 +1,67 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:01:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6A27116EFC + for ; Mon, 9 Sep 2002 18:01:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:01:33 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g14D2L808736 for + ; Mon, 4 Feb 2002 13:02:22 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g14D11317658; + Mon, 4 Feb 2002 14:01:01 +0100 +Received: from gaupe.sunnmore.net (c188s126h1.upc.chello.no + [62.179.177.188]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with SMTP id + g14D0M317622 for ; Mon, 4 Feb 2002 14:00:22 +0100 +Received: (qmail 28308 invoked from network); 4 Feb 2002 13:00:26 -0000 +Received: from ekorn.sunnmore.no (HELO sunnmore.net) (10.0.0.1) by + gaupe.sunnmore.net with SMTP; 4 Feb 2002 13:00:26 -0000 +Message-Id: <3C5E85EA.2020402@sunnmore.net> +From: Roy-Magne Mo +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.8+) Gecko/20020203 +X-Accept-Language: nn, no, en-us +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: http://apt.nixia.no/ +References: <20020201150022.B11472@cs.helsinki.fi> + <20020201153541.1321cd9b.matthias@egwn.net> + <20020201165435.C11472@cs.helsinki.fi> + <20020201161552.3497fbfd.matthias@egwn.net> + <20020201174132.A8690@cs.helsinki.fi> + <20020204143329.B2626@pihlaja.kotilo> + <20020204145140.C2626@pihlaja.kotilo> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 04 Feb 2002 14:00:26 +0100 +Date: Mon, 04 Feb 2002 14:00:26 +0100 + +Peter Peltonen wrote: +> Sorry about that :) +> +> Didn't think before sending... So I didn't realize that Reply-To was to +> the list and not to the sender (as it usually is). + +How about removing the reply-to to the list? + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01084.f085d737f5244ffe14e8743e9226fd30 b/Ch3/datasets/spam/easy_ham/01084.f085d737f5244ffe14e8743e9226fd30 new file mode 100644 index 000000000..86d760656 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01084.f085d737f5244ffe14e8743e9226fd30 @@ -0,0 +1,127 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:01:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F2D1C16EFC + for ; Mon, 9 Sep 2002 18:01:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:01:40 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g14EhS812292 for + ; Mon, 4 Feb 2002 14:43:28 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g14Eh1324509; + Mon, 4 Feb 2002 15:43:01 +0100 +Received: from porsta.cs.Helsinki.FI (root@porsta.cs.Helsinki.FI + [128.214.48.124]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g14Eg9324446 for ; Mon, 4 Feb 2002 15:42:09 +0100 +Received: from melkki.cs.Helsinki.FI (sslwrap@localhost [127.0.0.1]) by + porsta.cs.Helsinki.FI (8.11.6/8.11.6) with ESMTP id g14EgAp17164 for + ; Mon, 4 Feb 2002 16:42:10 +0200 +Received: (from hhaataja@localhost) by melkki.cs.Helsinki.FI + (8.11.6/8.11.2) id g14Eg5A26662 for rpm-list@freshrpms.net; Mon, + 4 Feb 2002 16:42:05 +0200 +From: Harri Haataja +To: rpm-zzzlist@freshrpms.net +Subject: Re: http://apt.nixia.no/ +Message-Id: <20020204164205.A20308@cs.helsinki.fi> +References: <20020201150022.B11472@cs.helsinki.fi> + <20020201153541.1321cd9b.matthias@egwn.net> + <20020201165435.C11472@cs.helsinki.fi> + <20020201161552.3497fbfd.matthias@egwn.net> + <20020201174132.A8690@cs.helsinki.fi> + <20020204143329.B2626@pihlaja.kotilo> +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-15 +Content-Disposition: inline +Content-Transfer-Encoding: 8bit +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <20020204143329.B2626@pihlaja.kotilo>; from pisara@iki.fi on + Mon, Feb 04, 2002 at 02:33:29PM +0200 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 4 Feb 2002 16:42:05 +0200 +Date: Mon, 4 Feb 2002 16:42:05 +0200 + +On Mon, Feb 04, 2002 at 02:33:29PM +0200, Peter Peltonen wrote: +> On Fri, Feb 01, 2002 at 05:41:32PM +0200, Harri Haataja wrote: +> > I have a local one for the main and upgrades from somewhere plus my own +> > at $ORKPLACE. +> +> Olen ajatellut pystyttää itselleni lokaalin apt-varaston, kun Suomesta ei +> tunnu löytyvän julkista peiliä. Osaisitko avittaa hiukan asiassa, eli +> kuinka lähteä liikkeelle? Ensin kannattanee peilata varsinainen RH:n rpm:t +> jostain, vaan millä softalla (rsync?) ja mistä (funet?) tuo kannattaa +> tehdä, ajatuksia? + +I'll post my own repository story here anyway, hope no-one minds. +It may freely be commented on or used in another text. + +I have a directory like this: +$ tree -d +. +|-- current7 +| |-- SRPMS.current +| |-- SRPMS.gcc3 +| `-- redhat +| |-- RPMS.current +| |-- RPMS.gcc3 +| `-- base +|-- redhat-7_2 +| |-- SRPMS.os +| `-- redhat +| |-- RPMS.os -> +| `-- base +`-- testing + |-- SRPMS.testing + `-- redhat + |-- RPMS.testing + `-- base + +27 directories + +I throw updates to current7's rpms and my own stuff (with makefile :) to +testing. +After each new package, +nice genbasedir -s --progress --topdir=$TOPDIR/ \ +testing/redhat testing + +(for -s to work, you need to make release files, pinch someones for +exmple) + +This stuff is found under apache. I put that url, my keys and all that +into apt conf on the machines on the network and apt away. + +As for .fi mirrors, funet is very slow. I think I use tuxfamily for +updates but when I see errata I usually also put that to my own one so +rest of the machines have a shorter path to it. +Funet hosts a whole load of mirrors and projects (it used to be (is?) +the main mirror for Linux. It was one of the big pub ftp sites). If +there was a definite apt repository, maybe they might mirror that as +well. I doubt RH would be very keen on using apt and forking a +distribution doesn't seem like an easy option, someone should just start +a project. + +-- +"Barry also was quick to point out that the Titanium uses torque screws as +opposed to Phillips screws. We're not sure why this matters even a little +bit, but Barry sure seemed to think it was interesting. +That's why Mac geeks scare us." -- ZDNet Powerbook Titanium review + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01085.15903c3e109d4d35eae6bf5ef80acf77 b/Ch3/datasets/spam/easy_ham/01085.15903c3e109d4d35eae6bf5ef80acf77 new file mode 100644 index 000000000..dd96ef2c8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01085.15903c3e109d4d35eae6bf5ef80acf77 @@ -0,0 +1,80 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:01:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B358616EFC + for ; Mon, 9 Sep 2002 18:01:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:01:48 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g14Foq814708 for + ; Mon, 4 Feb 2002 15:50:52 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g14Fo1329371; + Mon, 4 Feb 2002 16:50:01 +0100 +Received: from porsta.cs.Helsinki.FI (root@porsta.cs.Helsinki.FI + [128.214.48.124]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g14FnB329344 for ; Mon, 4 Feb 2002 16:49:11 +0100 +Received: from melkki.cs.Helsinki.FI (sslwrap@localhost [127.0.0.1]) by + porsta.cs.Helsinki.FI (8.11.6/8.11.6) with ESMTP id g14FnHp21550 for + ; Mon, 4 Feb 2002 17:49:18 +0200 +Received: (from hhaataja@localhost) by melkki.cs.Helsinki.FI + (8.11.6/8.11.2) id g14EwrG27875 for rpm-list@freshrpms.net; Mon, + 4 Feb 2002 16:58:53 +0200 +From: Harri Haataja +To: rpm-zzzlist@freshrpms.net +Subject: Re: About apt, kernel updates and dist-upgrade +Message-Id: <20020204165853.C20308@cs.helsinki.fi> +References: <20020204170408.F2626@pihlaja.kotilo> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <20020204170408.F2626@pihlaja.kotilo>; from pisara@iki.fi on + Mon, Feb 04, 2002 at 05:04:08PM +0200 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 4 Feb 2002 16:58:53 +0200 +Date: Mon, 4 Feb 2002 16:58:53 +0200 + +On Mon, Feb 04, 2002 at 05:04:08PM +0200, Peter Peltonen wrote: +> I started wondering how does apt react when it finds a newer kernel in the +> bunch of "to be updated" files? + +Look at /etc/apt/apt.conf. I think ^kernel$ matches the kernel packages +(apart from those matched by the rest, smp, enterprise). +I think it won't do anything about the kernels. Come to think of it, the +abovementioned might have nothing to do with it. + +I explicitly use apt-get install kernel and then from the list pick a +version and then install kernel#2.4.foo-bar. + +> And has anyone ever tried to do a dist-upgrade, say from 7.1 to 7.2? +> Should it work? If not, why? + +Should. Haven't tried with dist-upgrade but I have put 7.2 netboot +mirror (ie, 7.2) into sources.list and run install step-by-step for IIRC +everything. Worked ok. I think there'll be a few .rpmnew files worth +checking such as, especially, passwd and group. +I think there was a group change. "lock" ? + +-- +It feels great to wake up and not know what day it is, doesn't it? + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01086.b08af755794dea40b0f9fac774923811 b/Ch3/datasets/spam/easy_ham/01086.b08af755794dea40b0f9fac774923811 new file mode 100644 index 000000000..7e74d2b5b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01086.b08af755794dea40b0f9fac774923811 @@ -0,0 +1,79 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:01:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 407C816EFC + for ; Mon, 9 Sep 2002 18:01:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:01:56 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g14FuI814976 for + ; Mon, 4 Feb 2002 15:56:18 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g14Ft1329743; + Mon, 4 Feb 2002 16:55:01 +0100 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g14FsF329714 for + ; Mon, 4 Feb 2002 16:54:15 +0100 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: About apt, kernel updates and dist-upgrade +Message-Id: <20020204165314.389e52ec.matthias@egwn.net> +In-Reply-To: <20020204170408.F2626@pihlaja.kotilo> +References: <20020204170408.F2626@pihlaja.kotilo> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.7.0claws5 (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 4 Feb 2002 16:53:14 +0100 +Date: Mon, 4 Feb 2002 16:53:14 +0100 + +Once upon a time, Peter wrote : + +> I started wondering how does apt react when it finds a newer kernel in +> the bunch of "to be updated" files? + +It skips it. See the /etc/apt/apt.conf file for this. + +> And has anyone ever tried to do a dist-upgrade, say from 7.1 to 7.2? +> Should it work? If not, why? + +I've done a dist-upgrade from 7.2 to a quite broken rawhide release... it +was a mess, still, it went much faster and smoother than if I had done it +"manually" with rpm -U or -F. I think that updates between stable releases +should still be done with the installer since IIRC, sometimes a few +twitches are done by anaconda to migrate configurations to new formats. It +should work though... I still prefer backuping config files and +reinstalling a clean system when I have the time. + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01087.cbaefdc8d4dc306f627eac05955cb858 b/Ch3/datasets/spam/easy_ham/01087.cbaefdc8d4dc306f627eac05955cb858 new file mode 100644 index 000000000..5cd6f0e39 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01087.cbaefdc8d4dc306f627eac05955cb858 @@ -0,0 +1,80 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:02:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DA64216EFC + for ; Mon, 9 Sep 2002 18:02:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:02:03 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g14L8H826708 for + ; Mon, 4 Feb 2002 21:08:18 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g14L75318071; + Mon, 4 Feb 2002 22:07:09 +0100 +Received: from fep02-app.kolumbus.fi (fep02-0.kolumbus.fi [193.229.0.44]) + by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g14L6r318061 for + ; Mon, 4 Feb 2002 22:06:53 +0100 +Received: from pihlaja.kotilo ([62.248.147.215]) by fep02-app.kolumbus.fi + (InterMail vM.5.01.03.15 201-253-122-118-115-20011108) with ESMTP id + <20020204210703.IJFY1068.fep02-app.kolumbus.fi@pihlaja.kotilo> for + ; Mon, 4 Feb 2002 23:07:03 +0200 +Received: (from peter@localhost) by pihlaja.kotilo (8.11.6/8.11.6) id + g14LU1U03541 for rpm-list@freshrpms.net; Mon, 4 Feb 2002 23:30:01 +0200 +From: Peter Peltonen +To: rpm-zzzlist@freshrpms.net +Subject: Re: About apt, kernel updates and dist-upgrade +Message-Id: <20020204233001.H2626@pihlaja.kotilo> +References: <20020204170408.F2626@pihlaja.kotilo> + <20020204165314.389e52ec.matthias@egwn.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +In-Reply-To: <20020204165314.389e52ec.matthias@egwn.net>; from + matthias@egwn.net on Mon, Feb 04, 2002 at 04:53:14PM +0100 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 4 Feb 2002 23:30:01 +0200 +Date: Mon, 4 Feb 2002 23:30:01 +0200 + +On Mon, Feb 04, 2002 at 04:53:14PM +0100, Matthias Saou wrote: +> It skips it. See the /etc/apt/apt.conf file for this. + +In my apt.conf reads: + +---- +RPM +{ + // Leave list empty to disable + AllowedDupPkgs {"^kernel$"; "kernel-smp"; "kernel-enterprise"; }; + HoldPkgs {"kernel-source"; "kernel-headers"; }; +} +---- + +If I understand this correctly, then only kernel-source and kernel-headers +are held from being installed, but kernel will be installed, right? + +Maybe I should test this on some vanilla system... + +-- +Peter + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01088.a46067a122aa5ad5d062961e6ecb3951 b/Ch3/datasets/spam/easy_ham/01088.a46067a122aa5ad5d062961e6ecb3951 new file mode 100644 index 000000000..b2010ff4d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01088.a46067a122aa5ad5d062961e6ecb3951 @@ -0,0 +1,75 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:02:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3E2D316EFC + for ; Mon, 9 Sep 2002 18:02:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:02:11 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g158cT825777 for + ; Tue, 5 Feb 2002 08:38:30 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g158a2326068; + Tue, 5 Feb 2002 09:36:02 +0100 +Received: from drone4.qsi.net.nz (drone4-svc-skyt.qsi.net.nz + [202.89.128.4]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with SMTP id + g158ZO326055 for ; Tue, 5 Feb 2002 09:35:24 +0100 +Received: (qmail 1216 invoked by uid 0); 5 Feb 2002 08:35:50 -0000 +Received: from unknown (HELO se7en.org) ([202.89.145.8]) (envelope-sender + ) by 0 (qmail-ldap-1.03) with SMTP for + ; 5 Feb 2002 08:35:50 -0000 +Received: from spawn.se7en.org ([10.0.0.3]) by se7en.org with esmtp (Exim + 3.12 #1 (Debian)) id 16Y2h9-00040z-00 for ; + Tue, 05 Feb 2002 23:19:23 +1300 +From: Mark Derricutt +To: rpm-zzzlist@freshrpms.net +Subject: Problem with an rpm... +Message-Id: <1740000.1012898468@spawn.se7en.org> +X-Mailer: Mulberry/2.2.0b1 (Linux/x86) +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Content-Disposition: inline +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 05 Feb 2002 21:41:08 +1300 +Date: Tue, 05 Feb 2002 21:41:08 +1300 + +Hiya, I just myself an rpm, and when I did -Uvh to upgrade the earlier +version I had installed (also from my rpm) I got: + +[root@spawn i386]# rpm -Uvh mulberry-2.2-b1.i386.rpm +Preparing... ########################################### +[100%] + 1:mulberry ########################################### +[100%] +error: db3 error(-30998) from db->close: DB_INCOMPLETE: Cache flush was +unable to complete + +Whats the DB_INCOMPLETE mean? + +It all seems to have installed ok thou... + + -- \m/ -- + "...if I seem super human I have been misunderstood." (c) Dream Theater + mark@talios.com - ICQ: 1934853 JID: talios@myjabber.net + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01089.b823a36e49a975cbe29c26766aaa55f8 b/Ch3/datasets/spam/easy_ham/01089.b823a36e49a975cbe29c26766aaa55f8 new file mode 100644 index 000000000..4ed0962ac --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01089.b823a36e49a975cbe29c26766aaa55f8 @@ -0,0 +1,68 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:02:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6A07E16EFC + for ; Mon, 9 Sep 2002 18:02:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:02:18 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g15E84806717 for + ; Tue, 5 Feb 2002 14:08:05 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g15E72316923; + Tue, 5 Feb 2002 15:07:02 +0100 +Received: from gaupe.sunnmore.net (c188s126h1.upc.chello.no + [62.179.177.188]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with SMTP id + g15E6T316911 for ; Tue, 5 Feb 2002 15:06:29 +0100 +Received: (qmail 32560 invoked from network); 5 Feb 2002 14:06:29 -0000 +Received: from ekorn.sunnmore.no (HELO sunnmore.net) (10.0.0.1) by + gaupe.sunnmore.net with SMTP; 5 Feb 2002 14:06:29 -0000 +Message-Id: <3C5FE6E4.6040608@sunnmore.net> +From: Roy-Magne Mo +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.8+) Gecko/20020203 +X-Accept-Language: nn, no, en-us +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: Problem with an rpm... +References: <1740000.1012898468@spawn.se7en.org> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 05 Feb 2002 15:06:28 +0100 +Date: Tue, 05 Feb 2002 15:06:28 +0100 + +Mark Derricutt wrote: +> Hiya, I just myself an rpm, and when I did -Uvh to upgrade the earlier +> version I had installed (also from my rpm) I got: +> +> [root@spawn i386]# rpm -Uvh mulberry-2.2-b1.i386.rpm +> Preparing... ########################################### +> [100%] +> 1:mulberry ########################################### +> [100%] +> error: db3 error(-30998) from db->close: DB_INCOMPLETE: Cache flush was +> unable to complete + +It's not the rpm, it's the rpm-system with you. The cache seems to have +rottened. Try removing /var/lib/rpm/__db* + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01090.a6575cc193fe3bb9f143aa0eb4fed7ac b/Ch3/datasets/spam/easy_ham/01090.a6575cc193fe3bb9f143aa0eb4fed7ac new file mode 100644 index 000000000..bdeb29029 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01090.a6575cc193fe3bb9f143aa0eb4fed7ac @@ -0,0 +1,87 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:02:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2812216EFC + for ; Mon, 9 Sep 2002 18:02:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:02:26 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g15IXc819190 for + ; Tue, 5 Feb 2002 18:33:38 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g15IW1t03595; + Tue, 5 Feb 2002 19:32:01 +0100 +Received: from drone4.qsi.net.nz (drone4-svc-skyt.qsi.net.nz + [202.89.128.4]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with SMTP id + g15IVtt03583 for ; Tue, 5 Feb 2002 19:31:55 +0100 +Received: (qmail 83098 invoked by uid 0); 5 Feb 2002 18:32:27 -0000 +Received: from unknown (HELO se7en.org) ([202.89.145.8]) (envelope-sender + ) by 0 (qmail-ldap-1.03) with SMTP for + ; 5 Feb 2002 18:32:27 -0000 +Received: from spawn.se7en.org ([10.0.0.3]) by se7en.org with esmtp (Exim + 3.12 #1 (Debian)) id 16YC0Z-0007dA-00 for ; + Wed, 06 Feb 2002 09:16:03 +1300 +From: Mark Derricutt +To: rpm-zzzlist@freshrpms.net +Subject: Re: Problem with an rpm... +Message-Id: <16380000.1012934264@spawn.se7en.org> +In-Reply-To: <3C5FE6E4.6040608@sunnmore.net> +References: <1740000.1012898468@spawn.se7en.org> + <3C5FE6E4.6040608@sunnmore.net> +X-Mailer: Mulberry/2.2.0b1 (Linux/x86) +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Content-Disposition: inline +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 06 Feb 2002 07:37:44 +1300 +Date: Wed, 06 Feb 2002 07:37:44 +1300 + +Do I need to do anything to recreate anything after deleting this? + +I did notice an rpm I made the other day didn't work, and just sat there +for ages seemingly doing nothing, which probably did this :( + +Ok, now I get: + + +Fetched 88.1kB in 2m31s (581B/s) +error: cannot get exclusive lock on /var/lib/rpm/Packages +error: cannot open Packages index using db3 - Operation not permitted (1) +E: could not open RPM database:cannot open Packages index using db3 - +Operation not permitted (1) + +Arrrrg. + +--On Tuesday, February 05, 2002 15:06:28 +0100 Roy-Magne Mo + wrote: + +> It's not the rpm, it's the rpm-system with you. The cache seems to have +> rottened. Try removing /var/lib/rpm/__db* + + + + -- \m/ -- + "...if I seem super human I have been misunderstood." (c) Dream Theater + mark@talios.com - ICQ: 1934853 JID: talios@myjabber.net + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01091.9ae9c7b90e88ce075538a8f2ffe71595 b/Ch3/datasets/spam/easy_ham/01091.9ae9c7b90e88ce075538a8f2ffe71595 new file mode 100644 index 000000000..d4f8787d1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01091.9ae9c7b90e88ce075538a8f2ffe71595 @@ -0,0 +1,76 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:02:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2D28F16EFC + for ; Mon, 9 Sep 2002 18:02:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:02:34 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g15IeD819423 for + ; Tue, 5 Feb 2002 18:40:13 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g15Id1t04196; + Tue, 5 Feb 2002 19:39:01 +0100 +Received: from drone4.qsi.net.nz (drone4-svc-skyt.qsi.net.nz + [202.89.128.4]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with SMTP id + g15Icst04185 for ; Tue, 5 Feb 2002 19:38:55 +0100 +Received: (qmail 84042 invoked by uid 0); 5 Feb 2002 18:39:22 -0000 +Received: from unknown (HELO se7en.org) ([202.89.145.8]) (envelope-sender + ) by 0 (qmail-ldap-1.03) with SMTP for + ; 5 Feb 2002 18:39:22 -0000 +Received: from spawn.se7en.org ([10.0.0.3]) by se7en.org with esmtp (Exim + 3.12 #1 (Debian)) id 16YC7H-0007eW-00 for ; + Wed, 06 Feb 2002 09:22:59 +1300 +From: Mark Derricutt +To: rpm-zzzlist@freshrpms.net +Subject: Re: Problem with an rpm... +Message-Id: <16550000.1012934680@spawn.se7en.org> +In-Reply-To: <16380000.1012934264@spawn.se7en.org> +References: <1740000.1012898468@spawn.se7en.org> + <3C5FE6E4.6040608@sunnmore.net> <16380000.1012934264@spawn.se7en.org> +X-Mailer: Mulberry/2.2.0b1 (Linux/x86) +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Content-Disposition: inline +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 06 Feb 2002 07:44:40 +1300 +Date: Wed, 06 Feb 2002 07:44:40 +1300 + +Never mind, there was some cron thing doing rpm -qf ??? seems fine now. + +--On Wednesday, February 06, 2002 07:37:44 +1300 Mark Derricutt + wrote: + +> Fetched 88.1kB in 2m31s (581B/s) +> error: cannot get exclusive lock on /var/lib/rpm/Packages +> error: cannot open Packages index using db3 - Operation not permitted (1) +> E: could not open RPM database:cannot open Packages index using db3 - +> Operation not permitted (1) + + + + -- \m/ -- + "...if I seem super human I have been misunderstood." (c) Dream Theater + mark@talios.com - ICQ: 1934853 JID: talios@myjabber.net + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01092.de7b8468488cc45962d2f2d4882aeb66 b/Ch3/datasets/spam/easy_ham/01092.de7b8468488cc45962d2f2d4882aeb66 new file mode 100644 index 000000000..3fdad4d5e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01092.de7b8468488cc45962d2f2d4882aeb66 @@ -0,0 +1,69 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:02:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5423816EFC + for ; Mon, 9 Sep 2002 18:02:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:02:41 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g15JNO821405 for + ; Tue, 5 Feb 2002 19:23:25 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g15JM1t06968; + Tue, 5 Feb 2002 20:22:01 +0100 +Received: from gaupe.sunnmore.net (c188s126h1.upc.chello.no + [62.179.177.188]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with SMTP id + g15JLGt06931 for ; Tue, 5 Feb 2002 20:21:16 +0100 +Received: (qmail 904 invoked from network); 5 Feb 2002 19:21:25 -0000 +Received: from ekorn.sunnmore.no (HELO sunnmore.net) (10.0.0.1) by + gaupe.sunnmore.net with SMTP; 5 Feb 2002 19:21:25 -0000 +Message-Id: <3C6030B5.2060106@sunnmore.net> +From: Roy-Magne Mo +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.8+) Gecko/20020203 +X-Accept-Language: nn, no, en-us +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: Problem with an rpm... +References: <1740000.1012898468@spawn.se7en.org> + <3C5FE6E4.6040608@sunnmore.net> <16380000.1012934264@spawn.se7en.org> + <16550000.1012934680@spawn.se7en.org> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 05 Feb 2002 20:21:25 +0100 +Date: Tue, 05 Feb 2002 20:21:25 +0100 + +Mark Derricutt wrote: +> Never mind, there was some cron thing doing rpm -qf ??? seems fine now. +> +> --On Wednesday, February 06, 2002 07:37:44 +1300 Mark Derricutt +> wrote: +> +>> Fetched 88.1kB in 2m31s (581B/s) +>> error: cannot get exclusive lock on /var/lib/rpm/Packages +>> error: cannot open Packages index using db3 - Operation not permitted (1) +>> E: could not open RPM database:cannot open Packages index using db3 - +>> Operation not permitted (1) + +You can do a rpm --rebuilddb too + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01093.a14e2f376790556ad2580f10f761f2cb b/Ch3/datasets/spam/easy_ham/01093.a14e2f376790556ad2580f10f761f2cb new file mode 100644 index 000000000..f3b3d0105 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01093.a14e2f376790556ad2580f10f761f2cb @@ -0,0 +1,83 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:02:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6EE3216EFC + for ; Mon, 9 Sep 2002 18:02:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:02:48 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g16EAD803228 for + ; Wed, 6 Feb 2002 14:10:13 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16E78t31948; + Wed, 6 Feb 2002 15:07:08 +0100 +Received: from fep02-app.kolumbus.fi (fep02-0.kolumbus.fi [193.229.0.44]) + by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16E6xt31932 for + ; Wed, 6 Feb 2002 15:06:59 +0100 +Received: from pihlaja.kotilo ([62.248.144.92]) by fep02-app.kolumbus.fi + (InterMail vM.5.01.03.15 201-253-122-118-115-20011108) with ESMTP id + <20020206140650.ZLIM1068.fep02-app.kolumbus.fi@pihlaja.kotilo> for + ; Wed, 6 Feb 2002 16:06:50 +0200 +Received: (from peter@localhost) by pihlaja.kotilo (8.11.6/8.11.6) id + g16ETrS11097 for rpm-list@freshrpms.net; Wed, 6 Feb 2002 16:29:53 +0200 +From: Peter Peltonen +To: rpm-zzzlist@freshrpms.net +Subject: Apt problems +Message-Id: <20020206162953.C10950@pihlaja.kotilo> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 6 Feb 2002 16:29:53 +0200 +Date: Wed, 6 Feb 2002 16:29:53 +0200 + +Two issues: + +---- +Sorry, but the following packages have unmet dependencies: + openssh: Depends: openssl (= 0.9.5a) but 0.9.6b-8 is installed + php-pgsql: Depends: postgresql but it is not installed + Depends: libpq.so.2 +E: Unmet dependencies. Try using -f. +---- + +1. I have the following openssl packages installed: + +---- +openssl-perl-0.9.6b-8 +openssl-0.9.6b-8 +openssl095a-0.9.5a-11 +openssl-devel-0.9.6b-8 +---- + +The openssl095a package should provide the openssl-0.9.5a compatibility +but apt doesn't think so? + +2. I have postgresql installed from the source. So that's why I need +php-pgsql. Is there a way to tell apt about packages I don't want it to +complain about? + +-- +Peter + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01094.f14bc2edd6fc45fa7b09c0a4ad5b82e3 b/Ch3/datasets/spam/easy_ham/01094.f14bc2edd6fc45fa7b09c0a4ad5b82e3 new file mode 100644 index 000000000..b2185eaa2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01094.f14bc2edd6fc45fa7b09c0a4ad5b82e3 @@ -0,0 +1,123 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:02:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C95E816EFC + for ; Mon, 9 Sep 2002 18:02:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:02:55 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g16EVp803907 for + ; Wed, 6 Feb 2002 14:31:51 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16EV1t02426; + Wed, 6 Feb 2002 15:31:01 +0100 +Received: from porsta.cs.Helsinki.FI (root@porsta.cs.Helsinki.FI + [128.214.48.124]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g16EUat02413 for ; Wed, 6 Feb 2002 15:30:36 +0100 +Received: from melkki.cs.Helsinki.FI (sslwrap@localhost [127.0.0.1]) by + porsta.cs.Helsinki.FI (8.11.6/8.11.6) with ESMTP id g16EURp22133 for + ; Wed, 6 Feb 2002 16:30:37 +0200 +Received: (from hhaataja@localhost) by melkki.cs.Helsinki.FI + (8.11.6/8.11.2) id g16EUJJ22714 for rpm-list@freshrpms.net; Wed, + 6 Feb 2002 16:30:19 +0200 +From: Harri Haataja +To: rpm-zzzlist@freshrpms.net +Subject: Re: Apt problems +Message-Id: <20020206163018.C17717@cs.helsinki.fi> +References: <20020206162953.C10950@pihlaja.kotilo> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-md5; + protocol="application/pgp-signature"; + boundary="bg08WKrSYDhXBjb5" +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <20020206162953.C10950@pihlaja.kotilo>; from pisara@iki.fi on + Wed, Feb 06, 2002 at 04:29:53PM +0200 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 6 Feb 2002 16:30:18 +0200 +Date: Wed, 6 Feb 2002 16:30:18 +0200 + + +--bg08WKrSYDhXBjb5 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Wed, Feb 06, 2002 at 04:29:53PM +0200, Peter Peltonen wrote: +> Two issues: +>=20 +> ---- +> Sorry, but the following packages have unmet dependencies: +> openssh: Depends: openssl (=3D 0.9.5a) but 0.9.6b-8 is installed +> php-pgsql: Depends: postgresql but it is not installed +> Depends: libpq.so.2 +> E: Unmet dependencies. Try using -f. +> ---- +>=20 +> 1. I have the following openssl packages installed: +>=20 +> ---- +> openssl-perl-0.9.6b-8 +> openssl-0.9.6b-8 +> openssl095a-0.9.5a-11 +> openssl-devel-0.9.6b-8 +> ---- +>=20 +> The openssl095a package should provide the openssl-0.9.5a compatibility= +=20 +> but apt doesn't think so?=20 + +I believe that's just a matter of string parsing. If someone were to fix +the openssh package, removing the explicit Requires:, I believe the +automagic binary handler would figure the right libraries to use and +install. I haven't met an openssh like that and in worst case I've had 3 +different openssl libraries (WTF can't they just bump a major version if +it's incompatible?!?). + +> 2. I have postgresql installed from the source. So that's why I need=20 +> php-pgsql. Is there a way to tell apt about packages I don't want it to= +=20 +> complain about? + +I have a few such things (with jdk, imlib, kernel DRI version.. +something) and Ive just made dummy packages (with verbose warning +attached ;) that explicitly provide those capabilities. (or claim to, +that is). + +--=20 +If you only want to go 500 miles, can you begin with a halfstep? + +--bg08WKrSYDhXBjb5 +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE8YT35QF8Oi9XNck4RAuNpAJ90B0EUZ7Lkqpr+KYzWPRi+i4DcWACdHQd5 +Tb0GZvVivaW1rOzqP/Su9Gc= +=h7Ff +-----END PGP SIGNATURE----- + +--bg08WKrSYDhXBjb5-- + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01095.d350c57509e9508b773fa5294a9afc83 b/Ch3/datasets/spam/easy_ham/01095.d350c57509e9508b773fa5294a9afc83 new file mode 100644 index 000000000..ebc2a9549 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01095.d350c57509e9508b773fa5294a9afc83 @@ -0,0 +1,107 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:03:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4F1BF16EFC + for ; Mon, 9 Sep 2002 18:03:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:03:04 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g16FHb805692 for + ; Wed, 6 Feb 2002 15:17:37 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16FFAt14887; + Wed, 6 Feb 2002 16:15:10 +0100 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16FEvt14871 for + ; Wed, 6 Feb 2002 16:14:57 +0100 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Apt problems +Message-Id: <20020206161427.494ecf0b.matthias@egwn.net> +In-Reply-To: <20020206163018.C17717@cs.helsinki.fi> +References: <20020206162953.C10950@pihlaja.kotilo> + <20020206163018.C17717@cs.helsinki.fi> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.7.0claws5 (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 6 Feb 2002 16:14:27 +0100 +Date: Wed, 6 Feb 2002 16:14:27 +0100 + +Once upon a time, Harri wrote : + +> On Wed, Feb 06, 2002 at 04:29:53PM +0200, Peter Peltonen wrote: +> > Two issues: +> > +> > ---- +> > Sorry, but the following packages have unmet dependencies: +> > openssh: Depends: openssl (= 0.9.5a) but 0.9.6b-8 is installed +> > php-pgsql: Depends: postgresql but it is not installed +> > Depends: libpq.so.2 +> > E: Unmet dependencies. Try using -f. +> > ---- +> > +> > 1. I have the following openssl packages installed: +> > +> > ---- +> > openssl-perl-0.9.6b-8 +> > openssl-0.9.6b-8 +> > openssl095a-0.9.5a-11 +> > openssl-devel-0.9.6b-8 +> > ---- +> > +> > The openssl095a package should provide the openssl-0.9.5a compatibility +> > but apt doesn't think so? +> +> I believe that's just a matter of string parsing. If someone were to fix +> the openssh package, removing the explicit Requires:, I believe the +> automagic binary handler would figure the right libraries to use and +> install. I haven't met an openssh like that and in worst case I've had 3 +> different openssl libraries (WTF can't they just bump a major version if +> it's incompatible?!?). + +Strange... all my openssh packages don't explicitly requires a version of +openssl. What version of openssh do you have? Is it an official Red Hat +package? I suppose it isn't, and using Red Hat's rpms will solve your +problem. + +What you need to know for openssl is : +0.9.5b is libcrypto.so.0 and libssl.so.0 +0.9.6 is libcrypto.so.1 and libssl.so.1 +0.9.6b is libcrypto.so.2 and libssl.so.2 + +Now in all Red Hat packages I've seen so far, the only dependency is on +those files and not on "openssl = version". + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01096.0ecf28b2697d77f7039d82f8838bcf8d b/Ch3/datasets/spam/easy_ham/01096.0ecf28b2697d77f7039d82f8838bcf8d new file mode 100644 index 000000000..9248bdc13 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01096.0ecf28b2697d77f7039d82f8838bcf8d @@ -0,0 +1,98 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:03:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1968316EFC + for ; Mon, 9 Sep 2002 18:03:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:03:13 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g16GPO808501 for + ; Wed, 6 Feb 2002 16:25:24 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16GO1t24770; + Wed, 6 Feb 2002 17:24:02 +0100 +Received: from theshadows.darktech.org (cs66692-46.satx.rr.com + [66.69.2.46]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g161WQt28903 for ; Wed, 6 Feb 2002 02:32:26 +0100 +Received: (from govind@localhost) by theshadows.darktech.org + (8.11.6/8.11.6) id g161dF519684; Tue, 5 Feb 2002 19:39:15 -0600 +Subject: apt-get http fails +From: "Govind S. Salinas" +To: rpm-zzzlist@freshrpms.net +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="=-eAUUkMeF/tAqB1Bi49Ip" +X-Mailer: Evolution/1.0.2 +Message-Id: <1012959555.17032.17.camel@theshadows.darktech.org> +MIME-Version: 1.0 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 05 Feb 2002 19:39:15 -0600 +Date: 05 Feb 2002 19:39:15 -0600 + + +--=-eAUUkMeF/tAqB1Bi49Ip +Content-Type: text/plain +Content-Transfer-Encoding: quoted-printable + +I installed apt-get yesterday and liked it, for a couple hours anyway.=20 +Late last night I started to get errors like: + + +--( root@theshadows )-- apt-get update +E: Method http has died unexpectedly! +E: Tried to dequeue a fetching object +E: Tried to dequeue a fetching object +E: Tried to dequeue a fetching object +E: Tried to dequeue a fetching object +E: Tried to dequeue a fetching object +E: Tried to dequeue a fetching object +E: Tried to dequeue a fetching object +(...) + +i get the same errors (two like the first line instead of one) with +apt-get update. + +I was wondering why this would happen. + +I would appreciate any help you all can give me. + +Thanks. + +--=20 + -Govind Salinas +ICQ:32026672 AIM:DyErthScum + +--=-eAUUkMeF/tAqB1Bi49Ip +Content-Type: application/pgp-signature; name=signature.asc +Content-Description: This is a digitally signed message part + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQA8YIlDhLd1P7Dk1P0RAhzSAKCUan9e5aIvrm2TVfcL0P+G4/ZkHQCgrv1l +vpgf1Lp1ZZctS/jE4JiH4z4= +=3dnC +-----END PGP SIGNATURE----- + +--=-eAUUkMeF/tAqB1Bi49Ip-- + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01097.08d3f921b8b1e6627c89504ea1c14069 b/Ch3/datasets/spam/easy_ham/01097.08d3f921b8b1e6627c89504ea1c14069 new file mode 100644 index 000000000..3750cf9c2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01097.08d3f921b8b1e6627c89504ea1c14069 @@ -0,0 +1,74 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:03:21 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EB6B016EFC + for ; Mon, 9 Sep 2002 18:03:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:03:20 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g16GPd808508 for + ; Wed, 6 Feb 2002 16:25:39 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16GP1t25026; + Wed, 6 Feb 2002 17:25:01 +0100 +Received: from fep02-app.kolumbus.fi (fep02-0.kolumbus.fi [193.229.0.44]) + by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16GOmt25014 for + ; Wed, 6 Feb 2002 17:24:48 +0100 +Received: from pihlaja.kotilo ([62.248.144.92]) by fep02-app.kolumbus.fi + (InterMail vM.5.01.03.15 201-253-122-118-115-20011108) with ESMTP id + <20020206162451.PWO1068.fep02-app.kolumbus.fi@pihlaja.kotilo> for + ; Wed, 6 Feb 2002 18:24:51 +0200 +Received: (from peter@localhost) by pihlaja.kotilo (8.11.6/8.11.6) id + g16Gltv12664 for rpm-list@freshrpms.net; Wed, 6 Feb 2002 18:47:55 +0200 +From: Peter Peltonen +To: rpm-zzzlist@freshrpms.net +Subject: Re: Apt problems +Message-Id: <20020206184755.D10950@pihlaja.kotilo> +References: <20020206162953.C10950@pihlaja.kotilo> + <20020206163018.C17717@cs.helsinki.fi> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +In-Reply-To: <20020206163018.C17717@cs.helsinki.fi>; from + harri.haataja@cs.helsinki.fi on Wed, Feb 06, 2002 at 04:30:18PM +0200 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 6 Feb 2002 18:47:55 +0200 +Date: Wed, 6 Feb 2002 18:47:55 +0200 + +On Wed, Feb 06, 2002 at 04:30:18PM +0200, Harri Haataja wrote: +> install. I haven't met an openssh like that and in worst case I've had 3 +> different openssl libraries (WTF can't they just bump a major version if +> it's incompatible?!?). + +So, what should I with the openssl thing? + +> something) and Ive just made dummy packages (with verbose warning +> attached ;) that explicitly provide those capabilities. (or claim to, +> that is). + +How do I make such packages? + +-- +Peter + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01098.f1aee47bcb53f9e9810bc45602904ecb b/Ch3/datasets/spam/easy_ham/01098.f1aee47bcb53f9e9810bc45602904ecb new file mode 100644 index 000000000..1d4a5b3bc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01098.f1aee47bcb53f9e9810bc45602904ecb @@ -0,0 +1,77 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:03:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A4C2116EFC + for ; Mon, 9 Sep 2002 18:03:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:03:28 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g16GTU808597 for + ; Wed, 6 Feb 2002 16:29:30 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16GT1t25165; + Wed, 6 Feb 2002 17:29:01 +0100 +Received: from fep02-app.kolumbus.fi (fep02-0.kolumbus.fi [193.229.0.44]) + by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16GSft25148 for + ; Wed, 6 Feb 2002 17:28:41 +0100 +Received: from pihlaja.kotilo ([62.248.144.92]) by fep02-app.kolumbus.fi + (InterMail vM.5.01.03.15 201-253-122-118-115-20011108) with ESMTP id + <20020206162848.QQN1068.fep02-app.kolumbus.fi@pihlaja.kotilo> for + ; Wed, 6 Feb 2002 18:28:48 +0200 +Received: (from peter@localhost) by pihlaja.kotilo (8.11.6/8.11.6) id + g16Gpqn12673 for rpm-list@freshrpms.net; Wed, 6 Feb 2002 18:51:52 +0200 +From: Peter Peltonen +To: rpm-zzzlist@freshrpms.net +Subject: Re: Apt problems +Message-Id: <20020206185152.E10950@pihlaja.kotilo> +References: <20020206162953.C10950@pihlaja.kotilo> + <20020206163018.C17717@cs.helsinki.fi> + <20020206161427.494ecf0b.matthias@egwn.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +In-Reply-To: <20020206161427.494ecf0b.matthias@egwn.net>; from + matthias@egwn.net on Wed, Feb 06, 2002 at 04:14:27PM +0100 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 6 Feb 2002 18:51:52 +0200 +Date: Wed, 6 Feb 2002 18:51:52 +0200 + +On Wed, Feb 06, 2002 at 04:14:27PM +0100, Matthias Saou wrote: +> Strange... all my openssh packages don't explicitly requires a version of +> openssl. What version of openssh do you have? Is it an official Red Hat +> package? I suppose it isn't, and using Red Hat's rpms will solve your +> problem. + +openssh-3.0.2p1-1 + +I think that is directly from openssh site. It's from the RH 6.2 that I +upgraded to 7.2 (6.2 doesn't ship with openssh...). + +I probably should downgrade to the versoin RH provides except I can't do +that as I don't have physical access to that box and downgrading ssh +packages over ssh doesn't sound like a bright idea... + +-- +Peter + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01099.7273b08ddcb69f15239cb516b118be07 b/Ch3/datasets/spam/easy_ham/01099.7273b08ddcb69f15239cb516b118be07 new file mode 100644 index 000000000..921ae9e4d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01099.7273b08ddcb69f15239cb516b118be07 @@ -0,0 +1,89 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:03:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DA84716EFC + for ; Mon, 9 Sep 2002 18:03:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:03:35 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g16Gas808989 for + ; Wed, 6 Feb 2002 16:36:54 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16Ga0t25782; + Wed, 6 Feb 2002 17:36:00 +0100 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16GZWt25768 for + ; Wed, 6 Feb 2002 17:35:33 +0100 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Apt problems +Message-Id: <20020206173432.02f6f277.matthias@egwn.net> +In-Reply-To: <20020206185152.E10950@pihlaja.kotilo> +References: <20020206162953.C10950@pihlaja.kotilo> + <20020206163018.C17717@cs.helsinki.fi> + <20020206161427.494ecf0b.matthias@egwn.net> + <20020206185152.E10950@pihlaja.kotilo> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.7.0claws5 (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 6 Feb 2002 17:34:32 +0100 +Date: Wed, 6 Feb 2002 17:34:32 +0100 + +Once upon a time, Peter wrote : + +> On Wed, Feb 06, 2002 at 04:14:27PM +0100, Matthias Saou wrote: +> > Strange... all my openssh packages don't explicitly requires a version +> > of openssl. What version of openssh do you have? Is it an official Red +> > Hat package? I suppose it isn't, and using Red Hat's rpms will solve +> > your problem. +> +> openssh-3.0.2p1-1 +> +> I think that is directly from openssh site. It's from the RH 6.2 that I +> upgraded to 7.2 (6.2 doesn't ship with openssh...). + +That explains... + +> I probably should downgrade to the versoin RH provides except I can't do +> that as I don't have physical access to that box and downgrading ssh +> packages over ssh doesn't sound like a bright idea... + +Well, with 7.0, I've seen a few problems with doing that, but as of 7.2 +it's really wonderful! Ever tried of completely uninstalling all openssh +related packages while being connected through ssh? Well, it works!!!! Of +course, if the connection cuts at that moment, you're stuck, but a simple +upgrade with official Red Hat packages also works like a charm :-) + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01100.3f3a79ad6a2cdd501aa86421fb5157a5 b/Ch3/datasets/spam/easy_ham/01100.3f3a79ad6a2cdd501aa86421fb5157a5 new file mode 100644 index 000000000..2d003c51f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01100.3f3a79ad6a2cdd501aa86421fb5157a5 @@ -0,0 +1,76 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:04:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 20F7916EFC + for ; Mon, 9 Sep 2002 18:04:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:04:02 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g16HMv811088 for + ; Wed, 6 Feb 2002 17:22:57 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16HM1t29814; + Wed, 6 Feb 2002 18:22:01 +0100 +Received: from fep02-app.kolumbus.fi (fep02-0.kolumbus.fi [193.229.0.44]) + by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16HLIt29797 for + ; Wed, 6 Feb 2002 18:21:18 +0100 +Received: from pihlaja.kotilo ([62.248.144.92]) by fep02-app.kolumbus.fi + (InterMail vM.5.01.03.15 201-253-122-118-115-20011108) with ESMTP id + <20020206172122.ZGD1068.fep02-app.kolumbus.fi@pihlaja.kotilo> for + ; Wed, 6 Feb 2002 19:21:22 +0200 +Received: (from peter@localhost) by pihlaja.kotilo (8.11.6/8.11.6) id + g16HiQH12752 for rpm-list@freshrpms.net; Wed, 6 Feb 2002 19:44:26 +0200 +From: Peter Peltonen +To: rpm-zzzlist@freshrpms.net +Subject: Re: Apt problems +Message-Id: <20020206194426.F10950@pihlaja.kotilo> +References: <20020206162953.C10950@pihlaja.kotilo> + <20020206163018.C17717@cs.helsinki.fi> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +In-Reply-To: <20020206163018.C17717@cs.helsinki.fi>; from + harri.haataja@cs.helsinki.fi on Wed, Feb 06, 2002 at 04:30:18PM +0200 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 6 Feb 2002 19:44:26 +0200 +Date: Wed, 6 Feb 2002 19:44:26 +0200 + +On Wed, Feb 06, 2002 at 04:30:18PM +0200, Harri Haataja wrote: +> I have a few such things (with jdk, imlib, kernel DRI version.. +> something) and Ive just made dummy packages (with verbose warning +> attached ;) that explicitly provide those capabilities. (or claim to, +> that is). + +Hm. One could do this with rpm's --justdb switch too, without having to +make a dummy package, right? + +I was wondering that this is a bit dangerous if there is a update for my +software, as the dummy package might get updated with it overwriting the +installation I've done from source... Not good. + +Is there really no "--nodeps" kind of switch in apt-get? + +-- +Peter + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01101.304a220a50b40f8f729e33ef0ed22f49 b/Ch3/datasets/spam/easy_ham/01101.304a220a50b40f8f729e33ef0ed22f49 new file mode 100644 index 000000000..8b05a902b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01101.304a220a50b40f8f729e33ef0ed22f49 @@ -0,0 +1,77 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:04:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5406716EFC + for ; Mon, 9 Sep 2002 18:04:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:04:29 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g16MBE822807 for + ; Wed, 6 Feb 2002 22:11:15 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16M62m15020; + Wed, 6 Feb 2002 23:06:02 +0100 +Received: from fep02-app.kolumbus.fi (fep02-0.kolumbus.fi [193.229.0.44]) + by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g16M5wm15010 for + ; Wed, 6 Feb 2002 23:05:58 +0100 +Received: from pihlaja.kotilo ([62.248.144.92]) by fep02-app.kolumbus.fi + (InterMail vM.5.01.03.15 201-253-122-118-115-20011108) with ESMTP id + <20020206220608.CXUD1068.fep02-app.kolumbus.fi@pihlaja.kotilo> for + ; Thu, 7 Feb 2002 00:06:08 +0200 +Received: (from peter@localhost) by pihlaja.kotilo (8.11.6/8.11.6) id + g16MTEg13192 for rpm-list@freshrpms.net; Thu, 7 Feb 2002 00:29:14 +0200 +From: Peter Peltonen +To: rpm-zzzlist@freshrpms.net +Subject: Re: About apt, kernel updates and dist-upgrade +Message-Id: <20020207002914.H12825@pihlaja.kotilo> +References: <20020204170408.F2626@pihlaja.kotilo> + <20020204165314.389e52ec.matthias@egwn.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +In-Reply-To: <20020204165314.389e52ec.matthias@egwn.net>; from + matthias@egwn.net on Mon, Feb 04, 2002 at 04:53:14PM +0100 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 7 Feb 2002 00:29:14 +0200 +Date: Thu, 7 Feb 2002 00:29:14 +0200 + +About apt.conf there are these lines: + +---- +RPM +{ + // Leave list empty to disable + AllowedDupPkgs {"^kernel$"; "kernel-smp"; "kernel-enterprise"; }; + HoldPkgs {"kernel-source"; "kernel-headers"; }; +} +---- + +How do I tell apt hold all kernel packages? Can I use syntax like +"kernel*"; ? + +And I don't quite understand what the part "^kernel$"; means? + +-- +Peter + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01102.d178bf64121423fea27fcbf754d5f984 b/Ch3/datasets/spam/easy_ham/01102.d178bf64121423fea27fcbf754d5f984 new file mode 100644 index 000000000..bb1a33196 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01102.d178bf64121423fea27fcbf754d5f984 @@ -0,0 +1,87 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:04:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B855616EFC + for ; Mon, 9 Sep 2002 18:04:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:04:37 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g179ccu22847 for + ; Thu, 7 Feb 2002 09:38:39 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g179c1m22817; + Thu, 7 Feb 2002 10:38:01 +0100 +Received: from porsta.cs.Helsinki.FI (root@porsta.cs.Helsinki.FI + [128.214.48.124]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g179bCm22788 for ; Thu, 7 Feb 2002 10:37:12 +0100 +Received: from melkki.cs.Helsinki.FI (sslwrap@localhost [127.0.0.1]) by + porsta.cs.Helsinki.FI (8.11.6/8.11.6) with ESMTP id g179bEp07446 for + ; Thu, 7 Feb 2002 11:37:15 +0200 +Received: (from hhaataja@localhost) by melkki.cs.Helsinki.FI + (8.11.6/8.11.2) id g179bC820045 for rpm-list@freshrpms.net; Thu, + 7 Feb 2002 11:37:12 +0200 +From: Harri Haataja +To: rpm-zzzlist@freshrpms.net +Subject: Re: About apt, kernel updates and dist-upgrade +Message-Id: <20020207113711.B19145@cs.helsinki.fi> +References: <20020204170408.F2626@pihlaja.kotilo> + <20020204165314.389e52ec.matthias@egwn.net> + <20020207002914.H12825@pihlaja.kotilo> +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-15 +Content-Disposition: inline +Content-Transfer-Encoding: 8bit +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <20020207002914.H12825@pihlaja.kotilo>; from pisara@iki.fi on + Thu, Feb 07, 2002 at 12:29:14AM +0200 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 7 Feb 2002 11:37:12 +0200 +Date: Thu, 7 Feb 2002 11:37:12 +0200 + +On Thu, Feb 07, 2002 at 12:29:14AM +0200, Peter Peltonen wrote: +> About apt.conf there are these lines: +> ---- +> RPM +> { +> // Leave list empty to disable +> AllowedDupPkgs {"^kernel$"; "kernel-smp"; "kernel-enterprise"; }; +> HoldPkgs {"kernel-source"; "kernel-headers"; }; +> } +> ---- +> +> How do I tell apt hold all kernel packages? Can I use syntax like +> "kernel*"; ? +> +> And I don't quite understand what the part "^kernel$"; means? + +You could read about regular expressions. +^kernel$ matches "kernel" and nothimg more. +Kerne, kernel-smp and kernel-enterprise are the kernel packages you +might be running in a RH system. Packages like kernel-headers, +kernel-BOOT and kernel-doc aren't matched. If it just said "kernel", it +would match *all* those packages. + +-- +"You were good with that recorder." (=nokkahuilu) +"Soitit hyvin sitä mankkaa." + -- (Suomennos) Men Behaving Badly + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01103.08012d5ec27410861a9b6b32b3ce0164 b/Ch3/datasets/spam/easy_ham/01103.08012d5ec27410861a9b6b32b3ce0164 new file mode 100644 index 000000000..39d4f77c7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01103.08012d5ec27410861a9b6b32b3ce0164 @@ -0,0 +1,66 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:04:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A728316EFC + for ; Mon, 9 Sep 2002 18:04:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:04:45 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g17E5bu32612 for + ; Thu, 7 Feb 2002 14:05:37 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g17E41m14438; + Thu, 7 Feb 2002 15:04:02 +0100 +Received: from maynard.mail.mindspring.net (maynard.mail.mindspring.net + [207.69.200.243]) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g17E3Gm14388 for ; Thu, 7 Feb 2002 15:03:17 +0100 +Received: from dialup-63.215.228.147.dial1.stamford1.level3.net + ([63.215.228.147]) by maynard.mail.mindspring.net with esmtp (Exim 3.33 + #1) id 16Yp8q-00072W-00 for rpm-list@freshrpms.net; Thu, 07 Feb 2002 + 09:03:13 -0500 +From: dTd +X-X-Sender: dan@dtd.drea.lan +To: rpm-zzzlist@freshrpms.net +Subject: rpm-zzzlist@freshrpms.net +In-Reply-To: <20020207113711.B19145@cs.helsinki.fi> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 7 Feb 2002 09:07:50 -0500 (EST) +Date: Thu, 7 Feb 2002 09:07:50 -0500 (EST) + + +Thanks for the great work Mathias but I would like to point out that this +list is fastly become the apt-rpm-list instead of the rpm-list. The +discussion concerning apt is overwhelming. Maybe another list is in order +for those having trouble with apt-rpm. apt-rpm-hotline@freshrpms.net ? :) + +Though I think apt-rpm is a great tool, I don't use it and would like to +get back to talk of new packages and rpm building techniques. + +dTd +Daniel T. Drea +dandanielle@mindspring.com +http://dandanielle.home.mindspring.com + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01104.703f48a4a1fa8c0e7053fba23997ee81 b/Ch3/datasets/spam/easy_ham/01104.703f48a4a1fa8c0e7053fba23997ee81 new file mode 100644 index 000000000..00cf084fb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01104.703f48a4a1fa8c0e7053fba23997ee81 @@ -0,0 +1,79 @@ +From rpm-list-admin@freshrpms.net Mon Sep 9 18:04:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BD0A816EFC + for ; Mon, 9 Sep 2002 18:04:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 18:04:52 +0100 (IST) +Received: from auth02.nl.egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g17EHPu00656 for + ; Thu, 7 Feb 2002 14:17:26 GMT +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by + auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g17EG2m16171; + Thu, 7 Feb 2002 15:16:02 +0100 +Received: from devel.freshrpms.net (gw01.es3.egwn.net [212.9.66.13]) + (authenticated) by auth02.nl.egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g17EFom16146 for ; Thu, 7 Feb 2002 15:15:51 +0100 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: rpm-zzzlist@freshrpms.net +Message-Id: <20020207151541.01ff69d6.matthias@egwn.net> +In-Reply-To: +References: <20020207113711.B19145@cs.helsinki.fi> + +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.7.0claws5 (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 7 Feb 2002 15:15:41 +0100 +Date: Thu, 7 Feb 2002 15:15:41 +0100 + +Once upon a time, dTd wrote : + +> +> Thanks for the great work Mathias but I would like to point out that this +> list is fastly become the apt-rpm-list instead of the rpm-list. The +> discussion concerning apt is overwhelming. Maybe another list is in order +> for those having trouble with apt-rpm. apt-rpm-hotline@freshrpms.net ? :) +> +> Though I think apt-rpm is a great tool, I don't use it and would like to +> get back to talk of new packages and rpm building techniques. + +Hmmm, know what? On http://lists.freshrpms.net/ the apt-list has been up +for a while now ;-) There is almost no traffic though, since I wanted to +keep that list for apt-rpm on the server side (mirrors, building +repositories etc.), but hey, it could be a good place for general apt-rpm +questions ;-) + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01105.7dff67aad7fedce9979018a890846b45 b/Ch3/datasets/spam/easy_ham/01105.7dff67aad7fedce9979018a890846b45 new file mode 100644 index 000000000..00681d5ec --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01105.7dff67aad7fedce9979018a890846b45 @@ -0,0 +1,74 @@ +From rpm-list-admin@freshrpms.net Tue Sep 10 18:14:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D63F816F03 + for ; Tue, 10 Sep 2002 18:14:43 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 18:14:43 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8AGhKC07686 for + ; Tue, 10 Sep 2002 17:43:20 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8AGe4K18740; Tue, 10 Sep 2002 18:40:05 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8AGdTK16936 for + ; Tue, 10 Sep 2002 18:39:30 +0200 +From: Matthias Saou +To: RPM-List +Subject: Holidays for freshrpms.net :-) +Message-Id: <20020910183907.2310f32c.matthias@egwn.net> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 10 Sep 2002 18:39:07 +0200 +Date: Tue, 10 Sep 2002 18:39:07 +0200 + +Hi all, + +I'll be leaving this evening until next Monday, with no access to +whatsoever to a single computer until then, woohoo, real holidays! :-) + +So don't be worried if there's a new release of and that it's not updated quickly despite your many +requests to the list ;-) + +Before going, I did repackage the latest hackedbox and lbreakout2 that both +came out today. + +Have fun! (I will!! ;-)) +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01106.4a0535d0232e24b9b7107bcd16da1ae0 b/Ch3/datasets/spam/easy_ham/01106.4a0535d0232e24b9b7107bcd16da1ae0 new file mode 100644 index 000000000..9290a2eb5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01106.4a0535d0232e24b9b7107bcd16da1ae0 @@ -0,0 +1,72 @@ +From rpm-list-admin@freshrpms.net Tue Sep 10 18:14:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1BF7D16F03 + for ; Tue, 10 Sep 2002 18:14:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 18:14:49 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8AGs0C07995 for + ; Tue, 10 Sep 2002 17:54:01 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8AGp1K18100; Tue, 10 Sep 2002 18:51:01 + +0200 +Received: from athlon.ckloiber.com (rdu57-228-131.nc.rr.com + [66.57.228.131]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g8AGoBK08236 for ; Tue, 10 Sep 2002 18:50:12 +0200 +Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) + by athlon.ckloiber.com (8.12.5/8.12.5) with ESMTP id g8AGo9KG017956 for + ; Tue, 10 Sep 2002 12:50:10 -0400 +Received: (from ckloiber@localhost) by localhost.localdomain + (8.12.5/8.12.5/Submit) id g8AGo8YS017954; Tue, 10 Sep 2002 12:50:08 -0400 +X-Authentication-Warning: localhost.localdomain: ckloiber set sender to + ckloiber@ckloiber.com using -f +Subject: Re: Holidays for freshrpms.net :-) +From: Chris Kloiber +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20020910183907.2310f32c.matthias@egwn.net> +References: <20020910183907.2310f32c.matthias@egwn.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1031676608.17878.8.camel@athlon.ckloiber.com> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 10 Sep 2002 12:50:08 -0400 +Date: 10 Sep 2002 12:50:08 -0400 + +On Tue, 2002-09-10 at 12:39, Matthias Saou wrote: +> Hi all, +> +> I'll be leaving this evening until next Monday, with no access to +> whatsoever to a single computer until then, woohoo, real holidays! :-) + +I don't think I could take it. The network was down for an hour here and +I was climbing the walls. :) + +Enjoy! + +-- +Chris Kloiber + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01107.18f0cd87bd40e5c64270187a75d668e8 b/Ch3/datasets/spam/easy_ham/01107.18f0cd87bd40e5c64270187a75d668e8 new file mode 100644 index 000000000..83dc39662 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01107.18f0cd87bd40e5c64270187a75d668e8 @@ -0,0 +1,70 @@ +From rpm-list-admin@freshrpms.net Tue Sep 10 18:14:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8258216F03 + for ; Tue, 10 Sep 2002 18:14:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 18:14:50 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8AHAHC08416 for + ; Tue, 10 Sep 2002 18:10:17 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8AH32K14798; Tue, 10 Sep 2002 19:03:02 + +0200 +Received: from bennew01.localdomain (pD900DE04.dip.t-dialin.net + [217.0.222.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8AH27K12138 + for ; Tue, 10 Sep 2002 19:02:07 +0200 +Received: from bennew01.localdomain (bennew01.localdomain [192.168.3.1]) + by bennew01.localdomain (8.11.6/linuxconf) with SMTP id g8AH23302806 for + ; Tue, 10 Sep 2002 19:02:04 +0200 +From: Matthias Haase +To: rpm-zzzlist@freshrpms.net +Subject: Re: Holidays for freshrpms.net :-) +Message-Id: <20020910190202.7528f4a2.matthias_haase@bennewitz.com> +In-Reply-To: <20020910183907.2310f32c.matthias@egwn.net> +References: <20020910183907.2310f32c.matthias@egwn.net> +X-Operating-System: customized linux smp kernel 2.4* on i686 +X-Mailer: Sylpheed +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 10 Sep 2002 19:02:02 +0200 +Date: Tue, 10 Sep 2002 19:02:02 +0200 + +On Tue, 10 Sep 2002 18:39:07 +0200 +Matthias Saou wrote: + +> Before going, I did repackage the latest hackedbox and lbreakout2 that +> both came out today. +> +> Have fun! (I will!! ;-)) +fun here too, recompiled gnome 2.02rc2 today ;-) + +Have a nice and good time! + +-- +regards + Matthias + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01108.c6ab8ebf1a366d6420b94fbd4d06cb5c b/Ch3/datasets/spam/easy_ham/01108.c6ab8ebf1a366d6420b94fbd4d06cb5c new file mode 100644 index 000000000..14e3ff08f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01108.c6ab8ebf1a366d6420b94fbd4d06cb5c @@ -0,0 +1,87 @@ +From rpm-list-admin@freshrpms.net Wed Sep 11 13:41:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4471316F17 + for ; Wed, 11 Sep 2002 13:41:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:41:23 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8AHOnC09071 for + ; Tue, 10 Sep 2002 18:24:49 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8AHM1K05478; Tue, 10 Sep 2002 19:22:01 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8AHLBK32532 for + ; Tue, 10 Sep 2002 19:21:12 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Holidays for freshrpms.net :-) +Message-Id: <20020910192046.66fe2b83.matthias@egwn.net> +In-Reply-To: <1031676608.17878.8.camel@athlon.ckloiber.com> +References: <20020910183907.2310f32c.matthias@egwn.net> + <1031676608.17878.8.camel@athlon.ckloiber.com> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 10 Sep 2002 19:20:46 +0200 +Date: Tue, 10 Sep 2002 19:20:46 +0200 + +Once upon a time, Chris wrote : + +> On Tue, 2002-09-10 at 12:39, Matthias Saou wrote: +> > Hi all, +> > +> > I'll be leaving this evening until next Monday, with no access to +> > whatsoever to a single computer until then, woohoo, real holidays! :-) +> +> I don't think I could take it. The network was down for an hour here and +> I was climbing the walls. :) + +I can't stand it either when it's at work or home and I'd planned on doing +something that required network access... but I really feel like I need a +break now, away from work pressure that almost drove me nuts all summer! +Ah, the joys of responsibilities... :-/ + +Six days without computers ahead, but six days driving my 600 Bandit +roadster bike! I won't be miserable nor get bored, don't worry for me ;-) +I also have the first Lord of the Rings book to finish (half way through +now) and the two others to read... lots of "sane" and non-wired occupations +ahead! +Oh, did I mention beer drinking with friends? :-)))) + +Matthias (really happy to be on holidayyyy for the first time this year!) + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01109.871741426740bcfa32cdde600ea0805d b/Ch3/datasets/spam/easy_ham/01109.871741426740bcfa32cdde600ea0805d new file mode 100644 index 000000000..013d74217 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01109.871741426740bcfa32cdde600ea0805d @@ -0,0 +1,72 @@ +From rpm-list-admin@freshrpms.net Mon Sep 16 00:09:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0237F16F03 + for ; Mon, 16 Sep 2002 00:09:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 00:09:13 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8FFFnC19825 for + ; Sun, 15 Sep 2002 16:15:49 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8FFB4K16664; Sun, 15 Sep 2002 17:11:04 + +0200 +Received: from fep02-app.kolumbus.fi (fep02-0.kolumbus.fi [193.229.0.44]) + by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8FFALK15168 for + ; Sun, 15 Sep 2002 17:10:22 +0200 +Received: from azrael.blades.cxm ([62.248.235.23]) by + fep02-app.kolumbus.fi with ESMTP id + <20020915151010.BZQC26864.fep02-app.kolumbus.fi@azrael.blades.cxm> for + ; Sun, 15 Sep 2002 18:10:10 +0300 +Received: (from blades@localhost) by azrael.blades.cxm (SGI-8.9.3/8.9.3) + id SAA54209 for rpm-list@freshrpms.net; Sun, 15 Sep 2002 18:10:11 +0300 + (EEST) +X-Authentication-Warning: azrael.blades.cxm: blades set sender to + harri.haataja@cs.helsinki.fi using -f +From: Harri Haataja +To: Freshrpms list +Subject: REQ: Beast/BSE +Message-Id: <20020915181010.E15386@azrael.smilehouse.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 15 Sep 2002 18:10:11 +0300 +Date: Sun, 15 Sep 2002 18:10:11 +0300 + +http://beast.gtk.org + +There's a realy nasty shortage on sequencers :( + +(Actually I'd like this running on my main box, which is Irix but that +I'll probably try to tackle myself :) + +-- +Rule #1: All software sucks +Rule #2: All hardware sucks. +Rule #3: My vacuum-cleaner is hardware. It never obeys rule #2? + -- Tanuki the Raccoon-dog, Scary Devil Monastery + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01110.852a6d27fe8dabfba9b811d8016faa1a b/Ch3/datasets/spam/easy_ham/01110.852a6d27fe8dabfba9b811d8016faa1a new file mode 100644 index 000000000..6ef2b68bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01110.852a6d27fe8dabfba9b811d8016faa1a @@ -0,0 +1,89 @@ +From rpm-list-admin@freshrpms.net Wed Sep 18 16:04:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2295116F03 + for ; Wed, 18 Sep 2002 16:04:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 16:04:49 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8IF2VC03196 for + ; Wed, 18 Sep 2002 16:02:32 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8IEv3f12031; Wed, 18 Sep 2002 16:57:03 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8IEuJf11886 for + ; Wed, 18 Sep 2002 16:56:20 +0200 +From: Matthias Saou +To: RPM-List +Subject: New testing packages +Message-Id: <20020918165020.3ca80271.matthias@rpmforge.net> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 18 Sep 2002 16:50:20 +0200 +Date: Wed, 18 Sep 2002 16:50:20 +0200 + +Hi, + +Just the kind of announce I make once in a while : +- I've rebuilt a new "alsaplayer" package based on Angle's one. +- I've rebuilt a hopefully final version "-fr8" of the "alsa-driver" and + "alsa-kernel" packages which fix all known SMP build issues. + +Both can be found here : +http://ftp.freshrpms.net/pub/freshrpms/testing/alsa/ + +I've also repackaged gkrellm 2.0.2 with at last a separate package for the +server that can be installed standalone and doesn't even require glib2. +http://ftp.freshrpms.net/pub/freshrpms/testing/gkrellm/ + +Last but not least, my latest proftpd 1.2.6 package incorporates some nifty +new features : You can use any of "--with ldap", "--with mysql" and "--with +postgres" when rebuilding the source rpm with rpmbuild to enable desired +extra authentication methods and all package requirements are set +accordingly, and the release tag is changed too. +http://valhalla.freshrpms.net/ (the usual place ;-)) + +I think I'll use this "--with " switch more and more where +possible. Some other of my package already use it like the xmame for its +output targets, sqlrelay for its modules and my latest sylpheed claws spec +to enable Pilot support. + +As usual, feedback and comments are welcome! :-) + +Matthias + +PS: Yup, I'm back from my holidays ;-) + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10 +Load : 2.42 2.10 1.32, AC on-line, battery charging: 100% (7:12) + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01111.2f7361f87bcf1782c2f7622d92c6bf7d b/Ch3/datasets/spam/easy_ham/01111.2f7361f87bcf1782c2f7622d92c6bf7d new file mode 100644 index 000000000..05b9a4cbc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01111.2f7361f87bcf1782c2f7622d92c6bf7d @@ -0,0 +1,69 @@ +From rpm-list-admin@freshrpms.net Wed Sep 18 16:17:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4038116F16 + for ; Wed, 18 Sep 2002 16:17:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 16:17:28 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8IFGCC03906 for + ; Wed, 18 Sep 2002 16:16:12 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8IFD1f15548; Wed, 18 Sep 2002 17:13:01 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8IFC7f15412 for + ; Wed, 18 Sep 2002 17:12:07 +0200 +Received: from cs78131139.pp.htv.fi ([62.78.131.139]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g8IFBw104014 for ; + Wed, 18 Sep 2002 18:11:58 +0300 (EETDST) +Subject: Re: New testing packages +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20020918165020.3ca80271.matthias@rpmforge.net> +References: <20020918165020.3ca80271.matthias@rpmforge.net> +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) +Message-Id: <1032361926.3200.1285.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g8IFC7f15412 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 18 Sep 2002 18:12:05 +0300 +Date: 18 Sep 2002 18:12:05 +0300 + +On Wed, 2002-09-18 at 17:50, Matthias Saou wrote: + +> I think I'll use this "--with " switch more and more where +> possible. + +Nifty, I've been thinking about that too. Any good ideas how to +document those targets? %description? + +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01112.bedeb8c24b16a1351dc11e6d16233f9a b/Ch3/datasets/spam/easy_ham/01112.bedeb8c24b16a1351dc11e6d16233f9a new file mode 100644 index 000000000..bb0606635 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01112.bedeb8c24b16a1351dc11e6d16233f9a @@ -0,0 +1,76 @@ +From rpm-list-admin@freshrpms.net Thu Sep 19 13:02:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5E12716F03 + for ; Thu, 19 Sep 2002 13:02:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 13:02:11 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JApkC16151 for + ; Thu, 19 Sep 2002 11:51:47 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8JAn3f17228; Thu, 19 Sep 2002 12:49:03 + +0200 +Received: from zeus.scania.co.za ([196.41.10.170]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8JAmHf13834 for + ; Thu, 19 Sep 2002 12:48:18 +0200 +Received: from leenx.co.za ([10.1.1.130]) by zeus.scania.co.za + (8.11.6/8.11.2) with ESMTP id g8JAgWC10724 for ; + Thu, 19 Sep 2002 12:42:36 +0200 +Message-Id: <3D89AA17.4090005@leenx.co.za> +From: "C.Lee Taylor" +Organization: LeeNX +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020607 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: --with ... +References: <20020919100001.21684.81501.Mailman@auth02> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 19 Sep 2002 12:42:31 +0200 +Date: Thu, 19 Sep 2002 12:42:31 +0200 + +Greetings ... + +> PS: Yup, I'm back from my holidays ;-) + I hope you did not miss us at all ... ;-0 + + > I think I'll use this "--with " switch more and more where + > possible. + Mmm, great stuff ... Now to get the RedHat Samba packager to do the same +thing ... + + I have used there spec file and fun a few problems in it, and one of them +was just hashing out things for other use ... + + Now to get to grips with the Kernel ... still have not found and easy way to +rebuild the Kernel without having to wait and hour for it to generate the +headers for all arch ... arrrrhhhh ... + +Mailed +Lee + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01113.444c4a1faf97d17bc580aea2905b773b b/Ch3/datasets/spam/easy_ham/01113.444c4a1faf97d17bc580aea2905b773b new file mode 100644 index 000000000..a591c8caa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01113.444c4a1faf97d17bc580aea2905b773b @@ -0,0 +1,85 @@ +From rpm-list-admin@freshrpms.net Thu Sep 19 13:02:21 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 100B516F03 + for ; Thu, 19 Sep 2002 13:02:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 13:02:21 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JBC9C16961 for + ; Thu, 19 Sep 2002 12:12:09 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8JB91f09494; Thu, 19 Sep 2002 13:09:01 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8JB8Wf08829 for + ; Thu, 19 Sep 2002 13:08:32 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: --with ... +Message-Id: <20020919130825.16f0b1c8.matthias@rpmforge.net> +In-Reply-To: <3D89AA17.4090005@leenx.co.za> +References: <20020919100001.21684.81501.Mailman@auth02> + <3D89AA17.4090005@leenx.co.za> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 19 Sep 2002 13:08:25 +0200 +Date: Thu, 19 Sep 2002 13:08:25 +0200 + +Once upon a time, C.Lee wrote : + +> > I think I'll use this "--with " switch more and more where +> > possible. +> Mmm, great stuff ... Now to get the RedHat Samba packager to do the +> same thing ... + +I'm sure that if you file a bugzilla entry with a relevant patch against +the spec file, chances of getting the change done are on your side ;-) + +> I have used there spec file and fun a few problems in it, and one +> of them was just hashing out things for other use ... +> +> Now to get to grips with the Kernel ... still have not found and +> easy way to rebuild the Kernel without having to wait and hour for +> it to generate the headers for all arch ... arrrrhhhh ... + +The problem is that "--with --without " is clearly not meant to +change deeply the way a package is built. Its use would be more like +enabling/disabling gpg, ldap, whateversql support in packages as it's not +possible to use something like "--with-=" which could be used for +a much wider scope. + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10 +Load : 0.00 0.12 0.32, AC on-line, battery charging: 100% (4:47) + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01114.ec145f9bdff18c1f07cdcc734fc554f6 b/Ch3/datasets/spam/easy_ham/01114.ec145f9bdff18c1f07cdcc734fc554f6 new file mode 100644 index 000000000..4d40cf170 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01114.ec145f9bdff18c1f07cdcc734fc554f6 @@ -0,0 +1,71 @@ +From rpm-list-admin@freshrpms.net Fri Sep 20 11:27:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6B41F16F03 + for ; Fri, 20 Sep 2002 11:27:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:27:20 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JKa7C03048 for + ; Thu, 19 Sep 2002 21:36:07 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8JKS3f22453; Thu, 19 Sep 2002 22:28:04 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8JKRBf16151 + for ; Thu, 19 Sep 2002 22:27:11 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17s7uA-0005WB-00 for rpm-list@freshrpms.net; + Thu, 19 Sep 2002 16:28:06 -0400 +X-Originating-Ip: [66.92.157.2] +From: "" Angles " Puglisi" +To: rpm-zzzlist@freshrpms.net +Subject: Re: New testing packages +Message-Id: <20020919.6le.46623700@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 19 Sep 2002 20:28:51 +0000 +Date: Thu, 19 Sep 2002 20:28:51 +0000 + +Matthias Saou (matthias@rpmforge.net) wrote*: +>- I've rebuilt a new "alsaplayer" package based on Angle's one. + +Cool, one less package to maintain :) + +One interesting thing about alsaplayer is that RedHat's XMMS package in RH8 will +probably not play mp3 files. But alsaplayer does play mp3s "out of the box". + +Also, they are developing rapidly in their CVS and looks like their next version +of alsaplaer will be pretty cool, but I have no idea when it will be ready. + +-- +That's "angle" as in geometry. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01115.2ba9b3536c901006108da168f1ea2e7e b/Ch3/datasets/spam/easy_ham/01115.2ba9b3536c901006108da168f1ea2e7e new file mode 100644 index 000000000..455dbf3f2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01115.2ba9b3536c901006108da168f1ea2e7e @@ -0,0 +1,64 @@ +From rpm-list-admin@freshrpms.net Fri Sep 20 11:30:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1152C16F03 + for ; Fri, 20 Sep 2002 11:30:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:30:18 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8K5NIC23544 for + ; Fri, 20 Sep 2002 06:23:18 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8K5E2f12491; Fri, 20 Sep 2002 07:14:02 + +0200 +Received: from mail.j2solutions.net (seattle.connectednw.com + [216.163.77.13]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g8K5Dcf06500 for ; Fri, 20 Sep 2002 07:13:38 +0200 +Received: from yoda (12-231-69-107.client.attbi.com + [::ffff:12.231.69.107]) (AUTH: CRAM-MD5 hosting@j2solutions.net) by + mail.j2solutions.net with esmtp; Thu, 19 Sep 2002 22:13:32 -0700 +From: Jesse Keating +To: rpm-zzzlist@freshrpms.net +Subject: sylpheed-claws +Message-Id: <20020919221046.7484dec6.hosting@j2solutions.net> +Organization: j2Solutions +X-Mailer: Sylpheed version 0.7.5claws (GTK+ 1.2.10; i386-redhat-linux) +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 19 Sep 2002 22:10:46 -0700 +Date: Thu, 19 Sep 2002 22:10:46 -0700 + +Have you thought of bumping up sylpheed-claws? I see sylpheed got a +bump... show some claws love? (; + +-- +Jesse Keating +j2Solutions.net +Mondo DevTeam (www.mondorescue.org) + +Was I helpful? Let others know: + http://svcs.affero.net/rm.php?r=jkeating + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01116.a2298fb07d7033a5448f96a375884930 b/Ch3/datasets/spam/easy_ham/01116.a2298fb07d7033a5448f96a375884930 new file mode 100644 index 000000000..7a8118b9f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01116.a2298fb07d7033a5448f96a375884930 @@ -0,0 +1,66 @@ +From rpm-list-admin@freshrpms.net Fri Sep 20 11:30:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9E87216F03 + for ; Fri, 20 Sep 2002 11:30:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:30:28 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8K66YC24804 for + ; Fri, 20 Sep 2002 07:06:34 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8K620f25468; Fri, 20 Sep 2002 08:02:00 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8K60pf25331 + for ; Fri, 20 Sep 2002 08:00:52 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17sGrK-0005vq-00 for rpm-list@freshrpms.net; + Fri, 20 Sep 2002 02:01:46 -0400 +X-Originating-Ip: [66.44.42.81] +From: "" Angles " Puglisi" +To: rpm-zzzlist@freshrpms.net +Subject: Re: New testing packages +Message-Id: <20020920.FvD.95677700@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 20 Sep 2002 06:02:34 +0000 +Date: Fri, 20 Sep 2002 06:02:34 +0000 + +Angles Puglisi (angles@aminvestments.com) wrote*: +>Also, they are developing rapidly in their CVS and looks like their next version +>of alsaplaer will be pretty cool, but I have no idea when it will be ready. + +ahh, oops they just released. -/ + +-- +That's "angle" as in geometry. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01117.df1f4e3f246e4104bc4dad63548e59db b/Ch3/datasets/spam/easy_ham/01117.df1f4e3f246e4104bc4dad63548e59db new file mode 100644 index 000000000..2934a6a6a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01117.df1f4e3f246e4104bc4dad63548e59db @@ -0,0 +1,76 @@ +From rpm-list-admin@freshrpms.net Fri Sep 20 11:30:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E349816F03 + for ; Fri, 20 Sep 2002 11:30:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:30:47 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8K8kFC29305 for + ; Fri, 20 Sep 2002 09:46:15 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8K8g1f28052; Fri, 20 Sep 2002 10:42:01 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8K8fMf27995 for + ; Fri, 20 Sep 2002 10:41:22 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: sylpheed-claws +Message-Id: <20020920104055.201c2986.matthias@rpmforge.net> +In-Reply-To: <20020919221046.7484dec6.hosting@j2solutions.net> +References: <20020919221046.7484dec6.hosting@j2solutions.net> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 20 Sep 2002 10:40:55 +0200 +Date: Fri, 20 Sep 2002 10:40:55 +0200 + +Once upon a time, Jesse wrote : + +> Have you thought of bumping up sylpheed-claws? I see sylpheed got a +> bump... show some claws love? (; + +Well, in sylheed's "claws" branch you need to wait a bit for the developers +to backport all the updates from the main branch before getting a release +with the same version number. + +Right now, the latest "claws" release is still 0.8.2claws : +http://sourceforge.net/project/showfiles.php?group_id=25528 + +But as it's the primary mailer I use, you can be sure that as soon as it's +updated to 0.8.3, I'll update my build! :-) + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10 +Load : 0.18 0.23 0.33, AC on-line, battery charging: 100% (4:47) + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01118.fde67e178520cc3f2557da150983ac00 b/Ch3/datasets/spam/easy_ham/01118.fde67e178520cc3f2557da150983ac00 new file mode 100644 index 000000000..28e1a1ba4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01118.fde67e178520cc3f2557da150983ac00 @@ -0,0 +1,82 @@ +From rpm-list-admin@freshrpms.net Fri Sep 20 17:34:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2611316F03 + for ; Fri, 20 Sep 2002 17:34:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 17:34:44 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8KGHRC13022 for + ; Fri, 20 Sep 2002 17:17:27 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8KGC2f20417; Fri, 20 Sep 2002 18:12:02 + +0200 +Received: from mailout10.sul.t-online.com (mailout10.sul.t-online.com + [194.25.134.21]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g8KGBVf20368 for ; Fri, 20 Sep 2002 18:11:32 +0200 +Received: from fwd11.sul.t-online.de by mailout10.sul.t-online.com with + smtp id 17sQNO-0001u3-08; Fri, 20 Sep 2002 18:11:30 +0200 +Received: from puariko.homeip.net (520039812576-0001@[217.231.206.155]) by + fmrl11.sul.t-online.com with esmtp id 17sQNE-01U7NoC; Fri, 20 Sep 2002 + 18:11:20 +0200 +From: Axel Thimm +To: rpm-zzzlist@freshrpms.net +Subject: Re: Should mplayer be build with Win32 codecs? +Message-Id: <20020920181118.A17344@bonzo.nirvana> +References: <20020608213903.GA26452@krabat.physik.fu-berlin.de> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <20020608213903.GA26452@krabat.physik.fu-berlin.de>; + from Axel.Thimm@physik.fu-berlin.de on Sat, Jun 08, 2002 at 11:39:03PM + +0200 +X-Sender: 520039812576-0001@t-dialin.net +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 20 Sep 2002 18:11:18 +0200 +Date: Fri, 20 Sep 2002 18:11:18 +0200 + +Hi, + +has anyone an answer for me? The mplayer documentation still suggests to use +them for x86 architectures. + +Thanks. :) + +Regards, Axel. + +On Sat, Jun 08, 2002 at 11:39:03PM +0200, Axel Thimm wrote: +> Are there perhaps licensing issues, which forbid such a practice? Or any other +> reasons? +> +> The reason I ask is that I have seen performance and also some feature +> differences (fullscreen w/o keeping aspect ratio, visual artifacts on NVIDIA) +> comparing with or without the Win32 codecs. The mplayer authors seem to +> recommend using them for x86 architectures. +> +> Beware, I am no mplayer/codecs/whatever expert, I may be totally lost ... + +-- +Axel.Thimm@physik.fu-berlin.de + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01119.055376f4837787aaa7890bf855b45dca b/Ch3/datasets/spam/easy_ham/01119.055376f4837787aaa7890bf855b45dca new file mode 100644 index 000000000..9fd7e1bcc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01119.055376f4837787aaa7890bf855b45dca @@ -0,0 +1,87 @@ +From rpm-list-admin@freshrpms.net Fri Sep 20 17:34:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 22FA616F03 + for ; Fri, 20 Sep 2002 17:34:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 17:34:50 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8KGTtC13446 for + ; Fri, 20 Sep 2002 17:29:55 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8KGN2f00819; Fri, 20 Sep 2002 18:23:06 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8KGMmf00768 for + ; Fri, 20 Sep 2002 18:22:48 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Should mplayer be build with Win32 codecs? +Message-Id: <20020920182230.3f487196.matthias@rpmforge.net> +In-Reply-To: <20020920181118.A17344@bonzo.nirvana> +References: <20020608213903.GA26452@krabat.physik.fu-berlin.de> + <20020920181118.A17344@bonzo.nirvana> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 20 Sep 2002 18:22:30 +0200 +Date: Fri, 20 Sep 2002 18:22:30 +0200 + +Once upon a time, Axel wrote : + +> has anyone an answer for me? The mplayer documentation still suggests to +> use them for x86 architectures. + +Well, I think my avifile build still needs the win32 codecs to be able to +run (manually copied into /usr/lib/win32/), but personally, I've been very +happy with mplayer's default (which is ffmpeg's ffdivx decoder) for nearly +all the DivX files I used. The only ones that still require (from my own +experience) the use of the win32 codecs are the ones encoded with a strange +DivX 3 sound format... and I've really not seen any quality or speed +improvements when using them. + +Matthias + +> On Sat, Jun 08, 2002 at 11:39:03PM +0200, Axel Thimm wrote: +> > Are there perhaps licensing issues, which forbid such a practice? Or +> > any other reasons? +> > +> > The reason I ask is that I have seen performance and also some feature +> > differences (fullscreen w/o keeping aspect ratio, visual artifacts on +> > NVIDIA) comparing with or without the Win32 codecs. The mplayer authors +> > seem to recommend using them for x86 architectures. +> > +> > Beware, I am no mplayer/codecs/whatever expert, I may be totally lost +> > ... + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10 +Load : 0.35 0.46 0.43, AC on-line, battery charging: 100% (4:47) + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01120.acaa2a2d6d3688986104cce5b2d3bc95 b/Ch3/datasets/spam/easy_ham/01120.acaa2a2d6d3688986104cce5b2d3bc95 new file mode 100644 index 000000000..f86b2680a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01120.acaa2a2d6d3688986104cce5b2d3bc95 @@ -0,0 +1,88 @@ +From rpm-list-admin@freshrpms.net Mon Sep 23 18:31:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A306316F03 + for ; Mon, 23 Sep 2002 18:31:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:31:15 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NFCmC22638 for + ; Mon, 23 Sep 2002 16:12:48 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8NF63f09696; Mon, 23 Sep 2002 17:06:04 + +0200 +Received: from fep07-app.kolumbus.fi (fep07-0.kolumbus.fi [193.229.0.51]) + by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8N7Xof04723 for + ; Mon, 23 Sep 2002 09:33:50 +0200 +Received: from [10.104.155.83] ([62.248.241.5]) by fep07-app.kolumbus.fi + with ESMTP id + <20020923073338.MLTG14491.fep07-app.kolumbus.fi@[10.104.155.83]> for + ; Mon, 23 Sep 2002 10:33:38 +0300 +Subject: Re: New testing packages +From: Peter Peltonen +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20020919.6le.46623700@www.dudex.net> +References: <20020919.6le.46623700@www.dudex.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.7 (1.0.7-2.2) +Message-Id: <1032766369.1927.14.camel@jersey.fivetec.com> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 23 Sep 2002 10:32:49 +0300 +Date: 23 Sep 2002 10:32:49 +0300 + + +BTW: I just a found a quite nice looking apt repositry for all kinds of +audio apps at + +http://ccrma-www.stanford.edu/planetccrma/software/ + +Peter + + +On Thu, 2002-09-19 at 23:28, Angles Puglisi wrote: +> Matthias Saou (matthias@rpmforge.net) wrote*: +> >- I've rebuilt a new "alsaplayer" package based on Angle's one. +> +> Cool, one less package to maintain :) +> +> One interesting thing about alsaplayer is that RedHat's XMMS package in RH8 will +> probably not play mp3 files. But alsaplayer does play mp3s "out of the box". +> +> Also, they are developing rapidly in their CVS and looks like their next version +> of alsaplaer will be pretty cool, but I have no idea when it will be ready. +> +> -- +> That's "angle" as in geometry. +> +> +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01121.cbf22a7c1f37266504f71d7b7b5c8baa b/Ch3/datasets/spam/easy_ham/01121.cbf22a7c1f37266504f71d7b7b5c8baa new file mode 100644 index 000000000..e028afbb7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01121.cbf22a7c1f37266504f71d7b7b5c8baa @@ -0,0 +1,72 @@ +From rpm-list-admin@freshrpms.net Mon Sep 23 18:31:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1E36F16F03 + for ; Mon, 23 Sep 2002 18:31:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:31:24 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NFNsC23104 for + ; Mon, 23 Sep 2002 16:23:54 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8NFC1f30675; Mon, 23 Sep 2002 17:12:01 + +0200 +Received: from mail.j2solutions.net (seattle.connectednw.com + [216.163.77.13]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g8NFBbf25661 for ; Mon, 23 Sep 2002 17:11:37 +0200 +Received: from yoda (12-231-69-107.client.attbi.com + [::ffff:12.231.69.107]) (AUTH: CRAM-MD5 hosting@j2solutions.net) by + mail.j2solutions.net with esmtp; Mon, 23 Sep 2002 08:11:31 -0700 +From: Jesse Keating +To: rpm-zzzlist@freshrpms.net +Subject: Re: sylpheed-claws +Message-Id: <20020923080924.27618d2b.hosting@j2solutions.net> +In-Reply-To: <20020920104055.201c2986.matthias@rpmforge.net> +References: <20020919221046.7484dec6.hosting@j2solutions.net> + <20020920104055.201c2986.matthias@rpmforge.net> +Organization: j2Solutions +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 23 Sep 2002 08:09:24 -0700 +Date: Mon, 23 Sep 2002 08:09:24 -0700 + +On Fri, 20 Sep 2002 10:40:55 +0200 +Matthias Saou wrote: + +# But as it's the primary mailer I use, you can be sure that as soon +# as it's updated to 0.8.3, I'll update my build! :-) + +It got updated (; + +-- +Jesse Keating +j2Solutions.net +Mondo DevTeam (www.mondorescue.org) + +Was I helpful? Let others know: + http://svcs.affero.net/rm.php?r=jkeating + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01122.69d3ebe6675d828f75af6ca1f905802c b/Ch3/datasets/spam/easy_ham/01122.69d3ebe6675d828f75af6ca1f905802c new file mode 100644 index 000000000..1c2882c04 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01122.69d3ebe6675d828f75af6ca1f905802c @@ -0,0 +1,117 @@ +From exmh-users-admin@redhat.com Mon Sep 23 12:06:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7323216F03 + for ; Mon, 23 Sep 2002 12:06:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 12:06:20 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8N51JC01448 for + ; Mon, 23 Sep 2002 06:01:19 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id F2CB43F5C9; Mon, 23 Sep 2002 + 01:01:47 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 40CF63F192 + for ; Mon, 23 Sep 2002 01:00:44 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8N50iN18870 for exmh-users@listman.redhat.com; Mon, 23 Sep 2002 + 01:00:44 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8N50hh18866 for + ; Mon, 23 Sep 2002 01:00:43 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8N4h5i21940 for + ; Mon, 23 Sep 2002 00:43:05 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + BAA08762 for ; Mon, 23 Sep 2002 01:00:38 -0400 +Message-Id: <200209230500.BAA08762@blackcomb.panasas.com> +To: exmh-users@spamassassin.taint.org +Subject: Re: bad focus/click behaviours +In-Reply-To: <25647.1031927295@dimebox> +References: <200209131130.g8DBUZL24217@hobbit.linuxworks.com.au.nospam> + <25647.1031927295@dimebox> +Comments: In-reply-to Hal DeVore message dated "Fri, + 13 Sep 2002 09:28:15 -0500." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=>r5~UnRml1:4EglY{9B+ + :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 22:00:37 -0700 + +I need to experiment with ripping out all my "sophisticated" cut/paste +code. This is mostly historical accident from dealing with very early +versions of Tk, and the emacs "cutbuffer", and other wierd junk. +You can, too, by hacking upon seditBind.tcl appropriately. + +>>>Hal DeVore said: + > + > + > >>>>> On Fri, 13 Sep 2002, "Tony" == Tony Nugent wrote: + > + > Tony> I can't even mark text in an exmh message window and then + > Tony> paste it into a terminal window, the cut buffer seems to + > Tony> be completely empty (and its previous contents are no + > Tony> longer there either). + > + > Brent confessed recently that he had tried to subvert the X + > model(s) of copy and paste. Not in those words... but that + > was how I read it. ;) + > + > I have a lot of trouble copying and pasting from or to exmh + > across a VNC link (from things in the vncviewer to things not in + > it and vice versa). As long as I stick to apps being "normally" + > displayed on my X server I don't have much of a problem. + > + > My recollection from my X programming days is that the X model, + > like everything in X, is more complex than the human brain can + > handle. It also is very different from the MS-Windows model. + > And I get the feeling that Tk tries to "unify" those two models + > and fails. Not sure what the exmh-specific contribution to the + > confusion is, frankly. + > + > --Hal + > + > + > + > + > _______________________________________________ + > Exmh-users mailing list + > Exmh-users@redhat.com + > https://listman.redhat.com/mailman/listinfo/exmh-users + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01123.c9c1c0a854f47b3249e596fc2bb361ed b/Ch3/datasets/spam/easy_ham/01123.c9c1c0a854f47b3249e596fc2bb361ed new file mode 100644 index 000000000..21444963a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01123.c9c1c0a854f47b3249e596fc2bb361ed @@ -0,0 +1,160 @@ +From exmh-users-admin@redhat.com Mon Sep 23 12:06:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 49A9816F03 + for ; Mon, 23 Sep 2002 12:06:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 12:06:26 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8N5D2C01926 for + ; Mon, 23 Sep 2002 06:13:06 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 74C573EBFF; Mon, 23 Sep 2002 + 01:13:23 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id B83A03F6E9 + for ; Mon, 23 Sep 2002 01:08:24 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8N58OF19984 for exmh-users@listman.redhat.com; Mon, 23 Sep 2002 + 01:08:24 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8N58Oh19980 for + ; Mon, 23 Sep 2002 01:08:24 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8N4oji22828 for + ; Mon, 23 Sep 2002 00:50:45 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + BAA09815 for ; Mon, 23 Sep 2002 01:08:17 -0400 +Message-Id: <200209230508.BAA09815@blackcomb.panasas.com> +To: exmh-users@spamassassin.taint.org +Subject: Re: bad focus/click behaviours +In-Reply-To: <200209131705.g8DH5Or30284@lin12.triumf.ca> +References: <200209131130.g8DBUZL24217@hobbit.linuxworks.com.au.nospam> + <200209131705.g8DH5Or30284@lin12.triumf.ca> +Comments: In-reply-to Rick Baartman message + dated "Fri, 13 Sep 2002 10:05:23 -0700." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=>r5~UnRml1:4EglY{9B+ + :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 22:08:16 -0700 + +It's all here in these 10 lines, otherwise known as the +"I'll try my damnest to paste something" procedure: + +# Return the current selection (from any window) or cut buffer 0. +proc Text_Selection {} { + if [catch {selection get} sel] { + if [catch {selection get -selection CLIPBOARD} sel] { + if [catch {cutbuffer get 0} sel] { + return "" + } + } + } + return $sel +} + +This is in textSelection.tcl, and is what exmh uses to find text to paste. +It is that last "cutbuffer get" that is wacky, because exmh sticks its +own deletions into that little know stash, and is probably the only +application on the planet that still looks there. We should probably +just disable that - try this variant: + +proc Text_Selection {} { + if [catch {selection get} sel] { + if [catch {selection get -selection CLIPBOARD} sel] { + return "" + } + } + return $sel +} + +Everything funnels through here, so you just need to hack this one spot. + + +>>>Rick Baartman said: + > I've never understood the mouse buffer operation with exmh either. Here's th + e + > behaviour I have. I have exmh and XEmacs windows up, and a terminal window. + (I + > also have gnome1.4 running and enlightenment as wm.) I select text in the ex + mh + > window and while it is highlighted, I can paste into anything else. If I sel + ect + > it and then click so the highlighting is off, then what I paste is not the + > recently-selected text in exmh, but an old selection. If I select in XEmacs + and + > leave it highlighted, I can paste it into exmh sedit window; but if it is no + + > longer highlighted, what I paste is an old selection. I can live with this + > behaviour except for one additional thing. If nothing is highlighted, then w + hat + > I paste into exmh is different from what I paste into other windows. To be m + ore + > specific, here's what gets pasted if nothing is highlighted: + > + > Application What gets pasted + > + > XEmacs whatever was last selected unless it was last selected in + exmh + > xterm same as XEmacs + > AbiWord nothing + > Nedit nothing + > sedit Whatever was last highlighted in sedit and overwritten + > + > The last needs some amplification. If I highlight something in sedit, then + > obviously that's what gets pasted. If the highlighting is off, then what get + s + > pasted is NOT what was last highlighted in sedit, but what was last highligh + ted + > and typed over (I have "Type Kills SEL" on.). + > + > It seems that exmh and sedit are the oddballs here. Very often when I try to + + > paste something in sedit I end up muttering WTF?? + > + > -- + > rick + > + > + > + > _______________________________________________ + > Exmh-users mailing list + > Exmh-users@redhat.com + > https://listman.redhat.com/mailman/listinfo/exmh-users + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01124.d97a9cf2c49c6e1e15e0c0aa024d20fc b/Ch3/datasets/spam/easy_ham/01124.d97a9cf2c49c6e1e15e0c0aa024d20fc new file mode 100644 index 000000000..69ec45682 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01124.d97a9cf2c49c6e1e15e0c0aa024d20fc @@ -0,0 +1,93 @@ +From exmh-users-admin@redhat.com Mon Sep 23 12:06:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3AF7416F03 + for ; Mon, 23 Sep 2002 12:06:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 12:06:29 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8N5D4C01928 for + ; Mon, 23 Sep 2002 06:13:08 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id BE64D3ECD6; Mon, 23 Sep 2002 + 01:13:25 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id C0F243F77B + for ; Mon, 23 Sep 2002 01:11:10 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8N5BAw20351 for exmh-users@listman.redhat.com; Mon, 23 Sep 2002 + 01:11:10 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8N5BAh20347 for + ; Mon, 23 Sep 2002 01:11:10 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8N4rVi23135 for + ; Mon, 23 Sep 2002 00:53:31 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + BAA10303 for ; Mon, 23 Sep 2002 01:11:04 -0400 +Message-Id: <200209230511.BAA10303@blackcomb.panasas.com> +To: exmh-users@spamassassin.taint.org +Subject: Re: bad focus/click behaviours +In-Reply-To: <26402.1031939696@dimebox> +References: <200209131130.g8DBUZL24217@hobbit.linuxworks.com.au.nospam> + <200209131705.g8DH5Or30284@lin12.triumf.ca> <26402.1031939696@dimebox> +Comments: In-reply-to Hal DeVore message dated "Fri, + 13 Sep 2002 12:54:56 -0500." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=>r5~UnRml1:4EglY{9B+ + :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 22:11:03 -0700 + +>>>Hal DeVore said: + > "Brent said in his book" + > This Paste function can be convenient, but it turns out that + > users still need to keep track of the difference between the + > two selections. If a user only understands the CLIPBOARD, + > then the user of PRIMARY is only surprising. I learned that + > it is best to have a separate paste user action for the two + > selections. The convention is that sets + > the insert point and inserts the PRIMARY selection. ... The + > <> event (e.g., the Paste key) simply inserts the + > CLIPBOARD selection at the current insert point. ... + +Yeah, I learned by hearing exmh users scream in agony. Sorry about +all that. We should be able to clean this up. If you grep for +"bind" in seditBind you quickly find the Text_Selection proc +I described in the previous email. + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01125.e1388e6a675c99fbf85b0ef5ac02d77d b/Ch3/datasets/spam/easy_ham/01125.e1388e6a675c99fbf85b0ef5ac02d77d new file mode 100644 index 000000000..afafd3999 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01125.e1388e6a675c99fbf85b0ef5ac02d77d @@ -0,0 +1,100 @@ +From exmh-users-admin@redhat.com Mon Sep 23 12:06:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E84C116F03 + for ; Mon, 23 Sep 2002 12:06:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 12:06:34 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8N5PbC02476 for + ; Mon, 23 Sep 2002 06:25:37 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 7D9DE3EA67; Mon, 23 Sep 2002 + 01:26:04 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id A2EAC3EDF3 + for ; Mon, 23 Sep 2002 01:21:56 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8N5Luc21797 for exmh-users@listman.redhat.com; Mon, 23 Sep 2002 + 01:21:56 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8N5Luh21793 for + ; Mon, 23 Sep 2002 01:21:56 -0400 +Received: from blackcomb.panasas.com (gw2.panasas.com [65.194.124.178]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8N54Hi24435 for + ; Mon, 23 Sep 2002 01:04:17 -0400 +Received: from medlicott.panasas.com (IDENT:welch@medlicott.panasas.com + [172.17.132.188]) by blackcomb.panasas.com (8.9.3/8.9.3) with ESMTP id + BAA11218 for ; Mon, 23 Sep 2002 01:21:50 -0400 +Message-Id: <200209230521.BAA11218@blackcomb.panasas.com> +To: exmh-users@spamassassin.taint.org +Subject: Re: bad focus/click behaviours +In-Reply-To: <20020915202900.F294C5D04@ptavv.es.net> +References: <20020915202900.F294C5D04@ptavv.es.net> +Comments: In-reply-to "Kevin Oberman" message dated "Sun, + 15 Sep 2002 13:28:59 -0700." +From: Brent Welch +X-Url: http://www.panasas.com/ +X-Face: "HxE|?EnC9fVMV8f70H83&{fgLE.|FZ^$>@Q(yb#N,Eh~N]e&]=>r5~UnRml1:4EglY{9B+ + :'wJq$@c_C!l8@<$t,{YUr4K,QJGHSvS~U]H`<+L*x?eGzSk>XH\W:AK\j?@?c1o +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sun, 22 Sep 2002 22:21:49 -0700 + + +>>>"Kevin Oberman" said: + > It did for me, but I am not willing to say it is not a tcl/tk issue as + > other apps seemed to work OK for cut and paste and Tk does its + > clipboard stuff a bit differently than most toolkits. So I'm not + > about to place blame. Just reporting my experience. + +One more salvo on X and cut/paste. X specifies at least two *mechanisms* +for cut/paste, but as usual mandates no *policy*. Windows and Macintosh +have a slightly different mechanism and one uniform policy. I'm quite +sure that Tk implements all PRIMARY and CLIPBOARD selections accurately. +The PRIMARY selection is the one that is tied to the visible selection +on your X display. The CLIPBOARD selection is the one with the explicit +Copy step, and is the same as what you have on Windows and Macintosh. +However, exmh throws in support for the cutbuffer mechanism, which is +another archaic mechanism supported at one point (perhaps still today) +by versions of emacs. Exmh has a policy that tries to unify all these +mechanisms under one umbrella, and by all reports it is not that great. + +I would encourage folks to play with those 10 lines of code in +Text_Selection and report what works well for them. We may come up +with 8 lines that work for everyone, or perhaps introduce yet another +setting that lets folks choose between a few useful models. Of course, +that's an admission of policy failure, but I'm willing to do that. + +-- +Brent Welch +Software Architect, Panasas Inc +Pioneering the World's Most Scalable and Agile Storage Network +www.panasas.com +welch@panasas.com + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01126.d930bf33cb3a9468623c15fb4cc24542 b/Ch3/datasets/spam/easy_ham/01126.d930bf33cb3a9468623c15fb4cc24542 new file mode 100644 index 000000000..6aa0aceb2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01126.d930bf33cb3a9468623c15fb4cc24542 @@ -0,0 +1,112 @@ +From exmh-users-admin@redhat.com Mon Sep 23 12:08:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7F4D916F03 + for ; Mon, 23 Sep 2002 12:08:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 12:08:37 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8N9QZC09959 for + ; Mon, 23 Sep 2002 10:26:35 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 3BE383EC03; Mon, 23 Sep 2002 + 05:27:03 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 789703EBD4 + for ; Mon, 23 Sep 2002 05:26:32 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8N9QWX22102 for exmh-users@listman.redhat.com; Mon, 23 Sep 2002 + 05:26:32 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8N9QWh22098 for + ; Mon, 23 Sep 2002 05:26:32 -0400 +Received: from ratree.psu.ac.th ([202.28.97.9]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g8N976i18437 for ; + Mon, 23 Sep 2002 05:07:10 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g8N9Np316223 for + ; Mon, 23 Sep 2002 16:23:56 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g8N9NX719043 for ; + Mon, 23 Sep 2002 16:23:47 +0700 (ICT) +From: Robert Elz +To: exmh-users@spamassassin.taint.org +Subject: Re: bad focus/click behaviours +In-Reply-To: <200209230521.BAA11218@blackcomb.panasas.com> +References: <200209230521.BAA11218@blackcomb.panasas.com> + <20020915202900.F294C5D04@ptavv.es.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <19041.1032773013@munnari.OZ.AU> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 16:23:33 +0700 + + Date: Sun, 22 Sep 2002 22:21:49 -0700 + From: Brent Welch + Message-ID: <200209230521.BAA11218@blackcomb.panasas.com> + + | I would encourage folks to play with those 10 lines of code in + | Text_Selection and report what works well for them. We may come up + | with 8 lines that work for everyone, or perhaps introduce yet another + | setting that lets folks choose between a few useful models. Of course, + | that's an admission of policy failure, but I'm willing to do that. + +I actually think you're looking in the wrong place. I, at least, +have almost no problems with the choice of what gets pasted, or +selected, that stuff (for me, if perhaps not users of some gnome variant, +which appraently has been fixed anyway) all seems to work just fine. + +The problem is that a button 1 click clears the selection (PRIMARY) +where it shouldn't - the previous selection should only be cleared +when there's something else to replace it (even if the highlighting +of what is selected is removed). Try this in any other ramdom +application (from xterm to netscape) and see how it works. There +normally is *no* (mouse based) way to actually clear the primary +selection (that is, set it to be a null string). + +Then, because of the "if I get asked for the selection value, I will +find something" behaviour, if you click (intending to set the insert +point, the way most other GUI's operate), and then paste, because the +PRIMARY is clear, but exmh still owns the selection, because nothing +else has taken it, it does and finds some other ramdom stuff, from +either the clipboard or cut buffer, which tends to be something that was +deleted back in the ancient past, and pastes that. + +That behaviour, to me anyway, is the real issue. + +Once that gets fixed, we can switch back to operating the normal +"select stuff, click at new insert point, paste" mode of operation +that almost everyone expects to work (whether the "select stuff" +is somewhere in one of the exmh windows, or elsewhere). + +kre + +ps: this message is from my experience as a exmh user only, I've never +really understood enough about X and selections to go gazing at that +part of the code and see how it all really operates. + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01127.979ce598c5cb0d3d68705e15040f5799 b/Ch3/datasets/spam/easy_ham/01127.979ce598c5cb0d3d68705e15040f5799 new file mode 100644 index 000000000..c6a4a0380 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01127.979ce598c5cb0d3d68705e15040f5799 @@ -0,0 +1,165 @@ +From exmh-workers-admin@redhat.com Mon Sep 23 18:31:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4A8B916F03 + for ; Mon, 23 Sep 2002 18:31:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:31:05 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NEmDC21624 for + ; Mon, 23 Sep 2002 15:48:13 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 66EF03F71C; Mon, 23 Sep 2002 + 10:48:08 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id B13733EA02 + for ; Mon, 23 Sep 2002 10:41:32 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8NEfWx16053 for exmh-workers@listman.redhat.com; Mon, 23 Sep 2002 + 10:41:32 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8NEfWh16049 for + ; Mon, 23 Sep 2002 10:41:32 -0400 +Received: from austin-jump.vircio.com + (IDENT:ccAy5zWQ09Xkwp7bvfjp0++Ajwz36CZN@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8NENpi07062 + for ; Mon, 23 Sep 2002 10:23:51 -0400 +Received: (qmail 12928 invoked by uid 104); 23 Sep 2002 14:41:31 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4224. . Clean. Processed in 0.338467 + secs); 23/09/2002 09:41:31 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 23 Sep 2002 14:41:30 -0000 +Received: (qmail 19676 invoked from network); 23 Sep 2002 14:41:26 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?hktCuClL/beEINsOkIbIB+tLe1/MAaET?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 23 Sep 2002 14:41:26 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Scott Lipcon +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: traceback in new exmh +In-Reply-To: <20020923025816.8E7A34A8@mercea.net> +References: <20020923025816.8E7A34A8@mercea.net> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_1988991284P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1032792084.19602.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 09:41:22 -0500 + +--==_Exmh_1988991284P +Content-Type: text/plain; charset=us-ascii + +> From: Scott Lipcon +> Date: Sun, 22 Sep 2002 22:58:16 -0400 +> +> I just updated to the latest CVS - I had been running a build from June. +> Hitting the Flist button gives the following traceback: +> +> syntax error in expression "int(17+1+(222-)*(19-17-2)/(224-))" +> while executing +> "expr int($minLine+1+($msgid-$minMsg)*($maxLine-$minLine-2)/($maxMsg-$minMs +> g))" +> (procedure "Ftoc_FindMsg" line 57) +> invoked from within +> "Ftoc_FindMsg $i" +> (procedure "Ftoc_ShowSequences" line 16) +> invoked from within +> "Ftoc_ShowSequences $F" +> (procedure "ScanFolder" line 81) +> invoked from within +> "ScanFolder inbox 0" +> invoked from within +> "time [list ScanFolder $F $adjustDisplay" +> (procedure "Scan_Folder" line 2) +> invoked from within +> "Scan_Folder $exmh(folder) $ftoc(showNew)" +> (procedure "Inc_PresortFinish" line 7) +> invoked from within +> "Inc_PresortFinish" +> invoked from within +> ".fops.flist invoke" +> ("uplevel" body line 1) +> invoked from within +> "uplevel #0 [list $w invoke]" +> (procedure "tkButtonUp" line 7) +> invoked from within +> "tkButtonUp .fops.flist +> " +> (command bound to event) +> +> +> It seems to only happen in a folder with no unseen messages. +> +> Chris, is this related to your recent changes? + +Curious. I changed the arguments to Ftoc_ShowSequences to drop the folder +argument and instead have an optional msgids argument. Somehow your version +of ScanFolder is still trying to pass $F. You seem to have the latest +ftoc.tcl (1.36), but not the latest scan.tcl (1.27). + +I don't know how that happened, but try getting your source tree completely +up to date. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_1988991284P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9jygSK9b4h5R0IUIRAix6AJ9CorKpwn/5KatPB2QytCyr1mVP5QCfd84d +CBV9usxWABobTcDTVHm8fLY= +=xJhj +-----END PGP SIGNATURE----- + +--==_Exmh_1988991284P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01128.48db2981ac933d672bcc5203a7063305 b/Ch3/datasets/spam/easy_ham/01128.48db2981ac933d672bcc5203a7063305 new file mode 100644 index 000000000..4eecf2589 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01128.48db2981ac933d672bcc5203a7063305 @@ -0,0 +1,187 @@ +From exmh-workers-admin@redhat.com Mon Sep 23 18:31:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 61BD116F03 + for ; Mon, 23 Sep 2002 18:31:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:31:11 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NF03C22040 for + ; Mon, 23 Sep 2002 16:00:03 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 0F7DB3EC25; Mon, 23 Sep 2002 + 10:59:55 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 5EB723F826 + for ; Mon, 23 Sep 2002 10:54:20 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8NEsKZ18975 for exmh-workers@listman.redhat.com; Mon, 23 Sep 2002 + 10:54:20 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8NEsKh18971 for + ; Mon, 23 Sep 2002 10:54:20 -0400 +Received: from mercea.net (dsl092-151-122.wdc1.dsl.speakeasy.net + [66.92.151.122]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8NEaci09965 for ; Mon, 23 Sep 2002 10:36:38 + -0400 +Received: from mercea.mercea.net (localhost.mercea.net [127.0.0.1]) by + mercea.net (Postfix) with ESMTP id 09A9638C; Mon, 23 Sep 2002 10:54:19 + -0400 (EDT) +From: Scott Lipcon +To: Chris Garrigues +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: traceback in new exmh +In-Reply-To: Your message of + "Mon, 23 Sep 2002 09:41:22 CDT." + <1032792084.19602.TMDA@deepeddy.vircio.com> +Message-Id: <20020923145419.09A9638C@mercea.net> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 10:54:19 -0400 + +Oops - turns out i wasn't careful installing it, so the exmh(library) +variable was pointing at my old installation. I'm surprised it worked +as well as it did. + +In any case, I removed the old library directory, and edited exmh, +exmh-bg, exmh-strip, etc to point at the right one. Now I'm getting +another traceback on startup: + +can't read "mhPriv(pubseq,family,cur)": no such variable + while executing +"MhSeq $folder $seq add $mhPriv(pubseq,$folder,$seq) [MhSeqExpand +$folder $msgids" + (procedure "MhReadSeqs" line 73) + invoked from within +"MhReadSeqs $folder seqs" + (procedure "Mh_Sequences" line 2) + invoked from within +"Mh_Sequences $folder" + (procedure "Flist_UnseenUpdate" line 4) + invoked from within +"Flist_UnseenUpdate $folder" + (procedure "FolderChange" line 51) + invoked from within +"FolderChange family {Msg_Show cur}" + invoked from within +"time [list FolderChange $folder $msgShowProc" + (procedure "Folder_Change" line 3) + invoked from within +"Folder_Change $exmh(folder)" + (procedure "Exmh" line 101) + invoked from within +"Exmh" + ("after" script) + + ++family is the folder I was in when I quit exmh. + +I'm on a remote display right now, and its really slow. I'll have to +play with it more tonight when I get home to see if there are any +other problems. + +Scott + +> > From: Scott Lipcon +> > Date: Sun, 22 Sep 2002 22:58:16 -0400 +> > +> > I just updated to the latest CVS - I had been running a build from June. +> > Hitting the Flist button gives the following traceback: +> > +> > syntax error in expression "int(17+1+(222-)*(19-17-2)/(224-))" +> > while executing +> > "expr int($minLine+1+($msgid-$minMsg)*($maxLine-$minLine-2)/($maxMsg-$minMs +> > g))" +> > (procedure "Ftoc_FindMsg" line 57) +> > invoked from within +> > "Ftoc_FindMsg $i" +> > (procedure "Ftoc_ShowSequences" line 16) +> > invoked from within +> > "Ftoc_ShowSequences $F" +> > (procedure "ScanFolder" line 81) +> > invoked from within +> > "ScanFolder inbox 0" +> > invoked from within +> > "time [list ScanFolder $F $adjustDisplay" +> > (procedure "Scan_Folder" line 2) +> > invoked from within +> > "Scan_Folder $exmh(folder) $ftoc(showNew)" +> > (procedure "Inc_PresortFinish" line 7) +> > invoked from within +> > "Inc_PresortFinish" +> > invoked from within +> > ".fops.flist invoke" +> > ("uplevel" body line 1) +> > invoked from within +> > "uplevel #0 [list $w invoke]" +> > (procedure "tkButtonUp" line 7) +> > invoked from within +> > "tkButtonUp .fops.flist +> > " +> > (command bound to event) +> > +> > +> > It seems to only happen in a folder with no unseen messages. +> > +> > Chris, is this related to your recent changes? +> +> Curious. I changed the arguments to Ftoc_ShowSequences to drop the folder +> argument and instead have an optional msgids argument. Somehow your version +> of ScanFolder is still trying to pass $F. You seem to have the latest +> ftoc.tcl (1.36), but not the latest scan.tcl (1.27). +> +> I don't know how that happened, but try getting your source tree completely +> up to date. +> +> Chris +> +> -- +> Chris Garrigues http://www.DeepEddy.Com/~cwg/ +> virCIO http://www.virCIO.Com +> 716 Congress, Suite 200 +> Austin, TX 78701 +1 512 374 0500 +> +> World War III: The Wrong-Doers Vs. the Evil-Doers. +> +> +> +> +> --==_Exmh_1988991284P +> Content-Type: application/pgp-signature +> +> -----BEGIN PGP SIGNATURE----- +> Version: GnuPG v1.0.6 (GNU/Linux) +> Comment: Exmh version 2.2_20000822 06/23/2000 +> +> iD8DBQE9jygSK9b4h5R0IUIRAix6AJ9CorKpwn/5KatPB2QytCyr1mVP5QCfd84d +> CBV9usxWABobTcDTVHm8fLY= +> =xJhj +> -----END PGP SIGNATURE----- +> +> --==_Exmh_1988991284P-- +> + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01129.f7613b6d091c77280226d622f866dd9c b/Ch3/datasets/spam/easy_ham/01129.f7613b6d091c77280226d622f866dd9c new file mode 100644 index 000000000..b729ea8de --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01129.f7613b6d091c77280226d622f866dd9c @@ -0,0 +1,175 @@ +From exmh-workers-admin@redhat.com Mon Sep 23 18:31:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9D8D416F03 + for ; Mon, 23 Sep 2002 18:31:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:31:21 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NFJNC22998 for + ; Mon, 23 Sep 2002 16:19:23 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id AE6CE3F5A6; Mon, 23 Sep 2002 + 11:10:11 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id D4D8D3F731 + for ; Mon, 23 Sep 2002 10:58:50 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8NEwoa20119 for exmh-workers@listman.redhat.com; Mon, 23 Sep 2002 + 10:58:50 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8NEwoh20115 for + ; Mon, 23 Sep 2002 10:58:50 -0400 +Received: from austin-jump.vircio.com + (IDENT:wIDHd+1bdywNxzPUCvM9g5D/nBd0Mcz3@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8NEf9i11047 + for ; Mon, 23 Sep 2002 10:41:09 -0400 +Received: (qmail 13981 invoked by uid 104); 23 Sep 2002 14:58:49 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4224. . Clean. Processed in 0.337161 + secs); 23/09/2002 09:58:49 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 23 Sep 2002 14:58:49 -0000 +Received: (qmail 23277 invoked from network); 23 Sep 2002 14:58:46 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?adeqIB4TWwovT0p9Px85IcgtpymppYTH?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 23 Sep 2002 14:58:46 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Scott Lipcon , exmh-workers@spamassassin.taint.org +Subject: Re: traceback in new exmh +In-Reply-To: <1032792084.19602.TMDA@deepeddy.vircio.com> +References: <20020923025816.8E7A34A8@mercea.net> + <1032792084.19602.TMDA@deepeddy.vircio.com> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_2018282504P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1032793126.23266.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 09:58:45 -0500 + +--==_Exmh_2018282504P +Content-Type: text/plain; charset=us-ascii + +> From: Chris Garrigues +> Date: Mon, 23 Sep 2002 09:41:22 -0500 +> +> > From: Scott Lipcon +> > Date: Sun, 22 Sep 2002 22:58:16 -0400 +> > +> > I just updated to the latest CVS - I had been running a build from June. +> +> > Hitting the Flist button gives the following traceback: +> > +> > syntax error in expression "int(17+1+(222-)*(19-17-2)/(224-))" +> > while executing +> > "expr int($minLine+1+($msgid-$minMsg)*($maxLine-$minLine-2)/($maxMsg-$minMs +> > g))" +> > (procedure "Ftoc_FindMsg" line 57) +> > invoked from within +> > "Ftoc_FindMsg $i" +> > (procedure "Ftoc_ShowSequences" line 16) +> > invoked from within +> > "Ftoc_ShowSequences $F" +> > (procedure "ScanFolder" line 81) +> > invoked from within +> > "ScanFolder inbox 0" +> > invoked from within +> > "time [list ScanFolder $F $adjustDisplay" +> > (procedure "Scan_Folder" line 2) +> > invoked from within +> > "Scan_Folder $exmh(folder) $ftoc(showNew)" +> > (procedure "Inc_PresortFinish" line 7) +> > invoked from within +> > "Inc_PresortFinish" +> > invoked from within +> > ".fops.flist invoke" +> > ("uplevel" body line 1) +> > invoked from within +> > "uplevel #0 [list $w invoke]" +> > (procedure "tkButtonUp" line 7) +> > invoked from within +> > "tkButtonUp .fops.flist +> > " +> > (command bound to event) +> > +> > +> > It seems to only happen in a folder with no unseen messages. +> > +> > Chris, is this related to your recent changes? +> +> Curious. I changed the arguments to Ftoc_ShowSequences to drop the folder +> argument and instead have an optional msgids argument. Somehow your version +> of ScanFolder is still trying to pass $F. You seem to have the latest +> ftoc.tcl (1.36), but not the latest scan.tcl (1.27). +> +> I don't know how that happened, but try getting your source tree completely +> up to date. + +Actually, I take that back. You're not running the latest ftoc.tcl either. + +It probably is my bug, but it's in code that's been changed since you last +updated from CVS (Saturday), so please update and let's see if the problem is +still there. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_2018282504P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9jywkK9b4h5R0IUIRAooIAJ4yCHFQ22/6OBD61tWNbb2sScOxPwCdGYE+ +cVdYZOjdN7A/nWpRHqusbJo= +=AZsA +-----END PGP SIGNATURE----- + +--==_Exmh_2018282504P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01130.616ad0cc28de13b6deabe9dd13d0dfe0 b/Ch3/datasets/spam/easy_ham/01130.616ad0cc28de13b6deabe9dd13d0dfe0 new file mode 100644 index 000000000..f36b4720a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01130.616ad0cc28de13b6deabe9dd13d0dfe0 @@ -0,0 +1,154 @@ +From exmh-workers-admin@redhat.com Mon Sep 23 18:31:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 70D9816F03 + for ; Mon, 23 Sep 2002 18:31:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:31:27 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NFPQC23121 for + ; Mon, 23 Sep 2002 16:25:26 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 9BD4A3ECD2; Mon, 23 Sep 2002 + 11:24:05 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 2B9C83F87C + for ; Mon, 23 Sep 2002 11:14:04 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8NFE4g24181 for exmh-workers@listman.redhat.com; Mon, 23 Sep 2002 + 11:14:04 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8NFE3h24175 for + ; Mon, 23 Sep 2002 11:14:03 -0400 +Received: from austin-jump.vircio.com + (IDENT:z/Bz8GbUVO/vHFRX8GipfxQPNY4sHgor@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8NEuMi14875 + for ; Mon, 23 Sep 2002 10:56:22 -0400 +Received: (qmail 15303 invoked by uid 104); 23 Sep 2002 15:14:03 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4224. . Clean. Processed in 0.416108 + secs); 23/09/2002 10:14:02 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 23 Sep 2002 15:14:02 -0000 +Received: (qmail 27126 invoked from network); 23 Sep 2002 15:13:59 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?BfaW8mm7th3j1epeqdAIUZrFkgwdgzZu?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 23 Sep 2002 15:13:59 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Scott Lipcon +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: traceback in new exmh +In-Reply-To: <20020923145419.09A9638C@mercea.net> +References: <20020923145419.09A9638C@mercea.net> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_2112058634P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1032794039.27118.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 10:13:57 -0500 + +--==_Exmh_2112058634P +Content-Type: text/plain; charset=us-ascii + +> From: Scott Lipcon +> Date: Mon, 23 Sep 2002 10:54:19 -0400 +> +> Oops - turns out i wasn't careful installing it, so the exmh(library) +> variable was pointing at my old installation. I'm surprised it worked +> as well as it did. +> +> In any case, I removed the old library directory, and edited exmh, +> exmh-bg, exmh-strip, etc to point at the right one. Now I'm getting +> another traceback on startup: +> +> can't read "mhPriv(pubseq,family,cur)": no such variable +> while executing +> "MhSeq $folder $seq add $mhPriv(pubseq,$folder,$seq) [MhSeqExpand +> $folder $msgids" +> (procedure "MhReadSeqs" line 73) +> invoked from within +> "MhReadSeqs $folder seqs" +> (procedure "Mh_Sequences" line 2) +> invoked from within +> "Mh_Sequences $folder" +> (procedure "Flist_UnseenUpdate" line 4) +> invoked from within +> "Flist_UnseenUpdate $folder" +> (procedure "FolderChange" line 51) +> invoked from within +> "FolderChange family {Msg_Show cur}" +> invoked from within +> "time [list FolderChange $folder $msgShowProc" +> (procedure "Folder_Change" line 3) +> invoked from within +> "Folder_Change $exmh(folder)" +> (procedure "Exmh" line 101) +> invoked from within +> "Exmh" +> ("after" script) +> +> +> +family is the folder I was in when I quit exmh. + +That shouldn't have been able to happen, but I've just made the code slightly +more bullet proof. +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_2112058634P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9jy+1K9b4h5R0IUIRAjO9AJ0TO8a3237+K6/EJhI9eCv/E1K4OQCeIN4j +nvTrcJ0dWiRGVWA9RZz7Kqk= +=WTaV +-----END PGP SIGNATURE----- + +--==_Exmh_2112058634P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01131.f0a4fc8a86ce5529ae7e96e86de6ad2f b/Ch3/datasets/spam/easy_ham/01131.f0a4fc8a86ce5529ae7e96e86de6ad2f new file mode 100644 index 000000000..4f4a8d714 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01131.f0a4fc8a86ce5529ae7e96e86de6ad2f @@ -0,0 +1,194 @@ +From exmh-workers-admin@redhat.com Mon Sep 23 23:22:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EB9B716F03 + for ; Mon, 23 Sep 2002 23:22:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 23:22:45 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NMKYC05203 for + ; Mon, 23 Sep 2002 23:20:34 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 78F653FAC3; Mon, 23 Sep 2002 + 18:21:02 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id D242C3ED67 + for ; Mon, 23 Sep 2002 18:20:05 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8NMK5U15363 for exmh-workers@listman.redhat.com; Mon, 23 Sep 2002 + 18:20:05 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8NMK5f15358 for + ; Mon, 23 Sep 2002 18:20:05 -0400 +Received: from austin-jump.vircio.com + (IDENT:PaqNj1KHMBW3ts29O6T1cxNJnauUbcAX@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8NM2Li02072 + for ; Mon, 23 Sep 2002 18:02:21 -0400 +Received: (qmail 12567 invoked by uid 104); 23 Sep 2002 22:20:04 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4224. . Clean. Processed in 0.349264 + secs); 23/09/2002 17:20:04 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 23 Sep 2002 22:20:04 -0000 +Received: (qmail 20959 invoked from network); 23 Sep 2002 22:20:01 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?79knF7PwThd2vqHi0RyIFdgpFNUhGU3S?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 23 Sep 2002 22:20:01 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Scott Lipcon +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: traceback in new exmh +In-Reply-To: <20020923214947.0F481B3F@mercea.net> +References: <20020923214947.0F481B3F@mercea.net> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-1590407866P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1032819600.20949.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 23 Sep 2002 17:19:59 -0500 + +--==_Exmh_-1590407866P +Content-Type: text/plain; charset=us-ascii + +> From: Scott Lipcon +> Date: Mon, 23 Sep 2002 17:49:47 -0400 +> +> Chris, +> +> I'm home now, and this copy of exmh is pretty bad - I'm running from +> CVS on Sunday night - the only change since then was the one you made +> this morning for "bulletproofing in MhReadSeqs". +> +> I run exmh, and I can visably see it count up the number of unseen +> messages as it looks through the folders - I have about 3000 unseen +> messages in maybe 10 or 12 folders. It takes a few seconds for all +> of the folders in the fcache to turn blue. + +This is true...it's now looking at more than just unseen, so it takes a little +while (in the background) to build the sequences window. There is probably +some tuning possible in this area. + +> In +inbox, I have 4 unread messages. They aren't blue, they are +> white background with a normal colored font. + +I changed the default display of unseen messages from a foreground of blue to +a background of white to make it possible to see what other sequences unseen +messages may be in. I *did* ask Brent before I did it. If you like the old +behavior, the old lines are still in app-defaults-color, but commented out. + +> If I click on a message, I get the following traceback: +> +> invalid command name "Mh_MarkSeen" +> while executing +> "Mh_MarkSeen $exmh(folder) $msgid" +> (procedure "Hook_MsgShow_update_unseen" line 5) +> invoked from within +> "$cmd $mhProfile(path)/$exmh(folder)/$msgid mimeHdr" +> (procedure "MsgShow" line 23) +> invoked from within +> "MsgShow $msgid" +> (procedure "MsgChange" line 18) +> invoked from within +> "MsgChange 66 show" +> invoked from within +> "time [list MsgChange $msgid $show" +> (procedure "Msg_Change" line 3) +> invoked from within +> "Msg_Change $msgNum $show" +> (procedure "Msg_Pick" line 8) +> invoked from within +> "Msg_Pick $lineno show" +> (procedure "FtocRangeEnd" line 12) +> invoked from within +> "FtocRangeEnd [lindex [split [.ftoc.t index current] .] 0] 0" +> (command bound to event) + +This is because of your Hook_MsgShow_update_unseen which is calling a function +which no longer exists. + +I suspect you need + Seq_Del $exmh(folder) unseen $msgid +now instead of + Mh_MarkSeen $exmh(folder) $msgid + +> It appears that the message does get marked as seen though, as it +> loses the white background, and nmh reports the same. +> +> If I click the flist button, it zero's the unseen count, and then +> there is again a visible delay as it counts up all the unseen +> messages - maybe 3-4 seconds. +> +> I really think my installation is OK now, but if this behavior is just +> really strange I'll blow everything away and reinstall. I'm happy to +> spend some time helping to track this down, I don't really need exmh. +> I'm comfortable enough using nmh. +> +> Scott +> +> +> +> _______________________________________________ +> Exmh-workers mailing list +> Exmh-workers@redhat.com +> https://listman.redhat.com/mailman/listinfo/exmh-workers + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-1590407866P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9j5OPK9b4h5R0IUIRAqAyAJ4t1/YU6tI+81tfv8PS65DO9DiXdACfYxBP +V0bKP6O4yRQjD38MQMxeWcM= +=85Yk +-----END PGP SIGNATURE----- + +--==_Exmh_-1590407866P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01132.2755d7d8107be0b804bb1f3f5ce29e83 b/Ch3/datasets/spam/easy_ham/01132.2755d7d8107be0b804bb1f3f5ce29e83 new file mode 100644 index 000000000..1abb43f68 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01132.2755d7d8107be0b804bb1f3f5ce29e83 @@ -0,0 +1,155 @@ +From exmh-workers-admin@redhat.com Tue Sep 24 19:48:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4D61016F03 + for ; Tue, 24 Sep 2002 19:48:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 19:48:30 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8OHftC14906 for + ; Tue, 24 Sep 2002 18:41:55 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 1BCC9404E3; Tue, 24 Sep 2002 + 13:38:35 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id B4AD74058F + for ; Tue, 24 Sep 2002 13:29:39 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8OHTdg25948 for exmh-workers@listman.redhat.com; Tue, 24 Sep 2002 + 13:29:39 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8OHTdf25944 for + ; Tue, 24 Sep 2002 13:29:39 -0400 +Received: from austin-jump.vircio.com + (IDENT:o9SX/V2vSkSNogAwP663lVz/JOIlGdTy@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8OHBni01193 + for ; Tue, 24 Sep 2002 13:11:49 -0400 +Received: (qmail 17610 invoked by uid 104); 24 Sep 2002 17:29:38 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4224. . Clean. Processed in 0.36098 + secs); 24/09/2002 12:29:38 +Received: from deepeddy.vircio.com ([10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 24 Sep 2002 17:29:38 -0000 +Received: (qmail 14155 invoked from network); 24 Sep 2002 17:29:37 -0000 +Received: from localhost (HELO deepeddy.vircio.com) ([127.0.0.1]) + (envelope-sender ) by localhost (qmail-ldap-1.03) + with SMTP for ; 24 Sep 2002 17:29:37 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Scott Lipcon +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: traceback in new exmh +In-Reply-To: <20020924023505.8CAE937B@mercea.net> +References: <20020924023505.8CAE937B@mercea.net> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-1249285507P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1032888576.14149.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 12:29:35 -0500 + +--==_Exmh_-1249285507P +Content-Type: text/plain; charset=us-ascii + +> From: Scott Lipcon +> Date: Mon, 23 Sep 2002 22:35:05 -0400 +> +> The speed is a problem for sure - It takes a long time to do the +> rescanning of sequences (I associate it with hitting the 'flist' +> button, or when my background flist goes off). I'm running on a +> pretty fast system (Athlon 1700+, 512Mb RAM, 10k RPM ultra SCSI disk) +> and hitting flist used to take no more than a second. The big +> difference might just be perception, because the the old code just +> updated all the folders (count + color) all at once, instead of making +> it look like there is 0 unseen, then counting its way back up. +> +> I doubt I'll have much time in the immediate future to hack at this, +> but if I do - can you suggest areas that might be the best to +> optimize? If not, do you think we can put in some preferences to +> disable some of the more intensive features? I'd rather disable all +> the sequence support (except unseen, of course) and have reasonable +> speed. I suspect people on slow machines would find the current +> state unusable. + +If I knew where the problem was, I'd fix it myself. + +Finding it is probably more work than the actual fix. + +> > +> > This is because of your Hook_MsgShow_update_unseen which is calling a fun +> ctio +> > n +> > which no longer exists. +> > +> > I suspect you need +> > Seq_Del $exmh(folder) unseen $msgid +> > now instead of +> > Mh_MarkSeen $exmh(folder) $msgid +> > +> +> Thanks. I'm not sure I'll need it with the new sequence code, but I +> might. Does your new code commit sequences immediately? The old code +> didn't, so I put that in to help keep my mh and exmh windows in sync. + +Yes it does. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-1249285507P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9kKD/K9b4h5R0IUIRAp9DAJsF2W+5cvbayu3szYhYW7TUdAb64QCfT3/t +vgMbAAyyOjJW465cwD6wpfk= +=0Rwl +-----END PGP SIGNATURE----- + +--==_Exmh_-1249285507P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01133.d9329be5511d9ba5af54e36ce4cb3777 b/Ch3/datasets/spam/easy_ham/01133.d9329be5511d9ba5af54e36ce4cb3777 new file mode 100644 index 000000000..cb17c783f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01133.d9329be5511d9ba5af54e36ce4cb3777 @@ -0,0 +1,118 @@ +From exmh-workers-admin@redhat.com Tue Sep 24 19:48:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 50CAB16F03 + for ; Tue, 24 Sep 2002 19:48:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 19:48:42 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8OIEpC16178 for + ; Tue, 24 Sep 2002 19:14:51 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 24B3C40491; Tue, 24 Sep 2002 + 14:15:17 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 0173F406B6 + for ; Tue, 24 Sep 2002 14:08:25 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8OI8Pu06001 for exmh-workers@listman.redhat.com; Tue, 24 Sep 2002 + 14:08:25 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8OI8Pf05994 for + ; Tue, 24 Sep 2002 14:08:25 -0400 +Received: from vnet0.virtual.net (vnet0.virtual.net [64.49.222.181]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8OHoZi12593 for + ; Tue, 24 Sep 2002 13:50:35 -0400 +Received: from schooner.loverso.southborough.ma.us + (user233.64.47.28.dsli.com [64.47.28.233]) by vnet0.virtual.net + (8.9.3/8.9.3) with ESMTP id NAA26862; Tue, 24 Sep 2002 13:08:23 -0500 +Received: from loverso.southborough.ma.us (localhost [127.0.0.1]) by + schooner.loverso.southborough.ma.us (8.12.3/8.11.3) with ESMTP id + g8OI8LM8068943; Tue, 24 Sep 2002 14:08:21 -0400 (EDT) (envelope-from + loverso@loverso.southborough.ma.us) +Message-Id: <200209241808.g8OI8LM8068943@schooner.loverso.southborough.ma.us> +To: Ted Cabeen +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Minor feature request +In-Reply-To: Message from Ted Cabeen + <20020924170024.1935256D@gray.impulse.net> . +X-Face: "UZ!}1W2N?eJdN(`1%|/OOPqJ).Idk?UyvWw'W-%`Gto8^IkEm>.g1O$[.;~}8E=Ire0|lO + .o>:NlJS1@vO9bVmswRoq3j + DdX9YGSeJ5a(mfX[1u>Z63G5_^+'8LVqjqvn +X-Url: http://surf.to/loverso +From: "John R. LoVerso" +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Tue, 24 Sep 2002 14:08:21 -0400 + +> How easy would it be to code a menu item that marks as read all messages +> before the current message? I often have problems reading heavy-traffic +> mailing lists in exmh because I want to read only a subset of a lists +> messages, but I lose track of where I was in the particular folder. +> +> This could also be coded more generally in the new sequences code as a way to +> remove all messages before current from a particular sequence. + +Easy. + +First, you'll have to excuse me as I'm still using 2.3.1 (*), so, this +may not play well with recent changes. (I did look at 2.5.1, too). +And, I just did this off the top of my head (I wanted to see if it +(**) still worked), so this is somewhat untested. + +Adding a menu entry is trivial; add this to your ~/.exmh/exmh-defaults: + +*Fops.more.m.uentrylist: ketchup +*Fops.more.m.l_ketchup: Catch-up all b4 cur +*Fops.more.m.c_ketchup: My_Mark2CurSeen + +Then you just need to provide the source for My_Mark2CurSeen and +arrange for Exmh to include it (put it in your ~/.tk/exmh directory +in your user.tcl; or in pick.patch if you enable the "source hook" +under Prefs->Hacking Support) + +It's going to look something like this: + +proc My_Mark2CurSeen {} { + global exmh pick msg + Exmh_Status "Clearing unseen up to cur..." red + Mh_SetCur $exmh(folder) $msg(id) + set pick(ids) [...get message ids for "pick 1-cur"...] + busy PickMarkSeen + Exmh_Status ok blue +} + +(that's based upon the guts of Pick_MarkSeen) + +You need to fill in the code for the [...get...] section; I ran out of +time! + +John + +(*) "It just works" (tm) +(**) "it" == my head + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01134.ababef706c62d3b9efd341c1ee763c85 b/Ch3/datasets/spam/easy_ham/01134.ababef706c62d3b9efd341c1ee763c85 new file mode 100644 index 000000000..20d5301c1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01134.ababef706c62d3b9efd341c1ee763c85 @@ -0,0 +1,105 @@ +From exmh-workers-admin@redhat.com Thu Sep 26 11:00:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6251816F03 + for ; Thu, 26 Sep 2002 11:00:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:00:00 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8PLP7C14763 for + ; Wed, 25 Sep 2002 22:25:08 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 67D483F46B; Wed, 25 Sep 2002 + 17:25:40 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id E8D883EA65 + for ; Wed, 25 Sep 2002 17:09:52 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8PL9q504803 for exmh-workers@listman.redhat.com; Wed, 25 Sep 2002 + 17:09:52 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8PL9qf04796 for + ; Wed, 25 Sep 2002 17:09:52 -0400 +Received: from milou.dyndns.org (h115n1fls22o974.telia.com + [213.64.79.115]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8PKpri01167 for ; Wed, 25 Sep 2002 16:51:53 + -0400 +Received: by milou.dyndns.org (Postfix, from userid 500) id E38253F2F; + Wed, 25 Sep 2002 23:09:44 +0200 (CEST) +Received: from tippex.localdomain (localhost [127.0.0.1]) by + milou.dyndns.org (Postfix) with ESMTP id E21E03F2C; Wed, 25 Sep 2002 + 23:09:44 +0200 (CEST) +X-Mailer: exmh version 2.5_20020925 01/15/2001 with nmh-1.0.4 +To: Chris Garrigues +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Exmh && speed +In-Reply-To: Message from Chris Garrigues + of + "Wed, 28 Aug 2002 11:07:01 CDT." + <1030550822.18045.TMDA@deepeddy.vircio.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Anders Eriksson +Message-Id: <20020925210944.E38253F2F@milou.dyndns.org> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 23:09:39 +0200 + + +cwg-dated-1033065967.2dc492@DeepEddy.Com said: +> From: Chris Garrigues +> Date: Wed, 28 Aug 2002 11:07:01 -0500 > +> Here's a fix that I think will make a real difference. +> +> Ftoc_ShowSequences needs to be able to be called with an optional +> list of msgids +> to update and if it's called that way it only removes or adds tags +> for those +> messages. Then in places like MsgChange, we only update the +> messages which have +> changed. +> +> Also, a separate Ftoc_ShowSequence function which only updates the +> display of +> one sequence should be written which also takes an optional list of +> msgids. +> +> In a place like MsgChange, it would only need to update the cur +> sequence. +> +> If nobody else gets to it, I'll do this when I get back. + +> I just checked this in. Let me know if it helps. + +> Chris + +Congratulations Chris, you just made the hall of fame!! Speed is much better now. I haven't done any tests, but I'd say that latency dropped 2-3 times and we're back in good shape again. + +Well done! + +/Anders + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01135.d8ebf01721cded4695ffc8ae22b79caa b/Ch3/datasets/spam/easy_ham/01135.d8ebf01721cded4695ffc8ae22b79caa new file mode 100644 index 000000000..575955aeb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01135.d8ebf01721cded4695ffc8ae22b79caa @@ -0,0 +1,80 @@ +From exmh-workers-admin@redhat.com Thu Sep 26 11:00:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AB8A216F03 + for ; Thu, 26 Sep 2002 11:00:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:00:02 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8PLQNC14798 for + ; Wed, 25 Sep 2002 22:26:23 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 0175A3F982; Wed, 25 Sep 2002 + 17:26:54 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 1B9F03F292 + for ; Wed, 25 Sep 2002 17:22:45 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8PLMjM09680 for exmh-workers@listman.redhat.com; Wed, 25 Sep 2002 + 17:22:45 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8PLMif09676 for + ; Wed, 25 Sep 2002 17:22:44 -0400 +Received: from milou.dyndns.org (h115n1fls22o974.telia.com + [213.64.79.115]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8PL4ji05423 for ; Wed, 25 Sep 2002 17:04:45 + -0400 +Received: by milou.dyndns.org (Postfix, from userid 500) id 7D4503F2F; + Wed, 25 Sep 2002 23:22:31 +0200 (CEST) +Received: from tippex.localdomain (localhost [127.0.0.1]) by + milou.dyndns.org (Postfix) with ESMTP id 26CF13F2C for + ; Wed, 25 Sep 2002 23:22:31 +0200 (CEST) +X-Mailer: exmh version 2.5_20020925 01/15/2001 with nmh-1.0.4 +To: exmh-workers@spamassassin.taint.org +Subject: Bug report: msg n+1 marked read +X-Image-Url: http://free.hostdepartment.com/aer/zorro.gif +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Anders Eriksson +Message-Id: <20020925212231.7D4503F2F@milou.dyndns.org> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 25 Sep 2002 23:22:26 +0200 + + +It seems that something changed during the last 3-4 weeks. + +1) In a folder, msgs 1-n is read, n=current, n upwards is unread. +2) change to another folder +3) change back to the original folder and you'll see msg n+1 being +highlighted as current for a split second, that it changes back to +n=current. + +Kind of annoying since it marks msg n+1 as read. + +/Anders + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01136.994c27928a3ef2d69d08453c49c95f7a b/Ch3/datasets/spam/easy_ham/01136.994c27928a3ef2d69d08453c49c95f7a new file mode 100644 index 000000000..aae695b07 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01136.994c27928a3ef2d69d08453c49c95f7a @@ -0,0 +1,135 @@ +From exmh-workers-admin@redhat.com Thu Sep 26 16:29:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C812516F16 + for ; Thu, 26 Sep 2002 16:29:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 16:29:55 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8QE8Ag21413 for + ; Thu, 26 Sep 2002 15:08:11 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 0B6343F15B; Thu, 26 Sep 2002 + 10:08:41 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id F32C43EA6B + for ; Thu, 26 Sep 2002 10:04:15 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8QE4FD31358 for exmh-workers@listman.redhat.com; Thu, 26 Sep 2002 + 10:04:15 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8QE4Ff31354 for + ; Thu, 26 Sep 2002 10:04:15 -0400 +Received: from austin-jump.vircio.com + (IDENT:TjGUmy/2hMGCR/pkXTjQk+pjvGJ6rQSH@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8QDkBi08547 + for ; Thu, 26 Sep 2002 09:46:11 -0400 +Received: (qmail 13375 invoked by uid 104); 26 Sep 2002 14:04:14 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4225. . Clean. Processed in 0.331783 + secs); 26/09/2002 09:04:14 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 26 Sep 2002 14:04:14 -0000 +Received: (qmail 16172 invoked from network); 26 Sep 2002 14:04:09 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?oK+kvfmi7M9NMJlIUSwajTM4UMF+IU7I?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 26 Sep 2002 14:04:09 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Anders Eriksson +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Bug report: msg n+1 marked read +In-Reply-To: <20020925212231.7D4503F2F@milou.dyndns.org> +References: <20020925212231.7D4503F2F@milou.dyndns.org> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-1577134449P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1033049049.16162.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.62 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 26 Sep 2002 09:04:07 -0500 + +--==_Exmh_-1577134449P +Content-Type: text/plain; charset=us-ascii + +> From: Anders Eriksson +> Date: Wed, 25 Sep 2002 23:22:26 +0200 +> +> +> It seems that something changed during the last 3-4 weeks. +> +> 1) In a folder, msgs 1-n is read, n=current, n upwards is unread. +> 2) change to another folder +> 3) change back to the original folder and you'll see msg n+1 being +> highlighted as current for a split second, that it changes back to +> n=current. +> +> Kind of annoying since it marks msg n+1 as read. + +I haven't seen what you describe, but I just saw something close to what you +describe. I think the message that's being incorrectly highlighted as current +is related to the current message in the other folder rather than being n+1. + +I'll have to investigate a bit more to identify and fix the bug, but there is +something going on here. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-1577134449P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9kxPXK9b4h5R0IUIRAq5fAJ43lzUupVkBkj6iJ5Rn7BsBQH5AywCfTAl2 +TJnhSBCb4C+1vyt/QjnVOOQ= +=94lB +-----END PGP SIGNATURE----- + +--==_Exmh_-1577134449P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01137.862bf0c202b134ec11c965d1a46a43a0 b/Ch3/datasets/spam/easy_ham/01137.862bf0c202b134ec11c965d1a46a43a0 new file mode 100644 index 000000000..f8d54b87d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01137.862bf0c202b134ec11c965d1a46a43a0 @@ -0,0 +1,200 @@ +From exmh-users-admin@redhat.com Mon Sep 30 10:45:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8801916F03 + for ; Mon, 30 Sep 2002 10:45:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 10:45:19 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8RCk1g09597 for + ; Fri, 27 Sep 2002 13:46:05 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id DA41F3F80A; Fri, 27 Sep 2002 + 08:46:25 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 15C2C3FC41 + for ; Fri, 27 Sep 2002 08:44:02 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8RCi1218084 for exmh-users@listman.redhat.com; Fri, 27 Sep 2002 + 08:44:01 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8RCi1f18071 for + ; Fri, 27 Sep 2002 08:44:01 -0400 +Received: from cft.snafu.priv.at (outerworld.snafu.priv.at + [193.80.224.65]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8RCPji32603 for ; Fri, 27 Sep 2002 08:25:46 -0400 +Received: from cft.snafu.priv.at (localhost [127.0.0.1]) by + cft.snafu.priv.at (8.12.3/8.12.3/Debian -4) with ESMTP id g8RCheOA016820 + (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=OK); + Fri, 27 Sep 2002 14:43:41 +0200 +Received: (from az@localhost) by cft.snafu.priv.at (8.12.3/8.12.3/Debian + -4) id g8RCgfWq015740; Fri, 27 Sep 2002 14:42:41 +0200 +Message-Id: <200209271242.g8RCgfWq015740@cft.snafu.priv.at> +To: exmh-users@spamassassin.taint.org +Subject: exmh and pgp: support for external passphrase cache (+patch) +From: Alexander Zangerl +Cc: welch@panasas.com +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="----------=_1033130560-1199-5"; + micalg="pgp-sha1"; + protocol="application/pgp-signature" +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 27 Sep 2002 14:42:27 +0200 + +This is a multi-part message in MIME format. +It has been signed conforming to RFC3156. +You'll need GPG or PGP to check the signature. + +------------=_1033130560-1199-5 +Content-Type: multipart/mixed; + boundary="Multipart_Fri_Sep_27_14:42:27_2002-1" +Content-Transfer-Encoding: 8bit + +--Multipart_Fri_Sep_27_14:42:27_2002-1 +Content-Type: text/plain; charset=US-ASCII + +i'm a very happy user of exmh, but i'm paranoid also :-) +therefore i'm not too happy with exmh caching my pgp passphrases. + +usually i use a relatively secure tool called 'quintuple agent' + to store my passphrases, +and i've just added the few lines of code to exmh which allow for such +external caches. + +the patch is attached, it is against version 2.5-1 (debian), and the +files modified are extrasInit.tcl and pgpExec.tcl. + +i've added three new preferences in the 'general pgp' section, which +allow everybody to use his/her favourite external tool to get the +passphrase (everything which spits out the phrase on stdout is ok). + +i'd be happy if somebody with cvs access thinks that this stuff +is worth to be added and does so; apart from that i'm happy for +suggestions, comments or critique (mind you, i'm not exactly a special +friend of tcl so my code may leave things to be desired...) + +regards +az + + +--Multipart_Fri_Sep_27_14:42:27_2002-1 +Content-Type: text/plain; charset=US-ASCII +Content-Disposition: attachment; filename="exmh-patch" +Content-Transfer-Encoding: 8bit + +--- /usr/lib/exmh/extrasInit.tcl Sat Mar 2 17:26:38 2002 ++++ ./extrasInit.tcl Fri Sep 27 14:22:13 2002 +@@ -642,6 +642,18 @@ + {pgp(passtimeout) pgpPassTimeout 60 {Minutes to cache PGP passphrase} + "Exmh will clear its memory of PGP passphrases after + this time period, in minutes, has elapsed." } ++{pgp(extpass) pgpExtPass OFF {Use external passphrase cache} ++"If this is enabled, then exmh will use an external program to retrieve ++your passphrase when needed. pgpKeepPass and pgpPassTimeout will ++be ignored."} ++{pgp(getextcmd) pgpGetExtCmd {/usr/bin/q-client get %s} {Method to query external passphrase cache} ++"This external program is used to retrieve the passphrase for your key, ++if pgpExtPass is active. The passphrase is expected on stdout. ++The key id is substituted with %s (using format)." } ++{pgp(delextcmd) pgpDelExtCmd {/usr/bin/q-client delete %s} {Method to invalidate external passphrase cache} ++"This external program is used to delete the passphrase for your key ++from the external cache, if pgpExtPass is active. ++The key id is substituted with %s (using format)." } + } + + # Make sure we don't inherit a bad pgp(version) from a previous setup +--- /usr/lib/exmh/pgpExec.tcl Sat Mar 2 17:26:39 2002 ++++ ./pgpExec.tcl Fri Sep 27 14:19:40 2002 +@@ -647,6 +647,33 @@ + proc Pgp_GetPass { v key } { + global pgp + ++ if {[info exists pgp(extpass)] && [set pgp(extpass)] \ ++ && [info exists pgp(getextcmd)]} { ++ Exmh_Debug "Pgp_GetPass $v $key external" ++ set keyid [lindex $key 0] ++ set cmd [format $pgp(getextcmd) $keyid] ++ while (1) { ++ Exmh_Debug "running cmd $cmd" ++ if [ catch {exec sh -c "$cmd"} result ] { ++ Exmh_Debug "error running cmd: $result" ++ Exmh_Status "Error executing external cmd" warn ++ return {} ++ } else { ++ if {[Pgp_Exec_CheckPassword $v $result $key]} { ++ return $result ++ } else { ++ Exmh_Debug "bad passphrase" ++ if {[info exists pgp(delextcmd)]} { ++ Exmh_Debug "trying to invalidate bad passphrase" ++ if [catch {exec sh -c "[format $pgp(delextcmd) $keyid]"}] { ++ Exmh_Debug "invalidation failed" ++ return {} ++ } ++ } ++ } ++ } ++ } ++ } else { + Exmh_Debug "Pgp_GetPass $v $key" + + if {[lsearch -glob [set pgp($v,privatekeys)] "[lindex $key 0]*"] < 0} { +@@ -695,6 +722,7 @@ + } + return $password + } ++ } + } + } + + +--Multipart_Fri_Sep_27_14:42:27_2002-1 +Content-Type: text/plain; charset=US-ASCII + +-- ++ Alexander Zangerl + az@snafu.priv.at + DSA 42BD645D + (RSA 5B586291) +Kind of like my 404K fund, "wealth not found." -- shrox + +--Multipart_Fri_Sep_27_14:42:27_2002-1-- + +------------=_1033130560-1199-5 +Content-Type: application/pgp-signature; name="signature.ng" +Content-Disposition: inline; filename="signature.ng" +Content-Transfer-Encoding: 7bit + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.2.0 (GNU/Linux) + +iD8DBQE9lFJBpy/2bEK9ZF0RAq/1AJwLmyZx/zs+FgJkmvcMeL57gewE6ACbBWj0 +OYCcSYWXynxRpVtCbDE1R3A= +=T+T4 +-----END PGP SIGNATURE----- + +------------=_1033130560-1199-5-- + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01138.01c3f9c51755c5c8e2dca29bed384009 b/Ch3/datasets/spam/easy_ham/01138.01c3f9c51755c5c8e2dca29bed384009 new file mode 100644 index 000000000..19cba3183 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01138.01c3f9c51755c5c8e2dca29bed384009 @@ -0,0 +1,83 @@ +From exmh-users-admin@redhat.com Mon Sep 30 10:55:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1796C16F03 + for ; Mon, 30 Sep 2002 10:55:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 10:55:07 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8S3erg11881 for + ; Sat, 28 Sep 2002 04:40:54 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 05CB93EC9B; Fri, 27 Sep 2002 + 23:38:04 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id ED9533EA8D + for ; Fri, 27 Sep 2002 23:34:24 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8S3YOE17528 for exmh-users@listman.redhat.com; Fri, 27 Sep 2002 + 23:34:24 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8S3YOf17524 for + ; Fri, 27 Sep 2002 23:34:24 -0400 +Received: from nasdaq.ms.ensim.com (gateway2.ensim.com [65.164.64.250] + (may be forged)) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8S3G6i18221 for ; Fri, 27 Sep 2002 23:16:06 -0400 +Received: from pmenage-dt.ensim.com ([10.1.2.1]) by nasdaq.ms.ensim.com + with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id TT4L1PNG; Fri, 27 Sep 2002 20:34:18 -0700 +Received: from pmenage (helo=pmenage-dt.ensim.com) by pmenage-dt.ensim.com + with local-esmtp (Exim 3.13 #1 (Debian)) id 17v8Mw-0004eS-00; + Fri, 27 Sep 2002 20:34:14 -0700 +X-Mailer: exmh version 2.5 01/15/2001 with nmh-1.0.4 +From: Paul Menage +To: exmh-users@spamassassin.taint.org +Subject: Re: Help! I've lost my exmh-unseen window! +Cc: pmenage@ensim.com +In-Reply-To: Your message of + "Fri, 27 Sep 2002 20:10:02 PDT." + <200209280310.g8S3A2S20585@bootstrap.sculptors.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 27 Sep 2002 20:34:14 -0700 + +> +> I'll have to try it with another window manager and see if I can +>get exmh to put it back inside of sane boundaries. I don't have this +>problem with any other windows, though. Just the exmhunseen window. +> + +How about enabling the "Show unseen message count in folder cache" +option? It displays the number of unseen messages next to each folder name +(if greater than 0), so you don't really need the unseen window unless +you're using more sequences than just "unseen". + +Paul + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01139.12d25b7cb030b26d64d0a16cd3462b21 b/Ch3/datasets/spam/easy_ham/01139.12d25b7cb030b26d64d0a16cd3462b21 new file mode 100644 index 000000000..0279f9754 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01139.12d25b7cb030b26d64d0a16cd3462b21 @@ -0,0 +1,88 @@ +From exmh-users-admin@redhat.com Mon Sep 30 10:55:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 08F1C16F16 + for ; Mon, 30 Sep 2002 10:55:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 10:55:26 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8S4Hlg13281 for + ; Sat, 28 Sep 2002 05:17:47 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id F0F023F135; Sat, 28 Sep 2002 + 00:16:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 6B1563F050 + for ; Sat, 28 Sep 2002 00:10:03 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8S4A3327814 for exmh-users@listman.redhat.com; Sat, 28 Sep 2002 + 00:10:03 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8S4A3f27810 for + ; Sat, 28 Sep 2002 00:10:03 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8S3pii26259 for ; Fri, 27 Sep 2002 23:51:44 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id BE1FB37EAA; + Fri, 27 Sep 2002 23:09:57 -0500 (CDT) +Received: from dimebox.bmc.com (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id B169637EA9 for ; + Fri, 27 Sep 2002 23:09:57 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +In-Reply-To: +References: +Comments: In-reply-to Paul Menage message dated "Fri, + 27 Sep 2002 20:34:14 -0700." +To: exmh-users@spamassassin.taint.org +Subject: Re: Help! I've lost my exmh-unseen window! +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <15850.1033186192@dimebox.bmc.com> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 27 Sep 2002 23:09:52 -0500 + + + +>>>>> On Fri, 27 Sep 2002, "Paul" == Paul Menage wrote: + + Paul> so you don't really need the unseen window unless you're + Paul> using more sequences than just "unseen". + +I use a virtual window manager and keep the main exmh window and +the detached folder list on one virtual desktop but the unseen +window is set to show on all desktops. + +Got no help for the problems, but just pointing out why some of +us find the unseen window invaluable. + + +--Hal + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01140.71d7100b58f00faaf258b49150c6f54a b/Ch3/datasets/spam/easy_ham/01140.71d7100b58f00faaf258b49150c6f54a new file mode 100644 index 000000000..0b000dcb2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01140.71d7100b58f00faaf258b49150c6f54a @@ -0,0 +1,98 @@ +From exmh-users-admin@redhat.com Mon Sep 30 10:55:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B3D7216F17 + for ; Mon, 30 Sep 2002 10:54:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 10:54:58 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8S3Fwg11269 for + ; Sat, 28 Sep 2002 04:15:59 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 621883EF06; Fri, 27 Sep 2002 + 23:15:23 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id DAF6F3EB89 + for ; Fri, 27 Sep 2002 23:10:07 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8S3A7N13392 for exmh-users@listman.redhat.com; Fri, 27 Sep 2002 + 23:10:07 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8S3A7f13383 for + ; Fri, 27 Sep 2002 23:10:07 -0400 +Received: from bucky.sculptors.com (IDENT:root@bucky.sculptors.com + [216.240.42.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8S2pni14420 for ; Fri, 27 Sep 2002 22:51:49 -0400 +Received: from bootstrap.sculptors.com + (IDENT:q+zuxl3dIEq2kxQ00xeMYNy7bLdLFAtx@bootstrap.sculptors.com + [216.240.42.241]) by bucky.sculptors.com (8.11.6/8.11.6) with ESMTP id + g8S3A4Y15596 for ; Fri, 27 Sep 2002 20:10:05 -0700 +Received: (from salsbury@localhost) by bootstrap.sculptors.com + (8.11.6/8.11.6) id g8S3A2S20585; Fri, 27 Sep 2002 20:10:02 -0700 +From: The Butterfly +Message-Id: <200209280310.g8S3A2S20585@bootstrap.sculptors.com> +To: exmh-users@spamassassin.taint.org +Subject: Re: Help! I've lost my exmh-unseen window! +X-Newsgroups: local.lists.exmh-users +In-Reply-To: +References: <200209220410.g8M4AAI14657@bootstrap.sculptors.com> +Organization: Evolutionary Acceleration, Inc. +Cc: +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Fri, 27 Sep 2002 20:10:02 -0700 + +In article you write: +>>>> Patrick Salsbury writes: +> +> Patrick> One of the features I really like about exmh is the +> Patrick> ability to see which folders have unseen messages in +> Patrick> them, but recently, it seems to have vanished into the +> Patrick> bowels of my window manager in a place I can't get +> Patrick> to. It claims to be running, but doesn't appear +> Patrick> anywhere onscreen. (I'm using Enlightenment with a 2x2 +> Patrick> virtual desktop. I've tried dropping it to only 1 +> Patrick> screen. No help.) +> Patrick> +> +>This may not help/work but I've discovered recently that +>Alt-middle-mouse pops up a list of all of my windows. If I leave +>my mouse on the background, it lists Alt-middle-mouse as "Display +>Task List Menu". +> +>HTH, +> +>- Bill + When I do that, it just moves my mouse to the very edge of a window +(probably trying to center it on the off-screen window in question.) + + I'll have to try it with another window manager and see if I can +get exmh to put it back inside of sane boundaries. I don't have this +problem with any other windows, though. Just the exmhunseen window. + +Pat + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01141.4dcaffc342880fbdbace580e702a1385 b/Ch3/datasets/spam/easy_ham/01141.4dcaffc342880fbdbace580e702a1385 new file mode 100644 index 000000000..dcfa455c9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01141.4dcaffc342880fbdbace580e702a1385 @@ -0,0 +1,157 @@ +From exmh-users-admin@redhat.com Mon Sep 30 13:36:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 70E6C16F03 + for ; Mon, 30 Sep 2002 13:36:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:36:19 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8T7vUg03078 for + ; Sun, 29 Sep 2002 08:57:30 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 8BCAD3EC68; Sun, 29 Sep 2002 + 03:58:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id DF6BE3EC37 + for ; Sun, 29 Sep 2002 03:57:07 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8T7v7Y30694 for exmh-users@listman.redhat.com; Sun, 29 Sep 2002 + 03:57:07 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8T7v7f30686 for + ; Sun, 29 Sep 2002 03:57:07 -0400 +Received: from bucky.sculptors.com (IDENT:root@bucky.sculptors.com + [216.240.42.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8T7cfi01538 for ; Sun, 29 Sep 2002 03:38:41 -0400 +Received: from bootstrap.sculptors.com + (IDENT:d1W+AF9LW1jCEFjDDu0voz+Mr++8NISi@bootstrap.sculptors.com + [216.240.42.241]) by bucky.sculptors.com (8.11.6/8.11.6) with ESMTP id + g8T7v3Y14928 for ; Sun, 29 Sep 2002 00:57:03 -0700 +Received: (from salsbury@localhost) by bootstrap.sculptors.com + (8.11.6/8.11.6) id g8T7v1P11760; Sun, 29 Sep 2002 00:57:01 -0700 +From: The Butterfly +Message-Id: <200209290757.g8T7v1P11760@bootstrap.sculptors.com> +To: exmh-users@spamassassin.taint.org +Subject: Re: Help! I've lost my exmh-unseen window! +X-Newsgroups: local.lists.exmh-users +In-Reply-To: +References: <200209280310.g8S3A2S20585@bootstrap.sculptors.com> +Organization: Evolutionary Acceleration, Inc. +Cc: +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sun, 29 Sep 2002 00:57:01 -0700 + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +In article you write: +>> +>> I'll have to try it with another window manager and see if I can +>>get exmh to put it back inside of sane boundaries. I don't have this +>>problem with any other windows, though. Just the exmhunseen window. +>> +> +>How about enabling the "Show unseen message count in folder cache" +>option? It displays the number of unseen messages next to each folder name +>(if greater than 0), so you don't really need the unseen window unless +>you're using more sequences than just "unseen". +> +>Paul +> + As Hal noted, I like to have the unseen window visible in all +virtual desktops, even if the main window is minimized. However, I looked +through ALL the preferences menus, and didn't see anything resembling "Show +unseen message count in folder cache". Where is that? And in what version? +(I'm running v2.4 - 06/23/2000 - Creaky, I know.) + + I went into twm with no virtual desktops, and it came up just fine. +Going back to Enlightenment I saw the same behavior as before. Then I knew +it MUST be something in the window manager, so I went digging. in my +~/.englightenment/...e_session-XXXXXX.snapshots.0 file I found all the +settings that E. uses for remembering border styles, positions, shaded +state, etc. + I have a 1600x1200 screen, and it kept putting my window at +1655x150 (AND had it shaded to boot, so it was tiny as well as offscreen!) + Searching for 'unseen' in that file found this section: + +NEW: exmh.Exmh +NAME: exmh +CLASS: Exmh +NEW: unseen.UnseenWin +NAME: unseen +CLASS: UnseenWin +DESKTOP: 0 +RES: 1600 1200 +WH: 114 173 +XY: 1655 150 0 0 +LAYER: 4 +STICKY: 1 +SKIPTASK: 0 +SKIPWINLIST: 0 +SKIPFOCUS: 0 +SHADE: 2 +BORDER: PAGER_LEFT_BLUE + + I changed: +XY: 1655 150 0 0 to +XY: 1455 150 0 0 so it would reappear in my viewable space, +restarted Enlightenment (CTRL-ALT-End) and then restarted exmh. Bingo! +There was my window! + + I quickly told Englightenment to forget everything about that +window except is border style, and now have a sveldt little entry like so: + +NEW: exmh.Exmh +NAME: exmh +CLASS: Exmh +NEW: unseen.UnseenWin +NAME: unseen +CLASS: UnseenWin +BORDER: PAGER_LEFT_BLUE + + Completely an Enlightenment problem, not exmh. (Though I wonder how +it got mixed up in the first place? I certainly can't move a window off +screen like that. Unless it was part way over then snapped offscreen when +shading.) + + Hmm. Weird. + + Anyway, thanks for the suggestions, folks. Hopefully this will be +useful to someone scouting the archives in the future... :-) + + + +-----BEGIN PGP SIGNATURE----- +Version: PGP 6.5.2 +Comment: Don't know what PGP is? Check http://www.pgpi.org/ + +iQA/AwUBPZayRIJkhJBJYtPQEQIyzgCg/mMMlKnmP8Cxa/h7b5X0KrJXsLsAoO1N +6dm1Hpj6RnUGPjuUQItBYEC3 +=OL5H +-----END PGP SIGNATURE----- + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01142.c86c585292af26a7c1b09ed6345982a4 b/Ch3/datasets/spam/easy_ham/01142.c86c585292af26a7c1b09ed6345982a4 new file mode 100644 index 000000000..10d321e45 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01142.c86c585292af26a7c1b09ed6345982a4 @@ -0,0 +1,109 @@ +From exmh-workers-admin@redhat.com Mon Sep 30 21:43:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 805F016F03 + for ; Mon, 30 Sep 2002 21:43:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 21:43:55 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8UJ3gK12263 for + ; Mon, 30 Sep 2002 20:03:42 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 183BB405BD; Mon, 30 Sep 2002 + 15:03:45 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 2B82F400D9 + for ; Mon, 30 Sep 2002 14:57:29 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8UIvTk08482 for exmh-workers@listman.redhat.com; Mon, 30 Sep 2002 + 14:57:29 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8UIvSf08478 for + ; Mon, 30 Sep 2002 14:57:28 -0400 +Received: from gray.impulse.net (gray.impulse.net [207.154.64.174]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8UIcsi07025 for + ; Mon, 30 Sep 2002 14:38:54 -0400 +Received: from gray.impulse.net (localhost [127.0.0.1]) by + gray.impulse.net (Postfix) with ESMTP id 5ACA84A3 for + ; Mon, 30 Sep 2002 11:57:27 -0700 (PDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: exmh-workers@spamassassin.taint.org +From: Ted Cabeen +Subject: Working My_Mark2CurSeen +Message-Id: <20020930185727.5ACA84A3@gray.impulse.net> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 11:57:27 -0700 + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Content-Type: text/plain; charset=us-ascii + +After a bit of peeking through the exmh tcl and playing with tcl a bit, I got +the "catchup unseen messages before cur" procedure working. Here's the code +for everybody and the list archives in case anyone wants it in the future. +Thanks to John R. LoVerso for putting me on the right track. + +proc My_Mark2CurSeen {} { + global exmh pick msg + set results {} + Exmh_Status "Clearing unseen up to cur..." red + Mh_SetCur $exmh(folder) $msg(id) + set unseen [Mh_Unseen $exmh(folder)] + foreach elem $unseen { + if { $elem < $msg(id) } { + lappend results $elem + } + } + set pick(ids) $results + busy PickMarkSeen + Exmh_Status ok blue +} + +If you want to use this, stick it in your .tk/exmh directory, run auto_mkindex +on it and add the following lines to your .exmh/exmh-defaults: +*Fops.more.m.uentrylist: ketchup +*Fops.more.m.l_ketchup: Catch-up all before current +*Fops.more.m.c_ketchup: My_Mark2CurSeen + +- -- +Ted Cabeen http://www.pobox.com/~secabeen ted@impulse.net +Check Website or Keyserver for PGP/GPG Key BA0349D2 secabeen@pobox.com +"I have taken all knowledge to be my province." -F. Bacon secabeen@cabeen.org +"Human kind cannot bear very much reality."-T.S.Eliot cabeen@netcom.com + + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (FreeBSD) +Comment: Exmh version 2.5 07/13/2001 + +iD8DBQE9mJ6XoayJfLoDSdIRAkaQAJ9NL83MUU6bJRB19x7MgRaDQhc3ZwCfRK5d +PXat04+AnSx4tHjn5p8mZVc= +=sJtk +-----END PGP SIGNATURE----- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01143.77077715a838bb473dad6a466d2e2403 b/Ch3/datasets/spam/easy_ham/01143.77077715a838bb473dad6a466d2e2403 new file mode 100644 index 000000000..e5061bd50 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01143.77077715a838bb473dad6a466d2e2403 @@ -0,0 +1,83 @@ +From exmh-workers-admin@redhat.com Mon Sep 30 21:44:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7327B16F03 + for ; Mon, 30 Sep 2002 21:44:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 21:44:31 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8UJwhK13809 for + ; Mon, 30 Sep 2002 20:58:44 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id B6A403FB1F; Mon, 30 Sep 2002 + 15:55:23 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 3FAE140128 + for ; Mon, 30 Sep 2002 15:53:47 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8UJrlA27928 for exmh-workers@listman.redhat.com; Mon, 30 Sep 2002 + 15:53:47 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8UJrkf27924 for + ; Mon, 30 Sep 2002 15:53:46 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g8UJZCi24308 for ; Mon, 30 Sep 2002 15:35:12 + -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id E16E737EAA; + Mon, 30 Sep 2002 14:53:38 -0500 (CDT) +Received: from dimebox.bmc.com (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id 617FF37EA6 for ; + Mon, 30 Sep 2002 14:53:38 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +In-Reply-To: <20020930185727.5ACA84A3@gray.impulse.net> +References: <20020930185727.5ACA84A3@gray.impulse.net> +Comments: In-reply-to Ted Cabeen message dated "Mon, + 30 Sep 2002 11:57:27 -0700." +To: exmh-workers@spamassassin.taint.org +Subject: Re: Working My_Mark2CurSeen +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <3703.1033415613@dimebox.bmc.com> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 14:53:33 -0500 + + + +>>>>> On Mon, 30 Sep 2002, "Ted" == Ted Cabeen wrote: + + Ted> Here's the code for everybody and the list archives in + Ted> case anyone wants it in the future. + +Very cool! I vote for this being added to CVS, any objections? + +--Hal + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01144.b3cbc4db9d2eac4cd0bea04fd75fc859 b/Ch3/datasets/spam/easy_ham/01144.b3cbc4db9d2eac4cd0bea04fd75fc859 new file mode 100644 index 000000000..cd8d1d631 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01144.b3cbc4db9d2eac4cd0bea04fd75fc859 @@ -0,0 +1,97 @@ +From exmh-workers-admin@redhat.com Mon Sep 30 21:44:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A071416F03 + for ; Mon, 30 Sep 2002 21:44:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 21:44:40 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8UKA9K14364 for + ; Mon, 30 Sep 2002 21:10:13 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 7492F406E3; Mon, 30 Sep 2002 + 16:08:56 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id E21B140598 + for ; Mon, 30 Sep 2002 16:02:02 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8UK22930682 for exmh-workers@listman.redhat.com; Mon, 30 Sep 2002 + 16:02:02 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8UK22f30678 for + ; Mon, 30 Sep 2002 16:02:02 -0400 +Received: from gray.impulse.net (gray.impulse.net [207.154.64.174]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g8UJhRi26580 for + ; Mon, 30 Sep 2002 15:43:27 -0400 +Received: from gray.impulse.net (localhost [127.0.0.1]) by + gray.impulse.net (Postfix) with ESMTP id 148FB479; Mon, 30 Sep 2002 + 13:02:01 -0700 (PDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Hal DeVore +Cc: exmh-workers@spamassassin.taint.org +From: Ted Cabeen +Subject: Re: Working My_Mark2CurSeen +In-Reply-To: <3703.1033415613@dimebox.bmc.com> +References: <3703.1033415613@dimebox.bmc.com> + <20020930185727.5ACA84A3@gray.impulse.net> +Message-Id: <20020930200201.148FB479@gray.impulse.net> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Mon, 30 Sep 2002 13:02:01 -0700 + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Content-Type: text/plain; charset=us-ascii + +In message <3703.1033415613@dimebox.bmc.com>, Hal DeVore writes: +>>>>>> On Mon, 30 Sep 2002, "Ted" == Ted Cabeen wrote: +> +> Ted> Here's the code for everybody and the list archives in +> Ted> case anyone wants it in the future. +> +>Very cool! I vote for this being added to CVS, any objections? + +Not from me, although you probably want to change the name of the procedure. +:) + +- -- +Ted Cabeen http://www.pobox.com/~secabeen ted@impulse.net +Check Website or Keyserver for PGP/GPG Key BA0349D2 secabeen@pobox.com +"I have taken all knowledge to be my province." -F. Bacon secabeen@cabeen.org +"Human kind cannot bear very much reality."-T.S.Eliot cabeen@netcom.com + + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (FreeBSD) +Comment: Exmh version 2.5 07/13/2001 + +iD8DBQE9mK24oayJfLoDSdIRAs21AKDYeoDgFYgSUldYusaLxJTbcsPxuQCdHaFG +Z4P4FqmRJlqCbvmKFJMNgJI= +=dC6l +-----END PGP SIGNATURE----- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01145.4280ea0a58b56c22eb21583a3b3db290 b/Ch3/datasets/spam/easy_ham/01145.4280ea0a58b56c22eb21583a3b3db290 new file mode 100644 index 000000000..321cb6d77 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01145.4280ea0a58b56c22eb21583a3b3db290 @@ -0,0 +1,91 @@ +From exmh-workers-admin@redhat.com Tue Oct 1 10:36:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 709F816F1E + for ; Tue, 1 Oct 2002 10:35:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:35:44 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g917JRK14417 for + ; Tue, 1 Oct 2002 08:19:31 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 2C76D3EAF8; Tue, 1 Oct 2002 + 03:20:02 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 02A563EB29 + for ; Tue, 1 Oct 2002 03:19:19 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g917JIl02113 for exmh-workers@listman.redhat.com; Tue, 1 Oct 2002 + 03:19:18 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g917JIf02109 for + ; Tue, 1 Oct 2002 03:19:18 -0400 +Received: from ratree.psu.ac.th ([202.12.73.3]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g916x3i15006 for ; + Tue, 1 Oct 2002 02:59:47 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g917GTJ19541; + Tue, 1 Oct 2002 14:16:44 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g917Ev722747; Tue, 1 Oct 2002 14:15:12 +0700 + (ICT) +From: Robert Elz +To: Hal DeVore +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Working My_Mark2CurSeen +In-Reply-To: <3703.1033415613@dimebox.bmc.com> +References: <3703.1033415613@dimebox.bmc.com> + <20020930185727.5ACA84A3@gray.impulse.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <22745.1033456497@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Tue, 01 Oct 2002 14:14:57 +0700 + + Date: Mon, 30 Sep 2002 14:53:33 -0500 + From: Hal DeVore + Message-ID: <3703.1033415613@dimebox.bmc.com> + + | I vote for this being added to CVS, any objections? + +No, but using PickMarkSeen (and pick(ids)) as an alternative to +just doing + + Seq_Del $exmh(folder) $mhProfile(unseen-sequence) $results + +seems unnecessary to me (that's all that PickMarkSeen does after all). +(That can be done via "busy") + +Of course, the same is true of the badly named Pick_MarkSeen which has +nothing at all to do with "pick" except that it (ab)uses the pick(ids) var +in the same way. (Its name would be hard to change unfortunately, as it +is known in app-defaults files for the "Catch Up Unseen" menu item, but +its implementation could certainly be fixed). + +kre + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01146.fe05a7a131928bf0997793278e203448 b/Ch3/datasets/spam/easy_ham/01146.fe05a7a131928bf0997793278e203448 new file mode 100644 index 000000000..87a4e76d5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01146.fe05a7a131928bf0997793278e203448 @@ -0,0 +1,95 @@ +From exmh-workers-admin@redhat.com Wed Oct 2 11:43:17 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 11B4A16F03 + for ; Wed, 2 Oct 2002 11:43:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:43:17 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g924NTK25461 for + ; Wed, 2 Oct 2002 05:23:30 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 82B7F3EA36; Wed, 2 Oct 2002 + 00:24:04 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 0BC7440AD2 + for ; Wed, 2 Oct 2002 00:21:29 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g924LSG11235 for exmh-workers@listman.redhat.com; Wed, 2 Oct 2002 + 00:21:28 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g924LSf11231 for + ; Wed, 2 Oct 2002 00:21:28 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g9242fi19217 for ; Wed, 2 Oct 2002 00:02:41 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id 3F74337EA9; + Tue, 1 Oct 2002 23:21:27 -0500 (CDT) +Received: from dimebox.bmc.com (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id 0A11D37EA6 for ; + Tue, 1 Oct 2002 23:21:27 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 cvs 10/01/2002 with nmh-1.0.4 +To: exmh-workers@spamassassin.taint.org +Subject: Unseen window versus Sequences Window +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <30937.1033532481@dimebox.bmc.com> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Tue, 01 Oct 2002 23:21:21 -0500 + + +I apologize for not catching up to the current code in so long. + +Now that I have I'm trying to resolve "breakage" and differences. + +The unseen window seems to have been replaced with the sequences +window. While I appreciate the flexibility of the sequences +window, the unseen window filled an important-to-me need: It +was tiny and could be set to show on all desktops of a virtual +window manager without taking a lot of space. Since my normal +mode of operation involves two copies of exmh displaying on a +1024x768 vnc session, screen space is at a premium. + +As things stand now, I have a sequences window that shows a lot +more information than I need to have handy and takes up a lot +more room than I can "spare". + +I can see that I could like the new sequences window a lot for +certain operations. But I'd like a nice uncluttered, tiny +window that _only_ shows me info on my unread mail. + +One possibility that occurs to me would be a button or mouse +click that "shrinks" the Sequences window to show only the +sequences in the "always show" list. And of course a way to +expand it back. + +--Hal + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01147.ee1b78a672dbd806bf3393ee9c3903c8 b/Ch3/datasets/spam/easy_ham/01147.ee1b78a672dbd806bf3393ee9c3903c8 new file mode 100644 index 000000000..bd0e9f062 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01147.ee1b78a672dbd806bf3393ee9c3903c8 @@ -0,0 +1,80 @@ +From exmh-workers-admin@redhat.com Wed Oct 2 11:43:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 643F816F16 + for ; Wed, 2 Oct 2002 11:43:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:43:19 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g924NYK25468 for + ; Wed, 2 Oct 2002 05:23:34 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 795853F0FE; Wed, 2 Oct 2002 + 00:24:10 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 85D0B3FD84 + for ; Wed, 2 Oct 2002 00:22:21 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g924MLv11335 for exmh-workers@listman.redhat.com; Wed, 2 Oct 2002 + 00:22:21 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g924MLf11331 for + ; Wed, 2 Oct 2002 00:22:21 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g9243Xi19307 for ; Wed, 2 Oct 2002 00:03:34 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id E13E437EA9; + Tue, 1 Oct 2002 23:22:19 -0500 (CDT) +Received: from dimebox.bmc.com (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id C189837EA6 for ; + Tue, 1 Oct 2002 23:22:19 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 cvs 10/01/2002 with nmh-1.0.4 +To: exmh-workers@spamassassin.taint.org +Subject: Bindings problem with current CVS code +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Message-Id: <30957.1033532534@dimebox.bmc.com> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Tue, 01 Oct 2002 23:22:14 -0500 + +I've had this binding in my ~/.exmh/exmhbindings for years: + +set {bindings(key,Flist_FindUnseen 1 ; Inc_PresortFinish)} + +After updating to the current code in CVS I get "bad key f" when +I hit the "f" key. I can open the Bindings... Commands window +and define the binding. It then works until I restart exmh. + +I suspect a parsing problem/change. I'll try to look into this +tomorrow unless someone knows where the problem might be. + +--Hal + + + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01148.a8dd7b8896c5c7966bbc52e4f4b0a164 b/Ch3/datasets/spam/easy_ham/01148.a8dd7b8896c5c7966bbc52e4f4b0a164 new file mode 100644 index 000000000..fdb39257b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01148.a8dd7b8896c5c7966bbc52e4f4b0a164 @@ -0,0 +1,130 @@ +From exmh-workers-admin@redhat.com Wed Oct 2 15:58:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 51D3D16F16 + for ; Wed, 2 Oct 2002 15:58:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 15:58:51 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g92DxWK11529 for + ; Wed, 2 Oct 2002 14:59:37 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 2BC0E3EFFA; Wed, 2 Oct 2002 + 10:00:05 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 9475440D14 + for ; Wed, 2 Oct 2002 09:56:33 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g92DuXw17281 for exmh-workers@listman.redhat.com; Wed, 2 Oct 2002 + 09:56:33 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g92DuXf17277 for + ; Wed, 2 Oct 2002 09:56:33 -0400 +Received: from austin-jump.vircio.com (jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g92Dbgi25464 + for ; Wed, 2 Oct 2002 09:37:42 -0400 +Received: (qmail 15297 invoked by uid 104); 2 Oct 2002 13:56:32 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4226. . Clean. Processed in 0.340282 + secs); 02/10/2002 08:56:31 +Received: from deepeddy.vircio.com ([10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 2 Oct 2002 13:56:31 -0000 +Received: (qmail 400 invoked from network); 2 Oct 2002 13:56:29 -0000 +Received: from localhost (HELO deepeddy.vircio.com) ([127.0.0.1]) + (envelope-sender ) by localhost (qmail-ldap-1.03) + with SMTP for ; 2 Oct 2002 13:56:29 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Hal DeVore +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Bindings problem with current CVS code +In-Reply-To: <30957.1033532534@dimebox.bmc.com> +References: <30957.1033532534@dimebox.bmc.com> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-2120603942P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1033566989.394.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.62 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 02 Oct 2002 08:56:27 -0500 + +--==_Exmh_-2120603942P +Content-Type: text/plain; charset=us-ascii + +> From: Hal DeVore +> Date: Tue, 01 Oct 2002 23:22:14 -0500 +> +> I've had this binding in my ~/.exmh/exmhbindings for years: +> +> set {bindings(key,Flist_FindUnseen 1 ; Inc_PresortFinish)} +> +> After updating to the current code in CVS I get "bad key f" when +> I hit the "f" key. I can open the Bindings... Commands window +> and define the binding. It then works until I restart exmh. +> +> I suspect a parsing problem/change. I'll try to look into this +> tomorrow unless someone knows where the problem might be. + +Flist_FindUnseen has changed to Flist_FindSeqs. It takes the same arguments, +but I changed the name because it looks for all the sequences, not just the +unseen sequence. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-2120603942P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9mvsKK9b4h5R0IUIRAsiQAJ9cQeGocfBt4zgFi0J3kLd5f6a+NACffh/N +rngnJZnZ5eU67ZIqlLGmC2w= +=BCEQ +-----END PGP SIGNATURE----- + +--==_Exmh_-2120603942P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01149.a3ac28c8860e0beffc8ace0ff49b4532 b/Ch3/datasets/spam/easy_ham/01149.a3ac28c8860e0beffc8ace0ff49b4532 new file mode 100644 index 000000000..5224749f4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01149.a3ac28c8860e0beffc8ace0ff49b4532 @@ -0,0 +1,123 @@ +From exmh-workers-admin@redhat.com Wed Oct 2 15:58:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 73E1416F17 + for ; Wed, 2 Oct 2002 15:58:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 15:58:53 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g92E1BK11576 for + ; Wed, 2 Oct 2002 15:01:16 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id EDB9C40D14; Wed, 2 Oct 2002 + 10:01:47 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 3C5563F137 + for ; Wed, 2 Oct 2002 09:58:55 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g92DwtC18034 for exmh-workers@listman.redhat.com; Wed, 2 Oct 2002 + 09:58:55 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g92Dwsf18030 for + ; Wed, 2 Oct 2002 09:58:54 -0400 +Received: from austin-jump.vircio.com (jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g92De4i26211 + for ; Wed, 2 Oct 2002 09:40:04 -0400 +Received: (qmail 15481 invoked by uid 104); 2 Oct 2002 13:58:54 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4226. . Clean. Processed in 0.34979 + secs); 02/10/2002 08:58:53 +Received: from deepeddy.vircio.com ([10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 2 Oct 2002 13:58:53 -0000 +Received: (qmail 917 invoked from network); 2 Oct 2002 13:58:53 -0000 +Received: from localhost (HELO deepeddy.vircio.com) ([127.0.0.1]) + (envelope-sender ) by localhost (qmail-ldap-1.03) + with SMTP for ; 2 Oct 2002 13:58:53 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Hal DeVore +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Unseen window versus Sequences Window +In-Reply-To: <30937.1033532481@dimebox.bmc.com> +References: <30937.1033532481@dimebox.bmc.com> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-2113882517P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1033567132.911.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.62 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 02 Oct 2002 08:58:51 -0500 + +--==_Exmh_-2113882517P +Content-Type: text/plain; charset=us-ascii + +> From: Hal DeVore +> Date: Tue, 01 Oct 2002 23:21:21 -0500 +> +> One possibility that occurs to me would be a button or mouse +> click that "shrinks" the Sequences window to show only the +> sequences in the "always show" list. And of course a way to +> expand it back. + +That's a pretty good idea. I'm not sure I'll get to it any time soon. (I +already have a known bug reported on 9/25 that I haven't been able to get to.) + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-2113882517P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9mvubK9b4h5R0IUIRAs2xAJ9gFx9Fvnld2Kp7JaUZyusroUweFQCfWPnM +Pp78BfHf//xicipba00ru3o= +=tDi6 +-----END PGP SIGNATURE----- + +--==_Exmh_-2113882517P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01150.8cf9e9429b48ec70e4912a0acacf6a99 b/Ch3/datasets/spam/easy_ham/01150.8cf9e9429b48ec70e4912a0acacf6a99 new file mode 100644 index 000000000..252b76f9d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01150.8cf9e9429b48ec70e4912a0acacf6a99 @@ -0,0 +1,93 @@ +From exmh-workers-admin@redhat.com Wed Oct 2 15:58:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 91C8716F03 + for ; Wed, 2 Oct 2002 15:58:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 15:58:48 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g92DwjK11512 for + ; Wed, 2 Oct 2002 14:58:46 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id C4A613EFFA; Wed, 2 Oct 2002 + 09:59:19 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id F2FFC3F792 + for ; Wed, 2 Oct 2002 09:54:12 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g92DsCq16707 for exmh-workers@listman.redhat.com; Wed, 2 Oct 2002 + 09:54:12 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g92DsCf16703 for + ; Wed, 2 Oct 2002 09:54:12 -0400 +Received: from kcmso2.proxy.att.com (kcmso2.att.com [192.128.134.71]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g92DZMi25039 for + ; Wed, 2 Oct 2002 09:35:22 -0400 +Received: from ulysses.homer.att.com ([135.205.193.8]) by + kcmso2.proxy.att.com (AT&T IPNS/MSO-4.0) with ESMTP id g92Ds6Od028475 for + ; Wed, 2 Oct 2002 08:54:06 -0500 (CDT) +Received: from hera.homer.att.com (hera.homer.att.com [135.205.193.102]) + by ulysses.homer.att.com (8.9.3/8.9.3) with ESMTP id JAA05531 for + ; Wed, 2 Oct 2002 09:54:04 -0400 (EDT) +Received: from hera.homer.att.com (localhost [127.0.0.1]) by + hera.homer.att.com (8.9.3/8.9.3) with ESMTP id JAA13534 for + ; Wed, 2 Oct 2002 09:54:04 -0400 (EDT) +Message-Id: <200210021354.JAA13534@hera.homer.att.com> +X-Mailer: exmh version 2.5-CVS 08/22/2002 with nmh-1.0.4 +To: exmh-workers@spamassassin.taint.org +Subject: A couple of nits... +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: "J. W. Ballantine" +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 02 Oct 2002 09:54:04 -0400 + + +I have a couple of small issues, and I'm not sure if their exmh issues +or my setup issues. + +First, when I try and run exmh with wish from tk8.4.0 it seems to take +forever to start, but with wish from tk8.a.4 it starts in a snap. + +Using the latest CVS, when I open exmh and the folder I'm in has unseen +messages and I hit next, exmh changes to the next folder with unseen messages +rather than to the first unseen in the current folder. + +Finally, when I reach the end of the messages in a folder and go on to +the next unseen, exmh always goes back to inbox (which has no unseen +messages) rather than the next folder with unseen messages. (When I +goto next from inbox it does go where I would think it should go). + +Just wanted to let you know what I'm seeing and find out if I'm expecting +some different than I should be. + +Thanks for all the effort + +Jim + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01151.a454cc33dce527bedd70cf42cff5f079 b/Ch3/datasets/spam/easy_ham/01151.a454cc33dce527bedd70cf42cff5f079 new file mode 100644 index 000000000..2bfb06adc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01151.a454cc33dce527bedd70cf42cff5f079 @@ -0,0 +1,87 @@ +From exmh-workers-admin@redhat.com Wed Oct 2 15:59:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4192D16F19 + for ; Wed, 2 Oct 2002 15:59:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 15:59:05 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g92EZWK13040 for + ; Wed, 2 Oct 2002 15:35:33 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id AE42E3F99C; Wed, 2 Oct 2002 + 10:36:05 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 89B4F40DCE + for ; Wed, 2 Oct 2002 10:34:19 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g92EYJ728308 for exmh-workers@listman.redhat.com; Wed, 2 Oct 2002 + 10:34:19 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g92EYJf28304 for + ; Wed, 2 Oct 2002 10:34:19 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g92EFSi03196 for ; Wed, 2 Oct 2002 10:15:28 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id 2441837EAB; + Wed, 2 Oct 2002 09:34:14 -0500 (CDT) +Received: from dimebox.bmc.com (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id 040AE37EAA; Wed, 2 Oct 2002 09:34:13 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 cvs 10/01/2002 with nmh-1.0.4 +In-Reply-To: <1033567132.911.TMDA@deepeddy.vircio.com> +References: <30937.1033532481@dimebox.bmc.com> + <1033567132.911.TMDA@deepeddy.vircio.com> +Comments: In-reply-to Chris Garrigues + message dated "Wed, 02 Oct 2002 08:58:51 -0500." +To: Chris Garrigues +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Unseen window versus Sequences Window +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <6367.1033569248@dimebox.bmc.com> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 02 Oct 2002 09:34:08 -0500 + + +>>>>> On Wed, 2 Oct 2002, "Chris" == Chris Garrigues wrote: + + Chris> I'm not sure I'll get to it any time soon. + +Well, you have a pretty good idea of when I might get to it (the +phrase hell freezes over comes to mind)... so whenever you can +will certainly be fine. + +Thanks for considering it. In the meantime I've set the +"minimum entry lines" to 1. It certainly isn't going to make me +go back to the old version. + +--Hal + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01152.94d97f41bdf572892508e21b3906aa3b b/Ch3/datasets/spam/easy_ham/01152.94d97f41bdf572892508e21b3906aa3b new file mode 100644 index 000000000..f7b4d0e66 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01152.94d97f41bdf572892508e21b3906aa3b @@ -0,0 +1,123 @@ +From exmh-workers-admin@redhat.com Wed Oct 2 15:59:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DB09716F1A + for ; Wed, 2 Oct 2002 15:59:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 15:59:07 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g92EngK13465 for + ; Wed, 2 Oct 2002 15:49:43 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 5A01C3F997; Wed, 2 Oct 2002 + 10:50:15 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 6527B3EB14 + for ; Wed, 2 Oct 2002 10:49:39 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g92End532337 for exmh-workers@listman.redhat.com; Wed, 2 Oct 2002 + 10:49:39 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g92Endf32333 for + ; Wed, 2 Oct 2002 10:49:39 -0400 +Received: from turing-police.cc.vt.edu (turing-police.cc.vt.edu + [128.173.14.107]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g92EUmi07079 for ; Wed, 2 Oct 2002 10:30:48 -0400 +Received: from turing-police.cc.vt.edu (localhost [127.0.0.1]) by + turing-police.cc.vt.edu (8.12.6.Beta1/8.12.6.Beta1) with ESMTP id + g92EnPLw027736; Wed, 2 Oct 2002 10:49:25 -0400 +Message-Id: <200210021449.g92EnPLw027736@turing-police.cc.vt.edu> +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4+dev +To: "J. W. Ballantine" +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: A couple of nits... +In-Reply-To: Your message of + "Wed, 02 Oct 2002 09:54:04 EDT." + <200210021354.JAA13534@hera.homer.att.com> +From: Valdis.Kletnieks@vt.edu +X-Url: http://black-ice.cc.vt.edu/~valdis/ +X-Face-Viewer: See ftp://cs.indiana.edu/pub/faces/index.html to decode picture +X-Face: 34C9$Ewd2zeX+\!i1BA\j{ex+$/V'JBG#;3_noWWYPa"|,I#`R"{n@w>#:{)FXyiAS7(8t( + ^*w5O*!8O9YTe[r{e%7(yVRb|qxsRYw`7J!`AM}m_SHaj}f8eb@d^L>BrX7iO[ +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-1581861840P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 02 Oct 2002 10:49:25 -0400 + +--==_Exmh_-1581861840P +Content-Type: text/plain; charset=us-ascii + +On Wed, 02 Oct 2002 09:54:04 EDT, "J. W. Ballantine" said: + +> First, when I try and run exmh with wish from tk8.4.0 it seems to take +> forever to start, but with wish from tk8.a.4 it starts in a snap. + +This sounds like something piggy in the 'flist' code - I'm seeing flist +in general taking 5-10 seconds. Interesting that a different wish comes up +fast, there might be a borkedness in 8.4. + +> Using the latest CVS, when I open exmh and the folder I'm in has unseen +> messages and I hit next, exmh changes to the next folder with unseen messages +> rather than to the first unseen in the current folder. + +Hmm.. weirdness.. + +> Finally, when I reach the end of the messages in a folder and go on to +> the next unseen, exmh always goes back to inbox (which has no unseen +> messages) rather than the next folder with unseen messages. (When I +> goto next from inbox it does go where I would think it should go). + +I've been seeing this as well - *usually* with inbox, but it's gotten +stuck on some other folders as well (I have procmail do rcvstore into folders +for me). +-- + Valdis Kletnieks + Computer Systems Senior Engineer + Virginia Tech + + +--==_Exmh_-1581861840P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (GNU/Linux) +Comment: Exmh version 2.5 07/13/2001 + +iD8DBQE9mwd0cC3lWbTT17ARAsOKAKCe3ziHYPQnWBGyUdYQzYurE1tguACfS9Ms +TUQI8ndQ8stuJqaWVGSAi4k= +=JBgX +-----END PGP SIGNATURE----- + +--==_Exmh_-1581861840P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01153.d533f7f18252b1a26a9f44a52bf0559a b/Ch3/datasets/spam/easy_ham/01153.d533f7f18252b1a26a9f44a52bf0559a new file mode 100644 index 000000000..202568841 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01153.d533f7f18252b1a26a9f44a52bf0559a @@ -0,0 +1,87 @@ +From exmh-workers-admin@redhat.com Wed Oct 2 15:59:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C267B16F1B + for ; Wed, 2 Oct 2002 15:59:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 15:59:09 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g92EoSK13489 for + ; Wed, 2 Oct 2002 15:50:32 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 7D52F3F9FC; Wed, 2 Oct 2002 + 10:51:03 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 20E383F997 + for ; Wed, 2 Oct 2002 10:50:58 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g92EowP32688 for exmh-workers@listman.redhat.com; Wed, 2 Oct 2002 + 10:50:58 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g92Eovf32684 for + ; Wed, 2 Oct 2002 10:50:57 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g92EW7i07408 for ; Wed, 2 Oct 2002 10:32:07 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id 7E38F37EAB; + Wed, 2 Oct 2002 09:50:56 -0500 (CDT) +Received: from dimebox.bmc.com (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id 4FF5737EAA for ; + Wed, 2 Oct 2002 09:50:56 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 cvs 10/01/2002 with nmh-1.0.4 +In-Reply-To: <1033566989.394.TMDA@deepeddy.vircio.com> +References: <30957.1033532534@dimebox.bmc.com> + <1033566989.394.TMDA@deepeddy.vircio.com> +Comments: In-reply-to Chris Garrigues + message dated "Wed, 02 Oct 2002 08:56:27 -0500." +To: exmh-workers@spamassassin.taint.org +Subject: Re: Bindings problem with current CVS code +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <6714.1033570251@dimebox.bmc.com> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 02 Oct 2002 09:50:51 -0500 + + + +>>>>> On Wed, 2 Oct 2002, "Chris" == Chris Garrigues wrote: + + Chris> Flist_FindUnseen has changed to Flist_FindSeqs. + +I guess I was sleepier than I thought. I managed to cut and +paste the _right_ stuff from the app-defaults file into the +Bindings definition dialog without ever noticing that it was +different from what was in my exmhbindings file. + +--Hal + +P.S., can I get a pointer to a freeware Tcl/Tk debugger? + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01154.9e17bb23e3f1dc6f61f25ea4e7946505 b/Ch3/datasets/spam/easy_ham/01154.9e17bb23e3f1dc6f61f25ea4e7946505 new file mode 100644 index 000000000..daa1a6a16 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01154.9e17bb23e3f1dc6f61f25ea4e7946505 @@ -0,0 +1,84 @@ +From exmh-workers-admin@redhat.com Wed Oct 2 18:17:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 31B7216F03 + for ; Wed, 2 Oct 2002 18:17:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 18:17:44 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g92H0HK18022 for + ; Wed, 2 Oct 2002 18:00:22 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id B6E47402CB; Wed, 2 Oct 2002 + 13:00:16 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 4DCCC40F58 + for ; Wed, 2 Oct 2002 12:56:06 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g92Gu6404969 for exmh-workers@listman.redhat.com; Wed, 2 Oct 2002 + 12:56:06 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g92Gu5f04963 for + ; Wed, 2 Oct 2002 12:56:05 -0400 +Received: from ratree.psu.ac.th ([202.12.73.3]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g92GbAi09273 for ; + Wed, 2 Oct 2002 12:37:11 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g92GtnQ06382; + Wed, 2 Oct 2002 23:55:50 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g92Gsi703746; Wed, 2 Oct 2002 23:54:44 +0700 + (ICT) +From: Robert Elz +To: Hal DeVore +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: Another sequences window nit +In-Reply-To: <9288.1033576753@dimebox.bmc.com> +References: <9288.1033576753@dimebox.bmc.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <3744.1033577684@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 02 Oct 2002 23:54:44 +0700 + + Date: Wed, 02 Oct 2002 11:39:13 -0500 + From: Hal DeVore + Message-ID: <9288.1033576753@dimebox.bmc.com> + + | Restarting exmh was necessary. + +Probably not. Next time try clicking on the folder name in the +sequences window for the sequence. That is, request that sequence +be the one displayed in the FTOC. If the sequence doesn't exist, +it will be cleaned up then. + +Perhaps it would be nicer if flist would do it as well, but this +is effective enough. + +kre + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01155.f0c05f9bee1162915522055b817f7a4f b/Ch3/datasets/spam/easy_ham/01155.f0c05f9bee1162915522055b817f7a4f new file mode 100644 index 000000000..aa19ebcbf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01155.f0c05f9bee1162915522055b817f7a4f @@ -0,0 +1,123 @@ +From exmh-workers-admin@redhat.com Thu Oct 3 12:22:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6403D16F16 + for ; Thu, 3 Oct 2002 12:22:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:22:08 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g92N1VK00712 for + ; Thu, 3 Oct 2002 00:01:32 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 870D83EBE8; Wed, 2 Oct 2002 + 19:02:03 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 9EC323ECDA + for ; Wed, 2 Oct 2002 19:01:00 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g92N10M15340 for exmh-workers@listman.redhat.com; Wed, 2 Oct 2002 + 19:01:00 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g92N10f15334 for + ; Wed, 2 Oct 2002 19:01:00 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g92Mg5i19652 for ; Wed, 2 Oct 2002 18:42:05 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id 126E937EBF; + Wed, 2 Oct 2002 18:00:58 -0500 (CDT) +Received: from dimebox.bmc.com (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id DFD8637EBE for ; + Wed, 2 Oct 2002 18:00:58 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 cvs 10/01/2002 with nmh-1.0.4 +In-Reply-To: <22745.1033456497@munnari.OZ.AU> +References: <3703.1033415613@dimebox.bmc.com> + <20020930185727.5ACA84A3@gray.impulse.net> + <22745.1033456497@munnari.OZ.AU> +Comments: In-reply-to Robert Elz message dated "Tue, + 01 Oct 2002 14:14:57 +0700." +To: exmh-workers@spamassassin.taint.org +Subject: Re: Working My_Mark2CurSeen +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <16828.1033599653@dimebox.bmc.com> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Wed, 02 Oct 2002 18:00:53 -0500 + + +[I wrote this last night but it appears I never sent it... still +haven't had time to dig in to it...] + + +>>>>> On Tue, 1 Oct 2002, "Robert" == Robert Elz wrote: + + Robert> No, but using PickMarkSeen (and pick(ids)) as an + Robert> alternative to just doing + + Robert> Seq_Del $exmh(folder) $mhProfile(unseen-sequence) $results + + +Ah. Neither Ted nor I were particularly up to date. I pulled +down the lates from CVS and am now running with it. I miss the +blue ftoc lines but I'll sort that out soon, iirc Chris said +it's a simple resource change. + +Ted's code to "ketchup" made use of some of the procs that went +away in the sequence generalization. I've fixed it up... almost +and it looks like this now: + +proc Cabeen_Mark2CurSeen {} { + global exmh mhProfile msg + set results {} + Exmh_Status "Clearing unseen up to cur..." red + Mh_SetCur $exmh(folder) $msg(id) + set unseen [Mh_Sequence $exmh(folder) $mhProfile(unseen-sequence) ] + foreach elem $unseen { + if { $elem <= $msg(id) } { + lappend results $elem + } + } + busy Seq_Del $exmh(folder) $mhProfile(unseen-sequence) $results + Exmh_Status ok blue +} + + +The "almost" is because it's not updating the highlighting on +the ftoc. I'm too tired to go figure out how to fix that just +now and have to move on to other stuff. If someone wants to +forward me a clue feel free. + +Now that I've got all of Chris' sequence stuff I discovered that +my sequences are ... cluttered. + +--Hal + + + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + + diff --git a/Ch3/datasets/spam/easy_ham/01156.64602d74854cb26859c88c6f560fca27 b/Ch3/datasets/spam/easy_ham/01156.64602d74854cb26859c88c6f560fca27 new file mode 100644 index 000000000..43a04d87d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01156.64602d74854cb26859c88c6f560fca27 @@ -0,0 +1,93 @@ +From exmh-users-admin@redhat.com Mon Oct 7 22:40:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1949116F16 + for ; Mon, 7 Oct 2002 22:40:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 22:40:37 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97LX0K17804 for + ; Mon, 7 Oct 2002 22:33:00 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 25B84413E3; Mon, 7 Oct 2002 + 17:33:25 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id DB7683F951 + for ; Mon, 7 Oct 2002 17:27:25 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g97LRPp00977 for exmh-users@listman.redhat.com; Mon, 7 Oct 2002 + 17:27:25 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g97LRPf00973 for + ; Mon, 7 Oct 2002 17:27:25 -0400 +Received: from dag.newtech.fi + (IDENT:qmailr@ip213-185-39-113.laajakaista.mtv3.fi [213.185.39.113]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g97L7rX07166 for + ; Mon, 7 Oct 2002 17:07:53 -0400 +Received: (qmail 4924 invoked by uid 200); 7 Oct 2002 21:27:22 -0000 +Message-Id: <20021007212722.4923.qmail@dag.newtech.fi> +X-Mailer: exmh version 2.5 07/13/2001 with nmh-0.27 +To: exmh-users@spamassassin.taint.org +Subject: Ringing bell on other computer +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +From: Dag Nygren +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by int-mx1.corp.spamassassin.taint.org + id g97LRPf00973 +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 08 Oct 2002 00:27:22 +0300 + + +Hi, + +succeeded in ringing a bell anytime I get a mail +to my inbox (Not Mailing lists, spams etc.) by +using procmail to execute a "play clink.wav" on +the "right" mails. +Now my demands are growing ;-) +I use my laptop remotely very often and now I would +like the bell to sound on that when I am there. +I triedto use the KDE remote sound server and it works in +the tests, but when procmail runs it it doesn't, presumably +as it doesn't have the authorization to communicate with +the laptop, beeing another user? + +Any hints. + +BRGDS + + +-- +Dag Nygren email: dag@newtech.fi +Oy Espoon NewTech Ab phone: +358 9 8024910 +Träsktorpet 3 fax: +358 9 8024916 +02360 ESBO Mobile: +358 400 426312 +FINLAND + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01157.4717355611939c9adc6f999948fcc975 b/Ch3/datasets/spam/easy_ham/01157.4717355611939c9adc6f999948fcc975 new file mode 100644 index 000000000..a5f5eac78 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01157.4717355611939c9adc6f999948fcc975 @@ -0,0 +1,94 @@ +From exmh-users-admin@redhat.com Tue Oct 8 10:55:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AA9DE16F16 + for ; Tue, 8 Oct 2002 10:55:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 10:55:10 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g986PMK03667 for + ; Tue, 8 Oct 2002 07:25:22 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 12CD63EAA4; Tue, 8 Oct 2002 + 02:26:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 92D8F3EA80 + for ; Tue, 8 Oct 2002 02:25:15 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g986PFf18694 for exmh-users@listman.redhat.com; Tue, 8 Oct 2002 + 02:25:15 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g986PFf18690 for + ; Tue, 8 Oct 2002 02:25:15 -0400 +Received: from dag.newtech.fi + (IDENT:qmailr@ip213-185-39-113.laajakaista.mtv3.fi [213.185.39.113]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g9865eX20167 for + ; Tue, 8 Oct 2002 02:05:40 -0400 +Received: (qmail 19262 invoked by uid 200); 8 Oct 2002 06:25:13 -0000 +Message-Id: <20021008062513.19261.qmail@dag.newtech.fi> +X-Mailer: exmh version 2.5 07/13/2001 with nmh-0.27 +To: exmh-users@spamassassin.taint.org +Cc: dag@newtech.fi +Subject: Re: Ringing bell on other computer +In-Reply-To: Message from Hal DeVore of + "Mon, 07 Oct 2002 18:03:03 CDT." + <6384.1034031783@dimebox.bmc.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Dag Nygren +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 08 Oct 2002 09:25:13 +0300 + +> +> +> >>>>> On Tue, 8 Oct 2002, "Dag" == Dag Nygren wrote: +> +> Dag> but when procmail runs it it doesn't, presumably as it +> Dag> doesn't have the authorization to communicate with the +> Dag> laptop, beeing another user? +> +> I don't know anything about the KDE sound server but I'd guess +> your problem is the "environment" in which procmail runs. You +> don't say what procmail is running from. In my case, for +> example, procmail is run from fetchmail which is run by a cron +> job. + +Sorry about that, +procmail is run by the qmail delivery agent to presort all mail +I get. +But anyway, I found an error message in procmail.log, which solved +the problem. +The following line in my delivery script seems to work fine now: + +DISPLAY=:0.0 artsplay + +Thanks + +Dag + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01158.43389f122c4f93b2570339801a2be1a0 b/Ch3/datasets/spam/easy_ham/01158.43389f122c4f93b2570339801a2be1a0 new file mode 100644 index 000000000..9246e0d8d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01158.43389f122c4f93b2570339801a2be1a0 @@ -0,0 +1,106 @@ +From exmh-users-admin@redhat.com Thu Aug 22 14:44:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 985B247C67 + for ; Thu, 22 Aug 2002 09:44:04 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 14:44:04 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MDgEZ08598 for + ; Thu, 22 Aug 2002 14:42:19 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id F26113EE9A; Thu, 22 Aug 2002 + 09:42:15 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 4ACEF3F4A2 + for ; Thu, 22 Aug 2002 09:38:03 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MDc0601591 for exmh-users@listman.redhat.com; Thu, 22 Aug 2002 + 09:38:00 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MDc0Y01587 for + ; Thu, 22 Aug 2002 09:38:00 -0400 +Received: from mta03bw.bigpond.com (mta03bw.bigpond.com [139.134.6.86]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7MDNVl14108 for + ; Thu, 22 Aug 2002 09:23:31 -0400 +Received: from hobbit.linuxworks.com.au ([144.135.24.81]) by + mta03bw.bigpond.com (Netscape Messaging Server 4.15 mta03bw May 23 2002 + 23:53:28) with SMTP id H18Z7300.F6G for ; + Thu, 22 Aug 2002 23:37:51 +1000 +Received: from CPE-203-51-220-31.qld.bigpond.net.au ([203.51.220.31]) by + bwmam05.mailsvc.email.bigpond.com(MailRouter V3.0n 44/32989362); + 22 Aug 2002 23:37:51 +Received: (from tony@localhost) by hobbit.linuxworks.com.au + (8.11.6/8.11.6) id g7MDaWX26868; Thu, 22 Aug 2002 23:36:32 +1000 +Message-Id: <200208221336.g7MDaWX26868@hobbit.linuxworks.com.au.nospam> +To: Exmh Users Mailing List +From: Tony Nugent +X-Face: ]IrGs{LrofDtGfsrG!As5=G'2HRr2zt:H>djXb5@v|Dr!jOelxzAZ`!}("]}] + Q!)1w#X;)nLlb'XhSu,QL>;)L/l06wsI?rv-xy6%Y1e"BUiV%)mU;]f-5<#U6 + UthZ0QrF7\_p#q}*Cn}jd|XT~7P7ik]Q!2u%aTtvc;)zfH\:3f<[a:)M +Organization: Linux Works for network +X-Mailer: nmh-1.0.4 exmh-2.4 +X-Os: Linux-2.4 RedHat 7.2 +In-Reply-To: message-id <200208212046.g7LKkqf15798@mail.banirh.com> of Wed, + Aug 21 15:46:52 2002 +Subject: Re: Insert signature +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 23:36:32 +1000 + +On Wed Aug 21 2002 at 15:46, Ulises Ponce wrote: + +> Hi! +> +> Is there a command to insert the signature using a combination of keys and not +> to have sent the mail to insert it then? + +I simply put it (them) into my (nmh) component files (components, +replcomps, forwcomps and so on). That way you get them when you are +editing your message. Also, by using comps files for specific +folders you can alter your .sig per folder (and other tricks). See +the docs for (n)mh for all the details. + +There might (must?) also be a way to get sedit to do it, but I've +been using gvim as my exmh message editor for a long time now. I +load it with a command that loads some email-specific settings, eg, +to "syntax" colour-highlight the headers and quoted parts of an +email)... it would be possible to map some (vim) keys that would add +a sig (or even give a selection of sigs to choose from). + +And there are all sorts of ways to have randomly-chosen sigs... +somewhere at rtfm.mit.edu... ok, here we go: +rtfm.mit.edu/pub/usenet-by-group/news.answers/signature_finger_faq. +(Warning... it's old, May 1995). + +> Regards, +> Ulises + +Hope this helps. + +Cheers +Tony + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + diff --git a/Ch3/datasets/spam/easy_ham/01159.722f7cc3779f8b3d075043e2174378e1 b/Ch3/datasets/spam/easy_ham/01159.722f7cc3779f8b3d075043e2174378e1 new file mode 100644 index 000000000..af2b752ea --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01159.722f7cc3779f8b3d075043e2174378e1 @@ -0,0 +1,126 @@ +From exmh-workers-admin@redhat.com Thu Aug 22 15:15:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1AD7B43F99 + for ; Thu, 22 Aug 2002 10:15:11 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 15:15:12 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MECrZ09674 for + ; Thu, 22 Aug 2002 15:12:54 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id C57DA3ECC9; Thu, 22 Aug 2002 + 10:13:02 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 6854840C75 + for ; Thu, 22 Aug 2002 10:12:27 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MECOK08343 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 10:12:24 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MECOY08339 for + ; Thu, 22 Aug 2002 10:12:24 -0400 +Received: from austin-jump.vircio.com + (IDENT:m7qlhYJ9XjzGHDfWy27ABasIREnlFU84@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7MDvul20394 + for ; Thu, 22 Aug 2002 09:57:56 -0400 +Received: (qmail 31227 invoked by uid 104); 22 Aug 2002 14:12:23 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4218. . Clean. Processed in 0.340551 + secs); 22/08/2002 09:12:23 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 22 Aug 2002 14:12:23 -0000 +Received: (qmail 25511 invoked from network); 22 Aug 2002 14:12:18 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?LVKop2xGBpLZYqQBUZF/+jebI90KasL/?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 22 Aug 2002 14:12:18 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: "J. W. Ballantine" +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <200208211351.JAA15807@hera.homer.att.com> +References: <200208211351.JAA15807@hera.homer.att.com> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_1547759024P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030025538.25487.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 09:12:16 -0500 + +--==_Exmh_1547759024P +Content-Type: text/plain; charset=us-ascii + +> From: "J. W. Ballantine" +> Date: Wed, 21 Aug 2002 09:51:31 -0400 +> +> I CVS'ed the unseen/Sequences changes and installed them, and have only one +> real issue. +> +> I use the unseen window rather than the exmh icon, and with the new code +> I can't seem to be able to. How many unseen when when I have the main window open +> is not really necessary. + +hmmm, I stole the code from unseenwin, but I never tested it since I don't use +that functionality. Consider it on my list of things to check. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_1547759024P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9ZPFAK9b4h5R0IUIRAkjyAJ4jjjhAVRx5FiwuCMa+QBWsbbE2jQCaAj4x +NhIgYqnx9/1wvdSgesQhMIU= +=vA3k +-----END PGP SIGNATURE----- + +--==_Exmh_1547759024P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/01160.98234b7fbbabe3d268a31b17141cf1a8 b/Ch3/datasets/spam/easy_ham/01160.98234b7fbbabe3d268a31b17141cf1a8 new file mode 100644 index 000000000..23d71d728 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01160.98234b7fbbabe3d268a31b17141cf1a8 @@ -0,0 +1,121 @@ +From exmh-workers-admin@redhat.com Fri Aug 23 11:06:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id ABEFA44165 + for ; Fri, 23 Aug 2002 06:04:55 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:04:55 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7N3xOZ09392 for + ; Fri, 23 Aug 2002 04:59:24 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 341473EBFF; Thu, 22 Aug 2002 + 23:59:28 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 492B03FEAF + for ; Thu, 22 Aug 2002 23:27:20 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7N3RHl05019 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 23:27:17 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7N3RHY05015 for + ; Thu, 22 Aug 2002 23:27:17 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g7N3CQl13951 for ; + Thu, 22 Aug 2002 23:12:27 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7N3QUl20135; + Fri, 23 Aug 2002 10:26:30 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g7MEtIW14737; Thu, 22 Aug 2002 21:55:18 + +0700 (ICT) +From: Robert Elz +To: Chris Garrigues +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: New Sequences Window +In-Reply-To: <1029944441.398.TMDA@deepeddy.vircio.com> +References: <1029944441.398.TMDA@deepeddy.vircio.com> + <1029882468.3116.TMDA@deepeddy.vircio.com> <9627.1029933001@munnari.OZ.AU> + <1029943066.26919.TMDA@deepeddy.vircio.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <14735.1030028118@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 21:55:18 +0700 + + Date: Wed, 21 Aug 2002 10:40:39 -0500 + From: Chris Garrigues + Message-ID: <1029944441.398.TMDA@deepeddy.vircio.com> + + | The background color in this window is the same as the background + | color in the ftoc. + +That's what I'd like to vary - particularly as the ftoc background isn't +constant - messages in the unseen sequence have a different background +than others. + +In the ftoc that's fine, but in the sequences window, it isn't needed. +unseen already has a different foreground there (no problem with that), +it doesn't need a different background as well. + +I'll play about a bit with this, and with making it vertical instead of +horizontal, and see what turns up. + + | The only sequences that are defined there are sequences which are defined + | in app-defaults-color or ~/exmh/exmh-defaults-color. + +OK. + + | I've been thinking about how to dynamically generate highlighting for + | other sequences, but haven't got that figured out yet. + +In this case, highlighting wasn't what I was most concerned about. +A method to get messages in & out of sequences comes first, how it +displays is a secondary consideration. But as a suggestion, have an +"all unknown" sequence highlight, any message in a sequence which has +no defined highlighting (where defined includes defined to not be treated +specially) gets highlighted the same way (maybe something as boring as +a dark brown text colour - almost indistinguishable from the normal black) + + + | > > Any chance of making the current message a little brighter background? + | + | I don't see any reason why not. Experiment and let me know what works for you. + +Done some of that. First, the most significant change came from changing +relief from raised to sunken. I don't know why, but it just looks better +(for me anyway). But even with that, cur and unseen are still just a +bit too similar. I ended up using + +*sequence_cur: -background {PaleGoldenrod} -relief sunken -borderwidth 2 + +The unnecessary braces are just because some of the colours I was using +had spaces in their names. PaleGoldenrod translates as #eee8aa which +is probably safer for generic use. + +kre + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/01161.25f5db0a9305744347c51f64ac62efaf b/Ch3/datasets/spam/easy_ham/01161.25f5db0a9305744347c51f64ac62efaf new file mode 100644 index 000000000..b4e1381d0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01161.25f5db0a9305744347c51f64ac62efaf @@ -0,0 +1,160 @@ +From exmh-workers-admin@redhat.com Thu Aug 22 18:17:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3936F43F9B + for ; Thu, 22 Aug 2002 13:17:16 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 18:17:16 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MHCFZ16258 for + ; Thu, 22 Aug 2002 18:12:15 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 98CA240F20; Thu, 22 Aug 2002 + 13:08:54 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 163BD3F5C4 + for ; Thu, 22 Aug 2002 12:55:20 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MGtHh14426 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 12:55:17 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MGtGY14422 for + ; Thu, 22 Aug 2002 12:55:16 -0400 +Received: from milou.dyndns.org (h189n1fls22o974.telia.com + [213.64.79.189]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g7MGekl27238 for ; Thu, 22 Aug 2002 12:40:46 + -0400 +Received: by milou.dyndns.org (Postfix, from userid 500) id 1F95B3F24; + Thu, 22 Aug 2002 18:55:08 +0200 (CEST) +Received: from tippex.localdomain (localhost [127.0.0.1]) by + milou.dyndns.org (Postfix) with ESMTP id F3AA03F23; Thu, 22 Aug 2002 + 18:55:08 +0200 (CEST) +X-Mailer: exmh version 2.5_20020822 01/15/2001 with nmh-1.0.4 +To: Chris Garrigues +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: CVS report +In-Reply-To: Message from Chris Garrigues + of + "Thu, 22 Aug 2002 09:59:35 CDT." + <1030028377.4901.TMDA@deepeddy.vircio.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Anders Eriksson +Message-Id: <20020822165508.1F95B3F24@milou.dyndns.org> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 18:55:03 +0200 + + + + +> > > > Just cvs up'ed and nowadays Catch-up Unseen is __extremely__ slow on +> > > > large (>100 msgs) unseen sequences. Anybody else having this problem? +> > > +> > > I'll take the blame. +> > > +> > > The reason, I suspect, is that we're needlessly reading the .sequences file +> > > multiple times because of other sequences. I need to make the code much +> > > smarter about handling that file, but first I have a few other fish to fry in +> > > my rather large patch that's on it's way. +> > > +> > +> > No panic, +> > +> > I'm all for cleaning things up before getting it optimized. +> +> Okay, this fix is now checked in. +> +I'm afraid it didn't help. It still seems to be slower than ~1 month +ago. Maybe slightly faster than yeasterday. I'm (still) seeing an +"unseen countdown" in the log. + +18:51:25 Writing /home/ander/Mail/lists/l-k/.mh_sequences +18:51:25 lists/l-k has 57 msgs in unseen +18:51:25 lists/l-k has 56 msgs in unseen +18:51:25 lists/l-k has 55 msgs in unseen +18:51:26 lists/l-k has 54 msgs in unseen +18:51:26 lists/l-k has 53 msgs in unseen +18:51:26 lists/l-k has 52 msgs in unseen +18:51:26 lists/l-k has 51 msgs in unseen +18:51:26 lists/l-k has 50 msgs in unseen +18:51:26 lists/l-k has 49 msgs in unseen +18:51:26 lists/l-k has 48 msgs in unseen +18:51:26 lists/l-k has 47 msgs in unseen +18:51:26 lists/l-k has 46 msgs in unseen +18:51:26 lists/l-k has 45 msgs in unseen +18:51:27 lists/l-k has 44 msgs in unseen +18:51:27 lists/l-k has 43 msgs in unseen +18:51:27 lists/l-k has 42 msgs in unseen +18:51:27 lists/l-k has 41 msgs in unseen +18:51:27 lists/l-k has 40 msgs in unseen +18:51:27 lists/l-k has 39 msgs in unseen +18:51:27 lists/l-k has 38 msgs in unseen +18:51:27 lists/l-k has 37 msgs in unseen +18:51:27 lists/l-k has 36 msgs in unseen +18:51:28 lists/l-k has 35 msgs in unseen +18:51:28 lists/l-k has 34 msgs in unseen +18:51:28 lists/l-k has 33 msgs in unseen +18:51:28 lists/l-k has 32 msgs in unseen +18:51:28 lists/l-k has 31 msgs in unseen +18:51:28 lists/l-k has 30 msgs in unseen +18:51:28 lists/l-k has 29 msgs in unseen +18:51:28 lists/l-k has 28 msgs in unseen +18:51:28 lists/l-k has 27 msgs in unseen +18:51:28 lists/l-k has 26 msgs in unseen +18:51:29 lists/l-k has 25 msgs in unseen +18:51:29 lists/l-k has 24 msgs in unseen +18:51:29 lists/l-k has 23 msgs in unseen +18:51:29 lists/l-k has 22 msgs in unseen +18:51:29 lists/l-k has 21 msgs in unseen +18:51:29 lists/l-k has 20 msgs in unseen +18:51:29 lists/l-k has 19 msgs in unseen +18:51:29 lists/l-k has 18 msgs in unseen +18:51:29 lists/l-k has 17 msgs in unseen +18:51:29 lists/l-k has 16 msgs in unseen +18:51:30 lists/l-k has 15 msgs in unseen +18:51:30 lists/l-k has 14 msgs in unseen +18:51:30 lists/l-k has 13 msgs in unseen +18:51:30 lists/l-k has 12 msgs in unseen +18:51:30 lists/l-k has 11 msgs in unseen +18:51:30 lists/l-k has 10 msgs in unseen +18:51:30 lists/l-k has 9 msgs in unseen +18:51:30 digits changed +18:51:30 lists/l-k has 8 msgs in unseen +18:51:30 lists/l-k has 7 msgs in unseen +18:51:31 lists/l-k has 6 msgs in unseen +18:51:31 lists/l-k has 5 msgs in unseen +18:51:31 lists/l-k has 4 msgs in unseen +18:51:31 lists/l-k has 3 msgs in unseen +18:51:31 lists/l-k has 2 msgs in unseen +18:51:31 lists/l-k has 1 msgs in unseen +18:51:31 lists/l-k has 0 msgs in unseen +18:51:31 FlistUnseenFolder lists/l-k +18:51:31 ok +18:51:47 Folder_Change lists/exmh {Msg_Show cur} + + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/01162.526ce617b7abacafecf4fc1729c49516 b/Ch3/datasets/spam/easy_ham/01162.526ce617b7abacafecf4fc1729c49516 new file mode 100644 index 000000000..37b7d2d91 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01162.526ce617b7abacafecf4fc1729c49516 @@ -0,0 +1,148 @@ +From exmh-workers-admin@redhat.com Thu Aug 22 18:29:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8298743F99 + for ; Thu, 22 Aug 2002 13:29:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 18:29:37 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MHUEZ17557 for + ; Thu, 22 Aug 2002 18:30:15 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id AFD5D410A6; Thu, 22 Aug 2002 + 13:26:17 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 4169841049 + for ; Thu, 22 Aug 2002 13:23:47 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MHNi820140 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 13:23:44 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MHNiY20136 for + ; Thu, 22 Aug 2002 13:23:44 -0400 +Received: from austin-jump.vircio.com + (IDENT:ej9JWTtTU9YAy/XEt1t3VaLooI8VpxCp@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7MH9El32554 + for ; Thu, 22 Aug 2002 13:09:14 -0400 +Received: (qmail 11353 invoked by uid 104); 22 Aug 2002 17:23:43 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4218. . Clean. Processed in 0.329069 + secs); 22/08/2002 12:23:43 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 22 Aug 2002 17:23:42 -0000 +Received: (qmail 7953 invoked from network); 22 Aug 2002 17:23:40 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?OWIvth7P1uuNLmEWhfKb2tBl1I4NTfB9?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 22 Aug 2002 17:23:40 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Anders Eriksson +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: CVS report +In-Reply-To: <20020822165508.1F95B3F24@milou.dyndns.org> +References: <20020822165508.1F95B3F24@milou.dyndns.org> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_-518574644P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030037019.7938.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 12:23:38 -0500 + +--==_Exmh_-518574644P +Content-Type: text/plain; charset=us-ascii + +> From: Anders Eriksson +> Date: Thu, 22 Aug 2002 18:55:03 +0200 +> +> +> +> +> > > > > Just cvs up'ed and nowadays Catch-up Unseen is __extremely__ slow o +> n +> > > > > large (>100 msgs) unseen sequences. Anybody else having this proble +> m? +> > > > +> > > > I'll take the blame. +> > > > +> > > > The reason, I suspect, is that we're needlessly reading the .sequence +> s file +> > > > multiple times because of other sequences. I need to make the code m +> uch +> > > > smarter about handling that file, but first I have a few other fish t +> o fry in +> > > > my rather large patch that's on it's way. +> > > > +> > > +> > > No panic, +> > > +> > > I'm all for cleaning things up before getting it optimized. +> > +> > Okay, this fix is now checked in. +> > +> I'm afraid it didn't help. It still seems to be slower than ~1 month +> ago. Maybe slightly faster than yeasterday. I'm (still) seeing an +> "unseen countdown" in the log. + +Okay....Catchup unseen is something that I don't use often, but i can +certainly reproduce this. I'll dig into it. It's probably simple. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_-518574644P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9ZR4aK9b4h5R0IUIRAub4AKCE9sxZQfiRl18xhrtT2WLrEqEucACeJGm0 +YdhaA8YocKvlkyW4sTIZ3lU= +=XhOQ +-----END PGP SIGNATURE----- + +--==_Exmh_-518574644P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/01163.8acc09ecc06772e532281df46843427e b/Ch3/datasets/spam/easy_ham/01163.8acc09ecc06772e532281df46843427e new file mode 100644 index 000000000..79ffa71a1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01163.8acc09ecc06772e532281df46843427e @@ -0,0 +1,113 @@ +From exmh-workers-admin@redhat.com Fri Aug 23 11:04:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7F45444159 + for ; Fri, 23 Aug 2002 06:03:34 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:03:34 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MIZPZ19882 for + ; Thu, 22 Aug 2002 19:35:25 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 571363F43A; Thu, 22 Aug 2002 + 14:35:10 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id A6F683FD36 + for ; Thu, 22 Aug 2002 14:23:32 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MINTq05527 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 14:23:29 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MINTY05519 for + ; Thu, 22 Aug 2002 14:23:29 -0400 +Received: from milou.dyndns.org (h189n1fls22o974.telia.com + [213.64.79.189]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g7MI8xl17687 for ; Thu, 22 Aug 2002 14:08:59 + -0400 +Received: by milou.dyndns.org (Postfix, from userid 500) id 64D053F25; + Thu, 22 Aug 2002 20:23:22 +0200 (CEST) +Received: from tippex.localdomain (localhost [127.0.0.1]) by + milou.dyndns.org (Postfix) with ESMTP id 634573F23; Thu, 22 Aug 2002 + 20:23:22 +0200 (CEST) +To: Chris Garrigues , + exmh-workers@redhat.com +Subject: Re: CVS report +From: Anders Eriksson +In-Reply-To: Your message of + "Thu, 22 Aug 2002 12:49:41 CDT." + <1030038582.14329.TMDA@deepeddy.vircio.com> +Message-Id: <20020822182322.64D053F25@milou.dyndns.org> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 20:23:17 +0200 + + +Oooops! + +Doesn't work at all. Got this on startup and on any attempt to change folder (which fail) + +/Anders + +can't read "flist(seqcount,lists/exmh,unseen)": no such element in array + (reading value of variable to increment) + invoked from within +"incr flist(seqcount,$folder,$seq) $delta" + (procedure "Seq_Del" line 16) + invoked from within +"Seq_Del $exmh(folder) $mhProfile(unseen-sequence) $msgid" + (procedure "MsgSeen" line 7) + invoked from within +"MsgSeen $msgid" + (procedure "MsgShow" line 12) + invoked from within +"MsgShow $msgid" + (procedure "MsgChange" line 17) + invoked from within +"MsgChange 73 show" + invoked from within +"time [list MsgChange $msgid $show" + (procedure "Msg_Change" line 3) + invoked from within +"Msg_Change $msg(id) $show" + (procedure "Msg_Show" line 7) + invoked from within +"Msg_Show cur" + ("eval" body line 1) + invoked from within +"eval $msgShowProc" + (procedure "FolderChange" line 55) + invoked from within +"FolderChange lists/exmh {Msg_Show cur}" + invoked from within +"time [list FolderChange $folder $msgShowProc" + (procedure "Folder_Change" line 3) + invoked from within +"Folder_Change $exmh(folder)" + (procedure "Exmh" line 101) + invoked from within +"Exmh" + ("after" script) + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/01164.2736b1ea833f290333e168efb0c356f4 b/Ch3/datasets/spam/easy_ham/01164.2736b1ea833f290333e168efb0c356f4 new file mode 100644 index 000000000..d158e563a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01164.2736b1ea833f290333e168efb0c356f4 @@ -0,0 +1,104 @@ +From exmh-users-admin@redhat.com Fri Aug 23 11:04:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 284A84415A + for ; Fri, 23 Aug 2002 06:03:36 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:03:36 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MIpgZ20384 for + ; Thu, 22 Aug 2002 19:51:46 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 1515D3ED34; Thu, 22 Aug 2002 + 14:51:45 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id DE5573FA56 + for ; Thu, 22 Aug 2002 14:43:11 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MIh9W11686 for exmh-users@listman.redhat.com; Thu, 22 Aug 2002 + 14:43:09 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MIh8Y11682 for + ; Thu, 22 Aug 2002 14:43:08 -0400 +Received: from tater ([128.221.30.58]) by mx1.spamassassin.taint.org (8.11.6/8.11.6) + with SMTP id g7MIScl23509 for ; Thu, 22 Aug 2002 + 14:28:39 -0400 +Received: from tater.emc.com (tater.lanminds.com [127.0.0.1]) by tater + (Postfix) with ESMTP id 2E5BCF5B3 for ; + Thu, 22 Aug 2002 14:43:03 -0400 (EDT) +X-Mailer: exmh version 2.5 07/13/2001 (debian 2.5-1) with nmh-1.0.4+dev +To: exmh-users@spamassassin.taint.org +Subject: Re: Insert signature +In-Reply-To: Message from Ulises Ponce of + "Thu, 22 Aug 2002 13:03:57 CDT." + <200208221803.g7MI3vV17471@mail.banirh.com> +References: <200208221803.g7MI3vV17471@mail.banirh.com> +From: Paul Lussier +Message-Id: <20020822184303.2E5BCF5B3@tater> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 14:43:03 -0400 + +In a message dated: Thu, 22 Aug 2002 13:03:57 CDT +Ulises Ponce said: + +>Thanks Tony, but I think doing it using component files will get a .signature +>by default, but I have many diferent signatures and I want to insert one of +>that signatures using a keyboard command. So for a message I will insert a +>signature, but for another message I will insert a different signature. +> +>Is it possible? I am using sedit for my messages. + +Ahm, if you don't object to using a mouse for such things, exmh has +the ability to insert different sigs on demand. Create a bunch of +different sig files, all beginning with .signature, and at start up, +exmh will load them all. In the Sedit window, you'll see a Sign... +menu item which will allow you to select between each of the listed +.signature files for *that* e-mail. You can actually use several if +you'd like (though I don't remember what Preferences... option allows +for this). + +However, the signature gets added on send, not inserted directly into +the existing Sedit window prior to composition. + +I currently have 6 different sig files I can choose between. + +Additionally, if a .signature file has the execute bit turned on, +exmh will attempt to execute the file and use the stdout of the +script as your signature. + +I hope this helps some. +-- + +Seeya, +Paul +-- + It may look like I'm just sitting here doing nothing, + but I'm really actively waiting for all my problems to go away. + + If you're not having fun, you're not doing it right! + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + diff --git a/Ch3/datasets/spam/easy_ham/01165.5c0ba98485fd4a2e53286b852d62c1b6 b/Ch3/datasets/spam/easy_ham/01165.5c0ba98485fd4a2e53286b852d62c1b6 new file mode 100644 index 000000000..629812347 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01165.5c0ba98485fd4a2e53286b852d62c1b6 @@ -0,0 +1,126 @@ +From exmh-users-admin@redhat.com Fri Aug 23 11:04:17 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 61F8D4415C + for ; Fri, 23 Aug 2002 06:03:39 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:03:39 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MIvjZ20597 for + ; Thu, 22 Aug 2002 19:57:45 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 6320F3F680; Thu, 22 Aug 2002 + 14:57:02 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 1D0903ECFA + for ; Thu, 22 Aug 2002 14:54:12 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MIs9h15215 for exmh-users@listman.redhat.com; Thu, 22 Aug 2002 + 14:54:09 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MIs6Y15205 for + ; Thu, 22 Aug 2002 14:54:08 -0400 +Received: from mail.banirh.com + (adsl-javier-quezada-55499267.prodigy.net.mx [200.67.254.229]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7MIdZl26775 for + ; Thu, 22 Aug 2002 14:39:36 -0400 +Received: from mail.banirh.com (IDENT:ulises@localhost [127.0.0.1]) by + mail.banirh.com (8.10.2/8.9.3) with ESMTP id g7MIrtV21872 for + ; Thu, 22 Aug 2002 13:53:55 -0500 +Message-Id: <200208221853.g7MIrtV21872@mail.banirh.com> +X-Mailer: exmh version 2.3.1 01/15/2001 with nmh-1.0.3 +To: exmh-users@spamassassin.taint.org +Subject: Re: Insert signature +In-Reply-To: Your message of + "Thu, 22 Aug 2002 14:43:03 EDT." + <20020822184303.2E5BCF5B3@tater> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Ulises Ponce +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 13:53:55 -0500 + +Thanks Paul, +That is the way I am doing right now, but I would like to NOT use the mouse +for such things. Any other clue? + +-- + +Saludos, +Ulises + + Speaking words of wisdom ... + + +> In a message dated: Thu, 22 Aug 2002 13:03:57 CDT +> Ulises Ponce said: +> +> >Thanks Tony, but I think doing it using component files will get a .signature +> >by default, but I have many diferent signatures and I want to insert one of +> >that signatures using a keyboard command. So for a message I will insert a +> >signature, but for another message I will insert a different signature. +> > +> >Is it possible? I am using sedit for my messages. +> +> Ahm, if you don't object to using a mouse for such things, exmh has +> the ability to insert different sigs on demand. Create a bunch of +> different sig files, all beginning with .signature, and at start up, +> exmh will load them all. In the Sedit window, you'll see a Sign... +> menu item which will allow you to select between each of the listed +> .signature files for *that* e-mail. You can actually use several if +> you'd like (though I don't remember what Preferences... option allows +> for this). +> +> However, the signature gets added on send, not inserted directly into +> the existing Sedit window prior to composition. +> +> I currently have 6 different sig files I can choose between. +> +> Additionally, if a .signature file has the execute bit turned on, +> exmh will attempt to execute the file and use the stdout of the +> script as your signature. +> +> I hope this helps some. +> -- +> +> Seeya, +> Paul +> -- +> It may look like I'm just sitting here doing nothing, +> but I'm really actively waiting for all my problems to go away. +> +> If you're not having fun, you're not doing it right! +> +> +> +> +> _______________________________________________ +> Exmh-users mailing list +> Exmh-users@redhat.com +> https://listman.redhat.com/mailman/listinfo/exmh-users + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + diff --git a/Ch3/datasets/spam/easy_ham/01166.8ab8acc80452beed11a4b841a05d4456 b/Ch3/datasets/spam/easy_ham/01166.8ab8acc80452beed11a4b841a05d4456 new file mode 100644 index 000000000..ca0464ba9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01166.8ab8acc80452beed11a4b841a05d4456 @@ -0,0 +1,114 @@ +From exmh-workers-admin@redhat.com Fri Aug 23 11:07:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0B32F43F9B + for ; Fri, 23 Aug 2002 06:05:02 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:05:02 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7N41MZ09475 for + ; Fri, 23 Aug 2002 05:01:22 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 490A93ED5C; Fri, 23 Aug 2002 + 00:01:27 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 3A4823FEBE + for ; Thu, 22 Aug 2002 23:27:26 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7N3RN705039 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 23:27:23 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7N3RNY05035 for + ; Thu, 22 Aug 2002 23:27:23 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g7N3Cel13970 for ; + Thu, 22 Aug 2002 23:12:41 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7N3QPl20072 for + ; Fri, 23 Aug 2002 10:26:29 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g7MJ5JW16325 for ; + Fri, 23 Aug 2002 02:05:19 +0700 (ICT) +From: Robert Elz +To: exmh-workers@spamassassin.taint.org +Subject: Anolther sequence related traceback +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <16323.1030043119@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 02:05:19 +0700 + +Just got this ... I was just reading mail, but in a very dark +room, where the keyboard is illuminated mostly by the light from +the (laptop) screen. I think I put my fingers on the wrong keys. +(I mostly use the keyboard exclusively while running exmh). + +This is from today's cvs (the fixes for the problems I mentioned +yesterday are included) - I eventually managed to contact the cvs +server. + +expected integer but got "" + while executing +"incr m" + (procedure "MhSeqExpand" line 12) + invoked from within +"MhSeqExpand $folder $msgids" + (procedure "MhSeq" line 2) + invoked from within +"MhSeq $folder $seq $how $oldmsgids $msgids" + (procedure "Mh_SequenceUpdate" line 54) + invoked from within +"Mh_SequenceUpdate $folder replace $seq $msgids" + (procedure "Seq_Set" line 4) + invoked from within +"Seq_Set $folder cur $msgid" + (procedure "Mh_SetCur" line 7) + invoked from within +"Mh_SetCur $exmh(folder) $msgid" + (procedure "MsgChange" line 5) + invoked from within +"MsgChange - noshow" + invoked from within +"time [list MsgChange $msgid $show" + (procedure "Msg_Change" line 3) + invoked from within +"Msg_Change $select(sel) noshow" + (procedure "SelectTypein" line 14) + invoked from within +"SelectTypein .mid.right.top.msg -" + (command bound to event) + +kre + +ps: I have the sequences window vertical instead of horizontal, and the +"colours from the ftoc" stuff all deleted, and it is looking just about as +good as the old unseen window used to look. I still have some work to +do to make it a little nicer (listboxes seem to have some strange habits) +and then I need to make it all optional and parameterized, at the minute +I'm just embedding stuff in the code, much quicker for prototyping. Once +its done, I'll send a patch for someone to look over. + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/01167.6c1a9d12bb40059b2b3aba3d1c5c0f3c b/Ch3/datasets/spam/easy_ham/01167.6c1a9d12bb40059b2b3aba3d1c5c0f3c new file mode 100644 index 000000000..4afaee282 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01167.6c1a9d12bb40059b2b3aba3d1c5c0f3c @@ -0,0 +1,87 @@ +From exmh-users-admin@redhat.com Fri Aug 23 11:04:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8E7C844163 + for ; Fri, 23 Aug 2002 06:03:46 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:03:46 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MJN3Z21405 for + ; Thu, 22 Aug 2002 20:23:04 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 7F8C63FBD0; Thu, 22 Aug 2002 + 15:23:03 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 3ED163FCB3 + for ; Thu, 22 Aug 2002 15:13:19 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MJDGM20736 for exmh-users@listman.redhat.com; Thu, 22 Aug 2002 + 15:13:16 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MJDGY20732 for + ; Thu, 22 Aug 2002 15:13:16 -0400 +Received: from tater ([128.221.30.58]) by mx1.spamassassin.taint.org (8.11.6/8.11.6) + with SMTP id g7MIwkl31939 for ; Thu, 22 Aug 2002 + 14:58:46 -0400 +Received: from tater.emc.com (tater.lanminds.com [127.0.0.1]) by tater + (Postfix) with ESMTP id 800DFF5B3 for ; + Thu, 22 Aug 2002 15:13:10 -0400 (EDT) +X-Mailer: exmh version 2.5 07/13/2001 (debian 2.5-1) with nmh-1.0.4+dev +To: exmh-users@spamassassin.taint.org +Subject: Re: Insert signature +In-Reply-To: Message from Ulises Ponce of + "Thu, 22 Aug 2002 13:53:55 CDT." + <200208221853.g7MIrtV21872@mail.banirh.com> +References: <200208221853.g7MIrtV21872@mail.banirh.com> +From: Paul Lussier +Message-Id: <20020822191310.800DFF5B3@tater> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 15:13:10 -0400 + +In a message dated: Thu, 22 Aug 2002 13:53:55 CDT +Ulises Ponce said: + +>Thanks Paul, +>That is the way I am doing right now, but I would like to NOT use the mouse +>for such things. Any other clue? + +The best I can think of is to figure out what the command being +issued by exmh is that selects and inserts the sig and bind that to a +key sequence. That shouldn't be *too* difficult, it's just a matter +of figuring out the tcl (something my perl-based brain isn't excited +about :) +-- + +Seeya, +Paul +-- + It may look like I'm just sitting here doing nothing, + but I'm really actively waiting for all my problems to go away. + + If you're not having fun, you're not doing it right! + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + diff --git a/Ch3/datasets/spam/easy_ham/01168.83677f30f1d1c95b863e4e464396e7d7 b/Ch3/datasets/spam/easy_ham/01168.83677f30f1d1c95b863e4e464396e7d7 new file mode 100644 index 000000000..7e36865ba --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01168.83677f30f1d1c95b863e4e464396e7d7 @@ -0,0 +1,128 @@ +From exmh-workers-admin@redhat.com Fri Aug 23 11:04:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2E45844162 + for ; Fri, 23 Aug 2002 06:03:56 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:03:56 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MKYqZ23456 for + ; Thu, 22 Aug 2002 21:34:52 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id CAAE640F2B; Thu, 22 Aug 2002 + 16:31:34 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id DB93E40EF8 + for ; Thu, 22 Aug 2002 16:28:14 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MKSBK05009 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 16:28:11 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MKSBY05005 for + ; Thu, 22 Aug 2002 16:28:11 -0400 +Received: from austin-jump.vircio.com + (IDENT:82tsCXFmK++GyOiDHJbs18xfEBERjSkG@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7MKDfl14249 + for ; Thu, 22 Aug 2002 16:13:41 -0400 +Received: (qmail 24109 invoked by uid 104); 22 Aug 2002 20:28:10 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4218. . Clean. Processed in 0.366145 + secs); 22/08/2002 15:28:10 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 22 Aug 2002 20:28:10 -0000 +Received: (qmail 20300 invoked from network); 22 Aug 2002 20:28:07 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?KCbAAdDTk0hKfb6XCFGWgd9YDZ2s+oNu?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 22 Aug 2002 20:28:07 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Anders Eriksson +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: CVS report +In-Reply-To: <20020822182322.64D053F25@milou.dyndns.org> +References: <20020822182322.64D053F25@milou.dyndns.org> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_267413022P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030048087.20291.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 15:28:05 -0500 + +--==_Exmh_267413022P +Content-Type: text/plain; charset=us-ascii + +> From: Anders Eriksson +> Date: Thu, 22 Aug 2002 20:23:17 +0200 +> +> +> Oooops! +> +> Doesn't work at all. Got this on startup and on any attempt to change folde +> r (which fail) + +~sigh~ I'd already found that and checked it in....apparently I did so after +you checked it out and before you sent this mail...I hoped I was fast enough +that you wouldn't see it. + +Try again! + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_267413022P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9ZUlVK9b4h5R0IUIRAr4LAJ9Mhzgw03dF2qiyqtMks72364uaqwCeJxp1 +23jNAVlrHHIDRMvMPXnfzoE= +=HErg +-----END PGP SIGNATURE----- + +--==_Exmh_267413022P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/01169.ef0eb0827674dd4d69006ed7cb2f6c8c b/Ch3/datasets/spam/easy_ham/01169.ef0eb0827674dd4d69006ed7cb2f6c8c new file mode 100644 index 000000000..4eea03c99 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01169.ef0eb0827674dd4d69006ed7cb2f6c8c @@ -0,0 +1,100 @@ +From exmh-workers-admin@redhat.com Fri Aug 23 11:06:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A1E4C4416C + for ; Fri, 23 Aug 2002 06:04:17 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:04:17 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MLYdZ25762 for + ; Thu, 22 Aug 2002 22:34:39 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 10427411C1; Thu, 22 Aug 2002 + 17:29:31 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 96EAC4119D + for ; Thu, 22 Aug 2002 17:14:35 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MLEW815033 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 17:14:32 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MLEWY15028 for + ; Thu, 22 Aug 2002 17:14:32 -0400 +Received: from milou.dyndns.org (h189n1fls22o974.telia.com + [213.64.79.189]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g7ML01l23716 for ; Thu, 22 Aug 2002 17:00:01 + -0400 +Received: by milou.dyndns.org (Postfix, from userid 500) id 849EB3F27; + Thu, 22 Aug 2002 23:14:25 +0200 (CEST) +Received: from tippex.localdomain (localhost [127.0.0.1]) by + milou.dyndns.org (Postfix) with ESMTP id 46B3D3F26; Thu, 22 Aug 2002 + 23:14:25 +0200 (CEST) +X-Mailer: exmh version 2.5_20020822 01/15/2001 with nmh-1.0.4 +To: Chris Garrigues +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: CVS report +In-Reply-To: Message from Chris Garrigues + of + "Thu, 22 Aug 2002 15:28:05 CDT." + <1030048087.20291.TMDA@deepeddy.vircio.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Anders Eriksson +Message-Id: <20020822211425.849EB3F27@milou.dyndns.org> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 23:14:20 +0200 + + +>>>>> On Thu, 22 Aug 2002, "Chris" == Chris Garrigues wrote: + + Chris> --==_Exmh_267413022P Content-Type: text/plain; + Chris> charset=us-ascii + + +> From: Anders Eriksson Date: Thu, 22 Aug + +> 2002 20:23:17 +0200 + + +> Oooops! + + +> Doesn't work at all. Got this on startup and on any attempt to + +> change folde r (which fail) + + Chris> ~sigh~ I'd already found that and checked it in....apparently + Chris> I did so after you checked it out and before you sent this + Chris> mail...I hoped I was fast enough that you wouldn't see it. + + Chris> Try again! + + +Works like a charm. It's like the box was on drugs or something. + +However, while testing it a selected my favourite folder (l-k) and +marked ~400 messages unread. THAT took forever, or about as long as +Catch-up Unseen did before. Any suggestions? + +/A + + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/01170.ff1eb252e91b1481ee0a2887eb862c16 b/Ch3/datasets/spam/easy_ham/01170.ff1eb252e91b1481ee0a2887eb862c16 new file mode 100644 index 000000000..c450effe2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01170.ff1eb252e91b1481ee0a2887eb862c16 @@ -0,0 +1,146 @@ +From exmh-workers-admin@redhat.com Fri Aug 23 11:06:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D496144159 + for ; Fri, 23 Aug 2002 06:04:19 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:04:19 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MLxBZ26598 for + ; Thu, 22 Aug 2002 22:59:11 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id BF8834124B; Thu, 22 Aug 2002 + 17:55:27 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 3B2293FDE8 + for ; Thu, 22 Aug 2002 17:54:20 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7MLsHq22079 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002 + 17:54:17 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MLsHY22075 for + ; Thu, 22 Aug 2002 17:54:17 -0400 +Received: from austin-jump.vircio.com + (IDENT:HxqxW0qPlEYsJtPvTHY/QDVQoen0XAyb@jump-austin.vircio.com + [192.12.3.99]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g7MLdkl30037 + for ; Thu, 22 Aug 2002 17:39:46 -0400 +Received: (qmail 30389 invoked by uid 104); 22 Aug 2002 21:54:16 -0000 +Received: from cwg-exmh@DeepEddy.Com by localhost.localdomain with + qmail-scanner-0.90 (uvscan: v4.1.60/v4218. . Clean. Processed in 0.45655 + secs); 22/08/2002 16:54:15 +Received: from deepeddy.vircio.com (@[10.1.2.1]) (envelope-sender + ) by austin-jump.vircio.com (qmail-ldap-1.03) with + SMTP for ; 22 Aug 2002 21:54:15 -0000 +Received: (qmail 9069 invoked from network); 22 Aug 2002 21:54:12 -0000 +Received: from localhost (HELO deepeddy.vircio.com) + (?qa8Nj+W90BKiXmUEK2N6dnYAHT1le0P7?@[127.0.0.1]) (envelope-sender + ) by localhost (qmail-ldap-1.03) with SMTP for + ; 22 Aug 2002 21:54:12 -0000 +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: Anders Eriksson +Cc: exmh-workers@spamassassin.taint.org +Subject: Re: CVS report +In-Reply-To: <20020822211425.849EB3F27@milou.dyndns.org> +References: <20020822211425.849EB3F27@milou.dyndns.org> +X-Url: http://www.DeepEddy.Com/~cwg +X-Image-Url: http://www.DeepEddy.Com/~cwg/chris.gif +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_592622610P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +Message-Id: <1030053252.9051.TMDA@deepeddy.vircio.com> +From: Chris Garrigues +X-Delivery-Agent: TMDA/0.57 +Reply-To: Chris Garrigues +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Thu, 22 Aug 2002 16:54:11 -0500 + +--==_Exmh_592622610P +Content-Type: text/plain; charset=us-ascii + +> From: Anders Eriksson +> Date: Thu, 22 Aug 2002 23:14:20 +0200 +> +> +> >>>>> On Thu, 22 Aug 2002, "Chris" == Chris Garrigues wrote: +> +> Chris> --==_Exmh_267413022P Content-Type: text/plain; +> Chris> charset=us-ascii +> +> +> From: Anders Eriksson Date: Thu, 22 Aug +> +> 2002 20:23:17 +0200 +> +> +> Oooops! +> +> +> Doesn't work at all. Got this on startup and on any attempt to +> +> change folde r (which fail) +> +> Chris> ~sigh~ I'd already found that and checked it in....apparently +> Chris> I did so after you checked it out and before you sent this +> Chris> mail...I hoped I was fast enough that you wouldn't see it. +> +> Chris> Try again! +> +> +> Works like a charm. It's like the box was on drugs or something. +> +> However, while testing it a selected my favourite folder (l-k) and +> marked ~400 messages unread. THAT took forever, or about as long as +> Catch-up Unseen did before. Any suggestions? + +That's fixed now. I thought I'd caught all the occurrences of that particular +coding stupidity. + +Chris + +-- +Chris Garrigues http://www.DeepEddy.Com/~cwg/ +virCIO http://www.virCIO.Com +716 Congress, Suite 200 +Austin, TX 78701 +1 512 374 0500 + + World War III: The Wrong-Doers Vs. the Evil-Doers. + + + + +--==_Exmh_592622610P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.2_20000822 06/23/2000 + +iD8DBQE9ZV2CK9b4h5R0IUIRAnWSAJwLZJvK8S4LQRv57W3WIbG9U2P+ywCdExEL +kJaVNhuHKW9tp29wID5EjbU= +=HDIb +-----END PGP SIGNATURE----- + +--==_Exmh_592622610P-- + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/01171.bc028721505534967b4371da24b1e042 b/Ch3/datasets/spam/easy_ham/01171.bc028721505534967b4371da24b1e042 new file mode 100644 index 000000000..9f053885b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01171.bc028721505534967b4371da24b1e042 @@ -0,0 +1,79 @@ +From exmh-workers-admin@redhat.com Fri Aug 23 11:07:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 4561444157 + for ; Fri, 23 Aug 2002 06:05:48 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:05:48 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7N6LtZ13075 for + ; Fri, 23 Aug 2002 07:21:59 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 61ECC3F134; Fri, 23 Aug 2002 + 02:22:02 -0400 (EDT) +Delivered-To: exmh-workers@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 57D393F134 + for ; Fri, 23 Aug 2002 02:21:07 -0400 + (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g7N6L4B00352 for exmh-workers@listman.redhat.com; Fri, 23 Aug 2002 + 02:21:04 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7N6L4Y00348 for + ; Fri, 23 Aug 2002 02:21:04 -0400 +Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org + (8.11.6/8.11.6) with SMTP id g7N66Ml10260 for ; + Fri, 23 Aug 2002 02:06:27 -0400 +Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by + ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7N6KIl10577 for + ; Fri, 23 Aug 2002 13:20:23 +0700 (ICT) +Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU + (8.11.6/8.11.6) with ESMTP id g7N6KBW21590 for ; + Fri, 23 Aug 2002 13:20:11 +0700 (ICT) +From: Robert Elz +To: exmh-workers@spamassassin.taint.org +Subject: Re: Anolther sequence related traceback +In-Reply-To: <16323.1030043119@munnari.OZ.AU> +References: <16323.1030043119@munnari.OZ.AU> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <21588.1030083611@munnari.OZ.AU> +X-Loop: exmh-workers@spamassassin.taint.org +Sender: exmh-workers-admin@spamassassin.taint.org +Errors-To: exmh-workers-admin@spamassassin.taint.org +X-Beenthere: exmh-workers@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH developers +List-Unsubscribe: , + +List-Archive: +Date: Fri, 23 Aug 2002 13:20:11 +0700 + + Date: Fri, 23 Aug 2002 02:05:19 +0700 + From: Robert Elz + Message-ID: <16323.1030043119@munnari.OZ.AU> + +When I said ... + + | This is from today's cvs + +that will translate as "yesterday's" now of course (before the most +recent set of changes (catchup speedups, and so on)). + +kre + + + +_______________________________________________ +Exmh-workers mailing list +Exmh-workers@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-workers + diff --git a/Ch3/datasets/spam/easy_ham/01172.548e6eb1a164cc875189890a4b78e4f7 b/Ch3/datasets/spam/easy_ham/01172.548e6eb1a164cc875189890a4b78e4f7 new file mode 100644 index 000000000..652add7fa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01172.548e6eb1a164cc875189890a4b78e4f7 @@ -0,0 +1,89 @@ +From exmh-users-admin@redhat.com Mon Sep 2 13:15:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B215E44156 + for ; Mon, 2 Sep 2002 07:37:46 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:37:46 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8165qZ14820 for + ; Sun, 1 Sep 2002 07:05:53 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id C50953EECD; Sun, 1 Sep 2002 + 02:06:03 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id B7C953FDE4 + for ; Sun, 1 Sep 2002 02:05:14 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g8165BN05663 for exmh-users@listman.redhat.com; Sun, 1 Sep 2002 + 02:05:11 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g8165AY05653 for + ; Sun, 1 Sep 2002 02:05:10 -0400 +Received: from orion.dwf.com (bgp01360964bgs.sandia01.nm.comcast.net + [68.35.68.128]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g815nfl18016 for ; Sun, 1 Sep 2002 01:49:41 -0400 +Received: from orion.dwf.com (localhost.dwf.com [127.0.0.1]) by + orion.dwf.com (8.12.1/8.12.1) with ESMTP id g81653oj010953 for + ; Sun, 1 Sep 2002 00:05:03 -0600 +Received: from orion.dwf.com (reg@localhost) by orion.dwf.com + (8.12.1/8.12.1/Submit) with ESMTP id g81653XF010950 for + ; Sun, 1 Sep 2002 00:05:03 -0600 +Message-Id: <200209010605.g81653XF010950@orion.dwf.com> +X-Mailer: exmh version 2.5 07/25/2002 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Subject: ARRRGHHH Had GPG working, now it doesnt. +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Reg Clemens +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Sun, 01 Sep 2002 00:05:03 -0600 + +HELP. +I had GPG working. +I updated from version gnupg-1.0.6 to gnupg-1.0.7. +This moved gpg from /usr/bin to /usr/local/bin and I changed the path +in the exmh 'executable'. + +With that fix, EXMH knows I have GPG, and puts the line + + Check the signature with GnuPG + +in messages with GnuPG signatures. But punching the line ALWAYS +gives + + Signature made Thu Aug 29 00:27:17 2002 MDT using DSA key ID BDDF997A + Can't check signature: public key not found + +So, something else is missing. +Can somebody tell me what it is,- Ive tried grepping on everything +that I can think of with no luck at all. +-- + Reg.Clemens + reg@dwf.com + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + diff --git a/Ch3/datasets/spam/easy_ham/01173.30be73e4da024638bfbdf5afc05b438f b/Ch3/datasets/spam/easy_ham/01173.30be73e4da024638bfbdf5afc05b438f new file mode 100644 index 000000000..dde400fad --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01173.30be73e4da024638bfbdf5afc05b438f @@ -0,0 +1,85 @@ +From exmh-users-admin@redhat.com Tue Oct 8 17:01:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CCCF016F20 + for ; Tue, 8 Oct 2002 17:01:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 17:01:16 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98Fp9K22849 for + ; Tue, 8 Oct 2002 16:51:10 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id DD6ED412F4; Tue, 8 Oct 2002 + 11:50:29 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 19FCA41723 + for ; Tue, 8 Oct 2002 11:21:21 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g98FLKI25296 for exmh-users@listman.redhat.com; Tue, 8 Oct 2002 + 11:21:20 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g98FLKf25292 for + ; Tue, 8 Oct 2002 11:21:20 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g98F1iX22876 for ; Tue, 8 Oct 2002 11:01:44 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id 681A437EBF; + Tue, 8 Oct 2002 10:21:18 -0500 (CDT) +Received: from dimebox.bmc.com (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id 5A6EF37EBE; Tue, 8 Oct 2002 10:21:18 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 cvs 10/01/2002 with nmh-1.0.4 +In-Reply-To: <1034086124.18970.TMDA@deepeddy.vircio.com> +References: <20021008062513.19261.qmail@dag.newtech.fi> + <1034086124.18970.TMDA@deepeddy.vircio.com> +Comments: In-reply-to Chris Garrigues message + dated "Tue, 08 Oct 2002 09:08:43 -0500." +To: exmh-users@spamassassin.taint.org, dag@newtech.fi +Subject: Re: Ringing bell on other computer +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <17313.1034090473@dimebox.bmc.com> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 08 Oct 2002 10:21:13 -0500 + + +BTW: I remember messing about with such things long ago. One +problem I ran into was making sure that no attempt was made to +play a sound when either: + +a) the screen was locked + or +b) no exmh was running. + +Just something to think about, Dag. + + +--Hal + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01174.6f3f36997e912f8c919ca2d5742b474b b/Ch3/datasets/spam/easy_ham/01174.6f3f36997e912f8c919ca2d5742b474b new file mode 100644 index 000000000..168812043 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01174.6f3f36997e912f8c919ca2d5742b474b @@ -0,0 +1,108 @@ +From exmh-users-admin@redhat.com Wed Oct 9 10:48:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E707316F17 + for ; Wed, 9 Oct 2002 10:47:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 10:47:42 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98JDgK30498 for + ; Tue, 8 Oct 2002 20:13:42 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 09939419E9; Tue, 8 Oct 2002 + 15:13:57 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 5964E3F135 + for ; Tue, 8 Oct 2002 14:56:55 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g98Iutm24613 for exmh-users@listman.redhat.com; Tue, 8 Oct 2002 + 14:56:55 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g98Iusf24609 for + ; Tue, 8 Oct 2002 14:56:54 -0400 +Received: from dag.newtech.fi + (IDENT:qmailr@ip213-185-39-113.laajakaista.mtv3.fi [213.185.39.113]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g98IbGX22891 for + ; Tue, 8 Oct 2002 14:37:16 -0400 +Received: (qmail 19780 invoked by uid 200); 8 Oct 2002 18:56:52 -0000 +Message-Id: <20021008185652.19779.qmail@dag.newtech.fi> +X-Mailer: exmh version 2.5 07/13/2001 with nmh-0.27 +To: Chris Garrigues +Cc: exmh-users@spamassassin.taint.org, dag@newtech.fi, dag@newtech.fi +Subject: Re: Ringing bell on other computer +In-Reply-To: Message from Chris Garrigues + of + "Tue, 08 Oct 2002 09:08:43 CDT." + <1034086124.18970.TMDA@deepeddy.vircio.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: Dag Nygren +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Tue, 08 Oct 2002 21:56:52 +0300 + + +> > > +> > > Dag> but when procmail runs it it doesn't, presumably as it +> > > Dag> doesn't have the authorization to communicate with the +> > > Dag> laptop, beeing another user? +> > > +> > > I don't know anything about the KDE sound server but I'd guess +> > > your problem is the "environment" in which procmail runs. You +> > > don't say what procmail is running from. In my case, for +> > > example, procmail is run from fetchmail which is run by a cron +> > > job. +> > +> > Sorry about that, +> > procmail is run by the qmail delivery agent to presort all mail +> > I get. +> > But anyway, I found an error message in procmail.log, which solved +> > the problem. +> > The following line in my delivery script seems to work fine now: +> > +> > DISPLAY=:0.0 artsplay +> +> BTW, if you use exmhwrapper (found in the misc directory), you can generalize +> this to +> +> DISPLAY=`cat $HOME/.exmh/.display` artsplay + +Yes, but that probably means that you have to have exmh +running on the laptop to get the notification? +With exmh getting upset by two instances running at the +same time, this creates the problem that I cannot run to the +closest compter to check out the new mail. + +But thanks for the hint, I might use that for some other +hack ;-) + +BRGDS + +Dag + + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01175.1cc3a3de60d72ceacc94ecd526d8bf7c b/Ch3/datasets/spam/easy_ham/01175.1cc3a3de60d72ceacc94ecd526d8bf7c new file mode 100644 index 000000000..dd353e4ac --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01175.1cc3a3de60d72ceacc94ecd526d8bf7c @@ -0,0 +1,82 @@ +From exmh-users-admin@redhat.com Wed Oct 9 18:31:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 94AC616F03 + for ; Wed, 9 Oct 2002 18:31:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 18:31:27 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99HMKK13731 for + ; Wed, 9 Oct 2002 18:22:20 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 1AE364148A; Wed, 9 Oct 2002 + 13:22:14 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 4781E41B30 + for ; Wed, 9 Oct 2002 12:57:16 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g99GvGJ09059 for exmh-users@listman.redhat.com; Wed, 9 Oct 2002 + 12:57:16 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g99GvFf09055 for + ; Wed, 9 Oct 2002 12:57:15 -0400 +Received: from life.ai.mit.edu (life.ai.mit.edu [128.52.32.80]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g99GbTX10490 for + ; Wed, 9 Oct 2002 12:37:29 -0400 +Received: from localhost (jrennie@tiikeri [128.52.37.76]) by + life.ai.mit.edu (8.12.2/8.12.2/BASENAME(ai.master.life-8.12.2.mc, + .mc):RCS_REVISION(evision: 1.23 ) with ESMTP id g99GvDmX025433; + Wed, 9 Oct 2002 12:57:14 -0400 (EDT) +Message-Id: <200210091657.g99GvDmX025433@life.ai.mit.edu> +X-Mailer: exmh version 2.5 07/13/2001 (debian 2.5-1) with nmh-1.0.2 +To: exmh-users@spamassassin.taint.org +Cc: jrennie@ai.mit.edu +Subject: From +From: Jason Rennie +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 09 Oct 2002 12:57:13 -0400 + + +When I receive a message that has a line starting with "From ", it's +broken into two messages. I get my mail from /var/spool/mail. The +program that incorporates mail thinks that the "From " line starts a new +message. + +My sysadmins have told me that the sending mail client is supposed to +escape lines begining with "From ". EXMH (2.5) doesn't do this. Should +it? It appears that my MH is MH 6.8. Does NMH fix this? + +Jason D. M. Rennie +MIT AI Lab +jrennie@ai.mit.edu +(617) 253-5339 +http://www.ai.mit.edu/~jrennie/ + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01176.ea3b78b12b9501f85cb38db408286ba1 b/Ch3/datasets/spam/easy_ham/01176.ea3b78b12b9501f85cb38db408286ba1 new file mode 100644 index 000000000..9a39e35f1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01176.ea3b78b12b9501f85cb38db408286ba1 @@ -0,0 +1,134 @@ +From exmh-users-admin@redhat.com Wed Oct 9 22:41:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6D59A16F1A + for ; Wed, 9 Oct 2002 22:40:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 22:40:01 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99IXOK16457 for + ; Wed, 9 Oct 2002 19:33:24 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id B98E741C72; Wed, 9 Oct 2002 + 14:32:34 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 4B7F742312 + for ; Wed, 9 Oct 2002 14:18:18 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g99IIIe01687 for exmh-users@listman.redhat.com; Wed, 9 Oct 2002 + 14:18:18 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g99IIHf01680 for + ; Wed, 9 Oct 2002 14:18:17 -0400 +Received: from sherman.stortek.com (sherman.stortek.com [129.80.22.146]) + by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g99HwUX03598 for + ; Wed, 9 Oct 2002 13:58:30 -0400 +Received: from sherman.stortek.com (localhost [127.0.0.1]) by + sherman.stortek.com (8.12.3/8.12.0) with ESMTP id g99II9OH006838 for + ; Wed, 9 Oct 2002 12:18:09 -0600 (MDT) +Received: from vinson-ether1.stortek.com (vinson-ether1.stortek.com + [129.80.16.134]) by sherman.stortek.com (8.12.3/8.12.0) with ESMTP id + g99II8s3006835 for ; Wed, 9 Oct 2002 12:18:08 -0600 + (MDT) +Received: from tatanka.stortek.com (tatanka.stortek.com [129.80.90.4]) by + vinson-ether1.stortek.com (8.12.3/8.12.0) with ESMTP id g99II8qv021686 for + ; Wed, 9 Oct 2002 12:18:08 -0600 (MDT) +Received: from tatanka (localhost [127.0.0.1]) by tatanka.stortek.com + (8.11.6+Sun/8.10.2) with ESMTP id g99IGd904228 for ; + Wed, 9 Oct 2002 12:16:43 -0600 (MDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Subject: Re: From +In-Reply-To: Your message of + "Wed, 09 Oct 2002 12:57:13 EDT." + <200210091657.g99GvDmX025433@life.ai.mit.edu> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <4226.1034187399@tatanka> +From: "James C. McMaster (Jim)" +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 09 Oct 2002 12:16:39 -0600 + +This is not an exmh problem, but an interaction between sendmail, Solaris and +mh. + +Your sysadmin is wrong. It is the responsibility of the receiving mail +server to escape lines beginning with "From " if they choose to turn on that +facility. It is not the responsibility for email clients to cater to the +stupid design of the unix mail spool, and Sun's even more stupid decision to +rely on "Content-length:" instead of dealing with this problem. Since mh is +unaware of "Content-length:", rcvstore gags trying to parse messages from the +spool. + +I had this same problem. There are several ways to fix it: + +1) Get your mail administrator to add the "E" flag to your sendmail. This +means you will never see a line beginning with "From ". Any such line will +look like ">From ". + +2) There is a patch to mh to make it respect "Content-length:". When I was +having this problem, porting this patch to nmh was low on the priority list, +then nmh development stalled for a long time. I doubt it has been done, but +you can check with the nmh list at nmh-workers@mhost.com to find out for sure. + +3) You can learn to use procmail, invoking rcvstore directly instead of +letting sendmail put your incoming mail into the spool. This avoids the +whole issue. rcvstore only deals with a single message at a time, and +everything works. +-- +Jim McMaster +mailto:mcmasjc@tatanka.stortek.com + + +In message <200210091657.g99GvDmX025433@life.ai.mit.edu>, Jason Rennie said: +> +> When I receive a message that has a line starting with "From ", it's +> broken into two messages. I get my mail from /var/spool/mail. The +> program that incorporates mail thinks that the "From " line starts a new +> message. +> +> My sysadmins have told me that the sending mail client is supposed to +> escape lines begining with "From ". EXMH (2.5) doesn't do this. Should +> it? It appears that my MH is MH 6.8. Does NMH fix this? +> +> Jason D. M. Rennie +> MIT AI Lab +> jrennie@ai.mit.edu +> (617) 253-5339 +> http://www.ai.mit.edu/~jrennie/ +> +> +> +> +> _______________________________________________ +> Exmh-users mailing list +> Exmh-users@redhat.com +> https://listman.redhat.com/mailman/listinfo/exmh-users +> + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01177.c02828dcc9e06deffbdfb48b97206cb5 b/Ch3/datasets/spam/easy_ham/01177.c02828dcc9e06deffbdfb48b97206cb5 new file mode 100644 index 000000000..693566add --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01177.c02828dcc9e06deffbdfb48b97206cb5 @@ -0,0 +1,99 @@ +From exmh-users-admin@redhat.com Wed Oct 9 22:41:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1F39816F1B + for ; Wed, 9 Oct 2002 22:40:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 22:40:04 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99IbGK16522 for + ; Wed, 9 Oct 2002 19:37:16 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 89E97415A8; Wed, 9 Oct 2002 + 14:37:38 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id A329C4099F + for ; Wed, 9 Oct 2002 14:30:08 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g99IU8I05660 for exmh-users@listman.redhat.com; Wed, 9 Oct 2002 + 14:30:08 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g99IU8f05656 for + ; Wed, 9 Oct 2002 14:30:08 -0400 +Received: from dimebox.bmc.com (adsl-66-140-152-233.dsl.hstntx.swbell.net + [66.140.152.233]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g99IALX07278 for ; Wed, 9 Oct 2002 14:10:21 -0400 +Received: by dimebox.bmc.com (Postfix, from userid 1205) id 53ABB37EBF; + Wed, 9 Oct 2002 13:30:05 -0500 (CDT) +Received: from dimebox.bmc.com (localhost [127.0.0.1]) by dimebox.bmc.com + (Postfix) with ESMTP id 980AA37EA6 for ; + Wed, 9 Oct 2002 13:30:05 -0500 (CDT) +X-Mailer: exmh version 2.5 07/13/2001 cvs 10/01/2002 with nmh-1.0.4 +In-Reply-To: <200210091657.g99GvDmX025433@life.ai.mit.edu> +References: <200210091657.g99GvDmX025433@life.ai.mit.edu> +Comments: In-reply-to Jason Rennie message dated + "Wed, 09 Oct 2002 12:57:13 -0400." +To: exmh-users@spamassassin.taint.org +Subject: Re: From +MIME-Version: 1.0 +From: Hal DeVore +X-Image-Url: http://www.geocities.com/hal_devore_ii/haleye48.gif +Content-Type: text/plain; charset=us-ascii +Message-Id: <8425.1034188200@dimebox.bmc.com> +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 09 Oct 2002 13:30:00 -0500 + + + +>>>>> On Wed, 9 Oct 2002, "Jason" == Jason Rennie wrote: + + Jason> My sysadmins have told me that the sending mail client + Jason> is supposed to escape lines begining with "From ". + +Your sysadmins are wrong. + +Whatever program that is used to store the mail into the +braindead "mailbox" file (/var/spool/mail/whatever) is supposed +to escape a line that begins with From. That program is called +the local Mail Delivery Agent (MDA) + +It would be better if you never, ever, stored your mail in a +"mailbox" file. + +If your sysadmins are capable of it, get them to set up the +receiving Mail Transfer Agent (MTA) to allow the use of procmail +as the local MDA. Then use procmail to invoke rcvstore and +deliver your mail directly into your MH mail folders. + +Most Linux systems come configured this way, if a user has a +$HOME/.procmail file then mail is delivered using procmail. + + +--Hal + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01178.a90ac824be5cbfe0dbbe8824fa07cdd4 b/Ch3/datasets/spam/easy_ham/01178.a90ac824be5cbfe0dbbe8824fa07cdd4 new file mode 100644 index 000000000..037bc0a18 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01178.a90ac824be5cbfe0dbbe8824fa07cdd4 @@ -0,0 +1,115 @@ +From exmh-users-admin@redhat.com Wed Oct 9 22:41:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C2C7216F1F + for ; Wed, 9 Oct 2002 22:40:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 22:40:11 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99IsLK17087 for + ; Wed, 9 Oct 2002 19:54:21 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 680E542573; Wed, 9 Oct 2002 + 14:52:10 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 01A0D41EC2 + for ; Wed, 9 Oct 2002 14:43:06 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g99Ih6H09020 for exmh-users@listman.redhat.com; Wed, 9 Oct 2002 + 14:43:06 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g99Ih6f09015 for + ; Wed, 9 Oct 2002 14:43:06 -0400 +Received: from playground.sun.com (playground.Sun.COM [192.9.5.5]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g99INJX11053 for + ; Wed, 9 Oct 2002 14:23:19 -0400 +Received: from opal.eng.sun.com (inside-swan.sun.com [192.18.43.5]) by + playground.sun.com (8.12.7.Beta0+Sun/8.12.7.Beta0) with ESMTP id + g99Ih5qh019830 for ; Wed, 9 Oct 2002 11:43:05 -0700 + (PDT) +Received: from opal (localhost [127.0.0.1]) by opal.eng.sun.com + (8.12.7.Beta0+Sun/8.12.7.Beta0) with ESMTP id g99Ignpd981628 for + ; Wed, 9 Oct 2002 11:42:49 -0700 (PDT) +Message-Id: <200210091842.g99Ignpd981628@opal.eng.sun.com> +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.3 +To: exmh-users@spamassassin.taint.org +Subject: Re: From +X-Image-Url: http://playground.sun.com/~jbeck/gif/Misc/john-face.jpg +In-Reply-To: Your message of + "Wed, 09 Oct 2002 12:16:39 MDT." + <4226.1034187399@tatanka> +References: <4226.1034187399@tatanka> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: John Beck +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 09 Oct 2002 11:42:49 -0700 + +James> This is not an exmh problem, but an interaction between sendmail, +James> Solaris and mh. + +Correct. + +James> Your sysadmin is wrong. It is the responsibility of the receiving mail +James> server to escape lines beginning with "From " if they choose to turn +James> on that facility. It is not the responsibility for email clients to +James> cater to the stupid design of the unix mail spool, and Sun's even more +James> stupid decision to rely on "Content-length:" instead of dealing with +James> this problem. Since mh is unaware of "Content-length:", rcvstore gags +James> trying to parse messages from the spool. + +Also correct. In fairness, though I cannot defend the Content-Length: header +as I consider it brain damage in the extreme, Sun inherited this from AT&T. + +James> Get your mail administrator to add the "E" flag to your sendmail. +James> This means you will never see a line beginning with "From ". Any such +James> line will look like ">From ". + +Specifically, you will need to find a line in /etc/mail/sendmail.cf that +starts with "Mlocal" such as: + +[4784] grep ^Mlocal /etc/mail/sendmail.cf +Mlocal, P=/usr/lib/mail.local, F=lsDFMAw5:/|@qPSXfmnz9E, S=EnvFromSMTP/HdrFromL, R=EnvToL/HdrToL, +[4785] + +and make sure that 'E' appears in the long list of flags following "F=". +If your sys-admin uses m4 to generate sendmail.cf, and any good sys-admin +should, then here is the magic line for the .mc file: + +MODIFY_MAILER_FLAGS(`LOCAL', `+E')dnl + +James> You can learn to use procmail, invoking rcvstore directly instead of +James> letting sendmail put your incoming mail into the spool. This avoids +James> the whole issue. rcvstore only deals with a single message at a time, +James> and everything works. + +Also correct, though procmail per se is not needed, as other filters (such +as slocal, which is part of the [n]mh distribution) do the trick just as well. + +-- John + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01179.bf1aa6047c74cad4860b8010439f199a b/Ch3/datasets/spam/easy_ham/01179.bf1aa6047c74cad4860b8010439f199a new file mode 100644 index 000000000..c40ef0ad5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01179.bf1aa6047c74cad4860b8010439f199a @@ -0,0 +1,100 @@ +From exmh-users-admin@redhat.com Wed Oct 9 22:41:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 79A0D16F20 + for ; Wed, 9 Oct 2002 22:40:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 22:40:14 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99IslK17102 for + ; Wed, 9 Oct 2002 19:54:47 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 60730425D1; Wed, 9 Oct 2002 + 14:53:28 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 87CF54240E + for ; Wed, 9 Oct 2002 14:43:48 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g99IhmG09326 for exmh-users@listman.redhat.com; Wed, 9 Oct 2002 + 14:43:48 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g99Ihmf09319 for + ; Wed, 9 Oct 2002 14:43:48 -0400 +Received: from ext-nj2gw-1.online-age.net (ext-nj2gw-1.online-age.net + [216.35.73.163]) by mx1.redhat.com (8.11.6/8.11.6) with SMTP id + g99IO1X11352 for ; Wed, 9 Oct 2002 14:24:01 -0400 +Received: from int-nj2gw-1.online-age.net (int-nj2gw-1.online-age.net + [3.159.236.65]) by ext-nj2gw-1.online-age.net (8.12.3/8.9.1/990426-RLH) + with ESMTP id g99Ihd6o028287 for ; Wed, + 9 Oct 2002 14:43:40 -0400 (EDT) +Received: from crdns.crd.ge.com (localhost [127.0.0.1]) by + int-nj2gw-1.online-age.net (8.12.3/8.12.3/990426-RLH) with ESMTP id + g99IhXDs006427 for ; Wed, 9 Oct 2002 14:43:34 -0400 + (EDT) +Received: from hippolyta.crd.ge.com (hippolyta.crd.ge.com [3.1.7.7]) by + crdns.crd.ge.com (8.11.6/8.11.6) with ESMTP id g99IhW705980 for + ; Wed, 9 Oct 2002 14:43:33 -0400 (EDT) +Received: from hippolyta by hippolyta.crd.ge.com (8.9.3+Sun/GE-CRD + Standard Sendmail Version S1.5) id OAA01268; Wed, 9 Oct 2002 14:43:32 + -0400 (EDT) +Message-Id: <200210091843.OAA01268@hippolyta.crd.ge.com> +X-Mailer: exmh version 2.2 06/23/2000 with nmh-1.0.4 +From: kennykb@crd.ge.com (Kevin Kenny) +Organization: Advanced Computing Technologies, GE Global Research Center +To: exmh-users@spamassassin.taint.org +Subject: Re: From +X-Face: 5*Bwl\0iY*1'W~D~c2foEA#,\H[\j3:fTgL0QDgl'0/_fV8X|GO>!b`fdiNc{Ioj6u7a{qq + 1h+JHjg)m(|axb2m&0{I9cl5lQ9OeK\vdx=Ca]v9No,e'd~rIQ'ei,%J!^+@w|2/fLdXMKEOIh85kr + plx|`3lxhu#KWB;}OjDeAg^ +X-Uri: http://ce-toolkit.crd.ge.com/people/kennykb.html +X-Image-Url: http://192.35.44.8/people/kennykb.gif +X-No-Matter-Where-You-Go: There you are. +In-Reply-To: Message from + "James C. McMaster (Jim)" + of + "Wed, 09 Oct 2002 12:16:39 MDT." + <4226.1034187399@tatanka> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 09 Oct 2002 14:43:32 -0400 + + +mcmasjc@tatanka.stortek.com said: +> 3) You can learn to use procmail, + +Can this be done via .forward? I don't have root on the machine my +mailbox is on, and I'm absolutely certain that a complaint to the sysadmin +about sendmail will get a simple response: shut down the daemon and tell +me to use Outlook. :( + +-- +73 de ke9tv/2, Kevin KENNY GE Corporate Research & Development +kennykb@crd.ge.com P. O. Box 8, Bldg. K-1, Rm. 5B36A + Schenectady, New York 12301-0008 USA + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01180.13edd21d3fb5e2c397528cbc0a581b76 b/Ch3/datasets/spam/easy_ham/01180.13edd21d3fb5e2c397528cbc0a581b76 new file mode 100644 index 000000000..fb8ff39e2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01180.13edd21d3fb5e2c397528cbc0a581b76 @@ -0,0 +1,88 @@ +From exmh-users-admin@redhat.com Wed Oct 9 22:41:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1A71616F56 + for ; Wed, 9 Oct 2002 22:40:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 22:40:54 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99JSOK18228 for + ; Wed, 9 Oct 2002 20:28:25 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 2AAD8429A1; Wed, 9 Oct 2002 + 15:25:21 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id F1D064100F + for ; Wed, 9 Oct 2002 15:08:50 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g99J8oJ16420 for exmh-users@listman.redhat.com; Wed, 9 Oct 2002 + 15:08:50 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g99J8of16416 for + ; Wed, 9 Oct 2002 15:08:50 -0400 +Received: from sherman.stortek.com (sherman.stortek.com [129.80.22.146]) + by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g99In3X18273 for + ; Wed, 9 Oct 2002 14:49:03 -0400 +Received: from sherman.stortek.com (localhost [127.0.0.1]) by + sherman.stortek.com (8.12.3/8.12.0) with ESMTP id g99J8iOH021170 for + ; Wed, 9 Oct 2002 13:08:44 -0600 (MDT) +Received: from vinson-ether1.stortek.com (vinson-ether1.stortek.com + [129.80.16.134]) by sherman.stortek.com (8.12.3/8.12.0) with ESMTP id + g99J8es3021162 for ; Wed, 9 Oct 2002 13:08:40 -0600 + (MDT) +Received: from tatanka.stortek.com (tatanka.stortek.com [129.80.90.4]) by + vinson-ether1.stortek.com (8.12.3/8.12.0) with ESMTP id g99J8dqv029585 for + ; Wed, 9 Oct 2002 13:08:39 -0600 (MDT) +Received: from tatanka (localhost [127.0.0.1]) by tatanka.stortek.com + (8.11.6+Sun/8.10.2) with ESMTP id g99J7E904573 for ; + Wed, 9 Oct 2002 13:07:15 -0600 (MDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Subject: Re: From +In-Reply-To: Your message of + "Wed, 09 Oct 2002 14:43:32 EDT." + <200210091843.OAA01268@hippolyta.crd.ge.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <4571.1034190434@tatanka> +From: "James C. McMaster (Jim)" +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 09 Oct 2002 13:07:14 -0600 + +In message <200210091843.OAA01268@hippolyta.crd.ge.com>, Kevin Kenny said: +> +> mcmasjc@tatanka.stortek.com said: +> > 3) You can learn to use procmail, +> +It absolutely can be done from .forward. I am in the same situation as you, +and that is how I do it. +-- +Jim McMaster +mailto:mcmasjc@tatanka.stortek.com + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01181.a1a32438921904f88c7c78f1fea03a8f b/Ch3/datasets/spam/easy_ham/01181.a1a32438921904f88c7c78f1fea03a8f new file mode 100644 index 000000000..8a11d7463 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01181.a1a32438921904f88c7c78f1fea03a8f @@ -0,0 +1,120 @@ +From exmh-users-admin@redhat.com Wed Oct 9 22:42:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 855F416F69 + for ; Wed, 9 Oct 2002 22:40:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 22:40:58 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99JcRK18524 for + ; Wed, 9 Oct 2002 20:38:31 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 943A042A07; Wed, 9 Oct 2002 + 15:38:30 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 0DFA4429A8 + for ; Wed, 9 Oct 2002 15:25:29 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g99JPSL22137 for exmh-users@listman.redhat.com; Wed, 9 Oct 2002 + 15:25:28 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g99JPSf22129 for + ; Wed, 9 Oct 2002 15:25:28 -0400 +Received: from ka.graffl.net (ka.graffl.net [193.154.165.8]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g99J5cX23923 for + ; Wed, 9 Oct 2002 15:05:40 -0400 +Received: from fsck.waldner.priv.at (fsck.waldner.priv.at + [213.225.31.166]) by ka.graffl.net (8.12.3/8.12.3/Debian -4) with ESMTP id + g99JPIgM006081 for ; Wed, 9 Oct 2002 21:25:18 +0200 +Received: from fsck.intern.waldner.priv.at (localhost [127.0.0.1]) by + fsck.waldner.priv.at (8.12.3/8.12.3/Debian -4) with ESMTP id + g99JPGl9001535 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 + verify=FAIL) for ; Wed, 9 Oct 2002 21:25:17 +0200 +Received: (from waldner@localhost) by fsck.intern.waldner.priv.at + (8.12.3/8.12.3/Debian -4) id g99JPGfJ001534 for exmh-users@redhat.com; + Wed, 9 Oct 2002 21:25:16 +0200 +Message-Id: <200210091925.g99JPGfJ001534@fsck.intern.waldner.priv.at> +X-Mailer: exmh version 2.5 07/13/2001 (debian 2.5-1) with nmh-1.0.4+dev +To: exmh-users@spamassassin.taint.org +Subject: Re: From +In-Reply-To: Your message of + "Wed, 09 Oct 2002 14:43:32 EDT." + <200210091843.OAA01268@hippolyta.crd.ge.com> +From: Robert Waldner +X-Organization: Bah. Speaking only for me humble self. +X-GPG: telnet fsck.waldner.priv.at for public key +X-GPG-Fingerprint: 406F 241A 9E21 CF92 1DED A0A8 1343 7348 9AF9 DE82 +X-GPG-Keyid: 0x9AF9DE82 +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="----------=_1034191516-429-0"; + micalg="pgp-sha1"; + protocol="application/pgp-signature" +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 09 Oct 2002 21:24:57 +0200 + +This is a multi-part message in MIME format. +It has been signed conforming to RFC3156. +You'll need GPG or PGP to check the signature. + +------------=_1034191516-429-0 +Content-Type: text/plain; charset=us-ascii + + +On Wed, 09 Oct 2002 14:43:32 EDT, Kevin Kenny writes: +>> 3) You can learn to use procmail, + +>Can this be done via .forward? + +make your .forward contain only the following line: +"|/usr/bin/procmail" + (incl. the quotes, your procmail binary may be in another path) + +cheers, +&rw +-- +-- For a list of points detailing how technology +-- has failed to improve our lives, please press 3. + + + +------------=_1034191516-429-0 +Content-Type: application/pgp-signature; name="signature.ng" +Content-Disposition: inline; filename="signature.ng" +Content-Transfer-Encoding: 7bit + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.2.0 (GNU/Linux) + +iD8DBQE9pIKcE0NzSJr53oIRArv6AJ0dnw3zse1X3xC/afguHB90HFC0qwCeIINr +kuoZSln0mfGwGUgMRSprbgk= +=1urd +-----END PGP SIGNATURE----- + +------------=_1034191516-429-0-- + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01182.c9d5fc1ef170c05409bf3daa8f36568e b/Ch3/datasets/spam/easy_ham/01182.c9d5fc1ef170c05409bf3daa8f36568e new file mode 100644 index 000000000..e46bfc7a4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01182.c9d5fc1ef170c05409bf3daa8f36568e @@ -0,0 +1,102 @@ +From exmh-users-admin@redhat.com Wed Oct 9 22:43:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4656E16F1B + for ; Wed, 9 Oct 2002 22:41:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 22:41:21 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99LHFK21965 for + ; Wed, 9 Oct 2002 22:17:15 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 9D81D3F3B4; Wed, 9 Oct 2002 + 17:17:35 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 2D645429D4 + for ; Wed, 9 Oct 2002 17:06:34 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g99L6Yw18364 for exmh-users@listman.redhat.com; Wed, 9 Oct 2002 + 17:06:34 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g99L6Xf18359 for + ; Wed, 9 Oct 2002 17:06:33 -0400 +Received: from prospect.stortek.com (prospect.stortek.com [129.80.22.147]) + by mx1.redhat.com (8.11.6/8.11.6) with SMTP id g99KkjX19744 for + ; Wed, 9 Oct 2002 16:46:45 -0400 +Received: from prospect.stortek.com (localhost [127.0.0.1]) by + prospect.stortek.com (8.12.3/8.12.0) with ESMTP id g99L6Qbt018826 for + ; Wed, 9 Oct 2002 15:06:26 -0600 (MDT) +Received: from vinson-ether1.stortek.com (vinson-ether1.stortek.com + [129.80.16.134]) by prospect.stortek.com (8.12.3/8.12.0) with ESMTP id + g99L6QAC018819 for ; Wed, 9 Oct 2002 15:06:26 -0600 + (MDT) +Received: from tatanka.stortek.com (tatanka.stortek.com [129.80.90.4]) by + vinson-ether1.stortek.com (8.12.3/8.12.0) with ESMTP id g99L6PHx014983 for + ; Wed, 9 Oct 2002 15:06:25 -0600 (MDT) +Received: from tatanka (localhost [127.0.0.1]) by tatanka.stortek.com + (8.11.6+Sun/8.10.2) with ESMTP id g99L50905177 for ; + Wed, 9 Oct 2002 15:05:01 -0600 (MDT) +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Subject: Re: From +In-Reply-To: Your message of + "Wed, 09 Oct 2002 21:24:57 +0200." + <200210091925.g99JPGfJ001534@fsck.intern.waldner.priv.at> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Message-Id: <5175.1034197500@tatanka> +From: "James C. McMaster (Jim)" +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 09 Oct 2002 15:05:00 -0600 + +In message <200210091925.g99JPGfJ001534@fsck.intern.waldner.priv.at>, Robert +Wa +ldner said: +> +> +> On Wed, 09 Oct 2002 14:43:32 EDT, Kevin Kenny writes: +> >> 3) You can learn to use procmail, +> +> >Can this be done via .forward? +> +> make your .forward contain only the following line: +> "|/usr/bin/procmail" +> (incl. the quotes, your procmail binary may be in another path) +> +Check the procmail documentation. They actually recommend: + +"|IFS=' '&&p=(PATH/TO/PROCMAIL)&&test -f $p&&exec $p -f-||exit +75#(UNIQUE_STRING)" + +I don't know what this does, but it is explained in the doc. +-- +Jim McMaster +mailto:mcmasjc@tatanka.stortek.com + + + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01183.36c29b5d6d19a328c9928a157019a49c b/Ch3/datasets/spam/easy_ham/01183.36c29b5d6d19a328c9928a157019a49c new file mode 100644 index 000000000..f658a62df --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01183.36c29b5d6d19a328c9928a157019a49c @@ -0,0 +1,136 @@ +From exmh-users-admin@redhat.com Wed Oct 9 22:43:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4139116F71 + for ; Wed, 9 Oct 2002 22:41:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 22:41:24 +0100 (IST) +Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99LTaK22297 for + ; Wed, 9 Oct 2002 22:29:37 +0100 +Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by + listman.redhat.com (Postfix) with ESMTP id 92C394317A; Wed, 9 Oct 2002 + 17:28:35 -0400 (EDT) +Delivered-To: exmh-users@listman.spamassassin.taint.org +Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org + [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id E10B9430F2 + for ; Wed, 9 Oct 2002 17:15:01 -0400 (EDT) +Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6) + id g99LF1321090 for exmh-users@listman.redhat.com; Wed, 9 Oct 2002 + 17:15:01 -0400 +Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by + int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g99LF1f21081 for + ; Wed, 9 Oct 2002 17:15:01 -0400 +Received: from asgard.blu.org (asgard.blu.org [216.235.254.231]) by + mx1.redhat.com (8.11.6/8.11.6) with SMTP id g99Kt3X22540 for + ; Wed, 9 Oct 2002 16:55:03 -0400 +Received: from vishnu.abreau.net (h00306548b0d2.ne.client2.attbi.com + [24.60.36.142]) by asgard.blu.org (Postfix) with ESMTP id 6B74D26EA4; + Wed, 9 Oct 2002 17:14:45 -0400 (EDT) +Received: from blu.org (jabr@localhost) by vishnu.abreau.net + (8.11.6/8.11.6) with ESMTP id g99LFIO03270; Wed, 9 Oct 2002 17:15:18 -0400 +Message-Id: <200210092115.g99LFIO03270@vishnu.abreau.net> +X-Authentication-Warning: localhost.localdomain: jabr owned process doing -bs +X-Mailer: exmh version 2.5 01/15/2001 with nmh-1.0.4 +To: exmh-users@spamassassin.taint.org +Cc: jrennie@ai.mit.edu +X-Image-Url: http://www.abreau.net/faces/jabr-17.jpg +X-Url: http://www.abreau.net/ +X-GPG-Fingerprint: 72 FB 39 4F 3C 3B D6 5B E0 C8 5A 6E F1 2C BE 99 +X-GPG-Keyid: 0xD5C7B5D9 +Subject: Re: From +In-Reply-To: Your message of + "Wed, 09 Oct 2002 12:57:13 EDT." + <200210091657.g99GvDmX025433@life.ai.mit.edu> +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="==_Exmh_1405404058P"; + micalg=pgp-sha1; + protocol="application/pgp-signature" +Content-Transfer-Encoding: 7bit +From: John Abreau +X-Loop: exmh-users@spamassassin.taint.org +Sender: exmh-users-admin@spamassassin.taint.org +Errors-To: exmh-users-admin@spamassassin.taint.org +X-Beenthere: exmh-users@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: exmh-users@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion list for EXMH users +List-Unsubscribe: , + +List-Archive: +Date: Wed, 09 Oct 2002 17:15:18 -0400 + +--==_Exmh_1405404058P +Content-Type: text/plain; charset=us-ascii + +Jason Rennie writes: + +> My sysadmins have told me that the sending mail client is supposed to +> escape lines begining with "From ". EXMH (2.5) doesn't do this. Should +> it? It appears that my MH is MH 6.8. Does NMH fix this? + +Actually, this issue used to escalate into a religious war. The "From " +envelope is an artifact of the mbox mailbox format, and from that +perspective it should be the mail server that stores its mailboxes in +mbox format that should be responsible for escaping lines beginning with +"From ". On the other hand, this breaks the assumption that the mail +transport only touches the message headers and leaves the message body +alone. +Things like pgp signatures break when the mail server changes the message +body. + +Also, strictly speaking, the mbox format envelope (or for us old-timers, +the UUCP envelope) isn't just any line beginning with "From ". It's really +"From", a single space, a valid email address, two spaces, and a valid +date. +For example: + + From ptardif@nbnet.nb.ca Sun Jul 14 08:53:57 2002 + ^ ^^ + + +-- +John Abreau / Executive Director, Boston Linux & Unix +IM: jabr@jabber.blu.org / abreauj@aim / abreauj@yahoo / 28611923@icq +Email jabr@blu.org / WWW http://www.abreau.net / PGP-Key-ID 0xD5C7B5D9 +PGP-Key-Fingerprint 72 FB 39 4F 3C 3B D6 5B E0 C8 5A 6E F1 2C BE 99 + + Some people say, "The enemy of my enemy is my friend." + I often respond, "When elephants fight, it's the grass + that gets trampled." + + + + +--==_Exmh_1405404058P +Content-Type: application/pgp-signature + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: Exmh version 2.5 01/15/2001 + +iQCVAwUBPaScZlV9A5rVx7XZAQJlrgQAyxnhXLaYoas75wtCkQz7pr5jhTamXm9s +85Tx9R9YcZtAAK67wd7U6ZqIOcr+J76G/xn2+gm6ASVRL4/ipETx9AFhdq8pG//w +sU/8zYCxOrnmqVI62sYaqx2m4m75IrnSdqR5ARKHc2U05zQq47xuMxSTIrC/dwKK +oyAlEFSe8Rw= +=mVfx +-----END PGP SIGNATURE----- + +--==_Exmh_1405404058P-- + + + +_______________________________________________ +Exmh-users mailing list +Exmh-users@redhat.com +https://listman.redhat.com/mailman/listinfo/exmh-users + + diff --git a/Ch3/datasets/spam/easy_ham/01184.d8c35f26c87d09b57575cd666070afd4 b/Ch3/datasets/spam/easy_ham/01184.d8c35f26c87d09b57575cd666070afd4 new file mode 100644 index 000000000..383aa32c3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01184.d8c35f26c87d09b57575cd666070afd4 @@ -0,0 +1,87 @@ +From rpm-list-admin@freshrpms.net Mon Sep 23 18:31:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2D99616F03 + for ; Mon, 23 Sep 2002 18:31:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:31:38 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NFtlC24231 for + ; Mon, 23 Sep 2002 16:55:47 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8NFo2f10170; Mon, 23 Sep 2002 17:50:02 + +0200 +Received: from mail.j2solutions.net (seattle.connectednw.com + [216.163.77.13]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g8NFnIf06795 for ; Mon, 23 Sep 2002 17:49:18 +0200 +Received: from yoda (12-231-69-107.client.attbi.com + [::ffff:12.231.69.107]) (AUTH: CRAM-MD5 hosting@j2solutions.net) by + mail.j2solutions.net with esmtp; Mon, 23 Sep 2002 08:49:17 -0700 +From: Jesse Keating +To: rpm-zzzlist@freshrpms.net +Subject: Re: sylpheed-claws +Message-Id: <20020923084711.79045d91.hosting@j2solutions.net> +In-Reply-To: <20020923174120.73573065.matthias@egwn.net> +References: <20020919221046.7484dec6.hosting@j2solutions.net> + <20020920104055.201c2986.matthias@rpmforge.net> + <20020923080924.27618d2b.hosting@j2solutions.net> + <20020923174120.73573065.matthias@egwn.net> +Organization: j2Solutions +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 23 Sep 2002 08:47:11 -0700 +Date: Mon, 23 Sep 2002 08:47:11 -0700 + +On Mon, 23 Sep 2002 17:41:20 +0200 +Matthias Saou wrote: + +# So did my build if the original source is what you were mentioning +# ;-) One drawback : They changed from pspell to aspell apparently, +# and it requires aspell >= 0.50 which isn't even in Rawhide, so spell +# checking is disabled for now until I take a decision about it :-/ + +OOps, I didn't see the webpage get updated. I saw the new claws, and +checked your site, forgot about it for half a day and then posted +here. You beat me once again! + +# If I build recent aspell packages, they may not be upgraded when +# ungrating to the next Red Hat Linux release (the final version of +# the limbos and(null) betas), which is maybe not really desired. I'll +# probably test and see... + +Oh yeah, I was following this thread in the sylpheed-claws list. Very +interesting stuff. I might have to stick w/ 0.8.2 until aspell gets +updated in Red Hat. + +-- +Jesse Keating +j2Solutions.net +Mondo DevTeam (www.mondorescue.org) + +Was I helpful? Let others know: + http://svcs.affero.net/rm.php?r=jkeating + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01185.14b996f1781bdf510f63de191373d517 b/Ch3/datasets/spam/easy_ham/01185.14b996f1781bdf510f63de191373d517 new file mode 100644 index 000000000..1e2fd82af --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01185.14b996f1781bdf510f63de191373d517 @@ -0,0 +1,89 @@ +From rpm-list-admin@freshrpms.net Mon Sep 23 18:31:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1C26216F03 + for ; Mon, 23 Sep 2002 18:31:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:31:41 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NFu4C24239 for + ; Mon, 23 Sep 2002 16:56:04 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8NFg1f01477; Mon, 23 Sep 2002 17:42:01 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8NFfRf01318 for + ; Mon, 23 Sep 2002 17:41:27 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: sylpheed-claws +Message-Id: <20020923174120.73573065.matthias@egwn.net> +In-Reply-To: <20020923080924.27618d2b.hosting@j2solutions.net> +References: <20020919221046.7484dec6.hosting@j2solutions.net> + <20020920104055.201c2986.matthias@rpmforge.net> + <20020923080924.27618d2b.hosting@j2solutions.net> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 23 Sep 2002 17:41:20 +0200 +Date: Mon, 23 Sep 2002 17:41:20 +0200 + +Once upon a time, Jesse wrote : + +> On Fri, 20 Sep 2002 10:40:55 +0200 +> Matthias Saou wrote: +> +> # But as it's the primary mailer I use, you can be sure that as soon +> # as it's updated to 0.8.3, I'll update my build! :-) +> +> It got updated (; + +So did my build if the original source is what you were mentioning ;-) +One drawback : They changed from pspell to aspell apparently, and it +requires aspell >= 0.50 which isn't even in Rawhide, so spell checking is +disabled for now until I take a decision about it :-/ + +If I build recent aspell packages, they may not be upgraded when ungrating +to the next Red Hat Linux release (the final version of the limbos and +(null) betas), which is maybe not really desired. I'll probably test and +see... + +Matthias + +PS: The spec file was massively updated and the --with / --without options +that can be used to rebuild the source packages are now listed in the +description ;-) + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01186.84abe104b1ba13a5fece47a170d5dbf1 b/Ch3/datasets/spam/easy_ham/01186.84abe104b1ba13a5fece47a170d5dbf1 new file mode 100644 index 000000000..f50b5a84a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01186.84abe104b1ba13a5fece47a170d5dbf1 @@ -0,0 +1,81 @@ +From rpm-list-admin@freshrpms.net Mon Sep 23 18:31:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7552016F03 + for ; Mon, 23 Sep 2002 18:31:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:31:50 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NG9XC24931 for + ; Mon, 23 Sep 2002 17:09:34 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8NG31f01901; Mon, 23 Sep 2002 18:03:01 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8NG2Mf28243 for + ; Mon, 23 Sep 2002 18:02:22 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: sylpheed-claws +Message-Id: <20020923180205.37d82e53.matthias@egwn.net> +In-Reply-To: <20020923084711.79045d91.hosting@j2solutions.net> +References: <20020919221046.7484dec6.hosting@j2solutions.net> + <20020920104055.201c2986.matthias@rpmforge.net> + <20020923080924.27618d2b.hosting@j2solutions.net> + <20020923174120.73573065.matthias@egwn.net> + <20020923084711.79045d91.hosting@j2solutions.net> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 23 Sep 2002 18:02:05 +0200 +Date: Mon, 23 Sep 2002 18:02:05 +0200 + +Once upon a time, Jesse wrote : + +> Oh yeah, I was following this thread in the sylpheed-claws list. Very +> interesting stuff. I might have to stick w/ 0.8.2 until aspell gets +> updated in Red Hat. + +Then this may be 6 months or more since my guess after 3 beta releases is +that the freeze on package versions for inclusion in the next stable +release (n+1) has already happened, thus you'll have to wait at least for +Red Hat Linux... n+2 :-) + +This is why (if it doesn't break anything), I'll maybe release recent +aspell packages. But to be sure I'll need to do some testing ;-) + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01187.26511acbd0a46e181d130e70080962f8 b/Ch3/datasets/spam/easy_ham/01187.26511acbd0a46e181d130e70080962f8 new file mode 100644 index 000000000..e4df88e91 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01187.26511acbd0a46e181d130e70080962f8 @@ -0,0 +1,98 @@ +From rpm-list-admin@freshrpms.net Mon Sep 23 22:46:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8151516F17 + for ; Mon, 23 Sep 2002 22:46:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:46:12 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NHvrC28415 for + ; Mon, 23 Sep 2002 18:57:53 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8NHk2f18832; Mon, 23 Sep 2002 19:46:02 + +0200 +Received: from interlize.com.br (interlize.com.br [200.244.92.2] (may be + forged)) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8NHibf12369 for + ; Mon, 23 Sep 2002 19:44:38 +0200 +Received: from [10.0.0.3] [200.173.221.24] by interlize.com.br + [200.244.92.2] with SMTP (MDaemon.PRO.v5.0.5.R) for + ; Mon, 23 Sep 2002 14:43:47 -0300 +Subject: Re: Should mplayer be build with Win32 codecs? +From: Ricardo Mota +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20020920181118.A17344@bonzo.nirvana> +References: <20020608213903.GA26452@krabat.physik.fu-berlin.de> + <20020920181118.A17344@bonzo.nirvana> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8.99 +Message-Id: <1032802765.9035.17.camel@Ricardo> +MIME-Version: 1.0 +X-Lookup-Warning: reverse lookup on original sender failed +X-Mdremoteip: 200.173.221.24 +X-Return-Path: ricardo@mdbcomunicacao.com.br +X-Mdaemon-Deliver-To: rpm-zzzlist@freshrpms.net +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +X-Reply-To: ricardo@mdbcomunicacao.com.br +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 23 Sep 2002 14:38:44 -0300 +Date: 23 Sep 2002 14:38:44 -0300 + + + +Hi, + +First you have to get the win32 files !!! +then , you configure using --enable_win32 + +On Fri, 2002-09-20 at 13:11, Axel Thimm wrote: +> Hi, +> +> has anyone an answer for me? The mplayer documentation still suggests to use +> them for x86 architectures. +> +> Thanks. :) +> +> Regards, Axel. +> +> On Sat, Jun 08, 2002 at 11:39:03PM +0200, Axel Thimm wrote: +> > Are there perhaps licensing issues, which forbid such a practice? Or any other +> > reasons? +> > +> > The reason I ask is that I have seen performance and also some feature +> > differences (fullscreen w/o keeping aspect ratio, visual artifacts on NVIDIA) +> > comparing with or without the Win32 codecs. The mplayer authors seem to +> > recommend using them for x86 architectures. +> > +> > Beware, I am no mplayer/codecs/whatever expert, I may be totally lost ... +> +> -- +> Axel.Thimm@physik.fu-berlin.de +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list +> + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01188.fc8b5d073a903f3de50d4b8e49457b9b b/Ch3/datasets/spam/easy_ham/01188.fc8b5d073a903f3de50d4b8e49457b9b new file mode 100644 index 000000000..f38a8d016 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01188.fc8b5d073a903f3de50d4b8e49457b9b @@ -0,0 +1,72 @@ +From rpm-list-admin@freshrpms.net Tue Sep 24 19:48:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A98EC16F03 + for ; Tue, 24 Sep 2002 19:48:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 19:48:34 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8OI3GC15695 for + ; Tue, 24 Sep 2002 19:03:17 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8OHx2f06770; Tue, 24 Sep 2002 19:59:02 + +0200 +Received: from yak.fluid.com + (IDENT:c3KwZIjjSfPfhCErniJnTbxW3U8s/NCK@yak.fluid.com [63.76.105.204]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8OHvjf28951 for + ; Tue, 24 Sep 2002 19:57:45 +0200 +Received: from lefty.fluid.com ([63.76.105.89]) by yak.fluid.com with + esmtp (Exim 4.10 #2) for rpm-list@freshrpms.net id 17tttq-0001RD-00; + Tue, 24 Sep 2002 10:55:06 -0700 +Message-Id: <3D90A792.6070307@fluid.com> +From: Troy Engel +Organization: Fluid +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: freshrpms +Subject: netatalk-1.5.5-1rh7 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +X-Reply-To: tengel@fluid.com +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 24 Sep 2002 10:57:38 -0700 +Date: Tue, 24 Sep 2002 10:57:38 -0700 + +Hi folks, I just uploaded RPMS of the new netatalk 1.5.5 released +yesterday, thought folks here might be interested. This release fixes a +nastygram in saving files via Illustrator that I personally have been +waiting for.... + + http://ftp.falsehope.com/home/tengel/netatalk/ + +(will be mirrored on rpmfind.net by tomorrow, usually). + +-te + +-- +Troy Engel, Systems Engineer +Cool as the other side of the pillow + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01189.cca889df55c39eb86b57501a014c3e59 b/Ch3/datasets/spam/easy_ham/01189.cca889df55c39eb86b57501a014c3e59 new file mode 100644 index 000000000..e2958ff5c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01189.cca889df55c39eb86b57501a014c3e59 @@ -0,0 +1,79 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 11:12:47 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B4E9016F17 + for ; Mon, 30 Sep 2002 11:12:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 11:12:32 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8SFlsg32445 for + ; Sat, 28 Sep 2002 16:47:54 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8SFj4f15417; Sat, 28 Sep 2002 17:45:04 + +0200 +Received: from urgent.rug.ac.be (urgent.rug.ac.be [157.193.88.1]) by + egwn.net (8.11.6/8.11.6/EGWN) with SMTP id g8SFhwf15033 for + ; Sat, 28 Sep 2002 17:43:58 +0200 +Received: (qmail 3757 invoked by uid 505); 28 Sep 2002 15:44:03 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 28 Sep 2002 15:44:03 -0000 +From: Thomas Vander Stichele +To: RPM-List@freshrpms.net +Subject: hi +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 28 Sep 2002 17:44:03 +0200 (CEST) +Date: Sat, 28 Sep 2002 17:44:03 +0200 (CEST) + +Hello, + +I'm new to the list. +I wanted to find out who tried recompiling a working apt rpm for (null) or +psyche. I would like to get good GStreamer packages done by monday when +it's released. + +BTW, in the archive I saw some posts regarding the GStreamer repository. +I'm not sure why they were posted on this list ;) In any case, I'm the rpm +maintainer, so if you have any questions, feel free to ask. + +I was trying to get an updated apt rpm from http://dave.cridland.net/, but +the http port is closed. Dave, if you're reading this, please let me know +where I can get the updated rpm. + +Thanks, +Thomas + +-- + +The Dave/Dina Project : future TV today ! - http://davedina.apestaart.org/ +<-*- -*-> +Just like you said +you leave my life +I'm better off dead +<-*- thomas@apestaart.org -*-> +URGent, the best radio on the Internet - 24/7 ! - http://urgent.rug.ac.be/ + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01190.9f9b5b58c404059cc3cc6e20ee4bbe6f b/Ch3/datasets/spam/easy_ham/01190.9f9b5b58c404059cc3cc6e20ee4bbe6f new file mode 100644 index 000000000..1cbd0e691 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01190.9f9b5b58c404059cc3cc6e20ee4bbe6f @@ -0,0 +1,81 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 11:13:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0CF3616F03 + for ; Mon, 30 Sep 2002 11:13:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 11:13:05 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8SGgAg01340 for + ; Sat, 28 Sep 2002 17:42:10 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8SGd2f02772; Sat, 28 Sep 2002 18:39:02 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g8SGc0f02462 for ; Sat, 28 Sep 2002 18:38:00 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: hi +Message-Id: <20020928183754.13ba9173.matthias@egwn.net> +In-Reply-To: +References: +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 28 Sep 2002 18:37:54 +0200 +Date: Sat, 28 Sep 2002 18:37:54 +0200 + +Once upon a time, Thomas wrote : + +> I wanted to find out who tried recompiling a working apt rpm for (null) +> or psyche. I would like to get good GStreamer packages done by monday +> when it's released. + +I have a working apt 0.5.4cnc7 package for Red Hat Linux 8.0. It will be +available at the same second the distribution will, and so will a complete +apt repository already including quite a few of my packages updated for Red +Hat Linux 8.0. + +I didn't want to say all this before Monday, but as the new release already +leaked from many places, and official statements made about it, it +shouldn't be a big deal :-/ + +I'll keep you all posted on Monday! They'll even be a big apt-related +surprise! ;-)))) + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01191.07778802f15f6579b274b85a867ebde6 b/Ch3/datasets/spam/easy_ham/01191.07778802f15f6579b274b85a867ebde6 new file mode 100644 index 000000000..ab5cf2882 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01191.07778802f15f6579b274b85a867ebde6 @@ -0,0 +1,107 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 13:39:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9FE9B16F03 + for ; Mon, 30 Sep 2002 13:39:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:39:41 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8THYNg21297 for + ; Sun, 29 Sep 2002 18:34:23 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8THV5f02629; Sun, 29 Sep 2002 19:31:05 + +0200 +Received: from urgent.rug.ac.be (urgent.rug.ac.be [157.193.88.1]) by + egwn.net (8.11.6/8.11.6/EGWN) with SMTP id g8THTwf31620 for + ; Sun, 29 Sep 2002 19:29:58 +0200 +Received: (qmail 17426 invoked by uid 505); 29 Sep 2002 17:29:58 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 29 Sep 2002 17:29:58 -0000 +From: Thomas Vander Stichele +To: gstreamer-devel@example.sourceforge.net +Cc: RPM-List@freshrpms.net +Subject: Red Hat 8.0 +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 29 Sep 2002 19:29:58 +0200 (CEST) +Date: Sun, 29 Sep 2002 19:29:58 +0200 (CEST) + +Hi, + +Red Hat 8.0 is released tomorrow (monday). I took some time out to make +RPMs of GStreamer for it. + +All of them (core, plugins and player) have been uploaded to the apt +repository in a new "redhat-80-i386" directory. + +The repository for dependencies is again called "deps", and the one for +the gstreamer rpms is "redhat", because this time around the base distro +contains all the necessary packages. + +A screenshot of Red Hat 8.0 running gst-player is up at +http://thomas.apestaart.org/download/screenshots/redhat-80-gst-player.png + + +Here are some known issues with the resulting rpms : + +a) gstreamer-nautilus isn't built, the package got renamed and I don't +have a -devel package for it yet + +b) the c++ plugins have problems which I haven't been able to resolve. +Here are the errors: + +INFO (15299: 0)gst_xml_registry_rebuild:1555: Plugin +/usr/lib/gst/libgstwincodec.so failed to load: Error loading plugin +/usr/lib/gst/libgstwincodec.so, reason: /usr/lib/libaviplay-0.7.so.0: +undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE + +Plugin /usr/lib/gst/libgstwincodec.so failed to load +DEBUG(15299: 0)gst_plugin_load_plugin:161: attempt to load plugin +"/usr/lib/gst/libgstmodplug.so" +INFO (15299: 0)gst_xml_registry_rebuild:1555: Plugin +/usr/lib/gst/libgstmodplug.so failed to load: Error loading plugin +/usr/lib/gst/libgstmodplug.so, reason: /usr/lib/gst/libgstmodplug.so: +undefined symbol: __gxx_personality_v0 + +I'm not sure how to fix this; running strings on the libs in /usr/lib +reveals that there are other libs that have these symbols, so there must +be something straightforward that should fix this. +If anyone has a suggestion, please share ;) + +Thomas + +-- + +The Dave/Dina Project : future TV today ! - http://davedina.apestaart.org/ +<-*- -*-> +Kiss me please kiss me +Kiss me out of desire baby not consolation +Oh you know it makes me so angry cause I know that in time +I'll only make you cry +<-*- thomas@apestaart.org -*-> +URGent, the best radio on the Internet - 24/7 ! - http://urgent.rug.ac.be/ + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01192.bf5336caa5be79062f70233fa759a1b8 b/Ch3/datasets/spam/easy_ham/01192.bf5336caa5be79062f70233fa759a1b8 new file mode 100644 index 000000000..8e3e12b18 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01192.bf5336caa5be79062f70233fa759a1b8 @@ -0,0 +1,82 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 13:40:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8783016F03 + for ; Mon, 30 Sep 2002 13:40:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:40:04 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8TJ20g24304 for + ; Sun, 29 Sep 2002 20:02:00 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8TIw2f01446; Sun, 29 Sep 2002 20:58:02 + +0200 +Received: from urgent.rug.ac.be (urgent.rug.ac.be [157.193.88.1]) by + egwn.net (8.11.6/8.11.6/EGWN) with SMTP id g8TIvff31540 for + ; Sun, 29 Sep 2002 20:57:41 +0200 +Received: (qmail 23771 invoked by uid 505); 29 Sep 2002 18:57:40 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 29 Sep 2002 18:57:40 -0000 +From: Thomas Vander Stichele +To: ERDI Gergo +Cc: gstreamer-devel@example.sourceforge.net, +Subject: Re: [gst-devel] Red Hat 8.0 +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 29 Sep 2002 20:57:40 +0200 (CEST) +Date: Sun, 29 Sep 2002 20:57:40 +0200 (CEST) + +Hi, + +> On Sun, 29 Sep 2002, Thomas Vander Stichele wrote: +> +> > INFO (15299: 0)gst_xml_registry_rebuild:1555: Plugin +> > /usr/lib/gst/libgstwincodec.so failed to load: Error loading plugin +> > /usr/lib/gst/libgstwincodec.so, reason: /usr/lib/libaviplay-0.7.so.0: +> > undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE + +> Are you using the same version of GCC to compile the plugin as its C++ +> dependencies? + +Yes, I am. Everything is built inside a chroot. I think it isn't linking +to a lib somewhere, I'm just not sure what lib it should preloading here. +Anyway to find out which one it is ? + +Thomas + + -- + +The Dave/Dina Project : future TV today ! - http://davedina.apestaart.org/ +<-*- -*-> +You came in just like smoke +With a little come on come on +come on in your walk +come on +<-*- thomas@apestaart.org -*-> +URGent, the best radio on the Internet - 24/7 ! - http://urgent.rug.ac.be/ + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01193.5b3aa2609dfb823e754b1407d451f97f b/Ch3/datasets/spam/easy_ham/01193.5b3aa2609dfb823e754b1407d451f97f new file mode 100644 index 000000000..0b66db41d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01193.5b3aa2609dfb823e754b1407d451f97f @@ -0,0 +1,84 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 13:40:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1E93F16F16 + for ; Mon, 30 Sep 2002 13:40:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:40:11 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8TJLAg24932 for + ; Sun, 29 Sep 2002 20:21:10 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8TJI1f01022; Sun, 29 Sep 2002 21:18:01 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g8TJGaf29909 for ; Sun, 29 Sep 2002 21:16:36 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: [gst-devel] Red Hat 8.0 +Message-Id: <20020929211630.28e45f73.matthias@egwn.net> +In-Reply-To: +References: + +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 29 Sep 2002 21:16:30 +0200 +Date: Sun, 29 Sep 2002 21:16:30 +0200 + +Once upon a time, Thomas wrote : + +> > On Sun, 29 Sep 2002, Thomas Vander Stichele wrote: +> > +> > > INFO (15299: 0)gst_xml_registry_rebuild:1555: Plugin +> > > /usr/lib/gst/libgstwincodec.so failed to load: Error loading plugin +> > > /usr/lib/gst/libgstwincodec.so, reason: /usr/lib/libaviplay-0.7.so.0: +> > > +> > > undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE +> +> > Are you using the same version of GCC to compile the plugin as its C++ +> > dependencies? +> +> Yes, I am. Everything is built inside a chroot. I think it isn't +> linking to a lib somewhere, I'm just not sure what lib it should +> preloading here. Anyway to find out which one it is ? + +Looks like a problem with the avifile you've rebuilt... I've been unable to +recompile successfully the latest version on 8.0 :-/ + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01194.222c2f540913589b180c35e7034fa5ee b/Ch3/datasets/spam/easy_ham/01194.222c2f540913589b180c35e7034fa5ee new file mode 100644 index 000000000..46871a35e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01194.222c2f540913589b180c35e7034fa5ee @@ -0,0 +1,90 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 13:40:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 89F5D16F17 + for ; Mon, 30 Sep 2002 13:40:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:40:14 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8TJgPg25539 for + ; Sun, 29 Sep 2002 20:42:25 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8TJd1f10034; Sun, 29 Sep 2002 21:39:01 + +0200 +Received: from urgent.rug.ac.be (urgent.rug.ac.be [157.193.88.1]) by + egwn.net (8.11.6/8.11.6/EGWN) with SMTP id g8TJcef09964 for + ; Sun, 29 Sep 2002 21:38:40 +0200 +Received: (qmail 26731 invoked by uid 505); 29 Sep 2002 19:38:46 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 29 Sep 2002 19:38:46 -0000 +From: Thomas Vander Stichele +To: rpm-zzzlist@freshrpms.net +Subject: Re: [gst-devel] Red Hat 8.0 +In-Reply-To: <20020929211630.28e45f73.matthias@egwn.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 29 Sep 2002 21:38:46 +0200 (CEST) +Date: Sun, 29 Sep 2002 21:38:46 +0200 (CEST) + +> > > > INFO (15299: 0)gst_xml_registry_rebuild:1555: Plugin +> > > > /usr/lib/gst/libgstwincodec.so failed to load: Error loading plugin +> > > > /usr/lib/gst/libgstwincodec.so, reason: /usr/lib/libaviplay-0.7.so.0: +> > > > +> > > > undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE +> > +> > > Are you using the same version of GCC to compile the plugin as its C++ +> > > dependencies? +> > +> > Yes, I am. Everything is built inside a chroot. I think it isn't +> > linking to a lib somewhere, I'm just not sure what lib it should +> > preloading here. Anyway to find out which one it is ? +> +> Looks like a problem with the avifile you've rebuilt... I've been unable to +> recompile successfully the latest version on 8.0 :-/ + +Hm, it is built inside the same chroot. aviplay works (well it would if I +had XV, I get X errors ;)). But it doesn't complain about linker +problems. So I suppose my avifile library on itself is compiled ok. + +Sigh, avifile is one of the worst packages out there, in all aspects - +naming of tarballs, not ever releasing an actual package, versioning of +libraries, API stability, ... + +Thomas + + -- + +The Dave/Dina Project : future TV today ! - http://davedina.apestaart.org/ +<-*- -*-> +cos when i needed someone +you left me floored +the feeling is gone +i can't let go +you know that i'd change if i had the love it takes +<-*- thomas@apestaart.org -*-> +URGent, the best radio on the Internet - 24/7 ! - http://urgent.rug.ac.be/ + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01195.a22a2504bafda16790a70217d253e770 b/Ch3/datasets/spam/easy_ham/01195.a22a2504bafda16790a70217d253e770 new file mode 100644 index 000000000..05d318cef --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01195.a22a2504bafda16790a70217d253e770 @@ -0,0 +1,69 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 13:43:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B5EE816F16 + for ; Mon, 30 Sep 2002 13:43:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:43:30 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8U7Fgg19934 for + ; Mon, 30 Sep 2002 08:15:42 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8U7C2f06874; Mon, 30 Sep 2002 09:12:02 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8U7BKf05467 + for ; Mon, 30 Sep 2002 09:11:20 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17vujG-00018Z-00 for rpm-list@freshrpms.net; + Mon, 30 Sep 2002 03:12:30 -0400 +X-Originating-Ip: [66.44.40.158] +From: "" Angles " Puglisi" +To: rpm-zzzlist@freshrpms.net +Subject: Re: New testing packages +Message-Id: <20020930.bp5.07787800@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 07:14:31 +0000 +Date: Mon, 30 Sep 2002 07:14:31 +0000 + +Peter Peltonen (peter.peltonen@iki.fi) wrote*: +>BTW: I just a found a quite nice looking apt repositry for +>all kinds of audio apps at +> +>http://ccrma-www.stanford.edu/planetccrma/software/ +> + +_Very_ comprehensive audio app collection, Thanks. + +-- +That's "angle" as in geometry. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01196.bed50a1e10eb99f9ef1dbefa84c54731 b/Ch3/datasets/spam/easy_ham/01196.bed50a1e10eb99f9ef1dbefa84c54731 new file mode 100644 index 000000000..02b83a1c8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01196.bed50a1e10eb99f9ef1dbefa84c54731 @@ -0,0 +1,82 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 13:44:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BFAF016F16 + for ; Mon, 30 Sep 2002 13:44:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:44:26 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8U9Fgg24174 for + ; Mon, 30 Sep 2002 10:15:42 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8U9C1f29896; Mon, 30 Sep 2002 11:12:01 + +0200 +Received: from mailout11.sul.t-online.com (mailout11.sul.t-online.com + [194.25.134.85]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g8U9BZf29771 for ; Mon, 30 Sep 2002 11:11:35 +0200 +Received: from fwd03.sul.t-online.de by mailout11.sul.t-online.com with + smtp id 17vwaU-0002CP-00; Mon, 30 Sep 2002 11:11:34 +0200 +Received: from puariko.homeip.net (520039812576-0001@[217.231.242.136]) by + fmrl03.sul.t-online.com with esmtp id 17vwaK-02QgngC; Mon, 30 Sep 2002 + 11:11:24 +0200 +From: Axel Thimm +To: rpm-zzzlist@freshrpms.net +Subject: Re: All set for Red Hat Linux 8.0 +Message-Id: <20020930111121.B14995@bonzo.nirvana> +References: <20020930092826.7c8f5791.matthias@rpmforge.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <20020930092826.7c8f5791.matthias@rpmforge.net>; + from matthias@rpmforge.net on Mon, Sep 30, 2002 at 09:28:26AM +0200 +X-Sender: 520039812576-0001@t-dialin.net +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 11:11:21 +0200 +Date: Mon, 30 Sep 2002 11:11:21 +0200 + +Matthias, + +On Mon, Sep 30, 2002 at 09:28:26AM +0200, Matthias Saou wrote: +> All freshrpms.net is now set for the imminent release of Red Hat Linux 8.0. + +thanks a lot for all your effords! It is just great! + +> I'll probably post to the list once I open up ftp.freshrpms.net so you can +> be the first ones to get in and download, although I doubt you'll have +> trouble finding access to at least one fast mirror using my mirror list. + +You mean the mirror list for RH8.0, or do there exist mirrors for your apt +repo? + +On Sat, Sep 28, 2002 at 06:37:54PM +0200, Matthias Saou wrote: +> I'll keep you all posted on Monday! They'll even be a big apt-related +> surprise! ;-)))) + +Was this the surprise, or will there be even more (where are my heart pills)? ;) + +Thanks Matthias! +-- +Axel.Thimm@physik.fu-berlin.de + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01197.4296fdc3b52c7a52d5373d5bc2205e69 b/Ch3/datasets/spam/easy_ham/01197.4296fdc3b52c7a52d5373d5bc2205e69 new file mode 100644 index 000000000..7cd771747 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01197.4296fdc3b52c7a52d5373d5bc2205e69 @@ -0,0 +1,76 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 13:44:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 89F7516F16 + for ; Mon, 30 Sep 2002 13:44:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 13:44:33 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8U9nOg25251 for + ; Mon, 30 Sep 2002 10:49:24 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8U9l1f25850; Mon, 30 Sep 2002 11:47:01 + +0200 +Received: from drone5.qsi.net.nz (drone5-svc-skyt.qsi.net.nz + [202.89.128.5]) by egwn.net (8.11.6/8.11.6/EGWN) with SMTP id g8U9kSf25471 + for ; Mon, 30 Sep 2002 11:46:29 +0200 +Received: (qmail 31568 invoked by uid 0); 30 Sep 2002 09:46:20 -0000 +Received: from unknown (HELO se7en.org) ([202.89.145.8]) (envelope-sender + ) by 0 (qmail-ldap-1.03) with SMTP for + ; 30 Sep 2002 09:46:20 -0000 +Received: from spawn.se7en.org ([10.0.0.3]) by se7en.org with esmtp (Exim + 3.35 #1 (Debian)) id 17wBPi-00089D-00 for ; + Tue, 01 Oct 2002 13:01:26 +1200 +From: Mark Derricutt +To: rpm-zzzlist@freshrpms.net +Subject: Re: New testing packages +Message-Id: <2740000.1033379168@spawn.se7en.org> +In-Reply-To: <20020930.bp5.07787800@www.dudex.net> +References: <20020930.bp5.07787800@www.dudex.net> +X-Mailer: Mulberry/2.2.1 (Linux/x86) +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Content-Disposition: inline +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 21:46:08 +1200 +Date: Mon, 30 Sep 2002 21:46:08 +1200 + +Indeed - I was thinking of getting back into doing mods - nice to see an +apt-get'able soundtracker there :-) + +Anyone know where to get a good selection of samples/loops? + +--On Monday, September 30, 2002 07:14:31 +0000 Angles Puglisi + wrote: + +> _Very_ comprehensive audio app collection, Thanks. + + + + -- \m/ -- + "...if I seem super human I have been misunderstood." (c) Dream Theater + mark@talios.com - ICQ: 1934853 JID: talios@myjabber.net + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01198.7d3088654bb7b2cb0796da65b8c71247 b/Ch3/datasets/spam/easy_ham/01198.7d3088654bb7b2cb0796da65b8c71247 new file mode 100644 index 000000000..13e2732e2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01198.7d3088654bb7b2cb0796da65b8c71247 @@ -0,0 +1,116 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 21:44:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 27BD316F16 + for ; Mon, 30 Sep 2002 21:44:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 21:44:09 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8UJ42K12271 for + ; Mon, 30 Sep 2002 20:04:03 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8UIv8f11402; Mon, 30 Sep 2002 20:57:08 + +0200 +Received: from mail.aspect.net + (postfix@adsl-65-69-210-161.dsl.hstntx.swbell.net [65.69.210.161]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8UIuQf10100 for + ; Mon, 30 Sep 2002 20:56:28 +0200 +Received: from jabber.org (SKADI.WV.CC.cmu.edu [128.2.72.29]) by + mail.aspect.net (Postfix) with ESMTP id C76E822B13 for + ; Mon, 30 Sep 2002 13:48:02 -0500 (CDT) +Subject: Re: All set for Red Hat Linux 8.0 +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v546) +From: Julian Missig +To: rpm-zzzlist@freshrpms.net +Content-Transfer-Encoding: 7bit +In-Reply-To: <20020930092826.7c8f5791.matthias@rpmforge.net> +Message-Id: <377FE45E-D4A6-11D6-A377-000393D60714@jabber.org> +X-Mailer: Apple Mail (2.546) +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 14:55:41 -0400 +Date: Mon, 30 Sep 2002 14:55:41 -0400 + +I would appreciate it if you could get Gabber packages for Red Hat 8. I +will be making a new release soon, but even in the meantime, 0.8.7 +packages would be ok. + +I know that in the beta, red hat was using a modified version of +gnome-libs which is incompatible with the latest gnomemm. If this is +still the case in 8, I can send you a patch which makes gnomemm work +again... + +Julian + +On Monday, Sep 30, 2002, at 03:28 US/Eastern, Matthias Saou wrote: + +> Hi all, +> +> All freshrpms.net is now set for the imminent release of Red Hat Linux +> 8.0. +> The whole release process is a lot less secret as usual since there +> have +> been some leaks, including a mirror purposely wide open :-( +> +> See this article about the release and the leaks : +> http://news.com.com/2100-1001-959434.html?tag=fd_top +> +> As it's no secret anymore, the files will be available today (morning +> for +> you Americans, afternoon for us Europeans), and to go with them, there +> are +> already quite a few freshrpms.net packages ready! +> +> Mirror list for download (they're not open yet) : +> http://freshrpms.net/mirrors/psyche.html +> +> New freshrpms.net package list : +> http://psyche.freshrpms.net/ +> +> Of course, apt is also available (now version 0.5.4!) and fully +> tested. If +> you like apt for your desktop machines, I also recommend checking out +> the +> new "synaptic" package as it has now been ported to gtk+ and blends +> perfectly into the distribution! +> +> I'll probably post to the list once I open up ftp.freshrpms.net so you +> can +> be the first ones to get in and download, although I doubt you'll have +> trouble finding access to at least one fast mirror using my mirror +> list. +> +> Have fun with Psyche! +> Matthias +> +> -- +> Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +> Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +> Load : 0.16 0.18 0.17 +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01199.59f410d0b6c37510d6a29d0d02f62101 b/Ch3/datasets/spam/easy_ham/01199.59f410d0b6c37510d6a29d0d02f62101 new file mode 100644 index 000000000..37a528b4e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01199.59f410d0b6c37510d6a29d0d02f62101 @@ -0,0 +1,66 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 21:44:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D361816F16 + for ; Mon, 30 Sep 2002 21:44:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 21:44:22 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8UJbAK13176 for + ; Mon, 30 Sep 2002 20:37:11 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8UJY1f10815; Mon, 30 Sep 2002 21:34:01 + +0200 +Received: from mail.addix.net (kahless.addix.net [195.179.139.19]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8UJXMf08732 for + ; Mon, 30 Sep 2002 21:33:22 +0200 +Received: from kushana.camperquake.de (kushana.camperquake.de + [194.64.167.57]) by mail.addix.net (8.9.3/8.9.3) with ESMTP id VAA15220 + for ; Mon, 30 Sep 2002 21:33:22 +0200 +Received: from nausicaa.camperquake.de ([194.64.167.58] helo=nausicaa) by + kushana.camperquake.de with smtp (Exim 3.36 #1) id 17w6Un-0005P1-00 for + rpm-list@freshrpms.net; Mon, 30 Sep 2002 21:46:21 +0200 +From: Ralf Ertzinger +To: rpm-zzzlist@freshrpms.net +Subject: apt 0.5.7 on RH 7.x +Message-Id: <20020930214204.5d631f5b.ralf@camperquake.de> +Organization: [NDC] ;) +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 21:42:04 +0200 +Date: Mon, 30 Sep 2002 21:42:04 +0200 + +Hi. + +Are there any reasons _not_ to use the new apt releases on RH 7.x? + +-- +reiserfsck ist bekannt dafür, daß es leere Dateisysteme zurückläßt. +Gut, formaljuristisch hat er das Dateisystem in einen wohldefinierten +Zustand versetzt, aber ... nunja. Man erwartet schon irgendwie, daß +noch ein paar Daten drauf sind danach. -- Felix v. Leitner, dasr + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01200.fabbc41326c88fd504ae20791dcc3aaf b/Ch3/datasets/spam/easy_ham/01200.fabbc41326c88fd504ae20791dcc3aaf new file mode 100644 index 000000000..370308123 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01200.fabbc41326c88fd504ae20791dcc3aaf @@ -0,0 +1,100 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 21:44:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CDC4D16F16 + for ; Mon, 30 Sep 2002 21:44:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 21:44:28 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8UJwYK13802 for + ; Mon, 30 Sep 2002 20:58:34 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8UJq2f32440; Mon, 30 Sep 2002 21:52:02 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g8UJp9f28623; Mon, 30 Sep 2002 21:51:09 +0200 +From: Matthias Saou +To: Hesty P +Cc: RPM-List +Subject: Re: ALSA Problem with Null kernel +Message-Id: <20020930215046.108ba76f.matthias@egwn.net> +In-Reply-To: <20020930191916.67869.qmail@web20510.mail.yahoo.com> +References: <20020930203145.570e6717.matthias@egwn.net> + <20020930191916.67869.qmail@web20510.mail.yahoo.com> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 21:50:46 +0200 +Date: Mon, 30 Sep 2002 21:50:46 +0200 + +Once upon a time, Hesty wrote : + +> I know they're all included in the freshrpms alsa-null +> directory. + +Now that Psyche is released, that directory was erased. + +> I was worried that with the new mplayer-pre8, these +> packages might break something. Is there any mplayer +> package which includes all the options for -vo and +> -ao? Is that because alsa is not included in RH, hence +> the lack of alsa option for mplayer from freshrpms? +> Or is there some swtiches to enable these options +> during +> rpm build? + +For all my recent packages that support --with and --without options, I've +put them in the %description section. See for instance : +http://psyche.freshrpms.net/rpm.html?id=80 + +Where you can see : +Available rpmbuild rebuild options : +--with : alsa +--without : aalib lirc libdv arts + +The ogle package has also a --with alsa option, and I've had a bug report +about xine that I apparently unintentionally compiled with ALSA directly +:-/ + +I'd like to aks this on the rpm-zzzlist : Would a new dependency of 250k, the +alsa-lib package, for many packages (mplayer, ogle, xine) be a problem for +the freshrpms.net packages users? As I really feel like blending ALSA in +now, especially since I've just spent some time recompiling alsa-kernel +package for all the Psyche kernels!!! + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01201.2da17f4409568ea3fad63130544ede70 b/Ch3/datasets/spam/easy_ham/01201.2da17f4409568ea3fad63130544ede70 new file mode 100644 index 000000000..0f4d5a933 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01201.2da17f4409568ea3fad63130544ede70 @@ -0,0 +1,78 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 21:44:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CF3B516F16 + for ; Mon, 30 Sep 2002 21:44:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 21:44:36 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8UK9AK14335 for + ; Mon, 30 Sep 2002 21:09:10 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8UK12f08852; Mon, 30 Sep 2002 22:01:02 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g8UK0ff08771 for ; Mon, 30 Sep 2002 22:00:41 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: apt 0.5.7 on RH 7.x +Message-Id: <20020930220002.15c18770.matthias@egwn.net> +In-Reply-To: <20020930214204.5d631f5b.ralf@camperquake.de> +References: <20020930214204.5d631f5b.ralf@camperquake.de> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 22:00:02 +0200 +Date: Mon, 30 Sep 2002 22:00:02 +0200 + +Once upon a time, Ralf wrote : + +> Are there any reasons _not_ to use the new apt releases on RH 7.x? + +Hmmm... I don't see any :-) + +My main concern is that when rebuilding the recent packages I've made for +Psyche on Valhalla, I'd need to lower the "Release:" tag (to keep an +upgrade working), and that would f*ck up my CVS repository which is on my +Valhalla box (well, I'm exagerating, It'll just make it more difficult for +me) ;-) +Sure, there are easy ways around this, but the easiest for me will be to +wait until I upgrade my main box to Psyche and have Valhalla only on a +secondary rebuild system. + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01202.9fe368b4f333335b31d0d5ede2db37ee b/Ch3/datasets/spam/easy_ham/01202.9fe368b4f333335b31d0d5ede2db37ee new file mode 100644 index 000000000..9d801b62e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01202.9fe368b4f333335b31d0d5ede2db37ee @@ -0,0 +1,72 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 21:45:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 50DD116F17 + for ; Mon, 30 Sep 2002 21:44:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 21:44:52 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8UKZMK14990 for + ; Mon, 30 Sep 2002 21:35:22 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8UKW0f18124; Mon, 30 Sep 2002 22:32:00 + +0200 +Received: from mail.addix.net (kahless.addix.net [195.179.139.19]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8UKUuf14294 for + ; Mon, 30 Sep 2002 22:30:56 +0200 +Received: from kushana.camperquake.de (kushana.camperquake.de + [194.64.167.57]) by mail.addix.net (8.9.3/8.9.3) with ESMTP id WAA16476 + for ; Mon, 30 Sep 2002 22:30:56 +0200 +Received: from nausicaa.camperquake.de ([194.64.167.58] helo=nausicaa) by + kushana.camperquake.de with smtp (Exim 3.36 #1) id 17w7Om-0005by-00 for + rpm-list@freshrpms.net; Mon, 30 Sep 2002 22:44:12 +0200 +From: Ralf Ertzinger +To: rpm-zzzlist@freshrpms.net +Subject: Re: apt 0.5.7 on RH 7.x +Message-Id: <20020930223956.6c06655a.ralf@camperquake.de> +In-Reply-To: <20020930220002.15c18770.matthias@egwn.net> +References: <20020930214204.5d631f5b.ralf@camperquake.de> + <20020930220002.15c18770.matthias@egwn.net> +Organization: [NDC] ;) +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 22:39:56 +0200 +Date: Mon, 30 Sep 2002 22:39:56 +0200 + +Hi. + +Matthias Saou wrote: +> My main concern is that when rebuilding the recent packages I've made +> for Psyche on Valhalla, I'd need to lower the "Release:" tag (to keep an +> upgrade working), and that would f*ck up my CVS repository which is on +> my Valhalla box + +Sorry, I don't get it. What's wrong with a release tag of fr1? + +-- +Do I look like a freakin' people person? + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01203.a19fd2f1ffc3d70528bd30e76a7e35d5 b/Ch3/datasets/spam/easy_ham/01203.a19fd2f1ffc3d70528bd30e76a7e35d5 new file mode 100644 index 000000000..4442e0406 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01203.a19fd2f1ffc3d70528bd30e76a7e35d5 @@ -0,0 +1,83 @@ +From rpm-list-admin@freshrpms.net Mon Sep 30 21:45:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 927D716F18 + for ; Mon, 30 Sep 2002 21:44:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 21:44:54 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8UKZvK14996 for + ; Mon, 30 Sep 2002 21:35:58 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8UKY0f21878; Mon, 30 Sep 2002 22:34:00 + +0200 +Received: from yak.fluid.com + (IDENT:FaR+u/czYnH31lnslYs4cinDam/Ze0D5@yak.fluid.com [63.76.105.204]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8UKXHf18283 for + ; Mon, 30 Sep 2002 22:33:17 +0200 +Received: from lefty.fluid.com ([63.76.105.89]) by yak.fluid.com with + esmtp (Exim 4.10 #2) for rpm-list@freshrpms.net id 17w7BJ-0005bh-00; + Mon, 30 Sep 2002 13:30:17 -0700 +Message-Id: <3D98B507.1080608@fluid.com> +From: Troy Engel +Organization: Fluid +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: ALSA Problem with Null kernel +References: <20020930203145.570e6717.matthias@egwn.net> + <20020930191916.67869.qmail@web20510.mail.yahoo.com> + <20020930215046.108ba76f.matthias@egwn.net> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +X-Reply-To: tengel@fluid.com +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 13:33:11 -0700 +Date: Mon, 30 Sep 2002 13:33:11 -0700 + +Matthias Saou wrote: +> +> I'd like to aks this on the rpm-zzzlist : Would a new dependency of 250k, the +> alsa-lib package, for many packages (mplayer, ogle, xine) be a problem for +> the freshrpms.net packages users? As I really feel like blending ALSA in +> now, especially since I've just spent some time recompiling alsa-kernel +> package for all the Psyche kernels!!! + +I don't know a lot about ALSA, but use custom kernels for many of the +machines -- would this mean, in order to get mplayer (eg) to work, I'd +first have to compile a custom kernel option? or kernel module? Since I +wouldn't have your alsa-kernel(??) installed, would that mean alsa-libs +and so on won't install? + +(I guess, in short, if it *requires* the shipped kernel to be used, I'd +be against --with-alsa as a default?) + +-te + +-- +Troy Engel, Systems Engineer +Cool as the other side of the pillow + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01204.023682c9961ab23115eef87bb1e15e31 b/Ch3/datasets/spam/easy_ham/01204.023682c9961ab23115eef87bb1e15e31 new file mode 100644 index 000000000..49f8ccb7c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01204.023682c9961ab23115eef87bb1e15e31 @@ -0,0 +1,102 @@ +From rpm-list-admin@freshrpms.net Tue Oct 1 10:32:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9CD7A16F03 + for ; Tue, 1 Oct 2002 10:32:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:32:52 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8UKu6K15698 for + ; Mon, 30 Sep 2002 21:56:09 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8UKr2f11316; Mon, 30 Sep 2002 22:53:02 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g8UKqGf11224; Mon, 30 Sep 2002 22:52:16 +0200 +From: Matthias Saou +To: Hesty P +Cc: RPM-List +Subject: Re: ALSA Problem with Null kernel +Message-Id: <20020930225131.5fe5aa07.matthias@egwn.net> +In-Reply-To: <20020930203212.61851.qmail@web20512.mail.yahoo.com> +References: <20020930215046.108ba76f.matthias@egwn.net> + <20020930203212.61851.qmail@web20512.mail.yahoo.com> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 22:51:31 +0200 +Date: Mon, 30 Sep 2002 22:51:31 +0200 + +Once upon a time, Hesty wrote : + +> > Where you can see : +> > Available rpmbuild rebuild options : +> > --with : alsa +> > --without : aalib lirc libdv arts +> +> Does this mean when rebuilding the package, I'll +> simply +> type: +> > rpmbuild --rebuild .src.rpm --with alsa ? + +Yes it does. And if you're missing the dependencies needed for the selected +options, you'll even be informed! (for ALSA, you'll need alsa-lib-devel for +example) + +> > I'd like to aks this on the rpm-zzzlist : Would a new +> > dependency of 250k, the +> > alsa-lib package, for many packages (mplayer, ogle, +> > xine) be a problem for +> > the freshrpms.net packages users? As I really feel +> > like blending ALSA in +> > now, especially since I've just spent some time +> > recompiling alsa-kernel +> > package for all the Psyche kernels!!! +> > +> +> I'll have no problem at all with this and you get my +> vote on this one. +> +> One problem with alsa-kernel that I've experienced: +> everytime RH issues a new kernel update, I have to +> rebuild my alsa-kernel to match the new kernel. + +Yup... unfortunately the alsa-kernel needs to be rebuilt for each kernel, +and there's no way of avoiding it. + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01205.e3401c959bace9b175eba8c24da908d2 b/Ch3/datasets/spam/easy_ham/01205.e3401c959bace9b175eba8c24da908d2 new file mode 100644 index 000000000..683a08128 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01205.e3401c959bace9b175eba8c24da908d2 @@ -0,0 +1,75 @@ +From rpm-list-admin@freshrpms.net Tue Oct 1 10:33:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B781516F16 + for ; Tue, 1 Oct 2002 10:33:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:33:15 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8ULnGK17319 for + ; Mon, 30 Sep 2002 22:49:16 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8ULk1f28682; Mon, 30 Sep 2002 23:46:01 + +0200 +Received: from mail.addix.net (kahless.addix.net [195.179.139.19]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8ULj2f23773 for + ; Mon, 30 Sep 2002 23:45:02 +0200 +Received: from kushana.camperquake.de (kushana.camperquake.de + [194.64.167.57]) by mail.addix.net (8.9.3/8.9.3) with ESMTP id XAA17900 + for ; Mon, 30 Sep 2002 23:44:32 +0200 +Received: from nausicaa.camperquake.de ([194.64.167.58] helo=nausicaa) by + kushana.camperquake.de with smtp (Exim 3.36 #1) id 17w8Xs-0005sl-00 for + rpm-list@freshrpms.net; Mon, 30 Sep 2002 23:57:40 +0200 +From: Ralf Ertzinger +To: rpm-zzzlist@freshrpms.net +Subject: Re: apt 0.5.7 on RH 7.x +Message-Id: <20020930235323.0e045818.ralf@camperquake.de> +In-Reply-To: <20020930225946.3f3ae6f3.matthias@egwn.net> +References: <20020930214204.5d631f5b.ralf@camperquake.de> + <20020930220002.15c18770.matthias@egwn.net> + <20020930223956.6c06655a.ralf@camperquake.de> + <20020930225946.3f3ae6f3.matthias@egwn.net> +Organization: [NDC] ;) +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 23:53:23 +0200 +Date: Mon, 30 Sep 2002 23:53:23 +0200 + +Hi. + +Matthias Saou wrote: + +> repository... and there's where the problem will be : It will say that +> there are two synaptic-0.24-fr1 packages (one installed, the other +> available) with the same version but different dependencies :-/ +> That's why I always keep package versions lower for older distributions. + +Ah, now I see. This is a non-issue here, so I'll rebuild locally :) + +-- +Dog for sale: eats anything and is fond of children. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01206.d6053e42110b3d3279a4e22613df13eb b/Ch3/datasets/spam/easy_ham/01206.d6053e42110b3d3279a4e22613df13eb new file mode 100644 index 000000000..3e4676688 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01206.d6053e42110b3d3279a4e22613df13eb @@ -0,0 +1,85 @@ +From rpm-list-admin@freshrpms.net Tue Oct 1 10:33:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 115B216F03 + for ; Tue, 1 Oct 2002 10:33:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:33:02 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8UL7LK16124 for + ; Mon, 30 Sep 2002 22:07:23 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g8UL11f20269; Mon, 30 Sep 2002 23:01:01 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g8UKxrf13918 for ; Mon, 30 Sep 2002 22:59:54 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: apt 0.5.7 on RH 7.x +Message-Id: <20020930225946.3f3ae6f3.matthias@egwn.net> +In-Reply-To: <20020930223956.6c06655a.ralf@camperquake.de> +References: <20020930214204.5d631f5b.ralf@camperquake.de> + <20020930220002.15c18770.matthias@egwn.net> + <20020930223956.6c06655a.ralf@camperquake.de> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 22:59:46 +0200 +Date: Mon, 30 Sep 2002 22:59:46 +0200 + +Once upon a time, Ralf wrote : + +> Matthias Saou wrote: +> > My main concern is that when rebuilding the recent packages I've made +> > for Psyche on Valhalla, I'd need to lower the "Release:" tag (to keep +> > an upgrade working), and that would f*ck up my CVS repository which is +> > on my Valhalla box +> +> Sorry, I don't get it. What's wrong with a release tag of fr1? + +Say you have installed synaptic-0.24-fr1 on your Valhalla box (package +rebuilt for Valhalla). Then you upgrade to Psyche using the Red Hat CDs. +Hopefully with the compat libraries the package will still be there +(although I doubt that since C++ is binary incompatible, so this is +probably a bad example), then you "apt-get update" with the new Psyche +repository... and there's where the problem will be : It will say that +there are two synaptic-0.24-fr1 packages (one installed, the other +available) with the same version but different dependencies :-/ +That's why I always keep package versions lower for older distributions. + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01207.3619f002d359bc9c29090c58d7c1b838 b/Ch3/datasets/spam/easy_ham/01207.3619f002d359bc9c29090c58d7c1b838 new file mode 100644 index 000000000..fee014374 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01207.3619f002d359bc9c29090c58d7c1b838 @@ -0,0 +1,66 @@ +From rpm-list-admin@freshrpms.net Tue Oct 1 10:35:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B4EDD16F17 + for ; Tue, 1 Oct 2002 10:35:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:35:41 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g916dmK13528 for + ; Tue, 1 Oct 2002 07:39:49 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g916G1f16249; Tue, 1 Oct 2002 08:16:01 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g916FXf13048 + for ; Tue, 1 Oct 2002 08:15:33 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17wGKr-0002Hx-00 for rpm-list@freshrpms.net; + Tue, 01 Oct 2002 02:16:45 -0400 +X-Originating-Ip: [4.64.17.47] +From: "" Angles " Puglisi" +To: rpm-zzzlist@freshrpms.net +Subject: use new apt to do null to RH8 upgrade? +Message-Id: <20021001.t5w.10103800@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 01 Oct 2002 06:18:53 +0000 +Date: Tue, 01 Oct 2002 06:18:53 +0000 + +Is it possible to use new apt to do (null) to RH8 upgrade? + +Even if it's possible, are there good reasons why maybe I should not do it and +just use the RH iso's (I don't think RH8 will upgrade from (null), maybe up2date +will)? + +-- +That's "angle" as in geometry. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01208.dd294e4904940446bb82b45b37981bce b/Ch3/datasets/spam/easy_ham/01208.dd294e4904940446bb82b45b37981bce new file mode 100644 index 000000000..1bde40c6f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01208.dd294e4904940446bb82b45b37981bce @@ -0,0 +1,86 @@ +From rpm-list-admin@freshrpms.net Tue Oct 1 10:38:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B2C4316F17 + for ; Tue, 1 Oct 2002 10:38:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:38:19 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g918akK17092 for + ; Tue, 1 Oct 2002 09:36:46 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g918S1f18842; Tue, 1 Oct 2002 10:28:01 + +0200 +Received: from urgent.rug.ac.be (urgent.rug.ac.be [157.193.88.1]) by + egwn.net (8.11.6/8.11.6/EGWN) with SMTP id g918Rff18785 for + ; Tue, 1 Oct 2002 10:27:41 +0200 +Received: (qmail 32408 invoked by uid 505); 1 Oct 2002 08:27:47 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 1 Oct 2002 08:27:47 -0000 +From: Thomas Vander Stichele +To: rpm-zzzlist@freshrpms.net +Subject: Re: use new apt to do null to RH8 upgrade? +In-Reply-To: <20021001.t5w.10103800@www.dudex.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 1 Oct 2002 10:27:47 +0200 (CEST) +Date: Tue, 1 Oct 2002 10:27:47 +0200 (CEST) + +> Is it possible to use new apt to do (null) to RH8 upgrade? + +It might be, don't think anyone tried it yet. + +> Even if it's possible, are there good reasons why maybe I should not do it and +> just use the RH iso's (I don't think RH8 will upgrade from (null), maybe up2date +> will)? + +Yes ;) + +first off, redhat does not support upgrading from beta's to the released +version. That doesn't mean it can't work, it means nobody tried it, they +sure didn't test it or fix anything to make it work, and you're on your +own. + +second, historically a new .0 numbers mostly means "so much has been +changed that you might have problems upgrading from any previous release +anyway". So, historically, most users installing a .0 release do this +from scratch anyway, doing upgrades throughout x.0->x.y. + +If you want to avoid problems, bite the bullet and reinstall ;) + +Thomas + + -- + +The Dave/Dina Project : future TV today ! - http://davedina.apestaart.org/ +<-*- -*-> +And every time she sneezes +I think it's love and oh lord +I'm not ready for this sort of thing +<-*- thomas@apestaart.org -*-> +URGent, the best radio on the Internet - 24/7 ! - http://urgent.rug.ac.be/ + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01209.b9169047bffea1b9af14ca41f336eede b/Ch3/datasets/spam/easy_ham/01209.b9169047bffea1b9af14ca41f336eede new file mode 100644 index 000000000..1f6f22adf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01209.b9169047bffea1b9af14ca41f336eede @@ -0,0 +1,74 @@ +From rpm-list-admin@freshrpms.net Tue Oct 1 10:50:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D9A2316F16 + for ; Tue, 1 Oct 2002 10:50:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 10:50:40 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g919c0K19186 for + ; Tue, 1 Oct 2002 10:38:00 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g919V1f20747; Tue, 1 Oct 2002 11:31:01 + +0200 +Received: from drone5.qsi.net.nz (drone5-svc-skyt.qsi.net.nz + [202.89.128.5]) by egwn.net (8.11.6/8.11.6/EGWN) with SMTP id g919Tcf13426 + for ; Tue, 1 Oct 2002 11:29:39 +0200 +Received: (qmail 17870 invoked by uid 0); 1 Oct 2002 09:29:35 -0000 +Received: from unknown (HELO se7en.org) ([202.89.145.8]) (envelope-sender + ) by 0 (qmail-ldap-1.03) with SMTP for + ; 1 Oct 2002 09:29:35 -0000 +Received: from spawn.se7en.org ([10.0.0.3]) by se7en.org with esmtp (Exim + 3.35 #1 (Debian)) id 17wXdC-00068C-00 for ; + Wed, 02 Oct 2002 12:44:50 +1200 +From: Mark Derricutt +To: rpm-zzzlist@freshrpms.net +Subject: Re: use new apt to do null to RH8 upgrade? +Message-Id: <4370000.1033464561@spawn.se7en.org> +In-Reply-To: +References: +X-Mailer: Mulberry/2.2.1 (Linux/x86) +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Content-Disposition: inline +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 01 Oct 2002 21:29:21 +1200 +Date: Tue, 01 Oct 2002 21:29:21 +1200 + +I remember apt-get dist-upgrading from 7.2 to 7.3 fine, so it -should- +work, maybe :) + +--On Tuesday, October 01, 2002 10:27:47 +0200 Thomas Vander Stichele + wrote: + +> It might be, don't think anyone tried it yet. + + + + -- \m/ -- + "...if I seem super human I have been misunderstood." (c) Dream Theater + mark@talios.com - ICQ: 1934853 JID: talios@myjabber.net + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01210.3b4f94e91b69061def190573072e880c b/Ch3/datasets/spam/easy_ham/01210.3b4f94e91b69061def190573072e880c new file mode 100644 index 000000000..f56788824 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01210.3b4f94e91b69061def190573072e880c @@ -0,0 +1,85 @@ +From rpm-list-admin@freshrpms.net Tue Oct 1 14:51:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3D5A016F03 + for ; Tue, 1 Oct 2002 14:51:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 14:51:22 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g91AHaK20618 for + ; Tue, 1 Oct 2002 11:17:36 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g91AE1f16641; Tue, 1 Oct 2002 12:14:01 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g91ACkf07988 for + ; Tue, 1 Oct 2002 12:12:46 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: use new apt to do null to RH8 upgrade? +Message-Id: <20021001121244.2d3a0154.matthias@egwn.net> +In-Reply-To: <4370000.1033464561@spawn.se7en.org> +References: + <4370000.1033464561@spawn.se7en.org> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 1 Oct 2002 12:12:44 +0200 +Date: Tue, 1 Oct 2002 12:12:44 +0200 + +Once upon a time, Mark wrote : + +> I remember apt-get dist-upgrading from 7.2 to 7.3 fine, so it -should- +> work, maybe :) + +I've done that too, on many production servers. The only little +(unimportant) catch is to replace "kernel-headers" by "glibc-kernheaders", +a simple "apt-get install glibc-kernheaders" taking care of that. + +Upgrading between releases is meant to work, not between betas or beta and +releases. The reason is simple : Some packages may have been downgraded, +some others may have been rebuilt with the same versions but different +dependencies. For both these categories of packages, the upgrade through +apt/rhn/whatever just won't do, as some older packages might be considered +as the newest, thus being kept on the system. + +As Red Hat does, I really don't recommend trying to upgrade between betas +or from a beta to a final release either. Simply backup your /home, /etc +(and /root and/or /usr/local/ if needed) then reinstall cleanly, it'll +probably save a few hassles and you'll get the cleanest possible system ;-) + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01211.6f83def18349bc93808cbd6b0642b173 b/Ch3/datasets/spam/easy_ham/01211.6f83def18349bc93808cbd6b0642b173 new file mode 100644 index 000000000..0db3c4720 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01211.6f83def18349bc93808cbd6b0642b173 @@ -0,0 +1,80 @@ +From rpm-list-admin@freshrpms.net Tue Oct 1 14:58:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 618F116F79 + for ; Tue, 1 Oct 2002 14:52:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 14:52:59 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g91BQLK22829 for + ; Tue, 1 Oct 2002 12:26:22 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g91BI0f10144; Tue, 1 Oct 2002 13:18:00 + +0200 +Received: from chip.ath.cx (cs144080.pp.htv.fi [213.243.144.80]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g91BGgf09650 for + ; Tue, 1 Oct 2002 13:16:43 +0200 +Received: from chip.ath.cx (localhost [127.0.0.1]) by chip.ath.cx + (8.12.5/8.12.2) with ESMTP id g91BGPSA032564 for ; + Tue, 1 Oct 2002 14:16:30 +0300 +Received: from localhost (pmatilai@localhost) by chip.ath.cx + (8.12.5/8.12.5/Submit) with ESMTP id g91BGGDh032559 for + ; Tue, 1 Oct 2002 14:16:21 +0300 +X-Authentication-Warning: chip.ath.cx: pmatilai owned process doing -bs +From: Panu Matilainen +X-X-Sender: pmatilai@chip.ath.cx +To: rpm-zzzlist@freshrpms.net +Subject: Re: use new apt to do null to RH8 upgrade? +In-Reply-To: <20021001.t5w.10103800@www.dudex.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 1 Oct 2002 14:16:16 +0300 (EEST) +Date: Tue, 1 Oct 2002 14:16:16 +0300 (EEST) + +On Tue, 1 Oct 2002, Angles Puglisi wrote: + + +> Is it possible to use new apt to do (null) to RH8 upgrade? + +Possible - should be, it was possible to update to (null) from RH7.3 with +apt. Did that on my laptop and well.. it was painfull to say the least +(including a ecovery from totally corrupted rpmdb) Don't expect it to be +an easy 'dist-upgrade' at any rate, so much stuff has changed and apt +doesn't always handle all that well the way dependencies are set in +RHL. + +> +> Even if it's possible, are there good reasons why maybe I should not do +> it and just use the RH iso's (I don't think RH8 will upgrade from +> (null), maybe up2date will)? + +It's possible but not supported by RH. I've upgraded both my laptop and my +home box from (null) to RH8.0 and didn't encounter any issues though. + +-- + - Panu - + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01212.5f88fb786e44da332e42c578fe657978 b/Ch3/datasets/spam/easy_ham/01212.5f88fb786e44da332e42c578fe657978 new file mode 100644 index 000000000..afdab3b11 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01212.5f88fb786e44da332e42c578fe657978 @@ -0,0 +1,77 @@ +From rpm-list-admin@freshrpms.net Tue Oct 1 15:02:17 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BED7716F85 + for ; Tue, 1 Oct 2002 14:53:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 14:53:39 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g91BsLK23735 for + ; Tue, 1 Oct 2002 12:54:22 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g91Bp0f05478; Tue, 1 Oct 2002 13:51:00 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g91BoCf01587 for + ; Tue, 1 Oct 2002 13:50:12 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Gabber packages for 8.0 (was: All set for Red Hat Linux 8.0) +Message-Id: <20021001135011.74dc6814.matthias@rpmforge.net> +In-Reply-To: <377FE45E-D4A6-11D6-A377-000393D60714@jabber.org> +References: <20020930092826.7c8f5791.matthias@rpmforge.net> + <377FE45E-D4A6-11D6-A377-000393D60714@jabber.org> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 1 Oct 2002 13:50:11 +0200 +Date: Tue, 1 Oct 2002 13:50:11 +0200 + +Once upon a time, Julian wrote : + +> I would appreciate it if you could get Gabber packages for Red Hat 8. I +> will be making a new release soon, but even in the meantime, 0.8.7 +> packages would be ok. +> +> I know that in the beta, red hat was using a modified version of +> gnome-libs which is incompatible with the latest gnomemm. If this is +> still the case in 8, I can send you a patch which makes gnomemm work +> again... + +I'm facing another problem right now. It looks like libsigc++ is no longer +included in the distribution, and gtkmm won't compile without it :-/ +I guess I'll have to repackage it myself for 8.0 (assuming it's possible). + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.28 0.15 0.10 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01213.25bf48d2ed386aa84360862062fc9c54 b/Ch3/datasets/spam/easy_ham/01213.25bf48d2ed386aa84360862062fc9c54 new file mode 100644 index 000000000..ee4a04246 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01213.25bf48d2ed386aa84360862062fc9c54 @@ -0,0 +1,76 @@ +From rpm-list-admin@freshrpms.net Tue Oct 1 15:05:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D735E16FB3 + for ; Tue, 1 Oct 2002 14:55:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 14:55:03 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g91DKNK26570 for + ; Tue, 1 Oct 2002 14:20:24 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g91DC1f11003; Tue, 1 Oct 2002 15:12:01 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g91DBTf10655 for + ; Tue, 1 Oct 2002 15:11:29 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Gabber packages for 8.0 (was: All set for Red Hat Linux 8.0) +Message-Id: <20021001151127.5ef5b77d.matthias@rpmforge.net> +In-Reply-To: <20021001135011.74dc6814.matthias@rpmforge.net> +References: <20020930092826.7c8f5791.matthias@rpmforge.net> + <377FE45E-D4A6-11D6-A377-000393D60714@jabber.org> + <20021001135011.74dc6814.matthias@rpmforge.net> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 1 Oct 2002 15:11:27 +0200 +Date: Tue, 1 Oct 2002 15:11:27 +0200 + +Once upon a time, Matthias wrote : + +> I'm facing another problem right now. It looks like libsigc++ is no +> longer included in the distribution, and gtkmm won't compile without it +> :-/ I guess I'll have to repackage it myself for 8.0 (assuming it's +> possible). + +Well, I've made an updated libsigc++ 1.0.4 package. It rebuilds cleanly on +7.3 but the *.so* libraries are missing when trying to rebuild on 8.0 (the +.a and .la files and everything else is though). +Do you have an idea of what the problem may be? Julian : Do you want the +.src.rpm to try to find the cause? + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.19 0.15 0.16 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01214.7c4b7b61391c72f324a17a04b680c30c b/Ch3/datasets/spam/easy_ham/01214.7c4b7b61391c72f324a17a04b680c30c new file mode 100644 index 000000000..b0236ac0a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01214.7c4b7b61391c72f324a17a04b680c30c @@ -0,0 +1,83 @@ +From rpm-list-admin@freshrpms.net Wed Oct 2 11:41:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B4CC216F03 + for ; Wed, 2 Oct 2002 11:41:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:41:24 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g91NrMK17225 for + ; Wed, 2 Oct 2002 00:53:23 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g91Nl2f13853; Wed, 2 Oct 2002 01:47:02 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g91Nk9f13026 + for ; Wed, 2 Oct 2002 01:46:09 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17wWja-0003FF-00 for rpm-list@freshrpms.net; + Tue, 01 Oct 2002 19:47:22 -0400 +X-Originating-Ip: [66.92.157.2] +From: "" Angles " Puglisi" +To: rpm-zzzlist@freshrpms.net +Subject: Re: use new apt to do null to RH8 upgrade? +Message-Id: <20021001.558.00260600@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 01 Oct 2002 23:49:35 +0000 +Date: Tue, 01 Oct 2002 23:49:35 +0000 + +Matthias Saou (matthias@egwn.net) wrote*: +>As Red Hat does, I really don't recommend trying to upgrade between betas +>or from a beta to a final release either. Simply backup your /home, /etc +>(and /root and/or /usr/local/ if needed) then reinstall cleanly, it'll +>probably save a few hassles and you'll get the cleanest possible system ;-) +> + +I think this is probably the best way, because I think (maybe) with upgrading you +do not always automatically get the latest feature enabled in some config file +because RH would rather take it easy and not update that config file (you get a +rpmnew instead of rpmsaved file) so they get less calls to support that way. + +Anyway, I have tons of media files in /home/* probably 5 to 10 gigs at least, my +laptop's CDROM takes 700MB at a time (obviously) and compressing media files is +dumb because they are already compressed. Dumb question: how to backup huge data? +Network backup to another box? I do not have a box with a tape drive, but maybe box +with a large HD with much free space could take the backup (oops, I do not have a +space computer with a large HD with much free space). + +These media files are backed up - ON THE CD'S THEY CAME FROM! Yes I learned that +used CDs make inexpensive backup copy on the shelf. I do not want to re-rip all +this crap again. + +-- +That's "angle" as in geometry. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01215.94a01e7d8bb1206fbb2f1cc7fb3dcdbd b/Ch3/datasets/spam/easy_ham/01215.94a01e7d8bb1206fbb2f1cc7fb3dcdbd new file mode 100644 index 000000000..1fa93d0f1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01215.94a01e7d8bb1206fbb2f1cc7fb3dcdbd @@ -0,0 +1,106 @@ +From rpm-list-admin@freshrpms.net Wed Oct 2 11:43:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4E69D16F16 + for ; Wed, 2 Oct 2002 11:43:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:43:33 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g927nWK31439 for + ; Wed, 2 Oct 2002 08:49:34 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g927j2f22429; Wed, 2 Oct 2002 09:45:02 + +0200 +Received: from urgent.rug.ac.be (urgent.rug.ac.be [157.193.88.1]) by + egwn.net (8.11.6/8.11.6/EGWN) with SMTP id g927i8f17614 for + ; Wed, 2 Oct 2002 09:44:08 +0200 +Received: (qmail 8898 invoked by uid 505); 2 Oct 2002 07:44:15 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 2 Oct 2002 07:44:15 -0000 +From: Thomas Vander Stichele +To: rpm-zzzlist@freshrpms.net +Subject: Re: use new apt to do null to RH8 upgrade? +In-Reply-To: <20021001.558.00260600@www.dudex.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 09:44:15 +0200 (CEST) +Date: Wed, 2 Oct 2002 09:44:15 +0200 (CEST) + +> Matthias Saou (matthias@egwn.net) wrote*: +> >As Red Hat does, I really don't recommend trying to upgrade between betas +> >or from a beta to a final release either. Simply backup your /home, /etc +> >(and /root and/or /usr/local/ if needed) then reinstall cleanly, it'll +> >probably save a few hassles and you'll get the cleanest possible system ;-) +> +> I think this is probably the best way, because I think (maybe) with upgrading you +> do not always automatically get the latest feature enabled in some config file +> because RH would rather take it easy and not update that config file (you get a +> rpmnew instead of rpmsaved file) so they get less calls to support that way. + +If you dislike Red Hat, why use it ? This was a really bad argument +against using Red Hat that makes no sense at all. I for one am GLAD that +they +a) don't overwrite your config files on a whim (be GLAD they don't do some +sort of autodetection and changing crap) +b) tell you on rpm upgrade what config files you should look at because +formats have changed. + +Red Hat is not "taking it easy" on this, it's putting control in the hands +of you, the maintainer of the machine. Don't be lazy. + +> Anyway, I have tons of media files in /home/* probably 5 to 10 gigs at least, my +> laptop's CDROM takes 700MB at a time (obviously) and compressing media files is +> dumb because they are already compressed. Dumb question: how to backup huge data? +> Network backup to another box? I do not have a box with a tape drive, but maybe box +> with a large HD with much free space could take the backup (oops, I do not have a +> space computer with a large HD with much free space). + +You don't need to backup /home if you are careful enough. You did put +/home on a separate partition, no ? Just install rh80 and tell it to use +the same partition as /home and tell it to NOT format it, but keep the +data as is. + +If you didn't put /home on a separate partition, then you really do need +to make backups. Use an nfs or smb mount from another machine to backup +and rsync straight to the mount, or if that's not possible, rsync over +ssh. It's the best way to make backups. + +> These media files are backed up - ON THE CD'S THEY CAME FROM! + +It's the other way around - your media files are backups of the CD's they +came from ;) + +Good luck, +Thomas +-- + +The Dave/Dina Project : future TV today ! - http://davedina.apestaart.org/ +<-*- -*-> +You know the shape my breath will take before I let it out +<-*- thomas@apestaart.org -*-> +URGent, the best radio on the Internet - 24/7 ! - http://urgent.rug.ac.be/ + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01216.e30b39890b41cf8740b3315f79521f59 b/Ch3/datasets/spam/easy_ham/01216.e30b39890b41cf8740b3315f79521f59 new file mode 100644 index 000000000..0f12f4f8c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01216.e30b39890b41cf8740b3315f79521f59 @@ -0,0 +1,108 @@ +From rpm-list-admin@freshrpms.net Wed Oct 2 11:44:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 77D6A16F03 + for ; Wed, 2 Oct 2002 11:44:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:44:08 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9283uK31858 for + ; Wed, 2 Oct 2002 09:03:58 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g927u1f09457; Wed, 2 Oct 2002 09:56:01 + +0200 +Received: from mta7.pltn13.pbi.net (mta7.pltn13.pbi.net [64.164.98.8]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g927sxf03169 for + ; Wed, 2 Oct 2002 09:55:00 +0200 +Received: from eecs.berkeley.edu ([63.192.217.110]) by mta7.pltn13.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id + <0H3C00KKSGNKBC@mta7.pltn13.pbi.net> for rpm-list@freshrpms.net; + Wed, 02 Oct 2002 00:54:58 -0700 (PDT) +From: Ben Liblit +Subject: alsa-driver.spec tweak for homemade kernels +To: rpm-zzzlist@freshrpms.net +Message-Id: <3D9AA650.2000909@eecs.berkeley.edu> +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="Boundary_(ID_KtnWPrcWHTTzQa7OHxPjiA)" +X-Accept-Language: en-us, en +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 02 Oct 2002 00:54:56 -0700 +Date: Wed, 02 Oct 2002 00:54:56 -0700 + +This is a multi-part message in MIME format. + +--Boundary_(ID_KtnWPrcWHTTzQa7OHxPjiA) +Content-type: text/plain; charset=us-ascii; format=flowed +Content-transfer-encoding: 7BIT + +I use a mostly Red Hat 8.0 system, but prefer to configure and build my +kernel by hand. I'd like to humbly offer a tweak to alsa-driver.spec +that helps it build cleanly under such circumstances. I recognize that +freshrpms.net packages are designed with standard Red Hat in mind, +including a standard kernel RPM. However, I hope that Matthias will +consider the tweak small enough to justify its incorporation. + +The diff is attached below. The first part of the diff contains a +conditional that checks to see if the expected RPM is installed. If it +is, %{karch} is set as before and a new %{krpm} flag is set to 1. If +the expected RPM is not installed, then %{karch} is instead set using +"uname -p", while %{krpm} is left undefined. + +The second part of the diff is simpler. We only require that +kernel-source be installed if the kernel itself came from an RPM. (If +the kernel was hand-built, the presumably the user knows enough to have +retained the sources in the expected place.) + +Again, I realize that I'm operating "off warrantee" by not using a Red +Hat kernel RPM. Matthias, if you think this tweak is reasonable and not +too ugly, I'd love to see you pick it up. If not, well at least this +message will sit in the archives and may help other folks in the future. + +--Boundary_(ID_KtnWPrcWHTTzQa7OHxPjiA) +Content-type: video/mng; name=diffs +Content-transfer-encoding: base64 +Content-disposition: inline; filename=diffs + +LS0tIGFsc2EtZHJpdmVyLnNwZWMub3JpZwkyMDAyLTEwLTAxIDEzOjExOjQ0LjAwMDAwMDAw +MCAtMDcwMAorKysgYWxzYS1kcml2ZXIuc3BlYwkyMDAyLTEwLTAyIDAwOjM4OjIyLjAwMDAw +MDAwMCAtMDcwMApAQCAtOCw3ICs4LDEyIEBACiAlaWYgJSh1bmFtZSAtciB8IGdyZXAgLWMg +c21wKQogCSV7ZXhwYW5kOiUlZGVmaW5lIGtzbXAgLXNtcH0KICVlbmRpZgotJWRlZmluZQlr +YXJjaAkJJShycG0gLXEgLS1xZiAnJSV7YXJjaH0nIGtlcm5lbCV7P2tzbXB9LSV7a3ZlcnNp +b259KQorJWlmICUocnBtIC1xIGtlcm5lbCV7P2tzbXB9LSV7a3ZlcnNpb259ID4vZGV2L251 +bGw7IGVjaG8gJD8pCisJJWRlZmluZQlrYXJjaAkJJSh1bmFtZSAtcCkKKyVlbHNlCisJJWRl +ZmluZSBrcnBtCQkxCisJJWRlZmluZQlrYXJjaAkJJShycG0gLXEgLS1xZiAnJSV7YXJjaH0n +IGtlcm5lbCV7P2tzbXB9LSV7a3ZlcnNpb259KQorJWVuZGlmCiAlZGVmaW5lCWtyZWx2ZXIJ +CSUoZWNobyAle2t2ZXJzaW9ufSB8IHRyIC1zICctJyAnXycpCiAKIFN1bW1hcnk6IFRoZSBB +ZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUgKEFMU0EpIGJhc2UgZmlsZXMuCkBA +IC0yNSw3ICszMCw4IEBACiBCdWlsZFJvb3Q6ICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJz +aW9ufS1yb290CiBCdWlsZEFyY2g6ICV7a2FyY2h9CiBSZXF1aXJlczogYWxzYS1rZXJuZWwg +PSAle3ZlcnNpb259LCAvc2Jpbi9kZXBtb2QKLUJ1aWxkUmVxdWlyZXM6IGtlcm5lbC1zb3Vy +Y2UgPSAle2t2ZXJzaW9ufSwgTUFLRURFVgorJXs/a3JwbTpCdWlsZFJlcXVpcmVzOiBrZXJu +ZWwtc291cmNlID0gJXtrdmVyc2lvbn19CitCdWlsZFJlcXVpcmVzOiBNQUtFREVWCiAKICVk +ZXNjcmlwdGlvbgogVGhlIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZSAoQUxT +QSkgcHJvdmlkZXMgYXVkaW8gYW5kIE1JREkK + +--Boundary_(ID_KtnWPrcWHTTzQa7OHxPjiA)-- + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01217.ca4f6cab0653e40829f209aefb242ae0 b/Ch3/datasets/spam/easy_ham/01217.ca4f6cab0653e40829f209aefb242ae0 new file mode 100644 index 000000000..b7f4c9fb9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01217.ca4f6cab0653e40829f209aefb242ae0 @@ -0,0 +1,82 @@ +From rpm-list-admin@freshrpms.net Wed Oct 2 11:44:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BC29D16F17 + for ; Wed, 2 Oct 2002 11:44:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:44:19 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9286jK31946 for + ; Wed, 2 Oct 2002 09:06:45 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g92820f00306; Wed, 2 Oct 2002 10:02:00 + +0200 +Received: from evv.kamakiriad.local (cable-b-36.sigecom.net + [63.69.210.36]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g92810f32557 for ; Wed, 2 Oct 2002 10:01:00 +0200 +Received: from aquila.kamakiriad.local (aquila.kamakiriad.local + [192.168.1.3]) by kamakiriad.comamakiriad.com (8.11.6/8.11.6) with SMTP id + g9280mM07865 for ; Wed, 2 Oct 2002 03:00:48 -0500 +From: Brian Fahrlander +To: rpm-zzzlist@freshrpms.net +Subject: Re: use new apt to do null to RH8 upgrade? +Message-Id: <20021002030039.706c6eca.kilroy@kamakiriad.com> +In-Reply-To: +References: <20021001.558.00260600@www.dudex.net> + +X-Mailer: Sylpheed version 0.8.3 (GTK+ 1.2.10; i386-redhat-linux) +X-Message-Flag: : Shame on you! You know Outlook is how viruses are spread! +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 03:00:39 -0500 +Date: Wed, 2 Oct 2002 03:00:39 -0500 + +On Wed, 2 Oct 2002 09:44:15 +0200 (CEST), Thomas Vander Stichele wrote: + +> > Matthias Saou (matthias@egwn.net) wrote*: +> > >As Red Hat does, I really don't recommend trying to upgrade between betas +> > >or from a beta to a final release either. Simply backup your /home, /etc +> > >(and /root and/or /usr/local/ if needed) then reinstall cleanly, it'll +> > >probably save a few hassles and you'll get the cleanest possible system ;-) + + Yeah, I need to work this out, too; I just learned my lesson about living on the bleeding edge. Lesson learned? NO MORE XIMIAN, UNDER ANY CIRCUMSTANCES. Man, that was annoying. + + Anyway, I have returned to Redhat 7.3 on my root filesystem (saved my home directories, music and games on other partitions) and while I have the 8.0 stuff in the list, everything I want to upgrade requires 200+ RPMs. + + I'm not opposed to this, but apt is. "apt-get dist-upgrade" dumps core. + + What's the inside secret here, or do I just start searching mirrors for the ISO and get over it? + + +------------------------------------------------------------------------ +Brian Fahrländer Linux Zealot, Conservative, and Technomad +Evansville, IN My Voyage: http://www.CounterMoon.com +ICQ 5119262 +------------------------------------------------------------------------ +Just machines, to make big decisions- programmed by fellas with +compassion and vision. We'll be clean when that work is done; +Eternally free and eternally young. Linux. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01218.9ccb65e5b538133faf5c90bf7b3f8374 b/Ch3/datasets/spam/easy_ham/01218.9ccb65e5b538133faf5c90bf7b3f8374 new file mode 100644 index 000000000..c474e5808 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01218.9ccb65e5b538133faf5c90bf7b3f8374 @@ -0,0 +1,89 @@ +From rpm-list-admin@freshrpms.net Wed Oct 2 11:44:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5598A16F03 + for ; Wed, 2 Oct 2002 11:44:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:44:55 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g928DqK32287 for + ; Wed, 2 Oct 2002 09:13:52 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g928A2f07451; Wed, 2 Oct 2002 10:10:02 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g9289Pf04600 for ; Wed, 2 Oct 2002 10:09:25 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: alsa-driver.spec tweak for homemade kernels +Message-Id: <20021002100919.2e3168a8.matthias@rpmforge.net> +In-Reply-To: <3D9AA650.2000909@eecs.berkeley.edu> +References: <3D9AA650.2000909@eecs.berkeley.edu> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 10:09:19 +0200 +Date: Wed, 2 Oct 2002 10:09:19 +0200 + +Once upon a time, Ben wrote : + +> I use a mostly Red Hat 8.0 system, but prefer to configure and build my +> kernel by hand. I'd like to humbly offer a tweak to alsa-driver.spec +> that helps it build cleanly under such circumstances. I recognize that +> freshrpms.net packages are designed with standard Red Hat in mind, +> including a standard kernel RPM. However, I hope that Matthias will +> consider the tweak small enough to justify its incorporation. + +Well, I don't really find it consistent at all to use an rpm package built +against something that wasn't installed through rpm :-/ + +What I'd recommend in your case : You should keep at least one original Red +Hat Linux kernel (you do just in case, right? ;-)) and install the matching +alsa-kernel package as you'll need at least one because of the +dependencies. Then for your custom built kernel, simply "./configure +--with-cards=all && make && make install DESTDIR=/tmp/alsa-driver" from the +alsa-driver sources then as root copy all the modules under +/tmp/alsa-driver/lib/modules/ to your modules dir and run "depmod -a". + +Of course you can even make it much faster by not compiling all un-needed +drivers, as I guess that's one of the reasons one would rebuild his own +kernel. + +I find this the easiest and cleanest way to get around the problem. It's +what I've done and what I'll keep doing on my laptop where I'm running a +kernel recompiled with ACPI. + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.00 0.02 0.00 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01219.45cd32c7d6ff5dcbc288797d8e8d7514 b/Ch3/datasets/spam/easy_ham/01219.45cd32c7d6ff5dcbc288797d8e8d7514 new file mode 100644 index 000000000..98ea0886d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01219.45cd32c7d6ff5dcbc288797d8e8d7514 @@ -0,0 +1,75 @@ +From rpm-list-admin@freshrpms.net Wed Oct 2 11:45:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id ECFA016F03 + for ; Wed, 2 Oct 2002 11:45:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:45:03 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g928tEK01164 for + ; Wed, 2 Oct 2002 09:55:16 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g928q1f03349; Wed, 2 Oct 2002 10:52:01 + +0200 +Received: from adsl-63-192-217-110.dsl.snfc21.pacbell.net + (adsl-63-192-217-110.dsl.snfc21.pacbell.net [63.192.217.110]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g928pYf03254 for + ; Wed, 2 Oct 2002 10:51:35 +0200 +Received: from eecs.berkeley.edu (localhost [127.0.0.1]) by + adsl-63-192-217-110.dsl.snfc21.pacbell.net (Postfix) with ESMTP id + 1F8CB3BA5C for ; Wed, 2 Oct 2002 01:51:33 -0700 + (PDT) +Message-Id: <3D9AB394.F7C2C9A4@eecs.berkeley.edu> +From: Ben Liblit +X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.19 i686) +X-Accept-Language: en +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: alsa-driver.spec tweak for homemade kernels +References: <3D9AA650.2000909@eecs.berkeley.edu> + <20021002100919.2e3168a8.matthias@rpmforge.net> +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 02 Oct 2002 01:51:32 -0700 +Date: Wed, 02 Oct 2002 01:51:32 -0700 + +Matthias Saou wrote: +> Well, I don't really find it consistent at all to use an rpm package +> built against something that wasn't installed through rpm :-/ + +Oh well. Fair enough. + +> What I'd recommend in your case [...] + +Ugh, way too much manual labor. :-) + +What I've done instead is to create a tiny little "kernel.spec" that +installs no files but claims to produce a kernel package having version +number `uname -r` for architecture `uname -p`. It also claims to +provide kernel-sources at the same version. That is enough to make +alsa-driver.spec happy, and at least forms a reasonable representation +of what my homemade kernel provides to the system. I should have +thought of this approach sooner. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01220.f57815121767436c538407a25eacdd88 b/Ch3/datasets/spam/easy_ham/01220.f57815121767436c538407a25eacdd88 new file mode 100644 index 000000000..4c0157bb1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01220.f57815121767436c538407a25eacdd88 @@ -0,0 +1,95 @@ +From rpm-list-admin@freshrpms.net Wed Oct 2 11:45:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A14BB16F16 + for ; Wed, 2 Oct 2002 11:45:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:45:05 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g928tEK01163 for + ; Wed, 2 Oct 2002 09:55:15 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g928s3f14313; Wed, 2 Oct 2002 10:54:03 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g928rQf05978 for + ; Wed, 2 Oct 2002 10:53:27 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: use new apt to do null to RH8 upgrade? +Message-Id: <20021002105324.5ee715d2.matthias@egwn.net> +In-Reply-To: <20021002030039.706c6eca.kilroy@kamakiriad.com> +References: <20021001.558.00260600@www.dudex.net> + + <20021002030039.706c6eca.kilroy@kamakiriad.com> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 10:53:24 +0200 +Date: Wed, 2 Oct 2002 10:53:24 +0200 + +Once upon a time, Brian wrote : + +> Yeah, I need to work this out, too; I just learned my lesson about +> living on the bleeding edge. Lesson learned? NO MORE XIMIAN, UNDER +> ANY CIRCUMSTANCES. Man, that was annoying. + +We all learned that sooner or later, right? When I got down to that myself +is when I started redhat.aldil.org, now known as freshrpms.net ;-) + +> Anyway, I have returned to Redhat 7.3 on my root filesystem (saved my +> home directories, music and games on other partitions) and while I +> have the 8.0 stuff in the list, everything I want to upgrade requires +> 200+ RPMs. +> +> I'm not opposed to this, but apt is. "apt-get dist-upgrade" dumps +> core. + +Strange. +Anyway, although I'd easily recommend upgrading 7.x to 7.3 using apt, I +wouldn't for 7.x to 8.0 as they are C++ binary incompatible... and apt is +entirely written in C++ and dynamically linked :-/ + +Still, that doesn't explain a core dump :-( + +> What's the inside secret here, or do I just start searching mirrors +> for the ISO and get over it? + +Why "search"? There's more than enough to choose from here : +http://freshrpms.net/mirrors/psyche.html + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01221.84df71e86c3f6a71a7cd8bb4f6a97741 b/Ch3/datasets/spam/easy_ham/01221.84df71e86c3f6a71a7cd8bb4f6a97741 new file mode 100644 index 000000000..1e309c855 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01221.84df71e86c3f6a71a7cd8bb4f6a97741 @@ -0,0 +1,80 @@ +From rpm-list-admin@freshrpms.net Wed Oct 2 11:45:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AB06A16F17 + for ; Wed, 2 Oct 2002 11:45:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:45:14 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g929gaK02863 for + ; Wed, 2 Oct 2002 10:42:36 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g929e2f01180; Wed, 2 Oct 2002 11:40:02 + +0200 +Received: from chip.ath.cx (cs144080.pp.htv.fi [213.243.144.80]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g929duf01097 for + ; Wed, 2 Oct 2002 11:39:56 +0200 +Received: from chip.ath.cx (localhost [127.0.0.1]) by chip.ath.cx + (8.12.5/8.12.2) with ESMTP id g929dbSA006880; Wed, 2 Oct 2002 12:39:38 + +0300 +Received: from localhost (pmatilai@localhost) by chip.ath.cx + (8.12.5/8.12.5/Submit) with ESMTP id g929datv006876; Wed, 2 Oct 2002 + 12:39:37 +0300 +X-Authentication-Warning: chip.ath.cx: pmatilai owned process doing -bs +From: Panu Matilainen +X-X-Sender: pmatilai@chip.ath.cx +To: apt-rpm@distro.conectiva.com.br, +Subject: Debian-style task-packages for RH8.0 available +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 12:39:34 +0300 (EEST) +Date: Wed, 2 Oct 2002 12:39:34 +0300 (EEST) + +Hi, + +This has been hashed over a few times on various lists, now I finally got +around to doing something about it... You can now add +"rpm http://koti.welho.com/pmatilai/ redhat/8.0 task" to your sources.list +and after apt-get update you can find out what's available with +'apt-cache search ^task-' + +These are generated directly from comps.xml of RH8.0 so they contain +exactly the same packages as you'll get by choosing the various categories +at install time. I didn't bother including SRPMS for these as they are +rather uninteresting, if you want you can re-generate the .specs by +running http://koti.welho.com/pmatilai/comps2task/comps2task.py. + +BTW the repository only contains the task-packages, you'll need an +apt-enabled mirror of RH8.0 in your sources.list to actually do anything +with it. + +-- + - Panu - + + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01222.924583306d4cc0c089a9b295915439e4 b/Ch3/datasets/spam/easy_ham/01222.924583306d4cc0c089a9b295915439e4 new file mode 100644 index 000000000..f687badc4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01222.924583306d4cc0c089a9b295915439e4 @@ -0,0 +1,87 @@ +From rpm-list-admin@freshrpms.net Wed Oct 2 11:45:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1D72716F16 + for ; Wed, 2 Oct 2002 11:45:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:45:17 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g929n8K03014 for + ; Wed, 2 Oct 2002 10:49:08 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g929k0f29598; Wed, 2 Oct 2002 11:46:00 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g929jZf25241 for + ; Wed, 2 Oct 2002 11:45:35 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: freshrpms.net resources (was Re: use new apt to do null to RH8 + upgrade?) +Message-Id: <20021002114533.42cc8de8.matthias@egwn.net> +In-Reply-To: <20021002041852.14c612cb.kilroy@kamakiriad.com> +References: <20021001.558.00260600@www.dudex.net> + + <20021002030039.706c6eca.kilroy@kamakiriad.com> + <20021002105324.5ee715d2.matthias@egwn.net> + <20021002041852.14c612cb.kilroy@kamakiriad.com> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 11:45:33 +0200 +Date: Wed, 2 Oct 2002 11:45:33 +0200 + +Once upon a time, Brian wrote : + +> Yeah, but I try to 'take it easy' on your server. The golden rule of +> the internet: when you find a free resource, don't piss'em off! :) I +> really appreciate your work; you get done the things I wish I could, +> and I respect that. + +Don't worry too much : The day the server gets too busy, I'll cleanup and +publish the addresses of some mirrors, as many ftp mirrors exist (I'm aware +of at least 15), and even an apt one :-) +For now, the limit is far enough : When I unlocked the Psyche ISO images on +Monday, the bandwidth usage on the current (ftp|http|rsync) freshrpms.net +server went up to 90Mbps sustained, which is not bad as the server has a +100Mbps physical NIC! Of course, I'd get in trouble if it was always like +that, but the average used when no new Red Hat release is there is between +2 and 4Mbps, which my company tolerates, as I've convinced them it's a +useful return to the community providing us the great operating system all +our servers are running ;-) + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01223.bd57469f0b8c0ca986d7a3f40681b56e b/Ch3/datasets/spam/easy_ham/01223.bd57469f0b8c0ca986d7a3f40681b56e new file mode 100644 index 000000000..4dde5dc11 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01223.bd57469f0b8c0ca986d7a3f40681b56e @@ -0,0 +1,96 @@ +From rpm-list-admin@freshrpms.net Wed Oct 2 11:45:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 72F8016F03 + for ; Wed, 2 Oct 2002 11:45:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:45:07 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g929MRK02153 for + ; Wed, 2 Oct 2002 10:22:28 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g929K2f05616; Wed, 2 Oct 2002 11:20:02 + +0200 +Received: from evv.kamakiriad.local (cable-b-36.sigecom.net + [63.69.210.36]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g929JBf01178 for ; Wed, 2 Oct 2002 11:19:11 +0200 +Received: from aquila.kamakiriad.local (aquila.kamakiriad.local + [192.168.1.3]) by kamakiriad.comamakiriad.com (8.11.6/8.11.6) with SMTP id + g929J2M08406 for ; Wed, 2 Oct 2002 04:19:02 -0500 +From: Brian Fahrlander +To: rpm-zzzlist@freshrpms.net +Subject: Re: use new apt to do null to RH8 upgrade? +Message-Id: <20021002041852.14c612cb.kilroy@kamakiriad.com> +In-Reply-To: <20021002105324.5ee715d2.matthias@egwn.net> +References: <20021001.558.00260600@www.dudex.net> + + <20021002030039.706c6eca.kilroy@kamakiriad.com> + <20021002105324.5ee715d2.matthias@egwn.net> +X-Mailer: Sylpheed version 0.8.3 (GTK+ 1.2.10; i386-redhat-linux) +X-Message-Flag: : Shame on you! You know Outlook is how viruses are spread! +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 04:18:52 -0500 +Date: Wed, 2 Oct 2002 04:18:52 -0500 + +On Wed, 2 Oct 2002 10:53:24 +0200, Matthias Saou wrote: + +> > Anyway, I have returned to Redhat 7.3 on my root filesystem (saved my +> > home directories, music and games on other partitions) and while I +> > have the 8.0 stuff in the list, everything I want to upgrade requires +> > 200+ RPMs. + + Yeah, but I try to 'take it easy' on your server. The golden rule of the internet: when you find a free resource, don't piss'em off! :) I really appreciate your work; you get done the things I wish I could, and I respect that. + +> Anyway, although I'd easily recommend upgrading 7.x to 7.3 using apt, I +> wouldn't for 7.x to 8.0 as they are C++ binary incompatible... and apt is +> entirely written in C++ and dynamically linked :-/ + + OK, I'll search for the ISOs on the one remaining site that isn't hammered. :) + +> Still, that doesn't explain a core dump :-( + + Sure: this is a linking issue, right? Right now I'm still pure-vanilla. I have the stock version of rpm/rpmlib/popt/etc and the recommended version of apt that you gave me. No, wait...there's no new code getting loaded. I don't know, either. It's been a long day. + +> > What's the inside secret here, or do I just start searching mirrors +> > for the ISO and get over it? +> +> Why "search"? There's more than enough to choose from here : +> http://freshrpms.net/mirrors/psyche.html + + The hunt continues- with a new field! (Actually I checked there yesterday, but it's worth another shot.) + + Thanks! + +------------------------------------------------------------------------ +Brian Fahrländer Linux Zealot, Conservative, and Technomad +Evansville, IN My Voyage: http://www.CounterMoon.com +ICQ 5119262 +------------------------------------------------------------------------ +Just machines, to make big decisions- programmed by fellas with +compassion and vision. We'll be clean when that work is done; +Eternally free and eternally young. Linux. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01224.62979c059bdc69eae460be6a91f0bf1a b/Ch3/datasets/spam/easy_ham/01224.62979c059bdc69eae460be6a91f0bf1a new file mode 100644 index 000000000..ab54d4f15 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01224.62979c059bdc69eae460be6a91f0bf1a @@ -0,0 +1,102 @@ +From rpm-list-admin@freshrpms.net Wed Oct 2 18:17:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C078416F03 + for ; Wed, 2 Oct 2002 18:17:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 18:17:51 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g92H6BK18308 for + ; Wed, 2 Oct 2002 18:06:11 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g92Gw1f18580; Wed, 2 Oct 2002 18:58:01 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g92GvUf14924 for + ; Wed, 2 Oct 2002 18:57:30 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: use new apt to do null to RH8 upgrade? +Message-Id: <20021002185728.7334502b.matthias@egwn.net> +In-Reply-To: <20021002.siy.77121800@www.dudex.net> +References: <20021002.siy.77121800@www.dudex.net> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 18:57:28 +0200 +Date: Wed, 2 Oct 2002 18:57:28 +0200 + +Once upon a time, ""Angles" wrote : + +> When I went all "Open Source", I stopped using my old partioning app +> (partition magic?). For the RH7 install I used FIPS (a couple times). +> Then ext3 came out and my old commercial partioning app is real old, so I +> ask what OS software can non-destructively repartition a HD so I can put +> /home on a seperate partition now? + +Parted is your friend! You can't do _everything_, the most limiting being +that you can't move the start of a partition, but it's quite powerful +nevertheless, and I've been very happy with it the few times I've had to +use it. + +> >If you didn't put /home on a separate partition, +> +> With winbloze 9x I used to deltree the winbloze dir and some "Program +> Files" dirs, and install "fresh" instead of upgrade, while saving my +> other data. Can this trick be used with this RH8 upgrade? Example rpm -e +> everything so all packages are gone, hit "reset" button and boot to +> redhat CDROM in admin (rescue?) mode, delete all those config files left, +> like "/etc/*", then do an install BUT NOT FORMAT THAT SINGLE PARTITION +> that I'm installing on. If I can hack the details, is this theory +> accurate, or will RH want to destructively install and elimate all +> existing files? + +You're really better off backuping all placed where you know you've hand +edited or installed some files. For me that's only /etc/, /root/ and +/home/. Then you reinstall cleanly, formating "/", put your /home/ files +back into place and you're ready to go. +That's the moment I usually realize I had a nifty tweak to a file in +/etc/sysconfig/network-scripts/ or some special parameters added to an +/etc/modules.conf entry... so I look at my backup and make the same change +again. The only thing where you can get stuck is the grub.conf files, +because although there's a /etc/grub.conf link, it's actually in +/boot/grub/ so you may want to copy it too if you have special kernel +parameters to save (I have to pass "pci=bios,biosirq" for one of my +computers to work for example). + +HTH, +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01225.394c24658bf3f9f8f741bcbc94ca017c b/Ch3/datasets/spam/easy_ham/01225.394c24658bf3f9f8f741bcbc94ca017c new file mode 100644 index 000000000..5234b85e5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01225.394c24658bf3f9f8f741bcbc94ca017c @@ -0,0 +1,124 @@ +From rpm-list-admin@freshrpms.net Wed Oct 2 21:15:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C19D816F16 + for ; Wed, 2 Oct 2002 21:15:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 21:15:46 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g92JeNK24434 for + ; Wed, 2 Oct 2002 20:40:23 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g92Jc0f24595; Wed, 2 Oct 2002 21:38:00 + +0200 +Received: from taz.localdomain (adsl-66-124-59-34.dsl.anhm01.pacbell.net + [66.124.59.34]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g92Jbkf24533 for ; Wed, 2 Oct 2002 21:37:46 +0200 +Received: by taz.localdomain (Postfix, from userid 500) id BBD8189D0; + Wed, 2 Oct 2002 12:36:02 -0700 (PDT) +From: Gary Peck +To: rpm-zzzlist@freshrpms.net +Subject: Re: alsa-driver.spec tweak for homemade kernels +Message-Id: <20021002193602.GC6266@taz.home.priv> +Mail-Followup-To: Gary Peck , + rpm-list@freshrpms.net +References: <3D9AA650.2000909@eecs.berkeley.edu> + <20021002100919.2e3168a8.matthias@rpmforge.net> +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="RnlQjJ0d97Da+TV1" +Content-Disposition: inline +In-Reply-To: <20021002100919.2e3168a8.matthias@rpmforge.net> +User-Agent: Mutt/1.4i +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 12:36:02 -0700 +Date: Wed, 2 Oct 2002 12:36:02 -0700 + + +--RnlQjJ0d97Da+TV1 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline + +On Wed, Oct 02, 2002 at 10:09:19AM +0200, Matthias Saou wrote: +> Well, I don't really find it consistent at all to use an rpm package built +> against something that wasn't installed through rpm :-/ + +Following that reasoning, I've been installing all my custom-built +kernels through rpm recently. I find it annoying, though, that +alsa-kernel, and similar packages, will only build for the currently +running kernel. + +So I've attached a patch to specify an alternate kernel by setting the +"TARGET_KERNEL" environment variable before running rpmbuild. You +still need to have the rpm for the specified kernel installed, but at +least it doesn't have to be currently running. It's kinda hackish, so +if someone has a better way to do this, let me know. + +gary + +--RnlQjJ0d97Da+TV1 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline; filename="alsa-driver-spec.patch" + +--- alsa-driver.spec.orig 2002-10-02 12:25:26.000000000 -0700 ++++ alsa-driver.spec 2002-10-01 21:23:19.000000000 -0700 +@@ -3,9 +3,12 @@ + # Comma separated list of cards for which to compile a driver + %define cards all + +-%define kunamer %(uname -r) +-%define kversion %(echo $(uname -r) | sed -e s/smp// -) +-%if %(uname -r | grep -c smp) ++%if %(printenv TARGET_KERNEL >/dev/null && echo -n 1 || echo -n 0) ++%define usekernel %(echo -n $TARGET_KERNEL) ++%endif ++%define kunamer %{!?usekernel: %(uname -r)}%{?usekernel} ++%define kversion %(echo %{kunamer} | sed -e s/smp// -) ++%if %(echo %{kunamer} | grep -c smp) + %{expand:%%define ksmp -smp} + %endif + %define karch %(rpm -q --qf '%%{arch}' kernel%{?ksmp}-%{kversion}) +@@ -77,6 +80,7 @@ + %{?_without_isapnp:--with-isapnp=no} \ + %{?_without_sequencer:--with-sequencer=no} \ + %{?_without_oss:--with-oss=no} \ ++ %{?usekernel:--with-kernel=/lib/modules/%{usekernel}/build} \ + --with-cards=%{cards} + make + +@@ -106,10 +109,10 @@ + rm -f %{buildroot}/etc/rc.d/init.d/alsasound + + %post -n alsa-kernel%{?ksmp} +-/sbin/depmod -a ++/sbin/depmod -a -F /boot/System.map-%{kunamer} %{kunamer} + + %postun -n alsa-kernel%{?ksmp} +-/sbin/depmod -a ++/sbin/depmod -a -F /boot/System.map-%{kunamer} %{kunamer} + + %clean + rm -rf %{buildroot} + +--RnlQjJ0d97Da+TV1-- + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01226.a6b2d7b7cf1bc0586ed8cb7ee055d67f b/Ch3/datasets/spam/easy_ham/01226.a6b2d7b7cf1bc0586ed8cb7ee055d67f new file mode 100644 index 000000000..c60994890 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01226.a6b2d7b7cf1bc0586ed8cb7ee055d67f @@ -0,0 +1,70 @@ +From rpm-list-admin@freshrpms.net Wed Oct 2 21:15:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C8F3216F03 + for ; Wed, 2 Oct 2002 21:15:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 21:15:44 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g92JaKK24316 for + ; Wed, 2 Oct 2002 20:36:20 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g92JX1f01557; Wed, 2 Oct 2002 21:33:01 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g92JWFf01113 + for ; Wed, 2 Oct 2002 21:32:15 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17wpFR-00049w-00 for rpm-list@freshrpms.net; + Wed, 02 Oct 2002 15:33:29 -0400 +X-Originating-Ip: [66.92.157.2] +From: "" Angles " Puglisi" +To: rpm-zzzlist@freshrpms.net +Subject: Re: use new apt to do null to RH8 upgrade? +Message-Id: <20021002.5P6.35437100@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 02 Oct 2002 19:35:48 +0000 +Date: Wed, 02 Oct 2002 19:35:48 +0000 + +Matthias Saou (matthias@egwn.net) wrote*: +>You're really better off backuping all placed where you know you've hand +>edited or installed some files. For me that's only /etc/, /root/ and +>/home/. Then you reinstall cleanly, formating "/", put your /home/ files +>back into place and you're ready to go. + +Matthias I gotta believe you, I've been using your RPMs for some time now :) That's +the way I'll do it. A clean start but with the old configs at the ready for diff- +ing when needed. I'll find some old HD for those media files. + +-- +That's "angle" as in geometry. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01227.0c0989577c7476c986aa5328e4ef6118 b/Ch3/datasets/spam/easy_ham/01227.0c0989577c7476c986aa5328e4ef6118 new file mode 100644 index 000000000..2b3804f37 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01227.0c0989577c7476c986aa5328e4ef6118 @@ -0,0 +1,88 @@ +From rpm-list-admin@freshrpms.net Thu Oct 3 12:21:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 246BD16F16 + for ; Thu, 3 Oct 2002 12:21:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:21:41 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g92KotK28220 for + ; Wed, 2 Oct 2002 21:50:55 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g92Kk2f12664; Wed, 2 Oct 2002 22:46:02 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g92KjBf05505 for ; Wed, 2 Oct 2002 22:45:12 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: alsa-driver.spec tweak for homemade kernels +Message-Id: <20021002224504.13c35679.matthias@rpmforge.net> +In-Reply-To: <20021002193602.GC6266@taz.home.priv> +References: <3D9AA650.2000909@eecs.berkeley.edu> + <20021002100919.2e3168a8.matthias@rpmforge.net> + <20021002193602.GC6266@taz.home.priv> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 22:45:04 +0200 +Date: Wed, 2 Oct 2002 22:45:04 +0200 + +Once upon a time, Gary wrote : + +> On Wed, Oct 02, 2002 at 10:09:19AM +0200, Matthias Saou wrote: +> > Well, I don't really find it consistent at all to use an rpm package +> > built against something that wasn't installed through rpm :-/ +> +> Following that reasoning, I've been installing all my custom-built +> kernels through rpm recently. I find it annoying, though, that +> alsa-kernel, and similar packages, will only build for the currently +> running kernel. +> +> So I've attached a patch to specify an alternate kernel by setting the +> "TARGET_KERNEL" environment variable before running rpmbuild. You +> still need to have the rpm for the specified kernel installed, but at +> least it doesn't have to be currently running. It's kinda hackish, so +> if someone has a better way to do this, let me know. + +That idea looks good although it maybe needs to be tweaked a bit more (what +you sent doesn't support packages named "kernel-smp"). I'd also prefer a +cleaner way than the env variable, and preferrably not editing the spec... +probably "--define 'target 2.4.xx-xx' --with smp". Sound good enough? +The BuildRequires on "kernel-source" will also need to be removed because +it won't necessarily need to be true, and that does bug me a bit :-/ + +More ideas are welcome. +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.08 0.06 0.03 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01228.8d68492f313838ba1c667c04e0886f86 b/Ch3/datasets/spam/easy_ham/01228.8d68492f313838ba1c667c04e0886f86 new file mode 100644 index 000000000..8a4d2d75c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01228.8d68492f313838ba1c667c04e0886f86 @@ -0,0 +1,74 @@ +From rpm-list-admin@freshrpms.net Thu Oct 3 12:21:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C59E816F03 + for ; Thu, 3 Oct 2002 12:21:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:21:37 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g92Ko3K28200 for + ; Wed, 2 Oct 2002 21:50:04 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g92Kl1f15841; Wed, 2 Oct 2002 22:47:01 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g92KkQf15317 for ; Wed, 2 Oct 2002 22:46:26 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: use new apt to do null to RH8 upgrade? +Message-Id: <20021002224620.6d4fc92f.matthias@rpmforge.net> +In-Reply-To: <20021002.5P6.35437100@www.dudex.net> +References: <20021002.5P6.35437100@www.dudex.net> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 22:46:20 +0200 +Date: Wed, 2 Oct 2002 22:46:20 +0200 + +Once upon a time, ""Angles" wrote : + +> Matthias Saou (matthias@egwn.net) wrote*: +> >You're really better off backuping all placed where you know you've hand +> >edited or installed some files. For me that's only /etc/, /root/ and +> >/home/. Then you reinstall cleanly, formating "/", put your /home/ files +> >back into place and you're ready to go. +> +> Matthias I gotta believe you, I've been using your RPMs for some time now +> :) That's the way I'll do it. + +I'm no "messiah", just do what you think suits you the best :-) + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.05 0.06 0.03 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01229.ac0aaae3ef49b84eee5d0749fa140f0b b/Ch3/datasets/spam/easy_ham/01229.ac0aaae3ef49b84eee5d0749fa140f0b new file mode 100644 index 000000000..f64755315 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01229.ac0aaae3ef49b84eee5d0749fa140f0b @@ -0,0 +1,77 @@ +From rpm-list-admin@freshrpms.net Thu Oct 3 12:23:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 15D1616F1B + for ; Thu, 3 Oct 2002 12:23:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:23:13 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g937G3K18755 for + ; Thu, 3 Oct 2002 08:16:06 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g93757f09150; Thu, 3 Oct 2002 09:05:07 + +0200 +Received: from snickers.hotpop.com (snickers.hotpop.com [204.57.55.49]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g9374Bf04920 for + ; Thu, 3 Oct 2002 09:04:12 +0200 +Received: from punkass.com (kubrick.hotpop.com [204.57.55.16]) by + snickers.hotpop.com (Postfix) with SMTP id D5538728EF for + ; Thu, 3 Oct 2002 07:04:00 +0000 (UTC) +Received: from punkass.com (unknown [80.178.1.203]) by smtp-2.hotpop.com + (Postfix) with ESMTP id 0FE671B84A7 for ; + Thu, 3 Oct 2002 07:03:23 +0000 (UTC) +Message-Id: <3D9BEC4A.2050900@punkass.com> +From: Roi Dayan +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830 +X-Accept-Language: en-us, en, he +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Mplayer +References: <20021002.siy.77121800@www.dudex.net> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Hotpop: ----------------------------------------------- Sent By + HotPOP.com FREE Email Get your FREE POP email at www.HotPOP.com + ----------------------------------------------- +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 03 Oct 2002 10:05:46 +0300 +Date: Thu, 03 Oct 2002 10:05:46 +0300 + +Hey + +Since I upgraded to redhat8 mplayer -vo sdl isnt working for me +It gives me black screen and I only hear sound. + +can anyone help me with this ? + +btw, +also the source rpm specified that I can do --without libdv +but it didn't work, worked for lirc and arts. + +Thanks, +Roi + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01230.8ff878325b7c108b20c4d9d609c511b6 b/Ch3/datasets/spam/easy_ham/01230.8ff878325b7c108b20c4d9d609c511b6 new file mode 100644 index 000000000..9d7080a59 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01230.8ff878325b7c108b20c4d9d609c511b6 @@ -0,0 +1,82 @@ +From rpm-list-admin@freshrpms.net Thu Oct 3 12:25:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A42D416F6A + for ; Thu, 3 Oct 2002 12:24:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:24:44 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g939ENK22296 for + ; Thu, 3 Oct 2002 10:14:25 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g93961f06525; Thu, 3 Oct 2002 11:06:01 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g9395Bf06311 for + ; Thu, 3 Oct 2002 11:05:11 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Mplayer +Message-Id: <20021003110510.1c619b15.matthias@rpmforge.net> +In-Reply-To: <3D9BEC4A.2050900@punkass.com> +References: <20021002.siy.77121800@www.dudex.net> + <3D9BEC4A.2050900@punkass.com> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 11:05:10 +0200 +Date: Thu, 3 Oct 2002 11:05:10 +0200 + +Once upon a time, Roi wrote : + +> Since I upgraded to redhat8 mplayer -vo sdl isnt working for me +> It gives me black screen and I only hear sound. +> +> can anyone help me with this ? + +I'll test this as soon as I can. + +> btw, +> also the source rpm specified that I can do --without libdv +> but it didn't work, worked for lirc and arts. + +Should be fixed : You probably had libdv-devel installed and MPlayer +automatically detected it. The new spec file explicitely passes +--disable-libdv when the package is rebuilt with --without libdv. + +Grab the "fr2.1" spec from here : +http://freshrpms.net/builds/index.html?build=mplayer + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.02 0.10 0.15 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01231.6586e5650d4dc69bff659d38a695721c b/Ch3/datasets/spam/easy_ham/01231.6586e5650d4dc69bff659d38a695721c new file mode 100644 index 000000000..624d46519 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01231.6586e5650d4dc69bff659d38a695721c @@ -0,0 +1,92 @@ +From rpm-list-admin@freshrpms.net Thu Oct 3 12:25:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2707916F6D + for ; Thu, 3 Oct 2002 12:24:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:24:58 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g93BDgK26115 for + ; Thu, 3 Oct 2002 12:13:42 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g93BA2f21504; Thu, 3 Oct 2002 13:10:02 + +0200 +Received: from zeus.scania.co.za ([196.41.10.170]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g93B8uf17854 for + ; Thu, 3 Oct 2002 13:08:57 +0200 +Received: from leenx.co.za ([10.1.1.130]) by zeus.scania.co.za + (8.11.6/8.11.2) with ESMTP id g93B2U826023 for ; + Thu, 3 Oct 2002 13:02:35 +0200 +Message-Id: <3D9C23C5.9090203@leenx.co.za> +From: "C.Lee Taylor" +Organization: LeeNX +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020607 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: alsa-driver.spec tweak for homemade kernels ... +References: <20021003100001.29805.19626.Mailman@auth02> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 03 Oct 2002 13:02:29 +0200 +Date: Thu, 03 Oct 2002 13:02:29 +0200 + + >> > Well, I don't really find it consistent at all to use an rpm package + >> > built against something that wasn't installed through rpm :-/ + >> + >> Following that reasoning, I've been installing all my custom-built + >> kernels through rpm recently. I find it annoying, though, that + >> alsa-kernel, and similar packages, will only build for the currently + >> running kernel. + >> + >> So I've attached a patch to specify an alternate kernel by setting the + >> "TARGET_KERNEL" environment variable before running rpmbuild. You + >> still need to have the rpm for the specified kernel installed, but at + >> least it doesn't have to be currently running. It's kinda hackish, so + >> if someone has a better way to do this, let me know. + > + >That idea looks good although it maybe needs to be tweaked a bit more (what + >you sent doesn't support packages named "kernel-smp"). I'd also prefer a + >cleaner way than the env variable, and preferrably not editing the spec... + >probably "--define 'target 2.4.xx-xx' --with smp". Sound good enough? + >The BuildRequires on "kernel-source" will also need to be removed because + >it won't necessarily need to be true, and that does bug me a bit :-/ + + Me and my kernel rpm builds ... this all works along the same idea I have +been aiming for, but the freaking RedHat Kernel srpms still have been stump +... + + If we could get this and the alsa driver stuff working, it would be whole +lot easier to try out a newer kernel ... but then the size of these rpms +are huge, at least for us n^1 world courties ... ;-{ ... + + I will keep watching and hoping that somebody comes up with a great working +idea ... + +Thanks guys. +Mailed +Lee + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01232.2f44f5a2186e97cf4d65cf191d98e646 b/Ch3/datasets/spam/easy_ham/01232.2f44f5a2186e97cf4d65cf191d98e646 new file mode 100644 index 000000000..bfc77237d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01232.2f44f5a2186e97cf4d65cf191d98e646 @@ -0,0 +1,75 @@ +From rpm-list-admin@freshrpms.net Thu Oct 3 16:02:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E69A916F03 + for ; Thu, 3 Oct 2002 16:02:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 16:02:51 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g93DOYK30582 for + ; Thu, 3 Oct 2002 14:24:35 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g93DL2f25099; Thu, 3 Oct 2002 15:21:02 + +0200 +Received: from chip.ath.cx (cs144080.pp.htv.fi [213.243.144.80]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g93DKqf25049 for + ; Thu, 3 Oct 2002 15:20:53 +0200 +Received: from chip.ath.cx (localhost [127.0.0.1]) by chip.ath.cx + (8.12.5/8.12.2) with ESMTP id g93DKkSA014138 for ; + Thu, 3 Oct 2002 16:20:46 +0300 +Received: from localhost (pmatilai@localhost) by chip.ath.cx + (8.12.5/8.12.5/Submit) with ESMTP id g93DKk00014134 for + ; Thu, 3 Oct 2002 16:20:46 +0300 +X-Authentication-Warning: chip.ath.cx: pmatilai owned process doing -bs +From: Panu Matilainen +X-X-Sender: pmatilai@chip.ath.cx +To: rpm-zzzlist@freshrpms.net +Subject: Re: Python 2.2 site libs? +In-Reply-To: <1810000.1033647373@spawn.se7en.org> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 16:20:46 +0300 (EEST) +Date: Thu, 3 Oct 2002 16:20:46 +0300 (EEST) + +On Fri, 4 Oct 2002, Mark Derricutt wrote: + +> Anyone know where one could get rpms for alot of the python libraries for +> 2.2? +> +> Its darn annoying the way RH ship python 1.5.2 and python 2.2 (as python2) +> and libs that only work with one or the other :( +> +> esp. the pgdb and xml modules. +> +> Anyone know why Red Hat insist on sticking with python 1.5.2? + +They want to preserve binary compatibility for all .x releases. Red Hat +8.0 has python 2.2 as default. + +-- + - Panu - + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01233.e83467b2f6c65830f00860df89f3b0c5 b/Ch3/datasets/spam/easy_ham/01233.e83467b2f6c65830f00860df89f3b0c5 new file mode 100644 index 000000000..14fa43ef3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01233.e83467b2f6c65830f00860df89f3b0c5 @@ -0,0 +1,99 @@ +From rpm-list-admin@freshrpms.net Thu Oct 3 16:02:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BA94516F17 + for ; Thu, 3 Oct 2002 16:02:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 16:02:53 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g93DOZK30584 for + ; Thu, 3 Oct 2002 14:24:40 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g93DM6f02996; Thu, 3 Oct 2002 15:22:06 + +0200 +Received: from mail.phy.duke.edu (mail.phy.duke.edu [152.3.182.2]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g93DKbf24978 for + ; Thu, 3 Oct 2002 15:20:37 +0200 +Received: from opus.phy.duke.edu (opus.phy.duke.edu [152.3.182.42]) by + mail.phy.duke.edu (Postfix) with ESMTP id D477030199 for + ; Thu, 3 Oct 2002 09:20:35 -0400 (EDT) +Subject: Re: Python 2.2 site libs? +From: seth vidal +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <1810000.1033647373@spawn.se7en.org> +References: <1810000.1033647373@spawn.se7en.org> +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="=-ITC4wxYrfSWQCmQFalKh" +X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) +Message-Id: <1033651236.19916.1.camel@opus> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 03 Oct 2002 09:20:33 -0400 +Date: 03 Oct 2002 09:20:33 -0400 + + +--=-ITC4wxYrfSWQCmQFalKh +Content-Type: text/plain +Content-Transfer-Encoding: quoted-printable + +On Thu, 2002-10-03 at 08:16, Mark Derricutt wrote: +> Anyone know where one could get rpms for alot of the python libraries for= +=20 +> 2.2? +>=20 +> Its darn annoying the way RH ship python 1.5.2 and python 2.2 (as python2= +)=20 +> and libs that only work with one or the other :( +>=20 +> esp. the pgdb and xml modules. +>=20 +> Anyone know why Red Hat insist on sticking with python 1.5.2? +> + +they are on python 2.2 for 8.0 - but they don't like to break +compatibility during major releases. + +therefore: 6.X was 1.5.2 b/c that was current +7.x was 1.5.2 b/c that was current when 7.0 was released. + +-sv + + +--=-ITC4wxYrfSWQCmQFalKh +Content-Type: application/pgp-signature; name=signature.asc +Content-Description: This is a digitally signed message part + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQA9nEQh1Aj3x2mIbMcRAg/FAJ9MNwAv4hzpR4gjkMGGtGUjFKidQQCgk0ZE +DlQVAibjHkM4H9ZBYzs0xb4= +=8gIA +-----END PGP SIGNATURE----- + +--=-ITC4wxYrfSWQCmQFalKh-- + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01234.868bd8bcbcca009a5856a8ce6da3f593 b/Ch3/datasets/spam/easy_ham/01234.868bd8bcbcca009a5856a8ce6da3f593 new file mode 100644 index 000000000..55ed6f6c0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01234.868bd8bcbcca009a5856a8ce6da3f593 @@ -0,0 +1,72 @@ +From rpm-list-admin@freshrpms.net Thu Oct 3 19:28:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EC13016F16 + for ; Thu, 3 Oct 2002 19:28:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 19:28:32 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g93H4gK06207 for + ; Thu, 3 Oct 2002 18:04:43 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g93H04f17315; Thu, 3 Oct 2002 19:00:04 + +0200 +Received: from swampfox.owlriver.com (swampfox.owlriver.com + [206.21.107.147]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g93GxHf13656 for ; Thu, 3 Oct 2002 18:59:17 +0200 +Received: from localhost (localhost [127.0.0.1]) by swampfox.owlriver.com + (8.11.6/8.11.6) with ESMTP id g93GxFB24532 for ; + Thu, 3 Oct 2002 12:59:15 -0400 +From: R P Herrold +To: rpm-zzzlist@freshrpms.net +Subject: Re: f-rpm] Python 2.2 site libs? +In-Reply-To: <1810000.1033647373@spawn.se7en.org> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 12:59:15 -0400 (EDT) +Date: Thu, 3 Oct 2002 12:59:15 -0400 (EDT) + +On Fri, 4 Oct 2002, Mark Derricutt wrote: + +> Anyone know why Red Hat insist on sticking with python 1.5.2? + +ehhh? IANAHNBARHE -- RHL 8.0 is fully python-2, with a back +compatability v 1 shim set. This has been working and freely +available in their Raw Hide for 5 months for early adopters +and back-porters. + +Red Hat maintains binary compatability across major releases. +Its server management tools are heavily Python, and becoming +more so. + +To have added mid-stream the python-2 series in the RHL 7.x +series would have been quite disruptive to an existing +installed base. + +-- Russ Herrold + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01235.ba9c966dd1894a1206da779f572da412 b/Ch3/datasets/spam/easy_ham/01235.ba9c966dd1894a1206da779f572da412 new file mode 100644 index 000000000..41de21eb4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01235.ba9c966dd1894a1206da779f572da412 @@ -0,0 +1,80 @@ +From rpm-list-admin@freshrpms.net Fri Oct 4 10:57:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9DCAD16F03 + for ; Fri, 4 Oct 2002 10:57:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 10:57:56 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g93LUIK15669 for + ; Thu, 3 Oct 2002 22:30:18 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g93LQ1f14974; Thu, 3 Oct 2002 23:26:01 + +0200 +Received: from mail.j2solutions.net (seattle.connectednw.com + [216.163.77.13]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g93LOxf14678 for ; Thu, 3 Oct 2002 23:24:59 +0200 +Received: from labmail.redmond.corp.microsoft.com (seattle.connectednw.com + [::ffff:216.163.77.13]) (AUTH: CRAM-MD5 hosting@j2solutions.net) by + mail.j2solutions.net with esmtp; Thu, 03 Oct 2002 14:24:58 -0700 +From: Jesse Keating +To: rpm-zzzlist@freshrpms.net +Subject: Re: K3B +Message-Id: <20021003142457.77f1d07b.hosting@j2solutions.net> +In-Reply-To: <3D9CCF54.5070909@free.fr> +References: <3D9CCF54.5070909@free.fr> +Organization: j2Solutions +X-Mailer: Sylpheed version 0.8.1claws (GTK+ 1.2.10; ) +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 14:24:57 -0700 +Date: Thu, 3 Oct 2002 14:24:57 -0700 + +On Fri, 04 Oct 2002 01:14:28 +0200 +Vincent wrote: + +# Hello, +# +# I'm looking for the package k3b for the redhat 8.0, Does anyone know +# +# where to get it ? I tried to compile but it did an error message: + +I've been working on a .src.rpm for it. Their rpm and spec file is +very dirty, so I"m cleaning it up. I think I have all the build-req's +and the install req's sorted out, but I need more testers. + +http://geek.j2solutions.net/rpms/k3b/ + +Please try it. + +-- +Jesse Keating +j2Solutions.net +Mondo DevTeam (www.mondorescue.org) + +Was I helpful? Let others know: + http://svcs.affero.net/rm.php?r=jkeating + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01236.80295013ea9517181a3a42ad0d4a7f63 b/Ch3/datasets/spam/easy_ham/01236.80295013ea9517181a3a42ad0d4a7f63 new file mode 100644 index 000000000..32b35f831 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01236.80295013ea9517181a3a42ad0d4a7f63 @@ -0,0 +1,78 @@ +From rpm-list-admin@freshrpms.net Fri Oct 4 10:58:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A78E816F03 + for ; Fri, 4 Oct 2002 10:58:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 10:58:04 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g93LqTK16522 for + ; Thu, 3 Oct 2002 22:52:29 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g93Lm1f20190; Thu, 3 Oct 2002 23:48:01 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g93LlLf14306 for + ; Thu, 3 Oct 2002 23:47:21 +0200 +Received: from cs78130064.pp.htv.fi ([62.78.130.64]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g93LlBU05318 for ; + Fri, 4 Oct 2002 00:47:11 +0300 (EETDST) +Subject: apt.conf suggestion +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: rpm-zzzlist@freshrpms.net +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1033681684.3133.100.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g93LlLf14306 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 04 Oct 2002 00:48:03 +0300 +Date: 04 Oct 2002 00:48:03 +0300 + +Hi, + +how about applying this to the default apt.conf shipped with the +freshrpms.net apt package? I found it a bit weird when the behaviour +changed between the old 0.3.x and the new 0.5.x versions so that when +doing a "apt-get upgrade", it wouldn't tell me *which* packages were to +be upgraded, just that it was about to upgrade something... + +--- apt.conf 2002-09-27 14:58:28.000000000 +0300 ++++ apt.conf 2002-10-03 21:38:05.000000000 +0300 +@@ -4,6 +4,7 @@ + Get + { + Download-Only "false"; ++ Show-Upgraded "true"; + }; + + }; + +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01237.2707518b441177e2f7e8497b63028981 b/Ch3/datasets/spam/easy_ham/01237.2707518b441177e2f7e8497b63028981 new file mode 100644 index 000000000..d2769bfa6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01237.2707518b441177e2f7e8497b63028981 @@ -0,0 +1,74 @@ +From rpm-list-admin@freshrpms.net Fri Oct 4 10:58:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4B68E16F03 + for ; Fri, 4 Oct 2002 10:58:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 10:58:10 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g93M3PK16864 for + ; Thu, 3 Oct 2002 23:03:26 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g93Lw1f32639; Thu, 3 Oct 2002 23:58:01 + +0200 +Received: from drone5.qsi.net.nz (drone5-svc-skyt.qsi.net.nz + [202.89.128.5]) by egwn.net (8.11.6/8.11.6/EGWN) with SMTP id g93Lvif29183 + for ; Thu, 3 Oct 2002 23:57:45 +0200 +Received: (qmail 5288 invoked by uid 0); 3 Oct 2002 21:57:41 -0000 +Received: from unknown (HELO se7en.org) ([202.89.145.8]) (envelope-sender + ) by 0 (qmail-ldap-1.03) with SMTP for + ; 3 Oct 2002 21:57:41 -0000 +Received: from spawn.se7en.org ([10.0.0.3]) by se7en.org with esmtp (Exim + 3.36 #1 (Debian)) id 17xSGN-0004od-00 for ; + Sat, 05 Oct 2002 01:13:04 +1200 +From: Mark Derricutt +To: rpm-zzzlist@freshrpms.net +Subject: Re: Python 2.2 site libs? +Message-Id: <5520000.1033682218@spawn.se7en.org> +In-Reply-To: +References: +X-Mailer: Mulberry/2.2.1 (Linux/x86) +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Content-Disposition: inline +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 04 Oct 2002 09:57:00 +1200 +Date: Fri, 04 Oct 2002 09:57:00 +1200 + +Ahh sweet. Theres a reason for me to upgrade then :-) + +--On Thursday, October 03, 2002 16:20:46 +0300 Panu Matilainen + wrote: + +> They want to preserve binary compatibility for all .x releases. Red Hat +> 8.0 has python 2.2 as default. + + + + -- \m/ -- + "...if I seem super human I have been misunderstood." (c) Dream Theater + mark@talios.com - ICQ: 1934853 JID: talios@myjabber.net + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01238.ccc75b68c2caed8cb251f188164ce8d8 b/Ch3/datasets/spam/easy_ham/01238.ccc75b68c2caed8cb251f188164ce8d8 new file mode 100644 index 000000000..45a7e5a09 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01238.ccc75b68c2caed8cb251f188164ce8d8 @@ -0,0 +1,87 @@ +From rpm-list-admin@freshrpms.net Fri Oct 4 10:59:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4399516F18 + for ; Fri, 4 Oct 2002 10:59:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 10:59:51 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g93NNXK20294 for + ; Fri, 4 Oct 2002 00:23:33 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g93NL2f14788; Fri, 4 Oct 2002 01:21:02 + +0200 +Received: from mel-rto6.wanadoo.fr (smtp-out-6.wanadoo.fr [193.252.19.25]) + by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g93NKYf14698 for + ; Fri, 4 Oct 2002 01:20:34 +0200 +Received: from mel-rta9.wanadoo.fr (193.252.19.69) by mel-rto6.wanadoo.fr + (6.5.007) id 3D760C25010C8EC7 for rpm-list@freshrpms.net; Fri, + 4 Oct 2002 01:20:28 +0200 +Received: from free.fr (80.13.203.123) by mel-rta9.wanadoo.fr (6.5.007) id + 3D80120400D13925 for rpm-list@freshrpms.net; Fri, 4 Oct 2002 01:20:28 + +0200 +Message-Id: <3D9CEE0A.9030400@free.fr> +From: Vincent +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020826 +X-Accept-Language: en-us, en, fr +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: K3B +References: <3D9CCF54.5070909@free.fr> + <20021003142457.77f1d07b.hosting@j2solutions.net> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 04 Oct 2002 03:25:30 +0200 +Date: Fri, 04 Oct 2002 03:25:30 +0200 + +Jesse Keating wrote: + +>On Fri, 04 Oct 2002 01:14:28 +0200 +>Vincent wrote: +> +># Hello, +># +># I'm looking for the package k3b for the redhat 8.0, Does anyone know +># +># where to get it ? I tried to compile but it did an error message: +> +>I've been working on a .src.rpm for it. Their rpm and spec file is +>very dirty, so I"m cleaning it up. I think I have all the build-req's +>and the install req's sorted out, but I need more testers. +> +>http://geek.j2solutions.net/rpms/k3b/ +> +>Please try it. +> +> +> +If I get troubles with the .tar.gz source file compilation, will it work +with the .src.rpm source file compilation ? +If it will, how do I manage with a .src.rpm file, sorry, I don't remeber :( + +Thanks. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01239.366f4cc20cf91bd48ec1645f27dc35b3 b/Ch3/datasets/spam/easy_ham/01239.366f4cc20cf91bd48ec1645f27dc35b3 new file mode 100644 index 000000000..466a9fa9a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01239.366f4cc20cf91bd48ec1645f27dc35b3 @@ -0,0 +1,75 @@ +From rpm-list-admin@freshrpms.net Fri Oct 4 10:59:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CB70E16F17 + for ; Fri, 4 Oct 2002 10:59:43 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 10:59:43 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g93MWhK17771 for + ; Thu, 3 Oct 2002 23:32:43 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g93MR1f30385; Fri, 4 Oct 2002 00:27:01 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g93MQSf26521 for ; Fri, 4 Oct 2002 00:26:29 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: apt.conf suggestion +Message-Id: <20021004002618.1b352b30.matthias@rpmforge.net> +In-Reply-To: <1033681684.3133.100.camel@bobcat.ods.org> +References: <1033681684.3133.100.camel@bobcat.ods.org> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 4 Oct 2002 00:26:18 +0200 +Date: Fri, 4 Oct 2002 00:26:18 +0200 + +Once upon a time, Ville wrote : + +> how about applying this to the default apt.conf shipped with the +> freshrpms.net apt package? I found it a bit weird when the behaviour +> changed between the old 0.3.x and the new 0.5.x versions so that when +> doing a "apt-get upgrade", it wouldn't tell me *which* packages were to +> be upgraded, just that it was about to upgrade something... + +Indeed, I found that strange too, then I noticed the "-u" switch and used +that... but your solution is much better :-) The next apt build will +incorporate this change (not worth a rebuild for this, and as some +relatively important cnc7 bugs are currently being fixed, I'd say cnc8 +isn't far off!). + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.02 0.06 0.10 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01240.606580f695bf5dcf324240db2776def8 b/Ch3/datasets/spam/easy_ham/01240.606580f695bf5dcf324240db2776def8 new file mode 100644 index 000000000..cebf9e219 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01240.606580f695bf5dcf324240db2776def8 @@ -0,0 +1,78 @@ +From rpm-list-admin@freshrpms.net Fri Oct 4 10:59:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3E9E616F03 + for ; Fri, 4 Oct 2002 10:59:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 10:59:54 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g93Nb5K20773 for + ; Fri, 4 Oct 2002 00:37:06 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g93NY1f11198; Fri, 4 Oct 2002 01:34:01 + +0200 +Received: from mail.j2solutions.net (seattle.connectednw.com + [216.163.77.13]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g93NXjf10844 for ; Fri, 4 Oct 2002 01:33:46 +0200 +Received: from labmail.redmond.corp.microsoft.com (seattle.connectednw.com + [::ffff:216.163.77.13]) (AUTH: CRAM-MD5 hosting@j2solutions.net) by + mail.j2solutions.net with esmtp; Thu, 03 Oct 2002 16:33:43 -0700 +From: Jesse Keating +To: rpm-zzzlist@freshrpms.net +Subject: Re: K3B +Message-Id: <20021003163343.606db2bf.hosting@j2solutions.net> +In-Reply-To: <3D9CEE0A.9030400@free.fr> +References: <3D9CCF54.5070909@free.fr> + <20021003142457.77f1d07b.hosting@j2solutions.net> + <3D9CEE0A.9030400@free.fr> +Organization: j2Solutions +X-Mailer: Sylpheed version 0.8.1claws (GTK+ 1.2.10; ) +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 16:33:43 -0700 +Date: Thu, 3 Oct 2002 16:33:43 -0700 + +On Fri, 04 Oct 2002 03:25:30 +0200 +Vincent wrote: + +# If I get troubles with the .tar.gz source file compilation, will it +# work with the .src.rpm source file compilation ? +# If it will, how do I manage with a .src.rpm file, sorry, I don't +# remeber :( + +The .src.rpm will prompt you for what packages you need to complete +the compile. + +rpmbuild --rebuild --target=$arch file.src.rpm + +-- +Jesse Keating +j2Solutions.net +Mondo DevTeam (www.mondorescue.org) + +Was I helpful? Let others know: + http://svcs.affero.net/rm.php?r=jkeating + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01241.6256684c417b030200ac2792ec46aae4 b/Ch3/datasets/spam/easy_ham/01241.6256684c417b030200ac2792ec46aae4 new file mode 100644 index 000000000..9ff7b1cf1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01241.6256684c417b030200ac2792ec46aae4 @@ -0,0 +1,76 @@ +From rpm-list-admin@freshrpms.net Fri Oct 4 11:00:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A535616F03 + for ; Fri, 4 Oct 2002 11:00:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:00:40 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g941oUK29944 for + ; Fri, 4 Oct 2002 02:50:30 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g941m1f31311; Fri, 4 Oct 2002 03:48:01 + +0200 +Received: from smtprelay9.dc2.adelphia.net (smtprelay9.dc2.adelphia.net + [64.8.50.53]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g941lXf28542 + for ; Fri, 4 Oct 2002 03:47:34 +0200 +Received: from [192.168.1.2] ([24.50.195.5]) by + smtprelay9.dc2.adelphia.net (Netscape Messaging Server 4.15) with ESMTP id + H3FOZ301.09V for ; Thu, 3 Oct 2002 21:47:27 -0400 +Subject: Re: K3B +From: Dale Kosan +To: rpm-zzzlist +In-Reply-To: <20021003163343.606db2bf.hosting@j2solutions.net> +References: <3D9CCF54.5070909@free.fr> + <20021003142457.77f1d07b.hosting@j2solutions.net> + <3D9CEE0A.9030400@free.fr> + <20021003163343.606db2bf.hosting@j2solutions.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1033696039.2551.0.camel@gandalf> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 03 Oct 2002 21:47:18 -0400 +Date: 03 Oct 2002 21:47:18 -0400 + +checking build system type... i686-pc-linux-gnu +checking host system type... i686-pc-linux-gnu +checking target system type... Invalid configuration +`athalon-redhat-linux': machine `athalon-redhat' not recognized +configure: error: /bin/sh admin/config.sub athalon-redhat-linux failed +error: Bad exit status from /home/dale/rpmbuild/tmp/rpm-tmp.26673 +(%prep) + + +RPM build errors: + user jkeating does not exist - using root + group jkeating does not exist - using root + user jkeating does not exist - using root + group jkeating does not exist - using root + Bad exit status from /home/dale/rpmbuild/tmp/rpm-tmp.26673 (%prep) +[dale@gandalf dale]$ + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01242.813fdb697bdf7abcc40b61a31364ea94 b/Ch3/datasets/spam/easy_ham/01242.813fdb697bdf7abcc40b61a31364ea94 new file mode 100644 index 000000000..a5d4ec1a9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01242.813fdb697bdf7abcc40b61a31364ea94 @@ -0,0 +1,61 @@ +From rpm-list-admin@freshrpms.net Fri Oct 4 11:00:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4387F16F16 + for ; Fri, 4 Oct 2002 11:00:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:00:42 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g941vKK30200 for + ; Fri, 4 Oct 2002 02:57:21 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g941s1f27516; Fri, 4 Oct 2002 03:54:01 + +0200 +Received: from smtprelay8.dc2.adelphia.net (smtprelay8.dc2.adelphia.net + [64.8.50.40]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g941qnf22240 + for ; Fri, 4 Oct 2002 03:52:49 +0200 +Received: from [192.168.1.2] ([24.50.195.5]) by + smtprelay8.dc2.adelphia.net (Netscape Messaging Server 4.15) with ESMTP id + H3FP7S02.MBC for ; Thu, 3 Oct 2002 21:52:40 -0400 +Subject: Re: K3B +From: Dale Kosan +To: rpm-zzzlist +In-Reply-To: <1033696039.2551.0.camel@gandalf> +References: <3D9CCF54.5070909@free.fr> + <20021003142457.77f1d07b.hosting@j2solutions.net> + <3D9CEE0A.9030400@free.fr> + <20021003163343.606db2bf.hosting@j2solutions.net> + <1033696039.2551.0.camel@gandalf> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1033696352.2552.3.camel@gandalf> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 03 Oct 2002 21:52:32 -0400 +Date: 03 Oct 2002 21:52:32 -0400 + +oops, I am bad, I need to learn how to spell...... + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01243.4288f9b90d18390df79cd4d6f95feee5 b/Ch3/datasets/spam/easy_ham/01243.4288f9b90d18390df79cd4d6f95feee5 new file mode 100644 index 000000000..370a5a4a4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01243.4288f9b90d18390df79cd4d6f95feee5 @@ -0,0 +1,104 @@ +From rpm-list-admin@freshrpms.net Fri Oct 4 11:01:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 17B7216F16 + for ; Fri, 4 Oct 2002 11:01:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:01:13 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g946jjK07048 for + ; Fri, 4 Oct 2002 07:45:45 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g946i1f01474; Fri, 4 Oct 2002 08:44:01 + +0200 +Received: from babyruth.hotpop.com (babyruth.hotpop.com [204.57.55.14]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g946hHf30715 for + ; Fri, 4 Oct 2002 08:43:17 +0200 +Received: from punkass.com (kubrick.hotpop.com [204.57.55.16]) by + babyruth.hotpop.com (Postfix) with SMTP id 4C928211394 for + ; Fri, 4 Oct 2002 06:42:52 +0000 (UTC) +Received: from punkass.com (unknown [80.178.1.203]) by smtp-2.hotpop.com + (Postfix) with ESMTP id 786AC1B8421 for ; + Fri, 4 Oct 2002 06:42:11 +0000 (UTC) +Message-Id: <3D9D38DA.1040600@punkass.com> +From: Roi Dayan +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830 +X-Accept-Language: en-us, en, he +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: Mplayer +References: <20021002.siy.77121800@www.dudex.net> + <3D9BEC4A.2050900@punkass.com> + <20021003110510.1c619b15.matthias@rpmforge.net> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Hotpop: ----------------------------------------------- Sent By + HotPOP.com FREE Email Get your FREE POP email at www.HotPOP.com + ----------------------------------------------- +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 04 Oct 2002 09:44:42 +0300 +Date: Fri, 04 Oct 2002 09:44:42 +0300 + +Matthias Saou wrote: + +>Once upon a time, Roi wrote : +> +> +> +>>Since I upgraded to redhat8 mplayer -vo sdl isnt working for me +>>It gives me black screen and I only hear sound. +>> +>>can anyone help me with this ? +>> +>> +> +>I'll test this as soon as I can. +> +> +> +>>btw, +>>also the source rpm specified that I can do --without libdv +>>but it didn't work, worked for lirc and arts. +>> +>> +> +>Should be fixed : You probably had libdv-devel installed and MPlayer +>automatically detected it. The new spec file explicitely passes +>--disable-libdv when the package is rebuilt with --without libdv. +> +> +I didn't had libdv at all, I installed it just to install mplayer. + +>Grab the "fr2.1" spec from here : +>http://freshrpms.net/builds/index.html?build=mplayer +> +>Matthias +> +> +> + + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01244.b9cb6115cc7d56d7cba71051834a4d06 b/Ch3/datasets/spam/easy_ham/01244.b9cb6115cc7d56d7cba71051834a4d06 new file mode 100644 index 000000000..51b34d514 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01244.b9cb6115cc7d56d7cba71051834a4d06 @@ -0,0 +1,106 @@ +From rpm-list-admin@freshrpms.net Fri Oct 4 11:01:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7BCB216F17 + for ; Fri, 4 Oct 2002 11:01:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:01:15 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g94774K07603 for + ; Fri, 4 Oct 2002 08:07:05 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g94721f12486; Fri, 4 Oct 2002 09:02:01 + +0200 +Received: from babyruth.hotpop.com (babyruth.hotpop.com [204.57.55.14]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g9471gf08199 for + ; Fri, 4 Oct 2002 09:01:42 +0200 +Received: from punkass.com (kubrick.hotpop.com [204.57.55.16]) by + babyruth.hotpop.com (Postfix) with SMTP id 49E7B210E46 for + ; Fri, 4 Oct 2002 07:01:24 +0000 (UTC) +Received: from punkass.com (unknown [80.178.1.203]) by smtp-2.hotpop.com + (Postfix) with ESMTP id 685191B854D for ; + Fri, 4 Oct 2002 07:00:43 +0000 (UTC) +Message-Id: <3D9D3D32.5080404@punkass.com> +From: Roi Dayan +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830 +X-Accept-Language: en-us, en, he +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: Mplayer +References: <20021002.siy.77121800@www.dudex.net> + <3D9BEC4A.2050900@punkass.com> + <20021003110510.1c619b15.matthias@rpmforge.net> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Hotpop: ----------------------------------------------- Sent By + HotPOP.com FREE Email Get your FREE POP email at www.HotPOP.com + ----------------------------------------------- +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 04 Oct 2002 10:03:14 +0300 +Date: Fri, 04 Oct 2002 10:03:14 +0300 + +Matthias Saou wrote: + +>Once upon a time, Roi wrote : +> +> +> +>>Since I upgraded to redhat8 mplayer -vo sdl isnt working for me +>>It gives me black screen and I only hear sound. +>> +>>can anyone help me with this ? +>> +>> +> +>I'll test this as soon as I can. +> +> +> +>>btw, +>>also the source rpm specified that I can do --without libdv +>>but it didn't work, worked for lirc and arts. +>> +>> +> +>Should be fixed : You probably had libdv-devel installed and MPlayer +>automatically detected it. The new spec file explicitely passes +>--disable-libdv when the package is rebuilt with --without libdv. +> +>Grab the "fr2.1" spec from here : +>http://freshrpms.net/builds/index.html?build=mplayer +> +>Matthias +> +> +> +The new spec didn't even want to build the package +something with config.mak +Also this new spec looks like the old one, it got libdv and libdv-devel +in the BuildRequires so I just used the normal spec and removed it manully. + +Roi + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01245.eb8e87560f382001583084d77b047e19 b/Ch3/datasets/spam/easy_ham/01245.eb8e87560f382001583084d77b047e19 new file mode 100644 index 000000000..b4137a702 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01245.eb8e87560f382001583084d77b047e19 @@ -0,0 +1,80 @@ +From rpm-list-admin@freshrpms.net Fri Oct 4 11:02:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8CE5816F1E + for ; Fri, 4 Oct 2002 11:02:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:02:02 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g948wPK10662 for + ; Fri, 4 Oct 2002 09:58:30 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g948t2f06646; Fri, 4 Oct 2002 10:55:02 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g948sLf03042 for + ; Fri, 4 Oct 2002 10:54:21 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Mplayer +Message-Id: <20021004105413.5264a403.matthias@rpmforge.net> +In-Reply-To: <3D9D3D32.5080404@punkass.com> +References: <20021002.siy.77121800@www.dudex.net> + <3D9BEC4A.2050900@punkass.com> + <20021003110510.1c619b15.matthias@rpmforge.net> + <3D9D3D32.5080404@punkass.com> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 4 Oct 2002 10:54:13 +0200 +Date: Fri, 4 Oct 2002 10:54:13 +0200 + +Once upon a time, Roi wrote : + +> The new spec didn't even want to build the package +> something with config.mak + +Now that is weird! :-/ + +> Also this new spec looks like the old one, it got libdv and libdv-devel +> in the BuildRequires so I just used the normal spec and removed it +> manully. + +Indeed, my boo-boo :-( Fixed now. + +BTW, about the "mplayer -vo sdl" black screen problem you reported, I was +unable to reproduce it on my hom 8.0 computer, it worked as expected. + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10 +Load : 0.10 0.15 0.16, AC on-line, battery charging: 100% (1:47) + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01246.1734a462e0890957b876bd2bdeca2818 b/Ch3/datasets/spam/easy_ham/01246.1734a462e0890957b876bd2bdeca2818 new file mode 100644 index 000000000..527549b75 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01246.1734a462e0890957b876bd2bdeca2818 @@ -0,0 +1,85 @@ +From rpm-list-admin@freshrpms.net Fri Oct 4 11:02:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DAE6416F20 + for ; Fri, 4 Oct 2002 11:02:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:02:00 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g948LAK09578 for + ; Fri, 4 Oct 2002 09:21:11 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g948G2f21060; Fri, 4 Oct 2002 10:16:03 + +0200 +Received: from urgent.rug.ac.be (urgent.rug.ac.be [157.193.88.1]) by + egwn.net (8.11.6/8.11.6/EGWN) with SMTP id g948FJf20904 for + ; Fri, 4 Oct 2002 10:15:19 +0200 +Received: (qmail 8840 invoked by uid 505); 4 Oct 2002 08:15:27 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 4 Oct 2002 08:15:27 -0000 +From: Thomas Vander Stichele +To: rpm-zzzlist +Subject: Re: K3B +In-Reply-To: <1033696039.2551.0.camel@gandalf> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 4 Oct 2002 10:15:27 +0200 (CEST) +Date: Fri, 4 Oct 2002 10:15:27 +0200 (CEST) + +> `athalon-redhat-linux': machine `athalon-redhat' not recognized +> configure: error: /bin/sh admin/config.sub athalon-redhat-linux failed +> error: Bad exit status from /home/dale/rpmbuild/tmp/rpm-tmp.26673 +> (%prep) + +Woah ;) did you tweak some flags yourself, like default rpm flags ? What +dist are you running ? I don't think there's an athalon-redhat-linux +machine as standard ;) it should be some permutation of athlon and linux, +and without redhat, but I can't tell for sure. Any idea where your +system might be setting this flag ? + + + > RPM build errors: +> user jkeating does not exist - using root +> group jkeating does not exist - using root +> user jkeating does not exist - using root +> group jkeating does not exist - using root +> Bad exit status from /home/dale/rpmbuild/tmp/rpm-tmp.26673 (%prep) + +looks like the files are owned by the wrong user (ie the original spec +builder). + +Thomas + +-- + +The Dave/Dina Project : future TV today ! - http://davedina.apestaart.org/ +<-*- -*-> +Goodbye +I've finally arrived +<-*- thomas@apestaart.org -*-> +URGent, the best radio on the Internet - 24/7 ! - http://urgent.rug.ac.be/ + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01247.2a40443c1cba2e07a993b186db41971d b/Ch3/datasets/spam/easy_ham/01247.2a40443c1cba2e07a993b186db41971d new file mode 100644 index 000000000..a538bf897 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01247.2a40443c1cba2e07a993b186db41971d @@ -0,0 +1,71 @@ +From rpm-list-admin@freshrpms.net Fri Oct 4 11:32:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3C20716F16 + for ; Fri, 4 Oct 2002 11:32:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:32:36 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g94AQlK13678 for + ; Fri, 4 Oct 2002 11:26:48 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g94AO4f17368; Fri, 4 Oct 2002 12:24:05 + +0200 +Received: from evv.kamakiriad.local (cable-b-36.sigecom.net + [63.69.210.36]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g94AMmf12997 for ; Fri, 4 Oct 2002 12:22:49 +0200 +Received: from aquila.kamakiriad.local (aquila.kamakiriad.local + [192.168.1.3]) by kamakiriad.comamakiriad.com (8.11.6/8.11.6) with SMTP id + g94AMaM14823 for ; Fri, 4 Oct 2002 05:22:36 -0500 +From: Brian Fahrlander +To: rpm-zzzlist@freshrpms.net +Subject: Psyche: Anyone else tried it? +Message-Id: <20021004052213.0ac86d78.kilroy@kamakiriad.com> +X-Mailer: Sylpheed version 0.8.3 (GTK+ 1.2.10; i386-redhat-linux) +X-Message-Flag: : Shame on you! You know Outlook is how viruses are spread! +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 4 Oct 2002 05:22:13 -0500 +Date: Fri, 4 Oct 2002 05:22:13 -0500 + + + Damn, this thing is slick. Someone seems to have done a very complete QA test on it; yesterday I installed it for the first time on an old Celeron box. Sure, parts of it were slow, but compared to my more modern machine, everything is. It was good; a beautiful interface that legions of 'sheep' can look at and say "Cool; I can understand this" and leave their shackles behind. :) + + I was struck by the massive amount of applications, both KDE and Gnome, intuitively seperated NOT by the Gnome/KDE names, but by their **meanings** instead. It's obvious that someone spent a lot of time improving the usability and graphics to make it more 'international'; the web browser graphic, for example, has a 'world' icon with a mouse wrapped around it. Office-apps have familiar pens, paper, and/or calculators involved. + + This is a Linux that I can plop down in front of almost anyone, and they can figure it out. + + At some point I'd miss the character of KDE/Gnome, and I'll probably 'hotrod' the graphics setup with my own themes, etc. But for the wide release, this one's IT. If you get a chance, try this; I think you'll be surprisingly pleased. + +------------------------------------------------------------------------ +Brian Fahrländer Linux Zealot, Conservative, and Technomad +Evansville, IN My Voyage: http://www.CounterMoon.com +ICQ 5119262 +------------------------------------------------------------------------ +Just machines, to make big decisions- programmed by fellas with +compassion and vision. We'll be clean when that work is done; +Eternally free and eternally young. Linux. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01248.cd8df6fde5910535d604ad30d0fd872c b/Ch3/datasets/spam/easy_ham/01248.cd8df6fde5910535d604ad30d0fd872c new file mode 100644 index 000000000..3c35b1c21 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01248.cd8df6fde5910535d604ad30d0fd872c @@ -0,0 +1,171 @@ +From rpm-list-admin@freshrpms.net Sat Oct 5 10:35:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9AC2C16F18 + for ; Sat, 5 Oct 2002 10:34:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 10:34:58 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g94KW2K07555 for + ; Fri, 4 Oct 2002 21:32:02 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g94KO2f04424; Fri, 4 Oct 2002 22:24:02 + +0200 +Received: from canarsie.horizonlive.com (slim-eth0.horizonlive.net + [208.185.78.2]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g94KNHf02156 for ; Fri, 4 Oct 2002 22:23:17 +0200 +Received: from canarsie.horizonlive.com (localhost.localdomain + [127.0.0.1]) by canarsie.horizonlive.com (8.12.5/8.12.5) with ESMTP id + g94KND8f023906 for ; Fri, 4 Oct 2002 16:23:13 + -0400 +Received: (from stevek@localhost) by canarsie.horizonlive.com + (8.12.5/8.12.5/Submit) id g94KNDdm023904 for rpm-list@freshrpms.net; + Fri, 4 Oct 2002 16:23:13 -0400 +X-Authentication-Warning: canarsie.horizonlive.com: stevek set sender to + stevek@horizonlive.com using -f +From: Steve Kann +To: rpm-zzzlist@freshrpms.net +Subject: Re: problems with apt/synaptic +Message-Id: <20021004162311.A23707@canarsie.horizonlive.com> +References: <20021004102537.C22111@canarsie.horizonlive.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <20021004102537.C22111@canarsie.horizonlive.com> +User-Agent: Mutt/1.3.21i +X-Blank-Header-Line: (this header intentionally left blank) +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 4 Oct 2002 16:23:13 -0400 +Date: Fri, 4 Oct 2002 16:23:13 -0400 + + +Although it looks like I'm replying to myself, I just haven't gotten +Matthias' reply yet, although I can see it on the website (and I did +subscribe, but probably to the digest). + +Anyway, Matthias wrote: +> Once upon a time, Steve wrote : +> +> > I did apt-get update, and it seemed to have gotten the new packages +> +> Hmmm, "it seems"? Check closer as this may be where the problem is +> coming +> from. +> > but doing things like "apt-get install synaptic" didn't work (neither +> > did other known packages, like apt-get install lame +> > +> > I just get: +> > root@canarsie:/var/cache/apt # apt-get install lame +> > Reading Package Lists... Done +> > Building Dependency Tree... Done +> > E: Couldn't find package lame +> +> Could you double check what "apt-get update" does? And eventually post +> the +> output if there are any errors or messages you don't understand. + +OK, I did it again, and here's what I got: +root@canarsie:/tmp # apt-get update +Ign http://apt.freshrpms.net redhat/8.0/en/i386 release +Hit http://apt.freshrpms.net redhat/8.0/en/i386/os pkglist +Hit http://apt.freshrpms.net redhat/8.0/en/i386/os release +Hit http://apt.freshrpms.net redhat/8.0/en/i386/updates pkglist +Hit http://apt.freshrpms.net redhat/8.0/en/i386/updates release +Get:1 http://apt.freshrpms.net redhat/8.0/en/i386/freshrpms pkglist [51.8kB] +Hit http://apt.freshrpms.net redhat/8.0/en/i386/freshrpms release +Hit http://apt.freshrpms.net redhat/8.0/en/i386/os srclist +Hit http://apt.freshrpms.net redhat/8.0/en/i386/updates srclist +Get:2 http://apt.freshrpms.net redhat/8.0/en/i386/freshrpms srclist [12.6kB] +Fetched 64.4kB in 2s (30.1kB/s) +Reading Package Lists... Done +root@canarsie:/tmp # apt-get install lame +Reading Package Lists... Done +Building Dependency Tree... Done +E: Couldn't find package lame + +root@canarsie:/var/cache/apt # ls -ltr +total 148 +drwxr-xr-x 2 root root 4096 Sep 29 10:49 gensrclist +drwxr-xr-x 2 root root 4096 Sep 29 10:49 genpkglist +drwxr-xr-x 3 root root 4096 Sep 29 10:49 archives +-rw-r--r-- 1 root root 49863 Oct 4 16:00 srcpkgcache.bin +-rw-r--r-- 1 root root 158131 Oct 4 16:00 pkgcache.bin +root@canarsie:/var/cache/apt # date +Fri Oct 4 16:03:15 EDT 2002 + +So, it looks like it worked, and the files are updated.. very strange. + +Maybe something went wrong updating apt from my old version (as used +with rh7.2), and this one. Lemme try totally uninstalling and +reinstalling it.. + +root@canarsie:/ # rpm -e apt synaptic +warning: /etc/apt/sources.list saved as /etc/apt/sources.list.rpmsave +root@canarsie:/ # ls -l /etc/apt +total 4 +-rw-r--r-- 1 root root 1610 Oct 4 10:07 +sources.list.rpmsave +root@canarsie:/ # rpm -ivh /tmp/apt-0.5.4cnc7-fr1.i386.rpm +warning: /tmp/apt-0.5.4cnc7-fr1.i386.rpm: V3 DSA signature: NOKEY, key +ID e42d547b +Preparing... ########################################### +[100%] + 1:apt ########################################### +[100%] +root@canarsie:/ # apt-get update +Ign http://apt.freshrpms.net redhat/8.0/en/i386 release +Hit http://apt.freshrpms.net redhat/8.0/en/i386/os pkglist +Hit http://apt.freshrpms.net redhat/8.0/en/i386/os release +Hit http://apt.freshrpms.net redhat/8.0/en/i386/updates pkglist +Hit http://apt.freshrpms.net redhat/8.0/en/i386/updates release +Hit http://apt.freshrpms.net redhat/8.0/en/i386/freshrpms pkglist +Hit http://apt.freshrpms.net redhat/8.0/en/i386/freshrpms release +Hit http://apt.freshrpms.net redhat/8.0/en/i386/os srclist +Hit http://apt.freshrpms.net redhat/8.0/en/i386/updates srclist +Hit http://apt.freshrpms.net redhat/8.0/en/i386/freshrpms srclist +Reading Package Lists... Done +root@canarsie:/ # apt-get install synaptic +Reading Package Lists... Done +Building Dependency Tree... Done +E: Couldn't find package synaptic +root@canarsie:/ # + +Still no go... + +I'm stumped. + +-SteveK + + + +> +> Matthias +> + + +-- + Steve Kann - Chief Engineer - 520 8th Ave #2300 NY 10018 - (212) 533-1775 + HorizonLive.com - collaborate . interact . learn + "The box said 'Requires Windows 95, NT, or better,' so I installed Linux." + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01249.0898a8cbcc6fd1f663d3674685afa7ee b/Ch3/datasets/spam/easy_ham/01249.0898a8cbcc6fd1f663d3674685afa7ee new file mode 100644 index 000000000..50b53e8d5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01249.0898a8cbcc6fd1f663d3674685afa7ee @@ -0,0 +1,90 @@ +From rpm-list-admin@freshrpms.net Sat Oct 5 10:35:21 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 83F1716F1A + for ; Sat, 5 Oct 2002 10:35:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 10:35:09 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g94Ki7K07946 for + ; Fri, 4 Oct 2002 21:44:07 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g94Kb1f24546; Fri, 4 Oct 2002 22:37:02 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g94KaUf22746; Fri, 4 Oct 2002 22:36:30 +0200 +From: Matthias Saou +To: Brian Fahrlander +Cc: RPM-List +Subject: Re: Alsa/Redhat 8 compatability +Message-Id: <20021004223558.1e85622d.matthias@rpmforge.net> +In-Reply-To: <20021004130741.2df14559.kilroy@kamakiriad.com> +References: <20021004130741.2df14559.kilroy@kamakiriad.com> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 4 Oct 2002 22:35:58 +0200 +Date: Fri, 4 Oct 2002 22:35:58 +0200 + +Once upon a time, Brian wrote : + +> +> I have a fresh, new 8.0 install. I'd like to 'go alsa', but I worry +> about screwing it up. Is this fear founded? If I could get Alsa, I +> could run a bunch of games I've been waiting for years to come +> out...like Search & Rescue (available on a Mandrake RPM) and maybe +> FlightGear (flight simulator). + +Well, I'm sure you can recompile those game packages without ALSA anyway. +Also, note that ALSA 0.9.x has just appeared in Mandrake 9.0 and that all +previous Mandrake releases were using the incompatible, aging and now +unsupported 0.5.x series. (unless I've misunderstood) + +> How much 'hacking' is likely required to make it work for an +> SBLive/emu10k1 soundcard? + +Near to none, it should be quite straightforward : +http://freshrpms.net/docs/alsa/ + +The only tricky part is editing the /etc/modules.conf file, but the ALSA +Soundcard Matrix has a page for every supported card with a section you can +most of the time simply copy and paste! + +I really think that with my ALSA packages, ALSA on Red Hat Linux has never +been so easy! ;-) + +Cheers, +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10 +Load : 0.00 0.07 0.17, AC on-line, battery charging: 100% (1:47) + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01250.d793a216ea4b705ea8ea27e396fb115d b/Ch3/datasets/spam/easy_ham/01250.d793a216ea4b705ea8ea27e396fb115d new file mode 100644 index 000000000..bad4b28c2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01250.d793a216ea4b705ea8ea27e396fb115d @@ -0,0 +1,85 @@ +From rpm-list-admin@freshrpms.net Sat Oct 5 10:35:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 27EEF16F17 + for ; Sat, 5 Oct 2002 10:35:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 10:35:22 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g94LuXK10676 for + ; Fri, 4 Oct 2002 22:56:33 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g94Lo3f02123; Fri, 4 Oct 2002 23:50:03 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g94Lmff28624 + for ; Fri, 4 Oct 2002 23:48:41 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17xaKc-0006jX-00 for rpm-list@freshrpms.net; + Fri, 04 Oct 2002 17:49:58 -0400 +X-Originating-Ip: [4.64.218.140] +From: "" Angles " Puglisi" +To: "=?iso-8859-1?Q?RPM=2DList?=" +Subject: Re: Alsa/Redhat 8 compatability +Message-Id: <20021004.rnl.09750400@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 04 Oct 2002 21:45:33 +0000 +Date: Fri, 04 Oct 2002 21:45:33 +0000 + +Matthias Saou (matthias@rpmforge.net) wrote*: +>I really think that with my ALSA packages, ALSA on Red Hat Linux has never +>been so easy! ;-) + +I had been hand building those alsa packages for probably 6 months or more, so I +could use my laptop's ESS chip best (hard disk recording and such). Wow, maybe 8 to +10 months, time flys. I didn't look forward to doing that tedious build every time I +changed a kernel or something. Matthias has made this a thing of the past! Dude, +it's a no brainer, use apt-get or just download and install. + +What's more, OSS is fully "imitated", older apps using OSS are as happy as a clam. +My personal taste tells me newer apps which use alsa sound better (alsaplayer, xmms +with alsa module) to my ear. + +The 2 things that trick people are the modules.conf file, they didn't have that +automatic matrix page when I started with alsa, you don't know how good you have it. + +And on my old installs (only the first time I installed it on a clean box), alsa +always was "muted" until you fire up a mixer and turn up the music. It's possible +Matthias even took care of that too. Anyway it is/was only a one time thing on 1st +install, that was a long time ago for me. + +Those ALSA dudes had been trying to get it into the 2.4 kernel but missed it, but +it's been in 2.5 for a while now, so alsa is the future of sound in the linux kernel. + +-- +That's "angle" as in geometry. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01251.793e5c04967cb90191e805dfa619c55a b/Ch3/datasets/spam/easy_ham/01251.793e5c04967cb90191e805dfa619c55a new file mode 100644 index 000000000..546447071 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01251.793e5c04967cb90191e805dfa619c55a @@ -0,0 +1,74 @@ +From rpm-list-admin@freshrpms.net Sat Oct 5 10:36:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6C4D016F21 + for ; Sat, 5 Oct 2002 10:35:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 10:35:36 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g94NEAK13745 for + ; Sat, 5 Oct 2002 00:14:15 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g94N82f30483; Sat, 5 Oct 2002 01:08:02 + +0200 +Received: from relay2.EECS.Berkeley.EDU (relay2.EECS.Berkeley.EDU + [169.229.60.28]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g94N7If23138 for ; Sat, 5 Oct 2002 01:07:18 +0200 +Received: from relay3.EECS.Berkeley.EDU (localhost.Berkeley.EDU + [127.0.0.1]) by relay2.EECS.Berkeley.EDU (8.9.3/8.9.3) with ESMTP id + QAA03058 for ; Fri, 4 Oct 2002 16:07:16 -0700 + (PDT) +Received: from eecs.berkeley.edu (brawnix.CS.Berkeley.EDU [128.32.35.162]) + by relay3.EECS.Berkeley.EDU (8.9.3/8.9.3) with ESMTP id QAA16606 for + ; Fri, 4 Oct 2002 16:07:11 -0700 (PDT) +Message-Id: <3D9E1F20.3050300@eecs.berkeley.edu> +From: Ben Liblit +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: RedHat 8.0 and his own freetype +References: <20021004155451.52f9ecd5.matthias_haase@bennewitz.com> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 04 Oct 2002 16:07:12 -0700 +Date: Fri, 04 Oct 2002 16:07:12 -0700 + +Matthias Haase wrote: +> RH ships the code with the bytecode hinter disabled which makes +> non-AA fonts really ugly. +> This reqiures only a small change for include/freetype/config/ftoption.h, +> it is very well documented. + +Red Hat 8.0 ships with the bytecode hinter enabled; I think 7.3 may have +as well. + +The enabling change to "ftoption.h" is made by Red Hat's SRPM before +building. Take a look at "freetype-2.1.1-enable-ft2-bci.patch" from the +SRPM; it's pretty clear that this does exactly what needs to be done. + +So if your fonts look ugly, lack of bytecode hinting is *not* the cause. + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01252.60a457d292a0e9c1307a196324d298dc b/Ch3/datasets/spam/easy_ham/01252.60a457d292a0e9c1307a196324d298dc new file mode 100644 index 000000000..47db98bab --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01252.60a457d292a0e9c1307a196324d298dc @@ -0,0 +1,63 @@ +From rpm-list-admin@freshrpms.net Sat Oct 5 10:37:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B7F2516F1C + for ; Sat, 5 Oct 2002 10:36:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 10:36:12 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g951JJK21082 for + ; Sat, 5 Oct 2002 02:19:19 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g951D2f05767; Sat, 5 Oct 2002 03:13:02 + +0200 +Received: from out001.verizon.net (out001pub.verizon.net [206.46.170.140]) + by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g951CFf30318 for + ; Sat, 5 Oct 2002 03:12:15 +0200 +Received: from chassid ([4.65.20.230]) by out001.verizon.net (InterMail + vM.5.01.05.09 201-253-122-126-109-20020611) with ESMTP id + <20021005011206.OGMC3265.out001.verizon.net@chassid> for + ; Fri, 4 Oct 2002 20:12:06 -0500 +Content-Type: text/plain; charset="us-ascii" +From: Coy Krill +To: rpm-zzzlist@freshrpms.net +Subject: Problem building lame-3.92-fr5.src.rpm on RH8 +User-Agent: KMail/1.4.3 +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200210041809.23811.coy.krill@verizon.net> +X-Authentication-Info: Submitted using SMTP AUTH LOGIN at out001.verizon.net + from [4.65.20.230] at Fri, 4 Oct 2002 20:12:05 -0500 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 4 Oct 2002 18:09:23 -0700 +Date: Fri, 4 Oct 2002 18:09:23 -0700 + +I can't seem to build this package. It errors out because rpm found +files not included in any of the packages. I tried getting them addes +(it's the documentation that is being loaded) and was unsuccessful. +Anyone get this to work? + +Coy + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01253.17f98c5b0388d2ae46e31cb6308c7ab6 b/Ch3/datasets/spam/easy_ham/01253.17f98c5b0388d2ae46e31cb6308c7ab6 new file mode 100644 index 000000000..f7a9de690 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01253.17f98c5b0388d2ae46e31cb6308c7ab6 @@ -0,0 +1,82 @@ +From rpm-list-admin@freshrpms.net Sat Oct 5 10:37:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0345516F21 + for ; Sat, 5 Oct 2002 10:36:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 10:36:19 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g952YiK23883 for + ; Sat, 5 Oct 2002 03:34:44 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g952Q1f06511; Sat, 5 Oct 2002 04:26:01 + +0200 +Received: from localhost.localdomain + (pool-141-151-21-129.phil.east.verizon.net [141.151.21.129]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g952PMf06368 for + ; Sat, 5 Oct 2002 04:25:22 +0200 +Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) + by localhost.localdomain (8.12.5/8.12.5) with ESMTP id g952PWhL025580 for + ; Fri, 4 Oct 2002 22:25:32 -0400 +Received: (from quaff@localhost) by localhost.localdomain + (8.12.5/8.12.5/Submit) id g952PVG2025578; Fri, 4 Oct 2002 22:25:31 -0400 +X-Authentication-Warning: localhost.localdomain: quaff set sender to + quaffapint@clippersoft.net using -f +Subject: Xine dependencies +From: QuaffA Pint +To: rpm-zzzlist@freshrpms.net +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1033784731.25485.6.camel@localhost.localdomain> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 04 Oct 2002 22:25:31 -0400 +Date: 04 Oct 2002 22:25:31 -0400 + +On a RH 8 box, I'm trying to install your package +xine-0.9.13-fr5.i386.rpm, I keep running into dependency problems. I've +tried to install the dev and lib rpm's as well and they error out with +dependency problems on each other (they each want something from the +other's package). + +I've tried the --without options, but still end up with (similar for the +regular package), + + glut is needed by xine-libs-0.9.13-fr5 + aalib is needed by xine-libs-0.9.13-fr5 + lirc is needed by xine-libs-0.9.13-fr5 + libaa.so.1 is needed by xine-libs-0.9.13-fr5 + libglut.so.3 is needed by xine-libs-0.9.13-fr5 + +What am I missing here? + +Thanks for your efforts. +QuaffAPint + + + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01254.e1ba700d620871e67b4f7db4b8859ac3 b/Ch3/datasets/spam/easy_ham/01254.e1ba700d620871e67b4f7db4b8859ac3 new file mode 100644 index 000000000..aa3c7c27c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01254.e1ba700d620871e67b4f7db4b8859ac3 @@ -0,0 +1,85 @@ +From rpm-list-admin@freshrpms.net Sat Oct 5 10:37:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5163E16F6E + for ; Sat, 5 Oct 2002 10:36:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 10:36:22 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g953GfK25573 for + ; Sat, 5 Oct 2002 04:16:42 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g953B2f14268; Sat, 5 Oct 2002 05:11:02 + +0200 +Received: from evv.kamakiriad.local (cable-b-36.sigecom.net + [63.69.210.36]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g953Abf14199 for ; Sat, 5 Oct 2002 05:10:37 +0200 +Received: from aquila.kamakiriad.local (aquila.kamakiriad.local + [192.168.1.3]) by kamakiriad.comamakiriad.com (8.11.6/8.11.6) with SMTP id + g953ARM17517 for ; Fri, 4 Oct 2002 22:10:28 -0500 +From: Brian Fahrlander +To: rpm-zzzlist@freshrpms.net +Subject: Re: Xine dependencies +Message-Id: <20021004221003.26248bb9.kilroy@kamakiriad.com> +In-Reply-To: <1033784731.25485.6.camel@localhost.localdomain> +References: <1033784731.25485.6.camel@localhost.localdomain> +X-Mailer: Sylpheed version 0.8.5 (GTK+ 1.2.10; i386-redhat-linux) +X-Message-Flag: : Shame on you! You know Outlook is how viruses are spread! +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 4 Oct 2002 22:10:03 -0500 +Date: Fri, 4 Oct 2002 22:10:03 -0500 + +On 04 Oct 2002 22:25:31 -0400, QuaffA Pint wrote: + +> On a RH 8 box, I'm trying to install your package +> xine-0.9.13-fr5.i386.rpm, I keep running into dependency problems. I've +> tried to install the dev and lib rpm's as well and they error out with +> dependency problems on each other (they each want something from the +> other's package). +> +> I've tried the --without options, but still end up with (similar for the +> regular package), +> +> glut is needed by xine-libs-0.9.13-fr5 +> aalib is needed by xine-libs-0.9.13-fr5 +> lirc is needed by xine-libs-0.9.13-fr5 +> libaa.so.1 is needed by xine-libs-0.9.13-fr5 +> libglut.so.3 is needed by xine-libs-0.9.13-fr5 +> +> What am I missing here? + + "apt-get install xine". It'll find all these. Oh, and I'm told that Redhat 8.0 will also suggest things like this for ya. (Not apt, but the actual package names you need) + +------------------------------------------------------------------------ +Brian Fahrländer Linux Zealot, Conservative, and Technomad +Evansville, IN My Voyage: http://www.CounterMoon.com +ICQ 5119262 +------------------------------------------------------------------------ +Just machines, to make big decisions- programmed by fellas with +compassion and vision. We'll be clean when that work is done; +Eternally free and eternally young. Linux. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01255.3b6925695108a60022e1557430f4973f b/Ch3/datasets/spam/easy_ham/01255.3b6925695108a60022e1557430f4973f new file mode 100644 index 000000000..13066f641 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01255.3b6925695108a60022e1557430f4973f @@ -0,0 +1,74 @@ +From rpm-list-admin@freshrpms.net Sat Oct 5 12:38:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5251116F17 + for ; Sat, 5 Oct 2002 12:38:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 12:38:06 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g958u0K04063 for + ; Sat, 5 Oct 2002 09:56:00 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g958m3f05677; Sat, 5 Oct 2002 10:48:03 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g958lcf01474 for ; Sat, 5 Oct 2002 10:47:38 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Problem building lame-3.92-fr5.src.rpm on RH8 +Message-Id: <20021005103825.33a637b3.matthias@rpmforge.net> +In-Reply-To: <200210041809.23811.coy.krill@verizon.net> +References: <200210041809.23811.coy.krill@verizon.net> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 5 Oct 2002 10:38:25 +0200 +Date: Sat, 5 Oct 2002 10:38:25 +0200 + +Once upon a time, Coy wrote : + +> I can't seem to build this package. It errors out because rpm found +> files not included in any of the packages. I tried getting them addes +> (it's the documentation that is being loaded) and was unsuccessful. +> Anyone get this to work? + +Hi, + +Could you post the list of files in question? Maybe more docs get generated +when a certain doc tool is installed and that I didn't have it installed +when I rebuilt the package :-/ + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10 +Load : 0.06 0.12 0.09, AC on-line, battery charging: 100% (1:47) + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01256.406e1d468dbbc7347179c131ba33f76e b/Ch3/datasets/spam/easy_ham/01256.406e1d468dbbc7347179c131ba33f76e new file mode 100644 index 000000000..b89d9a3e4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01256.406e1d468dbbc7347179c131ba33f76e @@ -0,0 +1,93 @@ +From rpm-list-admin@freshrpms.net Sat Oct 5 12:38:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6068F16F17 + for ; Sat, 5 Oct 2002 12:38:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 12:38:11 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g95ASmK06400 for + ; Sat, 5 Oct 2002 11:28:48 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g95AN2f11627; Sat, 5 Oct 2002 12:23:02 + +0200 +Received: from marvin.home.priv (adsl-66-124-59-34.dsl.anhm01.pacbell.net + [66.124.59.34]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g95ALjf32662 for ; Sat, 5 Oct 2002 12:21:45 +0200 +Received: by marvin.home.priv (Postfix, from userid 500) id CC895203D4; + Sat, 5 Oct 2002 03:21:43 -0700 (PDT) +From: Gary Peck +To: rpm-zzzlist@freshrpms.net +Subject: Re: alsa-driver.spec tweak for homemade kernels +Message-Id: <20021005102143.GA6915@marvin.home.priv> +Mail-Followup-To: Gary Peck , + rpm-list@freshrpms.net +References: <3D9AA650.2000909@eecs.berkeley.edu> + <20021002100919.2e3168a8.matthias@rpmforge.net> + <20021002193602.GC6266@taz.home.priv> + <20021002224504.13c35679.matthias@rpmforge.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <20021002224504.13c35679.matthias@rpmforge.net> +User-Agent: Mutt/1.4i +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 5 Oct 2002 03:21:43 -0700 +Date: Sat, 5 Oct 2002 03:21:43 -0700 + +On Wed, Oct 02, 2002 at 10:45:04PM +0200, Matthias Saou wrote: +> > So I've attached a patch to specify an alternate kernel by setting the +> > "TARGET_KERNEL" environment variable before running rpmbuild. You +> > still need to have the rpm for the specified kernel installed, but at +> > least it doesn't have to be currently running. It's kinda hackish, so +> > if someone has a better way to do this, let me know. +> +> That idea looks good although it maybe needs to be tweaked a bit more (what +> you sent doesn't support packages named "kernel-smp"). I'd also prefer a +> cleaner way than the env variable, and preferrably not editing the spec... +> probably "--define 'target 2.4.xx-xx' --with smp". Sound good enough? +> The BuildRequires on "kernel-source" will also need to be removed because +> it won't necessarily need to be true, and that does bug me a bit :-/ + +The "--define" is exactly what I was looking for! I was trying to +figure out a way to do it within the mechanism of rpm (like the +"--with" switches), but for some reason didn't think of using +"--define". My computer is currently gone for repairs, but once it's +back, I'll rewrite the specfile, add support for kernel-smp, and email +it to the list for further criticism :) + +As far as requiring kernel-source, I don't feel it's a big problem. If +you're gonna go to the trouble of packaging custom kernels into rpms, +it's not a far stretch to package the source tree too (as I currently +do). + +Also, I've found that the alsa-driver source needs a usb-related patch +to compile under the latest test kernels (2.4.20-preX). Are other +people seeing the same thing, or is this just a problem with my setup? + +gary + +P.S. If I didn't mention it before, thanks for the alsa packages! They +greatly simplified what used to take way too long before. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01257.cd426b4dcf52fd10d26e645b7ace3e14 b/Ch3/datasets/spam/easy_ham/01257.cd426b4dcf52fd10d26e645b7ace3e14 new file mode 100644 index 000000000..02aea7ac3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01257.cd426b4dcf52fd10d26e645b7ace3e14 @@ -0,0 +1,83 @@ +From rpm-list-admin@freshrpms.net Sat Oct 5 12:38:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A796516F03 + for ; Sat, 5 Oct 2002 12:38:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 12:38:07 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g958v5K04238 for + ; Sat, 5 Oct 2002 09:57:05 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g958r2f26810; Sat, 5 Oct 2002 10:53:02 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g958qLf20852 for ; Sat, 5 Oct 2002 10:52:21 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Xine dependencies +Message-Id: <20021005104303.65cc5b6d.matthias@rpmforge.net> +In-Reply-To: <1033784731.25485.6.camel@localhost.localdomain> +References: <1033784731.25485.6.camel@localhost.localdomain> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 5 Oct 2002 10:43:03 +0200 +Date: Sat, 5 Oct 2002 10:43:03 +0200 + +Once upon a time, QuaffA wrote : + +> I've tried the --without options, but still end up with (similar for the +> regular package), +> +> glut is needed by xine-libs-0.9.13-fr5 + +You need to install the "glut" package from Red Hat Linux 8.0 (and +"glut-devel" if you intend to recompile the source rpm). + +> aalib is needed by xine-libs-0.9.13-fr5 +> lirc is needed by xine-libs-0.9.13-fr5 +> libaa.so.1 is needed by xine-libs-0.9.13-fr5 +> libglut.so.3 is needed by xine-libs-0.9.13-fr5 + +Here you need both "aalib" and "lirc" from freshrpms.net. They're small, +they can be quite useful, that's why I've compiled xine with them as a +default. +You should be able to get rid of those two though, by rebuilding the source +rpm (otherwise it's a bug in my packaging!) : +rpmbuild --rebuild --without aalib --without lirc xine*.src.rpm + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10 +Load : 0.06 0.13 0.09, AC on-line, battery charging: 100% (1:47) + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01258.a655740f71f7f330ffd270d20444aac6 b/Ch3/datasets/spam/easy_ham/01258.a655740f71f7f330ffd270d20444aac6 new file mode 100644 index 000000000..b550c0e9d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01258.a655740f71f7f330ffd270d20444aac6 @@ -0,0 +1,67 @@ +From rpm-list-admin@freshrpms.net Sat Oct 5 14:07:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AD8B616F03 + for ; Sat, 5 Oct 2002 14:07:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 14:07:17 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g95CA9K08974 for + ; Sat, 5 Oct 2002 13:10:09 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g95C41f11726; Sat, 5 Oct 2002 14:04:01 + +0200 +Received: from localhost.localdomain + (pool-141-151-21-129.phil.east.verizon.net [141.151.21.129]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g95C3Nf08935 for + ; Sat, 5 Oct 2002 14:03:23 +0200 +Received: from rh8.localdomain (localhost.localdomain [127.0.0.1]) by + localhost.localdomain (8.12.5/8.12.5) with ESMTP id g95C3O7d004881 for + ; Sat, 5 Oct 2002 08:03:24 -0400 +Received: (from quaff@localhost) by rh8.localdomain (8.12.5/8.12.5/Submit) + id g95C3DE6004874; Sat, 5 Oct 2002 08:03:13 -0400 +X-Authentication-Warning: rh8.localdomain: quaff set sender to + quaffapint@clippersoft.net using -f +Subject: Re: Xine Dependencies +From: QuaffA Pint +To: rpm-zzzlist@freshrpms.net +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1033819393.1146.1.camel@rh8.localdomain> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 05 Oct 2002 08:03:13 -0400 +Date: 05 Oct 2002 08:03:13 -0400 + +Thanks Matthias...After installing those packages Xine now installs +fine. Guess I shoulda figured that one out... + +Thanks... +QuaffAPint + + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01259.503b1765330dada13ff5c85d8b5d9d29 b/Ch3/datasets/spam/easy_ham/01259.503b1765330dada13ff5c85d8b5d9d29 new file mode 100644 index 000000000..3aa2812f0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01259.503b1765330dada13ff5c85d8b5d9d29 @@ -0,0 +1,72 @@ +From rpm-list-admin@freshrpms.net Sat Oct 5 17:21:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8425216F03 + for ; Sat, 5 Oct 2002 17:21:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 17:21:49 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g95DOfK10926 for + ; Sat, 5 Oct 2002 14:24:42 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g95DE2f01952; Sat, 5 Oct 2002 15:14:02 + +0200 +Received: from bennew01.localdomain (pD900DDC6.dip.t-dialin.net + [217.0.221.198]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g95DD2f29025 for ; Sat, 5 Oct 2002 15:13:02 +0200 +Received: from bennew01.localdomain (bennew01.localdomain [192.168.3.1]) + by bennew01.localdomain (8.12.5/linuxconf) with SMTP id g95DCmUv028047 for + ; Sat, 5 Oct 2002 15:12:49 +0200 +From: Matthias Haase +To: rpm-zzzlist@freshrpms.net +Subject: Re: RedHat 8.0 and his own freetype +Message-Id: <20021005151248.2184c904.matthias_haase@bennewitz.com> +In-Reply-To: <3D9E1F20.3050300@eecs.berkeley.edu> +References: <20021004155451.52f9ecd5.matthias_haase@bennewitz.com> + <3D9E1F20.3050300@eecs.berkeley.edu> +X-Operating-System: customized linux smp kernel 2.4* on i686 +X-Mailer: Sylpheed +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 5 Oct 2002 15:12:48 +0200 +Date: Sat, 5 Oct 2002 15:12:48 +0200 + +On Fri, 04 Oct 2002 16:07:12 -0700 +Ben Liblit wrote: + +> So if your fonts look ugly, lack of bytecode hinting is *not* the cause. + +Well you are right, sorry, I didn't have any better idea yesterday late in +the evening. +The fonts are ugly only inside of gnome2 and clean for gnome1 apps, if +antialiasing is disabled. +This is difficult to understand for me. + +-- +regards from Germany + Matthias + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01260.00507d8794730b35f686ed06471e12ce b/Ch3/datasets/spam/easy_ham/01260.00507d8794730b35f686ed06471e12ce new file mode 100644 index 000000000..24b0481db --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01260.00507d8794730b35f686ed06471e12ce @@ -0,0 +1,82 @@ +From rpm-list-admin@freshrpms.net Sun Oct 6 22:51:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 81C3716F03 + for ; Sun, 6 Oct 2002 22:51:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:51:14 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g95K68K22243 for + ; Sat, 5 Oct 2002 21:06:08 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g95K03f15705; Sat, 5 Oct 2002 22:00:03 + +0200 +Received: from out002.verizon.net (out002pub.verizon.net [206.46.170.141]) + by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g95Jwqf12099 for + ; Sat, 5 Oct 2002 21:58:52 +0200 +Received: from chassid ([4.65.20.230]) by out002.verizon.net (InterMail + vM.5.01.05.09 201-253-122-126-109-20020611) with ESMTP id + <20021005195843.LSGV2867.out002.verizon.net@chassid> for + ; Sat, 5 Oct 2002 14:58:43 -0500 +Content-Type: text/plain; charset="us-ascii" +From: Coy Krill +To: rpm-zzzlist@freshrpms.net +Subject: Re: Problem building lame-3.92-fr5.src.rpm on RH8 +User-Agent: KMail/1.4.3 +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200210051256.03011.coy.krill@verizon.net> +X-Authentication-Info: Submitted using SMTP AUTH LOGIN at out002.verizon.net + from [4.65.20.230] at Sat, 5 Oct 2002 14:58:42 -0500 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 5 Oct 2002 12:56:02 -0700 +Date: Sat, 5 Oct 2002 12:56:02 -0700 + +Matthias said: + +>Could you post the list of files in question? + +Sure. I used the following command to rebuild the package: + +rpmbuild --rebuild --target i586 lame-3.92-fr5.src.rpm + +And here is the error output for the files: + +RPM build errors: + user dude does not exist - using root + user dude does not exist - using root + Installed (but unpackaged) file(s) found: + /usr/share/doc/lame/html/basic.html + /usr/share/doc/lame/html/contributors.html + /usr/share/doc/lame/html/examples.html + /usr/share/doc/lame/html/history.html + /usr/share/doc/lame/html/id3.html + /usr/share/doc/lame/html/index.html + /usr/share/doc/lame/html/lame.css + /usr/share/doc/lame/html/modes.html + /usr/share/doc/lame/html/node6.html + /usr/share/doc/lame/html/switchs.html + +Coy + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01261.eafbf152124bcd764327d9fda1e8c86f b/Ch3/datasets/spam/easy_ham/01261.eafbf152124bcd764327d9fda1e8c86f new file mode 100644 index 000000000..8f053e4c1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01261.eafbf152124bcd764327d9fda1e8c86f @@ -0,0 +1,79 @@ +From rpm-list-admin@freshrpms.net Sun Oct 6 22:52:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 758EC16F1E + for ; Sun, 6 Oct 2002 22:51:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:51:31 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g95MTCK26314 for + ; Sat, 5 Oct 2002 23:29:12 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g95MO2f16687; Sun, 6 Oct 2002 00:24:02 + +0200 +Received: from swampfox.owlriver.com (swampfox.owlriver.com + [206.21.107.147]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g95MMmf10832 for ; Sun, 6 Oct 2002 00:22:49 +0200 +Received: from localhost (localhost [127.0.0.1]) by swampfox.owlriver.com + (8.11.6/8.11.6) with ESMTP id g95MMkU13081 for ; + Sat, 5 Oct 2002 18:22:47 -0400 +From: R P Herrold +To: rpm-zzzlist@freshrpms.net +Subject: Re: f-rpm] Re: Problem building lame-3.92-fr5.src.rpm on RH8 +In-Reply-To: <200210051256.03011.coy.krill@verizon.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 5 Oct 2002 18:22:46 -0400 (EDT) +Date: Sat, 5 Oct 2002 18:22:46 -0400 (EDT) + +On Sat, 5 Oct 2002, Coy Krill wrote: + +> Sure. I used the following command to rebuild the package: +> +> rpmbuild --rebuild --target i586 lame-3.92-fr5.src.rpm +> +> And here is the error output for the files: +> +> RPM build errors: +> user dude does not exist - using root +> user dude does not exist - using root + +harmless ... + +> Installed (but unpackaged) file(s) found: +> /usr/share/doc/lame/html/basic.html +> /usr/share/doc/lame/html/contributors.html +> /usr/share/doc/lame/html/examples.html +> /usr/share/doc/lame/html/history.html + + +This is a problem with the .spec file not accounting for all +the files produced. see: + http://www.rpm.org/hintskinks/unpackaged-files/ + +-- Russ Herrold + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01262.0c914a94f4d603363d76958a84c954ec b/Ch3/datasets/spam/easy_ham/01262.0c914a94f4d603363d76958a84c954ec new file mode 100644 index 000000000..37a809057 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01262.0c914a94f4d603363d76958a84c954ec @@ -0,0 +1,68 @@ +From rpm-list-admin@freshrpms.net Sun Oct 6 22:54:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 46BBE16F81 + for ; Sun, 6 Oct 2002 22:53:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:53:15 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g969GJK17161 for + ; Sun, 6 Oct 2002 10:16:19 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g969A2f04500; Sun, 6 Oct 2002 11:10:02 + +0200 +Received: from snickers.hotpop.com (snickers.hotpop.com [204.57.55.49]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g9698tf00903 for + ; Sun, 6 Oct 2002 11:08:56 +0200 +Received: from punkass.com (kubrick.hotpop.com [204.57.55.16]) by + snickers.hotpop.com (Postfix) with SMTP id 4F63C73626 for + ; Sun, 6 Oct 2002 09:08:25 +0000 (UTC) +Received: from punkass.com (unknown [80.178.1.203]) by smtp-2.hotpop.com + (Postfix) with ESMTP id 998B01B84DD for ; + Sun, 6 Oct 2002 09:07:48 +0000 (UTC) +Message-Id: <3D9FFE0A.20006@punkass.com> +From: Roi Dayan +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830 +X-Accept-Language: en-us, en, he +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: xine src package +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Hotpop: ----------------------------------------------- Sent By + HotPOP.com FREE Email Get your FREE POP email at www.HotPOP.com + ----------------------------------------------- +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 06 Oct 2002 12:10:34 +0300 +Date: Sun, 06 Oct 2002 12:10:34 +0300 + +Same as in mplayer src package +the --with and --without not working correctly +I do --without arts and it still want to install with arts + +Roi + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01263.40cec40ea12c55f2ac9a98dc07c55d1c b/Ch3/datasets/spam/easy_ham/01263.40cec40ea12c55f2ac9a98dc07c55d1c new file mode 100644 index 000000000..63c770b36 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01263.40cec40ea12c55f2ac9a98dc07c55d1c @@ -0,0 +1,76 @@ +From rpm-list-admin@freshrpms.net Sun Oct 6 22:54:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0060116F83 + for ; Sun, 6 Oct 2002 22:53:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 06 Oct 2002 22:53:19 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g96Ah8K19284 for + ; Sun, 6 Oct 2002 11:43:08 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g96Ac1f10442; Sun, 6 Oct 2002 12:38:01 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g96AbFf00907 for ; Sun, 6 Oct 2002 12:37:15 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: xine src package +Message-Id: <20021006123628.0d199281.matthias@rpmforge.net> +In-Reply-To: <3D9FFE0A.20006@punkass.com> +References: <3D9FFE0A.20006@punkass.com> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 6 Oct 2002 12:36:28 +0200 +Date: Sun, 6 Oct 2002 12:36:28 +0200 + +Once upon a time, Roi wrote : + +> Same as in mplayer src package +> the --with and --without not working correctly +> I do --without arts and it still want to install with arts + +This time the problem seems to be that I overestimated xine-lib's configure +script as it seems that it doesn't support disabling arts... so if you have +arts-devel installed, its support will be compiled in :-/ + +Also, I had made another mistake and added the configure option to disable +lirc ot xine-lib when it should have been for xine-ui. + +All this is fixed in the upcoming "fr6" release. + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10 +Load : 0.08 0.15 0.11, AC on-line, battery charging: 100% (1:47) + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01264.a6ae16864e0d116132a7d3850e33e9a6 b/Ch3/datasets/spam/easy_ham/01264.a6ae16864e0d116132a7d3850e33e9a6 new file mode 100644 index 000000000..d6122bc6e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01264.a6ae16864e0d116132a7d3850e33e9a6 @@ -0,0 +1,62 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 12:02:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E742316F18 + for ; Mon, 7 Oct 2002 12:01:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 12:01:49 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g971OaK13228 for + ; Mon, 7 Oct 2002 02:24:41 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g971J2f17856; Mon, 7 Oct 2002 03:19:02 + +0200 +Received: from pimout3-ext.prodigy.net (pimout3-ext.prodigy.net + [207.115.63.102]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g971I7f10616 for ; Mon, 7 Oct 2002 03:18:08 +0200 +Received: from AMD1800.okie-web.com + (dialup-65.57.29.85.Dial1.KansasCity1.Level3.net [65.57.29.85]) by + pimout3-ext.prodigy.net (8.12.3 da nor stuldap/8.12.3) with ESMTP id + g971I085620022 for ; Sun, 6 Oct 2002 21:18:01 + -0400 +Subject: RH 8 no DMA for DVD drive +From: Alvie +To: rpm-zzzlist@freshrpms.net +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1033953429.13890.4.camel@AMD1800> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 06 Oct 2002 20:17:07 -0500 +Date: 06 Oct 2002 20:17:07 -0500 + +hdparm -d1 /dev/hdc says Operation not Permitted. +DVD playback is very jumpy. +Does someone have any ideas on what I can do yo get DMA transfers? +Thanks Alvie + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01265.a6a6ab5606db30f275ee08d3a54b24a9 b/Ch3/datasets/spam/easy_ham/01265.a6a6ab5606db30f275ee08d3a54b24a9 new file mode 100644 index 000000000..13c3ad083 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01265.a6a6ab5606db30f275ee08d3a54b24a9 @@ -0,0 +1,71 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 12:03:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EE89D16F1C + for ; Mon, 7 Oct 2002 12:02:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 12:02:22 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g971cnK13596 for + ; Mon, 7 Oct 2002 02:38:54 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g971X2f09425; Mon, 7 Oct 2002 03:33:02 + +0200 +Received: from athlon.ckloiber.com (rdu57-224-069.nc.rr.com + [66.57.224.69]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g971WMf05694 for ; Mon, 7 Oct 2002 03:32:23 +0200 +Received: from athlon.ckloiber.com (athlon.ckloiber.com [127.0.0.1]) by + athlon.ckloiber.com (8.12.5/8.12.5) with ESMTP id g971WeCN029028 for + ; Sun, 6 Oct 2002 21:32:40 -0400 +Received: (from ckloiber@localhost) by athlon.ckloiber.com + (8.12.5/8.12.5/Submit) id g971WdUU029026; Sun, 6 Oct 2002 21:32:39 -0400 +X-Authentication-Warning: athlon.ckloiber.com: ckloiber set sender to + ckloiber@ckloiber.com using -f +Subject: Re: RH 8 no DMA for DVD drive +From: Chris Kloiber +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <1033953429.13890.4.camel@AMD1800> +References: <1033953429.13890.4.camel@AMD1800> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1033954359.28832.4.camel@athlon.ckloiber.com> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 06 Oct 2002 21:32:39 -0400 +Date: 06 Oct 2002 21:32:39 -0400 + +On Sun, 2002-10-06 at 21:17, Alvie wrote: +> hdparm -d1 /dev/hdc says Operation not Permitted. +> DVD playback is very jumpy. +> Does someone have any ideas on what I can do yo get DMA transfers? +> Thanks Alvie + +Add to /etc/modules.conf: + +options ide-cd dma=1 + +-- +Chris Kloiber + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01266.94c891b6d36df9a9c187a71e7d90eb83 b/Ch3/datasets/spam/easy_ham/01266.94c891b6d36df9a9c187a71e7d90eb83 new file mode 100644 index 000000000..aec9857a5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01266.94c891b6d36df9a9c187a71e7d90eb83 @@ -0,0 +1,84 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 12:04:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 090EA16F19 + for ; Mon, 7 Oct 2002 12:03:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 12:03:20 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g974XHK18362 for + ; Mon, 7 Oct 2002 05:33:17 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g974R1f27888; Mon, 7 Oct 2002 06:27:01 + +0200 +Received: from pimout1-ext.prodigy.net (pimout1-ext.prodigy.net + [207.115.63.77]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g974QPf26615 for ; Mon, 7 Oct 2002 06:26:26 +0200 +Received: from AMD1800.okie-web.com + (dialup-65.57.29.85.Dial1.KansasCity1.Level3.net [65.57.29.85]) by + pimout1-ext.prodigy.net (8.12.3 da nor stuldap/8.12.3) with ESMTP id + g974QI7g178100 for ; Mon, 7 Oct 2002 00:26:19 + -0400 +Subject: Re: RH 8 no DMA for DVD drive +From: Alvie +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <1033954359.28832.4.camel@athlon.ckloiber.com> +References: <1033953429.13890.4.camel@AMD1800> + <1033954359.28832.4.camel@athlon.ckloiber.com> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1033964717.1263.8.camel@AMD1800> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 06 Oct 2002 23:25:15 -0500 +Date: 06 Oct 2002 23:25:15 -0500 + +Thank you, that was exactly what I needed. +DVD works great now. +1 more problem? +Video-DVDRip worked on RH 7.3 but can't get contents of DVD, last +message is 'libdvdread: using libdvdcss 1.2.2 for DVD access'. +but it fails. + +On Sun, 2002-10-06 at 20:32, Chris Kloiber wrote: +> On Sun, 2002-10-06 at 21:17, Alvie wrote: +> > hdparm -d1 /dev/hdc says Operation not Permitted. +> > DVD playback is very jumpy. +> > Does someone have any ideas on what I can do yo get DMA transfers? +> > Thanks Alvie +> +> Add to /etc/modules.conf: +> +> options ide-cd dma=1 +> +> -- +> Chris Kloiber +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01267.88686fe91228476214e39e736ef35838 b/Ch3/datasets/spam/easy_ham/01267.88686fe91228476214e39e736ef35838 new file mode 100644 index 000000000..758fb4f4d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01267.88686fe91228476214e39e736ef35838 @@ -0,0 +1,72 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 12:04:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7476B16F1A + for ; Mon, 7 Oct 2002 12:03:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 12:03:22 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9766DK20698 for + ; Mon, 7 Oct 2002 07:06:13 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97602f16257; Mon, 7 Oct 2002 08:00:02 + +0200 +Received: from snickers.hotpop.com (snickers.hotpop.com [204.57.55.49]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g975xRf15813 for + ; Mon, 7 Oct 2002 07:59:27 +0200 +Received: from punkass.com (kubrick.hotpop.com [204.57.55.16]) by + snickers.hotpop.com (Postfix) with SMTP id B035B700A6 for + ; Mon, 7 Oct 2002 05:59:11 +0000 (UTC) +Received: from punkass.com (unknown [80.178.1.203]) by smtp-1.hotpop.com + (Postfix) with ESMTP id B78CF2F813E for ; + Mon, 7 Oct 2002 05:58:30 +0000 (UTC) +Message-Id: <3DA12334.2010705@punkass.com> +From: Roi Dayan +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830 +X-Accept-Language: en-us, en, he +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: apt-get problem ? +References: <3D9FFE0A.20006@punkass.com> + <20021006123628.0d199281.matthias@rpmforge.net> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Hotpop: ----------------------------------------------- Sent By + HotPOP.com FREE Email Get your FREE POP email at www.HotPOP.com + ----------------------------------------------- +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 07 Oct 2002 08:01:24 +0200 +Date: Mon, 07 Oct 2002 08:01:24 +0200 + +When I try to use apt-get upgrade +it wants to install libusb while I got it +(same version) +and all collapse because of this. + +Roi + + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01268.0cd2c295a12fb03140c6549cb8980012 b/Ch3/datasets/spam/easy_ham/01268.0cd2c295a12fb03140c6549cb8980012 new file mode 100644 index 000000000..7a528fee2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01268.0cd2c295a12fb03140c6549cb8980012 @@ -0,0 +1,74 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 12:04:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 105E716F6C + for ; Mon, 7 Oct 2002 12:03:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 12:03:29 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g976WqK21300 for + ; Mon, 7 Oct 2002 07:32:52 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g976T1f21517; Mon, 7 Oct 2002 08:29:01 + +0200 +Received: from evv.kamakiriad.local (cable-b-36.sigecom.net + [63.69.210.36]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g976S5f18032 for ; Mon, 7 Oct 2002 08:28:05 +0200 +Received: from aquila.kamakiriad.local (aquila.kamakiriad.local + [192.168.1.3]) by kamakiriad.com (8.11.6/8.11.6) with SMTP id g976RrP02834 + for ; Mon, 7 Oct 2002 01:27:53 -0500 +From: Brian Fahrlander +To: rpm-zzzlist@freshrpms.net +Subject: Re: apt-get problem ? +Message-Id: <20021007012740.4c1f4b10.kilroy@kamakiriad.com> +In-Reply-To: <3DA12334.2010705@punkass.com> +References: <3D9FFE0A.20006@punkass.com> + <20021006123628.0d199281.matthias@rpmforge.net> + <3DA12334.2010705@punkass.com> +X-Mailer: Sylpheed version 0.8.5 (GTK+ 1.2.10; i386-redhat-linux) +X-Message-Flag: : Shame on you! You know Outlook is how viruses are spread! +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 01:27:40 -0500 +Date: Mon, 7 Oct 2002 01:27:40 -0500 + +On Mon, 07 Oct 2002 08:01:24 +0200, Roi Dayan wrote: + +> When I try to use apt-get upgrade +> it wants to install libusb while I got it +> (same version) +> and all collapse because of this. + + I had that too; I removed libusb (I don't think it needed --nodeps) and then 'apt-get -f install' and all was well. + +------------------------------------------------------------------------ +Brian Fahrländer Linux Zealot, Conservative, and Technomad +Evansville, IN My Voyage: http://www.CounterMoon.com +ICQ 5119262 +------------------------------------------------------------------------ +angegangen, Schlange-Hüften, sein es ganz rüber jetzt. Bügel innen fest, +weil es eine lange, süsse Fahrt ist. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01269.e302364af9816c7d7be5926ebb7652ed b/Ch3/datasets/spam/easy_ham/01269.e302364af9816c7d7be5926ebb7652ed new file mode 100644 index 000000000..6b23c083d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01269.e302364af9816c7d7be5926ebb7652ed @@ -0,0 +1,79 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 12:05:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0DECC16F90 + for ; Mon, 7 Oct 2002 12:04:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 12:04:35 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97AaKK27801 for + ; Mon, 7 Oct 2002 11:36:20 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97AX1f27670; Mon, 7 Oct 2002 12:33:02 + +0200 +Received: from urgent.rug.ac.be (urgent.rug.ac.be [157.193.88.1]) by + egwn.net (8.11.6/8.11.6/EGWN) with SMTP id g97AWsf27637 for + ; Mon, 7 Oct 2002 12:32:54 +0200 +Received: (qmail 14013 invoked by uid 505); 7 Oct 2002 10:33:02 -0000 +Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; + 7 Oct 2002 10:33:02 -0000 +From: Thomas Vander Stichele +To: RPM-List@freshrpms.net +Subject: a problem with apt-get +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 12:33:02 +0200 (CEST) +Date: Mon, 7 Oct 2002 12:33:02 +0200 (CEST) + +Hi, + +In my build scripts, I have problems with some of the kernel packages. + +For kernel-sources, I get : + +Package kernel-source is a virtual package provided by: + kernel-source#2.4.18-3 2.4.18-3 + kernel-source#2.4.18-3 2.4.18-3 + +on running apt-get install kernel-source + +Now, first of all, this doesn't really tell me what the two options are ;) +Second, is there some way I can tell apt-get to install either ? This is +done from automatic build scripts so I'd like it to proceed anyway. + +Thanks, +Thomas + +-- + +The Dave/Dina Project : future TV today ! - http://davedina.apestaart.org/ +<-*- -*-> +I'm alive. +I can tell because of the pain. +<-*- thomas@apestaart.org -*-> +URGent, the best radio on the Internet - 24/7 ! - http://urgent.rug.ac.be/ + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01270.49d052edd258d0f9eb08ca05e177f965 b/Ch3/datasets/spam/easy_ham/01270.49d052edd258d0f9eb08ca05e177f965 new file mode 100644 index 000000000..6c3cdbc8a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01270.49d052edd258d0f9eb08ca05e177f965 @@ -0,0 +1,78 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 18:28:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D90D216F17 + for ; Mon, 7 Oct 2002 18:28:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 18:28:12 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97GKuK06989 for + ; Mon, 7 Oct 2002 17:20:57 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97GG2f23405; Mon, 7 Oct 2002 18:16:02 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g97GF7f22871 for + ; Mon, 7 Oct 2002 18:15:07 +0200 +Received: from cs78128237.pp.htv.fi ([62.78.128.237]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g97GF1g22469 for ; + Mon, 7 Oct 2002 19:15:01 +0300 (EETDST) +Subject: Re: RH 8 no DMA for DVD drive +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20021007085643.5b9bb88c.matthias@rpmforge.net> +References: <1033953429.13890.4.camel@AMD1800> + <1033954359.28832.4.camel@athlon.ckloiber.com> + <1033964717.1263.8.camel@AMD1800> + <20021007085643.5b9bb88c.matthias@rpmforge.net> +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1034007312.2296.8.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g97GF7f22871 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 07 Oct 2002 19:15:11 +0300 +Date: 07 Oct 2002 19:15:11 +0300 + +On Mon, 2002-10-07 at 09:56, Matthias Saou wrote: + +> > Thank you, that was exactly what I needed. +> > DVD works great now. +> +> BTW, I think I'll kake it so that my ogle package automatically inserts +> this "options ide-cd dma=1" to /etc/modules.conf! It currently creates the +> /dev/dvd link to /dev/cdrom (which will work most of the time, if there's +> only one drive) if no /dev/dvd exists. + +Eek. Maybe it's just me, but I don't think that's a good idea. +Outputting a message in %post and providing a README of some kind would +be better, as well as perhaps adding a note in %description. + +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01271.519b987eddc0633ac3a5908c33a1fa2c b/Ch3/datasets/spam/easy_ham/01271.519b987eddc0633ac3a5908c33a1fa2c new file mode 100644 index 000000000..b9949c558 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01271.519b987eddc0633ac3a5908c33a1fa2c @@ -0,0 +1,88 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 18:28:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id ECBDE16F18 + for ; Mon, 7 Oct 2002 18:28:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 18:28:29 +0100 (IST) +Received: from egwn.net ([193.172.5.4]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97GiXK07957 for ; + Mon, 7 Oct 2002 17:44:34 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97GbEf28185; Mon, 7 Oct 2002 18:37:14 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g97GaYf20550 for + ; Mon, 7 Oct 2002 18:36:34 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: RH 8 no DMA for DVD drive +Message-Id: <20021007183629.40ab9860.matthias@rpmforge.net> +In-Reply-To: <1034007312.2296.8.camel@bobcat.ods.org> +References: <1033953429.13890.4.camel@AMD1800> + <1033954359.28832.4.camel@athlon.ckloiber.com> + <1033964717.1263.8.camel@AMD1800> + <20021007085643.5b9bb88c.matthias@rpmforge.net> + <1034007312.2296.8.camel@bobcat.ods.org> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 18:36:29 +0200 +Date: Mon, 7 Oct 2002 18:36:29 +0200 + +Once upon a time, Ville wrote : + +> > BTW, I think I'll kake it so that my ogle package automatically inserts +> > this "options ide-cd dma=1" to /etc/modules.conf! It currently creates +> > the/dev/dvd link to /dev/cdrom (which will work most of the time, if +> > there's only one drive) if no /dev/dvd exists. +> +> Eek. Maybe it's just me, but I don't think that's a good idea. +> Outputting a message in %post and providing a README of some kind would +> be better, as well as perhaps adding a note in %description. + +Why "Eek"? :-) +If no /dev/dvd exists, it'll create it. +If /dev/dvd exists, it won't touch it. +If someone installs ogle (a DVD player), I'm assuming the hardware is +recent enough for software playback and that the drive is a DVD-ROM... all +of them support DMA! But since that change requires a reboot or a manual +change, I'm still hesitating to integrate it :-/ + +My goal is to allow users to install a DVD player through synaptic and play +DVDs in no time. Outputting a message in the %post section of a package is +always a bad idea, putting the tip in the %description sounds good though. + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.07 0.14 0.16 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01272.8262ec8f7abfb5b42a2548ce966120dc b/Ch3/datasets/spam/easy_ham/01272.8262ec8f7abfb5b42a2548ce966120dc new file mode 100644 index 000000000..8210d02df --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01272.8262ec8f7abfb5b42a2548ce966120dc @@ -0,0 +1,182 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 18:28:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0973F16F19 + for ; Mon, 7 Oct 2002 18:28:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 18:28:32 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97GmUK08066 for + ; Mon, 7 Oct 2002 17:48:30 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97Gb6f26808; Mon, 7 Oct 2002 18:37:06 + +0200 +Received: from pimout4-ext.prodigy.net (pimout4-ext.prodigy.net + [207.115.63.103]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g97GZwf17403 for ; Mon, 7 Oct 2002 18:35:58 +0200 +Received: from AMD1800.okie-web.com + (dialup-65.57.28.171.Dial1.KansasCity1.Level3.net [65.57.28.171]) by + pimout4-ext.prodigy.net (8.12.3 da nor stuldap/8.12.3) with ESMTP id + g97GZn1H256218 for ; Mon, 7 Oct 2002 12:35:50 + -0400 +Subject: Re: RH 8 no DMA for DVD drive +From: Alvie +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20021007155913.3b24ae76.matthias@rpmforge.net> +References: <1033953429.13890.4.camel@AMD1800> + <1033954359.28832.4.camel@athlon.ckloiber.com> + <1033964717.1263.8.camel@AMD1800> + <20021007085643.5b9bb88c.matthias@rpmforge.net> + <1033997998.1665.6.camel@AMD1800> + <20021007155913.3b24ae76.matthias@rpmforge.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1034008552.1872.10.camel@AMD1800> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 07 Oct 2002 11:35:47 -0500 +Date: 07 Oct 2002 11:35:47 -0500 + +On Mon, 2002-10-07 at 08:59, Matthias Saou wrote: +> Once upon a time, Alvie wrote : +> +> > Thanks, I seem to be having problems with rebuilding transcode from SRC +> > it gets confused from previous errors and gives up. +> +> Could you give the output of the error? +> + +This is only the last part of it.I used 'rpmbuild --rebuild --without avifile transcode.0.6.1-fr2.src.rpm'. +af6_decore.cpp:305: 'WAVEFORMATEX' is used as a type, but is not defined +as a + type. +af6_decore.cpp:306: parse error before `if' +af6_decore.cpp:308: syntax error before `->' token +af6_decore.cpp:313: `wvFmt' was not declared in this scope +af6_decore.cpp:313: `avm_wave_format_name' was not declared in this +scope +af6_decore.cpp:314: `wvFmt' was not declared in this scope +af6_decore.cpp:315: `wvFmt' was not declared in this scope +af6_decore.cpp:316: `wvFmt' was not declared in this scope +af6_decore.cpp:316: ISO C++ forbids declaration of `fprintf' with no +type +af6_decore.cpp:316: redefinition of `int fprintf' +af6_decore.cpp:161: `int fprintf' previously defined here +af6_decore.cpp:316: initializer list being treated as compound +expression +af6_decore.cpp:317: 'WAVEFORMATEX' is used as a type, but is not defined +as a + type. +af6_decore.cpp:318: syntax error before `->' token +af6_decore.cpp:321: `fmt' was not declared in this scope +af6_decore.cpp:321: `avm_wave_format_name' was not declared in this +scope +af6_decore.cpp:322: `fmt' was not declared in this scope +af6_decore.cpp:323: `fmt' was not declared in this scope +af6_decore.cpp:324: `fmt' was not declared in this scope +af6_decore.cpp:324: ISO C++ forbids declaration of `fprintf' with no +type +af6_decore.cpp:324: redefinition of `int fprintf' +af6_decore.cpp:316: `int fprintf' previously defined here +af6_decore.cpp:324: initializer list being treated as compound +expression +af6_decore.cpp:327: parse error before `if' +af6_decore.cpp:330: syntax error before `->' token +af6_decore.cpp:349: ISO C++ forbids declaration of `samples' with no +type +af6_decore.cpp:349: conflicting types for `int samples' +af6_decore.cpp:290: previous declaration as `unsigned int samples' +af6_decore.cpp:349: `fmt' was not declared in this scope +af6_decore.cpp:350: ISO C++ forbids declaration of `buffer_size' with no +type +af6_decore.cpp:350: conflicting types for `int buffer_size' +af6_decore.cpp:288: previous declaration as `unsigned int buffer_size' +af6_decore.cpp:350: `fmt' was not declared in this scope +af6_decore.cpp:351: ISO C++ forbids declaration of `buffer' with no type +af6_decore.cpp:351: conflicting types for `int buffer' +af6_decore.cpp:291: previous declaration as `char*buffer' +af6_decore.cpp:351: invalid conversion from `char*' to `int' +af6_decore.cpp:352: parse error before `if' +af6_decore.cpp:354: syntax error before `->' token +af6_decore.cpp:359: ISO C++ forbids declaration of `fflush' with no type +af6_decore.cpp:359: redefinition of `int fflush' + +af6_decore.cpp:288: previous declaration as `unsigned int buffer_size' +af6_decore.cpp:350: `fmt' was not declared in this scope +af6_decore.cpp:351: ISO C++ forbids declaration of `buffer' with no type +af6_decore.cpp:351: conflicting types for `int buffer' +af6_decore.cpp:291: previous declaration as `char*buffer' +af6_decore.cpp:351: invalid conversion from `char*' to `int' +af6_decore.cpp:352: parse error before `if' +af6_decore.cpp:354: syntax error before `->' token +af6_decore.cpp:359: ISO C++ forbids declaration of `fflush' with no type +af6_decore.cpp:359: redefinition of `int fflush' +af6_decore.cpp:208: `int fflush' previously defined here +af6_decore.cpp:359: invalid conversion from `_IO_FILE*' to `int' +af6_decore.cpp:360: `ipipe' was not declared in this scope +af6_decore.cpp:360: `sync_str' was not declared in this scope +af6_decore.cpp:360: `sync_str' was not declared in this scope +af6_decore.cpp:360: ISO C++ forbids declaration of `p_write' with no +type +af6_decore.cpp:360: redefinition of `int p_write' +af6_decore.cpp:209: `int p_write' previously defined here +af6_decore.cpp:360: initializer list being treated as compound +expression +af6_decore.cpp:363: parse error before `while' +af6_decore.cpp:368: syntax error before `->' token +make[3]: *** [af6_decore.lo] Error 1 +make[3]: Leaving directory +`/usr/src/redhat/BUILD/transcode-0.6.1/import' +make[2]: *** [all-recursive] Error 1 +make[2]: Leaving directory +`/usr/src/redhat/BUILD/transcode-0.6.1/import' + + +> > Using trancode rpm I can't get transcode command line args to +> > work.Although it's been a while since I used it - maybe I forgot how! +> +This was a dumb mistake on my part. I did'nt have libdvdcss-devel, the +transcode command line args work fine now, but not so for DVD::RIP. +Thanks for help +Alvie + +> I'm encoding a DVD to DivX4 right now on my home computer, and it works +> fine. My current Red Hat 8.0 build of transcode has avifile support +> disabled, that may be your problem? It's because gcc 3.2 isn't currently +> able to recompile avifile... :-/ +> +> Matthias +> +> -- +> Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +> Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +> Load : 0.09 0.12 0.21 +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01273.0fbb8edd390685df241007451832f145 b/Ch3/datasets/spam/easy_ham/01273.0fbb8edd390685df241007451832f145 new file mode 100644 index 000000000..08974348e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01273.0fbb8edd390685df241007451832f145 @@ -0,0 +1,86 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 18:28:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4AEE216F17 + for ; Mon, 7 Oct 2002 18:28:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 18:28:35 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97H2QK08536 for + ; Mon, 7 Oct 2002 18:02:27 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97Gt2f10948; Mon, 7 Oct 2002 18:55:02 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g97GsZf10518 for + ; Mon, 7 Oct 2002 18:54:35 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: transcode build problem (was: RH 8 no DMA for DVD drive) +Message-Id: <20021007185430.7c7e9245.matthias@rpmforge.net> +In-Reply-To: <1034008552.1872.10.camel@AMD1800> +References: <1033953429.13890.4.camel@AMD1800> + <1033954359.28832.4.camel@athlon.ckloiber.com> + <1033964717.1263.8.camel@AMD1800> + <20021007085643.5b9bb88c.matthias@rpmforge.net> + <1033997998.1665.6.camel@AMD1800> + <20021007155913.3b24ae76.matthias@rpmforge.net> + <1034008552.1872.10.camel@AMD1800> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 18:54:30 +0200 +Date: Mon, 7 Oct 2002 18:54:30 +0200 + +Once upon a time, Alvie wrote : + +> This is only the last part of it.I used 'rpmbuild --rebuild --without +> avifile transcode.0.6.1-fr2.src.rpm'. + +> af6_decore.cpp:305: 'WAVEFORMATEX' +> is used as a type, but is not defined as a +> type. +> af6_decore.cpp:306: parse error before `if' +[...] + +All of these "af6" are related to avifile6 support :-/ +Normally, my 0.6.1-fr2 build of transcode defaults to *not* use avifile, +but you can use "--with avifile6" to force recompiling against it. + +Do you have an old avifile installed maybe? +Can you check the "./configure ..." line run at the beginning of the +rebuild process to see if it does include the "--without-avifile6" option? + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.23 0.14 0.14 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01274.bfe4843cd130926efe53dc96bd3dfeea b/Ch3/datasets/spam/easy_ham/01274.bfe4843cd130926efe53dc96bd3dfeea new file mode 100644 index 000000000..2d0297112 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01274.bfe4843cd130926efe53dc96bd3dfeea @@ -0,0 +1,102 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 18:41:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8350016F16 + for ; Mon, 7 Oct 2002 18:41:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 18:41:09 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97HRrK09669 for + ; Mon, 7 Oct 2002 18:27:53 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97HL3f32052; Mon, 7 Oct 2002 19:21:03 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g97HKVf31932 for + ; Mon, 7 Oct 2002 19:20:31 +0200 +Received: from cs78128237.pp.htv.fi ([62.78.128.237]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g97HKFg02618 for ; + Mon, 7 Oct 2002 20:20:20 +0300 (EETDST) +Subject: Re: RH 8 no DMA for DVD drive +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20021007183629.40ab9860.matthias@rpmforge.net> +References: <1033953429.13890.4.camel@AMD1800> + <1033954359.28832.4.camel@athlon.ckloiber.com> + <1033964717.1263.8.camel@AMD1800> + <20021007085643.5b9bb88c.matthias@rpmforge.net> + <1034007312.2296.8.camel@bobcat.ods.org> + <20021007183629.40ab9860.matthias@rpmforge.net> +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1034011232.8419.65.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g97HKVf31932 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 07 Oct 2002 20:20:26 +0300 +Date: 07 Oct 2002 20:20:26 +0300 + +On Mon, 2002-10-07 at 19:36, Matthias Saou wrote: + +> > Eek. Maybe it's just me, but I don't think that's a good idea. +> > Outputting a message in %post and providing a README of some kind would +> > be better, as well as perhaps adding a note in %description. +> +> Why "Eek"? :-) +> If no /dev/dvd exists, it'll create it. +> If /dev/dvd exists, it won't touch it. + +I assume that you won't %ghost or remove these and the modules.conf +change on uninstall, though. So people who are installing this RPM and +are unfortunate enough to have a DVD drive (or just an ordinary CD, +non-DVD drive) that doesn't support DMA will be left with a system +without a working CD drive, even after removing the RPM. And without +ever knowing what struck them. You can't remove the DMA setting from +modules.conf either unless you're sure that ogle added it there and +nothing else needs it. + +The /dev stuff isn't that dangerous, but the modules.conf change can +be. That's why "Eek" :) + +> If someone installs ogle (a DVD player), I'm assuming the hardware is +> recent enough for software playback and that the drive is a DVD-ROM... all +> of them support DMA! But since that change requires a reboot or a manual +> change, I'm still hesitating to integrate it :-/ + +A worthy goal... + +> My goal is to allow users to install a DVD player through synaptic and play +> DVDs in no time. Outputting a message in the %post section of a package is +> always a bad idea, putting the tip in the %description sounds good though. + +How about splitting the creation of the symlinks and modules.conf +modifications into a separate RPM? + +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01275.5355809b43b1476a1a64a01049857097 b/Ch3/datasets/spam/easy_ham/01275.5355809b43b1476a1a64a01049857097 new file mode 100644 index 000000000..9e23b8f92 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01275.5355809b43b1476a1a64a01049857097 @@ -0,0 +1,89 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 18:41:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 687B916F16 + for ; Mon, 7 Oct 2002 18:41:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 18:41:20 +0100 (IST) +Received: from egwn.net ([193.172.5.4]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97HbUK10039 for ; + Mon, 7 Oct 2002 18:37:30 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97HU3f14660; Mon, 7 Oct 2002 19:30:03 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g97HStf13170 for + ; Mon, 7 Oct 2002 19:28:55 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: RH 8 no DMA for DVD drive +Message-Id: <20021007192851.11d250b8.matthias@rpmforge.net> +In-Reply-To: <1034011232.8419.65.camel@bobcat.ods.org> +References: <1033953429.13890.4.camel@AMD1800> + <1033954359.28832.4.camel@athlon.ckloiber.com> + <1033964717.1263.8.camel@AMD1800> + <20021007085643.5b9bb88c.matthias@rpmforge.net> + <1034007312.2296.8.camel@bobcat.ods.org> + <20021007183629.40ab9860.matthias@rpmforge.net> + <1034011232.8419.65.camel@bobcat.ods.org> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 19:28:51 +0200 +Date: Mon, 7 Oct 2002 19:28:51 +0200 + +Once upon a time, Ville wrote : + +> I assume that you won't %ghost or remove these and the modules.conf +> change on uninstall, though. So people who are installing this RPM and +> are unfortunate enough to have a DVD drive (or just an ordinary CD, +> non-DVD drive) that doesn't support DMA will be left with a system +> without a working CD drive, even after removing the RPM. And without +> ever knowing what struck them. You can't remove the DMA setting from +> modules.conf either unless you're sure that ogle added it there and +> nothing else needs it. + +I've never heard of any CD-ROM or DVD-ROM drive having problems with DMA... +although there probably is since Red Hat decided to default disabling it a +few releases back :-/ +Normally, even if you try to enable DMA and your device doesn't support it, +it simply don't be able to make the change, and that's it. The problem IIRC +is with crappy hardware that is supposed to support DMA but doesn't work as +expected when it's enabled... maybe Chris could confirm this? ;-) + +I guess I'll settle for the /dev/dvd link change as described and putting +the DMA tip in the %description :-) + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.00 0.05 0.14 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01276.ae29d5365a747f3c249768ba47e73b52 b/Ch3/datasets/spam/easy_ham/01276.ae29d5365a747f3c249768ba47e73b52 new file mode 100644 index 000000000..1e5a9044d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01276.ae29d5365a747f3c249768ba47e73b52 @@ -0,0 +1,104 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 18:54:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0744416F03 + for ; Mon, 7 Oct 2002 18:54:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 18:54:52 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97HkkK10443 for + ; Mon, 7 Oct 2002 18:46:47 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97Hf3f27840; Mon, 7 Oct 2002 19:41:03 + +0200 +Received: from pimout4-ext.prodigy.net (pimout4-ext.prodigy.net + [207.115.63.103]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g97HeXf27563 for ; Mon, 7 Oct 2002 19:40:33 +0200 +Received: from AMD1800.okie-web.com + (dialup-65.57.28.171.Dial1.KansasCity1.Level3.net [65.57.28.171]) by + pimout4-ext.prodigy.net (8.12.3 da nor stuldap/8.12.3) with ESMTP id + g97HeP1H527048 for ; Mon, 7 Oct 2002 13:40:26 + -0400 +Subject: Re: transcode build problem (was: RH 8 no DMA for DVD drive) +From: Alvie +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20021007185430.7c7e9245.matthias@rpmforge.net> +References: <1033953429.13890.4.camel@AMD1800> + <1033954359.28832.4.camel@athlon.ckloiber.com> + <1033964717.1263.8.camel@AMD1800> + <20021007085643.5b9bb88c.matthias@rpmforge.net> + <1033997998.1665.6.camel@AMD1800> + <20021007155913.3b24ae76.matthias@rpmforge.net> + <1034008552.1872.10.camel@AMD1800> + <20021007185430.7c7e9245.matthias@rpmforge.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1034012428.1872.28.camel@AMD1800> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 07 Oct 2002 12:40:26 -0500 +Date: 07 Oct 2002 12:40:26 -0500 + +On Mon, 2002-10-07 at 11:54, Matthias Saou wrote: +> Once upon a time, Alvie wrote : +> +> > This is only the last part of it.I used 'rpmbuild --rebuild --without +> > avifile transcode.0.6.1-fr2.src.rpm'. +> +> > af6_decore.cpp:305: 'WAVEFORMATEX' +> > is used as a type, but is not defined as a +> > type. +> > af6_decore.cpp:306: parse error before `if' +> [...] +> +> All of these "af6" are related to avifile6 support :-/ +> Normally, my 0.6.1-fr2 build of transcode defaults to *not* use avifile, +> but you can use "--with avifile6" to force recompiling against it. +> +> Do you have an old avifile installed maybe? +> Can you check the "./configure ..." line run at the beginning of the +> rebuild process to see if it does include the "--without-avifile6" option? +> +Yes it was there. +You guessed the problem correctly in an earlier e-mail There was still +remnants remaining from an old failed avifile installation. +The transcode src.rpm now builds perfectly. +Thank you VERY much! +You are GOOD. +Alvie + +> Matthias +> +> -- +> Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +> Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +> Load : 0.23 0.14 0.14 +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01277.80c68862f31f15ac616d77358c449fed b/Ch3/datasets/spam/easy_ham/01277.80c68862f31f15ac616d77358c449fed new file mode 100644 index 000000000..3de6256d2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01277.80c68862f31f15ac616d77358c449fed @@ -0,0 +1,81 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 18:54:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D6B8516F16 + for ; Mon, 7 Oct 2002 18:54:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 18:54:53 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97HnlK10525 for + ; Mon, 7 Oct 2002 18:49:47 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97Hd1f26999; Mon, 7 Oct 2002 19:39:01 + +0200 +Received: from mail.j2solutions.net (seattle.connectednw.com + [216.163.77.13]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g97Hcbf24778 for ; Mon, 7 Oct 2002 19:38:37 +0200 +Received: from labmail.redmond.corp.microsoft.com (seattle.connectednw.com + [::ffff:216.163.77.13]) (AUTH: CRAM-MD5 hosting@j2solutions.net) by + mail.j2solutions.net with esmtp; Mon, 07 Oct 2002 10:38:31 -0700 +From: Jesse Keating +To: rpm-zzzlist@freshrpms.net +Subject: Re: RH 8 no DMA for DVD drive +Message-Id: <20021007103831.642c1bbb.hosting@j2solutions.net> +In-Reply-To: <20021007192851.11d250b8.matthias@rpmforge.net> +References: <1033953429.13890.4.camel@AMD1800> + <1033954359.28832.4.camel@athlon.ckloiber.com> + <1033964717.1263.8.camel@AMD1800> + <20021007085643.5b9bb88c.matthias@rpmforge.net> + <1034007312.2296.8.camel@bobcat.ods.org> + <20021007183629.40ab9860.matthias@rpmforge.net> + <1034011232.8419.65.camel@bobcat.ods.org> + <20021007192851.11d250b8.matthias@rpmforge.net> +Organization: j2Solutions +X-Mailer: Sylpheed version 0.8.1claws (GTK+ 1.2.10; ) +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 10:38:31 -0700 +Date: Mon, 7 Oct 2002 10:38:31 -0700 + +On Mon, 7 Oct 2002 19:28:51 +0200 +Matthias Saou wrote: + +# I've never heard of any CD-ROM or DVD-ROM drive having problems with +# DMA... although there probably is since Red Hat decided to default +# disabling it a few releases back :-/ + +When I worked as a PC repair tech for a Computer store chain, I did +run across quite a few DVD drives that would lock up if DMA was +enabled. It's more of a chipset/drive problem than a Drive by itself. + +-- +Jesse Keating +j2Solutions.net +Mondo DevTeam (www.mondorescue.org) + +Was I helpful? Let others know: + http://svcs.affero.net/rm.php?r=jkeating + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01278.a6b5dc8309ecd924c2ee872d35899de7 b/Ch3/datasets/spam/easy_ham/01278.a6b5dc8309ecd924c2ee872d35899de7 new file mode 100644 index 000000000..2cd8c0134 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01278.a6b5dc8309ecd924c2ee872d35899de7 @@ -0,0 +1,80 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 19:49:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 05B1216F03 + for ; Mon, 7 Oct 2002 19:49:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 19:49:15 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97HvfK10797 for + ; Mon, 7 Oct 2002 18:57:41 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97Hl2f32032; Mon, 7 Oct 2002 19:47:02 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g97Hk2f20455 for + ; Mon, 7 Oct 2002 19:46:02 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: RH 8 no DMA for DVD drive +Message-Id: <20021007194559.0482f194.matthias@rpmforge.net> +In-Reply-To: <20021007103831.642c1bbb.hosting@j2solutions.net> +References: <1033953429.13890.4.camel@AMD1800> + <1033954359.28832.4.camel@athlon.ckloiber.com> + <1033964717.1263.8.camel@AMD1800> + <20021007085643.5b9bb88c.matthias@rpmforge.net> + <1034007312.2296.8.camel@bobcat.ods.org> + <20021007183629.40ab9860.matthias@rpmforge.net> + <1034011232.8419.65.camel@bobcat.ods.org> + <20021007192851.11d250b8.matthias@rpmforge.net> + <20021007103831.642c1bbb.hosting@j2solutions.net> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 19:45:59 +0200 +Date: Mon, 7 Oct 2002 19:45:59 +0200 + +Once upon a time, Jesse wrote : + +> When I worked as a PC repair tech for a Computer store chain, I did +> run across quite a few DVD drives that would lock up if DMA was +> enabled. It's more of a chipset/drive problem than a Drive by itself. + +Chipset? Let me guess : VIA or SiS? :-)))) +OK, so I'll follow Red Hat's choice of leaving the DMA setting alone and +orienting the users to some page explaining how to enable it "at your own +risk" ;-) + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.03 0.09 0.10 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01279.8cd7c5fcfd7a06b4e2b066a7c76846fe b/Ch3/datasets/spam/easy_ham/01279.8cd7c5fcfd7a06b4e2b066a7c76846fe new file mode 100644 index 000000000..fd74c44a8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01279.8cd7c5fcfd7a06b4e2b066a7c76846fe @@ -0,0 +1,75 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 19:49:17 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C2FB116F16 + for ; Mon, 7 Oct 2002 19:49:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 19:49:16 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97I1dK10851 for + ; Mon, 7 Oct 2002 19:01:40 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97Ht3f00431; Mon, 7 Oct 2002 19:55:03 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g97Hsjf32477 for + ; Mon, 7 Oct 2002 19:54:45 +0200 +Received: from cs78128237.pp.htv.fi ([62.78.128.237]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g97Hsag07854 for ; + Mon, 7 Oct 2002 20:54:37 +0300 (EETDST) +Subject: Re: RH 8 no DMA for DVD drive +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20021007192851.11d250b8.matthias@rpmforge.net> +References: <1033953429.13890.4.camel@AMD1800> + <1033954359.28832.4.camel@athlon.ckloiber.com> + <1033964717.1263.8.camel@AMD1800> + <20021007085643.5b9bb88c.matthias@rpmforge.net> + <1034007312.2296.8.camel@bobcat.ods.org> + <20021007183629.40ab9860.matthias@rpmforge.net> + <1034011232.8419.65.camel@bobcat.ods.org> + <20021007192851.11d250b8.matthias@rpmforge.net> +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1034013290.8419.85.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g97Hsjf32477 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 07 Oct 2002 20:54:48 +0300 +Date: 07 Oct 2002 20:54:48 +0300 + +On Mon, 2002-10-07 at 20:28, Matthias Saou wrote: + +> I guess I'll settle for the /dev/dvd link change as described and putting +> the DMA tip in the %description :-) + +Thanks, I'll sleep better now :) + +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01280.08e69f637d901fab10aec6c9492d068e b/Ch3/datasets/spam/easy_ham/01280.08e69f637d901fab10aec6c9492d068e new file mode 100644 index 000000000..433a7392f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01280.08e69f637d901fab10aec6c9492d068e @@ -0,0 +1,61 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 19:49:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5255416F03 + for ; Mon, 7 Oct 2002 19:49:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 19:49:19 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97I64K11098 for + ; Mon, 7 Oct 2002 19:06:04 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97Hu1f00827; Mon, 7 Oct 2002 19:56:01 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g97HtOf00508 for + ; Mon, 7 Oct 2002 19:55:24 +0200 +Received: from cs78128237.pp.htv.fi ([62.78.128.237]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g97HtCg08011 for ; + Mon, 7 Oct 2002 20:55:12 +0300 (EETDST) +Subject: Nessus? +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: rpm-zzzlist@freshrpms.net +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1034013325.8419.88.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g97HtOf00508 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 07 Oct 2002 20:55:23 +0300 +Date: 07 Oct 2002 20:55:23 +0300 + +Any plans for rolling Nessus RPMs for RH8? Miss it already... + +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01281.f5f822f148c91fb7bc87e782f37bd5d4 b/Ch3/datasets/spam/easy_ham/01281.f5f822f148c91fb7bc87e782f37bd5d4 new file mode 100644 index 000000000..a571ff90c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01281.f5f822f148c91fb7bc87e782f37bd5d4 @@ -0,0 +1,72 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 19:49:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 990D516F16 + for ; Mon, 7 Oct 2002 19:49:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 19:49:20 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97IDfK11309 for + ; Mon, 7 Oct 2002 19:13:41 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97I81f02031; Mon, 7 Oct 2002 20:08:01 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g97I6jf22488 for + ; Mon, 7 Oct 2002 20:06:46 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Nessus? +Message-Id: <20021007200642.27614e1b.matthias@rpmforge.net> +In-Reply-To: <1034013325.8419.88.camel@bobcat.ods.org> +References: <1034013325.8419.88.camel@bobcat.ods.org> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 20:06:42 +0200 +Date: Mon, 7 Oct 2002 20:06:42 +0200 + +Once upon a time, Ville wrote : + +> Any plans for rolling Nessus RPMs for RH8? Miss it already... + +Well, that's one of the 10 rpm-related mails leftover in my inbox I just +mentionned privately ;-) +As it's a big piece and needs some testing, I'm just bit lazy about it :-/ + +I'll try to packages it asap, or at least put up a "testing" version first +in case I fear some imperfections. + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.17 0.17 0.12 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01282.8a72fa3979269299eadf8f9742cc4ab6 b/Ch3/datasets/spam/easy_ham/01282.8a72fa3979269299eadf8f9742cc4ab6 new file mode 100644 index 000000000..ca9173757 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01282.8a72fa3979269299eadf8f9742cc4ab6 @@ -0,0 +1,71 @@ +From rpm-list-admin@freshrpms.net Mon Oct 7 22:40:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8D63A16F03 + for ; Mon, 7 Oct 2002 22:40:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 22:40:35 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97LI9K17473 for + ; Mon, 7 Oct 2002 22:18:10 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97L67f26076; Mon, 7 Oct 2002 23:06:07 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g97L5Vf25972 for ; Mon, 7 Oct 2002 23:05:31 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Nessus? +Message-Id: <20021007230521.0f1727aa.matthias@rpmforge.net> +In-Reply-To: <20021007200642.27614e1b.matthias@rpmforge.net> +References: <1034013325.8419.88.camel@bobcat.ods.org> + <20021007200642.27614e1b.matthias@rpmforge.net> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 7 Oct 2002 23:05:21 +0200 +Date: Mon, 7 Oct 2002 23:05:21 +0200 + +I've put up a new Red Hat Linux 8.0 build of nessus here : +http://ftp.freshrpms.net/pub/freshrpms/testing/nessus/ + +It's 100% untested, although the build should be ok. The new menu was +added, but some configuration files may be better with new or different +defaults. + +Feedback is very welcome! + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.06 0.12 0.17 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01283.a6c7612823e8b946c41bb4c25a64b31e b/Ch3/datasets/spam/easy_ham/01283.a6c7612823e8b946c41bb4c25a64b31e new file mode 100644 index 000000000..2b3c88e93 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01283.a6c7612823e8b946c41bb4c25a64b31e @@ -0,0 +1,77 @@ +From rpm-list-admin@freshrpms.net Tue Oct 8 10:55:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8AF0516F17 + for ; Tue, 8 Oct 2002 10:55:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 10:55:15 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g987WqK05332 for + ; Tue, 8 Oct 2002 08:32:52 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g987S2f30966; Tue, 8 Oct 2002 09:28:02 + +0200 +Received: from babyruth.hotpop.com (babyruth.hotpop.com [204.57.55.14]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g987R8f20909 for + ; Tue, 8 Oct 2002 09:27:08 +0200 +Received: from punkass.com (kubrick.hotpop.com [204.57.55.16]) by + babyruth.hotpop.com (Postfix) with SMTP id CAAFE211862 for + ; Tue, 8 Oct 2002 07:26:44 +0000 (UTC) +Received: from punkass.com (unknown [80.178.1.203]) by smtp-2.hotpop.com + (Postfix) with ESMTP id 1AF1B1B8497 for ; + Tue, 8 Oct 2002 07:26:04 +0000 (UTC) +Message-Id: <3DA288E8.4060006@punkass.com> +From: Roi Dayan +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830 +X-Accept-Language: en-us, en, he +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: xmms and .mp3 files. +References: <200210071433.g97EXKo02265@astraeus.hpcf.upr.edu> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Hotpop: ----------------------------------------------- Sent By + HotPOP.com FREE Email Get your FREE POP email at www.HotPOP.com + ----------------------------------------------- +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 08 Oct 2002 09:27:36 +0200 +Date: Tue, 08 Oct 2002 09:27:36 +0200 + +humberto@hpcf.upr.edu wrote: + +>Redhat 8 disables all support for .mp3 files, relinking xmms with a zzmp3 +>module. Does anyone have a fixed spec file for xmms? One that can play mp3's +>would be best. +> +> +> +oh xmms didn't work for me also +i used mpg123 i tought its something from me +like mplayer not working also and gives black screen + + + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01284.5134a1b148030ba27c152e387c3e8369 b/Ch3/datasets/spam/easy_ham/01284.5134a1b148030ba27c152e387c3e8369 new file mode 100644 index 000000000..00b77214e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01284.5134a1b148030ba27c152e387c3e8369 @@ -0,0 +1,103 @@ +From rpm-list-admin@freshrpms.net Tue Oct 8 15:30:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D12D416F17 + for ; Tue, 8 Oct 2002 15:30:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 15:30:57 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98EBOK18880 for + ; Tue, 8 Oct 2002 15:11:25 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g98E60f04331; Tue, 8 Oct 2002 16:06:00 + +0200 +Received: from babyruth.hotpop.com (babyruth.hotpop.com [204.57.55.14]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g98E5Ef04142 for + ; Tue, 8 Oct 2002 16:05:14 +0200 +Received: from punkass.com (kubrick.hotpop.com [204.57.55.16]) by + babyruth.hotpop.com (Postfix) with SMTP id 1B619212D30 for + ; Tue, 8 Oct 2002 14:04:52 +0000 (UTC) +Received: from punkass.com (unknown [80.178.1.203]) by smtp-2.hotpop.com + (Postfix) with ESMTP id 46CB81B8479 for ; + Tue, 8 Oct 2002 14:04:11 +0000 (UTC) +Message-Id: <3DA2E63D.8090104@punkass.com> +From: Roi Dayan +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830 +X-Accept-Language: en-us, en, he +MIME-Version: 1.0 +To: rpm-zzzlist@freshrpms.net +Subject: Re: mplayer not working for me +References: <200210071433.g97EXKo02265@astraeus.hpcf.upr.edu> + <3DA288E8.4060006@punkass.com> + <20021008094334.57b0c988.matthias@rpmforge.net> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +X-Hotpop: ----------------------------------------------- Sent By + HotPOP.com FREE Email Get your FREE POP email at www.HotPOP.com + ----------------------------------------------- +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 08 Oct 2002 16:05:49 +0200 +Date: Tue, 08 Oct 2002 16:05:49 +0200 + +Matthias Saou wrote: + +>Once upon a time, Roi wrote : +> +> +> +>>oh xmms didn't work for me also +>>i used mpg123 i tought its something from me +>> +>> +> +>Nope, this is "normal" as Red Hat removed all mp3 support from 8.0 because +>of patent and royalty issues :-( +>On freshrpms.net, you can find the xmms mp3 plugin as I said, but also +>libmad, lame (mp3 encoder), and soon mpg321 as I often used it myself. +>Many other players can also play mp3 files, like alsaplayer, xine, mplayer. +> +> +> +>>like mplayer not working also and gives black screen +>> +>> +> +>This is not normal though... +>Try "mplayer -vo help" then try usinf various output methods to see if some +>do work or not. +> +>Matthias +> +> +> + +mplayer works with dga (if i am root) and works with x11 +and always worked with sdl (but not now with redhat 8) +now it gives black screen window and play the music of the movie. + +Roi + + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01285.64cc8542a7474c2d10de1d890a849307 b/Ch3/datasets/spam/easy_ham/01285.64cc8542a7474c2d10de1d890a849307 new file mode 100644 index 000000000..1ab472117 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01285.64cc8542a7474c2d10de1d890a849307 @@ -0,0 +1,73 @@ +From rpm-list-admin@freshrpms.net Tue Oct 8 15:42:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A22C016F18 + for ; Tue, 8 Oct 2002 15:42:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 15:42:28 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98EZhK19727 for + ; Tue, 8 Oct 2002 15:35:43 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g98EP2f29161; Tue, 8 Oct 2002 16:25:02 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g98EODf25617 for + ; Tue, 8 Oct 2002 16:24:13 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: mplayer not working for me +Message-Id: <20021008162406.0aaaa275.matthias@rpmforge.net> +In-Reply-To: <3DA2E63D.8090104@punkass.com> +References: <200210071433.g97EXKo02265@astraeus.hpcf.upr.edu> + <3DA288E8.4060006@punkass.com> + <20021008094334.57b0c988.matthias@rpmforge.net> + <3DA2E63D.8090104@punkass.com> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 16:24:06 +0200 +Date: Tue, 8 Oct 2002 16:24:06 +0200 + +Once upon a time, Roi wrote : + +> mplayer works with dga (if i am root) and works with x11 +> and always worked with sdl (but not now with redhat 8) +> now it gives black screen window and play the music of the movie. + +Strange, because as I said in an earlier post, it works for me. Maybe +you're missing the SDL_image or something? :-/ + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.28 0.17 0.13 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01286.a545b12da2ac94e36c6a7033bf077072 b/Ch3/datasets/spam/easy_ham/01286.a545b12da2ac94e36c6a7033bf077072 new file mode 100644 index 000000000..59ced26dc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01286.a545b12da2ac94e36c6a7033bf077072 @@ -0,0 +1,113 @@ +From rpm-list-admin@freshrpms.net Thu Aug 29 16:32:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5E99643F99 + for ; Thu, 29 Aug 2002 11:32:22 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 16:32:22 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TFWmZ18299 for + ; Thu, 29 Aug 2002 16:32:48 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7TFN2J02111; Thu, 29 Aug 2002 17:23:02 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7TFM0J01934 for + ; Thu, 29 Aug 2002 17:22:00 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: ALSA (almost) made easy +Message-Id: <20020829171121.3b5d0506.matthias@egwn.net> +In-Reply-To: <20020829141143.61528.qmail@web20002.mail.yahoo.com> +References: <20020829133306.21299713.matthias@egwn.net> + <20020829141143.61528.qmail@web20002.mail.yahoo.com> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 17:11:21 +0200 +Date: Thu, 29 Aug 2002 17:11:21 +0200 + +Once upon a time, Joshua wrote : + +> Just a thought, would it be possible to generalize this ALSA +> stuff to make building a kernel with *any* custom/optional/updated +> modules an easy thing? I think some scripts or at least step-by-step +> instructions would be great. +> +> For example, to build a kernel RPM with ALSA do: +> 1. get the kernel source +> 2. get the ALSA source +> 3. run the custom-kernel.sh script +> ... +> +> Or a kernel RPM with the lastest wireless LAN drivers: +> 1. get the kernel source +> 2. get the CVS driver source +> 3. run the custom-kernel.sh script +> ... +> +> etc. + +This wouldn't be worth the effort involved IMHO, and would probably end up +in relative breakage of a few systems if not carefully tested. +Your first example is a good one, because I really think it's even easier +currently : +1. Leave your current kernel as-is +2. Get the "alsa-driver" source rpm +3. Rebuild and install resulting packages + +Drivers that are written to be easily compiled as modules (like ltmodem, +NVidia, ALSA etc.) can easily be repackaged separately as rpms and ported +as easily for various kernel rpms from the source rpm. + +Also, what you describe is sort of the opposite of what rpm packaging is in +my mind. I see it more as a "one size fits all" achievement in the general +case. And kernel isn't an exception (although there are packages optimized +for various processors) since they all come with just about all the modules +you'll ever need. Make that "one size fits many" then if you want ;-) + +Last but not least : The kernel is something I'm trying to keep away from +in my packaging since I really don't want to see newbies screwing up their +systems because of packages on my website... same goes for GNOME, KDE and +other major bits of the distribution since I also want people who happily +use my packages to be able to upgrade to the next Red Hat Linux release +without having their system turned into another Ximian mess. + +Matthias + +PS: Yes Chris, I'm worried about not giving you too much work! Less in fact +since you can easily answer "freshrpms.net!" to people asking how to play +DVDs, right? ;-)))) + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01287.c8de1608b71977e5dd6b71da6a2019d7 b/Ch3/datasets/spam/easy_ham/01287.c8de1608b71977e5dd6b71da6a2019d7 new file mode 100644 index 000000000..971d3b6d4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01287.c8de1608b71977e5dd6b71da6a2019d7 @@ -0,0 +1,111 @@ +From rpm-list-admin@freshrpms.net Mon Sep 2 12:21:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id ABCBC43F99 + for ; Mon, 2 Sep 2002 07:21:18 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:21:18 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TJqAZ26468 for + ; Thu, 29 Aug 2002 20:52:10 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7TJd2J04720; Thu, 29 Aug 2002 21:39:02 + +0200 +Received: from imf26bis.bellsouth.net (mail126.mail.bellsouth.net + [205.152.58.86]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7TJcbJ04352 for ; Thu, 29 Aug 2002 21:38:37 +0200 +Received: from adsl-157-23-10.msy.bellsouth.net ([66.157.23.10]) by + imf26bis.bellsouth.net (InterMail vM.5.01.04.19 + 201-253-122-122-119-20020516) with ESMTP id + <20020829193005.FDGG5735.imf26bis.bellsouth.net@adsl-157-23-10.msy.bellsouth.net> + for ; Thu, 29 Aug 2002 15:30:05 -0400 +Subject: Re: ALSA (almost) made easy +From: Lance +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20020829062638.53279644.matthias@egwn.net> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030576177.6448.1.camel@localhost.localdomain> + <1030580111.1388.2.camel@localhost.localdomain> + <20020829062638.53279644.matthias@egwn.net> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-6) +Message-Id: <1030649409.4818.4.camel@localhost.localdomain> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 29 Aug 2002 14:30:08 -0500 +Date: 29 Aug 2002 14:30:08 -0500 + +Thanks Matthias. Actually I got all four speakers with subwoofer +working in digital out mode with gamixer. +(http://www1.tcnet.ne.jp/fmurata/linux/down/) + +However switching between analog and digital, I'm still baffled. As I +have a tuner and cassette deck hooked up to "Line In" on a SBLive! 5.1, +which is in analog mode. But digital out works great now! + +On Wed, 2002-08-28 at 23:26, Matthias Saou wrote: +> Once upon a time, Lance wrote : +> +> > Ok, I got ALSA installed and there is no static inbetween mp3s like +> > before which is great! My setup is digital 4.1 but sound is only coming +> > from front 2 speakers and subwoofer, rear speakers there is no sound. +> > Also alsamixer or aumix are unresponsive as well. +> +> Maybe you could find more info or tips on the ALSA page for your card? +> Also, you could try "alsactl store", editing /etc/asound.state" by hand +> (for me it contains data similar to what I can control with "alsamixer") +> then run "alsactl restore" and see if you're able to change what you want +> that way. +> +> Matthias +> +> -- +> Matthias Saou World Trade Center +> ------------- Edificio Norte 4 Planta +> System and Network Engineer 08039 Barcelona, Spain +> Electronic Group Interactive Phone : +34 936 00 23 23 +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list +-- +: +####[ Linux One Stanza Tip (LOST) ]########################### + +Sub : Finding out files larger than given size LOST #324 + +To find out all files in a dir over a given size, try: +find /path/to/dir_of_file -type f -size +Nk +[Where N is a number like 1024 for 1mb, and multiples thereof] + +####[Discussions on LIH : 04 Jul 2002]######################## +: + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01288.f426e00bfbba33dcca835e93097497bb b/Ch3/datasets/spam/easy_ham/01288.f426e00bfbba33dcca835e93097497bb new file mode 100644 index 000000000..80b99a486 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01288.f426e00bfbba33dcca835e93097497bb @@ -0,0 +1,135 @@ +From rpm-list-admin@freshrpms.net Mon Sep 2 12:22:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AEE8243F99 + for ; Mon, 2 Sep 2002 07:22:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:22:37 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TL1YZ28608 for + ; Thu, 29 Aug 2002 22:01:35 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7TKr3J12965; Thu, 29 Aug 2002 22:53:03 + +0200 +Received: from imf13bis.bellsouth.net (mail313.mail.bellsouth.net + [205.152.58.173]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7TKqXJ12902 for ; Thu, 29 Aug 2002 22:52:33 +0200 +Received: from adsl-157-23-10.msy.bellsouth.net ([66.157.23.10]) by + imf13bis.bellsouth.net (InterMail vM.5.01.04.19 + 201-253-122-122-119-20020516) with ESMTP id + <20020829205404.EXZW15998.imf13bis.bellsouth.net@adsl-157-23-10.msy.bellsouth.net> + for ; Thu, 29 Aug 2002 16:54:04 -0400 +Subject: Re: ALSA (almost) made easy +From: Lance +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <1030649409.4818.4.camel@localhost.localdomain> +References: <20020828004215.4bca2588.matthias@rpmforge.net> + <1030507320.3214.39.camel@herald.dragonsdawn.net> + <20020828100430.378c3856.matthias@rpmforge.net> + <1030546780.3214.54.camel@herald.dragonsdawn.net> + <20020828112645.B13047@ti19> + <1030551945.10627.4.camel@wanderlust.prognet.com> + <20020828190006.2200a154.matthias@rpmforge.net> + <1030576177.6448.1.camel@localhost.localdomain> + <1030580111.1388.2.camel@localhost.localdomain> + <20020829062638.53279644.matthias@egwn.net> + <1030649409.4818.4.camel@localhost.localdomain> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-6) +Message-Id: <1030654347.9760.1.camel@localhost.localdomain> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 29 Aug 2002 15:52:27 -0500 +Date: 29 Aug 2002 15:52:27 -0500 + +I want to thank those involved in making these RPMS available. Thanks +guys, thanks Matthias. + +Lance + +On Thu, 2002-08-29 at 14:30, Lance wrote: +> Thanks Matthias. Actually I got all four speakers with subwoofer +> working in digital out mode with gamixer. +> (http://www1.tcnet.ne.jp/fmurata/linux/down/) +> +> However switching between analog and digital, I'm still baffled. As I +> have a tuner and cassette deck hooked up to "Line In" on a SBLive! 5.1, +> which is in analog mode. But digital out works great now! +> +> On Wed, 2002-08-28 at 23:26, Matthias Saou wrote: +> > Once upon a time, Lance wrote : +> > +> > > Ok, I got ALSA installed and there is no static inbetween mp3s like +> > > before which is great! My setup is digital 4.1 but sound is only coming +> > > from front 2 speakers and subwoofer, rear speakers there is no sound. +> > > Also alsamixer or aumix are unresponsive as well. +> > +> > Maybe you could find more info or tips on the ALSA page for your card? +> > Also, you could try "alsactl store", editing /etc/asound.state" by hand +> > (for me it contains data similar to what I can control with "alsamixer") +> > then run "alsactl restore" and see if you're able to change what you want +> > that way. +> > +> > Matthias +> > +> > -- +> > Matthias Saou World Trade Center +> > ------------- Edificio Norte 4 Planta +> > System and Network Engineer 08039 Barcelona, Spain +> > Electronic Group Interactive Phone : +34 936 00 23 23 +> > +> > _______________________________________________ +> > RPM-List mailing list +> > http://lists.freshrpms.net/mailman/listinfo/rpm-list +> -- +> : +> ####[ Linux One Stanza Tip (LOST) ]########################### +> +> Sub : Finding out files larger than given size LOST #324 +> +> To find out all files in a dir over a given size, try: +> find /path/to/dir_of_file -type f -size +Nk +> [Where N is a number like 1024 for 1mb, and multiples thereof] +> +> ####[Discussions on LIH : 04 Jul 2002]######################## +> : +> +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list +-- +: +####[ Linux One Stanza Tip (LOST) ]########################### + +Sub : Finding out files larger than given size LOST #324 + +To find out all files in a dir over a given size, try: +find /path/to/dir_of_file -type f -size +Nk +[Where N is a number like 1024 for 1mb, and multiples thereof] + +####[Discussions on LIH : 04 Jul 2002]######################## +: + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01289.1546c81997f7f3f154f6ef18d6e6bbf7 b/Ch3/datasets/spam/easy_ham/01289.1546c81997f7f3f154f6ef18d6e6bbf7 new file mode 100644 index 000000000..f76ef7355 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01289.1546c81997f7f3f154f6ef18d6e6bbf7 @@ -0,0 +1,98 @@ +From rpm-list-admin@freshrpms.net Mon Sep 2 12:24:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 803D843F9B + for ; Mon, 2 Sep 2002 07:24:02 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:24:02 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7U780Z16522 for + ; Fri, 30 Aug 2002 08:08:00 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7U754J32624; Fri, 30 Aug 2002 09:05:04 + +0200 +Received: from cskk.homeip.net (c17877.carlnfd1.nsw.optusnet.com.au + [210.49.140.231]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7U73RJ32084 for ; Fri, 30 Aug 2002 09:03:28 +0200 +Received: from amadeus.home (localhost.localdomain [127.0.0.1]) by + cskk.homeip.net (8.11.6/8.11.6) with ESMTP id g7U738708102 for + ; Fri, 30 Aug 2002 17:03:11 +1000 +From: Cameron Simpson +To: rpm-zzzlist@freshrpms.net +Subject: Re: /home/dude +Message-Id: <20020830070306.GA7959@amadeus.home> +References: <20020828143235.A5779@bonzo.nirvana> + <20020829142252.7b20caab.matthias@egwn.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <20020829142252.7b20caab.matthias@egwn.net> +User-Agent: Mutt/1.4i +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +X-Reply-To: cs@zip.com.au +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 30 Aug 2002 17:03:06 +1000 +Date: Fri, 30 Aug 2002 17:03:06 +1000 + +On 14:22 29 Aug 2002, Matthias Saou wrote: +| Once upon a time, Axel wrote : +| > I am now relaxed again ;), and pass this info on. Probably Matthias Saou +| > himself is "dude", and some package has hardwired a path in his build +| > directory. It would be nice to find out which and fix it, but I am using +| > too many of the freshrpm suite to narrow it down. +| +| Indeed, my usual login is "dude" (and has been since long before "The Big +| Lebowsky" came out ;-)), and it seems the some programs wrongly hard code +| my home directory when being compiled :-( +| For instance : +| +| [dude@python dude]$ strings /usr/bin/gentoo | grep dude +| /home/dude/ +| [dude@python dude]$ strings /usr/bin/xine | grep dude +| /home/dude/redhat/tmp/xine-root/usr/share/locale +| +| These should probably be considered bugs in the program's build process +| (especially for xine, look at that!), I'll report them upstream if/when I +| have some time. + +This is a standard trap for people building things from source. It's +generally wise to have a special "build" environment to avoid these +hassles. Most likely you have some library loading path in your env. An +strace of the app will show it: + + the-app 2>&1 | grep dude + +Personally, I have a script called logbuild whose entire purpose is to +start a shell with a minimal build environment, logged with script. The +prevents this kind of error. Since configure yanks all sorts of ill +documented values from one's environment for use in the build (CC, ARCH, +various LD_* variables) this kind of thing is necessary. + +Often the easiest thing is to have a special nonroot account with no .profile +for building stuff. + +Cheers, +-- +Cameron Simpson, DoD#743 cs@zip.com.au http://www.zip.com.au/~cs/ + +Do not taunt Happy Fun Coder. + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01290.41e79a15cd074594f220dfaed53d51aa b/Ch3/datasets/spam/easy_ham/01290.41e79a15cd074594f220dfaed53d51aa new file mode 100644 index 000000000..acc6ca8a5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01290.41e79a15cd074594f220dfaed53d51aa @@ -0,0 +1,119 @@ +From rpm-list-admin@freshrpms.net Mon Sep 2 12:32:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5CDAA43F9B + for ; Mon, 2 Sep 2002 07:32:44 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:32:44 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7V394Z20828 for + ; Sat, 31 Aug 2002 04:09:04 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7V372J07985; Sat, 31 Aug 2002 05:07:02 + +0200 +Received: from imf20bis.bellsouth.net (mail020.mail.bellsouth.net + [205.152.58.60]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7V36EJ07619 for ; Sat, 31 Aug 2002 05:06:14 +0200 +Received: from adsl-157-21-77.msy.bellsouth.net ([66.157.21.77]) by + imf20bis.bellsouth.net (InterMail vM.5.01.04.19 + 201-253-122-122-119-20020516) with ESMTP id + <20020831030604.PBIG7767.imf20bis.bellsouth.net@adsl-157-21-77.msy.bellsouth.net> + for ; Fri, 30 Aug 2002 23:06:04 -0400 +Subject: Re: alsa-driver rebuild fails with undeclared USB symbol +From: Lance +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <3D70306F.8090201@eecs.berkeley.edu> +References: <3D70306F.8090201@eecs.berkeley.edu> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-7) +Message-Id: <1030763168.15592.1.camel@localhost.localdomain> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 30 Aug 2002 22:06:08 -0500 +Date: 30 Aug 2002 22:06:08 -0500 + +I know this is simple but do you have /usr/src/linux and +/usr/src/linux-2.4 symlinked to your kernel source directory? Also is +there a .config in /usr/src/yourkernelsource/.config ? + +On Fri, 2002-08-30 at 21:56, Ben Liblit wrote: +> I am trying to rebuild the recently posted ALSA driver package for my +> kernel. Although I run Red Hat 7.3, I am not using a Red Hat kernel +> package: my kernel is lovingly downloaded, configured, and built by +> hand. Call me old fashioned. +> +> Sadly, the RPM rebuild fails part way through: +> +> % rpm --rebuild alsa-driver-0.9.0rc3-fr6.src.rpm +> +> gcc -DALSA_BUILD -D__KERNEL__ -DMODULE=1 \ +> -I/usr/src/redhat/BUILD/alsa-driver-0.9.0rc3/include \ +> -I/lib/modules/2.4.18/build/include -O2 \ +> -mpreferred-stack-boundary=2 -march=i686 -DLINUX -Wall \ +> -Wstrict-prototypes -fomit-frame-pointer -pipe -DEXPORT_SYMTAB \ +> -c sound.c +> +> sound.c:41: `snd_hack_usb_set_interface' undeclared here (not in a \ +> function) +> +> sound.c:41: initializer element is not constant +> +> sound.c:41: (near initialization for \ +> __ksymtab_snd_hack_usb_set_interface.value') +> +> make[1]: *** [sound.o] Error 1 +> +> The line in question looks like this: +> +> /* USB workaround */ +> #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 24) +> #if defined(CONFIG_SND_USB_AUDIO) || \ +> defined(CONFIG_SND_USB_AUDIO_MODULE) || \ +> defined(CONFIG_SND_USB_MIDI) || \ +> defined(CONFIG_SND_USB_MIDI_MODULE) +> -41-> +> EXPORT_SYMBOL(snd_hack_usb_set_interface); +> #endif +> #endif +> +> Any suggestions? +> +> +> _______________________________________________ +> RPM-List mailing list +> http://lists.freshrpms.net/mailman/listinfo/rpm-list +-- +: +####[ Linux One Stanza Tip (LOST) ]########################### + +Sub : Finding out files larger than given size LOST #324 + +To find out all files in a dir over a given size, try: +find /path/to/dir_of_file -type f -size +Nk +[Where N is a number like 1024 for 1mb, and multiples thereof] + +####[Discussions on LIH : 04 Jul 2002]######################## +: + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01291.dfc4b8ceb611c971fb6b821eecaa9cea b/Ch3/datasets/spam/easy_ham/01291.dfc4b8ceb611c971fb6b821eecaa9cea new file mode 100644 index 000000000..c6b37de72 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01291.dfc4b8ceb611c971fb6b821eecaa9cea @@ -0,0 +1,81 @@ +From rpm-list-admin@freshrpms.net Mon Sep 2 12:34:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 59C2E43F99 + for ; Mon, 2 Sep 2002 07:34:18 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:34:18 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7VAmZZ31525 for + ; Sat, 31 Aug 2002 11:48:35 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7VAk4J03384; Sat, 31 Aug 2002 12:46:04 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7VAjAJ01520 for + ; Sat, 31 Aug 2002 12:45:10 +0200 +Received: from cs78128057.pp.htv.fi ([62.78.128.57]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g7VAid629053; Sat, 31 Aug 2002 13:44:39 + +0300 (EETDST) +Subject: Re: alsa-driver rebuild fails with undeclared USB symbol +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: liblit@eecs.berkeley.edu +Cc: rpm-zzzlist@freshrpms.net +In-Reply-To: <3D705411.9090606@eecs.berkeley.edu> +References: <3D70306F.8090201@eecs.berkeley.edu> + <1030763168.15592.1.camel@localhost.localdomain> + <3D704193.3050003@eecs.berkeley.edu> <3D705411.9090606@eecs.berkeley.edu> +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) +Message-Id: <1030790671.1963.97.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g7VAjAJ01520 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 31 Aug 2002 13:44:30 +0300 +Date: 31 Aug 2002 13:44:30 +0300 + +On Sat, 2002-08-31 at 08:28, Ben Liblit wrote: + +> Well, I've figured out the problem. I guess you could say it's an ALSA +> bug. When one configures using "--with-cards=all", ALSA blindly turns +> on the various CONFIG_SND_USB_* macros even if CONFIG_USB is not +> actually set. +[...] +> Matthias, would you please consider hooking up this patch in your +> alsa-driver.spec? It can be added in the obvious manner: +> +> I suppose I should send this along to the ALSA developers as well. For +> them I'll produce a "proper" patch that makes the fix in "acinclude.m4". +> Or is someone else on this list already part of the ALSA developer +> community, and willing to shepherd this through for me? + +Not me, but IMHO it's kind of offtopic to put it in freshrpms.net RPMs. +Upstream is the way to go... + +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01292.554aabaf0a334854817cf994e6951ada b/Ch3/datasets/spam/easy_ham/01292.554aabaf0a334854817cf994e6951ada new file mode 100644 index 000000000..f10d61ef4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01292.554aabaf0a334854817cf994e6951ada @@ -0,0 +1,74 @@ +From rpm-list-admin@freshrpms.net Mon Sep 2 12:34:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5ACF843F9B + for ; Mon, 2 Sep 2002 07:34:24 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:34:24 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7VAwsZ31826 for + ; Sat, 31 Aug 2002 11:58:55 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7VAu1J15451; Sat, 31 Aug 2002 12:56:01 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g7VAtIJ15223 for ; Sat, 31 Aug 2002 12:55:21 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: alsa-driver rebuild fails with undeclared USB symbol +Message-Id: <20020831125333.4574373b.matthias@egwn.net> +In-Reply-To: <1030790671.1963.97.camel@bobcat.ods.org> +References: <3D70306F.8090201@eecs.berkeley.edu> + <1030763168.15592.1.camel@localhost.localdomain> + <3D704193.3050003@eecs.berkeley.edu> <3D705411.9090606@eecs.berkeley.edu> + <1030790671.1963.97.camel@bobcat.ods.org> +Organization: Electronic Group Interactive +X-Mailer: Sylpheed version 0.8.2claws (GTK+ 1.2.10; i386-redhat-linux) +Reply-BY: Tue, 24 Jul 2000 19:02:00 +1000 +X-Operating-System: GNU/Linux power! +X-Message-Flag: Try using a real operating system : GNU/Linux power! +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 31 Aug 2002 12:53:33 +0200 +Date: Sat, 31 Aug 2002 12:53:33 +0200 + +Once upon a time, Ville wrote : + +> Not me, but IMHO it's kind of offtopic to put it in freshrpms.net RPMs. +> Upstream is the way to go... + +Agreed, especially since my packages are primarily meant for the original +Red Hat Linux kernels. And someone removing USB support from his kernel is +probably not going to recompile ALSA with *all* the drivers anyway ;-) + +Matthias + +-- +Matthias Saou World Trade Center +------------- Edificio Norte 4 Planta +System and Network Engineer 08039 Barcelona, Spain +Electronic Group Interactive Phone : +34 936 00 23 23 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01293.d9df56671e03c3767875a6e5d4673a09 b/Ch3/datasets/spam/easy_ham/01293.d9df56671e03c3767875a6e5d4673a09 new file mode 100644 index 000000000..8f1de08e1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01293.d9df56671e03c3767875a6e5d4673a09 @@ -0,0 +1,105 @@ +From rpm-list-admin@freshrpms.net Mon Sep 2 13:12:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0131E4415E + for ; Mon, 2 Sep 2002 07:38:03 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:38:03 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g81AXmZ20435 for + ; Sun, 1 Sep 2002 11:33:48 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g81AW2J15939; Sun, 1 Sep 2002 12:32:02 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g81AVPJ15845 + for ; Sun, 1 Sep 2002 12:31:25 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17lS1E-0001xi-00 for rpm-list@freshrpms.net; + Sun, 01 Sep 2002 06:31:48 -0400 +X-Originating-Ip: [207.172.11.147] +From: "" Angles " Puglisi" +To: rpm-zzzlist@freshrpms.net +Subject: Re: ALSA (almost) made easy (gamix rocks) +Message-Id: <20020901.v8t.39317700@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 01 Sep 2002 10:30:20 +0000 +Date: Sun, 01 Sep 2002 10:30:20 +0000 + +This mixer is specific to ALSA's special stuff, I use it in addition to the other +mixers if I need something special. + +I built it a while ago, may need a --rebuild. + +http://www.dudex.net/rpms/gamix-1.99.p13-aap1.i686.rpm +http://www.dudex.net/rpms/gamix-1.99.p13-aap1.src.rpm +http://www.dudex.net/rpms/gamix.spec + +Matthias Saou (matthias@egwn.net) wrote*: +> +>Once upon a time, Ville wrote : +> +>> Ah! The mixer stuff was what made me look for an init script in the +>> first place, I didn't bother to check whether the existing stuff would +>> have worked with that. Will try that out, you can assume silence == +>> success :) +> +>Well, from what I've tried, both the main and the PCM (at least) volume +>levels can be controlled either by "alsamixer" or the good old "aumix". +> +>> > >From what I can tell after only 2 days using it : ALSA rocks, +>> > >especially +>> > since having a full OSS compatibility results that it breaks nothing at +>> > all! :-) +>> +>> Agreed. Though with only 2 hours experience... +> +>I guess/hope some other people from the list will try it out ;-) +> +>Both problems you reported (libasound.so and wrong xine dependency) are now +>fixed in the current packages. +> +>Oh, it's maybe also worth pointing out : I've implemented at last sorting +>by both last change date and alphabetically for my "build list" in the php +>code : http://freshrpms.net/builds/ +> +>And yes, I accept patches/comments/suggestions about all those spec files! +> +>Matthias +> +> +>_______________________________________________ +>RPM-List mailing list +> + +-- +That's "angle" as in geometry. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01294.8c242aa8998042dd666b7f9db56a6a3e b/Ch3/datasets/spam/easy_ham/01294.8c242aa8998042dd666b7f9db56a6a3e new file mode 100644 index 000000000..bf32e4859 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01294.8c242aa8998042dd666b7f9db56a6a3e @@ -0,0 +1,141 @@ +From rpm-list-admin@freshrpms.net Mon Sep 2 13:15:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BAABE47C68 + for ; Mon, 2 Sep 2002 07:39:38 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:39:38 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82198Z14381 for + ; Mon, 2 Sep 2002 02:09:09 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g82152J14688; Mon, 2 Sep 2002 03:05:02 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g8214QJ06624 + for ; Mon, 2 Sep 2002 03:04:27 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17lfeA-0002HC-00 for rpm-list@freshrpms.net; + Sun, 01 Sep 2002 21:04:54 -0400 +X-Originating-Ip: [207.172.11.147] +From: "" Angles " Puglisi" +To: "FreshRPMs List" +Subject: Fw: some (null) eyecandy packages +Message-Id: <20020901.Cm5.66966300@www.dudex.net> +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="---=_Next_Part_10878775_zmiO_mWTr_109818780" +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 02 Sep 2002 01:03:30 +0000 +Date: Mon, 02 Sep 2002 01:03:30 +0000 + +This is a multipart message in MIME format + +-----=_Next_Part_10878775_zmiO_mWTr_109818780 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline + +If anyone here is running (null) beta then you may like these Gnome theme packages. +They are enhanced and repackages from my previous theme packs, this time to conform +to the way pre-release RH8 handles themes for GTK1 and GTK2. + +RedHat has a preferences -> themes app, but themes only show up there that have BOTH +gtk1.2 (Gnome1) themes AND gtk1.4 (GTK2 aka Gnome2) themes available. Then RH will +apply the theme to both GTK versions, so the user does not really notice that +different GTK toolkit versions are being used, since they *should* look the same. + +This "gtk2-engines-compat" RPM has GTK2 ported themes for those themes that are +included in the RH package "gtk-engines" themes pack for GTK1. + +The "gtk1+2-themez" pack mostly repackages my previous theme RPMs in a way that the +(null) btea like, and supposedly the next RH8 when released :) + +forward - original mail: + From " Angles Puglisi" + Date 09/01/2002 - 06:10:03 am + Subject some (null) eyecandy packages + +-----=_Next_Part_10878775_zmiO_mWTr_109818780 +Content-Type: message/rfc822; +Content-Disposition: inline + +Delivered-To: limbo-list@listman.spamassassin.taint.org +X-Originating-IP: [207.172.11.147] +From: "" Angles " Puglisi" +To: limbo-list@spamassassin.taint.org +Subject: some (null) eyecandy packages +Message-ID: <20020901.eak.70699000@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v 0.9.14.000 +X-Loop: limbo-list@spamassassin.taint.org +Sender: limbo-list-admin@spamassassin.taint.org +Errors-To: limbo-list-admin@spamassassin.taint.org +X-BeenThere: limbo-list@spamassassin.taint.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +Reply-To: limbo-list@spamassassin.taint.org +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion of the Red Hat Linux 'Limbo' beta +List-Unsubscribe: , + +List-Archive: +Date: Sun, 01 Sep 2002 10:01:54 +0000 + +I make these for myself, you may find them of interest. See the .spec file(s) for info. + +http://www.dudex.net/rpms/gtk2-engines-compat-1.0-aap1.noarch.rpm +http://www.dudex.net/rpms/gtk2-engines-compat-1.0.spec + +http://www.dudex.net/rpms/gtk1+2-themez-1.1-aap1.noarch.rpm +http://www.dudex.net/rpms/gtk1+2-themez-1.1.spec + +You'll need gtk-engines, gtk2-engines, and a "thinice" engine for gtk2, this one +might be a old now but it works: + +http://www.dudex.net/rpms/gtk2-thinice-engine-2.0.1-2.i386.rpm +http://www.dudex.net/rpms/gtk2-thinice-engine-2.0.1-2.src.rpm +http://www.dudex.net/rpms/gtk2-thinice-engine-2.0.1.spec + +-- +That's "angle" as in geometry. + + + + +_______________________________________________ +Limbo-list mailing list +Limbo-list@redhat.com + +-----=_Next_Part_10878775_zmiO_mWTr_109818780-- + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01295.c440ea598ea18fee4cf3d2a1a9cd6864 b/Ch3/datasets/spam/easy_ham/01295.c440ea598ea18fee4cf3d2a1a9cd6864 new file mode 100644 index 000000000..941768332 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01295.c440ea598ea18fee4cf3d2a1a9cd6864 @@ -0,0 +1,74 @@ +From rpm-list-admin@freshrpms.net Tue Oct 8 00:10:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9C99F16F17 + for ; Tue, 8 Oct 2002 00:09:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 00:09:58 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g97M3hK18746 for + ; Mon, 7 Oct 2002 23:03:44 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g97Lw2f09321; Mon, 7 Oct 2002 23:58:02 + +0200 +Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g97LvNf04590 for + ; Mon, 7 Oct 2002 23:57:27 +0200 +Received: from cs78128237.pp.htv.fi ([62.78.128.237]) by posti.pp.htv.fi + (8.11.1/8.11.1) with ESMTP id g97Lv8g29537 for ; + Tue, 8 Oct 2002 00:57:08 +0300 (EETDST) +Subject: Re: Nessus? +From: Ville =?ISO-8859-1?Q?Skytt=E4?= +To: rpm-zzzlist@freshrpms.net +In-Reply-To: <20021007230521.0f1727aa.matthias@rpmforge.net> +References: <1034013325.8419.88.camel@bobcat.ods.org> + <20021007200642.27614e1b.matthias@rpmforge.net> + <20021007230521.0f1727aa.matthias@rpmforge.net> +Content-Type: text/plain; charset=ISO-8859-1 +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1034027845.2296.163.camel@bobcat.ods.org> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g97LvNf04590 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 08 Oct 2002 00:57:24 +0300 +Date: 08 Oct 2002 00:57:24 +0300 + +On Tue, 2002-10-08 at 00:05, Matthias Saou wrote: + +> It's 100% untested, although the build should be ok. The new menu was +> added, but some configuration files may be better with new or different +> defaults. +> +> Feedback is very welcome! + +Looks good to me, just installed it, and ran a local scan, everything +worked smoothly. Thanks a bunch! + +-- +\/ille Skyttä +ville.skytta at iki.fi + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01296.d07e5ec1fd7ad9a466deb9cf621e7ed9 b/Ch3/datasets/spam/easy_ham/01296.d07e5ec1fd7ad9a466deb9cf621e7ed9 new file mode 100644 index 000000000..2d2d636a8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01296.d07e5ec1fd7ad9a466deb9cf621e7ed9 @@ -0,0 +1,80 @@ +From rpm-list-admin@freshrpms.net Tue Oct 8 10:55:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E2CC916F18 + for ; Tue, 8 Oct 2002 10:55:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 10:55:19 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g987g4K05596 for + ; Tue, 8 Oct 2002 08:42:04 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g987c1f10870; Tue, 8 Oct 2002 09:38:01 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g987bTf04154 for ; Tue, 8 Oct 2002 09:37:29 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: xine src packge still gives errors +Message-Id: <20021008093721.4a3ed251.matthias@rpmforge.net> +In-Reply-To: <3DA28982.6020709@punkass.com> +References: <1033908698.1724.11.camel@lillpelle> + <3DA28982.6020709@punkass.com> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 09:37:21 +0200 +Date: Tue, 8 Oct 2002 09:37:21 +0200 + +Once upon a time, Roi wrote : + +> RPM build errors: +> user dude does not exist - using root +> user dude does not exist - using root +> user dude does not exist - using root +> user dude does not exist - using root +> user dude does not exist - using root + +This I would guess is normal, but don't you get it at the very beginning of +the build? Isn't this at the end just a reminder? + +> File not found: /var/tmp/xine-root/usr/bin/aaxine + +Argh, I forgot to exclude aaxine from the %files when using "--without +aalib" :-( +The current "fr6.1" spec file fixes this... + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.02 0.03 0.00 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01297.911ece8836afba884cf1d352d6749578 b/Ch3/datasets/spam/easy_ham/01297.911ece8836afba884cf1d352d6749578 new file mode 100644 index 000000000..52e0b9d3b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01297.911ece8836afba884cf1d352d6749578 @@ -0,0 +1,79 @@ +From rpm-list-admin@freshrpms.net Tue Oct 8 10:55:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9239D16F19 + for ; Tue, 8 Oct 2002 10:55:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 10:55:21 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g987lwK05784 for + ; Tue, 8 Oct 2002 08:47:58 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g987i1f05970; Tue, 8 Oct 2002 09:44:01 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g987hhf05624 for ; Tue, 8 Oct 2002 09:43:43 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: xmms and .mp3 files. +Message-Id: <20021008094334.57b0c988.matthias@rpmforge.net> +In-Reply-To: <3DA288E8.4060006@punkass.com> +References: <200210071433.g97EXKo02265@astraeus.hpcf.upr.edu> + <3DA288E8.4060006@punkass.com> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 09:43:34 +0200 +Date: Tue, 8 Oct 2002 09:43:34 +0200 + +Once upon a time, Roi wrote : + +> oh xmms didn't work for me also +> i used mpg123 i tought its something from me + +Nope, this is "normal" as Red Hat removed all mp3 support from 8.0 because +of patent and royalty issues :-( +On freshrpms.net, you can find the xmms mp3 plugin as I said, but also +libmad, lame (mp3 encoder), and soon mpg321 as I often used it myself. +Many other players can also play mp3 files, like alsaplayer, xine, mplayer. + +> like mplayer not working also and gives black screen + +This is not normal though... +Try "mplayer -vo help" then try usinf various output methods to see if some +do work or not. + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.00 0.05 0.01 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01298.65b9c164b1fc671b0c050ff3f82e77d2 b/Ch3/datasets/spam/easy_ham/01298.65b9c164b1fc671b0c050ff3f82e77d2 new file mode 100644 index 000000000..1a4308822 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01298.65b9c164b1fc671b0c050ff3f82e77d2 @@ -0,0 +1,85 @@ +From rpm-list-admin@freshrpms.net Tue Oct 8 10:56:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 79DB116F16 + for ; Tue, 8 Oct 2002 10:56:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 10:56:20 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g988mPK07565 for + ; Tue, 8 Oct 2002 09:48:25 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g988i1f16827; Tue, 8 Oct 2002 10:44:02 + +0200 +Received: from chip.ath.cx (cs146114.pp.htv.fi [213.243.146.114]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g988hGf13093 for + ; Tue, 8 Oct 2002 10:43:16 +0200 +Received: from chip.ath.cx (localhost [127.0.0.1]) by chip.ath.cx + (8.12.5/8.12.2) with ESMTP id g988hASA018848 for ; + Tue, 8 Oct 2002 11:43:10 +0300 +Received: from localhost (pmatilai@localhost) by chip.ath.cx + (8.12.5/8.12.5/Submit) with ESMTP id g988h9j2018844 for + ; Tue, 8 Oct 2002 11:43:10 +0300 +X-Authentication-Warning: chip.ath.cx: pmatilai owned process doing -bs +From: Panu Matilainen +X-X-Sender: pmatilai@chip.ath.cx +To: rpm-zzzlist@freshrpms.net +Subject: Re: a problem with apt-get +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 11:43:09 +0300 (EEST) +Date: Tue, 8 Oct 2002 11:43:09 +0300 (EEST) + +On Mon, 7 Oct 2002, Thomas Vander Stichele wrote: + +> Hi, +> +> In my build scripts, I have problems with some of the kernel packages. +> +> For kernel-sources, I get : +> +> Package kernel-source is a virtual package provided by: +> kernel-source#2.4.18-3 2.4.18-3 +> kernel-source#2.4.18-3 2.4.18-3 +> +> on running apt-get install kernel-source +> +> Now, first of all, this doesn't really tell me what the two options are ;) +> Second, is there some way I can tell apt-get to install either ? This is +> done from automatic build scripts so I'd like it to proceed anyway. + +That's just apt's way of telling you the package is in "AllowDuplicated", +meaning multiple versions of the package can be installed at the same +time. Yes the output is a bit strange.. especially when there's only one +version available. + +'apt-get install kernel-source#2.4.18-3' will install it... + +-- + - Panu - + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01299.3d97e3706e7d000ee12fb9e2a5947ed5 b/Ch3/datasets/spam/easy_ham/01299.3d97e3706e7d000ee12fb9e2a5947ed5 new file mode 100644 index 000000000..6e9c6c824 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01299.3d97e3706e7d000ee12fb9e2a5947ed5 @@ -0,0 +1,78 @@ +From rpm-list-admin@freshrpms.net Tue Oct 8 10:56:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2456416F17 + for ; Tue, 8 Oct 2002 10:56:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 10:56:23 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g988s2K07757 for + ; Tue, 8 Oct 2002 09:54:03 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g988n1f06917; Tue, 8 Oct 2002 10:49:01 + +0200 +Received: from chip.ath.cx (cs146114.pp.htv.fi [213.243.146.114]) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g988m9f02272 for + ; Tue, 8 Oct 2002 10:48:09 +0200 +Received: from chip.ath.cx (localhost [127.0.0.1]) by chip.ath.cx + (8.12.5/8.12.2) with ESMTP id g988m3SA018868 for ; + Tue, 8 Oct 2002 11:48:03 +0300 +Received: from localhost (pmatilai@localhost) by chip.ath.cx + (8.12.5/8.12.5/Submit) with ESMTP id g988m3s2018864 for + ; Tue, 8 Oct 2002 11:48:03 +0300 +X-Authentication-Warning: chip.ath.cx: pmatilai owned process doing -bs +From: Panu Matilainen +X-X-Sender: pmatilai@chip.ath.cx +To: rpm-zzzlist@freshrpms.net +Subject: Re: RH 8 no DMA for DVD drive +In-Reply-To: <20021007103831.642c1bbb.hosting@j2solutions.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 11:48:01 +0300 (EEST) +Date: Tue, 8 Oct 2002 11:48:01 +0300 (EEST) + +On Mon, 7 Oct 2002, Jesse Keating wrote: + +> On Mon, 7 Oct 2002 19:28:51 +0200 +> Matthias Saou wrote: +> +> # I've never heard of any CD-ROM or DVD-ROM drive having problems with +> # DMA... although there probably is since Red Hat decided to default +> # disabling it a few releases back :-/ +> +> When I worked as a PC repair tech for a Computer store chain, I did +> run across quite a few DVD drives that would lock up if DMA was +> enabled. It's more of a chipset/drive problem than a Drive by itself. + +And my IBM Intellistation would lock up instantly .. now this is actually +quite funny .. if DMA was enabled for the CD-ROM *and* you tried to access +a CD with Joliet extensions. Otherwise it worked just fine with DMA +enabled :) + +-- + - Panu - + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01300.b4d2c4f321c89df3e5f3e7b4bb9326c1 b/Ch3/datasets/spam/easy_ham/01300.b4d2c4f321c89df3e5f3e7b4bb9326c1 new file mode 100644 index 000000000..e18adb1bf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01300.b4d2c4f321c89df3e5f3e7b4bb9326c1 @@ -0,0 +1,87 @@ +From rpm-list-admin@freshrpms.net Wed Aug 28 10:46:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8796E44155 + for ; Wed, 28 Aug 2002 05:46:01 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:46:01 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S3SWZ08958 for + ; Wed, 28 Aug 2002 04:28:32 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g7S3Q3J21679; Wed, 28 Aug 2002 05:26:03 + +0200 +Received: from bob.dudex.net (dsl092-157-004.wdc1.dsl.speakeasy.net + [66.92.157.4]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g7S3OxJ07705 + for ; Wed, 28 Aug 2002 05:24:59 +0200 +Received: from [66.92.157.3] (helo=www.dudex.net) by bob.dudex.net with + esmtp (Exim 3.35 #1) id 17jtS9-0005Zs-00; Tue, 27 Aug 2002 23:25:09 -0400 +X-Originating-Ip: [66.44.42.51] +From: "" Angles " Puglisi" +To: valhalla-list@spamassassin.taint.org, + "=?iso-8859-1?Q?RPM=2DList?=" +Subject: Re: ALSA (almost) made easy +Message-Id: <20020827.HLj.85891900@www.dudex.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline +X-Mailer: AngleMail for phpGroupWare (http://www.phpgroupware.org) v + 0.9.14.000 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 03:28:10 +0000 +Date: Wed, 28 Aug 2002 03:28:10 +0000 + +Matthias Saou (matthias@rpmforge.net) wrote*: +> +>You can also install the XMMS plugin +>(seems to make my XMMS segfault on exit... +>hmmm, but maybe it's another plugin) to listen to your good ol' mp3 +>files... that's it! + +I've an XMMS Alsa module I've been using for a while now at: +http://www.dudex.net/rpms/alsa-xmms-0.9_cvs020630-aap1.i686.rpm +http://www.dudex.net/rpms/alsa-xmms-0.9_cvs020630-aap1.src.rpm +http://www.dudex.net/rpms/alsa-xmms-0.9_cvs020630.spec + +Also there is alsaplayer rpms there too: +http://www.dudex.net/rpms/alsaplayer-0.99.71-aap1.i386.rpm +http://www.dudex.net/rpms/alsaplayer-0.99.71-aap1.i686.rpm +http://www.dudex.net/rpms/alsaplayer-0.99.71-aap1.src.rpm +http://www.dudex.net/rpms/alsaplayer-0.99.71.spec + +Good luck. Both were build on an RH 7.3 box with errata current as of the date of +the build. I'm running (null) RH beta now and I recall that alsa-xmms still works, I +can not remember if alsaplayer needs a --rebuild. + +As an aside, alsaplayer is really maturing into a versitile app, I've been packaging +for many releases now. + +I've scripted the alsa-xmms cvs build, so it's easy to spin another one if these +rpms do not work on (null). + +-- +That's "angle" as in geometry. + + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + diff --git a/Ch3/datasets/spam/easy_ham/01301.83b3e0f947cca0c2e3f5cbaffd2772eb b/Ch3/datasets/spam/easy_ham/01301.83b3e0f947cca0c2e3f5cbaffd2772eb new file mode 100644 index 000000000..5b54640bb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01301.83b3e0f947cca0c2e3f5cbaffd2772eb @@ -0,0 +1,68 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 18:18:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2AE0816F16 + for ; Wed, 9 Oct 2002 18:18:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 18:18:04 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99FwTK10005 for + ; Wed, 9 Oct 2002 16:58:35 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g99Ft7f03729; Wed, 9 Oct 2002 17:55:07 + +0200 +Received: from mail.speakeasy.net (mail15.speakeasy.net [216.254.0.215]) + by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g99FsBf03601 for + ; Wed, 9 Oct 2002 17:54:11 +0200 +Received: (qmail 20314 invoked from network); 9 Oct 2002 15:54:10 -0000 +Received: from unknown (HELO [192.168.1.105]) ([66.93.225.166]) + (envelope-sender ) by mail15.speakeasy.net + (qmail-ldap-1.03) with SMTP for ; 9 Oct 2002 + 15:54:10 -0000 +Subject: Problems with xosd-xmms +From: "D. Michael Basinger" +To: rpm-zzzlist@freshrpms.net +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1034178803.1390.4.camel@samwise.speakeasy.net> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 09 Oct 2002 09:53:22 -0600 +Date: 09 Oct 2002 09:53:22 -0600 + +After installing and enabling xosd-xmms I get the following error when +trying to start xmms + +Xlib: unexpected async reply (sequence 0x30)! + +xmms starts, but it does not detect mouse commands. + +Thanks, +Mike +-- +D. Michael Basinger +dbasinge@speakeasy.net + + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01302.06ac4ee24e3c434afa330b8c0408649b b/Ch3/datasets/spam/easy_ham/01302.06ac4ee24e3c434afa330b8c0408649b new file mode 100644 index 000000000..903c5160e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01302.06ac4ee24e3c434afa330b8c0408649b @@ -0,0 +1,89 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 18:18:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5B61716F16 + for ; Wed, 9 Oct 2002 18:18:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 18:18:25 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99GLLK11121 for + ; Wed, 9 Oct 2002 17:21:21 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g99GJ2f19047; Wed, 9 Oct 2002 18:19:02 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g99GI3f13043 for + ; Wed, 9 Oct 2002 18:18:03 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: xine cannot play DVDs - "liba52: a52_block error" +Message-Id: <20021009181801.65d72cbc.matthias@rpmforge.net> +In-Reply-To: <1034115445.10490.4.camel@damocles> +References: <1034115445.10490.4.camel@damocles> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 18:18:01 +0200 +Date: Wed, 9 Oct 2002 18:18:01 +0200 + +Once upon a time, Jon wrote : + +> Since libdvdcss-1.2.0, I have been unable to play DVDs using ogle, xine, +> vlc, or mplayer. They all show a scrambled picture with (VERY) choppy +> audio. When I run xine I see tons of these in the console: +> +> liba52: a52_block error +> liba52: a52_block error +> liba52: a52_block error +> liba52: a52_block error +> audio_out: inserting 5859 0-frames to fill a gap of 10989 pts +> metronom: audio jump +> liba52: a52_block error +> +> Has anyone seen this before and know how to fix it? Or should I file a +> bug report? + +Hi, + +First of all, sorry for not replying to your private email from last week, +but I really don't have a slight idea of what could be causing this! +- Is this with different DVDs or a single one? +- Is this using OSS or ALSA? Have you tried both? +- Is this using binariy packages or recompiling source ones? + +I remember a user having trouble with a particular DVD ever since upgrading +libdvdcss to a recent version, but haven't heard the end of the story. + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.07 0.20 0.21 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01303.e0dac36f259ebc7b7b4ac81c6923d56e b/Ch3/datasets/spam/easy_ham/01303.e0dac36f259ebc7b7b4ac81c6923d56e new file mode 100644 index 000000000..eb7ffab3d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01303.e0dac36f259ebc7b7b4ac81c6923d56e @@ -0,0 +1,160 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 22:41:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E29D016F67 + for ; Wed, 9 Oct 2002 22:40:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 22:40:55 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99Jb9K18484 for + ; Wed, 9 Oct 2002 20:37:09 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g99JU2f20377; Wed, 9 Oct 2002 21:30:03 + +0200 +Received: from canarsie.horizonlive.com (slim-eth0.horizonlive.net + [208.185.78.2]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g99JT1f20229 for ; Wed, 9 Oct 2002 21:29:01 +0200 +Received: from canarsie.horizonlive.com (localhost.localdomain + [127.0.0.1]) by canarsie.horizonlive.com (8.12.5/8.12.5) with ESMTP id + g99JSu8f020466 for ; Wed, 9 Oct 2002 15:28:56 + -0400 +Received: (from stevek@localhost) by canarsie.horizonlive.com + (8.12.5/8.12.5/Submit) id g99JStTV020464 for rpm-list@freshrpms.net; + Wed, 9 Oct 2002 15:28:55 -0400 +X-Authentication-Warning: canarsie.horizonlive.com: stevek set sender to + stevek@horizonlive.com using -f +From: Steve Kann +To: rpm-zzzlist@freshrpms.net +Subject: Re: Ack, apt-get still failing for me, stumped. [RH8] +Message-Id: <20021009152844.A20454@canarsie.horizonlive.com> +References: <20021008200145.A16895@canarsie.horizonlive.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <20021008200145.A16895@canarsie.horizonlive.com> +User-Agent: Mutt/1.3.21i +X-Blank-Header-Line: (this header intentionally left blank) +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 15:28:55 -0400 +Date: Wed, 9 Oct 2002 15:28:55 -0400 + + +I've also just tried doing rpm --rebuilddb, no change. + +A question: + +Do these files look too small? + +root@canarsie:/var/cache/apt # ls -ltr +total 148 +drwxr-xr-x 2 root root 4096 Sep 29 10:49 gensrclist +drwxr-xr-x 2 root root 4096 Sep 29 10:49 genpkglist +drwxr-xr-x 3 root root 4096 Oct 8 19:59 archives +-rw-r--r-- 1 root root 49863 Oct 9 15:25 srcpkgcache.bin +-rw-r--r-- 1 root root 158131 Oct 9 15:25 pkgcache.bin + + +I ran strings on them, and it doesn't look like I see a complete listing +of either my system's installed RPMs, or the rpms in the lists: + +root@canarsie:/var/state/apt/lists # ls -s +total 9988 + 416 apt.freshrpms.net_redhat_8.0_en_i386_base_pkglist.freshrpms +8704 apt.freshrpms.net_redhat_8.0_en_i386_base_pkglist.os + 0 apt.freshrpms.net_redhat_8.0_en_i386_base_pkglist.updates + 4 apt.freshrpms.net_redhat_8.0_en_i386_base_release.freshrpms + 4 apt.freshrpms.net_redhat_8.0_en_i386_base_release.os + 4 apt.freshrpms.net_redhat_8.0_en_i386_base_release.updates + 64 apt.freshrpms.net_redhat_8.0_en_i386_base_srclist.freshrpms + 788 apt.freshrpms.net_redhat_8.0_en_i386_base_srclist.os + 0 apt.freshrpms.net_redhat_8.0_en_i386_base_srclist.updates + 0 lock + 4 partial + + +If I kill them, they get recreated about the same size next time I run +apt-get.. + +-SteveK + + +On Tue, Oct 08, 2002 at 08:01:48PM -0400, Steve Kann wrote: +> +> I posted about this last week, and I'm still stumped. apt-get is just +> not working for me, and I can't figure out what the problem is. +> +> I've tried removing the apt rpms, making sure to remove any traces left +> behind (/etc/apt /var/state/apt /var/cache/apt), and still, I get +> "couldn't find package xmms-mp3" when running "apt-get install xmms-mp3". +> +> Any clues? Here's a log of a fresh try: +> +> root@canarsie:/tmp # rpm -e apt apt-devel +> root@canarsie:/tmp # rm -rf /etc/apt /var/cache/apt /var/state/apt +> root@canarsie:/tmp # rpm -ivh apt-0.5.4cnc7-fr1.i386.rpm apt-devel-0.5.4cnc7-fr1.i386.rpm +> warning: apt-0.5.4cnc7-fr1.i386.rpm: V3 DSA signature: NOKEY, key ID +> e42d547b +> Preparing... ########################################### [100%] +> 1:apt ########################################### [ 50%] +> 2:apt-devel ########################################### [100%] +> root@canarsie:/tmp # apt-get update +> Ign http://apt.freshrpms.net redhat/8.0/en/i386 release +> Get:1 http://apt.freshrpms.net redhat/8.0/en/i386/os pkglist [1276kB] +> Get:2 http://apt.freshrpms.net redhat/8.0/en/i386/os release [108B] +> Get:3 http://apt.freshrpms.net redhat/8.0/en/i386/updates pkglist [14B] +> Get:4 http://apt.freshrpms.net redhat/8.0/en/i386/updates release [113B] +> Get:5 http://apt.freshrpms.net redhat/8.0/en/i386/freshrpms pkglist +> [57.1kB] +> Get:6 http://apt.freshrpms.net redhat/8.0/en/i386/freshrpms release +> [125B] +> Get:7 http://apt.freshrpms.net redhat/8.0/en/i386/os srclist [152kB] +> Get:8 http://apt.freshrpms.net redhat/8.0/en/i386/updates srclist [14B] +> Get:9 http://apt.freshrpms.net redhat/8.0/en/i386/freshrpms srclist +> [14.4kB] +> Fetched 1500kB in 11s (125kB/s) +> Reading Package Lists... Done +> root@canarsie:/tmp # apt-get install xmms-mp3 +> Reading Package Lists... Done +> Building Dependency Tree... Done +> E: Couldn't find package xmms-mp3 +> root@canarsie:/tmp # apt-cache search xmms +> root@canarsie:/tmp # +> +> +> Beats me.. +> +> -SteveK +> +> +> +> -- +> Steve Kann - Chief Engineer - 520 8th Ave #2300 NY 10018 - (212) 533-1775 +> HorizonLive.com - collaborate . interact . learn +> "The box said 'Requires Windows 95, NT, or better,' so I installed Linux." + +-- + Steve Kann - Chief Engineer - 520 8th Ave #2300 NY 10018 - (212) 533-1775 + HorizonLive.com - collaborate . interact . learn + "The box said 'Requires Windows 95, NT, or better,' so I installed Linux." + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01304.33e179931a138954fe23c556cb2068aa b/Ch3/datasets/spam/easy_ham/01304.33e179931a138954fe23c556cb2068aa new file mode 100644 index 000000000..a64726167 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01304.33e179931a138954fe23c556cb2068aa @@ -0,0 +1,70 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 22:42:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E77A916F16 + for ; Wed, 9 Oct 2002 22:41:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 22:41:02 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99KJVK19998 for + ; Wed, 9 Oct 2002 21:19:32 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g99KA3f07032; Wed, 9 Oct 2002 22:10:03 + +0200 +Received: from wintermute.sr.unh.edu (wintermute.sr.unh.edu + [132.177.241.100]) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g99K8sf06876 for ; Wed, 9 Oct 2002 22:08:54 +0200 +Received: (from tjb@localhost) by wintermute.sr.unh.edu (8.11.6/8.11.6) id + g99K8mg26434; Wed, 9 Oct 2002 16:08:48 -0400 +X-Authentication-Warning: wintermute.sr.unh.edu: tjb set sender to + tjb@unh.edu using -f +Subject: Apt 0.3 and 0.5 +From: "Thomas J. Baker" +To: rpm-zzzlist@freshrpms.net +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 +Message-Id: <1034194128.19400.49.camel@wintermute.sr.unh.edu> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 09 Oct 2002 16:08:48 -0400 +Date: 09 Oct 2002 16:08:48 -0400 + +Should I expect problems if my apt server is running RH 7.3/Apt 0.3 and +some clients are coming on line and will be running RH 8.0/Apt 0.5? Do +the two different version interoperate? + +Thanks, + +tjb +-- +======================================================================= +| Thomas Baker email: tjb@unh.edu | +| Systems Programmer | +| Research Computing Center voice: (603) 862-4490 | +| University of New Hampshire fax: (603) 862-1761 | +| 332 Morse Hall | +| Durham, NH 03824 USA http://wintermute.sr.unh.edu/~tjb | +======================================================================= + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01305.2c525c3b4e9d21a1af3534d1a059cfaf b/Ch3/datasets/spam/easy_ham/01305.2c525c3b4e9d21a1af3534d1a059cfaf new file mode 100644 index 000000000..601670c71 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01305.2c525c3b4e9d21a1af3534d1a059cfaf @@ -0,0 +1,70 @@ +From rpm-list-admin@freshrpms.net Wed Oct 9 22:42:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5C3BD16F6E + for ; Wed, 9 Oct 2002 22:41:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 22:41:09 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g99L3YK21522 for + ; Wed, 9 Oct 2002 22:03:34 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g99Kn2f25952; Wed, 9 Oct 2002 22:49:02 + +0200 +Received: from python (80-24-132-206.uc.nombres.ttd.es [80.24.132.206]) + (authenticated) by egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id + g99Klvf22559 for ; Wed, 9 Oct 2002 22:47:57 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: Apt 0.3 and 0.5 +Message-Id: <20021009224706.5996f983.matthias@rpmforge.net> +In-Reply-To: <1034194128.19400.49.camel@wintermute.sr.unh.edu> +References: <1034194128.19400.49.camel@wintermute.sr.unh.edu> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 22:47:06 +0200 +Date: Wed, 9 Oct 2002 22:47:06 +0200 + +Once upon a time, Thomas wrote : + +> Should I expect problems if my apt server is running RH 7.3/Apt 0.3 and +> some clients are coming on line and will be running RH 8.0/Apt 0.5? Do +> the two different version interoperate? + +No problems whatsoever. Currently apt.freshrpms.net is running 7.3 with apt +0.3 and many 8.0 clients with 0.5 are using it. + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10 +Load : 0.10 0.11 0.10, AC on-line, battery charging: 100% (1:47) + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01306.01273f7d32eaabde7b20f220e13eb927 b/Ch3/datasets/spam/easy_ham/01306.01273f7d32eaabde7b20f220e13eb927 new file mode 100644 index 000000000..fd0e25331 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01306.01273f7d32eaabde7b20f220e13eb927 @@ -0,0 +1,80 @@ +From rpm-list-admin@freshrpms.net Thu Oct 10 12:32:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 89A4216F17 + for ; Thu, 10 Oct 2002 12:32:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 10 Oct 2002 12:32:36 +0100 (IST) +Received: from egwn.net (ns2.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9AAcvK18611 for + ; Thu, 10 Oct 2002 11:38:57 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g9AAV7f31601; Thu, 10 Oct 2002 12:31:07 + +0200 +Received: from smtp012.mail.yahoo.com (smtp012.mail.yahoo.com + [216.136.173.32]) by egwn.net (8.11.6/8.11.6/EGWN) with SMTP id + g9AAUQf27490 for ; Thu, 10 Oct 2002 12:30:27 +0200 +Received: from unknown (HELO ?192.168.0.100?) (salimma1@212.18.241.211 + with plain) by smtp.mail.vip.sc5.yahoo.com with SMTP; 10 Oct 2002 10:30:25 + -0000 +Subject: dvd::rip on Red Hat 8.0? +From: =?ISO-8859-1?Q?Mich=E8l?= Alexandre Salim +To: rpm-zzzlist@freshrpms.net +Content-Type: text/plain; charset=UTF-8 +X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) +Message-Id: <1034245825.2222.11.camel@sahib> +MIME-Version: 1.0 +X-Mailscanner: Found to be clean, Found to be clean +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by egwn.net id + g9AAUQf27490 +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 10 Oct 2002 11:30:24 +0100 +Date: 10 Oct 2002 11:30:24 +0100 + +Hello, + +Has anyone made a working source RPM for dvd::rip for Red Hat 8.0? +Matthias has a spec file on the site for 0.46, and there are a couple of +spec files lying around on the dvd::rip website, including one I patched +a while ago, but it appears that the Makefile automatically generated is +trying to install the Perl libraries into the system's, and also at the +moment dvd::rip needs to be called with PERLIO=stdio as it seems to not +work with PerlIO on RH8's Perl. + +Not too sure what the cleanest way to fix this is - anyone working on +this? + +Thanks, + +-- +Michèl Alexandre Salim +Web: http://salimma.freeshell.org +GPG/PGP key: http://salimma.freeshell.org/files/crypto/publickey.asc + +__________________________________________________ +Do You Yahoo!? +Everything you'll ever need on one web page +from News and Sport to Email and Music Charts +http://uk.my.yahoo.com + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01307.4b06bdd9604366d63b4106aa8c715c06 b/Ch3/datasets/spam/easy_ham/01307.4b06bdd9604366d63b4106aa8c715c06 new file mode 100644 index 000000000..86f7e5b59 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01307.4b06bdd9604366d63b4106aa8c715c06 @@ -0,0 +1,71 @@ +From rpm-list-admin@freshrpms.net Thu Oct 10 12:32:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2CB5A16F03 + for ; Thu, 10 Oct 2002 12:32:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 10 Oct 2002 12:32:38 +0100 (IST) +Received: from egwn.net (auth02.nl.egwn.net [193.172.5.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9ABErK19809 for + ; Thu, 10 Oct 2002 12:14:53 +0100 +Received: from auth02.nl.egwn.net (localhost [127.0.0.1]) by egwn.net + (8.11.6/8.11.6/EGWN) with ESMTP id g9ABD1f22826; Thu, 10 Oct 2002 13:13:01 + +0200 +Received: from python (gw01.es3.egwn.net [212.9.66.13]) (authenticated) by + egwn.net (8.11.6/8.11.6/EGWN) with ESMTP id g9ABCAf22717 for + ; Thu, 10 Oct 2002 13:12:10 +0200 +From: Matthias Saou +To: rpm-zzzlist@freshrpms.net +Subject: Re: dvd::rip on Red Hat 8.0? +Message-Id: <20021010131209.1b3fc024.matthias@rpmforge.net> +In-Reply-To: <1034245825.2222.11.camel@sahib> +References: <1034245825.2222.11.camel@sahib> +Organization: freshrpms.net / rpmforge.net +X-Mailer: Sylpheed version 0.8.3claws (GTK+ 1.2.10; i386-redhat-linux) +X-Operating-System: Red Hat GNU/Linux forever! +X-Subliminal-Message: Use Linux... use Linux... use Linux... +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +X-Mailscanner: Found to be clean, Found to be clean +Sender: rpm-zzzlist-admin@freshrpms.net +Errors-To: rpm-zzzlist-admin@freshrpms.net +X-Beenthere: rpm-zzzlist@freshrpms.net +X-Mailman-Version: 2.0.11 +Precedence: bulk +Reply-To: rpm-zzzlist@freshrpms.net +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Freshrpms RPM discussion list +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 10 Oct 2002 13:12:09 +0200 +Date: Thu, 10 Oct 2002 13:12:09 +0200 + +Once upon a time, Michèl wrote : + +> Has anyone made a working source RPM for dvd::rip for Red Hat 8.0? + +I don't think I've tried yet, but if I did, I probably moved on to another +package after having bumped into one of the problems you mention. + +If anyone sends me a patch to my spec file and eventually needed patches +etc., I'd be more than glad to make a new build available. + +Matthias + +-- +Clean custom Red Hat Linux rpm packages : http://freshrpms.net/ +Red Hat Linux release 7.3 (Valhalla) running Linux kernel 2.4.18-10acpi +Load : 0.13 0.09 0.09 + +_______________________________________________ +RPM-List mailing list +http://lists.freshrpms.net/mailman/listinfo/rpm-list + + diff --git a/Ch3/datasets/spam/easy_ham/01308.18d641ec475649b1a8ea5ba7292b3e05 b/Ch3/datasets/spam/easy_ham/01308.18d641ec475649b1a8ea5ba7292b3e05 new file mode 100644 index 000000000..7b8b2677f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01308.18d641ec475649b1a8ea5ba7292b3e05 @@ -0,0 +1,155 @@ +From nobody@dogma.slashnull.org Fri Aug 23 12:20:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D1C5843F99 + for ; Fri, 23 Aug 2002 07:20:27 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 12:20:27 +0100 (IST) +Received: (from mail@localhost) by dogma.slashnull.org (8.11.6/8.11.6) id + g7NB9oq21542; Fri, 23 Aug 2002 12:09:50 +0100 +Date: Fri, 23 Aug 2002 12:09:50 +0100 +Message-Id: <200208231109.g7NB9oq21542@dogma.slashnull.org> +From: nobody@dogma.slashnull.org +Subject: blogged item +To: yyyy+blogged@spamassassin.taint.org + +BlogStart: + +**Dublin**: something from the archives. Daev Walsh forwards an article from +The Irish Digest about ''Billy in the Bowl''. This story is also immortalised +in an old Dublin song, which in turn was mentioned in a Pogues track. Billy +was a legless beggar in the alleys of Stoneybatter and Grangegorman (where I +now live) during the 18th century, who discovered a new, but not entirely +legal, way to make money. + +BlogEnd: +LinkText: Billy in the Bowl + +From: daev +Subject: The Case of the Stoneybatter Strangler + +A story of my new neighbourhood... + + +The Irish Digest July 1964 + + +The Case of the Stoneybatter Strangler + +The handsome, deformed Billy in the Bowl evolved a plan to rob his donors. +Then, one night, he made the biggest mistake of his life + +DUBLIN in the eighteenth century was noted for two things - the +architectural beauty of its public buildings and the large number of +beggars who sought alms in its maze of streets and lanes. Many of these +beggars relied on visitors and the gentry for their coin, but there was one +who campaigned among the working class. This was "Billy In The Bowl" + +The strange appellation was derived from the fact that Billy's sole means +of transport was a large bowl-shaped car with wheels. Seated in this " +bowl ", the beggar would propel himself along by pushing against the ground +with wooden plugs, one in each hand. + +Billy's unusual means of conveyance was vitally necessary, as he had been +born without legs. Nature, however, had compensated for this by endowing +him with powerful arms and shoulders and, what was most important, an +unusually handsome face. + +This was Billy's greatest asset in his daily routine of separating +sympathetic passers-by from their small change. + +The cunning young beggar would wait at a convenient spot on one of the many +lonely roads or lanes which were a feature of eighteenth century +Grangegorman and Stoneybatter, until a servant girl or an old lady would +come along. + +He would then put on is most attractive smile which, together with his +black curly hair, never failed to halt the females. The fact that such a +handsome young man was so terribly handicapped physically always evoked pity. + +"Billy in the Bowl", however, wasn't satisfied with becoming the daily +owner of a generous number of small coins; what his greed demanded were +substantial sums of money. The more he managed to get the more he could +indulge in his pet vices - gambling and drinking. + +As a result the beggar evolved a plan to rob unsuspecting sympathisers. +The first time lie put his plan into operation was on a cold March evening +as dusk, was falling. The victim was a middle aged woman who was passing +through Grangegorman Lane on her way to visit friends in Queen Street - on +Dublin's North Quays. + +When Billy heard the woman's footsteps, he hid behind some bushes in a +ditch which skirted the lane. As his unsuspecting victim drew close, the +beggar moaned and shouted, and cried out for help. + +Trembling with excitement, the woman dashed to the spot where Billy lay +concealed. She bent down to help the beggar out of the ditch, when two +powerful arms closed around her throat and pulled her into the bushes. + +In a few minutes it was all over. The woman lay in a dead faint, and Billy +was travelling at a fast rate down the lane in his " bowl ", his victirn's +purse snug in his coat pocket. An hour after the robbery the woman was +found in a distracted condition, but failed to give a description of her +assailant. And, as "Billy in the Bowl" had figured, nobody would suspect a +deformed beggar. + +Again and again the beggar carried out his robbery plan, always shifting +the place of attack to a different part of Grangegorman or Stoneybatter. + +On one occasion " Billy in "the Bowl " tried his tactics on a sturdy +servant girl who put up such a vigorous resistance that he was forced to +strangle her. The incident became known as the 11 Grangegorman Lane Murder +and caused a great stir. + +Hundred.s flocked to the scene of the crime and for a couple of months +"Billy in the Bowl" was forced to desert his usual haunts. Around this +period, Dublin's first-ever police force was been mobilised, and the first +case they were confronted with was the Grangegorman lane murder. + +Months passed and "Billy in the Bowl" reverted once again to his old +pasttime. A number of young servant girls were lured into ditches and +robbed, and the police were inundated with so many complaints that a +nightly patrol was placed on the district. But the beggar still rolled +along in his "bowl" pitied and unsuspected. Then came the night that +finished Billy's career of crime. + +Two stoudy built female cooks, trudging back to their places of employment +after a night out in the city, were surprised and not a little shocked to +hear shouts for help. Rushing over, they came upon a huddled figure in the +ditch. + +Billy, thinking there was only one woman, grabbed one of the cooks and +tried to pull her into the ditch. She proved much too strong for him, +however) and while resisting tore 'at his face with her sharp finger-nails. + +Meanwhile, her companion acted with speed and daring. Pulling out her +large hatpin she made .for the beggar, and plunged the pin into his right eye. + +The screams and howls of the wounded beggar reverberated throughout the +district and brought people dashing to the scene. Among them was a member +of the nightly police patrol who promptly arrested the groaning Billy. + +"Billy in the Bowl" was tried and sentenced for robbery with violence, but +they could never prove it was he who had strangled the servant girl. The +Grangegorman-Stoneybatter district became once again a quiet, attractive +Dublin suburb where old ladies strolled, and carefree servant girls laughed +and giggled as they wended their way home at night. + + + +daev + +_______________________________ +Rev. Dave 'daev' Walsh, daev@fringeware.com +Home: http://www.fringeware.com/hell +Weekly Rant: http://www.nua.ie/blather +'Is it about a bicycle?'-Sgt.Pluck, +'The Third Policeman', by Flann O'Brien +________________________________ +Holistic Pet Detective, Owl Worrier, Snark Hunter +________________________________ + + + diff --git a/Ch3/datasets/spam/easy_ham/01309.2bec637bc28145370e47c323f994e6eb b/Ch3/datasets/spam/easy_ham/01309.2bec637bc28145370e47c323f994e6eb new file mode 100644 index 000000000..0641e2637 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01309.2bec637bc28145370e47c323f994e6eb @@ -0,0 +1,51 @@ +From craig@deersoft.com Fri Aug 23 11:07:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 31B4044166 + for ; Fri, 23 Aug 2002 06:05:15 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:05:15 +0100 (IST) +Received: from mclean.mail.mindspring.net (mclean.mail.mindspring.net + [207.69.200.57]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7N5rgZ12375 for ; Fri, 23 Aug 2002 06:53:42 +0100 +Received: from user-105nd99.dialup.mindspring.com ([64.91.181.41] + helo=belphegore.hughes-family.org) by mclean.mail.mindspring.net with + esmtp (Exim 3.33 #1) id 17i7OE-00023R-00; Fri, 23 Aug 2002 01:53:46 -0400 +Received: from balam.hughes-family.org (balam.hughes-family.org + [10.0.240.3]) by belphegore.hughes-family.org (Postfix) with ESMTP id + 63E8D71672; Thu, 22 Aug 2002 22:53:44 -0700 (PDT) +Date: Thu, 22 Aug 2002 22:53:44 -0700 +Subject: Re: results for giant mass-check (phew) +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Cc: yyyy@spamassassin.taint.org (Justin Mason), + "Malte S. Stretz" , + SpamAssassin Talk ML +To: Scott A Crosby +From: "Craig R.Hughes" +In-Reply-To: +Message-Id: +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.482) + +I never claimed it could learn *all* combinatorial +possibilities, but it certainly can learn some. + +C + +On Thursday, August 22, 2002, at 07:21 PM, Scott A Crosby wrote: + +> On Thu, 22 Aug 2002 09:20:05 -0700, Craig R.Hughes +> writes: +> +>> It *can* learn combinatorial stuff in a more subtle way. Imagine +> +> No it can't.. +> +> It can learn a few examples that happen to be linearily seperable, +> like those you gave. It cannot learn the example I gave below, which +> is not linearily seperable. + + diff --git a/Ch3/datasets/spam/easy_ham/01310.770eccd33b2cdef430359fe8a771e2de b/Ch3/datasets/spam/easy_ham/01310.770eccd33b2cdef430359fe8a771e2de new file mode 100644 index 000000000..b85917e1d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01310.770eccd33b2cdef430359fe8a771e2de @@ -0,0 +1,76 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Aug 23 11:12:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C273A4416F + for ; Fri, 23 Aug 2002 06:08:09 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:08:09 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MHunZ18548 for ; Thu, 22 Aug 2002 18:56:49 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hw7o-0006wn-00; Thu, + 22 Aug 2002 10:52:04 -0700 +Received: from c35123.upc-c.chello.nl ([212.187.35.123] + helo=router.besmart.nu) by usw-sf-list1.sourceforge.net with smtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17hw7S-0003Tt-00 for + ; Thu, 22 Aug 2002 10:51:42 + -0700 +Received: (qmail 97944 invoked from network); 22 Aug 2002 17:51:43 -0000 +Received: from erik.besmart.nu (HELO erik) (192.168.1.4) by 0 with SMTP; + 22 Aug 2002 17:51:43 -0000 +From: "Erik Rudolfs" +To: +Message-Id: <002601c24a04$8eea9ca0$0401a8c0@erik> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2616 +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Subject: [SAdev] Spam-Assassin nightly build 22-8-02 +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 19:51:35 +0200 +Date: Thu, 22 Aug 2002 19:51:35 +0200 + +Hello all, +I get problems with the latest nightly build from Spamassassin with +VMailMgr + OMail-Admin. +It scans the mail and gives it an : + + X-Spam-Status: No, hits=11.4 required=7.0 + +Can someone look at the code for it? Maybe because option -F is gone? + + +Greetings +Erik Rudolfs + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01311.bcbaf39917e22619944a0e18eb7233f7 b/Ch3/datasets/spam/easy_ham/01311.bcbaf39917e22619944a0e18eb7233f7 new file mode 100644 index 000000000..1fe3529f2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01311.bcbaf39917e22619944a0e18eb7233f7 @@ -0,0 +1,79 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Aug 23 11:12:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 216BF47C93 + for ; Fri, 23 Aug 2002 06:08:14 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:08:14 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MI1nZ18649 for ; Thu, 22 Aug 2002 19:01:50 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hwGX-0007qg-00; Thu, + 22 Aug 2002 11:01:05 -0700 +Received: from p995.as3.adl.dublin.eircom.net ([159.134.231.227] + helo=mandark.labs.netnoteinc.com) by usw-sf-list1.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hwG9-0005es-00 for + ; Thu, 22 Aug 2002 11:00:42 -0700 +Received: from phobos.labs.netnoteinc.com (phobos.labs.netnoteinc.com + [192.168.2.14]) by mandark.labs.netnoteinc.com (8.11.6/8.11.6) with ESMTP + id g7MHxv800975; Thu, 22 Aug 2002 18:59:57 +0100 +Received: by phobos.labs.netnoteinc.com (Postfix, from userid 500) id + 1E6E343F99; Thu, 22 Aug 2002 13:58:06 -0400 (EDT) +Received: from phobos (localhost [127.0.0.1]) by + phobos.labs.netnoteinc.com (Postfix) with ESMTP id 197A733D8C; + Thu, 22 Aug 2002 18:58:06 +0100 (IST) +To: "Craig R.Hughes" +Cc: yyyy@spamassassin.taint.org (Justin Mason), + Justin Shore , + SpamAssassin List +Subject: Re: [SAtalk] Highest-scoring false positive +In-Reply-To: Message from + "Craig R.Hughes" + of + "Thu, 22 Aug 2002 10:50:57 PDT." + +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +Message-Id: <20020822175806.1E6E343F99@phobos.labs.netnoteinc.com> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 18:58:01 +0100 +Date: Thu, 22 Aug 2002 18:58:01 +0100 + + +"Craig R.Hughes" said: + +> Are you filtering the nonspamtrap for spam when those +> newsletters sold your address to someone you didn't sign up +> with? You should probably manually verify that all the mail in +> the trap is in fact nonspam! + +Yep. so far it's all opt-in stuff, no "affiliate deals" etc. + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01312.f553517c829fc5778f61f879aa6330df b/Ch3/datasets/spam/easy_ham/01312.f553517c829fc5778f61f879aa6330df new file mode 100644 index 000000000..8b7d59488 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01312.f553517c829fc5778f61f879aa6330df @@ -0,0 +1,97 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Aug 23 11:12:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id F158444176 + for ; Fri, 23 Aug 2002 06:08:19 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:08:19 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MI4YZ18720 for ; Thu, 22 Aug 2002 19:04:35 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hwIR-00006R-00; Thu, + 22 Aug 2002 11:03:03 -0700 +Received: from neo.pittstate.edu ([198.248.208.13]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17hwHb-0005o2-00 for ; + Thu, 22 Aug 2002 11:02:12 -0700 +Received: from [198.248.208.11] (macdaddy.pittstate.edu [198.248.208.11]) + by neo.pittstate.edu (8.12.2/8.12.2) with ESMTP id g7MI1QW7000365; + Thu, 22 Aug 2002 13:01:27 -0500 +MIME-Version: 1.0 +Message-Id: +In-Reply-To: +References: +To: "Craig R.Hughes" , + jm@jmason.org (Justin Mason) +From: Justin Shore +Subject: Re: [SAtalk] Highest-scoring false positive +Cc: SpamAssassin List +Content-Type: text/plain; charset="us-ascii" ; format="flowed" +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 13:01:51 -0500 +Date: Thu, 22 Aug 2002 13:01:51 -0500 + +Like an alias for each list that points to the nonspamtrap address. + +J + + +At 10:50 AM -0700 8/22/02, Craig R.Hughes wrote: +>Are you filtering the nonspamtrap for spam when those newsletters +>sold your address to someone you didn't sign up with? You should +>probably manually verify that all the mail in the trap is in fact +>nonspam! +> +>C +> +>On Thursday, August 22, 2002, at 07:59 AM, Justin Mason wrote: +> +>> +>>Justin Shore said: +>> +>>>I just ran across a false positive that scored 8.6. The message was +>>>a solicited ad from Apple.com on educator deals. I can send a copy +>>>if anyone wants it. +>> +>>Yes, please do send it on, and I'll add it to the non-spam corpus. +>> +>>To date, the scores evolved by SpamAssassin are very biased towards +>>non-HTML, non-newsletter-ish mail. This release should be different, as +>>I've been spending the last month signing up a "nonspamtrap" to every +>>legit newsletter I can find ;) +>> +>>This should mean that tests which match common-enough newsletter practices +>>will no longer get such high scores once we re-run the GA. + +-- + +-- +Justin Shore, ES-SS ES-SSR Pittsburg State University +Network & Systems Manager http://www.pittstate.edu/ois/ + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01313.f8778c3339382c5514c9e201847f75ee b/Ch3/datasets/spam/easy_ham/01313.f8778c3339382c5514c9e201847f75ee new file mode 100644 index 000000000..1daa37925 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01313.f8778c3339382c5514c9e201847f75ee @@ -0,0 +1,82 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Aug 23 11:12:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1446344175 + for ; Fri, 23 Aug 2002 06:08:18 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:08:18 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MI2nZ18679 for ; Thu, 22 Aug 2002 19:02:49 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hwHW-00087x-00; Thu, + 22 Aug 2002 11:02:06 -0700 +Received: from server1.shellworld.net ([64.39.15.178]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17hwHF-0005mI-00 for + ; Thu, 22 Aug 2002 11:01:49 -0700 +Received: from localhost (admin@localhost) by server1.shellworld.net + (8.11.1/8.11.1) with ESMTP id g7MI1ic24484 for + ; Thu, 22 Aug 2002 13:01:44 -0500 + (CDT) (envelope-from admin@shellworld.net) +From: Ken Scott +To: spamassassin-talk@example.sourceforge.net +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Subject: [SAtalk] Some Stupid Questions +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 13:01:44 -0500 (CDT) +Date: Thu, 22 Aug 2002 13:01:44 -0500 (CDT) + +As the subject line indicates, I'm sure these are stupid questions, but +I'm having trouble getting SA working like I understand it should work, +and have about given up on trying to figure it out myself. + +If a user has a line like: + +whitelist_from *@yahoogroups.com + +in his .spamassassin/user_prefs file, does that line not, in effect, +tell the program to take no action at all against any mail coming in from +yahoogroups.com, or is there still checking being done against it? And if +the latter, what does he need to place in user_prefs to cause such mail +to be ignored? I'm testing SA here with a few users who happen to be on +yahoogroups lists, before deploying it system-wide, and although the above +line has been added to their user_prefs files, much of their list mail is +still going to the spam folder due to all the usual things you would +expect to trigger SA. + +Thanks in advance for any help. + +-- +Ken Scott, +admin@shellworld.net + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01314.ba7b992d372c23964b8b4a1de885a095 b/Ch3/datasets/spam/easy_ham/01314.ba7b992d372c23964b8b4a1de885a095 new file mode 100644 index 000000000..b7da8fbd4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01314.ba7b992d372c23964b8b4a1de885a095 @@ -0,0 +1,117 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Aug 23 11:12:17 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B566847C66 + for ; Fri, 23 Aug 2002 06:08:21 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:08:21 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MIAvZ19008 for ; Thu, 22 Aug 2002 19:10:57 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hwPF-0002MC-00; Thu, + 22 Aug 2002 11:10:05 -0700 +Received: from eclectic.kluge.net ([66.92.69.221]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17hwOY-0000GN-00 for ; + Thu, 22 Aug 2002 11:09:22 -0700 +Received: (from felicity@localhost) by eclectic.kluge.net (8.11.6/8.11.6) + id g7MI97Q22397; Thu, 22 Aug 2002 14:09:07 -0400 +From: Theo Van Dinter +To: Ken Scott +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Some Stupid Questions +Message-Id: <20020822180907.GE16421@kluge.net> +References: +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="lteA1dqeVaWQ9QQl" +Content-Disposition: inline +In-Reply-To: +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 14:09:07 -0400 +Date: Thu, 22 Aug 2002 14:09:07 -0400 + + +--lteA1dqeVaWQ9QQl +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Thu, Aug 22, 2002 at 01:01:44PM -0500, Ken Scott wrote: +> whitelist_from *@yahoogroups.com +>=20 +> in his .spamassassin/user_prefs file, does that line not, in effect, +> tell the program to take no action at all against any mail coming in from +> yahoogroups.com, or is there still checking being done against it? And if + +It still gets checked, but a negative score is added in. And it doesn't +mean "coming in from" it means "From: address is @yahoogroups.com". +There's a Yahoo Groups compensation rule in 2.40 though. :) + +> the latter, what does he need to place in user_prefs to cause such mail +> to be ignored? I'm testing SA here with a few users who happen to be on + +ignored completely? you can't do that, put in a procmail rule. + +> yahoogroups lists, before deploying it system-wide, and although the above +> line has been added to their user_prefs files, much of their list mail is +> still going to the spam folder due to all the usual things you would +> expect to trigger SA. + +You'd want to either add your own compensation rule or up (negatively) +the whitelist score. + +--=20 +Randomly Generated Tagline: +There are perfectly good answers to those questions, but they'll have + to wait for another night. +=20 + -- Homer Simpson + Homers Barbershop Quartet + +--lteA1dqeVaWQ9QQl +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9ZSjDAuOQUeWAs2MRAk7zAKDCQJ8EQx5520TfLqgL+AogSqPOGwCg9fG4 +XMAdFMmo1slLu/d8Sqj44U0= +=QHHd +-----END PGP SIGNATURE----- + +--lteA1dqeVaWQ9QQl-- + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01315.8e0a668ce9b6e62261baccba167f8a67 b/Ch3/datasets/spam/easy_ham/01315.8e0a668ce9b6e62261baccba167f8a67 new file mode 100644 index 000000000..8099391e2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01315.8e0a668ce9b6e62261baccba167f8a67 @@ -0,0 +1,96 @@ +From spamassassin-commits-admin@lists.sourceforge.net Fri Aug 23 11:12:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id EE31A44160 + for ; Fri, 23 Aug 2002 06:08:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:08:28 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MIDuZ19065 for ; Thu, 22 Aug 2002 19:13:57 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hwT4-000488-00; Thu, + 22 Aug 2002 11:14:02 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17hwSc-0002Kq-00 for ; + Thu, 22 Aug 2002 11:13:34 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17hwSc-0008Es-00 for + ; Thu, 22 Aug 2002 11:13:34 + -0700 +Received: from hughescr by usw-pr-cvs1.sourceforge.net with local (Exim + 3.22 #1 (Debian)) id 17hwSa-00007M-00 for + ; Thu, 22 Aug 2002 11:13:32 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Craig Hughes +Subject: [SACVS] CVS: spamassassin/masses mass-check,1.67,1.67.2.1 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 11:13:32 -0700 +Date: Thu, 22 Aug 2002 11:13:32 -0700 + +Update of /cvsroot/spamassassin/spamassassin/masses +In directory usw-pr-cvs1:/tmp/cvs-serv440/masses + +Modified Files: + Tag: b2_4_0 + mass-check +Log Message: +Fixes, additions to mass-check + +Index: mass-check +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/masses/mass-check,v +retrieving revision 1.67 +retrieving revision 1.67.2.1 +diff -b -w -u -d -r1.67 -r1.67.2.1 +--- mass-check 20 Aug 2002 12:29:32 -0000 1.67 ++++ mass-check 22 Aug 2002 18:13:30 -0000 1.67.2.1 +@@ -96,6 +96,7 @@ + + print "# mass-check results from $who\@$where, on $when\n"; + print "# M:SA version ".$spamtest->Version()."\n"; ++print '# CVS tag: $Name$',"\n"; + $iter->set_function (\&wanted); + $iter->run (@ARGV); + exit; +@@ -132,6 +133,8 @@ + my $tests = $status->get_names_of_tests_hit(); + + $tests = join(',', sort(split(/,/, $tests))); ++ ++ $id =~ s/\s/_/g; + + printf "%s %2d %s %s\n", + ($yorn ? 'Y' : '.'), + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + diff --git a/Ch3/datasets/spam/easy_ham/01316.41c15382cdd5ff4fe78ae3484ff1dc6d b/Ch3/datasets/spam/easy_ham/01316.41c15382cdd5ff4fe78ae3484ff1dc6d new file mode 100644 index 000000000..34e34c420 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01316.41c15382cdd5ff4fe78ae3484ff1dc6d @@ -0,0 +1,93 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Aug 23 11:12:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8B0F247C68 + for ; Fri, 23 Aug 2002 06:08:35 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:08:35 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MILwZ19409 for ; Thu, 22 Aug 2002 19:21:58 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hwZs-0005oO-00; Thu, + 22 Aug 2002 11:21:04 -0700 +Received: from tisch.mail.mindspring.net ([207.69.200.157]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17hwYx-0003zN-00; Thu, 22 Aug 2002 11:20:07 -0700 +Received: from user-105nd99.dialup.mindspring.com ([64.91.181.41] + helo=belphegore.hughes-family.org) by tisch.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17hwYo-00005D-00; Thu, 22 Aug 2002 14:19:58 -0400 +Received: from balam.hughes-family.org + (adsl-67-118-234-50.dsl.pltn13.pacbell.net [67.118.234.50]) by + belphegore.hughes-family.org (Postfix) with ESMTP id 9A465B5CE; + Thu, 22 Aug 2002 11:19:57 -0700 (PDT) +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Cc: SpamAssassin-talk@example.sourceforge.net, + SpamAssassin-devel@lists.sourceforge.net +To: yyyy@spamassassin.taint.org (Justin Mason) +From: "Craig R.Hughes" +In-Reply-To: <20020822164954.699E343F99@phobos.labs.netnoteinc.com> +Message-Id: +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.482) +Subject: [SAtalk] Re: [SAdev] 2.40 RELEASE PROCESS: mass-check status, folks? +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 11:19:57 -0700 +Date: Thu, 22 Aug 2002 11:19:57 -0700 + +I think with the confusion and all, we should give these folks +until the end of the day to get fixed logs uploaded :) + +Justin, on a related note -- I didn't include the spamtrap stuff +from the corpus directory on your server in my logs, but that +should definitely be in there -- don't know if you'd included it +in yours or not. I think it's from Kelsey's mailtraps... + +C + +On Thursday, August 22, 2002, at 09:49 AM, Justin Mason wrote: + +> Files that are out of date (as far as I can tell -- they have no date +> comment), and will be ignored: +> +> nonspam-danielp.log +> nonspam-danielr.log +> nonspam-duncan.log +> nonspam-james.log +> nonspam-laager.log +> nonspam-messagelabs.log +> nonspam-msquadrat.log +> nonspam-olivier.log +> nonspam-oliviern.log +> nonspam-quinlan.log +> nonspam-rodbegbie.log +> nonspam-sean.log +> nonspam-theo.log + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01317.55468871d6f7618afed9a0b07ee2609e b/Ch3/datasets/spam/easy_ham/01317.55468871d6f7618afed9a0b07ee2609e new file mode 100644 index 000000000..82279a7d9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01317.55468871d6f7618afed9a0b07ee2609e @@ -0,0 +1,85 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Aug 23 11:12:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0CDFE44171 + for ; Fri, 23 Aug 2002 06:08:32 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:08:33 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MIJaZ19382 for ; Thu, 22 Aug 2002 19:19:37 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hwWx-0005Rd-00; Thu, + 22 Aug 2002 11:18:03 -0700 +Received: from hall.mail.mindspring.net ([207.69.200.60]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17hwWD-0003Gh-00 for ; + Thu, 22 Aug 2002 11:17:17 -0700 +Received: from user-105nd99.dialup.mindspring.com ([64.91.181.41] + helo=belphegore.hughes-family.org) by hall.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17hwWA-0006e8-00; Thu, 22 Aug 2002 14:17:14 -0400 +Received: from balam.hughes-family.org + (adsl-67-118-234-50.dsl.pltn13.pacbell.net [67.118.234.50]) by + belphegore.hughes-family.org (Postfix) with ESMTP id 29C06A002E; + Thu, 22 Aug 2002 11:17:13 -0700 (PDT) +Subject: Re: [SAtalk] German spam corpus / foreign language spam +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Cc: SAtalk +To: yyyy@spamassassin.taint.org (Justin Mason) +From: "Craig R.Hughes" +In-Reply-To: <20020822163653.7246343F99@phobos.labs.netnoteinc.com> +Message-Id: <62593AC6-B5FB-11D6-A91E-00039396ECF2@deersoft.com> +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.482) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 11:17:14 -0700 +Date: Thu, 22 Aug 2002 11:17:14 -0700 + + +On Thursday, August 22, 2002, at 09:36 AM, Justin Mason wrote: + +> +> "Craig R.Hughes" said: +> +>> I thought we'd sort of decided that after 2.40 we'd switch the +>> meaning of the "lang" prefix to actually mean "run these rules +>> if language matches", where "language" is what TextCat spits out +>> for a message, as opposed to using the locale which is how +>> things currently work. +> +> ah, right -- I'd forgotten that. :( +> +> doesn't help with the finding-broken-rules QA case though... + +It does, if you have a corpus of german spam and nonspam to feed +it, and you're not in a de locale. + +C + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01318.db11c5ecba49aba4fb12fbead712f815 b/Ch3/datasets/spam/easy_ham/01318.db11c5ecba49aba4fb12fbead712f815 new file mode 100644 index 000000000..c26dabe34 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01318.db11c5ecba49aba4fb12fbead712f815 @@ -0,0 +1,93 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Aug 23 11:12:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7CE7947C95 + for ; Fri, 23 Aug 2002 06:08:39 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:08:39 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MIO2Z19435 for ; Thu, 22 Aug 2002 19:24:02 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hwbn-00061y-00; Thu, + 22 Aug 2002 11:23:03 -0700 +Received: from granger.mail.mindspring.net ([207.69.200.148]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17hwbi-00051w-00 for ; + Thu, 22 Aug 2002 11:22:58 -0700 +Received: from user-105nd99.dialup.mindspring.com ([64.91.181.41] + helo=belphegore.hughes-family.org) by granger.mail.mindspring.net with + esmtp (Exim 3.33 #1) id 17hwbe-00064r-00; Thu, 22 Aug 2002 14:22:54 -0400 +Received: from balam.hughes-family.org + (adsl-67-118-234-50.dsl.pltn13.pacbell.net [67.118.234.50]) by + belphegore.hughes-family.org (Postfix) with ESMTP id E47379CB1B; + Thu, 22 Aug 2002 11:22:44 -0700 (PDT) +Subject: Re: [SAtalk] Re: SA In The News +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Cc: Scott A Crosby , + Matthew Cline , + SpamAssassin Talk ML +To: "Tony L. Svanstrom" +From: "Craig R.Hughes" +In-Reply-To: <20020822190440.Q66093-100000@moon.campus.luth.se> +Message-Id: <2635D258-B5FC-11D6-A91E-00039396ECF2@deersoft.com> +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.482) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 11:22:43 -0700 +Date: Thu, 22 Aug 2002 11:22:43 -0700 + +So do you know my public key? Does the guy who wants to buy +10,000 licenses of SpamAssassin Pro? Do I really want to lose +email from either of you? + +C + +On Thursday, August 22, 2002, at 10:13 AM, Tony L. Svanstrom wrote: + +> On Thu, 22 Aug 2002 the voices made Craig R.Hughes write: +> +>> Trouble is, you don't necessarily know ahead of time who's +>> wanting to send +>> you stuff. I don't have your PGP public key on my keychain. +>> You can do all +>> the signing you want, it's not going to help. However, if you +>> stick a Habeas +>> header in your mail, I can (hopefully) be reasonably sure that +>> you're not +>> trying to spam me. It is going to be all about enforcement +>> though; we'll +>> have to see how they do on enforcement. +> +> Signing messages to someone ('s public key) isn't impossible, +> using some +> creative scripting you could even do it with OpenPGP-compatible +> software... + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01319.683e3c750cb5757c27ee18cf6a2ff905 b/Ch3/datasets/spam/easy_ham/01319.683e3c750cb5757c27ee18cf6a2ff905 new file mode 100644 index 000000000..512593698 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01319.683e3c750cb5757c27ee18cf6a2ff905 @@ -0,0 +1,91 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Aug 26 15:41:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7FD8F47C83 + for ; Mon, 26 Aug 2002 10:33:48 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:33:48 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7NII1Z03061 for ; Fri, 23 Aug 2002 19:18:01 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17iIzY-0005we-00; Fri, + 23 Aug 2002 11:17:04 -0700 +Received: from firenze.terenet.com.br ([200.255.3.10]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17iIyp-00080m-00 for ; + Fri, 23 Aug 2002 11:16:19 -0700 +Received: from [200.255.3.123] (marconi.terenet.com.br [200.255.3.30]) by + firenze.terenet.com.br (Postfix) with ESMTP id 94D2B33610F for + ; Fri, 23 Aug 2002 15:16:13 -0300 + (BRT) +MIME-Version: 1.0 +X-Sender: lceglia@pop.terenet.com.br +Message-Id: +To: spamassassin-talk@example.sourceforge.net +From: Luiz Felipe Ceglia +Content-Type: text/plain; charset="us-ascii" ; format="flowed" +Subject: [SAtalk] help with postfix + spamassassin +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 23 Aug 2002 15:15:06 -0300 +Date: Fri, 23 Aug 2002 15:15:06 -0300 + +Hi Folks, + +I have just installed spamassassin 2.31 in my postfix MTA server. + +At first, I would like to test it just in my email account before +applying it to the wole site. + +I configured just as in the INSTALL file: + + 5. Create a .forward... + "|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #user" + 6. create a .procmailrc + :0fw + | /usr/bin/spamassassin -c + /etc/mail/spamassassin/rules + +But the spams get trought it untouched. When I run it by the hand: + +cat sample-spam.txt | /usr/bin/spamassassin -c + /etc/mail/spamassassin/rules + +it does tag it as spam and send me the email. + +what should I look at? + +Thank you, + + +-- +Luiz Felipe Ceglia - Staff TereNet +lceglia@terenet.com.br - +55-21-9135-3679 + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01320.f1760dca874206f2189cd242da670499 b/Ch3/datasets/spam/easy_ham/01320.f1760dca874206f2189cd242da670499 new file mode 100644 index 000000000..8b1516228 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01320.f1760dca874206f2189cd242da670499 @@ -0,0 +1,91 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Aug 26 16:46:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8EFB743F9B + for ; Mon, 26 Aug 2002 11:46:43 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 16:46:43 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QFYmZ29979 for ; Mon, 26 Aug 2002 16:34:49 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jLsW-00028t-00; Mon, + 26 Aug 2002 08:34:08 -0700 +Received: from moon.campus.luth.se ([130.240.202.158]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17jLrz-0004I3-00 for + ; Mon, 26 Aug 2002 08:33:35 -0700 +Received: from moon.campus.luth.se (tony@moon.campus.luth.se + [130.240.202.158]) by moon.campus.luth.se (8.12.3/8.12.3) with ESMTP id + g7QFXLMg097715 for ; + Mon, 26 Aug 2002 17:33:21 +0200 (CEST) (envelope-from tony@svanstrom.com) +From: "Tony L. Svanstrom" +X-X-Sender: tony@moon.campus.luth.se +To: Spamassassin-talk@example.sourceforge.net +Message-Id: <20020826173313.T97541-100000@moon.campus.luth.se> +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Subject: [SAtalk] Version 1.1.11 of the DCC (fwd) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 17:33:21 +0200 (CEST) +Date: Mon, 26 Aug 2002 17:33:21 +0200 (CEST) + +---------- Forwarded message ---------- +From: Vernon Schryver +To: dcc@calcite.rhyolite.com +Date: Mon, 26 Aug 2002 09:09:05 -0600 (MDT) +Subject: Version 1.1.11 of the DCC + +ersion 1.1.11 of the DCC source is in +http://www.rhyolite.com/anti-spam/dcc/source/dccd.tar.Z and +http://www.dcc-servers.net/dcc/source/dccd.tar.Z + +http://www.rhyolite.com/anti-spam/dcc/dcc-tree/CHANGES and +http://www.dcc-servers.net/dcc/dcc-tree/CHANGES start with + + fix dccm bugs with handling a non-responsive server. + change misc/hackmc to modify sendmail.cf to reject unauthorized relay + attempts with a temporary failure when they are supposed to be sent + to the DCC but dccm is not running. This prevents leaking relay + relay spam. You must use the new hackmc script to install this + change in sendmail.cf. + remove "# whitelisted" from `cdcc stats` output to give more room + for totals. + prevent empty dccproc log files as noted by Krzysztof Snopek. + even fatal errors should cause dccproc to exit with 0 to avoid + rejecting mail, as noted by Krzysztof Snopek. + When server hostnames have common IP addresses, prefer the server + with the non-anonymous client-ID, noted by Krzysztof Snopek. + + +Vernon Schryver vjs@rhyolite.com +_______________________________________________ +DCC mailing list DCC@rhyolite.com +http://www.rhyolite.com/mailman/listinfo/dcc + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01321.837b8a696b13b820d154fcb1a0ef6465 b/Ch3/datasets/spam/easy_ham/01321.837b8a696b13b820d154fcb1a0ef6465 new file mode 100644 index 000000000..197cffe16 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01321.837b8a696b13b820d154fcb1a0ef6465 @@ -0,0 +1,99 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Aug 26 16:47:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7FFB144159 + for ; Mon, 26 Aug 2002 11:46:45 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 16:46:45 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QFYmZ29978 for ; Mon, 26 Aug 2002 16:34:49 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jLsS-00026y-00; Mon, + 26 Aug 2002 08:34:04 -0700 +Received: from tisch.mail.mindspring.net ([207.69.200.157]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17jLrj-0004FI-00 for ; + Mon, 26 Aug 2002 08:33:19 -0700 +Received: from user-105nd99.dialup.mindspring.com ([64.91.181.41] + helo=belphegore.hughes-family.org) by tisch.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17jLrg-0001cc-00; Mon, 26 Aug 2002 11:33:16 -0400 +Received: from balam.hughes-family.org (balam.hughes-family.org + [10.0.240.3]) by belphegore.hughes-family.org (Postfix) with ESMTP id + 6DD56A4D20; Mon, 26 Aug 2002 08:33:15 -0700 (PDT) +Subject: Re: Whitelisting (Re: [SAtalk] SA In The News) +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Cc: SpamAssassin Talk ML +To: Bart Schaefer +From: "Craig R.Hughes" +In-Reply-To: +Message-Id: <25C208FC-B909-11D6-9F1A-00039396ECF2@deersoft.com> +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.482) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 08:33:19 -0700 +Date: Mon, 26 Aug 2002 08:33:19 -0700 + +There is a whitelist RBL now! Ironport's Bonded Sender is +basically a whitelist RBL where you post a bond to get on the +list, and then lose the bond if you end up spamming from that IP +address (or something like that). http://www.bondedsender.org/ + +C + +On Sunday, August 25, 2002, at 07:58 PM, Bart Schaefer wrote: + +>> 4. DNSBL: Only certifies an ip address, not who is using it. As it is +>> currently used, DNSBL allows you to look up if some IP address +>> has been +>> blacklisted by someone. What I haven't seen is a service that +>> provides a +>> DNS based whitelist. +> +> There's a practical reason for that: Any DNS list (white or +> black) works +> only for a limited number of IPs; the set of unlisted IPs is +> much larger +> than the set in the DNS list. If you have to make a binary decision to +> accept or reject, you'll be wrong less often if you reject the +> blacklist +> and accept everything else, rather than accept the whitelist and reject +> everything else. +> +> A whitelist is only helpful when (a) you only want mail from a limited +> number of known sources, or (b) you can use a secondary system +> like SA to +> decide what to do with the vast unlisted masses. Most MTAs still make +> only the binary decision, because the secondary computation is +> expensive. +> +> With SA's cooperation, though, it might be worth a try. Even better if +> one could get commercial anti-spam outfits to agree to factor it in. + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01322.3fde258b3dda105ed24385384566c2e8 b/Ch3/datasets/spam/easy_ham/01322.3fde258b3dda105ed24385384566c2e8 new file mode 100644 index 000000000..6fe88053b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01322.3fde258b3dda105ed24385384566c2e8 @@ -0,0 +1,106 @@ +From spamassassin-devel-admin@lists.sourceforge.net Mon Aug 26 16:47:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E36A74415A + for ; Mon, 26 Aug 2002 11:46:47 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 16:46:47 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QFa2Z30094 for ; Mon, 26 Aug 2002 16:36:04 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jLtR-0002O9-00; Mon, + 26 Aug 2002 08:35:05 -0700 +Received: from www.ctyme.com ([209.237.228.10] helo=darwin.ctyme.com) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17jLt4-0005Pf-00 for + ; Mon, 26 Aug 2002 08:34:42 + -0700 +Received: from m206-56.dsl.tsoft.com ([198.144.206.56] helo=perkel.com) by + darwin.ctyme.com with asmtp (TLSv1:RC4-MD5:128) (Exim 3.35 #1) id + 17jLtd-0006g2-00; Mon, 26 Aug 2002 08:35:17 -0700 +Message-Id: <3D6A4A75.6070608@perkel.com> +From: Marc Perkel +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.1b) + Gecko/20020721 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Justin Mason , + SpamAssassin-devel@lists.sourceforge.net +Subject: Re: [SAdev] Re: several messages +References: <20020826150231.3DD4E43F99@phobos.labs.netnoteinc.com> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 08:34:13 -0700 +Date: Mon, 26 Aug 2002 08:34:13 -0700 + +Political news T R U T H O U T uses it too. + +Justin Mason wrote: +>>>> 0.978 0.540 1.184 0.31 -1.00 FWD_MSG +>>> +>>>I'm a bit surprised that any spams hit this one. Did somebody forward a +>>>spam that then went into a corpus? +>> +>>My corpus is quite clean and I get spam hits. +> +> +> yes, it's being frequently forged already. +> +> +>>>> 1.582 2.226 1.279 0.64 0.39 GAPPY_TEXT +>>> +>>>Gappy text in a non-spam? It must be a H E A D L I N E or something. +>>>Maybe just remove space from the list of "gap" characters? +>> +>>For 2.50, we could try to figure out which nonspams are hitting and +>>improve the rule. +> +> +> BTW I subscribe to the Media Unspun newsletter, and it and a few others +> regularly use that H E A D L I N E thing. +> +> splitting it into 2, one that matches gappy text with punctuation chars, +> one that matches spaces between the chars, would probably help. if +> anyone's bothered, I'd suggest filing a bug. +> +> --j. +> +> +> ------------------------------------------------------- +> This sf.net email is sponsored by: OSDN - Tired of that same old +> cell phone? Get a new here for FREE! +> https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +> _______________________________________________ +> Spamassassin-devel mailing list +> Spamassassin-devel@lists.sourceforge.net +> https://lists.sourceforge.net/lists/listinfo/spamassassin-devel +> + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01323.596c172d2be2aee1c7b688b043cce5be b/Ch3/datasets/spam/easy_ham/01323.596c172d2be2aee1c7b688b043cce5be new file mode 100644 index 000000000..87c257e80 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01323.596c172d2be2aee1c7b688b043cce5be @@ -0,0 +1,88 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Aug 26 16:47:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2D9704415B + for ; Mon, 26 Aug 2002 11:46:49 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 16:46:49 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QFl3Z31460 for ; Mon, 26 Aug 2002 16:47:03 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jM46-00065G-00; Mon, + 26 Aug 2002 08:46:06 -0700 +Received: from [212.2.188.179] (helo=mandark.labs.netnoteinc.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17jM3R-0002us-00 for ; + Mon, 26 Aug 2002 08:45:26 -0700 +Received: from phobos.labs.netnoteinc.com (phobos.labs.netnoteinc.com + [192.168.2.14]) by mandark.labs.netnoteinc.com (8.11.6/8.11.6) with ESMTP + id g7QFjJ500738; Mon, 26 Aug 2002 16:45:19 +0100 +Received: by phobos.labs.netnoteinc.com (Postfix, from userid 500) id + 2AD6043F99; Mon, 26 Aug 2002 11:43:19 -0400 (EDT) +Received: from phobos (localhost [127.0.0.1]) by + phobos.labs.netnoteinc.com (Postfix) with ESMTP id 258D733D8B; + Mon, 26 Aug 2002 16:43:19 +0100 (IST) +To: Luiz Felipe Ceglia +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] help with postfix + spamassassin +In-Reply-To: Message from Luiz Felipe Ceglia of + "Fri, 23 Aug 2002 15:15:06 -0300." + +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020826154319.2AD6043F99@phobos.labs.netnoteinc.com> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 16:43:14 +0100 +Date: Mon, 26 Aug 2002 16:43:14 +0100 + + +Luiz Felipe Ceglia said: + +> :0fw +> | /usr/bin/spamassassin -c +> /etc/mail/spamassassin/rules + +are you using exactly that -- with the line break -- or is it like this: + + :0fw + | /usr/bin/spamassassin -c /etc/mail/spamassassin/rules + +all on one line? it should be the latter. + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01324.277cb41dbcbdb083741a66b0c0900cf6 b/Ch3/datasets/spam/easy_ham/01324.277cb41dbcbdb083741a66b0c0900cf6 new file mode 100644 index 000000000..a1d0d1246 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01324.277cb41dbcbdb083741a66b0c0900cf6 @@ -0,0 +1,103 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Aug 26 16:47:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3D4894415C + for ; Mon, 26 Aug 2002 11:46:50 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 16:46:50 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QFm0Z31475 for ; Mon, 26 Aug 2002 16:48:00 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jM51-0006HM-00; Mon, + 26 Aug 2002 08:47:03 -0700 +Received: from mail.mike-leone.com ([216.158.26.254]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17jM3x-000380-00 for ; + Mon, 26 Aug 2002 08:45:57 -0700 +Received: from localhost (localhost [127.0.0.1]) by mail.mike-leone.com + (Postfix) with ESMTP id E8DAB1D83 for + ; Mon, 26 Aug 2002 11:43:33 -0400 + (EDT) +Received: from mail.mike-leone.com ([127.0.0.1]) by localhost + (mail.mike-leone.com [127.0.0.1]) (amavisd-new) with SMTP id 09089-01 for + ; Mon, 26 Aug 2002 11:43:29 -0000 + (EDT) +Received: from mike-leone.com (localhost [127.0.0.1]) by + mail.mike-leone.com (Postfix) with ESMTP id AF7D61D4C for + ; Mon, 26 Aug 2002 11:43:28 -0400 + (EDT) +Received: from 208.171.240.67 (SquirrelMail authenticated user turgon) by + www.mike-leone.com with HTTP; Mon, 26 Aug 2002 11:43:28 -0400 (EDT) +Message-Id: <65385.208.171.240.67.1030376608.squirrel@www.mike-leone.com> +Subject: Re: [SAtalk] Re: Other uses for SA? +From: "Michael Leone" +To: +In-Reply-To: +References: + +X-Priority: 3 +Importance: Normal +X-Msmail-Priority: Normal +X-Mailer: SquirrelMail (version 1.2.7) +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit +X-Virus-Scanned: by amavisd-new (amavisd-new-20020630) +X-Razor-Id: 7c5a099d13e788787898dee16cf30a6843ace4c9 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 11:43:28 -0400 (EDT) +Date: Mon, 26 Aug 2002 11:43:28 -0400 (EDT) + + +Brian R. Melcer said: +>> I've got spamassassin installed and tested on MacOS X 10.1.5, +>> although there are issues with spamd still. So in addition to +>> looking for new and different uses for SA, I'd like to hear +>> from folks using it under MacOS X. +> +> I just recently converted our SA setup to use Amavisd into our Postfix + +Amavisd or Amavisd-new? If the latter, you don't need spamd running, since +amavisd-new calls SA functions directly. + +-- +PGP Fingerprint: 0AA8 DC47 CB63 AE3F C739 6BF9 9AB4 1EF6 5AA5 BCDF +Member, LEAF Project AIM: MikeLeone +Public Key - + +Some days you're the pigeon; some days you're the statue. + + + + +Random Thought: +-------------- + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01325.a0795ecac90cad480868674cfe180695 b/Ch3/datasets/spam/easy_ham/01325.a0795ecac90cad480868674cfe180695 new file mode 100644 index 000000000..a0cc1eb84 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01325.a0795ecac90cad480868674cfe180695 @@ -0,0 +1,77 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Aug 26 16:57:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B491743F99 + for ; Mon, 26 Aug 2002 11:57:04 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 16:57:04 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QFopZ31540 for ; Mon, 26 Aug 2002 16:50:51 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jM71-0006j9-00; Mon, + 26 Aug 2002 08:49:07 -0700 +Received: from adsl-209-204-188-196.sonic.net ([209.204.188.196] + helo=sidebone.sidney.com) by usw-sf-list1.sourceforge.net with esmtp + (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17jM6Y-0003PI-00 for ; + Mon, 26 Aug 2002 08:48:38 -0700 +Received: from siddhi (siddhi.sidney.com [192.168.93.20]) by + sidebone.sidney.com (8.12.5/8.12.5) with SMTP id g7QFmVCp013874 for + ; Mon, 26 Aug 2002 08:48:31 -0700 +Message-Id: <009901c24d18$0777a2b0$145da8c0@sidney.com> +From: "Sidney Markowitz" +To: +References: + +Subject: Re: [SAtalk] 2.40 RELEASE: oops -- newer freqs. +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Scanned-BY: MIMEDefang 2.19 (www . roaringpenguin . com / mimedefang) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 08:48:31 -0700 +Date: Mon, 26 Aug 2002 08:48:31 -0700 + +Daniel Quinlan wrote: +> Exactly, except that I think you may be too optimistic +> about the reporting, the timeframe, and the accuracy. + +That's another argument for a "HLL" (Habeas Licensee List) which would be less +inclusive than a test for the mark of for HIL, but more timely and accurate. When an +ip address is on the HLL it could get a huge negative score, bigger than the Habeas +mark alone. + + -- sidney + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01326.d8a709dac6b1c32aa355f0556350b4ab b/Ch3/datasets/spam/easy_ham/01326.d8a709dac6b1c32aa355f0556350b4ab new file mode 100644 index 000000000..e6a7500ef --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01326.d8a709dac6b1c32aa355f0556350b4ab @@ -0,0 +1,97 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Aug 26 16:57:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B5CBF44157 + for ; Mon, 26 Aug 2002 11:57:05 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 16:57:05 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QFoqZ31545 for ; Mon, 26 Aug 2002 16:50:52 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jM70-0006iM-00; Mon, + 26 Aug 2002 08:49:06 -0700 +Received: from [212.2.188.179] (helo=mandark.labs.netnoteinc.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17jM6V-0003PE-00 for ; + Mon, 26 Aug 2002 08:48:36 -0700 +Received: from phobos.labs.netnoteinc.com (phobos.labs.netnoteinc.com + [192.168.2.14]) by mandark.labs.netnoteinc.com (8.11.6/8.11.6) with ESMTP + id g7QFmQ500742; Mon, 26 Aug 2002 16:48:26 +0100 +Received: by phobos.labs.netnoteinc.com (Postfix, from userid 500) id + 542CD43F99; Mon, 26 Aug 2002 11:46:26 -0400 (EDT) +Received: from phobos (localhost [127.0.0.1]) by + phobos.labs.netnoteinc.com (Postfix) with ESMTP id 4C96933D8B; + Mon, 26 Aug 2002 16:46:26 +0100 (IST) +To: "Craig R.Hughes" +Cc: Bart Schaefer , + spamassassin-talk@lists.sourceforge.net +Subject: Re: [SAtalk] 2.40 RELEASE: oops -- newer freqs. +In-Reply-To: Message from + "Craig R.Hughes" + of + "Mon, 26 Aug 2002 08:31:03 PDT." + +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020826154626.542CD43F99@phobos.labs.netnoteinc.com> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 16:46:21 +0100 +Date: Mon, 26 Aug 2002 16:46:21 +0100 + + +"Craig R.Hughes" said: + +> The GA run on the current corpus is yielding an average (mean) +> score for false-positives of about 10 points, which is higher +> than before. There's some tweaking to be done yet (rule +> elimination and such), so that will likely fall, but -15 might +> not be enough of a correction in many situations. I will set +> the scores for the Habeas stuff and the Ironport stuff to be +> sensible given: +> +> a) estimated likeliness of compliance with Habeas/Bonded sender +> rules, and +> b) score correction level needed to achieve purposes of those projects. + +Using the score-ranges stuff and my aggressive anti-FP evaluation code, +BTW, yielded an average FP of 5.7 points, with 0.67% FPs and 96.57% +overall accuracy -- but I notice you went back to the other method. +Just pointing this out ;) + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01327.1fa998a9866210caed63b142b5b44156 b/Ch3/datasets/spam/easy_ham/01327.1fa998a9866210caed63b142b5b44156 new file mode 100644 index 000000000..d9cd4028c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01327.1fa998a9866210caed63b142b5b44156 @@ -0,0 +1,86 @@ +From spamassassin-devel-admin@lists.sourceforge.net Mon Aug 26 18:01:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3581544155 + for ; Mon, 26 Aug 2002 13:01:19 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 18:01:19 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QGqbZ01326 for ; Mon, 26 Aug 2002 17:52:37 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jN4z-0003Tk-00; Mon, + 26 Aug 2002 09:51:05 -0700 +Received: from moon.campus.luth.se ([130.240.202.158]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17jN4q-00078h-00 for + ; Mon, 26 Aug 2002 09:50:57 + -0700 +Received: from moon.campus.luth.se (tony@moon.campus.luth.se + [130.240.202.158]) by moon.campus.luth.se (8.12.3/8.12.3) with ESMTP id + g7QGocMg098330; Mon, 26 Aug 2002 18:50:38 +0200 (CEST) (envelope-from + tony@svanstrom.com) +From: "Tony L. Svanstrom" +X-X-Sender: tony@moon.campus.luth.se +To: bugzilla-daemon@hughes-family.org +Cc: spamassassin-devel@example.sourceforge.net +Subject: Re: [SAdev] [Bug 735] spamassassin -t lies +In-Reply-To: <20020826163323.6940CA4D25@belphegore.hughes-family.org> +Message-Id: <20020826184926.B97541-100000@moon.campus.luth.se> +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 18:50:38 +0200 (CEST) +Date: Mon, 26 Aug 2002 18:50:38 +0200 (CEST) + +On Mon, 26 Aug 2002 the voices made bugzilla-daemon@hughes-family.org write: + +> http://www.hughes-family.org/bugzilla/show_bug.cgi?id=735 + +> ------- Additional Comments From br+spamassassin@panix.com 2002-08-26 09:33 ------- +> Just because it's documented doesn't mean it's a good thing. +> +> I work for an ISP. We provide SpamAssassin to our customers. I got email +> today from a support tech saying that "spamassassin -t" reports that a +> message is probably spam even when it's not, and why is this, and can we +> change it? I thought about why it is, and the only answer I could come up +> with was, "it was easier for the programmer that way". That's an answer, I +> guess, but her point was that this is going to generate support calls, and +> support calls cost us time and money. + + Why would a customer use `spamassassin -t` without understanding what it does? + + + /Tony +-- +# Per scientiam ad libertatem! // Through knowledge towards freedom! # +# Genom kunskap mot frihet! =*= (c) 1999-2002 tony@svanstrom.com =*= # + + perl -e'print$_{$_} for sort%_=`lynx -dump svanstrom.com/t`' + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01328.d0911b225327299d50bc7c7f2284afdf b/Ch3/datasets/spam/easy_ham/01328.d0911b225327299d50bc7c7f2284afdf new file mode 100644 index 000000000..372eb39f0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01328.d0911b225327299d50bc7c7f2284afdf @@ -0,0 +1,76 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Aug 26 18:01:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 037BD44157 + for ; Mon, 26 Aug 2002 13:01:23 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 18:01:23 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QGroZ01354 for ; Mon, 26 Aug 2002 17:53:50 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jN6t-00043a-00; Mon, + 26 Aug 2002 09:53:03 -0700 +Received: from moon.campus.luth.se ([130.240.202.158]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17jN5x-0008MY-00 for + ; Mon, 26 Aug 2002 09:52:05 -0700 +Received: from moon.campus.luth.se (tony@moon.campus.luth.se + [130.240.202.158]) by moon.campus.luth.se (8.12.3/8.12.3) with ESMTP id + g7QGppMg098356; Mon, 26 Aug 2002 18:51:51 +0200 (CEST) (envelope-from + tony@svanstrom.com) +From: "Tony L. Svanstrom" +X-X-Sender: tony@moon.campus.luth.se +To: CertaintyTech +Cc: satalk +Subject: Re: [SAtalk] From: and To: are my address +In-Reply-To: <003501c24d1c$25a83980$6400a8c0@pnt004> +Message-Id: <20020826185114.J97541-100000@moon.campus.luth.se> +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 18:51:51 +0200 (CEST) +Date: Mon, 26 Aug 2002 18:51:51 +0200 (CEST) + +On Mon, 26 Aug 2002 the voices made CertaintyTech write: + +> Recently I have been receiving Spam where both the From: and To: address are +> set to my address therefore getting thru due to AWL. Any suggestions on +> this one? I could turn off AWL but it does have advantages. BTW, I use a +> site-wide AWL. + + Use cron to remove your address from the AWL daily...?! + + /Tony +-- +# Per scientiam ad libertatem! // Through knowledge towards freedom! # +# Genom kunskap mot frihet! =*= (c) 1999-2002 tony@svanstrom.com =*= # + + perl -e'print$_{$_} for sort%_=`lynx -dump svanstrom.com/t`' + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01329.19b80c37a933da3531c62ce091e7447c b/Ch3/datasets/spam/easy_ham/01329.19b80c37a933da3531c62ce091e7447c new file mode 100644 index 000000000..490bb1b57 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01329.19b80c37a933da3531c62ce091e7447c @@ -0,0 +1,57 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Aug 26 19:13:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 529E143F9B + for ; Mon, 26 Aug 2002 14:13:51 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 19:13:51 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QICYZ04038 for ; Mon, 26 Aug 2002 19:12:34 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jOKR-00015W-00; Mon, + 26 Aug 2002 11:11:07 -0700 +Received: from [62.242.231.193] (helo=pdcwexoe.wexoe.dk) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17jOKG-0008J8-00 for ; + Mon, 26 Aug 2002 11:10:56 -0700 +Received: by PDCWEXOE with Internet Mail Service (5.5.2653.19) id + ; Mon, 26 Aug 2002 20:11:00 +0200 +Message-Id: <196A8818B3B5D611AC8D0008024505DB14A8@PDCWEXOE> +From: admin +To: Spamassassin-talk@example.sourceforge.net +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Subject: [SAtalk] Test spam +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 20:11:00 +0200 +Date: Mon, 26 Aug 2002 20:11:00 +0200 + +Hi, does anyone have a collection of real-world-spam, that I could use to +test my setup? + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01330.765b68f74cf98c8f9cca11999799c206 b/Ch3/datasets/spam/easy_ham/01330.765b68f74cf98c8f9cca11999799c206 new file mode 100644 index 000000000..d65ab1e0b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01330.765b68f74cf98c8f9cca11999799c206 @@ -0,0 +1,87 @@ +From spamassassin-commits-admin@lists.sourceforge.net Tue Aug 27 10:36:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 81BB643F9B + for ; Tue, 27 Aug 2002 05:35:57 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 10:35:57 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7R9VsZ01596 for ; Tue, 27 Aug 2002 10:31:54 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jchf-0006n9-00; Tue, + 27 Aug 2002 02:32:03 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17jchB-00045l-00 for ; + Tue, 27 Aug 2002 02:31:33 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17jchA-0005L6-00 for + ; Tue, 27 Aug 2002 02:31:32 + -0700 +Received: from msquadrat by usw-pr-cvs1.sourceforge.net with local (Exim + 3.22 #1 (Debian)) id 17jch9-00063J-00 for + ; Tue, 27 Aug 2002 02:31:31 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: "Malte S. Stretz" +Subject: [SACVS] CVS: spamassassin/debian spamassassin.README.Debian,1.1,1.2 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 27 Aug 2002 02:31:31 -0700 +Date: Tue, 27 Aug 2002 02:31:31 -0700 + +Update of /cvsroot/spamassassin/spamassassin/debian +In directory usw-pr-cvs1:/tmp/cvs-serv23243/debian + +Modified Files: + spamassassin.README.Debian +Log Message: +removed -P + +Index: spamassassin.README.Debian +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/debian/spamassassin.README.Debian,v +retrieving revision 1.1 +retrieving revision 1.2 +diff -b -w -u -d -r1.1 -r1.2 +--- spamassassin.README.Debian 21 Jun 2002 02:46:50 -0000 1.1 ++++ spamassassin.README.Debian 27 Aug 2002 09:31:29 -0000 1.2 +@@ -2,7 +2,7 @@ + you wish to use spamd (the Daemon version of spamassassin), please edit + /etc/default/spamassassin. + +-'spamc' is equivalent to 'spamassassin -P' and you should use it instead if ++'spamc' is equivalent to 'spamassassin' and you should use it instead if + (and only if) you enabled 'spamd' (and you've installed the spamc package) + + To add rules, change scores, edit the template, edit + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + diff --git a/Ch3/datasets/spam/easy_ham/01331.4c2d95f57be99f72685e0baff1d32450 b/Ch3/datasets/spam/easy_ham/01331.4c2d95f57be99f72685e0baff1d32450 new file mode 100644 index 000000000..8dfd18727 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01331.4c2d95f57be99f72685e0baff1d32450 @@ -0,0 +1,72 @@ +From spamassassin-talk-admin@lists.sourceforge.net Tue Aug 27 17:34:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2BD7243F99 + for ; Tue, 27 Aug 2002 12:34:50 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 17:34:50 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7RGY2Z16880 for ; Tue, 27 Aug 2002 17:34:02 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jjHB-0005VG-00; Tue, + 27 Aug 2002 09:33:09 -0700 +Received: from sccrmhc01.attbi.com ([204.127.202.61]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17jjH1-0003Lw-00 for ; + Tue, 27 Aug 2002 09:33:00 -0700 +Received: from localhost ([12.229.66.144]) by sccrmhc01.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020827163251.TXZR11061.sccrmhc01.attbi.com@localhost> for + ; Tue, 27 Aug 2002 16:32:51 +0000 +Subject: Re: [SAtalk] where can I find the Habeas patent (application)? +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +From: Brian McNett +To: spamassassin-talk@example.sourceforge.net +Content-Transfer-Encoding: 7bit +In-Reply-To: <20020827144927.C4830-100000@moon.campus.luth.se> +Message-Id: <954123A6-B9DA-11D6-AD60-003065C182B0@radparker.com> +X-Mailer: Apple Mail (2.482) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 27 Aug 2002 09:32:31 -0700 +Date: Tue, 27 Aug 2002 09:32:31 -0700 + + +On Tuesday, August 27, 2002, at 06:03 AM, Tony L. Svanstrom wrote: + +> Where can I find it, I was searching online without any luck... =( + +You can't, because there isn't one, yet. Habeas is using a +combination of copyright and trademark law to protect their +sender warranties. They hope to patent the system, but they +have not been ISSUED a patent. + +--B + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01332.04432fe71e50fbd52f3d8811c1704df6 b/Ch3/datasets/spam/easy_ham/01332.04432fe71e50fbd52f3d8811c1704df6 new file mode 100644 index 000000000..d7bd35a04 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01332.04432fe71e50fbd52f3d8811c1704df6 @@ -0,0 +1,81 @@ +From spamassassin-talk-admin@lists.sourceforge.net Tue Aug 27 17:34:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8689D44155 + for ; Tue, 27 Aug 2002 12:34:51 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 27 Aug 2002 17:34:51 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7RGYLZ16888 for ; Tue, 27 Aug 2002 17:34:21 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jjGE-0004va-00; Tue, + 27 Aug 2002 09:32:10 -0700 +Received: from moon.campus.luth.se ([130.240.202.158]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17jjFg-0003AV-00 for + ; Tue, 27 Aug 2002 09:31:36 -0700 +Received: from moon.campus.luth.se (tony@moon.campus.luth.se + [130.240.202.158]) by moon.campus.luth.se (8.12.3/8.12.3) with ESMTP id + g7RGV2Mg007050; Tue, 27 Aug 2002 18:31:02 +0200 (CEST) (envelope-from + tony@svanstrom.com) +From: "Tony L. Svanstrom" +X-X-Sender: tony@moon.campus.luth.se +To: Matt Sergeant +Cc: "Craig R.Hughes" , + "Malte S. Stretz" , + +Subject: MacOS X (Re: [SAtalk] [OT] Habeas-talk (was: 2.40 RELEASE: oops + -- newer freqs.)) +In-Reply-To: <3D6B9BFD.9040307@startechgroup.co.uk> +Message-Id: <20020827182710.A6871-100000@moon.campus.luth.se> +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 27 Aug 2002 18:31:02 +0200 (CEST) +Date: Tue, 27 Aug 2002 18:31:02 +0200 (CEST) + +On Tue, 27 Aug 2002 the voices made Matt Sergeant write: + +> I've got 6C115 (I think) the current developer release (though not the same +> as gold). + + The only difference AFAIK is the path to a single helpfile, which we don't use +anyways, right? *G* + + + /Tony +PS I also have a problem with that stupid helpprogram crasching whenever I +search for "windows"; not sure if that's a feature or not. =) +-- +# Per scientiam ad libertatem! // Through knowledge towards freedom! # +# Genom kunskap mot frihet! =*= (c) 1999-2002 tony@svanstrom.com =*= # + + perl -e'print$_{$_} for sort%_=`lynx -dump svanstrom.com/t`' + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01333.fa9c7de34b2a881a69cf649a6a89b15c b/Ch3/datasets/spam/easy_ham/01333.fa9c7de34b2a881a69cf649a6a89b15c new file mode 100644 index 000000000..0da788ff4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01333.fa9c7de34b2a881a69cf649a6a89b15c @@ -0,0 +1,56 @@ +From jason-exp-1031164464.7f11b3@mastaler.com Wed Aug 28 10:44:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2D36643F99 + for ; Wed, 28 Aug 2002 05:44:12 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:44:12 +0100 (IST) +Received: from sclp3.sclp.com (qmailr@sclp3.sclp.com [209.196.61.66]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7RIYRZ20977 for + ; Tue, 27 Aug 2002 19:34:27 +0100 +Received: (qmail 17779 invoked from network); 27 Aug 2002 18:34:35 -0000 +Received: from localhost (HELO hrothgar.la.mastaler.com) (jason@127.0.0.1) + by localhost with SMTP; 27 Aug 2002 18:34:35 -0000 +Received: (qmail 85116 invoked by uid 666); 27 Aug 2002 18:34:24 -0000 +Mail-Followup-To: spamassassin-talk@example.sourceforge.net, + tmda-users@tmda.net, jm@jmason.org +To: yyyy@spamassassin.taint.org (Justin Mason) +Cc: spamassassin-talk@example.sourceforge.net, tmda-users@tmda.net +Subject: Re: patent on TMDA-like system +References: <20020827144541.3236B43F99@phobos.labs.netnoteinc.com> +Mail-Copies-To: never +X-Face: #JN"K)p-Mky0,q4z-q'nx@2'jKW&-H6Zd#yI{`^`.V[o.>Y\p0-^3n$@'_py$QXPq'}cwKS + Rox9%`#q><8pXIR[yl\O%Dt!2"IO!ky$:F'{Q'%,6@;VRJPQ6UNLQ_8/'_+p4/Kft6 + t=LIV%py%Z=Y6>c)p6>}>UV!)'hy(?U&#+v@68]f,COd8\sjfnl9y(BP1:^28|)QEr*LN/t{2%=1`h + 9\lX,WxIjiCQ<3c7:>5!XIM7owXdaI:6SO`T2h^T,,Lq{8P=2]}4n3ZiT<@!9`j$R|wM52S+|DAj +Date: Tue, 27 Aug 2002 12:34:23 -0600 +In-Reply-To: <20020827144541.3236B43F99@phobos.labs.netnoteinc.com> + (jm@jmason.org's message of + "Tue, 27 Aug 2002 15:45:36 +0100") +Message-Id: +User-Agent: Gnus/5.090008 (Oort Gnus v0.08) XEmacs/21.4 (Informed + Management, i386-unknown-freebsd4.6) +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +From: "Jason R. Mastaler" +X-Delivery-Agent: TMDA/0.61 + +jm@jmason.org (Justin Mason) writes: + +> Sounds a lot like TMDA to me. :( Filing date is July 26, 2001, +> granted May 16, 2002. +> +> TMDAers, have you seen this before? + +No, but thanks for pointing it out. + +> I'd presume TMDA is prior art, but still, it could be troublesome... + +Yup. TMDA's core functionality was fully established before even the +filing date. + +Anyone with experience in this area have a recommendation on whether +this should be pursued or not? + diff --git a/Ch3/datasets/spam/easy_ham/01334.03de0c9d7098f5546c8b95ba9bba0265 b/Ch3/datasets/spam/easy_ham/01334.03de0c9d7098f5546c8b95ba9bba0265 new file mode 100644 index 000000000..09648bf1b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01334.03de0c9d7098f5546c8b95ba9bba0265 @@ -0,0 +1,42 @@ +From quinlan@pathname.com Wed Aug 28 10:45:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 00F6F4415B + for ; Wed, 28 Aug 2002 05:44:48 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:44:48 +0100 (IST) +Received: from proton.pathname.com + (adsl-216-103-211-240.dsl.snfc21.pacbell.net [216.103.211.240]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7RLjPZ27063 for + ; Tue, 27 Aug 2002 22:45:25 +0100 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17jo9X-00072t-00; Tue, 27 Aug 2002 14:45:35 -0700 +To: yyyy@spamassassin.taint.org (Justin Mason) +Cc: Matt Sergeant , + spamassassin-devel@lists.sourceforge.net +Subject: Re: [SAdev] SpamAssassin POP3 proxy +References: <20020827121720.1A37C43F99@phobos.labs.netnoteinc.com> +From: Daniel Quinlan +Date: 27 Aug 2002 14:45:35 -0700 +In-Reply-To: yyyy@spamassassin.taint.org's message of "Tue, 27 Aug 2002 13:17:15 +0100" +Message-Id: +X-Mailer: Gnus v5.7/Emacs 20.7 + +jm@jmason.org (Justin Mason) writes: + +> Actually, I want to avoid that -- I've already removed spamproxyd +> from the distro for 2.40. Here's why: +> +> When they're in the distro, *we* have to support them -- which is +> not necessarily a good thing when we didn't write them in the first +> place, or when the coder in question may not *want* us to maintain +> them. :( + +I would be in favor of creating new SpamAssassin CVS modules and +Bugzilla categories for other clients (provided there is sufficient +interest and a maintainer). + +Dan + diff --git a/Ch3/datasets/spam/easy_ham/01335.7ea8fb1b5cbb5f10d5e59ce2dffbe2d6 b/Ch3/datasets/spam/easy_ham/01335.7ea8fb1b5cbb5f10d5e59ce2dffbe2d6 new file mode 100644 index 000000000..c11a1f61c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01335.7ea8fb1b5cbb5f10d5e59ce2dffbe2d6 @@ -0,0 +1,45 @@ +From jm@jmason.org Wed Aug 28 10:45:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BA90F44156 + for ; Wed, 28 Aug 2002 05:45:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:45:28 +0100 (IST) +Received: (from apache@localhost) by dogma.slashnull.org (8.11.6/8.11.6) + id g7RNBat30404; Wed, 28 Aug 2002 00:11:36 +0100 +X-Authentication-Warning: dogma.slashnull.org: apache set sender to + jmmail@jmason.org using -f +Received: from 194.125.220.138 (SquirrelMail authenticated user yyyymail) by + jmason.org with HTTP; Wed, 28 Aug 2002 00:11:36 +0100 (IST) +Message-Id: <33038.194.125.220.138.1030489896.squirrel@spamassassin.taint.org> +Date: Wed, 28 Aug 2002 00:11:36 +0100 (IST) +Subject: Re: [SAdev] SpamAssassin POP3 proxy +From: "Justin Mason" +To: quinlan@pathname.com +In-Reply-To: +References: +Cc: yyyy@spamassassin.taint.org, msergeant@startechgroup.co.uk, + spamassassin-devel@lists.sourceforge.net +X-Mailer: SquirrelMail (version 1.0.6) +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit + + +> I would be in favor of creating new SpamAssassin CVS modules and +> Bugzilla categories for other clients (provided there is sufficient +> interest and a maintainer). + +yeah, I'd be with that -- as long as they have a maintainer ;) + +however regarding CVS, I'd say many projects might find it easier +to just sign up as a new proj with sf.net -- it might save them having +to go through us (not sure, depends on what sf.net's procedures +are like). + +--j. + + + diff --git a/Ch3/datasets/spam/easy_ham/01336.82adb611b4bea7ae97c57911d3152cee b/Ch3/datasets/spam/easy_ham/01336.82adb611b4bea7ae97c57911d3152cee new file mode 100644 index 000000000..a43d81d0c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01336.82adb611b4bea7ae97c57911d3152cee @@ -0,0 +1,77 @@ +From felicity@kluge.net Wed Aug 28 10:46:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B23AB4415D + for ; Wed, 28 Aug 2002 05:45:41 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:45:41 +0100 (IST) +Received: from eclectic.kluge.net + (IDENT:8D4+93loqH1uP9+nnpXx+6aPzB2y7pYQ@eclectic.kluge.net [66.92.69.221]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7S1aCZ06126 for + ; Wed, 28 Aug 2002 02:36:12 +0100 +Received: (from felicity@localhost) by eclectic.kluge.net (8.11.6/8.11.6) + id g7S1aMk07018; Tue, 27 Aug 2002 21:36:22 -0400 +Date: Tue, 27 Aug 2002 21:36:22 -0400 +From: Theo Van Dinter +To: Justin Mason +Cc: mark@mlucas.net, spamassassin-talk@example.sourceforge.net +Subject: Re: FAQ: taint warnings from SA in /etc/procmailrc +Message-Id: <20020828013622.GD30677@kluge.net> +References: <20020827224738.GA30677@kluge.net> + <33052.194.125.220.138.1030490064.squirrel@jmason.org> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="wLAMOaPNJ0fu1fTG" +Content-Disposition: inline +In-Reply-To: <33052.194.125.220.138.1030490064.squirrel@spamassassin.taint.org> +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 + + +--wLAMOaPNJ0fu1fTG +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Wed, Aug 28, 2002 at 12:14:24AM +0100, Justin Mason wrote: +> actually, I think procmail supports this directly. use DROPPRIVS=3Dyes +> at the top of the /etc/procmailrc. + +Hey, look at that! + + DROPPRIVS If set to `yes' procmail will drop all privileges + it might have had (suid or sgid). This is only + useful if you want to guarantee that the bottom half + of the /etc/procmailrc file is executed on behalf + of the recipient. + +Of course, removing setuid/gid bits on programs that don't need it is +always a good idea. A general rule of system administration: don't give +out permissions unless you absolutely need to. ;) + +--=20 +Randomly Generated Tagline: +"The cardinal rule at our school is simple. No shooting at teachers. If + you have to shoot a gun, shoot it at a student or an administrator." + - "Word Smart II", from Princeton Review Pub. + +--wLAMOaPNJ0fu1fTG +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9bCkWAuOQUeWAs2MRAr+iAJ9cVLx61vWsC5KFDLYv9/T7FaZmxACgzUpC +f235rrVr6cI8LvPC+IeIss0= +=BsCM +-----END PGP SIGNATURE----- + +--wLAMOaPNJ0fu1fTG-- + diff --git a/Ch3/datasets/spam/easy_ham/01337.e515b1d01d6d98606d994b1c8901904c b/Ch3/datasets/spam/easy_ham/01337.e515b1d01d6d98606d994b1c8901904c new file mode 100644 index 000000000..83d9584ec --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01337.e515b1d01d6d98606d994b1c8901904c @@ -0,0 +1,86 @@ +From rlfrank@paradigm-omega.com Wed Aug 28 10:46:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7DAEE44158 + for ; Wed, 28 Aug 2002 05:46:04 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:46:04 +0100 (IST) +Received: from commander (168-215-122-205.gen.twtelecom.net + [168.215.122.205]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7S3irZ09415 for ; Wed, 28 Aug 2002 04:44:53 +0100 +Received: from 65.91.218.127 [65.91.218.127] by commander with SMTPBeamer + v3.30 ; Tue, 27 Aug 2002 23:33:47 -0400 +Received: from omega.paradigm-omega.net (localhost.localdomain + [127.0.0.1]) by omega.paradigm-omega.net (Postfix) with ESMTP id + 3E3E04C288 for ; Tue, 27 Aug 2002 20:44:34 -0700 (PDT) +Content-Type: text/plain; charset="iso-8859-1" +Organization: Paradigm-Omega, LLC +To: yyyy@spamassassin.taint.org (Justin Mason), + SpamAssassin-talk@lists.sourceforge.net +Subject: Re: patent on TMDA-like system +Date: Tue, 27 Aug 2002 20:43:59 -0700 +X-Mailer: KMail [version 1.3.1] +Cc: tmda-users@tmda.net +References: <20020827144541.3236B43F99@phobos.labs.netnoteinc.com> +In-Reply-To: <20020827144541.3236B43F99@phobos.labs.netnoteinc.com> +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +From: Robin Lynn Frank +Message-Id: <1030506273.18567.TMDA@omega.paradigm-omega.net> +X-Delivery-Agent: TMDA/0.61 +Reply-To: Robin Lynn Frank + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +On Tuesday 27 August 2002 07:45 am, Justin Mason wrote: +> Tony Svanstrom, on SpamAssassin-talk, noted this US patent: +> +> http://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&u=/netah +>tml/PTO/search-adv.html&r=62&f=G&l=50&d=PG01&s1=spam&p=2&OS=haiku&RS=spam +> +> Method of anti-spam +> +> Abstract +> +> A method of anti-spam is to set an optional trustcode, or a trustlist, or +> at least a trustweb based on online mail delivery at a recipient's e-mail +> address. A mail sender is compelled at the first time to deliver a mail +> by way of: taking the way of "Visiting trustweb and sending online", or +> enclosing the recipient's trustcode in the mail and sending in another way +> other than the mentioned. After the sender's e-mail address has been stored +> automatically in the recipient's trustlist, the sender may send mails to +> the same recipient in whatever the ways feasible. +> +> +> Sounds a lot like TMDA to me. :( Filing date is July 26, 2001, granted +> May 16, 2002. +> +> TMDAers, have you seen this before? I'd presume TMDA is prior art, but +> still, it could be troublesome... +> +> +I took a bit of time to review what is on the above URL. If I were a news +editor, the headline would be: + +"Inventor" from country that ignores patents and copyrights, seeks patent for +inventing the wheel! +- -- +- ------------------------------------------------------------------------ +Robin Lynn Frank---Director of Operations---Paradigm, Omega, LLC +http://paradigm-omega.com http://paradigm-omega.net +© 2002. All rights reserved. No duplication/dissemination permitted. +Use of PGP/GPG encrypted mail preferred. No HTML/attachments accepted. +Fingerprint: 08E0 567C 63CC 5642 DB6D D490 0F98 D7D3 77EA 3714 +Key Server: http://paradigm-omega.com/keymaster.html +- ------------------------------------------------------------------------ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (GNU/Linux) + +iD8DBQE9bEcKD5jX03fqNxQRAmTfAKDM6BDsePbg8fb9Ore0XuS5jB4t1wCfbTcw +/PBXqXO7Pei1f9lIj4gd0/c= +=PNJx +-----END PGP SIGNATURE----- + diff --git a/Ch3/datasets/spam/easy_ham/01338.d83fecb2046120fc72d0bb23c150ec4f b/Ch3/datasets/spam/easy_ham/01338.d83fecb2046120fc72d0bb23c150ec4f new file mode 100644 index 000000000..ff88fb154 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01338.d83fecb2046120fc72d0bb23c150ec4f @@ -0,0 +1,104 @@ +From brian@unearthed.com Wed Aug 28 10:56:21 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0C9E044156 + for ; Wed, 28 Aug 2002 05:56:15 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:56:15 +0100 (IST) +Received: from mx-out.daemonmail.net (mx-out.daemonmail.net + [216.104.160.37]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7RIteZ21552 for ; Tue, 27 Aug 2002 19:55:41 +0100 +Received: from mx0.emailqueue.net (localhost.daemonmail.net [127.0.0.1]) + by mx-out.daemonmail.net (8.9.3/8.9.3) with SMTP id LAA11209; + Tue, 27 Aug 2002 11:55:49 -0700 (PDT) (envelope-from brian@unearthed.com) +Received: from brianmay (brianmay [64.52.135.194]) by mail.unearthed.com + with ESMTP id bu207z82 Tue, 27 Aug 2002 11:55:48 -0700 (PDT) +Message-Id: <001101c24dfb$61b7a2f0$8801020a@brianmay> +From: "Brian May" +To: "Justin Mason" , + "Jason R. Mastaler" +Cc: , +References: <20020827144541.3236B43F99@phobos.labs.netnoteinc.com> + +Subject: Re: [SAtalk] Re: patent on TMDA-like system +Date: Tue, 27 Aug 2002 11:55:58 -0700 +Organization: UnEarthed.Com +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 + +>>From tmda.net/history.html: + +The first release of TMDA in April 2001 was essentially a rewrite of TMS in +Python, + +April 2001 is earlier than July 26, 2001... prior art.. + +from http://tmda.net/releases/old/ + Parent Directory 19-Aug-2002 16:14 - + README.MD5SUM 19-Aug-2002 16:14 4k + tmda-0.01.tgz 22-Apr-2001 15:59 11k + tmda-0.02.tgz 26-Apr-2001 12:06 12k + tmda-0.02.txt 26-Apr-2001 12:50 1k + tmda-0.10.tgz 27-Apr-2001 21:14 39k + tmda-0.10.txt 30-Apr-2001 11:36 3k + tmda-0.11.tgz 02-May-2001 17:17 38k + tmda-0.11.txt 02-May-2001 17:06 3k + tmda-0.12.tgz 10-May-2001 19:50 39k + tmda-0.12.txt 10-May-2001 19:48 1k + tmda-0.13.tgz 17-May-2001 15:53 39k + tmda-0.13.txt 17-May-2001 15:57 2k + tmda-0.14.tgz 24-May-2001 16:43 46k + tmda-0.14.txt 24-May-2001 16:40 4k + tmda-0.15.tgz 28-May-2001 15:20 47k + tmda-0.15.txt 28-May-2001 15:20 1k + tmda-0.20.tgz 06-Jun-2001 17:52 49k + tmda-0.20.txt 06-Jun-2001 18:46 6k + tmda-0.21.tgz 18-Jun-2001 18:32 51k + tmda-0.21.txt 18-Jun-2001 18:31 2k + +TMDA was already at 0.21 8 days before filing for a patent.. + +----- Original Message ----- +From: "Jason R. Mastaler" +To: "Justin Mason" +Cc: ; +Sent: Tuesday, August 27, 2002 11:34 AM +Subject: [SAtalk] Re: patent on TMDA-like system + + +jm@jmason.org (Justin Mason) writes: + +> Sounds a lot like TMDA to me. :( Filing date is July 26, 2001, +> granted May 16, 2002. +> +> TMDAers, have you seen this before? + +No, but thanks for pointing it out. + +> I'd presume TMDA is prior art, but still, it could be troublesome... + +Yup. TMDA's core functionality was fully established before even the +filing date. + +Anyone with experience in this area have a recommendation on whether +this should be pursued or not? + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + + diff --git a/Ch3/datasets/spam/easy_ham/01339.363b1a2eaf356c7b0972c1b81b1db5d5 b/Ch3/datasets/spam/easy_ham/01339.363b1a2eaf356c7b0972c1b81b1db5d5 new file mode 100644 index 000000000..c57762eef --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01339.363b1a2eaf356c7b0972c1b81b1db5d5 @@ -0,0 +1,64 @@ +From tony@svanstrom.com Wed Aug 28 10:56:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5927743F9B + for ; Wed, 28 Aug 2002 05:56:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 10:56:37 +0100 (IST) +Received: from moon.campus.luth.se (root@moon.campus.luth.se + [130.240.202.158]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7RJIqZ22179 for ; Tue, 27 Aug 2002 20:18:52 +0100 +Received: from moon.campus.luth.se (tony@moon.campus.luth.se + [130.240.202.158]) by moon.campus.luth.se (8.12.3/8.12.3) with ESMTP id + g7RJJ2Mg007856; Tue, 27 Aug 2002 21:19:02 +0200 (CEST) (envelope-from + tony@svanstrom.com) +Date: Tue, 27 Aug 2002 21:19:02 +0200 (CEST) +From: "Tony L. Svanstrom" +X-X-Sender: tony@moon.campus.luth.se +To: "Jason R. Mastaler" +Cc: Justin Mason , + , +Subject: Re: [SAtalk] Re: patent on TMDA-like system +In-Reply-To: +Message-Id: <20020827211008.Y6871-100000@moon.campus.luth.se> +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII + +On Tue, 27 Aug 2002 the voices made Jason R. Mastaler write: + +> jm@jmason.org (Justin Mason) writes: +> +> > Sounds a lot like TMDA to me. :( Filing date is July 26, 2001, +> > granted May 16, 2002. +> > +> > TMDAers, have you seen this before? +> +> No, but thanks for pointing it out. +> +> > I'd presume TMDA is prior art, but still, it could be troublesome... +> +> Yup. TMDA's core functionality was fully established before even the +> filing date. +> +> Anyone with experience in this area have a recommendation on whether +> this should be pursued or not? + + If you think you can survive it, please fight... When I found that patent I +found others that were just common sense, things that any geek could implement +with his script/shell-language of choice; and it's time for someone to get the +medias attention on what's going on. + Basically this is the new wave of "namenappers"; it used to be domainnames, +not it's all the basic general ideas they can think off/find on the web that +they're patenting. + + + /Tony +-- +# Per scientiam ad libertatem! // Through knowledge towards freedom! # +# Genom kunskap mot frihet! =*= (c) 1999-2002 tony@svanstrom.com =*= # + + perl -e'print$_{$_} for sort%_=`lynx -dump svanstrom.com/t`' + + diff --git a/Ch3/datasets/spam/easy_ham/01340.2ad5807dd42687fa1f00f40143e175e4 b/Ch3/datasets/spam/easy_ham/01340.2ad5807dd42687fa1f00f40143e175e4 new file mode 100644 index 000000000..d029d394a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01340.2ad5807dd42687fa1f00f40143e175e4 @@ -0,0 +1,83 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Aug 28 15:18:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D83EB44155 + for ; Wed, 28 Aug 2002 10:18:45 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 15:18:45 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SEDmZ27853 for ; Wed, 28 Aug 2002 15:13:49 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k3ZA-0005Cm-00; Wed, + 28 Aug 2002 07:13:04 -0700 +Received: from mailout05.sul.t-online.com ([194.25.134.82]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k3Yz-0002fU-00 for ; + Wed, 28 Aug 2002 07:12:53 -0700 +Received: from fwd11.sul.t-online.de by mailout05.sul.t-online.com with + smtp id 17k3Yw-0000zP-01; Wed, 28 Aug 2002 16:12:50 +0200 +Received: from nebukadnezar.msquadrat.de + (520061089980-0001@[62.226.214.25]) by fmrl11.sul.t-online.com with esmtp + id 17k3Yf-1fYYwCC; Wed, 28 Aug 2002 16:12:33 +0200 +Received: from otherland (otherland.msquadrat.de [10.10.10.10]) by + nebukadnezar.msquadrat.de (Postfix on SuSE Linux 7.3 (i386)) with ESMTP id + 8F78B3B1 for ; Wed, 28 Aug 2002 16:12:36 + +0200 (CEST) +Content-Type: text/plain; charset="iso-8859-1" +From: "Malte S. Stretz" +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] test +User-Agent: KMail/1.4.3 +References: <3D6BB631.F6C4E1E3@mychipdesign.com> +In-Reply-To: <3D6BB631.F6C4E1E3@mychipdesign.com> +X-Accept-Language: de, en +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: Warrant Mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +X-Foo: Bar +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200208281615.18731@malte.stretz.eu.org> +X-Sender: 520061089980-0001@t-dialin.net +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 16:15:18 +0200 +Date: Wed, 28 Aug 2002 16:15:18 +0200 + +On Tuesday 27 August 2002 19:26 CET Leroy B. wrote: +> Ignore... + +Can't. + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01341.34cf1021232db9d1c782888dcd1e5328 b/Ch3/datasets/spam/easy_ham/01341.34cf1021232db9d1c782888dcd1e5328 new file mode 100644 index 000000000..a3d6acc16 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01341.34cf1021232db9d1c782888dcd1e5328 @@ -0,0 +1,72 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Aug 28 15:50:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 696F343F99 + for ; Wed, 28 Aug 2002 10:50:08 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 15:50:08 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SEksZ29122 for ; Wed, 28 Aug 2002 15:46:54 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k458-0002KL-00; Wed, + 28 Aug 2002 07:46:06 -0700 +Received: from popeye.apexvoice.com ([64.52.111.15]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k44T-0003kk-00 for ; + Wed, 28 Aug 2002 07:45:25 -0700 +Received: from winxp (lsanca1-ar16-4-46-103-175.lsanca1.dsl-verizon.net + [4.46.103.175]) (authenticated bits=0) by popeye.apexvoice.com + (8.12.3/8.12.3) with ESMTP id g7SEjLEE008972 for + ; Wed, 28 Aug 2002 07:45:21 -0700 +From: "Steve Thomas" +To: +Subject: RE: [SAtalk] Too funny +Message-Id: <000801c24ea1$8a8023f0$af672e04@winxp> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.3416 +In-Reply-To: <20020828143332.GE9486@kluge.net> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 07:45:18 -0700 +Date: Wed, 28 Aug 2002 07:45:18 -0700 + +| +| 0 hits here. :( +| + +I also get a lot of them. I think they're using the domain registry +database to pull their victims' addresses. + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01342.ed7748538ffe5695ead0f2135d88d9da b/Ch3/datasets/spam/easy_ham/01342.ed7748538ffe5695ead0f2135d88d9da new file mode 100644 index 000000000..c44c99148 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01342.ed7748538ffe5695ead0f2135d88d9da @@ -0,0 +1,102 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Aug 28 15:50:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6C63C43F9B + for ; Wed, 28 Aug 2002 10:50:09 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 15:50:09 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SEliZ29140 for ; Wed, 28 Aug 2002 15:47:45 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k455-0002Jh-00; Wed, + 28 Aug 2002 07:46:03 -0700 +Received: from mailout01.sul.t-online.com ([194.25.134.80]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k447-00035k-00 for ; + Wed, 28 Aug 2002 07:45:03 -0700 +Received: from fwd08.sul.t-online.de by mailout01.sul.t-online.com with + smtp id 17k444-0005vp-03; Wed, 28 Aug 2002 16:45:00 +0200 +Received: from nebukadnezar.msquadrat.de + (520061089980-0001@[62.226.214.25]) by fmrl08.sul.t-online.com with esmtp + id 17k43g-0O9HIeC; Wed, 28 Aug 2002 16:44:36 +0200 +Received: from otherland (otherland.msquadrat.de [10.10.10.10]) by + nebukadnezar.msquadrat.de (Postfix on SuSE Linux 7.3 (i386)) with ESMTP id + 80DE73B1 for ; Wed, 28 Aug 2002 16:44:40 + +0200 (CEST) +Content-Type: text/plain; charset="iso-8859-1" +From: "Malte S. Stretz" +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Too funny +User-Agent: KMail/1.4.3 +References: + <200208281620.52895@malte.stretz.eu.org> <20020828143332.GE9486@kluge.net> +In-Reply-To: <20020828143332.GE9486@kluge.net> +X-Accept-Language: de, en +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: Warrant Mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +X-Foo: Bar +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200208281647.22637@malte.stretz.eu.org> +X-Sender: 520061089980-0001@t-dialin.net +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 16:47:22 +0200 +Date: Wed, 28 Aug 2002 16:47:22 +0200 + +On Wednesday 28 August 2002 16:33 CET Theo Van Dinter wrote: +> On Wed, Aug 28, 2002 at 04:20:52PM +0200, Malte S. Stretz wrote: +> > I get about 3 of these per week. A google for trafficmagnet convinces +> > me that they're worth their own rule... +> +> 0 hits here. :( + +I recently cleaned my spam corpus from them but these are my current +results: + OVERALL SPAM NONSPAM NAME + 13929 995 12934 (all messages) + 13 13 0 T_TRAFFICMAGNET + +I put it into cvs_rules_under_test, let's see what the 2.41 GA run thinks +about it :) + +Malte + +-- +-- Coding is art. +-- + + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01343.bc684655fe9c17545f0eea20d6ebdae4 b/Ch3/datasets/spam/easy_ham/01343.bc684655fe9c17545f0eea20d6ebdae4 new file mode 100644 index 000000000..b12333166 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01343.bc684655fe9c17545f0eea20d6ebdae4 @@ -0,0 +1,85 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Aug 28 16:11:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8117143F99 + for ; Wed, 28 Aug 2002 11:11:56 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 16:11:56 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SFACZ30072 for ; Wed, 28 Aug 2002 16:10:13 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k4PQ-0004c3-00; Wed, + 28 Aug 2002 08:07:04 -0700 +Received: from sense-sea-megasub-1-583.oz.net ([216.39.146.75] + helo=mail.sial.org) by usw-sf-list1.sourceforge.net with esmtp (Cipher + TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id 17k4Oe-0001G5-00 + for ; Wed, 28 Aug 2002 08:06:16 + -0700 +Received: from darkness.sial.org (localhost. [IPv6:::1]) by mail.sial.org + (8.12.5/8.12.5) with ESMTP id g7SF6EQK002946 for + ; Wed, 28 Aug 2002 08:06:14 -0700 + (PDT) +Received: (from yyyyates@localhost) by darkness.sial.org + (8.12.5/8.12.2/Submit) id g7SF6EcW002945 for + spamassassin-talk@lists.sourceforge.net; Wed, 28 Aug 2002 08:06:14 -0700 + (PDT) +From: Jeremy Mates +To: spamassassin-talk@example.sourceforge.net +Message-Id: <20020828150614.GB98808@darkness.sial.org> +Mail-Followup-To: Jeremy Mates , + spamassassin-talk@lists.sourceforge.net +References: <20020828143332.GE9486@kluge.net> + <000801c24ea1$8a8023f0$af672e04@winxp> +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Disposition: inline +In-Reply-To: <000801c24ea1$8a8023f0$af672e04@winxp> +User-Agent: Mutt/1.4i +Subject: [SAtalk] Re: Too funny +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 08:06:14 -0700 +Date: Wed, 28 Aug 2002 08:06:14 -0700 + +* Steve Thomas [2002-08-28T07:52-0700]: +> I also get a lot of them. I think they're using the domain registry +> database to pull their victims' addresses. + +Along with the usual webmaster@* and probably a dash of web harvesting +on the side from the ones I have seen. + +A recent conversation in two lines: + +Me: Okay, trafficmagnet is being access mapped off now. +Junior admin [catching up on email after conference]: Thank God! + +-- +Jeremy Mates http://www.sial.org/ + +OpenPGP: 0x11C3D628 (4357 1D47 FF78 24BB 0FBF 7AA8 A846 9F86 11C3 D628) + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01344.9076ec44d13f2da07adbe956c032f17b b/Ch3/datasets/spam/easy_ham/01344.9076ec44d13f2da07adbe956c032f17b new file mode 100644 index 000000000..7e1cf65dc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01344.9076ec44d13f2da07adbe956c032f17b @@ -0,0 +1,95 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Aug 28 16:22:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B3DF743F9B + for ; Wed, 28 Aug 2002 11:22:08 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 16:22:08 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SFEgZ30284 for ; Wed, 28 Aug 2002 16:14:42 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k4WG-0006sj-00; Wed, + 28 Aug 2002 08:14:08 -0700 +Received: from mailout02.sul.t-online.com ([194.25.134.17]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k4Vn-0002lw-00 for ; + Wed, 28 Aug 2002 08:13:39 -0700 +Received: from fwd00.sul.t-online.de by mailout02.sul.t-online.com with + smtp id 17k4Vg-0006RZ-03; Wed, 28 Aug 2002 17:13:32 +0200 +Received: from nebukadnezar.msquadrat.de + (520061089980-0001@[62.226.214.25]) by fmrl00.sul.t-online.com with esmtp + id 17k4VV-0f9prMC; Wed, 28 Aug 2002 17:13:21 +0200 +Received: from otherland (otherland.msquadrat.de [10.10.10.10]) by + nebukadnezar.msquadrat.de (Postfix on SuSE Linux 7.3 (i386)) with ESMTP id + 4DBA33B1 for ; Wed, 28 Aug 2002 17:13:23 + +0200 (CEST) +Content-Type: text/plain; charset="iso-8859-1" +From: "Malte S. Stretz" +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Too funny +User-Agent: KMail/1.4.3 +References: <000801c24ea1$8a8023f0$af672e04@winxp> +In-Reply-To: <000801c24ea1$8a8023f0$af672e04@winxp> +X-Accept-Language: de, en +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: Warrant Mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +X-Foo: Bar +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200208281716.06506@malte.stretz.eu.org> +X-Sender: 520061089980-0001@t-dialin.net +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 17:16:06 +0200 +Date: Wed, 28 Aug 2002 17:16:06 +0200 + +On Wednesday 28 August 2002 16:45 CET Steve Thomas wrote: +> | 0 hits here. :( +> +> I also get a lot of them. I think they're using the domain registry +> database to pull their victims' addresses. + +They are crawling through the pages and send their "offers" to all addresses +they find. Theo won't every receive any offers as he doesn't publish his +address there ;-) + +Malte + +-- +-- Coding is art. +-- + + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01345.ffcc21afc6fa4e97f32f1980c05b33e8 b/Ch3/datasets/spam/easy_ham/01345.ffcc21afc6fa4e97f32f1980c05b33e8 new file mode 100644 index 000000000..6322b5bfd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01345.ffcc21afc6fa4e97f32f1980c05b33e8 @@ -0,0 +1,80 @@ +From spamassassin-devel-admin@lists.sourceforge.net Wed Aug 28 17:25:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D70D844155 + for ; Wed, 28 Aug 2002 12:25:56 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 17:25:56 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SGJ2Z32605 for ; Wed, 28 Aug 2002 17:19:02 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k5VQ-0000Y1-00; Wed, + 28 Aug 2002 09:17:20 -0700 +Received: from hall.mail.mindspring.net ([207.69.200.60]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k5U7-0006sG-00 for ; + Wed, 28 Aug 2002 09:15:59 -0700 +Received: from user-105nd99.dialup.mindspring.com ([64.91.181.41] + helo=belphegore.hughes-family.org) by hall.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17k5U6-0002Kz-00 for + spamassassin-devel@lists.sourceforge.net; Wed, 28 Aug 2002 12:15:58 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 950A8A3CB0; Wed, 28 Aug 2002 09:15:57 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: CC +Message-Id: <20020828161557.950A8A3CB0@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 777] tests to find hand-written HTML +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 09:15:57 -0700 (PDT) +Date: Wed, 28 Aug 2002 09:15:57 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=777 + + + + + +------- Additional Comments From daniel@roe.ch 2002-08-28 09:15 ------- +3. usage of

just like
(ie. without

) which is obsolete + (not sure whether some mailers still produce such broken html) +4. tag argument values sometimes enclosed in "", sometimes not +5. colour args without # in front of hex rgb code +6. colour args with non-6-digit rgb code (typo) +7. onMouseOver et al in nonconsistent case throughout the document + +Mind, those are just ideas. I'm pretty sure some or even most of them +are not working in practice, but they might be worth checking out. + + + + +------- You are receiving this mail because: ------- +You are on the CC list for the bug, or are watching someone who is. + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01346.cbc6b23ec727627babef10bb4cb37158 b/Ch3/datasets/spam/easy_ham/01346.cbc6b23ec727627babef10bb4cb37158 new file mode 100644 index 000000000..523690c43 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01346.cbc6b23ec727627babef10bb4cb37158 @@ -0,0 +1,72 @@ +From spamassassin-commits-admin@lists.sourceforge.net Wed Aug 28 17:56:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0FCED44159 + for ; Wed, 28 Aug 2002 12:56:52 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 17:56:52 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SGtrZ01595 for ; Wed, 28 Aug 2002 17:55:53 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k66u-0005dV-00; Wed, + 28 Aug 2002 09:56:04 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k66B-0000HA-00 for ; + Wed, 28 Aug 2002 09:55:19 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17k66B-0006wv-00 for + ; Wed, 28 Aug 2002 09:55:19 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17k66A-0001hO-00 for + ; Wed, 28 Aug 2002 09:55:18 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin/masses evolve.cxx,1.28,NONE +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 09:55:18 -0700 +Date: Wed, 28 Aug 2002 09:55:18 -0700 + +Update of /cvsroot/spamassassin/spamassassin/masses +In directory usw-pr-cvs1:/tmp/cvs-serv6501/masses + +Removed Files: + Tag: b2_4_0 + evolve.cxx +Log Message: +removed old evolver + +--- evolve.cxx DELETED --- + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + diff --git a/Ch3/datasets/spam/easy_ham/01347.5dd5701d8031b7142d587456be226816 b/Ch3/datasets/spam/easy_ham/01347.5dd5701d8031b7142d587456be226816 new file mode 100644 index 000000000..30dd0eee4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01347.5dd5701d8031b7142d587456be226816 @@ -0,0 +1,87 @@ +From spamassassin-commits-admin@lists.sourceforge.net Wed Aug 28 17:56:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1473844158 + for ; Wed, 28 Aug 2002 12:56:51 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 17:56:51 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SGtrZ01594 for ; Wed, 28 Aug 2002 17:55:53 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k66u-0005d9-00; Wed, + 28 Aug 2002 09:56:04 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k66B-0000H6-00 for ; + Wed, 28 Aug 2002 09:55:19 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17k66B-0006wn-00 for + ; Wed, 28 Aug 2002 09:55:19 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17k66A-0001hE-00 for + ; Wed, 28 Aug 2002 09:55:18 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin MANIFEST,1.100.2.11,1.100.2.12 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 09:55:18 -0700 +Date: Wed, 28 Aug 2002 09:55:18 -0700 + +Update of /cvsroot/spamassassin/spamassassin +In directory usw-pr-cvs1:/tmp/cvs-serv6501 + +Modified Files: + Tag: b2_4_0 + MANIFEST +Log Message: +removed old evolver + +Index: MANIFEST +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/MANIFEST,v +retrieving revision 1.100.2.11 +retrieving revision 1.100.2.12 +diff -b -w -u -d -r1.100.2.11 -r1.100.2.12 +--- MANIFEST 28 Aug 2002 13:50:15 -0000 1.100.2.11 ++++ MANIFEST 28 Aug 2002 16:55:16 -0000 1.100.2.12 +@@ -50,7 +50,6 @@ + masses/CORPUS_POLICY + masses/CORPUS_SUBMIT + masses/craig-evolve.c +-masses/evolve.cxx + masses/freqdiff + masses/hit-frequencies + masses/lib/Mail/ArchiveIterator.pm + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + diff --git a/Ch3/datasets/spam/easy_ham/01348.4cfe9c750b06d2062813ea730233e077 b/Ch3/datasets/spam/easy_ham/01348.4cfe9c750b06d2062813ea730233e077 new file mode 100644 index 000000000..b3f0e1d0b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01348.4cfe9c750b06d2062813ea730233e077 @@ -0,0 +1,107 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Aug 28 19:30:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2CD9244155 + for ; Wed, 28 Aug 2002 14:30:30 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 19:30:30 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SIW0Z05462 for ; Wed, 28 Aug 2002 19:32:00 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k7Zs-0008QL-00; Wed, + 28 Aug 2002 11:30:04 -0700 +Received: from libadm.ucr.edu ([138.23.89.79] helo=library.ucr.edu) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k7ZG-0008RR-00 for ; + Wed, 28 Aug 2002 11:29:26 -0700 +Received: by library.ucr.edu (Postfix, from userid 33) id 68DE17D32; + Wed, 28 Aug 2002 11:29:27 -0700 (PDT) +Received: from dragonball.ucr.edu ([138.23.89.42]) (SquirrelMail + authenticated user simonian) by library.ucr.edu with HTTP; Wed, + 28 Aug 2002 11:29:27 -0700 (PDT) +Message-Id: <36033.138.23.89.42.1030559367.squirrel@library.ucr.edu> +Subject: Re: [SAtalk] Too funny +From: "Tanniel Simonian" +To: +In-Reply-To: <5.1.0.14.0.20020828133216.00b48160@192.168.50.2> +References: <000801c24ea1$8a8023f0$af672e04@winxp> + <000801c24ea1$8a8023f0$af672e04@winxp> + <5.1.0.14.0.20020828133216.00b48160@192.168.50.2> +X-Priority: 3 +Importance: Normal +X-Msmail-Priority: Normal +Reply-To: simonian@library.ucr.edu +X-Mailer: SquirrelMail (version 1.2.6) +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 11:29:27 -0700 (PDT) +Date: Wed, 28 Aug 2002 11:29:27 -0700 (PDT) + + +Well if you're talking about epiphany, which is in January, then yes it is +5 months.Some people do celebrate Christmas on january 6th, or even the 13th. + +But I am certain that what you are thinking is the correct thought. + +Please don't flame me. Just trying to be humerous =) + + +Matt Kettler said: +> On an unrelated, but similarly amusing note, a spam I received (and was +> tagged by SA) today began with: +> +> +> > I bet you haven't even realized that Christmas is just 5 months away, +> > +> did you? +> +> +> Strangely, no I wasn't aware that Christmas was 5 months away. Here in +> the US Christmas is a bit less than 4 months away. Where exactly is +> the "international month line" anyway? I've never seen the -74400 +> timezone before, but I bet it qualifies as INVALID_DATE_TZ_ABSURD :) +> +> +> +> +> ------------------------------------------------------- +> This sf.net email is sponsored by: Jabber - The world's fastest growing +> real-time communications platform! Don't just IM. Build it in! +> http://www.jabber.com/osdn/xim +> _______________________________________________ +> Spamassassin-talk mailing list +> Spamassassin-talk@lists.sourceforge.net +> https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + + + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01349.dfb652931b4c7be5c825220a319e9af5 b/Ch3/datasets/spam/easy_ham/01349.dfb652931b4c7be5c825220a319e9af5 new file mode 100644 index 000000000..5384893a3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01349.dfb652931b4c7be5c825220a319e9af5 @@ -0,0 +1,59 @@ +From prlawrence@lehigh.edu Thu Aug 29 11:06:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B877D44163 + for ; Thu, 29 Aug 2002 06:04:54 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:04:54 +0100 (IST) +Received: from cc.lehigh.edu (ironmail1.cc.lehigh.edu [128.180.39.26]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SKpLZ09799 for + ; Wed, 28 Aug 2002 21:51:21 +0100 +Received: from ([128.180.39.20]) by ironmail1.cc.lehigh.edu with ESMTP + with TLS; Wed, 28 Aug 2002 16:49:47 -0400 (EDT) +Received: from lehigh.edu (Roamer052031.dept.Lehigh.EDU [128.180.52.31]) + by rain.CC.Lehigh.EDU (8.12.5/8.12.5) with ESMTP id g7SKnlMS021052; + Wed, 28 Aug 2002 16:49:47 -0400 +Message-Id: <3D6D3763.3060300@lehigh.edu> +Date: Wed, 28 Aug 2002 16:49:39 -0400 +From: Phil R Lawrence +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020513 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Justin Mason +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] testing the install +References: <20020815174924.951B743C34@phobos.labs.netnoteinc.com> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit + +Justin Mason wrote: +> Phil R Lawrence said: +> +> +>>>something to watch out for is to use "nomime" => 1 in the Mail::Audit +>>>ctor; the M:A folks changed the API there. +>> +>>What has MIME to do with it? I read in perldoc M:A that your suggestion +>>is less expensive, but how does that help S:A? +> +> +> M:A, for some reason, changes its base class depending on whether the +> incoming message is mime or not. Therefore the Mail::Internet methods +> suddenly become unavailable for MIME messages... +> +> (you do *not* want to know what I thought of that when I found it ;) + +As a new user of SA, I guess I'm having trouble connecting the dots. If +I understand you: If I don't use the "nomime" => 1 option and I recieve +MIME mail, the Mail::Internet modules become unavailable. + +Unavailable for which? MA? SA? What do these methods do? Does this +mean my incoming MIME mail won't be checked by SA unless I specify +"nomime" => 1? + +Thanks, +Phil + + diff --git a/Ch3/datasets/spam/easy_ham/01350.a0f7f7dbe59f334cd83793d518e603c5 b/Ch3/datasets/spam/easy_ham/01350.a0f7f7dbe59f334cd83793d518e603c5 new file mode 100644 index 000000000..009da3503 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01350.a0f7f7dbe59f334cd83793d518e603c5 @@ -0,0 +1,81 @@ +From spamassassin-devel-admin@lists.sourceforge.net Thu Aug 29 11:05:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8FAB94416B + for ; Thu, 29 Aug 2002 06:04:32 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:04:32 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SIkRZ06007 for ; Wed, 28 Aug 2002 19:46:28 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k7oP-0004m4-00; Wed, + 28 Aug 2002 11:45:05 -0700 +Received: from [212.2.188.179] (helo=mandark.labs.netnoteinc.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k7o6-0001F3-00 for ; + Wed, 28 Aug 2002 11:44:47 -0700 +Received: from phobos.labs.netnoteinc.com (phobos.labs.netnoteinc.com + [192.168.2.14]) by mandark.labs.netnoteinc.com (8.11.6/8.11.6) with ESMTP + id g7SIid502061 for ; + Wed, 28 Aug 2002 19:44:39 +0100 +Received: by phobos.labs.netnoteinc.com (Postfix, from userid 500) id + 399CE43F99; Wed, 28 Aug 2002 14:42:18 -0400 (EDT) +Received: from phobos (localhost [127.0.0.1]) by + phobos.labs.netnoteinc.com (Postfix) with ESMTP id 34ABE33D8B for + ; Wed, 28 Aug 2002 19:42:18 +0100 (IST) +To: SpamAssassin-devel@example.sourceforge.net +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Image-Url: http://spamassassin.taint.org/me.jpg +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020828184218.399CE43F99@phobos.labs.netnoteinc.com> +Subject: [SAdev] 2.40: ready for release? +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 19:42:13 +0100 +Date: Wed, 28 Aug 2002 19:42:13 +0100 + +OK guys -- I reckon it's now Good Enough, modulo some minor score +tweaking, or commenting of some more broken/high-FP-ing rules. + +What do you all think? are we ready to go? anyone run into any trouble +with the new autoconf code, or found a bug from the merge of that spamc +BSMTP-support patch? + +I expect there *will* be a 2.41 BTW. + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01351.17df08b43e42781f7e92b91a3ee174b1 b/Ch3/datasets/spam/easy_ham/01351.17df08b43e42781f7e92b91a3ee174b1 new file mode 100644 index 000000000..820afdbd9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01351.17df08b43e42781f7e92b91a3ee174b1 @@ -0,0 +1,149 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:05:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id EC3AA4415E + for ; Thu, 29 Aug 2002 06:04:33 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:04:33 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SIpXZ06083 for ; Wed, 28 Aug 2002 19:51:33 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k7sK-0005nc-00; Wed, + 28 Aug 2002 11:49:08 -0700 +Received: from email.uah.edu ([146.229.1.200]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k7s7-0005Tn-00 for ; + Wed, 28 Aug 2002 11:48:55 -0700 +Received: from email.uah.edu ([146.229.5.22]) by email.uah.edu + (8.11.2/8.11.2) with ESMTP id g7SImrs21805 for + ; Wed, 28 Aug 2002 13:48:53 -0500 + (CDT) +Message-Id: <3D6D1AB2.DEDDDC0C@email.uah.edu> +From: Jim McCullars +X-Mailer: Mozilla 4.7 [en] (Win98; U) +X-Accept-Language: en,pdf +MIME-Version: 1.0 +To: spamassassin-talk@example.sourceforge.net +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Subject: [SAtalk] Compile error under Digital Unix +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 13:47:14 -0500 +Date: Wed, 28 Aug 2002 13:47:14 -0500 + +Hi, I'm trying to build SA under Digital Unix 4.0f and am receiving a +compile error (and many warnings) for spamc. The "perl Makefile.PL" +does OK, but when I do the make, I get this: + +cc -std -fprm d -ieee -D_INTRINSICS -I/usr/local/include -DLANGUAGE_C +-O4 spamd +/spamc.c -o spamd/spamc -L/usr/local/lib -lbind -ldbm -ldb -lm -liconv +-lutil +cc: Error: spamd/spamc.c, line 50: In this declaration, "in_addr_t" has +no linka +ge and has a prior declaration in this scope at line number 592 in file +/usr/inc +lude/sys/types.h. (nolinkage) +typedef unsigned long in_addr_t; /* base type for internet +address */ +------------------------^ +cc: Warning: spamd/spamc.c, line 169: In this statement, the referenced +type of +the pointer value "msg_buf" is "char", which is not compatible with +"unsigned ch +ar". (ptrmismatch) + if((bytes = full_read (in, msg_buf, max_size+1024, max_size+1024)) > +max_size) +-----------------------------^ +cc: Warning: spamd/spamc.c, line 174: In this statement, the referenced +type of +the pointer value "header_buf" is "char", which is not compatible with +"const un +signed char". (ptrmismatch) + full_write (out,header_buf,bytes2); +--------------------^ +cc: Warning: spamd/spamc.c, line 202: In this statement, the referenced +type of +the pointer value "header_buf" is "char", which is not compatible with +"const un +signed char". (ptrmismatch) + full_write (out,header_buf,bytes2); +--------------------^ +cc: Warning: spamd/spamc.c, line 203: In this statement, the referenced +type of +the pointer value "msg_buf" is "char", which is not compatible with +"const unsig +ned char". (ptrmismatch) + full_write (out,msg_buf,bytes); +--------------------^ +cc: Warning: spamd/spamc.c, line 306: In this statement, the referenced +type of +the pointer value "buf" is "char", which is not compatible with +"unsigned char". + (ptrmismatch) + if(full_read (in,buf,2,2) != 2 || !('\r' == buf[0] && '\n' == +buf[1])) +---------------------------^ +cc: Warning: spamd/spamc.c, line 321: In this statement, the referenced +type of +the pointer value "buf" is "char", which is not compatible with +"unsigned char". + (ptrmismatch) + while((bytes=full_read (in,buf,8192, 8192)) > 0) +-------------------------------^ +cc: Warning: spamd/spamc.c, line 348: In this statement, the referenced +type of +the pointer value "out_buf" is "char", which is not compatible with +"const unsig +ned char". (ptrmismatch) + full_write (out, out_buf, out_index); +-----------------------^ +cc: Warning: spamd/spamc.c, line 497: In this statement, the referenced +type of +the pointer value "msg_buf" is "char", which is not compatible with +"const unsig +ned char". (ptrmismatch) + full_write (STDOUT_FILENO,msg_buf,amount_read); +--------------------------------^ +cc: Warning: spamd/spamc.c, line 512: In this statement, the referenced +type of +the pointer value "msg_buf" is "char", which is not compatible with +"const unsig +ned char". (ptrmismatch) + full_write(STDOUT_FILENO,msg_buf,amount_read); +-------------------------------^ +*** Exit 1 +Stop. + +Can anyone suggest a way to get around this? TIA... + +Jim McCullars +The University of Alabama in Huntsville + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01352.400cef8d0d007f3d7ba8a0c7a8717fcb b/Ch3/datasets/spam/easy_ham/01352.400cef8d0d007f3d7ba8a0c7a8717fcb new file mode 100644 index 000000000..601ae8ecd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01352.400cef8d0d007f3d7ba8a0c7a8717fcb @@ -0,0 +1,95 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:05:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 4911C4415F + for ; Thu, 29 Aug 2002 06:04:36 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:04:36 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SIpYZ06088 for ; Wed, 28 Aug 2002 19:51:34 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k7sJ-0005n7-00; Wed, + 28 Aug 2002 11:49:07 -0700 +Received: from 168-215-122-205.gen.twtelecom.net ([168.215.122.205] + helo=commander) by usw-sf-list1.sourceforge.net with esmtp (Cipher + TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id 17k7s1-0005S3-00 + for ; Wed, 28 Aug 2002 11:48:49 + -0700 +Received: from 65.91.222.7 [65.91.222.7] by commander with SMTPBeamer + v3.30 ; Wed, 28 Aug 2002 14:37:32 -0400 +Received: from omega.paradigm-omega.net (localhost.localdomain + [127.0.0.1]) by omega.paradigm-omega.net (Postfix) with ESMTP id + 7EF3E4C33A for ; Wed, + 28 Aug 2002 11:48:31 -0700 (PDT) +Content-Type: text/plain; charset="iso-8859-15" +Organization: Paradigm-Omega, LLC +To: spamassassin-talk@example.sourceforge.net +X-Mailer: KMail [version 1.3.1] +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +From: Robin Lynn Frank +Message-Id: <1030560510.17408.TMDA@omega.paradigm-omega.net> +X-Delivery-Agent: TMDA/0.61 +Reply-To: Robin Lynn Frank +Subject: [SAtalk] O.T. Habeus -- Why? +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 11:48:12 -0700 +Date: Wed, 28 Aug 2002 11:48:12 -0700 + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +I may be dense, but why would anyone want to utilize Habeus? To me, it looks +like a potential backdoor to anyone's defenses against spam. + +If I were a spammer, I'd simply set up a server, send out my spam with the +Habeus headers and continue till I was reasonably certain I'd been reported. +Then I'd simply reconfigure the server and reconnect to a different IP. As +long as no one can establish my connection to the web sites my spam is +directing people to, I'm home free. + +Since I can set up spamassassin to I don't "lose" any email, what do I gain +by making it easier for spam to get through?? +- -- +- ------------------------------------------------------------------------ +Robin Lynn Frank---Director of Operations---Paradigm, Omega, LLC +http://paradigm-omega.com http://paradigm-omega.net +© 2002. All rights reserved. No duplication/dissemination permitted. +Use of PGP/GPG encrypted mail preferred. No HTML/attachments accepted. +Fingerprint: 08E0 567C 63CC 5642 DB6D D490 0F98 D7D3 77EA 3714 +Key Server: http://paradigm-omega.com/keymaster.html +- ------------------------------------------------------------------------ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (GNU/Linux) + +iD8DBQE9bRrzD5jX03fqNxQRAjQnAJsE55BZGj0MGZdLTuBTUZqTGeQLwQCfXPzV +qfH+nyAg+m+ZKNvLi2BcJGI= +=YsRI +-----END PGP SIGNATURE----- + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01353.cf72da836d8b771bea4110c8f9b5599b b/Ch3/datasets/spam/easy_ham/01353.cf72da836d8b771bea4110c8f9b5599b new file mode 100644 index 000000000..357ab93ca --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01353.cf72da836d8b771bea4110c8f9b5599b @@ -0,0 +1,176 @@ +From spamassassin-devel-admin@lists.sourceforge.net Thu Aug 29 11:05:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0FE664416C + for ; Thu, 29 Aug 2002 06:04:38 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:04:38 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SIw0Z06358 for ; Wed, 28 Aug 2002 19:58:01 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k7z3-00009a-00; Wed, + 28 Aug 2002 11:56:05 -0700 +Received: from dsl092-072-213.bos1.dsl.speakeasy.net ([66.92.72.213] + helo=blazing.arsecandle.org) by usw-sf-list1.sourceforge.net with esmtp + (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k7yt-0006FT-00 for ; + Wed, 28 Aug 2002 11:55:56 -0700 +Received: (qmail 478 invoked from network); 28 Aug 2002 18:53:06 -0000 +Received: from localhost (HELO RAGING) (rod@127.0.0.1) by localhost with + SMTP; 28 Aug 2002 18:53:06 -0000 +Message-Id: <008c01c24ec4$83eab9b0$b554a8c0@RAGING> +From: "rODbegbie" +To: , + "Justin Mason" +References: <20020828184218.399CE43F99@phobos.labs.netnoteinc.com> +Subject: Re: [SAdev] 2.40: ready for release? *NO* +Organization: Arsecandle Industries, Inc. +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +MIME-Version: 1.0 +Content-Type: multipart/signed; + boundary="----=_NextPart_000_0088_01C24EA2.FC21D7A0"; + micalg=SHA1; + protocol="application/x-pkcs7-signature" +X-Priority: 1 +X-Msmail-Priority: High +X-Mailer: Microsoft Outlook Express 6.00.2800.1050 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1050 +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 14:55:43 -0400 +Date: Wed, 28 Aug 2002 14:55:43 -0400 + +This is a multi-part message in MIME format. + +------=_NextPart_000_0088_01C24EA2.FC21D7A0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + +Justin Mason wrote: +> OK guys -- I reckon it's now Good Enough, modulo some minor score +> tweaking, or commenting of some more broken/high-FP-ing rules. +> +> What do you all think? are we ready to go? anyone run into any trouble +> with the new autoconf code, or found a bug from the merge of that spamc +> BSMTP-support patch? + +I just checked out b2_4_0 from CVS and 'make test' fails horribly. + +It seems to be looking in my site_perl SpamAssassin code, not the build +directory. + +Example error: + +Failed to run FROM_AND_TO_SAME_5 SpamAssassin test, skipping: + (Can't locate object method "check_for_from_to_same" via package +"Mail::SpamAssassin::PerMsgStatus" at +/usr/local/lib/perl5/site_perl/5.8.0/Mail/SpamAssassin/PerMsgStatus.pm line +1701. +) + +Anyone else seeing this? + +rOD. + +-- +"If you're dumb, surround yourself with smart people; + and if you're smart, surround yourself with smart people + who disagree with you." + +Doing the blogging thang again at http://www.groovymother.com/ << + +------=_NextPart_000_0088_01C24EA2.FC21D7A0 +Content-Type: application/x-pkcs7-signature; + name="smime.p7s" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; + filename="smime.p7s" + +MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIJIjCCAnow +ggHjoAMCAQICARcwDQYJKoZIhvcNAQEFBQAwUzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlm +YXggU2VjdXJlIEluYy4xJjAkBgNVBAMTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0xMB4X +DTAyMDQxODE1MjkzN1oXDTIwMDQxMzE1MjkzN1owTjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdl +b1RydXN0IEluYy4xJzAlBgNVBAMTHkdlb1RydXN0IFRydWUgQ3JlZGVudGlhbHMgQ0EgMjCBnzAN +BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAspcspZISpYX/aJqWoYcSyyGqFby3OvsepRzLRU0ENDJR +wJo7DwFpirRFOUQkTkKXsY6BQzX/CeCRrn9i4ny5gcXuI2JSyrSmDwobbwl52n5cPEbHGcebybWd +KfAf8vvkxYUnTmDZPtt2ob5RNpJTeTiq9MpNCB/5G7Ocr1hEljcCAwEAAaNjMGEwDgYDVR0PAQH/ +BAQDAgHGMB0GA1UdDgQWBBQig0tNIAIMMfR8WrAaTRXIeF0RSTAPBgNVHRMBAf8EBTADAQH/MB8G +A1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMA0GCSqGSIb3DQEBBQUAA4GBACmw3z+sLsLS +fAfdECQJPfiZFzJzSPQKLwY7vHnNWH2lAKYECbtAFHBpdyhSPkrj3KghXeIJnKyMFjsK6xd1k1Yu +wMXrauUH+HIDuZUg4okBwQbhBTqjjEdo/cCHILQsaLeU2kM+n5KKrpb0uvrHrocGffRMrWhz9zYB +lxoq0/EEMIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoG +A1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2lu +ZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1 +c2luZXNzIENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQa +DJj0ItlZ1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu +WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMB +AAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4 +MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG +9w0BAQQFAAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeE +S1hl8eL5lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgd +SIKN/Bf+KpYrtWKmpj29f5JZzVoqgrI3eTCCBBowggODoAMCAQICAxAAdTANBgkqhkiG9w0BAQQF +ADBOMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEnMCUGA1UEAxMeR2VvVHJ1 +c3QgVHJ1ZSBDcmVkZW50aWFscyBDQSAyMB4XDTAyMDgwNzE3MzA1NloXDTAzMDgyMTE3MzA1Nlow +ggHQMQswCQYDVQQGEwJVUzFJMEcGA1UEChNAR2VvVHJ1c3QgVHJ1ZSBDcmVkZW50aWFscyBDdXN0 +b21lciAtIE9yZ2FuaXphdGlvbiBub3QgdmFsaWRhdGVkLjE/MD0GA1UECxM2Q1BTIHRlcm1zIGlu +Y29ycG9yYXRlZCBieSByZWZlcmVuY2UgbGlhYmlsaXR5IGxpbWl0ZWQuMUkwRwYDVQQLE0BTZWUg +VHJ1ZSBDcmVkZW50aWFscyBFeHByZXNzIENQUyB3d3cuZ2VvdHJ1c3QuY29tL3Jlc291cmNlcy9D +UFMuMS0wKwYDVQQLEyRFbWFpbCBjb250cm9sIHZhbGlkYXRlZCBieSBHZW9UcnVzdC4xPzA9BgNV +BAsTNklkZW50aXR5IGF1dGhlbnRpY2F0ZWQgYnkgUmVnaXN0cmF0aW9uIEF1dGhvcml0eSAoUkEp +LjFCMEAGA1UECxQ5UmVnaXN0cmF0aW9uIEF1dGhvcml0eSAoUkEpIC0gcm9kLWdlb3RydXN0QGFy +c2VjYW5kbGUub3JnMRMwEQYDVQQDEwpyT0QgQmVnYmllMSEwHwYJKoZIhvcNAQkBFhJyT0RAYXJz +ZWNhbmRsZS5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMXm5uxWzmnY4QqgZrm7Y0Hp +CRnHrXk8zcYCYwTO4Jsh3wdeUEzzAXLuU+kkGduVA8QXWWNb61zlXwNhVMAuazPlLTmdce6GSFVO +zCOYViHcuXnF4gj6ptYXTYReKrIznwYW50r7iKRrnsAeVqMMo9D9oM9bS+ySFcQhIBZZl+0lAgMB +AAGjgYEwfzARBglghkgBhvhCAQEEBAMCBaAwDgYDVR0PAQH/BAQDAgXgMDkGA1UdHwQyMDAwLqAs +oCqGKGh0dHA6Ly9jcmwuZ2VvdHJ1c3QuY29tL2NybHMvZ3R0Y2NhMi5jcmwwHwYDVR0jBBgwFoAU +IoNLTSACDDH0fFqwGk0VyHhdEUkwDQYJKoZIhvcNAQEEBQADgYEAeZyTyjFzabynSLBSiQTLxPgp +0YoEvrYnCGdioATy99A0TpmWwR+h6hO2iJPTersqPg4iUJrK5douLHjwrjmJCscFRACsQXuOh+wG +oilcCkXEMbqx+ShedO+rthR41RM/l06T45p1lgLJQyYPjy9jpzf8XY0K8GXPK/rtt323fOYxggG4 +MIIBtAIBATBVME4xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMScwJQYDVQQD +Ex5HZW9UcnVzdCBUcnVlIENyZWRlbnRpYWxzIENBIDICAxAAdTAJBgUrDgMCGgUAoIG6MBgGCSqG +SIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTAyMDgyODE4NTU0M1owIwYJKoZI +hvcNAQkEMRYEFNak2UdcsftBLpLOYcXm92WzUklRMFsGCSqGSIb3DQEJDzFOMEwwCgYIKoZIhvcN +AwcwDgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEo +MAcGBSsOAwIdMA0GCSqGSIb3DQEBAQUABIGAIDfmdXpwHOS7ho3C1cjFGuaNQ3AJde7lsx5t93sS +7wp8Cdu/OO0o9v+9ogALhzyFNn+z3NPmOud2Sl1ycqV35ZBqzjUPZGdlLYyN2KYyDl/F6yZ3WoQ/ +ZGNRR4NLUQxOsNGd5/M+SfD4uLcFRWwut6br/uadzUsSUkDy55MqyvMAAAAAAAA= + +------=_NextPart_000_0088_01C24EA2.FC21D7A0-- + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01354.8a0699778c705d4f2fbc6f611c11bd05 b/Ch3/datasets/spam/easy_ham/01354.8a0699778c705d4f2fbc6f611c11bd05 new file mode 100644 index 000000000..5d725ee1f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01354.8a0699778c705d4f2fbc6f611c11bd05 @@ -0,0 +1,72 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:05:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 112EC4416D + for ; Thu, 29 Aug 2002 06:04:43 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:04:43 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SJ10Z06383 for ; Wed, 28 Aug 2002 20:01:00 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k82v-0001mF-00; Wed, + 28 Aug 2002 12:00:05 -0700 +Received: from esarhaddon.ability.net ([216.3.3.68]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k822-0006Ys-00 for ; + Wed, 28 Aug 2002 11:59:10 -0700 +Received: from [10.0.1.100] (66.safeclick.net [63.119.245.66]) by + esarhaddon.ability.net (8.11.6/8.11.6) with ESMTP id g7SIx7R01854; + Wed, 28 Aug 2002 14:59:07 -0400 +MIME-Version: 1.0 +X-Sender: mclark@mail.cdtmail.org +Message-Id: +To: spamassassin-talk@example.sourceforge.net +From: Michael Clark +Content-Type: text/plain; charset="us-ascii" ; format="flowed" +Subject: [SAtalk] updating SA +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 14:57:39 -0400 +Date: Wed, 28 Aug 2002 14:57:39 -0400 + +To update spamassasin, all I need to do is install the new tar.gz +file as if it were a new installation? I don't need to stop incoming +mail or anything like that? Thanks, Mike + + +-- +Michael Clark, Webmaster +Center for Democracy and Technology +1634 Eye Street NW, Suite 1100 +Washington, DC 20006 +voice: 202-637-9800 +http://www.cdt.org/ + +Join our Activist Network! Your participation can make a difference! +http://www.cdt.org/join/ + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01355.9604b641ed970d50b35f2ec2af848e1f b/Ch3/datasets/spam/easy_ham/01355.9604b641ed970d50b35f2ec2af848e1f new file mode 100644 index 000000000..44e07e5e3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01355.9604b641ed970d50b35f2ec2af848e1f @@ -0,0 +1,74 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:05:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7A71E44161 + for ; Thu, 29 Aug 2002 06:04:44 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:04:44 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SK15Z08404 for ; Wed, 28 Aug 2002 21:01:06 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k8w3-0004y2-00; Wed, + 28 Aug 2002 12:57:03 -0700 +Received: from adsl-64-175-246-157.dsl.sntc01.pacbell.net + ([64.175.246.157] helo=vife.vamos-wentworth.org) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17k8vO-0002n5-00 for + ; Wed, 28 Aug 2002 12:56:23 -0700 +Received: from husi (husi.vamos-wentworth.org [192.168.2.37]) + (authenticated (0 bits)) by vife.vamos-wentworth.org + (Switch-2.2.0/Switch-2.2.0) with ESMTP id g7SJuAm18267 for + ; Wed, 28 Aug 2002 12:56:11 -0700 +From: "Rossz Vamos-Wentworth" +To: spamassassin-talk@example.sourceforge.net +MIME-Version: 1.0 +Subject: Re: [SAtalk] custom score for a given domain? +Reply-To: rossz@vamos-wentworth.org +Message-Id: <3D6CC86A.3542.DD1064@localhost> +Priority: normal +In-Reply-To: <3D6CE817.20608@sciences.univ-nantes.fr> +X-Mailer: Pegasus Mail for Windows (v4.01) +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7BIT +Content-Description: Mail message body +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 12:56:10 -0800 +Date: Wed, 28 Aug 2002 12:56:10 -0800 + +> the number 1 ISP in France and the third ISP in +> Europe Wanadoo.fr is using non RFC2822 compliant +> mail servers: + +Wanadoo.fr is notorious for being unresponsive to spam abuse +complaints. Some of the more militant admins have blocked them +completely. + +Rossz + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01356.6edc052e900ddd438a25c6fbe4106334 b/Ch3/datasets/spam/easy_ham/01356.6edc052e900ddd438a25c6fbe4106334 new file mode 100644 index 000000000..b196c503c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01356.6edc052e900ddd438a25c6fbe4106334 @@ -0,0 +1,92 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:05:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9C6EA44162 + for ; Thu, 29 Aug 2002 06:04:47 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:04:47 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SKURZ09244 for ; Wed, 28 Aug 2002 21:30:27 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k9R2-000138-00; Wed, + 28 Aug 2002 13:29:04 -0700 +Received: from yrex.com ([216.40.247.31] helo=host.yrex.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k9QQ-0002eH-00 for ; + Wed, 28 Aug 2002 13:28:26 -0700 +Received: (qmail 14249 invoked from network); 28 Aug 2002 20:28:21 -0000 +Received: from mgm.dsl.xmission.com (HELO opus) (204.228.152.186) by + yrex.com with SMTP; 28 Aug 2002 20:28:21 -0000 +From: "Michael Moncur" +To: +Subject: RE: [SAtalk] O.T. Habeus -- Why? +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-15" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +In-Reply-To: <1030560510.17408.TMDA@omega.paradigm-omega.net> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 14:28:16 -0600 +Date: Wed, 28 Aug 2002 14:28:16 -0600 + +> I may be dense, but why would anyone want to utilize Habeus? To +> me, it looks like a potential backdoor to anyone's defenses against spam. + +You're not dense. I'm going to zero the habeas scores on my copy of +SpamAssassin. I think they were added to SA quite prematurely. To me it's +simple: + +1. People who send me legitimate email have absolutely no motivation to use +Habeas, at least until it gets lots more press, and even then only +bulk-mailing companies like Amazon or eBay are going to bother, and I +already whitelist them. Individuals won't bother. + +2. Spammers have lots of motivation to forge the Habeas headers, and a good +percentage of them are completely out of the legal reach of Habeas. + +I think it should be subjected to the same testing and scrutiny as any other +potential new rule. When I test against my corpus here's what I get: + +OVERALL SPAM NONSPAM S/O SCORE NAME + 13851 8919 4932 0.64 0.00 (all messages) + 0 0 0 0.00 -1.00 HABEAS_SWE + +The score of -1.0 is pretty harmless right now, but it still looks like a +useless rule so far. + +-- +Michael Moncur mgm at starlingtech.com http://www.starlingtech.com/ +"Never interrupt your enemy when he is making a mistake." --Napoleon + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01357.cf1f4075b85a439abfc8c0b81bca73ec b/Ch3/datasets/spam/easy_ham/01357.cf1f4075b85a439abfc8c0b81bca73ec new file mode 100644 index 000000000..156de9886 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01357.cf1f4075b85a439abfc8c0b81bca73ec @@ -0,0 +1,73 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:05:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2F96B44160 + for ; Thu, 29 Aug 2002 06:04:46 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:04:46 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SKSEZ09225 for ; Wed, 28 Aug 2002 21:28:14 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k9P7-0000PI-00; Wed, + 28 Aug 2002 13:27:05 -0700 +Received: from lerlaptop.iadfw.net ([206.66.13.21]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17k9Od-0001xH-00 for + ; Wed, 28 Aug 2002 13:26:35 -0700 +Received: from localhost (localhost [127.0.0.1]) by lerlaptop.iadfw.net + (8.12.5/8.12.5) with ESMTP id g7SKQINK036905; Wed, 28 Aug 2002 15:26:19 + -0500 (CDT) (envelope-from ler@lerctr.org) +Subject: Re: [SAtalk] updating SA +From: Larry Rosenman +To: Michael Clark +Cc: spamassassin-talk@example.sourceforge.net +In-Reply-To: +References: +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 +Message-Id: <1030566379.469.47.camel@lerlaptop.iadfw.net> +MIME-Version: 1.0 +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 28 Aug 2002 15:26:18 -0500 +Date: 28 Aug 2002 15:26:18 -0500 + +On Wed, 2002-08-28 at 13:57, Michael Clark wrote: +> To update spamassasin, all I need to do is install the new tar.gz +> file as if it were a new installation? I don't need to stop incoming +> mail or anything like that? Thanks, Mike +If you are using spamd, you will have to stop/restart it. + +-- +Larry Rosenman http://www.lerctr.org/~ler +Phone: +1 972-414-9812 E-Mail: ler@lerctr.org +US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749 + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01358.856ab1787169df5216c2c426392cbfbd b/Ch3/datasets/spam/easy_ham/01358.856ab1787169df5216c2c426392cbfbd new file mode 100644 index 000000000..2c6970eb3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01358.856ab1787169df5216c2c426392cbfbd @@ -0,0 +1,106 @@ +From spamassassin-devel-admin@lists.sourceforge.net Thu Aug 29 11:06:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 4BB1F4415A + for ; Thu, 29 Aug 2002 06:04:50 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:04:50 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SKUiZ09249 for ; Wed, 28 Aug 2002 21:30:44 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k9R0-00012Q-00; Wed, + 28 Aug 2002 13:29:02 -0700 +Received: from host10390-1830.kpnqwest.es ([193.127.103.90] + helo=reypastor.hispalinux.es) by usw-sf-list1.sourceforge.net with esmtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17k9Q0-0002Z0-00 for + ; Wed, 28 Aug 2002 13:28:00 + -0700 +Received: by reypastor.hispalinux.es (Postfix, from userid 1019) id + 479B35B9C0; Wed, 28 Aug 2002 22:27:56 +0200 (CEST) +From: Jesus Climent +To: SpamAssassin-devel@example.sourceforge.net +Subject: Re: [SAdev] 2.40: ready for release? *NO* +Message-Id: <20020828202756.GE8161@reypastor.hispalinux.es> +Mail-Followup-To: SpamAssassin-devel@example.sourceforge.net +References: <20020828184218.399CE43F99@phobos.labs.netnoteinc.com> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="k3qmt+ucFURmlhDS" +Content-Disposition: inline +In-Reply-To: <20020828184218.399CE43F99@phobos.labs.netnoteinc.com> +User-Agent: Mutt/1.3.28i +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 22:27:56 +0200 +Date: Wed, 28 Aug 2002 22:27:56 +0200 + + +--k3qmt+ucFURmlhDS +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Wed, Aug 28, 2002 at 07:42:13PM +0100, Justin Mason wrote: +> OK guys -- I reckon it's now Good Enough, modulo some minor score +> tweaking, or commenting of some more broken/high-FP-ing rules. +>=20 + +Some make test errors here, too: + +Failed 6/20 test scripts, 70.00% okay. 17/182 subtests failed, 90.66% okay. + +J + +--=20 +Jesus Climent | Unix System Admin | Helsinki, Finland. +http://www.HispaLinux.es/~data/ | data.pandacrew.org +------------------------------------------------------ +Please, encrypt mail address to me: GnuPG ID: 86946D69 +FP: BB64 2339 1CAA 7064 E429 7E18 66FC 1D7F 8694 6D69 +------------------------------------------------------ +Registered Linux user #66350 Debian 3.0 & Linux 2.4.19 + +Look at my fingers: four stones, four crates. Zero stones? ZERO CRATES! + --Zorg (The Fifth Element) + +--k3qmt+ucFURmlhDS +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9bTJMZvwdf4aUbWkRAkpYAKDp15ePjG0prpbb/JSMICw6X3xOegCdGsU8 +tdax7QmKey5Vul5DwFDESVc= +=lyD1 +-----END PGP SIGNATURE----- + +--k3qmt+ucFURmlhDS-- + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01359.6da1f33746a38bed81d2e7badd0e33a5 b/Ch3/datasets/spam/easy_ham/01359.6da1f33746a38bed81d2e7badd0e33a5 new file mode 100644 index 000000000..ce1657208 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01359.6da1f33746a38bed81d2e7badd0e33a5 @@ -0,0 +1,93 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:06:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 5804843F99 + for ; Thu, 29 Aug 2002 06:04:53 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:04:53 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SKb5Z09484 for ; Wed, 28 Aug 2002 21:37:06 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k9Wq-0002UP-00; Wed, + 28 Aug 2002 13:35:04 -0700 +Received: from rwcrmhc51.attbi.com ([204.127.198.38]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k9WP-0006SE-00 for ; + Wed, 28 Aug 2002 13:34:37 -0700 +Received: from localhost ([12.229.66.144]) by rwcrmhc51.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020828203427.CHGD14185.rwcrmhc51.attbi.com@localhost> for + ; Wed, 28 Aug 2002 20:34:27 +0000 +Subject: Re: [SAtalk] O.T. Habeus -- Why? +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +From: Brian McNett +To: spamassassin-talk@example.sourceforge.net +Content-Transfer-Encoding: 7bit +In-Reply-To: <1030560510.17408.TMDA@omega.paradigm-omega.net> +Message-Id: <829DCAD0-BAC5-11D6-AD60-003065C182B0@radparker.com> +X-Mailer: Apple Mail (2.482) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 13:34:11 -0700 +Date: Wed, 28 Aug 2002 13:34:11 -0700 + + +On Wednesday, August 28, 2002, at 11:48 AM, Robin Lynn Frank wrote: + +> If I were a spammer, I'd simply set up a server, send out my +> spam with the +> Habeus headers and continue till I was reasonably certain I'd +> been reported. +> Then I'd simply reconfigure the server and reconnect to a +> different IP. As +> long as no one can establish my connection to the web sites my spam is +> directing people to, I'm home free. + +Uh... the reason is simple. Habeas runs something called the +"Habeas Infringers List", and if you use their trademark without +their permission, you'll end up on it. Then, when you send spam +with the misappropriated header, users of SA (2.40 supports +this) will tag your mail as spam, rather than let it through. +This may be done independantly of your IP address, so be +prepared to constantly change domain names, and move your +servers as fast as you send spam. + +Also, that little haiku is a copyrighted work, so not only CAN +Habeas sue, they MUST sue to protect their copyright. And since +it's a trademark as well, that's a double-whammy. Habeas has +some pretty high-powered legal people, who will gladly go to +town on violators. + +The whole point here is to give them the legal leverage they +need to put spammers out of business, and not only block mail +from them, but allow through the things that really AREN'T spam. + +--B + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01360.542f5bf8fe1935cc079504c0a0269923 b/Ch3/datasets/spam/easy_ham/01360.542f5bf8fe1935cc079504c0a0269923 new file mode 100644 index 000000000..096665dc2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01360.542f5bf8fe1935cc079504c0a0269923 @@ -0,0 +1,110 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:06:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7CA984416F + for ; Thu, 29 Aug 2002 06:04:56 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:04:56 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SKqtZ09829 for ; Wed, 28 Aug 2002 21:52:55 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k9mO-0005S1-00; Wed, + 28 Aug 2002 13:51:08 -0700 +Received: from mailman.rexus.com ([216.136.83.173] helo=Mr-Mailman) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17k9m2-0006tk-00 for + ; Wed, 28 Aug 2002 13:50:47 -0700 +Received: from 65.90.119.105 [65.90.119.105] by Mr-Mailman with SMTPBeamer + v3.30 ; Wed, 28 Aug 2002 16:48:10 -0400 +Received: from omega.paradigm-omega.net (localhost.localdomain + [127.0.0.1]) by omega.paradigm-omega.net (Postfix) with ESMTP id + 36BD44C34E for ; Wed, + 28 Aug 2002 13:50:26 -0700 (PDT) +Content-Type: text/plain; charset="iso-8859-1" +Organization: Paradigm-Omega, LLC +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] O.T. Habeus -- Why? +X-Mailer: KMail [version 1.3.1] +References: <829DCAD0-BAC5-11D6-AD60-003065C182B0@radparker.com> +In-Reply-To: <829DCAD0-BAC5-11D6-AD60-003065C182B0@radparker.com> +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +From: Robin Lynn Frank +Message-Id: <1030567825.3271.TMDA@omega.paradigm-omega.net> +X-Delivery-Agent: TMDA/0.61 +Reply-To: Robin Lynn Frank +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 13:50:07 -0700 +Date: Wed, 28 Aug 2002 13:50:07 -0700 + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +On Wednesday 28 August 2002 01:34 pm, Brian McNett wrote: + +> +> Uh... the reason is simple. Habeas runs something called the +> "Habeas Infringers List", and if you use their trademark without +> their permission, you'll end up on it. Then, when you send spam +> with the misappropriated header, users of SA (2.40 supports +> this) will tag your mail as spam, rather than let it through. +> This may be done independantly of your IP address, so be +> prepared to constantly change domain names, and move your +> servers as fast as you send spam. +> +> Also, that little haiku is a copyrighted work, so not only CAN +> Habeas sue, they MUST sue to protect their copyright. And since +> it's a trademark as well, that's a double-whammy. Habeas has +> some pretty high-powered legal people, who will gladly go to +> town on violators. +> +> The whole point here is to give them the legal leverage they +> need to put spammers out of business, and not only block mail +> from them, but allow through the things that really AREN'T spam. +> +> --B +> +And if a spammer forges headers??? +- -- +- ------------------------------------------------------------------------ +Robin Lynn Frank---Director of Operations---Paradigm, Omega, LLC +http://paradigm-omega.com http://paradigm-omega.net +© 2002. All rights reserved. No duplication/dissemination permitted. +Use of PGP/GPG encrypted mail preferred. No HTML/attachments accepted. +Fingerprint: 08E0 567C 63CC 5642 DB6D D490 0F98 D7D3 77EA 3714 +Key Server: http://paradigm-omega.com/keymaster.html +- ------------------------------------------------------------------------ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (GNU/Linux) + +iD8DBQE9bTeHD5jX03fqNxQRArMEAJ4l1p6ToRVaG4j+Dy3R2tzfD9FNvgCfRhU3 +kZo/MbYBSLyI/m1vsN4ZYmM= +=miJB +-----END PGP SIGNATURE----- + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01361.bc57ef0754c9fae5ab89cac38f656200 b/Ch3/datasets/spam/easy_ham/01361.bc57ef0754c9fae5ab89cac38f656200 new file mode 100644 index 000000000..0365ff921 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01361.bc57ef0754c9fae5ab89cac38f656200 @@ -0,0 +1,83 @@ +From spamassassin-devel-admin@lists.sourceforge.net Thu Aug 29 11:06:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id A0E4244164 + for ; Thu, 29 Aug 2002 06:04:59 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:04:59 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SKt8Z09995 for ; Wed, 28 Aug 2002 21:55:08 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k9pF-000674-00; Wed, + 28 Aug 2002 13:54:05 -0700 +Received: from moutng.kundenserver.de ([212.227.126.185]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k9p6-0007FX-00 for ; + Wed, 28 Aug 2002 13:53:56 -0700 +Received: from [212.227.126.155] (helo=mrelayng1.kundenserver.de) by + moutng7.kundenserver.de with esmtp (Exim 3.35 #2) id 17k9p3-0001ZZ-00 for + SpamAssassin-devel@lists.sourceforge.net; Wed, 28 Aug 2002 22:53:53 +0200 +Received: from [80.129.8.19] (helo=silence.homedns.org) by + mrelayng1.kundenserver.de with asmtp (Exim 3.35 #2) id 17k9p3-0005BT-00 + for SpamAssassin-devel@lists.sourceforge.net; Wed, 28 Aug 2002 22:53:53 + +0200 +Received: (qmail 9394 invoked by uid 1000); 28 Aug 2002 20:53:52 -0000 +From: Klaus Heinz +To: SpamAssassin-devel@example.sourceforge.net +Subject: Re: [SAdev] 2.40: ready for release? +Message-Id: <20020828225352.A9191@silence.homedns.org> +Mail-Followup-To: SpamAssassin-devel@example.sourceforge.net +References: <20020828184218.399CE43F99@phobos.labs.netnoteinc.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <20020828184218.399CE43F99@phobos.labs.netnoteinc.com>; + from jm@jmason.org on Wed, Aug 28, 2002 at 07:42:13PM +0100 +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 22:53:52 +0200 +Date: Wed, 28 Aug 2002 22:53:52 +0200 + +Justin Mason wrote: + +> What do you all think? are we ready to go? anyone run into any trouble +> with the new autoconf code, or found a bug from the merge of that spamc + +I am now preparing a small patch to configure.in for NetBSD (possibly +also useful for Open- and FreeBSD, don't know). Should be ready and +tested in the next half hour. + +If you think 2.40 is ready, I would suggest to wait just 24 hours more +for possible reports by b2_4_0 users. Not everyone can follow the +development during daytime (at work). + + +ciao + Klaus + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01362.0892cc75c110776a0de7d611d8bab241 b/Ch3/datasets/spam/easy_ham/01362.0892cc75c110776a0de7d611d8bab241 new file mode 100644 index 000000000..727a6d973 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01362.0892cc75c110776a0de7d611d8bab241 @@ -0,0 +1,96 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:06:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 97A144415C + for ; Thu, 29 Aug 2002 06:05:02 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:05:02 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SL9jZ10361 for ; Wed, 28 Aug 2002 22:09:45 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kA2o-0000w4-00; Wed, + 28 Aug 2002 14:08:06 -0700 +Received: from [64.9.63.52] (helo=falcon.dickinson.edu) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kA2h-0000KY-00 for ; + Wed, 28 Aug 2002 14:08:00 -0700 +Received: from falcon.dickinson.edu by falcon.dickinson.edu + (8.8.8/1.1.22.3/25Feb99-0911AM) id RAA0000008029; Wed, 28 Aug 2002 + 17:07:54 -0400 (EDT) +From: Don Newcomer +To: SpamAssassin Talk list +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Subject: [SAtalk] Tru64 compile of SA +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 17:07:53 -0400 (EDT) +Date: Wed, 28 Aug 2002 17:07:53 -0400 (EDT) + +I'm a new user (or about to be, hopefully) of SA but I've run into some +compilation errors that prevent me from installing. Rather than picking +through the code, I thought I'd avoid reinventing the wheel and ask here. +When I run the 'make', I get the following: + +cc: Error: spamd/spamc.c, line 50: In this declaration, "in_addr_t" has no +linka +ge and has a prior declaration in this scope at line number 572 in file +/usr/inc +lude/sys/types.h. (nolinkage) +typedef unsigned long in_addr_t; /* base type for internet address +*/ +------------------------^ +cc: Warning: spamd/spamc.c, line 169: In this statement, the referenced +type of +the pointer value "msg_buf" is "char", which is not compatible with +"unsigned ch +ar". (ptrmismatch) + if((bytes = full_read (in, msg_buf, max_size+1024, max_size+1024)) > +max_size) +-----------------------------^ +cc: Warning: spamd/spamc.c, line 174: In this statement, the referenced +type of +the pointer value "header_buf" is "char", which is not compatible with +"const un +signed char". (ptrmismatch) + full_write (out,header_buf,bytes2); +--------------------^ + +There are lots more where they came from. Any ideas what can be done? +Thanks in advance. + +================================================================================ +Don Newcomer Dickinson College +Associate Director, System and Network Services P.O. Box 1773 +newcomer@dickinson.edu Carlisle, PA 17013 + Phone: (717) 245-1256 + FAX: (717) 245-1690 + + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01363.77a99b8d1fa345c7fa3af272f41591e1 b/Ch3/datasets/spam/easy_ham/01363.77a99b8d1fa345c7fa3af272f41591e1 new file mode 100644 index 000000000..cc8b5d20a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01363.77a99b8d1fa345c7fa3af272f41591e1 @@ -0,0 +1,87 @@ +From spamassassin-commits-admin@lists.sourceforge.net Thu Aug 29 11:06:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2CC6144173 + for ; Thu, 29 Aug 2002 06:05:12 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:05:12 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SM8rZ12141 for ; Wed, 28 Aug 2002 23:08:53 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kAzn-0007qD-00; Wed, + 28 Aug 2002 15:09:03 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kAzP-0002qb-00 for ; + Wed, 28 Aug 2002 15:08:39 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17kAzN-0005yr-00 for + ; Wed, 28 Aug 2002 15:08:37 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17kAzN-0006Td-00 for + ; Wed, 28 Aug 2002 15:08:37 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin/masses parse-rules-for-masses,1.1.2.2,1.1.2.3 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 15:08:37 -0700 +Date: Wed, 28 Aug 2002 15:08:37 -0700 + +Update of /cvsroot/spamassassin/spamassassin/masses +In directory usw-pr-cvs1:/tmp/cvs-serv24879 + +Modified Files: + Tag: b2_4_0 + parse-rules-for-masses +Log Message: +fix for bug 784 + +Index: parse-rules-for-masses +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/masses/parse-rules-for-masses,v +retrieving revision 1.1.2.2 +retrieving revision 1.1.2.3 +diff -b -w -u -d -r1.1.2.2 -r1.1.2.3 +--- parse-rules-for-masses 28 Aug 2002 13:49:51 -0000 1.1.2.2 ++++ parse-rules-for-masses 28 Aug 2002 22:08:35 -0000 1.1.2.3 +@@ -28,6 +28,7 @@ + + if (!defined $outputfile) { + $outputfile = "./tmp/rules.pl"; ++ mkdir ("tmp", 0755); + } + + my $rules = { }; + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + diff --git a/Ch3/datasets/spam/easy_ham/01364.eaba5be49d5662dd5e3f89a7f430e614 b/Ch3/datasets/spam/easy_ham/01364.eaba5be49d5662dd5e3f89a7f430e614 new file mode 100644 index 000000000..0dc168be8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01364.eaba5be49d5662dd5e3f89a7f430e614 @@ -0,0 +1,90 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:06:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8FA0344167 + for ; Thu, 29 Aug 2002 06:05:15 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:05:15 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SMFiZ12380 for ; Wed, 28 Aug 2002 23:15:44 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kB4e-0001Lv-00; Wed, + 28 Aug 2002 15:14:04 -0700 +Received: from adsl-216-103-211-240.dsl.snfc21.pacbell.net + ([216.103.211.240] helo=proton.pathname.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kB4L-0006hu-00 for ; + Wed, 28 Aug 2002 15:13:45 -0700 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17kB4H-000848-00; Wed, 28 Aug 2002 15:13:41 -0700 +To: Robin Lynn Frank +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] O.T. Habeus -- Why? +References: <1030560510.17408.TMDA@omega.paradigm-omega.net> +From: Daniel Quinlan +In-Reply-To: Robin Lynn Frank's message of "Wed, 28 Aug 2002 11:48:12 -0700" +Message-Id: +X-Mailer: Gnus v5.7/Emacs 20.7 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 28 Aug 2002 15:13:41 -0700 +Date: 28 Aug 2002 15:13:41 -0700 + +Robin Lynn Frank writes: + +> I may be dense, but why would anyone want to utilize Habeus? To me, +> it looks like a potential backdoor to anyone's defenses against spam. +> +> If I were a spammer, I'd simply set up a server, send out my spam with +> the Habeus headers and continue till I was reasonably certain I'd been +> reported. Then I'd simply reconfigure the server and reconnect to a +> different IP. As long as no one can establish my connection to the +> web sites my spam is directing people to, I'm home free. + +Here is the bug I opened: + + http://www.hughes-family.org/bugzilla/show_bug.cgi?id=762 + +RBLs have the same problem, but there is no negative RBL header rule +with a -20 score that can be forged, so the problem is unique to Habeas. + +> Since I can set up spamassassin to I don't "lose" any email, what do I +> gain by making it easier for spam to get through?? + +My primary issue is the magnitude of the negative score and that it was +not determined empirically. I am also concerned that it was added after +the rules freeze, that such a major change was not discussed in advance, +etc. + +There's also no evidence that the rule will actually reduce FPs. People +who are smart enough to use the rule are probably capable of writing +email that doesn't look like spam (I'm not counting spam mailing lists +which you need to be exempted from spam filtering). + +Dan + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01365.6c57c95938ec12a82d900ad529ad95fd b/Ch3/datasets/spam/easy_ham/01365.6c57c95938ec12a82d900ad529ad95fd new file mode 100644 index 000000000..f6e123914 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01365.6c57c95938ec12a82d900ad529ad95fd @@ -0,0 +1,78 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:06:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 50D4344175 + for ; Thu, 29 Aug 2002 06:05:19 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:05:19 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SMPTZ12720 for ; Wed, 28 Aug 2002 23:25:29 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kBEK-0003ev-00; Wed, + 28 Aug 2002 15:24:04 -0700 +Received: from adsl-216-103-211-240.dsl.snfc21.pacbell.net + ([216.103.211.240] helo=proton.pathname.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kBE4-0001J7-00 for ; + Wed, 28 Aug 2002 15:23:48 -0700 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17kBE1-00088a-00; Wed, 28 Aug 2002 15:23:45 -0700 +To: Arnaud Abelard +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] custom score for a given domain? +References: <3D6CE817.20608@sciences.univ-nantes.fr> +From: Daniel Quinlan +In-Reply-To: Arnaud Abelard's message of "Wed, 28 Aug 2002 17:11:19 +0200" +Message-Id: +X-Mailer: Gnus v5.7/Emacs 20.7 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 28 Aug 2002 15:23:45 -0700 +Date: 28 Aug 2002 15:23:45 -0700 + +> MSG_ID_ADDED_BY_MTA (4.0 points) +> INVALID_MSGID (1.8 points) +> MSG_ID_ADDED_BY_MTA_2 (1.6 points) + +Here are the new scores in the 2.40 branch (they may change, but they +are better than before). + +score INVALID_MSGID 1.226 +score MSG_ID_ADDED_BY_MTA 1.696 +score MSG_ID_ADDED_BY_MTA_2 0.532 + +Total of 3.5 which is better than 7.4, I suppose. + +If they fixed their MSGID, it would help. I suppose we could allow +comments without hurting spam detection too much, but I'm reluctant +(it's pretty bizarre to put a comment after the Message-ID header). + +Can you open a bugzilla ticket for this one? + +Dan + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01366.f862e5456473e82837fc0a89c6abf5c2 b/Ch3/datasets/spam/easy_ham/01366.f862e5456473e82837fc0a89c6abf5c2 new file mode 100644 index 000000000..95d29310a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01366.f862e5456473e82837fc0a89c6abf5c2 @@ -0,0 +1,147 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:06:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 78DD64415D + for ; Thu, 29 Aug 2002 06:05:21 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:05:21 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SMPuZ12725 for ; Wed, 28 Aug 2002 23:25:56 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kBEJ-0003eE-00; Wed, + 28 Aug 2002 15:24:03 -0700 +Received: from info.uah.edu ([146.229.5.36]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kBDn-0001Ho-00 for ; + Wed, 28 Aug 2002 15:23:31 -0700 +Received: from info.uah.edu (localhost [127.0.0.1]) by info.uah.edu + (8.12.5/8.12.5) with ESMTP id g7SMNTWI008078 for + ; Wed, 28 Aug 2002 17:23:29 -0500 + (CDT) +Received: from localhost (jim@localhost) by info.uah.edu + (8.12.5/8.12.5/Submit) with ESMTP id g7SMNT2U008075 for + ; Wed, 28 Aug 2002 17:23:29 -0500 + (CDT) +From: Jim McCullars +To: spamassassin-talk@example.sourceforge.net +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Scanned-BY: MIMEDefang 2.17 (www . roaringpenguin . com / mimedefang) +Subject: [SAtalk] Compile error under Digital Unix +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 17:23:29 -0500 (CDT) +Date: Wed, 28 Aug 2002 17:23:29 -0500 (CDT) + +Hi, I'm trying to build SA under Digital Unix 4.0f and am receiving a +compile error (and many warnings) for spamc. The "perl Makefile.PL" +does OK, but when I do the make, I get this: + +cc -std -fprm d -ieee -D_INTRINSICS -I/usr/local/include -DLANGUAGE_C +-O4 spamd +/spamc.c -o spamd/spamc -L/usr/local/lib -lbind -ldbm -ldb -lm -liconv +-lutil +cc: Error: spamd/spamc.c, line 50: In this declaration, "in_addr_t" has +no linkage and has a prior declaration in this scope at line number 592 in file +/usr/include/sys/types.h. (nolinkage) +typedef unsigned long in_addr_t; /* base type for internet +address */ +------------------------^ +cc: Warning: spamd/spamc.c, line 169: In this statement, the referenced +type of +the pointer value "msg_buf" is "char", which is not compatible with +"unsigned char". (ptrmismatch) + if((bytes = full_read (in, msg_buf, max_size+1024, max_size+1024)) > +max_size) +-----------------------------^ +cc: Warning: spamd/spamc.c, line 174: In this statement, the referenced +type of +the pointer value "header_buf" is "char", which is not compatible with +"const unsigned char". (ptrmismatch) + full_write (out,header_buf,bytes2); +--------------------^ +cc: Warning: spamd/spamc.c, line 202: In this statement, the referenced +type of +the pointer value "header_buf" is "char", which is not compatible with +"const unsigned char". (ptrmismatch) + full_write (out,header_buf,bytes2); +--------------------^ +cc: Warning: spamd/spamc.c, line 203: In this statement, the referenced +type of the pointer value "msg_buf" is "char", which is not compatible +with "const unsigned char". (ptrmismatch) + full_write (out,msg_buf,bytes); +--------------------^ +cc: Warning: spamd/spamc.c, line 306: In this statement, the referenced +type of the pointer value "buf" is "char", which is not compatible with +"unsigned char". + (ptrmismatch) + if(full_read (in,buf,2,2) != 2 || !('\r' == buf[0] && '\n' == +buf[1])) +---------------------------^ +cc: Warning: spamd/spamc.c, line 321: In this statement, the referenced +type of +the pointer value "buf" is "char", which is not compatible with +"unsigned char". + (ptrmismatch) + while((bytes=full_read (in,buf,8192, 8192)) > 0) +-------------------------------^ +cc: Warning: spamd/spamc.c, line 348: In this statement, the referenced +type of +the pointer value "out_buf" is "char", which is not compatible with +"const unsigned char". (ptrmismatch) + full_write (out, out_buf, out_index); +-----------------------^ +cc: Warning: spamd/spamc.c, line 497: In this statement, the referenced +type of +the pointer value "msg_buf" is "char", which is not compatible with +"const unsigned char". (ptrmismatch) + full_write (STDOUT_FILENO,msg_buf,amount_read); +--------------------------------^ +cc: Warning: spamd/spamc.c, line 512: In this statement, the referenced +type of +the pointer value "msg_buf" is "char", which is not compatible with +"const unsigned char". (ptrmismatch) + full_write(STDOUT_FILENO,msg_buf,amount_read); +-------------------------------^ +*** Exit 1 +Stop. + +Can anyone suggest a way to get around this? TIA... + +Jim +*-------------------------------------------------------------------------* +* James H. McCullars I Phone: (256) 824-2610 * +* Director of Systems & Operations I Fax: (256) 824-6643 * +* Computer & Network Services I Internet: mccullj@email.uah.edu * +* The University of Alabama I -----------------------------------* +* in Huntsville I * +* Huntsville, AL 35899 I This space for rent - CHEAP! * +*-------------------------------------------------------------------------* + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01367.9a717ca796511aa95c97274c68525fe6 b/Ch3/datasets/spam/easy_ham/01367.9a717ca796511aa95c97274c68525fe6 new file mode 100644 index 000000000..987975c28 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01367.9a717ca796511aa95c97274c68525fe6 @@ -0,0 +1,66 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:07:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8EE4A44156 + for ; Thu, 29 Aug 2002 06:05:25 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:05:25 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SMbHZ13057 for ; Wed, 28 Aug 2002 23:37:18 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kBPx-00075K-00; Wed, + 28 Aug 2002 15:36:05 -0700 +Received: from two.fidnet.com ([216.229.64.72] helo=mail.fidnet.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kBPc-0002ov-00 for ; + Wed, 28 Aug 2002 15:35:45 -0700 +Received: (qmail 31757 invoked from network); 28 Aug 2002 22:35:43 -0000 +Received: from cable-modem-mo-145-11.rolla.fidnet.com (HELO gabriels) + (64.251.145.11) by two.fidnet.com with SMTP; 28 Aug 2002 22:35:43 -0000 +Content-Type: text/plain; charset="us-ascii" +From: Jon Gabrielson +To: spamassassin-talk@example.sourceforge.net +User-Agent: KMail/1.4.3 +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200208281735.33851.jon.g@directfreight.com> +Subject: [SAtalk] moving SPAM: results to bottom of message. +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 17:35:33 -0500 +Date: Wed, 28 Aug 2002 17:35:33 -0500 + +Is there a way to tell spamassassin to put the results at the bottom +of the message instead? If not, what is the easiest way to do this. +I found a report_header, but no equivalent report_bottom. + +Thanks, + +Jon. +jon.g@directfreight.com + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01368.777aeabc5c7bd8e90b3c1cd33438b394 b/Ch3/datasets/spam/easy_ham/01368.777aeabc5c7bd8e90b3c1cd33438b394 new file mode 100644 index 000000000..a0f2179fa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01368.777aeabc5c7bd8e90b3c1cd33438b394 @@ -0,0 +1,88 @@ +From spamassassin-commits-admin@lists.sourceforge.net Thu Aug 29 11:07:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 05DC347C66 + for ; Thu, 29 Aug 2002 06:05:30 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:05:30 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SMkrZ13379 for ; Wed, 28 Aug 2002 23:46:53 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kBaa-0000px-00; Wed, + 28 Aug 2002 15:47:04 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kBa3-000655-00 for ; + Wed, 28 Aug 2002 15:46:31 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17kBa3-0006nR-00 for + ; Wed, 28 Aug 2002 15:46:31 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17kBa2-00013s-00 for + ; Wed, 28 Aug 2002 15:46:30 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin/t SATest.pm,1.15.4.1,1.15.4.2 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 15:46:30 -0700 +Date: Wed, 28 Aug 2002 15:46:30 -0700 + +Update of /cvsroot/spamassassin/spamassassin/t +In directory usw-pr-cvs1:/tmp/cvs-serv3992/t + +Modified Files: + Tag: b2_4_0 + SATest.pm +Log Message: +ok, looks like SA can now be run even with another version installed in /usr, again + +Index: SATest.pm +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/t/SATest.pm,v +retrieving revision 1.15.4.1 +retrieving revision 1.15.4.2 +diff -b -w -u -d -r1.15.4.1 -r1.15.4.2 +--- SATest.pm 27 Aug 2002 21:44:14 -0000 1.15.4.1 ++++ SATest.pm 28 Aug 2002 22:46:28 -0000 1.15.4.2 +@@ -15,7 +15,7 @@ + my $tname = shift; + + $scr = $ENV{'SCRIPT'}; +- $scr ||= "../spamassassin"; ++ $scr ||= "perl -w ../spamassassin"; + + $spamd = $ENV{'SPAMD_SCRIPT'}; + $spamd ||= "../spamd/spamd -x"; + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + diff --git a/Ch3/datasets/spam/easy_ham/01369.164f2b4346151fcef70cd4c71d335ca3 b/Ch3/datasets/spam/easy_ham/01369.164f2b4346151fcef70cd4c71d335ca3 new file mode 100644 index 000000000..c1410dbfa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01369.164f2b4346151fcef70cd4c71d335ca3 @@ -0,0 +1,97 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:07:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8919E4416A + for ; Thu, 29 Aug 2002 06:05:32 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:05:32 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SMqbZ13511 for ; Wed, 28 Aug 2002 23:52:37 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kBdV-0001CS-00; Wed, + 28 Aug 2002 15:50:05 -0700 +Received: from pimout2-ext.prodigy.net ([207.115.63.101]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kBcp-0006qL-00 for ; + Wed, 28 Aug 2002 15:49:23 -0700 +Received: from nightrealms.com (adsl-66-126-173-116.dsl.snfc21.pacbell.net + [66.126.173.116]) by pimout2-ext.prodigy.net (8.11.0/8.11.0) with SMTP id + g7SMnKa349682 for ; + Wed, 28 Aug 2002 18:49:21 -0400 +Received: (qmail 3711 invoked by uid 1001); 28 Aug 2002 22:48:23 -0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Matthew Cline +Organization: Night Realms +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] O.T. Habeus -- Why? +X-Mailer: KMail [version 1.4] +References: <829DCAD0-BAC5-11D6-AD60-003065C182B0@radparker.com> + <1030567825.3271.TMDA@omega.paradigm-omega.net> +In-Reply-To: <1030567825.3271.TMDA@omega.paradigm-omega.net> +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200208281548.21264.matt@nightrealms.com> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 15:48:21 -0700 +Date: Wed, 28 Aug 2002 15:48:21 -0700 + +On Wednesday 28 August 2002 01:50 pm, Robin Lynn Frank wrote: + +> On Wednesday 28 August 2002 01:34 pm, Brian McNett wrote: +> > Also, that little haiku is a copyrighted work, so not only CAN +> > Habeas sue, they MUST sue to protect their copyright. And since +> > it's a trademark as well, that's a double-whammy. Habeas has +> > some pretty high-powered legal people, who will gladly go to +> > town on violators. + +> > The whole point here is to give them the legal leverage they +> > need to put spammers out of business, and not only block mail +> > from them, but allow through the things that really AREN'T spam. + +> And if a spammer forges headers??? + +There must be *some* way of tracking a spammer down, since they are planning +on making money from the spam. What a court would consider evidence of being +the spammer is another question. + +-- +Give a man a match, and he'll be warm for a minute, but set him on +fire, and he'll be warm for the rest of his life. + +ICQ: 132152059 | Advanced SPAM filtering software: http://spamassassin.org + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01370.2b2624810ea623cb3b83e4181c114964 b/Ch3/datasets/spam/easy_ham/01370.2b2624810ea623cb3b83e4181c114964 new file mode 100644 index 000000000..7dec5b7f6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01370.2b2624810ea623cb3b83e4181c114964 @@ -0,0 +1,73 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:07:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C00134415E + for ; Thu, 29 Aug 2002 06:05:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:05:37 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SN6FZ14435 for ; Thu, 29 Aug 2002 00:06:15 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kBs1-0003yD-00; Wed, + 28 Aug 2002 16:05:05 -0700 +Received: from moonbase.zanshin.com ([167.160.213.139]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17kBqz-0003Vv-00 for + ; Wed, 28 Aug 2002 16:04:01 -0700 +Received: from aztec.zanshin.com (IDENT:schaefer@aztec.zanshin.com + [167.160.213.132]) by moonbase.zanshin.com (8.11.0/8.11.0) with ESMTP id + g7SN40J32497 for ; Wed, + 28 Aug 2002 16:04:00 -0700 +From: Bart Schaefer +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] O.T. Habeus -- Why? +In-Reply-To: <200208281548.21264.matt@nightrealms.com> +Message-Id: +Mail-Followup-To: spamassassin-talk@example.sourceforge.net +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 16:04:00 -0700 (PDT) +Date: Wed, 28 Aug 2002 16:04:00 -0700 (PDT) + +On Wed, 28 Aug 2002, Matthew Cline wrote: + +> There must be *some* way of tracking a spammer down, since they are +> planning on making money from the spam. + +Many spammers make money not from response to the spam, but from selling +the service of spamming on behalf of someone else. You might track down +whoever paid for the mailing, but tracking down the actual sender might be +more difficult, and even if they manage to recover damages from the buyer +they haven't stopped the spammer, so the benefit is strictly to Habeas, +not to the recipients of the spam. That's the main problem I have with +the whole scenario: My pain, Habeas's gain, and those most likely to be +held liable are those least likely to be the really serious abusers. + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01371.2e4162848b6034ea5ba93431c6d69d36 b/Ch3/datasets/spam/easy_ham/01371.2e4162848b6034ea5ba93431c6d69d36 new file mode 100644 index 000000000..fc1803912 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01371.2e4162848b6034ea5ba93431c6d69d36 @@ -0,0 +1,434 @@ +From spamassassin-commits-admin@lists.sourceforge.net Thu Aug 29 11:07:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E938744157 + for ; Thu, 29 Aug 2002 06:05:49 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:05:49 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SNTpZ15202 for ; Thu, 29 Aug 2002 00:29:52 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kCGA-00016L-00; Wed, + 28 Aug 2002 16:30:02 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kCFH-0007gM-00 for ; + Wed, 28 Aug 2002 16:29:07 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17kCFG-0007lf-00 for + ; Wed, 28 Aug 2002 16:29:06 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17kCFG-00041w-00 for + ; Wed, 28 Aug 2002 16:29:06 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin configure,1.1.2.1,1.1.2.2 + configure.in,1.1.2.1,1.1.2.2 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 16:29:06 -0700 +Date: Wed, 28 Aug 2002 16:29:06 -0700 + +Update of /cvsroot/spamassassin/spamassassin +In directory usw-pr-cvs1:/tmp/cvs-serv15398 + +Modified Files: + Tag: b2_4_0 + configure configure.in +Log Message: +NetBSD support patch from Klaus Heinz, bug 785 + +Index: configure +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/configure,v +retrieving revision 1.1.2.1 +retrieving revision 1.1.2.2 +diff -b -w -u -d -r1.1.2.1 -r1.1.2.2 +--- configure 27 Aug 2002 23:07:13 -0000 1.1.2.1 ++++ configure 28 Aug 2002 23:29:04 -0000 1.1.2.2 +@@ -1273,18 +1273,22 @@ + cat > conftest.$ac_ext < + #include ++int main() { ++printf ("%d", SHUT_RD); return 0; ++; return 0; } + EOF +-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | +- egrep "SHUT_RD" >/dev/null 2>&1; then ++if { (eval echo configure:1283: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + shutrd=yes + else ++ echo "configure: failed program was:" >&5 ++ cat conftest.$ac_ext >&5 + rm -rf conftest* + shutrd=no + fi +-rm -f conftest* +- ++rm -f conftest*, + + fi + +@@ -1298,7 +1302,7 @@ + + + echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6 +-echo "configure:1302: checking for socket in -lsocket" >&5 ++echo "configure:1306: checking for socket in -lsocket" >&5 + ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'` + if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +@@ -1306,7 +1310,7 @@ + ac_save_LIBS="$LIBS" + LIBS="-lsocket $LIBS" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:1325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" + else +@@ -1345,7 +1349,7 @@ + fi + + echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 +-echo "configure:1349: checking for connect in -linet" >&5 ++echo "configure:1353: checking for connect in -linet" >&5 + ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` + if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +@@ -1353,7 +1357,7 @@ + ac_save_LIBS="$LIBS" + LIBS="-linet $LIBS" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:1372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" + else +@@ -1392,7 +1396,7 @@ + fi + + echo $ac_n "checking for t_accept in -lnsl""... $ac_c" 1>&6 +-echo "configure:1396: checking for t_accept in -lnsl" >&5 ++echo "configure:1400: checking for t_accept in -lnsl" >&5 + ac_lib_var=`echo nsl'_'t_accept | sed 'y%./+-%__p_%'` + if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +@@ -1400,7 +1404,7 @@ + ac_save_LIBS="$LIBS" + LIBS="-lnsl $LIBS" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:1419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" + else +@@ -1439,7 +1443,7 @@ + fi + + echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 +-echo "configure:1443: checking for dlopen in -ldl" >&5 ++echo "configure:1447: checking for dlopen in -ldl" >&5 + ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` + if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +@@ -1447,7 +1451,7 @@ + ac_save_LIBS="$LIBS" + LIBS="-ldl $LIBS" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:1466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" + else +@@ -1489,12 +1493,12 @@ + for ac_func in socket strdup strtod strtol snprintf shutdown + do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +-echo "configure:1493: checking for $ac_func" >&5 ++echo "configure:1497: checking for $ac_func" >&5 + if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:1525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" + else +@@ -1544,20 +1548,20 @@ + + + echo $ac_n "checking for h_errno""... $ac_c" 1>&6 +-echo "configure:1548: checking for h_errno" >&5 ++echo "configure:1552: checking for h_errno" >&5 + if eval "test \"`echo '$''{'herrno'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + + cat > conftest.$ac_ext < + int main() { + printf ("%d", h_errno); return 0; + ; return 0; } + EOF +-if { (eval echo configure:1561: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1565: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + herrno=yes + else +@@ -1580,20 +1584,20 @@ + + + echo $ac_n "checking for optarg""... $ac_c" 1>&6 +-echo "configure:1584: checking for optarg" >&5 ++echo "configure:1588: checking for optarg" >&5 + if eval "test \"`echo '$''{'haveoptarg'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + + cat > conftest.$ac_ext < + int main() { + if (optarg == (char *) 0L) { return 0; } return 1; + ; return 0; } + EOF +-if { (eval echo configure:1597: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1601: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + haveoptarg=yes + else +@@ -1616,20 +1620,21 @@ + + + echo $ac_n "checking for in_addr_t""... $ac_c" 1>&6 +-echo "configure:1620: checking for in_addr_t" >&5 ++echo "configure:1624: checking for in_addr_t" >&5 + if eval "test \"`echo '$''{'inaddrt'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + + cat > conftest.$ac_ext < + #include + int main() { + in_addr_t foo; return 0; + ; return 0; } + EOF +-if { (eval echo configure:1633: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1638: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + inaddrt=yes + else +@@ -1645,12 +1650,12 @@ + echo "$ac_t""$inaddrt" 1>&6 + if test $inaddrt = no ; then + echo $ac_n "checking for in_addr_t""... $ac_c" 1>&6 +-echo "configure:1649: checking for in_addr_t" >&5 ++echo "configure:1654: checking for in_addr_t" >&5 + if eval "test \"`echo '$''{'ac_cv_type_in_addr_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + #if STDC_HEADERS +@@ -1681,20 +1686,21 @@ + + + echo $ac_n "checking for INADDR_NONE""... $ac_c" 1>&6 +-echo "configure:1685: checking for INADDR_NONE" >&5 ++echo "configure:1690: checking for INADDR_NONE" >&5 + if eval "test \"`echo '$''{'haveinaddrnone'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + + cat > conftest.$ac_ext < + #include + int main() { + in_addr_t foo = INADDR_NONE; return 0; + ; return 0; } + EOF +-if { (eval echo configure:1698: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1704: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + haveinaddrnone=yes + else +@@ -1717,20 +1723,23 @@ + + + echo $ac_n "checking for EX__MAX""... $ac_c" 1>&6 +-echo "configure:1721: checking for EX__MAX" >&5 ++echo "configure:1727: checking for EX__MAX" >&5 + if eval "test \"`echo '$''{'haveexmax'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + + cat > conftest.$ac_ext < ++#endif + #include + int main() { + int foo = EX__MAX; return 0; + ; return 0; } + EOF +-if { (eval echo configure:1734: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1743: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + haveexmax=yes + else + +Index: configure.in +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/configure.in,v +retrieving revision 1.1.2.1 +retrieving revision 1.1.2.2 +diff -b -w -u -d -r1.1.2.1 -r1.1.2.2 +--- configure.in 27 Aug 2002 23:07:13 -0000 1.1.2.1 ++++ configure.in 28 Aug 2002 23:29:04 -0000 1.1.2.2 +@@ -26,9 +26,11 @@ + + AC_CACHE_CHECK([for SHUT_RD], + shutrd, [ +- AC_EGREP_HEADER(SHUT_RD, sys/socket.h, ++ AC_TRY_COMPILE([#include ++#include ], ++ [printf ("%d", SHUT_RD); return 0;], + [shutrd=yes], +- [shutrd=no]) ++ [shutrd=no]), + ]) + if test $shutrd = yes ; then + AC_DEFINE(HAVE_SHUT_RD) +@@ -73,7 +75,8 @@ + + AC_CACHE_CHECK([for in_addr_t], + inaddrt, [ +- AC_TRY_COMPILE([#include ], ++ AC_TRY_COMPILE([#include ++#include ], + [in_addr_t foo; return 0;], + [inaddrt=yes], + [inaddrt=no]), +@@ -86,7 +89,8 @@ + + AC_CACHE_CHECK([for INADDR_NONE], + haveinaddrnone, [ +- AC_TRY_COMPILE([#include ], ++ AC_TRY_COMPILE([#include ++#include ], + [in_addr_t foo = INADDR_NONE; return 0;], + [haveinaddrnone=yes], + [haveinaddrnone=no]), +@@ -99,7 +103,10 @@ + + AC_CACHE_CHECK([for EX__MAX], + haveexmax, [ +- AC_TRY_COMPILE([#include ], ++ AC_TRY_COMPILE([#ifdef HAVE_SYSEXITS_H ++#include ++#endif ++#include ], + [int foo = EX__MAX; return 0;], + [haveexmax=yes], + [haveexmax=no]), + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + diff --git a/Ch3/datasets/spam/easy_ham/01372.67735089b50706e59ad0573492fc9af2 b/Ch3/datasets/spam/easy_ham/01372.67735089b50706e59ad0573492fc9af2 new file mode 100644 index 000000000..dd9e5ce6a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01372.67735089b50706e59ad0573492fc9af2 @@ -0,0 +1,74 @@ +From spamassassin-devel-admin@lists.sourceforge.net Thu Aug 29 11:07:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0872947C6B + for ; Thu, 29 Aug 2002 06:05:54 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:05:54 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SNa8Z15513 for ; Thu, 29 Aug 2002 00:36:09 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kCL2-0001Un-00; Wed, + 28 Aug 2002 16:35:04 -0700 +Received: from dogma.slashnull.org ([212.17.35.15]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kCKk-0008J2-00 for ; + Wed, 28 Aug 2002 16:34:46 -0700 +Received: (from apache@localhost) by dogma.slashnull.org (8.11.6/8.11.6) + id g7SNYIr15334; Thu, 29 Aug 2002 00:34:18 +0100 +X-Authentication-Warning: dogma.slashnull.org: apache set sender to + jmmail@jmason.org using -f +Received: from 194.125.173.10 (SquirrelMail authenticated user yyyymail) by + jmason.org with HTTP; Thu, 29 Aug 2002 00:34:17 +0100 (IST) +Message-Id: <32978.194.125.173.10.1030577657.squirrel@spamassassin.taint.org> +Subject: Re: [SAdev] 2.40: ready for release? +From: "Justin Mason" +To: felicity@kluge.net +In-Reply-To: <20020828230545.GB6877@kluge.net> +References: <20020828230545.GB6877@kluge.net> +Cc: yyyy@spamassassin.taint.org, SpamAssassin-devel@example.sourceforge.net +X-Mailer: SquirrelMail (version 1.0.6) +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 00:34:17 +0100 (IST) +Date: Thu, 29 Aug 2002 00:34:17 +0100 (IST) + + +> t/db_based_whitelist.Use of bare << to mean <<"" is deprecated at +> ../lib/Mail/SpamAssassin/HTML.pm line 1. Use of bare << to mean <<"" is +> deprecated at ../lib/Mail/SpamAssassin/HTML.pm line 6. Unquoted string + +hmm, could you check your installation? those chars aren't in my +version at all. + +--j. + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01373.fe9c60e3649ce258e8f5f6c40c9b2ce7 b/Ch3/datasets/spam/easy_ham/01373.fe9c60e3649ce258e8f5f6c40c9b2ce7 new file mode 100644 index 000000000..87e9005fe --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01373.fe9c60e3649ce258e8f5f6c40c9b2ce7 @@ -0,0 +1,87 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:07:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 115D644161 + for ; Thu, 29 Aug 2002 06:05:55 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:05:55 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SNgEZ15659 for ; Thu, 29 Aug 2002 00:42:14 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kCOu-0002mF-00; Wed, + 28 Aug 2002 16:39:04 -0700 +Received: from adsl-216-103-211-240.dsl.snfc21.pacbell.net + ([216.103.211.240] helo=proton.pathname.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kCOD-0000uN-00 for ; + Wed, 28 Aug 2002 16:38:21 -0700 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17kCOB-0008Rl-00; Wed, 28 Aug 2002 16:38:19 -0700 +To: Matthew Cline +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] O.T. Habeus -- Why? +References: <829DCAD0-BAC5-11D6-AD60-003065C182B0@radparker.com> + <1030567825.3271.TMDA@omega.paradigm-omega.net> + <200208281548.21264.matt@nightrealms.com> +From: Daniel Quinlan +In-Reply-To: Matthew Cline's message of "Wed, 28 Aug 2002 15:48:21 -0700" +Message-Id: +X-Mailer: Gnus v5.7/Emacs 20.7 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 28 Aug 2002 16:38:19 -0700 +Date: 28 Aug 2002 16:38:19 -0700 + +Matthew Cline writes: + +> There must be *some* way of tracking a spammer down, since they are +> planning on making money from the spam. What a court would consider +> evidence of being the spammer is another question. + +Haha!!! + +Just a few notes: + + - It will be difficult to find, prosecute, and win money from someone + in various non-friendly countries where spam originates (China is a + good example) even if they do officially "respect" copyright law. + + - Law suits take time. Between now and conclusion of the first court + case, we could have years of spam in our mail boxes! + + - Contact information can change: phone numbers, PO boxes, stolen + cell phones, temporary email addresses, etc. + + - Spammers do not always remember to include contact information! I + don't understand it either, but nobody said they were bright. Also, + some spam is non-commercial or sent by a third-party (for example, + "pump and dump" stock scams), so contact information is not strictly + required for the spammer to get their way. + +Dan + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01374.5d5d21f3e389c6de699918082d008fac b/Ch3/datasets/spam/easy_ham/01374.5d5d21f3e389c6de699918082d008fac new file mode 100644 index 000000000..aee914644 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01374.5d5d21f3e389c6de699918082d008fac @@ -0,0 +1,81 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:07:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C123A44162 + for ; Thu, 29 Aug 2002 06:06:00 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:06:00 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7T0AMZ19081 for ; Thu, 29 Aug 2002 01:10:22 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kCqC-0004QL-00; Wed, + 28 Aug 2002 17:07:16 -0700 +Received: from sccrmhc01.attbi.com ([204.127.202.61]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kCpc-00060j-00 for ; + Wed, 28 Aug 2002 17:06:40 -0700 +Received: from localhost ([12.229.66.144]) by sccrmhc01.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020829000611.QMMF11061.sccrmhc01.attbi.com@localhost> for + ; Thu, 29 Aug 2002 00:06:11 +0000 +Subject: Re: [SAtalk] O.T. Habeus -- Why? +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +From: Brian McNett +To: spamassassin-talk@example.sourceforge.net +Content-Transfer-Encoding: 7bit +In-Reply-To: <1030567825.3271.TMDA@omega.paradigm-omega.net> +Message-Id: <135470FA-BAE3-11D6-AD60-003065C182B0@radparker.com> +X-Mailer: Apple Mail (2.482) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 17:05:49 -0700 +Date: Wed, 28 Aug 2002 17:05:49 -0700 + + +On Wednesday, August 28, 2002, at 01:50 PM, Robin Lynn Frank wrote: + +> And if a spammer forges headers??? + +Header forgeries are trivially easy to detect. The main way that +spammers hide their originating IPs is not by forging headers, +but by sending through open proxy servers. It used to be that +spammers used open relay mailserver, but these often betray the +originating IP, and the proliferation of open relay blocklists, +and the introduction of port 25 blocking on the part of many +ISPs make open relays unattractive to spammers. + +One would think, that the combination of a forged Habeas-SWE, +and mail sent through an anonymizing open proxy would be a +fairly good indication of spam. Tracking a spammer to his +meatspace location is not as difficult as you might think, once +you have legal recourse to subpoena records. + +--B + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01375.969eb724c2a164f9a010c82fdec8704a b/Ch3/datasets/spam/easy_ham/01375.969eb724c2a164f9a010c82fdec8704a new file mode 100644 index 000000000..ee5ab8cc0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01375.969eb724c2a164f9a010c82fdec8704a @@ -0,0 +1,130 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:08:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D21D244160 + for ; Thu, 29 Aug 2002 06:06:02 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:06:02 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7T0n0Z21570 for ; Thu, 29 Aug 2002 01:49:01 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kDSh-0002yw-00; Wed, + 28 Aug 2002 17:47:03 -0700 +Received: from sccrmhc01.attbi.com ([204.127.202.61]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kDRu-0001sK-00 for ; + Wed, 28 Aug 2002 17:46:14 -0700 +Received: from localhost ([12.229.66.144]) by sccrmhc01.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020829004607.SVKQ11061.sccrmhc01.attbi.com@localhost> for + ; Thu, 29 Aug 2002 00:46:07 +0000 +Subject: Re: [SAtalk] O.T. Habeus -- Why? +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +From: Brian McNett +To: spamassassin-talk@example.sourceforge.net +Content-Transfer-Encoding: 7bit +In-Reply-To: +Message-Id: +X-Mailer: Apple Mail (2.482) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 17:45:49 -0700 +Date: Wed, 28 Aug 2002 17:45:49 -0700 + + +On Wednesday, August 28, 2002, at 04:38 PM, Daniel Quinlan wrote: + +> Just a few notes: +> +> - It will be difficult to find, prosecute, and win money from someone +> in various non-friendly countries where spam originates (China is a +> good example) even if they do officially "respect" copyright law. + + +A lot of spam which *appears* to originate from China, and even +a lot which advertises websites hosted there, is sent by, and is +done for the benefit of, companies based in the US. The spam +often appears to originate there because it's coming from open +http, or squid proxy servers. It's hosted there because these +spammers are now persona-non-grata on all US ISPs. One hardly +needs to involve the Chinese government in a case where a US +citizen is violating US law. + + +> - Law suits take time. Between now and conclusion of the first court +> case, we could have years of spam in our mail boxes! + +The first court cases were actually concluded years ago. These +include many legal precedents which are used to protect the +rights of ISPs to block mail, and to terminate service to +spammers. + +> - Contact information can change: phone numbers, PO boxes, stolen +> cell phones, temporary email addresses, etc. + +Surprising then, how much information you can find on the +current whereabouts of long-time spammers like Alan Ralksy of +Detroit, Michigan. Ralsky is a guy who even gives interviews to +the news media. If you can connect a specific corpus of spam to +him, his street address is well known. Ralsky is a prime +candidate for lawsuits in any state with an anti-spam law. +Thomas Cowles is another long-time spammer, but last I heard +he'd been jailed for stealing computer equipment from his +business partner, Eddy Marin (also a long time spammer (You've +heard of PopLaunch, right?) + +> - Spammers do not always remember to include contact information! I +> don't understand it either, but nobody said they were bright. Also, +> some spam is non-commercial or sent by a third-party (for example, +> "pump and dump" stock scams), so contact information is not strictly +> required for the spammer to get their way. + +Back when I was working at MAPS, there was a flap over a +pump-and-dump spammer, Rodona Garst. Seems she had an open +file-share on her laptop, and when she forged the wrong domain, +the real owner hacked in and posted all her private information +on a website. Oh, look, it's still there, including the nude +photos: + +http://belps.freewebsites.com/ + +I recall this well, because the SEC was VERY interested in +confirming the validity of the information found online. There +were some "interesting" conversations. This summer, the SEC +released the following: + +http://www.sec.gov/litigation/admin/33-8113.htm + +Yes, the investigation took two years, but the financial penalty +for operating a pump-and-dump scam isn't small. The wheels of +government grind slow, but the grind very fine indeed. + +--B + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01376.d80cb9df41061f317f7a1b8e5c6c4038 b/Ch3/datasets/spam/easy_ham/01376.d80cb9df41061f317f7a1b8e5c6c4038 new file mode 100644 index 000000000..407fc5c40 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01376.d80cb9df41061f317f7a1b8e5c6c4038 @@ -0,0 +1,73 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:08:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 55B8D47C70 + for ; Thu, 29 Aug 2002 06:06:05 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:06:05 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7T0ufZ21838 for ; Thu, 29 Aug 2002 01:56:41 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kDaS-00069z-00; Wed, + 28 Aug 2002 17:55:04 -0700 +Received: from sc-grnvl-66-169-48-229.chartersc.net ([66.169.48.229] + helo=NS.ramblernet.com) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17kDZU-00032I-00 for + ; Wed, 28 Aug 2002 17:54:04 -0700 +Received: from A700 (A700 [192.123.60.2]) by NS.ramblernet.com + (8.11.6/8.11.6) with SMTP id g7T0kvr27715 for + ; Wed, 28 Aug 2002 20:46:57 -0400 +Reply-To: +From: "Ken" +To: +Message-Id: <01da01c24ef6$585238a0$023c7bc0@A700> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook CWS, Build 9.0.2416 (9.0.2910.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Mailscanner: Found to be clean +Subject: [SAtalk] Having a problem +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 20:52:25 -0400 +Date: Wed, 28 Aug 2002 20:52:25 -0400 + +Now that I have spam assassin and mailscanner working, how can I have smap +deleted rather than forwarded? + +I changed spam.actions.conf to "default delete" but it is still sending it +to the recipient. + +Thanks, +Ken + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01377.16cba8696342f88afb336b700c049819 b/Ch3/datasets/spam/easy_ham/01377.16cba8696342f88afb336b700c049819 new file mode 100644 index 000000000..7c6f47ce4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01377.16cba8696342f88afb336b700c049819 @@ -0,0 +1,108 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:08:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3D5444415A + for ; Thu, 29 Aug 2002 06:06:04 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:06:04 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7T0q6Z21641 for ; Thu, 29 Aug 2002 01:52:06 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kDWb-0005U3-00; Wed, + 28 Aug 2002 17:51:05 -0700 +Received: from pimout1-ext.prodigy.net ([207.115.63.77]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kDWB-0002OV-00 for ; + Wed, 28 Aug 2002 17:50:39 -0700 +Received: from nightrealms.com (adsl-66-126-173-116.dsl.snfc21.pacbell.net + [66.126.173.116]) by pimout1-ext.prodigy.net (8.11.0/8.11.0) with SMTP id + g7T0oaw210208 for ; + Wed, 28 Aug 2002 20:50:36 -0400 +Received: (qmail 5016 invoked by uid 1001); 29 Aug 2002 00:49:38 -0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Matthew Cline +Organization: Night Realms +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] O.T. Habeus -- Why? +X-Mailer: KMail [version 1.4] +References: <829DCAD0-BAC5-11D6-AD60-003065C182B0@radparker.com> + <200208281548.21264.matt@nightrealms.com> + +In-Reply-To: +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200208281749.37636.matt@nightrealms.com> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 17:49:37 -0700 +Date: Wed, 28 Aug 2002 17:49:37 -0700 + +On Wednesday 28 August 2002 04:38 pm, Daniel Quinlan wrote: +> Matthew Cline writes: +> > There must be *some* way of tracking a spammer down, since they are +> > planning on making money from the spam. What a court would consider +> > evidence of being the spammer is another question. + +> Haha!!! + +> Just a few notes: + +> - It will be difficult to find, prosecute, and win money from someone +> in various non-friendly countries where spam originates (China is a +> good example) even if they do officially "respect" copyright law. + +SA (and other filters) could be configured to ignore the SWE mark if it +appears to come from/through China. + +> - Spammers do not always remember to include contact information! I +> don't understand it either, but nobody said they were bright. Also, +> some spam is non-commercial or sent by a third-party (for example, +> "pump and dump" stock scams), so contact information is not strictly +> required for the spammer to get their way. + +SA could also be configured so that SWE marks are ignored in messages that +look like third-party spam (like stock scams). Of course, this would still +mean that "The U.N. is going to invade America!" spams with SWE would get +through. Probably also need to ignore SWE in messages that look like +Nigerian scams. + +-- +Give a man a match, and he'll be warm for a minute, but set him on +fire, and he'll be warm for the rest of his life. + +ICQ: 132152059 | Advanced SPAM filtering software: http://spamassassin.org + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01378.b2879080e678334d2473d0e93e89c818 b/Ch3/datasets/spam/easy_ham/01378.b2879080e678334d2473d0e93e89c818 new file mode 100644 index 000000000..b6b5ab9c8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01378.b2879080e678334d2473d0e93e89c818 @@ -0,0 +1,165 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:08:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 12BCA4416E + for ; Thu, 29 Aug 2002 06:06:08 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:06:08 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7T3DWZ26496 for ; Thu, 29 Aug 2002 04:13:32 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kFh7-0004Be-00; Wed, + 28 Aug 2002 20:10:05 -0700 +Received: from [66.120.210.133] (helo=kabul.ad.skymv.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kFgw-0000QV-00 for ; + Wed, 28 Aug 2002 20:09:54 -0700 +Received: from kabul.ad.skymv.com ([192.168.1.70]) by kabul.ad.skymv.com + with Microsoft SMTPSVC(5.0.2195.2966); Wed, 28 Aug 2002 20:09:49 -0700 +Content-Class: urn:content-classes:message +Subject: RE: [SAtalk] O.T. Habeus -- Why? +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Priority: normal +Importance: normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4807.1700 +Message-Id: +X-MS-Has-Attach: +X-MS-Tnef-Correlator: +Thread-Topic: [SAtalk] O.T. Habeus -- Why? +Thread-Index: AcJO7qte24+xcf7ESLmrGiiIRFMj4wAGlwww +From: "Dan Kohn" +To: +X-Originalarrivaltime: 29 Aug 2002 03:09:49.0231 (UTC) FILETIME=[890B3BF0:01C24F09] +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 20:09:49 -0700 +Date: Wed, 28 Aug 2002 20:09:49 -0700 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7T3DWZ26496 + +Guys, the Habeas Infringers List (HIL) exists explicitly to deal with +spammers while we're getting judgments against them and especially in +other countries, where those judgments are harder to get. + +Please note that nobody has ever had an incentive before to go after +regular spammers. Yes, some attorneys general have prosecuted blatant +pyramid schemes, and ISPs have won some theft of service suits, but the +vast majority of spammers go forward with out any legal hassles. So, I +can't understand how Daniel can assert that you can't track spammers +down when it's never really been tried. We can subpoena the records of +the business they spammed on behalf of. We can subpoena the records of +the ISP that provided them service, and of the credit card they used for +the whack-a-mole accounts. We can use private investigators. Yes, +these people are often lowlifes (chickenboners). But, they're not +secret agents. They're just trying to make a buck, and Habeas' whole +business is about finding them and putting them out of business + +Habeas has the incentive to pursue spammers (that use our warrant mark) +in a way that no one ever has had before. Given that our whole business +plan relies on Habeas becoming synonymous with "not spam", I can't +understand why you would assume ahead of time that we will be +unsuccessful, plan for that failure, and in so doing, remove the +potential of success, which is anti-spam filters like SA acting on the +Habeas warrant mark. + +Daniel, it's easy enough for you to change the Habeas scores yourself on +your installation. If Habeas fails to live up to its promise to only +license the warrant mark to non-spammers and to place all violators on +the HIL, then I have no doubt that Justin and Craig will quickly remove +us from the next release. But, you're trying to kill Habeas before it +has a chance to show any promise. + +At the end of the day, SpamAssassin is like the Club, in that it +encourages thieves (spammers) to just go after the next car (those +without SA) rather than yours. Habeas can play the role of LoJack (the +transmitter), in enabling the apprehension of thieves so that they don't +steal any more cars. But only if we're given a chance to succeed. + + - dan +-- +Dan Kohn + + +-----Original Message----- +From: Daniel Quinlan [mailto:quinlan@pathname.com] +Sent: Wednesday, August 28, 2002 16:38 +To: Matthew Cline +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] O.T. Habeus -- Why? + + +Matthew Cline writes: + +> There must be *some* way of tracking a spammer down, since they are +> planning on making money from the spam. What a court would consider +> evidence of being the spammer is another question. + +Haha!!! + +Just a few notes: + + - It will be difficult to find, prosecute, and win money from someone + in various non-friendly countries where spam originates (China is a + good example) even if they do officially "respect" copyright law. + + - Law suits take time. Between now and conclusion of the first court + case, we could have years of spam in our mail boxes! + + - Contact information can change: phone numbers, PO boxes, stolen + cell phones, temporary email addresses, etc. + + - Spammers do not always remember to include contact information! I + don't understand it either, but nobody said they were bright. Also, + some spam is non-commercial or sent by a third-party (for example, + "pump and dump" stock scams), so contact information is not strictly + required for the spammer to get their way. + +Dan + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01379.fa3f6f5c9a842b4bed1a4578d1f56e37 b/Ch3/datasets/spam/easy_ham/01379.fa3f6f5c9a842b4bed1a4578d1f56e37 new file mode 100644 index 000000000..bd76e0dd4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01379.fa3f6f5c9a842b4bed1a4578d1f56e37 @@ -0,0 +1,77 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:08:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 200C043F99 + for ; Thu, 29 Aug 2002 06:06:11 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:06:11 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7T3UJZ27169 for ; Thu, 29 Aug 2002 04:30:19 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kFyY-0002iz-00; Wed, + 28 Aug 2002 20:28:06 -0700 +Received: from [203.65.246.10] (helo=smtp.unet.net.ph) by + usw-sf-list1.sourceforge.net with smtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17kFyO-0006PP-00 for + ; Wed, 28 Aug 2002 20:27:56 -0700 +Received: (qmail 1672 invoked from network); 29 Aug 2002 03:27:47 -0000 +Received: (qfscan 0.5. spam=2/0/0/0 remoteip=172.16.0.211): 29 Aug 2002 + 03:27:47 -0000 +Received: from unknown (HELO gor) (172.16.0.211) by dpe1.unet.net.ph with + DES-CBC3-SHA encrypted SMTP; 29 Aug 2002 03:27:47 -0000 +From: Lars Hansson +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] O.T. Habeus -- Why? +Message-Id: <20020829112725.38902390.lars@unet.net.ph> +In-Reply-To: +References: + +X-Mailer: Sylpheed version 0.8.1 (GTK+ 1.2.10; i386-unknown-openbsd3.1) +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 7bit +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 11:27:25 +0800 +Date: Thu, 29 Aug 2002 11:27:25 +0800 + +On Wed, 28 Aug 2002 17:45:49 -0700 +Brian McNett wrote: + +> The first court cases were actually concluded years ago. These +> include many legal precedents which are used to protect the +> rights of ISPs to block mail, and to terminate service to +> spammers. + +Yeah, but these would be different cases relating to copyright infringements, +not about ISP's blocking mail or not. + + +--- +Lars Hansson + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01380.0a97683490023a8f59c230f5057d15bd b/Ch3/datasets/spam/easy_ham/01380.0a97683490023a8f59c230f5057d15bd new file mode 100644 index 000000000..a237e4bdf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01380.0a97683490023a8f59c230f5057d15bd @@ -0,0 +1,95 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:08:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 32B8444163 + for ; Thu, 29 Aug 2002 06:06:14 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:06:14 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7T4ekZ30210 for ; Thu, 29 Aug 2002 05:40:46 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kH2L-0007lN-00; Wed, + 28 Aug 2002 21:36:05 -0700 +Received: from email.med.yale.edu ([130.132.232.16] + helo=persephone.med.yale.edu) by usw-sf-list1.sourceforge.net with esmtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17kH1X-0006ey-00 for + ; Wed, 28 Aug 2002 21:35:15 -0700 +Received: from yale.edu (pcp01253719pcs.hamden01.ct.comcast.net + [68.63.97.130]) by email.med.yale.edu (PMDF V6.1-1 #40995) with ESMTPS id + <0H1L0WM4D8QOED@email.med.yale.edu> for + Spamassassin-talk@lists.sourceforge.net; Thu, 29 Aug 2002 00:35:12 -0400 + (EDT) +From: Rick Beebe +Subject: Re: [SAtalk] Tru64 compile of SA +To: Don Newcomer +Cc: Spamassassin-talk@example.sourceforge.net +Message-Id: <3D6DA650.2040300@yale.edu> +Organization: Yale School of Medicine +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed; charset=us-ascii +Content-Transfer-Encoding: 7bit +X-Accept-Language: en-us, en +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1b) + Gecko/20020721 +References: +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 00:42:56 -0400 +Date: Thu, 29 Aug 2002 00:42:56 -0400 + +Don Newcomer wrote: +> I'm a new user (or about to be, hopefully) of SA but I've run into some +> compilation errors that prevent me from installing. Rather than picking +> through the code, I thought I'd avoid reinventing the wheel and ask here. +> When I run the 'make', I get the following: +> +> cc: Error: spamd/spamc.c, line 50: In this declaration, "in_addr_t" has no +> linka +> ge and has a prior declaration in this scope at line number 572 in file +> /usr/inc +> lude/sys/types.h. (nolinkage) +> typedef unsigned long in_addr_t; /* base type for internet address +> */ + +Don't worry about the warnings. To fix the error, edit spamc.c and right +after the line that says: + +#define EX__MAX 77 + +Add: + +#if !defined __osf__ +extern char *optarg; +typedef unsigned long in_addr_t; /* base type for internet address */ +#endif + +(you're adding the two lines that start with #). + +--Rick + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01381.e8771e2f2786ccd37b1ecdbecd63c881 b/Ch3/datasets/spam/easy_ham/01381.e8771e2f2786ccd37b1ecdbecd63c881 new file mode 100644 index 000000000..e75250ce3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01381.e8771e2f2786ccd37b1ecdbecd63c881 @@ -0,0 +1,88 @@ +From spamassassin-devel-admin@lists.sourceforge.net Thu Aug 29 11:08:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 36B5E4416F + for ; Thu, 29 Aug 2002 06:06:15 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:06:15 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7T4qPZ30603 for ; Thu, 29 Aug 2002 05:52:25 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kHGo-0002mR-00; Wed, + 28 Aug 2002 21:51:02 -0700 +Received: from adsl-209-204-188-196.sonic.net ([209.204.188.196] + helo=sidebone.sidney.com) by usw-sf-list1.sourceforge.net with esmtp + (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kHGA-00016k-00 for ; + Wed, 28 Aug 2002 21:50:22 -0700 +Received: from siddesktop ([63.150.47.99]) by sidebone.sidney.com + (8.12.5/8.12.5) with SMTP id g7T4nwCp030411; Wed, 28 Aug 2002 21:49:58 + -0700 +Message-Id: <005b01c24f17$823b1f30$fa7d940a@siddesktop> +From: "Sidney Markowitz" +To: "Theo Van Dinter" , + "Justin Mason" +Cc: +References: <20020828230545.GB6877@kluge.net> + <32978.194.125.173.10.1030577657.squirrel@jmason.org> + <20020829022418.GG6877@kluge.net> +Subject: Re: [SAdev] 2.40: ready for release? +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Scanned-BY: MIMEDefang 2.19 (www . roaringpenguin . com / mimedefang) +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 21:49:49 -0700 +Date: Wed, 28 Aug 2002 21:49:49 -0700 + +> It's this section of spamassassin.raw: +> +> <<<<<<< spamassassin.raw +[...snip] } +> =3D=3D=3D=3D=3D=3D=3D +[... snip ...] +> >>>>>>> 1.68.2.10 +[...snip...] + +This is what cvs puts in when you modify the copy of the file on your disk +and someone checks in a change and then you pull an update and cvs can't +figure out how to merge your changes and the checked in changes. The lines +between the <<<<<< and the ===== are in your file and the ones in the next +section are what have been checked in. You must have not noticed the warning +messages about conflicts that cvs gave you when you did the update, and the +"C" flag next to that file when cvs listed the files being pulled. + + -- sidney + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01382.cd81392e9d575f84e9870b00f41e2fcf b/Ch3/datasets/spam/easy_ham/01382.cd81392e9d575f84e9870b00f41e2fcf new file mode 100644 index 000000000..011f949dd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01382.cd81392e9d575f84e9870b00f41e2fcf @@ -0,0 +1,90 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:08:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 96C1647C76 + for ; Thu, 29 Aug 2002 06:06:17 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:06:17 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7T5lcZ00342 for ; Thu, 29 Aug 2002 06:47:38 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kI82-0001mr-00; Wed, + 28 Aug 2002 22:46:02 -0700 +Received: from 12-248-14-26.client.attbi.com ([12.248.14.26] + helo=12-248-11-90.client.attbi.com) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kI75-00013x-00 for ; + Wed, 28 Aug 2002 22:45:03 -0700 +Received: (from skip@localhost) by 12-248-11-90.client.attbi.com + (8.11.6/8.11.6) id g7T5isf30319; Thu, 29 Aug 2002 00:44:54 -0500 +From: Skip Montanaro +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Message-Id: <15725.46293.831269.315365@12-248-11-90.client.attbi.com> +To: Daniel Quinlan +Cc: "Dan Kohn" , + +Subject: Re: [SAtalk] O.T. Habeus -- Why? +In-Reply-To: +References: + +X-Mailer: VM 6.96 under 21.4 (patch 6) "Common Lisp" XEmacs Lucid +Reply-To: skip@pobox.com +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 00:44:53 -0500 +Date: Thu, 29 Aug 2002 00:44:53 -0500 + + + DanQ> I think it would make more sense to start Habeas with a less + DanQ> aggressive score (one which will not give spammers a quick path + DanQ> into everyone's inbox) and after we've seen evidence that the + DanQ> system works, then we can increase the magnitude of the score. + +Better yet, let the GA figure out the correct score. ;-) That will obviously +take awhile since you'll have to acquire enough messages with it, but it +should give you a good idea if the presence of Habeus headers are good spam +indicators or not. If they are, my guess is that Habeus will probably not +succeed. + +Taking things further off-topic: Does Habeus charge a license fee to +organizations who want to use their copyrighted material or is their sole +revenue stream to come from legal judgements? On the one hand, if they +charge license fees, I'd worry that when times got tough they'd be somewhat +less critical of organizations we'd call spammers today in order to generate +license fees. If not, I'd worry the pendulum would swing the other way and +they'd go after legitimate businesses in an attempt to generate more +revenues from judgements and/or out of court settlements. Either way, it +seems like they have an interesting tightrope to walk. + +-- +Skip Montanaro +skip@pobox.com +consulting: http://manatee.mojam.com/~skip/resume.html + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01383.18c85b7ead9efe35b9a128c42e5170fc b/Ch3/datasets/spam/easy_ham/01383.18c85b7ead9efe35b9a128c42e5170fc new file mode 100644 index 000000000..3776836d7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01383.18c85b7ead9efe35b9a128c42e5170fc @@ -0,0 +1,105 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:08:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 2776747C75 + for ; Thu, 29 Aug 2002 06:06:16 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:06:16 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7T5WqZ32177 for ; Thu, 29 Aug 2002 06:32:52 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kHta-0006lU-00; Wed, + 28 Aug 2002 22:31:06 -0700 +Received: from adsl-216-103-211-240.dsl.snfc21.pacbell.net + ([216.103.211.240] helo=proton.pathname.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kHtS-0005oz-00 for ; + Wed, 28 Aug 2002 22:30:58 -0700 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17kHtK-00013z-00; Wed, 28 Aug 2002 22:30:50 -0700 +To: "Dan Kohn" +Cc: +Subject: Re: [SAtalk] O.T. Habeus -- Why? +References: +From: Daniel Quinlan +In-Reply-To: "Dan Kohn"'s message of "Wed, 28 Aug 2002 20:09:49 -0700" +Message-Id: +X-Mailer: Gnus v5.7/Emacs 20.7 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 28 Aug 2002 22:30:50 -0700 +Date: 28 Aug 2002 22:30:50 -0700 + +Dan Kohn writes: + +> Guys, the Habeas Infringers List (HIL) exists explicitly to deal with +> spammers while we're getting judgments against them and especially in +> other countries, where those judgments are harder to get. + +My concern doesn't stem from failing to understand how your business is +intended to work. My concern is the lack of empirical evidence that it +will reduce the amount of uncaught spam. + +> Please note that nobody has ever had an incentive before to go after +> regular spammers. Yes, some attorneys general have prosecuted blatant +> pyramid schemes, and ISPs have won some theft of service suits, but +> the vast majority of spammers go forward with out any legal hassles. +> So, I can't understand how Daniel can assert that you can't track +> spammers down when it's never really been tried. + +Please don't misquote me. I did not assert that you "can't track +spammers". Here is what I said: + +| It will be difficult to find, prosecute, and win money from someone in +| various non-friendly countries where spam originates (China is a good +| example) even if they do officially "respect" copyright law. + +I understand the incentive that you have to pursue spammers, but that +does not directly translate to less spam being sent to my inbox. It is +an indirect effect and the magnitude of the effect may not be sufficient +to counteract the ease with which a -20 score on the mark allows spam to +avoid being tagged as spam. + +> Daniel, it's easy enough for you to change the Habeas scores yourself +> on your installation. If Habeas fails to live up to its promise to +> only license the warrant mark to non-spammers and to place all +> violators on the HIL, then I have no doubt that Justin and Craig will +> quickly remove us from the next release. But, you're trying to kill +> Habeas before it has a chance to show any promise. + +I think I've worked on SA enough to understand that I can localize a +score. I'm just not comfortable with using SpamAssassin as a vehicle +for drumming up your business at the expense of our user base. + +I think it would make more sense to start Habeas with a less aggressive +score (one which will not give spammers a quick path into everyone's +inbox) and after we've seen evidence that the system works, then we can +increase the magnitude of the score. + +Dan + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01384.e7263302093734244d473fe1f7518497 b/Ch3/datasets/spam/easy_ham/01384.e7263302093734244d473fe1f7518497 new file mode 100644 index 000000000..976cabb90 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01384.e7263302093734244d473fe1f7518497 @@ -0,0 +1,86 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 11:08:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9BB5A47C77 + for ; Thu, 29 Aug 2002 06:06:18 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 11:06:18 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7T66TZ01029 for ; Thu, 29 Aug 2002 07:06:30 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kIQS-0006mo-00; Wed, + 28 Aug 2002 23:05:04 -0700 +Received: from yrex.com ([216.40.247.31] helo=host.yrex.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kIPo-0005vK-00 for ; + Wed, 28 Aug 2002 23:04:25 -0700 +Received: (qmail 4581 invoked from network); 29 Aug 2002 06:04:22 -0000 +Received: from mgm.dsl.xmission.com (HELO opus) (204.228.152.186) by + yrex.com with SMTP; 29 Aug 2002 06:04:22 -0000 +From: "Michael Moncur" +To: +Subject: RE: [SAtalk] O.T. Habeus -- Why? +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +In-Reply-To: +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 00:04:14 -0600 +Date: Thu, 29 Aug 2002 00:04:14 -0600 + +> I think I've worked on SA enough to understand that I can localize a +> score. I'm just not comfortable with using SpamAssassin as a vehicle +> for drumming up your business at the expense of our user base. + +This is exactly what I think. SpamAssassin has always been conservative +about adding unproven RBLs and such, and this should be the same. + +> I think it would make more sense to start Habeas with a less aggressive +> score (one which will not give spammers a quick path into everyone's +> inbox) and after we've seen evidence that the system works, then we can +> increase the magnitude of the score. + +I say start it with a zero score and put it in 70_cvs_rules_under_test like +any other unproven rule. Then score it based on actual results, not +promises. My corpus does not yet contain a single non-spam (or spam) message +with a Habeas mark. Based on that, it doesn't impress me and it wouldn't +impress the GA either. Rules with exactly the same statistics are being +dropped from SA right now, and I don't see why this should be any different. + +-- +Michael Moncur mgm at starlingtech.com http://www.starlingtech.com/ +"Furious activity is no substitute for understanding." --H. H. Williams + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01385.2bd848b0b7319c71ebe0fb9282a0a814 b/Ch3/datasets/spam/easy_ham/01385.2bd848b0b7319c71ebe0fb9282a0a814 new file mode 100644 index 000000000..1ea1b348b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01385.2bd848b0b7319c71ebe0fb9282a0a814 @@ -0,0 +1,85 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 13:00:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B7DF643F99 + for ; Thu, 29 Aug 2002 08:00:55 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 13:00:55 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7TBs4Z10782 for ; Thu, 29 Aug 2002 12:54:04 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kNoJ-000192-00; Thu, + 29 Aug 2002 04:50:03 -0700 +Received: from hippo.star.co.uk ([195.216.14.9]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kNo7-0005WZ-00 for ; + Thu, 29 Aug 2002 04:49:51 -0700 +Received: from MATT_LINUX by hippo.star.co.uk via smtpd (for + usw-sf-lists.sourceforge.net [216.136.171.198]) with SMTP; 29 Aug 2002 + 11:40:46 UT +Received: (qmail 18788 invoked from network); 27 Aug 2002 11:45:28 -0000 +Received: from unknown (HELO startechgroup.co.uk) (10.2.100.178) by + matt?dev.int.star.co.uk with SMTP; 27 Aug 2002 11:45:28 -0000 +Message-Id: <3D6E0984.5030708@startechgroup.co.uk> +From: Matt Sergeant +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0rc1) Gecko/20020426 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Urban Boquist +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] SA very slow (hangs?) on this message, or is it just me? +References: <15726.1821.102072.86673@iller.crt.se> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 12:46:12 +0100 +Date: Thu, 29 Aug 2002 12:46:12 +0100 + +Urban Boquist wrote: +> If I run spamassassin on this message: +> +> http://www.boquist.net/stort-sup-brev +> +> it seems to hang. Memory usage goes up to 73MB and stays there. I have +> let it run for an hour before I killed it. This was on a +> Pentium-II-366. Yes, I know, a bit slow, but still... +> +> Can anyone else confirm this hang? Maybe I should just upgrade... + +Don't run SA on mails this large. Most people tend to ignore mails +larger than about 250K in spamassassin processing, because it just kills +performance. There are some known issues with the parsing (such as the +HTML parsing stuff which is much improved in 2.40 which we're soon to +release), but nothing that's too likely to be fixed by 2.40. Perhaps in +2.50 though. + +Matt. + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01386.4421abca51be5e71c1651102468420e2 b/Ch3/datasets/spam/easy_ham/01386.4421abca51be5e71c1651102468420e2 new file mode 100644 index 000000000..c2221f960 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01386.4421abca51be5e71c1651102468420e2 @@ -0,0 +1,91 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 13:42:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C83CE44155 + for ; Thu, 29 Aug 2002 08:42:17 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 13:42:17 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7TCd6Z12467 for ; Thu, 29 Aug 2002 13:39:06 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kOYo-0005wJ-00; Thu, + 29 Aug 2002 05:38:06 -0700 +Received: from panoramix.vasoftware.com ([198.186.202.147]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17kOYE-0006nt-00 for + ; Thu, 29 Aug 2002 05:37:30 -0700 +Received: from hippo.star.co.uk ([195.216.14.9]:4234) by + panoramix.vasoftware.com with smtp (Exim 4.05-VA-mm1 #1 (Debian)) id + 17kOY9-0005jU-00 for ; + Thu, 29 Aug 2002 05:37:25 -0700 +Received: from MATT_LINUX by hippo.star.co.uk via smtpd (for + panoramix.vasoftware.com [198.186.202.147]) with SMTP; 29 Aug 2002 + 12:28:25 UT +Received: (qmail 18838 invoked from network); 27 Aug 2002 12:33:08 -0000 +Received: from unknown (HELO startechgroup.co.uk) (10.2.100.178) by + matt?dev.int.star.co.uk with SMTP; 27 Aug 2002 12:33:08 -0000 +Message-Id: <3D6E14B1.50800@startechgroup.co.uk> +From: Matt Sergeant +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0rc1) Gecko/20020426 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Urban Boquist +Cc: spamassassin-talk@example.sourceforge.net +References: <15726.1821.102072.86673@iller.crt.se> + <3D6E0984.5030708@startechgroup.co.uk> + <15726.5113.595562.513688@iller.crt.se> +Subject: Re: [SAtalk] SA very slow (hangs?) on this message, or is it just me? +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 13:33:53 +0100 +Date: Thu, 29 Aug 2002 13:33:53 +0100 + +Urban Boquist wrote: +> Hi Matt, and thanks for your quick reply. +> +> Matt> Don't run SA on mails this large. +> +> That would be fine, if I only understood how I should do that. I can't +> find anything in the SA documention that mentions some kind of upper +> limit for the size of a message. What should I put in my user_prefs +> file? +> +> I run SA from procmail btw, but I can't imagine that procmail would be +> able to check the size of a message before handing it over to SA? + +That's exactly what it can do: + +:0fw <250000 +| spamassassin -P + + + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01387.cd289cbef7f9cb842982e78e49575ca0 b/Ch3/datasets/spam/easy_ham/01387.cd289cbef7f9cb842982e78e49575ca0 new file mode 100644 index 000000000..03df8b36d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01387.cd289cbef7f9cb842982e78e49575ca0 @@ -0,0 +1,88 @@ +From spamassassin-commits-admin@lists.sourceforge.net Thu Aug 29 14:47:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 4C0DE43F99 + for ; Thu, 29 Aug 2002 09:47:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 14:47:37 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7TDcrZ14654 for ; Thu, 29 Aug 2002 14:38:53 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kPVo-0003WT-00; Thu, + 29 Aug 2002 06:39:04 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kPUm-0001Rm-00 for ; + Thu, 29 Aug 2002 06:38:00 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17kPUY-0008Lf-00 for + ; Thu, 29 Aug 2002 06:37:46 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17kPUX-000201-00 for + ; Thu, 29 Aug 2002 06:37:45 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin procmailrc.example,1.3,1.3.2.1 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 06:37:45 -0700 +Date: Thu, 29 Aug 2002 06:37:45 -0700 + +Update of /cvsroot/spamassassin/spamassassin +In directory usw-pr-cvs1:/tmp/cvs-serv7642 + +Modified Files: + Tag: b2_4_0 + procmailrc.example +Log Message: +added length limit to sample procmail recipe + +Index: procmailrc.example +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/procmailrc.example,v +retrieving revision 1.3 +retrieving revision 1.3.2.1 +diff -b -w -u -d -r1.3 -r1.3.2.1 +--- procmailrc.example 16 Aug 2002 18:34:27 -0000 1.3 ++++ procmailrc.example 29 Aug 2002 13:37:43 -0000 1.3.2.1 +@@ -1,5 +1,7 @@ +-# Pipe the mail through spamassassin ++# Pipe the mail through spamassassin, unless it's over 256k ++# (SpamAssassin can take a long time to process large messages) + :0fw ++* < 256000 + | spamassassin + + # Move it to the "caughtspam" mbox if it was tagged as spam + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + diff --git a/Ch3/datasets/spam/easy_ham/01388.69b4bb3955f65fc32e46fa6e45c65539 b/Ch3/datasets/spam/easy_ham/01388.69b4bb3955f65fc32e46fa6e45c65539 new file mode 100644 index 000000000..e2d5d0884 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01388.69b4bb3955f65fc32e46fa6e45c65539 @@ -0,0 +1,102 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 16:01:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id B71CF44155 + for ; Thu, 29 Aug 2002 11:01:54 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 16:01:54 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7TF0NZ17271 for ; Thu, 29 Aug 2002 16:00:23 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kQlJ-0003kU-00; Thu, + 29 Aug 2002 07:59:09 -0700 +Received: from mailout07.sul.t-online.com ([194.25.134.83]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kQkz-00016c-00 for ; + Thu, 29 Aug 2002 07:58:49 -0700 +Received: from fwd10.sul.t-online.de by mailout07.sul.t-online.com with + smtp id 17kQkw-00088j-00; Thu, 29 Aug 2002 16:58:46 +0200 +Received: from nebukadnezar.msquadrat.de + (520061089980-0001@[217.80.6.131]) by fmrl10.sul.t-online.com with esmtp + id 17kQkr-1PM3HMC; Thu, 29 Aug 2002 16:58:41 +0200 +Received: from otherland (otherland.msquadrat.de [10.10.10.10]) by + nebukadnezar.msquadrat.de (Postfix on SuSE Linux 7.3 (i386)) with ESMTP id + CD1664C86 for ; Thu, 29 Aug 2002 16:58:44 + +0200 (CEST) +Content-Type: text/plain; charset="iso-8859-1" +From: "Malte S. Stretz" +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] SA very slow (hangs?) on this message, or is it just me? +User-Agent: KMail/1.4.3 +References: +In-Reply-To: +X-Accept-Language: de, en +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: Warrant Mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +X-Foo: Bar +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200208291701.27688@malte.stretz.eu.org> +X-Sender: 520061089980-0001@t-dialin.net +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 17:01:27 +0200 +Date: Thu, 29 Aug 2002 17:01:27 +0200 + +On Thursday 29 August 2002 16:39 CET Mike Burger wrote: +> >[...] +> > re-check I find it immediately: +> > :0fw +> > * < 250000 +> > | spamassassin -P +> > +> > Works perfectly now. Sorry for being such a pest! ;-) +> >[...] +> +> I'm using SA via spamc/spamd, and a global /etc/procmail file. I'm +> wondering if this would also work in that fashion. + +spamc will skip every file bigger than 250k on it's own. It's got the +command line switch -s to change this value. But it doesn't hurt of course +to use the procmail limit. + +Malte + +-- +-- Coding is art. +-- + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01389.59a935b5c0c95126a686378c5cac67dd b/Ch3/datasets/spam/easy_ham/01389.59a935b5c0c95126a686378c5cac67dd new file mode 100644 index 000000000..38cb6a141 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01389.59a935b5c0c95126a686378c5cac67dd @@ -0,0 +1,92 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 17:13:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6876B43F9B + for ; Thu, 29 Aug 2002 12:13:53 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 17:13:53 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7TG90Z19705 for ; Thu, 29 Aug 2002 17:09:00 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kRp4-0004cM-00; Thu, + 29 Aug 2002 09:07:06 -0700 +Received: from moutng.kundenserver.de ([212.227.126.189]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kRog-0005uh-00 for ; + Thu, 29 Aug 2002 09:06:42 -0700 +Received: from [212.227.126.160] (helo=mrelayng0.kundenserver.de) by + moutng6.kundenserver.de with esmtp (Exim 3.35 #2) id 17kRod-0005OZ-00 for + spamassassin-talk@lists.sourceforge.net; Thu, 29 Aug 2002 18:06:39 +0200 +Received: from [80.129.0.32] (helo=silence.homedns.org) by + mrelayng0.kundenserver.de with asmtp (Exim 3.35 #2) id 17kRod-00062Q-00 + for spamassassin-talk@lists.sourceforge.net; Thu, 29 Aug 2002 18:06:39 + +0200 +Received: (qmail 2094 invoked by uid 1000); 29 Aug 2002 16:06:29 -0000 +From: Klaus Heinz +To: spamassassin-talk@example.sourceforge.net +Cc: urban@boquist.net +Subject: Re: [SAtalk] SA very slow (hangs?) on this message, or is it just me? +Message-Id: <20020829180628.A1796@silence.homedns.org> +Mail-Followup-To: spamassassin-talk@example.sourceforge.net, + urban@boquist.net +References: <15726.1821.102072.86673@iller.crt.se> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <15726.1821.102072.86673@iller.crt.se>; from + urban@boquist.net on Thu, Aug 29, 2002 at 01:35:57PM +0200 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 18:06:29 +0200 +Date: Thu, 29 Aug 2002 18:06:29 +0200 + +Urban Boquist wrote: + +> it seems to hang. Memory usage goes up to 73MB and stays there. I have +> let it run for an hour before I killed it. This was on a +> Pentium-II-366. Yes, I know, a bit slow, but still... +> +> Can anyone else confirm this hang? Maybe I should just upgrade... +> +> My environment is: SA-2.31, perl-5.6 running on NetBSD-1.6F. + +Version 2.40-cvs (from today) on NetBSD/i386 1.5.2 (Athlon 1500): + + Aug 29 17:55:53 silence spamd[2052]: processing message + <20020829093613.6A00319300@groda.boquist.net> for kh:1234, expecting + 1744014 bytes. + Aug 29 17:57:10 silence spamd[2052]: clean message (2.5/5.0) for + kh:1234 in 77 seconds, 1744014 bytes. + +Resident size about 75MB, according to top. + +ciao + Klaus + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01390.b29cb5347273b971d876082ebf77242e b/Ch3/datasets/spam/easy_ham/01390.b29cb5347273b971d876082ebf77242e new file mode 100644 index 000000000..23f61c7d0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01390.b29cb5347273b971d876082ebf77242e @@ -0,0 +1,95 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 17:13:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7494743F99 + for ; Thu, 29 Aug 2002 12:13:52 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 17:13:52 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7TG6VZ19509 for ; Thu, 29 Aug 2002 17:06:32 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kRlD-0003sE-00; Thu, + 29 Aug 2002 09:03:07 -0700 +Received: from [212.2.188.179] (helo=mandark.labs.netnoteinc.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kRl0-0005Kt-00 for ; + Thu, 29 Aug 2002 09:02:55 -0700 +Received: from phobos.labs.netnoteinc.com (phobos.labs.netnoteinc.com + [192.168.2.14]) by mandark.labs.netnoteinc.com (8.11.6/8.11.6) with ESMTP + id g7TG2l502639; Thu, 29 Aug 2002 17:02:47 +0100 +Received: by phobos.labs.netnoteinc.com (Postfix, from userid 500) id + 9E3C643F99; Thu, 29 Aug 2002 12:00:17 -0400 (EDT) +Received: from phobos (localhost [127.0.0.1]) by + phobos.labs.netnoteinc.com (Postfix) with ESMTP id 993FA33D8F; + Thu, 29 Aug 2002 17:00:17 +0100 (IST) +To: Bart Schaefer +Cc: Spamassassin-Talk +Subject: Re: [SAtalk] O.T. Habeus -- Why? +In-Reply-To: Message from Bart Schaefer of + "Thu, 29 Aug 2002 08:32:08 PDT." + +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020829160017.9E3C643F99@phobos.labs.netnoteinc.com> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 17:00:12 +0100 +Date: Thu, 29 Aug 2002 17:00:12 +0100 + + +Bart Schaefer said: + +> This is off the topic of the rest of this discussion, but amavisd (in all +> its incarnations) and MIMEDefang and several other MTA plugins all reject +> at SMTP time messages that scores higher than some threshold (often 10). + +argh, they do not, do they? the FPs must be just gigantic :( + +> If some new release were to start scoring all spam no higher than 5.1, +> there'd better be _zero_ FPs, because all those filters would drop their +> thresholds to 5. + +Well, my point is more that we should aim our rescoring algorithm so that +a spam hits 5.0. Any higher does us no good, as it means an FP is +a lot harder to recover from, using compensation rules. + +Spams *will* hit higher than that -- that's just the way the scoring works. +but for our code to be effective, and spread the range of scores +correctly, we just have to optimise to hit 1 threshold. + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01391.1b54dd8d1b54c65ecb9fd0e9ecbe55be b/Ch3/datasets/spam/easy_ham/01391.1b54dd8d1b54c65ecb9fd0e9ecbe55be new file mode 100644 index 000000000..6effc56bc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01391.1b54dd8d1b54c65ecb9fd0e9ecbe55be @@ -0,0 +1,81 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 17:24:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 271B243F99 + for ; Thu, 29 Aug 2002 12:24:07 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 17:24:07 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7TGInZ20012 for ; Thu, 29 Aug 2002 17:18:50 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kRzk-0007Cu-00; Thu, + 29 Aug 2002 09:18:08 -0700 +Received: from mail.island.net ([199.60.19.4] helo=mimas.island.net) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17kRzR-0001SF-00 for + ; Thu, 29 Aug 2002 09:17:49 -0700 +Received: from nanaimo.island.net (IDENT:root@nanaimo.island.net + [199.60.19.1]) by mimas.island.net (8.12.4/8.12.4) with ESMTP id + g7TGHkDR025680; Thu, 29 Aug 2002 09:17:46 -0700 +Received: from nanaimo.island.net (IDENT:rogersd@localhost [127.0.0.1]) by + nanaimo.island.net (8.12.4/8.12.4) with ESMTP id g7TGHjME006951; + Thu, 29 Aug 2002 09:17:45 -0700 +Received: (from rogersd@localhost) by nanaimo.island.net + (8.12.4/8.12.4/Submit) id g7TGHjgQ006949; Thu, 29 Aug 2002 09:17:45 -0700 +From: Daniel Rogers +To: "Clayton, Nik [IT]" +Cc: "'spamassassin-talk@example.sourceforge.net'" +Subject: Re: [SAtalk] UPPERCASE_* rules and foreign character sets +Message-Id: <20020829091745.A6605@nanaimo.island.net> +Mail-Followup-To: "Clayton, Nik [IT]" , + "'spamassassin-talk@lists.sourceforge.net'" +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: ; + from nik.clayton@citigroup.com on Thu, Aug 29, 2002 at 11:37:02AM +0100 +X-Scanned-BY: MIMEDefang 2.11 (www dot roaringpenguin dot com slash + mimedefang) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 09:17:45 -0700 +Date: Thu, 29 Aug 2002 09:17:45 -0700 + +On Thu, Aug 29, 2002 at 11:37:02AM +0100, Clayton, Nik [IT] wrote: +> Have the UPPERCASE_* rules been tested on messages in non-English +> character sets, and/or where the message is MIME encoded in some way? +> +> I'm getting a lot of false positives on Japanese mail, and I think the +> encoding is responsible for triggering this rule. + +Like Justin said, this is fixed in CVS. + +Dan. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01392.775dfd40216f19a11446aa0a3d8d1e73 b/Ch3/datasets/spam/easy_ham/01392.775dfd40216f19a11446aa0a3d8d1e73 new file mode 100644 index 000000000..48c4fa737 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01392.775dfd40216f19a11446aa0a3d8d1e73 @@ -0,0 +1,105 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Aug 29 17:35:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 15AE143F99 + for ; Thu, 29 Aug 2002 12:35:04 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 29 Aug 2002 17:35:04 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7TGYiZ20463 for ; Thu, 29 Aug 2002 17:34:44 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kSF9-0001Qi-00; Thu, + 29 Aug 2002 09:34:03 -0700 +Received: from joseki.proulx.com ([216.17.153.58]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kSED-000405-00 for ; + Thu, 29 Aug 2002 09:33:05 -0700 +Received: from misery.proulx.com (misery.proulx.com [192.168.1.108]) by + joseki.proulx.com (Postfix) with ESMTP id 86DF514B33 for + ; Thu, 29 Aug 2002 10:32:57 -0600 + (MDT) +Received: by misery.proulx.com (Postfix, from userid 1000) id 72129A8369; + Thu, 29 Aug 2002 10:32:57 -0600 (MDT) +To: Spamassassin-Talk +Subject: Re: [SAtalk] O.T. Habeus -- Why? +Message-Id: <20020829163257.GD10973@misery.proulx.com> +Mail-Followup-To: Spamassassin-Talk +References: + + <20020829160017.9E3C643F99@phobos.labs.netnoteinc.com> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="9amGYk9869ThD9tj" +Content-Disposition: inline +In-Reply-To: <20020829160017.9E3C643F99@phobos.labs.netnoteinc.com> +User-Agent: Mutt/1.4i +From: bob@proulx.com (Bob Proulx) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 10:32:57 -0600 +Date: Thu, 29 Aug 2002 10:32:57 -0600 + + +--9amGYk9869ThD9tj +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline + +Justin Mason [2002-08-29 17:00:12 +0100]: +> Well, my point is more that we should aim our rescoring algorithm so that +> a spam hits 5.0. Any higher does us no good, as it means an FP is +> a lot harder to recover from, using compensation rules. + +Agreed. + +But I have always thought that the value 5 was not the best value. It +should have been 0. I understand that initially only spammy scores +were included. But I believe the algorithm should be purely +symmetrical and non-spammy negative values should also have been +balancing out the spammy positive values, like they do in SA today. +Then anything that was positive would be spam and anything negative +would be non-spam. (And I guess exactly zero is grey. :-) Today's +choice of 5 just adds an offset. Which I think cause people to assume +things work differently than they do. + +Bob + +--9amGYk9869ThD9tj +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (GNU/Linux) + +iD8DBQE9bky50pRcO8E2ULYRAjI6AJwMoi8s2IUg4XpVAwCqpBC3gcd/cQCfepOm +COS03YufMiFLSHhCZ8KkLxU= +=YwM7 +-----END PGP SIGNATURE----- + +--9amGYk9869ThD9tj-- + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01393.7c259c411369b7039505bc91769f09a6 b/Ch3/datasets/spam/easy_ham/01393.7c259c411369b7039505bc91769f09a6 new file mode 100644 index 000000000..b67adb220 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01393.7c259c411369b7039505bc91769f09a6 @@ -0,0 +1,37 @@ +From quinlan@pathname.com Mon Sep 2 12:32:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9001A43F99 + for ; Mon, 2 Sep 2002 07:32:24 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:32:24 +0100 (IST) +Received: from proton.pathname.com + (adsl-216-103-211-240.dsl.snfc21.pacbell.net [216.103.211.240]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7V0KkZ16711 for + ; Sat, 31 Aug 2002 01:20:47 +0100 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17kw0Z-0001k9-00; Fri, 30 Aug 2002 17:20:59 -0700 +To: yyyy@spamassassin.taint.org (Justin Mason) +Cc: SpamAssassin-devel@sourceforge.net +Subject: Re: [SAdev] GA-assigned SPAM_PHRASE_55_XX score +References: <20020830103221.9148E43F99@phobos.labs.netnoteinc.com> +From: Daniel Quinlan +Date: 30 Aug 2002 17:20:59 -0700 +In-Reply-To: yyyy@spamassassin.taint.org's message of "Fri, 30 Aug 2002 11:32:16 +0100" +Message-Id: +X-Mailer: Gnus v5.7/Emacs 20.7 + +jm@jmason.org (Justin Mason) writes: + +> BTW I tried tweaking some of the scores that lint-rules complained about +> being negative when they shouldn't be, and it *ruined* the results. it's +> worth hand-tweaking a bit, but in some cases, there's counter-intuitive +> combinatorial effects like the above, so be careful when tweaking; run +> a "./logs-to-c && ./evolve -C" to check the new hitrates afterwards. + +My tendency is to say that we shouldn't tweak at all. + +- Dan + diff --git a/Ch3/datasets/spam/easy_ham/01394.cdeefbed999cb93e1643908d2c30f217 b/Ch3/datasets/spam/easy_ham/01394.cdeefbed999cb93e1643908d2c30f217 new file mode 100644 index 000000000..cde68a825 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01394.cdeefbed999cb93e1643908d2c30f217 @@ -0,0 +1,39 @@ +From craig@deersoft.com Mon Sep 2 12:35:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id E03D543F99 + for ; Mon, 2 Sep 2002 07:35:30 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:35:30 +0100 (IST) +Received: from hall.mail.mindspring.net (hall.mail.mindspring.net + [207.69.200.60]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7VKGZZ13334 for ; Sat, 31 Aug 2002 21:16:35 +0100 +Received: from user-11fad9j.dsl.mindspring.com ([66.245.53.51] + helo=belphegore.hughes-family.org) by hall.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17lEfo-0002DR-00; Sat, 31 Aug 2002 16:16:48 -0400 +Received: from balam.hughes-family.org (balam.hughes-family.org + [10.0.240.3]) by belphegore.hughes-family.org (Postfix) with ESMTP id + 8E71AA4AD3; Sat, 31 Aug 2002 13:16:47 -0700 (PDT) +Date: Sat, 31 Aug 2002 13:16:52 -0700 +Subject: Re: [SAdev] results of scorer evaluation +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Cc: spamassassin-devel@example.sourceforge.net +To: "Justin Mason" +From: "Craig R.Hughes" +In-Reply-To: <32836.194.125.148.31.1030699168.squirrel@spamassassin.taint.org> +Message-Id: <96B7CA2C-BD1E-11D6-92D9-00039396ECF2@deersoft.com> +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.482) + +Nanananana + +C + +On Friday, August 30, 2002, at 02:19 AM, Justin Mason wrote: + +> Looks like my algos aren't flexible enough, and Craig wins ;) + + diff --git a/Ch3/datasets/spam/easy_ham/01395.2b05351de956c6df76680ac3d2c8afc6 b/Ch3/datasets/spam/easy_ham/01395.2b05351de956c6df76680ac3d2c8afc6 new file mode 100644 index 000000000..c96b6b11d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01395.2b05351de956c6df76680ac3d2c8afc6 @@ -0,0 +1,93 @@ +From craig@hughes-family.org Mon Sep 2 13:12:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7600944161 + for ; Mon, 2 Sep 2002 07:38:06 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:38:06 +0100 (IST) +Received: from blount.mail.mindspring.net (blount.mail.mindspring.net + [207.69.200.226]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g81B83Z21386 for ; Sun, 1 Sep 2002 12:08:03 +0100 +Received: from user-1120fqe.dsl.mindspring.com ([66.32.63.78] + helo=belphegore.hughes-family.org) by blount.mail.mindspring.net with + esmtp (Exim 3.33 #1) id 17lSaV-0007tD-00; Sun, 01 Sep 2002 07:08:16 -0400 +Received: from belphegore.hughes-family.org (belphegore.hughes-family.org + [10.0.240.200]) by belphegore.hughes-family.org (Postfix) with ESMTP id + BEB2D3C545; Sun, 1 Sep 2002 04:08:14 -0700 (PDT) +Date: Sun, 1 Sep 2002 04:08:14 -0700 (PDT) +From: Craig R Hughes +Reply-To: craig@stanfordalumni.org +To: Daniel Quinlan +Cc: "Craig R.Hughes" , + Justin Mason , + SpamAssassin Developers +Subject: Re: [SAdev] results of scorer evaluation +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII + +Daniel Quinlan wrote: + +DQ> Before we release, it'd be great if someone could test a few +DQ> additional score ranges. Maybe we can lower FPs a bit more. :-) + +I don't think there's much more room for lowering FPs left which the GA can +achieve. Remember, also, that the AWL will reduce FPs, but its effects aren't +factored in to the GA scores. + +The work currently being done on the GA, and comparing different methods of +doing the score-setting, is very worthwhile, and extremely useful; however, we +really ought to get a release out, since 2.31 is getting decreasingly useful as +time goes on. + +The FP/FN rate of 2.40 with pretty well *any* score-setting mechanism will be +better than 2.31 -- we can continue with adjusting how the scores are set on the +2.41 or 2.50 branches. + +DQ> Something like: +DQ> +DQ> for (low = -12; low <= -4; low += 2) +DQ> for (high = 2; high <= 6; high += 2) +DQ> evolve + +You could just allow low and high to be evolved by the GA (within ranges); I'd +be enormously surprised if it didn't end up with low=-12 and high=+6, since +that'd give the GA the broadest lattitude in setting individual scores. The +issue with fixing low and high is not one of optimization, but rather one of +human-based concern that individual scores larger than about +4 are dangerous +and liable to generate FPs, and individual scores less than -8 are dangerous and +liable to be forged to generate FNs. + +DQ> Maybe even add a nybias loop. + +Adding an nybias loop is not worthwhile -- changing nybias scores will just +alter the evaluation function's idea of what the FP:FN ratio should be. + +DQ> > AFAIK there's nothing major hanging out waiting to be checked in +DQ> > on b2_4_0 is there? +DQ> +DQ> Nope. + +Great! + +DQ> > I'll be on IM most of today, tomorrow, and monday while cranking +DQ> > on the next Deersoft product release (should be a fun one). Hit +DQ> > me at: +DQ> > +DQ> > AIM: hugh3scr +DQ> > ICQ: 1130120 +DQ> > MSN: craig@stanfordalumni.org +DQ> > YIM: hughescr +DQ> +DQ> We've been hanging out on IRC at irc.rhizomatic.net on #spamassassin +DQ> (the timezone difference gets in the way, though). + +I've been searching for that, but I guess the details of where the channel was +got lost in the shuffle. + +C + + diff --git a/Ch3/datasets/spam/easy_ham/01396.54a6a27cbd8983e74c7646cb18330f61 b/Ch3/datasets/spam/easy_ham/01396.54a6a27cbd8983e74c7646cb18330f61 new file mode 100644 index 000000000..208e76fa6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01396.54a6a27cbd8983e74c7646cb18330f61 @@ -0,0 +1,102 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Sep 2 16:24:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id EDB0144155 + for ; Mon, 2 Sep 2002 11:23:08 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 16:23:08 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7THd5Z22813 for ; Thu, 29 Aug 2002 18:39:05 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kTF7-0001rd-00; Thu, + 29 Aug 2002 10:38:05 -0700 +Received: from info.uah.edu ([146.229.5.36]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kTEl-0002La-00 for ; + Thu, 29 Aug 2002 10:37:43 -0700 +Received: from info.uah.edu (localhost [127.0.0.1]) by info.uah.edu + (8.12.5/8.12.5) with ESMTP id g7THbbWI017692 for + ; Thu, 29 Aug 2002 12:37:37 -0500 + (CDT) +Received: from localhost (jim@localhost) by info.uah.edu + (8.12.5/8.12.5/Submit) with ESMTP id g7THbbOk017689 for + ; Thu, 29 Aug 2002 12:37:37 -0500 + (CDT) +From: Jim McCullars +To: Spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Tru64 compile of SA +In-Reply-To: <3D6DA650.2040300@yale.edu> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Scanned-BY: MIMEDefang 2.17 (www . roaringpenguin . com / mimedefang) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 12:37:37 -0500 (CDT) +Date: Thu, 29 Aug 2002 12:37:37 -0500 (CDT) + + + +On Thu, 29 Aug 2002, Rick Beebe wrote: + +> > cc: Error: spamd/spamc.c, line 50: In this declaration, "in_addr_t" has no +> > linka +> > ge and has a prior declaration in this scope at line number 572 in file +> > /usr/inc +> > lude/sys/types.h. (nolinkage) +> > typedef unsigned long in_addr_t; /* base type for internet address +> > */ +> +> Don't worry about the warnings. To fix the error, edit spamc.c and right + + Thanks for posting this tip - I had the same problem compiling with +Tru64 and that took care of it. + + When I did the "make install" I got this error: + +LOCK: -f /etc/mail/spamassassin/local.cf + || cp rules/local.cf /etc/mail/spamassassin/local.cf +sh: syntax error at line 1: `||' unexpected +*** Exit 2 +Stop. + + It appears that this comes from the "inst_cfs:" part of the Makefile, +which copies local.cf into /etc/mail/spamassassin. The Makefile has +brackets around the -f test, but they don't show up above. Any ideas? + +Jim +*-------------------------------------------------------------------------* +* James H. McCullars I Phone: (256) 824-2610 * +* Director of Systems & Operations I Fax: (256) 824-6643 * +* Computer & Network Services I Internet: mccullj@email.uah.edu * +* The University of Alabama I -----------------------------------* +* in Huntsville I * +* Huntsville, AL 35899 I This space for rent - CHEAP! * +*-------------------------------------------------------------------------* + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01397.53c38cd7bcd8f13b0d6b784c9265cec1 b/Ch3/datasets/spam/easy_ham/01397.53c38cd7bcd8f13b0d6b784c9265cec1 new file mode 100644 index 000000000..e1a56301d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01397.53c38cd7bcd8f13b0d6b784c9265cec1 @@ -0,0 +1,67 @@ +From felicity@kluge.net Mon Sep 2 23:14:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0426A16F23 + for ; Mon, 2 Sep 2002 23:13:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 23:13:36 +0100 (IST) +Received: from eclectic.kluge.net + (IDENT:c2fwYJ/QZT7DNMfyrqI6/gtl3vme/Kuo@eclectic.kluge.net [66.92.69.221]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82Jk4Z18801 for + ; Mon, 2 Sep 2002 20:46:05 +0100 +Received: (from felicity@localhost) by eclectic.kluge.net (8.11.6/8.11.6) + id g82JkI121455; Mon, 2 Sep 2002 15:46:18 -0400 +Date: Mon, 2 Sep 2002 15:46:18 -0400 +From: Theo Van Dinter +To: Justin Mason +Cc: Spamassassin Devel List +Subject: Re: [SAdev] SpamAssassin v2.40 released (finally)! +Message-Id: <20020902194618.GB15737@kluge.net> +References: <20020902175329.E20EC43F99@phobos.labs.netnoteinc.com> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="eJnRUKwClWJh1Khz" +Content-Disposition: inline +In-Reply-To: <20020902175329.E20EC43F99@phobos.labs.netnoteinc.com> +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 + + +--eJnRUKwClWJh1Khz +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Mon, Sep 02, 2002 at 06:53:24PM +0100, Justin Mason wrote: +> - Razor v2 now supported fully + + Who changed my code? Dns.pm and Reporter.pm WRT Razor +have pointers to $Mail::SpamAssassin::DEBUG, whereas it should be +$Mail::SpamAssassin::DEBUG->{enabled}... + +I'll be submitting a bug/patch for this shortly. + +--=20 +Randomly Generated Tagline: +MA Driving #2: Everything is under construction. + +--eJnRUKwClWJh1Khz +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9c8AKAuOQUeWAs2MRAu/AAJ4iCzGVLRmj/FZmbrmWDiikvy6JWgCcCj9e +DG1iPuFjRLA81ijHNGqnVf4= +=HpKL +-----END PGP SIGNATURE----- + +--eJnRUKwClWJh1Khz-- + diff --git a/Ch3/datasets/spam/easy_ham/01398.71acfbb0cfc859e20438e06955e66d27 b/Ch3/datasets/spam/easy_ham/01398.71acfbb0cfc859e20438e06955e66d27 new file mode 100644 index 000000000..222f0238f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01398.71acfbb0cfc859e20438e06955e66d27 @@ -0,0 +1,80 @@ +From razor-users-admin@lists.sourceforge.net Fri Aug 23 11:06:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 328704415C + for ; Fri, 23 Aug 2002 06:04:24 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:04:24 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MM9TZ27056 for ; Thu, 22 Aug 2002 23:09:29 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17hzvv-0004ra-00; Thu, + 22 Aug 2002 14:56:03 -0700 +Received: from h-66-166-21-186.snvacaid.covad.net ([66.166.21.186] + helo=rover.vipul.net) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17hzvJ-0007dk-00 for + ; Thu, 22 Aug 2002 14:55:26 -0700 +Received: (from vipul@localhost) by rover.vipul.net (8.11.6/8.11.6) id + g7MLtNi02178 for razor-users@lists.sf.net; Thu, 22 Aug 2002 14:55:23 -0700 +From: Vipul Ved Prakash +To: razor-users@example.sourceforge.net +Message-Id: <20020822145523.A2125@rover.vipul.net> +Reply-To: mail@vipul.net +Mail-Followup-To: razor-users@lists.sf.net +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +X-Operating-System: Linux rover.vipul.net 2.4.18 +X-Privacy: If possible, encrypt your reply. Key at http://vipul.net/ +Subject: [Razor-users] honor is not in csl +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 14:55:23 -0700 +Date: Thu, 22 Aug 2002 14:55:23 -0700 + +Folks, + +Some of you seem to have hardcoded honor as the default catalogue server. +There are three catalogue only servers running now, and honor is acting +as a nomination only server. Tonight we will be completely turning off +catalogue support on honor, so if you are specifying honor with the -rs +option, please take it out and let the agents discover a closeby +catalogue server. + +cheers, +vipul. + + +-- + +Vipul Ved Prakash | "The future is here, it's just not +Software Design Artist | widely distributed." +http://vipul.net/ | -- William Gibson + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01399.1bc3334a93af5c1919c0520a12965223 b/Ch3/datasets/spam/easy_ham/01399.1bc3334a93af5c1919c0520a12965223 new file mode 100644 index 000000000..520c76d0a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01399.1bc3334a93af5c1919c0520a12965223 @@ -0,0 +1,101 @@ +From razor-users-admin@lists.sourceforge.net Fri Aug 23 11:06:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BEC6344161 + for ; Fri, 23 Aug 2002 06:04:46 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:04:46 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7N2N7Z05763 for ; Fri, 23 Aug 2002 03:23:08 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17i3yZ-0001kI-00; Thu, + 22 Aug 2002 19:15:03 -0700 +Received: from med-core07.med.wayne.edu ([146.9.19.23]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17i3xv-00078P-00 for ; Thu, + 22 Aug 2002 19:14:23 -0700 +Content-Class: urn:content-classes:message +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +X-Mimeole: Produced By Microsoft Exchange V6.0.6249.0 +Subject: RE: [Razor-users] honor is not in csl +Message-Id: +X-MS-Has-Attach: +X-MS-Tnef-Correlator: +Thread-Topic: [Razor-users] honor is not in csl +Thread-Index: AcJKJ21KJv3jzfLET8CZTYqNyhijJwAIy+hA +From: "Rose, Bobby" +To: , +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 22:14:13 -0400 +Date: Thu, 22 Aug 2002 22:14:13 -0400 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7N2N7Z05763 + +I know that I did this during the week that all the catalogue's were +hokey but after that I changed it back to discovery. So I can see why +people are using honor. + +-----Original Message----- +From: Vipul Ved Prakash [mailto:mail@vipul.net] +Sent: Thursday, August 22, 2002 5:55 PM +To: razor-users@example.sourceforge.net +Subject: [Razor-users] honor is not in csl + + +Folks, + +Some of you seem to have hardcoded honor as the default catalogue +server. There are three catalogue only servers running now, and honor is +acting as a nomination only server. Tonight we will be completely +turning off catalogue support on honor, so if you are specifying honor +with the -rs option, please take it out and let the agents discover a +closeby catalogue server. + +cheers, +vipul. + + +-- + +Vipul Ved Prakash | "The future is here, it's just not +Software Design Artist | widely distributed." +http://vipul.net/ | -- William Gibson + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old cell +phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01400.a654793f35a555abaef51abf76d47d75 b/Ch3/datasets/spam/easy_ham/01400.a654793f35a555abaef51abf76d47d75 new file mode 100644 index 000000000..aaae647d3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01400.a654793f35a555abaef51abf76d47d75 @@ -0,0 +1,73 @@ +From razor-users-admin@lists.sourceforge.net Fri Aug 23 11:07:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 80FFD44169 + for ; Fri, 23 Aug 2002 06:06:22 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:06:22 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7N9wmZ19115 for ; Fri, 23 Aug 2002 10:58:48 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17iB5q-0000SQ-00; Fri, + 23 Aug 2002 02:51:02 -0700 +Received: from mta03-svc.ntlworld.com ([62.253.162.43]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17iB52-0006Wm-00 for ; Fri, + 23 Aug 2002 02:50:12 -0700 +Received: from jblaptop.voidstar.com ([62.255.184.173]) by + mta03-svc.ntlworld.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) + with ESMTP id + <20020823095009.GSXY23840.mta03-svc.ntlworld.com@jblaptop.voidstar.com> + for ; Fri, 23 Aug 2002 10:50:09 +0100 +Message-Id: +To: razor-users@example.sourceforge.net +From: Julian Bond +MIME-Version: 1.0 +Content-Type: text/plain;charset=us-ascii;format=flowed +User-Agent: Turnpike/6.02-U () +Subject: [Razor-users] Razor with sendmail +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 23 Aug 2002 10:48:59 +0100 +Date: Fri, 23 Aug 2002 10:48:59 +0100 + +I'm after a recipe for using Razor with Sendmail. Unfortunately, I can't +get Procmail on my hosting but I do have full access to the Sendmail +alias list. + +Can anyone point me at some docs for this as I couldn't find anything in +the Razor docs. + +-- +Julian Bond Email&MSM: julian.bond@voidstar.com +Webmaster: http://www.ecademy.com/ +Personal WebLog: http://www.voidstar.com/ +CV/Resume: http://www.voidstar.com/cv/ +M: +44 (0)77 5907 2173 T: +44 (0)192 0412 433 + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01401.70777d5f3e75c701de00d7df66e0dcd2 b/Ch3/datasets/spam/easy_ham/01401.70777d5f3e75c701de00d7df66e0dcd2 new file mode 100644 index 000000000..31d35aca0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01401.70777d5f3e75c701de00d7df66e0dcd2 @@ -0,0 +1,78 @@ +From razor-users-admin@lists.sourceforge.net Fri Aug 23 15:20:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 905BD44155 + for ; Fri, 23 Aug 2002 10:20:44 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 15:20:44 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7NE1sZ26754 for ; Fri, 23 Aug 2002 15:01:54 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17iEs3-0000vs-00; Fri, + 23 Aug 2002 06:53:03 -0700 +Received: from [208.7.1.205] (helo=everest.mckee.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17iEra-0005zx-00 for ; Fri, + 23 Aug 2002 06:52:34 -0700 +Received: (qmail 29136 invoked from network); 23 Aug 2002 08:48:57 -0000 +Received: from unknown (HELO belvoir) (208.7.1.202) by 208.7.1.205 with + SMTP; 23 Aug 2002 08:48:57 -0000 +Message-Id: <0dee01c24aac$4e4fd400$7c640f0a@mfc.corp.mckee.com> +From: "Fox" +To: +References: + <003601c247d1$c22de5c0$7c640f0a@mfc.corp.mckee.com> + <009e01c24855$35b5c480$7c640f0a@mfc.corp.mckee.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Subject: [Razor-users] Razor 2.14 - the day after +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 23 Aug 2002 09:51:23 -0400 +Date: Fri, 23 Aug 2002 09:51:23 -0400 + +I recently installed Razor v2.14 and started using it. I am finding it +necessary to whitelist a _lot_ of mailing lists. Some, such as yahoogroups, +I can't whitelist because the from: address is the person making the post, +so I will have to whitelist on another field when I can modify my code to do +so. I wonder if someone is not being careful about their submissions, or if +these are bad mailing lists that don't drop bad mail addresses that become +trollboxes in time. + +Any employee who has left my company more than three years ago is eligible +to become a trollbox. I figure after three years of bounced mail, the list +should have figured out they aren't here any more. + +Fox + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01402.602c05e4bdb1f3e4d293f3f9f5a7baad b/Ch3/datasets/spam/easy_ham/01402.602c05e4bdb1f3e4d293f3f9f5a7baad new file mode 100644 index 000000000..8ef282792 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01402.602c05e4bdb1f3e4d293f3f9f5a7baad @@ -0,0 +1,90 @@ +From razor-users-admin@lists.sourceforge.net Fri Aug 23 16:55:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id F2C8744155 + for ; Fri, 23 Aug 2002 11:55:04 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 16:55:05 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7NFu2Z30493 for ; Fri, 23 Aug 2002 16:56:03 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17iGdS-0001nO-00; Fri, + 23 Aug 2002 08:46:06 -0700 +Received: from 12.ws.pa.net ([206.228.70.126] helo=sparrow.stearns.org) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17iGcr-0000ui-00 for ; Fri, + 23 Aug 2002 08:45:29 -0700 +Received: from localhost (localhost [127.0.0.1]) by sparrow.stearns.org + (8.11.6/8.11.6) with ESMTP id g7NFiiv20819; Fri, 23 Aug 2002 11:44:50 + -0400 +From: William Stearns +X-X-Sender: wstearns@sparrow +Reply-To: William Stearns +To: Fox +Cc: ML-razor-users , + William Stearns +Subject: Re: [Razor-users] Razor 2.14 - the day after +In-Reply-To: <0dee01c24aac$4e4fd400$7c640f0a@mfc.corp.mckee.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 23 Aug 2002 11:44:44 -0400 (EDT) +Date: Fri, 23 Aug 2002 11:44:44 -0400 (EDT) + +Good day, Fox, + +On Fri, 23 Aug 2002, Fox wrote: + +> I recently installed Razor v2.14 and started using it. I am finding it +> necessary to whitelist a _lot_ of mailing lists. Some, such as yahoogroups, +> I can't whitelist because the from: address is the person making the post, +> so I will have to whitelist on another field when I can modify my code to do +> so. I wonder if someone is not being careful about their submissions, or if +> these are bad mailing lists that don't drop bad mail addresses that become +> trollboxes in time. + + I've found excellent luck with the X-Been____There header (____'s +added to to avoid tripping procmail rules): + +____X-Been____There: news@jabber.org + + Cheers, + - Bill + +--------------------------------------------------------------------------- + "Nynex. Iroquois for Moron" + -- A well-known Linux kernel hacker. +-------------------------------------------------------------------------- +William Stearns (wstearns@pobox.com). Mason, Buildkernel, named2hosts, +and ipfwadm2ipchains are at: http://www.stearns.org +-------------------------------------------------------------------------- + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01403.240c78274ebf62c726f214797242b409 b/Ch3/datasets/spam/easy_ham/01403.240c78274ebf62c726f214797242b409 new file mode 100644 index 000000000..c0bb76cc7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01403.240c78274ebf62c726f214797242b409 @@ -0,0 +1,110 @@ +From razor-users-admin@lists.sourceforge.net Mon Aug 26 15:16:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7D46444163 + for ; Mon, 26 Aug 2002 10:14:52 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:14:52 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7NJYMZ05425 for ; Fri, 23 Aug 2002 20:34:22 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17iJpv-0007x8-00; Fri, + 23 Aug 2002 12:11:11 -0700 +Received: from eclectic.kluge.net ([66.92.69.221]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17iJox-0007Os-00 for ; Fri, + 23 Aug 2002 12:10:11 -0700 +Received: (from felicity@localhost) by eclectic.kluge.net (8.11.6/8.11.6) + id g7NJA2g29392; Fri, 23 Aug 2002 15:10:02 -0400 +From: Theo Van Dinter +To: "Rose, Bobby" +Cc: Julian Bond , + razor-users@lists.sourceforge.net +Subject: Re: [Razor-users] Razor with sendmail +Message-Id: <20020823191002.GK12303@kluge.net> +References: +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="hdW7zL/qDS6RXdAL" +Content-Disposition: inline +In-Reply-To: +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 23 Aug 2002 15:10:02 -0400 +Date: Fri, 23 Aug 2002 15:10:02 -0400 + + +--hdW7zL/qDS6RXdAL +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Fri, Aug 23, 2002 at 03:03:05PM -0400, Rose, Bobby wrote: +> If you didn't add it when compile would be one way. Another would be to +> grep your sendmail.cf for the word Milter. + +I don't know if there's a sendmail-ish way (it's not in the -d0.1 output), +but this should work: + +$ strings `which sendmail` | grep -i milter + +If you get a long list of function/message looking phrases, milter +is built-in. If you get something like: + +Warning: Filter usage ('X') requires Milter support (-DMILTER) +Milter Warning: Option: %s requires Milter support (-DMILTER) +@(#)$Id: milter.c,v 1.1.1.2 2002/03/12 18:00:36 zarzycki Exp $ + +then it's not built-in. :) + +--=20 +Randomly Generated Tagline: +"M: Can anyone tell us the lesson that has been learned here? + S: Yes Master, not a single one of us could defeat you. + M: You gain wisdom child ... " - The Frantics + +--hdW7zL/qDS6RXdAL +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9ZoiKAuOQUeWAs2MRAnJ0AJ9ruH+VXGGz/0mrSNVPQljjksTKEQCfSN2h +eED/03ARYS9odlD3qfuuFbA= +=nBsE +-----END PGP SIGNATURE----- + +--hdW7zL/qDS6RXdAL-- + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01404.789355d67d32ceeedce39b891883eed5 b/Ch3/datasets/spam/easy_ham/01404.789355d67d32ceeedce39b891883eed5 new file mode 100644 index 000000000..e6b015823 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01404.789355d67d32ceeedce39b891883eed5 @@ -0,0 +1,77 @@ +From razor-users-admin@lists.sourceforge.net Mon Aug 26 15:16:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3DB0844162 + for ; Mon, 26 Aug 2002 10:14:50 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:14:50 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7NIwMZ04380 for ; Fri, 23 Aug 2002 19:58:22 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17iJVU-0000TE-00; Fri, + 23 Aug 2002 11:50:04 -0700 +Received: from mta01-svc.ntlworld.com ([62.253.162.41]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17iJUa-0004mT-00 for ; Fri, + 23 Aug 2002 11:49:08 -0700 +Received: from jblaptop.voidstar.com ([62.255.184.173]) by + mta01-svc.ntlworld.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) + with ESMTP id + <20020823184905.BGWT25423.mta01-svc.ntlworld.com@jblaptop.voidstar.com> + for ; Fri, 23 Aug 2002 19:49:05 +0100 +Message-Id: +To: razor-users@example.sourceforge.net +From: Julian Bond +Subject: Re: [Razor-users] Razor with sendmail +References: +In-Reply-To: +MIME-Version: 1.0 +Content-Type: text/plain;charset=us-ascii;format=flowed +User-Agent: Turnpike/6.02-U () +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 23 Aug 2002 19:47:53 +0100 +Date: Fri, 23 Aug 2002 19:47:53 +0100 + +"Bort, Paul" wrote: +>If your sendmail has been compiled with Milter support, you can add SMRazor +>easily. We've been using it for a while without problems. Others on the list +>have mentioned it as well. +> +>http://www.sapros.com/smrazor/ + +Is there an easy way to tell if Milter is compiled in? + +-- +Julian Bond Email&MSM: julian.bond@voidstar.com +Webmaster: http://www.ecademy.com/ +Personal WebLog: http://www.voidstar.com/ +CV/Resume: http://www.voidstar.com/cv/ +M: +44 (0)77 5907 2173 T: +44 (0)192 0412 433 + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01405.e574cc5a3baa8e1a715977d29474c6a2 b/Ch3/datasets/spam/easy_ham/01405.e574cc5a3baa8e1a715977d29474c6a2 new file mode 100644 index 000000000..a86360ec5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01405.e574cc5a3baa8e1a715977d29474c6a2 @@ -0,0 +1,98 @@ +From razor-users-admin@lists.sourceforge.net Mon Aug 26 15:16:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 938C844165 + for ; Mon, 26 Aug 2002 10:14:57 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:14:57 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7NJdjZ05699 for ; Fri, 23 Aug 2002 20:39:45 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17iJj7-00056T-00; Fri, + 23 Aug 2002 12:04:09 -0700 +Received: from med-core07.med.wayne.edu ([146.9.19.23]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17iJiD-000698-00 for ; Fri, + 23 Aug 2002 12:03:13 -0700 +Content-Class: urn:content-classes:message +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +X-Mimeole: Produced By Microsoft Exchange V6.0.6249.0 +Subject: RE: [Razor-users] Razor with sendmail +Message-Id: +X-MS-Has-Attach: +X-MS-Tnef-Correlator: +Thread-Topic: [Razor-users] Razor with sendmail +Thread-Index: AcJK1hXMJt8nNXR6S8qFjiGkBId8ggAAWAMg +From: "Rose, Bobby" +To: "Julian Bond" , + +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 23 Aug 2002 15:03:05 -0400 +Date: Fri, 23 Aug 2002 15:03:05 -0400 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7NJdjZ05699 + +If you didn't add it when compile would be one way. Another would be to +grep your sendmail.cf for the word Milter. + +-----Original Message----- +From: Julian Bond [mailto:julian_bond@voidstar.com] +Sent: Friday, August 23, 2002 2:48 PM +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Razor with sendmail + + +"Bort, Paul" wrote: +>If your sendmail has been compiled with Milter support, you can add +>SMRazor easily. We've been using it for a while without problems. +>Others on the list have mentioned it as well. +> +>http://www.sapros.com/smrazor/ + +Is there an easy way to tell if Milter is compiled in? + +-- +Julian Bond Email&MSM: julian.bond@voidstar.com +Webmaster: http://www.ecademy.com/ +Personal WebLog: http://www.voidstar.com/ +CV/Resume: http://www.voidstar.com/cv/ +M: +44 (0)77 5907 2173 T: +44 (0)192 0412 433 + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old cell +phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01406.73967a202d2dbbc9651d0828f3fea38f b/Ch3/datasets/spam/easy_ham/01406.73967a202d2dbbc9651d0828f3fea38f new file mode 100644 index 000000000..af0e02076 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01406.73967a202d2dbbc9651d0828f3fea38f @@ -0,0 +1,103 @@ +From razor-users-admin@lists.sourceforge.net Mon Aug 26 15:16:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0378F44169 + for ; Mon, 26 Aug 2002 10:15:14 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:15:14 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7NKaYZ07246 for ; Fri, 23 Aug 2002 21:36:34 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17iL1M-0000go-00; Fri, + 23 Aug 2002 13:27:04 -0700 +Received: from eclectic.kluge.net ([66.92.69.221]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17iL0h-0003bq-00 for ; Fri, + 23 Aug 2002 13:26:23 -0700 +Received: (from felicity@localhost) by eclectic.kluge.net (8.11.6/8.11.6) + id g7NKQIa00718; Fri, 23 Aug 2002 16:26:18 -0400 +From: Theo Van Dinter +To: Sven Willenberger +Cc: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Razor with sendmail +Message-Id: <20020823202618.GQ12303@kluge.net> +References: + <01aa01c24ae2$2a5baa70$f2812d40@landshark> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="o99acAvKqrTZeiCU" +Content-Disposition: inline +In-Reply-To: <01aa01c24ae2$2a5baa70$f2812d40@landshark> +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 23 Aug 2002 16:26:18 -0400 +Date: Fri, 23 Aug 2002 16:26:18 -0400 + + +--o99acAvKqrTZeiCU +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Fri, Aug 23, 2002 at 04:17:55PM -0400, Sven Willenberger wrote: +> To see all the options compiled into (and version of) sendmail, try the +> following line: +>=20 +> echo \$Z | /path/to/sendmail -bt -d0 + +gives you the same information as "sendmail -d0.1 < /dev/null", which +doesn't include milter information. (actually the -d0 part gives you the +info, the $Z gives you sendmail version out of the test mode (-bt)... so +it's slightly different, but not really.) + +--=20 +Randomly Generated Tagline: +Be warned that typing \fBkillall \fIname\fP may not have the desired + effect on non-Linux systems, especially when done by a privileged user. + (From the killall manual page) + +--o99acAvKqrTZeiCU +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9ZppqAuOQUeWAs2MRAj5BAJ9xX0ndKBQQ8A6hbdoBDFSWMhasXACfXtzK +pjl1dQioTsb92uk/0HUhGbo= +=m9Tu +-----END PGP SIGNATURE----- + +--o99acAvKqrTZeiCU-- + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01407.5388b24c7941469cb0164922cf67d111 b/Ch3/datasets/spam/easy_ham/01407.5388b24c7941469cb0164922cf67d111 new file mode 100644 index 000000000..5c124cb0a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01407.5388b24c7941469cb0164922cf67d111 @@ -0,0 +1,95 @@ +From dwheeler@ida.org Tue Sep 3 17:20:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7C6BB16F69 + for ; Tue, 3 Sep 2002 17:20:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 17:20:19 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [66.38.151.26]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g83G4ZZ26141 for ; Tue, 3 Sep 2002 17:04:36 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 326048F2CD; Tue, 3 Sep 2002 09:00:08 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 21914 invoked from network); 30 Aug 2002 14:21:06 -0000 +Message-Id: <3D6F8139.8040106@ida.org> +Date: Fri, 30 Aug 2002 10:29:13 -0400 +From: David Wheeler +User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:0.9.4.1) + Gecko/20020518 Netscape6/6.2.3 +X-Accept-Language: en-us +MIME-Version: 1.0 +To: Giorgio Zoppi , secprog@securityfocus.com +Subject: Re: Storing passwords +References: <3D66376D.4000809@ida.org> <20020827122630.D7017@cli.di.unipi.it> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit + +If you need to store a database password, then +clearly the first step is to store the text outside the +web tree. You can encrypt it and store the encryption key elsewhere, +so that at least an attacker has to get two different things. +Also, don't get full privileges - create a user account that +is GRANTed very limited access. + +However, you can often do better than this if security +is critical. Create a separate program which has these +database keys (as noted above), and make the web program +contact IT. Create a very limited protocol that ONLY +lets you do the operations you need (you can add specific +operations later). There's a performance hit, which you're +trading for improved data isolation. + + + +Giorgio Zoppi wrote: + +> On Fri, Aug 23, 2002, David Wheeler wrote: +> +> +>>The standard way to store passwords is... not to +>>store passwords. Instead, store a salted hash of +>>the password in a database. When you get a purported +>>password, you re-salt it, compute the hash, and +>>determine if they are the same. This is how +>>Unix has done it for years. You want bigger hashes +>>and salts than the old Unix systems, and you still want +>>to prevent reading from those files (to foil password crackers). +>>More info is in my book at: +>> http://www.dwheeler.com/secure-programs +>> +> +> Well...but this cannot be applied to database password, which most +> web apps use. The only solution I figure is store in clear outside web +> tree, any other ideas feasible? +> +> Ciao, +> Giorgio. +> +> -- +> Never is Forever - deneb@penguin.it +> Homepage: http://www.cli.di.unipi.it/~zoppi/index.html +> -- +> +> +> + + +-- + +--- David A. Wheeler + dwheeler@ida.org + + + diff --git a/Ch3/datasets/spam/easy_ham/01408.3967d7ac324000b3216b1bdadf32ad69 b/Ch3/datasets/spam/easy_ham/01408.3967d7ac324000b3216b1bdadf32ad69 new file mode 100644 index 000000000..ed3a4bde0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01408.3967d7ac324000b3216b1bdadf32ad69 @@ -0,0 +1,65 @@ +From ygingras@eclipsys.qc.ca Tue Sep 3 17:20:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A3EC416F56 + for ; Tue, 3 Sep 2002 17:20:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 17:20:21 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g83G5AZ26175 for + ; Tue, 3 Sep 2002 17:05:10 +0100 +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [66.38.151.26]) by webnote.net (8.9.3/8.9.3) with ESMTP id RAA02213 for + ; Tue, 3 Sep 2002 17:05:24 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 145628F2CC; Tue, 3 Sep 2002 09:00:05 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 13052 invoked from network); 29 Aug 2002 21:32:02 -0000 +Content-Type: text/plain; charset="iso-8859-15" +From: Yannick Gingras +To: secprog@securityfocus.com +Subject: Secure Sofware Key +Date: Thu, 29 Aug 2002 17:46:27 -0400 +X-Mailer: KMail [version 1.3.2] +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <20020829204345.91D1833986@LINPDC.eclipsys.qc.ca> + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + + +Hi, + I am wondering if there are any techniques to make a CD-Key of the like +unbreakable. Either by giving it a cancelation date and a periodic renewal +from a server or just by using self md5 signature on the resulting +executable. I know it must not be easy because the whole software piracy +problem would be resolved but there must be some way to make it really hard +to break it. Anyone have hints on this issue ? + +Thanks + +- -- +Yannick Gingras +Network Programer +ESC:wq +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9bpYzuv7G0DNFO+QRAqBhAKChTeKXwD8zDMwf+okAKJXnnpknwACgtXZ7 +v3bBABue0VX/Uy86Fhn9Ifs= +=Uwqj +-----END PGP SIGNATURE----- + diff --git a/Ch3/datasets/spam/easy_ham/01409.6874e3b9aad08eb5081dfcbaa3871ffe b/Ch3/datasets/spam/easy_ham/01409.6874e3b9aad08eb5081dfcbaa3871ffe new file mode 100644 index 000000000..c5b146690 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01409.6874e3b9aad08eb5081dfcbaa3871ffe @@ -0,0 +1,66 @@ +From ygingras@ygingras.net Tue Sep 3 22:18:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 27A7E16F6B + for ; Tue, 3 Sep 2002 22:18:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 22:18:23 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [66.38.151.26]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g83KUUZ01977 for ; Tue, 3 Sep 2002 21:30:30 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + BA8C68F2C1; Tue, 3 Sep 2002 13:35:21 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 2480 invoked from network); 3 Sep 2002 19:18:22 -0000 +Content-Type: text/plain; charset="iso-8859-15" +From: Yannick Gingras +To: secprog@securityfocus.com +Subject: Re: Secure Sofware Key +Date: Tue, 3 Sep 2002 15:33:52 -0400 +X-Mailer: KMail [version 1.3.2] +References: +In-Reply-To: +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <20020903183103.A5C7733986@LINPDC.eclipsys.qc.ca> + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Le 3 Septembre 2002 12:43, vous avez écrit : +> Yannick, +> You'll want to peruse Fravia's web site on reverse engineering (and other +> things) http://www.woodmann.com/fravia/protec.htm. That specific page +> covers just your concerns. +> +> Josh + +Thanks for the input. Some of the tips are quite portable but are there any +special attentions to take when implementing such shemes on a UNIX system ? + +Thanks. + +- -- +Yannick Gingras +Coder for OBB : Ostentatiously Breathless Brother-in-law +http://OpenBeatBox.org +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9dQ6guv7G0DNFO+QRApsXAKCjD98foVvLjet3x9ExtihruvT7KACeNayD +wDZlxJXjDmLFhNrN97cd73M= +=4Clx +-----END PGP SIGNATURE----- + diff --git a/Ch3/datasets/spam/easy_ham/01410.ea9902d4f7947bd3105d23f2b9874690 b/Ch3/datasets/spam/easy_ham/01410.ea9902d4f7947bd3105d23f2b9874690 new file mode 100644 index 000000000..e83334ffc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01410.ea9902d4f7947bd3105d23f2b9874690 @@ -0,0 +1,75 @@ +From ygingras@ygingras.net Wed Sep 4 11:37:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3BC9E16F21 + for ; Wed, 4 Sep 2002 11:37:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 11:37:01 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [66.38.151.26]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g83MAuZ05212 for ; Tue, 3 Sep 2002 23:10:57 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 6C1F08F616; Tue, 3 Sep 2002 15:13:29 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 1222 invoked from network); 3 Sep 2002 20:11:16 -0000 +Content-Type: text/plain; charset="iso-8859-15" +From: Yannick Gingras +To: secprog@securityfocus.com +Subject: Re: Secure Sofware Key +Date: Tue, 3 Sep 2002 16:26:15 -0400 +X-Mailer: KMail [version 1.3.2] +References: <20020829204345.91D1833986@LINPDC.eclipsys.qc.ca> + <15733.3398.363187.572002@cerise.nosuchdomain.co.uk> +In-Reply-To: <15733.3398.363187.572002@cerise.nosuchdomain.co.uk> +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <20020903192326.C9DA533986@LINPDC.eclipsys.qc.ca> + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +> What do you mean by "CD-Key or the like" (I presume that "of" was a +> typo)? And what do you mean by "unbreakable"? + +"of" was a typo + +Unbreakable would mean here that no one, even previously authorised entity, +could use the system without paying the periodic subscription fee. + +> You need to be far more explicit about the problem which you wish to +> solve, and about the constraints involved. + +It could be an online system that work 95% offline but poll frequently an +offsite server. No mass production CDs, maybe mass personalised d/l like Sun +JDK. + +Nothing is fixed yet, we are looking at the way a software can be protected +from unauthorized utilisation. + +Is the use of "trusted hardware" really worth it ? Does it really make it +more secure ? Look at the DVDs. + +- -- +Yannick Gingras +Coder for OBB : Obdurately Buteonine Bellwether +http://OpenBeatBox.org +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9dRrnuv7G0DNFO+QRAk8nAKClAhTmyrUgP3ko+DEjcvj0mqfjzACgwQvo +WZ6/CMUA23HCMZVycd7XD1Q= +=V2G8 +-----END PGP SIGNATURE----- + diff --git a/Ch3/datasets/spam/easy_ham/01411.f65bc59a6c6b8a80794b04e271148b39 b/Ch3/datasets/spam/easy_ham/01411.f65bc59a6c6b8a80794b04e271148b39 new file mode 100644 index 000000000..d07a0d6c2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01411.f65bc59a6c6b8a80794b04e271148b39 @@ -0,0 +1,91 @@ +From glynn.clements@virgin.net Wed Sep 4 11:37:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 761DB16F20 + for ; Wed, 4 Sep 2002 11:36:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 11:36:58 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [66.38.151.26]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g83M8qZ05177 for ; Tue, 3 Sep 2002 23:08:52 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 204FE8F615; Tue, 3 Sep 2002 15:13:28 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 27519 invoked from network); 3 Sep 2002 19:49:41 -0000 +From: Glynn Clements +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Message-Id: <15733.3398.363187.572002@cerise.nosuchdomain.co.uk> +Date: Tue, 3 Sep 2002 20:28:06 +0100 +To: Yannick Gingras +Cc: secprog@securityfocus.com +Subject: Re: Secure Sofware Key +In-Reply-To: <20020829204345.91D1833986@LINPDC.eclipsys.qc.ca> +References: <20020829204345.91D1833986@LINPDC.eclipsys.qc.ca> +X-Mailer: VM 6.94 under 21.4 (patch 9) "Informed Management (RC2)" XEmacs + Lucid + + +Yannick Gingras wrote: + +> I am wondering if there are any techniques to make a CD-Key of the like +> unbreakable. Either by giving it a cancelation date and a periodic renewal +> from a server or just by using self md5 signature on the resulting +> executable. I know it must not be easy because the whole software piracy +> problem would be resolved but there must be some way to make it really hard +> to break it. Anyone have hints on this issue ? + +What do you mean by "CD-Key or the like" (I presume that "of" was a +typo)? And what do you mean by "unbreakable"? + +You need to be far more explicit about the problem which you wish to +solve, and about the constraints involved. + +Some general points: + +1. For a conventional "CD key" system, where the actual CDs are +mass-produced (where you have many identical CDs), and the entire +system has to work offline, you cannot solve the problem of valid keys +being "traded" (e.g. included along with bootleg copies of the +product). + +If there's an online element involved, you can "tie" keys to a +specific hardware configuration, as is done (AFAIK) for Windows XP's +"product activation". + +2. Anything which uses a symmetric cipher (or hash) is bound to be +vulnerable to reverse engineering of the validation routines within +the executable. + +3. Ultimately, any software mechanism will be vulnerable to +"cracking", i.e. modifying the software to disable or circumvent the +validation checks. + +This can only be prevented by the use of trusted hardware (e.g. a +Palladium-style system). + +Most significantly, the data must be supplied in a form which is only +accessible by that hardware. If anyone can get at the data in a +meaningful (i.e. unencrypted) form, they can extract the useful parts +and discard the rest (i.e. any associated protection mechanisms). + +IOW, you have to "keep the genie in the bottle" at all times. If the +data can be got at just once (even if it requires the use of dedicated +hardware such as a bus analyser), it can then be duplicated and +distributed without limit. + +-- +Glynn Clements + diff --git a/Ch3/datasets/spam/easy_ham/01412.c6d74476958fabc3a2a7572079a6ce8c b/Ch3/datasets/spam/easy_ham/01412.c6d74476958fabc3a2a7572079a6ce8c new file mode 100644 index 000000000..d2a062479 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01412.c6d74476958fabc3a2a7572079a6ce8c @@ -0,0 +1,95 @@ +From glynn.clements@virgin.net Wed Sep 4 18:58:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 05A9216F1F + for ; Wed, 4 Sep 2002 18:58:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 18:58:42 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing3.securityfocus.com + [66.38.151.27]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g84H7dZ11753 for ; Wed, 4 Sep 2002 18:07:40 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 9FE27A30F4; Wed, 4 Sep 2002 10:40:56 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 21503 invoked from network); 3 Sep 2002 22:43:53 -0000 +From: Glynn Clements +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Message-Id: <15733.15859.462448.155446@cerise.nosuchdomain.co.uk> +Date: Tue, 3 Sep 2002 23:55:47 +0100 +To: Yannick Gingras +Cc: secprog@securityfocus.com +Subject: Re: Secure Sofware Key +In-Reply-To: <20020903192326.C9DA533986@LINPDC.eclipsys.qc.ca> +References: <20020829204345.91D1833986@LINPDC.eclipsys.qc.ca> + <15733.3398.363187.572002@cerise.nosuchdomain.co.uk> + <20020903192326.C9DA533986@LINPDC.eclipsys.qc.ca> +X-Mailer: VM 6.94 under 21.4 (patch 9) "Informed Management (RC2)" XEmacs + Lucid + + +Yannick Gingras wrote: + +> > What do you mean by "CD-Key or the like" (I presume that "of" was a +> > typo)? And what do you mean by "unbreakable"? +> +> "of" was a typo +> +> Unbreakable would mean here that no one, even previously authorised entity, +> could use the system without paying the periodic subscription fee. +> +> > You need to be far more explicit about the problem which you wish to +> > solve, and about the constraints involved. +> +> It could be an online system that work 95% offline but poll frequently an +> offsite server. No mass production CDs, maybe mass personalised d/l like Sun +> JDK. +> +> Nothing is fixed yet, we are looking at the way a software can be protected +> from unauthorized utilisation. +> +> Is the use of "trusted hardware" really worth it ? + +Answering that requires fairly complete knowledge of the business +model. But, in all probability: no, it isn't usually worth it. So, it +comes down to how difficult you want to make the cracker's job. + +If the product requires occasional authentication, simple copying +won't work; the product has to be cracked. In which case, the issue is +whether you're actually going to enter into battle with the crackers, +or just make sure that it isn't trivial. + +A lot of it comes down to your customer base. Teenage kids tend to be +more concerned about cost and less concerned about viruses/trojans, +and so more willing to use warez. Fortune-500 corporations are likely +to view matters differently. + +> Does it really make it more secure ? + +Yes; software techniques will only get you so far. Actually, the same +is ultimately true for hardware, but cracking hardware is likely to +require resources other than just labour. + +Almost (?) anything can be reverse engineered. But it may be possible +to ensure that doing so is uneconomical. + +> Look at the DVDs. + +IIRC, CSS was cracked by reverse-engineering a software player; and +one where the developers forgot to encrypt the decryption key at that. + +-- +Glynn Clements + diff --git a/Ch3/datasets/spam/easy_ham/01413.d1561ddcf3ead3a670b4516b3337216c b/Ch3/datasets/spam/easy_ham/01413.d1561ddcf3ead3a670b4516b3337216c new file mode 100644 index 000000000..89a693c20 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01413.d1561ddcf3ead3a670b4516b3337216c @@ -0,0 +1,69 @@ +From ygingras@ygingras.net Wed Sep 4 18:58:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BC18716F21 + for ; Wed, 4 Sep 2002 18:58:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 18:58:47 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [66.38.151.26]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g84HEjZ12085 for ; Wed, 4 Sep 2002 18:14:46 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 5AE888F334; Wed, 4 Sep 2002 10:00:16 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 11511 invoked from network); 4 Sep 2002 00:48:18 -0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Yannick Gingras +To: secprog@securityfocus.com +Subject: Re: Secure Sofware Key +Date: Tue, 3 Sep 2002 21:03:40 -0400 +User-Agent: KMail/1.4.2 +References: <20020829204345.91D1833986@LINPDC.eclipsys.qc.ca> + <20020903192326.C9DA533986@LINPDC.eclipsys.qc.ca> + <15733.15859.462448.155446@cerise.nosuchdomain.co.uk> +In-Reply-To: <15733.15859.462448.155446@cerise.nosuchdomain.co.uk> +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200209032103.44905.ygingras@ygingras.net> + +> > Is the use of "trusted hardware" really worth it ? +> +> Answering that requires fairly complete knowledge of the business +> model. But, in all probability: no, it isn't usually worth it. So, it +> comes down to how difficult you want to make the cracker's job. +> +> > Look at the DVDs. +> +> IIRC, CSS was cracked by reverse-engineering a software player; and +> one where the developers forgot to encrypt the decryption key at that. + +This make me wonder about the relative protection of smart cards. They have +an internal procession unit around 4MHz. Can we consider them as trusted +hardware ? The ability to ship smart cards periodicaly uppon cashing of a +monthly subscription fee would not raise too much the cost of "renting" the +system. Smart card do their own self encryption. Can they be used to +decrypt data needed by the system ? The input of the system could me mangled +and the would keep a reference of how long it was in service. + +This sounds really feasible but I may be totaly wrong. I may also be wrong +about the safety of a smart card. + +What do you think ? + +-- +Yannick Gingras +Coder for OBB : Oceangoing Bared Bonanza +http://OpenBeatBox.org + + diff --git a/Ch3/datasets/spam/easy_ham/01414.162de78ddf6779f2130568460cbe2924 b/Ch3/datasets/spam/easy_ham/01414.162de78ddf6779f2130568460cbe2924 new file mode 100644 index 000000000..8ade2f5ea --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01414.162de78ddf6779f2130568460cbe2924 @@ -0,0 +1,76 @@ +From ygingras@ygingras.net Wed Sep 4 18:59:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 821DE16F49 + for ; Wed, 4 Sep 2002 18:58:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 18:58:53 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing3.securityfocus.com + [66.38.151.27]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g84HOPZ12385 for ; Wed, 4 Sep 2002 18:24:25 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 3E30AA35FF; Wed, 4 Sep 2002 10:55:38 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 4415 invoked from network); 4 Sep 2002 10:36:32 -0000 +Content-Type: text/plain; charset="iso-8859-15" +From: Yannick Gingras +To: secprog@securityfocus.com +Subject: Re: Secure Sofware Key +Date: Wed, 4 Sep 2002 06:52:07 -0400 +User-Agent: KMail/1.4.2 +References: <20020829204345.91D1833986@LINPDC.eclipsys.qc.ca> + <20020903192326.C9DA533986@LINPDC.eclipsys.qc.ca> + <002c01c253c3$5d522d70$740aa8c0@fmmobile> +In-Reply-To: <002c01c253c3$5d522d70$740aa8c0@fmmobile> +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200209040652.07546.ygingras@ygingras.net> + +> Software vendors have been trying since forever to prevent software piracy. +> Remember when you had to enter a specific word from a specific page of the +> software manual, which was printed on dark maroon paper so that it could +> not be photocopied? Didn't work. Propritery encoding of DVD's? Didn't +> work. Software that required the use of a registration key? Didn't work. +> Windows XP was shipped with this supposedly revolutionary method for +> stopping piracy, and what happened? How long was it before the code was +> cracked? How many keygens are there for Windows XP? Is someone running a +> pirated version of XP really going to use Windows Update to installed a +> service pack which breaks their OS? Just because M$ didn't include the +> change in their README? Fat chance. + +My problem is not the same as MS's one, I don't have to deal with millions of +identical copy of the same CD with propably millions of working keys. Each +download can be unique with a small preparation delay. The key generator is +a problem only if multiple keys are usable. If the end users are teenagers, +you'll face a huge wall when asking to be 100% of the time online but if we +think of something like a health care system that keep track of patients +personnal information, the end user will be willing to take every possible +steps to protect the system from his own employees to use illegaly. + +I agree with all of you that mass production CDs will not be safe from piracy +in a near futur. That can be seen as a collateral of mass market +penetration. + +BTW thanks for all of you who provided interestiong insight. I'm playing with +gdb's dissassembler now but I don't think it's what a typical cracker would +use. Any hints on UNIX cracking tools ? + +Thanks. + +-- +Yannick Gingras +Coder for OBB : Onside Brainsick Bract +http://OpenBeatBox.org + + diff --git a/Ch3/datasets/spam/easy_ham/01415.f3a2a0972d0e7c8490bcd79664be7db5 b/Ch3/datasets/spam/easy_ham/01415.f3a2a0972d0e7c8490bcd79664be7db5 new file mode 100644 index 000000000..3e4f01d89 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01415.f3a2a0972d0e7c8490bcd79664be7db5 @@ -0,0 +1,61 @@ +From ben@algroup.co.uk Wed Sep 4 18:59:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 66F0116F56 + for ; Wed, 4 Sep 2002 18:58:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 18:58:55 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing3.securityfocus.com + [66.38.151.27]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g84HQfZ12414 for ; Wed, 4 Sep 2002 18:26:41 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 3D51EA3600; Wed, 4 Sep 2002 10:55:41 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 4329 invoked from network); 4 Sep 2002 10:33:26 -0000 +Message-Id: <3D75E4DC.9090107@algroup.co.uk> +Date: Wed, 04 Sep 2002 11:47:56 +0100 +From: Ben Laurie +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0.1) + Gecko/20020815 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Yannick Gingras +Cc: secprog@securityfocus.com +Subject: Re: Secure Sofware Key +References: <20020829204345.91D1833986@LINPDC.eclipsys.qc.ca> + <15733.3398.363187.572002@cerise.nosuchdomain.co.uk> + <20020903192326.C9DA533986@LINPDC.eclipsys.qc.ca> +X-Enigmail-Version: 0.63.3.0 +X-Enigmail-Supports: pgp-inline, pgp-mime +Content-Type: text/plain; charset=ISO-8859-15; format=flowed +Content-Transfer-Encoding: 7bit + +Yannick Gingras wrote: +> Is the use of "trusted hardware" really worth it ? Does it really make it +> more secure ? Look at the DVDs. + +DVDs don't use trusted hardware. As for whether it is worth it, that +depends entirely on what its worth to secure your software. + +Cheers, + +Ben. + +-- +http://www.apache-ssl.org/ben.html http://www.thebunker.net/ + +"There is no limit to what a man can do or how far he can go if he +doesn't mind who gets the credit." - Robert Woodruff + + diff --git a/Ch3/datasets/spam/easy_ham/01416.dd0b9717ec7e25f4adb5a5aefa204ba1 b/Ch3/datasets/spam/easy_ham/01416.dd0b9717ec7e25f4adb5a5aefa204ba1 new file mode 100644 index 000000000..b26174425 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01416.dd0b9717ec7e25f4adb5a5aefa204ba1 @@ -0,0 +1,14 @@ +Return-Path: whisper@oz.net +Delivery-Date: Thu Sep 5 23:42:38 2002 +From: whisper@oz.net (David LeBlanc) +Date: Thu, 5 Sep 2002 15:42:38 -0700 +Subject: [Spambayes] All but one testing +Message-ID: + +Errr... not to be pedantic or anything, but this is called "omit one +testing" or OOT in the literature IIRC. Helpful in case you're searching for +additional information, say at http://citeseer.nj.nec.com/ for instance. + +David LeBlanc +Seattle, WA USA + diff --git a/Ch3/datasets/spam/easy_ham/01417.ce7b07a2114218dbac682b599785820d b/Ch3/datasets/spam/easy_ham/01417.ce7b07a2114218dbac682b599785820d new file mode 100644 index 000000000..ad86d11d3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01417.ce7b07a2114218dbac682b599785820d @@ -0,0 +1,55 @@ +Return-Path: nas@python.ca +Delivery-Date: Thu Sep 5 23:49:23 2002 +From: nas@python.ca (Neil Schemenauer) +Date: Thu, 5 Sep 2002 15:49:23 -0700 +Subject: [Spambayes] all but one testing +In-Reply-To: +References: <20020905190420.GB19726@glacier.arctrix.com> + +Message-ID: <20020905224923.GA20480@glacier.arctrix.com> + +Tim Peters wrote: +> I've run no experiments on training set size yet, and won't hazard a guess +> as to how much is enough. I'm nearly certain that the 4000h+2750s I've been +> using is way more than enough, though. + +Okay, I believe you. + +> Each call to learn() and to unlearn() computes a new probability for every +> word in the database. There's an official way to avoid that in the first +> two loops, e.g. +> +> for msg in spam: +> gb.learn(msg, True, False) +> gb.update_probabilities() + +I did that. It's still really slow when you have thousands of messages. + +> In each of the last two loops, the total # of ham and total # of spam in the +> "learned" set is invariant across loop trips, and you *could* break into the +> abstraction to exploit that: the only probabilities that actually change +> across those loop trips are those associated with the words in msg. Then +> the runtime for each trip would be proportional to the # of words in the msg +> rather than the number of words in the database. + +I hadn't tried that. I figured it was better to find out if "all but +one" testing had any appreciable value. It looks like it doesn't so +I'll forget about it. + +> Another area for potentially fruitful study: it's clear that the +> highest-value indicators usually appear "early" in msgs, and for spam +> there's an actual reason for that: advertising has to strive to get your +> attention early. So, for example, if we only bothered to tokenize the first +> 90% of a msg, would results get worse? + +Spammers could exploit this including a large MIME part at the beginning +of the message. In pratice that would probably work fine. + +> sometimes an on-topic message starts well but then rambles. + +Never. I remember the time when I was ten years old and went down to +the fishing hole with my buddies. This guy named Gordon had a really +huge head. Wait, maybe that was Joe. Well, no matter. As I recall, it +was a hot day and everyone was tired...Human Growth Hormone...girl with +huge breasts...blah blah blah...... + diff --git a/Ch3/datasets/spam/easy_ham/01418.de6a5fe900081a0492fb84f6bfae46a1 b/Ch3/datasets/spam/easy_ham/01418.de6a5fe900081a0492fb84f6bfae46a1 new file mode 100644 index 000000000..17626b30b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01418.de6a5fe900081a0492fb84f6bfae46a1 @@ -0,0 +1,16 @@ +Return-Path: nas@python.ca +Delivery-Date: Thu Sep 5 23:56:01 2002 +From: nas@python.ca (Neil Schemenauer) +Date: Thu, 5 Sep 2002 15:56:01 -0700 +Subject: [Spambayes] All but one testing +In-Reply-To: +References: +Message-ID: <20020905225601.GA20578@glacier.arctrix.com> + +David LeBlanc wrote: +> Errr... not to be pedantic or anything, but this is called "omit one +> testing" or OOT in the literature IIRC. + +I have no idea. I made up the name. Thanks for the correction. + + Neil diff --git a/Ch3/datasets/spam/easy_ham/01419.97da4f8a986b55cbe1f81bb22836ac58 b/Ch3/datasets/spam/easy_ham/01419.97da4f8a986b55cbe1f81bb22836ac58 new file mode 100644 index 000000000..054a526f4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01419.97da4f8a986b55cbe1f81bb22836ac58 @@ -0,0 +1,30 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Fri Sep 6 03:14:07 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Thu, 05 Sep 2002 22:14:07 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: <15735.50243.135743.32180@12-248-11-90.client.attbi.com> +Message-ID: + +[Skip Montanaro] +> Any thought to wrapping up your spam and ham test sets for +> inclusion w/ the spambayes project? + +I gave it all the thought it deserved . It would be wonderful to get +several people cranking on the same test data, and I'm all in favor of that. +OTOH, my Data/ subtree currently has more than 35,000 files slobbering over +134 million bytes -- even if I had a place to put that much stuff, I'm not +sure my ISP would let me email it in one msg . + +Apart from that, there was a mistake very early on whose outcome was that +this isn't the data I hoped I was using. I *hoped* I was using a snapshot +of only recent msgs (to match the snapshot this way of only spam from 2002), +but turns out they actually go back to the last millennium. Greg Ward is +currently capturing a stream coming into python.org, and I hope we can get a +more modern, and cleaner, test set out of that. But if that stream contains +any private email, it may not be ethically possible to make that available. +Can you think of anyplace to get a large, shareable ham sample apart from a +public mailing list? Everyone's eager to share their spam, but spam is so +much alike in so many ways that's the easy half of the data collection +problem. + diff --git a/Ch3/datasets/spam/easy_ham/01420.4ee4b7db2ca10b3f5ec512d26bf8b3f9 b/Ch3/datasets/spam/easy_ham/01420.4ee4b7db2ca10b3f5ec512d26bf8b3f9 new file mode 100644 index 000000000..f106d0167 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01420.4ee4b7db2ca10b3f5ec512d26bf8b3f9 @@ -0,0 +1,43 @@ +Return-Path: skip@pobox.com +Delivery-Date: Fri Sep 6 03:41:13 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Thu, 5 Sep 2002 21:41:13 -0500 +Subject: [Spambayes] test sets? +In-Reply-To: +References: <15735.50243.135743.32180@12-248-11-90.client.attbi.com> + +Message-ID: <15736.5577.157228.229200@12-248-11-90.client.attbi.com> + + + Tim> I gave it all the thought it deserved . It would be + Tim> wonderful to get several people cranking on the same test data, and + Tim> I'm all in favor of that. OTOH, my Data/ subtree currently has + Tim> more than 35,000 files slobbering over 134 million bytes -- even if + Tim> I had a place to put that much stuff, I'm not sure my ISP would let + Tim> me email it in one msg . + +Do you have a dialup or something more modern ? 134MB of messages +zipped would probably compress pretty well - under 50MB I'd guess with all +the similarity in the headers and such. You could zip each of the 10 sets +individually and upload them somewhere. + + Tim> Can you think of anyplace to get a large, shareable ham sample + Tim> apart from a public mailing list? Everyone's eager to share their + Tim> spam, but spam is so much alike in so many ways that's the easy + Tim> half of the data collection problem. + +How about random sampling lots of public mailing lists via gmane or +something similar, manually cleaning it (distributing that load over a +number of people) and then relying on your clever code and your rebalancing +script to help further cleanse it? The "problem" with the ham is it tends +to be much more tied to one person (not just intimate, but unique) than the +spam. + +I save all incoming email for ten days (gzipped mbox format) before it rolls +over and disappears. At any one time I think I have about 8,000-10,000 +messages. Most of it isn't terribly personal (which I would cull before +passing along anyway) and much of it is machine-generated, so would be of +marginal use. Finally, it's all ham-n-spam mixed together. Do we call that +an omelette or a Denny's Grand Slam? + +Skip diff --git a/Ch3/datasets/spam/easy_ham/01421.e01ad8fa7bcb36e969c838578051d684 b/Ch3/datasets/spam/easy_ham/01421.e01ad8fa7bcb36e969c838578051d684 new file mode 100644 index 000000000..cc170362b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01421.e01ad8fa7bcb36e969c838578051d684 @@ -0,0 +1,45 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Fri Sep 6 07:09:11 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 02:09:11 -0400 +Subject: [Spambayes] all but one testing +In-Reply-To: <20020905224923.GA20480@glacier.arctrix.com> +Message-ID: + +[Tim] +> Another area for potentially fruitful study: it's clear that the +> highest-value indicators usually appear "early" in msgs, and for spam +> there's an actual reason for that: advertising has to strive +> to get your attention early. So, for example, if we only bothered to +> tokenize the first 90% of a msg, would results get worse? + +[Neil Schemenauer] +> Spammers could exploit this including a large MIME part at the beginning +> of the message. In pratice that would probably work fine. + +Note that timtest.py's current tokenizer only looks at decoded text/* MIME +sections (or raw message text if no MIME exists); spammers could put +megabytes of other crap before that and it wouldn't even be looked at +(except that the email package has to parse non-text/* parts well enough to +skip over them, and tokens for the most interesting parts of Content-{Type, +Disposition, Transfer-Encoding} decorations are generated for all MIME +sections). + +Schemes that remain ignorant of MIME are vulnerable to spammers putting +arbitrary amounts of "nice text" in the preamble area (after the headers and +before the first MIME section), which most mail readers don't display, but +which appear first in the file so are latched on to by Graham's scoring +scheme. + +But I don't worry about clever spammers -- I've seen no evidence that they +exist <0.5 wink>. Even if they do, the Open Source zoo is such that no +particular scheme will gain dominance, and there's no percentage for +spammers in trying to fool just one scheme. Even if they did, for the kind +of scheme we're using here they can't *know* what "nice text" is, not unless +they pay a lot of attention to the spam targets and highly tailor their +messages to each different one. At that point they'd be doing targeted +marketing, and the cost of the game to them would increase enormously. + +if-you're-out-to-make-a-quick-buck-you-don't-waste-a-second-on-hard- + targets-ly y'rs - tim + diff --git a/Ch3/datasets/spam/easy_ham/01422.cbcae309928553721fdf49cdf98541db b/Ch3/datasets/spam/easy_ham/01422.cbcae309928553721fdf49cdf98541db new file mode 100644 index 000000000..5bc98bac0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01422.cbcae309928553721fdf49cdf98541db @@ -0,0 +1,38 @@ +Return-Path: anthony@interlink.com.au +Delivery-Date: Fri Sep 6 08:59:38 2002 +From: anthony@interlink.com.au (Anthony Baxter) +Date: Fri, 06 Sep 2002 17:59:38 +1000 +Subject: [Spambayes] test sets? +Message-ID: <200209060759.g867xcV03853@localhost.localdomain> + + +I've got a test set here that's the last 3 and a bit years email to +info@ekit.com and info@ekno.com - it's a really ugly set of 20,000+ +messages, currently broken into 7,000 spam, 9,000 ham, 9,000 currently +unclassified. These addresses are all over the 70-some different +ekit/ekno/ISIConnect websites, so they get a LOT of spam. + +As well as the usual spam, it also has customers complaining about +credit card charges, it has people interested in the service and +asking questions about long distance rates, &c &c &c. Lots and lots +of "commercial" speech, in other words. Stuff that SA gets pretty +badly wrong. + +I'm currently mangling it by feeding all parts (text, html, whatever +else :) into the filters, as well as both a selected number of headers +(to, from, content-type, x-mailer), and also a list of +(header,count_of_header). This is showing up some nice stuff - e.g. the +X-uidl that stoopid spammers blindly copy into their messages. + +I did have Received in there, but it's out for the moment, as it causes +rates to drop. + +I'm also stripping out HTML tags, except for href="" and src="" - there's +so so much goodness in them (note that I'm only keeping the contents of +the attributes). + + +-- +Anthony Baxter +It's never too late to have a happy childhood. + diff --git a/Ch3/datasets/spam/easy_ham/01423.d12eaa7e292c15107171b0eb39ea40df b/Ch3/datasets/spam/easy_ham/01423.d12eaa7e292c15107171b0eb39ea40df new file mode 100644 index 000000000..6c0cffd17 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01423.d12eaa7e292c15107171b0eb39ea40df @@ -0,0 +1,58 @@ +Return-Path: anthony@interlink.com.au +Delivery-Date: Fri Sep 6 09:06:57 2002 +From: anthony@interlink.com.au (Anthony Baxter) +Date: Fri, 06 Sep 2002 18:06:57 +1000 +Subject: [Spambayes] Re: [Python-Dev] Getting started with GBayes testing +In-Reply-To: +Message-ID: <200209060806.g8686ve03964@localhost.localdomain> + + +>>> Tim Peters wrote +> > I've actually got a bunch of spam like that. The text/plain is something +> > like +> > +> > **This is a HTML message** +> > +> > and nothing else. +> +> Are you sure that's in a text/plain MIME section? I've seen that many times +> myself, but it's always been in the prologue (*between* MIME sections -- so +> it's something a non-MIME aware reader will show you). + +*nod* I know - on my todo is to feed the prologue into the system as well. + +A snippet, hopefully not enough to trigger the spam-filters. + + +To: into89j@gin.elax.ekorp.com +X-Mailer: Microsoft Outlook Express 4.72.1712.3 +X-MimeOLE: Produced By Microsoft MimeOLE V??D.1712.3 +Mime-Version: 1.0 +Date: Sun, 28 Jan 2001 23:54:39 -0500 +Content-Type: multipart/mixed; boundary="----=_NextPart_000_007F_01BDF6C7.FABAC1 +B0" +Content-Transfer-Encoding: 7bit + +This is a MIME Message + +------=_NextPart_000_007F_01BDF6C7.FABAC1B0 +Content-Type: multipart/alternative; boundary="----=_NextPart_001_0080_01BDF6C7. +FABAC1B0" + +------=_NextPart_001_0080_01BDF6C7.FABAC1B0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +***** This is an HTML Message ! ***** + + +------=_NextPart_001_0080_01BDF6C7.FABAC1B0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + diff --git a/Ch3/datasets/spam/easy_ham/01424.14cf0162b6bf5274305b7b573a0c3a82 b/Ch3/datasets/spam/easy_ham/01424.14cf0162b6bf5274305b7b573a0c3a82 new file mode 100644 index 000000000..aa362a1bb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01424.14cf0162b6bf5274305b7b573a0c3a82 @@ -0,0 +1,26 @@ +Return-Path: anthony@interlink.com.au +Delivery-Date: Fri Sep 6 09:11:50 2002 +From: anthony@interlink.com.au (Anthony Baxter) +Date: Fri, 06 Sep 2002 18:11:50 +1000 +Subject: [Spambayes] test sets? +In-Reply-To: <200209060759.g867xcV03853@localhost.localdomain> +Message-ID: <200209060811.g868Bo904031@localhost.localdomain> + + +>>> Anthony Baxter wrote +> I'm currently mangling it by feeding all parts (text, html, whatever +> else :) into the filters, as well as both a selected number of headers +> (to, from, content-type, x-mailer), and also a list of +> (header,count_of_header). This is showing up some nice stuff - e.g. the +> X-uidl that stoopid spammers blindly copy into their messages. + +The other thing on my todo list (probably tonight's tram ride home) is +to add all headers from non-text parts of multipart messages. If nothing +else, it'll pick up most virus email real quick. + + + +-- +Anthony Baxter +It's never too late to have a happy childhood. + diff --git a/Ch3/datasets/spam/easy_ham/01425.c6c34c1234e8b04e01326868202110fd b/Ch3/datasets/spam/easy_ham/01425.c6c34c1234e8b04e01326868202110fd new file mode 100644 index 000000000..4ba914bd6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01425.c6c34c1234e8b04e01326868202110fd @@ -0,0 +1,74 @@ +From felicity@kluge.net Mon Sep 2 23:15:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3768416F38 + for ; Mon, 2 Sep 2002 23:14:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 23:14:08 +0100 (IST) +Received: from eclectic.kluge.net + (IDENT:tK7m7Ybxp1pyihrA4nx2xIdU0iOnCnis@eclectic.kluge.net [66.92.69.221]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g82KebZ20178 for + ; Mon, 2 Sep 2002 21:40:37 +0100 +Received: (from felicity@localhost) by eclectic.kluge.net (8.11.6/8.11.6) + id g82Kerm26481; Mon, 2 Sep 2002 16:40:53 -0400 +Date: Mon, 2 Sep 2002 16:40:53 -0400 +From: Theo Van Dinter +To: Justin Mason +Cc: Spamassassin Devel List +Subject: Re: [SAdev] SpamAssassin v2.40 released (finally)! +Message-Id: <20020902204053.GD15737@kluge.net> +References: <20020902175329.E20EC43F99@phobos.labs.netnoteinc.com> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="1sNVjLsmu1MXqwQ/" +Content-Disposition: inline +In-Reply-To: <20020902175329.E20EC43F99@phobos.labs.netnoteinc.com> +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 + + +--1sNVjLsmu1MXqwQ/ +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Mon, Sep 02, 2002 at 06:53:24PM +0100, Justin Mason wrote: +> - Razor v2 now supported fully + +Hmmm... I just upgraded from my modified 2.31 to a slightly modified 2.40 +(I add a routine to EvalTests) and get: + +Sep 2 15:32:24 eclectic spamd[20506]: razor2 check skipped: No such file o= +r directory Can't call method +"log" on unblessed reference at /usr/lib/perl5/site_perl/5.6.1/Razor2/Clien= +t/Agent.pm line 211, +line 22.=20 + +I haven't quite figured out why yet, more to come. + +--=20 +Randomly Generated Tagline: +"So on one hand, honey is an amazingly sophisticated and efficient food + source. On the other hand it's bee backwash." + - Alton Brown, Good Eats, "Pantry Raid IV: Comb Alone" + +--1sNVjLsmu1MXqwQ/ +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9c8zVAuOQUeWAs2MRAm+8AKC24InxYaZY5BJi/u/FI2RQ5hy9jACgi9fM +4jujLQNmvwcQm/8ULtyvaZU= +=hKgW +-----END PGP SIGNATURE----- + +--1sNVjLsmu1MXqwQ/-- + diff --git a/Ch3/datasets/spam/easy_ham/01426.a44cbbf8a894adb293a56a20758ae065 b/Ch3/datasets/spam/easy_ham/01426.a44cbbf8a894adb293a56a20758ae065 new file mode 100644 index 000000000..e9cb2aff6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01426.a44cbbf8a894adb293a56a20758ae065 @@ -0,0 +1,82 @@ +From spamassassin-talk-admin@lists.sourceforge.net Tue Sep 3 00:14:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3C9DF16F37 + for ; Tue, 3 Sep 2002 00:14:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 00:14:22 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g82M47Z22879 for ; Mon, 2 Sep 2002 23:04:07 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17lzHi-0000AD-00; Mon, + 02 Sep 2002 15:03:02 -0700 +Received: from web10201.mail.yahoo.com ([216.136.130.65]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17lzDN-0000Id-00 for ; + Mon, 02 Sep 2002 14:58:33 -0700 +Message-Id: <20020902215833.63621.qmail@web10201.mail.yahoo.com> +Received: from [195.137.34.213] by web10201.mail.yahoo.com via HTTP; + Mon, 02 Sep 2002 22:58:33 BST +From: =?iso-8859-1?q?Peter=20Dickson?= +To: spamassassin-talk@example.sourceforge.net +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit +Subject: [SAtalk] "Broken Pipe" on initial test +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 2 Sep 2002 22:58:33 +0100 (BST) +Date: Mon, 2 Sep 2002 22:58:33 +0100 (BST) + +Hi + +I've just installed SpamAssassin and relevant modules. +Just tried the initial test: + +spamassassin -t < sample-nonspam.txt > nonspam.out + +and got back: + +Broken Pipe + +I've also tried using the -P and --pipe option but to +no avail. + +Any help greatly appreciated. BTW - I'm no great Perl +expert! + +rgds + +Peter + +__________________________________________________ +Do You Yahoo!? +Everything you'll ever need on one web page +from News and Sport to Email and Music Charts +http://uk.my.yahoo.com + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01427.7c150370fd480849df4e8ab564d88fe9 b/Ch3/datasets/spam/easy_ham/01427.7c150370fd480849df4e8ab564d88fe9 new file mode 100644 index 000000000..46253b750 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01427.7c150370fd480849df4e8ab564d88fe9 @@ -0,0 +1,93 @@ +From spamassassin-talk-admin@lists.sourceforge.net Tue Sep 3 00:14:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AF20F16F38 + for ; Tue, 3 Sep 2002 00:14:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 00:14:25 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g82M5PZ22938 for ; Mon, 2 Sep 2002 23:05:25 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17lzJU-0001AY-00; Mon, + 02 Sep 2002 15:04:52 -0700 +Received: from moonbase.zanshin.com ([167.160.213.139]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17lzF8-0000Ty-00 for + ; Mon, 02 Sep 2002 15:00:22 -0700 +Received: from aztec.zanshin.com (IDENT:schaefer@aztec.zanshin.com + [167.160.213.132]) by moonbase.zanshin.com (8.11.0/8.11.0) with ESMTP id + g82M0JJ08146; Mon, 2 Sep 2002 15:00:19 -0700 +From: Bart Schaefer +To: Richard Kimber +Cc: spamassassin +Subject: Re: [SAtalk] SpamAssassin v2.40 released (finally)! +In-Reply-To: <20020902220216.51777fd2.rkimber@ntlworld.com> +Message-Id: +Mail-Followup-To: spamassassin-talk@example.sourceforge.net +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 2 Sep 2002 15:00:19 -0700 (PDT) +Date: Mon, 2 Sep 2002 15:00:19 -0700 (PDT) + +On Mon, 2 Sep 2002, Richard Kimber wrote: + +> On Mon, 2 Sep 2002 13:20:46 -0700 (PDT) +> Bart Schaefer wrote: +> +> > If you're using "fetchmail --mda spamassassin" or the equivlent, then +> > this change means your current setup will no longer work. +> +> Oh well, I guess there are other anti-spam options out there. + +Well, (a) you don't HAVE to upgrade, and (b) what you are doing has never +been safe in the first place because SpamAssassin 2.31-and-before doesn't +do any kind of file locking while it writes to the mailbox and doesn't +promise to return the proper failure code on disk-full conditions, etc. + +If you're still willing to live with (b), all you need is a little shell +script to run spamassassin: + +---------- +#!/bin/sh +# call this file "spamassassin-wrapper" and chmod +x it +{ +echo "From $1 `date`" +sed -e '1{/^From /d;}' | spamassassin +echo '' +} >> $MAIL +---------- + +And then use + +fetchmail --mda 'spamassassin-wrapper %F' + +and you should be all set. + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01428.a040cc94f80fe9db775e898acfe3c3c9 b/Ch3/datasets/spam/easy_ham/01428.a040cc94f80fe9db775e898acfe3c3c9 new file mode 100644 index 000000000..af037f749 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01428.a040cc94f80fe9db775e898acfe3c3c9 @@ -0,0 +1,68 @@ +From spamassassin-commits-admin@lists.sourceforge.net Tue Sep 3 00:14:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9927016F39 + for ; Tue, 3 Sep 2002 00:14:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 00:14:28 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g82M8xZ23087 for ; Mon, 2 Sep 2002 23:08:59 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17lzNj-0002eV-00; Mon, + 02 Sep 2002 15:09:15 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17lzKz-0001dK-00 for ; + Mon, 02 Sep 2002 15:06:25 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17lzKx-0005WD-00 for + ; Mon, 02 Sep 2002 15:06:23 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17lzKx-0006yy-00 for + ; Mon, 02 Sep 2002 15:06:23 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin/masses/tenpass - New directory +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 02 Sep 2002 15:06:23 -0700 +Date: Mon, 02 Sep 2002 15:06:23 -0700 + +Update of /cvsroot/spamassassin/spamassassin/masses/tenpass +In directory usw-pr-cvs1:/tmp/cvs-serv26829/tenpass + +Log Message: +Directory /cvsroot/spamassassin/spamassassin/masses/tenpass added to the repository + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + diff --git a/Ch3/datasets/spam/easy_ham/01429.6d9cae984e2f92f32d70594f5cc37c87 b/Ch3/datasets/spam/easy_ham/01429.6d9cae984e2f92f32d70594f5cc37c87 new file mode 100644 index 000000000..d3f74e25d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01429.6d9cae984e2f92f32d70594f5cc37c87 @@ -0,0 +1,76 @@ +From spamassassin-devel-admin@lists.sourceforge.net Tue Sep 3 00:14:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F37B016F23 + for ; Tue, 3 Sep 2002 00:14:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 00:14:24 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g82M4LZ22887 for ; Mon, 2 Sep 2002 23:04:21 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17lzHl-0000BL-00; Mon, + 02 Sep 2002 15:03:05 -0700 +Received: from granger.mail.mindspring.net ([207.69.200.148]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17lzDd-0000Jk-00 for ; + Mon, 02 Sep 2002 14:58:49 -0700 +Received: from user-1120fqe.dsl.mindspring.com ([66.32.63.78] + helo=belphegore.hughes-family.org) by granger.mail.mindspring.net with + esmtp (Exim 3.33 #1) id 17lzDb-0006Mg-00 for + spamassassin-devel@lists.sourceforge.net; Mon, 02 Sep 2002 17:58:47 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 1ACB89F8B5; Mon, 2 Sep 2002 14:58:47 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20020902215847.1ACB89F8B5@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 804] Razor debugging isn't functioning +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 2 Sep 2002 14:58:47 -0700 (PDT) +Date: Mon, 2 Sep 2002 14:58:47 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=804 + +jm@jmason.org changed: + + What |Removed |Added +---------------------------------------------------------------------------- + Status|NEW |RESOLVED + Resolution| |FIXED + + + +------- Additional Comments From jm@jmason.org 2002-09-02 14:58 ------- +ok, now in. + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01430.a13c07ca5673aad2384d380041305054 b/Ch3/datasets/spam/easy_ham/01430.a13c07ca5673aad2384d380041305054 new file mode 100644 index 000000000..d4ee1e0a5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01430.a13c07ca5673aad2384d380041305054 @@ -0,0 +1,76 @@ +From spamassassin-devel-admin@lists.sourceforge.net Tue Sep 3 00:15:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 17C2716F3A + for ; Tue, 3 Sep 2002 00:14:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 00:14:30 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g82M8xZ23088 for ; Mon, 2 Sep 2002 23:08:59 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17lzMU-0002HI-00; Mon, + 02 Sep 2002 15:07:58 -0700 +Received: from smtp6.mindspring.com ([207.69.200.110]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17lzKG-0000wx-00 for ; + Mon, 02 Sep 2002 15:05:40 -0700 +Received: from user-1120fqe.dsl.mindspring.com ([66.32.63.78] + helo=belphegore.hughes-family.org) by smtp6.mindspring.com with esmtp + (Exim 3.33 #1) id 17lzKF-0001KS-00 for + spamassassin-devel@lists.sourceforge.net; Mon, 02 Sep 2002 18:05:39 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + BA80F9F8B9; Mon, 2 Sep 2002 15:05:38 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20020902220538.BA80F9F8B9@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 805] Razor2 lookups don't work +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 2 Sep 2002 15:05:38 -0700 (PDT) +Date: Mon, 2 Sep 2002 15:05:38 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=805 + + + + + +------- Additional Comments From felicity@kluge.net 2002-09-02 15:05 ------- +from the sa-dev mailing list: + +"ln -s /dev/null ~root/.razor/razor-agent.log" + +The question is, why does 2.40 do this whereas my 2.31 doesn't. Hmmm. + + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01431.007d88c08ff1d098101146a0b68f7665 b/Ch3/datasets/spam/easy_ham/01431.007d88c08ff1d098101146a0b68f7665 new file mode 100644 index 000000000..2ae460d3c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01431.007d88c08ff1d098101146a0b68f7665 @@ -0,0 +1,52 @@ +From steveo@syslang.net Tue Sep 3 14:31:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 57BEF16F43 + for ; Tue, 3 Sep 2002 14:25:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 14:25:48 +0100 (IST) +Received: from saturn.syslang.net + (IDENT:obG5Nws8VWZCvcnnFtu7UaD4+vA7HJu5@146-115-228-77.c3-0.frm-ubr1.sbo-frm.ma.cable.rcn.com + [146.115.228.77]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g82N6HZ25128 for ; Tue, 3 Sep 2002 00:06:18 +0100 +Received: from saturn.syslang.net + (IDENT:mPurBmlWDfHHE0WnbcP94X5rLnPsm3R+@localhost.localdomain [127.0.0.1]) + by saturn.syslang.net (8.12.2/8.12.2) with ESMTP id g82N6WPE007746; + Mon, 2 Sep 2002 19:06:32 -0400 +Received: from localhost (steveo@localhost) by saturn.syslang.net + (8.12.2/8.12.2/Submit) with ESMTP id g82N6UW7007742; Mon, 2 Sep 2002 + 19:06:32 -0400 +X-Authentication-Warning: saturn.syslang.net: steveo owned process doing -bs +Date: Mon, 2 Sep 2002 19:06:30 -0400 (EDT) +From: "Steven W. Orr" +To: Justin Mason +Cc: spamassassin talk , + +Subject: Re: [SAtalk] SpamAssassin v2.40 released (finally)! +In-Reply-To: <20020902175329.E20EC43F99@phobos.labs.netnoteinc.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII + +On Mon, 2 Sep 2002, Justin Mason wrote: + +=>http://spamassassin.org/released/ : +=> +=> 508284 Sep 2 18:27 Mail-SpamAssassin-2.40.tar.gz +=> 561425 Sep 2 18:27 Mail-SpamAssassin-2.40.zip +=> +Not that I'm not grateful, but..... :-) + +I'd really like to install from a src rpm. Any takers? :-) + +TIA + +-- +-Time flies like the wind. Fruit flies like a banana. Stranger things have - +-happened but none stranger than this. Does your driver's license say Organ +-Donor?Black holes are where God divided by zero. Listen to me! We are all- +-individuals! What if this weren't a hypothetical question? steveo@syslang.net + + diff --git a/Ch3/datasets/spam/easy_ham/01432.398dffdbd1e29fb5b5af86bc1f939f64 b/Ch3/datasets/spam/easy_ham/01432.398dffdbd1e29fb5b5af86bc1f939f64 new file mode 100644 index 000000000..59b51946c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01432.398dffdbd1e29fb5b5af86bc1f939f64 @@ -0,0 +1,61 @@ +From jm@jmason.org Tue Sep 3 14:38:29 2002 +Return-Path: +Delivered-To: yyyy@spamassassin.taint.org +Received: by spamassassin.taint.org (Postfix, from userid 500) + id 6798116F23; Tue, 3 Sep 2002 14:38:29 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) + by jmason.org (Postfix) with ESMTP + id 6221BF7A7; Tue, 3 Sep 2002 14:38:29 +0100 (IST) +To: "Craig R.Hughes" +Cc: quinlan@pathname.com, yyyy@spamassassin.taint.org (Justin Mason), + spamassassin-devel@lists.sourceforge.net +Subject: Re: [SAdev] 2.41 release? +In-Reply-To: Message from "Craig R.Hughes" + of "Mon, 02 Sep 2002 22:37:10 PDT." <312D1C89-BEFF-11D6-9DD0-00039396ECF2@deersoft.com> +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Date: Tue, 03 Sep 2002 14:38:24 +0100 +Sender: yyyy@spamassassin.taint.org +Message-Id: <20020903133829.6798116F23@spamassassin.taint.org> + + +"Craig R.Hughes" said: + +> Seems like a good idea. We might get one of two other issues +> raised tomorrow too once US people get back to work tomorrow and +> start downloading 2.40 in earnest. + +yep, I reckon that's likely. + +BTW I'm hearing reports about problems resolving spamassassin.org. +Anyone else noticing this? if it's serious I'll see if I can get +Mark Reynolds to add a 2ndary in the US, to go with the primaries +in Oz. + +> > - looks like there may be a razor2 issue + +I think this is a Razor bug/glitch triggered when file permissions +don't allow its own log system to work. At least that's the report +I heard on the Razor list in the past... + +Theo, does it work now that you /dev/null'd the logfile? + +> > - version number (says "cvs") +> > - tag tree as "Rel" this time too + +I won't bother tagging with Rel, IMO; I don't think we should +rely on the version control system inside our code, so I've just +put a line in Mail/SpamAssassin.pm instead. I will of course +tag with a release *label* though. + +--j. + diff --git a/Ch3/datasets/spam/easy_ham/01433.4392b7c4884f0f218e74a0b86cc5b8c3 b/Ch3/datasets/spam/easy_ham/01433.4392b7c4884f0f218e74a0b86cc5b8c3 new file mode 100644 index 000000000..7d36a1c1e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01433.4392b7c4884f0f218e74a0b86cc5b8c3 @@ -0,0 +1,104 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Sep 4 16:52:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7DABB16F1D + for ; Wed, 4 Sep 2002 16:52:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 16:52:08 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g84FJBZ07390 for ; Wed, 4 Sep 2002 16:19:11 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17mbuu-0000hj-00; Wed, + 04 Sep 2002 08:18:04 -0700 +Received: from relay05.indigo.ie ([194.125.133.229]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17mbu4-0000dU-00 for ; + Wed, 04 Sep 2002 08:17:12 -0700 +Received: (qmail 61727 messnum 1205753 invoked from + network[194.125.172.58/ts12-058.dublin.indigo.ie]); 4 Sep 2002 15:17:09 + -0000 +Received: from ts12-058.dublin.indigo.ie (HELO spamassassin.taint.org) + (194.125.172.58) by relay05.indigo.ie (qp 61727) with SMTP; 4 Sep 2002 + 15:17:09 -0000 +Received: by spamassassin.taint.org (Postfix, from userid 500) id 0A09E16F1D; + Wed, 4 Sep 2002 16:17:55 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) by spamassassin.taint.org (Postfix) + with ESMTP id 06B5AF7B7; Wed, 4 Sep 2002 16:17:55 +0100 (IST) +To: "zeek" +Cc: "SA" , + craig@hughes-family.org +Subject: Re: [SAtalk] BUG: spamd --allowed-ips=[127.0.0.1 must be first] +In-Reply-To: Message from + "zeek" + of + "Tue, 03 Sep 2002 18:41:49 EDT." + +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020904151755.0A09E16F1D@spamassassin.taint.org> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 04 Sep 2002 16:17:50 +0100 +Date: Wed, 04 Sep 2002 16:17:50 +0100 + + +"zeek" said: + +> This was thoroughly confusing, but by playing musical chairs with the spamd +> args I smashed a bug: +> +> OK: +> spamd --debug --daemonize --auto-whitelist --username=nobody --allowed-ips=1 +> 27.0.0.1" +> OK: +> spamd --debug --daemonize --auto-whitelist --username=nobody --allowed-ips=1 +> 27.0.0.1, 192.168.1.1" +> NOT OK: +> spamd --debug --daemonize --auto-whitelist --username=nobody --allowed-ips=1 +> 92.168.1.1, 127.0.0.1" + +fwiw, I can't reproduce this with + + spamd --debug --auto-whitelist --allowed-ips="127.0.0.1" + spamd --debug --auto-whitelist --allowed-ips="127.0.0.1, 192.168.1.1" + spamd --debug --auto-whitelist --allowed-ips="192.168.1.1, 127.0.0.1" + +which I presume is what you meant (except for the missing args +of course). They all seem to work OK. + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01434.91fb1f11e7d4feae12121239c4c19d9c b/Ch3/datasets/spam/easy_ham/01434.91fb1f11e7d4feae12121239c4c19d9c new file mode 100644 index 000000000..3e443a064 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01434.91fb1f11e7d4feae12121239c4c19d9c @@ -0,0 +1,97 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Sep 4 16:53:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F011016F20 + for ; Wed, 4 Sep 2002 16:52:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 16:52:13 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g84FLxZ07451 for ; Wed, 4 Sep 2002 16:21:59 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17mbxo-00019X-00; Wed, + 04 Sep 2002 08:21:04 -0700 +Received: from main.gmane.org ([80.91.224.249]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17mbxL-0002od-00 for ; + Wed, 04 Sep 2002 08:20:35 -0700 +Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) + id 17mbvd-00087j-00 for ; + Wed, 04 Sep 2002 17:18:49 +0200 +To: spamassassin-talk@example.sourceforge.net +X-Injected-Via-Gmane: http://gmane.org/ +Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) + id 17mbvb-00087W-00 for ; + Wed, 04 Sep 2002 17:18:47 +0200 +Path: not-for-mail +From: "Adrian Hill" +Message-Id: +References: + <20020904185631.55728f6b.lars@unet.net.ph> +NNTP-Posting-Host: 212.50.185.99 +X-Trace: main.gmane.org 1031152726 31216 212.50.185.99 (4 Sep 2002 + 15:18:46 GMT) +X-Complaints-To: usenet@main.gmane.org +NNTP-Posting-Date: Wed, 4 Sep 2002 15:18:46 +0000 (UTC) +X-Priority: 3 +X-Msmail-Priority: Normal +X-Newsreader: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Subject: [SAtalk] Re: Custom actions for high scoring spam +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 4 Sep 2002 16:20:25 +0100 +Date: Wed, 4 Sep 2002 16:20:25 +0100 + +Thank you Lars for your reply to my query. + +> SA doesnt do any of these. It is probably a function of whatever scanning +system/MDA +> you're using (amavis, procmail, whatever). What exactly are you using? + +I am using SpamAssassin as part of the MailScanner package (using sendmail +as the MTA). It integrates nicely in there, and shares a configuration file +with SA. All very neat. + +> SA in itself does nothing really. You need a frontend (procmail, amavis, +etc) +> at some point in the mail delivery chain that can hand over the message +> to SA and do whatever other processing you want. + +I thought that SA rated a message with a certain score, then did a certain +action (such as store | deliver | delete) based on the configuration given. +I was hoping there were some other actions that I could custom-program in. + +Again, many thanks, + + +Adrian + + + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01435.e25d83af5e02f2d2e97880c2e2f17eb2 b/Ch3/datasets/spam/easy_ham/01435.e25d83af5e02f2d2e97880c2e2f17eb2 new file mode 100644 index 000000000..8c08fd335 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01435.e25d83af5e02f2d2e97880c2e2f17eb2 @@ -0,0 +1,102 @@ +From spamassassin-commits-admin@lists.sourceforge.net Wed Sep 4 16:53:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D056716F21 + for ; Wed, 4 Sep 2002 16:52:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 16:52:15 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g84FMqZ07608 for ; Wed, 4 Sep 2002 16:22:52 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17mbzp-0001lU-00; Wed, + 04 Sep 2002 08:23:09 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17mbzP-000328-00 for ; + Wed, 04 Sep 2002 08:22:43 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17mbzP-0007kh-00 for + ; Wed, 04 Sep 2002 08:22:43 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17mbzO-0004fH-00 for + ; Wed, 04 Sep 2002 08:22:42 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin/lib/Mail/SpamAssassin Conf.pm,1.91.2.7,1.91.2.8 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 04 Sep 2002 08:22:42 -0700 +Date: Wed, 04 Sep 2002 08:22:42 -0700 + +Update of /cvsroot/spamassassin/spamassassin/lib/Mail/SpamAssassin +In directory usw-pr-cvs1:/tmp/cvs-serv17809/lib/Mail/SpamAssassin + +Modified Files: + Tag: b2_4_0 + Conf.pm +Log Message: +added deprecation regarding starting line with space; reserved for future use; also changed sample version_tag + +Index: Conf.pm +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/lib/Mail/SpamAssassin/Conf.pm,v +retrieving revision 1.91.2.7 +retrieving revision 1.91.2.8 +diff -b -w -u -d -r1.91.2.7 -r1.91.2.8 +--- Conf.pm 29 Aug 2002 14:52:43 -0000 1.91.2.7 ++++ Conf.pm 4 Sep 2002 15:22:39 -0000 1.91.2.8 +@@ -24,8 +24,11 @@ + files, loaded from the /usr/share/spamassassin and /etc/mail/spamassassin + directories. + +-The C<#> character starts a comment, which continues until end of line, +-and whitespace in the files is not significant. ++The C<#> character starts a comment, which continues until end of line. ++ ++Whitespace in the files is not significant, but please note that starting a ++line with whitespace is deprecated, as we reserve its use for multi-line rule ++definitions, at some point in the future. + + Paths can use C<~> to refer to the user's home directory. + +@@ -257,7 +260,7 @@ + + eg. + +- version_tag perkel2 # version=2.40-perkel2 ++ version_tag myrules1 # version=2.41-myrules1 + + =cut + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + diff --git a/Ch3/datasets/spam/easy_ham/01436.dc449ba377210e77d84647619e49c872 b/Ch3/datasets/spam/easy_ham/01436.dc449ba377210e77d84647619e49c872 new file mode 100644 index 000000000..5e4561adb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01436.dc449ba377210e77d84647619e49c872 @@ -0,0 +1,117 @@ +From spamassassin-talk-owner@lists.sourceforge.net Thu Sep 5 12:50:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CE8A116F1E + for ; Thu, 5 Sep 2002 12:50:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 12:50:48 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g85BcmZ17201 for ; Thu, 5 Sep 2002 12:38:48 + +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17muya-0002uV-00 for + ; Thu, 05 Sep 2002 04:39:08 -0700 +Received: from mx1.yipes.com ([209.213.199.100]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17muyG-0002Wo-00 for ; + Thu, 05 Sep 2002 04:38:48 -0700 +Subject: WARNING. Mail Delayed: Re: [SAtalk] [OT] Perl problem and 2.40 + released +From: MAILER-DAEMON@mx1.yipes.com +To: +Date: Thu, 05 Sep 2002 04:38:48 -0700 +Message-Id: +MIME-Version: 1.0 +Content-Type: multipart/report; report-type=delivery-status; + boundary="_===6628399====mx1.yipes.com===_" +Sender: spamassassin-talk-owner@example.sourceforge.net +Errors-To: spamassassin-talk-owner@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: + NO_REAL_NAME,SPAM_PHRASE_00_01 version=2.50-cvs + + +--_===6628399====mx1.yipes.com===_ +Content-Type: text/plain + +This is a warning message only. + Your message remains in the server queue, + the server will try to send it again. + You should not try to resend your message now. + +Message delivery to 'casimir@tgsnopec.com' delayed +SMTP module(domain tgsnopec.com) reports: + relay.tgsnopec.com: no response + + +--_===6628399====mx1.yipes.com===_ +Content-Type: message/delivery-status + +Reporting-MTA: dns; mx1.yipes.com + +Original-Recipient: rfc822;casimir@tgsnopec.com +Final-Recipient: rfc822;casimir@tgsnopec.com +Action: delayed + +--_===6628399====mx1.yipes.com===_ +Content-Type: text/rfc822-headers + +Received: from [216.136.171.252] (HELO usw-sf-list2.sourceforge.net) + by mx1.yipes.com (CommuniGate Pro SMTP 3.5.1) + with ESMTP-TLS id 6627220 for casimir@tgsnopec.com; Thu, 05 Sep 2002 01:35:26 -0700 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] helo=usw-sf-list1.sourceforge.net) + by usw-sf-list2.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) + id 17mryq-0000eK-00; Thu, 05 Sep 2002 01:27:12 -0700 +Received: from hippo.star.co.uk ([195.216.14.9]) + by usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) + id 17mryb-000529-00 + for ; Thu, 05 Sep 2002 01:26:58 -0700 +Received: from MATT_LINUX by hippo.star.co.uk + via smtpd (for usw-sf-lists.sourceforge.net [216.136.171.198]) with SMTP; 5 Sep 2002 08:17:57 UT +Received: (qmail 28723 invoked from network); 3 Sep 2002 08:22:05 -0000 +Received: from unknown (HELO startechgroup.co.uk) (10.2.100.178) + by matt?dev.int.star.co.uk with SMTP; 3 Sep 2002 08:22:05 -0000 +Message-ID: <3D77146F.1000603@startechgroup.co.uk> +From: Matt Sergeant +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1b) Gecko/20020901 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: "Rose, Bobby" +CC: Justin Mason , + spamassassin-talk@lists.sourceforge.net +Subject: Re: [SAtalk] [OT] Perl problem and 2.40 released +References: +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-BeenThere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 05 Sep 2002 09:23:11 +0100 +Date: Thu, 05 Sep 2002 09:23:11 +0100 + +--_===6628399====mx1.yipes.com===_-- + + diff --git a/Ch3/datasets/spam/easy_ham/01437.a16dc704b4bfe8b170724a4b68389a40 b/Ch3/datasets/spam/easy_ham/01437.a16dc704b4bfe8b170724a4b68389a40 new file mode 100644 index 000000000..b9185a277 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01437.a16dc704b4bfe8b170724a4b68389a40 @@ -0,0 +1,109 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Sep 5 12:39:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1CE6D16F22 + for ; Thu, 5 Sep 2002 12:39:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 12:39:21 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g85BIUZ16473 for ; Thu, 5 Sep 2002 12:18:30 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17mucI-0006th-00; Thu, + 05 Sep 2002 04:16:06 -0700 +Received: from mailout05.sul.t-online.com ([194.25.134.82]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17muc0-0002ux-00 for ; + Thu, 05 Sep 2002 04:15:49 -0700 +Received: from fwd05.sul.t-online.de by mailout05.sul.t-online.com with + smtp id 17mubx-0001pe-0D; Thu, 05 Sep 2002 13:15:45 +0200 +Received: from nebukadnezar.msquadrat.de + (520061089980-0001@[217.80.6.207]) by fmrl05.sul.t-online.com with esmtp + id 17mubq-0pKN0KC; Thu, 5 Sep 2002 13:15:38 +0200 +Received: from otherland (otherland.msquadrat.de [10.10.10.10]) by + nebukadnezar.msquadrat.de (Postfix on SuSE Linux 7.3 (i386)) with ESMTP id + 92DF53BF4 for ; Thu, 5 Sep 2002 13:15:40 + +0200 (CEST) +Content-Type: text/plain; charset="iso-8859-1" +From: "Malte S. Stretz" +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] PerMsgStatus.pm error? +User-Agent: KMail/1.4.3 +References: +In-Reply-To: +X-Accept-Language: de, en +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: Warrant Mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200209051318.24194@malte.stretz.eu.org> +X-Sender: 520061089980-0001@t-dialin.net +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 13:18:24 +0200 +Date: Thu, 5 Sep 2002 13:18:24 +0200 + +On Thursday 05 September 2002 04:10 CET Mike Burger wrote: +> Just loaded up SA 2.40 from Theo's RPMs...spamassassin-2.40-1 and +> perl-Mail-SpamAssassin-2.40-1 on a RH 7.1 system with perl 5.6.1 running +> on it. +> +> I'm getting messages that seem to indicate that SA can't find +> PerMsgStatus, like so: +> +> Sep 4 21:01:59 burgers spamd[17579]: Failed to run CTYPE_JUST_HTML +> SpamAssassin test, skipping: ^I(Can't locate object method +> "check_for_content_type_just_html" via package +> "Mail::SpamAssassin::PerMsgStatus" (perhaps you forgot to load +> "Mail::SpamAssassin::PerMsgStatus"?) at +> /usr/lib/perl5/site_perl/5.6.1/Mail/SpamAssassin/PerMsgStatus.pm line +> 1814, line 21. ) +> +>[...] +> +> Any ideas? + +Perl doesn't complain that it can't find PerMsgStatus.pm but the function +check_for_content_type_just_html(). Do you probably have some old rules +files still lurking around? This test existed in 2.31 but is gone/was +renamed with 2.40. + +Malte + +-- +-- Coding is art. +-- + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01438.3bdd05f78df18d1add2e9a5afd85a6e6 b/Ch3/datasets/spam/easy_ham/01438.3bdd05f78df18d1add2e9a5afd85a6e6 new file mode 100644 index 000000000..f6af83d75 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01438.3bdd05f78df18d1add2e9a5afd85a6e6 @@ -0,0 +1,72 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Sep 5 12:39:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C009C16F1E + for ; Thu, 5 Sep 2002 12:39:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 12:39:23 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g85Ba9Z16982 for ; Thu, 5 Sep 2002 12:36:09 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17muuh-0002Nz-00; Thu, + 05 Sep 2002 04:35:07 -0700 +Received: from lerlaptop.lerctr.org ([207.158.72.14]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17muuZ-0007mO-00 for + ; Thu, 05 Sep 2002 04:34:59 -0700 +Received: from localhost (localhost [127.0.0.1]) by lerlaptop.lerctr.org + (8.12.5/8.12.5) with ESMTP id g85BYtaY083601 for + ; Thu, 5 Sep 2002 06:34:55 -0500 + (CDT) (envelope-from ler@lerctr.org) +From: Larry Rosenman +To: spamassassin-talk@example.sourceforge.net +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.8 +Message-Id: <1031225695.83349.5.camel@lerlaptop.lerctr.org> +MIME-Version: 1.0 +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +Subject: [SAtalk] www.spamassassin.org: giving a HTTP/1.1 error from + sourceforge? +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 05 Sep 2002 06:34:55 -0500 +Date: 05 Sep 2002 06:34:55 -0500 + +I'm getting an error page from sourceforge.net when I try to go to +www.spamassassin.org. + +Just FYI. + + +-- +Larry Rosenman http://www.lerctr.org/~ler +Phone: +1 972-414-9812 E-Mail: ler@lerctr.org +US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749 + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01439.6a7c45811ec7605d19d385f32cbee42d b/Ch3/datasets/spam/easy_ham/01439.6a7c45811ec7605d19d385f32cbee42d new file mode 100644 index 000000000..a5ab44e73 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01439.6a7c45811ec7605d19d385f32cbee42d @@ -0,0 +1,93 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Sep 5 12:51:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6AAE016F1F + for ; Thu, 5 Sep 2002 12:50:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 12:50:59 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g85BdUZ17221 for ; Thu, 5 Sep 2002 12:39:31 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17muyZ-0002te-00; Thu, + 05 Sep 2002 04:39:07 -0700 +Received: from relay05.indigo.ie ([194.125.133.229]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17muxW-0001OV-00 for ; + Thu, 05 Sep 2002 04:38:02 -0700 +Received: (qmail 67311 messnum 1193176 invoked from + network[194.125.172.167/ts12-167.dublin.indigo.ie]); 5 Sep 2002 11:37:56 + -0000 +Received: from ts12-167.dublin.indigo.ie (HELO spamassassin.taint.org) + (194.125.172.167) by relay05.indigo.ie (qp 67311) with SMTP; + 5 Sep 2002 11:37:56 -0000 +Received: by spamassassin.taint.org (Postfix, from userid 500) id 7262216F22; + Thu, 5 Sep 2002 12:24:14 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) by spamassassin.taint.org (Postfix) + with ESMTP id 6F0D8F7B1; Thu, 5 Sep 2002 12:24:14 +0100 (IST) +To: "Clark C . Evans" +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] getting single-user spam assassin to work in FreeBSD + default install +In-Reply-To: Message from + "Clark C . Evans" + of + "Thu, 05 Sep 2002 02:30:19 -0000." + <20020905023019.A43636@doublegemini.com> +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020905112414.7262216F22@spamassassin.taint.org> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 05 Sep 2002 12:24:09 +0100 +Date: Thu, 05 Sep 2002 12:24:09 +0100 + + +"Clark C . Evans" said: + +> Hello. I'm hosted on a FreeBSD box where I can't modify the +> local Perl installation. I downloaded and installed procmail +> in my home directory, and now I'm trying to get spamassassin to work... +> +> bash-2.05$ perl Makefile.PL PREFIX=/home/cce SYSCONFDIF=/home/cce/etc +> Warning: prerequisite HTML::Parser 0 not found at (eval 1) line 219. +> Warning: prerequisite Pod::Usage 0 not found at (eval 1) line 219. +> 'SYSCONFDIF' is not a known MakeMaker parameter name. + +SYSCONFDIR. + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01440.cfce91ecdbad4a984e4efb71c5c497df b/Ch3/datasets/spam/easy_ham/01440.cfce91ecdbad4a984e4efb71c5c497df new file mode 100644 index 000000000..5a724b1a1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01440.cfce91ecdbad4a984e4efb71c5c497df @@ -0,0 +1,102 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Sep 5 12:50:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B160F16F1E + for ; Thu, 5 Sep 2002 12:50:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 12:50:52 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g85BdTZ17218 for ; Thu, 5 Sep 2002 12:39:30 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17muyY-0002sW-00; Thu, + 05 Sep 2002 04:39:06 -0700 +Received: from relay05.indigo.ie ([194.125.133.229]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17muxV-0001OC-00 for ; + Thu, 05 Sep 2002 04:38:02 -0700 +Received: (qmail 67309 messnum 1193166 invoked from + network[194.125.172.167/ts12-167.dublin.indigo.ie]); 5 Sep 2002 11:37:56 + -0000 +Received: from ts12-167.dublin.indigo.ie (HELO spamassassin.taint.org) + (194.125.172.167) by relay05.indigo.ie (qp 67309) with SMTP; + 5 Sep 2002 11:37:56 -0000 +Received: by spamassassin.taint.org (Postfix, from userid 500) id 0C81E16F21; + Thu, 5 Sep 2002 12:22:05 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) by spamassassin.taint.org (Postfix) + with ESMTP id 09402F7B1; Thu, 5 Sep 2002 12:22:05 +0100 (IST) +To: "Kerry Nice" +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Trend: Spam disguised as newsletters +In-Reply-To: Message from + "Kerry Nice" + of + "Wed, 04 Sep 2002 18:25:44 EDT." + +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020905112205.0C81E16F21@spamassassin.taint.org> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 05 Sep 2002 12:21:59 +0100 +Date: Thu, 05 Sep 2002 12:21:59 +0100 + + +"Kerry Nice" said: + +> What about some reality check rules. Yeah, you can pack in lots of things +> into the header to try and get some negative points, but do they all make +> sense in combination. Can you have a Pine message id in the same header +> with an Outlook Express one or a Mutt User-Agent? + +Yes, this is a big bonus of meta rules (new in 2.40); we can now +e.g. check for an Outlook-style forwarded message, and not give +it negative points unless it contains other signs of being from +Outlook. + +> I think the headers should be paid special attention to. The message +> content of something from the NY Times or Lockergnome might look spammy, but +> usually they don't forge or fake anything in the header. Tone down the +> negative scores and ding them extra for any obvious forgeries. + +When we get more (good) "nice" tests, the GA will assign lower +scores to them. I think the current problem is that there are +very few really good nice tests in the current rulebase, and lots +of +ve tests that those newsletters hit, giving the GA a big +problem to solve. + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01441.28d32ca53515c4d059474dcf544cfa20 b/Ch3/datasets/spam/easy_ham/01441.28d32ca53515c4d059474dcf544cfa20 new file mode 100644 index 000000000..26cd6e778 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01441.28d32ca53515c4d059474dcf544cfa20 @@ -0,0 +1,88 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Sep 5 12:51:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 91BD016F20 + for ; Thu, 5 Sep 2002 12:51:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 12:51:10 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g85BdWZ17228 for ; Thu, 5 Sep 2002 12:39:32 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17muyW-0002r7-00; Thu, + 05 Sep 2002 04:39:04 -0700 +Received: from relay05.indigo.ie ([194.125.133.229]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17muxX-0001Og-00 for ; + Thu, 05 Sep 2002 04:38:03 -0700 +Received: (qmail 67415 messnum 1193219 invoked from + network[194.125.172.167/ts12-167.dublin.indigo.ie]); 5 Sep 2002 11:38:00 + -0000 +Received: from ts12-167.dublin.indigo.ie (HELO spamassassin.taint.org) + (194.125.172.167) by relay05.indigo.ie (qp 67415) with SMTP; + 5 Sep 2002 11:38:00 -0000 +Received: by spamassassin.taint.org (Postfix, from userid 500) id F10F516F49; + Thu, 5 Sep 2002 12:26:30 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) by spamassassin.taint.org (Postfix) + with ESMTP id EE314F7B1 for ; + Thu, 5 Sep 2002 12:26:30 +0100 (IST) +To: SpamAssassin +Subject: Re: [SAtalk] My SA went crazy. +In-Reply-To: Message from Jesus Climent of + "Thu, 05 Sep 2002 08:08:35 +0200." + <20020905060834.GA20869@reypastor.hispalinux.es> +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020905112630.F10F516F49@spamassassin.taint.org> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 05 Sep 2002 12:26:25 +0100 +Date: Thu, 05 Sep 2002 12:26:25 +0100 + + +Jesus Climent said: + +> d output: Bareword found where operator expected at (eval 11) line 95, +> near "25FREEMEGS_URL_uri_test" (Missing operator before +> FREEMEGS_URL_uri_test?) Bareword found whe + +> Is that a bug or is a fault in my system? + +looks like there's an out-of-date copy of the rules files, on your system. +that rules is called "FREEMEGS_URL" nowadays. + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01442.a81b9c1ad6e37314caa3068a26ca203e b/Ch3/datasets/spam/easy_ham/01442.a81b9c1ad6e37314caa3068a26ca203e new file mode 100644 index 000000000..46ce4e428 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01442.a81b9c1ad6e37314caa3068a26ca203e @@ -0,0 +1,99 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Sep 5 12:51:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5C4B616F1F + for ; Thu, 5 Sep 2002 12:51:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 12:51:22 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g85BdXZ17230 for ; Thu, 5 Sep 2002 12:39:33 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17muyU-0002qr-00; Thu, + 05 Sep 2002 04:39:02 -0700 +Received: from relay07.indigo.ie ([194.125.133.231]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17muxW-0001OX-00 for ; + Thu, 05 Sep 2002 04:38:02 -0700 +Received: (qmail 17070 messnum 1023657 invoked from + network[194.125.172.167/ts12-167.dublin.indigo.ie]); 5 Sep 2002 11:37:57 + -0000 +Received: from ts12-167.dublin.indigo.ie (HELO spamassassin.taint.org) + (194.125.172.167) by relay07.indigo.ie (qp 17070) with SMTP; + 5 Sep 2002 11:37:57 -0000 +Received: by spamassassin.taint.org (Postfix, from userid 500) id 76D1C16F20; + Thu, 5 Sep 2002 12:15:40 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) by spamassassin.taint.org (Postfix) + with ESMTP id 73FAAF7B1 for ; + Thu, 5 Sep 2002 12:15:40 +0100 (IST) +To: SpamAssassin-talk@example.sourceforge.net +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Image-Url: http://spamassassin.taint.org/me.jpg +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020905111540.76D1C16F20@spamassassin.taint.org> +Subject: [SAtalk] Thought for RPM/deb/etc packagers +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 05 Sep 2002 12:15:35 +0100 +Date: Thu, 05 Sep 2002 12:15:35 +0100 + +BTW, I've been thinking a little about the RPMs and other packages. +Already the PLD guys are distributing 3 rpms: + + - perl-Mail-SpamAssassin + + the perl modules. + + - spamassassin + + the "spamassassin" and "spamd" scripts, + spamd rc-file etc. + + - spamassassin-tools + + mass-check, masses directory stuff, etc. + for generating rescore data from corpora. + +This seems like a good way to do it; this way, stuff which just needs +the perl modules doesn't need to require the full RPM be installed, +with RC files in init.d etc. + +It's been adopted in the distributed .spec file, anyway. + +Theo, BTW, what's the eval test you add in the tvd version of the RPM? + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01443.fbf45616f74c213bc92c655133eeee73 b/Ch3/datasets/spam/easy_ham/01443.fbf45616f74c213bc92c655133eeee73 new file mode 100644 index 000000000..794f386d7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01443.fbf45616f74c213bc92c655133eeee73 @@ -0,0 +1,100 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Sep 5 13:39:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1A38C16F1F + for ; Thu, 5 Sep 2002 13:39:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 13:39:27 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g85Ca4Z18947 for ; Thu, 5 Sep 2002 13:36:04 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17mvpl-0006qx-00; Thu, + 05 Sep 2002 05:34:05 -0700 +Received: from dhcp024-208-195-177.indy.rr.com ([24.208.195.177] + helo=burgers.bubbanfriends.org) by usw-sf-list1.sourceforge.net with esmtp + (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17mvp4-0007xp-00 for ; + Thu, 05 Sep 2002 05:33:22 -0700 +Received: from localhost (localhost.localdomain [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id 2E7AA4001A1; + Thu, 5 Sep 2002 07:33:17 -0500 (EST) +Received: by burgers.bubbanfriends.org (Postfix, from userid 500) id + 08B464001A0; Thu, 5 Sep 2002 07:33:15 -0500 (EST) +Received: from localhost (localhost [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id E6805C026A6; + Thu, 5 Sep 2002 07:33:15 -0500 (EST) +From: Mike Burger +To: "Malte S. Stretz" +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] PerMsgStatus.pm error? +In-Reply-To: <200209051318.24194@malte.stretz.eu.org> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Virus-Scanned: by AMaViS new-20020517 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 07:33:15 -0500 (EST) +Date: Thu, 5 Sep 2002 07:33:15 -0500 (EST) + +It's possible...I performed the update via "rpm -U"...which, of course, +created all the new rulesets as "xx_rulename.cf.rpmnew" Crud. I'll have +to start moving things around. + +On Thu, 5 Sep 2002, Malte S. Stretz wrote: + +> On Thursday 05 September 2002 04:10 CET Mike Burger wrote: +> > Just loaded up SA 2.40 from Theo's RPMs...spamassassin-2.40-1 and +> > perl-Mail-SpamAssassin-2.40-1 on a RH 7.1 system with perl 5.6.1 running +> > on it. +> > +> > I'm getting messages that seem to indicate that SA can't find +> > PerMsgStatus, like so: +> > +> > Sep 4 21:01:59 burgers spamd[17579]: Failed to run CTYPE_JUST_HTML +> > SpamAssassin test, skipping: ^I(Can't locate object method +> > "check_for_content_type_just_html" via package +> > "Mail::SpamAssassin::PerMsgStatus" (perhaps you forgot to load +> > "Mail::SpamAssassin::PerMsgStatus"?) at +> > /usr/lib/perl5/site_perl/5.6.1/Mail/SpamAssassin/PerMsgStatus.pm line +> > 1814, line 21. ) +> > +> >[...] +> > +> > Any ideas? +> +> Perl doesn't complain that it can't find PerMsgStatus.pm but the function +> check_for_content_type_just_html(). Do you probably have some old rules +> files still lurking around? This test existed in 2.31 but is gone/was +> renamed with 2.40. +> +> Malte +> +> + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01444.e1ba7ba95203d116703a10056396a037 b/Ch3/datasets/spam/easy_ham/01444.e1ba7ba95203d116703a10056396a037 new file mode 100644 index 000000000..de6b3b100 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01444.e1ba7ba95203d116703a10056396a037 @@ -0,0 +1,74 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Sep 6 15:29:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 31D4716F17 + for ; Fri, 6 Sep 2002 15:26:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 15:26:37 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g86A13C30438 for + ; Fri, 6 Sep 2002 11:01:03 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id SAA16846 for + ; Thu, 5 Sep 2002 18:15:55 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n0Dh-0006tl-00; Thu, + 05 Sep 2002 10:15:05 -0700 +Received: from adsl-64-160-225-82.dsl.lsan03.pacbell.net ([64.160.225.82] + helo=control.unearthed.org) by usw-sf-list1.sourceforge.net with esmtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17n0D6-0007Dw-00 for + ; Thu, 05 Sep 2002 10:14:28 -0700 +Received: from brianmay (act-firewall [64.52.135.194]) by + control.unearthed.org (8.11.6/linuxconf) with SMTP id g85HEPI13616 for + ; Thu, 5 Sep 2002 10:14:25 -0700 +Message-Id: <00c201c254ff$bc2acb30$8801020a@brianmay> +From: "Brian May" +To: "SpamAssassin Users' list" +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Subject: [SAtalk] [OT] SpamAssassin figures... +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 10:14:46 -0700 +Date: Thu, 5 Sep 2002 10:14:46 -0700 + +I finally found the SpamAssassin ninja's! After months of searchng.. I +found the litte guys at a bowling alley in Valencia! Here's a shot of my +beloved clan! + +http://www.mattahfahtu.com/ + + + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01445.943b6ecc93ff03231306c4e9efeadc01 b/Ch3/datasets/spam/easy_ham/01445.943b6ecc93ff03231306c4e9efeadc01 new file mode 100644 index 000000000..bb260aeb1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01445.943b6ecc93ff03231306c4e9efeadc01 @@ -0,0 +1,72 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Sep 6 15:29:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7160216F22 + for ; Fri, 6 Sep 2002 15:26:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 15:26:41 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g86A0qC30406 for + ; Fri, 6 Sep 2002 11:00:53 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id SAA17222 for + ; Thu, 5 Sep 2002 18:53:54 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n0nW-00050j-00; Thu, + 05 Sep 2002 10:52:06 -0700 +Received: from mx-out.daemonmail.net ([216.104.160.37]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n0n8-000405-00 for ; + Thu, 05 Sep 2002 10:51:42 -0700 +Received: from mx0.emailqueue.net (localhost.daemonmail.net [127.0.0.1]) + by mx-out.daemonmail.net (8.9.3/8.9.3) with SMTP id KAA61959 for + ; Thu, 5 Sep 2002 10:51:38 -0700 + (PDT) (envelope-from brian@unearthed.com) +Received: from brianmay (brianmay [64.52.135.194]) by mail.unearthed.com + with ESMTP id F4G0l8M2 Thu, 05 Sep 2002 10:51:01 -0700 (PDT) +Message-Id: <00c701c25504$da88e530$8801020a@brianmay> +From: "Brian May" +To: "SpamAssassin Users' list" +References: <00c201c254ff$bc2acb30$8801020a@brianmay> +Subject: Re: [SAtalk] [OT] SpamAssassin figures... +Organization: UnEarthed.Com +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 10:51:23 -0700 +Date: Thu, 5 Sep 2002 10:51:23 -0700 + +sorry for the dupe.. thought the com address would bounce.. my bad. + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01446.2bc1d074ad6e9bc83adf861ccbf0c498 b/Ch3/datasets/spam/easy_ham/01446.2bc1d074ad6e9bc83adf861ccbf0c498 new file mode 100644 index 000000000..d48d4b563 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01446.2bc1d074ad6e9bc83adf861ccbf0c498 @@ -0,0 +1,110 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Sep 6 19:36:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A1FEB16F17 + for ; Fri, 6 Sep 2002 19:36:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 19:36:48 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g86HtrC18442 for ; Fri, 6 Sep 2002 18:55:54 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17nNJw-0008Sn-00; Fri, + 06 Sep 2002 10:55:04 -0700 +Received: from eclectic.kluge.net ([66.92.69.221]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17nNJB-0007KL-00 for + ; Fri, 06 Sep 2002 10:54:17 -0700 +Received: from eclectic.kluge.net (localhost [127.0.0.1]) by + eclectic.kluge.net (8.12.6/8.12.6) with ESMTP id g86HsCnP020010; + Fri, 6 Sep 2002 13:54:12 -0400 +Received: (from felicity@localhost) by eclectic.kluge.net + (8.12.6/8.12.6/Submit) id g86HsCog020008; Fri, 6 Sep 2002 13:54:12 -0400 +From: Theo Van Dinter +To: Josh Hildebrand +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] redhat init.d script for spamd and the -H option +Message-Id: <20020906175411.GB18326@kluge.net> +References: + <20020906163144.GA9866@jedi.net> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="UHN/qo2QbUvPLonB" +Content-Disposition: inline +In-Reply-To: <20020906163144.GA9866@jedi.net> +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 6 Sep 2002 13:54:11 -0400 +Date: Fri, 6 Sep 2002 13:54:11 -0400 + + +--UHN/qo2QbUvPLonB +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Fri, Sep 06, 2002 at 11:32:01AM -0500, Josh Hildebrand wrote: +> Unfortunately, when I run that, it complains about the H parameter. +>=20 +> -F 0|1 remove/add 'From ' line at start of output (default: 1) +>=20 +> But I can run it on the command line as "spamd -d -c -a -H" just fine. +>=20 +> Anyone else run into this problem? + +you look to have 2 versions of spamd installed. The one running from +the RC script is pre-2.4 (there is a -H now, and -F has been removed), +but the one you run from the commandline seems to be a 2.4x version. + +I would find that old version of SA and blow it away. + +--=20 +Randomly Generated Tagline: +"If you lend someone $20, and never see that person again, it was probably + worth it." - Zen Musings + +--UHN/qo2QbUvPLonB +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9eOvDAuOQUeWAs2MRAmQQAKDvRrfV2FasxShCaSQCCdfbvx4mbQCeK3Eq +IXNsRLjK0elfi5oPbnQedEI= +=woQJ +-----END PGP SIGNATURE----- + +--UHN/qo2QbUvPLonB-- + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01447.98e4b20ceb192594e992f7db9f8dfc53 b/Ch3/datasets/spam/easy_ham/01447.98e4b20ceb192594e992f7db9f8dfc53 new file mode 100644 index 000000000..16a7deae6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01447.98e4b20ceb192594e992f7db9f8dfc53 @@ -0,0 +1,86 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Sep 6 19:37:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D0DAA16F1A + for ; Fri, 6 Sep 2002 19:36:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 19:36:53 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g86I63C18731 for ; Fri, 6 Sep 2002 19:06:03 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17nNTg-0001MN-00; Fri, + 06 Sep 2002 11:05:08 -0700 +Received: from gc-na5.alcatel.fr ([64.208.49.5] helo=smail2.alcatel.fr) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17nNTL-00024f-00 for ; + Fri, 06 Sep 2002 11:04:48 -0700 +Received: from iww.netfr.alcatel.fr (iww.netfr.alcatel.fr + [155.132.180.114]) by smail2.alcatel.fr (ALCANET/NETFR) with ESMTP id + g86I3uCv015726 for ; + Fri, 6 Sep 2002 20:03:57 +0200 +Received: by iww.netfr.alcatel.fr + ("Mikrosoft Xchange", + from userid 513) id 1F1771B2E; Fri, 6 Sep 2002 20:04:20 +0200 (CEST) +From: Stephane Lentz +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Lotus Notes users? +Message-Id: <20020906180419.GA14739@iww.netfr.alcatel.fr> +Mail-Followup-To: Stephane Lentz , + spamassassin-talk@lists.sourceforge.net +References: <3D78E46C.5070101@startechgroup.co.uk> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <3D78E46C.5070101@startechgroup.co.uk> +X-Mailer: Bogus Notes 5.10.666 (Corporate Release) +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 6 Sep 2002 20:04:20 +0200 +Date: Fri, 6 Sep 2002 20:04:20 +0200 + +On Fri, Sep 06, 2002 at 06:22:52PM +0100, Matt Sergeant wrote: +> Can anyone out there who uses SA with lotus notes users help us figure +> out what to tell customers to do when they've got emails coming in with +> spam identifying headers? We've been told that Notes has no way to +> handle extra headers, but I'm sure that can't be universally true. +> +> I've searched the 'net, and it seems that Notes can only filter based on +> the "visible" headers, i.e. sender, subject, precedence, etc. Is there +> any way to filter based on X- headers? + +=> Yes the only way out with Notes looks like changing the subject +(subject_tag). + +Regards, + +SL/ +--- +Stephane Lentz / Alcanet International - Internet Services + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01448.335343826f0aef0c176f3aebe3c1806a b/Ch3/datasets/spam/easy_ham/01448.335343826f0aef0c176f3aebe3c1806a new file mode 100644 index 000000000..c470f95fe --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01448.335343826f0aef0c176f3aebe3c1806a @@ -0,0 +1,105 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Sep 6 19:36:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 237E016F19 + for ; Fri, 6 Sep 2002 19:36:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 19:36:52 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g86HvgC18460 for ; Fri, 6 Sep 2002 18:57:42 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17nNLs-0000Nw-00; Fri, + 06 Sep 2002 10:57:04 -0700 +Received: from eclectic.kluge.net ([66.92.69.221]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17nNLF-0007Vl-00 for + ; Fri, 06 Sep 2002 10:56:25 + -0700 +Received: from eclectic.kluge.net (localhost [127.0.0.1]) by + eclectic.kluge.net (8.12.6/8.12.6) with ESMTP id g86HuKnP020150; + Fri, 6 Sep 2002 13:56:20 -0400 +Received: (from felicity@localhost) by eclectic.kluge.net + (8.12.6/8.12.6/Submit) id g86HuJsS020148; Fri, 6 Sep 2002 13:56:19 -0400 +From: Theo Van Dinter +To: bugzilla-daemon@hughes-family.org +Cc: spamassassin-devel@example.sourceforge.net +Subject: Re: [SAdev] [Bug 840] spam_level_char option change/removal +Message-Id: <20020906175619.GC18326@kluge.net> +References: <20020906170919.C128CA4C29@belphegore.hughes-family.org> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="sHrvAb52M6C8blB9" +Content-Disposition: inline +In-Reply-To: <20020906170919.C128CA4C29@belphegore.hughes-family.org> +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 6 Sep 2002 13:56:19 -0400 +Date: Fri, 6 Sep 2002 13:56:19 -0400 + + +--sHrvAb52M6C8blB9 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Fri, Sep 06, 2002 at 10:09:19AM -0700, bugzilla-daemon@hughes-family.org= + wrote: +> another (or would look terrible). Let's just use a letter. If +> aesthetics are your concern, I think an "x" will look just fine. + +"x" is fine, but let's not take out the config option. if people really +want to have it be something else, we shouldn't hinder them. + +--=20 +Randomly Generated Tagline: +"And the next time you consider complaining that running Lucid Emacs + 19.05 via NFS from a remote Linux machine in Paraguay doesn't seem to + get the background colors right, you'll know who to thank." + (By Matt Welsh) + +--sHrvAb52M6C8blB9 +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9eOxDAuOQUeWAs2MRAuH1AKD8heTyLbbAWWkpWyjY6k4JwKhOMgCg4C++ +rl8B1iVlvS/M0aFW6DubyQA= +=BibY +-----END PGP SIGNATURE----- + +--sHrvAb52M6C8blB9-- + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01449.36c83d8ef96bc2bf4f6606ab8e62a4a5 b/Ch3/datasets/spam/easy_ham/01449.36c83d8ef96bc2bf4f6606ab8e62a4a5 new file mode 100644 index 000000000..b5ed90e18 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01449.36c83d8ef96bc2bf4f6606ab8e62a4a5 @@ -0,0 +1,81 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Sep 6 19:36:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6323416F18 + for ; Fri, 6 Sep 2002 19:36:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 19:36:50 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g86HvfC18459 for ; Fri, 6 Sep 2002 18:57:41 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17nNLs-0000OB-00; Fri, + 06 Sep 2002 10:57:04 -0700 +Received: from tisch.mail.mindspring.net ([207.69.200.157]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17nNLK-0007W1-00 for ; + Fri, 06 Sep 2002 10:56:30 -0700 +Received: from user-1120ft5.dsl.mindspring.com ([66.32.63.165] + helo=belphegore.hughes-family.org) by tisch.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17nNLI-00029N-00 for + spamassassin-devel@lists.sourceforge.net; Fri, 06 Sep 2002 13:56:28 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 76) id + D985EA4C92; Fri, 6 Sep 2002 10:56:23 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20020906175623.D985EA4C92@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 840] spam_level_char option change/removal +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 6 Sep 2002 10:56:23 -0700 (PDT) +Date: Fri, 6 Sep 2002 10:56:23 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=840 + + + + + +------- Additional Comments From felicity@kluge.net 2002-09-06 10:56 ------- +Subject: Re: [SAdev] spam_level_char option change/removal + +On Fri, Sep 06, 2002 at 10:09:19AM -0700, bugzilla-daemon@hughes-family.org wrote: +> another (or would look terrible). Let's just use a letter. If +> aesthetics are your concern, I think an "x" will look just fine. + +"x" is fine, but let's not take out the config option. if people really +want to have it be something else, we shouldn't hinder them. + + + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01450.b1d4f6eb3023d388319422cec20d1b0d b/Ch3/datasets/spam/easy_ham/01450.b1d4f6eb3023d388319422cec20d1b0d new file mode 100644 index 000000000..b469583cf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01450.b1d4f6eb3023d388319422cec20d1b0d @@ -0,0 +1,117 @@ +From spamassassin-talk-admin@lists.sourceforge.net Sun Sep 8 23:57:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3215C16F1A + for ; Sun, 8 Sep 2002 23:51:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 08 Sep 2002 23:51:55 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g88EIdC32338 for ; Sun, 8 Sep 2002 15:18:44 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17o2t3-0004jQ-00; Sun, + 08 Sep 2002 07:18:05 -0700 +Received: from mailout10.sul.t-online.com ([194.25.134.21]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17o2rz-0005Ts-00 for ; + Sun, 08 Sep 2002 07:16:59 -0700 +Received: from fwd00.sul.t-online.de by mailout10.sul.t-online.com with + smtp id 17o2rv-0003dY-00; Sun, 08 Sep 2002 16:16:55 +0200 +Received: from nebukadnezar.msquadrat.de + (520061089980-0001@[62.226.214.55]) by fmrl00.sul.t-online.com with esmtp + id 17o2rr-1VybIWC; Sun, 8 Sep 2002 16:16:51 +0200 +Received: from otherland (otherland.msquadrat.de [10.10.10.10]) by + nebukadnezar.msquadrat.de (Postfix on SuSE Linux 7.3 (i386)) with ESMTP id + F3CD32E9 for ; Sun, 8 Sep 2002 16:16:50 + +0200 (CEST) +Content-Type: text/plain; charset="iso-8859-15" +From: "Malte S. Stretz" +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Lotus Notes users? +User-Agent: KMail/1.4.3 +References: + +In-Reply-To: +X-Accept-Language: de, en +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: Warrant Mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200209081619.34777@malte.stretz.eu.org> +X-Sender: 520061089980-0001@t-dialin.net +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 8 Sep 2002 16:19:34 +0200 +Date: Sun, 8 Sep 2002 16:19:34 +0200 + +On Saturday 07 September 2002 23:22 CET Daniel Quinlan wrote: +> Craig Hughes writes: +> > How about configuring SA to set precendence to "low" for spam +> > messages, then filter on that -- no real human I've ever seen has +> > actually set precendence to low on real mail. +> +> Assuming there isn't a better way for Lotus Notes users, we could +> create a "Precedence: spam" convention. The only two Precedence: +> headers I've seen (aside from one or two odd messages) are "bulk" and +> "list". Adding a "spam" header makes sense given the convention. + +I'd suggest using Precedence: junk. Albeit it's no standard header does most +Software already recognize it. Courier eg. doesn't send auto-replies to +mails with the Precedence bulk or junk. I think Outlook does handle these +special, too. [1] says: +| Autoresponses should always contain the header +| Precedence: junk +| Notice the spelling of "prec-e-dence". In particular, count the number of +| n:s (and a:s and s:es, if you're totally agraphic and/or from the United +| States). This will prevent well-tempered mail programs from generating +| bounce messages for these. If the recipient can't be reached, the +| autoresponder message is simply discarded. +| [...] +| (For what it's worth, the meaning of the Precedence header in practice is +| that it affects Sendmail so that messages identified as less important get +| moved back in the queue under high load. [...]) + +>[...] + +Malte + +[1] Moronic Mail Autoresponders (A FAQ From Hell): +http://www.ling.helsinki.fi/users/reriksso/mail/autoresponder-faq.html +-- +--- Coding is art. +-- + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01451.b5a50ca35f50e38d37a2eba47399f57d b/Ch3/datasets/spam/easy_ham/01451.b5a50ca35f50e38d37a2eba47399f57d new file mode 100644 index 000000000..5e6f0cd80 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01451.b5a50ca35f50e38d37a2eba47399f57d @@ -0,0 +1,90 @@ +From spamassassin-talk-admin@lists.sourceforge.net Sun Sep 8 23:57:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E960716F19 + for ; Sun, 8 Sep 2002 23:51:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 08 Sep 2002 23:51:52 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g88E25C31776 for ; Sun, 8 Sep 2002 15:02:06 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17o2bc-0006T7-00; Sun, + 08 Sep 2002 07:00:04 -0700 +Received: from mailman.rexus.com ([216.136.83.173] helo=Mr-Mailman) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17o2az-0006pF-00 for + ; Sun, 08 Sep 2002 06:59:25 -0700 +Received: from 65.90.104.216 [65.90.104.216] by Mr-Mailman with SMTPBeamer + v3.30 ; Sun, 8 Sep 2002 09:56:46 -0400 +Received: from omega.paradigm-omega.net (localhost.localdomain + [127.0.0.1]) by omega.paradigm-omega.net (Postfix) with ESMTP id + 34B6E9FB5B for ; Sun, + 8 Sep 2002 06:59:08 -0700 (PDT) +Content-Type: text/plain; charset="iso-8859-15" +Organization: Paradigm-Omega, LLC +To: spamassassin-talk@example.sourceforge.net +X-Mailer: KMail [version 1.3.1] +X-PGP-Key-1: 8828 DA31 F788 2F87 CE6D F563 5568 BABC 647E C336 +X-PGP-Key_2: D152 7DD6 C0E8 F2CB 4CD3 B5D7 5F67 B017 38D0 A14E +X-Copyright(C): 2002 +X-Owner: Paradigm-Omega,LLC(tm) +X-All-Rights: Reserved +X-Dissemination: Prohibited +X-Classification: Confidential/Proprietary +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +From: Robin Lynn Frank +Message-Id: <1031493547.12768.TMDA@omega.paradigm-omega.net> +X-Delivery-Agent: TMDA/0.62 +X-Identifier: Robin Lynn Frank +Reply-To: Robin Lynn Frank +Subject: [SAtalk] spamd can't find... +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 8 Sep 2002 06:59:04 -0700 +Date: Sun, 8 Sep 2002 06:59:04 -0700 + +I thought I'd installed razor correctly, but I am seeing the following in my +logs. Can anyone give me a hitn? + +Sep 8 06:46:45 omega spamd[6514]: razor2 check skipped: No such file or +directory Can't locate object method "new" via package "Net::DNS::Resolver" +(perhaps you forgot to load "Net::DNS::Resolver"?) at (eval 31) line 1, + line 114. ^I...propagated at +/usr/lib/perl5/site_perl/5.6.1/Mail/SpamAssassin/Dns.pm line 392, +line 114. + +-- +Robin Lynn Frank +Paradigm-Omega, LLC +================================== +The only certainty about documentation is that +whoever wrote it "might" have understood it. +The rest of us may not be so lucky. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01452.05464b6ef101be1f2f10809d1577d630 b/Ch3/datasets/spam/easy_ham/01452.05464b6ef101be1f2f10809d1577d630 new file mode 100644 index 000000000..e14ca3176 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01452.05464b6ef101be1f2f10809d1577d630 @@ -0,0 +1,90 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Sep 9 10:50:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D9A0416F49 + for ; Mon, 9 Sep 2002 10:47:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 10:47:14 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g88NYgC16982 for ; Mon, 9 Sep 2002 00:34:42 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17oBZ8-0006yI-00; Sun, + 08 Sep 2002 16:34:06 -0700 +Received: from www.2secure.net ([216.136.83.201] helo=cltweb) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17oBYd-0001lu-00 for + ; Sun, 08 Sep 2002 16:33:36 -0700 +Received: from 65.91.222.52 [65.91.222.52] by cltweb with SMTPBeamer v3.30 + ; Sun, 8 Sep 2002 19:33:22 -0400 +Received: from omega.paradigm-omega.net (localhost.localdomain + [127.0.0.1]) by omega.paradigm-omega.net (Postfix) with ESMTP id + 948B89FB5B for ; Sun, + 8 Sep 2002 16:33:20 -0700 (PDT) +Content-Type: text/plain; charset="iso-8859-15" +Organization: Paradigm-Omega, LLC +To: spamassassin-talk@example.sourceforge.net +X-Mailer: KMail [version 1.3.1] +X-PGP-Key-1: 8828 DA31 F788 2F87 CE6D F563 5568 BABC 647E C336 +X-PGP-Key_2: D152 7DD6 C0E8 F2CB 4CD3 B5D7 5F67 B017 38D0 A14E +X-Copyright(C): 2002 +X-Owner: Paradigm-Omega,LLC(tm) +X-All-Rights: Reserved +X-Dissemination: Prohibited +X-Classification: Confidential/Proprietary +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +From: Robin Lynn Frank +Message-Id: <1031528000.14372.TMDA@omega.paradigm-omega.net> +X-Delivery-Agent: TMDA/0.62 +X-Identifier: Robin Lynn Frank +Reply-To: Robin Lynn Frank +Subject: [SAtalk] Huh? +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 8 Sep 2002 16:33:10 -0700 +Date: Sun, 8 Sep 2002 16:33:10 -0700 + +Despite my lack of confidence to upgrade to 2.41 using the tarball instead of +cpan, it worked. With the help of others, got razor working. I did however +notice something in my logs which happened twice but hasn't recurred. + +Sep 8 16:10:11 omega spamd[14014]: razor2 check skipped: Permission denied +Can't call method "log" on unblessed reference at +/usr/lib/perl5/site_perl/5.6.1/Razor2/Client/Agent.pm line 211, line +66. + + +-- +Robin Lynn Frank +Paradigm-Omega, LLC +================================== +The only certainty about documentation is that +whoever wrote it "might" have understood it. +The rest of us may not be so lucky. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01453.457f368091551f4307961511ce0ead34 b/Ch3/datasets/spam/easy_ham/01453.457f368091551f4307961511ce0ead34 new file mode 100644 index 000000000..baf51be9f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01453.457f368091551f4307961511ce0ead34 @@ -0,0 +1,99 @@ +From spamassassin-devel-admin@lists.sourceforge.net Mon Sep 9 14:35:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 612A616EFC + for ; Mon, 9 Sep 2002 14:35:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 09 Sep 2002 14:35:53 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g89AJpC09372 for ; Mon, 9 Sep 2002 11:19:51 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17oLcK-0007tV-00; Mon, + 09 Sep 2002 03:18:04 -0700 +Received: from mailout08.sul.t-online.com ([194.25.134.20]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17oLbr-0005WK-00 for ; + Mon, 09 Sep 2002 03:17:35 -0700 +Received: from fwd00.sul.t-online.de by mailout08.sul.t-online.com with + smtp id 17oLbn-0004hx-07; Mon, 09 Sep 2002 12:17:31 +0200 +Received: from nebukadnezar.msquadrat.de + (520061089980-0001@[62.155.187.197]) by fmrl00.sul.t-online.com with esmtp + id 17oLbT-1nMo40C; Mon, 9 Sep 2002 12:17:11 +0200 +Received: from otherland (otherland.msquadrat.de [10.10.10.10]) by + nebukadnezar.msquadrat.de (Postfix on SuSE Linux 7.3 (i386)) with ESMTP id + 172153BB3 for ; Mon, 9 Sep 2002 12:17:13 + +0200 (CEST) +Content-Type: text/plain; charset="iso-8859-1" +From: "Malte S. Stretz" +To: spamassassin-devel@example.sourceforge.net +Subject: Re: [SAdev] Re: [SACVS] CVS: spamassassin/rules 60_whitelist.cf,1.29,1.30 +User-Agent: KMail/1.4.3 +References: + <200209091108.22690@malte.stretz.eu.org> + <3D7C6642.4040100@startechgroup.co.uk> +In-Reply-To: <3D7C6642.4040100@startechgroup.co.uk> +X-Accept-Language: de, en +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: Warrant Mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200209091219.58498@malte.stretz.eu.org> +X-Sender: 520061089980-0001@t-dialin.net +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 9 Sep 2002 12:19:58 +0200 +Date: Mon, 9 Sep 2002 12:19:58 +0200 + +On Monday 09 September 2002 11:13 CET Matt Sergeant wrote: +> Malte S. Stretz wrote: +> >[...] +> > So I'd vote for a complete removal of 60_whitelists.cf and a page +> > http://spamassassin.org/tests/whitelists.html where we list common +> > whitelist entries instead. +> +> I would happily agree to that. +> +> Though maybe it should be a wiki... ;-) + +Just imagine what Ronnie Scelson would do to a wiki *shudder* + +M +-- +--- Coding is art. +-- + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01454.9d6b2206cc67fc7bdce65109a7bf1b5f b/Ch3/datasets/spam/easy_ham/01454.9d6b2206cc67fc7bdce65109a7bf1b5f new file mode 100644 index 000000000..3dcd71347 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01454.9d6b2206cc67fc7bdce65109a7bf1b5f @@ -0,0 +1,76 @@ +From spamassassin-devel-admin@lists.sourceforge.net Tue Sep 10 18:18:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B7C4E16F03 + for ; Tue, 10 Sep 2002 18:18:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 18:18:32 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8AFmpC05410 for ; Tue, 10 Sep 2002 16:48:51 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17onDH-0001Xz-00; Tue, + 10 Sep 2002 08:46:03 -0700 +Received: from maynard.mail.mindspring.net ([207.69.200.243]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17onCY-0005HC-00 for ; + Tue, 10 Sep 2002 08:45:18 -0700 +Received: from user-vcaur02.dsl.mindspring.com ([216.175.108.2] + helo=belphegore.hughes-family.org) by maynard.mail.mindspring.net with + esmtp (Exim 3.33 #1) id 17onCP-000239-00 for + spamassassin-devel@lists.sourceforge.net; Tue, 10 Sep 2002 11:45:09 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + D02ED9EDBF; Tue, 10 Sep 2002 08:45:08 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20020910154508.D02ED9EDBF@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 486] SpamAssassin causes zombies (network tests, + MIMEDefang 2.16) +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 10 Sep 2002 08:45:08 -0700 (PDT) +Date: Tue, 10 Sep 2002 08:45:08 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=486 + + + + + +------- Additional Comments From larry@5points.net 2002-09-10 08:45 ------- +Dan, + +To answer your question to my post (which maybe should be a seperate bug?) I'm +using Spamassassin version 2.30 + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01455.6f59785ae19e2d0c92f0f18764e5e8a6 b/Ch3/datasets/spam/easy_ham/01455.6f59785ae19e2d0c92f0f18764e5e8a6 new file mode 100644 index 000000000..a29737da0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01455.6f59785ae19e2d0c92f0f18764e5e8a6 @@ -0,0 +1,72 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Sep 11 16:05:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CAB9B16F03 + for ; Wed, 11 Sep 2002 16:05:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 16:05:25 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8BDeHC16691 for ; Wed, 11 Sep 2002 14:40:17 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17p7g0-0002aM-00; Wed, + 11 Sep 2002 06:37:04 -0700 +Received: from yertle.kcilink.com ([216.194.193.105]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17p7fd-00078a-00 for ; + Wed, 11 Sep 2002 06:36:41 -0700 +Received: from onceler.kciLink.com (onceler.kciLink.com [216.194.193.106]) + by yertle.kciLink.com (Postfix) with ESMTP id F134A2178D for + ; Wed, 11 Sep 2002 09:36:38 -0400 + (EDT) +Received: by onceler.kciLink.com (Postfix, from userid 100) id DE1C63D11; + Wed, 11 Sep 2002 09:36:38 -0400 (EDT) +From: Vivek Khera +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Message-Id: <15743.18150.567462.560748@onceler.kciLink.com> +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] base64 decode problem? +In-Reply-To: <20020911000343.C18217@alinoe.com> +References: <20020911000343.C18217@alinoe.com> +X-Mailer: VM 7.07 under 21.4 (patch 8) "Honest Recruiter" XEmacs Lucid +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 11 Sep 2002 09:36:38 -0400 +Date: Wed, 11 Sep 2002 09:36:38 -0400 + +>>>>> "CW" == Carlo Wood writes: + +CW> to manually decode the base64 part. +CW> Can someone please tell me how to do that? + + +google: base64 decode + +the first three results look useful. + + +------------------------------------------------------- +In remembrance +www.osdn.com/911/ +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01456.5f475d17a5f72ce4067c8727d2db160a b/Ch3/datasets/spam/easy_ham/01456.5f475d17a5f72ce4067c8727d2db160a new file mode 100644 index 000000000..9c1c489d5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01456.5f475d17a5f72ce4067c8727d2db160a @@ -0,0 +1,82 @@ +From msquadrat.nospamplease@gmx.net Wed Sep 11 19:41:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B8BEF16F03 + for ; Wed, 11 Sep 2002 19:41:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 19:41:21 +0100 (IST) +Received: from mailout11.sul.t-online.com (mailout11.sul.t-online.com + [194.25.134.85]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8BFNDC20372 for ; Wed, 11 Sep 2002 16:23:13 +0100 +Received: from fwd00.sul.t-online.de by mailout11.sul.t-online.com with + smtp id 17p9L7-0005Jj-05; Wed, 11 Sep 2002 17:23:37 +0200 +Received: from nebukadnezar.msquadrat.de + (520061089980-0001@[217.80.6.194]) by fmrl00.sul.t-online.com with esmtp + id 17p9L2-19TcBsC; Wed, 11 Sep 2002 17:23:32 +0200 +Received: from otherland (otherland.msquadrat.de [10.10.10.10]) by + nebukadnezar.msquadrat.de (Postfix on SuSE Linux 7.3 (i386)) with ESMTP id + 90BFDDC; Wed, 11 Sep 2002 17:23:34 +0200 (CEST) +Content-Type: text/plain; charset="iso-8859-15" +From: "Malte S. Stretz" +To: spamassassin-devel@example.sourceforge.net +Subject: Re: [SAdev] 2.42 to come ? +Date: Wed, 11 Sep 2002 17:26:19 +0200 +User-Agent: KMail/1.4.3 +References: <20020911141938.CF8BE16F19@spamassassin.taint.org> +In-Reply-To: <20020911141938.CF8BE16F19@spamassassin.taint.org> +Cc: yyyy@spamassassin.taint.org (Justin Mason) +X-Accept-Language: de, en +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: Warrant Mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200209111726.19845@malte.stretz.eu.org> +X-Sender: 520061089980-0001@t-dialin.net + +On Wednesday 11 September 2002 16:19 CET Justin Mason wrote: +> Malte S. Stretz said: +>[...] +> > I think we should even add new (GA'd) rules to 2.4x (and/or remove old +> > ones) and tag a new 2.50 only if we have a bunch of features worth a +> > "dangerous" big update. I'd say: Yes, you should expect 2.42 and also +> > 2.43+ (but update to 2.41 now). +> +> I would think adding new rules to, or removing broken rules from, 2.4x +> would require some discussion first. but new GA'd scores are definitely +> worth putting in, as the ones there are too wild. + +I think my mail wasn't very clear ;-) My point was that we should continue +releasing new rules and removing broken ones (all based on discussions on +this list of course) in the 2.4 branch instead of creating a new 2.5 branch +everytime we have a bunch of new rules. + +A new branch should be openend only if (big) new features are introduced +(eg. Bayes) or the interface has changed (spam_level_char=x). As the rules +are under fluent development, the user has to update quite regularly. But +currently he couldn't be shure if the new release will break anything in +his setup (like -F going away). So if we say "the branches are stable to +the outside and just improved under the surface but you have to watch out +when you update to a new minor version number", users and sysadmins could +be less reluctant to update. + +All just IMHO :o) +Malte + +P.S.: I'll be away from my box and my mail account for one week, starting +tomorrow. So happy coding for the next week :-) + +-- +--- Coding is art. +-- + + + diff --git a/Ch3/datasets/spam/easy_ham/01457.7702aebfdeac35ac42bd6214f0292a18 b/Ch3/datasets/spam/easy_ham/01457.7702aebfdeac35ac42bd6214f0292a18 new file mode 100644 index 000000000..e0e2c55f1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01457.7702aebfdeac35ac42bd6214f0292a18 @@ -0,0 +1,107 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Sep 11 19:43:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0EC3D16F03 + for ; Wed, 11 Sep 2002 19:43:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 19:43:23 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8BHgWC24927 for ; Wed, 11 Sep 2002 18:42:32 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pBQJ-0005k2-00; Wed, + 11 Sep 2002 10:37:07 -0700 +Received: from sccrmhc01.attbi.com ([204.127.202.61]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17pBPe-0000WG-00 for ; + Wed, 11 Sep 2002 10:36:26 -0700 +Received: from blossom.cjclark.org ([12.234.91.48]) by sccrmhc01.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020911173620.FTHS16673.sccrmhc01.attbi.com@blossom.cjclark.org> for + ; Wed, 11 Sep 2002 17:36:20 +0000 +Received: from blossom.cjclark.org (localhost. [127.0.0.1]) by + blossom.cjclark.org (8.12.3/8.12.3) with ESMTP id g8BHaJJK087114 for + ; Wed, 11 Sep 2002 10:36:19 -0700 + (PDT) (envelope-from crist.clark@attbi.com) +Received: (from cjc@localhost) by blossom.cjclark.org + (8.12.3/8.12.3/Submit) id g8BHaJpX087113 for + spamassassin-talk@lists.sourceforge.net; Wed, 11 Sep 2002 10:36:19 -0700 + (PDT) +X-Authentication-Warning: blossom.cjclark.org: cjc set sender to + crist.clark@attbi.com using -f +From: "Crist J. Clark" +To: spamassassin-talk@example.sourceforge.net +Message-Id: <20020911173618.GA86845@blossom.cjclark.org> +Reply-To: cjclark@alum.mit.edu +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.4i +X-Url: http://people.freebsd.org/~cjc/ +Subject: [SAtalk] Reject, Blackhole, or Fake No-User? +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 11 Sep 2002 10:36:18 -0700 +Date: Wed, 11 Sep 2002 10:36:18 -0700 + +This is not directly SpamAssassin related, but more of a general +dealing-with-SPAM issue. + +What is the best way to deal with SPAM during the SMTP transaction? +There are domains and addresses that I know are SPAM at the 'MAIL +FROM' and can deal with at the SMTP level. I have been, and I think +most people, respond with a 5.7.1 code, a "permanent" error. That +pretty much means, "Don't bother to try from that address again, +you'll get the same error." People often add cathartic messages to +accompany the 550 like, "Spammers must die." + +But this might not be the best way to go. You are telling the spammers +that you are on to them. This may cause them to try other methods to +get around your blocks. Is it perhaps better to blackhole the mail? +That is, act like everything is OK during the SMTP transaction, but +then just drop the mail into the bitbucket. (This is generally how +SpamAssassin works since almost everyone uses it after the SMTP +transaction has completed successfully.) Spammer thinks everything is +going fine and has no reason to try new methods. + +Then there is a third possibility. Instead of returning a 550 code +indicating you're on to the spammer, fake a 5.1.1 response which is +saying "mailbox does not exist." This would be in the hopes that some +spammers out there actually remove names reported as non-existent from +their lists. I know, a slim hope, but even if only a few do, it can +lower the incidence. + +So, what are the arguments for each? Do spammers even look at _any_ of +the bounce messages they get? The volume of bounces must be +huge. Personally, I'm starting to think blackholes are the way to +go... But sending back that "Spammer die, die, die," or stock "Access +DEE-NIED!" (my ephasis added) message can be pretty satisfying. ;) +-- +Crist J. Clark | cjclark@alum.mit.edu + | cjclark@jhu.edu +http://people.freebsd.org/~cjc/ | cjc@freebsd.org + + +------------------------------------------------------- +In remembrance +www.osdn.com/911/ +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01458.faf90fabe2c118e46dd6a60139a7317f b/Ch3/datasets/spam/easy_ham/01458.faf90fabe2c118e46dd6a60139a7317f new file mode 100644 index 000000000..298243002 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01458.faf90fabe2c118e46dd6a60139a7317f @@ -0,0 +1,87 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Sep 11 21:52:21 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5787F16F03 + for ; Wed, 11 Sep 2002 21:52:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 21:52:21 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8BKfNC31298 for ; Wed, 11 Sep 2002 21:41:23 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pEGQ-0003qY-00; Wed, + 11 Sep 2002 13:39:06 -0700 +Received: from relay07.indigo.ie ([194.125.133.231]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17pEGA-0006VF-00 for ; + Wed, 11 Sep 2002 13:38:50 -0700 +Received: (qmail 12218 messnum 1023198 invoked from + network[194.125.172.225/ts12-225.dublin.indigo.ie]); 11 Sep 2002 20:38:46 + -0000 +Received: from ts12-225.dublin.indigo.ie (HELO spamassassin.taint.org) + (194.125.172.225) by relay07.indigo.ie (qp 12218) with SMTP; + 11 Sep 2002 20:38:46 -0000 +Received: by spamassassin.taint.org (Postfix, from userid 500) id 662ED16F03; + Wed, 11 Sep 2002 21:38:45 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) by spamassassin.taint.org (Postfix) + with ESMTP id 63077F7B1; Wed, 11 Sep 2002 21:38:45 +0100 (IST) +To: Robert Strickler +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Yeah right... If spamassassin was looking through th + is mail, it would have marked it as spam. +In-Reply-To: Message from Robert Strickler + of + "Wed, 11 Sep 2002 15:10:49 CDT." + <0FCA00EE04CDD3119C910050041FBA703A67F3@ilpostoffice.main.net56.net> +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020911203845.662ED16F03@spamassassin.taint.org> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 11 Sep 2002 21:38:40 +0100 +Date: Wed, 11 Sep 2002 21:38:40 +0100 + + +Robert Strickler said: + +> Looks like we need an identity stamp in the X-Spam headers so that SA only +> accepts headers from authorized sources. + +Well, SpamAssassin will just ignore any old X-Spam-whatever headers +it finds, so that cannot be used to get around the filter. + +--j. + + +------------------------------------------------------- +In remembrance +www.osdn.com/911/ +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01459.47dae1d7997a3d599a8e8f92e53485f4 b/Ch3/datasets/spam/easy_ham/01459.47dae1d7997a3d599a8e8f92e53485f4 new file mode 100644 index 000000000..73a0eca7f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01459.47dae1d7997a3d599a8e8f92e53485f4 @@ -0,0 +1,83 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Sep 11 21:52:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B796316F03 + for ; Wed, 11 Sep 2002 21:52:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 21:52:26 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8BKo9C31620 for ; Wed, 11 Sep 2002 21:50:10 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pEO9-00006c-00; Wed, + 11 Sep 2002 13:47:05 -0700 +Received: from wow.atlasta.net ([12.129.13.20]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17pENU-0000rG-00 for ; + Wed, 11 Sep 2002 13:46:24 -0700 +Received: from wow.atlasta.net (localhost.atlasta.net [127.0.0.1]) by + wow.atlasta.net (8.12.2/8.12.2) with ESMTP id g8BKkJJI000357; + Wed, 11 Sep 2002 13:46:19 -0700 (PDT) +Received: from localhost (drais@localhost) by wow.atlasta.net + (8.12.2/8.12.2/Submit) with ESMTP id g8BKkJQB000354; Wed, 11 Sep 2002 + 13:46:19 -0700 (PDT) +From: David Raistrick +To: Stephane Lentz +Cc: SpamAssassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Re: [SAdev] File::Spec and v2.41 +In-Reply-To: <20020911201747.GA25880@iww.netfr.alcatel.fr> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 11 Sep 2002 13:46:19 -0700 (PDT) +Date: Wed, 11 Sep 2002 13:46:19 -0700 (PDT) + +On Wed, 11 Sep 2002, Stephane Lentz wrote: + +> => I faced a similar problem with the FreeBSD when trying to +> install SpamAssassin through the ports on my fresh FreeBSD 4.6.2. +> I had to define PERL5LIB with some given order of directories +> so that the latest File::Spec module get used. + +Good to hear it's not just me. Mind telling me how you set PERL5LIB +specificly? I've tried a few things (setenv in the shell, as well as +$PERL5LIB == ...inside the Makefile.PL, even on the perl command +line..) with no success. + +thanks. + +..david + + +--- +david raistrick +drais@atlasta.net http://www.expita.com/nomime.html + + + + +------------------------------------------------------- +In remembrance +www.osdn.com/911/ +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01460.09c189854f1d2107aa2ca1a9f3d3e167 b/Ch3/datasets/spam/easy_ham/01460.09c189854f1d2107aa2ca1a9f3d3e167 new file mode 100644 index 000000000..13e10c9d5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01460.09c189854f1d2107aa2ca1a9f3d3e167 @@ -0,0 +1,138 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Sep 12 00:04:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D997B16F03 + for ; Thu, 12 Sep 2002 00:04:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 00:04:57 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8BLqqC01175 for ; Wed, 11 Sep 2002 22:52:52 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pFO5-0005VG-00; Wed, + 11 Sep 2002 14:51:05 -0700 +Received: from sccmmhc02.mchsi.com ([204.127.203.184]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17pFNO-0001Gg-00 for ; + Wed, 11 Sep 2002 14:50:22 -0700 +Received: from QUENTIN ([12.218.16.218]) by sccmmhc02.mchsi.com (InterMail + vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id + <20020911215014.SJEI7903.sccmmhc02.mchsi.com@QUENTIN>; Wed, 11 Sep 2002 + 21:50:14 +0000 +From: "Quentin Krengel" +To: +Cc: +Subject: RE: [SAtalk] Debianized Packages for SA 2.3+ +Organization: Krengel Technology Inc +Message-Id: <018d01c259dd$35066050$ad01a8c0@QUENTIN> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.3416 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +In-Reply-To: <57930.138.23.89.42.1031778900.squirrel@library.ucr.edu> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 11 Sep 2002 16:50:07 -0500 +Date: Wed, 11 Sep 2002 16:50:07 -0500 + +I successfully installed spamassassin & razor to run system wide on my +Debian Woody server. + +Briefly I +apt-get installed spamassassin razor and libmilter-dev, + +downloaded spamass-milter-0.1.2.tar.gz from http://www.milter.org, +ungzipped and untarred the file into /etc/mail, + +followed the directions in /etc/mail/spamass-milter-0.1.2/README to +compile the milter, install the rc scripts, and edit and update +sendmail.mc + +changed /etc/default/spamassassin to set spamassassin to daemon mode. + +verified that spamassassin was running by tailing /var/log/mail.log + + +Woody/stable has SA 2.20 +Woody/unstable has SA 2.41 + +I'm running the stable source live right now and it is working very +well. + +If you want unstable change /etc/apt/sources.list, substituting +"unstable" for "stable", +Run apt-get update +Install the unstable versions +Change /etc/apt/sources.list +Run apt-get update + + +Quentin Krengel +Krengel Technology Inc + + + +-----Original Message----- +From: spamassassin-talk-admin@example.sourceforge.net +[mailto:spamassassin-talk-admin@lists.sourceforge.net] On Behalf Of +Tanniel Simonian +Sent: Wednesday, September 11, 2002 4:15 PM +To: spamassassin-talk@example.sourceforge.net +Subject: [SAtalk] Debianized Packages for SA 2.3+ + + +Im currently using woody. + +Is there a debianized package for SA on Woody, or at least somewhere I +can download from? Its been soo long that I haven't compiled stuff, that +Im sort of shy to try again. =) + + + +-- +Tanniel Simonian +Programmer / Analyst III +UCR Libraries +http://libsys.ucr.edu +909 787 2832 + + + + +------------------------------------------------------- +In remembrance +www.osdn.com/911/ _______________________________________________ +Spamassassin-talk mailing list Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + + + + +------------------------------------------------------- +In remembrance +www.osdn.com/911/ +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01461.df42ad590ab7cb5ccde90f0cc1ef3dda b/Ch3/datasets/spam/easy_ham/01461.df42ad590ab7cb5ccde90f0cc1ef3dda new file mode 100644 index 000000000..bd62d5d5f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01461.df42ad590ab7cb5ccde90f0cc1ef3dda @@ -0,0 +1,98 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Sep 12 00:05:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 05E5D16F03 + for ; Thu, 12 Sep 2002 00:05:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 00:05:00 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8BLt5C01213 for ; Wed, 11 Sep 2002 22:55:05 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pFR8-0007Vm-00; Wed, + 11 Sep 2002 14:54:14 -0700 +Received: from ceg-na5.alcatel.fr ([213.223.66.5] helo=smail2.alcatel.fr) + by usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) + id 17pFQr-0001jT-00 for ; + Wed, 11 Sep 2002 14:53:57 -0700 +Received: from iww.netfr.alcatel.fr (iww.netfr.alcatel.fr + [155.132.180.114]) by smail2.alcatel.fr (ALCANET/NETFR) with ESMTP id + g8BLqdCv027561; Wed, 11 Sep 2002 23:52:39 +0200 +Received: by iww.netfr.alcatel.fr + ("Mikrosoft Xchange", + from userid 513) id CBB7C1D1B; Wed, 11 Sep 2002 23:53:41 +0200 (CEST) +From: Stephane Lentz +To: David Raistrick +Cc: SpamAssassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Re: [SAdev] File::Spec and v2.41 +Message-Id: <20020911215341.GA26384@iww.netfr.alcatel.fr> +Mail-Followup-To: Stephane Lentz , + David Raistrick , + SpamAssassin-talk@lists.sourceforge.net +References: <20020911201747.GA25880@iww.netfr.alcatel.fr> + +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: +X-Mailer: Bogus Notes 5.10.666 (Corporate Release) +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 11 Sep 2002 23:53:41 +0200 +Date: Wed, 11 Sep 2002 23:53:41 +0200 + +On Wed, Sep 11, 2002 at 01:46:19PM -0700, David Raistrick wrote: +> On Wed, 11 Sep 2002, Stephane Lentz wrote: +> +> > => I faced a similar problem with the FreeBSD when trying to +> > install SpamAssassin through the ports on my fresh FreeBSD 4.6.2. +> > I had to define PERL5LIB with some given order of directories +> > so that the latest File::Spec module get used. +> +> Good to hear it's not just me. Mind telling me how you set PERL5LIB +> specificly? I've tried a few things (setenv in the shell, as well as +> $PERL5LIB == ...inside the Makefile.PL, even on the perl command +> line..) with no success. +> +- Presuming your run Bash : +Note the directory lists +# perl -e 'map { print "$_\n" } @INC' +Then set up the Shell variable PERL5LIB variable (and put it in some .bashrc +for future use) +# export PERL5LIB="directory1:directory2:directory3:directory4" +Then try to install the software + +PERL5LIB is explained perlrun(1) : do +# man perlrun for more information + +Regards, + +SL/ +--- +Stephane Lentz / Alcanet International - Internet Services + + +------------------------------------------------------- +In remembrance +www.osdn.com/911/ +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01462.0c2d54d028173cebcb091842144d268a b/Ch3/datasets/spam/easy_ham/01462.0c2d54d028173cebcb091842144d268a new file mode 100644 index 000000000..df59d8b57 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01462.0c2d54d028173cebcb091842144d268a @@ -0,0 +1,83 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Sep 12 00:05:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 537AF16F03 + for ; Thu, 12 Sep 2002 00:05:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 00:05:24 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8BMQbC02513 for ; Wed, 11 Sep 2002 23:26:38 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pFuz-0002j5-00; Wed, + 11 Sep 2002 15:25:05 -0700 +Received: from 168-215-122-205.gen.twtelecom.net ([168.215.122.205] + helo=commander) by usw-sf-list1.sourceforge.net with esmtp (Cipher + TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id 17pFu9-0001j4-00 + for ; Wed, 11 Sep 2002 15:24:13 + -0700 +Received: from 65.91.219.248 [65.91.219.248] by commander with SMTPBeamer + v3.30 ; Wed, 11 Sep 2002 18:12:14 -0400 +Received: from omega.paradigm-omega.net (localhost.localdomain + [127.0.0.1]) by omega.paradigm-omega.net (Postfix) with ESMTP id + AC7909FBB7 for ; Wed, + 11 Sep 2002 15:23:58 -0700 (PDT) +Content-Type: text/plain; charset="us-ascii" +Organization: Paradigm-Omega, LLC +To: spamassassin-talk@example.sourceforge.net +X-Mailer: KMail [version 1.3.1] +X-PGP-Key-1: 8828 DA31 F788 2F87 CE6D F563 5568 BABC 647E C336 +X-PGP-Key_2: D152 7DD6 C0E8 F2CB 4CD3 B5D7 5F67 B017 38D0 A14E +X-Copyright(C): 2002 +X-Owner: Paradigm-Omega,LLC(tm) +X-All-Rights: Reserved +X-Dissemination: Prohibited +X-Classification: Confidential/Proprietary +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +From: Robin Lynn Frank +Message-Id: <1031783038.19376.TMDA@omega.paradigm-omega.net> +X-Delivery-Agent: TMDA/0.62 +X-Tmda-Fingerprint: SZL7V1rFmyW5bQ6W/Ty630spEiM +X-Identifier: Robin Lynn Frank +Reply-To: Robin Lynn Frank +Subject: [SAtalk] Is DCC for real? +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 11 Sep 2002 15:23:54 -0700 +Date: Wed, 11 Sep 2002 15:23:54 -0700 + +So far today, I've found eff.org and mandrakesoft.com in DCC. My confidence +in DCC is beginning to drop. +-- +Robin Lynn Frank +Paradigm-Omega, LLC +================================== +No electrons were harmed in the sending +of this message. However, two neutrons and +a proton complained about the noise. + + +------------------------------------------------------- +In remembrance +www.osdn.com/911/ +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01463.28034eb6874b95b8cd4f681cedd0069f b/Ch3/datasets/spam/easy_ham/01463.28034eb6874b95b8cd4f681cedd0069f new file mode 100644 index 000000000..429a48243 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01463.28034eb6874b95b8cd4f681cedd0069f @@ -0,0 +1,97 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Sep 12 00:05:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DC0AE16F03 + for ; Thu, 12 Sep 2002 00:05:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 00:05:25 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8BMRkC02757 for ; Wed, 11 Sep 2002 23:27:46 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pFwv-0003cR-00; Wed, + 11 Sep 2002 15:27:05 -0700 +Received: from vtn1.victoria.tc.ca ([199.60.222.3]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17pFwM-0001wa-00 for ; + Wed, 11 Sep 2002 15:26:30 -0700 +Received: from vtn1.victoria.tc.ca (iwhite@localhost [127.0.0.1]) by + vtn1.victoria.tc.ca (8.12.5/8.12.5) with ESMTP id g8BMQNPL008396; + Wed, 11 Sep 2002 15:26:23 -0700 (PDT) +Received: (from iwhite@localhost) by vtn1.victoria.tc.ca + (8.12.5/8.12.3/Submit) id g8BMQMNP008390; Wed, 11 Sep 2002 15:26:22 -0700 + (PDT) +From: Ian White +To: Vince Puzzella +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Badly Formatted Spam Report in HTML spam +In-Reply-To: <5DEC3FFCDE2F7C4DA45433EE09A4F22C599F80@COLOSSUS.dyadem.corp> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 11 Sep 2002 15:26:22 -0700 (PDT) +Date: Wed, 11 Sep 2002 15:26:22 -0700 (PDT) + +On Wed, 11 Sep 2002, Vince Puzzella wrote: + +> Ever since I set defang_mime 0 all spam that contains HTML has a badly +> formatted report. I think/realize it's because the report should be in +> HTML. Is there anyway to get Spamassassin to add an HTML report in +> cases where it is required (defang_mime 0)? + +Funny, I was in the middle of composing the same message when I saw yours. + +It would be nice if it sees a header like: +Content-type: text/html; charset=iso-8859-1 + +and defang_mime is 0, it could wrap the report with
 for ease
+of reading?
+
+And the same sort of problem seems to occur with base64 encoded messages.
+The report is placed inside of the mime boundary:
+------=_NextPart_000_00B7_31E64A2B.B8441E37
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Transfer-Encoding: base64
+
+
+Should this not go above (probably in it's own mime section,) to make sure
+that the attachments don't get destroyed?
+
+Ian
+
+-------------------------------------------
+Ian White
+email: iwhite@victoria.tc.ca
+
+
+
+
+
+
+
+
+-------------------------------------------------------
+In remembrance
+www.osdn.com/911/
+_______________________________________________
+Spamassassin-talk mailing list
+Spamassassin-talk@lists.sourceforge.net
+https://lists.sourceforge.net/lists/listinfo/spamassassin-talk
+
+
diff --git a/Ch3/datasets/spam/easy_ham/01464.e3de6d443aab79ba36f75b7e737c7888 b/Ch3/datasets/spam/easy_ham/01464.e3de6d443aab79ba36f75b7e737c7888
new file mode 100644
index 000000000..8943060a4
--- /dev/null
+++ b/Ch3/datasets/spam/easy_ham/01464.e3de6d443aab79ba36f75b7e737c7888
@@ -0,0 +1,109 @@
+From spamassassin-talk-admin@lists.sourceforge.net  Thu Sep 12 13:43:40 2002
+Return-Path: 
+Delivered-To: yyyy@localhost.spamassassin.taint.org
+Received: from localhost (jalapeno [127.0.0.1])
+	by jmason.org (Postfix) with ESMTP id 3518A16F03
+	for ; Thu, 12 Sep 2002 13:43:34 +0100 (IST)
+Received: from jalapeno [127.0.0.1]
+	by localhost with IMAP (fetchmail-5.9.0)
+	for jm@localhost (single-drop); Thu, 12 Sep 2002 13:43:34 +0100 (IST)
+Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net
+    [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id
+    g8C1jmC12426 for ; Thu, 12 Sep 2002 02:45:48 +0100
+Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13]
+    helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with
+    esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pJ0b-0004gF-00; Wed,
+    11 Sep 2002 18:43:05 -0700
+Received: from rwcrmhc52.attbi.com ([216.148.227.88]) by
+    usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id
+    17pJ0Q-0000gc-00 for ;
+    Wed, 11 Sep 2002 18:42:54 -0700
+Received: from hq ([12.231.148.143]) by rwcrmhc52.attbi.com (InterMail
+    vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id
+    <20020912014248.KXLG25351.rwcrmhc52.attbi.com@hq> for
+    ; Thu, 12 Sep 2002 01:42:48 +0000
+Message-Id: <200209111842490186.010804ED@mail.attbi.com>
+X-Mailer: Calypso Version 3.30.00.00 (4)
+From: "Joseph Burke" 
+To: spamassassin-talk@example.sourceforge.net
+Content-Type: text/plain; charset="us-ascii"
+Subject: [SAtalk] Re: Spamassassin-talk digest, Vol 1 #659 - 41 msgs
+Sender: spamassassin-talk-admin@example.sourceforge.net
+Errors-To: spamassassin-talk-admin@example.sourceforge.net
+X-Beenthere: spamassassin-talk@example.sourceforge.net
+X-Mailman-Version: 2.0.9-sf.net
+Precedence: bulk
+List-Help: 
+List-Post: 
+List-Subscribe: ,
+    
+List-Id: Talk about SpamAssassin 
+List-Unsubscribe: ,
+    
+List-Archive: 
+X-Original-Date: Wed, 11 Sep 2002 18:42:49 -0700
+Date: Wed, 11 Sep 2002 18:42:49 -0700
+
+
+
+On 9/11/2002 at 10:01 AM  spamassassin-talk-request@lists.sourceforge.net
+spamassassin-talk@lists.sourceforge.net wrote:
+
+
+>Message: 15
+>From: Vivek Khera 
+>Date: Wed, 11 Sep 2002 10:06:55 -0400
+>To: spamassassin-talk@example.sourceforge.net
+>Subject: Re: [SAtalk] Calypso email = ratware? 
+>
+>>>>>> "JM" == Justin Mason  writes:
+>
+>JM> Now all we need to do is get all the SpamAssassin users out there to
+>JM> upgrade...
+>
+>Considering that the rules need to adapt to the changing look and feel
+>of spam vs. non-spam, does it make sense to have SA automatically
+>issue a notice when it is, say 9 months old, recommending that the
+>user/operator check for updated rules?
+>
+>Sort of like a nag-ware feature, but in self-defense for the user, not
+>the vendor ;-)
+>
+>-- 
+>=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+>Vivek Khera, Ph.D.                Khera Communications, Inc.
+>Internet: khera@kciLink.com       Rockville, MD       +1-240-453-8497
+>AIM: vivekkhera Y!: vivek_khera   http://www.khera.org/~vivek/
+
+better yet would be a built-in server check on a periodic basis, even
+daily, looking for the existence of an update, and if found prompt the
+system admin to upgrade the server.  With the ever changing face of spam,
+this would probably be a big benefit to SA users and help keep everyone up
+to date.  We have not done this with too many of the apps we sell on
+www.RoseCitySoftware.com strictly because of joe-average-user concerns
+about spyware and "phoning home", but in cases where the app needs to
+access the internet anyhow, we have done it with great success and minimal
+concern by our users.
+
+----
+Joseph Burke
+President/CEO
+InfiniSource, Inc.
+ 
+
+
+
+
+
+
+
+
+-------------------------------------------------------
+In remembrance
+www.osdn.com/911/
+_______________________________________________
+Spamassassin-talk mailing list
+Spamassassin-talk@lists.sourceforge.net
+https://lists.sourceforge.net/lists/listinfo/spamassassin-talk
+
+
diff --git a/Ch3/datasets/spam/easy_ham/01465.b1fa1feb0603eff01231fa4a5a74cf37 b/Ch3/datasets/spam/easy_ham/01465.b1fa1feb0603eff01231fa4a5a74cf37
new file mode 100644
index 000000000..bdcf59805
--- /dev/null
+++ b/Ch3/datasets/spam/easy_ham/01465.b1fa1feb0603eff01231fa4a5a74cf37
@@ -0,0 +1,79 @@
+From spamassassin-talk-admin@lists.sourceforge.net  Thu Sep 12 15:03:28 2002
+Return-Path: 
+Delivered-To: yyyy@localhost.spamassassin.taint.org
+Received: from localhost (jalapeno [127.0.0.1])
+	by jmason.org (Postfix) with ESMTP id 63AFD16F03
+	for ; Thu, 12 Sep 2002 15:03:28 +0100 (IST)
+Received: from jalapeno [127.0.0.1]
+	by localhost with IMAP (fetchmail-5.9.0)
+	for jm@localhost (single-drop); Thu, 12 Sep 2002 15:03:28 +0100 (IST)
+Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net
+    [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id
+    g8CDChC32028 for ; Thu, 12 Sep 2002 14:12:43 +0100
+Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13]
+    helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with
+    esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pTfa-0007C9-00; Thu,
+    12 Sep 2002 06:06:06 -0700
+Received: from dsl-65-187-227-177.telocity.com ([65.187.227.177]
+    helo=purestmail.com) by usw-sf-list1.sourceforge.net with esmtp (Exim
+    3.31-VA-mm2 #1 (Debian)) id 17pTfO-0002KB-00 for
+    ; Thu, 12 Sep 2002 06:05:54 -0700
+Received: from [192.168.1.2] ([192.168.1.2] verified) by purestmail.com
+    (CommuniGate Pro SMTP 4.0b7) with ESMTP id 205148 for
+    spamassassin-talk@lists.sourceforge.net; Thu, 12 Sep 2002 09:05:51 -0400
+From: "Eric Mings" 
+To: "Spamassassin Talk" 
+Subject: Re: [SAtalk] Bayesian and bogofilter
+Message-Id: <20020912130550.1275@192.168.1.3>
+In-Reply-To: 
+References: 
+X-Mailer: CTM PowerMail 4.0 carbon 
+MIME-Version: 1.0
+Content-Type: text/plain; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+Sender: spamassassin-talk-admin@example.sourceforge.net
+Errors-To: spamassassin-talk-admin@example.sourceforge.net
+X-Beenthere: spamassassin-talk@example.sourceforge.net
+X-Mailman-Version: 2.0.9-sf.net
+Precedence: bulk
+List-Help: 
+List-Post: 
+List-Subscribe: ,
+    
+List-Id: Talk about SpamAssassin 
+List-Unsubscribe: ,
+    
+List-Archive: 
+X-Original-Date: Thu, 12 Sep 2002 09:05:50 -0400
+Date: Thu, 12 Sep 2002 09:05:50 -0400
+
+>Anyway I'm making good progress and my implementation works reasonably
+>well.  It now seems blindingly clear that we want a tightly-integrated
+>implementation of Naive Bayes spam/nonspam classification.  There are
+>still some things about how to do this right inside SA that I still am
+>figuring out.
+>
+>Dan
+
+This is very good news! Will this allow for individual spam word file
+preferences when spamassassin is running on a mailserver for multiple
+users? This would be an outstanding addition if it can be done. Thanks
+much for a great project.
+
+-- 
+Regards,
+
+Eric Mings Ph.D.
+
+
+
+-------------------------------------------------------
+This sf.net email is sponsored by:ThinkGeek
+Welcome to geek heaven.
+http://thinkgeek.com/sf
+_______________________________________________
+Spamassassin-talk mailing list
+Spamassassin-talk@lists.sourceforge.net
+https://lists.sourceforge.net/lists/listinfo/spamassassin-talk
+
+
diff --git a/Ch3/datasets/spam/easy_ham/01466.cf50ec729ec45590dfbb6eb9c4f33175 b/Ch3/datasets/spam/easy_ham/01466.cf50ec729ec45590dfbb6eb9c4f33175
new file mode 100644
index 000000000..2f6d0cff9
--- /dev/null
+++ b/Ch3/datasets/spam/easy_ham/01466.cf50ec729ec45590dfbb6eb9c4f33175
@@ -0,0 +1,88 @@
+From spamassassin-talk-admin@lists.sourceforge.net  Thu Sep 12 21:09:40 2002
+Return-Path: 
+Delivered-To: yyyy@localhost.spamassassin.taint.org
+Received: from localhost (jalapeno [127.0.0.1])
+	by jmason.org (Postfix) with ESMTP id 37B3D16F03
+	for ; Thu, 12 Sep 2002 21:09:39 +0100 (IST)
+Received: from jalapeno [127.0.0.1]
+	by localhost with IMAP (fetchmail-5.9.0)
+	for jm@localhost (single-drop); Thu, 12 Sep 2002 21:09:39 +0100 (IST)
+Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net
+    [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id
+    g8CIqkC11377 for ; Thu, 12 Sep 2002 19:52:46 +0100
+Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13]
+    helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with
+    esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pZ3T-0004Ps-00; Thu,
+    12 Sep 2002 11:51:07 -0700
+Received: from smtpzilla1.xs4all.nl ([194.109.127.137]) by
+    usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id
+    17pZ2z-0006sq-00 for ;
+    Thu, 12 Sep 2002 11:50:37 -0700
+Received: from airplant.xs4all.nl (airplant.xs4all.nl [194.109.242.172])
+    by smtpzilla1.xs4all.nl (8.12.0/8.12.0) with ESMTP id g8CIoVlk032173 for
+    ; Thu, 12 Sep 2002 20:50:32 +0200
+    (CEST)
+Received: from [192.168.1.104] (ink.xs4all.nl [194.109.194.16]) by
+    airplant.xs4all.nl (Postfix) with ESMTP id 955C91289D7 for
+    ; Thu, 12 Sep 2002 20:50:30 +0200
+    (CEST)
+User-Agent: Microsoft-Outlook-Express-Macintosh-Edition/5.02.2106
+Date: Thu, 12 Sep 2002 20:50:28 +0200
+Subject: Re: [SAtalk] Reject, Blackhole, or Fake No-User
+From: Fred Inklaar 
+To: SpamAssassin 
+Message-Id: 
+In-Reply-To: <10209111535.ZM66084@ajax.dgi.com>
+MIME-Version: 1.0
+X-No-Archive: Yes
+Content-Type: text/plain; charset="US-ASCII"
+Content-Transfer-Encoding: 7bit
+Sender: spamassassin-talk-admin@example.sourceforge.net
+Errors-To: spamassassin-talk-admin@example.sourceforge.net
+X-Beenthere: spamassassin-talk@example.sourceforge.net
+X-Mailman-Version: 2.0.9-sf.net
+Precedence: bulk
+List-Help: 
+List-Post: 
+List-Subscribe: ,
+    
+List-Id: Talk about SpamAssassin 
+List-Unsubscribe: ,
+    
+List-Archive: 
+
+Op 12-09-2002 00:35 schreef Ellen Clary (ellen@dgi.com):
+
+>> Then there is a third possibility. Instead of returning a 550 code
+>> indicating you're on to the spammer, fake a 5.1.1 response which is
+>> saying "mailbox does not exist." This would be in the hopes that some
+>> spammers out there actually remove names reported as non-existent from
+>> their lists. I know, a slim hope, but even if only a few do, it can
+>> lower the incidence.
+> 
+> They don't, I can guarantee that.  Quite a few spamtraps nowadays
+> operate by 5nn'ing for 6 months in the hope of getting legit mailers
+> to remove bouncing addrs from lists;  then after 6 months, they just
+> spamtrap all incoming mail to those addrs.  (unfortunately a lot of
+> legit mailers don't bother cleaning their lists either.)
+
+Most spammers don't check reply codes at all, they just send out as many
+mails as their system will hold without checking for any confirmation.
+
+A trick to lower spam reception was dicussed on the postfix mailing list
+some time ago: answer all incoming mail with a 4xx temporary error code when
+it is offered the first time, and accept it the second time. Apparently most
+mass-emailers don't even try to deliver a second time.
+
+
+
+-------------------------------------------------------
+This sf.net email is sponsored by:ThinkGeek
+Welcome to geek heaven.
+http://thinkgeek.com/sf
+_______________________________________________
+Spamassassin-talk mailing list
+Spamassassin-talk@lists.sourceforge.net
+https://lists.sourceforge.net/lists/listinfo/spamassassin-talk
+
+
diff --git a/Ch3/datasets/spam/easy_ham/01467.3c3e579305d1975c1792ab734c99cdda b/Ch3/datasets/spam/easy_ham/01467.3c3e579305d1975c1792ab734c99cdda
new file mode 100644
index 000000000..0e1bc2694
--- /dev/null
+++ b/Ch3/datasets/spam/easy_ham/01467.3c3e579305d1975c1792ab734c99cdda
@@ -0,0 +1,132 @@
+From spamassassin-talk-admin@lists.sourceforge.net  Thu Sep 12 21:09:59 2002
+Return-Path: 
+Delivered-To: yyyy@localhost.spamassassin.taint.org
+Received: from localhost (jalapeno [127.0.0.1])
+	by jmason.org (Postfix) with ESMTP id A34BC16F03
+	for ; Thu, 12 Sep 2002 21:09:58 +0100 (IST)
+Received: from jalapeno [127.0.0.1]
+	by localhost with IMAP (fetchmail-5.9.0)
+	for jm@localhost (single-drop); Thu, 12 Sep 2002 21:09:58 +0100 (IST)
+Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net
+    [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id
+    g8CJBWC12013 for ; Thu, 12 Sep 2002 20:11:32 +0100
+Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13]
+    helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with
+    esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pZJw-0001FZ-00; Thu,
+    12 Sep 2002 12:08:08 -0700
+Received: from corpmail.cwie.net ([63.214.164.17]) by
+    usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168)
+    (Exim 3.31-VA-mm2 #1 (Debian)) id 17pZJK-00014S-00 for
+    ; Thu, 12 Sep 2002 12:07:30 -0700
+Received: (qmail 11441 invoked by uid 507); 12 Sep 2002 19:07:23 -0000
+Received: from paul@cwie.net by corpmail.cwie.net by uid 510 with
+    CWIE-scanner-1.14 (sweep: 2.10/3.61. spamassassin: 2.41.  Clear:.
+    Processed in 0.422956 secs); 12 Sep 2002 19:07:23 -0000
+Received: from unknown (HELO paul01) (64.38.194.14) by corpmail.cwie.net
+    with SMTP; 12 Sep 2002 19:07:22 -0000
+From: "Paul Fries" 
+To: 
+Subject: RE: [SAtalk] 2.41/2.50 spamd/spamc problem
+Message-Id: <031001c25a8f$9faa5a80$d900000a@paul01>
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+X-Priority: 3 (Normal)
+X-Msmail-Priority: Normal
+X-Mailer: Microsoft Outlook, Build 10.0.4024
+In-Reply-To: <5DEC3FFCDE2F7C4DA45433EE09A4F22C599F85@COLOSSUS.dyadem.corp>
+Importance: Normal
+X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106
+Sender: spamassassin-talk-admin@example.sourceforge.net
+Errors-To: spamassassin-talk-admin@example.sourceforge.net
+X-Beenthere: spamassassin-talk@example.sourceforge.net
+X-Mailman-Version: 2.0.9-sf.net
+Precedence: bulk
+List-Help: 
+List-Post: 
+List-Subscribe: ,
+    
+List-Id: Talk about SpamAssassin 
+List-Unsubscribe: ,
+    
+List-Archive: 
+X-Original-Date: Thu, 12 Sep 2002 12:07:22 -0700
+Date: Thu, 12 Sep 2002 12:07:22 -0700
+
+Heh. RTFM.. Sorry about that.
+
+Yep, that did the trick.
+
+Thanks for the help!
+
+Regards,
+Paul Fries
+paul@cwie.net
+
+-----Original Message-----
+From: spamassassin-talk-admin@example.sourceforge.net
+[mailto:spamassassin-talk-admin@lists.sourceforge.net] On Behalf Of
+Vince Puzzella
+Sent: Thursday, September 12, 2002 11:23 AM
+To: Paul Fries; spamassassin-talk@example.sourceforge.net
+Subject: RE: [SAtalk] 2.41/2.50 spamd/spamc problem
+
+defang_mime 0
+
+-----Original Message-----
+From: Paul Fries [mailto:paul@cwie.net] 
+Sent: Thursday, September 12, 2002 2:12 PM
+To: spamassassin-talk@example.sourceforge.net
+Subject: [SAtalk] 2.41/2.50 spamd/spamc problem
+
+
+I noticed that after upgrading to 2.41 (or 2.50) from 2.31, the -F
+option was removed from spamd. 
+
+This is fine because all of the HTML format mail seems to arrive
+properly. However, messages that get tagged as Spam arrive as just html
+source.
+
+Is there any way around this? I would like all HTML/RTF messages to
+retain their formatting even if they are flagged as spam. I would
+accomplish this on 2.31 by using the "-F 0" flag when starting spamd.
+
+Thanks!
+
+Regards,
+Paul Fries
+paul@cwie.net
+CWIE LLC 
+
+
+
+-------------------------------------------------------
+This sf.net email is sponsored by:ThinkGeek
+Welcome to geek heaven.
+http://thinkgeek.com/sf _______________________________________________
+Spamassassin-talk mailing list Spamassassin-talk@lists.sourceforge.net
+https://lists.sourceforge.net/lists/listinfo/spamassassin-talk
+
+
+-------------------------------------------------------
+This sf.net email is sponsored by:ThinkGeek
+Welcome to geek heaven.
+http://thinkgeek.com/sf
+_______________________________________________
+Spamassassin-talk mailing list
+Spamassassin-talk@lists.sourceforge.net
+https://lists.sourceforge.net/lists/listinfo/spamassassin-talk
+
+
+
+
+-------------------------------------------------------
+This sf.net email is sponsored by:ThinkGeek
+Welcome to geek heaven.
+http://thinkgeek.com/sf
+_______________________________________________
+Spamassassin-talk mailing list
+Spamassassin-talk@lists.sourceforge.net
+https://lists.sourceforge.net/lists/listinfo/spamassassin-talk
+
+
diff --git a/Ch3/datasets/spam/easy_ham/01468.a68ebe03295c662d692e89930e88d07e b/Ch3/datasets/spam/easy_ham/01468.a68ebe03295c662d692e89930e88d07e
new file mode 100644
index 000000000..9bc960808
--- /dev/null
+++ b/Ch3/datasets/spam/easy_ham/01468.a68ebe03295c662d692e89930e88d07e
@@ -0,0 +1,169 @@
+From spamassassin-talk-admin@lists.sourceforge.net  Fri Sep 13 16:51:24 2002
+Return-Path: 
+Delivered-To: yyyy@localhost.spamassassin.taint.org
+Received: from localhost (jalapeno [127.0.0.1])
+	by jmason.org (Postfix) with ESMTP id 3DC2D16F03
+	for ; Fri, 13 Sep 2002 16:51:23 +0100 (IST)
+Received: from jalapeno [127.0.0.1]
+	by localhost with IMAP (fetchmail-5.9.0)
+	for jm@localhost (single-drop); Fri, 13 Sep 2002 16:51:23 +0100 (IST)
+Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net
+    [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id
+    g8DD61C19382 for ; Fri, 13 Sep 2002 14:06:01 +0100
+Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13]
+    helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with
+    esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pq6E-0002Zs-00; Fri,
+    13 Sep 2002 06:03:06 -0700
+Received: from tarpon.exis.net ([65.120.48.108]) by
+    usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id
+    17pq5t-0000hD-00 for ;
+    Fri, 13 Sep 2002 06:02:45 -0700
+Received: from viper (ip68-10-168-172.hr.hr.cox.net [68.10.168.172]) by
+    tarpon.exis.net (8.12.4/8.12.4) with SMTP id g8DD2f85001269 for
+    ; Fri, 13 Sep 2002 09:02:41 -0400
+Message-Id: <000c01c25b25$dbaa64d0$aca80a44@viper>
+From: "Nick Adams" 
+To: 
+MIME-Version: 1.0
+Content-Type: multipart/alternative;
+    boundary="----=_NextPart_000_0009_01C25B03.83C4FDB0"
+X-Priority: 3
+X-Msmail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2600.0000
+X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000
+Subject: [SAtalk] Spamassassin with Pyzor
+Sender: spamassassin-talk-admin@example.sourceforge.net
+Errors-To: spamassassin-talk-admin@example.sourceforge.net
+X-Beenthere: spamassassin-talk@example.sourceforge.net
+X-Mailman-Version: 2.0.9-sf.net
+Precedence: bulk
+List-Help: 
+List-Post: 
+List-Subscribe: ,
+    
+List-Id: Talk about SpamAssassin 
+List-Unsubscribe: ,
+    
+List-Archive: 
+X-Original-Date: Fri, 13 Sep 2002 08:56:57 -0400
+Date: Fri, 13 Sep 2002 08:56:57 -0400
+
+This is a multi-part message in MIME format.
+
+------=_NextPart_000_0009_01C25B03.83C4FDB0
+Content-Type: text/plain;
+	charset="iso-8859-1"
+Content-Transfer-Encoding: quoted-printable
+
+I installed Spamassassin 2.41 with Razor V2 the other day and it has =
+been working great. I decided to add Pyzor last night and I got that =
+installed successfully (I think, no errors). I am using spamd and I see =
+where it periodically spawns off a pyzor process; however nothing has =
+been detected as spam by Pyzor under Spamassassin. It has been running =
+for almost half a day now on a 5,000 user mail server - so to me the =
+odds of something being caught by it should be high. I run spamd as =
+follows:
+
+spamd -d -H
+
+and all my users home directories have a .pyzor directory with the =
+server listed under it.
+
+I setup a test procmail recipe that just invokes pyzor check and not =
+spamc to see if in fact pyzor alone catches any spam -  I just set this =
+up so no results yet. Here is what I get when I check connectivity to =
+the pyzor server:
+
+ pyzor -d ping
+sending: 'User: anonymous\nTime: 1031921041\nSig: =
+161c547ac6248589910f97b1b5cd37e6dffc8eaf\n\nOp: ping\nThread: 14733\nPV: =
+2.0\n\n'
+received: 'Thread: 14733\nCode: 200\nDiag: OK\nPV: 2.0\n\n'
+167.206.208.233:24442   (200, 'OK')
+
+Any help/examples would be appreciated. Thanks! BTW, keep up the great =
+work Spamassassin team!
+
+Nick
+
+
+---
+Outgoing mail is certified Virus Free.
+Checked by AVG anti-virus system (http://www.grisoft.com).
+Version: 6.0.386 / Virus Database: 218 - Release Date: 9/9/2002
+
+------=_NextPart_000_0009_01C25B03.83C4FDB0
+Content-Type: text/html;
+	charset="iso-8859-1"
+Content-Transfer-Encoding: quoted-printable
+
+
+
+
+
+
+
+
+
I installed Spamassassin 2.41 with = +Razor V2=20 +the other day and it has been working great. I decided to add Pyzor last = +night=20 +and I got that installed successfully (I think, no errors). I am using = +spamd and=20 +I see where it periodically spawns off a pyzor process; however nothing = +has been=20 +detected as spam by Pyzor under Spamassassin. It has been running for = +almost=20 +half a day now on a 5,000 user mail server - so to me the odds of = +something=20 +being caught by it should be high. I run spamd as follows:
+
 
+
spamd -d -H
+
 
+
and all my users home directories have = +a .pyzor=20 +directory with the server listed under it.
+
 
+
I setup a test procmail recipe that = +just invokes=20 +pyzor check and not spamc to see if in fact pyzor alone catches any spam = +-=20 + I just set this up so no results yet. Here is what I get when I = +check=20 +connectivity to the pyzor server:
+
 
+
 pyzor -d ping
sending: 'User:=20 +anonymous\nTime: 1031921041\nSig:=20 +161c547ac6248589910f97b1b5cd37e6dffc8eaf\n\nOp: ping\nThread: 14733\nPV: = + +2.0\n\n'
received: 'Thread: 14733\nCode: 200\nDiag: OK\nPV:=20 +2.0\n\n'
167.206.208.233:24442   (200, 'OK')
+
 
+
Any help/examples would be appreciated. = +Thanks!=20 +BTW, keep up the great work Spamassassin team!
+
 
+
Nick
+
 
+

---
Outgoing mail is certified = +Virus=20 +Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: = +6.0.386 /=20 +Virus Database: 218 - Release Date: 9/9/2002
+ +------=_NextPart_000_0009_01C25B03.83C4FDB0-- + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01469.c15d5afb7a49819feadf6c4f3f40c224 b/Ch3/datasets/spam/easy_ham/01469.c15d5afb7a49819feadf6c4f3f40c224 new file mode 100644 index 000000000..6953d4337 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01469.c15d5afb7a49819feadf6c4f3f40c224 @@ -0,0 +1,134 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Sep 13 16:51:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8F45716F03 + for ; Fri, 13 Sep 2002 16:51:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 16:51:44 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8DE7PC21519 for ; Fri, 13 Sep 2002 15:07:25 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pr5F-0006ft-00; Fri, + 13 Sep 2002 07:06:09 -0700 +Received: from eclectic.kluge.net ([66.92.69.221]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17pr3O-0000cs-00 for + ; Fri, 13 Sep 2002 07:04:14 -0700 +Received: from eclectic.kluge.net (localhost [127.0.0.1]) by + eclectic.kluge.net (8.12.6/8.12.6) with ESMTP id g8DE2s4q006906 for + ; Fri, 13 Sep 2002 10:02:54 -0400 +Received: (from felicity@localhost) by eclectic.kluge.net + (8.12.6/8.12.6/Submit) id g8DE2rhN006904 for + spamassassin-talk@lists.sourceforge.net; Fri, 13 Sep 2002 10:02:53 -0400 +From: Theo Van Dinter +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Getting yourself removed from spam lists +Message-Id: <20020913140253.GB5897@kluge.net> +References: <20020913152108.A8295@alinoe.com> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="7ZAtKRhVyVSsbBD2" +Content-Disposition: inline +In-Reply-To: <20020913152108.A8295@alinoe.com> +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 13 Sep 2002 10:02:53 -0400 +Date: Fri, 13 Sep 2002 10:02:53 -0400 + + +--7ZAtKRhVyVSsbBD2 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Fri, Sep 13, 2002 at 03:21:08PM +0200, carlo@alinoe.com wrote: +> So... it seems to me that they DO clean up +> their lists, but only when a spam fails to +> deliver - or can't they detect that? +>=20 +> What do spammers do with email addresses in +> their database that are undeliverable for a +> few years? Do they still continue to spam +> them? + +Well, here's my semi-coherent rant for the moment. ;) + +I have >3100 spamtraps on my machine (you can multiply that by each domain +if you really want to). The vast majority (all but, say, 10) have never +ever existed. Yet, spammers would semi-continuously connect, try to +deliver mail to 40 of them, disconnect, connect again, try delivering +to 40 more... over and over, they kept getting "User unknown" until I +got around to making them spamtraps. + +So my evidence would suggest that it depends who you're dealing with. :) +If your "business" is to sell address lists to people who would then spam, +it's in your best interest to never clean your list. Therefore you can +say "10 million email addresses" and not technically be lying, even if +the majority of them don't work. + +If you're a spammer, you'd want to know who doesn't actually exist, but +then again you don't really care: you probably want to relay through +someone so it's harder to trace you, if you could you'd send to every +email address available, you don't want to setup a valid bounce address +because again it's easy to trace you. + +So I would say this, if you technically spam people but actually think +you're running a legit service, you probably really do have a way of +opting out (even though the user didn't opt in) and you probably don't +relay, and you probably pay attention to bounces. + +Everyone else doesn't really care. + + +That's my view anyway. :) + +--=20 +Randomly Generated Tagline: +"Now you can do that thing with your hands... It's ok." - Prof. Farr + +--7ZAtKRhVyVSsbBD2 +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9gfANAuOQUeWAs2MRAvNfAJ9oyV5MxrnHSKUu3yliMzc9hYcGFACeK11X +NOiPnUCgVS0uzsTxM3iY8vs= +=b/Y6 +-----END PGP SIGNATURE----- + +--7ZAtKRhVyVSsbBD2-- + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01470.7c7fe4fbf02ec4ec0361bac300830e9d b/Ch3/datasets/spam/easy_ham/01470.7c7fe4fbf02ec4ec0361bac300830e9d new file mode 100644 index 000000000..5307d4511 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01470.7c7fe4fbf02ec4ec0361bac300830e9d @@ -0,0 +1,102 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Sep 13 16:51:47 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3BE8A16F03 + for ; Fri, 13 Sep 2002 16:51:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 16:51:47 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8DE7PC21522 for ; Fri, 13 Sep 2002 15:07:25 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pr4E-0005ym-00; Fri, + 13 Sep 2002 07:05:06 -0700 +Received: from betty.magenta-netlogic.com ([193.37.229.181] + helo=mail.magenta-netlogic.com) by usw-sf-list1.sourceforge.net with esmtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17pr3S-0001PJ-00 for + ; Fri, 13 Sep 2002 07:04:18 -0700 +Received: from localhost (localhost [127.0.0.1]) by + mail.magenta-netlogic.com (Postfix) with ESMTP id 7B886BFA9E; + Fri, 13 Sep 2002 15:04:13 +0100 (BST) +Received: from greece.local.net (greece.local.net [::ffff:192.168.1.31]) + by mail.magenta-netlogic.com (Postfix) with ESMTP id 4A719BFA9A; + Fri, 13 Sep 2002 15:04:12 +0100 (BST) +Received: by greece.local.net with Internet Mail Service (5.5.2653.19) id + ; Fri, 13 Sep 2002 15:04:11 +0100 +Message-Id: <87A8DADECEE0D411A5500050046B13A048D792@greece.local.net> +From: Tony Hoyle +To: "'carlo@alinoe.com'" , + spamassassin-talk@lists.sourceforge.net +Subject: RE: [SAtalk] Getting yourself removed from spam lists +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2653.19) +Content-Type: text/plain; charset="windows-1252" +X-Virus-Scanned: by AMaViS new-20020517 +X-Razor-Id: 72f4879d997b64bc62636a2e2a86360b74ef5fe4 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 13 Sep 2002 15:04:11 +0100 +Date: Fri, 13 Sep 2002 15:04:11 +0100 + +> -----Original Message----- +> From: carlo@alinoe.com [mailto:carlo@alinoe.com] +> Sent: 13 September 2002 14:21 +> To: spamassassin-talk@example.sourceforge.net +> Subject: [SAtalk] Getting yourself removed from spam lists +> +> I get the feeling that the spammers never +> remove emails from their lists. + +Correct... + +> On the other hand, that doesn't make sense: +> wouldn't they get worried about their millions +> of spams being wasted? Don't they WANT *some* +> prove that they indeed *reach* people somehow? + +No, they only have to prove that they send several million +emails to 'potential clients' to get their money. I don't think +they even care much about bounces. They're con-artists, why +should they care about proving they actually reached people? + +> So... it seems to me that they DO clean up +> their lists, but only when a spam fails to +> deliver - or can't they detect that? + +Most of the time the bounce goes to some poor soul who has +nothing to do with the spammer. + +> What do spammers do with email addresses in +> their database that are undeliverable for a +> few years? Do they still continue to spam +> them? + +Yes. + +Tony + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01471.df4b4b9ea2810aa90193462b95cfc05b b/Ch3/datasets/spam/easy_ham/01471.df4b4b9ea2810aa90193462b95cfc05b new file mode 100644 index 000000000..e57e68f86 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01471.df4b4b9ea2810aa90193462b95cfc05b @@ -0,0 +1,78 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Sep 13 16:51:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8240D16F03 + for ; Fri, 13 Sep 2002 16:51:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 16:51:49 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8DEIRC21868 for ; Fri, 13 Sep 2002 15:18:27 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17prFo-0005O5-00; Fri, + 13 Sep 2002 07:17:04 -0700 +Received: from moon.campus.luth.se ([130.240.202.158]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17prFe-0005xl-00 for + ; Fri, 13 Sep 2002 07:16:54 -0700 +Received: from moon.campus.luth.se (tony@moon.campus.luth.se + [130.240.202.158]) by moon.campus.luth.se (8.12.3/8.12.3) with ESMTP id + g8DEFcMg098075; Fri, 13 Sep 2002 16:15:38 +0200 (CEST) (envelope-from + tony@svanstrom.com) +From: "Tony L. Svanstrom" +X-X-Sender: tony@moon.campus.luth.se +To: carlo@alinoe.com +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Getting yourself removed from spam lists +In-Reply-To: <20020913152108.A8295@alinoe.com> +Message-Id: <20020913161526.A97345-100000@moon.campus.luth.se> +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 13 Sep 2002 16:15:38 +0200 (CEST) +Date: Fri, 13 Sep 2002 16:15:38 +0200 (CEST) + +On Fri, 13 Sep 2002 the voices made carlo@alinoe.com write: + +> What do spammers do with email addresses in +> their database that are undeliverable for a +> few years? Do they still continue to spam +> them? + + Yes. + + + /Tony +-- +# Per scientiam ad libertatem! // Through knowledge towards freedom! # +# Genom kunskap mot frihet! =*= (c) 1999-2002 tony@svanstrom.com =*= # + + perl -e'print$_{$_} for sort%_=`lynx -dump svanstrom.com/t`' + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01472.b946f70fda01dbc20c92e78c1afeea17 b/Ch3/datasets/spam/easy_ham/01472.b946f70fda01dbc20c92e78c1afeea17 new file mode 100644 index 000000000..414562309 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01472.b946f70fda01dbc20c92e78c1afeea17 @@ -0,0 +1,96 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Sep 13 20:45:22 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 769B216F03 + for ; Fri, 13 Sep 2002 20:45:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 20:45:22 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8DIijC30740 for ; Fri, 13 Sep 2002 19:44:46 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pvMK-0005TS-00; Fri, + 13 Sep 2002 11:40:04 -0700 +Received: from [209.176.10.157] (helo=linux.eopenex.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17pvLP-0008Ke-00 for ; + Fri, 13 Sep 2002 11:39:07 -0700 +Received: from www.mp-i.com (printer.net-nation.com [209.176.10.8]) by + linux.eopenex.com (8.11.6/8.11.6) with ESMTP id g8DIXhU28824 for + ; Fri, 13 Sep 2002 14:33:47 -0400 +From: "vernon" +To: "spamassassin-talk" +Reply-To: vernon@comp-wiz.com +Message-Id: <20020913183343.M49078@b2unow.com> +In-Reply-To: <20020913151635.M21128@b2unow.com> +References: <20020913151635.M21128@b2unow.com> +X-Mailer: MP-I.com Messaging OpenWebMail 1.71 20020827 +X-Originatingip: 67.81.72.77 (vernon) +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +X-Mailscanner: Found to be clean +X-Mailscanner-Spamcheck: not spam, SpamAssassin (score=-3, required 5, + IN_REP_TO, FROM_NAME_NO_SPACES, TO_LOCALPART_EQ_REAL) +Subject: [SAtalk] OT: DNS MX Record Clarification Please +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 13 Sep 2002 13:33:43 -0500 +Date: Fri, 13 Sep 2002 13:33:43 -0500 + + +This may be a little off topic but thought people here would have a better +response to this elsewhere. + +I have setup two MX records (mail and bmail) for my mail server. The one I +gave a 10 (bmail) the other a 20 (mail). + +bmail(10) I gave a 10 because I want all mail to go through this server to +be scanned for SPAM and viruses and then relayed to the mail(20) server for +delivery. + +As I understand it, DNS A records are used in a rotating fashion for load +balancing, but DNS MX records are used in order or prority, meaning the 10 +before the 20 and only 20 if the 10 isn't available. + +But only some of the mail is actually being scanned which leads me to +believe that not all of the mail is actually hitting that box and the 10 +never goes down. Why? Have I got something confused here? + +Thanks, +V +------- End of Forwarded Message ------- + + + + +-- +This message has been scanned for viruses and +dangerous content by MailScanner at comp-wiz.com, +and is believed to be clean. + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01473.1b15dc3174af070411cb9f2bd16add15 b/Ch3/datasets/spam/easy_ham/01473.1b15dc3174af070411cb9f2bd16add15 new file mode 100644 index 000000000..d4081893a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01473.1b15dc3174af070411cb9f2bd16add15 @@ -0,0 +1,134 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Sep 13 20:45:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7E44416F03 + for ; Fri, 13 Sep 2002 20:45:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 20:45:27 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8DJ6lC31348 for ; Fri, 13 Sep 2002 20:06:47 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pvjp-0007DC-00; Fri, + 13 Sep 2002 12:04:21 -0700 +Received: from eclectic.kluge.net ([66.92.69.221]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17pvi8-0001P9-00 for + ; Fri, 13 Sep 2002 12:02:36 -0700 +Received: from eclectic.kluge.net (localhost [127.0.0.1]) by + eclectic.kluge.net (8.12.6/8.12.6) with ESMTP id g8DJ1I4q022972; + Fri, 13 Sep 2002 15:01:18 -0400 +Received: (from felicity@localhost) by eclectic.kluge.net + (8.12.6/8.12.6/Submit) id g8DJ1I96022970; Fri, 13 Sep 2002 15:01:18 -0400 +From: Theo Van Dinter +To: vernon@comp-wiz.com +Cc: spamassassin-talk +Subject: Re: [SAtalk] OT: DNS MX Record Clarification Please +Message-Id: <20020913190117.GG5897@kluge.net> +References: <20020913151635.M21128@b2unow.com> + <20020913183343.M49078@b2unow.com> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="Fnm8lRGFTVS/3GuM" +Content-Disposition: inline +In-Reply-To: <20020913183343.M49078@b2unow.com> +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 13 Sep 2002 15:01:18 -0400 +Date: Fri, 13 Sep 2002 15:01:18 -0400 + + +--Fnm8lRGFTVS/3GuM +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Fri, Sep 13, 2002 at 01:33:43PM -0500, vernon wrote: +> As I understand it, DNS A records are used in a rotating fashion for load +> balancing, but DNS MX records are used in order or prority, meaning the 10 +> before the 20 and only 20 if the 10 isn't available. + +That's the theory, yes. + +> But only some of the mail is actually being scanned which leads me to +> believe that not all of the mail is actually hitting that box and the 10 +> never goes down. Why? Have I got something confused here? + +No, but either due to some technical glitch, or downright just wanting +to do so, people send to the secondary. It's a semi-usual spammer trick +actually to bypass the main server and send directly to a secondary +since it will either have less filtering, or be "trusted", or ... + +MX records in the mail world are all explained in RFC 2821, section 5: + +[...] + Multiple MX records contain a preference indication that MUST be used + in sorting (see below). Lower numbers are more preferred than higher + ones. If there are multiple destinations with the same preference + and there is no clear reason to favor one (e.g., by recognition of an + easily-reached address), then the sender-SMTP MUST randomize them to + spread the load across multiple mail exchangers for a specific + organization. +[...] + If it determines that it should relay the message without rewriting + the address, it MUST sort the MX records to determine candidates for + delivery. The records are first ordered by preference, with the + lowest-numbered records being most preferred. The relay host MUST + then inspect the list for any of the names or addresses by which it + might be known in mail transactions. If a matching record is found, + all records at that preference level and higher-numbered ones MUST be + discarded from consideration. If there are no records left at that + point, it is an error condition, and the message MUST be returned as + undeliverable. If records do remain, they SHOULD be tried, best + preference first, as described above. + +--=20 +Randomly Generated Tagline: +"Now let's say I like sheep... And now let's say I take the sheep to a=20 + Christmas party..." - Bob Golub + +--Fnm8lRGFTVS/3GuM +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9gjX9AuOQUeWAs2MRAg7PAJ42kO68knZx76oQbrZPMGdg/JbJHACfQvlX +O/Utl8FY01aS+/e3VNE9WWM= +=O6kU +-----END PGP SIGNATURE----- + +--Fnm8lRGFTVS/3GuM-- + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01474.87ab36335ec20ae5f4f60955a1c07c5f b/Ch3/datasets/spam/easy_ham/01474.87ab36335ec20ae5f4f60955a1c07c5f new file mode 100644 index 000000000..050b327cf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01474.87ab36335ec20ae5f4f60955a1c07c5f @@ -0,0 +1,121 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Sep 13 20:45:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D0FD016F03 + for ; Fri, 13 Sep 2002 20:45:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 20:45:29 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8DJEuC31586 for ; Fri, 13 Sep 2002 20:14:56 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pvtD-0000yV-00; Fri, + 13 Sep 2002 12:14:03 -0700 +Received: from eclectic.kluge.net ([66.92.69.221]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17pvr2-00034R-00 for + ; Fri, 13 Sep 2002 12:11:49 -0700 +Received: from eclectic.kluge.net (localhost [127.0.0.1]) by + eclectic.kluge.net (8.12.6/8.12.6) with ESMTP id g8DJAW4q023487; + Fri, 13 Sep 2002 15:10:32 -0400 +Received: (from felicity@localhost) by eclectic.kluge.net + (8.12.6/8.12.6/Submit) id g8DJAWrk023485; Fri, 13 Sep 2002 15:10:32 -0400 +From: Theo Van Dinter +To: Jeremy Kusnetz +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] spamc -c problems on 2.41? +Message-Id: <20020913191031.GH5897@kluge.net> +References: <20020912204727.99269.qmail@web20001.mail.yahoo.com> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="Hlh2aiwFLCZwGcpw" +Content-Disposition: inline +In-Reply-To: <20020912204727.99269.qmail@web20001.mail.yahoo.com> +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 13 Sep 2002 15:10:31 -0400 +Date: Fri, 13 Sep 2002 15:10:31 -0400 + + +--Hlh2aiwFLCZwGcpw +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Thu, Sep 12, 2002 at 01:47:27PM -0700, Jeremy Kusnetz wrote: +> When running: +> spamc -c < sample-spam.txt +> I get: 18.9/6.0 Which looks correct, BUT +> doing an echo $?, returns a 0 instead of 1. + +Can you submit this to bugzilla? It definately is a bug, I mean I do +a packet trace and here's what I get with one of my spams: + +[the request] + +0040 0b 8e 43 48 45 43 4b 20 53 50 41 4d 43 2f 31 2e ..CHECK SPAMC/1. +0050 32 0d 0a 55 73 65 72 3a 20 66 65 6c 69 63 69 74 2..User: felicit +0060 79 0d 0a 43 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 y..Content-lengt +0070 68 3a 20 38 33 34 39 0d 0a 0d 0a h: 8349.... + +[the spam, removed for brevity] + +[the response] + +0040 0b 8f 53 50 41 4d 44 2f 31 2e 31 20 30 20 45 58 ..SPAMD/1.1 0 EX +0050 5f 4f 4b 0d 0a 53 70 61 6d 3a 20 46 61 6c 73 65 _OK..Spam: False +0060 20 3b 20 34 36 2e 35 20 2f 20 35 2e 30 0d 0a 0d ; 46.5 / 5.0... + + +So spamd is definately returning false incorrectly. + + +--=20 +Randomly Generated Tagline: +?pu gnikcab yb naem uoy tahw siht sI + +--Hlh2aiwFLCZwGcpw +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9gjgnAuOQUeWAs2MRAgoCAKDJGoZwXy7vwZuQIRaFfYJ+haWtbQCg9T0V +IW7ty+Y1BTybFpquY1ifZPc= +=eL/8 +-----END PGP SIGNATURE----- + +--Hlh2aiwFLCZwGcpw-- + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01475.031c58f71a4943490cc3b5aeb13b795c b/Ch3/datasets/spam/easy_ham/01475.031c58f71a4943490cc3b5aeb13b795c new file mode 100644 index 000000000..bac3b8de9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01475.031c58f71a4943490cc3b5aeb13b795c @@ -0,0 +1,76 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Sep 13 20:45:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C3D4E16F03 + for ; Fri, 13 Sep 2002 20:45:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 20:45:37 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8DJZZC32227 for ; Fri, 13 Sep 2002 20:35:35 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pw9f-0005dL-00; Fri, + 13 Sep 2002 12:31:03 -0700 +Received: from nat-pool-rdu.spamassassin.taint.org ([66.187.233.200] + helo=lacrosse.corp.redhat.com) by usw-sf-list1.sourceforge.net with esmtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17pw8x-000458-00 for + ; Fri, 13 Sep 2002 12:30:19 -0700 +Received: from [10.0.0.221] (vpn50-6.rdu.spamassassin.taint.org [172.16.50.6]) by + lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id g8DJU6826890; + Fri, 13 Sep 2002 15:30:06 -0400 +Subject: Re: [SAtalk] OT: DNS MX Record Clarification Please +From: Jason Kohles +To: vernon@comp-wiz.com +Cc: spamassassin-talk +In-Reply-To: <20020913183343.M49078@b2unow.com> +References: <20020913151635.M21128@b2unow.com> + <20020913183343.M49078@b2unow.com> +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) +Message-Id: <1031945265.2215.2.camel@traveller> +MIME-Version: 1.0 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 13 Sep 2002 15:27:38 -0400 +Date: 13 Sep 2002 15:27:38 -0400 + +On Fri, 2002-09-13 at 14:33, vernon wrote: +> +> But only some of the mail is actually being scanned which leads me to +> believe that not all of the mail is actually hitting that box and the 10 +> never goes down. Why? Have I got something confused here? +> +Sending mail directly to a backup mail server in the hopes that it has +less stringent spam scanning is a common spammer trick. + +-- +Jason Kohles jkohles@redhat.com +Senior Engineer Red Hat Professional Consulting + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01476.63631b2e613c4c2cafa59a581e2f620b b/Ch3/datasets/spam/easy_ham/01476.63631b2e613c4c2cafa59a581e2f620b new file mode 100644 index 000000000..ebe577dc9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01476.63631b2e613c4c2cafa59a581e2f620b @@ -0,0 +1,116 @@ +From spamassassin-talk-admin@lists.sourceforge.net Sat Sep 14 20:05:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 14F9016F03 + for ; Sat, 14 Sep 2002 20:05:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 14 Sep 2002 20:05:30 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8EGN4C09608 for ; Sat, 14 Sep 2002 17:23:04 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17qFgK-0002eo-00; Sat, + 14 Sep 2002 09:22:04 -0700 +Received: from eclectic.kluge.net ([66.92.69.221]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17qFew-0004CK-00 for + ; Sat, 14 Sep 2002 09:20:38 -0700 +Received: from eclectic.kluge.net (localhost [127.0.0.1]) by + eclectic.kluge.net (8.12.6/8.12.6) with ESMTP id g8EGJG4q021248; + Sat, 14 Sep 2002 12:19:16 -0400 +Received: (from felicity@localhost) by eclectic.kluge.net + (8.12.6/8.12.6/Submit) id g8EGJEWB021246; Sat, 14 Sep 2002 12:19:14 -0400 +From: Theo Van Dinter +To: Justin Mason +Cc: Gerry Doris , + Spamassassin-talk@lists.sourceforge.net +Subject: Re: [SAtalk] Still confused about spamd/c +Message-Id: <20020914161913.GA20696@kluge.net> +References: + <20020914152752.AE39B16F03@jmason.org> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="Q68bSM7Ycu6FN28Q" +Content-Disposition: inline +In-Reply-To: <20020914152752.AE39B16F03@spamassassin.taint.org> +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 14 Sep 2002 12:19:14 -0400 +Date: Sat, 14 Sep 2002 12:19:14 -0400 + + +--Q68bSM7Ycu6FN28Q +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Sat, Sep 14, 2002 at 04:27:47PM +0100, Justin Mason wrote: +> It's probably that razor needs to be "razor-register"'d for each user. +> Try creating a world-writable "home dir" for Razor and DCC et al to store +> their files in; that way spamd will share the razor server info etc. +> between all users. + +uh, no, you don't want to make it world-writable. world-readable. + +> Then use "spamd -H /path/to/world/writeable/dir" . + +Just remember that the .razor and whatever DCC uses needs to be +world-readable as well. The solution is then to make a world-writable +log file for at least Razor. I like symlinking /dev/null myself. + +> IMO this is more efficient than using "spamd -H", which will use each +> user's own home dir for this data, but it's a matter of opinion ;) + +efficient? probably (depends on the user base), but it also takes +the control away from the user (which may or may not be a good thing, +depending again on the user base...) + +--=20 +Randomly Generated Tagline: +"What's funny? I'd like to know. Send me some E-Mail." - Prof. Farr + +--Q68bSM7Ycu6FN28Q +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9g2GBAuOQUeWAs2MRAlljAKC+83f/mNoINBjoxOWBaNk4NgWsVQCg3qzO +v0EQ6XGB3ufLLudAUAADtYA= +=l7M5 +-----END PGP SIGNATURE----- + +--Q68bSM7Ycu6FN28Q-- + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01477.705f3f5f15f10c4ed2f2cf802e1a5bf1 b/Ch3/datasets/spam/easy_ham/01477.705f3f5f15f10c4ed2f2cf802e1a5bf1 new file mode 100644 index 000000000..122343fd4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01477.705f3f5f15f10c4ed2f2cf802e1a5bf1 @@ -0,0 +1,64 @@ +From spamassassin-devel-admin@lists.sourceforge.net Mon Sep 16 00:10:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 63E5E16F03 + for ; Mon, 16 Sep 2002 00:10:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 00:10:32 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8FFARC19800 for ; Sun, 15 Sep 2002 16:10:28 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17qb0F-0005Bq-00; Sun, + 15 Sep 2002 08:08:03 -0700 +Received: from mail.terraworld.net ([64.254.32.52] + helo=kronos.terraworld.net) by usw-sf-list1.sourceforge.net with smtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17qazw-0003nY-00 for + ; Sun, 15 Sep 2002 08:07:44 + -0700 +Received: (qmail 81756 invoked by uid 89); 15 Sep 2002 15:07:42 -0000 +Message-Id: <20020915150742.81753.qmail@kronos.terraworld.net> +From: "dhs" +To: spamassassin-devel@example.sourceforge.net +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +Subject: [SAdev] spamc load balancing to multiple spamd +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 15 Sep 2002 10:07:42 -0500 +Date: Sun, 15 Sep 2002 10:07:42 -0500 + + +I have searched the list but did not find any info on this. + +How do I setup multiple spamd machines so that spamc load balances - or +anything similar? + +Duane. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01478.6539703e21dfb4f52faa4db689dbc6d5 b/Ch3/datasets/spam/easy_ham/01478.6539703e21dfb4f52faa4db689dbc6d5 new file mode 100644 index 000000000..305bb1b26 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01478.6539703e21dfb4f52faa4db689dbc6d5 @@ -0,0 +1,80 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Sep 16 00:10:34 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5A1DD16F03 + for ; Mon, 16 Sep 2002 00:10:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 00:10:34 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8FI3rC23733 for ; Sun, 15 Sep 2002 19:03:53 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17qdhg-0001y3-00; Sun, + 15 Sep 2002 11:01:04 -0700 +Received: from esperi.demon.co.uk ([194.222.138.8]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17qdhR-0002Uh-00 for ; + Sun, 15 Sep 2002 11:00:49 -0700 +Received: from amaterasu.srvr.nix (0@amaterasu.srvr.nix [192.168.1.14]) by + esperi.demon.co.uk (8.11.6/8.11.6) with ESMTP id g8FHf9o05713; + Sun, 15 Sep 2002 18:41:10 +0100 +Received: (from nix@localhost) by amaterasu.srvr.nix (8.11.6/8.11.4) id + g8FHf8o22539; Sun, 15 Sep 2002 18:41:08 +0100 +To: "Tony L. Svanstrom" +Cc: carlo@alinoe.com, spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Getting yourself removed from spam lists +References: <20020913161526.A97345-100000@moon.campus.luth.se> +X-Emacs: a Lisp interpreter masquerading as ... a Lisp interpreter! +From: Nix +In-Reply-To: <20020913161526.A97345-100000@moon.campus.luth.se> +Message-Id: <87znujjgln.fsf@amaterasu.srvr.nix> +User-Agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.4 (Informed Management) +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 15 Sep 2002 18:41:08 +0100 +Date: 15 Sep 2002 18:41:08 +0100 + +On Fri, 13 Sep 2002, Tony L. Svanstrom mused: +> On Fri, 13 Sep 2002 the voices made carlo@alinoe.com write: +> +>> What do spammers do with email addresses in +>> their database that are undeliverable for a +>> few years? Do they still continue to spam +>> them? +> +> Yes. + +So much so that I get thousands of bounces per day on this machine aimed +at what are plainly message-ids... + +-- +`Let's have a round of applause for those daring young men + and their flying spellcheckers.' --- Meg Worley + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01479.c8a6082ee6a9e21154786f69c71b95bd b/Ch3/datasets/spam/easy_ham/01479.c8a6082ee6a9e21154786f69c71b95bd new file mode 100644 index 000000000..3a916a16e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01479.c8a6082ee6a9e21154786f69c71b95bd @@ -0,0 +1,77 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Sep 16 00:10:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 94B2A16F03 + for ; Mon, 16 Sep 2002 00:10:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 00:10:39 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8FJQhC26167 for ; Sun, 15 Sep 2002 20:26:43 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17qf0y-0000gZ-00; Sun, + 15 Sep 2002 12:25:04 -0700 +Received: from [209.176.10.157] (helo=linux.eopenex.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17qf02-0006KZ-00 for ; + Sun, 15 Sep 2002 12:24:06 -0700 +Received: from www.mp-i.com (linux.eopenex.com [209.176.10.8] (may be + forged)) by linux.eopenex.com (8.11.6/8.11.6) with ESMTP id g8FJI5H17211 + for ; Sun, 15 Sep 2002 15:18:13 + -0400 +From: "Vernon Webb" +To: "spamassassin-talk" +Reply-To: vernon@comp-wiz.com +Message-Id: <20020915191805.M8021@comp-wiz.com> +X-Mailer: MP-I.com Messaging OpenWebMail 1.71 20020827 +X-Originatingip: 67.81.72.77 (vernon) +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +X-Mailscanner: Found to be clean +X-Mailscanner-Spamcheck: not spam, SpamAssassin () +Subject: [SAtalk] RBL timed oiut and Spam Assassin killed +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 15 Sep 2002 14:18:05 -0500 +Date: Sun, 15 Sep 2002 14:18:05 -0500 + +I'm getting these messages and I'm not sure what they mean. Can anyone clear +this up for me? Thanks. + +Sep 15 11:45:09 linux mailscanner[6128]: RBL Check ORDB-RBL timed out and +was killed, consecutive failure 3 of 7 +Sep 15 11:45:24 linux mailscanner[6128]: SpamAssassin timed out and was +killed + + +-- +This message has been scanned for viruses and +dangerous content by MailScanner at comp-wiz.com, +and is believed to be clean. + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01480.1d6e92e72f85630b288a712075387058 b/Ch3/datasets/spam/easy_ham/01480.1d6e92e72f85630b288a712075387058 new file mode 100644 index 000000000..c68e3161b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01480.1d6e92e72f85630b288a712075387058 @@ -0,0 +1,80 @@ +From spamassassin-devel-admin@lists.sourceforge.net Mon Sep 16 00:10:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 63E3116F03 + for ; Mon, 16 Sep 2002 00:10:43 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 00:10:43 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8FKY8C27737 for ; Sun, 15 Sep 2002 21:34:08 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17qg3s-0004Ax-00; Sun, + 15 Sep 2002 13:32:08 -0700 +Received: from moon.campus.luth.se ([130.240.202.158]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17qg3c-0008Aa-00 for + ; Sun, 15 Sep 2002 13:31:53 + -0700 +Received: from moon.campus.luth.se (tony@moon.campus.luth.se + [130.240.202.158]) by moon.campus.luth.se (8.12.3/8.12.3) with ESMTP id + g8FKVaMg044001; Sun, 15 Sep 2002 22:31:36 +0200 (CEST) (envelope-from + tony@svanstrom.com) +From: "Tony L. Svanstrom" +X-X-Sender: tony@moon.campus.luth.se +To: Marc Perkel +Cc: spamassassin-devel@example.sourceforge.net +Subject: Re: [SAdev] Suggestion - 2 levels of Spam Status +In-Reply-To: <3D84E403.5000001@perkel.com> +Message-Id: <20020915223031.O43994-100000@moon.campus.luth.se> +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 15 Sep 2002 22:31:36 +0200 (CEST) +Date: Sun, 15 Sep 2002 22:31:36 +0200 (CEST) + +On Sun, 15 Sep 2002 the voices made Marc Perkel write: + +> Right now we have one spam status flag indicating that a message is or +> is not spam. The idea being that the end user perhaps make a rule that +> would move the spam flagged messages into a spam folder and thus gain +> some time by presorting messages into to piles. + + If you (people) don't know enough to filter on the actual score they've got +the "stars", which will give them more than enough levers, if they want it. + + + /Tony +-- +# Per scientiam ad libertatem! // Through knowledge towards freedom! # +# Genom kunskap mot frihet! =*= (c) 1999-2002 tony@svanstrom.com =*= # + + perl -e'print$_{$_} for sort%_=`lynx -dump svanstrom.com/t`' + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01481.cf3798a158a9f359fd048b6a2895a878 b/Ch3/datasets/spam/easy_ham/01481.cf3798a158a9f359fd048b6a2895a878 new file mode 100644 index 000000000..0a28ed520 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01481.cf3798a158a9f359fd048b6a2895a878 @@ -0,0 +1,81 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Sep 16 00:10:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6B30816F03 + for ; Mon, 16 Sep 2002 00:10:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 00:10:45 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8FKdkC27782 for ; Sun, 15 Sep 2002 21:39:47 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17qg9b-0005oW-00; Sun, + 15 Sep 2002 13:38:03 -0700 +Received: from cpe3236313132303031.cpe.net.cable.rogers.com + ([24.101.219.158] helo=tiger.dorfam.ca) by usw-sf-list1.sourceforge.net + with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17qg8f-0000Wq-00 for + ; Sun, 15 Sep 2002 13:37:05 -0700 +Received: from tiger.dorfam.ca + (IDENT:f7rSrLFz9/M04Kx9/CJFe0AD7QQp/7rf@tiger.dorfam.ca [10.0.10.4]) + (authenticated) by tiger.dorfam.ca (8.11.6/8.11.6) with ESMTP id + g8FKaGQ25985; Sun, 15 Sep 2002 16:36:16 -0400 +From: Gerry Doris +To: Vernon Webb +Cc: spamassassin-talk +Subject: Re: [SAtalk] RBL timed oiut and Spam Assassin killed +In-Reply-To: <20020915191805.M8021@comp-wiz.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Mailscanner: Found to be clean +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 15 Sep 2002 16:36:15 -0400 (EDT) +Date: Sun, 15 Sep 2002 16:36:15 -0400 (EDT) + +On Sun, 15 Sep 2002, Vernon Webb wrote: + +> I'm getting these messages and I'm not sure what they mean. Can anyone clear +> this up for me? Thanks. +> +> Sep 15 11:45:09 linux mailscanner[6128]: RBL Check ORDB-RBL timed out and +> was killed, consecutive failure 3 of 7 +> Sep 15 11:45:24 linux mailscanner[6128]: SpamAssassin timed out and was +> killed + +Your running mailscanner and the timeout used got to check ORDB-RBL is too +low and your timing out. mailscanner will count up to seven timeouts and +then automatically disable these checks until it restarts itself (within 4 +hours). + +-- +Gerry + +"The lyfe so short, the craft so long to learne" Chaucer + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01482.a3576ddec34b0481a9a671c1f3c141c3 b/Ch3/datasets/spam/easy_ham/01482.a3576ddec34b0481a9a671c1f3c141c3 new file mode 100644 index 000000000..3eebd052f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01482.a3576ddec34b0481a9a671c1f3c141c3 @@ -0,0 +1,84 @@ +From spamassassin-devel-admin@lists.sourceforge.net Mon Sep 16 00:10:47 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 15C2C16F03 + for ; Mon, 16 Sep 2002 00:10:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 00:10:47 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8FKfDC27929 for ; Sun, 15 Sep 2002 21:41:13 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17qgBZ-0006Tv-00; Sun, + 15 Sep 2002 13:40:05 -0700 +Received: from www.ctyme.com ([209.237.228.10] helo=darwin.ctyme.com) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17qgBK-0003IH-00 for + ; Sun, 15 Sep 2002 13:39:50 + -0700 +Received: from m206-56.dsl.tsoft.com ([198.144.206.56] helo=perkel.com) by + darwin.ctyme.com with asmtp (Exim 3.35 #1) id 17qgB6-0002Od-00; + Sun, 15 Sep 2002 13:39:36 -0700 +Message-Id: <3D84F004.7000805@perkel.com> +From: Marc Perkel +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020513 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: "Tony L. Svanstrom" +Cc: spamassassin-devel@example.sourceforge.net +Subject: Re: [SAdev] Suggestion - 2 levels of Spam Status +References: <20020915223031.O43994-100000@moon.campus.luth.se> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 15 Sep 2002 13:39:32 -0700 +Date: Sun, 15 Sep 2002 13:39:32 -0700 + +Tony L. Svanstrom wrote: + +>On Sun, 15 Sep 2002 the voices made Marc Perkel write: +> +>>Right now we have one spam status flag indicating that a message is or +>>is not spam. The idea being that the end user perhaps make a rule that +>>would move the spam flagged messages into a spam folder and thus gain +>>some time by presorting messages into to piles. +>> +> +> If you (people) don't know enough to filter on the actual score they've got +>the "stars", which will give them more than enough levers, if they want it. +> +> +> /Tony +> +Sure - we developers know that - but what I'm talking about is making it +easier for END USERS to figure out. + + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01483.25278a257e2a09ef840351510809e000 b/Ch3/datasets/spam/easy_ham/01483.25278a257e2a09ef840351510809e000 new file mode 100644 index 000000000..707283973 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01483.25278a257e2a09ef840351510809e000 @@ -0,0 +1,66 @@ +From razor-users-admin@lists.sourceforge.net Mon Sep 16 18:32:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1CF2116F03 + for ; Mon, 16 Sep 2002 18:32:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 18:32:40 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8GHKaC03056 for ; Mon, 16 Sep 2002 18:20:36 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17qzRm-0006Jz-00; Mon, + 16 Sep 2002 10:14:06 -0700 +Received: from med-core07.med.wayne.edu ([146.9.19.23]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17qzQw-0004tZ-00; Mon, 16 Sep 2002 10:13:14 -0700 +X-Mimeole: Produced By Microsoft Exchange V6.0.6249.0 +Content-Class: urn:content-classes:message +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Message-Id: +X-MS-Has-Attach: +X-MS-Tnef-Correlator: +Thread-Topic: Performance +Thread-Index: AcJdpFL2vpGvj3A/R42dewEFZqr/aA== +From: "Rose, Bobby" +To: , + +Subject: [Razor-users] Performance +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 16 Sep 2002 13:13:06 -0400 +Date: Mon, 16 Sep 2002 13:13:06 -0400 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8GHKaC03056 + +Has anyone noticed a drop in razor-check performance over the past week? +I disabled the razorchecks in Spamassassin and my queues start to clean +out again. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01484.135f04f6f10d59dbc5c67c4841f4d33f b/Ch3/datasets/spam/easy_ham/01484.135f04f6f10d59dbc5c67c4841f4d33f new file mode 100644 index 000000000..02e5ea868 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01484.135f04f6f10d59dbc5c67c4841f4d33f @@ -0,0 +1,81 @@ +From spamassassin-talk-admin@lists.sourceforge.net Tue Sep 17 17:35:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2F1F016F03 + for ; Tue, 17 Sep 2002 17:35:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 17:35:04 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8HGPSC17512 for ; Tue, 17 Sep 2002 17:25:28 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17rL8u-0007Rp-00; Tue, + 17 Sep 2002 09:24:04 -0700 +Received: from defout.telus.net ([199.185.220.240] + helo=priv-edtnes28.telusplanet.net) by usw-sf-list1.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17rL8N-0000Pl-00 for + ; Tue, 17 Sep 2002 09:23:31 -0700 +Received: from monsta ([66.183.218.18]) by priv-edtnes28.telusplanet.net + (InterMail vM.5.01.04.05 201-253-122-122-105-20011231) with SMTP id + <20020917162324.GOG25741.priv-edtnes28.telusplanet.net@monsta> for + ; Tue, 17 Sep 2002 10:23:24 -0600 +Message-Id: <3.0.5.32.20020917092014.01035940@pop3.norton.antivirus> +X-Sender: a8a04969/pop.telus.net@pop3.norton.antivirus +X-Mailer: QUALCOMM Windows Eudora Light Version 3.0.5 (32) +To: spamassassin-talk@example.sourceforge.net +From: Chris +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Subject: [SAtalk] Running SA as a user app? +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 17 Sep 2002 09:20:14 -0700 +Date: Tue, 17 Sep 2002 09:20:14 -0700 + +Can anybody point me to a project/FAQ similar to this:? + +1. Perl script fetches POP mail from a distant server +2. mail is fed to SA, running as a standalone module in my user account +3. SA spits out results back to perl script. +4. Script deletes offending mail. + +I don't have root access. I don't need a MTA. + +=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0 +Chris Fortune +Fortune's Web Computer Services +Nelson, BC, Canada +V1L 2W3 + +ph#: 250 505-5012 +email: cfortune@telus.net +website: http://cfortune.kics.bc.ca/ + +=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0 + + + +------------------------------------------------------- +Sponsored by: AMD - Your access to the experts on Hammer Technology! +Open Source & Linux Developers, register now for the AMD Developer +Symposium. Code: EX8664 http://www.developwithamd.com/developerlab +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01485.4efa6516427c6184adbb4f559ee84055 b/Ch3/datasets/spam/easy_ham/01485.4efa6516427c6184adbb4f559ee84055 new file mode 100644 index 000000000..af2cd6c0a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01485.4efa6516427c6184adbb4f559ee84055 @@ -0,0 +1,79 @@ +From quinlan@pathname.com Mon Sep 16 00:08:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4B65C16F03 + for ; Mon, 16 Sep 2002 00:08:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 00:08:15 +0100 (IST) +Received: from proton.pathname.com + (adsl-216-103-211-240.dsl.snfc21.pacbell.net [216.103.211.240]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8ELf9C18215 for + ; Sat, 14 Sep 2002 22:41:10 +0100 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17qKfW-0001tr-00; Sat, 14 Sep 2002 14:41:34 -0700 +To: yyyy@spamassassin.taint.org (Justin Mason) +Cc: Matt Sergeant , + Spamassassin-devel +Subject: Re: [SAdev] testing with less rules +References: <20020913211335.564DD16F03@spamassassin.taint.org> +From: Daniel Quinlan +Date: 14 Sep 2002 14:41:34 -0700 +In-Reply-To: yyyy@spamassassin.taint.org's message of "Fri, 13 Sep 2002 22:13:30 +0100" +Message-Id: +X-Mailer: Gnus v5.7/Emacs 20.7 + +jm@jmason.org (Justin Mason) writes: + +>>> DATE_IN_PAST_48_96 +>>> SPAM_PHRASE_00_01 +>>> SPAM_PHRASE_01_02 +>>> SPAM_PHRASE_02_03 +>>> SPAM_PHRASE_03_05 +>>> SPAM_PHRASE_05_08 + +> I was thinking of just removing those particular rules, but keeping the +> other entries in the range, since they're proving too "noisy" to be +> effective. But I'd be willing to keep those ones in, all the same. What +> do you think? Matt/Craig, thoughts? + +I think I could handle commenting out the lowest SPAM_PHRASE_XX_YY +scores. If the GA could handle this sort of thing so they'd +automatically be zeroed, I'd feel better since the ranges could change +next time the phrase list is regenerated or the algorithm tweaked. + +I think we need to understand why DATE_IN_PAST_48_96 is so low before +we remove it. The two rules on either side perform quite well. + +>> And here are the rules that seem like they should be better or should +>> be recoverable: + +>>> FROM_MISSING +>>> GAPPY_TEXT +>>> INVALID_MSGID +>>> MIME_NULL_BLOCK +>>> SUBJ_MISSING + +> well, I don't like SUBJ_MISSING, I reckon there's a world of mails from +> cron jobs (e.g.) which hit it. + +Okay, drop SUBJ_MISSING. + +> But, yes, the others for sure should be recoverable, and I'm sure there's +> more. + +Probably a few, those seemed like the best prospects to me. + +> BTW do you agree with the proposed methodology (ie. remove the rules and +> bugzilla each one?) + +I only want a bugzilla ticket for each one if people are okay with +quick WONTFIX closes on the ones deemed unworthy of recovery. + +If you could put the stats for each rule in the ticket somehow (should +be automatable with email at the very least), it would help. + +Dan + + diff --git a/Ch3/datasets/spam/easy_ham/01486.d055246ae702f2eaac34a5ce2719c87e b/Ch3/datasets/spam/easy_ham/01486.d055246ae702f2eaac34a5ce2719c87e new file mode 100644 index 000000000..5cac12408 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01486.d055246ae702f2eaac34a5ce2719c87e @@ -0,0 +1,48 @@ +From quinlan@pathname.com Mon Sep 16 10:41:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9220716F03 + for ; Mon, 16 Sep 2002 10:41:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 10:41:50 +0100 (IST) +Received: from proton.pathname.com + (adsl-216-103-211-240.dsl.snfc21.pacbell.net [216.103.211.240]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8G4tNC13670 for + ; Mon, 16 Sep 2002 05:55:23 +0100 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17qnvH-0004Rr-00; Sun, 15 Sep 2002 21:55:47 -0700 +From: Daniel Quinlan +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Message-Id: <15749.25683.361874.673913@proton.pathname.com> +Date: Sun, 15 Sep 2002 21:55:47 -0700 +To: yyyy@spamassassin.taint.org (Justin Mason) +Cc: Daniel Quinlan , + Matt Sergeant , + Spamassassin-devel +Subject: Re: [SAdev] testing with less rules +In-Reply-To: <20020915233332.82A4E16F03@spamassassin.taint.org> +References: + <20020915233332.82A4E16F03@jmason.org> +X-Mailer: VM 7.04 under Emacs 20.7.2 +Reply-To: quinlan@pathname.com + +Justin Mason writes: + +> hmm. also I think I've found some cases where it's hitting on fetchmail +> Received hdrs. that's bad. so it could be fixed.... + +fetchmail adds Received headers? That seems wrong. I'll open a bug +to investigate. Can you attach some examples? + +> yeah, will do -- somehow. pity the bugzilla doesn't allow email +> submissions... + +Agreed. At least you can add information with email. + +- Dan + + diff --git a/Ch3/datasets/spam/easy_ham/01487.7bfc394e400ea1925c895925dfeb6b6a b/Ch3/datasets/spam/easy_ham/01487.7bfc394e400ea1925c895925dfeb6b6a new file mode 100644 index 000000000..a9b0268ba --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01487.7bfc394e400ea1925c895925dfeb6b6a @@ -0,0 +1,50 @@ +From schaefer@zanshin.com Mon Sep 16 19:20:19 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6CDDD16F16 + for ; Mon, 16 Sep 2002 19:20:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 19:20:19 +0100 (IST) +Received: from moonbase.zanshin.com (IDENT:root@moonbase.zanshin.com + [167.160.213.139]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8GIJ2C04846 for ; Mon, 16 Sep 2002 19:19:02 +0100 +Received: from aztec.zanshin.com (IDENT:schaefer@aztec.zanshin.com + [167.160.213.132]) by moonbase.zanshin.com (8.11.0/8.11.0) with ESMTP id + g8GIJJh32385; Mon, 16 Sep 2002 11:19:19 -0700 +Date: Mon, 16 Sep 2002 11:19:19 -0700 (PDT) +From: Bart Schaefer +To: Justin Mason +Cc: Simon Matthews , + +Subject: Re: [SAtalk] Can someone please tell me how to get an answer from + this list? +In-Reply-To: <20020916180348.DBE0616F03@spamassassin.taint.org> +Message-Id: +Mail-Followup-To: spamassassin-talk@example.sourceforge.net +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII + +On Mon, 16 Sep 2002, Justin Mason wrote: + +> Simon Matthews said: +> +> > Procmail 3.21 is reliable as long as none of the recipies fails. I was +> > hoping to resolve the triplets.txt problem and thus avoid the procmail +> > "^rom" problem. +> +> I doubt it's related, actually -- the "triplets" stuff is in a totally +> unrelated area of code. + +The procmail bug happens when the filter program does something that +procmail doesn't expect. Exactly what that something is, hasn't been +confirmed by anyone on the procmail list. It might be exiting with a +nonzero status, or it might be producing output on the standard error, +or it might be something else entirely. + +So Simon is attempting to get SA to run flawlessly, because then it can't +tickle the procmail bug. This isn't a fix, it's a band-aid, but because +he apparently doesn't have the option of installing a newer procmail ... + + diff --git a/Ch3/datasets/spam/easy_ham/01488.e5500a90fb3169185bfcf41ef381bd7d b/Ch3/datasets/spam/easy_ham/01488.e5500a90fb3169185bfcf41ef381bd7d new file mode 100644 index 000000000..e62ddda8d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01488.e5500a90fb3169185bfcf41ef381bd7d @@ -0,0 +1,52 @@ +From quinlan@pathname.com Tue Sep 17 23:30:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EF15F16F03 + for ; Tue, 17 Sep 2002 23:30:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 23:30:38 +0100 (IST) +Received: from proton.pathname.com + (adsl-216-103-211-240.dsl.snfc21.pacbell.net [216.103.211.240]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8HKVLC25673 for + ; Tue, 17 Sep 2002 21:31:21 +0100 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17rP0f-0004fo-00; Tue, 17 Sep 2002 13:31:49 -0700 +To: yyyy@spamassassin.taint.org (Justin Mason) +Cc: spamassassin-devel@example.sourceforge.net +Subject: Re: [SAdev] Re: [SAtalk] SpamAssassin and unconfirmed.dsbl.org +References: <20020917142054.5C4E916F16@spamassassin.taint.org> +From: Daniel Quinlan +Date: 17 Sep 2002 13:31:49 -0700 +In-Reply-To: yyyy@spamassassin.taint.org's message of "Tue, 17 Sep 2002 15:20:49 +0100" +Message-Id: +X-Mailer: Gnus v5.7/Emacs 20.7 + +jm@jmason.org (Justin Mason) writes: + +> Folks who've been hacking on the DNSBLs: would it be worthwhile commenting +> this in HEAD, seeing as it only gets .77 anyway? +> +> Sounds like the (a) broken server and (b) low hitrate combine to make it +> not-so-useful IMO. + +No, in my opinion, it's purely a bug in SA (or the libraries we use, +which is the same thing) that we don't handle outages of network +services better. + +The rule is useful and it does help reduce spam, we should keep it. I +have a feeling the DNSBL rules will cluster a bit more heavily around +the 1.0 to 2.0 range once we start using the new GA on them. + +Also, 0.77 was a slightly conservative number. Since I didn't have +real-time data, I typically used the lower or median number of different +periods (most recent month, two months, six months), depending on the +trend of the period data (better performance for recent messages -> +favor recent scores, worse performance for recent messages -> favor +lowest scores, never pick the highest number unless the rule was very +accurate and the highest number was for the most recent data). + +Dan + + diff --git a/Ch3/datasets/spam/easy_ham/01489.408e736d2c2fb22b64f9b588c788dad1 b/Ch3/datasets/spam/easy_ham/01489.408e736d2c2fb22b64f9b588c788dad1 new file mode 100644 index 000000000..ee6acf4f9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01489.408e736d2c2fb22b64f9b588c788dad1 @@ -0,0 +1,55 @@ +From jm@jmason.org Wed Sep 18 12:45:20 2002 +Return-Path: +Delivered-To: yyyy@spamassassin.taint.org +Received: by spamassassin.taint.org (Postfix, from userid 500) + id 9B11716F1A; Wed, 18 Sep 2002 12:45:20 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) + by jmason.org (Postfix) with ESMTP + id 8EBC1F7B1; Wed, 18 Sep 2002 12:45:20 +0100 (IST) +To: "Gary Funck" +Cc: "Spamassassin List" , + "Justin Mason" +Subject: Re: [SAtalk] checking out Razor2 (and SA 2.41) install - Net::DNS:Resolver problem? +In-Reply-To: Message from "Gary Funck" + of "Tue, 17 Sep 2002 18:36:05 PDT." +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Date: Wed, 18 Sep 2002 12:45:15 +0100 +Sender: yyyy@spamassassin.taint.org +Message-Id: <20020918114520.9B11716F1A@spamassassin.taint.org> + + +Gary Funck said: +> I thought the ">> /perllocal.pod" line looked odd. Is it normal to write +> documentation into the root directory? (). Is there some Make parameter, o +> r +> environment variable that should've been set when I ran "make"? + +an issue for Razor folks I think. + +> It seems that by registering that I avoided the error path noted in my previo +> us +> e-mail where DNS::Net::Resolver was called, but does not exist in my Perl +> hierarchy. Here's the new output from SA ans Razor2: +looks good. + + +> Question: if we use spamassassin on a per-user basis, invoked from procmailrc +> , +> will each user have to run "razor-admin -register" first? Is there way to +> register with Razor just once per system? + +If you use spamd with the -H option and provide a shared directory for +the razor config files to be written to. RTFM for more details... + +--j. + diff --git a/Ch3/datasets/spam/easy_ham/01490.859db59aa3abbf8c92e1766d1aa147b5 b/Ch3/datasets/spam/easy_ham/01490.859db59aa3abbf8c92e1766d1aa147b5 new file mode 100644 index 000000000..f0c608866 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01490.859db59aa3abbf8c92e1766d1aa147b5 @@ -0,0 +1,53 @@ +From jm@jmason.org Wed Sep 18 12:57:54 2002 +Return-Path: +Delivered-To: yyyy@spamassassin.taint.org +Received: by spamassassin.taint.org (Postfix, from userid 500) + id 4376516F1C; Wed, 18 Sep 2002 12:57:54 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) + by jmason.org (Postfix) with ESMTP + id 40A2CF7B1; Wed, 18 Sep 2002 12:57:54 +0100 (IST) +To: Matt Kettler +Cc: yyyy@spamassassin.taint.org (Justin Mason), + SpamAssassin-devel@lists.sourceforge.net +Subject: Re: [SAdev] phew! +In-Reply-To: Message from Matt Kettler + of "Wed, 18 Sep 2002 02:04:29 EDT." <5.1.1.6.0.20020918014722.00a99b20@mail.comcast.net> +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Date: Wed, 18 Sep 2002 12:57:49 +0100 +Sender: yyyy@spamassassin.taint.org +Message-Id: <20020918115754.4376516F1C@spamassassin.taint.org> + + +Matt Kettler said: +> Ok, first, the important stuff. Happy birthday Justin (a lil late, but +> oh well) + +cheers! + +> a 13% miss ratio on the spam corpus at 5.0 seems awfully high, although +> that nice low FP percentage is quite nice, as is the narrow-in of average +> FP/FN scores compared to 2.40. + +As Dan said -- it's a hard corpus, made harder without the spamtrap data. + +Also -- and this is an important point -- those measurements can't be +directly compared, because I changed the methodology. In 2.40 the scores +were evolved on the entire corpus, then evaluated using that corpus; ie. +there was no "blind" testing, and the scores could overfit and still +provide good statistics. + +In 2.42, they're evaluated "blind", on a totally unseen set of messages, +so those figures would be a lot more accurate for real-world use. + +--j. + diff --git a/Ch3/datasets/spam/easy_ham/01491.870d988a32a3c80dd577625de0f2b708 b/Ch3/datasets/spam/easy_ham/01491.870d988a32a3c80dd577625de0f2b708 new file mode 100644 index 000000000..7445cdece --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01491.870d988a32a3c80dd577625de0f2b708 @@ -0,0 +1,131 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Sep 18 14:07:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1B34B16F03 + for ; Wed, 18 Sep 2002 14:07:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 14:07:12 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8IBnfC28425 for ; Wed, 18 Sep 2002 12:49:42 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17rdJM-0003kl-00; Wed, + 18 Sep 2002 04:48:04 -0700 +Received: from cedar.shu.ac.uk ([143.52.2.51]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17rdIU-0007j4-00 for ; + Wed, 18 Sep 2002 04:47:10 -0700 +Received: from cis-sys-03.csv.shu.ac.uk ([143.52.20.90] + helo=videoproducer) by cedar.shu.ac.uk with esmtp (Exim 3.36 #2) id + 17rdFf-0005hM-00 for spamassassin-talk@lists.sourceforge.net; + Wed, 18 Sep 2002 12:44:15 +0100 +Message-Id: <005901c25f08$b6d5b0b0$5a14348f@videoproducer> +From: "Ray Gardener" +To: +Organization: Shefield Hallam University +MIME-Version: 1.0 +Content-Type: multipart/alternative; + boundary="----=_NextPart_000_0056_01C25F11.18554780" +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Mailscanner: Found to be clean +Subject: [SAtalk] spamc and DCC +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 18 Sep 2002 12:44:14 +0100 +Date: Wed, 18 Sep 2002 12:44:14 +0100 + +This is a multi-part message in MIME format. + +------=_NextPart_000_0056_01C25F11.18554780 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +Hi -=20 + +I upgraded to 2.40 (now 2.41) last week and the messages which are = +definitely in the DCC database aren't being marked as such by = +spamassassin when connected to via spamc. Interestingly it is detected = +when running spamassassin -t < sample-spam.txt (using the same userid = +incidentally). Is this a known "feature" of spamc under 2.4x or is there = +anything obvious that I am not implementing correctly? Note that as I = +implied above this used to work under 2.3x of spamassassin and = +spamd/spamc + +Regards + +Ray Gardener +Sheffield Hallam University +UK + + +------=_NextPart_000_0056_01C25F11.18554780 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +
Hi -
+
 
+
I upgraded to 2.40 (now 2.41) last = +week and=20 +the messages which are definitely in the DCC database aren't being = +marked=20 +as such by spamassassin when connected to via spamc. Interestingly it is = + +detected when running spamassassin -t < sample-spam.txt (using the = +same=20 +userid incidentally). Is this a known "feature" of spamc under 2.4x or = +is there=20 +anything obvious that I am not implementing correctly? Note that as I = +implied=20 +above this used to work under 2.3x of spamassassin and = +spamd/spamc
+
 
+
Regards
+
 
+
Ray Gardener
+
Sheffield Hallam = +University
+
UK
+
 
+ +------=_NextPart_000_0056_01C25F11.18554780-- + + + +------------------------------------------------------- +This SF.NET email is sponsored by: AMD - Your access to the experts +on Hammer Technology! Open Source & Linux Developers, register now +for the AMD Developer Symposium. Code: EX8664 +http://www.developwithamd.com/developerlab +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01492.d8e254a173dfdaf36911e9e76ed3e518 b/Ch3/datasets/spam/easy_ham/01492.d8e254a173dfdaf36911e9e76ed3e518 new file mode 100644 index 000000000..d5486a83d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01492.d8e254a173dfdaf36911e9e76ed3e518 @@ -0,0 +1,74 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Sep 19 16:31:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6BB0D16F03 + for ; Thu, 19 Sep 2002 16:31:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 16:31:48 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8JEFCC22965 for ; Thu, 19 Sep 2002 15:15:13 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17s1vV-0007ne-00; Thu, + 19 Sep 2002 07:05:05 -0700 +Received: from yertle.kcilink.com ([216.194.193.105]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17s1uY-0002kx-00 for ; + Thu, 19 Sep 2002 07:04:06 -0700 +Received: from onceler.kciLink.com (onceler.kciLink.com [216.194.193.106]) + by yertle.kciLink.com (Postfix) with ESMTP id 988432178B for + ; Thu, 19 Sep 2002 10:04:02 -0400 + (EDT) +Received: by onceler.kciLink.com (Postfix, from userid 100) id BB76E3D07; + Thu, 19 Sep 2002 10:04:01 -0400 (EDT) +From: Vivek Khera +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Message-Id: <15753.55633.535730.28416@onceler.kciLink.com> +To: "spamassassin-talk" +Subject: Re: [SAtalk] Ignore System Messages - How? +In-Reply-To: <20020918203819.M82175@b2unow.com> +References: <20020918203819.M82175@b2unow.com> +X-Mailer: VM 7.07 under 21.4 (patch 8) "Honest Recruiter" XEmacs Lucid +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 19 Sep 2002 10:04:01 -0400 +Date: Thu, 19 Sep 2002 10:04:01 -0400 + +>>>>> "v" == vernon writes: + +v> Some of my "Security Violations" and "Unusual System Events" are being +v> tagged as SPAM by SpamAssassin. How do I get SA to ignore these messages? + +whitelists. you *really* have to white list any message source that +discusses or is used to report spam, else the reports will be marked +as spam, given that they have the spam indicators in them, usually... + +This is the *only* whitelisting I use. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01493.54825a42c8197a8f7045cf4eca7f3ec3 b/Ch3/datasets/spam/easy_ham/01493.54825a42c8197a8f7045cf4eca7f3ec3 new file mode 100644 index 000000000..2bdd07574 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01493.54825a42c8197a8f7045cf4eca7f3ec3 @@ -0,0 +1,44 @@ +From mgm@starlingtech.com Fri Sep 20 11:29:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E7ADD16F03 + for ; Fri, 20 Sep 2002 11:29:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:29:50 +0100 (IST) +Received: from host.yrex.com (yrex.com [216.40.247.31]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g8K3gaC19028 for + ; Fri, 20 Sep 2002 04:42:42 +0100 +Received: (qmail 18798 invoked from network); 20 Sep 2002 03:43:04 -0000 +Received: from mgm.dsl.xmission.com (HELO opus) (204.228.152.186) by + yrex.com with SMTP; 20 Sep 2002 03:43:04 -0000 +From: "Michael Moncur" +To: "Justin Mason" , + "Daniel Quinlan" +Cc: +Subject: RE: [SAdev] phew! +Date: Thu, 19 Sep 2002 21:42:52 -0600 +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: <20020919113604.D475F16F1C@spamassassin.taint.org> + +> Yes, I think some others, (mgm?) have spamtrap data in there too. +> + +My corpus is about 50% spamtrap spam at any given time. Let me know if I +should leave that out next time, I do keep it separate. My spamtraps are +pretty clean of viruses and bounce messages most of the time. + +-- +Michael Moncur mgm at starlingtech.com http://www.starlingtech.com/ +"Lack of money is no obstacle. Lack of an idea is an obstacle." --Ken Hakuta + + diff --git a/Ch3/datasets/spam/easy_ham/01494.546fc9949239936419fc8decce22bd7e b/Ch3/datasets/spam/easy_ham/01494.546fc9949239936419fc8decce22bd7e new file mode 100644 index 000000000..f8f7062d9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01494.546fc9949239936419fc8decce22bd7e @@ -0,0 +1,54 @@ +From dougy@brizzie.org Fri Sep 20 11:38:29 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0232716F03 + for ; Fri, 20 Sep 2002 11:38:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:38:29 +0100 (IST) +Received: from brizzie.org (CPE-203-51-206-87.qld.bigpond.net.au + [203.51.206.87]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8K3TEC18700 for ; Fri, 20 Sep 2002 04:29:16 +0100 +Received: from oracle (oracle.brizzie.org [192.168.0.3]) by brizzie.org + (8.12.3/8.12.3) with SMTP id g8K3Tdx2020418; Fri, 20 Sep 2002 13:29:40 + +1000 (EST) (envelope-from dougy@brizzie.org) +Message-Id: <031901c26055$f4aefab0$0300a8c0@oracle> +From: "Doug Young" +To: "Justin Mason" +Cc: +References: <20020813124910.563B943C32@phobos.labs.netnoteinc.com> +Subject: Re: [SAtalk] dependencies / pre-requisites for installation in + FreeBSD +Date: Fri, 20 Sep 2002 13:29:39 +1000 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 + +> > Would someone please enlighten me on dependencies / pre-requisites +> > for installation in FreeBSD. The 'official' documentation isn't +particularly +> > explicit about this stuff .... eg 'procmail' is mentioned but without +saying +> > whether or not its essential, & no info provided on whether GNUmake is +> > required or if standard BSD 'make' is OK. +> +> I thought we were quite good about it, in the README file! +> +> procmail is essential *if* you're using (a) SpamAssassin for local +> delivery, (b) not using a milter, and (c) not using a Mail::Audit +> script instead. So probably yes. +> +> BSD make is OK, if Perl generally uses it to build Perl modules. +> SpamAssassin is just anotehr Perl module in that respect. +> +Back to this stuff again ..... searched high & low but definitely nothing +on this system even vaguely resembling a README file for spamassassin. +I have procmail installed but having major problems comprehending the +setup .... would appreciate info on any 'simple english' HOWTo + + diff --git a/Ch3/datasets/spam/easy_ham/01495.4e9c81cc55d6f717163921629055bc6a b/Ch3/datasets/spam/easy_ham/01495.4e9c81cc55d6f717163921629055bc6a new file mode 100644 index 000000000..71807d544 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01495.4e9c81cc55d6f717163921629055bc6a @@ -0,0 +1,58 @@ +From jm@jmason.org Fri Sep 20 13:03:34 2002 +Return-Path: +Delivered-To: yyyy@spamassassin.taint.org +Received: by spamassassin.taint.org (Postfix, from userid 500) + id 6CA7916F03; Fri, 20 Sep 2002 13:03:34 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) + by jmason.org (Postfix) with ESMTP + id 69CACF7B1; Fri, 20 Sep 2002 13:03:34 +0100 (IST) +To: "Michael Moncur" +Cc: "Justin Mason" , + "Daniel Quinlan" , + SpamAssassin-devel@lists.sourceforge.net +Subject: Re: [SAdev] phew! +In-Reply-To: Message from "Michael Moncur" + of "Thu, 19 Sep 2002 21:42:52 MDT." +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Date: Fri, 20 Sep 2002 13:03:29 +0100 +Sender: yyyy@spamassassin.taint.org +Message-Id: <20020920120334.6CA7916F03@spamassassin.taint.org> + + +"Michael Moncur" said: + +> My corpus is about 50% spamtrap spam at any given time. Let me know if I +> should leave that out next time, I do keep it separate. My spamtraps are +> pretty clean of viruses and bounce messages most of the time. + +IMO spamtrap data that's well-cleaned and monitored is fine. + +To my mind there's 3 types of spamtraps: + + 1. old user addresses, recycled into spamtraps when the user closes + the account + + 2. old user addresses, recycled into spamtraps several months after the + user closes the account, scanned for newsletters, unsubscribed + from them etc. + + 3. real spamtrap addresses to trap website crawlers. + +The latter 2 are the most effective, but #1 is a real PITA; it takes lots +of maintainance to avoid ham getting in there. Some of my spamtrap data +had a few 1's contributed by ISPs, and I hadn't spent enough time sifting +for legit mail that was slipping through. So I felt better leaving +them out for this run, apart from what I'd hand-cleaned. + +--j. + diff --git a/Ch3/datasets/spam/easy_ham/01496.eb636682660e89dc6411f4587d18bdc8 b/Ch3/datasets/spam/easy_ham/01496.eb636682660e89dc6411f4587d18bdc8 new file mode 100644 index 000000000..f4af64d15 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01496.eb636682660e89dc6411f4587d18bdc8 @@ -0,0 +1,86 @@ +From spamassassin-devel-admin@lists.sourceforge.net Sun Sep 22 00:46:56 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A9CF616F03 + for ; Sun, 22 Sep 2002 00:46:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 00:46:55 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8LNaWC09337 for ; Sun, 22 Sep 2002 00:36:32 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17stnB-0000K3-00; Sat, + 21 Sep 2002 16:36:05 -0700 +Received: from smtp6.mindspring.com ([207.69.200.110]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17stmk-0007nO-00 for ; + Sat, 21 Sep 2002 16:35:38 -0700 +Received: from user-vcaur02.dsl.mindspring.com ([216.175.108.2] + helo=belphegore.hughes-family.org) by smtp6.mindspring.com with esmtp + (Exim 3.33 #1) id 17stmi-00023O-00 for + spamassassin-devel@lists.sourceforge.net; Sat, 21 Sep 2002 19:35:36 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 5EEF791DC9; Sat, 21 Sep 2002 16:35:35 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20020921233535.5EEF791DC9@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 828] spamassassin.org is unreliable +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 21 Sep 2002 16:35:35 -0700 (PDT) +Date: Sat, 21 Sep 2002 16:35:35 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=828 + +jm@jmason.org changed: + + What |Removed |Added +---------------------------------------------------------------------------- + Status|ASSIGNED |RESOLVED + Resolution| |FIXED + + + +------- Additional Comments From jm@jmason.org 2002-09-21 16:35 ------- +OK, this should now be considered fixed, I should think. + + Domain Name: SPAMASSASSIN.ORG + Name Server: NS.PEREGRINEHW.COM + Name Server: NS1.RTS.COM.AU + Name Server: NS2.RTS.COM.AU + Name Server: NS3.RTS.COM.AU + Name Server: FAMILY.ZAWODNY.COM + +etc. + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01497.7bd463ca8ed96d9d4e12ed6a3958008c b/Ch3/datasets/spam/easy_ham/01497.7bd463ca8ed96d9d4e12ed6a3958008c new file mode 100644 index 000000000..ebcaf36bb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01497.7bd463ca8ed96d9d4e12ed6a3958008c @@ -0,0 +1,82 @@ +From spamassassin-devel-admin@lists.sourceforge.net Sun Sep 22 00:46:58 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7569B16F03 + for ; Sun, 22 Sep 2002 00:46:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 00:46:57 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8LNbJC09362 for ; Sun, 22 Sep 2002 00:37:20 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17sto8-0000Lc-00; Sat, + 21 Sep 2002 16:37:04 -0700 +Received: from blount.mail.mindspring.net ([207.69.200.226]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17sto1-0007xc-00 for ; + Sat, 21 Sep 2002 16:36:57 -0700 +Received: from user-vcaur02.dsl.mindspring.com ([216.175.108.2] + helo=belphegore.hughes-family.org) by blount.mail.mindspring.net with + esmtp (Exim 3.33 #1) id 17stnv-0004lA-00 for + spamassassin-devel@lists.sourceforge.net; Sat, 21 Sep 2002 19:36:51 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + AFB1488D3A; Sat, 21 Sep 2002 16:36:50 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20020921233650.AFB1488D3A@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 1008] SpamAssassin does not work with Glance for + Outlook 2k +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 21 Sep 2002 16:36:50 -0700 (PDT) +Date: Sat, 21 Sep 2002 16:36:50 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=1008 + +jm@jmason.org changed: + + What |Removed |Added +---------------------------------------------------------------------------- + Status|NEW |RESOLVED + Resolution| |INVALID + + + +------- Additional Comments From jm@jmason.org 2002-09-21 16:36 ------- +Hi David -- + +I'm afraid this bug-tracking system is only used for the open-source +SpamAssassin (the UNIX one ;). You need to talk to somebody +at deersoft.com instead. + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01498.e0d9701d1bf2798b86efb602a44d072b b/Ch3/datasets/spam/easy_ham/01498.e0d9701d1bf2798b86efb602a44d072b new file mode 100644 index 000000000..8df5f8fc4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01498.e0d9701d1bf2798b86efb602a44d072b @@ -0,0 +1,76 @@ +From spamassassin-devel-admin@lists.sourceforge.net Sun Sep 22 00:46:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3847016F03 + for ; Sun, 22 Sep 2002 00:46:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 00:46:59 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8LNcNC09370 for ; Sun, 22 Sep 2002 00:38:23 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17stp6-0000NI-00; Sat, + 21 Sep 2002 16:38:04 -0700 +Received: from blount.mail.mindspring.net ([207.69.200.226]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17stoz-00081e-00 for ; + Sat, 21 Sep 2002 16:37:57 -0700 +Received: from user-vcaur02.dsl.mindspring.com ([216.175.108.2] + helo=belphegore.hughes-family.org) by blount.mail.mindspring.net with + esmtp (Exim 3.33 #1) id 17stoy-00038c-00 for + spamassassin-devel@lists.sourceforge.net; Sat, 21 Sep 2002 19:37:56 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 7D8D188D3A; Sat, 21 Sep 2002 16:37:55 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20020921233755.7D8D188D3A@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 886] Add a rule to detect Content-type message/partial +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 21 Sep 2002 16:37:55 -0700 (PDT) +Date: Sat, 21 Sep 2002 16:37:55 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=886 + + + + + +------- Additional Comments From jm@jmason.org 2002-09-21 16:37 ------- +I'd prefer to wait and see if spammers do anything about it. my +guess is they will not, as it'd mean modifying their spamware to +send >1 msg per recipient. + +I vote WONTFIX as a result ;) + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01499.a60b4403c9b03c1812b8aaa7d3e666df b/Ch3/datasets/spam/easy_ham/01499.a60b4403c9b03c1812b8aaa7d3e666df new file mode 100644 index 000000000..993aae228 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01499.a60b4403c9b03c1812b8aaa7d3e666df @@ -0,0 +1,73 @@ +From spamassassin-devel-admin@lists.sourceforge.net Sun Sep 22 00:47:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2735216F03 + for ; Sun, 22 Sep 2002 00:47:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 00:47:02 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8LNefC09390 for ; Sun, 22 Sep 2002 00:40:41 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17str3-0000Sj-00; Sat, + 21 Sep 2002 16:40:05 -0700 +Received: from hall.mail.mindspring.net ([207.69.200.60]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17stqg-0001UQ-00 for ; + Sat, 21 Sep 2002 16:39:42 -0700 +Received: from user-vcaur02.dsl.mindspring.com ([216.175.108.2] + helo=belphegore.hughes-family.org) by hall.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17stqZ-0004Ba-00 for + spamassassin-devel@lists.sourceforge.net; Sat, 21 Sep 2002 19:39:35 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 1C7E791DD6; Sat, 21 Sep 2002 16:39:35 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: CC +Message-Id: <20020921233935.1C7E791DD6@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 813] add Bayesian spam filtering +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 21 Sep 2002 16:39:35 -0700 (PDT) +Date: Sat, 21 Sep 2002 16:39:35 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=813 + + + + + +------- Additional Comments From jm@jmason.org 2002-09-21 16:39 ------- +Dan, BTW, is there any code from this that we can get checked in? +I'd love to mess around with it a bit. + + + +------- You are receiving this mail because: ------- +You are on the CC list for the bug, or are watching someone who is. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01500.e0ad2000e488cfcfb840cb50a9383c01 b/Ch3/datasets/spam/easy_ham/01500.e0ad2000e488cfcfb840cb50a9383c01 new file mode 100644 index 000000000..0241cf3ce --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01500.e0ad2000e488cfcfb840cb50a9383c01 @@ -0,0 +1,95 @@ +From spamassassin-devel-admin@lists.sourceforge.net Sun Sep 22 00:47:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B748916F03 + for ; Sun, 22 Sep 2002 00:47:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 00:47:03 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8LNgUC09546 for ; Sun, 22 Sep 2002 00:42:30 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17stsz-0000Zy-00; Sat, + 21 Sep 2002 16:42:05 -0700 +Received: from blount.mail.mindspring.net ([207.69.200.226]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17stsm-0001nh-00 for ; + Sat, 21 Sep 2002 16:41:52 -0700 +Received: from user-vcaur02.dsl.mindspring.com ([216.175.108.2] + helo=belphegore.hughes-family.org) by blount.mail.mindspring.net with + esmtp (Exim 3.33 #1) id 17stsj-0000XM-00 for + spamassassin-devel@lists.sourceforge.net; Sat, 21 Sep 2002 19:41:49 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 21E8791DC7; Sat, 21 Sep 2002 16:41:49 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20020921234149.21E8791DC7@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 1012] negate directive addition +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 21 Sep 2002 16:41:49 -0700 (PDT) +Date: Sat, 21 Sep 2002 16:41:49 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=1012 + + + + + +------- Additional Comments From easmith@beatrice.rutgers.edu 2002-09-21 16:41 ------- +I like this idea, but from my reading - part of my dissertation research - +on GAs (or, in this case, more precisely "Evolutionary Programming", since +the parameters are non-binary and the major operator is mutation, not +crossover), you do need to keep in mind that the more interactions there are +between different variables, the better-tweaked the GA/EA will need to be, +especially to avoid local optima (which may have been the problem with the +suspiciously-high "anti-ratware" USER_AGENT scores). From past results, +what's needed are one or more of the below: + A. Determine mutational parameters by adapted-scores themselves, + with variation on a per-original score basis; ideally, allow + for having "correlated" mutations - in other words, have a + mechanism in place for trying out changes to a bunch of scores at + once, with them all moving about the same amount (albeit possibly + in different directions) - one means to do this is found in the + "Evolutionary Strategies" of Schwefel; + B. Adapt the probability of a mutation taking place depending on how + well previous mutation tries have done - if more than about a + fifth of the new "individuals" are doing about as well as, or + better than, the parental generation, then mutate more + parameters; if less than a fifth of them are doing about as well + as, or better than, the parental generation, then mutate less + parameters. + + -Allen + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01501.78f2f952275ec4ddeb969cf596d3ac66 b/Ch3/datasets/spam/easy_ham/01501.78f2f952275ec4ddeb969cf596d3ac66 new file mode 100644 index 000000000..d25044898 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01501.78f2f952275ec4ddeb969cf596d3ac66 @@ -0,0 +1,99 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Sep 23 15:13:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D608416F03 + for ; Mon, 23 Sep 2002 15:13:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 15:13:19 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8NE3qC19579 for ; Mon, 23 Sep 2002 15:03:52 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17tTks-0007kN-00; Mon, + 23 Sep 2002 07:00:06 -0700 +Received: from relay05.indigo.ie ([194.125.133.229]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17tTkc-00077F-00 for ; + Mon, 23 Sep 2002 06:59:50 -0700 +Received: (qmail 23892 messnum 1191200 invoked from + network[194.125.148.241/ts04-114.dublin.indigo.ie]); 23 Sep 2002 13:59:44 + -0000 +Received: from ts04-114.dublin.indigo.ie (HELO spamassassin.taint.org) + (194.125.148.241) by relay05.indigo.ie (qp 23892) with SMTP; + 23 Sep 2002 13:59:44 -0000 +Received: by spamassassin.taint.org (Postfix, from userid 500) id 7E8F716F17; + Mon, 23 Sep 2002 12:48:39 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) by spamassassin.taint.org (Postfix) + with ESMTP id 7B70DF7B1; Mon, 23 Sep 2002 12:48:39 +0100 (IST) +To: "Mike Bostock" +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Spam host? +In-Reply-To: Message from + "Mike Bostock" + of + "Mon, 23 Sep 2002 09:56:59 BST." + <20029238570161296016@surgery1.wistaria.co.uk> +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020923114839.7E8F716F17@spamassassin.taint.org> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 23 Sep 2002 12:48:34 +0100 +Date: Mon, 23 Sep 2002 12:48:34 +0100 + + +"Mike Bostock" said: + +> Received: from tracking2 (tracking2.roving.com [10.20.40.142]) +> by ccm01.roving.com (Postfix) with ESMTP id 4696633ED4 +> for ; Sun, 22 Sep 2002 17:57:03 -0400 (EDT) +> X-Mailer: Roving Constant Contact +> 5.0.Patch121c.P121C_SchedEnhancement_09_05_02 +> (http://www.constantcontact.com) +> +> Is worthy of attention and a rule - if you go to their web site it +> would appear that they are in the business of email mass marketing. +> Unfortunately their mailing to me got through Spamassassin :-( + +Interesting -- I haven't seen anything from these guys in about a year, +but looking at your hdr they're still doing it. + +OK, come up with an X-Mailer rule that hits your mails, and we'll put it +in testing... + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01502.e49f253ddfc6fb63d759ad198890404f b/Ch3/datasets/spam/easy_ham/01502.e49f253ddfc6fb63d759ad198890404f new file mode 100644 index 000000000..3d26ef3c6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01502.e49f253ddfc6fb63d759ad198890404f @@ -0,0 +1,102 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Sep 23 23:44:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F35E016F03 + for ; Mon, 23 Sep 2002 23:44:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 23:44:34 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8NMdhC05937 for ; Mon, 23 Sep 2002 23:39:43 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17tboF-0007Xg-00; Mon, + 23 Sep 2002 15:36:07 -0700 +Received: from klawatti.watchguard.com ([64.74.30.161] + helo=watchguard.com) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17tbnf-00050f-00 for + ; Mon, 23 Sep 2002 15:35:31 -0700 +Message-Id: +From: Jason Qualkenbush +To: "'Stephane Lentz'" , + spamassassin-talk@lists.sourceforge.net +Subject: RE: [SAtalk] separate inbound and outbound +MIME-Version: 1.0 +Content-Type: text/plain; charset="ISO-8859-1" +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 23 Sep 2002 15:33:48 -0700 +Date: Mon, 23 Sep 2002 15:33:48 -0700 + + +No I was just a little confused because I'm running procmail on a gateway +and sits between the external sendmail box and internal exchange bridgehead +server. So there isn't any delivery to the local system. + +The only email it gets is inbound at the moment and we're looking to get rid +of complication and go back to two boxes. I did a test which looked like +you guys are right about procmail, but testing is very limited due to the +config I currently have. It's just confusing when set up as a gateway. + +-Jason + +-----Original Message----- +From: Stephane Lentz [mailto:Stephane.Lentz@ansf.alcatel.fr] +Sent: Monday, September 23, 2002 2:50 PM +To: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] separate inbound and outbound + + +On Mon, Sep 23, 2002 at 02:26:34PM -0700, Jason Qualkenbush wrote: +> +> Is there is way to separate inbound and outbound email so that I only +check +> for spam on inbound mail and ignore the outbound? +> +> I'm using Sendmail and running procmail on the gateway to call +spamassassin. +> I know it more of a sendmail question, but my google searches have only +> turned up people trying to log all inbound and outbound email. +> +Using procmail, SpamAssassin doesn't get called for outgoing email +(messages sent to other machines). +Procmail=Local Delivery Agent => inbound traffic to LOCAL machine. + +SL/ +--- +Stephane Lentz / Alcanet International - Internet Services + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01503.5e13994a5676296ed31b14e83367031c b/Ch3/datasets/spam/easy_ham/01503.5e13994a5676296ed31b14e83367031c new file mode 100644 index 000000000..770a24865 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01503.5e13994a5676296ed31b14e83367031c @@ -0,0 +1,149 @@ +From spamassassin-talk-admin@lists.sourceforge.net Tue Sep 24 23:33:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2EDC616F03 + for ; Tue, 24 Sep 2002 23:33:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 24 Sep 2002 23:33:10 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8OMScC25067 for ; Tue, 24 Sep 2002 23:28:38 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17ty92-0008AH-00; Tue, + 24 Sep 2002 15:27:04 -0700 +Received: from ns1.apexvoice.com ([64.52.111.15] + helo=popeye.apexvoice.com) by usw-sf-list1.sourceforge.net with esmtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17ty84-00085i-00 for + ; Tue, 24 Sep 2002 15:26:04 -0700 +Received: from sthomas (64-52-111-64.apexvoice.com [64.52.111.64]) by + popeye.apexvoice.com (8.12.3/8.12.3) with SMTP id g8OMPrba011319; + Tue, 24 Sep 2002 15:25:53 -0700 +From: "Steve Thomas" +To: "Cheryl L. Southard" , + +Subject: RE: [SAtalk] user_prefs ignored +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +In-Reply-To: <20020924212731.GA24786@deimos.caltech.edu> +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 24 Sep 2002 15:25:54 -0700 +Date: Tue, 24 Sep 2002 15:25:54 -0700 + +This is just an semi-educated guess - if I'm wrong, someone please correct +me! + +Spamd setuid's to the user running spamc. Since you're calling spamc from a +global procmailrc file, it's being run as root (most likely). If called as +root, spamd won't open user_prefs files. + +>>From the spamc man page: + + -u username + This argument has been semi-obsoleted. To have spamd use + per-user-config files, run spamc as the user whose config + files spamd should load. If you're running spamc as some + other user though (eg. root, mail, nobody, cyrus, etc.) + then you can still use this flag. + + +The solution is to set DROPPRIVS=yes in /etc/procmailrc, just before running +spamc. From the procmailrc man page: + + DROPPRIVS If set to `yes' procmail will drop all privileges + it might have had (suid or sgid). This is only + useful if you want to guarantee that the bottom + half of the /etc/procmailrc file is executed on + behalf of the recipient. + + +I hope that helps, and I also hope it's right! + +St- + + +| -----Original Message----- +| From: spamassassin-talk-admin@example.sourceforge.net +| [mailto:spamassassin-talk-admin@lists.sourceforge.net]On Behalf Of +| Cheryl L. Southard +| Sent: Tuesday, September 24, 2002 2:28 PM +| To: spamassassin-talk@example.sourceforge.net +| Subject: [SAtalk] user_prefs ignored +| +| +| Hi All, +| +| I am running SpamAssassin 2.41 with procmail as my local delivery agent +| with sendmail. I use spamc/spamd so that it runs site-wide from +| /etc/procmailrc. +| +| spamd is run as root with the flags "-d -a -c", and spamc isn't run with +| any flags. +| +| When I was testing the program, I deployed spamc from my personal +| ~/.procmailrc file, my ~/.spamassassin/user_prefs file was read each time. +| I can see this because I have a non-default "required_hits" value which +| gets reported in every e-mail on the "X-Spam-Status" line. +| +| Now that I run spamc from the global /etc/procmailrc file, my +| ~/.spamassassin/user_prefs file is no longer being read or processed from +| e-mails from outside computers. The "required_hits" value gets set back +| to the one in /etc/mail/spamassassin/local.cf. However, if I send local +| e-mail, my user_prefs file is read and processed correctly. +| +| Does anyone know how to fix this problem? if this is a spamassassin or +| procmail bug? +| +| Thanks, +| +| Cheryl +| +| -- +| Cheryl Southard +| cld@astro.caltech.edu +| +| +| ------------------------------------------------------- +| This sf.net email is sponsored by:ThinkGeek +| Welcome to geek heaven. +| http://thinkgeek.com/sf +| _______________________________________________ +| Spamassassin-talk mailing list +| Spamassassin-talk@lists.sourceforge.net +| https://lists.sourceforge.net/lists/listinfo/spamassassin-talk +| + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01504.3a306a038f96c31abe2440db7f7c6806 b/Ch3/datasets/spam/easy_ham/01504.3a306a038f96c31abe2440db7f7c6806 new file mode 100644 index 000000000..84b2533cb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01504.3a306a038f96c31abe2440db7f7c6806 @@ -0,0 +1,43 @@ +From quinlan@pathname.com Thu Sep 26 10:59:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B0CCE16F16 + for ; Thu, 26 Sep 2002 10:59:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 10:59:47 +0100 (IST) +Received: from proton.pathname.com + (adsl-216-103-211-240.dsl.snfc21.pacbell.net [216.103.211.240]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8PKrgC13456 for + ; Wed, 25 Sep 2002 21:53:42 +0100 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17uJAn-0006v7-00; Wed, 25 Sep 2002 13:54:17 -0700 +To: yyyy@spamassassin.taint.org (Justin Mason) +Cc: Theo Van Dinter , + Spamassassin Devel List +Subject: Re: [SAdev] Have mass-check remove X-Spam-* headers? +References: <20020925163306.98BD616F18@spamassassin.taint.org> +From: Daniel Quinlan +Date: 25 Sep 2002 13:54:17 -0700 +In-Reply-To: yyyy@spamassassin.taint.org's message of "Wed, 25 Sep 2002 17:32:59 +0100" +Message-Id: +X-Mailer: Gnus v5.7/Emacs 20.7 + +jm@jmason.org (Justin Mason) writes: + +> except for 1 thing: defanged MIME messages. that's a big problem. +> but if you didn't just *remove* the headers and instead reverted +> back to the X-Spam-Prev versions, it'd more-or-less work. +> +> (BTW fixed the downloads page ;) + +&check now un-defangs MIME -- it was screwing up some of my mass-check +results (where SA-markup was present, yes). + +If there ever was a warning about SA-markup in mass-check, it never +worked for me. + +Dan + + diff --git a/Ch3/datasets/spam/easy_ham/01505.736da2d34e20948b7287da130be6e7da b/Ch3/datasets/spam/easy_ham/01505.736da2d34e20948b7287da130be6e7da new file mode 100644 index 000000000..39b00c505 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01505.736da2d34e20948b7287da130be6e7da @@ -0,0 +1,68 @@ +From spamassassin-talk-admin@lists.sourceforge.net Thu Sep 26 11:10:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9800216F03 + for ; Thu, 26 Sep 2002 11:10:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 11:10:38 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8Q5A7C01797 for ; Thu, 26 Sep 2002 06:10:08 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17uQse-00017m-00; Wed, + 25 Sep 2002 22:08:04 -0700 +Received: from crompton.com ([207.103.34.25] helo=bridget.crompton.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17uQre-0008Lg-00 for ; + Wed, 25 Sep 2002 22:07:03 -0700 +Received: from localhost (doug@localhost) by bridget.crompton.com + (8.11.6/8.11.6/SuSE Linux 0.5) with ESMTP id g8Q55Si17986 for + ; Thu, 26 Sep 2002 01:05:37 -0400 +From: Doug Crompton +To: SpamAssassin-Talk list +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Subject: [SAtalk] Razor problem +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 26 Sep 2002 01:05:28 -0400 (EDT) +Date: Thu, 26 Sep 2002 01:05:28 -0400 (EDT) + +I just picked up Razor SDK 2.03 and 2.14 agents from the the razor site. +I am using SuSe 7.3 - intalled SDK with no problems. All tests passed. + +When I try to make the 2.14 agents I get all kinds of errors. In +particuliar it says the net::dns is missing. But it seems to be there. The +SDK test passes it. + +Any help would be appreciated. + +Doug + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01506.4bbed296f60b0c14d64999d64081fe40 b/Ch3/datasets/spam/easy_ham/01506.4bbed296f60b0c14d64999d64081fe40 new file mode 100644 index 000000000..979d29d85 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01506.4bbed296f60b0c14d64999d64081fe40 @@ -0,0 +1,66 @@ +From easmith@beatrice.rutgers.edu Thu Sep 26 16:29:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E7CEA16F03 + for ; Thu, 26 Sep 2002 16:29:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 16:29:48 +0100 (IST) +Received: from dogberry.rutgers.edu + (IDENT:ZZyo5NaveTUUTqXKkTS+TJzdiDPFTOoJ@dogberry.rutgers.edu + [165.230.209.227]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8QD5Vg19025 for ; Thu, 26 Sep 2002 14:05:31 +0100 +Received: from puck2.rutgers.edu (sendmail@puck2.rutgers.edu + [165.230.209.234]) by dogberry.rutgers.edu (8.11.2/8.11.2) with ESMTP id + g8QD5BP13089103; Thu, 26 Sep 2002 09:05:11 -0400 (EDT) +Received: (from easmith@localhost) by puck2.rutgers.edu (8.11.2/8.11.2) id + g8QD5At2678978; Thu, 26 Sep 2002 09:05:10 -0400 (EDT) +From: "Allen Smith" +Message-Id: <10209260905.ZM2657541@puck2.rutgers.edu> +Date: Thu, 26 Sep 2002 09:05:08 -0400 +In-Reply-To: Daniel Quinlan + "Re: GA Development (was Re: [SAdev] [Bug 1030] NO_INVENTORY dangerous)" + (Sep 25, 7:35pm) +References: <20020925231047.137DE9CE4C@belphegore.hughes-family.org> + <10209251923.ZM2637799@puck2.rutgers.edu> + <15762.18084.872694.456893@proton.pathname.com> +X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail) +To: Daniel Quinlan +Subject: Re: GA Development (was Re: [SAdev] [Bug 1030] NO_INVENTORY + dangerous) +Cc: yyyy@spamassassin.taint.org, spamassassin-devel@example.sourceforge.net +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 8bit + +On Sep 25, 7:35pm, Daniel Quinlan wrote: +> Allen Smith writes: +> +> > Well, I have been doing a bit of fiddling with the GA. I don't have +> > a _large_ corpus practically available to me (or processable within +> > reasonable processor time - I can justify the GA fiddling part as +> > being part of my research, but not the mail processing...), so in +> > order to test out my changes someone needs to send me a copy of the +> > "tmp/scores.h" and "tmp/tests.h" that get generated prior to the GA +> > going into action. +> +> Why not start with mass-check corpus results? It's much easier to get +> those + +Ah. As in getting a directory listing of the corpus server and doing some +downloads? OK, done. + +> and you can create your own tmp/scores.h and tmp/tests.h. + +Good point. Will report back on my results. + + -Allen + +-- +Allen Smith http://cesario.rutgers.edu/easmith/ +September 11, 2001 A Day That Shall Live In Infamy II +"They that can give up essential liberty to obtain a little temporary +safety deserve neither liberty nor safety." - Benjamin Franklin + + diff --git a/Ch3/datasets/spam/easy_ham/01507.e06cf7fcfb3a512f43c827529c19a9e6 b/Ch3/datasets/spam/easy_ham/01507.e06cf7fcfb3a512f43c827529c19a9e6 new file mode 100644 index 000000000..08ab97241 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01507.e06cf7fcfb3a512f43c827529c19a9e6 @@ -0,0 +1,61 @@ +From spamassassin-commits-admin@lists.sourceforge.net Thu Sep 26 20:43:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5868216F16 + for ; Thu, 26 Sep 2002 20:43:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 26 Sep 2002 20:43:38 +0100 (IST) +Received: from usw-sf-list1.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8QIvSg01698 for ; Thu, 26 Sep 2002 19:57:29 +0100 +Received: from usw-sf-list2-b.sourceforge.net ([10.3.1.14] + helo=usw-sf-list2.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17udpr-0003Gn-00 for ; Thu, 26 Sep 2002 + 11:58:03 -0700 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17udpt-0007W1-00 for + ; Thu, 26 Sep 2002 11:58:05 -0700 +Received: from bouncemail1.prodigy.net ([207.115.63.83]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17udp0-0003Ax-00 for ; + Thu, 26 Sep 2002 11:57:10 -0700 +Received: from vma-ext.prodigy.net (vma-int.prodigy.net [192.168.241.86]) + by BounceMail1.prodigy.net (8.11.6/8.11.6) with ESMTP id g8QHUeo23558 for + ; Thu, 26 Sep 2002 + 13:30:40 -0400 +Received: (from root@localhost) by vma-ext.prodigy.net (8.12.3 da nor + stuldap/8.12.3) id g8QHUeTt304894 for + spamassassin-commits-admin@lists.sourceforge.net; Thu, 26 Sep 2002 + 13:30:40 -0400 +From: MAILER-DAEMON@prodigy.net +Message-Id: <200209261730.g8QHUeTt304894@vma-ext.prodigy.net> +Date: Thu, 26 Sep 2002 13:16:12 -0400 +Subject: Returned mail: [SACVS] CVS: spamassassin/masses craig-evolve.c.ALTIVEC,NONE,1.1 + craig-evolve.c,1.8,1.9 +To: +Sender: spamassassin-commits-owner@example.sourceforge.net +Errors-To: spamassassin-commits-owner@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: + NO_REAL_NAME version=2.50-cvs +X-Spam-Level: + +Unable to find user: +Please make sure the address is correct and resend your mail. + + + + diff --git a/Ch3/datasets/spam/easy_ham/01508.8e4d2554f8964f6b4d78170884abd0d3 b/Ch3/datasets/spam/easy_ham/01508.8e4d2554f8964f6b4d78170884abd0d3 new file mode 100644 index 000000000..d367ec20e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01508.8e4d2554f8964f6b4d78170884abd0d3 @@ -0,0 +1,97 @@ +From spamassassin-talk-admin@lists.sourceforge.net Tue Oct 1 11:01:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 59C9416F16 + for ; Tue, 1 Oct 2002 11:01:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 01 Oct 2002 11:01:27 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g919uNK19800 for ; Tue, 1 Oct 2002 10:56:23 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17wJiD-0006pw-00; Tue, + 01 Oct 2002 02:53:05 -0700 +Received: from relay07.indigo.ie ([194.125.133.231]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17wJhX-0007dq-00 for ; + Tue, 01 Oct 2002 02:52:23 -0700 +Received: (qmail 752 messnum 1022591 invoked from + network[194.125.172.18/ts12-018.dublin.indigo.ie]); 1 Oct 2002 09:52:19 + -0000 +Received: from ts12-018.dublin.indigo.ie (HELO spamassassin.taint.org) + (194.125.172.18) by relay07.indigo.ie (qp 752) with SMTP; 1 Oct 2002 + 09:52:19 -0000 +Received: by spamassassin.taint.org (Postfix, from userid 500) id 95CB616F03; + Tue, 1 Oct 2002 10:52:01 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) by spamassassin.taint.org (Postfix) + with ESMTP id 9408FF7B1; Tue, 1 Oct 2002 10:52:01 +0100 (IST) +To: SpamTalk +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] URL blacklist +In-Reply-To: Message from SpamTalk of + "Mon, 30 Sep 2002 19:38:24 CDT." + <0FCA00EE04CDD3119C910050041FBA703A68A0@ilpostoffice.main.net56.net> +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20021001095201.95CB616F03@spamassassin.taint.org> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 01 Oct 2002 10:51:56 +0100 +Date: Tue, 01 Oct 2002 10:51:56 +0100 + + +SpamTalk said: +> Probably better than the "spam phrases" approach would be the database +> approach as currently used for white/black listing. +> Any way to tie that to an XML retrieval from a list of central repositories? +> Does mySQL do replication? A properly done XML would let us eyeball the list +> as well as use it to keep the database up to date. +> Another idea: could we synthesize an RBL so that +> http://www.spammer.com/spam/web/bug/ becomes spam.web.bug.x.www.spammer.com +> for a reverse lookup? It is going to get tricky, how to specify a randomized +> intermediate directory? + +A good plan, needs an implementation though: + + http://bl.reynolds.net.au/ksi/email/ + +hmm. seems down to me. Basically it's a plan to store hash sums of +URLs/phone numbers found in spam in a DNSBL, for apps like SpamAssassin to +look up. A little like spamcop's "spamvertized URL" list... + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by: DEDICATED SERVERS only $89! +Linux or FreeBSD, FREE setup, FAST network. Get your own server +today at http://www.ServePath.com/indexfm.htm +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01509.e13d579ab7ecc89514b343c16ea37ecc b/Ch3/datasets/spam/easy_ham/01509.e13d579ab7ecc89514b343c16ea37ecc new file mode 100644 index 000000000..c596a996d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01509.e13d579ab7ecc89514b343c16ea37ecc @@ -0,0 +1,82 @@ +From felicity@kluge.net Sun Sep 22 21:55:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0B22316F03 + for ; Sun, 22 Sep 2002 21:55:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 21:55:57 +0100 (IST) +Received: from eclectic.kluge.net + (IDENT:QCBC2WuA3fKBlFCg7HAjloSLekUZTvh3@eclectic.kluge.net [66.92.69.221]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8MGbmC07994 for + ; Sun, 22 Sep 2002 17:37:48 +0100 +Received: from eclectic.kluge.net (localhost [127.0.0.1]) by + eclectic.kluge.net (8.12.6/8.12.6) with ESMTP id g8MGcKm5026158; + Sun, 22 Sep 2002 12:38:20 -0400 +Received: (from felicity@localhost) by eclectic.kluge.net + (8.12.6/8.12.6/Submit) id g8MGcKc8026156; Sun, 22 Sep 2002 12:38:20 -0400 +Date: Sun, 22 Sep 2002 12:38:20 -0400 +From: Theo Van Dinter +To: Justin Mason +Cc: Spamassassin List +Subject: Re: [SAtalk] telesp.net.br? +Message-Id: <20020922163819.GB25030@kluge.net> +References: <20020922133353.193AC16F03@spamassassin.taint.org> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="qcHopEYAB45HaUaB" +Content-Disposition: inline +In-Reply-To: <20020922133353.193AC16F03@spamassassin.taint.org> +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 + + +--qcHopEYAB45HaUaB +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Sun, Sep 22, 2002 at 02:33:48PM +0100, Justin Mason wrote: +> I seem to be getting a *lot* of spam relayed via these guys recently. +> Can others confirm this? +>=20 +> if it's the case, I'll come up with a forged-hostname test for it. + +I do get some from them, typically some dsl.telesp.net.br host: + +% grep -c telesp.net.br *| sort -rn +spammers-2002-09:59 +spammers-2002-08:64 +spammers-2002-07:23 +spammers-2002-06:13 +spammers-2002-05:4 +spammers-2002-04:2 + +Definitely increasing per month. Percentage-wise: 2002-09 has 1212 +spams in it, so 59/1212 is about 4.8%. Last month was 3.6%. + +--=20 +Randomly Generated Tagline: +I don't believe I've ever cuddled my elses. + -- Larry Wall in <199806221550.IAA07171@wall.org> + +--qcHopEYAB45HaUaB +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9jfH7AuOQUeWAs2MRAkcuAKDZpe2Imevx9OkqkCh1rKh2IXvv6ACfZ/kn +aBRBTJx/PNPOZg5GNPk5b/s= +=mUje +-----END PGP SIGNATURE----- + +--qcHopEYAB45HaUaB-- + + diff --git a/Ch3/datasets/spam/easy_ham/01510.08454da046a34bf7a209a3f3957066fa b/Ch3/datasets/spam/easy_ham/01510.08454da046a34bf7a209a3f3957066fa new file mode 100644 index 000000000..0a2bcb17d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01510.08454da046a34bf7a209a3f3957066fa @@ -0,0 +1,36 @@ +From quinlan@pathname.com Fri Sep 20 11:28:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2948016F16 + for ; Fri, 20 Sep 2002 11:28:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:28:06 +0100 (IST) +Received: from proton.pathname.com + (adsl-216-103-211-240.dsl.snfc21.pacbell.net [216.103.211.240]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JLUVC04528 for + ; Thu, 19 Sep 2002 22:30:31 +0100 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17s8t2-0003Io-00; Thu, 19 Sep 2002 14:31:00 -0700 +To: yyyy@spamassassin.taint.org (Justin Mason) +Cc: Matt Kettler , + SpamAssassin-devel@lists.sourceforge.net +Subject: Re: [SAdev] phew! +References: <20020919113604.D475F16F1C@spamassassin.taint.org> +From: Daniel Quinlan +Date: 19 Sep 2002 14:31:00 -0700 +In-Reply-To: yyyy@spamassassin.taint.org's message of "Thu, 19 Sep 2002 12:35:59 +0100" +Message-Id: +X-Mailer: Gnus v5.7/Emacs 20.7 + +jm@jmason.org (Justin Mason) writes: + +> Yes -- 50% of the entire set for training and 50% for evaluation. + +Once you've settled on the final method for any one release, why not +use 100% of the data for a final run? + +Dan + + diff --git a/Ch3/datasets/spam/easy_ham/01511.61654b90f93541b604ca624bca8ffc8e b/Ch3/datasets/spam/easy_ham/01511.61654b90f93541b604ca624bca8ffc8e new file mode 100644 index 000000000..f5d659a61 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01511.61654b90f93541b604ca624bca8ffc8e @@ -0,0 +1,64 @@ +From quinlan@pathname.com Wed Oct 2 11:43:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3D25716F17 + for ; Wed, 2 Oct 2002 11:43:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 11:43:09 +0100 (IST) +Received: from proton.pathname.com + (adsl-216-103-211-240.dsl.snfc21.pacbell.net [216.103.211.240]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g922LbK21545 for + ; Wed, 2 Oct 2002 03:21:38 +0100 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17wZ9U-0005lL-00; Tue, 01 Oct 2002 19:22:16 -0700 +To: Theo Van Dinter +Cc: Justin Mason , + Spamassassin Devel List +Subject: Re: [SAdev] Re: [Razor-users] Mutating spam +References: + <5.1.1.6.0.20021001095106.01ac9760@192.168.50.2> + <20021001194648.DBAAC16F16@jmason.org> <20021001205821.GN29097@kluge.net> +From: Daniel Quinlan +Date: 01 Oct 2002 19:22:16 -0700 +In-Reply-To: Theo Van Dinter's message of "Tue, 1 Oct 2002 16:58:21 -0400" +Message-Id: +X-Mailer: Gnus v5.7/Emacs 20.7 + +Justin Mason wrote: + +>> Interestingly, some of these seem (apparently) to be encrypted versions of +>> the recipient email address. To see this, ROT13 yr address and grep your +>> spam archive. There'll be at least 1 hit. + +Theo Van Dinter writes: + +> Hmmm. I'm surprised at these results, especially since I should be +> seeing some false positives... Not a lot of matches though. :( + +Still worthwhile -- 1.257% is not that bad. :-) + +My results: + + OVERALL% SPAM% NONSPAM% S/O RANK SCORE NAME + 11774 4079 7695 0.35 0.00 0.00 (all messages) + 100.000 34.644 65.356 0.35 0.00 0.00 (all messages as %) + 0.195 0.564 0.000 1.00 0.75 1.00 T_ROT13_EMAIL_3 + 0.161 0.466 0.000 1.00 0.73 1.00 T_ROT13_EMAIL_2 + 0.161 0.466 0.000 1.00 0.73 1.00 T_ROT13_EMAIL + +The interesting thing is that these hits all seem to be rot13 versions +of the To: address. If we ever start getting FPs (or if anyone is +worried), we could make it an eval test for rot13 of the To: address +(turning non-word characters into "." characters in the regular +expression). + +At the same time, it might be worth testing for username in HTML +comments. I found some types in HTML comments, but I +haven't seen enough hits so far to bother (however, I did add a really +good test for email addresses in comments). + +Dan + + diff --git a/Ch3/datasets/spam/easy_ham/01512.9a1a7937d7a0691e79d806bdfbda28a3 b/Ch3/datasets/spam/easy_ham/01512.9a1a7937d7a0691e79d806bdfbda28a3 new file mode 100644 index 000000000..f4a3055e2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01512.9a1a7937d7a0691e79d806bdfbda28a3 @@ -0,0 +1,105 @@ +From spamassassin-commits-admin@lists.sourceforge.net Wed Oct 2 16:02:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C4BD016F21 + for ; Wed, 2 Oct 2002 16:01:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 16:01:02 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g92DM0K10237 for ; Wed, 2 Oct 2002 14:22:07 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17wjSV-00083D-00; Wed, + 02 Oct 2002 06:22:35 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17wjPX-0005v9-00 for ; + Wed, 02 Oct 2002 06:19:31 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17wjPX-00056m-00 for + ; Wed, 02 Oct 2002 06:19:31 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17wjPW-00014B-00 for + ; Wed, 02 Oct 2002 06:19:30 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin/lib/Mail SpamAssassin.pm,1.115.2.11,1.115.2.12 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 02 Oct 2002 06:19:30 -0700 +Date: Wed, 02 Oct 2002 06:19:30 -0700 + +Update of /cvsroot/spamassassin/spamassassin/lib/Mail +In directory usw-pr-cvs1:/tmp/cvs-serv4019/lib/Mail + +Modified Files: + Tag: b2_4_0 + SpamAssassin.pm +Log Message: +fixed bug 1033: -R and -W were not respecting auto_whitelist_path + +Index: SpamAssassin.pm +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/lib/Mail/SpamAssassin.pm,v +retrieving revision 1.115.2.11 +retrieving revision 1.115.2.12 +diff -b -w -u -d -r1.115.2.11 -r1.115.2.12 +--- SpamAssassin.pm 24 Sep 2002 18:51:37 -0000 1.115.2.11 ++++ SpamAssassin.pm 2 Oct 2002 13:19:28 -0000 1.115.2.12 +@@ -696,7 +696,13 @@ + } + + ########################################################################### +-# non-public methods. ++ ++=item $f->init ($use_user_prefs) ++ ++Read and parse the current configuration. C<$use_user_prefs> can ++be C<0> (do not read user preferences) or C<1> (do). ++ ++=cut + + sub init { + my ($self, $use_user_pref) = @_; +@@ -767,6 +773,9 @@ + + # TODO -- open DNS cache etc. if necessary + } ++ ++########################################################################### ++# non-public methods. + + sub read_cf { + my ($self, $path, $desc) = @_; + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + + diff --git a/Ch3/datasets/spam/easy_ham/01513.80c5fbd984e4ff243d1deeae20ca78b8 b/Ch3/datasets/spam/easy_ham/01513.80c5fbd984e4ff243d1deeae20ca78b8 new file mode 100644 index 000000000..3669d74ff --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01513.80c5fbd984e4ff243d1deeae20ca78b8 @@ -0,0 +1,90 @@ +From spamassassin-commits-admin@lists.sourceforge.net Wed Oct 2 16:02:40 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id DB61416F49 + for ; Wed, 2 Oct 2002 16:01:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 16:01:04 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g92DM1K10238 for ; Wed, 2 Oct 2002 14:22:07 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17wjSX-000848-00; Wed, + 02 Oct 2002 06:22:37 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17wjPX-0005v7-00 for ; + Wed, 02 Oct 2002 06:19:31 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17wjPX-00056i-00 for + ; Wed, 02 Oct 2002 06:19:31 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17wjPW-000143-00 for + ; Wed, 02 Oct 2002 06:19:30 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin spamassassin.raw,1.68.2.12,1.68.2.13 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 02 Oct 2002 06:19:30 -0700 +Date: Wed, 02 Oct 2002 06:19:30 -0700 + +Update of /cvsroot/spamassassin/spamassassin +In directory usw-pr-cvs1:/tmp/cvs-serv4019 + +Modified Files: + Tag: b2_4_0 + spamassassin.raw +Log Message: +fixed bug 1033: -R and -W were not respecting auto_whitelist_path + +Index: spamassassin.raw +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/spamassassin.raw,v +retrieving revision 1.68.2.12 +retrieving revision 1.68.2.13 +diff -b -w -u -d -r1.68.2.12 -r1.68.2.13 +--- spamassassin.raw 24 Sep 2002 18:51:37 -0000 1.68.2.12 ++++ spamassassin.raw 2 Oct 2002 13:19:28 -0000 1.68.2.13 +@@ -216,6 +216,9 @@ + if ($@) { warn $@; } + + if ($doing_whitelist_operation) { ++ # read the config! ++ $spamtest->init (1); ++ + if ($opt{'add-to-whitelist'}) { + $spamtest->add_all_addresses_to_whitelist ($mail); + } elsif ($opt{'remove-from-whitelist'}) { + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + + diff --git a/Ch3/datasets/spam/easy_ham/01514.5038367be8c46c0ade062ddd7e03422d b/Ch3/datasets/spam/easy_ham/01514.5038367be8c46c0ade062ddd7e03422d new file mode 100644 index 000000000..0fca07906 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01514.5038367be8c46c0ade062ddd7e03422d @@ -0,0 +1,155 @@ +From spamassassin-commits-admin@lists.sourceforge.net Wed Oct 2 16:02:41 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5269A16F56 + for ; Wed, 2 Oct 2002 16:01:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 16:01:07 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g92DNHK10379 for ; Wed, 2 Oct 2002 14:23:17 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17wjTk-0000QG-00; Wed, + 02 Oct 2002 06:23:52 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17wjPX-0005vM-00 for ; + Wed, 02 Oct 2002 06:19:31 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17wjPX-00056q-00 for + ; Wed, 02 Oct 2002 06:19:31 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17wjPX-00014T-00 for + ; Wed, 02 Oct 2002 06:19:31 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin/t db_based_whitelist.t,1.6.4.1,1.6.4.2 + db_based_whitelist_ips.t,1.1.2.1,1.1.2.2 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 02 Oct 2002 06:19:31 -0700 +Date: Wed, 02 Oct 2002 06:19:31 -0700 + +Update of /cvsroot/spamassassin/spamassassin/t +In directory usw-pr-cvs1:/tmp/cvs-serv4019/t + +Modified Files: + Tag: b2_4_0 + db_based_whitelist.t db_based_whitelist_ips.t +Log Message: +fixed bug 1033: -R and -W were not respecting auto_whitelist_path + +Index: db_based_whitelist.t +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/t/db_based_whitelist.t,v +retrieving revision 1.6.4.1 +retrieving revision 1.6.4.2 +diff -b -w -u -d -r1.6.4.1 -r1.6.4.2 +--- db_based_whitelist.t 24 Sep 2002 18:51:38 -0000 1.6.4.1 ++++ db_based_whitelist.t 2 Oct 2002 13:19:28 -0000 1.6.4.2 +@@ -2,7 +2,7 @@ + + use lib '.'; use lib 't'; + use SATest; sa_t_init("db_based_whitelist"); +-use Test; BEGIN { plan tests => 3 }; ++use Test; BEGIN { plan tests => 8 }; + + # --------------------------------------------------------------------------- + +@@ -16,17 +16,17 @@ + %patterns = %is_nonspam_patterns; + $scr_test_args = "-M Mail::SpamAssassin::DBBasedAddrList"; + +-sarun ("--remove-addr-from-whitelist whitelist_test\@whitelist.spamassassin.taint.org", \&patterns_run_cb); ++ok (sarun ("--remove-addr-from-whitelist whitelist_test\@whitelist.spamassassin.taint.org", \&patterns_run_cb)); + + # 3 times, to get into the whitelist: +-sarun ("-L -a -t < data/nice/002", \&patterns_run_cb); +-sarun ("-L -a -t < data/nice/002", \&patterns_run_cb); +-sarun ("-L -a -t < data/nice/002", \&patterns_run_cb); ++ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); ++ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); ++ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); + + # Now check + ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); + ok_all_patterns(); + + %patterns = %is_spam_patterns; +-sarun ("-L -a -t < data/spam/004", \&patterns_run_cb); ++ok (sarun ("-L -a -t < data/spam/004", \&patterns_run_cb)); + ok_all_patterns(); + +Index: db_based_whitelist_ips.t +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/t/db_based_whitelist_ips.t,v +retrieving revision 1.1.2.1 +retrieving revision 1.1.2.2 +diff -b -w -u -d -r1.1.2.1 -r1.1.2.2 +--- db_based_whitelist_ips.t 24 Sep 2002 18:51:38 -0000 1.1.2.1 ++++ db_based_whitelist_ips.t 2 Oct 2002 13:19:29 -0000 1.1.2.2 +@@ -2,7 +2,7 @@ + + use lib '.'; use lib 't'; + use SATest; sa_t_init("db_based_whitelist_ips"); +-use Test; BEGIN { plan tests => 3 }; ++use Test; BEGIN { plan tests => 8 }; + + # --------------------------------------------------------------------------- + +@@ -15,18 +15,18 @@ + + %patterns = %is_nonspam_patterns; + +-sarun ("--remove-addr-from-whitelist whitelist_test\@whitelist.spamassassin.taint.org", \&patterns_run_cb); ++ok (sarun ("--remove-addr-from-whitelist whitelist_test\@whitelist.spamassassin.taint.org", \&patterns_run_cb)); + + # 3 times, to get into the whitelist: +-sarun ("-L -a -t < data/nice/002", \&patterns_run_cb); +-sarun ("-L -a -t < data/nice/002", \&patterns_run_cb); +-sarun ("-L -a -t < data/nice/002", \&patterns_run_cb); ++ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); ++ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); ++ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); + + # Now check + ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); + ok_all_patterns(); + + %patterns = %is_spam_patterns; +-sarun ("-L -a -t < data/spam/007", \&patterns_run_cb); ++ok (sarun ("-L -a -t < data/spam/007", \&patterns_run_cb)); + ok_all_patterns(); + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + + diff --git a/Ch3/datasets/spam/easy_ham/01515.8eef4db7541adb66e4da229a41666635 b/Ch3/datasets/spam/easy_ham/01515.8eef4db7541adb66e4da229a41666635 new file mode 100644 index 000000000..cc11d526d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01515.8eef4db7541adb66e4da229a41666635 @@ -0,0 +1,89 @@ +From spamassassin-commits-admin@lists.sourceforge.net Wed Oct 2 16:02:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C231F16F69 + for ; Wed, 2 Oct 2002 16:01:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 16:01:11 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g92DNKK10392 for ; Wed, 2 Oct 2002 14:23:20 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17wjTo-0000TE-00; Wed, + 02 Oct 2002 06:23:56 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17wjQZ-0006N1-00 for ; + Wed, 02 Oct 2002 06:20:35 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17wjQY-000585-00 for + ; Wed, 02 Oct 2002 06:20:34 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17wjQY-0001AG-00 for + ; Wed, 02 Oct 2002 06:20:34 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin spamassassin.raw,1.76,1.77 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 02 Oct 2002 06:20:34 -0700 +Date: Wed, 02 Oct 2002 06:20:34 -0700 + +Update of /cvsroot/spamassassin/spamassassin +In directory usw-pr-cvs1:/tmp/cvs-serv4429 + +Modified Files: + spamassassin.raw +Log Message: +fixed bug 1033: -R and -W were not respecting auto_whitelist_path + +Index: spamassassin.raw +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/spamassassin.raw,v +retrieving revision 1.76 +retrieving revision 1.77 +diff -b -w -u -d -r1.76 -r1.77 +--- spamassassin.raw 26 Sep 2002 17:14:59 -0000 1.76 ++++ spamassassin.raw 2 Oct 2002 13:20:32 -0000 1.77 +@@ -218,6 +218,9 @@ + if ($@) { warn $@; } + + if ($doing_whitelist_operation) { ++ # read the config! ++ $spamtest->init (1); ++ + if ($opt{'add-to-whitelist'}) { + $spamtest->add_all_addresses_to_whitelist ($mail); + } elsif ($opt{'remove-from-whitelist'}) { + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + + diff --git a/Ch3/datasets/spam/easy_ham/01516.c4f43cc7b838c86bae2005e25850f08b b/Ch3/datasets/spam/easy_ham/01516.c4f43cc7b838c86bae2005e25850f08b new file mode 100644 index 000000000..d0be7ff22 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01516.c4f43cc7b838c86bae2005e25850f08b @@ -0,0 +1,103 @@ +From spamassassin-commits-admin@lists.sourceforge.net Wed Oct 2 16:02:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E413116F6A + for ; Wed, 2 Oct 2002 16:01:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 16:01:13 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g92DNLK10396 for ; Wed, 2 Oct 2002 14:23:21 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17wjTo-0000T2-00; Wed, + 02 Oct 2002 06:23:56 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17wjQZ-0006N4-00 for ; + Wed, 02 Oct 2002 06:20:35 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17wjQZ-000589-00 for + ; Wed, 02 Oct 2002 06:20:35 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17wjQZ-0001AP-00 for + ; Wed, 02 Oct 2002 06:20:35 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin/rules 50_scores.cf,1.226,1.227 + 60_whitelist.cf,1.31,1.32 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 02 Oct 2002 06:20:35 -0700 +Date: Wed, 02 Oct 2002 06:20:35 -0700 + +Update of /cvsroot/spamassassin/spamassassin/rules +In directory usw-pr-cvs1:/tmp/cvs-serv4429/rules + +Modified Files: + 50_scores.cf 60_whitelist.cf +Log Message: +fixed bug 1033: -R and -W were not respecting auto_whitelist_path + +Index: 50_scores.cf +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/rules/50_scores.cf,v +retrieving revision 1.226 +retrieving revision 1.227 +diff -b -w -u -d -r1.226 -r1.227 +--- 50_scores.cf 1 Oct 2002 09:53:43 -0000 1.226 ++++ 50_scores.cf 2 Oct 2002 13:20:32 -0000 1.227 +@@ -611,7 +611,7 @@ + score PORN_GALLERIES 1.000 + score RATWARE_LC_OUTLOOK 1.000 + score SHORT_RECEIVED_LINE 4.300 +-score SAFEGUARD_NOTICE -3.300 ++score SAFEGUARD_NOTICE 3.300 + score MAILMAN_CONFIRM -1.000 + score SIGNIFICANT 1.000 + score RATWARE_DIFFOND 2.200 + +Index: 60_whitelist.cf +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/rules/60_whitelist.cf,v +retrieving revision 1.31 +retrieving revision 1.32 +diff -b -w -u -d -r1.31 -r1.32 +--- 60_whitelist.cf 11 Sep 2002 21:31:35 -0000 1.31 ++++ 60_whitelist.cf 2 Oct 2002 13:20:33 -0000 1.32 +@@ -65,3 +65,4 @@ + + # Friends re-united (popular UK old-school-network) + whitelist_from_rcvd *@friendsreunited.co.uk friendsreunited.co.uk ++ + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + + diff --git a/Ch3/datasets/spam/easy_ham/01517.254d90491f1660ec23989b4bfc90d2ec b/Ch3/datasets/spam/easy_ham/01517.254d90491f1660ec23989b4bfc90d2ec new file mode 100644 index 000000000..93ad7a939 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01517.254d90491f1660ec23989b4bfc90d2ec @@ -0,0 +1,154 @@ +From spamassassin-commits-admin@lists.sourceforge.net Wed Oct 2 16:02:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9E87616F71 + for ; Wed, 2 Oct 2002 16:01:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 02 Oct 2002 16:01:16 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g92DNKK10395 for ; Wed, 2 Oct 2002 14:23:21 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17wjTo-0000TO-00; Wed, + 02 Oct 2002 06:23:56 -0700 +Received: from usw-sf-sshgate.sourceforge.net ([216.136.171.253] + helo=usw-sf-netmisc.sourceforge.net) by usw-sf-list1.sourceforge.net with + esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17wjQZ-0006N6-00 for ; + Wed, 02 Oct 2002 06:20:35 -0700 +Received: from usw-pr-cvs1-b.sourceforge.net ([10.5.1.7] + helo=usw-pr-cvs1.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17wjQZ-00058D-00 for + ; Wed, 02 Oct 2002 06:20:35 + -0700 +Received: from yyyyason by usw-pr-cvs1.sourceforge.net with local (Exim 3.22 + #1 (Debian)) id 17wjQZ-0001AW-00 for + ; Wed, 02 Oct 2002 06:20:35 + -0700 +To: spamassassin-commits@example.sourceforge.net +Message-Id: +From: Justin Mason +Subject: [SACVS] CVS: spamassassin/t db_based_whitelist.t,1.7,1.8 + db_based_whitelist_ips.t,1.2,1.3 +Sender: spamassassin-commits-admin@example.sourceforge.net +Errors-To: spamassassin-commits-admin@example.sourceforge.net +X-Beenthere: spamassassin-commits@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 02 Oct 2002 06:20:35 -0700 +Date: Wed, 02 Oct 2002 06:20:35 -0700 + +Update of /cvsroot/spamassassin/spamassassin/t +In directory usw-pr-cvs1:/tmp/cvs-serv4429/t + +Modified Files: + db_based_whitelist.t db_based_whitelist_ips.t +Log Message: +fixed bug 1033: -R and -W were not respecting auto_whitelist_path + +Index: db_based_whitelist.t +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/t/db_based_whitelist.t,v +retrieving revision 1.7 +retrieving revision 1.8 +diff -b -w -u -d -r1.7 -r1.8 +--- db_based_whitelist.t 26 Sep 2002 17:15:04 -0000 1.7 ++++ db_based_whitelist.t 2 Oct 2002 13:20:33 -0000 1.8 +@@ -2,7 +2,7 @@ + + use lib '.'; use lib 't'; + use SATest; sa_t_init("db_based_whitelist"); +-use Test; BEGIN { plan tests => 3 }; ++use Test; BEGIN { plan tests => 8 }; + + # --------------------------------------------------------------------------- + +@@ -16,17 +16,17 @@ + %patterns = %is_nonspam_patterns; + $scr_test_args = "-M Mail::SpamAssassin::DBBasedAddrList"; + +-sarun ("--remove-addr-from-whitelist whitelist_test\@whitelist.spamassassin.taint.org", \&patterns_run_cb); ++ok (sarun ("--remove-addr-from-whitelist whitelist_test\@whitelist.spamassassin.taint.org", \&patterns_run_cb)); + + # 3 times, to get into the whitelist: +-sarun ("-L -a -t < data/nice/002", \&patterns_run_cb); +-sarun ("-L -a -t < data/nice/002", \&patterns_run_cb); +-sarun ("-L -a -t < data/nice/002", \&patterns_run_cb); ++ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); ++ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); ++ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); + + # Now check + ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); + ok_all_patterns(); + + %patterns = %is_spam_patterns; +-sarun ("-L -a -t < data/spam/004", \&patterns_run_cb); ++ok (sarun ("-L -a -t < data/spam/004", \&patterns_run_cb)); + ok_all_patterns(); + +Index: db_based_whitelist_ips.t +=================================================================== +RCS file: /cvsroot/spamassassin/spamassassin/t/db_based_whitelist_ips.t,v +retrieving revision 1.2 +retrieving revision 1.3 +diff -b -w -u -d -r1.2 -r1.3 +--- db_based_whitelist_ips.t 26 Sep 2002 17:15:04 -0000 1.2 ++++ db_based_whitelist_ips.t 2 Oct 2002 13:20:33 -0000 1.3 +@@ -2,7 +2,7 @@ + + use lib '.'; use lib 't'; + use SATest; sa_t_init("db_based_whitelist_ips"); +-use Test; BEGIN { plan tests => 3 }; ++use Test; BEGIN { plan tests => 8 }; + + # --------------------------------------------------------------------------- + +@@ -15,18 +15,18 @@ + + %patterns = %is_nonspam_patterns; + +-sarun ("--remove-addr-from-whitelist whitelist_test\@whitelist.spamassassin.taint.org", \&patterns_run_cb); ++ok (sarun ("--remove-addr-from-whitelist whitelist_test\@whitelist.spamassassin.taint.org", \&patterns_run_cb)); + + # 3 times, to get into the whitelist: +-sarun ("-L -a -t < data/nice/002", \&patterns_run_cb); +-sarun ("-L -a -t < data/nice/002", \&patterns_run_cb); +-sarun ("-L -a -t < data/nice/002", \&patterns_run_cb); ++ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); ++ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); ++ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); + + # Now check + ok (sarun ("-L -a -t < data/nice/002", \&patterns_run_cb)); + ok_all_patterns(); + + %patterns = %is_spam_patterns; +-sarun ("-L -a -t < data/spam/007", \&patterns_run_cb); ++ok (sarun ("-L -a -t < data/spam/007", \&patterns_run_cb)); + ok_all_patterns(); + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-commits mailing list +Spamassassin-commits@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-commits + + diff --git a/Ch3/datasets/spam/easy_ham/01518.cc9c410a551f14cd20f150b73d226353 b/Ch3/datasets/spam/easy_ham/01518.cc9c410a551f14cd20f150b73d226353 new file mode 100644 index 000000000..b12650f92 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01518.cc9c410a551f14cd20f150b73d226353 @@ -0,0 +1,99 @@ +From spamassassin-talk-admin@lists.sourceforge.net Fri Oct 4 11:07:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2F97F16F1C + for ; Fri, 4 Oct 2002 11:04:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:04:03 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g93KOEK13766 for ; Thu, 3 Oct 2002 21:24:14 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xCVx-0000UX-00; Thu, + 03 Oct 2002 13:24:05 -0700 +Received: from relay07.indigo.ie ([194.125.133.231]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17xCV8-0004Tu-00 for ; + Thu, 03 Oct 2002 13:23:14 -0700 +Received: (qmail 85140 messnum 1024118 invoked from + network[194.125.173.131/ts13-131.dublin.indigo.ie]); 3 Oct 2002 20:23:11 + -0000 +Received: from ts13-131.dublin.indigo.ie (HELO spamassassin.taint.org) + (194.125.173.131) by relay07.indigo.ie (qp 85140) with SMTP; + 3 Oct 2002 20:23:11 -0000 +Received: by spamassassin.taint.org (Postfix, from userid 500) id C3E6C16F03; + Thu, 3 Oct 2002 21:23:09 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) by spamassassin.taint.org (Postfix) + with ESMTP id C0200F7B1; Thu, 3 Oct 2002 21:23:09 +0100 (IST) +To: "Malte S. Stretz" +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] 2.42: est release? +In-Reply-To: Message from + "Malte S. Stretz" + of + "Wed, 02 Oct 2002 20:31:49 +0200." + <200210022031.49748@malte.stretz.eu.org> +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20021003202309.C3E6C16F03@spamassassin.taint.org> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 03 Oct 2002 21:23:04 +0100 +Date: Thu, 03 Oct 2002 21:23:04 +0100 + + +Malte S. Stretz said: +> 1046 is fixed. But what about +> 1011 (add a notice about IRIX and -m to the docs), +> 1031 (cygwin's EXE_EXT), +> 1043 (a cosmetic but rather disturbing one ;-), + +all now fixed! + +> 1004 (TO_MALFORMED borken), + +WONTFIX ;) + +> 1006 (packaging related)? + +eh, will leave this for 2.50. ;) + +OK, if there's nothing moderately serious shown up tonight, I'll release +it tomorrow AM (GMT). + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01519.9b05511d9273ddffdbc1f45dd43fd9ee b/Ch3/datasets/spam/easy_ham/01519.9b05511d9273ddffdbc1f45dd43fd9ee new file mode 100644 index 000000000..2342e50aa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01519.9b05511d9273ddffdbc1f45dd43fd9ee @@ -0,0 +1,75 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Oct 4 11:07:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D5FE216F6D + for ; Fri, 4 Oct 2002 11:05:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:05:06 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g940XSK26519 for ; Fri, 4 Oct 2002 01:33:28 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xGJ9-00089k-00; Thu, + 03 Oct 2002 17:27:07 -0700 +Received: from cpe013060001360.cpe.net.cable.rogers.com ([24.102.84.250] + helo=green.daf.ddts.net) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17xGI4-0000jO-00 for + ; Thu, 03 Oct 2002 17:26:01 + -0700 +Received: from daf by green.daf.ddts.net with local (Exim 3.36 #1 + (Debian)) id 17xGI2-0002aT-00 for + ; Thu, 03 Oct 2002 20:25:58 + -0400 +From: Duncan Findlay +To: spamassassin-devel@example.sourceforge.net +Subject: Re: [SAdev] Re: Web subscription for spamassassin package +Message-Id: <20021004002558.GD9666@green.daf.ddts.net> +Mail-Followup-To: spamassassin-devel@example.sourceforge.net +References: + <20021003130229.6F0C716F16@jmason.org> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <20021003130229.6F0C716F16@spamassassin.taint.org> +User-Agent: Mutt/1.4i +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 20:25:58 -0400 +Date: Thu, 3 Oct 2002 20:25:58 -0400 + +> eh? any reason why? wasn't causing any trouble for me, and +> seems like a good idea. + +Because every time someone submitted a bug, they'd get a response +saying "Message is held for moderator because of implicit message +destination" or something like that. It annoyed users, it annoyed me, +and Justin, you never actually got around to accepting the messages :-) + +-- +Duncan Findlay + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01520.2a29e50286ea0bc939e9fb4c9cc13a50 b/Ch3/datasets/spam/easy_ham/01520.2a29e50286ea0bc939e9fb4c9cc13a50 new file mode 100644 index 000000000..c1dc40b4e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01520.2a29e50286ea0bc939e9fb4c9cc13a50 @@ -0,0 +1,80 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Oct 4 11:07:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C9C1116F1E + for ; Fri, 4 Oct 2002 11:04:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:04:05 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g93KSoK13843 for ; Thu, 3 Oct 2002 21:28:50 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xCYq-0000ra-00; Thu, + 03 Oct 2002 13:27:04 -0700 +Received: from smtp6.mindspring.com ([207.69.200.110]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17xCY1-0004tZ-00 for ; + Thu, 03 Oct 2002 13:26:13 -0700 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by smtp6.mindspring.com with esmtp + (Exim 3.33 #1) id 17xCXw-0008RO-00 for + spamassassin-devel@lists.sourceforge.net; Thu, 03 Oct 2002 16:26:08 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 0BE97A877E; Thu, 3 Oct 2002 13:26:08 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20021003202608.0BE97A877E@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 1049] Pathname for "triplets.txt" is incorrect. +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 13:26:08 -0700 (PDT) +Date: Thu, 3 Oct 2002 13:26:08 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=1049 + +felicity@kluge.net changed: + + What |Removed |Added +---------------------------------------------------------------------------- + Status|NEW |RESOLVED + Resolution| |FIXED + + + +------- Additional Comments From felicity@kluge.net 2002-10-03 13:26 ------- +Hmmm, my last message doesn't seem to have made it into bugzilla yet. + +I've committed a patch to fix this problem in both HEAD and b2_4_0. The last +message explains what the problem was and what the patch does to fix it. + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01521.ab51de7c30aa23d361c81b99cfb55d3a b/Ch3/datasets/spam/easy_ham/01521.ab51de7c30aa23d361c81b99cfb55d3a new file mode 100644 index 000000000..a6230aab5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01521.ab51de7c30aa23d361c81b99cfb55d3a @@ -0,0 +1,92 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Oct 4 11:07:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3C46C16F7B + for ; Fri, 4 Oct 2002 11:04:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:04:11 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g93KYxK14047 for ; Thu, 3 Oct 2002 21:34:59 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xCbm-0001TP-00; Thu, + 03 Oct 2002 13:30:06 -0700 +Received: from maynard.mail.mindspring.net ([207.69.200.243]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17xCbg-0005UN-00 for ; + Thu, 03 Oct 2002 13:30:00 -0700 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by maynard.mail.mindspring.net with + esmtp (Exim 3.33 #1) id 17xCbe-0005Z9-00 for + spamassassin-devel@lists.sourceforge.net; Thu, 03 Oct 2002 16:29:58 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 0F304A877E; Thu, 3 Oct 2002 13:29:58 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20021003202958.0F304A877E@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 1006] Spamassassin's build process makes packaging + unnecessarily difficult +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 13:29:58 -0700 (PDT) +Date: Thu, 3 Oct 2002 13:29:58 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=1006 + +jm@jmason.org changed: + + What |Removed |Added +---------------------------------------------------------------------------- + Status|NEW |ASSIGNED + + + +------- Additional Comments From jm@jmason.org 2002-10-03 13:29 ------- +1. Use of $Config is gradually being removed, thankfully. I don't want +to see any of that stuff in there if it acn be avoided, as different +perl versions jsut vary so much in that stuff. + +2. perl has no concept of where the rules could be -- unless they're in +the perl libdir (/usr/lib/perl5/site_perl/5.x.x/foo). Perl does not +know about the existence of /usr/share or /etc. Used to use /usr/lib/perl5 +for storing rules, and it was actually *much worse* than it is now. So +we need an out-of-band way to tell SA where to find this stuff. that's +the problem! + +3. try "perl Makefile.PL < /dev/null" to allow bots to build it. + +I think I might be missing some details of what you're peeved about, +though... could you elaborate specifically? + + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01522.399f9b55d65180631a94a13de6048244 b/Ch3/datasets/spam/easy_ham/01522.399f9b55d65180631a94a13de6048244 new file mode 100644 index 000000000..718f33447 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01522.399f9b55d65180631a94a13de6048244 @@ -0,0 +1,125 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Oct 4 11:07:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EE5E516F7C + for ; Fri, 4 Oct 2002 11:04:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:04:14 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g93KwcK14628 for ; Thu, 3 Oct 2002 21:58:38 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xD2r-0006C9-00; Thu, + 03 Oct 2002 13:58:05 -0700 +Received: from barry.mail.mindspring.net ([207.69.200.25]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17xD1x-0002DN-00 for ; + Thu, 03 Oct 2002 13:57:09 -0700 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by barry.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17xD1u-0001dQ-00 for + spamassassin-devel@lists.sourceforge.net; Thu, 03 Oct 2002 16:57:06 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 9BEC9A37B9; Thu, 3 Oct 2002 13:57:05 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: CC +Message-Id: <20021003205705.9BEC9A37B9@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 1046] Errors from 'perl Makefile.PL' +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 13:57:05 -0700 (PDT) +Date: Thu, 3 Oct 2002 13:57:05 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=1046 + + + + + +------- Additional Comments From spamassassin-contrib@msquadrat.de 2002-10-03 13:57 ------- +> I've thought about this and PM_FILTER needs to die. I've now tried +> multiple ways to make it just transparently work on 5.00503 and failed. +> If anyone has any bright ideas please jump in. +> +> You see anyone upgrading from the CPAN shell will get a failure on the line: +> +> use ExtUtils::MakeMaker 5.45; + +Quite some modules from CPAN do have a line like this nowadays (I think or +read so somewhere, respectively). And the Perl error message is very clear: +"ExtUtils::MakeMaker version 5.45 required--this is only version 5.4302 at +Makefile.PL line 2." + +> Because it never gets chance to reach a "WriteMakefile" line with a +> PREREQ_PM => { ExtUtils::MakeMaker => 5.45 } option. So the CPAN shell +> can't automatically upgrade this module. I cannot think of any way +> around this. + +I could think of a solution: We could remove the "use" line and add the +version to PREREQ_PM. After WriteMakefile() we could add the lines + require ExtUtils::MakeMaker; + ExtUtils::MakeMaker->VERSION(5.45); +to do per hand what 'use ExtUtils::MakeMaker 5.45' does automagically; `perl +Makefile.PL` will die with a "Uncaught exception from user code: +ExtUtils::MakeMaker version 5.45 required--this is only version 5.4302 at +Makefile.PL line 103." there but we've got a Makefile. But I don't know if +CPAN will run the make anyway... + +> To add insult to injury, the PM_FILTER part gets run during pm_to_blib, +> which would be fine, except ExtUtils::MakeMaker doesn't let you write a +> MY::pm_to_blib - it's non-overridable! So even though we could +> potentially copy the 5.45 ExtUtils::Install::pm_to_blib code somewhere +> into the spamassassin codebase (I tried that first), we can't cause the +> Makefile to call our code :-( + +We could call the preprocessor on install time. That's not a very clean +approach but could work. + +We can also overwrite pm_to_blib in the Makefile directly per postamble. We +already have a useless line "pm_to_blib: spamassassin doc/.made" there. Adding +some commands in this section gives some make warnings ("Makefile:933: +warning: overriding commands for target `pm_to_blib' Makefile:877: warning: +ignoring old commands for target `pm_to_blib'") but does work. Not a very good +solution either. + +> So I'm *strongly* against the current use of ExtUtils::MakeMaker 5.45 +> usage (if this were an Apache project this would be my veto vote), and +> really hope we can find another way. + +The "use MakeMaker::..." error message is IMHO quite clear, so I think it's ok +to require the user to do a manual update of ExtUtils::MakeMaker before the SA +installation. But that's just my opinion ;-) + +I'll ask on makemaker@perl.org for the best solution. They should know. + + + +------- You are receiving this mail because: ------- +You are on the CC list for the bug, or are watching someone who is. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01523.bdb6a45d09498aa3d8328161459adb26 b/Ch3/datasets/spam/easy_ham/01523.bdb6a45d09498aa3d8328161459adb26 new file mode 100644 index 000000000..5218cb2e5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01523.bdb6a45d09498aa3d8328161459adb26 @@ -0,0 +1,74 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Oct 4 11:07:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1523216F7D + for ; Fri, 4 Oct 2002 11:04:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:04:17 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g93KwfK14634 for ; Thu, 3 Oct 2002 21:58:41 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xD2u-0006EO-00; Thu, + 03 Oct 2002 13:58:08 -0700 +Received: from smtp10.atl.mindspring.net ([207.69.200.246]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17xD2W-0002GR-00 for ; + Thu, 03 Oct 2002 13:57:44 -0700 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by smtp10.atl.mindspring.net with esmtp + (Exim 3.33 #1) id 17xD2U-00072h-00 for + spamassassin-devel@lists.sourceforge.net; Thu, 03 Oct 2002 16:57:42 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 3CDB7A8787; Thu, 3 Oct 2002 13:57:42 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20021003205742.3CDB7A8787@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 1006] Spamassassin's build process makes packaging + unnecessarily difficult +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 13:57:42 -0700 (PDT) +Date: Thu, 3 Oct 2002 13:57:42 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=1006 + + + + + +------- Additional Comments From spamassassin-contrib@msquadrat.de 2002-10-03 13:57 ------- +A solution could be the preprocessor in combination with PM_FILTER -- if we +get the ExtUtils::MakeMaker versioning stuff right (see bug 1046). + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01524.59942583cc58fa95ab7d333121598c2c b/Ch3/datasets/spam/easy_ham/01524.59942583cc58fa95ab7d333121598c2c new file mode 100644 index 000000000..a5a7d5c62 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01524.59942583cc58fa95ab7d333121598c2c @@ -0,0 +1,78 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Oct 4 11:07:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 45E8916F49 + for ; Fri, 4 Oct 2002 11:04:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:04:37 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g93LIcK15344 for ; Thu, 3 Oct 2002 22:18:38 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xDMC-0003Az-00; Thu, + 03 Oct 2002 14:18:04 -0700 +Received: from barry.mail.mindspring.net ([207.69.200.25]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17xDLC-00059f-00 for ; + Thu, 03 Oct 2002 14:17:02 -0700 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by barry.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17xDL8-00050u-00 for + spamassassin-devel@lists.sourceforge.net; Thu, 03 Oct 2002 17:16:58 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 0D5A8A87E2; Thu, 3 Oct 2002 14:16:57 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20021003211657.0D5A8A87E2@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 960] COMMENT low-performing rule pruned +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 14:16:57 -0700 (PDT) +Date: Thu, 3 Oct 2002 14:16:57 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=960 + +spamassassin-contrib@msquadrat.de changed: + + What |Removed |Added +---------------------------------------------------------------------------- + Status|NEW |RESOLVED + Resolution| |WONTFIX + + + +------- Additional Comments From spamassassin-contrib@msquadrat.de 2002-10-03 14:16 ------- +I think it's ok to close this one? Comment is a valid, albeit seldom used RFC +2822 header... + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01525.fb1d9c8b16b705c53e4cbaf0c1658767 b/Ch3/datasets/spam/easy_ham/01525.fb1d9c8b16b705c53e4cbaf0c1658767 new file mode 100644 index 000000000..e49454742 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01525.fb1d9c8b16b705c53e4cbaf0c1658767 @@ -0,0 +1,77 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Oct 4 11:07:21 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 967AE16F20 + for ; Fri, 4 Oct 2002 11:04:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:04:42 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g93LLmK15443 for ; Thu, 3 Oct 2002 22:21:48 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xDMI-0003ET-00; Thu, + 03 Oct 2002 14:18:10 -0700 +Received: from tisch.mail.mindspring.net ([207.69.200.157]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17xDLn-0005Ux-00 for ; + Thu, 03 Oct 2002 14:17:39 -0700 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by tisch.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17xDLk-00050L-00 for + spamassassin-devel@lists.sourceforge.net; Thu, 03 Oct 2002 17:17:37 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + B2950A87E2; Thu, 3 Oct 2002 14:17:36 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20021003211736.B2950A87E2@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 739] rules broken: RATWARE_* +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 14:17:36 -0700 (PDT) +Date: Thu, 3 Oct 2002 14:17:36 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=739 + +spamassassin-contrib@msquadrat.de changed: + + What |Removed |Added +---------------------------------------------------------------------------- + Status|NEW |RESOLVED + Resolution| |WONTFIX + + + +------- Additional Comments From spamassassin-contrib@msquadrat.de 2002-10-03 14:17 ------- +Relieving Dan ;-) + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01526.c30529e56e1407674dfcb3f7080ec91b b/Ch3/datasets/spam/easy_ham/01526.c30529e56e1407674dfcb3f7080ec91b new file mode 100644 index 000000000..7c4114fd9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01526.c30529e56e1407674dfcb3f7080ec91b @@ -0,0 +1,77 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Oct 4 11:07:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EAD4A16F69 + for ; Fri, 4 Oct 2002 11:04:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:04:44 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g93LMlK15600 for ; Thu, 3 Oct 2002 22:22:47 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xDQC-0004OH-00; Thu, + 03 Oct 2002 14:22:12 -0700 +Received: from maynard.mail.mindspring.net ([207.69.200.243]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17xDPv-0008GO-00 for ; + Thu, 03 Oct 2002 14:21:55 -0700 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by maynard.mail.mindspring.net with + esmtp (Exim 3.33 #1) id 17xDPu-0007Xk-00 for + spamassassin-devel@lists.sourceforge.net; Thu, 03 Oct 2002 17:21:54 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 87EB0A87E2; Thu, 3 Oct 2002 14:21:53 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20021003212153.87EB0A87E2@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 779] rule broken: CORRUPT_MSGID +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 14:21:53 -0700 (PDT) +Date: Thu, 3 Oct 2002 14:21:53 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=779 + +spamassassin-contrib@msquadrat.de changed: + + What |Removed |Added +---------------------------------------------------------------------------- + Status|NEW |RESOLVED + Resolution| |FIXED + + + +------- Additional Comments From spamassassin-contrib@msquadrat.de 2002-10-03 14:21 ------- +I think INVALID_MSGID does what this rule was supposed to do + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01527.81281cede1b20e6bbfd9f53ee846f815 b/Ch3/datasets/spam/easy_ham/01527.81281cede1b20e6bbfd9f53ee846f815 new file mode 100644 index 000000000..537df3723 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01527.81281cede1b20e6bbfd9f53ee846f815 @@ -0,0 +1,91 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Oct 4 11:07:33 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2B16316F67 + for ; Fri, 4 Oct 2002 11:05:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:05:00 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g93NIXK19983 for ; Fri, 4 Oct 2002 00:18:33 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xFEO-0002TD-00; Thu, + 03 Oct 2002 16:18:08 -0700 +Received: from hall.mail.mindspring.net ([207.69.200.60]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17xFDa-00063W-00 for ; + Thu, 03 Oct 2002 16:17:18 -0700 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by hall.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17xFDZ-0003oA-00 for + spamassassin-devel@lists.sourceforge.net; Thu, 03 Oct 2002 19:17:17 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 5708CA879B; Thu, 3 Oct 2002 16:17:16 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20021003231716.5708CA879B@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 1052] New: bondedsender.com is a scam +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 16:17:16 -0700 (PDT) +Date: Thu, 3 Oct 2002 16:17:16 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=1052 + + Summary: bondedsender.com is a scam + Product: Spamassassin + Version: unspecified + Platform: Other + URL: http://www.bondedsender.com/ + OS/Version: other + Status: NEW + Severity: normal + Priority: P2 + Component: Rules + AssignedTo: spamassassin-devel@example.sourceforge.net + ReportedBy: friedman+spamassassin@splode.com + + +The default score for bondedsender-certified domains is -10, but I do not +believe they should be trusted and encourage you to change the default. + +* I have been spammed by their customers. +* There is no documentation on their website about how I can complain about + this and have their customers financially penalized for sending me unsolicited + mail. +* What proof do any of us have that they really even do anything about it? + Their contract is with their customers, not with us. + +This is a scam! Don't trust them! + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01528.09b67e7e14a95859ee6353702058323c b/Ch3/datasets/spam/easy_ham/01528.09b67e7e14a95859ee6353702058323c new file mode 100644 index 000000000..652291c57 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01528.09b67e7e14a95859ee6353702058323c @@ -0,0 +1,74 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Oct 4 11:07:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 214CB16F6E + for ; Fri, 4 Oct 2002 11:05:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:05:29 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g941r7K30125 for ; Fri, 4 Oct 2002 02:53:08 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xHdM-0000p6-00; Thu, + 03 Oct 2002 18:52:04 -0700 +Received: from barry.mail.mindspring.net ([207.69.200.25]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17xHcg-0001nS-00 for ; + Thu, 03 Oct 2002 18:51:23 -0700 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by barry.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17xHcf-0005Yr-00 for + spamassassin-devel@lists.sourceforge.net; Thu, 03 Oct 2002 21:51:21 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + C89A0A87F0; Thu, 3 Oct 2002 18:51:19 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20021004015119.C89A0A87F0@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 1052] bondedsender.com is a scam +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 18:51:19 -0700 (PDT) +Date: Thu, 3 Oct 2002 18:51:19 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=1052 + + + + + +------- Additional Comments From rOD-spamassassin@arsecandle.org 2002-10-03 18:51 ------- +Ignoring the conspiracy theories, can you supply examples of spam which was +scored with RCVD_IN_BONDEDSENDER? The only mail I have received which scored +this were from Amazon.com. + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01529.a34b955e2414056d9d41b48c95f7f15e b/Ch3/datasets/spam/easy_ham/01529.a34b955e2414056d9d41b48c95f7f15e new file mode 100644 index 000000000..2e79db4ce --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01529.a34b955e2414056d9d41b48c95f7f15e @@ -0,0 +1,184 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Oct 4 11:08:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BFF9F16F8B + for ; Fri, 4 Oct 2002 11:05:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:05:47 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g944iBK03577 for ; Fri, 4 Oct 2002 05:44:11 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xKE1-00085D-00; Thu, + 03 Oct 2002 21:38:06 -0700 +Received: from hall.mail.mindspring.net ([207.69.200.60]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17xKDi-0005dW-00 for ; + Thu, 03 Oct 2002 21:37:46 -0700 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by hall.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17xKDf-0004gz-00 for + spamassassin-devel@lists.sourceforge.net; Fri, 04 Oct 2002 00:37:43 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 7FD7BA87DB; Thu, 3 Oct 2002 21:37:42 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20021004043742.7FD7BA87DB@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 1053] New: IMG tag based rules +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 21:37:42 -0700 (PDT) +Date: Thu, 3 Oct 2002 21:37:42 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=1053 + + Summary: IMG tag based rules + Product: Spamassassin + Version: unspecified + Platform: Other + OS/Version: other + Status: NEW + Severity: enhancement + Priority: P2 + Component: Eval Tests + AssignedTo: spamassassin-devel@example.sourceforge.net + ReportedBy: matt@nightrealms.com + + +Inspired by complaints about all-image or mostly-image spam that's +getting by SA, I've cooked up three sets of rules that analyze the use +of IMG tags in HTML: one that looks at the total area of all of the +images in the message (T_HTML_IMAGE_AREA*), one that looks at the +total number of images in the message (T_HTML_NUM_IMGS*), and one that +looks at the longest total run of consecutive images +(T_HTML_CONSEC_IMG*). + +=============== + +The total area of all images is rather easy to compute: inside of +HTML::html_tests(), if an IMG tag has both the width and height +properties, then multiply them together and add the result to the +running total. + +OVERALL% SPAM% NONSPAM% S/O RANK SCORE NAME + 15113 4797 10316 0.32 0.00 0.00 (all messages) +100.000 31.741 68.259 0.32 0.00 0.00 (all messages as %) + 0.635 2.001 0.000 1.00 0.81 0.01 T_HTML_IMAGE_AREA14 + 0.417 1.313 0.000 1.00 0.78 0.01 T_HTML_IMAGE_AREA15 + 0.331 1.042 0.000 1.00 0.76 0.01 T_HTML_IMAGE_AREA07 + 0.245 0.771 0.000 1.00 0.74 0.01 T_HTML_IMAGE_AREA10 + 0.238 0.750 0.000 1.00 0.74 0.01 T_HTML_IMAGE_AREA02 + 0.225 0.709 0.000 1.00 0.74 0.01 T_HTML_IMAGE_AREA16 + 0.126 0.396 0.000 1.00 0.70 0.01 T_HTML_IMAGE_AREA18 + 0.119 0.375 0.000 1.00 0.70 0.01 T_HTML_IMAGE_AREA19 + 0.119 0.375 0.000 1.00 0.70 0.01 T_HTML_IMAGE_AREA17 + 1.125 3.523 0.010 1.00 0.68 0.01 T_HTML_IMAGE_AREA12 + 0.741 2.314 0.010 1.00 0.65 0.01 T_HTML_IMAGE_AREA13 + 1.542 4.732 0.058 0.99 0.58 0.01 T_HTML_IMAGE_AREA11 + 0.139 0.417 0.010 0.98 0.54 0.01 T_HTML_IMAGE_AREA08 + 0.483 1.397 0.058 0.96 0.50 0.01 T_HTML_IMAGE_AREA03 + 0.192 0.500 0.048 0.91 0.44 0.01 T_HTML_IMAGE_AREA06 + 0.820 1.834 0.349 0.84 0.39 0.01 T_HTML_IMAGE_AREA04 + 0.946 2.022 0.446 0.82 0.38 0.01 T_HTML_IMAGE_AREA01 + 0.569 0.896 0.417 0.68 0.32 0.01 T_HTML_IMAGE_AREA05 + 6.498 0.500 9.287 0.05 0.02 0.01 T_HTML_IMAGE_AREA09 + +Spam % of all rules with S/0 > 0.90: 20.615% + +============================= + +The total number of IMG tags is really easy to do. + + 0.648 2.043 0.000 1.00 0.81 0.01 T_HTML_NUM_IMGS08 + 0.609 1.918 0.000 1.00 0.80 0.01 T_HTML_NUM_IMGS09 + 0.490 1.543 0.000 1.00 0.79 0.01 T_HTML_NUM_IMGS10 + 0.119 0.375 0.000 1.00 0.70 0.01 T_HTML_NUM_IMGS14 + 0.986 3.064 0.019 0.99 0.63 0.01 T_HTML_NUM_IMGS06 + 2.303 7.150 0.048 0.99 0.62 0.01 T_HTML_NUM_IMGS11 + 0.033 0.104 0.000 1.00 0.61 0.01 T_HTML_NUM_IMGS17 + 0.787 2.439 0.019 0.99 0.61 0.01 T_HTML_NUM_IMGS12 + 0.344 1.063 0.010 0.99 0.60 0.01 T_HTML_NUM_IMGS13 + 0.020 0.063 0.000 1.00 0.58 0.01 T_HTML_NUM_IMGS20 + 0.020 0.063 0.000 1.00 0.58 0.01 T_HTML_NUM_IMGS16 + 0.860 2.627 0.039 0.99 0.57 0.01 T_HTML_NUM_IMGS05 + 0.754 2.293 0.039 0.98 0.56 0.01 T_HTML_NUM_IMGS07 + 0.013 0.042 0.000 1.00 0.55 0.01 T_HTML_NUM_IMGS18 + 0.887 2.627 0.078 0.97 0.52 0.01 T_HTML_NUM_IMGS04 + 1.356 3.711 0.262 0.93 0.47 0.01 T_HTML_NUM_IMGS03 + 0.046 0.125 0.010 0.93 0.46 0.01 T_HTML_NUM_IMGS15 + 6.061 10.256 4.110 0.71 0.34 0.01 T_HTML_NUM_IMGS01 + 0.040 0.063 0.029 0.68 0.32 0.01 T_HTML_NUM_IMGS19 + 6.233 4.753 6.921 0.41 0.22 0.01 T_HTML_NUM_IMGS02 + +Spam % of all rules with S/O > 0.90: 31.25% + +========================= + +I figured that spam that is made up of only images is going to only +have IMG tags interspersed with table, paragraph and linebreak tags, +and some whitespace, so there would be a lot of IMG tags with no plain +text (non-whitespace) between them. So I defined consecutive IMG tags +to be ones with no text between them, and looked at the longest run of +consecutive IMGs within a message. + +This one seems to do pretty good, because in my non-spam corpus +there's only a handful of messages with IMG runs larger than two. + + 0.450 1.418 0.000 1.00 0.78 0.01 T_HTML_CONSEC_IMGS06 + 0.232 0.730 0.000 1.00 0.74 0.01 T_HTML_CONSEC_IMGS08 + 0.205 0.646 0.000 1.00 0.73 0.01 T_HTML_CONSEC_IMGS11 + 1.813 5.691 0.010 1.00 0.71 0.01 T_HTML_CONSEC_IMGS02 + 1.019 3.189 0.010 1.00 0.67 0.01 T_HTML_CONSEC_IMGS03 + 0.768 2.397 0.010 1.00 0.66 0.01 T_HTML_CONSEC_IMGS05 + 0.053 0.167 0.000 1.00 0.64 0.01 T_HTML_CONSEC_IMGS12 + 1.006 3.127 0.019 0.99 0.63 0.01 T_HTML_CONSEC_IMGS04 + 0.483 1.501 0.010 0.99 0.62 0.01 T_HTML_CONSEC_IMGS07 + 0.020 0.063 0.000 1.00 0.58 0.01 T_HTML_CONSEC_IMGS13 + 0.020 0.063 0.000 1.00 0.58 0.01 T_HTML_CONSEC_IMGS15 + 1.032 3.148 0.048 0.98 0.57 0.01 T_HTML_CONSEC_IMGS10 + 0.199 0.605 0.010 0.98 0.57 0.01 T_HTML_CONSEC_IMGS09 + 0.013 0.042 0.000 1.00 0.55 0.01 T_HTML_CONSEC_IMGS17 + 0.013 0.042 0.000 1.00 0.55 0.01 T_HTML_CONSEC_IMGS19 + 0.007 0.021 0.000 1.00 0.51 0.01 T_HTML_CONSEC_IMGS14 + 7.080 7.484 6.892 0.52 0.26 0.01 T_HTML_CONSEC_IMGS01 + 0.000 0.000 0.000 0.00 0.00 0.01 T_HTML_CONSEC_IMGS16 + 0.000 0.000 0.000 0.00 0.00 0.01 T_HTML_CONSEC_IMGS18 + +Spam % of all rules with S/O > 0.90: 22.85% + +========================== + +Next I'm going to see if there's any meta rules I can make that will +reduce the FP rate for low S/O rules. + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01530.a942433d8d15aa78b6dbee89bf0f09d8 b/Ch3/datasets/spam/easy_ham/01530.a942433d8d15aa78b6dbee89bf0f09d8 new file mode 100644 index 000000000..da08026a1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01530.a942433d8d15aa78b6dbee89bf0f09d8 @@ -0,0 +1,75 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Oct 4 11:08:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 08EA116F71 + for ; Fri, 4 Oct 2002 11:05:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:05:51 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g944pCK03653 for ; Fri, 4 Oct 2002 05:51:12 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xKMj-0001bB-00; Thu, + 03 Oct 2002 21:47:05 -0700 +Received: from smtp6.mindspring.com ([207.69.200.110]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17xKML-0006l8-00 for ; + Thu, 03 Oct 2002 21:46:41 -0700 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by smtp6.mindspring.com with esmtp + (Exim 3.33 #1) id 17xKMJ-000880-00 for + spamassassin-devel@lists.sourceforge.net; Fri, 04 Oct 2002 00:46:39 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + DD4D7A87DB; Thu, 3 Oct 2002 21:46:38 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20021004044638.DD4D7A87DB@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 1053] IMG tag based rules +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 21:46:38 -0700 (PDT) +Date: Thu, 3 Oct 2002 21:46:38 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=1053 + + + + + +------- Additional Comments From mgm@starlingtech.com 2002-10-03 21:46 ------- +Looks great! One note: most "image-only" spam actually has some text (a few +words at the top, a disclaimer at the end) so keep that in mind. The typical +image spam that slips through SA seems to have a bit of text, one huge image, +then a bit more. + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01531.b1009af0f58d3f0002fbcb3d95f6c1f1 b/Ch3/datasets/spam/easy_ham/01531.b1009af0f58d3f0002fbcb3d95f6c1f1 new file mode 100644 index 000000000..b6edd92ce --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01531.b1009af0f58d3f0002fbcb3d95f6c1f1 @@ -0,0 +1,109 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Oct 4 11:08:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D5F3316F73 + for ; Fri, 4 Oct 2002 11:05:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 04 Oct 2002 11:05:55 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g944tnK03832 for ; Fri, 4 Oct 2002 05:55:49 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xKUS-0003W7-00; Thu, + 03 Oct 2002 21:55:04 -0700 +Received: from smtp10.atl.mindspring.net ([207.69.200.246]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17xKTV-0000Pd-00 for ; + Thu, 03 Oct 2002 21:54:05 -0700 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by smtp10.atl.mindspring.net with esmtp + (Exim 3.33 #1) id 17xKTO-0006ze-00 for + spamassassin-devel@lists.sourceforge.net; Fri, 04 Oct 2002 00:53:59 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 92EA622876; Thu, 3 Oct 2002 21:51:06 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20021004045106.92EA622876@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 1054] New: Split up FROM_ENDS_IN_NUMS +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 21:51:06 -0700 (PDT) +Date: Thu, 3 Oct 2002 21:51:06 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=1054 + + Summary: Split up FROM_ENDS_IN_NUMS + Product: Spamassassin + Version: unspecified + Platform: Other + OS/Version: other + Status: NEW + Severity: enhancement + Priority: P2 + Component: Rules + AssignedTo: spamassassin-devel@example.sourceforge.net + ReportedBy: matt@nightrealms.com + + +The current FROM_ENDS_IN_NUMS triggers on any from where the user name ends +in two or more digits. I think this should be split up into different +numbers of trailing digits, so that rules with different S/O ratios can +get different scores. So I've made test rules that look from From +names that end with two, three, four, or five digitis, and one for six or +more digitis; I also put in a test rule that looks for Froms that end in a +single digit, just the sake of completeness. + +Here is what I got: + +OVERALL% SPAM% NONSPAM% S/O RANK SCORE NAME + 15113 4797 10316 0.32 0.00 0.00 (all messages) +100.000 31.741 68.259 0.32 0.00 0.00 (all messages as %) + 1.244 3.877 0.019 1.00 0.64 0.01 T_FROM_ENDS_IN_NUMS6 + 0.576 1.459 0.165 0.90 0.43 0.01 T_FROM_ENDS_IN_NUMS5 + 4.982 10.694 2.326 0.82 0.38 0.01 T_FROM_ENDS_IN_NUMS4 + 3.434 6.337 2.084 0.75 0.35 0.01 T_FROM_ENDS_IN_NUMS3 + 8.979 12.383 7.396 0.63 0.30 0.01 T_FROM_ENDS_IN_NUMS2 + 8.847 6.817 9.791 0.41 0.22 0.01 T_FROM_ENDS_IN_NUMS1 + +I should note that I get rather bad S/O's for FROM_ENDS_IN_NUMS, probably +because so much of my corpus is made up of Yahoo! Groups traffic, which +seems to have a lot of users that like sticking numbers at the ends of their +names. Here is the normal stats for FROM_ENDS_IN_NUMS: + + 7.024 28.480 2.834 0.91 0.50 0.88 FROM_ENDS_IN_NUMS + +and my stats: + + 19.228 34.793 11.991 0.74 0.35 0.88 FROM_ENDS_IN_NUMS + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01532.9baef6f6223b67dc9a0354edabd518d7 b/Ch3/datasets/spam/easy_ham/01532.9baef6f6223b67dc9a0354edabd518d7 new file mode 100644 index 000000000..d61f4a269 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01532.9baef6f6223b67dc9a0354edabd518d7 @@ -0,0 +1,66 @@ +From craig@hughes-family.org Sat Oct 5 12:38:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C055216F03 + for ; Sat, 5 Oct 2002 12:38:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 05 Oct 2002 12:38:04 +0100 (IST) +Received: from granger.mail.mindspring.net (granger.mail.mindspring.net + [207.69.200.148]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g958BfK03016 for ; Sat, 5 Oct 2002 09:11:41 +0100 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by granger.mail.mindspring.net with + esmtp (Exim 3.33 #1) id 17xk2y-0007R8-00; Sat, 05 Oct 2002 04:12:24 -0400 +Received: from belphegore.hughes-family.org (unknown [10.0.240.200]) + (using TLSv1 with cipher EDH-RSA-DES-CBC3-SHA (168/168 bits)) (No client + certificate requested) by belphegore.hughes-family.org (Postfix) with + ESMTP id 8BB783FDD; Sat, 5 Oct 2002 01:12:23 -0700 (PDT) +Date: Sat, 5 Oct 2002 01:12:23 -0700 (PDT) +From: Craig R Hughes +To: Daniel Quinlan +Cc: Justin Mason , + SpamAssassin Developers +Subject: Re: [SAdev] nightly mass-check and hit-frequencies +In-Reply-To: +Message-Id: +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII + +Daniel Quinlan wrote: + +DQ> jm@jmason.org (Justin Mason) writes: +DQ> +DQ> > But I think rsync is key; it's very efficient bandwidth-wise, and it +DQ> > allows you to select which ones you want just as well as wget would. +DQ> > (Bandwidth is a much bigger issue for me and some other of the europeans +DQ> > involved, than it would be for you guys ;) IMO it's by far the most +DQ> > efficient and scriptable way to do this stuff, these days. +DQ> +DQ> It must be horrible being a dial-up user in 2002. If we can *automate* +DQ> rsync submission with good *authentication*, it would be fine with me. +DQ> The current rsync method is not sufficiently authenticated, though. + +I'll take a look at it. I'm sure there's got to be some reasonly easy way to +have rsync carry itself over ssh and secure access using ssh keys. + +DQ> > I suggest we use the hughes-family.org server for rsyncing, as we do for +DQ> > the corpus_submit stuff -- in a separate subdirectory, though! -- then +DQ> > I'll take a look at getting a nightly hit-frequencies-collation system +DQ> > going. + +Ok, I'll take a look at it. + +C + + diff --git a/Ch3/datasets/spam/easy_ham/01533.9043f31a8168ff0742a99269f4628d2a b/Ch3/datasets/spam/easy_ham/01533.9043f31a8168ff0742a99269f4628d2a new file mode 100644 index 000000000..c74f78e39 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01533.9043f31a8168ff0742a99269f4628d2a @@ -0,0 +1,52 @@ +From jm@jmason.org Sat Oct 5 18:17:58 2002 +Return-Path: +Delivered-To: yyyy@spamassassin.taint.org +Received: by spamassassin.taint.org (Postfix, from userid 500) + id 6038A16F03; Sat, 5 Oct 2002 18:17:58 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) + by jmason.org (Postfix) with ESMTP + id 4CA2BF7B1; Sat, 5 Oct 2002 18:17:58 +0100 (IST) +To: Randy Bush +Cc: yyyy@spamassassin.taint.org (Justin Mason), + spamassassin list +Subject: Re: [SAtalk] razor2 auth? +In-Reply-To: Message from Randy Bush + of "Sat, 05 Oct 2002 09:16:29 PDT." +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Date: Sat, 05 Oct 2002 18:17:53 +0100 +Sender: yyyy@spamassassin.taint.org +Message-Id: <20021005171758.6038A16F03@spamassassin.taint.org> + + +Randy Bush said: + +> >> freebsd -stable +> >> spamassassin 2.41 +> >> spamasassin -r +> >> results in +> >> razor2 report failed: No such file or directory Razor2 reporting requires +> authentication at /usr/local/lib/perl5/site_perl/5.005/Mail/SpamAssassin/Repo +> rter.pm line 77. +> >> used to work until upgrade +> > +> > using spamd? try the -H switch. +> +> no, pipinng the message to "spamassassin -r" from within my mail +> user agent, VM under Emacs. + +oops, sorry -- didn't notice the "report" bit. Yes, you need to register +for Razor2 -- "razor-register" or "razor-admin -register" if I recall +correctly. + +--j. + diff --git a/Ch3/datasets/spam/easy_ham/01534.0af697b73ae39808dd4035294018be4d b/Ch3/datasets/spam/easy_ham/01534.0af697b73ae39808dd4035294018be4d new file mode 100644 index 000000000..f952b8f6c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01534.0af697b73ae39808dd4035294018be4d @@ -0,0 +1,63 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Oct 7 13:15:13 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D150A16F22 + for ; Mon, 7 Oct 2002 13:12:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 13:12:57 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g97BYYK29665 for ; Mon, 7 Oct 2002 12:34:34 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17yW4R-0004WO-00; Mon, + 07 Oct 2002 04:29:07 -0700 +Received: from zurich.ai.mit.edu ([18.43.0.244]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17yW4K-00072G-00 for + ; Mon, 07 Oct 2002 04:29:00 -0700 +Received: from nestle.ai.mit.edu (nestle.ai.mit.edu [18.43.0.45]) by + zurich.ai.mit.edu (8.12.3/8.12.3/Debian -4) with ESMTP id g97BSqJ0023380; + Mon, 7 Oct 2002 07:28:52 -0400 +Received: from dsaklad by nestle.ai.mit.edu with local (Exim 3.12 #1 + (Debian)) id 17yW4C-00077t-00; Mon, 07 Oct 2002 07:28:52 -0400 +From: Don Saklad +To: spamassassin-talk@example.sourceforge.net, + dsaklad@zurich.ai.mit.edu +Message-Id: +Subject: [SAtalk] emacs rmail How to sort subject lines and headers. +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 07 Oct 2002 07:28:52 -0400 +Date: Mon, 07 Oct 2002 07:28:52 -0400 + +In emacs rmail what varieties of different techniques are there for +sorting your favorite correspondents from the mix?... leaving the hundreds +of spam commercials. A filter for the campus computer system puts subject +lines and headers on many of the hundreds of spam commercials +with http://spamassassin.org + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01535.5820cd5a31671e561c20802d2e005914 b/Ch3/datasets/spam/easy_ham/01535.5820cd5a31671e561c20802d2e005914 new file mode 100644 index 000000000..23f9e838e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01535.5820cd5a31671e561c20802d2e005914 @@ -0,0 +1,96 @@ +From spamassassin-talk-admin@lists.sourceforge.net Mon Oct 7 20:37:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C8A0116F16 + for ; Mon, 7 Oct 2002 20:37:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 07 Oct 2002 20:37:14 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g97JJVK13715 for ; Mon, 7 Oct 2002 20:19:32 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17ydPJ-0000uV-00; Mon, + 07 Oct 2002 12:19:09 -0700 +Received: from relay05.indigo.ie ([194.125.133.229]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17ydOd-0007iV-00 for ; + Mon, 07 Oct 2002 12:18:27 -0700 +Received: (qmail 79119 messnum 1202246 invoked from + network[194.125.172.237/ts12-237.dublin.indigo.ie]); 7 Oct 2002 19:18:21 + -0000 +Received: from ts12-237.dublin.indigo.ie (HELO spamassassin.taint.org) + (194.125.172.237) by relay05.indigo.ie (qp 79119) with SMTP; + 7 Oct 2002 19:18:21 -0000 +Received: by spamassassin.taint.org (Postfix, from userid 500) id 18C6916F03; + Mon, 7 Oct 2002 20:18:20 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) by spamassassin.taint.org (Postfix) + with ESMTP id 152DCF7B1; Mon, 7 Oct 2002 20:18:20 +0100 (IST) +To: "Kenneth Nerhood" +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Re: AWL bug in 2.42? +In-Reply-To: Message from + "Kenneth Nerhood" + of + "Mon, 07 Oct 2002 14:54:11 EDT." + +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20021007191820.18C6916F03@spamassassin.taint.org> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 07 Oct 2002 20:18:15 +0100 +Date: Mon, 07 Oct 2002 20:18:15 +0100 + + +Kenneth Nerhood said: + +> I too am seeing very weird things with 2.42 and AWL. I installed a +> fresh system, and then ran a bunch of test spam through it (all from the +> same user). All messages should have scored over 15. The AWL kept +> adjusting them down so that after about 10 message I had a negative +> score. I'm using spamc/d. + +That's exactly what is intended; the idea is that legit senders who +habitually score just > 5, will eventually get out of "AWL hell" after +6-10 messages. + +Note that running a single spam through "spamassassin -a -t" *will* +eventually whitelist the spammer. but that's why the man page tells you +not to do it ;) + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01536.9182389be6cb243f644c8cb962a5679e b/Ch3/datasets/spam/easy_ham/01536.9182389be6cb243f644c8cb962a5679e new file mode 100644 index 000000000..46daaec8f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01536.9182389be6cb243f644c8cb962a5679e @@ -0,0 +1,68 @@ +From spamassassin-devel-admin@lists.sourceforge.net Thu Aug 22 16:06:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 6B14047C66 + for ; Thu, 22 Aug 2002 11:06:53 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 16:06:53 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MF4sZ11366 for ; Thu, 22 Aug 2002 16:04:54 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17htRL-0005ql-00; Thu, + 22 Aug 2002 08:00:03 -0700 +Received: from www.ctyme.com ([209.237.228.10] helo=darwin.ctyme.com) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17htQZ-0001jw-00 for + ; Thu, 22 Aug 2002 07:59:15 + -0700 +Received: from m206-56.dsl.tsoft.com ([198.144.206.56] helo=perkel.com) by + darwin.ctyme.com with asmtp (TLSv1:RC4-MD5:128) (Exim 3.35 #1) id + 17htRO-0003Mw-00 for spamassassin-devel@lists.sourceforge.net; + Thu, 22 Aug 2002 08:00:06 -0700 +Message-Id: <3D64FC22.4040409@perkel.com> +From: Marc Perkel +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.1b) + Gecko/20020721 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: spamassassin-devel@example.sourceforge.net +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Subject: [SAdev] Party in San Francisco tonight +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 07:58:42 -0700 +Date: Thu, 22 Aug 2002 07:58:42 -0700 + +I don't know how make of you are in the Bay Area but EFF is having a benifit +party ast the DNA Lounge in San Francisco tonight. Wil Weaton (Wesley Crussher +from star Trek TNG) will fight Barney the Dinasour. + +Come on by if you're not doing anything. + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01537.ded3233d7649ef141c30e4cc1349f790 b/Ch3/datasets/spam/easy_ham/01537.ded3233d7649ef141c30e4cc1349f790 new file mode 100644 index 000000000..d7a0596be --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01537.ded3233d7649ef141c30e4cc1349f790 @@ -0,0 +1,67 @@ +From craig@deersoft.com Fri Aug 23 11:03:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D5BBB44156 + for ; Fri, 23 Aug 2002 06:03:29 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:03:29 +0100 (IST) +Received: from hall.mail.mindspring.net (hall.mail.mindspring.net + [207.69.200.60]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MISAZ19627 for ; Thu, 22 Aug 2002 19:28:10 +0100 +Received: from user-105nd99.dialup.mindspring.com ([64.91.181.41] + helo=belphegore.hughes-family.org) by hall.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17hwgo-00049c-00; Thu, 22 Aug 2002 14:28:14 -0400 +Received: from balam.hughes-family.org + (adsl-67-118-234-50.dsl.pltn13.pacbell.net [67.118.234.50]) by + belphegore.hughes-family.org (Postfix) with ESMTP id 05665A3FD9; + Thu, 22 Aug 2002 11:28:12 -0700 (PDT) +Date: Thu, 22 Aug 2002 11:28:13 -0700 +Subject: Re: [SAdev] 2.40 RELEASE PROCESS: mass-check status, folks? +Content-Type: text/plain; charset=US-ASCII; format=flowed +MIME-Version: 1.0 (Apple Message framework v482) +Cc: "Malte S. Stretz" , + SpamAssassin-devel@lists.sourceforge.net, + SpamAssassin-talk@lists.sourceforge.net +To: yyyy@spamassassin.taint.org (Justin Mason) +From: "Craig R.Hughes" +In-Reply-To: <20020822172428.4FCCD43F99@phobos.labs.netnoteinc.com> +Message-Id: +Content-Transfer-Encoding: 7bit +X-Mailer: Apple Mail (2.482) + + +On Thursday, August 22, 2002, at 10:24 AM, Justin Mason wrote: + +> I plan to +> +> 1. figure out the freqs tonight, suggest what tests to drop +> 2. wait for comments +> 3. drop tests that nobody cares about tomorrow +> 4. sed out the dropped tests from the mass-check logs + +This step is unneccesary -- unless you've changed the scripts +much, any test in the logs which aren't in the rules files will +just be ignored I think. You do seem to have changed the +logs-to-c script and removed the bit where you could specify +immutable tests at the top -- I took a brief glance through the +code and couldn't fully make out how it had changed. I think we +want to be able to specify immutable test scores though in there +somewhere -- or is that now handled by the tflags stuff? For +the last couple releases, any test which occurred infrequently +(by thumb-in-the-wind subjective criteria) I set to have +immutable scores, as well as a handful of other rules. + +> 5. kick off the GA +> +> BTW I'll be away this weekend at Linuxbierwanderung, so Craig, +> you might +> have to run the GA. ;) + +Shouldn't be a problem. Assuming I can get the darned thing to +compile :) + +C + + diff --git a/Ch3/datasets/spam/easy_ham/01538.5360a2f683734ab1db6aed00cb329fcb b/Ch3/datasets/spam/easy_ham/01538.5360a2f683734ab1db6aed00cb329fcb new file mode 100644 index 000000000..acbbffd80 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01538.5360a2f683734ab1db6aed00cb329fcb @@ -0,0 +1,82 @@ +From spamassassin-devel-admin@lists.sourceforge.net Tue Oct 8 12:28:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1C20616F19 + for ; Tue, 8 Oct 2002 12:27:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 12:27:36 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g98BIUK12977 for ; Tue, 8 Oct 2002 12:18:30 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17ysMO-0002G3-00; Tue, + 08 Oct 2002 04:17:08 -0700 +Received: from barry.mail.mindspring.net ([207.69.200.25]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17ysMB-0003mv-00 for ; + Tue, 08 Oct 2002 04:16:55 -0700 +Received: from user-2injgi2.dsl.mindspring.com ([165.121.194.66] + helo=belphegore.hughes-family.org) by barry.mail.mindspring.net with esmtp + (Exim 3.33 #1) id 17ysM9-0006bl-00 for + spamassassin-devel@lists.sourceforge.net; Tue, 08 Oct 2002 07:16:53 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + 9BE8B40A1; Tue, 8 Oct 2002 04:16:52 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo CC +Message-Id: <20021008111652.9BE8B40A1@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 1075] RPM build puts wrong path in the *.cf files +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 04:16:52 -0700 (PDT) +Date: Tue, 8 Oct 2002 04:16:52 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=1075 + +spamassassin-contrib@msquadrat.de changed: + + What |Removed |Added +---------------------------------------------------------------------------- + CC| |spamassassin- + | |devel@lists.sourceforge.net + AssignedTo|spamassassin- |spamassassin- + |devel@lists.sourceforge.net |contrib@msquadrat.de + + + +------- Additional Comments From spamassassin-contrib@msquadrat.de 2002-10-08 04:16 ------- +I'm gonna fix this one. I think the best solution will be to copy the modified +rules to blib and install them from there. Then the rules files will be +changed on build time and not install time, too. + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. +You are on the CC list for the bug, or are watching someone who is. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + + diff --git a/Ch3/datasets/spam/easy_ham/01539.1c647c2f17378d671f0b94c25767f708 b/Ch3/datasets/spam/easy_ham/01539.1c647c2f17378d671f0b94c25767f708 new file mode 100644 index 000000000..38883f067 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01539.1c647c2f17378d671f0b94c25767f708 @@ -0,0 +1,92 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Aug 28 11:31:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8D5F943F99 + for ; Wed, 28 Aug 2002 06:31:03 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 11:31:03 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SASPZ20018 for ; Wed, 28 Aug 2002 11:28:25 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k00W-0004WX-00; Wed, + 28 Aug 2002 03:25:04 -0700 +Received: from [212.2.188.179] (helo=mandark.labs.netnoteinc.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k00C-0005AS-00 for ; + Wed, 28 Aug 2002 03:24:46 -0700 +Received: from phobos.labs.netnoteinc.com (phobos.labs.netnoteinc.com + [192.168.2.14]) by mandark.labs.netnoteinc.com (8.11.6/8.11.6) with ESMTP + id g7SAOA501889; Wed, 28 Aug 2002 11:24:10 +0100 +Received: by phobos.labs.netnoteinc.com (Postfix, from userid 500) id + A2DAE43F99; Wed, 28 Aug 2002 06:21:52 -0400 (EDT) +Received: from phobos (localhost [127.0.0.1]) by + phobos.labs.netnoteinc.com (Postfix) with ESMTP id 7D7E933D8C; + Wed, 28 Aug 2002 11:21:52 +0100 (IST) +To: "Steve Thomas" +Cc: "Jonathan Nichols" , + "Spam Assassin" +Subject: Re: [SAtalk] Setting up a spam eating address +In-Reply-To: Message from + "Steve Thomas" + of + "Tue, 27 Aug 2002 11:09:34 PDT." + +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020828102152.A2DAE43F99@phobos.labs.netnoteinc.com> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 11:21:47 +0100 +Date: Wed, 28 Aug 2002 11:21:47 +0100 + + +"Steve Thomas" said: + +> I created a user (honeypot) and set up an alias to it. Then I added a +> 'hidden' (font color same as background color) link to that address at the +> bottom of my html pages. The .procmailrc file for that user is: ..... +> which will submit the msg to razor then save it locally. I set this up about +> a month ago, and haven't received anything other than some viruses (Sircam) +> on it yet. The viruses are rejected at the MTA level, so they're not being +> saved/reported to razor. + +FWIW, I would now recommend doing this (using a user with a procmailrc) +instead of a system alias; more secure, and easier to filter out crud +like bounces, virii etc. that render a corpus dirty. + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01540.a88bbd554b661bc22b47ebbd2763e88d b/Ch3/datasets/spam/easy_ham/01540.a88bbd554b661bc22b47ebbd2763e88d new file mode 100644 index 000000000..78ab24471 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01540.a88bbd554b661bc22b47ebbd2763e88d @@ -0,0 +1,89 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Aug 28 11:31:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 1E94343F99 + for ; Wed, 28 Aug 2002 06:31:20 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 28 Aug 2002 11:31:20 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7SAWhZ20222 for ; Wed, 28 Aug 2002 11:32:43 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17k07J-00060B-00; Wed, + 28 Aug 2002 03:32:05 -0700 +Received: from [212.2.188.179] (helo=mandark.labs.netnoteinc.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17k072-0005yP-00 for ; + Wed, 28 Aug 2002 03:31:50 -0700 +Received: from phobos.labs.netnoteinc.com (phobos.labs.netnoteinc.com + [192.168.2.14]) by mandark.labs.netnoteinc.com (8.11.6/8.11.6) with ESMTP + id g7SAVa501897; Wed, 28 Aug 2002 11:31:36 +0100 +Received: by phobos.labs.netnoteinc.com (Postfix, from userid 500) id + C5C3143F99; Wed, 28 Aug 2002 06:29:18 -0400 (EDT) +Received: from phobos (localhost [127.0.0.1]) by + phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9E4EF33D8E; + Wed, 28 Aug 2002 11:29:18 +0100 (IST) +To: Bob Sully +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] False Positive of the Week +In-Reply-To: Message from Bob Sully of + "Tue, 27 Aug 2002 22:21:30 PDT." + +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020828102918.C5C3143F99@phobos.labs.netnoteinc.com> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 28 Aug 2002 11:29:13 +0100 +Date: Wed, 28 Aug 2002 11:29:13 +0100 + + +Bob Sully said: + +> Spamassassin (2.30) has been tossing my daily LogWatch (3.3) reports into +> the spam bucket. A recent one generated the folowing hits: .... + +fixed in CVS I think, or at least my logwatches get through fine. If it +is not fixed in CVS, then report it, using the correct bug-reporting +procedure: + + 1. open a Bugzilla bug. http://bugzilla.SpamAssassin.org/ + + 2. attach a sample mail message *as an attachment* with all + headers intact + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by: Jabber - The world's fastest growing +real-time communications platform! Don't just IM. Build it in! +http://www.jabber.com/osdn/xim +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + diff --git a/Ch3/datasets/spam/easy_ham/01541.88870557aa0c4375f11749cf5cbc6c05 b/Ch3/datasets/spam/easy_ham/01541.88870557aa0c4375f11749cf5cbc6c05 new file mode 100644 index 000000000..99737d2dd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01541.88870557aa0c4375f11749cf5cbc6c05 @@ -0,0 +1,80 @@ +From spamassassin-devel-admin@lists.sourceforge.net Fri Sep 6 11:49:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7AFA916F9A + for ; Fri, 6 Sep 2002 11:42:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:42:10 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868PtW25450 for + ; Fri, 6 Sep 2002 09:25:57 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id GAA20344 for + ; Fri, 6 Sep 2002 06:24:27 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17nBaA-00078T-00; Thu, + 05 Sep 2002 22:23:02 -0700 +Received: from blount.mail.mindspring.net ([207.69.200.226]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17nBZK-00070N-00 for ; + Thu, 05 Sep 2002 22:22:10 -0700 +Received: from user-1120ft5.dsl.mindspring.com ([66.32.63.165] + helo=belphegore.hughes-family.org) by blount.mail.mindspring.net with + esmtp (Exim 3.33 #1) id 17nBZJ-0005pc-00 for + spamassassin-devel@lists.sourceforge.net; Fri, 06 Sep 2002 01:22:09 -0400 +Received: by belphegore.hughes-family.org (Postfix, from userid 48) id + C3692A3C5E; Thu, 5 Sep 2002 22:22:08 -0700 (PDT) +From: bugzilla-daemon@hughes-family.org +To: spamassassin-devel@example.sourceforge.net +X-Bugzilla-Reason: AssignedTo +Message-Id: <20020906052208.C3692A3C5E@belphegore.hughes-family.org> +Subject: [SAdev] [Bug 839] mailbox corruption not fixed with procmail 3.22 +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 22:22:08 -0700 (PDT) +Date: Thu, 5 Sep 2002 22:22:08 -0700 (PDT) + +http://www.hughes-family.org/bugzilla/show_bug.cgi?id=839 + + + + + +------- Additional Comments From alan@rdrop.com 2002-09-05 22:22 ------- +I haven't tried 2.41 yet because it requires File::Spec, which barfs when +spamassassin tries to use it. I haven't filed a bug yet because I suspect it's +because I'm still running 5.005 perl because of reported compatibility issues +with 5.6 and later, but I probably will because I think there's too much legacy +perl code to put up with major compatibility problems, and spamassassin didn't, +at least in the quickest of looks, say it needed a newer one. The perl @ stuff +was bad enough... but this is all a separate soapbox... + + + +------- You are receiving this mail because: ------- +You are the assignee for the bug, or are watching the assignee. + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01542.ed72bf2cd81ccd4c076533fb0af004e5 b/Ch3/datasets/spam/easy_ham/01542.ed72bf2cd81ccd4c076533fb0af004e5 new file mode 100644 index 000000000..cd76709eb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01542.ed72bf2cd81ccd4c076533fb0af004e5 @@ -0,0 +1,184 @@ +From spamassassin-talk-admin@lists.sourceforge.net Tue Oct 8 17:02:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B8FA616F18 + for ; Tue, 8 Oct 2002 17:02:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 08 Oct 2002 17:02:19 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g98FWJK22155 for <077-jm-sa-listinfo-9089756@jmason.org>; Tue, + 8 Oct 2002 16:32:19 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17ywM8-0004Su-00 for + <077-jm-sa-listinfo-9089756@jmason.org>; Tue, 08 Oct 2002 08:33:08 -0700 +Received: from buffy.jpci.net ([212.113.192.239]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17ywLg-0005eg-00 for ; + Tue, 08 Oct 2002 08:32:40 -0700 +From: "postmaster@jpci.net" +To: "spamassassin-talk-admin@example.sourceforge.net" +Subject: Failed mail: Banned or potentially offensive material +Date: Tue, 8 Oct 2002 16:30:44 +0100 +Message-Id: <15304473447566@buffy.jpci.net> +X-Mailer: NTMail v7.02.3037 +MIME-Version: 1.0 +Content-Type: multipart/report; report-type=delivery-status; + boundary="==_15304473447567@buffy.jpci.net==_" +Sender: spamassassin-talk-owner@example.sourceforge.net +Errors-To: spamassassin-talk-owner@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: + T_NONSENSE_FROM_00_10 version=2.50-cvs +X-Spam-Level: + +This is a MIME-encapsulated message + +--==_15304473447567@buffy.jpci.net==_ +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + +Your message was not delivered to + + daz@jpci.net + +This mail message contains banned or potentially offensive text. + + +--==_15304473447567@buffy.jpci.net==_ +Content-Type: message/delivery-status +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + +Reporting-MTA: dns;buffy.jpci.net + +Final-Recipient: rfc822;daz@jpci.net +Action: failure + + +--==_15304473447567@buffy.jpci.net==_ +Content-Type: message/rfc822 +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] helo=usw-sf-list1.sourceforge.net) + by usw-sf-list2.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) + id 17ywHF-0003wQ-00; Tue, 08 Oct 2002 08:28:05 -0700 +Received: from dsl092-072-213.bos1.dsl.speakeasy.net ([66.92.72.213] helo=blazing.arsecandle.org) + by usw-sf-list1.sourceforge.net with esmtp + (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) + id 17ywGP-000544-00 + for ; Tue, 08 Oct 2002 08:27:14 -0700 +Received: (qmail 31751 invoked from network); 8 Oct 2002 15:26:25 -0000 +Received: from localhost (HELO RAGING) (rod@127.0.0.1) + by localhost with SMTP; 8 Oct 2002 15:26:25 -0000 +Message-ID: <042a01c26edf$16332c50$b554a8c0@RAGING> +From: "rODbegbie" +To: "Odhiambo Washington" , + "spamassassin" +References: <20021008130510.GA23757@ns2.wananchi.com> +Subject: Re: [SAtalk] spamd error messages +Organization: Arsecandle Industries, Inc. +X-Habeas-SWE-1: winter into spring +X-Habeas-SWE-2: brightly anticipated +X-Habeas-SWE-3: like Habeas SWE (tm) +X-Habeas-SWE-4: Copyright 2002 Habeas (tm) +X-Habeas-SWE-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-SWE-6: email in exchange for a license for this Habeas +X-Habeas-SWE-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-SWE-8: Message (HCM) and not spam. Please report use of this +X-Habeas-SWE-9: mark in spam to . +MIME-Version: 1.0 +Content-Type: multipart/signed; + micalg=SHA1; + protocol="application/x-pkcs7-signature"; + boundary="----=_NextPart_000_0426_01C26EBD.8DF911E0" +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2800.1106 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-BeenThere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 8 Oct 2002 11:26:32 -0400 +Date: Tue, 8 Oct 2002 11:26:32 -0400 + +This is a multi-part message in MIME format. + +------=_NextPart_000_0426_01C26EBD.8DF911E0 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit + +Odhiambo Washington wrote: +> After being bitten by bugs in 2.41, I've downgraded to 2.31 but now spamd +> spews errors like I've never seen before: + +Delete the contents of /usr/local/share/spamassassin and reinstall. There +are some files that were new to v2.4x, so they won't be overwritten when you +downgrade. + +rOD. + + +-- +"Fast! Fast! Faster! Bring the beef, you bastard," +cries Paula Abdul, "and don't forget the pasta!" + +Doing the blogging thang again at http://www.groovymother.com/ << + +------=_NextPart_000_0426_01C26EBD.8DF911E0 +Content-Type: application/x-pkcs7-signature; + name="smime.p7s" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; + filename="smime.p7s" + +MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIJIjCCAnow +ggHjoAMCAQICARcwDQYJKoZIhvcNAQEFBQAwUzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlm +YXggU2VjdXJlIEluYy4xJjAkBgNVBAMTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0xMB4X +DTAyMDQxODE1MjkzN1oXDTIwMDQxMzE1MjkzN1owTjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdl +b1RydXN0IEluYy4xJzAlBgNVBAMTHkdlb1RydXN0IFRydWUgQ3JlZGVudGlhbHMgQ0EgMjCBnzAN +BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAspcspZISpYX/aJqWoYcSyyGqFby3OvsepRzLRU0ENDJR +wJo7DwFpirRFOUQkTkKXsY6BQzX/CeCRrn9i4ny5gcXuI2JSyrSmDwobbwl52n5cPEbHGcebybWd +KfAf8vvkxYUnTmDZPtt2ob5RNpJTeTiq9MpNCB/5G7Ocr1hEljcCAwEAAaNjMGEwDgYDVR0PAQH/ +BAQDAgHGMB0GA1UdDgQWBBQig0tNIAIMMfR8WrAaTRXIeF0RSTAPBgNVHRMBAf8EBTADAQH/MB8G +A1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMA0GCSqGSIb3DQEBBQUAA4GBACmw3z+sLsLS +fAfdECQJPfiZFzJzSPQKLwY7vHnNWH2lAKYECbtAFHBpdyhSPkrj3KghXeIJnKyMFjsK6xd1k1Yu +wMXrauUH+HIDuZUg4okBwQbhBTqjjEdo/cCHILQsaLeU2kM+n5KKrpb0uvrHrocGffRMrWhz9zYB +lxoq0/EEMIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoG +A1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2lu +ZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1 +c2luZXNzIENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQa +DJj0ItlZ1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu +WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMB + +------=_NextPart_000_0426_01C26EBD.8DF911E0-- + +--==_15304473447567@buffy.jpci.net==_-- + + diff --git a/Ch3/datasets/spam/easy_ham/01543.044ee0da6eaa44adbadc131be0bcb2d2 b/Ch3/datasets/spam/easy_ham/01543.044ee0da6eaa44adbadc131be0bcb2d2 new file mode 100644 index 000000000..d0be99cbb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01543.044ee0da6eaa44adbadc131be0bcb2d2 @@ -0,0 +1,77 @@ +From spamassassin-devel-admin@lists.sourceforge.net Thu Aug 22 15:46:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C4B4247C66 + for ; Thu, 22 Aug 2002 10:46:25 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 22 Aug 2002 15:46:25 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7MEfWZ10476 for ; Thu, 22 Aug 2002 15:41:32 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17ht5L-0000HM-00; Thu, + 22 Aug 2002 07:37:19 -0700 +Received: from hippo.star.co.uk ([195.216.14.9]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17ht4D-0001uR-00 for ; + Thu, 22 Aug 2002 07:36:10 -0700 +Received: from MATT_LINUX by hippo.star.co.uk via smtpd (for + usw-sf-lists.sourceforge.net [216.136.171.198]) with SMTP; 22 Aug 2002 + 14:27:19 UT +Received: (qmail 8220 invoked from network); 20 Aug 2002 14:32:24 -0000 +Received: from unknown (HELO startechgroup.co.uk) (10.2.100.178) by + matt?dev.int.star.co.uk with SMTP; 20 Aug 2002 14:32:24 -0000 +Message-Id: <3D64F610.80104@startechgroup.co.uk> +From: Matt Sergeant +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0rc1) Gecko/20020426 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: =?ISO-8859-1?Q?David_H=F6hn?= +Cc: spamassassin-devel@example.sourceforge.net +Subject: Re: [SAdev] Interesting approach to Spam handling.. +References: +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 8bit +Sender: spamassassin-devel-admin@example.sourceforge.net +Errors-To: spamassassin-devel-admin@example.sourceforge.net +X-Beenthere: spamassassin-devel@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: SpamAssassin Developers +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 22 Aug 2002 15:32:48 +0100 +Date: Thu, 22 Aug 2002 15:32:48 +0100 + +David Höhn wrote: +> Hello, have you seen and discussed this article and his approach? +> +> Thank you +> +> http://www.paulgraham.com/spam.html + +Yes. See the perl module Mail::SpamTest::Bayesian on CPAN, and the +thread on sa-talk. + +Matt. + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Spamassassin-devel mailing list +Spamassassin-devel@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-devel + diff --git a/Ch3/datasets/spam/easy_ham/01544.62616d90c7904be02b84255b8dd94006 b/Ch3/datasets/spam/easy_ham/01544.62616d90c7904be02b84255b8dd94006 new file mode 100644 index 000000000..c83d24d00 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01544.62616d90c7904be02b84255b8dd94006 @@ -0,0 +1,94 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Oct 9 18:31:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D016816F03 + for ; Wed, 9 Oct 2002 18:31:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 18:31:41 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g99HPQK13803 for ; Wed, 9 Oct 2002 18:25:26 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17zKZ7-0003Gb-00; Wed, + 09 Oct 2002 10:24:09 -0700 +Received: from relay05.indigo.ie ([194.125.133.229]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17zKYV-0002NW-00 for ; + Wed, 09 Oct 2002 10:23:31 -0700 +Received: (qmail 89758 messnum 1203278 invoked from + network[194.125.220.79/ts05-079.dublin.indigo.ie]); 9 Oct 2002 17:23:27 + -0000 +Received: from ts05-079.dublin.indigo.ie (HELO spamassassin.taint.org) + (194.125.220.79) by relay05.indigo.ie (qp 89758) with SMTP; 9 Oct 2002 + 17:23:27 -0000 +Received: by spamassassin.taint.org (Postfix, from userid 500) id 3CA8C16F03; + Wed, 9 Oct 2002 18:23:25 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) by spamassassin.taint.org (Postfix) + with ESMTP id 2E63FF7D8; Wed, 9 Oct 2002 18:23:25 +0100 (IST) +To: Craig Hughes +Cc: spamassassin-talk@example.sourceforge.net +Subject: Re: [SAtalk] Re: fully-public corpus of mail available +In-Reply-To: Message from Craig Hughes of + "Wed, 09 Oct 2002 08:37:09 PDT." + +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20021009172325.3CA8C16F03@spamassassin.taint.org> +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 09 Oct 2002 18:23:20 +0100 +Date: Wed, 09 Oct 2002 18:23:20 +0100 + + +Craig Hughes said: + +> > - All headers are reproduced in full. Some address obfuscation has +> > taken place; hostnames in some cases have been replaced with +> > "spamassassin.taint.org", which should have a valid MX record (if I recall +> > correctly). In > most cases though, the headers appear as they were +> > received. +> +> Nope: +> +> [craig@balam craig]$ dig spamassassin.taint.org mx + +I knew there was something about spamassassin.taint.org ;) + +Ah well, that's probably just as good anyway... + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/easy_ham/01545.0ead90c2ca16ba3631a48c1fff4fa3ef b/Ch3/datasets/spam/easy_ham/01545.0ead90c2ca16ba3631a48c1fff4fa3ef new file mode 100644 index 000000000..1b6fcc2a4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01545.0ead90c2ca16ba3631a48c1fff4fa3ef @@ -0,0 +1,70 @@ +From quinlan@pathname.com Thu Oct 10 12:29:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4B24416F03 + for ; Thu, 10 Oct 2002 12:29:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 10 Oct 2002 12:29:11 +0100 (IST) +Received: from proton.pathname.com + (adsl-216-103-211-240.dsl.snfc21.pacbell.net [216.103.211.240]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g9A4kRK08872 for + ; Thu, 10 Oct 2002 05:46:27 +0100 +Received: from quinlan by proton.pathname.com with local (Exim 3.35 #1 + (Debian)) id 17zVDy-0006cM-00; Wed, 09 Oct 2002 21:47:02 -0700 +To: yyyy@spamassassin.taint.org (Justin Mason) +Cc: SpamAssassin-talk@example.sourceforge.net, + SpamAssassin-devel@lists.sourceforge.net, + Steve Atkins , ion@aueb.gr, donatespam@archub.org, + spambayes@python.org +Subject: Re: [SAdev] fully-public corpus of mail available +References: <20021009122116.6EB2416F03@spamassassin.taint.org> +From: Daniel Quinlan +Date: 09 Oct 2002 21:47:02 -0700 +In-Reply-To: yyyy@spamassassin.taint.org's message of "Wed, 09 Oct 2002 13:21:11 +0100" +Message-Id: +X-Mailer: Gnus v5.7/Emacs 20.7 + +> (Please feel free to forward this message to other possibly-interested +> parties.) + +Some caveats (in decending order of concern): + +1. These messages could end up being falsely (or incorrectly) reported + to Razor, DCC, Pyzor, etc. Certain RBLs too. I don't think the + results for these distributed tests can be trusted in any way, + shape, or form when running over a public corpus. + +2. These messages could also be submitted (more than once) to projects + like SpamAssassin that rely on filtering results submission for GA + tuning and development. + +3. Spammers could adopt elements of the good messages to throw off + filters. And, of course, there's always progression in technology + (by both spammers and non-spammers). + +The second problem could be alleviated somewhat by adding a Nilsimsa +signature (or similar) to the mass-check file (the results format used +by SpamAssassin) and giving the message files unique names (MD5 or +SHA-1 of each file). + +The third problem doesn't really worry me. + +These problems (and perhaps others I have not identified) are unique +to spam filtering. Compression corpuses and other performance-related +corpuses have their own set of problems, of course. + +In other words, I don't think there's any replacement for having +multiple independent corpuses. Finding better ways to distribute +testing and collate results seems like a more viable long-term solution +(and I'm glad we're working on exactly that for SpamAssassin). If +you're going to seriously work on filter development, building a corpus +of 10000-50000 messages (half spam/half non-spam) is not really that +much work. If you don't get enough spam, creating multi-technique +spamtraps (web, usenet, replying to spam) is pretty easy. And who +doesn't get thousands of non-spam every week? ;-) + +Dan + + diff --git a/Ch3/datasets/spam/easy_ham/01546.600ca62f96dca0db15aa9ebbb19426a8 b/Ch3/datasets/spam/easy_ham/01546.600ca62f96dca0db15aa9ebbb19426a8 new file mode 100644 index 000000000..548ba0ebd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01546.600ca62f96dca0db15aa9ebbb19426a8 @@ -0,0 +1,82 @@ +From jm@jmason.org Thu Oct 10 13:14:29 2002 +Return-Path: +Delivered-To: yyyy@spamassassin.taint.org +Received: by spamassassin.taint.org (Postfix, from userid 500) + id 0610616F17; Thu, 10 Oct 2002 13:14:29 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) + by jmason.org (Postfix) with ESMTP + id 033BAF7DA; Thu, 10 Oct 2002 13:14:29 +0100 (IST) +To: Daniel Quinlan +Cc: yyyy@spamassassin.taint.org (Justin Mason), + SpamAssassin-talk@lists.sourceforge.net, + SpamAssassin-devel@lists.sourceforge.net +Subject: Re: [SAdev] fully-public corpus of mail available +In-Reply-To: Message from Daniel Quinlan + of "09 Oct 2002 21:47:02 PDT." +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Date: Thu, 10 Oct 2002 13:14:23 +0100 +Sender: yyyy@spamassassin.taint.org +Message-Id: <20021010121429.0610616F17@spamassassin.taint.org> + + +(trimmed cc list) + +Daniel Quinlan said: + +> 1. These messages could end up being falsely (or incorrectly) reported +> to Razor, DCC, Pyzor, etc. Certain RBLs too. I don't think the +> results for these distributed tests can be trusted in any way, +> shape, or form when running over a public corpus. + +I'll note that in the README. + +> 2. These messages could also be submitted (more than once) to projects +> like SpamAssassin that rely on filtering results submission for GA +> tuning and development. +> The second problem could be alleviated somewhat by adding a Nilsimsa +> signature (or similar) to the mass-check file (the results format used +> by SpamAssassin) and giving the message files unique names (MD5 or +> SHA-1 of each file). + +OK; maybe rewriting the message-ids will help here, that should allow +us to pick them out. I'll do that. + +> 3. Spammers could adopt elements of the good messages to throw off +> filters. And, of course, there's always progression in technology +> (by both spammers and non-spammers). +> The third problem doesn't really worry me. + +nah, me neither. + +> These problems (and perhaps others I have not identified) are unique +> to spam filtering. Compression corpuses and other performance-related +> corpuses have their own set of problems, of course. +> +> In other words, I don't think there's any replacement for having +> multiple independent corpuses. Finding better ways to distribute +> testing and collate results seems like a more viable long-term solution +> (and I'm glad we're working on exactly that for SpamAssassin). If +> you're going to seriously work on filter development, building a corpus +> of 10000-50000 messages (half spam/half non-spam) is not really that +> much work. If you don't get enough spam, creating multi-technique +> spamtraps (web, usenet, replying to spam) is pretty easy. And who +> doesn't get thousands of non-spam every week? ;-) + +Yep. The primary reason I released this, was to provide a good, big +corpus for academic testing of filter systems; it allows results to +be compared between filters using a known corpus. + +For SpamAssassin development, everyone has to maintain their own corpus. + +--j. + diff --git a/Ch3/datasets/spam/easy_ham/01547.637d2970bb87c9f4090d809bfa16fe9a b/Ch3/datasets/spam/easy_ham/01547.637d2970bb87c9f4090d809bfa16fe9a new file mode 100644 index 000000000..efe11413f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01547.637d2970bb87c9f4090d809bfa16fe9a @@ -0,0 +1,98 @@ +From razor-users-admin@lists.sourceforge.net Mon Aug 26 15:16:57 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BD4D344168 + for ; Mon, 26 Aug 2002 10:15:10 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:15:10 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7NKZAZ07233 for ; Fri, 23 Aug 2002 21:35:10 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17iKta-0008WK-00; Fri, + 23 Aug 2002 13:19:02 -0700 +Received: from smtp-gw-cl-a.dmv.com ([64.45.128.110]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17iKsZ-0002Sv-00 for + ; Fri, 23 Aug 2002 13:17:59 -0700 +Received: from landshark (landshark.dmv.com [64.45.129.242]) by + smtp-gw-cl-a.dmv.com (8.12.3/8.12.3) with SMTP id g7NKBljr011201 for + ; Fri, 23 Aug 2002 16:11:47 -0400 (EDT) + (envelope-from sven@dmv.com) +Message-Id: <01aa01c24ae2$2a5baa70$f2812d40@landshark> +From: "Sven Willenberger" +To: +References: +Subject: RE: [Razor-users] Razor with sendmail +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 23 Aug 2002 16:17:55 -0400 +Date: Fri, 23 Aug 2002 16:17:55 -0400 + +----- Original Message ----- +From: +To: +Sent: Friday, August 23, 2002 3:05 PM +Subject: Razor-users digest, Vol 1 #346 - 8 msgs + + +> Subject: RE: [Razor-users] Razor with sendmail +> Date: Fri, 23 Aug 2002 15:03:05 -0400 +> From: "Rose, Bobby" +> To: "Julian Bond" , +> +> +> If you didn't add it when compile would be one way. Another would be to +> grep your sendmail.cf for the word Milter. +> +> +> +> "Bort, Paul" wrote: +> >If your sendmail has been compiled with Milter support, you can add=20 +> >SMRazor easily. We've been using it for a while without problems.=20 +> >Others on the list have mentioned it as well. +> > +> >http://www.sapros.com/smrazor/ +> +> Is there an easy way to tell if Milter is compiled in? +> + +To see all the options compiled into (and version of) sendmail, try the +following line: + +echo \$Z | /path/to/sendmail -bt -d0 + +Sven + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01548.e180f41d2fba17905a020043c78febc9 b/Ch3/datasets/spam/easy_ham/01548.e180f41d2fba17905a020043c78febc9 new file mode 100644 index 000000000..42aef22de --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01548.e180f41d2fba17905a020043c78febc9 @@ -0,0 +1,76 @@ +From razor-users-admin@lists.sourceforge.net Mon Aug 26 15:18:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 017124416E + for ; Mon, 26 Aug 2002 10:15:59 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:15:59 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7O8pcZ29845 for ; Sat, 24 Aug 2002 09:51:38 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17iWOq-00066d-00; Sat, + 24 Aug 2002 01:36:04 -0700 +Received: from nick.dcs.qmul.ac.uk ([138.37.88.61] helo=nick) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17iWOm-0000vq-00 for + ; Sat, 24 Aug 2002 01:36:01 -0700 +Received: from 81-86-135-90.dsl.pipex.com ([81.86.135.90] + helo=guest1.mews) by nick with asmtp (TLSv1:EDH-RSA-DES-CBC3-SHA:168) + (Exim 4.10) id 17iWOb-0004VE-00; Sat, 24 Aug 2002 09:35:49 +0100 +From: mb/vipul@dcs.qmul.ac.uk +X-X-Sender: mb@guest1.mews +To: "Bort, Paul" +Cc: razor-users@example.sourceforge.net +Subject: RE: [Razor-users] Razor with sendmail +In-Reply-To: +Message-Id: +X-Url: http://www.theBachChoir.org.uk/ +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Auth-User: mb +X-Uvscan-Result: clean (17iWOb-0004VE-00) +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 24 Aug 2002 09:48:57 +0100 (BST) +Date: Sat, 24 Aug 2002 09:48:57 +0100 (BST) + +On Aug 23 Bort, Paul wrote: + +>If your sendmail has been compiled with Milter support, you can add SMRazor +>easily. We've been using it for a while without problems. Others on the list +>have mentioned it as well. +> +>http://www.sapros.com/smrazor/ + +Does this fork+exec a perl interpreter for every incoming mail? If so, I +reckon your mailer is vulerable to a DoS attack without too much effort... +The real question is: is there a way to run razor without this overhead? +Even some sort of razord you could talk to over a unix socket would do. +Until I can find one, I cannot spare the resources to run razor at all :( + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01549.a465f982502ac6d7c10118f1939f6974 b/Ch3/datasets/spam/easy_ham/01549.a465f982502ac6d7c10118f1939f6974 new file mode 100644 index 000000000..b22744215 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01549.a465f982502ac6d7c10118f1939f6974 @@ -0,0 +1,75 @@ +From razor-users-admin@lists.sourceforge.net Mon Aug 26 15:19:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8F47A44172 + for ; Mon, 26 Aug 2002 10:16:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:16:28 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7OCoHZ03126 for ; Sat, 24 Aug 2002 13:50:18 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17iaEu-0001JM-00; Sat, + 24 Aug 2002 05:42:04 -0700 +Received: from spoons.net1.nerim.net ([80.65.224.36] + helo=cyborgnation.org) by usw-sf-list1.sourceforge.net with esmtp (Cipher + TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id 17iaEO-0002hx-00 + for ; Sat, 24 Aug 2002 05:41:32 -0700 +Received: (qmail 31109 invoked from network); 24 Aug 2002 12:41:22 -0000 +Received: from unknown (HELO musclor) (192.168.0.6) by 0 with SMTP; + 24 Aug 2002 12:41:22 -0000 +From: Toorop +X-Mailer: The Bat! (v1.61) +Reply-To: Toorop +Organization: Cyborg Nation +X-Priority: 3 (Normal) +Message-Id: <13711665921.20020824144120@cyborgnation.org> +To: razor-users@example.sourceforge.net +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +Subject: [Razor-users] Where can i find a positif mail(spam) for test +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 24 Aug 2002 14:41:20 +0200 +Date: Sat, 24 Aug 2002 14:41:20 +0200 + +Bonjour, + + I'm writting a Python script, in order to use Razor with Qmail. + The script is finish, but i want to test the result with positive + mail (spam). Somebody knows, whrere can i find one. + + PS : Escuse my pooooooor English ;-)) + +-- +Toorop +Lorsque que vous avez éliminé l'impossible, ce qui reste, +même si c'est improbable, doit être la vérité. +www.spoonsdesign.com + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01550.a036d340bdcf122c8eca891557d50b51 b/Ch3/datasets/spam/easy_ham/01550.a036d340bdcf122c8eca891557d50b51 new file mode 100644 index 000000000..1f766aba4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01550.a036d340bdcf122c8eca891557d50b51 @@ -0,0 +1,88 @@ +From razor-users-admin@lists.sourceforge.net Mon Aug 26 15:19:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 765A544163 + for ; Mon, 26 Aug 2002 10:16:36 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:16:36 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7OEPXZ05337 for ; Sat, 24 Aug 2002 15:25:33 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17ibjo-0006RZ-00; Sat, + 24 Aug 2002 07:18:04 -0700 +Received: from spoons.net1.nerim.net ([80.65.224.36] + helo=cyborgnation.org) by usw-sf-list1.sourceforge.net with esmtp (Cipher + TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id 17ibjX-0006YH-00 + for ; Sat, 24 Aug 2002 07:17:47 -0700 +Received: (qmail 500 invoked from network); 24 Aug 2002 14:17:39 -0000 +Received: (Scanned by Protecmail Filter for Cyborg Nation)24 Aug 2002 + 14:17:39 -0000 +Received: from unknown (HELO musclor) (192.168.0.6) by 0 with SMTP; + 24 Aug 2002 14:17:39 -0000 +From: Toorop +X-Mailer: The Bat! (v1.61) +Reply-To: Toorop +Organization: Cyborg Nation +X-Priority: 3 (Normal) +Message-Id: <5217441703.20020824161736@cyborgnation.org> +To: razor-users@example.sourceforge.net +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +Subject: [Razor-users] Exit.status =13 ? +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 24 Aug 2002 16:17:36 +0200 +Date: Sat, 24 Aug 2002 16:17:36 +0200 + +Bonjour, + + Always for my script, if i run it manually in console all is ok + whether is the user. + But if i try to implement it in my general script filter running + whith qmailq UID (503) : + + I've got 13 has exit status, and in my mail log : + "Can't call method "log" on unblessed reference at + /usr/lib/perl5/site_perl/5.6.0/Razor2/Client/Agent.pm line 211." + + My log file is in /home/user/.razor/razor-agent.log + and have write permission for qmailq user. + + Any idea ?? + +-- +Toorop +Lorsque que vous avez éliminé l'impossible, ce qui reste, +même si c'est improbable, doit être la vérité. +www.spoonsdesign.com + +--------------------------------- +Mail scanné par Protecmail filter + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01551.f08fe347237aafcc3c8cff08a9cf94c3 b/Ch3/datasets/spam/easy_ham/01551.f08fe347237aafcc3c8cff08a9cf94c3 new file mode 100644 index 000000000..daf6639f3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01551.f08fe347237aafcc3c8cff08a9cf94c3 @@ -0,0 +1,97 @@ +From razor-users-admin@lists.sourceforge.net Mon Aug 26 15:21:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 11BDB4416B + for ; Mon, 26 Aug 2002 10:18:07 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:18:07 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7P3uQZ00566 for ; Sun, 25 Aug 2002 04:56:26 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17ioKp-0006T0-00; Sat, + 24 Aug 2002 20:45:07 -0700 +Received: from dsl-65-187-98-81.telocity.com ([65.187.98.81] + helo=home.topshot.com) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17ioKL-0003RJ-00 for + ; Sat, 24 Aug 2002 20:44:38 -0700 +Received: from jberry12375l1 (berry12375l.topshot.com [10.0.0.50]) by + home.topshot.com (8.12.4/8.12.4) with ESMTP id g7P3iATu031394 for + ; Sat, 24 Aug 2002 23:44:15 -0400 (EDT) +From: Joe Berry +X-Mailer: The Bat! (v1.61) Personal +Reply-To: Joe Berry +X-Priority: 3 (Normal) +Message-Id: <969536713.20020824234409@topshot.com> +To: razor-users@example.sourceforge.net +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Subject: [Razor-users] Reducing impact from tons of email +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 24 Aug 2002 23:44:09 -0400 +Date: Sat, 24 Aug 2002 23:44:09 -0400 + +I'm not sure if this is really a razor problem/issue or a sendmail +problem. Here's the scenario... My mail server is a 150mhz PC funning +FreeBSD 4.4. Ordinarily, the machine is quite idle; it supports my +wife's web site with Apache server running on it and a few other +services (jabber, etc). Between the various members of our family, we +get a fair amount of email coming in (mailing lists, etc). On +occasion, our DSL-based ISP dies for a number of hours. When we get a +reconnection to the Internet, I get a huge flow of emails coming in +which are then filtered via razor. As a result, I will sometimes see +over 20+ sendmail processes running at the same time after such an +occasion. The machine is then REALLY slow. + +I noticed that my /etc/procmailrc file had had no arguments associated +with the call to razor-check. There was something in the log, though, +to make me suspicious that it was possibly not seeing all my razor +files. So I have just added "-home /etc/razor" as an argument. I +haven't had any down time since then so I cannot comment on whether +this change has sped up my razor processing a noticable amount. (This +paragraph may be an aside to my real problem, the first paragraph +above; but I thought I should be complete in my description.) + +At any rate, has anyone else suffered from a backlog of email +processing creating lots and lots of sendmail processes? Is there, +perhaps, a way to limit the number of sendmail processes? + +Any ideas would be welcome. + +Thanks, +Joe +--- +Joe Berry +joe@topshot.com +AIM "joe topshot" +Yahoo Msgr "joetopshot" +jabber "joetopshot@topshot.com" +Baltimore, MD + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01552.340f1924ed7f83b0db34841845465f7d b/Ch3/datasets/spam/easy_ham/01552.340f1924ed7f83b0db34841845465f7d new file mode 100644 index 000000000..f5a0645c8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01552.340f1924ed7f83b0db34841845465f7d @@ -0,0 +1,129 @@ +From razor-users-admin@lists.sourceforge.net Mon Aug 26 15:21:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8184A4416C + for ; Mon, 26 Aug 2002 10:18:16 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 15:18:16 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7P5iQZ03081 for ; Sun, 25 Aug 2002 06:44:26 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17ipzM-0002Xw-00; Sat, + 24 Aug 2002 22:31:04 -0700 +Received: from longbow.wesolveit.com.au ([210.10.109.227]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17ipyz-0006KN-00 for ; Sat, + 24 Aug 2002 22:30:41 -0700 +Received: (qmail 25046 invoked from network); 25 Aug 2002 05:30:34 -0000 +Received: from unknown (HELO adamwin98se) (192.168.2.114) by 0 with SMTP; + 25 Aug 2002 05:30:34 -0000 +From: "Adam Goryachev" +To: "Joe Berry" , + +Subject: RE: [Razor-users] Reducing impact from tons of email +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +In-Reply-To: <969536713.20020824234409@topshot.com> +X-Mimeole: Produced By Microsoft MimeOLE V5.00.2615.200 +Importance: Normal +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 25 Aug 2002 15:39:13 +1000 +Date: Sun, 25 Aug 2002 15:39:13 +1000 + +See your /etc/sendmail.cf file, there are a number of methods for limiting +the number of concurrent sendmail processes, either by load average (I'm +sure), or concurrency (I think)... I use sendmail anymore (I use qmail) but +I'm sure that if you look in the config file, you will see what you need... + +Regards, +Adam + +> -----Original Message----- +> From: razor-users-admin@example.sourceforge.net +> [mailto:razor-users-admin@lists.sourceforge.net]On Behalf Of Joe Berry +> Sent: Sunday, 25 August 2002 1:44 PM +> To: razor-users@example.sourceforge.net +> Subject: [Razor-users] Reducing impact from tons of email +> +> +> I'm not sure if this is really a razor problem/issue or a sendmail +> problem. Here's the scenario... My mail server is a 150mhz PC funning +> FreeBSD 4.4. Ordinarily, the machine is quite idle; it supports my +> wife's web site with Apache server running on it and a few other +> services (jabber, etc). Between the various members of our family, we +> get a fair amount of email coming in (mailing lists, etc). On +> occasion, our DSL-based ISP dies for a number of hours. When we get a +> reconnection to the Internet, I get a huge flow of emails coming in +> which are then filtered via razor. As a result, I will sometimes see +> over 20+ sendmail processes running at the same time after such an +> occasion. The machine is then REALLY slow. +> +> I noticed that my /etc/procmailrc file had had no arguments associated +> with the call to razor-check. There was something in the log, though, +> to make me suspicious that it was possibly not seeing all my razor +> files. So I have just added "-home /etc/razor" as an argument. I +> haven't had any down time since then so I cannot comment on whether +> this change has sped up my razor processing a noticable amount. (This +> paragraph may be an aside to my real problem, the first paragraph +> above; but I thought I should be complete in my description.) +> +> At any rate, has anyone else suffered from a backlog of email +> processing creating lots and lots of sendmail processes? Is there, +> perhaps, a way to limit the number of sendmail processes? +> +> Any ideas would be welcome. +> +> Thanks, +> Joe +> --- +> Joe Berry +> joe@topshot.com +> AIM "joe topshot" +> Yahoo Msgr "joetopshot" +> jabber "joetopshot@topshot.com" +> Baltimore, MD +> +> +> +> ------------------------------------------------------- +> This sf.net email is sponsored by: OSDN - Tired of that same old +> cell phone? Get a new here for FREE! +> https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +> _______________________________________________ +> Razor-users mailing list +> Razor-users@lists.sourceforge.net +> https://lists.sourceforge.net/lists/listinfo/razor-users +> + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01553.da9908f7cf34f302bb78a9986f901ac5 b/Ch3/datasets/spam/easy_ham/01553.da9908f7cf34f302bb78a9986f901ac5 new file mode 100644 index 000000000..b2fb9bd6d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01553.da9908f7cf34f302bb78a9986f901ac5 @@ -0,0 +1,73 @@ +From razor-users-admin@lists.sourceforge.net Mon Aug 26 21:06:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id AA61C43F99 + for ; Mon, 26 Aug 2002 16:06:36 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 21:06:36 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QK3oZ07287 for ; Mon, 26 Aug 2002 21:03:50 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jPt9-00018J-00; Mon, + 26 Aug 2002 12:51:03 -0700 +Received: from nick.dcs.qmul.ac.uk ([138.37.88.61] helo=nick) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17jPsr-0007xc-00 for + ; Mon, 26 Aug 2002 12:50:46 -0700 +Received: from 81-86-135-90.dsl.pipex.com ([81.86.135.90] + helo=guest1.mews) by nick with asmtp (TLSv1:EDH-RSA-DES-CBC3-SHA:168) + (Exim 4.10) id 17jPsi-00065f-00; Mon, 26 Aug 2002 20:50:36 +0100 +From: mb/vipul@dcs.qmul.ac.uk +X-X-Sender: mb@guest1.mews +To: Joe Berry +Cc: razor-users@example.sourceforge.net +Subject: Re[2]: [Razor-users] Reducing impact from tons of email +In-Reply-To: <11965292705.20020825151325@topshot.com> +Message-Id: +X-Url: http://www.theBachChoir.org.uk/ +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Auth-User: mb +X-Uvscan-Result: clean (17jPsi-00065f-00) +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 21:04:35 +0100 (BST) +Date: Mon, 26 Aug 2002 21:04:35 +0100 (BST) + +On Aug 25 Joe Berry wrote: + +>Very good advice given above. + +Yes :) + +>One more problem solved. + +No. One more problem in some software worked around by using tricks in +another piece of software. The solution is the aggregator. + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01554.0aed12846b3981a2a13adf793083e4f0 b/Ch3/datasets/spam/easy_ham/01554.0aed12846b3981a2a13adf793083e4f0 new file mode 100644 index 000000000..59b3ea4cd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01554.0aed12846b3981a2a13adf793083e4f0 @@ -0,0 +1,428 @@ +From razor-users-admin@lists.sourceforge.net Mon Aug 26 21:27:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id C1D5343F9B + for ; Mon, 26 Aug 2002 16:27:04 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 26 Aug 2002 21:27:04 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QKRaZ08329 for ; Mon, 26 Aug 2002 21:27:37 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jQGN-0004Gw-00; Mon, + 26 Aug 2002 13:15:03 -0700 +Received: from [208.7.1.205] (helo=everest.mckee.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17jQFX-0004u3-00 for ; Mon, + 26 Aug 2002 13:14:11 -0700 +Received: (qmail 4767 invoked from network); 26 Aug 2002 15:10:23 -0000 +Received: from unknown (HELO belvoir) (208.7.1.202) by 208.7.1.205 with + SMTP; 26 Aug 2002 15:10:23 -0000 +Message-Id: <004d01c24d3d$20314980$7c640f0a@mfc.corp.mckee.com> +From: "Fox" +To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Subject: [Razor-users] Preproc erasing message +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 16:14:04 -0400 +Date: Mon, 26 Aug 2002 16:14:04 -0400 + +The following razor debugging sequence show my mail going from 9295 bytes to +0 bytes after the preproc runs, which gives me an exit code that is not 0. +I included the message below. + +Fox + +Razor-Log: No /etc/razor/razor-agent.conf found, skipping. +Razor-Log: No razor-agent.conf found, using defaults. +Aug 26 10:28:09.225237 check[3469]: [ 1] [bootup] Logging initiated +LogDebugLevel=9 to stdout +Aug 26 10:28:09.225890 check[3469]: [ 5] computed razorhome=/etc/razor, +conf=, ident=/etc/razor/identity +Aug 26 10:28:09.226006 check[3469]: [ 2] Razor-Agents v2.14 starting +razor-check -d -home=/etc/razor +Aug 26 10:28:09.229704 check[3469]: [ 9] uname -a: Linux qmail.mckee.com +2.4.8-34.1mdk #1 Mon Nov 19 12:40:39 MST 2001 i686 unknown +Aug 26 10:28:09.230155 check[3469]: [ 8] reading straight RFC822 mail from +Aug 26 10:28:09.231524 check[3469]: [ 6] read 1 mail +Aug 26 10:28:09.231923 check[3469]: [ 8] Client supported_engines: 1 2 3 4 +Aug 26 10:28:09.233017 check[3469]: [ 8] prep_mail done: mail 1 headers=631, +mime0=9295 +Aug 26 10:28:09.233434 check[3469]: [ 6] skipping whitelist file (empty?): +/etc/razor/razor-whitelist +Aug 26 10:28:09.233995 check[3469]: [ 5] read_file: 1 items read from +/etc/razor/servers.discovery.lst +Aug 26 10:28:09.234369 check[3469]: [ 5] read_file: 1 items read from +/etc/razor/servers.nomination.lst +Aug 26 10:28:09.234697 check[3469]: [ 5] read_file: 3 items read from +/etc/razor/servers.catalogue.lst +Aug 26 10:28:09.235184 check[3469]: [ 9] Assigning defaults to +honor.cloudmark.com +Aug 26 10:28:09.235415 check[3469]: [ 9] Assigning defaults to +truth.cloudmark.com +Aug 26 10:28:09.235624 check[3469]: [ 9] Assigning defaults to +fire.cloudmark.com +Aug 26 10:28:09.235830 check[3469]: [ 9] Assigning defaults to +apt.cloudmark.com +Aug 26 10:28:09.236715 check[3469]: [ 5] read_file: 11 items read from +/etc/razor/server.truth.cloudmark.com.conf +Aug 26 10:28:09.237368 check[3469]: [ 5] read_file: 11 items read from +/etc/razor/server.fire.cloudmark.com.conf +Aug 26 10:28:09.237825 check[3469]: [ 5] 149643 seconds before closest +server discovery +Aug 26 10:28:09.238135 check[3469]: [ 6] truth.cloudmark.com is a Catalogue +Server srl 51; computed min_cf=1, Server se: 0B +Aug 26 10:28:09.238414 check[3469]: [ 8] Computed supported_engines: 1 2 4 +Aug 26 10:28:09.238656 check[3469]: [ 8] Using next closest server +truth.cloudmark.com:2703, cached info srl 51 +Aug 26 10:28:09.238871 check[3469]: [ 8] mail 1 Subject: New Freeware +Download +Aug 26 10:28:09.290618 check[3469]: [ 6] preproc: mail 1.0 went from 9295 +bytes to 0, erasing +Aug 26 10:28:09.291100 check[3469]: [ 5] Connecting to truth.cloudmark.com +... +Aug 26 10:28:09.505431 check[3469]: [ 8] Connection established +Aug 26 10:28:09.505662 check[3469]: [ 4] truth.cloudmark.com >> 29 server +greeting: sn=C&srl=51&ep4=7542-10&a=l +Aug 26 10:28:09.506086 check[3469]: [ 6] truth.cloudmark.com is a Catalogue +Server srl 51; computed min_cf=1, Server se: 0B +Aug 26 10:28:09.506342 check[3469]: [ 8] Computed supported_engines: 1 2 4 +Aug 26 10:28:09.506604 check[3469]: [ 8] mail 1.0 skipped in check +Aug 26 10:28:09.506686 check[3469]: [ 5] No queries, no spam +Aug 26 10:28:09.506787 check[3469]: [ 5] disconnecting from server +truth.cloudmark.com +Aug 26 10:28:09.507071 check[3469]: [ 4] truth.cloudmark.com << 5 +Aug 26 10:28:09.507155 check[3469]: [ 6] a=q +Aug 26 10:28:09.507959 check[3469]: [ 8] razor-check finished successfully. + + + +>>From bounce-html-sales1-21787251@lyris.execsoft.com Mon Aug 26 14:28:10 2002 +Return-Path: +Delivered-To: log@qmail.mckee.com +Received: (qmail 3472 invoked from network); 26 Aug 2002 14:28:10 -0000 +Received: from unknown (HELO port-216-3073879-ds200.devices.datareturn.net) +(216.46.231.87) + by 10.97.5.1 with SMTP; 26 Aug 2002 14:28:05 -0000 +X-Mailer: Lyris Web Interface +Date: Sat, 24 Aug 2002 09:45:48 -0700 +Subject: New Freeware Download + - Jammed: eric_koester@ccmail.mckee.com +To: +From: "Diskeeper Product Manager, Executive Software" + +List-Unsubscribe: +Reply-To: executive@executive.com +Message-Id: + +MIME-Version: 1.0 +Content-Type: text/html; charset=us-ascii +Spam-File: +Envelope-Recipient: eric_koester@ccmail.mckee.com + + + + + + + + + + + + + + + + + + + + + + +New Freeware Download + + + + + +

+

+ + + + +
+

IT'S + FREE!

+ + + + + + + + + + + + + + + + +
      +

+ +

Includes the same +advanced defragmentation technology +used in Diskeeper 7.0.
  + + Much faster than the +previous + Diskeeper Lite and all built-in defragmenters.
  + + Now runs on Windows +NT®/98/2000/XP.
+

Millions of downloads attest to the popularity of +Diskeeper Lite, but it only ran on Windows NT 4.0. Now it's been updated +for all +Windows operating systems from Windows 98 onward.

+

New Diskeeper Lite is still manual-only and cannot +be +scheduled or run across a network, but it is far superior to any built-in +defragmenter and much faster. And it will show you why full-version +Diskeeper is +the most recommended automatic defragmenter ever built.

+

Find out what you are really missing. +Free!

+

+ + + + + +Download Diskeeper Lite

+ + + + + + +
+ Full version Diskeeper + +available for purchase from:
+ + +
+
+ + + + + + +
+

+ + + + + + + + + + + + +

+
+
+ +
+ + +NOTICE: We periodically send new product +information electronically or +survey those individuals who voluntarily give us their e-mail address. We +hope you enjoy receiving this timely information. However, if you would +like to remove yourself from this list, please do not reply to this e-mail +to be removed. + + + +

You have received this message from +esi-vp-marketing at the e-mail +address: eric_koester@ccmail.mckee.com +
To unsubscribe, send the above e-mail address in the body of a message +along with your name, on a separate line, to + unsubscribe@executive.com.

+ + +
+ + +

© 2002 Executive Software International, +Inc. +All Rights Reserved. DISKEEPER, Executive Software and the Executive +Software +logo are either registered trademarks or trademarks of Executive Software +International, Inc. in the United States and/or other countries. Windows +and +Windows NT are registered trademarks of Microsoft Corporation in the +United +States and/or other countries. All other trademarks and brand names are +the +property of the respective owners.

+ + + + + + + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01555.14d3d514cf6188c29a13e0d2cdb90a8c b/Ch3/datasets/spam/easy_ham/01555.14d3d514cf6188c29a13e0d2cdb90a8c new file mode 100644 index 000000000..ebd459bf4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01555.14d3d514cf6188c29a13e0d2cdb90a8c @@ -0,0 +1,93 @@ +From razor-users-admin@lists.sourceforge.net Mon Sep 2 12:20:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D29F343F99 + for ; Mon, 2 Sep 2002 07:20:15 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:20:16 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7THrQZ23177 for ; Thu, 29 Aug 2002 18:53:26 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kTE9-0001nO-00; Thu, + 29 Aug 2002 10:37:05 -0700 +Received: from [208.7.1.205] (helo=everest.mckee.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kTDU-0002ED-00 for ; Thu, + 29 Aug 2002 10:36:24 -0700 +Received: (qmail 7071 invoked from network); 29 Aug 2002 12:32:22 -0000 +Received: from unknown (HELO belvoir) (208.7.1.202) by 208.7.1.205 with + SMTP; 29 Aug 2002 12:32:22 -0000 +Message-Id: <010501c24f82$947b3340$7c640f0a@mfc.corp.mckee.com> +From: "Fox" +To: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Subject: [Razor-users] Collision of hashes? +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 13:36:17 -0400 +Date: Thu, 29 Aug 2002 13:36:17 -0400 + +The following was personal correspondence between two people. I can't +fathom how Razor thinks it is spam: + +> +> We are struggling with the decisions related to wether or not to +> go ahead with our plans to purchase an OCR and forms +> scanning solution. +> +> An outside consultant mentioned that he had heard that not to +> long ago you folks were considering implementing OCR +> technology to reduce data entry costs and improve efficiency. +> If you could let us know if you did move foreward with any +> plans in that direction it would be of great help to us. May I ask +> what initialy prompted you to consider OCR? Did you decide it +> could help your compamy? What software did you go with? +> Would you recomend we take a look at it? +> At present we are still planning to continue our research until +> we decide which OCR system best suits our needs, then +> implement it quickly. +> +> If you are just starting to consider this +> technology feel free to stay in touch. We will let you know what +> we decide on and if it works for us. +> +> If you cannot advise on this please forward this E-mail to the +> proper individual in your company who might be able to help with +> this. +> Thanks, +> Jay + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01556.126fd032d9f624e282a711df96f64cc6 b/Ch3/datasets/spam/easy_ham/01556.126fd032d9f624e282a711df96f64cc6 new file mode 100644 index 000000000..8b88f41e3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01556.126fd032d9f624e282a711df96f64cc6 @@ -0,0 +1,79 @@ +From razor-users-admin@lists.sourceforge.net Tue Sep 3 14:20:48 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E680A16F44 + for ; Tue, 3 Sep 2002 14:19:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 14:19:05 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g836nOZ07951 for ; Tue, 3 Sep 2002 07:49:24 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17m7N1-0003Ev-00; Mon, + 02 Sep 2002 23:41:03 -0700 +Received: from postit.sciences.univ-nantes.fr ([193.52.109.9]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17m7M6-0003Z2-00 for ; Mon, + 02 Sep 2002 23:40:06 -0700 +Received: from localhost (localhost.localdomain [127.0.0.1]) by + postit.sciences.univ-nantes.fr (Postfix) with ESMTP id C6C11F002D for + ; Tue, 3 Sep 2002 08:39:58 +0200 + (CEST) +Received: from sciences.univ-nantes.fr (arny.irin.sciences.univ-nantes.fr + [193.52.99.28]) by postit.sciences.univ-nantes.fr (Postfix) with ESMTP id + 4908EF002A for ; Tue, 3 Sep 2002 + 08:39:58 +0200 (CEST) +Message-Id: <3D74593D.2050608@sciences.univ-nantes.fr> +From: Arnaud Abelard +Organization: =?ISO-8859-1?Q?Universit=E9_de_Nantes?= +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020606 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: razor-users@example.sourceforge.net +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 8bit +X-Virus-Scanned: by AMaViS snapshot-20010714 +Subject: [Razor-users] razor plugins for mozilla? +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 03 Sep 2002 08:39:57 +0200 +Date: Tue, 03 Sep 2002 08:39:57 +0200 + +Hello, + +did any of you hear about a a razor plugin for mozilla? +a plugin that would add a "report as spam" button somewhere for the user +to report a mail as spam on a server? + +Arnaud +-- +Arnaud Abélard +Administrateur réseaux et systèmes +Irin / Faculté de Sciences +Université de Nantes + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01557.25496d0c7fc8acbf284debadd4f1dc07 b/Ch3/datasets/spam/easy_ham/01557.25496d0c7fc8acbf284debadd4f1dc07 new file mode 100644 index 000000000..67ca02167 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01557.25496d0c7fc8acbf284debadd4f1dc07 @@ -0,0 +1,97 @@ +From razor-users-admin@lists.sourceforge.net Tue Sep 3 18:03:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F16E416F56 + for ; Tue, 3 Sep 2002 18:02:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 18:02:59 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g83GrEZ27882 for ; Tue, 3 Sep 2002 17:53:14 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17mGmY-0005uj-00; Tue, + 03 Sep 2002 09:44:02 -0700 +Received: from [208.7.1.205] (helo=everest.mckee.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17mGlZ-0007We-00 for ; Tue, + 03 Sep 2002 09:43:01 -0700 +Received: (qmail 17967 invoked from network); 3 Sep 2002 11:38:35 -0000 +Received: from unknown (HELO belvoir) (208.7.1.202) by 208.7.1.205 with + SMTP; 3 Sep 2002 11:38:35 -0000 +Message-Id: <002001c25368$f39de270$7c640f0a@mfc.corp.mckee.com> +From: "Fox" +To: "Arnaud Abelard" , + +References: <3D74593D.2050608@sciences.univ-nantes.fr> +Subject: Re: [Razor-users] razor plugins for mozilla? +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 3 Sep 2002 12:42:54 -0400 +Date: Tue, 3 Sep 2002 12:42:54 -0400 + +No, please post a link! + +Fox +----- Original Message ----- +From: "Arnaud Abelard" +To: +Sent: Tuesday, September 03, 2002 2:39 AM +Subject: [Razor-users] razor plugins for mozilla? + + +> Hello, +> +> did any of you hear about a a razor plugin for mozilla? +> a plugin that would add a "report as spam" button somewhere for the user +> to report a mail as spam on a server? +> +> Arnaud +> -- +> Arnaud Abélard +> Administrateur réseaux et systèmes +> Irin / Faculté de Sciences +> Université de Nantes +> +> +> +> ------------------------------------------------------- +> This sf.net email is sponsored by: OSDN - Tired of that same old +> cell phone? Get a new here for FREE! +> https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +> _______________________________________________ +> Razor-users mailing list +> Razor-users@lists.sourceforge.net +> https://lists.sourceforge.net/lists/listinfo/razor-users + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01558.72508aead37c2c8073e32f9e33e62532 b/Ch3/datasets/spam/easy_ham/01558.72508aead37c2c8073e32f9e33e62532 new file mode 100644 index 000000000..16601a266 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01558.72508aead37c2c8073e32f9e33e62532 @@ -0,0 +1,107 @@ +From razor-users-admin@lists.sourceforge.net Tue Sep 3 22:32:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8F62616F56 + for ; Tue, 3 Sep 2002 22:32:43 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Sep 2002 22:32:43 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g83LRWZ03922 for ; Tue, 3 Sep 2002 22:27:32 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17mL4m-00030U-00; Tue, + 03 Sep 2002 14:19:08 -0700 +Received: from h-66-166-21-186.snvacaid.covad.net ([66.166.21.186] + helo=cynosure.darkridge.com) by usw-sf-list1.sourceforge.net with esmtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17mL4c-0005tZ-00 for + ; Tue, 03 Sep 2002 14:18:58 -0700 +Received: (from jpr5@localhost) by cynosure.darkridge.com (8.11.6/8.11.5) + id g83LIt303093 for razor-users@lists.sourceforge.net; Tue, 3 Sep 2002 + 14:18:55 -0700 +From: Jordan Ritter +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] razor plugins for mozilla? +Message-Id: <20020903211855.GF2102@darkridge.com> +References: <003b01c2536b$1e40e250$7c640f0a@mfc.corp.mckee.com> + +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="aT9PWwzfKXlsBJM1" +Content-Disposition: inline +In-Reply-To: +User-Agent: Mutt/1.4i +X-Copyright: This e-mail is Copyright (c) 2002 by jpr5@darkridge.com +X-Spamadvice: Pursuant to US Code; Title 47; Chapter 5; Subchapter II; 227 + any unsolicited commercial email to this address will be subject to a + download and archival fee of US$500. Pursuant to California Business & + Professions Code; S17538.45 any email service provider involved in SPAM + activities will be liable for statutory damages of US$50 per message, up + to US$25,000 per day. Pursuant to California Penal Code; S502 any + unsolicited email sent to this address is in violation of Federal Law and + is subject to fine and/or imprisonment. +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 3 Sep 2002 14:18:55 -0700 +Date: Tue, 3 Sep 2002 14:18:55 -0700 + + +--aT9PWwzfKXlsBJM1 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline + +Revoking self-submitted content (unblocking something you accidentally +blocked) results in permanent deletion of said content from the +network. + +Fortunately, Razor2/SpamNet isa network of content people DON'T want +[in their inbox, let alone IP rights]. Block away! + +--jordan + + +On Tue, Sep 03, 2002 at 12:24:33PM -0700, Craig R.Hughes wrote: + +# "Free" is a relative concept if you actually read the EULA. No +# commercial use, and anything you submit to razor becomes entirely +# their intellectual property. Better not accidentally hit "This is +# spam" on anything you want to retain IP rights to. + +--aT9PWwzfKXlsBJM1 +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (GNU/Linux) + +iD8DBQE9dSc/pwQdAVEbU7oRAlZcAJ0dsOi7U1Mf/2LjCE87mRSBhe1gpQCeJ7yf +P310bOJSkBt79KRJMo+oTgQ= +=+IYG +-----END PGP SIGNATURE----- + +--aT9PWwzfKXlsBJM1-- + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01559.8648558d73a0837e970b7720184fdffe b/Ch3/datasets/spam/easy_ham/01559.8648558d73a0837e970b7720184fdffe new file mode 100644 index 000000000..5407fa041 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01559.8648558d73a0837e970b7720184fdffe @@ -0,0 +1,175 @@ +From razor-users-admin@lists.sourceforge.net Wed Sep 4 11:36:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8718116F1E + for ; Wed, 4 Sep 2002 11:36:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 11:36:52 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g83M0LZ04825 for ; Tue, 3 Sep 2002 23:00:21 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17mLba-0004d5-00; Tue, + 03 Sep 2002 14:53:02 -0700 +Received: from mail.pbp.net ([66.81.103.70]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17mLYk-0000Sd-00 for ; Tue, + 03 Sep 2002 14:50:06 -0700 +Received: from kelter (dhcp177.pbp.net [192.168.10.177]) by mail.pbp.net + (Postfix) with SMTP id CFA9D3684F; Tue, 3 Sep 2002 14:45:42 -0700 (PDT) +Message-Id: <006301c25393$398af0a0$b10aa8c0@pbp.net> +Reply-To: "Jonathan Nichols" +From: "Jonathan Nichols" +To: "Fox" , +References: <3D74593D.2050608@sciences.univ-nantes.fr> + <002901c25369$fe004fe0$7c640f0a@mfc.corp.mckee.com> + <003401c2536a$853f4470$7c640f0a@mfc.corp.mckee.com> + <009c01c25373$544cd0e0$6600a8c0@dhiggins> + <00aa01c25374$ce4008d0$b10aa8c0@pbp.net> + <005501c25377$fe659900$7c640f0a@mfc.corp.mckee.com> +Subject: Re: [Razor-users] Razor v2 effectiveness stats - HTML table - Take 2 +Organization: pbp.net +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 3 Sep 2002 14:45:30 -0700 +Date: Tue, 3 Sep 2002 14:45:30 -0700 + +Oh, I was serious. I'm awful with perl/etc. I just think the HTML graph that +was created was pretty neat and I wish I could do something like that. :-) + + +> I can't tell if you are serious or joking. I have a custom perl based +spam +> blocking framework that uses plug-ins to block spam. I test each message +> with every plug-in and keep the stats in a mysql database, which are what +> you see below. +> +> Fox +> +> +> ----- Original Message ----- +> From: "Jonathan Nichols" +> To: +> Sent: Tuesday, September 03, 2002 2:07 PM +> Subject: Re: [Razor-users] Razor v2 effectiveness stats - HTML table - +Take +> 2 +> +> +> > How do you make up graphs like that, anyway? :-) +> > +> > ----- Original Message ----- +> > From: "Daniel Higgins" +> > To: "Fox" ; +> > Sent: Tuesday, September 03, 2002 10:57 AM +> > Subject: Re: [Razor-users] Razor v2 effectiveness stats - HTML table - +> Take +> > 2 +> > +> > +> > that's pretty impressive, have you seen any false positives yet? myself +> i'm +> > still at the stage of creating the corpuses. i'll report back after i +get +> > some testing of my own :P +> > ----- Original Message ----- +> > From: Fox +> > To: razor-users@example.sourceforge.net +> > Sent: Tuesday, September 03, 2002 12:54 PM +> > Subject: Re: [Razor-users] Razor v2 effectiveness stats - HTML table - +> > Take 2 +> > +> > +> > Sorry about the html, for those of you still using elm or other +non-GUI +> > clients. I don't have time to post it as text. +> > +> > The "Spam Count" is the total of all spam detected by the various +> filters. +> > +> > Jammed is a custom phrase ranking system. +> > Razored is Razor v2. +> > Bayesian filter is based off of Paul Graham's work (statistical +> > probability), using a corpus of 4000 non-spam and 2000 spam messages. +> > +> > Spam Statistics +> > Date Spam Count Jammed Razored Blacklisted Trollbox Bayesian +> > 2002-08-27 370 145 (39.19%) 181 (48.92%) 79 (21.35%) +120 +> > (32.43%) 275 (74.32%) +> > 2002-08-28 397 106 (26.70%) 126 (31.74%) 163 (41.06%) +136 +> > (34.26%) 320 (80.60%) +> > 2002-08-29 346 154 (44.51%) 146 (42.20%) 78 (22.54%) +101 +> > (29.19%) 261 (75.43%) +> > 2002-08-30 366 163 (44.54%) 166 (45.36%) 65 (17.76%) +138 +> > (37.70%) 272 (74.32%) +> > 2002-08-31 282 211 (74.82%) 133 (47.16%) 27 ( 9.57%) +132 +> > (46.81%) 256 (90.78%) +> > 2002-09-01 220 127 (57.73%) 125 (56.82%) 22 (10.00%) 91 +> > (41.36%) 157 (71.36%) +> > 2002-09-02 166 86 (51.81%) 77 (46.39%) 22 (13.25%) 64 +> > (38.55%) 123 (74.10%) +> > +> > +> > +> > +> > +> > +> > ------------------------------------------------------- +> > This sf.net email is sponsored by: OSDN - Tired of that same old +> > cell phone? Get a new here for FREE! +> > https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +> > _______________________________________________ +> > Razor-users mailing list +> > Razor-users@lists.sourceforge.net +> > https://lists.sourceforge.net/lists/listinfo/razor-users +> +> +> +> ------------------------------------------------------- +> This sf.net email is sponsored by: OSDN - Tired of that same old +> cell phone? Get a new here for FREE! +> https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +> _______________________________________________ +> Razor-users mailing list +> Razor-users@lists.sourceforge.net +> https://lists.sourceforge.net/lists/listinfo/razor-users +> + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01560.62422bb7104da6017e5568907fd41fb7 b/Ch3/datasets/spam/easy_ham/01560.62422bb7104da6017e5568907fd41fb7 new file mode 100644 index 000000000..18ac00f48 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01560.62422bb7104da6017e5568907fd41fb7 @@ -0,0 +1,79 @@ +From razor-users-admin@lists.sourceforge.net Thu Sep 5 11:26:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4596C16F1F + for ; Thu, 5 Sep 2002 11:26:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:26:08 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g84IoYZ15135 for ; Wed, 4 Sep 2002 19:50:34 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17meze-0003Rp-00; Wed, + 04 Sep 2002 11:35:10 -0700 +Received: from gwp-32.gwp.com ([206.117.30.231] + helo=gwpmail01.corp.vipmail.com) by usw-sf-list1.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17mezN-0003yS-00 for + ; Wed, 04 Sep 2002 11:34:53 -0700 +Received: from Ariel (unverified [198.6.50.33]) by + gwpmail01.corp.vipmail.com (Vircom SMTPRS 5.3.228) with ESMTP id + for + ; Wed, 4 Sep 2002 11:35:53 -0700 +From: "Bill Sobel" +To: +Message-Id: <001101c25441$bdcd7000$7099409b@evergreen.local> +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2616 +In-Reply-To: <20020904165528.GA1935@darkridge.com> +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +Importance: Normal +X-Vipmail-Smtpmailfrom: bsobel@vipmail.com +X-Vopfilter-Ip: 198.6.50.33 +Subject: [Razor-users] Windows port / bug reports? +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 4 Sep 2002 11:34:44 -0700 +Date: Wed, 4 Sep 2002 11:34:44 -0700 + +Hi, + +Newbie (to the list) question; I've been working on porting the code to +run under Perl on Windows. The changes are fairly minor and can be made +to interoperate with the current code. How would one best go about +getting those changes merged in (better question, would there be +interest in such a version and getting those changes merged in)? + +Bill + + + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01561.4d9ed1a0103b1a90cfd91921b9014124 b/Ch3/datasets/spam/easy_ham/01561.4d9ed1a0103b1a90cfd91921b9014124 new file mode 100644 index 000000000..2f996cc27 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01561.4d9ed1a0103b1a90cfd91921b9014124 @@ -0,0 +1,245 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:34:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5238B16F19 + for ; Fri, 6 Sep 2002 11:34:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:34:06 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868cdW26208 for + ; Fri, 6 Sep 2002 09:38:50 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id DAA19774 for + ; Fri, 6 Sep 2002 03:23:07 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n8dH-0003Pb-00; Thu, + 05 Sep 2002 19:14:03 -0700 +Received: from nycsmtp2out.rdc-nyc.rr.com ([24.29.99.227]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n8cJ-0006KG-00 for ; Thu, + 05 Sep 2002 19:13:03 -0700 +Received: from lelandwoodbury.com (66-108-249-115.nyc.rr.com + [66.108.249.115]) by nycsmtp2out.rdc-nyc.rr.com (8.12.1/Road Runner SMTP + Server 1.0) with ESMTP id g862AbOx021295; Thu, 5 Sep 2002 22:10:37 -0400 + (EDT) +Message-Id: <3D780F2B.8090709@lelandwoodbury.com> +From: Leland Woodbury +User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.1a) Gecko/20020611 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: David Rees +Cc: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Problem with Razor 2.14 and Spamassassin 2.41 +References: <20020905160808.B2932@greenhydrant.com> + + <20020906005315.GH29663@kluge.net> <20020905181308.B4905@greenhydrant.com> +Content-Type: multipart/mixed; boundary="------------050101050502080302080407" +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 05 Sep 2002 22:12:59 -0400 +Date: Thu, 05 Sep 2002 22:12:59 -0400 + +This is a multi-part message in MIME format. +--------------050101050502080302080407 +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit + +I found a nice little Perl script for this purpose called rotate, which +makes the process of rotating log files very simple. If there's an +official source for this script, I couldn't find it. (My hosting +provider, pair.com, has it installed, and that's where I found it.) + However, redistribution appears to be allowed, so I've attached it. + +Good luck... + +L + +David Rees wrote: + +>On Thu, Sep 05, 2002 at 08:53:16PM -0400, Theo Van Dinter wrote: +> +> +>>On Thu, Sep 05, 2002 at 06:16:57PM -0500, Mike Burger wrote: +>> +>> +>>>You might be better asking this on the spamassassin-talk list. The folks +>>>there will almost definitely have an answer for this. +>>> +>>> +>>I posted a fairly lengthy complete answer to this problem and how to +>>get around it in SA 2.41 on the spamassassin-talk list. :) +>> +>> +> +>Thanks for the post there, it answered all my questions about +>spamassassin/razor interaction. +> +>Now for a razor question: +> +>I'm worried about having a server full of razor-agent.log files which keep +>on growing. Is it possible to configure razor log via SYSLOG to make it +>easy to rotate logs? Searching through the man pages didn't turn anything +>up... Otherwise I'll have to write a script to go through each user's home +>directory looking for razor-agent.log files to rotate periodically. +> +>Thanks, +>Dave +> +> +>------------------------------------------------------- +>This sf.net email is sponsored by: OSDN - Tired of that same old +>cell phone? Get a new here for FREE! +>https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +>_______________________________________________ +>Razor-users mailing list +>Razor-users@lists.sourceforge.net +>https://lists.sourceforge.net/lists/listinfo/razor-users +> +> + +--------------050101050502080302080407 +Content-Type: application/x-java-applet;version=1.1.1; + name="rotate" +Content-Transfer-Encoding: base64 +Content-Disposition: inline; + filename="rotate" + +IyEvdXNyL2Jpbi9wZXJsCjsjCjsjIENvcHlyaWdodCAoYykgMTk5NS0xOTk5CjsjCUlrdW8g +TmFrYWdhd2EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCjsjCjsjIFJlZGlzdHJpYnV0aW9uIGFu +ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo7IyBt +b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n +IGNvbmRpdGlvbnMKOyMgYXJlIG1ldDoKOyMKOyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv +dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKOyMgICAgbm90aWNl +IHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2lu +Zwo7IyAgICBkaXNjbGFpbWVyLgo7IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv +cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo7IyAgICBub3RpY2UsIHRo +aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g +dGhlCjsjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl +ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCjsjCjsjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE +RUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKOyMgQU5Z +IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN +SVRFRCBUTywgVEhFCjsjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg +QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgo7IyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE +LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMKOyMgQkUg +TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg +RVhFTVBMQVJZLAo7IyBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU +IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAo7IyBPRiBTVUJTVElUVVRFIEdPT0RTIE9S +IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKOyMgQlVTSU5F +U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM +SUFCSUxJVFksCjsjIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S +IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCjsjIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ +TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCjsjIEVWRU4gSUYg +QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCjsjCjsjICRJZDog +cm90YXRlLHYgMS42IDE5OTkvMTEvMTAgMjM6MTI6MjggaWt1byBFeHAgJAo7Iwo7IyBIb3cg +dG8gdXNlIGByb3RhdGUnIHByb2dyYW06CjsjCjsjICAgVG8gcm90YXRlICIvdmFyL2xvZy94 +eHgubG9nIiB0byAiL3Zhci9sb2cveHh4LmxvZy5vbGQiLCBhbmQKOyMgICBjcmVhdGUgYSBu +ZXcgZmlsZSAiL3Zhci9sb2cveHh4LmxvZyI6CjsjCXJvdGF0ZSAvdmFyL2xvZy94eHgubG9n +CjsjCjsjICAgSWYgeW91IHdhbnQgdG8gcm90YXRlIGZpbGVzIHdpdGggc3VmZml4ZXMsIHRy +eSBhZGRpdGlvbmFsCjsjICAgYXJndW1lbnQgZm9yIGByb3RhdGUnIGNvbW1hbmQuCjsjCXJv +dGF0ZSAvdmFyL2xvZy94eHgubG9nIDIgMSAwCjsjCjsjICAgWW91IGNhbiBzcGVjaWZ5IHRo +ZSBvd25lci9ncm91cCBvciBmaWxlIHBlcm1pc3Npb24gbW9kZSBmb3IKOyMgICB0aGUgbmV3 +IGZpbGUgKGxpa2UgYGluc3RhbGwnIGNvbW1hbmQpOgo7Iwlyb3RhdGUgLW8gcm9vdCAtZyB3 +aGVlbCAtbSA2NDQgL3Zhci9sb2cvbWVzc2FnZXMgMiAxIDAKOyMKOyMgICBZb3UgY2FuIGFs +c28gY29tcHJlc3Mgcm90YXRlZCBmaWxlIHdpdGggYGd6aXAnOgo7Iwlyb3RhdGUgLXogL3Zh +ci9sb2cvYWNjZXNzLmxvZyAyIDEgMAo7Iwo7IyAgIG9yIHdpdGggYGNvbXByZXNzJzoKOyMJ +cm90YXRlIC1aIC92YXIvbG9nL2FjY2Vzcy5sb2cgMiAxIDAKOyMKOyMgVGhpcyBpcyBiZWNh +dXNlIHdlIHN1cHBvcnRzIHBlcmwgdmVyc2lvbiA0LgpyZXF1aXJlICdnZXRvcHRzLnBsJzsK +CjsjIEdldCBwcm9ncmFtIG5hbWUKKCRwcm9ncmFtKSA9ICgkMCA9fiBtJShbXi9dKykkJSk7 +Cgo7IyBGb3IgemVybyBiYXNlZCBpbmRleC4KJFsgPSAwOwoKOyMgU2hvdyBkZWJ1ZyBsb2cg +dG8gU1RET1VULgpzdWIgZGVidWcgewoJbG9jYWwoJF8pOyAjIHVzZWQgaW4gZ3JlcC4KCWdy +ZXAoKHByaW50ICIkX1xuIiksIEBfKSBpZiAkb3B0X3Y7Cn0KCjsjIEluaXRpYWxpemUgb3B0 +aW9ucyAoZm9yICJwZXJsIC1jdyIpLgp1bmRlZiAkb3B0X047CnVuZGVmICRvcHRfVDsKdW5k +ZWYgJG9wdF9aOwp1bmRlZiAkb3B0X2c7CnVuZGVmICRvcHRfbTsKdW5kZWYgJG9wdF9uOwp1 +bmRlZiAkb3B0X287CnVuZGVmICRvcHRfdDsKdW5kZWYgJG9wdF92Owp1bmRlZiAkb3B0X3o7 +Cgo7IyBQYXJzaW5nIG9wdGlvbnMKdW5sZXNzICgmR2V0b3B0cygiTlRaZzptOm5vOnR2eiIp +ICYmIGRlZmluZWQoJHRhcmdldCA9IHNoaWZ0KSkgewoJZGllIDw8IkVORCI7ClVzYWdlOiAk +cHJvZ3JhbSBbb3B0aW9uc10gcGF0aCBbc3VmZml4IHN1ZmZpeCAuLi5dCk9wdGlvbnM6Cgkt +dgl2ZXJib3NlIG1vZGUuCgktbglkbyBub3QgcmVhbCB3b3JrLiBvbmx5IHNob3cgcHJvY2Vz +c2luZy4KCS1OCWRvIG5vdCBjcmVhdGUgYSBuZXcgZmlsZS4KCS16CWNvbXByZXNzIHdpdGgg +YGd6aXAnLgoJLVoJY29tcHJlc3Mgd2l0aCBgY29tcHJlc3MnLgoJLW8Jc3BlY2lmeSBvd25l +ci4KCS1nCXNwZWNpZnkgZ3JvdXAuCgktbQlzcGVjaWZ5IG1vZGUuCgktVAl1c2UgYFlZWVkt +TU0tREQnIChnaXZlbiBieSBjdXJyZW50IHRpbWUpIGFzIHRoZSBkZWZhdWx0CgkJc3VmZml4 +LCBpbnN0ZWFkIG9mIGBvbGQnLgoJLXQJdXNlIGBZWVlZLU1NLUREJyAoZnJvbSBsYXN0IG1v +ZGlmaWVkIHRpbWUgb2YgdGhlIHRhcmdldCkKCQlhcyB0aGUgZGVmYXVsdCBzdWZmaXgsIGlu +c3RlYWQgb2YgYG9sZCcuCkVORAp9Cgo7IyBUZXN0IG1vZGUgcmVxdWlyZXMgdmVyYm9zZSBv +cHRpb24KJG9wdF92KysgaWYgJG9wdF9uOwoKOyMgSWYgbm8gc3VmZml4IHdhcyBnaXZlbiwg +d2UgZ2VuZXJhdGUgZGVmYXVsdCBvbmUuCnVubGVzcyAoQEFSR1YpIHsKCWlmICgkb3B0X1Qg +fHwgJG9wdF90KSB7CgkJaWYgKCRvcHRfdCAmJiAhIC1lICR0YXJnZXQpIHsKCQkJZGllKCIk +dGFyZ2V0IG11c3QgZXhpc3QgaWYgLXQgZmxhZyBpcyBzcGVjaWZpZWQuXG4iKTsKCQl9CgkJ +JHQgPSAkb3B0X3QgPyAoc3RhdCgkdGFyZ2V0KSlbOV0gOiB0aW1lOwoJCUB0ID0gcmV2ZXJz +ZSgobG9jYWx0aW1lKCR0KSlbMC4uNV0pOwoJCSR0WzBdICs9IDE5MDA7CgkJJHRbMV0rKzsK +CQlAQVJHViA9IChzcHJpbnRmKCIlMDRkLSUwMmQtJTAyZCIsIEB0KSk7Cgl9IGVsc2UgewoJ +CUBBUkdWID0gKCdvbGQnKTsKCX0KfQoKOyMgUm90YXRlIHRoZSB0YXJnZXQgZmlsZS4KJnNh +ZmVfcm90YXRlKCR0YXJnZXQsIEBBUkdWKTsKCjsjIFRvdWNoIHRoZSBuZXcgb25lLgomc2Fm +ZV9jcmVhdGUoJHRhcmdldCkgdW5sZXNzICRvcHRfTjsKCjsjIE5vcm1hbCB0ZXJtaW5hdGlv +bi4KZXhpdDsKCjsjIFRvdWNoIGEgZmlsZS4gQ3JlYXRlIGEgbmV3IG9uZSBpZiBpdCBkb2Vz +IG5vdCBleGlzdC4Kc3ViIHRvdWNoIHsKCWxvY2FsKCRhKSA9IEBfOwoJbG9jYWwoKkZJTEUp +OwoKCSRhIG5lICcnICYmIG9wZW4oRklMRSwgJz4+Jy4kYSkgJiYgY2xvc2UoRklMRSkgJiYg +LWUgJGE7Cn0KCjsjCnN1YiBzYWZlX3VubGluayB7Cglsb2NhbCgkYSkgPSBAXzsKCglpZiAo +LWUgJGEpIHsKCQkmZGVidWcoInVubGluayBcIiRhXCIiKTsKCQkkb3B0X24gfHwgdW5saW5r +KCRhKSB8fCBkaWUoInVubGluaygkYSk6ICQhIik7Cgl9Cn0KCjsjCnN1YiBzYWZlX3JlbmFt +ZSB7Cglsb2NhbCgkYSwgJGIpID0gQF87ICMgZnJvbSwgdG8KCglpZiAoLWUgJGEpIHsKCQkm +ZGVidWcoInJlbmFtZSBcIiRhXCIgdG8gXCIkYlwiIik7CgkJJG9wdF9uIHx8IHJlbmFtZSgk +YSwgJGIpIHx8IGRpZSgicmVuYW1lKCRhLCAkYik6ICQhIik7Cgl9Cn0KCjsjCnN1YiBzYWZl +X2NvbXByZXNzIHsKCWxvY2FsKCRhKSA9IEBfOwoKCWlmICgteiAkYSkgeyAjIGNvbXByZXNz +IHdpbGwgZmFpbCBpbiB0aGlzIGNhc2UKCQkmZGVidWcoIndlIHdvbid0IGNvbXByZXNzIHpl +cm8tc2l6ZWQgZmlsZTogXCIkYVwiIik7Cgl9IGVsc2UgewoJCSZkZWJ1ZygiY29tcHJlc3Mg +XCIkYVwiIik7CgkJJG9wdF9uCXx8IHN5c3RlbSgnY29tcHJlc3MnLCAkYSkgPT0gMAoJCQl8 +fCBkaWUoInN5c3RlbShjb21wcmVzcywgJGEpOiBmYWlsdXJlLlxuIik7Cgl9Cn0KCjsjCnN1 +YiBzYWZlX2d6aXAgewoJbG9jYWwoJGEpID0gQF87CgoJJmRlYnVnKCJnemlwIFwiJGFcIiIp +OwoJJG9wdF9uCXx8IHN5c3RlbSgnZ3ppcCcsICRhKSA9PSAwCgkJfHwgZGllKCJzeXN0ZW0o +Z3ppcCwgJGEpOiBmYWlsdXJlLlxuIik7Cn0KCjsjIENyZWF0ZSBhIG5ldyBvbmUKc3ViIHNh +ZmVfY3JlYXRlIHsKCWxvY2FsKCRhKSA9IHNoaWZ0OwoKCSZkZWJ1ZygidG91Y2ggXCIkYVwi +Iik7Cgkkb3B0X24gfHwgJnRvdWNoKCRhKSB8fCBkaWUoInRvdWNoKCRhKTogJCEiKTsKCgkj +IHNldCBvd25lciBhbmQgZ3JvdXAKCWlmIChkZWZpbmVkKCRvcHRfbykgfHwgZGVmaW5lZCgk +b3B0X2cpKSB7CgkJbG9jYWwoJHVpZCwgJGdpZCkgPSAoc3RhdCgkYSkpWzQsIDVdOwoJCSFk +ZWZpbmVkKCRvcHRfbykKCQkJfHwgKCgkdWlkID0gJG9wdF9vKSA9fiAvXlxkKyQvKQoJCQl8 +fCBkZWZpbmVkKCR1aWQgPSBnZXRwd25hbSgkb3B0X28pKQoJCQl8fCBkaWUoImdldHB3bmFt +KCRvcHRfbyk6ICQhIik7CgkJIWRlZmluZWQoJG9wdF9nKQoJCQl8fCAoKCRnaWQgPSAkb3B0 +X2cpID1+IC9eXGQrJC8pCgkJCXx8IGRlZmluZWQoJGdpZCA9IGdldGdybmFtKCRvcHRfZykp +CgkJCXx8IGRpZSgiZ2V0Z3JuYW0oJG9wdF9nKTogJCEiKTsKCQkmZGVidWcoImNob3duKCR1 +aWQsICRnaWQsIFwiJGFcIikiKTsKCQkkb3B0X24JfHwgY2hvd24oJHVpZCwgJGdpZCwgJGEp +CgkJCXx8IGRpZSgiY2hvd24oJGEpOiAkISIpOwoJfQoKCSMgc2V0IGZpbGUgbW9kZQoJaWYg +KGRlZmluZWQoJG9wdF9tKSkgewoJCSRvcHRfbSA9fiAvXlxkKyQvIHx8IGRpZSAiaWxsZWdh +bCBtb2RlOiAkb3B0X21cbiI7CgkJJG9wdF9tID0gb2N0KCRvcHRfbSk7CgkJJmRlYnVnKCJj +aG1vZCAiLnNwcmludGYoIiUwNG8iLCAkb3B0X20pLiIsIFwiJGFcIiIpOwoJCSRvcHRfbiB8 +fCBjaG1vZCgkb3B0X20sICRhKSB8fCBkaWUoImNobW9kKCRhKTogJCEiKTsKCX0KCgkjIHN1 +Y2Nlc3MuCgkxOwp9Cgo7IyBSb3RhdGUgLSBkbyByZWFsIHdvcmsuCnN1YiBzYWZlX3JvdGF0 +ZSB7Cglsb2NhbCgkYSkgPSBzaGlmdDsKCgkjIGNoZWNrIGV4aXN0ZW5jZSwgYW5kIHN1ZmZp +eGVzCglyZXR1cm4gMCB1bmxlc3MgJGEgbmUgJycgJiYgLWUgJGEgJiYgQF87CgoJIyBsb2cg +bWVzc2FnZQoJJmRlYnVnKCJyb3RhdGluZyBcIiRhXCIiKTsKCgkjIHJlbW92ZSBvbGRlc3Qg +b25lCglsb2NhbCgkYikgPSAkYS4nLicuc2hpZnQ7Cgkmc2FmZV91bmxpbmsoJGIpOwoJJnNh +ZmVfdW5saW5rKCRiLicuWicpOwoJJnNhZmVfdW5saW5rKCRiLicuZ3onKTsKCgkjIGxvb3Ag +dG8gcm90YXRlIGZpbGVzCgl3aGlsZSAoQF8pIHsKCQlsb2NhbCgkeCkgPSAkYS4nLicuc2hp +ZnQ7CgkJJnNhZmVfcmVuYW1lKCR4LCAkYik7CgkJJnNhZmVfcmVuYW1lKCR4LicuWicsICRi +LicuWicpOwoJCSZzYWZlX3JlbmFtZSgkeC4nLmd6JywgJGIuJy5neicpOwoJCSRiID0gJHg7 +Cgl9CgoJIyByb3RhdGUgbGFzdCBvbmUKCSZzYWZlX3JlbmFtZSgkYSwgJGIpOwoKCSMgc2hh +bGwgd2UgY29tcHJlc3Mgcm90YXRlZCBvbmU/Cgkkb3B0X3ogPyAmc2FmZV9nemlwKCRiKSA6 +ICRvcHRfWiA/ICZzYWZlX2NvbXByZXNzKCRiKSA6IDE7Cn0K +--------------050101050502080302080407-- + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01562.c9d27ce4f88c44947e1480991162b11c b/Ch3/datasets/spam/easy_ham/01562.c9d27ce4f88c44947e1480991162b11c new file mode 100644 index 000000000..0595422f2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01562.c9d27ce4f88c44947e1480991162b11c @@ -0,0 +1,80 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:34:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E18A316F16 + for ; Fri, 6 Sep 2002 11:34:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:34:03 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868ZTW26173 for + ; Fri, 6 Sep 2002 09:37:08 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id DAA19778 for + ; Fri, 6 Sep 2002 03:26:00 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n8i7-000455-00; Thu, + 05 Sep 2002 19:19:03 -0700 +Received: from [208.48.139.185] (helo=forty.greenhydrant.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n8hW-0000tQ-00 for ; Thu, + 05 Sep 2002 19:18:26 -0700 +Received: (qmail 6108 invoked by uid 501); 6 Sep 2002 02:18:20 -0000 +From: David Rees +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Problem with Razor 2.14 and Spamassassin 2.41 +Message-Id: <20020905191820.C5351@greenhydrant.com> +Mail-Followup-To: David Rees , + razor-users@lists.sourceforge.net +References: <20020905160808.B2932@greenhydrant.com> + + <20020906005315.GH29663@kluge.net> <20020905181308.B4905@greenhydrant.com> + <3D780F2B.8090709@lelandwoodbury.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <3D780F2B.8090709@lelandwoodbury.com>; from + leland@lelandwoodbury.com on Thu, Sep 05, 2002 at 10:12:59PM -0400 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 19:18:20 -0700 +Date: Thu, 5 Sep 2002 19:18:20 -0700 + +On Thu, Sep 05, 2002 at 10:12:59PM -0400, Leland Woodbury wrote: +> I found a nice little Perl script for this purpose called rotate, which +> makes the process of rotating log files very simple. If there's an +> official source for this script, I couldn't find it. (My hosting +> provider, pair.com, has it installed, and that's where I found it.) +> However, redistribution appears to be allowed, so I've attached it. + +Thanks for the script. It also appears that the standard logrotate tools +included with many systems (or at least RedHat systems) will support +wildcards when rotating files so something like +/home/*/.razor/razor-agent.log can be specified... + +-Dave + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01563.15052ebc391295c9d722e9b7f9e01f6e b/Ch3/datasets/spam/easy_ham/01563.15052ebc391295c9d722e9b7f9e01f6e new file mode 100644 index 000000000..29ba85816 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01563.15052ebc391295c9d722e9b7f9e01f6e @@ -0,0 +1,87 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:35:10 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9F98716F17 + for ; Fri, 6 Sep 2002 11:34:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:34:35 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869ZYC28258 for + ; Fri, 6 Sep 2002 10:36:36 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id CAA19639 for + ; Fri, 6 Sep 2002 02:28:02 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n7hF-0001Zy-00; Thu, + 05 Sep 2002 18:14:05 -0700 +Received: from [208.48.139.185] (helo=forty.greenhydrant.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n7gP-00007z-00 for ; Thu, + 05 Sep 2002 18:13:13 -0700 +Received: (qmail 5168 invoked by uid 501); 6 Sep 2002 01:13:08 -0000 +From: David Rees +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Problem with Razor 2.14 and Spamassassin 2.41 +Message-Id: <20020905181308.B4905@greenhydrant.com> +Mail-Followup-To: David Rees , + razor-users@lists.sourceforge.net +References: <20020905160808.B2932@greenhydrant.com> + + <20020906005315.GH29663@kluge.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <20020906005315.GH29663@kluge.net>; from felicity@kluge.net + on Thu, Sep 05, 2002 at 08:53:16PM -0400 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 18:13:08 -0700 +Date: Thu, 5 Sep 2002 18:13:08 -0700 + +On Thu, Sep 05, 2002 at 08:53:16PM -0400, Theo Van Dinter wrote: +> On Thu, Sep 05, 2002 at 06:16:57PM -0500, Mike Burger wrote: +> > You might be better asking this on the spamassassin-talk list. The folks +> > there will almost definitely have an answer for this. +> +> I posted a fairly lengthy complete answer to this problem and how to +> get around it in SA 2.41 on the spamassassin-talk list. :) + +Thanks for the post there, it answered all my questions about +spamassassin/razor interaction. + +Now for a razor question: + +I'm worried about having a server full of razor-agent.log files which keep +on growing. Is it possible to configure razor log via SYSLOG to make it +easy to rotate logs? Searching through the man pages didn't turn anything +up... Otherwise I'll have to write a script to go through each user's home +directory looking for razor-agent.log files to rotate periodically. + +Thanks, +Dave + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01564.a9ec7dadba295233cc729b3f7410e983 b/Ch3/datasets/spam/easy_ham/01564.a9ec7dadba295233cc729b3f7410e983 new file mode 100644 index 000000000..c03c038c0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01564.a9ec7dadba295233cc729b3f7410e983 @@ -0,0 +1,82 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:35:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4543116F21 + for ; Fri, 6 Sep 2002 11:34:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:34:38 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869ZWC28256 for + ; Fri, 6 Sep 2002 10:35:40 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id CAA19615 for + ; Fri, 6 Sep 2002 02:19:05 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n7fN-0000e3-00; Thu, + 05 Sep 2002 18:12:09 -0700 +Received: from dhcp024-208-195-177.indy.rr.com ([24.208.195.177] + helo=burgers.bubbanfriends.org) by usw-sf-list1.sourceforge.net with esmtp + (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n7f8-0008CE-00 for ; Thu, + 05 Sep 2002 18:11:54 -0700 +Received: from localhost (localhost.localdomain [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id 47DD74001A1; + Thu, 5 Sep 2002 20:11:56 -0500 (EST) +Received: by burgers.bubbanfriends.org (Postfix, from userid 500) id + 074C64001A0; Thu, 5 Sep 2002 20:11:55 -0500 (EST) +Received: from localhost (localhost [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id 00278C026A6; + Thu, 5 Sep 2002 20:11:54 -0500 (EST) +From: Mike Burger +To: Theo Van Dinter +Cc: David Rees , + +Subject: Re: [Razor-users] Problem with Razor 2.14 and Spamassassin 2.41 +In-Reply-To: <20020906005315.GH29663@kluge.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Virus-Scanned: by AMaViS new-20020517 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 20:11:53 -0500 (EST) +Date: Thu, 5 Sep 2002 20:11:53 -0500 (EST) + +And you were exactly the person I figured would do so. + +On Thu, 5 Sep 2002, Theo Van Dinter wrote: + +> On Thu, Sep 05, 2002 at 06:16:57PM -0500, Mike Burger wrote: +> > You might be better asking this on the spamassassin-talk list. The folks +> > there will almost definitely have an answer for this. +> +> I posted a fairly lengthy complete answer to this problem and how to +> get around it in SA 2.41 on the spamassassin-talk list. :) +> +> + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01565.c10c0b0e0c9903345e28f9c17fc84400 b/Ch3/datasets/spam/easy_ham/01565.c10c0b0e0c9903345e28f9c17fc84400 new file mode 100644 index 000000000..213852a3d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01565.c10c0b0e0c9903345e28f9c17fc84400 @@ -0,0 +1,108 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:35:14 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A95BE16F22 + for ; Fri, 6 Sep 2002 11:34:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:34:40 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869cUC28513 for + ; Fri, 6 Sep 2002 10:38:30 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id CAA19567 for + ; Fri, 6 Sep 2002 02:00:05 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n7Lz-0004wl-00; Thu, + 05 Sep 2002 17:52:07 -0700 +Received: from eclectic.kluge.net ([66.92.69.221]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17n7Lf-0003pB-00 for + ; Thu, 05 Sep 2002 17:51:47 -0700 +Received: from eclectic.kluge.net (localhost [127.0.0.1]) by + eclectic.kluge.net (8.12.6/8.12.6) with ESMTP id g860pgnP003206; + Thu, 5 Sep 2002 20:51:42 -0400 +Received: (from felicity@localhost) by eclectic.kluge.net + (8.12.6/8.12.6/Submit) id g860pfte003204; Thu, 5 Sep 2002 20:51:41 -0400 +From: Theo Van Dinter +To: Josh Hildebrand +Cc: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] removing Razor1 +Message-Id: <20020906005141.GG29663@kluge.net> +References: <20020905221132.GB6886@jedi.net> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="iJXiJc/TAIT2rh2r" +Content-Disposition: inline +In-Reply-To: <20020905221132.GB6886@jedi.net> +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 20:51:41 -0400 +Date: Thu, 5 Sep 2002 20:51:41 -0400 + + +--iJXiJc/TAIT2rh2r +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Thu, Sep 05, 2002 at 05:11:32PM -0500, Josh Hildebrand wrote: +> If that's the case, can someone please point me to something that explains +> how to remove Razor1 from my system? I don't see a point in envoking it. +> Especially when it appears to error out on me. +>=20 +> Problem while trying to load Razor1: Permission denied at +> /usr/local/lib/perl5/site_perl/5.6.1/Mail/SpamAssassin/Dns.pm line 288. +> debug: leaving helper-app run mode + +rm -rf /usr/local/lib/perl5/site_perl/5.6.1/Razor + +(you'll want to check that path first of course...) + +--=20 +Randomly Generated Tagline: +"It's a chicken finger device." - Theo, looking at entree + +--iJXiJc/TAIT2rh2r +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9d/wdAuOQUeWAs2MRAsXtAJ9ZJezMTsUuIw/Q3MMkZ6/QAyuYGgCgtc3/ +iUYXa6+6icdddeWovza09lk= +=46WZ +-----END PGP SIGNATURE----- + +--iJXiJc/TAIT2rh2r-- + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01566.d3880fbc5242d59335e33c7485ac692e b/Ch3/datasets/spam/easy_ham/01566.d3880fbc5242d59335e33c7485ac692e new file mode 100644 index 000000000..7390a3d31 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01566.d3880fbc5242d59335e33c7485ac692e @@ -0,0 +1,133 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:35:17 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 00F7516F16 + for ; Fri, 6 Sep 2002 11:34:43 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:34:43 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869cZC28526 for + ; Fri, 6 Sep 2002 10:38:35 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id BAA19420 for + ; Fri, 6 Sep 2002 01:11:19 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n6ao-0004xo-00; Thu, + 05 Sep 2002 17:03:22 -0700 +Received: from dhcp024-208-195-177.indy.rr.com ([24.208.195.177] + helo=burgers.bubbanfriends.org) by usw-sf-list1.sourceforge.net with esmtp + (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n6aK-0004Pd-00 for ; Thu, + 05 Sep 2002 17:02:52 -0700 +Received: from localhost (localhost.localdomain [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id 2F6B64001A1; + Thu, 5 Sep 2002 19:02:54 -0500 (EST) +Received: by burgers.bubbanfriends.org (Postfix, from userid 500) id + D10394001A0; Thu, 5 Sep 2002 19:02:52 -0500 (EST) +Received: from localhost (localhost [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id CEF2CC026A6; + Thu, 5 Sep 2002 19:02:52 -0500 (EST) +From: Mike Burger +To: Michael Duff +Cc: David Rees , + +Subject: Re: [Razor-users] Problem with Razor 2.14 and Spamassassin 2.41 +In-Reply-To: <3D77EACB.7040600@sri.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Virus-Scanned: by AMaViS new-20020517 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 19:02:52 -0500 (EST) +Date: Thu, 5 Sep 2002 19:02:52 -0500 (EST) + +Shouldn't there be a w, somewhere in tehre? Simply setting group and +owner to read and execute won't alleviate a write problem. + +On Thu, 5 Sep 2002, Michael Duff wrote: + +> This is due to insufficient write privileges to the "razor-agent.log" +> file. A quick work-around is to do a "chmod go+rx" on that file (of +> course, it's better to restrict the access as much as possible). +> +> In Agent.pm, when the Razor2::Logger object is created, if it doesn't +> have write permission to the log file it does not succeed. Then, later +> in the code when the log object is used, it fails with the "unblessed" +> error. +> +> Hope this helps, +> Michael Duff +> +> David Rees wrote: +> +> >This is my first time running Razor, heard a lot of good things about it so +> >I thought I'd give it a shot. I also run SpamAssassin so I'd like to +> >integrate the two. +> > +> >I'm not sure if this problem is with SpamAssassin or Razor, so I though I'd +> >shoot the message here first +> > +> >With a freshly installed SpamAssassin 2.41 and Razor 2.14 I'm seeing these +> >messages spit out from spamd: +> > +> >razor2 check skipped: No such file or directory Can't call method "log" on +> >unblessed reference at /usr/lib/perl5/site_perl/5.6.0/Razor2/Client/Agent.pm +> >line 211, line 75. +> > +> >Any ideas? razor seems to run correctly over the command line. +> > +> >Thanks, +> >-Dave +> > +> > +> >------------------------------------------------------- +> >This sf.net email is sponsored by: OSDN - Tired of that same old +> >cell phone? Get a new here for FREE! +> >https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +> >_______________________________________________ +> >Razor-users mailing list +> >Razor-users@lists.sourceforge.net +> >https://lists.sourceforge.net/lists/listinfo/razor-users +> > +> > +> +> +> +> +> +> ------------------------------------------------------- +> This sf.net email is sponsored by: OSDN - Tired of that same old +> cell phone? Get a new here for FREE! +> https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +> _______________________________________________ +> Razor-users mailing list +> Razor-users@lists.sourceforge.net +> https://lists.sourceforge.net/lists/listinfo/razor-users +> + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01567.451fa9142ae23a1c09dbbc87a09c557d b/Ch3/datasets/spam/easy_ham/01567.451fa9142ae23a1c09dbbc87a09c557d new file mode 100644 index 000000000..a7a4e9e2c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01567.451fa9142ae23a1c09dbbc87a09c557d @@ -0,0 +1,106 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:35:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2CDDD16F1A + for ; Fri, 6 Sep 2002 11:34:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:34:48 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869diC28568 for + ; Fri, 6 Sep 2002 10:39:44 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id CAA19573 for + ; Fri, 6 Sep 2002 02:01:17 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n7Nt-0005wQ-00; Thu, + 05 Sep 2002 17:54:05 -0700 +Received: from eclectic.kluge.net ([66.92.69.221]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17n7NE-0004B4-00 for + ; Thu, 05 Sep 2002 17:53:24 -0700 +Received: from eclectic.kluge.net (localhost [127.0.0.1]) by + eclectic.kluge.net (8.12.6/8.12.6) with ESMTP id g860rGnP003311; + Thu, 5 Sep 2002 20:53:16 -0400 +Received: (from felicity@localhost) by eclectic.kluge.net + (8.12.6/8.12.6/Submit) id g860rGsC003309; Thu, 5 Sep 2002 20:53:16 -0400 +From: Theo Van Dinter +To: Mike Burger +Cc: David Rees , + razor-users@lists.sourceforge.net +Subject: Re: [Razor-users] Problem with Razor 2.14 and Spamassassin 2.41 +Message-Id: <20020906005315.GH29663@kluge.net> +References: <20020905160808.B2932@greenhydrant.com> + +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="Enx9fNJ0XV5HaWRu" +Content-Disposition: inline +In-Reply-To: +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 20:53:16 -0400 +Date: Thu, 5 Sep 2002 20:53:16 -0400 + + +--Enx9fNJ0XV5HaWRu +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Thu, Sep 05, 2002 at 06:16:57PM -0500, Mike Burger wrote: +> You might be better asking this on the spamassassin-talk list. The folks= +=20 +> there will almost definitely have an answer for this. + +I posted a fairly lengthy complete answer to this problem and how to +get around it in SA 2.41 on the spamassassin-talk list. :) + +--=20 +Randomly Generated Tagline: +"Good judgment comes from bad experience, and a lot of that comes from + bad judgment." - Zen Musings + +--Enx9fNJ0XV5HaWRu +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9d/x7AuOQUeWAs2MRAtAFAKDAv2ned2UEMjxqPm2PknM7USMCdgCggFr+ +ONI0BQ6UcqCITZKsDjr5hRc= +=Wyzr +-----END PGP SIGNATURE----- + +--Enx9fNJ0XV5HaWRu-- + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01568.ef4cc7ced238f479403332ec27f3e562 b/Ch3/datasets/spam/easy_ham/01568.ef4cc7ced238f479403332ec27f3e562 new file mode 100644 index 000000000..4ce16921f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01568.ef4cc7ced238f479403332ec27f3e562 @@ -0,0 +1,115 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:36:39 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 149AD16F1A + for ; Fri, 6 Sep 2002 11:36:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:36:05 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869rLC29266 for + ; Fri, 6 Sep 2002 10:53:21 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id XAA19026 for + ; Thu, 5 Sep 2002 23:27:21 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n4yr-0007vl-00; Thu, + 05 Sep 2002 15:20:05 -0700 +Received: from cpe3439333139383434.cpe.net.cable.rogers.com + ([24.101.225.150] helo=lserv4.espoircompany.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n4xx-0001y5-00 for ; Thu, + 05 Sep 2002 15:19:09 -0700 +Received: (from uucp@localhost) by lserv4.espoircompany.com + (8.12.5/8.12.5) id g85MIwAw009726; Thu, 5 Sep 2002 18:18:58 -0400 +Cc: +Content-Transfer-Encoding: 7bit +Content-Type: text/plain; charset="us-ascii" +From: "Eugene Chiu" +Importance: Normal +In-Reply-To: <20020905203817.GX8101@kluge.net> +Message-Id: +MIME-Version: 1.0 +Received: from win2kpro ([192.168.100.11] [192.168.100.11]) by + ns1.espoircompany.com (AvMailGate-2.0.0.6) id 09721-136129B5; + Thu, 05 Sep 2002 18:18:44 -0400 +Subject: RE: [Razor-users] spamassassin+razor2 +To: "Theo Van Dinter" +X-Antivirus: OK! AntiVir MailGate Version 2.0.0.6 at lserv4 has not found + any known virus in this email. +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Msmail-Priority: Normal +X-Priority: 3 (Normal) +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 18:18:55 -0400 +Date: Thu, 5 Sep 2002 18:18:55 -0400 + + +Theo, + +Thank you very much, it solves the problem!!!! + +Eugene + + +-----Original Message----- +From: razor-users-admin@example.sourceforge.net +[mailto:razor-users-admin@lists.sourceforge.net]On Behalf Of Theo Van +Dinter +Sent: September 5, 2002 4:38 PM +To: Eugene Chiu +Cc: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] spamassassin+razor2 + + +On Thu, Sep 05, 2002 at 04:27:08PM -0400, Eugene Chiu wrote: +> razor2 check skipped: Bad file descriptor Insecure dependency in open +while runn +> ing setuid at /usr/local/lib/perl5/site_perl/5.6.1/Razor2/Client/Config.pm +line +> 410, line 1. +> >From info@znion.com Thu Sep 5 11:55:15 2002 +> Subject: *****SPAM***** Computer Maintenance +> Folder: /home/eugene/caughtspam +8343 + +It looks like you're running via procmail -- what are the permissions +on procmail? "Insecure dependency" screams "I'm in taint mode!", which +is a typical problem when procmail is setuid/setgid (the permissions +should be 755). + +If this is in fact the problem, an easy solution is to put "DROPPRIVS=yes" +in the procmailrc. :) + +-- +Randomly Generated Tagline: +"The bus had no heat, blew over in the wind and used the driver's legs + as its first line of defense in an accident." - Unknown about the VW Bus + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01569.f7c58b134199bd4d821ca41598e7d79c b/Ch3/datasets/spam/easy_ham/01569.f7c58b134199bd4d821ca41598e7d79c new file mode 100644 index 000000000..d195bb1b3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01569.f7c58b134199bd4d821ca41598e7d79c @@ -0,0 +1,119 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:36:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8E88C16F19 + for ; Fri, 6 Sep 2002 11:36:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:36:02 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869q7C29105 for + ; Fri, 6 Sep 2002 10:52:07 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id AAA19308 for + ; Fri, 6 Sep 2002 00:46:09 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n6AR-0000B9-00; Thu, + 05 Sep 2002 16:36:07 -0700 +Received: from mailgate.sri.com ([128.18.243.11]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n69N-0002sW-00 for ; Thu, + 05 Sep 2002 16:35:01 -0700 +Received: (qmail 6143 invoked from network); 5 Sep 2002 23:34:28 -0000 +Received: from localhost (HELO mailgate.SRI.COM) (127.0.0.1) by + mailgate.sri.com with SMTP; 5 Sep 2002 23:34:28 -0000 +Received: from newmail.sri.com ([128.18.30.43]) by mailgate.SRI.COM (NAVGW + 2.5.1.18) with SMTP id M2002090516342709381 for + ; Thu, 05 Sep 2002 16:34:27 -0700 +Received: from sri.com ([128.18.28.107]) by newmail.sri.com (Netscape + Messaging Server 4.15) with ESMTP id H1ZO6L00.H5K; Thu, 5 Sep 2002 + 16:35:09 -0700 +Message-Id: <3D77EACB.7040600@sri.com> +From: "Michael Duff" +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) + Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: David Rees +Cc: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Problem with Razor 2.14 and Spamassassin 2.41 +References: <20020905160808.B2932@greenhydrant.com> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 05 Sep 2002 16:37:47 -0700 +Date: Thu, 05 Sep 2002 16:37:47 -0700 + +This is due to insufficient write privileges to the "razor-agent.log" +file. A quick work-around is to do a "chmod go+rx" on that file (of +course, it's better to restrict the access as much as possible). + +In Agent.pm, when the Razor2::Logger object is created, if it doesn't +have write permission to the log file it does not succeed. Then, later +in the code when the log object is used, it fails with the "unblessed" +error. + +Hope this helps, +Michael Duff + +David Rees wrote: + +>This is my first time running Razor, heard a lot of good things about it so +>I thought I'd give it a shot. I also run SpamAssassin so I'd like to +>integrate the two. +> +>I'm not sure if this problem is with SpamAssassin or Razor, so I though I'd +>shoot the message here first +> +>With a freshly installed SpamAssassin 2.41 and Razor 2.14 I'm seeing these +>messages spit out from spamd: +> +>razor2 check skipped: No such file or directory Can't call method "log" on +>unblessed reference at /usr/lib/perl5/site_perl/5.6.0/Razor2/Client/Agent.pm +>line 211, line 75. +> +>Any ideas? razor seems to run correctly over the command line. +> +>Thanks, +>-Dave +> +> +>------------------------------------------------------- +>This sf.net email is sponsored by: OSDN - Tired of that same old +>cell phone? Get a new here for FREE! +>https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +>_______________________________________________ +>Razor-users mailing list +>Razor-users@lists.sourceforge.net +>https://lists.sourceforge.net/lists/listinfo/razor-users +> +> + + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01570.8328542217bef2e4eb7ee644609efdbb b/Ch3/datasets/spam/easy_ham/01570.8328542217bef2e4eb7ee644609efdbb new file mode 100644 index 000000000..f752d74e4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01570.8328542217bef2e4eb7ee644609efdbb @@ -0,0 +1,157 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:37:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1E33916F1C + for ; Fri, 6 Sep 2002 11:36:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:36:13 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869vcC29827 for + ; Fri, 6 Sep 2002 10:57:38 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id VAA18337 for + ; Thu, 5 Sep 2002 21:41:22 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n3Eb-0003AT-00; Thu, + 05 Sep 2002 13:28:13 -0700 +Received: from cpe3439333139383434.cpe.net.cable.rogers.com + ([24.101.225.150] helo=lserv4.espoircompany.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n3Dv-00083y-00 for ; Thu, + 05 Sep 2002 13:27:31 -0700 +Received: (from uucp@localhost) by lserv4.espoircompany.com + (8.12.5/8.12.5) id g85KRP6u008914 for razor-users@lists.sourceforge.net; + Thu, 5 Sep 2002 16:27:25 -0400 +Content-Type: multipart/alternative; + boundary="----=_NextPart_000_0018_01C254F9.146CF4F0" +From: "Eugene Chiu" +Message-Id: <001b01c2551a$9c316a30$2801250a@omers.com> +MIME-Version: 1.0 +Received: from WS0571 (omrs [206.222.70.71]) by ns1.espoircompany.com + (AvMailGate-2.0.0.6) id 08905-713A9F70; Thu, 05 Sep 2002 16:27:09 -0400 +To: +X-Antivirus: OK! AntiVir MailGate Version 2.0.0.6 at lserv4 has not found + any known virus in this email. +X-Mailer: Microsoft Outlook Express 5.50.4807.1700 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4807.1700 +X-Msmail-Priority: Normal +X-Priority: 3 +Subject: [Razor-users] spamassassin+razor2 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 16:27:08 -0400 +Date: Thu, 5 Sep 2002 16:27:08 -0400 + +This is a multi-part message in MIME format. + +------=_NextPart_000_0018_01C254F9.146CF4F0 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +Hi all, + +I am wondering if anybody has successfully install a site-wide = +spamassassin+razor2 installation. I am having so much trouble and the = +following is the extract of my procmail.log. + +razor2 check skipped: Bad file descriptor Insecure dependency in open = +while runn +ing setuid at = +/usr/local/lib/perl5/site_perl/5.6.1/Razor2/Client/Config.pm line +410, line 1. +>>From info@znion.com Thu Sep 5 11:55:15 2002 + Subject: *****SPAM***** Computer Maintenance + Folder: /home/eugene/caughtspam = + 8343 + + +In razor-agent.log, I simply get the bootup message and that's it... + +Sep 05 11:55:15.668648 check[8478]: [ 1] [bootup] Logging initiated = +LogDebugLeve +l=3D14 to file:/var/log/razor-agent.log + +Please help. Thanks. + +Eugene + +------=_NextPart_000_0018_01C254F9.146CF4F0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +
Hi all,
+
 
+
I am wondering if anybody has = +successfully install=20 +a site-wide spamassassin+razor2 installation. I am having so much = +trouble and=20 +the following is the extract of my procmail.log.
+
 
+
razor2 check skipped: Bad file = +descriptor Insecure=20 +dependency in open while runn
ing setuid at=20 +/usr/local/lib/perl5/site_perl/5.6.1/Razor2/Client/Config.pm = +line
410,=20 +<GEN23> line 1.
From info@znion.com  Thu Sep  5 = +11:55:15=20 +2002
 Subject: *****SPAM***** Computer Maintenance
  = +Folder:=20 +/home/eugene/caughtspam        &n= +bsp;           &nb= +sp;           &nbs= +p;        =20 +8343
+
 
+
 
+
In razor-agent.log, I simply get the = +bootup message=20 +and that's it...
+
 
+
Sep 05 11:55:15.668648 check[8478]: [ = +1] [bootup]=20 +Logging initiated LogDebugLeve
l=3D14 to=20 +file:/var/log/razor-agent.log
+
 
+
Please help. Thanks.
+
 
+
Eugene
+ +------=_NextPart_000_0018_01C254F9.146CF4F0-- + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01571.a12d989267cd61ed856ebc41cc9075bc b/Ch3/datasets/spam/easy_ham/01571.a12d989267cd61ed856ebc41cc9075bc new file mode 100644 index 000000000..1ccbf5f5b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01571.a12d989267cd61ed856ebc41cc9075bc @@ -0,0 +1,116 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:37:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B320116F56 + for ; Fri, 6 Sep 2002 11:36:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:36:31 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869uuC29750 for + ; Fri, 6 Sep 2002 10:56:56 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id VAA18431 for + ; Thu, 5 Sep 2002 21:46:27 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n3P7-0005XY-00; Thu, + 05 Sep 2002 13:39:05 -0700 +Received: from eclectic.kluge.net ([66.92.69.221]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17n3OU-0004Ei-00 for + ; Thu, 05 Sep 2002 13:38:26 -0700 +Received: from eclectic.kluge.net (localhost [127.0.0.1]) by + eclectic.kluge.net (8.12.6/8.12.6) with ESMTP id g85KcJnP022347; + Thu, 5 Sep 2002 16:38:19 -0400 +Received: (from felicity@localhost) by eclectic.kluge.net + (8.12.6/8.12.6/Submit) id g85KcISF022345; Thu, 5 Sep 2002 16:38:18 -0400 +From: Theo Van Dinter +To: Eugene Chiu +Cc: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] spamassassin+razor2 +Message-Id: <20020905203817.GX8101@kluge.net> +References: <001b01c2551a$9c316a30$2801250a@omers.com> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="4Ycl1UgPPPgGZoSL" +Content-Disposition: inline +In-Reply-To: <001b01c2551a$9c316a30$2801250a@omers.com> +User-Agent: Mutt/1.4i +X-GPG-Keyserver: http://wwwkeys.pgp.net +X-GPG-Keynumber: 0xE580B363 +X-GPG-Fingerprint: 75B1 F6D0 8368 38E7 A4C5 F6C2 02E3 9051 E580 B363 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 16:38:18 -0400 +Date: Thu, 5 Sep 2002 16:38:18 -0400 + + +--4Ycl1UgPPPgGZoSL +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +On Thu, Sep 05, 2002 at 04:27:08PM -0400, Eugene Chiu wrote: +> razor2 check skipped: Bad file descriptor Insecure dependency in open whi= +le runn +> ing setuid at /usr/local/lib/perl5/site_perl/5.6.1/Razor2/Client/Config.p= +m line +> 410, line 1. +> >From info@znion.com Thu Sep 5 11:55:15 2002 +> Subject: *****SPAM***** Computer Maintenance +> Folder: /home/eugene/caughtspam = + 8343 + +It looks like you're running via procmail -- what are the permissions +on procmail? "Insecure dependency" screams "I'm in taint mode!", which +is a typical problem when procmail is setuid/setgid (the permissions +should be 755). + +If this is in fact the problem, an easy solution is to put "DROPPRIVS=3Dyes" +in the procmailrc. :) + +--=20 +Randomly Generated Tagline: +"The bus had no heat, blew over in the wind and used the driver's legs + as its first line of defense in an accident." - Unknown about the VW Bus + +--4Ycl1UgPPPgGZoSL +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iD8DBQE9d8C5AuOQUeWAs2MRAhaSAJ9AxnypfiK/+5I6gxO8sTauLOJ3wgCg0N5b +HPwI8USX9YeAQF6GE4bzmgc= +=6aCu +-----END PGP SIGNATURE----- + +--4Ycl1UgPPPgGZoSL-- + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01572.75046f3a9b60454aa0432ddfe764154d b/Ch3/datasets/spam/easy_ham/01572.75046f3a9b60454aa0432ddfe764154d new file mode 100644 index 000000000..e5c73ee99 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01572.75046f3a9b60454aa0432ddfe764154d @@ -0,0 +1,87 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:38:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 90EA416F67 + for ; Fri, 6 Sep 2002 11:36:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:36:34 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869rIC29258 for + ; Fri, 6 Sep 2002 10:53:18 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id XAA19018 for + ; Thu, 5 Sep 2002 23:26:30 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n4rB-00062V-00; Thu, + 05 Sep 2002 15:12:09 -0700 +Received: from rancor.jedi.net ([199.233.91.1]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n4qe-0007ad-00 for ; Thu, + 05 Sep 2002 15:11:36 -0700 +Received: (from josh@localhost) by rancor.jedi.net (8.11.6/8.11.6) id + g85MBWJ07141 for razor-users@lists.sourceforge.net; Thu, 5 Sep 2002 + 17:11:32 -0500 +From: Josh Hildebrand +To: razor-users@example.sourceforge.net +Message-Id: <20020905221132.GB6886@jedi.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.3.25i +Subject: [Razor-users] removing Razor1 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 17:11:32 -0500 +Date: Thu, 5 Sep 2002 17:11:32 -0500 + +Forgive me for being a partially stupid end-user of this fantastic +spam fighting software. + +I was looking at my spamd debug output today, and noticed that it ran +through Razor2 stuff, and then it ran through dccproc, and then it tried to +go through old Razor1 stuff. I'm assuming (and please correct me if I'm +wrong) that Razor1 is out dated and was to be replaced entirely by Razor2. + +If that's the case, can someone please point me to something that explains +how to remove Razor1 from my system? I don't see a point in envoking it. +Especially when it appears to error out on me. + +debug: Razor1 is available +debug: entering helper-app run mode +debug: Razor Agents 1.19, protocol version 2. +debug: 170803 seconds before closest server discovery +debug: Agent terminated +Problem while trying to load Razor1: Permission denied at +/usr/local/lib/perl5/site_perl/5.6.1/Mail/SpamAssassin/Dns.pm line 288. +debug: leaving helper-app run mode + +Thanks! + +-- +Josh Hildebrand Email: josh@jedi.net + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01573.5f924ad49f0980813de1a9d02dc958d1 b/Ch3/datasets/spam/easy_ham/01573.5f924ad49f0980813de1a9d02dc958d1 new file mode 100644 index 000000000..61e6e886b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01573.5f924ad49f0980813de1a9d02dc958d1 @@ -0,0 +1,104 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:38:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C911F16F6A + for ; Fri, 6 Sep 2002 11:36:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:36:38 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869q5C29102 for + ; Fri, 6 Sep 2002 10:52:05 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id AAA19236 for + ; Fri, 6 Sep 2002 00:26:22 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n5s1-00027Y-00; Thu, + 05 Sep 2002 16:17:05 -0700 +Received: from dhcp024-208-195-177.indy.rr.com ([24.208.195.177] + helo=burgers.bubbanfriends.org) by usw-sf-list1.sourceforge.net with esmtp + (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n5rv-0000SA-00 for ; Thu, + 05 Sep 2002 16:16:59 -0700 +Received: from localhost (localhost.localdomain [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id D7F954001A1; + Thu, 5 Sep 2002 18:16:59 -0500 (EST) +Received: by burgers.bubbanfriends.org (Postfix, from userid 500) id + A7BDE4001A0; Thu, 5 Sep 2002 18:16:58 -0500 (EST) +Received: from localhost (localhost [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id A5936C026A6; + Thu, 5 Sep 2002 18:16:58 -0500 (EST) +From: Mike Burger +To: David Rees +Cc: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Problem with Razor 2.14 and Spamassassin 2.41 +In-Reply-To: <20020905160808.B2932@greenhydrant.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Virus-Scanned: by AMaViS new-20020517 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 18:16:57 -0500 (EST) +Date: Thu, 5 Sep 2002 18:16:57 -0500 (EST) + +You might be better asking this on the spamassassin-talk list. The folks +there will almost definitely have an answer for this. + +On Thu, 5 Sep 2002, David Rees wrote: + +> This is my first time running Razor, heard a lot of good things about it so +> I thought I'd give it a shot. I also run SpamAssassin so I'd like to +> integrate the two. +> +> I'm not sure if this problem is with SpamAssassin or Razor, so I though I'd +> shoot the message here first +> +> With a freshly installed SpamAssassin 2.41 and Razor 2.14 I'm seeing these +> messages spit out from spamd: +> +> razor2 check skipped: No such file or directory Can't call method "log" on +> unblessed reference at /usr/lib/perl5/site_perl/5.6.0/Razor2/Client/Agent.pm +> line 211, line 75. +> +> Any ideas? razor seems to run correctly over the command line. +> +> Thanks, +> -Dave +> +> +> ------------------------------------------------------- +> This sf.net email is sponsored by: OSDN - Tired of that same old +> cell phone? Get a new here for FREE! +> https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +> _______________________________________________ +> Razor-users mailing list +> Razor-users@lists.sourceforge.net +> https://lists.sourceforge.net/lists/listinfo/razor-users +> + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01574.5c7050ec28a486ed83aac7d6ee562038 b/Ch3/datasets/spam/easy_ham/01574.5c7050ec28a486ed83aac7d6ee562038 new file mode 100644 index 000000000..4959db09a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01574.5c7050ec28a486ed83aac7d6ee562038 @@ -0,0 +1,73 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:38:50 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F02D316F6C + for ; Fri, 6 Sep 2002 11:37:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:37:31 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869pxC29081 for + ; Fri, 6 Sep 2002 10:51:59 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id AAA19281 for + ; Fri, 6 Sep 2002 00:37:58 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n66Y-00063u-00; Thu, + 05 Sep 2002 16:32:06 -0700 +Received: from [208.48.139.185] (helo=forty.greenhydrant.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n662-000214-00 for ; Thu, + 05 Sep 2002 16:31:34 -0700 +Received: (qmail 3337 invoked by uid 501); 5 Sep 2002 23:31:28 -0000 +From: David Rees +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Problem with Razor 2.14 and Spamassassin 2.41 +Message-Id: <20020905163128.A3322@greenhydrant.com> +Mail-Followup-To: David Rees , + razor-users@lists.sourceforge.net +References: <20020905160808.B2932@greenhydrant.com> + +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: ; + from mburger@bubbanfriends.org on Thu, Sep 05, 2002 at 06:16:57PM -0500 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 16:31:28 -0700 +Date: Thu, 5 Sep 2002 16:31:28 -0700 + +On Thu, Sep 05, 2002 at 06:16:57PM -0500, Mike Burger wrote: +> You might be better asking this on the spamassassin-talk list. The folks +> there will almost definitely have an answer for this. + +Thanks, I just posted a similar message there. + +-Dave + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01575.9eec6737661d3d57e8b3ca91200d7ef7 b/Ch3/datasets/spam/easy_ham/01575.9eec6737661d3d57e8b3ca91200d7ef7 new file mode 100644 index 000000000..ad7cb4cbf --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01575.9eec6737661d3d57e8b3ca91200d7ef7 @@ -0,0 +1,78 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:39:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5655B16F6E + for ; Fri, 6 Sep 2002 11:37:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:37:44 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869qFC29130 for + ; Fri, 6 Sep 2002 10:52:15 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id AAA19226 for + ; Fri, 6 Sep 2002 00:20:31 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n5kF-0006Rr-00; Thu, + 05 Sep 2002 16:09:03 -0700 +Received: from [208.48.139.185] (helo=forty.greenhydrant.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n5jR-00020C-00 for ; Thu, + 05 Sep 2002 16:08:13 -0700 +Received: (qmail 3015 invoked by uid 501); 5 Sep 2002 23:08:08 -0000 +From: David Rees +To: razor-users@example.sourceforge.net +Message-Id: <20020905160808.B2932@greenhydrant.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +Subject: [Razor-users] Problem with Razor 2.14 and Spamassassin 2.41 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 16:08:08 -0700 +Date: Thu, 5 Sep 2002 16:08:08 -0700 + +This is my first time running Razor, heard a lot of good things about it so +I thought I'd give it a shot. I also run SpamAssassin so I'd like to +integrate the two. + +I'm not sure if this problem is with SpamAssassin or Razor, so I though I'd +shoot the message here first + +With a freshly installed SpamAssassin 2.41 and Razor 2.14 I'm seeing these +messages spit out from spamd: + +razor2 check skipped: No such file or directory Can't call method "log" on +unblessed reference at /usr/lib/perl5/site_perl/5.6.0/Razor2/Client/Agent.pm +line 211, line 75. + +Any ideas? razor seems to run correctly over the command line. + +Thanks, +-Dave + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01576.6b733eba3bd6a287e0ef2a99b9afbd68 b/Ch3/datasets/spam/easy_ham/01576.6b733eba3bd6a287e0ef2a99b9afbd68 new file mode 100644 index 000000000..5eaffbfa5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01576.6b733eba3bd6a287e0ef2a99b9afbd68 @@ -0,0 +1,141 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 6 11:39:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0F94516F1E + for ; Fri, 6 Sep 2002 11:37:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:37:46 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869r8C29224 for + ; Fri, 6 Sep 2002 10:53:08 +0100 +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by webnote.net (8.9.3/8.9.3) with ESMTP id XAA19084 for + ; Thu, 5 Sep 2002 23:39:45 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17n5AT-0003uw-00; Thu, + 05 Sep 2002 15:32:05 -0700 +Received: from rancor.jedi.net ([199.233.91.1]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17n5AL-0003az-00 for ; Thu, + 05 Sep 2002 15:31:57 -0700 +Received: (from josh@localhost) by rancor.jedi.net (8.11.6/8.11.6) id + g85MVro08021 for razor-users@lists.sourceforge.net; Thu, 5 Sep 2002 + 17:31:53 -0500 +From: Josh Hildebrand +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] spamassassin+razor2 +Message-Id: <20020905223153.GB7798@jedi.net> +References: <20020905203817.GX8101@kluge.net> + +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: +User-Agent: Mutt/1.3.25i +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 5 Sep 2002 17:31:53 -0500 +Date: Thu, 5 Sep 2002 17:31:53 -0500 + +No as a answer to this FAQ, would the recommended answer be to + +a) chmod 755 /usr/bin/procmail + +or + +b) add DROPPRIVS=yes to /etc/procmailrc + +or + +c) all of the above + + +I ask because I just did B, and my procmail is still: +-rwsr-sr-x 1 root mail 67988 Jul 24 15:43 /usr/bin/procmail +But things seem to be working, so far.. + + +On Thu, Sep 05, 2002 at 06:18:55PM -0400, Eugene Chiu wrote: +> +> Theo, +> +> Thank you very much, it solves the problem!!!! +> +> Eugene +> +> +> -----Original Message----- +> From: razor-users-admin@example.sourceforge.net +> [mailto:razor-users-admin@lists.sourceforge.net]On Behalf Of Theo Van +> Dinter +> Sent: September 5, 2002 4:38 PM +> To: Eugene Chiu +> Cc: razor-users@example.sourceforge.net +> Subject: Re: [Razor-users] spamassassin+razor2 +> +> +> On Thu, Sep 05, 2002 at 04:27:08PM -0400, Eugene Chiu wrote: +> > razor2 check skipped: Bad file descriptor Insecure dependency in open +> while runn +> > ing setuid at /usr/local/lib/perl5/site_perl/5.6.1/Razor2/Client/Config.pm +> line +> > 410, line 1. +> > >From info@znion.com Thu Sep 5 11:55:15 2002 +> > Subject: *****SPAM***** Computer Maintenance +> > Folder: /home/eugene/caughtspam +> 8343 +> +> It looks like you're running via procmail -- what are the permissions +> on procmail? "Insecure dependency" screams "I'm in taint mode!", which +> is a typical problem when procmail is setuid/setgid (the permissions +> should be 755). +> +> If this is in fact the problem, an easy solution is to put "DROPPRIVS=yes" +> in the procmailrc. :) +> +> -- +> Randomly Generated Tagline: +> "The bus had no heat, blew over in the wind and used the driver's legs +> as its first line of defense in an accident." - Unknown about the VW Bus +> +> +> +> ------------------------------------------------------- +> This sf.net email is sponsored by: OSDN - Tired of that same old +> cell phone? Get a new here for FREE! +> https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +> _______________________________________________ +> Razor-users mailing list +> Razor-users@lists.sourceforge.net +> https://lists.sourceforge.net/lists/listinfo/razor-users + +-- +Josh Hildebrand Email: josh@jedi.net +Digital Sluice Pager: http://www.digitalsluice.com/josh/pager +Phone: 512-255-9797 eFax: 413-691-9191 + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01577.481ae48bcd887cf4af60219de12f42a1 b/Ch3/datasets/spam/easy_ham/01577.481ae48bcd887cf4af60219de12f42a1 new file mode 100644 index 000000000..dac32d055 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01577.481ae48bcd887cf4af60219de12f42a1 @@ -0,0 +1,82 @@ +From razor-users-admin@lists.sourceforge.net Tue Sep 10 11:22:49 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AE24316F03 + for ; Tue, 10 Sep 2002 11:22:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:22:48 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g89LI2C32514 for ; Mon, 9 Sep 2002 22:18:02 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17oVoF-0003ez-00; Mon, + 09 Sep 2002 14:11:03 -0700 +Received: from ilike.disaster.com ([205.139.198.206] + helo=greeneggsnspam.com) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17oVnG-0007RM-00 for + ; Mon, 09 Sep 2002 14:10:02 -0700 +Received: from waltflannigan.darkphyber.com [205.139.198.39] by + greeneggsnspam.com [205.139.198.206] with SMTP (MDaemon.PRO.PRO.v6.0.0m.R) + for ; Mon, 09 Sep 2002 17:10:24 -0400 +Message-Id: <5.1.0.14.2.20020909170821.01d096c8@mailhost.disaster.com> +X-Sender: rob@darkphyber.com@mail.darkphyber.com +X-Mailer: QUALCOMM Windows Eudora Version 5.1 +To: razor-users@example.sourceforge.net +From: Rob +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii"; format=flowed +X-Authenticated-Sender: rob@darkphyber.com +X-Mdremoteip: 205.139.198.39 +X-Return-Path: rob@darkphyber.com +X-Mdaemon-Deliver-To: razor-users@example.sourceforge.net +Subject: [Razor-users] log problem +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 09 Sep 2002 17:10:23 -0400 +Date: Mon, 09 Sep 2002 17:10:23 -0400 + +I just set up razor and spamassassin, but I keep getting this error in my +mail log file + +razor2 check skipped: No such file or directory Can't call method "log" on +unblessed reference at +/usr/local/lib/perl5/site_perl/5.8.0/Razor2/Client/Agent.pm line 212. + +I have looked through the archived list and the only thing I have seen +about this error is a possible permission problem on the log file. +I did what it said in the archives, basically change the permission on the +file but its still no go. + +Any other help would be appreciated, maybe I'm missing something. +something I forgot to run or do. + + +rob + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01578.c6f29a4932ca0d892e409d8233619022 b/Ch3/datasets/spam/easy_ham/01578.c6f29a4932ca0d892e409d8233619022 new file mode 100644 index 000000000..dce00bbac --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01578.c6f29a4932ca0d892e409d8233619022 @@ -0,0 +1,80 @@ +From razor-users-admin@lists.sourceforge.net Tue Sep 10 11:22:53 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BF4A116F03 + for ; Tue, 10 Sep 2002 11:22:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:22:52 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g89LqYC01056 for ; Mon, 9 Sep 2002 22:52:34 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17oWM7-0004YZ-00; Mon, + 09 Sep 2002 14:46:03 -0700 +Received: from [208.48.139.185] (helo=forty.greenhydrant.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17oWL9-0002FQ-00 for ; Mon, + 09 Sep 2002 14:45:03 -0700 +Received: (qmail 28567 invoked by uid 501); 9 Sep 2002 21:44:57 -0000 +From: David Rees +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] log problem +Message-Id: <20020909144457.A28394@greenhydrant.com> +Mail-Followup-To: David Rees , + razor-users@lists.sourceforge.net +References: <5.1.0.14.2.20020909170821.01d096c8@mailhost.disaster.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <5.1.0.14.2.20020909170821.01d096c8@mailhost.disaster.com>; + from rob@darkphyber.com on Mon, Sep 09, 2002 at 05:10:23PM -0400 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 9 Sep 2002 14:44:57 -0700 +Date: Mon, 9 Sep 2002 14:44:57 -0700 + +On Mon, Sep 09, 2002 at 05:10:23PM -0400, Rob wrote: +> I just set up razor and spamassassin, but I keep getting this error in my +> mail log file +> +> razor2 check skipped: No such file or directory Can't call method "log" on +> unblessed reference at +> /usr/local/lib/perl5/site_perl/5.8.0/Razor2/Client/Agent.pm line 212. +> +> I have looked through the archived list and the only thing I have seen +> about this error is a possible permission problem on the log file. + +Yeah, the answer isn't here in this list, it's on the spamassassin-users +list. I just asked it late last week. + +Hint: Add -H to the spamd startup flags using the latest version of +spamassassin. + +-Dave + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01579.434bedd57f027223f76db3d11f4d960e b/Ch3/datasets/spam/easy_ham/01579.434bedd57f027223f76db3d11f4d960e new file mode 100644 index 000000000..69dc116c6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01579.434bedd57f027223f76db3d11f4d960e @@ -0,0 +1,100 @@ +From razor-users-admin@lists.sourceforge.net Tue Sep 10 11:22:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C1A6316F03 + for ; Tue, 10 Sep 2002 11:22:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:22:58 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8A0ABC05407 for ; Tue, 10 Sep 2002 01:10:13 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17oYT5-0002MD-00; Mon, + 09 Sep 2002 17:01:23 -0700 +Received: from dhcp024-208-195-177.indy.rr.com ([24.208.195.177] + helo=burgers.bubbanfriends.org) by usw-sf-list1.sourceforge.net with esmtp + (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17oYSM-0004Vs-00 for ; Mon, + 09 Sep 2002 17:00:39 -0700 +Received: from localhost (localhost.localdomain [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id EC7314B7E7D; + Mon, 9 Sep 2002 19:00:40 -0500 (EST) +Received: by burgers.bubbanfriends.org (Postfix, from userid 500) id + B19A14B7E7B; Mon, 9 Sep 2002 19:00:39 -0500 (EST) +Received: from localhost (localhost [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id AFD51C00440; + Mon, 9 Sep 2002 19:00:39 -0500 (EST) +From: Mike Burger +To: David Rees +Cc: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] log problem +In-Reply-To: <20020909144457.A28394@greenhydrant.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Virus-Scanned: by AMaViS new-20020517 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 9 Sep 2002 19:00:39 -0500 (EST) +Date: Mon, 9 Sep 2002 19:00:39 -0500 (EST) + +Or, you could do this. + +On Mon, 9 Sep 2002, David Rees wrote: + +> On Mon, Sep 09, 2002 at 05:10:23PM -0400, Rob wrote: +> > I just set up razor and spamassassin, but I keep getting this error in my +> > mail log file +> > +> > razor2 check skipped: No such file or directory Can't call method "log" on +> > unblessed reference at +> > /usr/local/lib/perl5/site_perl/5.8.0/Razor2/Client/Agent.pm line 212. +> > +> > I have looked through the archived list and the only thing I have seen +> > about this error is a possible permission problem on the log file. +> +> Yeah, the answer isn't here in this list, it's on the spamassassin-users +> list. I just asked it late last week. +> +> Hint: Add -H to the spamd startup flags using the latest version of +> spamassassin. +> +> -Dave +> +> +> ------------------------------------------------------- +> This sf.net email is sponsored by: OSDN - Tired of that same old +> cell phone? Get a new here for FREE! +> https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +> _______________________________________________ +> Razor-users mailing list +> Razor-users@lists.sourceforge.net +> https://lists.sourceforge.net/lists/listinfo/razor-users +> + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01580.18d5a4c41d28019ab90c111133a07d6a b/Ch3/datasets/spam/easy_ham/01580.18d5a4c41d28019ab90c111133a07d6a new file mode 100644 index 000000000..40e827c92 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01580.18d5a4c41d28019ab90c111133a07d6a @@ -0,0 +1,104 @@ +From razor-users-admin@lists.sourceforge.net Tue Sep 10 11:23:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4028816F03 + for ; Tue, 10 Sep 2002 11:23:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:23:01 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8A0ABC05408 for ; Tue, 10 Sep 2002 01:10:13 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17oYT2-0002IO-00; Mon, + 09 Sep 2002 17:01:20 -0700 +Received: from dhcp024-208-195-177.indy.rr.com ([24.208.195.177] + helo=burgers.bubbanfriends.org) by usw-sf-list1.sourceforge.net with esmtp + (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17oYS9-0004RK-00 for ; Mon, + 09 Sep 2002 17:00:25 -0700 +Received: from localhost (localhost.localdomain [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id DBFE14B7E7D; + Mon, 9 Sep 2002 19:00:24 -0500 (EST) +Received: by burgers.bubbanfriends.org (Postfix, from userid 500) id + 7EA244B7E7B; Mon, 9 Sep 2002 19:00:23 -0500 (EST) +Received: from localhost (localhost [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id 7CCFAC0269A; + Mon, 9 Sep 2002 19:00:23 -0500 (EST) +From: Mike Burger +To: Rob +Cc: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] log problem +In-Reply-To: <5.1.0.14.2.20020909170821.01d096c8@mailhost.disaster.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Virus-Scanned: by AMaViS new-20020517 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 9 Sep 2002 19:00:23 -0500 (EST) +Date: Mon, 9 Sep 2002 19:00:23 -0500 (EST) + +It's a permissions issue on the razor log file. SpamAssassin runs setuid +to the user to whom mail is being delivered. + +You'll need to make the razor log file world writable. + +On Mon, 9 Sep 2002, Rob wrote: + +> I just set up razor and spamassassin, but I keep getting this error in my +> mail log file +> +> razor2 check skipped: No such file or directory Can't call method "log" on +> unblessed reference at +> /usr/local/lib/perl5/site_perl/5.8.0/Razor2/Client/Agent.pm line 212. +> +> I have looked through the archived list and the only thing I have seen +> about this error is a possible permission problem on the log file. +> I did what it said in the archives, basically change the permission on the +> file but its still no go. +> +> Any other help would be appreciated, maybe I'm missing something. +> something I forgot to run or do. +> +> +> rob +> +> +> +> +> ------------------------------------------------------- +> This sf.net email is sponsored by: OSDN - Tired of that same old +> cell phone? Get a new here for FREE! +> https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +> _______________________________________________ +> Razor-users mailing list +> Razor-users@lists.sourceforge.net +> https://lists.sourceforge.net/lists/listinfo/razor-users +> + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01581.83fd47e65808dbeddb6340cfcf40b44f b/Ch3/datasets/spam/easy_ham/01581.83fd47e65808dbeddb6340cfcf40b44f new file mode 100644 index 000000000..34de360e3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01581.83fd47e65808dbeddb6340cfcf40b44f @@ -0,0 +1,69 @@ +From razor-users-admin@lists.sourceforge.net Tue Sep 10 11:23:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 1441816F03 + for ; Tue, 10 Sep 2002 11:23:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:23:06 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8A0xHC09906 for ; Tue, 10 Sep 2002 01:59:17 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17oZED-0000bQ-00; Mon, + 09 Sep 2002 17:50:05 -0700 +Received: from adsl-67-118-106-171.dsl.snfc21.pacbell.net + ([67.118.106.171] helo=frontier.limbo.net) by usw-sf-list1.sourceforge.net + with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17oZDS-0005As-00 for + ; Mon, 09 Sep 2002 17:49:18 -0700 +Received: by frontier.limbo.net (Postfix, from userid 500) id 81E9230E941; + Mon, 9 Sep 2002 17:53:08 -0700 (PDT) +From: Chip Paswater +To: razor-users@example.sourceforge.net +Message-Id: <20020910005308.GA13905@frontier.limbo.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.4i +X-MY-PGP-Fingerprint: 4D42 5220 2EB4 21F4 39C4 BDDA C948 F15C DE2E F798 +Subject: [Razor-users] Viewing my trust rating? +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 9 Sep 2002 17:53:08 -0700 +Date: Mon, 9 Sep 2002 17:53:08 -0700 + +Hey Folks + +I know this question gets asked a lot, but I haven't seen an answer lately. + +Any idea when a user will be able to view his own trust rating? What are +the plans for this? Will it be built into the client, web based, emailed +to you nightly? If you could share your brainstorming on the subject, I +would greatly appreciate it. + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01582.251d2e9ec5028a548d6ddfa3dffe86c2 b/Ch3/datasets/spam/easy_ham/01582.251d2e9ec5028a548d6ddfa3dffe86c2 new file mode 100644 index 000000000..0f2a1ea5f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01582.251d2e9ec5028a548d6ddfa3dffe86c2 @@ -0,0 +1,74 @@ +From razor-users-admin@lists.sourceforge.net Tue Sep 10 11:23:26 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id AE2C316F03 + for ; Tue, 10 Sep 2002 11:23:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 10 Sep 2002 11:23:25 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8A47IC16527 for ; Tue, 10 Sep 2002 05:07:18 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17oc9C-0002gn-00; Mon, + 09 Sep 2002 20:57:06 -0700 +Received: from r2d2.easydns.com ([216.220.40.242] helo=mail.easydns.com) + by usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) + id 17oc8x-0002JI-00 for ; + Mon, 09 Sep 2002 20:56:51 -0700 +Received: from jabba (localhost [127.0.0.1]) by mail.easydns.com + (8.11.3/8.11.0) with SMTP id g8A3ulA25617 for + ; Mon, 9 Sep 2002 23:56:47 -0400 +Message-Id: <006f01c2587d$058c6b00$c03afea9@viebrock.ca> +Reply-To: "Colin Viebrock" +From: "Colin Viebrock" +To: +Organization: easyDNS Technologies Inc. +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4807.1700 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +Subject: [Razor-users] Bug? +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 9 Sep 2002 23:49:10 -0400 +Date: Mon, 9 Sep 2002 23:49:10 -0400 + +Does anyone else experience this: + +http://sf.net/tracker/index.php?func=detail&aid=600311&group_id=3978&atid=10 +3978 + +Also, it seems that the bugs tracker on SF isn't used very much ... is there +somewhere else to post bugs? + +- Colin + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01583.588f335629805c17aaa6b880c2f586c7 b/Ch3/datasets/spam/easy_ham/01583.588f335629805c17aaa6b880c2f586c7 new file mode 100644 index 000000000..185a61f3f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01583.588f335629805c17aaa6b880c2f586c7 @@ -0,0 +1,95 @@ +From razor-users-admin@lists.sourceforge.net Wed Sep 11 13:41:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id EBC1E16F17 + for ; Wed, 11 Sep 2002 13:41:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 11 Sep 2002 13:41:27 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8AHRIC09121 for ; Tue, 10 Sep 2002 18:27:18 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17oogF-0000Hm-00; Tue, + 10 Sep 2002 10:20:03 -0700 +Received: from relay1.2secure.net ([216.136.83.202] helo=relay1) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17oofQ-0000EJ-00 for + ; Tue, 10 Sep 2002 10:19:13 -0700 +Received: from ppp-65-91-222-124.mclass.broadwing.net [65.91.222.124] by + relay1 with XWall v3.21 ; Tue, 10 Sep 2002 13:18:34 -0400 +Received: from omega.paradigm-omega.net (localhost.localdomain + [127.0.0.1]) by omega.paradigm-omega.net (Postfix) with ESMTP id + B9AB19FB5B for ; Tue, 10 Sep 2002 + 10:18:49 -0700 (PDT) +Content-Type: text/plain; charset="iso-8859-15" +Organization: Paradigm-Omega, LLC +To: razor-users@example.sourceforge.net +X-Mailer: KMail [version 1.3.1] +X-PGP-Key-1: 8828 DA31 F788 2F87 CE6D F563 5568 BABC 647E C336 +X-PGP-Key_2: D152 7DD6 C0E8 F2CB 4CD3 B5D7 5F67 B017 38D0 A14E +X-Copyright(C): 2002 +X-Owner: Paradigm-Omega,LLC(tm) +X-All-Rights: Reserved +X-Dissemination: Prohibited +X-Classification: Confidential/Proprietary +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +From: Robin Lynn Frank +Message-Id: <1031678328.10653.TMDA@omega.paradigm-omega.net> +X-Delivery-Agent: TMDA/0.62 +X-Tmda-Fingerprint: laLk5EWV9gBsZbtuPDZhwPTNh80 +X-Identifier: Robin Lynn Frank +Reply-To: Robin Lynn Frank +Subject: [Razor-users] How to test razor +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 10 Sep 2002 10:18:40 -0700 +Date: Tue, 10 Sep 2002 10:18:40 -0700 + +I have a spamd/spamc/razor/dcc setup. + +My razor logs are full of: + +Sep 10 09:48:48.411339 check[10200]: [ 1] [bootup] Logging initiated +LogDebugLevel=3 to file:/home/omega13/.razor/razor-agent.log +Sep 10 09:48:49.391309 check[10200]: [ 3] mail 1 is not known spam. + +The problem is that all the entries show "is not known spam" I can't believe +I'm that lucky. So, how do I test to see that my razor installation is +working properly. I've been up to my ears in documentation for the past few +days, so, if the reference is easy, just point me to it. Otherwise a brief +hint on how to, would be appreciated. +-- +Robin Lynn Frank +Paradigm-Omega, LLC +================================== +Gandalf fell at Khazadum. +Sheridan fell at Z'ha'dum. +Avoid high places in +locations ending in "dum" + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01584.c2bc0fb5826431ed3df58a0fc968c068 b/Ch3/datasets/spam/easy_ham/01584.c2bc0fb5826431ed3df58a0fc968c068 new file mode 100644 index 000000000..88ea52bba --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01584.c2bc0fb5826431ed3df58a0fc968c068 @@ -0,0 +1,185 @@ +From razor-users-admin@lists.sourceforge.net Thu Sep 12 18:44:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5A6B916F03 + for ; Thu, 12 Sep 2002 18:44:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 12 Sep 2002 18:44:25 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8CGEGC06093 for ; Thu, 12 Sep 2002 17:14:17 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pWUu-0003nn-00; Thu, + 12 Sep 2002 09:07:16 -0700 +Received: from wow.atlasta.net ([12.129.13.20]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17pWUY-00030r-00 for ; Thu, + 12 Sep 2002 09:06:54 -0700 +Received: from wow.atlasta.net (localhost.atlasta.net [127.0.0.1]) by + wow.atlasta.net (8.12.2/8.12.2) with ESMTP id g8CG6rJI034502; + Thu, 12 Sep 2002 09:06:53 -0700 (PDT) +Received: from localhost (drais@localhost) by wow.atlasta.net + (8.12.2/8.12.2/Submit) with ESMTP id g8CG6rKT034499; Thu, 12 Sep 2002 + 09:06:53 -0700 (PDT) +From: David Raistrick +To: "Rose, Bobby" +Cc: razor-users@example.sourceforge.net +In-Reply-To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Subject: [Razor-users] no positive razor hits? +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 12 Sep 2002 09:06:53 -0700 (PDT) +Date: Thu, 12 Sep 2002 09:06:53 -0700 (PDT) + +On Tue, 10 Sep 2002, Rose, Bobby wrote: + +> Use the sample-spam.txt from Spamassassin and do a "razor-check -d < +> sample-spam.txt" + +Interesting. I just upgraded to razor-agents 2.14 yesterday, ran +razor-admin -register. I to am seeing that I'm not getting any positives +from razor. Including the sample-spam.txt's from spamassassin 2.41, 2.31, +and 2.20. + +Any suggestions? thanks. + +-d output below + + + +maxwell:/var/qmail/alias/gb-users%# razor-check -d < +/usr/local/src/Mail-SpamAssassin-2.20/sample-spam.txt + Razor-Log: Computed razorhome from env: /root/.razor + Razor-Log: Found razorhome: /root/.razor + Razor-Log: No /root/.razor/razor-agent.conf found, skipping. + Razor-Log: No razor-agent.conf found, using defaults. +Sep 12 12:04:13.785852 check[52238]: [ 1] [bootup] Logging initiated +LogDebugLevel=9 to stdout +Sep 12 12:04:13.787113 check[52238]: [ 5] computed razorhome=/root/.razor, +conf=, ident=/root/.razor/identity-ruqVa5jbuS +Sep 12 12:04:13.787442 check[52238]: [ 2] Razor-Agents v2.14 starting +razor-check -d +Sep 12 12:04:13.789903 check[52238]: [ 9] uname -a: FreeBSD +maxwell.gta.com 4.5-RELEASE-p3 FreeBSD 4.5-RELEASE-p3 #0: Wed May 22 +14:52:29 EDT 2002 root@maxwell.gta.com:/usr/src/sys/compile/maxwell +i386 +Sep 12 12:04:13.790480 check[52238]: [ 8] reading straight RFC822 mail +from +Sep 12 12:04:13.791397 check[52238]: [ 6] read 1 mail +Sep 12 12:04:13.791917 check[52238]: [ 8] Client supported_engines: 1 2 3 +4 +Sep 12 12:04:13.792948 check[52238]: [ 8] prep_mail done: mail 1 +headers=1432, mime0=3139 +Sep 12 12:04:13.793639 check[52238]: [ 6] skipping whitelist file +(empty?): /root/.razor/razor-whitelist +Sep 12 12:04:13.794295 check[52238]: [ 5] read_file: 1 items read from +/root/.razor/servers.discovery.lst +Sep 12 12:04:13.794871 check[52238]: [ 5] read_file: 1 items read from +/root/.razor/servers.nomination.lst +Sep 12 12:04:13.795382 check[52238]: [ 5] read_file: 3 items read from +/root/.razor/servers.catalogue.lst +Sep 12 12:04:13.796047 check[52238]: [ 9] Assigning defaults to +honor.cloudmark.com +Sep 12 12:04:13.796456 check[52238]: [ 9] Assigning defaults to +apt.cloudmark.com +Sep 12 12:04:13.796829 check[52238]: [ 9] Assigning defaults to +fire.cloudmark.com +Sep 12 12:04:13.797180 check[52238]: [ 9] Assigning defaults to +truth.cloudmark.com +Sep 12 12:04:13.798322 check[52238]: [ 5] read_file: 11 items read from +/root/.razor/server.apt.cloudmark.com.conf +Sep 12 12:04:13.799188 check[52238]: [ 5] read_file: 11 items read from +/root/.razor/server.honor.cloudmark.com.conf +Sep 12 12:04:13.799866 check[52238]: [ 5] 96778 seconds before closest +server discovery +Sep 12 12:04:13.800342 check[52238]: [ 6] apt.cloudmark.com is a Catalogue +Server srl 51; computed min_cf=1, Server se: 0A +Sep 12 12:04:13.800818 check[52238]: [ 8] Computed supported_engines: 2 4 +Sep 12 12:04:13.801167 check[52238]: [ 8] Using next closest server +apt.cloudmark.com:2703, cached info srl 51 +Sep 12 12:04:13.801513 check[52238]: [ 8] mail 1 Subject: Home Based +Business for Grownups +Sep 12 12:04:13.805467 check[52238]: [ 6] preproc: mail 1.0 went from 3139 +bytes to 3100 +Sep 12 12:04:13.805878 check[52238]: [ 6] computing sigs for mail 1.0, len +3100 +Sep 12 12:04:13.809475 check[52238]: [ 5] Connecting to apt.cloudmark.com +... +Sep 12 12:04:18.587441 check[52238]: [ 8] Connection established +Sep 12 12:04:18.587929 check[52238]: [ 4] apt.cloudmark.com >> 29 server +greeting: sn=C&srl=51&ep4=7542-10&a=l +Sep 12 12:04:18.588562 check[52238]: [ 6] apt.cloudmark.com is a Catalogue +Server srl 51; computed min_cf=1, Server se: 0A +Sep 12 12:04:18.589041 check[52238]: [ 8] Computed supported_engines: 2 4 +Sep 12 12:04:18.589432 check[52238]: [ 8] mail 1.0 e2 +sig: PGFfFte87P3Ve-CPTdu3NWgiBikA +Sep 12 12:04:18.589751 check[52238]: [ 8] mail 1.0 e4 +sig: k6oGZsa1AvVolyvalWx2AACdWb8A +Sep 12 12:04:18.590103 check[52238]: [ 8] preparing 2 queries +Sep 12 12:04:18.590638 check[52238]: [ 8] sending 1 batches +Sep 12 12:04:18.591087 check[52238]: [ 4] apt.cloudmark.com << 96 +Sep 12 12:04:18.591324 check[52238]: [ 6] +-a=c&e=2&s=PGFfFte87P3Ve-CPTdu3NWgiBikA +a=c&e=4&ep4=7542-10&s=k6oGZsa1AvVolyvalWx2AACdWb8A +. +Sep 12 12:04:19.270870 check[52238]: [ 4] apt.cloudmark.com >> 14 +Sep 12 12:04:19.271227 check[52238]: [ 6] response to sent.1 +-p=0 +p=0 +. +Sep 12 12:04:19.272130 check[52238]: [ 6] mail 1.0 e=2 +sig=PGFfFte87P3Ve-CPTdu3NWgiBikA: sig not found. +Sep 12 12:04:19.272449 check[52238]: [ 6] mail 1.0 e=4 +sig=k6oGZsa1AvVolyvalWx2AACdWb8A: sig not found. +Sep 12 12:04:19.272760 check[52238]: [ 7] method 5: mail +1.0: no-contention part, spam=0 +Sep 12 12:04:19.273012 check[52238]: [ 7] method 5: mail 1: a +non-contention part not spam, mail not spam +Sep 12 12:04:19.273257 check[52238]: [ 3] mail 1 is not known spam. +Sep 12 12:04:19.273578 check[52238]: [ 5] disconnecting from server +apt.cloudmark.com +Sep 12 12:04:19.273982 check[52238]: [ 4] apt.cloudmark.com << 5 +Sep 12 12:04:19.274203 check[52238]: [ 6] a=q +Sep 12 12:04:19.274585 check[52238]: [ 8] razor-check finished +successfully. + + + + + + + +--- +david raistrick +drais@atlasta.net http://www.expita.com/nomime.html + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01585.b819696d5221a8f929902b77a2fc966b b/Ch3/datasets/spam/easy_ham/01585.b819696d5221a8f929902b77a2fc966b new file mode 100644 index 000000000..4177b868d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01585.b819696d5221a8f929902b77a2fc966b @@ -0,0 +1,121 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 13 13:35:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E1B2916F03 + for ; Fri, 13 Sep 2002 13:35:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 13:35:14 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8D4ocC02087 for ; Fri, 13 Sep 2002 05:50:38 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17piIf-0000dm-00; Thu, + 12 Sep 2002 21:43:25 -0700 +Received: from panoramix.vasoftware.com ([198.186.202.147]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17piBc-0005WS-00 for + ; Thu, 12 Sep 2002 21:36:08 -0700 +Received: from mail.black-hole.com ([216.185.192.6]:2213 + helo=black-hole.com) by panoramix.vasoftware.com with esmtp (Exim + 4.05-VA-mm1 #1 (Debian)) id 17peEo-0007L9-00 for + ; Thu, 12 Sep 2002 17:23:10 -0700 +Received: from antispam.black-hole.com (unverified [216.185.192.35]) by + blackhole.com (Rockliffe SMTPRA 5.2.4) with ESMTP id + for ; + Thu, 12 Sep 2002 19:23:21 -0500 +Received: from mail.black-hole.com (mail.black-hole.com [216.185.192.6]) + by antispam.black-hole.com (8.11.6/8.11.6) with SMTP id g8D0SH121071 for + ; Thu, 12 Sep 2002 19:28:17 -0500 +Received: from vhost.swchs.org (vhost.swchs.org [216.185.203.194]) by + SMTP.BLACK-HOLE.com with SMTP (MailShield v2.04 - WIN32 Jul 17 2001 + 17:12:42); Thu, 12 Sep 2002 19:23:17 -0500 +Received: from vmwin2k [208.42.95.5] by vhost.swchs.org [216.185.203.194] + with SMTP (MDaemon.v3.5.0.R) for ; + Thu, 12 Sep 2002 19:22:49 -0500 +From: "Will Glynn" +To: +Message-Id: +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4910.0300 +In-Reply-To: +X-Mdremoteip: 208.42.95.5 +X-Return-Path: delta407@lerfjhax.com +X-Mdaemon-Deliver-To: razor-users@lists.sf.net +X-Mailscanner: Clean +Subject: [Razor-users] Re: Collision of hashes? +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 12 Sep 2002 19:23:46 -0500 +Date: Thu, 12 Sep 2002 19:23:46 -0500 + +To continue the subject on an otherwise unrelated note, the following +personal correspondence was just flagged as spam: + +The following is a slightly modified e-mail message trapped in a server-wide +spam box. + +------ +NEWSPAPER????? + +any time estimate when we can expect you home? +dad + + + + + + + <********@********** To: +<*************@***************> + *********> cc: + Subject: Oh, yeah + 09/12/2002 12:43 PM + + + + + + +I have to stay after school today so I can work on the school newspaper +(layout) -- Nords will bring me home later than usual. + +------ + +I don't know how to explain this one. + +--Will + + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01586.9f27ed39ecac8ed15e18dc166e930005 b/Ch3/datasets/spam/easy_ham/01586.9f27ed39ecac8ed15e18dc166e930005 new file mode 100644 index 000000000..3e630e7f1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01586.9f27ed39ecac8ed15e18dc166e930005 @@ -0,0 +1,76 @@ +From razor-users-admin@lists.sourceforge.net Fri Sep 13 16:50:05 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 8C95C16F03 + for ; Fri, 13 Sep 2002 16:50:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 13 Sep 2002 16:50:04 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8DEZhC22536 for ; Fri, 13 Sep 2002 15:35:43 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17prPU-0001g4-00; Fri, + 13 Sep 2002 07:27:04 -0700 +Received: from [208.7.1.205] (helo=everest.mckee.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17prOj-0007ej-00 for ; Fri, + 13 Sep 2002 07:26:17 -0700 +Received: (qmail 28455 invoked from network); 13 Sep 2002 09:21:03 -0000 +Received: from unknown (HELO belvoir) (208.7.1.202) by 208.7.1.205 with + SMTP; 13 Sep 2002 09:21:03 -0000 +Message-Id: <001601c25b31$80d2d0e0$7c640f0a@mfc.corp.mckee.com> +From: "Fox" +To: +References: <010501c24f82$947b3340$7c640f0a@mfc.corp.mckee.com> + + <20020912121017.A2630@rover.vipul.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Subject: [Razor-users] Fun Uses of Razored Mail +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 13 Sep 2002 10:26:09 -0400 +Date: Fri, 13 Sep 2002 10:26:09 -0400 + +I'm taking all my razored mail today and calling any 1-800 numbers I can +find. I say "Hi, I'm calling everyone that spammed me today to raise their +cost of doing business. You have a great day!" I'm told I should do it +from a pay phone, so it costs them 50 cents per call. If more people did +this, we could tie up their phone lines and cost them so much money they +could never make spam work. + +Also fun is the simple "Die Spammer Die!" + +Fox + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01587.574845236697b5ca4b2133ec681b224a b/Ch3/datasets/spam/easy_ham/01587.574845236697b5ca4b2133ec681b224a new file mode 100644 index 000000000..db4e8d6ca --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01587.574845236697b5ca4b2133ec681b224a @@ -0,0 +1,77 @@ +From razor-users-admin@lists.sourceforge.net Sat Sep 14 16:22:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0D8B716F03 + for ; Sat, 14 Sep 2002 16:22:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 14 Sep 2002 16:22:01 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8DLXmC03388 for ; Fri, 13 Sep 2002 22:33:48 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17pxt6-0001Sl-00; Fri, + 13 Sep 2002 14:22:05 -0700 +Received: from r2d2.easydns.com ([216.220.40.242] helo=mail.easydns.com) + by usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) + id 17pxst-0008UB-00 for ; + Fri, 13 Sep 2002 14:21:51 -0700 +Received: from easydns.com (localhost [127.0.0.1]) by mail.easydns.com + (8.11.3/8.11.0) with ESMTP id g8DLLiA13426 for + ; Fri, 13 Sep 2002 17:21:44 -0400 +Message-Id: <3D8256E3.5040908@easydns.com> +From: Colin Viebrock +Reply-To: colin@easydns.com +Organization: easyDNS Technologies Inc. +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) + Gecko/20020826 +X-Accept-Language: en-ca, en-us, en +MIME-Version: 1.0 +To: razor-users@example.sourceforge.net +References: <010501c24f82$947b3340$7c640f0a@mfc.corp.mckee.com> + + <20020912121017.A2630@rover.vipul.net> + <001601c25b31$80d2d0e0$7c640f0a@mfc.corp.mckee.com> +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Subject: [Razor-users] Bug ... still +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 13 Sep 2002 17:21:39 -0400 +Date: Fri, 13 Sep 2002 17:21:39 -0400 + +Haven't heard anything about this, so excuse the repost but: + + http://sf.net/tracker/index.php?func=detail&aid=600311& + group_id=3978&atid=103978 + +Or should bugs be reported somewhere other than on the SF bug tracker? + +- Colin + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01588.f0623dc7b744dd2ba0417f8f0a98662f b/Ch3/datasets/spam/easy_ham/01588.f0623dc7b744dd2ba0417f8f0a98662f new file mode 100644 index 000000000..6f9ccb9ff --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01588.f0623dc7b744dd2ba0417f8f0a98662f @@ -0,0 +1,75 @@ +From razor-users-admin@lists.sourceforge.net Mon Sep 16 15:30:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 78BD916F03 + for ; Mon, 16 Sep 2002 15:30:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 16 Sep 2002 15:30:49 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8GDPKC27135 for ; Mon, 16 Sep 2002 14:25:20 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17qvkS-0000o5-00; Mon, + 16 Sep 2002 06:17:08 -0700 +Received: from bsd.mbp.ee ([194.204.12.74]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17qvkA-00069G-00 for + ; Mon, 16 Sep 2002 06:16:50 -0700 +Received: (from root@localhost) by bsd.mbp.ee (8.12.5/8.12.5) id + g8GDGYou031194 for razor-users@lists.sourceforge.net; Mon, 16 Sep 2002 + 16:16:34 +0300 (EEST) (envelope-from raido@elve.elin.ttu.ee) +Received: from pikk-koon-teravoga.mbp.ee (pikk-koon-teravoga.mbp.ee + [194.204.12.183]) by bsd.mbp.ee (8.12.5/8.12.5av) with ESMTP id + g8GDGVfl031186 for ; Mon, + 16 Sep 2002 16:16:31 +0300 (EEST) (envelope-from raido@elve.elin.ttu.ee) +From: Raido Kurel +To: razor-users@example.sourceforge.net +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Evolution/1.0.2-5mdk +Message-Id: <1032182191.9209.15.camel@pikk-koon-teravoga.mbp.ee> +MIME-Version: 1.0 +X-Virus-Scanned: by AMaViS perl-11 +Subject: [Razor-users] empty mail is spamm? +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 16 Sep 2002 16:16:31 +0300 +Date: 16 Sep 2002 16:16:31 +0300 + +Hi, + +Is it possible to use razor without filtering empty mails as spamm? +An mail with an attachment is considered spamm. Is this normal? +Or I mysqlf like to send emails to myself where all important is said in +subject and body is empty (for remaining smth). + +Thanks, +Raido Kurel + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01589.be65e620bca0f1734cd13c71aea78d4c b/Ch3/datasets/spam/easy_ham/01589.be65e620bca0f1734cd13c71aea78d4c new file mode 100644 index 000000000..29b208681 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01589.be65e620bca0f1734cd13c71aea78d4c @@ -0,0 +1,101 @@ +From razor-users-admin@lists.sourceforge.net Tue Sep 17 11:26:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5ED2216F03 + for ; Tue, 17 Sep 2002 11:26:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 17 Sep 2002 11:26:27 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8GIrhC05769 for ; Mon, 16 Sep 2002 19:53:43 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17r0ui-0004wE-00; Mon, + 16 Sep 2002 11:48:04 -0700 +Received: from h-66-166-21-186.snvacaid.covad.net ([66.166.21.186] + helo=rover.vipul.net) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17r0tl-0001Dr-00 for + ; Mon, 16 Sep 2002 11:47:05 -0700 +Received: (from vipul@localhost) by rover.vipul.net (8.11.6/8.11.6) id + g8GIkfF12252; Mon, 16 Sep 2002 11:46:41 -0700 +From: Vipul Ved Prakash +To: Raido Kurel +Cc: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] empty mail is spamm? +Message-Id: <20020916114641.B12169@rover.vipul.net> +Reply-To: mail@vipul.net +Mail-Followup-To: Raido Kurel , + razor-users@lists.sourceforge.net +References: <1032182191.9209.15.camel@pikk-koon-teravoga.mbp.ee> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +In-Reply-To: <1032182191.9209.15.camel@pikk-koon-teravoga.mbp.ee>; + from raido@elve.elin.ttu.ee on Mon, Sep 16, 2002 at 04:16:31PM +0300 +X-Operating-System: Linux rover.vipul.net 2.4.18 +X-Privacy: If possible, encrypt your reply. Key at http://vipul.net/ +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 16 Sep 2002 11:46:41 -0700 +Date: Mon, 16 Sep 2002 11:46:41 -0700 + +Razor won't filter empty emails. What version of the agents are you using? + +cheers, +vipul. + +On Mon, Sep 16, 2002 at 04:16:31PM +0300, Raido Kurel wrote: +> Hi, +> +> Is it possible to use razor without filtering empty mails as spamm? +> An mail with an attachment is considered spamm. Is this normal? +> Or I mysqlf like to send emails to myself where all important is said in +> subject and body is empty (for remaining smth). +> +> Thanks, +> Raido Kurel +> +> +> +> +> ------------------------------------------------------- +> This sf.net email is sponsored by:ThinkGeek +> Welcome to geek heaven. +> http://thinkgeek.com/sf +> _______________________________________________ +> Razor-users mailing list +> Razor-users@lists.sourceforge.net +> https://lists.sourceforge.net/lists/listinfo/razor-users + +-- + +Vipul Ved Prakash | "The future is here, it's just not +Software Design Artist | widely distributed." +http://vipul.net/ | -- William Gibson + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01590.8403446e474e3cc1f6acfa87058463a1 b/Ch3/datasets/spam/easy_ham/01590.8403446e474e3cc1f6acfa87058463a1 new file mode 100644 index 000000000..fe99821da --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01590.8403446e474e3cc1f6acfa87058463a1 @@ -0,0 +1,53 @@ +From jm@jmason.org Wed Sep 18 12:36:24 2002 +Return-Path: +Delivered-To: yyyy@spamassassin.taint.org +Received: by spamassassin.taint.org (Postfix, from userid 500) + id 2B27716F18; Wed, 18 Sep 2002 12:36:24 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) + by jmason.org (Postfix) with ESMTP + id 28435F7B1; Wed, 18 Sep 2002 12:36:24 +0100 (IST) +To: "Fox" +Cc: "Justin Mason" , razor-users@example.sourceforge.net +Subject: Re: [Razor-users] HTML Table - Razor Stats using -lm 4 +In-Reply-To: Message from "Fox" + of "Tue, 17 Sep 2002 18:01:40 EDT." <003d01c25e95$ccf547c0$7c640f0a@mfc.corp.mckee.com> +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Date: Wed, 18 Sep 2002 12:36:19 +0100 +Sender: yyyy@spamassassin.taint.org +Message-Id: <20020918113624.2B27716F18@spamassassin.taint.org> + + +"Fox" said: + +> Before or after I whitelisted all the legit mailing lists that Razor is +> tagging? I had one false positive in the last four days. Razor tagged some +> guys person-to-person message because he used an ostrich-in-your-face jpeg +> that is probably pretty popular on the net, and -lm 4 means any single +> attachment in a message that is razored, razors the whole message, if I +> understand it correctly. + +Razor folks: is -lm documented anywhere? BTW, I notice all my *.conf +files in ~/.razor use "lm = 4" by default anyway. + +> No, I am not keeping official tally of false positives. I need to write a +> html interface to do it, and then it would be easy. I imagine you want +> false positive rate per filter. I will work on it tomorrow, and maybe in a +> week I will have some stats for false positives. + +Yeah, that'd be cool -- much appreciated! comparing text classifiers +like spam filters, without tracking FPs, is not good. After all, "cat > +/dev/null" gets a 100% hit rate, but without the FP rate figure of, let's +say 90%, you'd never know it was a bad thing to do ;) + +--j. + diff --git a/Ch3/datasets/spam/easy_ham/01591.7504f83163aa1c627354192d452a43e3 b/Ch3/datasets/spam/easy_ham/01591.7504f83163aa1c627354192d452a43e3 new file mode 100644 index 000000000..8fb4eb86c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01591.7504f83163aa1c627354192d452a43e3 @@ -0,0 +1,120 @@ +From razor-users-admin@lists.sourceforge.net Thu Sep 19 13:01:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 08B2016F03 + for ; Thu, 19 Sep 2002 13:01:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 13:01:03 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8J5NMC06882 for ; Thu, 19 Sep 2002 06:23:23 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17rtlM-0001m9-00; Wed, + 18 Sep 2002 22:22:04 -0700 +Received: from joseki.proulx.com ([216.17.153.58]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17rtl9-0001pM-00 for ; Wed, + 18 Sep 2002 22:21:51 -0700 +Received: from misery.proulx.com (misery.proulx.com [192.168.1.108]) by + joseki.proulx.com (Postfix) with ESMTP id 14C1314B35 for + ; Wed, 18 Sep 2002 23:21:41 -0600 (MDT) +Received: by misery.proulx.com (Postfix, from userid 1000) id EF835A8020; + Wed, 18 Sep 2002 23:21:40 -0600 (MDT) +To: "Razor User's List" +Subject: Re: [Razor-users] early experiences with Razor2 (and SA) +Message-Id: <20020919052140.GA13060@misery.proulx.com> +Mail-Followup-To: Razor User's List +References: + +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="huq684BweRXVnRxX" +Content-Disposition: inline +In-Reply-To: +User-Agent: Mutt/1.4i +From: bob@proulx.com (Bob Proulx) +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 18 Sep 2002 23:21:40 -0600 +Date: Wed, 18 Sep 2002 23:21:40 -0600 + + +--huq684BweRXVnRxX +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline + +Gary Funck [2002-09-18 13:57:00 -0700]: +> In my experience, there are spam messages that sneak past Spam Assassin, +> that Razor will pick up. Those are the ones that I'm calling "marginal". +> Basically, I'm hoping that "the collective" of Razor users make a better +> judge of spam than any single program like SA can, and therefore I can +> benefit from their judgement and get more extensive spam filtering. I've +> seen examples of this already, where SA doesn't score the spam high enough +> to bounce it, but Razor does. + +I think perhaps you missed the fact that SA scores are adjustable. If +you want SA to tag all messages listed in Razor then you can put this +in your ~/.spamassassin/user_prefs file. + + score RAZOR_CHECK 10 + +The default score is 3 and the default threshold needed is 5. +Therefore if you wish to have any razor listed messages tagged by SA +then setting a score for any razor listed messages to anything above 5 +would be sufficient. + +If you are already using SA then the above would be more efficient. +Otherwise you are running all of the mail through razor twice, once +for SA and once again afterward. If you really want to run Razor +individually then you should set the 'score RAZOR_CHECK 0' so that SA +won't do it and avoid the double network hit. + +However, one of the benefits of using SA in combination with Razor has +been the history of false positive reports in the razor database. The +current score of 3 is hefty, but not enough by itself to tag as spam. +But for any real spam is usually enough to push it over the threshold. +Razor2 addresses the false positive problem but is not yet in as wide +of use as Razor1. + +Bob + +--huq684BweRXVnRxX +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (GNU/Linux) + +iD8DBQE9iV7k0pRcO8E2ULYRAjoAAJ97CB6LpbhPHqa8IJx1l4g/LRiVdwCfUZIB +kUAK30zsRWL8PTb1TrEQuy8= +=XVm6 +-----END PGP SIGNATURE----- + +--huq684BweRXVnRxX-- + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01592.2b5d8fc350354b303b6baf2d27f531df b/Ch3/datasets/spam/easy_ham/01592.2b5d8fc350354b303b6baf2d27f531df new file mode 100644 index 000000000..6842c3678 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01592.2b5d8fc350354b303b6baf2d27f531df @@ -0,0 +1,75 @@ +From razor-users-admin@lists.sourceforge.net Thu Sep 19 13:01:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D845816F03 + for ; Thu, 19 Sep 2002 13:01:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 13:01:15 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8J7a8C10455 for ; Thu, 19 Sep 2002 08:36:08 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17rvq4-0002Zo-00; Thu, + 19 Sep 2002 00:35:04 -0700 +Received: from mail.co-ver.it ([80.18.173.28]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17rvop-0002V6-00 for ; Thu, + 19 Sep 2002 00:33:47 -0700 +Received: from localhost (mail.co-ver.it [127.0.0.1]) by mail.co-ver.it + (Postfix) with ESMTP id E33FF1F44D; Thu, 19 Sep 2002 09:33:15 +0200 (CEST) +Received: from 0124in (0-124IN.co-ver.it [192.168.0.124]) by + mail.co-ver.it (Postfix) with ESMTP id 99C591F44C; Thu, 19 Sep 2002 + 09:33:15 +0200 (CEST) +From: "Boniforti Flavio" +To: "'Santiago Vila'" +Cc: +Subject: RE: [Razor-users] RE: Re: Some startup questions... +Organization: Informa Srl +Message-Id: <002201c25fae$ee1188f0$7c00a8c0@cover.it> +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.3416 +In-Reply-To: +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Importance: Normal +X-Virus-Scanned: by AMaViS snapshot-20020300 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 19 Sep 2002 09:34:04 +0200 +Date: Thu, 19 Sep 2002 09:34:04 +0200 + +> I suggest that you use a normal user to start. Once you are familiar +> enough with razor and understand how it works, try the complex things +> like integration with the MTA and the like. + +OK, but do I have to launch that command as "root" or what? + +Thank you + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01593.72453c2f0f6643b4e5f7da773a850b9d b/Ch3/datasets/spam/easy_ham/01593.72453c2f0f6643b4e5f7da773a850b9d new file mode 100644 index 000000000..2f57886d6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01593.72453c2f0f6643b4e5f7da773a850b9d @@ -0,0 +1,85 @@ +From razor-users-admin@lists.sourceforge.net Thu Sep 19 17:47:31 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id BAC6B16F03 + for ; Thu, 19 Sep 2002 17:47:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 17:47:27 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8JD1bC20231 for ; Thu, 19 Sep 2002 14:01:37 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17s0jz-0006Gf-00; Thu, + 19 Sep 2002 05:49:07 -0700 +Received: from [208.7.1.205] (helo=everest.mckee.com) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17s0jK-0005C7-00 for ; Thu, + 19 Sep 2002 05:48:26 -0700 +Received: (qmail 10274 invoked from network); 19 Sep 2002 07:45:33 -0000 +Received: from unknown (HELO belvoir) (208.7.1.202) by 208.7.1.205 with + SMTP; 19 Sep 2002 07:45:33 -0000 +Message-Id: <011301c25fda$d3d7a6f0$7c640f0a@mfc.corp.mckee.com> +From: "Fox" +To: "Razor User's List" +References: <20020918120512.A6901@rover.vipul.net> + + <20020918145806.D7317@rover.vipul.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Subject: [Razor-users] The -lm 4 blues +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 19 Sep 2002 08:48:15 -0400 +Date: Thu, 19 Sep 2002 08:48:15 -0400 + +Using -lm 4 is yielding an extra 20% a day, but it gets false positives +where it shouldn't. + +Such as an email with a Word doc and the signature below. After looking at +the Word doc, directions to the sender's cabin, I am convinced it marked the +body, which contains no next except the "IncrediMail advertisment" +signature, as spam. + +So I have to turn off -lm 4. Razor has been getting other strange emails it +shouldn't with -lm 4 on. + + See the incredimail ad signature I am talking about below: + + Fox + + + +____________________________________________________ + IncrediMail - Email has finally evolved - Click Here + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01594.9e0ea187c7d58d78b9c2a00ecbb57e70 b/Ch3/datasets/spam/easy_ham/01594.9e0ea187c7d58d78b9c2a00ecbb57e70 new file mode 100644 index 000000000..10760580b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01594.9e0ea187c7d58d78b9c2a00ecbb57e70 @@ -0,0 +1,101 @@ +From razor-users-admin@lists.sourceforge.net Thu Sep 19 17:47:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6F21E16F03 + for ; Thu, 19 Sep 2002 17:47:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 17:47:37 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8JD2vC20239 for ; Thu, 19 Sep 2002 14:02:57 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17s0j1-00069D-00; Thu, + 19 Sep 2002 05:48:07 -0700 +Received: from dhcp024-208-195-177.indy.rr.com ([24.208.195.177] + helo=burgers.bubbanfriends.org) by usw-sf-list1.sourceforge.net with esmtp + (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id + 17s0iN-0004u7-00 for ; Thu, + 19 Sep 2002 05:47:28 -0700 +Received: from localhost (localhost.localdomain [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id 5CEF34B7E7C; + Thu, 19 Sep 2002 07:47:17 -0500 (EST) +Received: by burgers.bubbanfriends.org (Postfix, from userid 500) id + 1BB0D4B7E7B; Thu, 19 Sep 2002 07:47:16 -0500 (EST) +Received: from localhost (localhost [127.0.0.1]) by + burgers.bubbanfriends.org (Postfix) with ESMTP id 092D7C026A6; + Thu, 19 Sep 2002 07:47:15 -0500 (EST) +From: Mike Burger +To: Boniforti Flavio +Cc: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Razor: shall I use it with AMaViS or with + SpamAssassin? +In-Reply-To: <002401c25fb5$2de16260$7c00a8c0@cover.it> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Virus-Scanned: by AMaViS new-20020517 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 19 Sep 2002 07:47:15 -0500 (EST) +Date: Thu, 19 Sep 2002 07:47:15 -0500 (EST) + +Depends on how you want to use it. + +The default setup of running it from procmail works just fine, as long as +you remember to go into your postfix/main.cf file, and tell it to use +procmail instead of the internal delivery agent. + +On Thu, 19 Sep 2002, Boniforti Flavio wrote: + +> How do I intergrate razor into my postfix setup? Will it have to +> interact with AMaViS or with SpamAssassin? +> +> Thank you +> +> Boniforti Flavio +> Informa Srl +> Via 42 Martiri, 165 +> 28924 Verbania (VB) +> Tel +39 0323 586216 +> Fax +39 0323 586672 +> http://www.co-ver.it/informa +> +> +> +> +> ------------------------------------------------------- +> This sf.net email is sponsored by:ThinkGeek +> Welcome to geek heaven. +> http://thinkgeek.com/sf +> _______________________________________________ +> Razor-users mailing list +> Razor-users@lists.sourceforge.net +> https://lists.sourceforge.net/lists/listinfo/razor-users +> + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01595.2dda182ee17cdc04e14dd985a9845330 b/Ch3/datasets/spam/easy_ham/01595.2dda182ee17cdc04e14dd985a9845330 new file mode 100644 index 000000000..0bb779aeb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01595.2dda182ee17cdc04e14dd985a9845330 @@ -0,0 +1,116 @@ +From razor-users-admin@lists.sourceforge.net Thu Sep 19 17:49:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B888C16F03 + for ; Thu, 19 Sep 2002 17:49:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 19 Sep 2002 17:49:33 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8JGDeC27380 for ; Thu, 19 Sep 2002 17:13:41 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17s3vL-0001VZ-00; Thu, + 19 Sep 2002 09:13:03 -0700 +Received: from cs242725-10.austin.rr.com ([24.27.25.10] + helo=austinblues.dyndns.org) by usw-sf-list1.sourceforge.net with esmtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17s3uP-0000c3-00 for + ; Thu, 19 Sep 2002 09:12:05 -0700 +Received: from localhost (localhost [127.0.0.1]) by austinblues.dyndns.org + (Postfix) with ESMTP id 1F1C4285C8 for ; + Thu, 19 Sep 2002 11:11:59 -0500 (CDT) +Received: by austinblues.dyndns.org (Postfix, from userid 500) id + AF98C287C2; Thu, 19 Sep 2002 11:11:58 -0500 (CDT) +From: Jeffrey Taylor +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Using razor with maildrop +Message-Id: <20020919161158.GA19733@pogo.bearhouse.lan> +Mail-Followup-To: Jeffrey Taylor , + razor-users@lists.sourceforge.net +References: <000e01c25fcb$f8427560$fd0010ac@sunpower> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <000e01c25fcb$f8427560$fd0010ac@sunpower> +User-Agent: Mutt/1.3.27i +X-Virus-Scanned: by AMaViS new-20020424 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 19 Sep 2002 11:11:58 -0500 +Date: Thu, 19 Sep 2002 11:11:58 -0500 + + +Here is my recipe for Maildrop: + +# Vipul's Razor check +# +log `/usr/bin/razor-check` +log "razor-check = $RETURNCODE" +if ( $RETURNCODE == 0 ) +{ + xfilter "reformail -a'X-Razor: SPAM'" + log "SPAM caught by Vipul's Razor" + to "$FOLDERS/.SPAM/" +} + +I used this with Razor version 1. I'm not sure if it was ever used +with Razor2. I am now using SpamAssassin w/ Razor2. You may wish to +remove the log statements once running. + +I use both. SpamAssassin (SA) catches things that Razor does not. There +were enough false positives with Razor that I do not trust it alone. +After whitelisting all the newsletters I receive, SA w/ Razor2 does a +very good job. + +HTH, + Jeffrey + + +Quoting Sunil William Savkar : +> Hi. +> +> I just finished installing and getting running maildrop with my virtual +> users. I was thinking to set up razor with maildrop as my first test of +> its filtering capabilities.. +> +> I have seen documentation out there for procmail, but is there similar +> documentation for integrating maildrop with razor? +> +> +> +> Separately, it looks like many people use spamassassin with razor. If I +> am using razor2, is there still an advantage to this? +> +> +> +> Thanks in advance. +> +> +> +> Sunil +> + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01596.fa947ffc2560132f53cc7c0bbf39b584 b/Ch3/datasets/spam/easy_ham/01596.fa947ffc2560132f53cc7c0bbf39b584 new file mode 100644 index 000000000..0abb79e30 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01596.fa947ffc2560132f53cc7c0bbf39b584 @@ -0,0 +1,143 @@ +From razor-users-admin@lists.sourceforge.net Sat Sep 21 10:41:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0FDAA16F03 + for ; Sat, 21 Sep 2002 10:41:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sat, 21 Sep 2002 10:41:05 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8KLDAC23190 for ; Fri, 20 Sep 2002 22:13:11 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17sUyV-00054C-00; Fri, + 20 Sep 2002 14:06:07 -0700 +Received: from dsl092-097-160.nyc2.dsl.speakeasy.net ([66.92.97.160] + helo=sunserver.sunilactive.com) by usw-sf-list1.sourceforge.net with esmtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17sUyA-00027j-00 for + ; Fri, 20 Sep 2002 14:05:46 -0700 +Received: from inthespace.com (localhost.localdomain [127.0.0.1]) by + sunserver.sunilactive.com (Postfix) with SMTP id 3C1E337917; + Fri, 20 Sep 2002 17:05:16 -0400 (EDT) +Received: from 208.236.42.2 (SquirrelMail authenticated user + savkar@inthespace.com) by sunserver.sunilactive.com with HTTP; + Fri, 20 Sep 2002 17:05:16 -0400 (EDT) +Message-Id: <20930.208.236.42.2.1032555916.squirrel@sunserver.sunilactive.com> +Subject: Re: [Razor-users] Using razor with maildrop +From: "Sunil William Savkar" +To: +In-Reply-To: <20020919161158.GA19733@pogo.bearhouse.lan> +References: <000e01c25fcb$f8427560$fd0010ac@sunpower> + <20020919161158.GA19733@pogo.bearhouse.lan> +X-Priority: 3 +Importance: Normal +X-Msmail-Priority: Normal +Cc: +Reply-To: lists.savkar@inthespace.com +X-Mailer: SquirrelMail (version 1.2.7) +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 20 Sep 2002 17:05:16 -0400 (EDT) +Date: Fri, 20 Sep 2002 17:05:16 -0400 (EDT) + +Jeff-- + +What is the maildrop recipe you use with spamassassin? I was trying to +set mine up but I am running into a few difficulties. + +I think I will try spamassassin first and see how it goes, and then +perhaps fold in razor2... is it easy to fold in? + +Sunil + +> +> Here is my recipe for Maildrop: +> +> # Vipul's Razor check +> # +> log `/usr/bin/razor-check` +> log "razor-check = $RETURNCODE" +> if ( $RETURNCODE == 0 ) +> { +> xfilter "reformail -a'X-Razor: SPAM'" +> log "SPAM caught by Vipul's Razor" +> to "$FOLDERS/.SPAM/" +> } +> +> I used this with Razor version 1. I'm not sure if it was ever used with +> Razor2. I am now using SpamAssassin w/ Razor2. You may wish to remove +> the log statements once running. +> +> I use both. SpamAssassin (SA) catches things that Razor does not. +> There were enough false positives with Razor that I do not trust it +> alone. After whitelisting all the newsletters I receive, SA w/ Razor2 +> does a very good job. +> +> HTH, +> Jeffrey +> +> +> Quoting Sunil William Savkar : +>> Hi. +>> +>> I just finished installing and getting running maildrop with my +>> virtual users. I was thinking to set up razor with maildrop as my +>> first test of its filtering capabilities.. +>> +>> I have seen documentation out there for procmail, but is there similar +>> documentation for integrating maildrop with razor? +>> +>> +>> +>> Separately, it looks like many people use spamassassin with razor. If +>> I am using razor2, is there still an advantage to this? +>> +>> +>> +>> Thanks in advance. +>> +>> +>> +>> Sunil +>> +> +> +> ------------------------------------------------------- +> This sf.net email is sponsored by:ThinkGeek +> Welcome to geek heaven. +> http://thinkgeek.com/sf +> _______________________________________________ +> Razor-users mailing list +> Razor-users@lists.sourceforge.net +> https://lists.sourceforge.net/lists/listinfo/razor-users + + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01597.03954d8ac44189d40142445ac632f6cf b/Ch3/datasets/spam/easy_ham/01597.03954d8ac44189d40142445ac632f6cf new file mode 100644 index 000000000..642d26de7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01597.03954d8ac44189d40142445ac632f6cf @@ -0,0 +1,77 @@ +From razor-users-admin@lists.sourceforge.net Sun Sep 22 14:34:12 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id ED54916F03 + for ; Sun, 22 Sep 2002 14:34:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Sun, 22 Sep 2002 14:34:12 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8MDQnC03193 for ; Sun, 22 Sep 2002 14:26:49 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17t6dd-0006mi-00; Sun, + 22 Sep 2002 06:19:05 -0700 +Received: from falcon.mail.pas.earthlink.net ([207.217.120.74]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17t6cp-0001ga-00 for ; Sun, + 22 Sep 2002 06:18:15 -0700 +Received: from dialup-65.56.125.148.dial1.dallas1.level3.net + ([65.56.125.148] helo=hyperion.mandris.com) by + falcon.mail.pas.earthlink.net with esmtp (Exim 3.33 #1) id + 17t6co-0000Gx-00 for razor-users@lists.sourceforge.net; Sun, + 22 Sep 2002 06:18:14 -0700 +Received: from phoebe.mandris.com (phoebe.mandris.com [192.168.1.20]) by + hyperion.mandris.com (8.9.3/8.9.3) with ESMTP id IAA28816 for + ; Sun, 22 Sep 2002 08:19:12 -0500 +From: Dave Rogers +To: razor-users@example.sourceforge.net +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) +Message-Id: <1032700747.1536.5.camel@phoebe.mandris.com> +MIME-Version: 1.0 +Subject: [Razor-users] Forged email address +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: 22 Sep 2002 08:18:55 -0500 +Date: 22 Sep 2002 08:18:55 -0500 + +I received a spam email that had apparently forged the From header with +my own email address. After reviewing the message I forwarded it with +the rest of a batch of spam ti the database with razor-report. Now of, +course, my own email address is listed int he Razor database. How do I +go about getting it removed. + +I have seen this ploy (forged From headers) several time since then. +Perhaps the razor-report need to detect this and emit a warning. + +dave + + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01598.3e6e25959eae3d358e21d7144f61c42b b/Ch3/datasets/spam/easy_ham/01598.3e6e25959eae3d358e21d7144f61c42b new file mode 100644 index 000000000..4e6b22a2f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01598.3e6e25959eae3d358e21d7144f61c42b @@ -0,0 +1,94 @@ +From razor-users-admin@lists.sourceforge.net Mon Sep 23 22:46:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C5ED716F03 + for ; Mon, 23 Sep 2002 22:46:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 22:46:08 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8NHoxC28131 for ; Mon, 23 Sep 2002 18:50:59 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17tXKW-0003lD-00; Mon, + 23 Sep 2002 10:49:08 -0700 +Received: from relay07.indigo.ie ([194.125.133.231]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17tXJy-0000Km-00 for ; Mon, + 23 Sep 2002 10:48:34 -0700 +Received: (qmail 50769 messnum 1019631 invoked from + network[194.125.172.95/ts12-095.dublin.indigo.ie]); 23 Sep 2002 17:48:31 + -0000 +Received: from ts12-095.dublin.indigo.ie (HELO spamassassin.taint.org) + (194.125.172.95) by relay07.indigo.ie (qp 50769) with SMTP; 23 Sep 2002 + 17:48:31 -0000 +Received: by spamassassin.taint.org (Postfix, from userid 500) id 068C516F03; + Mon, 23 Sep 2002 18:48:30 +0100 (IST) +Received: from spamassassin.taint.org (localhost [127.0.0.1]) by spamassassin.taint.org (Postfix) + with ESMTP id 037BBF7B1 for ; + Mon, 23 Sep 2002 18:48:30 +0100 (IST) +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] razor unblessed reference +In-Reply-To: Message from Vipul Ved Prakash of + "Mon, 23 Sep 2002 08:55:56 PDT." + <20020923085556.B10965@rover.vipul.net> +From: yyyy@spamassassin.taint.org (Justin Mason) +X-GPG-Key-Fingerprint: 0A48 2D8B 0B52 A87D 0E8A 6ADD 4137 1B50 6E58 EF0A +X-Habeas-Swe-1: winter into spring +X-Habeas-Swe-2: brightly anticipated +X-Habeas-Swe-3: like Habeas SWE (tm) +X-Habeas-Swe-4: Copyright 2002 Habeas (tm) +X-Habeas-Swe-5: Sender Warranted Email (SWE) (tm). The sender of this +X-Habeas-Swe-6: email in exchange for a license for this Habeas +X-Habeas-Swe-7: warrant mark warrants that this is a Habeas Compliant +X-Habeas-Swe-8: Message (HCM) and not spam. Please report use of this +X-Habeas-Swe-9: mark in spam to . +Message-Id: <20020923174830.068C516F03@spamassassin.taint.org> +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 23 Sep 2002 18:48:24 +0100 +Date: Mon, 23 Sep 2002 18:48:24 +0100 + + +Vipul Ved Prakash said: + +> Are there any suggestions for "fixing" this in razor-agents? razor-agents +> could write to syslog by default, but I am not sure if that would be +> desirable default behaviour... + +Hi Vipul, + +I reckon if the "unwritable log file" error condition could be caught by +Razor and handled gracefully (logging to syslog or /dev/null), it'd be a +great help. + +As it stands, if the log file is unwritable, the razor check falls over +entirely as the constructor returns undef (unblessed reference = 'die' +error in perl). + +--j. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01599.30e5cb62246ea4c06dbe1f8024ef9ffc b/Ch3/datasets/spam/easy_ham/01599.30e5cb62246ea4c06dbe1f8024ef9ffc new file mode 100644 index 000000000..b6635da51 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01599.30e5cb62246ea4c06dbe1f8024ef9ffc @@ -0,0 +1,65 @@ +From razor-users-admin@lists.sourceforge.net Wed Sep 25 21:24:59 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7960E16F03 + for ; Wed, 25 Sep 2002 21:24:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 25 Sep 2002 21:24:59 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8PH0NC05580 for ; Wed, 25 Sep 2002 18:00:23 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17uFUG-0007sK-00; Wed, + 25 Sep 2002 09:58:08 -0700 +Received: from china.patternbook.com ([216.254.75.60] + helo=free.transpect.com) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17uFU3-0004pQ-00 for + ; Wed, 25 Sep 2002 09:57:55 -0700 +Received: (from root@localhost) by free.transpect.com (8.9.3/8.9.3/Debian + 8.9.3-21) id MAA01103 for razor-users@lists.sourceforge.net; + Wed, 25 Sep 2002 12:57:13 -0400 +From: Whit Blauvelt +To: razor-users@example.sourceforge.net +Message-Id: <20020925125713.A1093@free.transpect.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +Subject: [Razor-users] "No razor servers available at this time" +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 25 Sep 2002 12:57:13 -0400 +Date: Wed, 25 Sep 2002 12:57:13 -0400 + +I'm getting "no servers available" about half the time in the last few days. +This is with Razor 2. Is there something I need adjust in the installation +here, or are the servers just down/overloaded? + +Thanks, +Whit + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01600.2a010487f947580f4281abdb3afe5750 b/Ch3/datasets/spam/easy_ham/01600.2a010487f947580f4281abdb3afe5750 new file mode 100644 index 000000000..09f236ae9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01600.2a010487f947580f4281abdb3afe5750 @@ -0,0 +1,88 @@ +From razor-users-admin@lists.sourceforge.net Mon Sep 30 19:57:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F152916F18 + for ; Mon, 30 Sep 2002 19:57:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 19:57:01 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8UI56K10522 for ; Mon, 30 Sep 2002 19:05:06 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17w4ru-00044R-00; Mon, + 30 Sep 2002 11:02:06 -0700 +Received: from smtp03-pix.nauticom.net ([209.195.133.6] + helo=smtp03.nauticom.net) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17w4r0-0003lp-00 for + ; Mon, 30 Sep 2002 11:01:10 -0700 +Received: from www.nauticom.net (www.nauticom.net [209.195.130.4]) by + smtp03.nauticom.net (8.12.1/8.12.1) with ESMTP id g8UHtU8x018672 for + ; Mon, 30 Sep 2002 13:55:30 -0400 (EDT) +Received: from localhost (noghri@localhost) by www.nauticom.net + (8.12.1/8.12.1) with ESMTP id g8UI0FlO025296 for + ; Mon, 30 Sep 2002 14:00:16 -0400 (EDT) +X-Authentication-Warning: www.nauticom.net: noghri owned process doing -bs +From: Dayv Gastonguay +To: razor-users@example.sourceforge.net +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Subject: [Razor-users] "Can't use and undefined value.." error +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 14:00:12 -0400 (EDT) +Date: Mon, 30 Sep 2002 14:00:12 -0400 (EDT) + +I just installed razor 2.152 on a FreeBSD 4.4-RELEASE box and having +problems with razor-check. Any time razor-check is run, (with or without +arguments), i get this error: + +Can't use an undefined value as a symbol reference at +/usr/local/lib/perl5/site_perl/5.005/i386-freebsd/Razor2/Client/Agent.pm +line 756. + +razor-admin runs just fine and the make test before the install was all +ok. + +Has anyone seen this before? + +Module versions: +Digest-HMAC-1.01 +Digest-MD5-2.20 +Digest-Nilsimsa-0.06 +Digest-SHA1-2.01 +MIME-Base64-2.12 +Net-DNS-0.23 +Test-Simple-0.44 +Time-HiRes-01.20 +URI-1.19 + + + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01601.e5488e0e0b9bde9c22e601b1450b63b1 b/Ch3/datasets/spam/easy_ham/01601.e5488e0e0b9bde9c22e601b1450b63b1 new file mode 100644 index 000000000..0fb020fb1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01601.e5488e0e0b9bde9c22e601b1450b63b1 @@ -0,0 +1,82 @@ +From razor-users-admin@lists.sourceforge.net Mon Sep 30 21:44:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F070E16F17 + for ; Mon, 30 Sep 2002 21:44:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 30 Sep 2002 21:44:24 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8UJfOK13370 for ; Mon, 30 Sep 2002 20:41:24 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17w6Fz-0001R1-00; Mon, + 30 Sep 2002 12:31:03 -0700 +Received: from smtp-gw-cl-a.dmv.com ([64.45.128.110]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17w6Ex-0003Ng-00 for + ; Mon, 30 Sep 2002 12:29:59 -0700 +Received: from landshark (landshark.dmv.com [64.45.129.242]) by + smtp-gw-cl-a.dmv.com (8.12.3/8.12.3) with SMTP id g8UJTtYl082692; + Mon, 30 Sep 2002 15:29:55 -0400 (EDT) (envelope-from sven@dmv.com) +Message-Id: <00db01c268b7$c1c210a0$f2812d40@landshark> +From: "Sven Willenberger" +To: +Cc: +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2800.1106 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +Subject: [Razor-users] Re: Can't use and undefined value.." error +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 30 Sep 2002 15:29:55 -0400 +Date: Mon, 30 Sep 2002 15:29:55 -0400 + +> Date: Mon, 30 Sep 2002 14:00:12 -0400 (EDT) +> From: Dayv Gastonguay +> +> I just installed razor 2.152 on a FreeBSD 4.4-RELEASE box and having +> problems with razor-check. Any time razor-check is run, (with or without +> arguments), i get this error: +> +> Can't use an undefined value as a symbol reference at +> /usr/local/lib/perl5/site_perl/5.005/i386-freebsd/Razor2/Client/Agent.pm +> line 756. +> + Try installing the latest Perl (at least 5.6.1) port on Freebsd and make +sure you set the system to use perl from ports (i.e. in the +ports/lang/perl5/files directory run ./use.perl port. Reinstall the relevant +perl modules needed by razor and try again. + +Sven + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01602.2fd825dddd8dd74f7f82b2d93aeafc8e b/Ch3/datasets/spam/easy_ham/01602.2fd825dddd8dd74f7f82b2d93aeafc8e new file mode 100644 index 000000000..06e291095 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01602.2fd825dddd8dd74f7f82b2d93aeafc8e @@ -0,0 +1,70 @@ +From razor-users-admin@lists.sourceforge.net Thu Oct 3 12:22:15 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5A22216F18 + for ; Thu, 3 Oct 2002 12:22:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:22:12 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g92N2oK00984 for ; Thu, 3 Oct 2002 00:02:50 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17wsUx-0002Z2-00; Wed, + 02 Oct 2002 16:01:43 -0700 +Received: from med-core07.med.wayne.edu ([146.9.19.23]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17wsRZ-000679-00 for ; Wed, + 02 Oct 2002 15:58:13 -0700 +X-Mimeole: Produced By Microsoft Exchange V6.0.6249.0 +Content-Class: urn:content-classes:message +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Message-Id: +X-MS-Has-Attach: +X-MS-Tnef-Correlator: +Thread-Topic: Fire.cloudmark.com is having issues +Thread-Index: AcJqYq67m17NyZhYQJ+UtliQ471QSQABBryQ +From: "Rose, Bobby" +To: +Subject: [Razor-users] Fire.cloudmark.com is having issues +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 18:58:06 -0400 +Date: Wed, 2 Oct 2002 18:58:06 -0400 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g92N2oK00984 + +I noticed a drop in checks, and did some tests. If I move truth up in +my catalog list, a check comes back postive, but if I move fire up in +the list, then I don't get the positive check back. It's almost like +it's not syncing up with Hubris which is the one my reports are getting +sent to. + +-=Bobby + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01603.d3522fb154c0d7e5fcaf91d7720c3ea5 b/Ch3/datasets/spam/easy_ham/01603.d3522fb154c0d7e5fcaf91d7720c3ea5 new file mode 100644 index 000000000..16a400de2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01603.d3522fb154c0d7e5fcaf91d7720c3ea5 @@ -0,0 +1,78 @@ +From razor-users-admin@lists.sourceforge.net Thu Oct 3 12:23:27 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0E79216F18 + for ; Thu, 3 Oct 2002 12:23:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:23:02 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g9340pK13843 for ; Thu, 3 Oct 2002 05:00:57 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17wx9i-0001B6-00; Wed, + 02 Oct 2002 21:00:06 -0700 +Received: from med-core07.med.wayne.edu ([146.9.19.23]) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17wx8n-00031D-00 for ; Wed, + 02 Oct 2002 20:59:09 -0700 +X-Mimeole: Produced By Microsoft Exchange V6.0.6249.0 +Content-Class: urn:content-classes:message +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Subject: RE: [Razor-users] Fire.cloudmark.com is having issues +Message-Id: +X-MS-Has-Attach: +X-MS-Tnef-Correlator: +Thread-Topic: [Razor-users] Fire.cloudmark.com is having issues +Thread-Index: AcJqYq67m17NyZhYQJ+UtliQ471QSQABBryQAAqB/lA= +From: "Rose, Bobby" +To: +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 23:59:01 -0400 +Date: Wed, 2 Oct 2002 23:59:01 -0400 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g9340pK13843 + +What does this mean? I set up procmailrc for a spamtrap but I'm getting +an error. I also am reporting to pyzor and dcc and they aren't +registering an error. What's weird is that it works sometimes. + +. +Oct 02 23:46:11.470523 report[14051]: [ 4] honor.cloudmark.com >> 20 +Oct 02 23:46:11.470805 report[14051]: [ 6] response to sent.3 +-res=1 +err=230 +. +Oct 02 23:46:11.471825 report[14051]: [ 5] mail 1, orig_email, special +case eng 1: Server accept +ed report. +Oct 02 23:46:11.472228 report[14051]: [ 8] mail 1.0, eng 4: err 230 - +server wants mail + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01604.6034486f13e8427d9e70ad088092d856 b/Ch3/datasets/spam/easy_ham/01604.6034486f13e8427d9e70ad088092d856 new file mode 100644 index 000000000..05690079c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01604.6034486f13e8427d9e70ad088092d856 @@ -0,0 +1,69 @@ +From razor-users-admin@lists.sourceforge.net Thu Oct 3 12:23:28 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4926816F17 + for ; Thu, 3 Oct 2002 12:23:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:23:05 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g934KgK14396 for ; Thu, 3 Oct 2002 05:20:42 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17wxT3-00060J-00; Wed, + 02 Oct 2002 21:20:05 -0700 +Received: from crompton.com ([207.103.34.25] helo=bridget.crompton.com) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17wxSJ-0007yQ-00 for ; Wed, + 02 Oct 2002 21:19:20 -0700 +Received: from localhost (doug@localhost) by bridget.crompton.com + (8.11.6/8.11.6/SuSE Linux 0.5) with ESMTP id g934JD416440 for + ; Thu, 3 Oct 2002 00:19:13 -0400 +From: Doug Crompton +To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Subject: [Razor-users] Problem with SDK 2.03? +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 00:19:13 -0400 (EDT) +Date: Thu, 3 Oct 2002 00:19:13 -0400 (EDT) + + +I recently brought up a new system - SuSe 7.3 and I am running +spamassassin and procmail, which work fine. + +I tried bringing up razor (2.14) but I am not able to get the SDK to +install and razor reports missing modules. They appear to be there. I +followed the installation directions. There appears to be an endless list +of errors. Any ideas on what to do or where to start? + +Doug + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01605.41b0a44d660334296aa720bb40b1c405 b/Ch3/datasets/spam/easy_ham/01605.41b0a44d660334296aa720bb40b1c405 new file mode 100644 index 000000000..bf4bb58ad --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01605.41b0a44d660334296aa720bb40b1c405 @@ -0,0 +1,127 @@ +From razor-users-admin@lists.sourceforge.net Thu Oct 3 12:23:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 9C34816F1A + for ; Thu, 3 Oct 2002 12:23:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:23:10 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g935MwK15912 for ; Thu, 3 Oct 2002 06:22:59 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17wyR2-0000db-00; Wed, + 02 Oct 2002 22:22:04 -0700 +Received: from 12-236-11-40.client.attbi.com ([12.236.11.40] + helo=cynosure.darkridge.com) by usw-sf-list1.sourceforge.net with esmtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17wyQg-0008LV-00 for + ; Wed, 02 Oct 2002 22:21:42 -0700 +Received: (from jpr5@localhost) by cynosure.darkridge.com (8.11.6/8.11.5) + id g935Kox02976; Wed, 2 Oct 2002 22:20:50 -0700 +From: Jordan Ritter +To: "Rose, Bobby" +Cc: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Fire.cloudmark.com is having issues +Message-Id: <20021003052049.GA2299@darkridge.com> +References: +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="CE+1k2dSO48ffgeK" +Content-Disposition: inline +In-Reply-To: +User-Agent: Mutt/1.4i +X-Copyright: This e-mail is Copyright (c) 2002 by jpr5@darkridge.com +X-Spamadvice: Pursuant to US Code; Title 47; Chapter 5; Subchapter II; 227 + any unsolicited commercial email to this address will be subject to a + download and archival fee of US$500. Pursuant to California Business & + Professions Code; S17538.45 any email service provider involved in SPAM + activities will be liable for statutory damages of US$50 per message, up + to US$25,000 per day. Pursuant to California Penal Code; S502 any + unsolicited email sent to this address is in violation of Federal Law and + is subject to fine and/or imprisonment. +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 2 Oct 2002 22:20:49 -0700 +Date: Wed, 2 Oct 2002 22:20:49 -0700 + + +--CE+1k2dSO48ffgeK +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +Error 230 occurs when you report a signature, but the server doesn't +know about the signature, so it wants the full content. It's +basically an optimization. =20 + +Beyond that, I'm not sure how to interpret that output.. what version? +Vipul? + +--jordan + +On Wed, Oct 02, 2002 at 11:59:01PM -0400, Rose, Bobby wrote: +# What does this mean? I set up procmailrc for a spamtrap but I'm getting +# an error. I also am reporting to pyzor and dcc and they aren't +# registering an error. What's weird is that it works sometimes. +#=20 +# . +# Oct 02 23:46:11.470523 report[14051]: [ 4] honor.cloudmark.com >> 20 +# Oct 02 23:46:11.470805 report[14051]: [ 6] response to sent.3 +# -res=3D1 +# err=3D230 +# . +# Oct 02 23:46:11.471825 report[14051]: [ 5] mail 1, orig_email, special +# case eng 1: Server accept +# ed report. +# Oct 02 23:46:11.472228 report[14051]: [ 8] mail 1.0, eng 4: err 230 - +# server wants mail +#=20 +#=20 +# ------------------------------------------------------- +# This sf.net email is sponsored by:ThinkGeek +# Welcome to geek heaven. +# http://thinkgeek.com/sf +# _______________________________________________ +# Razor-users mailing list +# Razor-users@lists.sourceforge.net +# https://lists.sourceforge.net/lists/listinfo/razor-users + +--CE+1k2dSO48ffgeK +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.2.0 (GNU/Linux) + +iD8DBQE9m9OxpwQdAVEbU7oRAifiAKCSXxSTb64bYgzo8PiXVVswqkXCKgCgnqby +YYrMsnaQOrQvEb7cDw5jios= +=SBk3 +-----END PGP SIGNATURE----- + +--CE+1k2dSO48ffgeK-- + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01606.cf1844a356849ed8cdafb12185afd52f b/Ch3/datasets/spam/easy_ham/01606.cf1844a356849ed8cdafb12185afd52f new file mode 100644 index 000000000..ad05f6e5e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01606.cf1844a356849ed8cdafb12185afd52f @@ -0,0 +1,103 @@ +From razor-users-admin@lists.sourceforge.net Thu Oct 3 12:25:24 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4E0B316F6B + for ; Thu, 3 Oct 2002 12:24:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 12:24:42 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g9390KK21932 for ; Thu, 3 Oct 2002 10:00:21 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17x1p5-0002DL-00; Thu, + 03 Oct 2002 01:59:07 -0700 +Received: from adsl-67-116-63-16.dsl.sntc01.pacbell.net ([67.116.63.16] + helo=rover.vipul.net) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17x1oj-0007ib-00 for + ; Thu, 03 Oct 2002 01:58:45 -0700 +Received: (from vipul@localhost) by rover.vipul.net (8.11.6/8.11.6) id + g938wfJ04095 for razor-users@lists.sourceforge.net; Thu, 3 Oct 2002 + 01:58:41 -0700 +From: Vipul Ved Prakash +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Fire.cloudmark.com is having issues +Message-Id: <20021003015841.C3645@rover.vipul.net> +Mail-Followup-To: razor-users@example.sourceforge.net +References: + <20021003052049.GA2299@darkridge.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +In-Reply-To: <20021003052049.GA2299@darkridge.com>; from + jpr5@darkridge.com on Wed, Oct 02, 2002 at 10:20:49PM -0700 +X-Operating-System: Linux rover.vipul.net 2.4.19 +X-Privacy: If possible, encrypt your reply. Key at http://vipul.net/ +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 01:58:41 -0700 +Date: Thu, 3 Oct 2002 01:58:41 -0700 + +If you examine the log further, you'll see debug messages generated by the +(content) reporting process that follows error 230. + +On Wed, Oct 02, 2002 at 10:20:49PM -0700, Jordan Ritter wrote: +> Error 230 occurs when you report a signature, but the server doesn't +> know about the signature, so it wants the full content. It's +> basically an optimization. +> +> Beyond that, I'm not sure how to interpret that output.. what version? +> Vipul? +> +> On Wed, Oct 02, 2002 at 11:59:01PM -0400, Rose, Bobby wrote: +> # What does this mean? I set up procmailrc for a spamtrap but I'm getting +> # an error. I also am reporting to pyzor and dcc and they aren't +> # registering an error. What's weird is that it works sometimes. +> # +> # . +> # Oct 02 23:46:11.470523 report[14051]: [ 4] honor.cloudmark.com >> 20 +> # Oct 02 23:46:11.470805 report[14051]: [ 6] response to sent.3 +> # -res=1 +> # err=230 +> # . +> # Oct 02 23:46:11.471825 report[14051]: [ 5] mail 1, orig_email, special +> # case eng 1: Server accept +> # ed report. +> # Oct 02 23:46:11.472228 report[14051]: [ 8] mail 1.0, eng 4: err 230 - +> # server wants mail + + + + +-- + +Vipul Ved Prakash | "The future is here, it's just not +Software Design Artist | widely distributed yet." +http://vipul.net/ | -- William Gibson + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01607.85bc88e7dae2efaa4f87e070272008b4 b/Ch3/datasets/spam/easy_ham/01607.85bc88e7dae2efaa4f87e070272008b4 new file mode 100644 index 000000000..3c3d9ef8b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01607.85bc88e7dae2efaa4f87e070272008b4 @@ -0,0 +1,80 @@ +From razor-users-admin@lists.sourceforge.net Thu Oct 3 19:28:23 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id C8BFF16F03 + for ; Thu, 3 Oct 2002 19:28:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 19:28:22 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g93GivK05623 for ; Thu, 3 Oct 2002 17:44:58 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17x8wL-00065X-00; Thu, + 03 Oct 2002 09:35:05 -0700 +Received: from china.patternbook.com ([216.254.75.60] + helo=free.transpect.com) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17x8vZ-0004Jc-00 for + ; Thu, 03 Oct 2002 09:34:17 -0700 +Received: (from root@localhost) by free.transpect.com (8.9.3/8.9.3/Debian + 8.9.3-21) id MAA01172 for razor-users@lists.sourceforge.net; + Thu, 3 Oct 2002 12:33:19 -0400 +From: Whit Blauvelt +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] "No razor servers available at this time" +Message-Id: <20021003123319.A1149@free.transpect.com> +References: <20020925125713.A1093@free.transpect.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +In-Reply-To: <20020925125713.A1093@free.transpect.com>; from + whit@transpect.com on Wed, Sep 25, 2002 at 12:57:13PM -0400 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 12:33:19 -0400 +Date: Thu, 3 Oct 2002 12:33:19 -0400 + +I'm still seeing razor reporting bomb out with a small variety of messages. +Would reinitializing something here help, or does razor do that as needed +anyway, and this just reflects trouble at the servers? + +Also, since these are reports I'm making from within Mutt, it's annoying +that the error messages garble the X window a bit. If there's nothing +constructive to do about razor failing, can I at least turn off the failure +messages? One way or the other I'd rather not see them. + +Whit + +On Wed, Sep 25, 2002 at 12:57:13PM -0400, Whit Blauvelt wrote: +> I'm getting "no servers available" about half the time in the last few days. +> This is with Razor 2. Is there something I need adjust in the installation +> here, or are the servers just down/overloaded? +> +> Thanks, +> Whit + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01608.17c1ea3c65f8c32d5762fb045daafcf2 b/Ch3/datasets/spam/easy_ham/01608.17c1ea3c65f8c32d5762fb045daafcf2 new file mode 100644 index 000000000..c772f8900 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01608.17c1ea3c65f8c32d5762fb045daafcf2 @@ -0,0 +1,75 @@ +From razor-users-admin@lists.sourceforge.net Thu Oct 3 19:28:37 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E934A16F03 + for ; Thu, 3 Oct 2002 19:28:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 19:28:36 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g93HdJK07490 for ; Thu, 3 Oct 2002 18:39:19 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17x9cy-0002GM-00; Thu, + 03 Oct 2002 10:19:08 -0700 +Received: from smtp-gw-cl-a.dmv.com ([64.45.128.110]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17x9c1-00071s-00 for + ; Thu, 03 Oct 2002 10:18:09 -0700 +Received: from landshark (landshark.dmv.com [64.45.129.242]) by + smtp-gw-cl-a.dmv.com (8.12.3/8.12.3) with SMTP id g93HI6Yl083547 for + ; Thu, 3 Oct 2002 13:18:06 -0400 (EDT) + (envelope-from sven@dmv.com) +Message-Id: <016601c26b00$e23f0c70$f2812d40@landshark> +From: "Sven Willenberger" +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2800.1106 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +Subject: [Razor-users] problems with hubris and/or discovery +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 13:18:25 -0400 +Date: Thu, 3 Oct 2002 13:18:25 -0400 + +trying to report spam [razor chooses hubris] I timeout on the connection +(which seems to have gotten slower all morning) and receive the following +error message: + +razor-report error: connect4: nextserver: discover1: Error reading socket +connect4: nextserver: discover1: Error reading socket + +I then try to run razor-admin -discover and receive the same error ..... +problems with the servers today? only one discovery server? + +Sven + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01609.9e95ea932d2a0d804e7f53bb8d551fa4 b/Ch3/datasets/spam/easy_ham/01609.9e95ea932d2a0d804e7f53bb8d551fa4 new file mode 100644 index 000000000..ed674a7b8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01609.9e95ea932d2a0d804e7f53bb8d551fa4 @@ -0,0 +1,132 @@ +From razor-users-admin@lists.sourceforge.net Thu Oct 3 19:28:43 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 0D45816F03 + for ; Thu, 3 Oct 2002 19:28:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 19:28:40 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g93HkOK07821 for ; Thu, 3 Oct 2002 18:46:28 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17x9wH-0008HB-00; Thu, + 03 Oct 2002 10:39:05 -0700 +Received: from 12-236-11-40.client.attbi.com ([12.236.11.40] + helo=cynosure.darkridge.com) by usw-sf-list1.sourceforge.net with esmtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17x9vX-0007mb-00 for + ; Thu, 03 Oct 2002 10:38:19 -0700 +Received: (from jpr5@localhost) by cynosure.darkridge.com (8.11.6/8.11.5) + id g93HcEm05276 for razor-users@lists.sourceforge.net; Thu, 3 Oct 2002 + 10:38:14 -0700 +From: Jordan Ritter +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] problems with hubris and/or discovery +Message-Id: <20021003173813.GE2299@darkridge.com> +References: <016601c26b00$e23f0c70$f2812d40@landshark> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="ey/N+yb7u/X9mFhi" +Content-Disposition: inline +In-Reply-To: <016601c26b00$e23f0c70$f2812d40@landshark> +User-Agent: Mutt/1.4i +X-Copyright: This e-mail is Copyright (c) 2002 by jpr5@darkridge.com +X-Spamadvice: Pursuant to US Code; Title 47; Chapter 5; Subchapter II; 227 + any unsolicited commercial email to this address will be subject to a + download and archival fee of US$500. Pursuant to California Business & + Professions Code; S17538.45 any email service provider involved in SPAM + activities will be liable for statutory damages of US$50 per message, up + to US$25,000 per day. Pursuant to California Penal Code; S502 any + unsolicited email sent to this address is in violation of Federal Law and + is subject to fine and/or imprisonment. +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 10:38:13 -0700 +Date: Thu, 3 Oct 2002 10:38:13 -0700 + + +--ey/N+yb7u/X9mFhi +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +Folks, + + There have been several major internet outages this morning, + across major providers UUNet, Genuity, and god knows who else. + Various routes across the Internet backbones have been + disappearing, repropagating, and disappearing again. + + This has caused and exacerbated several problems which we are + working on correcting right now. We apologize for the + inconvenience.. + +Best,=20 + +--jordan + + + +On Thu, Oct 03, 2002 at 01:18:25PM -0400, Sven Willenberger wrote: +# trying to report spam [razor chooses hubris] I timeout on the connection +# (which seems to have gotten slower all morning) and receive the following +# error message: +#=20 +# razor-report error: connect4: nextserver: discover1: Error reading socket +# connect4: nextserver: discover1: Error reading socket +#=20 +# I then try to run razor-admin -discover and receive the same error ..... +# problems with the servers today? only one discovery server? +#=20 +# Sven +#=20 +#=20 +#=20 +# ------------------------------------------------------- +# This sf.net email is sponsored by:ThinkGeek +# Welcome to geek heaven. +# http://thinkgeek.com/sf +# _______________________________________________ +# Razor-users mailing list +# Razor-users@lists.sourceforge.net +# https://lists.sourceforge.net/lists/listinfo/razor-users + +--ey/N+yb7u/X9mFhi +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.2.0 (GNU/Linux) + +iD8DBQE9nICFpwQdAVEbU7oRAiw+AJ966WR+zA0g47m0E7SkgCMbivfLkgCeOtGc +V2cgz8USK1UPYH7YJwh1SyM= +=dZej +-----END PGP SIGNATURE----- + +--ey/N+yb7u/X9mFhi-- + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01610.b932de9054af897c91eb2296e8be689c b/Ch3/datasets/spam/easy_ham/01610.b932de9054af897c91eb2296e8be689c new file mode 100644 index 000000000..ffa746bbe --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01610.b932de9054af897c91eb2296e8be689c @@ -0,0 +1,165 @@ +From razor-users-admin@lists.sourceforge.net Thu Oct 3 20:03:16 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3F98016F03 + for ; Thu, 3 Oct 2002 20:03:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 03 Oct 2002 20:03:15 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g93Iu4K10389 for ; Thu, 3 Oct 2002 19:56:04 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17xAxC-0005z0-00; Thu, + 03 Oct 2002 11:44:06 -0700 +Received: from h-66-166-21-186.snvacaid.covad.net ([66.166.21.186] + helo=cynosure.darkridge.com) by usw-sf-list1.sourceforge.net with esmtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17xAwK-0007bE-00 for + ; Thu, 03 Oct 2002 11:43:13 -0700 +Received: (from jpr5@localhost) by cynosure.darkridge.com (8.11.6/8.11.5) + id g93Ih9H02496 for razor-users@lists.sourceforge.net; Thu, 3 Oct 2002 + 11:43:09 -0700 +From: Jordan Ritter +To: razor-users@example.sourceforge.net +Message-Id: <20021003184308.GA2254@darkridge.com> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="5vNYLRcllDrimb99" +Content-Disposition: inline +User-Agent: Mutt/1.4i +X-Copyright: This e-mail is Copyright (c) 2002 by jpr5@darkridge.com +X-Spamadvice: Pursuant to US Code; Title 47; Chapter 5; Subchapter II; 227 + any unsolicited commercial email to this address will be subject to a + download and archival fee of US$500. Pursuant to California Business & + Professions Code; S17538.45 any email service provider involved in SPAM + activities will be liable for statutory damages of US$50 per message, up + to US$25,000 per day. Pursuant to California Penal Code; S502 any + unsolicited email sent to this address is in violation of Federal Law and + is subject to fine and/or imprisonment. +Subject: [Razor-users] FW: [EVENT NOTIFICATION] UUnet North American + Backbone Problems 2 0021003@06:00 PDT [TIX106448] +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 3 Oct 2002 11:43:08 -0700 +Date: Thu, 3 Oct 2002 11:43:08 -0700 + + +--5vNYLRcllDrimb99 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +For everyone's benefit/edification, regardless of Razor usage. + +--jordan + +-----Original Message----- +From: InterNAP Backbone Status Reports [mailto:noc@internap.com] +Sent: Thursday, October 03, 2002 11:30 AM +To: InterNAP Backbone Status Reports +Subject: [EVENT NOTIFICATION] UUnet North American Backbone Problems +20021003@06:00 PDT [TIX106448] (fwd) + + +Hello, + +I have just spoken with an UUnet technician at 11:23 PDT and he was unable +to provide me with any new information regarding the outage. He did +confirm that problems had spread beyond the east coast and are now seen +nationwide through out their network. They are currently working with +their hardware vendor to try and isolate the issue. + +A large number of Internap's connections to UUnet remain shutdown and +traffic is being routed over alternate providers. The scale of this +outage is causing a large number of peering points with UUnet and other +providers to be flooded due to the large traffic shifts. + +If you have problems reaching specific sites please send an email to +noc@internap.com containing a traceroute and source/destination IP +addresses and we will investigate. If it is possible will will attempt to +move specific prefixes onto an alternate provider leaving an Internap PNAP +if that will provide better performance. + +Regards, +Andrew + +-------------------------------------------------------------------- +Andrew Dul Network Operations Center +InterNAP Network Services E-Mail: noc@internap.com +andrew@internap.com 206.256.9500 - 1.877.THE.INOC + +The contents of this email message are confidential and proprietary. + +---------- Forwarded message ---------- +Date: Thu, 3 Oct 2002 08:51:26 -0700 (PDT) +From: Andrew Dul +Subject: [EVENT NOTIFICATION] UUnet North American Backbone Problems + [TIX106448] + + +UUnet is currently experiencing a large number of problems in their North +American backbone. Internap has been aware of these problems since approx +06:00 PST. Most of the problems appear to be concentrated on the East +Coast but we have reports of problems from other geographic regions. + +This is being tracked under Internap ticket 106448 and UUnet master ticket +651751. + +UUnet currently does not have any ETA for a fix for this event. + +If you have issues reaching a specific site please send an email to +noc@internap.com with a traceroute showing the path which has a problem. + +Internap has shutdown peerings to UUnet is various cities to help reduce +the number of problems that customers will experience. + +Regards, +Andrew + +-------------------------------------------------------------------- +Andrew Dul Network Operations Center +InterNAP Network Services E-Mail: noc@internap.com +andrew@internap.com 206.256.9500 - 1.877.THE.INOC + +The contents of this email message are confidential and proprietary. + + +--5vNYLRcllDrimb99 +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.2.0 (GNU/Linux) + +iD8DBQE9nI+8pwQdAVEbU7oRAp25AJ9wlEUgdqUFi+7Hy/yYowIAid480gCfX49d +M4Ox3gKrlqqmZ+hAy0wTFl0= +=e6sV +-----END PGP SIGNATURE----- + +--5vNYLRcllDrimb99-- + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01611.f2803c52f689e2139f8ebb09ed5a8d91 b/Ch3/datasets/spam/easy_ham/01611.f2803c52f689e2139f8ebb09ed5a8d91 new file mode 100644 index 000000000..8939fdd77 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01611.f2803c52f689e2139f8ebb09ed5a8d91 @@ -0,0 +1,97 @@ +From razor-users-admin@lists.sourceforge.net Mon Sep 2 12:20:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D8F2643F9B + for ; Mon, 2 Sep 2002 07:20:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:20:30 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7TJQgZ25729 for ; Thu, 29 Aug 2002 20:26:42 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kUmz-0004JX-00; Thu, + 29 Aug 2002 12:17:09 -0700 +Received: from mailgate.sri.com ([128.18.243.11]) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17kUmC-0008At-00 for ; Thu, + 29 Aug 2002 12:16:20 -0700 +Received: (qmail 23083 invoked from network); 29 Aug 2002 19:15:48 -0000 +Received: from localhost (HELO mailgate.SRI.COM) (127.0.0.1) by + mailgate.sri.com with SMTP; 29 Aug 2002 19:15:48 -0000 +Received: from newmail.sri.com ([128.18.30.43]) by mailgate.SRI.COM (NAVGW + 2.5.1.18) with SMTP id M2002082912154827439 for + ; Thu, 29 Aug 2002 12:15:48 -0700 +Received: from sri.com ([128.18.28.107]) by newmail.sri.com (Netscape + Messaging Server 4.15) with ESMTP id H1MDJE00.QC6 for + ; Thu, 29 Aug 2002 12:16:26 -0700 +Message-Id: <3D6E7347.9090304@sri.com> +From: "Michael Duff" +User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) + Gecko/20020826 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: razor-users@example.sourceforge.net +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit +Subject: [Razor-users] Re: Can't call method "log" with SA/Razor2 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 12:17:27 -0700 +Date: Thu, 29 Aug 2002 12:17:27 -0700 + +This is happening due to insufficient write access to the +"razor-agent.log" file. I was getting the same error, but +only as a non-root user. As a quick workaround, you can do +"chmod go+w razor-agent.log". + +In Agent.pm, when then the Logger object is created, it +doesn't check whether the logfile is writable by the current +user. Then, when a write attempt is made, it bails out with +the "unblessed reference" error. + +Hope that helps, +Michael + +> I just noticed the following log entries in my syslog with the latest +> Spamassassin CVS (set up using spamc/spamd) and razor-agents 2.14: +> +> Jul 26 17:30:09 timmy spamd[54928]: razor2 check skipped: No such file or +> directory Can't call method "log" on unblessed reference at +> /usr/local/lib/perl5/site_perl/5.6.1/Razor2/Client/Agent.pm line 211, +> line 25. +> +> I saw this after checking if my upgrade from razor-agents 2.12 to 2.14 went +> okay, but the problem is still there after downgrading back to 2.12. I +> don't really know when this started happening, :-/ +> +> Any ideas on the problem? +> +> - Robert + + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01612.cdcef456e3de75e0c6478cee11565c41 b/Ch3/datasets/spam/easy_ham/01612.cdcef456e3de75e0c6478cee11565c41 new file mode 100644 index 000000000..ce7522b5b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01612.cdcef456e3de75e0c6478cee11565c41 @@ -0,0 +1,81 @@ +From razor-users-admin@lists.sourceforge.net Mon Sep 2 12:22:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 3643543F99 + for ; Mon, 2 Sep 2002 07:22:44 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:22:44 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7TNfsZ01475 for ; Fri, 30 Aug 2002 00:41:54 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kYnd-0002Im-00; Thu, + 29 Aug 2002 16:34:05 -0700 +Received: from 208-150-110-21-adsl.precisionet.net ([208.150.110.21] + helo=neofelis.ixazon.lan) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17kYnY-0005zK-00 for + ; Thu, 29 Aug 2002 16:34:00 -0700 +Received: by neofelis.ixazon.lan (Postfix, from userid 504) id A33003C47A; + Thu, 29 Aug 2002 19:33:53 -0400 (EDT) +Content-Type: text/plain; charset="iso-8859-1" +From: "cmeclax po'u le cmevi'u ke'umri" +Reply-To: cmeclax@ixazon.dynip.com +To: +Subject: Re: [Razor-users] Collision of hashes? +X-Mailer: KMail [version 1.2] +References: + <010501c24f82$947b3340$7c640f0a@mfc.corp.mckee.com> +In-Reply-To: <010501c24f82$947b3340$7c640f0a@mfc.corp.mckee.com> +Comment: li 0x18080B5EBAEAEC17619A6B51DFF93585D986F633 cu sevzi le mi ckiku +MIME-Version: 1.0 +Message-Id: <02082919334401.04648@neofelis> +Content-Transfer-Encoding: 8bit +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 19:33:44 -0400 +Date: Thu, 29 Aug 2002 19:33:44 -0400 + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +de'i Thursday 29 August 2002 13:36 la Fox cusku di'e +> The following was personal correspondence between two people. I can't +> +> fathom how Razor thinks it is spam: + +Was it sent in HTML? If so, and it had a background, the background may have +been sent in a spam. + +cmeclax +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.7 (GNU/Linux) + +iD8DBQE9bq9f3/k1hdmG9jMRAk4XAJ9CheEA+/hLIU9zTzfJbPyoPUm+XwCfXgZ1 +tg7Fn8JcG9Q13UlKVfaOJzk= +=Mw8+ +-----END PGP SIGNATURE----- + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01613.120a60ca54dbc3331f12609c19388fc4 b/Ch3/datasets/spam/easy_ham/01613.120a60ca54dbc3331f12609c19388fc4 new file mode 100644 index 000000000..0ce66330e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01613.120a60ca54dbc3331f12609c19388fc4 @@ -0,0 +1,85 @@ +From razor-users-admin@lists.sourceforge.net Mon Sep 2 12:22:47 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 8855D43F9B + for ; Mon, 2 Sep 2002 07:22:47 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 02 Sep 2002 12:22:47 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7TNiXZ01537 for ; Fri, 30 Aug 2002 00:44:33 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17kYqW-0003Xb-00; Thu, + 29 Aug 2002 16:37:04 -0700 +Received: from h-66-166-21-186.snvacaid.covad.net ([66.166.21.186] + helo=rover.vipul.net) by usw-sf-list1.sourceforge.net with esmtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17kYqQ-0006NA-00 for + ; Thu, 29 Aug 2002 16:36:58 -0700 +Received: (from vipul@localhost) by rover.vipul.net (8.11.6/8.11.6) id + g7TNar604179 for razor-users@lists.sourceforge.net; Thu, 29 Aug 2002 + 16:36:53 -0700 +From: Vipul Ved Prakash +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Collision of hashes? +Message-Id: <20020829163653.A4149@rover.vipul.net> +Reply-To: mail@vipul.net +Mail-Followup-To: razor-users@example.sourceforge.net +References: + <010501c24f82$947b3340$7c640f0a@mfc.corp.mckee.com> + <02082919334401.04648@neofelis> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5i +In-Reply-To: <02082919334401.04648@neofelis>; from cmeclax@gmx.co.uk on + Thu, Aug 29, 2002 at 07:33:44PM -0400 +X-Operating-System: Linux rover.vipul.net 2.4.18 +X-Privacy: If possible, encrypt your reply. Key at http://vipul.net/ +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 29 Aug 2002 16:36:53 -0700 +Date: Thu, 29 Aug 2002 16:36:53 -0700 + +On Thu, Aug 29, 2002 at 07:33:44PM -0400, cmeclax po'u le cmevi'u ke'umri wrote: +> +> Was it sent in HTML? If so, and it had a background, the background may have +> been sent in a spam. + +razor-agents 2.14 needs all parts to be spam to make a positive decision +(though this will change with the next release), so it couldn't have been +a background. Could you send me the debug log? + +cheers, +vipul. + +-- + +Vipul Ved Prakash | "The future is here, it's just not +Software Design Artist | widely distributed." +http://vipul.net/ | -- William Gibson + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + diff --git a/Ch3/datasets/spam/easy_ham/01614.005f290e71d13de44d3503c640dfe57c b/Ch3/datasets/spam/easy_ham/01614.005f290e71d13de44d3503c640dfe57c new file mode 100644 index 000000000..1ca5258b9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01614.005f290e71d13de44d3503c640dfe57c @@ -0,0 +1,77 @@ +From razor-users-admin@lists.sourceforge.net Wed Oct 9 15:09:25 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2A6ED16F18 + for ; Wed, 9 Oct 2002 15:08:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 15:08:57 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g99DSAK03914 for ; Wed, 9 Oct 2002 14:28:11 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17zGi0-0007gK-00; Wed, + 09 Oct 2002 06:17:04 -0700 +Received: from [207.106.111.252] (helo=digby.pffcu.org) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17zGh9-0005LD-00 for ; Wed, + 09 Oct 2002 06:16:11 -0700 +Received: from tasker.pffcu.org ([200.1.1.57]) by digby.pffcu.org with + SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) id + 4GL6DPAK; Wed, 9 Oct 2002 09:16:10 -0400 +Received: from localhost (sc@localhost) by tasker.pffcu.org + (8.11.4/8.11.4) with ESMTP id g99DF4904395 for + ; Wed, 9 Oct 2002 09:15:04 -0400 +X-Authentication-Warning: tasker.pffcu.org: sc owned process doing -bs +From: Samuel Checker +To: +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Subject: [Razor-users] Razor and Pine +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 09:15:03 -0400 (EDT) +Date: Wed, 9 Oct 2002 09:15:03 -0400 (EDT) + +I've been testing Razor, invoked from sendmail/procmail and so far it +seems pretty copacetic. Last night's spam to the list provided a good test +- the spam itself as well as several of the responses were flagged, as +other list members reported. + +This morning I piped the messages out from pine, being careful to use the +RAW mode, to razor-check -d. None of the messages come back as spam, even +the spam. Since folks revoked the false positives, I understand why they +would not come up, but not the spam itself, unless that also was revoked. + +Is this spam just a bad one to test against, or is there some setting in +pine or razor that I am missing? + +-- +sc + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01615.63a41aa663eeaf93728e7b1ab572ce91 b/Ch3/datasets/spam/easy_ham/01615.63a41aa663eeaf93728e7b1ab572ce91 new file mode 100644 index 000000000..7e95a4677 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01615.63a41aa663eeaf93728e7b1ab572ce91 @@ -0,0 +1,90 @@ +From razor-users-admin@lists.sourceforge.net Wed Oct 9 18:17:46 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id D5EF016F03 + for ; Wed, 9 Oct 2002 18:17:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 18:17:45 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g99FH9K08285 for ; Wed, 9 Oct 2002 16:17:09 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17zIVN-0008Dg-00; Wed, + 09 Oct 2002 08:12:09 -0700 +Received: from cable-b-36.sigecom.net ([63.69.210.36] + helo=evv.kamakiriad.local) by usw-sf-list1.sourceforge.net with esmtp + (Exim 3.31-VA-mm2 #1 (Debian)) id 17zIUi-0003FP-00 for + ; Wed, 09 Oct 2002 08:11:28 -0700 +Received: from aquila.kamakiriad.local (aquila.kamakiriad.local + [192.168.1.3]) by kamakiriad.com (8.11.6/8.11.6) with SMTP id g99FBMP18668 + for ; Wed, 9 Oct 2002 10:11:22 -0500 +From: Brian Fahrlander +To: razor-users@example.sourceforge.net +Subject: Re: [Razor-users] Razor and Pine +Message-Id: <20021009101127.7bc322fa.kilroy@kamakiriad.com> +In-Reply-To: +References: +X-Mailer: Sylpheed version 0.8.5 (GTK+ 1.2.10; i386-redhat-linux) +X-Message-Flag: : Shame on you! You know Outlook is how viruses are spread! +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +X-MIME-Autoconverted: from 8bit to quoted-printable by kamakiriad.com id + g99FBMP18668 +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 10:11:27 -0500 +Date: Wed, 9 Oct 2002 10:11:27 -0500 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g99FH9K08285 + +On Wed, 9 Oct 2002 09:15:03 -0400 (EDT), Samuel Checker wrote: + +> I've been testing Razor, invoked from sendmail/procmail and so far it +> seems pretty copacetic. Last night's spam to the list provided a good test +> - the spam itself as well as several of the responses were flagged, as +> other list members reported. +> +> This morning I piped the messages out from pine, being careful to use the +> RAW mode, to razor-check -d. None of the messages come back as spam, even +> the spam. Since folks revoked the false positives, I understand why they +> would not come up, but not the spam itself, unless that also was revoked. +> +> Is this spam just a bad one to test against, or is there some setting in +> pine or razor that I am missing? + + Are you using Spamassassin on the input side? I've just changed my sendmail installation and am looking for the 'proper' way to pass it through there, systemwide, before accepting it and sending it to the users. It's kinda problematic to set up procmail scripts for every user, when the user's home directories are NFS mounted....and the source is on my own machine, on which I try new things. (And it's the only machine with the drivespace...) + +------------------------------------------------------------------------ +Brian Fahrländer Linux Zealot, Conservative, and Technomad +Evansville, IN My Voyage: http://www.CounterMoon.com +ICQ 5119262 +------------------------------------------------------------------------ +angegangen, Schlange-Hüften, sein es ganz rüber jetzt. Bügel innen fest, +weil es eine lange, süsse Fahrt ist. + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01616.f02bab7494befc6a9f31a8b12523beab b/Ch3/datasets/spam/easy_ham/01616.f02bab7494befc6a9f31a8b12523beab new file mode 100644 index 000000000..5fc5a9046 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01616.f02bab7494befc6a9f31a8b12523beab @@ -0,0 +1,82 @@ +From razor-users-admin@lists.sourceforge.net Wed Oct 9 18:17:52 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2EC8E16F16 + for ; Wed, 9 Oct 2002 18:17:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 09 Oct 2002 18:17:52 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g99FUXK08812 for ; Wed, 9 Oct 2002 16:30:33 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17zIlp-0002b9-00; Wed, + 09 Oct 2002 08:29:09 -0700 +Received: from [207.106.111.252] (helo=digby.pffcu.org) by + usw-sf-list1.sourceforge.net with esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17zIlS-00088A-00 for ; Wed, + 09 Oct 2002 08:28:46 -0700 +Received: from tasker.pffcu.org ([200.1.1.57]) by digby.pffcu.org with + SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) id + 4GL6DP4L; Wed, 9 Oct 2002 11:28:46 -0400 +Received: from localhost (sc@localhost) by tasker.pffcu.org + (8.11.4/8.11.4) with ESMTP id g99FRdI04483; Wed, 9 Oct 2002 11:27:39 -0400 +X-Authentication-Warning: tasker.pffcu.org: sc owned process doing -bs +From: Samuel Checker +To: Brian Fahrlander +Cc: +Subject: Re: [Razor-users] Razor and Pine +In-Reply-To: <20021009101127.7bc322fa.kilroy@kamakiriad.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 11:27:39 -0400 (EDT) +Date: Wed, 9 Oct 2002 11:27:39 -0400 (EDT) + +On Wed, 9 Oct 2002, Brian Fahrlander wrote: + +> On Wed, 9 Oct 2002 09:15:03 -0400 (EDT), Samuel Checker wrote: +> +> > I've been testing Razor, invoked from sendmail/procmail and so far it +> > seems pretty copacetic. Last night's spam to the list provided a good test +> > - the spam itself as well as several of the responses were flagged, as +> > other list members reported. +> > +> +> Are you using Spamassassin on the input side? I've just changed my sendmail installation and am looking for the 'proper' way to pass it through there, systemwide, before accepting it and sending it to the users. It's kinda problematic to set up procmail scripts for every user, when the user's home directories are NFS mounted....and the source is on my own machine, on which I try new things. (And it's the only machine with the drivespace...) +> + +I've not used Spamassassin on the KISS principle. I just have procmail +adding an X-header and optionally modifying the Subject if razor-check +comes back positive. + +-- +sc + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01617.dabfe28cb18f031b5c9335955ba0c164 b/Ch3/datasets/spam/easy_ham/01617.dabfe28cb18f031b5c9335955ba0c164 new file mode 100644 index 000000000..6c7def76d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01617.dabfe28cb18f031b5c9335955ba0c164 @@ -0,0 +1,79 @@ +From razor-users-admin@lists.sourceforge.net Thu Oct 10 12:29:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3EDB716F16 + for ; Thu, 10 Oct 2002 12:28:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 10 Oct 2002 12:28:31 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g9A3pbK07218 for ; Thu, 10 Oct 2002 04:51:37 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17zU5M-0005G3-00; Wed, + 09 Oct 2002 20:34:04 -0700 +Received: from smtp-gw-cl-a.dmv.com ([64.45.128.110]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17zU4R-0006SI-00 for + ; Wed, 09 Oct 2002 20:33:07 -0700 +Received: from homediet (dogpound.dyndns.org [64.45.134.154]) by + smtp-gw-cl-a.dmv.com (8.12.3/8.12.3) with SMTP id g9A3X489099015 for + ; Wed, 9 Oct 2002 23:33:04 -0400 (EDT) + (envelope-from sven@dmv.com) +Message-Id: <00a301c2700e$4e258510$0201a8c0@homediet> +From: "Sven" +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2800.1106 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2800.1106 +Subject: [Razor-users] razor vs cloudmark - merging? +Sender: razor-users-admin@example.sourceforge.net +Errors-To: razor-users-admin@example.sourceforge.net +X-Beenthere: razor-users@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 9 Oct 2002 23:37:05 -0400 +Date: Wed, 9 Oct 2002 23:37:05 -0400 + +I am somewhat puzzled by a phone call I (or rather the CIO at the ISP for +whom I work) received from an individual claiming to represent Cloudmark. +The gist of the call was that since we were using razor and checking our +mail against the razor servers and that since those servers contain +information proprietary to Cloudmark, we would [in the near future?] be +required to begin paying Cloudmark/spamnet $1.00/user per year. I was +wondering if anyone else has received such a call? + +I am curious as to whether a spammer has begun to try contacting razor users +with the above tactic in an effort to get them to stop using razor or +whether the open source/community aspect of the razor project is going by +the wayside in lieu of a strictly commercial approach (ala brightmail and +the likes). + +Sven + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Razor-users mailing list +Razor-users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/razor-users + + diff --git a/Ch3/datasets/spam/easy_ham/01618.c12a22faa8de12e5dacd4d988a0b50a7 b/Ch3/datasets/spam/easy_ham/01618.c12a22faa8de12e5dacd4d988a0b50a7 new file mode 100644 index 000000000..84060df06 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01618.c12a22faa8de12e5dacd4d988a0b50a7 @@ -0,0 +1,96 @@ +From bmord@icon-nicholson.com Wed Sep 4 19:11:17 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 01DEB16F1E + for ; Wed, 4 Sep 2002 19:11:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 04 Sep 2002 19:11:16 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [66.38.151.26]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g84HwJZ13376 for ; Wed, 4 Sep 2002 18:58:20 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + D587D8F324; Wed, 4 Sep 2002 10:58:23 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 11689 invoked from network); 3 Sep 2002 18:49:02 -0000 +From: bmord@icon-nicholson.com (Ben Mord) +To: "Webappsec Securityfocus.Com" , + "SECPROG Securityfocus" +Subject: use of base image / delta image for automated recovery from attacks +Date: Tue, 3 Sep 2002 15:04:27 -0400 +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Importance: Normal + +Hi, + +I was inspired by a mode of operation supported by VMWare. You can have a +base disk image shared by multiple virtual machine (vm) instances. That base +image is never altered by a vm instance. Instead, each vm instance writes +changes to its own "redo" log. Future hard disk reads from that vm instance +incorporate both the base image and the appropriate redo log to present the +current disk image for that specific virtual machine. + +This is described here (thanks to Duane for providing this link on the +honeypots mailing list) +http://www.vmware.com/support/reference/common/disk_sharing.html + +Could this basic concept be used to easily make self-fixing client/server +applications that efficiently and automatically recover from most attacks, +even before those attacks have been discovered? Here is what I imagine. + +The physical architectures of most production client/server systems are +layered. For example, your basic web application might have a web server +running Apache, connected to an application server running some J2EE or .Net +business logic, connected to a database server for persistence. The only one +of these whose disk image really should evolve over time is the database +server, and even here you often put the static RDBMS software on one +partition and the changeable datafiles on another partition. It is only the +partition with the volatile datafiles that must be allowed to change from +one boot to the next. Other paritions may need to be writable for, say, swap +space, but these changes could be eliminated on each reboot. + +When someone cracks this system, they will probably change an image that +shouldn't be changed. E.g., they might leverage a buffer overflow in IIS or +Apache to install a trojan or a backdoor on the more exposed web server. But +what if the web server ran off a base image, writing changes to a "delta" or +"redo" partition? And then what if every night it automatically erased the +redo partition and rebooted? The downtime involved for each machine would be +minimal, because it is only deleting data - rather than restoring from +backup. In a system with redundant web servers for load balancing or high +availability, this could be scheduled in a way such that the system is +always accessible. This base/redo partition concept could be implemented at +the same level as a feature of hardware RAID, allowing for greater +performance, reliability, and hack resistance. This concept could also be +applied to the application servers, and even the database server partitions +(except for those partitions which contain the table data files, of course.) + +Does anyone do this already? Or is this a new concept? Or has this concept +been discussed before and abandoned for some reasons that I don't yet know? +I use the physical architecture of a basic web application as an example in +this post, but this concept could of course be applied to most server +systems. It would allow for the hardware-separation of volatile and +non-volatile disk images. It would be analogous to performing nightly +ghosting operations, only it would be more efficient and involve less (or +no) downtime. + +Thanks for any opinions, +Ben + + diff --git a/Ch3/datasets/spam/easy_ham/01619.e65e0291e555b111a9acd8b2267a0e1f b/Ch3/datasets/spam/easy_ham/01619.e65e0291e555b111a9acd8b2267a0e1f new file mode 100644 index 000000000..f646c931d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01619.e65e0291e555b111a9acd8b2267a0e1f @@ -0,0 +1,75 @@ +From strange@nsk.yi.org Thu Sep 5 11:26:30 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 569A116F1E + for ; Thu, 5 Sep 2002 11:26:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:26:25 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [66.38.151.26]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g84K45Z17149 for ; Wed, 4 Sep 2002 21:04:05 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 06BF48F2F4; Wed, 4 Sep 2002 13:08:52 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 12726 invoked from network); 4 Sep 2002 17:22:30 -0000 +Date: Wed, 4 Sep 2002 18:36:05 +0100 +From: strange@nsk.yi.org +To: secprog@securityfocus.com +Subject: Re: Secure Sofware Key +Message-Id: <20020904183605.A4666@nsk.yi.org> +Reply-To: strange@nsk.yi.org +Mail-Followup-To: strange@nsk.yi.org, secprog@securityfocus.com +References: <20020829204345.91D1833986@LINPDC.eclipsys.qc.ca> + <20020903192326.C9DA533986@LINPDC.eclipsys.qc.ca> + <15733.15859.462448.155446@cerise.nosuchdomain.co.uk> + <200209032103.44905.ygingras@ygingras.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.2.5.1i +In-Reply-To: <200209032103.44905.ygingras@ygingras.net>; from + ygingras@ygingras.net on Tue, Sep 03, 2002 at 09:03:40PM -0400 +X-Disclaimer: 'Author of this message is not responsible for any harm done + to reader's computer.' +X-Organization: 'NSK' +X-Section: 'Admin' +X-Priority: '1 (Highest)' + +On Tue, Sep 03, 2002 at 09:03:40PM -0400, Yannick Gingras wrote: +> This make me wonder about the relative protection of smart cards. They have +> an internal procession unit around 4MHz. Can we consider them as trusted +> hardware ? The ability to ship smart cards periodicaly uppon cashing of a +> monthly subscription fee would not raise too much the cost of "renting" the +> system. Smart card do their own self encryption. Can they be used to +> decrypt data needed by the system ? The input of the system could me mangled +> and the would keep a reference of how long it was in service. +> +> This sounds really feasible but I may be totaly wrong. I may also be wrong +> about the safety of a smart card. +> +> What do you think ? + +That's similar to using hard-locks (either the old parallel, or the new +usb). + +The problem is that that piece of hardware is trustworthy, but the rest of +the PC isn't, so a cracker just needs to simulate the lock/smart card, or +peek at the executable after the lock has been deactivated. + +Regards, +Luciano Rocha + +-- +Consciousness: that annoying time between naps. + diff --git a/Ch3/datasets/spam/easy_ham/01620.444bae1904c633c8de3f890cf9e5a5b3 b/Ch3/datasets/spam/easy_ham/01620.444bae1904c633c8de3f890cf9e5a5b3 new file mode 100644 index 000000000..7884c1ac3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01620.444bae1904c633c8de3f890cf9e5a5b3 @@ -0,0 +1,142 @@ +From GlennEverhart@firstusa.com Thu Sep 5 11:26:32 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3BC3316F1F + for ; Thu, 5 Sep 2002 11:26:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Thu, 05 Sep 2002 11:26:27 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing3.securityfocus.com + [66.38.151.27]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g84K5EZ17306 for ; Wed, 4 Sep 2002 21:05:14 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + F07E1A30F7; Wed, 4 Sep 2002 13:58:15 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 11927 invoked from network); 4 Sep 2002 18:56:23 -0000 +Message-Id: +From: "Everhart, Glenn (FUSA)" +To: "'bmord@icon-nicholson.com'" , + "Webappsec Securityfocus.Com" , + SECPROG Securityfocus +Subject: RE: use of base image / delta image for automated recovery from a + ttacks +Date: Wed, 4 Sep 2002 15:11:55 -0400 +MIME-Version: 1.0 +X-Mailer: Internet Mail Service (5.5.2656.59) +Content-Type: text/plain; charset="iso-8859-1" + +I did something crudely along those lines for VMS VAX maybe 13 years +ago; there is at least one product that does it for PC though I don't +recall its name. It is also handy for cases where you have a CD image +of some filesystem (or some other image of a filesystem) that is +intrinsically readonly but whose filesystem will not accept (or is +not graceful) readonly storage. It is also more or less necessary +if you want to work with WORM file structures, which are older still. +There have been a number of filesystems for those dating back to the +early 1980s if not before. + +A generic facility of the type you mention is also one way to implement +snapshots on top of an existing filesystem. The written information +must (obviously!) be seekable so you can provide the illusion that you +wrote to the storage. A device level implementation is however perfectly +adequate. + +It does not, of course, distinguish for you what should have been changed +and what should not. If you truly know a device (or perhaps a partition) +must not be written, it can be simpler to either return error on writes, +or to just return a fake success on writes yet discard the data. (NTFS +lives with the latter strategy just fine from my experiments. I have not +tried it on extf3 or reiser.) + +BTW, think about your mention of RAID and consider the complexity of +writing to RAID4 or RAID5... +I would contend that with cheaper storage these days, it makes little sense +to use RAID, save for shadowing and possibly striping. Those at least do +not have the complexity and slowup dangers that higher RAID levels have, and +there is not a need to save the cost of disk so much where a single disk +may hold 200 gigs and up. Why not dedicate another whole disk to fault +recovery +and lose the complexity and slow write (sometimes) of RAID? + +Glenn Everhart + + +-----Original Message----- +From: bmord@icon-nicholson.com [mailto:bmord@icon-nicholson.com] +Sent: Tuesday, September 03, 2002 3:04 PM +To: Webappsec Securityfocus.Com; SECPROG Securityfocus +Subject: use of base image / delta image for automated recovery from +attacks + + +Hi, + +I was inspired by a mode of operation supported by VMWare. You can have a +base disk image shared by multiple virtual machine (vm) instances. That base +image is never altered by a vm instance. Instead, each vm instance writes +changes to its own "redo" log. Future hard disk reads from that vm instance +incorporate both the base image and the appropriate redo log to present the +current disk image for that specific virtual machine. + +This is described here (thanks to Duane for providing this link on the +honeypots mailing list) +http://www.vmware.com/support/reference/common/disk_sharing.html + +Could this basic concept be used to easily make self-fixing client/server +applications that efficiently and automatically recover from most attacks, +even before those attacks have been discovered? Here is what I imagine. + +The physical architectures of most production client/server systems are +layered. For example, your basic web application might have a web server +running Apache, connected to an application server running some J2EE or .Net +business logic, connected to a database server for persistence. The only one +of these whose disk image really should evolve over time is the database +server, and even here you often put the static RDBMS software on one +partition and the changeable datafiles on another partition. It is only the +partition with the volatile datafiles that must be allowed to change from +one boot to the next. Other paritions may need to be writable for, say, swap +space, but these changes could be eliminated on each reboot. + +When someone cracks this system, they will probably change an image that +shouldn't be changed. E.g., they might leverage a buffer overflow in IIS or +Apache to install a trojan or a backdoor on the more exposed web server. But +what if the web server ran off a base image, writing changes to a "delta" or +"redo" partition? And then what if every night it automatically erased the +redo partition and rebooted? The downtime involved for each machine would be +minimal, because it is only deleting data - rather than restoring from +backup. In a system with redundant web servers for load balancing or high +availability, this could be scheduled in a way such that the system is +always accessible. This base/redo partition concept could be implemented at +the same level as a feature of hardware RAID, allowing for greater +performance, reliability, and hack resistance. This concept could also be +applied to the application servers, and even the database server partitions +(except for those partitions which contain the table data files, of course.) + +Does anyone do this already? Or is this a new concept? Or has this concept +been discussed before and abandoned for some reasons that I don't yet know? +I use the physical architecture of a basic web application as an example in +this post, but this concept could of course be applied to most server +systems. It would allow for the hardware-separation of volatile and +non-volatile disk images. It would be analogous to performing nightly +ghosting operations, only it would be more efficient and involve less (or +no) downtime. + +Thanks for any opinions, +Ben + + +********************************************************************** +This transmission may contain information that is privileged, confidential and/or exempt from disclosure under applicable law. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein (including any reliance thereon) is STRICTLY PROHIBITED. If you received this transmission in error, please immediately contact the sender and destroy the material in its entirety, whether in electronic or hard copy format. Thank you +********************************************************************** + + diff --git a/Ch3/datasets/spam/easy_ham/01621.877e68b6e88c06b95504693c90cef86a b/Ch3/datasets/spam/easy_ham/01621.877e68b6e88c06b95504693c90cef86a new file mode 100644 index 000000000..f88429bf4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01621.877e68b6e88c06b95504693c90cef86a @@ -0,0 +1,70 @@ +From secprog-return-492-jm=jmason.org@securityfocus.com Fri Sep 6 11:36:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E66B916F18 + for ; Fri, 6 Sep 2002 11:35:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:35:06 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869rVC29298 for + ; Fri, 6 Sep 2002 10:53:31 +0100 +Received: from outgoing.securityfocus.com (outgoing3.securityfocus.com + [66.38.151.27]) by webnote.net (8.9.3/8.9.3) with ESMTP id XAA18901 for + ; Thu, 5 Sep 2002 23:06:36 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 868A2A33C1; Thu, 5 Sep 2002 14:19:21 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 24062 invoked from network); 5 Sep 2002 19:24:13 -0000 +Message-Id: <3D77A587.405@wirex.com> +Date: Thu, 05 Sep 2002 11:42:15 -0700 +From: Crispin Cowan +Organization: WireX Communications, Inc. +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: scottm@crystal.ncc.cc.nm.us +Cc: Ben Mord , + "Webappsec Securityfocus.Com" , + SECPROG Securityfocus +Subject: Re: FW: use of base image / delta image for automated recovery + from attacks +References: + <3D7793B5.8344A1B5@crystal.ncc.cc.nm.us> +Content-Type: text/plain; charset=us-ascii; format=flowed +Content-Transfer-Encoding: 7bit + +Scott MacKenzie wrote: + +>There is a software package that is used (or was up through w2k) +>on MicroSloth for this purpose. Ghost, or some such. One essentially +>"takes a picture" of the machine's proper config, and then upon +>schedule or demand replaces the machine's current config with the +>proper picture. It essentially over-writes the entire disk drive. +>Especially good for student access machines at libraries, etc. +> +And it is pretty common practice in some environments with public +workstations to just wipe and re-install Windows machines on a weekly +(or even daily) basis. It's easier than trying to maintain Windows. + +Crispin + +-- +Crispin Cowan, Ph.D. +Chief Scientist, WireX http://wirex.com/~crispin/ +Security Hardened Linux Distribution: http://immunix.org +Available for purchase: http://wirex.com/Products/Immunix/purchase.html + + + + diff --git a/Ch3/datasets/spam/easy_ham/01622.91f94fb37ab624a4b3f0b26fbc428c25 b/Ch3/datasets/spam/easy_ham/01622.91f94fb37ab624a4b3f0b26fbc428c25 new file mode 100644 index 000000000..8fd43bd6b --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01622.91f94fb37ab624a4b3f0b26fbc428c25 @@ -0,0 +1,73 @@ +From secprog-return-482-jm=jmason.org@securityfocus.com Fri Sep 6 11:36:07 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2A63416F17 + for ; Fri, 6 Sep 2002 11:35:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:35:13 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869t8C29585 for + ; Fri, 6 Sep 2002 10:55:14 +0100 +Received: from outgoing.securityfocus.com (outgoing3.securityfocus.com + [66.38.151.27]) by webnote.net (8.9.3/8.9.3) with ESMTP id WAA18542 for + ; Thu, 5 Sep 2002 22:16:25 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 3CD36A311C; Thu, 5 Sep 2002 10:27:05 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 23638 invoked from network); 4 Sep 2002 21:53:38 -0000 +Date: Wed, 04 Sep 2002 15:10:47 -0700 +From: Jef Feltman +Subject: RE: Secure Sofware Key +In-Reply-To: <20020904151603.B1300@sgl.crestech.ca> +To: secprog@securityfocus.com +Reply-To: feltman@pacbell.net +Message-Id: +MIME-Version: 1.0 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Importance: Normal +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal + +the only way to insure a safe key is to use all the storage space in the +universe. too big to decrypt. + +my point is there will never be a "safe" key. what I would consider is how +long does the data need to be protected. if you need to protect the data for +longer than 6 months, do not release it to the public. if you are trying to +stop the general public (your customer) from coping the data then use what +is available on the market. If you want to stop the bootleggers do not +release the data to the public. + +I have never seen a lock that could not be unlocked. the act of unlocking +the key gives away it's secret. + +the tougher the lock the more pissed-off your customers will be. take MS-XP +for example. only the home user is forced to register. think of the +nightmare if business had to register every copy. how many times have we +needed to reinstall our laptop OS? notice the amount of Mac's sold after the +XP release. these where mostly home users that converted to Mac OS. + +the new Audio CD's that have digital copy protection so not play on my +computer. does this stop me from copying the CD? no. however it does make me +return them and get my money back. + +the more popular the software the more likely it is to be cracked. + +jef + + + diff --git a/Ch3/datasets/spam/easy_ham/01623.e4e8861a3bb3e57547fddbaba4b76f3f b/Ch3/datasets/spam/easy_ham/01623.e4e8861a3bb3e57547fddbaba4b76f3f new file mode 100644 index 000000000..8fd2e7ba8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01623.e4e8861a3bb3e57547fddbaba4b76f3f @@ -0,0 +1,100 @@ +From secprog-return-490-jm=jmason.org@securityfocus.com Fri Sep 6 11:37:35 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B0AD116F1F + for ; Fri, 6 Sep 2002 11:36:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:36:17 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869rWC29309 for + ; Fri, 6 Sep 2002 10:53:32 +0100 +Received: from outgoing.securityfocus.com (outgoing3.securityfocus.com + [66.38.151.27]) by webnote.net (8.9.3/8.9.3) with ESMTP id XAA18906 for + ; Thu, 5 Sep 2002 23:07:03 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + D2526A3115; Thu, 5 Sep 2002 14:17:55 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 32494 invoked from network); 5 Sep 2002 18:17:24 -0000 +Date: Thu, 5 Sep 2002 11:33:21 -0700 +From: Brian Hatch +To: Crispin Cowan +Cc: Ben Mord , + "Webappsec Securityfocus.Com" , + SECPROG Securityfocus +Subject: Re: use of base image / delta image for automated recovery from + attacks +Message-Id: <20020905183321.GH4340@ifokr.org> +References: + <3D76977B.9010606@wirex.com> +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha1; + protocol="application/pgp-signature"; + boundary="2+N3zU4ZlskbnZaJ" +Content-Disposition: inline +In-Reply-To: <3D76977B.9010606@wirex.com> +User-Agent: Mutt/1.3.28i + +--2+N3zU4ZlskbnZaJ +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + + + +> Simple approxmation to this: make /usr a separate partion, and mount it= +=20 +> read-only: +>=20 +> * The good news: attackers that want to trojan your software have to +> reboot, at least. +> * The bad news: administrators that want to update your software +> have to reboot, at least. + +No reboot is required, you just need to remount it: + + # mount -o remount,rw /usr + +This requires root access, but presumably /usr is safe from non-root +users anyway. + +Only way to disable this is to have the kernel compiled with something +that compartmentalizes capabilities (LIDS/etc on Linux for example) or to +remove CAP_SYS_ADMIN with lcap, which would definately require a reboot, +and possibly break some other functionatily to boot. (Pun intended. My +apologies.) + +-- +Brian Hatch "Are you expected?" + Systems and "No. Dreaded." + Security Engineer +www.hackinglinuxexposed.com + +Every message PGP signed + +--2+N3zU4ZlskbnZaJ +Content-Type: application/pgp-signature +Content-Disposition: inline + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +iEYEARECAAYFAj13o3EACgkQp6D9AhxzHxDMkACfR3m+eBXLfiZUFRd+jlBwu4MH +Z/kAnRVbL3IA/m03PVTM6O4h9R4AKqML +=k5cA +-----END PGP SIGNATURE----- + +--2+N3zU4ZlskbnZaJ-- + + diff --git a/Ch3/datasets/spam/easy_ham/01624.594e8b3d4bb51222991dde7f1db2e5a4 b/Ch3/datasets/spam/easy_ham/01624.594e8b3d4bb51222991dde7f1db2e5a4 new file mode 100644 index 000000000..adc0ee7fd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01624.594e8b3d4bb51222991dde7f1db2e5a4 @@ -0,0 +1,126 @@ +From secprog-return-493-jm=jmason.org@securityfocus.com Fri Sep 6 11:37:38 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id CEF2016F20 + for ; Fri, 6 Sep 2002 11:36:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:36:19 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869vcC29825 for + ; Fri, 6 Sep 2002 10:57:38 +0100 +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [66.38.151.26]) by webnote.net (8.9.3/8.9.3) with ESMTP id VAA18304 for + ; Thu, 5 Sep 2002 21:36:52 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + E1EB28F2C6; Thu, 5 Sep 2002 13:38:50 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 12968 invoked from network); 5 Sep 2002 17:15:58 -0000 +Message-Id: <3D7793B5.8344A1B5@crystal.ncc.cc.nm.us> +Date: Thu, 05 Sep 2002 11:26:13 -0600 +From: Scott MacKenzie +Reply-To: scottm@crystal.ncc.cc.nm.us +Organization: =?iso-8859-1?Q?Din=E9?= College +X-Mailer: Mozilla 4.79 [en] (Windows NT 5.0; U) +X-Accept-Language: en +MIME-Version: 1.0 +To: Ben Mord +Cc: Crispin Cowan , + "Webappsec Securityfocus.Com" , + SECPROG Securityfocus +Subject: Re: FW: use of base image / delta image for automated recovery + from attacks +References: +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +There is a software package that is used (or was up through w2k) +on MicroSloth for this purpose. Ghost, or some such. One essentially +"takes a picture" of the machine's proper config, and then upon +schedule or demand replaces the machine's current config with the +proper picture. It essentially over-writes the entire disk drive. +Especially good for student access machines at libraries, etc. + +Ben Mord wrote: +> +> -----Original Message----- +> From: Crispin Cowan [mailto:crispin@wirex.com] +> Sent: Wednesday, September 04, 2002 5:46 PM +> To: Ben Mord +> Cc: Webappsec Securityfocus.Com; SECPROG Securityfocus +> Subject: Re: use of base image / delta image for automated recovery from +> attacks +> +> > I did my dissertation work in this area (Optimistic Computing) and so was +> >interested in applying it to the security problem. Unfortunately, you hit a +> >bunch of problems: +> +> > a.. When can you "commit" a state as being "good"? You can't run from +> a +> >redo log forever; the performance and storage penalties accumulate. Even +> log +> >structured file systems garbage collect eventually. So you have to commit +> >sometime. The problem is that if you commit too eagerly, you might commit +> >corrupted state. If you commit too conservatively, you eat performance and +> >storage penalties. +> > b.. What do you do if you discover that there is corrupted state in the +> >*middle* of your redo log, and you want some of the critical state that +> >comes after it? You need some way to dig the corruption out of the middle +> >and save the rest. My dissertation solves this problem, but you have to +> >re-write everything in my programming language :) +> . c.. Just doing this at all imposes substantial performance penalties. I +> >love VMWare, and use it every day (the best $200 I ever spent on software) +> >.but it is not very fast. +> +> My proposed solution to the first two problems you mention is to be less +> ambitious. The idea is that you *never* commit - instead, you simply revert +> to base state on reboot. Obviously, you can't do this with partitions that +> accrue important state, e.g. a partition that stores database table data. +> But in your typical web application, most partitions do not accrue important +> state. For example, your typical web server or application server could have +> their entire state reset back to a known base state during each reboot +> without harm. +> The advantage of being less ambitious is that we have a quick and easy way +> to frustrate certain attacks without rewriting all of our software or +> spending lots of money on additional application-specific coding. +> +> The first two problems you describe only occur if we become more ambitious +> and try to apply these same techniques to, for example, the database table +> partitions, where state changes remain important across reboots. That would +> certainly be a nice touch! But as you point out, many problems would have to +> be addressed first, and the hardest of these can not be abstracted away from +> the particular application. Not the least of these is the problem of writing +> heuristics for delineating good from malevolent state. That task is roughly +> analogous to what antiviral software authors do for a living, only this work +> could not be shared across many different systems as it would be specific to +> a paritcular application. +> +> The third problem you mention - performance penalty - is an argument for +> doing this in hardware, much like hardware raid. Another argument for doing +> this in hardware is hack resistance. Changing the base instance should +> require physical access to the console, e.g. by requiring that you first +> flip a physical switch on your RAID hardware or modify a bios setting. If +> the base image can be modified remotely or by software, then you have to +> worry about whether an implementation flaw might permit a cracker to modify +> the base image remotely. +> +> Ben + +-- + ( ______ + )) .-- Scott MacKenzie; Dine' College ISD --. >===<--. + C|~~| (>--- Phone/Voice Mail: 928-724-6639 ---<) | ; o |-' + | | \--- Senior DBA/CARS Coordinator/Etc. --/ | _ | + `--' `- Email: scottm@crystal.ncc.cc.nm.us -' `-----' + + diff --git a/Ch3/datasets/spam/easy_ham/01625.a7d55f4ad9a62d11bf4e0e5894963f70 b/Ch3/datasets/spam/easy_ham/01625.a7d55f4ad9a62d11bf4e0e5894963f70 new file mode 100644 index 000000000..40b731ff1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01625.a7d55f4ad9a62d11bf4e0e5894963f70 @@ -0,0 +1,60 @@ +From secprog-return-487-jm=jmason.org@securityfocus.com Fri Sep 6 11:38:01 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 837A816F69 + for ; Fri, 6 Sep 2002 11:36:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:36:36 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869wSC29970 for + ; Fri, 6 Sep 2002 10:58:28 +0100 +Received: from outgoing.securityfocus.com (outgoing3.securityfocus.com + [66.38.151.27]) by webnote.net (8.9.3/8.9.3) with ESMTP id UAA18007 for + ; Thu, 5 Sep 2002 20:40:22 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + A38F5A3139; Thu, 5 Sep 2002 10:51:19 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 28245 invoked from network); 5 Sep 2002 10:23:24 -0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Yannick Gingras +To: secprog@securityfocus.com +Subject: Re: Secure Sofware Key +Date: Thu, 5 Sep 2002 06:39:04 -0400 +User-Agent: KMail/1.4.2 +References: +In-Reply-To: +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Message-Id: <200209050639.08199.ygingras@ygingras.net> + +> However, cracking and reverse engineering tools are not so ubiquitous on +> UNIX as they are on Windows platform for two main reasons: +> +> 1. The main customers of commercial Unices (Solaris, HP-UX, Aix, SCO...) +> are respectable companies. They are ready to pay big bucks for software +> they need: the reputation matters. +> +> 2. Most software for free and open source Unices like Linux and xBSD (this +> software often may be used on commercial unices as well) is, well, free and +> open source. + +Thanks to your answers, I start to see where I should head for. What are your +sugestions for protecting a 100% online requirement system ? + +-- +Yannick Gingras +Coder for OBB : Observing Bantu-speaking Butanone +http://OpenBeatBox.org + + diff --git a/Ch3/datasets/spam/easy_ham/01626.daf72a49b735dc3319a809ec520f2283 b/Ch3/datasets/spam/easy_ham/01626.daf72a49b735dc3319a809ec520f2283 new file mode 100644 index 000000000..35ed5b86e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01626.daf72a49b735dc3319a809ec520f2283 @@ -0,0 +1,116 @@ +From secprog-return-485-jm=jmason.org@securityfocus.com Fri Sep 6 11:38:51 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 983E216F6D + for ; Fri, 6 Sep 2002 11:37:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:37:33 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869wcC29994 for + ; Fri, 6 Sep 2002 10:58:38 +0100 +Received: from outgoing.securityfocus.com (outgoing3.securityfocus.com + [66.38.151.27]) by webnote.net (8.9.3/8.9.3) with ESMTP id UAA17986 for + ; Thu, 5 Sep 2002 20:39:45 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 26D1DA3106; Thu, 5 Sep 2002 10:42:53 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 4920 invoked from network); 4 Sep 2002 23:14:36 -0000 +Message-Id: <3D76977B.9010606@wirex.com> +Date: Wed, 04 Sep 2002 16:30:03 -0700 +From: Crispin Cowan +Organization: WireX Communications, Inc. +User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827 +X-Accept-Language: en-us, en +MIME-Version: 1.0 +To: Ben Mord +Cc: "Webappsec Securityfocus.Com" , + SECPROG Securityfocus +Subject: Re: use of base image / delta image for automated recovery from + attacks +References: +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 7bit + +Ben Mord wrote: + +> -----Original Message----- +> *From:* Crispin Cowan [mailto:crispin@wirex.com] +> *Sent:* Wednesday, September 04, 2002 5:46 PM +> *To:* Ben Mord +> *Cc:* Webappsec Securityfocus.Com; SECPROG Securityfocus +> *Subject:* Re: use of base image / delta image for automated +> recovery from attacks +> +> Ben Mord wrote: +> +>>I was inspired by a mode of operation supported by VMWare. [use VMWare's ability to rolll back state to recover from intrusions] +>> +> I did my dissertation work in this area (Optimistic Computing +> ) and so was +> interested in applying it to the security problem. Unfortunately, +> you hit a bunch of problems: +> +> * When can you "commit" a state as being "good"? You can't +> run from a redo log forever; the performance and storage +> penalties accumulate. Even log structured file systems +> garbage collect eventually. So you have to commit sometime. +> The problem is that if you commit too eagerly, you might +> commit corrupted state. If you commit too conservatively, +> you eat performance and storage penalties. +> * What do you do if you discover that there is corrupted state +> in the *middle* of your redo log, and you want some of the +> critical state that comes after it? You need some way to dig +> the corruption out of the middle and save the rest. My +> dissertation solves this problem, but you have to re-write +> everything in my programming language :) +> * Just doing this at all imposes substantial performance +> penalties. I love VMWare, and use it every day (the best +> $200 I ever spent on software) but it is not very fast. +> +> My proposed solution to the first two problems you mention is to be +> less ambitious. The idea is that you *never* commit - instead, you +> simply revert to base state on reboot. + +Ah. In that case, you can use something considerably less powerful than +VMWare. All you need is a machine configured to boot from CD-ROM and use +a RAM disk for scratch space. Numerous Linux distros are available that +let you boot a stateless but functional system from CD-ROM. + +> Obviously, you can't do this with partitions that accrue important +> state, e.g. a partition that stores database table data. + +... but if you *do* want some state to persist, then you need a +mountable writable partition. To protect it, you need some kind of +access control management to decide who can do what to the writable +partition, blah blah blah ... and before you know it, the security +problem starts to look just like it does for conventional servers. + +Simple approxmation to this: make /usr a separate partion, and mount it +read-only: + + * The good news: attackers that want to trojan your software have to + reboot, at least. + * The bad news: administrators that want to update your software + have to reboot, at least. + +Crispin + +-- +Crispin Cowan, Ph.D. +Chief Scientist, WireX http://wirex.com/~crispin/ +Security Hardened Linux Distribution: http://immunix.org +Available for purchase: http://wirex.com/Products/Immunix/purchase.html + + + diff --git a/Ch3/datasets/spam/easy_ham/01627.99a91446ce39d668286e93f7703dba3a b/Ch3/datasets/spam/easy_ham/01627.99a91446ce39d668286e93f7703dba3a new file mode 100644 index 000000000..16a6cab52 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01627.99a91446ce39d668286e93f7703dba3a @@ -0,0 +1,134 @@ +From secprog-return-486-jm=jmason.org@securityfocus.com Fri Sep 6 11:38:55 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B316216F1F + for ; Fri, 6 Sep 2002 11:37:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 11:37:39 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869vdC29831 for + ; Fri, 6 Sep 2002 10:57:39 +0100 +Received: from outgoing.securityfocus.com (outgoing3.securityfocus.com + [66.38.151.27]) by webnote.net (8.9.3/8.9.3) with ESMTP id UAA17981 for + ; Thu, 5 Sep 2002 20:39:21 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + B2716A3138; Thu, 5 Sep 2002 10:51:17 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 15430 invoked from network); 5 Sep 2002 15:26:58 -0000 +From: bmord@icon-nicholson.com (Ben Mord) +To: "Crispin Cowan" +Cc: "Webappsec Securityfocus.Com" , + "SECPROG Securityfocus" +Subject: RE: use of base image / delta image for automated recovery from + attacks +Date: Thu, 5 Sep 2002 11:42:40 -0400 +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +In-Reply-To: <3D76977B.9010606@wirex.com> + + +-----Original Message----- +From: Crispin Cowan [mailto:crispin@wirex.com] +Sent: Wednesday, September 04, 2002 7:30 PM +To: Ben Mord +Cc: Webappsec Securityfocus.Com; SECPROG Securityfocus +Subject: Re: use of base image / delta image for automated recovery from +attacks + + +Ben Mord wrote: + +>> -----Original Message----- +>> *From:* Crispin Cowan [mailto:crispin@wirex.com] +>> *Sent:* Wednesday, September 04, 2002 5:46 PM +>> *To:* Ben Mord +>> *Cc:* Webappsec Securityfocus.Com; SECPROG Securityfocus +>> *Subject:* Re: use of base image / delta image for automated +>> recovery from attacks +>> +>> Ben Mord wrote: +>> +>> My proposed solution to the first two problems you mention is to be +>> less ambitious. The idea is that you *never* commit - instead, you +>> simply revert to base state on reboot. + +>Ah. In that case, you can use something considerably less powerful than +>VMWare. All you need is a machine configured to boot from CD-ROM and use +>a RAM disk for scratch space. Numerous Linux distros are available that +>let you boot a stateless but functional system from CD-ROM. + +But RAM is expensive, and the directory structures of many systems (e.g. +Windows) are not sufficiently organized and standardized to make this +combination of bootable CDs and RAM drives practical. Even if you are +fortunate enough to be using Linux (or another FHS-compliant *nix), you +still can't fit a lot on a CD. Its not unusual today to have gigabytes of +static multimedia content on the web server. This particular problem can be +alleviated somewhat by using DVDs, but this is a temporary solution at best +which will become outdated quickly as our data requirements grow and hard +drives become cheaper. + +>> Obviously, you can't do this with partitions that accrue important +>> state, e.g. a partition that stores database table data. + +>... but if you *do* want some state to persist, then you need a +>mountable writable partition. To protect it, you need some kind of +>access control management to decide who can do what to the writable +>partition, blah blah blah ... and before you know it, the security +>problem starts to look just like it does for conventional servers. + +Right. This is why you would consolidate all state of any long-term +significance on just a couple partitions, and why you would not put static +application code on these changeable partitions. Fortunately, most large +client/server application physical architectures do this anyhow, because +these are two fundamentally different kinds of state with two very different +sets of administrative, security, RAID, and backup requirements. People also +tend to do this anyhow because layered logical architectures are popular +with the GUI at one end, business logic in the middle, and persistence +services at the other. This logical architecture maps naturally to a +physical architecture that has a static web server, a static application +server, and a database server that has static and changeable partitions. (I +use the word static versus changeable instead of writeable versus unwritable +because the "unchangeable" partitions might be written to for temporary swap +space. Who knows what Windows does internally?) + +My point is that there should be a market out there for a hardware RAID +device that can split designated partitions into a permanent base image +partition and a temporary delta image partition, that has some simple but +solid security measures to prevent the unauthorized remote modification of +base images, and that can be configured to clear the delta image when the +server is rebooted. If some vendor wished to implement this, they could then +market this as a mechanism to help frustrate broad classes of attack that +rely on the permanent modification of system or application files via buffer +overflows, platform and middleware bugs, etc. The prevention of unauthorized +modification of application data, of course, would not be addressed by this +particular product. But there are many other techniques out there to defend +application data. But those techniques all assume that your system itself +has not been compromised at a lower level, which is where this product could +help. + +I would have to think that these features would be relatively easy for a +hardware RAID vendor to implement. (I'm just guessing, of course, with no +knowledge of how hardware RAID works internally.) If anyone knows of such a +product, I'd love to hear about it. + +Ben + + diff --git a/Ch3/datasets/spam/easy_ham/01628.ec313c39ed14b11c19c8621f679fe2cd b/Ch3/datasets/spam/easy_ham/01628.ec313c39ed14b11c19c8621f679fe2cd new file mode 100644 index 000000000..02482bc52 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01628.ec313c39ed14b11c19c8621f679fe2cd @@ -0,0 +1,82 @@ +From secprog-return-489-jm=jmason.org@securityfocus.com Fri Sep 6 15:25:00 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4CAB616F16 + for ; Fri, 6 Sep 2002 15:24:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 15:24:59 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869w7C29931 for + ; Fri, 6 Sep 2002 10:58:07 +0100 +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [66.38.151.26]) by webnote.net (8.9.3/8.9.3) with ESMTP id UAA17903 for + ; Thu, 5 Sep 2002 20:25:35 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 1FD148F315; Thu, 5 Sep 2002 10:03:49 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 24294 invoked from network); 5 Sep 2002 09:34:03 -0000 +Date: Thu, 5 Sep 2002 13:49:38 +0400 (MSD) +From: Artem Frolov +X-X-Sender: frolov@zambra.ispras.ru +To: Yannick Gingras +Cc: secprog@securityfocus.com +Subject: Re: Secure Sofware Key +In-Reply-To: <200209040652.07546.ygingras@ygingras.net> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII + +Hi + +On Wed, 4 Sep 2002, Yannick Gingras wrote: + +> BTW thanks for all of you who provided interestiong insight. I'm playing with +> gdb's dissassembler now but I don't think it's what a typical cracker would +> use. Any hints on UNIX cracking tools ? + +There's also an 'objdump' program, and 'biew' hex viewer/disassembler. A good +starting point to search is http://www.freshmeat.net/ + +However, cracking and reverse engineering tools are not so ubiquitous on UNIX as +they are on Windows platform for two main reasons: + +1. The main customers of commercial Unices (Solaris, HP-UX, Aix, SCO...) are +respectable companies. They are ready to pay big bucks for software they need: the reputation matters. + +2. Most software for free and open source Unices like Linux and xBSD (this +software often may be used on commercial unices as well) is, well, free and +open source. + +Regards +/Artem + +-- + Artem Frolov +/------------------------------------------------------------------\ + Software Engineer, System Administrator + Institute for System Programming, Russian Academy of Sciences + Tel. +7 095 912-5317 (ext 4406), Cellular: +7 095 768-7067 + C7 40 CA 41 2A 18 89 D6 29 45 DF 50 75 13 6D 7A A4 87 2B 76 +\------------------------------------------------------------------/ + +------------------------------------------------------------------ +Basic Definitions of Science: + If it's green or wiggles, it's biology. + If it stinks, it's chemistry. + If it doesn't work, it's physics. +------------------------------------------------------------------ + + + + diff --git a/Ch3/datasets/spam/easy_ham/01629.0ff6ccf08604c57e81a797521f9c0e6d b/Ch3/datasets/spam/easy_ham/01629.0ff6ccf08604c57e81a797521f9c0e6d new file mode 100644 index 000000000..e36ea0833 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01629.0ff6ccf08604c57e81a797521f9c0e6d @@ -0,0 +1,81 @@ +From secprog-return-491-jm=jmason.org@securityfocus.com Fri Sep 6 15:25:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 73C1E16F17 + for ; Fri, 6 Sep 2002 15:25:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 06 Sep 2002 15:25:01 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869vZC29813 for + ; Fri, 6 Sep 2002 10:57:35 +0100 +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [66.38.151.26]) by webnote.net (8.9.3/8.9.3) with ESMTP id VAA18263 for + ; Thu, 5 Sep 2002 21:26:46 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 2272E8F290; Thu, 5 Sep 2002 13:30:49 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 12196 invoked from network); 5 Sep 2002 18:51:52 -0000 +From: George Dinwiddie +Message-Id: <200209051908.g85J8bb57967@min.net> +Subject: Re: use of base image / delta image for automated recovery from + attacks +To: bmord@icon-nicholson.com (Ben Mord) +Date: Thu, 5 Sep 2002 15:08:37 -0400 (EDT) +Cc: crispin@wirex.com (Crispin Cowan), + webappsec@securityfocus.com (Webappsec Securityfocus.Com), + SECPROG@securityfocus.com (SECPROG Securityfocus) +In-Reply-To: from + "Ben Mord" + at Sep 05, 2002 11:42:40 AM +Organization: Hovel-On-The-Water +X-Quote: Hope your road is a long one. May there be many summer mornings + when, with what pleasure, what joy, you enter harbors you're seeing for + the first time; (from Ithaka by C.P. Cavafy) +X-Message-Flag: Don't look at this. Read the message. +X-Mailer: ELM [version 2.5 PL5] +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +> Ben Mord said: +> +> >Ah. In that case, you can use something considerably less powerful than +> >VMWare. All you need is a machine configured to boot from CD-ROM and use +> >a RAM disk for scratch space. Numerous Linux distros are available that +> >let you boot a stateless but functional system from CD-ROM. +> +> But RAM is expensive, and the directory structures of many systems (e.g. +> Windows) are not sufficiently organized and standardized to make this +> combination of bootable CDs and RAM drives practical. Even if you are +> fortunate enough to be using Linux (or another FHS-compliant *nix), you +> still can't fit a lot on a CD. Its not unusual today to have gigabytes of +> static multimedia content on the web server. This particular problem can be +> alleviated somewhat by using DVDs, but this is a temporary solution at best +> which will become outdated quickly as our data requirements grow and hard +> drives become cheaper. + +So, just write-protect the hard disk for partitions that are static. +I seem to recall an article on this (early 80's, Byte magazine, perhaps?) +for BBS systems or for testing unknown (perhaps trojan horse) software. + + - George + +-- + ---------------------------------------------------------------------- + George Dinwiddie gdinwiddie@alberg30.org + The gods do not deduct from man's allotted span those hours spent in + sailing. http://www.Alberg30.org/ + ---------------------------------------------------------------------- + + diff --git a/Ch3/datasets/spam/easy_ham/01630.2ce9002966c4aabfcd51c0ed8182b513 b/Ch3/datasets/spam/easy_ham/01630.2ce9002966c4aabfcd51c0ed8182b513 new file mode 100644 index 000000000..409516e68 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01630.2ce9002966c4aabfcd51c0ed8182b513 @@ -0,0 +1,94 @@ +From secprog-return-507-jm=jmason.org@securityfocus.com Wed Sep 18 11:50:54 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 4472916F03 + for ; Wed, 18 Sep 2002 11:50:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Wed, 18 Sep 2002 11:50:53 +0100 (IST) +Received: from outgoing.securityfocus.com ([205.206.231.27]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8I4XsC12571 for + ; Wed, 18 Sep 2002 05:33:54 +0100 +Received: from unknown (unknown [205.206.231.19]) by + outgoing.securityfocus.com (Postfix) with QMQP id 9727BA30C2; + Tue, 17 Sep 2002 20:13:31 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 11785 invoked from network); 17 Sep 2002 15:39:18 -0000 +Date: Tue, 17 Sep 2002 14:51:23 +0200 (CEST) +From: Allan Jensen +To: Richard Bartlett +Cc: secprog@securityfocus.com +Subject: Re: The risks of client systems writing to server registry +In-Reply-To: <20020905134739.1071.qmail@mail.securityfocus.com> +Message-Id: +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII + +On 5 Sep 2002, Richard Bartlett wrote: + +Richard, + +> I have a customer who is developing some printer driver code to allow +> custom driver settings (n-up, booklet, duplex etc.) to be saved up to the +> server to be retrieved by other users. The data is being written, by a +> printer driver (using the logged on users authentication, to a registry +> key) HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT +> x86\Drivers\Version-3\{Driver Name}\{Custom Key}\Subkey). + +Let me get this straight; a registry key is loaded from the server onto +the client workstations who can modify it, then write it back onto the +server's own registry - which is not going to use it? + +> The question is, what are the security risks of allowing users to write +> to this key? The data is string data, in the form of delimited numeric +> values. This data is then retrieved by capable printer drivers and +> interpreted. +> +> The risks as I see it are twofold; +> (1) The risks of a compromise to the server using this registry key. I +> think this is unlikeley as the server itself does not use this data, only +> client PC's do. Unless someone knows a way to travel out of a hive up +> the registry bypassing the permissions set using regedt32. + +What is the reason to write a registry key to a server if the server +itself is not using it? +I don't think you should worry too much about someone travelling out of +the hive, but again, I'm curious as to how the driver actually modifies +the keys on the server. + +> (2) The risks of a compromise to the client (far more likely). This +> would probably be by a malformed or extremely long string in the key +> value, which would presumably lead to either DOS or system compromise by +> buffer overflow on the client system. + +And if the client writes the key back onto the server, yes, there's wide +open for something nasty here. +Two other things spring to mind; +1) If anyone can modify the key, how do you make sure that two users are +not overwriting the same key, thereby causing undesirable effects. +2) If anyone have permissions to write to the key (and below), anyone can +create thousands of extra keys under this key, thereby filling up the +registry. The result of such a thing is obvious. + +If I got this all wrong, I'd be happy that you clarify a bit more and tell +me where I might have misunderstood. + + +Med venlig hilsen / Best regards, +-Allan Jensen + +Si hoc signum legere potes, operis boni in rebus Latinus alacribus et +fructuosis potiri potes! + + + + diff --git a/Ch3/datasets/spam/easy_ham/01631.2cba1b5addc12959348f0318a6cd9bee b/Ch3/datasets/spam/easy_ham/01631.2cba1b5addc12959348f0318a6cd9bee new file mode 100644 index 000000000..393c064cc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01631.2cba1b5addc12959348f0318a6cd9bee @@ -0,0 +1,114 @@ +From secprog-return-508-jm=jmason.org@securityfocus.com Fri Sep 20 11:28:44 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 2E32016F03 + for ; Fri, 20 Sep 2002 11:28:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:28:42 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [205.206.231.26]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8JNJ5C07887 for ; Fri, 20 Sep 2002 00:19:06 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [205.206.231.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 43B578F293; Thu, 19 Sep 2002 16:23:04 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 2162 invoked from network); 19 Sep 2002 21:10:14 -0000 +From: "Michael McKay" +To: "'Bryan Feir'" , + , +Subject: RE: Secure Sofware Key +Date: Thu, 19 Sep 2002 14:44:22 -0700 +Message-Id: <004401c26025$c4aa3260$01000001@iS3Inc> +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.4024 +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +In-Reply-To: <20020904151603.B1300@sgl.crestech.ca> + +Bryan Feir [mailto:bryan@sgl.crestech.ca] wrote: + +>Of course, once one player key was broken, dealing with the rest became +> a known plaintext attack, and the rest of the player keys went down +like +> a row of dominos. + +The actual follow-up to the Xing player break was more interesting than +that. The mere knowledge of known plaintext (a corresponding input and +output) does not necessarily make it trivial to break a properly +designed systems and/or algorithm. The primary reason it was easy for +CSS is because the CSS key was only 40-bits, and thereby easy to break +with exhaustive search attacks. It was only 40-bits (speculated) +because of a misunderstanding of the government cryptography export +rules at the time. + +Even more interesting, to me at least, was that soon after the Xing +player break, people started studying the CSS algorithm itself. They +rapidly found serious design flaws which left the 40-bit CSS algorithm +with an actual strength of around 23-bits (from memory, and new attacks +might have further reduced the strength). This is another great example +showing why proprietary cryptography algorithms should be viewed with +the greatest of suspicion. + + +On Tue, Sep 03, 2002 at 09:03:40PM -0400, Yannick Gingras wrote: +> This make me wonder about the relative protection of smart cards. +They have +> an internal procession unit around 4MHz. Can we consider them as +trusted +> hardware ? + +Yes and no. You can put a limited amount of trust in a smart card. +There have been any number of very clever attacks against smartcards +(Ross Anderson in the UK has documented quite a few of these), and +smartcard manufactures are usually one step behind these attacks. A +well designed system assumes that a system smartcard will be completely +compromised at some point, giving an adversary all of the secrets +contained in the smartcard. The cryptography industry has developed a +variety of techniques that can reduce the impact of a compromise, +including unique keys per smartcard and forward security techniques. + + +Luciano Rocha [strange@nsk.yi.org] wrote: + +> The problem is that that piece of hardware is trustworthy, but the +rest of +> the PC isn't, so a cracker just needs to simulate the lock/smart card, +or +> peek at the executable after the lock has been deactivated. + +Going back to the original question, once the encrypted material goes +outside the trusted hardware, it is impossible to "unbreakably" protect +it. There may be some mitigation steps you can take, such as the SDMI +watermarking, but most schemes to date have been easily broken. + +Another consideration is the value of what you are trying to protect. +While there is no such thing as unbreakable, adding more cost (both in +terms of price and hassle-factor) can greatly improve the protection. +Since you are talking about the use of standard PC workstations, I +presume what you are trying to protect is not THAT valuable. I'm afraid +most security measures don't come for free. + + +Michael McKay +Director of Software Development +mmckay@iscubed.com + + Information Security Systems & Services Inc. + 19925 Stevens Creek Blvd. Cupertino, CA 95014 + Phone: 408.725.7136 x 4138 Fax: 408.973.7239 www.iscubed.com + + diff --git a/Ch3/datasets/spam/easy_ham/01632.60dcbeefdff4ef0a1a8fb4625240507c b/Ch3/datasets/spam/easy_ham/01632.60dcbeefdff4ef0a1a8fb4625240507c new file mode 100644 index 000000000..18d96d52c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01632.60dcbeefdff4ef0a1a8fb4625240507c @@ -0,0 +1,85 @@ +From secprog-return-509-jm=jmason.org@securityfocus.com Fri Sep 20 11:29:20 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7022C16F03 + for ; Fri, 20 Sep 2002 11:29:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 20 Sep 2002 11:29:18 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing3.securityfocus.com + [205.206.231.27]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8K1RlC15202 for ; Fri, 20 Sep 2002 02:27:47 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [205.206.231.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 2EF35A30D1; Thu, 19 Sep 2002 19:19:19 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 1068 invoked from network); 20 Sep 2002 00:36:36 -0000 +Content-Type: text/plain; charset="iso-8859-1" +From: Alex Russell +Organization: netWindows.org +To: "Michael McKay" , + "'Bryan Feir'" , , + +Subject: Re: Secure Sofware Key +Date: Thu, 19 Sep 2002 19:56:55 -0500 +User-Agent: KMail/1.4.2 +References: <004401c26025$c4aa3260$01000001@iS3Inc> +In-Reply-To: <004401c26025$c4aa3260$01000001@iS3Inc> +MIME-Version: 1.0 +Message-Id: <200209191956.55148.alex@netWindows.org> +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - nimbus.sharpwebinnovations.com +X-Antiabuse: Original Domain - securityfocus.com +X-Antiabuse: Originator/Caller UID/GID - [0 0] / [0 0] +X-Antiabuse: Sender Address Domain - netwindows.org +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8K1RlC15202 + +On Thursday 19 September 2002 16:44, Michael McKay wrote: +> On Tue, Sep 03, 2002 at 09:03:40PM -0400, Yannick Gingras wrote: +> > This make me wonder about the relative protection of smart cards. +> They have an internal procession unit around 4MHz. Can we consider them as +> trusted hardware ? + +SmartCards do not have fixed clock rates (more often than not) as the ISO spec +dictates that they are externally powered and clocked, but SmartCards used +for security purposes (usually JavaCards) have built-in crypto co-processors +that make clock rate irrelevant. 4mhz SmartCards can often preform triple-DES +faster than general purpose processors clocked at ten times the speed. + +That said, clock rate has nothing with how trustworthy a card is. As Michael +pointed out, there's something of an arms-race between manufacturers and +attackers which has nothing to do with clock rate, and time and time again +what we've seen is that it's not a question of "is it secure", it's a +question of "who is it secure from and for how long?" Security is rarely a +question of absolutes (despite the often boolean nature of a break), rather +it's a question of assessing, quantifying, and managing risk. SmartCards are +designed to address threats in which the cost of protection cannot exceed the +$1-20 range (depending on the application). + +As whether or not they are "trusted hardware", the question again revolves +around attacker and timeframe. One might expect a bored undergrad EE student +to have more trouble revealing the contents of a pilfered smartcard than, +say, a governtment intelligence service. If your goal is to keep undergrad +EEs from perpetrating mass fraud in the caffeteria, then a smartcard is +likely "trustworthy" enough for your application. If your aim is to protect +ICBM launch codes, then it's probably the wrong tool. In either application, +a risk/cost ratio must justify the use of the protection measure in question. + +-- +Alex Russell +alex@SecurePipe.com +alex@netWindows.org + + diff --git a/Ch3/datasets/spam/easy_ham/01633.3eb28763a8b55952e8050cbade5daa49 b/Ch3/datasets/spam/easy_ham/01633.3eb28763a8b55952e8050cbade5daa49 new file mode 100644 index 000000000..a7f00d4a1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01633.3eb28763a8b55952e8050cbade5daa49 @@ -0,0 +1,73 @@ +From secprog-return-510-jm=jmason.org@securityfocus.com Mon Sep 23 18:31:18 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 747B916F03 + for ; Mon, 23 Sep 2002 18:31:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Mon, 23 Sep 2002 18:31:17 +0100 (IST) +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [205.206.231.26]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8NFICC22953 for ; Mon, 23 Sep 2002 16:18:12 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [205.206.231.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + AAB618F4BC; Mon, 23 Sep 2002 08:21:13 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 13967 invoked from network); 23 Sep 2002 08:06:03 -0000 +Date: Fri, 20 Sep 2002 23:00:42 +0000 +From: redhat +To: SECPROG Securityfocus +Subject: Re: use of base image / delta image for automated recovery from + attacks +Message-Id: <20020920230041.A1139@xlnt-software.com> +Mail-Followup-To: SECPROG Securityfocus +References: +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: +User-Agent: Mutt/1.3.21i +X-Loop: redhat@rphh.org +X-Meow: Your pets will be disembowled if you do not keep up payments. + +reply to the mail from Ben Mord (bmord@icon-nicholson.com): + +> Hi, + +Hello, + +< ... snipped for brevity ... > + +> ... This concept could also be +> applied to the application servers, and even the database server partitions +> (except for those partitions which contain the table data files, of course.) + + Although the data might just be the information that needs protecting. + +> Does anyone do this already? Or is this a new concept? + + I've seen this implemented for a shell server, although they chose +to have their root on a CD-WR in a CD-R drive. Which meant that even +when compromised it was only possible to examine other users data. + AFAIR(emember) they just swapped CD's when a root exploit was found. + +> Thanks for any opinions, + +NP + +blaze your trail +-- +redhat + +'I am become Shiva, destroyer of worlds' + + diff --git a/Ch3/datasets/spam/easy_ham/01634.124f7f456644842860afd1522cd88b55 b/Ch3/datasets/spam/easy_ham/01634.124f7f456644842860afd1522cd88b55 new file mode 100644 index 000000000..70e5053e5 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01634.124f7f456644842860afd1522cd88b55 @@ -0,0 +1,101 @@ +From neugens@libero.it Fri Aug 23 11:04:42 2002 +Return-Path: +Delivered-To: yyyy@localhost.netnoteinc.com +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BED4A44164 + for ; Fri, 23 Aug 2002 06:03:50 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Fri, 23 Aug 2002 11:03:50 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MJiiZ22036 for + ; Thu, 22 Aug 2002 20:44:44 +0100 +Received: from outgoing.securityfocus.com (outgoing2.securityfocus.com + [66.38.151.26]) by webnote.net (8.9.3/8.9.3) with ESMTP id UAA06503 for + ; Thu, 22 Aug 2002 20:44:51 +0100 +Received: from lists.securityfocus.com (lists.securityfocus.com + [66.38.151.19]) by outgoing.securityfocus.com (Postfix) with QMQP id + 3B4388F353; Thu, 22 Aug 2002 12:41:59 -0600 (MDT) +Mailing-List: contact secprog-help@securityfocus.com; run by ezmlm +Precedence: bulk +List-Id: +List-Post: +List-Help: +List-Unsubscribe: +List-Subscribe: +Delivered-To: mailing list secprog@securityfocus.com +Delivered-To: moderator for secprog@securityfocus.com +Received: (qmail 10062 invoked from network); 22 Aug 2002 17:41:11 -0000 +Content-Type: text/plain; charset="us-ascii" +From: Mario Torre +To: secprog@securityfocus.com +Subject: Encryption approach to secure web applications +Date: Thu, 22 Aug 2002 20:15:15 +0200 +User-Agent: KMail/1.4.1 +MIME-Version: 1.0 +Message-Id: <200208222015.15926.neugens@libero.it> +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7MJiiZ22036 + +Hi everybody! + +I'm writing a web application in java (tomcat + jsp/servlets + database +access with postgreSQL). + +This will be released under the GPL and will eventually be useful as a +framework for other web applications. + +The application main focus is e-commerce, but not limited to that. + +I would like to use some form of cryptography to protect data on the +database, but I have some problem figuring out the right approach. + +Above all, how to store passwords and keys in a shared web server. + +A problem that I was unable to solve is how to store keys for +encryption/decryption. The api that I'm using is the jca (jdk1.4.x), +and the methods of saving generated keys in keystores fails always. + +I can serialize the object, and store in the database, but this is not +the most secure approach: this key is needed to decrypt data in the +database, but the database is accessible from the web application. +Assuming that I can find a good and secure place where to store the +database password, I can use a different database with different +user... Argh... to complex and doesn't really solve the problem. + +Where I can found good documentation about this topic? + +There is another approach that I would share with the list, something I +thought that can be of bit interest, but probabily wrong and insecure. +After all, I'm a real beginner in secure programming, and I'm here to +learn methods and technics. + +First of all, I need a secure way to keep database passwords secure, so +I have to keep them separate from the main server. The right approach +could be using a small java bean application that run as normal user +(not tomcat, so it is not shared with other web services or, worst, the +nobody user), that has no shell login, but has a default home directory +or a place where it can hold passwords and keys. + +The web application could then open an ssl connection (could be done in +the init method at server startup) to get database passwords. The small +bean could check via code signature/rmi/whatever else that the source +is the right one, and handle all the database connections, or give the +db connection/password to the main web application. + +In this way, we solve the problem of keeping the keys and passwords in +shared directories, and also, an attacker should get root/bean user +account to read data. This is not perfect, and works only if your +provider gives the opportunity to configure a separated java +application (that means, really, another server running in the +background). + +Any suggestions? + +Thank you, +Mario Torre +-- +Please avoid sending me Word or PowerPoint attachments. +See http://www.fsf.org/philosophy/no-word-attachments.html + diff --git a/Ch3/datasets/spam/easy_ham/01635.7ee140ca2744c34a2ed33de3ceecb016 b/Ch3/datasets/spam/easy_ham/01635.7ee140ca2744c34a2ed33de3ceecb016 new file mode 100644 index 000000000..808442ca7 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01635.7ee140ca2744c34a2ed33de3ceecb016 @@ -0,0 +1,47 @@ +Return-Path: gward@python.net +Delivery-Date: Fri Sep 6 14:44:17 2002 +From: gward@python.net (Greg Ward) +Date: Fri, 6 Sep 2002 09:44:17 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: +References: <15735.50243.135743.32180@12-248-11-90.client.attbi.com> + +Message-ID: <20020906134417.GA16820@cthulhu.gerg.ca> + +On 05 September 2002, Tim Peters said: +> Greg Ward is +> currently capturing a stream coming into python.org, and I hope we can get a +> more modern, and cleaner, test set out of that. + +Not yet -- still working on the required config changes. But I have a +cunning plan... + +> But if that stream contains +> any private email, it may not be ethically possible to make that available. + +It will! Part of my cunning plan involves something like this: + + if folder == "accepted": # ie. not suspected junk mail + if (len(recipients) == 1 and + recipients[0] in ("guido@python.org", "barry@python.org", ...)): + folder = "personal" + +If you (and Guido, Barry, et. al.) prefer, I could change that last +statement to "folder = None", so the mail won't be saved at all. I +*might* also add a "and sender doesn't look like -bounce-*, -request, +-admin, ..." clause to that if statement. + +> Can you think of anyplace to get a large, shareable ham sample apart from a +> public mailing list? Everyone's eager to share their spam, but spam is so +> much alike in so many ways that's the easy half of the data collection +> problem. + +I believe the SpamAssassin maintainers have a scheme whereby the corpus +of non-spam is distributed, ie. several people have bodies of non-spam +that they use for collectively evolving the SA score set. If that +sounds vague, it matches my level of understanding. + + Greg +-- +Greg Ward http://www.gerg.ca/ +Reality is for people who can't handle science fiction. diff --git a/Ch3/datasets/spam/easy_ham/01636.07c82f37d072bce96820af0bbef80eff b/Ch3/datasets/spam/easy_ham/01636.07c82f37d072bce96820af0bbef80eff new file mode 100644 index 000000000..a1fc6f227 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01636.07c82f37d072bce96820af0bbef80eff @@ -0,0 +1,21 @@ +Return-Path: guido@python.org +Delivery-Date: Fri Sep 6 14:54:14 2002 +From: guido@python.org (Guido van Rossum) +Date: Fri, 06 Sep 2002 09:54:14 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: Your message of "Fri, 06 Sep 2002 09:44:17 EDT." + <20020906134417.GA16820@cthulhu.gerg.ca> +References: <15735.50243.135743.32180@12-248-11-90.client.attbi.com> + + <20020906134417.GA16820@cthulhu.gerg.ca> +Message-ID: <200209061354.g86DsEE14105@pcp02138704pcs.reston01.va.comcast.net> + +> I believe the SpamAssassin maintainers have a scheme whereby the corpus +> of non-spam is distributed, ie. several people have bodies of non-spam +> that they use for collectively evolving the SA score set. If that +> sounds vague, it matches my level of understanding. + +See if you can get a hold of that so we can do a level-playing-field +competition. :-) + +--Guido van Rossum (home page: http://www.python.org/~guido/) diff --git a/Ch3/datasets/spam/easy_ham/01637.cd9dec755fc9e6d819137b8e0111e031 b/Ch3/datasets/spam/easy_ham/01637.cd9dec755fc9e6d819137b8e0111e031 new file mode 100644 index 000000000..4f8df7fef --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01637.cd9dec755fc9e6d819137b8e0111e031 @@ -0,0 +1,25 @@ +Return-Path: gward@python.net +Delivery-Date: Fri Sep 6 14:57:18 2002 +From: gward@python.net (Greg Ward) +Date: Fri, 6 Sep 2002 09:57:18 -0400 +Subject: [Spambayes] Re: [Python-Dev] Getting started with GBayes testing +In-Reply-To: <200209060806.g8686ve03964@localhost.localdomain> +References: + <200209060806.g8686ve03964@localhost.localdomain> +Message-ID: <20020906135718.GC16820@cthulhu.gerg.ca> + +On 06 September 2002, Anthony Baxter said: +> A snippet, hopefully not enough to trigger the spam-filters. + +As an aside: one of the best ways to dodge SpamAssassin is by having an +In-Reply-To header. Most list traffic should meet this criterion. + +Alternately, I can whitelist mail to spambayes@python.org -- that'll +work until spammers get ahold of the list address, which usually seems +to take a few months. + + Greg +-- +Greg Ward http://www.gerg.ca/ +Gee, I feel kind of LIGHT in the head now, knowing I can't make my +satellite dish PAYMENTS! diff --git a/Ch3/datasets/spam/easy_ham/01638.1025c8d81a3ce398f65fb401537214fb b/Ch3/datasets/spam/easy_ham/01638.1025c8d81a3ce398f65fb401537214fb new file mode 100644 index 000000000..cd2d5ff7c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01638.1025c8d81a3ce398f65fb401537214fb @@ -0,0 +1,25 @@ +Return-Path: barry@python.org +Delivery-Date: Fri Sep 6 15:23:19 2002 +From: barry@python.org (Barry A. Warsaw) +Date: Fri, 6 Sep 2002 10:23:19 -0400 +Subject: [Spambayes] test sets? +References: <15735.50243.135743.32180@12-248-11-90.client.attbi.com> + +Message-ID: <15736.47703.689156.538539@anthem.wooz.org> + + +>>>>> "TP" == Tim Peters writes: + + >> Any thought to wrapping up your spam and ham test sets for + >> inclusion w/ the spambayes project? + + TP> I gave it all the thought it deserved . It would be + TP> wonderful to get several people cranking on the same test + TP> data, and I'm all in favor of that. OTOH, my Data/ subtree + TP> currently has more than 35,000 files slobbering over 134 + TP> million bytes -- even if I had a place to put that much stuff, + TP> I'm not sure my ISP would let me email it in one msg . + +Check it into the spambayes project. SF's disks are cheap . + +-Barry diff --git a/Ch3/datasets/spam/easy_ham/01639.9ebb5f33ccd9bcfb089d758b7523f0c5 b/Ch3/datasets/spam/easy_ham/01639.9ebb5f33ccd9bcfb089d758b7523f0c5 new file mode 100644 index 000000000..7c5d10d37 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01639.9ebb5f33ccd9bcfb089d758b7523f0c5 @@ -0,0 +1,22 @@ +Return-Path: guido@python.org +Delivery-Date: Fri Sep 6 15:24:37 2002 +From: guido@python.org (Guido van Rossum) +Date: Fri, 06 Sep 2002 10:24:37 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: Your message of "Fri, 06 Sep 2002 10:23:19 EDT." + <15736.47703.689156.538539@anthem.wooz.org> +References: <15735.50243.135743.32180@12-248-11-90.client.attbi.com> + + <15736.47703.689156.538539@anthem.wooz.org> +Message-ID: <200209061424.g86EOcd14363@pcp02138704pcs.reston01.va.comcast.net> + +> Check it into the spambayes project. SF's disks are cheap . + +Perhaps more useful would be if Tim could check in the pickle(s?) +generated by one of his training runs, so that others can see how +Tim's training data performs against their own corpora. This could +also be the starting point for a self-contained distribution (you've +got to start with *something*, and training with python-list data +seems just as good as anything else). + +--Guido van Rossum (home page: http://www.python.org/~guido/) diff --git a/Ch3/datasets/spam/easy_ham/01640.75e754f7e80ce9c9e26898513069d35f b/Ch3/datasets/spam/easy_ham/01640.75e754f7e80ce9c9e26898513069d35f new file mode 100644 index 000000000..e8306ceb4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01640.75e754f7e80ce9c9e26898513069d35f @@ -0,0 +1,35 @@ +Return-Path: barry@python.org +Delivery-Date: Fri Sep 6 15:28:12 2002 +From: barry@python.org (Barry A. Warsaw) +Date: Fri, 6 Sep 2002 10:28:12 -0400 +Subject: [Spambayes] test sets? +References: <15735.50243.135743.32180@12-248-11-90.client.attbi.com> + + <20020906134417.GA16820@cthulhu.gerg.ca> +Message-ID: <15736.47996.84689.421662@anthem.wooz.org> + + +>>>>> "GW" == Greg Ward writes: + + GW> If you (and Guido, Barry, et. al.) prefer, I could change that + GW> last statement to "folder = None", so the mail won't be saved + GW> at all. + +I don't care if the mail is foldered on python.org, but personal +messages regardless of who they're for, shouldn't be part of the +public spambayes repository unless specifically approved by both the +recipient and sender. + +Note also that we are much more liberal about python.org/zope.org +mailing list traffic than most folks. Read list-managers for any +length of time and you'll find that there are a lot of people who +assert strict copyright over their collections, are very protective of +their traffic, and got really pissed when gmane just started +gatewaying their messages without asking. + +Which might be an appropriate for their lists, but not for ours (don't +think I'm suggesting we do the same -- I /like/ our laissez-faire +approach). + +But for personal email, we should be more careful. +-Barry diff --git a/Ch3/datasets/spam/easy_ham/01641.af4f10c1dad2aea2637aa8cd093adc34 b/Ch3/datasets/spam/easy_ham/01641.af4f10c1dad2aea2637aa8cd093adc34 new file mode 100644 index 000000000..3b4d19e70 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01641.af4f10c1dad2aea2637aa8cd093adc34 @@ -0,0 +1,43 @@ +Return-Path: guido@python.org +Delivery-Date: Fri Sep 6 15:31:22 2002 +From: guido@python.org (Guido van Rossum) +Date: Fri, 06 Sep 2002 10:31:22 -0400 +Subject: [Spambayes] Deployment +Message-ID: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> + +Quite independently from testing and tuning the algorithm, I'd like to +think about deployment. + +Eventually, individuals and postmasters should be able to download a +spambayes software distribution, answer a few configuration questions +about their mail setup, training and false positives, and install it +as a filter. + +A more modest initial goal might be the production of a tool that can +easily be used by individuals (since we're more likely to find +individuals willing to risk this than postmasters). + +There are many ways to do this. Some ideas: + +- A program that acts both as a pop client and a pop server. You + configure it by telling it about your real pop servers. You then + point your mail reader to the pop server at localhost. When it + receives a connection, it connects to the remote pop servers, reads + your mail, and gives you only the non-spam. To train it, you'd only + need to send it the false negatives somehow; it can assume that + anything is ham that you don't say is spam within 48 hours. + +- A server with a custom protocol that you send a copy of a message + and that answers "spam" or "ham". Then you have a little program + that is invoked e.g. by procmail that talks to the server. (The + server exists so that it doesn't have to load the pickle with the + scoring database for each message. I don't know how big that pickle + would be, maybe loading it each time is fine. Or maybe + marshalling.) + +- Your idea here. + +Takers? How is ESR's bogofilter packaged? SpamAssassin? The Perl +Bayes filter advertised on slashdot? + +--Guido van Rossum (home page: http://www.python.org/~guido/) diff --git a/Ch3/datasets/spam/easy_ham/01642.6e47b00b04a6f2cb1cf9c5c86031132d b/Ch3/datasets/spam/easy_ham/01642.6e47b00b04a6f2cb1cf9c5c86031132d new file mode 100644 index 000000000..f36f2c54f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01642.6e47b00b04a6f2cb1cf9c5c86031132d @@ -0,0 +1,22 @@ +Return-Path: barry@python.org +Delivery-Date: Fri Sep 6 15:38:56 2002 +From: barry@python.org (Barry A. Warsaw) +Date: Fri, 6 Sep 2002 10:38:56 -0400 +Subject: [Spambayes] test sets? +References: <15735.50243.135743.32180@12-248-11-90.client.attbi.com> + + <15736.47703.689156.538539@anthem.wooz.org> + <200209061424.g86EOcd14363@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: <15736.48640.283430.184348@anthem.wooz.org> + + +>>>>> "GvR" == Guido van Rossum writes: + + GvR> Perhaps more useful would be if Tim could check in the + GvR> pickle(s?) generated by one of his training runs, so that + GvR> others can see how Tim's training data performs against their + GvR> own corpora. + +He could do that too. :) + +-Barry diff --git a/Ch3/datasets/spam/easy_ham/01643.e3c2e047714a395c583f80730acd3762 b/Ch3/datasets/spam/easy_ham/01643.e3c2e047714a395c583f80730acd3762 new file mode 100644 index 000000000..c536b7d5e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01643.e3c2e047714a395c583f80730acd3762 @@ -0,0 +1,38 @@ +Return-Path: bkc@murkworks.com +Delivery-Date: Fri Sep 6 15:39:48 2002 +From: bkc@murkworks.com (Brad Clements) +Date: Fri, 06 Sep 2002 10:39:48 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: <3D788653.9143.1D8992DA@localhost> + +On 6 Sep 2002 at 10:31, Guido van Rossum wrote: + +> your mail, and gives you only the non-spam. To train it, you'd only need +> to send it the false negatives somehow; it can assume that anything is +> ham that you don't say is spam within 48 hours. + +I have folks who leave their email programs running 24 hours a day, constantly polling +for mail. If they go away for a long weekend, lots of "friday night spam" will become +ham on sunday night. (Friday night seems to be the most popular time) + + +> - Your idea here. + +Ultimately I'd like to see tight integration into the "most popular email clients".. As a +stop-gap to the auto-ham .. + +How about adding an IMAP server with a spam and deleted-ham folder. Most email +clients can handle IMAP. Users should be able to quickly move "spam" into the spam +folder. + +Instead of deleting messages (or, by reprogramming the delete function) they can +quickly move ham into the ham folder. + +In either case, the message would be processed and then destroyed. + + +Brad Clements, bkc@murkworks.com (315)268-1000 +http://www.murkworks.com (315)268-9812 Fax +AOL-IM: BKClements + diff --git a/Ch3/datasets/spam/easy_ham/01644.77c7add87dfb454c2bcc8ce9f60482bd b/Ch3/datasets/spam/easy_ham/01644.77c7add87dfb454c2bcc8ce9f60482bd new file mode 100644 index 000000000..7e663064d --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01644.77c7add87dfb454c2bcc8ce9f60482bd @@ -0,0 +1,60 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Fri Sep 6 15:45:27 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 10:45:27 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: <15736.5577.157228.229200@12-248-11-90.client.attbi.com> +Message-ID: + +[Tim] +> OTOH, my Data/ subtree currently has more than 35,000 files slobbering +> over 134 million bytes -- even if I had a place to put that much stuff, +> I'm not sure my ISP would let me email it in one msg . + +[Skip] +> Do you have a dialup or something more modern ? + +Much more modern: a cable modem with a small upload rate cap. There's a +reason the less modern uncapped @Home went out of business . + +> 134MB of messages zipped would probably compress pretty well - under 50MB +> I'd guess with all the similarity in the headers and such. You could zip +> each of the 10 sets individually and upload them somewhere. + +I suppose this could finish over the course of an afternoon. Now where's +"somewhere"? I expect we'll eventually collect several datasets; +SourceForge isn't a good place for it (they expect projects to distribute +relatively small code files, and complain if even those get big). + +> ... +> How about random sampling lots of public mailing lists via gmane or +> something similar, manually cleaning it (distributing that load over a +> number of people) and then relying on your clever code and your +> rebalancing script to help further cleanse it? + +What then are we training the classifier to do? Graham's scoring scheme is +based on an assumption that the ham-vs-spam task is *easy*, and half of that +is due to that the ham has a lot in common. It was an experiment to apply +his scheme to all the comp.lang.python traffic, which is a lot broader than +he had in mind (c.l.py has long had a generous definition of "on topic" +). I don't expect good things to come of making it ever broader, +*unless* your goal is to investigate just how broad it can be made before it +breaks down. + +> The "problem" with the ham is it tends to be much more tied to one person +> (not just intimate, but unique) than the spam. + +Which is "a feature" from Graham's POV: the more clues, the better this +"smoking guns only" approach should work. + +> I save all incoming email for ten days (gzipped mbox format) before it +rolls +> over and disappears. At any one time I think I have about 8,000-10,000 +> messages. Most of it isn't terribly personal (which I would cull before +> passing along anyway) and much of it is machine-generated, so would be of +> marginal use. Finally, it's all ham-n-spam mixed together. Do we call +> that an omelette or a Denny's Grand Slam? + +Unless you're volunteering to clean it, tag it, package it, and distribute +it, I'd call it irrelevant . + diff --git a/Ch3/datasets/spam/easy_ham/01645.f61b77d47c074402d1ee5976e9a4fd7d b/Ch3/datasets/spam/easy_ham/01645.f61b77d47c074402d1ee5976e9a4fd7d new file mode 100644 index 000000000..6e352a8ac --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01645.f61b77d47c074402d1ee5976e9a4fd7d @@ -0,0 +1,41 @@ +Return-Path: guido@python.org +Delivery-Date: Fri Sep 6 15:43:33 2002 +From: guido@python.org (Guido van Rossum) +Date: Fri, 06 Sep 2002 10:43:33 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: Your message of "Fri, 06 Sep 2002 10:39:48 EDT." + <3D788653.9143.1D8992DA@localhost> +References: <3D788653.9143.1D8992DA@localhost> +Message-ID: <200209061443.g86Ehie14557@pcp02138704pcs.reston01.va.comcast.net> + +> > your mail, and gives you only the non-spam. To train it, you'd only need +> > to send it the false negatives somehow; it can assume that anything is +> > ham that you don't say is spam within 48 hours. +> +> I have folks who leave their email programs running 24 hours a day, +> constantly polling for mail. If they go away for a long weekend, +> lots of "friday night spam" will become ham on sunday night. +> (Friday night seems to be the most popular time) + +So we'll make this a config parameter. + +> > - Your idea here. +> +> Ultimately I'd like to see tight integration into the "most popular +> email clients".. As a stop-gap to the auto-ham .. + +What's an auto-ham? + +> How about adding an IMAP server with a spam and deleted-ham +> folder. Most email clients can handle IMAP. Users should be able to +> quickly move "spam" into the spam folder. + +I personally don't think IMAP has a bright future, but for people who +do use it, that's certainly a good approach. + +> Instead of deleting messages (or, by reprogramming the delete +> function) they can quickly move ham into the ham folder. + +Yes. + +--Guido van Rossum (home page: http://www.python.org/~guido/) diff --git a/Ch3/datasets/spam/easy_ham/01646.6943600e0de67c472ee13c9f14345e0f b/Ch3/datasets/spam/easy_ham/01646.6943600e0de67c472ee13c9f14345e0f new file mode 100644 index 000000000..eb289f4b9 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01646.6943600e0de67c472ee13c9f14345e0f @@ -0,0 +1,50 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Fri Sep 6 15:59:38 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 10:59:38 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: <200209060759.g867xcV03853@localhost.localdomain> +Message-ID: + +[Anthony Baxter] +> I've got a test set here that's the last 3 and a bit years email to +> info@ekit.com and info@ekno.com - it's a really ugly set of 20,000+ +> messages, currently broken into 7,000 spam, 9,000 ham, 9,000 currently +> unclassified. These addresses are all over the 70-some different +> ekit/ekno/ISIConnect websites, so they get a LOT of spam. +> +> As well as the usual spam, it also has customers complaining about +> credit card charges, it has people interested in the service and +> asking questions about long distance rates, &c &c &c. Lots and lots +> of "commercial" speech, in other words. Stuff that SA gets pretty +> badly wrong. + +Can this corpus be shared? I suppose not. + +> I'm currently mangling it by feeding all parts (text, html, whatever +> else :) into the filters, as well as both a selected number of headers +> (to, from, content-type, x-mailer), and also a list of (header, +> count_of_header). This is showing up some nice stuff - e.g. the +> X-uidl that stoopid spammers blindly copy into their messages. + +If we ever have a shared corpus, an easy refactoring of timtest +should allow to plug in different tokenizers. I've only made three changes +to Graham's algorithm so far (well, I've made dozens -- only three survived +testing as proven winners), all the rest has been refining the tokenization +to provide better clues. + +> I did have Received in there, but it's out for the moment, as it causes +> rates to drop. + +That's ambiguous. Accuracy rates or error rates, ham or spam rates? + +> I'm also stripping out HTML tags, except for href="" and src="" - there's +> so so much goodness in them (note that I'm only keeping the contents of +> the attributes). + +Mining embedded http/https/ftp thingies cut the false negative rate in half +in my tests (not keying off href, just scanning for anything that "looked +like" one); that was the single biggest f-n improvement I've seen. It +didn't change the false positive rate. So you know whether src added +additional power, or did you do both at once? + diff --git a/Ch3/datasets/spam/easy_ham/01647.c5afcba50538a5f49d6e261f6bcfed40 b/Ch3/datasets/spam/easy_ham/01647.c5afcba50538a5f49d6e261f6bcfed40 new file mode 100644 index 000000000..e0d00b1dc --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01647.c5afcba50538a5f49d6e261f6bcfed40 @@ -0,0 +1,42 @@ +Return-Path: skip@pobox.com +Delivery-Date: Fri Sep 6 16:01:51 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Fri, 6 Sep 2002 10:01:51 -0500 +Subject: [Spambayes] Deployment +In-Reply-To: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> +References: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: <15736.50015.881231.510395@12-248-11-90.client.attbi.com> + + + Guido> Takers? How is ESR's bogofilter packaged? SpamAssassin? The + Guido> Perl Bayes filter advertised on slashdot? + +Dunno about the other tools, but SpamAssassin is a breeze to incorporate +into a procmail environment. Lots of people use it in many other ways. For +performance reasons, many people run a spamd process and then invoke a small +C program called spamc which shoots the message over to spamd and passes the +result back out. I think spambayes in incremental mode is probably fast +enough to not require such tricks (though I would consider changing the +pickle to an anydbm file). + +Basic procmail usage goes something like this: + + :0fw + | spamassassin -P + + :0 + * ^X-Spam-Status: Yes + $SPAM + +Which just says, "Run spamassassin -P reinjecting its output into the +processing stream. If the resulting mail has a header which begins +"X-Spam-Status: Yes", toss it into the folder indicated by the variable +$SPAM. + +SpamAssassin also adds other headers as well, which give you more detail +about how its tests fared. I'd like to see spambayes operate in at least +this way: do its thing then return a message to stdout with a modified set +of headers which further processing downstream can key on. + +Skip + diff --git a/Ch3/datasets/spam/easy_ham/01648.7758ab9d9eb224bcb73e0e8e803e92c9 b/Ch3/datasets/spam/easy_ham/01648.7758ab9d9eb224bcb73e0e8e803e92c9 new file mode 100644 index 000000000..492d946b1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01648.7758ab9d9eb224bcb73e0e8e803e92c9 @@ -0,0 +1,48 @@ +Return-Path: bkc@murkworks.com +Delivery-Date: Fri Sep 6 16:02:11 2002 +From: bkc@murkworks.com (Brad Clements) +Date: Fri, 06 Sep 2002 11:02:11 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: <200209061443.g86EhXQ14543@pcp02138704pcs.reston01.va.comcast.net> +References: Your message of "Fri, 06 Sep 2002 10:39:48 EDT." + <3D788653.9143.1D8992DA@localhost> +Message-ID: <3D788B92.22739.1D9E0FD1@localhost> + +Did you want this on the list? I'm replying to the list.. + +On 6 Sep 2002 at 10:43, Guido van Rossum wrote: + +> What's an auto-ham? + +Automatically marking something as ham after a given timeout.. regardless of how long +that timeout is, someone is going to forget to submit the message back as spam. + +How many spams-as-hams can be accepted before the f-n rate gets unacceptable? + + +> > How about adding an IMAP server with a spam and deleted-ham +> > folder. Most email clients can handle IMAP. Users should be able to +> > quickly move "spam" into the spam folder. +> +> I personally don't think IMAP has a bright future, but for people who +> do use it, that's certainly a good approach. +> +> > Instead of deleting messages (or, by reprogramming the delete +> > function) they can quickly move ham into the ham folder. +> +> Yes. + +I view IMAP as a stop-gap measure until tighter integration with various email clients +can be achieved. + +I still feel it's better to require classification feedback from the recipient, rather than +make any assumptions after some period of time passes. But this is an end-user issue +and we're still at the algorithm stage.. ;-) + + + + +Brad Clements, bkc@murkworks.com (315)268-1000 +http://www.murkworks.com (315)268-9812 Fax +AOL-IM: BKClements + diff --git a/Ch3/datasets/spam/easy_ham/01649.5bcdd9205f59d95e025a2896a38ee2bb b/Ch3/datasets/spam/easy_ham/01649.5bcdd9205f59d95e025a2896a38ee2bb new file mode 100644 index 000000000..3e852967c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01649.5bcdd9205f59d95e025a2896a38ee2bb @@ -0,0 +1,43 @@ +Return-Path: guido@python.org +Delivery-Date: Fri Sep 6 16:05:22 2002 +From: guido@python.org (Guido van Rossum) +Date: Fri, 06 Sep 2002 11:05:22 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: Your message of "Fri, 06 Sep 2002 11:02:11 EDT." + <3D788B92.22739.1D9E0FD1@localhost> +References: "Your message of Fri, 06 Sep 2002 10:39:48 EDT." + <3D788653.9143.1D8992DA@localhost> + <3D788B92.22739.1D9E0FD1@localhost> +Message-ID: <200209061505.g86F5MM14762@pcp02138704pcs.reston01.va.comcast.net> + +> > What's an auto-ham? +> +> Automatically marking something as ham after a given +> timeout.. regardless of how long that timeout is, someone is going +> to forget to submit the message back as spam. + +OK, here's a refinement. Assuming very little spam comes through, we +only need to pick a small percentage of ham received as new training +ham to match the new training spam. The program could randomly select +a sufficient number of saved non-spam msgs and ask the user to +validate this selection. You could do this once a day or week (config +parameter). + +> How many spams-as-hams can be accepted before the f-n rate gets +> unacceptable? + +Config parameter. + +> I view IMAP as a stop-gap measure until tighter integration with +> various email clients can be achieved. +> +> I still feel it's better to require classification feedback from the +> recipient, rather than make any assumptions after some period of +> time passes. But this is an end-user issue and we're still at the +> algorithm stage.. ;-) + +I'm trying to think about the end-user issues because I have nothing +to contribute to the algorithm at this point. For deployment we need +both! + +--Guido van Rossum (home page: http://www.python.org/~guido/) diff --git a/Ch3/datasets/spam/easy_ham/01650.f51bd31e8f0e63be278c22d7a4d2bf10 b/Ch3/datasets/spam/easy_ham/01650.f51bd31e8f0e63be278c22d7a4d2bf10 new file mode 100644 index 000000000..f35b90581 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01650.f51bd31e8f0e63be278c22d7a4d2bf10 @@ -0,0 +1,41 @@ +Return-Path: guido@python.org +Delivery-Date: Fri Sep 6 16:06:26 2002 +From: guido@python.org (Guido van Rossum) +Date: Fri, 06 Sep 2002 11:06:26 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: Your message of "Fri, 06 Sep 2002 10:01:51 CDT." + <15736.50015.881231.510395@12-248-11-90.client.attbi.com> +References: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> + <15736.50015.881231.510395@12-248-11-90.client.attbi.com> +Message-ID: <200209061506.g86F6Qo14777@pcp02138704pcs.reston01.va.comcast.net> + +> Dunno about the other tools, but SpamAssassin is a breeze to incorporate +> into a procmail environment. Lots of people use it in many other ways. For +> performance reasons, many people run a spamd process and then invoke a small +> C program called spamc which shoots the message over to spamd and passes the +> result back out. I think spambayes in incremental mode is probably fast +> enough to not require such tricks (though I would consider changing the +> pickle to an anydbm file). +> +> Basic procmail usage goes something like this: +> +> :0fw +> | spamassassin -P +> +> :0 +> * ^X-Spam-Status: Yes +> $SPAM +> +> Which just says, "Run spamassassin -P reinjecting its output into the +> processing stream. If the resulting mail has a header which begins +> "X-Spam-Status: Yes", toss it into the folder indicated by the variable +> $SPAM. +> +> SpamAssassin also adds other headers as well, which give you more detail +> about how its tests fared. I'd like to see spambayes operate in at least +> this way: do its thing then return a message to stdout with a modified set +> of headers which further processing downstream can key on. + +Do you feel capable of writing such a tool? It doesn't look too hard. + +--Guido van Rossum (home page: http://www.python.org/~guido/) diff --git a/Ch3/datasets/spam/easy_ham/01651.7cafcb2d9dcaadd665afabc65c267f36 b/Ch3/datasets/spam/easy_ham/01651.7cafcb2d9dcaadd665afabc65c267f36 new file mode 100644 index 000000000..c71bdb397 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01651.7cafcb2d9dcaadd665afabc65c267f36 @@ -0,0 +1,26 @@ +Return-Path: skip@pobox.com +Delivery-Date: Fri Sep 6 16:12:58 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Fri, 6 Sep 2002 10:12:58 -0500 +Subject: [Spambayes] Deployment +In-Reply-To: <200209061443.g86Ehie14557@pcp02138704pcs.reston01.va.comcast.net> +References: <3D788653.9143.1D8992DA@localhost> + <200209061443.g86Ehie14557@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: <15736.50682.911121.462698@12-248-11-90.client.attbi.com> + + + >> Ultimately I'd like to see tight integration into the "most popular + >> email clients".. + +The advantage of using a kitchen sink (umm, make that highly programmable) +editor+email package like Emacs+VM is that you can twiddle your key bindings +and write a little ELisp (or Pymacs) glue to toss messages in the right +direction (spam or ham). For this, spambayes would have to operate in an +incremental fashion when fed a single ham or spam message. + +(No, I have no idea what an "auto-ham" is. A pig run over by a car, +perhaps?) + +give-a-dog-a-bone-ly, y'rs, + +Skip diff --git a/Ch3/datasets/spam/easy_ham/01652.864cc509960bb627696e65943038856e b/Ch3/datasets/spam/easy_ham/01652.864cc509960bb627696e65943038856e new file mode 100644 index 000000000..17e131214 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01652.864cc509960bb627696e65943038856e @@ -0,0 +1,24 @@ +Return-Path: skip@pobox.com +Delivery-Date: Fri Sep 6 16:19:30 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Fri, 6 Sep 2002 10:19:30 -0500 +Subject: [Spambayes] Deployment +In-Reply-To: <200209061506.g86F6Qo14777@pcp02138704pcs.reston01.va.comcast.net> +References: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> + <15736.50015.881231.510395@12-248-11-90.client.attbi.com> + <200209061506.g86F6Qo14777@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: <15736.51074.369911.905337@12-248-11-90.client.attbi.com> + + + >> Dunno about the other tools, but SpamAssassin is a breeze ... + >> SpamAssassin also adds other headers as well, which give you more + >> detail ... + + Guido> Do you feel capable of writing such a tool? It doesn't look too + Guido> hard. + +Sure, but at the moment I have to stop reading email for a few hours and do +some real work. ;-) I'll see if I can modify GBayes.py suitably over the +weekend. + +Skip diff --git a/Ch3/datasets/spam/easy_ham/01653.b13797de35037c4f26356e89ba3f9fb1 b/Ch3/datasets/spam/easy_ham/01653.b13797de35037c4f26356e89ba3f9fb1 new file mode 100644 index 000000000..2808d1289 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01653.b13797de35037c4f26356e89ba3f9fb1 @@ -0,0 +1,27 @@ +Return-Path: nas@python.ca +Delivery-Date: Fri Sep 6 16:57:05 2002 +From: nas@python.ca (Neil Schemenauer) +Date: Fri, 6 Sep 2002 08:57:05 -0700 +Subject: [Spambayes] Deployment +In-Reply-To: <200209061443.g86Ehie14557@pcp02138704pcs.reston01.va.comcast.net> +References: <3D788653.9143.1D8992DA@localhost> + <200209061443.g86Ehie14557@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: <20020906155705.GA22115@glacier.arctrix.com> + +Guido van Rossum wrote: +> I personally don't think IMAP has a bright future, but for people who +> do use it, that's certainly a good approach. + +Writing an IMAP server is a non-trivial task. The specification is huge +and clients do all kinds of weird stuff. POP is very easy in +comparison. Perhaps you could forward messages to a special address or +save them in a special folder to mark them as false negatives. + +Alternatively, perhaps there could be a separate protocol and client +that could be used to review additions to the training set. Each day a +few random spam and ham messages could be grabbed as candidates. +Someone would periodically startup the client, review the candidates, +reclassify or remove any messages they don't like and add them to the +training set. + + Neil diff --git a/Ch3/datasets/spam/easy_ham/01654.ade7f371dd3f7c4393baf201b803755a b/Ch3/datasets/spam/easy_ham/01654.ade7f371dd3f7c4393baf201b803755a new file mode 100644 index 000000000..5039c7504 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01654.ade7f371dd3f7c4393baf201b803755a @@ -0,0 +1,39 @@ +Return-Path: barry@python.org +Delivery-Date: Fri Sep 6 17:23:33 2002 +From: barry@python.org (Barry A. Warsaw) +Date: Fri, 6 Sep 2002 12:23:33 -0400 +Subject: [Spambayes] Deployment +References: <3D788653.9143.1D8992DA@localhost> + <200209061443.g86Ehie14557@pcp02138704pcs.reston01.va.comcast.net> + <20020906155705.GA22115@glacier.arctrix.com> +Message-ID: <15736.54917.688066.738120@anthem.wooz.org> + + +>>>>> "NS" == Neil Schemenauer writes: + + NS> Writing an IMAP server is a non-trivial task. + +That's what I've been told by everyone I've talked to who's actually +tried to write one. + + NS> Alternatively, perhaps there could be a separate protocol and + NS> client that could be used to review additions to the training + NS> set. Each day a few random spam and ham messages could be + NS> grabbed as candidates. Someone would periodically startup the + NS> client, review the candidates, reclassify or remove any + NS> messages they don't like and add them to the training set. + +I think people will be much more motivated to report spam than ham. I +like the general approach that copies of random messages will be +sequestered for some period of time before they're assumed to be ham. +Matched with a simple spam reporting scheme, this could keep the +training up to date with little effort. I've sketched out an approach +a listserver like Mailman could do along these lines and if I get some +free time I'll hack something together. + +I like the idea of a POP proxy which is classifying messages as +they're pulled from the server. The easiest way for such a beast to +be notified of spam might be to simply save the spam in a special +folder or file that the POP proxy would periodically consult. + +-Barry diff --git a/Ch3/datasets/spam/easy_ham/01655.c3fc45d31d7f105f7baa0d7617f71402 b/Ch3/datasets/spam/easy_ham/01655.c3fc45d31d7f105f7baa0d7617f71402 new file mode 100644 index 000000000..c6956b72c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01655.c3fc45d31d7f105f7baa0d7617f71402 @@ -0,0 +1,69 @@ +Return-Path: paul-bayes@svensson.org +Delivery-Date: Fri Sep 6 17:27:57 2002 +From: paul-bayes@svensson.org (Paul Svensson) +Date: Fri, 6 Sep 2002 12:27:57 -0400 (EDT) +Subject: [Spambayes] Corpus Collection (Was: Re: Deployment) +In-Reply-To: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: + +On Fri, 6 Sep 2002, Guido van Rossum wrote: + +>Quite independently from testing and tuning the algorithm, I'd like to +>think about deployment. +> +>Eventually, individuals and postmasters should be able to download a +>spambayes software distribution, answer a few configuration questions +>about their mail setup, training and false positives, and install it +>as a filter. +> +>A more modest initial goal might be the production of a tool that can +>easily be used by individuals (since we're more likely to find +>individuals willing to risk this than postmasters). + +My impression is that a pre-collected corpus would not fit most individuals +very well, but each individual (or group?) should collect their own corpus. + +One problem that comes upp immediately: individuals are lazy. + +If I currently get 50 spam and 50 ham a day, and I'll have to +press the 'delete' button once for each spam, I'll be happy +to press the 'spam' button instead. However, if in addition +have to press a 'ham' button for each ham, it starts to look +much less like a win to me. Add the time to install and setup +the whole machinery, and I'll just keep hitting delete. + +The suggestions so far have been to hook something on the delete +action, that adds a message to the ham corpus. I see two problems +with this: the ham will be a bit skewed; mail that I keep around +without deleting will not be counted. Secondly, if I by force of +habit happen to press the 'delete' key instead of the 'spam' key, +I'll end up with spam in the ham, anyways. + +I would like to look for a way to deal with spam in the ham. + +The obvious thing to do is to trigger on the 'spam' button, +and at that time look for messages similar to the deleted one +in the ham corpus, and simply remove them. To do this we +need a way to compare two word count histograms, to see +how similar they are. Any ideas ? + +Also, I personally would prefer to not see the spam at all. +If they get bounced (preferably already in the SMTP), +false positives become the senders problem, to rewrite +to remove the spam smell. + +In a well tuned system then, there spam corpus will be much +smaller than the ham corpus, so it would be possible to be +slightly over-agressive when clearing potential spam from +the ham corpus. This should make it easier to keep it clean. + +Having a good way to remove spam from the ham corpus, +there's less need to worry about it getting there by mistake, +and we might as well simply add all messages to the ham corpus, +that didn't get deleted by the spam filtering. + +It might also be useful to have a way to remove messages from +the spam corpus, in case of user ooops. + + /Paul + diff --git a/Ch3/datasets/spam/easy_ham/01656.705cfa5ceb056324fe8fef48d12754db b/Ch3/datasets/spam/easy_ham/01656.705cfa5ceb056324fe8fef48d12754db new file mode 100644 index 000000000..518c10193 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01656.705cfa5ceb056324fe8fef48d12754db @@ -0,0 +1,24 @@ +Return-Path: guido@python.org +Delivery-Date: Fri Sep 6 17:27:01 2002 +From: guido@python.org (Guido van Rossum) +Date: Fri, 06 Sep 2002 12:27:01 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: Your message of "Fri, 06 Sep 2002 12:25:05 EDT." + <20020906162505.GB17800@cthulhu.gerg.ca> +References: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> + <20020906162505.GB17800@cthulhu.gerg.ca> +Message-ID: <200209061627.g86GR1p15407@pcp02138704pcs.reston01.va.comcast.net> + +> I guess MUA-level filtering is just a fallback for people who don't have +> 1) a burning, all-consuming hatred of junk mail, 2) root access to all +> mail servers they rely on, and 3) the ability and inclination to install +> an MTA with every bell and whistle tweaked to keep out junk mail. + +Sure. But for most people, changing their company's or ISP's server +requires years of lobbying, while they have total and immediate +control over their own MUA. + +That said, I agree that we should offer a good solution to +postmasters, and I trust that your ideas are right on the mark! + +--Guido van Rossum (home page: http://www.python.org/~guido/) diff --git a/Ch3/datasets/spam/easy_ham/01657.a57fd76dcafe47299543685aa2387d32 b/Ch3/datasets/spam/easy_ham/01657.a57fd76dcafe47299543685aa2387d32 new file mode 100644 index 000000000..dc159f73f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01657.a57fd76dcafe47299543685aa2387d32 @@ -0,0 +1,26 @@ +Return-Path: jeremy@alum.mit.edu +Delivery-Date: Fri Sep 6 17:28:09 2002 +From: jeremy@alum.mit.edu (Jeremy Hylton) +Date: Fri, 6 Sep 2002 12:28:09 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> +References: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: <15736.55193.38098.486459@slothrop.zope.com> + +I think one step towards deployment is creating a re-usable tokenizer +for mail messages. The current codebase doesn't expose an easy-to-use +or easy-to-customize tokenizer. + +The timtest module seems to contain an enormous body of practical +knowledge about how to parse mail messages, but the module wasn't +designed for re-use. I'd like to see a module that can take a single +message or a collection of messages and tokenize each one. + +I'd like to see the tokenize by customizable, too. Tim had to exclude +some headers from his test data, because there were particular biases +in the test data. If other people have test data without those +biases, they ought to be able to customize the tokenizer to include +them or exclude others. + +Jeremy + diff --git a/Ch3/datasets/spam/easy_ham/01658.eeb706ce24cbbf2cd21648a4781a1464 b/Ch3/datasets/spam/easy_ham/01658.eeb706ce24cbbf2cd21648a4781a1464 new file mode 100644 index 000000000..5bd604f51 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01658.eeb706ce24cbbf2cd21648a4781a1464 @@ -0,0 +1,104 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Fri Sep 6 17:45:09 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 12:45:09 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: <15736.54481.733005.644033@anthem.wooz.org> +Message-ID: + +[Barry A. Warsaw, gives answers and asks questions] + +Here's the code that produced the header tokens: + + x2n = {} + for x in msg.keys(): + x2n[x] = x2n.get(x, 0) + 1 + for x in x2n.items(): + yield "header:%s:%d" % x + + +Some responses: + +> 0.01 19 3559 'header:X-Mailman-Version:1' +> 0.01 19 3559 'header:List-Id:1' +> 0.01 19 3557 'header:X-BeenThere:1' +> +> These three are definitely MM artifacts, although the second one +> /could/ be inserted by other list management software (it's described +> in an RFC). + +Since all the ham came from Mailman, and only 19 spam had it, it's quite +safe to assume then that I should ignore these for now. + +> 0.01 0 3093 'header:Newsgroups:1' +> 0.01 0 3054 'header:Xref:1' +> 0.01 0 3053 'header:Path:1' +> +> These aren't MM artifacts, but are byproducts of gating a message off +> of an nntp feed. Some of the other NNTP-* headers are similar, but I +> won't point them out below. + +I should ignore these too then. + +> 0.01 19 2668 'header:List-Unsubscribe:1' +> 0.01 19 2668 'header:List-Subscribe:1' +> 0.01 19 2668 'header:List-Post:1' +> 0.01 19 2668 'header:List-Help:1' +> 0.01 19 2668 'header:List-Archive:1' +> +> RFC recommended generic listserve headers that MM injects. + +Ditto. + +> So why do you get two entries for this one? +> +> 0.99 519 0 'header:Received:8' +> 0.99 466 1 'header:Received:7' + +Read the code . The first line counts msgs that had 8 instances of a +'Received' header, and the second counts msgs that had 7 instances. I +expect this is a good clue! The more indirect the mail path, the more of +those thingies we'll see, and if you're posting from a spam trailer park in +Tasmania you may well need to travel thru more machines. + +> ... +> Note that header names are case insensitive, so this one's no +> different than "MIME-Version:". Similarly other headers in your list. + +Ignoring case here may or may not help; that's for experiment to decide. +It's plausible that case is significant, if, e.g., a particular spam mailing +package generates unusual case, or a particular clueless spammer +misconfigures his package. + +> 0.02 65 3559 'header:Precedence:1' +> +> Could be Mailman, or not. This header is supposed to tell other +> automated software that this message was automated. E.g. a replybot +> should ignore any message with a Precedence: {bulk|junk|list}. + +Rule of thumb: if Mailman inserts a thing, I should ignore it. Or, better, +I should stop trying to out-think the flaws in the test data and get better +test data instead! + +> 0.50 4 0 'header:2:1' +> +> !? +> ... +> 0.50 0 2 'header:' +> +> Heh? + +I sucked out all the wordinfo keys that began with "header:". The last line +there was probably due to unrelated instances of the string "header:" in +message bodies. Harder to guess about the first line. + +> ... +> Some headers of course are totally unreliable as to their origin. I'm +> thinking stuff like MIME-Version, Content-Type, To, From, etc, etc. +> Everyone sticks those in. + +The brilliance of Anthony's "just count them" scheme is that it requires no +thought, so can't be fooled . Header lines that are evenly +distributed across spam and ham will turn out to be worthless indicators +(prob near 0.5), so do no harm. + diff --git a/Ch3/datasets/spam/easy_ham/01659.1d4646886358156accce640171c77c1d b/Ch3/datasets/spam/easy_ham/01659.1d4646886358156accce640171c77c1d new file mode 100644 index 000000000..ffa8fff15 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01659.1d4646886358156accce640171c77c1d @@ -0,0 +1,55 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Fri Sep 6 17:55:07 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 12:55:07 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: <200209060811.g868Bo904031@localhost.localdomain> +Message-ID: + +[Anthony Baxter] +> The other thing on my todo list (probably tonight's tram ride home) is +> to add all headers from non-text parts of multipart messages. If nothing +> else, it'll pick up most virus email real quick. + +See the checkin comments for timtest.py last night. Adding this code gave a +major reduction in the false negative rate: + +def crack_content_xyz(msg): + x = msg.get_type() + if x is not None: + yield 'content-type:' + x.lower() + + x = msg.get_param('type') + if x is not None: + yield 'content-type/type:' + x.lower() + + for x in msg.get_charsets(None): + if x is not None: + yield 'charset:' + x.lower() + + x = msg.get('content-disposition') + if x is not None: + yield 'content-disposition:' + x.lower() + + fname = msg.get_filename() + if fname is not None: + for x in fname.lower().split('/'): + for y in x.split('.'): + yield 'filename:' + y + + x = msg.get('content-transfer-encoding:') + if x is not None: + yield 'content-transfer-encoding:' + x.lower() + + +... + + t = '' + for x in msg.walk(): + for w in crack_content_xyz(x): + yield t + w + t = '>' + +I *suspect* most of that stuff didn't make any difference, but I put it all +in as one blob so don't know which parts did and didn't help. + diff --git a/Ch3/datasets/spam/easy_ham/01660.2ac623f4f429bbe90824fa535e73b558 b/Ch3/datasets/spam/easy_ham/01660.2ac623f4f429bbe90824fa535e73b558 new file mode 100644 index 000000000..4ba3d3d09 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01660.2ac623f4f429bbe90824fa535e73b558 @@ -0,0 +1,24 @@ +Return-Path: barry@python.org +Delivery-Date: Fri Sep 6 17:59:49 2002 +From: barry@python.org (Barry A. Warsaw) +Date: Fri, 6 Sep 2002 12:59:49 -0400 +Subject: [Spambayes] test sets? +References: + +Message-ID: <15736.57093.811682.371784@anthem.wooz.org> + + + TP> A false positive *really* has to work hard then, eh? The long + TP> quote of a Nigerian scam letter is one of the two that made + TP> it, and spamprob() looked at all this stuff before deciding it + TP> was spam: + +Here's an interesting thing to test: discriminate words differently if +they are on a line that starts with `>' or, to catch styles like +above, that the first occurance on a line of < or > is > (to eliminate +html). + +Then again, it may not be worth trying to un-false-positive that +Nigerian scam quote. + +-Barry diff --git a/Ch3/datasets/spam/easy_ham/01661.1393ea887720c777d1429b07fce98ab4 b/Ch3/datasets/spam/easy_ham/01661.1393ea887720c777d1429b07fce98ab4 new file mode 100644 index 000000000..a06d592aa --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01661.1393ea887720c777d1429b07fce98ab4 @@ -0,0 +1,75 @@ +Return-Path: neale@woozle.org +Delivery-Date: Fri Sep 6 18:13:17 2002 +From: neale@woozle.org (Neale Pickett) +Date: 06 Sep 2002 10:13:17 -0700 +Subject: [Spambayes] Deployment +In-Reply-To: <200209061506.g86F6Qo14777@pcp02138704pcs.reston01.va.comcast.net> +References: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> + <15736.50015.881231.510395@12-248-11-90.client.attbi.com> + <200209061506.g86F6Qo14777@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: + +So then, Guido van Rossum is all like: + +> > Basic procmail usage goes something like this: +> > +> > :0fw +> > | spamassassin -P +> > +> > :0 +> > * ^X-Spam-Status: Yes +> > $SPAM +> > +> +> Do you feel capable of writing such a tool? It doesn't look too hard. + +Not to beat a dead horse, but that's exactly what my spamcan package +did. For those just tuning in, spamcan is a thingy I wrote before I +knew about Tim & co's work on this crazy stuff; you can download it from +, but I'm not going +to work on it anymore. + +I'm currently writing a new one based on classifier (and timtest's +booty-kicking tokenizer). I'll probably have something soon, like maybe +half an hour, and no, it's not too hard. The hard part is storing the +data somewhere. I don't want to use ZODB, as I'd like something a +person can just drop in with a default Python install. So anydbm is +looking like my best option. + +I already have a setup like this using Xavier Leroy's SpamOracle, which +does the same sort of thing. You call it from procmail, it adds a new +header, and then you can filter on that header. Really easy. + +Here's how I envision this working. Everybody gets four new mailboxes: + + train-eggs + train-spam + trained-eggs + trained-spam + +You copy all your spam and eggs* into the "train-" boxes as you get it. +How frequently you do this would be up to you, but you'd get better +results if you did it more often, and you'd be wise to always copy over +anything which was misclassified. Then, every night, the spam fairy +swoops down and reads through your folders, learning about what sorts of +things you think are eggs and what sorts of things are spam. After she's +done, she moves your mail into the "trained-" folders. + +This would work for anybody using IMAP on a Unix box, or folks who read +their mail right off the server. I've spoken with some fellows at work +about Exchange and they seem to beleive that Exchange exports +appropriate functionality to implement a spam fairy as well. + +Advanced users could stay ahead of the game by reprogramming their mail +client to bind the key "S" to "move to train-spam" and "H" to "move to +train-eggs". Eventually, if enough people used this sort of thing, it'd +start showing up in mail clients. That's the "delete as spam" button +Paul Graham was talking about. + +* The Hormel company might not think well of using the word "ham" as the + opposite of "spam", and they've been amazingly cool about the use of + their product name for things thus far. So I propose we start calling + non-spam something more innocuous (and more Monty Pythonic) such as + "eggs". + +Neale diff --git a/Ch3/datasets/spam/easy_ham/01662.4257318f87e53aa246882d00e42c67d5 b/Ch3/datasets/spam/easy_ham/01662.4257318f87e53aa246882d00e42c67d5 new file mode 100644 index 000000000..11cc6a4b3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01662.4257318f87e53aa246882d00e42c67d5 @@ -0,0 +1,56 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Fri Sep 6 18:35:55 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 13:35:55 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: <15736.55193.38098.486459@slothrop.zope.com> +Message-ID: + +[Jeremy Hylton] +> I think one step towards deployment is creating a re-usable tokenizer +> for mail messages. The current codebase doesn't expose an easy-to-use +> or easy-to-customize tokenizer. + +tokenize() couldn't be easier to use: it takes a string argument, and +produces a stream of tokens (whether via explicit list, or generator, or +tuple, or ... doesn't matter). All the tokenize() functions in GBayes.py +and timtest.py are freely interchangeable this way. + +Note that we have no evidence to support that a customizable tokenizer would +do any good, or, if it would, in which ways customization could be helpful. +That's a research issue on which no work has been done. + +> The timtest module seems to contain an enormous body of practical +> knowledge about how to parse mail messages, but the module wasn't +> designed for re-use. + +That's partly a failure of imagination . Splitting out all knowledge +of tokenization is just a large block cut-and-paste ... there, it's done. +Change the + + from timtoken import tokenize + +at the top to use any other tokenizer now. If you want to make it easier +still, feel free to check in something better. + +> I'd like to see a module that can take a single message or a collection of +> messages and tokenize each one. + +The Msg and MsgStream classes in timtest.py are a start at that, but it's +hard to do anything truly *useful* here when people use all sorts of +different physical representations for email msgs (mboxes in various +formats, one file per "folder", one file per msg, Skip's gzipped gimmick, +...). If you're a Python coder , you *should* find it very easy to +change the guts of Msg and MsgStream to handle your peculiar scheme. +Defining interfaces for these guys should be done. + +> I'd like to see the tokenize by customizable, too. Tim had to exclude +> some headers from his test data, because there were particular biases +> in the test data. If other people have test data without those +> biases, they ought to be able to customize the tokenizer to include +> them or exclude others. + +This sounds like a bottomless pit to me, and there's no easier way to +customize than to edit the code. As README.txt still says, though, massive +refactoring would help. Hop to it! + diff --git a/Ch3/datasets/spam/easy_ham/01663.16e55768065036480deaa72ebb3bd8d5 b/Ch3/datasets/spam/easy_ham/01663.16e55768065036480deaa72ebb3bd8d5 new file mode 100644 index 000000000..84fa5b684 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01663.16e55768065036480deaa72ebb3bd8d5 @@ -0,0 +1,45 @@ +Return-Path: whisper@oz.net +Delivery-Date: Fri Sep 6 18:53:24 2002 +From: whisper@oz.net (David LeBlanc) +Date: Fri, 6 Sep 2002 10:53:24 -0700 +Subject: [Spambayes] Deployment +In-Reply-To: +Message-ID: + +I think that when considering deployment, a solution that supports all +Python platforms and not just the L|Unix crowd is desirable. + +Mac and PC users are more apt to be using a commercial MUA that's unlikely +to offer hooking ability (at least not easily). As mentioned elsewhere, even +L|Unix users may find an MUA solution easier to use then getting it added to +their MTA. (SysOps make programmers look like flaming liberals ;).) + +My notion of a solution for Windows/Outlook has been, as Guido described, a +client-server. Client side does pop3/imap/mapi fetching (of which, I'm only +going to implement pop3 initially) potentially on several hosts, spamhams +the incoming mail and puts it into one file per message (qmail style?). The +MUA accesses this "eThunk" as a server to obtain all the ham. Spam is +retained in the eThunk and a simple viewer would be used for manual +oversight on the spam for ultimate rejection (and training of spam filter) +and the ham will go forward (after being used for training) on the next MUA +fetch. eThunk would sit on a timer for 'always online' users, but I am not +clear on how to support dialup users with this scheme. + +Outbound mail would use a direct path from the MUA to the MTA. Hopefully all +MUAs can split the host fetch/send URL's + +IMO, end users are likely to be more intested in n-way classification. If +this is available, the "simple viewer" could be enhanced to support viewing +via folders and (at least for me) the Outlook nightmare is over - I would +use this as my only MUA. (N.B. according to my recent readings, the best +n-way classifier uses something called a "Support Vector Machine" (SVM) +which is 5-8% more accurate then Naive Bayes (NB) ). + +I wonder if the focus of spambayes ought not to be a classifier that leaves +the fetching and feeding of messages to auxillary code? That way, it could +be dropped into whatever harness that suited the user's situation. + +David LeBlanc +Seattle, WA USA + + diff --git a/Ch3/datasets/spam/easy_ham/01664.f726e854a4f84a55fa0961e65c372e8d b/Ch3/datasets/spam/easy_ham/01664.f726e854a4f84a55fa0961e65c372e8d new file mode 100644 index 000000000..0cebabc1f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01664.f726e854a4f84a55fa0961e65c372e8d @@ -0,0 +1,20 @@ +Return-Path: guido@python.org +Delivery-Date: Fri Sep 6 18:58:14 2002 +From: guido@python.org (Guido van Rossum) +Date: Fri, 06 Sep 2002 13:58:14 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: Your message of "Fri, 06 Sep 2002 10:53:24 PDT." + +References: +Message-ID: <200209061758.g86HwET15939@pcp02138704pcs.reston01.va.comcast.net> + +> I wonder if the focus of spambayes ought not to be a classifier that +> leaves the fetching and feeding of messages to auxillary code? That +> way, it could be dropped into whatever harness that suited the +> user's situation. + +I see no reason to restrict the project to developing the classifier +and leave the deployment to others. Attempts at deployment in the +real world will surely provide additional feedback for the classifier. + +--Guido van Rossum (home page: http://www.python.org/~guido/) diff --git a/Ch3/datasets/spam/easy_ham/01665.e849ebd7ee95f02a6f4d937acb7575e2 b/Ch3/datasets/spam/easy_ham/01665.e849ebd7ee95f02a6f4d937acb7575e2 new file mode 100644 index 000000000..b2718fb46 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01665.e849ebd7ee95f02a6f4d937acb7575e2 @@ -0,0 +1,28 @@ +Return-Path: gward@python.net +Delivery-Date: Fri Sep 6 19:02:23 2002 +From: gward@python.net (Greg Ward) +Date: Fri, 6 Sep 2002 14:02:23 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: +References: <15736.54481.733005.644033@anthem.wooz.org> + +Message-ID: <20020906180223.GA18250@cthulhu.gerg.ca> + +On 06 September 2002, Tim Peters said: +> > Note that header names are case insensitive, so this one's no +> > different than "MIME-Version:". Similarly other headers in your list. +> +> Ignoring case here may or may not help; that's for experiment to decide. +> It's plausible that case is significant, if, e.g., a particular spam mailing +> package generates unusual case, or a particular clueless spammer +> misconfigures his package. + +Case of headers is definitely helpful. SpamAssassin has a rule for it +-- if you have headers like "DATE" or "SUBJECT", you get a few more +points. + + Greg +-- +Greg Ward http://www.gerg.ca/ +God is omnipotent, omniscient, and omnibenevolent +---it says so right here on the label. diff --git a/Ch3/datasets/spam/easy_ham/01666.531649d2c834408569b5aba7d5b2b9fb b/Ch3/datasets/spam/easy_ham/01666.531649d2c834408569b5aba7d5b2b9fb new file mode 100644 index 000000000..2215ed2e2 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01666.531649d2c834408569b5aba7d5b2b9fb @@ -0,0 +1,35 @@ +Return-Path: skip@pobox.com +Delivery-Date: Fri Sep 6 19:48:35 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Fri, 6 Sep 2002 13:48:35 -0500 +Subject: [Spambayes] Deployment +In-Reply-To: <20020906162505.GB17800@cthulhu.gerg.ca> +References: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> + <20020906162505.GB17800@cthulhu.gerg.ca> +Message-ID: <15736.63619.488739.691181@12-248-11-90.client.attbi.com> + + + Greg> In case it wasn't obvious, I'm a strong proponent of filtering + Greg> junk mail as early as possible, ie. right after the SMTP DATA + Greg> command has been completed. Filtering spam at the MUA just seems + Greg> stupid to me -- by the time it gets to me MUA, the spammer has + Greg> already stolen my bandwidth. + +The two problems I see with filtering that early are: + + 1. Everyone receiving email via that server will contribute ham to the + stew, making the Bayesian classification less effective. + + 2. Given that there will be some false positives, you absolutely have to + put the mail somewhere. You can't simply delete it. (I also don't + like the TMDA-ish business of replying with a msg that says, "here's + what you do to really get your message to me." That puts an extra + burden on my correspondents.) As an individual, I would prefer you + put spammish messages somewhere where I can review them, not an + anonymous sysadmin who I might not trust with my personal email + (nothing against you Greg ;-). + +I personally prefer to manage this stuff at the user agent level. Bandwidth +is a heck of a lot cheaper than my time. + +Skip diff --git a/Ch3/datasets/spam/easy_ham/01667.4aac42588f98c49a6d4c39c4e65d3387 b/Ch3/datasets/spam/easy_ham/01667.4aac42588f98c49a6d4c39c4e65d3387 new file mode 100644 index 000000000..7f8651bee --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01667.4aac42588f98c49a6d4c39c4e65d3387 @@ -0,0 +1,52 @@ +Return-Path: harri.pasanen@bigfoot.com +Delivery-Date: Fri Sep 6 20:07:28 2002 +From: harri.pasanen@bigfoot.com (Harri Pasanen) +Date: Fri, 6 Sep 2002 21:07:28 +0200 +Subject: [Spambayes] Deployment +In-Reply-To: <15736.63619.488739.691181@12-248-11-90.client.attbi.com> +References: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> + <20020906162505.GB17800@cthulhu.gerg.ca> + <15736.63619.488739.691181@12-248-11-90.client.attbi.com> +Message-ID: <200209062107.28106.harri.pasanen@bigfoot.com> + +On Friday 06 September 2002 20:48, Skip Montanaro wrote: +> Greg> In case it wasn't obvious, I'm a strong proponent of +> filtering Greg> junk mail as early as possible, ie. right after the +> SMTP DATA Greg> command has been completed. Filtering spam at the +> MUA just seems Greg> stupid to me -- by the time it gets to me MUA, +> the spammer has Greg> already stolen my bandwidth. +> +> The two problems I see with filtering that early are: +> +> 1. Everyone receiving email via that server will contribute ham +> to the stew, making the Bayesian classification less effective. +> +> 2. Given that there will be some false positives, you absolutely +> have to put the mail somewhere. You can't simply delete it. (I also +> don't like the TMDA-ish business of replying with a msg that says, +> "here's what you do to really get your message to me." That puts an +> extra burden on my correspondents.) As an individual, I would prefer +> you put spammish messages somewhere where I can review them, not an +> anonymous sysadmin who I might not trust with my personal email +> (nothing against you Greg ;-). +> +> I personally prefer to manage this stuff at the user agent level. +> Bandwidth is a heck of a lot cheaper than my time. +> + +I see no reason why both approaches could and should not be used. +MTA level filtering would just need to use a different corpus, one that +would contain illegal or otherwise commonly unapproved material for the +group of people using that MTA. I'm sure that such an approach would +significantly reduce the mail traffic as a first step, without giving +false positives. + +MUA corpus would then be personally trained -- although I'd like the +option of 'down-loadable' corpuses and merge functionality. + +Harri + +PS. Just joined the list, so pardon if my thoughts have been hashed +through before. + + diff --git a/Ch3/datasets/spam/easy_ham/01668.8880ac0caa45450bea484d7e9cafdece b/Ch3/datasets/spam/easy_ham/01668.8880ac0caa45450bea484d7e9cafdece new file mode 100644 index 000000000..d3e6c0544 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01668.8880ac0caa45450bea484d7e9cafdece @@ -0,0 +1,21 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Fri Sep 6 20:24:15 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 15:24:15 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: + +[Guido] +> ... +> - A program that acts both as a pop client and a pop server. You +> configure it by telling it about your real pop servers. You then +> point your mail reader to the pop server at localhost. When it +> receives a connection, it connects to the remote pop servers, reads +> your mail, and gives you only the non-spam. + +FYI, I'll never trust such a scheme: I have no tolerance for false +positives, and indeed do nothing to try to block spam on any of my email +accounts now for that reason. Deliver all suspected spam to a Spam folder +instead and I'd love it. + diff --git a/Ch3/datasets/spam/easy_ham/01669.d4ebf95243e3b22d80ea63a1f2be06cc b/Ch3/datasets/spam/easy_ham/01669.d4ebf95243e3b22d80ea63a1f2be06cc new file mode 100644 index 000000000..78dfd3e56 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01669.d4ebf95243e3b22d80ea63a1f2be06cc @@ -0,0 +1,27 @@ +Return-Path: guido@python.org +Delivery-Date: Fri Sep 6 20:24:38 2002 +From: guido@python.org (Guido van Rossum) +Date: Fri, 06 Sep 2002 15:24:38 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: Your message of "Fri, 06 Sep 2002 15:24:15 EDT." + +References: +Message-ID: <200209061924.g86JOc516514@pcp02138704pcs.reston01.va.comcast.net> + +> > - A program that acts both as a pop client and a pop server. You +> > configure it by telling it about your real pop servers. You then +> > point your mail reader to the pop server at localhost. When it +> > receives a connection, it connects to the remote pop servers, reads +> > your mail, and gives you only the non-spam. +> +> FYI, I'll never trust such a scheme: I have no tolerance for false +> positives, and indeed do nothing to try to block spam on any of my email +> accounts now for that reason. Deliver all suspected spam to a Spam folder +> instead and I'd love it. + +Another config parameter. + +The filter could add a header file. Or a ~ to the subject if you like +that style. :-) + +--Guido van Rossum (home page: http://www.python.org/~guido/) diff --git a/Ch3/datasets/spam/easy_ham/01670.2f86bbeac16f343c0c9e8d9d363cabb2 b/Ch3/datasets/spam/easy_ham/01670.2f86bbeac16f343c0c9e8d9d363cabb2 new file mode 100644 index 000000000..74c4c4f16 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01670.2f86bbeac16f343c0c9e8d9d363cabb2 @@ -0,0 +1,21 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Fri Sep 6 20:21:22 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 15:21:22 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: + +[Guido] +> ... +> I don't know how big that pickle would be, maybe loading it each time +> is fine. Or maybe marshalling.) + +My tests train on about 7,000 msgs, and a binary pickle of the database is +approaching 10 million bytes. I haven't done anything to try to reduce its +size, and know of some specific problem areas (for example, doing character +5-grams of "long words" containing high-bit characters generates a lot of +database entries, and I suspect they're approximately worthless). OTOH, +adding in more headers will increase the size. So let's call it 10 meg +. + diff --git a/Ch3/datasets/spam/easy_ham/01671.572d5d58699f0b03e959bbdc6ee14e83 b/Ch3/datasets/spam/easy_ham/01671.572d5d58699f0b03e959bbdc6ee14e83 new file mode 100644 index 000000000..6cb50e406 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01671.572d5d58699f0b03e959bbdc6ee14e83 @@ -0,0 +1,33 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Fri Sep 6 20:43:56 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 15:43:56 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: <200209061431.g86EVM114413@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: + +[Guido] +> Takers? How is ESR's bogofilter packaged? SpamAssassin? The Perl +> Bayes filter advertised on slashdot? + +WRT the last, it's a small pile of Windows .exe files along with +cygwin1.dll. The .exes are cmdline programs. One is a POP3 proxy. If I +currently have an email server named, say, mail.comcast.net, with user name +timmy, then I change my email reader to say that my server is 127.0.0.1, and +that my user name on that server is mail.comcast.net:timmy. In that way the +proxy picks up both the real server and user names from what the mail reader +tells it the user name is. + +This is an N-way classifier (like ifile that way), and "all it does" is +insert a + + X-Text-Classification: one_of_the_class_names_you_picked + +header into your email before passing it on to your mail reader. The user +then presumably fiddles their mail reader to look for such headers and "do +something about it" (and even Outlook can handle *that* much ). + +The user is responsible for generating text files with appropriate examples +of each class of message, and for running the cmdline tools to train the +classifier. + diff --git a/Ch3/datasets/spam/easy_ham/01672.dd744a40e87e0715cd0153fef3a63a99 b/Ch3/datasets/spam/easy_ham/01672.dd744a40e87e0715cd0153fef3a63a99 new file mode 100644 index 000000000..e8c9448ba --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01672.dd744a40e87e0715cd0153fef3a63a99 @@ -0,0 +1,46 @@ +Return-Path: whisper@oz.net +Delivery-Date: Fri Sep 6 20:53:36 2002 +From: whisper@oz.net (David LeBlanc) +Date: Fri, 6 Sep 2002 12:53:36 -0700 +Subject: [Spambayes] Deployment +In-Reply-To: +Message-ID: + +You missed the part that said that spam is kept in the "eThunk" and was +viewable by a simple viewer for final disposition? + +Of course, with Outbloat, you could fire up PythonWin and stuff the spam +into the Junk Email folder... but then you loose the ability to retrain on +the user classified ham/spam. + +David LeBlanc +Seattle, WA USA + +> -----Original Message----- +> From: spambayes-bounces+whisper=oz.net@python.org +> [mailto:spambayes-bounces+whisper=oz.net@python.org]On Behalf Of Tim +> Peters +> Sent: Friday, September 06, 2002 12:24 +> To: spambayes@python.org +> Subject: RE: [Spambayes] Deployment +> +> +> [Guido] +> > ... +> > - A program that acts both as a pop client and a pop server. You +> > configure it by telling it about your real pop servers. You then +> > point your mail reader to the pop server at localhost. When it +> > receives a connection, it connects to the remote pop servers, reads +> > your mail, and gives you only the non-spam. +> +> FYI, I'll never trust such a scheme: I have no tolerance for false +> positives, and indeed do nothing to try to block spam on any of my email +> accounts now for that reason. Deliver all suspected spam to a Spam folder +> instead and I'd love it. +> +> +> _______________________________________________ +> Spambayes mailing list +> Spambayes@python.org +> http://mail.python.org/mailman-21/listinfo/spambayes + diff --git a/Ch3/datasets/spam/easy_ham/01673.6a0570ff6d45b717e0b6352d8fbf7ad4 b/Ch3/datasets/spam/easy_ham/01673.6a0570ff6d45b717e0b6352d8fbf7ad4 new file mode 100644 index 000000000..6327adfde --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01673.6a0570ff6d45b717e0b6352d8fbf7ad4 @@ -0,0 +1,58 @@ +Return-Path: neale@woozle.org +Delivery-Date: Fri Sep 6 20:58:33 2002 +From: neale@woozle.org (Neale Pickett) +Date: 06 Sep 2002 12:58:33 -0700 +Subject: [Spambayes] Deployment +In-Reply-To: +References: +Message-ID: + +So then, Tim Peters is all like: + +> [Guido] +> > ... +> > I don't know how big that pickle would be, maybe loading it each time +> > is fine. Or maybe marshalling.) +> +> My tests train on about 7,000 msgs, and a binary pickle of the database is +> approaching 10 million bytes. + +My paltry 3000-message training set makes a 6.3MB (where 1MB=1e6 bytes) +pickle. hammie.py, which I just checked in, will optionally let you +write stuff out to a dbm file. With that same message base, the dbm +file weighs in at a hefty 21.4MB. It also takes longer to write: + + Using a database: + real 8m24.741s + user 6m19.410s + sys 1m33.650s + + Using a pickle: + real 1m39.824s + user 1m36.400s + sys 0m2.160s + +This is on a PIII at 551.257MHz (I don't know what it's *supposed* to +be, 551.257 is what /proc/cpuinfo says). + +For comparison, SpamOracle (currently the gold standard in my mind, at +least for speed) on the same data blazes along: + + real 0m29.592s + user 0m28.050s + sys 0m1.180s + +Its data file, which appears to be a marshalled hash, is 448KB. +However, it's compiled O'Caml and it uses a much simpler tokenizing +algorithm written with a lexical analyzer (ocamllex), so we'll never be +able to outperform it. It's something to keep in mind, though. + +I don't have statistics yet for scanning unknown messages. (Actually, I +do, and the database blows the pickle out of the water, but it scores +every word with 0.00, so I'm not sure that's a fair test. ;) In any +case, 21MB per user is probably too large, and 10MB is questionable. + +On the other hand, my pickle compressed very well with gzip, shrinking +down to 1.8MB. + +Neale diff --git a/Ch3/datasets/spam/easy_ham/01674.6bb054bf786bfbfeacc78dd1918ffbfa b/Ch3/datasets/spam/easy_ham/01674.6bb054bf786bfbfeacc78dd1918ffbfa new file mode 100644 index 000000000..a99396bd4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01674.6bb054bf786bfbfeacc78dd1918ffbfa @@ -0,0 +1,22 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Fri Sep 6 22:32:21 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 17:32:21 -0400 +Subject: [Spambayes] Deployment +In-Reply-To: +Message-ID: + +[Tim] +> My tests train on about 7,000 msgs, and a binary pickle of the database is +> approaching 10 million bytes. + +That shrinks to under 2 million bytes, though, if I delete all the WordInfo +records with spamprob exactly equal to UNKNOWN_SPAMPROB. Such records +aren't needed when scoring (an unknown word gets a made-up probability of +UNKNOWN_SPAMPROB). Such records are only needed for training; I've noted +before that a scoring-only database can be leaner. + +In part the bloat is due to character 5-gram'ing, part due to that the +database is brand new so has never been cleaned via clearjunk(), and part +due to plain evil gremlins. + diff --git a/Ch3/datasets/spam/easy_ham/01675.5e3a4fdad399e2557d6921d7e938faef b/Ch3/datasets/spam/easy_ham/01675.5e3a4fdad399e2557d6921d7e938faef new file mode 100644 index 000000000..dfd72a8a6 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01675.5e3a4fdad399e2557d6921d7e938faef @@ -0,0 +1,44 @@ +Return-Path: neale@woozle.org +Delivery-Date: Fri Sep 6 22:44:33 2002 +From: neale@woozle.org (Neale Pickett) +Date: 06 Sep 2002 14:44:33 -0700 +Subject: [Spambayes] Deployment +In-Reply-To: +References: +Message-ID: + +So then, Tim Peters is all like: + +> [Tim] +> > My tests train on about 7,000 msgs, and a binary pickle of the database is +> > approaching 10 million bytes. +> +> That shrinks to under 2 million bytes, though, if I delete all the WordInfo +> records with spamprob exactly equal to UNKNOWN_SPAMPROB. Such records +> aren't needed when scoring (an unknown word gets a made-up probability of +> UNKNOWN_SPAMPROB). Such records are only needed for training; I've noted +> before that a scoring-only database can be leaner. + +That's pretty good. I wonder how much better you could do by using some +custom pickler. I just checked my little dbm file and found a lot of +what I would call bloat: + + >>> import anydbm, hammie + >>> d = hammie.PersistentGrahamBayes("ham.db") + >>> db = anydbm.open("ham.db") + >>> db["neale"], len(db["neale"]) + ('ccopy_reg\n_reconstructor\nq\x01(cclassifier\nWordInfo\nq\x02c__builtin__\nobject\nq\x03NtRq\x04(GA\xce\xbc{\xfd\x94\xbboK\x00K\x00K\x00G?\xe0\x00\x00\x00\x00\x00\x00tb.', 106) + >>> d.wordinfo["neale"], len(`d.wordinfo["neale"]`) + (WordInfo'(1031337979.16197, 0, 0, 0, 0.5)', 42) + +Ignoring the fact that there are too many zeros in there, the pickled +version of that WordInfo object is over twice as large as the string +representation. So we could get a 50% decrease in size just by using +the string representation instead of the pickle, right? + +Something about that logic seems wrong to me, but I can't see what it +is. Maybe pickling is good for heterogeneous data types, but every +value of our big dictionary is going to have the same type, so there's a +ton of redundancy. I guess that explains why it compressed so well. + +Neale diff --git a/Ch3/datasets/spam/easy_ham/01676.b1039d148dbb347b468973dc6bfe0319 b/Ch3/datasets/spam/easy_ham/01676.b1039d148dbb347b468973dc6bfe0319 new file mode 100644 index 000000000..be4d70bdb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01676.b1039d148dbb347b468973dc6bfe0319 @@ -0,0 +1,23 @@ +Return-Path: skip@pobox.com +Delivery-Date: Fri Sep 6 23:39:48 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Fri, 6 Sep 2002 17:39:48 -0500 +Subject: [Spambayes] understanding high false negative rate +In-Reply-To: +References: <15737.2576.315460.956295@slothrop.zope.com> + +Message-ID: <15737.11956.18745.619040@12-248-11-90.client.attbi.com> + + + >> > ##Remove: jeremy@alum.mit.edu## + + Tim> Yuck: it got two 0.01's from embedding your email address at the + Tim> bottom here. + +Which suggests that tagging email addresses in To/CC headers should be +handled differently than in message bodies? + +Skip + + + diff --git a/Ch3/datasets/spam/easy_ham/01677.35908078146d2d19fccf8b786aa83cf7 b/Ch3/datasets/spam/easy_ham/01677.35908078146d2d19fccf8b786aa83cf7 new file mode 100644 index 000000000..7e50ffcc0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01677.35908078146d2d19fccf8b786aa83cf7 @@ -0,0 +1,30 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Sat Sep 7 00:03:58 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 19:03:58 -0400 +Subject: [Spambayes] understanding high false negative rate +In-Reply-To: <15737.11956.18745.619040@12-248-11-90.client.attbi.com> +Message-ID: + +> >> > ##Remove: jeremy@alum.mit.edu## +> +> Tim> Yuck: it got two 0.01's from embedding your email address at the +> Tim> bottom here. +> +> Which suggests that tagging email addresses in To/CC headers should be +> handled differently than in message bodies? + +I don't know whether it suggests that, but they would be tagged differently +in to/cc if I were tagging them at all right now. If I were tagging To: +addresses, for example, the tokens would look like + + 'to:email addr:mit' + +instead of + + 'email addr:mit' + +as they appear when an email-like thingie is found in the body. Whether +email addresses should be stuck in as one blob or split up as they are now +is something I haven't tested. + diff --git a/Ch3/datasets/spam/easy_ham/01678.8f5053b1fda58d8224b0fb4827413912 b/Ch3/datasets/spam/easy_ham/01678.8f5053b1fda58d8224b0fb4827413912 new file mode 100644 index 000000000..5111184cd --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01678.8f5053b1fda58d8224b0fb4827413912 @@ -0,0 +1,24 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Sat Sep 7 00:21:15 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 19:21:15 -0400 +Subject: [Spambayes] [ANN] Trained classifier available +In-Reply-To: <20020906162505.GB17800@cthulhu.gerg.ca> +Message-ID: + + http://sf.net/project/showfiles.php?group_id=61702 + + This is the binary pickle of my classifier after training on + my first spam/ham corpora pair. All records with + spamprob == UNKNOWN_SPAMPROB have been purged. + +It's in a zip file, and is only half a meg. + +Jeremy, it would be interesting if you tried that on your data. The false +negative rates across my other 4 test sets when run against this are: + + 0.364% + 0.400% + 0.400% + 0.909% + diff --git a/Ch3/datasets/spam/easy_ham/01679.e027f2af78c05f8498f09d7979cd127d b/Ch3/datasets/spam/easy_ham/01679.e027f2af78c05f8498f09d7979cd127d new file mode 100644 index 000000000..50d65601c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01679.e027f2af78c05f8498f09d7979cd127d @@ -0,0 +1,123 @@ +Return-Path: jeremy@alum.mit.edu +Delivery-Date: Sat Sep 7 01:00:14 2002 +From: jeremy@alum.mit.edu (Jeremy Hylton) +Date: Fri, 6 Sep 2002 20:00:14 -0400 +Subject: [Spambayes] understanding high false negative rate +In-Reply-To: +References: <15737.2576.315460.956295@slothrop.zope.com> + +Message-ID: <15737.16782.542869.368986@slothrop.zope.com> + +>>>>> "TP" == Tim Peters writes: + + >> The false positive rate is 0-3%. (Finally! I had to scrub a + >> bunch of previously unnoticed spam from my inbox.) Both + >> collections have about 1100 messages. + + TP> Does this mean you trained on about 1100 of each? + +The total collections are 1100 messages. I trained with 1100/5 +messages. + + TP> Can't guess. You're in a good position to start adding more + TP> headers into the analysis, though. For example, an easy start + TP> would be to uncomment the header-counting lines in tokenize() + TP> (look for "Anthony"). Likely the most valuable thing it's + TP> missing then is some special parsing and tagging of Received + TP> headers. + +I tried the "Anthony" stuff, but it didn't make any appreciable +difference that I could see from staring at the false negative rate. +The numbers are big enough that a quick eyeball suffices. + +Then I tried a dirt simple tokenizer for the headers that tokenize the +words in the header and emitted like this "%s: %s" % (hdr, word). +That worked too well :-). The received and date headers helped the +classifier discover that most of my spam is old and most of my ham is +new. + +So I tried a slightly more complex one that skipped received, data, +and x-from_, which all contained timestamps. I also skipped the X-VM- +headers that my mail reader added: + +class MyTokenizer(Tokenizer): + + skip = {'received': 1, + 'date': 1, + 'x-from_': 1, + } + + def tokenize_headers(self, msg): + for k, v in msg.items(): + k = k.lower() + if k in self.skip or k.startswith('x-vm'): + continue + for w in subject_word_re.findall(v): + for t in tokenize_word(w): + yield "%s:%s" % (k, t) + +This did moderately better. The false negative rate is 7-21% over the +tests performed so far. This is versus 11-28% for the previous test +run that used the timtest header tokenizer. + +It's interesting to see that the best descriminators are all ham +discriminators. There's not a single spam-indicator in the list. +Most of the discriminators are header fields. One thing to note is +that the presence of Mailman-generated headers is a strong non-spam +indicator. That matches my intuition: I got an awful lot of +Mailman-generated mail, and those lists are pretty good at surpressing +spam. The other thing is that I get a lot of ham from people who use +XEmacs. That's probably Barry, Guido, Fred, and me :-). + +One final note. It looks like many of the false positives are from +people I've never met with questions about Shakespeare. They often +start with stuff like: + +> Dear Sir/Madam, +> +> May I please take some of your precious time to ask you to help me to find a +> solution to a problem that is worrying me greatly. I am old science student + +I guess that reads a lot like spam :-(. + +Jeremy + + +238 hams & 221 spams + false positive: 2.10084033613 + false negative: 9.50226244344 + new false positives: [] + new false negatives: [] + + best discriminators: + 'x-mailscanner:clean' 671 0.0483425 + 'x-spam-status:IN_REP_TO' 679 0.01 + 'delivered-to:skip:s 10' 691 0.0829876 + 'x-mailer:Lucid' 699 0.01 + 'x-mailer:XEmacs' 699 0.01 + 'x-mailer:patch' 699 0.01 + 'x-mailer:under' 709 0.01 + 'x-mailscanner:Found' 716 0.0479124 + 'cc:zope.com' 718 0.01 + "i'll" 750 0.01 + 'references:skip:1 20' 767 0.01 + 'rossum' 795 0.01 + 'x-spam-status:skip:S 10' 825 0.01 + 'van' 850 0.01 + 'http0:zope' 869 0.01 + 'email addr:zope' 883 0.01 + 'from:python.org' 895 0.01 + 'to:jeremy' 902 0.185401 + 'zope' 984 0.01 + 'list-archive:skip:m 10' 1058 0.01 + 'list-subscribe:skip:m 10' 1058 0.01 + 'list-unsubscribe:skip:m 10' 1058 0.01 + 'from:zope.com' 1098 0.01 + 'return-path:zope.com' 1115 0.01 + 'wrote:' 1129 0.01 + 'jeremy' 1150 0.01 + 'email addr:python' 1257 0.01 + 'x-mailman-version:2.0.13' 1311 0.01 + 'x-mailman-version:101270' 1395 0.01 + 'python' 1401 0.01 + diff --git a/Ch3/datasets/spam/easy_ham/01680.3c26c587b4fe3b681981c38f90593e02 b/Ch3/datasets/spam/easy_ham/01680.3c26c587b4fe3b681981c38f90593e02 new file mode 100644 index 000000000..b793c8d46 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01680.3c26c587b4fe3b681981c38f90593e02 @@ -0,0 +1,56 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Sat Sep 7 01:06:56 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 20:06:56 -0400 +Subject: [Spambayes] Ditching WordInfo +In-Reply-To: +Message-ID: + +[Neale Pickett] +> I hacked up something to turn WordInfo into a tuple before pickling, + +That's what WordInfo.__getstate__ does. + +> and then turn the tuple back into WordInfo right after unpickling. + +Likewise for WordInfo.__setstate__. + +> Without this hack, my database was 21549056 bytes. After, it's 9945088 +bytes. +> That's a 50% savings, not a bad optimization. + +I'm not sure what you're doing, but suspect you're storing individual +WordInfo pickles. If so, most of the administrative pickle bloat is due to +that, and doesn't happen if you pickle an entire classifier instance +directly. + +> So my question is, would it be too painful to ditch WordInfo in favor of +> a straight out tuple? (Or list if you'd rather, although making it a +> tuple has the nice side-effect of forcing you to play nice with my +> DBDict class). +> +> I hope doing this sort of optimization isn't too far distant from the +> goal of this project, even though README.txt says it is :) +> +> Diff attached. I'm not comfortable checking this in, + +I think it's healthy that you're uncomfortable checking things in with + +> + # XXX: kludge kludge kludge. + +comments . + +> since I don't really like how it works (I'd rather just get rid of +WordInfo). +> But I guess it proves the point :) + +I'm not interested in optimizing anything yet, and get many benefits from +the *ease* of working with utterly vanilla Python instance objects. Lots of +code all over picks these apart for display and analysis purposes. Very few +people have tried this code yet, and there are still many questions about it +(see, e.g., Jeremy's writeup of his disappointing first-time experiences +today). Let's keep it as easy as possible to modify for now. If you're +desparate to save memory, write a subclass? + +Other people are free to vote in other directions, of course . + diff --git a/Ch3/datasets/spam/easy_ham/01681.0e74974631f665395f5e6b01148b4bee b/Ch3/datasets/spam/easy_ham/01681.0e74974631f665395f5e6b01148b4bee new file mode 100644 index 000000000..4d77b08b8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01681.0e74974631f665395f5e6b01148b4bee @@ -0,0 +1,27 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Sat Sep 7 01:18:18 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 20:18:18 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: <15736.57093.811682.371784@anthem.wooz.org> +Message-ID: + +[Barry] +> Here's an interesting thing to test: discriminate words differently if +> they are on a line that starts with `>' or, to catch styles like +> above, that the first occurance on a line of < or > is > (to eliminate +> html). + +Give me a mod to timtoken.py that does this, and I'll be happy to test it. + +> Then again, it may not be worth trying to un-false-positive that +> Nigerian scam quote. + +If there's any sanity in the world, even the original poster would be glad +to have his kneejerk response blocked . OTOH, you know there are a +great many msgs on c.l.py (all over Usenet) that do nothing except quote a +previous post and add a one-line comment. Remove the quoted sections from +those, and there may be no content left to judge except for the headers. So +I can see this nudging the stats in either direction. The only way to find +out for sure is for you to write some code . + diff --git a/Ch3/datasets/spam/easy_ham/01682.aabc3014dc8e7bbf3748d1e1b2afbf56 b/Ch3/datasets/spam/easy_ham/01682.aabc3014dc8e7bbf3748d1e1b2afbf56 new file mode 100644 index 000000000..bedacee23 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01682.aabc3014dc8e7bbf3748d1e1b2afbf56 @@ -0,0 +1,20 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Sat Sep 7 01:32:26 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 20:32:26 -0400 +Subject: [Spambayes] understanding high false negative rate +In-Reply-To: <15737.16782.542869.368986@slothrop.zope.com> +Message-ID: + +[Jeremy Hylton[ +> The total collections are 1100 messages. I trained with 1100/5 +> messages. + +I'm reading this now as that you trained on about 220 spam and about 220 +ham. That's less than 10% of the sizes of the training sets I've been +using. Please try an experiment: train on 550 of each, and test once +against the other 550 of each. Do that a few times making a random split +each time (it won't be long until you discover why directories of individual +files are a lot easier to work -- e.g., random.shuffle() makes this kind of +thing trivial for me). + diff --git a/Ch3/datasets/spam/easy_ham/01683.59383d91430d9cb58e7d0aa4e25b1320 b/Ch3/datasets/spam/easy_ham/01683.59383d91430d9cb58e7d0aa4e25b1320 new file mode 100644 index 000000000..25b8934e1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01683.59383d91430d9cb58e7d0aa4e25b1320 @@ -0,0 +1,197 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Sat Sep 7 03:51:24 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Fri, 06 Sep 2002 22:51:24 -0400 +Subject: [Spambayes] understanding high false negative rate +In-Reply-To: <15737.16782.542869.368986@slothrop.zope.com> +Message-ID: + +[Jeremy] +> The total collections are 1100 messages. I trained with 1100/5 +> messages. + +While that's not a lot of training data, I picked random subsets of my +corpora and got much better behavior (this is rates.py output; f-p rate per +run in left column, f-n rate in right): + +Training on Data/Ham/Set1 & Data/Spam/Set1 ... 220 hams & 220 spams + 0.000 1.364 + 0.000 0.455 + 0.000 1.818 + 0.000 1.364 +Training on Data/Ham/Set2 & Data/Spam/Set2 ... 220 hams & 220 spams + 0.455 2.727 + 0.455 0.455 + 0.000 0.909 + 0.455 2.273 +Training on Data/Ham/Set3 & Data/Spam/Set3 ... 220 hams & 220 spams + 0.000 2.727 + 0.455 0.909 + 0.000 0.909 + 0.000 1.818 +Training on Data/Ham/Set4 & Data/Spam/Set4 ... 220 hams & 220 spams + 0.000 2.727 + 0.000 0.909 + 0.000 0.909 + 0.000 1.818 +Training on Data/Ham/Set5 & Data/Spam/Set5 ... 220 hams & 220 spams + 0.000 1.818 + 0.000 1.364 + 0.000 0.909 + 0.000 2.273 +total false pos 4 0.363636363636 +total false neg 29 2.63636363636 + +Another full run with another randomly chosen (but disjoint) 220 of each in +each set was much the same. The score distribution is also quite sharp: + +Ham distribution for all runs: +* = 74 items + 0.00 4381 ************************************************************ + 2.50 3 * + 5.00 3 * + 7.50 1 * + 10.00 0 + 12.50 0 + 15.00 1 * + 17.50 1 * + 20.00 1 * + 22.50 0 + 25.00 0 + 27.50 0 + 30.00 1 * + 32.50 0 + 35.00 0 + 37.50 0 + 40.00 1 * + 42.50 0 + 45.00 0 + 47.50 0 + 50.00 0 + 52.50 0 + 55.00 0 + 57.50 1 * + 60.00 0 + 62.50 0 + 65.00 0 + 67.50 1 * + 70.00 0 + 72.50 0 + 75.00 0 + 77.50 0 + 80.00 0 + 82.50 0 + 85.00 0 + 87.50 1 * + 90.00 0 + 92.50 2 * + 95.00 0 + 97.50 2 * + +Spam distribution for all runs: +* = 73 items + 0.00 13 * + 2.50 0 + 5.00 4 * + 7.50 5 * + 10.00 0 + 12.50 2 * + 15.00 1 * + 17.50 1 * + 20.00 2 * + 22.50 1 * + 25.00 0 + 27.50 1 * + 30.00 0 + 32.50 3 * + 35.00 0 + 37.50 0 + 40.00 0 + 42.50 0 + 45.00 1 * + 47.50 3 * + 50.00 16 * + 52.50 0 + 55.00 0 + 57.50 0 + 60.00 1 * + 62.50 0 + 65.00 2 * + 67.50 1 * + 70.00 1 * + 72.50 0 + 75.00 1 * + 77.50 0 + 80.00 3 * + 82.50 2 * + 85.00 1 * + 87.50 2 * + 90.00 2 * + 92.50 4 * + 95.00 4 * + 97.50 4323 ************************************************************ + +It's hard to say whether you need better ham or better spam, but I suspect +better spam . 18 of the 30 most powerful discriminators here were +HTML-related spam indicators; the top 10 overall were: + + '' 312 0.99 + '' 329 0.99 + 'click' 334 0.99 + '' 335 0.99 + 'wrote:' 381 0.01 + 'skip:< 10' 398 0.99 + 'python' 428 0.01 + 'content-type:text/html' 454 0.99 + +The HTML tags come from non-multipart/alternative HTML messages, from which +HTML tags aren't stripped, and there are lots of these in my spam sets. + +That doesn't account for it, though. If I strip HTML tags out of those too, +the rates are only a little worse: + +raining on Data/Ham/Set1 & Data/Spam/Set1 ... 220 hams & 220 spams + 0.000 1.364 + 0.000 1.818 + 0.455 1.818 + 0.000 1.818 +raining on Data/Ham/Set2 & Data/Spam/Set2 ... 220 hams & 220 spams + 0.000 1.364 + 0.455 1.818 + 0.455 0.909 + 0.000 1.818 +raining on Data/Ham/Set3 & Data/Spam/Set3 ... 220 hams & 220 spams + 0.000 2.727 + 0.000 0.909 + 0.909 0.909 + 0.455 1.818 +raining on Data/Ham/Set4 & Data/Spam/Set4 ... 220 hams & 220 spams + 0.000 1.818 + 0.000 0.909 + 0.455 0.909 + 0.000 1.364 +raining on Data/Ham/Set5 & Data/Spam/Set5 ... 220 hams & 220 spams + 0.000 2.727 + 0.000 1.364 + 0.455 2.273 + 0.455 2.273 +otal false pos 4 0.363636363636 +otal false neg 34 3.09090909091 + +The 4th-strongest discriminator *still* finds another HTML clue, though! + + 'subject:Python' 164 0.01 + 'money' 169 0.99 + 'content-type:text/plain' 185 0.2 + 'charset:us-ascii' 191 0.127273 + "i'm" 232 0.01 + 'content-type:text/html' 248 0.983607 + ' ' 255 0.99 + 'wrote:' 372 0.01 + 'python' 431 0.01 + 'click' 519 0.99 + +Heh. I forgot all about  . + diff --git a/Ch3/datasets/spam/easy_ham/01684.94ca5ccaec9be05c252bf32961a86a3d b/Ch3/datasets/spam/easy_ham/01684.94ca5ccaec9be05c252bf32961a86a3d new file mode 100644 index 000000000..2c4052b6e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01684.94ca5ccaec9be05c252bf32961a86a3d @@ -0,0 +1,33 @@ +Return-Path: anthony@interlink.com.au +Delivery-Date: Sat Sep 7 04:38:51 2002 +From: anthony@interlink.com.au (Anthony Baxter) +Date: Sat, 07 Sep 2002 13:38:51 +1000 +Subject: [Spambayes] test sets? +In-Reply-To: +Message-ID: <200209070338.g873cpp20640@localhost.localdomain> + + +> > Note that header names are case insensitive, so this one's no +> > different than "MIME-Version:". Similarly other headers in your list. +> +> Ignoring case here may or may not help; that's for experiment to decide. +> It's plausible that case is significant, if, e.g., a particular spam mailing +> package generates unusual case, or a particular clueless spammer +> misconfigures his package. + +I found it made no difference for my testing. + +> The brilliance of Anthony's "just count them" scheme is that it requires no +> thought, so can't be fooled . Header lines that are evenly +> distributed across spam and ham will turn out to be worthless indicators +> (prob near 0.5), so do no harm. + +zactly. I started off doing clever clever things, and, as always with +this stuff, found that stupid with a rock beats smart with scissors, +every time. + + +-- +Anthony Baxter +It's never too late to have a happy childhood. + diff --git a/Ch3/datasets/spam/easy_ham/01685.26beacaa0fa03cb6199c57b8a99a2852 b/Ch3/datasets/spam/easy_ham/01685.26beacaa0fa03cb6199c57b8a99a2852 new file mode 100644 index 000000000..3bee5a57f --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01685.26beacaa0fa03cb6199c57b8a99a2852 @@ -0,0 +1,24 @@ +Return-Path: anthony@interlink.com.au +Delivery-Date: Sat Sep 7 04:44:50 2002 +From: anthony@interlink.com.au (Anthony Baxter) +Date: Sat, 07 Sep 2002 13:44:50 +1000 +Subject: [Spambayes] understanding high false negative rate +In-Reply-To: + <200209062026.g86KQqJ03393@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: <200209070344.g873io020676@localhost.localdomain> + + +> Looks like your ham corpus by and large has To: jeremy@alum.mit.edu in +> a header while your spam corpus by and large doesn't. But this one +> does. + +Interestingly, for me, one of the highest value spam indicators was +the name of the mail host that the spam was delivered to, in the To: +line. So mail to info@gin.elax2.ekorp.com was pretty much a dead cert +for the filters. + + +-- +Anthony Baxter +It's never too late to have a happy childhood. + diff --git a/Ch3/datasets/spam/easy_ham/01686.146b27f3890e3350b0e596b42e18a985 b/Ch3/datasets/spam/easy_ham/01686.146b27f3890e3350b0e596b42e18a985 new file mode 100644 index 000000000..8610e81d1 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01686.146b27f3890e3350b0e596b42e18a985 @@ -0,0 +1,33 @@ +Return-Path: anthony@interlink.com.au +Delivery-Date: Sat Sep 7 04:50:37 2002 +From: anthony@interlink.com.au (Anthony Baxter) +Date: Sat, 07 Sep 2002 13:50:37 +1000 +Subject: [Spambayes] understanding high false negative rate +In-Reply-To: <15737.16782.542869.368986@slothrop.zope.com> +Message-ID: <200209070350.g873obE20720@localhost.localdomain> + + +>>> Jeremy Hylton wrote +> Then I tried a dirt simple tokenizer for the headers that tokenize the +> words in the header and emitted like this "%s: %s" % (hdr, word). +> That worked too well :-). The received and date headers helped the +> classifier discover that most of my spam is old and most of my ham is +> new. + +Heh. I hit the same problem, but the other way round, when I first +started playing with this - I'd collected spam for a week or two, +then mixed it up with randomly selected messages from my mail boxes. + +course, it instantly picked up on 'received:2001' as a non-ham. + +Curse that too-smart-for-me software. Still, it's probably a good +thing to note in the documentation about the software - when collecting +spam/ham, make _sure_ you try and collect from the same source. + + +Anthony + +-- +Anthony Baxter +It's never too late to have a happy childhood. + diff --git a/Ch3/datasets/spam/easy_ham/01687.305d7c2b4c83864ca868937855ad1b27 b/Ch3/datasets/spam/easy_ham/01687.305d7c2b4c83864ca868937855ad1b27 new file mode 100644 index 000000000..bf2a0f801 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01687.305d7c2b4c83864ca868937855ad1b27 @@ -0,0 +1,20 @@ +Return-Path: anthony@interlink.com.au +Delivery-Date: Sat Sep 7 04:52:54 2002 +From: anthony@interlink.com.au (Anthony Baxter) +Date: Sat, 07 Sep 2002 13:52:54 +1000 +Subject: [Spambayes] understanding high false negative rate +In-Reply-To: <200209070350.g873obE20720@localhost.localdomain> +Message-ID: <200209070352.g873qs820746@localhost.localdomain> + + + +> course, it instantly picked up on 'received:2001' as a non-ham. + -spam. + +*sigh* + + +-- +Anthony Baxter +It's never too late to have a happy childhood. + diff --git a/Ch3/datasets/spam/easy_ham/01688.77ff25da8e59d16dfba5c708a0cf3b69 b/Ch3/datasets/spam/easy_ham/01688.77ff25da8e59d16dfba5c708a0cf3b69 new file mode 100644 index 000000000..24efa045e --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01688.77ff25da8e59d16dfba5c708a0cf3b69 @@ -0,0 +1,23 @@ +Return-Path: guido@python.org +Delivery-Date: Sat Sep 7 04:51:12 2002 +From: guido@python.org (Guido van Rossum) +Date: Fri, 06 Sep 2002 23:51:12 -0400 +Subject: [Spambayes] hammie.py vs. GBayes.py +Message-ID: <200209070351.g873pC613144@pcp02138704pcs.reston01.va.comcast.net> + +There seem to be two "drivers" for the classifier now: Neale Pickett's +hammie.py, and the original GBayes.py. According to the README.txt, +GBayes.py hasn't been kept up to date. Is there anything in there +that isn't covered by hammie.py? About the only useful feature of +GBayes.py that hammie.py doesn't (yet) copy is -u, which calculates +spamness for an entire mailbox. This feature can easily be copied +into hammie.py. (GBayes.py also has a large collection of tokenizers; +but timtoken.py rules, so I'm not sure how interesting that is now.) + +Therefore I propose to nuke GBayes.py, after adding a -u feature. + +Anyone against? (I imagine that Skip or Barry might have a stake in +GBayes.py; Tim seems to have moved all code he's working to other +modules.) + +--Guido van Rossum (home page: http://www.python.org/~guido/) diff --git a/Ch3/datasets/spam/easy_ham/01689.f3dfa7db118b7738bcdaa1cd81a0f1e2 b/Ch3/datasets/spam/easy_ham/01689.f3dfa7db118b7738bcdaa1cd81a0f1e2 new file mode 100644 index 000000000..0b029c234 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01689.f3dfa7db118b7738bcdaa1cd81a0f1e2 @@ -0,0 +1,17 @@ +Return-Path: skip@pobox.com +Delivery-Date: Sat Sep 7 05:05:45 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Fri, 6 Sep 2002 23:05:45 -0500 +Subject: [Spambayes] Maybe change X-Spam-Disposition to something else... +Message-ID: <15737.31513.555967.915801@12-248-11-90.client.attbi.com> + + +I actually like Neale's X-Spam-Disposition header, I just wonder if maybe we +should choose something with a different prefix than "X-Spam-" so that +people don't confuse it with SpamAssassin, all of whose headers begin with +that prefix. + +Also, some sort of version information would be useful. Perhaps the CVS +version number for the classifier module could be tacked on. + +Skip diff --git a/Ch3/datasets/spam/easy_ham/01690.c20b0ff2930d9b36d7aa70e54939d12c b/Ch3/datasets/spam/easy_ham/01690.c20b0ff2930d9b36d7aa70e54939d12c new file mode 100644 index 000000000..807a813ba --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01690.c20b0ff2930d9b36d7aa70e54939d12c @@ -0,0 +1,25 @@ +Return-Path: anthony@interlink.com.au +Delivery-Date: Sat Sep 7 05:10:37 2002 +From: anthony@interlink.com.au (Anthony Baxter) +Date: Sat, 07 Sep 2002 14:10:37 +1000 +Subject: [Spambayes] Maybe change X-Spam-Disposition to something else... +In-Reply-To: <15737.31513.555967.915801@12-248-11-90.client.attbi.com> +Message-ID: <200209070410.g874Ab620880@localhost.localdomain> + + +>>> Skip Montanaro wrote +> +> I actually like Neale's X-Spam-Disposition header, I just wonder if maybe we +> should choose something with a different prefix than "X-Spam-" so that +> people don't confuse it with SpamAssassin, all of whose headers begin with +> that prefix. + +I think it's fine, in general, just so long as no-one checks in anything +that puts it into my test corpus. + +Or alternately, whatever is chosen should be ignored by the tokenizer. +I know my mail host (interlink) runs SA, but I also run it, with my own +set of rules and scores. I don't want my spam-filter to be getting messed +up by an upstream spam filter. + + diff --git a/Ch3/datasets/spam/easy_ham/01691.6057cf5e982869286b4742cee5639a4b b/Ch3/datasets/spam/easy_ham/01691.6057cf5e982869286b4742cee5639a4b new file mode 100644 index 000000000..2d7d0a856 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01691.6057cf5e982869286b4742cee5639a4b @@ -0,0 +1,19 @@ +Return-Path: skip@pobox.com +Delivery-Date: Sat Sep 7 05:30:31 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Fri, 6 Sep 2002 23:30:31 -0500 +Subject: [Spambayes] hammie.py vs. GBayes.py +In-Reply-To: <200209070351.g873pC613144@pcp02138704pcs.reston01.va.comcast.net> +References: <200209070351.g873pC613144@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: <15737.32999.256881.434812@12-248-11-90.client.attbi.com> + + + Guido> Therefore I propose to nuke GBayes.py, after adding a -u feature. + + Guido> Anyone against? (I imagine that Skip or Barry might have a stake + Guido> in GBayes.py; Tim seems to have moved all code he's working to + Guido> other modules.) + +No argument here. + +Skip diff --git a/Ch3/datasets/spam/easy_ham/01692.3349a6670b58d2a39307e87ae0012294 b/Ch3/datasets/spam/easy_ham/01692.3349a6670b58d2a39307e87ae0012294 new file mode 100644 index 000000000..33a944f09 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01692.3349a6670b58d2a39307e87ae0012294 @@ -0,0 +1,13 @@ +Return-Path: skip@pobox.com +Delivery-Date: Sat Sep 7 05:46:01 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Fri, 6 Sep 2002 23:46:01 -0500 +Subject: [Spambayes] speed +Message-ID: <15737.33929.716821.779152@12-248-11-90.client.attbi.com> + + +If the frequency of my laptop's disk chirps are any indication, I'd say +hammie is about 3-5x faster than SpamAssassin. + +Skip + diff --git a/Ch3/datasets/spam/easy_ham/01693.5f6c04f93ace9da3b5f9e0906ba608c2 b/Ch3/datasets/spam/easy_ham/01693.5f6c04f93ace9da3b5f9e0906ba608c2 new file mode 100644 index 000000000..4b66ef689 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01693.5f6c04f93ace9da3b5f9e0906ba608c2 @@ -0,0 +1,17 @@ +Return-Path: skip@pobox.com +Delivery-Date: Sat Sep 7 06:15:54 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Sat, 7 Sep 2002 00:15:54 -0500 +Subject: [Spambayes] can't write to CVS... +Message-ID: <15737.35722.956784.600958@12-248-11-90.client.attbi.com> + +I'm listed as a developer on SF and have the spambayes CVS module checked +out using my SF username, but I'm unable to write to the repository. CVS +complains: + + % cvs add unheader.py + cvs [server aborted]: "add" requires write access to the repository + +Any thoughts? + +Skip diff --git a/Ch3/datasets/spam/easy_ham/01694.5bae1500a6c23344cde8b81dd95a2dd7 b/Ch3/datasets/spam/easy_ham/01694.5bae1500a6c23344cde8b81dd95a2dd7 new file mode 100644 index 000000000..be1af1266 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01694.5bae1500a6c23344cde8b81dd95a2dd7 @@ -0,0 +1,37 @@ +Return-Path: neale@woozle.org +Delivery-Date: Sat Sep 7 06:17:28 2002 +From: neale@woozle.org (Neale Pickett) +Date: 06 Sep 2002 22:17:28 -0700 +Subject: [Spambayes] Ditching WordInfo +In-Reply-To: +References: +Message-ID: + +So then, Tim Peters is all like: + +> I'm not sure what you're doing, but suspect you're storing individual +> WordInfo pickles. If so, most of the administrative pickle bloat is +> due to that, and doesn't happen if you pickle an entire classifier +> instance directly. + +Yeah, that's exactly what I was doing--I didn't realize I was incurring +administrative pickle bloat this way. I'm specifically trying to make +things faster and smaller, so I'm storing individual WordInfo pickles +into an anydbm dict (keyed by token). The result is that it's almost 50 +times faster to score messages one per run our of procmail (.408s vs +18.851s). + +However, it *does* say all over the place that the goal of this project +isn't to make the fastest or the smallest implementation, so I guess +I'll hold off doing any further performance tuning until the goal starts +to point more in that direction. .4 seconds is probably fast enough for +people to use it in their procmailrc, which is what I was after. + +> If you're desparate to save memory, write a subclass? + +That's probably what I'll do if I get too antsy :) + +Trying to think of ways to sneak "administrative pickle boat" into +casual conversation, + +Neale diff --git a/Ch3/datasets/spam/easy_ham/01695.5914721a121b85cfdc0e39bf4b4e8970 b/Ch3/datasets/spam/easy_ham/01695.5914721a121b85cfdc0e39bf4b4e8970 new file mode 100644 index 000000000..90e606e90 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01695.5914721a121b85cfdc0e39bf4b4e8970 @@ -0,0 +1,32 @@ +Return-Path: guido@python.org +Delivery-Date: Sat Sep 7 06:33:23 2002 +From: guido@python.org (Guido van Rossum) +Date: Sat, 07 Sep 2002 01:33:23 -0400 +Subject: [Spambayes] Ditching WordInfo +In-Reply-To: Your message of "Fri, 06 Sep 2002 22:17:28 PDT." + +References: + +Message-ID: <200209070533.g875XN813509@pcp02138704pcs.reston01.va.comcast.net> + +> Yeah, that's exactly what I was doing--I didn't realize I was +> incurring administrative pickle bloat this way. I'm specifically +> trying to make things faster and smaller, so I'm storing individual +> WordInfo pickles into an anydbm dict (keyed by token). The result +> is that it's almost 50 times faster to score messages one per run +> our of procmail (.408s vs 18.851s). + +This is very worthwhile. + +> However, it *does* say all over the place that the goal of this +> project isn't to make the fastest or the smallest implementation, so +> I guess I'll hold off doing any further performance tuning until the +> goal starts to point more in that direction. .4 seconds is probably +> fast enough for people to use it in their procmailrc, which is what +> I was after. + +Maybe. I batch messages using fetchmail (don't ask why), and adding +.4 seconds per message for a batch of 50 (not untypical) feels like a +real wait to me... + +--Guido van Rossum (home page: http://www.python.org/~guido/) diff --git a/Ch3/datasets/spam/easy_ham/01696.70dc9da58ada190c2c66f34986636594 b/Ch3/datasets/spam/easy_ham/01696.70dc9da58ada190c2c66f34986636594 new file mode 100644 index 000000000..43804d70a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01696.70dc9da58ada190c2c66f34986636594 @@ -0,0 +1,24 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Sat Sep 7 06:36:41 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Sat, 07 Sep 2002 01:36:41 -0400 +Subject: [Spambayes] can't write to CVS... +In-Reply-To: <15737.35722.956784.600958@12-248-11-90.client.attbi.com> +Message-ID: + +[Skip Montanaro] +> I'm listed as a developer on SF and have the spambayes CVS module checked +> out using my SF username, but I'm unable to write to the repository. CVS +> complains: +> +> % cvs add unheader.py +> cvs [server aborted]: "add" requires write access to the repository +> +> Any thoughts? + +Not really. Try again? About half the developers on the spambayes project +were missing some permission or other, so I ran thru all of them and checked +every damned box and clicked on every damn dropdown list I could find. As +far as SF is concerned, you're all sitting on God's Right Hand now, so if it +still doesn't work I suggest you upgrade to Win98 . + diff --git a/Ch3/datasets/spam/easy_ham/01697.75f57c5146462b574d13349e5c0c4bcc b/Ch3/datasets/spam/easy_ham/01697.75f57c5146462b574d13349e5c0c4bcc new file mode 100644 index 000000000..87294e333 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01697.75f57c5146462b574d13349e5c0c4bcc @@ -0,0 +1,26 @@ +Return-Path: skip@pobox.com +Delivery-Date: Sat Sep 7 06:40:18 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Sat, 7 Sep 2002 00:40:18 -0500 +Subject: [Spambayes] can't write to CVS... +In-Reply-To: +References: <15737.35722.956784.600958@12-248-11-90.client.attbi.com> + +Message-ID: <15737.37186.513740.936811@12-248-11-90.client.attbi.com> + + + Tim> About half the developers on the spambayes project were missing + Tim> some permission or other, so I ran thru all of them and checked + Tim> every damned box and clicked on every damn dropdown list I could + Tim> find. As far as SF is concerned, you're all sitting on God's Right + Tim> Hand now, so if it still doesn't work I suggest you upgrade to + Tim> Win98 . + +Time to upgrade I guess. :-( + + % cvs add unheader.py + cvs [server aborted]: "add" requires write access to the repository + +I'll try a checkout into a new directory... + +S diff --git a/Ch3/datasets/spam/easy_ham/01698.906dd11cca6bee22c6843afb597c87a3 b/Ch3/datasets/spam/easy_ham/01698.906dd11cca6bee22c6843afb597c87a3 new file mode 100644 index 000000000..31fe9e4a3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01698.906dd11cca6bee22c6843afb597c87a3 @@ -0,0 +1,17 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Sat Sep 7 06:40:45 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Sat, 07 Sep 2002 01:40:45 -0400 +Subject: [Spambayes] Maybe change X-Spam-Disposition to something else... +In-Reply-To: <15737.33815.719456.367026@12-248-11-90.client.attbi.com> +Message-ID: + +[Skip Montanaro, to Anthony Baxter] +> ... +> Accordingly, I wrote unheader.py, which is mostly a ripoff of something +> someone else posted to python-dev or c.l.py within the last week or so to +> strip out SA-generated headers. + +Unless I've grown senile tonight, you got it from Anthony to begin with. +Please check it in to project, and add a short blurb to README.txt! + diff --git a/Ch3/datasets/spam/easy_ham/01699.235f7aea351e2aa201447c134468f723 b/Ch3/datasets/spam/easy_ham/01699.235f7aea351e2aa201447c134468f723 new file mode 100644 index 000000000..2c9f627eb --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01699.235f7aea351e2aa201447c134468f723 @@ -0,0 +1,22 @@ +Return-Path: skip@pobox.com +Delivery-Date: Sat Sep 7 06:43:31 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Sat, 7 Sep 2002 00:43:31 -0500 +Subject: [Spambayes] Maybe change X-Spam-Disposition to something else... +In-Reply-To: +References: <15737.31513.555967.915801@12-248-11-90.client.attbi.com> + +Message-ID: <15737.37379.699338.64767@12-248-11-90.client.attbi.com> + + + >> ... choose something with a different prefix than "X-Spam-" so that + >> people don't confuse it with SpamAssassin ... + + Neale> How about X-Spambayes-Disposition (or X-Hammie-Disposition if + Neale> there'll be other classifier front-ends)? + +I kinda like "hammie". Your front end was there first, so I suspect it will +rule the front end roost. + +S + diff --git a/Ch3/datasets/spam/easy_ham/01700.03a577fc11e0a5121098e0dc83c97d6c b/Ch3/datasets/spam/easy_ham/01700.03a577fc11e0a5121098e0dc83c97d6c new file mode 100644 index 000000000..7bfa0b55a --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01700.03a577fc11e0a5121098e0dc83c97d6c @@ -0,0 +1,19 @@ +Return-Path: skip@pobox.com +Delivery-Date: Sat Sep 7 06:45:23 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Sat, 7 Sep 2002 00:45:23 -0500 +Subject: [Spambayes] can't write to CVS... +In-Reply-To: <15737.37186.513740.936811@12-248-11-90.client.attbi.com> +References: <15737.35722.956784.600958@12-248-11-90.client.attbi.com> + + <15737.37186.513740.936811@12-248-11-90.client.attbi.com> +Message-ID: <15737.37491.890945.752437@12-248-11-90.client.attbi.com> + + + Skip> I'll try a checkout into a new directory... + +Which didn't help. At the very least I think that means it's time for +bed... + +Skip + diff --git a/Ch3/datasets/spam/easy_ham/01701.a28b76746a64d3d352375a462f4f8404 b/Ch3/datasets/spam/easy_ham/01701.a28b76746a64d3d352375a462f4f8404 new file mode 100644 index 000000000..53ed94a91 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01701.a28b76746a64d3d352375a462f4f8404 @@ -0,0 +1,22 @@ +Return-Path: skip@pobox.com +Delivery-Date: Sat Sep 7 06:46:41 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Sat, 7 Sep 2002 00:46:41 -0500 +Subject: [Spambayes] Maybe change X-Spam-Disposition to something else... +In-Reply-To: +References: <15737.33815.719456.367026@12-248-11-90.client.attbi.com> + +Message-ID: <15737.37569.889973.866955@12-248-11-90.client.attbi.com> + + + >> Accordingly, I wrote unheader.py, which is mostly a ripoff of + >> something someone else posted to python-dev or c.l.py within the last + >> week or so to strip out SA-generated headers. + + Tim> Unless I've grown senile tonight, you got it from Anthony to begin + Tim> with. Please check it in to project, and add a short blurb to + Tim> README.txt! + +Raring to go, once I can write to CVS... + +S diff --git a/Ch3/datasets/spam/easy_ham/01702.3a7add5306fcbf4ac7eb42c57c125e85 b/Ch3/datasets/spam/easy_ham/01702.3a7add5306fcbf4ac7eb42c57c125e85 new file mode 100644 index 000000000..052d5a56c --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01702.3a7add5306fcbf4ac7eb42c57c125e85 @@ -0,0 +1,30 @@ +Return-Path: neale@woozle.org +Delivery-Date: Sat Sep 7 06:48:17 2002 +From: neale@woozle.org (Neale Pickett) +Date: 06 Sep 2002 22:48:17 -0700 +Subject: [Spambayes] Ditching WordInfo +In-Reply-To: <200209070533.g875XN813509@pcp02138704pcs.reston01.va.comcast.net> +References: + + <200209070533.g875XN813509@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: + +So then, Guido van Rossum is all like: + +> Maybe. I batch messages using fetchmail (don't ask why), and adding +> .4 seconds per message for a batch of 50 (not untypical) feels like a +> real wait to me... + +Yeesh. Sounds like what you need is something to kick up once and score +an entire mailbox. + +Wait a second... So *that's* why you wanted -u. + +If you can spare the memory, you might get better performance in this +case using the pickle store, since it only has to go to disk once (but +boy, does it ever go to disk!) I can't think of anything obvious to +speed things up once it's all loaded into memory, though. That's +profiler territory, and profiling is exactly the kind of optimization +I just said I wasn't going to do :) + +Neale diff --git a/Ch3/datasets/spam/easy_ham/01703.db99848ddb40f4d5a0694557363c7250 b/Ch3/datasets/spam/easy_ham/01703.db99848ddb40f4d5a0694557363c7250 new file mode 100644 index 000000000..5912166c0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01703.db99848ddb40f4d5a0694557363c7250 @@ -0,0 +1,32 @@ +Return-Path: guido@python.org +Delivery-Date: Sat Sep 7 07:06:31 2002 +From: guido@python.org (Guido van Rossum) +Date: Sat, 07 Sep 2002 02:06:31 -0400 +Subject: [Spambayes] Ditching WordInfo +In-Reply-To: Your message of "Fri, 06 Sep 2002 22:48:17 PDT." + +References: + + <200209070533.g875XN813509@pcp02138704pcs.reston01.va.comcast.net> + +Message-ID: <200209070606.g8766Vf13736@pcp02138704pcs.reston01.va.comcast.net> + +> > Maybe. I batch messages using fetchmail (don't ask why), and adding +> > .4 seconds per message for a batch of 50 (not untypical) feels like a +> > real wait to me... +> +> Yeesh. Sounds like what you need is something to kick up once and score +> an entire mailbox. +> +> Wait a second... So *that's* why you wanted -u. +> +> If you can spare the memory, you might get better performance in this +> case using the pickle store, since it only has to go to disk once (but +> boy, does it ever go to disk!) I can't think of anything obvious to +> speed things up once it's all loaded into memory, though. That's +> profiler territory, and profiling is exactly the kind of optimization +> I just said I wasn't going to do :) + +We could have a server mode (someone described this as an SA option). + +--Guido van Rossum (home page: http://www.python.org/~guido/) diff --git a/Ch3/datasets/spam/easy_ham/01704.7f2b82a41322fa94c43a0dbb75472ff4 b/Ch3/datasets/spam/easy_ham/01704.7f2b82a41322fa94c43a0dbb75472ff4 new file mode 100644 index 000000000..b421fa977 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01704.7f2b82a41322fa94c43a0dbb75472ff4 @@ -0,0 +1,89 @@ +Return-Path: jeremy@alum.mit.edu +Delivery-Date: Sat Sep 7 18:18:17 2002 +From: jeremy@alum.mit.edu (Jeremy Hylton) +Date: Sat, 7 Sep 2002 13:18:17 -0400 +Subject: [Spambayes] understanding high false negative rate +In-Reply-To: +References: <15737.16782.542869.368986@slothrop.zope.com> + +Message-ID: <15738.13529.407748.635725@slothrop.zope.com> + +>>>>> "TP" == Tim Peters writes: + + TP> [Jeremy Hylton[ + >> The total collections are 1100 messages. I trained with 1100/5 + >> messages. + + TP> I'm reading this now as that you trained on about 220 spam and + TP> about 220 ham. That's less than 10% of the sizes of the + TP> training sets I've been using. Please try an experiment: train + TP> on 550 of each, and test once against the other 550 of each. + +This helps a lot! Here are results with the stock tokenizer: + +Training on & + ... 644 hams & 557 spams + 0.000 10.413 + 1.398 6.104 + 1.398 5.027 +Training on & + ... 644 hams & 557 spams + 0.000 8.259 + 1.242 2.873 + 1.242 5.745 +Training on & + ... 644 hams & 557 spams + 1.398 5.206 + 1.398 4.488 + 0.000 9.336 +Training on & + ... 644 hams & 557 spams + 1.553 5.206 + 1.553 5.027 + 0.000 9.874 +total false pos 139 5.39596273292 +total false neg 970 43.5368043088 + +And results from the tokenizer that looks at all headers except Date, +Received, and X-From_: + +Training on & + ... 644 hams & 557 spams + 0.000 7.540 + 0.932 4.847 + 0.932 3.232 +Training on & + ... 644 hams & 557 spams + 0.000 7.181 + 0.621 2.873 + 0.621 4.847 +Training on & + ... 644 hams & 557 spams + 1.087 4.129 + 1.087 3.052 + 0.000 6.822 +Training on & + ... 644 hams & 557 spams + 0.776 3.411 + 0.776 3.411 + 0.000 6.463 +total false pos 97 3.76552795031 +total false neg 738 33.1238779174 + +Is it safe to conclude that avoiding any cleverness with headers is a +good thing? + + TP> Do that a few times making a random split each time (it won't be + TP> long until you discover why directories of individual files are + TP> a lot easier to work -- e.g., random.shuffle() makes this kind + TP> of thing trivial for me). + +You haven't looked at mboxtest.py, have you? I'm using +random.shuffle(), too. You don't need to have many files to make an +arbitrary selection of messages from an mbox. + +I'll report some more results when they're done. + +Jeremy + + diff --git a/Ch3/datasets/spam/easy_ham/01705.54f25b5c3ce8b81c56da0ef6693c5ffb b/Ch3/datasets/spam/easy_ham/01705.54f25b5c3ce8b81c56da0ef6693c5ffb new file mode 100644 index 000000000..b49086cf0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01705.54f25b5c3ce8b81c56da0ef6693c5ffb @@ -0,0 +1,121 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Sat Sep 7 20:45:18 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Sat, 07 Sep 2002 15:45:18 -0400 +Subject: [Spambayes] understanding high false negative rate +In-Reply-To: <15738.13529.407748.635725@slothrop.zope.com> +Message-ID: + +> TP> I'm reading this now as that you trained on about 220 spam and +> TP> about 220 ham. That's less than 10% of the sizes of the +> TP> training sets I've been using. Please try an experiment: train +> TP> on 550 of each, and test once against the other 550 of each. + +[Jeremy] +> This helps a lot! + +Possibly. I checked in a change to classifier.py overnight (getting rid of +MINCOUNT) that gave a major improvement in the f-n rate too, independent of +tokenization. + +> Here are results with the stock tokenizer: + +Unsure what "stock tokenizer" means to you. For example, it might mean +tokenizer.tokenize, or mboxtest.MyTokenizer.tokenize. + +> Training on & /home/jeremy/Mail/spam 8> +> ... 644 hams & 557 spams +> 0.000 10.413 +> 1.398 6.104 +> 1.398 5.027 +> Training on & /home/jeremy/Mail/spam 0> +> ... 644 hams & 557 spams +> 0.000 8.259 +> 1.242 2.873 +> 1.242 5.745 +> Training on & /home/jeremy/Mail/spam 3> +> ... 644 hams & 557 spams +> 1.398 5.206 +> 1.398 4.488 +> 0.000 9.336 +> Training on & /home/jeremy/Mail/spam 0> +> ... 644 hams & 557 spams +> 1.553 5.206 +> 1.553 5.027 +> 0.000 9.874 +> total false pos 139 5.39596273292 +> total false neg 970 43.5368043088 + +Note that those rates remain much higher than I got using just 220 of ham +and 220 of spam. That remains A Mystery. + +> And results from the tokenizer that looks at all headers except Date, +> Received, and X-From_: + +Unsure what that means too. For example, "looks at" might mean you enabled +Anthony's count-them gimmick, and/or that you're tokenizing them yourself, +and/or ...? + +> Training on & /home/jeremy/Mail/spam 8> +> ... 644 hams & 557 spams +> 0.000 7.540 +> 0.932 4.847 +> 0.932 3.232 +> Training on & /home/jeremy/Mail/spam 0> +> ... 644 hams & 557 spams +> 0.000 7.181 +> 0.621 2.873 +> 0.621 4.847 +> Training on & /home/jeremy/Mail/spam 3> +> ... 644 hams & 557 spams +> 1.087 4.129 +> 1.087 3.052 +> 0.000 6.822 +> Training on & /home/jeremy/Mail/spam 0> +> ... 644 hams & 557 spams +> 0.776 3.411 +> 0.776 3.411 +> 0.000 6.463 +> total false pos 97 3.76552795031 +> total false neg 738 33.1238779174 +> +> Is it safe to conclude that avoiding any cleverness with headers is a +> good thing? + +Since I don't know what you did, exactly, I can't guess. What you seemed to +show is that you did *something* clever with headers and that doing so +helped (the "after" numbers are better than the "before" numbers, right?). +Assuming that what you did was override what's now +tokenizer.Tokenizer.tokenize_headers with some other routine, and didn't +call the base Tokenizer.tokenize_headers at all, then you're missing +carefully tested treatment of just a few header fields, but adding many +dozens of other header fields. There's no question that adding more header +fields should help; tokenizer.Tokenizer.tokenize_headers doesn't do so only +because my testing corpora are such that I can't add more headers without +getting major benefits for bogus reasons. + +Apart from all that, you said you're skipping Received. By several +accounts, that may be the most valuable of all the header fields. I'm +(meaning tokenizer.Tokenizer.tokenize_headers) skipping them too for the +reason explained above. Offline a week or two ago, Neil Schemenauer +reported good results from this scheme: + + ip_re = re.compile(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})') + + for header in msg.get_all("received", ()): + for ip in ip_re.findall(header): + parts = ip.split(".") + for n in range(1, 5): + yield 'received:' + '.'.join(parts[:n]) + +This makes a lot of sense to me; I just checked it in, but left it disabled +for now. + diff --git a/Ch3/datasets/spam/easy_ham/01706.582f22e10f4f792eb0efe0499d37db30 b/Ch3/datasets/spam/easy_ham/01706.582f22e10f4f792eb0efe0499d37db30 new file mode 100644 index 000000000..ded2a2d08 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01706.582f22e10f4f792eb0efe0499d37db30 @@ -0,0 +1,27 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Sat Sep 7 21:11:36 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Sat, 07 Sep 2002 16:11:36 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: <200209061424.g86EOcd14363@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: + +[Guido] +> Perhaps more useful would be if Tim could check in the pickle(s?) +> generated by one of his training runs, so that others can see how +> Tim's training data performs against their own corpora. + +I did that yesterday, but seems like nobody bit. Just in case , I +uploaded a new version just now. Since MINCOUNT went away, UNKNOWN_SPAMPROB +is much less likely, and there's almost nothing that can be pruned away (so +the file is about 5x larger now). + + http://sf.net/project/showfiles.php?group_id=61702 + + +> This could also be the starting point for a self-contained distribution +> (you've got to start with *something*, and training with python-list data +> seems just as good as anything else). + +The only way to know anything here is for someone to try it. + diff --git a/Ch3/datasets/spam/easy_ham/01707.46172a3da4e739c7b65a3b3aa3869e9d b/Ch3/datasets/spam/easy_ham/01707.46172a3da4e739c7b65a3b3aa3869e9d new file mode 100644 index 000000000..a2064b5d3 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01707.46172a3da4e739c7b65a3b3aa3869e9d @@ -0,0 +1,58 @@ +Return-Path: jeremy@alum.mit.edu +Delivery-Date: Sat Sep 7 21:15:03 2002 +From: jeremy@alum.mit.edu (Jeremy Hylton) +Date: Sat, 7 Sep 2002 16:15:03 -0400 +Subject: [Spambayes] understanding high false negative rate +In-Reply-To: +References: <15738.13529.407748.635725@slothrop.zope.com> + +Message-ID: <15738.24135.294137.640570@slothrop.zope.com> + +Here's clarification of why I did: + +First test results using tokenizer.Tokenizer.tokenize_headers() +unmodified. + +Training on 644 hams & 557 spams + 0.000 10.413 + 1.398 6.104 + 1.398 5.027 +Training on 644 hams & 557 spams + 0.000 8.259 + 1.242 2.873 + 1.242 5.745 +Training on 644 hams & 557 spams + 1.398 5.206 + 1.398 4.488 + 0.000 9.336 +Training on 644 hams & 557 spams + 1.553 5.206 + 1.553 5.027 + 0.000 9.874 +total false pos 139 5.39596273292 +total false neg 970 43.5368043088 + +Second test results using mboxtest.MyTokenizer.tokenize_headers(). +This uses all headers except Received, Data, and X-From_. + +Training on 644 hams & 557 spams + 0.000 7.540 + 0.932 4.847 + 0.932 3.232 +Training on 644 hams & 557 spams + 0.000 7.181 + 0.621 2.873 + 0.621 4.847 +Training on 644 hams & 557 spams + 1.087 4.129 + 1.087 3.052 + 0.000 6.822 +Training on 644 hams & 557 spams + 0.776 3.411 + 0.776 3.411 + 0.000 6.463 +total false pos 97 3.76552795031 +total false neg 738 33.1238779174 + +Jeremy + diff --git a/Ch3/datasets/spam/easy_ham/01708.49621617c6fee0551ce210e30094898a b/Ch3/datasets/spam/easy_ham/01708.49621617c6fee0551ce210e30094898a new file mode 100644 index 000000000..5707f01e4 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01708.49621617c6fee0551ce210e30094898a @@ -0,0 +1,36 @@ +Return-Path: guido@python.org +Delivery-Date: Sat Sep 7 21:19:16 2002 +From: guido@python.org (Guido van Rossum) +Date: Sat, 07 Sep 2002 16:19:16 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: Your message of "Sat, 07 Sep 2002 16:11:36 EDT." + +References: +Message-ID: <200209072019.g87KJGe15250@pcp02138704pcs.reston01.va.comcast.net> + +> [Guido] +> > Perhaps more useful would be if Tim could check in the pickle(s?) +> > generated by one of his training runs, so that others can see how +> > Tim's training data performs against their own corpora. + +[Tim] +> I did that yesterday, but seems like nobody bit. + +I downloaded and played with it a bit, but had no time to do anything +systematic. It correctly recognized a spam that slipped through SA. +But it also identified as spam everything in my inbox that had any +MIME structure or HTML parts, and several messages in my saved 'zope +geeks' list that happened to be using MIME and/or HTML. + +So I guess I'll have to retrain it (yes, you told me so :-). + +> Just in case , I +> uploaded a new version just now. Since MINCOUNT went away, UNKNOWN_SPAMPROB +> is much less likely, and there's almost nothing that can be pruned away (so +> the file is about 5x larger now). +> +> http://sf.net/project/showfiles.php?group_id=61702 + +I'll try this when I have time. + +--Guido van Rossum (home page: http://www.python.org/~guido/) diff --git a/Ch3/datasets/spam/easy_ham/01709.f25ce16131a4a1e9b4eb4e04f748509a b/Ch3/datasets/spam/easy_ham/01709.f25ce16131a4a1e9b4eb4e04f748509a new file mode 100644 index 000000000..3a504c255 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01709.f25ce16131a4a1e9b4eb4e04f748509a @@ -0,0 +1,12 @@ +Return-Path: skip@pobox.com +Delivery-Date: Sun Sep 8 00:11:19 2002 +From: skip@pobox.com (Skip Montanaro) +Date: Sat, 7 Sep 2002 18:11:19 -0500 +Subject: [Spambayes] spambayes package? +Message-ID: <15738.34711.467756.145336@12-248-11-90.client.attbi.com> + +Before we get too far down this road, what do people think of creating a +spambayes package containing classifier and tokenizer? This is just to +minimize clutter in site-packages. + +Skip diff --git a/Ch3/datasets/spam/easy_ham/01710.c86ae674674567c5779cfb7a30385e45 b/Ch3/datasets/spam/easy_ham/01710.c86ae674674567c5779cfb7a30385e45 new file mode 100644 index 000000000..961513bb8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01710.c86ae674674567c5779cfb7a30385e45 @@ -0,0 +1,21 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Sun Sep 8 00:22:18 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Sat, 07 Sep 2002 19:22:18 -0400 +Subject: [Spambayes] understanding high false negative rate +In-Reply-To: <15738.24135.294137.640570@slothrop.zope.com> +Message-ID: + +[Jeremy Hylton] +> Here's clarification of why I did: + +That's pretty much what I had guessed. Thanks! One more to try: + +> First test results using tokenizer.Tokenizer.tokenize_headers() +> unmodified. +> ... +> Second test results using mboxtest.MyTokenizer.tokenize_headers(). +> This uses all headers except Received, Data, and X-From_. +> ... + +Try the latter again, but call the base tokenize_headers() too. diff --git a/Ch3/datasets/spam/easy_ham/01711.95d3ab2beeba9b96666d25c09de2143f b/Ch3/datasets/spam/easy_ham/01711.95d3ab2beeba9b96666d25c09de2143f new file mode 100644 index 000000000..b24a9d8a0 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01711.95d3ab2beeba9b96666d25c09de2143f @@ -0,0 +1,22 @@ +Return-Path: guido@python.org +Delivery-Date: Sun Sep 8 03:47:23 2002 +From: guido@python.org (Guido van Rossum) +Date: Sat, 07 Sep 2002 22:47:23 -0400 +Subject: [Spambayes] spambayes package? +In-Reply-To: Your message of "Sat, 07 Sep 2002 18:11:19 CDT." + <15738.34711.467756.145336@12-248-11-90.client.attbi.com> +References: <15738.34711.467756.145336@12-248-11-90.client.attbi.com> +Message-ID: <200209080247.g882lNt17033@pcp02138704pcs.reston01.va.comcast.net> + +> Before we get too far down this road, what do people think of creating a +> spambayes package containing classifier and tokenizer? This is just to +> minimize clutter in site-packages. + +Too early IMO (if you mean to leave the various other tools out of +it). If and when we package this, perhaps we should use Barry's trick +from the email package for making the package itself the toplevel dir +of the distribution (rather than requiring an extra directory level +just so the package can be a subdir of the distro). + +--Guido van Rossum (home page: http://www.python.org/~guido/) + diff --git a/Ch3/datasets/spam/easy_ham/01712.c20d5899b4b27415389a10cd4f400019 b/Ch3/datasets/spam/easy_ham/01712.c20d5899b4b27415389a10cd4f400019 new file mode 100644 index 000000000..9777e34c8 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01712.c20d5899b4b27415389a10cd4f400019 @@ -0,0 +1,51 @@ +Return-Path: tim.one@comcast.net +Delivery-Date: Sun Sep 8 03:55:12 2002 +From: tim.one@comcast.net (Tim Peters) +Date: Sat, 07 Sep 2002 22:55:12 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: <200209072019.g87KJGe15250@pcp02138704pcs.reston01.va.comcast.net> +Message-ID: + +[Guido, on the classifier pickle on SF] +> I downloaded and played with it a bit, but had no time to do anything +> systematic. + +Cool! + +> It correctly recognized a spam that slipped through SA. + +Ditto. + +> But it also identified as spam everything in my inbox that had any +> MIME structure or HTML parts, and several messages in my saved 'zope +> geeks' list that happened to be using MIME and/or HTML. + +Do you know why? The strangest implied claim there is that it hates MIME +independent of HTML. For example, the spamprob of 'content-type:text/plain' +in that pickle is under 0.21. 'content-type:multipart/alternative' gets +0.93, but that's not a killer clue, and one bit of good content will more +than cancel it out. + +WRT hating HTML, possibilities include: + +1. It really had to do with something other than MIME/HTML. + +2. These are pure HTML (not multipart/alternative with a text/plain part), + so that the tags aren't getting stripped. The pickled classifier + despises all hints of HTML due to its c.l.py heritage. + +3. These are multipart/alternative with a text/plain part, but the + latter doesn't contain the same text as the text/html part (for + example, as Anthony reported, perhaps the text/plain part just + says something like "This is an HMTL message."). + +If it's #2, it would be easy to add an optional bool argument to tokenize() +meaning "even if it is pure HTML, strip the tags anyway". In fact, I'd like +to do that and default it to True. The extreme hatred of HTML on tech lists +strikes me as, umm, extreme . + +> So I guess I'll have to retrain it (yes, you told me so :-). + +That would be a different experiment. I'm certainly curious to see whether +Jeremy's much-worse-than-mine error rates are typical or aberrant. + diff --git a/Ch3/datasets/spam/easy_ham/01713.7e6c3f51ab4a45f60fbb0968d56f512c b/Ch3/datasets/spam/easy_ham/01713.7e6c3f51ab4a45f60fbb0968d56f512c new file mode 100644 index 000000000..7cd6ddb81 --- /dev/null +++ b/Ch3/datasets/spam/easy_ham/01713.7e6c3f51ab4a45f60fbb0968d56f512c @@ -0,0 +1,248 @@ +Return-Path: guido@python.org +Delivery-Date: Sun Sep 8 04:38:47 2002 +From: guido@python.org (Guido van Rossum) +Date: Sat, 07 Sep 2002 23:38:47 -0400 +Subject: [Spambayes] test sets? +In-Reply-To: Your message of "Sat, 07 Sep 2002 22:55:12 EDT." + +References: +Message-ID: <200209080338.g883clw17223@pcp02138704pcs.reston01.va.comcast.net> + +> > But it also identified as spam everything in my inbox that had any +> > MIME structure or HTML parts, and several messages in my saved 'zope +> > geeks' list that happened to be using MIME and/or HTML. +> +> Do you know why? The strangest implied claim there is that it hates MIME +> independent of HTML. For example, the spamprob of 'content-type:text/plain' +> in that pickle is under 0.21. 'content-type:multipart/alternative' gets +> 0.93, but that's not a killer clue, and one bit of good content will more +> than cancel it out. + +I reran the experiment (with the new SpamHam1.pik, but it doesn't seem +to make a difference). Here are the clues for the two spams in my +inbox (in hammie.py's output format, which sorts the clues by +probability; the first two numbers are the message number and overall +probability; then line-folded): + + 66 1.00 S 'facility': 0.01; 'speaker': 0.01; 'stretch': 0.01; + 'thursday': 0.01; 'young,': 0.01; 'mistakes': 0.12; 'growth': + 0.85; '>content-type:text/plain': 0.85; 'please': 0.85; 'capital': + 0.92; 'series': 0.92; 'subject:Don': 0.94; 'companies': 0.96; + '>content-type:text/html': 0.96; 'fee': 0.96; 'money': 0.96; + '8:00am': 0.99; '9:00am': 0.99; '>content-type:image/gif': 0.99; + '>content-type:multipart/alternative': 0.99; 'attend': 0.99; + 'companies,': 0.99; 'content-type/type:multipart/alternative': + 0.99; 'content-type:multipart/related': 0.99; 'economy': 0.99; + 'economy"': 0.99 + +This has 6 content-types as spam clues, only one of which is related +to HTML, despite there being an HTML alternative (and 12 other spam +clues, vs. only 6 ham clues). This was an announcement of a public +event by our building owners, with a text part that was the same as +the HTML (AFAICT). Its language may be spammish, but the content-type +clues didn't help. (BTW, it makes me wonder about the wisdom of +keeping punctuation -- 'economy' and 'economy"' to me don't seem to +deserve two be counted as clues.) + + 76 1.00 S '(near': 0.01; 'alexandria': 0.01; 'conn': 0.01; + 'from:adam': 0.01; 'from:email addr:panix': 0.01; 'poked': 0.01; + 'thorugh': 0.01; 'though': 0.03; "i'm": 0.03; 'reflect': 0.05; + "i've": 0.06; 'wednesday': 0.07; 'content-disposition:inline': + 0.10; 'contacting': 0.93; 'sold': 0.96; 'financially': 0.98; + 'prices': 0.98; 'rates': 0.99; 'discount.': 0.99; 'hotel': 0.99; + 'hotels': 0.99; 'hotels.': 0.99; 'nights,': 0.99; 'plaza': 0.99; + 'rates,': 0.99; 'rates.': 0.99; 'rooms': 0.99; 'season': 0.99; + 'stations': 0.99; 'subject:Hotel': 0.99 + +Here is the full message (Received: headers stripped), with apologies +to Ziggy and David: + +""" +Date: Fri, 06 Sep 2002 17:17:13 -0400 +From: Adam Turoff +Subject: Hotel information +To: guido@python.org, davida@activestate.com +Message-id: <20020906211713.GK7451@panix.com> +MIME-version: 1.0 +Content-type: text/plain; charset=us-ascii +Content-disposition: inline +User-Agent: Mutt/1.4i + +I've been looking into hotels. I poked around expedia for availability +from March 26 to 29 (4 nights, wednesday thorugh saturday). + +I've also started contacting hotels for group rates; some of the group +rates are no better than the regular rates, and they require signing a +contract with a minimum number of rooms sold (with someone financially +responsible for unbooked rooms). Most hotels are less than responsive... + + Radission - Barcelo Hotel (DuPont Circle) + $125/night, $99/weekend + + State Plaza hotel (Foggy Bottom; near GWU) + $119/night, $99/weekend + + Hilton Silver Spring (Near Metro, in suburban MD) + $99/hight, $74/weekend + + Windsor Park Hotel + Conn Ave, between DuPont Circle/Woodley Park Metro stations + $95/night; needs a car + + Econo Lodge Alexandria (Near Metro, in suburban VA) + $95/night + +This is a hand picked list; I ignored anything over $125/night, even +though there are some really well situated hotels nearby at higher rates. +Also, I'm not sure how much these prices reflect an expedia-only +discount. I can't vouch for any of these hotels, either. + +I also found out that the down season for DC Hotels are mid-june through +mid-september, and mid-november through mid-january. + +Z. +""" + +This one has no MIME structure nor HTML! It even has a +Content-disposition which is counted as a non-spam clue. It got +f-p'ed because of the many hospitality-related and money-related +terms. I'm surprised $125/night and similar aren't clues too. (And +again, several spam clues are duplicated with different variations: +'hotel', 'hotels', 'hotels.', 'subject:Hotel', 'rates,', 'rates.'. + +> WRT hating HTML, possibilities include: +> +> 1. It really had to do with something other than MIME/HTML. +> +> 2. These are pure HTML (not multipart/alternative with a text/plain part), +> so that the tags aren't getting stripped. The pickled classifier +> despises all hints of HTML due to its c.l.py heritage. +> +> 3. These are multipart/alternative with a text/plain part, but the +> latter doesn't contain the same text as the text/html part (for +> example, as Anthony reported, perhaps the text/plain part just +> says something like "This is an HMTL message."). +> +> If it's #2, it would be easy to add an optional bool argument to tokenize() +> meaning "even if it is pure HTML, strip the tags anyway". In fact, I'd like +> to do that and default it to True. The extreme hatred of HTML on tech lists +> strikes me as, umm, extreme . + +I also looked in more detail at some f-p's in my geeks traffic. The +first one's a doozie (that's the term, right? :-). It has lots of +HTML clues that are apparently ignored. It was a multipart/mixed with +two parts: a brief text/plain part containing one or two sentences, a +mondo weird URL: + +http://x60.deja.com/[ST_rn=ps]/getdoc.xp?AN=687715863&CONTEXT=973121507.1408827441&hitnum=23 + +and some employer-generated spammish boilerplate; the second part was +the HTML taken directly from the above URL. Clues: + + 43 1.00 S '"main"': 0.01; '(later': 0.01; '(lots': 0.01; '--paul': + 0.01; '1995-2000': 0.01; 'adopt': 0.01; 'apps': 0.01; 'commands': + 0.01; 'deja.com': 0.01; 'dejanews,': 0.01; 'discipline': 0.01; + 'duct': 0.01; 'email addr:digicool': 0.01; 'email name:paul': + 0.01; 'everitt': 0.01; 'exist,': 0.01; 'forwards': 0.01; + 'framework': 0.01; 'from:email addr:digicool': 0.01; 'from:email + name:1:22': 0.01; 'http>1:24': 0.01; + 'http>1:57': 0.01; 'http>1:an': 0.01; 'http>1:author': 0.01; + 'http>1:fmt': 0.01; 'http>1:getdoc': 0.01; 'http>1:pr': 0.01; + 'http>1:products': 0.01; 'http>1:query': 0.01; 'http>1:search': + 0.01; 'http>1:viewthread': 0.01; 'http>1:xp': 0.01; 'http>1:zope': + 0.01; 'inventing': 0.01; 'jsp': 0.01; 'jsp.': 0.01; 'logic': 0.01; + 'maps': 0.01; 'neo': 0.01; 'newsgroup,': 0.01; 'object': 0.01; + 'popup': 0.01; 'probable': 0.01; 'query': 0.01; 'query,': 0.01; + 'resizes': 0.01; 'servlet': 0.01; 'skip:? 20': 0.01; 'stems': + 0.01; 'subject:JSP': 0.01; 'sucks!': 0.01; 'templating': 0.01; + 'tempted': 0.01; 'url.': 0.01; 'usenet': 0.01; 'usenet,': 0.01; + 'wrote': 0.01; 'x-mailer:mozilla 4.74 [en] (windows nt 5.0; u)': + 0.01; 'zope': 0.01; '#000000;': 0.99; '#cc0000;': 0.99; + '#ff3300;': 0.99; '#ff6600;': 0.99; '#ffffff;': 0.99; '©': + 0.99; '>': 0.99; '  ': 0.99; '"no': 0.99; + '.med': 0.99; '.small': 0.99; '0pt;': 0.99; '0px;': 0.99; '10px;': + 0.99; '11pt;': 0.99; '12px;': 0.99; '18pt;': 0.99; '18px;': 0.99; + '1pt;': 0.99; '2px;': 0.99; '640;': 0.99; '8pt;': 0.99; ' + + + + + +
+
+
+
+

<= +/TR> +
Save up to 70% on Life Insurance.
+
Why Spend More Than You Have To? +
+
Life Quote Savings +
+

+


+

+
+ +
+ + + + + +
Ensurin= +g your + family's financial security is very important. Life Quote Savings ma= +kes + buying life insurance simple and affordable. We Provide FREE Access = +to The + Very Best Companies and The Lowest Rates.
+ + + + +

+ +

+

Protecting your family is the best investment you'll eve= +r + make!
+

+
Life Quote Savings is FAST, EAS= +Y and + SAVES you money! Let us help you get started with the best val= +ues in + the country on new coverage. You can SAVE hundreds or even tho= +usands + of dollars by requesting a FREE quote from Lifequote Savings. = +Our + service will take you less than 5 minutes to complete. Shop an= +d + compare. SAVE up to 70% on all types of Life insurance! +
+

Click Here For Your= + + Free Quote!

+

+

+



+

+






+


+




If you are in receipt of this= + email + in error and/or wish to be removed from our list, PLEASE CLICK HERE AND TYPE = +REMOVE. If you + reside in any state which prohibits e-mail solicitations for insuran= +ce, + please disregard this + email.















+ + + diff --git a/Ch3/datasets/spam/spam/00002.d94f1b97e48ed3b553b3508d116e6a09 b/Ch3/datasets/spam/spam/00002.d94f1b97e48ed3b553b3508d116e6a09 new file mode 100644 index 000000000..50bfba042 --- /dev/null +++ b/Ch3/datasets/spam/spam/00002.d94f1b97e48ed3b553b3508d116e6a09 @@ -0,0 +1,81 @@ +From ilug-admin@linux.ie Thu Aug 22 13:27:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id A7FD7454F6 + for ; Thu, 22 Aug 2002 08:27:38 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 13:27:38 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MCJiZ06043 for + ; Thu, 22 Aug 2002 13:19:44 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id NAA29323; Thu, 22 Aug 2002 13:18:52 +0100 +Received: from email.qves.com ([67.104.83.251]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id NAA29282 for ; Thu, + 22 Aug 2002 13:18:37 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host [67.104.83.251] claimed to + be email.qves.com +Received: from qvp0091 ([169.254.6.22]) by email.qves.com with Microsoft + SMTPSVC(5.0.2195.2966); Thu, 22 Aug 2002 06:18:18 -0600 +From: "Slim Down" +To: +Date: Thu, 22 Aug 2002 06:18:18 -0600 +Message-Id: <59e6301c249d5$ffb7ea20$1606fea9@freeyankeedom.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJJ1f+3FWdz11AmR6uWbmQN5gGxxw== +Content-Class: urn:content-classes:message +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2462.0000 +X-Originalarrivaltime: 22 Aug 2002 12:18:18.0699 (UTC) FILETIME=[FFB949B0:01C249D5] +Subject: [ILUG] Guaranteed to lose 10-12 lbs in 30 days 10.206 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +1) Fight The Risk of Cancer! +http://www.adclick.ws/p.cfm?o=315&s=pk007 + +2) Slim Down - Guaranteed to lose 10-12 lbs in 30 days +http://www.adclick.ws/p.cfm?o=249&s=pk007 + +3) Get the Child Support You Deserve - Free Legal Advice +http://www.adclick.ws/p.cfm?o=245&s=pk002 + +4) Join the Web's Fastest Growing Singles Community +http://www.adclick.ws/p.cfm?o=259&s=pk007 + +5) Start Your Private Photo Album Online! +http://www.adclick.ws/p.cfm?o=283&s=pk007 + +Have a Wonderful Day, +Offer Manager +PrizeMama + + + + + + + + + + + + + +If you wish to leave this list please use the link below. +http://www.qves.com/trim/?ilug@linux.ie%7C17%7C114258 + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00003.2ee33bc6eacdb11f38d052c44819ba6c b/Ch3/datasets/spam/spam/00003.2ee33bc6eacdb11f38d052c44819ba6c new file mode 100644 index 000000000..5eaaab31e --- /dev/null +++ b/Ch3/datasets/spam/spam/00003.2ee33bc6eacdb11f38d052c44819ba6c @@ -0,0 +1,63 @@ +From sabrina@mx3.1premio.com Thu Aug 22 14:44:07 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 1E90847C66 + for ; Thu, 22 Aug 2002 09:44:02 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 14:44:03 +0100 (IST) +Received: from email.qves.com (email1.qves.net [209.63.151.251] (may be forged)) + by webnote.net (8.9.3/8.9.3) with ESMTP id OAA04953 + for ; Thu, 22 Aug 2002 14:37:23 +0100 +Received: from qvp0086 ([169.254.6.17]) by email.qves.com with Microsoft SMTPSVC(5.0.2195.2966); + Thu, 22 Aug 2002 07:36:20 -0600 +From: "Slim Down" +To: +Subject: Guaranteed to lose 10-12 lbs in 30 days 11.150 +Date: Thu, 22 Aug 2002 07:36:19 -0600 +Message-ID: <9a63c01c249e0$e5a9d610$1106fea9@freeyankeedom.com> +MIME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJJ4OWpowGq7rdNSwCz5HE3x9ZZDQ== +Content-Class: urn:content-classes:message +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2462.0000 +X-OriginalArrivalTime: 22 Aug 2002 13:36:20.0969 (UTC) FILETIME=[E692FD90:01C249E0] + +1) Fight The Risk of Cancer! +http://www.adclick.ws/p.cfm?o=315&s=pk007 + +2) Slim Down - Guaranteed to lose 10-12 lbs in 30 days +http://www.adclick.ws/p.cfm?o=249&s=pk007 + +3) Get the Child Support You Deserve - Free Legal Advice +http://www.adclick.ws/p.cfm?o=245&s=pk002 + +4) Join the Web's Fastest Growing Singles Community +http://www.adclick.ws/p.cfm?o=259&s=pk007 + +5) Start Your Private Photo Album Online! +http://www.adclick.ws/p.cfm?o=283&s=pk007 + +Have a Wonderful Day, +Offer Manager +PrizeMama + + + + + + + + + + + + + +If you wish to leave this list please use the link below. +http://www.qves.com/trim/?zzzz@spamassassin.taint.org%7C17%7C308417 + diff --git a/Ch3/datasets/spam/spam/00004.eac8de8d759b7e74154f142194282724 b/Ch3/datasets/spam/spam/00004.eac8de8d759b7e74154f142194282724 new file mode 100644 index 000000000..5cba15881 --- /dev/null +++ b/Ch3/datasets/spam/spam/00004.eac8de8d759b7e74154f142194282724 @@ -0,0 +1,121 @@ +From wsup@playful.com Thu Aug 22 16:17:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id B8E8D43F99 + for ; Thu, 22 Aug 2002 11:16:59 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 16:16:59 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id QAA05397 + for ; Thu, 22 Aug 2002 16:13:20 +0100 +Received: from 200.161.16.132 (unknown [210.19.113.130]) + by smtp.easydns.com (Postfix) with SMTP id 694632EE5A + for ; Thu, 22 Aug 2002 11:12:57 -0400 (EDT) +Received: from unknown (52.127.142.42) by rly-xl04.mx.aol.com with smtp; Aug, 22 2002 8:02:13 AM +0400 +Received: from [176.244.234.14] by smtp-server6.tampabay.rr.com with local; Aug, 22 2002 6:50:51 AM +1200 +Received: from [106.226.127.61] by n7.groups.yahoo.com with local; Aug, 22 2002 5:50:53 AM +0300 +Received: from 177.139.227.166 ([177.139.227.166]) by sparc.isl.net with QMQP; Aug, 22 2002 4:47:16 AM -0000 +From: Account Services +To: zzzz@spamassassin.taint.org +Cc: +Subject: Re: Fw: User Name & Password to Membership To 5 Sites zzzz@spamassassin.taint.org pviqg +Sender: Account Services +Mime-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Thu, 22 Aug 2002 08:13:35 -0700 +X-Mailer: Microsoft Outlook Express 5.00.2615.200 +X-Priority: 1 +Message-Id: <20020822151301.694632EE5A@smtp.easydns.com> + +################################################## +# # +# Adult Club # +# Offers FREE Membership # +# # +################################################## + +>>>>> INSTANT ACCESS TO ALL SITES NOW +>>>>> Your User Name And Password is. +>>>>> User Name: zzzz@spamassassin.taint.org +>>>>> Password: 760382 + +5 of the Best Adult Sites on the Internet for FREE! +--------------------------------------- +NEWS 08/18/02 +With just over 2.9 Million Members that signed up for FREE, Last month there were 721,184 New +Members. Are you one of them yet??? +--------------------------------------- +Our Membership FAQ + +Q. Why are you offering free access to 5 adult membership sites for free? +A. I have advertisers that pay me for ad space so you don't have to pay for membership. + +Q. Is it true my membership is for life? +A. Absolutely you'll never have to pay a cent the advertisers do. + +Q. Can I give my account to my friends and family? +A. Yes, as long they are over the age of 18. + +Q. Do I have to sign up for all 5 membership sites? +A. No just one to get access to all of them. + +Q. How do I get started? +A. Click on one of the following links below to become a member. + +- These are multi million dollar operations with policies and rules. +- Fill in the required info and they won't charge you for the Free pass! +- If you don't believe us, just read their terms and conditions. + +--------------------------- + +# 5. > Adults Farm +http://80.71.66.8/farm/?aid=760382 +Girls and Animals Getting Freaky....FREE Lifetime Membership!! + +# 4. > Sexy Celebes +http://80.71.66.8/celebst/?aid=760382 +Thousands Of XXX Celebes doing it...FREE Lifetime Membership!! + +# 3. > Play House Porn +http://80.71.66.8/mega/?aid=760382 +Live Feeds From 60 Sites And Web Cams...FREE Lifetime Membership!! + +# 2. > Asian Sex Fantasies +http://80.71.66.8/asian/?aid=760382 +Japanese Schoolgirls, Live Sex Shows ...FREE Lifetime Membership!! + +# 1. > Lesbian Lace +http://80.71.66.8/lesbian/?aid=760382 +Girls and Girls Getting Freaky! ...FREE Lifetime Membership!! + +-------------------------- + +Jennifer Simpson, Miami, FL +Your FREE lifetime membership has entertained my boyffriend and I for +the last two years! Your Adult Sites are the best on the net! + +Joe Morgan Manhattan, NY +Your live sex shows and live sex cams are unbelievable. The best part +about your porn sites, is that they're absolutely FREE! + +-------------------------- + + + + + + + + + +Removal Instructions: + +You have received this advertisement because you have opted in to receive free adult internet +offers and specials through our affiliated websites. If you do not wish to receive further emails +or have received the email in error you may opt-out of our database here +http://80.71.66.8/optout/ . Please allow 24 hours for removal. + +vonolmosatkirekpups + diff --git a/Ch3/datasets/spam/spam/00005.57696a39d7d84318ce497886896bf90d b/Ch3/datasets/spam/spam/00005.57696a39d7d84318ce497886896bf90d new file mode 100644 index 000000000..61fc76ada --- /dev/null +++ b/Ch3/datasets/spam/spam/00005.57696a39d7d84318ce497886896bf90d @@ -0,0 +1,70 @@ +From social-admin@linux.ie Thu Aug 22 16:37:34 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 30B2143F99 + for ; Thu, 22 Aug 2002 11:37:34 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 16:37:34 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MFYOZ12548 for + ; Thu, 22 Aug 2002 16:34:25 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA07692; Thu, 22 Aug 2002 16:33:43 +0100 +Received: from email.qves.com ([67.104.83.251]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA07662 for ; Thu, + 22 Aug 2002 16:33:37 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host [67.104.83.251] claimed to + be email.qves.com +Received: from qvp0080 ([169.254.6.11]) by email.qves.com with Microsoft + SMTPSVC(5.0.2195.2966); Thu, 22 Aug 2002 09:33:08 -0600 +From: "Slim n Trim" +To: +Date: Thu, 22 Aug 2002 09:33:07 -0600 +Message-Id: <104c1101c249f1$36e098b0$0b06fea9@freeyankeedom.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJJ8TbZoOKEj0AtTsKxJ7ZmOA0e/w== +Content-Class: urn:content-classes:message +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2462.0000 +X-Originalarrivaltime: 22 Aug 2002 15:33:08.0313 (UTC) FILETIME=[3746D490:01C249F1] +Subject: [ILUG-Social] re: Guaranteed to lose 10-12 lbs in 30 days 10.148 +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group social events +X-Beenthere: social@linux.ie + +I thought you might like these: +1) Slim Down - Guaranteed to lose 10-12 lbs in 30 days +http://www.freeyankee.com/cgi/fy2/to.cgi?l=822slim1 + +2) Fight The Risk of Cancer! +http://www.freeyankee.com/cgi/fy2/to.cgi?l=822nic1 + +3) Get the Child Support You Deserve - Free Legal Advice +http://www.freeyankee.com/cgi/fy2/to.cgi?l=822ppl1 + +Offer Manager +Daily-Deals + + + + + + + + +If you wish to leave this list please use the link below. +http://www.qves.com/trim/?social@linux.ie%7C29%7C134077 + + +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00006.5ab5620d3d7c6c0db76234556a16f6c1 b/Ch3/datasets/spam/spam/00006.5ab5620d3d7c6c0db76234556a16f6c1 new file mode 100644 index 000000000..a2ad2cf83 --- /dev/null +++ b/Ch3/datasets/spam/spam/00006.5ab5620d3d7c6c0db76234556a16f6c1 @@ -0,0 +1,72 @@ +From Thecashsystem@firemail.de Thu Aug 22 16:58:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 3453043F99 + for ; Thu, 22 Aug 2002 11:58:24 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 16:58:24 +0100 (IST) +Received: from mailbox-13.st1.spray.net (mailbox-13.st1.spray.net [212.78.202.113]) + by webnote.net (8.9.3/8.9.3) with ESMTP id QAA05573 + for ; Thu, 22 Aug 2002 16:55:29 +0100 +Received: from freesource (user-24-214-168-210.knology.net [24.214.168.210]) + by mailbox-13.st1.spray.net (Postfix) with ESMTP + id ADDD03E25C; Thu, 22 Aug 2002 17:50:55 +0200 (DST) +Message-ID: <413-220028422154219900@freesource> +X-Priority: 1 +To: "1" +From: "TheCashSystem" +Subject: RE: Your Bank Account Information +Date: Thu, 22 Aug 2002 10:42:19 -0500 +MIME-Version: 1.0 +Content-type: text/plain; charset=US-ASCII +X-MIME-Autoconverted: from quoted-printable to 8bit by webnote.net id QAA05573 +Content-Transfer-Encoding: 8bit + +A POWERHOUSE GIFTING PROGRAM You Don't Want To Miss! + + GET IN WITH THE FOUNDERS! +The MAJOR PLAYERS are on This ONE +For ONCE be where the PlayerS are +This is YOUR Private Invitation + +EXPERTS ARE CALLING THIS THE FASTEST WAY +TO HUGE CASH FLOW EVER CONCEIVED +Leverage $1,000 into $50,000 Over and Over Again + +THE QUESTION HERE IS: +YOU EITHER WANT TO BE WEALTHY +OR YOU DON'T!!! +WHICH ONE ARE YOU? +I am tossing you a financial lifeline and for your sake I +Hope you GRAB onto it and hold on tight For the Ride of youR life! + +Testimonials + +Hear what average people are doing their first few days: +“We've received 8,000 in 1 day and we are doing that over and over again!' Q.S. in AL + “I'm a single mother in FL and I've received 12,000 in the last 4 days.” D. S. in FL +“I was not sure about this when I sent off my $1,000 pledge, but I got back $2,000 the very next day!” L.L. in KY +“I didn't have the money, so I found myself a partner to work this with. We have received $4,000 over the last 2 days. +I think I made the right decision; don't you?” K. C. in FL +“I pick up $3,000 my first day and I they gave me free leads and all the training, you can too!” J.W. in CA + +ANNOUNCING: We will CLOSE your sales for YOU! And Help you get a Fax Blast IMMEDIATELY Upon Your Entry!!! YOU Make the MONEY!!! +FREE LEADS!!! TRAINING!!! + +$$DON'T WAIT!!! CALL NOW $$ +FAX BACK TO: 1-800-421-6318 OR Call 1-800-896-6568 + +Name__________________________________Phone___________________________________________ + +Fax_____________________________________Email____________________________________________ + +Best Time To Call_________________________Time Zone________________________________________ + +This message is sent in compliance of the new e-mail bill. "Per Section 301, Paragraph (a)(2)(C) of S. 1618, further transmissions by the sender of this email may be stopped, at no cost to you, by sending a reply to this email address with the word "REMOVE" in the subject line. Errors, omissions, and exceptions excluded. + +This is NOT spam! I have compiled this list from our Replicate Database, relative to Seattle Marketing Group, The Gigt, or Turbo Team for the sole purpose of these communications. Your continued inclusion is ONLY by your gracious permission. If you wish to not receive this mail from me, please send an email to tesrewinter@yahoo.com with "Remove" in the subject and you will be deleted immediately. + + + diff --git a/Ch3/datasets/spam/spam/00007.d8521faf753ff9ee989122f6816f87d7 b/Ch3/datasets/spam/spam/00007.d8521faf753ff9ee989122f6816f87d7 new file mode 100644 index 000000000..067df911e --- /dev/null +++ b/Ch3/datasets/spam/spam/00007.d8521faf753ff9ee989122f6816f87d7 @@ -0,0 +1,53 @@ +From fort@bluemail.dk Thu Aug 22 18:28:10 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 9367F43F99 + for ; Thu, 22 Aug 2002 13:28:06 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 18:28:06 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id SAA05963; + Thu, 22 Aug 2002 18:25:04 +0100 +From: fort@bluemail.dk +Received: from bluemail.dk (217-127-249-196.uc.nombres.ttd.es [217.127.249.196]) + by smtp.easydns.com (Postfix) with SMTP + id 3FBEB2EEF1; Thu, 22 Aug 2002 13:24:37 -0400 (EDT) +Reply-To: +Message-ID: <000c84d37aae$7338a0a4$3ab55ec5@bjjwxv> +To: mike23@hotmail.com +Subject: FORTUNE 500 COMPANY HIRING, AT HOME REPS. +MiME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 +Importance: Normal +Date: Thu, 22 Aug 2002 13:24:37 -0400 (EDT) +Content-Transfer-Encoding: 8bit + +Help wanted. We are a 14 year old fortune 500 company, that is +growing at a tremendous rate. We are looking for individuals who +want to work from home. + +This is an opportunity to make an excellent income. No experience +is required. We will train you. + +So if you are looking to be employed from home with a career that has +vast opportunities, then go: + +http://www.basetel.com/wealthnow + +We are looking for energetic and self motivated people. If that is you +than click on the link and fill out the form, and one of our +employement specialist will contact you. + +To be removed from our link simple go to: + +http://www.basetel.com/remove.html + + +4139vOLW7-758DoDY1425FRhM1-764SMFc8513fCsLl40 + diff --git a/Ch3/datasets/spam/spam/00008.dfd941deb10f5eed78b1594b131c9266 b/Ch3/datasets/spam/spam/00008.dfd941deb10f5eed78b1594b131c9266 new file mode 100644 index 000000000..b11cac510 --- /dev/null +++ b/Ch3/datasets/spam/spam/00008.dfd941deb10f5eed78b1594b131c9266 @@ -0,0 +1,627 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Thu Aug 22 18:28:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 71CE443F9B + for ; Thu, 22 Aug 2002 13:28:19 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 18:28:19 +0100 (IST) +Received: from TIPSMTP1.ADMANMAIL.COM (TIPSMTP1.ADMANMAIL.COM [209.216.124.212]) + by webnote.net (8.9.3/8.9.3) with ESMTP id SAA05985 + for ; Thu, 22 Aug 2002 18:27:56 +0100 +Message-Id: <200208221727.SAA05985@webnote.net> +Received: from tiputil1 (10.2.0.30) by TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id <123.000035F8@TIPSMTP1.ADMANMAIL.COM>; Thu, 22 Aug 2002 11:11:42 -0500 +Date: Thu, 22 Aug 2002 10:30:04 -0500 +From: Great Offers +To: JM@NETNOTEINC.COM +Subject: Is Your Family Protected? +X-Info: 134085 +X-Info2: SGO +Mime-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + + +ReliaQuote - Save Up To 70% On Life Insurance + + + + + + + + + + + +
+ + + + +
+
 
+ + + + + + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+

Life + can change in an instant. That's why it is so + important to protect your family's financial future + with sufficient life insurance coverage.

+
+
+
+
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
State + of Residence: + + +
Date + of Birth (MM/DD/YY): + + / + + / + +
Sex: + + + + + + + +
+ + Male + + Female
+
Have + you used any tobacco products in the last 12 months? + + + + + + + +
+ + No + + Yes
+
Coverage + Amount: + + +
How + long do you need the coverage? + + +
  + + +
+
+
+ +
+

+ + + + +
+ + + + +
+
ReliaQuote + makes it easy and affordable. We can instantly provide you + with free quotes from highly rated insurance companies.
+
+ + + + + + + +
+ + + + + + + + + + +
Save + up to
on + Life Insurance
+
+ Compare quotes today. +
+ There is nothing more
+ important than protecting
+ their future.
+
+
+
Copyright 2001 ReliaQuote, + Inc.
+ All rights reserved.
+
+T +
+ +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
+ diff --git a/Ch3/datasets/spam/spam/00009.027bf6e0b0c4ab34db3ce0ea4bf2edab b/Ch3/datasets/spam/spam/00009.027bf6e0b0c4ab34db3ce0ea4bf2edab new file mode 100644 index 000000000..141ef7fad --- /dev/null +++ b/Ch3/datasets/spam/spam/00009.027bf6e0b0c4ab34db3ce0ea4bf2edab @@ -0,0 +1,93 @@ +From Thecashsystem@firemail.de Thu Aug 22 18:28:49 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 3F51D43F99 + for ; Thu, 22 Aug 2002 13:28:49 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 22 Aug 2002 18:28:49 +0100 (IST) +Received: from mailbox-11.st1.spray.net (mailbox-11.st1.spray.net [212.78.202.111]) + by webnote.net (8.9.3/8.9.3) with ESMTP id SAA05992 + for ; Thu, 22 Aug 2002 18:28:34 +0100 +Received: from freesource (user-24-214-168-210.knology.net [24.214.168.210]) + by mailbox-11.st1.spray.net (Postfix) with ESMTP + id 2880E1FA26; Thu, 22 Aug 2002 19:24:10 +0200 (MEST) +Message-ID: <413-22002842217164660@freesource> +X-Priority: 1 +To: "1" +From: "TheCashSystem" +Subject: RE: Important Information Concerning Your Bank Account +Date: Thu, 22 Aug 2002 12:16:46 -0500 +MIME-Version: 1.0 +Content-type: text/plain; charset=US-ASCII +X-MIME-Autoconverted: from quoted-printable to 8bit by webnote.net id SAA05992 +Content-Transfer-Encoding: 8bit + +TIRED OF THE BULL OUT THERE? +Want To Stop Losing Money? + +WANT A REAL MONEY MAKER? +RECEIVE $1,000-$5,000 TODAY! +EXPERTS ARE CALLING THIS THE FASTEST WAY TO HUGE CASH FLOW EVER CONCEIVED! + +A POWERHOUSE Gifting Program You Don't Want To Miss! +We work as a TEAM! + +This is YOUR Private Invitation GET IN WITH THE FOUNDERS! This is where the BIG BOYS PLAY! The MAJOR PLAYERS are on This ONE For ONCE be where the Players are + +This is a system that will drive $1,000's to your doorstep +In a short period of time! + +Leverage $1000.00 into $50,000, Over and Over Again + +THE QUESTION HERE IS: + +YOU EITHER WANT TO BE WEALTHY OR YOU DON'T!!! + +WHICH ONE ARE YOU? + +I am tossing you a financial lifeline and for your sake I + +Hope you GRAB onto it and hold on tight For the Ride of your life! + +Testimonials + +Hear what average people are doing their first few days: +“We've received 8,000 in 1 day and we are doing that over and over again!' Q.S. in AL + “I'm a single mother in FL and I've received 12,000 in the last 4 days.” D. S. in FL +“I was not sure about this when I sent off my $1,000 pledge, but I got back $2,000 the very next day!” L.L. in KY +“I didn't have the money, so I found myself a partner to work this with. We have received $4,000 over the last 2 days. I think I made the right decision; don't you?” K. C. in FL +“I pick up $3,000 my first day and I they gave me free leads and all the training, you can too!” J.W. in CA + +This WILL be the Most IMPORTANT Call you make this Year! + + +FREE LEADS!!!!!!! TRAINING!!!!!!! + +ANNOUNCING: We will CLOSE your sales for YOU! And Help you get a Fax Blast IMMEDIATELY Upon Your Entry!!! YOU Make the MONEY!!! +FREE LEADS!!!!!!! TRAINING!!!!!!! + +$$DON'T WAIT!!! CALL NOW $$ 1-800-896-6568 +Print and Fax to 1-800-421-6318 or send an email +requesting more information to successleads@firemail.de +Please include your name and telephone number. + +*Receive 10,000 FREE LEADS just for responding! (a $499.99 value) + +Name___________________________________ +Phone___________________________________ +Fax_____________________________________ +Email___________________________________ + + +This message is sent in compliance of the new e-mail bill. "Per Section 301, Paragraph (a)(2)(C) of S. 1618, further transmissions by the sender of this email may be stopped, at no cost to you, by sending a reply to this email address with the word "REMOVE" in the subject line. Errors, omissions, and exceptions excluded. +This is NOT spam! I have compiled this list from our Replicate Database, relative to Seattle Marketing Group, The Gigt, or Turbo Team for the sole purpose of these communications. Your continued inclusion is ONLY by your gracious permission. If you wish to not receive this mail from me, please send an email to tesrewinter@yahoo.com with "Remove" in the subject and you will be deleted immediately. + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00010.445affef4c70feec58f9198cfbc22997 b/Ch3/datasets/spam/spam/00010.445affef4c70feec58f9198cfbc22997 new file mode 100644 index 000000000..18ebe698a --- /dev/null +++ b/Ch3/datasets/spam/spam/00010.445affef4c70feec58f9198cfbc22997 @@ -0,0 +1,69 @@ +From suz0123893616943@yahoo.com Fri Aug 23 11:02:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 1A60A43F9B + for ; Fri, 23 Aug 2002 06:02:50 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:02:50 +0100 (IST) +Received: from enjoya2.enjoya.com ([204.216.233.160]) + by webnote.net (8.9.3/8.9.3) with ESMTP id UAA06531 + for ; Thu, 22 Aug 2002 20:55:12 +0100 +Message-Id: <200208221955.UAA06531@webnote.net> +Received: from 65.113.29.188 (SERVER3 [65.113.29.188]) by enjoya2.enjoya.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2650.21) + id RK2JB8PP; Thu, 22 Aug 2002 11:37:45 -0700 +From: "fzjzo" +To: ricardo1@bbvnet.com, bob.a.jones@address.com, + zzzz@netcom17.netcom.com, voloon@hotmail.com +Cc: bob.a.jones@gte.sprint.com, zzzz@netmore.net, + andy.kiwanuka@pentoneurope.com, eighbellinger@yahoo.com, + zzzz@spamassassin.taint.org, bob.ackley@cdsnet.net, eighbluedarts@yahoo.com +Date: Thu, 22 Aug 2002 13:18:16 -0500 +Subject: MULTIPLY YOUR CUSTOMER BASE! +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Precedence-Ref: l2340567 +Content-Transfer-Encoding: 7bit +Content-Type: text/html; charset=us-ascii + +Dear ricardo1 , + + + +
+COST EFFECTIVE Direct Email Advertising
+Promote Your Business For As Low As
+$50 Per +1 Million + Email Addresses

+MAXIMIZE YOUR MARKETING DOLLARS!

+Complete and fax this information form to 309-407-7378.
+A Consultant will contact you to discuss your marketing needs.
+
+ +
+NAME:___________________________________________________________________
+COMPANY:_______________________________________________________________
+ADDRESS:________________________________________________________________
+CITY:_____________________________________________________________________
+STATE:___________________________________________________________________
+PHONE:___________________________________________________________________
+E-MAIL:__________________________________________________________________
+WEBSITE: (Not Required)_______________________________________________________
+___________________________________________________________________________
+___________________________________________________________________________
+*COMMENTS: (Provide details, pricing, etc. on the products and services you wish to market)
+___________________________________________________________________________
+___________________________________________________________________________
+___________________________________________________________________________
+___________________________________________________________________________
+
+

+ + + + [247(^(PO1:KJ)_8J7BJK9^":}H&*TG0BK5NKIYs5] + + diff --git a/Ch3/datasets/spam/spam/00011.61816b9ad167657773a427d890d0468e b/Ch3/datasets/spam/spam/00011.61816b9ad167657773a427d890d0468e new file mode 100644 index 000000000..cee189a64 --- /dev/null +++ b/Ch3/datasets/spam/spam/00011.61816b9ad167657773a427d890d0468e @@ -0,0 +1,57 @@ +From hurst@missouri.co.jp Fri Aug 23 11:03:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 2667B44156 + for ; Fri, 23 Aug 2002 06:02:51 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:02:51 +0100 (IST) +Received: from toole.uol.com.br (toole.uol.com.br [200.231.206.186]) + by webnote.net (8.9.3/8.9.3) with ESMTP id WAA06855; + Thu, 22 Aug 2002 22:28:56 +0100 +From: hurst@missouri.co.jp +Received: from activatormail.com ([200.158.104.164]) + by toole.uol.com.br (8.9.1/8.9.1) with SMTP id SAA13079; + Thu, 22 Aug 2002 18:21:49 -0300 (BRT) +Message-ID: <000023b8700d$00003a16$00004696@missouri.co.jp> +To: +Subject: ^^^^^Cell Phone Belt Clips $1.95^^^^^^ 18070 +Date: Thu, 22 Aug 2002 15:45:31 -0600 +MIME-Version: 1.0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2615.200 +X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200 + +Cellular Phone Accessories All At Below Wholesale Prices! + +http://202.101.163.34:81/sites/merchant/sales/ + +Hands Free Ear Buds 1.99! +Phone Holsters 1.98! +Booster Antennas Only $0.99 +Phone Cases 1.98! +Car Chargers 1.98! +Face Plates As Low As 0.99! +Lithium Ion Batteries As Low As 6.94! + +http://202.101.163.34:81/sites/merchant/sales/ + +Click Below For Accessories On All NOKIA, MOTOROLA LG, NEXTEL, +SAMSUNG, QUALCOMM, ERICSSON, AUDIOVOX PHONES At Below +WHOLESALE PRICES! + +http://202.101.163.34:81/sites/merchant/sales/ + +***If You Need Assistance Please Call Us (732) 751-1457*** + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +To be removed from future mailings please send your remove +request to: removemenow68994@btamail.net.cn +Thank You and have a super day :) + diff --git a/Ch3/datasets/spam/spam/00012.381e4f512915109ba1e0853a7a8407b2 b/Ch3/datasets/spam/spam/00012.381e4f512915109ba1e0853a7a8407b2 new file mode 100644 index 000000000..0091412b4 --- /dev/null +++ b/Ch3/datasets/spam/spam/00012.381e4f512915109ba1e0853a7a8407b2 @@ -0,0 +1,39 @@ +From simply-amateur-zzzz=spamassassin.taint.org@free4pornlovers.com Fri Aug 23 11:03:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id B082544155 + for ; Fri, 23 Aug 2002 06:02:50 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:02:50 +0100 (IST) +Received: from mail.free4pornlovers.com ([205.252.89.51]) + by webnote.net (8.9.3/8.9.3) with SMTP id UAA06551 + for ; Thu, 22 Aug 2002 20:57:35 +0100 +Received: (qmail 32186 invoked by uid 0); 22 Aug 2002 08:28:38 -0000 +Delivered-To: list.txt.59@mail.free4pornlovers.com +Date: 22 Aug 2002 08:28:38 -0000 +Message-ID: <20020822082838.32185.qmail@mail.free4pornlovers.com> +From: "Young Sluts" +To: zzzz@spamassassin.taint.org +MIME-Version: 1.0 +Subject: wives and girlfriends cheating and whoring around +Content-Type: TEXT/HTML + + + + + + + + + +
+ +Click Here Now !
+Simply Amateur
+Just like the girl next door.
+XXX Free Tour !
+First time photos !
Sneeky hidden cams !
Nude exibitionists !
Cheating Wives and Girlfriends !


+
Click here to be removed
+ diff --git a/Ch3/datasets/spam/spam/00013.d3f0b591a65f116ea5d9d4ad919f83aa b/Ch3/datasets/spam/spam/00013.d3f0b591a65f116ea5d9d4ad919f83aa new file mode 100644 index 000000000..377e6bf3b --- /dev/null +++ b/Ch3/datasets/spam/spam/00013.d3f0b591a65f116ea5d9d4ad919f83aa @@ -0,0 +1,63 @@ +From aileen@email2.qves.net Fri Aug 23 11:03:13 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 9EA0044157 + for ; Fri, 23 Aug 2002 06:02:51 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:02:51 +0100 (IST) +Received: from email.qves.com ([67.104.83.251]) + by webnote.net (8.9.3/8.9.3) with ESMTP id WAA06881 + for ; Thu, 22 Aug 2002 22:34:30 +0100 +Received: from qvp0087 ([169.254.6.20]) by email.qves.com with Microsoft SMTPSVC(5.0.2195.2966); + Thu, 22 Aug 2002 15:09:13 -0600 +From: "FreeLegal Advice" +To: +Subject: Get the Child Support You Deserve 11.180 +Date: Thu, 22 Aug 2002 15:09:11 -0600 +Message-ID: <110d1201c24a20$29b657e0$1406fea9@freeyankeedom.com> +MIME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJKICm0SPU/10nGTaOUfZRvzeDhdw== +Content-Class: urn:content-classes:message +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2462.0000 +X-OriginalArrivalTime: 22 Aug 2002 21:09:14.0437 (UTC) FILETIME=[2B392750:01C24A20] + +1) Fight The Risk of Cancer! +http://www.adclick.ws/p.cfm?o=315&s=pk007 + +2) Slim Down - Guaranteed to lose 10-12 lbs in 30 days +http://www.adclick.ws/p.cfm?o=249&s=pk007 + +3) Get the Child Support You Deserve - Free Legal Advice +http://www.adclick.ws/p.cfm?o=245&s=pk002 + +4) Join the Web's Fastest Growing Singles Community +http://www.adclick.ws/p.cfm?o=259&s=pk007 + +5) Start Your Private Photo Album Online! +http://www.adclick.ws/p.cfm?o=283&s=pk007 + +Have a Wonderful Day, +Offer Manager +PrizeMama + + + + + + + + + + + + + +If you wish to leave this list please use the link below. +http://www.qves.com/trim/?zzzz@spamassassin.taint.org%7C17%7C308417 + diff --git a/Ch3/datasets/spam/spam/00014.7d38c46424f24fc8012ac15a95a2ac14 b/Ch3/datasets/spam/spam/00014.7d38c46424f24fc8012ac15a95a2ac14 new file mode 100644 index 000000000..c1da0d57b --- /dev/null +++ b/Ch3/datasets/spam/spam/00014.7d38c46424f24fc8012ac15a95a2ac14 @@ -0,0 +1,116 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Fri Aug 23 11:03:17 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 1FA6F44158 + for ; Fri, 23 Aug 2002 06:02:52 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:02:52 +0100 (IST) +Received: from TIPSMTP1.ADMANMAIL.COM (TIPSMTP1.ADMANMAIL.COM [209.216.124.212]) + by webnote.net (8.9.3/8.9.3) with ESMTP id AAA07310 + for ; Fri, 23 Aug 2002 00:28:12 +0100 +Message-Id: <200208222328.AAA07310@webnote.net> +Received: from tiputil1 (10.2.0.30) by TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id <149.000027CA@TIPSMTP1.ADMANMAIL.COM>; Thu, 22 Aug 2002 16:57:47 -0500 +Date: Thu, 22 Aug 2002 16:30:32 -0500 +From: Great Offers +To: JM@NETNOTEINC.COM +Subject: FREE Cell Phone + $50 Cash Back! +X-Info: 134085 +X-Info2: SGO +Mime-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + +FREE Motorola Cell Phone with $50 Cash Back! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
SimplyWireless.com*Free phone + offer subject to VoiceStream Wireless credit approval. Must activate a new + line of service to receive a free phone. A one-time activation fee of $25 + applies to all new activations. Coverage not available in all areas. Offer + fulfilled by SimplyWireless.com, a VoiceStream authorized dealer. See site + for additional offer details. +

**$50 mail-in rebate is available for new VoiceStream service plans + $29.99 and greater. Rebate ends +8/31/02.
+T +
+ +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
+ diff --git a/Ch3/datasets/spam/spam/00015.048434ab64c86cf890eda1326a5643f5 b/Ch3/datasets/spam/spam/00015.048434ab64c86cf890eda1326a5643f5 new file mode 100644 index 000000000..2995d2711 --- /dev/null +++ b/Ch3/datasets/spam/spam/00015.048434ab64c86cf890eda1326a5643f5 @@ -0,0 +1,154 @@ +From weseloh@bibsam.kb.se Fri Aug 23 11:03:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 40B354415A + for ; Fri, 23 Aug 2002 06:02:54 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:02:54 +0100 (IST) +Received: from 203186114131.ctinets.com (203186114131.ctinets.com [203.186.114.131]) + by webnote.net (8.9.3/8.9.3) with SMTP id FAA08472 + for ; Fri, 23 Aug 2002 05:50:33 +0100 +Received: from mail.AETNA.CO.NZ ([200.24.85.9] ) by 203186114131.ctinets.com (AppleShare IP Mail Server 6.3.1) id 69737 via TCP with SMTP; Fri, 23 Aug 2002 09:21:37 +0800 +Message-ID: <000043de651d$000038c1$00005639@mfwjs01.mfw.is.co.za> +To: +From: "E-Business Update" +Subject: Conference calls/best quality/$.18 per minute! +Date: Thu, 22 Aug 2002 16:44:26 -1900 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +Lowest Rate Services + + + +

+

+ + + +
Conferencing Made= + Easy
+Only 18 Cents Per Minute!
= +
+

(Including Long Distance!)= + +

+ + + + <= +/TABLE> +

+

+
  • No setup fees +
  • No contracts or monthly fees +
  • Call anytime, from anywhere, to anywhere +
  • Connects up to 100 Participants +
  • Simplicity in set up and administration +
  • Operator Help available 24/7
  • + + +
    T= +he Highest Quality Service For The Lowest Rate In The Industry!= +
    +

    + + + + = +
    Fill out the form be= +low to find out how you can lower your phone bill every month.
    +

    Required Input Field* +

    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Name*
    Web + Address
    Company + Name*
    + State*
    Business + Phone*
    Home + Phone
    Email + Address*
    Type of + Business
    +

    +

    +

    + + + +
    To be removed from our distribution lists, please + Click + here.

    + + + diff --git a/Ch3/datasets/spam/spam/00016.67fb281761ca1051a22ec3f21917e7c0 b/Ch3/datasets/spam/spam/00016.67fb281761ca1051a22ec3f21917e7c0 new file mode 100644 index 000000000..d3d2f5cb8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00016.67fb281761ca1051a22ec3f21917e7c0 @@ -0,0 +1,126 @@ +From des34newsa@hotmail.com Fri Aug 23 11:03:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 87DF44415B + for ; Fri, 23 Aug 2002 06:02:56 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:02:56 +0100 (IST) +Received: from tobe.co.kr ([211.219.114.162]) + by webnote.net (8.9.3/8.9.3) with ESMTP id GAA08628 + for ; Fri, 23 Aug 2002 06:38:03 +0100 +From: des34newsa@hotmail.com +Received: from Spooler by tobe.co.kr (Mercury/32 v3.21c) ID MO000F96; + 23 Aug 02 14:56:22 +0900 +Received: from spooler by tobe.co.kr (Mercury/32 v3.21c); 23 Aug 02 14:31:47 +0900 +Received: from bigdog (63.186.16.221) by tobe.co.kr (Mercury/32 v3.21c) ID MG000F77; + 23 Aug 02 14:31:34 +0900 +To: +Subject: Plans for cable +Date: Thu, 22 Aug 2002 23:41:26 -0500 +X-Priority: 3 +X-MSMail-Priority: Normal +Message-ID: <1022355F0495@tobe.co.kr> + + + +Want to watch Sporting Events?--Movies?--Pay-Per-View?? +You can assemble from electronic store parts for about $12.00. +We Send You: +E-Z To follow Assembly Instructions +E-Z To read Original Drawings. +Electronic parts lists. +PLUS SOMETHING NEW YOU MUST HAVE! +Something you can't do without. +THE UP-TO-DATE REPORT: USING A DESCRAMBLER LEGALLY +Warning: You should not build a TV Descrambler without +reading this report first. +Frequently Asked Questions--CABLE TV DESCRAMBLER +Q: Will the descrambler work on Fiber, TCI, Jarrod +A: The answer is YES. +Q: Do I need a converter box? +A: This plan works with or without a converter box. +Specific instructions are included in the plans for each! +Q: Can the cable company detect that I have the descrambler? +A: No, the signal descrambles right at the box and does +not move back through the line! +Q: Do I have to alter my existing cable system, +television or VCR? +A: The answer is no! +Q: Does this work with my remote control? +A: The answer is yes. The descrambler is +manually controlled--but very easy to use! +Q: Can you email me the plans? +A: No the program comes with an easy to follow picture guide. +Q: Does this work everywhere across the country? +A: Yes, every where in the USA plus England, +Brazil, Canada and other countries! +Q: Is this deal guaranteed? +A: Yes, if you are unhappy for any reason we will refund your money. + +ORDER INFORMATION +ACT WITHIN THE NEXT 7 DAYS AND RECEIVE TWO FREE BONUS!! +THE CABLE MANUAL! This manual contains hard to find information your +cable company does not want you to know. Also receive The RADAR +JAMMER PLANS! Never get another speeding ticket. Build you own +radar jammer, this unit will jam police radar so they can't get a +reading on +your vechicle. Radar jammers are legal in 48 states. It is simple to +build. + +The FREE BONUSES ALONE ARE WORTH ACTING NOW! +THE CABLE DESCRAMBLER KIT COMES WITH A THIRTY DAY +MONEY BACK GUARANTEE! IF YOUR NOT COMPLETELY SATISFIED, +SEND THE CABLE DESCRAMBLER KIT BACK AND YOU KEEP +THE BONUSES FOR FREE. YOU HAVE NOTHING TO LOSE!! + +REGULAR PRICE $19.95 ACT WITHIN THE NEXT 7 DAYS +AND RECEIVE FOR $12.95 ACT NOW!! + +SIMPLY SEND $12.95 THAT'S RIGHT ONLY $12.95 BUT YOU MUST +ACT WITHIN 7 DAYS FOR THIS SPECIAL PRICE!!! + +SEND $12.95 CHECK OR MONEY ORDER. + +TO: + +GPG SOFTWARE +12105 WEST CENTER RD #382 +OMAHA, NE 68144 + + +THIS INFORMATION IS SOLD FOR EDUCATIONAL PURPOSES ONLY + + +If you would like to be removed richeyg40@yahoo.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00017.1a938ecddd047b93cbd7ed92c241e6d1 b/Ch3/datasets/spam/spam/00017.1a938ecddd047b93cbd7ed92c241e6d1 new file mode 100644 index 000000000..d98711e36 --- /dev/null +++ b/Ch3/datasets/spam/spam/00017.1a938ecddd047b93cbd7ed92c241e6d1 @@ -0,0 +1,53 @@ +From jjj@mymail.dk Fri Aug 23 11:03:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 478B54415C + for ; Fri, 23 Aug 2002 06:02:57 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:02:57 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id IAA08912; + Fri, 23 Aug 2002 08:13:36 +0100 +From: jjj@mymail.dk +Received: from mymail.dk (unknown [61.97.34.233]) + by smtp.easydns.com (Postfix) with SMTP + id 7484A2F85C; Fri, 23 Aug 2002 03:13:31 -0400 (EDT) +Reply-To: +Message-ID: <008c61d64eed$6184e5d5$4bc22de3@udnugg> +To: bbr_hooten@yahoo.com +Subject: HELP WANTED. WORK FROM HOME REPS. +MiME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2616 +Importance: Normal +Date: Fri, 23 Aug 2002 03:13:31 -0400 (EDT) +Content-Transfer-Encoding: 8bit + +Help wanted. We are a 14 year old fortune 500 company, that is +growing at a tremendous rate. We are looking for individuals who +want to work from home. + +This is an opportunity to make an excellent income. No experience +is required. We will train you. + +So if you are looking to be employed from home with a career that has +vast opportunities, then go: + +http://www.basetel.com/wealthnow + +We are looking for energetic and self motivated people. If that is you +than click on the link and fill out the form, and one of our +employement specialist will contact you. + +To be removed from our link simple go to: + +http://www.basetel.com/remove.html + + +1349lmrd5-948HyhJ3622xXiM0-290VZdq6044fFvN0-799hUsU07l50 + diff --git a/Ch3/datasets/spam/spam/00018.5b2765c42b7648d41c93b9b27140b23a b/Ch3/datasets/spam/spam/00018.5b2765c42b7648d41c93b9b27140b23a new file mode 100644 index 000000000..5ae47a2f3 --- /dev/null +++ b/Ch3/datasets/spam/spam/00018.5b2765c42b7648d41c93b9b27140b23a @@ -0,0 +1,72 @@ +From seko_mam@spinfinder.com Fri Aug 23 11:03:33 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id A6E494415E + for ; Fri, 23 Aug 2002 06:02:58 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:02:58 +0100 (IST) +Received: from emztd2201.com ([64.86.155.179]) + by webnote.net (8.9.3/8.9.3) with SMTP id KAA09351 + for ; Fri, 23 Aug 2002 10:14:09 +0100 +Message-Id: <200208230914.KAA09351@webnote.net> +From: "MRS. M SESE SEKO" +Reply-To: seko_mam@spinfinder.com +To: zzzz@spamassassin.taint.org +Date: Fri, 23 Aug 2002 10:15:51 -0700 +Subject: A CRY FOR HELP +X-Mailer: Microsoft Outlook Express 5.00.2919.6900 DM +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +X-MIME-Autoconverted: from quoted-printable to 8bit by webnote.net id KAA09351 +Content-Transfer-Encoding: 8bit + +DEAR FRIEND,I AM MRS. SESE-SEKO WIDOW OF LATE PRESIDENT MOBUTU +SESE-SEKO OF ZAIRE? NOW KNOWN AS DEMOCRATIC REPUBLIC +OF CONGO (DRC). I AM MOVED TO WRITE YOU THIS LETTER, +THIS WAS IN CONFIDENCE CONSIDERING MY PRESENTCIRCUMSTANCE AND SITUATION. +I ESCAPED ALONG WITH MY HUSBAND AND TWO OF OUR SONS +GEORGE KONGOLO AND BASHER OUT OF DEMOCRATIC REPUBLIC OF +CONGO (DRC) TO ABIDJAN, COTE D'IVOIRE WHERE MY FAMILY +AND I SETTLED, WHILE WE LATER MOVED TO SETTLED IN +MORROCO WHERE MY HUSBAND LATER DIED OF CANCER +DISEASE. HOWEVER DUE TO THIS SITUATION WE DECIDED TO +CHANGED MOST OF MY HUSBAND'S BILLIONS OF DOLLARS +DEPOSITED IN SWISS BANK AND OTHER COUNTRIES INTO OTHER +FORMS OF MONEY CODED FOR SAFE PURPOSE BECAUSE THE NEW +HEAD OF STATE OF (DR) MR LAURENT KABILA HAS MADE +ARRANGEMENT WITH THE SWISS GOVERNMENT AND OTHER +EUROPEAN COUNTRIES TO FREEZE ALL MY LATE HUSBAND'S +TREASURES DEPOSITED IN SOME EUROPEAN COUNTRIES. HENCE +MY CHILDREN AND I DECIDED LAYING LOW IN AFRICA TO +STUDY THE SITUATION TILL WHEN THINGS GETS BETTER, +LIKE NOW THAT PRESIDENT KABILA IS DEAD AND THE SON +TAKING OVER (JOSEPH KABILA). ONE OF MY LATE HUSBAND'S +CHATEAUX IN SOUTHERN FRANCE WAS CONFISCATED BY THE +FRENCH GOVERNMENT, AND AS SUCH I HAD TO CHANGE MY +IDENTITY SO THAT MY INVESTMENT WILL NOT BE TRACED AND +CONFISCATED. I HAVE DEPOSITED THE SUM EIGHTEEN MILLION +UNITED STATE DOLLARS(US$18,000,000,00.) WITH A +SECURITY COMPANY , FOR SAFEKEEPING. THE FUNDS ARE +SECURITY CODED TO PREVENT THEM FROM +KNOWING THE CONTENT. WHAT I WANT YOU TO DO IS TO +INDICATE YOUR INTEREST THAT YOU WILL ASSIST US BY RECEIVING THE MONEY ON OUR +BEHALF.ACKNOWLEDGE THIS MESSAGE, SO THAT I CAN INTRODUCE YOU TO MY SON +(KONGOLO) WHO HAS THE OUT MODALITIES FOR THE CLAIM OF THE SAID FUNDS. I +WANT YOU TO ASSIST IN INVESTING THIS MONEY, BUT I WILL NOT WANT MY IDENTITY +REVEALED. I WILL ALSO WANT TO BUY PROPERTIES AND STOCK IN MULTI-NATIONAL +COMPANIES AND TO ENGAGE IN OTHER SAFE AND +NON-SPECULATIVE INVESTMENTS. MAY I AT THIS POINT +EMPHASISE THE HIGH LEVEL OF CONFIDENTIALITY, WHICH +THIS BUSINESS DEMANDS, AND HOPE YOU WILL NOT BETRAY +THE TRUST AND CONFIDENCE, WHICH I REPOSE IN YOU. IN +CONCLUSION, IF YOU WANT TO ASSIST US , MY SON SHALL +PUT YOU IN THE PICTURE OF THE BUSINESS, TELL YOU +WHERE THE FUNDS ARE CURRENTLY BEING MAINTAINED AND +ALSO DISCUSS OTHER MODALITIES INCLUDING REMUNERATIONFOR YOUR SERVICES. +FOR THIS REASON KINDLY FURNISH US YOUR CONTACT +INFORMATION, THAT IS YOUR PERSONAL TELEPHONE AND FAX +NUMBER FOR CONFIDENTIAL PURPOSE.BEST REGARDS,MRS M. SESE SEKO + + diff --git a/Ch3/datasets/spam/spam/00019.bbc97ad616ffd06e93ce0f821ca8c381 b/Ch3/datasets/spam/spam/00019.bbc97ad616ffd06e93ce0f821ca8c381 new file mode 100644 index 000000000..3802e9ef5 --- /dev/null +++ b/Ch3/datasets/spam/spam/00019.bbc97ad616ffd06e93ce0f821ca8c381 @@ -0,0 +1,32 @@ +From safety33o@l11.newnamedns.com Fri Aug 23 11:03:37 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 5AC994415F + for ; Fri, 23 Aug 2002 06:02:59 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:02:59 +0100 (IST) +Received: from l11.newnamedns.com ([64.25.38.81]) + by webnote.net (8.9.3/8.9.3) with ESMTP id KAA09379 + for ; Fri, 23 Aug 2002 10:18:03 +0100 +From: safety33o@l11.newnamedns.com +Date: Fri, 23 Aug 2002 02:16:25 -0400 +Message-Id: <200208230616.g7N6GOR28438@l11.newnamedns.com> +To: kxzzzzgxlrah@l11.newnamedns.com +Reply-To: safety33o@l11.newnamedns.com +Subject: ADV: Lowest life insurance rates available! moode + +Lowest rates available for term life insurance! Take a moment and fill out our online form to see the low rate you qualify for. Save up to 70% from regular rates! Smokers accepted! http://www.newnamedns.com/termlife/ + +Representing quality nationwide carriers. Act now! + + + + + +--------------------------------------- +To easily remove your address from the list, go to: +http://www.newnamedns.com/stopthemailplease/ +Please allow 48-72 hours for removal. + diff --git a/Ch3/datasets/spam/spam/00020.29725cf331fc21e18a1809e7d8b27332 b/Ch3/datasets/spam/spam/00020.29725cf331fc21e18a1809e7d8b27332 new file mode 100644 index 000000000..c1eb3acf2 --- /dev/null +++ b/Ch3/datasets/spam/spam/00020.29725cf331fc21e18a1809e7d8b27332 @@ -0,0 +1,80 @@ +From ilug-admin@linux.ie Fri Aug 23 11:07:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 8F02C4415E + for ; Fri, 23 Aug 2002 06:06:32 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:32 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MJjjZ22185 for + ; Thu, 22 Aug 2002 20:45:45 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id UAA18963; Thu, 22 Aug 2002 20:44:01 +0100 +Received: from email.qves.com (email1.qves.net [209.63.151.251] (may be + forged)) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id UAA18925 for + ; Thu, 22 Aug 2002 20:43:42 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host email1.qves.net + [209.63.151.251] (may be forged) claimed to be email.qves.com +Received: from qvp0083 ([169.254.6.14]) by email.qves.com with Microsoft + SMTPSVC(5.0.2195.3779); Thu, 22 Aug 2002 13:43:27 -0600 +From: "FreeLegal Advice" +To: +Date: Thu, 22 Aug 2002 13:43:24 -0600 +Message-Id: <16a78d01c24a14$2d585440$0e06fea9@freeyankeedom.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJKFC1YlG4+9Dg4QYKgn3ufp2C1BQ== +Content-Class: urn:content-classes:message +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2462.0000 +X-Originalarrivaltime: 22 Aug 2002 19:43:28.0713 (UTC) FILETIME=[3021FB90:01C24A14] +Subject: [ILUG] Get the Child Support You Deserve 10.132 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +1) Fight The Risk of Cancer! +http://www.adclick.ws/p.cfm?o=315&s=pk007 + +2) Slim Down - Guaranteed to lose 10-12 lbs in 30 days +http://www.adclick.ws/p.cfm?o=249&s=pk007 + +3) Get the Child Support You Deserve - Free Legal Advice +http://www.adclick.ws/p.cfm?o=245&s=pk002 + +4) Join the Web's Fastest Growing Singles Community +http://www.adclick.ws/p.cfm?o=259&s=pk007 + +5) Start Your Private Photo Album Online! +http://www.adclick.ws/p.cfm?o=283&s=pk007 + +Have a Wonderful Day, +Offer Manager +PrizeMama + + + + + + + + + + + + + +If you wish to leave this list please use the link below. +http://www.qves.com/trim/?ilug@linux.ie%7C17%7C114258 + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00021.effe1449462a9d7ad7af0f1c94b1a237 b/Ch3/datasets/spam/spam/00021.effe1449462a9d7ad7af0f1c94b1a237 new file mode 100644 index 000000000..f44989ace --- /dev/null +++ b/Ch3/datasets/spam/spam/00021.effe1449462a9d7ad7af0f1c94b1a237 @@ -0,0 +1,108 @@ +From ilug-admin@linux.ie Fri Aug 23 11:08:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id D843A4416F + for ; Fri, 23 Aug 2002 06:06:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:37 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7N7fDZ14920 for + ; Fri, 23 Aug 2002 08:41:13 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id IAA13857; Fri, 23 Aug 2002 08:38:52 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from relay.dub-t3-1.nwcgroup.com + (postfix@relay.dub-t3-1.nwcgroup.com [195.129.80.16]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id IAA13820 for ; Fri, + 23 Aug 2002 08:38:43 +0100 +Received: from mail.com (unknown [64.86.155.148]) by + relay.dub-t3-1.nwcgroup.com (Postfix) with SMTP id 1AE6470047 for + ; Fri, 23 Aug 2002 08:38:15 +0100 (IST) +From: "MR.Johnson S. Abu" +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="ISO-8859-1" +Date: Fri, 23 Aug 2002 20:41:55 +0100 +Reply-To: "MR.Johnson S. Abu" +Message-Id: <20020823073815.1AE6470047@relay.dub-t3-1.nwcgroup.com> +Subject: [ILUG] BUSINESS +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie +Content-Transfer-Encoding: 8bit + +CENTRAL BANK OF NIGERIA +FOREIGN REMITTANCE DEPT. +TINUBU SQUARE, LAGOS NIGERIA +EMAIL-smith_j@mailsurf.com +23TH OF August 2002 + +ATTN:PRESIDENT/CEO + + + STRICTLY PRIVATE BUSINESS PROPOSAL +I am MR.Johnson S. Abu, the bills and exchange Director at the +ForeignRemittance Department of the Central Bank of Nigeria. I am +writingyou +this letter to ask for your support and cooperation to carrying thisbusiness +opportunity in my department. We discovered abandoned the sumof +US$37,400,000.00 (Thirty seven million four hundred thousand unitedstates +dollars) in an account that belong to one of our foreign customers,an +American +late Engr. John Creek (Junior) an oil merchant with the federal government +of +Nigeria who died along with his entire family of a wifeand two children in +Kenya Airbus (A310-300) flight KQ430 in November2000. + +Since we heard of his death, we have been expecting his next of kin tocome +over +and put claims for his money as the heir, because we cannotrelease the fund +from his account unless someone applies for claims asthe next of kin to the +deceased as indicated in our banking guidelines. Unfortunately, neither +their +family member nor distant relative hasappeared to claim the said fund. Upon +this discovery, I and other officialsin my department have agreed to make +business with you release the totalamount into your account as the heir of +the +fund since no one came forit or discovered either maintained account with +our +bank, other wisethe fund will be returned to the bank treasury as unclaimed +fund. + +We have agreed that our ratio of sharing will be as stated thus: 30%for +you as +foreign partner and 70% for us the officials in my department. + +Upon the successful completion of this transfer, my colleague and I +willcome to +your country and mind our share. It is from our 60% we intendto import +computer +accessories into my country as way of recycling thefund. To commence this +transaction we require you to immediately indicateyour interest by calling +me +or sending me a fax immediately on the aboveTelefax # and enclose your +private +contact Telephone #, Fax #, full nameand address and your designated +banking co- + ordinates to enable us fileletter of claim to the appropriate department +for +necessary approvalsbefore the transfer can be made. + +Note also, this transaction must be kept strictly confidential becauseof its +nature. + +NB: Please remember to give me your Phone and Fax No + +MR.Johnson Smith Abu + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00022.8203cdf03888f656dc0381701148f73d b/Ch3/datasets/spam/spam/00022.8203cdf03888f656dc0381701148f73d new file mode 100644 index 000000000..de11d25f2 --- /dev/null +++ b/Ch3/datasets/spam/spam/00022.8203cdf03888f656dc0381701148f73d @@ -0,0 +1,103 @@ +From bell1hmed@yahoo.ca Fri Aug 23 11:17:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 0175E47CC6 + for ; Fri, 23 Aug 2002 06:11:55 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:11:55 +0100 (IST) +Received: from n2now709.com ([64.86.155.148]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7MKV5Z23408 for ; + Thu, 22 Aug 2002 21:31:06 +0100 +Message-Id: <200208222031.g7MKV5Z23408@dogma.slashnull.org> +From: "Dr Bello Ahmed" +Reply-To: bell1hmed@yahoo.ca +Date: Thu, 22 Aug 2002 13:31:18 -0700 +Subject: Relationship +X-Mailer: Microsoft Outlook Express 5.00.2919.6900 DM +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="===_SecAtt_000_1fheucnqggtggp" +To: undisclosed-recipients:; + +--===_SecAtt_000_1fheucnqggtggp +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: quoted-printable + +URGENT PRIVATE & EXTREMELY CONFIDENTIAL + + + +Dear =2C + +With profound interest and in utmost confidence=2C I am +soliciting your immediate assistance or co-operation +as to enable us round up an opportunity within my +capability as a result of the death of one of our +contractor =28Beneficiary=29=2E You should not be surprised +as to how I got your contact=2C you were highly +recommended to me with the believe that you are +competent=2C reliable=2C Trustworthy and confident=2E + +I am Dr=2E Bello Ahmed=2C Chief Auditor=2C Special Project +and Foreign Contract Regularization and Disbursement=2C +in the Office of the Auditor General of the Federation +of Federal Republic of Nigeria=2E We work in hand with +the Senate Committee on Foreign Contract Payment=2E Our +duty is to ensure that all contractors are paid their +contract sum in due time=2E + +This last payment quarter=2C a total of 30 contractors +were short listed for payment and about 25 of them +have been paid remaining about 5 =28Five=29=2C information +reaching this office indicates that one among the +remaining has been reported dead=2E His name is Mr=2E +Gerrand Schwartz from Sweden=2C he died in the last Air +France Concorde plane crash=2E Meanwhile he finished the +execution of his contract December 19th 1999=2E But +since his death=2C nobody has come forward to put a +claim to his contract fund which is about +US$15=2C500=2C000=2E00 Million =28fifteen Million Five +Hundred Thousand U=2ES Dollars=29 that is why I need your +immediate assistance to expedite the transfer of the +contract amount=2E + +With my position as a Director in the Department of +Contract Regularisation and Disbursement=2C I will +regularize all the necessary documents and present +your company as the bona-fide beneficiary of this fund +in as much as you respond within 48 hours for +respect of this important message=2E Your unreserved +cooperation in this business is just what we require +for a successful and hitch =96 free transaction=2E +Necessary measures to ensure a risk =96 free and fool +proof transaction and confidentiality has been taken=2E + + +Kindly signify your interest by replying via my +personal e =96mail address above=2E Upon receipt of your +positive reply we shall discuss on =281=29 Basic Program +for Operation =282=29 Financial Status as to ascertain +your capability=2E Upon completion of this transaction +I have decided to give you 30% of the total sum=2C 60% +of the fund which is our share will be used for +investment in your company or in any other company of +our choice=2E While10% has been mapped out to take care +of any minor expenses incurred=2E Take note that this +project will last for only 21 working days=2E + +I expect your response in time =28within 48 hours=29 as +time is of great essence in this transaction=2E + +God Bless and Kind Regards=2C + +Dr=2E Bello Ahmed + + +--===_SecAtt_000_1fheucnqggtggp +Content-Type: application/octet-stream; name="111111111111111111.txt" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="111111111111111111.txt" + + + diff --git a/Ch3/datasets/spam/spam/00023.b6d27c684f5fc803cfa1060adb2d0805 b/Ch3/datasets/spam/spam/00023.b6d27c684f5fc803cfa1060adb2d0805 new file mode 100644 index 000000000..2b64c5063 --- /dev/null +++ b/Ch3/datasets/spam/spam/00023.b6d27c684f5fc803cfa1060adb2d0805 @@ -0,0 +1,79 @@ +From health104580m43@mail.com Fri Aug 23 11:17:32 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 3980F4416E + for ; Fri, 23 Aug 2002 06:11:56 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:11:56 +0100 (IST) +Received: from mail.com ([200.178.101.130]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7MKaUZ23611 for ; + Thu, 22 Aug 2002 21:36:32 +0100 +Received: from [94.219.35.7] by da001d2020.loxi.pianstvu.net with local; + 23 Aug 0102 02:37:19 -0300 +Received: from 135.5.185.20 ([135.5.185.20]) by smtp-server.tampabayr.com + with QMQP; Thu, 22 Aug 0102 23:36:23 -0300 +Reply-To: +Message-Id: <000a33e70a8b$5144d5e1$0ae40bb3@ehypae> +From: +To: +Subject: Penile enlargement method - guaranteed ! +Date: Thu, 22 Aug 0102 12:07:35 +0800 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00B2_83B03D1E.C6530E24" + +------=_NextPart_000_00B2_83B03D1E.C6530E24 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +PGh0bWw+PGJvZHk+PGRpdiBpZD0ibWVzc2FnZUJvZHkiPjxkaXY+PGZvbnQg +ZmFjZT0iQXJpYWwiIHNpemU9IjIiPlRoaXMgbWVzc2FnZSBpcyBzZW50IHRv +IG91ciBzdWJzY3JpYmVycyBvbmx5LiBGdXJ0aGVyIGVtYWlscyB0byB5b3Ug +YnkgdGhlIHNlbmRlciB0aGlzIG9uZSB3aWxsIGJlIHN1c3BlbmRlZCBhdCBu +byBjb3N0IHRvIHlvdS4gU2NyZWVuaW5nIG9mIGFkZHJlc3NlcyBoYXMgYmVl +biBkb25lIHRvIHRoZSBiZXN0IG9mIG91ciBhYmlsaXR5LCB1bmZvcnR1bmF0 +ZWx5IGl0IGlzIGltcG9zc2libGUgdG8gYmUgMTAwJSBhY2N1cmF0ZSwgc28g +aWYgeW91IGRpZCBub3QgYXNrIGZvciB0aGlzLCBvciB3aXNoIHRvIGJlIGV4 +Y2x1ZGVkIG9mIHRoaXMgbGlzdCwgcGxlYXNlIGNsaWNrIDxhIGhyZWY9Im1h +aWx0bzpoZWFsdGgxMDVAbWFpbC5ydT9zdWJqZWN0PXJlbW92ZSIgdGFyZ2V0 +PSJuZXdfd2luIj5oZXJlPC9hPjwvZm9udD48L2Rpdj4gIDxwPjxiPjxmb250 +IGZhY2U9IkFyaWFsIj48Zm9udCBjb2xvcj0iI2ZmMDAwMCI+VEhJUyBJUyBG +T1IgQURVTFQgTUVOIE9OTFkgISBJRiBZT1UgQVJFIE5PVCBBTiBBRFVMVCwg +REVMRVRFIE5PVyAhDQo8cD4NCjxwIGFsaWduPSJjZW50ZXIiPjxpbWcgc3Jj +PSJodHRwOi8vYTIyMDAudHJpcG9kLmNvbS5jby9waG90by5qcGciIHdpZHRo +PSIzNTEiIGhlaWdodD0iMTc5Ij48L3A+DQo8L2ZvbnQ+PC9wPjxkaXY+V2Ug +YXJlIGEgc2VyaW91cyBjb21wYW55LCBvZmZlcmluZyBhIHByb2dyYW0gdGhh +dCB3aWxsIGVuaGFuY2UgeW91ciBzZXggbGlmZSwgYW5kIGVubGFyZ2UgeW91 +ciBwZW5pcyBpbiBhIHRvdGFsbHkgbmF0dXJhbCB3YXkuIDxwPldlIHJlYWxp +emUgbWFueSBtZW4gLWFuZCB0aGVpciBwYXJ0bmVycy0gYXJlIHVuaGFwcHkg +d2l0aCB0aGVpciBwZW5pcyBzaXplLiBUaGUgdHJ1dGggaXMgdGhhdCBzaXpl +IG1hdHRlcnM7IG5vdCBvbmx5IGl0IGFmZmVjdHMgbWFueSBtZW4ncyBwZXJm +b3JtYW5jZSwgYnV0IHRoZWlyIHNlbGYtZXN0ZWVtIGFzIHdlbGwuPC9wPjxw +PiZuYnNwOzwvZGl2PjxkaXY+UGVuaXMgZW5sYXJnZW1lbnQgSVMgUE9TU0lC +TEU7IGp1c3QgYXMgeW91IGNhbiBleGVyY2lzZSBhbG1vc3QgYW55IHBhcnQg +b2YgDQp5b3VyIGJvZHksIHlvdSBDQU4gZXhlcmNpc2UgeW91ciBwZW5pcy48 +L3A+DQo8L2ZvbnQ+PC9kaXY+PGZvbnQgY29sb3I9IiNmZjAwMDAiPjxkaXY+ +PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPSIjZmYwMDAwIiBzaXplPSIzIj5P +dXIgcHJvZ3JhbSBpcyB0b3RhbGx5IFBST1ZFTiBhbmQgMTAwJSBHVUFSQU5U +RUVEICE8L3A+DQo8L2Rpdj48ZGl2Pk91ciBjb21wYW55IGhhcyB0aGUgdGVj +aG5pcXVlcyEgVG90YWxseSBOQVRVUkFMIHRlY2huaXF1ZXM7IG5vIGdhZGdl +dHMsIG5vIHB1bXBzLCBubyBzdXJnZXJ5ICE8L2Rpdj48cD5JZiB5b3Ugd2Fu +dCBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY2xpY2sgPGEgaHJlZj0iaHR0 +cDovL2xhcmdlMS50cmlwb2QuY29tLmFyIj5oZXJlPC9hPiwgb3Igc2VuZCB1 +cyBhbiBlbWFpbCA8YSBocmVmPSJtYWlsdG86aW5mbzMwMTdAZXhjaXRlLmNv +bSAgICAgICAgP3N1YmplY3Q9bW9yZWluZm8iPmhlcmU8L2E+PC9wPg0KPC9k +aXY+PGRpdj5UaGlzIElTIE5PVCBVTlNPTElDSVRFRDsgeW91IGFwcGVhciBp +biBhbiBzdWJzY3JpcHRpb24gbGlzdCwgaWYgaW4gZXJyb3IsIHBsZWFzZSBs +ZXQgdXMga25vdy4gUGxlYXNlIGxldCB0aG9zZSB3aG8gc3VmZmVyIGZyb20g +ZXJlY3RpbGUgZHlzZnVuY3Rpb24sIHNtYWxsIHBlbmlzIHNpemUsIGFuZCBv +dGhlciBtYWxlIGFpbG1lbnRzIHJlYWQgdGhpcyBtZXNzYWdlITwvZGl2Pjxw +PkRJU1BPTklCTEUgVEFNQklFTiBFTiBFU1BBTk9MPGZvbnQgY29sb3I9IiNm +ZmZmZmYiPjAyMjBqbkhwOS00NzhSTFJkNzczOFNZbVQyLTEzNXd6Z3IyNjc3 +UlFKbTQtMTU3cWFFRjk3NzRER2FsNTU= + diff --git a/Ch3/datasets/spam/spam/00024.6b5437b14d403176c3f046c871b5b52f b/Ch3/datasets/spam/spam/00024.6b5437b14d403176c3f046c871b5b52f new file mode 100644 index 000000000..fb1c95e0b --- /dev/null +++ b/Ch3/datasets/spam/spam/00024.6b5437b14d403176c3f046c871b5b52f @@ -0,0 +1,240 @@ +From iq@insurancemail.net Fri Aug 23 11:17:41 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 24BEC47CC8 + for ; Fri, 23 Aug 2002 06:12:01 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:12:01 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g7MMxgZ28549 for ; Thu, 22 Aug 2002 23:59:42 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Thu, 22 Aug 2002 19:00:32 -0400 +Subject: Save 84% on CE Credits +To: +Date: Thu, 22 Aug 2002 19:00:32 -0400 +From: "IQ Campus" +Message-Id: <34327d01c24a2f$b797ea60$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJKG5/JOW5b2EiwQ7iLSdXlxqnJbA== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 22 Aug 2002 23:00:32.0593 (UTC) FILETIME=[B7B6E410:01C24A2F] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_3257B2_01C249FA.18BC9920" + +This is a multi-part message in MIME format. + +------=_NextPart_000_3257B2_01C249FA.18BC9920 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + Save 84% on C.E. Credits & Pre-Licensing Courses + + State CE, CLU, CFP, CPA and Securities + Unlimited courses & credits for 24 months + Regular Price:$1298, IQ Price:$199 + +* No Hidden Fees +* Over 16,000 Credits +* Over 300 Courses + +* 90% Internet Based +* High Quality Courses +* Unlimited Access + +Complete this form for a FREE Guest Demo! +Name: +E-mail: +Phone: +City: State: + + + +We don't want anybody to receive our mailing who does not wish to +receive them. To be removed from this mailing list, DO NOT REPLY to this +message. Instead, go here: http://www.InsuranceIQ.com/optout +Legal Notice + + +------=_NextPart_000_3257B2_01C249FA.18BC9920 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Save 84% on CE Credits + + + + +

    + + + + +
    =20 + + =20 + + +
    + 3D'Save
    +
    + 3D'State
    + 3D'Unlimited
    + 3D'Regular +
    + + =20 + + +
    =20 + + =20 + + + +
    =20 + +
      +
    • No Hidden Fees
    • +
    • Over 16,000 Credits
    • +
    • Over 300 Courses
    • +
    +
    +
    =20 + +
      +
    • 90% Internet Based
    • +
    • High Quality Courses
    • +
    • Unlimited Access
    • +
    +
    +
    +
    + + =20 + + +
    + + =20 + + +
    =20 + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + + + + =20 + + + +
    Complete this form for a FREE Guest = +Demo!
    Name:
    E-mail:
    Phone:
    City:State:
     =20 + + + + +
    +
    +
    + +
    + We=20 + don't want anybody to receive our mailing who does not wish to = +receive=20 + them. To be removed from this mailing list, DO NOT REPLY to = +this message.=20 + Instead, go here: http://www.InsuranceIQ.com/opt= +out
    + Legal = +Notice
    +
    +

    + + + +------=_NextPart_000_3257B2_01C249FA.18BC9920-- + diff --git a/Ch3/datasets/spam/spam/00025.619ab8051359048795e3cd09e82ad1a0 b/Ch3/datasets/spam/spam/00025.619ab8051359048795e3cd09e82ad1a0 new file mode 100644 index 000000000..c7fc1f275 --- /dev/null +++ b/Ch3/datasets/spam/spam/00025.619ab8051359048795e3cd09e82ad1a0 @@ -0,0 +1,42 @@ +From george300@Flashmail.com Fri Aug 23 11:17:45 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id A71DA47C92 + for ; Fri, 23 Aug 2002 06:12:04 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:12:04 +0100 (IST) +Received: from mail01.corp.pronav.com ([64.221.129.114]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7N46NZ09758 for + ; Fri, 23 Aug 2002 05:06:23 +0100 +Received: from mail.Flashmail.com ([202.9.153.244]) by + mail01.corp.pronav.com with Microsoft SMTPSVC(5.0.2195.5329); + Thu, 22 Aug 2002 21:04:44 -0700 +Message-Id: <00004a851147$0000059b$000069d0@mail.Flashmail.com> +To: +From: george300@Flashmail.com +Subject: The DEBT-$AVER Program SKYXTGM +Date: Fri, 23 Aug 2002 09:35:58 -0700 +MIME-Version: 1.0 +X-Originalarrivaltime: 23 Aug 2002 04:04:45.0548 (UTC) FILETIME=[3752CAC0:01C24A5A] +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +
    + + +

    +Copyright 2002 - All rights reserved

    If you would no longer like us= + +to contact you or feel that you have
    received this email in error, +please click here= + +to unsubscribe.
    + + + + diff --git a/Ch3/datasets/spam/spam/00026.da18dbed27ae933172f7a70f860c6ad0 b/Ch3/datasets/spam/spam/00026.da18dbed27ae933172f7a70f860c6ad0 new file mode 100644 index 000000000..2b5c4a247 --- /dev/null +++ b/Ch3/datasets/spam/spam/00026.da18dbed27ae933172f7a70f860c6ad0 @@ -0,0 +1,74 @@ +From seko_mam@spinfinder.com Fri Aug 23 11:17:49 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 788B647CC9 + for ; Fri, 23 Aug 2002 06:12:05 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:12:05 +0100 (IST) +Received: from coolre42375.com ([64.86.155.179]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7N96hZ17715 for ; + Fri, 23 Aug 2002 10:06:45 +0100 +Message-Id: <200208230906.g7N96hZ17715@dogma.slashnull.org> +From: "MRS. M SESE SEKO" +Reply-To: seko_mam@spinfinder.com +To: zzzz@spamassassin.taint.org +Date: Fri, 23 Aug 2002 10:08:40 -0700 +Subject: A CRY FOR HELP +X-Mailer: Microsoft Outlook Express 5.00.2919.6900 DM +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7N96hZ17715 +Content-Transfer-Encoding: 8bit + +DEAR FRIEND,I AM MRS. SESE-SEKO WIDOW OF LATE PRESIDENT MOBUTU +SESE-SEKO OF ZAIRE? NOW KNOWN AS DEMOCRATIC REPUBLIC +OF CONGO (DRC). I AM MOVED TO WRITE YOU THIS LETTER, +THIS WAS IN CONFIDENCE CONSIDERING MY PRESENTCIRCUMSTANCE AND SITUATION. +I ESCAPED ALONG WITH MY HUSBAND AND TWO OF OUR SONS +GEORGE KONGOLO AND BASHER OUT OF DEMOCRATIC REPUBLIC OF +CONGO (DRC) TO ABIDJAN, COTE D'IVOIRE WHERE MY FAMILY +AND I SETTLED, WHILE WE LATER MOVED TO SETTLED IN +MORROCO WHERE MY HUSBAND LATER DIED OF CANCER +DISEASE. HOWEVER DUE TO THIS SITUATION WE DECIDED TO +CHANGED MOST OF MY HUSBAND'S BILLIONS OF DOLLARS +DEPOSITED IN SWISS BANK AND OTHER COUNTRIES INTO OTHER +FORMS OF MONEY CODED FOR SAFE PURPOSE BECAUSE THE NEW +HEAD OF STATE OF (DR) MR LAURENT KABILA HAS MADE +ARRANGEMENT WITH THE SWISS GOVERNMENT AND OTHER +EUROPEAN COUNTRIES TO FREEZE ALL MY LATE HUSBAND'S +TREASURES DEPOSITED IN SOME EUROPEAN COUNTRIES. HENCE +MY CHILDREN AND I DECIDED LAYING LOW IN AFRICA TO +STUDY THE SITUATION TILL WHEN THINGS GETS BETTER, +LIKE NOW THAT PRESIDENT KABILA IS DEAD AND THE SON +TAKING OVER (JOSEPH KABILA). ONE OF MY LATE HUSBAND'S +CHATEAUX IN SOUTHERN FRANCE WAS CONFISCATED BY THE +FRENCH GOVERNMENT, AND AS SUCH I HAD TO CHANGE MY +IDENTITY SO THAT MY INVESTMENT WILL NOT BE TRACED AND +CONFISCATED. I HAVE DEPOSITED THE SUM EIGHTEEN MILLION +UNITED STATE DOLLARS(US$18,000,000,00.) WITH A +SECURITY COMPANY , FOR SAFEKEEPING. THE FUNDS ARE +SECURITY CODED TO PREVENT THEM FROM +KNOWING THE CONTENT. WHAT I WANT YOU TO DO IS TO +INDICATE YOUR INTEREST THAT YOU WILL ASSIST US BY RECEIVING THE MONEY ON OUR +BEHALF.ACKNOWLEDGE THIS MESSAGE, SO THAT I CAN INTRODUCE YOU TO MY SON +(KONGOLO) WHO HAS THE OUT MODALITIES FOR THE CLAIM OF THE SAID FUNDS. I +WANT YOU TO ASSIST IN INVESTING THIS MONEY, BUT I WILL NOT WANT MY IDENTITY +REVEALED. I WILL ALSO WANT TO BUY PROPERTIES AND STOCK IN MULTI-NATIONAL +COMPANIES AND TO ENGAGE IN OTHER SAFE AND +NON-SPECULATIVE INVESTMENTS. MAY I AT THIS POINT +EMPHASISE THE HIGH LEVEL OF CONFIDENTIALITY, WHICH +THIS BUSINESS DEMANDS, AND HOPE YOU WILL NOT BETRAY +THE TRUST AND CONFIDENCE, WHICH I REPOSE IN YOU. IN +CONCLUSION, IF YOU WANT TO ASSIST US , MY SON SHALL +PUT YOU IN THE PICTURE OF THE BUSINESS, TELL YOU +WHERE THE FUNDS ARE CURRENTLY BEING MAINTAINED AND +ALSO DISCUSS OTHER MODALITIES INCLUDING REMUNERATIONFOR YOUR SERVICES. +FOR THIS REASON KINDLY FURNISH US YOUR CONTACT +INFORMATION, THAT IS YOUR PERSONAL TELEPHONE AND FAX +NUMBER FOR CONFIDENTIAL PURPOSE.BEST REGARDS,MRS M. SESE SEKO + + + diff --git a/Ch3/datasets/spam/spam/00027.d1d0f97e096fe08fc80a4939355759e7 b/Ch3/datasets/spam/spam/00027.d1d0f97e096fe08fc80a4939355759e7 new file mode 100644 index 000000000..bd5ff57c8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00027.d1d0f97e096fe08fc80a4939355759e7 @@ -0,0 +1,62 @@ +From paco@s3.serveimage.com Fri Aug 23 11:23:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 2E63643F99 + for ; Fri, 23 Aug 2002 06:23:31 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:23:31 +0100 (IST) +Received: from email.qves.com ([67.104.83.251]) + by webnote.net (8.9.3/8.9.3) with ESMTP id LAA09532 + for ; Fri, 23 Aug 2002 11:13:24 +0100 +Received: from qvp0085 ([169.254.6.16]) by email.qves.com with Microsoft SMTPSVC(5.0.2195.2966); + Fri, 23 Aug 2002 04:12:39 -0600 +From: "RankMyPix.com" +To: +Subject: Join the Web's Fastest Growing Singles Community 14.51 +Date: Fri, 23 Aug 2002 04:12:39 -0600 +Message-ID: <997301c24a8d$9c59f320$1006fea9@freeyankeedom.com> +MIME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJKjZxSuJrgzM4lSkOUcubxn4BZGQ== +Content-Class: urn:content-classes:message +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2462.0000 +X-OriginalArrivalTime: 23 Aug 2002 10:12:39.0423 (UTC) FILETIME=[9C60D0F0:01C24A8D] + +1) Fight The Risk of Cancer! +http://www.adclick.ws/p.cfm?o=315&s=pk007 + +2) Slim Down - Guaranteed to lose 10-12 lbs in 30 days +http://www.adclick.ws/p.cfm?o=249&s=pk007 + +3) Get the Child Support You Deserve - Free Legal Advice +http://www.adclick.ws/p.cfm?o=245&s=pk002 + +4) Join the Web's Fastest Growing Singles Community +http://www.adclick.ws/p.cfm?o=259&s=pk007 + +5) Start Your Private Photo Album Online! +http://www.adclick.ws/p.cfm?o=283&s=pk007 + +Have a Wonderful Day, +Offer Manager +PrizeMama + + + + + + + + + + + + +If you wish to leave this list please use the link below. +http://www.qves.com/trim/?zzzz@spamassassin.taint.org%7C17%7C308417 + diff --git a/Ch3/datasets/spam/spam/00028.ace98eff213f4e6314b5571aece625e1 b/Ch3/datasets/spam/spam/00028.ace98eff213f4e6314b5571aece625e1 new file mode 100644 index 000000000..deb11336a --- /dev/null +++ b/Ch3/datasets/spam/spam/00028.ace98eff213f4e6314b5571aece625e1 @@ -0,0 +1,164 @@ +From oexg602@cameltoelovers.com Fri Aug 23 11:44:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id CF18543F99 + for ; Fri, 23 Aug 2002 06:44:25 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:44:25 +0100 (IST) +Received: from cameltoelovers.com (1Cust91.tnt15.det3.da.uu.net [67.217.14.91]) + by webnote.net (8.9.3/8.9.3) with SMTP id LAA09654 + for ; Fri, 23 Aug 2002 11:43:38 +0100 +From: oexg602@cameltoelovers.com +Message-Id: <200208231043.LAA09654@webnote.net> +Subject: Mothers you want to fuck +To: zzzz@spamassassin.taint.org +Date: Fri, 23 Aug 2002 07:26 -0400 +Mime-Version: 1.0 +Content-Type: text/html + +MILFhunter + + + + + +

    +
    +
    +
    +
    +
    + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + MILF HUNTER
    +
    Do you know where your mom is?
    +
    + MORE SAMPLE PICS      MORE SAMPLE MOVIES      LIST OF MILFs

    +
    +
    +
    +

     

    +

    CLICK + HERE to enlarge your PENIS 3-4 inches NATURALLY!!

    +

     

    +

     

    +
    Click + Here to be removed
    +


    +
    +
    +
    +
    +
    +
    +

    +
    +
    + + diff --git a/Ch3/datasets/spam/spam/00029.de865ad8d5ad0df985ae2f72388befba b/Ch3/datasets/spam/spam/00029.de865ad8d5ad0df985ae2f72388befba new file mode 100644 index 000000000..cdf604174 --- /dev/null +++ b/Ch3/datasets/spam/spam/00029.de865ad8d5ad0df985ae2f72388befba @@ -0,0 +1,100 @@ +From we9boig3l9689@yahoo.com Fri Aug 23 11:55:59 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 216FB43F99 + for ; Fri, 23 Aug 2002 06:55:59 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:55:59 +0100 (IST) +Received: from shreemail.shreecementltd.com ([210.212.101.139]) + by webnote.net (8.9.3/8.9.3) with ESMTP id LAA09775 + for ; Fri, 23 Aug 2002 11:54:47 +0100 +Received: from mx1.mail.yahoo.com ([172.191.119.34]) + by shreemail.shreecementltd.com (Lotus Domino Release 5.0.4) + with ESMTP id 2001010215584608:1459 ; + Tue, 2 Jan 2001 15:58:46 +0530 +Message-ID: <00003ab04142$00005bd5$00001008@mx1.mail.yahoo.com> +To: +Cc: , , + , , , + , +From: "Ashley" +Subject: Double Your Life Insurance at NO EXTRA COST!... TCTOOM +Date: Fri, 23 Aug 2002 03:30:23 -1900 +MIME-Version: 1.0 +Reply-To: we9boig3l9689@yahoo.com +X-MIMETrack: Itemize by SMTP Server on shreemail/shreecementltd(Release 5.0.4 |June 8, 2000) at + 01/02/2001 03:58:49 PM, + Serialize by Router on shreemail/shreecementltd(Release 5.0.4 |June 8, 2000) at + 01/02/2001 04:24:41 PM, + Serialize complete at 01/02/2001 04:24:41 PM +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + +
    +Save up to + +75% on your Term Life +Insurance! +
    + +Compare rates from top insurance companies around +the country +

    + +In our life and times, it's important to plan for +your family's future, while +
    being comfortable financially. Choose the right +Life Insurance policy today.
    +

    + +Click the link below to compare the lowest rates +and save up to 75% +

    + +COMPARE YOUR COVERAGE +

    + +You'll be able to compare rates and get a free +application in less than a minute! +

    + +*Get your FREE instant quotes...
    +*Compare the lowest prices, then...
    +*Select a company and Apply Online.
    +

    + +GET A FREE QUOTE NOW! +
    + +You can't predict the future, but you can always +prepare for it. + +



    +



    +to be +excluded from future contacts

    + + +tuckers + + + + + diff --git a/Ch3/datasets/spam/spam/00030.0c9cdd9d4025bd55dac02719ec8d29dc b/Ch3/datasets/spam/spam/00030.0c9cdd9d4025bd55dac02719ec8d29dc new file mode 100644 index 000000000..bb7a0c275 --- /dev/null +++ b/Ch3/datasets/spam/spam/00030.0c9cdd9d4025bd55dac02719ec8d29dc @@ -0,0 +1,169 @@ +From batone3@hotmail.com Fri Aug 23 12:20:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 2B4F244155 + for ; Fri, 23 Aug 2002 07:20:40 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 12:20:40 +0100 (IST) +Received: from sbsmail.saks.com.pa ([216.201.75.12]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7NBL0Z21920 for + ; Fri, 23 Aug 2002 12:21:07 +0100 +Received: from 100100100.com (200-161-145-252.dsl.telesp.net.br + [200.161.145.252]) by sbsmail.saks.com.pa with SMTP (Microsoft Exchange + Internet Mail Service Version 5.5.2653.13) id R3BBVS74; Fri, + 23 Aug 2002 06:14:34 -0500 +Message-Id: <00002f90499a$00004a85$000031f0@139614031396.com> +To: , , , + , , +Cc: , , + , , , + +From: batone3@hotmail.com +Subject: Re: PROTECT YOUR COMPUTER AGAINST HARMFUL VIRUSES! 21198 +Date: Fri, 23 Aug 2002 07:14:49 -1600 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Norton AD + + + + + + + + +
      + + + + +
    ATTENTION: + This is a MUST for ALL Computer Users!!!
    +

     *NEW + - Special Package Deal!*

    + + + + +
    Nor= +ton + SystemWorks 2002 Software Suite
    + -Professional Edition-
    + + + + +
    Includes + Six - Yes 6! = +- Feature-Packed Utilities
    ALL + for
    = +1 + Special LOW + Price!
    + + + + +
    This Software Will:
    - Protect your + computer from unwanted and hazardous viruses
    - Help= + secure your + private & valuable information
    - Allow you to transfer = +files + and send e-mails safely
    - Backup your ALL your data= + quick and + easily
    - Improve your PC's performance w/superior + integral diagnostics!
      + + + + +
    +

    6 + Feature-Packed Utilities
    + 1 + Great + Price
    +
    + A $300+= + Combined Retail Value + YOURS for Only $29.99!
    +
    <Includes + FREE Shipping!>

    +

    Don't fall prey to destructive viruses + or hackers!
    Protect  your computer and your valuable informat= +ion + and

    + + + + +
    + -> + CLICK HERE to Order Yours NOW! <-
    +

    + Click + here for more information

    +

            +

    Your + email address was obtained from an opt-in list. Opt-in MRSA List
    +  Purchase Code # 312-1-010.  If you wish to be unsubs= +cribed + from this list, please Click + here and press send to be removed. If you have previously unsubs= +cribed + and are still receiving this message, you may email our Spam + Abuse Control Center. We do not condone spam in any shape or for= +m. + Thank You kindly for your cooperation.

    + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00031.a78bb452b3a7376202b5e62a81530449 b/Ch3/datasets/spam/spam/00031.a78bb452b3a7376202b5e62a81530449 new file mode 100644 index 000000000..d5bd54d25 --- /dev/null +++ b/Ch3/datasets/spam/spam/00031.a78bb452b3a7376202b5e62a81530449 @@ -0,0 +1,171 @@ +From ilug-admin@linux.ie Fri Aug 23 11:08:19 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id B85BF47C67 + for ; Fri, 23 Aug 2002 06:06:41 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:06:41 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7N9QOZ18236 for + ; Fri, 23 Aug 2002 10:26:24 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id KAA18368; Fri, 23 Aug 2002 10:14:58 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from relay.dub-t3-1.nwcgroup.com + (postfix@relay.dub-t3-1.nwcgroup.com [195.129.80.16]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id KAA18332 for ; Fri, + 23 Aug 2002 10:14:45 +0100 +Received: from totalise.co.uk (m114-mp1.cvx1-c.bri.dial.ntli.net + [62.255.12.114]) by relay.dub-t3-1.nwcgroup.com (Postfix) with SMTP id + 0BC3770047 for ; Fri, 23 Aug 2002 10:14:42 +0100 (IST) +From: "Robert Seviour" +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="ISO-8859-1" +Date: Fri, 23 Aug 2002 10:24:21 +0100 +Content-Transfer-Encoding: 8bit +Message-Id: <20020823091443.0BC3770047@relay.dub-t3-1.nwcgroup.com> +Subject: [ILUG] (no subject) +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Suppliers of Computers, Printers, etc. & Consumables +Central Data Supplies +24, Middleton Road, Banbury, Oxon, OX16 4QJ. Tel: 01295 271666 Fax 01295 +256876 +Est 1985 +Good Afternoon, + +Please find below the pricing and specification of the laptops which +currently have available in stock for immediate despatch. + +IBM ThinkPad 760EL Laptop Computer (Stock Ref 683) +Intel Pentium 1 133MHz Processor +8MB RAM +1GB Hard Drive +12.1' TFT Display +Sound & Speakers +No Modem +No CD-ROM Drive +Internal 3.5' Floppy Drive +3 Months Warranty @ £119 + +IBM ThinkPad 765L Laptop Computer (Stock Ref 6076) +Intel Pentium 1 166MHz Processor +32MB RAM +5GB Hard Drive +13.3' TFT Display +Sound & Speakers +No Modem +No CD-ROM Drive +Internal 3.5' Floppy Drive +3 Months Warranty @ £149 + +IBM ThinkPad 770 Laptop Computer (Stock Ref 4225) +Intel Pentium 1 233MHz Processor +32MB RAM +5GB Hard Drive +14.1' TFT Display +USB, IRDA, Sound & Speakers +Internal 56K Modem +No CD-ROM Drive +Internal 3.5' Floppy Drive +3 Months Warranty @ £249 + +IBM ThinkPad 380 Laptop Computer (Stock Ref 7868) +Intel Pentium 11 233MHz Processor +32MB RAM +4GB Hard Drive +12.1' TFT Display +USB, IRDA, Sound & Speakers +No Modem +Internal CD-ROM Drive +Internal 3.5' Floppy Drive +3 Months Warranty @ £289 + +IBM ThinkPad 770X Laptop Computer (Stock Ref 8051) +Intel Pentium 11 300MHz Processor +64MB RAM +8GB Hard Drive +14.1' TFT Display +USB, IRDA, Sound & Speakers +Internal 56K Modem +External CD-ROM Drive +Internal 3.5' Floppy Drive +3 Months Warranty @ £349 + +IBM ThinkPad 770X Laptop Computer (Stock Ref 8220) +Intel Pentium 11 233MHz Processor +64MB RAM +6.4GB Hard Drive +14.1' TFT Display +USB, IRDA, Sound & Speakers +Internal 56K Modem +Internal CD-ROM Drive +Internal 3.5' Floppy Drive +3 Months Warranty @ £389 + +Toshiba 7020CT Laptop Computer (Stock Ref 3111) +Intel Pentium 11 266MHz Processor +128MB RAM +6GB Hard Drive +13.3' TFT Display +USB, IRDA, Sound & Speakers +Internal 56K Modem +Docking Station Including 3.5' Floppy Drive And CD-ROM Drive +3 Months Warranty @ £389 + +IBM T20 Laptop Computer (Stock Ref 6062) +Intel Pentium 111 550MHz Processor +256MB RAM +12GB Hard Drive +14.1' XGA TFT Display +USB, IRDA, Sound & Speakers +Internal 56K Modem +No CD-ROM Drive +Internal 3.5' Floppy Drive +3 Months Warranty @ £549 + +Dell C500 Laptop Computer (Stock Ref 7052) +Intel Celeron 700MHz Processor +128MB RAM +6GB Hard Drive +12.1' XGA TFT Display +USB, IRDA, Sound & Speakers +Internal 56K Modem +Internal CD-ROM Drive +External 3.5' Floppy Drive +3 Months Warranty @ £609 + +Other specifications are available, so if the spec you require is not +listed please do not hesitate to call our sales team on 01295 271666 for +other models. + +If you do not wish to recieve special offer emails of this kind please +reply with remove in the subject and you will be taken off our mailing list. + +All Prices Are Ex Vat. + +For And On Behalf Of +CENTRAL DATA SUPPLIES + + +Peter Cutress BEng (Hons) DIS AICHEME +Sales Manager + + +E&OE. + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00032.7b07a09236ce9feb12d80197144d3206 b/Ch3/datasets/spam/spam/00032.7b07a09236ce9feb12d80197144d3206 new file mode 100644 index 000000000..86cfafdb4 --- /dev/null +++ b/Ch3/datasets/spam/spam/00032.7b07a09236ce9feb12d80197144d3206 @@ -0,0 +1,84 @@ +From ilug-admin@linux.ie Fri Aug 23 11:34:02 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id AA01B43F99 + for ; Fri, 23 Aug 2002 06:34:02 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 11:34:02 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7NAUdZ20252 for + ; Fri, 23 Aug 2002 11:30:39 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id LAA21467; Fri, 23 Aug 2002 11:29:43 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from relay.dub-t3-1.nwcgroup.com + (postfix@relay.dub-t3-1.nwcgroup.com [195.129.80.16]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id LAA21432 for ; Fri, + 23 Aug 2002 11:29:35 +0100 +Received: from email.qves.com (unknown [209.63.151.251]) by + relay.dub-t3-1.nwcgroup.com (Postfix) with ESMTP id B39BC70053 for + ; Fri, 23 Aug 2002 11:11:32 +0100 (IST) +Received: from qvp0090 ([169.254.6.21]) by email.qves.com with Microsoft + SMTPSVC(5.0.2195.2966); Fri, 23 Aug 2002 04:10:24 -0600 +From: "RankMyPix.com" +To: +Date: Fri, 23 Aug 2002 04:10:14 -0600 +Message-Id: <2bbe01c24a8d$462eedc0$1506fea9@freeyankeedom.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJKjUYutqtDNiZHR8eiGqDeY7qIUw== +Content-Class: urn:content-classes:message +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2462.0000 +X-Originalarrivaltime: 23 Aug 2002 10:10:26.0917 (UTC) FILETIME=[4D660150:01C24A8D] +Subject: [ILUG] Join the Web's Fastest Growing Singles Community 11.67 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +1) Fight The Risk of Cancer! +http://www.adclick.ws/p.cfm?o=315&s=pk007 + +2) Slim Down - Guaranteed to lose 10-12 lbs in 30 days +http://www.adclick.ws/p.cfm?o=249&s=pk007 + +3) Get the Child Support You Deserve - Free Legal Advice +http://www.adclick.ws/p.cfm?o=245&s=pk002 + +4) Join the Web's Fastest Growing Singles Community +http://www.adclick.ws/p.cfm?o=259&s=pk007 + +5) Start Your Private Photo Album Online! +http://www.adclick.ws/p.cfm?o=283&s=pk007 + +Have a Wonderful Day, +Offer Manager +PrizeMama + + + + + + + + + + + + +If you wish to leave this list please use the link below. +http://www.qves.com/trim/?ilug@linux.ie%7C17%7C114258 + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00033.9babb58d9298daa2963d4f514193d7d6 b/Ch3/datasets/spam/spam/00033.9babb58d9298daa2963d4f514193d7d6 new file mode 100644 index 000000000..8aee9b840 --- /dev/null +++ b/Ch3/datasets/spam/spam/00033.9babb58d9298daa2963d4f514193d7d6 @@ -0,0 +1,68 @@ +From stats@websitetracker.com Fri Aug 23 15:00:02 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id AC16A43F99 + for ; Fri, 23 Aug 2002 10:00:01 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 15:00:01 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id OAA10618 + for ; Fri, 23 Aug 2002 14:53:40 +0100 +From: stats@websitetracker.com +Received: from websitetracker.com (ce2.newttidc.com [202.130.96.85]) + by smtp.easydns.com (Postfix) with SMTP id 4B2292CA4D + for ; Fri, 23 Aug 2002 09:53:34 -0400 (EDT) +Received: from rly-xw05.oxyeli.com ([169.93.50.3]) + by n9.groups.huyahoo.com with SMTP; 23 Aug 2002 12:53:32 -0300 +Received: from unknown (32.22.11.228) + by n7.groups.huyahoo.com with smtp; 23 Aug 2002 09:39:40 +0400 +Reply-To: +Message-ID: <007d88d01c0c$7181e4c2$4cb02ad8@tjndcf> +To: Serious@no.hostname.supplied, Partners@no.hostname.supplied +Subject: Give Away FREE CD's - Earn $5K in 30 Days! +Date: Fri, 23 Aug 2002 04:30:48 +0900 +MiME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal +Content-Transfer-Encoding: 8bit + +This is the bottom line. If you can GIVE AWAY CD's for FREE to people (like 80-100 in one month) and then let ME talk to them FOR you - if you can GIVE AWAY free product samples - then YOU can earn $5,000 in the next 30 - 45 days. + +Think I'm kidding? We earned PRECISELY $26,087.58 in our first 94 days doing JUST that - and we scanned our checks online for you to see them with your own eyes! We've TWEAKED things a little because WE DON'T WANT you to talk to ANYONE. WE WANT to talk to people FOR YOU. + +if you are .... +VERY BUSY or, +Aren't GOOD AT TALKING TO PEOPLE or, +DON'T WANT to talk to people.... + +Then let US work FULL TIME for you. We've helped others.... + Julie P. earned $750 in one week with us + Jeff A. earned $6500 in 5 weeks with us + +And we NOW have an EXACT business plan for you and can tell you EXACTLY what to expect with where you're starting. No guesswork - we've done it. + +And if you DO want to seriously evaluate this, we would be HAPPY to even fly you to Los Angeles at OUR expense to get a closer look! NO KIDDING! + +To get your FREE CD, please send the following information: + +Name +Postal Mailing Address +Phone Number with Area Code + +mailto:cashflows99@excite.com?subject=FREE_CD + +To be removed from future mailings, please +mailto:cashflows99@excite.com?subject=REMOVE + +******************************** +This email ad is being sent in full compliance with U.S. Senate Bill 1618, Title #3, Section 301, which states "A statement that further transmissions of unsolicited commercial electronic mail to the recipient by the person who initiates transmission of the message may be stopped at no cost to the recipient by sending a reply to the originating electronic mail address with the word 'remove' in the subject line." + + + + diff --git a/Ch3/datasets/spam/spam/00034.8e582263070076dfe6000411d9b13ce6 b/Ch3/datasets/spam/spam/00034.8e582263070076dfe6000411d9b13ce6 new file mode 100644 index 000000000..26ba9dd4f --- /dev/null +++ b/Ch3/datasets/spam/spam/00034.8e582263070076dfe6000411d9b13ce6 @@ -0,0 +1,55 @@ +Received: from b.smtp-out.sonic.net (b.smtp-out.sonic.net [208.201.224.39]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g6J7ROJ02519 + for ; Fri, 19 Jul 2002 08:27:24 +0100 +Received: (qmail 29481 invoked from network); 19 Jul 2002 07:27:23 -0000 +Received: from turbo.sonic.net (208.201.224.26) + by b.smtp-out.sonic.net with SMTP; 19 Jul 2002 07:27:23 -0000 +Received: from mail.yellowlizard.com (mail.yellowlizard.co.za [192.96.85.131]) + by turbo.sonic.net (8.11.6/8.8.5) with ESMTP id g6J7RDh28390; + Fri, 19 Jul 2002 00:27:15 -0700 +X-envelope-info: +Received: from mail1.sevensys.de [127.0.0.1] by mail.yellowlizard.com with ESMTP + (SMTPD32-6.06 EVAL) id A03C7B90122; Sat, 29 Jun 2002 13:55:40 +0200 +From: "Adrienne" +To: "neohcyvhw@aol.com" +Subject: Shape up for summer now +Content-Type: text/plain; charset="us-ascii";format=flowed +Content-Transfer-Encoding: 7bit +Message-Id: <200206291357927.SM00174@mail1.sevensys.de> +Date: Fri, 19 Jul 2002 09:28:07 +0200 + +As seen on NBC, CBS, CNN, and even Oprah! The health +discovery that actually reverses aging while burning fat, +without dieting or exercise! This proven discovery has even +been reported on by the New England Journal of Medicine. +Forget aging and dieting forever! And it's Guaranteed! + +Click here: +http://web.kuhleersparnis.ch/hgh/index.html + +Would you like to lose weight while you sleep! +No dieting! +No hunger pains! +No Cravings! +No strenuous exercise! +Change your life forever! + +100% GUARANTEED! + +1.Body Fat Loss 82% improvement. +2.Wrinkle Reduction 61% improvement. +3.Energy Level 84% improvement. +4.Muscle Strength 88% improvement. +5.Sexual Potency 75% improvement. +6.Emotional Stability 67% improvement. +7.Memory 62% improvement. + +*********************************************************** + +You are receiving this email as a subscriber +to the Opt-In America Mailing List. +To unsubscribe from future offers, +just click here: +mailto:affiliateoptout@btamail.net.cn?Subject=off + + diff --git a/Ch3/datasets/spam/spam/00035.7ce3307b56dd90453027a6630179282e b/Ch3/datasets/spam/spam/00035.7ce3307b56dd90453027a6630179282e new file mode 100644 index 000000000..1e3559e96 --- /dev/null +++ b/Ch3/datasets/spam/spam/00035.7ce3307b56dd90453027a6630179282e @@ -0,0 +1,183 @@ +Received: from qrq.cc.ntu.edu.tw (giga.tw.freebsd.org [203.133.92.249]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g6J7RhJ02577 + for ; Fri, 19 Jul 2002 08:27:45 +0100 +Received: from ccsun37.cc.ntu.edu.tw (ccsun37.cc.ntu.edu.tw [140.112.8.37]) + by qrq.cc.ntu.edu.tw (8.12.5/8.12.5) with ESMTP id g6J7Renr016990 + for ; Fri, 19 Jul 2002 15:27:40 +0800 (CST) + (envelope-from master@ibd.pe.kr) +Received: from localhost (localhost [127.0.0.1]) + by ccsun37.cc.ntu.edu.tw (Postfix) with ESMTP id 199BDDE082 + for ; Fri, 19 Jul 2002 15:23:07 +0800 (CST) +Received: from bigfoot.com (unknown [64.15.239.140]) + by ccsun37.cc.ntu.edu.tw (Postfix) with SMTP id 7A551DE087 + for ; Fri, 19 Jul 2002 15:23:00 +0800 (CST) +Received: from localhost ([61.104.101.163]) + by BFLITEMAIL4A.bigfoot.com (LiteMail v3.02(BFLITEMAIL4A)) with SMTP id 18Jul2002_BFLITEMAIL4A_36057_169370901; + Thu, 18 Jul 2002 14:46:11 -0400 EST +Reply-To: master@ibd.pe.kr +From: ±³À°ÆÀ +To: andyliao@bigfoot.com +Subject: [±¤°í] ¿äÁò ¶ß´Â Á÷Á¾ Best 5 & ÀÚ°ÝÁõ µû±â ¿­Ç³ +Mime-Version: 1.0 +Content-Type: text/html; charset="ks_c_5601-1987" +Date: Fri, 19 Jul 2002 03:46:15 +0900 +Message-Id: <20020719072300.7A551DE087@ccsun37.cc.ntu.edu.tw> + + + + +¿äÁò ¶ß´Â Á÷Á¾ Best 5 : ±ÝÀ¶ / IT / ¹æ¼Û / ºäƼ / ÀÎÅ׸®¾î + + + + + + + +

    + + + + + + + + + + + +


    + + + + + + + +
    ¿äÁò ¶ß´Â Á÷Á¾ Best +5 : ±ÝÀ¶ / IT / ¹æ¼Û / ºäƼ / ÀÎÅ׸®¾î
    20´ë ÀþÀºÀ̵éÀÌ »ÌÀº 'ÀÏÇÏ°í ½ÍÀº +ºÐ¾ß'·Î ±ÝÀ¶, IT, ¹æ¼Û, ºäƼ/ÆÐ¼Ç, ÀÎÅ׸®¾î/°ÇÃàºÐ¾ß°¡ ¼±Á¤µÇ¾ú´Ù. +

    À̵é Áß¿¡¼­µµ ±ÝÀ¶ºÐ¾ß´Â +±Þ¿©°¡ »ó´ëÀûÀ¸·Î ³ô°í ÁÖ5ÀÏÁ¦ ±Ù¹«¿¡ ¾Õ¼­ÀÖ´Â '¿Ü±¹°è ÀºÇà'ÀÌ, ITºÐ¾ß´Â '°ÔÀÓ'ºÐ¾ß°¡, ¹æ¼ÛºÐ¾ß´Â ¿äÁò +½Å¼¼´ë ´ëÇлýµéÀÌ °¡Àå ¼±È£ÇÏ´Â Á÷¾÷ÀΠȨ¼îÇÎÀÇ '¼îÇÎÈ£½ºÆ®'¿Í ÄÉÀÌºí¹æ¼ÛÀÇ 'VJ'¸¦, ºäƼ/ÆÐ¼ÇºÐ¾ß´Â Ú¸¿¡ +´ëÇÑ °ü½É°íÁ¶·Î ÀÎÇØ 'ÇǺΰü¸®»ç' ¶Ç´Â '½ºÅ¸Àϸ®½ºÆ®', ÀÎÅ׸®¾î/°ÇÃàºÐ¾ß¿¡¼­´Â ¸®¸ðµ¨¸µ ºÕ¿¡ ÈûÀÔ¾î +'ÀÎÅ׸®¾î'ÂÊÀÌ ³ôÀº ¼øÀ§·Î ²ÅÇû´Ù. +

    ±×·³, ÀÌó·³ ³ôÀº +ÁÖ°¡¸¦ ±¸°¡Çϰí ÀÖ´Â Á÷Á¾¿¡ ±Ù¹«Çϱâ À§Çؼ­´Â ¾î¶² ÀÚ°Ý¿ä¼Ò¸¦ °®Ãß´Â °ÍÀÌ ÁÁÀ»±î?
    º»°ÝÀûÀÎ ¿©¸§ÀÌ +½ÃÀ۵Ǵ À̶§, ¶ß´Â Á÷Á¾À¸·ÎÀÇ È®½ÇÇÑ Áغñ¸¦ ÇØº¸ÀÚ.
    +

    ±ÝÀ¶ : 98³â ¸» IMF°¡ ½ÃÀÛµÉ ¹«·Æ¸¸ ÇØµµ +ÀºÇà/º¸Çè/Áõ±Ç°èÀÇ ÇÑÆÄ´Â ±× ¾î´ÀºÐ¾ßº¸´Ùµµ Ä¡¿­Çß°í ¹«Â÷º°ÀûÀÎ ±¸Á¶Á¶Á¤À¸·Î ÀÎÇØ ¸¹Àº Á÷ÀåÀεéÀÌ °Å¸®·Î +³»¸ô¸®´Ù½ÃÇÇ µÇ¾ú¾ú´Ù. ÇÏÁö¸¸ 2002³â ÇöÀç, Ä«µå»çÀÇ È£È²À» ½ÃÀÛÀ¸·Î ÀºÇà±Ç, Áõ±Ç, º¸ÇèºÐ¾ßÀÇ °æ·ÂÁ÷ +¼ö¿ä°¡ ¸¹¾ÆÁö°í ÀÖÀ¸¸ç, ½ÅÀÔÁ÷ÀÇ Ã¤¿ë ¶ÇÇÑ ¸¹¾ÆÁö°í ÀÖ´Ù. ¿Ã ÇϹݱâ±îÁö Àη½ÃÀåÀº ¸¼À½ +»óÅÂ. +

    ±ÝÀ¶ºÐ¾ß´Â ÀÚ°ÝÁõÀÌ ÀÖÀ¸¸é +ÀÖÀ»¼ö·Ï ÁÁ´Ù. ±ÝÀ¶±Ç¿¡¼­ À¯¿ëÇÏ°Ô ¾²ÀÌ´Â ÀÚ°ÝÁõÀ¸·Î´Â ÅõÀÚ»ó´ã»ç, ±ÝÀ¶ÀÚ»ê°ü¸®»ç(FP), +À繫À§Çè°ü¸®»ç(FRM) µî. ƯÈ÷ Áõ±Ç»ç¿¡ ±Ù¹«ÇÒ À̵éÀ̶ó¸é ÅõÀÚ»ó´ã»ç³ª ±ÝÀ¶ÀÚ»ê°ü¸®»çÀÇ ÀÚ°ÝÁõÀº ±âº»ÀÌ µÇ°í +ÀÖÀ¸´Ï ¹Ýµå½Ã ÃëµæÇØµÎµµ·Ï ÇÏÀÚ. ½ÃÇèÀÏÁ¤ +º¸±â +

    IT : ¿ÃÇØµé¸é¼­ IT/ÀÎÅÍ³Ý ¾÷°èÀÇ +¼öÀͱ¸Á¶°¡ ÁÁ¾ÆÁö°í ÀÖÀ¸¸ç, ÀÎÅÍ³Ý ºÐ¾ß´Â ÅäÁ¾ÀÎÅÍ³Ý ±â¾÷ÀÇ ¼öÀͼºÀÌ ¿Ü±¹°èº¸´Ù ÈξÀ ¾Õ¼­°¡°í ÀÖ´Â »óȲÀÌ´Ù. +¸î ³âÀüºÎÅÍ °ÔÀÓÀ¸·ÎÀÇ °ü½ÉÀÌ ³ô¾ÆÁö¸é¼­ ÅõÀÚ ¶ÇÇÑ ¸¹¾ÆÁö°í ÀÖ´Â »óÅÂ. ÇϹݱâ Àη½ÃÀå +¸¼À½. +

    ITºÐ¾ß¿¡¼­´Â Àη¼ö±ÞÀ» ÇÒ +¶§ »ç½Ç ÀÚ°ÝÁõ À¯¹«º¸´Ù´Â ½Ç¹«°æÇè°ú Àû±Ø¼ºÀ» ´õ ¼±È£ÇÏ´Â °æÇâÀÌ ÀÖ´Ù. ÇÏÁö¸¸ Á÷Á¾À» ¹Ù²Ù¾îº¸·Á ÇѴٰųª º¸´Ù +³ôÀº ½Ç¹«Áö½ÄÀ» ¿øÇÑ´Ù¸é À̹ø ¿©¸§¿¡ Çпø¿¡¼­ÀÇ ½Ç¹«Áö½Ä ½ÀµæÀº ¾î¶³±î? ÃßõITÇпø º¸±â +

    ¹æ¼Û : ¹æ¼ÛºÐ¾ß Áß¿¡¼­µµ ¾Æ³ª¿î¼­, ¼º¿ì, +ÀÛ°¡, PD µîÀº ¿¹ÀüºÎÅÍ ²ÙÁØÇÑ Àαâ¸ôÀ̸¦ Çϰí ÀÖ´Â Á÷¾÷ÀÌ´Ù. ÇÏÁö¸¸ ¿äÁò »õ·Ó°Ô °¢±¤¹Þ°í ÀÖ´Â Á÷¾÷ÀÌ ¹Ù·Î +'¼îÇÎÈ£½ºÆ®'. ¼îÇÎÈ£½ºÆ®¿¡ °üÇØ¼­´Â ¼­Á¡¿¡¼­µµ °ü·Ã¼­ÀûÀÌ ¸¹ÀÌ ³ª¿ÃÁ¤µµ·Î ¿©´ë»ýµé »çÀÌ¿¡¼± ÀαⰡ ³ôÀº +Á÷¾÷ÀÌ´Ù. ¼ø°£ ÀçÄ¡·Â°ú Ç¥Çö·ÂÀÌ ÀÖ´Ù¸é ÀÌÂÊÀ¸·ÎÀÇ µµÀüÀº ÇѹøÂë »ý°¢ÇغÁµµ ÁÁÀ»¹ý. ¼îÇÎÈ£½ºÆ®¶õ? +

    ¼îÇÎÈ£½ºÆ®¿Í ÇÔ²² 'À¯Åë +ºÐ¾ß¿¡¼­ÀÇ ²É'À̶ó ºÒ¸®¿ì´Â MD(Merchandiser). À¯ÅëÀÇ ²É +MDÀÇ Àü¹®¼º +

    ºäƼ : Ú¸ ¶Ç´Â °Ç°­¿¡ ´ëÇÑ °ü½ÉÀÌ ³ô¾ÆÁö¸é¼­ +ºäƼ °ü·Ã »ê¾÷ÀÌ È°È²À» ¸Â°í ÀÖ´Ù. ÀÌ¿¡ ÇǺΰü¸®»ç, ¹ß°ü¸®»ç, ½ºÆ÷Ã÷¸¶»çÁö¸¦ ºñ·ÔÇÏ¿© ³×ÀÏ¾ÆÆ¼½ºÆ®, +¸ÞÀÌÅ©¾÷¾ÆÆ¼½ºÆ®, Çì¾îµðÀÚÀ̳Ê, Ä÷¯µð·ºÅ͸¦ ¾ç¼ºÇÏ´Â Çпøµéµµ ¸¹ÀÌ »ý°Ü³ª°í ÀÖ´Â Ãß¼¼. Ú¸¿¡ ´ëÇÑ °ü½ÉÀº +¿©¼º»Ó¸¸ ¾Æ´Ï¶ó ³²¼º¿¡°Ôµµ Áß¿ä½Ã µÇ°í ÀÖ´Â ºÐ¾ßÀ̸ç, ¿äÁîÀ½Àº '²É¹Ì³²'À̶ó ºÒ¸®¿ì´Â ÇǺΰ¡ °ö°í ¿¹»ÚÀåÇÑ +³²ÀÚµéÀÌ ÀαⰡ ³ô´Ù. µû¶ó¼­ ÇǺΰü¸®»ç ÀÚ°ÝÁõÀ» ¼ÒÁöÇϰí ÀÖÀ¸¸é ÇǺΰú, Àü¹®ÇǺθ¶»çÁö¼¾ÅÍ µî Àη¼ö±ÞÀÌ ÁÁÀº +»óÅÂ. ÃßõºäƼÇпø +º¸±â +

    ÀÎÅ׸®¾î : ÀÛ³âºÎÅÍ °ÇÃฮ´º¾ó ¹× Àç°ÇÃà ¹Ù¶÷ÀÌ +ºÒ¸é¼­ ÀÎÅ׸®¾î »ê¾÷ÀÌ °¢±¤¹Þ°í ÀÖ´Ù. ¶ÇÇÑ MBC¿¡¼­ Àα⸮¿¡ ¹æ¿µµÇ°í ÀÖ´Â '·¯ºêÇϿ콺'¸¦ ÅëÇØ¼­µµ ÀÌ¹Ì +°ÇÃฮ´º¾óÀ̳ª ÀÎÅ׸®¾î°¡ ÁÖ¸ñ¹Þ°í ÀÖ´Â »óÅÂ. ÀÎÅ׸®¾î µîÀÇ ºÐ¾ß¿¡¼­ ÀÏ ÇÏ·Á¸é ¹Ýµå½Ã °ü·Ã ÀÚ°ÝÁõÀÌ ÇÊ¿äÇÏ´Ù. + °ÇÃà°ü·Ã +ÀÚ°ÝÁõº¸±â

    +
    0 º»¸ÞÀÏÀº Á¤º¸Åë½Å¸Á ÀÌ¿ëÃËÁø ¹× Á¤º¸º¸È£ µî¿¡ °üÇÑ ¹ý·ü Á¦ 50Á¶¿¡ ÀǰÅÇÑ +[±¤°í]¸ÞÀÏ ÀÔ´Ï´Ù.
    0.
    ±ÍÇÏÀÇ ¸ÞÀÏÁÖ¼Ò´Â +À¥¼­ÇÎÁß,@memo@ ¿¡¼­ ¾Ë°Ô µÈ°ÍÀ̸ç, E-Mail ÁÖ¼Ò ¿Ü¿¡, ´Ù¸¥ Á¤º¸´Â °®°í ÀÖÁö ¾Ê½À´Ï´Ù.
    ¸ÕÀú Çã¶ô¾øÀÌ ¸ÞÀÏÀ» ¹ß¼ÛÇØ¼­ ´ë´ÜÈ÷ +Á˼ÛÇÕ´Ï´Ù 
    +[¼ö½Å °ÅºÎ] Å¬¸¯ÇÏ½Ã¾î ¸ÞÀÏÀ» +º¸³»ÁÖ½Ã¸é ´Ù½Ã´Â ¸ÞÀÏÀ» º¸³»Áö ¾Êµµ·Ï ³ë·ÂÇϰڽÀ´Ï´Ù.  °¨»çÇÕ´Ï´Ù
    .
    + + + + diff --git a/Ch3/datasets/spam/spam/00036.256602e2cb5a5b373bdd1fb631d9f452 b/Ch3/datasets/spam/spam/00036.256602e2cb5a5b373bdd1fb631d9f452 new file mode 100644 index 000000000..4e4da7616 --- /dev/null +++ b/Ch3/datasets/spam/spam/00036.256602e2cb5a5b373bdd1fb631d9f452 @@ -0,0 +1,276 @@ +Received: from timhunt.net (ns1.timhunt.net [216.27.147.130]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g6J7SBJ02605 + for ; Fri, 19 Jul 2002 08:28:11 +0100 +Received: from www ([209.197.199.5]) + by timhunt.net (8.11.3/8.11.1) with ESMTP id g6J7S9S17606; + Fri, 19 Jul 2002 03:28:09 -0400 (EDT) + (envelope-from John@ABigClick.zzn.com) +Date: Fri, 19 Jul 2002 03:28:09 -0400 (EDT) +Message-Id: <200207190806.g6J86er20831@www> +Errors: John@ABigClick.zzn.com +From: Reports You Need To Make Cash! +To: Reports You Need To Make Cash! +Subject: Re: Your bank account +MIME-Version: 1.0 +Content-Type: text/html; charset=us-ascii +Content-Transfer-Encoding: 7bit +Content-Disposition: inline; filename="filename.html" + + + + + + + + +
    Dear +Friend,

    A recent survey by Nielsen/Netratings says that "The Internet +
    population is rapidly approaching a 'Half a Billion' people!"

    SO WHAT +DOES ALL THIS MEAN TO YOU? EASY MONEY!!

    Let's assume that every person +has only one E-mail address...
    that's 500 million potential customers and +growing!  In addition,
    E'mail is without question the most powerful +method of distributing
    information on the face of the earth.

    Well, I +think you get the picture.  The numbers and potential are
    just +staggering, but it gets even better...

    Suppose I told you that you could +start your own E-mail business
    today and enjoy these +benefits:

         *** All Customers Pay You In +Cash!!!
         *** You Will Sell A Product Which Costs +Nothing to Produce!
         *** Your Only Overhead Is Your +Time!
         *** You Have 100s Of Millions Of Potential +Customers!!!
         *** You Get Detailed, Easy To Follow +Startup +Instructions!

              AND +THIS IS JUST THE TIP OF THE ICEBERG . . .
    As you read on you'll discover how +a 'Seen on National TV'
    program is paying out a half million dollars, every +4 to 5 months
    from your home, for an investment of only $25 US Dollars +expense,
    one time.  ALL THANKS TO THE COMPUTER AGE . . .
    AND THE +INTERNET!

    Before you say "Bull", please read the following:
    This is +the letter you have been hearing about on the news
    lately.  Due to the +popularity of this letter on the Internet,
    a national weekly news program +recently devoted an entire
    show to the investigation of this program +described below,
    to see if it really can make people money.

    The show +also investigated whether or not the program was
    legal.  Their findings +proved once and for all that there are
    "absolutely NO laws prohibiting the +participation in the
    program and if people can follow the simple +instructions,
    they are bound to make some mega bucks with only $25 out +of
    pocket cost".

         DUE TO THE RECENT INCREASE +OF POPULARITY
         AND RESPECT THIS PROGRAM HAS +ATTAINED,
         IT IS CURRENTLY WORKING BETTER THAN +EVER!

    ***** This is what one had to say:

    "Thanks to this +profitable opportunity.  I was approached many
    times before but each +time I passed on it.  I am so glad I
    finally joined just to see what one +could expect in return
    for the minimal effort and money required.  To my +asonishment,
    I received total $610,470.00 in 21 weeks, with money +still
    coming +in".

              Pam +Hedland,  Fort Lee, New +Jersey
    ----------------------------------------------------------------
    Here +is another testimonial:

    "This program has been around for a long time but +I never
    believed in it.  But one day when I received this again in +
    the mail I decided to gamble my $25 on it.  I followed the
    simple +instructions and walaa. . . .  3 weeks later the money
    started to come +in.  First month I only made $240.00 but the
    next 2 months after that I +made a total of $290,000.00.
    So far, in the past 8 months by re-entering the +program, I
    have made over $710,000.00 and I am playing it again.

    The +key to success in this program is to follow the simple
    steps and NOT change +anything."

    More testimonials later but first:

    ** PRINT THIS NOW +FOR YOUR FUTURE REFERENCE

    If you would like to make at least $500,000 +every 4 to 5
    months easily and comfortably, please read the following . . +.
    THEN READ IT AGAIN and AGAIN!!!

    **FOLLOW THESE SIMPLE +INSTRUCTIONS,
        TO MAKE YOUR FINANCIAL DREAMS +
        COME +TRUE**

    INSTRUCTIONS:
    -------------------
    ***** Order all 5 reports +shown on the list below.

    ***** For each report, send $5 US CASH, THE NAME +&
    NUMBER OF THE REPORT YOU ARE ORDERING and
    YOUR E-MAIL ADDRESS to +the person whose name appears
    ON THAT LIST next to the +report.

         MAKE SURE YOUR RETURN ADDRESS IS ON +YOUR
         ENVELOPE TOP LEFT CORNER in case of any +mail
         problems.

         +*****When you place your order, make +sure
                   +you order each of the 5 reports *****

    You will need all 5 reports so that +you can save them on your
    computer and resell them.

    YOUR TOTAL COST $5 +X 5 = $25.00

    **********Within a few days you will receive, via e-mail, +each
    of the 5 reports from these 5 different individuals.  Save
    them +on your computer so they will be accessible for you to
    send to the 1,000's of +people who will order them from you.
    Also make a floppy of these reports and +keep it at your desk
    in case something happens to your +computer.

    **********IMPORTANT - DO NOT alter the names of the +people
    who are listed next to each report, or their sequence on the
    list, +in any way other than what is intructed below in steps
    1 through 6 or you +will lose out on the majority of your profits.
    Once you understand the way +this works, you will also see how
    it does not work if you change +it.

    Remember, this method has been tested, and if you alter,
    it will +NOT work!!!

    People have tried to put their friends/relatives names +on
    all five thinking they could get all the money.  But it does
    not +work this way.  Believe us, we have tried to be greedy
    and then nothing +happened.

    So do not try to change anything other than what is +instructed.
    Because if you do, it will not work for you.  +Remember,
    honesty reaps the reward!!!

    1. After you have ordered all 5 +reports, take this
    advertisement and REMOVE the name and address of the +person in
    REPORT # 5.  This person has made it through the cycle and is +
    no doubt counting their fortune.

    2. Move the name & address in +REPORT #4 down to REPORT #5.
    3. Move the name & address in REPORT #3 down +to REPORT #4.
    4. Move the name & address in REPORT #2 down to REPORT +#3.
    5. Move the name & address in REPORT #1 down to REPORT #2.
    6. +Insert YOUR name & address in the REPORT #1 Position.

    PLEASE MAKE +SURE you copy every name & +address
    ACCURATELY!
    -----------------------------------------------------------------------------

    Take +this entire letter, with the modified list of names,
    and save it on your +computer.  DO NOT MAKE ANY OTHER
    CHANGES.  Save this on a disk as +well just in case you loose
    any data.

    To assist you with marketing +your business on the Internet,
    the 5 reports you purchase will provide you +with invaluable
    marketing information that includes:  How to send bulk +e-mails
    legally, Where to find thousand of free classified ads and
    much, +much more.

    There are 2 Primary methods to get this venture +going:

       METHOD #1:  SENDING BULK E-MAIL +LEGALLY
       +---------------------------------------------------------
    Let's say that you +decide to start small, just to see how
    it goes, and we'll assume you and +those involved send out
    only 5,000 emails each.  Let's also assume that +the mailing
    receives only a 0.2% response (the response could be +much
    better but lets just say it is only 0.2%.  Also, many +people
    will send out hundreds of thousands of e-mails instead of
    only +5,000 each).

    Continuing with this example, you send out only 5,000 +e-mails.
    With a 0.2% response, that is only 10 orders for Report #1.
    Those +10 people resonded by sending out 5,000 e-mails each
    for a total of +50,000.  Out of those 50,000 e-mails only 0.2%
    responded with +orders.  That's 100 people responded and
    ordered Report #2.  Those +100 people mail out 5,000 e-mails
    each for a total of 500,000 e-mails.  +The 0.2% response to
    that is 1000 orders for Report #3.

    Thoe 1000 +people send out 5,000 e-mails each for a total of
    5 million e-mails sent +out.  The 0.2% response to that is
    10,000 orders for Report #4.  +Those 10,000 people send out
    5,000 e-mails each for a total of 50,000,000 (50 +million)
    e-mails.  the 0.2% response to that is 100,000 orders +for
    Report #5.

    THAT'S 100,000 ORDERS TIMES $5 EACH = 500,000
    (a +half a million).

         Your total income in this +example is:
         1......$50 +
         +2......$500 +
         3......$5,000 ++
         4......$50,000 +
         +5......$500,000 .................. Grand Total = +$555,550.00

         NUMBERS DO NOT LIE.  GET A +PENCIL & PAPER AND
         FIGURE OUT THE WORST POSSIBLE +RESPONSES AND
         NO MATTER HOW YOU CALCULATE IT, YOU +WILL
         STILL MAKE A LOT OF +MONEY!
    ----------------------------------------------------------------------
         +REMEMBER FRIEND, THIS IS ASSUMING ONLY 10
         PEOPLE +ORDERING OUT OF 5,000 PEOPLE YOU MAILED.

    Dare to think for a moment what +would happen if everyone,
    or 1/2, or even 1/5 of those people mailed 100,000 +e-mails
    each or more?  There are over 250 million people on the +
    Internet worldwide and counting.  Believe me, many people
    will do +just that, and more!

         METHOD #2:  PLACING +FREE ADS ON THE INTERNET
        +
    ---------------------------------------------------------------------
    Advertising +on the net is very, very inexpensive and there
    are hundreds of FREE places to +advertise.  Placing a lot of
    free ads on the internet will easily get a +larger response.
    We strongly suggest you start with method # 1 and add +METHOD
    # 2 as you go along.

    For every $5 you receive, all you must do +is e-mail them the
    Report they ordered.  That's it!  Always +provide same day
    service on all orders.  This will guarantee that the +e-mails
    they send out, with your name and address on it, will be
    prompt +because they can not advertise until they receive +the
    report.

         ORDER EACH REPORT BY IT NUMBER +& NAME ONLY.

    Note:  Always send $5 cash (US Currency) for each +report.
    Checks are NOT accepted.  Make sure the cash is wrapped in
    at +lease 2 sheets of paper before you put it in the envelope.
    On one of those +sheets of paper, write the NUMBER and the NAME
    of the Report you are +ordering, your email ADDRESS, your NAME
    and postal address.  Make sure +you affix the proper 'International'
    Postage if ordering a report from +outside your country.

         PLACE YOUR ORDER FOR THESE +REPORTS +NOW:
    -------------------------------------------------------------------------

    Report +#1:  The Insider's Guide to Advertising for Free on the Net
    Order Report +#1 from:

    K.J. Nickels
    P.O. Box 739
    Waukesha, WI +53187

    ______________________________________________________

    Report +#2:  The Insider's Guide to Sending Bulk e-mail on the Net
    Order Report +#2 from:

    K. Heritage
    6933 W. University Ave #610
    Gainsville, FL +32607
    _______________________________________________________

    Report +#3:  Secret to Multilevel marketing on the Net:
    Order Report #3 +from:

    T. Turner
    5317 Bonner Dr.
    Corpus Christie, TX +78411
    ______________________________________________________

    Report +#4:  How to become a Millionaire utilizing MLM & the Net
    Order +Report #4 from:

    Mel Hahn
    111 Wilmont Drive Unit G
    Waukesha, WI +53189


    ______________________________________________________

    Report +#5:  How to send out One Million e-mails
    Order Report #5 from:

    J. +Frid
    13324 Radisson Rd. N.E.
    Ham Lake, MN +55304
    ______________________________________________________

    There are +currently almost 500,000,000 people online worldwide!

    $$$$$$$$$$ YOUR +SUCCESS GUIDLINES$$$$$$$$$$

    Follow these guidlines to guarantee your +success:
    ************************************
    If you do not receive at +least 10 orders for Report #1 within
    2 weeks, continue sending e-mails until +you do.

    After you have received 10 orders, 2 to 3 weeks after that
    you +should receive 100 orders or more for Report #2.  If you
    did not, +continue advertising or sending e-mails until you do.

    Once you have +received 100 or more orders for Report #2, YOU
    CAN RELAX, because the system +is already working for you,
    and the cash will continue to roll +in!!

    THIS IS IMPORTANT TO REMEMBER: Every time your name
    is moved down +the list, you are placed in front of a
    different report.

    You can KEEP +TRACK of your PROGRESS by watching which
    report people are ordering form +you.

    IF YOU WANT TO GENERATE MORE INCOME SEND ANOTHER
    BATCH OF E-MAILS +AND START THE WHOLE PROCESS
    AGAIN.  There is NO LIMIT to the income you +can generate
    from this +business!!!
    ________________________________________________________

         +FOLLOWING IS A NOTE FROM THE ORIGINATOR
         OF THIS +PROGRAM:

    You have just received information that can give you +financial
    freedom for the rest of your life, with NO RISK and JUST +A
    LITTLE BIT OF EFFORT.  You can make more money in the next
    few +weeks and months than you have ever imagined.

    Follow the program EXACTLY +AS INSTRUCTED.  Do not change
    it in any way.  It works exceedings +well as it is now.
    Remember to e-mail a copy of this exciting report after +you
    have put your name and address in Report #1 and moved others
    to +#2..........#5 as instructed above.  One of the people
    you send this to +may send out 100,000 or more emails and your
    name will be on every one of +them.  Remember though, the more
    you send out the more potential +customers you will reach.

    So my friend, I have given you the ideas, +information,
    materials and opportunity to become financially +independent.
    IT IS UP TO YOU NOW!

    **********MORE +TESTIMONIALS**********

    "My name is Mitchell.  My wife Jody and I +live in Chicago.
    I am an accountant with a major US Corporation and I +make
    pretty good money.  When I received this program I grumbled
    to +Jody about receiving "junk mail".  I made fun of the
    whole thing, +spouting my knowledge of the population and
    percentages involved.  I +"knew" it wouldn't work.  Jody
    totally ignored my supposed intelligence +and a few days later
    she jumped in with both feet.  I made merciless fun +of her,
    and was ready to lay the old "I told you so" on her when
    the thing +didn't work.  Well, the laugh was on me!  Within
    3 weeks she had +received 50 responses.  Within the next 45
    days she had received a total +of $147,200.00 all cash!
    I was shocked.  I have joined Jody in her +"hobby".

         Mitchell Wof,  Chicago, +Illinois
    ----------------------------------------------------------------

    "Not +being the gambling type, it took me several weeks to
    make up my mind to +participate in this plan.  But conservative
    that I am, I decided that +the initial investment was so little
    that there was just no way that I +wouldn't get enough orders
    to at least get my money back.  I was +surprised when I found
    my medium sized post office box crammed with +orders.  I made
    $319,210.00 in the first 12 weeks.  The nice thing +about this
    deal is that it does not matter where people live.  +There
    simply isn't a better investment with a faster return and
    so +big".

         Dan Sondstrom,  Alberta, +Canada
    ---------------------------------------------------------------

    "I +had received this program before.  I deleted it, but later
    I wondered if +I should hav given it a try.  Of course, I
    had no idea who to contact to +get another copy, so I had to
    wait until I was e-mailed again by someone else +. . . . . . .
    11 months passed then it luckily came again.  I did not +
    delete this one!  I made more than $490,000 on my first try
    and all +the money came within 22 weeks".

         Susan De +Suza,   New York, +NY
    --------------------------------------------------------------

    "It +really is a great opportunity to make relatively easy
    money with little cost +to you.  I followed the simple
    instructions carefully and within 10 days +the money started
    to come in.  My first month I made $20,560.00 and by +the
    end of the third month my total cash count was $362,840.00.
    Life is +beautiful, thanks to the Internet".

         Fred +Dellaca,  Westport, New +Zealand
    ---------------------------------------------------------------

    ORDER +YOUR REPORTS TODAY AND GET STARTED
    ON YOUR ROAD TO FINANCIAL +FREEDOM!

    ---------------------------------------------------------------

    If +you have any questions of the legality of this program,
    contact the Office of +Associate Director of Marketing
    Practices, Federal Trade Commission, Bureau +of Consumer
    Protection, Washington, D.C.  We are not the authors of this +program
    and do not warrant any guarantees as to how much earnings you +will
    achieve.  This is a one time mailing.  If you wish to be +removed from
    our list please reply to this e-mail with "remove" in the +subject line
    and you will be removed immediately.  +



    + diff --git a/Ch3/datasets/spam/spam/00037.21cc985cc36d931916863aed24de8c27 b/Ch3/datasets/spam/spam/00037.21cc985cc36d931916863aed24de8c27 new file mode 100644 index 000000000..9603d510a --- /dev/null +++ b/Ch3/datasets/spam/spam/00037.21cc985cc36d931916863aed24de8c27 @@ -0,0 +1,84 @@ +Received: from qrq.cc.ntu.edu.tw (giga.tw.freebsd.org [203.133.92.249]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g6J7SJJ02621 + for ; Fri, 19 Jul 2002 08:28:19 +0100 +Received: from ccsun37.cc.ntu.edu.tw (ccsun37.cc.ntu.edu.tw [140.112.8.37]) + by qrq.cc.ntu.edu.tw (8.12.5/8.12.5) with ESMTP id g6J7SEnr016993 + for ; Fri, 19 Jul 2002 15:28:14 +0800 (CST) + (envelope-from meg34807147238s03@isppan.waw.pl) +Received: from localhost (localhost [127.0.0.1]) + by ccsun37.cc.ntu.edu.tw (Postfix) with ESMTP id 80FA8DE082 + for ; Fri, 19 Jul 2002 15:23:41 +0800 (CST) +Received: from bigfoot.com (unknown [64.15.239.140]) + by ccsun37.cc.ntu.edu.tw (Postfix) with SMTP id E6859DE083 + for ; Fri, 19 Jul 2002 15:23:27 +0800 (CST) +Received: from isppan.waw.pl ([200.242.95.218]) + by BFLITEMAIL4A.bigfoot.com (LiteMail v3.02(BFLITEMAIL4A)) with SMTP id 18Jul2002_BFLITEMAIL4A_36058_105232591; + Thu, 18 Jul 2002 15:04:22 -0400 EST +Reply-To: +Message-ID: <018c76b36b8c$4877e6e7$4eb27cc2@wfdukr> +From: +To: manny@ccsun37.cc.ntu.edu.tw +Subject: Order your Viagra and weight-loss here 6117kFvc5--9 +Date: Thu, 18 Jul 0102 19:51:35 -0100 +MiME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal + + + + + + + +New Page 1 + + + + +

    VIAGRA
    +
    WITHOUT
    +A DOCTORS VISIT!!

    +

    CLICK
    +HERE

    +

    *Other +Top Medications also available!! + +

    +

    *We +have Doctors on call around the country to view
    +your information and quickly approve your order. + +

    +

    *Totally +Discreet System allows you to order today and
    +enjoy your medication tomorrow in most cases. + +

    +

    *Finally +you can try the wonder drug Viagra that
    +has swept the World without the embarrassment of
    +having to visit your Doctor and explain your condition!!
    +

    TO +ORDER CLICK HERE!

    +

     

    +

     

    +

     

    +

     

    +

     

    +

     

    +

     

    +

     

    +

    TO GET DELETED

    +

    http://194.44.46.21/remove.php

    +

     

    +

     

    + + + + +3606uLdz7-798Gxne6717WLiQ1-104VoKJ8349uvAE9-31l43 + diff --git a/Ch3/datasets/spam/spam/00038.8d93819b95ff90bf2e2b141c2909bfc9 b/Ch3/datasets/spam/spam/00038.8d93819b95ff90bf2e2b141c2909bfc9 new file mode 100644 index 000000000..cb8897583 --- /dev/null +++ b/Ch3/datasets/spam/spam/00038.8d93819b95ff90bf2e2b141c2909bfc9 @@ -0,0 +1,136 @@ +Received: from ns1.zookerman.net ([209.189.204.136]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g6J7SiJ02681 + for ; Fri, 19 Jul 2002 08:28:44 +0100 +Received: from outmta020.topica.com (out004.tfmb.net [66.180.247.24]) + by staheekum.com (8.10.2/8.10.2) with SMTP id g6J7SYE20665 + for ; Thu, 18 Jul 2002 23:28:34 -0800 +To: stu@westernchief.com +From: "Date.com" +Subject: Meet other Singles just like you +Date: Thu, 18 Jul 2002 20:12:20 -0700 +Message-ID: <64698.3565.1247071782-1463747838-1027048340@topica.com> +Errors-To: +Reply-To: perf-remove.3565.64698.13893713.0.0.4@boing.topica.com +X-Topica-Id: <1027038606.svc001.4621.1000237> +Mime-Version: 1.0 +Content-Type: multipart/alternative; + boundary="TEP-2108411027.1463792894.1027038601" +X-MailScanner: Found to be clean + +--TEP-2108411027.1463792894.1027038601 +Content-Type: text/plain + +Dear STUART, + +Are you tired of searching for love in all the wrong places? + + +Find LOVE NOW at Date.com! +http://click.emailrewardz.email-publisher.com/maaaqZGaaSKm2aa6syje/ + + +Browse through thousands of personals in your area. + + +JOIN FOR FREE! +http://click.emailrewardz.email-publisher.com/maaaqZGaaSKm2aa6syje/ + + +- Search, E-mail & Chat +- Use Date.com to meet cool guys and hot girls. +- Go 1 on 1 or use our private chat rooms. + + +Click on the link to get started! +http://click.emailrewardz.email-publisher.com/maaaqZGaaSKm2aa6syje/ + +Find LOVE NOW! +---------------------------------- + +You have received this email because you have registerd with EmailRewardz or subscribed through one of our marketing partners. If you have received this message in error, or wish to stop receiving these great offers please click the remove link above. + +To unsubscribe from these mailings, please click here: +http://emailrewardz.tfmb.net/?aaaa5F.aa6syj + +--TEP-2108411027.1463792894.1027038601 +Content-Type: text/html + +EmailRewardz +never sends unsolicited email. You are receiving this message because you have +requested to receive special offers from affiliates of EmailRewardz. EmailRewardz brings you the highest quality offers with your privacy guaranteed. +If you no longer wish to receive these offers please follow the instructions at +the bottom of this message.

    + + + + +
    + + + +
    + + + + + + + + + + + + + + + + + +
    MEET OTHER SINGLES + JUST LIKE YOU
    Tired of searching + for love in all the wrong places?
    Find love now, the easy + way.
    JOIN FOR + FREE
    Find your soul mate today!
    BROWSE THROUGH + THOUSANDS OF PERSONALS IN YOUR OWN AREA.

    + + + +
    + + + +
    CLICK + HERE
    to Find Love Now!
    +


    + You have received this email because you have registered with EmailRewardz or + subscribed through one of our marketing partners. If you have received this + message in error, or wish to stop receiving these great offers please read further + for removal instructions.
    + +
    +Click here to unsubscribe from these mailings. +
    + +--TEP-2108411027.1463792894.1027038601-- + diff --git a/Ch3/datasets/spam/spam/00039.889d785885f092c269741b11f2124dce b/Ch3/datasets/spam/spam/00039.889d785885f092c269741b11f2124dce new file mode 100644 index 000000000..0d844cc9d --- /dev/null +++ b/Ch3/datasets/spam/spam/00039.889d785885f092c269741b11f2124dce @@ -0,0 +1,528 @@ +Delivered-To: zzzz-spamtrap@sonic.spamtraps.taint.org +Received: from b.smtp-out.sonic.net (b.smtp-out.sonic.net [208.201.224.39]) + by sonic.spamtraps.taint.org (Postfix) with SMTP id C4C311332A8 + for ; Sat, 3 Aug 2002 12:19:09 -0700 (PDT) +Received: (qmail 655 invoked from network); 3 Aug 2002 19:19:18 -0000 +Received: from prop.sonic.net (208.201.224.193) + by b.smtp-out.sonic.net with SMTP; 3 Aug 2002 19:19:18 -0000 +Received: from turbo.sonic.net (turbo [208.201.224.26]) + by prop.sonic.net (8.11.6/8.8.5) with ESMTP id g73JJIS16964; + Sat, 3 Aug 2002 12:19:18 -0700 +Received: from yahoo.com (customer.iplannetworks.net [200.69.231.225] (may be forged)) + by turbo.sonic.net (8.11.6/8.8.5) with SMTP id g73JJEM14820 + for ; Sat, 3 Aug 2002 12:19:15 -0700 +Date: Sat, 3 Aug 2002 12:19:15 -0700 +X-envelope-info: +Received: from [14.102.59.97] by rly-xr02.mx.aol.com with local; Fri, 2 Aug 2002 04:17:07 +1200 +Received: from mail.gmx.net ([62.96.71.204]) + by a231242.upc-a.chello.nl with esmtp; Wed, 31 Jul 2002 17:14:43 +0900 +Received: from 109.91.84.57 ([109.91.84.57]) by ssymail.ssy.co.kr with asmtp; Tue, 30 Jul 2002 06:12:19 +1000 +Received: from 157.85.96.164 ([157.85.96.164]) by f64.law4.hotmail.com with QMQP; Sun, 28 Jul 2002 19:09:55 -0000 +Received: from unknown (204.80.109.18) + by q4.quik.com with esmtp; Sat, 27 Jul 2002 08:07:31 -0700 +Reply-To: +Message-ID: +From: +To: +Subject: Have You Dreamed Of Your Own Home Based Business? eIExvv +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----=_NextPart_000_00X9_70A11C1D.E1232J43" +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: MIME-tools 5.503 (Entity 5.501) +Importance: Normal + +------=_NextPart_000_00X9_70A11C1D.E1232J43 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + +PGh0bWw+PGJvZHk+DQo8Zm9udCBzaXplPSIyIj4NCjx0YWJsZSBzdHlsZT0iQk9SREVSLUNPTExB +UFNFOiBjb2xsYXBzZSIgYm9yZGVyQ29sb3I9IiMxMTExMTEiIGNlbGxTcGFjaW5nPSIwIiBjZWxs +UGFkZGluZz0iMiIgd2lkdGg9IjU0OSIgDQpiZ0NvbG9yPSIjZmZmZmZmIiBib3JkZXI9IjAiPg0K +ICA8dGJvZHk+DQogICAgPHRyPg0KICAgICAgPHRkIHdpZHRoPSI1MzMiPjxmb250IHNpemU9IjIi +IGZhY2U9IkFyaWFsIj48Yj5Gcm9tOjwvYj4mbmJzcDsgRGFsbGluDQogICAgICAgIEBBR00gSG9s +ZGluZ3M8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgPGI+DQogICAgICAgIFN1YmplY3Q6PC9i +PiBIYXZlIFlvdSBEcmVhbWVkIE9mIFlvdXIgT3duIEhvbWUgQmFzZWQgQnVzaW5lc3M/ICAgIA0K +ICAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIDxiPg0KICAgICAgICBNb3RpdmF0 +ZWQgSW5kaXZpZHVhbHM8L2I+PGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIDxmb250IGNvbG9y +PSIjZmYwMDAwIj48Yj48YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgLS0tLS0tLSZndDsgPGk+ +QUJPVVQgT1VSIENPTVBBTlk8YnI+DQogICAgICAgIDwvaT48L2I+PC9mb250PkFHTSBIb2xkaW5n +cyBkaXN0cmlidXRlcyA8aT5vbmx5IDwvaT48dT5sZWdhbCBjcmVkaXQ8YnI+DQogICAgICAgIHJl +cGFpciBpbmZvcm1hdGlvbiBhbmQgZmluYW5jaWFsIGJ1c2luZXNzIHByb2dyYW1zPGJyPg0KICAg +ICAgICA8L3U+dG8gdGhvdXNhbmRzIG9mIGluZGl2aWR1YWxzIGFsbCBvdmVyIHRoZSBVbml0ZWQ8 +YnI+DQogICAgICAgIFN0YXRlcy48YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgV2UgYXJlIGN1 +cnJlbnRseSBzZWVraW5nIHNlbGYgbW90aXZhdGVkLCBkcml2ZW48YnI+DQogICAgICAgIHBlb3Bs +ZSB3aG8gd2lzaCB0byA8Yj48Zm9udCBjb2xvcj0iIzAwMDBGRiI+ZWFybiBzdWJzdGFudGlhbCBh +ZGRpdGlvbmFsPGJyPg0KICAgICAgICBpbmNvbWUgYW5kIGNhcGl0YWxpemUgb24gdGhlIGV4cGxv +c2l2ZSBncm93dGggb2Y8YnI+DQogICAgICAgIHRoZSBpbnRlcm5ldC48L2ZvbnQ+PC9iPiA8Zm9u +dCBjb2xvcj0iI2ZmMDAwMCI+PGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIDwvZm9udD48dT48 +Yj48aT5JZiB5b3UgaGF2ZSBiZWVuIHNlZWtpbmcgdGhpcyBvcHBvcnR1bml0eSwgcGxlYXNlPGJy +Pg0KICAgICAgICBrZWVwIHJlYWRpbmcgYW5kIGltbWVkaWF0ZWx5IGNvbXBsZXRlIGFuZDxicj4N +CiAgICAgICAgcG9zdGFsIG1haWwgb3IgZmF4IHRoZSBmb3JtIGJlbG93IHRvIGVucm9sbC48YnI+ +DQogICAgICAgIDxicj4NCiAgICAgICAgPC9pPjwvYj48L3U+SWYgeW91IGFyZSBub3Qgc29tZW9u +ZSBzZWVraW5nIHRvIGVhcm4gaW5jb21lIGF0PGJyPg0KICAgICAgICB5b3VyIG93biBwYWNlIGFu +ZCBncm93IGEgc3RhYmxlLCBob21lIGJhc2VkPGJyPg0KICAgICAgICBidXNpbmVzcywgcGxlYXNl +IGRpc2NhcmQgdGhpcyBlLW1haWwgYXMgd2UgZG8gbm90PGJyPg0KICAgICAgICB3YW50IHRvIHdh +c3RlIGFueSBvZiB5b3VyIHRpbWUgYW5kIGFwb2xvZ2l6ZSBmb3I8YnI+DQogICAgICAgIHRoZSBl +cnJvci48YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgVGhpcyBlbWFpbCB3YXMgaW50ZW5kZWQg +Zm9yIHRoZSByZWNpcGllbnQgd2hvIGlzPGJyPg0KICAgICAgICBzZWVraW5nIGFuIGVhc3kgbW9u +ZXkgbWFraW5nIG9wcG9ydHVuaXR5IGZyb208YnI+DQogICAgICAgIGhvbWUsIHNldHRpbmcgdGhl +aXIgb3duIHBhY2UgYW5kIHdvcmstbG9hZC48YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgPGI+ +PGZvbnQgY29sb3I9IiNmZjAwMDAiPi0tLS0tLS0mZ3Q7IFN0YXJ0IFNtYWxsIG9yIEVYUExPREUg +SW50byBXZWFsdGg8YnI+DQogICAgICAgIDwvZm9udD48L2I+T3VyIGhvbWUgYmFzZWQgb3Bwb3J0 +dW5pdHkgaXMgYSB3b3JrLWF0LWhvbWU8YnI+DQogICAgICAgIHByb2dyYW0gZm9yIGRlZGljYXRl +ZCwgbW90aXZhdGVkIGluZGl2aWR1YWxzPGJyPg0KICAgICAgICBpbnRlcmVzdGVkIGluIHRoZSBv +cHBvcnR1bml0eSBvZiBlYXJuaW5nIGFuIGV4dHJhPGJyPg0KICAgICAgICAkNTAwLjAwIHRvICQy +LDUwMC4wMCBwZXIgd2VlaywgRVZFUlkgd2Vlaywgd29ya2luZzxicj4NCiAgICAgICAgZGlyZWN0 +bHkgZnJvbSB0aGUgY29tZm9ydCBvZiB0aGVpciBvd24gaG9tZSwgZG9ybSw8YnI+DQogICAgICAg +IG9yIGFwYXJ0bWVudC48YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgT3VyIHdvcmstYXQtaG9t +ZSBwcm9ncmFtIGlzIGFuIEhPTkVTVCBvcHBvcnR1bml0eTxicj4NCiAgICAgICAgZm9yIHlvdSB0 +byBlYXJuIGEgc2VyaW91cyBleHRyYSBpbmNvbWUgd2l0aG91dDxicj4NCiAgICAgICAgaGF2aW5n +IHRvIHNhY3JpZmljZSBhIGxvdCBvZiB5b3VyIGZyZWUgdGltZS48YnI+DQogICAgICAgIDxicj4N +CiAgICAgICAgPGI+PGZvbnQgY29sb3I9IiNmZjAwMDAiPi0tLS0tLS0mZ3Q7IEluY3JlZGlibGUg +SG9tZSBCYXNlZDxicj4NCiAgICAgICAgT3Bwb3J0dW5pdHkgUHJvZ3JhbSA8aT5SRVFVSVJFTUVO +VFM8YnI+DQogICAgICAgIDwvaT48L2ZvbnQ+PC9iPllPVSBhbmQgWU9VIEFMT05FIG11c3QgaGF2 +ZSB0aGUgZGVzaXJlIHRvIHdhbnQ8YnI+DQogICAgICAgIGFkZGl0aW9uYWwgaW5jb21lIGZyb20g +WU9VUiBvd24gaG9tZSBiYXNlZDxicj4NCiAgICAgICAgYnVzaW5lc3MuJm5ic3A7IFdFIENBTk5P +VCBQUk9WSURFIHRoZSBkcml2ZSBvciBkZXNpcmUuPGJyPg0KICAgICAgICBZT1UgbXVzdCBhbHJl +YWR5IHBvc3Nlc3MgdGhlIGRlc2lyZSBpbiBvcmRlciB0bzxicj4NCiAgICAgICAgZWFzaWx5IGVh +cm4gdGhvdXNhbmQncyBvZiBkb2xsYXJzIGEgd2VlaywgcnVubmluZyB5b3VyPGJyPg0KICAgICAg +ICBvd24gaG9tZSBiYXNlZCBidXNpbmVzcy48YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgSXNu +J3QgaXQgYWJvdXQgdGltZSB5b3UgZ290IHlvdXIgcGllY2Ugb2YgdGhlPGJyPg0KICAgICAgICB1 +bmxpbWl0ZWQgb3Bwb3J0dW5pdHkgdGhlIGludGVybmV0IGhhcyB0byBvZmZlcj88YnI+DQogICAg +ICAgIDxicj4NCiAgICAgICAgQWxsIG9mIHRoZSB3b3JrIHRoYXQgeW91IHdpbGwgYmUgZG9pbmcg +aXMgdmVyeTxicj4NCiAgICAgICAgc2ltcGxlIGFuZCBjYW4gYmUgZG9uZSBmcm9tIHlvdXIgZGVz +ayBvciByaWdodCBhdDxicj4NCiAgICAgICAgeW91ciBraXRjaGVuIHRhYmxlLiZuYnNwOyBBcyBh +IGhvbWUgd29ya2VyLCB5b3UgY2FuPGJyPg0KICAgICAgICB3b3JrIGZ1bGwgb3IgcGFydCB0aW1l +IHdoZW5ldmVyIHlvdSBoYXZlIHRoZSBmcmVlPGJyPg0KICAgICAgICB0aW1lLCBtb3JuaW5ncywg +YWZ0ZXJub29ucywgb3IgZXZlbmluZ3MuPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIEluIGFk +ZGl0aW9uLCB0aGVyZSBpcyBhYnNvbHV0ZWx5IG5vIGV4cGVyaWVuY2U8YnI+DQogICAgICAgIG5l +Y2Vzc2FyeSBmb3IgeW91IHRvIHBhcnRpY2lwYXRlIGluIG91ciB3b3JrIGF0PGJyPg0KICAgICAg +ICBob21lIGJhc2VkIGJ1c2luZXNzIHByb2dyYW0gITxicj4NCiAgICAgICAgPGJyPg0KICAgICAg +ICBPdXIgd29yay1hdC1ob21lIHByb2dyYW0gaXMgcGVyZmVjdCBmb3I8YnI+DQogICAgICAgIGlu +ZGl2aWR1YWxzIGludGVyZXN0ZWQgaW4gZWFybmluZyBhIHNlcmlvdXMgZXh0cmE8YnI+DQogICAg +ICAgIGluY29tZSB0byBoZWxwIHBheSBvZmYgb2YgdGhlaXIgYmlsbHMgITxicj4NCiAgICAgICAg +VGhhdCdzIHJpZ2h0ISBJZiB5b3UgaGF2ZSBjYXIgcGF5bWVudHMsIHJlbnQsPGJyPg0KICAgICAg +ICBtb3J0Z2FnZSBwYXltZW50cywgY3JlZGl0IGNhcmQgYmlsbHMsIGxvYW48YnI+DQogICAgICAg +IHBheW1lbnRzLCBldGMuPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIFRoaXMgaXMgYW4gZXhj +ZWxsZW50IG9wcG9ydHVuaXR5PC9mb250PjwvZm9udD48Zm9udCBmYWNlPSJBcmlhbCI+IDxmb250 +IHNpemU9IjIiPmZvcg0KICAgICAgeW91IHRvPGJyPg0KICAgICAgc3VwcGxlbWVudCB5b3VyIGV4 +aXN0aW5nIGluY29tZSBhbmQ8YnI+DQogICAgICBzdGFydCBwdXR0aW5nIHNvbWUgZXh0cmEgbW9u +ZXkgaW4geW91ciBwb2NrZXQhPGJyPg0KICAgICAgPGJyPg0KICAgICAgSWYgeW91IGFyZSBpbnRl +cmVzdGVkIGluIHN1c3RhaW5pbmcgYWRkaXRpb25hbDxicj4NCiAgICAgIGluY29tZSBpbiB5b3Vy +IGZyZWUgdGltZSwgdGhlIGZvbGxvd2luZzxicj4NCiAgICAgIGluZm9ybWF0aW9uIHdpbGwgaGVs +cCB0byBmdXJ0aGVyIGV4cGxhaW4gdGhlIHZlcnk8YnI+DQogICAgICBwcm9maXRhYmxlIHdvcmst +YXQtaG9tZSBwcm9ncmFtIHRoYXQgd2UgaGF2ZSB0bzxicj4NCiAgICAgIG9mZmVyIHlvdS48YnI+ +DQogICAgICA8YnI+DQogICAgICA8Yj48Zm9udCBjb2xvcj0iI2ZmMDAwMCI+LS0tLS0tLSZndDsg +SW5jcmVkaWJsZSBIb21lIEJhc2VkPGJyPg0KICAgICAgT3Bwb3J0dW5pdHkgUHJvZ3JhbSA8L2Zv +bnQ+PGk+PGZvbnQgY29sb3I9IiNmZjAwMDAiPkRFU0NSSVBUSU9OPGJyPg0KICAgICAgPC9mb250 +PjwvaT48L2I+T3VyIHByb2dyYW0gc2ltcGx5IGludm9sdmVzIHRoZSBmb2xkaW5nIGFuZDxicj4N +CiAgICAgIHByb2Nlc3Npbmcgb2YgcGFtcGhsZXRzLiBZT1UgV0lMTCBSRUNFSVZFPGJyPg0KICAg +ICAgQSBGVUxMICQxLjAwIEZPUiBFQUNIIEFORCBFVkVSWTxicj4NCiAgICAgIFBBTVBITEVUIFRI +QVQgWU9VPC9mb250PiA8Zm9udCBzaXplPSIyIj5QUk9DRVNTITxicj4NCiAgICAgIDxicj4NCiAg +ICAgIFdoYXQgZG8gd2UgbWVhbiBieSBwcm9jZXNzPzxicj4NCiAgICAgIEl0J3Mgc28gc2ltcGxl +IEFOWU9ORSBjYW4gc3RhcnQgTk9XLi4uPGJyPg0KICAgICAgPGJyPg0KICAgICAgPGk+PGI+U1RF +UCAxOiZuYnNwOyA8L2I+PC9pPllvdSB3aWxsIG5lYXRseSBmb2xkIHRoZSBwcm92aWRlZCBwcmVw +cmludGVkPGJyPg0KICAgICAgc2luZ2xlLXNpZGVkICg4IDEvMiBieSAxMSBpbmNoKSBwYW1waGxl +dHMgaW50bzxicj4NCiAgICAgIHRoaXJkcyBbVGhlIHBhbXBobGV0IHRoYXQgeW91IHdpbGwgYmUg +cHJvY2Vzc2luZzxicj4NCiAgICAgIHdpbGwgYmUgcHJvdmlkZWQgZm9yIHlvdSBhbmQgd2lsbCBi +ZSBwcmludGVkIG9uPGJyPg0KICAgICAgcmVndWxhciAyMCBsYi4gKDgtMS8yIGJ5IDExKSBpbmNo +IHBhcGVyLjxicj4NCiAgICAgIDxicj4NCiAgICAgIDxpPjxiPlNURVAgMjombmJzcDsgPC9iPjwv +aT5Zb3Ugd2lsbCBuZWF0bHkgaW5zZXJ0IHRoZSBmb2xkZWQgcGFtcGhsZXRzPGJyPg0KICAgICAg +aW50byB0aGUgcHJlLWFkZHJlc3NlZCwgcG9zdGFnZSBwYWlkIGVudmVsb3Blcy48YnI+DQogICAg +ICA8YnI+DQogICAgICAoVGhlc2UgZW52ZWxvcGVzIHdpbGwgYmUgc2VudCBkaXJlY3RseSB0byB5 +b3VyIGhvbWUsPGJyPg0KICAgICAgZG9ybSBvciBhcGFydG1lbnQgd2l0aCBjdXN0b21lcnMnIG5h +bWVzIGFuZDxicj4NCiAgICAgIGFkZHJlc3NlcyBhbHJlYWR5IHByaW50ZWQgb24gdGhlIGVudmVs +b3BlcyBhbG9uZzxicj4NCiAgICAgIHdpdGggcG9zdGFnZSBhbHJlYWR5IGFmZml4ZWQgdG8gdGhl +IGVudmVsb3Blcy4pPGJyPg0KICAgICAgPGJyPg0KICAgICAgPGk+PGI+U1RFUCAzOiZuYnNwOyA8 +L2I+PC9pPkxpY2sgYW5kIHNlYWwgdGhlc2UgZW52ZWxvcGVzIGFuZCB0aGVuIHNlbmQ8YnI+DQog +ICAgICB0aGVtIG91dCwgZGlyZWN0bHkgdG8gdGhlIGN1c3RvbWVycy4mbmJzcDsgSXQncyB0aGF0 +IHNpbXBsZSAhPGJyPg0KICAgICAgPGJyPg0KICAgICAgWW91IERPIE5PVCBwYXkgYW55IHBvc3Rh +Z2UgY29zdHMgdG8gc2VuZCBvdXQgdGhlc2U8YnI+DQogICAgICBwYW1waGxldHMuIFRoZSBwcmUt +YWRkcmVzc2VkLCBwb3N0YWdlIHBhaWQ8YnI+DQogICAgICBlbnZlbG9wZXMgd2lsbCBiZSBzZW50 +IGRpcmVjdGx5IHRvIHlvdXIgaG9tZSwgZG9ybTxicj4NCiAgICAgIG9yIGFwYXJ0bWVudC48YnI+ +DQogICAgICA8YnI+DQogICAgICBZb3Ugc2ltcGx5IGZvbGQgdGhlIHBhbXBobGV0cywgaW5zZXJ0 +IHRoZW0gaW4gdGhlPGJyPg0KICAgICAgZW52ZWxvcGVzIGFuZCBzZW5kIHRoZW0gcmlnaHQgb3V0 +ICE8YnI+DQogICAgICA8YnI+DQogICAgICBSZW1lbWJlciwgYWxsIG9mIHRoZSBwcm9jZXNzaW5n +IHdvcmsgY2FuIGVhc2lseSBiZTxicj4NCiAgICAgIGRvbmUgYXQgeW91ciBkZXNrIG9yIHJpZ2h0 +IGF0IHlvdXIga2l0Y2hlbiB0YWJsZSE8YnI+DQogICAgICA8YnI+DQogICAgICA8aT48Yj48Zm9u +dCBjb2xvcj0iI2ZmMDAwMCI+SU1QT1JUQU5UPGJyPg0KICAgICAgPC9mb250PjwvYj48L2k+V2Ug +PHU+ZG88L3U+IHByb3ZpZGUgeW91IHdpdGggdGhlIGFjdHVhbCBwYW1waGxldCB0aGF0PGJyPg0K +ICAgICAgeW91IHdpbGwgYmUgcHJvY2Vzc2luZyB3aGljaCBpcyBhIHNhbGVzIHBhbXBobGV0PGJy +Pg0KICAgICAgZm9yIG91ciBDcmVkaXQgUmVwYWlyIE1hbnVhbC4gT3VyIENyZWRpdCBSZXBhaXI8 +YnI+DQogICAgICBNYW51YWwgaXMgYSBiZXN0LXNlbGxpbmcgZmluYW5jaWFsIHByb2R1Y3QgdGhh +dDxicj4NCiAgICAgIG1hbnkgcGVvcGxlIGFyZSBvcmRlcmluZyBhbmQgdXNpbmcgdG8gbGVnYWxs +eTxicj4NCiAgICAgIGNsZWFyIHVwIHRoZWlyIG5lZ2F0aXZlIGNyZWRpdC4mbmJzcDsgQW5kIHNp +bmNlIHRoZTxicj4NCiAgICAgIGRlbWFuZCBmb3Igb3VyIENyZWRpdCBSZXBhaXIgTWFudWFsIGlz +IHNvPGJyPg0KICAgICAgT1ZFUldIRUxNSU5HLCB5b3Ugd2lsbCBoYXZlIHRoZSBvcHBvcnR1bml0 +eTxicj4NCiAgICAgIHRvIHByb2Nlc3MgYXMgbWFueSBwYW1waGxldHMgYXMgeW91ciBzY2hlZHVs +ZTxicj4NCiAgICAgIGNhbiBoYW5kbGUgITxicj4NCiAgICAgIDxicj4NCiAgICAgIFlvdSBjYW4g +cHJvY2VzcyAxMDAuLi41MDAuLi4xLDAwMDxicj4NCiAgICAgIG9yIGV2ZW4gMSw1MDAgcGFtcGhs +ZXRzIHBlciB3ZWVrLCB3ZWVrIGFmdGVyIHdlZWssPGJyPg0KICAgICAgbW9udGggYWZ0ZXIgbW9u +dGgsIHllYXIgYWZ0ZXIgeWVhciAuLi4gZm9yIGFzIGxvbmc8YnI+DQogICAgICBhcyB5b3Ugd2lz +aCB0byBwYXJ0aWNpcGF0ZSAhPGJyPg0KICAgICAgPGJyPg0KICAgICAgPGZvbnQgY29sb3I9IiMw +MDAwRkYiPjxiPjxpPkhPVyBNVUNIIE1PTkVZIENBTiBZT1UgRUFSTj88L2k+PC9iPjwvZm9udD48 +YnI+DQogICAgICBZT1UgV0lMTCBSRUNFSVZFIEEgRlVMTCAkMS4wMCBGT1IgRUFDSDxicj4NCiAg +ICAgIEFORCBFVkVSWSBQQU1QSExFVCBUSEFUIFlPVSBQUk9DRVNTITxicj4NCiAgICAgIDxicj4N +CiAgICAgIElmIHlvdSBwcm9jZXNzIDUwMCBwYW1waGxldHMgeW91IHdpbGwgcmVjZWl2ZSBhIGZ1 +bGw8YnI+DQogICAgICAkNTAwLjAwLi4uIElmIHlvdSBwcm9jZXNzIDEsMDAwIHBhbXBobGV0cyB5 +b3Ugd2lsbDxicj4NCiAgICAgIHJlY2VpdmUgYSBmdWxsICQxLDAwMC4wMC4uLiBpZiB5b3UgcHJv +Y2VzcyAxLDUwMDxicj4NCiAgICAgIHBhbXBobGV0cyB5b3Ugd2lsbCByZWNlaXZlIGEgZnVsbCAk +MSw1MDAuMDAuLi4gRXRjICE8YnI+DQogICAgICA8YnI+DQogICAgICA8L2ZvbnQ+PC9mb250Pjxm +b250IGZhY2U9IkFyaWFsIiBzaXplPSIyIj5XaGF0J3MgZXZlbiBiZXR0ZXIgYWJvdXQgb3VyDQog +ICAgICBwcm9ncmFtIGlzIHRoYXQgeW91PGJyPg0KICAgICAgTkVWRVIgaGF2ZSB0byB3b3JyeSBh +Ym91dCB0aGUgc2FsZSBvZiBvdXIgQ3JlZGl0PGJyPg0KICAgICAgUmVwYWlyIE1hbnVhbCBpbiBv +cmRlciB0byByZWNlaXZlIHlvdXIgJDEuMDAgcGVyPGJyPg0KICAgICAgcGFtcGhsZXQuIE91ciBw +cm9ncmFtIERPRVMgTk9UIFdPUksgT048YnI+DQogICAgICBDT01NSVNTSU9OISBZb3Ugd2lsbCBy +ZWNlaXZlIGEgRlVMTCAkMS4wMCBmb3I8YnI+DQogICAgICBlYWNoIGFuZCBldmVyeSBwYW1waGxl +dCB0aGF0IHlvdSBwcm9jZXNzPGJyPg0KICAgICAgUkVHQVJETEVTUyBpZiBhbnkgc2FsZXMgYXJl +IG1hZGUhIEV2ZW4gaWYgeW91PGJyPg0KICAgICAgcHJvY2VzcyAxLDUwMCBwYW1waGxldHMgYW5k +IG5vIHNhbGVzIGFyZSBtYWRlLDxicj4NCiAgICAgIHlvdSB3aWxsIHN0aWxsIGVhcm4gQSBGVUxM +ICQxLDUwMC4wMCEgSXQncyBzaW1wbGUsIHByb2Nlc3M8YnI+DQogICAgICAxLDUwMCBwYW1waGxl +dHMsIGFuZCByZWNlaXZlIEEgRlVMTCAkMSw1MDAuMDAgZm9yPGJyPg0KICAgICAgeW91ciB0aW1l +IGFuZCBlZmZvcnQhIFByb2Nlc3NpbmcgcGF5bWVudHMgYW5kPGJyPg0KICAgICAgYWRkaXRpb25h +bCBwcm9jZXNzaW5nIG1hdGVyaWFscyB3aWxsIGNvbnRpbnVlIHRvIGFycml2ZTxicj4NCiAgICAg +IGF0IHlvdXIgaG9tZSwgZG9ybSBvciBhcGFydG1lbnQgZm9yIGFzIGxvbmcgYXMgeW91PGJyPg0K +ICAgICAgd2lzaCB0byBjb250aW51ZSBwYXJ0aWNpcGF0aW5nIGluIHRoZSBwcm9ncmFtITxicj4N +CiAgICAgIDxicj4NCiAgICAgIFRoYXQncyByaWdodCwgeW91IGNhbiBhbHdheXMgaGF2ZSBtb25l +eSBjb21pbmcgaW48YnI+DQogICAgICB3ZWVrIGFmdGVyIHdlZWsgYmVjYXVzZSBwcm9jZXNzaW5n +IHBheW1lbnRzIGFuZDxicj4NCiAgICAgIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBtYXRlcmlhbHMg +d2lsbCBjb250aW51ZSB0bzxicj4NCiAgICAgIGFycml2ZSBhdCB5b3VyIGhvbWUsIGRvcm0gb3Ig +YXBhcnRtZW50IGZvciBhcyBsb25nPGJyPg0KICAgICAgYXMgeW91IHdpc2ggdG8gcGFydGljaXBh +dGUhPGJyPg0KICAgICAgPGJyPg0KICAgICAgPC9mb250Pjxmb250IHNpemU9IjIiPjxmb250IGZh +Y2U9IkFyaWFsIiBzaXplPSIyIj5Ib25lc3RseSwgdGhlcmUgaXMgTk8NCiAgICAgIEdVRVNTV09S +Sy4mbmJzcDsgT3VyIHByb2dyYW08YnI+DQogICAgICBoYXMgPC9mb250Pjxmb250IGZhY2U9IkFy +aWFsIj5iZWVuIGFyb3VuZCBmb3Igc2V2ZXJhbCB5ZWFycyBhbmQgaXMgdmVyeTxicj4NCiAgICAg +IHN1Y2Nlc3NmdWwhPGJyPg0KICAgICAgPGI+PGJyPg0KICAgICAgPGZvbnQgY29sb3I9IiMwMDAw +RkYiPjxpPkZBQ1Q8L2k+PC9mb250Pjxicj4NCiAgICAgIDwvYj5FdmVuIHdvcmtpbmcgc2xvd2x5 +LCB5b3UgY291bGQgc3RpbGwgZWFybiBhIE1VQ0g8YnI+DQogICAgICBCRVRURVIgd2Vla2x5IGlu +Y29tZSB0aGFuIG1vc3QgcmVndWxhciA5OjAwIEFNIHRvPGJyPg0KICAgICAgNTowMCBQTSBqb2Jz +ITxicj4NCiAgICAgIFRIRVJFIElTIE5PIEVYUEVSSUVOQ0UgUkVRVUlSRUQ8YnI+DQogICAgICBU +TyBQQVJUSUNJUEFURSBJTiBPVVIgUFJPR1JBTTxicj4NCiAgICAgIEFueW9uZSwgeW91bmcgb3Ig +b2xkLCBtYWxlIG9yIGZlbWFsZSwgYW55d2hlcmUgaW48YnI+DQogICAgICB0aGUgVW5pdGVkIFN0 +YXRlcyBjYW4gZWFzaWx5IGVhcm4gZ3JlYXQgbW9uZXk8YnI+DQogICAgICBwYXJ0aWNpcGF0aW5n +IGluIG91ciBQYW1waGxldCBQcm9jZXNzaW5nIFByb2dyYW0hPGJyPg0KICAgICAgVGhlIHJlYXNv +biB3aHkgb3VyIHByb2dyYW0gZG9lcyBub3QgcmVxdWlyZSBhbnk8YnI+DQogICAgICBleHBlcmll +bmNlIGlzIHNpbXBsZS4uLiBpdCBkb2VzIG5vdCB0YWtlIGFueSBwcmV2aW91czxicj4NCiAgICAg +IGV4cGVyaWVuY2UgdG8gZm9sZCBhIHBhbXBobGV0LCBpbnNlcnQgaXQgaW50byBhbiBlbnZlbG9w +ZSw8YnI+DQogICAgICBhbmQgc2VhbCBhbiBlbnZlbG9wZS4gUGx1cywgb3VyIHByb2dyYW0gaXMg +ZXNwZWNpYWxseTxicj4NCiAgICAgIGJlbmVmaWNpYWwgZm9yIHBlb3BsZSB3aG8gbmVlZCB0byBl +YXJuIGEgc2VyaW91czxicj4NCiAgICAgIGV4dHJhIGluY29tZSBidXQgbWlnaHQgbm90IGhhdmUg +dGhlIHNwYXJlIHRpbWUgZm9yPGJyPg0KICAgICAgYSBzZWNvbmQgam9iLjxicj4NCiAgICAgIEFz +IHN0YXRlZCwganVzdCBhIGZldyBob3VycyBwZXIgZGF5IGNvdWxkIHBvc3NpYmx5PGJyPg0KICAg +ICAgZWFybiB5b3Ugd2VsbCBvdmVyICQ1MDAuMDAgcGVyIHdlZWsuLi4gTk8gSk9LRSE8YnI+DQog +ICAgICBKdXN0IGltYWdpbmUgaG93IG5pY2UgaXQgd291bGQgYmUgaWYgeW91IGNvdWxkPGJyPg0K +ICAgICAgZWFybiBhbiBleHRyYSAkNTAwLjAwIHRvICQxLDUwMC4wMCBwZXIgd2Vlazxicj4NCiAg +ICAgIHdvcmtpbmcgZnJvbSB5b3VyIGhvbWUuLi5ubyBtb3JlIGFubm95aW5nPGJyPg0KICAgICAg +Ym9zcy4uLm5vIG1vcmUgaGVjdGljIHJ1c2ggaG91ciBjb21tdXRpbmcuLi5ubzxicj4NCiAgICAg +IG1vcmUgc3RyZXNzZnVsIDkgdG8gNSBqb2IsIGFuZCBubyBtb3JlIGhlYWRhY2hlcyAhPGJyPg0K +ICAgICAgPGJyPg0KICAgICAgPGI+PGk+PGZvbnQgY29sb3I9IiMwMDAwRkYiPkZBQ1Q8L2ZvbnQ+ +PC9pPjxicj4NCiAgICAgIDwvYj5QcmFjdGljYWxseSBldmVyeSB0eXBlIG9mIHBlcnNvbiBjYW4g +YmVuZWZpdDxicj4NCiAgICAgIGZpbmFuY2lhbGx5IGZyb20gb3VyIFBhbXBobGV0IFByb2Nlc3Np +bmcgUHJvZ3JhbS48YnI+DQogICAgICBJTVBPUlRBTlQgTEVHQUwgSU5GT1JNQVRJT048YnI+DQog +ICAgICBUaGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIG91ciBDcmVkaXQgUmVwYWlyPGJyPg0K +ICAgICAgTWFudWFsIGlzIDEwMCUgTGVnYWwgYW5kIExlZ2l0aW1hdGUhIEluIGZhY3QsPGJyPg0K +ICAgICAgdGhlcmUgYXJlIGh1bmRyZWRzIG9mIGxhd3llcnMgYW5kIGF0dG9ybmV5cyBhbGw8YnI+ +DQogICAgICBvdmVyIHRoZSBjb3VudHJ5IHVzaW5nIHRoaXMgdmFsdWFibGUgaW5mb3JtYXRpb248 +YnI+DQogICAgICBhbmQgY2hhcmdpbmcgcGVvcGxlIGJpZyBtb25leSB0byByZW1vdmUgbmVnYXRp +dmU8YnI+DQogICAgICBhbmQgaW5jb3JyZWN0IGl0ZW1zIGZyb20gdGhlaXIgY3JlZGl0IGZpbGVz +ITxicj4NCiAgICAgIEhvd2V2ZXIsIG91ciBDcmVkaXQgUmVwYWlyIE1hbnVhbCBleHBsYWlucyBo +b3c8YnI+DQogICAgICBwZW9wbGUgY2FuIGRvIHRoZSBWRVJZIFNBTUUgVEhJTkcgdGhhdCB0aGVz +ZTxicj4NCiAgICAgIGNvc3RseSBhdHRvcm5leXMgYXJlIGRvaW5nIGV4Y2VwdCBvdXIgY3JlZGl0 +PGJyPg0KICAgICAgcmVwYWlyIG1hbnVhbCBzaG93cyBwZW9wbGUgaG93IHRvIHJlcGFpciB0aGVp +cjxicj4NCiAgICAgIGNyZWRpdCBGQVNULCBFQVNZIGFuZCBmb3IgRlJFRSB3aXRob3V0IGhhdmlu +ZyB0bzxicj4NCiAgICAgIGhpcmUgYW4gYXR0b3JuZXkgITxicj4NCiAgICAgIDxicj4NCiAgICAg +IE5vdyBpcyB0aGUgdGltZSwgdGhlcmUgYXJlIFRFTlMtT0YtTUlMTElPTlMgb2Y8YnI+DQogICAg +ICBBbWVyaWNhbnMgd2l0aCBiYWQgY3JlZGl0IHRoYXQgd291bGQgcHJvYmFibHkgbG92ZTxicj4N +CiAgICAgIHRvIHJlY2VpdmUgb3VyIENyZWRpdCBSZXBhaXIgTWFudWFsICE8YnI+DQogICAgICBU +aGVyZWZvcmUsIGlmIHlvdSBhcmUgc2VyaW91cyBhYm91dCBkZXZvdGluZyBhPGJyPg0KICAgICAg +ZmV3IGhvdXJzIHBlciB3ZWVrIHRvd2FyZHMgdGhlIG9wcG9ydHVuaXR5IG9mPGJyPg0KICAgICAg +ZWFybmluZyBhbiBob25lc3QgZXh0cmEgaW5jb21lLCBvdXIgJDEuMDAgUGFtcGhsZXQ8YnI+DQog +ICAgICBQcm9jZXNzaW5nIFByb2dyYW0gaXMgUEVSRkVDVCBGT1IgWU9VITxicj4NCiAgICAgIDxi +cj4NCiAgICAgIDwvZm9udD48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9IiNGRjAwMDAiPjxiPi0t +LS0tLS0tLSZndDsgSWYgeW91IGhhdmUgdGhlDQogICAgICBERVNJUkUuLi48YnI+DQogICAgICA8 +L2I+PC9mb250Pjxmb250IGZhY2U9IkFyaWFsIj50byBwYXJ0aWNpcGF0ZSwgd2Ugd2lsbCBzZW5k +IHlvdSBhIFN0YXJ0ZXIncw0KICAgICAgS2l0PGJyPg0KICAgICAgY29udGFpbmluZyB0aGUgaW5z +dHJ1Y3Rpb25zIG5lY2Vzc2FyeSBmb3IgeW91IHRvPGJyPg0KICAgICAgYmVnaW4gcGFydGljaXBh +dGluZyBJTU1FRElBVEVMWSBpbiBvdXIgUGFtcGhsZXQ8YnI+DQogICAgICBQcm9jZXNzaW5nIFBy +b2dyYW0gITxicj4NCiAgICAgIDxicj4NCiAgICAgIFBsdXMsIHlvdXIgU3RhcnRlcnMgS2l0IGFs +c28gY29udGFpbnMgWU9VUiBWRVJZPGJyPg0KICAgICAgT1dOIGNvcHkgb2YgQ3JlZGl0IFJlcGFp +ciBNYW51YWwgITxicj4NCiAgICAgIDxicj4NCiAgICAgIFRoYXQncyByaWdodCB5b3UgY2FuIHVz +ZSBvdXIgYmVzdC1zZWxsaW5nIG1hbnVhbDxicj4NCiAgICAgIHRvIGxlZ2FsbHkgY2xlYXIgdXAg +YW5kIHJlcGFpciBhbnkgbmVnYXRpdmUgY3JlZGl0PGJyPg0KICAgICAgdGhhdCB5b3UgbWF5IGhh +dmUgITxicj4NCiAgICAgIDxicj4NCiAgICAgIFRoaXMgbWFudWFsIGlzIGluY2x1ZGVkIGZvciBi +ZWNvbWluZyBhPGJyPg0KICAgICAgbWVtYmVyIG9mIG91ciBQYW1waGxldCBQcm9jZXNzaW5nIFBy +b2dyYW0gITxicj4NCiAgICAgIDxicj4NCiAgICAgIFRoZXJlZm9yZSwgdG8gZ2V0IHN0YXJ0ZWQg +aW1tZWRpYXRlbHksIGFsbCB0aGF0PGJyPg0KICAgICAgb3VyIGNvbXBhbnkgcmVxdWlyZXMgaXMg +YSBvbmUtdGltZSByZWZ1bmRhYmxlPGJyPg0KICAgICAgb3JkZXItcHJvY2Vzc2luZyBmZWUgb2Yg +b25seSAkNDUuPGJyPg0KICAgICAgUGxlYXNlIHVuZGVyc3RhbmQsIHdlIGNhbm5vdCBhZmZvcmQg +dG88YnI+DQogICAgICBzZW5kIG91dCBhIHBhY2thZ2Ugb2YgdmFsdWFibGUgbWF0ZXJpYWxzIHRv +PGJyPg0KICAgICAgZXZlcnlvbmUgaW50ZXJlc3RlZCBpbiBvdXIgcHJvZ3JhbS4gQW5kIGFsc28g +a2VlcDxicj4NCiAgICAgIGluIG1pbmQgdGhhdCBvbmNlIHlvdSBwcm9jZXNzIDEwMCBwYW1waGxl +dHMgeW91PGJyPg0KICAgICAgd2lsbCBoYXZlIGFscmVhZHkgZWFybmVkIHlvdXIgJDQ1IGJhY2sg +YW5kIGFyZTxicj4NCiAgICAgIGxlZnQgd2l0aCBhbiBleHRyYSAkNTUgcHJvZml0ICEhITxicj4N +CiAgICAgIDxicj4NCiAgICAgIFdlIG11c3QgY2hhcmdlIGEgc21hbGwgcHJvY2Vzc2luZyBmZWUg +dG88YnI+DQogICAgICBlbnN1cmUgdGhhdCBvbmx5IHNlcmlvdXMgaW5kaXZpZHVhbHMgaW50ZW5k +IHRvPGJyPg0KICAgICAgcGFydGljaXBhdGUgaW4gb3VyIHByb2dyYW0uJm5ic3A7IEtlZXAgaW4g +bWluZCwgeW91PGJyPg0KICAgICAgTkVWRVIgaGF2ZSB0byBwYXkgdXMgYW55IG90aGVyIGZlZXMg +YW5kIHlvdSBjYW48YnI+DQogICAgICBwYXJ0aWNpcGF0ZSBmb3IgYXMgbG9uZyBhcyB5b3Ugd2lz +aCEgVGhpcyBmZWU8YnI+DQogICAgICBzaW1wbHkgYXNzdXJlcyBvdXIgY29tcGFueSB0aGF0IHlv +dSBhcmUgaW5kZWVkPGJyPg0KICAgICAgc2VyaW91cyBhYm91dCBvdXIgcHJvZ3JhbSBhbmQgdGhl +IG9wcG9ydHVuaXR5IHRvPGJyPg0KICAgICAgbWFrZSBnb29kIG1vbmV5IHdvcmtpbmcgZnJvbSB5 +b3VyIGhvbWUuIFNvcnJ5LCB3ZTxicj4NCiAgICAgIENBTiBOT1QgcHJvY2VzcyB5b3VyIG9yZGVy +IGZvcm0gd2l0aG91dCB0aGU8YnI+DQogICAgICBvbmUtdGltZSBwcm9jZXNzaW5nIGZlZSBzaW5j +ZSB0aGVyZSBhcmUgZmFyPGJyPg0KICAgICAgdG9vIG1hbnkgc2VyaW91cyBpbmRpdmlkdWFscyB3 +aWxsaW5nIHRvIHBheSB0aGlzPGJyPg0KICAgICAgc21hbGwgb25lLXRpbWUgZmVlIGluIG9yZGVy +IHRvIHBhcnRpY2lwYXRlIGluIG91cjxicj4NCiAgICAgIGhpZ2ggcHJvZml0IHdvcmstYXQtaG9t +ZSBwcm9ncmFtLiBUaGVyZWZvcmUsIGFsbDxicj4NCiAgICAgIHlvdSBoYXZlIHRvIGRvIGlzIGp1 +c3QgY29tcGxldGUsIHByaW50LCBzaWduLCBhbmQ8YnI+DQogICAgICBzZW5kIGluIHRoZSBPcmRl +ciBGb3JtIChGT1JNIEFHTS0yMjI6IDE2LkYpLjxicj4NCiAgICAgIDxicj4NCiAgICAgIFBsZWFz +ZSwgYmUgc3VyZSB0byBjb21wbGV0ZSB0aGUgT3JkZXIgRm9ybSBJTjxicj4NCiAgICAgIEZVTEws +IGxlZ2libGUsIHdpdGggeW91ciBjb3JyZWN0IHNoaXBwaW5nIGFkZHJlc3M8YnI+DQogICAgICBp +biBvcmRlciB0byBwcmV2ZW50IGFueSBwcm9jZXNzaW5nIGRlbGF5cyBpbjxicj4NCiAgICAgIHRo +ZSBzaGlwbWVudCBvZiB5b3VyIHBhY2thZ2UuIFRoYXQncyByaWdodCwgaWYgeW91PGJyPg0KICAg +ICAgYXJlIHJlYWxseSBsb29raW5nIGZvciBhIDEwMCUgTEVHQUwgYW5kIExFR0lUSU1BVEU8YnI+ +DQogICAgICBob21lIGJhc2VkIGluY29tZSBvcHBvcnR1bml0eSB3ZSBjYW4gaG9uZXN0bHkgc2F5 +PGJyPg0KICAgICAgdGhhdCB5b3UgaGF2ZSBmaW5hbGx5IGZvdW5kIHRoZSByaWdodCBjb21wYW55 +IHdpdGg8YnI+DQogICAgICBhbiBob25lc3QgYW5kIHByb3ZlbiBtb25leSBtYWtpbmcgcHJvZ3Jh +bSE8YnI+DQogICAgICA8YnI+DQogICAgICBQLlMuIEtOT1cgQSBGUklFTkQgV0hPIE1JR0hUIEJF +IElOVEVSRVNURUQ/PGJyPg0KICAgICAgUFJJTlQgQSBDT1BZIEZPUiBBTEwgWU9VUiBGUklFTkRT +IEFORCBGQU1JTFkuPGJyPg0KICAgICAgPC9mb250Pg0KICAgICAgPGZvbnQgZmFjZT0iQXJpYWwi +PkFORCA8L2ZvbnQ+PGZvbnQgY29sb3I9IiMwMDAwRkYiIGZhY2U9IkFyaWFsIj48Yj48aT5ERURV +Q1QNCiAgICAgICQxMCBGUk9NIFlPVVIgT1JERVIuLi48YnI+DQogICAgICA8YnI+DQogICAgICA8 +L2k+PC9iPjwvZm9udD48Zm9udCBmYWNlPSJBcmlhbCI+QXMgYSBib251cywgZGVkdWN0ICQxMCBm +b3IgZWFjaCAmYW1wOw0KICAgICAgZXZlcnkgYWRkaXRpb25hbDxicj4NCiAgICAgIG9yZGVyIGZv +ciB0aGUgU3RhcnRlciBJbnRlcmFjdGl2ZSBDRCBST00gZnJvbTxicj4NCiAgICAgIGFueWJvZHkg +WyBzdWNoIGFzIGZyaWVuZHMgYW5kIGZhbWlseSBdPGJyPg0KICAgICAgYWNjb21wYW5pZWQgd2l0 +aCB0aGlzIHByb2Nlc3NpbmcgZmVlLiZuYnNwOyBGb3IgZWFjaCZuYnNwOzxicj4NCiAgICAgIGFk +ZGl0aW9uYWwgb3JkZXIsPGZvbnQgY29sb3I9IiNmZjAwMDAiPiA8L2ZvbnQ+PGk+PGZvbnQgY29s +b3I9IiMwMDAwRkYiPjxiPnN1YnRyYWN0DQogICAgICAkMTA8L2I+PC9mb250PjwvaT4gZnJvbSB5 +b3VyPGJyPg0KICAgICAgb3JkZXIuIEp1c3QgaGF2ZSB0aGVtIHByaW50LCBjb21wbGV0ZSBhbmQg +RkFYIG9yPGJyPg0KICAgICAgbWFpbCBpbiB0aGUgb3JkZXIgZm9ybSBiZWxvdyAhJm5ic3A7IE1h +a2Ugc3VyZSB0aGF0IHlvdXI8YnI+DQogICAgICBmcmllbmRzIGFuZCBmYW1pbHkgcHV0IHlvdXIg +bmFtZSBvbiB0aGUgb3JkZXIgZm9ybTxicj4NCiAgICAgIGFzIHRoZWlyIHJlZmVycmFsLjxicj4N +CiAgICAgIDxicj4NCiAgICAgIDwvZm9udD48Yj48Zm9udCBjb2xvcj0iIzAwMDBGRiIgZmFjZT0i +QXJpYWwiPlJlbWVtYmVyLCB5b3UgY2FuIHBheSBieQ0KICAgICAgY3JlZGl0IGNhcmQsIG1vbmV5 +IG9yZGVyLDxicj4NCiAgICAgIGNhc2gsIG9yIGNoZWNrLWJ5LWZheC4mbmJzcDsgRm9yIGZhc3Rl +c3QgcHJvY2Vzc2luZyw8YnI+DQogICAgICByZW1pdCBwYXltZW50cyB2aWEgb3VyIGNoZWNrLWJ5 +LWZheCBwYXltZW50PGJyPg0KICAgICAgcHJvY2Vzc29yLg0KICAgICAgPC9mb250Pjxmb250IGNv +bG9yPSIjMDAwMDAwIiBmYWNlPSJBcmlhbCI+PGJyPg0KICAgICAgPC9mb250PjwvYj48Zm9udCBm +YWNlPSJBcmlhbCI+PGJyPg0KICAgICAgUGxlYXNlIG1ha2Ugc3VyZSB0aGUgb3JkZXIgZm9ybSBp +cyBjb21wbGV0ZWQgd2l0aDxicj4NCiAgICAgIGFjY3VyYXRlIGluZm9ybWF0aW9uLCBhcyBpbmNv +cnJlY3QgaW5mb3JtYXRpb24gbWF5PGJyPg0KICAgICAgZ3JlYXRseSBkZWxheSB5b3VyIG9yZGVy +Ljxicj4NCiAgICAgIDxicj4NCiAgICAgIDwvZm9udD48Yj48Zm9udCBjb2xvcj0iIzAwMDBGRiIg +ZmFjZT0iQXJpYWwiPi0gVG8gT3JkZXIgVXNpbmcgQ2hlY2stYnktRmF4DQogICAgICAtPGJyPg0K +ICAgICAgPC9mb250PjwvYj48Zm9udCBmYWNlPSJBcmlhbCI+Rm9yIGZhc3Rlc3QgZGVsaXZlcnks +IHBsZWFzZSBGQVggdGhlDQogICAgICBjb21wbGV0ZWQ8YnI+DQogICAgICBmb3JtIGFuZCBhIGxl +Z2libGUgY29weSBvZiB5b3VyIHBlcnNvbmFsIG9yIGJ1c2luZXNzPGJyPg0KICAgICAgY2hlY2sg +aW4gdGhlIGFtb3VudDwvZm9udD48L2ZvbnQ+PGZvbnQgZmFjZT0iQXJpYWwiPiA8Zm9udCBzaXpl +PSIyIj5vZg0KICAgICAgJDUwLjAwIHBheWFibGUgdG8gQUdNIGhvbGRpbmdzPGJyPg0KICAgICAg +PC9mb250Pjxmb250IHNpemU9IjIiPnRvIG91ciBUT0xMLUZSRUUgZmF4IG51bWJlcjwvZm9udD48 +L2ZvbnQ+PGZvbnQgc2l6ZT0iMiI+PGZvbnQgZmFjZT0iQXJpYWwiPiwNCiAgICAgIDg3Ny04Nzkt +NjUwOS48YnI+DQogICAgICA8YnI+DQogICAgICA8L2ZvbnQ+PGZvbnQgY29sb3I9IiMwMDAwRkYi +IGZhY2U9IkFyaWFsIj48Yj4tIFRvIEZheCBZb3VyIE9yZGVyIFVzaW5nDQogICAgICBZb3VyIENy +ZWRpdCBDYXJkIC08YnI+DQogICAgICA8L2I+PC9mb250Pjxmb250IGZhY2U9IkFyaWFsIj5GQVgg +dGhlIGNvbXBsZXRlZCBmb3JtIGFuZCB5b3VyIGNvbXBsZXRlDQogICAgICBjcmVkaXQgY2FyZDxi +cj4NCiAgICAgIGluZm9ybWF0aW9uIGluY2x1ZGluZyB5b3VyIG5hbWUsIGNyZWRpdCBjYXJkIG51 +bWJlciw8YnI+DQogICAgICA8L2ZvbnQ+PGZvbnQgZmFjZT0iQXJpYWwiPmFuZCBleHBpcmF0aW9u +IGRhdGU8L2ZvbnQ+PC9mb250Pjxmb250IGZhY2U9IkFyaWFsIj4NCiAgICAgIDxmb250IHNpemU9 +IjIiPnRvIDg3Ny04NzktNjUwOS48YnI+DQogICAgICA8YnI+DQogICAgICA8L2ZvbnQ+PC9mb250 +Pjxmb250IHNpemU9IjIiPjxiPjxmb250IGNvbG9yPSIjMDAwMEZGIiBmYWNlPSJBcmlhbCI+LSBG +b3INCiAgICAgIFBvc3RhbCBNYWlsIE9yZGVycyAtPGJyPg0KICAgICAgPC9mb250PjwvYj48Zm9u +dCBmYWNlPSJBcmlhbCI+UG9zdGFsIE1haWwgQ2hlY2ssIENyZWRpdCBDYXJkLCBvciBNb25leQ0K +ICAgICAgT3JkZXJzPGJyPg0KICAgICAgb2YgVVMgJDUwIHRvIHRoZSBhZGRyZXNzIGJlbG93LiAo +TWFrZSBjaGVja3MgcGF5YWJsZTxicj4NCiAgICAgIHRvIEFHTSBIb2xkaW5nczwvZm9udD48L2Zv +bnQ+PGZvbnQgZmFjZT0iQXJpYWwiPjwvZm9udD48Zm9udCBzaXplPSIyIj48Zm9udCBmYWNlPSJB +cmlhbCI+KTwvZm9udD4NCiAgICAgIDxibG9ja3F1b3RlPg0KICAgICAgICA8cD48Zm9udCBmYWNl +PSJBcmlhbCIgY29sb3I9IiMwMDAwRkYiPjxiPkFHTSBIT0xESU5HUzxicj4NCiAgICAgICAgQVRU +TjogQS4gTWlsbGVyPGJyPg0KICAgICAgICBQcm9jZXNzaW5nIERlcGFydG1lbnQ8YnI+DQogICAg +ICAgIFBPIEJPWCAzMjE8YnI+DQogICAgICAgIEhhc3RpbmdzLCBNSSA0OTA1ODwvYj48L2ZvbnQ+ +PC9wPg0KICAgICAgPC9ibG9ja3F1b3RlPg0KICAgICAgPC9mb250Pg0KICAgICAgPHA+PGI+PGZv +bnQgY29sb3I9IiNGRjAwMDAiIGZhY2U9IkFyaWFsIiBzaXplPSIzIj48dT5QcmludCBiZWxvdyB0 +aGlzIGxpbmUgb25seTwvdT48L2ZvbnQ+PGk+PGZvbnQgY29sb3I9IiNGRjAwMDAiIA0KZmFjZT0i +QXJpYWwiPg0KICAgICAgPGJyPg0KICAgICAgPC9mb250PjwvaT48L2I+PGZvbnQgc2l6ZT0iMiI+ +PGZvbnQgZmFjZT0iQXJpYWwiPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS08YnI+DQogICAgICA8L2ZvbnQ+PC9mb250PjxiPjxpPjxmb250IGZhY2U9 +IkFyaWFsIiBjb2xvcj0iIzAwMDBGRiIgc2l6ZT0iMiI+DQogICAgICBGb3IgbW9yZSBpbmZvcm1h +dGlvbiwgY2FsbDxicj4NCiAgICAgIHRvbGwgZnJlZSA4NzctODkyLTc1NzA8L2ZvbnQ+PC9pPjwv +Yj48Zm9udCBmYWNlPSJBcmlhbCI+PGZvbnQgc2l6ZT0iMiI+DQogICAgICA8YnI+DQogICAgICA8 +YnI+DQogICAgICA8YnI+DQogICAgICA8Yj48aT48Zm9udCBjb2xvcj0iIzAwMDBGRiI+PHU+LSBT +dGFydGVyIEtpdCBSZXF1ZXN0IEZvcm08L3U+PC9mb250PjwvaT4gLTxicj4NCiAgICAgIDwvYj48 +L2ZvbnQ+DQogICAgICA8L2ZvbnQ+PGk+PGZvbnQgZmFjZT0iQXJpYWwiIHNpemU9IjEiPiogRk9S +TSBBR00tMjIyOiAxNi5GIChVU0UgMjAwMi0yMDAzKSAqPC9mb250PjwvaT48Zm9udCBzaXplPSIy +Ij48Zm9udCANCmZhY2U9IkFyaWFsIj48YnI+DQogICAgICA8YnI+DQogICAgICBQTEVBU0UgUFJJ +TlQgQ0xFQVJMWSAtIFByb3ZpZGUgdXMgd2l0aCB0aGUgY29ycmVjdDxicj4NCiAgICAgIE1haWxp +bmcgQWRkcmVzcyBUbyBTaGlwIFlvdXIgU3RhcnRlcidzIEtpdC48YnI+DQogICAgICA8YnI+DQog +ICAgICA8YnI+DQogICAgICA8YnI+DQogICAgICA8YnI+DQogICAgICBOYW1lOl9fX19fX19fX19f +X19fX19fX19fX19fX19fX19fX188YnI+DQogICAgICA8YnI+DQogICAgICA8YnI+DQogICAgICA8 +YnI+DQogICAgICBBZGRyZXNzOl9fX19fX19fX19fX19fX19fX19fIEFwdC4jOl9fX188YnI+DQog +ICAgICA8YnI+DQogICAgICA8YnI+DQogICAgICA8YnI+DQogICAgICBDaXR5Ol9fX19fX19fX19f +X19fX19fX19fX19fX19fX19fX19fXzxicj4NCiAgICAgIDxicj4NCiAgICAgIDxicj4NCiAgICAg +IDxicj4NCiAgICAgIFN0YXRlOl9fX19fX19fX19fX19fXw0KICAgICAgPC9mb250Pjxmb250IGZh +Y2U9IkFyaWFsIj4gWmlwIGNvZGUgX19fX19fX19fXzxicj4NCiAgICAgIDxicj4NCiAgICAgIDxi +cj4NCiAgICAgIDxicj4NCiAgICAgIERheSBQaG9uZTooX19fX19fX18pX19fX19fX19fLV9fX19f +X19fXzxicj4NCiAgICAgIDxicj4NCiAgICAgIDxicj4NCiAgICAgIDxicj4NCiAgICAgIEFsdC4m +bmJzcDsgUGhvbmU6KF9fX19fX19fKV9fX19fX19fXy1fX19fX19fX188YnI+DQogICAgICA8YnI+ +DQogICAgICA8YnI+DQogICAgICA8YnI+DQogICAgICBCaXJ0aGRhdGU6X19fX19fL19fX19fX18v +X19fX19fXzxicj4NCiAgICAgIDwvZm9udD48L2ZvbnQ+PGk+PGZvbnQgc2l6ZT0iMSIgZmFjZT0i +QXJpYWwgTmFycm93Ij5Zb3UgTXVzdCBCZSBBdCBMZWFzdA0KICAgICAgMTggWWVhcnMgT2YgQWdl +IFRvIFBhcnRpY2lwYXRlPC9mb250PjwvaT48Zm9udCBzaXplPSIyIiBmYWNlPSJBcmlhbCI+PGI+ +PGJyPg0KICAgICAgPGJyPg0KICAgICAgPGJyPg0KICAgICAgPGJyPg0KICAgICAgPC9iPlByaW50 +IEVtYWlsIEFkZHJlc3NfX19fX19fX19fX0BfX19fX18uX19fXzxicj4NCiAgICAgIA0KJm5ic3A7 +Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i +c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm4NCmJzcDsmbmJz +cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgIDwvZm9udD48Zm9u +dCBzaXplPSIxIiBmYWNlPSJBcmlhbCBOYXJyb3ciPjxpPlBsZWFzZSBQcmludCBDYXJlZnVsbHk8 +L2k+PC9mb250Pjxmb250IHNpemU9IjIiPjxmb250IGZhY2U9IkFyaWFsIj48YnI+DQogICAgICA8 +YnI+DQogICAgICA8YnI+DQogICAgICA8YnI+DQogICAgICBWZXJpZnkgRW1haWwgQWRkcmVzc19f +X19fX19fX19AX19fX19fLl9fX19fPGJyPg0KICAgICAgPC9mb250PjwvZm9udD48Zm9udCBzaXpl +PSIyIj48Zm9udCANCmZhY2U9IkFyaWFsIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm +bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz +cDsmbmJzcDsmbg0KYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw +OyZuYnNwOyZuYnNwOw0KICAgICAgPC9mb250PjwvZm9udD48Zm9udCBzaXplPSIxIiBmYWNlPSJB +cmlhbCBOYXJyb3ciPjxpPlBsZWFzZSBQcmludCBDYXJlZnVsbHk8L2k+PC9mb250Pjxmb250IHNp +emU9IjIiPjxmb250IA0KZmFjZT0iQXJpYWwiPjxicj4NCiAgICAgIDxicj4NCiAgICAgIDxicj4N +CiAgICAgIDxicj4NCiAgICAgIFNJR05BVFVSRV9fX19fX19fX19fX19fX19fX19fX19fX19fX19f +X19fXzxicj4NCiAgICAgIA0KPC9mb250PjwvZm9udD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm +bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz +cDsmbmJzcDsmbmJzcDsmDQpuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgPGk+ +PGZvbnQgZmFjZT0iQXJpYWwiIHNpemU9IjEiPlJlcXVpcmVkIGZvciBBTEwgb3JkZXJzPC9mb250 +PjwvaT48Zm9udCBzaXplPSIyIj48Zm9udCBmYWNlPSJBcmlhbCI+PGJyPg0KICAgICAgPGJyPg0K +ICAgICAgPGJyPg0KICAgICAgPGJyPg0KICAgICAgPC9mb250Pjxmb250IGZhY2U9IkFyaWFsIj5U +b2RheSdzIERhdGUgX19fX18vX19fX18vX19fX188L2ZvbnQ+PGZvbnQgZmFjZT0iQXJpYWwiPjxi +cj4NCiAgICAgIDxicj4NCiAgICAgIDxicj4NCiAgICAgIDxicj4NCiAgICAgIENoZWNrIE9yZGVy +czxicj4NCiAgICAgIDxicj4NCiAgICAgIFlvdSBtdXN0IGF0dGFjaCBhIGxlZ2libGUgY29weSBv +ZiB5b3VyPGJyPg0KICAgICAgcGVyc29uYWwgb3IgYnVzaW5lc3MgY2hlY2sgJmFtcDsgY29tcGxl +dGU8YnI+DQogICAgICB0aGUgc2VjdGlvbiBiZWxvdy48YnI+DQogICAgICA8YnI+DQogICAgICA8 +YnI+DQogICAgICA8L2ZvbnQ+PGZvbnQgZmFjZT0iQXJpYWwiPkFMTCBOVU1CRVJTIE9GIENIRUNL +X19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPg0KICAgICAgPGJyPg0KICAgICAgPGJyPg0K +ICAgICAgUGxlYXNlIHByaW50IGFsbCBudW1iZXJzIGF0IGNoZWNrIGJvdHRvbSBmcm9tPGJyPg0K +ICAgICAgbGVmdCB0byByaWdodC4gRXhjbHVkZSBzeW1ib2xzIGFuZCBzcGFjZXMgYW5kIGJlPGJy +Pg0KICAgICAgc3VyZSB0byBlbmNsb3NlIGNoZWNrIHdpdGggRkFYIG9yIHBvc3RhbCBvcmRlcnMu +PGJyPg0KICAgICAgQ2hlY2tzIG11c3QgYmUgc2lnbmVkLCBtYWRlIHBheWFibGUgZm9yIFVTICQ1 +MC4wMDxicj4NCiAgICAgIHRvIEFHTSBIb2xkaW5ncywgYW5kIGJlIGRyYXduIG9uIGEgVVMgQmFu +ay48YnI+DQogICAgICA8YnI+DQogICAgICA8YnI+DQogICAgICBDSEVDSyBOVU1CRVJfX19fX19f +X19fIFNUQVRFIEQvTCAjX19fX19fX19fX19fX188YnI+DQogICAgICA8YnI+DQogICAgICA8YnI+ +DQogICAgICBJbml0aWFsIFRoZSBBZ3JlZW1lbnQgQmVsb3c8YnI+DQogICAgICA8YnI+DQogICAg +ICA8YnI+DQogICAgICBZb3UgbXVzdCBpbml0aWFsIGJlbG93IHRvIHRha2UgYWR2YW50YWdlIG9m +IHRoaXM8YnI+DQogICAgICBpbmNyZWRpYmxlIG1vbmV5LW1ha2luZyBvcHBvcnR1bml0eS4gWW91 +ciBpbml0aWFsczxicj4NCiAgICAgIGNvbnN0aXR1dGUgYWNjZXB0YW5jZSBvZiBvdXIgYWdyZWVt +ZW50IGFuZCBpcyBvdXI8YnI+DQogICAgICB3YXkgb2YgcHJvdGVjdGluZyB5b3VyIGludGVyZXN0 +Ljxicj4NCiAgICAgIDxicj4NCiAgICAgIF9fX19fX19fXzxiPjxpPjxmb250IGNvbG9yPSIjMDAw +MEZGIj5ZRVM8L2ZvbnQ+PC9pPjwvYj4sIEkgd291bGQgbGlrZSB0aGUgb3Bwb3J0dW5pdHkgdG8g +ZWFybjxicj4NCiAgICAgIGV4dHJhIG1vbmV5IHdvcmtpbmcgcmlnaHQgZnJvbSB0aGUgY29tZm9y +dCBvZiBteTxicj4NCiAgICAgIGhvbWUgb3IgYXBhcnRtZW50IHBhcnRpY2lwYXRpbmcgaW4gdGhl +IFBhbXBobGV0PGJyPg0KICAgICAgUHJvY2Vzc2luZyBQcm9ncmFtLjxicj4NCiAgICAgIDxicj4N +CiAgICAgIF9fX19fX19fXzxiPjxpPjxmb250IGNvbG9yPSIjMDAwMEZGIj5ZRVM8L2ZvbnQ+PC9p +PjwvYj4sIEkgdW5kZXJzdGFuZCB0aGF0IG15IHN0YXJ0ZXIncyBraXQ8YnI+DQogICAgICB3aWxs +IGNvbnRhaW4gdGhlIGluc3RydWN0aW9ucyBuZWNlc3NhcnkgdG8gZ2V0IG1lPGJyPg0KICAgICAg +c3RhcnRlZCBJTU1FRElBVEVMWSBhcyBhIG1lbWJlciBvZiB0aGUgUGFtcGhsZXQ8YnI+DQogICAg +ICBQcm9jZXNzaW5nIFByb2dyYW0gITxicj4NCiAgICAgIDxicj4NCiAgICAgIF9fX19fX19fXzxi +PjxpPjxmb250IGNvbG9yPSIjMDAwMEZGIj5ZRVM8L2ZvbnQ+PC9pPjwvYj4sIEkgYWxzbyB1bmRl +cnN0YW5kIHRoYXQgbXkgU3RhcnRlcidzPGJyPg0KICAgICAgS2l0IHdpbGwgY29udGFpbiBteSB2 +ZXJ5IG93biBjb3B5IG9mIHRoZSBDUkVESVQ8YnI+DQogICAgICBSRVBBSVIgTUFOVUFMITxicj4N +CiAgICAgIDxicj4NCiAgICAgIF9fX19fX19fXzxiPjxpPjxmb250IGNvbG9yPSIjMDAwMEZGIj5Z +RVM8L2ZvbnQ+PC9pPjwvYj4sIEkgdW5kZXJzdGFuZCB0aGF0IEkgY2FuIHVzZSB0aGU8YnI+DQog +ICAgICBDUkVESVQgUkVQQUlSIE1BTlVBTCB0byBsZWdhbGx5IGNsZWFyIHVwPGJyPg0KICAgICAg +YW5kIHJlcGFpciBhbnkgbmVnYXRpdmUgY3JlZGl0IHRoYXQgSSBtaWdodCBoYXZlITxicj4NCiAg +ICAgIDxicj4NCiAgICAgIF9fX19fX19fXzxiPjxpPjxmb250IGNvbG9yPSIjMDAwMEZGIj5ZRVM8 +L2ZvbnQ+PC9pPjwvYj4sIEkgdW5kZXJzdGFuZCB0aGF0IHRoaXMgbWF0ZXJpYWwgaXM8YnI+DQog +ICAgICBwcm92aWRlZCB0byBtZSBmb3I8L2ZvbnQ+PC9mb250PiA8Zm9udCBzaXplPSIyIj48Zm9u +dCBmYWNlPSJBcmlhbCI+YmVjb21pbmcNCiAgICAgIGEgbWVtYmVyIG9mIHRoZTxicj4NCiAgICAg +IFBhbXBobGV0IFByb2Nlc3NpbmcgUHJvZ3JhbSE8YnI+DQogICAgICA8YnI+DQogICAgICBfX19f +X19fX188Yj48aT48Zm9udCBjb2xvcj0iIzAwMDBGRiI+WUVTPC9mb250PjwvaT48L2I+LCBJIGFs +c28gdW5kZXJzdGFuZCB0aGF0IEkgd2lsbCBiZTxicj4NCiAgICAgIGZyZWUgdG8gc2V0IG15IG93 +biBob3VycyBhbmQgcGFydGljaXBhdGUgaW4gdGhlPGJyPg0KICAgICAgcHJvZ3JhbSBlaXRoZXIg +cGFydC10aW1lIG9yIEZ1bGwtIHRpbWUuPGJyPg0KICAgICAgPGJyPg0KICAgICAgX19fX19fX19f +PGI+PGk+PGZvbnQgY29sb3I9IiMwMDAwRkYiPllFUzwvZm9udD48L2k+PC9iPiwgSSBkbyB1bmRl +cnN0YW5kIHRoYXQgYSBzbWFsbDxicj4NCiAgICAgIHJlZnVuZGFibGUgZmVlIG9mICQ0NSArICQ1 +IHMmYW1wO2ggYW5kIHRoaXMgZmVlIGlzIGE8YnI+DQogICAgICBPTkUtVElNRSBGRUUgT05MWSAh +PGJyPg0KICAgICAgPGJyPg0KICAgICAgX19fX19fX19fPGI+PGk+PGZvbnQgY29sb3I9IiMwMDAw +RkYiPllFUzwvZm9udD48L2k+PC9iPiwgSSB3aWxsIG5vdCBoYXZlIHRvIHBheSBBR00gSG9sZGlu +Z3M8YnI+DQogICAgICBhbnkgb3RoZXIgZmVlcywgRVZFUiE8YnI+DQogICAgICA8YnI+DQogICAg +ICBfX19fX19fX188Yj48aT48Zm9udCBjb2xvcj0iIzAwMDBGRiI+WUVTPC9mb250PjwvaT48L2I+ +LCBJTVBPUlRBTlQ6IFNpbmNlIHdlIERPIE5PVCB3YW50IHRvPGJyPg0KICAgICAgY3JlYXRlIGFu +eSB1bm5lY2Vzc2FyeSBjb21wZXRpdGlvbiBiZXR3ZWVuIG91cjxicj4NCiAgICAgIGV4aXN0aW5n +IG1lbWJlcnMsIHdlIGRvIHJlc2VydmUgdGhlIHJpZ2h0IHRvIHN0b3A8YnI+DQogICAgICBhY2Nl +cHRpbmcgbmV3IG1lbWJlcnMgaWYgb3VyIHF1b3RhIGlzIG1ldC48YnI+DQogICAgICA8YnI+DQog +ICAgICBUaGVyZWZvcmUsIGlmIHlvdSBhcmUgc2VyaW91cyBhYm91dCB0aGlzIGluY29tZTxicj4N +CiAgICAgIG9wcG9ydHVuaXR5IHdlIGRvIHN1Z2dlc3QgdGhhdCB5b3Ugc2VuZCBpbiB5b3U8YnI+ +DQogICAgICBjb21wbGV0ZWQgZm9ybSBJTU1FRElBVEVMWSB0aGF0IHdpbGwgR1VBUkFOVEVFIHRo +ZTxicj4NCiAgICAgIGRlbGl2ZXJ5IG9mIHlvdXIgU3RhcnRlciBLaXQgITxicj4NCiAgICAgIDxi +cj4NCiAgICAgIDxiPjxpPjxmb250IGNvbG9yPSIjMDAwMEZGIj5ERVNJUkVEIFdFRUtMWSBJTkNP +TUU8L2ZvbnQ+PC9pPjwvYj48aT4gKGNpcmNsZSBvbmUpPC9pPjxicj4NCiAgICAgIDxicj4NCiAg +ICAgICQxMDAgJDMwMCAkNTAwICQ3MDA8YnI+DQogICAgICA8YnI+DQogICAgICAkODAwICQ5MDAg +JDEwMDAgJDExMDA8YnI+DQogICAgICA8YnI+DQogICAgICAkMTIwMCAkMTMwMCAkMTQwMCAkMTUw +MDxicj4NCiAgICAgIDxicj4NCiAgICAgIElNUE9SVEFOVDxicj4NCiAgICAgIDxicj4NCiAgICAg +ICQ1MC4wMCBJUyBFTkNMT1NFRDxicj4NCiAgICAgIDxicj4NCiAgICAgIFskNDUgKyAkNSBQb3N0 +YWdlICZhbXA7IEhhbmRsaW5nXTxicj4NCiAgICAgIDxicj4NCiAgICAgIE1vbmV5IE9yZGVycyBB +bmQgQ2hlY2tzIE11c3QgQmUgUGF5YWJsZSBUbzo8YnI+DQogICAgICBBR00gSE9MRElOR1M8YnI+ +DQogICAgICA8L2ZvbnQ+PGJyPg0KICAgICAgPGZvbnQgZmFjZT0iQXJpYWwiPklNUE9SVEFOVDo8 +YnI+DQogICAgICA8L2ZvbnQ+PGI+PGZvbnQgY29sb3I9IiNmZjAwMDAiIGZhY2U9IkFyaWFsIj5G +QVggT1JERVJTIFBST0NFU1NFRA0KICAgICAgSU1NRURJQVRFTFkgVVBPTiBSRUNFSVBULjwvZm9u +dD48L2I+PGZvbnQgZmFjZT0iQXJpYWwiPiZuYnNwOzxicj4NCiAgICAgIDwvZm9udD48Zm9udCBm +YWNlPSJBcmlhbCI+PGJyPg0KICAgICAgQXR0YWNoIEEgQ29weSBPZiBZb3VyIFBlcnNvbmFsIEFu +ZCBCdXNpbmVzczxicj4NCiAgICAgIENoZWNrIE9yIENvbXBsZXRlIFRoZSBDcmVkaXQgQ2FyZCBJ +bmZvcm1hdGlvbjxicj4NCiAgICAgIFJlcXVpcmVkIEFib3ZlLjxicj4NCiAgICAgIDxicj4NCiAg +ICAgIEFMTCBGQVggT1JERVJTIFBMQUNFRCBBTExPVyBPTkxZIDc8YnI+DQogICAgICBCVVNJTkVT +UyBEQVlTIERFTElWRVJZIFRJTUUuPGJyPg0KICAgICAgUE9TVEFMIE1BSUwgUGxlYXNlIGFsbG93 +IDIgd2Vla3MgcHJvY2Vzc2luZyB0aW1lPGJyPg0KICAgICAgZm9yIG9yZGVycyBwbGFjZWQgd2l0 +aCBjaGVja3MuIE9yZGVycyBwbGFjZWQgYnk8YnI+DQogICAgICBtb25leSBvcmRlciBvciBjYXNo +IGFsbG93IDE0IGJ1c2luZXNzIGRheXM8YnI+DQogICAgICBkZWxpdmVyeSB0aW1lLjxicj4NCiAg +ICAgIDxicj4NCiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTxicj4N +CiAgICAgIDxicj4NCiAgICAgIFdoZXJlIGRpZCB5b3Ugc2VlIG91ciBjb21wYW55IGFkdmVydGlz +ZW1lbnQ/PGJyPg0KICAgICAgPGJyPg0KICAgICAgTkVXU1BBUEVSX19fX19fXyBSRUNZQ0xFUl9f +X19fX18gTUFJTF9fX19fXzxicj4NCiAgICAgIDxicj4NCiAgICAgIEVNQUlMX19fX19fXyBPVEhF +Ul9fX19fX188YnI+DQogICAgICA8YnI+DQogICAgICBJbnRlcm5hbCBVc2U6IFJFRiBDT0RFIDog +UmFoLTE1LWluYzxicj4NCiAgICAgIDxicj4NCiAgICAgIExlZ2FsIEluZm9ybWF0aW9uPGJyPg0K +ICAgICAgPGJyPg0KICAgICAgWW91IGhhdmUgYmVlbiBzZW50IHRoaXMgZW1haWwgYmVjYXVzZSB5 +b3Ugb3I8L2ZvbnQ+PC9mb250Pjxicj4NCiAgICAgIDxmb250IHNpemU9IjIiIGZhY2U9IkFyaWFs +Ij5zb21lb25lIGFjdGluZyBhcyB5b3Ugb3IgeW91ciBhdXRob3JpemVkIGFnZW50PGJyPg0KICAg +ICAgaGFzIGFkZGVkIHlvdXIgZW1haWwgYWRkcmVzcyB0byBvdXIgb3B0LWluIG1haWxpbmc8YnI+ +DQogICAgICA8L2ZvbnQ+PGZvbnQgc2l6ZT0iMiI+PGZvbnQgZmFjZT0iQXJpYWwiPmxpc3QuIEZ1 +cnRoZXIgdHJhbnNtaXNzaW9ucyB0bw0KICAgICAgeW91IGJ5IHRoZSBzZW5kZXIgb2Y8YnI+DQog +ICAgICB0aGlzIGVtYWlsIG1heSBiZSBzdG9wcGVkIGF0IG5vIGNvc3QgdG8geW91IGJ5PGJyPg0K +ICAgICAgc2VuZGluZyBhIHJlcGx5IHRvIHRoaXMgZW1haWwgYWRkcmVzcyB3aXRoIHRoZTxicj4N +CiAgICAgIHdvcmQgcmVtb3ZlIGluIHRoZSBzdWJqZWN0IGxpbmUuPGJyPg0KICAgICAgPGJyPg0K +ICAgICAgPGJyPg0KICAgICAgPC9mb250PjxiPjxmb250IGNvbG9yPSIjZmYwMDAwIiBmYWNlPSJB +cmlhbCI+RkFYIFRvbGwgRnJlZTogODc3LTg3OS02NTA5PGJyPg0KICAgICAgPC9mb250PjwvYj48 +Zm9udCBmYWNlPSJBcmlhbCI+QmUgc3VyZSB0byBlbmNsb3NlIGEgbGVnaWJsZSBjb3B5IG9mIHlv +dXINCiAgICAgIHBlcnNvbmFsPGJyPg0KICAgICAgb3IgYnVzaW5lc3MgY2hlY2sgZm9yIGZhc3Rl +c3Qgc2VydmljZS4gQ3JlZGl0IGNhcmQ8YnI+DQogICAgICBvcmRlcnMgcGxlYXNlIGNvbXBsZXRl +IHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZDxicj4NCiAgICAgIGFib3ZlLCBvciBsZWdpYmx5IHBo +b3RvY29weSB5b3VyIGNyZWRpdCBjYXJkPGJyPg0KICAgICAgc2lnbmF0dXJlIGFyZWEgYW5kIGVu +Y2xvc2Ugd2l0aCBGQVguPGJyPg0KICAgICAgPGJyPg0KICAgICAgPGJyPg0KICAgICAgPC9mb250 +Pjxmb250IGZhY2U9IkFyaWFsIj4tLS0tLS0tLS0tLS0mZ3Q7Q0hFQ0tMSVNUPC9mb250PjwvcD4N +CiAgICAgIDxwPjxmb250IGZhY2U9IkFyaWFsIj5QbGVhc2UgZW5zdXJlIHlvdSBoYXZlIGRvbmUg +YWxsIG9mIHRoZSBmb2xsb3dpbmc8YnI+DQogICAgICB0byBlbnN1cmUgZmFzdGVzdCBwcm9jZXNz +aW5nIGFuZCB0byBhdm9pZCB0aW1lbHk8YnI+DQogICAgICBkZWxheXMuPGJyPg0KICAgICAgPGJy +Pg0KICAgICAgPC9mb250Pjxmb250IGZhY2U9IkFyaWFsIj4mbmJzcDs8L2ZvbnQ+PC9wPg0KICAg +ICAgPGZvbnQgc2l6ZT0iNCI+DQogICAgICA8b2w+DQogICAgICAgIDxsaT48Zm9udCBmYWNlPSJB +cmlhbCIgY29sb3I9IiMwMDAwRkYiPjxiPjxpPkRpZCB5b3UgY29tcGxldGUgdGhlIG9yZGVyDQog +ICAgICAgICAgZm9ybSA/PC9pPjwvYj48L2ZvbnQ+DQogICAgICAgIDxsaT48Zm9udCBmYWNlPSJB +cmlhbCIgY29sb3I9IiMwMDAwRkYiPjxiPjxpPkRpZCB5b3Ugc2lnbiBhbmQgaW5pdGlhbA0KICAg +ICAgICAgIHRoZSBmb3JtID88L2k+PC9iPjwvZm9udD4NCiAgICAgICAgPGxpPjxmb250IGZhY2U9 +IkFyaWFsIiBjb2xvcj0iIzAwMDBGRiI+PGI+PGk+RGlkIHlvdSBlbmNsb3NlIHBheW1lbnQgZm9y +DQogICAgICAgICAgJDUwID88L2k+PC9iPjwvZm9udD4NCiAgICAgICAgPGxpPjxmb250IGZhY2U9 +IkFyaWFsIj48Yj48aT48Zm9udCBjb2xvcj0iIzAwMDBGRiI+RGlkIHlvdSBGQVggeW91cg0KICAg +ICAgICAgIG9yZGVyIHdpdGggY2hlY2s8YnI+DQogICAgICAgICAgLWJ5LWZheCBmb3IgcXVpY2tl +c3QgcHJvY2Vzc2luZyA/PC9mb250Pjxicj4NCiAgICAgICAgICA8L2k+PC9iPjwvZm9udD48L2xp +Pg0KICAgICAgPC9vbD4NCiAgICAgIDwvZm9udD48Zm9udCBzaXplPSIyIj4NCiAgICAgIDxwPjxm +b250IGZhY2U9IkFyaWFsIj5ESUQgWU9VLi4uLldBS0UgVVAgVEhJUyBNT1JOSU5HLi4uLjxicj4N +CiAgICAgIEFORCBSRUFMSVpFLCBZT1VSIEZVVFVSRSBXT1VMRC4uLi48YnI+DQogICAgICBDSEFO +R0UgV0lUSCBGSVZFIE1JTlVURVMgJmFtcDsgT05FIEUtTUFJTD88YnI+DQogICAgICA8YnI+DQog +ICAgICA8L2ZvbnQ+PGZvbnQgZmFjZT0iQXJpYWwiPlRoYW5rIFlvdSwgTXkgbmFtZSBpcyBEYWxs +aW4NCiANCiAgICAgIDwvZm9udD48L3A+DQogICAgICA8cD4mbmJzcDs8L3A+DQogICAgICA8L2Zv +bnQ+PC9mb250PjwvdGQ+DQogICAgPC90cj4NCiAgPC90Ym9keT4NCjwvdGFibGU+DQo8cD48Zm9u +dCBzaXplPSIyIj48Yj48aT48Zm9udCBjb2xvcj0iI0ZGMDAwMCIgZmFjZT0iQXJpYWwiPkZvciBt +b3JlIGluZm9ybWF0aW9uLA0KY2FsbCB0b2xsIGZyZWUgODc3LTg5Mi03NTcwPGJyPg0KPGJyPg0K +PC9mb250PjwvaT48L2I+PC9mb250Pjxmb250IHNpemU9IjIiIGZhY2U9IkFyaWFsIj5IYXZlIFlv +dSBEcmVhbWVkIE9mIFlvdXIgT3duIEhvbWUgQmFzZWQgQnVzaW5lc3M/ICAgIA0KPC9mb250Pjxm +b250IHNpemU9IjIiPjxiPjxpPjxmb250IGNvbG9yPSIjRkYwMDAwIiBmYWNlPSJBcmlhbCI+PGJy +Pg0KPGJyPg0KPC9mb250PjwvaT48L2I+PC9mb250Pjxmb250IGZhY2U9IkFyaWFsIj4NCllvdXIg +RS1NYWlsIFRyYWNraW5nIE51bWJlcjo8L2ZvbnQ+PC9wPg0KDQo8L2JvZHk+DQoNCjwvaHRtbD4N +Cg0KW1o1Vllqa3lENWRjeVEtNEpCODhDZjVieFotOG9pZ1VVVnVoUUxXVjViZFZ0aDJ5N1ZuYWpd +DQoNCiANCg== + + diff --git a/Ch3/datasets/spam/spam/00040.949a3d300eadb91d8745f1c1dab51133 b/Ch3/datasets/spam/spam/00040.949a3d300eadb91d8745f1c1dab51133 new file mode 100644 index 000000000..46f8b08e4 --- /dev/null +++ b/Ch3/datasets/spam/spam/00040.949a3d300eadb91d8745f1c1dab51133 @@ -0,0 +1,60 @@ +From ilug-admin@linux.ie Fri Aug 23 16:14:11 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id B684443F9B + for ; Fri, 23 Aug 2002 11:14:11 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 16:14:11 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7NFDnZ29206 for + ; Fri, 23 Aug 2002 16:13:49 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA01699; Fri, 23 Aug 2002 16:11:26 +0100 +Received: from yahoo.com ([61.50.141.181]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA01654 for ; Fri, + 23 Aug 2002 16:11:08 +0100 +Message-Id: <200208231511.QAA01654@lugh.tuatha.org> +X-Authentication-Warning: lugh.tuatha.org: Host [61.50.141.181] claimed to + be yahoo.com +From: "zqcx" +To: ilug@linux.ie +Content-Type: text/plain;charset="GB2312" +Reply-To: z_q_c_x@yahoo.com +Date: Fri, 23 Aug 2002 23:10:22 +0800 +X-Priority: 3 +X-Mailer: Microsoft Outlook Express 5.00.2615.200 +Subject: [ILUG] enter Chinese market +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Dear Sir or Madam: + +Please reply to +Receiver: China Enterprise Management Co., Ltd. (CMC) +E-mail: unido@chinatop.net + +As one technical organization supported by China Investment and Technical Promotion Office of United Nation Industry Development Organization (UNIDO), we cooperate closely with the relevant Chinese Quality Supervision and Standardization Information Organization. We provide the most valuable consulting services to help you to open Chinese market within the shortest time: + +1. Consulting Service on Mandatory National Standards of The People's Republic of China. + +2. Consulting Service on Inspection and Quarantine Standards of The People's Republic of China. + +3. Consulting Service for Permission to Enter Chinese Market + +We are very sorry to disturb you! + +More information, please check our World Wide Web: http://www.chinatop.net + +Sincerely yours + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00041.f1b3402799046db3c1f143a911dc085d b/Ch3/datasets/spam/spam/00041.f1b3402799046db3c1f143a911dc085d new file mode 100644 index 000000000..01102086e --- /dev/null +++ b/Ch3/datasets/spam/spam/00041.f1b3402799046db3c1f143a911dc085d @@ -0,0 +1,42 @@ +From z_q_c_x@yahoo.com Fri Aug 23 17:48:54 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 8B43343F99 + for ; Fri, 23 Aug 2002 12:48:54 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 17:48:54 +0100 (IST) +Received: from yahoo.com ([61.50.141.181]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7NGfZZ32185 for ; + Fri, 23 Aug 2002 17:41:36 +0100 +Message-Id: <200208231641.g7NGfZZ32185@dogma.slashnull.org> +From: "zqcx" +Subject: enter Chinese market +To: zzzz@spamassassin.taint.org +Content-Type: text/plain;charset="GB2312" +Reply-To: z_q_c_x@yahoo.com +Date: Sat, 24 Aug 2002 00:40:58 +0800 +X-Priority: 3 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 + +Dear Sir or Madam: + +Please reply to +Receiver: China Enterprise Management Co., Ltd. (CMC) +E-mail: unido@chinatop.net + +As one technical organization supported by China Investment and Technical Promotion Office of United Nation Industry Development Organization (UNIDO), we cooperate closely with the relevant Chinese Quality Supervision and Standardization Information Organization. We provide the most valuable consulting services to help you to open Chinese market within the shortest time: + +1. Consulting Service on Mandatory National Standards of The People's Republic of China. + +2. Consulting Service on Inspection and Quarantine Standards of The People's Republic of China. + +3. Consulting Service for Permission to Enter Chinese Market + +We are very sorry to disturb you! + +More information, please check our World Wide Web: http://www.chinatop.net + +Sincerely yours + diff --git a/Ch3/datasets/spam/spam/00042.3e934ba4075f82283d755174d2642b76 b/Ch3/datasets/spam/spam/00042.3e934ba4075f82283d755174d2642b76 new file mode 100644 index 000000000..7140f98e0 --- /dev/null +++ b/Ch3/datasets/spam/spam/00042.3e934ba4075f82283d755174d2642b76 @@ -0,0 +1,99 @@ +From checkoutthesefreakhugecocksinapussy@framesetup.com Fri Aug 23 18:57:51 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 0C12543F99 + for ; Fri, 23 Aug 2002 13:57:44 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 23 Aug 2002 18:57:44 +0100 (IST) +Received: from framesetup.com (1Cust249.tnt15.det3.da.uu.net [67.217.14.249]) + by webnote.net (8.9.3/8.9.3) with SMTP id SAA11649 + for ; Fri, 23 Aug 2002 18:48:51 +0100 +Message-Id: <200208231748.SAA11649@webnote.net> +From: "Free pussy" +To: +Subject: Free big cock in Pussy +Sender: "Free pussy" +Mime-Version: 1.0 +Date: Sat, 24 Aug 2002 13:46:11 -0400 +Content-Type: text/html; charset="ISO-8859-1" +Content-Transfer-Encoding: 8bit + + + +!!!Freak Cock!!! + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    Click Here + to be Removed

    +
    + diff --git a/Ch3/datasets/spam/spam/00043.548c447db5d9ba3f5546de96baa9b0e6 b/Ch3/datasets/spam/spam/00043.548c447db5d9ba3f5546de96baa9b0e6 new file mode 100644 index 000000000..ead979605 --- /dev/null +++ b/Ch3/datasets/spam/spam/00043.548c447db5d9ba3f5546de96baa9b0e6 @@ -0,0 +1,53 @@ +From bill@bluemail.dk Mon Aug 26 15:12:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 98B7343F99 + for ; Mon, 26 Aug 2002 10:12:43 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:43 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id TAA11952; + Fri, 23 Aug 2002 19:49:56 +0100 +From: bill@bluemail.dk +Received: from bluemail.dk (klhtnet.klht.pvt.k12.ct.us [206.97.9.2]) + by smtp.easydns.com (Postfix) with SMTP + id 754E52CFFB; Fri, 23 Aug 2002 14:49:52 -0400 (EDT) +Reply-To: +Message-ID: <003d35d40cab$6883b2c8$6aa10ea4@khnqja> +To: byrt5@hotmail.com +Subject: FORTUNE 500 COMPANY HIRING, AT HOME REPS. +MiME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2462.0000 +Importance: Normal +Date: Fri, 23 Aug 2002 14:49:52 -0400 (EDT) +Content-Transfer-Encoding: 8bit + +Help wanted. We are a 14 year old fortune 500 company, that is +growing at a tremendous rate. We are looking for individuals who +want to work from home. + +This is an opportunity to make an excellent income. No experience +is required. We will train you. + +So if you are looking to be employed from home with a career that has +vast opportunities, then go: + +http://www.basetel.com/wealthnow + +We are looking for energetic and self motivated people. If that is you +than click on the link and fill out the form, and one of our +employement specialist will contact you. + +To be removed from our link simple go to: + +http://www.basetel.com/remove.html + + +7749doNL1-136DfsE5701lGxl2-486pAKM7127JwoR4-054PCfq9499xMtW0-594hucS91l66 + diff --git a/Ch3/datasets/spam/spam/00044.9eece8e53a8982c26558b9eb38230bb8 b/Ch3/datasets/spam/spam/00044.9eece8e53a8982c26558b9eb38230bb8 new file mode 100644 index 000000000..5b0ed3f8a --- /dev/null +++ b/Ch3/datasets/spam/spam/00044.9eece8e53a8982c26558b9eb38230bb8 @@ -0,0 +1,67 @@ +From marcie1136786@yahoo.com Mon Aug 26 15:12:44 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 0E34643F9B + for ; Mon, 26 Aug 2002 10:12:44 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:44 +0100 (IST) +Received: from info.chinacoal.gov.cn ([211.99.74.5]) + by webnote.net (8.9.3/8.9.3) with ESMTP id UAA12066 + for ; Fri, 23 Aug 2002 20:22:52 +0100 +From: marcie1136786@yahoo.com +Message-Id: <200208231922.UAA12066@webnote.net> +Received: from 211.97.147.11 ([211.97.147.11]) by info.chinacoal.gov.cn with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id RPBL0WFB; Sat, 24 Aug 2002 01:06:46 +0800 +To: zzzz@brooksresources.com, yyyy@cheetah.net, yyyy@colorado.net, + zzzz@connect.reach.net +Cc: zzzz@cstone.net, yyyy@dc.net, yyyy@dockingbay.com, yyyy@dynamic.com, + zzzz@electrotex.com, jm@epic.net, jm@expert.expert.com, + zzzz@firstnethou.com +Date: Fri, 23 Aug 2002 13:03:04 -0400 +Subject: Incredible Pictures!!!!!!!! +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Precedence-Ref: l2340567 +Content-Transfer-Encoding: 7bit +Content-Type: text/html; charset=us-ascii + + + +

    Do you like Sexy Animals doing the wild thing? We have the super hot content on the Internet!
    +This is the site you have heard about. Rated the number one adult site three years in a row!
    +- Thousands of pics from hardcore fucking, and cum shots to pet on girl.
    +
    +- Thousands videos
    +
    +So what are you waiting for?
    +
    +CLICK HERE
    +
    +
    +YOU MUST BE AT LEAST 18 TO ENTER!

    +

     

    +

     

    +

     

    +

    You have received this advertisement because you have opted in +to receive
    +free adult internet offers and
    +
    +specials through our affiliated websites. If you do not wish to receive
    +further emails or have received the
    +
    +email in error you may opt-out of our database by clicking here:
    +CLICK HERE
    +Please allow 24hours for removal.
    +This e-mail is sent in compliance with the Information Exchange Promotion and
    +Privacy Protection Act.
    +
    +section 50 marked as 'Advertisement' with valid 'removal' instruction.

    + + + + [NKIYs5] + + diff --git a/Ch3/datasets/spam/spam/00045.7282c2c4e009744f2f3450d370009235 b/Ch3/datasets/spam/spam/00045.7282c2c4e009744f2f3450d370009235 new file mode 100644 index 000000000..9e94e453d --- /dev/null +++ b/Ch3/datasets/spam/spam/00045.7282c2c4e009744f2f3450d370009235 @@ -0,0 +1,60 @@ +From quintina@mx3.1premio.com Mon Aug 26 15:13:10 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id E904F44155 + for ; Mon, 26 Aug 2002 10:12:44 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:44 +0100 (IST) +Received: from email.qves.com ([67.104.83.251]) + by webnote.net (8.9.3/8.9.3) with ESMTP id UAA12077 + for ; Fri, 23 Aug 2002 20:26:47 +0100 +Received: from qvp0086 ([169.254.6.17]) by email.qves.com with Microsoft SMTPSVC(5.0.2195.2966); + Fri, 23 Aug 2002 13:25:53 -0600 +From: "FotoJunction.com" +To: +Subject: Start Your Private Photo Album Online! 13.200 +Date: Fri, 23 Aug 2002 13:25:52 -0600 +Message-ID: <145a3501c24ada$e5226e00$1106fea9@freeyankeedom.com> +MIME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJK2uTWT5Tcq2R0QnSep3v6UuNTkQ== +Content-Class: urn:content-classes:message +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2462.0000 +X-OriginalArrivalTime: 23 Aug 2002 19:25:53.0513 (UTC) FILETIME=[E598FD90:01C24ADA] + +1) Fight The Risk of Cancer! +http://www.adclick.ws/p.cfm?o=315&s=pk007 + +2) Slim Down - Guaranteed to lose 10-12 lbs in 30 days +http://www.adclick.ws/p.cfm?o=249&s=pk007 + +3) Get the Child Support You Deserve - Free Legal Advice +http://www.adclick.ws/p.cfm?o=245&s=pk002 + +4) Join the Web's Fastest Growing Singles Community +http://www.adclick.ws/p.cfm?o=259&s=pk007 + +5) Start Your Private Photo Album Online! +http://www.adclick.ws/p.cfm?o=283&s=pk007 + +Have a Wonderful Day, +Offer Manager +PrizeMama + + + + + + + + + + +If you wish to leave this list please use the link below. +http://www.qves.com/trim/?zzzz@spamassassin.taint.org%7C17%7C308417 + diff --git a/Ch3/datasets/spam/spam/00046.e0fd04360622dbe9250380447f6465cc b/Ch3/datasets/spam/spam/00046.e0fd04360622dbe9250380447f6465cc new file mode 100644 index 000000000..cc0a606cd --- /dev/null +++ b/Ch3/datasets/spam/spam/00046.e0fd04360622dbe9250380447f6465cc @@ -0,0 +1,158 @@ +From bc1fab4fan@hotmail.com Mon Aug 26 15:13:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 01E0E44157 + for ; Mon, 26 Aug 2002 10:12:46 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:46 +0100 (IST) +Received: from ideatribe.com.cn ([211.99.212.43]) + by webnote.net (8.9.3/8.9.3) with ESMTP id XAA12710 + for ; Fri, 23 Aug 2002 23:56:08 +0100 +From: bc1fab4fan@hotmail.com +Received: from 1070wibc.com [4.40.13.154] by ideatribe.com.cn with ESMTP + (SMTPD32-7.04) id A102470060; Thu, 22 Aug 2002 09:27:46 -0700 +Message-ID: <00005d81258a$00006d51$000022f1@bellamy.on.ca> +To: , , , + , +Cc: , , , + , +Subject: Attn: SYSTEMWORKS CLEARANCE SALE_ONLY $29.99 12173 +Date: Wed, 21 Aug 2002 21:28:57 -1600 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Norton AD + + + + + + + + +
      + + + + +
    ATTENTION: + This is a MUST for ALL Computer Users!!!
    +

     *NEW + - Special Package Deal!*

    + + + + +
    Nor= +ton + SystemWorks 2002 Software Suite
    + -Professional Edition-
    + + + + +
    Includes + Six - Yes 6! = +- Feature-Packed Utilities
    ALL + for
    = +1 + Special LOW + Price!
    + + + + +
    This Software Will:
    - Protect your + computer from unwanted and hazardous viruses
    - Help= + secure your + private & valuable information
    - Allow you to transfer = +files + and send e-mails safely
    - Backup your ALL your data= + quick and + easily
    - Improve your PC's performance w/superior + integral diagnostics!
      + + + + +
    +

    6 + Feature-Packed Utilities
    + 1 + Great + Price
    +
    + A $300+= + Combined Retail Value + YOURS for Only $29.99!
    +
    <Includes + FREE Shipping!>

    +

    Don't fall prey to destructive viruses + or hackers!
    Protect  your computer and your valuable informat= +ion + and

    + + + + +
    + -> + CLICK HERE to Order Yours NOW! <-
    +

    + Cl= +ick + here for more information

    +

            +

    Your + email address was obtained from an opt-in list. Opt-in MRSA List
    +  Purchase Code # 312-1-010.  If you wish to be unsubs= +cribed + from this list, please + + CLICK HERE

    + + + + + + + diff --git a/Ch3/datasets/spam/spam/00047.0d7a240951e460b5884a8886ee64a8c3 b/Ch3/datasets/spam/spam/00047.0d7a240951e460b5884a8886ee64a8c3 new file mode 100644 index 000000000..5ee688da2 --- /dev/null +++ b/Ch3/datasets/spam/spam/00047.0d7a240951e460b5884a8886ee64a8c3 @@ -0,0 +1,36 @@ +From safety33o@l1.newnamedns.com Mon Aug 26 15:13:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 150A344158 + for ; Mon, 26 Aug 2002 10:12:47 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:47 +0100 (IST) +Received: from l1.newnamedns.com ([64.25.38.71]) + by webnote.net (8.9.3/8.9.3) with ESMTP id DAA13206 + for ; Sat, 24 Aug 2002 03:04:20 +0100 +From: safety33o@l1.newnamedns.com +Date: Fri, 23 Aug 2002 19:05:55 -0400 +Message-Id: <200208232305.g7NN5tp09148@l1.newnamedns.com> +To: apktrudjae@l1.newnamedns.com +Reply-To: safety33o@l1.newnamedns.com +Subject: ADV: Interest rates slashed! Don't wait! ccaxc + +INTEREST RATES HAVE JUST BEEN CUT!!! + +NOW is the perfect time to think about refinancing your home mortgage! Rates are down! Take a minute and fill out our quick online form. +http://www.newnamedns.com/refi/ + +Easy qualifying, prompt, courteous service, low rates! Don't wait for interest rates to go up again, lock in YOUR low rate now! + + + + + + +--------------------------------------- +To unsubscribe, go to: +http://www.newnamedns.com/stopthemailplease/ +Please allow 48-72 hours for removal. + diff --git a/Ch3/datasets/spam/spam/00048.8a64080dbd9d868358a22b655fb1b1cd b/Ch3/datasets/spam/spam/00048.8a64080dbd9d868358a22b655fb1b1cd new file mode 100644 index 000000000..1801429fa --- /dev/null +++ b/Ch3/datasets/spam/spam/00048.8a64080dbd9d868358a22b655fb1b1cd @@ -0,0 +1,25 @@ +From alewss6@hotmail.com Mon Aug 26 15:13:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 7115C44159 + for ; Mon, 26 Aug 2002 10:12:47 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:47 +0100 (IST) +Received: from lewis (vdsl-130-13-123-55.phnx.uswest.net [130.13.123.55]) + by webnote.net (8.9.3/8.9.3) with SMTP id DAA13330 + for ; Sat, 24 Aug 2002 03:31:20 +0100 +Message-Id: <200208240231.DAA13330@webnote.net> +From: "good4u" +To: +Subject: GET IN AT THE TOP! +Mime-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Fri, 23 Aug 2002 19:27:52 + +DON'T MISS OUT ON AN AMAZING BUSINESS OPPORTUNITY AND WEIGHT LOSS PRODUCT! +PLEASE VISIT www.good4u.autodreamteam.com +THERE IS NO OBLIGATION +AND IT'S WORTH A LOOK! + diff --git a/Ch3/datasets/spam/spam/00049.09e42d433e0661f264a25c7d4ed6e3ea b/Ch3/datasets/spam/spam/00049.09e42d433e0661f264a25c7d4ed6e3ea new file mode 100644 index 000000000..af4cb9880 --- /dev/null +++ b/Ch3/datasets/spam/spam/00049.09e42d433e0661f264a25c7d4ed6e3ea @@ -0,0 +1,51 @@ +From cqbDr.Raj_alrodura@AOL.COM Mon Aug 26 15:13:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 4E2304415D + for ; Mon, 26 Aug 2002 10:12:55 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:55 +0100 (IST) +Received: from 200.217.214.18 ([200.48.181.66]) + by webnote.net (8.9.3/8.9.3) with SMTP id QAA16212 + for ; Sat, 24 Aug 2002 16:31:00 +0100 +Message-Id: <200208241531.QAA16212@webnote.net> +Received: from [159.218.252.32] by n7.groups.yahoo.com with SMTP; Aug, 24 2002 12:01:28 PM -0000 +Received: from rly-xw01.mx.aol.com ([153.196.56.114]) by da001d2020.lax-ca.osd.concentric.net with SMTP; Aug, 24 2002 11:05:29 AM +1200 +Received: from mx.rootsystems.net ([60.127.54.24]) by smtp-server6.tampabay.rr.com with SMTP; Aug, 24 2002 10:01:30 AM -0800 +Received: from [198.250.227.71] by m10.grp.snv.yahoo.com with QMQP; Aug, 24 2002 9:28:23 AM -0100 +From: Sarah +To: Undisclosed.Recipients@webnote.net +Cc: +Subject: Re: Hi +Sender: Sarah +Mime-Version: 1.0 +Date: Sat, 24 Aug 2002 12:29:47 -0400 +X-Mailer: Microsoft Outlook Express 6.00.2462.0000 +Content-Type: text/html; charset="iso-8859-1" + +Me and my friends have this brand new idea, a Live Webcam Click Here +
    +
    +
    +This is NOT SPAM - You have received this e-mail because +at one time or another you entered the weekly draw at one of +our portals or FFA sites. We comply with all proposed and current laws +on commercial e-mail under (Bill s. 1618 TITLE III passed by the 105th +Congress). + If you have received this e-mail in error, we apologize for the +inconvenience and ask that you remove yourself. +Click
    Here to Unsubscribe +
    + +cvstceuyxxkxgnxskjnc + diff --git a/Ch3/datasets/spam/spam/00050.45de99e8c120fddafe7c89fb3de1c14f b/Ch3/datasets/spam/spam/00050.45de99e8c120fddafe7c89fb3de1c14f new file mode 100644 index 000000000..9d3fc844f --- /dev/null +++ b/Ch3/datasets/spam/spam/00050.45de99e8c120fddafe7c89fb3de1c14f @@ -0,0 +1,94 @@ +From vy4tyht6c8986@yahoo.com Mon Aug 26 15:13:38 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id C7CAB4415C + for ; Mon, 26 Aug 2002 10:12:54 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:54 +0100 (IST) +Received: from ntserver1.tcl (host217-41-84-233.in-addr.btopenworld.com [217.41.84.233]) + by webnote.net (8.9.3/8.9.3) with ESMTP id JAA14608 + for ; Sat, 24 Aug 2002 09:21:16 +0100 +Received: from mx1.mail.yahoo.com (ACC04C42.ipt.aol.com [172.192.76.66]) by ntserver1.tcl with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id 359QADSH; Sat, 24 Aug 2002 09:20:19 +0100 +Message-ID: <0000258b5713$000068a6$0000733e@mx1.mail.yahoo.com> +To: +Cc: , , + , , , + , , , + +From: "Haley" +Subject: Best Life Insurance, Lowest Cost... NTICY +Date: Sat, 24 Aug 2002 01:10:39 -1900 +MIME-Version: 1.0 +Reply-To: vy4tyht6c8986@yahoo.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + +
    +Save up to + +75% on your Term Life +Insurance! +
    + +Compare rates from top insurance companies around +the country +

    + +In our life and times, it's important to plan for +your family's future, while +
    being comfortable financially. Choose the right +Life Insurance policy today.
    +

    + +Click the link below to compare the lowest rates +and save up to 75% +

    + +COMPARE YOUR COVERAGE +

    + +You'll be able to compare rates and get a free +application in less than a minute! +

    + +*Get your FREE instant quotes...
    +*Compare the lowest prices, then...
    +*Select a company and Apply Online.
    +

    + +GET A FREE QUOTE NOW! +
    + +You can't predict the future, but you can always +prepare for it. + +



    +



    +to be +excluded from future contacts

    + + +graham_adlam + + + + + diff --git a/Ch3/datasets/spam/spam/00051.fd20658f0e586d1f27f9396401f4981c b/Ch3/datasets/spam/spam/00051.fd20658f0e586d1f27f9396401f4981c new file mode 100644 index 000000000..84cdceb4a --- /dev/null +++ b/Ch3/datasets/spam/spam/00051.fd20658f0e586d1f27f9396401f4981c @@ -0,0 +1,53 @@ +From bill@bluemail.dk Mon Aug 26 15:13:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 8F34D4415E + for ; Mon, 26 Aug 2002 10:12:55 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:55 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id SAA16726; + Sat, 24 Aug 2002 18:47:42 +0100 +From: bill@bluemail.dk +Received: from bluemail.dk (klhtnet.klht.pvt.k12.ct.us [206.97.9.2]) + by smtp.easydns.com (Postfix) with SMTP + id 4B6B52E859; Sat, 24 Aug 2002 13:46:59 -0400 (EDT) +Reply-To: +Message-ID: <000b11a65aad$8587c2b3$3bb78ec3@ubrjup> +To: byrt5@hotmail.com +Subject: FORTUNE 500 COMPANY HIRING, AT HOME REPS. +MiME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal +Date: Sat, 24 Aug 2002 13:46:59 -0400 (EDT) +Content-Transfer-Encoding: 8bit + +Help wanted. We are a 14 year old fortune 500 company, that is +growing at a tremendous rate. We are looking for individuals who +want to work from home. + +This is an opportunity to make an excellent income. No experience +is required. We will train you. + +So if you are looking to be employed from home with a career that has +vast opportunities, then go: + +http://www.basetel.com/wealthnow + +We are looking for energetic and self motivated people. If that is you +than click on the link and fill out the form, and one of our +employement specialist will contact you. + +To be removed from our link simple go to: + +http://www.basetel.com/remove.html + + +4592gPjt0-916msGW0934HwlS5-965Tqzv4189Rjvx0-174yaja0756SEjNl56 + diff --git a/Ch3/datasets/spam/spam/00052.edb775ef7470f35cd593d07e5a0466a8 b/Ch3/datasets/spam/spam/00052.edb775ef7470f35cd593d07e5a0466a8 new file mode 100644 index 000000000..5c58a20ef --- /dev/null +++ b/Ch3/datasets/spam/spam/00052.edb775ef7470f35cd593d07e5a0466a8 @@ -0,0 +1,69 @@ +From suayjoe@interszkola.pl Mon Aug 26 15:13:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 0ECD84415F + for ; Mon, 26 Aug 2002 10:12:56 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:56 +0100 (IST) +Received: from vega.isd.pt ([62.229.70.226]) + by webnote.net (8.9.3/8.9.3) with ESMTP id UAA17173 + for ; Sat, 24 Aug 2002 20:46:39 +0100 +From: suayjoe@interszkola.pl +Message-Id: <200208241946.UAA17173@webnote.net> +Received: by vega.isd.pt with Internet Mail Service (5.5.2653.19) + id ; Sat, 24 Aug 2002 20:09:29 +0100 +Received: from 217.35.130.233 (host217-35-130-233.in-addr.btopenworld.com [217.35.130.233]) by vega.isd.pt with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id QYY194NR; Sat, 24 Aug 2002 20:09:27 +0100 +To: zzzz@inetria.com, yyyy@islacc.com, yyyy@yyyy.com, yyyy@koen.com +Cc: zzzz@mailandnews.com, yyyy@market1.com, yyyy@mediaone.net +Date: Sat, 24 Aug 2002 15:47:18 -0400 +Subject: Competitive Mortgage Rates +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 +Content-Transfer-Encoding: 7bit +Content-Type: text/html; charset=us-ascii + +Here It Is!!!! zzzz , + +
    +
    +
    +
    +


    +

    + + [BJK9^":}H&*TG0BK5NKIYs5] + diff --git a/Ch3/datasets/spam/spam/00053.d88d8b162ca1b7108221fb338cd7d0a5 b/Ch3/datasets/spam/spam/00053.d88d8b162ca1b7108221fb338cd7d0a5 new file mode 100644 index 000000000..1d0ebdead --- /dev/null +++ b/Ch3/datasets/spam/spam/00053.d88d8b162ca1b7108221fb338cd7d0a5 @@ -0,0 +1,60 @@ +From happy6251222@yahoo.com Mon Aug 26 15:13:57 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id BCFDA44160 + for ; Mon, 26 Aug 2002 10:12:56 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:56 +0100 (IST) +Received: from marvin.revsystems.com ([208.216.118.20]) + by webnote.net (8.9.3/8.9.3) with ESMTP id BAA18097 + for ; Sun, 25 Aug 2002 01:04:46 +0100 +From: happy6251222@yahoo.com +Message-Id: <200208250004.BAA18097@webnote.net> +Received: from 24.197.77.145 (wv-pkbrg-ubr-b-024-197-077-145.charterwv.net [24.197.77.145]) by marvin.revsystems.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id 3YDKT114; Sat, 24 Aug 2002 20:01:20 -0400 +To: zzzz@isone.net, yyyy@kaiwan.kaiwan.com, yyyy@lexton.com, + zzzz@lpinsurance.com +Cc: zzzz@mail.telepac.pt, yyyy@mcb.net, yyyy@micronet.net, yyyy@moncelon.com, + zzzz@mycell.com, jm@netaxs.com, jm@spamassassin.taint.org, jm@novaone.net +Date: Sat, 24 Aug 2002 19:00:09 -0400 +Subject: TEEN LESBIAN WEBSITE +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Precedence-Ref: l23 +Content-Transfer-Encoding: 7bit +Content-Type: text/html; charset=us-ascii + + + +

    SEE US FOR FREE!
    +
    +Hi there,
    +
    +Me and my slutty amateur girlfriends just put up our very 1st website.
    +We made our website to get us modeling jobs and movie deals, so it is FREE (for now).
    +It’s an adult site with nudity and stuff, so no one under 18 please.
    +
    +It is 100% FREE!
    +GO HERE , check us out, and help us get discovered.
    +
    +XOXO Jenni

    +

     

    +

     

    +

    You have received this advertisement because you have opted in to receive
    +free adult internet offers and specials through our affiliated websites.
    +If you do not wish to receive further emails or have received the
    +email in error you may opt-out of our database by clicking here:
    +CLICK HERE
    +Please allow 24hours for removal.
    +This e-mail is sent in compliance with the Information Exchange Promotion and
    +Privacy Protection Act.
    +section 50 marked as 'Advertisement' with valid 'removal' instruction.

    + + + + [7BJK9^":}H&*TG0BK5NKIYs5] + + diff --git a/Ch3/datasets/spam/spam/00054.62863160db27f89df8c73275b6dae134 b/Ch3/datasets/spam/spam/00054.62863160db27f89df8c73275b6dae134 new file mode 100644 index 000000000..d244056cc --- /dev/null +++ b/Ch3/datasets/spam/spam/00054.62863160db27f89df8c73275b6dae134 @@ -0,0 +1,48 @@ +From safety33o@l13.newnamedns.com Mon Aug 26 15:13:59 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 1C7F644161 + for ; Mon, 26 Aug 2002 10:12:57 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:57 +0100 (IST) +Received: from l13.newnamedns.com ([64.25.38.83]) + by webnote.net (8.9.3/8.9.3) with ESMTP id BAA18187 + for ; Sun, 25 Aug 2002 01:38:58 +0100 +From: safety33o@l13.newnamedns.com +Date: Sat, 24 Aug 2002 17:38:20 -0400 +Message-Id: <200208242138.g7OLcK123566@l13.newnamedns.com> +To: jykwqwerzo@l13.newnamedns.com +Reply-To: safety33o@l13.newnamedns.com +Subject: ADV: Extended Auto Warranties Here undoc + +Protect your financial well-being. +Purchase an Extended Auto Warranty for your Car today. CLICK HERE for a FREE no obligation quote. +http://www.newnamedns.com/warranty/ + +Car troubles always seem to happen at the worst possible time. Protect yourself and your family with a quality Extended Warranty for your car, truck, or SUV, so that a large expense cannot hit you all at once. We cover most vehicles with less than 150,000 miles. + +Buy DIRECT! Our prices are 40-60% LESS! + +We offer fair prices and prompt, toll-free claims service. Get an Extended Warranty on your car today. + +Warranty plan also includes: + + 1) 24-Hour Roadside Assistance. + 2) Rental Benefit. + 3) Trip Interruption Intervention. + 4) Extended Towing Benefit. + +CLICK HERE for a FREE no obligation quote. +http://www.newnamedns.com/warranty/ + + + + + +--------------------------------------- +To easily remove your address from the list, go to: +http://www.newnamedns.com/stopthemailplease/ +Please allow 48-72 hours for removal. + diff --git a/Ch3/datasets/spam/spam/00055.58adfd0c60ebc04370658a76b9352aa1 b/Ch3/datasets/spam/spam/00055.58adfd0c60ebc04370658a76b9352aa1 new file mode 100644 index 000000000..c5e8acbbe --- /dev/null +++ b/Ch3/datasets/spam/spam/00055.58adfd0c60ebc04370658a76b9352aa1 @@ -0,0 +1,72 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Mon Aug 26 15:14:06 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 6E61644162 + for ; Mon, 26 Aug 2002 10:12:57 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:57 +0100 (IST) +Received: from TIPSMTP1.ADMANMAIL.COM (TIPSMTP1.ADMANMAIL.COM [209.216.124.212]) + by webnote.net (8.9.3/8.9.3) with ESMTP id DAA18873 + for ; Sun, 25 Aug 2002 03:56:40 +0100 +Message-Id: <200208250256.DAA18873@webnote.net> +Received: from tiputil1 (10.2.0.30) by TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id <59.000007F6@TIPSMTP1.ADMANMAIL.COM>; Sat, 24 Aug 2002 18:35:27 -0500 +Date: Sat, 24 Aug 2002 18:21:25 -0500 +From: Great Offers +To: JM@NETNOTEINC.COM +Subject: Claim a Free $25 Kmart(R) Gift Card! +X-Info: 134085 +X-Info2: SGO +Mime-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + +EM049 + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +T +
    + +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
    + diff --git a/Ch3/datasets/spam/spam/00056.c56d61cadd81b4ade0030c8dee384704 b/Ch3/datasets/spam/spam/00056.c56d61cadd81b4ade0030c8dee384704 new file mode 100644 index 000000000..fbe133d5e --- /dev/null +++ b/Ch3/datasets/spam/spam/00056.c56d61cadd81b4ade0030c8dee384704 @@ -0,0 +1,118 @@ +From returns@GetResponse.com Mon Aug 26 15:14:07 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 12A6C44163 + for ; Mon, 26 Aug 2002 10:12:58 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:58 +0100 (IST) +Received: from tempus.getresponse.com (tempus.getresponse.com [207.8.198.15]) + by webnote.net (8.9.3/8.9.3) with SMTP id FAA19797 + for ; Sun, 25 Aug 2002 05:51:26 +0100 +Received: (qmail 20707 invoked by uid 1012); 25 Aug 2002 04:58:17 -0000 +Date: 25 Aug 2002 04:58:17 -0000 +Message-ID: <20020825045817.20706.qmail@tempus.getresponse.com> +From: specialweboffers@cdsupport.net +To: zzzz@spamassassin.taint.org +X-Mailer: http://GetResponse.com v. 4.0 +X-Complaints-To: abuse@GetResponse.com +Response-id: r-specialweboffers-rid-246060-bid-89849 +X-Remove-Address: zzzz@spamassassin.taint.org +X-Responder-ID: 246060 +Mime-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Subject: Better Sex for $2.99 until 08/26/2002 !!!! + +Note: +This is NOT SPAM!! This is NOT Unsolicited Email!! You are receiving this message because you OPTED-IN to receive certain special offers from one of our partnering sites. + + +Have you changed your mind? + +Do you want to STOP receiving these special offers? If so, go down to the bottom and click on the "unsubscribe" link to be removed from this OPT-IN only list. +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +Dear Subscriber, Please take a moment to remove yourself from this list if you feel you are receiving these messages in error, by going down to the bottom and clicking on the “unsubscribe” link below. + + +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +Special Offer $2.99 until 08/26/2202 5:00 pm + + +1. Sexual Fitness and Penis Enlargement System +............................................................ +Video of the week:(Choking a Chinese Chicken?) + +Caught on tape! +Some Asian Guy in a Chinese Dressing Room. What the hell is this guy doing in there? Is he actually chocking his chicken on tape? You'll see about him and more when you check out this special offer! + +Offer #08-515352-2002(4) +Page (1 of 1) + +Special Offer $2.99 until 08/26/2202 5:00 pm +............................................................ +Subject : Male Enlargement/Strengthening and Total Sexual Fitness! +For only............($2.99)! + +Just wanted to remind you about the special we have this month. Our total program has the following information: + +· How to Increase Permanent Length! +· How to Increase Permanent Width! +· How to stop pre-mature ejaculation! +· How to stop Erectile Dysfunction! +· How to Increase Penis Strength! +· How to make your Penis Thick and Meaty! +· How to Enlarge the Penis head (glans)! +· How to Increase Staying Power! +· How to Increase Ejaculation Distance and Volume! +· Plus much more!!!! + +Plus our new Quick Start Program: + +*Quick Start - Extreme Sexual Fitness Program! + +Now you can Jump Start your Penis Enlargement and Sexual Fitness by using our Quick Start Program! The Quick Start Program is a no frills bare-bones Sexual Fitness and Penis Enlargement Cram Course set up to have you Gaining size and Performing Better in a really short amount of time. Once you finish the Quick Start Program you can Explore the whole Penis Enlargement Course. Using the Quick Start Program is totally your option. + +*Video Library - Search our video library of Instructional and Original Amateur Entertainment Videos inside! + +*The Most information about Penis Enlargement and Sexual Fitness! + +With over (40) Different Techniques each explained step-by-step, this system is the best value for your money pound for pound! + +*The Lowest price on the Net! .....($2.99) for everything!! +This offer is for a limited time only! Order Today! +Special Offer $2.99 until 08/26/2202 5:00 pm + + +For other Info: +FAQ's +Testimonials +Ordering Info +Business Opps +Video of the week info +Advertising Info +Plus all other! + +Go to: www.bigthangz.com + +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + + +2. Boost your Sales! +............................................................ +Your Ad Will be here if you want it seen by Millions every month! Plus be in Widely circulated Magazines and Newspapers Nationwide! Plus join our Permission based email Advertising ring! Blow your sales through the roof! + + +Ask us how at: sales@bigthangz.com + +Numbers 3-10...............Coming Soon! + +Have you changed your mind? + +Do you want to STOP receiving these special offers? If so, go down to the bottom and click on the "unsubscribe" link to be removed from this OPT-IN only list. + +--- +To remove yourself from further mailings, click the link below: +http://GetResponse.com/r.cgi?a=specialweboffers&e=zzzz_Xyspamassassin.taint.org&i= + diff --git a/Ch3/datasets/spam/spam/00057.0a2e17bde9485e999ac2259df38528e2 b/Ch3/datasets/spam/spam/00057.0a2e17bde9485e999ac2259df38528e2 new file mode 100644 index 000000000..22d8bdb16 --- /dev/null +++ b/Ch3/datasets/spam/spam/00057.0a2e17bde9485e999ac2259df38528e2 @@ -0,0 +1,32 @@ +From safety33o@l5.newnamedns.com Mon Aug 26 15:14:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 3904F44165 + for ; Mon, 26 Aug 2002 10:12:59 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:59 +0100 (IST) +Received: from l5.newnamedns.com ([64.25.38.75]) + by webnote.net (8.9.3/8.9.3) with ESMTP id IAA20311 + for ; Sun, 25 Aug 2002 08:45:23 +0100 +From: safety33o@l5.newnamedns.com +Date: Sun, 25 Aug 2002 00:49:11 -0400 +Message-Id: <200208250449.g7P4nBd26406@l5.newnamedns.com> +To: uvkbamujkz@l5.newnamedns.com +Reply-To: safety33o@l5.newnamedns.com +Subject: ADV: Lowest life insurance rates available! hsdpr + +Lowest rates available for term life insurance! Take a moment and fill out our online form to see the low rate you qualify for. Save up to 70% from regular rates! Smokers accepted! http://www.newnamedns.com/termlife/ + +Representing quality nationwide carriers. Act now! + + + + + +--------------------------------------- +To easily remove your address from the list, go to: +http://www.newnamedns.com/stopthemailplease/ +Please allow 48-72 hours for removal. + diff --git a/Ch3/datasets/spam/spam/00058.64bb1902c4e561fb3e521a6dbf8625be b/Ch3/datasets/spam/spam/00058.64bb1902c4e561fb3e521a6dbf8625be new file mode 100644 index 000000000..8cd210905 --- /dev/null +++ b/Ch3/datasets/spam/spam/00058.64bb1902c4e561fb3e521a6dbf8625be @@ -0,0 +1,93 @@ +From ra1pohk6x5119@yahoo.com Mon Aug 26 15:14:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id A006244166 + for ; Mon, 26 Aug 2002 10:12:59 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:12:59 +0100 (IST) +Received: from mailserv.mrdd.org (mail.mrdd.co.logan.oh.us [63.71.125.165]) + by webnote.net (8.9.3/8.9.3) with ESMTP id MAA21231 + for ; Sun, 25 Aug 2002 12:48:15 +0100 +Received: from mx1.mail.yahoo.com (acbeec6a.ipt.aol.com [172.190.236.106]) by mailserv.mrdd.org with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id RBC5RWLF; Sun, 25 Aug 2002 07:30:50 -0400 +Message-ID: <00004d916448$00001258$00005b5e@mx1.mail.yahoo.com> +To: +Cc: , , + , , , + , , +From: "Caroline" +Subject: Life Insurance Quotes Without the Hassle... JHIWNS +Date: Sun, 25 Aug 2002 04:31:51 -1900 +MIME-Version: 1.0 +Reply-To: ra1pohk6x5119@yahoo.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + +
    +Save up to + +75% on your Term Life +Insurance! +
    + +Compare rates from top insurance companies around +the country +

    + +In our life and times, it's important to plan for +your family's future, while +
    being comfortable financially. Choose the right +Life Insurance policy today.
    +

    + +Click the link below to compare the lowest rates +and save up to 75% +

    + +COMPARE YOUR COVERAGE +

    + +You'll be able to compare rates and get a free +application in less than a minute! +

    + +*Get your FREE instant quotes...
    +*Compare the lowest prices, then...
    +*Select a company and Apply Online.
    +

    + +GET A FREE QUOTE NOW! +
    + +You can't predict the future, but you can always +prepare for it. + +



    +



    +to be +excluded from future contacts

    + + +m_d_serv + + + + + diff --git a/Ch3/datasets/spam/spam/00059.dc5b9ea22c6848c97871f0d9576cc931 b/Ch3/datasets/spam/spam/00059.dc5b9ea22c6848c97871f0d9576cc931 new file mode 100644 index 000000000..902d34b3a --- /dev/null +++ b/Ch3/datasets/spam/spam/00059.dc5b9ea22c6848c97871f0d9576cc931 @@ -0,0 +1,48 @@ +From jennifer3530t76@usa.com Mon Aug 26 15:14:44 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 1439B44169 + for ; Mon, 26 Aug 2002 10:13:02 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:13:02 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id QAA21963 + for ; Sun, 25 Aug 2002 16:29:10 +0100 +From: jennifer3530t76@usa.com +Received: from usa.com (unknown [61.157.85.117]) + by smtp.easydns.com (Postfix) with SMTP id 3606A2FDDF + for ; Sun, 25 Aug 2002 11:28:39 -0400 (EDT) +Received: from unknown (HELO mx.loxsystems.net) (114.106.224.38) + by rly-xl05.dohuya.com with NNFMP; Sun, 25 Aug 0102 02:03:20 +0500 +Received: from n9.groups.huyahoo.com ([56.223.203.245]) + by smtp013.mail.yahou.com with esmtp; Sun, 25 Aug 0102 07:02:16 -0100 +Received: from unknown (HELO n9.groups.huyahoo.com) (196.144.50.152) + by sydint1.microthink.com.au with smtp; Sun, 25 Aug 0102 06:01:12 -0500 +Reply-To: +Message-ID: <022d72e64d0d$4237d1c8$4ce86ed6@okowid> +To: +Subject: Get out of debt quick! 4179uKlj5-057SXua1524UHkC5-900-28 +Date: Sun, 25 Aug 0102 10:36:36 -1000 +MiME-Version: 1.0 +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2616 +Importance: Normal +Content-Type: text/html; charset="iso-8859-1" + +

    kenya
    +Do you have too much debt?
    +
    +Would you like to lower your monthly payments
    +and save money?
    +
    +Let us help you click here
    +
    +
    +
    +

    If you would like to be taken off our list, click here

    +

    2170uzHA6-646nlhK0895SDnb0-294BCPgl32

    + + diff --git a/Ch3/datasets/spam/spam/00060.ec71d52a6f585ace52f4a2a2be2adfce b/Ch3/datasets/spam/spam/00060.ec71d52a6f585ace52f4a2a2be2adfce new file mode 100644 index 000000000..88d6b82f7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00060.ec71d52a6f585ace52f4a2a2be2adfce @@ -0,0 +1,40 @@ +From IA@IA.Net Mon Aug 26 15:14:41 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 0E6D844167 + for ; Mon, 26 Aug 2002 10:13:01 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:13:01 +0100 (IST) +Received: from IA.Net (200.69.146.130.techtelnet.net [200.69.146.130] (may be forged)) + by webnote.net (8.9.3/8.9.3) with SMTP id NAA21278 + for ; Sun, 25 Aug 2002 13:07:47 +0100 +From: IA@IA.Net +Reply-To: +Message-ID: <013a18c67c6e$4435b2d0$2ad05db2@qrtvpd> +To: Internet.Marketor@webnote.net +Subject: Market Internet Access - No Investment Needed +Date: Sun, 25 Aug 2002 20:57:58 -0900 +MiME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2615.200 +Importance: Normal +Content-Transfer-Encoding: 8bit + +Market Internet Access + +No Investment Needed + +Premium Internet Access for only $14.95 per month or less! + +Earn $1 per Subscriber per month + +Go To: + +http://new.isp.50megs.com/ +1918BQhX5-227CpaM0598cJWr2-912YmJg32l34 + diff --git a/Ch3/datasets/spam/spam/00061.bec763248306fb3228141491856ed216 b/Ch3/datasets/spam/spam/00061.bec763248306fb3228141491856ed216 new file mode 100644 index 000000000..f90a75694 --- /dev/null +++ b/Ch3/datasets/spam/spam/00061.bec763248306fb3228141491856ed216 @@ -0,0 +1,74 @@ +From cweqx@dracnet.es Mon Aug 26 15:14:56 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 570E54416A + for ; Mon, 26 Aug 2002 10:13:02 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:13:02 +0100 (IST) +Received: from Correo.idatextension.edu.pe (correo.idatextension.edu.pe [200.48.194.12]) + by webnote.net (8.9.3/8.9.3) with ESMTP id RAA22204 + for ; Sun, 25 Aug 2002 17:20:39 +0100 +Received: from n05.sp.bs.dlr.de ([80.18.51.178]) by Correo.idatextension.edu.pe with Microsoft SMTPSVC(5.0.2195.2966); + Sun, 25 Aug 2002 08:13:33 -0500 +To: +From: "Jodie" +Subject: Re: Instant Quote +Date: Sun, 25 Aug 2002 06:08:23 -1900 +MIME-Version: 1.0 +Message-ID: +X-OriginalArrivalTime: 25 Aug 2002 13:13:35.0462 (UTC) FILETIME=[37E86860:01C24C39] +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + + + + + + + + + + + + + <= +/TBODY>


    + + + +
    =FFFFFFA9 + Copyright 2002 - All rights reserved

    If you would no longer l= +ike us + to contact you or feel that you have
    received this email in error= +, + please clic= +k here to + unsubscribe.
    +
     
    + + + diff --git a/Ch3/datasets/spam/spam/00062.3019eac14dfe3c503c03e25e70e63091 b/Ch3/datasets/spam/spam/00062.3019eac14dfe3c503c03e25e70e63091 new file mode 100644 index 000000000..a25682171 --- /dev/null +++ b/Ch3/datasets/spam/spam/00062.3019eac14dfe3c503c03e25e70e63091 @@ -0,0 +1,40 @@ +From info@smokesdirect.com Mon Aug 26 15:14:57 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id DD0E44416B + for ; Mon, 26 Aug 2002 10:13:02 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:13:02 +0100 (IST) +Received: from linux.local ([213.9.248.151]) + by webnote.net (8.9.3/8.9.3) with SMTP id SAA22481 + for ; Sun, 25 Aug 2002 18:24:54 +0100 +Message-Id: <200208251724.SAA22481@webnote.net> +Received: (qmail 21857 invoked from network); 25 Aug 2002 17:02:55 -0000 +Received: from unknown (HELO h) (192.168.0.2) + by linux.local with SMTP; 25 Aug 2002 17:02:55 -0000 +From: "Sales Department" +Subject: Cheap Fags +To: zzzz@spamassassin.taint.org +Sender: Sales Department +Reply-To: info@smokesdirect.com +Date: Sun, 25 Aug 2002 19:08:37 +0200 +X-Priority: 3 +X-Library: Indy 8.0.25 + +Dear Sir / Madam + +If you are fed up of being 'ripped off' by the British government every time you buy your tobacco, then you should visit our website, where you can now buy 4 cartons of cigarettes, or 40 pouches of rolling tobacco from as little as 170 Euros (approx 105 pounds), inclusive of delivery by registered air mail from our office in Spain. + +Why pay more??? + +Visit our website at +http://www.smokesdirect.com/?ID=2 + +Best regards +Sales Department +Smokes Direct +Spain +xay2158961y + diff --git a/Ch3/datasets/spam/spam/00063.2334fb4e465fc61e8406c75918ff72ed b/Ch3/datasets/spam/spam/00063.2334fb4e465fc61e8406c75918ff72ed new file mode 100644 index 000000000..015648e09 --- /dev/null +++ b/Ch3/datasets/spam/spam/00063.2334fb4e465fc61e8406c75918ff72ed @@ -0,0 +1,54 @@ +From Herson923766@yahoo.com Mon Aug 26 15:15:05 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 2C4AF43F99 + for ; Mon, 26 Aug 2002 10:13:33 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:13:33 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id TAA22702 + for ; Sun, 25 Aug 2002 19:19:06 +0100 +From: Herson923766@yahoo.com +Received: from mx4.mail.yahoo.com (host217-34-166-82.in-addr.btopenworld.com [217.34.166.82]) + by smtp.easydns.com (Postfix) with SMTP id 3E1642C0FF + for ; Sun, 25 Aug 2002 14:18:13 -0400 (EDT) +Content-Type: text/plain; charset=us-ascii +Received: from mx4.mail.yahoo.com by 5TMJCU1YGU9H06.mx4.mail.yahoo.com with SMTP for zzzz@spamassassin.taint.org; Sun, 25 Aug 2002 14:18:15 -0500 +X-Mailer: Microsoft Outlook Express 5.00.2615.200 +Date: Sun, 25 Aug 2002 14:18:15 -0500 +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +Subject: zzzz, Is Your web Site Making Money! 2:18:15 PM 8/25/2002 +Message-Id: <7JP33JVGVW6H.12EU0SLP7.Herson923766@yahoo.com> +X-Sender: Herson923766@yahoo.com +To: zzzz@spamassassin.taint.org +Importance: Normal +Content-Transfer-Encoding: 8bit + +IS YOUR BUSINESS MAKING MONEY! +Set Up To Accept Credit Cards Today! +No Obligation Consultation! +No Set Up Fees +No Application Fees +All Credit Types Accepted +Retail Rates as Low as 1.60% +Mail Order Rates As Low as 2.30% +Set Up Your Merchant Account within 48 Hours +NO CANCELLATION FEES +No Money Down +No Reprogramming Fees +We Will Beat Anybody’s Deal By 15% +We make it easy and affordable to start accepting Credit Cards today. +99% of our applicants are approved! + +THIS IS NOT AN OFFER TO OBTAIN A CREDIT CARD! +US RESIDENTS ONLY! + +http://servicesma.com/leads.htm + + +To Unsubscribe, Please Click +http://www.servicesma.com/remove.html + diff --git a/Ch3/datasets/spam/spam/00064.65b95365450ebe5eef61e7f1c60edc5e b/Ch3/datasets/spam/spam/00064.65b95365450ebe5eef61e7f1c60edc5e new file mode 100644 index 000000000..37e566ec8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00064.65b95365450ebe5eef61e7f1c60edc5e @@ -0,0 +1,40 @@ +From IA@rogers.com Mon Aug 26 15:15:15 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id BF10044155 + for ; Mon, 26 Aug 2002 10:13:33 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:13:33 +0100 (IST) +Received: from rogers.com ([211.248.58.1]) + by webnote.net (8.9.3/8.9.3) with SMTP id VAA23062 + for ; Sun, 25 Aug 2002 21:02:40 +0100 +From: IA@rogers.com +Reply-To: +Message-ID: <016d65d07e1e$5137c3e6$0ad50ab6@amvwkp> +To: Internet.Access@webnote.net +Subject: Market Internet Access - No Investment Needed +Date: Mon, 26 Aug 2002 05:48:48 -1000 +MiME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: AOL 7.0 for Windows US sub 118 +Importance: Normal +Content-Transfer-Encoding: 8bit + +Market Internet Access + +No Investment Needed + +Premium Internet Access for only $14.95 per month or less! + +Earn $1 per Subscriber per month + +Go To: + +http://new.isp.50megs.com/ +3442BvLB9-565fAFx0200Lbck9-698onqh7l33 + diff --git a/Ch3/datasets/spam/spam/00065.6203de135559b319326445aafd68dbca b/Ch3/datasets/spam/spam/00065.6203de135559b319326445aafd68dbca new file mode 100644 index 000000000..6a949cac3 --- /dev/null +++ b/Ch3/datasets/spam/spam/00065.6203de135559b319326445aafd68dbca @@ -0,0 +1,48 @@ +From claudia_robinson@eudoramail.com Mon Aug 26 15:15:14 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 722F043F9B + for ; Mon, 26 Aug 2002 10:13:33 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:13:33 +0100 (IST) +Received: from eudoramail.com (c17996.rivrw4.nsw.optusnet.com.au [211.28.162.97]) + by webnote.net (8.9.3/8.9.3) with SMTP id UAA22962 + for ; Sun, 25 Aug 2002 20:36:12 +0100 +From: claudia_robinson@eudoramail.com +Reply-To: +Message-ID: <010e05d48e1e$4357c8e7$3db10ed5@qclywl> +To: +Subject: re: domain registration savings +Date: Mon, 26 Aug 2002 06:30:21 -1100 +MiME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal +Content-Transfer-Encoding: 8bit + + +PUBLIC ANNOUNCEMENT: + +The new domain names are finally available to the general public at discount prices. Now you can register one of the exciting new .BIZ or .INFO domain names, as well as the original .COM and .NET names for just $14.95. These brand new domain extensions were recently approved by ICANN and have the same rights as the original .COM and .NET domain names. The biggest benefit is of-course that the .BIZ and .INFO domain names are currently more available. i.e. it will be much easier to register an attractive and easy-to-remember domain name for the same price. Visit: http://www.affordable-domains.com today for more info. + +Register your domain name today for just $14.95 at: http://www.affordable-domains.com/ Registration fees include full access to an easy-to-use control panel to manage your domain name in the future. + +Sincerely, + +Domain Administrator +Affordable Domains + + +To remove your email address from further promotional mailings from this company, click here: +http://www.centralremovalservice.com/cgi-bin/domain-remove.cgi +(I3-ss1)9302YsCL8-129qkjk2635Okca5-604qkYb2284cVMm7-023uoOI4889tl53 + + + + + diff --git a/Ch3/datasets/spam/spam/00066.6afbb1258bcf3e4d59d53c847a84e469 b/Ch3/datasets/spam/spam/00066.6afbb1258bcf3e4d59d53c847a84e469 new file mode 100644 index 000000000..3594c689c --- /dev/null +++ b/Ch3/datasets/spam/spam/00066.6afbb1258bcf3e4d59d53c847a84e469 @@ -0,0 +1,50 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Mon Aug 26 15:15:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 092EA44156 + for ; Mon, 26 Aug 2002 10:13:34 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:13:34 +0100 (IST) +Received: from TIPSMTP1.ADMANMAIL.COM (TIPSMTP1.ADMANMAIL.COM [209.216.124.212]) + by webnote.net (8.9.3/8.9.3) with ESMTP id AAA23585 + for ; Mon, 26 Aug 2002 00:22:30 +0100 +Message-Id: <200208252322.AAA23585@webnote.net> +Received: from tiputil1 (tiputil1.corp.tiprelease.com) by TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id <84.0000082A@TIPSMTP1.ADMANMAIL.COM>; 25 Aug 2002 16:35:04 -0500 +Date: Sun, 25 Aug 2002 16:23:03 -0500 +From: Great Offers +To: JM@NETNOTEINC.COM +Subject: 8 Free Movie Tickets for doing a 2 Minute survey! Any Movie, Any Theater! +X-Info: 134085 +X-Info2: SGO +Mime-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + +8 FREE Movie Tickets + + + + + + + + +
    +
    +T +
    + +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
    + diff --git a/Ch3/datasets/spam/spam/00067.ec108870b01dc3ccb8fabc5def869ca5 b/Ch3/datasets/spam/spam/00067.ec108870b01dc3ccb8fabc5def869ca5 new file mode 100644 index 000000000..daeae2788 --- /dev/null +++ b/Ch3/datasets/spam/spam/00067.ec108870b01dc3ccb8fabc5def869ca5 @@ -0,0 +1,176 @@ +From eklabunde@hotmail.com Mon Aug 26 15:15:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 8D96944158 + for ; Mon, 26 Aug 2002 10:13:35 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:13:35 +0100 (IST) +Received: from exserv2.VCKC.COM ([65.70.141.132]) + by webnote.net (8.9.3/8.9.3) with ESMTP id GAA24839 + for ; Mon, 26 Aug 2002 06:10:59 +0100 +From: eklabunde@hotmail.com +Received: from ciop.com (CONDOR [200.62.194.130]) by exserv2.VCKC.COM with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id RMS6RWM1; Sun, 25 Aug 2002 23:58:07 -0500 +Message-ID: <00001d407f75$000048f4$00007c4d@city.penticton.bc.ca> +To: , , , + , , , + , , , + , , , + , , + , , , + , , + , , + , +Cc: , , , + , , , + , , + <106375.3326@compuserve.com>, , + , , , + , , , + , , , + , , , + +Subject: Fw: PROTECT YOUR COMPUTER,YOU NEED SYSTEMWORKS!DGYWAOG +Date: Mon, 26 Aug 2002 00:59:23 -1600 +MIME-Version: 1.0 +Reply-To: eklabunde@hotmail.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Does Your Computer Need an Oil Change + + + + + + + + +
    Does Your Comp= +uter Need an Oil + Change?
    + + + + +
    N= +orton
    SystemWorks + 2002
    Professional + Edition
    + + + + +
    = +Made + by the Creators of the #1 Anti-Virus Software on the Market!<= +/b>
    + + + + + +
    This + UNBEATABLE software suite comes with EVERY + program you'll ever n= +eed to answer the problems or threats that your + computer faces each day of it's Life!

    Included in this magnificent deal + are the following programs:
    + + + + + +
    Norton + AntiVirus=FFFFFF99 2002 - THE #1 + ANTI-VIRUS PROTECION EVER!
    Norton Utilities=FFFFFF99 2002 + -
    DIAGNOSE ANY PROBLEM WI= +TH YOUR + SYSTEM!
    + Norton Ghost=FFFFFF99 2002 -
    MAKES + BACKING UP YOUR VALUABLE DATA EASY!
    + Norton CleanSweep=FFFFFF99 2002 -
    CLEANS + OUT EXCESS INTERNET FILE BUILDUP!
    + Norton WinFax=FFFFFF99 Basic -
    TURNS YOUR + CPU INTO A FAX MACHINE!
    +
    + GoBack=FFFFFFAE 3 Personal - HELPS + PREVENT YOU FROM MAKING ANY MISTAKES!
    + + + + + +
    *ALL + this has a retail price of $99.95*
    Get it + Now for ONLY $29.99!
    with + FREE SHIPPING!
    + + + + + +
    CLICK + HERE to order NOW!
    +

    This Product is available NOW. = +When we +run out it's gone, so get it while it's HOT!

    + +

     

    +

     

    + + + + +
    Your + email address was obtained from an opt-in list. Opt-in IAO (Internet + Advertising Organisation)  List
    +  Serial No. EGU601.  If you wish to be unsubscribed f= +rom + this list, please Click + here. We do not condone spam in any shape or form. Thank You kin= +dly + for your cooperation.
    + + + + + + + diff --git a/Ch3/datasets/spam/spam/00068.d10af636a6082d5172ceb34a944486e6 b/Ch3/datasets/spam/spam/00068.d10af636a6082d5172ceb34a944486e6 new file mode 100644 index 000000000..db4d4e853 --- /dev/null +++ b/Ch3/datasets/spam/spam/00068.d10af636a6082d5172ceb34a944486e6 @@ -0,0 +1,75 @@ +From jek@imail.ru Mon Aug 26 15:15:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 1317544159 + for ; Mon, 26 Aug 2002 10:13:38 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:13:38 +0100 (IST) +Received: from tccm.tmc.ac.kr ([203.241.120.219]) + by webnote.net (8.9.3/8.9.3) with SMTP id HAA24917 + for ; Mon, 26 Aug 2002 07:23:40 +0100 +Received: from relay3.aport.ru (unverified [64.110.172.196]) by tccm.tmc.ac.kr + (EMWAC SMTPRS 0.83) with SMTP id ; + Mon, 26 Aug 2002 10:11:17 +0900 +Message-ID: <000068bc4a02$00001889$00002d86@relay3.aport.ru> +To: , , , + , , , +Cc: , , , + , , +From: "CHAE" +Subject: Save now +Date: Sun, 25 Aug 2002 19:21:44 01800 +MIME-Version: 1.0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit +Reply-To: wvx37x@yahoo.com +X-Priority: 5 +X-MSMail-Priority: Low +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 5.00.3018.1300 +Sensitivity: Confidential +X-MimeOLE: Produced By Microsoft MimeOLE V5.00.3018.1300 + +*****Write down***** + + +Hello , + + +It is time to refinance! + +Your credit does not matter, we can approve anyone. + +Now is the time to let some of the top mortgage companies +in the country compete for your business. + +If you have good credit we will give you the most amazing +rates available anywhere! + +If you have poor credit, don't worry! We can still refinance +you with the most competitive rates in the industry! + + +Let Us put Our Expertise to Work for You! Guaranteed! + +http://21377@www.top-lenders.com/app + + + +Best, +Top-Lenders + + + + + + + + + +Erase +http://21631@www.top-lenders.com/remove.html + diff --git a/Ch3/datasets/spam/spam/00069.066b1a012235d062a5da73eead4a6b35 b/Ch3/datasets/spam/spam/00069.066b1a012235d062a5da73eead4a6b35 new file mode 100644 index 000000000..cf7c97342 --- /dev/null +++ b/Ch3/datasets/spam/spam/00069.066b1a012235d062a5da73eead4a6b35 @@ -0,0 +1,146 @@ +From ib@newafrica.com Mon Aug 26 15:15:34 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 70DB04415B + for ; Mon, 26 Aug 2002 10:13:38 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:13:38 +0100 (IST) +Received: from 196.23.145.163 (200-171-104-254.dsl.telesp.net.br [200.171.104.254]) + by webnote.net (8.9.3/8.9.3) with SMTP id HAA24928 + for ; Mon, 26 Aug 2002 07:45:01 +0100 +Message-Id: <200208260645.HAA24928@webnote.net> +Received: from [106.226.127.61] by n7.groups.yahoo.com with local; Aug, 25 2002 11:17:27 PM +1100 +Received: from [63.85.85.236] by smtp-server6.tampabay.rr.com with SMTP; Aug, 25 2002 10:41:40 PM -0000 +Received: from 30.215.79.204 ([30.215.79.204]) by m10.grp.snv.yahoo.com with SMTP; Aug, 25 2002 9:38:37 PM +0300 +From: Membership Adult Club +To: zzzz@spamassassin.taint.org +Cc: +Subject: Fw: Re: Account For Cum Shots To: zzzz@spamassassin.taint.org OfferID: qxjx +Sender: Membership Adult Club +Mime-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Sun, 25 Aug 2002 23:45:07 -0700 +X-Mailer: eGroups Message Poster + + ################################################## +# # +# Adult Club # +# Offers FREE Membership # +# # +################################################## + +>>>>> INSTANT ACCESS TO ALL SITES NOW +>>>>> Your User Name And Password is. +>>>>> User Name: zzzz@spamassassin.taint.org +>>>>> Password: 1534 + +3 of the Best Adult Sites on the Internet for FREE! + +--------------------------------------- + +NEWS 08/15/02 +With just over 2.9 Million Members that signed up for FREE, Last month +there were 721,184 New +Members. Are you one of them yet??? + +--------------------------------------- + +Our Membership FAQ + +Q. Why are you offering free access to 3 adult membership sites for +free? +A. I have advertisers that pay me for ad space so you don't have to pay +for membership. + +Q. Is it true my membership is for life? +A. Absolutely you'll never have to pay a cent the advertisers do. + +Q. Can I give my account to my friends and family? +A. Yes, as long they are over the age of 18. + +Q. Do I have to sign up for all 3 membership sites? +A. No just one to get access to all of them. + +Q. How do I get started? +A. Click on one of the following links below to become a member. + +- These are multi million dollar operations with policies and rules. +- Fill in the required info and they won't charge you for the Free pass! +- If you don't believe us, just read their terms and conditions. + +--------------------------- + +new! > Tilthy Teen Sluts (added 08-15-02) +The Ultimate XXX TEEN Site... It’s all for FREE!! +>>> Click Here: +http://www.bozombo.com/filthyteensluts/index.php?affid=1534 +AOL +Users Click Here + +new! > Lucky Amateur Wives (added 08-08-02) +Amateur Wives Giving it up... It’s all for FREE!! +http://www.bozombo.com/luckyamateurwives/index.php?affid=1534 +AOL +Users Click Here + +new! > BOOB RANCH (added 08-01-02) +See The Worlds Best Boobs On The Net... It’s all for FREE!! +>>> Click Here: http://www.bozombo.com/hugetits/index.php?affid=1534 +AOL +Users Click Here + +-------------------------- + +Jennifer Simpson, Miami, FL +Your FREE lifetime membership has entertained my boyfriend and I for +the last two years! Your Adult Sites are the best on the net! + +Joe Morgan Manhattan, NY +Your live sex shows and live sex cams are unbelievable. The best part +about your porn sites, is that they're absolutely FREE! + +-------------------------- + + + + + + + + + + + + + + + + + + + + +Removal Instructions And Disclaimer: +We are strongly against sending unsolicited emails to those who do not +wish to receive our special mailings. You have opted in to one or more +of our affiliate sites requesting to be notified of any special offers +we may run from time to time. We also have attained the services of an +independent 3rd party to overlook list management and removal services. +This is NOT unsolicited email. If you do not wish to receive further +mailings, please Click on this URL http://greenzer.com/remove.php or AOL Users Click Here to be +removed from the list. Please accept our apologies if you have been sent +this email in error. We honor all removal requests. + + + + + + +qvnckofayjfpfpsswkfvdrmcyljarjxw + diff --git a/Ch3/datasets/spam/spam/00070.ab34b6c044a55bef3d6c1f64b7521773 b/Ch3/datasets/spam/spam/00070.ab34b6c044a55bef3d6c1f64b7521773 new file mode 100644 index 000000000..63484ff20 --- /dev/null +++ b/Ch3/datasets/spam/spam/00070.ab34b6c044a55bef3d6c1f64b7521773 @@ -0,0 +1,42 @@ +From zzzzrubin@mx05.serveit21.com Mon Aug 26 15:15:41 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id D850C4416E + for ; Mon, 26 Aug 2002 10:13:39 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:13:39 +0100 (IST) +Received: from mark9.hostserve21.com (mark9.hostserve21.com [64.25.35.72]) + by webnote.net (8.9.3/8.9.3) with ESMTP id IAA24994; + Mon, 26 Aug 2002 08:23:05 +0100 +From: zzzzrubin@mx05.serveit21.com +Date: Mon, 26 Aug 2002 11:31:34 -0400 +Message-Id: <200208261531.g7QFVXU02606@mark9.hostserve21.com> +X-Mailer: Mutt/1.3.19i +Reply-To: +To: +Subject: $250,000 for only $6.50 per month. qkdjtqsscr + +When America's top companies compete for your business, you win. + +In today's world, it's important to expect the unexpected. When preparing for the future, we must always consider our family. To plan for your family's future, the right life insurance policy is a necessity. But who wants to pay too much for life insurance? Let us help you find the right quote, quickly and easily... + +Compare your coverage... +$250,000... as low as $6.50 per month. +$500,000... as low as $9.50 per month. +$1,000,000... as low as $15.50 per month. + +http://getit.hostserve21.com/sure_quote/LF06-237600/ + +Take a moment. +Let us show you that we are here to save time, and money. + +Receive up to 15 quotes in seconds. + +http://getit.hostserve21.com/sure_quote/LF06-237600/ + + +Click here to delete your address from future updates. +http://getit.hostserve21.com/sure_quote/rm/ + diff --git a/Ch3/datasets/spam/spam/00071.4b7e06d97286ec97820a0f8725878126 b/Ch3/datasets/spam/spam/00071.4b7e06d97286ec97820a0f8725878126 new file mode 100644 index 000000000..ea80a8644 --- /dev/null +++ b/Ch3/datasets/spam/spam/00071.4b7e06d97286ec97820a0f8725878126 @@ -0,0 +1,46 @@ +From WebDesignHQ.com@carrey.adgrafix.com Mon Aug 26 15:17:33 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 98D0944157 + for ; Mon, 26 Aug 2002 10:15:31 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:15:31 +0100 (IST) +Received: from carrey.adgrafix.com (carrey.adgrafix.com [208.230.129.2]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7O1OWZ18858 for + ; Sat, 24 Aug 2002 02:24:32 +0100 +Received: (from come@localhost) by carrey.adgrafix.com (8.9.3/8.9.3) id + VAA15757; Fri, 23 Aug 2002 21:24:39 -0400 (EDT) +Date: Fri, 23 Aug 2002 21:24:39 -0400 (EDT) +Message-Id: <200208240124.VAA15757@carrey.adgrafix.com> +To: Users@taint.org +Subject: WebDesignHQ Newsletter +From: WebDesignHQ.com@carrey.adgrafix.com + +We thought you may be interested in our new software release: + +WebDesignHQ Newsletter +23rd of August 2002 07:10:09 PM + +The SiteBuilder v2.0 Final-Release is now available and it has many enhanced features as well as more licensing options compared to the Pre-Release. + +The SiteBuilder is the ultimate 'nuke module' for making money with your portal system! + +Check out the demo online and to learn how to purchase the Full Version visit: http://www.WebDesignHQ.com + +The WebDesignHQ Flash-SiteBuilder Software is a userfriendly community based Multimedia Flash Web Site creation tool (similar to geocities/angelfire style engine... but with Flash!). It features an automatic publishing system that enables anyone to easily build their own web site online with nothing but their web browser. + +This software can be installed on your own web site and will provide your web site visitors or registered members the ability to create their own Multimedia Web Site which they can edit anytime using only a web browser right at your own Web Site! + +No FTP, HTML, or Flash knowledge is required to build and customize a Web Site. + +An excellent solution for web designers and web hosting companies who have many clients that need constant updates. + +You can learn more about how to get this software for your own site at : http://www.webdesignhq.com + ------------------------------------------------- + If you would like to unsubscribe from this + newsletter, just click the hyperlink below: + +http://www.webdesignhq.com/omnivore/vlist/vlist.php?action=out&address=Users@iiu.taint.org + diff --git a/Ch3/datasets/spam/spam/00072.d519a73b92f487519c2bc5ba45f5eb2c b/Ch3/datasets/spam/spam/00072.d519a73b92f487519c2bc5ba45f5eb2c new file mode 100644 index 000000000..4237c2cc8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00072.d519a73b92f487519c2bc5ba45f5eb2c @@ -0,0 +1,48 @@ +From future@businez.com Mon Aug 26 15:23:35 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 83E9B44155 + for ; Mon, 26 Aug 2002 10:21:08 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:21:08 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7PJTRZ23863 for + ; Sun, 25 Aug 2002 20:29:27 +0100 +Received: from localhost.com ([203.155.16.152]) by webnote.net + (8.9.3/8.9.3) with SMTP id UAA22942 for ; Sun, + 25 Aug 2002 20:29:33 +0100 +From: future@businez.com +Message-Id: <200208251929.UAA22942@webnote.net> +To: zzzz@spamassassin.taint.org +Date: Mon, 26 Aug 2002 02:29:35 +0700 +Subject: future business ÊÓËÃѺ¤Ø³! +X-Mailer: QuickSender 1.05 +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7PJTRZ23863 +Content-Transfer-Encoding: 8bit + +> +>“µ×è¹µÑÇ ¡ÑºâÅ¡¸ØÃ¡Ô¨º¹ÍÔ¹àµÍÃìà¹çµ” +>àµÃÕÂÁµÑǡѺ¡ÒÃà»ÅÕè¹á»Å§¤ÃÑé§ãË­è +>¾º¡ÑºÃٻẺ¢Í§§Ò¹áËè§Í¹Ò¤µ ã¹Âؤ¢Í§âÅ¡äÃé¾ÃÁá´¹ Çѹ¹Õé +>§Ò¹·Õè¨Ðà»ÅÕè¹á»Å§Í¹Ò¤µ·Ò§¡ÒÃà§Ô¹¢Í§¤Ø³µÅÍ´ä» +> ÃѺ§Ò¹ä»·Óä´é·Ñ¹·Õ +>ÊÒÁÒöÁÕÃÒÂä´é 8,000 – 50,000 ºÒ·/à´×͹ +> +>ÃѺÊÁѤ÷Ñé§¼Ùé·Õèµéͧ¡ÒÃËÒÃÒÂä´éàÊÃÔÁ ÇѹÅÐ 2-3 ªÁ áÅÐ µéͧ¡ÒÃÃÒÂä´é»ÃÐ¨Ó +> +>¤ÅÔ¡·Õè http://www.zthefuture.com/advanced +>ËÃ×Í http://www.thaiworkathome.com/advanced +> +> +> +>¶éÒ·èÒ¹äÁèµéͧ¡ÒâéÍÁÙÅ¢èÒÇÊÒùÕéµèÍä» CLICK·Õè +>http://www.thaiworkathome.com/unsubscribe.php + + + + diff --git a/Ch3/datasets/spam/spam/00073.8dcd40346d48c69a9e075e935395e96d b/Ch3/datasets/spam/spam/00073.8dcd40346d48c69a9e075e935395e96d new file mode 100644 index 000000000..bfb6a9561 --- /dev/null +++ b/Ch3/datasets/spam/spam/00073.8dcd40346d48c69a9e075e935395e96d @@ -0,0 +1,57 @@ +From ilug-admin@linux.ie Mon Aug 26 15:27:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 2DAB347C67 + for ; Mon, 26 Aug 2002 10:24:31 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:24:31 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7OCneZ03094 for + ; Sat, 24 Aug 2002 13:49:40 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id NAA20287; Sat, 24 Aug 2002 13:48:52 +0100 +Received: from linux.local ([213.9.245.86]) by lugh.tuatha.org + (8.9.3/8.9.3) with SMTP id NAA20252 for ; Sat, + 24 Aug 2002 13:48:43 +0100 +Message-Id: <200208241248.NAA20252@lugh.tuatha.org> +X-Authentication-Warning: lugh.tuatha.org: Host [213.9.245.86] claimed to + be linux.local +Received: (qmail 7382 invoked from network); 24 Aug 2002 12:48:45 -0000 +Received: from unknown (HELO h) (192.168.0.2) by linux.local with SMTP; + 24 Aug 2002 12:48:45 -0000 +From: "Sales Department" +To: ilug@linux.ie +Reply-To: info@smokesdirect.com +Date: Sat, 24 Aug 2002 14:54:43 +0200 +X-Priority: 3 +X-Library: Indy 8.0.25 +Subject: [ILUG] Discount Fags +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Dear Sir / Madam + +If you are fed up of being 'ripped off' by the British government every time you buy your tobacco, then you should visit our website, where you can now buy 4 cartons of cigarettes, or 40 pouches of rolling tobacco from as little as 170 Euros (approx 105 pounds), inclusive of delivery by registered air mail from our office in Spain. + +Why pay more??? + +Visit our website at +http://www.smokesdirect.com/?ID=2 + +Best regards +Sales Department +Smokes Direct +Spain +xay2095811y + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00074.51aab41b27a9ba7736803318a2e4c8de b/Ch3/datasets/spam/spam/00074.51aab41b27a9ba7736803318a2e4c8de new file mode 100644 index 000000000..2a6c36da6 --- /dev/null +++ b/Ch3/datasets/spam/spam/00074.51aab41b27a9ba7736803318a2e4c8de @@ -0,0 +1,122 @@ +From cherrie21168h74@hotmail.com Mon Aug 26 15:48:13 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id D512E47CC2 + for ; Mon, 26 Aug 2002 10:41:33 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:33 +0100 (IST) +Received: from hotmail.com ([203.126.52.147]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7NIDSZ02907 for ; + Fri, 23 Aug 2002 19:13:28 +0100 +Received: from [134.23.186.30] by asy100.as122.sol-superunderline.com with + asmtp; 23 Aug 2002 12:16:33 +1000 +Received: from unknown (36.11.222.7) by rly-xw05.oxyeli.com with QMQP; + Fri, 23 Aug 2002 22:02:48 -0400 +Reply-To: +Message-Id: <026d33d26c2a$1776b2e2$6ae60bb2@xiaefv> +From: +To: cherrie2@hotmail.com +Subject: Re: Adult Classifieds +Date: Sat, 24 Aug 2002 01:02:37 -0700 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00C2_37C70C2D.A8844B81" + +------=_NextPart_000_00C2_37C70C2D.A8844B81 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEg +VHJhbnNpdGlvbmFsLy9FTiI+DQo8aHRtbD4NCjxoZWFkPg0KPHRpdGxlPkFk +dWx0IENsYXNzaWZpZWQgMmsyPC90aXRsZT4NCjxtZXRhIGh0dHAtZXF1aXY9 +IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlz +by04ODU5LTEiPg0KPC9oZWFkPg0KDQo8Ym9keSBiZ2NvbG9yPSIjRkZGRkZG +IiBsaW5rPSIjQ0M5OTk5IiBsZWZ0bWFyZ2luPSIwIiB0b3BtYXJnaW49IjAi +IG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiPg0KDQo8Y2VudGVy +Pg0KICA8YnI+DQogIDx0YWJsZSB3aWR0aD0iNjAwIiBib3JkZXI9IjAiIGNl +bGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMSI+DQogICAgPHRyPg0KICAg +ICAgPHRkIGJnY29sb3I9IiM5OTAwMDAiPjx0YWJsZSB3aWR0aD0iNjAwIiBi +b3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+DQog +ICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNGRkZG +RkYiPg0KICAgICAgICAgIA0KICAgICAgICAgIDxkaXYgYWxpZ249InJpZ2h0 +Ij48aW1nIHNyYz0iaHR0cDovL3d3dy54eHhtYXRjaC5uZXQvbG9nby5qcGci +IHdpZHRoPSI2MDAiIGhlaWdodD0iNjUiPjxicj4NCiAgICAgICAgICA8Yj48 +Zm9udCBjb2xvcj0iI0NDMDAzMyIgc2l6ZT0iMiIgZmFjZT0iR2VuZXZhLCBB +cmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIj4tLS0gVGhlIG1vc3QgY29t +cHJlaGVuc2l2ZSBhZHVsdCBtYXRjaCBtYWtpbmcgc2VydmljZTxicj4NCiAg +ICAgICAgICA8YnI+DQogICAgICAgICAgICAgICAgICAgIDwvZm9udD48L2I+ +DQo8L2Rpdj48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgICAgPHRy +Pg0KICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNGRkZGRkYiPjxjZW50ZXI+ +DQogICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI0MDAiIGJvcmRlcj0i +MCIgY2VsbHNwYWNpbmc9IjMiIGNlbGxwYWRkaW5nPSIxIj4NCiAgICAgICAg +ICAgICAgICAgIDx0ciBiZ2NvbG9yPSIjOTkwMDAwIj4NCiAgICAgICAgICAg +ICAgICAgICAgPHRkIHdpZHRoPSIxMDAiPjxpbWcgc3JjPSJodHRwOi8vd3d3 +Lnh4eG1hdGNoLm5ldC9mcm9udHBpYy00LmdpZiIgd2lkdGg9IjEwMCIgaGVp +Z2h0PSIxNTAiPjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0 +aD0iMTAwIj48aW1nIHNyYz0iaHR0cDovL3d3dy54eHhtYXRjaC5uZXQvZnJv +bnRwaWNtLTIuZ2lmIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjE1MCI+PC90ZD4N +CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAiPjxpbWcgc3Jj +PSJodHRwOi8vd3d3Lnh4eG1hdGNoLm5ldC9mcm9udHBpYy0yLmdpZiIgd2lk +dGg9IjEwMCIgaGVpZ2h0PSIxNTAiPjwvdGQ+DQogICAgICAgICAgICAgICAg +ICAgIDx0ZCB3aWR0aD0iMTAwIj48aW1nIHNyYz0iaHR0cDovL3d3dy54eHht +YXRjaC5uZXQvZnJvbnRwaWNtLTEuZ2lmIiB3aWR0aD0iMTAwIiBoZWlnaHQ9 +IjE1MCI+PC90ZD4NCiAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAg +ICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICA8Zm9udCBjb2xv +cj0iIzk5MDAwMCIgc2l6ZT0iMSIgZmFjZT0iVmVyZGFuYSwgQXJpYWwsIEhl +bHZldGljYSwgc2Fucy1zZXJpZiI+Q2hlY2sgc29tZSBvZiBvdXIgIGFjdHVh +bCBwaWN0dXJlcyBmcm9tIDxiPnJlYWw8L2I+IG1lbWJlcnMhPC9mb250Pjxi +cj4NCiAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjQyMCIgYm9yZGVy +PSIwIiBjZWxsc3BhY2luZz0iMyIgY2VsbHBhZGRpbmc9IjEiPg0KICAgICAg +ICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICA8dGQ+PGNl +bnRlcj4NCiAgICAgICAgICAgICAgICAgIDxmb250IGNvbG9yPSIjOTkwMDAw +IiBzaXplPSIyIiBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBz +YW5zLXNlcmlmIj48YnI+DQogICAgICAgICAgICAgICAgICA8YnI+DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvbnQ+PGZvbnQg +c2l6ZT0iMiIgZmFjZT0iVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fu +cy1zZXJpZiI+PC9mb250Pjxmb250IGNvbG9yPSIjOTkwMDAwIiBzaXplPSIy +IiBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlm +Ij48Yj5XZWxjb21lPC9iPiB0byBvbmUgb2YgdGhlIEludGVybmV0J3MgcHJl +bWllciBhZHVsdCBtYXRjaCBtYWtpbmcgc2VydmljZXMgd2hlcmUgcGVvcGxl +IGp1c3QgbGlrZSB5b3Vyc2VsZiBjYW4gdmlldyBhbmQgcGxhY2UgcGVyc29u +YWwgYWR2ZXJ0aXNlbWVudHMgd2hpY2ggYXJlIHZpZXdlZCBieSB0aG91c2Fu +ZHMgZGFpbHkhDQo8YnI+DQogICAgICAgICAgICAgICAgICA8YnI+DQogICAg +ICAgICAgICAgICAgICA8L2ZvbnQ+DQogICAgICAgICAgICAgICAgICAgICAg +PC9jZW50ZXI+DQogICAgICAgICAgICAgICAgICAgICAgPGNlbnRlcj4NCiAg +ICAgICAgICAgICAgICAgIDxmb250IGNvbG9yPSIjOTkwMDAwIiBzaXplPSIy +IiBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlm +Ij4NCiAgICAgICAgICAgICAgICBXZWIgQWR1bHQgQ2xhc3NpZmllZHMgaGFz +IHRob3VzYW5kcyBvZiBhZHMgLSBzb21ldGhpbmcgZm9yIGV2ZXJ5b25lLCBt +YWxlIG9yIGZlbG1hbGUhIA0KICAgICAgICAgICAgICAgIDwvZm9udD4NCiAg +ICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDxmb250IGNvbG9y +PSIjOTkwMDAwIiBzaXplPSIyIiBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVs +dmV0aWNhLCBzYW5zLXNlcmlmIj48YnI+DQogICAgICAgICAgICAgICAgICA8 +YnI+DQogICAgICAgICAgICAgICAgICA8L2ZvbnQ+PGZvbnQgc2l6ZT0iMiIg +ZmFjZT0iVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiI+ +DQogICAgICAgICAgICAgICAgICA8YnI+DQogICAgICAgICAgICAgICAgICA8 +aW1nIHNyYz0iaHR0cDovL3d3dy54eHhtYXRjaC5uZXQvaGVhcnQuZ2lmIiB3 +aWR0aD0iMTUiIGhlaWdodD0iMTMiPiZuYnNwOyAgICAgICAgICAgICAgICAg +IA0KICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy54eHht +YXRjaC5uZXQvdmVyaWZ5Lmh0bSI+PGI+Q2xpY2sgaGVyZSB0byBiZSBjb252 +aW5jZWQ8L2I+PC9hPiZuYnNwOyZuYnNwOzxpbWcgc3JjPSJodHRwOi8vd3d3 +Lnh4eG1hdGNoLm5ldC9oZWFydC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIx +MyI+PGJyPg0KICAgICAgICAgICAgICAgICAgPGZvbnQgY29sb3I9IiM5OTAw +MDAiIHNpemU9IjEiPjxiPih3aWxsIG9wZW4gaW4gYSBuZXcgd2luZG93IGZv +ciB5b3VyIGNvbnZlbmllbmNlKTwvYj48L2ZvbnQ+PC9mb250Pjxicj4NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NlbnRlcj48L3Rk +Pg0KICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICA8 +L3RhYmxlPg0KICAgICAgICAgICAgICAgIDxicj4NCiAgICAgICAgPC9jZW50 +ZXI+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICA8L3RhYmxlPjwvdGQ+DQog +ICAgPC90cj4NCiAgPC90YWJsZT4NCiAgDQogIDx0YWJsZSB3aWR0aD0iNjAw +IiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+ +DQogICAgPHRyPg0KICAgICAgPHRkPjxkaXYgYWxpZ249InJpZ2h0Ij48Zm9u +dCBzaXplPSIxIiBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBz +YW5zLXNlcmlmIj48Yj4mY29weTtYeHhNYXRjaC5uZXQgMjAwMjwvYj48L2Zv +bnQ+DQo8L2Rpdj48L3RkPg0KICAgIDwvdHI+DQogIDwvdGFibGU+DQogIDxi +cj4NCjwvY2VudGVyPg0KPC9ib2R5Pg0KPC9odG1sPg0KDQo0MTk5bHJqbDc= + diff --git a/Ch3/datasets/spam/spam/00075.28a918cd03a0ef5aa2f1e0551a798108 b/Ch3/datasets/spam/spam/00075.28a918cd03a0ef5aa2f1e0551a798108 new file mode 100644 index 000000000..499966b45 --- /dev/null +++ b/Ch3/datasets/spam/spam/00075.28a918cd03a0ef5aa2f1e0551a798108 @@ -0,0 +1,55 @@ +From iiu-owner@taint.org Mon Aug 26 15:48:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 35D3247C86 + for ; Mon, 26 Aug 2002 10:41:37 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:37 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7NIi2Z03983 for + ; Fri, 23 Aug 2002 19:44:02 +0100 +Received: from linux.local ([213.9.245.86]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7NIh1Z03950 for ; + Fri, 23 Aug 2002 19:43:02 +0100 +Message-Id: <200208231843.g7NIh1Z03950@dogma.slashnull.org> +Received: (qmail 28875 invoked from network); 23 Aug 2002 18:18:58 -0000 +Received: from unknown (HELO h) (192.168.0.2) by linux.local with SMTP; + 23 Aug 2002 18:18:58 -0000 +From: "Sales Department" +Subject: Low Price Smokes +To: iiu-admin@taint.org +Reply-To: info@cheapsmoking.com +Date: Fri, 23 Aug 2002 20:24:48 +0200 +X-Priority: 3 +X-Library: Indy 8.0.25 +Sender: iiu-owner@taint.org +Errors-To: iiu-owner@taint.org +X-Beenthere: iiu@iiu.taint.org +X-Mailman-Version: 2.0.10 +Precedence: bulk +List-Unsubscribe: , + +List-Id: Irish Internet Users +List-Post: +List-Help: +List-Subscribe: , + +List-Archive: + +Dear Sir / Madam + +If you are fed up of being 'ripped off' by the British government every time you buy your tobacco, then you should visit our website, where you can now buy 4 cartons of cigarettes, or 40 pouches of rolling tobacco from as little as 170 Euros (approx 105 pounds), inclusive of delivery by registered air mail from our office in Spain. + +Why pay more??? + +Visit our website at +http://www.cheapsmoking.com/?ID=2 + +Best regards +Sales Department +Cheap Smoking +Spain +xay1992361y + diff --git a/Ch3/datasets/spam/spam/00076.066bf704d9c4a3cf45da5ac7a6b684f8 b/Ch3/datasets/spam/spam/00076.066bf704d9c4a3cf45da5ac7a6b684f8 new file mode 100644 index 000000000..43a925334 --- /dev/null +++ b/Ch3/datasets/spam/spam/00076.066bf704d9c4a3cf45da5ac7a6b684f8 @@ -0,0 +1,55 @@ +From iiu-owner@taint.org Mon Aug 26 15:48:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id EBC5243F9B + for ; Mon, 26 Aug 2002 10:41:35 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:35 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7NIi1Z03974 for + ; Fri, 23 Aug 2002 19:44:01 +0100 +Received: from linux.local ([213.9.245.86]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7NIh1Z03951 for ; + Fri, 23 Aug 2002 19:43:02 +0100 +Message-Id: <200208231843.g7NIh1Z03951@dogma.slashnull.org> +Received: (qmail 28873 invoked from network); 23 Aug 2002 18:18:58 -0000 +Received: from unknown (HELO h) (192.168.0.2) by linux.local with SMTP; + 23 Aug 2002 18:18:58 -0000 +From: "Sales Department" +Subject: Low Price Tobacco +To: iiu-admin@zzzzason.org +Reply-To: info@cheapsmoking.com +Date: Fri, 23 Aug 2002 20:24:48 +0200 +X-Priority: 3 +X-Library: Indy 8.0.25 +Sender: iiu-owner@taint.org +Errors-To: iiu-owner@taint.org +X-Beenthere: iiu@iiu.taint.org +X-Mailman-Version: 2.0.10 +Precedence: bulk +List-Unsubscribe: , + +List-Id: Irish Internet Users +List-Post: +List-Help: +List-Subscribe: , + +List-Archive: + +Dear Sir / Madam + +If you are fed up of being 'ripped off' by the British government every time you buy your tobacco, then you should visit our website, where you can now buy 4 cartons of cigarettes, or 40 pouches of rolling tobacco from as little as 170 Euros (approx 105 pounds), inclusive of delivery by registered air mail from our office in Spain. + +Why pay more??? + +Visit our website at +http://www.cheapsmoking.com/?ID=2 + +Best regards +Sales Department +Cheap Smoking +Spain +xay1992391y + diff --git a/Ch3/datasets/spam/spam/00077.c85b7442247d61308f15d86aa125ec28 b/Ch3/datasets/spam/spam/00077.c85b7442247d61308f15d86aa125ec28 new file mode 100644 index 000000000..6854acee6 --- /dev/null +++ b/Ch3/datasets/spam/spam/00077.c85b7442247d61308f15d86aa125ec28 @@ -0,0 +1,94 @@ +From kolaowo@netscape.net Mon Aug 26 15:48:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 67EA247CC3 + for ; Mon, 26 Aug 2002 10:41:38 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:38 +0100 (IST) +Received: from imo-d09.mx.aol.com (imo-d09.mx.aol.com [205.188.157.41]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7NIrDZ04216 for + ; Fri, 23 Aug 2002 19:53:13 +0100 +Received: from kolaowo@netscape.net by imo-d09.mx.aol.com + (mail_out_v33.5.) id z.1f.4d8775c (16239) for ; + Fri, 23 Aug 2002 14:51:02 -0400 (EDT) +Received: from netscape.net (mow-m22.webmail.aol.com [64.12.180.138]) by + air-in03.mx.aol.com (v88.20) with ESMTP id MAILININ33-0823145102; + Fri, 23 Aug 2002 14:51:02 2000 +Date: Fri, 23 Aug 2002 14:53:09 -0400 +From: kolaowo@netscape.net +To: kolaowo@netscape.net +Subject: REQUEST FOR MUTUALLY BENEFITTING ENDEAVOUR. +Message-Id: <6D6DDA26.3609E34F.00201260@netscape.net> +X-Mailer: Atlas Mailer 2.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit + +OWOLABI & ASSOCIATE, +FALOMO, IKOYI. +LAGOS - NIGERIA. + + +YOUR KIND ATTN., + + + +RE: REQUEST FOR MUTUALLY BENEFITTING ENDEAVOUR. + +I humbly crave your indulgence in sending you this +mail, if the contents does not meet with your personal +and business ethics, I apologize in advance. + +I am Barrister Kola Owolabi( attorney at law), I +represent Alhaji Ishmaila Ibrahim Gwarzo’s estates. Alhaji Gwarzo was the chief +security advicer of the then military leader of this country(Nigeria) in the +person of Late General Sani Abacha who died on the 8th of June 1998. With the +advent of a new democratic +dispensation in the country under the leadership of +Gen. Olusegun Obasanjo (Rtd), my client has come under +severe persecution due to the sensitive position he +held in the last military regime, presently he is +under house arrest restricted only to the confines of +his village. + +The main purpose of this mail is to intimate you of a +business proposal that might be of interest to you. My +client has informed me of the existence of funds +deposited with a security company abroad. This fund +came about as part of security votes that were +allocated to my client's portfolio during his tenure +as chief security adviser to the then president. What +happened was that he had part of the funds transferred +from the vaults of the Central Bank Of Nigeria to this +security outfit with the aim of purchasing arms and ammunitions for the personal +security outfit of the +then president. But before the purchase could take +place the president died. My client has decided to +keep this for himself as all his properties has been +confisticated by the present regime. But due to his +incarceration he cannot travel out and effect the +change of possession to his benefit. + +I have been mandated by my client to source for a +foreign partner that can help him facilitate the +change of possession. The deposit certificate and the +code needed for the execution of this endeavor are in +my possession. + +The funds in question is USD17.6M (Seventeen Million, Six Hundred Thousand +United States dollars Only). Should this proposition be of interest to you, you can reach me through my e-mail address so that we can go through the rudiments of this endeavor. + +I remain most obliged. + +Barrister Kola Owolabi(JP). +Principal Partner. Owolabi & Associates + + + +__________________________________________________________________ +Your favorite stores, helpful shopping tools and great gift ideas. Experience the convenience of buying online with Shop@Netscape! http://shopnow.netscape.com/ + +Get your own FREE, personal Netscape Mail account today at http://webmail.netscape.com/ + + diff --git a/Ch3/datasets/spam/spam/00078.6944f51ce9c0586d8f9137d2d2207df0 b/Ch3/datasets/spam/spam/00078.6944f51ce9c0586d8f9137d2d2207df0 new file mode 100644 index 000000000..16cb81f2e --- /dev/null +++ b/Ch3/datasets/spam/spam/00078.6944f51ce9c0586d8f9137d2d2207df0 @@ -0,0 +1,49 @@ +From zaferunlu5352c84@yahoo.com Mon Aug 26 15:48:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id DF2F647CC4 + for ; Mon, 26 Aug 2002 10:41:39 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:39 +0100 (IST) +Received: from yahoo.com ([61.179.116.50]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7NJYBZ05419 for ; + Fri, 23 Aug 2002 20:34:12 +0100 +Received: from unknown (196.112.125.16) by m10.grp.snv.yahui.com with QMQP; + Sat, 24 Aug 2002 21:35:22 -0600 +Received: from q4.quickslow.com ([118.205.184.163]) by + smtp013.mail.yahou.com with SMTP; Sat, 24 Aug 2002 15:31:55 +0400 +Received: from unknown (HELO anther.webhostingtotalk.com) (154.108.153.99) + by web.mail.halfeye.com with NNFMP; Sat, 24 Aug 2002 19:28:28 -0900 +Reply-To: +Message-Id: <007a70c54b3a$8343c3d0$7ce30cd7@dtfxjx> +From: +To: Consolidate@dogma.slashnull.org +Subject: ** You're -Approved-! +Date: Fri, 23 Aug 2002 22:18:32 +1200 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00D7_08E60D5B.E5437E70" + +------=_NextPart_000_00D7_08E60D5B.E5437E70 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +PGh0bWw+DQo8Ym9keT4NCjxmb250IGNvbG9yPSJmZmZmZmYiPmRyeXdhbGw8 +L2ZvbnQ+DQo8cD5Zb3VyIGhvbWUgcmVmaW5hbmNlIGxvYW4gaXMgYXBwcm92 +ZWQhPGJyPjwvcD48YnI+DQo8cD5UbyBnZXQgeW91ciBhcHByb3ZlZCBhbW91 +bnQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3J0Z2FnZXBvd2VyMy5jb20vIj5n +bw0KaGVyZTwvYT4uPC9wPg0KPGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJy +Pjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+ +PGJyPg0KPHA+VG8gYmUgZXhjbHVkZWQgZnJvbSBmdXJ0aGVyIG5vdGljZXMg +PGEgaHJlZj0iaHR0cDovL3d3dy5tb3J0Z2FnZXBvd2VyMy5jb20vcmVtb3Zl +Lmh0bWwiPmdvDQpoZXJlPC9hPi48L3A+DQo8Zm9udCBjb2xvcj0iZmZmZmZm +Ij5kcnl3YWxsPC9mb250Pg0KPC9ib2R5Pg0KPGZvbnQgY29sb3I9ImZmZmZm +ZiI+MWdhdGUNCjwvaHRtbD4NCjUyOTdnZHFLNi00OThqeXhsMzAzM1JhZkQz +LTE5NVJUY3o2NDg1b2JRVTktNjE1TE9MZzlsNDk= + diff --git a/Ch3/datasets/spam/spam/00079.cc3fa7d977a44a09d450dde5db161c37 b/Ch3/datasets/spam/spam/00079.cc3fa7d977a44a09d450dde5db161c37 new file mode 100644 index 000000000..884becaaa --- /dev/null +++ b/Ch3/datasets/spam/spam/00079.cc3fa7d977a44a09d450dde5db161c37 @@ -0,0 +1,40 @@ +From info@cheapsmoking.com Mon Aug 26 15:48:37 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 508D344165 + for ; Mon, 26 Aug 2002 10:41:41 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:41 +0100 (IST) +Received: from linux.local ([213.9.245.86]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7NJaYZ05479 for ; + Fri, 23 Aug 2002 20:36:34 +0100 +Message-Id: <200208231936.g7NJaYZ05479@dogma.slashnull.org> +Received: (qmail 19721 invoked from network); 23 Aug 2002 19:17:55 -0000 +Received: from unknown (HELO h) (192.168.0.2) by linux.local with SMTP; + 23 Aug 2002 19:17:55 -0000 +From: "Sales Department" +Subject: Discount Smokes +To: zzzz@spamassassin.taint.org +Sender: Sales Department +Reply-To: info@cheapsmoking.com +Date: Fri, 23 Aug 2002 21:23:46 +0200 +X-Priority: 3 +X-Library: Indy 8.0.25 + +Dear Sir / Madam + +If you are fed up of being 'ripped off' by the British government every time you buy your tobacco, then you should visit our website, where you can now buy 4 cartons of cigarettes, or 40 pouches of rolling tobacco from as little as 170 Euros (approx 105 pounds), inclusive of delivery by registered air mail from our office in Spain. + +Why pay more??? + +Visit our website at +http://www.cheapsmoking.com/?ID=2 + +Best regards +Sales Department +Cheap Smoking +Spain +xay1992351y + diff --git a/Ch3/datasets/spam/spam/00080.5a7386cb47846dfef68429241ad80354 b/Ch3/datasets/spam/spam/00080.5a7386cb47846dfef68429241ad80354 new file mode 100644 index 000000000..75c73a9dd --- /dev/null +++ b/Ch3/datasets/spam/spam/00080.5a7386cb47846dfef68429241ad80354 @@ -0,0 +1,257 @@ +From dus@insurancemail.net Mon Aug 26 15:48:46 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id ED5B447CC5 + for ; Mon, 26 Aug 2002 10:41:43 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:43 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g7NMW1Z10624 for ; Fri, 23 Aug 2002 23:32:02 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Fri, 23 Aug 2002 18:32:48 -0400 +Subject: Impaired Risk Case of the Month +To: +Date: Fri, 23 Aug 2002 18:32:48 -0400 +From: "IQ - DUS" +Message-Id: <3832c301c24af5$0263e7e0$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJK4PlMcwA5UXOaRkyH7aAixwSXHg== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 23 Aug 2002 22:32:48.0953 (UTC) FILETIME=[02855290:01C24AF5] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_3658CA_01C24ABF.723FADA0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_3658CA_01C24ABF.723FADA0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: quoted-printable + + Diversified Underwriters Services, Inc. + Impaired Risk Case of the Month July 2002 + + ? Male 58 Non-smoker + ? Face Amount $3,000,000 + ? 5'11" 255 lbs. + ? Crohn's Disease for 30 Years + ? 5 Major Intestinal Surgeries + ? Steroid Therapy for 30 Years + ? 1997 Diabetes + ? 1998 Hypertension=20 + + Diversified's Answer... + Standard! + +Broker's Commission: $60,598 !! + + + =09 +Let Us Turn Your Clients That Have Been Declined, Rated or Have Current +Health Problems, Into Placeable Life Cases! + =09 + "INST-A-QUOTE"(tm) for Impaired Risk Life Quotes + Call Now for an "Inst-A-Quote"=99 on your client and we will get back = +to +you within 24 hours! 800-683-3077 ext. 0=97 or =97 + +Please fill out the form below for more information =20 +Name: =09 +E-mail: =20 +Phone: =20 +City: State: =20 + =09 +=20 + =20 +For Broker Use Only. Not for Public Dissemination. =20 +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.InsuranceIQ.com/optout +=20 + +Legal Notice =20 + +------=_NextPart_000_3658CA_01C24ABF.723FADA0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Impaired Risk Case of the Month + + + + + + =20 + + + =20 + + +
    +
    =20 + 3D"July=20 + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + +
    +
    + =20 + + + +
    +
    =20 +

    + • Male 58 Non-smoker
    + • Face Amount $3,000,000
    + • 5'11" 255 lbs.
    + • Crohn's Disease for 30 Years
    + • 5 Major Intestinal Surgeries
    + • Steroid Therapy for 30 Years
    + • 1997 Diabetes
    + • 1998 Hypertension

    +
    +

    3D"Diversified's
    + 3D"Standard!"

    + Broker's Commission: $60,598 = +!!

    +
    +
    + Let Us Turn Your Clients=20 + That Have Been Declined, = +Rated or Have=20 + Current Health Problems, Into = +Placeable=20 + Life Cases!
    +  
    +
    +
    + 3D"Call=20 + =20 + — or —
    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please fill = +out the form below for more information
    Name:
    E-mail:
    Phone:
    City:State:
      + + + +
    For Broker Use Only. Not for Public = +Dissemination.

    We don't=20 + want anyone to receive our mailings who does not wish to. This = +is professional=20 + communication sent to insurance professionals. To be removed = +from this=20 + mailing list, DO NOT REPLY to this message. Instead, go = +here: =20 + http://www.InsuranceIQ.com/optout

    +
    + Legal=20 + Notice=20 +
    +
    =20 + + + +------=_NextPart_000_3658CA_01C24ABF.723FADA0-- + diff --git a/Ch3/datasets/spam/spam/00081.123b29a781b2e8c83763e5d440e672a3 b/Ch3/datasets/spam/spam/00081.123b29a781b2e8c83763e5d440e672a3 new file mode 100644 index 000000000..0df25b62f --- /dev/null +++ b/Ch3/datasets/spam/spam/00081.123b29a781b2e8c83763e5d440e672a3 @@ -0,0 +1,76 @@ +From ilug-admin@linux.ie Mon Aug 26 15:48:46 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 9E40D44166 + for ; Mon, 26 Aug 2002 10:41:42 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:42 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7NM2TZ09890 for + ; Fri, 23 Aug 2002 23:02:29 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id XAA17797; Fri, 23 Aug 2002 23:01:28 +0100 +Received: from uplink-srvr.uplinkco.com ([12.110.173.233]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id XAA17763 for ; + Fri, 23 Aug 2002 23:01:15 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host [12.110.173.233] claimed + to be uplink-srvr.uplinkco.com +Received: from smtp0301.mail.yahoo.com ([210.83.114.125]) by + uplink-srvr.uplinkco.com with Microsoft SMTPSVC(5.0.2195.5329); + Fri, 23 Aug 2002 18:00:29 -0400 +Date: Sat, 24 Aug 2002 06:00:00 +0800 +From: "Jasjit Thomas" +X-Priority: 3 +To: ilug@linux.ie +Cc: ilug@moil.demon.co.uk, ilugo@bogfoot.com, ilugui@elogica.com.br, + iluha@iluha.tiac.net +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Message-Id: +X-Originalarrivaltime: 23 Aug 2002 22:00:34.0876 (UTC) FILETIME=[81B897C0:01C24AF0] +Subject: [ILUG] ilug,Bigger, Fuller Breasts Naturally In Just Weeks +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +================================= + +Guaranteed to increase, lift and firm your +breasts in 60 days or your money back!! + +100% herbal and natural. Proven formula since +1996. Increase your bust by 1 to 3 sizes within 30-60 +days and be all natural. + +Click here: +http://202.101.163.34:81/li/wangxd/ + +Absolutely no side effects! +Be more self confident! +Be more comfortable in bed! +No more need for a lift or support bra! + +100% GUARANTEED AND FROM A NAME YOU KNOW AND +TRUST! + + +************************************************** + +You are receiving this email as a double opt-in +subscriber to the Standard Affiliates Mailing +List. +To remove yourself from all related email lists, +just click here: +http://64.123.160.91:81/li/gg/unsubscriber.asp?userid=ilug@linux.ie + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00082.0341a767bbaca01fd89b6236ef681257 b/Ch3/datasets/spam/spam/00082.0341a767bbaca01fd89b6236ef681257 new file mode 100644 index 000000000..6c1894ff5 --- /dev/null +++ b/Ch3/datasets/spam/spam/00082.0341a767bbaca01fd89b6236ef681257 @@ -0,0 +1,78 @@ +From hk.jh@caramail.com Mon Aug 26 15:48:53 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 36C7E47CC6 + for ; Mon, 26 Aug 2002 10:41:46 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:46 +0100 (IST) +Received: from mail1.caramail.com (mail1.caramail.com [213.193.13.92]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7NMX7Z10658 for + ; Fri, 23 Aug 2002 23:33:07 +0100 +Received: from caramail.com (www8.caramail.com [213.193.13.18]) by + mail1.caramail.com (Postfix) with SMTP id 31BDD14E27; Fri, 23 Aug 2002 + 22:46:35 +0200 (DST) +From: jh hk +To: karimu_helina@hotvoice.com +Message-Id: <1030135594011692@caramail.com> +X-Mailer: Caramail - www.caramail.com +X-Originating-Ip: [208.164.180.11] +MIME-Version: 1.0 +Subject: investment +Date: Fri, 23 Aug 2002 22:46:34 GMT+1 +Content-Type: multipart/mixed; boundary="=_NextPart_Caramail_0116921030135594_ID" + +This message is in MIME format. Since your mail reader does not understand +this format, some or all of this message may not be legible. + +--=_NextPart_Caramail_0116921030135594_ID +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +ATTN: President, + +From: Mrs.Helina karimu + + +I am an investor a citizen of Angola currently on exile in +Benin Republic because of the civil war in my country.I +wish to invest in a country with political stability, +reliable, dependable infrastructure and security of life +and property. + + +I was given your contact address by a foriegner who was on +a working visit in Cotonou. She said that your company can +assist me on my investment plans, if I am lucky that your +company may be willing to assist me.It may interest you to +know that I am having $30.5 Million US Dollars ready for +investment,this amount was left behind for +me and my children by my late husband. + +I am willing to invest in a company with potentials for +growth and stability including your company if your bye- +laws allows for foreign investors or any other good and +profitable business that you may suggest.I will be very +happy if this enquiry receive urgent attention. + +You should mail your acceptance by sending to me your +personal and company profile as I will also send to you all +required information about myself and the help that I need +from you about my investment plans. + +You can also reach me at:helinakarimu@ecplaza.net and +hk_hk@post.com. +Hoping for a very successful business relationship with you. + +Yours Truly, + +Mrs.Helina Karimu. +(Investor) +______________________________________________________ +Bo=EEte aux lettres - Caramail - http://www.caramail.com + + +--=_NextPart_Caramail_0116921030135594_ID-- + + diff --git a/Ch3/datasets/spam/spam/00083.c1891c507954e5b75b72b16712e799bf b/Ch3/datasets/spam/spam/00083.c1891c507954e5b75b72b16712e799bf new file mode 100644 index 000000000..081248aaf --- /dev/null +++ b/Ch3/datasets/spam/spam/00083.c1891c507954e5b75b72b16712e799bf @@ -0,0 +1,156 @@ +From Randy.J@hh.hosp.dk Mon Aug 26 15:49:05 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 772DE44175 + for ; Mon, 26 Aug 2002 10:41:49 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:49 +0100 (IST) +Received: from gci.local.gyoda-cci.or.jp (mail.gyoda-cci.or.jp + [210.232.184.67]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g7OBUtZ01406; Sat, 24 Aug 2002 12:30:55 +0100 +Received: from mail.health-e.org.za ([212.160.54.156]) by gateway. (NAVGW + 2.5.1.18) with SMTP id M2002082307261021294 ; Fri, 23 Aug 2002 07:26:26 + +0900 +Message-Id: <0000107a309a$00003612$000062d6@mx1.btgnet.co.za> +To: +From: "Customer Support Group" +Subject: Low Cost Easy to Use Conferencing +Date: Thu, 22 Aug 2002 15:23:11 -1900 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +Lowest Rate Services + + + +

    +

    + + + +
    Conferencing Made= + Easy
    +Only 18 Cents Per Minute!
    = +
    +

    (Including Long Distance!)= + +

    + + + + <= +/TABLE> +

    +

    +
  • No setup fees +
  • No contracts or monthly fees +
  • Call anytime, from anywhere, to anywhere +
  • Connects up to 100 Participants +
  • Simplicity in set up and administration +
  • Operator Help available 24/7
  • + + +
    T= +he Highest Quality Service For The Lowest Rate In The Industry!= +
    +

    + + + + = +
    Fill out the form be= +low to find out how you can lower your phone bill every month.
    +

    Required Input Field* +

    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Name*
    Web + Address
    Company + Name*
    + State*
    Business + Phone*
    Home + Phone
    Email + Address*
    Type of + Business
    +

    +

    +

    + + + +
    To be removed from our distribution lists, please + Click + here.

    + + + diff --git a/Ch3/datasets/spam/spam/00084.a9f5b3a9b7feb7070f25ae76320c8ec6 b/Ch3/datasets/spam/spam/00084.a9f5b3a9b7feb7070f25ae76320c8ec6 new file mode 100644 index 000000000..971e43821 --- /dev/null +++ b/Ch3/datasets/spam/spam/00084.a9f5b3a9b7feb7070f25ae76320c8ec6 @@ -0,0 +1,112 @@ +From jamesalabi@mail.com Mon Aug 26 15:49:15 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 0083944176 + for ; Mon, 26 Aug 2002 10:41:53 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:53 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7OHHcZ10961 for + ; Sat, 24 Aug 2002 18:17:38 +0100 +Received: from ok61094.com ([217.78.76.138]) by webnote.net (8.9.3/8.9.3) + with SMTP id SAA16606 for ; Sat, 24 Aug 2002 + 18:17:43 +0100 +Message-Id: <200208241717.SAA16606@webnote.net> +From: "Dr.James Ologun" +Reply-To: jamesalabi@mail.com +To: zzzz-sa-listinfo@spamassassin.taint.org +Date: Sat, 24 Aug 2002 20:18:02 -0700 +Subject: Immediate Reply Needed +X-Mailer: Microsoft Outlook Express 5.00.2919.6900 DM +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7OHHcZ10961 +Content-Transfer-Encoding: 8bit + +Dear Sir, + +I am Dr James Alabi, the chairman of contract +award and review committee set up by the federal +government of Nigeria under the new civilian +dispensation to award new contracts and review +existing ones. +I came to know of you in my search for a reliable and +reputable person to handle a very confidential +transaction, which involves the transfer of a huge +sum of money to a foreign account. + +There were series of contracts executed by a +consortium of multi-nationals in the oil industry in +favor of N.N.P.C. The original values of these +contracts were deliberately over invoiced to the sum +of US$12,320,000.00 (Twelve Million Three Hundred and Twenty Thousand +United +State Dollars). This amount has now been approved and +is now ready to be transferred being that the +companies +that actually executed these contracts have been +fully Paid and the projects officially commissioned. + + +Consequently, my colleagues and I are willing to +transfer the total amount to your account for +subsequent disbursement, since we as civil servants +are prohibited by the code of conduct bureau (civil +service law) from operating and/or opening foreign +accounts in our names. Needless to say, the trust +reposed on you at this juncture is enormous, in +return, we have agreed to offer you 20% of the +transferred sum, while 10% shall be set aside for +incidental expenses (internal and external) between +both parties in the course of the transaction you will +be mandated to remit the balance to other accounts +in due course. + +Modalities have been worked out at the highest level +of the Ministry of Finance and the Central Bank of +Nigeria for the immediate transfer of the funds +within 7 working days subject to your satisfaction of +the above stated terms. +Our assurance is that your role is risk free. To + +accord this transaction the legality it deserves and +for mutual security of the funds the whole approval +procedures will officially and legally processed +with your name or the name of any company you may +nominate as the bonefide beneficiary. +Once more I want you to understand that having put +in over twenty-five years in the civil service of my +country, I am averse to having my image and career +dented. This matter should therefore be treated with +utmost secrecy and urgency it deserves. + +Please you should signify your intention to assist +by sending me a reply to this email to state your position on this +transaction, if favorable we will take further steps +to brief you the full details of this viable +transaction. +I want to assure you that this business proposal is +100% risk free as we have done our homework +properly. + +I quite believe that you will protect our interest +by taking this deal strictly confidential, as we are +still in government service, which we intend to +retire from in full honor. + +Kindly expedite action as we are behind schedule to +enable us include this transfer in the next batch +which would constitute the new quarter payments +for the 2002 financial year. + +Thank you and God bless. + +Dr James Alabi + + + + + diff --git a/Ch3/datasets/spam/spam/00085.f63a9484ac582233db057dbb45dc0eaf b/Ch3/datasets/spam/spam/00085.f63a9484ac582233db057dbb45dc0eaf new file mode 100644 index 000000000..504a603c6 --- /dev/null +++ b/Ch3/datasets/spam/spam/00085.f63a9484ac582233db057dbb45dc0eaf @@ -0,0 +1,406 @@ +From dwftan@earthlink.com Mon Aug 26 15:49:19 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id A05FC47C87 + for ; Mon, 26 Aug 2002 10:41:54 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:54 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7P1imZ27560 for + ; Sun, 25 Aug 2002 02:44:48 +0100 +Received: from 148.235.82.114 ([206.112.72.3]) by webnote.net + (8.9.3/8.9.3) with SMTP id CAA18619 for ; Sun, + 25 Aug 2002 02:44:44 +0100 +Message-Id: <200208250144.CAA18619@webnote.net> +Received: from unknown (201.187.168.97) by smtp-server1.cfl.rr.com with + QMQP; Aug, 25 2002 9:25:17 AM +0400 +Received: from unknown (124.215.35.163) by rly-xw01.mx.aol.com with QMQP; + Aug, 25 2002 8:14:22 AM +0600 +Received: from smtp-server6.tampabay.rr.com ([12.232.159.86]) by + mailout2-eri1.midsouth.rr.com with asmtp; Aug, 25 2002 7:21:41 AM +0400 +Received: from unknown (HELO rly-xw01.mx.aol.com) (96.213.243.25) by + n9.groups.yahoo.com with asmtp; Aug, 25 2002 6:19:40 AM -0100 +From: bwiTim Fai +To: Friend@webnote.net +Cc: +Subject: ADV: Internet marketing & communications; earn $100k/year... uleio +Sender: bwiTim Fai +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Sun, 25 Aug 2002 09:36:45 +0800 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 + +HELLO...By reading the short Summary just below, you +will see how you can learn new skills in communication, +do a direct marketing program on the internet, and at the +same time, earn $100,000 or more to enable you to +CHANGE YOUR LIFE!!! + +************SUMMARY*************************** + +Just read this Summary, follow the actions that it advises, +and start earning some serious money. You will learn new +skills in communications and how to market on the internet. +What a Deal! Your total cash investment is just $50.00. + +Step 1. If this is the first time you have seen this message, +and you have not joined in this program before, then +take out five US$10.00 bills (total $50 investment), and mail +out $10.00 each to the following people to purchase five +Guides on communications. For each Guide that you will +be ordering and buying, write out on a sheet of plain white +paper, your own name, address, and YOUR OWN EMAIL +ADDRESS, and the number and name of the Guide that +you are buying. Then fold the paper, put the $10.00 bill +inside the sheet of paper, insert the paper and $10.00 bill +into an envelope, address the envelope with the name and +address of the person whose name is shown under each +Guide below, and mail the envelope by first class or air +mail. Be sure to put enough postage stamps on the +envelopes. No need to send by registered mail. + +LIST OF FIVE NAMES**************************** +________________________________________________ + +GUIDE# 1: "How to be A More Effective Public Speaker" +Order Guide #1 for US$10.00 CASH from: (In addition to +Guide #1, you will receive a valuable marketing Guide +"A Million Bucks From the Internet", free of charge) + +Derrick Nguyen +9530 Whitmore St +El Monte, CA 91733 +USA +________________________________________________ + +GUIDE # 2: "How to Give a Business Presentation" +Order Guide # 2 for US$10.00 CASH from: + +Tim Fai +GPO Box 260 +Macau (via Hong Kong) +________________________________________________ + +GUIDE# 3: "How to Write More Effectively" +Order Guide # 3 for US$10.00 CASH from: + +Luis Pastor +Apartado 81 +48080 Bilbao +Spain +________________________________________________ + +GUIDE # 4: "What to do at a Social Function" +Order Guide # 4 for US$10.00 CASH from: + +Chester Waldvogel +11 Chestnut Way +Berlin, MD 21811 +USA +________________________________________________ + +GUIDE # 5: "How To Sharpen Your Mind" +Order Guide # 5 for US$10.00 CASH from: + +J. Siden +Krondikesvagen 54 A +83147 Ostersund +Sweden +________________________________________________ +END OF LIST OF FIVE NAMES********************* + +Step 2. These Guides will be emailed to you. Save these +Guides on your computer's hard disk as other people will be +ordering these Guides from you, paying you for them and +you will need to email the Guides to the new buyers. + +Step 3. From the list of names above, delete the name and +address of the person shown under GUIDE#5, and replace that +slot with the name and address of the person from GUIDE #4's +slot. Be sure to copy the name and address exactly as shown. +Check the address again. + +Step 4. Delete name and address under GUIDE #4, and +replace with the name and address from GUIDE #3's slot. + +Step 5. Delete name and address under GUIDE #3, and +replace with the name and address from GUIDE#2's slot. + +Step 6. Delete name and address under GUIDE #2, and +replace with the name and address from GUIDE #1's slot. + +Step 7. Delete name and address under GUIDE #1, and +replace with YOUR OWN NAME AND ADDRESS. This +step is how your own name and address is entered into the +list of names to receive orders for the Guides. Eventually, +your own name will go down the list of names until you have +reached GUIDE #5, and then be dropped from the list. The +key point is that the number of people ordering Guides from +you will grow larger the lower down the list your name goes. + +Step 8. Once you have completed this new list, send out +this new email (which shows your name under GUIDE #1) to +as many email addresses as possible, as many as 100,000 +emails or even more. The greater the number of mailings +you make, potentially the greater the number of people who +will order the GUIDE #1 from you. These people will then +make new emails to send out to their addresses with the email +showing your name under GUIDE #2, and so on. + +This is all you need to do. If you wish to read the rest of +this email message, then do so. If not, just do the 8 steps +shown above. Remember, the key point is to send out as +many emails as possible in step 8, and to encourage and help +those who purchase the Guides from you to send out +emails of their own. + +Do NOT change anything other than what is instructed. +Because if you do, it will not work for you. Your immediate +reaction might be: Why not replace all the names on the list +with the names of your spouse, kids, relatives, and friends. +That might seem to you like a clever move because new +buyers will be sending their money to these people. But +that move is the exact opposite of what is to your benefit. +What will benefit you most is having people who will send +out emails, seek new buyers, and provide assistance to new +buyers. If the people you slip into that list aren't going to +be sending new emails, you're only hurting yourself by +effectively closing down the program with your name on +top of the list of the names that you have inserted. There +wouldn't be new buyers coming in. So, your sly maneuver +will gain you exactly zero! Furthermore, if you have done +the work, and your name has worked its way to further +down the list, by then you deserve the rewards and +earnings from that effort, and it would be unethical for +anyone to remove your name for whatever reason. Don't +do it to others. Remember, honesty reaps the reward!!! + +You may have a concern that after sending the total $50 to +the five people on the list that one of the people will just +take your money, and not send you the Guide. Well, rest +assured. As we said above, it's to our benefit to have you +as a satisfied buyer who will actively send out emails to find +new buyers. So don't think the people on the list will try to +cheat you or to "stiff" you for $10.00. The people on the list +would rather have you working hard because your effort will +benefit them as well as you. Later on, when other buyers send +you the order to buy the Guides, fulfill your end of the deal +by sending the ordered Guide to the buyer. Don't cheat. +Provide efficient and honest service and we will all benefit. +******END OF SUMMARY************************ + +=======REST OF MESSAGE====================== + +With easy-to-use email tools and opt-in email, success in +this business is now well within the capabilities of ordinary +people who may not have done any internet marketing before. +And the earnings potential is staggering! + +READ THIS EMAIL TO THE END! - +follow what it says - and you will not worry whether a +RECESSION is coming or not, or whether or not you can +afford to buy that new car or home that you have been +looking for. Yes, I know what you are thinking. I never +responded to one of these before either. One day though, +something made me feel: "You use $50 going to a movie +for 2 hours with your spouse, friend, or child, plus a simple +meat at a restaurant. Why the heck not?" No matter where +you believe those "feelings" came from, I thank every day +that feeling came over me. + +I cannot imagine where I would be or what I would be doing +had I not. Read on. It works. And when you read the Guides, +You’ll learn how to become a more effective communicator. +What can be better? A way to improve your self-image and +confidence and at the same time have the potential to recover +your investment and make some good money: making over +half a million dollars every 4 to 5 months from your home. +If you work on this program, you will learn a lot about direct +marketing on the internet. If you believe direct marketing +via the internet is the way sales and marketing will be done +in the future, then the experience you will gain here could +be a real boost in your work career, possibly even providing +a new career for you. + += PRINT THIS MESSAGE FOR FUTURE REFERENCE = + +If you want to make serious money, read this message until +you understand it completely and feel confident to follow +through on what it advises. + +FOLLOW THE SIMPLE INSTRUCTION ABOVE AND +YOUR FINANCIAL DREAMS CAN COME TRUE! + +Remember, this method has been tested, and if you alter it, +it will NOT work! This IS a legitimate BUSINESS. You +are offering a product for sale to a buyer. Treat it as such +and you can see money coming to you in a reasonable period +of time, depending on the collective efforts of yourself and +the others on the list of five. + +=========================================== +*** Take this entire email, with the modified list of names, +and save it on your computer. DO NOT MAKE ANY OTHER +CHANGES. There are 2 methods to get this venture going: + +METHOD # 1: BY SENDING BULK EMAIL LEGALLY +=========================================== + +Let's say that you start small, to see how it goes, and that +you and those involved send out only 5,000 emails each. +Let's also assume that the mailing receives only a 0.1% +(1/10 of 1%) response (the response could be much better +but let's just say it is only 0.1%). Also many people will +send out hundreds of thousands of emails instead of only +5,000 each. + +Out of your 5,000 emails and a 0.1% response, that is only +5 orders for Guide # 1. Those 5 people who responded also +send out 5,000 emails each for a total of 25,000. Out of +those 25,000 emails only 0.1% responded with orders. +That's 25 people who responded and ordered Guide # 2. + +Those 25 people mail out 5,000 e-mails each for a total of +125,000 emails. The 0.1% response to that is 125 orders +for Guide # 3. Those 125 people send 5,000 emails each +for a total of 625,000 emails sent out. The 0.1% response +is 625 orders for Guide # 4. + +Those 625 people send out 5,000 emails each for a total +of 3,125,000 emails. The 0.1% response to that is 3,125 +orders for Guide # 5, or $31,250 at $10 per Guide. This +may seem a small amount to you, but remember we used a +very low response rate with a small number of emails being +sent out. See what happens if you can get the response rate +up just slightly. + +If Response Rate is 0.1%, income from Guides #1 - #5 is: +$50+250+1,250+6,250+31,250 = $39,050 (as above) + +If Response Rate is 0.15%, income from Guides #1 - #5 is: +$75+560+4,220+31,640+237,300 = $273,795 + +If Response Rate is 0.2%, income from Guides #1 - #5 is: +$100+1,000+10,000+100,000+1,000,000 = $1,111,100 + +Dare to think for a moment what would happen if everyone +or half or even one 4th of those people mailed 100,000 +emails each or more? From the example above, you can see +the power of leveraging, that is, how much greater is the +amount of money from a small increase in the response rate. + +There are over 200 million people on the internet worldwide +and counting, with thousands more coming online every day. + +METHOD # 2: PLACING FREE ADS ON THE INTERNET +=========================================== + +Advertising on the net is very, very inexpensive and there are +Many FREE places to advertise. Placing a lot of free ads on +the internet will get a response. We strongly suggest you start +with Method # 1 and add METHOD # 2 as you go along. +For every $10 you receive, all you must do is email the +Guide the buyer ordered. Always provide same day service. + +The people you buy these Guides from will assist and advise +you how to get the large number of email addresses that +you need to send the new email containing your name and +address. In return, when others buy the Guides from you, +you also should help those buyers to resell the Guides to +their email addresses. This will benefit you because your +name would be further down the list, and their new buyers +will buy from you. This is no different than "customer +service" in the retail or the "bricks and mortars" business. + +===========AVAILABLE GUIDES ============== +The reason for the "cash" is not because this is illegal or +somehow "wrong". It is simply about time. Time for checks +or credit cards to be cleared or approved, etc. Concealing it +is simply so no one can SEE there is money in the envelope +and steal it before it gets to you. + +ORDER EACH GUIDE BY ITS NUMBER & NAME ONLY. +Always send a single $10 bill (U.S. CURRENCY) for each +Guide. Checks NOT accepted. Make sure the cash is hidden +by wrapping it in at least 2 sheets of paper. On one of +those sheets of paper, write the NUMBER & the NAME +of the Guide you are ordering, YOUR EMAIL ADDRESS +and your name and postal address. Be sure to address the +envelope correctly and put the proper amount of stamps to +mail the envelope. + +PLACE YOUR ORDER FOR THESE GUIDES NOW +FROM THE NAME AND ADDRESS LIST SHOWN +AT THE BEGINNING OF THIS EMAIL +________________________________________________ +YOUR SUCCESS GUIDELINES + +=== If you do not receive at least 10 orders for GUIDE #1 +within 2 weeks, continue sending emails until you do. + +=== Two to three weeks after you receive 10 orders, +you should receive 100 orders or more for GUIDE #2. If +not, continue advertising or sending emails until you do. + +Once you have received 100 or more orders for GUIDE # 2, +YOU CAN SEE THE PROGRAM IS WORKING, and +cash should continue coming in! THIS IS IMPORTANT +TO REMEMBER: Continue to assist new buyers with advice +and instruction on how to send out more emails. You can +KEEP TRACK of progress by noting which guides people +are ordering from you. IF YOU WANT TO GENERATE +MORE INCOME SEND ANOTHER BATCH OF EMAILS +AND START THE WHOLE PROCESS AGAIN. +There is NO LIMIT to the income you can generate !!! +=========================================== +A NOTE FROM THE ORIGINATOR OF THIS PROGRAM: +You have just received information that can give you +financial freedom to really change your life, but I don't +wish to kid you: This requires A BIT OF EFFORT. You +can make more money in the next few weeks and months +than you have ever imagined. Follow the program +EXACTLY AS INSTRUCTED. + +Remember to email the revised copy of this email after you +have put your name and address in GUIDE#1 and moved +others to #2 .....# 5 slots as instructed above. One of the +people you send this to may send out 100,000 or more +emails and your name will be on every one of them. +Remember, the more you send out the more potential +buyers you will reach. + +IT IS UP TO YOU! ORDER THE GUIDES NOW AND +EMBARK ON THE ROAD TO FINANCIAL SECURITY! + +Upon your purchase of any GUIDE #1 through #5, the +Copyright owner assigns to you two important rights: +(1) The right to resell and to distribute via the internet the +GUIDE that you have purchased, and (2) the right to assign +to your buyer of the GUIDE, the further right for your buyer +to resell that GUIDE. Included in your purchase of Guide #1 +is a valuable report on how to market on the Internet. It's +free of charge and will give you the tools you need. + +The right to print any of the material contained in the GUIDES +is reserved exclusively for the copyright owner. Your right to +resell and to distribute copies of the GUIDE applies only to the +internet and/or world wide web via electronic distribution. +YOU MAY NOT PRINT OUT THE GUIDES TO SELL OR +DISTRIBUTE IN ANY WAY. You may print a copy of the +Guides for your own personal use to enhance your +communication skills. + +=========================================== + +* This message is not intended for residents of localities that +have legal ordinances prohibiting engaging in such programs. +Screening of addresses has been done to the best of our ability. + +This message is only being sent once to recipients and thus +is no need to remove your email address from our mailing +list. You will not be receiving further emails with this message. + +iangxsifpkvgobwlxwhvvxfs + diff --git a/Ch3/datasets/spam/spam/00086.9c945bb90f76a8b76331599106c28429 b/Ch3/datasets/spam/spam/00086.9c945bb90f76a8b76331599106c28429 new file mode 100644 index 000000000..899dd4c5c --- /dev/null +++ b/Ch3/datasets/spam/spam/00086.9c945bb90f76a8b76331599106c28429 @@ -0,0 +1,49 @@ +From tawneemail@yahoo.com Mon Aug 26 15:49:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id D96FE47CC8 + for ; Mon, 26 Aug 2002 10:41:57 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:57 +0100 (IST) +Received: from proxy.foxberry.com ([203.238.133.122]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7PBWaZ11279 for + ; Sun, 25 Aug 2002 12:32:37 +0100 +Message-Id: <200208251132.g7PBWaZ11279@dogma.slashnull.org> +From: Tawnee Stone +To: Undisclosed.Recipients@dogma.slashnull.org +Cc: +Subject: I'm ready to bare for you! +Sender: Tawnee Stone +MIME-Version: 1.0 +Date: Sun, 25 Aug 2002 19:33:54 -0700 +X-Mailer: Internet Mail Service (5.5.2650.21) +Content-Type: text/html; charset="iso-8859-1" + + + + +
    +
    +

    Hot Tawnee the Internet Sensation is ready to bare all for +you.
    Looking at those firm tits and creamy soft +thighs you can't help but get an instant erection. Now Tawnee's Sister +Tori joined in. Both are sweet little honeys that love to show you what a good +time is all about!
    + Click here To Visit TawneeStone.com + where you will see both posing for you in many erotic ways +

    +
    +

     

    + + +
    +
    THIS + EMAIL WAS NOT SENT UNSOLICITED. YOU HAVE SUBSCRIBED TO RECEIVE OUR MAILING. + IF YOU WISH TO DISCONTINUE SIMPLY REPLY TO THIS EMAIL WITH "REMOVE" + IN SUBJECT. WE ARE SORRY FOR ANY INCONVENIENCE.
    +
    + diff --git a/Ch3/datasets/spam/spam/00087.f09438ca6392721e63696f4f753effbb b/Ch3/datasets/spam/spam/00087.f09438ca6392721e63696f4f753effbb new file mode 100644 index 000000000..1d7cfc3a7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00087.f09438ca6392721e63696f4f753effbb @@ -0,0 +1,62 @@ +From aileen_howard@lycos.com Mon Aug 26 15:49:28 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 39F7744157 + for ; Mon, 26 Aug 2002 10:41:59 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:41:59 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7PF3OZ16620 for + ; Sun, 25 Aug 2002 16:03:24 +0100 +Received: from lycos.com ([194.186.125.253]) by webnote.net (8.9.3/8.9.3) + with SMTP id QAA21873 for ; Sun, 25 Aug 2002 16:03:30 + +0100 +From: aileen_howard@lycos.com +Received: from [4.169.44.219] by sparc.zubilam.net with esmtp; + 25 Aug 0102 18:57:52 -0400 +Reply-To: +Message-Id: <023c33c46c3c$5555b5a1$0ab57ad8@alpasn> +To: Registrant@webnote.net +Subject: BIZ, .INFO, .COM for only $14.95 +Date: Sun, 25 Aug 0102 03:37:45 +1100 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: eGroups Message Poster +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00E2_83D00E6B.E2024A14" + +------=_NextPart_000_00E2_83D00E6B.E2024A14 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +SU1QT1JUQU5UIElORk9STUFUSU9OOg0KDQpUaGUgbmV3IGRvbWFpbiBuYW1l +cyBhcmUgZmluYWxseSBhdmFpbGFibGUgdG8gdGhlIGdlbmVyYWwgcHVibGlj +IGF0IGRpc2NvdW50IHByaWNlcy4gTm93IHlvdSBjYW4gcmVnaXN0ZXIgb25l +IG9mIHRoZSBleGNpdGluZyBuZXcgLkJJWiBvciAuSU5GTyBkb21haW4gbmFt +ZXMsIGFzIHdlbGwgYXMgdGhlIG9yaWdpbmFsIC5DT00gYW5kIC5ORVQgbmFt +ZXMgZm9yIGp1c3QgJDE0Ljk1LiBUaGVzZSBicmFuZCBuZXcgZG9tYWluIGV4 +dGVuc2lvbnMgd2VyZSByZWNlbnRseSBhcHByb3ZlZCBieSBJQ0FOTiBhbmQg +aGF2ZSB0aGUgc2FtZSByaWdodHMgYXMgdGhlIG9yaWdpbmFsIC5DT00gYW5k +IC5ORVQgZG9tYWluIG5hbWVzLiBUaGUgYmlnZ2VzdCBiZW5lZml0IGlzIG9m +LWNvdXJzZSB0aGF0IHRoZSAuQklaIGFuZCAuSU5GTyBkb21haW4gbmFtZXMg +YXJlIGN1cnJlbnRseSBtb3JlIGF2YWlsYWJsZS4gaS5lLiBpdCB3aWxsIGJl +IG11Y2ggZWFzaWVyIHRvIHJlZ2lzdGVyIGFuIGF0dHJhY3RpdmUgYW5kIGVh +c3ktdG8tcmVtZW1iZXIgZG9tYWluIG5hbWUgZm9yIHRoZSBzYW1lIHByaWNl +LiAgVmlzaXQ6IGh0dHA6Ly93d3cuYWZmb3JkYWJsZS1kb21haW5zLmNvbSB0 +b2RheSBmb3IgbW9yZSBpbmZvLg0KIA0KUmVnaXN0ZXIgeW91ciBkb21haW4g +bmFtZSB0b2RheSBmb3IganVzdCAkMTQuOTUgYXQ6IGh0dHA6Ly93d3cuYWZm +b3JkYWJsZS1kb21haW5zLmNvbS8gIFJlZ2lzdHJhdGlvbiBmZWVzIGluY2x1 +ZGUgZnVsbCBhY2Nlc3MgdG8gYW4gZWFzeS10by11c2UgY29udHJvbCBwYW5l +bCB0byBtYW5hZ2UgeW91ciBkb21haW4gbmFtZSBpbiB0aGUgZnV0dXJlLg0K +IA0KU2luY2VyZWx5LA0KIA0KRG9tYWluIEFkbWluaXN0cmF0b3INCkFmZm9y +ZGFibGUgRG9tYWlucw0KDQoNClRvIHJlbW92ZSB5b3VyIGVtYWlsIGFkZHJl +c3MgZnJvbSBmdXJ0aGVyIHByb21vdGlvbmFsIG1haWxpbmdzIGZyb20gdGhp +cyBjb21wYW55LCBjbGljayBoZXJlOg0KaHR0cDovL3d3dy5jZW50cmFscmVt +b3ZhbHNlcnZpY2UuY29tL2NnaS1iaW4vZG9tYWluLXJlbW92ZS5jZ2kNCihl +MSkNCjY0NjVVaVVOMS0wNDRXUUJCMTU0MGZoalo5LTgzNHlaeWIxOTc5emF2 +WjktNjk0bDQ0 + diff --git a/Ch3/datasets/spam/spam/00088.1673f91313df07da1a18b2fc458dd4c4 b/Ch3/datasets/spam/spam/00088.1673f91313df07da1a18b2fc458dd4c4 new file mode 100644 index 000000000..68ebbba8a --- /dev/null +++ b/Ch3/datasets/spam/spam/00088.1673f91313df07da1a18b2fc458dd4c4 @@ -0,0 +1,154 @@ +From sitescooper-talk-admin@lists.sourceforge.net Mon Aug 26 15:49:29 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 91A3E44158 + for ; Mon, 26 Aug 2002 10:42:00 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:42:00 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7PJKLZ23639 for ; Sun, 25 Aug 2002 20:20:21 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17j2vi-0007l8-00; Sun, + 25 Aug 2002 12:20:10 -0700 +Received: from abn161-55.ank-avrupa-ports.kablonet.net.tr + ([195.174.161.55] helo=yahoo.com) by usw-sf-list1.sourceforge.net with + smtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17j2ux-0006Mt-00 for + ; Sun, 25 Aug 2002 12:19:24 -0700 +From: "BILSAG" +To: +MIME-Version: 1.0 +Reply-To: "BILSAG" +Message-Id: +Subject: [scoop] CEVIRI YAZILIMLARI +Sender: sitescooper-talk-admin@example.sourceforge.net +Errors-To: sitescooper-talk-admin@example.sourceforge.net +X-Beenthere: sitescooper-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion of sitescooper - see http://sitescooper.org/ + +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 25 Aug 2002 22:19:23 +0300 +Date: Sun, 25 Aug 2002 22:19:23 +0300 +Content-Type: text/html; charset="ISO-8859-9" +Content-Transfer-Encoding: 8bit + +HTML> + + + + + + + + +
    +

    +             
    + +
    +

    + + + + + + + + + + + + + + + +
    ÝNTERNETTE KENDÝNÝZÝ DAHA ÝYÝ HÝSSEDECEKSÝNÝZ. + ÝNGÝLÝZCE WEB SAYFALARININ TÜRKÇE'YE ÇEVÝRÝ YAZILIMI +
    $ 39+KDV
    ÝNGÝLÝZCE'DEN TÜRKÇE'YE BÝLGÝSAYAR DESTEKLÝ + METÝN ÇEVÝRÝ YAZILIMI + + (MS-WORD ALTINDA KULLANIM, TÜM WINDOWS VERSÝYONLARI ÝLE UYUMLU) +
    $ 69+KDV
    ÝKÝ YAZILIM   BÝRLÝKTE $ + 89+KDV +

    +

    Ayrýntýlý Bilgi + Ýçin  týklayýn +            

    +

    + +  

    +

    BÝLSAG Ltd.

    +

    AHMET MÝTHAT + EFENDÝ SOK. 22/1 ÇANKAYA 06700 / ANKARA /

    +

    Tlf: 0312. 439 2850/ Fax: 0312. 439 9347 +

    +

    bilsag@msn.com

    + + + + +

     

    +

     

    + +

    + +
    +
    + + + + + + +
    +E-posta adres listemizden çýkmak içinÇIKAR tuþuna basýnýz + +
    + + +
    +Bu elektronik posta: sitescooper-talk@example.sourceforge.net e gönderilmiþtir + + + +
    +
    +
    + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +Sitescooper-talk mailing list +Sitescooper-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/sitescooper-talk + diff --git a/Ch3/datasets/spam/spam/00089.7e7baae6ef4a8fb945d7b3fe551329fe b/Ch3/datasets/spam/spam/00089.7e7baae6ef4a8fb945d7b3fe551329fe new file mode 100644 index 000000000..1ab5e4b26 --- /dev/null +++ b/Ch3/datasets/spam/spam/00089.7e7baae6ef4a8fb945d7b3fe551329fe @@ -0,0 +1,43 @@ +From havoc1006@yahoo.com Mon Aug 26 15:49:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id C444147C66 + for ; Mon, 26 Aug 2002 10:42:09 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:42:09 +0100 (IST) +Received: from email (adsl-66-73-8-232.dsl.sfldmi.ameritech.net + [66.73.8.232]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7PLOoZ27015 for ; Sun, 25 Aug 2002 22:24:51 +0100 +Received: from Sender ([66.73.8.232]) by email with Microsoft + SMTPSVC(5.0.2172.1); Sun, 25 Aug 2002 17:17:12 -0400 +From: market +To: "" <> +Subject: Email Marketing +X-Mailer: The Bat! (v1.52f) Business +MIME-Version: 1.0 +Content-Type: text/plain; charset="koi8-r" +Date: Sun, 25 Aug 2002 17:17:12 -0400 +Message-Id: +X-Originalarrivaltime: 25 Aug 2002 21:17:12.0312 (UTC) FILETIME=[C74C5780:01C24C7C] + +Email marketing works! There's no way around it. +No other medium let's you share your offer with more +people for less than the cost of a small classified ad. + +Get access to our targeted email list exchange where +our members can exchange their old targeted email lists for new ones. + +Get access to over 1 million fresh general emails every week. + +We offer all the services above for free. + + + +Buyers are out there, marketing is the key. +Signup today at http://68.62.73.31 +Limited membership + +This is a one time message, you will not be emailed again. + diff --git a/Ch3/datasets/spam/spam/00090.52630c4c07cd069c7bc7658c1a7a7253 b/Ch3/datasets/spam/spam/00090.52630c4c07cd069c7bc7658c1a7a7253 new file mode 100644 index 000000000..3126c1cf7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00090.52630c4c07cd069c7bc7658c1a7a7253 @@ -0,0 +1,227 @@ +From mando@insiq.us Mon Aug 26 15:49:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 1B07847CCA + for ; Mon, 26 Aug 2002 10:42:12 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:42:12 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g7PNukZ31378 for ; Mon, 26 Aug 2002 00:56:47 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Sun, 25 Aug 2002 19:57:34 -0400 +Subject: More cash for the business you already write - IMMEDIATELY +To: +Date: Sun, 25 Aug 2002 19:57:34 -0400 +From: "IQ - M&O Marketing" +Message-Id: <3c317101c24c93$2e9d9d20$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJMfzp1BA79ts+WS2KwLJFJwR7QiQ== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 25 Aug 2002 23:57:34.0781 (UTC) FILETIME=[2EBC96D0:01C24C93] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_3A5886_01C24C5D.B368E220" + +This is a multi-part message in MIME format. + +------=_NextPart_000_3A5886_01C24C5D.B368E220 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: quoted-printable + + Get a kick out of our huge annuity bonuses!=09 + Earn a $1,000 cash bonus*=0A= +for every 5 annuity applications=0A= +with any of +our four top carriers=0A= +by 9-30-02!=0A= +Deadline too soon? No Problem!=0A= +Earn an +$800 cash bonus*=0A= +for every 5 annuity applications=0A= +with any of our four +top carriers=0A= +by 12-31-02! + =09 + =20 +Get your bonus! Call M&O Marketing today! + 800-862-0959 +=97 or =97 + +Please fill out the form below for more information =09 +Name: =09 +E-mail: =20 +Phone: =20 +City: State: =20 + =09 +=20 + +*Bonuses awarded from M&O Marketing on paid, issued business. For agent +use only. Offer subject to change without notice. Offer starts 7/15/02. +Offer ends 12/31/02. Offer good in all states except: WI, IN, DE. Not +available with all carriers. + +We don't want anyone to receive our mailings who does not wish to +receive them. This is a professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: http://www.insuranceiq.com/optout +=20 + +Legal Notice =20 + +------=_NextPart_000_3A5886_01C24C5D.B368E220 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +More cash for the business you already write - = +IMMEDIATELY + + + + + + =20 + + + =20 + + +
    + + =20 + + + =20 + + + + =20 + + + =20 + + +
    + 3D"Earn
    + +
     
    + Get your bonus! Call = +M&O Marketing today!
    + =20 +
    + — or —

    =20 + + =20 + + + + + +
    + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please fill = +out the form below for more information +
    Name:
    E-mail:
    Phone:
    City: State:
     =20 + =20 + =20 + =20 +
    +
    +

    *Bonuses awarded from=20 + M&O Marketing on paid, issued business. For agent use = +only.=20 + Offer subject to change without notice. Offer starts = +7/15/02. Offer=20 + ends 12/31/02. Offer good in all states except: WI, IN, = +DE. Not=20 + available with all carriers.

    +
    +
    +

    We don't want anyone to receive our mailings who = +does not=20 + wish to receive them. This is a professional communication=20 + sent to insurance professionals. To be removed from this mailing=20 + list, DO NOT REPLY to this message. Instead, go here: =20 + http://www.insuranceiq.com/optout

    +
    +
    + Legal = +Notice =20 +
    =20 + + + +------=_NextPart_000_3A5886_01C24C5D.B368E220-- + diff --git a/Ch3/datasets/spam/spam/00091.bcaf9648660ba372bc4d542aa06456ad b/Ch3/datasets/spam/spam/00091.bcaf9648660ba372bc4d542aa06456ad new file mode 100644 index 000000000..a5e49661c --- /dev/null +++ b/Ch3/datasets/spam/spam/00091.bcaf9648660ba372bc4d542aa06456ad @@ -0,0 +1,40 @@ +From stewart3448@Flashmail.com Mon Aug 26 15:49:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 98CCD47C88 + for ; Mon, 26 Aug 2002 10:42:16 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:42:16 +0100 (IST) +Received: from marvin.kidsheart.com (kidsheart.com [216.207.32.165]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7Q4JtZ09148 for + ; Mon, 26 Aug 2002 05:19:55 +0100 +Received: from mail.Flashmail.com (202.9.154.217 [202.9.154.217]) by + marvin.kidsheart.com with SMTP (Microsoft Exchange Internet Mail Service + Version 5.5.2656.59) id RL0XLBTW; Mon, 26 Aug 2002 00:21:57 -0400 +Message-Id: <00006d7c3c7f$00007797$00005ea5@mail.Flashmail.com> +To: +From: stewart3448@Flashmail.com +Subject: shop your loan to lenders for the best rate OTQ +Date: Mon, 26 Aug 2002 09:49:55 -0700 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + +
    + + +

    +Copyright 2002 - All rights reserved

    If you would no longer like us +to contact you or feel that you have
    received this email in error, +please click here +to unsubscribe.
    + + + + diff --git a/Ch3/datasets/spam/spam/00092.8ca54ce0c31e6149b5ef05c0108743be b/Ch3/datasets/spam/spam/00092.8ca54ce0c31e6149b5ef05c0108743be new file mode 100644 index 000000000..6520a1f51 --- /dev/null +++ b/Ch3/datasets/spam/spam/00092.8ca54ce0c31e6149b5ef05c0108743be @@ -0,0 +1,121 @@ +From girl_with_toys_541652k57@yahoo.com Mon Aug 26 15:50:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 6B21A47CCB + for ; Mon, 26 Aug 2002 10:42:17 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:42:17 +0100 (IST) +Received: from yahoo.com ([200.178.101.130]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7Q8GCZ14480 for ; + Mon, 26 Aug 2002 09:16:13 +0100 +Received: from unknown (HELO hd.ressort.net) (99.93.115.121) by + rly-xl05.dohuya.com with smtp; Mon, 26 Aug 2002 00:17:20 +0800 +Reply-To: +Message-Id: <036c30b32e2e$3876c4c4$7ba85ee1@rhjxet> +From: +To: girl_with_toys_54@yahoo.com +Subject: Re: Want to go on a date? +Date: Mon, 26 Aug 2002 00:16:25 +0800 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00B3_51A40A1A.A7486A51" + +------=_NextPart_000_00B3_51A40A1A.A7486A51 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEg +VHJhbnNpdGlvbmFsLy9FTiI+DQo8aHRtbD4NCjxoZWFkPg0KPHRpdGxlPkFk +dWx0IENsYXNzaWZpZWQgMmsyPC90aXRsZT4NCjxtZXRhIGh0dHAtZXF1aXY9 +IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlz +by04ODU5LTEiPg0KPC9oZWFkPg0KDQo8Ym9keSBiZ2NvbG9yPSIjRkZGRkZG +IiBsaW5rPSIjQ0M5OTk5IiBsZWZ0bWFyZ2luPSIwIiB0b3BtYXJnaW49IjAi +IG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiPg0KDQo8Y2VudGVy +Pg0KICA8YnI+DQogIDx0YWJsZSB3aWR0aD0iNjAwIiBib3JkZXI9IjAiIGNl +bGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMSI+DQogICAgPHRyPg0KICAg +ICAgPHRkIGJnY29sb3I9IiM5OTAwMDAiPjx0YWJsZSB3aWR0aD0iNjAwIiBi +b3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+DQog +ICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNGRkZG +RkYiPg0KICAgICAgICAgIA0KICAgICAgICAgIDxkaXYgYWxpZ249InJpZ2h0 +Ij48aW1nIHNyYz0iaHR0cDovL3d3dy54eHhtYXRjaC5uZXQvbG9nby5qcGci +IHdpZHRoPSI2MDAiIGhlaWdodD0iNjUiPjxicj4NCiAgICAgICAgICA8Yj48 +Zm9udCBjb2xvcj0iI0NDMDAzMyIgc2l6ZT0iMiIgZmFjZT0iR2VuZXZhLCBB +cmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIj4tLS0gVGhlIG1vc3QgY29t +cHJlaGVuc2l2ZSBhZHVsdCBtYXRjaCBtYWtpbmcgc2VydmljZTxicj4NCiAg +ICAgICAgICA8YnI+DQogICAgICAgICAgICAgICAgICAgIDwvZm9udD48L2I+ +DQo8L2Rpdj48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgICAgPHRy +Pg0KICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNGRkZGRkYiPjxjZW50ZXI+ +DQogICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI0MDAiIGJvcmRlcj0i +MCIgY2VsbHNwYWNpbmc9IjMiIGNlbGxwYWRkaW5nPSIxIj4NCiAgICAgICAg +ICAgICAgICAgIDx0ciBiZ2NvbG9yPSIjOTkwMDAwIj4NCiAgICAgICAgICAg +ICAgICAgICAgPHRkIHdpZHRoPSIxMDAiPjxpbWcgc3JjPSJodHRwOi8vd3d3 +Lnh4eG1hdGNoLm5ldC9mcm9udHBpYy00LmdpZiIgd2lkdGg9IjEwMCIgaGVp +Z2h0PSIxNTAiPjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0 +aD0iMTAwIj48aW1nIHNyYz0iaHR0cDovL3d3dy54eHhtYXRjaC5uZXQvZnJv +bnRwaWNtLTIuZ2lmIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjE1MCI+PC90ZD4N +CiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAiPjxpbWcgc3Jj +PSJodHRwOi8vd3d3Lnh4eG1hdGNoLm5ldC9mcm9udHBpYy0yLmdpZiIgd2lk +dGg9IjEwMCIgaGVpZ2h0PSIxNTAiPjwvdGQ+DQogICAgICAgICAgICAgICAg +ICAgIDx0ZCB3aWR0aD0iMTAwIj48aW1nIHNyYz0iaHR0cDovL3d3dy54eHht +YXRjaC5uZXQvZnJvbnRwaWNtLTEuZ2lmIiB3aWR0aD0iMTAwIiBoZWlnaHQ9 +IjE1MCI+PC90ZD4NCiAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAg +ICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICA8Zm9udCBjb2xv +cj0iIzk5MDAwMCIgc2l6ZT0iMSIgZmFjZT0iVmVyZGFuYSwgQXJpYWwsIEhl +bHZldGljYSwgc2Fucy1zZXJpZiI+Q2hlY2sgc29tZSBvZiBvdXIgIGFjdHVh +bCBwaWN0dXJlcyBmcm9tIDxiPnJlYWw8L2I+IG1lbWJlcnMhPC9mb250Pjxi +cj4NCiAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjQyMCIgYm9yZGVy +PSIwIiBjZWxsc3BhY2luZz0iMyIgY2VsbHBhZGRpbmc9IjEiPg0KICAgICAg +ICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICA8dGQ+PGNl +bnRlcj4NCiAgICAgICAgICAgICAgICAgIDxmb250IGNvbG9yPSIjOTkwMDAw +IiBzaXplPSIyIiBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBz +YW5zLXNlcmlmIj48YnI+DQogICAgICAgICAgICAgICAgICA8YnI+DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvbnQ+PGZvbnQg +c2l6ZT0iMiIgZmFjZT0iVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fu +cy1zZXJpZiI+PC9mb250Pjxmb250IGNvbG9yPSIjOTkwMDAwIiBzaXplPSIy +IiBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlm +Ij48Yj5XZWxjb21lPC9iPiB0byBvbmUgb2YgdGhlIEludGVybmV0J3MgcHJl +bWllciBhZHVsdCBtYXRjaCBtYWtpbmcgc2VydmljZXMgd2hlcmUgcGVvcGxl +IGp1c3QgbGlrZSB5b3Vyc2VsZiBjYW4gdmlldyBhbmQgcGxhY2UgcGVyc29u +YWwgYWR2ZXJ0aXNlbWVudHMgd2hpY2ggYXJlIHZpZXdlZCBieSB0aG91c2Fu +ZHMgZGFpbHkhDQo8YnI+DQogICAgICAgICAgICAgICAgICA8YnI+DQogICAg +ICAgICAgICAgICAgICA8L2ZvbnQ+DQogICAgICAgICAgICAgICAgICAgICAg +PC9jZW50ZXI+DQogICAgICAgICAgICAgICAgICAgICAgPGNlbnRlcj4NCiAg +ICAgICAgICAgICAgICAgIDxmb250IGNvbG9yPSIjOTkwMDAwIiBzaXplPSIy +IiBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlm +Ij4NCiAgICAgICAgICAgICAgICBXZWIgQWR1bHQgQ2xhc3NpZmllZHMgaGFz +IHRob3VzYW5kcyBvZiBhZHMgLSBzb21ldGhpbmcgZm9yIGV2ZXJ5b25lLCBt +YWxlIG9yIGZlbG1hbGUhIA0KICAgICAgICAgICAgICAgIDwvZm9udD4NCiAg +ICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDxmb250IGNvbG9y +PSIjOTkwMDAwIiBzaXplPSIyIiBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVs +dmV0aWNhLCBzYW5zLXNlcmlmIj48YnI+DQogICAgICAgICAgICAgICAgICA8 +YnI+DQogICAgICAgICAgICAgICAgICA8L2ZvbnQ+PGZvbnQgc2l6ZT0iMiIg +ZmFjZT0iVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiI+ +DQogICAgICAgICAgICAgICAgICA8YnI+DQogICAgICAgICAgICAgICAgICA8 +aW1nIHNyYz0iaHR0cDovL3d3dy54eHhtYXRjaC5uZXQvaGVhcnQuZ2lmIiB3 +aWR0aD0iMTUiIGhlaWdodD0iMTMiPiZuYnNwOyAgICAgICAgICAgICAgICAg +IA0KICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy54eHht +YXRjaC5uZXQvdmVyaWZ5Lmh0bSI+PGI+Q2xpY2sgaGVyZSB0byBiZSBjb252 +aW5jZWQ8L2I+PC9hPiZuYnNwOyZuYnNwOzxpbWcgc3JjPSJodHRwOi8vd3d3 +Lnh4eG1hdGNoLm5ldC9oZWFydC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIx +MyI+PGJyPg0KICAgICAgICAgICAgICAgICAgPGZvbnQgY29sb3I9IiM5OTAw +MDAiIHNpemU9IjEiPjxiPih3aWxsIG9wZW4gaW4gYSBuZXcgd2luZG93IGZv +ciB5b3VyIGNvbnZlbmllbmNlKTwvYj48L2ZvbnQ+PC9mb250Pjxicj4NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NlbnRlcj48L3Rk +Pg0KICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICA8 +L3RhYmxlPg0KICAgICAgICAgICAgICAgIDxicj4NCiAgICAgICAgPC9jZW50 +ZXI+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICA8L3RhYmxlPjwvdGQ+DQog +ICAgPC90cj4NCiAgPC90YWJsZT4NCiAgDQogIDx0YWJsZSB3aWR0aD0iNjAw +IiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+ +DQogICAgPHRyPg0KICAgICAgPHRkPjxkaXYgYWxpZ249InJpZ2h0Ij48Zm9u +dCBzaXplPSIxIiBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBz +YW5zLXNlcmlmIj48Yj4mY29weTtYeHhNYXRjaC5uZXQgMjAwMjwvYj48L2Zv +bnQ+DQo8L2Rpdj48L3RkPg0KICAgIDwvdHI+DQogIDwvdGFibGU+DQogIDxi +cj4NCjwvY2VudGVyPg0KPC9ib2R5Pg0KPC9odG1sPg0KDQozNzQwb3hkdTYt +MzMyeUlsZTg5MjlFQXRMNS1sMjU= + diff --git a/Ch3/datasets/spam/spam/00093.ca4edc32d2ff8e1dbb5f9c0b15ec435b b/Ch3/datasets/spam/spam/00093.ca4edc32d2ff8e1dbb5f9c0b15ec435b new file mode 100644 index 000000000..49b9e1c7a --- /dev/null +++ b/Ch3/datasets/spam/spam/00093.ca4edc32d2ff8e1dbb5f9c0b15ec435b @@ -0,0 +1,78 @@ +From guyhaibo@yahoo.ca Mon Aug 26 15:50:05 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 1261547CCC + for ; Mon, 26 Aug 2002 10:42:19 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:42:19 +0100 (IST) +Received: from yahoo.ca (2.c214.ethome.net.tw [202.178.214.2]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7QDcOZ23227 for + ; Mon, 26 Aug 2002 14:38:25 +0100 +Received: from 157.111.91.87 ([157.111.91.87]) by mta6.snfc21.pbi.net with + asmtp; Mon, 26 Aug 2002 19:38:20 -0600 +Received: from n9.groups.yahoo.com ([126.115.54.2]) by + asy100.as122.sol.superonline.com with esmtp; 26 Aug 2002 02:37:57 +1100 +Received: from unknown (49.250.117.159) by smtp-server6.tampabay.rr.com + with smtp; Mon, 26 Aug 2002 15:37:34 -0200 +Reply-To: +Message-Id: <022a62b35b8c$3832b4a3$8be02ba2@dpduxx> +From: +To: USER@dogma.slashnull.org +Subject: Want to play poker with other people online. +Date: Mon, 26 Aug 2002 06:34:12 +0700 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +Importance: Normal +Content-Transfer-Encoding: 8bit + +Get your favorite Poker action at http://www.multiplayerpoker.net + +Play against real people from around the world for real money or just +for fun. Access one of the busiest poker rooms online. We've dealt +over 8 million hands! Experience the best poker software available +today featuring world class graphics, true random shuffling algorithms, +and 24x7 customer service. We've got a great selection of poker games +for you to play such as: + +Hold'em, Omaha +Omaha Hi/Lo +7 Card Stud +7 Card Stud Hi/Lo +5 Card Stud +Poker tournaments + +Sign up today and start playing with new & old friends...download our free +software now at http://www.MultiPlayerPoker.net + +Current Promotion: + · $50 Deposit Bonus! - 100% bonus! + · Daily High Hand - $250 Daily. + · Progressive Bad Beat Jackpot - $2,000.00 minimum with $100.00 added +daily. + · Tournaments - Multiplayer shootouts. + + + + + + + + + + + + + + + + +wish not to received any further e-mail from us please click +http://www.centralremovalservice.com/cgi-bin/poker-remove.cgi +(K3)8456DyGH8-805KZkP1399PLHN9-156cgkc0858xxnWl40 + + diff --git a/Ch3/datasets/spam/spam/00094.7f704c47988221c18cb6a620409442b8 b/Ch3/datasets/spam/spam/00094.7f704c47988221c18cb6a620409442b8 new file mode 100644 index 000000000..275f2458c --- /dev/null +++ b/Ch3/datasets/spam/spam/00094.7f704c47988221c18cb6a620409442b8 @@ -0,0 +1,67 @@ +From marcie1136786@yahoo.com Mon Aug 26 16:02:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 272F843F99 + for ; Mon, 26 Aug 2002 10:59:51 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 15:59:51 +0100 (IST) +Received: from info.chinacoal.gov.cn ([211.99.74.5]) + by webnote.net (8.9.3/8.9.3) with ESMTP id PAA26344 + for ; Mon, 26 Aug 2002 15:17:26 +0100 +From: marcie1136786@yahoo.com +Message-Id: <200208261417.PAA26344@webnote.net> +Received: from 211.97.147.11 ([211.97.147.11]) by info.chinacoal.gov.cn with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id RPBL0WFB; Sat, 24 Aug 2002 01:06:46 +0800 +To: zzzz@brooksresources.com, yyyy@cheetah.net, yyyy@colorado.net, + zzzz@connect.reach.net +Cc: zzzz@cstone.net, yyyy@dc.net, yyyy@dockingbay.com, yyyy@dynamic.com, + zzzz@electrotex.com, jm@epic.net, jm@expert.expert.com, + zzzz@firstnethou.com +Date: Fri, 23 Aug 2002 13:03:04 -0400 +Subject: Incredible Pictures!!!!!!!! +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Precedence-Ref: l2340567 +Content-Transfer-Encoding: 7bit +Content-Type: text/html; charset=us-ascii + + + +

    Do you like Sexy Animals doing the wild thing? We have the super hot content on the Internet!
    +This is the site you have heard about. Rated the number one adult site three years in a row!
    +- Thousands of pics from hardcore fucking, and cum shots to pet on girl.
    +
    +- Thousands videos
    +
    +So what are you waiting for?
    +
    +CLICK HERE
    +
    +
    +YOU MUST BE AT LEAST 18 TO ENTER!

    +

     

    +

     

    +

     

    +

    You have received this advertisement because you have opted in +to receive
    +free adult internet offers and
    +
    +specials through our affiliated websites. If you do not wish to receive
    +further emails or have received the
    +
    +email in error you may opt-out of our database by clicking here:
    +CLICK HERE
    +Please allow 24hours for removal.
    +This e-mail is sent in compliance with the Information Exchange Promotion and
    +Privacy Protection Act.
    +
    +section 50 marked as 'Advertisement' with valid 'removal' instruction.

    + + + + [NKIYs5] + + diff --git a/Ch3/datasets/spam/spam/00095.17594a58d6736a8f6a1990b0b92090cd b/Ch3/datasets/spam/spam/00095.17594a58d6736a8f6a1990b0b92090cd new file mode 100644 index 000000000..13efb91a3 --- /dev/null +++ b/Ch3/datasets/spam/spam/00095.17594a58d6736a8f6a1990b0b92090cd @@ -0,0 +1,60 @@ +From amvlasak8700j18@gmx.at Mon Aug 26 17:38:32 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 9C59243F99 + for ; Mon, 26 Aug 2002 12:38:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 17:38:28 +0100 (IST) +Received: from gmx.at ([211.138.13.227]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7QGWRZ00531; Mon, 26 Aug 2002 17:32:28 +0100 +Received: from [117.171.72.171] by a231242.upc-a.zhello.nl with asmtp; + 26 Aug 0102 05:30:20 +1000 +Received: from 180.131.140.217 ([180.131.140.217]) by pet.vosni.net with + NNFMP; Mon, 26 Aug 0102 15:22:27 -1000 +Received: from unknown (HELO rly-yk05.pesdets.com) (140.157.234.62) by + mta21.bigpong.com with NNFMP; Mon, 26 Aug 0102 05:14:34 +1100 +Reply-To: +Message-Id: <004a18b14a6d$2847a8b3$7dc28dd8@vvaknd> +From: +To: , , , + +Subject: A must have for "Gadget" lovers 7134-4 +Date: Mon, 26 Aug 0102 23:12:40 -0700 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: The Bat! (v1.52f) Business +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00A3_65E24E1C.A3468E63" + +------=_NextPart_000_00A3_65E24E1C.A3468E63 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +Q09QWSBEVkQgTU9WSUVTIFRPIENELVINClJJR0hUIE5PVyENCg0KDQpXZSBo +YXZlIEFsbCB0aGUgc29mdHdhcmUgeW91IG5lZWQgdG8gQ09QWSB5b3VyIG93 +biBEVkQgTW92aWVzLg0KDQpDb3B5IHlvdXIgb3duIERWRCBNb3ZpZXMgdXNp +bmcgbm90aGluZyBtb3JlIHRoYW4gb3VyIHNvZnR3YXJlLCBhIA0KRFZELVJP +TSBhbmQgeW91ciBDRC1SIGJ1cm5lciENCg0KQmFja3VwIHlvdXIgRFZEIE1v +dmllIENvbGxlY3Rpb24gDQpQbGF5YmFjayBvbiBhbnkgaG9tZSBEVkQgcGxh +eWVyKiANCk5vIEV4cGVuc2l2ZSBEVkQgQnVybmVyIFJlcXVpcmVkIA0KRnJl +ZSBMaXZlIFRlY2ggU3VwcG9ydA0KDQogDQpMSU1JVEVEIFRJTUUgT0ZGRVIh +IEZSRUUgRFZEIE1PVklFIE9GIFlPVVIgQ0hPSUNFISBBQ1QgTk9XIQ0KDQoN +CjxhIGhyZWY9Imh0dHA6Ly8yMDIuMTA4LjIyMS4xOC93d3cyODIvcG9zL2R2 +ZC5odG0iPmNsaWNrIGhlcmU8L2E+DQoNCisrKysrKysrKysrKysrKysrKysr +KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr +KysrKysrKysrKysNClRoaXMgZW1haWwgaGFzIGJlZW4gc2NyZWVuZWQgYW5k +IGZpbHRlcmVkIGJ5IG91ciBpbiBob3VzZSAiIk9QVC1PVVQiIiBzeXN0ZW0g +aW4gDQpjb21wbGlhbmNlIHdpdGggc3RhdGUgbGF3cy4gSWYgeW91IHdpc2gg +dG8gIk9QVC1PVVQiIGZyb20gdGhpcyBtYWlsaW5nIGFzIHdlbGwgDQphcyB0 +aGUgbGlzdHMgb2YgdGhvdXNhbmRzICBvZiBvdGhlciBlbWFpbCBwcm92aWRl +cnMgcGxlYXNlIHZpc2l0ICANCg0KPGEgaHJlZj0iaHR0cDovLzIwMi4xMDgu +MjIxLjE4L3d3dzI4Mi9vcHRvdXRkLmh0bSI+Y2xpY2sgaGVyZTwvYT4NCisr +KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr +KysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCg0KOTA4bDMNCjUyMTdm +clFHOC0wOTFpQm1INzUzM3ZQTFY4LTQxMWlFaU80MTU2WWhUUzItMjMwR2xr +VDk3MzN1Z1FUMi00NjBVakFaMDU4OHZ5RWc4LTAzMG5sNzc= + diff --git a/Ch3/datasets/spam/spam/00096.a791864be5f1205bf2cea0adf241b25a b/Ch3/datasets/spam/spam/00096.a791864be5f1205bf2cea0adf241b25a new file mode 100644 index 000000000..6540b962e --- /dev/null +++ b/Ch3/datasets/spam/spam/00096.a791864be5f1205bf2cea0adf241b25a @@ -0,0 +1,154 @@ +From george@vccomputers.ie Mon Aug 26 17:49:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 2C0B043F9B + for ; Mon, 26 Aug 2002 12:49:47 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 17:49:47 +0100 (IST) +Received: from trinity.vccomputers.ie (vccomp.colo.hosteurope.com + [217.199.168.242]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QGgPZ00919 for ; Mon, 26 Aug 2002 17:42:25 +0100 +Received: from amy (ts01-062.letterkenny.indigo.ie [194.125.139.189]) by + trinity.vccomputers.ie (8.12.1/8.12.1) with SMTP id g7QFuHMI000859; + Mon, 26 Aug 2002 16:56:18 +0100 +Message-Id: <003a01c24d19$f7f142e0$010ea8c0@amy> +From: "George Savva" +To: +Subject: Hosting from ?6.50 per month +Date: Mon, 26 Aug 2002 16:59:52 +0100 +MIME-Version: 1.0 +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Content-Type: multipart/alternative; boundary="----=_NextPart_000_0037_01C24D21.FF37C620" + +This is a multi-part message in MIME format. + +------=_NextPart_000_0037_01C24D21.FF37C620 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +VC Computers Ltd - Ireland + +HOSTING from an Irish company from as little as ?6.50 per month. + +Yes its true, we can offer your business hosting from only ?78.00 per = +year.=20 +With local support and service, and without the time difference you find = +with many companies based in the US, you are sure to get a swift = +response to any queries or questions you have. + +Standard Hosting Pack includes=20 +10 e-mail addresses +50MB space +500Mb transfer per month +PHP4 +JSP +CGI + +We can also offer other enhanced services for your hosting requirements, = +including databases, SSL, shopping cart systems etc.. + +Contact hosting@vccomputers.ie for more information or visit our site at = +http://www.vccomputers.ie=20 + +All prices exclude applicable taxes. E&OE. +We respect your privacy and we are only sending you this mail to inform = +you of the products and services we can offer your business. +If you would prefer not to receive these mails in the future, simply = +send us a reply at nomoremail@vccomputers.ie stating this fact and we = +will remove you from our list straight away. We would also appologise = +for any inconvenience this mail may have caused you. + +------=_NextPart_000_0037_01C24D21.FF37C620 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +
    VC Computers=20 +Ltd - Ireland
    +
     
    +
    HOSTING from an = +Irish company=20 +from as little as =806.50 per month.
    +
     
    +
    Yes its = +true, we can=20 +offer your business hosting from only =8078.00 per year.
    +
    With local = +support and=20 +service, and without the time difference you find with = +many companies=20 +based in the US, you are sure to get a swift response to any queries or=20 +questions you have.
    +
     
    +
    Standard Hosting Pack = + +includes 
    +
    10 e-mail = +addresses
    +
    50MB = +space
    +
    500Mb transfer per=20 +month
    +
    PHP4
    +
    JSP
    +
    CGI
    +
     
    +
    We can also = +offer other=20 +enhanced services for your hosting requirements, including databases,=20 +SSL, shopping cart systems etc..
    +
     
    +
    Contact hosting@vccomputers.ie = +for more=20 +information or visit our site at http://www.vccomputers.ie = +
    +
     
    +
    All = +prices exclude=20 +applicable taxes. E&OE.
    +
    We respect your privacy = +and we are=20 +only sending you this mail to inform you of the products and services we = +can=20 +offer your business.
    +
    If you would = +prefer not to=20 +receive these mails in the future, simply send us a reply at nomoremail@vccomputers.ie stating this fact and we will remove you from our list = +straight=20 +away. We would also appologise for any inconvenience this mail may have = +caused=20 +you.
    + +------=_NextPart_000_0037_01C24D21.FF37C620-- + + diff --git a/Ch3/datasets/spam/spam/00097.013347cc91e7d0915074dccb0428883f b/Ch3/datasets/spam/spam/00097.013347cc91e7d0915074dccb0428883f new file mode 100644 index 000000000..f93f24fca --- /dev/null +++ b/Ch3/datasets/spam/spam/00097.013347cc91e7d0915074dccb0428883f @@ -0,0 +1,56 @@ +From smilee1313@eudoramail.com Mon Aug 26 18:32:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 4ABDD43F9B + for ; Mon, 26 Aug 2002 13:32:20 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 18:32:20 +0100 (IST) +Received: from proxy-server.argogroupage.gr (mail.argogroupage.gr [195.97.102.134]) + by webnote.net (8.9.3/8.9.3) with ESMTP id SAA27069 + for ; Mon, 26 Aug 2002 18:30:18 +0100 +Message-Id: <200208261730.SAA27069@webnote.net> +Received: from smtp0291.mail.yahoo.com (210.83.114.125 [210.83.114.125]) by proxy-server.argogroupage.gr with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id QP7CPKKZ; Sat, 24 Aug 2002 02:20:16 +0300 +Date: Sat, 24 Aug 2002 07:08:34 +0800 +From: "Jeannie Quiroz" +X-Priority: 3 +To: zzzz@netcomuk.co.uk +Cc: zzzz@spamassassin.taint.org, yyyy@netvision.net.il, yyyy@nevlle.net, + zzzz@news4.inlink.com +Subject: zzzz,Increase your breast size. 100% safe! +Mime-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +================================= + +Guaranteed to increase, lift and firm your +breasts in 60 days or your money back!! + +100% herbal and natural. Proven formula since +1996. Increase your bust by 1 to 3 sizes within 30-60 +days and be all natural. + +Click here: +http://202.101.163.34:81/li/wangxd/ + +Absolutely no side effects! +Be more self confident! +Be more comfortable in bed! +No more need for a lift or support bra! + +100% GUARANTEED AND FROM A NAME YOU KNOW AND +TRUST! + + +************************************************** + +You are receiving this email as a double opt-in +subscriber to the Standard Affiliates Mailing +List. +To remove yourself from all related email lists, +just click here: +http://64.123.160.91:81/li/gg/unsubscriber.asp?userid=zzzz@netcomuk.co.uk + diff --git a/Ch3/datasets/spam/spam/00098.f1f1a3bd3ec32d8e967fba2a7a03e1e5 b/Ch3/datasets/spam/spam/00098.f1f1a3bd3ec32d8e967fba2a7a03e1e5 new file mode 100644 index 000000000..b08ff3027 --- /dev/null +++ b/Ch3/datasets/spam/spam/00098.f1f1a3bd3ec32d8e967fba2a7a03e1e5 @@ -0,0 +1,63 @@ +From hadley@cb.offermonkey.com Mon Aug 26 20:05:02 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 1E69043F99 + for ; Mon, 26 Aug 2002 15:05:02 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 20:05:02 +0100 (IST) +Received: from email.qves.com (mx-01.intimail.com [209.63.151.251] (may be forged)) + by webnote.net (8.9.3/8.9.3) with ESMTP id TAA27403 + for ; Mon, 26 Aug 2002 19:59:58 +0100 +Received: from qvp0074 ([169.254.6.3]) by email.qves.com with Microsoft SMTPSVC(5.0.2195.3779); + Mon, 26 Aug 2002 12:13:53 -0600 +From: "FreeLegal Advice" +To: +Subject: Get the Child Support You Deserve 10.124 +Date: Mon, 26 Aug 2002 12:13:46 -0600 +Message-ID: +MIME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJNLFHgWkZHGxFXTyG271G6jFjnIg== +Content-Class: urn:content-classes:message +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2462.0000 +X-OriginalArrivalTime: 26 Aug 2002 18:13:54.0827 (UTC) FILETIME=[56B30DB0:01C24D2C] + +1) Join the Web's Hottest & Fastest Growing Community +http://www.adclick.ws/p.cfm?o=259&s=pk007 + +2) Guaranteed to lose 10-12 lbs in 30 days +Slim Patch - Weight Loss Patches +http://www.adclick.ws/p.cfm?o=249&s=pk007 + +3) Get the Child Support You Deserve - Free Legal Advice +http://www.adclick.ws/p.cfm?o=245&s=pk002 + +4) Fight The Risk of Cancer - Save Your Lungs +http://www.adclick.ws/p.cfm?o=315&s=pk007 + +5) Start Your Online Private Photo Album +http://www.adclick.ws/p.cfm?o=285&s=pk007 + +Have a Wonderful Day, +Offer Manager +PrizeMama + + + + + + + + + + + + +If you wish to leave this list please use the link below. +http://www.qves.com/trim/?zzzz@spamassassin.taint.org%7C17%7C308417 + diff --git a/Ch3/datasets/spam/spam/00099.d41a21dc96bb3c3342292f7c9fa4db1e b/Ch3/datasets/spam/spam/00099.d41a21dc96bb3c3342292f7c9fa4db1e new file mode 100644 index 000000000..a9df5c534 --- /dev/null +++ b/Ch3/datasets/spam/spam/00099.d41a21dc96bb3c3342292f7c9fa4db1e @@ -0,0 +1,53 @@ +From verdichssss@hotmail.com Mon Aug 26 20:35:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 8FE8B43F99 + for ; Mon, 26 Aug 2002 15:35:49 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 20:35:49 +0100 (IST) +Received: from sun20.hepi.edu.ge (sun20.hepi.edu.ge [217.147.226.3]) + by webnote.net (8.9.3/8.9.3) with ESMTP id UAA27530 + for ; Mon, 26 Aug 2002 20:35:35 +0100 +Received: from smtp044.mail.yahoo.com ([218.244.193.142]) by sun20.hepi.edu.ge (8.7.5/8.7.3) with SMTP id UAA22974 for ; Mon, 26 Aug 2002 20:29:07 -0400 (GMT) +Message-Id: <200208270029.UAA22974@sun20.hepi.edu.ge> +Date: Tue, 27 Aug 2002 03:31:32 +0800 +From: "Faline Chhina" +X-Priority: 3 +To: zzzz@spamassassin.taint.org +Subject: zzzz,All New! Breast Enhancement +Mime-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Type: text/html; charset=us-ascii + +================================= + +Guaranteed to increase, lift and firm your +breasts in 60 days or your money back!! + +100% herbal and natural. Proven formula since +1996. Increase your bust by 1 to 3 sizes within 30-60 +days and be all natural. + +Click here: +http://202.101.163.34:81/li/dws8848/ + +Absolutely no side effects! +Be more self confident! +Be more comfortable in bed! +No more need for a lift or support bra! + +100% GUARANTEED AND FROM A NAME YOU KNOW AND +TRUST! + + +************************************************** + +You are receiving this email as a double opt-in +subscriber to the Standard Affiliates Mailing +List. +To remove yourself from all related email lists, +just click here: +http://64.123.160.91:81/li/gg/unsubscriber.asp?userid=zzzz@spamassassin.taint.org + diff --git a/Ch3/datasets/spam/spam/00100.81611d62ec1f172be947fda4af7caa2c b/Ch3/datasets/spam/spam/00100.81611d62ec1f172be947fda4af7caa2c new file mode 100644 index 000000000..712454e74 --- /dev/null +++ b/Ch3/datasets/spam/spam/00100.81611d62ec1f172be947fda4af7caa2c @@ -0,0 +1,117 @@ +From gwfqjulie@msn.com Mon Aug 26 21:37:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id B751643F99 + for ; Mon, 26 Aug 2002 16:37:19 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 21:37:19 +0100 (IST) +Received: from 64.105.237.170 ([218.14.180.52]) + by webnote.net (8.9.3/8.9.3) with SMTP id VAA27894 + for ; Mon, 26 Aug 2002 21:38:54 +0100 +Message-Id: <200208262038.VAA27894@webnote.net> +Received: from [63.85.85.236] by smtp-server6.tampabay.rr.com with SMTP; Aug, 26 2002 1:35:40 PM -0000 +Received: from unknown (HELO mail.gmx.net) (78.165.116.169) by smtp4.cyberec.com with smtp; Aug, 26 2002 12:19:37 PM +0600 +Received: from unknown (124.215.35.163) by rly-xw01.mx.aol.com with QMQP; Aug, 26 2002 11:16:45 AM +1100 +Received: from unknown (HELO f64.law4.hotmail.com) (13.61.40.178) by ssymail.ssy.co.kr with smtp; Aug, 26 2002 10:25:18 AM +0400 +From: angela +To: zzzz@spamassassin.taint.org +Cc: +Subject: Re: Your VIP Pass +Sender: angela +Mime-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Mon, 26 Aug 2002 13:38:57 -0700 +X-Mailer: The Bat! (v1.52f) Business + +################################### + + FREE Adult Lifetime Membership + Limited Time Offer!!! + +################################### + +YOUR INSTANT ACCESS PASSWORD +LOGIN NAME: zzzz@spamassassin.taint.org +PASSWORD: AcKWGy4L + +5 of the Best Adult Sites on the Internet for FREE! + +--------------------------- + +NEWS 08/25/02 +Over 3.1 Million Members have signed up for FREE, Last month 229,947 +New Members signed up for Free with the limited time offer. +Are you a FREE Member yet??? + +--------------------------- + +Our Membership FAQ + +Q. Why are you offering free access to 5 adult membership sites for free? + +A. We have advertisers that pay us for ad space so you don't have to +pay for a membership. + +Q. Is it true that your membership is Free for life? +A. Absolutely, you'll never have to pay a cent the advertisers do. + +Q. Do I have to sign up for all 5 FREE membership sites? +A. No, just one to get access to all of them. + +Q. Why do I have to give my Credit Card Information? +A. It's for age verification purposes only and you will not be charged. + If you don't believe us, just read their terms and conditions. + +Q. How do I get started? +A. Click on one of the links below to become a Free member. + +--------------------------- + +# 5. > Adults Farm +http://80.71.66.8/farm/?aid=993751 +Girls and Animals Getting Freaky....FREE Lifetime Membership!! + +# 4. > Sexy Celebes +http://80.71.66.8/celebst/?aid=993751 +Thousands Of XXX Celebes doing it...FREE Lifetime Membership!! + +# 3. > Play House Porn +http://80.71.66.8/play/?aid=993751 +Live Feeds From 60 Sites And Web Cams...FREE Lifetime Membership!! + +# 2. > Lesbian Lace +http://80.71.66.8/lesbian/?aid=993751 +Girls and Girls Getting Freaky! ...FREE Lifetime Membership!! + +# 1. > Teen Sex Fantasies +http://80.71.66.8/teen/?aid=993751 +Teen Schoolgirls, Live Sex Shows ...FREE Lifetime Membership!! + +-------------------------- + +Jennifer Simpson, Miami, FL +Your FREE lifetime membership has entertained my boyfriend and I for +the last two years! Your Adult Sites are the best on the net! + +Joe Morgan Manhattan, NY +Your live sex shows and live sex cams are unbelievable. The best part +about your porn sites, is that they're absolutely FREE! + +-------------------------- + + +Removal Instructions: +You have received this advertisement because you have opted in to +receive free adult internet offers and specials through our affiliated +websites. If you do not wish to receive further emails or have received +the email in error you may opt-out of our database here: +http://80.71.66.8/optout/index.html Please allow 24 hours for removal. + +This e-mail is sent in compliance with the Information Exchange +Promotion and Privacy Protection Act. section 50 marked as +'Advertisement' with valid 'removal' instruction. + +tkuejsrfkmtpfwldpnauksv + diff --git a/Ch3/datasets/spam/spam/00101.5a24bf3ba3962442179b1a0325a1d1cb b/Ch3/datasets/spam/spam/00101.5a24bf3ba3962442179b1a0325a1d1cb new file mode 100644 index 000000000..6b95cb193 --- /dev/null +++ b/Ch3/datasets/spam/spam/00101.5a24bf3ba3962442179b1a0325a1d1cb @@ -0,0 +1,144 @@ +From FreeSoftware-5265v80@yahoo.com Mon Aug 26 21:37:21 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id BE46143F9B + for ; Mon, 26 Aug 2002 16:37:20 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 21:37:20 +0100 (IST) +Received: from yahoo.com ([211.185.47.189]) + by webnote.net (8.9.3/8.9.3) with SMTP id VAA27898 + for ; Mon, 26 Aug 2002 21:39:06 +0100 +Reply-To: "Free Publishing Software" +Message-ID: <004b12e28d1a$4347d2b7$3ce68ab0@sgcrua> +From: "Free Publishing Software" +To: +Subject: Take your Marketing to the Next Level +Date: Mon, 26 Aug 2002 19:24:06 +0100 +MiME-Version: 1.0 +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 +Importance: Normal +Content-Type: text/html; charset="iso-8859-1" + + + +Digital Publishing Tools - Free Software Alert! + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Publish Like a Professional with Digital Publishing Tools + +
    +Easily Create Professional: + +
      +
    • eBooks
    • +
    • eBrochures
    • +
    • eCatalogs
    • +
    • Resumes
    • +
    • Newsletters
    • +
    • Presentations
    • +
    • Magazines
    • +
    • Photo Albums
    • +
    • Invitations
    • +
    • Much, much more
    • +
    +
    +
    +Save MONEY! - Save Trees +
    +
    + +Save on Printing, Postage and Advertising Costs +
    +
    + +DIGITAL PUBLISHING TOOLS +
    +
    +DOWNLOAD NEW FREE Version NOW!
    +
    +
    +*Limited Time Offer +
    +Choose from these
    +Display Styles:
    + +
      +
    • 3D Page Turn
    • +
    • Slide Show
    • +
    • Sweep/Wipe
    • +
    +
    +Embed hyperlinks and Link to anywhere Online, + +such as your Website, Order Page or Contact Form. +
    +
    +Distribute via Floppy, CD-ROM, E-Mail or Online. +
    +
    + +Take your Marketing to the Next Level! +
    + +For More Info, Samples or a FREE Download, click the appropriate link to the right!   +Server demand is extremely high for this limited time Free Software offer.   +Please try these links periodically if a site seems slow or unreachable. + + + +WEBSITE 1
    +WEBSITE 2
    +WEBSITE 3
    +
    +
    +
    + +If you wish to be removed from our mailing list, please cick the Unsubscribe button + +
    +   + +
    +Copyright © 2002 - Affiliate ID #1269
    +*FREE Version is FULLY FUNCTIONAL with NO EXPIRATION and has a 4 page (2 page spread) limit.
    +
    + +
    + + + diff --git a/Ch3/datasets/spam/spam/00102.fb09d2f978a271fba5a3ffc172003ed9 b/Ch3/datasets/spam/spam/00102.fb09d2f978a271fba5a3ffc172003ed9 new file mode 100644 index 000000000..30497b37e --- /dev/null +++ b/Ch3/datasets/spam/spam/00102.fb09d2f978a271fba5a3ffc172003ed9 @@ -0,0 +1,50 @@ +From approvals@mindspring.com Mon Aug 26 21:57:45 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 7154E43F99 + for ; Mon, 26 Aug 2002 16:57:45 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 21:57:45 +0100 (IST) +Received: from bmbgglawweb.bmbgglaw ([202.164.173.138]) + by webnote.net (8.9.3/8.9.3) with ESMTP id VAA27944 + for ; Mon, 26 Aug 2002 21:51:58 +0100 +From: approvals@mindspring.com +Received: from smtp-gw-4.msn.com (200.173.221.83 [200.173.221.83]) by bmbgglawweb.bmbgglaw with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id RMT9XDW1; Fri, 23 Aug 2002 10:55:23 +0800 +Message-ID: <00003ed74393$00003e20$00002f2f@mx02.earthlink.net> +To: +Subject: MSNBC: Rates Hit 35 year Low 4.75% ...12304 +Date: Thu, 22 Aug 2002 20:49:30 -1800 +MIME-Version: 1.0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + +=================================================================== + +Now you can have HUNDREDS of lenders compete for your loan! + +FACT: Interest Rates are at their lowest point in 40 years! + +You're eligible even with less than perfect credit !! + + * Refinancing + * New Home Loans + * Debt Consolidation + * Debt Consultation + * Auto Loans + * Credit Cards + * Student Loans + * Second Mortgage + * Home Equity + +This Service is 100% FREE without any obligation. + +Visit Our Web Site at: http://marketing-fashion.com/user0201/index.asp?Afft=QM3 + +==================================================================== + +To Unsubscribe: http://marketing-fashion.com/light/watch.asp + diff --git a/Ch3/datasets/spam/spam/00103.2eef38789b4ecce796e7e8dbe718e3d2 b/Ch3/datasets/spam/spam/00103.2eef38789b4ecce796e7e8dbe718e3d2 new file mode 100644 index 000000000..a583b72a9 --- /dev/null +++ b/Ch3/datasets/spam/spam/00103.2eef38789b4ecce796e7e8dbe718e3d2 @@ -0,0 +1,48 @@ +From safety33o@l8.newnamedns.com Mon Aug 26 22:18:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 7611443F99 + for ; Mon, 26 Aug 2002 17:18:12 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 22:18:12 +0100 (IST) +Received: from l8.newnamedns.com ([64.25.38.78]) + by webnote.net (8.9.3/8.9.3) with ESMTP id WAA28030 + for ; Mon, 26 Aug 2002 22:19:45 +0100 +From: safety33o@l8.newnamedns.com +Date: Mon, 26 Aug 2002 14:23:56 -0400 +Message-Id: <200208261823.g7QINuE17724@l8.newnamedns.com> +To: uholldidiy@l8.newnamedns.com +Reply-To: safety33o@l8.newnamedns.com +Subject: ADV: Extended Auto Warranties Here dhzbj + +Protect your financial well-being. +Purchase an Extended Auto Warranty for your Car today. CLICK HERE for a FREE no obligation quote. +http://www.newnamedns.com/warranty/ + +Car troubles always seem to happen at the worst possible time. Protect yourself and your family with a quality Extended Warranty for your car, truck, or SUV, so that a large expense cannot hit you all at once. We cover most vehicles with less than 150,000 miles. + +Buy DIRECT! Our prices are 40-60% LESS! + +We offer fair prices and prompt, toll-free claims service. Get an Extended Warranty on your car today. + +Warranty plan also includes: + + 1) 24-Hour Roadside Assistance. + 2) Rental Benefit. + 3) Trip Interruption Intervention. + 4) Extended Towing Benefit. + +CLICK HERE for a FREE no obligation quote. +http://www.newnamedns.com/warranty/ + + + + + +--------------------------------------- +To easily remove your address from the list, go to: +http://www.newnamedns.com/stopthemailplease/ +Please allow 48-72 hours for removal. + diff --git a/Ch3/datasets/spam/spam/00104.04d165183bb8feab0956362c70591b3d b/Ch3/datasets/spam/spam/00104.04d165183bb8feab0956362c70591b3d new file mode 100644 index 000000000..2d99616c5 --- /dev/null +++ b/Ch3/datasets/spam/spam/00104.04d165183bb8feab0956362c70591b3d @@ -0,0 +1,69 @@ +From suz0123893616943@yahoo.com Mon Aug 26 22:59:18 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 472EB43F99 + for ; Mon, 26 Aug 2002 17:59:18 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 22:59:18 +0100 (IST) +Received: from enjoya2.enjoya.com ([204.216.233.160]) + by webnote.net (8.9.3/8.9.3) with ESMTP id XAA28140 + for ; Mon, 26 Aug 2002 23:00:22 +0100 +Message-Id: <200208262200.XAA28140@webnote.net> +Received: from 65.113.29.188 (SERVER3 [65.113.29.188]) by enjoya2.enjoya.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2650.21) + id RK2JB8PP; Thu, 22 Aug 2002 11:37:45 -0700 +From: "fzjzo" +To: ricardo1@bbvnet.com, bob.a.jones@address.com, + zzzz@netcom17.netcom.com, voloon@hotmail.com +Cc: bob.a.jones@gte.sprint.com, zzzz@netmore.net, + andy.kiwanuka@pentoneurope.com, eighbellinger@yahoo.com, + zzzz@spamassassin.taint.org, bob.ackley@cdsnet.net, eighbluedarts@yahoo.com +Date: Thu, 22 Aug 2002 13:18:16 -0500 +Subject: MULTIPLY YOUR CUSTOMER BASE! +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Precedence-Ref: l2340567 +Content-Transfer-Encoding: 7bit +Content-Type: text/html; charset=us-ascii + +Dear ricardo1 , + + + +
    +COST EFFECTIVE Direct Email Advertising
    +Promote Your Business For As Low As
    +$50 Per +1 Million + Email Addresses

    +MAXIMIZE YOUR MARKETING DOLLARS!

    +Complete and fax this information form to 309-407-7378.
    +A Consultant will contact you to discuss your marketing needs.
    +
    + +
    +NAME:___________________________________________________________________
    +COMPANY:_______________________________________________________________
    +ADDRESS:________________________________________________________________
    +CITY:_____________________________________________________________________
    +STATE:___________________________________________________________________
    +PHONE:___________________________________________________________________
    +E-MAIL:__________________________________________________________________
    +WEBSITE: (Not Required)_______________________________________________________
    +___________________________________________________________________________
    +___________________________________________________________________________
    +*COMMENTS: (Provide details, pricing, etc. on the products and services you wish to market)
    +___________________________________________________________________________
    +___________________________________________________________________________
    +___________________________________________________________________________
    +___________________________________________________________________________
    +
    +

    + + + + [247(^(PO1:KJ)_8J7BJK9^":}H&*TG0BK5NKIYs5] + + diff --git a/Ch3/datasets/spam/spam/00105.00951a21b8464f4eb4e106d6b14c68b6 b/Ch3/datasets/spam/spam/00105.00951a21b8464f4eb4e106d6b14c68b6 new file mode 100644 index 000000000..0a89ecbcf --- /dev/null +++ b/Ch3/datasets/spam/spam/00105.00951a21b8464f4eb4e106d6b14c68b6 @@ -0,0 +1,366 @@ +From vbi@insiq.us Tue Aug 27 00:01:21 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 0BF4843F9B + for ; Mon, 26 Aug 2002 19:01:17 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 00:01:17 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g7QN0FZ13522 for ; Tue, 27 Aug 2002 00:00:15 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Mon, 26 Aug 2002 19:00:58 -0400 +Subject: One Sale - Three Commission Streams +To: +Date: Mon, 26 Aug 2002 19:00:58 -0400 +From: "IQ - LSI" +Message-Id: <25fae01c24d54$70df9e10$6b01a8c0@insuranceiq.com> +MIME-Version: 1.0 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Thread-Index: AcJNOqTffrAnoQpfR+qn33c3TxkEgQ== +X-Mailer: Microsoft CDO for Windows 2000 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 26 Aug 2002 23:00:58.0718 (UTC) FILETIME=[70F03FE0:01C24D54] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_0007_01C24D19.1DD0A790" + +This is a multi-part message in MIME format. + +------=_NextPart_000_0007_01C24D19.1DD0A790 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: quoted-printable + + An Additional Income Stream + from your current book of business! + =09 + =09 + Agent Commission: +$92,000=20 + Client: + 87-year-old male + 82-Year-old female + + Result: + $2,300,000 second to die + policy, minimal cash value. Policy was no longer + required. Insured utilized a + life settlement and received + $300,000. Agent Commission: +$30,000=20 + Client: + 70-year-old male with health complications + + Result: + $1,000,000 policy with small + cash value. Insured utilized + a life settlement and + received $300,000. Agent Commission: +$90,000=20 + + Client: + 89-year-old female + + Result: + $2,000,000 policy with an + annual premium of $110,000. + Policy expires at age 95. + Insured utilized a life + settlement and received + $325,000.=20 + =09 +=20 + +Multiple opportunities to earn commissions +from one strategy!=20 + + If any of your elderly client=92s health, personal, or financial +needs or circumstances have changed since the original life policy was +issued you have the opportunity to create an additional income stream +with Life Settlements: + + ? Earn a referral fee from a life settlement transaction. +? Trailer commission on the policy for the agent of record. +? Earn investment or annuity commissions from the capital created by=20 + the life settlement transaction. +? Earn a commission on new life insurance products that better suit=20 + your client=92s current needs. +? Earn a commission on the conversion if the policy being considered + is a term product. +?Earn additional commissions for referring other agents or agencies + to The Life Settlement Alliance.=20 +=20 +Call today for more information! + 800-871-9440=97 or =97=20 + +Please fill out the form below for more information =20 +Name: =09 +E-mail: =20 +Phone: =20 +City: State: =20 + =09 +=20 +The Life Settlement Alliance =20 +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.Insuranceiq.com/optout +=20 + +Legal Notice =20 + +------=_NextPart_000_0007_01C24D19.1DD0A790 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +One Sale - Three Commission Streams + + + + + + =20 + + + + + + =20 + + +
    + 3D"An
    +
    +
    + + =20 + + + + + + =20 + + + + + + =20 + + + + + +
     
      + =20 +
    + Agent Commission:
    + $92,000
    =20 +
    +  Client:
    +  87-year-old male
    +  82-Year-old female
    +
    +  Result:
    +  $2,300,000 second to die
    +  policy, minimal cash value.  Policy was no longer
    +  required. Insured utilized a
    +  life settlement and received
    +  $300,000. +
    +
    + +
    + Agent Commission:
    + $30,000
    +
    +  Client:
    +  70-year-old male with health complications
    +
    +  Result:
    +  $1,000,000 policy with small
    +  cash value. Insured utilized
    +  a life settlement and
    +  received $300,000. +
    +
    =20 + +
    + Agent Commission:
    + $90,000
    +

    +  Client:
    +  89-year-old female
    +
    +  Result:
    +  $2,000,000 policy with an
    +  annual premium of $110,000.
    +  Policy expires at age 95.
    +  Insured utilized a life
    +  settlement and received
    +  $325,000. +
    +
     
    + + =20 + + + =20 + + + =20 + + +

    =20 +
    + Multiple opportunities to earn = +commissions
    + from one strategy!
    =20 +
    + +
    If any of your elderly client's health,=20 + personal, or financial needs or circumstances have changed = +since=20 + the original life policy was issued you have the = +opportunity to=20 + create an additional income stream with Life = +Settlements:
    + + • Earn a referral fee from a life settlement = +transaction.
    + • Trailer commission on the policy for the agent of = +record.
    + • Earn investment or annuity commissions from the = +capital created by
    +    the life settlement transaction.
    + • Earn a commission on new life insurance products that = +better suit
    +    your client's current needs.
    + • Earn a commission on the conversion if the policy = +being considered
    +    is a term product.
    + •Earn additional commissions for referring other agents = +or agencies
    +    to The Life Settlement = +Alliance.
    =20 +
    +
    =20 + Call today for more information!
    + =20 + — or —

    =20 + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please fill out the form below for more = +information
    Name:
    E-mail:
    Phone:
    City: State:
     =20 + =20 + =20 + =20 +
    +
    +
    3D"The
    +
    =20 +

    We = +don't want anyone=20 + to receive our mailings who does not wish to. This is = +professional communication=20 + sent to insurance professionals. To be removed from this mailing = +list,=20 + DO NOT REPLY to this message. Instead, go here: =20 + http://www.Insuranceiq.com/optout

    +
    +
    + Legal Notice=20 +
    +
    =20 + + + +------=_NextPart_000_0007_01C24D19.1DD0A790-- + diff --git a/Ch3/datasets/spam/spam/00106.f20a99365b7016f8e9dcd8620b472e74 b/Ch3/datasets/spam/spam/00106.f20a99365b7016f8e9dcd8620b472e74 new file mode 100644 index 000000000..1379722ce --- /dev/null +++ b/Ch3/datasets/spam/spam/00106.f20a99365b7016f8e9dcd8620b472e74 @@ -0,0 +1,132 @@ +From 2940catv77@alltel.net Tue Aug 27 01:34:08 2002 +Return-Path: <2940catv77@alltel.net> +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 0E00D43F99 + for ; Mon, 26 Aug 2002 20:34:08 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 01:34:08 +0100 (IST) +Received: from TRDNET1.treadstone (adsl-67-118-80-82.dsl.lsan03.pacbell.net [67.118.80.82]) + by webnote.net (8.9.3/8.9.3) with ESMTP id BAA28588 + for ; Tue, 27 Aug 2002 01:27:27 +0100 +From: 2940catv77@alltel.net +Received: from mx.boston.juno.com ([64.109.69.2]) by TRDNET1.treadstone with Microsoft SMTPSVC(5.0.2195.4905); + Mon, 26 Aug 2002 14:30:35 -0700 +Message-ID: <00007e610327$00000908$00007049@mx02.alltel.net> +To: +Subject: Plans for cable +Date: Mon, 26 Aug 2002 16:26:01 -1700 +MIME-Version: 1.0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit +X-OriginalArrivalTime: 26 Aug 2002 21:30:35.0899 (UTC) FILETIME=[D0AFBCB0:01C24D47] + +Legal TV Descarmbler + +Want to watch Sporting Events?--Movies?--Pay-Per-View?? +You can assemble from electronic store parts for about $12.00. +We Send You: +E-Z To follow Assembly Instructions +E-Z To read Original Drawings. +Electronic parts lists. + +PLUS SOMETHING NEW YOU MUST HAVE! +Something you can't do without. +THE UP-TO-DATE REPORT: USING A DESCRAMBLER LEGALLY +Warning: You should not build a TV Descrambler without +reading this report first. + +Frequently Asked Questions--CABLE TV DESCRAMBLER +Q: Will the descrambler work on Fiber, TCI, Jarrod +A: The answer is YES. +Q: Do I need a converter box? +A: This plan works with or without a converter box. +Specific instructions are included in the plans for each! +Q: Can the cable company detect that I have the descrambler? +A: No, the signal descrambles right at the box and does +not move back through the line! +Q: Do I have to alter my existing cable system, +television or VCR? +A: The answer is no! +Q: Does this work with my remote control? +A: The answer is yes. The descrambler is +manually controlled--but very easy to use! +Q: Can you email me the plans? +A: No the program comes with an easy to follow picture guide. +Q: Does this work everywhere across the country? +A: Yes, every where in the USA plus England, +Brazil, Canada and other countries! +Q: Is this deal guaranteed? +A: Yes, if you are unhappy for any reason we will refund your money. + +ORDERING INFORMATION + +ACT WITHIN THE NEXT 7 DAYS AND RECEIVE TWO FREE BONUSES!! + +THE CABLE MANUAL! +This manual contains hard to find information your +cable company does not want you to know. + +Also receive The RADAR JAMMER PLANS! Never get another speeding +ticket. Build you own radar jammer, this unit will jam police radar +so they can't get a reading on your vechicle. + +Radar jammers are legal in 48 states. It is simple to build. + +THE FREE BONUSES ALONE ARE WORTH ACTING NOW! +THE CABLE DESCRAMBLER KIT COMES WITH A THIRTY DAY +MONEY BACK GUARANTEE! IF YOUR NOT COMPLETELY SATISFIED, +SEND THE CABLE DESCRAMBLER KIT BACK AND YOU KEEP +THE BONUSES FOR FREE. YOU HAVE NOTHING TO LOSE!! + +ACT NOW AND SAVE!! + +SIMPLY SEND $14.95, THAT'S ONLY $14.95 BUT YOU MUST +ORDER WITHIN 7 DAYS FOR THIS SPECIAL PRICE!!! + + +SEND $14.95 Add $3.05 shipping/handling TOTAL $18.00 + +CHECK OR, MONEY ORDER, USD ONLY Foreign orders +must send payment in USD, Drawn on a USA Bank ONLY... +*******************NO EXCEPTIONS********************* + + $18.00 + + +NET OPS + +PO BOX 4731 + +Omaha, NE 68104 + + + +NAME_______________________________________________ + +ADDRESS____________________________________________ + +CITY/STATE/ZIP______________________________________ + +E-MAIL ______________________________________________ + + + + + +THIS INFORMATION IS SOLD FOR EDUCATIONAL PURPOSES ONLY. + + + + + + + +If you would like to be removed alloff1@btamail.net.cn + + + + + diff --git a/Ch3/datasets/spam/spam/00107.e6cd2d9f49514710dc85db0fef5b8726 b/Ch3/datasets/spam/spam/00107.e6cd2d9f49514710dc85db0fef5b8726 new file mode 100644 index 000000000..0efbb4a7a --- /dev/null +++ b/Ch3/datasets/spam/spam/00107.e6cd2d9f49514710dc85db0fef5b8726 @@ -0,0 +1,39 @@ +From thisisagreatfreepornmovie@framesetup.com Tue Aug 27 01:34:09 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 135B443F9B + for ; Mon, 26 Aug 2002 20:34:09 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 01:34:09 +0100 (IST) +Received: from framesetup.com (1Cust182.tnt27.det3.da.uu.net [67.217.40.182]) + by webnote.net (8.9.3/8.9.3) with SMTP id BAA28619 + for ; Tue, 27 Aug 2002 01:31:58 +0100 +Message-Id: <200208270031.BAA28619@webnote.net> +From: "Free xxx movie" +To: +Subject: 60 minute free porn movie +Sender: "Free xxx movie" +Mime-Version: 1.0 +Date: Mon, 26 Aug 2002 22:18:15 -0400 +Content-Type: text/html; charset="ISO-8859-1" +Content-Transfer-Encoding: 8bit + + + +Untitled Document + + + + +

    +

    +

     

    +

    Click + Here to enlarge your penis 3-4 inches naturally

    +

     

    +

    Click Here to be removed

    + + + diff --git a/Ch3/datasets/spam/spam/00108.ce25a55c6b4cc9bcd32ed090ee20785a b/Ch3/datasets/spam/spam/00108.ce25a55c6b4cc9bcd32ed090ee20785a new file mode 100644 index 000000000..883dbee82 --- /dev/null +++ b/Ch3/datasets/spam/spam/00108.ce25a55c6b4cc9bcd32ed090ee20785a @@ -0,0 +1,32 @@ +From safety33o@l7.newnamedns.com Tue Aug 27 02:14:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id B7E6E43F99 + for ; Mon, 26 Aug 2002 21:14:50 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 02:14:50 +0100 (IST) +Received: from l7.newnamedns.com ([64.25.38.77]) + by webnote.net (8.9.3/8.9.3) with ESMTP id CAA28728 + for ; Tue, 27 Aug 2002 02:14:43 +0100 +From: safety33o@l7.newnamedns.com +Date: Mon, 26 Aug 2002 18:20:53 -0400 +Message-Id: <200208262220.g7QMKqE17666@l7.newnamedns.com> +To: gluzitwseq@l7.newnamedns.com +Reply-To: safety33o@l7.newnamedns.com +Subject: ADV: Lowest Rates Available on Term Life - Free Quote ihsxq + +Lowest rates available for term life insurance! Take a moment and fill out our online form to see the low rate you qualify for. Save up to 70% from regular rates! Smokers accepted! http://www.newnamedns.com/termlife/ + +Representing quality nationwide carriers. Act now! + + + + + +--------------------------------------- +To easily remove your address from the list, go to: +http://www.newnamedns.com/stopthemailplease/ +Please allow 48-72 hours for removal. + diff --git a/Ch3/datasets/spam/spam/00109.eda1664dd3b3c31b67e5cd04553b6546 b/Ch3/datasets/spam/spam/00109.eda1664dd3b3c31b67e5cd04553b6546 new file mode 100644 index 000000000..4c480eaae --- /dev/null +++ b/Ch3/datasets/spam/spam/00109.eda1664dd3b3c31b67e5cd04553b6546 @@ -0,0 +1,122 @@ +From vbj101521@caramail.com Tue Aug 27 02:35:21 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 68E5F43F9B + for ; Mon, 26 Aug 2002 21:35:19 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 02:35:19 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7R1XoZ20943 for + ; Tue, 27 Aug 2002 02:33:50 +0100 +Received: from caramail.com ([211.185.156.157]) by webnote.net + (8.9.3/8.9.3) with SMTP id CAA28776 for ; + Tue, 27 Aug 2002 02:33:57 +0100 +Date: Tue, 27 Aug 2002 02:33:57 +0100 +From: vbj101521@caramail.com +Reply-To: +Message-Id: <000c52d43aad$4242a0b5$4ad47ca8@fyiink> +To: +Subject: - Custom Websites for $399 Complete! (1709D@5) +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2462.0000 +Importance: Normal +Content-Type: text/html; charset="iso-8859-1" + + +Beautiful,Custom Websites for $399 Complete! + + + +
    + + + + + +
    +

    Beautiful, 100% Custom + Websites, $399 Complete!

    +
    + + + +
    +
    + + + +
    + + + + +
    +

    +

    Get a beautiful, 100% Custom Web Site (or + yours redesignedfor only + $389!*

    We have references coast to + coast 
    and will give you plenty of sites to + view!

    +

    Includes up to + 7 pages (you can add more), java rollover buttons, feedback + forms, more. It will be constructed to your taste and + specifications. We do not use templates,  our sites + are completely custom.    *Must host with us @ + $19.95/mo (100 Megs, 20 Email accounts, Control Panel, Front + Page, Graphical Statistics, + more).

     
    + For sites to + view, complete below or call our message center at + 321-726-2209 (24 hours). Your call will be returned + promptly.

    NOTE:   If you are using a web + based email program (such as Yahoo, Hotmail, etc.) the form + below will not work.  Instead of using the + form,  CLICK + HERE .

    +
    +

        Name: Phone + w/AC*:State:
    Type Project: New Site:Redesign Flash Intro/banner   Current + site?:
    Comments:
      

    +
    +

    If you do not wish to + receive our messages,
    CLICK + HERE   (Please enter + ALL email addresses (in the body of the message) you wish to have + eliminated from future + mailings.
    + +[3121jDvN9-@9] + + diff --git a/Ch3/datasets/spam/spam/00110.f3c4ebe14b439420b53212332326181f b/Ch3/datasets/spam/spam/00110.f3c4ebe14b439420b53212332326181f new file mode 100644 index 000000000..6fc5b65fe --- /dev/null +++ b/Ch3/datasets/spam/spam/00110.f3c4ebe14b439420b53212332326181f @@ -0,0 +1,63 @@ +From lkqyvstyles@site-personals.com Tue Aug 27 03:56:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 4451C43F99 + for ; Mon, 26 Aug 2002 22:56:47 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 03:56:47 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id DAA29086 + for ; Tue, 27 Aug 2002 03:57:36 +0100 +Received: from 218.5.132.246 (unknown [211.160.14.157]) + by smtp.easydns.com (Postfix) with SMTP id 7714C2C995 + for ; Mon, 26 Aug 2002 22:57:31 -0400 (EDT) +Received: from 55.92.178.196 ([55.92.178.196]) by smtp-server1.cfl.rr.com with QMQP; Aug, 26 2002 10:41:10 PM +1100 +Received: from [46.224.35.15] by rly-xl04.mx.aol.com with smtp; Aug, 26 2002 9:33:27 PM +1200 +Received: from unknown (26.113.85.29) by smtp4.cyberec.com with esmtp; Aug, 26 2002 8:57:10 PM -0100 +Received: from [183.62.39.149] by m10.grp.snv.yahoo.com with QMQP; Aug, 26 2002 7:52:32 PM +0600 +From: Veronica Styles +To: zzzz@spamassassin.taint.org +Cc: +Subject: link to my webcam you wanted +Sender: Veronica Styles +Mime-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Mon, 26 Aug 2002 22:57:34 -0400 +X-Mailer: eGroups Message Poster +X-Priority: 1 +Message-Id: <20020827025731.7714C2C995@smtp.easydns.com> + +Wanna see sexually curious teens playing with each other? + +http://www.site-personals.com <-- click here=) + +me and my horny girlfriends are waiting for you... we are probably eating each other out on webcam in our dormitory as ur reading this! (inbetween classes of course *wink*) + +see you soon baby, +-Veronica + + + + + + + + + + + + + + + + + + + + + + +mcmfkhcpedgetqj + diff --git a/Ch3/datasets/spam/spam/00111.ae6aba48f8aa83849be067076eea8ce5 b/Ch3/datasets/spam/spam/00111.ae6aba48f8aa83849be067076eea8ce5 new file mode 100644 index 000000000..f7d286f5e --- /dev/null +++ b/Ch3/datasets/spam/spam/00111.ae6aba48f8aa83849be067076eea8ce5 @@ -0,0 +1,40 @@ +From safety33o@l4.newnamedns.com Tue Aug 27 04:37:34 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id E452143F99 + for ; Mon, 26 Aug 2002 23:37:33 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 04:37:33 +0100 (IST) +Received: from l4.newnamedns.com ([64.25.38.74]) + by webnote.net (8.9.3/8.9.3) with ESMTP id EAA29349 + for ; Tue, 27 Aug 2002 04:32:13 +0100 +From: safety33o@l4.newnamedns.com +Date: Mon, 26 Aug 2002 20:36:20 -0400 +Message-Id: <200208270036.g7R0aJp24458@l4.newnamedns.com> +To: lbfbdhvunx@l4.newnamedns.com +Reply-To: safety33o@l4.newnamedns.com +Subject: ADV: Professional Teeth Whitening At Home! ovcnd + +Whiter teeth and a brighter smile are just a click away! +http://www.newnamedns.com/dental/ + +Have you considered professional teeth whitening? If so, you know it usually costs between $300 and $500 from your local dentist! + +Visit our site to learn how to professionally whiten your teeth, using the exact same whitening system your dentist uses, at a fraction of the cost! + +We know our product is the best on the market, and we back it with a 30 day money back guarantee! + +Click here to find out more! +http://www.newnamedns.com/dental/ + + + + + +--------------------------------------- +To easily remove your address from the list, go to: +http://www.newnamedns.com/stopthemailplease/ +Please allow 48-72 hours for removal. + diff --git a/Ch3/datasets/spam/spam/00112.be81f2f6f7940a9403c9809b4a9e243a b/Ch3/datasets/spam/spam/00112.be81f2f6f7940a9403c9809b4a9e243a new file mode 100644 index 000000000..1bbc4ac7a --- /dev/null +++ b/Ch3/datasets/spam/spam/00112.be81f2f6f7940a9403c9809b4a9e243a @@ -0,0 +1,73 @@ +From patricehari@yahoo.ca Tue Aug 27 05:18:23 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id DE0ED43F9B + for ; Tue, 27 Aug 2002 00:18:22 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 05:18:22 +0100 (IST) +Received: from yahoo.ca ([203.161.243.71]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7R4GEZ25436 for ; + Tue, 27 Aug 2002 05:16:14 +0100 +Reply-To: +Message-Id: <005e10c17e1c$7155d7a4$2ea13ce8@sevuem> +From: +To: Vestedge.Update@dogma.slashnull.org +Subject: Best news yet +Date: Tue, 27 Aug 2002 05:19:21 -0100 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: eGroups Message Poster +Importance: Normal +Content-Transfer-Encoding: 8bit + +INVESTMENT SCHOLARS CLUB- bringing you the latest from the financial epicenter. + +Research Alert - Undervalued +August 26, 2002 +XrayMedia +(OTCBB: XRMD) Alert Rating = 8 + +Congratulations to our subscribers who moved in fast on our last report! + +Pick #1 - Internet incubator giant CMGI has paid off very well, up over 150% on major volume and great news. + +Pick #2 - ENBC Began its' heavy move up over 200% hitting a high of over 300%... + +Our Latest Discovery: XRMD - Several investment reporters featured XrayMedia during fiscal 2001/02. At the time, we felt that the advertising industry created a huge opportunity for the company's direct sourcing technology solutions, and so far the company has delivered. Although the company has raised just $2 million in the two years it has been developing its’ technology, it has increased revenues sources dramatically by opening a financial services division expanding the Live Media Marketplace expected revenues to $3-5 mm during fiscal 2003, driving the line in 2004 to $15- 25 mm. This remarkable growth becomes more understandable when one views the savings that its direct sourcing model generates for advertisers and retailers. The company saves advertising buyers up to 70% in costs dramatically increasing wholesale pricing effect, by saving time & efforts, cutting telephone and faxing bills, while providing free mass sourcing opportunities for negotiating advertising buying and selling opportunities using a secure state of the art real time negotiating technology over the Internet, we’ve never seen anything like it! + +How does the company do this? + +XrayMedia (OTCBB: XRMD) The Company founded XrayMedia in March 2000 to create a "mass source to advertising sector " live negotiating technology and advertising purchase financing accents the company’s’ strengths, serving both large and small United States and International customers with advertising opportunities delivered directly from the media and the general public. *** With the use of proprietary software, it is providing sophistication to this industry which greatly expedites orders and finds opportunities based on the users’ criteria which results in a savings to the advertising buyers and as well as the ad sellers which it serves. + +Their "source to business model", eliminates two levels of hindrance (sourcing and limited opportunities) and provides its customers with mass advertising choices and live negotiating that is designed give a substantially low cost base for finding the right advertising opportunity for all business with no cost. + +While investors have thrown money recklessly at money-losing technology companies, here is a company that will increase revenues from $1 to $25 million in three years, and grow profitability substantially with little funding. XrayMedia is among the best performing sectors since September 11th, and we feel that XrayMedia is likely to break through its 52-week high of $00.19 soon. + + *** Listed on the OTCBB and trading with an extremely low market valuation under 10 mm. + +*** It has opened accounts with over hundreds of buyers and sellers including some of the largest media buyers in the world, major retailers and smaller retailers. + +*** Attracting interest of major investment bankers and analysts, also a possible acquisition target at some point by major retailers. + +*** Received largest order of advertising financing over $500k with more contracts accumulating. + +*** Revenue growth is expected to be dramatic $1mm to $5mm. + +*** The company is expected to report a profitable quarter, to grow revenues and earnings "substantially" when it begins its 2003 fiscal year in January. + +Shares Outstanding: 83 mm +Float: 5 mm +Recent Price: $00.08 +Year Low/High: $00.02 - $00.19 +18-Month Target Price: $5.00+ + +Company Contact: Ray Dabney +Toll free: 1(888) 777-0658 + +(h3)6926Zjpl7 + + diff --git a/Ch3/datasets/spam/spam/00113.eebc11982ccc4730fb8759f94400ce19 b/Ch3/datasets/spam/spam/00113.eebc11982ccc4730fb8759f94400ce19 new file mode 100644 index 000000000..b5dbbe784 --- /dev/null +++ b/Ch3/datasets/spam/spam/00113.eebc11982ccc4730fb8759f94400ce19 @@ -0,0 +1,51 @@ +From tammy490t@yahoo.com Tue Aug 27 05:38:41 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 4E04943F99 + for ; Tue, 27 Aug 2002 00:38:41 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 05:38:41 +0100 (IST) +Received: from wwwserver.cambridge.es ([213.201.61.24]) + by webnote.net (8.9.3/8.9.3) with ESMTP id FAA29533 + for ; Tue, 27 Aug 2002 05:36:05 +0100 +From: tammy490t@yahoo.com +Received: from mx2.mail.yahoo.com (ftp.kibaek-skole.dk [212.237.159.194]) + by wwwserver.cambridge.es (8.11.6/8.8.7) with ESMTP id g7R4bu527391; + Tue, 27 Aug 2002 06:37:56 +0200 +Message-ID: <0000195e74e5$00003fa6$000038ae@mx2.mail.yahoo.com> +To: , , + , , , + , +Cc: , , + , , + , , + , +Subject: Free Merchant Account Information XAXFT +Date: Tue, 27 Aug 2002 00:35:05 -1600 +MIME-Version: 1.0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + +Request A Free No Obligation Consultation! +Accept Credit Cards Today! +No Set Up Fees +No Application Fees +All Credit Types Accepted +Retail Rates as Low as 1.60% +Mail Order Rates As Low as 2.30% +Set Up Your Merchant Account within 48 Hours +NO CANCELLATION FEES +No Money Down +No Reprogramming Fees +We Will Beat Anybody’s Deal By 15% + +We make it easy and affordable to start accepting Credit Cards today. +99% of our applicants are approved! + +http://64.251.23.141/marketing/merchantnet/ + +to be removed : http://64.251.23.141/marketing/removeme.html + diff --git a/Ch3/datasets/spam/spam/00114.e337195587d1dbb42e8a2b693e9fc938 b/Ch3/datasets/spam/spam/00114.e337195587d1dbb42e8a2b693e9fc938 new file mode 100644 index 000000000..5c3eba0b1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00114.e337195587d1dbb42e8a2b693e9fc938 @@ -0,0 +1,86 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Tue Aug 27 05:48:54 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id C6B6C43F99 + for ; Tue, 27 Aug 2002 00:48:53 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 05:48:53 +0100 (IST) +Received: from TIPSMTP1.ADMANMAIL.COM (TIPSMTP1.ADMANMAIL.COM [209.216.124.212]) + by webnote.net (8.9.3/8.9.3) with ESMTP id FAA29576 + for ; Tue, 27 Aug 2002 05:47:57 +0100 +Message-Id: <200208270447.FAA29576@webnote.net> +Received: from tiputil1 (tiputil1.corp.tiprelease.com) by TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id <0.00000094@TIPSMTP1.ADMANMAIL.COM>; Mon, 26 Aug 2002 23:44:56 -0500 +Date: Mon, 26 Aug 2002 22:38:04 -0500 +From: Police Seized Goods +To: JM@NETNOTEINC.COM +Subject: FBI & IRS seized goods at 99% off! Police Auctions! +X-Info: 134085 +X-Info2: SGO +Mime-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + + +PoliceAuctions.com + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    PoliceAuctions.com
    PoliceAuctions.com
    PoliceAuctions.com +

    + Awesome deals on seized and unclaimed
    + property the government auctions to the public. Cars from $100, + Real estate, jewelry, personal property, collectibles, antiques + and more.

    +

    + CLICK HERE

    +
    +
    +T +
    + +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
    + diff --git a/Ch3/datasets/spam/spam/00115.c97af50ef7ccd816f95bbdc6f4d226b2 b/Ch3/datasets/spam/spam/00115.c97af50ef7ccd816f95bbdc6f4d226b2 new file mode 100644 index 000000000..627afbde2 --- /dev/null +++ b/Ch3/datasets/spam/spam/00115.c97af50ef7ccd816f95bbdc6f4d226b2 @@ -0,0 +1,54 @@ +From jani@topmail.dk Tue Aug 27 08:32:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 4434943F99 + for ; Tue, 27 Aug 2002 03:32:58 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 08:32:58 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id IAA30199; + Tue, 27 Aug 2002 08:30:19 +0100 +From: jani@topmail.dk +Received: from topmail.dk (saborpro.sabormex.com.mx [200.36.54.84]) + by smtp.easydns.com (Postfix) with SMTP + id 6F8362DAE5; Tue, 27 Aug 2002 03:30:13 -0400 (EDT) +Received: from m10.grp.snv.yahoo.com ([43.250.30.9]) + by smtp4.cyberec.com with QMQP; Tue, 27 Aug 2002 19:33:07 -1000 +Received: from web13708.mail.yahoo.com ([88.238.107.15]) + by mail.gmx.net with NNFMP; Mon, 26 Aug 2002 21:30:49 +1200 +Received: from unknown (153.245.190.5) + by smtp-server1.cfl.rr.com with smtp; 27 Aug 2002 04:28:32 +0500 +Reply-To: +Message-ID: <008e45b47bde$5627d8c0$0ee03ad6@vjsxnm> +To: alan3@hotmail.com +Subject: HELP WANTED. WORK FROM HOME REPS. +MiME-Version: 1.0 +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: eGroups Message Poster +Importance: Normal +Date: Tue, 27 Aug 2002 03:30:13 -0400 (EDT) +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00C3_65E56B8D.B3612A36" + +------=_NextPart_000_00C3_65E56B8D.B3612A36 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + +SGVscCB3YW50ZWQuICBXZSBhcmUgYSAxNCB5ZWFyIG9sZCBmb3J0dW5lIDUw +MCBjb21wYW55LCB0aGF0IGlzDQpncm93aW5nIGF0IGEgdHJlbWVuZG91cyBy +YXRlLiAgV2UgYXJlIGxvb2tpbmcgZm9yIGluZGl2aWR1YWxzIHdobw0Kd2Fu +dCB0byB3b3JrIGZyb20gaG9tZS4NCg0KVGhpcyBpcyBhbiBvcHBvcnR1bml0 +eSB0byBtYWtlIGFuIGV4Y2VsbGVudCBpbmNvbWUuICBObyBleHBlcmllbmNl +DQppcyByZXF1aXJlZC4gIFdlIHdpbGwgdHJhaW4geW91Lg0KDQpTbyBpZiB5 +b3UgYXJlIGxvb2tpbmcgdG8gYmUgZW1wbG95ZWQgZnJvbSBob21lIHdpdGgg +YSBjYXJlZXIgdGhhdCBoYXMNCnZhc3Qgb3Bwb3J0dW5pdGllcywgdGhlbiBn +bzoNCg0KaHR0cDovL3d3dy5iYXNldGVsLmNvbToyNzAwMC93ZWFsdGhub3cN +Cg0KV2UgYXJlIGxvb2tpbmcgZm9yIGVuZXJnZXRpYyBhbmQgc2VsZiBtb3Rp +dmF0ZWQgcGVvcGxlLiAgSWYgdGhhdCBpcyB5b3UNCnRoYW4gY2xpY2sgb24g +dGhlIGxpbmsgYW5kIGZpbGwgb3V0IHRoZSBmb3JtLCBhbmQgb25lIG9mIG91 +cg0KZW1wbG95ZW1lbnQgc3BlY2lhbGlzdCB3aWxsIGNvbnRhY3QgeW91Lg0K +DQpUbyBiZSByZW1vdmVkIGZyb20gb3VyIGxpbmsgc2ltcGxlIGdvIHRvOg0K +DQpodHRwOi8vd3d3LmJhc2V0ZWwuY29tL3JlbW92ZS5odG1sDQoNCg== + diff --git a/Ch3/datasets/spam/spam/00116.29e39a0064e2714681726ac28ff3fdef b/Ch3/datasets/spam/spam/00116.29e39a0064e2714681726ac28ff3fdef new file mode 100644 index 000000000..ef3b810dc --- /dev/null +++ b/Ch3/datasets/spam/spam/00116.29e39a0064e2714681726ac28ff3fdef @@ -0,0 +1,55 @@ +From sitescooper-talk-admin@lists.sourceforge.net Mon Aug 26 20:15:19 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 92C1843F9B + for ; Mon, 26 Aug 2002 15:15:19 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 20:15:19 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7QJ9ZZ05743 for ; Mon, 26 Aug 2002 20:09:35 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17jPEm-0001Sc-00; Mon, + 26 Aug 2002 12:09:20 -0700 +Received: from [65.198.220.134] (helo=ejhvvet) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17jPDw-0006Aq-00 for ; + Mon, 26 Aug 2002 12:08:29 -0700 +From: Senem Oncul +To: +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +Content-Type: text/plain +Message-Id: +Subject: [scoop] Haberdar olun +Sender: sitescooper-talk-admin@example.sourceforge.net +Errors-To: sitescooper-talk-admin@example.sourceforge.net +X-Beenthere: sitescooper-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion of sitescooper - see http://sitescooper.org/ + +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 26 Aug 2002 20:05:24 -0400 +Date: Mon, 26 Aug 2002 20:05:24 -0400 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from base64 to 8bit by dogma.slashnull.org id + g7QJ9ZZ05743 + +HABERDAR.COM - HABER VE MEDYA PORTALI +Artýk tüm haberleri sadece tek siteden takip edebileceksiniz. Haberdar.com açýldý! +Haber baþlýklarý, spor haberleri, teknoloji haberleri, kültür ve sanat haberleri, internet haberleri, bilim ve uzay, +sinema, saðlýk... +Aradýðýnýz içerik http://www.haberdar.com adresinde +Sadece týklayýn ve haberdar olun + +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ†+,ù޵隊X¬²š'²ŠÞu¼ÿ9 Íý8«yÚ¶­±©ž¢W\zYi†‰Þüg­jw°…êÞ~ŠÅDAÿ†Ûi³ÿÿà ÿŠza¢xœýÊ&þ¿Ú²Ÿë­ÇŸ¢¸×úÞ}Ê{³}ýÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJ+^±Ê(¥êÿµ©d™¨¥Šx%ŠËRŠ×¬rŠ)z¿íjYÿ–+-³û(º·~Šà{ùÞ¶m¦ÏÿþX¬¶Ïì¢êÜyú+ïçzßåŠËlþX¬¶)ߣû"µë¢Š^¯ûZ + diff --git a/Ch3/datasets/spam/spam/00117.b3ceb6525a1dc935463f3e3080110039 b/Ch3/datasets/spam/spam/00117.b3ceb6525a1dc935463f3e3080110039 new file mode 100644 index 000000000..163114b9d --- /dev/null +++ b/Ch3/datasets/spam/spam/00117.b3ceb6525a1dc935463f3e3080110039 @@ -0,0 +1,70 @@ +From ilug-admin@linux.ie Mon Aug 26 19:24:08 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id E4D0744156 + for ; Mon, 26 Aug 2002 14:24:05 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 26 Aug 2002 19:24:05 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7QIJgZ04280 for + ; Mon, 26 Aug 2002 19:19:42 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id TAA12356; Mon, 26 Aug 2002 19:17:57 +0100 +Received: from server759.instantinternetempires.net ([216.10.23.30]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id TAA12319 for ; + Mon, 26 Aug 2002 19:17:47 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host [216.10.23.30] claimed to + be server759.instantinternetempires.net +Received: from nobody by server759.instantinternetempires.net with local + (Exim 3.35 #1) id 17jOQT-00034Z-00 for ilug@linux.ie; Mon, 26 Aug 2002 + 14:17:21 -0400 +To: ilug@linux.ie +From: rowespirit@yahoo.com +Content-Type: text/plain; charset=us-ascii +X-Header: Reply-To: rowespirit@yahoo.com +X-Loop-Prevention: 1 +Message-Id: +Date: Mon, 26 Aug 2002 14:17:21 -0400 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - server759.instantinternetempires.net +X-Antiabuse: Original Domain - linux.ie +X-Antiabuse: Originator/Caller UID/GID - [99 99] / [99 99] +X-Antiabuse: Sender Address Domain - server759.instantinternetempires.net +Subject: [ILUG] BANK ERROR IN YOUR FAVOR +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +SUBSTANTIAL MONTHLY INCOME MAKERS VOUCHER +Income Transfer Systems/Distribution Center +************************************************************ +Pending Income Amount: up to $21,000.00 + +Action:http://www.hotresponders.com/cgi-bin/varpro/vartrack.cgi?t=wendy7172:1 +************************************************************ +Good News! You have made the Substancial Income Makers list. This means you get the entire system and get the opportunity to make up to $21,000.00 a month. + +To receive this system, follow this link! + http://www.hotresponders.com/cgi-bin/varpro/vartrack.cgi?t=wendy7172:1 + +Get ready, you will immediately receive all the information needed to make a substantial monthly income. +What are you waiting for!! http://www.hotresponders.com/cgi-bin/varpro/vartrack.cgi?t=wendy7172:1 + +You are receiving this email due to having requested info on internet businesses. If you are not longer looking for one, please click the remove link below. +Click on the link below to remove yourself +http://www.hotresponders.com/cgi-bin/varpro/r.cgi?id=wendy7172&a=ilug@linux.ie + +AOL Users + Remove Me + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00118.b31615605a37b4878bd1de4f829c89cb b/Ch3/datasets/spam/spam/00118.b31615605a37b4878bd1de4f829c89cb new file mode 100644 index 000000000..4ec79fcee --- /dev/null +++ b/Ch3/datasets/spam/spam/00118.b31615605a37b4878bd1de4f829c89cb @@ -0,0 +1,58 @@ +From viagra_medication1182@martyrs.com.au Tue Aug 27 11:17:18 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 5792E43F99 + for ; Tue, 27 Aug 2002 06:17:18 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 11:17:18 +0100 (IST) +Received: from mail.wellmode.com.tw (61-222-189-226.HINET-IP.hinet.net [61.222.189.226]) + by webnote.net (8.9.3/8.9.3) with ESMTP id LAA30842 + for ; Tue, 27 Aug 2002 11:18:55 +0100 +From: viagra_medication1182@martyrs.com.au +Received: from movie.netnest.com.cn (195.62.199.5 [195.62.199.5]) by mail.wellmode.com.tw with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2650.21) + id R4QN4SGP; Mon, 26 Aug 2002 12:20:54 +0800 +Message-ID: <000076d12c96$00006de0$00004505@spiritairlines.com.au> +To: +Subject: Online Doctors will fill your Viagra Prescription Now!!! QEEB +Date: Sun, 25 Aug 2002 21:21:51 -1900 +MIME-Version: 1.0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit +Errors-To: bccrate002@yahoo.com +X-Priority: 3 +X-MSMail-Priority: Normal +MIME-Version: 1.0 +X-Mailer: dtmail 1.3.0 @(#)CDE Version 1.3.2 SunOS 5.7 sun4u sparc +Sensitivity: Private +X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200 + +YOUR SEX DRIVE SHOULD NEVER BE SECOND ON THE LIST!!! +VIAGRA ONLINE NOW AND SHIPPED WITHIN 24 HOURS! +http://buy-onlinepills.com/main2.php?rx=16372 + +STAY HARD THE WAY YOU ONCE COULD!!! +LESS THAN $7.00 PER DOSE TO MAKE IT ALL HAPPEN AGAIN! +http://buy-onlinepills.com/main2.php?rx=16372 + +DON'T SETTLE FOR LESS, KEEP YOUR LOVER HAPPY! +http://buy-onlinepills.com/main2.php?rx=16372 + +No Doctor office's to visit. Simply fill out our +online form, and our U.S. Doctor will write your +prescription and send it within 48 hours. + +http://buy-onlinepills.com/main2.php?rx=16372 + +MOST MAJOR PRESCRIPTION DRUGS ALSO! + +CLICK BELOW FOR MORE INFORMATION: + +http://buy-onlinepills.com/main2.php?rx=16372 + + + +We are strongly against sending unsolicited emails to those who do not wish to receive our special mailings. You have opted in to one or more of our affiliate sites requesting to be notified of any special offers we may run from time to time. We also have attained the services of an independent 3rd party to overlook list management and removal services. This is NOT unsolicited email. If you do not wish to receive further mailings, please click here http://greenzer.com/remove.php to be removed from the list. Please accept our apologies if you have been sent this email in error. We honor all removal requests. + diff --git a/Ch3/datasets/spam/spam/00119.7bd666ac52f079fb3b5ff0be83b55286 b/Ch3/datasets/spam/spam/00119.7bd666ac52f079fb3b5ff0be83b55286 new file mode 100644 index 000000000..8c40b583a --- /dev/null +++ b/Ch3/datasets/spam/spam/00119.7bd666ac52f079fb3b5ff0be83b55286 @@ -0,0 +1,88 @@ +From mortg387d@runbox.com Tue Aug 27 11:48:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id EE78E43F99 + for ; Tue, 27 Aug 2002 06:48:21 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 11:48:22 +0100 (IST) +Received: from monat-svr (212186196133.klafu.surfer.at [212.186.196.133]) + by webnote.net (8.9.3/8.9.3) with ESMTP id LAA30976; + Tue, 27 Aug 2002 11:48:49 +0100 +Received: from mxs.mail.ru ([200.161.29.169]) by monat-svr with Microsoft SMTPSVC(5.0.2195.2966); + Fri, 23 Aug 2002 13:35:39 +0200 +Message-ID: <00003d0349fd$00006d28$00003e15@aibo.runbox.com> +To: +From: "Grace Quentin" +Subject: Let me know what you think!32482 +Date: Fri, 23 Aug 2002 04:30:44 -1900 +MIME-Version: 1.0 +X-OriginalArrivalTime: 23 Aug 2002 11:35:44.0626 (UTC) FILETIME=[37CA6D20:01C24A99] +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + +
    +
    +______________________________________________________________________
    +______________________________________________________________________
    +
    +LOWEST RATES IN 45 YEARS -
    +FILL OUT OUR SHORT APPLICATION FOR AN UNBELIEVABLE 3.50 - 5.0 % MORTGAGE
    +(APR)
    +
    +  () HOME REFINANCING
    +  () HOME IMPROVEMENT
    +  () DEBT-CONSOLIDATION
    +  () CASH-OUT
    +
    +Please Click HERE
    +for our short application.
    +
    +The following are NO problem and will not stop you from getting the
    +financing you need:
    +
    +  *** Can't show income
    +  *** Self-Employed
    +  *** Credit Problems
    +  *** Recent Bankruptcy
    +  *** Unconventional Loan
    +
    +We are a direct lender and we have hundreds of loan programs available.
    +If we don't have a program that works for you, we have hundreds of wholesa=
    +le
    +relationships with other lenders. So no matter which of our
    +50 states you live in, we likely have a program that could meet your
    +needs.
    +
    +Please Click HERE
    +for our short application.
    +
    +* We DO NOT resell or disseminate your email address. You are NOT
    +required to enter your SSN. This is a legitimate offer from legitimate
    +mortgage companies.
    +
    +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
    +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
    +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
    +Note: We are licensed in all 50 U.S. States.
    +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
    +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
    +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
    +
    +To be REMOVED from future mailings click HERE.
    +
    +We will NEVER intentionally email you again. Thank You.
    +
    +______________________________________________________________________
    +______________________________________________________________________
    +
    +
    +......................................... + + + + + diff --git a/Ch3/datasets/spam/spam/00120.58579af867ff9a702cff23e7b8818a59 b/Ch3/datasets/spam/spam/00120.58579af867ff9a702cff23e7b8818a59 new file mode 100644 index 000000000..f718d894b --- /dev/null +++ b/Ch3/datasets/spam/spam/00120.58579af867ff9a702cff23e7b8818a59 @@ -0,0 +1,95 @@ +From zahrae@email2.qves.net Tue Aug 27 12:19:23 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 98B8943F99 + for ; Tue, 27 Aug 2002 07:19:23 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 12:19:23 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id MAA31139 + for ; Tue, 27 Aug 2002 12:15:47 +0100 +Received: from email.qves.com (unknown [67.104.83.251]) + by smtp.easydns.com (Postfix) with ESMTP id 117DD2E06D + for ; Tue, 27 Aug 2002 07:15:45 -0400 (EDT) +Received: from qvp0078 ([169.254.6.7]) by email.qves.com with Microsoft SMTPSVC(5.0.2195.3779); + Tue, 27 Aug 2002 05:13:34 -0600 +From: "Hot Hot" +To: +Subject: Join the Web's Hottest & Fastest Growing Community 11.70 +Date: Tue, 27 Aug 2002 05:13:34 -0600 +Message-ID: <74ab201c24dba$c89a5ad0$0706fea9@freeyankeedom.com> +MIME-Version: 1.0 +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJNusiab0tdxmtxR+WV0vgHBWi8lg== +Content-Class: urn:content-classes:message +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2462.0000 +X-OriginalArrivalTime: 27 Aug 2002 11:13:34.0460 (UTC) FILETIME=[C89A33C0:01C24DBA] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_74AB3_01C24D88.7DFFEAD0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_74AB3_01C24D88.7DFFEAD0 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit + +1) Join the Web's Hottest & Fastest Growing Community +It Is So Hot! + +2) Guaranteed to lose 10-12 lbs in 30 days +Slim Patch - Weight Loss Patches + + +3) Get the Child Support You Deserve +Free Legal Advice + +Have a Wonderful Day, +Offer Manager + + + + + + + + + + + + + +------=_NextPart_000_74AB3_01C24D88.7DFFEAD0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +1) Join the Web's Hottest & Fastest Growing Community
    + It Is=20 + So Hot!
    +
    + 2) Guaranteed to lose 10-12 lbs in 30 days
    + Slim=20 + Patch - Weight Loss Patches
    +
    + 3) Get the Child Support You Deserve
    + Free=20 + Legal Advice
    +
    + Have a Wonderful Day,
    + Offer Manager
    +









    = + + + +------=_NextPart_000_74AB3_01C24D88.7DFFEAD0-- + diff --git a/Ch3/datasets/spam/spam/00121.bf18a63d6e7d40409f8b722036eadd82 b/Ch3/datasets/spam/spam/00121.bf18a63d6e7d40409f8b722036eadd82 new file mode 100644 index 000000000..849ce88de --- /dev/null +++ b/Ch3/datasets/spam/spam/00121.bf18a63d6e7d40409f8b722036eadd82 @@ -0,0 +1,164 @@ +From cmolano@hotmail.com Tue Aug 27 13:12:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 5F24F43F99 + for ; Tue, 27 Aug 2002 08:12:45 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 13:12:45 +0100 (IST) +Received: from jim.hradac.com (hradac.com [66.136.141.249]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7RC2cZ06577 for + ; Tue, 27 Aug 2002 13:03:51 +0100 +Received: from masqueradingv.bb ([200.251.234.66]) by jim.hradac.com with + Microsoft SMTPSVC(5.0.2195.4905); Sun, 25 Aug 2002 12:46:46 -0500 +Message-Id: <000062bb38f3$000039c3$00007cde@mammothweather.com> +To: , , + , +Cc: , , + , +From: cmolano@hotmail.com +Subject: DON'T LET A COMPUTER VIRUS RUIN YOUR DAY! 12879 +Date: Sun, 25 Aug 2002 13:50:11 -1600 +MIME-Version: 1.0 +Reply-To: cmolano@hotmail.com +X-Originalarrivaltime: 25 Aug 2002 17:46:48.0328 (UTC) FILETIME=[62D14080:01C24C5F] +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Does Your Computer Need an Oil Change + + + + + + + + +
    Does Your Comp= +uter Need an Oil + Change?
    + + + + +
    N= +orton
    SystemWorks + 2002
    Professional + Edition
    + + + + +
    = +Made + by the Creators of the #1 Anti-Virus Software on the Market!<= +/b>
    + + + + + +
    This + UNBEATABLE software suite comes with EVERY + program you'll ever n= +eed to answer the problems or threats that your + computer faces each day of it's Life!

    Included in this magnificent deal + are the following programs:
    + + + + + +
    Norton + AntiVirus=FFFFFF99 2002 - THE #1 + ANTI-VIRUS PROTECION EVER!
    Norton Utilities=FFFFFF99 2002 + -
    DIAGNOSE ANY PROBLEM WI= +TH YOUR + SYSTEM!
    + Norton Ghost=FFFFFF99 2002 -
    MAKES + BACKING UP YOUR VALUABLE DATA EASY!
    + Norton CleanSweep=FFFFFF99 2002 -
    CLEANS + OUT EXCESS INTERNET FILE BUILDUP!
    + Norton WinFax=FFFFFF99 Basic -
    TURNS YOUR + CPU INTO A FAX MACHINE!
    +
    + GoBack=FFFFFFAE 3 Personal - HELPS + PREVENT YOU FROM MAKING ANY MISTAKES!
    + + + + + +
    *ALL + this has a retail price of $99.95*
    Get it + Now for ONLY $29.99!
    with + FREE SHIPPING!
    + + + + + +
    CLICK + HERE to order NOW!
    +

    This Product is available NOW. = +When we +run out it's gone, so get it while it's HOT!

    + +

     

    +

     

    + + + + +
    Your + email address was obtained from an opt-in list. Opt-in IAO (Internet + Advertising Organisation)  List
    +  Serial No. EGU601.  If you wish to be unsubscribed f= +rom + this list, please Click + here. We do not condone spam in any shape or form. Thank You kin= +dly + for your cooperation.
    + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00122.98bcaad36eb81e75911371f841f28dfc b/Ch3/datasets/spam/spam/00122.98bcaad36eb81e75911371f841f28dfc new file mode 100644 index 000000000..c4b03d490 --- /dev/null +++ b/Ch3/datasets/spam/spam/00122.98bcaad36eb81e75911371f841f28dfc @@ -0,0 +1,33 @@ +From jamie@msn.com Tue Aug 27 14:27:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id C0CC943F9B + for ; Tue, 27 Aug 2002 09:27:14 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 14:27:14 +0100 (IST) +Received: from ks1.gayacom.net (co-location.ibsoft.iAsiaWorks.ne.kr + [211.36.253.28] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g7RDRwZ09790 for ; Tue, 27 Aug 2002 14:27:58 + +0100 +Received: (from nobody@localhost) by ks1.gayacom.net (8.9.3/8.9.3) id + WAA15535; Tue, 27 Aug 2002 22:26:56 +0900 +Date: Tue, 27 Aug 2002 22:26:56 +0900 +Message-Id: <200208271326.WAA15535@ks1.gayacom.net> +To: zzzz@spamassassin.taint.org, yyyy@johnmccrory.com, yyyy@judimartindale.com, + zzzz@mak.com, jm@cpw.math.columbia.edu, jm@maulpoix.net, + zzzz@mirolka.com, jm@netconcepts.com, jm@spamassassin.taint.org, jm@online.no, + zzzz@parsimail.com +From: jamie@msn.com () +Subject: WWW Form Submission + +Below is the result of your feedback form. It was submitted by + (jamie@msn.com) on Tuesday, August 27, 2002 at 22:26:56 +--------------------------------------------------------------------------- + +:: click hereDon't want to pay for Porn? Would you like to get it for FREE? The Honest, No Risk 100% Free Way? If you take a couple of minutes and read through our simple guide you will be able to get Free Passes to the top Paysites online!click here + +--------------------------------------------------------------------------- + + diff --git a/Ch3/datasets/spam/spam/00123.a5ee0040ec9a30b3f32f61e547fa5f8f b/Ch3/datasets/spam/spam/00123.a5ee0040ec9a30b3f32f61e547fa5f8f new file mode 100644 index 000000000..e5683dabd --- /dev/null +++ b/Ch3/datasets/spam/spam/00123.a5ee0040ec9a30b3f32f61e547fa5f8f @@ -0,0 +1,67 @@ +From marcie1136786@yahoo.com Tue Aug 27 18:49:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 410B343F99 + for ; Tue, 27 Aug 2002 13:49:30 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 27 Aug 2002 18:49:30 +0100 (IST) +Received: from info.chinacoal.gov.cn ([211.99.74.5]) + by webnote.net (8.9.3/8.9.3) with ESMTP id SAA00397 + for ; Tue, 27 Aug 2002 18:42:17 +0100 +From: marcie1136786@yahoo.com +Message-Id: <200208271742.SAA00397@webnote.net> +Received: from 211.97.147.11 ([211.97.147.11]) by info.chinacoal.gov.cn with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id RPBL0WFB; Sat, 24 Aug 2002 01:06:46 +0800 +To: zzzz@brooksresources.com, yyyy@cheetah.net, yyyy@colorado.net, + zzzz@connect.reach.net +Cc: zzzz@cstone.net, yyyy@dc.net, yyyy@dockingbay.com, yyyy@dynamic.com, + zzzz@electrotex.com, jm@epic.net, jm@expert.expert.com, + zzzz@firstnethou.com +Date: Fri, 23 Aug 2002 13:03:04 -0400 +Subject: Incredible Pictures!!!!!!!! +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Precedence-Ref: l2340567 +Content-Transfer-Encoding: 7bit +Content-Type: text/html; charset=us-ascii + + + +

    Do you like Sexy Animals doing the wild thing? We have the super hot content on the Internet!
    +This is the site you have heard about. Rated the number one adult site three years in a row!
    +- Thousands of pics from hardcore fucking, and cum shots to pet on girl.
    +
    +- Thousands videos
    +
    +So what are you waiting for?
    +
    +CLICK HERE
    +
    +
    +YOU MUST BE AT LEAST 18 TO ENTER!

    +

     

    +

     

    +

     

    +

    You have received this advertisement because you have opted in +to receive
    +free adult internet offers and
    +
    +specials through our affiliated websites. If you do not wish to receive
    +further emails or have received the
    +
    +email in error you may opt-out of our database by clicking here:
    +CLICK HERE
    +Please allow 24hours for removal.
    +This e-mail is sent in compliance with the Information Exchange Promotion and
    +Privacy Protection Act.
    +
    +section 50 marked as 'Advertisement' with valid 'removal' instruction.

    + + + + [NKIYs5] + + diff --git a/Ch3/datasets/spam/spam/00124.db848e36f1b4c2705cbc16ef33a302d4 b/Ch3/datasets/spam/spam/00124.db848e36f1b4c2705cbc16ef33a302d4 new file mode 100644 index 000000000..c53fb8bef --- /dev/null +++ b/Ch3/datasets/spam/spam/00124.db848e36f1b4c2705cbc16ef33a302d4 @@ -0,0 +1,92 @@ +From iman@s3.serveimage.com Wed Aug 28 10:42:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 8D25743F99 + for ; Wed, 28 Aug 2002 05:42:48 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:42:48 +0100 (IST) +Received: from email.qves.com (email5.qves.net [209.63.151.251] (may be forged)) + by webnote.net (8.9.3/8.9.3) with ESMTP id TAA00664 + for ; Tue, 27 Aug 2002 19:49:07 +0100 +Received: from qvp0088 ([169.254.6.9]) by email.qves.com with Microsoft SMTPSVC(5.0.2195.2966); + Tue, 27 Aug 2002 12:48:32 -0600 +From: "How Slim" +To: +Subject: Guaranteed to lose 10-12 lbs in 30 days with Slim Patch 10.24 +Date: Tue, 27 Aug 2002 12:48:30 -0600 +Message-ID: <26b38101c24dfa$5616c210$0906fea9@freeyankeedom.com> +MIME-Version: 1.0 +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJN+lYWUyKm4vmETZ2VOerlXqe6pw== +Content-Class: urn:content-classes:message +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2462.0000 +X-OriginalArrivalTime: 27 Aug 2002 18:48:32.0427 (UTC) FILETIME=[577567B0:01C24DFA] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_26B382_01C24DC8.0B7C5210" + +This is a multi-part message in MIME format. + +------=_NextPart_000_26B382_01C24DC8.0B7C5210 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit + +1) Join the Web's Hottest & Fastest Growing Community +It Is So Hot! + +2) Guaranteed to lose 10-12 lbs in 30 days +Slim Patch - Weight Loss Patches + + +3) Get the Child Support You Deserve +Free Legal Advice + +Have a Wonderful Day, +Offer Manager + + + + + + + + + + + + + +------=_NextPart_000_26B382_01C24DC8.0B7C5210 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +1) Join the Web's Hottest & Fastest Growing Community
    + It Is=20 + So Hot!
    +
    + 2) Guaranteed to lose 10-12 lbs in 30 days
    + Slim=20 + Patch - Weight Loss Patches
    +
    + 3) Get the Child Support You Deserve
    + Free=20 + Legal Advice
    +
    + Have a Wonderful Day,
    + Offer Manager
    +









    = + + + +------=_NextPart_000_26B382_01C24DC8.0B7C5210-- + diff --git a/Ch3/datasets/spam/spam/00125.120d27c936362896c00a3db9d3a4571e b/Ch3/datasets/spam/spam/00125.120d27c936362896c00a3db9d3a4571e new file mode 100644 index 000000000..4accd8a69 --- /dev/null +++ b/Ch3/datasets/spam/spam/00125.120d27c936362896c00a3db9d3a4571e @@ -0,0 +1,167 @@ +From rxwi506@framesetup.com Wed Aug 28 10:42:54 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 3774F43F9B + for ; Wed, 28 Aug 2002 05:42:52 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:42:52 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id UAA00747 + for ; Tue, 27 Aug 2002 20:11:07 +0100 +From: rxwi506@framesetup.com +Received: from framesetup.com (1Cust148.tnt15.det3.da.uu.net [67.217.14.148]) + by smtp.easydns.com (Postfix) with SMTP id F3DC82BCF8 + for ; Tue, 27 Aug 2002 15:11:00 -0400 (EDT) +Subject: Mothers you want to fuck +To: zzzz@spamassassin.taint.org +Date: Tue, 27 Aug 2002 15:53 -0400 +Mime-Version: 1.0 +Message-Id: <20020827191100.F3DC82BCF8@smtp.easydns.com> +Content-Type: text/html + +MILFhunter + + + + + +

    +
    +
    +
    +
    +
    + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + MILF HUNTER
    +
    Do you know where your mom is?
    +
    + MORE SAMPLE PICS      MORE SAMPLE MOVIES      LIST OF MILFs

    +
    +
    +
    +

     

    +

    CLICK + HERE to enlarge your PENIS 3-4 inches NATURALLY!!

    +

     

    +

     

    +
    Click + Here to be removed
    +


    +
    +
    +
    +
    +
    +
    +

    +
    +
    + + diff --git a/Ch3/datasets/spam/spam/00126.e98e1ba87a38e0cceeb55f3b86dbd4dd b/Ch3/datasets/spam/spam/00126.e98e1ba87a38e0cceeb55f3b86dbd4dd new file mode 100644 index 000000000..81ba48908 --- /dev/null +++ b/Ch3/datasets/spam/spam/00126.e98e1ba87a38e0cceeb55f3b86dbd4dd @@ -0,0 +1,125 @@ +From eyeey@keromail.com Wed Aug 28 10:43:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 7013744155 + for ; Wed, 28 Aug 2002 05:42:54 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:42:54 +0100 (IST) +Received: from SERVER2 (mail.nomioan.gr [195.167.25.66]) + by webnote.net (8.9.3/8.9.3) with ESMTP id UAA00879 + for ; Tue, 27 Aug 2002 20:57:14 +0100 +From: eyeey@keromail.com +Received: from keromail-com.mr.outblaze.com (203.117.141.101) by SERVER2 with SMTP; Tue, 27 Aug 2002 22:33:42 +0300 +Message-ID: <000026a91900$00002e3e$000025db@m208.hk.renren.com> +To: +Subject: Memory loss? +Date: Tue, 27 Aug 2002 13:41:46 -1600 +MIME-Version: 1.0 +Reply-To: discovery9@gandabacha.com +Content-Type: multipart/mixed; boundary=9EE6957817154900AA7494F2E1F329BE + +This is a multipart message in MIME format. + +--9EE6957817154900AA7494F2E1F329BE +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +w3498 98sd0f89 498w90 + + +Lose weight while building lean muscle mass  and reversing the +ravages of aging all at once + + +
    + + + + + + + +
    + + + + +
    +

    Human + Growth Hormone Therapy

    +

    Lose weight while + building lean muscle mass
    +  and reversing the ravages of aging all at once.

    +
    +
    + Remarkable discoveries about Human Growth Hormones (HGH) + are changing the way we think about aging and weight loss.
    <= +/p> +

    + + + + +
    +

    • Lose Weight
    + • Build Muscle Tone
    + • Reverse Aging
    + • Increased Libido
    + • Duration Of Penile
    +   Erection

    +
    +

    • Healthier Bones
    + • Improved Memory
    + • Improved skin
    + • New Hair Growth
    + • Wrinkle
    +   Disappearance +

    +
    +
    +

    Visit + Our Web Site and Learn The Facts: Click Here

    +

     vvnx11

    +
    + +
    +We are strongly against sending unsolicited emails to those who do not wis= +h to receive our special mailings. You have opted in to one or more of our= + affiliate sites requesting to be notified of any special offers. We have = +retained the services of an independent 3rd party to manage list managemen= +t and removal services. If you do not wish to receive further mailings, pl= +ease click below to be removed from the list. Please accept our apologies = +if you have been sent this email in error. We honor all removal requests. +


    +

    To unsubscribe click here

    + + +av8r5 98984w 0sd9f89085 + + + +--9EE6957817154900AA7494F2E1F329BE +Content-Type: text/plain +Content-Disposition: inline + +______________________________________________________________________ +This messsage was sent using the trial version of the +1st Class Mail Server software. You can try it for free +at http://www.1cis.com/download/1cismail.asp + +Is this unsolicited email? Instructions for reporting unsolicited +email can be found at at http://www.1cis.com/articles/spam.asp + +--9EE6957817154900AA7494F2E1F329BE-- + diff --git a/Ch3/datasets/spam/spam/00127.3500d109361b544b0937523adb763588 b/Ch3/datasets/spam/spam/00127.3500d109361b544b0937523adb763588 new file mode 100644 index 000000000..2b4230343 --- /dev/null +++ b/Ch3/datasets/spam/spam/00127.3500d109361b544b0937523adb763588 @@ -0,0 +1,56 @@ +From b0715638@eudoramail.com Wed Aug 28 10:43:14 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id A233B44156 + for ; Wed, 28 Aug 2002 05:43:05 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:43:05 +0100 (IST) +Received: from cluster.engr.subr.edu (cluster.engr.subr.edu [192.207.173.252]) + by webnote.net (8.9.3/8.9.3) with ESMTP id WAA01201 + for ; Tue, 27 Aug 2002 22:20:52 +0100 +Received: from smtp0532.mail.yahoo.com ([210.83.114.125]) + by cluster.engr.subr.edu (AIX4.3/8.9.3/8.9.3) with SMTP id QAA130820; + Tue, 27 Aug 2002 16:11:45 -0500 +Message-Id: <200208272111.QAA130820@cluster.engr.subr.edu> +Date: Wed, 28 Aug 2002 05:16:42 +0800 +From: "Janet Dunham" +X-Priority: 3 +To: zzzz@marchettieng.com +Cc: zzzz@neo.rr.com, yyyy@spamassassin.taint.org +Subject: zzzz,All New! Breast Enhancement +Mime-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +================================= + +Guaranteed to increase, lift and firm your +breasts in 60 days or your money back!! + +100% herbal and natural. Proven formula since +1996. Increase your bust by 1 to 3 sizes within 30-60 +days and be all natural. + +Click here: +http://202.101.163.34:81/li/wangxd/ + +Absolutely no side effects! +Be more self confident! +Be more comfortable in bed! +No more need for a lift or support bra! + +100% GUARANTEED AND FROM A NAME YOU KNOW AND +TRUST! + + +************************************************** + +You are receiving this email as a double opt-in +subscriber to the Standard Affiliates Mailing +List. +To remove yourself from all related email lists, +just click here: +http://64.123.160.91:81/li/gg/unsubscriber.asp?userid=zzzz@marchettieng.com + diff --git a/Ch3/datasets/spam/spam/00128.721b6b20d5834d490662e2ae8c5c0684 b/Ch3/datasets/spam/spam/00128.721b6b20d5834d490662e2ae8c5c0684 new file mode 100644 index 000000000..b15aa9b07 --- /dev/null +++ b/Ch3/datasets/spam/spam/00128.721b6b20d5834d490662e2ae8c5c0684 @@ -0,0 +1,52 @@ +From sally@mailme.dk Wed Aug 28 10:43:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 1390443F9B + for ; Wed, 28 Aug 2002 05:43:21 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:43:21 +0100 (IST) +Received: from mailme.dk ([195.101.1.125]) + by webnote.net (8.9.3/8.9.3) with SMTP id DAA02293; + Wed, 28 Aug 2002 03:04:00 +0100 +Date: Wed, 28 Aug 2002 03:04:00 +0100 +From: sally@mailme.dk +Received: from 168.154.46.215 ([168.154.46.215]) by smtp-server1.cfl.rr.com with QMQP; Tue, 27 Aug 2002 16:06:56 +1200 +Received: from f64.law4.hotmail.com ([122.98.182.31]) + by rly-xr02.mx.aol.com with NNFMP; 28 Aug 2002 04:03:56 -0000 +Received: from [175.127.148.199] by n9.groups.yahoo.com with asmtp; 27 Aug 2002 16:00:57 +1200 +Received: from unknown (121.163.110.24) + by q4.quik.com with NNFMP; 28 Aug 2002 04:57:58 -0100 +Reply-To: +Message-ID: <002c21c78dab$2672b7d8$3dc04dd5@jqalct> +To: btr2@yahoo.com +Subject: CAREER OPPORTUNITY. WORK FROM HOME +MiME-Version: 1.0 +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2615.200 +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00A0_03E30A1A.B1804B54" + +------=_NextPart_000_00A0_03E30A1A.B1804B54 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + +SGVscCB3YW50ZWQuICBXZSBhcmUgYSAxNCB5ZWFyIG9sZCBmb3J0dW5lIDUw +MCBjb21wYW55LCB0aGF0IGlzDQpncm93aW5nIGF0IGEgdHJlbWVuZG91cyBy +YXRlLiAgV2UgYXJlIGxvb2tpbmcgZm9yIGluZGl2aWR1YWxzIHdobw0Kd2Fu +dCB0byB3b3JrIGZyb20gaG9tZS4NCg0KVGhpcyBpcyBhbiBvcHBvcnR1bml0 +eSB0byBtYWtlIGFuIGV4Y2VsbGVudCBpbmNvbWUuICBObyBleHBlcmllbmNl +DQppcyByZXF1aXJlZC4gIFdlIHdpbGwgdHJhaW4geW91Lg0KDQpTbyBpZiB5 +b3UgYXJlIGxvb2tpbmcgdG8gYmUgZW1wbG95ZWQgZnJvbSBob21lIHdpdGgg +YSBjYXJlZXIgdGhhdCBoYXMNCnZhc3Qgb3Bwb3J0dW5pdGllcywgdGhlbiBn +bzoNCg0KaHR0cDovL3d3dy5iYXNldGVsLmNvbToyNzAwMC93ZWFsdGhub3cN +Cg0KV2UgYXJlIGxvb2tpbmcgZm9yIGVuZXJnZXRpYyBhbmQgc2VsZiBtb3Rp +dmF0ZWQgcGVvcGxlLiAgSWYgdGhhdCBpcyB5b3UNCnRoYW4gY2xpY2sgb24g +dGhlIGxpbmsgYW5kIGZpbGwgb3V0IHRoZSBmb3JtLCBhbmQgb25lIG9mIG91 +cg0KZW1wbG95ZW1lbnQgc3BlY2lhbGlzdCB3aWxsIGNvbnRhY3QgeW91Lg0K +DQpUbyBiZSByZW1vdmVkIGZyb20gb3VyIGxpbmsgc2ltcGxlIGdvIHRvOg0K +DQpodHRwOi8vd3d3LmJhc2V0ZWwuY29tOjI3MDAwL3JlbW92ZS5odG1sDQoN +Cg== + diff --git a/Ch3/datasets/spam/spam/00129.1080cea3a532759b015dc071d033749d b/Ch3/datasets/spam/spam/00129.1080cea3a532759b015dc071d033749d new file mode 100644 index 000000000..eb9f898ef --- /dev/null +++ b/Ch3/datasets/spam/spam/00129.1080cea3a532759b015dc071d033749d @@ -0,0 +1,57 @@ +From submit194@desertmail.com Wed Aug 28 10:43:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 89F4644158 + for ; Wed, 28 Aug 2002 05:43:23 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:43:23 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id HAA03191 + for ; Wed, 28 Aug 2002 07:42:28 +0100 +From: submit194@desertmail.com +Received: from desertmail.com (pop.bc-p.co.jp [211.5.140.218]) + by smtp.easydns.com (Postfix) with SMTP id 66DBB2CE25 + for ; Wed, 28 Aug 2002 02:42:23 -0400 (EDT) +Reply-To: +Message-ID: <026b53c53b0c$7327c3e1$5ee66dc8@aaqrcc> +To: Your@no.hostname.supplied, Website@no.hostname.supplied +Subject: ADV: Promote Your Website! +Date: Tue, 27 Aug 0102 23:35:10 +0700 +MiME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal +Content-Transfer-Encoding: 8bit + +Removal instructions below + + +I saw your listing on the internet. I work +for a company that submits websites to search +engines. We can submit your website to over +350 of the worlds best search engines and +directories for a one time charge of only +$39.95. + +If you would like to put your website in +the fast lane and receive more +traffic call me on our toll-free number +listed below. + +All work is verified! + +Sincerely, + +Brian Franks +888-532-8842 + + + +To be removed call:888-800-6339 Ext. 1377 + + diff --git a/Ch3/datasets/spam/spam/00130.c8128e89eff5b0e61aa864ebfd96afba b/Ch3/datasets/spam/spam/00130.c8128e89eff5b0e61aa864ebfd96afba new file mode 100644 index 000000000..93f95d991 --- /dev/null +++ b/Ch3/datasets/spam/spam/00130.c8128e89eff5b0e61aa864ebfd96afba @@ -0,0 +1,86 @@ +From jess44128086731@email.com Wed Aug 28 10:43:34 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 4368144155 + for ; Wed, 28 Aug 2002 05:43:22 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:43:22 +0100 (IST) +Received: from ritvea.com.cn ([211.144.1.230]) + by webnote.net (8.9.3/8.9.3) with ESMTP id DAA02299 + for ; Wed, 28 Aug 2002 03:05:41 +0100 +Received: from host200.mdlmarinas.co.uk ([212.58.46.200] helo=212.58.46.200) + by ritvea.com.cn with smtp (Exim 3.30 #1) + id 17k4Ao-0002c0-00; Wed, 28 Aug 2002 10:52:02 -0400 +From: "zzzz8969" +To: zzzz8969@freeuk.com, yyyy8@majorisp.net, yyyy@evcom.net, + zzzz@foss-electric.dk, jm@greenwood.com, jm@hoty.com +Cc: zzzz@impulsedata.net, yyyy@internetmortgage.com, yyyy@levelxllc.com, + zzzz@mail.telepac.pt, jm@mhmc.net, jm@muscanet.com, jm@spamassassin.taint.org, + zzzz@olycon.com, jm@poboxes.com, jm@rapidnet.com +Date: Tue, 27 Aug 2002 21:06:23 -0400 +Subject: Congratualtions zzzz8969 ! !! +X-Priority: 1 +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Precedence-Ref: l234056789zxcvbnmlkjhgfq +Content-Transfer-Encoding: 7bit +Message-Id: +Content-Type: text/html; charset=us-ascii + + + + +
    +

    You're + A Winner!
    +
    + Dear Traveler,

    +
    +

    Congratulations + you may be one of our LUCKY WINNERS!

    +

    You may be spending + your next vacation in beautiful Orlando Florida!

    +
      +
    • 6 days + and 5 nights + of accommodations in sunny Orlando Florida
    • +
    • Round trip + AIRFARE INCLUDED for + two
    • +
    • Rental + car with UNLIMITED MILEAGE
    • +
    • 2 day pass + to + UNIVERSAL STUDIOS
    • +
    • $500 + coupon book for meals and entertainment
    • +
    • 2 CASINO + CRUISE tickets
    • +
    +

    To claim your + prize just visit our website Click here
    +

    +

    Thanks for entering + our contest and we look forward to seeing you soon.

    +

    Sincerely,

    +

    Jacqueline O'Connor
    + Director of Promotoins

    +

    P.S. You’ve + got to hurry. If you don’t claim your vacation in the next 24 hours
    + it may be gone. Availability is limited. So don’t wait, +Click + here today.

    +
    +
    +

    +

     

    +


    +
    + To be excluded from future promotions Click here

    + + + + diff --git a/Ch3/datasets/spam/spam/00131.d955acc659fb151479460f9dd2f87efe b/Ch3/datasets/spam/spam/00131.d955acc659fb151479460f9dd2f87efe new file mode 100644 index 000000000..a02607586 --- /dev/null +++ b/Ch3/datasets/spam/spam/00131.d955acc659fb151479460f9dd2f87efe @@ -0,0 +1,50 @@ +From reviewdept@yahoo.com Wed Aug 28 10:43:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id E167144159 + for ; Wed, 28 Aug 2002 05:43:23 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:43:23 +0100 (IST) +Received: from websrv.lesoleil.sn ([207.50.235.163]) + by webnote.net (8.9.3/8.9.3) with ESMTP id JAA03566 + for ; Wed, 28 Aug 2002 09:04:37 +0100 +From: reviewdept@yahoo.com +Received: from mx11.mindspring.com (host217-37-137-73.in-addr.btopenworld.com [217.37.137.73]) by websrv.lesoleil.sn with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id PH3AL64J; Sat, 20 Jul 2002 07:19:30 -0000 +Message-ID: <000078f6546f$0000015d$00003265@smtp-gw-4.msn.com> +To: +Subject: MSNBC: Rates Hit 18 year Low 4.75% ...28940 +Date: Sat, 20 Jul 2002 03:34:09 -1900 +MIME-Version: 1.0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + +========================================================================== + +Now you can have HUNDREDS of lenders compete for your loan! + +FACT: Interest Rates are at their lowest point in 40 years! + +You're eligible even with less than perfect credit !! + + * Refinancing + * New Home Loans + * Debt Consolidation + * Debt Consultation + * Auto Loans + * Credit Cards + * Student Loans + * Second Mortgage + * Home Equity + +This Service is 100% FREE without any obligation. + +Visit Our Web Site at: http://61.129.68.19/user0201/index.asp?Afft=QM3 + +============================================================================ + +To Unsubscribe: http://61.129.68.19/light/watch.asp + diff --git a/Ch3/datasets/spam/spam/00132.0ead3e293c6c41cbffb69670e8b85ae7 b/Ch3/datasets/spam/spam/00132.0ead3e293c6c41cbffb69670e8b85ae7 new file mode 100644 index 000000000..1a4c48a46 --- /dev/null +++ b/Ch3/datasets/spam/spam/00132.0ead3e293c6c41cbffb69670e8b85ae7 @@ -0,0 +1,62 @@ +From andijeanehuaa@yahoo.com Wed Aug 28 10:43:51 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 3F6094415A + for ; Wed, 28 Aug 2002 05:43:24 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:43:24 +0100 (IST) +Received: from jauhar.ubitec.com ([202.5.134.100]) + by webnote.net (8.9.3/8.9.3) with ESMTP id JAA03632 + for ; Wed, 28 Aug 2002 09:26:30 +0100 +From: andijeanehuaa@yahoo.com +Received: from mx1.mail.yahoo.com ([202.74.39.214]) by jauhar.ubitec.com with Microsoft SMTPSVC(5.0.2195.2966); + Wed, 28 Aug 2002 12:43:57 +0500 +Message-ID: <00000b1d6a3c$00000530$00005f85@mx1.mail.yahoo.com> +To: +Subject: Get your own fountain of youth! HGH human growth hormone from 21st Century!17441 +Date: Wed, 28 Aug 2002 13:31:07 -0500 +MIME-Version: 1.0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit +Reply-To: andijeanehuaa@yahoo.com +1: X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +X-OriginalArrivalTime: 28 Aug 2002 07:44:00.0640 (UTC) FILETIME=[AC6F4800:01C24E66] + +As seen on NBC, CBS, CNN, and even Oprah! The health discovery that actuallyreverses aging +while burning fat, without dieting or exercise! This provendiscovery has even been reported +on by the New England Journal of Medicine.Forget aging and dieting forever! And it's +Guaranteed! + +Click below to enter our web site: +http://market.liangshanpo.com/hgh/ + +Would you like to lose weight while you sleep! +No dieting! +No hunger pains! +No Cravings! +No strenuous exercise! +Change your life forever! + +100% GUARANTEED! + +1.Body Fat Loss 82% improvement. +2.Wrinkle Reduction 61% improvement. +3.Energy Level 84% improvement. +4.Muscle Strength 88% improvement. +5.Sexual Potency 75% improvement. +6.Emotional Stability 67% improvement. +7.Memory 62% improvement. + +Click below to enter our web site: +http://market.liangshanpo.com/hgh/ + + +************************************************** +If you want to get removed +from our list please email at- affiliateoptout@btamail.net.cn +(subject=remove "your email") +************************************************** + diff --git a/Ch3/datasets/spam/spam/00133.17dccf2499a4245b83890e0784c43499 b/Ch3/datasets/spam/spam/00133.17dccf2499a4245b83890e0784c43499 new file mode 100644 index 000000000..fafb51c88 --- /dev/null +++ b/Ch3/datasets/spam/spam/00133.17dccf2499a4245b83890e0784c43499 @@ -0,0 +1,73 @@ +From danikk3JjyTgR67@yahoo.com Wed Aug 28 10:43:55 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 83F4043F99 + for ; Wed, 28 Aug 2002 05:43:49 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:43:49 +0100 (IST) +Received: from net_server.al-rite.com (216.215.177.245.nw.nuvox.net [216.215.177.245]) + by webnote.net (8.9.3/8.9.3) with ESMTP id KAA03899 + for ; Wed, 28 Aug 2002 10:37:24 +0100 +From: danikk3JjyTgR67@yahoo.com +Received: from mx1.mail.yahoo.com (216.23.61.162.nw.nuvox.net [216.23.61.162]) by net_server.al-rite.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id RV7XTXQX; Wed, 28 Aug 2002 02:31:17 -0400 +Message-ID: <000046984bed$00005677$000061fe@mx1.mail.yahoo.com> +To: +Subject: Save $30k even if you've refi'd 1090 +Date: Tue, 27 Aug 2002 23:34:28 -1900 +MIME-Version: 1.0 +Reply-To: danikk3JjyTgR67@yahoo.com +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + +

    Attention U.S. HomeOwners= +

    + +

    If you want to save an extra $30,000 (average s= +avings)

    +

    on your mortgage even if you have already refin= +anced

    +

    CL= +ICK HERE

    +

    We also have the lowest rates and most professi= +onal

    +

    and friendly service you will experience. = + We will

    +

    answer your questions with no obligation.

    +

    CLIC= +K HERE

    +

    We have rates as low as 4.65% and Loans for all= +

    +

    types of people and situations.

    +

    For those of you who have a mortgage and have b= +een

    +

    turned down we can still save you around $30,00= +0.

    +

    CL= +ICK HERE for a FREE, friendly +quote.

    +

     

    +

     

    +

    If you no longer wish to receive our offers and updates click here 
    + and we will promptly honor your request.

    + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00134.9f41f4111a33dc1efca04de72e1a105a b/Ch3/datasets/spam/spam/00134.9f41f4111a33dc1efca04de72e1a105a new file mode 100644 index 000000000..ab4c20fd8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00134.9f41f4111a33dc1efca04de72e1a105a @@ -0,0 +1,359 @@ +From info@purplehotel.com Wed Aug 28 10:45:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 9BD7444155 + for ; Wed, 28 Aug 2002 05:45:11 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 10:45:11 +0100 (IST) +Received: from mgci.com (box5.mpowercom.net [208.57.0.14]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7RMtDZ29430 for + ; Tue, 27 Aug 2002 23:55:13 +0100 +Date: Tue, 27 Aug 2002 23:55:13 +0100 +Message-Id: <200208272255.g7RMtDZ29430@dogma.slashnull.org> +Received: (qmail 23282 invoked by uid 0); 27 Aug 2002 22:55:08 -0000 +Received: from unknown (HELO donaldbae) (208.57.45.218) by mgci.com with + SMTP; 27 Aug 2002 22:55:07 -0000 +From: Radisson Chicago +To: licensing@internet.com +Subject: Chicago Meeting Site +Reply-To: treds@junos.com +MIME-Version: 1.0 +Content-Type: text/html; charset=us-ascii + + + + + + + + + + +THE CONVIENENCE OF + + + + + + + +
    + +

    THE CONVENIENCE OF

    + +

    CHICAGO

    + +

    EASY ON YOUR BUDGET

    + +

     

    + +

    When planning your next Chicago meeting consider the

    + +

     

    + +

    Radisson Hotel +Chicago-Northshore

    + +

     

    + +

    ·      Great +location just 8 miles north of Downtown Chicago off I-94 Expressway

    + +

    ·      $85 State +Government Rate with only 6% Sales Tax (Chicago 14.9%, Rosemont 12%)

    + +

    ·      O’Hare +Shuttle Service Available

    + +

    ·      Free High +Speed Internet Access

    + +

    ·      Free +Ample Parking

    + +

    ·      State +Certified Minority Business Enterprise (MBE) #363778006

    + +

    ·      18000+ +Square Feet of Flexible Meeting Space

    + +

    ·      #3 Rated +Hotel for Customer Service in Entire Radisson Chain Worldwide*

    + +

    ·      Great +Restaurants, Shopping & Activities

    + +

    ·      FEMA +#IL-0458 and ADA Compliant

    + +

     

    + +
    Contact Riz Bhatti @ 1847-677-1234 +ext. 6884 or
    + +
    Donald Bae @ 1847-677-1234 ext. 6880
    + +

    Take a virtual tour of our hotel @ www.radisson-chicago.com

    + +

      +

    + +

      +

    + +

    December 2001 Customer Satisfaction Survey-Radisson +Worldwide Hotels and Resorts

    + +
    + + + + + diff --git a/Ch3/datasets/spam/spam/00135.00e388e3b23df6278a8845047ca25160 b/Ch3/datasets/spam/spam/00135.00e388e3b23df6278a8845047ca25160 new file mode 100644 index 000000000..9a1ffff22 --- /dev/null +++ b/Ch3/datasets/spam/spam/00135.00e388e3b23df6278a8845047ca25160 @@ -0,0 +1,83 @@ +From new_adult_toys_0463b54@yahoo.com Wed Aug 28 11:04:02 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 32C7943F99 + for ; Wed, 28 Aug 2002 06:03:57 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 11:03:57 +0100 (IST) +Received: from yahoo.com (IDENT:squid@[211.57.23.142]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7RJLTZ22353 for + ; Tue, 27 Aug 2002 20:21:30 +0100 +Received: from 144.60.76.182 ([144.60.76.182]) by smtp4.cyberecschange.com + with SMTP; 28 Aug 0102 14:16:34 -0100 +Received: from pet.vosni.net ([179.59.188.175]) by + smtp-server.tampabayr.com with smtp; 28 Aug 0102 13:11:42 -0900 +Received: from 179.125.241.6 ([179.125.241.6]) by smtp-server1.cflrr.com + with asmtp; 28 Aug 0102 04:06:50 -0900 +Reply-To: +Message-Id: <014d73e75c7b$6247c3e0$8ce81ed4@ywdmjl> +From: +To: +Subject: online catalog of articles, adult toys 2009vjtt6-179dML-15 +Date: Tue, 27 Aug 0102 20:59:44 -0200 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: QUALCOMM Windows Eudora Version 5.1 +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00E8_85C13B1D.B7243B86" + +------=_NextPart_000_00E8_85C13B1D.B7243B86 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +PGh0bWw+DQoNCjxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAw +MDAiPiANCjxwIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cu +ZGlyZWN0d2Vic3RvcmUuY29tL3RveXMvaW5kZXguaHRtbCI+PGltZyBzcmM9 +Imh0dHA6Ly93d3cuZGlyZWN0d2Vic3RvcmUuY29tL21waWMuanBnIiB3aWR0 +aD0iNTAwIiBoZWlnaHQ9IjMzOSIgYm9yZGVyPSIwIj48L2E+PGJyPiANCjxm +b250IHNpemU9IjMiIGZhY2U9IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2Vy +aWYiPjxhIGhyZWY9Imh0dHA6Ly93d3cuZGlyZWN0d2Vic3RvcmUuY29tL3Rv +eXMvaW5kZXguaHRtbCI+PGI+RU5URVIgDQpOT1cgaWYgeW91IGFyZSAxOCBh +bmQgb3ZlcjwvYj48L2E+PC9mb250PjwvcD4gDQo8cCBhbGlnbj0iY2VudGVy +Ij48Zm9udCBmYWNlPSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBz +aXplPSI0IiBjb2xvcj0iI0ZGMDAwMCI+PGI+U1BFQ0lBTCANCk9GRkVSPGJy +PiANCjxmb250IHNpemU9IjUiPjMwIERheXMgPGk+RlJFRSBhY2Nlc3M8L2k+ +IDwvZm9udD48YnI+IA0KdG8gdGhlIGxhcmdlc3QgQWR1bHRzaXRlIG9uIHRo +ZSB3ZWIuPGJyPiANCjwvYj4gPGZvbnQgc2l6ZT0iMiI+Zm9yIG9yZGVycyBv +dmVyICQxMDA8L2ZvbnQ+PC9mb250PjwvcD4gDQo8cCBhbGlnbj0iY2VudGVy +Ij48Zm9udCBzaXplPSIyIiBmYWNlPSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5z +LXNlcmlmIj48Yj48Zm9udCBzaXplPSI0IiBjb2xvcj0iIzAwMDBGRiI+UmVh +ZHkgDQp0byBnbyBTaG9wcGluZz8gPC9mb250PjwvYj48YnI+IA0KWW91IGNh +biBmZWVsIHNhZmUgc2hvcHBpbmcgb3VyIHNlY3VyZSBvbmxpbmUgc3RvcmUu +IDxicj4gDQpZb3VyIHByaXZhY3kgYW5kIGNvbmZpZGVudGlhbGl0eSBpcyBv +dXIgcHJpb3JpdHkuIDxicj4gDQpBbGwgb3JkZXJzIGFyZSBwYWNrZWQgaW4g +YSBkaXNjcmVldCBwcmlvcml0eSBtYWlsIGJveC4gPGJyPiANCldlIG5ldmVy +IHNoYXJlIHlvdXIgaW5mb3JtYXRpb24gd2l0aCBhbnlvbmUuIE9yZGVycyBz +aGlwcGVkIHdpdGhpbiAyNCBob3Vycy48L2ZvbnQ+PC9wPiANCg0KPHAgYWxp +Z249ImNlbnRlciI+PGZvbnQgc2l6ZT0iMyIgZmFjZT0iQXJpYWwsIEhlbHZl +dGljYSwgc2Fucy1zZXJpZiI+PGEgaHJlZj0iaHR0cDovL3d3dy5kaXJlY3R3 +ZWJzdG9yZS5jb20vdG95cy9pbmRleC5odG1sIj48Yj48Zm9udCBzaXplPSI1 +Ij5FTlRFUiANCk5PVzwvZm9udD48L2I+PC9hPjwvZm9udD48L3A+IA0KPHAg +YWxpZ249ImNlbnRlciI+Jm5ic3A7PC9wPiANCjxwIGFsaWduPSJjZW50ZXIi +PiZuYnNwOzwvcD4gDQo8cCBhbGlnbj0iY2VudGVyIj48Zm9udCBzaXplPSIx +IiBmYWNlPSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIj5UaGlzIEUt +bWFpbGluZyANCmhhcyBiZWVuIHNlbnQgdG8geW91IGFzIGEgcGVyc29uIGlu +dGVyZXN0ZWQgaW4gdGhlIGluZm9ybWF0aW9uIGVuY2xvc2VkLiA8YnI+IA0K +SWYgdGhpcyByZWFjaGVkIHlvdSBieSBlcnJvciwgb3IgeW91IGRvIG5vdCB3 +aXNoIHRvIHJlY2VpdmUgdGhpcyBpbmZvcm1hdGlvbiANCm9yIHR5cGUgb2Yg +aW5mb3JtYXRpb24gaW4gdGhlIGZ1dHVyZSwgPGJyPiANCnBsZWFzZSBjbGlj +ayBvbiB0aGUgd29yZDxhIGhyZWY9Im1haWx0bzptaW5pcmVtQGZpcmVtYWls +LmRlIj4gUkVNT1ZFIDwvYT5hbmQgDQpyZXBseSB0aGlzIGVtYWlsIHRvIHVz +LCB5b3Ugd2lsbCBiZSB0YWtlbiBvZmYgb3VyIGxpc3QgaW1tZWRpYXRlbHkg +YW5kIE5FVkVSIA0KcmVjZWl2ZSBhbnkgZW1haWxzIGZyb20gdXMuPC9mb250 +PjwvcD4gDQo8cCBhbGlnbj0iY2VudGVyIj4mbmJzcDs8L3A+IA0KPHAgYWxp +Z249ImNlbnRlciI+Jm5ic3A7PC9wPiANCjxwIGFsaWduPSJjZW50ZXIiPiZu +YnNwOzwvcD4gDQo8cCBhbGlnbj0iY2VudGVyIj4mbmJzcDs8L3A+IA0KPHAg +YWxpZ249ImNlbnRlciI+Jm5ic3A7PC9wPiANCjwvYm9keT4gDQo8L2h0bWw+ +DQoxMzkzUHdxYjAtMjYxU0JjSDAzNTdtaEdxMS0xMDN1VHVQOTA3NkFyd3gw +LTI1Nm5ad2M0NjA2aWtDSzUtNDUyS2VzdzM1NjhFT29JNC00NjFQbDc3 + diff --git a/Ch3/datasets/spam/spam/00136.faa39d8e816c70f23b4bb8758d8a74f0 b/Ch3/datasets/spam/spam/00136.faa39d8e816c70f23b4bb8758d8a74f0 new file mode 100644 index 000000000..ee4a111e8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00136.faa39d8e816c70f23b4bb8758d8a74f0 @@ -0,0 +1,40 @@ +From donaldbae@purplehotel.com Wed Aug 28 11:04:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 2E49A44155 + for ; Wed, 28 Aug 2002 06:04:09 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 11:04:09 +0100 (IST) +Received: from mgci.com (box1.mpowercom.net [208.57.0.10]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7RL6YZ25820 for + ; Tue, 27 Aug 2002 22:06:34 +0100 +Date: Tue, 27 Aug 2002 22:06:34 +0100 +Message-Id: <200208272106.g7RL6YZ25820@dogma.slashnull.org> +Received: (qmail 13575 invoked by uid 0); 27 Aug 2002 21:06:31 -0000 +Received: from unknown (HELO donaldbae) (208.57.45.218) by mgci.com with + SMTP; 27 Aug 2002 21:06:31 -0000 +From: Donald Bae +To: licensing@internet.com +Reply-To: donaldbae@purplehotel.com +MIME-Version: 1.0 +Subject: +Content-Type: text/html; charset=us-ascii + + +ÐÏࡱá Worldwide* +Great Restaurants, Shopping & Activities +FEMA #IL-0458 and ADA Compliant + +Contact Riz Bhatti @ 1847-677-1234 ext. 6884 or +Donald Bae @ 1847-677-1234 ext. 6880 +Take a virtual tour of our hotel @  HYPERLINK "http://www.radisson-chicago.com" www.radisson-chicago.com + + +December 2001 Customer Satisfaction Survey-Radisson Worldwide Hotels and Resorts + EMBED MS_ClipArt_Gallery.5  + + + + diff --git a/Ch3/datasets/spam/spam/00137.09969121c8540730f1020b5a700b4c42 b/Ch3/datasets/spam/spam/00137.09969121c8540730f1020b5a700b4c42 new file mode 100644 index 000000000..2fe7fa3dc --- /dev/null +++ b/Ch3/datasets/spam/spam/00137.09969121c8540730f1020b5a700b4c42 @@ -0,0 +1,383 @@ +From nt@insiq.us Wed Aug 28 11:04:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 5E91643F9B + for ; Wed, 28 Aug 2002 06:04:41 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 11:04:41 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g7RN3YZ30030 for ; Wed, 28 Aug 2002 00:03:34 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Tue, 27 Aug 2002 19:04:28 -0400 +Subject: The Best Critical Illness Policy on the Market +To: +Date: Tue, 27 Aug 2002 19:04:28 -0400 +From: "IQ - National Travelers" +Message-Id: <6337201c24e1e$187bff00$6b01a8c0@insuranceiq.com> +MIME-Version: 1.0 +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJOB/TfG9ReXL0jTPK/ixLuiOhG/w== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 27 Aug 2002 23:04:28.0843 (UTC) FILETIME=[189887B0:01C24E1E] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_428CD_01C24DE6.6DD2E5F0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_428CD_01C24DE6.6DD2E5F0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + The best critical illness product on the market. Period. + National Travelers Life Insurance Company + + + Immediate Payment Upon Diagnosis! + 15 valuable lifetime benefits + +100% of the Face Amount +Heart Attack Stroke Invasive Cancer HIV (for Medical +Personnel) +Paralysis Organ Transplant Severe Burns Loss of +Independent Living +Terminal Illness Kidney Failure Blindness Death By Any +Cause + +25% of the Face Amount +Coronary Artery Bypass Non-invasive Cancer + +10% of the Face Amount +Coronary Angioplasty + + +Worksite Marketing Individual Sales + +? Guaranteed Issue for Groups of 25+ ? Up to $1,000,000 maximum + +? Electronic Enrollment ? Simplified Issue up to $100,000 +? Unlimited billing options ? Up to 75% advance + + Don't forget to ask about our matching retirement plan! +To learn more, please call us today! + 800-626-7980 +? or ? +Please fill out the form below for more information +Name: +Address: +City: State: Zip: +E-mail: +Phone: +Area of Interest: Worksite Individual Sales Both + Personal Producer Manager Number of Agents + + + + National Traveler's Life Co. +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.Insuranceiq.com/optout + + +Legal Notice + +------=_NextPart_000_428CD_01C24DE6.6DD2E5F0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +The Best Critical Illness Policy on the Market + + + + + =20 + + + =20 + + +

    3D"National

    + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + +
    + 3D"Immediate
    =20 + 3D"15
    =20 + =20 + + =20 + + + =20 + + + + + + =20 + + + + + + =20 + + + + + + =20 + + + =20 + + + =20 + + + + =20 + + + =20 + + + =20 + + +
    100% of the Face = +Amount
    Heart = +AttackStrokeInvasive = +CancerHIV (for Medical = +Personnel)
    ParalysisOrgan TransplantSevere BurnsLoss of Independent = +Living
    Terminal IllnessKidney FailureBlindnessDeath By Any = +Cause
    25% of the Face = +Amount
    Coronary Artery = +BypassNon-invasive = +Cancer
    10% of the Face Amount
    Coronary = +Angioplasty
    +  
    + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + +
    Worksite MarketingIndividual Sales
    • Guaranteed Issue for Groups of = +25+• Up to $1,000,000 = +maximum
    • Electronic = +Enrollment• Simplified Issue up to = +$100,000
    • Unlimited billing = +options• Up to 75% advance
    +  
    +
    3D"Don't
    + + To learn more, please call us today!
    + 3D"800-626-7980"
    + — or —
    +
    =20 + + =20 + + + + + +
    + =20 + + + =20 + + + + =20 + + + + =20 + + + + + + + + =20 + + + + =20 + + + + =20 + + + + + =20 + + + + + =20 + + + + =20 + + + +
    Please fill out the form below for more = +information
    Name:
    Address:
    City: State: Zip:
    E-mail:
    Phone:
    Area of Interest: =20 + + Worksite      =20 + + Individual Sales =20 + + Both =20 +
      =20 + + Personal Producer    =20 + + Manager =20 + + Number of Agents = +=20 +
     
     =20 + =20 + =20 + =20 +
    +
    +
    +
    3D"National
    +
    =20 +

    We = +don't want anyone=20 + to receive our mailings who does not wish to. This is = +professional communication=20 + sent to insurance professionals. To be removed from this mailing = +list,=20 + DO NOT REPLY to this message. Instead, go here: =20 + http://www.Insuranceiq.com/optout

    +
    +
    + Legal Notice=20 +
    + + + +------=_NextPart_000_428CD_01C24DE6.6DD2E5F0-- + diff --git a/Ch3/datasets/spam/spam/00138.c15973a4d40bed4333079296be2522ca b/Ch3/datasets/spam/spam/00138.c15973a4d40bed4333079296be2522ca new file mode 100644 index 000000000..48ffa3e92 --- /dev/null +++ b/Ch3/datasets/spam/spam/00138.c15973a4d40bed4333079296be2522ca @@ -0,0 +1,71 @@ +From maureen5w60@mixmail.com Wed Aug 28 11:04:57 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 7D9BD43F99 + for ; Wed, 28 Aug 2002 06:04:56 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 11:04:56 +0100 (IST) +Received: from mixmail.com (IDENT:squid@[210.90.110.70]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7S7BVZ14326 for + ; Wed, 28 Aug 2002 08:11:35 +0100 +Reply-To: +Message-Id: <026b34a08d1d$4638c0a2$7cc54de3@stkaxu> +From: +To: +Subject: Teach and Grow Rich +Date: Wed, 28 Aug 2002 00:57:23 +0600 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +Importance: Normal +Content-Transfer-Encoding: 8bit + + + Do You Want To Teach and Grow Rich? + + + + + +If you are a motivated and qualified communicator, I will personally train you to do 3 20 minutes presentations per day to qualify prospects that I can provide to you. We will demonstrate to you that you can make $400 a day part time using this system. Or, if you have 20 hours per week, as in my case, you can make in excess of $10,000 per week, as I am currently generating (verifiable, by the way). + +Plus I will introduce you to my mentor who makes well in excess of $1,000,000 annually. + +Many are called, few are chosen. This opportunity will be limited to one qualified individual per state. Make the call and call the 24 hour pre-recorded message number below. We will take as much or as little time as you need to see if this program is right for you. + + *** 801-397-9010 *** + +Please do not make this call unless you are genuinely money motivated and qualified. I need people who already have people skills in place and have either made large amounts of money in the past or are ready to generate large amounts of money in the future. Looking forward to your call. + + *** 801-397-9010 *** + + + + + + + + + + + + + + + + +_______________________________________________________________ +*To be taken out of this database: + secco44@poetic.com + + + + + +9059Dmel0-270bmbl15 +5677ZUad6-196gUSL4757Wrmh7-794oPGX9206MkEq3-551QUHl47 + diff --git a/Ch3/datasets/spam/spam/00139.b2a205ac25d7d907cdfb3f865dbae1ae b/Ch3/datasets/spam/spam/00139.b2a205ac25d7d907cdfb3f865dbae1ae new file mode 100644 index 000000000..709f265f3 --- /dev/null +++ b/Ch3/datasets/spam/spam/00139.b2a205ac25d7d907cdfb3f865dbae1ae @@ -0,0 +1,53 @@ +From newpsychic414@mail.ru Wed Aug 28 11:17:19 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 033CF43F99 + for ; Wed, 28 Aug 2002 06:17:19 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 11:17:19 +0100 (IST) +Received: from server2.luciano.co.kr ([61.253.17.131]) + by webnote.net (8.9.3/8.9.3) with SMTP id LAA04047 + for ; Wed, 28 Aug 2002 11:18:40 +0100 +From: newpsychic414@mail.ru +Received: from mxs.mail.ru (unverified [200.35.86.229]) by server2.luciano.co.kr + (EMWAC SMTPRS 0.83) with SMTP id ; + Mon, 05 Aug 2002 22:53:28 +0900 +Message-ID: <0000047b4e66$00005044$0000547b@mxs.mail.ru> +To: +Subject: Find Peace, Harmony, Tranquility, And Happiness Right Now! +Date: Mon, 05 Aug 2002 08:51:39 -1700 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + diff --git a/Ch3/datasets/spam/spam/00175.e672ac062c93c15915d4d264c4282b47 b/Ch3/datasets/spam/spam/00175.e672ac062c93c15915d4d264c4282b47 new file mode 100644 index 000000000..b6cd67ad1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00175.e672ac062c93c15915d4d264c4282b47 @@ -0,0 +1,58 @@ +From yvillas@bignet.net Mon Sep 2 12:19:02 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 0573E44156 + for ; Mon, 2 Sep 2002 07:18:47 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:18:47 +0100 (IST) +Received: from postal.todays-tech.com (mail.todays-tech.com [208.18.51.9]) + by webnote.net (8.9.3/8.9.3) with SMTP id UAA19875 + for ; Sat, 31 Aug 2002 20:01:52 +0100 +From: yvillas@bignet.net +Received: (qmail 12986 invoked from network); 30 Aug 2002 19:37:02 -0000 +Received: from unknown (HELO bignet.net.bignet.mail1.psmtp.com) (216.78.29.166) + by mail.todays-tech.com with SMTP; 30 Aug 2002 19:37:02 -0000 +Message-ID: <0000351602c7$00001b86$00005727@bignet.net.bignet.mail1.psmtp.com> +To: +Subject: Up to $1,500.00 Part time 22311 +Date: Fri, 30 Aug 2002 15:39:23 -1600 +MIME-Version: 1.0 +X-Priority: 3 +X-MSMail-Priority: Normal +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + +

    Check o= +ut our $1,000.00 internet challenge!


    +\tab \tab

    \'b7 What if you could have a protected job that allows yo= +u to work as
    +little as two hours a week and it still pays you up to $800.00 every week = +for the next 20 years? Well - Here it is!

    Take our $1,000.00 online= + challenge!


    +\tab \tab


    +\tab \tab


    +\tab \tab Check it out= +

    +\tab \tab \tab

    +\tab \tab \tab

    +\tab \tab \tab

    +\tab \tab


    +
    +
    +
    +
    +

    The sender of this message has stated its assurance that the sender com= +plies with all state guidelines and codes regarding UCE. This transmittal = +is specifically not intended for residents of the state of Washington. If = +you wish to opt out of receiving of this message in the future, please +href=3D"http://www.bti-marketing.net/remove.html">click here an= +d enter your email address. Thanks for your positive assistance.
    +
    +
    +
    + + diff --git a/Ch3/datasets/spam/spam/00176.79f82496c612ea28f45f13ca5c47f8c2 b/Ch3/datasets/spam/spam/00176.79f82496c612ea28f45f13ca5c47f8c2 new file mode 100644 index 000000000..49e5ccadf --- /dev/null +++ b/Ch3/datasets/spam/spam/00176.79f82496c612ea28f45f13ca5c47f8c2 @@ -0,0 +1,77 @@ +From wo5iugi2t4189@yahoo.com Mon Sep 2 12:19:14 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 734D944155 + for ; Mon, 2 Sep 2002 07:19:05 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:19:05 +0100 (IST) +Received: from imf08bis.bellsouth.net (mail108.mail.bellsouth.net [205.152.58.48]) + by webnote.net (8.9.3/8.9.3) with ESMTP id FAA22334 + for ; Sun, 1 Sep 2002 05:10:12 +0100 +Received: from server.plesales.com ([65.81.184.147]) + by imf08bis.bellsouth.net + (InterMail vM.5.01.04.19 201-253-122-122-119-20020516) with ESMTP + id <20020901040739.IENI18615.imf08bis.bellsouth.net@server.plesales.com>; + Sun, 1 Sep 2002 00:07:39 -0400 +Received: from mx1.mail.yahoo.com (ACC30225.ipt.aol.com [172.195.2.37]) by server.plesales.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id M4ZWD88Q; Sat, 31 Aug 2002 17:40:35 -0400 +Message-ID: <00000c981b9d$0000764d$00007599@mx1.mail.yahoo.com> +To: +Cc: , , + , , + , , + , , , + +From: "Nicole" +Subject: Herbal Viagra 30 day trial.... CRUA +Date: Sat, 31 Aug 2002 14:24:25 -1900 +MIME-Version: 1.0 +Reply-To: wo5iugi2t4189@yahoo.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + +

    +
    + + + + + + + + + +
    + +
    + +
    + + diff --git a/Ch3/datasets/spam/spam/00140.eba666846fa0a138a90aeef51a627022 b/Ch3/datasets/spam/spam/00140.eba666846fa0a138a90aeef51a627022 new file mode 100644 index 000000000..e92491569 --- /dev/null +++ b/Ch3/datasets/spam/spam/00140.eba666846fa0a138a90aeef51a627022 @@ -0,0 +1,71 @@ +From social-admin@linux.ie Wed Aug 28 14:26:08 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 9EF6743F99 + for ; Wed, 28 Aug 2002 09:26:07 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 14:26:07 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SDICZ25800 for + ; Wed, 28 Aug 2002 14:18:12 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id OAA28046; Wed, 28 Aug 2002 14:18:03 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from byron.heanet.ie (byron.heanet.ie [193.1.219.90]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id OAA27997 for ; + Wed, 28 Aug 2002 14:17:55 +0100 +Received: from [211.251.139.129] (helo=64.3.45.122) by byron.heanet.ie + with smtp (Exim 4.05) id 17k2hm-00016W-00 for social@linux.ie; + Wed, 28 Aug 2002 14:17:55 +0100 +Received: from 152.74.145.157 ([152.74.145.157]) by hd.regsoft.net with + esmtp; Aug, 28 2002 9:16:46 AM +0600 +Received: from 87.15.78.89 ([87.15.78.89]) by pet.vosn.net with local; + Aug, 28 2002 8:09:28 AM +0600 +Received: from 105.183.205.243 ([105.183.205.243]) by + smtp-server1.cfl.rr.com with QMQP; Aug, 28 2002 6:59:50 AM +0600 +From: Kelly Carpelli +To: social@linux.ie +Cc: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Wed, 28 Aug 2002 09:17:55 -0400 +X-Mailer: Microsoft Outlook IMO Build 9.0.2416 (9.0.2910.0) +X-Priority: 1 +Message-Id: +Subject: [ILUG-Social] my webcam is on babe! +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group social events +X-Beenthere: social@linux.ie + +Hello, my name is Kelly, I am an 18 year old swimming instructor from Longbeach. I am intelligent, sexy and discreet. I love to laugh and have fun. Like most young girls, i like to go out with my friends and dance all night. When I'm home and have nothing to do, I love to chat and be naughty n naked on my webcam. + +Get a chance to catch me "LIVE" on my webcam. I'm waiting for you.... + +http://www.site-personals.com <---click and access me instantly hunnie;) + +later baby, +mmwa! + + + + + + + + + + + +ewidvtdksrvaptnjsvsgeqcpafu + +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00141.c30e993ea9a98743b0a98733bdfba8c2 b/Ch3/datasets/spam/spam/00141.c30e993ea9a98743b0a98733bdfba8c2 new file mode 100644 index 000000000..8a929f547 --- /dev/null +++ b/Ch3/datasets/spam/spam/00141.c30e993ea9a98743b0a98733bdfba8c2 @@ -0,0 +1,73 @@ +From allcontacts-bounce@briefs.ein.cz Wed Aug 28 15:29:15 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id BCE1D44155 + for ; Wed, 28 Aug 2002 10:29:14 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 15:29:14 +0100 (IST) +Received: from bay.ein.cz (bay.ein.cz [62.24.69.193]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7SEMqZ27998 for + ; Wed, 28 Aug 2002 15:22:52 +0100 +Received: from oak.ein.cz (oak.ein.cz [62.24.69.194]) by bay.ein.cz + (Postfix) with ESMTP id 2E591135B8; Wed, 28 Aug 2002 15:59:13 +0200 (CEST) +Received: by oak.ein.cz (Postfix, from userid 1002) id F3B511BEA0; + Wed, 28 Aug 2002 15:58:49 +0200 (CEST) +From: EIN News +To: EIN Media +Subject: Iraq Today Daily News - FREE Trial +X-Author: pe@einmedia.com +Message-Id: <20020828135844.C27501BE9F@oak.ein.cz> +Date: Wed, 28 Aug 2002 15:58:44 +0200 (CEST) +Sender: allcontacts-bounce@briefs.ein.cz +Errors-To: allcontacts-bounce@briefs.ein.cz +Precedence: bulk + +Dear Sir/Madam, + +My name is Petr Stanek and I am managing the Iraq Today +news service (www.europeaninternet.com/iraq). Iraq Today +contains hourly updated breaking news headlines, exchange rates, +market news and other important information. + +You and your associates can have a FREE TRIAL +SUBSCRIPTION to Iraq Today. + +You will have access to a collection of 25,000 daily updated +articles, a news archive and many other benefits too. + +Once again, this trial is FREE. To subscribe, just reply to this +e-mail or sign up at: +http://www.europeaninternet.com/login/affiliate_register.php3 + +A partial list of current EIN subscribers can be found at: +http://www.europeaninternet.com/mediakit/ + +If you have any questions, comments, or need assistance signing +up, please contact us personally by either writing to +helpdesk@europeaninternet.com or simply replying to this email. + +Please feel free to forward this offer to any of your colleagues. + +Best regards, + +Petr Stanek +Subscription Department +EIN News + + + + + + + + + + + +To be removed please reply to: remove@europeaninternet.com + + + + diff --git a/Ch3/datasets/spam/spam/00142.eddc7114a8566cbf83fa8210bf0d3603 b/Ch3/datasets/spam/spam/00142.eddc7114a8566cbf83fa8210bf0d3603 new file mode 100644 index 000000000..1d9119a98 --- /dev/null +++ b/Ch3/datasets/spam/spam/00142.eddc7114a8566cbf83fa8210bf0d3603 @@ -0,0 +1,120 @@ +From tdbannie@aol.com Wed Aug 28 15:39:21 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id C0FC743F9B + for ; Wed, 28 Aug 2002 10:39:20 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 15:39:20 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id PAA05067 + for ; Wed, 28 Aug 2002 15:40:42 +0100 +Received: from 200.168.37.246 (router.tg.com.pl [213.25.81.1]) + by smtp.easydns.com (Postfix) with SMTP id 544BA2BB8D + for ; Wed, 28 Aug 2002 10:40:38 -0400 (EDT) +Received: from 11.139.74.233 ([11.139.74.233]) by n7.groups.yahoo.com with NNFMP; Aug, 28 2002 7:39:29 AM -0800 +Received: from rly-xl04.mx.aol.com ([161.143.46.72]) by m10.grp.snv.yahoo.com with QMQP; Aug, 28 2002 6:38:31 AM -0200 +Received: from ssymail.ssy.co.kr ([113.236.31.212]) by a231242.upc-a.chello.nl with local; Aug, 28 2002 5:32:12 AM -0100 +Received: from unknown (HELO da001d2020.lax-ca.osd.concentric.net) (194.29.209.49) by f64.law4.hotmail.com with QMQP; Aug, 28 2002 4:28:12 AM +1100 +From: jessica +To: zzzz@spamassassin.taint.org +Cc: +Subject: Re: Here is your Free Access +Sender: jessica +Mime-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Wed, 28 Aug 2002 07:40:40 -0700 +X-Mailer: AOL 7.0 for Windows US sub 118 +Message-Id: <20020828144038.544BA2BB8D@smtp.easydns.com> + +################################### + + FREE Adult Lifetime Membership + Limited Time Offer!!! + +################################### + +YOUR INSTANT ACCESS PASSWORD +LOGIN NAME: zzzz@spamassassin.taint.org +PASSWORD: AcKWGy4L + +5 of the Best Adult Sites on the Internet for FREE! + +--------------------------- + +NEWS 08/28/02 +Over 3.1 Million Members have signed up for FREE, Last month 229,947 +New Members signed up for Free with the limited time offer. +Are you a FREE Member yet??? + +--------------------------- + +Our Membership FAQ + +Q. Why are you offering free access to 5 adult membership sites for free? + +A. We have advertisers that pay us for ad space so you don't have to +pay for a membership. + +Q. Is it true that your membership is Free for life? +A. Absolutely, you'll never have to pay a cent the advertisers do. + +Q. Do I have to sign up for all 5 FREE membership sites? +A. No, just one to get access to all of them. + +Q. Why do I have to give my Credit Card Information? +A. It's for age verification purposes only and you will not be charged. + If you don't believe us, just read their terms and conditions. + +Q. How do I get started? +A. Click on one of the links below to become a Free member. + +--------------------------- + +# 5. > Adults Farm +http://80.71.66.8/farm/?aid=993751 +Girls and Animals Getting Freaky....FREE Lifetime Membership!! + +# 4. > Sexy Celebes +http://80.71.66.8/celebst/?aid=993751 +Thousands Of XXX Celebes doing it...FREE Lifetime Membership!! + +# 3. > Play House Porn +http://80.71.66.8/play/?aid=993751 +Live Feeds From 60 Sites And Web Cams...FREE Lifetime Membership!! + +# 2. > Lesbian Lace +http://80.71.66.8/lesbian/?aid=993751 +Girls and Girls Getting Freaky! ...FREE Lifetime Membership!! + +# 1. > Teen Sex Fantasies +http://80.71.66.8/teen/?aid=993751 +Teen Schoolgirls, Live Sex Shows ...FREE Lifetime Membership!! + +-------------------------- + +Jennifer Simpson, Miami, FL +Your FREE lifetime membership has entertained my boyfriend and I for +the last two years! Your Adult Sites are the best on the net! + +Joe Morgan Manhattan, NY +Your live sex shows and live sex cams are unbelievable. The best part +about your porn sites, is that they're absolutely FREE! + +-------------------------- + + +Removal Instructions: +You have received this advertisement because you have opted in to +receive free adult internet offers and specials through our affiliated +websites. If you do not wish to receive further emails or have received +the email in error you may opt-out of our database here: +http://80.71.66.8/optout/index.html Please allow 24 hours for removal. + +This e-mail is sent in compliance with the Information Exchange +Promotion and Privacy Protection Act. section 50 marked as +'Advertisement' with valid 'removal' instruction. + +bdyjkpbwheotewwcloiveajvkidto + diff --git a/Ch3/datasets/spam/spam/00143.13c0751d4b9f10098bb3ac85a435d884 b/Ch3/datasets/spam/spam/00143.13c0751d4b9f10098bb3ac85a435d884 new file mode 100644 index 000000000..d2dd1906e --- /dev/null +++ b/Ch3/datasets/spam/spam/00143.13c0751d4b9f10098bb3ac85a435d884 @@ -0,0 +1,94 @@ +From lu5guxf4c4149@yahoo.com Wed Aug 28 15:39:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id E449C43F99 + for ; Wed, 28 Aug 2002 10:39:19 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 15:39:19 +0100 (IST) +Received: from pccityny.net (h-66-134-24-39.NYCMNY83.covad.net [66.134.24.39]) + by webnote.net (8.9.3/8.9.3) with ESMTP id PAA05044 + for ; Wed, 28 Aug 2002 15:34:51 +0100 +Received: from [172.191.136.24] (HELO mx1.mail.yahoo.com) + by pccityny.net (CommuniGate Pro SMTP 3.4.3) + with ESMTP id 2075992; Wed, 28 Aug 2002 10:24:55 -0400 +Message-ID: <00002f296eae$000032fe$00005274@mx1.mail.yahoo.com> +To: +Cc: , , + , , , + , , , + , +From: "Erica" +Subject: Toners and inkjet cartridges for less.... NOAZ +Date: Wed, 28 Aug 2002 07:35:38 -1900 +MIME-Version: 1.0 +Reply-To: lu5guxf4c4149@yahoo.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +
    + +
    + +

    +

    Tremendous Savings +on Toners, 

    +

    +Inkjets, FAX, and Thermal Replenishables!!

    +

    Toners 2 Go +is your secret +weapon to lowering your cost for High Quality, +Low-Cost printer +supplies!  We have been in the printer +replenishables business since 1992, +and pride ourselves on rapid response and outstanding +customer service.  +What we sell are 100% compatible replacements for +Epson, Canon, Hewlett Packard, +Xerox, Okidata, Brother, and Lexmark; products that +meet and often exceed +original manufacturer's specifications.

    +

    Check out these +prices!

    +

            Epson Stylus +Color inkjet cartridge +(SO20108):     Epson's Price: +$27.99     +Toners2Go price: $9.95!

    +

           HP +LaserJet 4 Toner Cartridge +(92298A):           = +; +HP's +Price: +$88.99            +Toners2Go + price: $41.75!

    +

     

    +

    Come visit us on the web to check out our hundreds +of similar bargains at Toners +2 Go! +

    + +
    + + request to be excluded by visiting HERE
    + +
    + +beverley + + + + diff --git a/Ch3/datasets/spam/spam/00144.4eeba2f228a8658e0d2e3a64764f4f31 b/Ch3/datasets/spam/spam/00144.4eeba2f228a8658e0d2e3a64764f4f31 new file mode 100644 index 000000000..b40d433ae --- /dev/null +++ b/Ch3/datasets/spam/spam/00144.4eeba2f228a8658e0d2e3a64764f4f31 @@ -0,0 +1,50 @@ +From loki@mymail.dk Wed Aug 28 18:06:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id C0C6343F99 + for ; Wed, 28 Aug 2002 12:46:32 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 17:46:32 +0100 (IST) +Received: from mymail.dk ([67.36.72.129]) + by webnote.net (8.9.3/8.9.3) with SMTP id RAA05587; + Wed, 28 Aug 2002 17:39:48 +0100 +Date: Wed, 28 Aug 2002 17:39:48 +0100 +From: loki@mymail.dk +Reply-To: +Message-ID: <008e76e11ecb$1525a3d3$3bd32da2@okgpnw> +To: dsi3@yahoo.com +Subject: WORK FROM HOME. WE ARE HIRING +MiME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: eGroups Message Poster +Importance: Normal +Content-Transfer-Encoding: 8bit + +Help wanted. We are a 14 year old fortune 500 company, that is +growing at a tremendous rate. We are looking for individuals who +want to work from home. + +This is an opportunity to make an excellent income. No experience +is required. We will train you. + +So if you are looking to be employed from home with a career that has +vast opportunities, then go: + +http://www.basetel.com:27000/wealthnow + +We are looking for energetic and self motivated people. If that is you +than click on the link and fill out the form, and one of our +employement specialist will contact you. + +To be removed from our link simple go to: + +http://www.basetel.com:27000/remove.html + + +7227aeeO9-622YVDD8442BJPk2-748ZYrZ8462VnMG1-197fVVA2035gqEj3-l57 + diff --git a/Ch3/datasets/spam/spam/00145.0ec326fee0570953d684e40edd3fa7b8 b/Ch3/datasets/spam/spam/00145.0ec326fee0570953d684e40edd3fa7b8 new file mode 100644 index 000000000..824097595 --- /dev/null +++ b/Ch3/datasets/spam/spam/00145.0ec326fee0570953d684e40edd3fa7b8 @@ -0,0 +1,67 @@ +From hnplayboybaby69@site-personals.com Wed Aug 28 18:07:23 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id C922243F9B + for ; Wed, 28 Aug 2002 13:07:17 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 28 Aug 2002 18:07:17 +0100 (IST) +Received: from 202.57.96.78 (OL203-154.fibertel.com.ar [24.232.154.203]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7SH48Z01928 for + ; Wed, 28 Aug 2002 18:04:09 +0100 +Message-Id: <200208281704.g7SH48Z01928@dogma.slashnull.org> +Received: from unknown (148.179.169.246) by rly-yk05.mx.aol.com with QMQP; + Aug, 28 2002 9:58:22 AM -0300 +Received: from [63.85.85.236] by smtp-server6.tampabay.rr.com with SMTP; + Aug, 28 2002 9:02:17 AM +0600 +Received: from a231242.upc-a.chello.nl ([96.216.72.224]) by + m10.grp.snv.yahoo.com with NNFMP; Aug, 28 2002 7:45:10 AM -0200 +Received: from unknown (HELO rly-xw01.mx.aol.com) (96.213.243.25) by + n9.groups.yahoo.com with asmtp; Aug, 28 2002 6:50:31 AM +1200 +From: Tiffany Grey +To: webmaster@efi.ie +Cc: +Subject: I just put my webcam on 4u hunnie=) +Sender: Tiffany Grey +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Wed, 28 Aug 2002 10:02:37 -0700 +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 +X-Priority: 1 + +Wanna see sexually curious teens playing with each other on webcam? + +http://www.yourtastybaby.net <----- our webcam link=) + +me and my dorm mate are eating each other out as we speak! + +see you soon baby, +-Tiffany + + + + + + + + + + + + + + + + + + + + + + + + + +kludlkaiplcqcnnaigaybaxhesrhltsp + diff --git a/Ch3/datasets/spam/spam/00146.e9b64856c0cd982a64f47c9ab9084287 b/Ch3/datasets/spam/spam/00146.e9b64856c0cd982a64f47c9ab9084287 new file mode 100644 index 000000000..4bbbd3ebc --- /dev/null +++ b/Ch3/datasets/spam/spam/00146.e9b64856c0cd982a64f47c9ab9084287 @@ -0,0 +1,234 @@ +From l1ttakeu@hotmail.com Thu Aug 29 10:56:02 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id C48FC43F99 + for ; Thu, 29 Aug 2002 05:56:00 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 10:56:00 +0100 (IST) +Received: from belmont.belmontheights.org (dsl-65-188-25-209.telocity.com [65.188.25.209]) + by webnote.net (8.9.3/8.9.3) with ESMTP id WAA06928 + for ; Wed, 28 Aug 2002 22:08:12 +0100 +Received: from mx02.hotmail.com ([200.184.93.31]) by belmont.belmontheights.org with Microsoft SMTPSVC(5.0.2195.2966); + Wed, 28 Aug 2002 16:09:33 -0500 +Message-ID: <000066657ac4$00001c54$00007d1d@mx02.hotmail.com> +To: +From: "Arnulfo Tobola" +Subject: Hey, rates are low. What are you waiting for? +Date: Thu, 29 Aug 2002 01:05:56 -0800 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2616 +Importance: Normal +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-OriginalArrivalTime: 28 Aug 2002 21:09:34.0937 (UTC) FILETIME=[35EBB490:01C24ED7] +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + +www.low-interest-rates.net + + + + + + +
    + + + +
    + + + + +
    + + + +
    +
    + + + + + + + + + + +
      = +    quotepoolmortgage™
    + + + + + +
    +
    +We're different and it's a difference that can save you time and money. +We can help you:

    + + + + + + + + + +
    Refinance to get a lower rate
    Cons= +olidate your high-interest debt
    Lowe= +r your monthly payments
    Get = +extra cash for a vacation
    Pay for= + tuition
    Start h= +ome improvements
    Purc= +hase a New Home
    + +
    +

    We understand that there are a lot of decisions to make wh= +en securing a mortgage loan or refinancing your current loan. That's why = +we have mortgage EXPERTS with years of EXPERIENCE to help you make the rig= +ht decisions. + +

    Credit doesn't have to be an issue either. Whether your c= +redit's perfect or less than perfect, we can help you find the best deal o= +n your home loan. Our quick, FREE, easy form will put you in contact with = +the top brokers in the business!
    +DON'T Miss The Opportunity to SAVE! + +

    Now is the perfect time to secure your mortgage loan. Wit= +h our country in a recession, the federal government keeps LOWERING INTERE= +ST RATES to help stimulate the economy. It is a win-win situation and it = +benefits mostly YOU, the homeowner! Try it now! + +

    There are NO excuses. There are great rates available, = +it's a simple form, and it costs you NOTHING to fill out for a FREE quote.= + + + +

    + + +

    + + + + + + + +
    PROCEED HERE 
    + + +
    + + + + + + + + +
    = +     Privacy | Unsubscribe
    + + +
    +

    + + +
    + + +
    + + +
    + + + + + diff --git a/Ch3/datasets/spam/spam/00147.1782d51354c31ea53db25ea927d5c51d b/Ch3/datasets/spam/spam/00147.1782d51354c31ea53db25ea927d5c51d new file mode 100644 index 000000000..31afe95d1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00147.1782d51354c31ea53db25ea927d5c51d @@ -0,0 +1,161 @@ +From hezf855@framesetup.com Thu Aug 29 10:56:13 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id EC78843F9B + for ; Thu, 29 Aug 2002 05:56:11 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 10:56:11 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id XAA07069 + for ; Wed, 28 Aug 2002 23:05:34 +0100 +From: hezf855@framesetup.com +Received: from framesetup.com (1Cust148.tnt15.det3.da.uu.net [67.217.14.148]) + by smtp.easydns.com (Postfix) with SMTP id 56E0C2D666 + for ; Wed, 28 Aug 2002 18:05:26 -0400 (EDT) +Subject: Huge natural tits +To: zzzz@spamassassin.taint.org +Date: Wed, 28 Aug 2002 18:48 -0400 +Mime-Version: 1.0 +Message-Id: <20020828220526.56E0C2D666@smtp.easydns.com> +Content-Type: text/html + +Big and big + + + + +
    +
    +
    +
    +
    +
    + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + MAIN PAGE
    +
    Huge big titties @ bigbigs.com!
    +
    + MORE SAMPLE PICS      MORE SAMPLE MOVIES      LIST OF GIRLS
    +
    +
    +
    +

     

    +

    CLICK + HERE to enlarge your PENIS 3-4 inches NATURALLY!!!

    +

     

    +
    Click + Here to be removed
    +


    +
    +
    +
    +
    +
    +
    +

    +
    +
    + + diff --git a/Ch3/datasets/spam/spam/00148.21c30154aa358d903c10c5d8a3ef6ffd b/Ch3/datasets/spam/spam/00148.21c30154aa358d903c10c5d8a3ef6ffd new file mode 100644 index 000000000..14b9dfed1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00148.21c30154aa358d903c10c5d8a3ef6ffd @@ -0,0 +1,70 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Thu Aug 29 10:57:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 4B44843F9B + for ; Thu, 29 Aug 2002 05:57:14 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 10:57:14 +0100 (IST) +Received: from TIPSMTP1.ADMANMAIL.COM (TIPSMTP1.ADMANMAIL.COM [209.216.124.212]) + by webnote.net (8.9.3/8.9.3) with ESMTP id DAA07921 + for ; Thu, 29 Aug 2002 03:56:31 +0100 +Message-Id: <200208290256.DAA07921@webnote.net> +Received: from tiputil1 (tiputil1.corp.tiprelease.com) by TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id <29.00000053@TIPSMTP1.ADMANMAIL.COM>; Wed, 28 Aug 2002 18:33:29 -0500 +Date: Wed, 28 Aug 2002 17:28:03 -0500 +From: Shannon +To: JM@NETNOTEINC.COM +Subject: Your Shipment Status +X-Info: 134085 +X-Info2: SGO +Mime-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + + FREE* cKbe fragrance + + + + + + +
    +

    Congratulations JM@NETNOTEINC.COM!

    + +

    Dear JM@NETNOTEINC.COM, + +

    You've been selected to receive a bottle of Calvin Klein's® cKbe - FREE*. + +

    Click here now for the scent that's great for both men and women. + +

    It's the perfect scent to wear for any occassion. It's light, and just a little citrusy - you'll love it for Summer! Click here now and we'll send this refreshing scent right out to you. + +

    With only a few bottles on hand, I know they won't last long. Guarantee your own good fortune - and click here to claim your very own bottle of Calvin Klein's® cKbe. + +

    JM@NETNOTEINC.COM act now and click here for a one time only chance! + +

    Sincerely, +
    +
    Lori Anderson
    +YourFreePresent.com + +

    P.S. Please feel free to forward this great offer to a friend! + +

    *All offers are based on 100% customer satisfaction. Yourfreepresent reserves the right to cancel this offer any time once quantities run out. A handling charge of $5.93 will be applied to each item. All merchandise and offers are based on first come first serve. Offer not valid in the state of California. +

    +T +
    + +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
    + diff --git a/Ch3/datasets/spam/spam/00149.c07359393107925a86798dd72d6a56b3 b/Ch3/datasets/spam/spam/00149.c07359393107925a86798dd72d6a56b3 new file mode 100644 index 000000000..1f63fea6f --- /dev/null +++ b/Ch3/datasets/spam/spam/00149.c07359393107925a86798dd72d6a56b3 @@ -0,0 +1,164 @@ +From egabriel@ant.eupvg.upc.es Thu Aug 29 10:57:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 7396244156 + for ; Thu, 29 Aug 2002 05:57:17 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 10:57:17 +0100 (IST) +Received: from www.jangmart.co.kr ([211.248.32.79]) + by webnote.net (8.9.3/8.9.3) with ESMTP id EAA08233 + for ; Thu, 29 Aug 2002 04:31:54 +0100 +Received: from relay.hk.linkage.net (host137-110.pool21757.interbusiness.it [217.57.110.137]) + by www.jangmart.co.kr (8.11.6/8.11.6) with SMTP id g7T32Do31535; + Thu, 29 Aug 2002 12:02:18 +0900 +Message-ID: <000019d21bce$00006fa2$00000073@relay.hk.linkage.net> +To: +From: "U.S. Conference Service" +Subject: New, easy to use web conferencing software +Date: Wed, 28 Aug 2002 20:15:37 -1900 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +New Web Technology + + + +

    +

    + + + +
    UNLIMITED WEB CON= +FERENCING +
    Subscribe to the Web Conference C= +enter for only $40.00 per month! + +
    +(Connects up to 15 participants at a time p= +lus audio charges)

    + + + + <= +/TABLE> +

    +

    +
  • Manage your meetings virtually on line +
  • Application sharing +
  • Multi-platform compatible (no software needed) +
  • Call anytime, from anywhere, to anywhere +
  • Unlimited usage for up to 15 participants (larger groups ava= +ilabale) +
  • Lowest rate $.18 cents per minunte for audio (toll charge= +s included) +
  • Quality, easy to use service +
  • Numerous interactive features
  • + + +
    FREE DEMO +

    +Eliminate or Reduce Travel Expense +
    +Try this on for savings... +and turn those unnecessary trips into problem solving and fact finding con= +ferences, +saving time and wear and tear on your overworked business staff. +
    +

    + + + +
    To find out more abo= +ut this revolutionary concept, +fill out the form below.
    +

    Required Input Field* +

    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    Name*
    Web + Address
    Company + Name*
    + State*
    Business + Phone*
    Home + Phone
    Email + Address*
    +

    +

    +

    + + + +

    + + diff --git a/Ch3/datasets/spam/spam/00150.f97c73fa56460a6afc6d9418ad76b5b5 b/Ch3/datasets/spam/spam/00150.f97c73fa56460a6afc6d9418ad76b5b5 new file mode 100644 index 000000000..756634411 --- /dev/null +++ b/Ch3/datasets/spam/spam/00150.f97c73fa56460a6afc6d9418ad76b5b5 @@ -0,0 +1,264 @@ +From fn@insiq.us Thu Aug 29 11:09:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 9362C4415C + for ; Thu, 29 Aug 2002 06:06:27 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 11:06:27 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g7SN4lZ14179 for ; Thu, 29 Aug 2002 00:04:47 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Wed, 28 Aug 2002 19:05:41 -0400 +Subject: Sometimes Less is More... +To: +Date: Wed, 28 Aug 2002 19:05:41 -0400 +From: "IQ - Financial Brokerage" +Message-Id: +MIME-Version: 1.0 +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJO0VOxg5hdC8xdQ/ugoGDZqvTK+Q== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 28 Aug 2002 23:05:41.0343 (UTC) FILETIME=[6E38E6F0:01C24EE7] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_84D25_01C24EAF.CD089410" + +This is a multi-part message in MIME format. + +------=_NextPart_000_84D25_01C24EAF.CD089410 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + Maximizer Select + Want to pay less for term insurance? +Find out how your clients can pay less by paying +more - - while you earn more commission. + Simplified Underwriting Advanced Commissions + Return of Premium Renewal Commissions +Call today to find out how +CNA's Maximizer Select will work for you! + 800-397-9999 +Please fill out the form below for more information +Name: +E-mail: +Phone: +City: State: + + + _____ + + + +CNA and CNA Life are registered service marks, trade names and domain +names and CNA Maximizer is a registered service mark of CNA Financial +Corporation. CNA life insurance products are underwritten by Valley +Forge Life Insurance Company, one of the CNA companies. Policy form +numbers: V100-1201-A, V100-1202-A, V100-1203-A, V100-1204-A Series. +These products and features are not available in all states. For +Producer use only. + +We don't want anybody to receive our mailing who does not wish to +receive them. This is a professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: http://www.insuranceiq.com/optout + +Legal Notice + +------=_NextPart_000_84D25_01C24EAF.CD089410 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Sometimes Less is More... + + + +=20 +
    All information g= +iven herein is strictly confidential and will not be re-distributed + for any reason other than for the specific use intended.<= +br> + To be removed from our distribution lists, please + Click + here..
    + =20 + + +
    + + =20 + + + + +
    3D'Maximizer +
    3D'Want
    + + =20 + + +
    =20 + Find out how your clients can pay = +less by paying
    more - - while you earn more commission.
    +
    + + =20 + + + + + + =20 + + + + + +
    Simplified = +Underwriting Advanced Commissions
    Return of = +Premium Renewal = +Commissions
    + + =20 + + + =20 + + +
    + Call today to find out = +how
    CNA's Maximizer Select will work for you!
    +
    + + =20 + + +
    + + =20 + + + + + +
    + =20 + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + + + + =20 + + + +
    Please fill out the form below for more = +information
    Name:
    E-mail:
    Phone:
    City: State:
     =20 + =20 + =20 + =20 +
    +
    +
    + + =20 + + + =20 + + +
    =20 +

    + =20 +
    CNA=20 + and CNA Life are registered service marks, trade names and = +domain=20 + names and CNA Maximizer is a registered service mark of CNA = +Financial=20 + Corporation. CNA life insurance products are underwritten by = +Valley=20 + Forge Life Insurance Company, one of the CNA companies. = +Policy form=20 + numbers: V100-1201-A, V100-1202-A, V100-1203-A, V100-1204-A = +Series.=20 + These products and features are not available in all states. = +For Producer=20 + use only.
    +
    + We don't want anybody to receive our mailing who does not = +wish to=20 + receive them. This is a professional communication sent to = +insurance=20 + professionals. To be removed from this mailing list, DO NOT = +REPLY=20 + to this message. Instead, go here: http://www.insuranceiq.com/op= +tout
    + Legal = +Notice
    =20 +
    +
    +=20 + + + +------=_NextPart_000_84D25_01C24EAF.CD089410-- + diff --git a/Ch3/datasets/spam/spam/00151.34bbdbf089edc6f58080753a166a3cfc b/Ch3/datasets/spam/spam/00151.34bbdbf089edc6f58080753a166a3cfc new file mode 100644 index 000000000..73f02893d --- /dev/null +++ b/Ch3/datasets/spam/spam/00151.34bbdbf089edc6f58080753a166a3cfc @@ -0,0 +1,52 @@ +From iiu-owner@taint.org Thu Aug 29 11:09:11 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 68D8447C7C + for ; Thu, 29 Aug 2002 06:06:30 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 11:06:30 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7T903Z05782 for + ; Thu, 29 Aug 2002 10:00:03 +0100 +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7T8xnZ05757 for + ; Thu, 29 Aug 2002 09:59:49 +0100 +Received: from 200.161.16.132 (200-168-105-180.dsl.telesp.net.br + [200.168.105.180]) by webnote.net (8.9.3/8.9.3) with SMTP id JAA09326 for + ; Thu, 29 Aug 2002 09:59:48 +0100 +Message-Id: <200208290859.JAA09326@webnote.net> +Received: from unknown (185.176.53.24) by rly-yk05.mx.aol.com with local; + Aug, 29 2002 09:42:27 +0700 +Received: from rly-yk04.mx.aol.com ([99.100.131.137]) by + rly-xw01.mx.aol.com with NNFMP; Aug, 29 2002 08:34:24 -0100 +Received: from unknown (189.234.223.231) by rly-xr02.mx.aol.com with esmtp; + Aug, 29 2002 07:52:39 +1100 +Received: from unknown (201.187.168.97) by smtp-server1.cfl.rr.com with + QMQP; Aug, 29 2002 06:52:43 -0000 +From: UK PRANK CALLS +To: Joker@webnote.net +Cc: +Subject: Play a Hilarious Phone Prank +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Thu, 29 Aug 2002 10:00:10 +0100 +X-Mailer: Microsoft Outlook Build 10.0.2616 +X-Priority: 1 +Sender: iiu-owner@taint.org +Errors-To: iiu-owner@taint.org +X-Beenthere: iiu@iiu.taint.org +X-Mailman-Version: 2.0.10 +Precedence: bulk +List-Unsubscribe: , + +List-Id: Irish Internet Users +List-Post: +List-Help: +List-Subscribe: , + +List-Archive: + +Wind up your mates today! Please visit http://ukprankcalls.com + diff --git a/Ch3/datasets/spam/spam/00152.8ed8aaed94054e507af5b9c760dd7be6 b/Ch3/datasets/spam/spam/00152.8ed8aaed94054e507af5b9c760dd7be6 new file mode 100644 index 000000000..0a0c66def --- /dev/null +++ b/Ch3/datasets/spam/spam/00152.8ed8aaed94054e507af5b9c760dd7be6 @@ -0,0 +1,71 @@ +From besthomebiz@subdimension.com Thu Aug 29 11:09:09 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 6D1F447C7B + for ; Thu, 29 Aug 2002 06:06:29 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 11:06:29 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7T6rfZ02393 for + ; Thu, 29 Aug 2002 07:53:41 +0100 +Received: from abc194016.com ([200.164.227.2]) by webnote.net + (8.9.3/8.9.3) with SMTP id HAA08908 for ; Thu, + 29 Aug 2002 07:53:51 +0100 +Message-Id: <200208290653.HAA08908@webnote.net> +From: "Opt-inList" +Reply-To: stockbuyer@netzero.net +To: zzzz@spamassassin.taint.org +Date: Thu, 29 Aug 2002 03:06:23 -0500 +Subject: Everybody Gets Paid - No Recruiting Needed +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g7T6rfZ02393 +Content-Transfer-Encoding: 8bit + +Everybody gets paid. No recruiting required. + +Join and reserve a position for free now. +Program is 18 weeks old and it's paying. + +Everybody gets in line to get paid by all +the new people coming in (but it's NOT a +traditional straightline)...EVERYONE makes money... +and those that sponsor make more.... + + + +Click here to request for more information + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + +We belong to the same opt-in list. But if wish to have your email +address REMOVE from our database please click here + + + + diff --git a/Ch3/datasets/spam/spam/00153.6a5ffe584834ea334041ab958cadcadb b/Ch3/datasets/spam/spam/00153.6a5ffe584834ea334041ab958cadcadb new file mode 100644 index 000000000..7cef6c9d6 --- /dev/null +++ b/Ch3/datasets/spam/spam/00153.6a5ffe584834ea334041ab958cadcadb @@ -0,0 +1,89 @@ +From social-admin@linux.ie Thu Aug 29 11:17:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 94D9D43F9B + for ; Thu, 29 Aug 2002 06:17:24 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 11:17:24 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TAEvZ07842 for + ; Thu, 29 Aug 2002 11:14:57 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id LAA15991; Thu, 29 Aug 2002 11:13:51 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from byron.heanet.ie (byron.heanet.ie [193.1.219.90]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id LAA15946 for ; + Thu, 29 Aug 2002 11:13:43 +0100 +Received: from [200.164.227.2] (helo=qfgf94776.com) by byron.heanet.ie + with smtp (Exim 4.05) id 17kMJ2-0007g5-00 for social@linux.ie; + Thu, 29 Aug 2002 11:13:43 +0100 +From: "Opt-inList" +Reply-To: stockbuyer@netzero.net +To: social@linux.ie +Date: Thu, 29 Aug 2002 06:25:48 -0500 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Message-Id: +X-MIME-Autoconverted: from quoted-printable to 8bit by lugh.tuatha.org id + LAA15946 +Subject: [ILUG-Social] Everybody Gets Paid - No Recruiting Needed +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group social events +X-Beenthere: social@linux.ie +Content-Transfer-Encoding: 8bit + +Everybody gets paid. No recruiting required. + +Join and reserve a position for free now. +Program is 18 weeks old and it's paying. + +Everybody gets in line to get paid by all +the new people coming in (but it's NOT a +traditional straightline)...EVERYONE makes money... +and those that sponsor make more.... + + + +Click here to request for more information + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + +We belong to the same opt-in list. But if wish to have your email +address REMOVE from our database please click here + + + + +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00154.b6c448ccff434e2dbe2c7c200a36aa31 b/Ch3/datasets/spam/spam/00154.b6c448ccff434e2dbe2c7c200a36aa31 new file mode 100644 index 000000000..6ae8cd70e --- /dev/null +++ b/Ch3/datasets/spam/spam/00154.b6c448ccff434e2dbe2c7c200a36aa31 @@ -0,0 +1,58 @@ +From Kristian2025161@lancsmail.com Thu Aug 29 13:52:34 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id AD62D44155 + for ; Thu, 29 Aug 2002 08:52:33 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 13:52:33 +0100 (IST) +Received: from photo-diy.com.cn ([61.142.80.201]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7TCjbZ12597; Thu, 29 Aug 2002 13:45:38 + +0100 +Received: from babot.co.jp [212.237.159.194] by photo-diy.com.cn with + ESMTP (SMTPD32-7.11 ) id A4581A500BA; Thu, 29 Aug 2002 20:32:24 +0800 +Message-Id: <000000c958bd$000005d0$000008aa@ozbytes.net.au> +To: +From: "Maryln" +Subject: Get your OWN piece of history. +Date: Thu, 29 Aug 2002 08:45:22 -1600 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit + +On January 1st 2002, the European countries began +using the new Euro. Never before have so +many countries with such powerful economies united +to use a single currency. Get your piece of history +now! We would like to send you a FREE Euro +and a FREE report on world currency. Just visit +our site to request your Euro and Euro report: + +http://vicky.mothost.com/euro1/ + +In addition to our currency report, you can receive +our FREE INVESTMENT PACKAGE: + +* Learn how $10,000 in options will leverage $1,000,000 in +Euro Currency. This means even a small movement in the market +has huge profit potential. + +If you are over age 18 and have some risk capital, it's +important that you find out how the Euro will +change the economic world and how you can profit! + +http://vicky.mothost.com/euro1/ + +$10,000 minimum investment + +Please carefully evaluate your financial position before +trading. Only risk capital should be used. + +http://vicky.mothost.com/euro1/optout.html To OptOut. + + + + + + diff --git a/Ch3/datasets/spam/spam/00155.1c37ce73590cc67186717a491ed0db5f b/Ch3/datasets/spam/spam/00155.1c37ce73590cc67186717a491ed0db5f new file mode 100644 index 000000000..a91a3fdd1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00155.1c37ce73590cc67186717a491ed0db5f @@ -0,0 +1,121 @@ +From ilug-admin@linux.ie Thu Aug 29 14:24:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id BEBB844156 + for ; Thu, 29 Aug 2002 09:24:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 14:24:28 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TDFuZ13645 for + ; Thu, 29 Aug 2002 14:15:56 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id OAA24204; Thu, 29 Aug 2002 14:14:01 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from relay.dub-t3-1.nwcgroup.com + (postfix@relay.dub-t3-1.nwcgroup.com [195.129.80.16]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id OAA24161 for ; Thu, + 29 Aug 2002 14:13:51 +0100 +Received: from YAHOO.COM (host-66-133-60-131.verestar.net [66.133.60.131]) + by relay.dub-t3-1.nwcgroup.com (Postfix) with SMTP id 2ECB070005 for + ; Thu, 29 Aug 2002 14:13:31 +0100 (IST) +From: "DR SAMUEL EBOKA" +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="ISO-8859-1" +Date: Wed, 28 Aug 2002 11:57:10 -1200 +Reply-To: "DR SAMUEL EBOKA" +Message-Id: <20020829131331.2ECB070005@relay.dub-t3-1.nwcgroup.com> +Subject: [ILUG] IMPORTANT. +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie +Content-Transfer-Encoding: 8bit + + +>>From the desk of: DR. SAMUEL EBOKA. +Tel No: Your Intl. Access Code + 873762692484 +Fax No: Your Intl. Access Code + 873762692485 +email : samueleboka2@email.com +Lagos, Nigeria. +Dear Sir, + +IMPORTANT. + +After due deliberation with my colleagues, We have decided to forward to +you this business proposal. We want a reliable +person who could assist us in the transfer the sum of Twenty Million, Five +Hundred Thousand United States Dollars ( +$20,500,000 ). Via International Bank Draft Cashable in any First World +Countries. + +This fund resulted from an over-invoiced bill from contracts awarded by us +under the budget allocation to our Ministry. This +bill has been approved for payment by the other concerned Ministries. The +contract has since been executed, +commissioned and the contractor was paid the actual cost of the contract. +We are left with the balance US$20.5M as part +of the over-invoiced amount which we have deliberated over estimated for +our own use. But under our protocol division, we +as civil servants are forbidden to operate or own foreign accounts. This +is why we are soliciting your assistance in this +manner and regard . + +As you may want to know and to make you less curious, I got your address +from adverts in the business directory . I am the +Chief Accountant/Internal Auditor of the Contract Award Committee ( CAC ) +of the Nigerian National Petroleum Corporation +( NNPC). This transaction is very much free from all sorts of RISKS and +TROUBLE from my Government. We the N.N.P.C. +Officials involved in this deal have put in many years in service to this +Ministry. We have been exercising patience for this +opportunity for so long and to most of us this is a life time opportunity +we cannot afford to miss. + +We have agreed to COMPENSATE you duly if agreement is reached by both of +us and I and one of my colleagues +involved in this deal will come to your country to arrange for our share, +upon the confirmation from you that the Certified +International Bank Draft has been Approved and Raised in your favor. + +Consequent upon your acceptance of this proposal, kindly confirm your +interest by Telephone to me, through my Direct Tel +No: +873-762-692484. (Please Call Direct, DO NOT add my country(234) and +City(1) codes ) . Your indication by revert +Telephone to me of your sincere and serious interest will enable me fax +you or brief you of the PROCEDURES FOR THIS +TRANSACTION. If my line is busy, please keep trying you will surely get +through. +NOTE: In the event of your inability to handle this transaction please +inform us so that we can look for another reliable +person who can assist in this respect. + +It might surprise you why we choose you and trusted you for this +transaction. Yes, we believe that good friends can be +discovered and business like this can not be realized without mutual +trust. This is why we have decided to trust you for this +transaction. Be further informed that everyone’s interest and +security had been considered before you were contacted, so be rest assured +and feel free to go into this transaction with +us. +But let Honesty and Trust be our watchword throughout this transaction and +your prompt reply will be highly appreciated. +Thank you, and God bless. + +Best Regards, + +DR. SAMUEL EBOKA. + +NOTE:- THAT YOU CAN USE THIS ALTERNATIVE EMAIL ADDRESSES: +samueleboka2@email.com , sameboka@uymail.com + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00156.0b541afe96820e3bb8f900b565608269 b/Ch3/datasets/spam/spam/00156.0b541afe96820e3bb8f900b565608269 new file mode 100644 index 000000000..4ac5412d6 --- /dev/null +++ b/Ch3/datasets/spam/spam/00156.0b541afe96820e3bb8f900b565608269 @@ -0,0 +1,171 @@ +From ne42@hotmail.com Thu Aug 29 15:19:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 89D5743F99 + for ; Thu, 29 Aug 2002 10:19:18 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 15:19:18 +0100 (IST) +Received: from mail1.cssc.com.cn ([61.139.94.7]) + by webnote.net (8.9.3/8.9.3) with ESMTP id PAA10655 + for ; Thu, 29 Aug 2002 15:16:23 +0100 +From: ne42@hotmail.com +Received: from fratellis.com (host217-34-165-130.in-addr.btopenworld.com [217.34.165.130]) by mail1.cssc.com.cn with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2650.21) + id R2XW55L0; Thu, 29 Aug 2002 20:16:14 +0800 +Message-ID: <000079a14518$00005dca$00003781@iepstein.com> +To: , , , + , , + +Cc: , , + , , , + +Subject: Attn: NORTON SYSTEMWORKS 2002 CLEARANCE SALE! VOJTGT +Date: Thu, 29 Aug 2002 08:18:32 -1600 +MIME-Version: 1.0 +Reply-To: ne42@hotmail.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Does Your Computer Need an Oil Change + + + + + + + + +
    Does Your Comp= +uter Need an Oil + Change?
    + + + + +
    N= +orton
    SystemWorks + 2002
    Professional + Edition
    + + + + +
    = +Made + by the Creators of the #1 Anti-Virus Software on the Market!<= +/b>
    + + + + + +
    This + UNBEATABLE software suite comes with EVERY + program you'll ever need to answer the problems or= + threats that your + computer faces each day of it's Life!

    Included in this magnificent deal + are the following programs:
    + + + + + +
    Norton + AntiVirus=FFFFFF99 2002 - THE #1 + ANTI-VIRUS PROTECION EVER!
    Norton Utilities=FFFFFF99 2002 + -
    DIAGNOSE ANY PROBLEM WI= +TH YOUR + SYSTEM!
    + Norton Ghost=FFFFFF99 2002 -
    MAKES + BACKING UP YOUR VALUABLE DATA EASY!
    + Norton CleanSweep=FFFFFF99 2002 -
    CLEANS + OUT EXCESS INTERNET FILE BUILDUP!
    + Norton WinFax=FFFFFF99 Basic -
    TURNS YOUR + CPU INTO A FAX MACHINE!
    +
    + GoBack=FFFFFFAE 3 Personal - HELPS + PREVENT YOU FROM MAKING ANY MISTAKES!
    + + + + + +
    *ALL + this has a retail price of $99.95*
    Buy + it + Now for ONLY $29.99!
    <= +i>with + Free Shipping - PLUS,
    Buy + Any 2 Items & GET 1 FREE! (Also + w/Free Shipping!)
    + + + + + +
    = +CLICK + HERE to Order NOW!
    +

    This Product is available NOW. = +When we +run out it's gone, so get it while it's HOT!

    + +

     

    +

     

    +

     

    + + + + +
    Your + email address was obtained from an opt-in list. Opt-in IAA (Internet + Advertising Association) Approved List Serial + Code FTRD4451.  If you wish to be unsubscribed from + this list, please Click + here. We do not condone spam in any shape or form. Thank You kin= +dly + for your cooperation.
    + + + + + + + diff --git a/Ch3/datasets/spam/spam/00157.52b0a260de7c64f539b0e5d16198b5bf b/Ch3/datasets/spam/spam/00157.52b0a260de7c64f539b0e5d16198b5bf new file mode 100644 index 000000000..eda65b47e --- /dev/null +++ b/Ch3/datasets/spam/spam/00157.52b0a260de7c64f539b0e5d16198b5bf @@ -0,0 +1,35 @@ +From IKE_EJOH@YAHOO.COM Thu Aug 29 15:40:40 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 12B5643F99 + for ; Thu, 29 Aug 2002 10:40:40 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 15:40:40 +0100 (IST) +Received: from 2mails71.com ([217.78.76.157]) + by webnote.net (8.9.3/8.9.3) with SMTP id PAA10752 + for ; Thu, 29 Aug 2002 15:33:45 +0100 +Message-Id: <200208291433.PAA10752@webnote.net> +From: "MR.IKE EJOH" +Reply-To: IKEEJOH@444.NET +To: zzzz@spamassassin.taint.org +Date: Wed, 28 Aug 2002 14:41:06 +0200 +Subject: YOUR ANTICIPATED ASSISTANT IS REQUIRED. +X-Priority: 1 +X-Mailer: Microsoft Outlook Express 5.00.2919.6900 DM +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +X-MIME-Autoconverted: from quoted-printable to 8bit by webnote.net id PAA10752 +Content-Transfer-Encoding: 8bit + +I am Mr.IKE EJOH. Bank Manager of Diamond Bank of Nigeria, Lagos Branch. I have urgent and very confidential business proposal for you. On June 6 1999 a FOREIGN Oil consultant/contractor with the FEDERAL MINISTRY OF AVIATIONMr. Barry Kelly made a numbered time (Fixed) Deposit for twelve calendar months, valued at US$25,000,000.00 (Twenty- five Million Dollars) in my branch. Upon maturity, I sent a routine notification to his forwarding address but got no reply. After a month, we sent a reminder and finally we discovered from his employers, the FEDERAL MINISTRY OF AVIATION that Mr. Barry Kelly died from an automobile accident. On further investigation, I found out that he died without making a WILL, and all attempts to trace his next of kin was fruitless. I therefore made further investigation and discovered that Mr. Barry Kelly did not declare any kin or relations in all his official documents, including his Bank Deposit paperwork in my Bank.This sum of US$25,000,000.00 is still sitting in my Bank and the interest is being rolled over with the principal sum at the end of each year. No one willever come forward to claim it.According to Nigerian Law, at the expiration of 6 (six) years, the money will revert to the ownership of the Nigerian Government if nobody applies to claim the fund. Consequently, i have just sucided in getting this fund sent to holland through a security company called GLOBAL& BASIC FINANCIAL COMPANY., I will like you to provide immediately your full names and address so that i will prepare the necessary documents and affidavits, which will put you in place as the owner of this fund in the security company. i shall employ the service of an Attorney for drafting and notarization of the changes and to obtain the necessary documents and letter of probate & administration in your favour. There is no risk at all as all the paperwork for this transaction will be done by the Attorney and my position as the Bran +ch Manager guarantees the successful execution of this transaction. If you are interested, please replyimmediately via the private email address . Upon your response, I shall then provide you with more details and relevant documents that will help you understand the transaction. Please observe utmost confidentiality, and be rest assured that this transaction would be most profitable for both of us because I shall require your assistance to invest my share in your country. + +Awaiting your urgent reply via my email: + +Thanks and regards. + +MR.IKE EJOH + + diff --git a/Ch3/datasets/spam/spam/00158.9c8bf53ed738031b4bfab819c4b3ef13 b/Ch3/datasets/spam/spam/00158.9c8bf53ed738031b4bfab819c4b3ef13 new file mode 100644 index 000000000..87f692210 --- /dev/null +++ b/Ch3/datasets/spam/spam/00158.9c8bf53ed738031b4bfab819c4b3ef13 @@ -0,0 +1,34 @@ +From giqq9dosuurty99@excite.com Thu Aug 29 15:51:15 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id CD88643F9B + for ; Thu, 29 Aug 2002 10:51:14 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 15:51:14 +0100 (IST) +Received: from proxy.nida.ac.th (proxy1.nida.ac.th [203.151.38.4] (may be + forged)) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7TElUZ16784 + for ; Thu, 29 Aug 2002 15:47:38 +0100 +Message-Id: <200208291447.g7TElUZ16784@dogma.slashnull.org> +Received: from 30.215.79.204 ([30.215.79.204]) by m10.grp.snv.yahoo.com + with SMTP; Aug, 29 2002 15:43:47 -0700 +Received: from [183.62.39.149] by m10.grp.snv.yahoo.com with QMQP; + Aug, 29 2002 14:41:31 -0200 +Received: from [26.84.34.94] by smtp4.cyberec.com with smtp; + Aug, 29 2002 13:18:54 -0800 +Received: from ssymail.ssy.co.kr ([113.236.31.212]) by + a231242.upc-a.chello.nl with local; Aug, 29 2002 12:35:47 -0800 +From: UK PRANK CALLS +To: Joker@dogma.slashnull.org +Cc: +Subject: Play a Hilarious Phone Prank +Sender: UK PRANK CALLS +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Thu, 29 Aug 2002 15:48:17 +0100 +X-Mailer: AOL 7.0 for Windows US sub 118 +X-Priority: 1 + +Wind up your mates today! Please visit http://ukprankcalls.com + diff --git a/Ch3/datasets/spam/spam/00159.b16f070a576c2eb1533aa9e2cf8e6b77 b/Ch3/datasets/spam/spam/00159.b16f070a576c2eb1533aa9e2cf8e6b77 new file mode 100644 index 000000000..958ac2f7b --- /dev/null +++ b/Ch3/datasets/spam/spam/00159.b16f070a576c2eb1533aa9e2cf8e6b77 @@ -0,0 +1,292 @@ +From leads&sales2546@Flashmail.com Thu Aug 29 17:35:16 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 953BD43F9B + for ; Thu, 29 Aug 2002 12:35:12 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 17:35:12 +0100 (IST) +Received: from mail.cz.hrb.com.cn ([218.7.18.169]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7TGTsZ20363 for ; + Thu, 29 Aug 2002 17:30:00 +0100 +Received: from .. (210.83.127.119 [210.83.127.119]) by mail.cz.hrb.com.cn + with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id RKYRQ3LY; Thu, 29 Aug 2002 12:22:00 +0800 +Message-Id: <000073173ef4$00003636$00002f97@..> +To: <....@dogma.slashnull.org> +From: leads&sales2546@Flashmail.com +Subject: (_) Increase Your Sales!!!! +Date: Wed, 28 Aug 2002 23:33:45 -1900 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit + +Dear Consumers, Increase your Business Sales! + +How?? + +By targeting millions of buyers via e-mail !! + +25 MILLION EMAILS + Bulk Mailing Software For Only $150.00 + +super low price! ACT NOW !!! + +Our Fresh Addresses Will Bring You + +Incredible Results! + + + +If you REALLY want to get the word out regarding + +your services or products, Bulk Email is the BEST + +way to do so, PERIOD! Advertising in newsgroups is + +good but you're competing with hundreds even THOUSANDS + +of other ads. Will your customer's see YOUR ad in the + +midst of all the others? + +Free Classifieds? (Don't work) + +Web Site? (Takes thousands of visitors) + +Banners? (Expensive and iffy) + +E-Zine? (They better have a huge list) + +Search Engines? (Easily buried with thousands of others) + +Bulk Email will allow you to DIRECTLY contact your + +potential customers. They are much more likely to + +take the time to read about what you have to offer + +if it was as easy as reading it via email rather + +than searching through countless postings in + +newsgroups. + +The list's are divided into groups and are compressed. + +This will allow you to use the names right off the cd. + +ORDER IN THE NEXT 72 hours AND RECIEVE 4 BONUSES!! + +ORDER IN THE NEXT 48 HOURS AND RECIEVE FULL TECHNICAL SUPPORT !!! + +ACT NOW !!!!!!!!!!!!!! + +*BONUS #1 Receive an additional cd-rom with millions of fresh, + +deliverable general internet e-mail addresses free!! + +*BONUS #2 Receive 2000 how to books, reports and manuals on cd-rom with + +reprint resale rights! Produce for pennies and resell for BIG dollars! + +*BONUS #3 Receive the Mass Mailer bulk delivery software, with full + +operating instructions. This software will get the mail out QUICK! + +*BONUS #4 Receive the Informational Guide to bulk e-mail. This guide + +will give you all the information you need to get started! + +THIS IS A ONE TIME PACKAGE DEAL WORTH HUNDREDS OF DOLLARS!! + +ACT NOW! THIS IS A LIMITED TIME OFFER! ORDER WHILE SUPPLIES LAST! + +RECEIVE THIS DREAM PACKAGE FOR THE UNBELIEVABLE LOW, LOW PRICE OF + +ONLY $150.00 + + + +ORDERING INFORMATION: + +CHECK BY FAX SERVICES OR CREDIT CARD INFO: + +O R D E R N O W . . . SAME DAY SERVICE (M-F) if your order + +is received before 3pm Central . To place an order, you can call us at: + +1-308-650-5905 ext 121 Are fax your order to 1-415-873-2700 + + + + + +This Number is for credit Card Orders Only!!! + +CHECK BY FAX SERVICES! + + + +__________________________________________ + +To order, via credit card simply cut/paste and print out the + +EZ ORDER FORM below and fax to our office today. + + + +***** NOW ONLY $150! ***** + +This "Special Price" is in effect for the next seven days, + +after that we go back to our regular price of $250.00 ... + +Don't delay... you can be in business tomorrow! + +We accept Visa, Mastercard, Amex, Disc and Checks by Fax. + +----------------------Cut & Paste---------------------- + +---------------------EZ Order Form--------------------- + +_____Yes! I want everything! I am ordering within 72 hours. + +Include my FREE "Business On A Disk" bonus along with your + +Millions of E-Mail addresses on CD (plus 1,093,808 bonus addresses) + +for the special price of only $150.00 + shipping as indicated + +below. + +_____Yes! I missed the 72 hour special, but I am ordering + +CD WITH, super clean e-mail addresses within 7 days for the + +"special" price of only $250.00 + s&h. + +_____Oop's I missed the 72 hour and 7 day "specials". I am + +ordering The Cd at the regular price of $250.00 + s&h. + +***PLEASE SELECT YOUR SHIPPING OPTION*** + +____I would like to receive my package FedEx OVERNIGHT. I am + +including $15 for shipping. (Hawaii & Alaska $20 - Canada $25, + +all other International add an *additional* $25 [$40 total] for shipping) + +____I would like to receive my package FedEx 2 DAY delivery. + +I'm including $10 for shipping. (Sorry no Canada or International + +delivery - Continental U.S. shipping addresses only) + +***Please Print Carefully*** + +NOTE: Orders cannot be shipped without complete information + +including your signature. No exceptions! + +NAME____________________________________________________ + +COMPANY NAME____________________________________________ + +ADDRESS_________________________________________________ + +(FedEx can only ship to street addresses - no P.O. boxes) + +CITY, STATE, ZIP________________________________________ + +PHONE NUMBER____________________________________________ + +(required for shipping & tracking) + +EMAIL ADDRESS___________________________________________ + +(Print Carefully - required in case we have a question and to + +send you a confirmation that your order has been shipped and for + +technical support if you order within 24 hrs) + +TYPE OF CREDIT CARD: + +______VISA _____MASTERCARD ______AMEX ______DISC + +CREDIT CARD# __________________________________________ + +EXPIRATION DATE________________________________________ + +NAME ON CARD___________________________________________ + +TOTAL AMOUNT (Including Shipping): $___________________ + +DATE:x__________________ + +(Required) SIGNATURE:x_________________________________ + +I understand that I am purchasing the e-mail address on CD, + +and authorize the above charge to my credit card, the addresses are not rented, + +but are mine to use for my own mailing, over-and-over. Free bonuses are included, + +but cannot be considered part of the financial transaction. I understand that it + +is my responsibility to comply with any laws applicable to my local area. As with + +all software, once opened the CD may not be returned, however, if found defective + +it will be replaced with like product at no charge. + +O R D E R N O W . . . SAME DAY SERVICE (M-F) if your order + +is received before 3pm Central . To place an order, you can call us at: + +1-308-650-5905 ext 121 Are fax your order to1-415-873-2700 + +This Number is for credit Card Orders Only!!! + +CHECK BY FAX SERVICES! + +If you would like to fax a check, paste your check below and fax it to our office + +along with the EZ Order Form forms to: 1-415-873-2700 + +********************************************************** + +***24 HOUR FAX SERVICES*** PLEASE PASTE YOUR + +CHECK HERE AND FAX IT TO US AT 1-415-873-2700 + + + + + +********************************************************** + +If You fax a check, there is no need for you to mail the + +original. We will draft a new check, with the exact + +information from your original check. All checks will be + +held for bank clearance. (7-10 days) Make payable to: + +"S.C.I.S" + + + +-=-=-=-=--=-=-=-=-=-=-=offlist Instructions=-=-=-=-=-=-=-=-=-=-=-= + +---------------------------------------------------------------------- +Do not reply to this message - +To be off from future mailings: +mailto:trudymail2002@themail.com?Subject=offitnow + + + + diff --git a/Ch3/datasets/spam/spam/00160.cec5f611ae665ff0add6c4928d47f2be b/Ch3/datasets/spam/spam/00160.cec5f611ae665ff0add6c4928d47f2be new file mode 100644 index 000000000..a63e61d79 --- /dev/null +++ b/Ch3/datasets/spam/spam/00160.cec5f611ae665ff0add6c4928d47f2be @@ -0,0 +1,74 @@ +From freehgh@terra.es Thu Aug 29 17:45:56 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 6563F44156 + for ; Thu, 29 Aug 2002 12:45:53 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 17:45:53 +0100 (IST) +Received: from downloada (pD958D0AF.dip.t-dialin.net [217.88.208.175]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7TGcoZ20722 for + ; Thu, 29 Aug 2002 17:38:52 +0100 +Received: from mx.terra.es ([211.90.139.98]) by downloada (Kerio + MailServer 5.0.5); Mon, 26 Aug 2002 19:45:52 +0200 +Message-Id: <0000120c087e$000013ca$00004693@mx.terra.es> +To: +Cc: , , + , , + , , + , , + , , + , , + , , , + , , + , , + , , + , , , + , , + , , + , , + , , + , , + , , + , , + , , + , , + , +From: "Human Growth Hormone" +Subject: FREE HGH - Look 10 Years Younger in 3 Weeks!!! HMUPRZD +Date: Mon, 26 Aug 2002 10:44:19 -1900 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +Reply-To: freehgh@terra.es +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 + +FREE 30 day supply of HGH 1000: +Look Younger and Lose Weight in 3 Weeks!!!! + +As seen on NBC, CBS, CNN, and Oprah! The health discovery +that actually reverses aging while burning fat, without +dieting or exercise! This proven discovery has been reported +on by the New England Journal of Medicine. Forget aging and +dieting forever! And it's Guaranteed! + +http://w%77%77%2e%74%65%72%72%61%2ee%73/pe%72%73o%6E%61%6C9/starfish103/ + +Would you like to lose weight while you sleep? + No dieting! + No hunger pains! + No Cravings! + No strenuous exercise! + Change your life forever! + + 100% GUARANTEED + +http://w%77%77%2e%74%65%72%72%61%2ee%73/pe%72%73o%6E%61%6C9/starfish103/ + +AOL Users click + HERE + +To be removed, reply to this email with REMOVE in the SUBJECT line. + + diff --git a/Ch3/datasets/spam/spam/00161.ae33257753c9bdaaadc9221347868496 b/Ch3/datasets/spam/spam/00161.ae33257753c9bdaaadc9221347868496 new file mode 100644 index 000000000..00ca5e96c --- /dev/null +++ b/Ch3/datasets/spam/spam/00161.ae33257753c9bdaaadc9221347868496 @@ -0,0 +1,56 @@ +From emkrinkprice1@yahoo.com Thu Aug 29 17:56:01 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 3087E43F99 + for ; Thu, 29 Aug 2002 12:56:01 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 17:56:01 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id RAA11261 + for ; Thu, 29 Aug 2002 17:51:41 +0100 +Received: from 208.57.64.213 (unknown [211.101.179.2]) + by smtp.easydns.com (Postfix) with SMTP id 0E1692EC71 + for ; Thu, 29 Aug 2002 12:51:29 -0400 (EDT) +Received: from 155.89.28.179 ([155.89.28.179]) by rly-xw05.mx.aol.com with smtp; Aug, 29 2002 12:25:04 PM +0600 +Received: from unknown (149.89.93.47) by rly-xr02.mx.aol.com with NNFMP; Aug, 29 2002 11:24:18 AM -0800 +Received: from unknown (HELO anther.webhostingtalk.com) (205.220.75.34) by asy100.as122.sol.superonline.com with smtp; Aug, 29 2002 10:35:20 AM -0800 +From: ioiydan at inkprice +To: zzzz@spamassassin.taint.org +Cc: +Subject: Hi, Low price inkjet cartridges bvax +Sender: ioiydan at inkprice +Mime-Version: 1.0 +Date: Thu, 29 Aug 2002 12:51:30 -0400 +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +Message-Id: <20020829165129.0E1692EC71@smtp.easydns.com> +Content-Type: text/html; charset="iso-8859-1" + +HI, zzzz@spamassassin.taint.org today, + + +Ink Price + + + + + + + + + + +
    +

    ________________________________________________________________________________________

    +

    If you would + not like to get more spacial offers from us, please CLICK + HERE and you request will be honored immediately!
    + ________________________________________________________________________________________

    +

    +

    + + + +egfbehkrtejpgtuyveahpeibbraqstvnwa + diff --git a/Ch3/datasets/spam/spam/00162.6d0397cc491b214db1e84e19bb49177a b/Ch3/datasets/spam/spam/00162.6d0397cc491b214db1e84e19bb49177a new file mode 100644 index 000000000..6fe60bbeb --- /dev/null +++ b/Ch3/datasets/spam/spam/00162.6d0397cc491b214db1e84e19bb49177a @@ -0,0 +1,173 @@ +From wqvaj7_10_02@hotmail.com Thu Aug 29 18:16:49 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id CB6D144157 + for ; Thu, 29 Aug 2002 13:16:42 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 29 Aug 2002 18:16:42 +0100 (IST) +Received: from 211.57.209.146 ([211.141.181.2]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7THDmZ21834 for + ; Thu, 29 Aug 2002 18:13:51 +0100 +Message-Id: <200208291713.g7THDmZ21834@dogma.slashnull.org> +Received: from [190.198.219.49] by a231242.upc-a.chello.nl with QMQP; + Aug, 29 2002 12:57:34 PM -0300 +Received: from [14.42.188.81] by sydint1.microthin.com.au with asmtp; + Aug, 29 2002 11:55:11 AM -0800 +Received: from unknown (HELO da001d2020.lax-ca.osd.concentric.net) + (194.29.209.49) by f64.law4.hotmail.com with QMQP; Aug, 29 2002 10:54:16 + AM +1200 +From: atrePublication +To: !!!!!!!@spamassassin.taint.org +Cc: +Subject: Internet News Feeds for Executives dfvht +Sender: atrePublication +MIME-Version: 1.0 +Date: Thu, 29 Aug 2002 13:13:42 -0400 +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Priority: 1 +Content-Type: text/html; charset="iso-8859-1" + +New Page 1 + + + + + + + + + + + + + + + +
    Finally, + a Newsfeed that delivers current and
    + relevant Sales, Marketing & Advertising Articles from
    + such magazines as Business 2.0, FAST Company, Technology
    + Marketing, Wired, PC World, Asia Street Intelligence, Inc, Bank Technology...
    +
    + All in one location & it's free. Sign up today.
    Easy + to read.  Easy to use.  Easy on your time.
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    +

    +
    Providing + the Internets' most
    + comprehensive Web Directory for Sales,
    + Marketing & Advertising Executives.
    +
    +
    Today's + top business magazine reviews along with a wide selection of articles from + relevant sales and marketing topics.
    +
    +
    Gain + access to all the suppliers and
    + resources you need to do your job effectively.
    +
    +
    If + you can't find the supplier or resource
    + that you need ... one of our Reps will
    + go to work to find it for you.
    +
    +
    +
    + + + +
    +
    + + +
    +

    Business 2.0, FAST Company, Technology Marketing, Wired, PC World, Asia Street Intelligence, Inc, Bank Technology and More

    +
    + +

    +

    +
    + +
    +
    + + + + +
     
    +
    +
    +
    +
    + + + + +
    You are receiving this e-mail because you have opted-in to receive special offers from + + OffersRus.net or one of it's marketing affiliates. If you feel you have received this e-mail in error or do not wish to receive additional special offers, please scroll down to unsubscribe.
    +
    +
    +
    +
    + + + + +
     
    +
    +
    +
    +
    + + + + +
    This E-mailing has been sent to you as a person interested in the information enclosed. This E-mail is not SPAM under the Federal Regulatory laws of the United States. This message is being sent to you in compliance with the proposed Federal Legislation for commercial e-mail (H.R.4176-SECTION 101 PARAGRAPH (e) (1) (A)) and Bill s.1618 TITLE III passed by the 105th US Congress. We sincerely apologize for any inconvenience. This message is not intended for residents of WA, NV, CA, & VA. Screening of addresses has been done to the best of our technical ability. If you are a California, Nevada, Washington, or Virginia resident please follow the instructions below and you will be permanently removed from our list immediately.
    +
    + If you would like to be removed from our E-Mail list, please click on the words
    + REMOVE ME + click send, and you will be removed from our list immediately. + +
    +
    +
    +

     

    +

     

    +

     

    + + + + + +ubyrpqtetxjyuyqyfjtie + diff --git a/Ch3/datasets/spam/spam/00163.244a217b150d2129cbdc52b96d992382 b/Ch3/datasets/spam/spam/00163.244a217b150d2129cbdc52b96d992382 new file mode 100644 index 000000000..9ea5a725e --- /dev/null +++ b/Ch3/datasets/spam/spam/00163.244a217b150d2129cbdc52b96d992382 @@ -0,0 +1,65 @@ +From sammytrudeau@yahoo.co.uk Mon Sep 2 12:13:17 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 7866D43F99 + for ; Mon, 2 Sep 2002 07:13:17 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:13:17 +0100 (IST) +Received: from hyperphase.net ([216.235.147.132]) + by webnote.net (8.9.3/8.9.3) with ESMTP id VAA11938 + for ; Thu, 29 Aug 2002 21:33:04 +0100 +Received: from QRJATYDI (OL86-47.fibertel.com.ar [24.232.47.86]) + by hyperphase.net (8.12.2/8.11.6) with SMTP id g7TKRglY045677; + Thu, 29 Aug 2002 16:27:49 -0400 (EDT) + (envelope-from sammytrudeau@yahoo.co.uk) +Message-Id: <200208292027.g7TKRglY045677@hyperphase.net> +From: "Samantha" +To: +Subject: Congratulations on Your 6 New Signups +X-Priority: 1 +X-MSMail-Priority: High +X-Mailer: Mail for AOL V. 2.3 +Date: Thu, 29 Aug 2002 15:36:58 +-0500 +Mime-Version: 1.0 +Content-Type: text/plain; charset="ISO-8859-2" + +We guarantee you signups before you ever pay +a penny! We will show you the green before you +ever take out your wallet. Sign up for FREE and +test drive our system. No Obligation whatsoever. +No Time Limit on the test drive. Our system is so +powerful that the system enrolled over 400 people +into my downline the first week. + +To get signed up for FREE and take a test drive use the link: +mailto:workinathome@btamail.net.cn?subject=more_MOSS3_info_please +Be sure to request info if the subject line does not! + +The national attention drawn by this program +will drive this program with incredible momentum! +Don't wait, if you wait, the next 400 people will +be above you. + +Take your FREE test drive and have the next 400 +below you! + +mailto:workinathome@btamail.net.cn?subject=more_MOSS3_info_please +Be sure to request info if the subject line does not! + +All the best, + +Daniel +Financially Independent Home Business Owner + + + + + +______________________________________________________ +To be excluded from future notices: +mailto:guaranteed4u@btamail.net.cn?subject=exclude + + + diff --git a/Ch3/datasets/spam/spam/00164.8536500ed9cadc8397a63b697d043c0b b/Ch3/datasets/spam/spam/00164.8536500ed9cadc8397a63b697d043c0b new file mode 100644 index 000000000..62ff32496 --- /dev/null +++ b/Ch3/datasets/spam/spam/00164.8536500ed9cadc8397a63b697d043c0b @@ -0,0 +1,46 @@ +From fred@bluemail.dk Mon Sep 2 12:14:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id AFD2E43F99 + for ; Mon, 2 Sep 2002 07:14:56 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:14:56 +0100 (IST) +Received: from bluemail.dk (IDENT:nobody@[211.57.216.185]) + by webnote.net (8.9.3/8.9.3) with SMTP id WAA12021; + Thu, 29 Aug 2002 22:32:54 +0100 +Date: Thu, 29 Aug 2002 22:32:54 +0100 +From: fred@bluemail.dk +Reply-To: +Message-ID: <006e47b18dec$2455b2e1$6ba87ad3@kodbgc> +To: gnvb@hotmail.com +Subject: FORTUNE 500 COMPANY HIRING, AT HOME REPS. +MiME-Version: 1.0 +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 +Importance: Normal +Content-Type: text/html; charset="iso-8859-1" + +Help wanted. We are a 14 year old fortune 500 company, that is +growing at a tremendous rate. We are looking for individuals who +want to work from home. + +This is an opportunity to make an excellent income. No experience +is required. We will train you. + +So if you are looking to be employed from home with a career that has +vast opportunities, then go: + +http://www.basetel.com:27000/wealthnow + +We are looking for energetic and self motivated people. If that is you +than click on the link and fill out the form, and one of our +employement specialist will contact you. + +To be removed from our link simple go to: + +http://www.basetel.com:27000/remove.html + + diff --git a/Ch3/datasets/spam/spam/00165.45db168e8e1a78a66972b9f50c47b6dc b/Ch3/datasets/spam/spam/00165.45db168e8e1a78a66972b9f50c47b6dc new file mode 100644 index 000000000..2105b646a --- /dev/null +++ b/Ch3/datasets/spam/spam/00165.45db168e8e1a78a66972b9f50c47b6dc @@ -0,0 +1,86 @@ +From zzzz@listmgmt.com Mon Sep 2 12:15:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 17B9143F9B + for ; Mon, 2 Sep 2002 07:15:03 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:15:03 +0100 (IST) +Received: from d96.westmaster.com (d96.westmaster.com [81.31.32.22]) + by webnote.net (8.9.3/8.9.3) with SMTP id BAA12161 + for ; Fri, 30 Aug 2002 01:10:24 +0100 +Date: Fri, 30 Aug 2002 01:10:24 +0100 +Message-Id: <200208300010.BAA12161@webnote.net> +From: Cam Sluts +To: +Subject: Tell these cam sluts what to do +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.24574) +Content-Type: text/html; charset=us-ascii + +To be removed please click here or simply respond to this email.
    Your address will be removed and blocked from ever being added again.
    +Please scroll down to the bottom of this email for more details. +

    + + + + +Tricams Live Cam Girls + + + + + + + + + + + + + + + + + +
    + +
    ALL THESE SHOWS ARE LIVE RIGHT NOW!
    +
    +
    + +
    Ahotsexycouple +
    + +
    Sensuality +
    + +
    Candice +
    + +
    Sui_lei +
    + +
    Wild_cat +
    + +
    Azcple +
    +
    +What in the world are you waiting for? Click now and tell any of these women what to do for you live on camera. Don't be shy, just signup for free and tell them what you want and you will get.

    +CLICK HERE FOR THE FREE LIVE SHOW! +

    + + +


    + + + + + +


    +This is our central mailing for all of our affiliate sites. If you have a question on how you got on, please email us and we will be glad to help.
    +The fastest way to get off our list is to click this link. If you do not have access to it, please respond to this email.
    +Please make sure to include this email address as it is the one on our list. zzzz@spamassassin.taint.org + + diff --git a/Ch3/datasets/spam/spam/00166.1b7ca83ece36a955e80c7f32efe5fd3d b/Ch3/datasets/spam/spam/00166.1b7ca83ece36a955e80c7f32efe5fd3d new file mode 100644 index 000000000..0527f60e4 --- /dev/null +++ b/Ch3/datasets/spam/spam/00166.1b7ca83ece36a955e80c7f32efe5fd3d @@ -0,0 +1,177 @@ +From jrd110@hotmail.com Mon Sep 2 12:16:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 26D9D44156 + for ; Mon, 2 Sep 2002 07:15:15 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:15:15 +0100 (IST) +Received: from mail.rupavahini.lk ([203.94.67.130]) + by webnote.net (8.9.3/8.9.3) with ESMTP id CAA12226 + for ; Fri, 30 Aug 2002 02:46:28 +0100 +From: jrd110@hotmail.com +Received: from teamnet.no (AFS2000-SERVER [217.6.112.58]) by mail.rupavahini.lk with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id RYZPXALH; Thu, 29 Aug 2002 06:29:29 +0600 +Message-ID: <000056d94466$00002723$0000133b@schreuderonline.net> +To: , , + , , + , , + , +Cc: , , , + , , , + , +Subject: Make your prints beautiful & SAVE BIG! OYDQH +Date: Wed, 28 Aug 2002 20:22:21 -1600 +MIME-Version: 1.0 +Reply-To: jrd110@hotmail.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Would You Like to Save up to 80 + + + + +

    +
    + + + + + +
    Would You Like to + Save up to 80% + on Printer, Fax + & = +Copier Suppl= +ies?
    +
    +
    +
    +
    + + + + + + + + +
    On + Brands Like -><= +font face=3D"Tahoma" size=3D"5" color=3D"#FFFFFF">EPSONCanon<= +i>HEWLETT + PACKARD= +Lexmark + & + more!
    +
    +
    +
    +
    + + + + + + + + + + +
    100% + Quality Satisfaction Guarantee or Your Money Back!
    FREE + Same Day shipping on all US Orders*
    BEST + Prices on the Internet - GUARANTEED!**
    +
    +
    + +
    +
    + + + + +
    OR + Call us Toll-Free at 1-800-758-8084!
    +
    +
    +
    +

     

    +

     

    +
    +
    + + + + +
    *Free Shipping only on + orders of $40 or more.
    **We beat any online retailer's price by= + 5%. + Call us with the URL (Website) advertising the lower price and onc= +e we + verify the price, we will beat it by 5%!
    +
    +
    +
    +
    + + + + +
    You + are receiving this special offer because you have provided permiss= +ion to + receive email communications regarding special online promotions o= +r + offers. If you feel you have received this message in error, or wi= +sh to + be removed from our subscriber list, Click + HERE . Thank You and we apologize for ANY inconvenience.
    +
    +
    + + + + + + diff --git a/Ch3/datasets/spam/spam/00167.af33a21e8b279ee28d5e70a6ef1dc86a b/Ch3/datasets/spam/spam/00167.af33a21e8b279ee28d5e70a6ef1dc86a new file mode 100644 index 000000000..7dfcdbcf4 --- /dev/null +++ b/Ch3/datasets/spam/spam/00167.af33a21e8b279ee28d5e70a6ef1dc86a @@ -0,0 +1,139 @@ +From mauriliojai@and.ie Mon Sep 2 12:15:17 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 47E1D44155 + for ; Mon, 2 Sep 2002 07:15:09 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:15:09 +0100 (IST) +Received: from alpha03.esi.co.kr ([210.127.242.23]) + by webnote.net (8.9.3/8.9.3) with ESMTP id CAA12216; + Fri, 30 Aug 2002 02:32:09 +0100 +Received: by alpha03.esi.co.kr id KAA235036; Fri, 30 Aug 2002 10:19:42 +0900 (KST) +Date: Fri, 30 Aug 2002 10:19:42 +0900 (KST) +Message-Id: <200208300119.KAA235036@alpha03.esi.co.kr> +From: "Kim" +To: "1194@uk.uu.net" <1194@uk.uu.net> +Subject: ---> Undervalued Company +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + +
    + +OTC
    = + + + Newsletter
    +Discover Tomorrow's Winners 
    + +For Immediate Release
    +

    +Cal-Bay (Stock Symbol: CBYI) +
    Watch for analyst =22Strong Buy Recommendations=22 and several adviso= +ry newsletters picking CBYI. CBYI has filed to be traded on the OTCBB, = +share prices historically INCREASE when companies get listed on this lar= +ger trading exchange. CBYI is trading around 25 cents and should skyrock= +et to =242.66 - =243.25 a share in the near future.
    +Put CBYI on your watch list, acquire a position TODAY.

    +

    +REASONS TO INVEST IN CBYI +

  • = + +A profitable company and is on track to beat ALL earnings estimates=21 +
  • = + +One of the FASTEST growing distributors in environmental & safety e= +quipment instruments. +
  • +Excellent management team, several EXCLUSIVE contracts. IMPRESSIVE cli= +ent list including the U.S. Air Force, Anheuser-Busch, Chevron Refining = +and Mitsubishi Heavy Industries, GE-Energy & Environmental Research.= + +

    +RAPIDLY GROWING INDUSTRY +
    Industry revenues exceed =24900 million, estimates indicate that the= +re could be as much as =2425 billion from =22smell technology=22 by the end= + of 2003.

    +

    +=21=21=21=21=21CONGRATULATIONS=21=21=21=21=21
    Our last recommendation t= +o buy ORBT at =241.29 rallied and is holding steady at =243.50=21 Congratul= +ations to all our subscribers that took advantage of this recommendation= +.









    +

    +ALL removes HONORED. Please allow 7 days to be removed and send ALL add= +resses to: + +GoneForGood=40btamail.ne= +t.cn +

  •  
    + +Certain statements contained in this news release may be forward-lookin= +g statements within the meaning of The Private Securities Litigation Ref= +orm Act of 1995. These statements may be identified by such terms as =22e= +xpect=22, =22believe=22, =22may=22, =22will=22, and =22intend=22 or similar terms= +. We are NOT a registered investment advisor or a broker dealer. This is= + NOT an offer to buy or sell securities. No recommendation that the secu= +rities of the companies profiled should be purchased, sold or held by in= +dividuals or entities that learn of the profiled companies. We were paid= + =2427,000 in cash by a third party to publish this report. Investing in = +companies profiled is high-risk and use of this information is for readi= +ng purposes only. If anyone decides to act as an investor, then it will = +be that investor's sole risk. Investors are advised NOT to invest withou= +t the proper advisement from an attorney or a registered financial broke= +r. Do not rely solely on the information presented, do additional indepe= +ndent research to form your own opinion and decision regarding investing= + in the profiled companies. Be advised that the purchase of such high-ri= +sk securities may result in the loss of your entire investment. Not int= +ended for recipients or residents of CA,CO,CT,DE,ID, IL,IA,LA,MO,NV,NC,O= +K,OH,PA,RI,TN,VA,WA,WV,WI. Void where prohibited. The owners of this pu= +blication may already own free trading shares in CBYI and may immediatel= +y sell all or a portion of these shares into the open market at or about= + the time this report is published. Factual statements are made as of t= +he date stated and are subject to change without notice. +
    Copyright c 2001

    +
    + +OTC
    +
    + +********** + diff --git a/Ch3/datasets/spam/spam/00168.7422ce438a3d745e2cafb7430e5ddb0f b/Ch3/datasets/spam/spam/00168.7422ce438a3d745e2cafb7430e5ddb0f new file mode 100644 index 000000000..a370e0025 --- /dev/null +++ b/Ch3/datasets/spam/spam/00168.7422ce438a3d745e2cafb7430e5ddb0f @@ -0,0 +1,71 @@ +From iteachabc@msn.com Mon Sep 2 12:16:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 856C743F99 + for ; Mon, 2 Sep 2002 07:15:22 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:15:22 +0100 (IST) +Received: from eev_kl_md02.vatech.com.my ([210.19.3.38]) + by webnote.net (8.9.3/8.9.3) with ESMTP id FAA12629 + for ; Fri, 30 Aug 2002 05:26:57 +0100 +Received: from smtp-gw-4.msn.com (OFFICE01 [213.13.209.237]) by eev_kl_md02.vatech.com.my with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id R33RRCSN; Fri, 23 Aug 2002 22:55:51 +0800 +Message-ID: <000007070213$000033ac$00005646@smtp-gw-4.msn.com> +To: +From: "Local Guest" +Subject: Look What Sandy is Doing in her DORM!! +Date: Fri, 23 Aug 2002 10:50:21 -1600 +MIME-Version: 1.0 +Reply-To: iteachabc@msn.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +
    + + +

    +
    +
    + +This WEEK: Sydney Bares ALL in the park!

    + + +Join her in our Live Teen Chat!

    + + +Watch as Sandy Strips Naked in her Dorm!

    + + +Best of All, see it + + +ALL 4 FREE!

    + +Don't Miss Out!

    + + +Watch in Awe as Stacey Suck-Starts Ken!

    + + + +AND OUR BONUS:

    +Pam & Tommy UNCUT!
    +Penthouse Forum Stories!
    +Jenna Jamieson in JennaMaxx!!

    + +
    + +Get in here for FREE NOW!<= +/a> +













    +
    + + + + + diff --git a/Ch3/datasets/spam/spam/00169.86721d6b50e889ed39c7d302adb2a5ab b/Ch3/datasets/spam/spam/00169.86721d6b50e889ed39c7d302adb2a5ab new file mode 100644 index 000000000..730ff973a --- /dev/null +++ b/Ch3/datasets/spam/spam/00169.86721d6b50e889ed39c7d302adb2a5ab @@ -0,0 +1,93 @@ +From lworks1@hotmail.com Mon Sep 2 12:16:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 0C38644157 + for ; Mon, 2 Sep 2002 07:15:28 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:15:28 +0100 (IST) +Received: from akf02.akf.org.uk (mail.akf.org.uk [193.115.206.193]) + by webnote.net (8.9.3/8.9.3) with ESMTP id HAA12796 + for ; Fri, 30 Aug 2002 07:33:35 +0100 +From: lworks1@hotmail.com +Received: from signatureputters.com (host217-35-130-233.in-addr.btopenworld.com [217.35.130.233]) by akf02.akf.org.uk with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id RZN1W231; Fri, 30 Aug 2002 00:47:11 +0100 +Message-ID: <00005b523e9f$000077af$00004dec@seargeant.com> +To: , , , + , +Cc: , , + , , + +Subject: Attn: How about being a few pounds lighter?OLIBYKN +Date: Thu, 29 Aug 2002 19:56:38 -1600 +MIME-Version: 1.0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit +Reply-To: lworks1@hotmail.com + +How are you doing? + +If you've been like me, you've been trying almost +EVERYTHING to lose weight.  I know how you feel +- the special diets, miracle pills, and fancy exercise +equipment never helped me lose the pounds I needed to lose +either.  It seemed like the harder I worked at it, the less +weight I lost - until I heard about 'Extreme Power Plus'. + +You're probably thinking to yourself, "Oh geez, not another +miracle diet pill!"  Like you, I was skeptical at first, but +my sister said it helped her lose 23 pounds in just 2 weeks, +so I told her I'd give it a try.  I mean, there was nothing +to lose except a lot of weight!  Let me tell you, it was +the best decision I've ever made. PERIOD. Six months later, +as I'm writing this message to you, I've gone from 355 pounds +to 210 pounds, and I haven't changed my exercise routine or diet +at all.  Yes, I still eat pizza, and lots of it! + +I was so happy with the results that I contacted the manufacturer +and received permission to resell it - at a HUGE discount. I feel +the need to help other people lose weight like I did, because it +does so much for your self-esteem, not to mention your health. +I am giving you my personal pledge that 'Extreme Power Plus' +absolutely WILL WORK FOR YOU. 100 % Money-Back GUARANTEED! + +If you are frustrated with trying other products, without having +any success, and just not getting the results you were promised, +then I recommend the only product that worked for me - +'EXTREME POWER PLUS'! + +You're probably asking yourself, "Ok, so how does this stuff +actually work?" + +Extreme Power Plus contains Lipotropic fat burners and ephedra which +is scientifically proven to increase metabolism and cause rapid +weight loss. No "hocus pocus" in these pills - just RESULTS!!! + +Here is the bottom line ... + +I can help you lose 10-15 pounds per week naturally, without +exercising and without having to eat rice cakes all day.  +Just try it for one month - there's pounds to lose and confidence +to gain!  You will lose weight fast - GUARANTEED.  This is my +pledge to you. + +BONUS! Order NOW & get FREE SHIPPING on 3 bottles or more!  + +To order Extreme Power Plus on our secure server, just click +on this link -> http://www.modernherbals.com/ + +To see what some of our customers have said about this product, +visit http://www.modernherbals.com/testimonials.asp + +To see a list of ingredients and for more information +on test studies and how it will help you lose weight, visit +http://www.modernherbals.com/ingre1.asp + +***************************************************************** +If you feel that you have received this email in error, please +click here -> http://www.moderherbals.com/remove.asp to request +to be removed. Thank you, and we apologize for any inconvenience. +***************************************************************** + diff --git a/Ch3/datasets/spam/spam/00170.33a973aa9bb7d122bdfbd96d44332996 b/Ch3/datasets/spam/spam/00170.33a973aa9bb7d122bdfbd96d44332996 new file mode 100644 index 000000000..6038de7e5 --- /dev/null +++ b/Ch3/datasets/spam/spam/00170.33a973aa9bb7d122bdfbd96d44332996 @@ -0,0 +1,36 @@ +From safety33o@l1.newnamedns.com Mon Sep 2 12:18:16 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id AAA0843F99 + for ; Mon, 2 Sep 2002 07:18:16 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:18:16 +0100 (IST) +Received: from l1.newnamedns.com ([64.25.38.71]) + by webnote.net (8.9.3/8.9.3) with ESMTP id WAA15339 + for ; Fri, 30 Aug 2002 22:27:57 +0100 +From: safety33o@l1.newnamedns.com +Date: Fri, 30 Aug 2002 14:29:07 -0400 +Message-Id: <200208301829.g7UIT7o19954@l1.newnamedns.com> +To: sbhcmbqkll@l1.newnamedns.com +Reply-To: safety33o@l1.newnamedns.com +Subject: ADV: Interest rates slashed! Don't wait! xoxun + +INTEREST RATES HAVE JUST BEEN CUT!!! + +NOW is the perfect time to think about refinancing your home mortgage! Rates are down! Take a minute and fill out our quick online form. +http://www.newnamedns.com/refi/ + +Easy qualifying, prompt, courteous service, low rates! Don't wait for interest rates to go up again, lock in YOUR low rate now! + + + + + + +--------------------------------------- +To unsubscribe, go to: +http://www.newnamedns.com/stopthemailplease/ +Please allow 48-72 hours for removal. + diff --git a/Ch3/datasets/spam/spam/00171.08c5c55e9c2b4062344655e9ee32b979 b/Ch3/datasets/spam/spam/00171.08c5c55e9c2b4062344655e9ee32b979 new file mode 100644 index 000000000..80292502b --- /dev/null +++ b/Ch3/datasets/spam/spam/00171.08c5c55e9c2b4062344655e9ee32b979 @@ -0,0 +1,32 @@ +From safety33o@l5.newnamedns.com Mon Sep 2 12:18:17 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 6241A43F9B + for ; Mon, 2 Sep 2002 07:18:17 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:18:17 +0100 (IST) +Received: from l5.newnamedns.com ([64.25.38.75]) + by webnote.net (8.9.3/8.9.3) with ESMTP id WAA15341 + for ; Fri, 30 Aug 2002 22:27:58 +0100 +From: safety33o@l5.newnamedns.com +Date: Fri, 30 Aug 2002 14:31:31 -0400 +Message-Id: <200208301831.g7UIVVG21507@l5.newnamedns.com> +To: xqrzwjusha@l5.newnamedns.com +Reply-To: safety33o@l5.newnamedns.com +Subject: ADV: Lowest life insurance rates available! pzcby + +Lowest rates available for term life insurance! Take a moment and fill out our online form to see the low rate you qualify for. Save up to 70% from regular rates! Smokers accepted! http://www.newnamedns.com/termlife/ + +Representing quality nationwide carriers. Act now! + + + + + +--------------------------------------- +To easily remove your address from the list, go to: +http://www.newnamedns.com/stopthemailplease/ +Please allow 48-72 hours for removal. + diff --git a/Ch3/datasets/spam/spam/00172.7fe063c5f90c46934dc79a83d9fdabfe b/Ch3/datasets/spam/spam/00172.7fe063c5f90c46934dc79a83d9fdabfe new file mode 100644 index 000000000..6f48e161f --- /dev/null +++ b/Ch3/datasets/spam/spam/00172.7fe063c5f90c46934dc79a83d9fdabfe @@ -0,0 +1,169 @@ +From christinezenker@hotmail.com Mon Sep 2 12:18:23 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 2412244156 + for ; Mon, 2 Sep 2002 07:18:19 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:18:19 +0100 (IST) +Received: from koenig.koenig.com (koenig-co.com [66.72.2.249]) + by webnote.net (8.9.3/8.9.3) with ESMTP id XAA15607 + for ; Fri, 30 Aug 2002 23:55:30 +0100 +From: christinezenker@hotmail.com +Received: from sat.t.u-tokyo.ac.jp (YCTEL-SERVER [218.15.128.53]) by koenig.koenig.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) + id RTGJFSBW; Fri, 30 Aug 2002 18:49:28 -0400 +Message-ID: <000067c23813$00005d78$00006c3b@puterdudes.com> +To: , , + , +Cc: , , + +Subject: Attn: NORTON SYSTEMWORKS 2002 BLOWOUT! QHZHC +Date: Fri, 30 Aug 2002 18:54:15 -1600 +MIME-Version: 1.0 +Reply-To: christinezenker@hotmail.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Does Your Computer Need an Oil Change + + + + + + + + +
    Does Your Comp= +uter Need an Oil + Change?
    + + + + +
    N= +orton
    SystemWorks + 2002
    Professional + Edition
    + + + + +
    = +Made + by the Creators of the #1 Anti-Virus Software on the Market!<= +/b>
    + + + + + +
    This + UNBEATABLE software suite comes with EVERY + program you'll ever need to answer the problems or= + threats that your + computer faces each day of it's Life!

    Included in this magnificent deal + are the following programs:
    + + + + + +
    Norton + AntiVirus=FFFFFF99 2002 - THE #1 + ANTI-VIRUS PROTECION EVER!
    Norton Utilities=FFFFFF99 2002 + -
    DIAGNOSE ANY PROBLEM WI= +TH YOUR + SYSTEM!
    + Norton Ghost=FFFFFF99 2002 -
    MAKES + BACKING UP YOUR VALUABLE DATA EASY!
    + Norton CleanSweep=FFFFFF99 2002 -
    CLEANS + OUT EXCESS INTERNET FILE BUILDUP!
    + Norton WinFax=FFFFFF99 Basic -
    TURNS YOUR + CPU INTO A FAX MACHINE!
    +
    + GoBack=FFFFFFAE 3 Personal - HELPS + PREVENT YOU FROM MAKING ANY MISTAKES!
    + + + + + +
    *ALL + this has a retail price of $99.95*
    Buy + it + Now for ONLY $29.99!
    <= +i>with + Free Shipping - PLUS,
    Buy + Any 2 Items & GET 1 FREE! (Also + w/Free Shipping!)
    + + + + + +
    = +CLICK + HERE to Order NOW!
    +

    This Product is available NOW. = +When we +run out it's gone, so get it while it's HOT!

    + +

     

    +

     

    +

     

    + + + + +
    Your + email address was obtained from an opt-in list. Opt-in IAA (Internet + Advertising Association) Approved List Serial + Code FTRD4451.  If you wish to be unsubscribed from + this list, please Click + here. We do not condone spam in any shape or form. Thank You kin= +dly + for your cooperation.
    + + + + + + + diff --git a/Ch3/datasets/spam/spam/00173.e10eb62e2c7808674c43d6a5e9e08a1c b/Ch3/datasets/spam/spam/00173.e10eb62e2c7808674c43d6a5e9e08a1c new file mode 100644 index 000000000..1af8bd78c --- /dev/null +++ b/Ch3/datasets/spam/spam/00173.e10eb62e2c7808674c43d6a5e9e08a1c @@ -0,0 +1,56 @@ +From hghwebmaster@Flashmail.com Mon Sep 2 12:18:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id E145844157 + for ; Mon, 2 Sep 2002 07:18:19 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:18:19 +0100 (IST) +Received: from main.goldenhorse.com.cn ([61.151.251.117]) + by webnote.net (8.9.3/8.9.3) with ESMTP id AAA15656 + for ; Sat, 31 Aug 2002 00:09:23 +0100 +Received: from smtp0943.mail.yahoo.com ([218.24.129.171]) + by main.goldenhorse.com.cn (AIX4.3/8.9.3/8.9.3) with SMTP id HAA215120; + Sat, 31 Aug 2002 07:06:31 +0800 +Message-Id: <200208302306.HAA215120@main.goldenhorse.com.cn> +Date: Sat, 31 Aug 2002 07:07:19 +0800 +From: "Raymond Feyl" +X-Priority: 3 +To: zzzz@neilgarner.com +Cc: zzzz@neo.lrun.com, yyyy@neo.rr.com, yyyy@netmore.net, yyyy@spamassassin.taint.org +Subject: zzzz,Your HGH Request! +Mime-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Type: text/html; charset=us-ascii + + + +Hello, zzzz@neilgarner.com
    +
    +As seen on NBC, CBS, and CNN, and even Oprah! The health
    +discovery that actually reverses aging while burning fat,
    +without dieting or exercise! This proven discovery has even
    +been reported on by the New England Journal of Medicine.
    +Forget aging and dieting forever! And it's Guaranteed!
    +

    +* Reduce body fat and build lean muscle WITHOUT EXERCISE!
    +* Enhace sexual performance
    +* Remove wrinkles and cellulite
    +* Lower blood pressure and improve cholesterol profile
    +* Improve sleep, vision and memory
    +* Restore hair color and growth
    +* Strengthen the immune system
    +* Increase energy and cardiac output
    +* Turn back your body's biological time clock 10-20 years
    +in 6 months of usage !!!

    +FOR FREE INFORMATION AND GET FREE +1 MONTH SUPPLY OF HGH CLICK HERE















    +You are receiving this email as a subscriber
    +to the Opt-In America Mailing List.
    +To remove yourself from all related maillists,
    +just +Click Here + + + diff --git a/Ch3/datasets/spam/spam/00174.516721408a0d043ffc5258ecc49e907a b/Ch3/datasets/spam/spam/00174.516721408a0d043ffc5258ecc49e907a new file mode 100644 index 000000000..30e612691 --- /dev/null +++ b/Ch3/datasets/spam/spam/00174.516721408a0d043ffc5258ecc49e907a @@ -0,0 +1,78 @@ +From candilala21@yahoo.com Mon Sep 2 12:19:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 1A3F243F9B + for ; Mon, 2 Sep 2002 07:19:00 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:19:00 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id DAA21583 + for ; Sun, 1 Sep 2002 03:52:42 +0100 +Received: from mx2.mail.yahoo.com (unknown [200.162.42.34]) + by smtp.easydns.com (Postfix) with SMTP id 0F5742F81F + for ; Sat, 31 Aug 2002 22:50:42 -0400 (EDT) +From: Candi +To: +Subject: Wanna see me get fisted? +MIME-Version: 1.0 +Content-transfer-encoding: 7bit +Message-Id: <20020901025043.0F5742F81F@smtp.easydns.com> +Date: Sat, 31 Aug 2002 22:50:43 -0400 (EDT) +Content-Type: text/html; charset="US-ASCII" + + + +Fist Bang FPA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    Fist + Bang will show you everything you always wanted to see and could only + dream about!
    +
    +
    +
    +
    +
    +
    +
    Disclaimer:
    We are strongly against sending unsolicited emails to those who do not wish to receive our special mailings. You have opted in to one or more of our affiliate sites requesting to be notified of any special offers we may run from time to time. We also have attained the services of an independent 3rd party to overlook list management and removal services. This is NOT unsolicited email. If you do not wish to receive further mailings, please click here to be removed from the list. Please accept our apologies if you have been sent this email in error. We honor all removal requests.

    +

    + +Mother Natures all Natural Marital Aid
    for Men and +Women - Your's Risk Free!

    +

    The +all natural safe formula for men and women your's risk +free for 30 days. Mother Nature's wonder pill of the +21st century.

    +

  • Increased Sensation

  • Increased +Frequency

  • +
  • Increased Pleasure

  • Increased +Desire

  • +
  • Increased Stamina

  • Increased +Libido


  • +Both male and female formulas!

    +Order Your Trial Today !

    +
    +
    +


    to depart +from further contacts +visit +here

    +
    + + +tbeyer + + + + + + diff --git a/Ch3/datasets/spam/spam/00177.56ed33af0cb1d0f700cc2d26a866870b b/Ch3/datasets/spam/spam/00177.56ed33af0cb1d0f700cc2d26a866870b new file mode 100644 index 000000000..6fd4d24a0 --- /dev/null +++ b/Ch3/datasets/spam/spam/00177.56ed33af0cb1d0f700cc2d26a866870b @@ -0,0 +1,172 @@ +From belinda_navarro@hotmail.com Mon Sep 2 12:19:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 4087944158 + for ; Mon, 2 Sep 2002 07:19:07 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:19:07 +0100 (IST) +Received: from eng.lisegainc.com (eng.lisegainc.com [66.21.122.36]) + by webnote.net (8.9.3/8.9.3) with ESMTP id HAA22786 + for ; Sun, 1 Sep 2002 07:24:39 +0100 +From: belinda_navarro@hotmail.com +Received: from easy-med.com ([216.250.210.43]) by eng.lisegainc.com with Microsoft SMTPSVC(5.0.2195.4453); + Sun, 1 Sep 2002 02:35:38 -0400 +Message-ID: <000047c36dc7$0000559c$000012c8@fallerdavis.com> +To: , , , + +Cc: , , + , +Subject: Fw: NORTON SYSTEMWORKS 2002 FINAL CLEARANCE SALE! DJHL +Date: Sun, 01 Sep 2002 02:24:12 -1600 +MIME-Version: 1.0 +Reply-To: belinda_navarro@hotmail.com +X-OriginalArrivalTime: 01 Sep 2002 06:35:40.0619 (UTC) FILETIME=[CA48B9B0:01C25181] +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Norton AD + + + + + + + +
    = +Take + Control of Your Computer With This Top-of-the-Line Software!<= +/td> +
    + + + + + +
    + + + + +
    Norton + SystemWorks 2002 Software Suite
    + -Professional Edition-
    + + + + +
    Includes + Six - Yes 6! + - Feature-Packed Utilities
    ALL for
    1 + Special LOW + Price of Only + $29.99!
    + + + + +
    = +This + Software Will:
     
    = +- + Protect your computer from unwanted and hazardous vir= +uses
     - + Help secure your private & valuable information
     -= + Allow + you to transfer files and send e-mails safely
     = +;- + Backup your ALL your data quick and easily
     - Improve = +your + PC's performance w/superior + integral diagnostics!
     - You'll NEVER have to take = +your + PC to the repair shop AGAIN!
      + + + + +
    +

    6 + Feature-Packed Utilities +
    1 + Great Price
    + A $300+ + Combined Retail Value +
    + YOURS for + Only $29.99! +

    +
    < + Price Includes FREE + Shipping! >
    And + For a Limited time Buy Any 2 of Our Products & Get 1 Free!= +

    +

    Don't fall + prey to destructive viruses or hackers!
    Protect  your computer= + and + your valuable information and

    + + + + +
    -> + CLICK HERE to Order Yours NOW! <-
    + +

    Your email + address was obtained from an opt-in list. Opt-in UEFAS (United Email + Federation Against Spam) Approved List -  Purchase Code # + 8594030.  If you wish to be unsubscribed from this list, p= +lease Click + here . If you have previously unsubscribed and are still receivi= +ng + this message, you may email our Spam + Abuse Control Center. We do not condone spam in any shape or for= +m. + Thank You kindly for your cooperation.

    + + + + + + + diff --git a/Ch3/datasets/spam/spam/00178.cdecf0f56ddc0bf61e922a131dc806c2 b/Ch3/datasets/spam/spam/00178.cdecf0f56ddc0bf61e922a131dc806c2 new file mode 100644 index 000000000..652b44fde --- /dev/null +++ b/Ch3/datasets/spam/spam/00178.cdecf0f56ddc0bf61e922a131dc806c2 @@ -0,0 +1,48 @@ +From firstever001@l6.newnamedns.com Mon Sep 2 12:19:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 41F824415A + for ; Mon, 2 Sep 2002 07:19:11 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:19:11 +0100 (IST) +Received: from l6.newnamedns.com ([64.25.38.76]) + by webnote.net (8.9.3/8.9.3) with ESMTP id QAA24817 + for ; Sun, 1 Sep 2002 16:09:10 +0100 +From: firstever001@l6.newnamedns.com +Date: Sun, 1 Sep 2002 08:06:43 -0500 +Message-Id: <200209011306.g81D6hK03639@l6.newnamedns.com> +To: budmvxtvxf@l6.newnamedns.com +Reply-To: firstever001@l6.newnamedns.com +Subject: ADV: Extended Auto Warranties Here aanfh + +Protect your financial well-being. +Purchase an Extended Auto Warranty for your Car today. CLICK HERE for a FREE no obligation quote. +http://www.newnamedns.com/warranty/ + +Car troubles always seem to happen at the worst possible time. Protect yourself and your family with a quality Extended Warranty for your car, truck, or SUV, so that a large expense cannot hit you all at once. We cover most vehicles with less than 150,000 miles. + +Buy DIRECT! Our prices are 40-60% LESS! + +We offer fair prices and prompt, toll-free claims service. Get an Extended Warranty on your car today. + +Warranty plan also includes: + + 1) 24-Hour Roadside Assistance. + 2) Rental Benefit. + 3) Trip Interruption Intervention. + 4) Extended Towing Benefit. + +CLICK HERE for a FREE no obligation quote. +http://www.newnamedns.com/warranty/ + + + + + +--------------------------------------- +To easily remove your address from the list, go to: +http://www.newnamedns.com/stopthemailplease/ +Please allow 48-72 hours for removal. + diff --git a/Ch3/datasets/spam/spam/00179.2174c80cb3eff623dfc991e51a53eb99 b/Ch3/datasets/spam/spam/00179.2174c80cb3eff623dfc991e51a53eb99 new file mode 100644 index 000000000..7d458765e --- /dev/null +++ b/Ch3/datasets/spam/spam/00179.2174c80cb3eff623dfc991e51a53eb99 @@ -0,0 +1,123 @@ +From r13960@forum.dk Mon Sep 2 12:19:53 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 8E33144155 + for ; Mon, 2 Sep 2002 07:19:50 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:19:50 +0100 (IST) +Received: from mail.unium.com.tw ([203.70.210.202]) + by webnote.net (8.9.3/8.9.3) with ESMTP id AAA25558 + for ; Mon, 2 Sep 2002 00:18:31 +0100 +From: r13960@forum.dk +Received: from sec.maktoob.com ([203.36.200.212]) by mail.unium.com.tw with Microsoft SMTPSVC(5.0.2195.2966); + Sun, 1 Sep 2002 12:23:20 +0800 +Message-ID: <00003e4d3390$000002d3$0000006f@ice.is> +To: +Subject: Get the money you need while mortgage rates are down. +Date: Sat, 31 Aug 2002 22:23:31 -1600 +MIME-Version: 1.0 +Reply-To: newday@gandabacha.com +X-OriginalArrivalTime: 01 Sep 2002 04:23:24.0476 (UTC) FILETIME=[4FF967C0:01C2516F] +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +iieo + + +Mortgage companies make you wait + + + + +
    +
    + + + + + + + + + + + + +
    +

    + Mortgage companies make you wait...They Demand to Interview you...Th= +ey + Intimidate you...They Humiliate you...And All of That is = +While + They Decide If They Even Want to Do Business With You...

    +

    We Tu= +rn the + Tables on Them...
    + Now, You're In Charge

    +

    Just Fill Out = +Our Simple + Form and They Will Have to Compete For Your Business...<= +br> +
    + + + CLICK HERE FOR THE FORM

    +

    + We have hundreds = +of loan + programs, including:
      +
    • Refinance
    • +
    • Debt Consolidation
    • +
    • Home Improvement
    • +
    • Second Mortgages
    • +
    • Cash Out
    • +
    • Home Equity Loan
    • +
    +
    +
    +
    +
    +

    You can save Thousands Of Dollars<= +/u> + over the course of your loan with just a 1/4 of 1% Drop in your = +rate!
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +

    + + CLICK HERE FOR THE FORM

    +

    You + will be contacted with an offer within 24 hours from the time you fi= +ll out + the form!


    Please know that we do= + not want to send you information regarding our special offers if you do n= +ot wish to receive it. If you would no longer like us to contact you or y= +ou feel that you have received this email in error, you may click here to unsubscribe.
    +
    +
    + + + + +xcps + + diff --git a/Ch3/datasets/spam/spam/00180.13a95a2542a0fd01ff24303561cca949 b/Ch3/datasets/spam/spam/00180.13a95a2542a0fd01ff24303561cca949 new file mode 100644 index 000000000..aa2676083 --- /dev/null +++ b/Ch3/datasets/spam/spam/00180.13a95a2542a0fd01ff24303561cca949 @@ -0,0 +1,98 @@ +From betsycallaway8827v30@hotmail.com Mon Sep 2 12:19:57 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 11C0944158 + for ; Mon, 2 Sep 2002 07:19:53 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:19:53 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id DAA25692 + for ; Mon, 2 Sep 2002 03:07:14 +0100 +From: betsycallaway8827v30@hotmail.com +Received: from hotmail.com (unknown [212.234.117.215]) + by smtp.easydns.com (Postfix) with SMTP id 2F85D2BD15 + for ; Sun, 1 Sep 2002 22:07:02 -0400 (EDT) +Received: from [134.157.123.133] by symail.kustanai.co.kr with local; 02 Sep 2002 09:12:28 +0800 +Reply-To: +Message-ID: <036b12a34b3c$8768d5a3$0ac31ee6@owoaic> +To: +Subject: Hottest babes! 4139YAEk3--9 +Date: Tue, 03 Sep 2002 01:10:08 -0800 +MiME-Version: 1.0 +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2615.200 +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00A5_78C83A6B.A1543A16" + +------=_NextPart_000_00A5_78C83A6B.A1543A16 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +MzU0NHRqVFIwLTM5NUZLa20zNjkyYUN6QjUtNDQ5cGVsMzANCjxodG1sPjxi +b2R5IGxpbms9I0ZGRkYwMCB2bGluaz0jRkZGRjAwIGFsaW5rPSNGRkZGMDAg +dGV4dD0jRkZGRjAwIGJnY29sb3I9IzAwMDAwMD4gPHRhYmxlIGJvcmRlckNv +bG9yPSMwMDAwMDAgd2lkdGg9NjAwIGFsaWduPWNlbnRlciBiZ0NvbG9yPSM2 +Njk5MzMgYm9yZGVyPTM+PHRyPjx0ZCBhbGlnbj1taWRkbGU+PGZvbnQgZmFj +ZT1BcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZj48YnI+IDxmb250IGNvbG9y +PXdoaXRlIHNpemU9KzM+PGEgaHJlZj1odHRwOi8vd3d3Lnh4eG1hdGNoLm5l +dC93ZXRiaXRzL2luZGV4Lmh0bT5XZXRiaXRzPC9hPjwvZm9udD48L2ZvbnQ+ +PGEgaHJlZj1odHRwOi8vd3d3Lnh4eG1hdGNoLm5ldC93ZXRiaXRzL2luZGV4 +Lmh0bT4gPC9hPjxwPjxmb250IGZhY2U9QXJpYWwsSGVsdmV0aWNhLHNhbnMt +c2VyaWYgY29sb3I9I2ZmZmYwMCBzaXplPTM+PGI+IEdvbGRlbiBTaG93ZXIg +RXh0cmF2YWdhbnphPC9iPjwvZm9udD48Zm9udCBmYWNlPUFyaWFsLEhlbHZl +dGljYSxzYW5zLXNlcmlmPjxicj4gPGEgaHJlZj1odHRwOi8vd3d3Lnh4eG1h +dGNoLm5ldC93ZXRiaXRzL2luZGV4Lmh0bT4gPGZvbnQgY29sb3I9eWVsbG93 +IHNpemU9KzI+RU5URVIhPC9mb250PjwvYT48L3A+IDx0YWJsZSB3aWR0aD01 +MDAgYWxpZ249Y2VudGVyPjx0cj48dGQgYWxpZ249bWlkZGxlPjxmb250IGNv +bG9yPXdoaXRlIHNpemU9KzM+VW5iZWxpZXZhYmxlIFNleCBBY3RzITwvZm9u +dD48YnI+IDxhIGhyZWY9aHR0cDovL3d3dy54eHhtYXRjaC5uZXQvd2V0Yml0 +cy9pbmRleC5odG0+IDxmb250IGNvbG9yPXllbGxvdyBzaXplPSs0PlNoZSBD +YW4gUGVlIEFsbCBEYXk8L2ZvbnQ+PC9hPjxicj4gPGZvbnQgY29sb3I9Ymxh +Y2sgc2l6ZT0rMj5Db2NrIGNyYXZpbmcgdGVlbnMgc3F1aXJtIGFyb3VuZCBj +b3ZlcmVkIGluIHBlZSB3aXRoIGEgdGhyb2JiaW5nIGNvY2sgYnVyaWVkIHRv +IHRoZSBoaWx0LiBTbGlwcGVyeSBhbmFsIHdob3JlcyBnZXR0aW5nIHdldCE8 +YnI+IDxmb250IHNpemU9KzMgZWxsb3c+U3ByZWFkICdlbSA8L2ZvbnQ+PC9m +b250PiA8Zm9udCBjb2xvcj15ZWxsb3cgc2l6ZT0rMz5QZWU8L2ZvbnQ+PGZv +bnQgY29sb3I9YmxhY2sgc2l6ZT0rMj48Zm9udCBjb2xvcj15ZWxsb3cgc2l6 +ZT0rMz5naXJsITwvZm9udD48YnI+IDxhIGhyZWY9aHR0cDovL3d3dy54eHht +YXRjaC5uZXQvd2V0Yml0cy9pbmRleC5odG0+IDxmb250IGNvbG9yPXllbGxv +dyBzaXplPSs0PkVudGVyITwvZm9udD48L2E+PC9mb250PjwvdGQ+PC90cj4g +PC90YWJsZT4gPHRhYmxlIHdpZHRoPTUwMCBhbGlnbj1jZW50ZXI+PHRyPjx0 +ZCBhbGlnbj1taWRkbGU+PGZvbnQgY29sb3I9d2hpdGUgc2l6ZT0rMT5TZXgg +Y3JhemVkIHBlZWdpcmxzIHJpZGUgY29jayBhbGwgZGF5IHdoaWxlIHBpc3Np +bmcgZm91bnRhaW5zIG9uIHRoZWlyIHBhcnRuZXJzLiBQZWVnaXJscyB0aGF0 +IGNhbid0IGdldCBlbm91Z2ggY3VtLCBzdWNraW5nIG9mZiBkaWNrIGFmdGVy +IGRpY2suIEhvcm55IHNsdXRzIHNwcmVhZGluZyB0aGVtIGZvciBldmVyeSBU +b20sIERpY2sgYW5kIENvY2sgdG8gY29tZSBpbiEgPC9mb250PjwvdGQ+PC90 +cj4gPC90YWJsZT4gPHRhYmxlIGJvcmRlckNvbG9yPWJsYWNrIGJvcmRlckNv +bG9yRGFyaz1ibGFjayBhbGlnbj1jZW50ZXIgYm9yZGVyQ29sb3JMaWdodD1y +ZWQgYm9yZGVyPTI+PHRyPjx0ZCBhbGlnbj1taWRkbGUgd2lkdGg9MjAwPiA8 +YSBocmVmPWh0dHA6Ly93d3cueHh4bWF0Y2gubmV0L3dldGJpdHMvaW5kZXgu +aHRtPiA8Zm9udCBjb2xvcj15ZWxsb3cgc2l6ZT0rMT5VbHRyYS1IYXJkY29y +ZSBBY3Rpb24gPC9mb250PjwvYT48L3RkPjx0ZCBhbGlnbj1taWRkbGUgd2lk +dGg9MjAwPiA8YSBocmVmPWh0dHA6Ly93d3cueHh4bWF0Y2gubmV0L3dldGJp +dHMvaW5kZXguaHRtPiA8Zm9udCBjb2xvcj15ZWxsb3cgc2l6ZT0rMT5UZWVu +YWdlIFBlZWdpcmxzIDwvZm9udD48L2E+PC90ZD48dGQgYWxpZ249bWlkZGxl +IHdpZHRoPTIwMD4gPGEgaHJlZj1odHRwOi8vd3d3Lnh4eG1hdGNoLm5ldC93 +ZXRiaXRzL2luZGV4Lmh0bT4gPGZvbnQgY29sb3I9eWVsbG93IHNpemU9KzE+ +V2lsZCBQZWUgUGFydGllcyA8L2ZvbnQ+PC9hPjwvdGQ+PC90cj48dHI+PHRk +IGFsaWduPW1pZGRsZSB3aWR0aD0yMDA+IDxhIGhyZWY9aHR0cDovL3d3dy54 +eHhtYXRjaC5uZXQvd2V0Yml0cy9pbmRleC5odG0+IDxmb250IGNvbG9yPXll +bGxvdyBzaXplPSsxPkJpemFycmUgVmlkZW9zIDwvZm9udD48L2E+PC90ZD48 +dGQgYWxpZ249bWlkZGxlIHdpZHRoPTIwMD4gPGEgaHJlZj1odHRwOi8vd3d3 +Lnh4eG1hdGNoLm5ldC93ZXRiaXRzL2luZGV4Lmh0bT4gPGZvbnQgY29sb3I9 +eWVsbG93IHNpemU9KzE+SWxsZWdhbCBBY3Rpb24gPC9mb250PjwvYT48L3Rk +Pjx0ZCBhbGlnbj1taWRkbGUgd2lkdGg9MjAwPiA8YSBocmVmPWh0dHA6Ly93 +d3cueHh4bWF0Y2gubmV0L3dldGJpdHMvaW5kZXguaHRtPiA8Zm9udCBjb2xv +cj15ZWxsb3cgc2l6ZT0rMT5IaWRkZW4gUGVlIENhbXMgPC9mb250PjwvYT48 +L3RkPjwvdHI+IDwvdGFibGU+PHA+PGJyPiA8YSBocmVmPWh0dHA6Ly93d3cu +eHh4bWF0Y2gubmV0L3dldGJpdHMvaW5kZXguaHRtPiA8Zm9udCBjb2xvcj15 +ZWxsb3cgc2l6ZT0rMz5FbnRlciBXZXRiaXRzPC9mb250PjwvYT48YnI+PGJy +PiAmbmJzcDs8L2ZvbnQ+PC90ZD48L3RyPiA8L3RhYmxlPjwvYm9keT48L2h0 +bWw+DQo1NDE4WlRRSTAtNjAyb0pUbzk3MDR0TXZJMC05MTZ1TktINjQyNEF0 +WUM0LTQ4NFVVY3UxMzU4T0VlQjItbDU3 + diff --git a/Ch3/datasets/spam/spam/00181.a9ce64eb710cb3f00a7d7db7911291ab b/Ch3/datasets/spam/spam/00181.a9ce64eb710cb3f00a7d7db7911291ab new file mode 100644 index 000000000..98241e147 --- /dev/null +++ b/Ch3/datasets/spam/spam/00181.a9ce64eb710cb3f00a7d7db7911291ab @@ -0,0 +1,56 @@ +From pitster262690294@hotmail.com Mon Sep 2 12:20:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id ED7DF43F9B + for ; Mon, 2 Sep 2002 07:19:53 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:19:53 +0100 (IST) +Received: from ns.sich.cetin.net.cn ([210.79.244.3]) + by webnote.net (8.9.3/8.9.3) with ESMTP id EAA26041 + for ; Mon, 2 Sep 2002 04:59:40 +0100 +From: pitster262690294@hotmail.com +Received: from 65.121.97.140 ([65.121.97.140]) by ns.sich.cetin.net.cn (8.8.5/SCO5) with SMTP id PAA20958; Wed, 21 Aug 2002 15:56:44 +0800 (CST) +Message-Id: <200208210756.PAA20958@ns.sich.cetin.net.cn> +To: zzzz1311@aol.com, yyyy88@hotmail.com, yyyy@spamassassin.taint.org, + zzzzaceves@hotmail.com +Cc: zzzzacfie@hotmail.com, yyyyach@ans.com.au, yyyyack@net56.net +Date: Wed, 21 Aug 2002 03:26:54 -0500 +Subject: How many "inches" do you need to satisfy a woman in bed? +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 +Content-Transfer-Encoding: 7bit +Content-Type: text/html; charset=us-ascii + + + +

    67% of women desire a "bigger" man...
    +>>From the Creator of Longitude comes SizeMAX-
    +The most powerful penis enlargement pill on the market!
    +
    +GO BIG... SATISFY HER BETTER THAN ANY MAN CAN!!!
    +OVER 120,000,000 CAPSULES SOLD!!!
    +
    +. Do you want a larger and firmer penis?
    +. Do you want to give your partner more pleasure?
    +. Do you want to stay ROCK HARD longer?
    +
    +Our Revolutionary Pill Can Enlarge Your Penis
    +Up to 3-FULL-INCHES. 100% GUARANTEED!
    +
    +Believe it or not, it is now possible.
    +Check out dramatic before and after photos and what JANE Magazine had to
    +say about the breakthrough SizeMAX formula...
    +
    +CLICK HERE

    +

     

    +

     

    +

    for no further emails click here

    + + + + [^":}H&*TG0BK5NKIYs5] + + diff --git a/Ch3/datasets/spam/spam/00182.1b9ba0f95506a6f2bf256f40fad0687d b/Ch3/datasets/spam/spam/00182.1b9ba0f95506a6f2bf256f40fad0687d new file mode 100644 index 000000000..2295f8657 --- /dev/null +++ b/Ch3/datasets/spam/spam/00182.1b9ba0f95506a6f2bf256f40fad0687d @@ -0,0 +1,415 @@ +From zzzz@spamassassin.taint.org Mon Sep 2 12:20:05 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 6731743F99 + for ; Mon, 2 Sep 2002 07:19:55 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:19:55 +0100 (IST) +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) + by webnote.net (8.9.3/8.9.3) with ESMTP id HAA26244 + for ; Mon, 2 Sep 2002 07:52:05 +0100 +Received: from $domain (unknown [202.104.189.20]) + by smtp.easydns.com (Postfix) with SMTP id CD5752FD89 + for ; Mon, 2 Sep 2002 02:51:56 -0400 (EDT) +From: zzzz@webnote.net +Received: from spamassassin.taint.org by PTOR0E7585NO3B.netnoteinc.com with SMTP for zzzz@netnoteinc.com; Mon, 02 Sep 2002 02:56:26 -0500 +Date: Mon, 02 Sep 2002 02:56:26 -0500 +Reply-To: zzzz@webnote.net +To: zzzz@spamassassin.taint.org +X-Priority: 3 (Normal) +Message-Id: <2AK99MXB.5DQX6I9.zzzz@spamassassin.taint.org> +Content-Type: text/plain; charset=iso-8859-1 +Subject: A better investment than the stock market. +X-MIME-Autoconverted: from Quoted-Printable to 8bit by webnote.net id HAA26244 +Content-Transfer-Encoding: 8bit + +All our mailings are sent complying to the proposed H.R. 3113 Unsolicited +Commercial Electronic Mail Act of 2000. Please see the bottom of this +message for further information and removal instructions. + + +PARENTS OF 15 - YEAR OLD - FIND $71,000 CASH HIDDEN IN +HIS CLOSET! + +Does this headline look familiar? Of course it does. You most likely have +just seen this story recently featured on a major nightly news program (USA). +And reported elsewhere in the world (including my neck of the woods - +New Zealand). His mother was cleaning and putting laundry away when +she came across a large brown paper bag that was suspiciously buried +beneath some clothes and a skateboard in the back of her 15-year-old +sons closet. Nothing could have prepared her for the shock she got when +she opened the bag and found it was full of cash. Five-dollar bills, twenties, +fifties and hundreds - all neatly rubber-banded in labelled piles. + +"My first thought was that he had robbed a bank", says the 41-year-old +woman, "There was over $71,000 dollars in that bag --that's more than my +husband earns in a year". + +The woman immediately called her husband at the car-dealership where +he worked to tell him what she had discovered.He came home right away +and they drove together to the boys school and picked him up. Little did +they suspect that where the money came from was more shocking than +actually finding it in the closet. + +As it turns out, the boy had been sending out, via E-mail, a type of +"Report" to E-mail addresses that he obtained off the Internet. Everyday +after school for the past 2 months, he had been doing this right on his +computer in his bedroom. + +"I just got the E-mail one day and I figured what the heck, I put my name +on it like the instructions said and I started sending it out", says the clever +15-year-old. + +The E-mail letter listed 5 addresses and contained instructions to send one +$5 dollar bill to each person on the list, then delete the address at the top +and move the others addresses Down , and finally to add your name to +the top of the list. + +The letter goes on to state that you would receive several thousand +dollars in five-dollar bills within 2 weeks if you sent out the letter with your +name at the top of the 5-address list. "I get junk E-mail all the time, and +really did not think it was going to work", the boy continues. + +Within the first few days of sending out the E-mail, the Post Office Box +that his parents had gotten him for his video-game magazine subscriptions +began to fill up with not magazines, but envelopes containing $5 bills. + +"About a week later I rode [my bike] down to the post office and my box +had 1 magazine and about 300 envelops stuffed in it. There was also a +yellow slip that said I had to go up to the [post office] counter. I thought I +was in trouble or something (laughs)". He goes on, "I went up to the +counter and they had a whole box of more mail for me. I had to ride back +home and empty out my backpack because I could not carry it all". Over +the next few weeks, the boy continued sending out the E-mail." The +money just kept coming in and I just kept sorting it and stashing it in the +closet, barely had time for my homework".He had also been riding his bike +to several of the banks in his area and exchanging the $5 bills for twenties, +fifties and hundreds. + +"I didn't want the banks to get suspicious so I kept riding to different banks +with like five thousand at a time in my backpack. I would usually tell the +lady at the bank counter that my dad had sent me in to exchange the +money] and he was outside waiting for me.One time the lady gave me a +really strange look and told me that she would not be able to do it for me +and my dad would have to come in and do it, but I just rode to the next +bank down the street (laughs)." Surprisingly, the boy did not have any +reason to be afraid.The reporting news + +team examined and investigated the so-called "chain-letter" the boy was +sending out and found that it was not a chain-letter at all.In fact, it was +completely legal according to US Postal and Lottery Laws, Title 18, +Section 1302 and 1341, or Title 18, Section 3005 in the US code, also in +the code of federal regulations, Volume 16, Sections 255 and 436, which +state a product or service must be exchanged for money received. + +Every five-dollar bill that he received contained a little note that read, +"Please send me report number XYX".This simple note made the letter +legal because he was exchanging a service (A Report on how-to) for a +five-dollar fee. + +[This is the end of the media release. If you would like to understand how +the system works and get your $71,000 - please continue reading. What +appears below is what the 15 year old was sending out on the net - + YOU CAN USE IT TOO - just follow the simple instructions]. + ++++++++++++++++++++++++++++++++++++++++++++++++++++ +BE FINANCIALLY FREE LIKE OTHERS WITHIN A YEAR!!! Before you +say "Bull", please read the following. This is the letter you have been +hearing about on the news lately. Due to the popularity of this letter on the + Internet, a national weekly news program recently devoted an entire +show to the investigation of this program described below, to see if it really +can make people money. The show also investigated whether or not the +program was legal. Their findings proved once and for all that there are +"absolutely NO Laws prohibiting the participation in the program and if +people can follow the simple instructions, they are bound to make some +megabucks with only $25 out of pocket cost". + + +DUE TO THE RECENT INCREASE OF POPULARITY & RESPECT THIS +PROGRAM HAS ATTAINED, IT IS CURRENTLY WORKING BETTER +THAN EVER. + + +Note* follow the directons below, I had best results the second time when +I hired a bulk email service in addition to following the reports instructions. + +In order for all of us to be successful, many, many emails must be sent so +that the returns are many. I have been extremely successful using the +following company. They send out the offers, and all I do is accept money +for reports, then I send back to the people as soon as possible. + +This is what one had to say: "Thanks to this profitable opportunity. I was +approached many times before but each time I passed on it. I am so glad I +finally joined just to see what one could expect in return for the minimal +effort and money required. To my astonishment, I received total +$610,470.00 in 21 weeks, with money still coming in". + +Pam Hedland, Fort Lee, New Jersey. + ++++++++++++++++++++++++++++++++++++++++++++++++++++ +Here is another testimonial: "This program has been around for a long time +but I never believed in it. But one day when I received this again in the +mail I decided to gamble my $25 on it. I followed the simple instructions +and walaa ..... 3 weeks later the money started to come in. First month I +only made $240.00 but the next 2 months after that I made a total of +$290,000.00. So far, in the past 8 months by re-entering the program, I +have made over $710,000.00 and I am playing it again. The key to +success in this program is to follow the simple steps and NOT change +anything." More testimonials later but first, + +PRINT THIS NOW FOR YOUR FUTURE REFERENCE + +++++ Order all 5 reports shown on the list below +++ +For each report, send $5 CASH, THE NAME & NUMBER OF THE +REPORT YOU ARE ORDERING and YOUR E-MAIL ADDRESS to the +person whose name appears ON THAT LIST next to the report. MAKE +SURE YOUR RETURN ADDRESS IS ON YOUR ENVELOPE TOP LEFT + CORNER in case of any mail problems. + + When you place your order, make sure you order each of the 5 reports. +You will need all 5 reports so that you can save them on your computer. +Within a few days you will receive, vie e-mail, each of the 5 reports from +these 5 different individuals. Save them on your computer so they will be +accessible for you to send to the 1,000's of people who will order them from +you. Also make a floppy of these reports and keep it on your desk in case +something happens to your computer. + + +IMPORTANT - DO NOT alter the names of the people who are listed next +to each report, or their sequence on the list, in any way other than what is +instructed below in step "1 through 6" or you will loose out on majority of +your profits. Once you understand the way this works, you will also see +how it does not work if you change it. Remember, this method has been +tested, and if you alter, it will NOT work!!! People have tried to put their +friends/relatives names on all five thinking they could get all the money. +But it does not work this way. Believe us, we all have tried to be greedy +and then nothing happened. So Do Not try to change anything other than +what is instructed. Because if you do, it will not work for you. Remember, +honesty reaps the reward!!! + + +1.... After you have ordered all 5 reports, take this advertisement and +REMOVE the name & address of the person in REPORT # 5. This person +has made it through the cycle and is no doubt counting their fortune. +2.... Move the name & address in REPORT # 4 down TO REPORT #5. +3.... Move the name & address in REPORT # 3 down TO REPORT #4. +4.... Move the name & address in REPORT # 2 down TO REPORT #3. +5.... Move the name & address in REPORT # 1 down TO REPORT #2 +6.... Insert YOUR name & address in the REPORT # 1 Position. + + +PLEASE MAKE SURE you copy every name & address ACCURATELY! ++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +**** Take this entire letter, with the modified list of names, and save it on +your computer. DO NOT MAKE ANY OTHER CHANGES. Save this on a +disk as well just in case if you loose any data. To assist you with marketing +your business on the internet, the 5 reports you purchase will provide you +with invaluable marketing information which includes how to send bulk +e-mails legally, where to find thousands of free classified ads and much +more. There are 2 Primary methods to get this venture going: + + +METHOD #1: BY SENDING BULK E-MAIL LEGALLY ++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +Let's say that you decide to start small, just to see how it goes, and we will +assume You and those involved send out only 5,000e-mails each. Let's +also assume that the mailing receive only a 0.2% response (the response +could be much better but lets just say it is only 0.2%. Also many people +will send out hundreds of thousands e-mails instead of only 5,000 each). +Continuing with this example, you send out only 5,000 e-mails. + + +With a 0.2% response, that is only 10 orders for report # 1. Those 10 +people responded by sending out 5,000 e-mail each for a total of 50,000. +Out of those 50,000 e-mails only 0.2% responded with orders. That equals +100 people responded and ordered Report # 2. + +Those 100 people mail out 5,000 e-mails each for a total of 500,000 e-mails. +The 0.2% response to that is 1000 orders for Report #3. + +Those 1000 people send out 5,000 e-mails each for a total of 5 million +e-mails sent out. The 0.2% response to that is 10,000 orders for Report #4. + +Those 10,000 people send out 5,000 e-mails each for a total of +50,000,000 (50 million) e-mails. The 0.2% response to that is 100,000 +orders for Report #5. THAT'S 100,000 ORDERS TIMES +$5 EACH=$500,000.00 (half million). Your total income in this example is: +1..... $50 +2.....$500 + 3.....$5,000 + 4..... $50,000 + 5..... $500,000....... +Grand Total=$555,550.00 + + +NUMBERS DO NOT LIE. GET A PENCIL & PAPER AND FIGURE OUT +THE WORST POSSIBLE RESPONSES AND NO MATTER HOW YOU +CALCULATE IT, YOU WILL STILL MAKE A LOT OF MONEY! + ++++++++++++++++++++++++++++++++++++++++++++++++++++ +REMEMBER FRIEND, THIS IS ASSUMING ONLY 10 PEOPLE +ORDERING OUT OF 5,000 YOU MAILED TO. Dare to think for a moment +what would happen if everyone or half or even one 4th of those people +mailed 100,000e-mails each or more? There are over 150 million people on +the Internet worldwide and counting. Believe me, many people will do just +that, and more! + + +METHOD #2: BY PLACING FREE ADS ON THE INTERNET ++++++++++++++++++++++++++++++++++++++++++++++++++++ +Advertising on the net is very very inexpensive and there are hundreds of +FREE places to advertise. Placing a lot of free ads on the Internet will +easily get a larger response. + + +We strongly suggest you start with Method #1 and add METHOD #2 as +you go along. For every $5 you receive, all you must do is e-mail them the +Report they ordered. That's it. Always provide same day service on all +orders. This will guarantee that the e-mail they send out with your name +and address on it, will be prompt because they can not advertise until they +receive the report. + +=ORDER EACH REPORT BY ITS NUMBER & NAME ONLY. Notes: Always +send $5 cash (U.S. CURRENCY) for each Report. Checks NOT +accepted. Make sure the cash is concealed by wrapping it in at least 2 +sheets of paper or aluminum foil. On one of those sheets of paper, Write +the NUMBER & the NAME of the Report you are ordering, YOUR E-MAIL +ADDRESS and your name and postal address. + + +PLACE YOUR ORDER FOR THESE REPORTS NOW: ++++++++++++++++++++++++++++++++++++++++++++++++++++ +REPORT #1: The Insider's Guide to Advertising for Free on the Net + +Order Report #1 from: +R. R. +PO Box 18048 +Chicago, IL 60618 +__________________________________________________________ + +REPORT #2: The Insider's Guide to Sending Bulk e-mail on the Net + +Order Report #2 from: +GM Boland +353 Jonestown Rd. Suite 125 +Winston Salem, NC 27104 +__________________________________________________________ + +REPORT #3: Secret to Multilevel marketing on the Net + +Order Report #3 from: +R. Chernick +PO Box 771661 +C.S. Florida 33077 +__________________________________________________________ + +REPORT #4: How to become a millionaire utilizing MLM & the Net + +Order Report #4 from: +M. Eiseman +PO Box 451971 +Sunrise, Florida 33345-1971 +____________________________________________________ + +REPORT #5: How to send out 0ne Million emails for free + +Order Report #5 From: +L.Samon +PO BOX 31 +Castletown +Isle of Man +IM 99 5XP + ++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +$$$$$$$$$$$$$$$$ YOUR SUCCESS GUIDELINES $$$$$$$$$$$$$$$$ + +Follow these guidelines to guarantee your success: + ++++ If you do not receive at least 10 orders for Report #1 within 2 weeks, +continue sending e-mails until you do. =orders, 2 to 3 weeks after that you should receive 100 orders or more for +REPORT #2. If you did not, continue advertising or sending e-mails until +you do. + ++++ Once you have received 100 or more orders for Report #2, YOU CAN +RELAX, because the system is already working for you, and the cash will +continue to roll in! THIS IS IMPORTANT TO REMEMBER: Every time +your name is moved down on the list, you are placed in front of a Different +report. You can KEEP TRACK of your PROGRESS by watching which +report people are ordering from you. IF YOU WANT TO GENERATE +MORE INCOME SEND ANOTHER BATCH OF E-MAILS AND START +THE WHOLE PROCESS AGAIN. There is NO LIMIT to the income you +can generate from this business!!! + ++++++++++++++++++++++++++++++++++++++++++++++++++++ +FOLLOWING IS A NOTE FROM THE ORIGINATOR OF THIS +PROGRAM: You have just received information that can give you +financial freedom for the rest of your life, with NO RISK and JUST A +LITTLE BIT OF EFFORT. You can make more money in the next few +weeks and months than you have ever imagined. Follow the program +EXACTLY AS INSTRUCTED. Do Not change it in any way. It works +exceedingly well as it is now. + +Remember to e-mail a copy of this exciting report after you have put your +name and address in Report#1 and moved others to #2 thru #5 as +instructed above. One of the people you send this to may send out +100,000 or more e-mails and your name will be on every one of them. +Remember though, the more you send out the more potential customers +you will reach. So my friend, I have given you the ideas, information, +materials and opportunity to become financially independent. +IT IS UP TO YOU NOW! + +++++++++++++++++ MORE TESTIMONIALS ++++++++++++++++ +"My name is Mitchell. My wife, Jody and I live in Chicago. I am an +accountant with a major U.S. Corporation and I make pretty good money. +When I received this program I grumbled to Jody about receiving +"junk mail". I made fun of the whole thing, spouting my knowledge of the +population and percentages involved. I "knew" it wouldn't work. Jody +totally ignored my supposed intelligence and few days later she jumped in +with both feet. I made merciless fun of her, and was ready to lay the old +"I told you so" on her when the thing didn't work. Well, the laugh was on +me! Within 3 weeks she had received 50 responses. Within the next 45 +days she had received total $ 147,200.00....all cash! I was shocked. +I have joined Jody in her "hobby". + +Mitchell Wolf, Chicago, Illinois + ++++++++++++++++++++++++++++++++++++++++++++++++++++ +"Not being the gambling type, it took me several weeks to make up my +mind to participate in this plan. But conservative that I am, I decided that +the initial investment was so little that there was just no way that I +wouldn't get enough orders to at least get my money back". "I was +surprised when I found my medium size post office box crammed with +orders. I made $319,210.00 in the first 12 weeks. The nice thing about +this deal is that it does not matter where people live. There simply isn't a +better investment with a faster return and so big". + +Dan Sondstrom, Alberta, Canada + ++++++++++++++++++++++++++++++++++++++++++++++++++++ +"I had received this program before. I deleted it, but later I wondered if I +should have given it a try. Of course, I had no idea who to contact to get +another copy, so I had to wait until I was e-mailed again by someone +else......11 months passed then it luckily came again...... I did not delete +this one! I made more than $490,000 on my first try and all the money +came within 22 weeks". + +Susan De Suza, New York, N.Y + ++++++++++++++++++++++++++++++++++++++++++++++++++++ +If you have any questions of the legality of this program, contact the Office +of Associate Director for Marketing Practices, Federal Trade Commission, +Bureau of Consumer Protection, Washington,D.C. ++++++++++++++++++++++++++++++++++++++++++++++++++++ + +This email was sent to you via Saf-E Mail Systems. Your email address was +automatically inserted into the To and From addresses to eliminate +undeliverables which waste bandwidth and cause internet congestion. Your +email or webserver IS NOT being used for the sending of this mail. No-one +else is receiving emails from your address. You may utilize the removal link +below if you do not wish to receive this mailing. +http://www.webtransit.net/remove.html + diff --git a/Ch3/datasets/spam/spam/00183.38d9e73b56e7a59ca1472e08076a9b71 b/Ch3/datasets/spam/spam/00183.38d9e73b56e7a59ca1472e08076a9b71 new file mode 100644 index 000000000..80c5c0ae7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00183.38d9e73b56e7a59ca1472e08076a9b71 @@ -0,0 +1,171 @@ +From djungmann@hotmail.com Mon Sep 2 12:20:14 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id EB13E44156 + for ; Mon, 2 Sep 2002 07:19:56 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:19:56 +0100 (IST) +Received: from tvntoday.tvntoday.com ([211.108.60.74]) + by webnote.net (8.9.3/8.9.3) with ESMTP id IAA26261 + for ; Mon, 2 Sep 2002 08:07:48 +0100 +From: djungmann@hotmail.com +Received: from entropie.frmug.fr.net (adsl-213-190-42-180.takas.lt [213.190.42.180]) by tvntoday.tvntoday.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.1960.3) + id SDBJ0NYA; Mon, 2 Sep 2002 16:10:10 +0900 +Message-ID: <000044124742$000066f1$00007dd5@jerrysdodge.com> +To: , , , + , +Cc: , , , + +Subject: Attn: NORTON SYSTEMWORKS CLEARANCE SALE_ONLY $29.99! Y +Date: Mon, 02 Sep 2002 03:02:53 -1600 +MIME-Version: 1.0 +Reply-To: djungmann@hotmail.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Norton AD + + + + + + + +
    = +Take + Control of Your Computer With This Top-of-the-Line Software!<= +/td> +
    + + + + + +
    + + + + +
    Norton + SystemWorks 2002 Software Suite
    + -Professional Edition-
    + + + + +
    Includes + Six - Yes 6! + - Feature-Packed Utilities
    ALL for
    1 + Special LOW + Price of Only + $29.99!
    + + + + +
    = +This + Software Will:
     
    = +- + Protect your computer from unwanted and hazardous vir= +uses
     - + Help secure your private & valuable information
     -= + Allow + you to transfer files and send e-mails safely
     = +;- + Backup your ALL your data quick and easily
     - Improve = +your + PC's performance w/superior + integral diagnostics!
     - You'll NEVER have to take = +your + PC to the repair shop AGAIN!
      + + + + +
    +

    6 + Feature-Packed Utilities +
    1 + Great Price
    + A $300+ + Combined Retail Value +
    + YOURS for + Only $29.99! +

    +
    < + Price Includes FREE + Shipping! >
    And + For a Limited time Buy Any 2 of Our Products & Get 1 Free!= +

    +

    Don't fall + prey to destructive viruses or hackers!
    Protect  your computer= + and + your valuable information and

    + + + + +
    -> + CLICK HERE to Order Yours NOW! <-
    + +

    Your email + address was obtained from an opt-in list. Opt-in UEFAS (United Email + Federation Against Spam) Approved List -  Purchase Code # + 8594030.  If you wish to be unsubscribed from this list, p= +lease Click + here . If you have previously unsubscribed and are still receivi= +ng + this message, you may email our Spam + Abuse Control Center. We do not condone spam in any shape or for= +m. + Thank You kindly for your cooperation.

    + + + + + + + diff --git a/Ch3/datasets/spam/spam/00184.ead42d7ed872c504c79928a5f0a2b2eb b/Ch3/datasets/spam/spam/00184.ead42d7ed872c504c79928a5f0a2b2eb new file mode 100644 index 000000000..7435f5c79 --- /dev/null +++ b/Ch3/datasets/spam/spam/00184.ead42d7ed872c504c79928a5f0a2b2eb @@ -0,0 +1,72 @@ +From sandir1460f46@excite.com Mon Sep 2 12:20:17 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id C2DDC4415B + for ; Mon, 2 Sep 2002 07:20:02 -0400 (EDT) +Received: from mail.webnote.net [193.120.211.219] + by localhost with POP3 (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:20:02 +0100 (IST) +Received: from excite.com (ft.lndl.cncnet.net [210.83.202.202] (may be forged)) + by webnote.net (8.9.3/8.9.3) with SMTP id JAA26454 + for ; Mon, 2 Sep 2002 09:40:20 +0100 +From: sandir1460f46@excite.com +Reply-To: +Message-ID: <017a48b52e1e$4852b4a1$7ab27ec3@iguiad> +To: Conchita@webnote.net +Subject: Teach and Grow Rich +Date: Mon, 02 Sep 2002 08:01:07 -0000 +MiME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +X-Priority: 3 (Normal) +X-MSMail-Priority: Normal +X-Mailer: MIME-tools 5.503 (Entity 5.501) +Importance: Normal +Content-Transfer-Encoding: 8bit + + + Do You Want To Teach and Grow Rich? + + + + + +If you are a motivated and qualified communicator, I will personally train you to do 3 20 minutes presentations per day to qualify prospects that I can provide to you. We will demonstrate to you that you can make $400 a day part time using this system. Or, if you have 20 hours per week, as in my case, you can make in excess of $10,000 per week, as I am currently generating (verifiable, by the way). + +Plus I will introduce you to my mentor who makes well in excess of $1,000,000 annually. + +Many are called, few are chosen. This opportunity will be limited to one qualified individual per state. Make the call and call the 24 hour pre-recorded message number below. We will take as much or as little time as you need to see if this program is right for you. + + *** 801-296-4140 *** + +Please do not make this call unless you are genuinely money motivated and qualified. I need people who already have people skills in place and have either made large amounts of money in the past or are ready to generate large amounts of money in the future. Looking forward to your call. + + *** 801-296-4140 *** + + + + + + + + + + + + + + + + +_______________________________________________________________ +*To be taken out of this database: + benno5@witty.com + + + + + +7783rMXA7-171LWkK6405nYqr3-290bTQi2365AwLL8-360bRcX5658nxuv3-0l58 +4375WCTg4-101pbkG3860ZiOn2-152xcTA8770NGxl9-322sHBy6554mHhn1-223Hl61 + diff --git a/Ch3/datasets/spam/spam/00185.8ca19012fa3f2a906f23c3b41f11ffed b/Ch3/datasets/spam/spam/00185.8ca19012fa3f2a906f23c3b41f11ffed new file mode 100644 index 000000000..a840c5c5f --- /dev/null +++ b/Ch3/datasets/spam/spam/00185.8ca19012fa3f2a906f23c3b41f11ffed @@ -0,0 +1,39 @@ +From info@qpas.co.uk Mon Sep 2 12:30:08 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 254D743F99 + for ; Mon, 2 Sep 2002 07:30:08 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 12:30:08 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7UL4uZ08225 for + ; Fri, 30 Aug 2002 22:04:57 +0100 +Received: from tinycomp + (StyleZice@public1-seve2-6-cust192.walt.broadband.ntl.com [80.1.156.192]) + by webnote.net (8.9.3/8.9.3) with SMTP id WAA15316 for + ; Fri, 30 Aug 2002 22:05:11 +0100 +Message-Id: <200208302105.WAA15316@webnote.net> +From: "Support Engineers" +To: +Subject: UK's Leading PC Specialist +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Sat, 29 Jun 2002 22:02:47 + +Nationwide PC Repairs and Upgrades + +*No call out charges. +*No hourly charges. +*Picked up from your home and returned safely anywhere in the UK. +*Diagnosed and repaired by certified engineer +*We will meet and beat any price + +For more information click on the link below; + +http://www.qpas.co.uk/pcclinic.htm + + + + diff --git a/Ch3/datasets/spam/spam/00186.a66b4fc4ab114c9cb37e1a31d1ea1aeb b/Ch3/datasets/spam/spam/00186.a66b4fc4ab114c9cb37e1a31d1ea1aeb new file mode 100644 index 000000000..429dc3f96 --- /dev/null +++ b/Ch3/datasets/spam/spam/00186.a66b4fc4ab114c9cb37e1a31d1ea1aeb @@ -0,0 +1,295 @@ +From tba@insiq.us Mon Sep 2 16:26:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id CA21544159 + for ; Mon, 2 Sep 2002 11:25:24 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:25:24 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g7TMqjZ31771 for ; Thu, 29 Aug 2002 23:52:45 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Thu, 29 Aug 2002 18:53:43 -0400 +Subject: The TBA Doctor Walks the Walk on Diabetes +To: +Date: Thu, 29 Aug 2002 18:53:43 -0400 +From: "IQ - TBA" +Message-Id: +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJPmjbs8guC4UaLRcexi+sCnvMTIQ== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 29 Aug 2002 22:53:43.0375 (UTC) FILETIME=[ECB16DF0:01C24FAE] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_C7177_01C24F78.AFE25230" + +This is a multi-part message in MIME format. + +------=_NextPart_000_C7177_01C24F78.AFE25230 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: quoted-printable + + The TBA Doctor Walks the Walk... On Diabetes! + =20 + =20 + + +Case 1: Case 2: =20 +? Male age 37 +? Nonsmoker=20 +? $500,000 Face +? Type 1 Diabetic - Treated with Insulin Pump +? Diagnosed at age 23 +? Hospitalized in '95, '96 and '98 with + "Diabetic Complications" +? Issued Standard ? Male age 51 +? Nonsmoker=20 +? $1,200,000 Face +? 6'0", 237lbs=20 +? Takes Micronase and Glucophage +? Issued Super Standard =09 +Case 3: Case 4: =20 +? Female age 60 +? Nonsmoker=20 +? $2,000,000 Face +? 5'5", 165lbs=20 +? Insulin Dependent=20 +? Issued Super Standard ? Male age 45 +? Nonsmoker=20 +? $875,000 Face +? 6'4", 275lbs +? Diabetes Controlled by Diet +? Issued Super Standard =09 +Click here to provide the details on your "tough case" + =20 +Call the Doctor with your case details! +We've cured 1,000s of agents' "tough cases!" + 800-624-4502 ext. 18=09 +=97 or =97 + +Please fill out the form below for more information =20 +Name: =09 +E-mail: =20 +Phone: =20 +City: State: =20 + =09 +=20 + +Tennessee Brokerage Agency - www.TBA.com =20 +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.InsuranceIQ.com/optout + +Legal Notice =20 + +------=_NextPart_000_C7177_01C24F78.AFE25230 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +The TBA Doctor Walks the Walk on Diabetes + + + + + + =20 + + + =20 + + +

    +
    + =20 + + =20 + + + =20 + + + =20 + + + + + +
    +
    =20 + + =20 + + + + =20 + + + + =20 + + + + =20 + + + +
    Case 1:Case 2:
    • Male age = +37
    + • Nonsmoker
    + • $500,000 Face
    + • Type 1 Diabetic - Treated with Insulin = +Pump
    + • Diagnosed at age 23
    + • Hospitalized in '95, '96 and '98 with
    +   "Diabetic Complications"
    + • Issued = +Standard
    +
    • Male age 51
    + • Nonsmoker
    + • $1,200,000 Face
    + • 6'0", 237lbs
    + • Takes Micronase and Glucophage
    + • Issued Super = +Standard
    +
    Case = +3:Case = +4:
    • Female = +age 60
    + • Nonsmoker
    + • $2,000,000 Face
    + • 5'5", 165lbs
    + • Insulin Dependent
    + • Issued Super = +Standard
    +
    • Male age = +45
    + • Nonsmoker
    + • $875,000 Face
    + • 6'4", 275lbs
    + • Diabetes Controlled by Diet
    + • Issued Super = +Standard
    +
    +
    =20 + Call the Doctor with = +your case details!
    + We've cured 1,000s of agents' = +"tough cases!"

    + +
    — or = +—
    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please fill = +out the form below for more information
    Name:
    E-mail:
    Phone:
    City: State:
     =20 + + + =20 +
    +
    +
    + 3D"Tennessee=20 +
    +

    =20 + We don't want anyone to receive our mailings who does not wish = +to. This=20 + is professional communication sent to insurance professionals. = +To be removed=20 + from this mailing list, DO NOT REPLY to this message. = +Instead,=20 + go here: http://www.InsuranceIQ.com/opt= +out

    +
    + Legal Notice=20 +
    +
    =20 + + + +------=_NextPart_000_C7177_01C24F78.AFE25230-- + diff --git a/Ch3/datasets/spam/spam/00187.efd97ab2034b3384606e21db00014ecb b/Ch3/datasets/spam/spam/00187.efd97ab2034b3384606e21db00014ecb new file mode 100644 index 000000000..c54ebeec3 --- /dev/null +++ b/Ch3/datasets/spam/spam/00187.efd97ab2034b3384606e21db00014ecb @@ -0,0 +1,62 @@ +From samurislugs1647k84@yahoo.com Mon Sep 2 16:26:29 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id E32CB44156 + for ; Mon, 2 Sep 2002 11:25:31 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:25:31 +0100 (IST) +Received: from yahoo.com ([61.144.216.44]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7TN99Z32723 for ; + Fri, 30 Aug 2002 00:09:10 +0100 +Received: from unknown (HELO f64.law4.hottestmale.com) (126.87.121.199) by + rly-xr01.nihuyatut.net with QMQP; 30 Aug 0102 10:03:02 -0100 +Received: from unknown (23.176.144.19) by smtp013.mail.yahou.com with + local; 30 Aug 0102 08:57:23 -0300 +Received: from unknown (153.176.78.191) by n7.groups.huyahoo.com with + NNFMP; 30 Aug 0102 05:51:44 -0700 +Reply-To: +Message-Id: <036e01b25e1c$2272a5b1$1ce36dc5@rbavou> +From: +To: +Subject: How would you like to create your own DVD library? 4863d-5 +Date: Thu, 29 Aug 0102 19:49:31 +0300 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00B8_51E06B6A.C8586B31" + +------=_NextPart_000_00B8_51E06B6A.C8586B31 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +SGVyZSdzIHRoZSBob3R0ZXN0IHRoaW5nIGluIERWRHMuIE5vdyB5b3UgY2Fu +IG1ha2UgYSBwZXJzb25hbCBiYWNrdXANCmNvcHkgb2YgYSBEVkQgcmlnaHQg +b250byBDRC1SLiAgT3VyICJIb3QiIG5ldyBzb2Z0d2FyZSBlYXNpbHkgdGFr +ZXMgeW91IHRocm91Z2gNCnRoZSBzdGVwcyB0byBtYWtlIGEgY29weSBvZiB5 +b3VyIG93biBEVkRzLg0KDQpOT1cgSU5DTFVERUQgRk9SIEZSRUUhIENvcHkg +UExBWVNUQVRJT04sIE1VU0lDL01QM3MgYW5kIGFsbCBTb2Z0d2FyZS4NCg0K +LSBTdGVwIGJ5IFN0ZXAgSW50ZXJhY3RpdmUgSW5zdHJ1Y3Rpb25zIA0KLSBB +bGwgU29mdHdhcmUgVG9vbHMgSW5jbHVkZWQgT24gQ0QgDQotIE5vIERWRCBC +dXJuZXIgUmVxdWlyZWQgDQotIEZSRUUgTGl2ZSBUZWNobmljYWwgU3VwcG9y +dCANCi0gMzAgRGF5IFJpc2sgRnJlZSBUcmlhbCBBdmFpbGFibGUgDQotIEZS +RUUgRHZkIE1vdmllIG9mIHlvdXIgY2hvaWNlIChMSU1JVEVEIFRJTUUgT0ZG +RVIhKQ0KDQpXZSBoYXZlIEFsbCB0aGUgc29mdHdhcmUgeW91IG5lZWQgdG8g +Q09QWSB5b3VyIG93biBEVkQgTW92aWVzLg0KDQpodHRwOi8vc2FtLm1vdGhv +c3QuY29tL3Bvcy9kdmQuaHRtDQorKysrKysrKysrKysrKysrKysrKysrKysr +KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr +KysrKysrDQpUaGlzIGVtYWlsIGhhcyBiZWVuIHNjcmVlbmVkIGFuZCBmaWx0 +ZXJlZCBieSBvdXIgaW4gaG91c2UgIiJPUFQtT1VUIiIgc3lzdGVtIGluIA0K +Y29tcGxpYW5jZSB3aXRoIHN0YXRlIGxhd3MuIElmIHlvdSB3aXNoIHRvICJP +UFQtT1VUIiBmcm9tIHRoaXMgbWFpbGluZyBhcyB3ZWxsIA0KYXMgdGhlIGxp +c3RzIG9mIHRob3VzYW5kcyAgb2Ygb3RoZXIgZW1haWwgcHJvdmlkZXJzIHBs +ZWFzZSB2aXNpdCAgDQoNCmh0dHA6Ly9zYW0ubW90aG9zdC5jb20vcG9zL29w +dG91dGQuaHRtbA0KKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr +KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0K +ODQyOVpLWm01LTU4NGJsYW4yODI2enhhRDEtMTM4Qm1uVDYwOThUSWNvNy0y +MjByaWtnMzYyMGw1Mg== + diff --git a/Ch3/datasets/spam/spam/00188.3d145a97a4ccf05a36a1f2795b4c331d b/Ch3/datasets/spam/spam/00188.3d145a97a4ccf05a36a1f2795b4c331d new file mode 100644 index 000000000..bd435aae2 --- /dev/null +++ b/Ch3/datasets/spam/spam/00188.3d145a97a4ccf05a36a1f2795b4c331d @@ -0,0 +1,144 @@ +From FreeSoftware-6720k34@yahoo.com Mon Sep 2 16:26:38 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id B7D5744167 + for ; Mon, 2 Sep 2002 11:25:33 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:25:33 +0100 (IST) +Received: from yahoo.com ([211.252.174.10]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7U0ZAZ06313 for ; + Fri, 30 Aug 2002 01:35:11 +0100 +Reply-To: "FREE Software" +Message-Id: <034b43e21b7e$6861a5c4$1dd34ee7@unfoql> +From: "FREE Software" +To: +Subject: Take Advantage of Viral Marketing +Date: Thu, 29 Aug 2002 13:24:26 +1100 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +Content-Type: text/html; charset="iso-8859-1" + + + +Digital Publishing Tools - Free Software Alert! + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Publish Like a Professional with Digital Publishing Tools + +
    +Easily Create Professional: + +
      +
    • eBooks
    • +
    • eBrochures
    • +
    • eCatalogs
    • +
    • Resumes
    • +
    • Newsletters
    • +
    • Presentations
    • +
    • Magazines
    • +
    • Photo Albums
    • +
    • Invitations
    • +
    • Much, much more
    • +
    +
    +
    +Save MONEY! - Save Trees +
    +
    + +Save on Printing, Postage and Advertising Costs +
    +
    + +DIGITAL PUBLISHING TOOLS +
    +
    +DOWNLOAD NEW FREE Version NOW!
    +
    +
    +*Limited Time Offer +
    +Choose from these
    +Display Styles:
    + +
      +
    • 3D Page Turn
    • +
    • Slide Show
    • +
    • Sweep/Wipe
    • +
    +
    +Embed hyperlinks and Link to anywhere Online, + +such as your Website, Order Page or Contact Form. +
    +
    +Distribute via Floppy, CD-ROM, E-Mail or Online. +
    +
    + +Take your Marketing to the Next Level! +
    + +For More Info, Samples or a FREE Download, click the appropriate link to the right!   +Server demand is extremely high for this limited time Free Software offer.   +Please try these links periodically if a site seems slow or unreachable. + + + +WEBSITE 1
    +WEBSITE 2
    +WEBSITE 3
    +
    +
    +
    + +If you wish to be removed from our mailing list, please cick the Unsubscribe button + +
    +   + +
    +Copyright © 2002 - Affiliate ID #1269
    +*FREE Version is FULLY FUNCTIONAL with NO EXPIRATION and has a 4 page (2 page spread) limit.
    +
    + +
    + + + diff --git a/Ch3/datasets/spam/spam/00189.58d4489891c5ab450678438eb8cc4a3e b/Ch3/datasets/spam/spam/00189.58d4489891c5ab450678438eb8cc4a3e new file mode 100644 index 000000000..4bc93cbc7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00189.58d4489891c5ab450678438eb8cc4a3e @@ -0,0 +1,143 @@ +From audrarsl@cerebro.icb.usp.br Mon Sep 2 16:27:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 1E69544160 + for ; Mon, 2 Sep 2002 11:26:01 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:01 +0100 (IST) +Received: from emailcluster.terra.com.mx (occmta11a.terra.com.mx + [200.53.64.107]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7UE6AZ28056 for ; Fri, 30 Aug 2002 15:06:12 +0100 +Received: from mailhub.usp.br (148.246.142.57) by + emailcluster.terra.com.mx (6.0.053) id 3D43A52A003DE1A8; Fri, + 30 Aug 2002 09:03:43 -0500 +Date: Fri, 30 Aug 2002 09:03:43 -0500 (added by + postmaster@emailcluster.terra.com.mx) +Message-Id: <3D43A52A003DE1A8@occmta11a.terra.com.mx> (added by + postmaster@emailcluster.terra.com.mx) +From: "Shelly" +To: "2591@qwest.net" <2591@qwest.net> +Subject: FW: Washington wire +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + +
    + +OTC
    = + + + Newsletter
    +Discover Tomorrow's Winners 
    + +For Immediate Release
    +

    +Cal-Bay (Stock Symbol: CBYI) +
    Watch for analyst =22Strong Buy Recommendations=22 and several adviso= +ry newsletters picking CBYI. CBYI has filed to be traded on the OTCBB, = +share prices historically INCREASE when companies get listed on this lar= +ger trading exchange. CBYI is trading around 25 cents and should skyrock= +et to =242.66 - =243.25 a share in the near future.
    +Put CBYI on your watch list, acquire a position TODAY.

    +

    +REASONS TO INVEST IN CBYI +

  • = + +A profitable company and is on track to beat ALL earnings estimates=21 +
  • = + +One of the FASTEST growing distributors in environmental & safety e= +quipment instruments. +
  • +Excellent management team, several EXCLUSIVE contracts. IMPRESSIVE cli= +ent list including the U.S. Air Force, Anheuser-Busch, Chevron Refining = +and Mitsubishi Heavy Industries, GE-Energy & Environmental Research.= + +

    +RAPIDLY GROWING INDUSTRY +
    Industry revenues exceed =24900 million, estimates indicate that the= +re could be as much as =2425 billion from =22smell technology=22 by the end= + of 2003.

    +

    +=21=21=21=21=21CONGRATULATIONS=21=21=21=21=21
    Our last recommendation t= +o buy ORBT at =241.29 rallied and is holding steady at =243.50=21 Congratul= +ations to all our subscribers that took advantage of this recommendation= +.









    +

    +ALL removes HONORED. Please allow 7 days to be removed and send ALL add= +resses to: + +GoneForGood=40btamail.ne= +t.cn +

  •  
    + +Certain statements contained in this news release may be forward-lookin= +g statements within the meaning of The Private Securities Litigation Ref= +orm Act of 1995. These statements may be identified by such terms as =22e= +xpect=22, =22believe=22, =22may=22, =22will=22, and =22intend=22 or similar terms= +. We are NOT a registered investment advisor or a broker dealer. This is= + NOT an offer to buy or sell securities. No recommendation that the secu= +rities of the companies profiled should be purchased, sold or held by in= +dividuals or entities that learn of the profiled companies. We were paid= + =2427,000 in cash by a third party to publish this report. Investing in = +companies profiled is high-risk and use of this information is for readi= +ng purposes only. If anyone decides to act as an investor, then it will = +be that investor's sole risk. Investors are advised NOT to invest withou= +t the proper advisement from an attorney or a registered financial broke= +r. Do not rely solely on the information presented, do additional indepe= +ndent research to form your own opinion and decision regarding investing= + in the profiled companies. Be advised that the purchase of such high-ri= +sk securities may result in the loss of your entire investment. Not int= +ended for recipients or residents of CA,CO,CT,DE,ID, IL,IA,LA,MO,NV,NC,O= +K,OH,PA,RI,TN,VA,WA,WV,WI. Void where prohibited. The owners of this pu= +blication may already own free trading shares in CBYI and may immediatel= +y sell all or a portion of these shares into the open market at or about= + the time this report is published. Factual statements are made as of t= +he date stated and are subject to change without notice. +
    Copyright c 2001

    +
    + +OTC
    +
    + +*** + diff --git a/Ch3/datasets/spam/spam/00190.dbaebac8c91d57cf7c9b9a431606ce54 b/Ch3/datasets/spam/spam/00190.dbaebac8c91d57cf7c9b9a431606ce54 new file mode 100644 index 000000000..85b7904ea --- /dev/null +++ b/Ch3/datasets/spam/spam/00190.dbaebac8c91d57cf7c9b9a431606ce54 @@ -0,0 +1,52 @@ +From pamela7046@eudoramail.com Mon Sep 2 16:27:09 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 2BEB744161 + for ; Mon, 2 Sep 2002 11:26:05 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:05 +0100 (IST) +Received: from mail.wuliaos.com ([65.211.247.226]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g7UGbAZ00856 for ; + Fri, 30 Aug 2002 17:37:11 +0100 +Received: from ([]) by mail.wuliaos.com (Merak 4.4.2) with SMTP id + B6E55D55; Sat, 31 Aug 2002 00:37:13 +0800 +Message-Id: <0000328d3fea$000055d3$00004aef@mx1.eudoramail.com> +To: +From: pamela7046@eudoramail.com +Subject: Approved Online, Internet, Buy Viagra SJHFL +Date: Fri, 30 Aug 2002 22:07:14 -0700 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + +Natures Own + + +
    + + +

    Free Introductory Offer!
    +Mother Nature's own all natural Viagra

    +

    +

  • Men's and Women's Formula

  • +
  • Increased Sensation

  • Increased Frequency

  • +
  • Increased Pleasure

  • Increased Desire

  • +
  • Increased Stamina

  • Increased Libido

  • + +Claim your Introductory Offer !

    +
    +

    +To stop receiving future offers +Click Here

    + + + + + + diff --git a/Ch3/datasets/spam/spam/00191.9ff80a41f015b7a6c409732e41c0df07 b/Ch3/datasets/spam/spam/00191.9ff80a41f015b7a6c409732e41c0df07 new file mode 100644 index 000000000..a1fc11a6f --- /dev/null +++ b/Ch3/datasets/spam/spam/00191.9ff80a41f015b7a6c409732e41c0df07 @@ -0,0 +1,129 @@ +From bounce@trafficmagnet.com Mon Sep 2 16:27:17 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 1F1A74416B + for ; Mon, 2 Sep 2002 11:26:09 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:09 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7UI1jZ03256 for + ; Fri, 30 Aug 2002 19:01:53 +0100 +Received: from localhost.localdomain ([211.101.236.180]) by webnote.net + (8.9.3/8.9.3) with ESMTP id TAA14747 for + ; Fri, 30 Aug 2002 19:01:53 +0100 +Received: from () by localhost.localdomain (8.11.6/8.11.6) with ESMTP id + g7UHtYU08307 for ; Sat, + 31 Aug 2002 01:55:35 +0800 +Message-Id: <484CR1000023044@emaserver.trafficmagnet.net> +Date: Sat, 31 Aug 2002 01:59:39 -0700 (PDT) +From: Sarah Williams +Reply-To: Sarah Williams +To: zzzz-latestdodgydotcomstock@spamassassin.taint.org +Subject: taint.org +MIME-Version: 1.0 +X-Ema-Cid: 11028981 +X-Ema-Lid: +X-Ema-PC: 0efff538a0000 +Content-Type: multipart/alternative; boundary=374035298.1030784379296.JavaMail.SYSTEM.emaserver2 + +--374035298.1030784379296.JavaMail.SYSTEM.emaserver2 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 7bit + +Hi + +I visited taint.org, and noticed that you're not listed on some search engines! I think we can +offer you a service which can help you increase traffic and the number of visitors to your website. + +I would like to introduce you to TrafficMagnet.com. We offer a unique technology that will submit your +website to over 300,000 search engines and directories every month. + +You'll be surprised by the low cost, and by how effective this website promotion method can be. + +To find out more about TrafficMagnet and the cost for submitting your website to over 300,000 search +engines and directories, visit us at: + +http://emaserver.trafficmagnet.net/trafficmagnet/www/r?1000023044.484.23.+bpOq88R31Z$Ff + + +I would love to hear from you. + + +Best Regards, + +Sarah Williams +Sales and Marketing +E-mail: Sarah_Williams@trafficmagnet.com +http://www.TrafficMagnet.com + +This email was sent to zzzz-latestdodgydotcomstock@jmason.org. +I understand that you may NOT wish to receive information from me by email. +To be removed from this and other offers, simply go to the link below: +http://emaserver.trafficmagnet.net/trafficmagnet/www/optoutredirect?UC=Lead&UI=11028981 +--374035298.1030784379296.JavaMail.SYSTEM.emaserver2 +Content-Type: text/html; charset=utf-8 +Content-Transfer-Encoding: 7bit + + + + + + + + + + + + + + + +
    Hi
    +
    + I visited taint.org, and + noticed that you're not listed on some search engines! I think we can offer + you a service which can help you increase traffic and the number of visitors + to your website.
    +
    + I would like to introduce you to TrafficMagnet.com. We offer a unique technology + that will submit your website to over 300,000 search engines and directories + every month.
    +
    + + + + + + +
     
    +
    + You'll be surprised by the low cost, and by how effective this website promotion + method can be.
    +
    + To find out more about TrafficMagnet and the cost for submitting your website + to over 300,000 search engines and directories, visit www.TrafficMagnet.com. +
    +
    + I would love to hear from you.
    +

    + Best Regards,

    + Sarah Williams
    + Sales and Marketing
    + E-mail: Sarah_Williams@trafficmagnet.com
    + http://www.TrafficMagnet.com +

     

    This email was sent to zzzz-latestdodgydotcomstock@jmason.org.
    + I understand that you may NOT wish to receive information from me by email.
    + To be removed from this and other offers, simply click here.
    +
    +. + + +--374035298.1030784379296.JavaMail.SYSTEM.emaserver2-- + + diff --git a/Ch3/datasets/spam/spam/00192.e5a6bb15ae1e965f3b823c75e435651a b/Ch3/datasets/spam/spam/00192.e5a6bb15ae1e965f3b823c75e435651a new file mode 100644 index 000000000..4b98af7c2 --- /dev/null +++ b/Ch3/datasets/spam/spam/00192.e5a6bb15ae1e965f3b823c75e435651a @@ -0,0 +1,384 @@ +From rym@insiq.us Mon Sep 2 16:27:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id BF3AC44164 + for ; Mon, 2 Sep 2002 11:26:10 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:10 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g7UIEZZ03611 for ; Fri, 30 Aug 2002 19:14:36 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Fri, 30 Aug 2002 14:15:32 -0400 +Subject: New Insurance Product - No Competition +To: +Date: Fri, 30 Aug 2002 14:15:32 -0400 +From: "IQ - Reduce Your Mortgage" +Message-Id: <1277d801c25051$3a882850$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJQPJm18kzG6uFfThquWge9vhxnnA== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 30 Aug 2002 18:15:32.0640 (UTC) FILETIME=[3AA72200:01C25051] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_109047_01C2501B.12AB23E0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_109047_01C2501B.12AB23E0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + 300,000 homeowners can't be wrong! + + Agent opportunities now available + + + The Mortgage Savings Program(tm) -- Great New Product For Your Clients! + + +22 Year Old Company - Leader in Industry! +? No Refinancing Fees ? No Payroll Deductions +? No Credit Report ? No Paperwork To Do +? No Group Requirements ? Generate Free Leads +? Perpetual Commissions ? No Competition + +Your Current Mortgage +Dollar amount of your mortgage: $200,000 +Percentage rate of your mortgage: 8.50% +Your current monthly payment: $1,537.83 +Total Interest paid: $353,614 +Paid off in: 30.0 Years +With the Reduce-My-Mortgage plan +Your bi-weekly payment: $768.92 +Total Interest paid: $250,142 +Total Interest savings: $103,471 +Paid off in: 22.6 Years +Number of payments saved: 89 +Equivalent interest rate: 6.40% + +Call today for more information! + 800-550-2666 ext. 122 +? or ? + +Please fill out the form below for more information +Name: +E-mail: +Phone: +City: State: +Timezone: Eastern Central Mountain Pacific + + + + +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.Insurancemail.net + +Legal Notice + +------=_NextPart_000_109047_01C2501B.12AB23E0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +New Insurance Product - No Competition + + + +=20 + + =20 + + + =20 + + +
    =20 + + =20 + + + =20 + + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + +
    3D"300,000
    +
    + 3D"Agent
    + +
    3D"The
     =20 + + =20 + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + +
    22 Year Old = +Company - Leader in Industry!
    • No = +Refinancing Fees• No = +Payroll Deductions
    • No = +Credit Report• No = +Paperwork To Do
    • No = +Group Requirements• Generate Free Leads
    • Perpetual = +Commissions• No Competition
    +
     =20 + + =20 + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + +
    + Your Current Mortgage +
    Dollar amount of your mortgage:$200,000
    Percentage rate of your = +mortgage:8.50%
    Your current monthly payment:$1,537.83
    Total Interest paid:$353,614
    Paid off in:30.0 Years
    + With the Reduce-My-Mortgage plan +
    Your bi-weekly payment:$768.92
    Total Interest paid:$250,142
    Total Interest savings:$103,471
    Paid off in:22.6 Years
    Number of payments saved:89
    Equivalent interest rate:6.40%
    +
     
    Call today for more = +information!
    + 3D"800-550-2666=20 +
    + — or —

    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + + =20 + + + + + +
    Please fill = +out the form below for more information
    Name:=20 + +
    E-mail:=20 + +
    Phone:=20 + +
    City:=20 + + State:=20 + +
    Timezone: =20 + Eastern   =20 + Central   =20 + Mountain   =20 + Pacific +
     =20 + +  =20 + + +
    +
    +  
    + =20 +
    +
    =20 +

    We = +don't want anyone=20 + to receive our mailings who does not wish to. This is = +professional communication=20 + sent to insurance professionals. To be removed from this mailing = +list,=20 + DO NOT REPLY to this message. Instead, go here: =20 + http://www.Insurancemail.net

    +
    +
    + Legal Notice=20 +
    +
    =20 + + + +------=_NextPart_000_109047_01C2501B.12AB23E0-- + diff --git a/Ch3/datasets/spam/spam/00193.c04ef77bc3dbaa5762760a6ea138df0e b/Ch3/datasets/spam/spam/00193.c04ef77bc3dbaa5762760a6ea138df0e new file mode 100644 index 000000000..888fac348 --- /dev/null +++ b/Ch3/datasets/spam/spam/00193.c04ef77bc3dbaa5762760a6ea138df0e @@ -0,0 +1,83 @@ +From ilug-admin@linux.ie Mon Sep 2 16:27:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 8BB8C4416C + for ; Mon, 2 Sep 2002 11:26:13 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:13 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7UIJaZ03708 for + ; Fri, 30 Aug 2002 19:19:36 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id TAA03135; Fri, 30 Aug 2002 19:18:49 +0100 +Received: from torchlake.torchlake.com (torchlake.com [12.40.132.132]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id TAA03108 for ; + Fri, 30 Aug 2002 19:18:38 +0100 +From: shermanm@torchlake.com +X-Authentication-Warning: lugh.tuatha.org: Host torchlake.com + [12.40.132.132] claimed to be torchlake.torchlake.com +Received: from [12.40.140.127] by torchlake.torchlake.com (NTMail + 7.00.0018/NY4640.00.d4f09674) with ESMTP id cljgyhaa for ilug@linux.ie; + Fri, 30 Aug 2002 14:15:24 -0400 +To: ilug@linux.ie +Content-Type: text/plain;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Date: Fri, 30 Aug 2002 14:18:34 -0500 +X-Priority: 3 +X-Library: Indy 8.0.25 +Message-Id: <18152484391653@torchlake.torchlake.com> +Subject: [ILUG] STOP THE MLM INSANITY +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Greetings! + +You are receiving this letter because you have expressed an interest in receiving information about online business opportunities. If this is erroneous then please accept my most sincere apology. This is a one-time mailing, so no removal is necessary. + +If you've been burned, betrayed, and back-stabbed by multi-level marketing, MLM, then please read this letter. It could be the most important one that has ever landed in your Inbox. + +MULTI-LEVEL MARKETING IS A HUGE MISTAKE FOR MOST PEOPLE + +MLM has failed to deliver on its promises for the past 50 years. The pursuit of the "MLM Dream" has cost hundreds of thousands of people their friends, their fortunes and their sacred honor. +The fact is that MLM is fatally flawed, meaning that it CANNOT work for most people. +The companies and the few who earn the big money in MLM are NOT going to tell you the real story. FINALLY, there is someone who has the courage to cut through the hype and lies and tell the TRUTH about MLM. + +HERE'S GOOD NEWS + +There IS an alternative to MLM that WORKS, and works BIG! If you haven't yet abandoned your dreams, then you need to see this. Earning the kind of income you've dreamed about is easier than you think! + +With your permission, I'd like to send you a brief letter that will tell you WHY MLM doesn't work for most people and will then introduce you to something so new and refreshing that you'll wonder why you haven't heard of this before. + +I promise that there will be NO unwanted follow up, NO sales pitch, no one will call you, and your email address will only be used to send you the information. Period. + +To receive this free, life-changing information, simply click Reply, type "Send Info" in the Subject box and hit Send. I'll get the information to you within 24 hours. Just look for the words MLM WALL OF SHAME in your Inbox. + +Cordially, + +Mark R Sherman + +P.S. Someone recently sent the letter to me and it has been the most eye-opening, financially beneficial information I have ever received. I honestly believe that you will feel the same way once you've read it. And it's FREE! + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00194.767c323b4ae7a4909397e42cbd0c56a4 b/Ch3/datasets/spam/spam/00194.767c323b4ae7a4909397e42cbd0c56a4 new file mode 100644 index 000000000..6f4f8a5a1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00194.767c323b4ae7a4909397e42cbd0c56a4 @@ -0,0 +1,35 @@ +From zzzz-latestdodgydotcomstock@jmason.org Mon Sep 2 16:27:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 75B1143F99 + for ; Mon, 2 Sep 2002 11:26:17 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:19 +0100 (IST) +Received: from c448022-c (12-243-62-67.client.attbi.com [12.243.62.67]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7V2kdZ20239 for + ; Sat, 31 Aug 2002 03:46:40 +0100 +Message-Id: <200208310246.g7V2kdZ20239@dogma.slashnull.org> +From: "zzzz-latestdodgydotcomstock" +To: "zzzz-latestdodgydotcomstock" +Subject: Testing a system, please delete +Date: Fri, 30 Aug 02 21:48:08 Eastern Daylight Time +MIME-Version: 1.0 +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2462.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2462.0000 +Content-Type: multipart/mixed;boundary= "----=_NextPart_000_006C_6B8D6A65.3C3C56F" + +------=_NextPart_000_006C_6B8D6A65.3C3C56F +Content-Type: text/plain +Content-Transfer-Encoding: base64 + +UGxlYXNlIGZvcmdpdmUgdGhlIGludHJ1c2lvbiwgdGhpcyBpcyBhIG9uZSB0aW1lIG9ubHkg +dGVzdCwgcGxlYXNlIGRlbGV0ZS4gDQpZb3Ugc2hvdWxkIG5vdCByZWNlaXZlIGFueSBhZGRp +dGlvbmFsIGVtYWlscyBmcm9tIHRoaXMgYWRkcmVzcywgaWYgeW91IGRvIHBsZWFzZSBzZW5k +IGFuIGVtYWlsIA0Kd2l0aCByZW1vdmUgYXMgc3ViamVjdCB0bzoNCg0KdGVzdDc5OTFAeWFo +b28uY29tDQoNClRoYW5rIHlvdSBmb3IgeW91ciB1bmRlcnN0YW5kaW5nLg0KDQogICAg +------=_NextPart_000_006C_6B8D6A65.3C3C56F-- + diff --git a/Ch3/datasets/spam/spam/00195.0a543c2780491168160570bb6708af86 b/Ch3/datasets/spam/spam/00195.0a543c2780491168160570bb6708af86 new file mode 100644 index 000000000..de51fd88c --- /dev/null +++ b/Ch3/datasets/spam/spam/00195.0a543c2780491168160570bb6708af86 @@ -0,0 +1,139 @@ +From dz524878@caramail.com Mon Sep 2 16:27:29 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id E086544165 + for ; Mon, 2 Sep 2002 11:26:15 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:15 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7UNQ6Z12324 for + ; Sat, 31 Aug 2002 00:26:06 +0100 +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) by + webnote.net (8.9.3/8.9.3) with ESMTP id AAA15716 for ; + Sat, 31 Aug 2002 00:26:20 +0100 +From: dz524878@caramail.com +Received: from caramail.com (unknown [203.28.36.132]) by smtp.easydns.com + (Postfix) with SMTP id 7461F2C796 for ; Fri, + 30 Aug 2002 19:26:08 -0400 (EDT) +Reply-To: +Message-Id: <002b87e55bcb$7265c1b0$6ed64db7@yvmgkv> +To: +Subject: !Gorgeous,Custom Websites - $399 Complete! (4156cumG9-855YQKc5@17) +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +Importance: Normal +Date: Fri, 30 Aug 2002 19:26:08 -0400 (EDT) +Content-Type: text/html; charset="iso-8859-1" + + + + + + +
      +
    + + + + + + + + + +
    +

    Beautiful Custom + Websites, $399 Complete!

     
    + + + + +
    +
    +

    +

    Get a beautiful, 100% Custom Web Site
     (or + yours redesignedfor only $399!*

    We + have references coast to coast 
    and will give you + plenty of sites to + view!

    + + + +
    + + + + +
    Includes up to 7 pages (you can add + more), java rollover buttons, feedback forms, more. It + will be constructed to your taste and + specifications, we do not use templates.  + Our sites are completely + custom.    *Must host with us @ + $19.95/mo (100 Megs, 20 Email accounts, Control Panel, + Front Page, Graphical Statistics, + more).
    + + + + + + + +
    For sites to view, complete below or call our + message center at
    321-726-2209 (24 hours). Your call + will be returned promptly.

    NOTE:  If + you are using a web based email program (such as Yahoo, + Hotmail,
    etc.) the form below will not + work.
     
    Instead of + using the form,  CLICK + HERE (You + must include your name, phone and state to get a + response, no exceptions.
    +
    + + + +
    +

     Name: Phone + w/AC*:State:
     Type Project: New + Site:Redesign   Current + site?:
     Comments:
      

    Your information is neither sold nor shared + with third parties under any + circumstance.

    +

    + +

    To be eliminated from + future mailings, Click + Here

    + +[6560Icum3-199GYQK9350cvpH2-701z@29] + + diff --git a/Ch3/datasets/spam/spam/00196.dd21040c7757d477c967ae71b537810e b/Ch3/datasets/spam/spam/00196.dd21040c7757d477c967ae71b537810e new file mode 100644 index 000000000..5739a24b7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00196.dd21040c7757d477c967ae71b537810e @@ -0,0 +1,181 @@ +From bcbalbstr2@hotmail.com Mon Sep 2 16:27:35 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id E15D64416F + for ; Mon, 2 Sep 2002 11:26:22 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:22 +0100 (IST) +Received: from seagull.cpinternet.com (mail.cpinternet.com + [209.240.224.4]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g7VC5HZ01049 for ; Sat, 31 Aug 2002 13:05:17 +0100 +Received: from bsa01.vac-bsa.org (mail.vac-bsa.org [209.240.238.223]) by + seagull.cpinternet.com (8.12.5/8.12.0) with ESMTP id g7VASmWT006287; + Sat, 31 Aug 2002 07:03:32 -0500 (CDT) +Received: from hpbbse.bbn.hp.com (grains.nic.in [164.100.243.60]) by + bsa01.vac-bsa.org with SMTP (Microsoft Exchange Internet Mail Service + Version 5.5.2653.13) id Q6LNKPJP; Wed, 28 Aug 2002 08:23:08 -0500 +Message-Id: <000029b40114$00004eac$000016c5@novomoskovsk.ru> +To: , , , + , , + , +Cc: , , + , , + , , + +From: bcbalbstr2@hotmail.com +Subject: Fw: NORTON SYSTEMWORKS 2002 CLEARANCE SALE! 11058 +Date: Wed, 28 Aug 2002 09:18:21 -1600 +MIME-Version: 1.0 +Reply-To: bcbalbstr2@hotmail.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Norton AD + + + + + + + +
    = +Take + Control of Your Computer With This Top-of-the-Line Software!<= +/td> +
    + + + + + +
    + + + + +
    Norton + SystemWorks 2002 Software Suite
    + -Professional Edition-
    + + + + +
    Includes + Six - Yes 6! + - Feature-Packed Utilities
    ALL for
    1 + Special LOW + Price of Only + $29.99!
    + + + + +
    = +This + Software Will:
     
    = +- + Protect your computer from unwanted and hazardous vir= +uses
     - + Help secure your private & valuable information
     -= + Allow + you to transfer files and send e-mails safely
     = +;- + Backup your ALL your data quick and easily
     - Improve = +your + PC's performance w/superior + integral diagnostics!
     - You'll NEVER have to take = +your + PC to the repair shop AGAIN!
      + + + + +
    +

    6 + Feature-Packed Utilities +
    1 + Great Price
    + A $300+ + Combined Retail Value +
    + YOURS for + Only $29.99! +

    +
    < + Price Includes FREE + Shipping! >
    And + For a Limited time Buy Any 2 of Our Products & Get 1 Free!= +

    +

    Don't fall + prey to destructive viruses or hackers!
    Protect  your computer= + and + your valuable information and

    + + + + +
    -> + CLICK HERE to Order Yours NOW! <-
    +

    or Call + Toll-Free 1-800-861-1481!

    +

    Your email + address was obtained from an opt-in list. Opt-in UEFAS (United Email + Federation Against Spam) Approved List -  Purchase Code # + 8594030.  If you wish to be unsubscribed from this list, p= +lease Click + here . If you have previously unsubscribed and are still receivi= +ng + this message, you may email our Spam + Abuse Control Center. We do not condone spam in any shape or for= +m. + Thank You kindly for your cooperation.

    + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00197.5a921df53d215a60d557c68754559e93 b/Ch3/datasets/spam/spam/00197.5a921df53d215a60d557c68754559e93 new file mode 100644 index 000000000..dd29c8544 --- /dev/null +++ b/Ch3/datasets/spam/spam/00197.5a921df53d215a60d557c68754559e93 @@ -0,0 +1,452 @@ +From MakeMoney@EMXD.legally.com Mon Sep 2 16:27:35 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 5C0E94416E + for ; Mon, 2 Sep 2002 11:26:20 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:20 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7VBvGZ00839 for + ; Sat, 31 Aug 2002 12:57:17 +0100 +Received: from 168.191.209.166 (sdn-ar-004nvlvegP078.dialsprint.net + [168.191.209.166]) by webnote.net (8.9.3/8.9.3) with SMTP id MAA18436 for + ; Sat, 31 Aug 2002 12:57:22 +0100 +Date: Sat, 31 Aug 2002 12:57:22 +0100 +Message-Id: <200208311157.MAA18436@webnote.net> +From: MakeMoney@EMXD.legally.com +To: Business@webnote.net, Partner@zzzzason.org +Subject: FW: Make Money Fast And Legal! As Seen on TV! 65000$+ +X-Reply-To: MakeMoney@legally.com +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 7bit + +THE ULTIMATE WAY TO WORK FROM HOME +THE BEST MONEY MAKING SYSTEM OF ALL!! +AS SEEN ON NATIONAL TV +As seen on 20/20 and many other credible references. This is NOT a scam. +I hope this is ok that I send you this. If you aren't interested, just +simply delete it. +READ THIS MESSAGE if you are like me and want more than your lousy +weekly paycheck. Make more in a few months than last year at work. +Believe it, work it. +This really works, don't make the same mistake I made. I deleted this +4-5 times before finally giving it a try. Within 2 weeks the orders +(money) +started coming in just like the plan below said it would. Give it a +try!! +You will be glad you did. +Thanks and Good Luck! You won't need luck, just keep reading. Don't +delete this!!! +------------------------------------------------------ +First read about how a 15 year old made $71,000. See below.... +AS SEEN ON NATIONAL TV: This is the media report. +PARENTS OF 15 - YEAR OLD - FIND $71,000 CASH HIDDEN +IN HIS CLOSET! +Does this headline look familiar? Of course it does. +You most likely have just seen this story recently +featured on a major nightly news program (USA). +And reported elsewhere in the world (including my neck +of the woods - New Zealand). His mother was cleaning +and putting laundry away when she came across a large +brown paper bag that was suspiciously buried beneath +some clothes and a skateboard in the back of her +15-year-old sons closet. +Nothing could have prepared her for the shock she got +when she opened the bag and found it was full of cash. +Five-dollar bills, twenties, fifties and hundreds - +all neatly rubber-banded in labeled piles. +"My first thought was that he had robbed a bank", +says the 41-year-old woman, "There was over $71,000 +dollars in that bag -- that's more than my husband +earns in a year". +The woman immediately called her husband at the +car-dealership where he worked to tell him what she +had discovered. He came home right away and they +drove together to the boys school and picked him up. +Little did they suspect that where the money came from +was more shocking than actually finding it in +the closet. +As it turns out, the boy had been sending out, via +E-mail, a type of "Report" to E-mail addresses that he +obtained off the Internet. Everyday after school for +the past 2 months, he had been doing this right on his +computer in his bedroom. +"I just got the E-mail one day and I figured what the +heck, I put my name on it like the instructions said +and I started sending it out", says the clever +15-year-old. +The E-mail letter listed 5 addresses and contained +instructions to send one $5 dollar bill to each person +on the list, then delete the address at the top and +move the others addresses down, and finally to add +your name to the top of the list. +The letter goes on to state that you would receive +several thousand dollars in five-dollar bills within 2 +weeks if you sent out the letter with your +name at the top of the 5-address list. "I get junk +E-mail all the time, and really did not think it was +going to work", the boy continues. +Within the first few days of sending out the E-mail, +the Post Office Box that his parents had gotten him +for his video-game magazine subscriptions began to +fill up with not magazines, but envelopes containing +$5 bills. +"About a week later I rode [my bike] down to the post +office and my box had 1 magazine and about 300 +envelops stuffed in it. There was also a yellow slip +that said I had to go up to the [post office] counter. +I thought I was in trouble or something (laughs)". He +goes on, "I went up to the counter and they had a +whole box of more mail for me. I had to ride back +home and empty out my backpack because I could not +carry it all". +Over the next few weeks, the boy continued sending +out the E-mail. "The money just kept coming in and I +just kept sorting it and stashing it in the closet, +barely had time for my homework". He had also +been riding his bike to several of the banks in his +area and exchanging the $5 bills for twenties, fifties +and hundreds. +"I didn't want the banks to get suspicious so I kept +riding to different banks with like five thousand at a +time in my backpack. I would usually tell the lady at +the bank counter that my dad had sent me in to +exchange the money and he was outside waiting for me. +One time the lady gave me a really strange look and +told me that she would not be able to do it for me and +my dad would have to come in and do it, but I just +rode to the next bank down the street (laughs)." +Surprisingly, the boy did not have any reason to be +afraid. The reporting news team examined and +investigated the so-called "chain-letter" the boy was +sending out and found that it was not a chain-letter +at all. In fact, it was completely legal according to +US Postal and Lottery Laws, Title 18, Section 1302 and +1341, or Title 18, Section 3005 in the US code, also +in the code of federal regulations, Volume 16, +Sections 255 and 436, which state a product or service +must be exchanged for money received. +Every five-dollar bill that he received contained a +little note that read, "Please send me report number +XYX".This simple note made the letter legal because he +was exchanging a service (A Report on how-to) for a +five-dollar fee. +[This is the end of the media release. If you would +like to understand how the system works and get your +$71,000 - please continue reading. What appears below +is what the 15 year old was sending out on the net - +YOU CAN USE IT TOO - just follow the simple +instructions]. +THANKS TO THE COMPUTER AGE AND THE INTERNET ! +================================================== +You will Make over half million dollars every 4 to 5 months from your +home!! +Before you say ''Bull'', please read the following. This is the +letter you have been hearing about on the news lately. Due to the +popularity of this letter on the Internet, a national weekly news +program +recently devoted an entire show to the investigation of this program +described below, to see if it really can make people money. The show +also +investigated whether or not the program was legal. +Their findings proved once and for all that there are ''absolutely NO +Laws prohibiting the participation in the program and if people can -follow +the simple instructions, they are bound to make some mega bucks with only +$25 out of pocket cost''. +DUE TO THE RECENT INCREASE OF POPULARITY & RESPECT THIS +PROGRAM HAS +ATTAINED, IT IS CURRENTLY WORKING BETTER THAN EVER. +This is what one had to say: '' Thanks to this profitable opportunity. +I was approached many times before but each time I passed on it. I am so +glad I finally joined just to see what one could expect in return for +the minimal effort and money required. To my astonishment, I received +total +$610,470.00 in 21 weeks, with money still coming in''. +Pam Hedland, Fort Lee, New Jersey. +========================================================= +=======Here is +another testimonial: ''' this program has been around for a +long time but I never believed in it. But one day when I received this +again in the mail I decided to gamble my $25 on it. I followed the +simple instructions and wallaa ..... 3 weeks later the money started to +come +in. First month I only made $240.00 but the next 2 months after that +made a total of $290,000.00. So far, in the past 8 months by re-entering +the +program, I have made over $710,000.00 and I am playing it again. The +key to success in this program is to follow the simple steps and NOT change +anything.'' More testimonials later but first: +===== PRINT THIS NOW FOR YOUR FUTURE REFERENCE ======== +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ +$$$$$$$$ +If you would like to make at least $500,000 every 4 to 5 months easily +and comfortably, please read the following...THEN READ IT AGAIN and +AGAIN!!! +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ +$$$$$$$$ +FOLLOW THE SIMPLE INSTRUCTION BELOW AND YOUR FINANCIAL +DREAMS WILL COME +TRUE, GUARANTEED! +INSTRUCTIONS: +================Order all 5 reports shown on the list below +================= +For each report, send $5 CASH, THE NAME & NUMBER OF THE REPORT +YOU ARE ORDERING and YOUR E-MAIL ADDRESS to the person whose +name appears ON THAT LIST next to the report. MAKE SURE YOUR RETURN +ADDRESS IS ON YOUR ENVELOPE TOP LEFT CORNER in case of any mail +problems. +=== When you place your order, make sure you order each of the 5 +reports. +You will need all 5 reports so that you can save them on your computer +and resell them. YOUR TOTAL COST $5 X 5=$25.00. +Within a few days you will receive, via e-mail, each of the 5 reports +from these 5 different individuals. Save them on your computer so they will +be accessible for you to send to the 1,000's of people who will order them +from you. Also make a floppy of these reports and keep it on your desk +in case something happens to your computer. +IMPORTANT - DO NOT alter the names of the people who are listed +next to each report, or their sequence on the list, in any way other +than what is instructed below in step '' 1 through 6 '' or you will +loose out on majority of your profits. Once you understand the way this +works, you will also see how it does not work if you change it. Remember, +this +method has been tested, and if you alter, it will NOT work !!! People +have tried to put their friends/relatives names on all five thinking they +could get all the money. But it does not work this way. Believe us, we all +have tried to be greedy and then nothing happened. So Do Not try to change +anything other than what is instructed. Because if you do, it will not +work for you. +Remember, honesty reaps the reward!!! +1.... After you have ordered all 5 reports, take this advertisement +and REMOVE the name & address of the person in REPORT #5. +This person has made it through the cycle and is no doubt counting +their fortune. +2.... Move the name & address in REPORT # 4 down TO REPORT # 5. +3.... Move the name & address in REPORT # 3 down TO REPORT # 4. +4.... Move the name & address in REPORT # 2 down TO REPORT # 3. +5.... Move the name & address in REPORT # 1 down TO REPORT # 2 +6.... Insert YOUR name & address in the REPORT # 1 Position. +PLEASE MAKE SURE you copy every name & address ACCURATELY! +========================================================= +======= +**** Take this entire letter, with the modified list of names, and save it +on your computer. DO NOT MAKE ANY OTHER CHANGES. +Save this on a disk as well just in case you loose any data. To assist +you with marketing your business on the internet, the 5 reports you +purchase will provide you with invaluable marketing information which +includes how to send bulk e-mails legally, where to find thousands of +free +classified ads and much more. There are 2 Primary methods to get this +venture going: +METHOD # 1: BY SENDING BULK E-MAIL LEGALLY +========================================================= +======= +Let's say that you decide to start small, just to see how it goes, and +we will assume You and those involved send out only 5,000 e-mails each. +Let's also assume that the mailing receive only a 0.2% response (the +response +could be much better but lets just say it is only 0.2%. Also many +people will send out hundreds of thousands e-mails instead of only 5,000 +each).Continuing with this example, you send out only 5,000 e-mails. +With a 0.2% response, that is only 10 orders for report # 1 +Those 10 people responded by sending out 5,000 e-mail each for a total +of 50,000. +Out of those 50,000 e-mails only 0.2% responded with orders. That's=100 +people responded and ordered Report # 2. +Those 100 people mail out 5,000 e-mails each for a total of 500,000 +e-mails. The 0.2% response to that is 1000 orders for Report # 3. +Those 1000 people send out 5,000 e-mails each for a total of 5 +million e-mails sent out. The 0.2% response to that is 10,000 orders +for Report! # 4. Whose 10,000 people send out 5,000 e-mails each for a +total of +50,000,000 (50 million) e-mails. The 0.2% response to that is 100,000 +orders for +Report # 5 THAT'S 100,000 ORDERS TIMES $5 EACH=$500,000.00 (half +million). +Your total income in this example is: 1..... $50 + 2..... $500 ++ 3.....$5,000 + 4..... $50,000 + 5..... $500,000 ........ Grand +Total=$555,550.00 +NUMBERS DO NOT LIE. GET A PENCIL & PAPER AND FIGURE OUT THE +WORST POSSIBLERESPONSES AND NO MATTER HOW YOU +CALCULATE IT, YOU WILL STILL +MAKE A LOT OF MONEY ! +========================================================= +======= +REMEMBER FRIEND, THIS IS ASSUMING ONLY 10 PEOPLE ORDERING +OUT +OF 5,000 YOU MAILED TO. Dare to think for a moment what would happen if +everyone or half or even one 4th of those people mailed 100,000e-mails +each or more? There are over 150 million people on the Internet worldwide +and counting. Believe me, many people will do just that, and more! +METHOD # 2 : BY PLACING FREE ADS ON THE INTERNET +========================================================= +======= +Advertising on the net is very very inexpensive and there are +hundreds of FREE places to advertise. Placing a lot of free ads on the +Internet will easily get a larger response. We strongly suggest you +start with Method # 1and add METHOD # 2 as you go along. For every $5 you +receive, all you must do is e-mail them the Report they ordered. That's +it. Always provide +same day service on all orders. +This will guarantee that the e-mail they send out, with your +name and address on it, will be prompt because they can not advertise +until they receive the report. +===================AVAILABLE REPORTS +========================== +ORDER EACH REPORT BY ITS NUMBER & NAME ONLY. Notes: Always +send +$5 cash (U.S. CURRENCY) for each Report. Checks NOT accepted. Make sure +the cash is concealed by wrapping it in at least 2 sheets of paper. On +one of those sheets of paper, Write the NUMBER & the NAME of the Report you +are ordering, +YOUR E-MAIL ADDRESS and your name and postal address. +PLACE YOUR ORDER FOR THESE REPORTS NOW : +========================================================= +======= +REPORT #1 "The Insider's Guide to Advertising for Free on the Net" +Order Report #1 from: +K.Palludan +9550 Summersweet Ct. +Las Vegas, Nevada 89123 +USA +________________________________________________________________ +______ +REPORT #2 "'The insider's Guide to Sending Bulk e-mail on the Net' +Order Report #2 from: +Kris Estes +3055 Casey Drive #203 +Las Vegas, Nevada 89120 +________________________________________________________________ +______ +REPORT #3 "'Secret to Multilevel Marketing on the Net" +Order Report #3 from : +P. Clement +601 St-Malo Est +Ile Bizard, Quebec H9C2P2 +CANADA +________________________________________________________________ +______ +REPORT #4 "'How to become a Millionaire Utilizing MLM and the Net" +Order Report #4 from: +David Carpenter +13 Dutch lane +Hazlet, New Jersey 07732 +USA +________________________________________________________________ +_____ +REPORT #5 "'How to send out one Million e-mails for FREE" +Order Report #5 from: +S. Lasley +4230 Edgewood Circle +Idaho Falls, Idaho 83406 +USA +________________________________________________________________ +_____ +$$$$$$$$$$$$$$$$$$$$$ YOUR SUCCESS GUIDELINES +$$$$$$$$$$$$$$$$$$$$$ +Follow these guidelines to guarantee your success: +=== If you do not receive at least 10 orders for Report #1 within 2 +weeks, continue sending e-mails until you do. +=== After you have received 10 orders, 2 to 3 weeks after that you +should receive 100 orders or more for REPORT # 2. If you did not, continue +advertising or sending e-mails until you do. +=== Once you have received 100 or more orders for Report # 2, YOU CAN +RELAX, because the system is already working for you, and the cash will +continue to roll in ! THIS IS IMPORTANT TO REMEMBER: Every time your +name +is moved down on the list, you are placed in front of a Different report. +You can KEEP TRACK of your PROGRESS by watching which report +people are ordering from you. IF YOU WANT TO GENERATE MORE INCOME +SEND +ANOTHER BATCH OF E-MAILS AND START THE WHOLE PROCESS +AGAIN. There is NO +LIMIT to the income you can generate from this business !!! +========================================================= +======= +FOLLOWING IS A NOTE FROM THE ORIGINATOR OF THIS PROGRAM: +You have just received information that can give you financial freedom +for the rest of your life, with NO RISK and JUST A LITTLE BIT OF EFFORT. +You can make more money in the next few weeks and months than you have +ever imagined. Follow the program EXACTLY AS INSTRUCTED. Do Not change +it +in +any way. It works exceedingly well as it is now. +Remember to e-mail a copy of this exciting report after you have put +your name and address in Report #1 and moved others to #2 ...........# 5 +as +instructed above. One of the people you send this to may send out +100,000 or more e-mails and your name will be on every one of them. +Remember +though, the more you send out the more potential customers! you will +reach. So +my friend, I have given you the ideas, information, materials and +opportunity to become financially independent. IT IS UP TO YOU NOW ! +====================== MORE +TESTIMONIALS====================== +'' My name is Mitchell. My wife, Jody and I live in Chicago. I am an +accountant with a major U.S. Corporation and I make pretty good +money. When I received this program I grumbled to Jody about receiving +''junk mail''. I made fun of the whole thing, spouting my knowledge of +the population and percentages involved. I ''knew'' it wouldn't work. Jody +totally ignored my supposed intelligence and few days later she jumped in +with +both feet. I made merciless fun of her, and was ready to lay the old +''I told you so'' on her when the thing didn't work. Well, the laugh was +on me! +Within 3 weeks she had received 50 responses. Within the next 45 days she +had +received total $ 147,200.00 ........... all cash! I was shocked. ! I have +joined +Jody in her ''hobby''. +Mitchell Wolf M.D., Chicago, Illinois +========================================================= +======= '' Not +being the gambling type, it took me several weeks to make up my +mind to participate in this plan. But conservative that I am, I decided +that the initial investment was so little that there was just no way that +I +wouldn't get enough orders to at least get my money back''. '' I was +surprised +when I found my medium size post office box crammed with orders. I made +$319,210.00 in the first 12 weeks. The nice thing about this deal is +that it does not matter where people live. There simply isn't a better +investment +with a faster return and so big''. +Dan Sondstrom, Alberta, Canada +========================================================= +======= '' I had +received this program before. I deleted it, but later I +wondered if I should have given it a try. Of course, I had no idea who +to contact ! to get another copy, so I had to wait until I was e-mailed +again by someone else.........11 months passed then it luckily came +again.....I did not delete this one! I made more than $490,000 on my +first try and all the money came within 22 weeks''. +Susan De Suza, New York, N.Y. +========================================================= +====== +'' It really is a great opportunity to make relatively easy money with +little cost to you. I followed the simple instructions carefully and +within 10 days the money started to come in. My first month I made +$20,560.00 and by the end of third month my total cash count was $ +362,840.00. Life is beautiful, Thanx to internet''. +Fred Dellaca, Westport, New Zealand +========================================================= +=======ORDER +YOUR REPORTS TODAY AND GET STARTED ON YOUR ROAD TO +FINANCIAL FREEDOM ! +========================================================= +======= +If you have any questions of the legality of this program, contact the +Office of Associate Director for Marketing Practices, Federal Trade +Commission, Bureau of Consumer Protection, Washington, D.C. +========================================================= +======= +THERE IS NO NEED TO RESPOND TO THIS E-MAIL IF YOU DO NOT +WISH TO RECEIVE +FURTHER CORRESPONDENCE. THIS IS A ONETIME E-MAIL. +GOOD LUCK! + + + diff --git a/Ch3/datasets/spam/spam/00198.aad7df5b8be674a0ce09c8040ef53f1e b/Ch3/datasets/spam/spam/00198.aad7df5b8be674a0ce09c8040ef53f1e new file mode 100644 index 000000000..e5831b87d --- /dev/null +++ b/Ch3/datasets/spam/spam/00198.aad7df5b8be674a0ce09c8040ef53f1e @@ -0,0 +1,53 @@ +From aapaine6088j86@yahoo.com Mon Sep 2 16:27:41 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 6E9B343F9B + for ; Mon, 2 Sep 2002 11:26:25 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:25 +0100 (IST) +Received: from yahoo.com (3DCE10C0.osaka.meta.ne.jp [61.206.16.192]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7VGB2Z07131 for + ; Sat, 31 Aug 2002 17:11:05 +0100 +Received: from [77.142.51.6] by rly-yk04.aolmd.com with NNFMP; + Sat, 31 Aug 2002 21:12:24 -0000 +Received: from [198.164.159.177] by rly-xw01.otpalo.com with local; + Sat, 31 Aug 2002 21:08:12 +1000 +Received: from [16.166.85.186] by rly-yk04.aolmd.com with SMTP; + Sun, 01 Sep 2002 07:04:00 -0900 +Received: from [150.212.52.22] by mta21.bigpong.com with esmtp; + 31 Aug 2002 21:59:48 +1100 +Received: from unknown (100.226.45.87) by web.mail.halfeye.com with SMTP; + 01 Sep 2002 08:55:36 -0200 +Reply-To: +Message-Id: <015e47e51e6e$3754a4d7$2da85be8@rymusn> +From: +To: Gat.cash.out.@dogma.slashnull.org +Subject: ** You're approved. ** +Date: Sun, 01 Sep 2002 08:00:47 -0100 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: The Bat! (v1.52f) Business +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00B4_26B74D8A.B2187A61" + +------=_NextPart_000_00B4_26B74D8A.B2187A61 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +PGh0bWw+DQo8Ym9keT4NCjxmb250IGNvbG9yPSJmZmZmZmYiPnNreTwvZm9u +dD4NCjxwPllvdXIgaG9tZSByZWZpbmFuY2UgbG9hbiBpcyBhcHByb3ZlZCE8 +YnI+PC9wPjxicj4NCjxwPlRvIGdldCB5b3VyIGFwcHJvdmVkIGFtb3VudCA8 +YSBocmVmPSJodHRwOi8vd3d3Lm1vcnRnYWdlcG93ZXIzLmNvbS9BcHByb3Zl +ZC5odG0iPmdvDQpoZXJlPC9hPi48L3A+DQo8YnI+PGJyPjxicj48YnI+PGJy +Pjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+ +PGJyPjxicj48YnI+DQo8cD5UbyBiZSBleGNsdWRlZCBmcm9tIGZ1cnRoZXIg +bm90aWNlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm1vcnRnYWdlcG93ZXIzLmNv +bS9yZW1vdmUuaHRtbCI+Z28NCmhlcmU8L2E+LjwvcD4NCjxmb250IGNvbG9y +PSJmZmZmZmYiPnNreTwvZm9udD4NCjwvYm9keT4NCjxmb250IGNvbG9yPSJm +ZmZmZmYiPjFnYXRlDQo8L2h0bWw+DQo4ODQ0Z2F2SjMtNDA5cGdkQTg4NjNr +YkZJMC0wMDRBTkZjMDM2NmwzNg== + diff --git a/Ch3/datasets/spam/spam/00199.9be6cec49c53210152780926cdeb59ff b/Ch3/datasets/spam/spam/00199.9be6cec49c53210152780926cdeb59ff new file mode 100644 index 000000000..21b4f3f7c --- /dev/null +++ b/Ch3/datasets/spam/spam/00199.9be6cec49c53210152780926cdeb59ff @@ -0,0 +1,176 @@ +From clifford_ken@hotmail.com Mon Sep 2 16:27:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id BD2BB44166 + for ; Mon, 2 Sep 2002 11:26:26 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:26 +0100 (IST) +Received: from tryexamsql.tryexam.com ([211.218.145.136]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7VJPMZ12018 for + ; Sat, 31 Aug 2002 20:25:22 +0100 +Received: from litoral.com.ar (200.241.240.183 [200.241.240.183]) by + tryexamsql.tryexam.com with SMTP (Microsoft Exchange Internet Mail Service + Version 5.5.2653.13) id R73AA32S; Sun, 1 Sep 2002 03:47:17 +0900 +Message-Id: <00004917386e$00004293$00000108@netcapital.net> +To: , , + , , + +Cc: , , + , , + , +From: clifford_ken@hotmail.com +Subject: Fw: VIRUS PROTECTION IS A MUST, YOU NEED SYSTEMWORKS! CPTJ +Date: Sat, 31 Aug 2002 14:52:09 -1600 +MIME-Version: 1.0 +Reply-To: clifford_ken@hotmail.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Norton AD + + + + + + + +
    = +Take + Control of Your Computer With This Top-of-the-Line Software!<= +/td> +
    + + + + + +
    + + + + +
    Norton + SystemWorks 2002 Software Suite
    + -Professional Edition-
    + + + + +
    Includes + Six - Yes 6! + - Feature-Packed Utilities
    ALL for
    1 + Special LOW + Price of Only + $29.99!
    + + + + +
    = +This + Software Will:
     
    = +- + Protect your computer from unwanted and hazardous vir= +uses
     - + Help secure your private & valuable information
     -= + Allow + you to transfer files and send e-mails safely
     = +;- + Backup your ALL your data quick and easily
     - Improve = +your + PC's performance w/superior + integral diagnostics!
     - You'll NEVER have to take = +your + PC to the repair shop AGAIN!
      + + + + +
    +

    6 + Feature-Packed Utilities +
    1 + Great Price
    + A $300+ + Combined Retail Value +
    + YOURS for + Only $29.99! +

    +
    < + Price Includes FREE + Shipping! >
    And + For a Limited time Buy Any 2 of Our Products & Get 1 Free!= +

    +

    Don't fall + prey to destructive viruses or hackers!
    Protect  your computer= + and + your valuable information and

    + + + + +
    -> + CLICK HERE to Order Yours NOW! <-
    +

    +

    Your email + address was obtained from an opt-in list. Opt-in UEFAS (United Email + Federation Against Spam) Approved List -  Purchase Code # + 34374064.  If you wish to be unsubscribed from this list, = +please Click + here . If you have previously unsubscribed and are still receivi= +ng + this message, you may email our Spam + Abuse Control Center. We do not condone spam in any shape or for= +m. + Thank You kindly for your cooperation.

    + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00200.bacd4b2168049778b480367ca670254f b/Ch3/datasets/spam/spam/00200.bacd4b2168049778b480367ca670254f new file mode 100644 index 000000000..4225ea2b2 --- /dev/null +++ b/Ch3/datasets/spam/spam/00200.bacd4b2168049778b480367ca670254f @@ -0,0 +1,115 @@ +From james2000@etang.com Mon Sep 2 16:27:46 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id A35BC44163 + for ; Mon, 2 Sep 2002 11:26:28 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:29 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g810TPZ23387 for + ; Sun, 1 Sep 2002 01:29:26 +0100 +Received: from localhost.com ([61.174.203.252]) by webnote.net + (8.9.3/8.9.3) with SMTP id BAA21027 for ; Sun, + 1 Sep 2002 01:29:33 +0100 +From: james2000@etang.com +Message-Id: <200209010029.BAA21027@webnote.net> +Reply-To: james2000@etang.com +To: zzzz@spamassassin.taint.org +Date: Sun, 1 Sep 2002 08:29:20 +0800 +Subject: ADV: Harvest lots of E-mail addresses quickly ! +X-Mailer: QuickSender 1.05 +MIME-Version: 1.0 +Content-Type: text/html; charset="us-ascii" +Content-Transfer-Encoding: quoted-printable + +Dear zzzz =2C + +=3CBODY bgColor=3D#ffccff=3E +=3CTABLE border=3D0 cellPadding=3D0 cellSpacing=3D0 width=3D475=3E + =3CTBODY=3E + =3CTR=3E + =3CTD align=3Dmiddle vAlign=3Dtop=3E=3C=2FTD=3E=3C=2FTR=3E=3C=2FTBODY=3E=3C=2FTABLE=3E=3CBR=3E +=3CTABLE=3E + =3CTBODY=3E + =3CTR=3E + =3CTD width=3D=225%=22=3E=3C=2FTD=3E + =3CTD bgColor=3D#b8ecff borderColor=3D#0000ff width=3D=2290%=22=3E=3CFONT color=3D#ff0000 + face=3D=22Arial Black=22 + size=3D6=3E =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B Want + To Harvest A Lot Of Email =3B =3B Addresses In A Very Short Time=3F=3C=2FFONT=3E + =3CP=3E=3CB=3E=3CFONT color=3D#0000ff face=3DArial size=3D4=3EEasy Email + Searcher=3C=2FFONT=3E=3CFONT color=3D#ff00ff face=3DArial size=3D4=3E =3B is =3B + a =3B powerful =3B Email =3B software =3B =3B that =3B + harvests general Email lists from mail servers =3B =3B =3C=2FFONT=3E=3CFONT + color=3D#0000ff face=3DArial size=3D4=3EEasy Email Searcher =3C=2FFONT=3E=3CFONT + color=3D#ff00ff face=3DArial size=3D4=3Ecan get 100=2C000 Email=3C=2FFONT=3E=3C=2FB=3E =3CFONT + color=3D#ff00ff face=3DArial size=3D4=3E=3CB=3Eaddresses directly from the Email + servers in only one hour! =3B=3C=2FB=3E=3C=2FFONT=3E=3C=2FP=3E + =3CUL=3E + =3CLI=3E=3CFONT face=3DArial size=3D2=3E=3CB=3E=3CFONT color=3D#0000ff=3EEasy Email + Searcher=3C=2FFONT=3E=3C=2FB=3E is a 32 bit Windows Program for e-mail marketing=2E It + is intended for easy and convenient search large e-mail address lists + from mail servers=2E The program can be operated on Windows 95=2F98=2FME=2F2000 + and NT=2E=3C=2FFONT=3E + =3CLI=3E=3CFONT face=3DArial size=3D2=3E=3CB=3E=3CFONT color=3D#0000ff=3EEasy Email + Searcher=3C=2FFONT=3E =3C=2FB=3Esupport multi-threads =28up to 512 + connections=29=2E=3C=2FFONT=3E + =3CLI=3E=3CFONT face=3DArial size=3D2=3E=3CB=3E=3CFONT color=3D#0000ff=3EEasy Email + Searcher=3C=2FFONT=3E=3C=2FB=3E has the ability =3B to reconnect to the mail + server if the server has disconnected and continue the searching at the + point where it has been interrupted=2E=3C=2FFONT=3E + =3CLI=3E=3CFONT face=3DArial size=3D2=3E=3CB=3E=3CFONT color=3D#0000ff=3EEasy Email + Searcher=3C=2FFONT=3E=3C=2FB=3E has an ergonomic interface that is easy to set up + and simple to use=2E=3C=2FFONT=3E =3C=2FLI=3E=3C=2FUL=3E + =3CP=3E=A1=A1=3CB=3E=3CFONT color=3D#0000ff face=3DArial=3EEasy Email Searcher is an email + address searcher and bulk e-mail sender=2E It can verify more than 5500 + email addresses per minute at only 56Kbps speed=2E It even allows you send + email to valid email address while searching=2E You can save the searching + progress and load it to resume work at your convenience=2E All you need to + do is just input an email address=2C and press the =22Search=22 + button=2E=3C=2FFONT=3E=3C=2FB=3E=3C=2FP=3E + =3CP=3E=3CB=3E=3CFONT color=3D#0000ff face=3DArial=3E=3CBR=3E=3C=2FFONT=3E=3CFONT color=3D#ff0000 face=3DArial size=3D4=3E=3CI=3EClick The Following Link To + Download The Demo =3A=3C=2FI=3E=3C=2FFONT=3E=3C=2FB=3E=3C=2FP=3E + =3CP=3E=3CB=3E=3CFONT color=3D#ff0000 face=3DArial size=3D4=3E=3CA + href=3D=22http=3A=2F=2Fwww=2Ewldinfo=2Ecom=2Fdownload=2Femail=2Fnewees=2Ezip=22=3EDownload Site + 1=3C=2FA=3E =3B =3B =3B =3B =3B=3C=2FFONT=3E=3Cfont face=3D=22Trebuchet MS=22=3E=3CFONT color=3D#ff0000 size=3D4=3E + =28 OR You Can Send Email To =3B =3C=2FFONT=3E=3C=2Ffont=3E=3Cfont size=3D=224=22 color=3D=22#0000FF=22 face=3D=22Arial=22=3E130=4095951=2Ecom=3C=2Ffont=3E=3CFONT color=3D#ff0000 face=3DArial size=3D4=3E =3B + For More Information About =3B This Program =29=3C=2FFONT=3E=3C=2FB=3E=3C=2FP=3E + =3CP=3E=3CB=3E=3CFONT color=3D#ff0000 face=3DArial size=3D4=3E=3CA + href=3D=22http=3A=2F=2Fbestsoft=2E3322=2Eorg=2Fonlinedown=2Fnewees=2Ezip=22=3EDownload Site + 2=3C=2FA=3E =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B =3C=2FFONT=3E=3C=2FB=3E=A1=A1=3CFONT color=3D#0000a0 face=3DArial + size=3D3=3E=3CSTRONG=3EIf =3B you can not download this program =2C =3B please + copy the following link into your URL =2C and then click =22 Enter=22 on your + Computer Keyboard=2E=3C=2FSTRONG=3E=3C=2FFONT=3E=3C=2FP=3E + =3CP=3E=3CFONT size=3D2=3E=3CFONT color=3D#0000a0 face=3DArial size=3D3=3E=3CSTRONG=3EHere is the + download links=3A=3C=2FSTRONG=3E=3C=2FFONT=3E=3C=2FP=3E + =3CDIV=3E + =3CP=3Ehttp=3A=2F=2Fwww=2Ewldinfo=2Ecom=2Fdownload=2Femail=2Fnewees=2Ezip=3C=2FP=3E + =3CP=3Ehttp=3A=2F=2Fbestsoft=2E3322=2Eorg=2Fonlinedown=2Fnewees=2Ezip=3C=2FP=3E=3C=2FFONT=3E=3C=2FDIV=3E + =3CP=3E=3C=2FP=3E=3C=2FTD=3E + =3CTD width=3D=225%=22=3E=3C=2FTD=3E=3C=2FTR=3E + =3CTR=3E + =3CTD width=3D=225%=22=3E=3C=2FTD=3E + =3CTD bgColor=3D#0f95de width=3D=2290%=22=3E=3CFONT color=3D#ffffff + face=3D=22Verdana=2C Tahoma=2C Helvetica=2C SansSerif=22 + size=3D1=3E=3CB=3EDisclaimer=3A=3C=2FB=3E=3CBR=3EWe are strongly against continuously sending + unsolicited emails to those who do not wish to receive our special + mailings=2E We have attained the services of an independent 3rd party to + overlook list management and removal services=2E This is not unsolicited + email=2E If you do not wish to receive further mailings=2C please click this + link =3CA href=3D=22 mailto=3Aremoval=40btamail=2Enet=2Ecn =22 + target=3D=5Fblank=3E=3CFONT + color=3D#fdd32a=3E=3CB=3Emailto=3Aremoval=40btamail=2Enet=2Ecn + =3C=2FB=3E=3C=2FFONT=3E=3C=2FA=3E=2E =3B=3C=2FFONT=3E=3CB=3E=3CFONT class=3Ddisclaimer color=3D#000080 + face=3DArial=3E=3CBR=3EThis message is a commercial advertisement=2E It is compliant + with all federal and state laws regarding email messages including the + California Business and Professions Code=2E We have provided the subject + line =22ADV=22 to provide you notification that this is a commercial + advertisement for persons over 18yrs old=2E=3C=2FFONT=3E=3C=2FB=3E=3C=2FTD=3E + =3CTD width=3D=225%=22=3E=3C=2FTD=3E=3C=2FTR=3E=3C=2FTBODY=3E=3C=2FTABLE=3E +=3CBR=3E + + + diff --git a/Ch3/datasets/spam/spam/00201.00020fc9911604f6cae7ae0f598ad29d b/Ch3/datasets/spam/spam/00201.00020fc9911604f6cae7ae0f598ad29d new file mode 100644 index 000000000..1aabe8de8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00201.00020fc9911604f6cae7ae0f598ad29d @@ -0,0 +1,120 @@ +From adinebook@netscape.net Mon Sep 2 16:27:51 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 897B544155 + for ; Mon, 2 Sep 2002 11:26:40 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:40 +0100 (IST) +Received: from solpdc1.saudionline.com.sa ([213.238.13.107]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g81KKsZ02982 for + ; Sun, 1 Sep 2002 21:20:54 +0100 +Received: from tsvm13.saudionline.com.sa (TSVM13 [10.1.3.5]) by + solpdc1.saudionline.com.sa with SMTP (Microsoft Exchange Internet Mail + Service Version 5.5.2653.13) id SABYLXXN; Sun, 1 Sep 2002 23:21:56 +0300 +Received: from smcjednt.saudi-maritime.com ([213.238.2.116]) by + tsvm13.saudionline.com.sa with Microsoft SMTPSVC(5.5.1875.185.18); + Sun, 1 Sep 2002 23:32:42 +0300 +Received: from . (pl138.zamosc.sdi.tpnet.pl [217.96.195.138]) by + smcjednt.saudi-maritime.com with SMTP (Microsoft Exchange Internet Mail + Service Version 5.5.1960.3) id SB0WA156; Sun, 1 Sep 2002 23:31:55 +0300 +Message-Id: <000019342305$00005cfb$00001317@.> +To: +From: adinebook@netscape.net +Subject: take advantage of this offer 24344 +Date: Sun, 01 Sep 2002 13:21:15 -1900 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + +
    + + + + +
    +

    Copy + ANY DVD with a CD-R Burner!

    +

    DVD Wizard Pr= +o is the + most technologically advanced method of DVD reproduction ever availa= +ble! + Do not be fooled by other fly = +by night + websites offering outdated information.
    +

    + Our package will show you how to <= +b>backup + any DVD
    or VHS cassette using a CD-R + burner! We will go further, and show you how to backup a = +DVD + using a DVD-R, or DVD-RW burner as well.

    +

    Make quality = +backups + of your personal DVD's and VHS cassettes. Create your own + DVD library. Never worry about= + + scratching or losing a DVD again!

    +

    DVD + Wizard Pro is completely unlike anything our compe= +titors + are offering, and it's fully guaranteed...

    +
    +

    + + Order Today<= +/font>, you won't be disappointed!

    +
    + Limited Time
    + Only $39.95!
    +

    We have sold t= +his package + for as much as $69.95... but now, for a very limited t= +ime + only, we are offering instant access for only $39.95!<= +/p> +

     

    +

    + Go Here and + order a copy today

    +

     

    +

     

    +

    Your + email address was obtained from an opt-in list. Opt-in MRSA List
    +  Purchase Code # 31212-1-01210.  If you wish to be un= +subscribed + from this list, please
    + Click + here and press send to b= +e removed. If you have previously unsubscribed + and are still receiving this message, you may email our + Spam + Abuse Control Center
    . We= + do not + condone spam in any shape or form. Thank You kindly for your coopera= +tion

    +
    +
    + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00202.d5b52386f66bd36cd1508319c82cf671 b/Ch3/datasets/spam/spam/00202.d5b52386f66bd36cd1508319c82cf671 new file mode 100644 index 000000000..6cbba529a --- /dev/null +++ b/Ch3/datasets/spam/spam/00202.d5b52386f66bd36cd1508319c82cf671 @@ -0,0 +1,50 @@ +From cbuBrookie69@hushmail.com Mon Sep 2 16:27:56 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 51B7044170 + for ; Mon, 2 Sep 2002 11:26:43 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:43 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g820iOZ13570 for + ; Mon, 2 Sep 2002 01:44:24 +0100 +Received: from 217.196.165.197 ([212.96.104.198]) by webnote.net + (8.9.3/8.9.3) with SMTP id BAA25647 for ; Mon, + 2 Sep 2002 01:44:36 +0100 +Message-Id: <200209020044.BAA25647@webnote.net> +Received: from [26.84.34.94] by smtp4.cyberec.com with smtp; + Aug, 31 2002 8:37:38 PM +1200 +Received: from 213.54.67.154 ([213.54.67.154]) by sparc.isl.net with esmtp; + Aug, 31 2002 7:42:56 PM -0300 +Received: from 34.57.158.148 ([34.57.158.148]) by rly-xr02.mx.aol.com with + local; Aug, 31 2002 6:28:36 PM -0700 +Received: from [42.47.39.56] by mta6.snfc21.pbi.net with SMTP; + Aug, 31 2002 5:21:52 PM +0400 +From: Julie +To: Undisclosed.Recipients@webnote.net +Cc: +Subject: you can watch me +Sender: Julie +MIME-Version: 1.0 +Date: Sat, 31 Aug 2002 20:45:02 -0700 +X-Mailer: Internet Mail Service (5.5.2650.21) +Content-Type: text/html; charset="iso-8859-1" + +Me and my friends have this brand new idea, a Live Webcam Click Here +
    +
    +
    +This is NOT SPAM - You have received this e-mail because +at one time or another you entered the weekly draw at one of +our portals or FFA sites. We comply with all proposed and current laws +on commercial e-mail under (Bill s. 1618 TITLE III passed by the 105th +Congress). + If you have received this e-mail in error, we apologize for the +inconvenience and ask that you remove yourself. +Click
    Here to Unsubscribe +
    + +fysibvcgjyuwinmyvbpjtaebsymyukbrkn + diff --git a/Ch3/datasets/spam/spam/00203.3956f8506171ffd90a0060cafad4fdea b/Ch3/datasets/spam/spam/00203.3956f8506171ffd90a0060cafad4fdea new file mode 100644 index 000000000..47d8e8565 --- /dev/null +++ b/Ch3/datasets/spam/spam/00203.3956f8506171ffd90a0060cafad4fdea @@ -0,0 +1,240 @@ +From mando@insiq.us Mon Sep 2 16:27:55 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id D538644156 + for ; Mon, 2 Sep 2002 11:26:41 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:41 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g81M6VZ05608 for ; Sun, 1 Sep 2002 23:06:32 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Sun, 1 Sep 2002 18:07:31 -0400 +Subject: Place Your LTC Declines with Us +To: +Date: Sun, 1 Sep 2002 18:07:31 -0400 +From: "IQ - M&O Marketing" +Message-Id: <1691e001c25203$f79b8820$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJR71qh6mL+Kq0CTMOTz4TE/rdYWA== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 01 Sep 2002 22:07:31.0437 (UTC) FILETIME=[F7BA81D0:01C25203] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_14AAA3_01C251CD.D3972A00" + +This is a multi-part message in MIME format. + +------=_NextPart_000_14AAA3_01C251CD.D3972A00 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + We'll help you find and fund LTC alternatives! + M&O Marketing -- The Agent's Company + Place your LTC declines! + +Alzheimer's. Heart attacks. Diabetes. Parkinson's. +You can offer guaranteed issue disability benefits to these clients +with tax advantages and no underwriting! + +We'll help you find?and fund?long term care alternatives for your +clients. +You can make an additional, up-front commission and a bonus +along with the Long Term Care sales you're making! + +Ask us for the LTC Alternatives. We'll give you multiple carriers and +options for your clients. + 800-862-9133 +? or ? +Please fill out the form below for more information +Name: +E-mail: +Phone: +City: State: + + + +For agent use only. +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.InsuranceIQ.com/optout + + +Legal Notice + +------=_NextPart_000_14AAA3_01C251CD.D3972A00 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Place Your LTC Declines with Us + + + + + + + + + =20 + + +
    + + =20 + + + =20 + + +
    =20 + + =20 + + + + =20 + + + =20 + + +
    3D"We'll
    3D"M&O
    3D"Place
    +
    =20 +


    + Alzheimer's. Heart = +attacks. Diabetes. Parkinson's.
    + You can offer guaranteed issue disability benefits = +to these clients
    + with tax advantages and no underwriting!

    +

    We'll help you find—and = +fund—long term care alternatives for your clients.
    + You can make an additional, up-front commission and a = +bonus
    + along with the Long Term Care sales you're = +making!

    +

    Ask us for the LTC Alternatives. We'll = +give=20 + you multiple carriers and options for your clients.
    + 3D"800-862-9133"
    + — or —
    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + + + +
    Please fill = +out the form below for more information
    Name:=20 + +
    E-mail:=20 + +
    Phone:=20 + +
    City:=20 + + State:=20 + +
     =20 + +  =20 + + +
    +
    +  
    + For agent use only. +

    +
    =20 +

    We = +don't want anyone=20 + to receive our mailings who does not wish to. This is = +professional communication=20 + sent to insurance professionals. To be removed from this mailing = +list,=20 + DO NOT REPLY to this message. Instead, go here: =20 + http://www.InsuranceIQ.com/optout

    +
    +
    + Legal Notice=20 +
    +
    =20 + + + +------=_NextPart_000_14AAA3_01C251CD.D3972A00-- + diff --git a/Ch3/datasets/spam/spam/00204.a008813ddeb2d5febd1fc676c07e9760 b/Ch3/datasets/spam/spam/00204.a008813ddeb2d5febd1fc676c07e9760 new file mode 100644 index 000000000..2495b110e --- /dev/null +++ b/Ch3/datasets/spam/spam/00204.a008813ddeb2d5febd1fc676c07e9760 @@ -0,0 +1,50 @@ +From cbuBrookie69@hushmail.com Mon Sep 2 16:28:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id EF68444167 + for ; Mon, 2 Sep 2002 11:26:44 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:44 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g820iRZ13575 for + ; Mon, 2 Sep 2002 01:44:27 +0100 +Received: from 217.196.165.197 ([212.96.104.198]) by webnote.net + (8.9.3/8.9.3) with SMTP id BAA25650 for ; + Mon, 2 Sep 2002 01:44:40 +0100 +Message-Id: <200209020044.BAA25650@webnote.net> +Received: from [26.84.34.94] by smtp4.cyberec.com with smtp; + Aug, 31 2002 8:37:38 PM +1200 +Received: from 213.54.67.154 ([213.54.67.154]) by sparc.isl.net with esmtp; + Aug, 31 2002 7:42:56 PM -0300 +Received: from 34.57.158.148 ([34.57.158.148]) by rly-xr02.mx.aol.com with + local; Aug, 31 2002 6:28:36 PM -0700 +Received: from [42.47.39.56] by mta6.snfc21.pbi.net with SMTP; + Aug, 31 2002 5:21:52 PM +0400 +From: Julie +To: Undisclosed.Recipients@webnote.net +Cc: +Subject: you can watch me +Sender: Julie +MIME-Version: 1.0 +Date: Sat, 31 Aug 2002 20:45:07 -0700 +X-Mailer: Internet Mail Service (5.5.2650.21) +Content-Type: text/html; charset="iso-8859-1" + +Me and my friends have this brand new idea, a Live Webcam Click Here +
    +
    +
    +This is NOT SPAM - You have received this e-mail because +at one time or another you entered the weekly draw at one of +our portals or FFA sites. We comply with all proposed and current laws +on commercial e-mail under (Bill s. 1618 TITLE III passed by the 105th +Congress). + If you have received this e-mail in error, we apologize for the +inconvenience and ask that you remove yourself. +Click
    Here to Unsubscribe +
    + +fysibvcgjyuwinmyvbpjtaebsymyukbrkn + diff --git a/Ch3/datasets/spam/spam/00205.312e72065386636132fa6c4a1fde871e b/Ch3/datasets/spam/spam/00205.312e72065386636132fa6c4a1fde871e new file mode 100644 index 000000000..803ccec0f --- /dev/null +++ b/Ch3/datasets/spam/spam/00205.312e72065386636132fa6c4a1fde871e @@ -0,0 +1,43 @@ +From none@none.com Mon Sep 2 16:28:01 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id DD0F944171 + for ; Mon, 2 Sep 2002 11:26:45 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:26:45 +0100 (IST) +Received: from 203.160.254.50 (proxy.mon.hu [80.75.224.3]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g828eIZ25706 for + ; Mon, 2 Sep 2002 09:40:18 +0100 +Message-Id: <200209020840.g828eIZ25706@dogma.slashnull.org> +Received: from unknown (74.38.244.167) by asy100.as122.sol.superonline.com + with NNFMP; Sep, 02 2002 4:11:57 PM +0400 +Received: from 87.15.78.89 ([87.15.78.89]) by pet.vosn.net with local; + Sep, 02 2002 3:40:05 PM -0000 +Received: from unknown (HELO web13708.mail.yahoo.com) (141.52.163.69) by + smtp4.cyberec.com with SMTP; Sep, 02 2002 2:35:51 PM +0700 +Received: from [190.198.219.49] by a231242.upc-a.chello.nl with QMQP; + Sep, 02 2002 1:39:01 PM +1200 +From: Jenny +To: Undisclosed.Recipients@dogma.slashnull.org +Cc: +Subject: CyberAge Dating - Invitation from Jenny +Sender: Jenny +MIME-Version: 1.0 +Date: Mon, 2 Sep 2002 16:41:14 -0700 +X-Mailer: Internet Mail Service (5.5.2650.21) +Content-Type: text/html; charset="iso-8859-1" + +

    Dear user,

    +

    CyberAge Dating Club is contacting you on behalf of Jenny.

    +

    You have been carefully chosen as a matching partner for the other party using + our advanced profile-matching system. We have determined that you do not currently + have an account with us and invite you to join. It's absolutely FREE and there's + no obligations or hidden charges. Come see for yourself and prepare to have + fun!

    +

    Click here to Join + Now or simply disregard this request if you're not interested.

    +

    Sincerely yours,
    + CyberAge Dating Club Staff.

    + diff --git a/Ch3/datasets/spam/spam/00206.0c8362d7e86ddcaf39829800ac40e2ca b/Ch3/datasets/spam/spam/00206.0c8362d7e86ddcaf39829800ac40e2ca new file mode 100644 index 000000000..a2f094095 --- /dev/null +++ b/Ch3/datasets/spam/spam/00206.0c8362d7e86ddcaf39829800ac40e2ca @@ -0,0 +1,98 @@ +From adcilt8018n07@msn.com Mon Sep 2 16:26:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id 6C3914415A + for ; Mon, 2 Sep 2002 11:25:58 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:25:58 +0100 (IST) +Received: from msn.com ([210.22.92.83]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g7U7XgZ17104 for ; + Fri, 30 Aug 2002 08:33:42 +0100 +Received: from unknown (50.73.125.79) by n7.groups.huyahoo.com with asmtp; + Thu, 29 Aug 2002 22:34:59 +0500 +Received: from f64.law4.hottestmale.com ([109.180.49.24]) by + smtp013.mail.yahou.com with smtp; Fri, 30 Aug 2002 03:26:25 +0400 +Reply-To: +Message-Id: <028d58d73d6d$6871e4a4$4dc01ab6@ttqvvc> +From: +To: +Subject: Re: You want sex? 7099ocYT9-261UccU3485gGCz0-11-27 +Date: Fri, 30 Aug 2002 07:24:19 -0000 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00E3_44B55B3D.C1001A02" + +------=_NextPart_000_00E3_44B55B3D.C1001A02 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +MDQyNmZwY0o0LTQ3MEJrZEQ5NTA3bmZxbzEtNDEyc0NTUDc0MjlxdVdKMi0x +MDVlSktyNDk4M0R6SHQ4LTY5MEJwTkQ1NjMwQURsNzANCjxodG1sPjxib2R5 +IGxpbms9I0ZGRkYwMCB2bGluaz0jRkZGRjAwIGFsaW5rPSNGRkZGMDAgdGV4 +dD0jRkZGRjAwIGJnY29sb3I9IzAwMDAwMD4gPHRhYmxlIGJvcmRlckNvbG9y +PSMwMDAwMDAgd2lkdGg9NjAwIGFsaWduPWNlbnRlciBiZ0NvbG9yPSM2Njk5 +MzMgYm9yZGVyPTM+PHRyPjx0ZCBhbGlnbj1taWRkbGU+PGZvbnQgZmFjZT1B +cmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZj48YnI+IDxmb250IGNvbG9yPXdo +aXRlIHNpemU9KzM+PGEgaHJlZj1odHRwOi8vd3d3Lnh4eG1hdGNoLm5ldC93 +ZXRiaXRzL2luZGV4Lmh0bT5XZXRiaXRzPC9hPjwvZm9udD48L2ZvbnQ+PGEg +aHJlZj1odHRwOi8vd3d3Lnh4eG1hdGNoLm5ldC93ZXRiaXRzL2luZGV4Lmh0 +bT4gPC9hPjxwPjxmb250IGZhY2U9QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2Vy +aWYgY29sb3I9I2ZmZmYwMCBzaXplPTM+PGI+IEdvbGRlbiBTaG93ZXIgRXh0 +cmF2YWdhbnphPC9iPjwvZm9udD48Zm9udCBmYWNlPUFyaWFsLEhlbHZldGlj +YSxzYW5zLXNlcmlmPjxicj4gPGEgaHJlZj1odHRwOi8vd3d3Lnh4eG1hdGNo +Lm5ldC93ZXRiaXRzL2luZGV4Lmh0bT4gPGZvbnQgY29sb3I9eWVsbG93IHNp +emU9KzI+RU5URVIhPC9mb250PjwvYT48L3A+IDx0YWJsZSB3aWR0aD01MDAg +YWxpZ249Y2VudGVyPjx0cj48dGQgYWxpZ249bWlkZGxlPjxmb250IGNvbG9y +PXdoaXRlIHNpemU9KzM+VW5iZWxpZXZhYmxlIFNleCBBY3RzITwvZm9udD48 +YnI+IDxhIGhyZWY9aHR0cDovL3d3dy54eHhtYXRjaC5uZXQvd2V0Yml0cy9p +bmRleC5odG0+IDxmb250IGNvbG9yPXllbGxvdyBzaXplPSs0PlNoZSBDYW4g +UGVlIEFsbCBEYXk8L2ZvbnQ+PC9hPjxicj4gPGZvbnQgY29sb3I9YmxhY2sg +c2l6ZT0rMj5Db2NrIGNyYXZpbmcgdGVlbnMgc3F1aXJtIGFyb3VuZCBjb3Zl +cmVkIGluIHBlZSB3aXRoIGEgdGhyb2JiaW5nIGNvY2sgYnVyaWVkIHRvIHRo +ZSBoaWx0LiBTbGlwcGVyeSBhbmFsIHdob3JlcyBnZXR0aW5nIHdldCE8YnI+ +IDxmb250IHNpemU9KzMgZWxsb3c+U3ByZWFkICdlbSA8L2ZvbnQ+PC9mb250 +PiA8Zm9udCBjb2xvcj15ZWxsb3cgc2l6ZT0rMz5QZWU8L2ZvbnQ+PGZvbnQg +Y29sb3I9YmxhY2sgc2l6ZT0rMj48Zm9udCBjb2xvcj15ZWxsb3cgc2l6ZT0r +Mz5naXJsITwvZm9udD48YnI+IDxhIGhyZWY9aHR0cDovL3d3dy54eHhtYXRj +aC5uZXQvd2V0Yml0cy9pbmRleC5odG0+IDxmb250IGNvbG9yPXllbGxvdyBz +aXplPSs0PkVudGVyITwvZm9udD48L2E+PC9mb250PjwvdGQ+PC90cj4gPC90 +YWJsZT4gPHRhYmxlIHdpZHRoPTUwMCBhbGlnbj1jZW50ZXI+PHRyPjx0ZCBh +bGlnbj1taWRkbGU+PGZvbnQgY29sb3I9d2hpdGUgc2l6ZT0rMT5TZXggY3Jh +emVkIHBlZWdpcmxzIHJpZGUgY29jayBhbGwgZGF5IHdoaWxlIHBpc3Npbmcg +Zm91bnRhaW5zIG9uIHRoZWlyIHBhcnRuZXJzLiBQZWVnaXJscyB0aGF0IGNh +bid0IGdldCBlbm91Z2ggY3VtLCBzdWNraW5nIG9mZiBkaWNrIGFmdGVyIGRp +Y2suIEhvcm55IHNsdXRzIHNwcmVhZGluZyB0aGVtIGZvciBldmVyeSBUb20s +IERpY2sgYW5kIENvY2sgdG8gY29tZSBpbiEgPC9mb250PjwvdGQ+PC90cj4g +PC90YWJsZT4gPHRhYmxlIGJvcmRlckNvbG9yPWJsYWNrIGJvcmRlckNvbG9y +RGFyaz1ibGFjayBhbGlnbj1jZW50ZXIgYm9yZGVyQ29sb3JMaWdodD1yZWQg +Ym9yZGVyPTI+PHRyPjx0ZCBhbGlnbj1taWRkbGUgd2lkdGg9MjAwPiA8YSBo +cmVmPWh0dHA6Ly93d3cueHh4bWF0Y2gubmV0L3dldGJpdHMvaW5kZXguaHRt +PiA8Zm9udCBjb2xvcj15ZWxsb3cgc2l6ZT0rMT5VbHRyYS1IYXJkY29yZSBB +Y3Rpb24gPC9mb250PjwvYT48L3RkPjx0ZCBhbGlnbj1taWRkbGUgd2lkdGg9 +MjAwPiA8YSBocmVmPWh0dHA6Ly93d3cueHh4bWF0Y2gubmV0L3dldGJpdHMv +aW5kZXguaHRtPiA8Zm9udCBjb2xvcj15ZWxsb3cgc2l6ZT0rMT5UZWVuYWdl +IFBlZWdpcmxzIDwvZm9udD48L2E+PC90ZD48dGQgYWxpZ249bWlkZGxlIHdp +ZHRoPTIwMD4gPGEgaHJlZj1odHRwOi8vd3d3Lnh4eG1hdGNoLm5ldC93ZXRi +aXRzL2luZGV4Lmh0bT4gPGZvbnQgY29sb3I9eWVsbG93IHNpemU9KzE+V2ls +ZCBQZWUgUGFydGllcyA8L2ZvbnQ+PC9hPjwvdGQ+PC90cj48dHI+PHRkIGFs +aWduPW1pZGRsZSB3aWR0aD0yMDA+IDxhIGhyZWY9aHR0cDovL3d3dy54eHht +YXRjaC5uZXQvd2V0Yml0cy9pbmRleC5odG0+IDxmb250IGNvbG9yPXllbGxv +dyBzaXplPSsxPkJpemFycmUgVmlkZW9zIDwvZm9udD48L2E+PC90ZD48dGQg +YWxpZ249bWlkZGxlIHdpZHRoPTIwMD4gPGEgaHJlZj1odHRwOi8vd3d3Lnh4 +eG1hdGNoLm5ldC93ZXRiaXRzL2luZGV4Lmh0bT4gPGZvbnQgY29sb3I9eWVs +bG93IHNpemU9KzE+SWxsZWdhbCBBY3Rpb24gPC9mb250PjwvYT48L3RkPjx0 +ZCBhbGlnbj1taWRkbGUgd2lkdGg9MjAwPiA8YSBocmVmPWh0dHA6Ly93d3cu +eHh4bWF0Y2gubmV0L3dldGJpdHMvaW5kZXguaHRtPiA8Zm9udCBjb2xvcj15 +ZWxsb3cgc2l6ZT0rMT5IaWRkZW4gUGVlIENhbXMgPC9mb250PjwvYT48L3Rk +PjwvdHI+IDwvdGFibGU+PHA+PGJyPiA8YSBocmVmPWh0dHA6Ly93d3cueHh4 +bWF0Y2gubmV0L3dldGJpdHMvaW5kZXguaHRtPiA8Zm9udCBjb2xvcj15ZWxs +b3cgc2l6ZT0rMz5FbnRlciBXZXRiaXRzPC9mb250PjwvYT48YnI+PGJyPiAm +bmJzcDs8L2ZvbnQ+PC90ZD48L3RyPiA8L3RhYmxlPjwvYm9keT48L2h0bWw+ +DQo3NjAyaVZTUzgtMDgwbDEy + diff --git a/Ch3/datasets/spam/spam/00207.0b71ac81a360455c1514f5872564b1e1 b/Ch3/datasets/spam/spam/00207.0b71ac81a360455c1514f5872564b1e1 new file mode 100644 index 000000000..857ba5c6d --- /dev/null +++ b/Ch3/datasets/spam/spam/00207.0b71ac81a360455c1514f5872564b1e1 @@ -0,0 +1,87 @@ +From tim@paychecks4life.com Mon Sep 2 16:27:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id D771D4415D + for ; Mon, 2 Sep 2002 11:25:59 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:25:59 +0100 (IST) +Received: from c448022-c (12-243-62-67.client.attbi.com [12.243.62.67]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7UAZZZ21797 for + ; Fri, 30 Aug 2002 11:35:38 +0100 +Message-Id: <200208301035.g7UAZZZ21797@dogma.slashnull.org> +From: "tim" +To: "zzzz-latestdodgydotcomstock" +Subject: Welcome to the concept of RESIDUAL Income! +Date: Fri, 30 Aug 02 05:32:48 Eastern Daylight Time +MIME-Version: 1.0 +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2462.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2462.0000 +Content-Type: multipart/mixed;boundary= "----=_NextPart_000_0044_5A8512D6.AD3AE071" + +------=_NextPart_000_0044_5A8512D6.AD3AE071 +Content-Type: text/plain +Content-Transfer-Encoding: base64 + +VGhlcmUncyBvbmx5IG9uZSB0aGluZyBiZXR0ZXIgdGhhbiBhIG1hcmtldCBkcml2ZW4gYnVz +aW5lc3MgYW5kIA0KdGhhdCdzIGEgbWFya2V0IGRyaXZlbiBidXNpbmVzcyB0aGF0IG9mZmVy +cyBjb25zdW1hYmxlIHByb2R1Y3RzLiAgDQpBbmQgdGhhdCBpcyBleGFjdGx5IHdoYXQgb3Vy +IHN5c3RlbSBoYXMgdG8gb2ZmZXIgeW91Lg0KDQpXZSBvZmZlciBwcm9kdWN0cyB0aGF0IG1p +bGxpb25zIG9mIHBlb3BsZSBhYnNvbHV0ZWx5IG11c3QgaGF2ZQ0KYW5kIHRoZSBiZXN0IHBh +cnQgb2YgYWxsLCBvdXIgcHJvZHVjdHMgYXJlIGNvbnN1bWFibGUuDQogDQpXaHkgaXMgdGhh +dCBzbyBpbXBvcnRhbnQ/DQoNCldoYXQgZG8geW91IGRvIHdoZW4geW91IHJ1biBvdXQgb2Yg +dG9pbGV0IHBhcGVyPw0KRG8geW91IGdvIHdhdGNoIFRWIHVudGlsIHlvdSBzZWUgYW4gYWQg +Zm9yIHRvaWxldCBwYXBlciAgDQpkbyB5b3Ugc3RhcnQgY3V0dGluZyB1cCB5b3VyIHNoZWV0 +cyBpbnRvIHNtYWxsIHBpZWNlcw0Kb3IgZG8geW91IGp1c3QgR08gVE8gVEhFIFNUT1JFIEFO +RCBHRVQgU09NRSBNT1JFPw0KDQpZb3Ugc2VlLCBub3Qgb25seSBkbyBvdXIgY3VzdG9tZXJz +IGVuam95IHRoZSBmYW50YXN0aWMgYmVuZWZpdHMNCm9mIG91ciBwcm9kdWN0cywgZXZlcnkg +dGltZSB0aGV5IHJ1biBvdXQgIHRoZXkgY29tZSBiYWNrDQp0byBVUyB0byBHRVQgTU9SRS4g +IFdlIHdvcmsgd2l0aCB0aGVtIG9uZSB0aW1lIGJ1dCB3ZSBnZXQgcGFpZA0Kb3ZlciBhbmQg +b3ZlciBhZ2FpbiENCg0KV0VMQ09NRSBUTyBUSEUgQ09OQ0VQVCBPRiBSRVNJRFVBTCBJTkNP +TUUgIG1vbmV5IHRoYXQganVzdCANCmtlZXBzIGNvbWluZyBhbmQgY29taW5nLg0KDQpXaGF0 +IHdvdWxkIHlvdSBkbyB3aXRoIGFuIGV4dHJhICQxLDAwMCBuZXh0IG1vbnRoPw0KDQpJRiBU +SElTIEJVU0lORVNTIElTIFNPIEdSRUFULCBXSFkgRE9OJ1QgWU9VIEpVU1QgRE8gSVQgDQpZ +T1VSU0VMRj8NCg0KR29vZCBxdWVzdGlvbi4gIEFuZCBoZXJlJ3MgeW91ciBhbnN3ZXIuICBB +bGwgb2YgdXMgZG8hDQoNClRoZSBmYWN0IGlzIHRoYXQgd2UgbWFrZSBldmVuIG1vcmUgbW9u +ZXkgZWFjaCB0aW1lIHdlIGhlbHAgc29tZW9uZQ0KbGlrZSB5b3UgZ2V0IHN0YXJ0ZWQuIFdF +IE5FRUQgWU9VLiAgV2UgY2FuJ3Qgc3VjY2VlZCB1bmxlc3Mgd2UgbWFrZQ0KeW91IHN1Y2Nl +ZWQuICBXZSB3aWxsIHRha2UgeW91IGJ5IHRoZSBoYW5kIGFuZCB3YWxrIHlvdSB0aHJvdWdo +IHRoaXMgDQpidXNpbmVzcyBzdGVwLWJ5LXN0ZXAuICBXRSBXSUxMIERPIFdIQVRFVkVSIElU +IFRBS0VTLCAgdGhhdCANCmlzIG91ciBjb21taXRtZW50IHRvIHlvdS4NCg0KSXQgZG9lc24n +dCB0YWtlIGEgbG90IG9mIG1vbmV5LCB0aW1lIG9yIGtub3dsZWRnZSB0byBhY2hpZXZlIA0K +dGhlIERyZWFtLiAgQWxsIHlvdSBuZWVkIGlzIHRoZSByaWdodCBvcHBvcnR1bml0eSBhdCB0 +aGUgDQpyaWdodCB0aW1lLCBhIHByb2R1Y3QgdGhhdCBzZWxscyBpdHNlbGYsIGEgcGxhbiB0 +byBmb2xsb3cgDQphbmQgeW91ciBvd24gcGVyc29uYWwgY29hY2ggYW5kIG1lbnRvci4NCg0K +SWYgeW91IGFyZSBhIG1vdGl2YXRlZCBwZXJzb24sIGxvb2tpbmcgZm9yIGEgcG9zaXRpdmUg +Y2hhbmdlLCB0aGVuIA0KeW91IGFyZSBpbiB0aGUgcmlnaHQgcGxhY2UuDQoNCklmIGEgcGVy +c29uYWwgY29hY2ggYW5kIG1lbnRvciwgd2hvIGNhcmVzIGFib3V0IHlvdSwgaG9sZGluZyB5 +b3VyDQpoYW5kIHRocm91Z2ggdGhlIGVudGlyZSBwcm9jZXNzIG9mIHN0YXJ0aW5nIHlvdXIg +YnVzaW5lc3Mgc291bmRzIA0KZ29vZCwgIHRoZW4gdGhpcyBpcyBpdCENCg0KQnV0IHdlJ3Jl +IG5vdCBsb29raW5nIGZvciBKVVNUIEFOWU9ORS4gIFdlJ3JlIGxvb2tpbmcgZm9yIA0KTU9U +SVZBVEVEIHBlb3BsZSB3aG8gYXJlIFNFUklPVVMgYWJvdXQgaW1wcm92aW5nIHRoZSANClFV +QUxJVFkgb2YgVEhFSVIgbGl2ZXMuDQoNCiJUSU1JTkcgSVMgRVZFUllUSElORyCFDQpJIFdB +UyBKVVNUIElOIFRIRSBSSUdIVCBQTEFDRSBBVCBUSEUgUklHSFQgVElNRSINCg0KWW91J3Jl +IGluIHRoZSByaWdodCBwbGFjZSBhbmQgeW91ciB0aW1pbmcgaXMgcGVyZmVjdC4NCg0KVmlz +aXQgIGh0dHA6Ly93d3cucGF5Y2hlY2tzNGxpZmUuY29tICBhbmQgdGFrZSBhZHZhbnRhZ2Ug +b2YgDQp0aGlzIGZhYnVsb3VzIG9wcG9ydHVuaXR5IHRvZGF5ISAgSXQganVzdCBtYXkgY2hh +bmdlIHlvdXIgbGlmZS4NCg0KV2UgUmVzcGVjdCBZb3VyIFByaXZhY3ksIGFuZCBQbGVkZ2Ug +bm90IHRvIEFidXNlIFRoaXMgUHJpdmlsZWdlLiBUbyANClN0b3AgRnV0dXJlIE1haWxpbmdz +LA0KcmVwbHkgdG8gdGhpcyBlbWFpbCB3aXRoIFJFTU9WRSBpbiB0aGUgc3ViamVjdCBsaW5l +LCB5b3Ugd2lsbCBiZSByZW1vdmVkIA0KaW1lZGlhdGVseS4NCm9yIHNlbmQgYSBibGFuayBl +bWFpbCB3aXRoIHJlbW92ZSBpbiBzdWJqZWN0IHRvOg0KDQpyZW1vdmVAcGF5Y2hlY2tzNGxp +ZmUuY29tDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tDQpZb3UgYXJlIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UgYmVjYXVz +ZSB5b3UgaGF2ZSByZWNlbnRseSBleHByZXNzZWQgYW4gDQppbnRlcmVzdCBpbiByZWNlaXZp +bmcgaW5mb3JtYXRpb24gYWJvdXQgb25saW5lIGJ1c2luZXNzIG9wcG9ydHVuaXRpZXMuIA0K +SWYgdGhpcyBpcyBpbiBlcnJvciB0aGVuIHBsZWFzZSBhY2NlcHQgbXkgbW9zdCBzaW5jZXJl +IGFwb2xvZ3ksIGFuZCANCnNpbXBseSBVbnN1YnNjcmliZSB5b3Vyc2VsZiBiZWxvdy4NCi0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tDQpVbmRlciBCaWxsIFMxNjE4IFRpdGxlIElJSSBwYXNzZWQgYnkgdGhlIDEwNXRoIFVT +IENvbmdyZXNzLCB0aGlzIA0KbWVzc2FnZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBTUEFN +IGFzIHRoZSBzZW5kZXIgaGFzIGluY2x1ZGVkIA0KY29udGFjdCBpbmZvcm1hdGlvbiBhbmQg +YW4gaW1tZWRpYXRlIG1ldGhvZCBvZiBSZW1vdmFsLg0KICAgIA== +------=_NextPart_000_0044_5A8512D6.AD3AE071-- + diff --git a/Ch3/datasets/spam/spam/00208.369921416af87a0b70f133632131b184 b/Ch3/datasets/spam/spam/00208.369921416af87a0b70f133632131b184 new file mode 100644 index 000000000..6750b0de4 --- /dev/null +++ b/Ch3/datasets/spam/spam/00208.369921416af87a0b70f133632131b184 @@ -0,0 +1,73 @@ +From k_v_g20022002@yahoo.fr Mon Sep 2 17:00:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (localhost [127.0.0.1]) + by phobos.labs.spamassassin.taint.org (Postfix) with ESMTP id A632F47CBA + for ; Mon, 2 Sep 2002 11:50:39 -0400 (EDT) +Received: from phobos [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 02 Sep 2002 16:50:39 +0100 (IST) +Received: from web21503.mail.yahoo.com (web21503.mail.yahoo.com + [66.163.169.14]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g82CBUZ31991 for ; Mon, 2 Sep 2002 13:11:30 +0100 +Message-Id: <20020902121145.46994.qmail@web21503.mail.yahoo.com> +Received: from [193.251.130.111] by web21503.mail.yahoo.com via HTTP; + Mon, 02 Sep 2002 14:11:45 CEST +Date: Mon, 2 Sep 2002 14:11:45 +0200 (CEST) +From: =?iso-8859-1?q?george=20kelvin?= +Subject: URGENT BUSINESS ASSISTANCE. +To: zzzz@spamassassin.taint.org +MIME-Version: 1.0 +Content-Type: multipart/alternative; boundary="0-1118764524-1030968705=:44128" +Content-Transfer-Encoding: 8bit + +--0-1118764524-1030968705=:44128 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit + + +KEVIN GEORGE + +ABIDJAN,COTE D'IVORIE +WEST AFRICA + +Dearest one, + +Although we have not met, I got your contact through the internet and decided to contact you for assistance. I was, until recently, a final year engineering student of the University of Sierra Leone,West Africa. Early in January last year, the rebels +in my country struck our township and killed my parents in one of their attacks. My late father, King Christopher George being the King of the Town was a prime target. + +Fortunately for me, I was in school when the attack took place. I equally lost my only sister to the rebels. When I got home for the remains of my parents and the subsequent burial that followed, I discovered a document indicating that my late father had deposited some $6M.United States Dollars(six million united states dollars) with one of the private security company here in abidjan cote d'ivorie. This money, according to the docement, was meant for the building of an Auto repair company for me by my late father,when I complete my studies. Upon the discovery of this document, I travelled to the cote d'ivorie to trace the concerned security company and to make claims for the said money as the only surviving next +of kin to my father. + +But deliberatley, I have decided to keep all my uncles and Aunts out of the issue as none of them will be happy to know I am in possession of such money. I have succeded in making the people at the security company believe that I am the next of Kin and all the documents related to are now with me. I do not know what to do with it but I have decided to contact you to seek your assistance in helping me to take it outfrom the security company and transfer it to your account and help me to come to your country to continue my education and so that you will help me to get the money invested until such a +time that I will be ready to begin to use it. I am really desperate as I am left alone now in the world.Let me know what you want as compensation for helping +me to solve this my problem. Most importantly,Iseriously appeal that you maintain high level of secrecy and confidentiality in the whole thing. +Please you can call me wilth is number 00225-075-03684 +I remain yours sincerely, + +KEVIN GEORGE + + + + + + + +--------------------------------- +Yahoo! Mail -- Une adresse @yahoo.fr gratuite et en français ! + +--0-1118764524-1030968705=:44128 +Content-Type: text/html; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit + +

    KEVIN GEORGE

    +

    ABIDJAN,COTE D'IVORIE
    WEST AFRICA

    +

    Dearest one,

    +

    Although we have not met, I got your contact through the internet and  decided to contact you for assistance. I was, until recently, a final  year engineering student of the University of Sierra Leone,West Africa.  Early in January last year, the rebels
    in my country struck our township and killed my parents in one of their attacks. My late father, King Christopher George being the King of the Town was a prime target.

    +

    Fortunately for me, I was in school when the attack took  place. I equally lost my only sister to the rebels. When I got home for the remains of my parents and the subsequent burial that followed, I discovered a document indicating that my late father had deposited some $6M.United States Dollars(six million united states dollars) with one of the private security company here in abidjan cote d'ivorie. This money, according to the docement, was meant for the building of an Auto repair company for me by my late father,when I complete my studies. Upon the discovery of this document, I travelled to the cote d'ivorie to trace the concerned security company and to make claims for the said money as the only surviving next
    of kin to my father.

    +

    But deliberatley, I have decided to keep all my uncles and Aunts out of the issue as none of them will be happy to know I am in possession of such money. I have succeded in making the people at the security company believe that I am the next of Kin and all the documents related to are now with me. I do not know what to do with it but I have decided to contact you to seek your assistance in helping me to take it outfrom the security company and transfer it  to your account and help me to come to your country to continue my education and so that you will help me to get the money invested until such a
    time that I will be ready to begin to use it. I am really desperate as I am left alone now in the world.Let me know what you want as compensation for helping
    me to solve this my problem. Most importantly,Iseriously appeal that you maintain high level of secrecy and confidentiality in the whole thing.
    Please you can call me wilth is number 00225-075-03684
    I remain yours sincerely,

    +

    KEVIN GEORGE                                                                         

    +

     

    +

     



    Yahoo! Mail -- Une adresse @yahoo.fr gratuite et en français !
    +--0-1118764524-1030968705=:44128-- + diff --git a/Ch3/datasets/spam/spam/00209.5276f967533f2ce0209c1eff631a86ff b/Ch3/datasets/spam/spam/00209.5276f967533f2ce0209c1eff631a86ff new file mode 100644 index 000000000..21c220853 --- /dev/null +++ b/Ch3/datasets/spam/spam/00209.5276f967533f2ce0209c1eff631a86ff @@ -0,0 +1,308 @@ +From roster@insiq.us Tue Sep 3 00:15:32 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (unknown [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 848FD16F3C + for ; Tue, 3 Sep 2002 00:14:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 03 Sep 2002 00:14:36 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g82M6KZ23002 for ; Mon, 2 Sep 2002 23:06:20 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Mon, 2 Sep 2002 18:07:20 -0400 +Subject: Z-app the Competition with Roster +To: +Date: Mon, 2 Sep 2002 18:07:20 -0400 +From: "IQ - Roster Financial" +Message-Id: <1b0ba401c252cd$1b804680$6b01a8c0@insuranceiq.com> +MIME-Version: 1.0 +Thread-Index: AcJSsSh+eo6/FwXoT92i48DxWRkMkA== +Content-Class: urn:content-classes:message +X-Mailer: Microsoft CDO for Windows 2000 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +X-Originalarrivaltime: 02 Sep 2002 22:07:20.0500 (UTC) FILETIME=[1B9F6740:01C252CD] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_18C3F1_01C2528F.A17426A0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_18C3F1_01C2528F.A17426A0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: quoted-printable + + High velocity term underwriting has arrived + High velocity term underwriting has arrived. +=20 + ...with unbelieveable rates! + Z-app The Competition! Z-app The Competition!=09 + Eliminates all paperwork** =20 + Online pre-application process =20 + Cuts days out of the application process =20 + Avoids delays by ensuring that all information submitted is +correct and complete =09 + Eliminates the need for client visits and your need to obtain +original client signatures =20 + Increases your clients' satisfaction with improved ease, +accuracy and speed =09 + Helps you deliver policies faster than the competition =20 +Don't delay! Call or e-mail us today +for more information! + 800-933-6632x6 +? or ? + +Please fill out the form below for more information =20 +Name: =09 +E-mail: =09 +Phone: =09 +City: State: =09 + =09 +=20 + +Roster financial Services, LLC +=20 + + +*Z-app is an on-line preliminary application available through the +Zurich Life Companies and used in conjunction with Zurich's TeleLife=AE +Process. **Replacement forms required in some states. Not for use with +the general public. For agent use only. + +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.Insuranceiq.com/optout +=20 + +Legal Notice =20 + +------=_NextPart_000_18C3F1_01C2528F.A17426A0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Z-app the Competition with Roster + + + + + =20 + + + =20 + + +
    3D"High
    + 3D"High
    +
    + 3D"...with=20 + + =20 + + + =20 + + + =20 + + +
    3D'Z-app3D'Z-app
    + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + +
    Eliminates all = +paperwork**
    Online pre-application = +process
    Cuts days out of the = +application process
    Avoids=20 + delays by ensuring that all information submitted is = +correct and complete
    Eliminates=20 + the need for client visits and your need to obtain = +original client signatures
    Increases=20 + your clients' satisfaction with improved ease, = +accuracy and speed
    Helps=20 + you deliver policies faster than the = +competition
    +
    + + Don't delay! Call or e-mail=20 + us today for more information!
    + 3D'800-933-6632x6'
    + — or —
    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + + + + =20 + + + + + +
    Please fill = +out the form below for more information
    Name:=20 + +
    E-mail:=20 + +
    Phone:=20 + +
    City:=20 + + State:=20 + +
     =20 + +  =20 + + +
    +
    +
    + 3D"Roster
    +
    =20 +

    *Z-app is an on-line = +preliminary=20 + application available through the Zurich Life Companies = +and used=20 + in conjunction with Zurich's TeleLife® Process. = +**Replacement=20 + forms required in some states. Not for use with the = +general public.=20 + For agent use only.

    +
    +
    =20 +

    We = +don't want anyone=20 + to receive our mailings who does not wish to. This is = +professional communication=20 + sent to insurance professionals. To be removed from this mailing = +list,=20 + DO NOT REPLY to this message. Instead, go here: =20 + http://www.Insuranceiq.com/optout

    +
    +
    + Legal = +Notice=20 +
    + + + +------=_NextPart_000_18C3F1_01C2528F.A17426A0-- + diff --git a/Ch3/datasets/spam/spam/00210.050ffd105bd4e006771ee63cabc59978 b/Ch3/datasets/spam/spam/00210.050ffd105bd4e006771ee63cabc59978 new file mode 100644 index 000000000..92ec9ef08 --- /dev/null +++ b/Ch3/datasets/spam/spam/00210.050ffd105bd4e006771ee63cabc59978 @@ -0,0 +1,63 @@ +From karen_duarte@emailaccount.com Tue Sep 3 14:37:18 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 648B016F7B + for ; Tue, 3 Sep 2002 14:31:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 03 Sep 2002 14:31:00 +0100 (IST) +Received: from pf129.minsk-mazowiecki.sdi.tpnet.pl + (pf129.minsk-mazowiecki.sdi.tpnet.pl [80.49.3.129]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g831SQZ32566 for ; + Tue, 3 Sep 2002 02:28:26 +0100 +X-Authentication-Warning: dogma.slashnull.org: pf129.minsk-mazowiecki.sdi.tpnet.pl + [80.49.3.129] didn't use HELO protocol +Received: from [199.41.174.112] by q4.quik.com with smtp; 02 Sep 2002 + 23:30:41 +0200 +Received: from f64.law4.hotmail.com ([95.249.114.70]) by + smtp-server6.tampabay.rr.com with local; Mon, 02 Sep 2002 18:27:01 +0700 +Received: from unknown (HELO hd.regsoft.net) (11.116.203.190) by + mx.rootsystems.net with local; 02 Sep 2002 17:23:21 +0800 +Received: from mx.rootsystems.net ([175.135.162.9]) by mta6.snfc21.pbi.net + with asmtp; Mon, 02 Sep 2002 19:19:41 +0600 +Received: from unknown (71.125.178.167) by hd.regsoft.net with esmtp; + 03 Sep 2002 11:16:01 -1000 +Reply-To: " +Message-Id: <003d15e77e2e$2223b1e0$2cd16bc8@fqaqrv> +From: " +To: +Subject: $14.95 per year for .COM, .BIZ, and .INFO extensions +Date: Mon, 02 Sep 2002 22:18:23 +0300 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: AOL 7.0 for Windows US sub 118 +Importance: Normal +Content-Transfer-Encoding: 8bit + +IMPORTANT INFORMATION: + +The new domain names are finally available to the general public at discount prices. Now you can register one of the exciting new .BIZ or .INFO domain names, as well as the original .COM and .NET names for just $14.95. These brand new domain extensions were recently approved by ICANN and have the same rights as the original .COM and .NET domain names. The biggest benefit is of-course that the .BIZ and .INFO domain names are currently more available. i.e. it will be much easier to register an attractive and easy-to-remember domain name for the same price. Visit: http://www.affordable-domains.com today for more info. + +Register your domain name today for just $14.95 at: http://www.affordable-domains.com/ Registration fees include full access to an easy-to-use control panel to manage your domain name in the future. + +Sincerely, + +Domain Administrator +Affordable Domains + + +To remove your email address from further promotional mailings from this company, click here: +http://www.centralremovalservice.com/cgi-bin/domain-remove.cgi +(g1-ss2)5592OxeR3-424uQKh2259kCdl5-189GEil31 + + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00211.d976c6049e8448e7c407c124b580e0ba b/Ch3/datasets/spam/spam/00211.d976c6049e8448e7c407c124b580e0ba new file mode 100644 index 000000000..1a146feea --- /dev/null +++ b/Ch3/datasets/spam/spam/00211.d976c6049e8448e7c407c124b580e0ba @@ -0,0 +1,250 @@ +From batomic@hotmail.com Tue Sep 3 14:53:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id D87D916F4C + for ; Tue, 3 Sep 2002 14:52:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 03 Sep 2002 14:52:51 +0100 (IST) +Received: from roc-smtp2-sun.choiceone.net (roc-smtp2-sun.choiceone.net + [64.65.208.3]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g83CivZ18336 for ; Tue, 3 Sep 2002 13:44:57 +0100 +Received: (qmail 6850 invoked by uid 10602); 3 Sep 2002 12:41:26 -0000 +Received: from batomic@hotmail.com by roc-smtp2-sun by uid 10599 with + qmail-scanner-1.13 (uvscan: v4.1.40/v4220. Clear:. Processed in 10.002408 + secs); 03 Sep 2002 12:41:27 -0000 +Received: from host-64-65-193-193.spr.choiceone.net (HELO + server01.fnlonline.com) (64.65.193.193) by smtp.choiceone.net with SMTP; + 3 Sep 2002 12:41:09 -0000 +Received: from 1-800-plumbing.com (BABILON10 [200.75.120.56]) by + server01.fnlonline.com with SMTP (Microsoft Exchange Internet Mail Service + Version 5.5.2448.0) id RVPQQ2XR; Mon, 26 Aug 2002 16:00:59 -0400 +Message-Id: <00001ab3560f$00007f10$00004a9c@138138138.com> +To: , , , + , , , + , , + , +Cc: , , , + , , , + , , +From: batomic@hotmail.com +Subject: eBay, Be Debt Free by 2003! 8119 +Date: Tue, 27 Aug 2002 03:45:51 -1600 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + + + +
    + + + + + +

    +

    EBAY AUCTION NEWS
    +
    ** + Recommended Resource - Special Edition **
    +
    Monday, August 26th, 2002

    +
    +

    Multip= +le + Streams of revenue using eBay and Internet:

    +

    FREE Auction Profits Toolkit and + FREE training class
    +
    (For the first 200 respondents)= +

    +

    You have + been selected to participate in this FREE offer.
    +

    + This eBay and Internet e-course, live web training + conference, and Auction Profit Toolkit could easily sell + for $297 - but it's yours absolutely FREE! +
    +
    + This special FREE offer has been brought + to you by your friends at eBay Auction News. Craig Meyer + (The Auction Man) has agreed to provide you a free + "live" training class that you won't + want to miss.
    +
    + You might say "Craig Meyer - the Auction Man?" + That's because most of you remember Craig as the real estate + guru who in 1997 helped over 2,000 families buy their own + homes using little or none of their own money. Craig was + featured on television programs throughout the country + for this incredible effort. Craig is not one of those get + rich quick gurus - but a guy who has helped families + realize the American Dream - I will tell you Craig Meyer + is the real deal!
    +
    + Craig and his staff have + invested hundreds of thousands of dollars and thousands + of hours testing, testing and more testing - Craig has + developed an incredible system for making Big Money using + eBay and the Internet This system will be revealed to you + in - Craig's brand new live Online Conference - Craig is + providing a limited number of eBay Auction News subscribers + the opportunity to attend this conference for FREE! +
    +
    + Register for the class: + CLIC= +K HERE
    +
    +
    #1 Free "live" Online training class - + Craig Meyer's Multiple Streams of revenue using eBay and + the Internet!
    +
    +

    +
    + + + + + + +
    Sessio= +ns + Start:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     8/28/2002 - 5:00pm PST - 6:30p= +m PST
     9/02/2002 - 9:00am PST - 10:30= +am PST
     9/03/2002 - 5:00pm PST - 6:30p= +m PST
     9/05/2002 - 9:00am PST - 10:30= +am PST
     9/09/2002 - 9:00am PST - 10:30= +am PST
     9/10/2002 - 5:00pm PST - 6:30p= +m PST
     Pre-recorded Class (anytime)
    +
    +

    This is + the live online training class that Started it all ... Thi= +s + class can help YOU learn how to Create Multiple Streams + of eBay and internet revenue for LIFE! This + course is personally taught online by Craig Meyer + HIMSELF! PLUS, when you attend, you will get:
    +
    +
    The Entire + Auction Profits Toolkit absolutely FREE! A $297 Value!
    +
    + Just think about it ... you will have personal and + individual training! Craig will be teaching you all of + his proven, successful, and profitable wealth secrets - + LIVE, interactive, intense and jam packed with + information!
    +
    + Plus - During Craig's live online class he will reveal + the secret to making $12,000 in the next 30 days - No + Hype, I promise this is the real deal - you don't want to + miss this conference so respond right now!
    +
    + Are you interested in Financial Freedom?
    + Are you interested in having Multiple Streams of Income?
    + Are you willing to work with Craig personally to achieve + these goals?
    + Are you ready to the Auction Profit Toolkit and training class FREE?

    +
    +
    + + If SO, + Just go to the registration page: + CLIC= +K HERE +
    +

    + Get registered now! You'll receive a confirmation email + immediately after you register.
    + KEEP THE CONFIRMATION EMAIL HANDY! It + contains all the codes and access numbers to view the + program on your PC and get on the call!
    +
    + This conference will be sold out - actually since the + entire program is free It will simply fill up - once it + is full - it's full - to guarantee your participation + register right now!
    +

    +

    HERE IS HOW YOU + REGISTER & LOCK IN YOUR POSITION:

    +

    You have to + go to this website: + CLICK HERE
    +
    + Be sure to do it
    NOW - the web conference and auction profits c= +ourse are going to go QUICKLY ... and I don't want + you to miss out!
    +
    + Sincerely,
    +
    + Taylor Brooks
    + eBay Auction News
    +

    +
    +

    To be removed, + CLICK HE= +RE

    +
    +
    + + + + + + diff --git a/Ch3/datasets/spam/spam/00212.a9947ad74a529a35d11538e1df60cd73 b/Ch3/datasets/spam/spam/00212.a9947ad74a529a35d11538e1df60cd73 new file mode 100644 index 000000000..4554c52a0 --- /dev/null +++ b/Ch3/datasets/spam/spam/00212.a9947ad74a529a35d11538e1df60cd73 @@ -0,0 +1,42 @@ +From ferdinand@caramail.com Tue Sep 3 18:16:08 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E2A7916F56 + for ; Tue, 3 Sep 2002 18:16:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 03 Sep 2002 18:16:07 +0100 (IST) +Received: from cxbiz.net ([218.5.79.106]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g83H7EZ28496 for ; + Tue, 3 Sep 2002 18:07:15 +0100 +Received: from ns.24h.co.jp [4.42.141.17] by cxbiz.net (SMTPD32-7.11 ) + id ABD970108; Wed, 04 Sep 2002 01:05:29 +0800 +To: +Cc: , , , + , , , + +From: "Bob Hope" +Subject: <---- FREAK ME ----> +Date: Tue, 03 Sep 2002 10:03:14 -1900 +MIME-Version: 1.0 +Message-Id: <20020904010500.SM00992@ns.24h.co.jp> +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +
    + + +

    +Copyright 2002 - All rights reserved

    If you would no longer like us= + +to contact you or feel that you have
    received this email in error, +please click here +to unsubscribe.
    + + + + diff --git a/Ch3/datasets/spam/spam/00213.8c42a1c257aa30ff3b3ba668cca59408 b/Ch3/datasets/spam/spam/00213.8c42a1c257aa30ff3b3ba668cca59408 new file mode 100644 index 000000000..8bb365796 --- /dev/null +++ b/Ch3/datasets/spam/spam/00213.8c42a1c257aa30ff3b3ba668cca59408 @@ -0,0 +1,34 @@ +From jenniferc@softhome.net Tue Sep 3 22:25:33 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E053016F87 + for ; Tue, 3 Sep 2002 22:22:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 03 Sep 2002 22:22:37 +0100 (IST) +Received: from fileserver3.evalue.com ([203.200.122.126]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g83K5AZ01311 for + ; Tue, 3 Sep 2002 21:05:11 +0100 +Received: from fileserver3.evalue.com ([127.0.0.1]) by + fileserver3.evalue.com with Microsoft SMTPSVC(5.0.2195.5329); + Wed, 4 Sep 2002 01:31:44 +0530 +From: Jennifer Choate +To: zzzz@spamassassin.taint.org +Subject: Please help Home Entertainment Companies with Survey - Win a DVR! +Date: 04 Sep 2002 01:31:44 +0530 +MIME-Version: 1.0 +Message-Id: +X-Originalarrivaltime: 03 Sep 2002 20:01:44.0112 (UTC) FILETIME=[B9FF9B00:01C25384] +Content-Type: text/html +Content-Transfer-Encoding: 8bit + +

    We thank you for just a moment of your time. NextResearch is inviting you to join a panel of consumer electronics users now being created to help manufacturers, network programmers, and entertainment companies shape their future offerings. In exchange for your willingness to participate, there will be prizes and incentives awarded. ALL CONTACT INFORMATION WILL BE HELD IN STRICTEST CONFIDENCE AND WE WILL NEVER TRY TO SELL YOU ANYTHING. You will be able to opt-out of the panel at any time.

    + Please click here http://65.19.137.17/nextresearch/nr.htm if you would like to participate in your first survey and earn a chance to win one of 25 new Digital Video Recorders being awarded in September! (You do not have to join the panel to participate in this survey.) This is a national market research program conducted with the highest ethical standards. Feel free to contact program director, Jennifer Choate at 901.491.4995 with any questions. To unsubscribe from this list, simply reply to this email to be removed from future invitations to participate. +

    Thank you again for your consideration,

    +

    NextResearch

    + (http://www.nextresearch.com)

    +

    Link to survey: http://65.19.137.17/nextresearch/nr.htm

    + + + diff --git a/Ch3/datasets/spam/spam/00214.1367039e50dc6b7adb0f2aa8aba83216 b/Ch3/datasets/spam/spam/00214.1367039e50dc6b7adb0f2aa8aba83216 new file mode 100644 index 000000000..93946709f --- /dev/null +++ b/Ch3/datasets/spam/spam/00214.1367039e50dc6b7adb0f2aa8aba83216 @@ -0,0 +1,199 @@ +From pmg@insiq.us Wed Sep 4 11:54:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id BF7E516FBD + for ; Wed, 4 Sep 2002 11:45:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 04 Sep 2002 11:45:14 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g83NJ9Z07502 for ; Wed, 4 Sep 2002 00:19:13 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Tue, 3 Sep 2002 19:20:07 -0400 +Subject: We Dare You to Find a Better Annuity +To: +Date: Tue, 3 Sep 2002 19:20:07 -0400 +From: "IQ - PMG" +Message-Id: <1f20ba01c253a0$70f607c0$6b01a8c0@insuranceiq.com> +MIME-Version: 1.0 +Thread-Index: AcJTh9JkVe6kAEmyQF2RgpCVwVLx5g== +Content-Class: urn:content-classes:message +X-Mailer: Microsoft CDO for Windows 2000 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +X-Originalarrivaltime: 03 Sep 2002 23:20:07.0750 (UTC) FILETIME=[711E9E60:01C253A0] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_1CDC19_01C25366.4B57F3A0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_1CDC19_01C25366.4B57F3A0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: quoted-printable + + We dare you... + Try to find a better annuity! +=20 + - 5.40% Guaranteed for 6 Years=0A= +- 6 Year Surrender Charge=0A= +- 5% Agent +Commission up to age 80=09 +Call today for more information! + 800-888-7641 ext. 103 +- or - + +Please fill out the form below for more information =20 +Name: =09 +E-mail: =20 +Phone: =20 +City: State: =20 + =09 +=20 + PMG Financial Services +*5.40% for deposits of $100,000 and up, 5.25% interest for deposits +totalling $25,000-$99,999. =20 +We don't want anyone to receive our mailings who does not wish to +receive them. This is a professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: http://www.insuranceiq.com/optout +=20 + +Legal Notice =20 + +------=_NextPart_000_1CDC19_01C25366.4B57F3A0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +We Dare You to Find a Better Annuity + + + +=20 + + =20 + + + =20 + + +
    + 3D"We
    + 3D"Try
    + =20 + + =20 + + + =20 + + + =20 + + +
    3D"-
    + Call today for more information!
    +
    + - or -

    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please fill out the form below for more = +information
    Name:
    E-mail:
    Phone:
    City:State:
     =20 + + + +
    +
    + 3D"PMG=20 +
    *5.40% for deposits of $100,000 and up, = +5.25% interest for deposits totalling $25,000-$99,999.
    +
    +

    We=20 + don't want anyone to receive our mailings who does not=20 + wish to receive them. This is a professional communication=20 + sent to insurance professionals. To be removed from this mailing=20 + list, DO NOT REPLY to this message. Instead, go here: =20 + http://www.insuranceiq.com/optout

    +
    +
    + Legal Notice =20 +
    +
    + + + +------=_NextPart_000_1CDC19_01C25366.4B57F3A0-- + diff --git a/Ch3/datasets/spam/spam/00215.f571ecd203e8d39296419bffc47e4a6a b/Ch3/datasets/spam/spam/00215.f571ecd203e8d39296419bffc47e4a6a new file mode 100644 index 000000000..61b62560c --- /dev/null +++ b/Ch3/datasets/spam/spam/00215.f571ecd203e8d39296419bffc47e4a6a @@ -0,0 +1,237 @@ +From ihehmq1s@hotmail.com Wed Sep 4 11:54:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id B34A916FBE + for ; Wed, 4 Sep 2002 11:45:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 04 Sep 2002 11:45:18 +0100 (IST) +Received: from dsl-65-185-76-173.telocity.com + (dsl-65-185-76-173.telocity.com [65.185.76.173]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8416VZ13642 for ; + Wed, 4 Sep 2002 02:06:32 +0100 +Received: from mx09.hotmail.com ([61.241.154.250]) by + dsl-65-185-76-173.telocity.com with Microsoft SMTPSVC(5.0.2195.2966); + Tue, 3 Sep 2002 17:26:22 -0400 +Message-Id: <00007beb400d$00006e2a$000068b9@mx09.hotmail.com> +To: +From: "Benjamin Boyce" +Subject: Interest Rates at Forty Yr. Lows +Date: Wed, 04 Sep 2002 01:35:46 -0800 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2616 +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Originalarrivaltime: 03 Sep 2002 21:26:24.0312 (UTC) FILETIME=[8E089B80:01C25390] +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + +www.low-interest-rates.net + + + + + + +
    + + + +
    + + + + +
    + + + +
    +
    + + + + + + + + + + +
      = +    quotepoolmortgage™
    + + + + + +
    +
    +We're different and it's a difference that can save you time and money. +We can help you:

    + + + + + + + + + +
    Refinance to get a lower rate
    Cons= +olidate your high-interest debt
    Lowe= +r your monthly payments
    Get = +extra cash for a vacation
    Pay for= + tuition
    Start h= +ome improvements
    Purc= +hase a New Home
    + +
    +

    We understand that there are a lot of decisions to make wh= +en securing a mortgage loan or refinancing your current loan. That's why = +we have mortgage EXPERTS with years of EXPERIENCE to help you make the rig= +ht decisions. + +

    Credit doesn't have to be an issue either. Whether your c= +redit's perfect or less than perfect, we can help you find the best deal o= +n your home loan. Our quick, FREE, easy form will put you in contact with = +the top brokers in the business!
    +DON'T Miss The Opportunity to SAVE! + +

    Now is the perfect time to secure your mortgage loan. Wit= +h our country in a recession, the federal government keeps LOWERING INTERE= +ST RATES to help stimulate the economy. It is a win-win situation and it = +benefits mostly YOU, the homeowner! Try it now! + +

    There are NO excuses. There are great rates available, = +it's a simple form, and it costs you NOTHING to fill out for a FREE quote.= + + + +

    + + +

    + + + + + + + +
    PROCEED HERE 
    + + +
    + + + + + + + + +
    = +     Privacy | Unsubscribe
    + + +
    +

    + + +
    + + +
    + + +
    + + + + + + diff --git a/Ch3/datasets/spam/spam/00216.89c1ede0b81fb09f7334f47a5183410a b/Ch3/datasets/spam/spam/00216.89c1ede0b81fb09f7334f47a5183410a new file mode 100644 index 000000000..c34da82ee --- /dev/null +++ b/Ch3/datasets/spam/spam/00216.89c1ede0b81fb09f7334f47a5183410a @@ -0,0 +1,143 @@ +From barristerbassey@arabia.com Wed Sep 4 11:55:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id BCF9816FC1 + for ; Wed, 4 Sep 2002 11:45:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 04 Sep 2002 11:45:25 +0100 (IST) +Received: from armail01la.mail2world.com (mw183.mail2world.com + [66.28.189.183]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g844wBZ20243; Wed, 4 Sep 2002 05:58:11 +0100 +Received: from arweb06la (unverified [10.1.201.110]) by + armail01la.mail2world.com (Rockliffe SMTPRA 4.5.6) with ESMTP id + ; Tue, 3 Sep 2002 21:57:56 -0700 +Thread-Index: AcJTz6H+ubo9PQThSw2PFDoS5ffLRA== +Thread-Topic: Business Proposal. +Reply-To: +From: +To: +Cc: +Subject: Business Proposal. +Date: Tue, 3 Sep 2002 21:57:56 -0700 +Message-Id: <020e01c253cf$a2009cc0$14c9a8c0@mail2world.com> +MIME-Version: 1.0 +X-Mailer: Microsoft CDO for Exchange 2000 +Content-Class: urn:content-classes:message +Importance: normal +Priority: normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Content-Type: multipart/alternative; boundary="----=_NextPart_000_020F_01C25394.F5A1C4C0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_020F_01C25394.F5A1C4C0 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit + +BASSEY& ASSOCIATES +FALOMO, IKOYI. +LAGOS - NIGERIA. + +FOR YOUR KIND ATTENTION, + +RE: REQUEST FOR MUTUALLY BENEFITTING ENDEAVOUR. + +I humbly crave your indulgence in sending you this mail, if the contents +does not meet with your personal +and business ethics, I apologize in advance. + +I am Barrister Williams Bassey ( attorney at law), I represent Alhaji +Ishmaila Ibrahim Gwarzo's estates. Alhaji Gwarzo was the chief security +advicer of the then military leader of this country(Nigeria) in the +person of Late General Sani Abacha who died on the 8th of June 1998. + +With the advent of a new democratic dispensation in the country under +the leadership of Gen. Olusegun Obasanjo (Rtd), my client has come under +severe persecution due to the sensitive position he held in the last +military regime, presently he is under house arrest restricted only to +the confines of his village. + +The main purpose of this mail is to intimate you of a business proposal +that might be of interest to you. My +client has informed me of the existence of funds deposited with a +security company abroad. This fund +came about as part of security votes that were allocated to my client's +portfolio during his tenure +as chief security advicer to the then president. What happened was that +he had part of the funds transferred +from the vaults of the Central Bank Of Nigeria to this security outfit +with the aim of purchasing arms and ammunitions for the personal +security outfit of the then president. But before the purchase could +take place the president died. My client has deceided to keep this for +himself as all his properties has been +confisticated by the present regime. But due to his incarceration he +cannot travel out and effect the +change of possession to his benefit. + +I have been mandated by my client to source for a foreign partner that +can help him facilitate the +change of possession. The deposit certificate and the code needed for +the execution of this endeavour are in +my possession. + +The funds in question is USD33.6M (Thirty-Three Million, Six Hundred +Thousand United States dollars Only). Should this proposition be of +interest to you,you can reach me through my e-mail address so that we +can go +through the rudiments of this endeavour. + +I remain most obliged. + +Barrister Williams Bassey (JP). +Principal Partner.- Bassey & Associates + + + +------=_NextPart_000_020F_01C25394.F5A1C4C0 +Content-Type: text/html +Content-Transfer-Encoding: 7bit + + + +BASSEY& ASSOCIATES
    +FALOMO, IKOYI.
    +LAGOS - NIGERIA.
    +
    +FOR YOUR KIND ATTENTION,
    +
    +RE: REQUEST FOR MUTUALLY BENEFITTING ENDEAVOUR.
    +
    +I humbly crave your indulgence in sending you this mail, if the contents does not meet with your personal
    +and business ethics, I apologize in advance.
    +
    +I am Barrister Williams Bassey ( attorney at law), I represent Alhaji Ishmaila Ibrahim Gwarzo’s estates. Alhaji Gwarzo was the chief security advicer of the then military leader of this country(Nigeria) in the person of Late General Sani Abacha who died on the 8th of June 1998.
    +
    +With the advent of a new democratic dispensation in the country under the leadership of Gen. Olusegun Obasanjo (Rtd), my client has come under severe persecution due to the sensitive position he held in the last military regime, presently he is under house arrest restricted only to the confines of his village.
    +
    +The main purpose of this mail is to intimate you of a business proposal that might be of interest to you. My
    +client has informed me of the existence of funds deposited with a security company abroad. This fund
    +came about as part of security votes that were allocated to my client's portfolio during his tenure
    +as chief security advicer to the then president. What happened was that he had part of the funds transferred
    +from the vaults of the Central Bank Of Nigeria to this security outfit with the aim of purchasing arms and ammunitions for the personal security outfit of the then president. But before the purchase could take place the president died. My client has deceided to keep this for himself as all his properties has been
    +confisticated by the present regime. But due to his incarceration he cannot travel out and effect the
    +change of possession to his benefit.
    +
    +I have been mandated by my client to source for a foreign partner that can help him facilitate the
    +change of possession. The deposit certificate and the code needed for the execution of this endeavour are in
    +my possession.
    +
    +The funds in question is USD33.6M (Thirty-Three Million, Six Hundred Thousand United States dollars Only). Should this proposition be of interest to you,you can reach me through my e-mail address so that we can go
    +through the rudiments of this endeavour.
    +
    +I remain most obliged.
    +
    +Barrister Williams Bassey (JP).
    +Principal Partner.- Bassey & Associates + +

    +------=_NextPart_000_020F_01C25394.F5A1C4C0-- + + diff --git a/Ch3/datasets/spam/spam/00217.43b4ef3d9c56cf42be9c37b546a19e78 b/Ch3/datasets/spam/spam/00217.43b4ef3d9c56cf42be9c37b546a19e78 new file mode 100644 index 000000000..8dfe1d57f --- /dev/null +++ b/Ch3/datasets/spam/spam/00217.43b4ef3d9c56cf42be9c37b546a19e78 @@ -0,0 +1,139 @@ +From eb@via.ecp.fr Wed Sep 4 11:55:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id F2A2316F81 + for ; Wed, 4 Sep 2002 11:45:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 04 Sep 2002 11:45:29 +0100 (IST) +Received: from mixware1.www.mixware.com ([208.178.228.159]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g846QlZ22318 for + ; Wed, 4 Sep 2002 07:26:47 +0100 +Message-Id: <200209040626.g846QlZ22318@dogma.slashnull.org> +Received: from html (dsc03.dav-oh-4-159.rasserver.net [199.35.246.159]) by + mixware1.www.mixware.com with SMTP (Microsoft Exchange Internet Mail + Service Version 5.5.2650.21) id SGSX19QH; Wed, 4 Sep 2002 01:45:50 -0400 +From: eb@via.ecp.fr +Reply-To: w_h_martin2002@yahoo.com +To: eb@via.ecp.fr +Subject: Over $100,000 Per Year Possible On The Net! No Illegal MLM Junk! Time:11:43:57 PM +Date: Tue, 3 Sep 2002 23:43:57 +MIME-Version: 1.0 +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 +X-Mimeole: Produced By Microsoft MimeOLE V5.00.2919.6700 +Content-Type: text/html; charset="DEFAULT_CHARSET" + + +
    +
    Over $100,000 The First Year, Most Of That While I Was Sleeping! Will Work For Anyone, Anywhere!

    +
    + +

    Imagine + The Perfect Business

    +
      +
    • You + Can Run It From Home...Or From Anywhere With A Telephone Connection
    • +
    +
      +
    • There + Is No Large Investment To Get Started
    • +
    +
      +
    • You + Can Put Everything On Auto-Pilot
    • +
    +
      +
    • There + Is No Face-To-Face Selling Involved
    • +
    +
      +
    • There + Is No Inventory To Buy Or Ship
    • +
    +
      +
    • You + Can Even Work In Your Underwear If You Want To (No More Ties!)
    • +
    +
      +
    • If You Are Willing To Put 1 Or 2 Hours In To Start, This Can Be A Mint! If You Can't Spare A Few Hours & The Money For A Movie For Two & A Snack, Don't Go Any Further!
    • +
    + + +

    Sound good? + It Is!

    +

    The + Cash Flow System That Brought In Over $115,467.00 In The First Year

    +

    My + Internet Business brought in over $115,467.21 last year and I'm going + to show you exactly how you can do the same thing. But I'm not going + to stop there...I'm going to give you FIVE Internet businesses you can + start right now...TODAY!

    + +
    +
    Please Visit Our +Website

    +And Place Your Order +TODAY! CLICK HERE

     

    +

    +To Order by postal mail, please send to the below address. Or order via fax from our +24 hour fax line: 734-574-6455 +

    +Make payable to Instant Internet Empire. +

    +Instant Internet Empire
    +238 East Southern Ave.
    +Springfield, Ohio 45505
    +
    +___Instant Internet Empire $42.95
    +Add $3.00 Processing Fee To Your Order. +

    +*****
    +Important Credit Card Information! Please Read Below! +

    +* Credit Card Address, City, State and Zip Code, must match + billing address to be processed. +

    + +CHECK____ MONEYORDER____ VISA____ MASTERCARD____ AmericanExpress___ +Debt Card___ +

    +Name_______________________________________________________
    +(As it appears on Check or Credit Card) +

    +Address____________________________________________________
    +(As it appears on Check or Credit Card) +

    +___________________________________________________
    +City,State,Zip(As it appears on Check or Credit Card) +

    +___________________________________________________
    +Country +

    +___________________________________________________
    +(Credit Card Number) +

    +Expiration Month_____ Year_____ +

    +______________________________________________
    +Phone Number +

    +___________________________________________________________
    +Email Address: All Information Sent Via Email Address (Please Write Neat)! +

    +___________________________________________________________
    +Authorized Signature +

    + +To Be Removed From Our Mailing List, Simply Put The Word "Remove" In The Subject Line, And Send To The Email Address Below. For Those Who Wish To Be Removed, Please Don't Complain To The Remove Name ISP. A Remove List Can't Be Make, If You Have It Shut Down! +

    +Email Address: REMOVE + + + + diff --git a/Ch3/datasets/spam/spam/00218.917ed95f5c90c1d9d15d2528b0bd1e79 b/Ch3/datasets/spam/spam/00218.917ed95f5c90c1d9d15d2528b0bd1e79 new file mode 100644 index 000000000..278578e3a --- /dev/null +++ b/Ch3/datasets/spam/spam/00218.917ed95f5c90c1d9d15d2528b0bd1e79 @@ -0,0 +1,88 @@ +From k_u2_1999@consultant.com Wed Sep 4 11:55:32 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 8BF4C16FC2 + for ; Wed, 4 Sep 2002 11:45:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 04 Sep 2002 11:45:37 +0100 (IST) +Received: from consultant.com ([208.227.137.21]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g84AKiZ29070 for ; + Wed, 4 Sep 2002 11:20:56 +0100 +Message-Id: <200209041020.g84AKiZ29070@dogma.slashnull.org> +From: "Eseimoku K.Anderson(Chief)" +To: +Subject: Seeking Your Partnership +Sender: "Eseimoku K.Anderson(Chief)" +MIME-Version: 1.0 +Content-Type: text/plain; charset="ISO-8859-1" +Date: Wed, 4 Sep 2002 11:25:20 +0200 +Content-Transfer-Encoding: 8bit + +Dear Partner to be, + +First, I must apologise to you for using this medium to communicate to you +about this project. + +I am a highly placed official of Government of Nigeria and also a +founding member of the ruling party in Power now,the Peoples Democratic +Party(PDP). + +My committee - The Niger Delta Development Corporation(NDDC)-which is in +charge of managing and supervising the disbursement of oil sales revenues +for the Nigerian government.The revenues under our control runs into +several hundred of millions of dollars monthly.My self and +other colleagues in the NDDC are currently in need of a foreign partner +with whose bank account we shall transfer the sum of Forty Nine Million +Five Hundred Thosand United States Dollars($49.5m).This fund accrued to us +as commission for oil sales contracts handled under our supervision. + +The fund is presently waiting in the Government Account named CBN/FGN +INDEPENDENT REVENUE account number 400-939134 with J.P.MORGAN CHASE +BANK,New York.You can do your independent verifictaion of this. However, +by virtue of our position as civil servants and members of the NDDC, we +cannot acquire this funds in our name. This is because as top civil +servants, we are not allowed by law of the land to own or operate bank +accounts outside our country for now. + +I have been delegated as a matter of trust by my colleagues, +to look for an overseas partner in whose account we would +transfer the fund + +Hence the reason for this mail.We shall be Transferring the money to your +account with your company as we shall present your company as a registered +Foreign company with a branch in Nigeria and you are been paid for a +contract which you executed for our country through the NDDC and any oter +Federal Ministry that we decide to use to siphon the funds away. + +For your support and partnership,please reply me to negotiate your fees or +the percentage you wish to be paid when the funds arrive your bank account. + +You must however note that this transaction, with +regards to our disposition to continue with you, is subject +to these terms. Firstly, our conviction of your transparency. +Secondly, that you treat this transaction with utmost secrecy +and confidentiality. Finally and above all, that you will provide +an account that you have absolute control over. + +The transaction, although discrete, is legitimate and there +is no risk or legal disadvantages either to ourselves or yourself now or +in the future as we have put in place perfect mchineries that will ensure +a hitch free transfer into your account upon acceptance. + +The transfer will be effected to your account within ten-fourteen +(10-14) working days as soon as we reach an agreement and you furnish +me with a suitable bank account and company name and address with all +your contact numbers including fax number. + +I am looking forward to doing business with you and do solicit +your confidentiality in this transaction, Please mail your +response to me. + +Yours faithfully, +Anderson K. Eseimoku + + + + diff --git a/Ch3/datasets/spam/spam/00219.eaf6c0ff67706c784f67f5c1225028a1 b/Ch3/datasets/spam/spam/00219.eaf6c0ff67706c784f67f5c1225028a1 new file mode 100644 index 000000000..cffde573a --- /dev/null +++ b/Ch3/datasets/spam/spam/00219.eaf6c0ff67706c784f67f5c1225028a1 @@ -0,0 +1,229 @@ +From warezcds@hotmail.com Thu Sep 5 11:28:01 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 6967B16F70 + for ; Thu, 5 Sep 2002 11:27:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 05 Sep 2002 11:27:14 +0100 (IST) +Received: from hotmail.com (213-97-224-3.uc.nombres.ttd.es [213.97.224.3]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g856aVZ07379 for + ; Thu, 5 Sep 2002 07:36:32 +0100 +Reply-To: +Message-Id: <007b86e77b7e$1426e8e7$4ad87ca2@ipxhgy> +From: +To: Postmaster@dogma.slashnull.org +Subject: Customized Warez CDs +Date: Fri, 06 Sep 2002 05:28:13 -0800 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00D1_61B37D4A.A0476B56" + +------=_NextPart_000_00D1_61B37D4A.A0476B56 +Content-Type: text/html; charset="iso-8859-1" + + + + +
    + + + +
    Introduction
    We sell Backup +CDs, also known as Warez CDs. Backup CDs are copies of Software. +

    For example if you go into a shop and buy Windows XP Pro, for about $299 you +get the Serial, the CD, the Box and the Manual.

    If you order it off us, +you get:
    The Windows XP CD and the Serial Number. It works exactly the same, +but you don't get the manual and box and the price is only $19.99.
    That is a +saving of $280, and the only difference is you don't have a colorful box and +manual - which are not very +useful.

    +

    Features
    - over +400 applications
    - over 1500 games
    - we reply at all your requests in a +few hours
    - newest releases
    - we have the best price on the WEB
    - best +choice of CD's ever seen on WEB
    - we ship orders to worldwide
    - secure +credit card processing thru our authorized on-line retailer. Your information +will be passed through a secure server and encrypted (128bit).

    +

     No need to worry about someone will steal you +credit card details.

    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    Most popular CD's........
     

    Adobe PHOTOSHOP +7.0 finall
    only: $19.99
    +
    +

    MS Windows XP +PRO.
    only: $19.99
    +
    +

    MS Office XP pro +(3CD's)
    only: $19.99
      + + + + + + + + + +
    Gratitude's of our +customers...
    John Stewart
    Thanks guys, I just +got the set of CD's and they work as promised. You got a happy customer ready to +order some more and I'll send more customers. +
    +
    Mike Sandell
    I only want you to +now that the CD I ordered had arrived. I was a little suspicious when I ordered +the stuff, but I was wrong. Thanks for your services and never let the site go +down. +
    +
    Chris Anderson
    Top marks for an +excellent service. Your speed of response to my query was second to none. I'll +certainly be buying from you in future. Keep up the good work, guys. +
    +

    To + Order Please Open warezcds.html in Attachment

    +

     

    + + +6695jkxA7-447JwRJ3218JopD8-829QlEE1899mHZQ0-l41 + +------=_NextPart_000_00D1_61B37D4A.A0476B56 +Content-Type: application/octet-stream; name="warezcds.html" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="warezcds.html" + +PGh0bWw+DQoNCjxoZWFkPg0KPG1ldGEgSFRUUC1FUVVJVj0iRXhwaXJlcyIg +Q09OVEVOVD0iSFRNTGNyeXB0Ij4NCg0KPCEtLQ0KIC0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnwgICAgICAgDQogLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0+DQo8c2NyaXB0IGxh +bmd1YWdlPSJKYXZhc2NyaXB0Ij4NCjwhLS0NCg0KZnVuY3Rpb24gcHJvY2Vz +cyhhcikNCiB7DQogIHZhciBTdHJpPScnDQoNCiAgdmFyIHksIHosIHN1bSwg +biwgbjEsIG51bWJlciwgaj0wDQogIHZhciBrZXkgPSBuZXcgQXJyYXkoMTI1 +OTMsMTI4NTAsMTMxMDUsNTApDQoNCiAgbjE9OA0KICBmb3IgKGo9MDsgajxh +ci5sZW5ndGg7ICsraikNCiAgIHsNCiAgICBmb3IgKGk9MDsgaTxhcltqXS5s +ZW5ndGgtMTsgKytpKQ0KICAgICB7DQogICAgICBzdW09NDA1NTYxNjk2OA0K +ICAgICAgbj1uMQ0KICAgICAgeT1hcltqXVtpXQ0KICAgICAgej1hcltqXVsr +K2ldDQogICAgICB3aGlsZShuLS0+MCkNCiAgICAgICB7DQogICAgICAgIHot +PSh5PDw0KStrZXlbMl1eeStzdW1eKHk+PjUpK2tleVszXQ0KICAgICAgICB5 +LT0oejw8NCkra2V5WzBdXnorc3VtXih6Pj41KStrZXlbMV0NCiAgICAgICAg +c3VtLT0weDlFMzc3OUI5DQogICAgICAgfQ0KDQogICAgICBTdHJpKz1TdHJp +bmcuZnJvbUNoYXJDb2RlKHkmMHhGRikrU3RyaW5nLmZyb21DaGFyQ29kZSgo +eT4+OCkmMHhGRikrU3RyaW5nLmZyb21DaGFyQ29kZSgoeT4+MTYpJjB4RkYp +K1N0cmluZy5mcm9tQ2hhckNvZGUoKHk+PjI0KSYweEZGKQ0KICAgICAgU3Ry +aSs9U3RyaW5nLmZyb21DaGFyQ29kZSh6JjB4RkYpK1N0cmluZy5mcm9tQ2hh +ckNvZGUoKHo+PjgpJjB4RkYpK1N0cmluZy5mcm9tQ2hhckNvZGUoKHo+PjE2 +KSYweEZGKStTdHJpbmcuZnJvbUNoYXJDb2RlKCh6Pj4yNCkmMHhGRikNCiAg +ICAgfQ0KICAgIGRvY3VtZW50LndyaXRlKFN0cmkpDQogICAgU3RyaT0nJw0K +ICAgfQ0KICB9DQoNCmZ1bmN0aW9uIHN0YXJ0KCkgew0KdmFyIGFyPW5ldyBB +cnJheSgpDQphclswXT1uZXcgQXJyYXkoOTIyNzIxNTczLC0xMDE1NDI4MzI4 +LDU2Nzg2NDU2OCwtMTgzNjAwNTcwNywtNzEyMDQ5MjkyLC03NDExMDI5NzYs +MTExNjI4NTAyNCwtMzYzNTc1MTcsMjA5OTc3Mjc5OSw4MjI2NDI1MjEsLTQ5 +NzQ2NDc3NSw0MzA4MDg4MDksMTA2NDUxMTYyMiwxNzEyNjc0NTEwLC0xMDUx +MjQwNjI2LC02MjkwNjg0MDUsMTIyNzQ1MTgxMCwxOTA0ODY2NDUsLTMyNTgz +MDMwNiw2MTg5OTE1NTEsLTE3Nzk2NDYzNDgsMTY4NjA0MzY4LDE1MTU5MTY4 +NTEsLTIyMjUwNzkxOCwtNjE2MjYyMDE0LDE4NzUyNTA3ODgsLTE5MzM4NDE1 +MTYsMTk2NjIwNDcwNCw1ODQzOTYxODAsMTgwOTY4NDU4NCwtMzU1MDk2NDE0 +LDc2NjA2NTMwOCw5NDI4ODIwODgsMTc3NzE4NjQ3OSwtMTU2NzI2ODI0MCwx +MzEwNDY2Mjg2LDcxMTAzNzUzMCwtMjMwODA0OTI0LDEzNzM3ODUzNzksMTEz +MTU4NDQ4MywtNjE0NzMxNjYxLDExNDIzNzMxODgsMTQyNzE5ODQxNCwtNjc3 +MDcxOTYsMjYyNTM0MTQ4LDE1MjM0MTU1NjAsMTIwOTg3ODc5NCwtMzMyODQy +MTAxLDUzMTI0MDIzMywtMTg1MjgyODgwLC05NDQ1ODQxLC0xMjUzOTM3MzY0 +LDkzNDMxNzk3LC0xNzY2OTAwNDI5LC0yODMyNTEyMDAsLTIwMzExMTQ5NjQs +LTc5ODIwNTMxMywxODk4MDE4OTg0LC0xNjU2MjY3OTc0LC0xMDgwNTYxMzM4 +LDEwNzI4NjYxODAsMjAyMTk3NzExNiw3Mzc5NjU2MDcsLTE5OTU3ODA3ODgs +LTIwMzM0NzkyNjgsNDgxODkzNzgwLDE2NzY1MTU1NTAsLTEyNTAzMzk5Miwx +NzEzNTc2MDUzLC01MzQyOTI0OTQsMTAzNzc1NjU5LC0xMjcwOTY1OTM4LDU4 +MDA3MjQ4LC0xMzQ3NzE5NzEsMTg2MzkzODI1MSwtNzcxNjM4OTMyLC0zODEw +ODk4ODgsLTg4NDE1ODI5Niw5NjAwOTI3OTksLTcwODI1MDczNCwxMTQyMTkw +Mzg4LC05MjkxMjE4OTQsMTk1MjI3OTcyMyw4MTU0NzYzMjQsLTE4NjMwOTYz +NTgsLTYzOTQ3Nzg5MSwtNDEyNDY5Mjg5LDEyODUwMjA5OSwyMDE0ODUxMDcs +LTE1NTQ5MTk4ODEsMjExNzYzNjcyLC0xNTAxOTUxNDMxLDE1MzYyNDQzNDMs +LTE5Nzg2NzUyMTMsLTE2MTI3MTE4MTAsLTQ0OTkyMTI1OSwtNzkxMTgzOTAx +LC03NzU1ODExMzYsMTU1OTc4NzIwOCwtNzAwMzkwMTEwLC0xMDI2NjAxMzg1 +LC01NTE5NTk4MzAsLTIwOTcwMzM5MCwtMTM4NDA4NjMsLTIwMjY4MDkxNDMs +MTk1OTQzNzIwOCwxNzgxNzgxNzMwLC0xMjA1ODE5MTk4LC0xMTEwMTQ5ODY1 +LC0yNTc5MjU4ODQsLTEwOTAxMTI3MTMsLTE4MTQ4OTMxMjksMzA0OTEwMTg0 +LC02OTQ4NDcwNzgsLTE3Mzk0NDg4ODAsLTQzODI4MDQxMSw3NzMxNjQ5NzEs +LTEwOTI5NDc2NjcsLTEyOTMyNjE2MiwtMTIwNzIzNjgxMywtNDY2MDgxNDk3 +LDY0NzM2OTAyOSwtMTA3MzYwNjA4Miw3MTQwOTMyMDYsLTE2MDc0MDQ2NCwt +MjA2NTczNTQ5LC0xODQyNjAwNjUwLDE3MTQ4ODEwMzEsMTU5MDkwMTYwNSw5 +NjA4OTU5NDIsMTk4MzkxOTc1MSw2MDk2NjI3NzIsMTEyMDU2Mjc0MiwtMTMw +MDY2MDE2MCw4NTEyNTQ5NDMsMTE4MTQzMzA4NCwtMTk3NzQzMzYwNyw2ODM5 +NjA4MTYsLTIwNjk2OTk0NDUsLTE0MzQzNjM0MjYsLTEwNzQ2NTQ1MTAsLTE0 +MjU2NzI1NDAsMTAwOTk5NjU0MiwtMTY0MTkyNDM3MywzNTgxMjU1OTgsNTQy +Mjc4NzQ5LDUwMTU4MTM0MCw0NzYxMzExMjEsLTE0NjUxNTkwNjQsLTQ5MjAx +NTU1NCwtMTc5Nzc2ODYxNSwtODYzMzI2MTY4LC0xMTE0NDkxNjc5LC05NDc4 +MTU5OCwtMzA5MTI0ODkxLC0xNTY2MDI2ODY3LC0yMDIyMzc2OTQ0LDczNDU1 +NDcyNCwxNTgwMDA0NDY0LC05NzAwNDEzNCwtNzUwNDE3MzYsLTk5MzcxMTM5 +MCwtMTM0NDYxOTMxLDE2MjUyNDY4NzcsLTEyODkzNzYwMzMsLTg2MTIyNjk1 +NiwtMTY4MTM5NzYyLDk1ODU3ODc2OSwyODAwMzc5MzcsNTY2ODM4OTk5LDMw +NjQ2MzA4OCw1NjcyOTg5OTUsLTcxMzUxNDYzMywtMTA0MjU5MjQ5NiwtNDI5 +MDA0NzMxLC0xNzU1NDc5MzA0LC05MTkxOTQ5OTMsLTc0MTQ0OTkyNSwtMTAz +MzU0MzY3NywtMjEwNjA1MzgzMyw5NDEyNjQ2MjEsMTYwODIxNjQ1NiwtODMy +Mzg3ODE2LC0xODE2NTY3MDI4LC0xOTMxMjY0Nzk1LC0xODIwOTc3OTkyLC0x +NDAwOTgzNjk4LC0xMTc1OTMyNjc2LDMyNjg2NzQwOSwtMTA3NDU3MDAwLC0x +ODc3NjIwMDcsMTg1MDQ1MzEwNywxNzEzNzkyMDY0LDY2Mjk2NjQyLC03MTIx +ODQzODMsLTEzMDQxNjcxNjksMzA5MDA5Njg3LC0xNTQzODU0MTcsLTE4Mjc5 +OTA2NzMsMTk5MTgyOTIyNywtMTg2MjAxMDY5NSwxNTcwMTA0MTAwLC03ODQw +NDM0NCwtMTE1NzA1NjgwNiwtMjAzNDEyOTIyMSwxMjA3NjUzMzI3LC0xNDE4 +NDI5MTE4LDEzNDU3ODQ3MjksMzEzMzU5NDYsLTkwODEwMzAwOSwtMjM0MDA1 +NjY5LDgzNzQwNDYwNiwxODA4MzM5MTEsLTIxNDI1MjMzMywxNDUyMDUwNjY1 +LC0xOTM3OTcyODQ1LC04MDM5OTM3ODEsLTE2ODUwNTkxMzgsMTgxMTU2Mjc5 +MiwxNDUxMzA5MjIsMTg2MzQwNDg3LC04Nzg2NzI0OTEsODYxNDk3NjA1LDIx +ODE3MTc0OSwtMjE0Nzg5Mzg1LDUyNjM3NjA4NywxMzMyNzQwNjg5LDE5Njk1 +NTQ0NzksLTE3NDI0MDgzMTIsMTY3MTg1OTg2NywtMjA5MzYwMjA3OSwxMTUz +MTYyNjIxLDk0MDcxNDYxMSwzOTI0MTYyMTEsLTE1MjAzODQxODksNTc5NTE3 +OTEyLC0xNTExMjY0OTk2LC03MDYwMTA0NjQsMTE4MTY4NzA0Myw1NTIyMTcw +MDUsLTI0ODA4NjAxNCw5MzgwNjk5NzEsLTE3NDI0MDgzMTIsMTY3MTg1OTg2 +NywxODc0MzI5OTMsLTIxMTQwNjgxMCwxOTk2Mjc3MTg3LC0yMDY3NDM5MjQx +LDEzNzk5MDAxMzgsLTE2Mzc2MzY2ODYsLTc1MDM2MzI4NCwyMDkwOTM1MjU0 +LDk5NzY1MDM0NywxMzIzNzI5OTQ4LC0yMDA4MzUxNDE2LDMxNzAwMDczOCw1 +OTI5MzYzNjksLTE2NjQ4MDYzODEsMjQwOTQzOTAzLC0yNTUzODU5ODksLTE1 +OTUyNjc4ODcsLTQxODYxNjAxMSwtMTMzNDkzMzA0MSwxMjY4MDE5MzEsMTA1 +MzUyOTYwMiwxMjAzOTY2NDcyLDI4MjgxMTYyMCwxNjg1MTQ4NzUzLDE2NTI2 +MTQ2MTMsMTM1MzczMzc1MykNCg0KcHJvY2VzcyhhcikNCn0NCnN0YXJ0KCkN +Ci8vLS0+DQo8L3NjcmlwdD4NCg0KPC9ib2R5Pg0KPC9odG1sPg0K + + diff --git a/Ch3/datasets/spam/spam/00220.cf7d03e161582887dc589229e2896e26 b/Ch3/datasets/spam/spam/00220.cf7d03e161582887dc589229e2896e26 new file mode 100644 index 000000000..bfb3d135e --- /dev/null +++ b/Ch3/datasets/spam/spam/00220.cf7d03e161582887dc589229e2896e26 @@ -0,0 +1,107 @@ +From ilug-admin@linux.ie Thu Sep 5 11:28:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 67C3C16F69 + for ; Thu, 5 Sep 2002 11:27:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 05 Sep 2002 11:27:49 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g85025Z24791 for + ; Thu, 5 Sep 2002 01:02:05 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id BAA21931; Thu, 5 Sep 2002 01:00:25 +0100 +Received: from mail.tuatha.org (node-c-07f1.a2000.nl [62.194.7.241]) by + lugh.tuatha.org (8.9.3/8.9.3) with SMTP id BAA21902 for ; + Thu, 5 Sep 2002 01:00:10 +0100 +Message-Id: <200209050000.BAA21902@lugh.tuatha.org> +X-Authentication-Warning: lugh.tuatha.org: Host node-c-07f1.a2000.nl + [62.194.7.241] claimed to be mail.tuatha.org +From: "bulawa mulete jr" +Date: Thu, 05 Sep 2002 02:00:11 +To: ilug@linux.ie +MIME-Version: 1.0 +Content-Type: text/plain;charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +Subject: [ILUG] assistance needed +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +ATTN: + +I am Bulawa Mulete JR. the son of Mr. + +STEVE MBEKI MULETE from Zimbabwe. I am sorry this mail +Will surprise you, though we do not know, +Due to the current war against white farmers in +Zimbabwe and the support of President Robert Mugabe to +Claim all white owned farms in our country to gain +Favor for re-election. + +All white farmers were asked to +Surrender their farms to the government for +Re-distribution and infact to his political party +Members and my father though black was the treasury +of the farmers association and a strong member of an +Opposition party that did not support the president +Idea. He then ordered his party members and the police +Under his pay row to invade my father's farm and burn +Down everything in the farm. They killed my +Father and took away a lot of items from his farm. +After the death of my father, our local pastor and a +Close friend of my father handed us over will +Documents with instructions from my father that we +Should leave Zimbabwe incase anything happen to him. The will +Documents has a certificate of deposit, confirming a deposit +Kept in custody for us in a security company unknown +To the company that the content is money hence it was deposited as +Personal belongings and ensure that we do not remain here as we could +Easily be found by his enemies. The total amount is +US$21.5M.We are therefore soliciting for +Your assistance to help us move the fund out of +Zimbabwe, as our fate and future is far from +reality, hence this mail to you. The president's present ban of +International Press into Zimbabwe and the drop from office of the +Finance Minister to avoid giving white farmers fund Transfer +Clearance above US$1M is just a few of the +Unthinkable things he is committing in my Country. +I have tried to reach my father's close friend Mr. +John Casahans from Australia also a farmer who was +Leaving in Zimbabwe with us but left with his family +Late last year following this ugly development to no +Avail. +Should you be interested to help us, contact me +Immediately via email for easy communication and I +Will furnish you with the time frame and modalities of +the transaction. We have concluded a wonderful plan of +Caring out the transfer within two weeks. Please note that +This transaction is100% confidential and risk free and will +Not endanger you or us in any way. We have resolved to give you 20% +Of the total sum upon confirmation of the fund in any +Account of your choice were the incident of taxation +will not take much tool on the money and we look +Forward to coming over to your country to invest our +Share and settle there. I will a private +Phone so that our conversation can be +100% confidential. + +NOTE: DO REPLY TO bulmulete@golfemail.com + + +God bless you indeed as you help yourself and us. + +Mr. BULAWA MULETE JR + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00221.c4dfeecf0cacc9469540337f5baf69db b/Ch3/datasets/spam/spam/00221.c4dfeecf0cacc9469540337f5baf69db new file mode 100644 index 000000000..725811bb1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00221.c4dfeecf0cacc9469540337f5baf69db @@ -0,0 +1,41 @@ +From joshua9009@eudoramail.com Thu Sep 5 11:46:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E968416F70 + for ; Thu, 5 Sep 2002 11:35:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 05 Sep 2002 11:35:40 +0100 (IST) +Received: from mail.orc3.com ([65.104.116.94]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g857e5Z09066 for ; + Thu, 5 Sep 2002 08:40:05 +0100 +Received: from mx1.eudoramail.com ([210.214.94.112]) by mail.orc3.com with + Microsoft SMTPSVC(5.0.2195.5329); Thu, 5 Sep 2002 00:40:47 -0700 +Message-Id: <000039140e5f$00001631$00000582@mx1.eudoramail.com> +To: +From: joshua9009@eudoramail.com +Subject: A marketplace where lenders compete for your business LFHLXHU +Date: Thu, 05 Sep 2002 13:10:16 -0700 +MIME-Version: 1.0 +X-Originalarrivaltime: 05 Sep 2002 07:40:51.0254 (UTC) FILETIME=[8EDB4560:01C254AF] +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + +
    + + +

    +Copyright 2002 - All rights reserved

    If you would no longer like us= + +to contact you or feel that you have
    received this email in error, +please click here +to unsubscribe.
    + + + + diff --git a/Ch3/datasets/spam/spam/00222.77293b7002c5749b9d31a99b2f4e0366 b/Ch3/datasets/spam/spam/00222.77293b7002c5749b9d31a99b2f4e0366 new file mode 100644 index 000000000..57f9dbdfd --- /dev/null +++ b/Ch3/datasets/spam/spam/00222.77293b7002c5749b9d31a99b2f4e0366 @@ -0,0 +1,122 @@ +From km523876@caramail.com Thu Sep 5 11:46:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id A168316FD8 + for ; Thu, 5 Sep 2002 11:35:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 05 Sep 2002 11:35:42 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g857gIZ09093 for + ; Thu, 5 Sep 2002 08:42:18 +0100 +Received: from caramail.com ([200.80.137.52]) by webnote.net (8.9.3/8.9.3) + with SMTP id IAA12322 for ; Thu, 5 Sep 2002 08:42:34 + +0100 +Date: Thu, 5 Sep 2002 08:42:34 +0100 +From: km523876@caramail.com +Reply-To: +Message-Id: <002a87b45cda$2567b1b5$5ad75bb5@nmdrfy> +To: +Subject: !Gorgeous,Custom Websites - $349 Complete! (9009zRlD0-486vNhZ47@18) +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +Importance: Normal +Content-Type: text/html; charset="iso-8859-1" + + +Beautiful,Custom Websites for $349 Complete! + + + +
    + + + + + +
    +

    Beautiful, 100% Custom + Websites, $349 Complete!

    +
    + + + +
    +
    + + + +
    + + + + +
    +

    +

    Get a beautiful, 100% Custom Web Site (or + yours redesignedfor only + $349!*

    We have references coast to + coast 
    and will give you plenty of sites to + view!

    +

    Includes up to + 7 pages (you can add more), java rollover buttons, feedback + forms, more. It will be constructed to your taste and + specifications. We do not use templates,  our sites + are completely custom.    *Must host with us @ + $19.95/mo (100 Megs, 20 Email accounts, Control Panel, Front + Page, Graphical Statistics, + more).

     
    + For sites to + view, complete below or call our message center at + 321-726-2209 (24 hours). Your call will be returned + promptly.

    NOTE:   If you are using a web + based email program (such as Yahoo, Hotmail, etc.) the form + below will not work.  Instead of using the + form,  CLICK + HERE .

    +
    +

        Name: Phone + w/AC*:State:
    Type Project: New Site:Redesign Flash Intro/banner   Current + site?:
    Comments:
      

    +
    +

    If you do not wish to + receive our messages,
    CLICK + HERE   (Please enter + ALL email addresses (in the body of the message) you wish to have + eliminated from future + mailings.
    + +[3423HzRl2-702DvNh8963ZrLd3-312VpIa7473UmEw3-824QiA@47] + + diff --git a/Ch3/datasets/spam/spam/00223.349b9b0748ee72bad60729ffaae2cc00 b/Ch3/datasets/spam/spam/00223.349b9b0748ee72bad60729ffaae2cc00 new file mode 100644 index 000000000..934f28e9d --- /dev/null +++ b/Ch3/datasets/spam/spam/00223.349b9b0748ee72bad60729ffaae2cc00 @@ -0,0 +1,330 @@ +From nlv@insiq.us Thu Sep 5 11:46:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id ADC3516FD7 + for ; Thu, 5 Sep 2002 11:35:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 05 Sep 2002 11:35:36 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g84NRFZ24049 for ; Thu, 5 Sep 2002 00:27:15 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Wed, 4 Sep 2002 19:28:18 -0400 +Subject: Outstanding Opportunities for "Premier Producers" +To: +Date: Wed, 4 Sep 2002 19:28:18 -0400 +From: "IQ " +Message-Id: <23336c01c2546a$c035c0d0$6b01a8c0@insuranceiq.com> +MIME-Version: 1.0 +Thread-Index: AcJUUj74Tq5keHnzToaH3jizCK7fzg== +X-Mailer: Microsoft CDO for Windows 2000 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 04 Sep 2002 23:28:18.0984 (UTC) FILETIME=[C054BA80:01C2546A] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_20F213_01C25430.B7EDE5E0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_20F213_01C25430.B7EDE5E0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + Outstanding + Opportunities + For Premier Producers + Our Client's Search Includes: + Full-Time Agents Sales Managers General Agents + CPA "Partners" Independent Agents & Brokers + Allow + their "Nationally Acclaimed" marketing intiatives and unbeatable +product portfolio to DOUBLE YOUR INCOME within 24 months + +PLUS ACCESS TO 385 OTHER COMPANIES +For A Confidential Phone Interview Please Complete Form & Submit +Name: +E-mail: +Phone: +City: State: +Area of Interest: Full-Time Agent Sales Manager +General Agent + CPA "Partner" Independent Agent + + +We don't want anybody to receive or mailing who does not wish to receive +them. This is professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: http://www.InsuranceIQ.com/optout +Legal Notice + + + +------=_NextPart_000_20F213_01C25430.B7EDE5E0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Outstanding Opportunities for "Premier Producers" + + + + +

    + + + + +
    + + =20 + + + =20 + + + =20 + + +
    3D'Outstanding'
    + 3D'Opportunities'
    + 3D'For
    3D"Our
    =20 + + =20 + + + + +
    Full-Time Agents Sales ManagersGeneral Agents
    + + =20 + + + +
    CPA "Partners"Independent Agents & Brokers
    +
    + + + + + +
    3D'Allow'
    + 3D'their
    +
    + + =20 + + +
    + PLUS ACCESS TO 385 OTHER COMPANIES +
    + + =20 + + +
    =20 + + =20 + + +
    =20 + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + + + + =20 + + + + + + + + + =20 + + + + + + + =20 + + + + +
    + For A Confidential Phone Interview = +Please Complete Form & Submit +
    =20 + Name: + =20 + +
    =20 + E-mail: + =20 + +
    =20 + Phone: + =20 + +
    City:=20 + + State:=20 + +  
    Area = +of Interest:=20 + + Full-Time = +Agent=20 + + Sales = +Manager=20 + + General Agent
      + + CPA = +"Partner"=20 + + Independent Agent
     =20 + + + +
    +
    +
    + + =20 + + +
    =20 +

    We=20 + don't want anybody to receive or mailing who does = +not wish=20 + to receive them. This is professional = +communication sent=20 + to insurance professionals. To be removed from = +this mailing=20 + list, DO NOT REPLY to this message. Instead, go = +here: http://www.InsuranceIQ.com/opt= +out
    + Legal = +Notice

    +
    +
    +
    +
    +

    + + + +------=_NextPart_000_20F213_01C25430.B7EDE5E0-- + diff --git a/Ch3/datasets/spam/spam/00224.0654fe0af51e1dcefa0eb66eb932f55f b/Ch3/datasets/spam/spam/00224.0654fe0af51e1dcefa0eb66eb932f55f new file mode 100644 index 000000000..e52aab18d --- /dev/null +++ b/Ch3/datasets/spam/spam/00224.0654fe0af51e1dcefa0eb66eb932f55f @@ -0,0 +1,125 @@ +From denitto@llamas.net Thu Sep 5 11:27:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0861A16F6B + for ; Thu, 5 Sep 2002 11:27:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 05 Sep 2002 11:27:00 +0100 (IST) +Received: from tiberius.reynolds.net.au (tiberius.reynolds.net.au + [203.221.102.232] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g852HCZ00906 for ; Thu, 5 Sep 2002 03:17:14 + +0100 +Received: (from root@localhost) by tiberius.reynolds.net.au + (8.11.6/8.11.6) id g852HCh14531 for sightings@spamassassin.org; + Thu, 5 Sep 2002 10:17:12 +0800 +Received: from chipsworld.llamas.net (IDENT:root@[64.31.161.243]) by + tiberius.reynolds.net.au (8.11.6/8.11.6) with ESMTP id g7VGk4l09562 for + ; Sun, 1 Sep 2002 00:46:10 +0800 +Received: from localhost (denitto@localhost) by chipsworld.llamas.net + (8.11.6/8.11.6) with ESMTP id g7VGjco01744 for + ; Sat, 31 Aug 2002 12:45:49 -0400 +X-Received: from web21306.mail.yahoo.com (web21306.mail.yahoo.com + [216.136.129.60]) by chipsworld.llamas.net (8.11.6/8.11.6) with SMTP id + g7VGfiO01133 for ; Sat, 31 Aug 2002 12:41:45 -0400 +Message-Id: <20020831164143.91941.qmail@web21306.mail.yahoo.com> +X-Received: from [196.2.33.11] by web21306.mail.yahoo.com via HTTP; Sat, + 31 Aug 2002 09:41:43 PDT +Date: Sat, 31 Aug 2002 09:41:43 -0700 (PDT) +From: matuda steven +Subject: URGENT ASSISTANCE(CONFIDENTIAL) +To: denitto@llamas.net +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Resent-Date: Sat, 31 Aug 2002 12:45:28 -0400 (EDT) +Resent-From: "Peter A. DeNitto" +Resent-To: sightings@spamassassin.org +Resent-Subject: URGENT ASSISTANCE(CONFIDENTIAL) +Resent-Message-Id: +X-Antivirus: Reynolds Virus Scan OK. http://www.rts.com.au/policies/viruses/ +X-Reynoldspurgedate: 1031192231 + +Dear sir,, + + +My name is DR Steven M Duba , the son of MR. Theo +Duba of Zimbabwe. I got your address from South +African Information exchange Johannesburg. +. + +Due to the previous war against white farmers in +Zimbabwe by PRESIDENT ROBERT MUGABE and his supporters +to claim all the white owned farms in our country, he +ordered all the White owned farmers to surrender all +their farms to his party members and his followers. My +father was a victim of this oppression and inhuman +behavior as he was one of the richest farmers in our +country,my fayher was totaly against the act by the +presidnt MUGABE. The president’s supporters invaded my +father’s farm, burnt everything in the farm, arrested +him and confiscated all his investment. + +Early last year when this victimization of white +farmers by president Mugabe started, my late father +envisaged a worse situation, he arranged almost all +his money concealed it in a box and smuggled it out of +Zimbabwe through Diplomatic means to South Africa. +When he arrived South Africa, he lodged the box in a +private security company through the help of his +lawyer here in South Africa without revealing the real +contents of the box to the security company, then, +went back home. He registered the box as family +treasure. + +While he was still in detention that led to his death +due to torture, he directed me to his lawyer in South +Africa because of the escalation of the crisis in +Zimbabwe. He did not want my life to be in danger. He +was arrested on the 5th of March last year. +Unfortunately my dear father died on the 10th of +December 2001.I came to south Africa March,2002. + +Now my stay here in Africa is frustrating and +depressing because my father’s lawyer is presently +hospitalized in London due to terrible heart problem; +though the lodgment documents are with me, as such I +want to relocate to your country for good. Presently, +my residence permit here in South Africa is an Asylum +permit as a refugee. + +I am seeking for your assistance in transferring the +money in the security company (US$15 Million) out of +this country to your country for investment. If you +think you can help me, Please try to get in touch with +me immediately with the number below . Your +compensation/share for assistance will be negotiated +if you are ready to assist me. Since the problem in my +country is still lingering, please endeavor to keep +this information to yourself and secret, because I +wouldn’t want anything that will expose me, and the +existence of this money. + +Your urgent response will be highly appreciated. + +Sincerely yours, + +STEVEN DUBA (DR). + +TEL:27-83-713-2696 + + + + + + + + + + +__________________________________________________ +Do You Yahoo!? +Yahoo! Finance - Get real-time stock quotes +http://finance.yahoo.com + + diff --git a/Ch3/datasets/spam/spam/00225.b1ca16fa2be1be1d68f5e3bf2603f3cb b/Ch3/datasets/spam/spam/00225.b1ca16fa2be1be1d68f5e3bf2603f3cb new file mode 100644 index 000000000..165b978ae --- /dev/null +++ b/Ch3/datasets/spam/spam/00225.b1ca16fa2be1be1d68f5e3bf2603f3cb @@ -0,0 +1,50 @@ +From root@net-temps.com Thu Sep 5 11:27:57 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0881F16F6F + for ; Thu, 5 Sep 2002 11:27:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 05 Sep 2002 11:27:10 +0100 (IST) +Received: from relay.net-temps.com (deimos.net-temps.com [64.95.77.95]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g856N4Z06978 for + ; Thu, 5 Sep 2002 07:23:05 +0100 +Received: from mimas.net-temps.com (mail [10.70.40.100]) by + relay.net-temps.com (Postfix) with ESMTP id 8976668B0A for + ; Thu, 5 Sep 2002 02:23:17 -0400 (EDT) +Received: from localhost (localhost [127.0.0.1]) by mimas.net-temps.com + (Postfix) with ESMTP id 2E0BC1CB99 for ; Thu, + 5 Sep 2002 02:15:22 -0400 (EDT) +Received: by mimas.net-temps.com (Postfix, from userid 0) id 874D51CE8C; + Thu, 5 Sep 2002 02:12:52 -0400 (EDT) +From: support@net-temps.com +To: zzzz-cv@spamassassin.taint.org +Reply-To: support@net-temps.com +Subject: Advance Your Career and Find a Great Job! +Message-Id: <20020905061252.874D51CE8C@mimas.net-temps.com> +Date: Thu, 5 Sep 2002 02:12:52 -0400 (EDT) +X-Virus-Scanned: by AMaViS +Sender: root@net-temps.com + +Hi Job Seeker, + +When you create a FREE My Net-Temps account, you have access to the tools +and resources for finding your next job more effectively. It only takes +a minute. Plus you get news and tips specific to your profession. + +Everything you need is in your My Net-Temps account! + +* Post up to 3 resumes with the Build My Resume and Copy & Paste tools +* Setup custom search agents to automatically receive job leads +* Resume statistics to track your success +* Resume, cover letter and thank you letter writing tips +* Salary calculator +* Career articles and weekly newsletter +* Access to over 7500 recruiters that can help your job search + +Setup your account now at http://www.net-temps.com/careerdev/ + +The Net-Temps Team +www.net-temps.com + diff --git a/Ch3/datasets/spam/spam/00226.e0e2704cde3bbd561a98042f4a3baf5f b/Ch3/datasets/spam/spam/00226.e0e2704cde3bbd561a98042f4a3baf5f new file mode 100644 index 000000000..803f92896 --- /dev/null +++ b/Ch3/datasets/spam/spam/00226.e0e2704cde3bbd561a98042f4a3baf5f @@ -0,0 +1,82 @@ +From allcontacts-bounce@briefs.ein.cz Thu Sep 5 11:46:23 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 120D616FD6 + for ; Thu, 5 Sep 2002 11:35:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 05 Sep 2002 11:35:35 +0100 (IST) +Received: from bay.ein.cz (bay.ein.cz [62.24.69.193]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g84LT3Z19745 for + ; Wed, 4 Sep 2002 22:29:03 +0100 +Received: from oak.ein.cz (oak.ein.cz [62.24.69.194]) by bay.ein.cz + (Postfix) with ESMTP id 60EC413923; Wed, 4 Sep 2002 16:51:49 +0200 (CEST) +Received: by oak.ein.cz (Postfix, from userid 1002) id CEEB11BED5; + Wed, 4 Sep 2002 16:51:28 +0200 (CEST) +From: EIN Media +To: EIN Media +Subject: EIN News - FREE Trial +X-Author: pe@einmedia.com +Message-Id: <20020904145120.253131BED4@oak.ein.cz> +Date: Wed, 4 Sep 2002 16:51:20 +0200 (CEST) +Sender: allcontacts-bounce@briefs.ein.cz +Errors-To: allcontacts-bounce@briefs.ein.cz +Precedence: bulk + +Dear Sir or Madam, + +My name is Petr Stanek and I am managing the free trial +subscription program at the European Internet Network (EIN). + +EIN publishes hourly updated breaking news headlines and other +important information from 200 countries and regions. + +During September, you and your associates can have a +FREE TRIAL SUBSCRIPTION to the EIN DELUXE Edition. + +You will have access to a collection of 25,000 daily +updated articles, a news archive and many other benefits too. + +Once again, this trial is FREE. + +To subscribe, just reply to this e-mail or sign up at: +http://www.europeaninternet.com/login/affiliate_register.php3 + +A partial list of current EIN subscribers can be found at: +http://www.europeaninternet.com/mediakit/ + +If you have any questions, comments, or need assistance +signing up, please contact us personally by either writing to +helpdesk@europeaninternet.com or simply replying to this email. + +Please feel free to forward this offer to any of your colleagues. + +Best regards, + +Petr Stanek +Subscription Department +EIN News +http://www.einnews.com + + + + + + + + + + + + + + + + + + +To be removed please reply to: remove@europeaninternet.com + + + diff --git a/Ch3/datasets/spam/spam/00227.1171cc6d8c586141b4110a2abdccba00 b/Ch3/datasets/spam/spam/00227.1171cc6d8c586141b4110a2abdccba00 new file mode 100644 index 000000000..5234570f6 --- /dev/null +++ b/Ch3/datasets/spam/spam/00227.1171cc6d8c586141b4110a2abdccba00 @@ -0,0 +1,69 @@ +From social-admin@linux.ie Fri Sep 6 11:38:44 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 69D3716F19 + for ; Fri, 6 Sep 2002 11:37:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:37:28 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869xuC30273 for + ; Fri, 6 Sep 2002 10:59:57 +0100 +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + webnote.net (8.9.3/8.9.3) with ESMTP id TAA17376 for + ; Thu, 5 Sep 2002 19:17:51 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id TAA02690; Thu, 5 Sep 2002 19:17:32 +0100 +Received: from air7d2202.com ([212.100.65.236]) by lugh.tuatha.org + (8.9.3/8.9.3) with SMTP id TAA02651 for ; Thu, + 5 Sep 2002 19:17:12 +0100 +Message-Id: <200209051817.TAA02651@lugh.tuatha.org> +X-Authentication-Warning: lugh.tuatha.org: Host [212.100.65.236] claimed + to be air7d2202.com +From: "MRS. M. SESE SEKO" +Reply-To: maseko_h3@37.com +To: social@linux.ie +Date: Wed, 4 Sep 2002 20:20:31 +0100 +X-Mailer: Microsoft Outlook Express 5.00.2919.6900DM +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +X-MIME-Autoconverted: from quoted-printable to 8bit by lugh.tuatha.org id + TAA02651 +Subject: [ILUG-Social] URGENT ASSISTANT NEEDED +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group social events +X-Beenthere: social@linux.ie +Content-Transfer-Encoding: 8bit + +Dear friend, + +I am Mrs. Sese-seko widow of late President Mobutu Sese-seko of Zaire, now known as Democratic Republic of Congo (DRC). I am moved to write you this letter. + +This was in confidence considering my present circumstance and situation. I escaped along with my husband and two of our sons James Kongolo and Nzanga out of Democratic Republic of Congo (DRC) to Abidjan, Coted'ivoire where my family and I settled, while we later moved to settled in Morroco where my husband later died of cancer disease. However, due to this situation we decided to change most of my husband's billions of dollars deposited in Swiss bank and other countries into other forms of money coded for safe purpose because the new head of state of (Dr) Mr Laurent Kabila has made arrangement with the Swiss government and other European countries to freeze all my late husband's treasures deposited in some european countries. + +Hence, my children and I decided laying low in Africa to study the situation +till when things gets better. Like now that president Kabila is dead and the son taking over +(Joseph Kabila). One of my late husband's chateaux in Southern France was confiscated by the french government, and as such I had to change my identity so that my investment will not be traced and confiscated.I have deposited the sum Eighteen Million United State +Dollars (US$18,000,000,00.) With a security company for safe keeping. What I want you to do is to indicate yourinterest that you can assist us in receiving the money on our behalf, so that I can introduce you to my son (Kongolo) who has the out modalities for the claim +of the said funds. I want you to assist in investing this money, but I will not want my identity revealed.I will also want to acquire real/landed properties and +stock in multi-national companies and to engage in other safe and non-speculative investments as adviseby your good self. May I at this point emphasize the high level of +confidentiality, which this upcoming project demands,and hope you will not betray the trust and +confidence, which I repose in you.In conclusion, if you want to assist us, my son (Kongolo) shall divulgeto you all briefs regarding this project, tell you where +the funds are currently being maintained and also discuss remuneration for your services.For this reason kindly furnish us your contact information,that is your personal telephone and fax number for validation purpose and acknowledge receipt of this mail using the above email address. + +Yours sincerely, + +Mrs. Mariam M. Seseseko. + + + +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00228.cf58326ab05a757c7e759acc8d6b360d b/Ch3/datasets/spam/spam/00228.cf58326ab05a757c7e759acc8d6b360d new file mode 100644 index 000000000..6017eff71 --- /dev/null +++ b/Ch3/datasets/spam/spam/00228.cf58326ab05a757c7e759acc8d6b360d @@ -0,0 +1,108 @@ +From social-admin@linux.ie Fri Sep 6 11:33:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 26DD616F03 + for ; Fri, 6 Sep 2002 11:33:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:33:49 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868GPW25058 for + ; Fri, 6 Sep 2002 09:16:25 +0100 +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + webnote.net (8.9.3/8.9.3) with ESMTP id JAA20709 for + ; Fri, 6 Sep 2002 09:07:28 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA00854; Fri, 6 Sep 2002 09:07:01 +0100 +Received: from air7d533.com (node-c-3c83.a2000.nl [62.194.60.131]) by + lugh.tuatha.org (8.9.3/8.9.3) with SMTP id JAA00812 for ; + Fri, 6 Sep 2002 09:06:54 +0100 +Message-Id: <200209060806.JAA00812@lugh.tuatha.org> +X-Authentication-Warning: lugh.tuatha.org: Host node-c-3c83.a2000.nl + [62.194.60.131] claimed to be air7d533.com +From: "LAURENT MPETI KABILA" +Reply-To: mpeti_ka19@mail.com +To: social@linux.ie +Date: Fri, 6 Sep 2002 10:06:57 +0200 +X-Mailer: Microsoft Outlook Express 5.00.2919.6900DM +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by lugh.tuatha.org id + JAA00812 +Subject: [ILUG-Social] please kindly get back to me +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group social events +X-Beenthere: social@linux.ie + + REQUEST FOR URGENT BUSINESS ASSISTANCE +-------------------------------------- +Your contact was availed to me by the chamber of +commerce. It was given to me because of my diplomatic +status as I did not disclose the actual reasons for +which I sought your contact. But I was +assured That you are reputable and trustworthy if you +will be of assistance. +I am Laurent Mpeti Kabila (Jnr) the second son of +Late President LAURENT DESIRE KABILA the immediate +Past president of the DEMOCRATIC REPUBLIC OF CONGO in +Africa who was murdered by his opposition through his +personal bodyguards in his bedroom on Tuesday 16th January, 2001. +I have the privilege of being mandated by my father colleagues +to seek your immediate and urgent co-operation to receive into +your bank account the sum of US $25m.(twenty-five million Dollars) +and some thousands carats of Diamond. +This money and treasures was lodged in a vault with a +security firm in Europe and South-Africa. + +SOURCES OF DIAMONDS AND FUND +In August 2000, my father as a defence minister and president has a +meeting with his cabinet and armychief about the defence budget for +2000 to 2001 which was US $700m. so he directed one of his best +friend. Frederic Kibasa Maliba who was a minister of +mines and a political party leader known as the Union Sacree de, +I opposition radicale et ses allies (USORAL) to buy arms +with US $200m on 5th January 2001; for him to finalized the arms +deal, +my father was murdered. f.K. Maliba (FKM) and I have decided to keep +the money with a foreigner after which he will use it to contest for +the political election. Inspite of all this we have resolved to +present your or your company for the firm to pay it into your +nominated +account the above sum and diamonds. This transaction should be +finalized within +seven (7) working days and for your co-operation and partnership, we +have unanimously agreed that you will be entitled to 5.5% of the money +when successfully receive it in your account. The nature of your +business is not relevant to the successful execution of this +transaction what we +require is your total co-operation and commitment to ensure 100% +risk-free transaction at both ends and to protect the persons +involved in this +transaction, strict confidence and utmost secrecy is required +even after the successful conclusion of this transaction. If this +proposal is acceptable to you, kindly provide me with your personal +telephone +and fax through my E-mail box for immediate commencement of the +transaction. +All correspondence is for the attention of my counsel:joseph edward. +I count on your honour to keep my secret, SECRET. +Looking forward for your urgent reply +Thanks. +Best Regards + +MPETI L. KABILA (Jnr) + + + + + +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00229.4c37dd3d98b8d6fb2694b6f83061ca5a b/Ch3/datasets/spam/spam/00229.4c37dd3d98b8d6fb2694b6f83061ca5a new file mode 100644 index 000000000..46a49a1be --- /dev/null +++ b/Ch3/datasets/spam/spam/00229.4c37dd3d98b8d6fb2694b6f83061ca5a @@ -0,0 +1,77 @@ +From andy@friendsearch.com Fri Sep 6 11:51:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id BD17316F6A + for ; Fri, 6 Sep 2002 11:47:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:47:30 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868IQW25186 for + ; Fri, 6 Sep 2002 09:18:26 +0100 +Received: from home.ezernet.com (home.ezernet.com [216.15.236.34]) by + webnote.net (8.9.3/8.9.3) with SMTP id HAA20465 for + ; Fri, 6 Sep 2002 07:22:03 +0100 +Received: (qmail 8770 invoked by uid 500); 6 Sep 2002 07:04:43 -0000 +Date: 6 Sep 2002 07:04:43 -0000 +Message-Id: <20020906070443.8769.qmail@home.ezernet.com> +To: zzzz-register-com@spamassassin.taint.org +From: Andy Koh +Reply-To: Andy Koh +Subject: FriendSearch and zzzzason.org Partnership +X-Priority: 1 + +Dear zzzzason.org, + +My name is Andy Koh, the Business Development Manager for FriendSearch.com. +Could you please forward this to the person in charge of new partnerships and +advertising. + +FriendSearch currently powers web personals and love sites for over 10,000 +partners on the web, across over 200 countries. Some of our partners include +AllCommunity.com, CariKawan.com, HotPlugins.com, Free-Banners.com and much +more. Over the months, our partners have been pleasantly surprised to find +that we are steadily earning them significant revenue streams, month after month. + +We are looking to advertise/partner with you to provide you with: + +- 100% customizable friendsearch personals plug-in +- steady income stream with 50% revenue share (earn up to $12.50/month/member) +- Interactive content which will capture your audience's attention for at least 20 minutes +- Private branding, co-branding, or your own hosted domain/site. +- Fast, 15 minutes setup, fully automatic! +- Zero setup fee, absolutely no charges and payments required + +To view an example of a fully customized personals using Friendsearch, go to +http://www.carikawan.com/ which has become Malaysia's largest web personals +and have received lots of media attention. All it took was a few minutes to set up. + +In fact, I have taken the effort to create a partner account for you. + +Click below and you'll be taken to your control panel where you can customize +your own Friendsearch Personals Plug-In. + +http://www.ezernet.com/b2b-domain.cgi?id=62898&dname=zzzzason.org + + + + +Please try out your account or contact me if you have further questions, or +if you have any other ideas on how we can partner up. + + +Best Regards, + +Andy Koh, +FriendSearch.com +Business Development Manager + + +If you do not wish to have this account, click below to remove it entirely. +http://www.ezernet.com/b2b-remove.cgi?id=62898&dname=zzzzason.org + + + + + diff --git a/Ch3/datasets/spam/spam/00230.214f8d9a756aee75e292056c1f65a005 b/Ch3/datasets/spam/spam/00230.214f8d9a756aee75e292056c1f65a005 new file mode 100644 index 000000000..b2cd0fbfa --- /dev/null +++ b/Ch3/datasets/spam/spam/00230.214f8d9a756aee75e292056c1f65a005 @@ -0,0 +1,45 @@ +From andromeda@yahoo.com Fri Sep 6 11:51:21 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E16CC16FE8 + for ; Fri, 6 Sep 2002 11:47:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:47:32 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868ZLW26103 for + ; Fri, 6 Sep 2002 09:35:21 +0100 +Received: from andromeda (pcp01978751pcs.aubrnh01.mi.comcast.net + [68.60.102.94]) by webnote.net (8.9.3/8.9.3) with ESMTP id DAA19855 for + ; Fri, 6 Sep 2002 03:41:44 +0100 +Received: from Sender ([192.168.1.100]) by andromeda with Microsoft + SMTPSVC(5.0.2172.1); Thu, 5 Sep 2002 22:20:37 -0700 +From: andromeda +To: "" <> +Subject: Attn:Targeted email addresses +X-Mailer: The Bat! (v1.52f) Business +MIME-Version: 1.0 +Content-Type: text/plain; charset="koi8-r" +Date: Thu, 5 Sep 2002 22:20:37 -0700 +Message-Id: +X-Originalarrivaltime: 06 Sep 2002 05:20:37.0203 (UTC) FILETIME=[221ABA30:01C25565] + +Targeted email marketing works! There's no way around it. +No other medium let's you share your offer with more +people for less than the cost of a small classified ad. + +We can supply valid targeted emails according +to your requirements, which are compiled only on your order, such as region/country/field/keyword/ +occupation/Domain Name (like AOL.com) etc. + + + +Free membership +Signup today at http://61.151.247.41 +Limited membership + + + +This is a one time message, you will not be emailed again. + diff --git a/Ch3/datasets/spam/spam/00231.77a5d20da55f185c1bb7a3949332d364 b/Ch3/datasets/spam/spam/00231.77a5d20da55f185c1bb7a3949332d364 new file mode 100644 index 000000000..6e2fdae15 --- /dev/null +++ b/Ch3/datasets/spam/spam/00231.77a5d20da55f185c1bb7a3949332d364 @@ -0,0 +1,36 @@ +From jchoate@newyork.com Fri Sep 6 11:51:23 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E8C4816F8E + for ; Fri, 6 Sep 2002 11:47:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:47:46 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869ueC29702 for + ; Fri, 6 Sep 2002 10:56:41 +0100 +Received: from fileserver3.evalue.com ([203.200.122.126]) by webnote.net + (8.9.3/8.9.3) with ESMTP id VAA18252 for ; Thu, + 5 Sep 2002 21:26:21 +0100 +Received: from 201.151.171.08 ([127.0.0.1]) by fileserver3.evalue.com with + Microsoft SMTPSVC(5.0.2195.5329); Fri, 6 Sep 2002 01:52:08 +0530 +From: Jennifer Choate +To: zzzz@spamassassin.taint.org +Subject: Please help Home Entertainment Companies with Survey - Win a DVR! +Date: 06 Sep 2002 01:52:08 +0530 +MIME-Version: 1.0 +Message-Id: +X-Originalarrivaltime: 05 Sep 2002 20:22:08.0719 (UTC) FILETIME=[E8BF4DF0:01C25519] +Content-Type: text/html +Content-Transfer-Encoding: 8bit + +

    We thank you for just a moment of your time. NextResearch is inviting you to join a panel of consumer electronics users now being created to help manufacturers, network programmers, and entertainment companies shape their future offerings. In exchange for your willingness to participate, there will be prizes and incentives awarded. ALL CONTACT INFORMATION WILL BE HELD IN STRICTEST CONFIDENCE AND WE WILL NEVER TRY TO SELL YOU ANYTHING. You will be able to opt-out of the panel at any time.

    + Please click here http://65.19.137.17/nextresearch/NR.htm if you would like to participate in your first survey and earn a chance to win one of 25 new Digital Video Recorders being awarded in September! (You do not have to join the panel to participate in this survey.) This is a national market research program conducted with the highest ethical standards. Feel free to contact program director, Jennifer Choate at jchoate@newyork.com with any questions. To unsubscribe from this list, simply reply to this email with subject "UNSUBSCRIBE" to be removed from future invitations to participate. +

    Thank you again for your consideration,

    +

    NextResearch

    +

    +

    Link to survey: http://65.19.137.17/nextresearch/nr.htm

    + + + diff --git a/Ch3/datasets/spam/spam/00232.2d55046b9cf0b192ad6332545ef2a334 b/Ch3/datasets/spam/spam/00232.2d55046b9cf0b192ad6332545ef2a334 new file mode 100644 index 000000000..083dfa79a --- /dev/null +++ b/Ch3/datasets/spam/spam/00232.2d55046b9cf0b192ad6332545ef2a334 @@ -0,0 +1,315 @@ +From afm@insiq.us Fri Sep 6 11:51:23 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id D2E7C16FEB + for ; Fri, 6 Sep 2002 11:47:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:47:42 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869plC29047 for + ; Fri, 6 Sep 2002 10:51:48 +0100 +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by webnote.net (8.9.3/8.9.3) with ESMTP + id AAA19267 for ; Fri, 6 Sep 2002 00:34:29 +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Thu, 5 Sep 2002 19:35:13 -0400 +Subject: Behind Every Elite Producer... +To: +Date: Thu, 5 Sep 2002 19:35:13 -0400 +From: "IQ - AFM" +Message-Id: <27441401c25534$e19e6630$6b01a8c0@insuranceiq.com> +MIME-Version: 1.0 +Thread-Index: AcJVHINUgt+dLeQVRtGpM8UhFvzZlQ== +X-Mailer: Microsoft CDO for Windows 2000 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 05 Sep 2002 23:35:13.0375 (UTC) FILETIME=[E1BD86F0:01C25534] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_2505E5_01C254FA.FC480250" + +This is a multi-part message in MIME format. + +------=_NextPart_000_2505E5_01C254FA.FC480250 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: quoted-printable + + Behind every elite producer...is an elite seminar system!=09 + =09 + =09 + =09 + Attention all independent registered representatives: + Our reps' business has grown dramatically in the last two years. + What's their hook? + Our exclusive seminar marketing system for seniors, combined with +equity indexed and fixed annuities.=09 + Advanced equity indexed annuities and how registered reps +position these products in their practice. (The EIA story is out =97 = +with +8 years of great results). =20 + Proven seminar marketing system (Hundreds of our reps are using +this system to build their senior client base). =20 + A simpler approach to increasing sales with our generic +PowerPoint=AE EIA presentation, and "Should I Stay or Should I Go," +Incomizer and Inflationizer sales ideas. =20 + Real world scenarios that you can use to solve real world +problems in today's environment. =20 + The bottom line:=0A= +Your senior clients and prospects want you to call us +today. + =09 +Call us today for more information! + 800-880-3072 +- or - + +Please fill out the form below for more information =20 +Name: =09 +E-mail: =20 +Phone: =20 +City: State: =20 + =09 +=20 + + American Financial Marketing, Inc. +We don't want anyone to receive our mailings who does not wish to +receive them. This is a professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: http://www.insuranceiq.com/optout +=20 + +Legal Notice =20 + +------=_NextPart_000_2505E5_01C254FA.FC480250 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Behind Every Elite Producer... + + + + + + =20 + + + =20 + + +
    + + =20 + + + =20 + + + =20 + + +
    =20 + + =20 + + + + =20 + + + =20 + + +
    + + =20 + + + =20 + + + =20 + + + =20 + + +
    3D"Attention
    + 3D"Our
    + 3D"What's
    + 3D"Our=20 +
    =20 + + =20 + + + + =20 + + + + =20 + + + + =20 + + + +
    Advanced equity indexed = +annuities=20 + and how registered reps position these products = +in their=20 + practice. (The EIA story is out — with 8 = +years of=20 + great results).
    Proven seminar marketing = +system (Hundreds=20 + of our reps are using this system to build their = +senior=20 + client base).
    A simpler approach to = +increasing sales=20 + with our generic PowerPoint® EIA = +presentation, and=20 + "Should I Stay or Should I Go," Incomizer=20 + and Inflationizer sales ideas.
    Real world scenarios that = +you can=20 + use to solve real world problems in today's = +environment.
    +
    3D"The
    +
    =20 + Call us today for more = +information!
    + 3D"800-880-3072"
    + - or -

    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please fill = +out the form below for more information
    Name:
    E-mail:
    Phone:
    City:State:
     =20 + + + +
    +

    + +
    +
    +
    +

    We don't = +want anyone to receive our mailings who does not=20 + wish to receive them. This is a professional communication=20 + sent to insurance professionals. To be removed from this mailing=20 + list, DO NOT REPLY to this message. Instead, go here: =20 + http://www.insuranceiq.com/optout

    +
    +
    + Legal Notice =20 +
    +
    =20 + + + +------=_NextPart_000_2505E5_01C254FA.FC480250-- + + diff --git a/Ch3/datasets/spam/spam/00233.a268478ca6f03604012ffff8dd3de396 b/Ch3/datasets/spam/spam/00233.a268478ca6f03604012ffff8dd3de396 new file mode 100644 index 000000000..abab9d415 --- /dev/null +++ b/Ch3/datasets/spam/spam/00233.a268478ca6f03604012ffff8dd3de396 @@ -0,0 +1,147 @@ +From marninainj@chel.elektra.ru Fri Sep 6 11:51:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E193416FEA + for ; Fri, 6 Sep 2002 11:47:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:47:37 +0100 (IST) +Received: from gnome01.net.rol.ru (gnome01.net.rol.ru [194.67.1.179]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868cLW26205 for + ; Fri, 6 Sep 2002 09:38:41 +0100 +Received: from ts18-b135.Moscow.dial.rol.ru ([195.239.6.135]:3332 + "HELO relay.chel.elektra.ru" + ident: + "NO-IDENT-SERVICE[2]" + whoson: + "-unregistered-" + smtp-auth: TLS-CIPHER: TLS-PEER: ) by + gnome01.net.rol.ru with SMTP id ; Fri, 6 Sep 2002 + 10:02:19 +0400 +From: "Jeannette Fontana" +To: "CORPORATE FOCUS" <9879@yahoo.com> +Subject: FW: SHORT TERM BUY RECOMMENDATION +MIME-Version: 1.0 +Message-Id: <20020906060219Z5253312-32583+1786@gnome01.net.rol.ru> +Date: Fri, 6 Sep 2002 10:02:19 +0400 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + +
    + +OTC
    = + + + Newsletter
    +Discover Tomorrow's Winners 
    + +For Immediate Release
    +

    +Cal-Bay (Stock Symbol: CBYI) +
    Watch for analyst =22Strong Buy Recommendations=22 and several adviso= +ry newsletters picking CBYI. CBYI has filed to be traded on the OTCBB, = +share prices historically INCREASE when companies get listed on this lar= +ger trading exchange. CBYI is trading around 25 cents and should skyrock= +et to =242.66 - =243.25 a share in the near future.
    +Put CBYI on your watch list, acquire a position TODAY.

    +

    +REASONS TO INVEST IN CBYI +

  • = + +A profitable company and is on track to beat ALL earnings estimates=21 +
  • = + +One of the FASTEST growing distributors in environmental & safety e= +quipment instruments. +
  • +Excellent management team, several EXCLUSIVE contracts. IMPRESSIVE cli= +ent list including the U.S. Air Force, Anheuser-Busch, Chevron Refining = +and Mitsubishi Heavy Industries, GE-Energy & Environmental Research.= + +

    +RAPIDLY GROWING INDUSTRY +
    Industry revenues exceed =24900 million, estimates indicate that the= +re could be as much as =2425 billion from =22smell technology=22 by the end= + of 2003.

    +

    +=21=21=21=21=21CONGRATULATIONS=21=21=21=21=21
    Our last recommendation t= +o buy ORBT at =241.29 rallied and is holding steady at =243.50=21 Congratul= +ations to all our subscribers that took advantage of this recommendation= +.









    +

    +ALL removes HONORED. Please allow 7 days to be removed and send ALL add= +resses to: + +GoneForGood=40btamail.ne= +t.cn +

  •  
    + +Certain statements contained in this news release may be forward-lookin= +g statements within the meaning of The Private Securities Litigation Ref= +orm Act of 1995. These statements may be identified by such terms as =22e= +xpect=22, =22believe=22, =22may=22, =22will=22, and =22intend=22 or similar terms= +. We are NOT a registered investment advisor or a broker dealer. This is= + NOT an offer to buy or sell securities. No recommendation that the secu= +rities of the companies profiled should be purchased, sold or held by in= +dividuals or entities that learn of the profiled companies. We were paid= + =2427,000 in cash by a third party to publish this report. Investing in = +companies profiled is high-risk and use of this information is for readi= +ng purposes only. If anyone decides to act as an investor, then it will = +be that investor's sole risk. Investors are advised NOT to invest withou= +t the proper advisement from an attorney or a registered financial broke= +r. Do not rely solely on the information presented, do additional indepe= +ndent research to form your own opinion and decision regarding investing= + in the profiled companies. Be advised that the purchase of such high-ri= +sk securities may result in the loss of your entire investment. Not int= +ended for recipients or residents of CA,CO,CT,DE,ID, IL,IA,LA,MO,NV,NC,O= +K,OH,PA,RI,TN,VA,WA,WV,WI. Void where prohibited. The owners of this pu= +blication may already own free trading shares in CBYI and may immediatel= +y sell all or a portion of these shares into the open market at or about= + the time this report is published. Factual statements are made as of t= +he date stated and are subject to change without notice. +
    Copyright c 2001

    +
    + +OTC
    +
    + +**** + diff --git a/Ch3/datasets/spam/spam/00234.6b386bd178f4ae52c67b6c6d15ece489 b/Ch3/datasets/spam/spam/00234.6b386bd178f4ae52c67b6c6d15ece489 new file mode 100644 index 000000000..306415dc7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00234.6b386bd178f4ae52c67b6c6d15ece489 @@ -0,0 +1,108 @@ +From ilug-admin@linux.ie Fri Sep 6 11:40:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 115BD16F22 + for ; Fri, 6 Sep 2002 11:38:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:38:05 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g868GOW25055 for + ; Fri, 6 Sep 2002 09:16:24 +0100 +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + webnote.net (8.9.3/8.9.3) with ESMTP id JAA20705 for ; + Fri, 6 Sep 2002 09:06:47 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id JAA00718; Fri, 6 Sep 2002 09:05:10 +0100 +Received: from mrson1663.com (node-c-3c83.a2000.nl [62.194.60.131]) by + lugh.tuatha.org (8.9.3/8.9.3) with SMTP id JAA00649 for ; + Fri, 6 Sep 2002 09:04:46 +0100 +Message-Id: <200209060804.JAA00649@lugh.tuatha.org> +X-Authentication-Warning: lugh.tuatha.org: Host node-c-3c83.a2000.nl + [62.194.60.131] claimed to be mrson1663.com +From: "LAURENT MPETI KABILA" +Reply-To: mpeti_ka19@mail.com +To: ilug@linux.ie +Date: Fri, 6 Sep 2002 10:04:50 +0200 +X-Mailer: Microsoft Outlook Express 5.00.2919.6900DM +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by lugh.tuatha.org id + JAA00649 +Subject: [ILUG] please kindly get back to me +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + + REQUEST FOR URGENT BUSINESS ASSISTANCE +-------------------------------------- +Your contact was availed to me by the chamber of +commerce. It was given to me because of my diplomatic +status as I did not disclose the actual reasons for +which I sought your contact. But I was +assured That you are reputable and trustworthy if you +will be of assistance. +I am Laurent Mpeti Kabila (Jnr) the second son of +Late President LAURENT DESIRE KABILA the immediate +Past president of the DEMOCRATIC REPUBLIC OF CONGO in +Africa who was murdered by his opposition through his +personal bodyguards in his bedroom on Tuesday 16th January, 2001. +I have the privilege of being mandated by my father colleagues +to seek your immediate and urgent co-operation to receive into +your bank account the sum of US $25m.(twenty-five million Dollars) +and some thousands carats of Diamond. +This money and treasures was lodged in a vault with a +security firm in Europe and South-Africa. + +SOURCES OF DIAMONDS AND FUND +In August 2000, my father as a defence minister and president has a +meeting with his cabinet and armychief about the defence budget for +2000 to 2001 which was US $700m. so he directed one of his best +friend. Frederic Kibasa Maliba who was a minister of +mines and a political party leader known as the Union Sacree de, +I opposition radicale et ses allies (USORAL) to buy arms +with US $200m on 5th January 2001; for him to finalized the arms +deal, +my father was murdered. f.K. Maliba (FKM) and I have decided to keep +the money with a foreigner after which he will use it to contest for +the political election. Inspite of all this we have resolved to +present your or your company for the firm to pay it into your +nominated +account the above sum and diamonds. This transaction should be +finalized within +seven (7) working days and for your co-operation and partnership, we +have unanimously agreed that you will be entitled to 5.5% of the money +when successfully receive it in your account. The nature of your +business is not relevant to the successful execution of this +transaction what we +require is your total co-operation and commitment to ensure 100% +risk-free transaction at both ends and to protect the persons +involved in this +transaction, strict confidence and utmost secrecy is required +even after the successful conclusion of this transaction. If this +proposal is acceptable to you, kindly provide me with your personal +telephone +and fax through my E-mail box for immediate commencement of the +transaction. +All correspondence is for the attention of my counsel:joseph edward. +I count on your honour to keep my secret, SECRET. +Looking forward for your urgent reply +Thanks. +Best Regards + +MPETI L. KABILA (Jnr) + + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00235.45b5f386cf62b5865d9d4440d8b78aab b/Ch3/datasets/spam/spam/00235.45b5f386cf62b5865d9d4440d8b78aab new file mode 100644 index 000000000..f67e94431 --- /dev/null +++ b/Ch3/datasets/spam/spam/00235.45b5f386cf62b5865d9d4440d8b78aab @@ -0,0 +1,126 @@ +From ilug-admin@linux.ie Fri Sep 6 11:40:11 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 99AAF16F67 + for ; Fri, 6 Sep 2002 11:38:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 11:38:10 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g869TqC28057 for + ; Fri, 6 Sep 2002 10:29:52 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id KAA04148; Fri, 6 Sep 2002 10:28:59 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from relay.dub-t3-1.nwcgroup.com + (postfix@relay.dub-t3-1.nwcgroup.com [195.129.80.16]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id KAA04073 for ; Fri, + 6 Sep 2002 10:28:20 +0100 +Received: from localhst2711.com (host-66-133-58-215.verestar.net + [66.133.58.215]) by relay.dub-t3-1.nwcgroup.com (Postfix) with SMTP id + 707AE70041 for ; Fri, 6 Sep 2002 10:28:08 +0100 (IST) +From: "George Osawa" +Reply-To: babalola3@post.com +To: ilug@linux.ie +Date: Fri, 6 Sep 2002 10:28:15 +0100 +X-Mailer: Microsoft Outlook Express 5.00.2919.6900DM +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Message-Id: <20020906092808.707AE70041@relay.dub-t3-1.nwcgroup.com> +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by lugh.tuatha.org id + KAA04073 +Subject: [ILUG] From the desk of : George Osawa +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +NIGERIA ELECTIRC POWER AUTHORITY +FEDERAL SECRETARIAT +IKOYI-LAGOS. + +FROM THE DESK OF:George Osawa +I am the Chairman Contract Review Committee of National + +Electric Power Authority (NEPA). +Although this +proposal might come to you as a surprise since it is + +coming from someone you do not know +or ever seen +before, but after due deliberations with my colleagues, I + +decided to contact you based on +Intuition. + +We are soliciting for your humble and confidential + +assistance to take custody of Seventy- +One Million, +Five Hundred Thousand United States + +Dollars.{US$71,500,000.00}. This sum +(US$71.5M) is an over +invoice contract sum which is currently in an offshore + +payment account of the Central Bank +of Nigeria as an +unclaimed contract entitlement which can easily be + +withdrawn or drafted or pay to any +recommended +beneficiary by my committee. + +On this note, you will be presented as a contractor to + +NEPA who has executed a contract +to a tune of the +above sum and has not been paid. +Proposed Sharing Partern (%): + +1. 70% for me and my colleagues. + +2. 20% for you as a partner/fronting for us. + +3. 10% for expenses that may be incurred by both parties + +during the cause of this +transacton. + +Our law prohibits a civil servant from operating a + +foreign account, hence we are contacting +you. If this +proposal satisfies you, do respon as soon as possible + +with the following information: + +1. The name you wish to use as the beneficiary of the + +fund. + +2. Your Confidential Phone and Fax Numbers. + +Further discussion will be centered on how the fund shall + +be transfer and full details on how +to accomplish this +great opportunity of ours. + +Thank you and God bless. + +Best regards, +George Osawa + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + diff --git a/Ch3/datasets/spam/spam/00236.2772a068fff32e2f8d7f8a94bd9280cd b/Ch3/datasets/spam/spam/00236.2772a068fff32e2f8d7f8a94bd9280cd new file mode 100644 index 000000000..f2821498f --- /dev/null +++ b/Ch3/datasets/spam/spam/00236.2772a068fff32e2f8d7f8a94bd9280cd @@ -0,0 +1,81 @@ +From pdibeta@gmx.net Fri Sep 6 15:40:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E255E16F70 + for ; Fri, 6 Sep 2002 15:29:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 15:29:17 +0100 (IST) +Received: from aol.com (usereu27.uk.uudial.com [62.188.17.111]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g86ChDC07172; + Fri, 6 Sep 2002 13:43:13 +0100 +Return-Receipt-To: "Receipt Delivery 012" +Reply-To: "Subscription Manager 012" +From: "Ireland Callsaver" +To: "Customer List" +Subject: International calls for only 33 cents per minute with no subscription +Date: Fri, 6 Sep 2002 11:50:24 +0100 +Message-Id: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook 8.5, Build 4.71.2173.0 +Disposition-Notification-To: +Importance: Normal +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 + +Dear User, + +Do you ever wish you could easily call people you know in other countries +for up to 85% less than standard call prices?! And then to make these savings +without having to subscribe to any low cost calling service?! We have now +launched a product that does exactly that! + +You can now call people in most popular destinations around the world for +only 33 cents per minute! There are no hidden charges, you do not need to +signup, use any credit cards, or pay any extra bills! You can try this +service at no risk and choose to use it with no commitment! + +To use this new service, simply dial our access number 1530 927 055 and +once connected, dial the actual international number you wish to call. + +For more information and the current list of countries you can call, +please check our website http://www.ireland.pd-dial.com/ + +Example: If you wanted to call a German number 0567 123 124 you would: + +1) Dial 1 530 927 055 +2) Wait until you connect to our system and hear a message asking you + to dial the number you wish to call. +3) Dial the full international number starting 00. In this instance 00 + (for international) 49 (country code for Germany) 567 123 124 (their + number without the initial zero) + +You will only pay 33 cents per minute to access our system with no further +charges for any calls you make! You can also use this service to make +cheap international calls from mobiles too! However please check the +costs of calling 1530 numbers from your mobile if you are unsure. + +You only ever pay for the cost of calling our access number which will +appear on your normal bill. However any international calls you make will +not appear on your bill, so you only ever pay 33 cents per minute when +using our service! + +If calling from a mobile, please ensure that you do not press the green/send +key again after dialling the actual mobile number, or you will be billed +for a second call by your mobile operator. + +If you have any questions or wish to contact us for more information, +please check our website http://www.ireland.pd-dial.com/ for details. + +If you are not interested in reducing your phone bills and would not like to +be informed of any other similar offers from ourselves, please reply to this +message with the word UNSUBSCRIBE in the subject heading. If you have your +email forwarded, please ensure that you unsubscribe from the actual account +email is sent to. We apologise if this message has inconvenienced you in any +way. + + diff --git a/Ch3/datasets/spam/spam/00237.9cee6fd8bdd653d21d92158e702adf50 b/Ch3/datasets/spam/spam/00237.9cee6fd8bdd653d21d92158e702adf50 new file mode 100644 index 000000000..7b18bc981 --- /dev/null +++ b/Ch3/datasets/spam/spam/00237.9cee6fd8bdd653d21d92158e702adf50 @@ -0,0 +1,163 @@ +From forum@cpillc.com Fri Sep 6 19:37:11 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 1F73016F03 + for ; Fri, 6 Sep 2002 19:36:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 06 Sep 2002 19:36:59 +0100 (IST) +Received: from onion.perl.org (onion.valueclick.com [64.70.54.95]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g86IDYC19002 for + ; Fri, 6 Sep 2002 19:13:35 +0100 +Received: (qmail 18803 invoked by uid 1008); 6 Sep 2002 18:13:53 -0000 +Delivered-To: cpanmail-zzzzason@cpan.org +Received: (qmail 18793 invoked by uid 76); 6 Sep 2002 18:13:52 -0000 +Received: from adsl-64-162-102-114.dsl.lsan03.pacbell.net (HELO + perlmail.valueclick.com) (64.162.102.114) by onion.perl.org + (qpsmtpd/0.07b) with SMTP; Fri Sep 6 18:13:52 2002 -0000 +From: "Industry Forum Hosted by CPI, LLC" +Date: Fri, 06 Sep 2002 11:12:45 +To: zzzzason@cpan.org +Subject: Industry Forum #136 +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Message-Id: PM200011:12:45 AM +Content-Type: multipart/related; boundary="----=_NextPart_QXVROEFEFX" + +This is an HTML email message. If you see this, your mail client does not support HTML messages. + +------=_NextPart_QXVROEFEFX +Content-Type: text/html;charset="iso-8859-1" +Content-Transfer-Encoding: 7bit + +

     

    + + + +
    + + + +
    +

     

    +------=_NextPart_QXVROEFEFX-- + + diff --git a/Ch3/datasets/spam/spam/00238.e3e16467d10137fa9a99b1701d76ae94 b/Ch3/datasets/spam/spam/00238.e3e16467d10137fa9a99b1701d76ae94 new file mode 100644 index 000000000..cf3d258b8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00238.e3e16467d10137fa9a99b1701d76ae94 @@ -0,0 +1,231 @@ +From twg@insiq.us Sat Sep 7 22:05:34 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 8553716FA4 + for ; Sat, 7 Sep 2002 21:57:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 07 Sep 2002 21:57:29 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g86MYQC26341 for ; Fri, 6 Sep 2002 23:34:26 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Fri, 6 Sep 2002 18:35:32 -0400 +Subject: We Buy Renewal Commissions +To: +Date: Fri, 6 Sep 2002 18:35:32 -0400 +From: "IQ - TWG" +Message-Id: <23c7401c255f5$b58fe4d0$6b01a8c0@insuranceiq.com> +MIME-Version: 1.0 +Thread-Index: AcJV3XCu+ev38WV8QJCAW3yqGKEMXw== +X-Mailer: Microsoft CDO for Windows 2000 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 06 Sep 2002 22:35:32.0359 (UTC) FILETIME=[B5B39970:01C255F5] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_0007_01C255BB.E99F1F00" + +This is a multi-part message in MIME format. + +------=_NextPart_000_0007_01C255BB.E99F1F00 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + If you need capital for your business or want to know how much it's +worth, + Call Us Today! + +Tap the hidden value of your business +and get the cash you need today. + +You've got money coming to you. But because it's in the form of renewal +commissions, it comes slowly. A little every year. + +We're TWG Capital. We help turn your renewal commissions into immediate +cash - cash you can use any way you see fit. We are currently purchasing +renewal commissions from the following product lines: Long Term Care, +Medicare Supplement, Specified Disease, Life, and Health insurance. + + + +For a free evaluation, call or e-mail Todd Rooks + today! + 866-903-1700 ext. 203 +? or ? + +Please fill out the form below for more information +Name: +E-mail: +Phone: +City: State: + + + + TWG Capital Financial Professionals +http://www.twg-capital.com + +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.Insuranceiq.com/optout + + +Legal Notice + +------=_NextPart_000_0007_01C255BB.E99F1F00 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +We Buy Renewal Commissions + + + +=20 + + =20 + + + =20 + + +
    + 3D"If
    + 3D"Call
    + + =20 + + + + + + +
    =20 +

    Tap the hidden value of your business = +
    + and get the cash you need today.

    +

    You've got money coming to you. But because it's in the = +form of=20 + renewal commissions, it comes slowly. A little every = +year.

    +

    We're TWG Capital. = +We help=20 + turn your renewal commissions into immediate cash - cash = +you can=20 + use any way you see fit. We are currently purchasing = +renewal commissions=20 + from the following product lines: Long Term Care, Medicare = +Supplement,=20 + Specified Disease, Life, and Health insurance.

    +
    +

    + For a free evaluation, call or e-mail Todd=20 + Rooks today!
    + 3D"866-903-1700
    + — or —

    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please fill = +out the form below for more information
    Name:
    E-mail:
    Phone:
    City:State:
     =20 + + + +
    +
    +
    + 3D"TWG
    + http://www.twg-capital.com
    +  =20 +
    +
    =20 +

    We = +don't want anyone=20 + to receive our mailings who does not wish to. This is = +professional communication=20 + sent to insurance professionals. To be removed from this mailing = +list,=20 + DO NOT REPLY to this message. Instead, go here: =20 + http://www.Insuranceiq.com/optout

    +
    +
    + Legal Notice=20 +
    +
    =20 + + + +------=_NextPart_000_0007_01C255BB.E99F1F00-- + + diff --git a/Ch3/datasets/spam/spam/00239.2f1370f9cba5ab21297eadb2af40b051 b/Ch3/datasets/spam/spam/00239.2f1370f9cba5ab21297eadb2af40b051 new file mode 100644 index 000000000..9f412a487 --- /dev/null +++ b/Ch3/datasets/spam/spam/00239.2f1370f9cba5ab21297eadb2af40b051 @@ -0,0 +1,321 @@ +From KV4nWPbovS0LLVR@sky.seed.net.tw Sat Sep 7 22:05:37 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E909E16FA5 + for ; Sat, 7 Sep 2002 21:57:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 07 Sep 2002 21:57:32 +0100 (IST) +Received: from john000 ([202.64.208.252]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g87010C28948 for ; + Sat, 7 Sep 2002 01:01:00 +0100 +Date: Sat, 7 Sep 2002 01:01:00 +0100 +Received: from titan by ara.seed.net.tw with SMTP id Hj5t3pNT4kz68k; + Sat, 07 Sep 2002 07:51:45 +0800 +Message-Id: +From: marketing@securepro.com.hk +To: AGRICULTURE@dogma.slashnull.org, SPAIN.TXT@dogma.slashnull.org, + SWITZERLAND.TXT@dogma.slashnull.org, TAIWAN.TXT@dogma.slashnull.org, + UNITED.KINGDOM.TXT@dogma.slashnull.org, + UNITED.STATES.TXT@dogma.slashnull.org, + AGRICULTURE@dogma.slashnull.org, AUSTRALIA.TXT@dogma.slashnull.org, + AUSTRIA.TXT@dogma.slashnull.org, BELGIUM.TXT@dogma.slashnull.org, + CANADA.TXT@dogma.slashnull.org, CASINO-MAIL.TXT@dogma.slashnull.org, + CHINA.TXT@dogma.slashnull.org, DENMARK.TXT@dogma.slashnull.org, + FINLAND.TXT@dogma.slashnull.org, FRANCE.TXT@dogma.slashnull.org, + GERMANY.TXT@dogma.slashnull.org, GREECE.TXT@dogma.slashnull.org, + HUNGARY.TXT@dogma.slashnull.org, IRELAND.TXT@dogma.slashnull.org, + ISRAEL.TXT@dogma.slashnull.org, ITALY.TXT@dogma.slashnull.org, + JAPAN.TXT@dogma.slashnull.org, KOREA.TXT@dogma.slashnull.org (SOUTH), + MEXICO.TXT@dogma.slashnull.org, NETHERLANDS.TXT@dogma.slashnull.org, + NEW.ZEALAND.TXT@dogma.slashnull.org, NORWAY.TXT@dogma.slashnull.org, + PUERTO.RICO.TXT@dogma.slashnull.org, + SINGAPORE.TXT@dogma.slashnull.org, + SOUTH.AFRICA.TXT@dogma.slashnull.org, COMPANIES@dogma.slashnull.org, + DRUGS@dogma.slashnull.org, ELECTRONIC@dogma.slashnull.org, + ESTATE@dogma.slashnull.org, MACHINE@dogma.slashnull.org, + MOBLEILE-PHONE@dogma.slashnull.org +Subject: NEW TECHNOLOGY - DIGITAL VIDEO RECORDER (Smart IP Technology) +MIME-Version: 1.0 +X-Mailer: ArHA8IFlSSFNGzAMo +X-Priority: 3 +X-Msmail-Priority: Normal +Content-Type: multipart/related; type="multipart/alternative"; boundary="----=_NextPart_lBwzzJ0s7cGEidV47B" + +This is a multi-part message in MIME format. + +------=_NextPart_lBwzzJ0s7cGEidV47B +Content-Type: multipart/alternative; + boundary="----=_NextPart_lBwzzJ0s7cGEidV47BAA" + + +------=_NextPart_lBwzzJ0s7cGEidV47BAA +Content-Type: text/html; + charset="big5" +Content-Transfer-Encoding: base64 + +PGh0bWw+DQo8aGVhZD4NCjx0aXRsZT5TZWN1cmVQcm8gRFZSPC90aXRsZT4NCjxtZXRhIGh0dHAt +ZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5 +LTEiPg0KPC9oZWFkPg0KDQo8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDAwIiBs +aW5rPSIjRkZGRkZGIiB2bGluaz0iI0ZGRkZGRiIgYWxpbms9IiNGRkZGRkYiPg0KPGRpdiBhbGln +bj0ibGVmdCI+PC9kaXY+DQo8dGFibGUgd2lkdGg9IjY1NCIgYm9yZGVyPSIxIiBjZWxsc3BhY2lu +Zz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcmNvbG9yPSIjMDAwMEZGIj4NCiAgPHRyPiANCiAg +ICA8dGQgaGVpZ2h0PSIxMTAxIiB2YWxpZ249InRvcCI+IA0KICAgICAgPGRpdiBhbGlnbj0iY2Vu +dGVyIj48L2Rpdj4NCiAgICAgIDx0YWJsZSB3aWR0aD0iNjgwIiBib3JkZXI9IjAiIGNlbGxzcGFj +aW5nPSIwIiBjZWxscGFkZGluZz0iMCI+DQogICAgICAgIDx0cj4gDQogICAgICAgICAgPHRkIGhl +aWdodD0iNDMiIGJnY29sb3I9IiMwMDAwRkYiPiANCiAgICAgICAgICAgIDxkaXYgYWxpZ249ImNl +bnRlciI+PGZvbnQgZmFjZT0iVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIg +Y29sb3I9IiNGRkZGRkYiIHNpemU9IjUiPjxiPkRJR0lUQUwgDQogICAgICAgICAgICAgIFZJREVP +IFJFQ09SREVSIEpLLTQwMDwvYj48L2ZvbnQ+PC9kaXY+DQogICAgICAgICAgPC90ZD4NCiAgICAg +ICAgPC90cj4NCiAgICAgIDwvdGFibGU+DQogICAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPiANCiAg +ICAgICAgPHRhYmxlIHdpZHRoPSI2ODAiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxw +YWRkaW5nPSIwIj4NCiAgICAgICAgICA8dHI+IA0KICAgICAgICAgICAgPHRkIHJvd3NwYW49IjMi +IGFsaWduPSJjZW50ZXIiIHdpZHRoPSIyNTgiIHZhbGlnbj0ibWlkZGxlIj48aW1nIHNyYz0iaHR0 +cDovLzIwMi42NC4yMDguMjUyL3Byb21vL2R2ci9kdnIuZ2lmIiB3aWR0aD0iMjM1IiBoZWlnaHQ9 +IjEzMiI+PC90ZD4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iNDIyIj4mbmJzcDs8L3RkPg0KICAg +ICAgICAgIDwvdHI+DQogICAgICAgICAgPHRyPiANCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iNDIy +Ij48Yj48Zm9udCBmYWNlPSJHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbi1zZXJpZiIgY29s +b3I9IiMwMDAwRkYiPkNPU1QgDQogICAgICAgICAgICAgIC0gRUZGRUNUSVZFPC9mb250PjwvYj4g +PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICA8dGQg +aGVpZ2h0PSIxNTAiIHdpZHRoPSI0MjIiIHZhbGlnbj0idG9wIj4gDQogICAgICAgICAgICAgIDx0 +YWJsZSB3aWR0aD0iNDIxIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0i +MCI+DQogICAgICAgICAgICAgICAgPHRyPiANCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0i +ODUiPiZuYnNwOzwvdGQ+DQogICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiIgd2lkdGg9 +IjMzNiI+PGZvbnQgZmFjZT0iVGltZXMgTmV3IFJvbWFuLCBUaW1lcywgc2VyaWYiPjxpPjxmb250 +IGNvbG9yPSIjMDAwMEZGIj5EaWdpdGFsIA0KICAgICAgICAgICAgICAgICAgICBWaWRlbyBNb25p +dG9yaW5nICZhbXA7IFJlY29yZGluZyBTb2x1dGlvbnM8YnI+DQogICAgICAgICAgICAgICAgICAg +IGZvciBPZmZpY2UsIFNob3AsIEhvbWUgJmFtcDsgRmFjdG9yeTwvZm9udD48L2k+PC9mb250Pjwv +dGQ+DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICA8dHI+IA0KICAgICAg +ICAgICAgICAgICAgPHRkIHdpZHRoPSI4NSIgaGVpZ2h0PSIyMyI+Jm5ic3A7PC90ZD4NCiAgICAg +ICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgICA8 +YnI+DQogICAgICAgICAgICAgIDxiPjxmb250IGZhY2U9IkdlbmV2YSwgQXJpYWwsIEhlbHZldGlj +YSwgc2FuLXNlcmlmIiBjb2xvcj0iIzAwMDBGRiI+TmV3IA0KICAgICAgICAgICAgICB0ZWNobm9s +b2d5PC9mb250PjwvYj48YnI+DQogICAgICAgICAgICAgIDxmb250IGZhY2U9IkFyaWFsLCBIZWx2 +ZXRpY2EsIHNhbnMtc2VyaWYiIHNpemU9IjIiIGNvbG9yPSIjMDAwMEZGIj4tIA0KICAgICAgICAg +ICAgICBTdXBwb3J0IER5bmFtaWMgSVA8YnI+DQogICAgICAgICAgICAgIC0gNCBWaWRlbyAmYW1w +OyA0IEF1ZGlvIElucHV0PGJyPg0KICAgICAgICAgICAgICAtIFJlYWwgVGltZSBEaXNwbGF5IGFu +ZCBSZWNvcmRpbmc8L2ZvbnQ+IDxicj4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgPC90 +cj4NCiAgICAgICAgPC90YWJsZT4NCiAgICAgICAgPHRhYmxlIHdpZHRoPSI2ODAiIGJvcmRlcj0i +MCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXJjb2xvcj0iIzAwMDBGRiI+ +DQogICAgICAgICAgPHRyPiANCiAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSIjMDAwMEZGIiBoZWln +aHQ9IjI3Ij4gDQogICAgICAgICAgICAgIDxkaXYgYWxpZ249ImNlbnRlciI+PGZvbnQgY29sb3I9 +IiNGRkZGRkYiIGZhY2U9IlZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiPjxi +PlRlY2huaWNhbCANCiAgICAgICAgICAgICAgICBTcGVjaWZpY2F0aW9uczwvYj48L2ZvbnQ+PC9k +aXY+DQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgIDwvdGFibGU+ +DQogICAgICAgIDx0YWJsZSB3aWR0aD0iNjgwIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBj +ZWxscGFkZGluZz0iMCI+DQogICAgICAgICAgPHRyPiANCiAgICAgICAgICAgIDx0ZCBiZ2NvbG9y +PSIjQ0NDQ0NDIj4gDQogICAgICAgICAgICAgIDxkaXYgYWxpZ249ImNlbnRlciI+PGZvbnQgc2l6 +ZT0iMiIgZmFjZT0iQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiI+PGI+TmV3IA0KICAgICAg +ICAgICAgICAgIFRlY2hub2xvZ3k8L2I+PC9mb250PjwvZGl2Pg0KICAgICAgICAgICAgPC90ZD4N +CiAgICAgICAgICA8L3RyPg0KICAgICAgICA8L3RhYmxlPg0KICAgICAgICA8dGFibGUgd2lkdGg9 +IjY4MCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPg0KICAgICAg +ICAgIDx0cj4gDQogICAgICAgICAgICA8dGQgd2lkdGg9IjIyNyIgdmFsaWduPSJ0b3AiPjxmb250 +IGZhY2U9IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIHNpemU9IjIiPjxiPlN1cHBvcnQg +DQogICAgICAgICAgICAgIER5bmFtaWMgSVA8L2I+PC9mb250PjwvdGQ+DQogICAgICAgICAgICA8 +dGQgd2lkdGg9IjQ1MyI+PGZvbnQgc2l6ZT0iMiIgZmFjZT0iQXJpYWwsIEhlbHZldGljYSwgc2Fu +cy1zZXJpZiI+KiANCiAgICAgICAgICAgICAgT3VyIDxiPjxmb250IGNvbG9yPSIjRkY2NjAwIj5T +bWFydElQPC9mb250PjwvYj4gVHJhY2luZyB0ZWNobm9sb2d5IA0KICAgICAgICAgICAgICBlbmFi +bGUgdGhlIEpLLTQwMCBjb25uZWN0IHRoZSBJbnRlcm5ldCB0aHJvdWdoIEFEU0wgd2l0aCBkeW5h +bWljIA0KICAgICAgICAgICAgICBJUCBhZGRyZXNzIHdoaWNoIHdpbGwgZ3JlYXRseSByZWR1Y2Vz +IHlvdXIgaW50ZXJuZXQgY29zdC48L2ZvbnQ+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAg +ICAgIDx0cj4gDQogICAgICAgICAgICA8dGQgd2lkdGg9IjIyNyI+PGZvbnQgZmFjZT0iQXJpYWws +IEhlbHZldGljYSwgc2Fucy1zZXJpZiIgc2l6ZT0iMiI+PGI+NCANCiAgICAgICAgICAgICAgVmlk +ZW8gJmFtcDsgQXVkaW8gU2lnbmFsIElucHV0PC9iPjwvZm9udD48L3RkPg0KICAgICAgICAgICAg +PHRkIHdpZHRoPSI0NTMiPjxmb250IGZhY2U9IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYi +IHNpemU9IjIiPiogDQogICAgICAgICAgICAgIDQgdmlkZW8vYXVkaW8gaW5wdXQgdG8gcmVjb3Jk +IGltYWdlcyBhbmQgc291bmQgYXQgdGhlIHNhbWUgdGltZS48L2ZvbnQ+PC90ZD4NCiAgICAgICAg +ICA8L3RyPg0KICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICA8dGQgd2lkdGg9IjIyNyIgdmFs +aWduPSJ0b3AiPjxmb250IGZhY2U9IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIHNpemU9 +IjIiPjxiPlJlYWwgDQogICAgICAgICAgICAgIFRpbWUgRGlzcGxheSBhbmQgUmVjb3JkaW5nPC9i +PjwvZm9udD48L3RkPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSI0NTMiPjxmb250IGZhY2U9IkFy +aWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIHNpemU9IjIiPiogDQogICAgICAgICAgICAgIFVw +IHRvIDEwMCBmcmFtZXMgcGVyIHNlY29uZCBvciAzMCBmcmFtZXMgcGVyIGNhbWVyYSBpbiBtb25p +dG9yaW5nLCANCiAgICAgICAgICAgICAgcmVjb3JkaW5nIGFuZCBwbGF5YmFjazwvZm9udD48L3Rk +Pg0KICAgICAgICAgIDwvdHI+DQogICAgICAgIDwvdGFibGU+DQogICAgICAgIDx0YWJsZSB3aWR0 +aD0iNjgwIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+DQogICAg +ICAgICAgPHRyPiANCiAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSIjQ0NDQ0NDIj4gDQogICAgICAg +ICAgICAgIDxkaXYgYWxpZ249ImNlbnRlciI+PGZvbnQgZmFjZT0iQXJpYWwsIEhlbHZldGljYSwg +c2Fucy1zZXJpZiIgc2l6ZT0iMiI+PGI+VmlkZW8gDQogICAgICAgICAgICAgICAgRmVhdHVyZXM8 +L2I+PC9mb250PjwvZGl2Pg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAg +ICAgICA8L3RhYmxlPg0KICAgICAgICA8dGFibGUgd2lkdGg9IjY3MyIgYm9yZGVyPSIwIiBjZWxs +c3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPg0KICAgICAgICAgIDx0cj4gDQogICAgICAgICAg +ICA8dGQgd2lkdGg9IjIyNCI+PGI+PGZvbnQgZmFjZT0iQXJpYWwsIEhlbHZldGljYSwgc2Fucy1z +ZXJpZiIgc2l6ZT0iMiI+VmlkZW8gDQogICAgICAgICAgICAgIElucHV0PC9mb250PjwvYj48L3Rk +Pg0KICAgICAgICAgICAgPHRkIHdpZHRoPSI0NDkiPjxmb250IGZhY2U9IkFyaWFsLCBIZWx2ZXRp +Y2EsIHNhbnMtc2VyaWYiIHNpemU9IjIiPiogDQogICAgICAgICAgICAgIFVwIHRvIDQgdmlkZW8g +aW5wdXRzPC9mb250PjwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgICA8dHI+IA0KICAg +ICAgICAgICAgPHRkIHdpZHRoPSIyMjQiPjxiPjxmb250IGZhY2U9IkFyaWFsLCBIZWx2ZXRpY2Es +IHNhbnMtc2VyaWYiIHNpemU9IjIiPlZpZGVvIA0KICAgICAgICAgICAgICBkaXNwbGF5PC9mb250 +PjwvYj48L3RkPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSI0NDkiPjxmb250IGZhY2U9IkFyaWFs +LCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIHNpemU9IjIiPiogDQogICAgICAgICAgICAgIERpc3Bs +YXkgb24gU1ZHQSBtb25pdG9yIG9yIE5UU0MvUEFMIHZpZGVvIG1vbml0b3IgPGJyPg0KICAgICAg +ICAgICAgICAqIERpc3BsYXkgcmVhbC10aW1lIHZpZGVvIGF0IG9wdGltdW0gY29uZGl0aW9uIG9m +IHVwIHRvIDQgY2hhbm5lbHM8L2ZvbnQ+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAgICAg +IDx0cj4gDQogICAgICAgICAgICA8dGQgd2lkdGg9IjIyNCI+PGI+PGZvbnQgZmFjZT0iQXJpYWws +IEhlbHZldGljYSwgc2Fucy1zZXJpZiIgc2l6ZT0iMiI+VmlkZW8gDQogICAgICAgICAgICAgIGRp +c3BsYXkgcmVzb2x1dGlvbjwvZm9udD48L2I+PC90ZD4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0i +NDQ5Ij48Zm9udCBmYWNlPSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBzaXplPSIyIj4q +IA0KICAgICAgICAgICAgICBWaWRlbyBkaXNwbGF5IHJlc29sdXRpb24gb24gNzY4eDU3NiAoUEFM +KSwgNjQweDQ4MChOVFNDKTwvZm9udD48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgICAg +PHRyPiANCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjI0IiBoZWlnaHQ9IjExMSI+PGI+PGZvbnQg +ZmFjZT0iQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIgc2l6ZT0iMiI+QnVpbHQtaW4gDQog +ICAgICAgICAgICAgIG11bHRpcGxleGVyIGRpc3BsYXkgbW9kZXM8L2ZvbnQ+PC9iPjwvdGQ+DQog +ICAgICAgICAgICA8dGQgd2lkdGg9IjQ0OSIgaGVpZ2h0PSIxMTEiIHZhbGlnbj0ibWlkZGxlIiBh +bGlnbj0iY2VudGVyIj4gDQogICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iNDE5IiBib3JkZXI9 +IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+DQogICAgICAgICAgICAgICAgPHRy +PiANCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTg1Ij48Zm9udCBmYWNlPSJBcmlhbCwg +SGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBzaXplPSIyIj48aW1nIHNyYz0iaHR0cDovLzIwMi42NC4y +MDguMjUyL3Byb21vL2R2ci9waWMxLmdpZiIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMDMiPjwvZm9u +dD48L3RkPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMzQiPjxmb250IGZhY2U9IkFy +aWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIHNpemU9IjIiPjxpbWcgc3JjPSJodHRwOi8vMjAy +LjY0LjIwOC4yNTIvcHJvbW8vZHZyL3BpYzIuZ2lmIiB3aWR0aD0iMTEwIiBoZWlnaHQ9Ijg5Ij48 +L2ZvbnQ+PC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICA8L3RhYmxl +Pg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAgICAgIDx0cj4gDQog +ICAgICAgICAgICA8dGQgd2lkdGg9IjIyNCI+PGI+PGZvbnQgZmFjZT0iQXJpYWwsIEhlbHZldGlj +YSwgc2Fucy1zZXJpZiIgc2l6ZT0iMiI+VGltZSANCiAgICAgICAgICAgICAgJmFtcDsgRGF0ZSBz +dGFtcDwvZm9udD48L2I+PC90ZD4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iNDQ5Ij48Zm9udCBm +YWNlPSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBzaXplPSIyIj5UaW1lIA0KICAgICAg +ICAgICAgICBhbmQgZGF0ZSBvdmVybGF5IG9uIGVhY2ggY2FtZXJhIGZvciBkaXNwbGF5IGFuZCBy +ZWNvcmRpbmc8L2ZvbnQ+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAgICA8L3RhYmxlPg0K +ICAgICAgICA8dGFibGUgd2lkdGg9IjY4MCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2Vs +bHBhZGRpbmc9IjAiPg0KICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICA8dGQgYmdjb2xvcj0i +I0NDQ0NDQyI+IA0KICAgICAgICAgICAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPjxmb250IGZhY2U9 +IlZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiPjxiPjxmb250IHNpemU9IjIi +PlJlY29yZGluZyANCiAgICAgICAgICAgICAgICBGZWF0dXJlczwvZm9udD48L2I+PC9mb250Pjwv +ZGl2Pg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAgICA8L3RhYmxl +Pg0KICAgICAgICA8dGFibGUgd2lkdGg9IjY4MCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIg +Y2VsbHBhZGRpbmc9IjAiPg0KICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICA8dGQgd2lkdGg9 +IjIyOCI+PGI+PGZvbnQgZmFjZT0iQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIgc2l6ZT0i +MiI+RGlnaXRhbCANCiAgICAgICAgICAgICAgdmlkZW8gcmVjb3JkaW5nPC9mb250PjwvYj48L3Rk +Pg0KICAgICAgICAgICAgPHRkIHdpZHRoPSI0NTIiPjxmb250IGZhY2U9IkFyaWFsLCBIZWx2ZXRp +Y2EsIHNhbnMtc2VyaWYiIHNpemU9IjIiPiogDQogICAgICAgICAgICAgIFRvdGFsIHJlY29yZGlu +ZyBmcmFtZSByYXRlIGlzIDEwMGYvcyA8YnI+DQogICAgICAgICAgICAgICogQWR1c3RhYmxlIGZy +YW1lIHJhdGUsIHJlc29sdXRpb24gYW5kIHJlY29yZGluZyBmaWxlIGxlbmd0aCBmb3IgDQogICAg +ICAgICAgICAgIFJyZWNvcmRpbmc8L2ZvbnQ+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAg +ICAgIDx0cj4gDQogICAgICAgICAgICA8dGQgd2lkdGg9IjIyOCI+PGI+PGZvbnQgZmFjZT0iQXJp +YWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIgc2l6ZT0iMiI+Q29tcHJlc3Npb24gDQogICAgICAg +ICAgICAgIGZvciBkaWdpdGFsIHZpZGVvIHJlY29yZGluZzwvZm9udD48L2I+PC90ZD4NCiAgICAg +ICAgICAgIDx0ZCB3aWR0aD0iNDUyIj48Zm9udCBmYWNlPSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5z +LXNlcmlmIiBzaXplPSIyIj4qIA0KICAgICAgICAgICAgICBXYXZlbGV0IG9yIE1QRUctNCBjb21w +cmVzc2lvbiB0ZWNobm9sb2d5IHdpdGggNC41ay9mcmFtZTwvZm9udD48L3RkPg0KICAgICAgICAg +IDwvdHI+DQogICAgICAgICAgPHRyPiANCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjI4Ij48Yj48 +Zm9udCBmYWNlPSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBzaXplPSIyIj5TY2hlZHVs +ZSANCiAgICAgICAgICAgICAgcmVjb3JkaW5nPC9mb250PjwvYj48L3RkPg0KICAgICAgICAgICAg +PHRkIHdpZHRoPSI0NTIiPjxmb250IGZhY2U9IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYi +IHNpemU9IjIiPiogDQogICAgICAgICAgICAgIEEgcHJvZ3JhbW1hYmxlIHRpbWVyIGFsbG93cyB1 +c2VyIHRvIHByb2dyYW1tZSBkaWZmZXJlbnQgcmVjb3JkaW5nIA0KICAgICAgICAgICAgICBzY2hl +ZHVsZSBwYXR0ZXJucyBhdCBkaWZmZXJlbnQgdGltZXMgZm9yIGVhY2ggY2FtZXJhPC9mb250Pjwv +dGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgICA8dHI+IA0KICAgICAgICAgICAgPHRkIHdp +ZHRoPSIyMjgiPjxiPjxmb250IGZhY2U9IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIHNp +emU9IjIiPk1vdGlvbiANCiAgICAgICAgICAgICAgZGV0ZWN0aW9uIHJlY29yZGluZzwvZm9udD48 +L2I+PC90ZD4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iNDUyIj48Zm9udCBmYWNlPSJBcmlhbCwg +SGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBzaXplPSIyIj4qIA0KICAgICAgICAgICAgICBWaWRlbyBt +b3Rpb24gZGV0ZWN0aW9uIG9uIGVhY2ggdmlkZW8gaW5wdXQ8L2ZvbnQ+PC90ZD4NCiAgICAgICAg +ICA8L3RyPg0KICAgICAgICA8L3RhYmxlPg0KICAgICAgICA8dGFibGUgd2lkdGg9IjY4MCIgYm9y +ZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPg0KICAgICAgICAgIDx0cj4g +DQogICAgICAgICAgICA8dGQgYmdjb2xvcj0iI0NDQ0NDQyI+IA0KICAgICAgICAgICAgICA8ZGl2 +IGFsaWduPSJjZW50ZXIiPjxmb250IGZhY2U9IlZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNh +bnMtc2VyaWYiIHNpemU9IjIiPjxiPlBsYXliYWNrIA0KICAgICAgICAgICAgICAgIEZlYXR1cmVz +PC9iPjwvZm9udD48L2Rpdj4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgPC90cj4NCiAg +ICAgICAgPC90YWJsZT4NCiAgICAgICAgPHRhYmxlIHdpZHRoPSI2ODAiIGJvcmRlcj0iMCIgY2Vs +bHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBoZWlnaHQ9IjMyIj4NCiAgICAgICAgICA8dHI+ +IA0KICAgICAgICAgICAgPHRkIHdpZHRoPSIyMjgiPjxiPjxmb250IGZhY2U9IkFyaWFsLCBIZWx2 +ZXRpY2EsIHNhbnMtc2VyaWYiIHNpemU9IjIiPiANCiAgICAgICAgICAgICAgUGxheWJhY2s8L2Zv +bnQ+PC9iPjwvdGQ+DQogICAgICAgICAgICA8dGQgd2lkdGg9IjQ1MiI+PGZvbnQgc2l6ZT0iMiIg +ZmFjZT0iQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiI+KiANCiAgICAgICAgICAgICAgUGxh +eWJhY2sgYXQgZGlmZmVyZW50IHNwZWVkLCBzaHV0dGxlIGZvcndhcmQgYW5kIGJhY2t3YXJkIDwv +Zm9udD48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgICAgPHRyPiANCiAgICAgICAgICAg +IDx0ZCB3aWR0aD0iMjI4IiBoZWlnaHQ9IjI1Ij48Yj48Zm9udCBmYWNlPSJBcmlhbCwgSGVsdmV0 +aWNhLCBzYW5zLXNlcmlmIiBzaXplPSIyIj5JbnRlbGxpZ2VudCANCiAgICAgICAgICAgICAgc2Vh +cmNoIGZ1bmN0aW9ucyA8YnI+DQogICAgICAgICAgICAgIDwvZm9udD48L2I+PC90ZD4NCiAgICAg +ICAgICAgIDx0ZCB3aWR0aD0iNDUyIiBoZWlnaHQ9IjI1Ij48Zm9udCBzaXplPSIyIiBmYWNlPSJB +cmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIj4qIA0KICAgICAgICAgICAgICBWaWRlbyByZWNv +cmRlZCBjYW4gYmUgcGxheWVkIGJhY2sgYnkgY2FtZXJhIGV2ZW50IG9yIGluIHRpbWUgYW5kIA0K +ICAgICAgICAgICAgICBkYXRlIGZvciB2aWRlbyBzZWFyY2ggPC9mb250PjwvdGQ+DQogICAgICAg +ICAgPC90cj4NCiAgICAgICAgPC90YWJsZT4NCiAgICAgICAgPHRhYmxlIHdpZHRoPSI2ODAiIGJv +cmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXJjb2xvcj0iI0ND +Q0NDQyI+DQogICAgICAgICAgPHRyPiANCiAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSIjQ0NDQ0ND +Ij4gDQogICAgICAgICAgICAgIDxkaXYgYWxpZ249ImNlbnRlciI+PGZvbnQgZmFjZT0iVmVyZGFu +YSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIgc2l6ZT0iMiI+PGI+UmVtb3RlIA0KICAg +ICAgICAgICAgICAgIFN5c3RlbSBTb2Z0d2FyZTwvYj48L2ZvbnQ+PC9kaXY+DQogICAgICAgICAg +ICA8L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgIDwvdGFibGU+DQogICAgICAgIDx0YWJs +ZSB3aWR0aD0iNjgwIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+ +DQogICAgICAgICAgPHRyPiANCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjI4IiBoZWlnaHQ9IjI2 +Ij48Yj48Zm9udCBmYWNlPSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBzaXplPSIyIj5S +ZW1vdGUgDQogICAgICAgICAgICAgIHZpZXdpbmcgYW5kIHJlY29yZGluZyA8YnI+DQogICAgICAg +ICAgICAgIDwvZm9udD48L2I+PC90ZD4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iNDUyIiBoZWln +aHQ9IjI2Ij48Zm9udCBmYWNlPSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBzaXplPSIy +Ij5TdXBwb3J0IA0KICAgICAgICAgICAgICBNdWx0aS1zaXRlcyBjYW1lcmEgb25saW5lIHZpZXdp +bmcgdmlhIExBTiwgSW50ZXJuZXQsIElTRE4gYW5kIFBTVE48L2ZvbnQ+PC90ZD4NCiAgICAgICAg +ICA8L3RyPg0KICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICA8dGQgd2lkdGg9IjIyOCI+PGI+ +PGZvbnQgZmFjZT0iQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIgc2l6ZT0iMiI+UmVtb3Rl +IA0KICAgICAgICAgICAgICBwbGF5YmFjayByZWNvcmRlZCB2aWRlbzxicj4NCiAgICAgICAgICAg +ICAgJmFtcDsgYXVkaW8gPGJyPg0KICAgICAgICAgICAgICA8L2ZvbnQ+PC9iPjwvdGQ+DQogICAg +ICAgICAgICA8dGQgd2lkdGg9IjQ1MiI+PGZvbnQgZmFjZT0iQXJpYWwsIEhlbHZldGljYSwgc2Fu +cy1zZXJpZiIgc2l6ZT0iMiI+SW1hZ2UgDQogICAgICAgICAgICAgIHJlY29yZGVkIGNhbiBiZSBy +ZXRyaWV2ZWQgYXQgdGhlIHJlbW90ZSBzdGF0aW9uIHZpYSBMQU4sIEludGVybmV0LCANCiAgICAg +ICAgICAgICAgSVNETiBhbmQgUFNUTjwvZm9udD48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAg +ICAgICAgPHRyPiANCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjI4Ij48Yj48Zm9udCBmYWNlPSJB +cmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBzaXplPSIyIj5QYW4gDQogICAgICAgICAgICAg +IC8gVGlsdCAvIFpvb20gPGJyPg0KICAgICAgICAgICAgICA8L2ZvbnQ+PC9iPjwvdGQ+DQogICAg +ICAgICAgICA8dGQgd2lkdGg9IjQ1MiI+PGZvbnQgZmFjZT0iQXJpYWwsIEhlbHZldGljYSwgc2Fu +cy1zZXJpZiIgc2l6ZT0iMiI+UmVtb3RlIA0KICAgICAgICAgICAgICBQYW4gLyBUaWx0IC8gWm9v +bSBmdW5jdGlvbnMgdmlhIExhbiwgSW50ZXJuZXQsIElTRE4gYW5kIFBTVE48L2ZvbnQ+PC90ZD4N +CiAgICAgICAgICA8L3RyPg0KICAgICAgICA8L3RhYmxlPg0KICAgICAgICA8dGFibGUgd2lkdGg9 +IjY4MCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPg0KICAgICAg +ICAgIDx0cj4gDQogICAgICAgICAgICA8dGQgYmdjb2xvcj0iI0NDQ0NDQyI+IA0KICAgICAgICAg +ICAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPjxmb250IGZhY2U9IlZlcmRhbmEsIEFyaWFsLCBIZWx2 +ZXRpY2EsIHNhbnMtc2VyaWYiIHNpemU9IjIiPjxiPlN5c3RlbSANCiAgICAgICAgICAgICAgICBT +cGVjaWZpY2F0aW9uPC9iPjwvZm9udD48L2Rpdj4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAg +ICAgPC90cj4NCiAgICAgICAgPC90YWJsZT4NCiAgICAgICAgPHRhYmxlIHdpZHRoPSI2ODAiIGJv +cmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4NCiAgICAgICAgICA8dHI+ +IA0KICAgICAgICAgICAgPHRkIHdpZHRoPSIyMjgiPjxmb250IGZhY2U9IkFyaWFsLCBIZWx2ZXRp +Y2EsIHNhbnMtc2VyaWYiIHNpemU9IjIiPjxiPlNwZWNpZmljYXRpb248L2I+PC9mb250PjwvdGQ+ +DQogICAgICAgICAgICA8dGQgd2lkdGg9IjQ1MiI+PGZvbnQgZmFjZT0iQXJpYWwsIEhlbHZldGlj +YSwgc2Fucy1zZXJpZiIgc2l6ZT0iMiI+UDQgDQogICAgICAgICAgICAgIDEuNk1oeiwgMTIwR0Ig +SGRkLCAzLjUmcXVvdDtGREQsIDI1Nk1CIFJhbSwgOHg4eDMyIENELVIvUlcsIGJ1aWx0LWluIA0K +ICAgICAgICAgICAgICAxMC8xMDBNIExBTiBjYXJkPC9mb250PjwvdGQ+DQogICAgICAgICAgPC90 +cj4NCiAgICAgICAgPC90YWJsZT4NCiAgICAgICAgPHRhYmxlIHdpZHRoPSI2ODAiIGJvcmRlcj0i +MCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4NCiAgICAgICAgICA8dHI+IA0KICAg +ICAgICAgICAgPHRkIGJnY29sb3I9IiMwMDAwRkYiPiANCiAgICAgICAgICAgICAgPGRpdiBhbGln +bj0iY2VudGVyIj48Zm9udCBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNl +cmlmIiBzaXplPSIyIj48Yj48Zm9udCBjb2xvcj0iI0ZGRkZGRiI+U2VjdXJlUHJvIA0KICAgICAg +ICAgICAgICAgIFRlY2hub2xvZ3kgU2VjdXJpdHkgU3lzdGVtIExpbWl0ZWQgOiBjb250YWN0IHVz +IHRvZGF5IDogKDg1MiktMjY4MiANCiAgICAgICAgICAgICAgICAwMDg5IDogPC9mb250PjxhIGhy +ZWY9Imh0dHA6Ly93d3cuc2VjdXJlcHJvLmNvbS5oayI+PGZvbnQgY29sb3I9IiNGRkZGRkYiPmh0 +dHA6Ly93d3cuc2VjdXJlcHJvLmNvbS5oazwvZm9udD48L2E+IA0KICAgICAgICAgICAgICAgIDxm +b250IGNvbG9yPSIjRkZGRkZGIj5FbWFpbDo8L2ZvbnQ+IDxhIGhyZWY9Im1haWx0bzppbmZvQHNl +Y3VyZXByby5jb20uaGsiPjxmb250IGNvbG9yPSIjRkZGRkZGIj5pbmZvQHNlY3VyZXByby5jb20u +aGs8L2ZvbnQ+PC9hPjwvYj48L2ZvbnQ+PC9kaXY+DQogICAgICAgICAgICA8L3RkPg0KICAgICAg +ICAgIDwvdHI+DQogICAgICAgIDwvdGFibGU+DQogICAgICAgIDx0YWJsZSB3aWR0aD0iNjgwIiBi +b3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+DQogICAgICAgICAgPHRy +PiANCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjIiPiZuYnNwOzwvdGQ+DQogICAgICAgICAgICA8 +dGQgd2lkdGg9IjIwNyI+Jm5ic3A7PC90ZD4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iNDUxIj4m +bmJzcDs8L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgICAgPHRyPiANCiAgICAgICAgICAg +IDx0ZCB3aWR0aD0iMjIiPiZuYnNwOzwvdGQ+DQogICAgICAgICAgICA8dGQgd2lkdGg9IjIwNyI+ +PGZvbnQgZmFjZT0iVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIgc2l6ZT0i +MiI+PGI+SGVhZHF1YXJ0ZXI8L2I+PC9mb250Pjxicj4NCiAgICAgICAgICAgICAgPGZvbnQgZmFj +ZT0iVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIgc2l6ZT0iMiI+Um0uIA0K +ICAgICAgICAgICAgICA1MTAsIDUvRiBGdWsgU2hpbmcgQ29tbS4gQmxkZy4sIE5vLjI4LCBPbiBM +b2sgTXVuIFN0cmVldCwgT24gTG9rIA0KICAgICAgICAgICAgICBUc3VlbiwgRmFubGluZywgTi5U +Liw8YnI+DQogICAgICAgICAgICAgIEhvbmcgS29uZzwvZm9udD48L3RkPg0KICAgICAgICAgICAg +PHRkIHdpZHRoPSI0NTEiPiANCiAgICAgICAgICAgICAgPGRpdiBhbGlnbj0iY2VudGVyIj48Zm9u +dCBzaXplPSI2IiBmYWNlPSJDb3VyaWVyIE5ldywgQ291cmllciwgbW9ubyI+RGlzdHJpYnV0b3Jz +PC9mb250PjwvZGl2Pg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAg +ICAgIDx0cj4gDQogICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Jm5ic3A7PC90ZD4NCiAgICAg +ICAgICA8L3RyPg0KICAgICAgICA8L3RhYmxlPg0KICAgICAgICA8Zm9udCBzaXplPSIxIiBmYWNl +PSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIj48Yj5Db3B5cmlnaHQgMjAwMiBTZWN1cmVQ +cm8gDQogICAgICAgIFRlY2hub2xvZ3kgU2VjdXJpdHkgU3lzdGVtIEx0ZC4gQWxsIHJpZ2h0IHJl +c2VydmVkLiA8YnI+DQogICAgICAgIEpLNDAwLCBKSzgwMCwgSksxNjAwIGFyZSByZWdpc3RlcmVk +IHRyYWtlbWFya3Mgb2YgU2VjdXJlUHJvIFRlY2hub2xvZ3kgDQogICAgICAgIFNlY3VyaXR5IFN5 +c3RlbSBMdGQuIEluIEhvbmcgS29uZy48L2I+PC9mb250PjwvZGl2Pg0KICAgIDwvdGQ+DQogIDwv +dHI+DQo8L3RhYmxlPg0KPC9ib2R5Pg0KPC9odG1sPg== + + +------=_NextPart_lBwzzJ0s7cGEidV47BAA-- +------=_NextPart_lBwzzJ0s7cGEidV47B-- + + + + diff --git a/Ch3/datasets/spam/spam/00240.2ff7f745285653a238214d975859406b b/Ch3/datasets/spam/spam/00240.2ff7f745285653a238214d975859406b new file mode 100644 index 000000000..10609be34 --- /dev/null +++ b/Ch3/datasets/spam/spam/00240.2ff7f745285653a238214d975859406b @@ -0,0 +1,60 @@ +From iiu-admin@taint.org Sat Sep 7 22:05:49 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 08A4916F22 + for ; Sat, 7 Sep 2002 21:57:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 07 Sep 2002 21:57:45 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g874l2C06886 for + ; Sat, 7 Sep 2002 05:47:02 +0100 +Received: from linux.local ([213.9.248.135]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g874ksC06868 for ; + Sat, 7 Sep 2002 05:46:54 +0100 +Message-Id: <200209070446.g874ksC06868@dogma.slashnull.org> +Received: (qmail 11101 invoked from network); 7 Sep 2002 04:47:28 -0000 +Received: from unknown (HELO h) (192.168.0.2) by linux.local with SMTP; + 7 Sep 2002 04:47:28 -0000 +From: "Sales Department" +Subject: Half Price Cigarettes and Tobacco +To: iiu-admin@taint.org +Reply-To: smokesdirect@terra.es +Date: Sat, 7 Sep 2002 06:53:25 +0200 +X-Priority: 3 +X-Library: Indy 8.0.25 +Sender: iiu-owner@taint.org +Errors-To: iiu-owner@taint.org +X-Beenthere: iiu@iiu.taint.org +X-Mailman-Version: 2.0.10 +Precedence: bulk +List-Unsubscribe: , + +List-Id: Irish Internet Users +List-Post: +List-Help: +List-Subscribe: , + +List-Archive: + + +Dear Sir or Madam + +In the past you have requested information on discounted products. We hope that you find this of interest. If you are not a smoker, and find this email offensive, we sincerely apologise! We will be only too happy to take you off our mailing list. + +If you are a smoker, however, and are fed up with paying high prices for your cigarettes and tobacco, take a look at what we have to offer by clicking on this link. +http://www.smokersunited.co.uk/?S=15&ID=2 + +We can send you, legally, by registered air mail, direct to your door, 4 cartons of cigarettes or 40 pouches of rolling tobacco (all brands are available) from only 170 Euros - about 105 pounds - fully inclusive of postage and packing. Why pay more? + +To remove yourself from our mailing list, please click below +mailto:smokersclub@terra.es + +Yours faithfully. +Smokers United +http://www.smokersunited.co.uk/?S=15&ID=2 + +xay1y + + diff --git a/Ch3/datasets/spam/spam/00241.c28ade5771085a8fddd054a219566b7c b/Ch3/datasets/spam/spam/00241.c28ade5771085a8fddd054a219566b7c new file mode 100644 index 000000000..7ad34e5a4 --- /dev/null +++ b/Ch3/datasets/spam/spam/00241.c28ade5771085a8fddd054a219566b7c @@ -0,0 +1,73 @@ +From marie_adolph@emailaccount.com Sat Sep 7 22:05:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 3661E16F49 + for ; Sat, 7 Sep 2002 21:57:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 07 Sep 2002 21:57:47 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g875lVC08233 for + ; Sat, 7 Sep 2002 06:47:31 +0100 +Received: from emailaccount.com + (host217-37-151-137.in-addr.btopenworld.com [217.37.151.137]) by + webnote.net (8.9.3/8.9.3) with SMTP id GAA24578 for ; + Sat, 7 Sep 2002 06:47:49 +0100 +From: marie_adolph@emailaccount.com +Received: from 30.18.232.3 ([30.18.232.3]) by a231242.upc-a.zhello.nl with + asmtp; Sun, 08 Sep 2002 08:42:09 -0800 +Received: from unknown (HELO anther.webhostingtotalk.com) + (184.188.244.146) by rly-xr02.nikavo.net with NNFMP; Sun, 08 Sep 2002 + 00:41:14 -1100 +Received: from [55.144.218.126] by rly-xl05.dohuya.com with local; + Sat, 07 Sep 2002 13:40:19 -0400 +Received: from rly-yk04.aolmd.com ([118.157.246.229]) by mail.gimmixx.net + with local; 07 Sep 2002 09:39:24 -0400 +Received: from unknown (HELO anther.webhostingtotalk.com) (38.176.136.1) + by rly-xr02.nikavo.net with NNFMP; 07 Sep 2002 05:38:29 -0000 +Reply-To: +Message-Id: <013e24d55c2e$7163c2d7$3cc30ad7@utuxsm> +To: +Subject: don't proscrastinate...it's only $14.95 per year +Date: Sat, 07 Sep 2002 05:19:48 -0000 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00B6_07E34C7A.C3030C43" + +------=_NextPart_000_00B6_07E34C7A.C3030C43 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +SU1QT1JUQU5UIElORk9STUFUSU9OOg0KDQpUaGUgbmV3IGRvbWFpbiBuYW1l +cyBhcmUgZmluYWxseSBhdmFpbGFibGUgdG8gdGhlIGdlbmVyYWwgcHVibGlj +IGF0IGRpc2NvdW50IHByaWNlcy4gTm93IHlvdSBjYW4gcmVnaXN0ZXIgb25l +IG9mIHRoZSBleGNpdGluZyBuZXcgLkJJWiBvciAuSU5GTyBkb21haW4gbmFt +ZXMsIGFzIHdlbGwgYXMgdGhlIG9yaWdpbmFsIC5DT00gYW5kIC5ORVQgbmFt +ZXMgZm9yIGp1c3QgJDE0Ljk1LiBUaGVzZSBicmFuZCBuZXcgZG9tYWluIGV4 +dGVuc2lvbnMgd2VyZSByZWNlbnRseSBhcHByb3ZlZCBieSBJQ0FOTiBhbmQg +aGF2ZSB0aGUgc2FtZSByaWdodHMgYXMgdGhlIG9yaWdpbmFsIC5DT00gYW5k +IC5ORVQgZG9tYWluIG5hbWVzLiBUaGUgYmlnZ2VzdCBiZW5lZml0IGlzIG9m +LWNvdXJzZSB0aGF0IHRoZSAuQklaIGFuZCAuSU5GTyBkb21haW4gbmFtZXMg +YXJlIGN1cnJlbnRseSBtb3JlIGF2YWlsYWJsZS4gaS5lLiBpdCB3aWxsIGJl +IG11Y2ggZWFzaWVyIHRvIHJlZ2lzdGVyIGFuIGF0dHJhY3RpdmUgYW5kIGVh +c3ktdG8tcmVtZW1iZXIgZG9tYWluIG5hbWUgZm9yIHRoZSBzYW1lIHByaWNl +LiAgVmlzaXQ6IGh0dHA6Ly93d3cuYWZmb3JkYWJsZS1kb21haW5zLmNvbSB0 +b2RheSBmb3IgbW9yZSBpbmZvLg0KIA0KUmVnaXN0ZXIgeW91ciBkb21haW4g +bmFtZSB0b2RheSBmb3IganVzdCAkMTQuOTUgYXQ6IGh0dHA6Ly93d3cuYWZm +b3JkYWJsZS1kb21haW5zLmNvbS8gIFJlZ2lzdHJhdGlvbiBmZWVzIGluY2x1 +ZGUgZnVsbCBhY2Nlc3MgdG8gYW4gZWFzeS10by11c2UgY29udHJvbCBwYW5l +bCB0byBtYW5hZ2UgeW91ciBkb21haW4gbmFtZSBpbiB0aGUgZnV0dXJlLg0K +IA0KU2luY2VyZWx5LA0KIA0KRG9tYWluIEFkbWluaXN0cmF0b3INCkFmZm9y +ZGFibGUgRG9tYWlucw0KDQoNClRvIHJlbW92ZSB5b3VyIGVtYWlsIGFkZHJl +c3MgZnJvbSBmdXJ0aGVyIHByb21vdGlvbmFsIG1haWxpbmdzIGZyb20gdGhp +cyBjb21wYW55LCBjbGljayBoZXJlOg0KaHR0cDovL3d3dy5jZW50cmFscmVt +b3ZhbHNlcnZpY2UuY29tL2NnaS1iaW4vZG9tYWluLXJlbW92ZS5jZ2kNCihl +MSkNCjE4MDRGZlJvMy04MDBCWktmNzM2OExpR243LTcwMGRCVGU4NTc2ekhX +b2w0MA== + + diff --git a/Ch3/datasets/spam/spam/00242.e030c8b1f053037aeffb062f3a34b523 b/Ch3/datasets/spam/spam/00242.e030c8b1f053037aeffb062f3a34b523 new file mode 100644 index 000000000..d740c9cf8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00242.e030c8b1f053037aeffb062f3a34b523 @@ -0,0 +1,45 @@ +From tobaccodemon@terra.es Sat Sep 7 22:05:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 8AA5916F7A + for ; Sat, 7 Sep 2002 21:57:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 07 Sep 2002 21:57:51 +0100 (IST) +Received: from linux.local ([213.9.248.135]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g87CdAC18868 for ; + Sat, 7 Sep 2002 13:39:10 +0100 +Message-Id: <200209071239.g87CdAC18868@dogma.slashnull.org> +Received: (qmail 13816 invoked from network); 7 Sep 2002 12:30:20 -0000 +Received: from unknown (HELO h) (192.168.0.2) by linux.local with SMTP; + 7 Sep 2002 12:30:20 -0000 +From: "Sales Department" +Subject: Half Price Cigarettes and Tobacco +To: zzzz@dogma.slashnull.org +Sender: Sales Department +Reply-To: tobaccodemon@terra.es +Date: Sat, 7 Sep 2002 14:36:20 +0200 +X-Priority: 3 +X-Library: Indy 8.0.25 + + +Dear Sir or Madam + +In the past you have requested information on discounted products. We hope that you find this of interest. If you are not a smoker, and find this email offensive, we sincerely apologise! We will be only too happy to take you off our mailing list. + +If you are a smoker, however, and are fed up with paying high prices for your cigarettes and tobacco, take a look at what we have to offer by clicking on this link. +http://www.smokersunited.co.uk/?S=24&ID=2 + +We can send you, legally, by registered air mail, direct to your door, 4 cartons of cigarettes or 40 pouches of rolling tobacco (all brands are available) from only 170 Euros - about 105 pounds - fully inclusive of postage and packing. Why pay more? + +To remove yourself from our mailing list, please click below +mailto:smokersclub@terra.es + +Yours faithfully. +Smokers United +http://www.smokersunited.co.uk/?S=24&ID=2 + +xay1y + + diff --git a/Ch3/datasets/spam/spam/00243.c6e70273fe1cf9e56e26bb6bbeef415d b/Ch3/datasets/spam/spam/00243.c6e70273fe1cf9e56e26bb6bbeef415d new file mode 100644 index 000000000..babf2bc92 --- /dev/null +++ b/Ch3/datasets/spam/spam/00243.c6e70273fe1cf9e56e26bb6bbeef415d @@ -0,0 +1,106 @@ +From ilug-admin@linux.ie Sat Sep 7 22:05:55 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 6A10D16F03 + for ; Sat, 7 Sep 2002 21:57:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 07 Sep 2002 21:57:49 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g87AnAC15095 for + ; Sat, 7 Sep 2002 11:49:10 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id LAA29895; Sat, 7 Sep 2002 11:48:37 +0100 +Received: from [201.187.11.125] (sw59-152-110.adsl.seed.net.tw + [61.59.152.110]) by lugh.tuatha.org (8.9.3/8.9.3) with SMTP id LAA29871 + for ; Sat, 7 Sep 2002 11:48:19 +0100 +Date: Sat, 7 Sep 2002 11:48:19 +0100 +From: vcqztr_2gk1525@deutsche-bank.de +X-Authentication-Warning: lugh.tuatha.org: Host sw59-152-110.adsl.seed.net.tw + [61.59.152.110] claimed to be [201.187.11.125] +Received: from 5cpfcn by [201.187.86.125] with SMTP (MDaemon.v2.7.SP4.R) + for ; Tue, 27 Aug 2002 01:35:53 +0800 +Received: from login_0216.mailservice.net (mx.service.net[206.232.231.77] + (may be forged)) by [192.201.131.147] (8.8.5/8.7.3) with SMTP id XAA05533 + for ; ¬P´Á¤G, 27 ¤K¤ë 2002 01:50:37 -0700 (EDT) +To: +Reply-To: receive_adm@topservice.net +X-Pmflags: 10326341.10 +X-Uidl: 10293217_192832.222 +Comments: Authenticated Sender is +Message-Id: <39895881_74317521> +X-Mdaemon-Deliver-To: ilug@linux.ie +X-Return-Path: vcqztr_2gk1525@deutsche-bank.de +Subject: [ILUG] ¯Â°Ó·~¿ì¤½«Ç¥X¯² +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + + + + ********************** + ¯Â°Ó·~¿ì¤½«Ç¥X¯² + ********************** + + ±MªùªA°È°Ó¥Î¿ì¤½«Ç¤§©Ó¯²¤H¡C + + ¥x¥_¦Uµ¥¯Å°Ó¥Î¿ì¤½«Ç®×¥ó¡A¾A¦X¦UºØ°Ó·~»Ý¨D¡I¡I + + §Ú­Ì¾Ö¦³ºZ³qªº¸ê°T¡B¦³«Ü¦h¥ß§Y­n¥X¯²ªº¿ì¤½«Ç¡A¥¿µ¥«ÝµÛ±zªº¬D¿ï¡A + + ¤@©w­n¬°±z§ä¨ì¤@³B³Ì¾A¦X±z¹ê²{±z¶¯¹Ï§§§Óªº³õ©Ò¡I¡I¡I¡I + + Á|¨Ò¦p¤U¡G + + °Ï°ì¡G + + ¤j¦w°Ï¡G ¤¯·R¸ô¡B´°¤Æ«n¡B¥_¸ô + 50-300©W¡]¯²ª÷1200-2500¤¸¡^¡B + ¯Â¿ì®ð¬£¤j¼Ó¡A²{¦¨¦Ê¸U¸ËæC¡]§K³»Åýª÷¡^¡B + °¨¤W¥i¨Ï¥Î + + «H¸q°Ï¡G «H¸q¸ô¤@¡B¤G¡B¤T¡B¥|¡B¤­¬q¡C + 30-500©W¡]1200-2100¤¸¡^ + ¥þ·s®ð¬£¤j¼Ó¡Bªñ±¶¹B¯¸¤f¡B¥æ³q¤è«K + ¡]¯²ª÷¦X²z¡B¥i­±Ä³»ù¡^ + + ªQ¤s°Ï¡G «n¨ÊªF¸ô¤T¡B¥|¡B¤­¡B¬q + 30-450©W¡]¯²ª÷1000-1800¤¸¡^ + ®ð¬£¡B´ºÆ[µ´¨Î + + ¤¤¤s°Ï¡G ªQ¦¿¸ô¡Bªø¦wªF¸ô¡A¤¤¤s¥_¸ô + 70¢w400©W¡]¯²ª÷1000-2200¤¸¡^ + ¯Â¿ì¡B²{¦³¸ËæC + + ¦è °Ï¡G ©¾§µ¦è¸ô¡BÀ]«e¸ô¡B©Ó¼w¸ô¡B¿Å¶§¸ô + 50-500©W + ¦Ê¸U¸ËæC¡B«K©y¥X¯²¡]Åwªï¬Ý«Î¡^ + + ¤º´ò°Ï¡G ­«¹º°Ï + 80-500©W1300¤¸°_¡C½Ð§â´¤¨}¾÷ + ¥þ·s®ð¬£¤j¼Ó¡B²{¦³¸ËæC¡B°¨¤W¥i¨Ï¥Î + + + ªA°È²Ä¤@¡A«~½è«OÃÒ¡CÅwªï¬¢¸ß. + + + ·ç°T¤£°Ê²£ °Ó¥ò³¡ + Ápµ¸¤H¡G³³¤p©j ·q¤W + TeL¡]¥Nªí¸¹¡^¡G 02-27492314 + ¦æ°Ê¹q¸Ü¡G0937063831 + + + ±zªºº¡·N¡A¬O§Ú­Ìªº¦¨´N¡I¡I¡I¡I + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00244.5cac9708afd7f9f00e9bf64eeb127f0a b/Ch3/datasets/spam/spam/00244.5cac9708afd7f9f00e9bf64eeb127f0a new file mode 100644 index 000000000..4043822b6 --- /dev/null +++ b/Ch3/datasets/spam/spam/00244.5cac9708afd7f9f00e9bf64eeb127f0a @@ -0,0 +1,74 @@ +From webmake-talk-admin@lists.sourceforge.net Sun Sep 8 00:29:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id F0AC616F16 + for ; Sun, 8 Sep 2002 00:29:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 08 Sep 2002 00:29:53 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g87NSqC04639 for ; Sun, 8 Sep 2002 00:28:52 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17np0i-00029d-00; Sat, + 07 Sep 2002 16:29:04 -0700 +Received: from abn130-247.interaktif.net.tr ([195.174.130.247] + helo=webman.ttnet.net.tr) by usw-sf-list1.sourceforge.net with smtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17np0M-0007R0-00; Sat, 07 Sep 2002 16:28:43 + -0700 +From: "GREENCARD TÜRKÝYE SERVÝSÝ" +To: webmake-talk@example.sourceforge.net +X-Mailer: Microsoft Outlook Express 5.00.2919.7000 +MIME-Version: 1.0 +X-Precedence-Ref: 12340 +Message-Id: +Subject: [WM] GREEN CARD CEKÝLÝSÝ KACIRMAYIN +Sender: webmake-talk-admin@example.sourceforge.net +Errors-To: webmake-talk-admin@example.sourceforge.net +X-Beenthere: webmake-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion of WebMake. +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 7 Sep 2002 16:28:40 -0700 +Date: Sat, 7 Sep 2002 16:28:40 -0700 +Content-Type: text/html; charset="windows-1254" +Content-Transfer-Encoding: quoted-printable + +=3C!DOCTYPE HTML PUBLIC =22-=2F=2FW3C=2F=2FDTD HTML 4=2E01 Transitional=2F=2FEN=22=3E +=3Chtml=3E +=3Chead=3E +=3Ctitle=3EGREEN CARD=3C=2Ftitle=3E +=3Cscript=3E + +function Go=28=29 +{ +window=2Elocation=3D=22http=3A=2F=2Fwww=2Eyesilkart=2Eorg=2Findex=2Ephp=3FWho=3D19=22=3B +} + =3C=2Fscript=3E +=3C=2Fhead=3E +=3Cbody ONLOAD=3D=22Go=28=29=22 =3E +=3C=2Fbody=3E +=3C=2Fhtml=3E + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +webmake-talk mailing list +webmake-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/webmake-talk + + diff --git a/Ch3/datasets/spam/spam/00245.f129d5e7df2eebd03948bb4f33fa7107 b/Ch3/datasets/spam/spam/00245.f129d5e7df2eebd03948bb4f33fa7107 new file mode 100644 index 000000000..9f146126b --- /dev/null +++ b/Ch3/datasets/spam/spam/00245.f129d5e7df2eebd03948bb4f33fa7107 @@ -0,0 +1,192 @@ +From nobody@sourceforge.net Sun Sep 8 00:29:28 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id EC6FA16EFC + for ; Sun, 8 Sep 2002 00:29:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 08 Sep 2002 00:29:10 +0100 (IST) +Received: from usw-sf-netmisc.sourceforge.net + (usw-sf-sshgate.sourceforge.net [216.136.171.253]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g87M0QC02022 for ; + Sat, 7 Sep 2002 23:00:26 +0100 +Received: from usw-sf-web3-b.sourceforge.net ([10.3.1.23] + helo=usw-sf-web3.sourceforge.net) by usw-sf-netmisc.sourceforge.net with + esmtp (Exim 3.22 #1 (Debian)) id 17nndG-0004nN-00 for ; + Sat, 07 Sep 2002 15:00:46 -0700 +Received: from nobody by usw-sf-web3.sourceforge.net with local (Exim 3.33 + #1 (Debian)) id 17nndG-0005Q3-00 for ; Sat, 07 Sep 2002 + 15:00:46 -0700 +To: zzzz@spamassassin.taint.org +Subject: LIE`S, MIS-INFORMATION and FRAUD +From: ROBERT MOORE M P +Message-Id: +Date: Sat, 07 Sep 2002 15:00:46 -0700 + + +Sent e-mail message + +From: enenkio@webtv.net (Robert Moore) Date: Thu, Sep 5, 2002, 8:36am To: UlafalaA@forumsec.org.fj Subject: HAWAI`I & ENENKIO KINGDOMS AMERICANS SHAME ! +Sent e-mail message +From: enenkio@webtv.net (Robert Moore) Date: Thu, Sep 5, 2002, 4:10am +To: webmaster@cwis.org Subject: HAWAI`I & ENENKIO KINGDOMS AMERICANS +SHAME ! +Sent e-mail message +From: enenkio@webtv.net (Robert Moore) Date: Tue, Sep 3, 2002, 6:55pm +To: rbernardo@starbulletin.com Subject: Hawaii & EnenKio Kingdoms +Americans Shame ! +Sent e-mail message +From: enenkio@webtv.net (Robert Moore) Date: Thu, Aug 29, 2002, +10:05am To: doswork@uic.edu Subject: HAWAI`I & ENENKIO KINGDOMS AMERICANS SHAME ! +Sent e-mail message +From: enenkio@webtv.net (Robert Moore) Date: Mon, Aug 26, 2002, 4:12pm +To: web@jefren.com Subject: HAWAI`I & ENENKIO KINGDOMS AMERICANS SHAME ! +Reply From EnenKio +The following message was recieved Saturday, 13 July 2002. Nothing has been amdended or changed. I hold no responcibility for the content of this message. +Subject: EnenKio truth (Answers) +Date: Sat, 13 Jul 2002 23:51 EST +From: enenkio@webtv.net (Robert Moore) +To:microfreedom@netscape.net +"EnenKio truth (Answers)" +- News Archives - +PREVIOUS NEWS RELEASES AND ANNOUNCEMENTS July 28, 1999: Replies to Asia Times +July 22, 1999: News Release - Gold Bonds June 4, 1999: Replies to Published Articles June 3, 1999: Replies to Published Articles June 2, 1999: Replies to Published Articles June 1, 1999: News Release, Reply to RMI, Part 1 June 1, 1999: News Release, Reply to RMI Part 2 March 16, 1999: News Release, Selection of Second Monarch March 1999 -- MoFA Comments on "State of War" December 19, 1998: News Release, Death of First Monarch July 14, 1998: Communiqué, Replies to False Claims May 4, 1997: News Release, Gold Stamps +March 31, 1997: News Release, Declaration of existence of a virtual "State of War" +February 6, 1995: News Release, Setting the Record Straight November 21, 1994: News Release, Declaration of Claim & Demand for Payment RETURN TO NEWS +Previous News Releases and Announcements Their statements are set forth in italicized orange type; our replies are in black type. June 4, 1999- Sirs: The following text was located on a site written or placed by you or under your control: +"DOM is located on Karitane Island and now includes the Taongi Atoll in the Northern Atolls of the Marshall Islands in the South Pacific 1000 miles south of Tahiti. However, the Marshall Islands government has condemned the "fraudulent assertions" of two organizations, namely the DOM and sister nation, the Kingdom of EnenKio (the Marshallese name for Wake Island), claiming to represent the mid-Pacific nation amid an alleged investment scam according to an article in Agence France- Presse. The Marshall Islands foreign ministry has issued warnings to countries against acknowledging any fraudulent claims made by representatives of either nation." +"A Honolulu-based attorney created the "Kingdom of EnenKio" in the early 1990s. It was based on a power of attorney agreement with Marshall Islands paramount chief Mursel Hermios, which granted the attorney broad powers to act on his behalf. The Marshall Islands High Court has ruled the agreement invalid and ordered it nullified, which the "kingdom" has disputed." http://www.goldhaven.com/issue4/Two.htm (disconnected as of 2/1/00) +The purpose of this letter is lodge a formal request for correction of false and misleading statements made by the author regarding the Kingdom of EnenKio. While I am pleased to find you have apparently taken a serious interest in the Kingdom of EnenKio, I am aghast at how distorted, erroneous and misleading the article is. As a consequence of my service to His Majesty King Remios and the people of EnenKio, I am obligated to respond to incidents such as this. I will respectfully offer the following line by line correction. For your convenience, your text will be set off (with "**") in color: **DOM is located on Karitane Island and now includes the Taongi Atoll in the Northern Atolls of the Marshall Islands in the South Pacific 1000 miles south of Tahiti.** (Comment: The construction of this statement implies the Marshall Islands are in the South Pacific Ocean 1000 miles south of Tahiti, in which case a reader may be misled.) +Correction: DOM is located on Karitane Island in the South Pacific, 1000 +miles south of Tahiti, and now includes Taongi Atoll in the Northern Atolls of the Marshall Islands in the North Pacific. **However, the Marshall Islands government has condemned the "fraudulent assertions" of two organizations, ...** +(Comment: Just because the RMI government "...has condemned the 'fraudulent assertions' ...of ...EnenKio...", does that make it true? Why would you want to quote anything from a government that has been internationally criticized [and documented] time and again for fraud, abuse of human rights, outright theft and is in default on almost every financial obligation it has ever made? What purpose do you propose to serve by attacking a concerned group of dedicated people fighting for the very lives of Marshallese natives who have been overrun by foreign invaders, bathed in radiation from nuclear fallout and abused by their own corrupt government?) +**...namely the DOM and sister nation, the Kingdom of EnenKio (the Marshallese name for Wake Island),...** +(Comment: Nothing could be further from the truth. we cannot speak for DOM, but as for the Kingdom, we don't even know what being a "sister nation" means and for you to make this categorically false statement is not only a blatant sign of ignorance of the state of EnenKio, it is a deceptive intrusion upon the sovereign, His Majesty King Remios, the sovereign of EnenKio and Eneen-Kio Atoll, and an inexplicable and irresponsible abuse of journalism. Doesn't anybody check sources anymore?) +Correction: The Kingdom of EnenKio is an independent sovereign state and +the same could be said for DOM. +**...claiming to represent the mid-Pacific nation amid an alleged investment scam according to an article in Agence France- Presse.** (Comment: The government of the Kingdom of EnenKio represents the people of EnenKio, who are forced to live in exile from Eneen-Kio Atoll, lands and seas that played a significant role in Marshallese culture for perhaps 2000 years. Furthermore, "...an article in Agence France-Presse" has no merit as it was authored by a source in the Marshall Islands government. My preceding comments apply. The Kingdom of EnenKio is not now and never has been engaged in an "...investment scam...". We have tried for many years to attract qualified investors and funding sources for programs that will not only benefit the people of EnenKio, but also will positively impact people around the globe. In fact, we are currently working with a former NASA Astronaut. One tool scammers have in their arsenal is to discredit visionary programs of legitimate entities so they can feed on carcasses of the ignorant. Many journalists use the same technique to sell their stories on sensationalism. Doesn't anybody check sources anymore?) +**The Marshall Islands foreign ministry has issued warnings to countries against acknowledging any fraudulent claims made by representatives of either nation.** +(Comment: The Kingdom of EnenKio has made no "fraudulent claims" of which I am aware, and in my post, I am responsible for all published information. I would personally caution any "..countries against acknowledging any fraudulent claims made by representatives of..." nations, companies or publications if I had credible proof to that effect. However, my preceding comments apply as to credibility of any RMI ministry source. Furthermore, the RMI has repeatedly attacked the credibility of His Majesty King Hermios, who happens to be the ancestral sovereign owner under Marshallese custom of over 1/3 of the land in the Marshall Islands, including recent attempts to sequester him against his will. We believe some officials in the RMI are afraid of what will happen to them if honesty and integrity returns to the administration of lands and programs to assist the people with their pressing needs and they no longer have their hands on the till. To perpetrate their jaundiced agenda is an irresponsible abuse of journalism.) **A Honolulu-based attorney created the "Kingdom of EnenKio" in the early 1990s.** +(Comment: Mr. Moore is not an Attorney, though he was living in Honolulu in the early 1990s.) +Correction: The Kingdom of EnenKio was established by decree of the +owner of Eneen-Kio Atoll [a.k.a. Enen-kio, Halcyon, Disclerta, Wake and 6-8 other names], Iroijlaplap Murjel Hermios, who then was Paramount Chief of the Northern Ratak atolls [he passed away in December 1998] and was fully recognized by the RMI government. He declared the sovereign state of EnenKio in 1994, whereupon the people chose him as their King over Eneen-Kio Atoll, ratified the Constitution and established government as a limited constitutional monarchy. **It was based on a power of attorney agreement with Marshall Islands paramount chief Mursel (sic) Hermios, which granted the attorney broad powers to act on his behalf.** +Correction: The establishment of the Kingdom of EnenKio was made +possible by Murjel's appointment of Mr. Robert Moore, the adopted brother of Hermios, Alab of Taongi Atoll and a private citizen, to the post of Minister Plenipotentiary. The document of appointment was also a Special Power of Attorney which granted Mr. Moore very specific instructions to do whatever was possible to expel the United States from Eneen-Kio Atoll and establish an independent state on Hermios' and the people's behalf. +**The Marshall Islands High Court has ruled the agreement invalid and ordered it nullified, which the "kingdom" has disputed.** (Comment: Since when is a Special Power of Attorney an "agreement"? The Marshall Islands High Court has no record or knowledge of the Special Power of Attorney, except as has been publicized by the Kingdom of EnenKio, and certainly exercises no jurisdiction over Eneen-Kio Atoll, which lies over 100 miles north of lawful RMI boundaries. The RMI has no political or territorial jurisdiction over the islands and seas of Eneen-Kio Atoll because the atoll, by any name you choose, was not incorporated into the RMI when it formed its government in 1979, nor was it subsequently incorporated by any act, law, mandate or otherwise of any present or former Iroijlaplap or Monarch of Eneen-Kio and any statement to the contrary is false, fraudulent and irresponsible.) Finally, I suggest you, as a journalist or publisher, do a little more research, not only into establishment and development of the Kingdom of EnenKio, but into the prehistoric history and more recent U.S. invasion of Eneen-Kio Atoll, properly named by 'Marshallese' centuries before arrival of colonial western powers and missionaries. Then I invite you to our Embassy in Honolulu to review the public files and documents mentioned above, all of which exist in hard copy (not in 'cyberspace') and most of which are referenced or published at our official web site. Be sure to view the documents at our Resource Center which show, in many cases, full-color digitized letters of correspondence with the 59 or so states in the world, many of which are first world. In closing, I would simply appeal to your presumed sense of morality and ethics and request the referenced article be amended or corrected and , if corrected elsewhere, that a link be provided to the relevant paragraph cited above in the article. +SKIP TO NEXT FILE  TOP OF PAGE +June 3, 1999- Sir: The following report was sent to me in which the author mentions the Kingdom of EnenKio (thank you for spelling 'EnenKio' correctly. The purpose of this letter below is to lodge a formal request for correction of false and misleading statements made by the author regarding the Kingdom of EnenKio. +"Fantasy Island" -- "Melchizedek passport scam reveals how the Internet can take fraud to new frontiers" By Bertil Lintner in Bangkok, December 10, 1998: "Determined not to give up, Pedley moved his fictional nation once again, this time to Taongi atoll in the Western Pacific. According to a Melchizedek press release, posted on its home page, Taongi was leased in 1997 under a treaty with representatives of "the kingdom of EnenKio," another only-in- cyberspace country, which in this case claims the U.S.-held Wake Island. In real life, Taongi is an uninhabited atoll in the Marshall Islands." +http://www.feer.com/Restricted/index_corrections.html (link to article of December 24, 1998: "Fantasy Island", disconnected as of 2/1/00) Response to the author: I am unable to locate the "Melchizedek press release" you cited, indicating that "...Taongi was leased in 1997 under a treaty with representatives of "the kingdom of EnenKio,...". Such an act would be impossible and implausible as EnenKio has no legal authority or political jurisdiction over Taongi Atoll in the Marshall Islands. Further more, Melchizedek (DOM) is not so uninformed as to publicly advertise an illegal act in the midst of attempting to find a suitable land base for its people to administer their form of government. +The Kingdom of EnenKio did enter into a treaty with DOM on the 19th day of September, 1997, but it did not convey a lease of land. It declared a state of peace and established diplomatic recognition between our governments. However, a prior agreement, signed in May 1997, which had nothing to do with the Kingdom of EnenKio, transferred Mr. Robert Moore's rights to develop Taongi from Mr. Moore to DOM. It did not convey a lease at that time and no such document is in existence. This was made possible because Mr. Moore is the Alab (one class of landowner) of Taongi and had a legal power of attorney pertaining to Taongi Atoll, from the principal landowner, Iroijlaplap (Paramount Chief) Murjel Hermios, who was aware of and supported the transaction. Consideration, if any, under the agreement was personally retained by Mr. Moore, who is also the adopted brother of Hermios. Now, please understand, that while Mr. Moore was acting in the latter case on his own behalf, and that of the future use and development of Taongi, which would have generated an income to Iroijlaplap Hermios, Mr. Moore wears another hat as Minister Plenipotentiary of the Kingdom of EnenKio. Iroijlaplap Hermios, also wore (he died in December 10, 1998, the same date of your article) other hats: one as First Monarch, King of the Kingdom of EnenKio and one as owner in allodium of Eneen-Kio Atoll (a.k.a. Enen-kio, Halcyon, Disclerta, Wake and several other names). For you to state the Kingdom of EnenKio is "...another only-in- cyberspace country...", as you did in the above article, is not only a completely and categorically false statement, but it is a blatant sign of ignorance of the state of EnenKio. And, it is a blatant deceptive intrusion upon His Majesty King Hermios, the sovereign of EnenKio and Eneen-Kio Atoll, and an inexplicable and irresponsible abuse of your journalistic license -- unless, of course, your statement could be proved accurate. I suggest you do a little more research, not only into the establishment and development of the Kingdom of EnenKio, but into the prehistoric history and more recent U.S. invasion of Eneen-Kio Atoll, properly named by 'Marshallese' centuries before arrival of colonial western powers and missionaries. Then I invite you to our Embassy in Honolulu to review the public files, all of which exist in hard copy (not 'cyberspace') and most of which are referenced or published at our official web address: Be sure to view the documents at our Resource Center which show, in many cases, full-color digitized letters of correspondence with the 59 or so states in the world, many of which are first world. In closing, I would simply appeal to your presumed sense of morality and ethics and request the referenced article be amended or corrected and that the link be added to the relevant paragraph cited above in the article. SKIP TO NEXT FILE  TOP OF PAGE +June 2, 1999- Sir: The following statement (in quotes) was copied from one of your Footnotes to History -D and E (disconnected as of 12/1/00). "Enenkio Atoll- In 1898, the United States annexed Wake Island, in the Marshall Islands of the western Pacific. After the Marshalls became a U.S. Trust Territory, the traditional chiefs of the area agitated for recognition that Wake Island was a part of the Marianas chain, and pressed their historical claims to the atoll, called Enenkio locally. The U.S. government has consistently ignored these claims. The protests took a sharper turn after the U.S. Congress in 1993 acknowledged the illegality a hundred years earlier of the establishment by Americans of the Republic of Hawai'i. King Murjel Hermios, who is paramount chief of an archipelago in the northern Marshalls, declared Wake Island's independence in 1987. The Marshalls recognized this claim shortly after the nation gained its independence. In return for his services as Minister Plenipotentiary in the United States, Hermios granted American businessman Robert Moore land on Taongi Atoll in the northern Marshalls, which Moore has declared the Dominion of Melchizedek." Comment: With all candor, I cannot figure how such straight forward facts such as we have presented to the public and over the Internet since 1994 could have possibly been construed into the above referenced text. While I am pleased to find you have apparently taken a very serious interest (unless your site is intended as some twisted joke, which I am assuming is not the case) in the history of the Kingdom of EnenKio, I am aghast at how distorted, erroneous and misleading your summary is. As a consequence of my service to His Majesty King Remios and the people of EnenKio, I will respectfully offer the following line by line correction. For your convenience, your text will be set off (with "**") in color: +**In 1898, the United States annexed Wake Island, in the Marshall Islands of the western Pacific.** +Correction: In 1898, the United States invaded Wake Island, the +northernmost atoll -- actually named Eneen-Kio centuries before western explorers arrived -- of the Ratak chain of Marshall Islands in Micronesia and the Central North Pacific Ocean. The Author responds: "Rest assured that I did not mean to downplay the role of violence in the American acquisition of the territory." **After the Marshalls became a U.S. Trust Territory, the traditional chiefs of the area agitated for recognition that Wake Island was a part of the Marianas chain, and pressed their historical claims to the atoll, called Enenkio locally.** Correction: Following W.W.II, the Trust Territories of the Pacific, which included the Marshall Islands, was placed under administration of the United States by the United Nations. While Eneen-Kio was well established as one of the Marshalls, the U.S. only knew it as Wake and, having lost many U.S. lives there in 1941 at the hands of Japanese invaders, kept control of it. In 1993, the Paramount Chief of the Ratak atolls pressed his clan's historical and lawful claim to the 3 islands of Eneen-Kio Atoll. +The Author responds: "I don't see much conflict between the two versions here." +**The U.S. government has consistently ignored these claims.** Correction: The U.S. government has consistently ignored claims from the Marshall Islands government, which failed to exert a claim during its move to independence in 1979, and from the former traditional landowners, including Iroijlaplap Murjel Hermios. The Author responds: "I will note this." **The protests took a sharper turn after the U.S. Congress in 1993 acknowledged the illegality a hundred years earlier of the establishment by Americans of the Republic of Hawai'i.** Correction: The Eneen-Kio claims gained some new momentum after precedents were set by the U.S. Congress, when in 1993 they acknowledged the illegality of the 1893 overthrow of the Monarch of the Kingdom of Hawai'i by a group of American businessmen and U.S. Marines, and in the following year returned the island of Kaho'olawe to the Hawaiian People. **King Murjel Hermios, who is paramount chief of an archipelago in the northern Marshalls, declared Wake Island's independence in 1987.** Correction: King Murjel Hermios, who was Paramount Chief until his death in December 1998, declared the sovereign state of EnenKio in 1994, whereupon the people chose him as their King over Eneen-Kio Atoll, ratified the Constitution and established government as a limited constitutional monarchy. +The Author responds: "I will make the necessary corrections here." **The Marshalls recognized this claim shortly after the nation gained its independence. In return for his services as Minister Plenipotentiary in the United States, Hermios granted American businessman Robert Moore land on Taongi Atoll in the northern Marshalls, which Moore has declared the Dominion of Melchizedek.** +Correction: After the death of the First Monarch, his brother Remios +succeeded to the throne as Second Monarch and rules along with his brother, Crown Prince Lobadreo, over the Kingdom of EnenKio today. To continue the commentary: The parts left out were either wrong or have nothing to do with the history of the Kingdom of EnenKio itself. Since HM King Remios also succeeded to Iroijlaplap of the northern Ratak atolls of the Marshall Islands, he also has responsibilities over 10 atolls, 2 islands and over 300 atoll islets. But that is another story, which has nothing directly to do with the Kingdom of EnenKio. I have offered this treatise in hopes that you will find the time to correct your site per my suggestions. Please feel free to contact me or view our pages at the address above. Thank you in advance for your attention and interest in this matter. +The Author responds: "I imagine that you are asserting here that Moore's Melchizedek project (which can be located on the web through the Sources & Bibliography section of my web page) is non-existent. Be assured I will look further into\par this. Thank you again for your response, Captain Rydell. I should be posting a revised version of the page in the next week or so." (June 7, 1999) +SKIP TO NEXT FILE  TOP OF PAGE +June 1, 1999: News Release +Part One Background: +On May 21, 1999, the Ministry of Foreign Affairs and Trade of the Republic of the Marshall Islands posted a "press release" on the Internet at: http://www.yokwe.net/mboard/newsinfo/thread.cgi?67,0\cf0 (discontinued as of 12/1/00). The author, "Mr. Joseph Biglar, Undersecretary", is not known to us, has not heretofore communicated with the government of the Kingdom of EnenKio, nor with its Monarch, His Majesty King Remios, at any time and has no knowledge of any policies or state activities of EnenKio. There is no valid reason to assume that the said "press release" is indeed an official document. The Republic of the Marshall Islands has perfect knowledge that representatives of the Kingdom of EnenKio, headed by His Majesty King Remios, on the basis of his proper and lawful authority, have the right and obligation to speak in support of the interests of certain persons, many of whom happen to be Marshallese nationals residing in the Marshall Islands. Response to so-called "Press Release": +This unprovoked attack upon His Majesty King Remios, Monarch of the Kingdom of EnenKio, by the Ministry of Foreign Affairs and Trade of the Republic of the Marshall Islands is wholly false. It is also unjustifiably inflammatory and amounts to little more than an unquestionable confirmation of the predilection for infringement upon Marshallese sovereign rights exercised by the current administration of the Republic of the Marshall Islands, which has been confirmed by the U.S. State Department. (See: Human Rights Report) This public posting shall serve as constructive notice to the Marshall Islands Government that any attempt to interfere in the business of His Majesty King Remios, Iroijlaplap of the Northern Ratak atolls of the Marshall Islands, or any acts, decisions, mandates, announcements or directives thereby, shall be met with definitive responses equal to the degrees of contravention. +The RMI is unequivocally cognizant that the Kingdom of EnenKio: » » exists as a sovereign state as defined by the Montevideo Convention (1933). +» » was conceived as a separate independent state by its sovereign, +Iroijlaplap Murjel Hermios, in 1987. +» » was established by way of a public authority, the Constitution +of the Kingdom of EnenKio Atoll, ratified in 1994 by its people. » » has negotiated diplomatic and trade treaties with many other states, including the Dominion of Melchizedek » » has asserted political and territorial jurisdiction over islands and seas which lie entirely outside and well beyond the area defined as +- now quoting Mr. Biglar's statement - "RMI geographical and political +boundaries." +» » exercises authorities founded upon prehistoric traditional and +matriarchal ancestral rights and titles bestowed, under the sacred heritage of Marshallese customary law (reinforced by the RMI Constitution), upon the acknowledged Iroijlaplaps of the Northern Ratak atolls, whose authority is certainly not subject to scrutiny by Ministry of Foreign Affairs and Trade of the Republic of the Marshall Islands. » » has not subjugated, assigned or encumbered any of its political +jurisdiction within its defined territorial boundaries of islands and seas of Eneen-Kio Atoll to the government or people of the Dominion of Melchizedek or to any other entity, including the Republic of the Marshall Islands. +Mr. Biglar is unequivocally cognizant that the Republic of the Marshall Islands: +» » also exists as a sovereign state, defined by the Montevideo +Convention (1933). +» » was conceived as a separate state by (UN) foreign governments, +which included the United States, China and the USSR. » » was also established under a public authority, the Constitution of the Marshall Islands, ratified in 1979 by its people. » » has no relations with EnenKio that allows RMI knowledge of anything that is not also public information and no such public information respecting relations with the Dominion of Melchizedek has ever been disseminated to harm the RMI to be condemned by Mr. Biglar. » » has no political or territorial jurisdiction over the islands and seas of Eneen-Kio Atoll, which was not incorporated into the RMI in 1979, nor subsequently incorporated by any act, law or mandate of any present or former Iroijlaplap or Monarch thereof and any statement to the contrary is fraudulent, as in the instant matter. » » exercises authorities founded upon the RMI Constitution, which does not incorporate nor authorize political jurisdiction over territorial boundaries that include the islands or seas of Eneen-Kio Atoll and any statement to the contrary is fraudulent, as in the instant matter. » » has refused to acknowledge the leadership of the Kingdom of +EnenKio in their every attempt to get the RMI government to mitigate the suffering of people residing in the Ratak atolls, under jurisdiction of Iroijlaplap Hermios, and the RMI has rejected every suggestion to coordinate prospective relief efforts through the said Iroijlaplap Hermios. +The Ministry of Foreign Affairs and Trade of the Republic of the Marshall Islands is steadfastly advised that any unilateral statements or actions by the administration of the Republic of the Marshall Islands which purport, seek or serve to diminish or question the credibility, existence or authority of the government of the Kingdom of EnenKio in the conduct of its affairs of state, without legitimate authentication by a court of competent jurisdiction, are hereafter to be taken as deliberate acts of aggression upon the Monarch of the Kingdom, His Majesty King Remios, as Head of State, the government of the Kingdom of EnenKio and its people, and will be countered with appropriate responsive measures. +Furthermore, in light of the Ministry of Foreign Affairs and Trade of the Republic of the Marshall Islands announcement concerning the Kingdom of EnenKio, your attention is respectfully directed to the following statement in the Preamble of the Constitution of the Marshall Islands, then you decide for yourself: +"With this Constitution, we affirm our desire and right to live in peace and harmony, subscribing to the principles of democracy, sharing the aspirations of all other peoples for a free and peaceful world, and striving to do all we can to assist in achieving this goal." On behalf of His Majesty King Remios, we, administrators of the Kingdom of EnenKio, have wholeheartedly agreed to pursue the same goal for a free and peaceful world and have made no effort to the contrary. (See also: Report on RMI Mismanagement) +SKIP TO NEXT FILE  TOP OF PAGE +News Release, Part Two, June 1, 1999 +Part Two Background: +The International Narcotics Control Strategy Report, 1998 (click on reference # 2 below) released by the Bureau for International Narcotics and Law Enforcement Affairs, U.S. Department of State, Washington DC, February 1999, states as follows: +"Where Are OFCs Located? +[Paragraph 4] Thus, it is now possible for an enterprising jurisdiction anywhere in the world to establish itself as an emerging OFC. The newest OFCs, e.g., Niue and the Marshall Islands, are now sprouting in remote areas of the world, such as the Pacific. Even more "remote" are mere figments of fertile imaginations such as the Dominion of Malchizedek (sic) or The Kingdom of Enenkio Atol (sic), both entirely fraudulent in intent and practice." [note: OFC = Offshore Financial Center] Response: This unprovoked attack upon His Majesty King Remios, Monarch of the Kingdom of EnenKio, the sovereign state of EnenKio and its noble citizenry by the U.S. Department of State is a reprehensible categorically false challenge of the sovereignty of the Kingdom of EnenKio. It is also unjustifiably inflammatory and amounts to an unqualified felonious defamation of the international reputation of His Majesty King Remios, the government of the Kingdom of EnenKio and organs thereof. +The unmitigated audacity and arrogance of the United States to attempt to link the Kingdom of EnenKio with International Crime, narcotics trafficking, money laundering, tax evasion, international drug cartels, terrorists, bank fraud or any other sort of criminal activity, without even one microscopic fragment of substantive evidence to corroborate such deliberately nefarious statements is reprehensible in the least. This public posting shall serve as constructive notice to the United States Government that any attempt to interfere in the business of His Majesty King Remios, Iroijlaplap of the Northern Ratak atolls of the Marshall Islands, or any acts, decisions, mandates, announcements or directives thereby, shall be met with definitive responses equal to the degrees of contravention. +Furthermore, this matter will not be resolved until the President of the United States issues a formal apology to His Majesty King Remios, along with the government of the Kingdom of EnenKio, and the Congress of the United States initiates a thorough investigation into the abuses of power, subversion of natural rights and illegal occupation by the United States of the islands and seas of Eneen-Kio Atoll. Congressional representatives to Hawaii, the nearest State of the United States to Eneen-Kio Atoll, and those of other states, have repeatedly been advised of the foregoing atrocities and conditions and have failed to respond in kind. The United States is obligated as the self-assured trustee of Pacific Island States in Micronesia to respond to the charges of "ethnic cleansing" and her responsibility to EnenKio is no less. For further information and links to documents, see: EnenKio Documents http://www.state.gov/www/global/narcotics_law/1998_narc_report/ml_intro.html http://www.state.gov/www/global/narcotics_law/1998_narc_report/index.html March 16, 1999: News Release +The impact of the passing on December 10 of His Majesty Murjel Hermios, First Monarch of the Kingdom of EnenKio, Iroijlaplap of the Northern Ratak Atolls of the Marshall Islands, beloved husband and father, was felt throughout the society.  Flags were flown at half mast for a week +in the Marshalls and for a a month at EnenKio Consulates around the world.  His remains were interred in a remote site reserved for the highest ranking chiefs, according to Marshallese custom.   His Majesty King Remios Hermios +Second Monarch of the Kingdom of EnenKio He was succeeded to the throne by his younger brother, Remios, who will formally accept the staff of authority as Second Monarch, titular Head of State of the Kingdom of EnenKio in ceremonies being planned.  His +Majesty Remios Hermios was a retired educator in the Marshalls and maintains a home in the Ratak Atolls. His successor is designated to be his brother, HRH Crown Prince Lobadreo Hermios. For further information, contact the State Secretary back on the home page. SKIP TO NEXT FILE  TOP OF PAGE +March 1999 -- Comments to readers from the Ministry of Foreign Affairs: Subject: A "State of War" Declaration The Kingdom of EnenKio recognizes that an unresolved conflict of interests exists between it and the United States Government.  The United States government, admittedly at a time of colonial expansionism, appears to have violated the laws of nature and The Law of Nations in "taking possession" of sovereign property in the Northern Ratak State, which then had formal treaties with the Republic of Germany.  The explicitly immoral and illegal 1899 seizure of Marshallese homeland by agents of the federal government was the start of present day sentiments of deprivation of rights and dispossession of lands felt by many Marshallese.  Because of continual neglect misrepresentation and outright exploitation, these scars on Marshallese society have not healed. Thus a current state of adversity exists.  Following four years of attempts to cause the United States to evaluate the plight of the Marshallese of the Northern Ratak imposed by its actions with respect to Wake Island, the government of EnenKio, on behalf of the Marshallese King, issued the "'State of War', a Declaration" and broadcast it to the world.  The people were displaced from their native lands and kept as virtual prisoners of war, not by virtue of being kept in, but by virtue of being kept out.  It was through this pragmatic initiative that the Kingdom of EnenKio solicited support to heal the wounds inflicted upon the people and peacefully restore what was wrongfully taken from the ancestors of the Ratak Paramount Chief, King Murjel Hermios. In retrospect, the Declaration has had little visible effect.  While a state of adversity does exist, the hope for American recognition of past wrongs remains on the horizon.  The Kingdom of EnenKio does not condone nor tacitly sanction any act of belligerence by any person or agent of any government.  Such unnecessary means would diminish any hope of mutual reconciliation and could diplomatically undermine the cause of peace within the family of nations.  The Kingdom of EnenKio also does not wish to see any further damage to the remnant happiness of the Marshallese people. +While the Kingdom of EnenKio continues to seek accountability of the U.S. Congress to obey its own laws, to conform to the UN Charter, conventions of the United Nations relating to self-determination, preservation of human rights and protection against human rights abuses, it believes accountability requires the U.S. to meet the pleas of the people oppressed by the conditions of this adversity.  The refusal of +the U.S. to meet its obligations, even to the extent that a simple discussion for resolution is held over the subject matter with representatives for the affected parties, perpetuates the adversity, turns a cold shoulder to the facts of abuse and ignores the rights of the Marshallese people to whom the U.S. pledged in good faith to execute the 1947 mandates of the United Nations and its members.  Your understanding is appreciated.  +SKIP TO NEXT FILE  TOP OF PAGE +December 19, 1998: News Release +Subject: Death of the Monarch of the Kingdom of EnenKio +The government has declared a period of national mourning on the occasion of the death of the first Monarch of the Kingdom of EnenKio, His Majesty King Murjel Hermios. Embassies, missions and regional posts are instructed to display the flag at half-staff until 11 January 1999. Memorial services, held in the Marshall Islands where HM Hermios made his home, mark the passing of one of the most unpretentious of traditional Marshallese leaders. His remains will be interred in a family plot on one of the outer islands he so loved. Irooj Hermios was Head of State of the Kingdom of EnenKio, revered as Monarch over the islands of Eneen-Kio Atoll, esteemed as Iroijlaplap and High Chief of the Northern atolls of the Ratak Archipelago, beloved as our brother and trusted as a friend. His successor as Iroijlaplap is to be formally named by a Council of traditional leaders. Selection of a successor to the Monarchy of the Kingdom is in process and will be announced at a later date. In the interim, a Reagent will serve as Head of State. HM Hermios followed a long line of matriarchal predecessors as Iroijlaplap. Aboriginal inhabitants of the islands today known as the Marshalls, part of Micronesia in the North Pacific Ocean and first discovered by European seamen in the 16th Century, were found to have a well-developed societal structure. Many nations have since, mostly by force, prevailed over the Marshall Islands, imposed unaccustomed western ideals upon her populace and ravaged her islands of resources and beauty. Today this area is commonly known as Wake atoll and is illegally occupied by the federal government of the United States. In one of the most courageous acts in recent times, Irooj Hermios clearly understood he had a mission to succeed where his predecessors in interest had failed to secure the islands, seas and lagoon of Eneen-Kio Atoll for his beloved people. (The account of his acts to establish the Kingdom of EnenKio as an island state, independent of the governments of the Marshalls and the United States, may be researched at the official Internet site. On behalf of the government of the Kingdom of EnenKio, we are extremely grateful for his dedication to the people of the Marshall Islands and are personally moved by the memory of a man who will surely one day be recognized as having a legacy of furthering the interests of his people by the setting of processes in motion to re-establish Marshallese domination over Eneen-Kio Atoll. We are saddened that our brother has passed without his seeing the fruits of his devotion to Marshallese ancestry and traditions. In lieu of flowers, mourners may contact the mission at the address above or call (808) 373-9254. Sincerest best wishes for the holiday season and the coming New Year are extended to all in Peace. News Article +SKIP TO NEXT FILE  TOP OF PAGE +July 14, 1998: Communiqué to Correspondents Recent articles defaming the government of the Kingdom of EnenKio have been maliciously published under the guise of a Marshall Islands government warning against "fraudulent claims". We have once more admonished the writer of the articles in the Marshall Islands for disregarding indisputable facts which clearly discredit his biased report. We urge you to disregard all discourse in the media regarding the Kingdom of EnenKio which are not validated. To that end, you are cordially invited to contact this office with your specific questions or concerns. For your advice, the following statement was issued by the State Secretary of the Kingdom in reply: The Kingdom has never knowingly made any fraudulent claim whatsoever. No claim we have made has ever been shown to be fraudulent, nor has any claim ever come under or faltered from a challenge by anyone anywhere in the world. We are working vigorously to regain occupation of the ancestral property of HM King Hermios, to resolve the virtual "state of war" that exists with the United States government and to be accepted as an honorable state among nations. +The Kingdom does not pretend to be (quoting from the report) "asserting authority over land ...within the geographical and political boundaries..." of the RMI. We are however striving to expel the armed imperialistic invasion forces of the United States from the shores of Eneen-Kio Atoll so natural Marshallese supremacy can be re-establish there. As to allegations of fraud and constitutional violation, no one has dared to come forward with any such a charge. We say, let the issue be played out in the People's venue for the record, not in a libelous weekly publication. While we do not wear our brief history on our shirtsleeves, our raison d'être is clearly mandated in the Preamble to +the Constitution of EnenKio, which can be seen at our web site: http://www.enenkio.wakeisland.org +Referencing the news article in the Marshall Islands Journal entitled "Kingdom of EnenKio sets up in New Zealand," of May 1st, the editor was advised, contrary to his report, that neither passports nor driver licenses can be purchased from the Kingdom's web site. The Kingdom of EnenKio DOES NOT SELL PASSPORTS! If you have evidence to the contrary, our Foreign Ministry would appreciate your furnishing it to them so steps can be taken immediately to investigate the matter. You are advised if anyone sells or offers to sell an EnenKio passport, that such an act is patently illegal. +The published statement, "The group ...claims to represent Iroijlaplap Murjel Hermios and the atolls of the Ratak chain...", is wholly false. I have explained this matter to the editor on several prior occasions and ample information is available at our Internet site to refute the statement. The Kingdom does not represent any area outside of its territorial boundaries, as the Ratak atolls surely are. Contrary to their libelous statements, the Kingdom of EnenKio was not "created" by Robert Moore and he is not a "Honolulu-based attorney." HM King Murjel Hermios is the acknowledged hereditary Iroijlaplap of the northern Ratak atolls and is also First Monarch of the Kingdom, not of his own choice, but by a legal process and free choice of our citizens who participated in the founding of the nation in 1994. Such a noble and peaceful beginning is not too uncommon in world history. "Enenkio" [sic] (actually Enen-kio or Eneen-Kio, in reference to the atoll itself) is the first Marshallese name for a Marshallese atoll located roughly 300 miles north of Bok-ak (Taongi) Atoll. "Wake" is a fictitious moniker applied to the re-discovered Eneen-Kio Atoll by unknown western society writers. +SKIP TO NEXT FILE  TOP OF PAGE +May 4, 1997: News Release +Subject: Issuance of Gold Stamps +The government of the Kingdom of EnenKio proudly announces commissioning of its Inaugural Issue of Gold Stamps. This announcement, made at the First Sunday Hawaii Stamp, Coin and Postcard Show May 4th, was the first pre-publication public notice of the issuance of Gold Stamps by the Kingdom. Stamps are expected to be off the presses by early June 1997. First day covers with new stamps affixed and postmarked official "First Day of Issue" by the Kingdom will be available for a limited time following the dates of release. Distributors, dealers and collectors are encouraged sign up as a charter member of the EnenKio Philatelic Mint mailing list. +BACKGROUND - The Kingdom was established in March 1993, and the government was chosen by the people, who then ratified the constitution in September 1994. However, due to U.S. military activities on the island and the presence of armed occupation forces, the government of the Kingdom lingers in "exile". Several nations have extended recognition of the sovereignty of the Kingdom, documents of citizenship are being issued and legations are located in Europe, South America, USA and elsewhere. +A NATION IN CONFLICT - The land in question, commonly known as Wake Island, is actually an atoll comprised of three small islands assigned names of westerners who visited them: Wake, Wilkes and Peale. Few people in the world today are aware that the native discoverers who named the atoll Eneen-Kio lived in the Marshall Islands, exercised constant jurisdiction and made regular use of it as a living food pantry and cultural site. By way of developing the atoll as a nation, the government is asserting that it is the indisputable holder of allodial title to "Wake" atoll and has the right to exercise its sovereignty at the will of the people. The United States of America began in a similar fashion not with a peaceful transition from colonial status. Lawful return of the land is grounded upon the legal precedent set by Congressional apology to Hawaiians for the 1893 overthrow of the Monarchy. +"STATE OF WAR" - By way of an official March 1997 Declaration sent to top U.S. officials, the Kingdom of EnenKio has acknowledged that a virtual "state of war" now exists over the islands on account of the blatant acts of aggression and illegal armed invasions by troops from United States warships. The primary objective of the notice was to request a Congressional investigation into actual events and related factors surrounding the federal seizure of islands in the North Pacific Ocean by the United States. Calls to end U.S. operations, vacate the atoll and negotiate return of the islands to jurisdiction of the Kingdom have fallen on deaf ears. Despite repeated notices, letters and legal advertising, all major news media have consistently ignored the events and failed in their duty bring forth the truth to the people of the world regarding alleged incidents of piracy, waste and human rights violations by federal agents of the United States government. INAUGURAL ISSUE - The Gold Stamps are based on events of the past and dreams for the future of peace in the global community as the millennium nears. For that reason, the universal gold standard was chosen as the basis for evaluation. Since the relative value of gold in world markets varies according to the value and stability of national currency units, the stamps will similarly reflect changes in price when purchased with any particular currency. However, the real or intrinsic value of the stamps will remain as constant as gold. The extrinsic value will be determined by philatelic collectors around the world. Note: Stamps are printed on paper stock, do not contain gold metal and are not intended for use as money. +CLOSING COMMENTS - The government of the Kingdom appeals to all people from every peaceable nation in the world to recognize the Kingdom of EnenKio as a sovereign nation promoting peace in the Pacific region. In doing so, it seeks a peaceful resolution o f the "state of war" with the federal government of the United States and asks that everyone with human rights concerns use their influence accordingly. The proceeds from the sale of Gold Stamps will help fund the restoration of the Kingdom and end the conflict in peace. +SKIP TO NEXT FILE  TOP OF PAGE +March 31, 1997: News Release +An official document entitled A Declaration, was sent March 22 to top Executive and Legislative officials in the federal government of the United States, including selected Cabinet members. The document asserts that: "A STATE OF WAR EXISTS OVER THE KINGDOM OF ENENKIO ATOLL BY WAY OF ACTS BY THE FEDERAL GOVERNMENT OF THE UNITED STATES." This is the most recent attempt to captivate the attention of the federal government. One of the primary objectives of this action is to bring about a Congressional investigation into the true events and factors surrounding the illegal seizure of islands in the North Pacific Ocean by the United States. +This latest position statement is one in a succession of dozens of disclosures, statements, letters and legal actions taken since the government of the Kingdom was established in March 1993, each with similar objectives. Calls for the U.S. to cease operations, vacate the premises, negotiate return of the island to the King, apologize and compensate him for use, abuse and illegal hold-over following legal action have all failed to receive cognizance or reply from the federal government. Likewise, despite repeated notices, letters and legal announcements, major news media have consistently ignored the events and failed in their duty bring forth the truth to the people of the world regarding the alleged piracy, arrogance and human rights violations by the United States. +The land in question, commonly called Wake Island, is comprised of three small islands, Wake, Wilkes and Peale, named by "Western explorers" for Western persons. What of the native discoverers? The crux of the issue is that despite the passage of ownership via a complex Matriarchal land tenure system for over two millennia with jurisdiction by the aboriginal chiefs of the Northern Ratak atolls of Marshall Islands, the United States seems to believe it is justified in having seized the atoll in 1898, and again in1899. Historical records reveal that the multiple landings by United States warships, en route to the Philippines on war missions, and subsequent Congressional action, were the sole basis of the U.S. claim. The motivation was said to be for the establishment of a cable station to improve communications with its marauding troops in the East. Such a station was never established at Wake Island. It was destined to become a military installation. +However, formal protests of the seizure was sent to the U.S. President by the German Consul in the Marshall Islands and some measure of correspondence followed. But since the U.S. abandoned the area without establishing a colony or cable station and Germany was defeated in the first World War, the objections fell into oblivion. It is understood from written accounts of oral Marshallese culture and traditions, that jurisdiction and use of the atoll by natives continued. The U.S. did not establish a settlement there until, under a lease in 1934, the CAA (predecessor of the FAA) allowed Pan American Airways to build a base for its fleet of trans-pacific seaplanes. Clearly, the so-called annexation by the U.S. is grossly flawed, the occupation patently illegal and its "ownership" is held therefore to be wholly invalid. When the U.S. Congress apologized for the overthrow of the Hawaiian Monarchy in 1993 and the U.S. Navy subsequently returned culturally significant land to the "natives" of Hawaii, a landmark legal precedent was thus set for comparable action with respect to the return of Wake Island. The islands of Eneen-Kio, as the northernmost atoll in the Ratak chain, played a very significant role in the culture and religion of Micronesians living in the more "hospitable" islands of the Marshall group. While not being used for Navy target practice as Kaho'olawe was, the use of the islands of Eneen-Kio Atoll and the military mission at Wake Airfield are decidedly without substantial merit and whereby activities take place in secrecy, devoid of scrutiny, oversight or quintessential knowledge by the American public. Even after cultural intervention in the mid 1800s by Christian Missionaries, natives continued to use Eneen-Kio, authority to go there being issued by the Ratak Iroijlaplap (Paramount Chief). King Murjel Hermios holds that title today. By way of developing the atoll in sovereignty as a nation, the government is thereby indisputable holder of the allodial title to Wake Island. The U.S. cannot produce a title. The Hermios ancestral lineage, passage of title through the ages from aboriginal inhabitants and discoverers, who gave the atoll its Marshallese name, their continual use and legacy of jurisdiction secures the rights of ownership. +Upon the basis of events and actions by the United States, the administration of the Kingdom of EnenKio, by virtue of the Declaration, "yields to the recognition that a State of War" exists over the island nation. This is not, however, to be viewed as a waiver of rights or unconditional surrender. Sovereignty and independence of the Kingdom, over all other claims, is forthrightly reasserted. The belief is that truth and law is on the side of the Kingdom and that reckless abuse of power and a trail of human rights violations are chronicled upon the record of U.S. "ownership" and occupation. Native North Americans are all too well acquainted with this brand of federal brutality when it comes to seizure of land and denial of rights. In the Declaration, demands are made as follows: » » "...to come to the table of peace to negotiate an honorable +accord for the survivors of the said STATE OF WAR...". » » "If unwilling to voluntarily negotiate for peace, to submit to Impartial international arbitration of the terms for surrender and WAR reparations to citizens." +» » "...to cease and desist, effective immediately, all and +every +action of every kind in or on EnenKio Atoll or within the 200-mile Exclusive Economic Zone..." +» » "...to pay that certain debt, perfected and established in commerce by failure the Department of the Interior » » "...to lawfully respond to proper legal notices of more than TWENTY-SEVEN consecutive months and most recently referenced by a Certified Invoice, No. 97-US-03, dated March 10, 1997, for which it is obligated to pay." » » That the "...Congress of the United States is obliged to immediately impanel an impartial body for the purpose of investigating the atrocities committed in the case of the violations of human rights and due process...". +The government of the Kingdom solicits every other sovereign peaceable nation in the world to give effective and adequate recognition to the Kingdom of EnenKio Atoll as an Independent Nation under God. It seeks a peaceful resolution of the state of war with the federal government of the United States and asks them to use their influence accordingly. Appeals are being made to the United Nations. News Article SKIP TO NEXT FILE  TOP OF PAGE +February 6, 1995: News Release +On behalf of His Majesty, King Murjel Hermios, Monarch of EnenKio Atoll, titular head of State, Paramount Chief (Iroijlaplap) of the northern atolls of the Ratak archipelago of Pacific Ocean Islands of the Marshall Islands, I bid you a warm Marshallese greeting -- Yokwe! The purpose of this notice is twofold: First, to admonish those of you to whom word of the referenced issues were made known, then failed to take action; Second, to encourage you to whom this presents to take appropriate action in disseminating reports on this issue. As long as you remain quiet, safely removed from the potential controversy insidiously lurking beneath the surface of one issue about which the federal government of the United States remains resolutely silent, your anonymity and that of your publication is well served. Summary of Events 1993-94: Two official press releases have been made regarding the establishment of a new island nation in the Pacific Ocean, EnenKio, formerly known as Wake Island. The first was issued on February 25, 1994. It followed two announcements: 1) officials of the US Air Force at Hickam AFB, Hawaii said in articles published New Year's Eve and Day in both Honolulu newspapers that the USAF no longer wanted to maintain Wake Island airfield and wanted to turn it over to Interior Department or another military organization by 1 February and abandon it by 1 October, 1994; +2) US Army Space and Strategic Defense Command of Huntsville, Alabama issued an Environmental Impact Assessment for a proposed missile launch program out of Wake Island; part of the "star wars" program, I am led to believe. +An emergency meeting of the leaders of the future nation of EnenKio was held and it was decided that earlier efforts to bring the atoll under the jurisdiction of Hawaii would be abandoned in favor of affirmation of independence, thus seeking self-rule under the natural landowner as king. Letters to Mr. Clinton, members of Congress, U.S. Army and the first press release proclaimed the status of ownership of EnenKio (Wake I., Peale I., Wilkes I.), denounced the Army's so-called "no significant impact" scheme to fire more than 800 rockets of an undisclosed nature into and over the waters of the Marshall Islands (including its sanctuaries for turtles and birds) and asserted rightful ownership claims. +On March 21, 1994, a formal resolution was executed establishing the nation of EnenKio as an independent nation under the authority of His Majesty Murjel Hermios, who had granted special power of attorney to Mr. Robert Moore, appointed Minister Plenipotentiary. The Constitution, Succession Act and other documents were thereafter drafted. On September 30th, a formal Declaration of Sovereignty was signed into law by Ministers and selected delegate citizens, believing (as did the USA founding fathers) that such power was an inherent right of the people. It declared the Kingdom of EnenKio a sovereign independent peaceful nation, it acknowledged His Majesty, King Murjel Hermios as owner in allodium of the atoll, accepted him as Head of State and embraced the Constitution as the founding document for a form of democratic government. +Documents and letters were sent to numerous nations of the world proclaiming the above actions. Formal documents of recognition were presented, offer of diplomatic ties made and support for reciprocation requested. Copies of pertinent documents were forwarded to the United Nations, UN Security Council, NATO, South Pacific Commission and others. Letters of personal appeal were sent to UN leaders. A special request for protection and assistance was sent to the UN Security Council. On October 10th, a commercial affidavit and demand for payment was sent via certified mail to federal officers of the United States regarding the illegal January 17, 1899 seizure, under force of arms, of the islands of Eneen-Kio Atoll, the adverse occupation and continued disregard of international Human rights law, UN Charter terms and terms of the Compact of Free Association with the Republic of the Marshall Islands (Public Law 99-239; January 14, 1986). Having acknowledged receipt and failing to respond within a reasonable time, the U.S. is now in default under commercial law, owing in excess of US$100 million. The second official press release was issued on November 21, 1994, relating the preceding events. Of all the agencies to whom it was sent, only two, the Marshall Islands Journal, a weekly newspaper and Islands Business Pacific magazine are known to have mentioned the story, then only briefly. +Request for Media Response: +The thirst of the media for copy on topics outside of natural calamities, treed cats and daily courtroom chronicles of violence and deception seems seriously lacking. Is not the peaceful beginning of a new nation news any more? Is not the restoration of native rights of an aboriginal society whose roots reach into antiquity (to before the birth of Jesus) worth a little journalistic investigation? How about suspicions of insidious military-sanctioned activity which threatens the security and peaceful existence of nations of the Pacific in the name of "world leadership"? Or is it world domination? People of EnenKio have a few simple requests of you, the media, in an effort to draw international attention to this issue and thereby, hopefully shorten the delay in regaining active occupation of islands of their ancestral heritage: +1. Investigate and verify the circumstances of the illegal armed invasion supported by U.S. expansionism and subsequent improper annexation of the sacred islands of Eneen-Kio Atoll, then being utilized by sailors, hunters and chiefs of the Marshallese civilization and for at least 2000 years prior to the 1899 fiasco. (Note: These facts and validity of the Hermios claim are a matter of historical record, not a fabrication.) +2. Investigate and/or verify the circumstances of any evidence of specific beneficial use and U.S. policy, past and present, or the lack thereof, with regard to the role of EnenKio . (Note: It is my understanding Wake was "decommissioned" after the so-called "processing" of thousands of South Vietnamese refugees in the late 1970s). +3. Reflect on the contrasting history of U.S. occupation, war, technological advances, in light of modern attitudes about misdeeds against native peoples and the willingness of our people to develop serious national economic programs for the benefit of all mankind. +4. Respectfully and conscientiously broadcast the credibility of the king's claim of allodial title, the declaration of rights of the citizens of EnenKio to self-determination and the commitment by their government and leaders to promulgate their mandates in a responsible and fiscal manner. +5. Bring to light U.S. strategy with regard to the implementation of questionable and costly pet programs involving nuclear proliferation, offensive/defensive weapon systems, clandestine military research, environmental pollution and whatever else is going on there. (Note: Congress and certain federal agencies have promoted use of Wake Island and environs as platform for launching and testing hundreds of rockets and missiles, a federal prison for drug offenders and other less publicized projects.) +6. Fully disclose to the people of the United States U.S. strategy with regard to the denial of possession of lawful title to Eneen-Kio Atoll by King Hermios as a consequence of natural inheritance via time-honored and respected Marshallese matriarchal traditions, disregard for Human rights protected under international law, United Nations Charter and conventions and the U.S. Compact with the Marshall Islands and refusal to acknowledge liability for acts of piracy on the high seas of military and colonial expansionism of the nineteenth century. (Note: U.S. apology for the illegal armed overthrow of the Hawaiian Monarchy the prior year and the return of the Hawaiian island, Kaho'olawe, also of religious significance, has set precedents for the action demanded by EnenKio citizens.) +Parting Shot: +What truly concerns me is the cavalier attitude of government in general, the U.S. federal government more precisely, which somehow behaves as if endowed by a divinely inspired alchemy that conveys the right to rearrange lands, cultures and economics with out the slightest inclination to counsel with those people most concerned. Such an approach might be expected in some dictatorship in some distant corner of the globe, but considering its present source, it is downright alarming. It is worthwhile to mention here that despite a prominent trail left over the course of more than two years, letters, reports, forms, published articles, press releases, legal notices, documents and virtually every action initiated by those representing King Hermios have escaped official response from officers of the U.S. federal government. Our not-too-distant past is replete with examples of the insatiable thirst of western "civilized" nations for doctrines faithful to the cry of "manifest destiny" which clearly marked American foreign policy of a century ago. If this current trend signifies a resurgence, it can only be considered a giant leap backward, considering the flimsy record of American attempts at "fixing up the world". The title of ownership and inheritance of Eneen-Kio Atoll pre-dates formation of the United States by two centuries or more. It is time the significance of native cultures and recognition of their right to self-determination is elevated from matters of scientific discourse to mainstream political involvement in determining the future course of human endeavor. People have a right to know; the media a responsibility to show them. In conclusion, I reiterate that our focus, from my point of view, is one, not so much of opposition to the ominous might of U.S. political philosophy and military prowess, but of asserting the moral imperatives for correcting errors of the past, supporting restoration of Human cultural dignity and the unobstructed observance of God-given individual rights. Thank you for your support and cooperation in helping end the siege and forced exile of our proud citizenry. +TOP OF PAGE +November 21, 1994: News Release +In a bid to regain occupation of that portion of his ancestral lands which include Wake Island, site of a U.S. military outpost, His Majesty, King Murjel Hermios, through his legal representative, Minister Plenipotentiary, Robert Moore, the U.S. has been given the boot out of Wake Island. Moore served legal notice on top U.S. government officials in October 1994 to cease all activity and leave the islands. The filing came on the heels of a five-year struggle to gain recognition of the illegal seizure of islands (owned by predecessors of King Hermios) by the gun boat, USS Bennington in 1899. +The legal document, a Commercial Affidavit, Declaration of Fair Value and Demand for Payment, was served under recognized principles of Common Law and International Commercial Codes. It details the specifics of King Hermios' ancestral rights to Wake Island, the illegality of the U.S. claim and violations of native laws, International Agreements and human rights during their 95-year hold on the Hermios property. It also establishes default, recognized under law, by reason of failure to answer the sworn claims, thereby allowing the Hermios claim to stand valid before the law as unchallenged. Under those claims, demand was made for payment of 94.7 million dollars for past use of the land. Continued use and holdover of the atoll will add 5 million dollars per month through 1995. +While putting forth the appearance of advocating human rights, U.S. officials continue to ignore issues right in their own backyard which keep King Hermios and the citizens of EnenKio living in compulsory exile. +Eneen-Kio Atoll, a name derived from Marshallese traditions involving a small orange (kio) flower found there, is made up of 3 islands, including Wake. Predecessors in interest of King Hermios, aboriginal chiefs and islanders sailed native canoes to Eneen-Kio Atoll for religious and cultural purposes as much as 500 years BC. During the colonial invasion of Pacific islands, western traders and explorers consistently ignored the native traditions and rights of the real discoverers of those fragile and isolated bits of sand, the islanders themselves. A case in point is in that of the Hawaiians, who recently gained an apology from the U.S. Congress and President Bill Clinton for the illegal U.S. government overthrow of the Hawaiian Monarchy. King Hermios is presently acknowledged as the hereditary Paramount Chief (Iroijlaplap) of all the Northern Atolls of the Ratak Archipelago of the Marshall Islands, which terminates to the north, beyond Eneen-Kio Atoll. Mr. Moore has full authority to act on the King's behalf to rid the islands of their illegal and unwanted Occupation Forces in favor of restoring the King's assertion of his native allodial rights. Most recently occupying and holding the islands are agents of the U.S. Air Force command, 15th Logistics Group, Hickam AFB, Hawaii. Nearly identical articles published in the Star Bulletin and Honolulu Advertiser on December 31, 1993 and January 1, 1994 headlined: "Air Force willing to give up its hold on Wake Island" and stated: "Not much activity there anymore, so the Air Force wants to give up control". According to some theories thought to have reliable foundation, private entities or other government agencies are fighting for control behind a stonewall of apathy, denial and contempt for traditional ancestral heritage of King Hermios, his predecessors and people. Mr. Moore is also charged with the responsibility of bringing the nation under active jurisdiction of its own independent government, to initiate and administer to its citizens, promote economic development and to direct all affairs of State. The democratic government is established as a limited constitutional monarchy and is being directed by its Executive Council. +Since 1987, despite repeated efforts to resolve the conflict and the effects of a stroke, Mr. Moore has been unsuccessful in getting any substantive reply from officers of the United States, military officers and members of Congress. The following is a summary of some of the recent letters, inquiries and statements of claims made on behalf of the lawful and rightful landowner, King Murjel Hermios: » » Formal letters to President Clinton and Vice-President Al Gore in February 1993, requesting consideration under programs promised in their campaign for economic conversion of old military bases were ignored. As a military base, Wake Airfield was "decommissioned" more than a decade ago. +» » In response to the Environmental Assessment of the proposed +Theater Missile Defense Rocket Launch Activities, formal letters of protest sent to the Pentagon and U.S. Army officials, who contemplated launching hundreds of missiles from Wake Island over several years into the waters of the Marshall Islands, went unanswered. » » Letters to members of the U.S. Congress protesting rocket launch activities and requesting help went unanswered. » » A Resolution dated March 21, 1994 was signed which declared the status of EnenKio to be that of an independent nation under the administrative jurisdiction of King Murjel Hermios. It was likewise ignored. After waiting for more than 580 days since "formal" notification of the declared status of EnenKio and having heard no objection from the United States, Mr. Moore assembled the Ministers of the Executive Council. They, along with a few involved citizens living in exile and denied access to Eneen-Kio, formally passed and signed the Declaration of Sovereignty on September 30, 1994. They also accepted the draft of the Constitution which establishes the democratic principles of government recognizing His Majesty, King Murjel Hermios as Head of State and his family as the First Royal Family of EnenKio . While the King and his people bear no ill will against the multitudes of foreign invaders of Eneen-Kio Atoll, which over the centuries included agents of the Emperor of Japan, the Emperor of Germany, and the King of Spain, they believe the time has come to acknowledge the errors of the past, correct the conditions thereby produced and move on into the future in support of the sacred principals of Truth, Honor and Peace. Those principals are embodied in the Constitutions of EnenKio and of the United States. Those tenets were likewise embodied, affirmed and ratified by the U.S. Congress in Public Law 99-239 (Jan. 14, 1986), signed by President Ronald Reagan as the Compact of Free Association with the Marshall Islands and Federated States of Micronesia. The compact acknowledges superiority of all Marshallese "natural" rights, including those of ownership and use of land. +Still mindful of the terrible threat of extraordinary U.S. military 1 808 923-0476 fax/phone +Robert Moore, Minister Plenipotentiary, Kingdom of EnenKio Foreign Trade Mission +DO-MO-CO Manager, Remios Hermios Eleemosynary Trust, Majuro, Marshall Islands +http://www.enenkio.org + + diff --git a/Ch3/datasets/spam/spam/00246.4dc5830a5a3e1fda805613b61822bac8 b/Ch3/datasets/spam/spam/00246.4dc5830a5a3e1fda805613b61822bac8 new file mode 100644 index 000000000..96be15f8a --- /dev/null +++ b/Ch3/datasets/spam/spam/00246.4dc5830a5a3e1fda805613b61822bac8 @@ -0,0 +1,77 @@ +From bigcepxxxmeb13mxy@aol.com Sun Sep 8 14:43:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 57B9916F6D + for ; Sun, 8 Sep 2002 14:41:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 08 Sep 2002 14:41:53 +0100 (IST) +Received: from frns.fujitaroad.co.jp ([211.4.180.20]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g88CuHC30128 for + ; Sun, 8 Sep 2002 13:56:18 +0100 +Received: from frmail.fujitaroad.co.jp ([192.168.16.250]) by + frns.fujitaroad.co.jp (3.7W-200208301154) with ESMTP id g88CYoR21059; + Sun, 8 Sep 2002 21:34:50 +0900 +Received: by frmail.fujitaroad.co.jp (3.7W-200203110915) id g88CYfT12379; + Sun, 8 Sep 2002 21:34:43 +0900 +Message-Id: <200209081234.g88CYfT12379@frmail.fujitaroad.co.jp> +To: +From: bigcepxxxmeb13mxy@aol.com +Subject: Make Huge Profits on eBay 951 +Date: Sun, 08 Sep 2002 08:34:40 -0400 +MIME-Version: 1.0 +X-Priority: 3 +X-Msmail-Priority: Normal +Reply-To: bigcepxxxmeb13mxy@aol.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + + + + +
    +

    Fortunes are literally being made in this new= + marketplace. +

    +

    Over $9 Billion i= +n merchandise + was sold on eBay in 2001 by people just like you - right= + from + their homes!

    +

    Now you too can learn the secrets of successf= +ul selling + on eBay and make a staggering income from the co= +mfort + of your own home. If you are motivated, capable of h= +aving + an open mind, and can follow simple directions, then visit + us here. If server busy - alternate.

    +

    You received this offer as a result of an affili= +ate relationship + with one of our marketing partners. If you are not interested in f= +uture + offers go h= +ere.

    +
    +

     

    +

     

    +

     

    +

     

    + + + + + + + diff --git a/Ch3/datasets/spam/spam/00247.4f7c67c9792706fa90fe218d4b092b7a b/Ch3/datasets/spam/spam/00247.4f7c67c9792706fa90fe218d4b092b7a new file mode 100644 index 000000000..398d381bf --- /dev/null +++ b/Ch3/datasets/spam/spam/00247.4f7c67c9792706fa90fe218d4b092b7a @@ -0,0 +1,143 @@ +From martin_francis7@yahoo.fr Sun Sep 8 14:43:37 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id EF1B716F6E + for ; Sun, 8 Sep 2002 14:41:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 08 Sep 2002 14:41:54 +0100 (IST) +Received: from web14407.mail.yahoo.com (web14407.mail.yahoo.com + [216.136.174.77]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g88DSxC30993 for ; Sun, 8 Sep 2002 14:29:00 +0100 +Message-Id: <20020908132920.1093.qmail@web14407.mail.yahoo.com> +Received: from [64.110.29.20] by web14407.mail.yahoo.com via HTTP; + Sun, 08 Sep 2002 15:29:20 CEST +Date: Sun, 8 Sep 2002 15:29:20 +0200 (CEST) +From: =?iso-8859-1?q?ackou=20acke=20martin=20francis?= +Subject: I NEED AN URGENT CAPABLE ASSISTANCE.TEL:+225 05775748 +To: zzzz@spamassassin.taint.org +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit + +MR MARTIN FRANCIS +ABIDJAN COTE D’IVOIRE +WEST AFRICA +TEL:+225 05775748. + + + URGENT AND NOBLE PROPOSAL + +ATTN: DIRECTOR. +DEAR , + +I wish to extend my greeting to you and your entire +family. I got your contact from the ivoirian chamber +of commerce, I prayed over it and selected your name +among other names because of its esteeming +nature.Morever,after my strong prayers and fasting, +God reveals to me that you are straight forward, +Honest and God’s person. +This is the reason I never waste time to propose you +this business for our mutual benefits. Infact, You +will never regret it provided you give me your +possible best cooperate hand, Believe me. + +I am MARTIN FRANCIS, A cote d’ivoire national and the +only child of late Mr and Mrs FRANCIS. My late father +was the former financial controller of Côte d’Ivoire +telecommunication (CITELCOM). My father died due to +the heat of political crisis in my country recently +last years.But,I am motherless since,before my fathers +late and the death of my mother on 26 SEPTEMBER 1993 +was as a result of spiritual attack by our family +member who hated her just because of my fathers +wealth. +Moreover, they tried their own part as well against my +father and myself but negative because God almighty +is available at our side. Infact God is wonderful. +Although, before the death of my father in one of the +private hospital here, he secretly revealed to me +specifically on family matters and mostly the safety +of his monies us$16,500,000.00 (sixteen million,five +hundred thousand united states dollars) which he +deposited in a bank here in my county Abidjan, +Côte d’Ivoire and used my name,MARTIN FRANCIS as the +next of kin for the deposits. This amount was accrued +from an over-invoiced contract award for the +construction of an underground telephone network to +replace the former in the new city (Yamoussoukro) and +other major cities also for installation of the +microwave station awarded to my late father,Mr JOSEPH +FRANCIS in 1999 to expatiate companies. In fact, after +the finished payment of contract workers, my late +father deposited this fund in a bank as the full +beneficiary contractor of the said company (CITELCOM) +this is the fund I want to transferred to your account +as the beneficiary contractor due for payment,provided + +you cooperate.Therefore I am seeking your full and +urgent assistance for the telegraphic transfer of +this sixteen million and five hundred thousand united +states dollars, us$16,500.000 US dollars to your +designated account for a very good business investment +in your country as due to the instruction my father +gave to me before he late. What I require from you are +as follows. + +1.Your private telephone and fax number for easy and +strict communication +2.Your bank particular for smooth and successful +remittance of this monies to your nominated account +3.You have to make necessary arrangement for me to +meet with you immediately the monies is been +transferred in your account and confirmed by you. +4.You have to secure a college for me in your country +to further my education. +5.You will have to be my guardian and part of the +joint venture investment when I get to your country. + +Furthermore, my late father had instructed me to offer +20 % of the total sum to the person who is to assist +me out for the transferring of this fund. + +Moreover, I wish to assure you that this transaction +would be concluded within the next(3)days you signify +interest to assist me out.I suggest that this +transaction should be handled in strict confidence +because I have work out fine every modalities +concerning the transfer of this fund. +Please and please, kindly hasten up the arrangement as +quickly as possible because my late father instructed +me not to invest this monies in this country Côte- +d’Ivoire. That I should invest abroad of my choice for +the benefit of myself and for security reasons. + +Thank very much in anticipation of your +acknowledgement of this business proposal and do not +hesitate to contact me immediately you receive this +message with this my direct telephone number mentioned +above, tel : + 225 05775748 for us to proceed +immediately. Please and please, don’t fail. + +waiting for your urgent response now + +thanks very much again and God bless. + +best regards + +MARTIN FRANCIS. + + + + + + + + +___________________________________________________________ +Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français ! +Yahoo! Mail : http://fr.mail.yahoo.com + + diff --git a/Ch3/datasets/spam/spam/00248.b243bca51ee69d6e428ca2f45f0fe41b b/Ch3/datasets/spam/spam/00248.b243bca51ee69d6e428ca2f45f0fe41b new file mode 100644 index 000000000..81963e03e --- /dev/null +++ b/Ch3/datasets/spam/spam/00248.b243bca51ee69d6e428ca2f45f0fe41b @@ -0,0 +1,374 @@ +From 4s@insiq.us Sun Sep 8 23:59:14 2002 +Return-Path: <4s@insiq.us> +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 7184A16F8B + for ; Sun, 8 Sep 2002 23:52:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 08 Sep 2002 23:52:39 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g88I2xC04846 for ; Sun, 8 Sep 2002 19:03:00 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Sun, 8 Sep 2002 14:04:06 -0400 +Subject: The "Business-Owner Friendly" Pension Plan +To: +Date: Sun, 8 Sep 2002 14:04:06 -0400 +From: "IQ - Four Seasons" <4s@insiq.us> +Message-Id: <64caa01c25762$1f3406b0$6b01a8c0@insuranceiq.com> +MIME-Version: 1.0 +Thread-Index: AcJXRrD0cRYAG5pLS7G/+in8DFa8mA== +X-Mailer: Microsoft CDO for Windows 2000 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 08 Sep 2002 18:04:06.0375 (UTC) FILETIME=[1F532770:01C25762] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_4103D_01C25725.29EA69B0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_4103D_01C25725.29EA69B0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: quoted-printable + + 421(i) A Fully Insured, Tax Qualified Retirement Plan!=09 + =09 +$353,253* $145,496* $40,000 $30,000 $11,000 + +=A7412(i) Defined Benefit Profit Sharing SEP 401(K) =20 + =09 + Designed For Business Owners Over Age 50=09 +? Contributions Are 100% Tax Deductible + +? US Government Approved ERISA Pension Plan Since 1974 + +? Up To 90% of The Benefit Goes Directly To The Business Owner =09 +Make Your Client's Retirement Dreams Come True! =09 + =09 +For a personalized proposal, please call the pension department: =09 +1-800-235-7949 =20 +Or e-mail your request to us at: pensions@fsfginc.com + =09 + =09 +=20 +" Innovative Solutions For Changing Economic Climates" =09 +Please fill out the form below for more information =20 +Name: =20 +E-mail: =20 +Phone: =20 +City: State: =09 + =09 +=20 + =09 +1-800-235-7949 Fax: 856-596-9309 +pensions@fsfginc.com www.fsfginc.com + =09 + American National Independent Marketing=09 +* Assumes 55 year old making a maximum tax deductible contribution. + +We don't want anybody to receive our mailings who does not wish to +receive them. This is professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: http://www.InsuranceIQ.com/optout +Legal Notice =20 + + +------=_NextPart_000_4103D_01C25725.29EA69B0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + +The "Business-Owner Friendly" Pension Plan + + + + =20 + + +
    =20 + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + +
    3D'421(i)
    =20 + + =20 + + + + + + + =20 + + + + + + + =20 + + + + + + +
    $353,253*$145,496*$40,000$30,000$11,000
    =A7412(i)Defined BenefitProfit SharingSEP401(K)
    +
    =20 + + =20 + + +
    +
    3D"Designed
    =20 + •  Contributions Are 100% Tax Deductible

    + •  US Government Approved ERISA Pension Plan Since = +1974

    + •  Up To 90% of The Benefit Goes Directly To The = +Business Owner
    =20 +
    =20 + Make Your Client's Retirement Dreams Come = +True!=20 +
    =20 + + =20 + + +
    +
    =20 + For a personalized proposal, please call the pension = +department:=20 +
    1-800-235-7949
    =20 + Or e-mail your request to us at: pensions@fsfginc.com = + +
    =20 + + =20 + + +
    +
    =20 +


    + " Innovative Solutions For = +Changing Economic Climates"=20 +

    =20 + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + + + + =20 + + + +
    Please fill out the = +form below for more information
    Name:
    E-mail:
    Phone:
    City:State:
     =20 + + + +
    +
    +
    =20 + + =20 + + +
    +
    =20 + 1-800-235-7949   Fax: 856-596-9309
    + pensions@fsfginc.com  = + www.fsfginc.com
    =20 +
    3D"American
    =20 +

    * = +Assumes=20 + 55 year old making a maximum tax deductible = +contribution.

    + =20 +

    We don't want anybody to receive our mailings=20 + who does not wish to receive them. This is professional=20 + communication sent to insurance professionals. To be = +removed from=20 + this mailing list, DO NOT REPLY to this message. Instead, = +go here: =20 + http://www.InsuranceIQ.com/opt= +out
    + Legal = +Notice

    +
    =20 +
    +
    + + + +------=_NextPart_000_4103D_01C25725.29EA69B0-- + + diff --git a/Ch3/datasets/spam/spam/00249.5f45607c1bffe89f60ba1ec9f878039a b/Ch3/datasets/spam/spam/00249.5f45607c1bffe89f60ba1ec9f878039a new file mode 100644 index 000000000..20abcc09d --- /dev/null +++ b/Ch3/datasets/spam/spam/00249.5f45607c1bffe89f60ba1ec9f878039a @@ -0,0 +1,58 @@ +From pamela4701@eudoramail.com Mon Sep 9 10:51:29 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 5D14216F17 + for ; Mon, 9 Sep 2002 10:49:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 09 Sep 2002 10:49:04 +0100 (IST) +Received: from smtp-ft1.fr.colt.net (smtp-ft1.fr.colt.net [213.41.78.25]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g899AfC06863 for + ; Mon, 9 Sep 2002 10:10:41 +0100 +Received: from mailsweeper.abc-arbitrage.com (mailhost2.abc-arbitrage.com + [213.41.18.43]) by smtp-ft1.fr.colt.net with ESMTP id g899AvS20929 for + ; Mon, 9 Sep 2002 11:10:57 +0200 +Received: from 210.214.94.76 (unverified) by mailsweeper.abc-arbitrage.com + (Content Technologies SMTPRS 4.2.10) with ESMTP id + ; Mon, + 9 Sep 2002 11:06:09 +0200 +Message-Id: <00005cd5540a$00004a9b$00007fa8@mx1.eudoramail.com> +To: +From: pamela4701@eudoramail.com +Subject: Let us find the right mortgage lender for you AFPE +Date: Mon, 09 Sep 2002 14:36:18 -0700 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit + +Dear Homeowner, + +Interest Rates are at their lowest point in 40 years! + +We help you find the best rate for your situation by +matching your needs with hundreds of lenders! + +Home Improvement, Refinance, Second Mortgage, +Home Equity Loans, and More! Even with less than +perfect credit! + +This service is 100% FREE to home owners and new +home buyers without any obligation. + +Just fill out a quick, simple form and jump-start +your future plans today! + + +Visit http://61.145.116.186/user0201/index.asp?Afft=QM10 + + + + + + +To unsubscribe, please visit: + +http://61.145.116.186/light/watch.asp + + diff --git a/Ch3/datasets/spam/spam/00250.32279787338af8a5de4cfbc0b837718e b/Ch3/datasets/spam/spam/00250.32279787338af8a5de4cfbc0b837718e new file mode 100644 index 000000000..19886c502 --- /dev/null +++ b/Ch3/datasets/spam/spam/00250.32279787338af8a5de4cfbc0b837718e @@ -0,0 +1,285 @@ +From jeremya@msn.com Mon Sep 9 10:51:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0696916F67 + for ; Mon, 9 Sep 2002 10:49:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 09 Sep 2002 10:49:06 +0100 (IST) +Received: from msn.com (ras.benefit-one.co.jp [211.132.181.145]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g899IHC06963 for + ; Mon, 9 Sep 2002 10:18:17 +0100 +Reply-To: +Message-Id: <002a38a20d2c$2885d7c4$1de48cb6@lcrbal> +From: +To: +Subject: Wall Street's dirty little secret ... +Date: Sun, 08 Sep 2002 23:07:56 +1000 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: The Bat! (v1.52f) Business +Importance: Normal +Content-Transfer-Encoding: 8bit + +It was the Spring of 1979. + +I was just a tall, goofy looking kid in middle school +with buck-teeth and freckles. Each day in the +cafeteria, I walked from table to table ... + +Stealing other kids' lunch money. + +No, I didn't rob them with a gun or a knife - I just made +them a little deal. "Let me borrow two dollars today," I said, +"and I'll bring you five dollars next week." The investment +was too good to pass up, and other kids were throwing their +lunch money at me like gravy on mashed potatoes. Of course +when "next week" rolled around and I couldn't pony up the cash, +I promised to pay them even more the week after that, +if they would just let me keep their investment a little bit +longer. + +Eventually the end of the year came and went, high school +started and with it came girls, and homework, and parties, +and sports, and those poor kids from eighth grade had more +things on their mind than last year's lunch money. + +I made off with a tidy sum for a middle school kid, +and I didn't even get beat up. + +Hidden inside this story are the two greatest stock market +secrets you will ever learn. + +First of all, greed is your number one enemy. You're not +going to turn $2 into $5 in a week, so cash out when +you're ahead. Don't wait for the boat to sink before +grabbing the lifejacket. + +Second, never trust an investment adviser of any kind. +They are looking out for their own money, not yours. + +The "professionals", those stuffy investment counselors and +money managers, will always tell you that the best time to +buy is NOW. According to those guys, the longer you keep +your money in the market, the more money you're going to make. +Ask them when is the best time to sell and their answer is +"NEVER". + +In a sense, they are right. If you put $250,000 in an index +fund right now, you'll probably have over a million dollars +in thirty or forty years. But here's the problem: + +Do you want to WAIT thirty or forty years to be rich? + +Hell no! + +You want the money NOW - so you can enjoy it. It's hard to +make use of your fortune when you're seventy years old +in a wheelchair. If you could make a million dollars in +the next few years, what would you do with it? Where would +you travel? What kind of car would you buy? + +The fact is ... youth is the best time to be rich. + +If your goal is to make quick profits in the market, volatility +is your ally, and stability your enemy. You want to see +those large upswings, two hundred points in a day, followed +by the four hundred point crash a week later. You don't +care if the market went up or down 20% this year as long +it was UNSTABLE. That's how you're going to make the +money. + +What I'm talking about here is day trading. + +My father invests the traditional way; he holds some good stocks +and he goes up 30K and down 30K. In the long term of 5-10 years +he makes money. + +The day trader buys or sells 5,000 shares of XYZ for a +$25,000 profit in a 5-10 minute trade. He acts quickly, taking +advantage of all the information at his disposal about a +certain stock, and estimating whether it will go up or +down within hours, sometimes within minutes. + +I can teach you how to do this - and how to make amazing +amounts of money at it. It's not rocket science, and you +only need to learn a few basic principles to get started. + +Society would have you believe that successful trading is +complicated and requires formal training. + +The truth is, wealthy people use very simple investment +strategies to make money. + +Popular media and investment professionals portray successful +trading as difficult and complex to scare you out of the boxing +ring. They don't want the competetion - and they sure as hell +don't want you paying a few dollars to an online trading firm +to execute a trade for which they'd charge you forty or fifty +dollars. + +They make their money only if you believe two lies: + +1) That investing is too difficult and risky for the average +person. + +2) That using an investment adviser who charges a high +commission is safer than trading online for a few bucks +per trade. + +Here is what the financial gurus in today's society absolutely, +positively DO NOT WANT YOU TO KNOW ... + +The strategies for profitable day trading are in fact +so simple that anyone can do it - provided they spend +a few hours of studying. + +After reading over 200 financial books and publications +during the past decade, and after using day trading +to successfully make more than four million dollars in +the stock market, I've learned the following lessons: + +** Achieving financial success is incredibly simple. + +** Anyone can do it. + +** It only takes a few hours to learn. + +When I discovered the secret to day trading, I didn't become +wealthy overnight. If you want instant cash, drive to Wal-mart. +Buy a ski mask and a shotgun, and rob your local bank. The +only way to get rich, quick or otherwise, is through +hard work, knowledge, and determination. + +After learning the fundamentals of day trading, I started +practicing the trading art itself, and the first few weeks +brought modest gains. The next few months gave me the practical +experience I needed to really earn a living, and I was pulling +close to a six figure income. In less than three years with no +formal financial training, minimal effort and only moderate risk, +I had made my first million. The knowledge that I gained +during those formative trading years I am willing to share +with you in my new book, the Master Trader. You will learn from +my mistakes, and from my successes, as I teach you the simple, +secret formula for day trading that I've used profitably +year after year. + +The income of the day trader can be staggering. Thousands, even +hundreds of thousands of dollars can be made or lost within +minutes. The difference between making money and losing your +shirt is simply this: knowledge. I will provide that knowledge, +and I will give you a winning edge at this high-stakes game. + +Average Income of a Day Trader: +5% average an income in excess of $500,000 per year +22% average an income in excess of $250,000 per year +35% average an income in excess of $100,000 per year. +27% average an income between $50,000 and $99,999 per year +11% average an income between $20,000 and $49,999 per year + +After reading the Master Trader, you will discover extremely +profitable, simple yet powerful trading methods that give +you an almost unfair trading advantage and make you +win DESPITE the current market weakness. + +Here is just a snippet of what I will teach you: + +*** Make money whether a stock goes up or down. + + +*** Learn how to get in and out of stocks within split seconds. + + +*** Learn exactly what stocks to trade, the exact price to +buy them and the exact price to sell them. + + +*** Save thousands of dollars by learning to avoid the +mistakes beginners make. + + +*** Learn how to trade stocks like a pro and how to make money +consistently in every market! + + +*** Learn proven strategies that give you the highest chance +for great success. + + +*** Profit on huge intraday price swings. + + +*** Make money on the biggest news stories. + + +*** Actively manage your risks and learn how to realize maximum +returns. + + +*** Learn how to use the tools and information Wall Street +professionals use. + + +*** Learn how to develop and maintain a winning state of mind. + + +It's time to ask yourself: "Am I going to listen to the +Professionals who say BUY BUY BUY but never sell? Or am +I going to take control of my own financial future, and +start making money RIGHT NOW in the stock market?" + +Who is looking out for your best economic interests - some +wealthy Wall Street stockbroker, or yourself? + +With the Master Trader e-book, you will learn everything you +need to know in order to get started with Day Trading ... from +choosing the best broker in order to take advantage of the +lowest commissions and instant order executions to professional +trading strategies that make professional traders millions of +dollars. + +The Master Trader e-book is the most comprehensive yet easy to +understand and straight-forward book ever written about active +trading. If you are serious about success in short term stock +trading - ORDER TODAY and start paving the road to your +own financial future. + +Oh, and remember that scraggly kid in the eighth grade? +His high school friends laughed when he said he was going to +make money in the stock market. + +Six years later, he bought a beach-front home on the California +coast - WITH CASH. Oops, they weren't laughing anymore. + +In a rollercoaster market like we have today, day trading +is the fastest track to wealth. If you're looking +for a long-term retirement investment with no risk +that goes up 5% a year, then by all means, this ain't +your kind of game. + +But if you want the QUICKEST possible way to make a FORTUNE +in the market, with the lowest element of risk, then +order the MASTER TRADER e-book right now. I promise +to teach you ALL of the secrets that helped me become a +millionaire through successful day trading. + +You don't need to know anything about the market, and +anyone can do it, with minimum effort. It's an easy +game to win if you know how the pieces move. + +Order the MASTER TRADER e-book right now for only $49.97 +by clicking on the link below: + +http://4tools4life.com/qs + +****************************************************** +Our company is strictly opposed to unsolicited emails. +To be removed from this list, please send an email +to "bulkexpert@yahoo.com" +****************************************************** +8149uUYq4-233hRIC7588TJuY9-579ZiuA2166lzLR3-402TYER3917ynRP5-992Zkl62 + + diff --git a/Ch3/datasets/spam/spam/00251.6b4b7e79e1706156839a00817d774e37 b/Ch3/datasets/spam/spam/00251.6b4b7e79e1706156839a00817d774e37 new file mode 100644 index 000000000..8cc1dccf1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00251.6b4b7e79e1706156839a00817d774e37 @@ -0,0 +1,178 @@ +From bcchevy@hotmail.com Mon Sep 9 10:51:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id D99B016F69 + for ; Mon, 9 Sep 2002 10:49:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 09 Sep 2002 10:49:10 +0100 (IST) +Received: from gaizhou.gov.cn ([202.107.72.117]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g899a6C07463 for ; + Mon, 9 Sep 2002 10:36:07 +0100 +Received: from laserboard.com [200.177.130.32] by gaizhou.gov.cn with + ESMTP (SMTPD32-7.05) id AC952A01E8; Fri, 23 Aug 2002 20:37:41 +0800 +Message-Id: <0000716e5be2$00007083$00007530@nxwpwuknzx.ph> +To: , , + , , + , , + , , + , +Cc: , , , + , , , + , , +From: bcchevy@hotmail.com +Subject: Re: SYSTEMWORKS CLEARANCE SALE_LIMITED QUANTITIES_ONLY $29.99 TJ +Date: Fri, 23 Aug 2002 08:43:00 -1600 +MIME-Version: 1.0 +Reply-To: bcchevy@hotmail.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Norton AD + + + + + + + +
    = +Take + Control of Your Computer With This Top-of-the-Line Software!<= +/td> +
    + + + + + +
    + + + + +
    Norton + SystemWorks 2002 Software Suite
    + -Professional Edition-
    + + + + +
    Includes + Six - Yes 6! + - Feature-Packed Utilities
    ALL for
    1 + Special LOW + Price of Only + $29.99!
    + + + + +
    = +This + Software Will:
     
    = +- + Protect your computer from unwanted and hazardous vir= +uses
     - + Help secure your private & valuable information
     -= + Allow + you to transfer files and send e-mails safely
     = +;- + Backup your ALL your data quick and easily
     - Improve = +your + PC's performance w/superior + integral diagnostics!
     - You'll NEVER have to take = +your + PC to the repair shop AGAIN!
      + + + + +
    +

    6 + Feature-Packed Utilities +
    1 + Great Price
    + A $300+ + Combined Retail Value +
    + YOURS for + Only $29.99! +

    +
    < + Price Includes FREE + Shipping! >
    And + For a Limited time Buy Any 2 of Our Products & Get 1 Free!= +

    +

    Don't fall + prey to destructive viruses or hackers!
    Protect  your computer= + and + your valuable information and

    + + + + +
    -> + CLICK HERE to Order Yours NOW! <-
    +

    or Call + Toll-Free 1-800-861-1481!

    +

    Your email + address was obtained from an opt-in list. Opt-in UEFAS (United Email + Federation Against Spam) Approved List -  Purchase Code # + 8594030.  If you wish to be unsubscribed from this list, p= +lease Click + here . If you have previously unsubscribed and are still receivi= +ng + this message, you may email our Spam + Abuse Control Center. We do not condone spam in any shape or for= +m. + Thank You kindly for your cooperation.

    + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00252.7e355e0c5fd1de609684544262435579 b/Ch3/datasets/spam/spam/00252.7e355e0c5fd1de609684544262435579 new file mode 100644 index 000000000..76b72b0a6 --- /dev/null +++ b/Ch3/datasets/spam/spam/00252.7e355e0c5fd1de609684544262435579 @@ -0,0 +1,115 @@ +From DMMZqW5jTH91IA@iris.seed.net.tw Mon Sep 9 14:36:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 5ECA216EFC + for ; Mon, 9 Sep 2002 14:36:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 09 Sep 2002 14:36:50 +0100 (IST) +Received: from asd (c146.h061013195.is.net.tw [61.13.195.146]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g89AYcC09717 for + ; Mon, 9 Sep 2002 11:34:43 +0100 +Date: Mon, 9 Sep 2002 11:34:43 +0100 +Received: from tcts by tpts4.seed.net.tw with SMTP id + 2YIGt9ryzKvfaybbvkNvMa; Mon, 09 Sep 2002 18:42:49 +0800 +Message-Id: +From: ¦n®ø®§@dogma.slashnull.org, §A¤£¬Ý·|«á®¬@dogma.slashnull.org +To: 01@dogma.slashnull.org (1) +Subject: =?big5?Q?=A4=A3=AC=DD=B7|=AB=E1=AE=AC?= +MIME-Version: 1.0 +X-Mailer: kmsOS3CsY2G6UT3hb +X-Priority: 3 +X-Msmail-Priority: Normal +Content-Type: multipart/related; type="multipart/alternative"; boundary="----=_NextPart_KynqjnFRvzmqYGilyuyHYQ" + +This is a multi-part message in MIME format. + +------=_NextPart_KynqjnFRvzmqYGilyuyHYQ +Content-Type: multipart/alternative; + boundary="----=_NextPart_KynqjnFRvzmqYGilyuyHYQAA" + + +------=_NextPart_KynqjnFRvzmqYGilyuyHYQAA +Content-Type: text/html; + charset="big5" +Content-Transfer-Encoding: base64 + +DQo8aHRtbD4NCg0KPGhlYWQ+DQo8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRF +TlQ9InRleHQvaHRtbDtjaGFyc2V0PWJpZzUiPg0KPCEtLSBzYXZlZCBmcm9tIHVybD0oMDAyMilo +dHRwOi8vaW50ZXJuZXQuZS1tYWlsIC0tPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBl +IiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9YmlnNSI+DQo8bWV0YSBuYW1lPSJHRU5FUkFU +T1IiIGNvbnRlbnQ9Ik1pY3Jvc29mdCBGcm9udFBhZ2UgNC4wIj4NCjxtZXRhIG5hbWU9IlByb2dJ +ZCIgY29udGVudD0iRnJvbnRQYWdlLkVkaXRvci5Eb2N1bWVudCI+DQo8dGl0bGU+r1G+frtQqN+k +bDwvdGl0bGU+DQo8L2hlYWQ+DQoNCjxib2R5Pg0KDQo8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFk +ZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHN0eWxlPSJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNl +OyBib3JkZXItd2lkdGg6IDAiIGJvcmRlcmNvbG9yPSIjMTExMTExIiB3aWR0aD0iMTAwJSIgaWQ9 +IkF1dG9OdW1iZXIxIiBoZWlnaHQ9IjIwNSI+DQogIDx0cj4NCiAgICA8dGQgd2lkdGg9IjEwMCUi +IGhlaWdodD0iMjA1IiBzdHlsZT0iYm9yZGVyLXN0eWxlOiBub25lOyBib3JkZXItd2lkdGg6IG1l +ZGl1bSIgYmdjb2xvcj0iI0ZGRkY5OSI+DQo8cCBhbGlnbj0iY2VudGVyIj48Yj48Zm9udCBmYWNl +PSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjMDAwMDgwIj6ms6RAsKavUb5+vuOk0bROp6SmYr7w +pFehQab9tE6sT6SjsLWoxqFDPC9mb250PjwvYj48L3A+DQo8cCBhbGlnbj0iY2VudGVyIj48Yj48 +Zm9udCBmYWNlPSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjMDAwMDgwIj6kp6vhtE6ms6RAsKao +36RsrN2o7K9Rvn6hQbROsN27oaFHPC9mb250PjwvYj48L3A+DQo8cCBhbGlnbj0iY2VudGVyIj48 +Yj48Zm9udCBmYWNlPSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjMDAwMDgwIj6n2q/gvsenQbNv +vMukbLROp6SmYrNvqOC+46TRpKOlzrC1qMa23D88L2ZvbnQ+PC9iPjwvcD4NCjxwIGFsaWduPSJj +ZW50ZXIiPjxiPjxmb250IGZhY2U9IrzQt6LF6SIgc2l6ZT0iNCIgY29sb3I9IiMwMDAwODAiPq9R +vn60TruhsNWhR7fttU2laaVIoUGssNSjpKOm5qFIPC9mb250PjwvYj48L3A+DQo8cCBhbGlnbj0i +Y2VudGVyIj48Yj48Zm9udCBmYWNlPSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjMDAwMDgwIj6p +0qVIoUGo36RstE6mYr7wqrqps6RVpfCup7BfqNOhQTwvZm9udD48L2I+PC9wPg0KPHAgYWxpZ249 +ImNlbnRlciI+PGI+PGZvbnQgZmFjZT0ivNC3osXpIiBzaXplPSI0IiBjb2xvcj0iIzAwMDA4MCI+ +rPC1Taq6oUGms6RAsKaqsK9XpViye6fiqN+kbLW5plmkRqFDPC9mb250PjwvYj48L3A+DQogICAg +PC90ZD4NCiAgPC90cj4NCjwvdGFibGU+DQo8cCBhbGlnbj0iY2VudGVyIj48Yj48Zm9udCBmYWNl +PSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjRkYwMEZGIj6zb6xHqManabZEp0GhRzwvZm9udD48 +L2I+PC9wPg0KPHAgYWxpZ249ImNlbnRlciI+PGZvbnQgZmFjZT0iQXJpYWwgVW5pY29kZSBNUyIg +c2l6ZT0iNCIgY29sb3I9IiNGRjAwMDAiPjxiPq1Zp0G3Ua1uvuOk0aektduko7C1qMahQadBtE6l +sra3sKqwqqZipFehQzwvYj48L2ZvbnQ+PC9wPg0KPHAgYWxpZ249ImNlbnRlciI+PGZvbnQgZmFj +ZT0iQXJpYWwgVW5pY29kZSBNUyIgc2l6ZT0iNCI+v8u3Uqq6qkKkzTxmb250IGNvbG9yPSIjODAw +MDgwIj6hQTwvZm9udD48L2ZvbnQ+PGZvbnQgZmFjZT0ipOW5qaVqpkzF6SI+PGI+PGZvbnQgY29s +b3I9IiMwMDAwODAiIHNpemU9IjUiPqdBpEClzaSwu/Kuya3UpH6v4LD3sKqwqqZipFepTz88L2Zv +bnQ+PC9iPjwvZm9udD48L3A+DQo8cCBhbGlnbj0iY2VudGVyIj48Zm9udCBzaXplPSI0IiBjb2xv +cj0iIzgwMDA4MCI+PGZvbnQgZmFjZT0iQXJpYWwgVW5pY29kZSBNUyI+pECt06VppUiwqrCqpmKk +V6q6ICAgICAgDQonJ773t3wnJzwvZm9udD48L2ZvbnQ+PGZvbnQgY29sb3I9IiNmZmZmOTkiIGZh +Y2U9IkFyaWFsIFVuaWNvZGUgTVMiIHNpemU9IjUiPiA8aT4NCjxhIGhyZWY9Imh0dHA6Ly9ob21l +LmtpbW8uY29tLnR3L2tldmluMTU3a2ltby9ud2xpYS5odG1sIj5odHRwOi8vaG9tZS5raW1vLmNv +bS50dy9rZXZpbjE1N2tpbW8vbndsaWEuaHRtbDwvYT48L2k+PC9mb250PjwvcD4NCjxwIGFsaWdu +PSJjZW50ZXIiPjxmb250IGZhY2U9IqTluamlaqZMxekiIGNvbG9yPSIjMDAwMEZGIiBzaXplPSI0 +Ij6mcKpHpmKlSrLTrN2nuavhprO/s73sLDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAj +ZmZmZmZmIj6n2q3MtKOo0Twvc3Bhbj48c3BhbiBzdHlsZT0iQkFDS0dST1VORC1DT0xPUjogI2Zm +ZmZmZiI+uvS49KbmvlC46re9PC9zcGFuPjwvZm9udD48L3A+DQo8cCBhbGlnbj0iY2VudGVyIj48 +Zm9udCBmYWNlPSKk5bmppWqmTMXpIiBjb2xvcj0iIzAwMDBGRiIgc2l6ZT0iNCI+PHNwYW4gc3R5 +bGU9IkJBQ0tHUk9VTkQtQ09MT1I6ICNmZmZmZmYiPqdBpKOlsqnIqFOms6RIr98spXWtbqdBprOo +TaTfxEC3Trjyp9qtzKRAsF+nVqRPPC9zcGFuPjwvZm9udD48L3A+DQo8cCBhbGlnbj0iY2VudGVy +Ij48c3BhbiBzdHlsZT0iQkFDS0dST1VORC1DT0xPUjogI2ZmZmZmZiI+PGZvbnQgZmFjZT0ipOW5 +qaVqpkzF6SIgY29sb3I9IiMwMDAwRkYiIHNpemU9IjQiPqZiPC9mb250Pjxmb250IGZhY2U9IqTl +uamlaqZMxekiIGNvbG9yPSIjRkYwMDAwIiBzaXplPSI0Ij6ps8F+q0+72SgyNTAwMKS4KTwvZm9u +dD48Zm9udCBmYWNlPSKk5bmppWqmTMXpIiBjb2xvcj0iIzAwMDBGRiIgc2l6ZT0iNCI+pM63fsFa +pqiq+KRVLKdBsU6mszwvZm9udD48L3NwYW4+PC9wPg0KPHAgYWxpZ249ImNlbnRlciI+PHNwYW4g +c3R5bGU9IkJBQ0tHUk9VTkQtQ09MT1I6ICNmZmZmZmYiPjxiPjxmb250IGZhY2U9IqTluamlaqZM +xekiIGNvbG9yPSIjRkYwMDAwIiBzaXplPSI0Ij6t06RIqrqxTcTduvSvuDwvZm9udD48L2I+PGZv +bnQgZmFjZT0ipOW5qaVqpkzF6SIgY29sb3I9IiMwMDAwRkYiIHNpemU9IjQiPqTOPC9mb250Pjxm +b250IGZhY2U9IqTluamlaqZMxekiIGNvbG9yPSIjRkYwMDAwIiBzaXplPSI0Ij48Yj61TK2tqrq6 +9Lj0pEiv3zwvYj48L2ZvbnQ+PGZvbnQgZmFjZT0ipOW5qaVqpkzF6SIgY29sb3I9IiMwMDAwRkYi +IHNpemU9IjQiPiyn1qVbpEqn2q3Mqrq5zrakPC9mb250Pjwvc3Bhbj48L3A+DQo8cCBhbGlnbj0i +Y2VudGVyIj48Zm9udCBmYWNlPSKk5bmppWqmTMXpIiBzaXplPSI0Ij48Zm9udCBjb2xvcj0iIzAw +MDBGRiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IDwvZm9udD4gDQo8c3BhbiBzdHlsZT0iQkFDS0dST1VO +RC1DT0xPUjogI2ZmZmZmZiI+PGZvbnQgY29sb3I9IiMwMDAwRkYiPg0KvdCmYrr0r7ivZKRVuOqu +xqFBp9qtzLFOvqizdLtQsXrBcLW4oUk8L2ZvbnQ+oUk8L3NwYW4+PC9mb250PjwvcD4NCjxwIGFs +aWduPSJjZW50ZXIiPjxmb250IGZhY2U9IkFyaWFsIFVuaWNvZGUgTVMiIHNpemU9IjUiPg0KICAg +ICAgICA8YSB0YXJnZXQ9Im5ldyIgaHJlZj0iaHR0cDovL3d3dy5vbmxpbmUudGFpaG9vLmNvbS9l +LXNob3AvYzAwMy9pbmRleC5odG0iPg0KPGZvbnQgY29sb3I9IiNGRjAwMDAiPqv2p9qhQb73t3y0 +TqxPp0GqujwvZm9udD48L2E+ICANCiAgICAgICAgpXS0o6jRuvS49K9TsFYsPGEgaHJlZj0iaHR0 +cDovL2hvbWUua2ltby5jb20udHcva2V2aW4xNTdraW1vL2UtbWFpbC5odG0iPjxmb250IGNvbG9y +PSIjRkYwMDAwIj6z+KZXqu08L2ZvbnQ+PC9hPjwvZm9udD48L3A+DQo8cCBhbGlnbj0iY2VudGVy +Ij48Zm9udCBjb2xvcj0iI2NjMDA2NiI+rVmko7dRpkGmrKjsprmryrZspfOhQb3Qq/amuTxhIGhy +ZWY9Imh0dHA6Ly94LW1haWwuaDhoLmNvbS50dyIgdGFyZ2V0PSJuZXciPjxmb250IGZhY2U9IkFy +aWFsIFVuaWNvZGUgTVMiPqF5uUzCb6tIpfOx0L7HoXo8L2ZvbnQ+PC9hPrNztbKhQav2t9OoQsZK +s12pd7lMwm+muatIoUnBwsHCoUk8L2ZvbnQ+PC9wPg0KDQo8L2JvZHk+DQoNCjwvaHRtbD4= + + +------=_NextPart_KynqjnFRvzmqYGilyuyHYQAA-- +------=_NextPart_KynqjnFRvzmqYGilyuyHYQ-- + + + + diff --git a/Ch3/datasets/spam/spam/00253.83b95b05e275286eddcf557ea581e754 b/Ch3/datasets/spam/spam/00253.83b95b05e275286eddcf557ea581e754 new file mode 100644 index 000000000..4802aaf66 --- /dev/null +++ b/Ch3/datasets/spam/spam/00253.83b95b05e275286eddcf557ea581e754 @@ -0,0 +1,141 @@ +From directmark@eudoramail.com Mon Sep 9 14:36:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 67C9D16EFC + for ; Mon, 9 Sep 2002 14:36:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 09 Sep 2002 14:36:56 +0100 (IST) +Received: from lib.ccnu.edu.cn ([202.114.34.8]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g89CgXC14003 for ; + Mon, 9 Sep 2002 13:42:33 +0100 +Received: from . ([210.51.218.5]) by lib.ccnu.edu.cn + (AIX5.1/8.11.0/8.11.0) with ESMTP id g89Chxn40934; Mon, 9 Sep 2002 + 20:44:00 +0800 +Message-Id: <00004ee7187c$00004968$00001798@ .> +To: , , , + , +Cc: , , , + +From: directmark@eudoramail.com +Subject: --> DIRECT MARKETING WILL INCREASE SALES 23875 +Date: Mon, 09 Sep 2002 05:26:05 -1900 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit + +There is NO stumbling on to it! + +The greatest way of marketing this century +is undoubtedly direct e-mail. +It's similar to the postman delivering a +letter to your mailbox. + +The ability to promote your product, +service, website, or MLM/network marketing +opportunity to millions instantly is what +advertisers have been dreaming of for over 100 years. + +We e-mail your promotion to a list of our +general/business addresses. + +The greatest part is, it's completely affordable. + +E-MAIL MARKETING IS THE ANSWER! + +How do we know? + +We know because that's exactly what we do. + +It's a proven fact that you can attract +new business through our Direct E-mail Marketing. + +The profits that E-mail advertising generate are amazing! + +We are living proof. + +We are a direct E-mail internet advertising company and +our clients pay us thousands of dollars a week to E-mail +their products and services. + +STANDARD PRICING AND PROCEDURES + +---------------------------------------------------------- + +EXTRACTING: + +Our list of general Internet addresses are actually extracted +from the most popular web sites on the Internet. The addresses +are verified and run through our purification process. +The process includes addresses run against our custom remove +filter of 2,492 keywords, as well as through our 192MB remove / +flamer list. The EDU, ORG, GOV, MIL, and US domains are removed, +as well as other domains that asked not to receive e-mail. + +------------------------------------------------------------ + +EVALUATION: $350.00 (optional) +One of our marketing specialists will evaluate your sales +letter, and offer his/her expertise on how to make it the +most successful. + +------------------------------------------------------------- + +STANDARD PRICING: (Emails Delivered) +1 Million- $700.00 per +2-3 Million- $600.00 per +4 Million- $500.00 per +5 Million & up - $400.00 per + +-------------------------------------------------------------- + +SPECIAL LIMITED TIME OFFER! + +This introductory offer of $300.00 includes: + +1. Set-Up Fee +2. Evaluation of Sales Letter +3. 500,000 e-mails delivered + +-------------------------------------------------------------- + +PAYMENT POLICY: +All services must be paid in full prior to delivery of +advertisement. + +--------------------------------------------------------------- +NOTICE: +Absolutely no threatening or questionable materials. + +If you are serious about Direct>>Email>>Marketing>>--Send +the following to {fax} 1(602) 392-8288 +--------------------------------------------------------------- + +PLEASE FILL THIS FORM OUT COMPLETELY! + +Contact Name: _____________________________________________ + +Business Name: ______________________________________ + +# Years in Business: _________________________ + +Business Type: ______________________________________ + +Address: _________________________________________________ + +City: ____________________ State: ______ + +Zip: ______________ Country: _______________ + +Email Address: _______________________________________________ + +Phone: __________________________ Fax: _______________________ +>>>>>-> + + +To get out of our email database send an email to + +publicservice1@btamail.net.cn + + diff --git a/Ch3/datasets/spam/spam/00254.e3e30f2b37ef8db36aa652bb3e563b61 b/Ch3/datasets/spam/spam/00254.e3e30f2b37ef8db36aa652bb3e563b61 new file mode 100644 index 000000000..5a33f8d6b --- /dev/null +++ b/Ch3/datasets/spam/spam/00254.e3e30f2b37ef8db36aa652bb3e563b61 @@ -0,0 +1,286 @@ +From arnoldm@aol.com Mon Sep 9 19:31:32 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id B1BF916F03 + for ; Mon, 9 Sep 2002 19:31:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 09 Sep 2002 19:31:29 +0100 (IST) +Received: from aol.com (157.Red-80-32-90.pooles.rima-tde.net + [80.32.90.157]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g89Hd9C25416 for ; Mon, 9 Sep 2002 18:39:10 +0100 +Reply-To: +Message-Id: <008e75d41a4c$4472a7b7$6ce66cb6@ehsbhx> +From: +To: +Subject: What Warren Buffett won't tell ya ... +Date: Tue, 10 Sep 2002 04:13:50 -1100 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal +Content-Transfer-Encoding: 8bit + +It was the Spring of 1979. + +I was just a tall, goofy looking kid in middle school +with buck-teeth and freckles. Each day in the +cafeteria, I walked from table to table ... + +Stealing other kids' lunch money. + +No, I didn't rob them with a gun or a knife - I just made +them a little deal. "Let me borrow two dollars today," I said, +"and I'll bring you five dollars next week." The investment +was too good to pass up, and other kids were throwing their +lunch money at me like gravy on mashed potatoes. Of course +when "next week" rolled around and I couldn't pony up the cash, +I promised to pay them even more the week after that, +if they would just let me keep their investment a little bit +longer. + +Eventually the end of the year came and went, high school +started and with it came girls, and homework, and parties, +and sports, and those poor kids from eighth grade had more +things on their mind than last year's lunch money. + +I made off with a tidy sum for a middle school kid, +and I didn't even get beat up. + +Hidden inside this story are the two greatest stock market +secrets you will ever learn. + +First of all, greed is your number one enemy. You're not +going to turn $2 into $5 in a week, so cash out when +you're ahead. Don't wait for the boat to sink before +grabbing the lifejacket. + +Second, never trust an investment adviser of any kind. +They are looking out for their own money, not yours. + +The "professionals", those stuffy investment counselors and +money managers, will always tell you that the best time to +buy is NOW. According to those guys, the longer you keep +your money in the market, the more money you're going to make. +Ask them when is the best time to sell and their answer is +"NEVER". + +In a sense, they are right. If you put $250,000 in an index +fund right now, you'll probably have over a million dollars +in thirty or forty years. But here's the problem: + +Do you want to WAIT thirty or forty years to be rich? + +Hell no! + +You want the money NOW - so you can enjoy it. It's hard to +make use of your fortune when you're seventy years old +in a wheelchair. If you could make a million dollars in +the next few years, what would you do with it? Where would +you travel? What kind of car would you buy? + +The fact is ... youth is the best time to be rich. + +If your goal is to make quick profits in the market, volatility +is your ally, and stability your enemy. You want to see +those large upswings, two hundred points in a day, followed +by the four hundred point crash a week later. You don't +care if the market went up or down 20% this year as long +it was UNSTABLE. That's how you're going to make the +money. + +What I'm talking about here is day trading. + +My father invests the traditional way; he holds some good stocks +and he goes up 30K and down 30K. In the long term of 5-10 years +he makes money. + +The day trader buys or sells 5,000 shares of XYZ for a +$25,000 profit in a 5-10 minute trade. He acts quickly, taking +advantage of all the information at his disposal about a +certain stock, and estimating whether it will go up or +down within hours, sometimes within minutes. + +I can teach you how to do this - and how to make amazing +amounts of money at it. It's not rocket science, and you +only need to learn a few basic principles to get started. + +Society would have you believe that successful trading is +complicated and requires formal training. + +The truth is, wealthy people use very simple investment +strategies to make money. + +Popular media and investment professionals portray successful +trading as difficult and complex to scare you out of the boxing +ring. They don't want the competetion - and they sure as hell +don't want you paying a few dollars to an online trading firm +to execute a trade for which they'd charge you forty or fifty +dollars. + +They make their money only if you believe two lies: + +1) That investing is too difficult and risky for the average +person. + +2) That using an investment adviser who charges a high +commission is safer than trading online for a few bucks +per trade. + +Here is what the financial gurus in today's society absolutely, +positively DO NOT WANT YOU TO KNOW ... + +The strategies for profitable day trading are in fact +so simple that anyone can do it - provided they spend +a few hours of studying. + +After reading over 200 financial books and publications +during the past decade, and after using day trading +to successfully make more than four million dollars in +the stock market, I've learned the following lessons: + +** Achieving financial success is incredibly simple. + +** Anyone can do it. + +** It only takes a few hours to learn. + +When I discovered the secret to day trading, I didn't become +wealthy overnight. If you want instant cash, drive to Wal-mart. +Buy a ski mask and a shotgun, and rob your local bank. The +only way to get rich, quick or otherwise, is through +hard work, knowledge, and determination. + +After learning the fundamentals of day trading, I started +practicing the trading art itself, and the first few weeks +brought modest gains. The next few months gave me the practical +experience I needed to really earn a living, and I was pulling +close to a six figure income. In less than three years with no +formal financial training, minimal effort and only moderate risk, +I had made my first million. The knowledge that I gained +during those formative trading years I am willing to share +with you in my new book, the Master Trader. You will learn from +my mistakes, and from my successes, as I teach you the simple, +secret formula for day trading that I've used profitably +year after year. + +The income of the day trader can be staggering. Thousands, even +hundreds of thousands of dollars can be made or lost within +minutes. The difference between making money and losing your +shirt is simply this: knowledge. I will provide that knowledge, +and I will give you a winning edge at this high-stakes game. + +Average Income of a Day Trader: +5% average an income in excess of $500,000 per year +22% average an income in excess of $250,000 per year +35% average an income in excess of $100,000 per year. +27% average an income between $50,000 and $99,999 per year +11% average an income between $20,000 and $49,999 per year + +After reading the Master Trader, you will discover extremely +profitable, simple yet powerful trading methods that give +you an almost unfair trading advantage and make you +win DESPITE the current market weakness. + +Here is just a snippet of what I will teach you: + +*** Make money whether a stock goes up or down. + + +*** Learn how to get in and out of stocks within split seconds. + + +*** Learn exactly what stocks to trade, the exact price to +buy them and the exact price to sell them. + + +*** Save thousands of dollars by learning to avoid the +mistakes beginners make. + + +*** Learn how to trade stocks like a pro and how to make money +consistently in every market! + + +*** Learn proven strategies that give you the highest chance +for great success. + + +*** Profit on huge intraday price swings. + + +*** Make money on the biggest news stories. + + +*** Actively manage your risks and learn how to realize maximum +returns. + + +*** Learn how to use the tools and information Wall Street +professionals use. + + +*** Learn how to develop and maintain a winning state of mind. + + +It's time to ask yourself: "Am I going to listen to the +Professionals who say BUY BUY BUY but never sell? Or am +I going to take control of my own financial future, and +start making money RIGHT NOW in the stock market?" + +Who is looking out for your best economic interests - some +wealthy Wall Street stockbroker, or yourself? + +With the Master Trader e-book, you will learn everything you +need to know in order to get started with Day Trading ... from +choosing the best broker in order to take advantage of the +lowest commissions and instant order executions to professional +trading strategies that make professional traders millions of +dollars. + +The Master Trader e-book is the most comprehensive yet easy to +understand and straight-forward book ever written about active +trading. If you are serious about success in short term stock +trading - ORDER TODAY and start paving the road to your +own financial future. + +Oh, and remember that scraggly kid in the eighth grade? +His high school friends laughed when he said he was going to +make money in the stock market. + +Six years later, he bought a beach-front home on the California +coast - WITH CASH. Oops, they weren't laughing anymore. + +In a rollercoaster market like we have today, day trading +is the fastest track to wealth. If you're looking +for a long-term retirement investment with no risk +that goes up 5% a year, then by all means, this ain't +your kind of game. + +But if you want the QUICKEST possible way to make a FORTUNE +in the market, with the lowest element of risk, then +order the MASTER TRADER e-book right now. I promise +to teach you ALL of the secrets that helped me become a +millionaire through successful day trading. + +You don't need to know anything about the market, and +anyone can do it, with minimum effort. It's an easy +game to win if you know how the pieces move. + +Order the MASTER TRADER e-book right now for only $49.97 +by clicking on the link below: + +http://4tools4life.com/qs + +****************************************************** +Our company is strictly opposed to unsolicited emails. +To be removed from this list, please send an email +to "bulkexpert@yahoo.com" +****************************************************** + +0283PTfl6-774Bfbm7392dPuV0-307VjSM4803zjlu1-614iiKT2570JdKt6-854fhdA5838oELl71 + + diff --git a/Ch3/datasets/spam/spam/00255.aeff2fdf2ba6b8b49686df3575859a48 b/Ch3/datasets/spam/spam/00255.aeff2fdf2ba6b8b49686df3575859a48 new file mode 100644 index 000000000..068e52b0c --- /dev/null +++ b/Ch3/datasets/spam/spam/00255.aeff2fdf2ba6b8b49686df3575859a48 @@ -0,0 +1,287 @@ +From mikej@aol.com Mon Sep 9 19:31:37 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 2896916EFC + for ; Mon, 9 Sep 2002 19:31:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 09 Sep 2002 19:31:34 +0100 (IST) +Received: from aol.com ([200.72.19.107]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g89HotC25947 for ; + Mon, 9 Sep 2002 18:50:55 +0100 +Reply-To: +Message-Id: <016c58d11c3e$1381a0d1$5db47ed1@yxxpql> +From: +To: +Subject: Earn $139,000 a year as a DAY TRADER! +Date: Mon, 09 Sep 2002 17:45:22 -0000 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal +Content-Transfer-Encoding: 8bit + +It was the Spring of 1979. + +I was just a tall, goofy looking kid in middle school +with buck-teeth and freckles. Each day in the +cafeteria, I walked from table to table ... + +Stealing other kids' lunch money. + +No, I didn't rob them with a gun or a knife - I just made +them a little deal. "Let me borrow two dollars today," I said, +"and I'll bring you five dollars next week." The investment +was too good to pass up, and other kids were throwing their +lunch money at me like gravy on mashed potatoes. Of course +when "next week" rolled around and I couldn't pony up the cash, +I promised to pay them even more the week after that, +if they would just let me keep their investment a little bit +longer. + +Eventually the end of the year came and went, high school +started and with it came girls, and homework, and parties, +and sports, and those poor kids from eighth grade had more +things on their mind than last year's lunch money. + +I made off with a tidy sum for a middle school kid, +and I didn't even get beat up. + +Hidden inside this story are the two greatest stock market +secrets you will ever learn. + +First of all, greed is your number one enemy. You're not +going to turn $2 into $5 in a week, so cash out when +you're ahead. Don't wait for the boat to sink before +grabbing the lifejacket. + +Second, never trust an investment adviser of any kind. +They are looking out for their own money, not yours. + +The "professionals", those stuffy investment counselors and +money managers, will always tell you that the best time to +buy is NOW. According to those guys, the longer you keep +your money in the market, the more money you're going to make. +Ask them when is the best time to sell and their answer is +"NEVER". + +In a sense, they are right. If you put $250,000 in an index +fund right now, you'll probably have over a million dollars +in thirty or forty years. But here's the problem: + +Do you want to WAIT thirty or forty years to be rich? + +Hell no! + +You want the money NOW - so you can enjoy it. It's hard to +make use of your fortune when you're seventy years old +in a wheelchair. If you could make a million dollars in +the next few years, what would you do with it? Where would +you travel? What kind of car would you buy? + +The fact is ... youth is the best time to be rich. + +If your goal is to make quick profits in the market, volatility +is your ally, and stability your enemy. You want to see +those large upswings, two hundred points in a day, followed +by the four hundred point crash a week later. You don't +care if the market went up or down 20% this year as long +it was UNSTABLE. That's how you're going to make the +money. + +What I'm talking about here is day trading. + +My father invests the traditional way; he holds some good stocks +and he goes up 30K and down 30K. In the long term of 5-10 years +he makes money. + +The day trader buys or sells 5,000 shares of XYZ for a +$25,000 profit in a 5-10 minute trade. He acts quickly, taking +advantage of all the information at his disposal about a +certain stock, and estimating whether it will go up or +down within hours, sometimes within minutes. + +I can teach you how to do this - and how to make amazing +amounts of money at it. It's not rocket science, and you +only need to learn a few basic principles to get started. + +Society would have you believe that successful trading is +complicated and requires formal training. + +The truth is, wealthy people use very simple investment +strategies to make money. + +Popular media and investment professionals portray successful +trading as difficult and complex to scare you out of the boxing +ring. They don't want the competetion - and they sure as hell +don't want you paying a few dollars to an online trading firm +to execute a trade for which they'd charge you forty or fifty +dollars. + +They make their money only if you believe two lies: + +1) That investing is too difficult and risky for the average +person. + +2) That using an investment adviser who charges a high +commission is safer than trading online for a few bucks +per trade. + +Here is what the financial gurus in today's society absolutely, +positively DO NOT WANT YOU TO KNOW ... + +The strategies for profitable day trading are in fact +so simple that anyone can do it - provided they spend +a few hours of studying. + +After reading over 200 financial books and publications +during the past decade, and after using day trading +to successfully make more than four million dollars in +the stock market, I've learned the following lessons: + +** Achieving financial success is incredibly simple. + +** Anyone can do it. + +** It only takes a few hours to learn. + +When I discovered the secret to day trading, I didn't become +wealthy overnight. If you want instant cash, drive to Wal-mart. +Buy a ski mask and a shotgun, and rob your local bank. The +only way to get rich, quick or otherwise, is through +hard work, knowledge, and determination. + +After learning the fundamentals of day trading, I started +practicing the trading art itself, and the first few weeks +brought modest gains. The next few months gave me the practical +experience I needed to really earn a living, and I was pulling +close to a six figure income. In less than three years with no +formal financial training, minimal effort and only moderate risk, +I had made my first million. The knowledge that I gained +during those formative trading years I am willing to share +with you in my new book, the Master Trader. You will learn from +my mistakes, and from my successes, as I teach you the simple, +secret formula for day trading that I've used profitably +year after year. + +The income of the day trader can be staggering. Thousands, even +hundreds of thousands of dollars can be made or lost within +minutes. The difference between making money and losing your +shirt is simply this: knowledge. I will provide that knowledge, +and I will give you a winning edge at this high-stakes game. + +Average Income of a Day Trader: +5% average an income in excess of $500,000 per year +22% average an income in excess of $250,000 per year +35% average an income in excess of $100,000 per year. +27% average an income between $50,000 and $99,999 per year +11% average an income between $20,000 and $49,999 per year + +After reading the Master Trader, you will discover extremely +profitable, simple yet powerful trading methods that give +you an almost unfair trading advantage and make you +win DESPITE the current market weakness. + +Here is just a snippet of what I will teach you: + +*** Make money whether a stock goes up or down. + + +*** Learn how to get in and out of stocks within split seconds. + + +*** Learn exactly what stocks to trade, the exact price to +buy them and the exact price to sell them. + + +*** Save thousands of dollars by learning to avoid the +mistakes beginners make. + + +*** Learn how to trade stocks like a pro and how to make money +consistently in every market! + + +*** Learn proven strategies that give you the highest chance +for great success. + + +*** Profit on huge intraday price swings. + + +*** Make money on the biggest news stories. + + +*** Actively manage your risks and learn how to realize maximum +returns. + + +*** Learn how to use the tools and information Wall Street +professionals use. + + +*** Learn how to develop and maintain a winning state of mind. + + +It's time to ask yourself: "Am I going to listen to the +Professionals who say BUY BUY BUY but never sell? Or am +I going to take control of my own financial future, and +start making money RIGHT NOW in the stock market?" + +Who is looking out for your best economic interests - some +wealthy Wall Street stockbroker, or yourself? + +With the Master Trader e-book, you will learn everything you +need to know in order to get started with Day Trading ... from +choosing the best broker in order to take advantage of the +lowest commissions and instant order executions to professional +trading strategies that make professional traders millions of +dollars. + +The Master Trader e-book is the most comprehensive yet easy to +understand and straight-forward book ever written about active +trading. If you are serious about success in short term stock +trading - ORDER TODAY and start paving the road to your +own financial future. + +Oh, and remember that scraggly kid in the eighth grade? +His high school friends laughed when he said he was going to +make money in the stock market. + +Six years later, he bought a beach-front home on the California +coast - WITH CASH. Oops, they weren't laughing anymore. + +In a rollercoaster market like we have today, day trading +is the fastest track to wealth. If you're looking +for a long-term retirement investment with no risk +that goes up 5% a year, then by all means, this ain't +your kind of game. + +But if you want the QUICKEST possible way to make a FORTUNE +in the market, with the lowest element of risk, then +order the MASTER TRADER e-book right now. I promise +to teach you ALL of the secrets that helped me become a +millionaire through successful day trading. + +You don't need to know anything about the market, and +anyone can do it, with minimum effort. It's an easy +game to win if you know how the pieces move. + +Order the MASTER TRADER e-book right now for only $49.97 +by clicking on the link below: + +http://4tools4life.com/qs + +****************************************************** +Our company is strictly opposed to unsolicited emails. +To be removed from this list, please send an email +to "bulkexpert@yahoo.com" +****************************************************** + + +7248ovub3-523mjZy7405imwk1-594fukK8569ZaXP5-772uMul47 + + diff --git a/Ch3/datasets/spam/spam/00256.edd9bfb44729edf3c4f177814fd8c9e1 b/Ch3/datasets/spam/spam/00256.edd9bfb44729edf3c4f177814fd8c9e1 new file mode 100644 index 000000000..880bb9463 --- /dev/null +++ b/Ch3/datasets/spam/spam/00256.edd9bfb44729edf3c4f177814fd8c9e1 @@ -0,0 +1,878 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Tue Sep 3 14:40:40 2002 +Return-Path: +Received: from mail2.heigl-salomon.at ([213.33.70.236]) + by lerami.lerctr.org (8.12.2/8.12.2/20020524/$Revision: 1.30 $) with ESMTP id g83JeUuK007927 + for ; Tue, 3 Sep 2002 14:40:34 -0500 (CDT) +Received: from HEWLETT-2B2AA46 ([192.168.0.188]) + by mail2.heigl-salomon.at (8.9.3/8.8.7) with SMTP id VAA16038 + for ; Tue, 3 Sep 2002 21:01:17 +0200 +Message-Id: <200209031901.VAA16038@mail2.heigl-salomon.at> +From: K1-Sexkontaktmagazin +To: +Date: Tue, 03 Sep 2002 21:41:16 +0100 +Subject: NEU IM HANDEL! K1-Ausgabe Nr.66 +Reply-To: news@k1-web.com +Organization: K1 +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary=XX4E5F4E43-0C5F4E5FXX +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +This is a Multipart MIME message. Since your mail reader +does not understand this format, some or all of +this message may not be legible. + +--XX4E5F4E43-0C5F4E5FXX +Content-Type: text/plain; + charset=iso-8859-1 +Content-Transfer-Encoding: 7bit + +Es ist wieder soweit, die brandaktuelle +K1-Ausgabe Nr.66, ist ab heute wieder im Handel erhältlich. +Mit hunderten Privatkontaktanzeigen und +vielen erotischen Fotostories, avancierte K1 +zu einem der beliebtesten Erotikkontaktmagazinen, +im deutschsprachigem Raum. +Hier ein kleiner Auszug, aus dem Inhalt, der neuen Ausgabe: + +"DIE NACHT DER GEILEN MÖSEN" - Bumsen bis zum Umfallen. +"MUSIKUNTERRICHT Teil II" - Wenn die Schwanzflöte spritzt. +"DAS STEIFE SCHWERT" - Gebläse in der Drehpause. +"SIE IST JUNG, BLOND, GEIL" und steht auf Analsex. + +K1 IM INTERNET! +Schon 24.000 Sexkontakte: +http://www.k1-web.com/Kontakte/index.php +Kostenloser Zugang! + +JETZT NEU!! +SEX-SHOP MIT RIESIGER AUSWAHL +http://www.k1-web.com/shp/index.php + +Viel Spaß mit +K1-Sexkontaktmagazin. +http://www.k1-web.com + +Solltest Du an unserem Newsletter kein Interesse +mehr haben, dann trage Dich bitte aus unter: +http://www.k1-web.com/newsletr.php + +Hier die neue Ausgabe Nr.66 + +--XX4E5F4E43-0C5F4E5FXX +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="K1 Titelseite 66-Internet.jpg" + +/9j/4AAQSkZJRgABAgEASABIAAD/7RoiUGhvdG9zaG9wIDMuMAA4QklNA+kKUHJpbnQgSW5m +bwAAAAB4AAMAAABIAEgAAAAAAw0CGv/i/+MDLAI2A0cFewPgAAIAAABIAEgAAAAAAw0CGgAB +AAAAZAAAAAEAAwMDAP8AAScPAAEAAQAAAAAAAAAAAAAAAGAIABkBkAAAAAAAAAAAAAAAAAAA +AAEAAAAAAAAAAAAAAAAAAAAAOEJJTQPtClJlc29sdXRpb24AAAAAEABIAAAAAQACAEgAAAAB +AAI4QklNBA0YRlggR2xvYmFsIExpZ2h0aW5nIEFuZ2xlAAAAAAQAAAAeOEJJTQQZEkZYIEds +b2JhbCBBbHRpdHVkZQAAAAAEAAAAHjhCSU0D8wtQcmludCBGbGFncwAAAAkAAAAAAAAAAAEA +OEJJTQQKDkNvcHlyaWdodCBGbGFnAAAAAAEAADhCSU0nEBRKYXBhbmVzZSBQcmludCBGbGFn +cwAAAAAKAAEAAAAAAAAAAjhCSU0D9RdDb2xvciBIYWxmdG9uZSBTZXR0aW5ncwAAAEgAL2Zm +AAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAA +AAEALQAAAAYAAAAAAAE4QklNA/gXQ29sb3IgVHJhbnNmZXIgU2V0dGluZ3MAAABwAAD///// +////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP// +//////////////////////////8D6AAAAAD/////////////////////////////A+gAADhC +SU0ECAZHdWlkZXMAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4NVVJMIG92ZXJyaWRlcwAA +AAQAAAAAOEJJTQQaBlNsaWNlcwAAAACBAAAABgAAAAAAAAAAAAAB3QAAAVQAAAAQAEsAMQAg +AFQAaQB0AGUAbABzAGUAaQB0AGUAIAA2ADYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA +AAAAAAAAAVQAAAHdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhCSU0EFBdM +YXllciBJRCBHZW5lcmF0b3IgQmFzZQAAAAQAAAABOEJJTQQMFU5ldyBXaW5kb3dzIFRodW1i +bmFpbAAAFf0AAAABAAAAUAAAAHAAAADwAABpAAAAFeEAGAAB/9j/4AAQSkZJRgABAgEASABI +AAD/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwM +DAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4O +FBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCABwAFAD +ASIAAhEBAxEB/90ABAAF/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEB +AQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWET +InGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOE +w9N14/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQE +AwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYW +orKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm +9ic3R1dnd4eXp7fH/9oADAMBAAIRAxEAPwDicN7j0gbnE/orRqTwA8BDy+l9MrNj6RZscHCi +s3Pe4EOroabXfsyhj/Ussfayv9Xs9Kr0vZd9n+0X/q9b6WCHenXaTU9oFzG2AbrNr3NrtDq9 ++z9H72fQf/bXRCro9WNQ3I6eLcy+h1zhTRhxzb6LG0PxDY91lddT9nrfpfV9ipTzCEiNdZH5 +Xd5jlJ5+X5fJY4YYo7y1/mozlP5J+mPC8B+yneoGi9haXFpsDLiGtDtjL3D0PU9G36Veyvf+ +/XvVpnTcEBlbm232tO259byxpcQHBlddmI/IY6ne1t3qV/TZZ6S7cs+r1LHMuxa8h1LQ2/Io +ow2VOvIe4YuKx2Hc6/3s9Nj/AFf0np35v6DFp9VEso+ruLcMPK6e52XWRXb6eNhMYXj22Po3 +4jrHVOfv9Hf+YhLm43R4r8B9vyf3mr/oyYJAo0OKWsvk/wALF6GX1Cw7Mj6s4uzg3XtJPAks +2z/6T/nV32FRTi0CtpHq6mx886+3e/6X9hv+EXIfUDNvtsyabK62immqyquqtlbKnWOezJ9I +VMbXX6rW+7bT6ty2XdZacy7HNJccZoc4V2Bw3WT6DHe31PXs27n/AE6Kcb9K+7/AW28/PyOO +GOPpAGrQh8I9rmc3FU5iX6O36zhybT4Zfp8LqW9Tpx67si69ldOMA65xLnFkxtZ6dX+Gfuay +undvs/0S806ni2V3WZWP0avAwnl1hxnV03upkl7nWTj/AKCl307cbfb+zn7/APtL+jxuk6sz +reU7FrqNbqK3B19UOpfS/Vrs+jNYWN9Vm97qn+l/1vJT5HUsQ5j2Y1732Y72Mvy9uyttxAJ3 +vr3V4/0v8J+i9RUvckQADd/N4Olgxxxz4jEEi6jMcWOX0/rf+w3l8jHZQDYzHx8ii3aMe70M +etm47HuGSRVb6dlVZd62Pv8A+E/o/vsrdSZj1dPvHo0Nv9Oxssx6Cx3s3PfVeyv2W4/qMpt9 +D2fzN+PauozuhX9LxmdZw6Bf0y5of1DpjS4MY33bLm11/wDabY/1v/NVd+mq/UP6HzvVTmU9 +HuqreL8B1Tqm5Qa6S1gc+vDLrHObjbHM9V2Ls9b2Y/6ezBrxkiMnFAgmiQT6pfL/AM7/ABf/ +AEds1DL6scYVE1kFY4G48UeH5OD97/zo/nuX9ueL2+X/AP/QxvqHRiuxn35jA/Hrq9Lc9r3t +bZfe3HY8MqZd6l/puu+y1en/AEj0/wDja9bLrczqv2ysOw6XU0sxnMO8VvdXj4PpC2wb3fYr +8hvr27PtHps9ev8ASemsv6kZzqMHDracZjftFj7XZLiBENqqcPSY/Iqur3W/ZMnH/mrPU3q9 +12j6w32W4GPXVdfXkh2yBj1AXixzcar7XZjX7GP99GL+fbZdf+n9P11Rz4b45SlGA19c/wDN +k+u+L9X/ACxu9jnkhGErPDLBjhqJZIjFwQ4yIfv/ANX+u5lpL8fHc0+2ndU+sR7XuJu9b979 +bra2r+R+z6/Us/T49at5Pp41lNVDRWcLA30Boj9M6p+fX7R/3cylI9E+ueWLG3txmeqQbXne +8FzH+pFtuHXd/N5GPus3P/nWIGZj9abXazK6v0n2saX+pkPFr/SLXsq/SMZk2+6ir6Xss/Rq +px45ER9yB+bSEuP+c/S9Mfm9WVMuejwTiQI8fu0Ze7eP7x80o8eGHucE5Zf3P3Ha+pWU3Fs6 +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 +3UtyHBtbnVu90n/Bs2/pf7CuV/VnqWRmZWNh1utbiavse01EgjfX+hu/S+pa36FSbYW8MBtO +tv8AmsM7Gx2Zl/pNY2ku/Rtqebaw3/g8h/vsXT5OT063pnQcV9tT2MsrGRXvHtZAbZ6/u/Rt +XLBjnNDOHDSD4/urWt+o/Whk00bqyLg4m0F2yvaN2279H+d+YmalYaJslu9XH1bdg9UFDceu +3HcwYj67PfZIrdZs/SO9T6VjP0aq9Zx+ht6I04X2SrK9odXVYci54lm59eRVZsZ7fp+vQs1/ +1dyas+3BNbsrIp+k2sFwjT37Y+h7/wA9Hx+kWvzW4V1dmM8guj0nOdAH+hrG9K1eFmnXzcL6 +s1dLe/Bbi2g1/onW3Orva8DV9vvc625/5mP9nqrWf1CzoeP0TBbjVUPzcmuMi4OLn0mGbrH0 +sf8AzjlSf0fIf0v9o72ekbxjbDuD987N30ULqn1b6r026xllLraagC7IqY81ajd/OuY36CQ1 +3SKGlkm3qPsH1Wbg21OtxbXtx91WQx4Y91kO/N+0W2epuaz6dap5OT0u/wCrPTqyaWOrtYMt +jP59oBLLLa6/pue+v32PeucxOm5+Uwvxca29jfpOrY5wH9poUqsHNtbY6vHse2kxaQ0nYf8A +hf3EFcPcvTdZxvq8zp1runtxH+0Gl7bi25v0d36Nz7X5Nzv5ddK5q/8A5Mxf+Nv/ACY6hk4u +Ri2elk1OptAnY8FroP8AJci2NnpuKP8AhbvyY6ZM+qH9/wD9R5ExFDe3e6Td+pUg8hoWm2wE +LIxKoxMc7gyWgFx4RrTkY7wHuZsd9F+6AT9yrGJJJHculGNxj5OkbIGgmFX+3dmNLj4NIJ/z +ZVHLsyRWWWNdSf3o3NI/rs9u1Z1NdgvZZubDXAl4PmnRhEgky4SyQxwMSTIA9A7b+pMaYsDq +/wCu0j/pJvtlbh7XA/AqTMplp2mCCeEd3T+n26upbJ7jQ/8AQ2punkxHTo0nXthQ9YTqi29H +wwYZZYyewdP/AFe5Cf0XIAmjKDvAWNj/AKVZ/wC+KSIHQscpDsWXrA6qLnjxQ/2V1UazUfOT +/wCRQren9WGjWMdPcP8A/J7VKCO4Yiwx3b+rUhvI3T8IXUOA9MTysnpXTBhg3W+/JcIc7s0f +uVrQstAZzqoZ6ysdNGS9AHB60xtb2vHJ0KyXW+BWr1iX0Od3aQVhyrERcQtBSOslDOqZSaO6 +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 + +--XX4E5F4E43-0C5F4E5FXX-- diff --git a/Ch3/datasets/spam/spam/00257.5c8ef87f8b11d2515df71a7fe46a70b6 b/Ch3/datasets/spam/spam/00257.5c8ef87f8b11d2515df71a7fe46a70b6 new file mode 100644 index 000000000..ba303d013 --- /dev/null +++ b/Ch3/datasets/spam/spam/00257.5c8ef87f8b11d2515df71a7fe46a70b6 @@ -0,0 +1,162 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Tue Sep 3 15:33:27 2002 +Received: via dmail-2002(12) for +lists/freebsd/stable; Tue, 3 Sep 2002 15:33:27 -0500 (CDT) +Return-Path: +Received: from mx2.freebsd.org (mx2.FreeBSD.org [216.136.204.119]) + by lerami.lerctr.org (8.12.2/8.12.2/20020524/$Revision: 1.30 $) with ESMTP id g83KXKuK019807 + for ; Tue, 3 Sep 2002 15:33:21 -0500 (CDT) +Received: from hub.freebsd.org (hub.FreeBSD.org [216.136.204.18]) + by mx2.freebsd.org (Postfix) with ESMTP + id BEB80558D2; Tue, 3 Sep 2002 13:33:11 -0700 (PDT) + (envelope-from owner-freebsd-stable@FreeBSD.ORG) +Received: by hub.freebsd.org (Postfix, from userid 538) + id 128BB37B405; Tue, 3 Sep 2002 13:33:08 -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) + by hub.freebsd.org (Postfix) with SMTP + id E61F12E801F; Tue, 3 Sep 2002 13:33:06 -0700 (PDT) +Received: by hub.freebsd.org (bulk_mailer v1.12); Tue, 3 Sep 2002 13:33:06 -0700 +Delivered-To: freebsd-stable@freebsd.org +Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) + by hub.freebsd.org (Postfix) with ESMTP id 3FCB037B401 + for ; Tue, 3 Sep 2002 13:32:57 -0700 (PDT) +Received: from domainoo.fr (web2.domainoo.net [62.4.78.161]) + by mx1.FreeBSD.org (Postfix) with SMTP id 63BE743E6A + for ; Tue, 3 Sep 2002 13:32:56 -0700 (PDT) + (envelope-from info@coachinvest.com) +Received: (qmail 30170 invoked by uid 33); 3 Sep 2002 19:48:55 -0000 +Date: 3 Sep 2002 19:48:55 -0000 +Message-ID: <20020903194855.30169.qmail@domainoo.fr> +To: freebsd-stable@FreeBSD.ORG +Subject: Newsletter Coach'Invest - Septembre 2002 +From: info@coachinvest.com +Content-Transfer-Encoding: 8bit +Content-Type: text/plain; charset=iso-8859-1 +Sender: owner-freebsd-stable@FreeBSD.ORG +List-ID: +List-Archive: (Web Archive) +List-Help: (List Instructions) +List-Subscribe: +List-Unsubscribe: +X-Loop: FreeBSD.ORG +Precedence: bulk +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +NEWSLETTER COACH’INVEST – SEPTEMBRE 2002 + +Coach’Invest, l’accompagnateur des jeunes entreprises +www.coachinvest.com ou 3615 COACHINVEST (0.34 Euros/min) + + + +DES NOUVELLES DE COACH’INVEST. + +1- Lancement réussi pour Coach'Invest Interactive qui décroche ses premiers contrats. + +Coach'Invest Interactive accompagne les entreprises dans la création, le développement, l'optimisation et la gestion au quotidien de leur site Internet. +Coach'Invest Interactive propose à ses clients de nombreux services afin de les aider à concevoir et à mettre en place leur stratégie Internet. +Contact : Hugo BEAULIEU ; Tél : 01 56 77 01 20 / 06 81 57 85 47; E-mail : webmaster@coachinvest.com +Pour en savoir plus : http://www.coachinvest.com/entrepreneur/coach_interactive.html + + + +2- Coach'Invest a investi dans deux nouvelles entreprises : + +Inqual : +INQUAL est une société créée en janvier 2001 par 3 ingénieurs issus de l’ENST et 1 cadre commercial expérimenté. L’équipe est aujourd’hui composée de 12 personnes. Inqual est soutenu par l’ANVAR et a été récompensé pour ses contributions à l’innovation par divers prix nationaux, dont le premier prix du concours Allègre. Experte dans les architectures Internet, l’équipe d’Inqual maîtrise les conceptualisations de haut niveau (UML) et les serveurs d’applications, notamment ZOPE. INQUAL construit une offre au service des collectivités locales en proposant le premier « SIIC » (Système d’Information Inter-Communal »). Ce système apporte une gamme complète d’outils permettant l’utilisation professionnelle de fonctionnalités Internet, Intranet et Extranet, sans connaissances informatiques. La première brique métier de ce « SIIC » est un outil d’automatisation de publication pluri-média du Bulletin d’Informations Municipales (BIM). Le logiciel LEBIM permet d’éditer et de modifier, + en ligne et en temps réel l’information pratique de la collectivité locale. Des outils intégrés permettent de générer automatiquement le site Internet dynamique de la commune. Le site ainsi développé est mis à jour automatiquement et modifiable sans connaissances informatiques, par la commune elle-même. Contact : Joseph OULHEN ; Tél : 02 98 02 03 61 ; E-mail : joseph.oulhen@inqual.com +Pour en savoir plus : http://www.coachinvest.com/startup/startup33.html + +Sir Assurances : +Créée en 1994, la société Sir Assurances est le premier courtier d’assurances spécialisé sur le marché des entreprises nouvelles. Sir Assurances a développé le portail www.newbizassur.com pour proposer aux entreprises nouvelles une large gamme de services et de produits d’assurance répondant à l’ensemble de leurs besoins. La société commercialise sa plateforme technologique en marque blanche et/ou en co-branding auprès des principaux acteurs de l’Internet en France et en Europe. +Contact : Jean-Eudes LEBAUPIN ; Tél : 01 40 20 47 24 ; E-mail : jel@newbizassur.com +Pour en savoir plus : http://www.coachinvest.com/startup/startup34.html + + +3 - Coach’Invest soutient activement deux événements majeurs en faveur du développement de l’entrepreneuriat en France : +Le lancement de l’annuaire des investisseurs régionaux +Les journées Plug and Start (un événement de la Technopole de l’Aube en Champagne). + + +• Annuaire des Investisseurs Régionaux 2002 : +Pour répondre aux besoins de financement des entreprises, l’Annuaire des Investisseurs Régionaux recense les différents acteurs du financement et de l’accompagnement des entreprises dans chaque région. +Vous êtes chef d’entreprise ou décidé à exercer votre talent d’entrepreneur, avec l’Annuaire des Investisseurs Régionaux, vous identifierez rapidement les solutions de financement diversifiées et adaptées aux besoins de votre entreprise. Cet annuaire est un outil de travail unique et indispensable pour l’entrepreneur. +Pour en savoir plus ou pour commander l’Annuaire des Investisseurs Régionaux, contactez Virginie GOUPY par téléphone au 03 20 27 18 84 ou par mail : epr@vigiecom.net + +• Journées Plug and Start (8, 9 et 10 octobre 2002) : +La Technopole de l’Aube en Champagne (Troyes) innove avec le lancement les 8, 9 et 10 octobre prochains des Journées Plug and Start destinées aux futurs créateurs d’entreprises innovantes à caractère technologique ou scientifique. Avant même son arrivée à Troyes, chaque créateur bénéficie d’une première analyse de son projet en toute confidentialité. Il a le droit à un tuteur (dirigeant d’entreprise) pour l’accompagner tout au long de son parcours. Un parrain est sélectionné pour lui parmi les 150 experts constituants le cercle privilégié de la Technopole de l’Aube. Conseils personnalisés, alternance de travaux individuels et d’ateliers collectifs, expériences des intervenants, mise à disposition d’un espace de travail équipé, disponibilité de toute une équipe, mais aussi convivialité de la Technopole et plaisirs de la ville de Troyes … Plug and Start s’est donné les moyens de réussir et de faire réussir les créateurs. A l’issu des journées Plug and Start, les porteurs de pro + jets pourront être mis en contact avec le réseau de capital risque de la Technopole de l’Aube. Par ailleurs, ils pourront également participer à un forum des capitaux où ils rencontreront de nombreux investisseurs. +Pour en savoir plus et vous inscrire, contactez Michaël NOBLOT au 03 25 83 10 10 ou par e-mail : m.noblot@technopole-aube.fr + + + +DES NOUVELLES DE NOS PARTICIPATIONS. + +Café & Co : +Café & Co propose aux futurs gestionnaires indépendants de parcs de distributeurs automatiques de boissons l'ensemble des services tels que : solutions de financement, emplacements, formation et accompagnement, gestion, ... pour favoriser leur réussite d'entrepreneur individuel. +Vous pouvez également participer au développement de Café & Co en bénéficiant de l'installation gratuite d'un distributeur automatique de boissons chaudes dans vos locaux. +Contact : Nicolas BOUGON ; Tél : 06 60 41 35 14 ; E-mail : nbougon@noos.fr + +Carlogo : +La société Carlogo propose aux annonceurs de nouvelles solutions d'affichage mobile à l'efficacité prouvée (étude Ipsos) dont CARLOGO PUBLICITE qui permet aux automobilistes de gagner de l'argent (en louant un espace publicitaire sur leur voiture, les conducteurs sont rémunérés chaque mois). +Après une campagne nationale pour le Crédit Foncier et des opérations pendant l'été pour le Club Med, Galderma ou Aujourd'hui en France sur le Tour de France, de nouvelles campagnes auront lieu dès la rentrée. +Contact : Olivier MASCHINO ; Tél : 01 46 42 43 02 ; E-mail : olivier.maschino@carlogo.com +Pour en savoir plus : http://www.coachinvest.com/startup/startup20.html + +France Actionnaire : +L’information sur les PME PMI cotées en bourse (entre 1 million et 1 milliard d’Euros de capitalisation boursière) vous intéresse ? Vous voulez connaître vos concurrents cotés, leur valorisation, découvrir un secteur d’activité ? +Sur www.france-actionnaire.com vous trouverez des analyses financières, des profils complets sur l’activité des sociétés et leurs concurrents, des ratios, des outils de comparaison. Un outil révolutionnaire déjà utilisé par un grand nombre d’entreprises, d’analystes financiers, de gérants, et d’investisseurs pour enfin avoir de l’information de qualité sur toutes les valeurs moyennes. +Nous vous proposons 2 offres et 2 modes d’accès : +- offre expert : paiement à la minute de consommation ou abonnement +- offre premium : abonnement uniquement + +Abonnés à la newsletter de Coach’Invest, profitez d’une réduction de 30% sur les abonnements d’une durée de 6 mois ou plus en donnant le mot de passe : Coach’Invest. +Contact : Sébastien FAIJEAN ; Tél : 01 48 01 87 27; E-mail : contact@france-actionnaire.com +Pour en savoir plus : http://www.coachinvest.com/startup/startup08.html + +Labelium : +Labelium , 1er cabinet d'audit de sites Internet en France , vous propose de faire un devis gratuit d'intervention pour votre site Internet. Le métier de Labelium est de constater via un audit les forces et les faiblesses des sites et de recueillir via une grille d’évaluation et selon 400 critères les éléments d’amélioration possibles. Puis, nous catalysons l’ensemble des points d’amélioration identifiés et rédigeons des recommandations stratégiques permettant au site d’accroître la qualité de ses prestations. A la suite de l’audit et des recommandations , nous vous proposons des missions de soutien récurrentes garantissant à votre site un niveau de performance optimal dans le temps. + Contact : Thierry HERRMANN ; Tél : 06 08 77 77 13; E-mail : info@labelium.com +Pour en savoir plus : http://www.coachinvest.com/startup/startup28.html + +Le Manoir du Grand Vignoble : +Le Manoir du Grand Vignoble, demeure du XVIIème siècle situé à 40 kilomètres de Bergerac offre 10% de réduction sur les chambres (hors juillet-août) aux lecteurs de la newsletter de Coach’Invest. Les 44 chambres et suites sont spacieuses et s’ouvrent sur les forêts avoisinantes. Au restaurant ou sous les tonnelles de la terrasse, la cuisine proposée est à l’image de celle qu’évoque le mot Périgord, elle est généreuse et gourmande, axée sur les produits du terroir sans négliger pour cela l’innovation. +Contact : Denis PETE ; Tél : 05 53 24 23 18 ; E-mail : GRAND.VIGNOBLE@wanadoo.fr +Pour en savoir plus : http://www.coachinvest.com/startup/startup25.html + +Netagis : +NETAGIS vient de conclure un nouveau contrat en Gestion de Patrimoine avec les Mutuelles de Loire-Atlantique. La société va gérer les plans des différents bâtiments de la Mutuelle sur sa plateforme ActiGIS en version Patrimoine. Le contrat porte sur une dizaine de bâtiments représentant plusieurs milliers de mètre-carrés. +Parallèlement, NETAGIS annonce la sortie de ActiGIS Industrie en septembre destiné à la gestion des plans de sites industriels pour apporter une réelle assistance à la prise de décision et à la maîtrise des risques industriels et environnementaux. +Le programme de développement R&D de NETAGIS bénéficie depuis le mois de juillet de l' appui de l'ANVAR. +Contact : Patrick JULIEN ; Tél : 02 51 11 12 14 ; E-mail : patrick.julien@netagis.com +Pour en savoir plus : http://www.coachinvest.com/startup/startup21.html + + + +QUE VOUS SOYEZ +- ENTREPRENEUR (PORTEUR DE PROJET, DIRIGEANT DE START-UP, PATRON DE PME), +- PARTENAIRE POTENTIEL DE COACH’INVEST (PRESTATAIRE LOCAL, ENTREPRISE NATIONALE, INSTITUTIONNEL, ASSOCIATION) +N’HESITEZ PAS A NOUS CONTACTER SI VOUS AVEZ ENVIE QUE L’ON TRAVAILLE ENSEMBLE. + + +Si vous souhaitez en savoir plus sur Coach’Invest, vous pouvez nous retrouver sur www.coachinvest.com + +Retrouvez sur le minitel, code 3615 COACHINVEST (0.34 Euros/min), tous les documents juridiques dont vous avez besoin dans le cadre de votre entreprise. + + +Thomas Legrain +PDG Coach’Invest +info@coachinvest.com + + +------------------------------------------------------------------------------ + + +Pour vous désinscrire, rendez-vous à l'adresse suivante : +http://www.coachinvest.com/Newsletter_commune/ml.php?type=desinscription&addr=freebsd-stable@freebsd.org&hash=c96285ccb37d419079d79ce22254cb66 + + +To Unsubscribe: send mail to majordomo@FreeBSD.org +with "unsubscribe freebsd-stable" in the body of the message + diff --git a/Ch3/datasets/spam/spam/00258.4af5bde7fabd4e797b85cf95bcbbb45a b/Ch3/datasets/spam/spam/00258.4af5bde7fabd4e797b85cf95bcbbb45a new file mode 100644 index 000000000..f4a754576 --- /dev/null +++ b/Ch3/datasets/spam/spam/00258.4af5bde7fabd4e797b85cf95bcbbb45a @@ -0,0 +1,162 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Tue Sep 3 15:33:20 2002 +Received: via dmail-2002(12) for +lists/freebsd/questions; Tue, 3 Sep 2002 15:33:20 -0500 (CDT) +Return-Path: +Received: from mx2.freebsd.org (mx2.FreeBSD.org [216.136.204.119]) + by lerami.lerctr.org (8.12.2/8.12.2/20020524/$Revision: 1.30 $) with ESMTP id g83KXDuK019666 + for ; Tue, 3 Sep 2002 15:33:13 -0500 (CDT) +Received: from hub.freebsd.org (hub.FreeBSD.org [216.136.204.18]) + by mx2.freebsd.org (Postfix) with ESMTP + id B53F85579A; Tue, 3 Sep 2002 13:33:05 -0700 (PDT) + (envelope-from owner-freebsd-questions@FreeBSD.ORG) +Received: by hub.freebsd.org (Postfix, from userid 538) + id 187EC37B405; Tue, 3 Sep 2002 13:33:04 -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) + by hub.freebsd.org (Postfix) with SMTP + id C1B272E801F; Tue, 3 Sep 2002 13:33:03 -0700 (PDT) +Received: by hub.freebsd.org (bulk_mailer v1.12); Tue, 3 Sep 2002 13:33:03 -0700 +Delivered-To: freebsd-questions@freebsd.org +Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) + by hub.freebsd.org (Postfix) with ESMTP id 2D2F937B400 + for ; Tue, 3 Sep 2002 13:32:55 -0700 (PDT) +Received: from domainoo.fr (web2.domainoo.net [62.4.78.161]) + by mx1.FreeBSD.org (Postfix) with SMTP id F2B5843E6A + for ; Tue, 3 Sep 2002 13:32:53 -0700 (PDT) + (envelope-from info@coachinvest.com) +Received: (qmail 30168 invoked by uid 33); 3 Sep 2002 19:48:55 -0000 +Date: 3 Sep 2002 19:48:55 -0000 +Message-ID: <20020903194855.30167.qmail@domainoo.fr> +To: freebsd-questions@FreeBSD.ORG +Subject: Newsletter Coach'Invest - Septembre 2002 +From: info@coachinvest.com +Content-Transfer-Encoding: 8bit +Content-Type: text/plain; charset=iso-8859-1 +Sender: owner-freebsd-questions@FreeBSD.ORG +List-ID: +List-Archive: (Web Archive) +List-Help: (List Instructions) +List-Subscribe: +List-Unsubscribe: +X-Loop: FreeBSD.ORG +Precedence: bulk +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +NEWSLETTER COACH’INVEST – SEPTEMBRE 2002 + +Coach’Invest, l’accompagnateur des jeunes entreprises +www.coachinvest.com ou 3615 COACHINVEST (0.34 Euros/min) + + + +DES NOUVELLES DE COACH’INVEST. + +1- Lancement réussi pour Coach'Invest Interactive qui décroche ses premiers contrats. + +Coach'Invest Interactive accompagne les entreprises dans la création, le développement, l'optimisation et la gestion au quotidien de leur site Internet. +Coach'Invest Interactive propose à ses clients de nombreux services afin de les aider à concevoir et à mettre en place leur stratégie Internet. +Contact : Hugo BEAULIEU ; Tél : 01 56 77 01 20 / 06 81 57 85 47; E-mail : webmaster@coachinvest.com +Pour en savoir plus : http://www.coachinvest.com/entrepreneur/coach_interactive.html + + + +2- Coach'Invest a investi dans deux nouvelles entreprises : + +Inqual : +INQUAL est une société créée en janvier 2001 par 3 ingénieurs issus de l’ENST et 1 cadre commercial expérimenté. L’équipe est aujourd’hui composée de 12 personnes. Inqual est soutenu par l’ANVAR et a été récompensé pour ses contributions à l’innovation par divers prix nationaux, dont le premier prix du concours Allègre. Experte dans les architectures Internet, l’équipe d’Inqual maîtrise les conceptualisations de haut niveau (UML) et les serveurs d’applications, notamment ZOPE. INQUAL construit une offre au service des collectivités locales en proposant le premier « SIIC » (Système d’Information Inter-Communal »). Ce système apporte une gamme complète d’outils permettant l’utilisation professionnelle de fonctionnalités Internet, Intranet et Extranet, sans connaissances informatiques. La première brique métier de ce « SIIC » est un outil d’automatisation de publication pluri-média du Bulletin d’Informations Municipales (BIM). Le logiciel LEBIM permet d’éditer et de modifier, + en ligne et en temps réel l’information pratique de la collectivité locale. Des outils intégrés permettent de générer automatiquement le site Internet dynamique de la commune. Le site ainsi développé est mis à jour automatiquement et modifiable sans connaissances informatiques, par la commune elle-même. Contact : Joseph OULHEN ; Tél : 02 98 02 03 61 ; E-mail : joseph.oulhen@inqual.com +Pour en savoir plus : http://www.coachinvest.com/startup/startup33.html + +Sir Assurances : +Créée en 1994, la société Sir Assurances est le premier courtier d’assurances spécialisé sur le marché des entreprises nouvelles. Sir Assurances a développé le portail www.newbizassur.com pour proposer aux entreprises nouvelles une large gamme de services et de produits d’assurance répondant à l’ensemble de leurs besoins. La société commercialise sa plateforme technologique en marque blanche et/ou en co-branding auprès des principaux acteurs de l’Internet en France et en Europe. +Contact : Jean-Eudes LEBAUPIN ; Tél : 01 40 20 47 24 ; E-mail : jel@newbizassur.com +Pour en savoir plus : http://www.coachinvest.com/startup/startup34.html + + +3 - Coach’Invest soutient activement deux événements majeurs en faveur du développement de l’entrepreneuriat en France : +Le lancement de l’annuaire des investisseurs régionaux +Les journées Plug and Start (un événement de la Technopole de l’Aube en Champagne). + + +• Annuaire des Investisseurs Régionaux 2002 : +Pour répondre aux besoins de financement des entreprises, l’Annuaire des Investisseurs Régionaux recense les différents acteurs du financement et de l’accompagnement des entreprises dans chaque région. +Vous êtes chef d’entreprise ou décidé à exercer votre talent d’entrepreneur, avec l’Annuaire des Investisseurs Régionaux, vous identifierez rapidement les solutions de financement diversifiées et adaptées aux besoins de votre entreprise. Cet annuaire est un outil de travail unique et indispensable pour l’entrepreneur. +Pour en savoir plus ou pour commander l’Annuaire des Investisseurs Régionaux, contactez Virginie GOUPY par téléphone au 03 20 27 18 84 ou par mail : epr@vigiecom.net + +• Journées Plug and Start (8, 9 et 10 octobre 2002) : +La Technopole de l’Aube en Champagne (Troyes) innove avec le lancement les 8, 9 et 10 octobre prochains des Journées Plug and Start destinées aux futurs créateurs d’entreprises innovantes à caractère technologique ou scientifique. Avant même son arrivée à Troyes, chaque créateur bénéficie d’une première analyse de son projet en toute confidentialité. Il a le droit à un tuteur (dirigeant d’entreprise) pour l’accompagner tout au long de son parcours. Un parrain est sélectionné pour lui parmi les 150 experts constituants le cercle privilégié de la Technopole de l’Aube. Conseils personnalisés, alternance de travaux individuels et d’ateliers collectifs, expériences des intervenants, mise à disposition d’un espace de travail équipé, disponibilité de toute une équipe, mais aussi convivialité de la Technopole et plaisirs de la ville de Troyes … Plug and Start s’est donné les moyens de réussir et de faire réussir les créateurs. A l’issu des journées Plug and Start, les porteurs de pro + jets pourront être mis en contact avec le réseau de capital risque de la Technopole de l’Aube. Par ailleurs, ils pourront également participer à un forum des capitaux où ils rencontreront de nombreux investisseurs. +Pour en savoir plus et vous inscrire, contactez Michaël NOBLOT au 03 25 83 10 10 ou par e-mail : m.noblot@technopole-aube.fr + + + +DES NOUVELLES DE NOS PARTICIPATIONS. + +Café & Co : +Café & Co propose aux futurs gestionnaires indépendants de parcs de distributeurs automatiques de boissons l'ensemble des services tels que : solutions de financement, emplacements, formation et accompagnement, gestion, ... pour favoriser leur réussite d'entrepreneur individuel. +Vous pouvez également participer au développement de Café & Co en bénéficiant de l'installation gratuite d'un distributeur automatique de boissons chaudes dans vos locaux. +Contact : Nicolas BOUGON ; Tél : 06 60 41 35 14 ; E-mail : nbougon@noos.fr + +Carlogo : +La société Carlogo propose aux annonceurs de nouvelles solutions d'affichage mobile à l'efficacité prouvée (étude Ipsos) dont CARLOGO PUBLICITE qui permet aux automobilistes de gagner de l'argent (en louant un espace publicitaire sur leur voiture, les conducteurs sont rémunérés chaque mois). +Après une campagne nationale pour le Crédit Foncier et des opérations pendant l'été pour le Club Med, Galderma ou Aujourd'hui en France sur le Tour de France, de nouvelles campagnes auront lieu dès la rentrée. +Contact : Olivier MASCHINO ; Tél : 01 46 42 43 02 ; E-mail : olivier.maschino@carlogo.com +Pour en savoir plus : http://www.coachinvest.com/startup/startup20.html + +France Actionnaire : +L’information sur les PME PMI cotées en bourse (entre 1 million et 1 milliard d’Euros de capitalisation boursière) vous intéresse ? Vous voulez connaître vos concurrents cotés, leur valorisation, découvrir un secteur d’activité ? +Sur www.france-actionnaire.com vous trouverez des analyses financières, des profils complets sur l’activité des sociétés et leurs concurrents, des ratios, des outils de comparaison. Un outil révolutionnaire déjà utilisé par un grand nombre d’entreprises, d’analystes financiers, de gérants, et d’investisseurs pour enfin avoir de l’information de qualité sur toutes les valeurs moyennes. +Nous vous proposons 2 offres et 2 modes d’accès : +- offre expert : paiement à la minute de consommation ou abonnement +- offre premium : abonnement uniquement + +Abonnés à la newsletter de Coach’Invest, profitez d’une réduction de 30% sur les abonnements d’une durée de 6 mois ou plus en donnant le mot de passe : Coach’Invest. +Contact : Sébastien FAIJEAN ; Tél : 01 48 01 87 27; E-mail : contact@france-actionnaire.com +Pour en savoir plus : http://www.coachinvest.com/startup/startup08.html + +Labelium : +Labelium , 1er cabinet d'audit de sites Internet en France , vous propose de faire un devis gratuit d'intervention pour votre site Internet. Le métier de Labelium est de constater via un audit les forces et les faiblesses des sites et de recueillir via une grille d’évaluation et selon 400 critères les éléments d’amélioration possibles. Puis, nous catalysons l’ensemble des points d’amélioration identifiés et rédigeons des recommandations stratégiques permettant au site d’accroître la qualité de ses prestations. A la suite de l’audit et des recommandations , nous vous proposons des missions de soutien récurrentes garantissant à votre site un niveau de performance optimal dans le temps. + Contact : Thierry HERRMANN ; Tél : 06 08 77 77 13; E-mail : info@labelium.com +Pour en savoir plus : http://www.coachinvest.com/startup/startup28.html + +Le Manoir du Grand Vignoble : +Le Manoir du Grand Vignoble, demeure du XVIIème siècle situé à 40 kilomètres de Bergerac offre 10% de réduction sur les chambres (hors juillet-août) aux lecteurs de la newsletter de Coach’Invest. Les 44 chambres et suites sont spacieuses et s’ouvrent sur les forêts avoisinantes. Au restaurant ou sous les tonnelles de la terrasse, la cuisine proposée est à l’image de celle qu’évoque le mot Périgord, elle est généreuse et gourmande, axée sur les produits du terroir sans négliger pour cela l’innovation. +Contact : Denis PETE ; Tél : 05 53 24 23 18 ; E-mail : GRAND.VIGNOBLE@wanadoo.fr +Pour en savoir plus : http://www.coachinvest.com/startup/startup25.html + +Netagis : +NETAGIS vient de conclure un nouveau contrat en Gestion de Patrimoine avec les Mutuelles de Loire-Atlantique. La société va gérer les plans des différents bâtiments de la Mutuelle sur sa plateforme ActiGIS en version Patrimoine. Le contrat porte sur une dizaine de bâtiments représentant plusieurs milliers de mètre-carrés. +Parallèlement, NETAGIS annonce la sortie de ActiGIS Industrie en septembre destiné à la gestion des plans de sites industriels pour apporter une réelle assistance à la prise de décision et à la maîtrise des risques industriels et environnementaux. +Le programme de développement R&D de NETAGIS bénéficie depuis le mois de juillet de l' appui de l'ANVAR. +Contact : Patrick JULIEN ; Tél : 02 51 11 12 14 ; E-mail : patrick.julien@netagis.com +Pour en savoir plus : http://www.coachinvest.com/startup/startup21.html + + + +QUE VOUS SOYEZ +- ENTREPRENEUR (PORTEUR DE PROJET, DIRIGEANT DE START-UP, PATRON DE PME), +- PARTENAIRE POTENTIEL DE COACH’INVEST (PRESTATAIRE LOCAL, ENTREPRISE NATIONALE, INSTITUTIONNEL, ASSOCIATION) +N’HESITEZ PAS A NOUS CONTACTER SI VOUS AVEZ ENVIE QUE L’ON TRAVAILLE ENSEMBLE. + + +Si vous souhaitez en savoir plus sur Coach’Invest, vous pouvez nous retrouver sur www.coachinvest.com + +Retrouvez sur le minitel, code 3615 COACHINVEST (0.34 Euros/min), tous les documents juridiques dont vous avez besoin dans le cadre de votre entreprise. + + +Thomas Legrain +PDG Coach’Invest +info@coachinvest.com + + +------------------------------------------------------------------------------ + + +Pour vous désinscrire, rendez-vous à l'adresse suivante : +http://www.coachinvest.com/Newsletter_commune/ml.php?type=desinscription&addr=freebsd-questions@freebsd.org&hash=d19867356ee809b9ece4a07f3d70ebd5 + + +To Unsubscribe: send mail to majordomo@FreeBSD.org +with "unsubscribe freebsd-questions" in the body of the message + diff --git a/Ch3/datasets/spam/spam/00259.7b838a90b63541213eff9099e1a1aa3c b/Ch3/datasets/spam/spam/00259.7b838a90b63541213eff9099e1a1aa3c new file mode 100644 index 000000000..ab3a09599 --- /dev/null +++ b/Ch3/datasets/spam/spam/00259.7b838a90b63541213eff9099e1a1aa3c @@ -0,0 +1,232 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Wed Sep 4 06:56:09 2002 +Return-Path: +Received: from localhost.localdomain ([202.88.149.8]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g84Bu1X2026577 + for ; Wed, 4 Sep 2002 06:56:05 -0500 (CDT) +Received: from server ([202.88.149.167]) + by localhost.localdomain (8.9.3/8.8.7) with ESMTP id QAA07716 + for ; Wed, 4 Sep 2002 16:54:03 +0530 +Received: from 10.0.0.6 by server ([10.0.0.1] running VPOP3) with SMTP for ; Wed, 4 Sep 2002 16:50:10 +0530 +To: +From: "Deepak Nagpal" +Subject: 11th Convergence India 2003 exhibition & conference +Date: Wed, 04 Sep 2002 16:55:29 +0530 +Message-Id: <37503.705196875002000.233756@localhost> +MIME-Version: 1.0 +Content-Type: text/html; charset=us-ascii +Content-Transfer-Encoding: 8bit +X-Server: VPOP3 V1.3.0b - Registered to: The GodFader +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + + + + + + + +
    Dear Sir/Madam,
    +
     
    +
    I got this email id from your +website.
    +
     
    +
    Our organisation, +Exhibitions India +Pvt Ltd organises the annual Convergence India exhibition and +conference in New +Delhi, India during the month of March. Convergence +India is the longest +running international trade-show and the only forum +in India to +showcase the convergence of voice and data networks, delivery +of content, +television and entertainment applications, broadcast, +telecommunications, fixed +and mobile networks, internet, computing etc.
    +
     
    +
    For the same, I +would like to contact +the concerned person in your organisation. Could you please +advise his/her +complete contact details or please forward the following mail +to him/her. In +case you are the decision maker about participation in +international +exhibitions, following this mail is some information on our +annual +event.
    +
     
    +
    Thank you in +advance.
    +
     
    +
    Sincerely and with best +regards,
    +
     
    +
    Deepak Kr. Nagpal
    +
    Executive Marketing
    +
     
    +
    Exhibitions India Pvt. +Ltd.
    A-17 2nd +Floor
    DDA SCO Complex
    Near Moolchand Flyover
    Defence +Colony
    New +Delhi 110 024
    Tel:  +91 11 463 8680-84
    Fax: +91 11 +463 3506, 462 +3320
    email: exhibitionsindia@vsnl +.com
    website: +www.exhibitionsindia.o +rg
    +
     
    +
     
    +
    INFORMATION ABOUT THE +EVENT
    +
     
    +
    +
    Exhibitions India +organises the Convergence +India  exhibition & conference, which is the +longest running +international trade-show and the only forum in India +to showcase the +convergence of voice and data networks, delivery of content, +television and +entertainment applications, broadcast, telecommunications, +fixed and mobile +networks, internet, computing etc.
    +
     
    +
    Exhibitions India invites +you to participate +at the 11th Convergence India 2003 exhibition +& +conference, which will be at Pragati Maidan, +New Delhi, +India during 11-13 March +2003.
    +
     
    +
    The +Government of India has recently mandated the Conditional +Access System for +distribution of satellite television channels. This has +created a whole new +marketplace in the Indian cable industry. Once this bill is +made an act, it will +be mandatory for cable operators to distribute pay channels +through a set-top +box.

    India has an estimated 38 +million cable homes! The +implementation of this change will require massive +investments in set-top boxes, +conditional access software and the upgradation of headend +networks - a great +oppotunity for you to tap this huge market!! Exhibiting your +products at the +11th Convergence India exhibition will give you an +opportunity to meet +all your  targetted visitors under a +single +roof.

    Other +exhibits will be from +various industries including high speed networking, internet +telephony, mobile +and satellite communications, network infrastructure, optical +access networking, +portable communication devices, t&m and interactive +media, VoIP, wireless +access, 3G, m-commerce, multimedia broadband services via +satellite, conditional +access technologies, satellite receivers and transmitters, +encoders, decoders, +and the latest in broadcast, cable and satellite +equipment, mobile phone +accesories  etc.

    We +successfully concluded the 10th Convergence +India 2002 +exhibition and conference at New Delhi - the event +had 176 exhibitors from +17 countries displaying their equipment and technologies +to a discerning +audience of 16,093 visitors from the industry, +government, related trade +associations. The event got extensive coverage from +the media - both print +and electronic. The three day high profile conference had +over 1374 delegates. +Highlights of the event were country pavilions from +USA, +FRANCE, CHINA & the +VoIP +Technology Pavilion.
    +
    More about the +next +event:
    +
     
    +
    Convergence +India is certified by +the US Department of Commerce +since 1994.
    +
     
    +
    UK Group +Participation : +Trade Fairs Support,UK
    +
    +
    +

    Co-organisers:
    - +Ministry of Communications & IT, Government of +India
    - Association +of Basic Telecom Operators
    - Cellular Operators +Association of India
    - +Indo-American Chamber of Commerce
    - VSAT Services +Association of India
    - +Telecom Equipment Manufacturers Association of India +(TEMA)
    - Internet +Service Providers Association of India (ISPAI

    +
    Supports:
    +
    All India Aavishkar Dish +Antenna Sangh, +India, Cable Operators Federation of India, +India, Economics, Finance & +Trade Commission of France (UBI France), Electronic +Component Industries +Association, India, Global VSAT Forum, +UK, International Broadcasting +Convention (IBC), UK, National Association of +Broadcasters (NAB), +USA, Swiss Multimedia Association, +Switzerland, Telecom Users Group of +India, India, The Institution of Electronics and +Telecommunication +Engineers, India
    +
     
    +
    Participation +Cost:
    +
    +
    Shell +Space:    US $ +250 per sqm (minimum 9 sqm)
    +
    Raw +Space:     US $ 220 per +sqm (minimum 18 +sqm)
    +
     
    +
    Please visit our website (www.exhibitionsindia.o +rg) for further +details. 
    +
     
    +
    We +await your +confirmation!!
    + + diff --git a/Ch3/datasets/spam/spam/00260.c75ce8b8d8bfc55723426979d260bf61 b/Ch3/datasets/spam/spam/00260.c75ce8b8d8bfc55723426979d260bf61 new file mode 100644 index 000000000..a187b4da7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00260.c75ce8b8d8bfc55723426979d260bf61 @@ -0,0 +1,609 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Fri Sep 6 07:51:17 2002 +Return-Path: +Received: from mail2.heigl-salomon.at ([213.33.70.236]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g86Cp9X2015866 + for ; Fri, 6 Sep 2002 07:51:13 -0500 (CDT) +Received: from HEWLETT-2B2AA46 ([192.168.0.188]) + by mail2.heigl-salomon.at (8.9.3/8.8.7) with SMTP id OAA05840 + for ; Fri, 6 Sep 2002 14:11:41 +0200 +Message-Id: <200209061211.OAA05840@mail2.heigl-salomon.at> +From: K1-Sexkontaktmagazin +To: +Date: Fri, 06 Sep 2002 14:51:54 +0100 +Subject: Wir suchen Erotikdarsteller! +Reply-To: news@k1-web.com +Organization: K1 +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary=XX9ADB9A99-1A5B9ADBXX +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +This is a Multipart MIME message. Since your mail reader +does not understand this format, some or all of +this message may not be legible. + +--XX9ADB9A99-1A5B9ADBXX +Content-Type: text/plain; + charset=iso-8859-1 +Content-Transfer-Encoding: 7bit + +K1-Erotikverlag sucht Pornodarsteller. +Wenn Du Spaß am Sex hast und nebenbei Geld verdienen willst, bewirb auch Du Dich. +Wir suchen natürliche Frauen und Männer, jeden Alters. Mollig - kein Problem. +Infos unter: 0930 830 13 22 aus Österreich + +01 90 87 43 54 aus Deutschland +1,86 Eu/Min.K1-Callcenter + +Hier ein Bild aus einer Produktion. +Das Vorstellungsvideo siehst Du unter: +http://www.k1-web.com/Darsteller/index.php + +Solltest Du an unserem Newsletter kein Interesse +mehr haben, dann trage Dich bitte aus unter: +http://www.k1-web.com/newsletr.php + +--XX9ADB9A99-1A5B9ADBXX +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="LenkaWolfgangK1-Pornodarsteller.jpg" + +/9j/4AAQSkZJRgABAgEASABIAAD/4Rr/RXhpZgAASUkqAAgAAAAJAA8BAgAFAAAAegAAABAB +AgAMAAAAgAAAABIBAwABAAAAAQAAABoBBQABAAAAjAAAABsBBQABAAAAlAAAACgBAwABAAAA +AgAAADIBAgAUAAAAnAAAABMCAwABAAAAAgAAAGmHBAABAAAAsAAAAPgBAABTT05ZAABEQ1It +UEMxMTBFIABIAAAAAQAAAEgAAAABAAAAMjAwMjowNDoxNyAxODoyMDo1OAARAJqCBQABAAAA +ggEAAJ2CBQABAAAAigEAACKIAwABAAAAAgAAAACQBwAEAAAAMDIxMAOQAgAUAAAAkgEAAASQ +AgAUAAAApgEAAAGRBwAEAAAAAQIDAAKRBQABAAAAugEAAASSCgABAAAAwgEAAAWSBQABAAAA +ygEAAAmSAwABAAAAAQAAAAqSBQABAAAA0gEAAACgBwAEAAAAMDEwMAGgAwABAAAAAQAAAAOg +BAABAAAAgAQAAAKgBAABAAAAYAMAAAWgBAABAAAA2gEAAAAAAAABAAAAMgAAALQAAABkAAAA +MjAwMjowNDoxNyAxODoyMDo1OAAyMDAyOjA0OjE3IDE4OjIwOjU4AAIAAAABAAAAAAAAAGQA +AACqAAAAZAAAACoAAAAKAAAAAgABAAIABAAAAFI5OAACAAcABAAAADAxMDAAAAAACgCGkgMA +AQAAAAYAAAAPAQIABQAAAHYCAAAQAQIADAAAAHwCAAASAQMAAQAAAAEAAACGkgUAAQAAAIgC +AACGkgUAAQAAAJACAACGkgMAAQAAAAIAAAAyAQIAFAAAAJgCAACGkgQAAQAAAK0CAACGkgQA +AQAAAEsYAAAAAAAAU09OWQAARENSLVBDMTEwRSAASAAAAAEAAABIAAAAAQAAADIwMDI6MDQ6 +MTcgMTg6MjA6NTgAAP/Y/8QBogAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoLAQADAQEB +AQEBAQEBAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNR +YQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RV +VldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4 +ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+hEAAgECBAQDBAcFBAQA +AQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygp +KjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaX +mJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3 ++Pn6/9sAhAAGBAQFBAMGBQQFBgYGBwkPCQkICAkSDQ0KDxUTFhYVExUUGBsiHRgZIBkUFR4o +HiAjJCYnJhccKi0qJS0iJSYlAQYGBgkHCREJCRElGBUYJSUlJSUlJSUlJSUlJSUlJSUlJSUl +JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSX/wAARCAB4AKADASEAAhEBAxEB/9oADAMB +AAIRAxEAPwDxXTtXVJAHwMda6OHVovs4JYZ9zXmVYXPbo1GtCG31e3l1mApu+YmMsB8v+en5 +1u6PMsNwys4Ow7PbI4/pWU4uMbG0JpyZ1EE8ZkDZ5yK7DSpBNCB2xXPJaGyeuhZuWG3aoUms +i6jlAJRAe/FczOxbGcLzyZCLpNo6e1Q6paRyQpd2cu2ROVYf5/OtqUuWSkjKrFTg4My/Cnim +TU9RutJ1lIodRtjnKfKlxGc4ZQSTx0IyfrzgdYqZ719/hqqrU1NH5XjsLLDVnBrREqoM54qR +Ywc/yroscT3F8skH2ppQEY4H5U7D6jDCP8KgkhGeKTRSnfS5Tlh45qhcQdcgVm0ao8gvorDU +MyW0kUp45U/MAeme4+lV9M0DW9Qjkk0mAXUcT7DukVTnGe5APb86+Xw9KVSXIfdYuvGlH2vQ +nu9B8Q2dq8s2koillR2MycEdP4vf9am0zVpQHjuImS6VgWTuSSOfxzUYnDOlvuGDxka+z0PQ +dKZ8hbgEEiur0q/CLjPI4zXnSWh6idmbdvMJTng+9WEhDseAT64rkmrHfT1K95pySRkFR06Y +rnNR0h4kcW7mLjoOV/KlCTTNJxTPJviDb3FvJb6tbloLy1cAupwcHowPfB6fU10Phv402E0E +cXiOB7WccGeJS8TDHUj7w57AGvrMuxKpxS6HxGc4F1Z8y+I7GP4geHZFHk3wkU87o4nYH8hV +u18ZaJcSBFvURiTjzVaP9WAFeusZScuW5888rxCi5cuhsiQBcjBHr60eZ6D3xXUcDTWo0seQ +FFRSBielDEveehWkjbHIqpLCSc4rNmit0PmhLiW2maS3k2NyCy9wfrzivZPAdsbTw1aNIF8y +7zO+3OPm6f8Aju38q8bCx9/mPpce37Fo1rhUlguo5E3Ip3YP0rnbLwtAnieOSUmURR5jLLg8 +kjkjr0PbvTzT3KfOtzPJHz1VTez1OmubYRFXUAY7ipY7hkVZUBIH3vavmou61PrqitLQ6DS7 +vda7ww/Ot2wkDIGz1rnqbnbh3daliVs5AqpeWXnW7s+RgVitztstjzfxlosWoaJdQMo3lDtI +HP0/lXhE9pNbnEqEdR+Ve1gZ3jZnz2Z0/eTRp+FL82fiC3DMRHI2w/8AAuP54/KvUPsMYiUy +JuLn/D/D/wDXWmIdmmicDHmi0zc8EahNDeTaTO29Nplhz/CAQCB7c5x9a7InpxX0eAqqdFeR +8dnGHdHEtrqG8c4zSMw9DXZc8nltqVnPUc1VlI5yTUMqLvofMUwZSd4w568/0r3yCFLSVYYh +tSHCqBxgV5mEWjPex89bCuhkju09cj/x3P8AjWYNVgh8YyWryLvESd+/OanNFfDsrJGo4la9 +GbF1OjxbgwPFMtLhGBjPQivmYaH11TyL2nB7W02b9yliV+ma6nRy0kYyc81z1XdtnXh42SNp +UXPIPTOaztYvBFBsUkZ9OtYdTv2Rwer3XnZTrkc15b4y0OTT5FvLRcrjEigcc8Z/XFenhZ8j +PIxtP2kTmJvIkg+07TFJuJZRnBJPb04r22K2kntLeSMFo54lmj2kEFT0+vfpnoa68Stjky9t +XRSsln0/xrp7TI8YLlGLcAkqRjPftXoO4qevPpivYyh/u2fN8SRarR9A3k9P1pCf9oD8K9dn +zifYhkHB+Y1WmxipZV2j5ttLZL/WLW1H7sTzKm4YPDEDoPSveGOLjOBnaGOa8vB/C7nu49Xk +mhs8ht7K7lUqXWORxuHBITjPtXH6n4cfWII5bK6WG7TJaZ/48889+v8AM1ljpu6XQ3yuknFz +W5ShTxnY3C23lW12p43iUcj15Of0ruNI0maGFZtUkjMrDJjT7oPp714OJlCHwn0+EhUqay2N +21hNxIOOOwFdbo9qQBuAzXnM9WGhoX00drAdrKX74riNTvPMZnmYBc0ktTSUrxMiV4HJ2EH3 +rF1i0kut8awiRGRkbcp24PBHBBzgmumL5WrnHJOd0jxvVhPBqMltdBd0DFcBAufcgetXp/G/ +iKexW1bVJkiV94EQEZB57qAcc9M46ele0oxqK7PnqlSdCTjF2L2n/EvxDZCJZ7iO9WJww+0o +GY4ycFup69yegxxkH0rw18V9K1q5SC6xYTvxsmYbW64Afpnp1xnPAruwU40W49zysypzxMVO +92julkUoCMYoLDIxjivZufO630InOeOCagl79KllbngXgmwWfx3ZhozJFFulb/Zwpwf++tte +wSnJibgZUjHXv/8Arry8Nfl1PcxqtNWCOQh14z87Dr2INc6dK86/eOxublNrBWKkbFx1xx69 +ugqcc4Qp80kVlXtalZU4M6bTdNhs4wETJxyxJyfxrREBkkHPHrXyM5OUrs+9hFU4pWNvT0WO +JUZRnv7Vpi+WBCF6j0OagvzOe8QeKLWxtHmuZ1RVBJLNgCvP7bX28VajG4Vf7PLHasik+dgk +E4BGPYH646VvSotpztsYVa6T5U9WdXa+HbYIjRRFVV94xxtOGGPphiMfTuAa1J7BY7Q7VySM +c1lKTk9TWnT5Fc8M8f8Ah+aHWbi+HV2LMgXoPX8h+tcYRg4Ne7hmuRI+cx0f3jYoUsQFBJPT +FXLSydomnkQ+WvXt+tdBxo7nwB4/fTdUh0m+neWwkxHE0g+aE9AP93t7celexEkDgDH1r1cJ +UcoWfQ8LMqKjUuupGSSfuj86gkzjoPpmulnF5I8o+GVpkX98yjazLCjDqMcsPpytd7IP3AbJ +O1/58f1rhofAj0sY26rbM6e7kuLlrSzJXB/eSj+HPYe/PXt9emrp9mkKBEXAAHQV4GaV/aT5 +ex9XkmG9lS5735jWWMIgweB3FVpNSigYhyPlPIJryUrs9uTsiteeL7SytWLXESuqkhXkCgn3 +PNcpr3xcs4Y2j07NxIOm3hfz/wAK6aWGlN7HHWxcaa1Z5lrfiK/165Ml7M2zPyxg/KP8TTvD +/iC60K9WSE+ZFu3NEeh9x6HHevW9jFQ5Tw3iJyqc5714Z8Twahp8ciklXUEg84zXTRyJOnyN +u9jXh1KfLJn0+Hrc0DPv9OtZxi4hSQEHhlz19q828c/DmyNg17oqOt0csLZIy3mgdQuOhGD+ +Ix3rbD13Tl5GWJwarRbW550LWC0lEUjv5yvgoV2lSMZBz0Of5VX1C/ExC242LnccDHP07fhX +tppq6PmpKUHytaooZ5zX0X4M1iTWfBlhd3OPOaIK5yPmZeCfx612YSTUrHnZgk6d+psHGSeu +agm56HmvTPE3OH8F6euneErRCq+ZOvnuR3LcjPuBgfhWlqF81vZ+XCQZpTtTodvctj2/Hkiv +Ok1Tpe8es054iyV9R2l2qwxge+WPUk+9bMdxFEmd3Svk6jcmfdU0oxstjN1fxJbWVs7SzBQv +Oc15jrnjDUNVu/s+krKQ2cMoJZvoK68HhnUfM9jkx2KjRjZPUzj4S1u6tpbuePJQZbzJBurL +tdHv752FpaySBerAYA+p6CvalRa0SPmo14zu7lWSN4ZWjkBV1JBB6ikU4PY/WsmrGyd1c9F+ +FeqyG/ks2A8kDI56Z7fnk/8A6q9hsrt4pyI4YmV42TdIuduf7o9cZ5IOOSMHBHjYpL2jPo8v +b9khLuN7dkVbWYxyk7ykTGPPBO5gNqkgNjcRnBHrVaXUBBps15NJPFbwqXaWSNGbbyQMDkYA +78/lXK4t2uepGrGMZKL2PnrxTq0WreLLu/tImhjlcEKeCOAOg4HTpWOTk5Ne9Sg4wUWfIYia +nVlNbMK9v+FUpPgKJOR5cjj655z+tduE/iHm49r2R2IcevWo3cbeSK9U8RLqzEGSnH5msu6f +drhTPKwKwUepLA/jwK8jH39joe7lT/2jUu21wHiCoBnH0pl3p2p3MbN5sMC44OSx/Hp/OvmZ +NRep9nBNrQ4zWvCF5eXivd3szRbvnyudoz1A9a6bQNH0+wsnXTkVuMeYfvt9T/SvosqrQqRt +1Plc8oVacua+j69vIkhj3ySRtyrKc/n/APXqVLK3hsRaxRLHEFwFAr1mkz55NpHnfiDwtbid +5rG4jUcYj8twfy5/T9K5cWcrXi26rmRmChcc5rza8FG7R7OFnKolFntPg3whb6DaRyXDKZMb +nYDgn+tdnBeWkjeVuXAxx6Y6V83Vl7SXMfZ4eHsYKJpxXUUNtsjXcR90sST36k5Pf8K5Pxpb +6lrukGzs2aBDIHkHUSY5APHI3Y7jp71EJJSuzoqxbg0jyDX/AAHqelWcN08ErK3yyYAJTGME +4/zxWOPDupFA3kHaQSDng49/wr2IYiLR81Uwc09ilbQebfxQyEqGcKTjOOfSvoTw7ZwabocE +FoyNEFBDA8HPevVwdm7niZjGShy2NIvwCdv50x2/H8a9Bni3b3MUHByc88c1heJtFutRMN1p +M/k3sGdhb7sgOMqfy/z1HFWhzxselQm6clJMydN8UNFemy1qNrC+j+XD8K59v88+prtdO1JZ +kAYhhgAYOf1r5jFUHCVmfZ4LFRqxTTNIWSTjcAMGqFx4cZbg3FoWhkbgkdGHoR3rlo1pUJqU +WdtelDEQcZK5lyWd5ZXO+6hJTnLxAnt6dfyzU6ssgOxsnocdq+tweOhil2fY+GzHLZ4KV0rx +7/5mLqelQJHLNOSzcnJldQo9fvdvpXDXFldxatBJaSOrrICJMFlVgeoJ6jiqxMLozwdS0rs9 +C07xdd2syWviMWo80E27Qq43gYyCpzz06HvW95Nnc2q3ELPHKTnglSo+hr5erT5HpsfeYapz +x13J4NWksz5d3KGGMb17/WoLrxjZQXsVq0ymWXgIvJPvWXs3J6HV7aNON2XZbuylhLSSKy4x +g8jkA9PoRXJeI9V0+wsWL7Y0PAROCx7Diqpxd7GFWUWuc5Lwl4UuNd1OXVLyJo7dW+TKnDN/ +9avQtGmbSb3+z7gH7PMx8knPyN/d/H+f1r18NXVKsr+h4WMwvt8PJ7Pf7joSB7j8qikI5Br6 +NHxLV9UcdfeMNKsJ2gaSWaRCQ6xJnafqcD8qrjx3pbsu6O7jGerRgj9Ca8+WIhF2PVhg6k48 +0UVNa1Xwpr0QivpySB8knlMrIfY4/wDrVz6RahpEm/w5q8N9ADkQlhvA/wB0/wBD+FZVo066 +N6Dr4R7aGzpXxRmsX8nVbKRCvUp1z7g12ekfEvQ9Q2p9oWNjxtk+X+deFiMFKDvHVH0uFx8K +is3ZnU281rexBoyrE89qg1DRLacgmEBwOHXhhz/9avPUpU5c0XZnqckakXGS0ZkyaDcoCBIj +bRwXX/64qlN4RkupUe52yur5RQdgz+H9c16bzatOPK7HkRyLD0580b+l9CtN4evLG7dmtJvK +Rty/xAHA7gDPft3rAvdSuV1aTZJPAkYCMRbiUMOcgjcpyMgjn1rOE1Uep3zg6EXyl221ayjg +8lrSPUBIA3mNEq+W2cHOeQO/BbPTAx81K8tLe4kEjS29o6LlFtkC7SQM/NjJ6deAR1FUouLu +ZSmqkbM52O31ubVI9Ns9VJ88na8noOmTyentXR6FpX/COeIWt9bkW4nmQPHcPlgwx8yjPoev +TtXYqKdJ1EjzamJcK6oyeh3yGMxAIMAjGAP6VUvtPS+hkjkUfN+tcLbi7nqRXNGwtheFFFpd +yDz1+VS3/LQDv9cDmrLt8vHPevqsLV9rTUr6nwmY4f2FdpKy6HiEcTyYwpVCMcDINWI7JmH3 +lP0bivDkz6inDuWItIDgMFJA/IVfi8NLMuAAWAyVPArJzaOmOHjIe/hNJIFjO9UB4TdgA+uK +oXXgEn/j3lIAyeRnIoWJktxSy+MttGFhY+JtAlLaZeXURT0OV/75ORXd+HfHutNMsGu2qzIe +s0XykdslT19eMewrnrxhVXMtGdGHjWpPleqO3t7qG6gEscqOh4+XnmrP2SB4zK8CTqBjhhuB +rzrWdj04J/EVZJYUlcxy31m644fMingc8E8flWfexQ3UDSBNOvJDwSH2soPX8a0V1sVvozk9 +a0yKyvF+zQJC0UaMV84Oc45Y49eTXP3mpPEdskYJ6cH8v5V2wd0cNSEYNuxS0fU4IPE9ndmN +ljSTD7RkYIIyfTBIP4V2+uf2X4h09YrW/t47uM77aQuAQ/PHPJB6H869nBShyShJny+a0Zyq +wq007LsQ+GfEbS3D2GqL9nvIDtkjb27j2NdS+yRMqVJPrzivKrUnCTTPdwldVYKSW5nXlms5 +5znqCOxqjK9/aD5ZROnA2yDnA9+ufrmtcPiZUH7uxni8FTxStLc8sju/NRUAUDqQDWhC+VC7 +Q2Dntz/9erkYUn1NOKYo6LGgDHkDGSR71qW8mxQ2wHvwePesJI7qcrM0reRGIBG3kDG7qffv +371dhjiKHcgOec985rnkdkWSNbxvwqDr0I71EdPQnIQA+ijpipKVupdgVomVoi0Z65zx+I/z +3qV7vziFvoEniPzEKMEkdOvvUuF9S4yto9ixbThFdoL2RdpGY5EJLewJBHHXsOPwqnqMrz28 +qXKW7b23BhGAcemaSjrcpNJW6GBdSSDldhGMcHt7D9PwrLOkz6tP+8URIOpx/j9K3TSMaqcj +Ug0eK1t9vlxsBk46dv8A6/8AOrN9a2HyqEVw65DZAHcY/A+3+FTzNsnlUVY5fXNKka4iuoHc +SQcAoedvpn09u1X7DxJeW0Ki5jLjud2Diurn9otTgdL2cm11NCHxXbvxNvjP+0P8KoX/AI4t +gpSyia6kJ47L6de/4UlTuU6vKecLOEwUwcdR3H0q9a6gDkqcHvXS1c8uMrOyLsV84KMDu57n +8a1rLWSu0nDMpOfesZRR2U6lnqattqarIu6IMdvPbnjvmtiC8+YBWUkjGAxOOOuBXPKJ305l +1LjDOsoHovYHp69Dn+VSRldrYVHckjOOoHTNZWsbqRahiBwzLggYwec/5/pTzEikDktjp/n8 +qLlMguECfNEFCnkiqDEtKWbPPBweDzxx26mmikNNoXCqQ2CevoP88Vdgt0jgGV55GSPeobKt +1Ce0WaNsD5NvY9fx7j39qym0qCFSyQBSucsDkjjP+frQpWFKKZHKojtwAjEYHDZz0/n1rCvI +USDeinA+XBJB9uK1gznnHWxgau7qrRjPJCsR2Bq3aW0cUSEg7iMBc9vYZrfm0OTkVzBjtLW7 +5ZihweRxz/jVefTDbjfDO2R3x1rdTtozglST95EEd/NbviQZGe3etax1ZTgNKeo49Kco3RNO +fK9TWh1CMMAzZOwZPX8M/wCetbEV7tXCyeWwOAxBHcf5xWEondCdzTt71iVXe+WbcXPQAYx/ +MflWlBOJrdRAcpu3ex5rCSOqMrmrEfMBWNuRzk9Oxpot5FuN26QEN68kZ5FQb7j3DMpEhGcd +R+hrPeFLeIvtyuc8AZPtSK0LEQDYOADjAwP6VKcBdqgA5HT6/WpLjLS6JoiPKyeMjAH/ANeq +02wN8x9WbOSR16fjQMyrtd55KkHjjn/Peue1ErCXYtgAdzVxMasdDCmaG4dHZsZyMHt/nH61 +pB0WJVSTIxnnk/5xW7Rx3tqf/9kA/+0SiFBob3Rvc2hvcCAzLjAAOEJJTQPtClJlc29sdXRp +b24AAAAAEABIAAAAAQACAEgAAAABAAI4QklNBA0YRlggR2xvYmFsIExpZ2h0aW5nIEFuZ2xl +AAAAAAQAAAAeOEJJTQQZEkZYIEdsb2JhbCBBbHRpdHVkZQAAAAAEAAAAHjhCSU0D8wtQcmlu +dCBGbGFncwAAAAkAAAAAAAAAAAEAOEJJTQQKDkNvcHlyaWdodCBGbGFnAAAAAAEAADhCSU0n +EBRKYXBhbmVzZSBQcmludCBGbGFncwAAAAAKAAEAAAAAAAAAAjhCSU0D9RdDb2xvciBIYWxm +dG9uZSBTZXR0aW5ncwAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEA +MgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA/gXQ29sb3IgVHJhbnNm +ZXIgU2V0dGluZ3MAAABwAAD/////////////////////////////A+gAAAAA//////////// +/////////////////wPoAAAAAP////////////////////////////8D6AAAAAD///////// +////////////////////A+gAADhCSU0ECAZHdWlkZXMAAAAAEAAAAAEAAAJAAAACQAAAAAA4 +QklNBB4NVVJMIG92ZXJyaWRlcwAAAAQAAAAAOEJJTQQaBlNsaWNlcwAAAACTAAAABgAAAAAA +AAAAAAABxgAAAVQAAAAZADAAOAAwAGoATABlAG4AawBhAFcAbwBsAGYAZwBhAG4AZwA0ADcA +NwAtADIAOAAxADYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAVQAAAHGAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhCSU0EERFJQ0MgVW50YWdnZWQgRmxh +ZwAAAAEBADhCSU0EFBdMYXllciBJRCBHZW5lcmF0b3IgQmFzZQAAAAQAAAABOEJJTQQMFU5l +dyBXaW5kb3dzIFRodW1ibmFpbAAADsEAAAABAAAAVAAAAHAAAAD8AABuQAAADqUAGAAB/9j/ +4AAQSkZJRgABAgEASABIAAD/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsKCxEV +DwwMDxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0O +DRAODhAUDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM +DAwMDAz/wAARCABwAFQDASIAAhEBAxEB/90ABAAG/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwAB +AgQFBgcICQoLAQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMM +MwEAAhEDBCESMQVBUWETInGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkST +VGRFwqN0NhfSVeJl8rOEw9N14/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eH +l6e3x9fn9xEAAgIBAgQEAwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMk +YuFygpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSl +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 +SKhkmWgOstGGWnInO0WVyF89Rl28PptG+LjTFbTRm6AKgStCCzMDvE+/xmjiVcHlNY9RpG81 +Vb9M6zrd56ZVo5rTTLVFCbkl5g5oKbz0COTrxZrD5gxy7IpcnscXoJRNwqrLWG4jbNksEnSo +AAOkXm93kb/O9Hdj1eZ0+hWe+HXpeWuU9Ep89sZSvNI34uwNHMgYnG115eby3n7XR8/6Sv05 +nSNM/NovN6Ia6t4qNNMtshJRoOJVNosFLTAKGq8rr6NOfE6ccejLoq04u7JynZCwnaFc56pn +F1c2bnuzzzz5mq87M1wuKmpLzA9bt+evPXbt8ra47u3zfQz17YHnrc0nOKrIt3FNUiAp52FgMW +0vNTkasq1ZKpBNCpqJ1Q8J2hXj5nsYD8fg6+PfnGioGgAGFbPapw11pz1ULPXtqb5+oCQjHR +NzabKzuQi1bTGBU1nm1vGonQ3mhjSaYFSxOdBrnjaJ18/wAH6jyrXkAbc4DBW+tzsujO870W +lSqVY9HTSrl6yXzMVS6bcgaKWA0hWZjOibWbek04pyyWIYCQW82GlZNy4uU8uXsyWnznL7Xi +74Fw6z9ffPo2wSpNDQC6ceri9FsM7w5ObSzpqNBtpgk0CCWgAXcUZopNoGmknKokkdGYntWV +NaEtyZaQq5Pn/oPI0jiqerbnv1MdtMaQVJLiNezWb4e94beTS8/t4fR0npqajRqgImpaIQIM +Rr3QqJgcgCkqlnmGsYSLpIpWXMp71jQqQmZeV6vFU+L18tdPJ7Sm9MUrGst8O3l7drkx3n53 +2PA0z29Hg9IetzU6CcgpcuZzaaRAL33JCqZkbzMxkNtFTInmZs6zl641VITtALPn6cWvG5fY +8vfn9Lu8P2Ojl1hc6enbj0cPo3F4h5fl9XPvz9nfydcb61FTQlLRneQlncOZENe7ORnVKEFq +ZauZoEUBnG+YcHo+N00vXIvLZiYKdBrk4fU56Xh9uWHRx+xWHXj0a656Zavm24KnyKz26Obt +6efox6baBokFGZLkisWqMxr2xLLSYeDWlcewuu4tUwSFz68FLz/U8v3dcc+ng3y36qyqL0JY +ljvmzg4vU5Ljp6I1zuqlBPk9/ja4zuLXLt25+nLpaITpKXM5uXJnWbUGY59tYzlrpkoaMJq4 +37eHuc2sxGfB3w1j6WYVgT1VnWvJth1bvOprSUBly9mLW946zSzMqnn8vorfl2w3wZ1b8+mX +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 +fQ+0dG78Q7ENPdg+qnyhDeOn/9k= + +--XX9ADB9A99-1A5B9ADBXX-- diff --git a/Ch3/datasets/spam/spam/00261.12b64e557e52daf5fc5a52e47df2f4e3 b/Ch3/datasets/spam/spam/00261.12b64e557e52daf5fc5a52e47df2f4e3 new file mode 100644 index 000000000..00b991750 --- /dev/null +++ b/Ch3/datasets/spam/spam/00261.12b64e557e52daf5fc5a52e47df2f4e3 @@ -0,0 +1,190 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Fri Sep 6 20:09:35 2002 +Return-Path: +Received: from mailer2.astrology.com (mailer2.astrology.com [129.250.156.187]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g8719VX2026373 + for ; Fri, 6 Sep 2002 20:09:33 -0500 (CDT) +Message-Id: <200209070109.g8719VX2026373@lerami.lerctr.org> +Received: from pierce.astrology.com (pierce.green.astrology.com) by mailer2.astrology.com (LSMTP for Windows NT v1.1b) with SMTP id <194.000FB39B@mailer2.astrology.com>; Fri, 6 Sep 2002 18:14:22 -0700 +To: ler@lerctr.org +Subject: Get the Computer Skills you need - Free +From: greatdeals@webstakes.com +Date: Fri, 06 Sep 2002 21:04:01 -0500 +Reply-To: greatdeals@webstakes.com +Content-Type: multipart/alternative; + boundary="______BoundaryOfDocument______" +MIME-Version: 1.0; Windows-1252 +Content-Transfer-Encoding: 8bit +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + + +This is a multi-part message in MIME format. + +--______BoundaryOfDocument______ +Content-Type: text/plain +Content-Transfer-Encoding: 7bit + + +FREE CD-ROM LESSONS +http://isis.webstakes.com/play/Isis?ID=89801 + +- Choose from 15 titles +- Learn new skills in 1 hour +- Compare at $59.95 +- Quick, easy and FREE! + +Get FREE* computer learning from Video Professor on a subject of your +choice. For over 14 years, Video Professor has taught millions of people +how to use their computers, and we can teach you too, FREE. + +Get Your FREE Lesson Today! +http://isis.webstakes.com/play/Isis?ID=89801 + +Simple 'What You See Is What You Get' way to learn + +- Plays like a video on your computer screen +- A complete & comprehensive lesson FREE & RISK FREE +- Over 3 million satisfied user + +Select from these titles available FREE... + +Windows, Outlook, Excel, Access, Powerpoint, FrontPage, Works, Quicken, +Internet, Word, WordPerfect, Lotus 1-2-3, DOS + +Get Your FREE Lesson Today! +http://isis.webstakes.com/play/Isis?ID=89801 + + +* You only pay $6.95 shipping and handling conveniently billed to your +Visa, Mastercard, America Express or Discover Card. Windows compatible +only. Some restrictions may apply. + + +-------------------------------- +Webstakes.com - Where INSTANT WINNING happens daily! + +Webstakes.com Customer Service +http://home.webstakes.com/play/HomePage?temp=2201&tb_id=301 +http://www.webstakes.com + +This email was sent to ler@lerctr.org. + +You are receiving this email because you opted-in to +periodically receive emails with special offers from +Webstakes.com. If you'd like to unsubscribe from +future emails, please see below. +http://service.ivillage.com/Apps/DCS/mcp?r=7003B9351HUJs01200027c03B930mpHyWpHdh + +(If the above link does not work, please copy and +paste the entire into your browser) + +--______BoundaryOfDocument______ +Content-Type: text/html +Content-Transfer-Encoding: 7bit + + + +Untitled Document + + + + +
    + + +
    +


    + + + + + + + +
    +

    It’s FAST! You’ll be up and running in an hour! Don’t + waste time sifting through manuals, commuting to classes or seminars. Just + pop in the CD-ROM and you’re learning!

    +

    It’s EASY! It’s as simple as + 1-2-3! Video Professor’s straightforward “What-You-See-Is-What-You-Do” + approach makes learning as easy as watching TV!

    +

    It’s CONVENIENT! We’re ready to + teach you day and night! With your busy schedule, you don’t have time to + waste at classes or seminars. Don’t fumble through boring manuals. + Whatever your schedule, we’re ready when you are!

    +

    It’s COMPLETE! These aren’t + short teaser lessons. Each 60-minute lesson takes you from installing the + software to more advanced skills. And they’re not just for beginners! + We’ll surprise you with the knowledge you’ll gain!

      +



    Why Am I Making This + Incredible Offer?


    I’m so confident that once you try my exceptional + “What-You-See-Is-What-You-Do” learning method, you’ll turn to us for all + your computer learning needs.

    +


    +

    Choose + Any Lesson FREE!
    Getting Started with + Your Personal Computer • Windows® XP, Me, 98 or 95 • The Intenet • Excel • + Word • Access • FrontPage • Outlook • PowerPoint • WordPerfect • Lotus + 1-2-3 • Works • Quicken • DOS

    +

    Get your FREE lesson today!

    +

    +

     

     
    +
    *You only pay $6.95 shipping and handling conveniently + billed to your Visa, MasterCard, America Express or Discover Card. Windows + compatible only. Some restrictions may apply. +

    + + + + + + +
    + + + Webstakes.com + +
    + + Webstakes.com customer service + +
    + + http://www.webstakes.com/ + +

    + This email was sent to ler@lerctr.org. +

    + You are receiving this email because you opted-in to periodically receive emails with special offers from Webstakes.com. If you'd like to unsubscribe from future emails, please see below.
    +Click here +
    + +
    + +
    + +--______BoundaryOfDocument______-- + + + +Please include the following line in your reply. +annmn:[73B9303B9351HUJs012000003B930mpHyWpHdh] + + diff --git a/Ch3/datasets/spam/spam/00262.678598cbe253f19239da03b65dac7392 b/Ch3/datasets/spam/spam/00262.678598cbe253f19239da03b65dac7392 new file mode 100644 index 000000000..75a90c1b9 --- /dev/null +++ b/Ch3/datasets/spam/spam/00262.678598cbe253f19239da03b65dac7392 @@ -0,0 +1,190 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Fri Sep 6 22:21:05 2002 +Return-Path: +Received: from mailer2.astrology.com (mailer2.astrology.com [129.250.156.187]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g873L2X2015392 + for ; Fri, 6 Sep 2002 22:21:03 -0500 (CDT) +Message-Id: <200209070321.g873L2X2015392@lerami.lerctr.org> +Received: from polk.astrology.com (polk.green.astrology.com) by mailer2.astrology.com (LSMTP for Windows NT v1.1b) with SMTP id <212.000FBEE0@mailer2.astrology.com>; Fri, 6 Sep 2002 20:25:53 -0700 +To: ler@lerami.lerctr.org +Subject: Get the Computer Skills you need - Free +From: greatdeals@webstakes.com +Date: Fri, 06 Sep 2002 23:09:03 -0500 +Reply-To: greatdeals@webstakes.com +Content-Type: multipart/alternative; + boundary="______BoundaryOfDocument______" +MIME-Version: 1.0; Windows-1252 +Content-Transfer-Encoding: 8bit +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + + +This is a multi-part message in MIME format. + +--______BoundaryOfDocument______ +Content-Type: text/plain +Content-Transfer-Encoding: 7bit + + +FREE CD-ROM LESSONS +http://isis.webstakes.com/play/Isis?ID=89801 + +- Choose from 15 titles +- Learn new skills in 1 hour +- Compare at $59.95 +- Quick, easy and FREE! + +Get FREE* computer learning from Video Professor on a subject of your +choice. For over 14 years, Video Professor has taught millions of people +how to use their computers, and we can teach you too, FREE. + +Get Your FREE Lesson Today! +http://isis.webstakes.com/play/Isis?ID=89801 + +Simple 'What You See Is What You Get' way to learn + +- Plays like a video on your computer screen +- A complete & comprehensive lesson FREE & RISK FREE +- Over 3 million satisfied user + +Select from these titles available FREE... + +Windows, Outlook, Excel, Access, Powerpoint, FrontPage, Works, Quicken, +Internet, Word, WordPerfect, Lotus 1-2-3, DOS + +Get Your FREE Lesson Today! +http://isis.webstakes.com/play/Isis?ID=89801 + + +* You only pay $6.95 shipping and handling conveniently billed to your +Visa, Mastercard, America Express or Discover Card. Windows compatible +only. Some restrictions may apply. + + +-------------------------------- +Webstakes.com - Where INSTANT WINNING happens daily! + +Webstakes.com Customer Service +http://home.webstakes.com/play/HomePage?temp=2201&tb_id=301 +http://www.webstakes.com + +This email was sent to ler@lerami.lerctr.org. + +You are receiving this email because you opted-in to +periodically receive emails with special offers from +Webstakes.com. If you'd like to unsubscribe from +future emails, please see below. +http://service.ivillage.com/Apps/DCS/mcp?r=7003B9351TAWR01200027c03B930mrvm4rvqf + +(If the above link does not work, please copy and +paste the entire into your browser) + +--______BoundaryOfDocument______ +Content-Type: text/html +Content-Transfer-Encoding: 7bit + + + +Untitled Document + + + + +
    + + +
    +


    + + + + + + + +
    +

    It’s FAST! You’ll be up and running in an hour! Don’t + waste time sifting through manuals, commuting to classes or seminars. Just + pop in the CD-ROM and you’re learning!

    +

    It’s EASY! It’s as simple as + 1-2-3! Video Professor’s straightforward “What-You-See-Is-What-You-Do” + approach makes learning as easy as watching TV!

    +

    It’s CONVENIENT! We’re ready to + teach you day and night! With your busy schedule, you don’t have time to + waste at classes or seminars. Don’t fumble through boring manuals. + Whatever your schedule, we’re ready when you are!

    +

    It’s COMPLETE! These aren’t + short teaser lessons. Each 60-minute lesson takes you from installing the + software to more advanced skills. And they’re not just for beginners! + We’ll surprise you with the knowledge you’ll gain!

      +



    Why Am I Making This + Incredible Offer?


    I’m so confident that once you try my exceptional + “What-You-See-Is-What-You-Do” learning method, you’ll turn to us for all + your computer learning needs.

    +


    +

    Choose + Any Lesson FREE!
    Getting Started with + Your Personal Computer • Windows® XP, Me, 98 or 95 • The Intenet • Excel • + Word • Access • FrontPage • Outlook • PowerPoint • WordPerfect • Lotus + 1-2-3 • Works • Quicken • DOS

    +

    Get your FREE lesson today!

    +

    +

     

     
    +
    *You only pay $6.95 shipping and handling conveniently + billed to your Visa, MasterCard, America Express or Discover Card. Windows + compatible only. Some restrictions may apply. +

    + + + + + + +
    + + + Webstakes.com + +
    + + Webstakes.com customer service + +
    + + http://www.webstakes.com/ + +

    + This email was sent to ler@lerami.lerctr.org. +

    + You are receiving this email because you opted-in to periodically receive emails with special offers from Webstakes.com. If you'd like to unsubscribe from future emails, please see below.
    +Click here +
    + +
    + +
    + +--______BoundaryOfDocument______-- + + + +Please include the following line in your reply. +annmn:[73B9303B9351TAWR012000003B930mrvm4rvqf] + + diff --git a/Ch3/datasets/spam/spam/00263.13fc73e09ae15e0023bdb13d0a010f2d b/Ch3/datasets/spam/spam/00263.13fc73e09ae15e0023bdb13d0a010f2d new file mode 100644 index 000000000..daa97ad6f --- /dev/null +++ b/Ch3/datasets/spam/spam/00263.13fc73e09ae15e0023bdb13d0a010f2d @@ -0,0 +1,64 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Sat Sep 7 06:14:26 2002 +Received: via dmail-2002(12) for +lists/freebsd/ports; Sat, 7 Sep 2002 06:14:26 -0500 (CDT) +Return-Path: +Received: from mx2.freebsd.org (mx2.FreeBSD.org [216.136.204.119]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g87BEIX2008158 + for ; Sat, 7 Sep 2002 06:14:19 -0500 (CDT) +Received: from hub.freebsd.org (hub.FreeBSD.org [216.136.204.18]) + by mx2.freebsd.org (Postfix) with ESMTP + id D6B0B5548A; Sat, 7 Sep 2002 04:14:14 -0700 (PDT) + (envelope-from owner-freebsd-ports@FreeBSD.ORG) +Received: by hub.freebsd.org (Postfix, from userid 538) + id 448B137B401; Sat, 7 Sep 2002 04:14:14 -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) + by hub.freebsd.org (Postfix) with SMTP + id 33D712E8016; Sat, 7 Sep 2002 04:14:14 -0700 (PDT) +Received: by hub.freebsd.org (bulk_mailer v1.12); Sat, 7 Sep 2002 04:14:14 -0700 +Delivered-To: freebsd-ports@freebsd.org +Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) + by hub.freebsd.org (Postfix) with ESMTP id 31C6137B400 + for ; Sat, 7 Sep 2002 04:14:13 -0700 (PDT) +Received: from mgate.netpath.ne.jp (lilac.netpath.ne.jp [210.253.168.208]) + by mx1.FreeBSD.org (Postfix) with SMTP id 4816543E65 + for ; Sat, 7 Sep 2002 04:14:12 -0700 (PDT) + (envelope-from joko@rs.128.ne.jp) +Received: (qmail 46020 invoked from network); 7 Sep 2002 09:24:03 -0000 +Received: from p6044-ipad22marunouchi.tokyo.ocn.ne.jp (HELO D) (61.214.35.44) + by lilac.netpath.ne.jp with SMTP; 7 Sep 2002 09:24:03 -0000 +From: =?iso-2022-jp?B?am9rb0Bycy4xMjgubmUuanA=?=@FreeBSD.ORG +To: =?iso-2022-jp?B?MTIx?=@FreeBSD.ORG +Reply-To: joko@rs.128.ne.jp +Date: Sat, 07 Sep 2002 18:24:06 +0900 +Subject: =?iso-2022-jp?B?GyRCJDckOCRfJEgkYiRiJE4lMyVpJVwlbCE8JTclZyVzGyhK?= +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +MIME-Version: 1.0 +Message-Id: <20020907111412.4816543E65@mx1.FreeBSD.org> +Sender: owner-freebsd-ports@FreeBSD.ORG +List-ID: +List-Archive: (Web Archive) +List-Help: (List Instructions) +List-Subscribe: +List-Unsubscribe: +X-Loop: FreeBSD.org +Precedence: bulk +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +‚à‚à‚ª‚Í‚¶‚¯‚ĂԂǂ¤‚ª‚ä‚ê‚é +‚µ‚¶‚݂Ƃà‚à‚̃Rƒ‰ƒ{ƒŒ[ƒVƒ‡ƒ“ +ƒƒŠ[ƒ^ƒrƒfƒIi‚c‚u‚cjê–å +‚¢‚‚܂ʼnc‹Æ‚Å‚«‚é‚©‚í‚©‚è‚Ü‚¹‚ñ +‚²’•¶‚Í‚¨‘‚ß‚ÉI +http://www.transrave.com/PC/rori +ì•i—á +­—“`à@–¼ŒÃ‰®’c’n9@­—‚Ì“¹‘ +‚ȂǂȂÇ132ì•iBD•]”­”„’†I +(^-^)/~ƒƒŠ˜F—˜ƒ€ƒg[ + + +To Unsubscribe: send mail to majordomo@FreeBSD.org +with "unsubscribe freebsd-ports" in the body of the message + diff --git a/Ch3/datasets/spam/spam/00264.02b614f34aa0d5970959123b9386b285 b/Ch3/datasets/spam/spam/00264.02b614f34aa0d5970959123b9386b285 new file mode 100644 index 000000000..056132c2c --- /dev/null +++ b/Ch3/datasets/spam/spam/00264.02b614f34aa0d5970959123b9386b285 @@ -0,0 +1,129 @@ +From bounce@trafficmagnet.com Tue Sep 10 11:13:55 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id B09FC16F03 + for ; Tue, 10 Sep 2002 11:13:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 10 Sep 2002 11:13:53 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g89JZ0C29435 for + ; Mon, 9 Sep 2002 20:35:05 +0100 +Received: from localhost.localdomain ([211.101.236.180]) by webnote.net + (8.9.3/8.9.3) with ESMTP id UAA00365 for ; + Mon, 9 Sep 2002 20:35:12 +0100 +Received: from () by localhost.localdomain (8.11.6/8.11.6) with ESMTP id + g89JRj329191 for ; Tue, 10 Sep 2002 03:27:51 + +0800 +Message-Id: <505CR1000010979@p1j2m3a4.pdhost.com> +Date: Tue, 10 Sep 2002 03:34:01 +0800 (CST) +From: Sarah Williams +Reply-To: Sarah Williams +To: zzzz-list-admin-iiu@spamassassin.taint.org +Subject: iiu.taint.org +MIME-Version: 1.0 +X-Ema-Cid: 11513610 +X-Ema-Lid: +X-Ema-PC: 0f02f9b386000 +Content-Type: multipart/alternative; boundary=1189366250.1031600041421.JavaMail.SYSTEM.emaserver2 + +--1189366250.1031600041421.JavaMail.SYSTEM.emaserver2 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 7bit + +Hi + +I visited iiu.taint.org, and noticed that you're not listed on some search engines! I think we can +offer you a service which can help you increase traffic and the number of visitors to your website. + +I would like to introduce you to TrafficMagnet.com. We offer a unique technology that will submit your +website to over 300,000 search engines and directories every month. + +You'll be surprised by the low cost, and by how effective this website promotion method can be. + +To find out more about TrafficMagnet and the cost for submitting your website to over 300,000 search +engines and directories, visit us at: + +http://p1j2m3a4.pdhost.com/pdsvr/www/r?1000010979.505.23.eUcT$DXPhW5$zo + + +I would love to hear from you. + + +Best Regards, + +Sarah Williams +Sales and Marketing +E-mail: Sarah_Williams@trafficmagnet.com +http://www.TrafficMagnet.com + +This email was sent to zzzz-list-admin-iiu@jmason.org. +I understand that you may NOT wish to receive information from me by email. +To be removed from this and other offers, simply go to the link below: +http://p1j2m3a4.pdhost.com/pdsvr/www/optoutredirect?UC=Lead&UI=11513610 +--1189366250.1031600041421.JavaMail.SYSTEM.emaserver2 +Content-Type: text/html; charset=utf-8 +Content-Transfer-Encoding: 7bit + + + + + + + + + + + + + + + +
    Hi
    +
    + I visited iiu.taint.org, and + noticed that you're not listed on some search engines! I think we can offer + you a service which can help you increase traffic and the number of visitors + to your website.
    +
    + I would like to introduce you to TrafficMagnet.com. We offer a unique technology + that will submit your website to over 300,000 search engines and directories + every month.
    +
    + + + + + + +
     
    +
    + You'll be surprised by the low cost, and by how effective this website promotion + method can be.
    +
    + To find out more about TrafficMagnet and the cost for submitting your website + to over 300,000 search engines and directories, visit www.TrafficMagnet.com. +
    +
    + I would love to hear from you.
    +

    + Best Regards,

    + Sarah Williams
    + Sales and Marketing
    + E-mail: Sarah_Williams@trafficmagnet.com
    + http://www.TrafficMagnet.com +

     

    This email was sent to zzzz-list-admin-iiu@jmason.org.
    + I understand that you may NOT wish to receive information from me by email.
    + To be removed from this and other offers, simply click here.
    +
    +. + + +--1189366250.1031600041421.JavaMail.SYSTEM.emaserver2-- + + diff --git a/Ch3/datasets/spam/spam/00265.d2acd28cf29d90c9b7a1297b219187b3 b/Ch3/datasets/spam/spam/00265.d2acd28cf29d90c9b7a1297b219187b3 new file mode 100644 index 000000000..bcf242c5c --- /dev/null +++ b/Ch3/datasets/spam/spam/00265.d2acd28cf29d90c9b7a1297b219187b3 @@ -0,0 +1,315 @@ +From dbs@insiq.us Tue Sep 10 11:13:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 05C0716F03 + for ; Tue, 10 Sep 2002 11:13:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 10 Sep 2002 11:13:56 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g89MvHC02964 for ; Mon, 9 Sep 2002 23:57:17 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Mon, 9 Sep 2002 18:58:26 -0400 +Subject: Term Insurance Is Out +To: +Date: Mon, 9 Sep 2002 18:58:26 -0400 +From: "IQ - DBS" +Message-Id: +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJYQAOQB2TVGvPZRh69AG3+iBsQhw== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 09 Sep 2002 22:58:26.0687 (UTC) FILETIME=[681AA8F0:01C25854] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_82073_01C2581E.7C88D2C0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_82073_01C2581E.7C88D2C0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: quoted-printable + + No Term Insurance + Permanent Insurance is In! +=20 + Diversified Makes it Better!=09 + _____ =20 + + Better... ...products!=09 + Better... ...commissions!=09 + Better... ...case design!=09 + Better... ...service!=09 + Better... ...marketing concepts!=09 + _____ =20 + +Aggressive underwriting programs such as... =20 + Table 5 to Standard on permanent cases! =20 +Other company term to permanent life insurance with=20 +non-med underwriting! =20 +Simplified and guarantee issue programs for multi-life cases! =20 +Low cost lifetime guarantees! =20 +UNDERWRITING EVENTS!... =20 + +Diversified Brokerage Specialists has been combining +the very best in technology and personal service since 1946!=20 +Make sure to ask about our full line of Disability & LTC products! +"If we can't do it, it can't be done!" =09 + +Call Diversified Brokerage Specialists Today! 800-621-6161 +=97 or =97 + +Please fill out the form below for more information =20 +Name: =09 +E-mail: =20 +Phone: =20 +City: State: =20 + =09 +=20 + + Diversified Brokerage Specialists, Inc.=0A= +Better Service Through +Technology + +Visit us online at: www.dbs50.com =20 + =20 +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.Insuranceiq.com/optout +=20 + +Legal Notice =20 + +------=_NextPart_000_82073_01C2581E.7C88D2C0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Term Insurance Is Out + + + + + + =20 + + + =20 + + +
    =20 + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + +
    3D'No
    =20 +
    =20 +
    =20 + +
    =20 + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + +

    3D"Better..."3D"...products!"
    3D"Better..."
    3D"Better..."3D"...case
    3D"Better..."3D"...service!"
    3D"Better..."3D"...marketing

    +
    =20 + + =20 + + + =20 + + + + =20 + + + =20 + + + =20 + + + =20 + + +
    Aggressive underwriting programs such as...
    Table 5 to Standard on permanent = +cases!
    Other company term to permanent life insurance = +with
    + non-med underwriting!
    Simplified and guarantee issue programs for = +multi-life cases!
    Low cost lifetime guarantees!
    UNDERWRITING EVENTS!...
    +
    =20 +
    + Diversified Brokerage Specialists has been combining
    + the very best in technology and personal service since 1946! = +

    =20 + Make sure to ask about our full line of Disability & = +LTC products!
    + "If we can't do it, = +it can't be done!"
    =20 +

    + Call Diversified Brokerage Specialists = +Today!=20 +
    + — or —
    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please fill out the form below for more = +information
    Name:
    E-mail:
    Phone:
    City:State:
     =20 + =20 + =20 + =20 +
    +
    +

    +

    + Visit us online at: www.dbs50.com=20 +
      +
    +
    =20 +

    We = +don't want anyone=20 + to receive our mailings who does not wish to. This is = +professional communication=20 + sent to insurance professionals. To be removed from this mailing = +list,=20 + DO NOT REPLY to this message. Instead, go here: =20 + http://www.Insuranceiq.com/optout

    +
    +
    + Legal Notice=20 +
    +
    =20 + + + +------=_NextPart_000_82073_01C2581E.7C88D2C0-- + + diff --git a/Ch3/datasets/spam/spam/00266.3cf1dcf8df07100b1530493e11f80a25 b/Ch3/datasets/spam/spam/00266.3cf1dcf8df07100b1530493e11f80a25 new file mode 100644 index 000000000..7be13fe7a --- /dev/null +++ b/Ch3/datasets/spam/spam/00266.3cf1dcf8df07100b1530493e11f80a25 @@ -0,0 +1,146 @@ +From unitedlending@terra.es Tue Sep 10 11:14:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id B31B516F03 + for ; Tue, 10 Sep 2002 11:14:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 10 Sep 2002 11:14:02 +0100 (IST) +Received: from server_nt.sari.com.jo (server2.sari.com.jo [80.90.162.46] + (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8A48NC16547 for ; Tue, 10 Sep 2002 05:08:23 +0100 +Received: from mx.terra.es (cm61-18-59-125.hkcable.com.hk [61.18.59.125]) + by server_nt.sari.com.jo with SMTP (Microsoft Exchange Internet Mail + Service Version 5.5.2653.13) id SR946R6M; Tue, 10 Sep 2002 07:02:30 +0100 +Message-Id: <00004c614748$00005132$000063db@mx.terra.es> +To: +Cc: , , + , , + , , + , , + , , + , , + , , , + , , + , , + , , + , , + , , , + , , + , , + , , + , , + , , + , , + , , + , , + , , + , , + +From: "Jack Bell" +Subject: MSNBC: Rates Hit 35 year Low 4.75% ...12021 +Date: Mon, 09 Sep 2002 21:00:53 -1900 +MIME-Version: 1.0 +Reply-To: unitedlending@terra.es +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + +
    + + + + + + <= +/TBODY>
    +

    Don't= + Wait! Refinance + Now!!

    +

    Take Advantage of the Lowest = +Rates + In Decades!

    + + + +
    +

     

    +

    Rates may only go higher!

    +

    LOWER YOUR= + PAYMENT AND + LOWER YOUR RATE!!!  

    +

    USE OUR 100% FREE SERVICE <= +/FONT>  
    +

    +

    *** No FEES<= +/P> +

    ****No OBLIGATIONS and + No COMMITMENTS

    +

    Find Out How Much YOU Can $AVE!!! 

    +
      +
    • Its Free, Fast and Simple  +
    • Rates are at the lowest point in decades! +
    • National Lenders Ready to Serve You + !
    +

    +

    Click Here + Now

    +

    To be removed, REPLY to this email wit= +h REMOVE + in the SUBJECT.

    + + + + diff --git a/Ch3/datasets/spam/spam/00267.ef433fb350170f28a1567cbc24900e53 b/Ch3/datasets/spam/spam/00267.ef433fb350170f28a1567cbc24900e53 new file mode 100644 index 000000000..dca22b602 --- /dev/null +++ b/Ch3/datasets/spam/spam/00267.ef433fb350170f28a1567cbc24900e53 @@ -0,0 +1,110 @@ +From social-admin@linux.ie Tue Sep 10 11:22:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 2A45016F03 + for ; Tue, 10 Sep 2002 11:22:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 10 Sep 2002 11:22:46 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g89LH9C32488 for + ; Mon, 9 Sep 2002 22:17:09 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id WAA32626; Mon, 9 Sep 2002 22:16:39 +0100 +Received: from mail.tuatha.org (node-c-07f1.a2000.nl [62.194.7.241]) by + lugh.tuatha.org (8.9.3/8.9.3) with SMTP id WAA32589 for ; + Mon, 9 Sep 2002 22:16:33 +0100 +Message-Id: <200209092116.WAA32589@lugh.tuatha.org> +X-Authentication-Warning: lugh.tuatha.org: Host node-c-07f1.a2000.nl + [62.194.7.241] claimed to be mail.tuatha.org +From: "Mr. EDWARD MULETE" +Date: Mon, 09 Sep 2002 23:16:35 +To: social@linux.ie +MIME-Version: 1.0 +Content-Type: text/plain;charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +Subject: [ILUG-Social] urgent assistance +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group social events +X-Beenthere: social@linux.ie + +ATTN: + +I am Edward Mulete JR. the son of Mr. + +STEVE MBEKI MULETE from Zimbabwe. I am sorry this mail +Will surprise you, though we do not know, my mother Mrs. Clara +Got your contact through her private search. +Due to the current war against white farmers in +Zimbabwe and the support of President Robert Mugabe to +Claim all white owned farms in our country to gain +Favor for re-election. + +All white farmers were asked to +Surrender their farms to the government for +Re-distribution and infact to his political party +Members and my father though black was the treasury +of the farmers association and a strong member of an +Opposition party that did not support the president +Idea. He then ordered his party members and the police +Under his pay row to invade my father's farm and burn +Down everything in the farm. They killed my +Father and took away a lot of items from his farm. +After the death of my father, our local pastor and a +Close friend of my father handed us over will +Documents with instructions from my father that we +Should leave Zimbabwe incase anything happen to him. The will +Documents has a certificate of deposit, confirming a deposit +Kept in custody for us in a security company unknown +To the company that the content is money hence it was deposited as +Personal belongings and ensure that we do not remain here as we could +Easily be found by his enemies. The total amount is +US$21.5M.We are therefore soliciting for +Your assistance to help us move the fund out of +Zimbabwe, as our fate and future is far from +reality, hence this mail to you. The president's present ban of +International Press into Zimbabwe and the drop from office of the +Finance Minister to avoid giving white farmers fund Transfer +Clearance above US$1M is just a few of the +Unthinkable things he is committing in my Country. +I have tried to reach my father's close friend Mr. +John Casahans from Australia also a farmer who was +Leaving in Zimbabwe with us but left with his family +Late last year following this ugly development to no +Avail. +Should you be interested to help us, contact me +Immediately via email for easy communication and I +Will furnish you with the time frame and modalities of +the transaction. We have concluded a wonderful plan of +Caring out the transfer within two weeks. Please note that +This transaction is100% confidential and risk free and will +Not endanger you or us in any way. We have resolved to give you 20% +Of the total sum upon confirmation of the fund in any +Account of your choice were the incident of taxation +will not take much tool on the money and we look +Forward to coming over to your country to invest our +Share and settle there. I will a private +Phone so that our conversation can be +100% confidential. + +Please do not use the reply button, reply only to + +Edmulete7@netscape.net Please take note. + +God bless you indeed as you help yourself and us. + +Mr. EDWARD MULETE + + + + +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00268.9b64189b6da55d1e0a30026ca73eb0da b/Ch3/datasets/spam/spam/00268.9b64189b6da55d1e0a30026ca73eb0da new file mode 100644 index 000000000..fa77e943e --- /dev/null +++ b/Ch3/datasets/spam/spam/00268.9b64189b6da55d1e0a30026ca73eb0da @@ -0,0 +1,158 @@ +From webmake-talk-admin@lists.sourceforge.net Tue Sep 10 15:15:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 13F6516F03 + for ; Tue, 10 Sep 2002 15:15:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 10 Sep 2002 15:15:28 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8AAelC27198 for ; Tue, 10 Sep 2002 11:40:48 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17oiS7-0004ib-00; Tue, + 10 Sep 2002 03:41:03 -0700 +Received: from panoramix.vasoftware.com ([198.186.202.147]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17oiR9-0008HS-00 for + ; Tue, 10 Sep 2002 03:40:03 -0700 +Received: from [195.174.161.55] (port=3496 helo=yahoo.com) by + panoramix.vasoftware.com with smtp (Exim 4.05-VA-mm1 #1 (Debian)) id + 17oiR2-0006Uj-00 for ; Tue, + 10 Sep 2002 03:39:57 -0700 +From: "BILSAG" +To: +MIME-Version: 1.0 +Reply-To: "BILSAG" +Message-Id: +Content-Type: text/html; charset="ISO-8859-9" +Content-Transfer-Encoding: 8bit +Subject: [WM] CEVIRI YAZILIMLARI +Sender: webmake-talk-admin@example.sourceforge.net +Errors-To: webmake-talk-admin@example.sourceforge.net +X-Beenthere: webmake-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion of WebMake. +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 10 Sep 2002 13:41:57 +0300 +Date: Tue, 10 Sep 2002 13:41:57 +0300 + +HTML> + + + + + + + + +
    +

    +             
    + +
    +

    + + + + + + + + + + + + + + + +
    ÝNTERNETTE KENDÝNÝZÝ DAHA ÝYÝ HÝSSEDECEKSÝNÝZ. + ÝNGÝLÝZCE WEB SAYFALARININ TÜRKÇE'YE ÇEVÝRÝ YAZILIMI +
    $ 39+KDV
    ÝNGÝLÝZCE'DEN TÜRKÇE'YE BÝLGÝSAYAR DESTEKLÝ + METÝN ÇEVÝRÝ YAZILIMI + + (MS-WORD ALTINDA KULLANIM, TÜM WINDOWS VERSÝYONLARI ÝLE UYUMLU) +
    $ 69+KDV
    ÝKÝ YAZILIM   BÝRLÝKTE $ + 89+KDV +

    +

    Ayrýntýlý Bilgi + Ýçin  týklayýn +            

    +

    + +  

    +

    BÝLSAG Ltd.

    +

    AHMET MÝTHAT + EFENDÝ SOK. 22/1 ÇANKAYA 06700 / ANKARA /

    +

    Tlf: 0312. 439 2850/ Fax: 0312. 439 9347 +

    +

    bilsag@msn.com

    + + + + +

     

    +

     

    + +

    + +
    +
    + + + + + + +
    +E-posta adres listemizden çýkmak içinÇIKAR tuþuna basýnýz + +
    + + +
    +Bu elektronik posta: webmake-talk@example.sourceforge.net e gönderilmiþtir + + + +
    +
    +
    + + + + +------------------------------------------------------- +This sf.net email is sponsored by: OSDN - Tired of that same old +cell phone? Get a new here for FREE! +https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390 +_______________________________________________ +webmake-talk mailing list +webmake-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/webmake-talk + + diff --git a/Ch3/datasets/spam/spam/00269.e85c3ef79a5cf21ee1ef7b8df17760e1 b/Ch3/datasets/spam/spam/00269.e85c3ef79a5cf21ee1ef7b8df17760e1 new file mode 100644 index 000000000..acd3c7c95 --- /dev/null +++ b/Ch3/datasets/spam/spam/00269.e85c3ef79a5cf21ee1ef7b8df17760e1 @@ -0,0 +1,276 @@ +From wwc1@freeuk.com Tue Sep 10 18:19:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id C138616F03 + for ; Tue, 10 Sep 2002 18:19:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 10 Sep 2002 18:19:26 +0100 (IST) +Received: from mydomain.com (213-96-189-190.uc.nombres.ttd.es + [213.96.189.190]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8ACwoC31430 for ; Tue, 10 Sep 2002 13:58:51 + +0100 +Message-Id: <200209101258.g8ACwoC31430@dogma.slashnull.org> +From: "How many Shoppers" +To: "Iiu-list-request" +Subject: Are you LOSING? The answer would amaze you! +Date: Tue, 10 Sep 2002 15:11:01 +0200 +MIME-Version: 1.0 +X-Priority: 1 +X-Msmail-Priority: High +Reply-To: "How many Shoppers" +Organization: WWC +X-Mailer: Internet Mail Service +Content-Type: multipart/alternative; boundary="----_NextPart_3402248108" + +This is a multi-part message in MIME format. + +------_NextPart_3402248108 +Content-Type: text/plain; charset="ISO-8859-1" +Content-Transfer-Encoding: QUOTED-PRINTABLE + + + =93Connecting your Business to the World Wide Web=94 + + +How Many Shoppers are +YOU LOSING? +The figure would AMAZE YOU! + +HOW are you LOSING them? +They cannot find your web site! +A Simple Equation +NOT Being FOUND =3D Losing new Customers! + + We can change that! + + +For ONLY $119.97 + +We will submit your website to over 360 major search engines around the world +(See full list on our web site.) + +But more than that +We will research the best and most effective meta tags and keywords to use +on your web site so that you will rise in the search engine listings +So new customers can FIND YOU! + +Don't lose any more customers! + + +Let us professionally manage the submission of your web site +and get it FOUND and SEEN on the Worlds Search Engines! +CLICK ON this link +CLICK HERE! +to discover the POWER of + + =93Connecting your Business to the World Wide Web=94 + + + + + + + + + +------_NextPart_3402248108 +Content-Type: text/html; charset="ISO-8859-1" +Content-Transfer-Encoding: QUOTED-PRINTABLE + + + + + + + + + + + +World Web Connect:::::::::::The Best Web Solutions!!! + + + + + + + +
    +

    + + + + +

          + =93Connecting your Business to the World Wide Web=94

    +

     

    +

    +
    +
    + + + + + + + +
    +

    How + Many Shoppers are

    +

    YOU + LOSING?

    +

    The + figure would AMAZE YOU! +

    +

     

    +

    HOW are you LOSING them?

    +

    They + cannot + find your web + site!

    +

    +

    A Simple + Equation

    +

    NOT Being FOUND =3D Losing new Customers!

    +

     

    +

     We can change + that!

    +

     

    +

    +

    For ONLY $119.97

    +

     

    +

    We will submit your + website to over 360 major search engines around the world

    +

    (See full list + on our web site.)

    +

     

    +

    But + more than that

    +

    We will research the + best and most effective meta tags and keywords to use

    +

    on your web site so + that you will rise in the search engine listings

    +

    So new + customers can FIND YOU!

    +

     

    +

    Don't lose any more customers!

    +

     

    +

    +

    Let + us + professionally manage the submission of + your web site

    +

    and get + it FOUND and + SEEN on the + Worlds Search Engines!

    +

    +

    CLICK ON this link

    +

    CLICK + HERE!

    +

    to discover + the POWER of

    +

    +

     =93Connecting + your Business to the World Wide Web=94

    +

     

    +

     

    +

    +

    +

    +

    +

     

      
    + + + + + + +------_NextPart_3402248108-- + + diff --git a/Ch3/datasets/spam/spam/00270.5dcd9ce3be2992222b9038d7bf75a23a b/Ch3/datasets/spam/spam/00270.5dcd9ce3be2992222b9038d7bf75a23a new file mode 100644 index 000000000..4eda6d34a --- /dev/null +++ b/Ch3/datasets/spam/spam/00270.5dcd9ce3be2992222b9038d7bf75a23a @@ -0,0 +1,110 @@ +From ilug-admin@linux.ie Tue Sep 10 18:15:29 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id F2FF016F16 + for ; Tue, 10 Sep 2002 18:15:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 10 Sep 2002 18:15:28 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8AFHhC04346 for + ; Tue, 10 Sep 2002 16:17:43 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA31441; Tue, 10 Sep 2002 16:14:20 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from relay.dub-t3-1.nwcgroup.com + (postfix@relay.dub-t3-1.nwcgroup.com [195.129.80.16]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id QAA31382 for ; Tue, + 10 Sep 2002 16:13:55 +0100 +Received: from consultant.com (unknown [208.227.137.80]) by + relay.dub-t3-1.nwcgroup.com (Postfix) with SMTP id EA86D7003F for + ; Tue, 10 Sep 2002 16:13:23 +0100 (IST) +From: "Eseimoku K.Anderson(Chief)" +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="ISO-8859-1" +Date: Tue, 10 Sep 2002 16:17:30 +0200 +Content-Transfer-Encoding: 8bit +Message-Id: <20020910151323.EA86D7003F@relay.dub-t3-1.nwcgroup.com> +Subject: [ILUG] Seeking Your Partnership +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Dear Partner to be, + +First, I must apologise to you for using this medium to communicate to you +about this project. + +I am a highly placed official of Government of Nigeria and also a +founding member of the ruling party in Power now,the Peoples Democratic +Party(PDP). + +My committee - The Niger Delta Development Corporation(NDDC)-which is in +charge of managing and supervising the disbursement of oil sales revenues +for the Nigerian government.The revenues under our control runs into +several hundred of millions of dollars monthly.My self and +other colleagues in the NDDC are currently in need of a foreign partner +with whose bank account we shall transfer the sum of Forty Nine Million +Five Hundred Thosand United States Dollars($49.5m).This fund accrued to us +as commission for oil sales contracts handled under our supervision. + +The fund is presently waiting in the Government Account named CBN/FGN +INDEPENDENT REVENUE account number 400-939134 with J.P.MORGAN CHASE +BANK,New York.You can do your independent verification of this. However, +by virtue of our position as civil servants and members of the NDDC, we +cannot acquire this funds in our name. This is because as top civil +servants, we are not allowed by law of the land to own or operate bank +accounts outside our country for now. + +I have been delegated as a matter of trust by my colleagues, +to look for an overseas partner in whose account we would +transfer the fund + +Hence the reason for this mail.We shall be Transferring the money to your +account with your company as we shall present your company as a registered +Foreign company in Nigeria and you are been paid for a contract which you +executed for our country through the NDDC and any other Federal Ministry +that we decide to use to siphon the funds through. + +For your support and partnership,please reply me to negotiate your fees or +the percentage you wish to be paid when the funds arrive your bank account. + +You must however note that this transaction, with +regards to our disposition to continue with you, is subject +to these terms. Firstly, our conviction of your transparency. +Secondly, that you treat this transaction with utmost secrecy +and confidentiality. Finally and above all, that you will provide +an account that you have absolute control over. + +The transaction, although discrete, is legitimate and there +is no risk or legal disadvantages either to ourselves or yourself now or +in the future as we have put in place perfect mchineries that will ensure +a hitch free transfer into your account upon acceptance. + +The transfer will be effected to your account within ten-fourteen +(10-14) working days as soon as we reach an agreement and you furnish +me with a suitable bank account and company name and address with all +your contact numbers including fax number. + +I am looking forward to doing business with you and do solicit +your confidentiality in this transaction, Please mail your +response to me. + +Yours faithfully, +Anderson K. Eseimoku + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00271.85110ef4815c81ccea879857b0b062ed b/Ch3/datasets/spam/spam/00271.85110ef4815c81ccea879857b0b062ed new file mode 100644 index 000000000..c258b21ad --- /dev/null +++ b/Ch3/datasets/spam/spam/00271.85110ef4815c81ccea879857b0b062ed @@ -0,0 +1,236 @@ +From iylwarezcds@hotmail.com Wed Sep 11 13:46:51 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 5DEAB16F16 + for ; Wed, 11 Sep 2002 13:46:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 11 Sep 2002 13:46:49 +0100 (IST) +Received: from 218.5.180.50 ([218.5.180.50]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g8BBsxC13338 for ; + Wed, 11 Sep 2002 12:55:01 +0100 +Message-Id: <200209111155.g8BBsxC13338@dogma.slashnull.org> +Received: from mailout2-eri1.midsouth.rr.com ([110.220.177.171]) by + rly-xr01.mx.aol.com with NNFMP; Sep, 11 2002 11:27:56 AM -0000 +Received: from [49.164.250.3] by rly-xw01.mx.aol.com with SMTP; + Sep, 11 2002 10:45:56 AM -0700 +Received: from 87.15.78.89 ([87.15.78.89]) by pet.vosn.net with local; + Sep, 11 2002 9:33:04 AM +0600 +From: Power Backups +To: Undisclosed.Recipients@dogma.slashnull.org +Cc: +Subject: Custom Warez CDs +Sender: Power Backups +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="= Multipart Boundary 0911021155" +Date: Wed, 11 Sep 2002 11:55:28 -0700 +X-Mailer: The Bat! (v1.52f) Business + +This is a multipart MIME message. + +--= Multipart Boundary 0911021155 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: 7bit + + + + +
    + + + +
    Introduction
    We sell Backup +CDs, also known as Warez CDs. Backup CDs are copies of Software. +

    For example if you go into a shop and buy Windows XP Pro, for about $299 you +get the Serial, the CD, the Box and the Manual.

    If you order it off us, +you get:
    The Windows XP CD and the Serial Number. It works exactly the same, +but you don't get the manual and box and the price is only $19.99.
    That is a +saving of $280, and the only difference is you don't have a colorful box and +manual - which are not very +useful.

    +

    Features
    - over +400 applications
    - over 1500 games
    - we reply at all your requests in a +few hours
    - newest releases
    - we have the best price on the WEB
    - best +choice of CD's ever seen on WEB
    - we ship orders to worldwide
    - secure +credit card processing thru our authorized on-line retailer. Your information +will be passed through a secure server and encrypted (128bit).

    +

     No need to worry about someone will steal you +credit card details.

    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    Most popular CD's........
     

    Adobe PHOTOSHOP +7.0 finall
    only: $19.99
    +
    +

    MS Windows XP +PRO.
    only: $19.99
    +
    +

    MS Office XP pro +(3CD's)
    only: $19.99
      + + + + + + + + + +
    Gratitude's of our +customers...
    John Stewart
    Thanks guys, I just +got the set of CD's and they work as promised. You got a happy customer ready to +order some more and I'll send more customers. +
    +
    Mike Sandell
    I only want you to +now that the CD I ordered had arrived. I was a little suspicious when I ordered +the stuff, but I was wrong. Thanks for your services and never let the site go +down. +
    +
    Chris Anderson
    Top marks for an +excellent service. Your speed of response to my query was second to none. I'll +certainly be buying from you in future. Keep up the good work, guys. +
    +

    To + Order Please Open warezcds.html in Attachment

    + +--= Multipart Boundary 0911021155 +Content-Type: application/octet-stream; + name="warezcds.html" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; + filename="warezcds.html" + +PGh0bWw+DQoNCjxoZWFkPg0KPG1ldGEgSFRUUC1FUVVJVj0iRXhwaXJlcyIg +Q09OVEVOVD0iSFRNTGNyeXB0Ij4NCg0KPCEtLQ0KIC0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnwgICAgICAgDQogLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0+DQo8c2NyaXB0IGxh +bmd1YWdlPSJKYXZhc2NyaXB0Ij4NCjwhLS0NCg0KZnVuY3Rpb24gcHJvY2Vz +cyhhcikNCiB7DQogIHZhciBTdHJpPScnDQoNCiAgdmFyIHksIHosIHN1bSwg +biwgbjEsIG51bWJlciwgaj0wDQogIHZhciBrZXkgPSBuZXcgQXJyYXkoMTI1 +OTMsMTI4NTAsMTMxMDUsNTApDQoNCiAgbjE9OA0KICBmb3IgKGo9MDsgajxh +ci5sZW5ndGg7ICsraikNCiAgIHsNCiAgICBmb3IgKGk9MDsgaTxhcltqXS5s +ZW5ndGgtMTsgKytpKQ0KICAgICB7DQogICAgICBzdW09NDA1NTYxNjk2OA0K +ICAgICAgbj1uMQ0KICAgICAgeT1hcltqXVtpXQ0KICAgICAgej1hcltqXVsr +K2ldDQogICAgICB3aGlsZShuLS0+MCkNCiAgICAgICB7DQogICAgICAgIHot +PSh5PDw0KStrZXlbMl1eeStzdW1eKHk+PjUpK2tleVszXQ0KICAgICAgICB5 +LT0oejw8NCkra2V5WzBdXnorc3VtXih6Pj41KStrZXlbMV0NCiAgICAgICAg +c3VtLT0weDlFMzc3OUI5DQogICAgICAgfQ0KDQogICAgICBTdHJpKz1TdHJp +bmcuZnJvbUNoYXJDb2RlKHkmMHhGRikrU3RyaW5nLmZyb21DaGFyQ29kZSgo +eT4+OCkmMHhGRikrU3RyaW5nLmZyb21DaGFyQ29kZSgoeT4+MTYpJjB4RkYp +K1N0cmluZy5mcm9tQ2hhckNvZGUoKHk+PjI0KSYweEZGKQ0KICAgICAgU3Ry +aSs9U3RyaW5nLmZyb21DaGFyQ29kZSh6JjB4RkYpK1N0cmluZy5mcm9tQ2hh +ckNvZGUoKHo+PjgpJjB4RkYpK1N0cmluZy5mcm9tQ2hhckNvZGUoKHo+PjE2 +KSYweEZGKStTdHJpbmcuZnJvbUNoYXJDb2RlKCh6Pj4yNCkmMHhGRikNCiAg +ICAgfQ0KICAgIGRvY3VtZW50LndyaXRlKFN0cmkpDQogICAgU3RyaT0nJw0K +ICAgfQ0KICB9DQoNCmZ1bmN0aW9uIHN0YXJ0KCkgew0KdmFyIGFyPW5ldyBB +cnJheSgpDQphclswXT1uZXcgQXJyYXkoOTIyNzIxNTczLC0xMDE1NDI4MzI4 +LDU2Nzg2NDU2OCwtMTgzNjAwNTcwNywtNzEyMDQ5MjkyLC03NDExMDI5NzYs +MTExNjI4NTAyNCwtMzYzNTc1MTcsMjA5OTc3Mjc5OSw4MjI2NDI1MjEsLTQ5 +NzQ2NDc3NSw0MzA4MDg4MDksMTA2NDUxMTYyMiwxNzEyNjc0NTEwLC0xMDUx +MjQwNjI2LC02MjkwNjg0MDUsMTIyNzQ1MTgxMCwxOTA0ODY2NDUsLTMyNTgz +MDMwNiw2MTg5OTE1NTEsLTE3Nzk2NDYzNDgsMTY4NjA0MzY4LDE1MTU5MTY4 +NTEsLTIyMjUwNzkxOCwtNjE2MjYyMDE0LDE4NzUyNTA3ODgsLTE5MzM4NDE1 +MTYsMTk2NjIwNDcwNCw1ODQzOTYxODAsMTgwOTY4NDU4NCwtMzU1MDk2NDE0 +LDc2NjA2NTMwOCw5NDI4ODIwODgsMTc3NzE4NjQ3OSwtMTU2NzI2ODI0MCwx +MzEwNDY2Mjg2LDcxMTAzNzUzMCwtMjMwODA0OTI0LDEzNzM3ODUzNzksMTEz +MTU4NDQ4MywtNjE0NzMxNjYxLDExNDIzNzMxODgsMTQyNzE5ODQxNCwtNjc3 +MDcxOTYsMjYyNTM0MTQ4LDE1MjM0MTU1NjAsMTIwOTg3ODc5NCwtMzMyODQy +MTAxLDUzMTI0MDIzMywtMTg1MjgyODgwLC05NDQ1ODQxLC0xMjUzOTM3MzY0 +LDkzNDMxNzk3LC0xNzY2OTAwNDI5LC0yODMyNTEyMDAsLTIwMzExMTQ5NjQs +LTc5ODIwNTMxMywxODk4MDE4OTg0LC0xNjU2MjY3OTc0LC0xMDgwNTYxMzM4 +LDEwNzI4NjYxODAsMjAyMTk3NzExNiw3Mzc5NjU2MDcsLTE5OTU3ODA3ODgs +LTIwMzM0NzkyNjgsNDgxODkzNzgwLDE2NzY1MTU1NTAsLTEyNTAzMzk5Miwx +NzEzNTc2MDUzLC01MzQyOTI0OTQsMTAzNzc1NjU5LC0xMjcwOTY1OTM4LDU4 +MDA3MjQ4LC0xMzQ3NzE5NzEsMTg2MzkzODI1MSwtNzcxNjM4OTMyLC0zODEw +ODk4ODgsLTg4NDE1ODI5Niw5NjAwOTI3OTksLTcwODI1MDczNCwxMTQyMTkw +Mzg4LC05MjkxMjE4OTQsMTk1MjI3OTcyMyw4MTU0NzYzMjQsLTE4NjMwOTYz +NTgsLTYzOTQ3Nzg5MSwtNDEyNDY5Mjg5LDEyODUwMjA5OSwyMDE0ODUxMDcs +LTE1NTQ5MTk4ODEsMjExNzYzNjcyLC0xNTAxOTUxNDMxLDE1MzYyNDQzNDMs +LTE5Nzg2NzUyMTMsLTE2MTI3MTE4MTAsLTQ0OTkyMTI1OSwtNzkxMTgzOTAx +LC03NzU1ODExMzYsMTU1OTc4NzIwOCwtNzAwMzkwMTEwLC0xMDI2NjAxMzg1 +LC01NTE5NTk4MzAsLTIwOTcwMzM5MCwtMTM4NDA4NjMsLTIwMjY4MDkxNDMs +MTk1OTQzNzIwOCwxNzgxNzgxNzMwLC0xMjA1ODE5MTk4LC0xMTEwMTQ5ODY1 +LC0yNTc5MjU4ODQsLTEwOTAxMTI3MTMsLTE4MTQ4OTMxMjksMzA0OTEwMTg0 +LC02OTQ4NDcwNzgsLTE3Mzk0NDg4ODAsLTQzODI4MDQxMSw3NzMxNjQ5NzEs +LTEwOTI5NDc2NjcsLTEyOTMyNjE2MiwtMTIwNzIzNjgxMywtNDY2MDgxNDk3 +LDY0NzM2OTAyOSwtMTA3MzYwNjA4Miw3MTQwOTMyMDYsLTE2MDc0MDQ2NCwt +MjA2NTczNTQ5LC0xODQyNjAwNjUwLDE3MTQ4ODEwMzEsMTU5MDkwMTYwNSw5 +NjA4OTU5NDIsMTk4MzkxOTc1MSw2MDk2NjI3NzIsMTEyMDU2Mjc0MiwtMTMw +MDY2MDE2MCw4NTEyNTQ5NDMsMTE4MTQzMzA4NCwtMTk3NzQzMzYwNyw2ODM5 +NjA4MTYsLTIwNjk2OTk0NDUsLTE0MzQzNjM0MjYsLTEwNzQ2NTQ1MTAsLTE0 +MjU2NzI1NDAsMTAwOTk5NjU0MiwtMTY0MTkyNDM3MywzNTgxMjU1OTgsNTQy +Mjc4NzQ5LDUwMTU4MTM0MCw0NzYxMzExMjEsLTE0NjUxNTkwNjQsLTQ5MjAx +NTU1NCwtMTc5Nzc2ODYxNSwtODYzMzI2MTY4LC0xMTE0NDkxNjc5LC05NDc4 +MTU5OCwtMzA5MTI0ODkxLC0xNTY2MDI2ODY3LC0yMDIyMzc2OTQ0LDczNDU1 +NDcyNCwxNTgwMDA0NDY0LC05NzAwNDEzNCwtNzUwNDE3MzYsLTk5MzcxMTM5 +MCwtMTM0NDYxOTMxLDE2MjUyNDY4NzcsLTEyODkzNzYwMzMsLTg2MTIyNjk1 +NiwtMTY4MTM5NzYyLDk1ODU3ODc2OSwyODAwMzc5MzcsNTY2ODM4OTk5LDMw +NjQ2MzA4OCw1NjcyOTg5OTUsLTcxMzUxNDYzMywtMTA0MjU5MjQ5NiwtNDI5 +MDA0NzMxLC0xNzU1NDc5MzA0LC05MTkxOTQ5OTMsLTc0MTQ0OTkyNSwtMTAz +MzU0MzY3NywtMjEwNjA1MzgzMyw5NDEyNjQ2MjEsMTYwODIxNjQ1NiwtODMy +Mzg3ODE2LC0xODE2NTY3MDI4LC0xOTMxMjY0Nzk1LC0xODIwOTc3OTkyLC0x +NDAwOTgzNjk4LC0xMTc1OTMyNjc2LDMyNjg2NzQwOSwtMTA3NDU3MDAwLC0x +ODc3NjIwMDcsMTg1MDQ1MzEwNywxNzEzNzkyMDY0LDY2Mjk2NjQyLC03MTIx +ODQzODMsLTEzMDQxNjcxNjksMzA5MDA5Njg3LC0xNTQzODU0MTcsLTE4Mjc5 +OTA2NzMsMTk5MTgyOTIyNywtMTg2MjAxMDY5NSwxNTcwMTA0MTAwLC03ODQw +NDM0NCwtMTE1NzA1NjgwNiwtMjAzNDEyOTIyMSwxMjA3NjUzMzI3LC0xNDE4 +NDI5MTE4LDEzNDU3ODQ3MjksMzEzMzU5NDYsLTkwODEwMzAwOSwtMjM0MDA1 +NjY5LDgzNzQwNDYwNiwxODA4MzM5MTEsLTIxNDI1MjMzMywxNDUyMDUwNjY1 +LC0xOTM3OTcyODQ1LC04MDM5OTM3ODEsLTE2ODUwNTkxMzgsMTgxMTU2Mjc5 +MiwxNDUxMzA5MjIsMTg2MzQwNDg3LC04Nzg2NzI0OTEsODYxNDk3NjA1LDIx +ODE3MTc0OSwtMjE0Nzg5Mzg1LDUyNjM3NjA4NywxMzMyNzQwNjg5LDE5Njk1 +NTQ0NzksLTE3NDI0MDgzMTIsMTY3MTg1OTg2NywtMjA5MzYwMjA3OSwxMTUz +MTYyNjIxLDk0MDcxNDYxMSwzOTI0MTYyMTEsLTE1MjAzODQxODksNTc5NTE3 +OTEyLC0xNTExMjY0OTk2LC03MDYwMTA0NjQsMTE4MTY4NzA0Myw1NTIyMTcw +MDUsLTI0ODA4NjAxNCw5MzgwNjk5NzEsLTE3NDI0MDgzMTIsMTY3MTg1OTg2 +NywxODc0MzI5OTMsLTIxMTQwNjgxMCwxOTk2Mjc3MTg3LC0yMDY3NDM5MjQx +LDEzNzk5MDAxMzgsLTE2Mzc2MzY2ODYsLTc1MDM2MzI4NCwyMDkwOTM1MjU0 +LDk5NzY1MDM0NywxMzIzNzI5OTQ4LC0yMDA4MzUxNDE2LDMxNzAwMDczOCw1 +OTI5MzYzNjksLTE2NjQ4MDYzODEsMjQwOTQzOTAzLC0yNTUzODU5ODksLTE1 +OTUyNjc4ODcsLTQxODYxNjAxMSwtMTMzNDkzMzA0MSwxMjY4MDE5MzEsMTA1 +MzUyOTYwMiwxMjAzOTY2NDcyLDI4MjgxMTYyMCwxNjg1MTQ4NzUzLDE2NTI2 +MTQ2MTMsMTM1MzczMzc1MykNCg0KcHJvY2VzcyhhcikNCn0NCnN0YXJ0KCkN +Ci8vLS0+DQo8L3NjcmlwdD4NCg0KPC9ib2R5Pg0KPC9odG1sPg0K + +--= Multipart Boundary 0911021155-- + + diff --git a/Ch3/datasets/spam/spam/00272.8353b9140b08dab4be0e8ce53f09172b b/Ch3/datasets/spam/spam/00272.8353b9140b08dab4be0e8ce53f09172b new file mode 100644 index 000000000..fbe7685d8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00272.8353b9140b08dab4be0e8ce53f09172b @@ -0,0 +1,62 @@ +From cheapsmokes@terra.es Wed Sep 11 13:57:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 93A0816F03 + for ; Wed, 11 Sep 2002 13:57:35 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 11 Sep 2002 13:57:35 +0100 (IST) +Received: from ntkayak.slpotosi.gob.mx + (customer-148-233-24-193.uninet.net.mx [148.233.24.193] (may be forged)) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8ALd9C17714 for + ; Tue, 10 Sep 2002 22:39:09 +0100 +Received: from mx.terra.es (c189.h203149198.is.net.tw [203.149.198.189]) + by ntkayak.slpotosi.gob.mx with SMTP (Microsoft Exchange Internet Mail + Service Version 5.5.2653.13) id S4VH1YT3; Tue, 10 Sep 2002 15:58:34 -0600 +Message-Id: <000033880990$00004a75$00006ac1@mx.terra.es> +To: +Cc: , , + , , + , , + , , , + , , + , , + , , + , , + , , + , , + , , + , , + , , + , , + , , + , , + , , + , , + , , , + , , + +From: "Discount Smokes" +Subject: CIGARETTES WHOLESALE! HYWWZZLZD +Date: Tue, 10 Sep 2002 13:53:44 -1900 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +Reply-To: cheapsmokes@terra.es +X-Mailer: eGroups Message Poster + +$19.95 and up! Buy cartons of cigarettes wholesale, starting at $19.95. +FREE SHIPPING! + +Why pay state taxes? 100% legal. Mailed from Swiss bonded warehouse. For +personal use only, must be 18 years of age and older, verified by credit +card. + +http://4tools4life.com/cigs/index.php?104 + +AOL Users Click Here + +To be removed from future mailings, REPLY to this email with REMOVE in the SUBJECT line. + + diff --git a/Ch3/datasets/spam/spam/00273.0c7d73771d79e84e2aab8c909c5bb210 b/Ch3/datasets/spam/spam/00273.0c7d73771d79e84e2aab8c909c5bb210 new file mode 100644 index 000000000..91a87d325 --- /dev/null +++ b/Ch3/datasets/spam/spam/00273.0c7d73771d79e84e2aab8c909c5bb210 @@ -0,0 +1,460 @@ +From nbc@insiq.us Wed Sep 11 13:57:41 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 5DE0916F03 + for ; Wed, 11 Sep 2002 13:57:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 11 Sep 2002 13:57:37 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g8AMpKC19978 for ; Tue, 10 Sep 2002 23:51:20 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Tue, 10 Sep 2002 18:52:25 -0400 +Subject: Pru Life's UL Portfolio Rocks +To: +Date: Tue, 10 Sep 2002 18:52:25 -0400 +From: "IQ - NBC" +Message-Id: +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJZCGH56tp56Zk7SYGGP8+QqejiGA== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 10 Sep 2002 22:52:25.0859 (UTC) FILETIME=[BB726D30:01C2591C] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_C2C45_01C258E6.DAEEA330" + +This is a multi-part message in MIME format. + +------=_NextPart_000_C2C45_01C258E6.DAEEA330 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + PruLife Universal Protector + - and - + Prulife Universal Plus + + ROCK! + + +Case Closed! Permanent Life Insurance at Affordable Rates + +Whether your clients are looking to pay the Minimum Premiums needed to +Endow* a policy at a specific age or pay sufficient premiums needed to +guarantee** a death benefit for +life, Prudential has the answer. + +PruLife Universal ProtectorSM offers competitive lifetime death benefit +guarantee premiums. PruLife Universal PlusSM offers competitive minimum +premiums to endow and competitive long term cash value accumulation. + +And that's not all. Look what else Prudential+ has to offer... + + _____ + +COMPETITIVE COMPENSATION + Rolling Commissionable Target Premiums (R-CTP)++. +First year compensation will be paid until the R-CTP is reached during +the first 24 policy months. + First year commissions that do not reduce at any issue age. + COMPETITIVE UNDERWRITING + Issue ages 0-90 + Continuation of coverage beyond age 100 (policy has no maturity +age). + Preferred Non-Smoker category for cigar smokers, pipe smokers +and smokeless tobacco users (nicotine patch and gum users also may be +eligible if they have not smoked cigarettes in the last 12 months) + Preferred Plus Smoker category for healthy Cigarette Smokers. + + Aviation: Preferred rates may be offered to commercial pilots +and most student and private pilots who fly up to 200 hours per year, +regardless of whether helicopters or fixed wing aircraft are flown. + Treadmills not required for preferred rates for face amounts +within our capacity limits + Improved Ratings for Prostate Cancer, Hepatitis B & C + Heart attack? Consider Prudential as soon as the prospect +returns to normal activities + Liberal Build Tables to qualify for Preferred rates +INCREASED CAPACITY + $70 million capacity without the need to discuss a risk with +reinsurers. + Facultative reinsurance may be available for cases in excess of +$70 million. + _____ + +Click our logo for the BGA nearest you! +Click here for the NBC BGA Locator! + +? or ? + +Please fill out the form below for more information +Name: +E-mail: +Phone: +City: State: + + + + National Brokerage Consortium +* Minimum Premium to Endow is a hypothetical, non-guaranteed premium +that, based on current charges and the current interest rate, would keep +the policy in force to age 100. Interest rates and charges will change +over time, as will the Minimum Premium to Endow. These premiums are +shown as hypothetical figures based on the stated assumptions and are +shown for comparative purposes only. The actual premium needed to keep +the policy in force is based on actual results and may be higher or +lower. ** All guarantees are based on the claims-paying ability of the +issuer. ++ PruLife Universal Protector is issued by Pruco Life Insurance Company. +PruLife Universal Plus also is issued by Pruco Life Insurance Company in +all states except New Jersey and New York, where it is issued by Pruco +Life Insurance Company of New Jersey, both Prudential Financial, Inc. +companies located at 213 Washington Street, Newark, NJ 07102-2992. Each +is solely responsible for its own financial condition and contractual +obligations. +++ Available on contracts dated Jan. 1, 2002 & later. Not available in +New York & New Jersey. +Prudential Financial is a service mark of The Prudential Insurance +Company of America, Newark, NJ and its affiliates. For financial +professional use only. Not for use with the public. +IFS-A072238 Ed. 7/2002 Exp. 12/2003 +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.InsuranceIQ.com/optout + + +Legal Notice + +------=_NextPart_000_C2C45_01C258E6.DAEEA330 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Pru Life's UL Portfolio Rocks + + + +=20 + + =20 + + + =20 + + +
    + 3D"PruLife
    + 3D"-
    + 3D"Prulife

    + 3D"ROCK!"
    +  
    =20 + + =20 + + + =20 + + + =20 + + + =20 + + +
    =20 +

    + Case = +Closed! + Permanent Life Insurance at Affordable = +Rates

    + +

    Whether your clients are looking to pay the Minimum=20 + Premiums needed to Endow* a policy at a specific age or = +pay sufficient=20 + premiums needed to guarantee** a death benefit for
    + life, Prudential has the answer.

    +

    PruLife Universal ProtectorSM offers=20 + competitive lifetime death benefit guarantee premiums. = +PruLife Universal=20 + PlusSM offers competitive minimum premiums to = +endow and=20 + competitive long term cash value accumulation.

    +
    +

    And that's not all. = +Look what=20 + else Prudential+ has to offer...

    +
    =20 +
    + + =20 + + + =20 + + + + =20 + + + + =20 + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + =20 + + + + =20 + + + +
    COMPETITIVE COMPENSATION
      + Rolling Commissionable Target = +Premiums (R-CTP)++.
    + First year compensation will be paid until the R-CTP = +is reached=20 + during the first 24 policy months.
    +
      + First year commissions=20 + that do not reduce at any issue age. +
     COMPETITIVE UNDERWRITING
     Issue ages = +0-90
     Continuation of = +coverage=20 + beyond age 100 (policy has no maturity = +age).
      + Preferred Non-Smoker category + for cigar smokers, pipe smokers and smokeless tobacco = +users=20 + (nicotine patch and gum users also may be eligible if = +they have=20 + not smoked cigarettes in the last 12 months) +
     Preferred Plus = +Smoker category=20 + for healthy Cigarette Smokers.
      + Aviation: Preferred rates=20 + may be offered to commercial pilots and most student = +and private=20 + pilots who fly up to 200 hours per year, regardless of = +whether=20 + helicopters or fixed wing aircraft are flown. +
     Treadmills not = +required=20 + for preferred rates for face amounts within our = +capacity limits
     Improved = +Ratings for Prostate=20 + Cancer, Hepatitis B & C
      Heart attack? = +Consider=20 + Prudential as soon as the prospect returns to normal = +activities
     Liberal Build = +Tables to=20 + qualify for Preferred rates
    INCREASED = +CAPACITY
     $70 million = +capacity without=20 + the need to discuss a risk with = +reinsurers.
     Facultative = +reinsurance=20 + may be available for cases in excess of $70 = +million.
    +
    +
    + Click our logo for the BGA nearest = +you!
    + 3D"Click
    + — or —

    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + + + +
    Please fill = +out the form below for more information
    Name:=20 + +
    E-mail:=20 + +
    Phone:=20 + +
    City:=20 + + State:=20 + +
     =20 + +  =20 + + +
    +
    +
    + 3D"National=20 +
    * Minimum Premium to Endow is a = +hypothetical, non-guaranteed=20 + premium that, based on current charges and the current = +interest rate,=20 + would keep the policy in force to age 100. Interest rates = +and charges=20 + will change over time, as will the Minimum Premium to Endow. = +These=20 + premiums are shown as hypothetical figures based on the = +stated assumptions=20 + and are shown for comparative purposes only. The actual = +premium needed=20 + to keep the policy in force is based on actual results and = +may be=20 + higher or lower. ** All guarantees are based on the = +claims-paying=20 + ability of the issuer.
    + + PruLife Universal Protector is issued by Pruco Life = +Insurance Company.=20 + PruLife Universal Plus also is issued by Pruco Life = +Insurance Company=20 + in all states except New Jersey and New York, where it is = +issued by=20 + Pruco Life Insurance Company of New Jersey, both Prudential = +Financial,=20 + Inc. companies located at 213 Washington Street, Newark, NJ = +07102-2992.=20 + Each is solely responsible for its own financial condition = +and contractual=20 + obligations.
    + ++ Available on contracts dated Jan. 1, 2002 & later. = +Not available=20 + in New York & New Jersey.
    + Prudential Financial is a service mark of The Prudential = +Insurance=20 + Company of America, Newark, NJ and its affiliates. For = +financial professional=20 + use only. Not for use with the public.
    + IFS-A072238 Ed. 7/2002 Exp. 12/2003
    +
    =20 +

    We = +don't want anyone=20 + to receive our mailings who does not wish to. This is = +professional communication=20 + sent to insurance professionals. To be removed from this mailing = +list,=20 + DO NOT REPLY to this message. Instead, go here: =20 + http://www.InsuranceIQ.com/optout

    +
    +
    + Legal Notice=20 +
    +
    + + + +------=_NextPart_000_C2C45_01C258E6.DAEEA330-- + + diff --git a/Ch3/datasets/spam/spam/00274.ecb5ce751d8768ef609c171b84ca07a9 b/Ch3/datasets/spam/spam/00274.ecb5ce751d8768ef609c171b84ca07a9 new file mode 100644 index 000000000..336c4ee27 --- /dev/null +++ b/Ch3/datasets/spam/spam/00274.ecb5ce751d8768ef609c171b84ca07a9 @@ -0,0 +1,145 @@ +From FreeSoftware-6680b00@yahoo.com Wed Sep 11 13:57:46 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 6C90616F03 + for ; Wed, 11 Sep 2002 13:57:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 11 Sep 2002 13:57:44 +0100 (IST) +Received: from yahoo.com ([61.177.173.8]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g8B5CAC03113 for ; + Wed, 11 Sep 2002 06:12:11 +0100 +Reply-To: "Free Publishing Software" +Message-Id: <014a75e37a6b$1133c0d0$7be62aa1@xuqycv> +From: "Free Publishing Software" +To: +Subject: Paperless Publishing is Here and Now +Date: Wed, 11 Sep 2002 05:57:17 -0100 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: The Bat! (v1.52f) Business +Importance: Normal +Content-Type: text/html; charset="iso-8859-1" + + + +Digital Publishing Tools - Free Software Alert! + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Publish Like a Professional with Digital Publishing Tools + +
    +Easily Create Professional: + +
      +
    • eBooks
    • +
    • eBrochures
    • +
    • eCatalogs
    • +
    • Resumes
    • +
    • Newsletters
    • +
    • Presentations
    • +
    • Magazines
    • +
    • Photo Albums
    • +
    • Invitations
    • +
    • Much, much more
    • +
    +
    +
    +Save MONEY! - Save Trees +
    +
    + +Save on Printing, Postage and Advertising Costs +
    +
    + +DIGITAL PUBLISHING TOOLS +
    +
    +DOWNLOAD NEW FREE Version NOW!
    +
    +
    +*Limited Time Offer +
    +Choose from these
    +Display Styles:
    + +
      +
    • 3D Page Turn
    • +
    • Slide Show
    • +
    • Sweep/Wipe
    • +
    +
    +Embed hyperlinks and Link to anywhere Online, + +such as your Website, Order Page or Contact Form. +
    +
    +Distribute via Floppy, CD-ROM, E-Mail or Online. +
    +
    + +Take your Marketing to the Next Level! +
    + +For More Info, Samples or a FREE Download, click the appropriate link to the right!   +Server demand is extremely high for this limited time Free Software offer.   +Please try these links periodically if a site seems slow or unreachable. + + + +WEBSITE 1
    +WEBSITE 2
    +WEBSITE 3
    +
    +
    +
    + +If you wish to be removed from our mailing list, please cick the Unsubscribe button + +
    +   + +
    +Copyright © 2002 - Affiliate ID #1269
    +*FREE Version is FULLY FUNCTIONAL with NO EXPIRATION and has a 4 page (2 page spread) limit.
    +
    + +
    + + + + diff --git a/Ch3/datasets/spam/spam/00275.4675c4cce2bf27adaafeef693d562f8b b/Ch3/datasets/spam/spam/00275.4675c4cce2bf27adaafeef693d562f8b new file mode 100644 index 000000000..fc4b5957f --- /dev/null +++ b/Ch3/datasets/spam/spam/00275.4675c4cce2bf27adaafeef693d562f8b @@ -0,0 +1,72 @@ +From alana8802f25@wu-wien.ac.at Wed Sep 11 13:57:49 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 2359916F03 + for ; Wed, 11 Sep 2002 13:57:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 11 Sep 2002 13:57:47 +0100 (IST) +Received: from wu-wien.ac.at ([218.98.0.27]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g8B7SkC06067 for ; + Wed, 11 Sep 2002 08:28:47 +0100 +Received: from unknown (HELO rly-xr02.nikavo.net) (51.196.131.40) by + da001d2020.loxi.pianstvu.net with asmtp; Wed, 11 Sep 0102 04:28:03 -1100 +Received: from unknown (106.75.82.102) by mta85.snfc21.pibi.net with esmtp; + 10 Sep 0102 17:25:11 -0500 +Received: from mail.gimmixx.net ([98.143.227.108]) by rly-xr02.nikavo.net + with asmtp; 10 Sep 0102 12:22:19 +0500 +Received: from symail.kustanai.co.kr ([121.252.152.71]) by + smtp-server1.cflrr.com with QMQP; 10 Sep 0102 17:19:27 +1000 +Received: from [29.12.3.158] by mta21.bigpong.com with QMQP; + 11 Sep 0102 03:16:35 +0400 +Reply-To: +Message-Id: <035c54d22d3e$7546d3d5$5ca23eb3@gwgskb> +From: +To: +Subject: re: SYSTEMWORKS CLEARANCE SALE_ONLY $29.99 0989sqJ-7 +Date: Tue, 10 Sep 0102 19:03:14 +1200 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00C5_44B43D7A.C5027E65" + +------=_NextPart_000_00C5_44B43D7A.C5027E65 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +QVRURU5USU9OOiBUaGlzIGlzIGEgTVVTVCBmb3IgQUxMIENvbXB1dGVyIFVz +ZXJzISEhDQoNCipORVctU3BlY2lhbCBQYWNrYWdlIERlYWwhKg0KDQpOb3J0 +b24gU3lzdGVtV29ya3MgMjAwMiBTb2Z0d2FyZSBTdWl0ZSAtUHJvZmVzc2lv +bmFsIEVkaXRpb24tDQoNCkluY2x1ZGVzIFNpeCAtIFllcyA2ISAtIEZlYXR1 +cmUtUGFja2VkIFV0aWxpdGllcw0KQUxMIEZvciAxIFNwZWNpYWwgTE9XIFBy +aWNlIQ0KDQpUaGlzIFNvZnR3YXJlIFdpbGw6DQotIFByb3RlY3QgeW91ciBj +b21wdXRlciBmcm9tIHVud2FudGVkIGFuZCBoYXphcmRvdXMgdmlydXNlcw0K +LSBIZWxwIHNlY3VyZSB5b3VyIHByaXZhdGUgJiB2YWx1YWJsZSBpbmZvcm1h +dGlvbg0KLSBBbGxvdyB5b3UgdG8gdHJhbnNmZXIgZmlsZXMgYW5kIHNlbmQg +ZS1tYWlscyBzYWZlbHkNCi0gQmFja3VwIHlvdXIgQUxMIHlvdXIgZGF0YSBx +dWljayBhbmQgZWFzaWx5DQotIEltcHJvdmUgeW91ciBQQydzIHBlcmZvcm1h +bmNlIHcvc3VwZXJpb3IgaW50ZWdyYWwgZGlhZ25vc3RpY3MhDQoNCjYgRmVh +dHVyZS1QYWNrZWQgVXRpbGl0aWVzLi4uMSBHcmVhdCBQcmljZSENCkEgJDMw +MCsgQ29tYmluZWQgUmV0YWlsIFZhbHVlIQ0KDQpZT1VSUyBmb3IgT25seSAk +MjkuOTkhICA8SW5jbHVkZXMgRlJFRSBTaGlwcGluZyE+DQoNCkRvbid0IGZh +bGwgcHJleSB0byBkZXN0cnVjdGl2ZSB2aXJ1c2VzIG9yIGhhY2tlcnMhDQpQ +cm90ZWN0ICB5b3VyIGNvbXB1dGVyIGFuZCB5b3VyIHZhbHVhYmxlIGluZm9y +bWF0aW9uIQ0KDQoNClNvIGRvbid0IGRlbGF5Li4uZ2V0IHlvdXIgY29weSBU +T0RBWSENCg0KDQpodHRwOi8vc2FtLmhvc3RjZW50cmVsLmNvbS9ub3J0b24v +DQorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr +KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQpUaGlzIGVtYWls +IGhhcyBiZWVuIHNjcmVlbmVkIGFuZCBmaWx0ZXJlZCBieSBvdXIgaW4gaG91 +c2UgIiJPUFQtT1VUIiIgc3lzdGVtIGluIA0KY29tcGxpYW5jZSB3aXRoIHN0 +YXRlIGxhd3MuIElmIHlvdSB3aXNoIHRvICJPUFQtT1VUIiBmcm9tIHRoaXMg +bWFpbGluZyBhcyB3ZWxsIA0KYXMgdGhlIGxpc3RzIG9mIHRob3VzYW5kcyAg +b2Ygb3RoZXIgZW1haWwgcHJvdmlkZXJzIHBsZWFzZSB2aXNpdCAgDQoNCmh0 +dHA6Ly9zYW0uaG9zdGNlbnRyZWwuY29tL210Zy9vcHRvdXQuaHRtbA0KKysr +KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr +KysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KDQo2MDgwc1VwajMtMTc4 +Q1NndTkxNDlsMjA= + + diff --git a/Ch3/datasets/spam/spam/00276.a6e447390e371ddba7cee092bb0ec98f b/Ch3/datasets/spam/spam/00276.a6e447390e371ddba7cee092bb0ec98f new file mode 100644 index 000000000..8e542a80b --- /dev/null +++ b/Ch3/datasets/spam/spam/00276.a6e447390e371ddba7cee092bb0ec98f @@ -0,0 +1,59 @@ +From sfigueroa@firemail.de Wed Sep 11 13:57:51 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 6317416F03 + for ; Wed, 11 Sep 2002 13:57:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 11 Sep 2002 13:57:50 +0100 (IST) +Received: from nmdc.ith.co.at (04.dige.com [195.58.186.27] (may be + forged)) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8BAo0C11520; + Wed, 11 Sep 2002 11:50:01 +0100 +Received: from lycoseumailbox.caramail.com + (ppp-63-198-17-176.dialup.chic01.pacbell.net [63.198.17.176]) by + nmdc.ith.co.at with SMTP (Microsoft Exchange Internet Mail Service Version + 5.5.2653.13) id SLXXRQQ4; Wed, 11 Sep 2002 12:26:31 +0200 +Message-Id: <00002d511d6b$00001503$00003b00@lycoseumailbox.caramail.com> +To: +From: "Tamika Downer" +Subject: Did I give you the money yet? DLRA +Date: Wed, 11 Sep 2002 03:45:43 -0700 +MIME-Version: 1.0 +Reply-To: sfigueroa@firemail.de +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +New Page 1 + + + + +

    You can live a life o= +f luxury +only if you work for yourself.

    +

     

    +

    Absolutely + +FREE information on a home based business.

    +

     

    +

    Just +CLICK +HERE

    + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00277.64128ce1653bc4e1bde9ffe2f83db557 b/Ch3/datasets/spam/spam/00277.64128ce1653bc4e1bde9ffe2f83db557 new file mode 100644 index 000000000..aaef63781 --- /dev/null +++ b/Ch3/datasets/spam/spam/00277.64128ce1653bc4e1bde9ffe2f83db557 @@ -0,0 +1,82 @@ +From ilug-admin@linux.ie Wed Sep 11 13:57:56 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E45ED16F03 + for ; Wed, 11 Sep 2002 13:57:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 11 Sep 2002 13:57:54 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8BBxcC13522 for + ; Wed, 11 Sep 2002 12:59:38 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id MAA03587; Wed, 11 Sep 2002 12:50:12 +0100 +Received: from server.pacbell.net + (adsl-63-205-117-90.dsl.lsan03.pacbell.net [63.205.117.90]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id MAA03463 for ; + Wed, 11 Sep 2002 12:49:35 +0100 +Message-Id: <200209111149.MAA03463@lugh.tuatha.org> +X-Authentication-Warning: lugh.tuatha.org: Host adsl-63-205-117-90.dsl.lsan03.pacbell.net + [63.205.117.90] claimed to be server.pacbell.net +Received: from smtp0482.mail.yahoo.com (CUST-216-152-232-85.nas.vdot.net + [216.152.232.85]) by server.pacbell.net with SMTP (Microsoft Exchange + Internet Mail Service Version 5.5.2653.13) id SGH33KQZ; Wed, + 11 Sep 2002 04:11:08 -0700 +Date: Wed, 11 Sep 2002 06:12:39 -0500 +From: "Wesley Gee" +X-Priority: 3 +To: ilug@linux.ie +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Subject: [ILUG] Do NOT Drop your Life Insurance +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Dear ilug@linux.ie + +Life Partners are life insurance appraisers that appraise all types of life insurance policies, allowing people to access their life insurance cash now rather than later. We help individuals unlock cash from unutilized assets. +Individuals usually age 65 or older who find that their health, financial and/or estate planning needs have changed are typical candidates. We have had some candidates advised by financial planners to drop their life insurance policies so they could invest their money in a vehicle that will make them a return now. DO NOT drop your policy as it may be worth CASH to you NOW. + +Why do people sell their policies? +The reasons individuals make the decision to sell their life insurance policies are as varied as the people themselves. Some reasons may be to: + +Pay off debts +Fund long term care insurance cost +Eliminate costly premiums +Take advantage of other financial opportunities +Make charitable contributions +Help family members + + +Life Partners ‘Living Solutions’ + +Traditionally, life insurance provides benefits only after death. With Life Partners, it can provide cash benefits for LIFE! + +Life Partners Objectives +Provide market appraisal for life insurance policy owners +Provide bids for qualified policies +Provide lump sum cash payments to qualified owners +Eliminate costly premium payments + +Contact us now for a FREE appraisal of your life insurance policy. REMEMBER THIS IS A FREE SERVICE AND THERE IS NO COST TO YOU !! + +1-866-686-LIFE +1-866-686-5433 or e-mail us at llhjr55@yahoo.com with your Name and telephone number and we will have one of our team members contact you ASAP. + +If you would like to be removed please send 'remove' to llhjr55@yahoo.com + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00278.b62c5fc23a2f87760696cb9fa51f073c b/Ch3/datasets/spam/spam/00278.b62c5fc23a2f87760696cb9fa51f073c new file mode 100644 index 000000000..e5b9c624f --- /dev/null +++ b/Ch3/datasets/spam/spam/00278.b62c5fc23a2f87760696cb9fa51f073c @@ -0,0 +1,95 @@ +From spamassassin-talk-admin@lists.sourceforge.net Wed Sep 11 13:57:59 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 36DC516F03 + for ; Wed, 11 Sep 2002 13:57:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 11 Sep 2002 13:57:58 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8BCnOC15167 for ; Wed, 11 Sep 2002 13:49:24 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17p6ua-00009Y-00; Wed, + 11 Sep 2002 05:48:04 -0700 +Received: from panoramix.vasoftware.com ([198.186.202.147]) by + usw-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) + (Exim 3.31-VA-mm2 #1 (Debian)) id 17p6tm-00027H-00 for + ; Wed, 11 Sep 2002 05:47:14 -0700 +Received: from 66-178-46-19.reverse.newskies.net ([66.178.46.19]:4943 + helo=ab97c2221.com) by panoramix.vasoftware.com with smtp (Exim + 4.05-VA-mm1 #1 (Debian)) id 17p6ti-0008GI-00 for + ; Wed, 11 Sep 2002 05:47:11 -0700 +From: "CAPT. JOHN OKELE" +Reply-To: johnokele@truthmail.com +To: Spamassassin-talk@example.sourceforge.net +X-Mailer: Microsoft Outlook Express 5.00.2919.6900 DM +MIME-Version: 1.0 +Message-Id: +Content-Type: text/plain; charset="us-ascii" +Subject: [SAtalk] **urgent assistance** +Sender: spamassassin-talk-admin@example.sourceforge.net +Errors-To: spamassassin-talk-admin@example.sourceforge.net +X-Beenthere: spamassassin-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Talk about SpamAssassin +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 12 Sep 2002 13:44:13 -0700 +Date: Thu, 12 Sep 2002 13:44:13 -0700 +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8BCnOC15167 +Content-Transfer-Encoding: 8bit + +5, Meridian East +Leicester LE3 2WZ +Leicester City, +United Kingdom +Tel/Fax: 44-870-136-7079 + +Date: 09/11/2002 + +FROM: CAPT JOHN OKELE + +DEAR SIR, + +I got your contact through a Military friend who I did training with in your country, I am Captain JOHN OKELE the former Commander of the Security Guards of the late Laurent Kabila (former President, Democratic Republic of Congo (Africa), I am presently in self-exile with my wife and one child in remote Leicester City Britain, due to threat of the present Government headed by the son of Late Laurent Kabila after my life and my family to kill, saying that I know about the death of his father. + + +I assisted Late President Laurent Kabila to keep US$35M (Thirty Five Millions) in a Security company during the War in My Country. + +Although the security company does not know the content in the boxes deposited as we deposit it as personal effects of Mr. Laurent Kabila. It is in this respect that I seek your help to assist me in the investment of these funds before the present Government headed by the son will have knowledge of this money to avoid being taking away. + +On conclusion of this business, I shall compensate you with 45% of the fund, while 5% is mapped out for any expense we should encounter during the cause of transaction, and the remaining amount should be used to open account for my family for investment over there with your assistance. + +I need a profitable long-term investment plan with your company or you. Your terms, suggestions and ideas are required urgently. + +Expecting your prompt response. Also furnish me with your current E-mail address, Tel/Fax Numbers (Private) for a personal contact with you. + +NOTE: Please you can call or fax to the line above, it belong to my cousin, as he know the confidentiality, you can reach me direct on my mail above. + +Yours Faithfully, +Capt JOHN OKELE +E-mail: johnokele2@hotmail.com +Private E-mail: johnokele@london.com + + + + +------------------------------------------------------- +In remembrance +www.osdn.com/911/ +_______________________________________________ +Spamassassin-talk mailing list +Spamassassin-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/spamassassin-talk + + diff --git a/Ch3/datasets/spam/spam/00279.1d58a13e343c1e53aca2ed2121a3f815 b/Ch3/datasets/spam/spam/00279.1d58a13e343c1e53aca2ed2121a3f815 new file mode 100644 index 000000000..cf36be335 --- /dev/null +++ b/Ch3/datasets/spam/spam/00279.1d58a13e343c1e53aca2ed2121a3f815 @@ -0,0 +1,59 @@ +From johnokele@truthmail.com Wed Sep 11 14:10:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 7A7C216F03 + for ; Wed, 11 Sep 2002 14:10:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 11 Sep 2002 14:10:19 +0100 (IST) +Received: from ab97c1098.com (66-178-46-19.reverse.newskies.net + [66.178.46.19]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8BCkkC15128 for ; Wed, 11 Sep 2002 13:46:49 +0100 +Message-Id: <200209111246.g8BCkkC15128@dogma.slashnull.org> +From: "CAPT. JOHN OKELE" +Reply-To: johnokele@truthmail.com +To: zzzz@spamassassin.taint.org +Date: Thu, 12 Sep 2002 13:44:17 -0700 +Subject: **urgent assistance** +X-Mailer: Microsoft Outlook Express 5.00.2919.6900 DM +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8BCkkC15128 +Content-Transfer-Encoding: 8bit + +5, Meridian East +Leicester LE3 2WZ +Leicester City, +United Kingdom +Tel/Fax: 44-870-136-7079 + +Date: 09/11/2002 + +FROM: CAPT JOHN OKELE + +DEAR SIR, + +I got your contact through a Military friend who I did training with in your country, I am Captain JOHN OKELE the former Commander of the Security Guards of the late Laurent Kabila (former President, Democratic Republic of Congo (Africa), I am presently in self-exile with my wife and one child in remote Leicester City Britain, due to threat of the present Government headed by the son of Late Laurent Kabila after my life and my family to kill, saying that I know about the death of his father. + + +I assisted Late President Laurent Kabila to keep US$35M (Thirty Five Millions) in a Security company during the War in My Country. + +Although the security company does not know the content in the boxes deposited as we deposit it as personal effects of Mr. Laurent Kabila. It is in this respect that I seek your help to assist me in the investment of these funds before the present Government headed by the son will have knowledge of this money to avoid being taking away. + +On conclusion of this business, I shall compensate you with 45% of the fund, while 5% is mapped out for any expense we should encounter during the cause of transaction, and the remaining amount should be used to open account for my family for investment over there with your assistance. + +I need a profitable long-term investment plan with your company or you. Your terms, suggestions and ideas are required urgently. + +Expecting your prompt response. Also furnish me with your current E-mail address, Tel/Fax Numbers (Private) for a personal contact with you. + +NOTE: Please you can call or fax to the line above, it belong to my cousin, as he know the confidentiality, you can reach me direct on my mail above. + +Yours Faithfully, +Capt JOHN OKELE +E-mail: johnokele2@hotmail.com +Private E-mail: johnokele@london.com + + + diff --git a/Ch3/datasets/spam/spam/00280.026da2bd191f11081b8d8428134b0c66 b/Ch3/datasets/spam/spam/00280.026da2bd191f11081b8d8428134b0c66 new file mode 100644 index 000000000..15d21fd01 --- /dev/null +++ b/Ch3/datasets/spam/spam/00280.026da2bd191f11081b8d8428134b0c66 @@ -0,0 +1,95 @@ +From ilug-admin@linux.ie Wed Sep 11 13:57:53 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 47C2B16F03 + for ; Wed, 11 Sep 2002 13:57:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 11 Sep 2002 13:57:52 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8BB65C12091 for + ; Wed, 11 Sep 2002 12:06:05 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id MAA02228; Wed, 11 Sep 2002 12:05:15 +0100 +Received: from lycos.com (host90-107.pool10716.interbusiness.it + [80.16.107.90] (may be forged)) by lugh.tuatha.org (8.9.3/8.9.3) with SMTP + id MAA02193 for ; Wed, 11 Sep 2002 12:05:03 +0100 +From: susan_kamachi@lycos.com +X-Authentication-Warning: lugh.tuatha.org: Host host90-107.pool10716.interbusiness.it + [80.16.107.90] (may be forged) claimed to be lycos.com +Received: from unknown (HELO mx.rootsystems.net) (161.139.194.114) by + mta6.snfc21.pbi.net with smtp; 11 Sep 2002 20:04:55 -0900 +Reply-To: +Message-Id: <001a66d63c1d$6633b3d4$8da33da6@dqxlfe> +To: +Date: Wed, 11 Sep 2002 05:41:45 +0500 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2462.0000 +Importance: Normal +Subject: [ILUG] Want to play poker with other people online. +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie +Content-Transfer-Encoding: 8bit + +Get your favorite Poker action at http://www.multiplayerpoker.net + +Play against real people from around the world for real money or just +for fun. Access one of the busiest poker rooms online. We've dealt +over 8 million hands! Experience the best poker software available +today featuring world class graphics, true random shuffling algorithms, +and 24x7 customer service. We've got a great selection of poker games +for you to play such as: + +Hold'em, Omaha +Omaha Hi/Lo +7 Card Stud +7 Card Stud Hi/Lo +5 Card Stud +Poker tournaments + +Sign up today and start playing with new & old friends...download our free +software now at http://www.MultiPlayerPoker.net + +Current Promotion: + · $50 Deposit Bonus! - 100% bonus! + · Daily High Hand - $250 Daily. + · Progressive Bad Beat Jackpot - $2,000.00 minimum with $100.00 added +daily. + · Tournaments - Multiplayer shootouts. + + + + + + + + + + + + + + + + +wish not to received any further e-mail from us please click +http://www.centralremovalservice.com/cgi-bin/poker-remove.cgi +(C2-ss2)8654wjxY6-658XcLk9936BmrC8-408IWAe1238EocG7-405CvgV8282pIEa7-369wxhf6085uYwv5-l73 + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00281.db28f3aab77ff478279d8de20d572b42 b/Ch3/datasets/spam/spam/00281.db28f3aab77ff478279d8de20d572b42 new file mode 100644 index 000000000..cccbab820 --- /dev/null +++ b/Ch3/datasets/spam/spam/00281.db28f3aab77ff478279d8de20d572b42 @@ -0,0 +1,83 @@ +From akad5@excite.com Wed Sep 11 16:06:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 9D73C16F03 + for ; Wed, 11 Sep 2002 16:06:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 11 Sep 2002 16:06:23 +0100 (IST) +Received: from webmail.infotec.net.mx ([200.38.188.185]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8BE1EC17349 for + ; Wed, 11 Sep 2002 15:01:14 +0100 +Received: from xmxpita.excite.com [213.82.189.222] by + webmail.infotec.net.mx with ESMTP (SMTPD32-7.00) id AE837800FC; + Wed, 11 Sep 2002 08:09:07 -0600 +Message-Id: <00007a761f75$000043e7$000077fa@xmxpita.excite.com> +To: +From: "Mr Schenznozt" +Subject: University Diplomas +Date: Wed, 11 Sep 2002 09:41:51 -1900 +MIME-Version: 1.0 +Reply-To: akad5@excite.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + +
    + + + +



    +Finally!

    +You've waited a long time for this!

    +Obtain Your University Diploma!
    (Phd, MBA, ect)

    + + +Here is how to receive your University Diploma.

    + +1 - 6 4 6 - 2 1 8 - 1 2 0 0
    Call Us ANYTIME!
    +

    + +Whether it's a Phd or an MBA,
    +the end result is a Beautiful Diploma on your wall.

    + +There's nothing like the feeling of getting
    +the respect of your peers and co-workers.

    + +Some things in life ARE easy.
    Just pick up the phone and call us today= +!

    + +Everyone is eligible! + + + +

    + + +
    + +1 - 6 4 6 - 2 1 8 - 1 2 0 0
    +
    + + + +Call 24 hours a day, 7 days a week,
    +including Sundays and holidays.



    + + +For Removal mailto:no_degree_xyz@excite.com

    + + + +
    + +
    + + + + + + diff --git a/Ch3/datasets/spam/spam/00282.0e230e05877f40a522bfb93aa3e314f3 b/Ch3/datasets/spam/spam/00282.0e230e05877f40a522bfb93aa3e314f3 new file mode 100644 index 000000000..f6d35aef0 --- /dev/null +++ b/Ch3/datasets/spam/spam/00282.0e230e05877f40a522bfb93aa3e314f3 @@ -0,0 +1,550 @@ +From fholland@bigfoot.com Wed Sep 11 19:43:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id B353316F03 + for ; Wed, 11 Sep 2002 19:43:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 11 Sep 2002 19:43:46 +0100 (IST) +Received: from bigfoot.com (host19-51.pool21756.interbusiness.it + [217.56.51.19]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8BHIHC24283 for ; Wed, 11 Sep 2002 18:18:18 +0100 +Reply-To: +Message-Id: <010e04e62b0d$3444d2a5$6dd85de5@muixcp> +From: +To: +Subject: Re: This Weekend +Date: Thu, 12 Sep 2002 01:49:52 -0900 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +Importance: Normal +Content-Type: text/html; charset="iso-8859-1" + + + + +
    +

    +  +Free Personal and Business Grants

    + +

      +

    + + + +
    +
    +

    +" Qualify for at least $25,000 in free +grants money - Guaranteed! "

    +
    + +
    +

    +Each day over One Million Dollars in Free +Government
    +Grants  is given away to people just like you for a wide
    +variety of Business And Personal Needs

    +        +Dear Grant Seeker, +
    In a moment, I'll tell you +exactly HOW & WHERE to get Grants. This MONEY has to +be given away, WHY not to YOU?
    + +
    You may be thinking, "How +can I get some of this Free Grants Money"
    + +
    Maybe you think it's impossible +to get free money?
    + +
    Let me tell you it's not +impossible! It's a fact, ordinary people and businesses all across the +United States are receiving millions of dollars from these Government and +Private Foundation's everyday.
    + +
    Who Can Apply?
    + +
    ANYONE can apply +for a Grant from 18 years old and up!
    + +
    Grants from $500.00 to $50,000.00 +are possible! GRANTS don't have to be paid back, +EVER! Claim +your slice of the FREE American Pie.
    + +
    This money is not a loan, +Trying to get money through a conventional bank can be very time consuming +and requires a lot of paperwork, only to find out that you've been denied. +These Government Agencies don't have to operate under the same stringent +requirements that banks do.
    + +
    You decide how much money +you need, as long as it's a lawful amount and meets with the Government +Agencies criteria, the money is yours to keep and never has to be repaid. +This money is non taxable & interest free.
    + +
    None of these programs require +a credit check, collateral, security deposits or co-signers, you can apply +even if you have a bankruptcy or bad credit, it doesn't matter, you as +a tax payer and U.S. citizen are entitled to this money.
    + +
    There are currently over +1,400 Federal Programs, 24,000 State Programs, 30,000 Private Foundations +and 20,000 Scholarship Programs available.
    + +
    This year over $30 Billion +Dollars In Free personal and business Government Grants Money will be given +away by Government Grants Agencies.
    + + +
      +
    + + + +
    +
    +

    +Government Personal +and Business Grants Facts:

    +Over 20 Million People Get Government +Money Every Year: +
      1,000,000 entrepreneurs get money +to start or expand a business +

      4,000,000 people get money to invest +in real estate +

      6,000,000 people get money to go +to college +

      10,000,000 people get free help and +training for a better job

    +
    + +

    +Getting Business +Grants

    + +
    Anyone thinking about going +into business for themselves, or wanting to expand an existing business +should rush for the world's largest "one-stop-money-shop" where FREE business +grants to start or expand a business is being held for you by the Federal +Government.
    + +
    It +sounds absolutely incredible that people living right here in the United +States of America wouldn't know that each year the world's largest source +of free business help delivers:
    + +
      Over $30 billion dollars in free +business grants and low-interest loans; +

      over one-half trillion dollars in +procurement contracts; and +

      over $32 billion dollars in FREE +consulting and research grants.

    + +
    With an economy that remains +unpredictable, and a need for even greater economic development on all +fronts, the federal government is more willing than it ever has been before +to give you the money you need to own your own business and become your +own boss!
    + +
    In +spite of the perception that people should not look to the government for +help, the great government give-away programs have remained so incredibly +huge that if each of the approximately 8 million businesses applied for +an equal share, they would each receive over $70,000.
    + +
    Most +people never apply for FREE Business Grants because they somehow feel it +isn't for them, feel there's too much red-tape, or simply don't know who +to contact.The fact is, however, that people from all walks of life do +receive FREE GRANTS MONEY and other benefits from the government, and you +should also.
    + +

    +Government Grants +for Personal Need

    + +
    Help to buy a new home for +low income families, repair your home, rent, mortgage payments, utility +bills, purchase a new car, groceries, childcare, fuel, general living expenses, +academic tutoring, clothing, school supplies, housing assistance, legal +services, summer camp, debts, music lessons, art lessons, any extracurricular +activities, pay bills for senior citizens, real estate taxes, medical expenses +and general welfare. If you or someone you know suffered a fire lose there +are programs available to help in replacing necessities.
    + +

    +Scholarships And +Grants For Education

    + +
    Grant Money for preschool +children and nursery school education, private, primary and secondary schools, +men and women to further their education, scholarships for athlete's, business +management, engineering, computer science, medical school, undergraduate, +graduate, professional, foreign studies and many more.
    + +

    +Here's How You +Can Get Free Grants
    +In The Shortest Time Possible

    + +
    Once you know how and where +to apply for a specific Free Grant, results are almost inevitable. The +government wants to give away this money. . . it is under congressional +mandate to do so! These funds are made available to help you, the tax payer. +All that's required from you is the proper presentation of your grant request. +That's all.
    +Announcing... +
    +

    +"The Complete +Guide To Government Grants"

    + +
    Forget just about everything +you've seen or heard about government grants. What I've done is put together +a complete blueprint for researching, locating and obtaining government +grants. "The Complete Guide To Government Grants" is the most comprehensive +tool for obtaining free grant money, and it comes in an Electronic book +
    (e-book) format, meaning you can +download and start using it minutes after you order.
    + +
    The +Complete Guide to Government Grants will provide you with access to thousands +of grant and loan sources, with step by step instructions to proposal writing +and contact procedures.
    +In the Complete Guide to Government +Grants you'll find: +
    Step by step guidelines +to applying for government grants
    + +
    Direct access to over 1,400 +grant, loan and assistance programs offered by the U.S. federal government. +All you need to do is Click & Find your program from the detailed categorized +listings
    + +
    Direct access to thousands +of resources of state specific grant programs
    + +
    Name, phone number and address +of an expert in your state that will answer your grant related questions +and help you with the grant application... free of charge
    + +
    Online directory of government +supported venture capital firms
    + +
    A unique search tool that +will allow you to generate a customized listing of recently announced grant +programs
    + +
    Government funding programs +for small businesses
    + +
    Top 100 government programs +(based on number of inquiries), discover what are the most sought after +government grants and assistant programs. Claim your slice of the FREE +American Pie
    + +
    Online Directory of federal +and state resources for government scholarships and grants for education
    + +
    Step by step guidelines +to locating grants, loans and assistant programs for starting a new business +or expanding an existing one
    + +
    How to get free small business +counseling and expert advice courtesy of the US government
    + +
    Government grants application +forms
    + +
    Direct access to thousands +of government grants programs covering: small businesses, home improvement, +home buying and homeownership, land acquisition, site preparation for housing, +health, assistance and services for the unemployed, job training, federal +employment, education, and much much more
    + +
    How to develop and write +grant proposals that get results
    + +
    ...Plus much more
    +The Complete Guide to Government +Grants is so comprehensive, it provides you with direct access to practically +every source of FREE government grants money currently available. +
    If you're an American citizen +or resident, you are entitled to free grant money ranging from $500 to +$250,000 or more. If you are Black you have already qualified for 15 programs, +being Hispanic, you qualify for many programs. Being a Christian will get +you into 20 programs, there are also many other programs available for +different faiths, Jewish, Catholic. Not having any money, will get you +into over 30 programs, 550 programs if you are unemployed, or underemployed. +The list and sources are endless.
    + +
    You Are Eligible! This money +is Absolutely Free and will be yours to use for any worthwhile purpose.
    + +
    Did you know you can apply +for as many grants as you want?
    + +
    It's true, For instance, +you could get a $65,000 grant to begin a weight loss business, get $8,800 +in tuition to become a nurse or $35,000 to open up the day-care center, +you've always dreamed of owning. And then, go out and apply for a grant +to buy a home for you and your family. And once your new business starts +doing well you could go out and get another grant for expansion of your +business. The possibilities are endless.
    + + +
      +
    + + + +
    +

    +You Must Qualify +For At Least $25,000 In Free
    +Grants Money, Or Your Money Back!

    + +
    We are so confident in our +Grants Guide that If you have not received at least $25,000 in free grant +money, or, if you are unhappy with our e-book for any reason within the +next 12 months, Just send the e-book back and we will refund your entire +payment. NO QUESTIONS ASKED!!
    + +
    If you want to order, we +insist you do so entirely at our risk. That is why the E-book comes with +a... No Risk full year Money-Back Guarantee. There is absolutely +NO RISK on your part with this 365 day guarantee. What we mean is we want +you to order without feeling you might "get taken."
    + +
    Therefore, we want you to +order this material today... read it, use it... and if for any reason you +aren't completely satisfied, you not only can cancel, you should, +for an immediate refund of your purchase price. You simply can't lose.
    + +
    Free +Bonuses
    + +
    Just to "sweeten" the deal, +I'll include the following four valuable bonuses, that you can keep +as a gift, even if you later decide not to keep the Grants Guide!
    + +
    Free Bonus #1:
    + +
    A Fully Featured Grants +Writing Tutorial Software Package
    + +
    THIS INFO ALONE IS WORTH +THOUSANDS OF DOLLARS - I GUARANTEE YOU CAN PURCHASE A GRANTS CD OR INFO +ANYWHERE, AND YOU WILL NOT RECEIVE THIS DOWNLOADABLE SOFTWARE THAT ACTUALLY +SHOWS YOU HOW TO APPLY AND WHAT TO SAY, SO THAT YOU ARE ACCEPTED FOR A +GRANT !!!
    + +
    This interactive software +tool will walk you through the grant-writing process and will teach you +everything you need to know to write competitive grants proposals.
    + +
    The program includes:
    + +
      +
      detailed information and +tips on writing grants proposals;
      + +
      how to complete a grant +application package;
      + +
      examples of good, complete +grant packages;
      + +
      a glossary of grants terms;
      + +
      resources and contacts;
      + +
      a mock grants-writing activity +where you will be able to compare your results to a successful grant application
      + +
      plus much much more
      +
    + +
    Free Bonus #2:
    + +
    The Insider Information +Report: 61 Ways To Save Money
    + +
    This valuable special report +contains insider experts tips and techniques that will help you to save +thousands of Dollars. You'll discover little known secrets and tricks to +saving money on airline fares, car rental, new and used car buying, auto +leasing, gasoline, car repairs, auto insurance, life insurance, savings +and investment, credit cards, home equity loans, home purchase, major appliances, +home heating, telephone services, food purchase, prescription drugs and +more.
    + +
    Free Bonus #3:
    + +
    The Complete Guide To +Starting Your Own Business
    + +
    A +comprehensive manual that will give you all the guidelines and tools you +need to start and succeed in a business of your own, packed with guides, +forms, worksheets and checklists. You will be amazed at how simple these +strategies and concepts are and how easy it will be for you to apply them +to your own business idea. Hundreds were sold separately at $40 each... +you get it here for free.
    + +
    Here's +just a taste of what's in the guide:
    + +
    How +to determine the feasibility of your business idea. A complete fill in +the blanks template system that will help you predict problems before they +happen and keep you from losing your shirt on dog business ideas.
    + +
    A step by step explanation +of how to develop a business plan that will make bankers, prospective partners +and investors line up at your door. Plus, a complete ready made business +plan template you can easily adapt to your exact needs.
    + +
    Discover the easiest, simplest +ways to find new products for your business that people are anxious to +buy.
    + +
    How +to make money with your new idea or invention. Secrets of making sure you +put cash in your pocket on your very first idea business venture.
    + +
    Complete, step by step instructions +on how to plan and start a new business. This is must-know must-do information; +ignore it and you stand a good chance to fail. You get specifically designed +instructions for each of the following: a service business, a retail store, +a home based business, a manufacturing company, and more.
    + +
    What nobody ever told you +about raising venture capital money. Insider secrets of attracting investors, +how to best construct your proposal, common mistakes and traps to avoid, +and much more.
    + +
    Checklist +for entering into a partnership. Keeps you from costly mistakes when forming +a partnership.
    + +
    How to select a franchise +business. A step by step guide to selecting a franchise that is best for +you.
    + +
    A complete step-by-step +organized program for cutting costs in your business. Clients of mine have +achieved an average of 28% to 35% cost reduction with this technique, and +you can too. Keep the money in your pocket with this one!
    + +
    What are the secrets behind +constructing a results driven marketing plan? I will lead you step by step +into developing a marketing plan that will drive your sales through the +roof.
    + +
    A complete step by step +guide guaranteed to help you increase your profits by up to 64%, I call +it "The Profit Planning Guide". This is a simple, practical, common sense +strategy, but amazingly enough, almost no one understands or uses it.
    + +
    Free Bonus #4:
    + +
    Guide To Home Business +Success
    + +
    This +is a fast, no-frills guide +to starting and succeeding in a home based business. Here's just a taste +of what's in the guide:
    + +
    Home +business: is it for you?
    + +
    What +are the secrets behind the people who have million dollar home based businesses? +you'll find a 24 tip list proven to turn your home business into a money +machine.
    + +
    Laws and regulations you +must be aware of to avoid legal errors.
    + +
    Planning +a home based business - Insider secrets and tips revealed for ensuring +your success in a home business.
    + +
    Fundamentals +of home business financial planning.
    + +
    Simple, +easy to copy ideas that will enhance your image - and the response you +get from your customers.
    + +
    Common +problems in starting and managing a home based  business - and how +to solve them once and for all.
    +Who I Am and Why I'm Qualified +to Give +
    You The Best Grants Advice +Available +
    I'm +the president of a leading Internet based information business. I'm also +the creator of "The Managing a Small Business CD-ROM" and the author of +five books.
    + +
    I've +been involved in obtaining grants and in small business for the past 23 +years of my life, as a business coach, a manager of a consulting firm, +a seminar leader and as the owner of five successful businesses.
    + +
    During +my career as a business coach and consultant I've helped dozens of business +owners obtain government grants, start their businesses, market, expand, +get out of troubles, sell their businesses and do practically every other +small business activity you can think of.
    + +
    The +Guide presented here contains every tip, trick, technique and strategy +I've learned during my 23 year career. You practically get my whole brain +in a form of an E-book.
    +How the Grants Guide is priced? +
    The Complete Guide To +Government Grants is normally priced at $50, but...
    + +
    ... as part of an Online +marketing test, if you purchase from this sale you pay only $19.99 (that's +75% off ...plus, you still get the FREE valuable bonuses.)
    + +
    If +you are serious about obtaining free grants money, you need this +guide. Don't delay a moment longer. Order Now !!! 
    +P.S. The Complete Guide To Government +Grants will make a huge difference. You risk nothing. The guide is not +the original price of $50, but only $19.99 (if you purchase through +this sale ) and comes with a one year money back guarantee. And you +get four valuable free bonuses which you may keep regardless. Don't delay +a moment longer, ORDER NOW !!!! +
      + +

    Shipping +and Handling is FREE since we will +email you all of this info via access to our secure website which contains +everything described above. +
    +


    +
    +

     Order +Now!!!

    +
    + +

    +
      + + +0783Iixc7-224SSVD1282BjAl2-765knZz61l34 + + diff --git a/Ch3/datasets/spam/spam/00283.e8e42ee52f919afd2a453983f1256b1d b/Ch3/datasets/spam/spam/00283.e8e42ee52f919afd2a453983f1256b1d new file mode 100644 index 000000000..9c51936ba --- /dev/null +++ b/Ch3/datasets/spam/spam/00283.e8e42ee52f919afd2a453983f1256b1d @@ -0,0 +1,431 @@ +From jp@insiq.us Thu Sep 12 00:05:40 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id C3B9516F03 + for ; Thu, 12 Sep 2002 00:05:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 12 Sep 2002 00:05:36 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g8BMn9C03472 for ; Wed, 11 Sep 2002 23:49:09 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Wed, 11 Sep 2002 18:50:20 -0400 +Subject: Your Gateway to Wealth +To: +Date: Wed, 11 Sep 2002 18:50:19 -0400 +From: "IQ - Jefferson Pilot" +Message-Id: <12144501c259e5$9ac94620$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJZ0VENHpGqe53NTfKiQqkBj3zvwg== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 11 Sep 2002 22:50:20.0109 (UTC) FILETIME=[9AE83FD0:01C259E5] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_1034F3_01C259AF.CA052980" + +This is a multi-part message in MIME format. + +------=_NextPart_000_1034F3_01C259AF.CA052980 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + Welcome to Jefferson Pilot's + Gateway to Wealth + As one of the industry's premier producers, you must continually seek +qualified cutting edge services. + Financial Profiles + Concept Profiles+ Professional is a personal and business +analysis tool that analyzes a client's insurance, investment and +financial planning goals, to help them see their situation today +compared to their objectives. + Market Profiles+ Professional is an ideal tool for true financial +planning. It not only provides a thorough analysis, including asset +allocation, but it can calculate tax implications in a client's plan. +Due to its modular format, it can be used for specific planning needs, +as well as more comprehensive planning. + Benefits +This software not only provides exceptional analysis, but excels in +providing simple as well as comprehensive presentation pages. By +uncovering multiple needs, producers sell more products. + Deferral+ + Concept An internet-based "sales-enabling" service, which allows +users to quickly become successful in the deferred compensation (COLI) +market. + Market Focus on mid-market businesses. In the area of executive +benefits, the mid-market opportunity should be defined by either the +number of employees within a company, or more specifically by the number +of highly compensated executives within a company. + Benefits +A turnkey program that includes qualification of prospect, marketing and +sales support, case design, plan documents and administration. + G.I.F.T. + Concept Global Insurance Funding Transaction (G.I.F.T.) is a +sophisticated premium-financing program that provides an alternative +funding mechanism for life products purchased to offset large estate and +corporate liabilities. + Market Clients with a high net worth of at least $10 million who have +an insurance need and believe their existing portfolio of investments, +when left unliquidated, will earn more then they will have to pay on +loan interest expenses. + Benefits +G.I.F.T. offers compelling sales solutions, comprehensive supplemental +illustrations and access to a consortium of established banks willing +and able to lend in this market. Loans are available in both U.S. +dollars and Japanese Yen. +Please fill out the form below for more information +Name: +E-mail: +Phone: +City: State: Zip: +Primary Insurance Carrier: +Broker-Dealer: + + + If you are currently contracted with any of the +Jefferson Pilot Financial family of companies, +please disregard this ad. +We don't want anybody to receive our mailing who does not wish to +receive them. This is a professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: http://www.insuranceiq.com/optout +Legal Notice + + +------=_NextPart_000_1034F3_01C259AF.CA052980 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Your Gateway to Wealth + + + + +

    =20 + + + + +
    + + =20 + + +
    3D"Welcome
    + 3D'Gateway
    + 3D"As
    + 3D'Financial +
    + + =20 + + + +
    3D'Concept'Profiles+=20 + Professional is a personal and business analysis tool that = +analyzes=20 + a client's insurance, investment and financial planning = +goals, to=20 + help them see their situation today compared to their = +objectives.=20 +
    + + =20 + + + +
    3D'Market'Profiles+=20 + Professional is an ideal tool for true financial planning. = +It not=20 + only provides a thorough analysis, including asset = +allocation, but=20 + it can calculate tax implications in a client's plan. Due = +to its=20 + modular format, it can be used for specific planning = +needs, as well=20 + as more comprehensive planning.
    + + =20 + + + +
    3D'Benefits' + This=20 + software not only provides exceptional analysis, but = +excels in providing=20 + simple as well as comprehensive presentation pages. By = +uncovering=20 + multiple needs, producers sell more products.
    + + =20 + + +
    3D'Deferral+'
    + + =20 + + + +
    3D'Concept'An=20 + internet-based "sales-enabling" service, which = +allows=20 + users to quickly become successful in the deferred = +compensation=20 + (COLI) market.
    + + =20 + + + +
    3D'Market'=20 + Focus on mid-market businesses. In the area of executive = +benefits,=20 + the mid-market opportunity should be defined by either the = +number=20 + of employees within a company, or more specifically by the = +number=20 + of highly compensated executives within a = +company.
    + + =20 + + +
    3D'Benefits' + =20 + A turnkey program that includes qualification of prospect, = +marketing=20 + and sales support, case design, plan documents and = +administration.=20 +
    + + + + +
    3D'G.I.F.T.'
    + + =20 + + + +
    3D'Concept' Global=20 + Insurance Funding Transaction (G.I.F.T.) is a = +sophisticated premium-financing=20 + program that provides an alternative funding mechanism for = +life=20 + products purchased to offset large estate and corporate = +liabilities.=20 +
    + + =20 + + + +
    3D'Market'=20 + Clients with a high net worth of at least $10 million who = +have an=20 + insurance need and believe their existing portfolio of = +investments,=20 + when left unliquidated, will earn more then they will have = +to pay=20 + on loan interest expenses.
    + + =20 + + +
    3D'Benefits' + =20 + G.I.F.T. offers compelling sales solutions, comprehensive = +supplemental=20 + illustrations and access to a consortium of established = +banks willing=20 + and able to lend in this market. Loans are available in = +both U.S.=20 + dollars and Japanese Yen.
    + + =20 + + +
    =20 + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + + + + +
    Please fill out the form below for more = +information
    Name:
    E-mail:
    Phone:
    City:State:Zip:
    + + =20 + + + + =20 + + + +
    Primary Insurance = +Carrier:
    Broker-Dealer:
    + + =20 + + + + +
    =20 + + =20 + + +
    +
    +
    + + =20 + + + +
    =20 +

    + If you are currently contracted with any of the
    + Jefferson Pilot Financial family of companies,
    + please disregard this ad.

    + We don't want anybody to receive our mailing who does = +not wish=20 + to receive them. This is a professional communication = +sent to=20 + insurance professionals. To be removed from this mailing = +list,=20 + DO NOT REPLY to this message. Instead, go here: http://www.insuranceiq.com/opt= +out
    + Legal = +Notice

    +
    +
    +

    + + + +------=_NextPart_000_1034F3_01C259AF.CA052980-- + + diff --git a/Ch3/datasets/spam/spam/00284.4cdf4c9e9404c79c85ab5ac12ce39e85 b/Ch3/datasets/spam/spam/00284.4cdf4c9e9404c79c85ab5ac12ce39e85 new file mode 100644 index 000000000..fc3445ee1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00284.4cdf4c9e9404c79c85ab5ac12ce39e85 @@ -0,0 +1,236 @@ +From qpyhfree-Reports@flashmail.com Thu Sep 12 13:49:34 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id B31F216F03 + for ; Thu, 12 Sep 2002 13:49:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 12 Sep 2002 13:49:32 +0100 (IST) +Received: from 210.67.218.5 ([210.67.218.5]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g8C2EnC13248 for ; + Thu, 12 Sep 2002 03:14:52 +0100 +Message-Id: <200209120214.g8C2EnC13248@dogma.slashnull.org> +Received: from [72.62.68.193] by rly-yk04.mx.aol.com with asmtp; + Sep, 12 2002 4:00:54 AM +0700 +Received: from rly-xl05.mx.aol.com ([147.119.50.98]) by smtp4.cyberec.com + with NNFMP; Sep, 12 2002 2:50:05 AM +0700 +Received: from 155.89.28.179 ([155.89.28.179]) by rly-xw05.mx.aol.com with + smtp; Sep, 12 2002 2:07:38 AM -0700 +Received: from rly-xw01.mx.aol.com ([153.196.56.114]) by + da001d2020.lax-ca.osd.concentric.net with SMTP; Sep, 12 2002 12:53:53 AM + +0400 +From: "lncw..The Secret Reporter../.m.911tu44" +To: webmaster@efi.ie +Cc: +Subject: .Message report from your contact page....//ytu855 rkq +Sender: "lncw..The Secret Reporter../.m.911tu44" +MIME-Version: 1.0 +Date: Thu, 12 Sep 2002 04:10:10 +0200 +X-Mailer: MIME-tools 5.503 (Entity 5.501) +X-Priority: 1 +Content-Type: text/html; charset="iso-8859-1" + + + + + + + +Check the REPORTS you would like to receive + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Check the Available REPORTS you would like to receive: +
    +  Keep on TOP of the latest NEWS, Get + Great Special DEALS now... +
     It is complimentary, it costs nothing, YOU can QUIT anytime !
    +
    +
    + Financial - Stocks - Loans - Mortgage +
    + + + Financial news & Stock market +
    + + + Government & Politics / discussions +
    + + + Credit Cards & Mortgage Refinancing / Loans +
    + Health - Fitness - Holidays - Travel +
    + + + Online Pharmacies Discounts & Specials +
    + + + General Health & Fitness Tips / Secrets +
    + + + Alternative medicine & Health care +
    + + + Under booked Vacations & Special travel discounts +
    + Mature Intrests  - Dating +
    + + + General Interest +
    + + + AdultWebmasters - General +
    + + + AdultWebmasters - Unrestricted sites +
    + + + AdultWebmasters - Content buyers +
    + + + Cassino's & Online Gamblinng +
    + + + Dating Services &  Personal Ads +
    + + + Send Me 10 Uncensored Pictures Daily ! +
    + + + + +
    +
    +
    +
    +
    +
    +
    This mail is NEVER sent unsolicited, Got it by error ?
    [ CLICK HERE ] to be removed from our subscribers List !
    +
    + +















    +















    +















    +
    +
    +
    + + + + +ndtxcpfjspwwtrkaxnxg + + diff --git a/Ch3/datasets/spam/spam/00285.8a06c91fcdf4a1ae8ca928f3ef3feecb b/Ch3/datasets/spam/spam/00285.8a06c91fcdf4a1ae8ca928f3ef3feecb new file mode 100644 index 000000000..4c08a13b9 --- /dev/null +++ b/Ch3/datasets/spam/spam/00285.8a06c91fcdf4a1ae8ca928f3ef3feecb @@ -0,0 +1,177 @@ +From dkc70@hotmail.com Thu Sep 12 13:49:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 7485E16F03 + for ; Thu, 12 Sep 2002 13:49:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 12 Sep 2002 13:49:37 +0100 (IST) +Received: from rguhs-lib.rguhs.ac.in ([203.200.41.66]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8C93jC24310 for + ; Thu, 12 Sep 2002 10:03:45 +0100 +Received: from dbconcepts.net ([200.207.190.90]) by rguhs-lib.rguhs.ac.in + with Microsoft SMTPSVC(5.0.2195.5329); Fri, 6 Sep 2002 21:16:25 +0530 +Message-Id: <0000721b7519$00001e44$000043bf@corp.portal.com> +To: , , + , , + +Cc: , , + , , + +From: dkc70@hotmail.com +Subject: Re:[1]Save over $70 on this exquisite software suite. 32004 +Date: Fri, 06 Sep 2002 11:41:10 -1600 +MIME-Version: 1.0 +Reply-To: dkc70@hotmail.com +X-Originalarrivaltime: 06 Sep 2002 15:46:27.0046 (UTC) FILETIME=[8F8E1060:01C255BC] +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Norton AD + + + + + + + +
    = +Take + Control of Your Computer With This Top-of-the-Line Software!<= +/td> +
    + + + + + +
    + + + + +
    Norton + SystemWorks 2002 Software Suite
    + -Professional Edition-
    + + + + +
    Includes + Six - Yes 6! + - Feature-Packed Utilities
    ALL for
    1 + Special LOW + Price of Only + $29.99!
    + + + + +
    = +This + Software Will:
     
    = +- + Protect your computer from unwanted and hazardous vir= +uses
     - + Help secure your private & valuable information
     -= + Allow + you to transfer files and send e-mails safely
     = +;- + Backup your ALL your data quick and easily
     - Improve = +your + PC's performance w/superior + integral diagnostics!
     - You'll NEVER have to take = +your + PC to the repair shop AGAIN!
      + + + + +
    +

    6 + Feature-Packed Utilities +
    1 + Great Price
    + A $300+ + Combined Retail Value +
    + YOURS for + Only $29.99! +

    +
    < + Price Includes FREE + Shipping! >
    And + For a Limited time Buy Any 2 of Our Products & Get 1 Free!= +

    +

    Don't fall + prey to destructive viruses or hackers!
    Protect  your computer= + and + your valuable information and

    + + + + +
    -> + CLICK HERE to Order Yours NOW! <-
    +

    or Call + Toll-Free 1-800-861-1481!

    +

    Your email + address was obtained from an opt-in list. Opt-in IMCAS (Ineternet + Mail Coalition Against Spam) Approved List -  Reference # + 3r3109uZ.  If you wish to be unsubscribed from this list, = +please Click + here . Allow 5 Business days for removal. If you have previously= + unsubscribed and are still receiving + this message, you may email our Spam + Abuse Control Center. We do not condone spam in any shape or for= +m. + Thank You kindly for your cooperation.

    + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00286.efd0b8f0c9c779b7a0ad93505c9b0bae b/Ch3/datasets/spam/spam/00286.efd0b8f0c9c779b7a0ad93505c9b0bae new file mode 100644 index 000000000..f5c2021f2 --- /dev/null +++ b/Ch3/datasets/spam/spam/00286.efd0b8f0c9c779b7a0ad93505c9b0bae @@ -0,0 +1,163 @@ +From root@quinlan.colo.netbauds.net Thu Sep 12 13:49:44 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 798C516F03 + for ; Thu, 12 Sep 2002 13:49:40 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 12 Sep 2002 13:49:40 +0100 (IST) +Received: from quinlan.colo.netbauds.net (quinlan.colo.netbauds.net + [62.232.161.232]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8CAOpC26847 for ; Thu, 12 Sep 2002 11:24:51 +0100 +Received: (from root@localhost) by quinlan.colo.netbauds.net + (8.11.6/8.11.6) id g8CATmZ30743 for zzzz@jmason.org; Thu, 12 Sep 2002 + 11:29:48 +0100 +Date: Thu, 12 Sep 2002 11:29:48 +0100 +Message-Id: <200209121029.g8CATmZ30743@quinlan.colo.netbauds.net> +To: zzzz@spamassassin.taint.org +From: "Analysis Manager" +Subject: Membership Renewal +Content-Type: text/html + + + + + +Free Info! + + + + + + + + + + +
    + + + + +
    +

    FREE

    +

    The + Insider Stock Market Report

    +

    $2400 Value

    +

    Get + the latest competitive intelligence, insider knowledge and + deal-sourcing contacts to stay ahead & succeed in this + supercharged market!

    + + + +
    +

    Free + 3 month subscription

    +
    +

    Subscribed + to by over 200 investment bankers, venture capitalists, fund + managers, deal-makers and public company CEO & CFO´s

    +
      +
    • world + market overviews and updates +
    • "first + seen" analyst reports +
    • investment + alerts +
    • portfolio + strategies for the 21st century +
    • annual + offshore jurisdiction rankings report
    + + + + + +
    +

    Get + the information the professionals profit from $$$

    +

    Fill out the form for  + FREE SUBSCRIPTION No + credit card needed!

    +
    +

    Sorry + to see you go, but to + unsubscribe from our newsletter complete the following

    +
    + + +

    +Email Address    +  +

    +

    +
    +
    +

     

    +

                    +

    + + + +
    +
    + + + + + +
    +
    +
    + +

    Please remember

    + + + + +
    + + + + +
    +

    You must be 18 years + of age or older +

    .

    Your First Name:*

    Your Last Name:*

    Street Address:*

    City*   

    Postal / Zip Code:*

    Country:*

    Telephone:*

    Mobile / Work:*

    Fax:

    Email Address:*

    * Required Fields

    + + + + +

    + + +

    + +
    +
     
    +
     
    +
    v
    +
    + + + + + diff --git a/Ch3/datasets/spam/spam/00287.b0495a4dbdff36654c3b3ee2f92bdbf3 b/Ch3/datasets/spam/spam/00287.b0495a4dbdff36654c3b3ee2f92bdbf3 new file mode 100644 index 000000000..01d6862b1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00287.b0495a4dbdff36654c3b3ee2f92bdbf3 @@ -0,0 +1,438 @@ +From wwc1@freeuk.com Thu Sep 12 13:49:49 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 3504516F16 + for ; Thu, 12 Sep 2002 13:49:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 12 Sep 2002 13:49:45 +0100 (IST) +Received: from mydomain.com (213-96-189-190.uc.nombres.ttd.es + [213.96.189.190]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8CBCbC28375 for ; Thu, 12 Sep 2002 12:12:38 + +0100 +Message-Id: <200209121112.g8CBCbC28375@dogma.slashnull.org> +From: "Dont waste your Time!!! Why?" +To: "Iiu-list-request" +Subject: Looking for property in SPAIN? +Date: Thu, 12 Sep 2002 13:24:51 +0200 +MIME-Version: 1.0 +X-Priority: 3 +X-Msmail-Priority: Normal +Reply-To: "Dont waste your Time!!! Why?" +Organization: WWC +X-Mailer: Internet Mail Service +Content-Type: multipart/alternative; boundary="----_NextPart_4488214905" + +This is a multi-part message in MIME format. + +------_NextPart_4488214905 +Content-Type: text/plain; charset="ISO-8859-1" +Content-Transfer-Encoding: QUOTED-PRINTABLE + + + +Looking for Property in Spain? + +Don_t waste your Time! +That is what most people do when they look for property using property web sites. Why? + + Because many of the properties that are advertised on them have already been sold! + + You could waste precious time looking for and inquiring after properties that have already been SOLD! + + How Frustrating!!! + +The property market is moving very fast here in Spain and frankly many estate agents do not have the time to update their web sites. + +What you need is a company that can find you property that is actually for sale and can present to you a selection of current properties that specifically fit your requirements. + +Just think of how much time and effort that would save you! + +Property finders Spain +can do just that! + +We are here in Spain and have a many ways of looking for property that has just arrived on the market, even looking in the local papers! + +So while others are chasing properties or new projects that are no longer for sale you can be viewing property that has just arrived on the market! + +Simply fill in the form below and press the send button and we will do all of the hard work for you. + +Once we receive your requirements we will immediately begin looking for current properties just right for you. + +Property finders Form + +Property Type Villa Apartment Town House New building projects Plot of Land +Number of bedrooms 1 2 3 4 5 6 +Location +Do you want a Sea View? Yes No Don`t care +Mountain View Yes No Don`t care +A property in the country +A Property in or near a city +Pool Yes, No Yes No Don`t care +Price Range +Are you planning to come +to Spain in the next three months Yes, No? Yes No +Name +E mail address +Telephone Number +Country Code + + + + + +Let us find a property for you! + + + + + + + +------_NextPart_4488214905 +Content-Type: text/html; charset="ISO-8859-1" +Content-Transfer-Encoding: QUOTED-PRINTABLE + + + + + + + +
    + + + +
    + + + + + + + + + + + + + + + + +
        
    +

     

    +

    Looking for + Property in Spain?

    +

     

    +

    Don_t waste your Time!

    +

    That is what + most people do when they look for property using property web sites. + Why?

    +

     

    +

     Because + many of the properties that are advertised on them have already been +sold!

    +

     

    +

     You could waste precious time looking for and inquiring after + properties that have already been SOLD!

    +

     

    +

     How Frustrating!!! +

    +

     

    +

    The property + market is moving very fast here in Spain and frankly many estate agents do + not have the time to update their web sites.

    +

     

    +

    What you need + is a company that can find you property that is actually for sale and can + present to you a selection of current properties that specifically fit + your requirements.

    +

     

    +

    Just think of how much time and effort + that would save you!

    +

     

    +

    Property finders Spain +

    +

    can do + just that!

    +

     

    +

    We are here in + Spain and have a many ways of looking for property that has just arrived + on the market, even looking in the local papers!

    +

     

    +

    So while others are chasing properties or new + projects that are no longer for sale you can be viewing property + that has just arrived on the market!

    +

     

    +

    Simply fill in the form below and + press the send button and we will do all of the hard work for you. +

    +

     

    +

    Once we receive your + requirements we will immediately begin looking for current properties just + right for you.

    +

     

    +
    + + + +
    +

    Property finders + Form

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

     

    +

     

    +

    Property + Type

    +

    +

    Number of + bedrooms

    +

    +

    Location

    +

    +

    Do you want a Sea + View?

    +

    +

    Mountain + View

    +

    +

    A property in the + country

    +

    +

    A Property in or near a + city

    +

    +

    Pool Yes, + No

    +

    +

    Price + Range

    +

    +

    Are you planning to come +

    +

    to Spain in the next three + months Yes, No?

    +

    +

    Name

    +

    +

    E mail + address

    +

    +

    Telephone + Number

    +

    +

    Country Code

    +

    +

     

    +

     

    +

     

    +

    >" name=3DB1>

    +

    +

    Let us find a property for + you!

    + + + +
    +

     

    +

    +

    +

    + + + +
     
    +

     

    +

     

    +

     

    +

     

    +

     

    + + + + +------_NextPart_4488214905-- + + diff --git a/Ch3/datasets/spam/spam/00288.8c8bc71976c3b67d900ebd8eeab8a0f5 b/Ch3/datasets/spam/spam/00288.8c8bc71976c3b67d900ebd8eeab8a0f5 new file mode 100644 index 000000000..aa52ae926 --- /dev/null +++ b/Ch3/datasets/spam/spam/00288.8c8bc71976c3b67d900ebd8eeab8a0f5 @@ -0,0 +1,35 @@ +From ewquAmyJoe@XO.net Thu Sep 12 14:01:33 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 23EB616F03 + for ; Thu, 12 Sep 2002 14:01:33 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 12 Sep 2002 14:01:33 +0100 (IST) +Received: from 200.168.105.180 ([217.218.193.1]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g8C1c4C12333 for ; + Thu, 12 Sep 2002 02:38:07 +0100 +Message-Id: <200209120138.g8C1c4C12333@dogma.slashnull.org> +Received: from unknown (HELO mail.gmx.net) (171.245.226.233)by + rly-xl04.mx.aol.com with local; Sep, 11 2002 9:22:08 PM -0200 +Received: from 34.57.158.148 ([34.57.158.148]) by rly-xr02.mx.aol.com with + local; Sep, 11 2002 8:25:27 PM -0100 +Received: from [203.186.145.225] by hotmail.com (3.2) with ESMTP id + MHotMailBE7297E1009B400437E7CBBA91E10D0B0; Sep, 11 2002 7:19:14 PM -0200 +From: "xdsdMjr. Bartholomieu" +To: teluslabs@TELUS.com +Cc: +Subject: Grow Up And Be A Man!  abm +Sender: "xdsdMjr. Bartholomieu" +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Date: Wed, 11 Sep 2002 21:38:41 -0400 +X-Mailer: AOL 7.0 for Windows US sub 118 + +Click Here +

    + +hwawrlgiooooqvjoii + + diff --git a/Ch3/datasets/spam/spam/00289.61a681a72c71512f115ad65033acc7c9 b/Ch3/datasets/spam/spam/00289.61a681a72c71512f115ad65033acc7c9 new file mode 100644 index 000000000..8bf85fc06 --- /dev/null +++ b/Ch3/datasets/spam/spam/00289.61a681a72c71512f115ad65033acc7c9 @@ -0,0 +1,44 @@ +From powerballinfo@powerballinfo.cjb.net Thu Sep 12 18:44:13 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 3B81F16F03 + for ; Thu, 12 Sep 2002 18:44:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 12 Sep 2002 18:44:12 +0100 (IST) +Received: from pintail.mail.pas.earthlink.net + (pintail.mail.pas.earthlink.net [207.217.120.122]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8CG9gC05808 for ; + Thu, 12 Sep 2002 17:09:43 +0100 +Received: from user15.net215.mo.sprint-hsd.net ([65.173.79.15] helo=curt) + by pintail.mail.pas.earthlink.net with esmtp (Exim 3.33 #1) id + 17pVsE-0002nB-00 for root@zzzzason.org; Thu, 12 Sep 2002 08:27:19 -0700 +Message-Id: <4113-22002941215323653@curt> +Return-Receipt-To: powerballinfo@powerballinfo.cjb.net +Organization: Powerball Lottery Results +Disposition-Notification-To: powerballinfo@powerballinfo.cjb.net +From: "Powerball Lottery" +To: root@zzzzason.org +Subject: Powerball Results Saturday September 14, 2002 Estimated Jackpot $100 Million +Date: Thu, 12 Sep 2002 10:32:03 -0500 +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8CG9gC05808 + +Would you like to know what the Powerball Winning Lottery Numbers will be in the Morning, If so Just Follow This link mailto:results.cresenttechnologies.com + +Although every attempt is made to ensure that this list of numbers is accurate, the official winning numbers are recorded in the official draw files as certified by the independent accounting firm. At the request of our players, these numbers are listed in numerical order. +Wednesday September 11, 2002 Draw Results: +03 06 26 39 48 PB 28 PP 03 Or Visit http://www.powerballinfo.cjb.net + + +Are you tired of your job? + +Then Please Visit http://www.cash-in.cjb.net It's Time to Retire!! + + + + diff --git a/Ch3/datasets/spam/spam/00290.eb053a191b7509a9399aa16717630414 b/Ch3/datasets/spam/spam/00290.eb053a191b7509a9399aa16717630414 new file mode 100644 index 000000000..68604cfd6 --- /dev/null +++ b/Ch3/datasets/spam/spam/00290.eb053a191b7509a9399aa16717630414 @@ -0,0 +1,395 @@ +From news@risingtidestudios.com Fri Sep 13 13:35:19 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 9110A16F03 + for ; Fri, 13 Sep 2002 13:35:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 13 Sep 2002 13:35:16 +0100 (IST) +Received: from rtsq9.risingtidestudios.com (82.siliconalleyreporter.com + [209.11.52.209] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with SMTP id g8D55JC02668 for ; Fri, 13 Sep 2002 06:05:19 + +0100 +Received: (qmail 20326 invoked by uid 508); 12 Sep 2002 18:21:31 -0000 +Date: 12 Sep 2002 18:21:31 -0000 +Message-Id: <20020912182131.20322.qmail@rtsq9.risingtidestudios.com> +Reply-To: news@risingtidestudios.com +X-Organization: Venture Reporter +From: "Venture Reporter" +To: "zzzz@spamassassin.taint.org" +Subject: Invite: Content Management Summit, Oct. 10th New York City +MIME-Version: 1.0 +Content-Type: text/html; charset=US-ASCII + + + + + + This email is being sent to zzzz@jmason.org. To unsubscribe please +visit http://www.venturereporter.net/myaccount/ . If you ever have a problem +removing or changing your email subscriptions on our newsletters, or getting +in touch with us, please don't hesitate to email support@venturereporter.net +and a human will get in touch with you immediately. Venture Reporter 307 +West 36th Street, 10th Floor New York, New York 10018 Phoe: 646.473.2222 +The online content business. + + + + + +

    CMS + CMS +
    +

    + +

    Dear Friends,
    +
    + The online content business is doing fantastic.

    + +

    Sound crazy? Perhaps. With +advertising, online and off, taking it on the chin +for the past two years, online content sites have been shutting down, laying +off staff and pulling back on their offerings.

    + +

    However, this horrible environment +has resulted in an undeniable trend: content businesses are challenging +people to pay for content. Finally, after five years of free, people are beginning to understand that online, as in the real +world, you get what you pay for and they are taking out their credit cards. + U.S. consumers spent $675 million on paid online content last +year, a 92 percent increase over 2000 spending levels, according to Online +Publishers Association, and that figure is expected to increase exponentially +this year. Look at these success stories:

    + +
      +
    • +
      New York Times Digital has +been steadily increasing its paid content services over the last year, and +registered a 16 percent increase in its total revenues for the latest quarter.
      +
    • +
    • +
      TheStreet.com brought over +$3 million in subscriptions last quarter, an increase of almost 50 percent +over the year-ago quarter.
      +
    • +
    • +
      ConsumerReports.com will +reach over a million paying subscribers by the end of this year.
      +
    • +
    • +
      RealNetworks' consumer multi-media +subscription service has more than 750,000 subscribers, bringing in $17.8 +million in the last quarter.
      +
    • +
    • +
      The Wall Street Journal Online +added over 6,000 new paying customers last quarter, bringing its subscriber +base to 646,000.
      +
    • +
    • +
      FT.com has signed up 17,000 +subscribers in three months since it launched its premium site in May.
      +
    • + +
    + +

    In recognition of this trend we're hosting +the third installation of our innovative Content Management Summit on October 10, +2002. The event charts the changes in the content industry from free +to paid subscription services, and the technologies that are enabling the management and monetizing of content.

    + +

    Our previous Content Management +Summit (aka Digital Rights Summit) on October 18 last year in New York City +and January 29 in Los Angeles were unqualified successes.

    + +

    The Content Management Summit +III, taking place in New York at the Millennium Broadway on October 10, +2002, will bring together the 100 executives from the leading content and +distribution firms for a focused day of networking and discovering practical +solutions.

    + +

    The event will feature presentations +from software and services companies providing services +and solutions for selling, distributing, managing, and protecting content.

    + +

    We're thrilled that +Microsoft, TeleKnowledge, eMeta, and Liquify will all be demonstrating +their latest products and services.

    + +

    The event will also feature six intimate round tables focusing on various aspects of online content. + These panels are meant to provide an informal forum to discuss the challenges +facing these specific vertical markets, the changes in the sectors since +the dot-com downfall, and best practices in the industry. The panels will +feature leading practitioners in each sector, and will also include an interactive +question and answer session with the audience.

    + +

    Among the round table topics will be:

    + +
      +
    • +
      Weblogs: how they are affecting big media +companies, editorially as well as in content delivery/production mechanisms.
      +
    • +
    • +
      Financial news and information +companies: how they are using technologies to deliver content to users, +and how the economics have changed since the stock market downfall.
      +
    • +
    • +
      Business information services +such as Hoovers, Lexis-Nexis and others: best practices in the industry, + niche product launches and revenue streams.
      +
    • +
    • +
      Daily news/newspaper companies +publishing online: how speed dictates technology choices, and the move towards +paid content and its implications, among other issues.
      +
    • +
    • +
      Consumer and entertainment +publishers: how do publishers determine the value of entertainment content, + the push towards paid subscriptions, online advertising and other issues.
      +
    • + +
    + +

    Join us on October 10th +for this very important event. If you are directly responsible +for content management at a major content site you may qualify for +a VIP ticket. Please e-mail your request with your name, title and bio to +invite@cmsummit.com. If you are +with a software or services provider, or anyone not directly responsible +for the purchase of content management software or solutions, you can purchase +a ticket to this event for $1,200 at invite@cmsummit.com.

    + +

    Best Regards,

    + +

    Jason McCabe Calacanis
    + E
    ditor-in-Chief +& CEO, Venture Reporter & Silicon Alley Reporter

    + +
    +

    This email + is being sent to zzzz@jmason.org.

    + +

    If you would + rather not receive these infrequent updates simply click + here and you will be removed instantly.

    + You can also click the + link here or cut and paste it into your browser:
    + http://venturereporter.net/myaccount/k.asp?E=jm@jmason.org +  
    +


    +

    + +
    Venture + Reporter
    +
    + +
    307 +West 36th Street, 10th Floor
    +
    New York, New + York 10018
    +
    Phoe: 646.473.2222
    +


    +
    +

    +
    +
    + + + + diff --git a/Ch3/datasets/spam/spam/00291.7aa227e74e89bdd529a3875459d0d5a2 b/Ch3/datasets/spam/spam/00291.7aa227e74e89bdd529a3875459d0d5a2 new file mode 100644 index 000000000..b073a835f --- /dev/null +++ b/Ch3/datasets/spam/spam/00291.7aa227e74e89bdd529a3875459d0d5a2 @@ -0,0 +1,296 @@ +From tba@insiq.us Fri Sep 13 13:45:55 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0EC1816F03 + for ; Fri, 13 Sep 2002 13:45:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 13 Sep 2002 13:45:53 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g8CNIdC19397 for ; Fri, 13 Sep 2002 00:18:39 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Thu, 12 Sep 2002 19:19:51 -0400 +Subject: The TBA Doctor Walks the Walk on Diabetes +To: +Date: Thu, 12 Sep 2002 19:19:51 -0400 +From: "IQ - TBA" +Message-Id: <1619ab01c25ab2$e52dd5a0$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJanC55WL86OrO9T1CG6+nKItvvkQ== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 12 Sep 2002 23:19:51.0750 (UTC) FILETIME=[E54CF660:01C25AB2] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_143B1F_01C25A7A.A80CB430" + +This is a multi-part message in MIME format. + +------=_NextPart_000_143B1F_01C25A7A.A80CB430 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: quoted-printable + + The TBA Doctor Walks the Walk... On Diabetes! + =20 + =20 + + +Case 1: Case 2: =20 +? Male age 37 +? Nonsmoker=20 +? $500,000 Face +? Type 1 Diabetic - Treated with Insulin Pump +? Diagnosed at age 23 +? Hospitalized in '95, '96 and '98 with + "Diabetic Complications" +? Issued Standard ? Male age 51 +? Nonsmoker=20 +? $1,200,000 Face +? 6'0", 237lbs=20 +? Takes Micronase and Glucophage +? Issued Super Standard =09 +Case 3: Case 4: =20 +? Female age 60 +? Nonsmoker=20 +? $2,000,000 Face +? 5'5", 165lbs=20 +? Insulin Dependent=20 +? Issued Super Standard ? Male age 45 +? Nonsmoker=20 +? $875,000 Face +? 6'4", 275lbs +? Diabetes Controlled by Diet +? Issued Super Standard =09 +Click here to provide the details on your "tough case" + =20 +Call the Doctor with your case details! +We've cured 1,000s of agents' "tough cases!" + 800-624-4502 ext. 18=09 +=97 or =97 + +Please fill out the form below for more information =20 +Name: =09 +E-mail: =20 +Phone: =20 +City: State: =20 + =09 +=20 + +Tennessee Brokerage Agency - www.TBA.com =20 +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.InsuranceIQ.com/optout + +Legal Notice =20 + +------=_NextPart_000_143B1F_01C25A7A.A80CB430 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +The TBA Doctor Walks the Walk on Diabetes + + + + + + =20 + + + =20 + + +

    +
    + =20 + + =20 + + + =20 + + + =20 + + + + + +
    +
    =20 + + =20 + + + + =20 + + + + =20 + + + + =20 + + + +
    Case 1:Case 2:
    • Male age = +37
    + • Nonsmoker
    + • $500,000 Face
    + • Type 1 Diabetic - Treated with Insulin = +Pump
    + • Diagnosed at age 23
    + • Hospitalized in '95, '96 and '98 with
    +   "Diabetic Complications"
    + • Issued = +Standard
    +
    • Male age 51
    + • Nonsmoker
    + • $1,200,000 Face
    + • 6'0", 237lbs
    + • Takes Micronase and Glucophage
    + • Issued Super = +Standard
    +
    Case = +3:Case = +4:
    • Female = +age 60
    + • Nonsmoker
    + • $2,000,000 Face
    + • 5'5", 165lbs
    + • Insulin Dependent
    + • Issued Super = +Standard
    +
    • Male age = +45
    + • Nonsmoker
    + • $875,000 Face
    + • 6'4", 275lbs
    + • Diabetes Controlled by Diet
    + • Issued Super = +Standard
    +
    +
    =20 + Call the Doctor with = +your case details!
    + We've cured 1,000s of agents' = +"tough cases!"

    + +
    — or = +—
    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please fill = +out the form below for more information
    Name:
    E-mail:
    Phone:
    City: State:
     =20 + + + =20 +
    +
    +
    + 3D"Tennessee=20 +
    +

    =20 + We don't want anyone to receive our mailings who does not wish = +to. This=20 + is professional communication sent to insurance professionals. = +To be removed=20 + from this mailing list, DO NOT REPLY to this message. = +Instead,=20 + go here: http://www.InsuranceIQ.com/opt= +out

    +
    + Legal Notice=20 +
    +
    =20 + + + +------=_NextPart_000_143B1F_01C25A7A.A80CB430-- + + diff --git a/Ch3/datasets/spam/spam/00292.dbf78a2aaa230d288eb80ab843804252 b/Ch3/datasets/spam/spam/00292.dbf78a2aaa230d288eb80ab843804252 new file mode 100644 index 000000000..a7fd5efd4 --- /dev/null +++ b/Ch3/datasets/spam/spam/00292.dbf78a2aaa230d288eb80ab843804252 @@ -0,0 +1,75 @@ +From ilug-admin@linux.ie Fri Sep 13 13:46:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id A22A616F03 + for ; Fri, 13 Sep 2002 13:45:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 13 Sep 2002 13:45:59 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8D6K6C05756 for + ; Fri, 13 Sep 2002 07:20:06 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id HAA06906; Fri, 13 Sep 2002 07:19:10 +0100 +Received: from emailaccount.com (10138.hz-ddn.sn.cninfo.net + [61.185.88.138] (may be forged)) by lugh.tuatha.org (8.9.3/8.9.3) with + SMTP id HAA06853 for ; Fri, 13 Sep 2002 07:18:42 +0100 +From: marie_adolph@emailaccount.com +X-Authentication-Warning: lugh.tuatha.org: Host 10138.hz-ddn.sn.cninfo.net + [61.185.88.138] (may be forged) claimed to be emailaccount.com +Received: from smtp-server1.cflrr.com ([8.187.42.128]) by mail.gimmixx.net + with QMQP; 13 Sep 2002 23:20:42 +0800 +Received: from unknown (69.247.33.57) by mta85.snfc21.pibi.net with esmtp; + 14 Sep 2002 07:16:39 -1000 +Received: from [133.224.241.220] by q4.quickslow.com with QMQP; + 13 Sep 2002 21:12:36 -0700 +Received: from anther.webhostingtotalk.com ([97.240.214.29]) by + mailout2-eri1.midmouth.com with asmtp; Fri, 13 Sep 2002 14:08:33 -0900 +Received: from [75.173.201.249] by smtp-server1.cflrr.com with esmtp; + 13 Sep 2002 05:04:30 +0100 +Reply-To: +Message-Id: <002e11b67b0c$2542e7c1$8dd64db1@wrwmow> +To: +Date: Fri, 13 Sep 2002 12:10:21 -0600 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: MIME-tools 5.503 (Entity 5.501) +Importance: Normal +Subject: [ILUG] re: popular .BIZ and .COM extensions for only $14.95 +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie +Content-Transfer-Encoding: 8bit + +REGISTER .COM, .BIZ, AND .INFO DOMAINS FOR ONLY $14.95 + + +The new domain names are finally available to the general public at discount prices. Now you can register one of the exciting new .BIZ or .INFO domain names, as well as the original .COM and .NET names for just $14.95. These brand new domain extensions were recently approved by ICANN and have the same rights as the original .COM and .NET domain names. The biggest benefit is of-course that the .BIZ and .INFO domain names are currently more available. i.e. it will be much easier to register an attractive and easy-to-remember domain name for the same price. Visit: http://www.domainsforeveryone.com/ today for more info. + +Register your domain name today for just $14.95 at: http://www.domainsforeveryone.com/ Registration fees include full access to an easy-to-use control panel to manage your domain name in the future. + +Sincerely, + +Domain Administrator +Domains For Everyone + + +To remove your email address from further promotional mailings from this company, click here: +http://www.centralremovalservice.com/cgi-bin/domain-remove.cgi +(g2-ss2)4483ZsiO6-368esUR2641hwjE2-115mHZg9267xWnFl40 + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00293.f4e9fd5549f9063ad5559c094edf08f2 b/Ch3/datasets/spam/spam/00293.f4e9fd5549f9063ad5559c094edf08f2 new file mode 100644 index 000000000..d617e7f4f --- /dev/null +++ b/Ch3/datasets/spam/spam/00293.f4e9fd5549f9063ad5559c094edf08f2 @@ -0,0 +1,100 @@ +From oNLeoYd0JK@tpts7.seed.net.tw Fri Sep 13 20:45:54 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 5AC4616F03 + for ; Fri, 13 Sep 2002 20:45:50 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 13 Sep 2002 20:45:50 +0100 (IST) +Received: from vic (61-230-27-136.HINET-IP.hinet.net [61.230.27.136]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g8DIZCC30477 for + ; Fri, 13 Sep 2002 19:35:13 +0100 +Date: Fri, 13 Sep 2002 19:35:13 +0100 +Received: from ara by saturn.seed.net.tw with SMTP id + bE3PbLYKPnP0Jc0fou7Psg6bSznj; Sat, 12 Sep 2015 02:39:57 +0800 +Message-Id: +From: ¤p§d@dogma.slashnull.org +To: 0913.9.TXT@dogma.slashnull.org, 0913.10.TXT@dogma.slashnull.org, + 0913.11.TXT@dogma.slashnull.org, 0913.12.TXT@dogma.slashnull.org, + 0913.13.TXT@dogma.slashnull.org, 0913.14.TXT@dogma.slashnull.org, + 0913.2.TXT@dogma.slashnull.org, 0913.3.TXT@dogma.slashnull.org, + 0913.4.TXT@dogma.slashnull.org, 0913.5.TXT@dogma.slashnull.org, + 0913.6.TXT@dogma.slashnull.org, 0913.7.TXT@dogma.slashnull.org, + 0913.8.TXT@dogma.slashnull.org, 0913.1.TXT@dogma.slashnull.org +Subject: =?big5?Q?=A7A=B7=C7=B3=C6=A6n=A4F=B6=DC=3F?= +MIME-Version: 1.0 +X-Mailer: AbopIANCYUGKLQUL7 +X-Priority: 3 +X-Msmail-Priority: Normal +Content-Type: multipart/related; type="multipart/alternative"; boundary="----=_NextPart_vXklypZzzDWWhOFZ5e1rZ" + +This is a multi-part message in MIME format. + +------=_NextPart_vXklypZzzDWWhOFZ5e1rZ +Content-Type: multipart/alternative; + boundary="----=_NextPart_vXklypZzzDWWhOFZ5e1rZAA" + + +------=_NextPart_vXklypZzzDWWhOFZ5e1rZAA +Content-Type: text/html; + charset="big5" +Content-Transfer-Encoding: base64 + +PGh0bWw+DQoNCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29u +dGVudD0iemgtdHciPg0KPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNaWNyb3NvZnQg +RnJvbnRQYWdlIDUuMCI+DQo8bWV0YSBuYW1lPSJQcm9nSWQiIGNvbnRlbnQ9IkZyb250UGFnZS5F +ZGl0b3IuRG9jdW1lbnQiPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50 +PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9YmlnNSI+DQo8dGl0bGU+s2+sT6llsFWl0bFNt368c6dppL2l +caVOtW+kxaq9sbWmXqtItUyqa7G1pqwgy+c8L3RpdGxlPg0KPC9oZWFkPg0KDQo8Ym9keT4NCg0K +PHAgc3R5bGU9Im1hcmdpbi10b3A6IDBweDsgbWFyZ2luLWJvdHRvbTogMHB4Ij48Zm9udCBjb2xv +cj0iIzgwODA4MCI+DQqzb6xPqWWwVaXRsU23frxzp2mkvaVxpU61b6TFqr2xtaZeq0i1TKprsbWm +rCDL5yB+ICE8L2ZvbnQ+PC9wPg0KPGhyIFNJWkU9IjEiPg0KPGRpdiBhbGlnbj0iY2VudGVyIj4N +CiAgPGNlbnRlcj4NCiAgPHRhYmxlIHN0eWxlPSJib3JkZXI6IDFweCBkb3R0ZWQgI0ZGMDAwMDsg +OyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2UiIGhlaWdodD0iMzY1IiBjZWxsU3BhY2luZz0iMCIg +Y2VsbFBhZGRpbmc9IjAiIHdpZHRoPSI2MDQiIGJvcmRlcj0iMCIgYm9yZGVyY29sb3JsaWdodD0i +IzAwODAwMCIgYm9yZGVyY29sb3I9IiMxMTExMTEiPg0KICAgIDx0cj4NCiAgICAgIDx0ZCB2QWxp +Z249ImNlbnRlciIgYWxpZ249Im1pZGRsZSIgd2lkdGg9IjU5OCIgYmdDb2xvcj0iI0ZGRkYwMCIg +aGVpZ2h0PSIzNjUiPg0KICAgICAgPHAgYWxpZ249ImNlbnRlciI+oUA8L3A+DQogICAgICA8cCBh +bGlnbj0iY2VudGVyIj48Zm9udCBmYWNlPSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjMDAwMEZG +Ij6mbqpCpM2w2iE8L2ZvbnQ+PC9wPg0KICAgICAgPHAgYWxpZ249ImNlbnRlciI+PGZvbnQgZmFj +ZT0ivNC3osXpIiBzaXplPSI0IiBjb2xvcj0iIzAwMDBGRiI+DQogICAgICCzXKZopEiv4KRPqFOm +s6Txp0GmbiymXaywtHi0pKRGrsm+9zwvZm9udD48L3A+DQogICAgICA8cCBhbGlnbj0iY2VudGVy +Ij48Zm9udCBmYWNlPSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjMDAwMEZGIj6p0qVIpGq1b6dR +passs9C3fq1QtEksPC9mb250PjwvcD4NCiAgICAgIDxwIGFsaWduPSJjZW50ZXIiPjxmb250IGZh +Y2U9IrzQt6LF6SIgc2l6ZT0iNCIgY29sb3I9IiMwMDAwRkYiPrNcpmg8L2ZvbnQ+PGZvbnQgZmFj +ZT0ivNC3osXpIiBjb2xvcj0iI0ZGMDAwMCIgc2l6ZT0iNiI+vve3fDwvZm9udD48Zm9udCBmYWNl +PSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjMDAwMEZGIj6lbqr5rsksqbmpuaV1PC9mb250Pjxm +b250IGZhY2U9IrzQt6LF6SIgY29sb3I9IiNGRjAwRkYiIHNpemU9IjYiPqazM6ztxMEhPC9mb250 +PjwvcD4NCiAgICAgIDxwIGFsaWduPSJjZW50ZXIiPjxmb250IGZhY2U9IrzQt6LF6SIgc2l6ZT0i +NCIgY29sb3I9IiMwMDAwRkYiPrROpl2ssCZxdW90OzwvZm9udD48Zm9udCBmYWNlPSK80Leixeki +IGNvbG9yPSIjMDAwMEZGIiBzaXplPSI1Ij6ko6XMpN8mcXVvdDs8L2ZvbnQ+PGZvbnQgZmFjZT0i +vNC3osXpIiBzaXplPSI0IiBjb2xvcj0iIzAwMDBGRiI+s3m0TrNcpmikSKZis2+4zKaopVw8L2Zv +bnQ+PC9wPg0KICAgICAgPHAgYWxpZ249ImNlbnRlciI+PGZvbnQgZmFjZT0ivNC3osXpIiBzaXpl +PSI0IiBjb2xvcj0iIzAwMDBGRiI+s8yxTbd+qrq5zraku7K+ybF6PC9mb250PjwvcD4NCiAgICAg +IDxwIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly92aWMuaDhoLmNvbS50dy8iPg0KICAg +ICAgPGZvbnQgc2l6ZT0iNiIgZmFjZT0ivNC3osXpIiBjb2xvcj0iI0ZGMDAwMCI+MrhVpLi26qRA +rdOkcKbRwfOqurnaPC9mb250PjwvYT48L3A+DQogICAgICA8cCBhbGlnbj0iY2VudGVyIj4yMKTA +xMGs3cC0s2+t0773t3wsp0G0TqxPptukdqq6pUSkSCGvrLF6pm65QjwvcD4NCiAgICAgIDxwPjxm +b250IGNvbG9yPSIjZmYwMGZmIj48YSBocmVmPSJodHRwOi8vdmljLmg4aC5jb20udHcvIj4NCiAg +ICAgIGh0dHA6Ly92aWMuaDhoLmNvbS50dzwvYT48L2ZvbnQ+PHA+PGZvbnQgY29sb3I9IiNGRjAw +MDAiPg0KICAgICAgPHNwYW4gbGFuZz0iZW4tdXMiPjxmb250IHNpemU9IjciPnBzOjwvZm9udD48 +L3NwYW4+t1G2aaRAqEKqvrlEpnCm86ZirmG7tMNQpc669Lj0wcikar/6LKVpPC9mb250Pjxmb250 +IHNpemU9IjQiIGNvbG9yPSIjMDAwMEZGIj6nS7ZPs/imV7r0uPSvU7BWPC9mb250PjxwPg0KICAg +ICAgPGZvbnQgY29sb3I9IiNGRjAwMDAiPqZwqkesebZxuUywqqzdpKOo7L11pFe8dqT5LKVpr8Go ++qdLtk+z0Ld+pfq60DwvZm9udD48Zm9udCBjb2xvcj0iIzAwMDBGRiI+KL3QpmKtuq22r2SkValt +ple5cbjcpu2nfSk8L2ZvbnQ+PHA+oUA8cD4NCiAgICAgIKFAPHA+oUA8cD6hQDwvdGQ+DQogICAg +PC90cj4NCiAgPC90YWJsZT4NCiAgPC9jZW50ZXI+DQo8L2Rpdj4NCjxociBTSVpFPSIxIj4NCjxw +IHN0eWxlPSJtYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1ib3R0b206IDBweCIgYWxpZ249ImNlbnRl +ciI+DQo8Zm9udCBjb2xvcj0iI2ZmMDAwMCI+pnCms6W0wlq90KijvcyhQaSjt1GmQaasqOymuatI +vdCr9iZuYnNwOyAtJmd0OyZuYnNwOyAoPGEgaHJlZj0iaHR0cDovL3gtbWFpbC5oOGguY29tLnR3 +IiB0YXJnZXQ9Il9ibGFuayI+qdqmrLxzp2k8L2E+KTwvZm9udD48L3A+DQoNCjwvYm9keT4NCg0K +PC9odG1sPg== + + +------=_NextPart_vXklypZzzDWWhOFZ5e1rZAA-- +------=_NextPart_vXklypZzzDWWhOFZ5e1rZ-- + + + + diff --git a/Ch3/datasets/spam/spam/00294.df27a988d82cc82296e33e6d727ac47e b/Ch3/datasets/spam/spam/00294.df27a988d82cc82296e33e6d727ac47e new file mode 100644 index 000000000..01ce591cf --- /dev/null +++ b/Ch3/datasets/spam/spam/00294.df27a988d82cc82296e33e6d727ac47e @@ -0,0 +1,85 @@ +From wendy_obrien@hotmail.com Fri Sep 13 20:45:56 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 53BB516F16 + for ; Fri, 13 Sep 2002 20:45:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 13 Sep 2002 20:45:55 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8DJbhC32274 for + ; Fri, 13 Sep 2002 20:37:43 +0100 +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) by + webnote.net (8.9.3/8.9.3) with ESMTP id UAA16161 for ; + Fri, 13 Sep 2002 20:38:09 +0100 +From: wendy_obrien@hotmail.com +Received: from hotmail.com (unknown [210.179.221.253]) by smtp.easydns.com + (Postfix) with SMTP id 8261230672 for ; Fri, + 13 Sep 2002 15:38:05 -0400 (EDT) +Reply-To: +Message-Id: <014b71c57e5b$1458c7b4$7eb62be7@ypyltg> +To: +Subject: Poker for money againts real players +Date: Sat, 14 Sep 2002 02:35:15 -0700 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal +Content-Transfer-Encoding: 8bit + +Get your favorite Poker action at http://www.multiplayerpoker.net + +Play against real people from around the world for real money or just +for fun. Access one of the busiest poker rooms online. We've dealt +over 8 million hands! Experience the best poker software available +today featuring world class graphics, true random shuffling algorithms, +and 24x7 customer service. We've got a great selection of poker games +for you to play such as: + +Hold'em, Omaha +Omaha Hi/Lo +7 Card Stud +7 Card Stud Hi/Lo +5 Card Stud +Poker tournaments + +Sign up today and start playing with new & old friends...download our free +software now at http://www.MultiPlayerPoker.net + +Current Promotion: + · $50 Deposit Bonus! - 100% bonus! + · Daily High Hand - $250 Daily. + · Progressive Bad Beat Jackpot - $2,000.00 minimum with $100.00 added +daily. + · Tournaments - Multiplayer shootouts. + + + + + + + + + + + + + + + + +wish not to received any further e-mail from us please click +http://www.centralremovalservice.com/cgi-bin/poker-remove.cgi +(C4-ss2)3492QGau9-441Wmen129l19 + + + + + + +4486eyRl1-291l12 + + diff --git a/Ch3/datasets/spam/spam/00295.b028688ce4ea3693f4ed591b8ca3f72e b/Ch3/datasets/spam/spam/00295.b028688ce4ea3693f4ed591b8ca3f72e new file mode 100644 index 000000000..976ba91d1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00295.b028688ce4ea3693f4ed591b8ca3f72e @@ -0,0 +1,78 @@ +From farwood944@awod.com Sat Sep 14 16:20:38 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0081516F03 + for ; Sat, 14 Sep 2002 16:20:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 14 Sep 2002 16:20:36 +0100 (IST) +Received: from jaxdev3.ISF2000 ([199.227.157.30]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8DME7C04722 for ; + Fri, 13 Sep 2002 23:14:07 +0100 +Message-Id: <00000c1e285f$00004617$000010fb@blomand.net> +To: +From: "Dr. Plewt" +Subject: Information for you +Date: Fri, 13 Sep 2002 18:10:58 -1600 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +

    +< + + + + +
    +

    + GET HIGH...LEGALLY! +

    +

    + IT REALLY WORKS!
    + PASSES ALL DRUG TESTS!
    + EXTREMELY POTENT!
    +

    + CLICK HERE= + for more + info on Salvia Divinorum +

    + CLICK HERE f= +or SALVIA + 5X EXTRACT!
    + WARNING...VERY POTENT!
    +

    + CLICK HERE = +for SALVIA + 13X. The most POTENT, LEGAL, SMOKABLE herb on the planet! 13 tim= +es the + power of Salvia Divinorum!
    + WARNING...EXTREMELY POTENT!
    +

    +

    +
    + Removal Information:
    + We are strongly against sending unsolicited emails to those who do n= +ot wish + to receive our special mailings. You have opted in to one or more of= + our + affiliate sites requesting to be notified of any special offers we m= +ay run + from time to time. This is NOT unsolicited email. If you do not wish= + to receive + further mailings, please + click here t= +o be removed + from the list. Please accept our apologies if you have been sent= + this + email in error. We honor all removal requests within 24 hours.

    + + + + + diff --git a/Ch3/datasets/spam/spam/00296.0087354f4bb7c4e756124632a4a7e80a b/Ch3/datasets/spam/spam/00296.0087354f4bb7c4e756124632a4a7e80a new file mode 100644 index 000000000..2faeae01d --- /dev/null +++ b/Ch3/datasets/spam/spam/00296.0087354f4bb7c4e756124632a4a7e80a @@ -0,0 +1,65 @@ +From rye5@iafrica.com Sat Sep 14 16:20:45 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id B85FD16F03 + for ; Sat, 14 Sep 2002 16:20:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 14 Sep 2002 16:20:42 +0100 (IST) +Received: from freemail.nx.cninfo.net (freemail.nx.cninfo.net + [202.100.100.171]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8DMX8C05301 for ; Fri, 13 Sep 2002 23:33:09 +0100 +Message-Id: <200209132233.g8DMX8C05301@dogma.slashnull.org> +Received: from 68.17.46.205([217.125.101.38]) by + freemail.nx.cninfo.net(JetMail 2.5.3.0) with SMTP id zzzza3d8281b2; + Fri, 13 Sep 2002 22:33:22 -0000 +To: +From: "mary" +Subject: Best product for 2002 +Date: Fri, 13 Sep 2002 18:34:51 -1600 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + untitled + + + + +

    Copy DVD Mov= +ies?
    +

    +
    Yes! Copy and burn your own DVD +movies and video with a CD-R Drive.
    +

    +
    * Order by September 21, = +2002, and receive the following Free Gifts! + +1. "Free DVD Movie of your choice ($20.00 Value) +2. Cell Phone Battery Booster ($19.95 Value) + + +Own all the DVD's you've always wanted +and start burning today! +.

    + +


    +
    Click Here Now! + + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00297.3350c2dbbb0272c27b2c7773d7012356 b/Ch3/datasets/spam/spam/00297.3350c2dbbb0272c27b2c7773d7012356 new file mode 100644 index 000000000..1504374d7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00297.3350c2dbbb0272c27b2c7773d7012356 @@ -0,0 +1,65 @@ +From /aimcque/zzzzail.rcv/3/jma3d8281b2@freemail.nx.cninfo.net Sat Sep 14 16:20:56 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 55F0716F03 + for ; Sat, 14 Sep 2002 16:20:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 14 Sep 2002 16:20:53 +0100 (IST) +Received: from freemail.nx.cninfo.net (freemail.nx.cninfo.net + [202.100.100.171]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8DMgqC05710 for ; Fri, 13 Sep 2002 23:42:53 +0100 +Message-Id: <200209132242.g8DMgqC05710@dogma.slashnull.org> +Received: from 68.17.46.205([217.125.101.38]) by + freemail.nx.cninfo.net(JetMail 2.5.3.0) with SMTP id zzzza3d8281b2; + Fri, 13 Sep 2002 22:33:22 -0000 +To: +From: "mary" +Subject: Best product for 2002 +Date: Fri, 13 Sep 2002 18:34:51 -1600 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + untitled + + + + +

    Copy DVD Mov= +ies?
    +

    +
    Yes! Copy and burn your own DVD +movies and video with a CD-R Drive.
    +

    +
    * Order by September 21, = +2002, and receive the following Free Gifts! + +1. "Free DVD Movie of your choice ($20.00 Value) +2. Cell Phone Battery Booster ($19.95 Value) + + +Own all the DVD's you've always wanted +and start burning today! +.

    + +


    +
    Click Here Now! + + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00298.90b548a0816ca0783f012bb9c69166cc b/Ch3/datasets/spam/spam/00298.90b548a0816ca0783f012bb9c69166cc new file mode 100644 index 000000000..676928de1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00298.90b548a0816ca0783f012bb9c69166cc @@ -0,0 +1,311 @@ +From frln@insiq.us Sat Sep 14 16:21:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 51D9B16F03 + for ; Sat, 14 Sep 2002 16:21:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 14 Sep 2002 16:21:01 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g8DMvTC06340 for ; Fri, 13 Sep 2002 23:57:31 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Fri, 13 Sep 2002 18:58:44 -0400 +Subject: 6.50% Annuity w/4.05% Lifetime Bailout +To: +Date: Fri, 13 Sep 2002 18:58:44 -0400 +From: "IQ - Fairlane" +Message-Id: <1a21e701c25b79$1c778300$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJbZLDJOs7PbWfpS6W0S5LV/dfyTw== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 13 Sep 2002 22:58:44.0859 (UTC) FILETIME=[1C967CB0:01C25B79] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_183F71_01C25B43.29BE9ED0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_183F71_01C25B43.29BE9ED0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + Save annuity clients from sinking renewal rates! + Save annuity clients from sinking renewal rates! Save annuity +clients from sinking renewal rates! + + No surrender charges if the annuity renews below the bailout! + + 4.05% Lifetime** Bailout + 6.50%* Year 1(1) 4.50%* Base Rate + 10% Commission + 10% Penalty-Free Withdrawals + Rated "A (Excellent)" by A.M. Best (for financial strength) + + 10 Year Surrender Charge + Not a 2 Tiered Annuity -- No Annuitization Required +Call today for more information on the Loyal Integritysm Vision 10 +annuity! + 800-327-1460 +? or ? + +Please fill out the form below for more information +Name: +E-mail: +Phone: +City: State: + + + +Fairlane Financial Corporation + + +*The contract's base interest rate must fall more than 45 basis points +below the initial base interest rate (effective 9/3/02) before the +bailout provision may be exercised. This feature is subject to change on +future contracts. +**Rates effective 9/3/02 and are subject to change at any time; +first-year interest includes 4.50% base interest rate and 2.00% +additional first-year interest. +***Ages 0-80; Ages 81-90: 7% commission. +Loyal Integrity(sm) Vision 10 annuity issued by Loyal American Life +Insurance Company(sm), Contract Forms PCQXA02NW4 and PCBXA02NW4. Certain +limitations and exclusions apply. Product not available in all states. +This information is for agent use only and is not intended for consumer +distribution. + +LAC2020269 + +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.Insuranceiq.com/optout + + +Legal Notice + +------=_NextPart_000_183F71_01C25B43.29BE9ED0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +6.50% Annuity w/4.05% Lifetime Bailout + + + +=20 + + =20 + + + + + + =20 + + +
    =20 + + =20 + + + + + + + + + +
    3D"Save
    3D"Save3D"Save
    +
    3D"No
    +
    +
    + + =20 + + + =20 + + + =20 + + + =20 + + +
    3D"4.05%
    + 3D"6.50%*3D"4.50%*
    + 3D"10%
    =20 + + =20 + + + + =20 + + + + =20 + + + +
    10% Penalty-Free = +Withdrawals
    Rated "A = +(Excellent)" by A.M. Best (for financial strength)
    10 Year Surrender = +Charge
    +
    3D"Not
    + Call today for more information on the = +Loyal Integritysm Vision 10 annuity!
    + 3D"800-327-1460"
    + — or —

    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please = +fill out the form below for more information
    Name:
    E-mail:
    Phone:
    City:State:
      + + + +
    +

    + 3D"Fairlane
    +

    *The contract's base = +interest rate=20 + must fall more than 45 basis points below the initial base = +interest=20 + rate (effective 9/3/02) before the bailout provision may = +be exercised.=20 + This feature is subject to change on future contracts.
    + **Rates effective 9/3/02 and are subject to change at any = +time;=20 + first-year interest includes 4.50% base interest rate and = +2.00%=20 + additional first-year interest.
    + ***Ages 0-80; Ages 81-90: 7% = +commission.
    + Loyal Integrity(sm) Vision 10 annuity issued by Loyal = +American Life=20 + Insurance Company(sm), Contract Forms PCQXA02NW4 and = +PCBXA02NW4.=20 + Certain limitations and exclusions apply. Product not = +available=20 + in all states. This information is for agent use only and = +is not=20 + intended for consumer distribution.

    +

    LAC2020269

    +
    +
    =20 +

    We = +don't want anyone=20 + to receive our mailings who does not wish to. This is = +professional communication=20 + sent to insurance professionals. To be removed from this mailing = +list,=20 + DO NOT REPLY to this message. Instead, go here: =20 + http://www.Insuranceiq.com/optout

    +
    +

    + Legal Notice=20 +
    + + + + +------=_NextPart_000_183F71_01C25B43.29BE9ED0-- + + diff --git a/Ch3/datasets/spam/spam/00299.f786faed64bef7134e52fafa17ea861f b/Ch3/datasets/spam/spam/00299.f786faed64bef7134e52fafa17ea861f new file mode 100644 index 000000000..dee237282 --- /dev/null +++ b/Ch3/datasets/spam/spam/00299.f786faed64bef7134e52fafa17ea861f @@ -0,0 +1,55 @@ +From knj704114b32@hotmail.com Sat Sep 14 16:21:06 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 7463E16F16 + for ; Sat, 14 Sep 2002 16:21:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 14 Sep 2002 16:21:05 +0100 (IST) +Received: from hotmail.com ([200.29.167.41]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g8E4cWC23015 for ; + Sat, 14 Sep 2002 05:38:33 +0100 +Received: from unknown (196.35.136.40) by anther.webhostingtotalk.com with + NNFMP; Sat, 14 Sep 2002 13:42:32 -1000 +Received: from unknown (90.12.32.47) by n7.groups.huyahoo.com with esmtp; + 14 Sep 2002 03:40:31 +0400 +Received: from unknown (203.28.17.141) by rly-yk05.pesdets.com with local; + 14 Sep 2002 07:38:30 +0200 +Received: from unknown (HELO hd.ressort.net) (161.186.12.179) by + hd.ressort.net with QMQP; Sat, 14 Sep 2002 09:36:29 -0500 +Reply-To: +Message-Id: <031c16b24b3e$3426a3b1$2dd05ae2@hfbrnu> +From: +To: knj70@hotmail.com +Subject: Never pay for porn again, YOUR FREE PAYSITE is here! 6277zwyL0-111bAgY1254IhZJ0-37-27 +Date: Sat, 14 Sep 2002 11:22:43 -0700 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00A3_00E67D7E.B8560D80" + +------=_NextPart_000_00A3_00E67D7E.B8560D80 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +MzY3MmN4SmsyLTQ3MXJMWUg0ODU2ZEN3bDktMzU3a0N2eTQzMjNzQ3ZBOS03 +MTF5U3pSODJsNTANCjxicj4NCjxmb250IGZhY2U9YXJpYWwgc2l6ZT01PlRo +ZSBXb3JsZCdzIGZpcnN0IEFCU09MVVRFTFkgRlJFRSBhZHVsdCBzdXBlcnNp +dGUgaXMgaGVyZSEgTm8gU3RyaW5ncyBBdHRhY2hlZC4gVGhlIGhvdHRlc3Qg +dGVlbiBwaWN0b3JpYWxzLCBsaXZlIHNob3dzLCBtb3ZpZXMsIGFuZCBtb3Jl +IGFsd2F5cyBmcmVlISA8YSBocmVmPSJodHRwOi8vbXlmcmVlcGF5c2l0ZS41 +eHgubmV0Ij5DbGljayBoZXJlIC0gYWxsIHlvdSBuZWVkIGlzIGFuIGVtYWls +IGFkZHJlc3MgdG8gam9pbjwvYT4hDQo8YnI+PGJyPjxicj4NCjxmb250IGZh +Y2U9YXJpYWwgc2l6ZT0yPlRoaXMgaXMgYSBvbmUgdGltZSB0YXJnZXRlZCBt +YWlsaW5nLCA8L2ZvbnQ+PC9mb250Pjxmb250IGZhY2U9ImFyaWFsIiBzaXpl +PSIyIj5idXQNCnlvdSBtYXkgcmVtb3ZlIHlvdXJzZWxmIGJ5IHJlcGx5aW5n +IHRvIHRoaXMgZW1haWwgd2l0aCAmcXVvdDtSRU1PVkUmcXVvdDsgYXMgdGhl +DQpzdWJqZWN0ITxmb250IGZhY2U9YXJpYWwgc2l6ZT01Pg0KPGJyPjxicj48 +L2ZvbnQ+DQo1MTgwcWdzZjYtMTY3eHpLWjI0NTRQRUN1OS03MjF3emJwODg0 +MGpsMzc= + + diff --git a/Ch3/datasets/spam/spam/00300.834f370a21ca4f1774d5724b5443411c b/Ch3/datasets/spam/spam/00300.834f370a21ca4f1774d5724b5443411c new file mode 100644 index 000000000..ccc5ae67f --- /dev/null +++ b/Ch3/datasets/spam/spam/00300.834f370a21ca4f1774d5724b5443411c @@ -0,0 +1,71 @@ +From belakosaxxxmeb13mxy@aol.com Sat Sep 14 16:21:08 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 40BE416F03 + for ; Sat, 14 Sep 2002 16:21:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 14 Sep 2002 16:21:07 +0100 (IST) +Received: from mta7.pltn13.pbi.net (mta7.pltn13.pbi.net [64.164.98.8]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8ECPJC03548 for + ; Sat, 14 Sep 2002 13:25:19 +0100 +Received: from 210.39.3.50 ([63.195.8.214]) by mta7.pltn13.pbi.net + (iPlanet Messaging Server 5.1 (built May 7 2001)) with SMTP id + <0H2F00MLUGZJUE@mta7.pltn13.pbi.net> for webmaster@efi.ie; Sat, + 14 Sep 2002 05:22:50 -0700 (PDT) +Date: Sat, 14 Sep 2002 08:19:51 -0400 +From: belakosaxxxmeb13mxy@aol.com +Subject: eBay PowerSeller Secrets 6826 +To: Katherine@nodots-daemon.zzzzason.org +Reply-To: belakosaxxxmeb13mxy@aol.com +Message-Id: <00003d963754$00005924$00001aaa@210.39.240.216> +MIME-Version: 1.0 +Content-Transfer-Encoding: 7BIT +X-Priority: 3 +X-Msmail-Priority: Normal +Content-Type: text/html; charset=iso-8859-1 + + + + + + + + + + +
    +

    Fortunes are literally being made in this great new + marketplace!

    +

    Over $9 Billion in merchandise + was sold on eBay in 2001 by people just like you - right from + their homes!

    +

    Now you too can learn the secrets of successful selling + on eBay and make a staggering income from the comfort + of your own home. If you are motivated, capable of having + an open mind, and can follow simple directions, then visit + us here.

    +

    If you are not interested in future offers go + here.

    +
    +

     

    +

     

    +

     

    +

     

    + + + +

    + + + + + +

    + + + + + diff --git a/Ch3/datasets/spam/spam/00301.68fe7955b96d085360ca916289e8e716 b/Ch3/datasets/spam/spam/00301.68fe7955b96d085360ca916289e8e716 new file mode 100644 index 000000000..7e053dc32 --- /dev/null +++ b/Ch3/datasets/spam/spam/00301.68fe7955b96d085360ca916289e8e716 @@ -0,0 +1,91 @@ +From social-admin@linux.ie Sat Sep 14 20:04:54 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id DA41016F03 + for ; Sat, 14 Sep 2002 20:04:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 14 Sep 2002 20:04:53 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8EJ3uC13566 for + ; Sat, 14 Sep 2002 20:03:56 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id UAA01476; Sat, 14 Sep 2002 20:03:58 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from relay.dub-t3-1.nwcgroup.com + (postfix@relay.dub-t3-1.nwcgroup.com [195.129.80.16]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id UAA01443 for ; Sat, + 14 Sep 2002 20:03:44 +0100 +Received: from 217.167.180.65 (unknown [61.143.3.130]) by + relay.dub-t3-1.nwcgroup.com (Postfix) with SMTP id 106247003F for + ; Sat, 14 Sep 2002 20:03:39 +0100 (IST) +Received: from unknown (52.127.142.42) by rly-xl04.mx.aol.com with smtp; + Sep, 14 2002 19:53:57 +1200 +Received: from unknown (6.61.10.17) by rly-xr02.mx.aol.com with NNFMP; + Sep, 14 2002 18:56:46 +0300 +Received: from 157.139.128.128 ([157.139.128.128]) by mta6.snfc21.pbi.net + with asmtp; Sep, 14 2002 18:05:59 -0100 +Received: from 167.90.49.93 ([167.90.49.93]) by + mailout2-eri1.midsouth.rr.com with esmtp; Sep, 14 2002 17:11:57 +0400 +From: gvl Designer Replicas +To: social@linux.ie +Cc: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Sat, 14 Sep 2002 20:13:12 +0100 +X-Mailer: eGroups Message Poster +Message-Id: <20020914190339.106247003F@relay.dub-t3-1.nwcgroup.com> +Subject: [ILUG-Social] Best Replica Goods - Best Prices +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group social events +X-Beenthere: social@linux.ie + +*** FREE BONUS OFFER - SEE BELOW *** + +We can supply TOP QUALITY, VIRTUALLY IDENTICAL REPLICAS of just about anything - from watches to wallets, from lighters to lingerie, clothing, accessories, even electrical goods. All your favorite designer labels reproduced at a fraction of the price. + +All major Credit Cards accepted. Worldwide certified shipping. Quality guaranteed. + +We are currently building our catalog so let us know that you want to receive notification when our on-line catalog is published later this month to qualify for a GREAT FREE BONUS OFFER. + +*** FREE BONUS: Register NOW for our catalog and receive one pair of designer REPLICA sunglasses (our regular price $15) & check out the quality of our goods FREE OF CHARGE *** + +For more information email: replicas@fastnetspain.net + +Register NOW to be sure you don't miss out !!! + + + + + + + + +To remove from future mailings email: noreplicas@fastnetspain.net + +Register NOW to be sure you don't miss out !!! + + + + + + + + + + + + + + +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00302.544366fa4cd0f5d210dd8443a1c2c95a b/Ch3/datasets/spam/spam/00302.544366fa4cd0f5d210dd8443a1c2c95a new file mode 100644 index 000000000..addfdec6f --- /dev/null +++ b/Ch3/datasets/spam/spam/00302.544366fa4cd0f5d210dd8443a1c2c95a @@ -0,0 +1,148 @@ +From q10bvq9lvq1@prodigy.net Sun Sep 15 12:21:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id AF32316F03 + for ; Sun, 15 Sep 2002 12:21:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 15 Sep 2002 12:21:56 +0100 (IST) +Received: from internet_pad.www.portdakar.sn ([207.50.235.155]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8EJkgC14775 for + ; Sat, 14 Sep 2002 20:46:43 +0100 +Received: from nynej.prodigy.net (65.215.21.66 [65.215.21.66]) by + internet_pad.www.portdakar.sn with SMTP (Microsoft Exchange Internet Mail + Service Version 5.5.1960.3) id S5G7R0A9; Sat, 14 Sep 2002 11:39:47 -0000 +From: "Albert Linda" +To: u9j6setr@prodigy.net +Subject: Have tax problems? +Reply-To: vernajasonRr7vy@excite.com +X-Mailer: Microsoft Outlook CWS, Build 9.0.2416 (9.0.2910.0) +Message-Id: +Date: 2002/09/14 Sat 02:29:32 CDT +Content-Type: text/html; charset=ISO-8859-1 + + + +
    + +Have tax problems? Do you owe the IRS money? If your debt is +$5,000 US or more, we can help! Our licensed agents can help +you with both past and present tax debt. We have direct contacts +with the IRS, so once your application is processed we can help +you immediately without further delay.

    + +Also, as our client we can offer you other services and help with +other problems. Our nationally recognized tax attorneys, +paralegals, legal assistants and licensed enrolled agents can +help you with:

    + +- Tax Preparation
    +- Audits
    +- Seizures
    +- Bank Levies
    +- Asset Protection
    +- Audit Reconsideration
    +- Trust Fund Penalty Defense
    +- Penalty Appeals
    +- Penalty Abatement
    +- Wage Garnishments
    +.. and more!

    + +To receive FREE information on tax help, please fill out the +form below and return it to us. There are no obligations, and +supplied information is kept strictly confidential. Please note +that this offer only applies to US citizens. Application +processing may take up to 10 business days.

    + +Note: For debt size please also include any penalties or interest


    + + +
    + + + + + + + + + + + + + +
    Full Name   
    State    + +
    Phone Number   
    Time to Contact   
    Tax Debt Size   
    E-Mail   
     


    + +
    + +Thank you for your time!



    + + + +Note: If you wish to receive no further advertisements regarding +this matter or any other, please reply to this e-mail with the +word REMOVE in the subject. +

    + +
    + + +q10bvq9lvq1 + + diff --git a/Ch3/datasets/spam/spam/00303.22239f1393297a691eb5df3dfe7a5001 b/Ch3/datasets/spam/spam/00303.22239f1393297a691eb5df3dfe7a5001 new file mode 100644 index 000000000..a38bfeb69 --- /dev/null +++ b/Ch3/datasets/spam/spam/00303.22239f1393297a691eb5df3dfe7a5001 @@ -0,0 +1,66 @@ +From acy3154a17@teleweb.at Sun Sep 15 12:22:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 164E516F03 + for ; Sun, 15 Sep 2002 12:21:59 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 15 Sep 2002 12:21:59 +0100 (IST) +Received: from teleweb.at (200-207-55-243.dsl.telesp.net.br + [200.207.55.243]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8F0foC26875 for ; Sun, 15 Sep 2002 01:41:52 +0100 +Received: from unknown (HELO mta21.bigpong.com) (154.156.51.77) by + pet.vosni.net with SMTP; 15 Sep 2002 04:36:52 -0900 +Received: from unknown (15.222.127.32) by symail.kustanai.co.kr with smtp; + Sat, 14 Sep 2002 19:36:33 +1200 +Received: from unknown (181.217.164.102) by web.mail.halfeye.com with SMTP; + 15 Sep 2002 07:36:14 -0100 +Received: from 168.150.26.213 ([168.150.26.213]) by rly-xr02.nikavo.net + with local; Sun, 15 Sep 2002 06:35:55 -0600 +Reply-To: +Message-Id: <033c86b80b6a$4484d0c1$2ee65be0@yhuxjt> +From: +To: +Subject: Go get em gadgets of 2002 4497VLNz2--9 +Date: Sat, 14 Sep 2002 14:29:28 +1000 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00E4_17A73C2D.E7104E07" + +------=_NextPart_000_00E4_17A73C2D.E7104E07 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +SGVyZSdzIHRoZSBob3R0ZXN0IHRoaW5nIGluIERWRHMuIE5vdyB5b3UgY2Fu +IG1ha2UgYSBwZXJzb25hbCBiYWNrdXANCmNvcHkgb2YgYSBEVkQgcmlnaHQg +b250byBDRC1SLiAgT3VyICJIb3QiIG5ldyBzb2Z0d2FyZSBlYXNpbHkgdGFr +ZXMgeW91IHRocm91Z2gNCnRoZSBzdGVwcyB0byBtYWtlIGEgY29weSBvZiB5 +b3VyIG93biBEVkRzLg0KDQpOT1cgSU5DTFVERUQgRk9SIEZSRUUhIENvcHkg +UExBWVNUQVRJT04sIE1VU0lDL01QM3MgYW5kIGFsbCBTb2Z0d2FyZS4NCg0K +LSBTdGVwIGJ5IFN0ZXAgSW50ZXJhY3RpdmUgSW5zdHJ1Y3Rpb25zIA0KLSBB +bGwgU29mdHdhcmUgVG9vbHMgSW5jbHVkZWQgT24gQ0QgDQotIE5vIERWRCBC +dXJuZXIgUmVxdWlyZWQgDQotIEZSRUUgTGl2ZSBUZWNobmljYWwgU3VwcG9y +dCANCi0gMzAgRGF5IFJpc2sgRnJlZSBUcmlhbCBBdmFpbGFibGUgDQotIEZS +RUUgRHZkIE1vdmllIG9mIHlvdXIgY2hvaWNlIChMSU1JVEVEIFRJTUUgT0ZG +RVIhKQ0KDQpXZSBoYXZlIEFsbCB0aGUgc29mdHdhcmUgeW91IG5lZWQgdG8g +Q09QWSB5b3VyIG93biBEVkQgTW92aWVzLg0KDQpodHRwOi8vZHZkLnNwZWNp +YWxkaXNjb3VudHM0dS5jb20vDQorKysrKysrKysrKysrKysrKysrKysrKysr +KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr +KysrKysrDQpUaGlzIGVtYWlsIGhhcyBiZWVuIHNjcmVlbmVkIGFuZCBmaWx0 +ZXJlZCBieSBvdXIgaW4gaG91c2UgIiJPUFQtT1VUIiIgc3lzdGVtIGluIA0K +Y29tcGxpYW5jZSB3aXRoIHN0YXRlIGxhd3MuIElmIHlvdSB3aXNoIHRvICJP +UFQtT1VUIiBmcm9tIHRoaXMgbWFpbGluZyBhcyB3ZWxsIA0KYXMgdGhlIGxp +c3RzIG9mIHRob3VzYW5kcyAgb2Ygb3RoZXIgZW1haWwgcHJvdmlkZXJzIHBs +ZWFzZSB2aXNpdCAgDQoNCmh0dHA6Ly9kdmQuc3BlY2lhbGRpc2NvdW50czR1 +LmNvbS9vcHRvdXRkLmh0bWwNCisrKysrKysrKysrKysrKysrKysrKysrKysr +KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr +KysrKysNCg0KOTY1OXNoUGE1LTgyNUNob3k3NzMySUx2bzItODg5YWd1STEy +MjZTSmRNMS00NjllT1N6NDMyMlNwVXcyLWw1Nw0KNzQyNERhZ2w3LTA5NGZn +d3IwODk3Z1FPSDItbDI1 + + diff --git a/Ch3/datasets/spam/spam/00304.ed5fbfc3e6f2be662f29f43f172a1fb3 b/Ch3/datasets/spam/spam/00304.ed5fbfc3e6f2be662f29f43f172a1fb3 new file mode 100644 index 000000000..78f055ee3 --- /dev/null +++ b/Ch3/datasets/spam/spam/00304.ed5fbfc3e6f2be662f29f43f172a1fb3 @@ -0,0 +1,48 @@ +From iiu-admin@taint.org Sun Sep 15 12:22:02 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0A1D116F03 + for ; Sun, 15 Sep 2002 12:22:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 15 Sep 2002 12:22:01 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8F3D8C31212 for + ; Sun, 15 Sep 2002 04:13:08 +0100 +Received: from exchange.ntsec.gov.tw (exchange.ntsec.gov.tw + [203.71.62.101]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8F3CWC31202 for ; Sun, 15 Sep 2002 04:12:42 +0100 +Received: by exchange.ntsec.gov.tw with Internet Mail Service + (5.5.2650.21) id ; Sun, 15 Sep 2002 10:16:11 +0800 +Received: from wtpxj.lycos.com (61-221-55-129.HINET-IP.hinet.net + [61.221.55.129]) by exchange.ntsec.gov.tw with SMTP (Microsoft Exchange + Internet Mail Service Version 5.5.2650.21) id R9J9LS97; Sat, + 14 Sep 2002 23:58:19 +0800 +From: Marv Sean <78l95@geocities.com> +To: 81016h@geocities.com +Subject: Pics for you +X-Mailer: WEBmail 2.70 +Message-Id: +Date: 2002/09/14 Sat 13:06:03 GMT +Sender: iiu-owner@taint.org +Errors-To: iiu-owner@taint.org +X-Beenthere: iiu@iiu.taint.org +X-Mailman-Version: 2.0.10 +Precedence: bulk +List-Unsubscribe: , + +List-Id: Irish Internet Users +List-Post: +List-Help: +List-Subscribe: , + +List-Archive: +Content-Type: text/html; charset=ISO-8859-1 + + +
    GET FREE ACCESS TO XXX PORN!
    INSTANT ACCESS... 100% FREE HARDCORE



    Note: If you would would like to be removed from our list, please reply to this email with the word REMOVE as the subject
    + +78l95 + + diff --git a/Ch3/datasets/spam/spam/00305.f80c21904d6d4f6facd036450a588b0d b/Ch3/datasets/spam/spam/00305.f80c21904d6d4f6facd036450a588b0d new file mode 100644 index 000000000..57629d7ae --- /dev/null +++ b/Ch3/datasets/spam/spam/00305.f80c21904d6d4f6facd036450a588b0d @@ -0,0 +1,86 @@ +From ilug-admin@linux.ie Sat Sep 14 20:16:53 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E80A816F03 + for ; Sat, 14 Sep 2002 20:16:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 14 Sep 2002 20:16:52 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8EJ4lC13620 for + ; Sat, 14 Sep 2002 20:04:47 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id UAA01519; Sat, 14 Sep 2002 20:04:09 +0100 +Received: from 61.132.12.51 ([61.132.12.51]) by lugh.tuatha.org + (8.9.3/8.9.3) with SMTP id UAA01426 for ; Sat, + 14 Sep 2002 20:03:39 +0100 +Message-Id: <200209141903.UAA01426@lugh.tuatha.org> +X-Authentication-Warning: lugh.tuatha.org: Host [61.132.12.51] claimed to + be 61.132.12.51 +Received: from 36.185.61.158 ([36.185.61.158]) by f64.law4.hotmail.com + with QMQP; Sep, 14 2002 20:10:05 +0300 +Received: from anther.webhostingtalk.com ([88.58.121.118]) by + da001d2020.lax-ca.osd.concentric.net with QMQP; Sep, 14 2002 18:47:53 + -0700 +Received: from unknown (156.54.224.23) by a231242.upc-a.chello.nl with + local; Sep, 14 2002 18:03:45 -0300 +From: iqk Designer Replicas +To: ilug@linux.ie +Cc: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Sat, 14 Sep 2002 20:13:12 +0100 +X-Mailer: Microsoft Outlook Build 10.0.2627 +Subject: [ILUG] Best Replica Goods - Best Prices +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +*** FREE BONUS OFFER - SEE BELOW *** + +We can supply TOP QUALITY, VIRTUALLY IDENTICAL REPLICAS of just about anything - from watches to wallets, from lighters to lingerie, clothing, accessories, even electrical goods. All your favorite designer labels reproduced at a fraction of the price. + +All major Credit Cards accepted. Worldwide certified shipping. Quality guaranteed. + +We are currently building our catalog so let us know that you want to receive notification when our on-line catalog is published later this month to qualify for a GREAT FREE BONUS OFFER. + +*** FREE BONUS: Register NOW for our catalog and receive one pair of designer REPLICA sunglasses (our regular price $15) & check out the quality of our goods FREE OF CHARGE *** + +For more information email: replicas@fastnetspain.net + +Register NOW to be sure you don't miss out !!! + + + + + + + + +To remove from future mailings email: noreplicas@fastnetspain.net + +Register NOW to be sure you don't miss out !!! + + + + + + + + + + + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00306.729a42414b91e9b2bddf273c514c50d7 b/Ch3/datasets/spam/spam/00306.729a42414b91e9b2bddf273c514c50d7 new file mode 100644 index 000000000..2a99574fb --- /dev/null +++ b/Ch3/datasets/spam/spam/00306.729a42414b91e9b2bddf273c514c50d7 @@ -0,0 +1,154 @@ +From jzlin@bacalhau.com.br Mon Sep 16 00:11:02 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 56B3216F03 + for ; Mon, 16 Sep 2002 00:11:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 16 Sep 2002 00:11:00 +0100 (IST) +Received: from proxy.anaconda (200-168-125-33.dsl.telesp.net.br + [200.168.125.33]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8FE4hC18159 for ; Sun, 15 Sep 2002 15:04:44 +0100 +Received: from mail2.Valio.FI (200-204-142-49.dsl.telesp.net.br + [200.204.142.49]) by proxy.anaconda (8.11.4/linuxconf) with ESMTP id + g8FDmow12370; Sun, 15 Sep 2002 10:48:56 -0300 +Message-Id: <00003a3d5a35$0000554a$000038f1@orbis-3.ru> +To: +From: "Service Center" +Subject: Low cost quality conference calls +Date: Sun, 15 Sep 2002 06:55:37 -1900 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +Lowest Rate Services + + + +

    +

    + + + +
    Conferencing Made= + Easy
    +Only 18 Cents Per Minute!
    = +
    +

    (Including Long Distance!)= + +

    + + + + <= +/TABLE> +

    +

    +
  • No setup fees +
  • No contracts or monthly fees +
  • Call anytime, from anywhere, to anywhere +
  • Connects up to 100 Participants +
  • Simplicity in set up and administration +
  • Operator Help available 24/7
  • + + +
    T= +he Highest Quality Service For The Lowest Rate In The Industry!= +
    +

    + + + + = +
    Fill out the form be= +low to find out how you can lower your phone bill every month.
    +

    Required Input Field* +

    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Name*
    Web + Address
    Company + Name*
    + State*
    Business + Phone*
    Home + Phone
    Email + Address*
    Type of + Business
    +

    +

    +

    + + + +
    To be removed from this list, send an e-mail to remove@b= +2b-mail.net
    Type the word "remove" in the subject line. +
    .

    + + + diff --git a/Ch3/datasets/spam/spam/00307.7ed50c6d80c6e37c8cc1b132f4a19e4d b/Ch3/datasets/spam/spam/00307.7ed50c6d80c6e37c8cc1b132f4a19e4d new file mode 100644 index 000000000..e9299b1a2 --- /dev/null +++ b/Ch3/datasets/spam/spam/00307.7ed50c6d80c6e37c8cc1b132f4a19e4d @@ -0,0 +1,2449 @@ +From hB6rT8aL9tXArsQ@tcts1.seed.net.tw Mon Sep 16 00:11:46 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id A82EA16F03 + for ; Mon, 16 Sep 2002 00:11:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 16 Sep 2002 00:11:03 +0100 (IST) +Received: from voip (awork118134.netvigator.com [203.198.114.134]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g8FJE1C25757 for + ; Sun, 15 Sep 2002 20:14:02 +0100 +Date: Sun, 15 Sep 2002 20:14:02 +0100 +Received: from mail by tcts.seed.net.tw with SMTP id mcyMwcFt6DSYO0e4bs; + Mon, 16 Sep 2002 03:14:27 +0800 +Message-Id: +From: FreeIDD@dogma.slashnull.org +To: HONG.KONG.COMMERCIAL@dogma.slashnull.org, + HK010.TXT@dogma.slashnull.org, HK002.TXT@dogma.slashnull.org, + HK003.TXT@dogma.slashnull.org, HK004.TXT@dogma.slashnull.org, + HK005.TXT@dogma.slashnull.org, HK006.TXT@dogma.slashnull.org, + HK007.TXT@dogma.slashnull.org, HK008.TXT@dogma.slashnull.org, + HK009.TXT@dogma.slashnull.org, HK001.TXT@dogma.slashnull.org +Subject: =?big5?Q?=A7K=B6O=B5L=AD=AD=A6=B8=A5=F4=A5=B4=A4=A4=B4=E4=AA=F8=B3~=B9q=B8=DC?= +MIME-Version: 1.0 +X-Mailer: ZjVqnSBZyGWrtRK5M +X-Priority: 3 +X-Msmail-Priority: Normal +Content-Type: multipart/related; type="multipart/alternative"; boundary="----=_NextPart_7HZmySBWvSemNjin8Kg9Y" + +This is a multi-part message in MIME format. + +------=_NextPart_7HZmySBWvSemNjin8Kg9Y +Content-Type: multipart/alternative; + boundary="----=_NextPart_7HZmySBWvSemNjin8Kg9YAA" + + +------=_NextPart_7HZmySBWvSemNjin8Kg9YAA +Content-Type: text/html; + charset="big5" +Content-Transfer-Encoding: base64 + +PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiDQp4bWxuczpvPSJ1 +cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiDQp4bWxuczp3PSJ1cm46c2No +ZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIg0KeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn +L1RSL1JFQy1odG1sNDAiPg0KDQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBl +IGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1CaWc1Ij4NCjxtZXRhIG5hbWU9UHJvZ0lkIGNv +bnRlbnQ9V29yZC5Eb2N1bWVudD4NCjxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jv +c29mdCBXb3JkIDkiPg0KPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBX +b3JkIDkiPg0KPGxpbmsgcmVsPUZpbGUtTGlzdCBocmVmPSIuL01hc3NNYWlsLTE1MDlfZmlsZXMv +ZmlsZWxpc3QueG1sIj4NCjxsaW5rIHJlbD1FZGl0LVRpbWUtRGF0YSBocmVmPSIuL01hc3NNYWls +LTE1MDlfZmlsZXMvZWRpdGRhdGEubXNvIj4NCjwhLS1baWYgIW1zb10+DQo8c3R5bGU+DQp2XDoq +IHtiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTt9DQpvXDoqIHtiZWhhdmlvcjp1cmwoI2RlZmF1 +bHQjVk1MKTt9DQp3XDoqIHtiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTt9DQouc2hhcGUge2Jl +aGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpO30NCjwvc3R5bGU+DQo8IVtlbmRpZl0tLT4NCjx0aXRs +ZT6nS7ZPtUytraa4pfSltKSktOSq+LN+uXG43DwvdGl0bGU+DQo8IS0tW2lmIGd0ZSBtc28gOV0+ +PHhtbD4NCiA8bzpEb2N1bWVudFByb3BlcnRpZXM+DQogIDxvOkF1dGhvcj5BbmR5IENoYW48L286 +QXV0aG9yPg0KICA8bzpMYXN0QXV0aG9yPkFuZHkgQ2hhbjwvbzpMYXN0QXV0aG9yPg0KICA8bzpS +ZXZpc2lvbj4xPC9vOlJldmlzaW9uPg0KICA8bzpUb3RhbFRpbWU+MTwvbzpUb3RhbFRpbWU+DQog +IDxvOkNyZWF0ZWQ+MjAwMi0wOS0xNFQxMDoyNTowMFo8L286Q3JlYXRlZD4NCiAgPG86TGFzdFNh +dmVkPjIwMDItMDktMTRUMTA6MjY6MDBaPC9vOkxhc3RTYXZlZD4NCiAgPG86UGFnZXM+MTwvbzpQ +YWdlcz4NCiAgPG86Q29tcGFueT5aaXBUZXggKEguSy4pIExpbWl0ZWQ8L286Q29tcGFueT4NCiAg +PG86TGluZXM+MTwvbzpMaW5lcz4NCiAgPG86UGFyYWdyYXBocz4xPC9vOlBhcmFncmFwaHM+DQog +IDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+DQogPC9vOkRvY3VtZW50UHJvcGVydGllcz4N +CjwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KIDx3OldvcmREb2N1 +bWVudD4NCiAgPHc6Q29tcGF0aWJpbGl0eT4NCiAgIDx3OlVzZUZFTGF5b3V0Lz4NCiAgPC93OkNv +bXBhdGliaWxpdHk+DQogPC93OldvcmREb2N1bWVudD4NCjwveG1sPjwhW2VuZGlmXS0tPg0KPHN0 +eWxlPg0KPCEtLQ0KIC8qIFN0eWxlIERlZmluaXRpb25zICovDQpwLk1zb05vcm1hbCwgbGkuTXNv +Tm9ybWFsLCBkaXYuTXNvTm9ybWFsDQoJe21zby1zdHlsZS1wYXJlbnQ6IiI7DQoJbWFyZ2luOjBp +bjsNCgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQoJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFu +Ow0KCWZvbnQtc2l6ZToxMi4wcHQ7DQoJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQoJ +bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQ0KQHBhZ2UgU2VjdGlv +bjENCgl7c2l6ZTo4LjVpbiAxMS4waW47DQoJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1 +aW47DQoJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsNCgltc28tZm9vdGVyLW1hcmdpbjouNWluOw0K +CW1zby1wYXBlci1zb3VyY2U6MDt9DQpkaXYuU2VjdGlvbjENCgl7cGFnZTpTZWN0aW9uMTt9DQot +LT4NCjwvc3R5bGU+DQo8L2hlYWQ+DQoNCjxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRl +cnZhbDouNWluJz4NCg0KPGRpdiBjbGFzcz1TZWN0aW9uMT4NCg0KPHAgY2xhc3M9TXNvTm9ybWFs +PjwhLS1baWYgZ3RlIHZtbCAxXT48djpzaGFwZXR5cGUgaWQ9Il94MDAwMF90NzUiIGNvb3Jkc2l6 +ZT0iMjE2MDAsMjE2MDAiDQogbzpzcHQ9Ijc1IiBvOnByZWZlcnJlbGF0aXZlPSJ0IiBwYXRoPSJt +QDRANWxANEAxMUA5QDExQDlANXhlIiBmaWxsZWQ9ImYiDQogc3Ryb2tlZD0iZiI+DQogPHY6c3Ry +b2tlIGpvaW5zdHlsZT0ibWl0ZXIiLz4NCiA8djpmb3JtdWxhcz4NCiAgPHY6ZiBlcW49ImlmIGxp +bmVEcmF3biBwaXhlbExpbmVXaWR0aCAwIi8+DQogIDx2OmYgZXFuPSJzdW0gQDAgMSAwIi8+DQog +IDx2OmYgZXFuPSJzdW0gMCAwIEAxIi8+DQogIDx2OmYgZXFuPSJwcm9kIEAyIDEgMiIvPg0KICA8 +djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbFdpZHRoIi8+DQogIDx2OmYgZXFuPSJwcm9kIEAz +IDIxNjAwIHBpeGVsSGVpZ2h0Ii8+DQogIDx2OmYgZXFuPSJzdW0gQDAgMCAxIi8+DQogIDx2OmYg +ZXFuPSJwcm9kIEA2IDEgMiIvPg0KICA8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbFdpZHRo +Ii8+DQogIDx2OmYgZXFuPSJzdW0gQDggMjE2MDAgMCIvPg0KICA8djpmIGVxbj0icHJvZCBANyAy +MTYwMCBwaXhlbEhlaWdodCIvPg0KICA8djpmIGVxbj0ic3VtIEAxMCAyMTYwMCAwIi8+DQogPC92 +OmZvcm11bGFzPg0KIDx2OnBhdGggbzpleHRydXNpb25vaz0iZiIgZ3JhZGllbnRzaGFwZW9rPSJ0 +IiBvOmNvbm5lY3R0eXBlPSJyZWN0Ii8+DQogPG86bG9jayB2OmV4dD0iZWRpdCIgYXNwZWN0cmF0 +aW89InQiLz4NCjwvdjpzaGFwZXR5cGU+PHY6c2hhcGUgaWQ9Il94MDAwMF9pMTAyNSIgdHlwZT0i +I194MDAwMF90NzUiIHN0eWxlPSd3aWR0aDo0MzEuMjVwdDsNCiBoZWlnaHQ6NTk3Ljc1cHQnPg0K +IDx2OmltYWdlZGF0YSBzcmM9ImNpZDouL01hc3NNYWlsLTE1MDlfZmlsZXMvaW1hZ2UwMDEucG5n +IiBvOnRpdGxlPSIxIi8+DQo8L3Y6c2hhcGU+PCFbZW5kaWZdLS0+PCFbaWYgIXZtbF0+PGltZyB3 +aWR0aD01NzUgaGVpZ2h0PTc5Nw0Kc3JjPSJjaWQ6Li9NYXNzTWFpbC0xNTA5X2ZpbGVzL2ltYWdl +MDAyLmpwZyIgdjpzaGFwZXM9Il94MDAwMF9pMTAyNSI+PCFbZW5kaWZdPjwvcD4NCg0KPC9kaXY+ +DQoNCjwvYm9keT4NCg0KPC9odG1sPg== + + +------=_NextPart_7HZmySBWvSemNjin8Kg9YAA-- + +------=_NextPart_7HZmySBWvSemNjin8Kg9Y +Content-Type: application/octet-stream; + name="./MassMail-1509_files/image001.png" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; + filename="image001.png" + +iVBORw0KGgoAAAANSUhEUgAABsAAAAlaAQAAAAC7d+sfAAAABGdBTUEAALGOfPtRkwAAAAlwSFlz +AAAOxAAADsQBlSsOGwAA/7JJREFUeNrs/Qt8G8d1L44PVstwCTvBEgYrJ02MJQzGEH1b5nnjJI52 +CYMRxDQlSFN1btoEebT/9HEbx03T2InMBSkqohg3gBSqStPUgGipou0kTJr0pklsrWTJpW21gZ+X +7U1qUKIUSmIcgC8TAHdnfjO7IAViFy9FEEj/eT42BSwWB/Odc+bMmdmZ7wD0GhVQ7QJsANsAtgFs +fcoGsPUmG8DWm2wAW2+yAWy9yQaw9SYbwNabbABbb7IBbL3JBrD1JhvA1ptsAFtvsgFsvckGsPUm +G8DWm2wAW2+yAWy9yQaw9SYbwNabbABbb7IBbL3JBrD1JhvA1ptsAFtvsgFsvckGsPUmG8DWm2wA +W28CpGqXoFLAql2AigGTql2CDWAbwDaArUvZALbe5LULrNoFqBgwqdolqBSwahegYsCkapdgA9gG +sA1g61I2gK032QC23mQD2HqTDWDrTV67wKpdgIoBk6pdgg1gG8A2gK1L2YiK6002gK03ee0Cq3YB +KgZMqnYJNoBtAHuNA6t2ASoGTKp2CSoFrNoFqBgwqdol2ABWJrBqF6BiwKRql2AD2AawDWDrUjaA +rTfZ6MfWm2xYbL3JBrD1JhttbL3JBrD1JhvA1pu8doFVuwAVAyZVuwSVAlbtAlQMmFTtElQKWLUL +UDFgUrVLUClg1S5AxYBJ1S7BBrANYBvA1qVsAFtvsgFsvclrF1i1C1AxYFK1S7ABrExg1S5AxYBJ +1S7BBrAygVW7ABUDJlW7BBvANoBtAFuXsgFsvclrF1i1C1AxYFK1S1ApYNUuQMWASdUuwQawDWAb +wNalbABbb7IBbL3JBrD1JhvA1pu8doFVuwAVAyZVuwQbwDaAbQBbl7IRFdebbABbb/LaBVbtAlQM +mFTtEmwA2wD2GgdW7QJUDJhU7RJUCli1C1AxYFK1S7ABrExg1S5AxYBJ1S7BBrANYBvA1qVsAFtv +AgSbYPK4XaYm+nUMNQBcA23AGQmcAJ2gpp6J0EPsjZyZA8ONNrC/bxNt8gCbxxGw+oRPBFwBaqDf +R7Uz17M1LOhkB8H2VlMfGAZmR71Q5+LehlWL1QNmDfy9px70Xh8QQpTvBlcfxzaGGCtop/6E9VD0 +O0yUUCf83jATEL4icF6Tq26olWXYp+g60GR6x4DDRL0R9HJ05K2dtMDdwbFOMEQ/ww3QzB9TdACr +riIwwQpYb7PtE83mrhFKoOpq3A/UtLbvAF7Qyo10Bka2tEfqAONsML+toWZLt4kz0X2HPkhFjjQH +nIALdbuOd9uO+OgAbTXvvtHcN/QICIG+Vt9DJl/XAayarx4wurXNTQUECkQAGHCNCD4GeycA9TUN +jNkEGCoAKG74kEngTMAHgMfWzblowJkBYPoG+2tAgDYJwMR2+gIRFgRcADjMzayNAmwNIKqraLF9 +TusWl22/a7jGs9/Z19ZE7W+zCSP7PSHv4UiXd3igwerdX2cbMm+3dVLD262tjv292x2DXPd2h9fZ +5dvi7PSY9zq304PtNc5BV2+ncy+3b7tweF8b2+zEqqtosYr+tGyvHjCxktrhaPWA8RUFZnmNAkMH +qwdMqqj62uoB4yuq/oXqAZMqqv6r1QPGV1T9ieoBEyuq/nz1gPEVVX+hesDEiqo/Wz1gfEXVJ6oH +TKyo+tnKqi8EjK+o+mT1gFX2l1N81YBV9peV9QNMWv1WvPwypf5dXPWxXD1gUvF7cOEliOIaiLFV +YFBWwWX1L46D8cvXFHvVgPFFb4EYuySLU4gn1niWXLpslqz0PWnP/I0juHKxo2rAJIOLbaveyS0I +BZPSeWQnvdIpEYXR9AroO1dui6VVEOltaA4p4vLn9qoB41e99bAAJ3im5eIkhOEWpFgQOm6yX+jZ +NotvPsujo5cTCtmElhvSnoSF/JPcg+YzV9SrawMYBAADOw42Zd4vmFlAh/C7fS7/GXHThTBCTyM0 +2O0SMzcoHfhP2k9eHkipF5M8mrHuXtF6y9oAhlRgAJgyb5ON1O8dqnkPQk+12k/t/NA8vvkkkiKB +/mVgsp3tfasviN5nQg4ty1gS4/P9bMeywq9XDZiU/U61mAyErG77jPp3T1p8QeGfw68mkX8MnRHR +jHpLUvQ4A3QLEgZ7a/5UqwtxPIFS9uWvryVXTJo+B1YKhiMBkdGkuEtWgY0hexD1LidLZ8QAa8FB +sp4d8mkNLy0+NIvmVyrmuaoBE7PfQQ5QaMKCBIv2PorQRfUFttjBlHgUTaEX5NoxMvmUlsj15fFW +VObROaIApcSBRFZSX7UhdG4/hgty3I4uZIDFVFeURTSeRJYkDocJpu+RLQeJg8lqjZxcqRJJdVp5 +H0O3fgElV/RVbUCWCww7WUBEyUxYfOKRupBAWe1ojyz6Z1AQzQpOsGsPGlWjH8qahZJ5NaWCoJGz +fg43xGWp2hA6N7vfhYHhYmYSimdBxGyLbLfjDrrHvoD8SHH0xrC9LBlXvDzTiw14giSSz9A/xfY6 +s6JvRkTVEQOLEWtl4v2T3bTQSgeC6GAaHntIi3VjaBwj1J43KPxU5ns4jcdZJL6OYc1czkxwZ71m +gEEC7Lj2LqqGNex1Y8m/EQ+mRYRw+xP3kERJVkHwy7aReeyWsAM7Ybpj/nLTy3hsNYCJq9+fQLIF +rQQzifRbaBZHReWPSTsjUCfEoxBfh2H8eUp8PvM9fOkggtehJZS0JLBNl0WWqgWMX/1+Fy4Y/mdC +w+tHi08j+AXSj6XQaeJpB9FL4kGIvwRbEAmZhzPfx6BPBZrqEemc0zjKrADjUXUkN7vvXQWsDo2d +lJR3YovJ96LzZCB2Ehtzj0I+JbftQYHM93EbCzSAbRhgUkwQF14Wf7WA8bnAEuSK+gfBx+q8z33P +tg1HjORO3FXjWDmNDRckPglJie2oK/M9mUct6CXinLI4r4LWpGrjFn0HnQVMfrO7/sm+AH4datjJ +z4pfJ03uKDqqTgJoPYLa4cXVthTUOvMZHBX9l4G1rBFgvVoSKKuXU1tZ8cQQeXj3pCD6kyIOdjPY +zfaowO5S71ef7EVVV7STgK+ISTQPLyuFwTUDTDVWZpiPMb6klT8t2pPSRfKUwYLG1MR4m1puC/m7 +Fy3imrCQPETh5zD4LKXVGpDls5gdhdX38RPq5M2eJLpF4SdI92tHB9UpDxUSfGzIGaBaUWKniBsd +TiEhfx4ltTxSk2qNW/TAJsg/SQvUqnrsvNpjHVTEWmifJZNQHeiomgo+RP7It4OA1UuLs2/ZCveQ +USUMn0QzMAvY6WoBy3nfq0V6aIek9aS+Pv7cf/XYSVQUf7Q1jI2ZhvbYHjWPUh9WJuBTZi/3fZT6 +o9t3biaJJuTHl+ZTWQofqhYwfvX7E5rFZItM4p1MHzrZzxwlbQzt+ruWBAke/Oh4bKXEl0gtYOCJ +nT/5x20kiEBpamYmG9iT1QImrn7fq2XmGBgOcSi5nT79fKOFdNDiV7kgThaXoFi7Z2ylxDOIGAnH +DPm2N92lhkg+eulz6SyFT1cLGJ8L7HgG2A2kzCJ6QQ2B4zjW19qTaFAQ2vdp4V4d9JOckrTBGaVZ +mMSBMsG0cdy7s8K95gBrCRgk4UxRp7QRSYLFn/klBQWs9WCT1kGrefIOpCUXKRmYp9HdaDYE6pjv +ZedRl6oFTNIBE5HaP7VowF5Qc/yDyS+/isuPFmjsbhY16r1KbiPjNpJczSnizCTuAZI1HyXTJMHL +Cqv1TDNPuFfHLqorTqk91sH5L+MYoWj37IGkNsh9Sid5jxHPyPzS1DKeMxkzq1KtR396iyXIlbRd +AxZGWnaxZ2YnBqk9T0EtamZLZjOSTUhzxQUoTk4vr3W7kDUey8xmVQEYnwtsgpREHbvgMrNc53Ya +B/ajiZ5j4vLzyVr1GQrurdE8CaFQUi0Wn0FabaCzWXMeVRtC58nutVwRwb6v0DSL8/jw/E7WdzwQ +Vq8GVZ9LiDjXV8O9nQQPaWxhORjOoIXLCuVwlYBJq9/3rgbmJ1MDLRjLws5BiqZ5tZWNqm2ITNPs +WsgAW5DFOEkj1QeeF5Z9VlVRLWD86ve7VgHDRT2tFnw00cOjxRlRJpGyVk0AicVGVZ/zYyNha6Vk +/E0MQzqLslKPag3Ici2GXZFg0gaaBNNJBGPYkAIu9VySZPpJcbM6T7qEb5FIOkw8cA4PNOX7RXVo +1pHImglGyw3vmgPjV79ftpioveXRtGqxgZoeCS38FYn/Kf6oOtOr3qK6Ylh1RaR8SVS7veAFlD1u +sawNYMuTOdplzWJh4oo734sS70IQtHn4WvVJRZrccka7CadUPJJvw2+Ou8DNZ1F2TrWtSsAkY2Ci ++g6HtBfUUobTO38onv0cQu0MFe5QgakzhuSF4kdq+1LuxW9O9R2pPYOULK1VWhast5g6b59JXWEz +FWmqxwUPJuD94vg8sU5S2qy2IXWlA5nyJZPds8T53oFUV9x2YZXFqjSE1g9bIAEW0N7Jbq854LST +CdOdWzt2JUijk3FUJFFPJoUnrkgsRlwRNmlI+bOrZhMfrRIwXgds02Vg2ECTapIbntkp3vCZWXIh +jW5Rsw6CRx2UEYslCcxGpM6I28+smk2s0qM/gwd/VCZrR+qThzG1lB3z9/NP4GE0BpnEzkVcUZ2g +IoMy4nezUFpSnQ73cP55bTY1I1Wa9NAHD/LgT848+FNIB016InsiySf8CRIh02izajG18GobC+M0 +ROZPIjI0xTlJ+MyqdKNK45Zci+GS4gHZvEV7t+KK9vn7RNmeIBdS4h6tsOQeYjHyQCkhSzdAMguC +g4clscoVq/Sw1sBixy3k+boqOKRrruif2ckrt2Afk3DH3KIluWQq+EmUyRWV229B1yHVYqPnVrli +lQZkBo9qE+D+5eUQmsUkCdmT94oXajMWq9UsRpqU+kA9TCzmDMscUi1umViLrkhWcACOwJXIW293 +e3vALkFp/j7+9N4UMYUsBrU1EhakuSJZbJmAPjH5OCJPY5D90qrVfGkRVUMMgMnakiM/ImvATIBr +8IehfXYnf/PEPAkkCZwkkSUd6oNmMrlGwv0CDjezn+OJxeDoxGpX5IuXohLAJB0wBABuLWo/DQ97 +3u4R7GEoJu7tCb6aVPsx0aJOJxKvVTspklslzrSgc2SxGG6SlvOrRpdVelhrYDF0HLRkNuvJ5NEQ +lOwKv3DfB+yJBDFFQjx6mzoMI3Pc5FkMCR7pF3l0Qg5q/djE5EeytFbp0V9u8CAlTeKeTOvKMA5c +Ul5SxKR8r5haIK6YFn9rbw25lUR3Mn4h4X4C9+qn4WbVFS0LT+3N0lqlIXTepbPKHUjtoMmYkpf5 +xL03I6hGxYRYe+pmcseJzP/Y72TbDWSOZw/px2BwIp1dXbCjOsCkPB/Im5HaPohNJBkp9/Pk4RiM +dNaLo9pjypcy/5P8t9dPfPcwHrYwvpZk5mlhRlqqA4zP8wHMDDdOE2eCc+xOnkw/yVbgEfdoQY+k +U2o/ZkfQK5Lod4JHkUCdZXZ14lud7Yz5l6dnED9J5mOSSc+XQq6nBkiDmRGD2nCLLNXG4fGhZl4d +EcziTOwz2BuhP5k9E4zQ0eoAE4vc8PwQf+IuRWaSNQ6qi2Ty8+Jm7ROy6Q076kCdX+3NcQ2kTGrm +kZMdVmc7Y9F198epflvtDPqUzJPsCFsskT2LgTvoMwKvDgB+gJ1yCx5WwpacpXwnUTWkqMUu+rjh +4CJ6mqzRTmv9WNZCAGI1m0ReqY8x9pBw35HzSKw6O2uLWixhPgDERXSSZEYzWm+7+fKnxBrqcyft +4UOc5Fn83GoN1RlCF98CcpxXl95ASQ0VBETW9AxJgrUNppkkHt+Z+xCzOhtQS94/RmJg5vlY1kMi +kggv5t6as/iyOqtnrwEZUHUGZNeA/KU6A7JrYLFk5X/CCBhfeWCV/4nqAKvOgOwaAKvOw9rXrsXE +yv9GS1WA8ZX/jao8SNqw2G8gu6oCrLIUaarqqiwyBTQIgN0CJXi9VhBgATsCvHV1lMBSgGoAdaZG +zksBAbgjJs7prAMCA5hu4KT7eznGBEzmAB0IhZwmwIFGHwhZrXSAowHdDKyUWwgtq/5QVYB5TzkP +c9TAXqq3dcuN/UP9oLOe87mabmb3hwJmh9NcQx/+lLWLNXk8vUJk6AF3uxu4BkIum3XfwHavUFNv +raH6ut5et4UBww4h4mv/YGNTI7B5vDZz3bLqTb95Ma8AGKgHJrfPTbucNwKKA652RthN7wLAA2rq +Whk2EvoEYALgkKuRslmvByYW2Jpozt3XGgAOQPVH+hmf922AFoBviO01170OgAFgtvaxja3c8WXV +W6oCrJluDzFOp6/X6z4i7O0y0f2D7Bame6S+WeBC+9w1jeYDVJOXtlpdwuHGrojnYdDnbmNs/c3d +zAGO9XoPUaHd7b3Ww1RdnY3rYh/2OboDrY2OfrO7YUV1VYBJ1fjVDWAbwP7/CFi1C1AxYFK1S1Ap +YNUuQMWASdUuQaWAVbsAFQMmVbsElQJW7QJUDJhU7RJsANsAtgFsXcoGsPUmG8DWm7x2gVW7ABUD +JlW7BBvAygRW7QJUDJhU7RJsACsTWLULUDFgUrVLsAFsA9gGsHUpG8DWm7x2gVW7ABUDJlW7BJUC +Vu0CVAyYVO0SbADbALYBbF3KBrD1JhvA1ptsAFtvsgFsvclrF1i1C1AxYFK1S7ABbAPYBrB1KRtR +cb3JBrD1Jq9dYNUuQMWASdUuwQawDWCvcWDVLkDFgEnVLkGlgFW7ABUDJlW7BBvAygRW7QJUDJhU +7RJsANsAtgFsXcoGsPUmG/3YepMNi6032QC23mSjja032QC23mQD2HqT1y6wahegYsCkapegUsCq +XYCKAZOqXYJKAat2ASoGTKp2CSoFrNoFqBgwqdol2AC2AWwD2LqUDWDrTTaArTd57QKrdgEqBkyq +dgk2gJUJrNoFqBgwqdol2ABWJrBqF6BiwKRql2AD2AawDWDrUjaArTd57QKrdgEqBkyqdgkqBaza +BagYMKnaJdgAtgFsA9i6lA1g6002gK032QC23uS1CyzUHQm4hvZxVvqQ1TzE1lj3OylhyNHa1QeG +uzwBr7Xf2+wTbO3eUB3l21vTzlB7t1tNXHs993Ar6NziEJx1bmeDizM3Ob10r8vTd4Q2eQ7vBaEm +pgqq77wMzBEYaGRM9GBgpM7jq6cbAbfP12ByDVJcP0dbm6lIU73gYftBX5vQTQ+7mD42wHpHzIGh +NhPrZqm6BpPPOhBxMG7Q6og0U502upURGGd3jdBeBdWXDwsHXmuNze1zsfupSB0lDA+011BWodvE +eW2ddULE7TUHnHXUYKPLxmw3+ehertPTRPXWcc0g5DS7+iO+RmeNYKV729ghM+0MjFBCyDVs7RX6 +Qw3VUH35eHcAIhGBo4R+zksHbDaGBl62vw6EqL5eEKij2F7OCnw+jjVxbhZb22ymKeBk3HTAa2oV +AgLdywihOuBysQwINTLYkWpqKBOw0o2U4KyC6l2XgdlqzObBETO7u9HmCBxq7dxhcrOHHf0+m6u5 +OeJy2/p9g9TumrbuGsYdGqwXfJGRRwKHmK56t8tsa2jw2RrNblebyd03/AjV3+htYyIuX/cOwde/ +hTlUBdWbLwMbdtX7OOzTXF+rrY1qpoGD8bBex0CkTQhgn+6rozttzAgLBhrZVm7Q0dtAgXrawTjr +PT5HRMDNpZXucw3S3QzwsANcqK1eGOwFTF89bWWqoPqhy8DoXoGyed19jIvDPgzcexlfaw3NWGsA +09loZrhILyVETGZnYyttY3HzAI2efhfX10fXUQHaFdpNsz6hl/OB3VY20mdmWKcZsMNuG9vaSlVB +dW1WuG9ucAb6BlxdrXXWGvfhENtZY/Y2OoSR7v2UmTu0nXZ6G8z7hVaPbQvXv5c61OVlXH27new+ +rrt5u6mG9R3uszrNu7dz3LDZFnJ7en0PO2lbq3s/462C6kcvA9suCAEry2IbC3UuhqXcFMuZGFOT +iQJewU2DRuCMcEIdw2D34eghmjE1mhgW9IP9gV7g5BopwAasPpaj+2lOoFiqnaJBKNDPAHc1VGeF +e0C7twjevq4G6/4IGGhz1bHt7uGublDPHDE56rzd7e0BqtEWcbZuMe/d7gMexxA90NTYuaUZMP1d +gX304eamJsHEDvqs3NBuz+ER4KhvpzzW0MjQgSqovuEysObv2wJ1Ti8QBKbmDxwhk3MvYBgTeORU +F3Du40wmwDV8ZFCg9zsBx9HUo/VesN8ToGkQ2PGpLcDqDYFAgDV/u42jtlsBy1KmHQOHwXaHQFFA +qILqscvAAiZAHwKhh+uv72QBB4Y4a4OjcdABaGDtp9yHPW/3CCBA+QLe7oGvuAYAC9rZOvM+9sl6 +QIE6t6mxy3HjMAcEk0twNnvusHkAA5oYerd34FMDVVCdFTzqPbf66GaKwvc5XLv/HOwWBGGIo9vY +7wjsCMNY+8HAcMMI1WAy4SLU29z/AtwRzzzztnKcfAH0SYbpqucwNPp/lFkzkQ6HUJzGDjRwONPpZt +YkxVUJ3liu56YD5U7wp5qGbGzZm6HU1WJtDWynhAc79nuJVlRhqZQI1vYMjrMDXQjSx4pN66lxYc +kX4HaHA7OrkBupvtF6gRT7uzHgz2sQNgB7PX08fV+6qgettlYC7BJ9ACxudpbWPMDBgAjNs14Dpk +agX1wMS01dfYOBdHcaCRGeaG+2to4AF0o81j8wUiASYA+h0DfYOsjTWxgO3vZDvdVB9wAIoddJir +oDorKvaaa+pZ8yOukCvENgrDDtOONmuNlaJdNo/QPDIsDAvCbmpgoGaHzWvzMmyksx48MryX2mui +bGYH19DdyXVynLvX46EeGXSanTTjcw0EdnR6ej2BKqi+9TIwnIPSH+RADU3h+nCCgVM4LQ6Q+gjU +3xgANpbUR4i6mQVUnwlXtRV4PgWATyBVLTAPCMDM0Liqvab6AYA/xlVdBxxvB8DFkaq+5qqzgkf/ +iLmTHdjNde5j2QOmdkc9e9j8DgdljWzxuB223g96BHd3jWvA4w65nhpg2gNH6pmBrpo31pvqfLbh +xnqz8JCDa2ymhjyORq/tjz10k9A10O/ZQj0wEKiC6qxcsZM6xAj1nNlDHzFz3Y0M5TR5A0OHPOb+ +RuAJbGGtQ65eXz/HhGocVNdutpntN1nBYaHdN1zjZgMOwTZQ124TRtws7aX2mba4BxrwwHAv6OKa +XFVQfd1lYIyLNplPMQKIgEM1IND4kV4G2ICNi7D0rWwjoAJUv40Cuz9Fc8AHfH0Bgf220A/MwMz6 +GKphgA2YBJPbbALu71MscAFXq8Axf8C5QQ2oqYLqLIvhqPKnwOrev9/czbgOvR5Q3q6u1vbeGltj +BGw3t3u3+HDAeheoa9y+vaaZtvm+EjA5t2zhjgg4YD0LnLubnLYRHLDeBOjQ4cN9Byiz6w4B7LcN +hboiVVCdNR5rBg9Rf44DqidAHRFsn/iw4ABMCHSPUA/UjdAC9g3zAdDZ+24cUB2CqStifttbI/WA +9oLmbtMH6RdxrN4LatoDruPfDHhAPQce9tXceIOPCVBO0FAF1dlJsI1hwEhbEzscAFSvCTQwh4dt +PhydOI46ZBtyDwJgxvlbt2P/QKcATEIgYO7v6jS7cHRiWZNvsL2xDYAanL8112/3uCI4OglCjXuL +a7etGqqzZqnwAMC9u4b1cozraRfD+CLDdbSp5o1NJpPZZmvlAtxDeGzR6O4bcLK07Y+HaNrl66T7 +QN8D+wOB3WYzFxLYzv04zznU6rEylPkd7RRlc7n6WkHrB6ugOstifQ31rI9rBLsdfax72IGrkGMP ++9xMt6dVCPRTtkGm1TwwgKsw4N7XyjR21uMqZJkuVyPd7OAigttkbqO53R4PrkKh0RvpZ0cG+npN +DL3FxlZB9V1ZKRXweOgDtJkDTjxkHwjsj/TixCYQMdWz1m7WFQAhG3A4qPa+GhZY8ZDdI2z3CcOA +EnxgYKCumbEJwGsG9fWmplZqANSZBMrBOUe4TmDiqqA6y2K721nTISBEBv+MDT3sBu/iGFv9hx3W +Bpfwun4T1bflsNt9hAHPBjhf27sGvN2HwJtY2sz807468xC3yQ16W23PNzZ29YM/FViX45seZ7Mv +8HqGqqHv9PZXQXVWSsUBdzfd0MDgfoUGuPvvGz6E+xUhgLt/trub6wd4sI67f/NgP+5XKIC7/9ZO +Xx8eBAk4aWGam1k3oBmAu/+aNjfuV3oBziy4kZFWfK0KqrMsZj68F9ThpmijXzzUjce1uCm6A98c +asbjWtzKGd8NXbu78LgWt3Iz9ee+R/C4FrfyRuHD7Q14XGsNBPpddQ+7H8bjWtzKd5ve7dqBx7W4 +lbORtx6pguqvZ1mM4agI7lMChwFtwrEX9ymsLQACXMAcwKkMFQIsjWMv7lOELjyy7cMdXz3HmAUg +sEKNgFMZkxcwFI69uE/htgATaAUNuE+ha7hqqL75MrC61ppu61BrN1vPHXJxj/R1DTT3UU5bE93g +a++s8Qmevv5I3yN17dwjDBPyDbE7Wrd4GlpNVrO1zzzS5Oob4Rytbl/rDvoIu4Omva52pjkyNGyO +BPbWVEF1VnYv2ASTx+0yNdGvY3DscQ20AWckcAJ0gpp6JkIPsTdyOPYMN9rA/r5NtMkDbB5HwOoT +PhFwBaiBfh/VzlzP4rDWyQ6C7a2mPjAMzI56oc7Fva0KqrM6aGvg7z31oPf6gBCifDe4+ji2McRY +sS//Ceuh6HeYKKFO+L1hJiB8ReC8JlfdEB7Ss0/RdbiZvGPAYaLeCHo5OvLWTlrg7uBYJ24mz+Ah +PfPHFB2oguqs4CFYAetttn2i2dw1QglUXY37gZrW9h3AC1q5kc7AyJb2SB1gnA3mtzXUbOk2cSa6 +79AHqciR5oATcKFu1/Fu2xEfHaCt5t03mvuGHgEh0Nfqe8jk6zpQBdVZj5Ho1jY3FRAoPAAAA64R +wcdg7wSgvqaBwSMGhsK5GDd8yCRwJjy2AB5bN+eiAWcGgOkb7McjBtqE0zy20xeIsCCA0zyHuZnF +gxG2BlRDdVYb2+e0bnHZ9ruGazz7nX1tTdT+Njy42+8JeQ9HurzDAw1W7/4625B5u62TGt5ubXXs +793uGOS6tzu8zi7fFmenx7zXuZ0ebK9xDrp6O517uX3bhcP72thmZxVUZ4V7GgTAboESvF4cPFnA +jgBvXR0lsBSgGnAa08h5KSAAd8TEOZ11QGAA0w2cdH8vx5iACYftQCjkNOFuvtEHQlYrHeBoQDfj +DMkthKqgOvtR7SnnYY4a2Ev1tm65sX+oH3TWcz5X083s/lDA7HCaa+jDn7J2sSaPp1eIDD3gbnfj +GBRy2az7BrZ7hZp6aw3V1/X2ui0MGHYIEV/7BxubGnF489rMdVVQnTVhSqb43D437XLeiF0e4M5C +2E3vwi4PcGfBsJHQJwATAIdcjZTNej12eYD7Ic7d1xogU3z9kX7G530boAWA+6Fec93rsMsD3A+x +ja3c8SqozpowbabbQ4zT6ev1uo8Ie7tMdP8gu4XpHqlvFrjQPndNo/kA1eSlrVaXcLixK+J5GPS5 +2xhbf3M3c4Bjvd5DVGh3e6/1MFVXZ+O62Id9ju5Aa6Oj3+xuqILqLIv1foKj8RA00G0C7P+gQYjj +WHOAo2oCAStNUyYfDYTvsRQe3QrNIMD8FgW8LMvUCKyJOi7UUZQJjFCA+whj4gSBawACfZ0JOBmG +piJMNVRnPVx3Mv0+l6uzweTc7ullB2tqzI6Ic68rhLv4yCFPN72vyUq7XTabazCw3zksDLRRfbvr +fVbPkBdnDz7fcDPl3b+XarSZzbY2Ybu1k/M4elvdAyN1jvYqqM7KFQO7m+roPrPgtNIse/gQF2r1 +0n1CH2UbclqZLSDkZQX3/v6+1hrOWkcxTJcv5OUOU61cq8ncbq2jbQGvk+Eat7tbub5QHd1L01tc +XifbZeJCXBVUZ81S3cgB4HZG6kzg0CYa942eIRPH2bhPBICJ2R9w0lT/9SwAjVacAgR8vX24b3S0 +gxBrZt8mANC/XbBSJvfrGADYvS5KEFzCCQCo+ibgZWqYKqjOckU3vf/IjaCm1ellvML+7ocAGHHu +NdUx1vahT4AGeh/X2Eht73oAUJH9TtrJbW/uDIBuqyfQ31/X1P42YO7zhthQr/PhDwKTb7uVsrLO +A67joLnOIbiroDoreFAP00xr+4gLOKzcDq6X2bKjBtBuj/kw21jTHImAAW9vdx/NHem2gfo6tjkk +9Nse6QtQjY6aLobtO+DzAY9TeKSVYrseMQOmf6DBy7nNO1oFE7uvCqqPZnXQoNVNAxPV3t+/FzAu +IQC47b4QHpTW4IE7XddsteKM9BAFQG+T243HuzY8cGedI1483u3rZ/DI/EBdHc5Ifb0ACPsPNeLx +rhkP3Blrt9NZBdVZmYd1h4vd393Ohd4WotqPUNb2vR7r66xge3fEvb3T1Sc8IdQ1DzHbm5tY741e +U1NXb12TZ7huUx1wPuJrdI4MtXKf5OgD7bTzgHXAeb0T7H9Y6N8/3En39geqoDpr+g2tFZGBqxGw +dRwrOHtBDc1RJifF0CEORPqB4Ay0gv00sLEBfInhrEKA6mNNYL+Jprws8LkBvsQFtlNZFpOqDWhZ +FHN/f3N/K+WxDtoafaHdvgHO29fp7m+2so/U03Vsu8u32+1ucHO9jro2MzvidY94WGer65C7oY7Z +wfTRA0021x2XgVUbz4rITpMV1DPegQCI7L5SJUuXgUnVBrQCLPARto8+BKguB11/pUrm1iAwWE/1 ++UborodN3s47rlTJ4hoEpng87KCJGwAuE9hypUrWosXkRnYIDOA8q+9wc82VKlmTbWyAbt1hDY04 +XHVg35UqWYsWU6hhBnAmaqBPcDa+loDJ3jpHk7nbJQCrUPdaAgapQB3DBfrr3tFvO/FaAiaHHJFW +d3OjEzQKN1ypkrUY7mXa02RjAiDQzph7r1RJlsWqjWdF4CEWmFqtQ1u44dCOK1WyJsM90/eIixVM +gHa6TVeqZC22MSg4Qd9XzCNvbQXM9qsArNp4VkRxBOpZIFABV1dv05UqWZOuyG7BA+sGX72Jtm66 +UiVrMSoqdIAhK9f3e1zC1cg8qo1nRWSBjngPDwXAXvfevVcBmFRtQCvA9jsaqHquzsMB7jXVQUMQ +Et4VqBHqzQ1065UqWZMWG9nLBMyhJk443tlwpUrWZFSknA4qYmLarGZwNVKqNQNMYYF3hCZLwLq6 +b75SJWuxjclNbRQlULb6HcD9mpoaULws621wHnICK/PwlSpZi64og153f0SgwX7BcTWS4GrjWRGl +uZux0q8TulprBl5buaJgckQ6fdZ+hnVcjcyj2nhWRLnBBuj+Xmd9o7f/NRUVoSC0hwADIh6q/mqM +x9YMMNlaD6jhzvYa9jB4jQ1bhroiDAUEt+kPDl2pkjVpMR+gzL3e4XrGBa67UiVr0mI1zSHQTDEe +rtf72pri5gA9DHxCb5vT+tp6ojnY5mD3UuYbWVZ4TT3RVBo5lhmpF4RAL33kSpWsSYuB+t1uymM2 +NzvZdTFhmqwxA9b2jqL3Kdf3c6564IuYTHesi+CheBvb29x00fvgJ9l6EOnusx3u5j58pT92LV0R +Uv0cA4p3uTJo8zho4HKDgHlduCKKEB6z4l2ukk2Rti6APUN4zPxFb5OzKdKuArCK40IJwmNmL3qb +kkWRtj4GmvOEx4wvehvMpki70t+6pq4oEx6zEm7LokhbH0kwJDxmJdyWRZHWeaW/dW1TKsbFlbDq +S86iSFsnA83nW+s2F78LZlGkXY2H65XHhY4zgqX4XXIWRdo6mbtfsO4v4VfkLIq0dbLkKCkwfAm3 +ZVGkffpKf+ratjHl+lKinJxFkbZOggc8VEqKJGdRpK2XmeC+W0u4ScmiSFsvM8GntpVwk5xFkbZO +oiK6EC4FWBZF2np5Bj3LlwIsiyJtnQQPpIgl3ASzKNKuRq54DXAhWMpNcjZF2pX+0lqcfoNZFGnr +xWIliZxFkfbVK1WyFh9KyNkUaVeqZE1OcWdRpF2NvS3VxrMichZF2nrpoEsSJYsirZQUzFDWZBvL +okh7TbUxOYsi7cCVKqlwPzZRhCKNNwSWRZH2mrIYzKZIey0Bk7Mo0l5Tj2rlLIq0XVeqJCsqVhvP +iihZFGn5OmiIhsWCStakxbIp0vLgeoYb4EsFVm08K6JkUaTleYyUBH2tYkEla3HYImdRpBm3MUgo +0goDW4uZB8yiSDMO908TirTCStZkG8umSDO64YJKkcaXCqzaeC4Dy6JIM5wwfUalSBNLBSZVG9Cy +KFkUaUYTplCjSCusZC22MTmLIs3oaUtCo0gTCypZixaDWRRpRhu8MxRp6w+YnE2Rpv84laFIW4fA +sijSDFYN9C9TpBVEthbbGMyiSDNY56FRpGFUxz9UQMmaDPfZFGm6TxWVIk1SX7aUBEyqNqBlgVkU +aXfqPk0QirQO7fWMmFfJWhy2yFkUafrM43lCkbb8Jv/K2rVoMSWLIu1R3aeEIi28/AbmLfSatFgW +RZrOYjKhSBNX3o7nU7ImLZZNkZb74Xwd2541i6qUAKzaeFakIEXaGYcD2LPe+/MoWZMDzUIUaf2g +zpv9fjKPkrXoioUo0mB9++Ha7AtyHiVrMfMoRJE238flFJQ3VrIWLVaIIi3Bmq3iqitRYyVrso0V +oEi75I7kDKqXjJWsRYsVokgL0OZbcqpBLAMY7h2W340WKcUkKluWinxeiCJti++QPedSuBxgIgpm +lmQMkD9pNJOvFBd5w8s8FHOufD29/CopooJSgCJN7qOWh2H9y/lHvAxgci0ag1pNPKEWxZ9erpcs +C6k1P3+5ApVM8I3h//fBPYsraQG5gHbLLZmblG3L1y7H5FWlz0+RpjAzzzzS77ee7Qu/kcCNliHO7l +R9EA1BKXZ0VcBqU22SIRTOlG1+W7FsifhH/lPbaEQmqR5G8miFtHOlOnQfLnOVn9J4m1d6BMMDtj +DCw/RVrCkVmaedY6SAu3LNdnYYtlV4wdReAm1cpPkjLId8mjo+gCSQqybpsg5U6JK5WzwCNI7LcH +/38YfnUGJXkU2dtuC6mDqj3yZuxlIr5fJpltnFy7YFimAhRpT9LtWkWOAIBVa69FIyXG4V7m0R6I +izOG0GmEbsHlTfITJtyQYYO6BkjzgUvknxninaEdbTgdSNgRFBzmEbKRahc8mKRb/YjhQIBS/WlU +sUME3R4eKX+N3z4BGG8/ZVimAhRpE61aoii37rBh1Vrkl4yU5GljEupAFoReQOgkQnW46aTR0yF1 +eDdF/ryDAW4BD4seNI9gd7gg9gdY34kddBTfC0IUmYAJQ/sMZ+XRyZruG7hdSH5CYHaKUEKbJ8JI +fi+ukWd/rw+wIWOL5adIG7yxWS3mhBW03oFVqxUTKwIsu854ZIH4158EviOUN4L7iiSaMKuLIqfJ +n173UJ0jUG8PaDxm/LOUg8yuxBF0DgIPiQ1B5J/fJ5Dfxe2oBUGXqR7QgEdPYq3yVp44A669pw2B +5adIg9iMavn2CcwA7uqEzSt1XZorKjzy499FEw6KcdJm3DSUxTFivExNxMkf3Fqe03jMiEtqgQL6 +kdb1ReFNSVHO1EQQ97lDzgP1O3iteMfCxH9xzY0ZFakQRVqTR210ScZ2yDkyOML0o3ySJyryyE56 +9PO4WOTHscXOT5Hmlh3uk2J2uE5qZbYjLQhG4eP3ate+ql3EwYMEDq3aLKSa8Q+cNLZYXoo0GbBq +av9sn0CTw723O0ihDRP8PK4o4XCBiBvNkjvk57coE3fgFhfPBiavqpeMdl6z2Dco8U1bRbVLHkNw +lNh4DxQzPbMihknbhRJpw0YWy0uRlnLsJy6B/omjfM6udgF4iHcYhkXj4AF5GZeKx58meBzUFaHf +S92Jy7Ko+u4e7SbifHMrKjKumLHYETYABsQUuWRRL8bRuMInVdXYYmESl7BbGLaOAhRp84wnTG4I +bK839zIhepi9Lh+wPK54v8IncJHOoHn+AhLh6zmTbxuu+xkVRmbmiNQ/6RwXVLSaNdR0BXfQAY+r ++42iCmSU9IrYpffIPPFu2Y8U8ksnCTBjV8xPkTbxPCAuMV8PvNybBCrC7DaTy5KBkjy54nvvs9aD +zbg4M+gsrmMZx4HT+N4Fj9cDujPZAGkxScJjhl9q73CZHMNOR61qNbusBg/ZvkgwPxUaAA9Tonx9 +DUbJT5L+EeObNrZYXoq0s6CZ/MwZT7enX6jxWkPcJ8j7mIESw6iYitz2Zq+n5g40M+jcPAmDuAEl +se+cRIn6RrZhmWOD1H+K8JipDQy/wwaCLBMasCDSj/FptY3J0tm9uJbPurlmwCKFi2DXFJ/MuKKx +xfJTpA2YA+SfEcpkrTf5QL9jL6knwzTY0GJKk5vDQ7wlNBkCh0c8m3BR0rgQ46To59V8RMIfEkMk +Wxlymh4uY1KdcIb9gslBDuAYRf6EGhXnxVOkizuBgtiColzDz2LVPhIQcX9iHO7zU6QNR9Q2t90X +zFxIbGlBxmLYxmSaa5fm8YuLw4+A/ro7VYuRfmxGTaHCBFgCKaIWMibJ3gbBC9x9vNaPEYtFcVhV +LXYGyY+ov9Mi86q7JtsHaZo0Ouzip40tlpcijakjKRY0Mcv7BtOBW5HxAC9PriglcPAgZU6oIzGc +u+JCjOHEinjPKAmMC2rwljWjQ6qOOjzkxG+IZ9yiuqJ/VrUYjui4EaJdyE4qgugKcdg1teBhHO7z +U6S1cuRwj6TX8U/LFqsjDdoov88X7p/jyaDkIponvoeNk8QleQHDRC+q4Xy/iVXrP5mxGIkvaCKT +eZDqxMEjSaIixK5yGtdeEPLYQpp/qKHzNHHFPG0sL0Wa2Uq6motg4HXHD7l9HAVSHJl4NNqmkK+D +flFKIK2DJhaTcdx7MXQHiX7H1egaxA2KBA8yTp5Snw0ktTSSWKwDqa6YONCc6dhmEToqh/H959VC +qNeOH+67jjV+cpeXIk3mvOSrp36LO/gIXUdt4rYk+k4RPxBLdUXIH1Ytdh7b6EmkLgJCZ6haUsID +IrHY8V4bWrbYnGox3NpmMhYjtRri/GkO19UI0YrvAtbmmgaTS60K9abzDMu1GTOUXqZIC63eGCcP +9pKvTgiDbw3s87lG6tzzTH0eYHksJn5XbWMX0ew+Mp2iNHK4hb1AzNKvAsMW08K9qI7YNIsRn+z/ +PR8grnhqN1aQxuMvYT8TOiyitwvA67W29vw1/pZqsdPkS3mi4gpF2lOrN8YlgZV8dbeDDQ4CiqhO +HHbbDXXkyTwU/gFpQXXFCzRRLQMKO9pJYrFudVR/dDnci2o4kXncC8fwN+AWk6mZDFt6WTsOL7go +NPA5TCK0zBOzXoJCo11rYwWCxwpFWtvZ1RRpF5sFHv/DMm3apEDCN2tiRpFh6pFnoMnfjitcxNnS +DAYXw21OFk9iaNiK1/PEYnvwB8RaM+017FHiupOyOHqGZEM4NbEgEhXDCQwsdZ+Imx2uD6wOB49J +ZBa03BF3ioqYb9iyTJF2g7x68+k8MONCQndI/QnszlSyK/OyVIv1fIBfwAXBuSLu1o9ioFrmgf0t +zJN+7CDGTFwxDQQ3/m34yI6UcMdF/CKGtDYWhPY06R1kEavBjc//JK6dKS19hhIqmCsq9EFN9R3K +aoq0mfaASGaqaj6qKZponAGPkgmVWMkWu13m53Hueu5TLP6eCRclLY7hZjGL4E1+4ookH1Zdcbie +uZWEq9bkn23GbQxuxt0zcY4olIjFSFXY1emsXRjIM1qLeZlYbIxUjPHzSNm3bCe4miJtgiGposxF +gAuYaoTR5yznbIB04fFSLSYfgzs4cBdKDLRSodb2jMUmcTGhZCcWI65I8gqSeeBqV/4KKKrF0A6c ++8dUV8QDOjKHSCyWUJN8iCa0ih7nEem4U3ktVrPyyHI1RdolgUS4RF8N13fACxreQreEhMP1xsDy +ZPf8L0CdpxaH+EFvE2NS29gkthgOhbydtLFR7KPLwWNKDR4JMUh6vISkRdcgDKdVi4k4uOM2lrTg +i/3kz4VtfXbVFXGl5EmpOHDKkCJtwkrmpRVbqJ0FVCfo4T42vL/OjQwnXvOkVB94s5orYh9KqO95 +kiuOYTQpcY9mMS1XXL5fOjkjRsng+iw/pF6JQ7+aK8rEFTHAc12NuFcaxRc+aRuMErORWUfjif+8 +FGkvDpDngAmhFbQ59jGeVE0Pw3CMoY58bexLHxfVzGMR1/aSNqImrpjCeMa0qLiAEhlgZGabP7kg +jhJXfDEzvsbBY5ZUipxxxf0mMNj7WzwU5S+5W1sQaWOpfElwXoq04wJppGcp2hoKMfSO/4wkBaGv +CxlmwXlmqcBOPq1ZLKkWL7APh/vT+OUr6DkSHMZxYkgSjT82W7AZMfBHsSueUT0sqmoYGVHDPekT +SLiXNxH3iyI43Go/o6b/4/knc/JSpP1bA8kWLoyEBMA8caj2bM1LDVaGDIoMgOWx2DsVLbtPktkc +nCvwSTGOi3EBW21CyzxSeKSFv0R4zETsintmRQsJflPYUc9oFpPRLBl84jY2gRI/8yM1e948z6fU +ZHIKpfMGj3wUab7AQ8RudM31X3GztjcEWhIgcCiEygD2hCXNzxJ/SXlHhG9goK4GHO7H8d270Hlx +lGQeZ4krQpXHDA/D+EPz4sFJtexR9QHN8/v8aoeA/+PJ2EvULIae7MB1Q1zx1Bas+h8MgeWlSDvu +2aSq9vW+bYAJfKy5Y7CrmX2rWLorJoGUlNTBlGwCNkAskhSfDdyMq/5ulCCzgiR4LIiZn8NjFml3 +AtaSNiaYGtgBUbVYEjhIf6D287gK3FyGfeWMOvH4bD9WbbwvPS9F2gGWbLIdoHA35hiu7wH2RiDU +kOkdgwGZocVSVl5Ws/uTxBVnSUouo6fwWOgSjKK0/yBpIedXnt/dQLqH51I928ig5ICLMzfxBJh/ +9giNq2QvCDWRpxkB19C+FvX+BUQGh08IQ45W/do21RXzUaRF1Me0J1yeviO0yfOrvTtDTUyoW9KA +yasfdRoCW/KIKX4G54ovkBGmOiwhmccUmsDZiLxnG7HYBdKC1PoNk9hXPytuJoaJODSzjEL/PJkE +STq7awQ87IKNjIkOqh/NIDIpMp6/g85LkTZA0jf0CNVpo1uZ1v90yjVCuyMQ04Al61YxTxgOW+S3 +8NgVsQ+9kBBnyOgS4xOjuBgXSc/UgIv+LN2bWSwYT+OKgluHEjs/fV4dQ0ZVFdgV1cmclCh/X40m +pDrDWa6Io2LecJ+PIu1JFjsLCoxQQsg1vPlM63yoAXitGVd8IrLqebVhG4MydsV52Y+DB+7OZlWL +fZGMxxKk4TXimukTrlOjIs6wyYyGfMw3r/zZGXXEqZU+jD6wQGyaFpVPo3OZEWiQPJvGrki6ujGU +zDc1kJciLcQQJ8Y+WlNDmd6wv/YMJThBJFPup+hAUVeEPVKqtXOHBc3Ni/NqPyUlP30QAztLJkB2 +Y4sN1rdqOQmaJcNK+QMf+NzOyWntqbx6OYpuvEjiZlKU/0yd7slYLAylM+owLIbSUt4kOA9FWt/w +KP7rbWMiLl/3xwR//xbmkI3MLBKL5bCv5UmCxXQzDW5BUwmvYyCC++falHcPSamI70Rv0cK9FhVx +YoSL/di9f/W5c2fUZD5Grg5w8GP16rAFpf5EdS8fZ2I7cMu34aRzTCHI86ZUeSnSXlQtFgm11QuD +vT3MsXraygy7NGCwr3XV/qR8TzSTgCSXYws0Y61BcmezzzzbkFO84EqTG0jYzHLmZSqtkwboTy7fd+ +7/z8PepTviAZz/aZGbZJuyOhPkGXKZvXjY0ZEaSL6CQ2bJS4bZ6BZj6KNLCbuAdW7TQD9pJ7J9va +StFkGoQAc3FCFoI8FoN8Wp2liibFWRz/IGXmDnXgqKiuEyDTa3twZWtRUSYP2eF9SsPnE0fUTD9K +HiUNhdyeXm0+f1atO8UZ6BtowbDT2GLPycRjU3yeufu8FGlPcyTcE9W+h2950ZZy72e8oWa79qXW +OvUB5LIYU6QpfFLNPKZS4szymgULsRjKWOwoxoj7sV6Nx0xS3i5zn0nj0Dwu4kCfecw0rYWXi2fI +eIl0CqT5RVPoovwQxLcRV8wT7vNRpEVooppiqXaKrk3sOscAN9guZCzGCHXZwPLNeaiznWgsjYMH +GWZJZCnnadywiLRoqzQw8gyPmV3+PNzXIePh4ZiJHfSRSbUpMmmldggvXMw8l1VXg4aT2IldKeKK +eDyW58FfPoo0TfWpwyPAUf/7fdueD40MHQC0BgxZ90eKA1PEtDSjuWJCnQoOj+KQNpl5HptZCIkt +dipAq+y4ys3o3rB8Bse+UTRCkWnQmUkc8lSLPTRJjKdazIKNpqDJZ+9RR2mpfG0sL0VaRFX9LGXa +MXD4A9tbjlMUEJq/b9csJjA1Yta9+Z5BJ3ky0Dw6M+hQJxU2ncQd0VjGFTOHY2vBQ8UqW9AMiXFQ +nBA02C/M49vVOzpUi8n458l4J5ZEE6b5JHmmm87/cD0PRVqvesrzSZsH4MEKs3W3d+BTAwGTBgxd +37lqs0u+4KGoA82xeY5uY/GLRy/gjuhkxhUzFtPCvfqcGUrEOhfVyzH174V7+aj2mf286hc+upki +Fkuj83cnFeKWyXzzinkp0l5U9/CMCMxg40cvNO5k2SbGVO8RtUhxCKzqx/LNBGsWCybaWpk2XPC7 +5u4nMUxbItSRsdjlvzJPYqQGLKj+fQIGD6oWg2T8OYVk86F6F3bHliSK8PI7SFUoYv7nY8YUaX0j +JB0MDPaxA5teYlKePq7e567nNWBPNK9qj/lmgtPqQLOD1O0ZsrYq9T5xxRUzKyG1lGpeBSYREFp3 +G1b/jkN/h9ohpPlpdWWLqNVIh+I1I/lfyfv8UTEfRVrIRILHc2ynm9ozcfMExQ46zC6yXogAm2/N +lwRnAcNtTJrFTmVf+LL6LZw7/oQM5M+rn2aeumlJ8Kzqijypf61fiGbs9jp1Egc7rGoxhZfU2BpO +fvIOBOtIG4P5+rG8FGmn1IHmJSfN+H53YM9LnZ5eT6DXnHFFOWTPvjff0xYyLxXErT0hkiQXD/Bt +SJ3zIJJpY1rwWHbFZJYrxkgAHFatiL33DEnlIVQXZyFL+hMtCP575ql1vinuPBRpvfWkyU0EIoG6 +Dzh4AFwca2NNouH0W56oKCk45diMY/JZ+/N49DQrwl4yUaP6HTqoYpfOq8BSGVecyXLFo6TQ/bwa +PKbRK+pT69QNcDePQ0kSxxxYT4Clt77vIUNgeSnSXvSQJjfvoZuEnoFjni3UAwOB/jxs3YbBQ0nz +ciND3YKHmkOSbEakbb0XWQ+qfXUypFoMNpNoiUYnMq44K9r2Lrvih8hirCfQAtkfWkss9hxC/96K +IjimHTHfh+/ZROpDVjzG9MZ5KdKeYEmvObPFPdBwwb1zL+jimlydFCp9wjR5iE8GGj/SC/l5nCZF +wmTJykkU2KRaLE3folWrusoPqCtIkmTVQMCEUm6zyULKjZ3wAjrO4QjhR+dBDYNH0NehJP4GOHQ/ +vv8/CbAkz+WzWB6KtAn398mPAVfrHQnmVc4NarBqsuUgXqLFZIZPvX4TUqD4dAc2fQvJDqModZcW +Kc50aOjVlPBhTv0CiY7KLSiJA9abAB0iQ8s5BO8gTowSXZFWtPSn+Lb9ZORBHPgk+d00UoxJg/NS +pKUBsVj6AGVu+fQdx/fbhkJYdZuxKxq3sSPqA2YkyyEeK1IHIhYELVq4T9q1m96pFmL7sisi+FWk +tAdcx78Z8JCeF4eSv0doL5l0argVPUT8d0JEFoUoPk6A4TGoxRhYPoq0xDfJYyQZPOyzfEOrk0RD +MwkvsYIWywI2oa3Ak2dJtIW3yLz6FNKCLqkoMjdqSbxapbK6gCVrpf829SHMCfUFmt+Ec2+iD7e8 +oDq3taAtD1PnC/SSlyJtFhDmBBgBYFTQ3GYegDxU0caZR0qbW0vN8+RdkPwRCSA1ticzN2nVpPax +sqTdkiNRtLz6HmqdJ49aUpqKKDL8hmaxfBRpiUNkVzc0v6PdQtnVKzMf3E4QSnolxhYzXsqef49D +SXyQWbVRWPJSpMk2huCJ9LOjA329JobeMs+qz6QMgK3FbVZ5KdIUU5Mf//O0SbA4OOcI1wlmOJdo +rGQtbtrJS5Em/6lgx/+ccjb7A69nqBr6zmT/bgLMANya3GaVlyLNVEPaaqIXWKwRjrCvJVjyOKbI +kqM1Ayw/RRqlzg0suHa0ZC68eoQkL6UvEquu5KdIGwGkO4Ym0JG5kFApWoxi2poElpcirf+ICtTV +bslcSNWQV0abmtbizvX8FGnPsYPknz4wDMyOeqHOxb3Nj8pYOltlyU+RdkrAeTXOyIboZ7gBmvlj +SnsQESsMrNp4ViQ/RdqsmYzp0CUQAn2tvodMvq68jJlrMtzburk/pYFDT5GWiLB2coODUKRRgK3R +pueMSr4WMw9CkTaz3fHViI4iLV3jDJIbVIq0w/va2OYWclk0ULIm2xgDmJ3AWTuvo0hTfECdl5gg +FGnASrnVByyGmepabGOEIq3HNbBP1lGkQTCsTjRCQpFm83ht6vjdcJPmWrQYoUhDNHdHWk+RNsSq +4xiZUKT1sY2t7yHvDPfmrsU2RijSoLvtuhf1FGl767THlme7A62Njn6z+iZmpGQtWgxSYHuCZWqP +6ynSjgucnfybAk6GoSltCZlhwdciMHmgbdPZ3W+/c/8HdRRpl2xtHeqLd/S2uge+o4I0HoevSWBd +vq8/xT226cQtOoq0RF9IuwI/4mTv1KaJjTd4r8U2BgGoHW6/6eusJZRLkZZyUZkrk/V/qS35zDNf +sSbD/fbmuwLAj1+dyqVIgybfdjHndmPCgrXoijDUGrU9Esavzuoo0h4xr+I4IhI2VLIWhy0ybft1 +68RNzpGOp3QUaQFh/9GcahANlaxFiyldvfc3ycfqNln0FGmzA87X59xtrGRNWgy4PrBJtnNsh54i +LeHMJS813nK8Ni1m7n/wVtlPeex6irQFuo71r7oSLgqs2nhWRHaa7LUzN3kHgnqKNNjocKwi3MrT +xCo90DxD+QKmLfUUU9PLcO0saHJwreB7jXSdG9CHPYy6W1MPLPAR+55TEqD8JVCk5ZuNX4uuCOup +PbGRm7oetugp0tBz7YdrsqujJY+StZh5KB7PDfFeUno9RRqa5UAkyxeT+ZSsRYvJjexBpPL06ynS +kGy2mrOIW/ISR67JyZwBuhVZSXH0FGkIRQYizhWTqYvqDGUtWoxQpMkcTw2E9RRpCD3jqAOh5bKe +yKtkLQIjFGmKuccl2PUUaTjQArAdZKYbE/y6AkYo0pLcsf46XkeRRmA7n2HvNHWoN1ryK7nGwEo7 +4y/kOPRJ99ZGp11HkUYkBHYDb71PRC8VOq3mGod7uaSbaE/TS08dAwG/jiKNyAkX10w5rIO0WEjJ +NU6pSjpHEx5iN504s3VoC6+jSFNx9w22+gZAEUNc43A/0VHCTTLT9+jI53pMwK6jSFOF3cfQrTuK +HG9yjdvYuRJOJicUabV96p4RHUWaKi+CRs4KSifyvwa4UN+eEm5SHIHN7E4/fpVLkZaRdppQpBUG +do1dkS3l2C2ZvTWKlvjOlF1HkabJs15CkVZYyTU+wdvpLuUuehfZknYD/HguRVpGUoBQpPEFlVxb +V0wyQ3zxu2QBp77xb/XKOoq0ZfkloUgTSwUmVR7YvFs3eWYEbP/NCNq5OpkLcDcY30Eo0goDu7au +eII95C9+FwT75Nu/VtOqmF/KoUhbkaSXe1NhYNfWYs/T19cWv0se2XvhsTeEmuTWiRyKtMtyql8l +Y8kv1zYq9nfmWQa8GhjlPLv1sGkLuiENevPdpBRxxWtqMcgGapqK30Yo0h6jR+6Bm2AORVoZck3b +mNLa4CucuqpCKNK2boMKugu6a4prNZZr6oppq2Diiv8MoUjbOY6Uxdo083BxrcZyTV1xQqhzUnzR +22TQ+1ePTWFg4eMOU3GtRYFVHBc6V+NkPxIsepvS3L1z61/XphZRDkVaOXJNXbHXJfRSxU94lgUT +/9g9XXOLMuvYW4JaQ7mWFoPWVqtt4I6i9yk32Pid8q7zc2e8/esiKsoBMy002opXgCD0yLdfd2Lm +FFW/vQS9hnItg4dii3SaheKeIVvr7+05dtfphcRhsKkEvYayJufu6aEvyTdt6k3MmlZTpJUja3Fe +UfaBL/WEOx6aSbrAdVeqZE1arKY5sfN37XXz9/Z6G69UyZq0GAfm4U09rTP351CklSNr8mnLYNvZ +neGt1yW3sq+to8mVxsbEzu/e15oI51CklSNr0mKg/nzP63Zel245zF6NXPHqAxNFteZ6ci4vV2a+ +JxTK9V+Z2Fmf6ExYDt2xNoNH8A0qtWTs/RpJfjSzZDIpqnsb4nlONULwkzc8t/PQ/K75o/OrKdLK +kYq6Yst37bj0/J7/pajrW49TQfWyShoxh+Zk3vhrMth2qqf2+JbZTbJ5bboi/xbx3F4QHr0tpC6g +eY4se4XqZvdZ5ya0kG/tidJ+Xd/jHftNiQ8hbi0ONBUk3o4uOFEs9tkldeHuFPmD/Q/bL7HvTpRK +LuU5G4nZxT5m9z6cDqC2tTjQTCL+GJqc/IrcAFKqxeJIgpE6O3H/RbSY7DZxxotDFe4uz/1b96BE +MwqtxYHmgvI/TZvmal7ZesfOlNrGphAPydbzFPnZKQWEoTEwaH4dtXOnBc0H7jW1lvWTWVJBV5xM ++rrRxKv9fDiFnS8YW4mKKfKziyTYGz+5JRRpMHEIzeZSpJUjFUyCF5M/UdClPjsK37uE9vla0Hzzzz +sKglAmwKos+fNgZGKNJ2dtL8hVyKtHKkghabQrftRJPjYXTiSzXR45QdPdGnAUshCbsiom+bU0Sj +LxKKtJ39rpYncinSyqrWygGLoh/vRIsnOtDAvSkcN8L4goZDQfwcisPG900aB3xCkbbT1Rc8nEuR +Vo4YU6RdJWD/c+f42d0/s8duS51E4fCyKw6wVAd2RbT1vinj0z0zFGk2HUVaOVJBVwyit7dvOmcN +SeHHU2NIiqEMjqfaUDzRvg323D+l8mTqgeWjSFsjwGLoMEC/xB1yeCf2C2yxeMYVk+S8Cws03RfP +czZwPoq0cqSCbcwOqftxd3UvOvtjctgL4b+0LwMjrjj45XwWy0eRtkaAhWc+LqNFlkXh95JxcBg9 +kSHhSBMyuDG49QtTxjuk8lKklSMVTKnsyZvuj8axG4bvvQMnxBJa9rwU6QqiULwnbmyxvBRp5UgF +LeZfehDc8sut96JbbsVQxCAau+yKxGIDOCr6jb6YlyINkWeH/WKGFTbfaRKaVDQqbh3YhTo9KU8v +bmNimI9nFv+nSX2OI+vn87WxfBRpBNigUzynvkrs8KMCUsEkOIhu6kHR2++Vb1BmkCJG+aiKI6ZZ +bAr23DNlvM0hL0UaAQZMokatlyhssQq64ijCweOXH/gyempuIQ5xWAwiv1KPsaSJo0Th1s8vGq9V +zkuRRsRrywCb97QU+vUKBg/NYqALHXn/zMkUiooS8p87Ym5ZDh7HZqagYWWuUKT9fg5FGgFNhUSN +PC+x11Lo1yvoimNo687FX3/mxyhYm5peQF/DeYdd/QC74hmmFm69fyqfxYR7VYo0ew5FmgYoY7Ei +J1FX0GI4uu+cDL80hPxHPzkWR4NbxefD6gd4dJbsugt9lhytafRF2feVYyYV8vHVFGmqTGTYiglb +WYElxhVsY3MLN93Q+eCu2a1i+FHc4C7ZxcwRy2rwiEJu56hxwWTz21o0atxL3fo5jxlyksOTdvWw +qXk7upTHchUM93Nwp4ieEOHjKDyJ3XBBFhW1tJmpAbgTBY3PBVeEwJ5LammO6/e2oCcxsInIHSqH +2e7NKJGHW76CrpiGPSJpw3zuByntHz5fM5FpekuSUKShfzcYtpzERroEKEJJqQATSonGRKgVtFgJ +a+yNp98IRRqkWObOZA5FmioPEVccCKjHRtXRKM1vLqJ6DT2UoD2C6Puj4drZHIo0VYLoIpqgOBFb +LIl7a3mrxVDJWnyMRCjSeNo+MPpcDkWaKrXYYpf8E4SLV/Y/hZSP2w2VrMnHSHST4O+8c9auo0hD +SKOvnODT5DzYBJ/g4Zv9hkrWosUIRVqYrlF26ijSNGAzGJFMGLTJKXTw2/y6AZahSBPTOoo0pJJv +YouJGNhpNE/+YdYRMI0iTTyho0jTgF1AF0Qoqcc0KXZ0QjRUshZ3rmco0uwJHUUaUp8ansGIoB2n +VBddHI8CxsDWpMXqDp5gb2Sj83WBJl3wSJCjYxPaSfQTFG1XT8ItDKzaeFZE4TbJfY9/cNPEkUsB +3WMkbLEEsVgYW+yEryuchzN/bYZ7W/e8ywK4S6YJRtfGJpAaPNRzBRI1wJ5v/+lazDxgq0Pq7SCv +Ug5duH+C5PcXReTHg9UzIr4QEQ2VrMk2xgB7t4W8SjK6NnYiy2I46kv5mtBabGOyu33bRAt5NbtP +N2H6EKHYnyAjoHHc3tJ29ABfDJhUbUDLorBg83lLZFvfHRNAN2GKG91ZNCEl1TYmJmPwzcbA1mIb +kz0Pb5rteNIytOdSt+5pSy2xWIKfl9QzU86ur1yRUKTZB2qP33AilyINQdAgTqDp2glyKlu66SlR +7mlZN8DkgTbqbHDfXfu3vZhLkYZgjSDOognaoQ00HUzzzzg+sHWJcv5G05XHvi5hO5FGnqTDBOqba4 +yCyVwu3Dsd9449ZabGMQANrRETgYuu7ZXIo0JFOCeAGdASaV3oipxZFxl6GSNRnutzd3Biwvbj61 +S0eRhhTfdvEsSpw7qM5Sne3AIdI4p1qLrghDQr9tlLzSU6RpMlNcyVoctsi0LXNKqp4iTZOJ4krW +osWUrt66po5hy67rjuso0jSZLa5kTVoMuBo5+95bQnec631tWczc3/+l4InaUzc8o6NI0yRRFrBq +41kR2VnbM28f6BjYdTxivKHgbHEla3KgGfAjaDlU23fnWT1FmirlWWzNAIP1m5A82n/Xw5ue0lOk +lSprMfNQPB42bYkEA7ceMniMVKKsRYvJjexQIthf27/LgCKtVCnUxqbKUXQ1gQ3QrQt28uphA4q0 +EqWQxS73FvFrCoxQpCVa1BI4G69USSFg6ihVleg1BUYo0hYs5NU/CxVZr3jGsvzxyVLVXRVRKdJa +Anv2vvOw7cSVKikE7NRdy7yMoVLVXRWRQ47ITMcjtxzedMiIIq00KRTun9uEEtrFtlLVXR1gtKdp +3hKoDXxoxIgirTQplFKdvQXNtrZxIx4AxGsJDB5iwUzH/oMP32xIkVaaFAr3EZy7MN5+intkkL+W +wGSm75Gk/XhtoPaw23SlSgq1sQfUh4tsqA6UQMJxFQUKTjAbHBz9pzsizNXYkq/7LIAt5jtCeSM0 +OZr42oniCNQnLNhit872VmQ30kMrtIH7ryUuJLNb3Cn/Af/BTYeNKdJKkUJRsU7to4lcsforEoUO +MAlLwP53aES4GpmH7rMPIXLgONmsd8W9yRWJLNCR5OjQnj3o7N6rsTxdyvkI3oK04zSD6IpHRVcG +bL+jYdYesTyJjnOV6KAVC2ljPDkF2XJNgUEQukMO7u7Yxx/IR5FWXApYjBxsn5CCCA2jK17Wf0Ui +j+y1zFtCt0T8x/NSpBWVAlFREZG2aG4vv6t0hVcDGOXk7YdNTJvdDK5GSpULLMnLKMEfxZ/YizMT +XU1RWNAzemqklWG6KkKRNo9kflbC44bn/NfYYk1tsDZB2ep3gEpQpM0lUGpbkj+HIG2/tuFe8dqT +H0LOQ05grwRF2vmLKHndDD8hQk4sgTvwKooMgrP9auw6UwmKtMSfILl3XpqW0EFUAtvjVRSl+a4L +Vl59WQmKNGUbSjQl+YQo16JHy1P6G4osbDob8auvKrExTrags9tnxRk7jF7rXPGGhuN0P3mVrMjG +uPegZ+0JSeaTdnS0HJW/sUBBeCYEyMrRylCk1aKzUhrDmg9fY4vJ1npADXe217CVoUgTUL+YkKCE +M/xr28YUeqgrwlBAcFeGIu2AuA8nwbJFFtE17qB9gDL3eofrmcpQpB1HNXjYAsNnrvlAs6Y5BJop +xsNVhiLt3NZDaFaS+acVdG1zRZkD9DDwCb1tlaFIm7mplpwfIk2mUCks9VcR2GCbg91LmW9kK0OR +lvqjW9SpgdNJ8Rq7YiPHMiP1ghCoDEWafH0QzX8BoT3nxDvL0vmbigzqd7spj9nc7KwIRZrssKPE +O6iv3NFoueLYdEWiXN/PueqBL2IyVYQiTREklLp3RPiGp/baTubAT7L1INLdZzvcXRGKNMiIaP69 +wAbq77q2FpNBm8dBA5cbBCpCkQb3QzHxmKP1LnVO+BqK0s5Qe7dbTVx7fWUo0hoVcYFHaR5d61kq +po8NsN4Rc2CoMhRptdCeEMkuGfQbuKJY/lcUrtPTRPXWcc2gIhRpMAqDKR4nH+g3yxXLhgbNNAWc +jJsOeCtDkWZBm+d59fCy3ySlipf9DUKR9kjgENOVjyKtlDOxCiTBMo+i2A+T0m9ksWPlL0EhFGmg +nnYwORRpe/zLCzPs+P+YRJwhhl/5V4CEL99cKKWyoxM4eJBHZL9B5vHDx8Vyv0Io0jz9Lq5vhSJN +Yf0zCI3jlPXrKnIeG23yJAG2B4OxIPSEdBFNxrIP1SxgMWytryZ5deHAleeKsPXVcNnfOdTlZVx9 +u50rFGny4b4bEApG1WVQkronnj8/jtB+pgONIh7BAdedqG7zwrbLSgpQpM2KaAInwdho5EnZFcr3 +x7RdXuVIhiKNzaZIs89AH8tZUPQTol09n9a+OIbLjF9MwiiCbJCMH0eyfqmAK17EFsbgEjy8cot9 +9sNhlI6VC0xPkQb5KWhiB/0oPrTbrwKLTkVFldZqIR1HKdzWcDTI7vQKADuP0IV7cQeN9dxypcAu +jsbRJXu539JTpEHSZqJSGL2MxjXWv7/d/ms/DiIimpEnkewFAg4kX8zSUaCN4Txq+B4JWyzJX/FA +8xlcqUvlLg80oEhLi1MoGgvz6FfiGFqE4jRSGDqMwjCMB8TzKBF6uP6mF8LZ+wwKANstCMIPSRtT +/Ff6UAJ3g360+JNygekp0lKzteg584uWdEAaQxPMYCNKTcUQamIsCppOikso+CsEbkllKcmfUr3o +aLIy3/tCKyMmWq7QYksvSRjYmVSZXzOgSEvJfhSM2aX5DmkcXepjv4qUeFTlOoH8WHp07l9DZLnX +XBY/SH6LHR8AjPu2f3UdMrVuukKLwc0ISvCr+YiO84kBRdpDuLsKh+1zuH1hV0Ti1NzC1BjpkEXU +4WutPQvcpIip6ctK8gePs6YdbW969/so2mXbdoUDTQWrFOE/5jsWPS8wHUWa0oKS4hO9njacoE2h +KSguJpemxmNqG/taU/3Xo7g3Q+h7jcJlJfmT4AunwKbk9+71CXTght++Ilzx3bgvleSefxgv73t6 +irQ0Q9eIwGuqVy02BVFcfufiWBBxrB09Kdqj6O+DX0RUH8g60DC/K56tZ6X0O/i0Hb++Motd8pO/ +EF1Ml/c9PUXazEMODm3lw1PYYuNoDIqTcKTf04IekEh360fy7pFOVL9MWKVK/uBxYZNsT35PSpHS +XVEHrbyF/BURekX0l/XFFYq09gxF2iQKR9MoiV6+AUXFcRTHvRr8FIguZgiU7DH01q99DK3eVpbf +FWfElD35Ll4mX76iYYtyN6l9cQGPD/iyvggDAqtSpIEMRVoIhcdS6JIJ3IF+hl1xTBYnUcf4FMny +FYT67UGIYtj1pNIslkBJP7wHo0NXZrH0dY+rFbeA4KNtxpyeeUT2fSVgcm7Zwh0RVIo0uFvkx5Po +OfebtmGMU2icdNBjwTn0w5CYFM8zf1qL4+4cusuS3a/kb2MKws0rwcvk8hU8RoKvaIUkK9zHYTm4 +CEXaWyP1gPaCZpUiDXJ8OKrAXjLAfJK0MQXnITF/EvU5QcNW6iFc9SxoQ9R3sl0xf7hPkSHmvJi4 +QovJ37lbe4GdfV4pC5giBALm/q5Oswuoe1vkQT8fTcpfwHEI94w4KhJX/FmNm0cSH5M3x0i6P4qB +KNkddKHJHGyxGT7F41elnAmcI4++Xysk8QkodpRVJzTt8hGKtL4H1GEL5MICbmwJlkVnOnDAf+Yd +7bXoQVfzHsTHomjqJB4G89E5JCrZEwmF5jxkHlts1o6uKNxn9q4p6g6Z4L+U81VCkUZRLNPl0ijS +ZLfd3EbjxiqjZBDrm+hnH0XfjE5ZEB/+Olp8jkWwEexB0rfcWfOfhVaYJsOE0opcLj+lUo9zxr2O +osbd6RkSvkq3mEfY7hOGAaVRpEHG7t+bQoQIdTGKLRZXsCu+LR4nhroZTY19TES0+WZ0+PVi/LKS +QhZL4mjKqxYrPwn+uaj9m0Yk7fjvHr6M7xKKNJY2M/+0T6NIk3tF9HM8ou/HA+YwttiiLC5CSxTn +iuK/h1E8rLaxaRT6Vvb+qQLzilJaErHFwldiMTi28pLUYurjf1gOMLpJaO309bEZijTYzKM3IinB +HhARsRhSRDQrRUYlxE+IaMr/cR7xwUkU/FaJFmtJvllMSPOkrssdQcMjl5WpiSIsp8MgFGlDNN0o +ZCjSYECC70WxFDlBJIyjIvkX8s/UhpH0I4R++bjdDsXoIh97XDSOirnATOmP2+cl1WLlziv+8HeW +J4A1j4DBfy7j2xmKNMa8TJHmFJX7UHiWAWRecUpbIsoHo2HEvw2hn33CLiEr2CVhi2W5YgFgXcmt +4VletVi5s1RkZkuTRTU8STOKvwxgGkVaq2mZIm0SyZ9HsUTrjssWIycehNH3fsyjJzFMKMbmxNHH +s4EV2Lk+cL+9JSHN2FH5bYwTNUMRi42qr3rspX87Q5Fm9V2mSFtKofBi+BdkRXmU9IvYFUexT2yR +edSA/4d8cFEMvlmMXlZSwGLcbfzBJJ8kVb0NlSPKyKczNJ+jKyOJ8ELp35frhlpZhn2KrgPLFGmT +M8gCb3mOaJzS5u75B7baYS3alf4GASEFoRi+yZeVSBTIPGr+KrxnRlRIVZf5fGx0SVT/DZBuQqvF +E2XMLiqcie479EEqcqR5mSItNn/EP7/nnD0dTFo0i0knfKMnRPTSzq2AxS1lotne9RhlPBMsrVYP +70zaT86TtW/lPh/7Z7+m9dKmt6NppAF6pYyeTLZ1cy4acGYAMhRpkE8Cy7OiHIT29B4tKtrnKXsC +j0F6xCfdtQj1AQm8GWXNeRTIPGpn/S8lpFk/KvNRLXwyU10jBy7iXkwDli5jTAZbHft7tzsGue7t +GYq0FII/lzqI9Xny4IGMOESkTuTjhAZuwaqTS2L0QfFy71mgjcHRhP9iisfZfaqsJFj58f2a1l/T +iwu4Z9GAwc1Ti6VqkBnAdAMn3d/L6SjSJDKyyzPtBVFJ2T2snbFPJHjlnWi2vH4sKGq7jE+1IGUF +GEL/KpWqQHa3u4FrIOSyWfdVYNOO3JH0v/LXUhL8SYAvp41dELXtxRArhDhbzdTumdIf2SossDXR +nLuvNQDKDFuXpcAI2jIfTryXl0fqm/3lqCcNgPh6kiVxOb48KZB+LF6yBs/DoM/dxtj6m7srsMFb +bknY09/jYU0gYC9jeTokYzcCrL9FWpL56WVgPeMlN1RIAS/LMjUCa9JRpF0FYMiS5pPvkmDIUe8v +IyqqxwdgYF8izyIVMbYyjTO9VKoKQpHWt7veZ/UM6SjSrgKwZHjGL+8XUZ9tiC89pVKnIXFYhr0x +okMcXyFPV7SxZynACEUad5hq5VpNFVg6m/TP25Nv41EyYCqjg/6FSP7uQr/aIiJtw6CY+eTXklSi +DpUirR2EWDP7tquxziPnkyWy6H4vj0jRSj56Kak57bal/V9W364cf4eL+9MnS1SiUqSBbqsn0N9f +geCR5BfsMi2qr0sNHkqGlMAy8YaYCgZlLcyJPi6WpkWlSHukL0A1OvJQpJUg+YctSQn3zj4Nbalt +bNqv/iO7v67pTalPsDIyu9hSmhaVIg2wzhGvN3Q1FolJqz9Jiyk/fB2vvi51oPlnGgrIZJ7nrFob +JBsfZqIXlSLNM1y3qQ44r3grQ36LzYoJu5whGSh1XrFF/StBelR7P4NfX/40XOJzMkKRBtg6jhWc +vRWwWFJMhuVv8OrrEqPitKj9W/+6Fe3xLGBjJT6MJhRpzf2tlMc6mIcirTxgOZ/Mo1m7Uq8BKzEJ +XqZwPP6ezEDvIhKzgM2UcHwGEdlpsoJ6xjsQAJEKbCg4gztb+C7tYom5YqYpQiqWuXAfCmfnGz3+ +0oAFPsL20YcA1eWgK5B5nEN4KJZhhzhYmrIfaXXlfiRLe5aVknf9tCQ1sJ7q843QXQ+bvJWgSDuD +8OCZrJtFJVvMr/79bPOPli9cRDBrzj4mjZWkhlCkDZq4AeAyVYIi7SKZuycPkZJlPh979nIaP726 +VV3aWZICQpEGBmiqv68iFGknkUIeI+G4b7LeVZIubcQ+U+NfuXIGSdlPWZaMTzrVARugW3dYQyMO +V10lKNLGSRszzzz3YSI32lWUwhwJaO/87lK1OSmB08lK3BUh5GE4o0wJmogT6hEhRpY4R+ZQIDm6W8 +Xy1JF7HY0rmsRSTouZwAv+fVUvQQirQmc7dLANbKUKTN2MkqU4QiVGmxKSWSJyUdWVdyD/G7kJlJ +LVJBVKCO4QL9de/orwxF2rwfXSAFS46UNqonzWlJyL7yAkSrp7Z/0VKCHkKR1upubnSCxspQpGGL +TagX6zpK0vUswbWqDsahuGo2ETaMlgKM9jTZmAAItDOVoUjDvbPqiui4pSRd2DivmlddGVuSVueH +c5dK0EMo0kyt1qEtXIUo0hJhNXjg/idcaiU9tdppY4q4egrn+VLWixGKNBcrmADtrAxF2q/s6Ffq +xQmxJF1TCLXyq65MouxncViUnVJxPYQire8r5pG3toLKUKQlpExKVeJq5SWU/ujqK9H/ziE6f/Xx +luJ6CEUaCwQq4OqqDEXaLL+cBJcmJ9FEzoOHo7nba+DP54rrIRRp2zsbfPUmujIUaeXKz1FuktuR +7RKqzP2quB5CkQZoYN3vcVWGIq1ceUFHzPVz3XqcHx6TiuohFGnew0MBsNddEYq0siWOgjlXLPoT +Jf3Fx3aEIo2q5+o8HKgIRVrZEss9kBsuLun2xc2eL6oHgpDwrkCNUG9uqAhFWtkypVLgZctBPTBF +EYvpkUf2MgFzqIkTKkORVrZEcydryM6TWO5dfLgoMMrpoCImps16mSItu3BLasuNaRfVioP+yxWX +maG9mhaTkvHVF9TlzrnywmQxPQoLvCP0SCsDLlOknURakk3ApO4XkcyPIzQK7RgY6VIuA5Pt2uur +2ca+qksEw3pXREeKPieTm9ooSlhNkTaN858DIkrxFvz5B1qwM+ABjQVKaIbqFpWsQ+lh2KL+ezVd +kc+dEDV8up9OFtOjeFnW20Ao0qwZijRIesgFTkSRbhxUk/CvEORxjfnxcG++u1eUe7s6Vn6T96v/ +Xk1XDOZmFXB0Sj8VsOQv9kMy6HX3RwQa7BcyFGlQ3dGHhxrP78UOmZJTovz9jhnEQ1Gcwa4ot9O1 +x1/vtMsmOxJ7pFxgvykuxJ/JBeY3cDsYmy6yN1pp7mas9OuErtaaDEUaNHs5dYSeTL7RJC7CnQj2 +11Honi2ctICRKqIYX/hd1o+6H0W/m1kCdBVdEcZywwKUFg0mb/7uiSKKZMHkiHT6rP0Mm9kYB329 +lB1N2lFKEdr5SRmKyVgMwfvctH3GA7DL88GkuOckGnsC/SwTmq+ixeBPc0cBZKlMTHff1FKssCLl +Bhug+3ud9Y3ezMY4qJorGkPpNO4sp3DbXZqKTiVmcUCcrX87kr1eu4LCSRRPikFRW9x3NaMin0tw +o/DTUK9V/rsij5OgILSHAAMinmWKNFmdtg2exK44lUbjiijNnPfWKg8lp1AKf6gAEIQoqohRWTq2 +k1VHBFczeIg6i0lxo/u+W2TqCeoo0nC4/W8cBM+j9N6pJE4EREtqwnSXfHRxGo/3yFph/mUZBXGk +hHx457D6latoMchHc66Qtem8/sbpYosy+3Mp0hJJ/iSS+RkxyS2lcKr90T2X4rEoqp2bwx1cCv0E +hOWdaBSJUSi9fC9ZWFvUYmVtafPnWkzhp4xmfuc/W0RRIpciTXmisZZstrGnlbkUOpoA4pkzNR3I +Py2TY11RZMQ2eD/Ga48jS/hLigqsiMWSZSyaVcQx3ZWokcUWiq1dXNBRpD0VJEVNfyaZXJpBX6vh +0UtPgc3oll+yInZP4qa4pQVROIpaHvzr0iw2KJYMTNYVF4oxw8cQ4SJDF9mQIi2xK3FDMoW976YH +RXRibHwMvlMYRqlxhQTNsIzjL24Llpc/p01HFOnHlp+ulyKKbmYgjX8sbHDn2HSssKocirSIenFw +i+1iWk6lYAeurR+MR8fQ/Q9cz0Mz/hEmdIuCLRaMoaj0NxqwIhZTTDwqVdJ8bnFl3thiC6JYOPmY +WE2RRonY+lDCJU5HlDnYgVPEfU/Rd/0q8v2fiT/pstbCwV47ccVoFI2G/6ZHVVHMYt1iycAUXWdM +Qo8RMPh//IVVzayiSJO9P231yxLpypJ1qSWZrES4b2yqY7amIYwGtprsGGgsSbjQ9yDLg79bksVk +qnRgaTGsAxYzXijgL/IwWl5FkQa599kAR3gqUFJOzS2RiDSHxi2J/3FPEI/J8I/0sva0eJCMYbe9 +zN9WCjCljJnYlA4YToOMgZ0u8jAarqJIk83/CIkZiCum0tNqw0196yt3Lf3HEtm8zoehucafwjHZ +MoZuCYs/VlUUc0VL6cD0W9+WVMINA3nlL4voWkWRJgfs8F5STwpOqeQpdZH63HD9pqXwTJDkGzHs +imFZDCJpDwq+zH9f1VDMFcOoZJnXTSu+lI9paenY3YV1PZFNkaY4/PA+HHJcSV6R4TYcd8Jooddz +NLVpZhRbTML/IT4tHkX2g8iyX/pRKcAUCypZFnTWWcrnimi0yEx3IpsiDdbZFRw4Eg5GTJ6Bo7hX +CaOZKHqL/LEpHAZnJR6aaJzaB8mcZQvgf5ALzOgHZH/pwGZ0a2NfyV7Vt/qTaGFdcjZFmuzjZTL5 +lCI7h1ELtlh0MXXW/uPUA3NhKfr/eDv0uezEYvwY/MbPeK39Fmlj5VjsF7ple5Mon8WW7iusC2ZT +pMFeXk7idkXC/Tdwsx1DY1OzJmD9wsOfjkpf+yeJTH2E8UBT5g/Kt79B1AZFxdpYS+nAzuzzzzbl5a +tUZslXyWL6wsmyIN2qR0GlsMh/tH3gdbyBbv+Ez3XeLnH/iLoHTAji02YrYr4sE0Opq6X+S1w9KK +JMFyR+nAziu5hZ1GfJ5dwnC0SHY9kU2RxqGUjAh7GDohwygeC83Fl1KQn/vHz4S/Ndzzbr9sYv0y +GptHY5d2Qv6NqoKrGDymdBZ7NdvVV8vzRU4+ns+mSDuPZpJIzTxwvJ/E4X4hOiMfExe/NRU9Vos+ +YYfiHHZFrhONsAht/YhajGIWaykdmH454rSa3xnKS/9PLKhMXkWRhqbS2GLE+uklbBeUiqXgVn4x +Gg72hOEHeLTrAv/8h+tuQO6jCN5/v518owBFGpFyLHZaF0KnUN4N6/KxtxTWtpoibU9StidYtAfJ +k0l+HEHLAgpJ8WDwZ3aRzMX5knuOXy/wkLEj+D6oTgAVccWs2f6icl7niuNQzAcMvhwvrO2pbIo0 +2KI0+XvZwbtQMkY4L2DLDDororA0FCbTzemOrPPJ364dtVgsKlpKB/ZCMlfDoizmvXu6yPrsc9kU +aTKSWfuv2nDDmeXV6e7gAlJENCge95M1ek+LaGWuVg6i0+pvFwamBEsHtqSz2FdRXouhh14prC2V +TZF2ucEQfbijipKZbfS0eolf5fLLPnYVg8eYkgtsSRbzBr/5x75cUBtcRZFWvhRLqTpKVzWdygV2 +Gkn5nxkdjBZWt4oirXwpZrFg6aqO6kAclVF+YN8p0shOZVOkwX8tF1ixDtpeuqoXFDHnShzqFg1c +loUic5azWRRpSL6fLxNYsYFmR+mqRnUbIY6iAhaDd/sLqpOzKNKQvFNE5UkRV8QpZ8kyrgNxl1LA +YujodCFtCGZRpCUecnBlIisWPMKlqzqos1i0IP2xUmTt2WWKNDQ/UNdeJrCrOOcR01lsVEEFrHKp +CEHzxApFGoLKzjLIhFQpYjGlo3RVozq3G1NQgSmA9HfsBfWllinSsDhtI2UCKxbuLaWr+sPTuVek +gmd/F3vKLi9TpGGL7QXlbpkoliv6ESqVUsqvs45/qeAazvEi68WWKdIwsPuVooso8gMz+lgdtugy +CkOBkm7JzXhh7vQfF3nocjxDkYbr995kuXyhpVhsvjRg/lxXhDihyj/lq+ChU2HFsxmKNJIRt9Et +5QErpY2pfEBFRdE90IQthVZ0YD8YLTzTncxQpOGqFYDXUh6wYikVqaeJ0rZB+3VRUSrkioqEPlb4 +KAyYoUjDVbuQLm0j02UppR97uqRd1tCeW/9kYU5+YIkWtPCHdxdUmaFIw5VwUp4vE1ixNvbNoeb9 +zpJW9UONgWoVsHiB+5M/ReoJIwXkPzSKNCyuuof9VxdYAAS4gLkUTTKve7YuLRSIZa8e4OF3TxfS +iBIZijSkmLxU4TooFxh02proBl9JqnSrVXJ27OT+8v+U0FhhgiCYoUhDF0ZL3dSwIgUo0ojIgROl +7i5JZROUacIvGSylWpaJ81GU+i+xILBlirTJaNmHiRRzRXvJmiCfm0jIaKrAzsV7P/pNbNPCuz8D +yxRpgd5ymRCvXhIMddaBUiH/SfV8AaHawvovrVCkle2KV2/YIuuJqcXFAq44f+x3pUXpHwrqTGQo +0lAQFV0inSPFMo/RkjXNi7kgZClewBXhd5CILhXejapkKNLQKXNp+18vy9V72iJL4dwraE8BYMpf +PPt1cemjEiokyxRpodBVbmNlTJguZa0Rz4iECrgibP4AL0JYuO08l5kwLd8Vi0XFYMmaFnRtLItH +zEj1V+96VwwdtBcM5BOZCVOf951lAis2d28pWZM+TX1VHC+Uurr+IP5+dGEuP3SCPrPBuy9ULlXx +1XsGfRHmKlBEVGgHfuJNj/+Dgt7sL6QUZlbZPgbLDfdXbwGLvo0pUrRQmcNvOtATQ4R5uoBkiEpm +d5ZekJKAwdJ4IYgs6J4ipVCs0Mkm/7sv+K0YGi/MJpDJkp/imTKBFevHSufCPK9b5nFJjBUgVYSb +IzOLH0D/WjgP1h5DwU3kAWZZUiylKh3YtM46C2T3RP4vvPc+89ZLCBWewtdml9N51y6VAkwy+Fgu +3RXnZF5XqI4Crgh/v+emY7dLaKuECkgJu4uNpdiwpUQaICyTciznCkmX+Hy3K3Dr447rPiahf7AU +0lpkOUgpNWIcPEp3xQVdG0ut4hHTqf67g9t7zsbQXMGHLiWzTebK1bPYtG6JwCSyFwJ2bGkWoOYl +KIoFtFbKYvJ7StY0qgNWeKIXHn156+se5nn02x0VBmb0cRlRcVLJBfYCknTXsuR3DvrrzB+Moai9 +gNYyuMlXS7GB5o9K1hSTcxVMFqQGho/NN5/5A9s0Up4ucNsaCB4nde08Wvjw1dp/PPbdD8WHxFc+ +XlL5ypRimUfp/diPdE+bJiW+0BOok6ef/sP6/3O31BO357+p3GP0DGrEeNhSusWi8wa6C1ls931/ +E/tgfJBHf1vA3yvWxkq32F0660ShWKgbSth/8Jkz71gYRz/9bv6bKtXGyrDYj3Rec7LAGjEsr+75 +/acee93fvR/NF1jKUrF+rAxX1HnNZ2DBHYOwZu7YZnP4sxK8KZz3pkq1MfjFkjWFdQHsdMHJewn1 +/uV5adOHPiaif+rIe9dasJjBlYKuuOD+yb90jHx08efYtiWUr0wpFu5LzxXtuclsvEjwWNi5efSG +lrb33YyS/zfvTZVKqcqYGojrKvcFpWByfib2iYuLv+4d/wVa+jifF/2VAisW7u2lKoK8bkozqBR8 +QHb6wydE5+gjwYM8us6S76aKtbGSXVGJvZR7abrwcOrXc59796PPfeLRHzyKFvL64tWIikYfl95B +Q7suAoRldYdyPln8znc/9D3LZ223X0BwXspzU6VcsYwkOPtUM01GUaHliujkX/zJ8d/+yM8/OPUx +O/qwJc9NFYuK4VIVyWHdapToUsF5+UszF878zi1HTzz6FQnF7HluWgMDTf20L79U0GJzB++6ffMr +X/qzd9/3T2g2H6FkpTKP0ttYWncwuxIrvPhtNjUbD5wf+7u6N3Qi9KWi5StTiq0JLtliin61ir3w +Ou359H+d/sR9f7m4y/99hPIdbrgGwr2OG4Isrir0uG7m+/88OjF934d++LfbRfg/ReObKhYVS56l +UvjR3EviUsH1zPJNo+/4xzc8/8hI+wGEnpSMb6p+EizrnsrK4cJLU+HuRz771q//9G5o+ytsmY5i +5StTirUxqTQ1ZDWErmj+pUJLghGK/PDhhePzP3noSVsMwaDxPRXLFTWLicUVQd2iASgVmZ8+Z//o +W/76pg93/OmfoeVzNnRSscmc92hFLK5IFi25wMQilGHytj9f+JtdP/3Pi2QDS57FppXqoLWoWMpx +TWldGyOnW/+80Fd+O/Ty+F94Fr54jKyuy2PdyrpiKetzlnrCOVegWLjlw+bETcwfJW/62LsJR9Os +8U2Vyu61gWayBLZe/Tk6hG4rVugrBz6y+eX3P37rt//rC/kRVDYJnj1cXNErj+d+n7BSRQt95S09 +X2fftHDHh/7f3aiiFsspmNqatQ46UQLLmP65Hyy2eHK66Vy4/UcX4N8Q+HnmjFfKt1ICUb2oYOVw +kfzCZdOs6jbzW+y8wNIg0E99p7XJNuIvCuwVA1c8jQp+77eVP/od9J2P1/wdWU6UZ4vHTAZe/CRS +5shqd8miPniDYgIhn/wnuNYzOJTVwAocSNNA7fM4WB+wAdAnoWIyp1+/Ik4VPhrjF2+WqTMvH+s4 +dhTl7VK04KagqTGU+hyKxhEfVOk0kuICgp07j6hx88wF21eXbkTHs6s2v8UmQDfNDrRSodb2w8CO +ismC7oGmLC0WbmNjsbvaF/9/W/ueIKE3z/oCzWIpZs84GnrPT7ZNjNhx6aNzSLl/Eil0ulO9I/Gp +SKPsFndkI8hvsZQHRHqpQX9RSJo8qXPFJT5eOGX5jy+czzzzx776ND96kbWIxv1fqx5Gw8jp77Abhh ++qsi/pnQh9AMXIzLn7/3lyqhAdwq/gcOP6uYNK4a1afeYklxsbArTn37f6bax/78z+vIEDUPq0HG +Yp+2RNFYyh6d/DbPI9hqQj94nNmm1LyZsatrx+1hDPdEMPuLV404chFuzbkCMaxYoa+kg898/HXT +n5VZNQsQDe/JWOzP7TEUw73H2RFssTT/I3TwAfou+aFEB5Ji2N/Dz4k4rIazv3jVLHZeF9bSWaeD +Gsr0zA//45O/+K+Du1SWm7DhPRmLfbIjKkWnUOzCXv529azH6M9QdHbq/H+jAWCykziZGF7doK+a +xX6uDx4oDgvqnHjw7i8kLT/63/MqO2S8ALC0LTjR8uu5WHTig7xb+nfejs4+JkYTF+55Ch0KPbVt +z2ICpcFqku+rBmxct1ZlTgwW/kryhqU/GG3985ck9T674T1a35R0h58J/seeZzrO9oqMePDjEkre +HvDD1uYuQssWnllSdzpGsxFcNVcc03HCJ0lgLPSV+d/6cPhjvReP+tU2Fja8R7OYMhCNoeONDfZL +Vl5C4Qd4NAvrLRcWZ6Lka7HZhEAh5YJlNLtarxawn+othmKFwz1s7XlkYfZvPqxtj4sZ3qPlismp +4BiKxUejU98V7Yj/9yCScfefOjtD2NJQOLkwk1q6/ZDVUglgJ3UTHAuFF5iS8m7+H/+4s0ZqEfMD +0yy2YPKPo/hUODrRii2GngujlCxG5e53C+IxFJfkexaWkiPbO1ZX6wqw3wgXiv9n7pVLRYfeivfV +uzqOf/+XKrCw4S1quF9MOS1jKHomFp43434MneyILR0Tx5L932vgXxbHwmgmlYKW1SdaXLU2tkc3 +1lUQr4gFvxPrC3vOn+l5m/rLMcNbVIv1ypOxKPr1xXB4LoxdEY3WWOb+FmyWJ+ei6MHI0RiaFQiJ +6ypgV80V53Tjjvmirrjka370p4kPuNW7gsa3kD82dfbkyU9/U0JfI/xUb460+Lp3bEtOvTcqPchH +wzBprsf1OJr9xavG7BzUddBzuHsuCAzunW+4eGBrzc/C5N2o4T3EYpB77I7aMemZ2j+yz/8e/yBK +3I86Bnd/Lpqup632Y3wslrhnZinZt5qQ86pZTL+U6vzqkwsN5CY79dmZ88/8Pp8fGCmfvPt29n+N +hafG+fAse/RB8ekZyAfump2Tb5jpiN0kRcND983NJVtWZx5XzWItuomy6YIrZ4ns+Omzr/6B/xOH +LORN3PAW0nIV1j+VtvLRMVFCo5dsaNsYEh//zA8XUgT2g/y4dPwHKdwtxMP2rC8WoUgrXaZ0wC6h +YjOm725K7HjlqfTr/OTNqOEtRKvcaJ/8T8SPL+KkKXizDPldUPwFCBGOrSjyi2NBmGB7U8pEHZ/1 +xavlirGw7vkDSbLEgl8afPyzR/7lb17/tAosbngL6aAVWrr0l0gcG5deQBHs8vCxJHqpndoGQyMH +0U382Kic7LtTSc9G7BUAZkB68VKxNgYfOf9z4V0H5yMF4KttLMQGvoG2fruN2/S09dMygh/4Ajpn +ua8FUlQt2iqNB5WF1Iws/MWqarxabQyO6g6c/0HRE7ufG6/5nvPjd2rsE/G8wJTGL92cRFuBYHJN +tEzLaAHWo8Dd78VxH96NHjRZgso9Mynl+rlVi/yvWvDQcUOQHrcIK078cSVtvfTtYwVuIa4I6dtT +H8XmwAWc/uUkmSP6Knr5yXv8KluVXYzH5C/PzcmpyVXArlZKBfkXci+9AMUi4f6ZP3ly9NS2R7UV +dnHDW0j5YOe/Pv0A4dsOo6nP3qKI5BjnB3bcF0TwNhF9nB/DFkvtk9PTFXFFMnDPkWlYrB+bufmu +L6de/+GOAsDUWAvgpaeghOzPoaUf3EAGtB3owU/NHcTRByFeRFH5npmTKTmvxX4jYFDU5YpfhWKR +fizxOzsX/vq6R24pAEzVuqCc64Q8PPqqOPfTr8rkxCd0+ysz4widQNqw5ctL08nk3Ko2XSgJXq5v +45/MAeY/mnvp50gs0o9deF2ooadXKPQ4WKt4+CtPDS+LKX5pn6lVJEPYxz4/g/uxyGYCLDjVgqbk +9OQqYIVccbnpF6Yyy1RCWMdgMQXFIo8U0oGW3/9MZOEh7XbDW7RuPzl1iePTCHZMvvOCTZ3i7vn1 +k/MIfmtACqOf+W/4xvl779uXYLMRFAoeyzVQykn1UMfmgf67IPOb+qW+D9z8rfkHRtU3McNbNAef +j6egnfjdWIzsNNmG0L2/b0qhF1AT70dnLNEZzryTPm/ms75YcDxm1/5hSwCmSLrjc+JFXRFN2D8+ +/YvGXZnbjSQz/YYSyG9BhP9jThaTGEDSTrhn0QQensl8FDJCMnmy5HC/PDnbKKGiktKdRoOCctGn +W/LNE10fy8yiRw3vWK4amYQ/9amRjDSCoJNI3cHgV2f9p8bh0mLJHTTUHmTCB/zFgekZc9CiUnxb +W2D08cO+QiRKlVnAcnjY5gPAx7UU16OIuuBxS1FgiyjyO+6f/k1YfWN8ElRlnkHX0aaaNzaZTJbi +eqB+xVEUFQseaCl13eIf+LV6ixveURmLcexhn5vp9viL65nVR7X3yEWBLfa0/uV0BpExsKuxR1MP +bFfpehTypHG1dBTvAWfqE/aPdRUCVhmLlb68FAePcO6Vn84UzVmSH//47pfMhYBVZgHLQ6XrSYm6 +r3fAoqs05N8RA3/dXQhYZSx2Xel60nqLxRaKUhOlj24+zH9Be218b2UWid1Rup5X9cvXwkVTKgTT +ly5c/5T2OmZ4R2UsdmvpepT7c7+uiEtFLQbffWf6jjbtdbxI+cqUgjvXyzjwfEm3VgXa54oPeMDr +3wMKtuTKuGIZ1OWXdK5IBj1F+WDE51/q+i3tpXElVGa9YlD9q3tUaSQLOh4IGFzKkyZlyZPT/+OY +vRCwyoR7zRUX+BL0LMDcryv8dNHggR4ffCTTs0PjeyuzrE9b6pLoKAWYIXNHvNjXLsAJ/93ay6jh +DZVpYx9S/z5RCjdr9FdizhWFf6U4t2/yupUpBWNglWlj9ZzP1XQz+/US9MzoLabfd6UXuP/Vwmyf +lbGYsJveBYCnFE7MKf1yRR4VXvym3lTzsW0Z/Mb3VqaNDbJbmO6R+lL66bm0mHNFwcE+VvR7xx3L +m0yuZUrFmgONJeo5rbOYzBeNiVjS9HKFGFdCZVKqMjroF3TPHxTpfHFXRPDQ8ivjeysD7EOl65mW ++VxgYryUrSN3Fr6nMiPoMnLF/zBa/FZCG0MrR4UWmgm+AikY7h8tXc9iQnep2ALTHIkaXq1M8CiN +NV2VPYqYc0WWomTao2SJFylfmVJw2KIFj5JOXojp7kqLRVPgEoBVJnhouaJcip6jOp8hbE5SKV9d +rhrDq5WhSLtB/ZvgS9Bzt+7Kq+QQ9DJKEje8WhmLafOKZ6US9AR1FkvqCJELi7HjViYqaha7aClB +TzzXZ5ZIsC+lSlY0GF6tzEBTm6WaKGXeVNKFezzwLrKqrxRglXFF5kgXFRruL2UWLqpLDJdK6Z6z +NRQpX5lSMPNoZYGPAp31JejhdVWLneiYWEZJ4oZXK9NBMzV1Nd5upq0EPVFd1SYKkxCWCKwybazR +px2CW4Lwugcr8aIrZ0uRZUeIlfvFghYrIwnu0FXthWIrZ3PEePS2DOwF/Ucr04JxPPrpWakAsQRg +pSfBUL+q7yIqtjBntUQNry63sTPYKZLnyKslKD7dQ0qvndIMtSr5eBiRJyPoyfhNJQAr3WJkB22O +vIqkAie6lirLFsPqw2m1S5mBL7N3EkyadtjjYkNh+AY/xvLvPJqb6bAXB1Y62xZs0TF3nMdOUQ6w +uOHV5fJNkd0zS+g8M9KPdu0GfqQm588DNsJT76PtkATg+TMimjr7Lb/6has10JR0C3PmsCv+5sBm +Ln86l5qLJRyAEqcnVYYdPJI93kQOZFpEonoc5QT+vfj0W8RVNWKYUpV+joNiGBXLPXDQQJZjErbY +9KnP71GHGpOXTmrAokhtmguIV+7HSMiCxamTX2lRv1Aw3K88XJdQMdETy8wVXa64WgpNDShoCqI5 +h3lUfb+knptgYzjT8tckWWYBLgKPXv0Ip5ESlfZwvaVYqWS9K06V1cLyVV4mKtJPcTwKfH2RvE9B +MtUHW+8YIxWHf/dzDJ9M7yIvY+j86zMslAVdcdlisMiR9rhUP9IBO53/wHVDiRle1VwR+mrMIlya +Uy2YRKKFFH5sijzzzzGPpufT2vpOJk5b5fdnzyRg1YQVdcngKWi87ey6KujY2XecabMVNJZiGmOAWh +ct+C6gfQzqrn4sWjuBMLRhXqAJJmFsfIerFR2P/1Y9rPlhQVYdGF0Ev6NjYJUVlHRMYNr2ZOKBDj +qOf2pZlFlMCR3n4IBElN4J902Kfgh84jfmIyTlbRRtH4mW91ZNWICixHpbBv+xZ1Ky7ZJSoWKZWs +HwAHy8wURw2vpjLAFqH4gdTcFHq+y4JG7WR3HBrHFhNHx9BkHEr/FR8jT0FOorGFj92dC0xarfIR +2iFYBwQgOAd2CxIqLK/qmd/G5aLrMEsQrXwKdkXxGe/ADkQiX9QexnU2Fx3HWMLjiqPRx/98bBxD +R+fQo//boQ0f87ti4M+AOeCwNTMBJ/t6vsjv6w9GwiYUixxlvVrihldVV1yUMTA0QN2jqMCQnzAp +pMf+DUEpPAavozeJD8fGZnCMfE4M/NmNt2bViBGw50AD1y70BoabHe6ihzEr+g17Y0gs5XHLisQM +r6pR8XmcZODwNIeLPgpxMU0eXJ7E2M9E7H1x+OgByP84/HyNUlPfaX+OatD2JxSKirC2GBn/isj6 +KalRQpFWBjDjutM2FNwvTinizDSO7nsIFhc5yXBufEyCUnAMfvozGBiux7kI8zq/J/xRXv1isST4 +RGmlWtI/bo7KpZ7em7nf8Kq6G+nA7eIYjh9TeKASRvxSrZ+cS7w4Ns5DfjSufPrdUPoy9nyMXeIP +oqCWuhdcE1yr7vktRQwmEafKnMaNG14lriiDHuKKcwdsFnJginKXnbSx8fieILbYFPzi5zg+RbpB +Qj9H04GaTFUXANaBM+bSSpXWZ12xMoHlf1QLD3/LGaDExYjwNPLjgeWYn+zynooeHIc8dsXJt9Nh +da1MEoXhH4eatUPmCrki3IPUJeAllM/YFUvZYpFdEQaibmVk3hywesVf3qCcRmE8vIyCATvWHzs6 +Bre3jMM/f9dtfhIucSGCcGx6TMoFplMKLQjNiiU9btGf+ITeU+bMmTEw1RUDvxBxNZ36aWoR2RUM +zE4YLvzhPZOIw+F+6nPf52dI5kgOmbprKmrJVPUKMEkH7Cg2L48Dq4iKyXl9Yhgrc7YzanhVdcXm +m3DwQM/NYZRtAm6NfsIk4+dHL2JXHJc/tfXLGP+FVuI2cOzkL0fVLxbM7nHwSGO45+1FS6VfSoVG +r8Iwc3mPJo9boLznV50I8SSh5+1hsnFsbE6WcEr1+Z574ikSvpfwgHPs6YuaGQpGxc0aGfezxYEZ +0G39g1JqJ6hJgeBh4ok9W86Y4jKPE+v/a/fzIurh98zhlCoq/3JramqG3DCHG/r4xMQXV2okL7Cj +2tGnJUzen9G3sdhSeefLhg2vquVrFwns4PQCTqywH4yFgd0OkThKPhtTJm+/J64uPyb8XmP/8dca +pGL9GAkgRxqKF0tvMftSYXbFXDGuBY0dQm2BsbmluMrr8jV7z4MdONlR5wDiyen7l7DFxkh2GkZT +/37v4uUayQeMsEbehUdjxRdTTegzIkkp73zZUcOrSxnMWFV0ksBLK/BWaetWCzaduseQWGxGs1iQ +WCz8qdIshq5DSnvxUsV0Z3ETU5eVBMcNry5Pv2GDBBfI31RK/mdE9tXOIdViR5NzqZkosRi0Y7f5 +pf3/anNrxdoYOo2SJax+mzRgfiuzjRlPDSxPv2FVsQlww1Ome9Lv3vl37ZvH0OJEC77+vGVp8mT6 +lgUyuhC/jfu4nXZts2ix7B4dQrOlrFfU71L3F1+dvkpihlezLLYnZQs+4WRc98FWsC2OguqprHIL +mhqfuW4Gkf75DI9OfVksPv0GiVGfQE91FC/VSUXUIV26Gq64bLFxQsoQVH8EolPWcBjZtTUJYTRr +T2L8QXSRnHF4ZiZDk13QYqRKLogcX7xUi/rnD+W6YtDwapbFVmtHK+cHEr8gBJmqf8SnMhlqQYsR +V5yFJ3Vl1ktUBwz6ESwLmPHN+R6uFy1TQWCj+E/yY39fQqlekHndT5ewUaI4MH1etvzQbXGRvM47 +8igaPJJvLmWpWFw36VuU86I0yVgsmBTVwEheW7RamCMDD3ve3Q5Fgwds9Zfw+z9P5X5bFseLb5TI +lpjh1czY56giklAUVEEiOYjb0zmZrLDOO4teNPOAg6WUKqqb9CUxMVbKV5el4ELMIAYw4WDUZwg8 +mrHh4f9EUt6B/PmObCg6bIFiScud/0J3XJzsn74aUTET7nkF8osKYZ7qd0rJv3JLuFmn/hMPp9+b +r5EVbGObSc5JlVKqUZ3FCFFKrBxgBReJCaE6+5JMgB1irKYevoayj1lr0a9jznxpUbH1imelZ/lS +SqWbBygbWNzwaqbim90u/xzUnqGJCB5z+fwx4S508fShfCOPgkmwhZwwfUFCxeWozmJyefPAhXip +CBhZPTM2jF9KPPbM+6D0RlyXiy/Y800/FAwedyFEo1lLKaXSWSwtXRWLZZ6PfVmGJNEmwMK8BLe+ +H/I/wXEjNW3PV30Fn4/VouTNKFnCMhYY0820QX+8rOWKBXNF+DiE4rSibkl+MdQBe+9DW/96J1qE +Fm++DL0QRRoOHr14QFfKnp0WXcUtiGUCGzW8mnnwdzsb4BMsZ8f4j1N22L4V8jPJ6K2yH+Tb9FDQ +FTvgMG6p9WLxUvl1m6XIo8BYOcDihlc1F5d7mprEMyxh/lgYR9gVtyJx1mPdB6VwvmSy8Lr7C+Rs ++lPFy6fwujZclP44V0YLlC+ZlGUUV/uxBHm2LT4mi9MOjwWK/nz9WOHpt2GSVPUXTxZhTAdMRj8q +D1i0ALD0l5JQxMEDK1zCwODW22URp6dReSqvxQoC8wi4itCz3ykOTNIFj5kyF3EXXOcxf19aFudU +ooa5Ey4RHvsARFNJMaxMm/Itfy2YUlmJJ6JzQCwKzK9bI5YucxF3npRKK9+sLON+UbXY4nNAguxj +MlkQH5xo8OWb8yxoMUb9VqrVUrRUkg7YXLlRMW54VfO0X2JXJKP0MDmODdmReytEt6RQ+Jmbb3p/ +HnWFgsdCm3Zqi21HsULhBpB7SUHhstZhFp7zuLeTI09ro7iN/Yi0sZ574R4lFj3zBfnxPOoKJMEQ +ZC4FNotFCqW06AYd/08q0xVjhlczmce9dI044SWrTubGcY0d498OF0Ht6NT75dvylK2AK9azh7Uv +XSxKmgP1J6idR+XtJ0BHDa9mOmj0PhldooY6sCWG/tgPeXEOjXlagmgg8MM86vIHjwt9zsySo3ON +xZIPqF/8liq+u3u1xAyvZlIq6Y14JKq2scl9Jh5b7LfRWArFZppc+ZaZ53fFmY/08tqrJH0rXzaw +J8ud9ogbXs1YjP89RDroqBY84H3iQ2g8iYILNz9pyaMuv8US1Pbll5FiAf9+dDIX6kK5a52jhlcz +Fb+1m0yYkpMBpn6E21gzP4bG0ovhxOe/3ZFHXf42pggrK2f3jvCFCwX1i99eRSWdx1ZMMhb78ScR +GpNROIYmx3G47+Jj2GKng6++PbMkTC/5w32ywb78cqLYqmeDIxnPoxalLGCFKNLge3FbG8MWG0XT +p1zSxBukk9hiLaNT7749Xwed3xXlla3XKG1HhUXWL36bLjcqxg2vZiy2M4GjiyyOnkRzA5R9tof/ +OopfCEd/eU/PXxYHJq3+hEwMLIu/WKlEXbCexP1oObgKtzF+gSfT6OEgmiSbkOGxf0VPNqJg/Pad +eY73KtDGYLj0QiX1md6SuoimDIkbXl1eYfpv21FMEYNH0GQcvR/BrV/izz2KYj97r3yvaKyuQErF +l1Eq/dbgl6BUxvdRvuNNlucVY0db/PIn7j5PTDiP4H3Q8jPLlCV23w+VPMAKpFTh0gs1r+9ex8vc +s1PYYj38OQufXLAsorOMAJD8TjT6S3Sh4+V3hnryALs6PMHp1afcEFmE5a3qK7gbCd4mpkQJQn5R +K7DSQk5phnbYknfj3NUBpoj+3Euni55PkCMxw6uZAfKmzOOjqJaUknhLnqYb7KC8usD0lHYkASoP +WLBI+VQZLVldwZ3rJUtSv9b5dLn7GHnDq5U60rVEgfp1mEfk0kgKViRqeLVSR7qWKLN6V4zBMgkQ +Rg2vVupI1xIlre+F8EC+PB0/MrxaqZNPS5Tz+kT+hasZ7q9Ark4bO4/s8ZxL4wp/NYBVuY1N60Pg +eHGK8dUiGV6tssXO6GcB9hRlu8+RYJHylSlXp42NyzpgqDg162r5jOHVKltsVt+9jiliebUdM7xa +GT6PkuUVfRvjlTKj4poENq1vYydLYLtfJWHDq5WhSCtZfg5jOVeUUaW8HSDXlHW2ZJnSu6JYbjoU +M7xa5eDx82Tul2Hw6rhiZSjSSpZR/aSvWObKWQPKLiKVCx4l+YIBbWRLuVtbYoZXK0ORpgKzl1Io +A4stlreIu8ia4LKlqMXmt5SgZVw/puxIlbeqr4L9WO5HQU1zKXRbUzrOWXKYTXk0hKOGVysx0NQ2 +cZ5jSimUfgrRn8rrisatzxhYJVzxkEj+JoZL0DKlKyvEUTGa936jkGB8dyWy+3kL+VsSE/eobvP9 +kpSX7T7PBPHdhlcr0UGnVBbCp0qhOtIvVyTHT+ZdSigb8W8HDe+tRBuDTeTv/tYStIwZEn3G8tz9 +n7u+a3DV+O6KhHtBxH8CF0rQol8SjO6ezhcVlQ5otBfQmMWxIsCGyBVnogQt79efcs3nzRkSkrZv +PEeihjdXJAk+Ycd/6kpQDWN6V8QtzLio6BVSXl53WTK8uSIWO+fHZb4jyRfXMqpv4/xUvszjEVIV +ejcNFilfmVJooDljwTW/WbEXVQLDelcU5/KEA8lCfvZFfeUY3l2RgeZsC/aZDjhaVAnU/74i5aMY +X/CTv1Ni7vWw8d1XCqzQ3H0yiP/vgCVQ2+lXv8tSvj072tYDfdZsvPm0Im2MbMe/ZEf7iioxWGBK +ThuOG96sAVD8udfDhndX5Iw/skcTx+animvRr8MkbPeS4b1/iL1ENFg6EjO8u2KPkZ4Q0SmxqBK9 +xSA/nicc8FoSqZvCMgY2d/mfTKIdh2gxnikryW+yP7v8haLTbwOI7C4uIlDKXfyGUnojZkREf/aB +YwYZsnE1ZNoYWX8jq1QKuHfcOTMVjhKeC4s6AZ3EwUteKeNyPlFs+g0nwglLcWC64AHFUeOnymkJ +ffXSCwaNxxhY5jZSSwqw9qb3d22CTV+aumUSnV9C29SzWRPYcIq47HvL0abI1ADE42d1h3hhEXUW +S+fbAbKE5Lt75KP6wUvYUHOmfHFcU/DCwI6kJ4xg4HMnO2bSwSVkh2T5yhx6loeJcGZR1bInFHHF +9OblLL+QGCx+k/Mtu59VW9f3M2S4WWJcfct7NBGUkoRUC4NBty9I4ST3JgE9xuzGWqbPbULJF03s +chWsqpF8wObJzzmKAUOirsXMiHHjNXNBRBhSFiTdpzFDzZmoeJi50T63GMfF9cuIn4yJ8qltCN0U +Itxtvw4FUeqJOzNJ2tGMqfJHRbW/uUTqdS+PCosBc4eSb236ovocfr5F18sZVsOyxSw/mcQvY9F0 +gG7kd/7qmyJ+jb1Xuog/+2UHT27LAAtmxVFjYGq/rG7QPG4vAgzyuiFx+v6oIbRFXnswE0PjOa0s +aKg6s+6+5bZpNJU03TxFVhp/oONeXDuxqfm3RROqBSRinwywZarb/G2snxRAnckpOgNnYLGFfDYI +KyL5ZxzlrqA0qoaV5enR902iMcVmib//zc+hncGt4kNnTDfPmOPTah3xJGpmgNkzz0fyu+IE2d5N +so65eboYMNyt5EgqX/DIkC7qqSOMc8XMxrj4v06i8HtR9Fz3/j0QRL8rPX3BeV3aP0cqNIiBzUUX +NWBQygDL74pKHSFOwi9OJH3GtXn5Vj0166wYyzMbpf2irHv0bje8O3M0efR901C8DkX/Lsi+B26f +CtpnpqLjyD4ZFbVu+vxEa0z7wn1/FM4FlqMSvlVEMlnq+4xCWYoB25N7ibAsG1XHDPo37YXuw5ih +6kxUjN47KcEfo3h0zh5Hty9OhZfGomOIX/q1RPaOSOjkuRq1Ucmsk9EKWyBXFCS0QKaBQ1u9I4WB +LYkGbSxmuOx+IYNIacl9Vhg1VK3ZddbXiyv3NjqYavN9CN4+e3oUPedrQW900xayKJtHB6fixBUh +bBOOauuuC6RUe+3owvvc+xhPDJj4gsDS6gblVfIKkqBkcGts+YR63fEFYWQkavkW5/ucW+zyTp8F +3mD7Onz87A1BdJzahr6pTr+LGNjPF6dUYD0mlNm0USDzmLCgE/cO0I6Qff9he0FgSbFDXyBJEQ1u +XYqTqxLxvBwkUUPVqsV6Uey2SaTMoLiCeOyK//rFOJrCrvhmMh8jdyCp9oax+PhEoy0QlpYhFcg8 +FrahA7DRC+jgRJHHuFBjK8uW+TwnSsTUaKD+PF+yxdrF6E8W0UwKRSHCcepLD4oxZWpsHB0hlHvK +RRa0vGd8cvySAJyXdRawWPIGuEnup3CZ5SJtTH98N2n00Kg2VLDKn5MoEi8FGKkHBYhRbLHFORSV +OWYTuvfJjwbb4+NjaBM55FJ5uo1/dW5q6qB6/9TyjpoCFlM2pTowPLtGjVlI0pI999KUsSvC2CTZ +g/ESLk/ubHDQUDUJbvIWPvreKTSWABZY4/gquncCtIATNdvO3VUH7cSHebQYnTyYMVSmPgtYTL7r +HP5aOpz3R7N+XQcMtzHDfoysY8eR8SXcy+WM4SSj2zWLCf7oY3Mo+K5HOmRkn4J9Y8mw8hTYfMbm +YDu0zANbTOugE6DbXsxisDaCNErMYiLro2IcSUui/k51AMWrY3p/zqOnMDISlerTbI/dNnVM7CUM +pv4pdPtzaXtqbHwqyU+RAWgUO9/iOYtmsZQng6PQnIedpFJJ4x9cJUv6k+Tnlk/pyBGR13i87Loj +bGKGqlWLcX6cK/JwCwpCJ9MC7z3xthh5rIg76zgiQ2+c3U8cXXFFcbkAeYGpR+EV3WKlVmsw99Jp +44mBV2Bm99Wj8WDOU9BoHtUYGHUbw7It8F9wVIy01cIv/dsN4RRTO4+kUZIYhAmw8alwBk/RJBhp +TasUV/x/UPfdJSQZhfslDEw9VuZRlHt+QdhQtUqn6/1+6zYUlz/3Qbss2uMwOT4WTD1xyITsHTG1 +lCJaGJvUFktPL885FF0OkTb+wdW/fkz33T3QMAmem8vMuryCTuYAj+cFBjn+H1NzSJ5l92Bg/wZ3 +jv2tdjo4fxfu2NSoODOFNFecLMkViST9xYG9YhQVRaM7SbuKkhdkpdXqH7QYqlb91YxeltMotSBG +YW/XG3pS/3efpHJU+80kCyCuuLDcRieXLVZ03X3SjoqK/sxk3BqMj8o4ndlEDHF0W605bKg6w2H6 +ZlkWZ1JvscssOLozfere4CSxmP29PG4pxBVnltftTy/HrOKu6C9O7XxRN+VkRENLZM/KooGO+RyL +xQxVp7SK24p6pHH5f3Qoov/XSvJJONpPtrva4S1JiURFaQah5cyjZFcMFz9Jc3o5Zb8scePqkFqW +n9Iu5bYqY2CZyRy+h5dGZ/ltssjLX/rnceVrHeTsIL9yAhKL8fzCcgc/t1zYogsxyUPVGR4VlF/q +XfE0FI3OANkqLU/aL8o5wMKGqrWBprJVFG/iT6CvI3T9/I9H+oQwP/x870R43wLyo7+1uf0pNKs9 +nJ9GirhcccvAJEPNpI1NGP/o5V/XA3sBGW4f6xGXMykde3chirRkD+Jvwj53EaFG5v1nIjWW8Alg +nee3JXGH/22Bs8yhRId65zzwasAKuiJJemQ/QpdaCgOb1icZUUU0cGAFO9xy7iv9dPWw27jytIqf +gSIfU0RS2sONS4tRjFHe0Sr/kJdx4AgiNdryGTyKVpaCU9xJD+t1DETahCLZ/c/1XdZRaLQDBKbR +cnOEYs4hc0FD1cuHPiFpVVId01SooSis4sm0sZJSqniytYZmrDWAubMwMP3x3WRIaOCK8hKCmZ9R ++Jw1FKOGqoutGsi7c7eQxV5QzN5GhzDSvb/IY+hxA4pxw31xS5eBITG+OgsOG6pe/URTvIxmpdry +QCtEkdYncybGVMLpal+X+dxLDxkeRyNPo5WFp7HTqy0WNFS98nCdOBvZTI8BHXxZXBmfixdhBwGh +e0BXyBVDpILIE/ZiYrAkOGbY9y0uXa7peEkbZjP7oJubmtA2O04W4kO4/V56s0j2CpMPpAnUQRYi +6Fw2PzCTU33KoltRbyBzemB3GXbQi2OXfWt6cjX2sLFqDVggwKJv+5O1aC6A0NiJj6mRI0FRwL+E +cGN1enXkN/nb2BBnJZVSynjstN48McWo3S9l+X7uHGuwADAtDMom7eSf2L/dJso8Hqt4Bz4VHEM8 +HtmFdU9+Cxz6tFvwI60fKyYGfjeqGIX7qanLqwXk1OoBQNhQdeahhPrIIo378JP4p6Jf+ykPtQN+ +p9FLnlvvlJG9kCvmfPKio4lHpa271xN9Igs0WlTzSvjyQFki0wRFgWXY+gbobjsizHlkAPazb9YH +cc8cUz/+t3pwnYL0bIGFwn2ADApLaWMG6zBjyGgzUizr0FEZwVWqWwxVa7UjOwb6vsYSswQxsP/X ++WkLhOqDkEkcY0VUxGI6BC8RXstS2thBfV8yarhnJyZlGaZHXKU6aKhaizUpOD670x1cJCGfTztt +uI1BXEVifAoFRV5KEqr2HCmUBPcilPAn/cV3cpzUWyyclgyAHRPhyq/gnCq+6huGqrWKX2I8ZBfA +HHmALSYDD30PA7unFvFTc+ggz2O3169SK+SK+xCavSVtL74ALWaw4slo7ymhir/8TpJW/aIxMO3H +zzzkaMQmPngeDyPsKLrnA34I90QRFZxGe0bM/uTA7puNa0QFplN6hDyvTfmLn9S1TZ9kWFLov/Q3 +7kSKeBmJFF9VO4aqtSpbVKJL6IMj7np1imP05L+G5SfEKOq6eQr5qUOWZD13Xe4Xi7jii5tkPsEX +A/ZzvSvyisG0Ex7hZ/Xa0dUfhg1VZ6hlnm57OzLXb1KPo0G1F1s7ZLMYR/boJHoDb7enywr3CD2N +0ImOlF0uCmz0Hh2EmGFUlLJHn/HoqtYbNFSdqXhn98N47LpExv1H0AHqfS0ne/gwCsfmYIffjsfq +/rLC/UM4XfTLEjT+ySxp0ccJftGgjcn3Z4fKpdVx02+oermBqyNCPE72gHoefOdz0RuRGET2+KTy +Wbtkh2WG+704r0JJOyya38d18QVKhltblrLzrLmpVaUJG6rOOLkYxS9wLwzrt//R1pHbG9FOyEcR +P7YoR+12u4z0obuQK2KLmchkTm8xYAacth1GZ4CkZ9RF9xlZUFYFU95Q9TItPNuJfNgsUwrauvU6 +8eM4KvIS8o9Noqjf71eQXef3hSy2G8EjJAk+VQyYQVpouPdUeSV7cLIwtSqYBg1VZzSb22i0O7aI +8Kibh4/23zSahFIYu+Ii+llDvT2JeN2yz0Jt7BBSNpGUakYsjAuO6inGMTD9UpvpVQeDKHOrBjaj +yEgyFvOTbUHkrNoUkuS6Pcc3pZctFgcev3yA1oX7wm1M6SAWm+CLAIvplwSHFwyi4tKqtfjp1eeH +2g11Z7zVjtNR8THwF7i8PPx35+/isSVvx1enUTRqRykgPKT7rQLAHkKwhcwEp/xFgLXoYhKZBInr +bpxetYYRpkq3mBvUIP7NBzaRxQZyMPo1XrVYq2USjY75SRJcVhvbi9JBJPNIthQGhsQXdJcM9xMs +rboEV6fOxrWXiYquuofRw79LnmJCKSXF/5tPws/aEXsUJ8GjYdxt65eRFwL2EErYicWKAZPtZ3SX ++GlRT1s0vpqvdesqZGFD3RmL2aMziHozOQAJ8kvBPcexK3K/jey4jY1+i8fo7WUB24vOYnPxSCky +rQh11KzYYnGjJ3mrl/ptXfWZMbBM+fijM8h/H7YYWfcSffQZlJYf+wmSotMo+L94wuVYKLvXKX2S +PBnBI2hYUwSYPtgq/iUDV5zKIclcNR3JG+rOuGI78/qw/UZs8ij+TvAfzkwlIU8+mkQ/u13ErsiX +ZbF96PvaE81QYWBKTOd1UDIaxYV/ugrYg6vARA11Z1wR9DaGpa24ByFLBEZvxF2gNtM8hcKPhfFN +4XgBYDqlJ1EbEsn2sSL7T5f09QWNN/zxq97FRDEbtaHuTLj3H1TQTd8g5y7iVvrgsRNkKjGlFj8K +a8kCGl0JCoX7vegOaMHxAw2IqJDAn+owQNHIYtHVlIs/k7KBSshIMhVvH0P8TR9DY+opT1/zzzzzvS +2keTKDjzpDhnEBULZR5fR3Y4st+P0OGCuLB5dCjS0gsGbeyYlJ0dKmjVIQZhQ93LI72vPc5vv32w +Q+n5poj+u+fx0VQHWVaRuBWFz88+HEffvDVPjRgC65XtiBLs5Jy/giLrGxTBOqq78eOrByq/JGfp +roi+Hogsp9fPOi3gNtCSJPPuDyR7LDLdjNtO+g4U3JM0TaGbdAvNC7Wx53BmP0ImF58tDAzpd4BA +w23rP159dfVmx7Ch6mWLne0T+fei6Bl0FpdrCR1FjYA8mw2if4+ho3EUDhYAJuV+VpfAbRDwRU+U +Txvs2RHH9MEDbl3dt82FiwPLStbC96LxcWLz4B6seylTR8eRauxY7hcLtDG4G7dQ2C0VPcFU1pPC +K6KRb+1cnRi/ugomb6i7Ehu8FfVINUosqgPqRyiG59TCxdWhbzUxRthQdyU2nypm8nekuI4k6si9 +RBhZRnVov7D6/dJiPOtd7JoBS3Ti0qFdJSghJwfklBmHe3vuRTiTU/p4to+HDVVXgiLt1GMWlO8M +i1Ui6wtluAgTxlffuDp0GgOrxM51sLOEk8eIKLyuQS2pK3Vz78st5XT2ADVmqLsCwUPegmpKVKI/ +BmleNNg+psRXg4VL2RUSLlK+MiX/sCXZiyL+knQkySEWq8WwaSjx+OrSz2UXu8VQdwWCx/MfQuc2 +l6QDXn6atyzzRhvX0/HVa65Wrw4JIyOpAEWa24JmhcxPF54cSOlXp5OOWAdMyd0r91fZ9jAGVgGL +DfgRpAd48vKMebSQjoXVjyY1rB36tbOLOQ/h4Qd0y6MqAiznk3MY0756YGqtA56ApZAORV/bS0Y7 +Gedy1z9/OXt4prtdq7QrBZZ/oHlGxBkmfdjDcL9Fc1IhHQv6/QSG++KWxP9efeG2VBYc47qrgCuS +5fFKFxUa7hciQ0Uqh8+99GtkcM7OdO6uD1TcFSvAmaPO2Ad8FOisp28uqOOcPi2cMdrwF8tl5/6P +7BlUXeWoUoEOWj0bO1Xj7WY8TYWP6VrSY4gig/0Ev8xdTfuyIl5+EzTUXYE2phXsWavJYWIL87+l +9PnuDFl4k3sxrjt+7dpERcnwhoQfJYtk+Of1662mCVFKrryc8xxt8dfZ9+gqp8LASpAz+vZx3thi +OUNxeCzrTcxQd1V5gl/Vr5xdMtp7+guyvHw10iwJG+quqsUMlt2PGVlMN3UV57PuCRYpX5lyNbi4 +T+uBLSFRb7F/zH0As8hnfdH456vKxW24UcJg76lusc6slAU+bKz7Sgt1NY43mdJHtLiRK75F90V/ +Vo3EDHVXtY39WO91PzA4Vg2+kjuHOpe9/i1sqLsiFGmlisF+AkOLvUfKvcufdSVmqLuqrviCjtcZ +PQcNTvj7aW7hlVh45XWek/eqGhUNFnGfRgaHm3w698KqaGL881WNigYnSvwDNNhzIuqeU2Q/lQgb +6q5q5mFwzs4U1J8Xp7wzt/ByvCiwqrpiXOYNsOp3gIzmutuqW4KGuqsa7n9usGfHYBs01A2q06Or +vmIkVY2K43pgjxqc8AcfgrqfyEJjN9RdTYuJBv3YuIErQh3NHbw7a447XKR8ZcrVaGMn9eF+UTEE +pruSle7zhrqr6ood+jixx2j7WEzfLWRhjRnqTunuIy9h5gswqxONpcTsL16N4LGofDn30k8NTh+D +i7ldG/yLLIvZDXVn2tgZXE9JreBkvzR5Cf0oiP9/QVZrS0FB/GLKkDjySnGhoN44UwZP5O+P5V6R +s/mAdJ+qknHFacJUinUm2TduUmie7Di/WItaCOsblFRV4lEcwuZH2OUl51fDFb+42gmI/KGsd0Ul +puTe987o5ddhQ90Zuy+iPj41YZ9OtfmRzPUM8ij1uRbCYYrmcOS6VNNg4qMKEhNU27bMF6+KxfRb +Ww7er38AZJBlfTHrtTGwTPnGzt2KFn7PB1QOU7JOGdKbEPwRlNEUhn7c64+hm2zQvwhXHoeXEhWL +9CXwR/qE7qjBji79HCr8Qfb6FEPlGdW/YCS01Fsrzanngj8dRZEmEcF7fA57XFYxRNGQ0GifgaWS +s6pyTiyMLKy3GP45A4vpvPPdWQ3RGFimfP9+TCSzreH03jbX1o9jGHIyheQFSkJTM+o9MfS/zGJ8 +oTyLnecLAzMwaYvB9jElrAN2Z/zya+OfX6bThSqtRGwK2VP3MHwMmzIpzszi6BhPbG8jNYnIgr8U +XBlAlGKxIuSs0KK32KMGD1lTMd03/yXLFYOGyjNa/DjNHMMWi/Nbn5ZvIYvSJhdE+fPJKbJR96RC +lqm9F0LCIrH8IwUstmKHZ0YLAkNxfZc1asRSIuku3pWF3rhel1dxY4uNheOxUyMMefKDhzsdc0jZ +MzeHzr1AZtNH4/Djsozb9YorFrDYPIj0UoPeJgYU5lCADxokGQZ7Tyf1Rf+vom0swzpLYuELx2vD +X7N0vgcp3+s4iCwvkI0Mc7BuGxqDnCUKb+9q5ROgriPzxQL9WMpK297GcQHHvg8VBIb8OgyyJOtX +p6djuoz2/2RdiRnqXt7bgi227eLmcHQRh0GhFWxDB0exHeNJjGlxHInhuPL4/T3i/KCnJfPFQkcI ++RyBXhNV5/UWOR7Jr89UMVbdxSX9oPrnWVViN9StaZF5DOxgNBpLH9qxCVKkIZ3G9z/kFMSplz8/ +BVE4Jt++s0ecu9zGClhMpgdstm4RFRVef26OZEREod8C849Z6MOGujMMLCIOHrdEo2G5jiWrf6MI +nX0cwS/WNPBxzoSgyEdTx6AozpTUxlQpshxYFf+c7qsdUE/uk9JbNp6VesTzA4ss8bBn62ekGO4w +7HHcHeLSJ6Aop569XppKxrDF7NGl23fuFJfkFYsVA1bCgRLobt3SWijOGbgir9sy9F+vXn5tN9St +UaSlPjU0+LW7g2M4dxFPo78nZkkh/6XWf3hZxI4xJosYWA9uY3PyyuqnYknwieK4oKQ/ZUEysMCk +/lTe/8hqdWFD5SpbX+A9twniK1PBcUKR9pBMiXGy4r428eZ7gmQcgYfr/uDibTt34oy4lA5aff8i +KiqKwUaJsMFBeDF9+gizbBgzVE66SMXxGZ6wXo5O2RUnzzzzQtU1HpV6/3jC49MDOKVIuh8Ci6/ZBV +nGdr7MWBBcmfUixmcAaIZLBFM67fyhnLspgxMJWGsM5OouLUaNQvi2Rt5FzMfoYR/mLx5YUorr/U +FHbFIHqsziPO0I0WPbBcnVHyR7OYBRUQg40SZIumbsn6op5045WsfD9sqFzlMPXxxGJTJzoIceSU +AmeFcHKYn0ztmQmj+D/XxKCPD6Otj4nZrligjQXJn+NqOQsTbukXmKLwkh7tr0nTyLmUZTG/oW61 +jfXaSQcdH7Hb5VCjBSqfR/Y5kZ+TG+ewxSKRDpny4yz5AUIotxI8CrjiSyY3e9jR77O5mm9FhUQy +3FQbzb34iqjzzmzOrbChbpUn2MaruWI0KkGq/xbY9mXEo49/cSn5tekgmucJK4s9jPg3i2RyLJb5 +YoEkOOBglinSAoVwKfqNEhCPCHUWWz4eJ0vOlxQVISeRx4hREhVxYIfyInbMPe9FS/84FZaGVfYo +fPXYJ9Xzzzz0uw2F7Gt0yRpi5UzycGm+AUo+ABRV2fHcvSO2qonJQP7lYtNhVDYShK/wZ3kgmCm46J +C9/4dPTBbRixLOIB222fIOPbFWAFLMZ21ixTpFF8IYv9VFdgyC/pM48H9V1bPMtidkPlajfPioTC +Nopbszxs/i255zPIr/Rstc/9bDH4i4NajzkK78duPXV5pXwBirQO8meA/JG9IsovsqSPLeKk3mKv +6oPHKz2XX0vISNSU6pA6hUNIS2Wa+2DPzk/jFz1ScOqBz0SP+bUoF4RbEzyxXTTzxQKuaCF/nldt +UoTULpp7QZEMMo+YweafLGCjhqo1DlPEayNoHBzD8Z3yNOJnID+2+GA8TBZUjKrKSWcSRaW0MZ78 +UZkhCpMgy/qDq9LIYH+3wRDtl1lddthQeaZ8YbiT2NuuiNhWPZ9HYRwmJqeCwaA/800c7k/vxr/x +xZbMF/O3MW2ifZDcMyuhAqIYbDMVDcxjwOX56v2XXweRkWSAve/GYX4MncBFap5HtnPAPqbwU/Fo ++BIGZbYj9Owo2nrXs7WSPF8cmBwm+4wIgXp8QiwEDBoc+SRd1FsMGuxPygoexpWX6eje6Ab+cTSP +IQR6bxfuHeRjELveg/yABaFpkUyhwh/bZ1vCsCe8ukaQPnjIPAH2JH51ojDPkWxwMpL4Gb2B/luP +9Zc7L78OIyOZ+//a+xv4NqorbxwfKXIjC55aduRf6JYysnEWJ91n3Zftr9AGj2ycYtLuWk7Dsvts +i+i2+9DtPrtpS7uEkvjKxqmd0K1MCJu+UMYxycbAbr19+uvSF8gkBGooLYIG6ra8yIkISnBBtmWj +t5l7/vfOjF6seZFfopXN3+eT2PJo7p3zvefcc8+9c+85uS9HSRMCHK4WcZj8LSGqTnR/r/yGgsdW +EH0cdHFqQWOJ0QDB0xy1iieKnIPWjk8i6GTRjGqPwEzknYRu0q07Eyc4n1UyjnHycvmctkBzCxob +j9R7rr92umr/tI07oJ/dJ0NJdLDwEiY9PVh48afaotE8q8iDHpXgxV8CM8xg3/FJj83PmlahkyuY +nmQUtHdqeH8r593/9+3MOcM5Dzs+PJSqGdzoM61C0qpYinhZmovPaM39LGeCWqYS7Mx5kmuwtPcd +SLY5ejnTKqa1Mw5MZu4aYN/T8p4qOtEs0REQYl2LV5HSkRjSue9lrcRi9+Vu5HQrL4HEFEi/KF7F +jHZslYht1qANaRvgrbwG4HUrL8Hh01/lwTOltPaUla7EfqdzPilvf7pPt/ISbGBRbHyxMAMU2O0j +hZeSOgf+8KPaotN5wFjQo5LtMCWOZbEEBS/pGAU5g0UBvawVSjpvf7rmfplKtOVoUpaY7qHm/Co0 +PCVJdwoVXtR5ZRbPG6ADupWX4oA30LfPvVA0QYGkdW5Tesb7e9pc4LG8jd06j4fSSCyxc/1zaCg1 +2zReZVrFG1qnIaV3kvGr2kvpvO1lrG7lpdhLlRo6ZOP8Cb+l0vyU1Wm9gxJj2o73slZl01fnPo/o +Vl4KiYl2e2vgO+Km/Q1rF1QlbRODUUnz9GaU/ezTvaMUe4LFeo+T9Yt+t/mZWniCRniaS7MQ1Yrn +k1hzX6roEncpJIb7N5F5nbjBxplXoXOSUdLbO/tf2qLxPHOvD6wEsQYUmofncVbbx87rGY/btZeS +fA6YphLljsUCK/ZGc3/xKnTO7NAMfxpGb9AxfDlcJdzFrfv9x4tXkdZKLKk3jn1Uq53Jq3OXeN3K +S2Hu5TGmaMRZgJNaYGGIajZA41Pa+2Zzx5Fw4eMVKslmZ578fwDkTIOmpN3EPaF7GEnbjd4quuZR +kj5Wpf4ukoJMJx1NXDeGgjbn1TTKXQrpVl6SPpZZVSuSDW9MK4kzMKIV4we1WGfvy340WMwpicT2 +qr8nzT2PtHZaOaGXAOcWbQPgrtxD9YGVpI/17nNutG8frt5knnNdRxXHwKc9ZHBE2+1ieSU1lchU +EokNOh1+t7XC719nWsV5rXBmae6Hwosf1vHuH8ndxepWXpKJ5r76wYa9jQP11eYSC6k7/fNoVO8Y +9O1aoeRn4gj99wE7of6fMY8Lf1I7w07rmfs7tZdm84J98rqVl2QGfY/6n4YxNSGd42P0TWDhRaKb +mifEr87ehTVfylQSc9+t/k8JplXwIld4aUwvoesPtRJL5Q3QPt3KS2I8XgAlM3uRbBlhScPw03p5 +TzsETT1Sc+6hfBH+Fkhm0xYqrbtg7qsDHfJpjUcYtNtk8QdOCYXX8lNGN+lWXhLjQQfou8n/SWRa +RVA7ZN2JdaYtz7+uuZQfqYTXrbwEIdLo9gq1j3GmVdysPYwU18miidcLocJr+QM0q1t5SSRWCXK2 +nWLriiOSBliEjGOa+x7FmifgvLgXGtT6wPDcmw1Xqc2sIj2TQCVWRBWf1jkXh3UOIzVptS2aFxle +g1qm7ERTBkQZkTcRZjMHiDRrIKcjV7M9wRmJvcWZAmua1QAP6h2qfUjrecS6cg9t0q1czT8mbhVh +VMAd9CQNDbyjZA4gP6XbCbAqxXzN2bxgpope+xElRJp+Y2ZRaMeaF3RO5MO7dcaAvHEspFu5mrzw +0+6NqLHj9SryuYPuGY/KlwlEcechJ+JSGF6/W966kSUzz8Pa4mTkEGkcmNHRSc2liF4KXp0QcTE2 +91n/IWqjBchgugec8n2RKcl/VPaxiYgSCVcbcMlUs9/qr9a2iD4wp72iUg6RZg5MpzvxWMd4vFsn +ylOexJp0K1f72NgpMuudoc64uLXGIQ475Uj1dN/zo9xVgK6a9DW2z63erI9tIP+fg6JWMaBVxZNY +xxe6VSuUSN4zQ7qVq2YhMjsKcOwW8gmP3wnYqhwxJeoW/1ZoL9T+9QOo0Ns0kxjdkENf/BXJX/ii +domM187GqK+ouRgr+kYzY+8SPqmvSt4gHI3IJ/9kuAAP14TeC35HFWR2tc0HWC0o5n4amQLzaYWj +m+b6b7TGYzpviTukW7lSd1zE7C5LEzUIidPMGghGZGTk76D75z8BLiGbk3kDoxKjJqiIExx6S3Np +VCeVPNaRWPyR3GfN42VSJDYJqEuQkxdCbLLhaThlkee+BN2Zj7x2Gz39yscLVgHNs1kpEjNXRTyi +HR5HMGjPbf4Ia+qJ53gxSN+m8Cc2++mrkTSZ5yUi8Qgcb5dXKwjOyR+/8TfAvgTCtCe78Q3U7wyB +UfNJJ5pFjIeOVRzRSZkMn9SZaObtftNvPTXH32WVLRx8yUm4mQxHaK4bWRUjGM3s9mwB3+dBSNzzzz +tpuZS0XDKlJ1nDEFpiexoJ5b/iGtKuavA+k/RDVMfNcx5Oj1WAAmJg/3wagyQkdFIfnbh5LAXApc +DM81Hmbmnnr31K2a1G/MLEfaU1Y36KXV/plOH9uc+xzSrVxtNNx1DK6RmT0RCY/BkzbZ3o/72dj5 +ZPL1+39nY6fE+fexfwFFakn9xsyQjlVs0omhAP+g1bapPLnqP0SuOwz4STdSmJ0Ip0eJIspdiNqS +x6X0ZNW5m0ZioqG511RKDUcnUKtollQCa1M96qviwzrLb3mt7NOtXVbFfsAVDhXYt19njsKo2scA +Nh6PnU/DHX8nJPHc6s0TqwHQHfcpNG0CTGJ11iX0Erreo73trdwzTTZi4np4Zdcx8Mgpq6TxtrVy +ViuQx66eSssaEIi/NSV2ofyCZlaxn9nQ0O/1t7i5STAh7bZ7Nel7AcW17kh+lj/NlzIpRxk/cOMu +AdneTVHeNjHBw/EeuY9NABy46a4EhAIxSIpdcwCYZj7dyFhq9qxzWjgziaU7tMYjlNI5JPtdrX2Q +8vbda9pVJtrHxP0DF+8+hiAZi1IVCx8lOiirInnwo18ZTcDj+64jEpu/S1Xvqen3MJ6GfsF05UFP +YnrZoCXt+7H8g3G8buWyKjawj/QyHBL7byBIjzjvIH1M1jSC7qWdwRQ8W7cOZvH8B2jG4a93bbL7 +Gziz/W9YJ2G0kNYB9mk9iaHs5ybd2mVVZIT76loFONayRu5j74UxRSHCNE15JAn0pOaUc64rOj8n +2FRioec0lzpEnftu0Grbm3nwfbqVU6sobWMf2XWMq/8+hZMIEYP2+PZrVebHPx9MEGBRmLbNf4Cm +XgedkyW502BMWHtEE+sFhwCs5f31PFVAoEeKxLh7MSDnpXQYEaPwiTxVfKJ99KcwQj6dlfAcAMWW +32h48Uk0ASakPSiBhTi8rLlPG5EA3iy65UjuY/dwAnGp+J1UYkmb20KeGOFAVsU3vvCcHfb5P06M +B+LyC5olfaJqqKRuMZOYpD0YjPUiy4CoVcVoUXNPVREz6L6uf+d8j0IwCAnvlu1X2dnXApxs7r/x +pTOfgsGGNcR8zl8V6VlaS7bdjIzzzzLy68FNK78Xta4/FK0ePCskt1GDZjK2KvhNH7ISWSeWX9YfvF +nMzWrz4n/Q4CCoNzgBWbaG6QP4XBmFI6h5G4pE6m2me02vZ63qoCq1u7bLbOw71dO5HvjyB4EBIi +5wPi8NI8s2EI/fuXICH3MZOlAU2ld0Im59MTYEwSH4wWXvPp5SzbrS37TFGJqYFK/qIrAZf9BCJP +06gQLJlRcyJLgY3c9yoN+ya3/PxXqSgpa3XnwZiwdoCGv9F7SfKy9oDSW3kTA31gyg1nvshDlW+z +LXCWyKeWg9dRH/jE4crWtffehhk13vwPuPyCxTaJKe/VzUIpSNq0atTh147ar2j7WL7p1G1Xlb+z +qYaNbO8ub1WcmKBXebibaDqPPfvtdz/yNXg/+Ns7yENdc2ooFnBL2cRyGJkA4zTA6OYrrSrqAHs4 +54TqLP9QSqrw7H7fxqsgGiYSkzjcQZd3lKfvJO36gByHae6By2L7FQ8F6UPNIvmJOrnXkE44DzJA +a4BJ8wyRloaUCy77KxilcWVElEAEnwID7yRPksOVFLgExSTWa/2Plg2uYdYYGGhTFwKrl0r+FW3R +X+Xllud0K8935jAdx7Lso9wXUZ1mLCaxAS/jYpge3e8UEvUOI+mmktcaj5fzBsgR3doLrJCQV5s5 +FZPYCetAy9bDNJmmEaV0EmZy85TYCzm+sX7blSyc7us0RJqlUTCpQpukSyLVao9zv6ljFYvGMC1Z +1NkEDZHWvsekhlnteTcs6J1Tf0XbE/JCpGlnoTKVLgDymcr2dluVSQ0J4VrNNXRqfuNYfog0pN9s +iwW29OCsKa0q0oXIqObG/9LmiP7QPEOkLYKWHic4TeNTziUciugA00kv/9m8EGk7lhswUbtaIcln +QArpFUED7GdFQ1YXs+qGtHRV1BnH0lxMZxyLIs2ly/Pu0n98OVVx7pRcxhrSSQ8KIW2Yp1vyrvh0 +ay9j6gXds2IRneAlOiHS1kWzHw2c4DImy8A6h2p1YovphUiTUNE+VkZzP6WNDIfhaR3jEdVGOXoo +74rPoPZF0tJVcVbbnWiYOy0wyVfIJb41D5j+40t0XHg+9Ia2rSWkk6kWItpoffkay+nWXkaJndFi +EMnMPaS5Ma2JiIl90dwf+o8vY06J2bim4LTwsA6wWKhwL4EYzXOVOf3aFwvMJETaPOms9l0kDc6u +uQjT2t06/5gHX9M8MpVRFd/QzqRE0HtpneYLr+J875HTrb2MA/SUzm49NKajirOa5Ukcyd2F9R9f +xj6mc5SbhiHW1hbXxLtPhkJQhMppPLTvzFP6YZpDhYOSlP9ITq9IOVPhRUQdYCHt7BOmolKByBLB +kPxbbl0B9KiMEntB28dmdLNZSaHCK7OZsZ1yoS0gt8ZigS3deOj0sbSgJ4A0FL6ZltTNb3IEE00t +KvZF0tKd4PibqPDSDJm08JobJc3CVVo9353oWI7JC09po15MkB6mQauTkCaWOXhFueB0ay/tfAyZ +1fCKXgCWkA6fUrTwymvHBPn3JAXm0629pKqotyU7R2Gt8ZiGgJ4qRnHBI2ICm2XC4CEllVhyxKyG +h5VQBPlq9rLe+W7AOwqBxW9U2iQZBaONmCWajz0t/xQvMqvhV1qJnSV6pa0tOSYV3InVgxIxyr6m +FplKZO7vl3+Ou81qSGuBzerFUNDJyvia+gImHYX/5hBpvTInFgdnUsPT6ugUzV06CyN6Ri5eiDaq +3pSgXCDQoxJILGWrACe9Jra1IJMaMhJ77OMvZmKG6zcz1qwXYLWobPpG9GtfLDDjPja5f7C7jSUf +nqh2ciY1HFTPd/ttnhr10lm9VPLyyc25F6Lq7yRd+9BvvIzEKHPU0wzJf2nuFTSqbywx0W13VfvI +h0bPZYWl8mlMlGFjP8PsvyKDQNDj85OFY8DLqmiTxgN0ZhyjZxfpg07JbwpG8u6gULEPno7ONcQm +UWd7aIg00maWSr1d9FmKKxLDDzo9zNoMNyGdGyXNtDoTcVF2+nVaAnISoxvRqNc1iqtAzmapklOe +Rsyuh/C4lUvYt2Z3MBhLTGpSfj+4v8kMFz2PKQPjZh954PJMpXoSw2kNXrVZk8befaa7BkFZBecx +H4SREJep84jjKGHVcy2Mvfq8IN7lzsZ5L+rdi35TY088j5dUYJDZxwNP6KviBwv+Fn6L85jw6dae +kRgFRlXj8R53E9zBBxO1oh0er8KMuwpSg1XkhghG8bwxoyiwAxuKhLR7UYksI59UV3dVPawXQwHw +DQUSw4+qE09ZYvqPz/A3AnLqJ3Beb1sLTaGn8SAeYse7Za2faSZlQzFMo21ke02xEGnjJxjzIISw +QxnHZCQqsAlAkhYYXF3I/NWqoslTUE639owqBkCR2DFxguhjYIh6ox3Jc0SinPLsKJHYmX6msbBF +DCSGa5i/KCKxEQUDkVg8sxP1PBzT82l/VPCCDN+uPv08vb5Dt/aMKvYpbSf+0+1TROv599CVy4CU +QlNyY5GH/XJ8AE2ua+zJPLeYE7z1Bnqq2oweVtZ3M+d3KZ3VO5FPt5hG5164JWPuAYqZe7rWIKI4 +PvvRFBnX33kvF4RQJCmiWVliHCQ2bdoGkTT7VKZgkWkLtgAUkdioEkNBBqaq4ou6fQw+VQAM/0jt +CNPxouuKQVK/hMLi5N8lIDG+qYsLAR9OApekVgoLkRRzv4h+uXE4G96n+AwaHwRTukG1ABSYMhuQ +g/XpAHuxYD8tjqtPT9JFA6RXudrHptoce5uesu3bKkVeAX4Kf5tmRRCmJMxJpNz5RtfdpI+JcLhn +Sza8T/HFHFxEYkcVicnDtKqK39WX2JsFnh+OZYDRHz7d2pU+lhggret3c4CZf61hI/gzNOUdT2Y7 +viTeDeN7PGsg+GQNCsbZbEHzPiYbg/XmwMaU7pRv7mnGXx1gwYKlmewe9pSxKmasYp/yCDz0x56R +MdrtifGYTQKbbH8cyd0geKIFpY/kcg6YS4xucsbXgilFlGfjD0FWsU/pD0qvFKiiFInmcR/SrV3m +L66cRhAJMC7A8XJ8EyKxKdLHJplqJJv7N49iX6rO2ZQpaNzHWPJ/gKORU8yB8Urgm1T7j26Pj2ZE +o6uKgOYuzYgqLpg19u5lzE8qIW4w4ZC7j5iNB4hqkGekJQjFaZ1UYr9CZODJ02djiQ243U4HbUbz +5GMgqBJjGPeHK5RLp/T300Tic6+neVVKcjBrfWByH7MgoOeekzxgz59yvNh7kYWqopQm/Uw+AkaA +PW9h1kuQO3RpDKyiwlE/2EQ4No8jlk0lP84wnqxvjSQ9PguOa6VVXDBrvPwmH9oZ4uCvQc7ii10d +KPTrTve1xPPoSCSgSU71SDd+djdcd63k3Je1dMbABgda2m2B4qr4sOocHPC3M1XKxzuw7gD9dMHV +MM8rH+RVKkG3diWxmiDHlE8GAQv3cfxJegw6COz0FJEYH5FTCpLmD4B4+NDlmYLGfay/7QBHfxfJ +gwcdGRvu+1uLGso1qr+5KzYy9+9s/iQxZLozR/Kw+Cr6OUhmve9EPvlQbQCaJhNQNUGA+VsbBm9b +Gx4hQw4b1ZGYAeNFJIZ1MiuO6XM5W5ib/Lus8jtprIryGU0Hj6mnHY8ST+hGxMKvnVcQd78qlYSO +SLQPjlzCVNx2xfkAEiF3+nAeA/RRU2Dw4dwJkAzfZJYu6t47NwrXz33qIydpO+s/nvIneX3iLtJU +4Qhg4ZscC0/WdhBV9E1NAjs2OgLU8Ih94fs4yd1dlSlYbNqieB4hY1w4lzQ5e9dRvVhAhMlAwQVO +xSnXgHSrl42HlaWeE8RjxExgQZAP1fJQlZwGLhJlFXMfjPQGRHtjdtCdx/uxG3Qyp+WRT3uih9eJ +3kQoFZ07mXnFp4JJ6mTwghxm8QBKUIseJEMWRyVGjUcARmIzIARpFBWq+QfjAywmEswUnJ/ETJIj +YZ1s0BGsazyksbn6lu1yYtz0pQS2cDHqLwQSdBwTfDBGGCISi0ySmRmN8EDL9o0Sq9jl+3mm4Dz6 +GJGu2eK9T3sEbr2+xMSC1ZxXMsCmzMcx3C/IMbA5Moqsf5NI7Jy3jyhRR4TmjqcLE5iwfpR0Nlxb ++U6kBaZTrYy1SzzzztaUD4Fe3xsSggvRXcRHzOgqDEZ+ZncmRKTrd6WR3q0CmafYzHROmE/5cjn8eI +Kgb6RGLfJ32KxAJ3Eom1W/84A8x8osmOyp6HaLJQpZOCFw6KusYDbpmjivjGzN6qBJ3yIb0Siks1 +Kx9WJLLxYe4+N0ukNUqAWX2TFuAeq1JV8cgISF3C/Mw9Hvm1dWCoj/Re/eZUwD+tlZik63mIBRkN +sxlqUjsMa1f585EBTaQpCgfZLmoVg1KLuJ09fz2GJhpOhbA38i2W9DE2O8yYzqCl9eNyiDRbPW/4 +ZLxDK7E+rPteIjT3KA++PSNWTB+NdKtX6+FgkiNa+Rhe+2YzB48zR7FdYuDxKlHkZzrgWwJIX2/+ ++q0Yf2sqU42xxEiVibXn5RBpG0xOI+GQziFprPuWBN8+d9HjtzzzzjuP4jFJObICMwf5ImWueo2j07 +nAnJnEyhFAseDhJ/ijYRK1fXmKnGuI9NP7ihrnPGW2Optziv9xkC0wuZEzTyPOZMocXYPN4RTWXh +kQkmzBK7KNAViMz4E4/QFX0aB/Gb4Cc39GdPuhlLLMF4rHR+VWQGjXUOST8s6VpF2D1HkLPxOQMF +p1dCBZbdk4TlUNij2T238RH6k+rrVfM+4C1udQ17ofi0BZ3SXHoopf/urwtm8lsuMmcJBOnWXoL9 +itjZwsofzKctaZ099gcN5iBXS/kSk+CN/C8F3SKGr2qN3oYVB5atwXwGLQpaVeQk3a1C+Ngch2Rq +NP8mg3dw2VtIyZPB/Ps50oDUrefohix1RIzmNsnMY8uR+bqilL8TW6URSf8U0VwXMj53gy2nW70a +Iu1qmuN0Kl/p6VvAO6CJPJ+mb1BjMEcT0YzuzmOiOWIOTCsxiTVofjnDeJbOhuY0iT4wxdyn9iAX +gsjJvAI0H1GQyEzkqlmQppRTGGfcN1nV74tvOSqyEizp9LGgpL8HKsjlAwuFglCU1KizTTv74Hi9 +46G85yJSX5Qu6PMc/vbfKT7NVMVXvOr38+hj5mv3WI1TIr2YDRyAhZT+NoY35+zPjD48px5Ot/qM +Zj3JwV5mIC/h9mZEX/ZxdJ0DiY03PSgvkIWT4Yyyz0MVO0yBSUgZLBP2iuyhHFbfpaK+fV7rhYSR +/C+RXomM5KU4D5GJ0ZxyeC4mPTR4mgAD7mpiuavkuiLJcObB5qpILxVTRfVEfoJhrO9Xr+2QdDfe +Q3xOdk02szKgtJ9+9UrDv/kRJMCk50hV9vqBBxoewOeDAiSvaX6EzNl9LL0aTkcygMytIn1yMc9D +Td9+zs8wDhUrn9BXxXA0H9ixuUMX0q1e6WNntiEeXq1h8kYekbHip4IcGqzu2gx4Fys30kQyNj+r +KLeQueeRViU2BQOMRREBtcT6cZHmnAzpmjtpFnRLJHNfx0bH8pYopoQYfjLYJTwOzV2ApQ754nhl +WAeYtmbZmyo6QCtPC0vCP2Wy9XboD9B0/TDXSyTTbTEZytbDc6PBYN4wOHFHFP9yyFklouar4fS0 +YsFebZvI3GKylyq5Rl4SKLYSrBoPqntvqCIwCqk2G84LBIULYsFxukVUlypd1zrypLUlT6siLwbx +H+x7qnAX+hP01OkZJLduYh4Sm2Jq3VspA02muCSkNBblWDXZIgf6xgNuyfucLBjqkH5bKDUetl9S +NTTUUJ+7aTTIi6/wxCpiPCBWjaQ+KaNJxYpbRbHCY5WjehexiqrxkCNjKSLAIwZWEcfzGjJVoIv6 +wBSJJS8jVuc+diyTPJWUDAVgKsgJIH6OzKubWUWvIomIzjhWACzZCZM9qKhVTIGywUUOoNSkPFZI +6x9ukfI9kviZ+ZxKz/UxeAONyjteRQsSeRDG0ExU4AB/mlz6N6Rs2w8nY5npgHEfE9Vc6/J2M2PK +SCxPFekmhbP6N+fNrGMTc4cEpFtCbQiaumfyHheNRgdnt1vsLAT7IPkMGd2kd5NLM0ydXPz1OyOZ +livmK4YAzLccYTWmXTgHDKO4wb3NSMryH42+OQ9gSpcRG4jEJLeHxjaDSaaD/AwcpS+1SR/7Svca +mNq2VS4+WRfOSGxe2yHMDLOohiQ5Bbl3XELS+OgGl/kw8vDce/SBqdsh/KEQtOVbTkxHmQD40NQX +7euzx2bCqch8py2j1Fc0O1GQUmMoUImJyn10RhHVvZn0iVD2c2gBqgjEebp0DjDuTtI255uFx7sI +j5Oez8lXiXGarypOUc8jMWIMTEI546E+WEIxA3O/A+W8ja65B9kNQsskVS5PWzmJseVYHKcqEnjM +xt6DOB5ma5WogmE+oqOKuhWfoVYxYWLxY6rxmIxDWuTU1gSdyDKUQlxWlPiYby543XbN8vfqRk7M +l9iLdB8B/yQPzyDORxw4pbdEotkButjSwDlb/YCzxuSlZiacx7jlf8IjyoPpyr2+xEhPieb+mBM0 +0zREWsK1A6NkHjDi591O+xgHv4T7eBhn/HLxcCRe3HgoSnq6nbHJUcuNaBYp5SaZja1qghca6VMf +WCSUfeAMLoipoNuu6u1JTwRDoj0va0cVfd0+QmyliEjHfX2DS6k/Fs70MWOJ0eEzCq/KIdIeAkN6 +Qz2NeZ5hmO8rrS5xaQNVjIZyDVIYqxXpllCtYjKIkVjTmbsnBDsViQH6FSIdXNlKPnE+Ulxi9FZi +b+QQaXeAIaXVd17pqK1VXeLHyAjYRC6l/Gzhm23BoHqZl3SEjvp5SedC0m5EKqASO4doH5NX9sKW +12rVG0w8D45mHztNW0I0MR5iZoolffXzjNKiWIgajGPxcHZMHEvO9ecNxkrVV0yOYk50PYhy8BNY +IBJjCbBpYuIG3fT1GUx8OpyJFGsyQPto+OPXKa9mAe8ncnFKpJvUZ5I+FtVv/3jWAAQLM7wi3RLq +25ZkFAsJP8Pm/LsYqWiE4JTQOJGUIAKduHh2TmRUxXgcw3U1NheSozGaZcsQc5PiuPpmGxPPQ994 +JMMqgBD2xebKyDRmTjJGJIajcSE3h4pBhyqxV8lAyl8ut/5BHIlnvzcEVu2t9wuKKnLGwKbzZvsv +ZoDF4Wndm6U3spIZOVsgI31gGYlNOjnoO44gO/AE5IDcvhBGl72LTIafRwmOrqBmV29NJNZr63dx +8sw0qf9QlUYKL4iCUUYDOgVTtoWImiyA+o2nSqzliTYyXXlrfW7HSQhOwL9UsAf7d3GXoMmmhIAF +OrfJrrWYSMxbzxxCZyimhP5DZTqrPaqH0dOgv8qKU4JybpGediywL/qNpwBL1RJVfJXILAuMaO45 ++Hcv0zc1CWfQCbqWKVeQlZgJMGIKbaQ0qBuZjYSg3Y+EdQNiZvhRBHWe7jGcBzDl7sT0GBbuhLwY +Q7JHQlEmjipTRvXwx3xU8Vp64kvuY2ZWMYKFwktiKGK0+4r4dcpRmIAmWZ6gWyAz3kZU48LrI6dP +nXvdxNyvp6ky5D5mZhWTWlWMo5CBuZc1lP7HOzQ7z5BB9QUtY8hIQZc1AbY2KzHRuDqYwBrUCRQx +Akav/0Dmt5DjeYRIi2aRsWD4AB1ghU/qADI1UKyiCbDX6LSyoO1Q3EgVo6fpaEoD7cQKb9F/Rm7x +B8nZEpQ1s1EZmMEzFDJZfltLXz+P048J3riCWZ3UujSsuf7ddKGWnnT/ODGLBUiQboGcxKqUpPby +unSfBKeZmiozYCZHGW+gEjsjc8oZVzAm+QovYTRqBCxNDWwnmqXe7LxOAis3TTlaGzuUyBjk/xN2 +IYFmrvf4zAqaOMFEYtfCOdqQZhI7r10QSaC4gY1T2vH1vxjU5l4zDaIw07KW5mwJKbc9u6XaA2HR +IOpp/pN0gdFMZ9fAqzIwk7YJaznCyNDcy6fBp//5TjrvgPlQlr9MWiuBV7Q2hs2BmUhsPd2AKVvF +/NTomgq0wETiZRkBQz4Bov/3YWLYCoEh3QJZ46EixA6W3hqCiDhv41HwDR2gL1dV0WdcweuiFpgQ +1cY1VSsl3rEcfVbUbE0RdAtM5X/g6LFzwlbP1qolqKJYRVVRzsioDR6To7jWTk+TAdqgNbGSYUZv +fxzSLZDZ1hcn5Zw8lSBpsmGmiYyfiwUmXZFVRbO0jC9oVTGJDM09sKpuTRW+88SC7v0qfzxdut7C +ReX5JRmfeQhL5qpo0seuoKooz6CnTdrmlCqxvGC5dJed4UOV1CfxeFHXYQ6wITlFF/cQ6dKIzu15 +OGu38WYFTYD1UVWUZ9CTrHEFadEn/3721myGxZQ20nGWgmo7RDRrHJzu/ZkkvPLqU6ibGGGBzzzzUc +jNd5Tbgyc6lEWRXPUm5TJm3zNFYaxN/50WxJZOysTih7KCVW00ME3ftjGWBUhdkR+XQt9JDeFhcX +q4rKOCZbRTOJjWXCeTDvyFSQ1okJn6GgMuEmGl4IHener1rFkWgMJuOXkuags5POVpaIbtED9Frq +UslWccZnXEFa5ah2e7VFfZOWIq0fNXyevDTwVW0kE31gqq0ZiU/BY3d8AilnJFkirInEYp1gPEqD +Acl9bIo1ruCkahVDRxzzzzHZIKLGrkUpHvRHr/RZphzHy/IlXF8Y9b1HVRgWAKJw3CB6lkooqy5yGv +eZhJDCSlqXl4llmTaSzjthTlwE7EcdZsBuR078+oIjX3ow8T+HRDt21DB0RFk0knmM7H1tLZhbyJ +10xiT6txSlh4q39NBmrQ8KESB7cCfo3T+vZI935VFQP0hfXIzSDvJU229q+HM8xeE65MX/z56NLA +uMs96LSZtE1INR4BwtpxlXndsFQqCfBNgN9rc06Yz6ADVGIBGulEcRbItOMv3T4zYCbm3tq+7ZPw +eneFq27QpG1iksIRl2veWbkTGNDHIcb2vNsgRZmW1IY/vJ4MaK/QAUXOZv41DiKJxfYxyVPPXATH +tw9bv1EpGFcQFOUmJH0snRlNU2CsivSBZ3eDTpdCurerEtu7ljRaM31TM+oDuhZDX9vwZsBMnOBa +++H74Vn6PHPPQ+ZInkerXFAv0LApyD2zOzSLZVDECR6hnkfzR8g9ctjTPolm0TNsvAJgBd+IRwEq +4An6PLP52CnVTjflgM2ajTDEp6RL/BMaHPrA1Co7YlOAu2iSZT4Av/9ARwqFFi0xZYCWJZY94qND +Y8rOcHk9Qn2Fk9KNzaqSGqJVm6JS/3a1j9FxTOrqIg3si8N4r3NYCC56HKOn1a6Fx+lHs2nLwypH +XK6VzhrEcVOIpXqKtamG9ZsiO44nSafiSFtzE3De4oOFjGMFwOgGzHXKAP0Wb1zBUTWQWJWQrYzu +BjAuEaU/0qzmuj6b2aWBKYhhAkqUR3bScHwRq2iyrthHVyePU7bNjIegzzzzOOVPaNwNnceVkdUhb0 +BM11pHt3VmKz9C3BCTJGUtUP0OcaGyhKJkvcTVQV5UMjZqoYkRSO/MwLj07kmDF+qNwbte8FTfd5 +AH2tFsVomtRN1ylC5AGpN9lFApNJdoJTJhVUKdsA8BBjWaNK7AngjY2HHNuOvpMoJP0SGYklLMD3 +c/LeriZ4oopobuJJfinAilJmo/s5htmgRAaFs+Y1nRb0oh0XO410DcAJJJuetfKqmSCabV2bz8n1 +IjSmDrVxL8Nck6mTMziuLdMvb0//GGkv67OZVcWgfOSIqkeILgfTiCEITGjJEhvJvKDecRWjngN/ +gXQHk8rSb359k84bT3025yYvLPwwP2CLwgUPZ1d00zPqPpcJU6sowEMv6oHgdO8uX5DxO3Nv8JJq +AJYfGgQ5ypDBoTldKl+Q8ZG886RR5dcTeWEO50/6TVG+ZBkPa9t/tojEdGnZZbN6SAtsYjESMyhR +NolhXtumY4uRWFH+FkhL7mM3aCWWNpu2GJJ+ifL1sR3aR4/qB51dFLCyJcvAvFZiLwJahCouN2DR +SZ06BfNJoG5F+o8vX2I19vbc56jy6863g7nH0YTOVfQ2MB6s1iCfWlQf03/8hTD3iyqff5Q7pP7+ +HjadmhqQflOUL4VQk7Z7x7EgLqImXboQxmNR5XFI++iji+ljJTQewqKA+bSRZdL68Y+LUOmALao8 +HpnWXHvafDVCnwyaomwTTUndjC29lbv2s8WkcV52qigoNaQqbohmro3qx2ZdIn8LpKV6HiJSDtmL +zB9zObSLSbyNdK+Wb4AOhVVgzP+TudQncovwPDjdq2XrY1iNkIYHmYoxFU0Io8Ri6tKj8vUx9U1E +cvcgk8k0FFlUD0PLCxggVRWFV/yZwM5jgFZ+H8N8LMPApL9JuXYUo4X7ilj/8WWXmIQA/4FXgUnC +IsaxYvwtkJZq7rGgHIqU3xbcqVwbW2be/aLKZ2LayQsEI8q1oIQWXtHcaNZZKt/avRrnVda9gHLp +6GKAGVDZ+lgmyJE8cPHKte8CWvh8rEiItKUAW2QNyotneStIQLkSnedG5rmEdK+WTRVFTpGY3LJq +DUfxIhp6uVnFTADyRBSyix78Imzislt+E3klwELyw5BNhXl0UUsVgu5VjehDIK9fzhGwbnD9HDD9 +mouQhBSrmLBuEDLGIyQuYoA2DyzcRPpgTEZDh00qRrrsl0nOLHI09kZ+nKULMECrhgL7mZHMOBZK +L0ZinO5VVRX7gJ7zlxCxJpxiUZpSdKeZGr7Nx/nUfEcDBS2yaGCS6nkQYLZZpf0MDncXI6R7VbWK +NERaaqiBgHqNV9Dyk1Qqygl9zD3AgrJ1/KpMNUuej6kx7UBiLI4R5SMnLsYq6gNTJfatIQQJOxUH +TY5Bmabnw2dVVcSIZWe+dJT28V2cWnDJEsuGxZbsDKt8ihvFtFsEqfzRlRVRNhKRgAKs+VZqWRQY +GHxCwr9nQwe5MdM+S17z8GWDOUbVaQs9P7xwiUlI97Kqirwcu0UkkIK/pWhDQ90fBEhhhWe8g8Yx +vfGyphCwN6sFl6qK6VwiDekrGYSLmGYWmWgKY0gOHDe5fX+vyLTXH+23X5EGEXfJpWZOdnUBvKcZ +nnW771ILLnmiiV7Mfg6pv1lpMVZRH5gaJ3jgNz4yolTAdDfj7LqO6V8bi0YmJ63MdRz9evjjzZtB +2tWMTlj3VGqBLQYXJNFo4SXsu4ASUwOVOJ7kQHzAqwrwN0QLI09Zb3FvdPP07xOISmyS5j1hMwWX +qopvQYfmmrAYiZluxEzdGOAEmlUiKe+SPk5QTD27A5KKJpKypI+dDPeRbuHLFFyyS+XT7sfm8SJ8 +V3MnmB/ZyIoEWAxokPy/RZBOjI7CdJeglO3qqrll3cGnCGqWVwsu1SpKOumFfIuZa5hKDL8H/D7i +eZAuF5kG+CMEYSk4SnwNDuRjRV/p8n+N7ZhiR4HPBNVZqvFIIV5zzZcJjLMg0n+8yl9bmBMS7W1E +xW8mU9r/K0B0vG9MTv1Ez/3if4IDids4sSqS9mVi5C5VYintsUXMJy+wVQxjeyXixJpOmHS/+zTg +D/sgeP6GKPEUST+YJMD+nPSJl0FCTzUKHXNbZAnAgppr3KKMh/7j5YoegG23VHHUeKQqPvg04FgA ++k5fEQQ50MssAfYz8uHZHj+MM5fxasElSwxpislJjBcOTP+yLDHP7kve+n+RSO6ZSqQjgP8uCj+K +XsET2z4pn+EVPzB4OTxmd0Ew/n1WLbhUiekcAaWquIgZPdK9Su2Q6Nh8ydf+S3apktLUKIhTURBH +bwmIHD16Tlok9cWKtaRLJGE0HMhUs/TlN+0kZVGv/cySF7o/7fvbj6DURhfExOQIJE+H6Uv9kLTn +YjtLZ6iHEOlsJywVEJr4JacWXKrEJrVWkQZmOrXwmvSByTEXrFde+uUrQez1E2CzLITPksl0lYSS +g+5WREVzHAQenrRXQzDyYKaaJUtM28egYzGLgVj/8XKOv/Zvf/rmXUQVMSSTCQ6iUwkEoSQX4a+O +y6J5CXEhIrMkAfZMpuBSJZbUnjvCEDeIG2lG4g5DYNj97kutVxLjIUampCSCwNk/CMCLHBzbqTzn +GeBZOO6shVDwxMKAIcNv0mhEc42DuTl05kf6z6D+tOj44Y3/+tNjT/WJo+kk6Yt85wkOqog1DH1E +Meoi4hH8Yss1RGLzCJGWT6xxQ2slJobSi7CKBjMCWWL+Ky695QOsx1JbnZ5KAPoAs2ktvp+I7r6r +FIlh9Dg1H1MQDJ4vHj09n9URw69iqnefzCvNmeen1CczX7EebYabudpGMuz+XQI9unNL+ij+kijA +fT+OqK2bRsSzjxGNfCJjkecHzDj7gqRKbPLduWu+9CLWPMwWcyoR+xIrwEgAYteEhY/Si9JtUyy8 +crX6nhgRT/hc5RZ4ueonmfXJeU1bkpXGX6mLieO5c+R0ZWLhxsPACZ5V0HFnfYD7noB4cJSTTxYm +0sSvuu/HcbVRzlGJJSEkPJLpW/PqY5N+w68ykT6PM2v5TNuzaYNIn2YkId3L6vKbL4EEqWmSC8PI +NxFdGg0nR8dA+EhGYo/3QfSyADGVm69SCxqr4qkXLK3Owxz9+PomQ35eVoG94HW+N9v2sUVIzPy4 +MHmIbwrR0Eg8maYk6c6E0EliPF5Xy77zXSCx99N49NerBY2d4MeZenubs72+f3CLx88Z8TMhn+wG +OBlibFsybS8txgkWdC+rEuu09TRNAFRFZK07S5Gy56arbTUs/XZ8N9eKHoMZRDN5qwWNJfbYXru3 +pcJmr6lg7J2GwDJLexNYYqpVYKT6MCyUzJcGnF5PgFiwQHwKpzzzzKliNTmBlni5LUbiYBZ9B7QRS4 +UXhKLWiSt0XJsHPGM7x9v9UQ2Fm1058Eyav2RONw96aEdK+qqwyCmh4gGqFRDCMw91VngkybUx0E +LfHvMi/UjEOknWm1Ot0WuyEkhZJYAUaelWZ8StsLsBiXStC9rPvibz7NtlRfMScxgD8gBSs6e+HW +7su25WhWfdVGl03VGK40ePoiBmhz/k7KOYshJy0haF7fUpcGXlBn0KPkqarzgH0Rk8BUiwSWpGkk +1pIRTInGC3C0yFC5VGATqsQCkI2TLAmL2Q9RZJ9HmHa3MUjJszJqTE4WMbxLXQmOhBSGZFVUgaG0 +eSwsXSqS3DYC8iqiiCSpa1+PMwDFMh8uVWKzatR6+hhVm2jWv4WrYpFNYlHKKg+YcfYiZ2drVTA4 +Yl7dUo3Hr1QVuv/WrCqKBVkwlkS53Bc0MGoIP3gnHCNPROeDAfOCS13ziKnAHvcJ2T4G8w2emE+m +xgPb1wL7aqKKp50OE0a501HBfFF2qaqYiQo/Xn17ZhJMJbbwjQNY//GKKk7eX+9u+n7rgWujsaRs +fFE8yJu/+liq8YirNv6XTCtSjUcCooswHkbZ85S26r8I4LXhVnY0mZ6CjxKJRYPMXtP6lqqKGXMv +9TMv71Qu0bdj0XkUnXtPkb1ULQBNXFVoKuVk8NUQQpHgX46Y1r5UiWWAwSP+DbsU3kTjqPB5FP/M +P8y5yXw+BrU02jzLi4nDR/Cj1iou8gxNVW5Wfw6YsBhgv8kAiw8zaqKhFESKq2Lcfu9v52ZsQ7r3 +ZSTWQHwNLsiLu5IxvPkBH0eEZg5sqeY+E9hZgvQvVGAiFy8O7DD5/+yH8y4UCQb0dwBXcFU8vi05 +ix9BvBD5JWf+jCWrYi4Q04xH4S1tEsc/Q9N7yb3JHfmX9IGpEhP/GeFbgSdDSiyJm1GIi7wkCKZP +WKrEXsxraXXHx8w8Bujn5VI/zbti3sdSEU48CsGDkJiaEh8hCKO/4DnTJyy1j+nEGN+Nivax9Lh8 +w+m820xzI8HMKMLEV7wDbgsnxatRiA0/UGKJTagM5bGYKu4p4ovkX3P22iPdOzOxKMcEiPUyn/+t +s/FyvAtxvnCgiMSWOo6NiZr6k6io8ch0zI6i9asSC48GIew8CE98+mRS3AwsGxt505zfpUrsAW3S +wRQYJijIUGa3RN67C3OrGA1GYQJ2AN78LEhXIx83EQgisydcUOORBRYsUijuyKDJA6Z/qyqx0WCY +zDWvIPD9nLTZwvrC/KulBRaVNPWL8HARiaV8mU9cXikz/mioT3lRD13fJ+5s7GBfz4+upNt4OWCL +wQWntBKLEXMfNC10Loubz11EureqqoiCl6IIvpzI9f0T0tVQJYxXTYMpLVFi6dAjXOE1usBtvm+g +J/tpR/aTgcRUVbypu6EqjG8hfeyWs2Iz4i97eqTIMdCleh5jWoamacIz00K5d2m5hN7mia5n1sd9 +EfGrgB9Nyovq/NpAkTMUS562ZJbDcpQSQqZBTIVc7o14bhZmOoOmW6rZWDIF+IPJhMgBsAI/g8CM +lrz8ps1NRr1707ry9qTi7I2mAbfitNNOiKQ/X5EWJfJEjg8+bs7vUq3iUa0q0h0SpnW9M+8zWwRY +RuGIMxOewtwkOwXY5ndzEPh+1XyBLQYXfFddD8gzzzzl8jalJEJxwmFJGYvK4Ym4CqyaNpEL1bP8ZB +lF0/X2DCYoBNaM09XbE1q2tOXq8syCJL3EGCbRQ6x579QfPVnByDnesBM1pqH3taff0zZy3MJCo8 +eeCcHI/Z7C1FJppUFVk4GU263F0cHdj70Wkwo6VK7GZVFXtyfE2ZAgM4EdV9vj6wTB8blXNDRuLY +XavceaTIG6YL5St6cgsYKTDbowTwmB7jxYxHFBb4+nepwEYlGQNmmOwCxqycMMaQ8Jys2dmBrMgq +1YJpqX0spgZP/0Z7i0+99DvzEnOn3FLmqUUktnDGcsAWVf6gqHI7nskBAm+Zh1cs8PEyCyTFQlYv +AZiwmPLRtMxQipO8FjWH0KxJ2hZQUkLlKM6qH4q8H1swLXXacjQjMWmI4ZVLEwTWz4xLnNC/vNyi +HAUUiRFrIT2rLpiaGw9c8O44aF5/2UKkTajB068GOQ44pbOmqogLPKFMyy43iR2UZIZkN+lkhhfW +JAphYVq9jEiWm1VU40bKSFQm6H5g40YqzACbeX1n+n5sEbTUieYVSgXy4KS6BqOm05ZJnz4Dy00V +1WOLdHUxqvbXpGnot0LXNQOohOZ+UcDUNZV8idH5s3FdRmcoltsAnRnHqnJ1TRnNJWU6WXiBM62/ +bH1MUM8a1kezaxkRszj+Wsgh5Zf58tvCaakSG1N1hanAGSbOm0WsFrnCKyrSZWY88IgKzGMJZfqY +aVT4GQ2wqFqT/v1l62O8+uTTtnVptfv8CHicTRZaSFqNCxp9IVPZVDG75Pn5ihvV/bIvmNmDM0Yc +LLNgQLgj06QSw9yRqXLEICwY0ASWhZQyBVY2l+rhbCcYZyqUDxHgjH3FO41YX2YuVdZ4ALzOXK58 +mDDLGKPd8Kp2rhJKbHHAsrqcfkHNR3OKWEXDuljNlbQpsLKFSBNyT77Vp/x+yyTcvc7OX2z6Lq1s +nocvT1cCyq+nTUJxJ1gtMOWXQfSxsllFXvvktInEZnW+4OSfJRzHFlU+ql2UGDNJKXFI5xqnNocu +lcvzkFhtJ3jBJEHBSZ1rIaWmYvwtkJY6H0N6mRc4yQiY3vo7L/80EE3ZzL2gDUnyQ2MnmKY7N6DZ +BV0uTku1iju0T/4VGGZe0O5Pgox7b4CgbBILTWiuxbDhfEzkDGsyUMWymXv2Oc21YDZpqIakD+tc +VHhfZqooRbUnxV7EgA3q0r6J12FkDpXL3GNOqytB4z6m+9pY4d3g8GPZBuiQupyWZwdjxpMWXcVS +RrD0AkrMh5Y6bWG1I1MQkHYfkkK6r5EVYAaHH8vm3SNFYmr6apl+hg1jsz6hd1HR22gx/hZIS/Y8 +lG4j5SfrMgw6a7COiugPgw3SJTEepjqi3qLGtBPX5K7daSwxQfeqDCxajL8FkpnEFONsHizRp+bK +YEaylyYASUj3ZpE1rsgAWEk8jxRPf5ql74ZMwMFEy7osZzw9CK1/d5PuZfnBAf0iJdnnoSTVnbzG +pHiUU6PWvM9WjdRro9hg1ognBd3rARNgJZHYpLwIOFtpUlxSU0ok8XEHp167HS9wLS0EhicZSzOO +TcsLhZOXmxTPeB4S+gGjhvOAEcwZABvXvxwEw/PdJZKYDCnZYVJcUjMIkRHZY2eVa6OGy04vIN3L +chg0gyIlkdir8vHOcWRSXOKUyT7h68lu9UZBNGLzpP7lIBiu5ZRGYmc4+vM1M2BYlRhBgj2scu2o +oa/4P/UvUwM2aVCkJMCOyz/HzYpj4az8mx5beLZKuTaGjYx0hzGwZw0esKiQw5TMVPFJ+afpGRKJ +yyUBkQLKtReNrKLRm2nCA75f/6vSSGy//PO0mVeF1Xw0FFjGZnQYZTdJc/qVEH8w/udg+N2FB0aN +IktfnhhHwJEE5fWJvECtRrIdM8qEJ/L6lRCJSUZn+Esy0aSOxxidQz1nXF5NtJOkwyynXLpVul1f +YmpMHT1g44JB/aUw97iD/OimNto4QpqYyW5CeQ4o14JGxsPoYBTV4w6D7wwkFg/JHYRuZaX9mWpI +lF7PRaQ3U8Uq8n+o1+tq3ISMgEmsAmymFrIbG36IDfKqTRhWA9uNvjBa4wlhpV8LYxLC+0TuFWV2 +flLKPMPECRY58uNJOUSaAAYkCcq6okjTLnQo1wJGNxupFYakoXnKSCw093LsF900j+DjNVw4gbDb +wrU2y2/AJx7N3mEIDEv0VXKvHCLNsKklNdy9xPzf7NvKEYz0IRg4HqTZEyNGD1D4W5tZQp5uHoHX +L1kHEydfosIMEl2ZouGVQvS4AaHgi1G1oLHEElciwuqhehoizRAYFtRd9P6K92RU0TDK5C+MvkBv +XG3kXypNNJapWyT6IHa1wVvnX6WdKyRCIs2L/p4AbKM84kcHMhtYjUOk4W2ArwDZXewGI8IZMYju +D8t9EuREO7o9wzCDLUYPGbacoopySh0qAxEJgHEX+ubFj1NLfLwVwcmgWOO8rLtZrv3KQFAtaKKK +lYCvUXbhHTEEllFF+P2AbWQkW6W+8egzqsX3D4YPUAZoeZNxRG4cHkQscq997xX6kHMCVAVPJn// +T/fdIMjAnhgpDoyolGhXhGUssUxeNfIMZj2vfApI+ksDeIdRLV+9zfABCn+yxKL0EycQYAj94Q9O +uY9hGPmBa7KygfQzuY5T3U1qQROreAikeiRvOLnb8Lk4lAEWdddw6kcjx5U3qmXW2GdTgIXg28D1 +TRIXgOMigLu4xPENIEmIADtjOXdrvAui1RfTG0f5jJdkAuwJSHiUl8YnDJ+b4oJZjJn8oH0Go49x +luj7DCGrqhiEX4vXPveMWAW80C3iZiHuewQSTnTWjqZEwO/4ArK2UfaFiUCmoU1cqjMoZVfWbh8y +fK6UZ8MTyilgw1VFY7dvv+E3Kn9R6N0VizxzexRC6GoRH0NvVu2GpE/WTimJH/0kbbbURcB97/mM +TTaRWIJNdBSzilJe2pY3VYkISYOXD8ioFhOHMGMVv5lOx++7JQLfRMd2491g7XkfFWYQotjjha4u +9Ayg01vs77T7A3NaRBdY0jfLKt3rCcPnYrhDc+0GA1/ROEHeM4bfqJhD4LstGRn9yrXwfdzVjCvg +2cZ+mlKou+2OvY4KcDqERlnR8dCfziM3krie+Nxy97rL8Lk6iXYkn6RvPszPVBqQ0vABuAxJo08T +J+OXgDZjAb79DZogUXRzqPplgI+5Ud8z9CwU/t/iPIyHtP5VpOwvNJNYUHMtaJAw7k3DWqLGwDKq +2PylZJS6uWcltKsLwW9fkVeMgscg/gcemjE0T8mt/4X6zjktIgPTMH3FCQT30E+HDJ87LWgkZpgE +xHhWZxKKRlFFHtjbxdHEZ8mcDsPVCMELn3iT9rGoxMV+TrpZNdr3OXkRdINd3YJnOh/r7ic+oMs9 +6KwwfK6exEIGwIzZN3mho0gsELvxqlRQ+oc4nMHNm7s4OPEnf5CNx5Mo/UgEmkV0/GZZRL2nfWpB +sxn0db8mzzzzt3havOWGJJpF02qDIw9wcRLJyUJhqJX/aT5Ngrt8dgCh87RsbpBzo89KtQDGKfTsPm +Lt99Y/Kd/7OR1zSWdqJZbyFXtw9bv2G8ep/SRtzEYGAVDR3CeHGJTVx2dfrneCpNVNO3q0uA7923 +XlbFWyDljuEvWHz3XUuVFn/u0xl+zGbQ/WRKIvdFY4mlUEADjNf3PPAILIJUzyPy6StvibzygbUE +6Kdo3IufdNDg8+hXfwbTX0liZrjj0Rvk1rn5kozCm6niUBWA3L0uMnzujKA9hEM8D933kD7DWt4y +BiZLDA987JJPH5x8dqdAm3v6jzj4bkBMbMS+vUnfU7eRWRgKvXQzbQK8Y2dmUDGT2ONNqsRaDJ9L +566Fl3h9VZwTYmAumaiiXBO2vPPPWS6uBFsOJ34cgJ8Ee05b7JfuED/8zdpqJF5xBfMEXSzE/3vr +rKZOLbBxXpVYteFzU2pQz3wkvlldYEarimC6zzzz3gYMaiUzPD9FjkUcHfhvA9ax03yUdfz49nHm0m +MbqMIL9JWgtGlBI0s0cR6Zt7kzUqk+VeAzcyGaQ/5fUETCD0oWNRuZJI9n6ztXt6XENuh04wommd +SZZBUkaTdwALl1hxMpPYb4GmGc+g0yWsxvo+78tdQ/oulUkSueR8vsKK61Us61Jm1mcGjPpm8ozF +2ComESv/Hv9YruYRSdcamKiiyc57dRyzyMucUdE0+IU0RSNizQPYnViADfSDsSpm5vvjFVm2JYM3 +0IvbiqKUet19ObR2oVmbau18+S2SfZx0zj2CsQrD7OT6tdCkSMzYV0whZUA80599XULXNvV061fG +3IvGXyk1hYNVorOCi0jyWpWlj4VJeZOCdNMXd176F0jsSFg+RCzcO/rX4swAZCYxltjydfRDtclz +A8qTxy07MteIxPTeOz0MiyFFFZOneegL08Nq9O1OQxUPqT+h7GJJ7DomIOCS77zXA/CpUBS7nVcU +AtNU2gF98HH6wWyA5hVgM0xT5pJBkGyTwPsmElPMNxZ3w7NrIYLJXDqNYUSAmBxeMZmWupoRjzkp +cqwL4ct+GZQy7w7MZtAsmWEyTHVFrYkTrPaxExJTmwUW07OKBtuNlO+Mv1Iant19GyRZiCfgWaZb +aUw5zn48ibt2Q5C0ZeQVYPE3GkcSmfihJp4HFuAFGN7fNtBuvBKcUje0xeCcDanXUF5QpjwaWRQw +pY+NtV2UfvVpIZqCaJT4vpT1oMw9Ed/VEMVcOkr6VuoPgeCsVX3RYNLHEnTs6fE4rdmgMVrKJLM6 +DX84vke5JHK65n5xzr3ax04O3CWtDXPjdRCMx2iL/4iIicCLEIl9VM5nEaFyDLLR9LDaviZ9jNQ5 +iIY3XO7cb7yYkxIUfkmX/p1VrXJEf7lUMKykuMRiV8fwtvez5+0QjcSo512HoonLPoHiaeiKE1Bk +iKNz+Vd6D8KkpAFW+OTX7Z493B2QuNbM3KsSO5kL7AworqeK+ZtrNWQMWuXP+/HEmyxERAhF0sSU +XNqPgunR78EokdiHYRTLEgvBz91r4Rfqnn/jPnba1rvPye2FxDoTqzirvu07S5p9kFNFk9Zb3khx +JsCMv1PDEFrvlp7m6foiVcUEhJpRIBaZgGCqtqtKzpIwBmgUHg+G4NKZYhKbdLudDr4OpDtMXkpI +qrkPQnYlmJorHZ+8ywSXScAWpY+teSQmhn0YdkSCkTiNc8hxI4mqURhJMHAzPcYLoyIB9ic/DyZ2 +fqYYsNkKR/0wF4CE2ba+KXW3DfXg1NepdH+pzgBt6qbzRYC9tzkNwWbk+sJFz2+5hvAsIC5wGk1A +IIa73qtIjL56OeoMwmxVUYkNtHycTg5TZnEMM8tvVPdU5U6FdL1CEx/YNJ2l/DPeviE5WIe6ItHH +Bi6iSQo5Lhghv0emMP4RTGBBlhj+5z9EYUppXrN30G0HqkSO/DZ+JQFwTm3sM6HshIFmwtNxwU33 +DoUMv1EkFrdaUgEO74pHqVWMkj7GBWJkjAnOil1XQZg8OSiho/DqJ4IwqjBkYu7TFnGESowYD+MW +zaRGOvNhgLzjEbdq7zRN3CUYfqMaj11TydCjohSJBImFH42xzcJIOD4BkSnctZma+yCRWCD56n5i +PKo0wApqT3BSlUiEkDoCmdfmWoqrEnt2TfZwGN1NG9TeaZasHIcMv1L4i22elbw/lbriRGSk9jR7 +IwpOwFMwOiV1CSgKKBoVycxw1h1M3PZChrMssIIqRUFskogQEtWaIFk5ymTCm2GiICrsYSGpp4pG +mzxk4gy/UVTxtUf3Jrcxu3ZFRoNEFYWw7zIUioW/Rdx9TJxgIrFAhEzE+DefjEL4O/ktIgMTCpoR +SR3UJUhuB7jO6LmRzGFfZiQjMQnpJtoxnbWEDL9RjEd4czgJAt4VGQtF48CN8j+BwPTRT6Mw6WOo +aQx3+SLiTmCfPlsFwW+jIhLDSDnYkHKC6DF6bsZXhJ1WTrWKWIjr+Yqm6cL4IhL7d2GC4MGDr649 +3nAHMP+61oLXJS67VEiPf/mvvrFmJGFh90/ZwPctxgdVx9giEiPKGKDIE9sg6TB67vnscVLP/8gM +s4LeOKZ77DRLIXNgeHN7T+wxobnGO3KX7SK89U9v6MPXSF1XCumnvvpHlz4USg37nMTheLTjq6x4 +KxsoBKZlhmI/kXwXmjHMo/lG1qBtszyiABPJwKkDzKgGpS0Mv1F8GK7a+ZrLee+u4GhQ4ZhVa1W+ +zdxcRQxeQv3LbF2R9DHbkcd3XoledRs9OZ6NUTfDNChVJn1pPasYMAPGG36jqKKQjEY9ApBxTBGF +vJUStO/r8fyW38QqYZt14Kf3ovF7jdr7bK6xn1Uj6ur3MWzUNDJFDb/RX9uSquaiUSiUf4vJDBrh +DpbxWv/q05zNCBckcyomODm1FfX6mNEBYoV4w2+UAVpKK0kZ5QxdSk3KuCiOynjiQqYRsiBMJMaK +VVWVFe2fuvTGDYZcRfJ4Oq7chZFeK2ejy+qS8ZdqvPudQKeSkPgy6fgsUHmkJLxGgmSMrg0ngvKb +8DDxRKKZgiZ97CGpKRSEmqua32O8/CbmGYWQ2sbcyzoDtPEmD0pBw2+UPiaJHbHBGgTSDOBjPG6w +bjlTl0q2Xw+um0PBMEhjck6EOMQSWT/ARGKMWNUH2J+4cdhwP55eZHs6bdFONGlI9cWQAiyRHHvS +1ouIgMJi15eB4b/3nI1Bp6fEFjcbiqangkEkr6VK8PI8gG3dPHIK8BWJy6w+w+fOaP1jkbacAYNG +FDL8Ru1jyTCe+B4BeGCjeJpWJe/XmpDwzqjwuH//tPcIEoGPpBP7f5nhxwSY89NVT4F0UZIfNG7t +We2xDn2raPI+E8ysotIg6WREDN9LZBILxf6TWiZetPXBz6+Bb7eyED092VNFV2kjksTUzANYz72+ +kyBeO8mZHPmb0PqvmLA5ormx2NsfI1L4i0spceI+4knHA8lvPAehaEjyXgH8Osw4haqTUdrHYvCY +ywIomClobO7x8FVVp0FcP8uuM2lqrUch6qb4+4Mp+8Z7WxSJhZNJ6bQXwQHvFZF3XgfjTTyZumPf +z/Hu0Yd9wchz1wbJI6OR9Dd/kgVm7FLhNammc5DsmNTZVZRrUC0wTKxiUHOjebrhqOE3irmPzV4h +xojE7qa5do7B69eGRAgk9m7tGuj8uMDD+PoQsRzBaPznt2UzJhmbe/zJRGAaJTpmWONtHnqR+VK6 +k2XzXMBBw28UiR13w+N3voTgZ7FRvIvh4kE+eT17zs2I1prLgU+nn7uYiwOZqsUqtvsyTW4IDNaK +7CSaZif5pwwfC78QNcBEn95K8GdhcaSu3b8Hxtd8D8G0g8Xj32YjUSHFdMBuESKvrW2wepLnbiJq +xUfi0+3ZJjJRxSsSgVluUpj2mZzS1FHFGRTRkYAQMmM/aPiNoop3JwHHHiEKHQPxHzghGORFCOFd +EnJtvHZ/oyV2nGpzIBqTYlltMVHFg6mmSe4MN8OaDK5SYaBmOvfUU0XD4xMyRY1bTv75MwziGQ+C +dByk/71bGAuyM4eaRCx2+XuqoEuIvIzI7IEfjYmxs5mCJlZxbaJK4s6hSd84Z/jcsFZiCRTXcWo7 +YHGk9LEYBmniXgSTjDPVdR2KBPhx2xp8m5QcIfP8LvSsRUQjEByNScedGSEYq6LIJ5sS7K8hxk4Z +A9ORGNaVmM+U/ajhN+rbFhHEMQHg9OXw1k4rio5w8NYVeKsHPX4IiRg9vu86FIADjd9NVn5C0AIT +5laJq1IdKeEETHKJgOFzz6ouVd5AlCAz6IUmFzYGpvAXJsC4+6h+RfHu2+B4wAdpQUxupgEbksT9 +DccIB4HR2OwNbyK1oLEqijsSZKp9DyR40XiROzNA87lLuks55kseRc39BN49PdhPVPHXa6XP3gpj +PAuTgG8XYI8DElcD3PgZGIXoWPyuW7JjrrHEJFZqSvnugGkOX2v43FPqOHY29+5O5Ea1jGIBzMh4 ++FasYgRv/laKS0OKaRLjozAa9D3e60Fpjh+8CaX3QvKyB6jOjEJsOisDY6sosokqUbgCpliTnTk/ +Upemendk3XwxGo2GCu8TzYGFDL9RXSo4dpKGJE5CUGyies7+eh2gM4KwtwKRL88JrJJtPj7x8wwb +xhJL+pI+3LwWEj5s7CxOSEpF716fLZ1GesaDMwUWNfxG4W8CLo0CP07+CkmI7pjnqZB/w/H+jQjG +UfA+efEqArFwtn1N+hiXqMJdIzDDguF6KTytWsWRm3zZckQRg4X3mU+gTSSmqGKYvvwNzcoS6/o7 +RJffCBCe439KnIdXfHD4OJXYKKRzed6MVTEhpDpozNEpH/Qio+dKqij4X2VH4KReqlqTzbHmwDIZ +405DC3slzSeF30rwcEbAFwE+9mXef54Vhb5X74iRwZNKbNydKWjyRpOaeTKEEYk9Kxg992m1jwXg +nh0ZrCimXUScNg+GMGL4TaaPTYPN825I1QTELxELK3JwPyTAyn4cs8fRWMIncikqsanUnowMjAfo +SZSoglflJBCPVRk9d0wFxuNE5vTONFFEjQSKJL3kDb9RVHFCPvScpBKTlxSxLB74DwlBcD3E03J7 +zn2qsSqehdQIDRAxy8I5wxaNq8DIDUOscomueWiAvbFYYPkvQlUhIP070VwTZCyxcUhW0TM7CR9M +Gm4xvVv0ZTibbFIu0TUPDbAiIQNCht/orFEqT8QfpD9lWdGVMRkt1QtOvcvYKs5Sy3ENuZuH1GGD +ViKeh1KqCuDR7kwb66T4+w9zYB81/CYjsWSCuLmgNiJ+AnHwV7QDppNC9FXCRTOP10ZhRsgBMzYe +J0AcoTkwJlkQ8+KEzaXf5VQRfqJ8FFFUK4EXzYEhw28U/jZ6hkQIqLWyGDOV3PF3xUnbi588XhV2 +VgHHTnYSN6JpPhI7C8RXDNCDboCHqwyemzUeeY1LJKYBVmSRyhiYujRQhcWJkMorJyKM0UbvWoJa +SkdDQSSM++tE2xXyK51MVcYSG4UUP8NNySHSeo4aPDetOsEUuGrRE3q55M23l5rszFGNWwSkmBod +G7e56VHo0NXULhI58q+ikYRLAD6qVKXWZSyxoyBWTcKU9T99AIYv/jLjGCvvoVZZiWjHpRdMgRV9 +uR6KEtnwu5VLXeTqfniSIXYexJbD7CsQeCsWg2CQvtwQGRWYscQCkBg5Aan2DazJXoYX1V2v1HCo +Oe4S6EWtKt4KZmSyrU8xp086N0o/fOnH6s0IJgagp5OqIr57r+9eFJysWAt8CM51COmMT2U8jgUh +VXUPTLqptAx3nzykqiINtqWij+ulXP+fYEZF992fuGbNqXf3XC1/ThIl6ZsV+NveoBJLRvnvE3sZ +k6htOc0KUsbFMT3b0tQHYK30mcyXXlAb6HhtnsR0xjFkCswkZ7UisWg09uzl/6poR7rrdlwzwPfb +tkMsKU4FQvdZqvZ1u4iLT1S2YypjwszeQYsBnjzUzZmwFFL7mNi/I2MV39KZD2feGRuQyVkDRWK/ +uvlWafqyXfRZUrpxOHGcYR87ZIHZCmldP/ueS3zhP+2AM0MIvslF5yOxVBXl6etmrR1T+5jErMkA +o79CmgYwBWaygUwB9os/Wyc9hLvI3KsjGfUj4AX4gfQUJLoSUyN86JaQ5OQgJO5u/jZEM++rTFVx +hAIznoxBbhxDkxVIrfJ1dFCDwzwFu9nCviKAV25+GI99jzyrp3sbtYpkJvakv5Mwn0rDMT4Wx6Md +8KKEbWGIZgCZqaKSAKIWTCiY2Y7zyvHvJjOs6OTg5RcLTFXFf7pFjL2kjgrNCDiOG6peQ8qR3nnv +gRvCk56L4IdJSB4FIVOXqSrKFZlF+oSHs2Prj61qwL20jvEoktE+avyV0lq//N8fxfHvqRZYoKrY +/FnSejE5bs5/+jfO3OVG34tB+uEcINN9HvLPgBlLL4pcphX21mZYCWnvE8wqMd41mJHY9458Er/4 +4y7lWURiLpvvnIdVJMbzp+FXtu/ATyYg9sFc+IAlRnYeza4x4Ex+0DdQSKN5hTkmCyhk/JVi7h9o +OCj+sFcZNP7QA+yNPBeWF3SIxPjAb+ClRhaaIxD561ykiSXG4s6LbD/LZFjR8jllXjdv/JUisX+5 +6W5p3Y8VtT9XY2niO+A0Qxd0iMSEkW0IQx90jUDoUoD71IJLDAsfyR0kyoRI/KkOp0WsImf8ldLw +9190MnHre9Qd7gQfjsZnrvepqhj4qCA61gFiIfAoguJO8LxoLG8jsFqVSCQWKrhtGplVYgZbkVhf +eOyxNN+8K3N7MhhVJJYiEvveLU1S7KREZta+yzjMqa20RIlF845+RZVfszrm3nz1zWzLnxqoJB47 +GYNdX1RuRzAbiEwO+ciXxGjyv4wdFKcDongFFrgrcGbH3xIl9pCoYepFpM3Bq5c5KEdmO9fV0DKR +WDyOH1U2i9CTLKHoq5vZqWvwZiKxe+In8C+b0snzGPkiU5k5rXGItHlRVJsl4qyOxMwXqcyipKqn +an++DqZ/+y6cARb8et/4t/oetzNfg6TvZCw2ue5EbGLyXcSjCGeS7S1RFY9qt+ulQWvuXzetxCyQ +uCLNkWgEEpYPKp2R/OTOrPsFjE7fRTp0ig2lIUHcKh4LCZ5McScvCLBTWmAzOinXo+atY/Kd2sei +UZoLV+nQ9Mz/hLJ6T6wiFnjqgEj0jR/prFym4BL7WFC7dE0kFi2syjQkr+khivwZTXQhIWiXCOyH +2j6mtzZquvpmkjAp37BkXIqQ3O+KjIxLdqlGtKr4ex3jYXpMwnR6rfA3yAchxOMeEb0CB8nghX9m +GiGc0hIldlSrirTGwqoeNatD8pl8qVjF3vrAdGAzdlqamV195Bpu7uGKcLbUAVpChZfeoKl2Cq6Z +rpeavhRUFZsLjbtbJXoO83VET7Ts/D/FOFuiE/xe7UzrtI4q3m5Wh+lkTW14jo8Hd4uW6gDegwbv +SODbMhH0DGmpvqJWFekVNPeS+Rlo0zcxiiriH3KJuk34QNuf1u1Gr7bZdrfE+SKcLdF4PKw1HjEd +J9hnVscRsy/V7ekJNuXyJH//z5d2IKpl59ZrNyYU0BJV8aB2r++szlo8Z1aH2fisSmwSbo09w/3A +2iqAdAtpuvjNr/FFOFuixHTGzLQ2l7zpsqJkyqLS8Gcb1p9zdn4Sd+F7Dx8h3Qd//hoE5rTEPhZ+ +SfOAsN4qlQmZ70ZSJObeu+aJrf7mx36P2/y78Zoo/ke2WLXzMvdRw29CWuPxOnFEC9CKZi80zVew +FI2YiERe4z7U/M419CV6YnAtjiIoQvNSxaDhN9dqB6HZXOT7DJkKxdyPVPcrRuLJ/V7UBehl2mhx +bLWy8wcmGMIxXlp8WNveZ3UWc3gTDkzCFkH2jGY0MuPugzZXs11CGPjEcKAILrM+th/UKP0mMXN2 +aBdxT+kYD2TCwQ2m/KkHvIORXxJWqy3oWtJGiB3v6oIiZCKxQQ6e+/P6moIlnGkAADyKSURBVNpG +zzsMi49orSKRGC6sijfhwOy7zDh22jUm1d0AzV1du89dDl3c612G71gzZDKOnRmBx92Mx2+p9CKj +4mPaPka34hfcb5JlErR7b+eQ2sfCEZH0rHssaMtjF8F9MNNVI4A5mYWWeTec8X/nwKb9DYxh8xzU +SowGOCwEYsKFxIEZqZvEHgCp9SHc1YWcIXqYStq1qwguM2C4HiZdfsbv9jt4o+JXaIFFacD7uZfO +mTBfZGKlvpu6SxTta6AZ37g7EIFxEG/78RKAQb/Kz6zXZ1heO47NauVjdo7xzLz4ez+WWj8J19ui +m4nEkoBvewiKkFmItCdUPOMVnFHxgFZip4giFtxvlFaT0gfN+VPqx7dLonMtZjpv/GkgSvcMxczn +5GAusUl1c+VZ1rD43yQ0pWbp9ta5l6YFwwreMg40JJN6RnMqKa49ilFXx5XBCPxJlXir+SEgMPc8 +pgPKKJ3ZE6JDN+inXC8oYDLjSjeZ86cUnZo9II1VAP7wO/d8qwoLD970VlGX3XTXwBo5kq50jzGw +Ea3nMQUCLqjKpB9pJT6XlIYfTXpmuEnA/n9z+u9IwPiX/6KZLQLMzLvHW2jsGEhfZ1xc0I5jUeCL +ro3laLLI90ofC0k7JuSg4mhzINpH2voHRXaOmPcxTBBNd8BbxrFZ9TyPKe3xARM/944iOyVKkzaZ ++IjiBkjwxsV5vXGMK/QNo4bl8X1gTqVJdE1tKoMeR8bFR7SqGNZKzHgLt2la1bn8LZBMZ9DUpj4v +VJsUv1WvRTW+4qxgVL7IPolSpiY/s7bPpLhP++CT2nHM+IXmoCFklUoSJ1imxABnUjyk2+SFfSxo +VBwbR5UrOTCcCZuoR5KgPSkQI8aj4JLhmz2x6Am6kmQXVoDdJJgU1zH3xPMolJjhm9oZrhh/JTD3 +mbWIjI+vSz6txCa0LpWRx5r+2o5i/JXAeNBI3FQRfiGYFB/TPnhC28cMm/0sFKMLYe4LvqEZICnb +46zJ60NOGxzhxfx9SAoZNU3qzqL8lcB4pDqUpk/6TFaZdPpYUOsEG63OS4b1ZulCGI+Cb7ASsZyu +tiQ6jIqHtA+OaV2qnxmU/jVflL8SSAxfj+QgaYTLZJVBaWmH1ngcJJrHzb1ksHSINxXnrxROMF26 +q2YsLZVM2x1GxVk9q4UKJfaP+q0SKzoNLk1K11eJ1bAdbrO7/x9bnVHxuLZFw6SPFVzi9AvPvLc4 +f6XwPKaIBm2zDgz1egYNHQRe28dGtBIb0S98jwBFqRTevbgGMOO1Mp3VNqOIupKg9RVf1EjMYNte +6uPz4K8U3r3klLchP08+Gc6hq7SqEgVBQnMvhXTLRv4eQVEqSdrkDUCjDHTLxzQNiNdK7IfZcyFZ +0o9SMzzzzfGBK5hlOOAoXmUUYmM+/eA7BezrxuHEdbZzEnKBYm8JaiumWPzicZgwrsNoxm6LwX0TcD +cghzVKSgGbADgPvkLNeGa2Q4pH2REtc8VX+bh/h7o1rzSeljey7t4hIoDN/nz8PpxAmYbLDxSwB2 +Qo6j+4DZEjWvBHDNp6e10xZd+tcd87hJldhdoWaUhmDw8Oa+UWdDEGKWogXNgL0q72PwA2Tigmqp +SbuBhVjFwpcQPr2i5/n5AMvwdy8kH/ME4Kz9oV4apEEsWtBsohmX0z3dYxaRjtea8rtB08dCOiWl +rQLMg9Q+xr8rmHy2ej19nZAidvd1a/36IgXNdw1gMkYPmkmM1Sb3COKQVNAQPp2Sf6+HVkuKud+2 +p2H971EQPstGYFYIRU94+9cUKWi+5QgTifXSzBFGxX3adK9Pa8YxvVDbos90R1yWFIlZxpm+p/5P +Ezs83FIVHx24O/AHsxSVMpkv5tA+NmAmMR7+rfAS9TvmAtNrlx/9DYL5UMbziMLv9jI8pNhoLL3n +3Yfc+7kiBYtsYCES6zELGRvKhGTN0ajGJko7CoshiBgHGJpDqueBIvA7OTl3BNInBZ/rruPFgBVR +ReIzHDZ718PDs1UFlwStrxjSlIt/ZGR+wJSGf5D0re+GgpGRq6+Ne7awbOi3RQsWWX5r6Pf6W9xW +o+YhQ+/ktWjutVMYFbozzzzprx+S0I5kVqQppQlP92b82aQca55hdJVpjs+TlXpGARq2ip2bPOaWk0 +rIXHqe4dcy9pg17ovFv3Ga0WFJLaxxLVTX/9g6o0TN8NX0/vYN9q6PHNH5j28YD7PYynoT8biEZD +Tdl0LVl6WkQF2yG0WznEfyvGVwF/O3urrqahe9NE+S8LCrFkUV/RXBVpH+s3t4rw+vodcy6NadJo +aoGd/9E8camqOEz62FSaDC6YYfGn3oS0ZB6NHYpKjNiuITPvngBLH/fNuTSisYoaoxra5IN5kmIV +e4UopKeHmoYu3dSBIcKJ29v4IgXNrOKkvErVbWYVWfL/3Nxp6JiECjy5dGG7/PyeYsNrljLzMSKx +STv/FA4LgN7kUpYarkhBM4klEfXuh03nY+T/l+fub4lo1o3PFxSP/2D+KxnKnRyMRtNx4AQxJvS6 +z6KkWHQCYZrSlROvkF0qY4kFyH/JM8chfZk8c+5THywohG+omjcw9cTfT5siycl7OOHRsPDslhlI +1AwJRQoaq+IIvO6jLtVd2YwsOiSX+avKUN6lUc075z1z/xQ3muVwKSDF3B9o8K+ZmnWjE1fGyeg/ +DdOH7VyRgsaquKfSExBJ93mcdDbD5umgP+JMvkPrw2guMPznc8uMfd+wOi2pRxn/cz3MhoH7xR91 +c5hLQjKBi9VhPEAPNNirxKOyEzxt2DwhmfObOvIuxQuBvTF31++bz5sHHJ9LiioGuSBMRQBFdzpZ +ILZpSsI7ihQ0VsUnPEMjNNDaE2Z97Dfyz0R+o/ThAlUsOIaS/K+/mD8uVRUDaBRmpxg28BOiEB+Z +Qik3Ey9S0Fhixysrq0RlgDbejaHshk5Z85ATic21ixNzmgU/9qZhMxny932BmPtXP+ELfIRMbdvO +osm9+24uUtDcKkrKAG28LS8q/0v7q3KXqgpV8ZU5IY4mvvrthQBTJPZNooqxCWC/vxO47/T9hptN +4CuKFDRfzBGr5MUcY4mp4+eZvFWj0QJgUvOcEl9qKtbWOvxtJPOxqRj4nmkG33BzBz+VzOycNyQz +iRHPo0+ORzcjFCn+1h2+7KWxgj72xpxXaAl2YdkllJbzEIml49O+X/x4nD0psX2Q6ii2d9ZMYmdA +rHd6GRdD5uQGJKrd6XhV9tIIzJXYrfnW/pFnxheWjFcxbpdRiYUnuW9+ZJYLiigMIlNsMcdMYjMg +9rdYB1q2HmYNy3PKry4LygIrUMWDI8pvelG6JmlclS4pEgsSq5iMYyF4pcgpOYSKrvubSWwcJOu+ +9g12xsIZllfxJP2+zJVr8Zx3P1jw5f54k/vnHQsDlnnbEs0GiZwnmXn30yC+z+3219/VzhuW/we1 +1Hg2GNJBnO/dx6W8SPdvJSduEGBBVJK9VIrx2As08KwRzfyz+juriyNzjcfrE1mX+NFPd5jHgNOh +Urwfo+Z+vbwSnMlNqUfqaXuRybyfJPOxfFVs4jOf/mtDfOFslkRiZ4AO0F/PRN7Sp9NKMdGaObJ0 +A87fyYNDOzJN+Mbf7HbMbcsFAMsrVMyZKg5sHMQmYsmJnvmMKxBHlF+brSHlQpAmXc99fQwpH372 +23fDdfPjKZ+UqgZaye9kr3JA7627Jve+v38HJN4L+7ZtMtr/aqaK5+Q+dgBoAHVjko8xY7ErszYb +EvObN71LfczsNbf/H7NqDEiR2B77F0mXtygT2qB18k8tZ2KA18Ah5qYKpF/QTGLT8mLOCbP5GKGP +++jPBDeuetEjkG8Vzyp9ED/4L9JLP0SwYFK6a3CG/J5NK/MfPirCSISG2gL+6s1qoOIFARuXjce+ +IvslldfrIitVKBV8F1CexJ6W39xGf/TkzaHP7Fg4LlViHP01FVPyZ6NRCfhggh4NYm/sQoGiwDTf +nUVUYoNFVJG+taDYXxlUvN0d+aoY+tk1kL71qX/8m92Pnrp1McDUrIx0Y2NcScqChSgGfgTTveIC +uxkZLHiZ9jFEvXvC9yRv9uxkE1CJwUtW+c+D+VYx1XXplxxb4e7U4esFtAhcGYnJe1TTshQwjIrA +s0Dj43C+zcjgVK6ZKp5GdGng2SJpxZUVHZEjszIf/Sswp8FfT0ejeOI3e1ITsChSGz5IGysWU8Kk +E2CklXxEYoh9VDcfApg7wWcQ7WP9xSQG9FUXHeo88lmwkJTnBE8kR17+rzE89Pe+xeHKjGOjGJ8n +vL6ZaGNFNCbBK9T9FmiCRaNQv2YSO4foi7/9ZjtzZHpgRFkW+a08phyU8lyq6GP/9aPPdH7St/AB +bC5/bCJxgnze0+UUUnTPwDdB2RXpw/KWFh0yk9gUottnyQCdYk0fnhpTJIaPX0b+8km5fJN4c/ML +8VA6PX+nvJBUJ0x4bLoBInCMOwYi7WO/pavrCDArGjkyZiHSzqAEkdgRiZv0mT+dCJX6KCDHjsw/ +TpBOCrA0UiOwsAnxa6S9buT/hQwvz1rhTjqKCYB9IjLwJk29e5QixqNbsh9hzZ9O9FB2J2eJi4+F +ZK6PpfNio0UXBUwZoEVOkkQuBjew54kMXx1G9dRIcYB5CRkcTjMDdl429w+K24wPeCuUigKNjA+Y +qZq7nfS5xaHR8CdCQsRCBKy+U2QyNSqhfmoofVQVjSRm1sd+jegiV7fIFD3/3qMAgzMWQfTlzcd2 +zGPX73yApVACYy4M7yX9bAbGRHSxnHCMJuOGRQAbR4mDdCX4DQ9X5PFYUHbf/JhB+bFL8P9XrGBR +UlRxBlIioAnymDABMpqAJkR8UpZYEAkZzPHMXKq/Qwni3VeCWHQbeeoGLDcL9lcRpzEbQiuBhGIl +i5HC3xSIRBXD5CFPQxIFUyjAEoktVhUxw9GdUofmEyfoHiV6BT637kd5w/ObM0ULFiOF7Qimqhgn +wE4AGaCTqCpAJZbGHF6ESyVd76N7qfbIb5KKUOqYMlcSW9eTJ2fHkJElA1MU7RS+TewiEHzBB0n1 +ERH5RkhL+iTwiWDgq5k4wTPvXKs6fiapTzMUlbcQSfDkdeSHqvbSh5qWDExp+CDeJXWhCWBHLiGq +SPpY1SgZxdgkVcVRfa/GRBWfYzOHbTqKM5DMvGFfk7OJZrET5kvqgil8TUREYiHhakSgiKjjFJEY +Gdh4MufUF5mJ8ejhumHe9Ad1yRmPEGCqGkipRbuIWVKEzyZuw5uJuzvQvIu49CMpYM8Rm8iewlxi +N6vvLJqo4l/Bk9z8OcgcfyG+R8YqRh6cf3EjUiTmt3zx6mvgBHpMamYx50/4rhlvRmLrGmmtZOf0 +5y3GEktYYdo8AlGOEMAzzzzc9CRhXxI/PezWFMSsNvaPjKIzdAKxoXfyzAsXvOXPbek10o5TqYuGG8 +xWDeYtzHftUCCfv8OYg35XhRoIkSWjqw7CiVq4zLNqYZGZt793rAmdRb5gESFcoeS8zMx9545AIA +yy4q5/YtKbwU28dtrIpeUkGvRUb2uostzkJ9rhEVYOm3ihcqSlmJJUOZT/NTcGOJ7SNgJg97W+3b +21o8geI1ZQO8Zdry1ugFAJY1brk+Ey34W5+M+9hxyiNj8w9aqp01PihK0l9mPqgSI97B0ikrsUSV +lmUzMpbYDCI/1BBpxmkZ8+isWkFKeTT+6HwKFaMSvEaSg76MKyHSnPOpCquDgyqx2OfNk1vPj0rw +GmkKkR+iEiJtw7zq+o85bfXGBRjFSnLiT7Gv43KItDvmVdcEUgoqEmMPogsArBTnoFV8TSB9cn51 +iUoOQtW7/8cLgasUsQYWTjioAqPKmCySAnqeVLrQMgshqUkBRs8uHlm0PZtDpQnftFDCUep8KKtU +oUW+hSigkuwaWDgNUbdKUcXmjgsCrDThmxZMIfoD06hG0jyPURWj5dHHQPwfMi9EYukiycjnS8uj +j2W2s6QhGpHH96XTMpEYTR5N+hhRxYliGyUXzN8C6cL2MXW7HTH4N4aMbzoFIq+9Oote5bRXl4vE +4HeKEyyZHdHo1j3eNMkd17m3dJHEFki/idJxDJ3bzRnf4wfteXcKTO84+rIBlvQBDQP+otkG2W66 +e/osiD1V8HwDCxI7RfmfbF4DZ91s0lqFt3lBVBumdCHSFkq3hJIC/tkzZvmr/Gicpdt+mDVwnKki +GMZpOOjJzWvBw1QlmDWYYZCcnBSWj7kH+MMImRZ8CnEmtxznjivAGAUYO0lf/Sd2ssAwVSJjocAy +KwHLxngAfJRM5F40Pd7lZ4nE/AjbCLA6WWJ0mXrSzYHNtTZRacFOD0wGCvlbIF3IaYtCp4CDCdOu +0V/lZ+FJJLLj6ATQ3UrjLOF/so5uK1mbQKflTO/qS45lYzwA3uAE88xb8PX172ThHRxmE/LuEwJs +LZWYBVRg9B3saXWAL0GItMUSDnBF0qX+/B0Xc3AxJ7IJefMXZsfXUGBrAPoIME6W2Gl1NWIZSQx+ +KBRJWRKwXsrid7IildjlVGJT3WECjKESW59wdYIjAOETFw7YBcIFb3RAHJnd0Oe/lIiLAuOOr5Ul +Nv4ZBVgA1spWsQruV4Etk4mmQgL8yvT7Pv9mFvvWUmCPrZX72HgdAebh5D7GrMOMD+4YV+5dTqoI +n8WmOaSh7zjBtGEtMR6cahUT68g49j6WAOtL2G+laSaYQVTA3wLpgnsehFL/FTX9/o7xXSxxMOjA +LAPjxmksx8kr10IVkRgZp6vIWKfGol9GAzTpNFeZV3VHgkisggJTJXaaAktstlBVFDdXEauIGTUm +7LLqYwaRw3LApjE3BSfEGguccPqA+oprqHfPQO+etYmui7Ddhlh1ZrOs+lgxGk2KbBimiP2DcdlX +HJc393PHEcOsF7lu4jLuYtWZTQYYBsMUk/TMQpSHgrhw5QB2B7HwJ2BctPVlnGDZu0fPcsfrOsgQ +QJzgLk7ZTqf2MekikQOe/NcjEXMQISN9fI67Ux5gou8ETO9mAcatHSByZ6hgZriE71UOksI4tvpv +49S0oWrGuO4/Rj3861UKv2nF5IXU/42XJuD806QN5sRZLgewhZDC3/MNIJyPegiMp4hCnqYCluAo +wXcNwLetm2woHAWYDuXvYi2Fub+QpG45ShDZTNItXUMIox+jB4nYcAX04Q0Av2z7C0DRYAimgvkb +xkrgUl1QUsz9r/c0rIcQ7UOXIhGOwW4ESXFc6hBFAC5JJoBjUYIqmj+cl8LcX0hSJHbczfT1d9Cd +iYgTURc0czArJWA0QaOW0R+PM+sgEswfzpd7H1PTm7wkCpYqmq2ii0tAVxfHwelkGsbSIk117UEw +PgIwFozn7WpZGarIeGn4mgm6tMelEHQhHs4TUKMJERIg0qNkQYA9jesklC243FVROYD0069djuAP +19BOhl5FeBdi4TyRVZQAS8atvCiwYwADLe68pZaVYRW532Pot9Ws5cjHN5EoEYl9j0gvKH0Npibb +GT+HRom+BvM3/S8LVVTVBul8pfSxSaaae44L0xUH9EskYSTA7+SDZBLMikwHYBQEzEfzQy2X0XhQ +R0px/15G8DSG+IjOTQp/p3f2CTSMro9uh0RTohCEj9LTO3gdzTEVIWo3Ksngcm1TRlWcgXMyJ6fB +hqInMBvWSxCjqGKUylQIA0tkci8a7uKq8G3EbESgD8Kw17YmzdyQ3EX9K66gRcoCbIowhVvd1iPw +iVumXoDIkyGdmxSrOHPYzu3j6DiG0SNwkkM+TN/pjBG3agL6B+5MPGDdtoumh8kBK6NVjIfuCIDd +P7wGV7eFR+FUmNdFL/+0D6Hj76YOE4arEW6+jMX0hfAo7CWNMzIaAXEn6Y2RaF4Y2DJKbM2/D3dg +Dq+dwK1MfAxOj4ZC2psU/pJJorNSOESB7ULg8/JJiXwVwV8iEguMEqtBhuaKDdfIsejUZisbsNSD +7+itAiT+MCztgvAYpEd4negjiirG0hgE8Z71dMMPAcbuZdNEQBAUU0Riz3svB5FYT6+tLm+htnyq +KK6J8yEisa9OiJIYGYW0v0cnYKt6GqnBj0LvcXeQ2Qru5YnCCQk7F4UxLKKz0G1ZCym6Iz5CA1lm +qIyqGIfgtzGSdt4iMQ0/DE7BVlbnJnWi6a9Bj3+CHgyKic4qYDE3eQiFYDQJaAoCYxMg0vPzowbA +/ptxibE7nVvBauu+XHQNfDaSRGRw0pKiisk0mZrcS+15PCQh4EQ60eRRJInJDdR4JKn7G8o/JVQ+ +VcRO9xZnV/uw6waQUCSI38nxOncpqhhLSjsCSdqDgkEa5TBFv+CEYAoTiflrmkCi1mUU8oxH+SSG +W79H8wFKKAybb49F4D7dVzQKfzM9DTt4IjGWuPFEdvQwHEGCxshULAY/8KyFdIo4ZMF8l6p8VhEL +95Lez9EoU43VZBwLQEhnf7bqK7rskeBVEGgCXiAGn3It4S40KnYR/+NfxCiEE0RiEVJnQYuUBRj3 +ErMW3/JWOg7dbROjIPVX6QBT+DtPOlPwEghWwV6fuOsaekIoKXWio3gvATa1uQoi9LzJKF4mErvv +P66FP3vwa5+FS79ExjFx6B6djR6KVUwmYXTkpRqfD7tZCV1EHYxkwoYYfDlx98+j90Ig8SlE5L8b +FbRIWYA5P4XG8Pt6Jm+Be6+Ba2kIYJ27VOOWqlvrf5eH5eU/5qR2wOgOGAc2VXdlj595JHe9fBIT +Wy4jyvOj124Pw3uuSxgd6FKXuBO960cu1T3yiZt9MIkB96bs6/PTZpVRYsKnUBDXvflAHK68BUg3 +4fWSsmTetjRB4Lf6b7b/FwKcWZ3K66RldKm4zf4r4O9/fnkY7vscx4ufjOoxXvxtS0D/cvkkJnGX +VXbgDSffSyYdIhdPXnTcr+MrLqv3Y/MjvP1Tuzj8pU/2xdI934SzEPzlJlZ7V0ZiEn3tFl1A9eWT +mGh9N74ZGqvWhsVGxuOF6FG9PqYAe93FcPC5LxekNDFluIze/e2PeL6NP/RG00Fxz0ZEvMA+Paun +HEWbbD0gzFT+f9fI4doxYRTzedm/BCUewFwq49JATHRZAP1LgLD7dTJ7DI7oiUCRGE2Je0coxste +Lo2JQvPcZ4BhpJeSrpzzsTd3A9585oabAV/2iA9Co3on5NW1e5F4uHxakCdcEwRGJKJIjZIo6G0x +LqNVtPwJHVc3X/FBSAkfYmF0jG6DKCRFYvdYvOtBuIWV51xR8quJAubUe7i82YoesP9eXJDYXrHz +dvyl2754PzxJD/+P7qvjtHcp5l4Q4dr9trt98h90BZ9X36vwCrCQtmAZ+1hYtE7Dh08nL8ej3CmA +sXEy6deQIrFvPCly/saPKsCpe8Gr7qKMCOkZjzL2sfCM19XFTSTem2o+9kWAvj695FByw+P3O1pR +/NsxhcMotRs3KsBY5YcO62Vc4p5I9ZPWDuDPAq78CsIXRfUaXpGYQLpU+jtvIYGKKEJ+dN1JuBVC +NOAWwKdoQbocJ+Vt2yzrKlUKUZP9DyAektZO/hjpZVFW+PvDb/8ZxX48jXjgzwmOXQfFrs9yQz7u +XbtbYpv3oD9Cv70WzqFD+D/P5ddeNmBhEAHvtzouh6eqcLvUtd/j096kGI/Jwz1c/DsPoyZ8zMEO +fHmLdFuUs23eve2+yif576MG4b4A/AZVfm1Da66gWYi0ElMSJISZds81cJyDwyJ4Kiu1NymqeGbn +3VDjXcdViWx9R2Qqhm8fZY/9+NjFbCjoewZ6uXsB7rusa/ef2FG2YBlVMQYJwAJ97TUrJ0WZGdSJ +Ya8M0PE0cMffFeNDIIwFIvFE6pYxXxfi+BGeDzwOnO93xOZfhoXL8uJRlBVYZtdXxOwmSpN+P5d+ +JBKlb9FD8XBSSkdYCRAf4I83TYHAfZhYoZcQ25UXWn+5v4NWgE3XXyLEvhUOEksYDUbiYmoiKCSI +VQxCf+A0cMJaAkxELNeMVgwwRRVnkxjFfzcRohILRsMi/uwrdCmYj7IsQYC4JuIJp4nk8uKkLouX +6yakhkgjwGL3fpaobCgaGp3Auya+SYAgPsL6iHnhhHUEWArxaAVJTLGKM/X9sM+5njDL8oGxmNT1 +5W9CGHN8kGPhNPjYFqDB0nzNecCW+5YjZRybSkpo3BcmEhMCI8GI2PXFzxOLg0KjPj76C2DZdwMm +fvJlXFcOw4rYmQNpusONpwda2UBwNCzCVWGIH+M40sfGngLWdyUx98+g+5qbuWzBlaGKU2l8Mwjh +g4T/IB+Zlai7HHyFY8kwNvbvyMd+BwQf6WEChwpaRAZWbgy6pG6H6K/cAaHha1kIBfjRZBp4CXie +8xE7GLqMSOw9HNvRLHQ1d3HZgstdFRWJnU6KO2Df5WwHVPFVI4k0nJwCXzOyc917uOZmln3lsg4/ +XCZdvTmHYblLTGl4onzRgc4YVIl3/9vRHmktnLsGmO+wB+DUOPr0xf/n4ppr+V/D84nGB6qyBVdG +H4NkYO0v+AngxWut69xkXimx4L0kUAOjs/jSkXf8k2U9H4Gw1H7pzzzzzB5W7u1dcNyS1rToAmqCdn +UnC5q6IqMcnpC2lPJvnmB0woNwg9yj+jWfgmF681KbhC+pguiWbRl5a7xJRxLC3/Dy6k4MoYxxJR +iIrcgo5cLXeJqZvEEpUPYaHAKkbV32ndw9LLHZjqK061rxULA8sHsxD0DnIud2AKf69P4iAuXBrJ +CLAP7tYpeOFPrl9YUlTxta/t7BDjBeY+Ew3wpG4iw+UuMUUV2XU/2fG5cCQ056uoyn26mCqWG4Mu +Keb+VzfURr1rxzUDssx9WNd4LHdzrzT847dsC4IwpRmQZeWM6EpsuXseSh+bmnlnQAhq11VPKdhX +rrkfnxxo4vsiwIn2e2tq/uy4ewu82hRPBx5DfO8dYTZOg/kmuPh9nC6wcmPQJXXr7IdHgyEhClX4 ++3/6V/+58wsf+wycXjP2WsfzH6l6cvS1kdgaSFad9kUv5XWBCeUGoUcKf9FPBiFI5pI+aBaab8NT +UxMQ/U3fwOWx5MkkP742FoLZaIRlappyBVdGHwuv+U0wyMeBBa55V5eUnIpDdDQSjqRjs2l+YizN +QTwcHI2cDBS2yPIFpvQxZthaFXkxSj75mqVdSTEdgWggGo/FElMSCkdiHETigZPxaN5IvTKAberp +4IMfpefEeIR3p6UkMZC+SDqZnv64KETicqKikYlI/gi+3IEplvzHT3PByFXXXQtw372wOSbORAG4 +eCwZnuSwEIm+Rj3iUCQej+YKLvc+pkjsp2E2GLmSIZ7H91m883Zxim6xj8QSExHARBXP0D33HbFI +JJgruDLMfc8/8KH4T6h3+Ku/hnd/Fn8lSg8yppPhMAEYiyToKYmON6IrSRUV/p693BeNpOgM7M2P +w7uO4q/6iKTGYolwDIgqToQRwTwSj4xFcwWX+7RF3XJ08H8E3/oi3b3y2NPwwyvwdhYSRGLpeERM +8OHwayz5IxAJjgYLW0QGJpQbhB4pxuOp+z+zA99DJTY9AYGjcJ8AYiwSi4cjqVhoIhbzQWRKiI3m +e5MrQ2KPnOzvmGyEER7ORmAsAH/KxadiwUhsYio9FQyHY4FwLExMx9iKG8eufBpCrXJa0KkIHAzC +jUI4HI+cjseuikyMTUzEomcnrzgZjYzmhdhf7lZRmWhedQqCBxMQ6IA4caaCwHMnzq/51atXzOxc +e+rkmefGTzw3EzhX9fS/PJUruNwnmqrEYumOUMqyowNicQiGiP/xxpPXrJkMJHezJ/fu6e4fnEiw +s1xdS96pn+WuimqOv/hkEyTaqvjMZYEKJFx4Wz4td89DGaCT9DS+VLif0TQu3HKXmHr4NAaIjFzB +ud+FzQqujD6mT08iky+Xu8TMgPnNCi53YMsqDOGFpBUVrW9x/C2Qlru5X05RZy8orcATf/Ojt20f +uxBWsdwYdOltq4qrVrGQlrsqvm09j1VVLKTlLrG3rVV820rsbdvH3raq+LY19xeij0VvhdCLuxFI +gvTym5BO7xgBeBh+9mgI0D8SjXgL4rf+DKJvHBMAh/CbcSRJD4/RHHEvvxIF4b9SRPoo/bOXIf5W +yAewA269XcD4xQmAN+DNslSdBVbdxtRsqqi1NHq6rY1+6xbP0OAGO41jxrQPu7bbDllt9iGmsta6 +z3/A7el2eSz1g53eml67s76fadju2GT1dlttnYxtX/cWz1an27PPzdzlbRyubLXZy1D1uhyw1ur3 +e5j29pqWGld/6x83MpWV1vb61rvsbU8wljr3dbb2bXX2bw0yDQ2V7r2Otrp1LsbW291QXdfeW/+3 +fmZgoKGnYaOz9xNepqbGNtC2p965dx9jbfXstw8cLkPVuTA1jP2wzfYAw/gdNk+dy++/x804LZ5+ +W/2As+YwY2Uaq5nebVbrdj/jqbC6nfs8nq0DjJ0ZbLNWt9srtzEWxmX3t260WDZ5GLe122nf4nZv +aGdsjLfeUoaqc5szGdJ4TmbTBtdgp8PDNNQzFW1DBxx1pHyvhxk+sK27bSPDDPQztTX7vI173ExN +NWMd6txa4SSstbqZ7Vs3eoZcfqa9jXHs3dLoah1gKu1+S2fjEWv/tjJUndsCyDzkvW7LJsbvttnc +tV+obDzicdoYf6/1P1o2uIatjN/p9F8/3DB0D+NxWq1Ox49sB7YN2q2Mp9Xyl4P79223MB673bPp ++ZrOrX633WKxV/yvnq0bvTYL464rR9XX5EmsgmHcw659dc4ePzPI2Gqtd7XVO72Mi2F6Brc19rY6 +GKufcW53bHH2t3gYL2N1dLcPVdsbGQfDtHg3ulrrKhiLh7Fvqqjvb3MPMo2MpcJzuNPe6ypD1bnA +Qcxh57YHGOugu7fV7upxXE9UwEYeYx1o2XqYcfh7qu3ubfaN2/0Wr7O1zuZoqdg0wGyy2tvc3e3u +I9uYCk+Lvde50eZ6kGiXnTymwt1zTztTa7HVOz1lqDpPYpWtDLPVXWGzu7a1NHqYyjZmsNu6r32D +nbE0+l1Od+d1tkMMs8Fp7bE5NroPuBnbEOP1dG9pqOllmAMeh93ZeLjH62dq+i0t1grXwFYnY+1k +Gt2eof1lqPqiHDC3/TCxugPuQ90Wm8W1r62uxuZ6n9vtr7+LWF1Pz9dtNqdtG7G67U7vcX8Ps28L +sbpWxyVOp6e6nVhdd8s1VqvdupFY3QZ7402eFmZLPTHo3RUX2+1lqPryHLCebTUWZl+3y2a3O7e2 +etzV3np/t8Va2d5us26yeZ1ud8vGSsa/xbPParPZN9S5nfbhao/H32073GC11Fob7U6n+0Cv31M/ +uMVitdpqBgbstu32QbfHU4aqP543jjGWS7a7GzyDQ0MtDHO5o9fW73Jtbyd68Rmv/y5rz769Nob5 +xiZnjdvb2en2M9V7Wq1tDsemBqIX7xv2tHe3bGnrYZiP1dornY2NwwOkrz92yFJfUVFbU4aq1+SA +HRp4spWMfhUOxun6wLvsHm89c8hjtX79mjo7Gf1cNI7Zk5+rI6OfdQ9jd7zr4l43GVi9gxbLNXUD +vWRgdbgYd+PnPuD0D7ZZWv22iou/3uokA2ujl/GXo+ocMOcfV1ucjor2uq1bWm2PuestngdsG9uH +Pd9qs3kaa917Ntba19n9/RXWw84j9Yesn3FWM4Pbe1yHt7s/UW91uxwDrQf29Vb2etqs3dvs2+7y +dr+v3+73bmpxbNtUhqq/mwNWwdi2t7o91l438WaYff1tdsbbS7wZprrT3s04nH631W/dVOd0W1rJ +IOhltrTV25jGVuLNMPbhXo+/wu4h3oyl1tnvZA6R8bWRqR+qtjKuOuIo/fdXnaeKA9sH/Y0H7nLX +2A7VOA44K2r2N1g9B+pbtvUwQ9va/O01ve2bvB7X1vaBSqt3b8VWu3XvdTUW99Zq9wMtTOfGek9D +ZWtDbaPbsaGh3dbd2NZzxGZpO7yXGdhgL0PVucMHTL2/v85use3zD1e2eattdYz7Li+ZDuyzunvd +tppN1sEN1Z42Zy/Ts8Wz3TbUaO9x+p3tww7/gS0WZ6vTWllr8db0D9bbW5mW+sFN1k6XrcXusTds +r/BsLUPVeRJrr6lwtXobnfutg5VWz1D/1gprjWe7xd3u6qz0DLa2O/wNldZ9dY0u+3UWr63b3dm2 +wdpd6d7EDDQ4GnsHvXUNFZ4aW/cW5wGHrcE/bPUMNA7VdHt6B2rLUXWeuWcGBz1uq6fX3W7zu1x2 +G9Pu7K1kBqw93Yy/0ursdtcwXq/baXG3Oom0HQ6blWmwt9r87ZYWj99j67Z7BiqZxkannRmosxNF +qqiwWpgaW53V01CGqu/IAXNVOBz7hh3OPXWuev+hls7rSU8+XN/rdTVu2jTY2Orq9e6z7qnYsr3C +3jqwr9rjHRx+0H/Ivq26tdHhqq31uuocrY1bLK09Qw9ae+vat9gHG73br/d4ezfaD5Wh6jwneKix +2usmOu3uaXFtIQ4BU29vc7bX9w9u8fiJTvdU2jpd9mEn01/nbHHvq++utTLVtnp7Q3Wbt37QQ7pL +i62ncR9xCJg2Z797YEu1Z183Y++pttXYy1D1/Tlgtm6P1dXe2mMnzuVAI9O61+5tIc5lTQVj76xz +2N3EufQMWhwNdS024re2u5i6tt5Gd0+PrdLqtzUO7LE5id/q9jJ7apyDPcRvbSBj5lCry9nSYi1D +1XkTzYFNtQ3+nv7GbS2VNRWthwecnRWO9rp6z/D2/VaH+9B1tob2Wsd+T0uba6O7d6/10LZ2e2PP +ngbnXe7tm66zVDi9h3tqGhx7rnO7hxyugda2bu8DDTZXS+t+e3sZqn4oB+w64nXWOJ1Exp5K4nVa +W61kwLRbNlisTLun1cbUMQ3E66wkk1m/zW07YLNb6ix2J9PL7Pd3Mw3uOivj9NcQh9bWayMDptO6 +1WpjBvy9dqa1HFXnmXvG1rrR096zrbZm/yDTv6WxknjLQ9u2M9X2I5b6yvbtW7f6rXWuwYaWjY69 +13mZtvoDtv4NdZ0bNzH23m3+u2yHN23Y4LE493lr3Af2tB0eZuqrt1rbagaGD9xThqrzlt82/cDl +r2xoZzwee8Vf1g9YGvYydruFefDxbUzDXW6LhXHX/tU+j21/A+N226wPVbcz+9v8Nhvjv/5vNzI1 +7QOM3+90/PsWt/W6GsbptFqu7z/MXFdPHFLGU4aqc/ueGb+FIfPYgQeqL+50Mm7mgLumtr5uXz1j +Y2p6ra2H297f5mH8Vq+/fXv/1xv7GSez1VnpuMv5RDVjJbNvS922+kuG3IzH0uhp2NR2jauNzIM2 +2G172vv/tr8MVecZj+q293ptm8g07hBT37jnC8wej8dzwG3b4vwPj3PYbiez9P6h2mFrrcVCWKh2 +tf6IaR10u7c6rfX9fzlo326zkVl6W6fjeYvD7+9u9Nj31f0vf53X6dxgt5Sh6jkrwYzjUHXjQJt1 +k73Vbdlev6HG7t/SYm9jNvW2DbWQSW2d3V/h7T/QXm+ptdU5mQera/bayKS2t56pba3vdPfbtjt7 +Pdbhtq0N1cy+Hmc/c719b1sPmdSWoeq8leBGj9dj8xB8bS1b7A4708/YWxv7Gw9ZWphqxmLfUl3h +cje6rW6mzj7kHuqtsDFtjK3O1eby+gf9dj/TW9/fs8/pclqcjLO309nZau1h6hmrc1+9owxV51nF +bkdFtdPxYONA44CzzjNUb7l+S01FjdXW6GrzbBoe8gx5PHus/f0V17vaXe1252BnNfPg0F7rXovV +5ah3127vdHe63a3dbW3WB/c1OBpsdm9jv//6zrbuNn8Zqn5v3gza4rZ9zM1U2KykPRqY/seJW+yn +7eGvvsTPuJy0PQaslzsZa4+FNHUN0/a3DOP10Kb22L/hYRx2G2nqdkt1P0O+Jk1dydS/n2Ea3bSp +/9urzjMevcOOTmf/HnfnXU7nPZat9dXOw44P1FtrBje2tda7uj/W5mndXtHY39Y60Phkv32r/0i1 +vX9bxbuqLZVe11BdtcNzf727bpP1QFt9Xbvrc222DZ5t/b1tG63f6PeXoeo8X7HTesjuqXY72mxH +HO7tdXZrg6Xdf+BQm6O3zzzznzb3TWHGjs9pIZ+EBFvXXbHucmZ6+lhjns2eodqmh1+us9rv7KrS7P +MJnct1vvsmxs7a8lE8O9zDb3hsYyVJ23YGpvtFkcj9s9zCBzqILx1/1Vt51xMS73oNP2XmcdY/Vb +e11WZs/f2tyMl/H2+D3Of/f0Mg7G4fTarbX9Tr/FY2l1WJjWH1idTCPT2OJx2//S3cpUMBVlqDpP +YsSqfJ6pad2/37Hd3njofzDW9m3bWrZ2V7jqBpnrHFvbN3qJwfozprLuuusqNtlc3q/7LQ0bN7qP +eIjBepZp2LOhwTVMDNYfMbaBw4d77rE6Gq/xMPtdBwa2DZah6rz52CbmfusXiEFt81uPeFw3/bmn +nrEPMNuHrd+oHLZ5iG447mE6uz9EDGq9x7Jt0PG+Px6sZmztzKbtlo/Znie2ei9TsdXfePw7/jam +2s084K24ZJ3X7rc2MLVlqDrfCXbZ7czwlg3OIT9j7bYwtfbDQy4vsU5ut/WQ60DrPoZxEP9te/3+ +/k4PY/H4/Y7ebZ2ORmKdnE6Ld9/Wui0MU0H8t03V17U1DhLr5PFUtG5s3OMqR9V5q1RkAtC6p8LZ +7rY3PtVot3sHhyptlop3bbBYHC5Xi9vvvp/MLepae/obnDbX5w7YbI3eTlsP0/ON/X7/HofDPeBx +du4nfs6hlrYau9Xxga1Wq6uxsaeFaflYGarOk1hPbbXT665j9tT3OFuH6kkTup2Hva327W0tHn+v +1bXP3uLo7ydN6G+9q8Ve11lNmtBp39ZYZ9tU7x70tFocW2zuPW1tpAk9de2Dvc7h/p5ui9220eUs +Q9W5nETE2rS12e6xOdxMA5my9/v3D3YTx8Y/aKl21mx3NvqZARdTX2/d2lPhZGrIlL3Nc53XM8RY +PV6mv79yk93lYdodTHW1ZUOLtZ+ptHis9e6GYXcnY3GXoeo8ie3Z6rQcYjyD+/7eOfBAK/Nnbrur ++s/ra2obPe/otVh7Nh5ubT1iZ571u71b/qy/ffsh5o+cNof93+6qdBxwr2llultcv66r29bLfN7j +bKz/TlvDJq//f9itFbZPtveWoeo8l8rNtG631dbaybhiY8jw3zN0iIwrHj8Z/p3bt7t7GTJZJ8O/ +Y18vGVesDBn+Wzq9PWQS5CFOi33TJmcrY7MzZPiv2NJKxpVuhngW7uHhFnKtDFXnScxxeC9TSbqi +y/b8oe1kXku6Yqv/Owc2kXkt6eV277pte7aReS3p5Q7rF7wPknkt6eV1nj/fWkvmtTV+f29j5QOt +D5B5LenleywfaryezGtJL3cO/vGRMlSdt8/DbXdbB8mY4j/M2CzE9pIxxenyM3633+Enrox1gHHa +iO0lY4pnG5nZ9pCBr9ptd3gYj9NT4SGujKWdsVuJ7SVjinsjY2FamFoyptgq3OWoOu9VbWVLxfaa +Ay3bndXuQ43uB3u29W/qsTa4NthqvVs7K7yetp7ewZ4HK7e6H7TbB7wHnNe3bGyrbbHUOGp6HMMb +GnuG3fUtrd6W621HnNfbbO2NW+2bBg8MOQb9eyvKUHWed+9xeSxtrY2WDbZ32IntaezfwjQM+k8w +nUxFtX3QdsB5iZvYnqE6F7O/Z43N0sa42ur9NV7PTf5Gv7W/12vdar/YScxap3Mfc12LpYcZYhz1 +1Z7KRvf7ylB13gAtRENS/NaHhTR+Ky6l4dibb8UBvfIKCCj+MvkVTb8Yikdx+mcvhiS4/XYsQejW +228HIboDhYT0m+RXXHozzzzo7D7pffiGJ49FHogujPyK9Q/OFyVJ0DBm9TWp47TFeB/f8jsHIzUDJg +Qrk5WAW2CmwV2Iqkty+wcjNQMmBCuTkoFbByM1AyYEK5OSgVsHIzUDJgQrk5KBWwcjNQMmBCuTlY +BbYKbBXYiqRVYCuNVoGtNHr7Ais3AyUDJpSbg1VgCwRWbgZKBkwoNwerwBYIrNwMlAyYUG4OVoGt +AlsFtiJpFdhKo7cvsHIzUDJgQrk5KBWwcjNQMmBCuTlYBbYKbBXYiqRVYCuNVoGtNFoFttJoFdhK +o7cvsHIzUDJgQrk5WAW2CmwV2IqkVau40mgV2Eqjty+wcjNQMmBCuTlYBbYK7G0OrNwMlAyYUG4O +SgWs3AyUDJhQbg5WgS0QWLkZKBkwodwcrAJbBbYKbEXSKrCVRqvj2EqjVYmtNFoFttJotY+tNFoF +ttJoFdhKo7cvsHIzUDJgQrk5KBWwcjNQMmBCuTkoFbByM1AyYEK5OSgVsHIzUDJgQrk5WAW2CmwV +2IqkVWArjVaBrTR6+wIrNwMlAyaUm4NVYAsEVm4GSgZMKDcHq8AWCKzcDJQMmFBuDlaBrQJbBbYi +aRXYSqO3L7ByM1AyYEK5OSgVsHIzUDJgQrk5WAW2CmwV2IqkVWArjVaBrTRaBbbSaBXYSqO3L7By +M1AyYEK5OVgFtgpsFdiKpFWruNJoFdhKo7cvsHIzUDJgQrk5WAW2CuxtDqzcDJQMmFBuDkoFrNwM +lAyYUG4OVoEtEFi5GSgZMKHcHKwCWwV2wYCJdsZ5j6ViS6vdw3Qz1ppB9/BwC7nmZlq322pr7XWM +1cbYt/p7hg7Z3IzHb6n0Ordvd/cydidTt8nq2Nfr9FusjG2Dp6XT2+Nk3B6md9i+aZOzlbEtsGru +ggKTWh+o91i9Tucey4car29oZ7Zarc7BPz7iOLyXqfR4Wl225w9tv8ttabTbW/3fObBpfwOzwWKx +e9dt27OtzW8bdNc5rF/wPtg+wByw2eo8f7619roapsbv722sfGCBVefQXAhgk3arnRlm2vzujYyF +aWFqGfuArcLNuO1u66ClhvEfZmwWG7Odqfc4XX7G7/Y7/LZ2q3WAcdqcFi+zl/FsY6xMD7OJqXbb +HR7G4/RUeKwNFks7s8CqL6zETrR6W663HXFeb7O1N261bxo8MOQY9O+tqGyp2F5zoGW7s9p9qNH9 +YM+2/k091gbXBlutd2tnhdfT1tM72PNg5Vb3g3b7gPeA8/qWjW21LZYaR02PY3hDY8+wu75lgVXn +AVs6LrjYWeFkOp37mOtaLD3MEOOor/ZUNrrf53F5LG2tjZYNtnfYrf1MY/8WpmHQf4LpZCqq7YO2 +A85L3A43M1TnYvb3rLFZ2hhXW72/xuu5yd/ot/b3eq1b7QutGl1IiUnuC9A4F5wugMRmjpQbhC4w +YclVHF9bbhAlAubgyw2iNMDEAVRuELrAllzD7JpyY9AHJiy1hmc7yo2hRMCsfLkxlAaYOIzKjaE0 +wFLLs4stHdjxjnJDKBGwGrbcEAyALbE87kHlhmAATFha+cnOciMwArbE8o8tS0cRli6xA75yIzAC +trTi2ILKjcAImLCk4pN7yw3AENjSij92RbkBGAITllTcw5cbQGmA4VpUbgClATbVUm7+SwTs+Ppy +818iYJuWVHr5ApPyFiiXGy0J2MyWcrNfImAnlu0otkRg29lys18aYGJvubk3A7aEstOWcnNvBkxY +fNlnbyg39yUCZuPLzb0ZsMUXFb2o3NybARMWXXS6otzMlwjY+MFyM28KbPFF+9lyM28KTFhsSbEG +lZv50gCbWb5zsaUBe275zsWWBozhy817aYDh7ajcvJcG2OQ15Wa9RMB+XVVu1ksEzMOVm/UiwBZZ +TlrW/hQsXmKJ6nJzXgzYIsud7ig358WACYsr18aWm/PSAJOc5Wa8RMCW+yi2aGDPVZWb8RIBa+PK +zXhpgIndqNyMlwZY6l3l5rtEwI5fW26+SwTMwZab79IAE73lZrtEwGbuKDfbJQJ2vKncbJcI2HLd +o7hUYGJ7ubmeD7BFlJnuLjfX8wEmLLzMq1Xl5rpEwPyLKPPfD2yosdrrtjhb3T0tri3WTTam3t7m +bK/vH9zi8dta7D2Vtk6XfdjJ9Nc5W9z76rtrrUw1KjfX8wFm6/ZYXe2tPfZGt2egkWnda/e2VNjs +NRWMvbPOYXcPdls9gxZHQ12LzeV0t7uYurY95WZ6XsAGNtU2+Hv6G7e1VNZUtB4ecHZWONrr6j3D +2/dbHe5D19ka2msd+z0tba6N7t691kPb2u1N5WZ6XsCu83j8NU5nN2P3VDbandZWq9NtsVs2WKxM +u6fVxtQxDYNuT6XdTjTTbTtgs1vq2HIzPS9gjK11o6e9Z1ttzf5Bpn9LY6Vza+vQtu1Mtf2Ipb6y +ffvWrX5rnWuwoWWjY+91Xqat/oCt3DzPD5hQbg5Wga0CU4CVm4GSARPKzcEqsFVgb3Ng5WagZMCE +cnNQKmDlZqBkwIRyc7AKbIHAys1AyYAJ5eZgFdgqsFVgK5JWga00Wh3HVhqtSmyl0SqwlUarfWyl +0SqwlUarwFYavX2BlZuBkgETys1BqYCVm4GSARPKzUGpgJWbgZIBE8rNQamAlZuBkgETys3BKrBV +YKvAViStAltptApspdHbF1i5GSgZMKHcHKwCWyCwcjNQMmBCuTlYBbZAYOVmoGTAhHJzsApsFdgq +sBVJq8BWGr19gZWbgZIBE8rNQamAlZuBkgETys3BKrBVYKvAViStAltptApspdEqsJVGq8BWGr19 +gZWbgZIBE8rNwSqwVWCrwFYkrVrFlUarwFYavX2BlZuBkgETys3BKrBVYG9zYOVmoGTAhHJzUCpg +5WagZMCEcnOwCmyBwMrNQMmACeXmYBXYKrBVYCuSVoGtNFodx1YavW0l9v8Du8/fS8r74LQAAAAA +SUVORK5CYII= + + +------=_NextPart_7HZmySBWvSemNjin8Kg9Y +Content-Type: image/jpeg; + name="./MassMail-1509_files/image002.jpg" +Content-Transfer-Encoding: base64 +Content-ID: <./MassMail-1509_files/image002.jpg> + +/9j/4AAQSkZJRgABAQEAYABgAAD//gAcU29mdHdhcmU6IE1pY3Jvc29mdCBPZmZpY2X/2wBDAAoH +BwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8 +SDc9Pjv/wAALCAMdAj8BAREA/8QAHAABAAIDAQEBAAAAAAAAAAAAAAQFAQMGAgcI/8QAWhAAAQMD +AgMDBggGDA0EAgIDAQACAwQFERIhBjFBE1FhBxQicYGRFRYXIzKhsdIkQlLB4fAzNFRiY3J0gpKi +wtElJjU2Q0RTZHOTsrTxRlWDlEVWpMPThKP/3QAEACj/2gAIAQEAAD8A+zIiIiIiIiIiIiIiIiIi +IiIiIiIiL//Q+zIiIiIiIiIiIiIiIiIiIiIiIiIiL//R+zIiIiIiIiIiIiIiIiIiIiIiIiIiL//S ++zIiIiIiIiIiIiIiIi1wS9tTxy6S3WwO0npkLYiIiIiIiIiL/9P7MiIiIiIiIiIiIiIiIiIiIiIi +IiIv/9T7MiIiIiIiIiIo9BkW+mBOT2Tcn2BSEREREREREREREREX/9X7MiIiIiIiIiIiIiIiIiIi +IiIiIiIv/9b7MiIiIi0UX7Rg2I+absfUt6IiIiIiIiIiIiIiIiIiIi//1/syIiIiIiIiIiIiIiIi +IiIiIiIiIi//0Pr9EQaCnLSSOybgnnyC3oiIiIiIiIiIiIiIiIiIiIiIiIi//9H7MiIiIiIiIiIi +IiIiIiIiIi0URJoKckgkxN5cuQW9ERERf//S+zIiIiIiIiIiIiIiIiIiIiIiIiIiL//T+zIiIiIi +IiIiIiIiIij0Axb6Yd0TfsCkIiIiIiIiIi//1PsyIiIiIiIiIiIiIiIiIiIiIiIiIi//1fsyIiIi +IiIiIi5eh4rqH0FO5vDN5eHRNw5sUeHbDcenyW741VOMnha9g55djGf7ayOKqjUQeGL2ADjPYs++ +sfGup05+K17z3diz76z8aarH+a16z1HZR/fT41VGcfFe9/8AJj++sfGuo05PC979XYs++h4qqRy4 +WvZPcIY/vrPxpqefxXvWP+FH99YPFVQAT8V73t/As3/rrPxqqcgfFe95P8DHt/XWPjXUk7cLXsjv +7GMf21n401Of8171jv7KP76x8aqnb/Fe97/wMf31n41VGf8ANi947+xZ99YHFVSf/S17H/wx/fWf +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 +w8Ox/pLxFerrDHog4Oq4xqyWtmhaMnmfpd69fGK9aS4cIVxGOXnEOf8AqWGXy6xkiPhCsYHOySJo +RknmT6S9fGC8nb4pV3zzzzeHw/fev3Ib/eA4uHCNaemRPDn/qWqW9XSeJ0c/BdXJG4glrpoHAkbg41 +eAW0cQXkn/NKu/8AsQ/eQcQXk4/xTrsbf6eL7yHiG9D/ANJV3/2IfvLHxhvQBzwjXZ6DziE/2lEu +9ddbva6ihl4Ur29o30Hiohyxw3a4elzBAKv7NLWz2elkuMJhqzGBMwkHDhsTttvz9qnIiIiIiIiI +iIiIiL//1vsyIiIiIiIiIi0UWrzGDWcu7JuT44W9ERERERERERERERF//9f7MiIiIiIiIiIiIiIi +IiIiIiIiIiIv/9D7MiIiIij0H+TqbAx803bu2CkIiIiIiIiIiIiIiIiIiIiL/9H7MiIiIiIiIiIi +IiIiIiIiIiIiIiIv/9L6/RDFDTj+Cby9S3oiIiIiIiIiIiIiIiIiIiIiIiIi/9P7MiIiIiIiIiIi +IiIiIiIiIi0UYIooAQGkRt2HTZb0RERF/9T7MiIiIiIiIiIiIiIiIiIiIiIiIiIv/9X7MiIiIiIi +IiIiIiIiKPQ4+D6bScjsm4J9QUhEREREREREX//W+zIiIiIiIiIiIiIiIiIiIiIiIiIiL//X+zIi +IiIiIiIiLiaXyn8OR0kUb5KkyMjaHAQHngL38qvDGMmWpA8YDv4ofKrwwMfO1O/XsCs/KpwxnHa1 +Of8AgHvwh8qfDIAPaVRyOXYHZPlU4YyB2tTk9OwKfKpwwcYlqSD/AABT5VeF9/nanbn8wdkd5VOG +W/6SqOOfzPL60+VThff52p2P+wKDyqcMH/S1OO/sSnyqcMHlLVH/AOAofKpwwDjtKnH5XY7fanyq +8L4PztTt/AFPlU4Yxky1I/8AhKyPKnwwf9LU/wDIK8/KrwzvmSqGO+H9Kz8qvDGARLUnP8AU+VXh +f/a1P/IPdlPlT4Y057Wp54x2BWPlV4Y2zJVAnp2BT5VeGMEiWpOO6ErPyqcMZx2tST3CAofKpwzg +FslU4kZAEBzjofb+Zf/Q7MeVXhc8pak5xj5g77A/nWR5VOGCdpanHf2BQeVThc/6apx1PYHZD5VO +GQR6dVv/AAB/vT5VeF8kdtU5H8AUHlU4Yx+y1PPH7Af16FG+VPhhxGJqncc+wOFj5VeGeslUBzzzzY +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 +2CBca7TnYZZ4/vfFB5HbLpx8IV2e/LNj0/F6YQeR6zAkm41xyQRuzb+qjfI7ZWkH4QrjgEDdnhj8 +XwCHyPWcgj4Rrt/4nhnp4exPkdsoLi24Vwz4s7v4u/tT5HbNgg3GuOTnmzu/ioPI7ZRyuFd4HLNu +efxfFPkesxcCbjXd5wWAk5z+T3lPkdsoIxcK4DqMs3/qofI7ZS3BuNcc46s+6sjyPWZuC241wIxk +5ZuP6KwPI7ZQd7hXezR91PkdswO1xrgO7LPuofI5ZT/+Rr/ez7qyfI/Zt8XCtAPTLP7lgeR2ydbh +XHfvZ91B5HrPnJuNcdsY9D7qDyO2UOBNwrzvyyz7qfI/Z/8A3Gt5fvP7k+R2yZyLhX5x3s+6g8j1 +m63GuOcZ3YP7KN8jtlB/yhXHfPNnP+j4IfI9ZzjVca47YJyzOP6PgjvI7ZT9G41wJO5yzf8AqqdZ +/Jla7Nd4LlDW1ckkDtTWvLdPLHQZ5Ls0Rf/Q+v0WfMafJ1Hsm5Pfst6IiIiIiIiIiIiIiIiIiIiI +iIiIv//R+zIiIiIiIiIiIiIiIiIiIiIo9B/k+myNPzTdu7YKQiIiIv/S+zIiIiIiIiIiIiIiIiIi +IiIiIiIiL//T+zIiIiIiIiIiIiIiIi0UQAoKcAgjsm4I9QW9EREREREREX//1PsyIiIiIiIiIiIi +IiIiIiIiIiIiIi//1fsyIiIiIiIiIi00YLaKAEAERt2HqW5ERERERERERERERF//1vsyIiIiIiIi +IiIiIiIiIiIiIiIiIi//1/syIiIiKPQYFvptJyOybg+wKQiIiIiIiIiIiIiIiIiIiIv/0PsyIiIi +IiIiIiIiIiIiIiIiIiIiIi//0fr1Dk2+n1HJ7JuT37BSERERERERERERERERERERERERERf/0vsy +IiIiIiIiIiIiIiIiIiIiLRRY8xp8Agdk3Y8+S3oiIiL/0/syIiIiIiIiKpunFFls07YK6vZHM4Z7 +NrXPcB3kNBI9qh/H3hr93yDOdjSzD+ysjjvhw/69IPXSTD+x4LB4+4aAJNfJscftSb7ifH7hrAPw +hJg8vwWbf+onx94a6V8h9VJMf7HiFk8d8NgEmuk22/as33Vg8fcNAAm4SYP+6zer8hPj7w0Djz+T +O+3ms3T+Yg484bPKvkPqpJj/AGEPHnDbQCa+Tf8A3Wb7qfH3hrJHn8mR/us33Vj4/cM4z8IPx/JZ +vuL18fOGzyrpT6qSb7iwePOGwcGvk5Z2pZj/AGUHH3DRGfhB/wD9Wb7qfH7hr/3B+/L8Fm3/AKqy +OO+HDyrpOeP2pN9xYPHvDQz+HybDJ/BJvuJ8fuGcZ+EH4zjPms33U+PvDXLz+TPd5rN93wWfj3w5 +1rpB13pZh/Z8Fj4/cNYz5/Jjl+1Ju7P5CfH3hrOPhB/PA/BZt/6qDj3hp2MV8hz/ALrN9zxWTx5w +2G6jXSD/AP1Js+7Qv//U+ifH7hrJHwg/bc/gs33fFBx7w0Tjz+TOcftWbb+qg494aIBFfIcjO1JN +9xZdx5w23Ga+Tf8A3Wb7vgsDj3hou0ivkznGPNZvuoOPuGTyuD//AKs3q/JWRx5w2eVdJ0380m6/ +zFj4+cN6tPn8mf5LN91YHH3DJGRcJOn+qzfcWfj9wz/7g/ln9qzfdWRx3w4f9ek9tJN9xY+P3DW/ +4fJscftSb7ifH7hr/wBwf/8AVm+6nx94a/d8me7zSb7iz8e+HMEmukGN96Wb7q8/H7hrb8Pk3/3S +b7iz8fuGv3fJ7KSb7ifHzhonAr5DvjalmP8AZWTx5w2G5NdJ/wDUmz/0LHx+4ayB8ISZOP8AVZuv +81TLXxPZ7zVOpaCqdLKxhe5pgkZgAgc3NA6hWyItFFg0MGHah2Td+/Zb0RERERERERf/1fsyIiqr +nxHbbXM2mkkdPVv+hSUze0ld/NHIeJwFXiDiS/EOqpBY6F3OCBwfUvHc5/0WfzcnxVrarHbbLEWU +FK2IuxrkPpPf/GcdyrBEREREREREREREREREREREX//W+zIiIiIiIiIiLRRftCn9HT803bu2C3oi +IiIiIiIiIqq68R260yNgke+erk/Y6Snb2kr/AOaOQ8TgKvdS8SX12KqcWShOcxUzg+okHTL+TO/b +JVta7JbrNG5tDTNjc/eSQ+lJIe9zjufap6Iv/9f7MiIiIiIiIiIiIiIiIiIiIiIiIiIv/9D7MiIi +Ii5ij4qdHRQx/F2+uDI2t1CkGDsBkelyW13Fz2/+mL+efKlb99Z+Nr8A/Fm/b9PNW/fT42v/AP1m +/YIyPwVv30HFricDhq/f/Ub95Y+N78/5sX/Hf5o376z8bX//AKzfun+qt++nxtf/APrN+54/ard/ +66fG1+CRw1fj3fgjRn+ssDi55/8ATN/G+N6Rv31kcWvOP8Wb9/8AVb99Y+Nz9s8NX4Z/3Ru39ZDx +c8Nz8Wb8eewpW/fWRxa8nHxZvw9dK376wOLXkZ+LN+5Z/arfvrPxtcM/4tX7b/dG/eWDxdIOXDN+ +PqpW/fXnzfiO+uBq5vgWhd/oIHaql4/fP5M/m5PirW1WS3WWJzKGmbGXnMkh9J8h73OO5PrU9ERE +RERERf/R+zIiIiIiIiIiIiIiIiIiIiIiIiIiL//S+v0W1DBsB803Yepb0RERERERERERERERERER +ERERERf/0/syIiIiIiIiIiIiIiIiIiIiLRRY8wp9LdI7JuB3bBb0RERF/9T7MiIiIiIiIiIiIiIi +IiIiIiIiIiIv/9X7MiIiIiIiIiIiIiIiLRQnNBTnOrMTd8c9gt6IiIiIiIiIv//W+zIiIiIiIiIi +IiIiIiIiIiIiIiIiL//X+zIiIiIiIiIiLRQjFBTjGMRN29gW9ERERERERERERERF/9D7MiIiIiIi +IiIiIiIiIiIiIiIiIiIv/9H7MiIiIi1UrSykhYXai2NoJxjOy2oiIiIiIiIiIiIiIiIiIiL/0vsy +IiIiIiIiIiIiIiIiIiIiIiIiIi//2Q== + +------=_NextPart_7HZmySBWvSemNjin8Kg9Y-- + + + + diff --git a/Ch3/datasets/spam/spam/00308.c80d7cb2a6981efac408b429d42d2b89 b/Ch3/datasets/spam/spam/00308.c80d7cb2a6981efac408b429d42d2b89 new file mode 100644 index 000000000..4ce1c514f --- /dev/null +++ b/Ch3/datasets/spam/spam/00308.c80d7cb2a6981efac408b429d42d2b89 @@ -0,0 +1,138 @@ +From peterson@easyadpost.com Mon Sep 16 00:09:09 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id DDDEF16F03 + for ; Mon, 16 Sep 2002 00:09:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 16 Sep 2002 00:09:06 +0100 (IST) +Received: from sbapp3 ([202.106.127.199]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8FEeQC19107 for ; + Sun, 15 Sep 2002 15:40:27 +0100 +Message-Id: <200209151440.g8FEeQC19107@dogma.slashnull.org> +From: "peterson@easyadpost.com" +Subject: http://www.efi.ie/ +To: webmaster@efi.ie +Content-Type: multipart/alternative; + boundary="=_NextPart_2rfkindysadvnqw3nerasdf"; +MIME-Version: 1.0 +Sender: "peterson@easyadpost.com" +Reply-To: "peterson@easyadpost.com" +Date: Sun, 15 Sep 2002 23:46:00 +0800 +X-Priority: 3 +X-Library: Indy 8.0.25 + +This is a multi-part message in MIME format + +--=_NextPart_2rfkindysadvnqw3nerasdf +Content-Type: text/plain +Content-Transfer-Encoding: quoted-printable + +www.EasyAdPost.com -- +Promote your Products and Services on Thousands of Classified Sites. +Simply the Best Way to Sell on the Internet=21=20 +No time to post an ad for your business? +Struggling with numerous classified sites? +Seeking effective means to promote your business?=20 +All of these are great reasons for you to visit EasyAdPost.com. Currently EasyAdPost.com boasts a database of 120,000+ popular classified sites, to which we will submit your classified ad quickly and effectively. We will as well submit your business site URL or Logo URL to hundreds of thousands of search engines and directories worldwide. Quickly and effectively, EasyAdPost.com will attract potentially millions of people to your business on the Internet, without any hidden cost for advertising=21 + +Visit Links below for More Details + +*********************************************** + +To learn the generals about EasyAdPost, view http://www.easyadpost.com + +To browse the sample list of classified sites, go to http://www.easyadpost.com/sample.php=20 +Questions or comments? Post your Query Form to us at http://www.easyadpost.com/aboutus.php=20 +*********************************************** + +Spend your market dollar wisely and good luck to your business=21 + +Peterson Slade +customer=40easyadpost.com +EasyAdPost.com + +--=_NextPart_2rfkindysadvnqw3nerasdf +Content-Type: text/html +Content-Transfer-Encoding: quoted-printable + + + +EasyAdPost.com + + + + + + =20 + + =20 + + + + + =20 + +
    http://www.efi.ie/index-1998-07-16.html=20
    =20 + + + + + + +
    + + =20 + + =20 + + + + =20 + + + +
    =20

    +
    +
    + =20
     
    + + =20 + +
    =20 + =20 + + +
    =20


    +

    +
    +

    EasyAdPost.com=20 --
    + Promote your Products and Services on=20 Thousands of Classified Sites.
    + Simply the Best Way to Sell on the Internet=21
    =20

    +

    No=20 time to post an ad for your business?
    + Struggling with numerous classified sites?
    + Seeking effective means to promote your business?

    +

    All=20 of these are great reasons for you to visit EasyAdPost.com.=20 Currently EasyAdPost.com boasts a database of 120,000+ popular=20 classified sites, to which we will submit your classified=20 ad quickly and effectively. We will as well submit your business=20 site URL or Logo URL to hundreds of thousands of search engines=20 and directories worldwide. Quickly and effectively, EasyAdPost.com=20 will attract potentially millions of people to your business=20 on the Internet, without any hidden cost for advertising=21

    +

    Visit=20 Links below for More Details

    +

    ***********************************************

    +

    To=20 learn the generals about EasyAdPost, view http://www.easyadpost.com
    +
    + To browse the sample list of classified sites, go to http://www.easyadpost.com/sample.php=20

    +

    Questions=20 or comments? Post your Query Form to us at http://www.easyadpost.com/aboutus.php=20

    +

    ***********************************************

    +

    Spend=20 your market dollar wisely and good luck to your business=21

    +

    Peterson=20 Slade
    + customer=40easyadpost.com
    + EasyAdPost.com
    +

    +

     

    +
    +
    +

     

    + + + +--=_NextPart_2rfkindysadvnqw3nerasdf-- + + diff --git a/Ch3/datasets/spam/spam/00309.d9efb4713f45f4e1237d3f9b757d0916 b/Ch3/datasets/spam/spam/00309.d9efb4713f45f4e1237d3f9b757d0916 new file mode 100644 index 000000000..ac3f8dbfc --- /dev/null +++ b/Ch3/datasets/spam/spam/00309.d9efb4713f45f4e1237d3f9b757d0916 @@ -0,0 +1,273 @@ +From tps@insiq.us Mon Sep 16 00:27:17 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 9D21016F03 + for ; Mon, 16 Sep 2002 00:27:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 16 Sep 2002 00:27:14 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g8FNHpC00448 for ; Mon, 16 Sep 2002 00:17:51 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Sun, 15 Sep 2002 19:18:58 -0400 +Subject: The Flight to Safety is Upon Us +To: +Date: Sun, 15 Sep 2002 19:18:58 -0400 +From: "IQ - TPS" +Message-Id: <1e2df501c25d0e$4487a1e0$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJc+d2PRSXh9Ph5T1qGNivLp2leAA== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 15 Sep 2002 23:18:58.0250 (UTC) FILETIME=[44A6C2A0:01C25D0E] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_1C4C0F_01C25CD8.5682CFE0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_1C4C0F_01C25CD8.5682CFE0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + That's Not Rush Hour Traffic... + It's The 'Flight To Safety'! + +Fixed and indexed annuities are being bought in record numbers, as both +savers and investors seek strong guarantees and greater upside earnings +potential from financially strong companies. + +October is the biggest month for CD rollovers and most CDs will roll for +one reason ... HABIT! Give your clients a better alternative and take +advantage of this window of opportunity! + Respond Today...and Receive a Free CD Replacement Kit call +800-445-6914 + _____ + + 1st APPLICATION BONUS +FREE Digital Camera to Capture +Those Precious Memories!! + +Please fill out the form below to receive a FREE Replacement CD Kit + +Name: +E-mail: +Phone: +City: State: + + +We don't want anybody to receive our mailing who does not wish to +receive them. This is a professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: http://www.insuranceiq.com/optout + +Legal Notice + + + +------=_NextPart_000_1C4C0F_01C25CD8.5682CFE0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +The Flight to Safety is Upon Us + + + +

    =20 + + =20 + + +
    =20 + + =20 + + +
    3D"That's
    + 3D"It's
    + + =20 + + + +

    + Fixed and indexed=20 + annuities are being bought in record numbers, as both = +savers and=20 + investors seek strong guarantees and greater upside = +earnings potential=20 + from financially strong companies. +
    + + =20 + + +

    + October is the biggest = +month=20 + for CD rollovers and most CDs will=20 + roll for one reason ... HABIT!=20 + Give your clients a better alternative and take advantage = +of this=20 + window of opportunity!
    +
    + + =20 + + + +
    + + =20 + + +
    =20 +
    +
    + + =20 + + + +
    + 1st APPLICATION BONUS
    + FREE Digital Camera to Capture
    + Those Precious Memories!!
    +
    + + =20 + + +
    + + =20 + + +
    =20 + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + + + + =20 + + + +
    Please fill out the form below to receive a FREE = +Replacement CD Kit
    Name:
    E-mail:
    Phone:
    City:State:
     =20 + + + +
    +
    +
    + + =20 + + +
    =20 +

    We=20 + don't want anybody to receive our mailing who does not = +wish to=20 + receive them. This is a professional communication sent = +to insurance=20 + professionals. To be removed from this mailing list, DO = +NOT REPLY=20 + to this message. Instead, go here: http://www.insuranceiq.com/op= +tout
    + Legal = +Notice
    =20 +

    +
    +
    +
    +

    + + + +------=_NextPart_000_1C4C0F_01C25CD8.5682CFE0-- + + diff --git a/Ch3/datasets/spam/spam/00310.3f652995aadb0bf696dd10c89ce30afc b/Ch3/datasets/spam/spam/00310.3f652995aadb0bf696dd10c89ce30afc new file mode 100644 index 000000000..99af766d0 --- /dev/null +++ b/Ch3/datasets/spam/spam/00310.3f652995aadb0bf696dd10c89ce30afc @@ -0,0 +1,133 @@ +From ghostrider_13@hotmail.com Mon Sep 16 10:44:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 5DF3916F03 + for ; Mon, 16 Sep 2002 10:44:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 16 Sep 2002 10:44:10 +0100 (IST) +Received: from hotmail.com (200-171-13-198.dsl.telesp.net.br + [200.171.13.198]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8G0EvC04523 for ; Mon, 16 Sep 2002 01:14:58 +0100 +Reply-To: +Message-Id: <026e57a75a1e$6748e2d2$8cc57dd3@fhlecl> +From: +To: +Subject: WARNING: Your computer may contain a virus! +Date: Mon, 16 Sep 2002 15:56:33 +0800 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +Content-Type: text/html; charset="iso-8859-1" + + + + + + + + +Take Control of Your Computer With This Top + + + + + + + + +
    + Take Control of Your Computer + With This Top-of-the-Line Software!
    + + + + +
    + + + + +
    + Norton SystemWorks 2002 + Software Suite
    + -Professional Edition-
    + + + + +
    + Includes Six - + Yes 6! + - Feature-Packed Utilities
    + ALL for
    1 + Special LOW + Price of Only + $29.99!
    + + + + +
    + This Software + Will:
    +  
    - Protect your computer from unwanted and + hazardous viruses
    +  - Help secure your private & valuable information
    +  - Allow you to transfer files and send e-mails safely
    +  - Backup your ALL your data quick and easily
    +  - Improve your PC's performance w/superior integral diagnostics!
    +  - You'll NEVER have to take your PC to the repair shop AGAIN!
    +

     

    + + + + +
    +

    + 6 Feature-Packed Utilities +
    +
    1 Great + Price
    + A $300+ Combined Retail Value
    + YOURS for Only + $29.99!

    +
    < Price + Includes FREE + Shipping**! >

    +

    Don't fall + prey to destructive viruses or hackers!
    + Protect  your computer and your valuable information and

    + + + + +
    + + -> CLICK HERE to Order + Yours NOW! <-
    +

    ** Denotes Free Shipping For + US/Canadian Customers Only **

    +

     

    +

     

    +

    We are strongly against sending + unsolicited emails to those who do not wish to receive our special mailings. + You have opted in to one or more of our affiliate sites requesting to be + notified of any special offers we may run from time to time. We also have + attained the services of an independent 3rd party to overlook list + management and removal services. This is NOT unsolicited email. If you do + not wish to receive further mailings, please + CLICK + HERE to be removed from the list. Please + accept our apologies if you have been sent this email in error. We honor all + removal requests.

    + + + + +2102pSqQ8-906DHIX6392XDPF7-0l26 + + diff --git a/Ch3/datasets/spam/spam/00311.9797029f3ee441b00f3b7521e573cb96 b/Ch3/datasets/spam/spam/00311.9797029f3ee441b00f3b7521e573cb96 new file mode 100644 index 000000000..efded8112 --- /dev/null +++ b/Ch3/datasets/spam/spam/00311.9797029f3ee441b00f3b7521e573cb96 @@ -0,0 +1,108 @@ +From 2jc66Qs@seed.net.tw Mon Sep 16 10:44:15 2002 +Return-Path: <2jc66Qs@seed.net.tw> +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0490216F03 + for ; Mon, 16 Sep 2002 10:44:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 16 Sep 2002 10:44:14 +0100 (IST) +Received: from vic (61-230-31-88.HINET-IP.hinet.net [61.230.31.88]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g8G5f0C14586 for + ; Mon, 16 Sep 2002 06:41:02 +0100 +Date: Mon, 16 Sep 2002 06:41:02 +0100 +Received: from mx by ksts.seed.net.tw with SMTP id rUL6sGxdWdZ3kyj7w; + Mon, 14 Sep 2015 13:45:52 +0800 +Message-Id: +From: hinet@dogma.slashnull.org +To: 0915.9.TXT@dogma.slashnull.org, 0913.10.TXT@dogma.slashnull.org, + 0913.11.TXT@dogma.slashnull.org, 0913.12.TXT@dogma.slashnull.org, + 0913.13.TXT@dogma.slashnull.org, 0913.14.TXT@dogma.slashnull.org, + 0913.2.TXT@dogma.slashnull.org, 0913.3.TXT@dogma.slashnull.org, + 0913.4.TXT@dogma.slashnull.org, 0913.5.TXT@dogma.slashnull.org, + 0913.6.TXT@dogma.slashnull.org, 0913.7.TXT@dogma.slashnull.org, + 0913.8.TXT@dogma.slashnull.org, 0913.9.TXT@dogma.slashnull.org, + 0915.1.TXT@dogma.slashnull.org, 0915.10.TXT@dogma.slashnull.org, + 0915.11.TXT@dogma.slashnull.org, 0915.12.TXT@dogma.slashnull.org, + 0915.13.TXT@dogma.slashnull.org, 0915.14.TXT@dogma.slashnull.org, + 0915.15.TXT@dogma.slashnull.org, 0915.16.TXT@dogma.slashnull.org, + 0915.2.TXT@dogma.slashnull.org, 0915.3.TXT@dogma.slashnull.org, + 0915.4.TXT@dogma.slashnull.org, 0915.5.TXT@dogma.slashnull.org, + 0915.6.TXT@dogma.slashnull.org, 0915.7.TXT@dogma.slashnull.org, + 0915.8.TXT@dogma.slashnull.org, 0913.1.TXT@dogma.slashnull.org +Subject: =?big5?Q?re:=A7=DA=AA=BE=B9D=A7A=BB=DD=ADn=A7=F3=A6h=BE=F7=B7|,=A4@=B0_=A8=D3=A7a!?= +MIME-Version: 1.0 +X-Mailer: rexfd0sUMJVQYfjVBi +X-Priority: 3 +X-Msmail-Priority: Normal +Content-Type: multipart/related; type="multipart/alternative"; boundary="----=_NextPart_eZIySJCgLFoIw4lk9MkBwobm5" + +This is a multi-part message in MIME format. + +------=_NextPart_eZIySJCgLFoIw4lk9MkBwobm5 +Content-Type: multipart/alternative; + boundary="----=_NextPart_eZIySJCgLFoIw4lk9MkBwobm5AA" + + +------=_NextPart_eZIySJCgLFoIw4lk9MkBwobm5AA +Content-Type: text/html; + charset="big5" +Content-Transfer-Encoding: base64 + +PGh0bWw+DQoNCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29u +dGVudD0iemgtdHciPg0KPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNaWNyb3NvZnQg +RnJvbnRQYWdlIDUuMCI+DQo8bWV0YSBuYW1lPSJQcm9nSWQiIGNvbnRlbnQ9IkZyb250UGFnZS5F +ZGl0b3IuRG9jdW1lbnQiPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50 +PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9YmlnNSI+DQo8dGl0bGU+s2+sT6llsFWl0bFNt368c6dppL2l +caVOtW+kxaq9sbWmXqtItUyqa7G1pqwgy+c8L3RpdGxlPg0KPC9oZWFkPg0KDQo8Ym9keT4NCg0K +PHAgc3R5bGU9Im1hcmdpbi10b3A6IDBweDsgbWFyZ2luLWJvdHRvbTogMHB4Ij48Zm9udCBjb2xv +cj0iIzgwODA4MCI+DQqzb6xPqWWwVaXRsU23frxzp2mkvaVxpU61b6TFqr2xtaZeq0i1TKprsbWm +rCDL5yB+ICE8L2ZvbnQ+PC9wPg0KPGhyIFNJWkU9IjEiPg0KPGRpdiBhbGlnbj0iY2VudGVyIj4N +CiAgPGNlbnRlcj4NCiAgPHRhYmxlIHN0eWxlPSJib3JkZXI6IDFweCBkb3R0ZWQgI0ZGMDAwMDsg +OyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2UiIGhlaWdodD0iMzY1IiBjZWxsU3BhY2luZz0iMCIg +Y2VsbFBhZGRpbmc9IjAiIHdpZHRoPSI2MDQiIGJvcmRlcj0iMCIgYm9yZGVyY29sb3JsaWdodD0i +IzAwODAwMCIgYm9yZGVyY29sb3I9IiMxMTExMTEiPg0KICAgIDx0cj4NCiAgICAgIDx0ZCB2QWxp +Z249ImNlbnRlciIgYWxpZ249Im1pZGRsZSIgd2lkdGg9IjU5OCIgYmdDb2xvcj0iI0ZGRkYwMCIg +aGVpZ2h0PSIzNjUiPg0KICAgICAgPHAgYWxpZ249ImNlbnRlciI+oUA8L3A+DQogICAgICA8cCBh +bGlnbj0iY2VudGVyIj48Zm9udCBmYWNlPSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjMDAwMEZG +Ij6mbqpCpM2w2iE8L2ZvbnQ+PC9wPg0KICAgICAgPHAgYWxpZ249ImNlbnRlciI+PGZvbnQgZmFj +ZT0ivNC3osXpIiBzaXplPSI0IiBjb2xvcj0iIzAwMDBGRiI+DQogICAgICCzXKZopEiv4KRPqFOm +s6Txp0GmbiymXaywtHi0pKRGrsm+9zwvZm9udD48L3A+DQogICAgICA8cCBhbGlnbj0iY2VudGVy +Ij48Zm9udCBmYWNlPSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjMDAwMEZGIj6p0qVIpGq1b6dR +passs9C3fq1QtEksPC9mb250PjwvcD4NCiAgICAgIDxwIGFsaWduPSJjZW50ZXIiPjxmb250IGZh +Y2U9IrzQt6LF6SIgc2l6ZT0iNCIgY29sb3I9IiMwMDAwRkYiPrNcpmg8L2ZvbnQ+PGZvbnQgZmFj +ZT0ivNC3osXpIiBjb2xvcj0iI0ZGMDAwMCIgc2l6ZT0iNiI+vve3fDwvZm9udD48Zm9udCBmYWNl +PSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjMDAwMEZGIj6lbqr5rsksqbmpuaV1PC9mb250Pjxm +b250IGZhY2U9IrzQt6LF6SIgY29sb3I9IiNGRjAwRkYiIHNpemU9IjYiPqazM6ztxMEhPC9mb250 +PjwvcD4NCiAgICAgIDxwIGFsaWduPSJjZW50ZXIiPjxmb250IGZhY2U9IrzQt6LF6SIgc2l6ZT0i +NCIgY29sb3I9IiMwMDAwRkYiPrROpl2ssCZxdW90OzwvZm9udD48Zm9udCBmYWNlPSK80Leixeki +IGNvbG9yPSIjMDAwMEZGIiBzaXplPSI1Ij6ko6XMpN8mcXVvdDs8L2ZvbnQ+PGZvbnQgZmFjZT0i +vNC3osXpIiBzaXplPSI0IiBjb2xvcj0iIzAwMDBGRiI+s3m0TrNcpmikSKZis2+4zKaopVw8L2Zv +bnQ+PC9wPg0KICAgICAgPHAgYWxpZ249ImNlbnRlciI+PGZvbnQgZmFjZT0ivNC3osXpIiBzaXpl +PSI0IiBjb2xvcj0iIzAwMDBGRiI+s8yxTbd+qrq5zraku7K+ybF6PC9mb250PjwvcD4NCiAgICAg +IDxwIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly92aWMuaDhoLmNvbS50dy8iPg0KICAg +ICAgPGZvbnQgc2l6ZT0iNiIgZmFjZT0ivNC3osXpIiBjb2xvcj0iI0ZGMDAwMCI+MrhVpLi26qRA +rdOkcKbRwfOqurnaPC9mb250PjwvYT48L3A+DQogICAgICA8cCBhbGlnbj0iY2VudGVyIj4yMKTA +xMGs3cC0s2+t0773t3wsp0G0TqxPptukdqq6pUSkSCGvrLF6pm65QjwvcD4NCiAgICAgIDxwPjxm +b250IGNvbG9yPSIjZmYwMGZmIj48YSBocmVmPSJodHRwOi8vdmljLmg4aC5jb20udHcvIj4NCiAg +ICAgIGh0dHA6Ly92aWMuaDhoLmNvbS50dzwvYT48L2ZvbnQ+PHA+PGZvbnQgY29sb3I9IiNGRjAw +MDAiPg0KICAgICAgPHNwYW4gbGFuZz0iZW4tdXMiPjxmb250IHNpemU9IjciPnBzOjwvZm9udD48 +L3NwYW4+t1G2aaRAqEKqvrlEpnCm86ZirmG7tMNQpc669Lj0wcikar/6LKVpPC9mb250Pjxmb250 +IHNpemU9IjQiIGNvbG9yPSIjMDAwMEZGIj6nS7ZPs/imV7r0uPSvU7BWPC9mb250PjxwPg0KICAg +ICAgPGZvbnQgY29sb3I9IiNGRjAwMDAiPqZwqkesebZxuUywqqzdpKOo7L11pFe8dqT5LKVpr8Go ++qdLtk+z0Ld+pfq60DwvZm9udD48Zm9udCBjb2xvcj0iIzAwMDBGRiI+KL3QpmKtuq22r2SkValt +ple5cbjcpu2nfSk8L2ZvbnQ+PHA+oUA8cD4NCiAgICAgIKFAPHA+oUA8cD6hQDwvdGQ+DQogICAg +PC90cj4NCiAgPC90YWJsZT4NCiAgPC9jZW50ZXI+DQo8L2Rpdj4NCjxociBTSVpFPSIxIj4NCjxw +IHN0eWxlPSJtYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1ib3R0b206IDBweCIgYWxpZ249ImNlbnRl +ciI+DQo8Zm9udCBjb2xvcj0iI2ZmMDAwMCI+pnCms6W0wlq90KijvcyhQaSjt1GmQaasqOymuatI +vdCr9iZuYnNwOyAtJmd0OyZuYnNwOyAoPGEgaHJlZj0iaHR0cDovL3gtbWFpbC5oOGguY29tLnR3 +IiB0YXJnZXQ9Il9ibGFuayI+qdqmrLxzp2k8L2E+KTwvZm9udD48L3A+DQoNCjwvYm9keT4NCg0K +PC9odG1sPg== + + +------=_NextPart_eZIySJCgLFoIw4lk9MkBwobm5AA-- +------=_NextPart_eZIySJCgLFoIw4lk9MkBwobm5-- + + + + diff --git a/Ch3/datasets/spam/spam/00312.75c839d7d4f6da9e860a11b617904fb5 b/Ch3/datasets/spam/spam/00312.75c839d7d4f6da9e860a11b617904fb5 new file mode 100644 index 000000000..c89ca3ab8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00312.75c839d7d4f6da9e860a11b617904fb5 @@ -0,0 +1,77 @@ +From ilug-admin@linux.ie Mon Sep 16 10:44:18 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id D8F0B16F03 + for ; Mon, 16 Sep 2002 10:44:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 16 Sep 2002 10:44:16 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8G7YiC17031 for + ; Mon, 16 Sep 2002 08:34:44 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id IAA25155; Mon, 16 Sep 2002 08:33:46 +0100 +Received: from coolre42001.com (node1f6f6.a2000.nl [24.132.246.246]) by + lugh.tuatha.org (8.9.3/8.9.3) with SMTP id IAA25119 for ; + Mon, 16 Sep 2002 08:33:36 +0100 +Message-Id: <200209160733.IAA25119@lugh.tuatha.org> +X-Authentication-Warning: lugh.tuatha.org: Host node1f6f6.a2000.nl + [24.132.246.246] claimed to be coolre42001.com +From: "ilug" +Reply-To: "ilug" +To: ilug@linux.ie +Date: Mon, 16 Sep 2002 09:33:38 +0200 +X-Priority: 1 +X-Mailer: Microsoft Outlook Express 5.00.2919.6900 DM +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +X-MIME-Autoconverted: from quoted-printable to 8bit by lugh.tuatha.org id + IAA25119 +Subject: [ILUG] MICHAEL ! ilug +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie +Content-Transfer-Encoding: 8bit + + ilug , + + From;Mr.Michael Kamah and Family, + Johannesburg,South Africa. + +My Dear , + +Good day.This very confidential request should come as a surprise to you.But it is because of the nature of what is happening to me and my family urged me to contact you, and I quite understand that this is not the best way to contact you because of the nature of my request and the attention it requires.I got your contact information from your country's information directory during my desperate search for someone who can assist me secretly and confidentially in relocating and managing some family fortunes. + +My name is Mr.Michael Kamah, the second son of Mr.Smith Kamah, of Beitbridge Zimbabwe.At the height of the present political crises in our country,in which the white farmers in our country are being slained and ripped off their belongings by the supporters of our president,Mr.Robert G.Mugabe,in their efforts to reclaim all the white owned farms in our country,my father and my elder brother were brutally slained to a painful death on the 13th of february,2002, in their struggle to protect some white farmers who ran to take refuge in our house.My father,during his life on earth was a prominent business man who trades on diamond and gold from some foreign countries .He publicly opposes the crude policies and crime against humanity on the white farmers by Mr.Robert Mugabe and his followers,which they enforced media law restrictions to protect their wicked acts.That not being enough,the president and his followers after winning the last undemocratic elections decided to block and ! +confiscate all accounts and assets of our black indigenes[that included my fathers assets and accounts] who oppose his policies and render support to these white farmers,along with the assets of these white farmers themselves,that are being presently confiscated.I therefore decided to move my mother and younger sister to the Republic of South Africa,where we presently live without anything and without any source of livelyhood. + +During my fathers life on earth,he had deposited the sum of Eight Million and Six Hundred Thousand United States Dollars[$8.600.000.00],in a trunk box with a Finance and Security Company in the Republic of Togo for a cash and carry Diamond and Gold business with some foreign business customers, awaiting instructions to be moved to its destination,which he never completed before he met his untimely death on that faithful day.In view of this and as the only surviving son of my father,and with the present clamp down,killing and confiscation of his assets as one of those who render support to the white farmers in our country,I therefore humbly wish to inform you of my intentions to use your name and adress in making sure that this fund is lifted out of Africa finally,to the Europe office of the finance company and also seek for your honest and trustworthy assistance to help me clear and accommodate this money over there before it is dictated out and blocked by the present Mugabe's! + regime.My mother is presently with the valid document covering this deposit. + +Now this is what I actually want you to do for me; + +1. I want you to be presented to the Finance and Security company as the person I contacted to assist my family for this purpose, with whose name and adress myself and my mother will forward to them their office in the Republic of Togo as the person that will clear this money when they lift it out to their europe office. +2. To finally assist me in accommodating and managing this money in any lucrative business in your country for at least three years. + +Please,I hope you will grant and view this very request with favour and much understanding of our situation now,and will be a very honest and reliable person to deal with.And also bearing in mind the confidential nature of this my request,I emphasize please that you keep every bit of it to yourself so as to protect my familys future and yourself rendering this help.Thanking you in anticipation of your urgent response as soon as you read this very request. + +Best Regards, + +Mr.Michael Kamah and family. + + + + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00313.fab744bfd5a128fca39b69df9811c086 b/Ch3/datasets/spam/spam/00313.fab744bfd5a128fca39b69df9811c086 new file mode 100644 index 000000000..0dbb76a30 --- /dev/null +++ b/Ch3/datasets/spam/spam/00313.fab744bfd5a128fca39b69df9811c086 @@ -0,0 +1,72 @@ +From webmake-talk-admin@lists.sourceforge.net Mon Sep 16 10:42:01 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id C2FC016F03 + for ; Mon, 16 Sep 2002 10:42:00 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 16 Sep 2002 10:42:00 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8G8fhC18499 for ; Mon, 16 Sep 2002 09:41:43 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17qrSF-0007Qf-00; Mon, + 16 Sep 2002 01:42:03 -0700 +Received: from [67.105.62.34] (helo=uclr) by usw-sf-list1.sourceforge.net + with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17qrRX-00059z-00 for + ; Mon, 16 Sep 2002 01:41:19 -0700 +From: Erim Ay +To: +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 +MIME-Version: 1.0 +Content-Type: text/html +Content-Transfer-Encoding: base64 +Message-Id: +Subject: [WM] özür dileriz +Sender: webmake-talk-admin@example.sourceforge.net +Errors-To: webmake-talk-admin@example.sourceforge.net +X-Beenthere: webmake-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion of WebMake. +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 16 Sep 2002 09:38:36 -0400 +Date: Mon, 16 Sep 2002 09:38:36 -0400 + +PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVu +dD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1NCI+DQo8dGl0bGU+U01TVFIgeXdw +Z3hxc3J2b2xnZHE8L3RpdGxlPjwvaGVhZD4NCjxib2R5PjxwPjxmb250IGZhY2U9IkFyaWFs +IiBzaXplPSI0Ij5EZWdlcmxpIFNNU1RSIGt1bGxhbmljaW1pejxicj4NCjxodG1sPg0KU01T +IHByb2dyYW1pbWl6IOdlc2l0bGkgYWtzYWtsaWtsYXIgc2ViZWJpIGlsZSBrdWxsYW5pbGFt +YXogaGFsZSBnZWxtaXN0aXIuIEJ1IA0Kc2ViZXB0ZW4gZG9sYXlpIHllbmkgYmlyIHByb2dy +YW0gaGF6aXJsYW1hayB6b3J1bmRhIGthbGRpay4gUHJvZ3JhbWkgYXNhZ2lkYWtpIGxpbmtp +IA0Ka3VsbGFuYXJhayBpbmRpcmViaWxpcnNpbml6LiBQcm9ncmFtaSBiaXogdmly/HMga29u +dHJvbPxuZGVuIGdl52lybWlzIGJ1bHVubWFrdGF5aXouDQpCdSB5ZW5pIHZlcnNpeW9uZGEg +c21zIGluIHllcmluZSB1bGFzbWEgaGl6aSDnb2sgZGFoYSBhcnRpcmlsbWlzdGlyLiBBeXJp +Y2Egc2luaXJzaXogDQp2ZSB0b3BsdSBzbXMgZ/ZuZGVyZWJpbGlyc2luaXouIMdvayB5YWtp +bmRhIGxvZ28gdmUgbWVsb2RpIHRyYW5zZmVyaSBoaXptZXRpbWl6IA0KYWNpbGFjYWt0aXIu +IFNpemkgYmlyIHN1cmUgc2luaXJzaXogc21zZGVuIG1haHJ1bSBldHRpZ2ltaXogaWNpbiBv +enVyIA0KZGlsZXJpei48L2ZvbnQ+PGJyPg0KPGJyPjxmb250IGZhY2U9IkFyaWFsIiBzaXpl +PSI0Ij48YSBocmVmPSJodHRwOi8vd3d3LmdhcmFudGlzbXMuY29tL3Ntc3RyLmV4ZSI+U01T +VFINClZlcnNpeW9uIDcuMyB1IGluZGlybWVrIGnnaW4gYnVyYXlhIHRpa2xheWluaXo8L2E+ +PC9mb250PjwvcD4NCjwvYm9keT4NCjwvaHRtbD4NCg0K + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +webmake-talk mailing list +webmake-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/webmake-talk + + diff --git a/Ch3/datasets/spam/spam/00314.8f7993db02bde4d724e1eff9d2d35db1 b/Ch3/datasets/spam/spam/00314.8f7993db02bde4d724e1eff9d2d35db1 new file mode 100644 index 000000000..83880c958 --- /dev/null +++ b/Ch3/datasets/spam/spam/00314.8f7993db02bde4d724e1eff9d2d35db1 @@ -0,0 +1,38 @@ +From wclimenh@megamail.pt Mon Sep 16 13:07:44 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 4B2C116F03 + for ; Mon, 16 Sep 2002 13:07:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 16 Sep 2002 13:07:44 +0100 (IST) +Received: from mac-mx-01.mail-bodycote.uk.net ([213.121.179.149]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8GBCRC23282 for + ; Mon, 16 Sep 2002 12:12:28 +0100 +Received: from mail.miesto.sk ([61.11.12.123]) by + mac-mx-01.mail-bodycote.uk.net with Microsoft SMTPSVC(5.0.2195.5329); + Mon, 16 Sep 2002 09:26:46 +0100 +Message-Id: <0000726b478a$00005ac9$0000707a@m11.caramail.com> +To: +Cc: , , + , , , + +From: "Sandra Collins" +Subject: NEED TO FIND SOMETHING? +Date: Mon, 16 Sep 2002 01:25:29 -1900 +MIME-Version: 1.0 +X-Originalarrivaltime: 16 Sep 2002 08:26:48.0640 (UTC) FILETIME=[CCEE3C00:01C25D5A] +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +::FREE MORTGAGE QUOTE::

    To be removed from this list, click here.<= +/a>
    + + + + diff --git a/Ch3/datasets/spam/spam/00315.0ee82a2e087ffcf6efbd30b36499ead6 b/Ch3/datasets/spam/spam/00315.0ee82a2e087ffcf6efbd30b36499ead6 new file mode 100644 index 000000000..ecc824f6b --- /dev/null +++ b/Ch3/datasets/spam/spam/00315.0ee82a2e087ffcf6efbd30b36499ead6 @@ -0,0 +1,95 @@ +From williams.t@caramail.com Mon Sep 16 15:30:44 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 3548216F03 + for ; Mon, 16 Sep 2002 15:30:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 16 Sep 2002 15:30:41 +0100 (IST) +Received: from mail1.caramail.com (mail1.caramail.com [213.193.13.92]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8GCpaC26159 for + ; Mon, 16 Sep 2002 13:51:36 +0100 +Received: from caramail.com (www54.caramail.com [213.193.13.64]) by + mail1.caramail.com (Postfix) with SMTP id C7B533E0B1; Mon, 16 Sep 2002 + 13:12:50 +0200 (DST) +From: williams T +To: williams.falana@caramail.com +Message-Id: <1032174770005403@caramail.com> +X-Mailer: Caramail - www.caramail.com +X-Originating-Ip: [217.10.163.34] +MIME-Version: 1.0 +Subject: Funds Investment +Date: Mon, 16 Sep 2002 13:12:50 GMT+1 +Content-Type: multipart/mixed; + boundary="=_NextPart_Caramail_0054031032174770_ID" + +This message is in MIME format. Since your mail reader does not understand +this format, some or all of this message may not be legible. + +--=_NextPart_Caramail_0054031032174770_ID +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +SENIOR ADVOCATE OF NIGERIA +BARR. WILLIAMS FALANA (SAN) + +Dear Sir, + +I am Barrister Williams Falana a member of Nigeria Bar +Association (NBA).Your contact reached me through the World +Business Encyclopaedia.Hence,I made up my mind to introduce +this business to you in confidence for the mutual benefit +of both of us. + +The sum of USD48M (Forty eight Million United States) was +lodged into a security company here in the Country by the +late Head of State (GEN.SANI ABACHA) for safe-keeping. This +money was lodged in security vaults / boxes and labelled as +personal belongings and as such the security company does +not know the true content of the boxes.This money was +originally meant to be used for his political campaign. +Because I was his family Attorney as such he confided in me +with the relevant document papers relating to this deposit +before he died of cardiac arrest. + +As a matter of fact we have concluded all arrangement with +an offshore Security Company to move this money as a +consignment through diplomatic means to their offshore +affiliated office where you will be required to put claim +to the consignment as the bonafide beneficiary of the +consignment. You should know that this business is safety +and 100% risk-free as it does not involve drug money or +Terrorist fund. + +If you are interested to carry out this transaction with +me, 20% will be for you for your assistance, 5% for general +expenses, and 75% for us. + +You are required to send by e-mail immediately your Full +name and Address, which I will use to draft an agreement +that will guide and protect both of us in this transaction +also which will be used to effect the change of ownership +of the consignment to your name as the beneficiary of the +consignment. + +Also send me your Telephone and Fax numbers for easy +communication + +Once you notify me your willingness by sending the above +requirement.This transaction will be concluded within 7 +(seven) working days. + +I will be waiting for your urgent reply.You can reach me on +my Cell Telephone No: 234-80- 33055024 or my alternative E- +mail: williamsfalana@caramail.com + +Best regards, +Barrister Williams Falana {SAN} +______________________________________________________ +Bo=EEte aux lettres - Caramail - http://www.caramail.com + + +--=_NextPart_Caramail_0054031032174770_ID-- + + diff --git a/Ch3/datasets/spam/spam/00316.311d11f764c6e452b2f0208b53b94ea2 b/Ch3/datasets/spam/spam/00316.311d11f764c6e452b2f0208b53b94ea2 new file mode 100644 index 000000000..3f3ede9f4 --- /dev/null +++ b/Ch3/datasets/spam/spam/00316.311d11f764c6e452b2f0208b53b94ea2 @@ -0,0 +1,282 @@ +From xvfreshvegetables@yahoo.com Mon Sep 16 16:33:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 6963B16F03 + for ; Mon, 16 Sep 2002 16:33:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 16 Sep 2002 16:33:36 +0100 (IST) +Received: from 210.179.221.253 (IDENT:squid@[210.179.81.250]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g8GFIeC30799; + Mon, 16 Sep 2002 16:18:58 +0100 +Message-Id: <200209161518.g8GFIeC30799@dogma.slashnull.org> +Received: from unknown (164.203.204.135) by a231242.upc-a.chello.nl with + SMTP; Sep, 16 2002 11:14:53 AM +0600 +Received: from unknown (70.133.86.252) by + da001d2020.lax-ca.osd.concentric.net with esmtp; Sep, 16 2002 10:05:58 AM + -0200 +Received: from [49.164.250.3] by rly-xw01.mx.aol.com with SMTP; + Sep, 16 2002 9:03:56 AM -0800 +Received: from rly-xl05.mx.aol.com ([147.119.50.98]) by smtp4.cyberec.com + with NNFMP; Sep, 16 2002 8:08:03 AM -0700 +From: "Greg N. Suits" +To: Laura.Swanson@dogma.slashnull.org +Cc: +Subject: 3 Cd Package: 300 Million Email Addresses + 1.5 Mil Fax Numbers $99.95 +Sender: "Greg N. Suits" +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Mon, 16 Sep 2002 11:19:40 -0700 +X-Mailer: AOL 7.0 for Windows US sub 118 + +NEW - NEW - NEW IN THE MARKET +JUST RELEASED: + +300 Million email addresses--Database Fully Exportable, On 3 CDs!! + +300 Million email addresses--Database Fully Exportable, On 3 CDs!! =Only $99.95 +** Contains US & International EMAILS ** +With 1.5 Million USA Business Fully Exportable Fax Numbers, + +ALL TWO DIRECTORIES ABOVE (300 Million and faxes #) ** ONLY $99.95 ** + +BOTH EMAIL DIRECTORIES ARE CATEGORIZED +Email Address CDROM (300 Million Addresses) +MORE THAN 134 CATEGORIES SUCH AS: + +USA--50 STATES AND AREA CODE: +Contains e-mail addresses of people living in all 50 states. Each state is broken down by area codes. + +Canada and Area Code: +Contains e-mail addresses of people living in Canada. Each province is +broken down by area codes + +Adult: +Contains e-mail addresses of people interested in adult content + +Auto: +Contains e-mail addresses of people interested in automotive content + +Canada: +Contains e-mail addresses of people living in Canada. Each province is broken +down by area codes. + +Classifieds: +Contains e-mail addresses of people advertising in classifieds and people that +are interested in classifieds + +Culture: +Contains e-mail addresses of people interested in antiques, art, entertainment, +fashion, movies, etc. + +Dining: +Contains e-mail addresses of people interested in drinking beer, cooking, dining +out, etc. + + +Gambling: +Contains e-mail addresses of people interested in gambling + +Gardening: +Contains e-mail addresses of people interested in gardening + +Geographic: +Contains e-mail addresses of people residing in different cities and counties, +broken down by city name + +Golf: +Contains e-mail addresses of people interested in golf + +Health: +Contains e-mail addresses of people interested in fitness, weight loss, etc. + +Home Business: +Contains e-mail addresses of people interested in running a home based business, +or are already operating a home based business + +Hot List: +Contains e-mail addresses of people interested in online shopping + +International: +Contains e-mail addresses of people living in different countries, broken down +by name of the country + +Internet: +Contains e-mail addresses of people who registered a domain name in the past 2 months + +Investments: +Contains e-mail addresses of people interested in investing in the market + +Misc: +Contains e-mail addresses of people interested in auctions, boating + +Books: +Coupons, credit, fishing, mortgage, politics, real estate, religion, trade +shows, etc. + +Music: +Contains e-mail addresses of people interested in music + +Internet Market: +Contains e-mail addresses of people interested in Internet Market places + +Opportunity Seekers: +Contains e-mail addresses of people interested in different opportunities + +Opt-In: +Contains e-mail addresses of people interested in Opt-In + +Outdoors: +Contains e-mail addresses of people interested in outdoor activity + +Pet Lovers: +Contains e-mail addresses of people interested in pets + +Psychic: +Contains e-mail addresses of people interested in psychics + +Publishing: +Contains e-mail addresses of people interested in publishing + +Recreation: +Contains e-mail addresses of people interested in different recreational +activities. + +Sci-Fi: +Contains e-mail addresses of people interested in Sci-Fi + +Show Business: +Contains e-mail addresses of people interested in show business + +Sports: +Contains e-mail addresses of people interested in sports + +Health: +Contains e-mail addresses of people interested in health + +Web design: +Contains e-mail addresses of people interested in web designs + +Travel: +Contains e-mail addresses of people interested in traveling + +Super List: +Contains e-mail addresses of people who have bought more than $2,000.00 over the +Internet in the last 4 months + +The Tropics: +Contains e-mail addresses of people who live in the Antigua, Bahamas, Barbados, +Bermuda, British Virgin Islands, Caribbean Islands, Cayman Islands, Grenada, +Guam, Jamaica, Puerto Rico, St. Kitts & Nevis, St. Lucia, Trinidad & Tobago, +Turks & Caicos Islands, US Virgin Islands, etc. broken down by area codes + +AND MANY MORE! +*Everything on this disk is in TEXT file format and is fully exportable. + +*The CD is as easy to use as browsing your C drive in Explorer. +Just think of it, over 300 million people will see your advert, if only a fraction of them was to buy your product/services, think of all the money you would be earning. + +Are the fax numbers fresh? How many are deliverable? + +The 1.5 million fax number list has been verified within the last three months and is very fresh and deliverable. + +Are the fax numbers sorted by name or business type? + +The 1.5 million fax number list is sorted by area code only. It is not sorted by business name, business type. + +What file format are the fax numbers in? + +The 1.5 million fax number list is in a standard text file format (.txt), and is not separated by commas or quotes. The list is compiled in a one-fax number per line method, suitable for importing into most of the popular fax software programs. + +** The CD is as easy to use as browsing your C drive in Explorer. ** + +NOW YOU CAN ADVERTISE FREE AND GET TREMENDOUSLY +MORE RESPONSES THAN ADVERTISING WITH OTHER FORMS OF MEDIA!! ORDER NOW + +HOW THIS DIRECTORY WAS COMPILED: + +* Virtually every other email directory on the Internet was taken and put through an extensive email verification process thus eliminating all the dead addresses. +* Special software spiders through the web searching websites, newsgroups and many other online databases with given keywords like area codes, industries, city names etc.. To find millions of fresh new addresses every week. + +TURN YOUR COMPUTER INTO A MONEY MACHINE! + +Most estimate well over 400 MILLION people will have E-mail accounts in the next 2Years! E-Mail turns your computer into a Money Machine by giving you, immediate access to all of them. Don't you think some of the more than 300 million people with E-mail addresses would be interested in your products or Services? + +MUCH FASTER: With E-mail you get responses back in 1 to 4 days instead of waiting weeks or months! You can begin filling orders the same day you send E-mail + +ADVERTISING WORTH MILLIONS: It costs millions of dollars to mail. + +DO NOT REPLY TO THIS E-MAIL ADDRESS. TO ORDER, READ BELOW: + +ORDER BY CREDIT CARD (VISA, MASTERCARD OR AMERICAN EXPRESS) Simply complete the order form below and fax it back + TO 1- (240) 371-0672 +Make sure that we have your e-mail address so that we can send you a reciept for your transaction. + +CREDIT CARD ORDERS FAX THIS ORDER FORM BACK +TO 1- (240) 371-0672 + +ORDER FORM (Please PRINT clearly) +Name: +Company Name: +Email Address: +Tel#: +Shipping Address: + +City: +State/Province: +Zip/Postal Code: +Country: + +PRODUCT ORDER FORM: +[ ] 300 MILLION EMAIL ADDRESSES on 3 CDs $ 99.95 + And 1. Million USA Business Fax Numbers + +SHIPPING OPTIONS +[ ] Regular Mail (1-2)weeks delivery $ 5.50 +[ ] Priority Mail(2-4)business days $12.50 +[ ] FedEx Overnight For US & Canada Only $25.50 Int'l orders extra +Only For FedEx + +TOTAL AMOUNT TO BE PAID: $ USD + +FOR CREDIT CARD ORDERS, THIS INFO MUST BE ENCLOSED: + +[] VISA [] MASTERCARD [] AMERICAN EXPRESS + +Card #: +Expiry Date: +Name on Card: +City: +State/Province: +Zip/Postal Code: +Country: +Last 3 digits on reverse of card next to signature: +( ) - ( ) - ( ) + +TOTAL AMOUNT: $ USD +I agree to pay the above total amount according to my card issuer agreement. + +Authorized Signature: X Date: 2002 +Please note that FT International will appear on your statement. + +CREDIT CARD ORDERS FAX THIS ORDER FORM BACK +TO 1- (240) 371-0672 + + +MAIL ORDERS SEND THIS ORDER FORM BACK TOGETHER WITH A MONEY ORDER PAYABLE TO (F.T International). FOR THE BALANCE TO: + +MAILING ADDRESS: +FUTURE TECH INTERNATIONAL +Import Export Company +1300 Don Mills Road Suite 211 +Don Mills Ontario, Canada +M3B 2W6 + +PLEASE DO NOT SEND POSTAL MONEY ORDERS + +FOR ANY QUESTIONS PLEASE FEEL FREE TO CALL US AT 1 (416) 410-9364 + +To be removed from our database please send a fax to 1-970-289-6524 + + diff --git a/Ch3/datasets/spam/spam/00317.22fe43af6f4c707c4f1bdc56af959a8e b/Ch3/datasets/spam/spam/00317.22fe43af6f4c707c4f1bdc56af959a8e new file mode 100644 index 000000000..421b3e802 --- /dev/null +++ b/Ch3/datasets/spam/spam/00317.22fe43af6f4c707c4f1bdc56af959a8e @@ -0,0 +1,103 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Sat Sep 7 20:38:19 2002 +Return-Path: +Received: from mccrary-8bnedo4 (male---30@c-24-98-25-152.atl.client2.attbi.com [24.98.25.152]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with SMTP id g881cGMD001644 + for ; Sat, 7 Sep 2002 20:38:17 -0500 (CDT) +From: +To: +Date: Sat, 7 Sep 2002 17:58:28 +Message-Id: <57.883554.549391@mccrary-8bnedo4> +Subject: Special Affiliate Offers from Amazon.Com! +Mime-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + + + + Welcome to "Ghetto" America! +…...Yes, you heard me; I said "Ghetto" America! What is "Ghetto" +America, I'm glad you asked. Before I go on please be warned, +this explanation may not sit well with many of you, however it is +no less true! "Ghetto" America is a society of individuals +comprised primarily of African Americans who represent the +impoverished, and often unpolished side of "Black America;" +Confused?! I shall explain further; have you ever passed by a +typical ghetto community; namely the "projects" and noticed an +unusual amount of fancy cars parked throughout that particular +neighborhood, and wondered how could that be? Or maybe you have +been to a shopping mall, and noticed an unusual amount of young +"teen looking" black women carrying infants, or pushing baby +carriages and often with a toddler in tow! Perhaps you also +noticed that there was rarely any male companion accompanying +them. If you paid close attention you might have also noticed the +absence of the all important "wedding band" missing from their +respective ring fingers!" .And of course we have all heard +stories of young black men carrying guns, and knives, allegedly +mugging, robbing and carjacking people of all sorts! Did you know +that many young African American women refuse to date African +American males if they do not own or possess an automobile. In +fact many young Black women prefer only to date individuals who +represent the subversive side of society; commonly known as +"Thugs" or "Street Hustlers;" Also, did you know that many young +African American males prefer to buy expensive luxury cars while +living in government housing better known as the "projects" +rather than move away, purchase new homes, save, or even make +investments? + + "Attention" This is Not another "Boyz in the Hood" Story! + +These newly distinguished "Black Generation Xers" are suffering +through utter chaos. "Baby Makers, Loser choosers, Welfare +Abusers...Images of My America" is a collection of observations, +and commentary as told through the eyes of a young African +American Male who experienced, and perpetuated many of the truths +that many in "Black America," and the world in general would have +you believe do not exist. It is a riveting expose that sheds +light on the oppressive, and often discriminatory nature of +"Mainstream American Society." A society that has nurtured the +rampant disregards for self-respect, and enlightenment that many +young African American men, and women currently suffer from. The +writer supports his arguments with direct references to the +overwhelming numbers of young black single mothers attempting to +raise children, with many being teens themselves; and the foolish +criteria that is utilized when choosing their mates; oftentimes +being based on nothing more than the young black male's tough or +cool neighborhood reputation. + +The author also identifies the self-destructive and often +criminal behavior that many young black men perpetuate on a daily +basis like, refusing to pursue higher education, carrying guns, +robbing, stealing, selling drugs, driving fancy cars, and wearing +expensive jewelry. The negative and self-debasing behavior +committed by both males, and females is due in large part to a +lack of guidance resulting from having been reared in fatherless +homes. These poor choices, and behavioral disorders coupled with +the unnecessary burden that it places on tax paying citizens in +the form of welfare abuse, and over crowded prison populations +are the center causes for the cycle of rampant poverty, and lack +of direction that currently exists in young "Black America" +today. To learn more about this dynamic self contained society +visit www.BlackRealityPublishing.com and reserve your copy today! + + + To request an excerpt please email + + Books@BlackRealityPublishing.com + + Buy this soon to be "Best Seller" now! + + www.BlackRealityPublishing.com + + + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00318.7ce7e3cbbf4fa9c30a67b7ecdda2342e b/Ch3/datasets/spam/spam/00318.7ce7e3cbbf4fa9c30a67b7ecdda2342e new file mode 100644 index 000000000..2ed8649dc --- /dev/null +++ b/Ch3/datasets/spam/spam/00318.7ce7e3cbbf4fa9c30a67b7ecdda2342e @@ -0,0 +1,47 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Mon Sep 9 05:04:20 2002 +Return-Path: +Received: from lbrout12.listbuilder.com (lbrout12.listbuilder.com [204.71.191.16]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with SMTP id g89A4HE9013144 + for ; Mon, 9 Sep 2002 05:04:18 -0500 (CDT) +Received: (qmail 5390 invoked by uid 0); 9 Sep 2002 10:11:56 -0000 +Date: 9 Sep 2002 10:11:56 -0000 +Message-ID: <1031566316.99762.qmail@ech> +To: List Member +Reply-To: FIAZ-feedback-4@lb.bcentral.com +From: "Aleksandar Gligoric" +Subject: SPS se odrekao Slobodana Milosevica +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by lerami.lerctr.org id g89A4HE9013144 +X-Status: +X-Keywords: + + + Socijalisticka partija Srbije, predvodjena grupom starih socijalista na celu sa Milomirem Minicem, konacno se odrekla politike i herojskog drzanja predsednika te stranke Slobodana Milosevica, saopstenjima, da jedan ,,slabo obavesten covek ne moze, pogotovu ne iz zatvorske celije upravljati tako velikom partijom kao sto je Socijalisticka partija Srbije, pa zvao se on i Slobodan Milosevic''. + Socijalisti koji za sebe danas kazu da vise nisu idolopoklonici Slobodana Milosevica, neprestano, u kontaktima sa clanovima i simpatizerima te partije, pokusavaju da razdvoje odbranu Slobodana Milosevica u Hagu, od politickog zivota u Srbiji, pripisujuci Milosevicevim braniocima iz nacionalnog komiteta za oslobadjanje S. Milosevica, ,,Sloboda'' da im je cilj da uniste Socijalisticku partiju Srbije. + Iako je zbog istih takvih gledista, svojevremeno najpolularniji socijalista, posle predsednika te stranke, prof. Branislav Ivkovic bio iskljucen iz redova SPS, danas rukovodstvo SPS koristi jos teze i grublje kvalifikacije na racun njihovog predsednika, pritom ne strahujuci da bi bilo ko od njih mogao biti iskljucen iz partije. + Ne retko se poslednjih dana, u rokovodstvu partije cuje da partija nije Slobodan Milosevic, i da on ne predstvalja tu partiju, vec da su partija Rukovodstvo i Glavni odbor te stranke. + Medjutim u clanstvu i medju simpatizerima te stranke, stvari se ne odijaju bas po planovima rukovodstva. + Procene idu dotle da se na septembarskim izborima ocekuje da Bata Zivojinovic osvoji tek 1% glasova. Clanovi partije, najveci deo njih i danas veruje svom heroju, Slobodanu Milosevicu. + Po clanstvu partije, ovih dana u rukovodstvu partije, oni koji su predsednika te stranke pogresno informisali poslednjih godina, kada su shvatili da im je ,,odzvonilo'' pokusavaju da sacuvaju sebe eliminacijom predsednika Slobodana Milosevica. + Mladi socijalisti, kojih i nema bas mnogo, kako se SPS svojevremeno hvalio, izgleda su na strani predsednika te stranke. Tako se u nastupima na opstinskim odborima, mogu cuti uverljivi govori Dejana Stjepanovica i Igora Raicevica, i po neki Milinka Isakovica iz redova mladih socijalista, clanova organizaciono politickog odbora predsednika SPS. + Obracanja ovih mladih ljudi, medju clanstvom partije imaju do deset puta vecu tezuni, nego li obracanja profesionalnih politicara koji za sobom vuku teret proslosti. + Stav rukovodstva mladih socijalista, se razlikuje od stava saveta mladih, koji su takodje na strani predsednika. + Branko Ruzic i Dejan Backovic, svojevremeno najveci branioci i zastupnici lika i dela Slobodana Milosevica, danas su se pretvorili u njegove najvece kriticare. Pokusavaju na sve moguce nacine da minorizuju grupu mladih koja ga podrzava. + Cak se poslednjih dana cuje, da je najbolji recept da se rukovodstvo mladih odrzi ikao je protiv Sloba, da se povezu rodbinskim vezama, pa se tako predsednik mladih socijalista Beograda, Ana Djurovic udala za Branka Ruzica, predsednika Mladih socijalista Srbije, koji je za kuma uzeo Dejna Backovia, svog potpredsednika. Backovic se ovih dana zeni, jednom mladom socijalistkinjom koja je clan saveta mladih, a u isto vreme i sestra jednog od clanova IO GO SPS-a, za kuma uzima jos jednog mladog socijalistu iz Saveta mladih. Sve u svemu, mladi u SPS se drze kao italijanske mafijaske porodice 60-tih u SAD. + Sta ce se do kraja price dogoditi ostaje pitanje, no clanstvo i simpatizeri ce oceniti rad svog rukovodstva na predsednickim izborima. + Pimato se samo, sta ce da rade, ako im Bata prodje losije od Seselja koga je predsednik Slobodan Milosevic podrzao za predsednickog kandidat? + + + + + + + +_______________________________________________________________________ +Powered by List Builder +To unsubscribe follow the link: +http://lb.bcentral.com/ex/sp?c=15279&s=90B245569C3B981A&m=4 diff --git a/Ch3/datasets/spam/spam/00319.a99dff9c010e00ec182ed5701556d330 b/Ch3/datasets/spam/spam/00319.a99dff9c010e00ec182ed5701556d330 new file mode 100644 index 000000000..87111eb0c --- /dev/null +++ b/Ch3/datasets/spam/spam/00319.a99dff9c010e00ec182ed5701556d330 @@ -0,0 +1,100 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Mon Sep 9 12:21:16 2002 +Received: via dmail-2002(12) for +lists/freebsd/ports; Mon, 9 Sep 2002 12:21:16 -0500 (CDT) +Return-Path: +Received: from mx2.freebsd.org (mx2.FreeBSD.org [216.136.204.119]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g89HL3E9025108 + for ; Mon, 9 Sep 2002 12:21:04 -0500 (CDT) +Received: from hub.freebsd.org (hub.FreeBSD.org [216.136.204.18]) + by mx2.freebsd.org (Postfix) with ESMTP + id 8A8915576D; Mon, 9 Sep 2002 10:20:58 -0700 (PDT) + (envelope-from owner-freebsd-ports@FreeBSD.ORG) +Received: by hub.freebsd.org (Postfix, from userid 538) + id CA0F137B401; Mon, 9 Sep 2002 10:20:57 -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) + by hub.freebsd.org (Postfix) with SMTP + id B8A822E8017; Mon, 9 Sep 2002 10:20:57 -0700 (PDT) +Received: by hub.freebsd.org (bulk_mailer v1.12); Mon, 9 Sep 2002 10:20:57 -0700 +Delivered-To: freebsd-ports@freebsd.org +Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) + by hub.freebsd.org (Postfix) with ESMTP id EE6D037B400 + for ; Mon, 9 Sep 2002 10:20:54 -0700 (PDT) +Received: from sccrmhc01.attbi.com (sccrmhc01.attbi.com [204.127.202.61]) + by mx1.FreeBSD.org (Postfix) with ESMTP id 0657243E42 + for ; Mon, 9 Sep 2002 10:20:54 -0700 (PDT) + (envelope-from Books@Books@BlackRealityPublishing.com) +Received: from mccrary-8bnedo4 ([24.98.25.152]) by sccrmhc01.attbi.com + (InterMail vM.4.01.03.27 201-229-121-127-20010626) with SMTP + id <20020909172053.OAZA9751.sccrmhc01.attbi.com@mccrary-8bnedo4> + for ; Mon, 9 Sep 2002 17:20:53 +0000 +To: +From: <"Books@Books"@BlackRealityPublishing.com> +Subject: Free Excerpt; Baby Makers, Loser Choosers, & Welfare Abusers...Images of My America! +MIME-Version: 1.0 +Content-Type: text/plain; charset=unknown-8bit +Message-Id: <20020909172053.OAZA9751.sccrmhc01.attbi.com@mccrary-8bnedo4> +Date: Mon, 9 Sep 2002 17:20:53 +0000 +Sender: owner-freebsd-ports@FreeBSD.ORG +List-ID: +List-Archive: (Web Archive) +List-Help: (List Instructions) +List-Subscribe: +List-Unsubscribe: +X-Loop: FreeBSD.org +Precedence: bulk +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + + + Foreword + +After thirty?three years of being a black man living in "Ghetto America," an environment notorious for danger, crime, and poverty, I have made startling discoveries involving young African?American men and women who comprise what I have come to define as the "Black Generation X". I have become aware that there is no formal distinction separating young African?Americans from the general definition of "Generation X". Aside from it being regarded as the generation that followed "Baby Boomers", it's important to point out there is no root definition for this term as well. Since the theme of this work is centered on identifying the realities and misconceptions of young African?American culture, I have chosen a definition that incorporates all of the components that were part of my birth, childhood, and young adult life. Taken from a web site entitled "Generation X", created and maintained by the Colorado College, the definition is as follows: + + "We are a group of people born between 1961 and 1981. We are individuals who live for the 'here and now', like to experiment, and who require immediate results. We are typically selfish, and cynical, and depend a lot on our parents. We question authority, and feel like we carry the burden of the previous generations. It's that simple. It seems we have come to be called "Xer's" simply because we represent something negative to our elders. We may be the one thing all of the generations that precede us have in common, that is the ability to speak assuredly about our shortcomings. Of course, they overlook the fact that we are their responsibility, or actually their fault. Our generation will be called upon to look after our parents knowing they failed to look after us. Intergenerational justice failed somewhere along the way and it will be our task to either rectify it or make it worse." +"We are a group of individuals who grew up with no one at home after school. It appears we have little hope for the future. No jobs, no homes, and basically no money are almost expected of us. These bleak prospects, along with the fact that we will be forced to support the largest amount of senior citizens ever, do not provide much hope. Some believe that these blockades will be too much for us to handle and we will for the most part fail at life, but many see our individualism and resourcefulness that has been built up through our childhood, as our saviors. We will soon discover who is right and who is wrong." + +This definition is important because it demonstrates the widely held belief that Generation X is comprised of one core group of American citizens. It over generalizes the similarities it expresses, and applies them to all those who were born within the corresponding years. When in fact these "similarities" speak primarily to only "white" issues and concerns. For instance, "they" say "we" depend a lot on our parents, but in ghetto America "we" could only depend on one …our mothers! "They" also say, " . . .we feel like we carry the burden of previous generations," and " . . . we will be forced to support the largest amount of senior citizens ever." In ghetto America, no one ever gives these issues any thought because survival is in the here and now, and is all "we" have time for. +I have known for many years that the differences that separate Generation Xer's black and white occupants would eventually be identified. I never knew I would be the one doing it. Extracting the "Black" from "Generation X" and categorizing it for its own sake is a necessary and important contingency. Without doing so, the social ills that plague Ghetto America would be lost within the generalities that are explained away as part of a collective American identity. +There are many hidden truths that exist in black America today. "White America" charges that we spend our time collecting welfare, refusing to vote, reading elementary styled books, watching music videos, day dreaming of becoming rappers, basketball players, selling drugs, and making babies. Much of this is supported in Marlon Riggs's documentary entitled "Ethnic Notions." When African Americans are mentioned, whites typically envision an image that is strikingly similar to the one that graces the cover of this book. A reality that I confirmed while watching "Roger & Me," another documentary written, and directed by Michael Moore. Sadly, many of us have begun to validate this skewed image, while others bend over backwards in an attempt to pretend we do nothing of the kind, only to be contradicted and embarrassed when presented with the daily programming line up for B.E.T. (Black Entertainment Television). Many of us fail to realize, that whatever embarrassment or shame the ex + posed truth may reveal, should be taken as an opportunity to improve, empower, enlighten, and ultimately change anyone who is guilty of perpetrating this kind of behavior. +Regarding Black Women: I have known many in my life and although each has had unique attitudes and personalities, I began to notice the majority of them shared the same collective mentality toward black men as a whole-that black men owed them something, and are required to provide and fulfill what was missing from their lives, be it emotional, physical, or economical. + Normally that type of assertion would not warrant opposition from me, so long as a reciprocal attitude was extended. In most cases, it has not been. It's funny though, looking back, I am surprised I never paid any attention to the beliefs and attitudes that different black women subscribe to, or the various schools of thought they possessed. Many have placed strict demands and presumptions on the African?American male, some fair and some unfair. Much of what the public believes and understands about the black female's social structure is often filtered by others in the black community who believe these inaccurate and frequently positive representations will somehow change the reality that is. +What originally sparked my attention was an observation I stumbled upon while skimming through and reading books related to black male and female interaction. I noticed virtually all of the books I read in the genre depict an inaccurate and misleading concentration on the affluent African?American perspective. These stories and commentaries tend to suggest that all African?Americans thrive on a middle?to?upper class professional level. They relay stories of relationship problems with "Huxtable?like" bachelors and bachelorettes whose only concern is why the other has not confessed his or her love. As I read these stories I couldn't help but become irritated by the blatant omission of the prevailing majority of blue collar or "working class" African?Americans. Although there are those in the black community that can identify with the "Huxtable?like" dynamic, unfortunately, they are few and far between. +The majority of stories I have read seem to be geared toward fantasizing and romanticizing the oppressive state of affairs that have plagued Black America. The black authors who have written these books fear the potential backlash awaiting anyone who would dare air out our "dirty laundry". The fact is, truth should never be stifled by fear of any kind. +I recently had a candid conversation with some very dear female friends who stated that although they fully acknowledge the terrible state of affairs many of our women are currently drowning in, they felt that publicizing their predicament would be viewed as a form of betrayal. As our discussion intensified, I reminded them that the only way change can be effected is by increasing public awareness that change is needed, and oftentimes, not exposing the truth can be more crippling than the truth itself. +The purpose of my book is in essence an attempt to change the self?destructive thinking and self?imprisoning behavior that "black male and female generation X" have been subscribing to. While discussing this with my friend, she suggested I simplify my writing style so my potential black readers could better understand what I'm attempting to convey. Acknowledging the real possibility of my message being misunderstood, I suggest to those readers that if they want to fully appreciate the finer points of this narrative-to grab a dictionary. (Don't feel bad-there were several times I had to as well!) +Regarding Black Men: An overwhelming number of us have become preoccupied with being cool, buying sports wear, driving expensive cars, wearing gold or platinum jewelry, and often without legitimate personal wealth and while living under the most deplorable conditions! I have chosen to address this rarely acknowledged side of African?American culture because I have lived it. I have seen the chaos and futility that exists on this level. It is a world of ignorance, selfishness, pre?occupation, and idiocy. +In my world there are people who applaud a lack of education, who brag about having served time in U.S. penitentiaries, the types of guns they carry, dope peddling, and chasing women. They champion the notion of having children without any regard to the poor environment many of them currently inhabit. In this world, wearing expensive clothes and carrying fancy handbags is mandatory even if it means spending their last dollar in order to look like they've got a million. It's a world where children dress in over?priced sports wear, mimicking and idolizing whatever popular athlete or rapper is currently in the public eye. +Thinking, such as the belief that fancy clothes are what define one's self?worth, and the possible corruption this thinking breeds, seems to not be an important concern for black mothers. It may come as a shock to know that most African?Americans feel that those who don't have the same, if not better, material possessions, are lesser beings, referring to them as being corny, lame, or broke. Even our "male rapper" entertainers promote backward priorities-nothing else matters as long as you look good. "The Big Tymers", a popular rap duo, have a song called "I'm Still Fly", shown in heavy rotation on B.E.T. and played regularly on black radio stations throughout the country. ("Fly" is ghetto vernacular for well dressed, also used to describe a female's beauty). Its signature verse asserts: + +"I got gator boots with a pimped out Gucci +Suit, can't pay my rent cause all my money's +spent, but that's O.K. cause I'm still fly." + +Worse yet, in the song "Grinding", the popular duo "Eclipse" glorifies the selling of illegal drugs in inner city neighborhoods as children play and dance throughout the entire video. (The term "grinding" is ghetto vernacular for the selling of illegal drugs) The fact that this song and video is also shown in heavy rotation on B.E.T. is further evidence that our world is in utter turmoil. Some of the key lyrics to this song are "grinding…you know what I keep in the lining" (the area in their coats where they hide illegal drugs) and + +"Patty cake Patty cake I'm the bakers man +I bake them cakes as fast as I can +and you can tell cause of how my bread stack up +and I disguise it as rap so the feds backup" + +In this verse, the group refers to the process of cooking cocaine and its transformation into cocaine base or crack. When created it is compressed into the form of a large cookie with the average diameter being the size of a typical cake. (hence the term "cake" or sometimes "pie") Unfortunately for the rap genre, this song seems to strengthen the long standing argument posed by most whites that rap music is nothing more than an entertainment medium catering to violent drug offenders, who want and do nothing more than carry guns and break the law. +The negative references I've identified have become an integral part of the urban African?American existence. This mutated reality is ridiculous and unacceptable. This ideology should not be permitted to continue any longer than it already has. There is an overwhelming part of the African?American community that is aware of this crippling mentality. There are also many that are unaware and unfortunately, more that do not even care. Those of us who are in the know have a responsibility to educate and enlighten those of us who are not aware of the negative behavior being perpetrated daily. Whether because of habit or misguided values, this type of ideology is cyclical and thrives off of ignorance. It should be apparent to us all that we cannot wait for some other race to come and save us. We must save ourselves! I am well aware that many of you are probably furious by now, and are thinking, what right do I have to express the opinions I have thus far, as well as those I have al + luded too. +I have chosen to chronicle my experiences because of the diversity and seriousness of their content. There is far too much negativity thriving within our culture. There must be acknowledgment and accountability for the truth, whether good or bad. I am aware that not all of "us" have succumbed to the crippling mentality that is rampant in our community, and I have chosen to concentrate on individuals who have had a profound impact on my life. Any similarities and generalizations I illustrate are directed solely toward individuals in the black community who share the collective negative thinking and behavior that will hereafter be identified. +Additionally, throughout this book I will refer to African?Americans in four different ways; the first being "African?Americans", denoting our status as citizens in the United States; secondly, as "Black", a reference that identifies and defines our differences and struggles in this country; third, as "Niggas," a term which is often misunderstood and should not be confused with "Nigger". The term "nigga" has become an accepted form of reference among young black males used to express friendship (hence the term "My Nigga") as well as a blanket reference when speaking to, of, or about other black males in a non?personal manner. I felt it necessary to make this distinction because many of the experiences I will refer to mandate the use of the term to effectively communicate the attitude and mood that existed during the time each story took place; and fourth, as "Ghetto", this term is largely intended as an internal reference commonly understood by blacks as a means to define the + less polished members of our community. It is important to note that the use of either term has no negative connotation and is therefore not to be associated with any feeling as such. +My commentary is based on real?life situations, both good and bad, and how one African?American man was affected by them. To that end, I feel it is necessary to acknowledge that my intention is not to condemn the individuals I have encountered. Despite the negativity they have displayed, I only want to make them aware that the selfish and self debasing attitudes they subscribed to, in many ways, has caused them to become their own worst enemy. +In the case of the black female's negative and limited perspective toward black men, the world, and subconsciously themselves, I submit that this mentality is perhaps single?handedly responsible for the lack of success, happiness, and quality of life that is at the center of every African?American woman's fantasy quest. It is also important to note that the selfish and negative attitudes at the core of the tension that exists between black women and men, has been deliberately created by "White America". For example, much of the existing resentment between black women and men can be traced as far back as slavery on up to present day. Many past issues have taken on new identities and have re?emerged in the form of corporate acceptance of black women and the corporate exclusion of black men. The resulting economic independence that some black women now enjoy has caused them to challenge and judge the black man for his absence within corporate America, without realizing and ackno + wledging that this absence is by design. +There are other "core" issues that have been passed down and nurtured from generation to generation, such as color barriers, light skin versus dark skin, good hair versus bad hair, loyalty, devotion, and economic status. Believe it or not, there was once a time when black women refused to date a black man if he didn't sell drugs or was not "thugged out". (a term for being rough or hoodlum-like) The reasoning behind it being that the "thug," and "drug dealer" lifestyle was synonymous with financial independence. +These issues, among others, relate directly to the confused mentality that exists within our internal society. Sadly that "confused mentality" is responsible for much of the neglect the African American "ghetto" community receives at the hands of our more affluent brethren. Who have locked it away in the basement, and seems to be more concerned with convincing the rest of the world that "ghetto America does not exist. Furthermore, the lack of acknowledgement of which I speak should not be confused with the impoverished masses of the African American community. Their plight is a well-known reality, but in many cases much of ghetto America falls under that same umbrella. Be advised: this book is not a colorful or lighthearted look into "Black America". Rather it should be viewed as a legitimate tool for identifying and changing the backward thinking that so many young African Americans (including myself) have come to perpetuate. Moreover, that "backward thinking" is the main + cause of our inability to strive for a common goal. An outcome that must be met; and can only be met, with Godly faith, positive strategy, cooperation, love, loyalty, self and mutual respect. +************************************************************* + To read More go to www.blackrealitypublishing.com + + +To Unsubscribe: send mail to majordomo@FreeBSD.org +with "unsubscribe freebsd-ports" in the body of the message + diff --git a/Ch3/datasets/spam/spam/00320.20dcbb5b047b8e2f212ee78267ee27ad b/Ch3/datasets/spam/spam/00320.20dcbb5b047b8e2f212ee78267ee27ad new file mode 100644 index 000000000..95d6c3288 --- /dev/null +++ b/Ch3/datasets/spam/spam/00320.20dcbb5b047b8e2f212ee78267ee27ad @@ -0,0 +1,65 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Mon Sep 9 16:18:29 2002 +Received: via dmail-2002(12) for +lists/freebsd/bugs; Mon, 9 Sep 2002 16:18:29 -0500 (CDT) +Return-Path: +Received: from mx2.freebsd.org (mx2.FreeBSD.org [216.136.204.119]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g89LIIE9002193 + for ; Mon, 9 Sep 2002 16:18:20 -0500 (CDT) +Received: from hub.freebsd.org (hub.FreeBSD.org [216.136.204.18]) + by mx2.freebsd.org (Postfix) with ESMTP + id E3751559F2; Mon, 9 Sep 2002 14:18:13 -0700 (PDT) + (envelope-from owner-freebsd-bugs@FreeBSD.ORG) +Received: by hub.freebsd.org (Postfix, from userid 538) + id 6765737B40F; Mon, 9 Sep 2002 14:18:12 -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) + by hub.freebsd.org (Postfix) with SMTP + id 649DD2E8023; Mon, 9 Sep 2002 14:18:11 -0700 (PDT) +Received: by hub.freebsd.org (bulk_mailer v1.12); Mon, 9 Sep 2002 14:18:11 -0700 +Delivered-To: freebsd-bugs@freebsd.org +Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) + by hub.freebsd.org (Postfix) with ESMTP + id 7EC3537B400; Mon, 9 Sep 2002 14:18:04 -0700 (PDT) +Received: from mx2.alles.or.jp (mx2.alles.or.jp [210.231.151.88]) + by mx1.FreeBSD.org (Postfix) with ESMTP + id 0E0A143E42; Mon, 9 Sep 2002 14:18:03 -0700 (PDT) + (envelope-from sous1@aa.alles.or.jp) +Received: from B (p6044-ipad22marunouchi.tokyo.ocn.ne.jp [61.214.35.44]) + by mx2.alles.or.jp (8.9.3/3.7W/allesnet) with SMTP id GAA06604; + Tue, 10 Sep 2002 06:16:37 +0900 (JST) +Message-Id: <200209092116.GAA06604@mx2.alles.or.jp> +From: =?iso-2022-jp?B?c291czFAYWEuYWxsZXMub3IuanA=?=@mx2.alles.or.jp +To: =?iso-2022-jp?B?MTIx?=@mx2.alles.or.jp +Reply-To: sous1@aa.alles.or.jp +Date: Tue, 10 Sep 2002 06:16:46 +0900 +Subject: =?iso-2022-jp?B?GyRCJDckOCRfJEgkYiRiJE4lMyVpJVwlbCE8JTclZyVzGyhK?= +Content-Type: text/plain +Content-Transfer-Encoding: 7bit +MIME-Version: 1.0 +Sender: owner-freebsd-bugs@FreeBSD.ORG +List-ID: +List-Archive: (Web Archive) +List-Help: (List Instructions) +List-Subscribe: +List-Unsubscribe: +X-Loop: FreeBSD.org +Precedence: bulk +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +‚à‚à‚ª‚Í‚¶‚¯‚ĂԂǂ¤‚ª‚ä‚ê‚é +‚µ‚¶‚݂Ƃà‚à‚̃Rƒ‰ƒ{ƒŒ[ƒVƒ‡ƒ“ +ƒƒŠ[ƒ^ƒrƒfƒIi‚c‚u‚cjê–å +‚¢‚‚܂ʼnc‹Æ‚Å‚«‚é‚©‚í‚©‚è‚Ü‚¹‚ñ +‚²’•¶‚Í‚¨‘‚ß‚ÉI +http://book-i.net/mutou +ì•i—á +­—“`à@–¼ŒÃ‰®’c’n9@­—‚Ì“¹‘ +‚ȂǂȂÇ132ì•iBD•]”­”„’†I +(^-^)/~ƒƒŠ˜F—˜ƒ€ƒg[ + + + +To Unsubscribe: send mail to majordomo@FreeBSD.org +with "unsubscribe freebsd-bugs" in the body of the message + diff --git a/Ch3/datasets/spam/spam/00321.22ec127de780c31da00ae5e1c1aa32e4 b/Ch3/datasets/spam/spam/00321.22ec127de780c31da00ae5e1c1aa32e4 new file mode 100644 index 000000000..ace7014c6 --- /dev/null +++ b/Ch3/datasets/spam/spam/00321.22ec127de780c31da00ae5e1c1aa32e4 @@ -0,0 +1,96 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Tue Sep 10 01:55:33 2002 +Return-Path: +Received: from 360cn.com ([218.14.40.192]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with SMTP id g8A6tRE9015786 + for ; Tue, 10 Sep 2002 01:55:29 -0500 (CDT) +Received: (qmail 12076 invoked from network); 8 Sep 2002 14:31:20 -0000 +Received: from unknown (HELO xiongyan) (epost@360cn.com@192.168.0.19) + by 0 with SMTP; 8 Sep 2002 14:31:20 -0000 +Message-ID: <902742.1031493857403.JavaMail.administrator@xiongyan> +Date: Sun, 8 Sep 2002 22:04:17 +0800 (CST) +From: epost@360cn.com +To: ler@lerctr.org +Subject: Ou Wei Lighting,Nights Will Be Lightening! +Mime-Version: 1.0 +Content-Type: text/html +Content-Transfer-Encoding: quoted-printable +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + + + + +Untitled Document + + + + + +Ou Wei Lighting, Nights Will Be Lightening!!! +


    + =D6=D0=C9=BD=CA=D0=C5=B7=CD=FE=D5=D5=C3=F7=C6=F7=B2=C4=B3=A7
    + =B9=AB=CB=BE=BC=F2=BD=E9=A3=BA

    +

    =CE=BB=D3=DA=B9=E3=B6=AB=D6=D0=C9=BD=B9=C5=D5=F2=B5=C4=C5=B7=CD=FE=D5=D5= +=C3=F7=C6=F7=B2=C4=B3=A7=B3=C9=C1=A2=D3=DA=D2=BB=BE=C5=BE=C5=C1=F9=C4=EA=A3= +=AC=C5=B7=CD=FE=D2=BB=D6=B1=D6=C2=C1=A6=D3=DA=C7=B6=A3=A8=CD=B2=A3=A9=B5=C6= +=A1=A2=CD=B6=C9=E4=B5=C6=A1=A2=B9=A4=B3=CC=D3=C3=B5=C6=B5=C4=BF=AA=B7=A2=BA= +=CD=C9=FA=B2=FA=A1=A3

    +

    =B2=FA=C6=B7=BC=F2=BD=E9=A3=BA

    +

    =B2=FA=C6=B7=D6=D6=C0=E0=D3=D0=A3=BA =CD=B6=C9=E4=B5=C6=CF=B5=C1=D0=A1= +=A1=A3=AC=B5=F5=B5=C6=A1=A2=CE=FC=B6=A5=B5=C6=CF=B5=C1=D0 =BA=CD=A1=A1=C7= +=B6=B5=C6=CF=B5=C1=D0=A3=AC

    +

    =B2=FA=C6=B7=CC=D8=B5=E3=CE=AA=A3=BA=D7=A8=D2=B5=BB=AF=A3=AC=CF=B5=C1=D0= +=BB=AF

    +

    =B2=FA=C6=B7=CA=CA=D3=C3=D3=DA=A3=BA=C9=CC=B3=A1=A3=AC=BE=C6=B5=EA=A1=A2= +=D0=B4=D7=D6=C2=A5=A1=A2=BE=D3=CA=D2=BA=CD=B9=A4=B3=CC=D5=D5=C3=F7=A1=A3 +


    + =C6=DA=CD=FB=C4=FA=B5=C4=BB=DD=B9=CB=D3=EB=BA=CF=D7=F7=A3=AC=CF=EA=CF=B8= +=D0=C5=CF=A2=A3=AC=BB=B6=D3=AD=C4=FA=E4=AF=C0=C0=CE=D2=C3=C7=B5=C4=CD=F8=D5= +=BE=A3=A8
    http://= +www.ouweilighting.com=20 + =A3=A9=A3=AC=BB=F2=D5=DF=D2=D4=CF=C2=C1=D0=B7=BD=CA=BD=D3=EB=CE=D2=C3=C7= +=C8=A1=B5=C3=C1=AA=CF=B5=A3=BA

    +

    =B5=E7=BB=B0:0760-2312136

    +

    =B4=AB=D5=E6:0760-2317010

    +

    Email:ouwei@ouweilighting.com

    +

    =B5=D8=D6=B7:=B9=E3=B6=AB=D6=D0=C9=BD=B9=C5=D5=F2=BA=A3=D6=DE=CA=A4=C0= +=FB=B5=C6=CA=CE=B3=C7=A1=A1

    +

    =D0=BB=D0=BB=A3=A1

    +

    =D7=A3 =C9=CC=EC=F7=A3=A1=A3=A1

    +

    OU WEI LIGHTING, NIGHTS WILL BE LIGHTENED=A3=A1

    +

    Brief Introduction

    +

    Since founded in 1996, Ou Wei lighting Co.,ltd. has succeed in manufactu= +ring=20 + the Projection Lighting, Ceiling&Hanging Lighting, Inlaid Lighting. T= +he=20 + products have stepped to professionalizing and seriesing development , ap= +plying=20 + to the lighting of the markets, hotels, office buildings, house rooms=A3= +=ACengineerings=20 + and projects.

    +

    We are expecting your cooperation and trade, and welcome to our homepage= + (www.ouweilighting.com)=20 + or contact us by:

    +

    Tel: 0760-2312136

    +

    Fax:0760-2317010

    +

    Add: Sen Li lighting city, Haizhou Guzhen, Zhongshan, Guangdong=A1=A1 +

    Email:ouwei@ouweilighting.com= +

    +

    Thank you a lot!

    +

    =D6=D0=C9=BD=CA=D0=C5=B7=CD=FE=D5=D5=C3=F7=C6=F7=B2=C4=B3=A7

    +

    OU WEI LIGHTING CO., LTD.

    +
    + +=09=09=09=09 =20 + +=09=09=09=09
    + + diff --git a/Ch3/datasets/spam/spam/00322.7d39d31fb7aad32c15dff84c14019b8c b/Ch3/datasets/spam/spam/00322.7d39d31fb7aad32c15dff84c14019b8c new file mode 100644 index 000000000..9156890ab --- /dev/null +++ b/Ch3/datasets/spam/spam/00322.7d39d31fb7aad32c15dff84c14019b8c @@ -0,0 +1,215 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Tue Sep 10 02:10:07 2002 +Return-Path: +Received: from 360cn.com ([218.14.40.192]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with SMTP id g8A79xE9017506 + for ; Tue, 10 Sep 2002 02:10:02 -0500 (CDT) +Received: (qmail 11821 invoked from network); 8 Sep 2002 13:28:15 -0000 +Received: from unknown (HELO xiongyan) (epost@360cn.com@192.168.0.19) + by 0 with SMTP; 8 Sep 2002 13:28:15 -0000 +Message-ID: <1163196.1031491218829.JavaMail.administrator@xiongyan> +Date: Sun, 8 Sep 2002 21:20:18 +0800 (CST) +From: epost@360cn.com +To: ler@lerctr.org +Subject: =?GBK?B?U3VuZnJvbSBsaWdodGluZyDE+rXEwvrS4srHztLDx9e3x/O1xMS/seo=?= +Mime-Version: 1.0 +Content-Type: text/html +Content-Transfer-Encoding: quoted-printable +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + + + + +Sunfrom lighting + + + + + + + + + + +
    =20 + + + + + +

    + =A1=A1WEBSITE:

    + =A1=A1 www.chinalightingmarket.com
    + + + + +
    =20 + + =20 + + + + +
    =20 + + =20 + + + + =20 + + =20 + + + =20 + + +
    + +
    +
    + + + + + + +
     
    =20 + + =20 + + +
    =20 + + =20 + + +
    =20 +

    =20 +

    +
    +
    +
    +
    + + =20 + + + + + =20 + + + =20 + + +
    + +

    +
    =20 + + =20 + + +
    TEL:= + 00-86-760-2345350=20 + FAX: 00-86-760-2345350
    + MOBILE :(00-86) 13703047547 MR. DAVID

    + E-MAIL:=20 + sunfrom@chinalightingmarket.com
    + ADD: ROOM401, NO.19,XINXINGZHONGROAD,= + GUZHEN,=20 + ZHONGSHAN, GUANGDONG, CHINA
    + =20 +
     
    +=09=09
    =20 + + +
    +
    =20 + +=09=09=09
    +=09=09 power=20 + by 360cn.com=A1=A1
    + + + + + + + + + + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00323.9e36bf05304c99f2133a4c03c49533a9 b/Ch3/datasets/spam/spam/00323.9e36bf05304c99f2133a4c03c49533a9 new file mode 100644 index 000000000..cbea259ed --- /dev/null +++ b/Ch3/datasets/spam/spam/00323.9e36bf05304c99f2133a4c03c49533a9 @@ -0,0 +1,62 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Mon Sep 9 23:57:58 2002 +Received: via dmail-2002(12) for +lists/freebsd/ports; Mon, 9 Sep 2002 23:57:58 -0500 (CDT) +Return-Path: +Received: from mx2.freebsd.org (mx2.FreeBSD.org [216.136.204.119]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g8A4vnE9027838 + for ; Mon, 9 Sep 2002 23:57:51 -0500 (CDT) +Received: from hub.freebsd.org (hub.FreeBSD.org [216.136.204.18]) + by mx2.freebsd.org (Postfix) with ESMTP + id 113745547D; Mon, 9 Sep 2002 21:57:44 -0700 (PDT) + (envelope-from owner-freebsd-ports@FreeBSD.ORG) +Received: by hub.freebsd.org (Postfix, from userid 538) + id 1112037B401; Mon, 9 Sep 2002 21:57:43 -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) + by hub.freebsd.org (Postfix) with SMTP + id 0034B2E800B; Mon, 9 Sep 2002 21:57:42 -0700 (PDT) +Received: by hub.freebsd.org (bulk_mailer v1.12); Mon, 9 Sep 2002 21:57:42 -0700 +Delivered-To: freebsd-ports@freebsd.org +Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) + by hub.freebsd.org (Postfix) with ESMTP id F2E7937B400 + for ; Mon, 9 Sep 2002 21:57:41 -0700 (PDT) +Received: from mail10.m.freebit.net (mail12.m.FreeBit.NET [210.143.144.137]) + by mx1.FreeBSD.org (Postfix) with ESMTP id 4D69943E4A + for ; Mon, 9 Sep 2002 21:57:41 -0700 (PDT) + (envelope-from rite1@reset.jp) +Received: from D (p6044-ipad22marunouchi.tokyo.ocn.ne.jp [61.214.35.44]) by mail10.m.freebit.net (Sun Internet Mail Server sims.4.0.2001.07.26.11.50.p9) with SMTP id <0H2700H6ZGMBNC@mail10.m.freebit.net> for ports@freebsd.org; Tue, 10 Sep 2002 13:38:21 +0900 (JST) +Date: Tue, 10 Sep 2002 13:38:32 +0900 +From: =?iso-2022-jp?B?cml0ZTFAcmVzZXQuanA=?=@p6044-ipad22marunouchi.tokyo.ocn.ne.jp +Subject: =?iso-2022-jp?B?GyRCJDckOCRfJEgkYiRiJE4lMyVpJVwlbCE8JTclZyVzGyhK?= +To: =?iso-2022-jp?B?MTIx?=@p6044-ipad22marunouchi.tokyo.ocn.ne.jp +Reply-To: rite1@reset.jp +Message-id: <0H2700HY8GVUNC@mail10.m.freebit.net> +MIME-version: 1.0 +Content-type: text/plain +Content-transfer-encoding: 8BIT +Sender: owner-freebsd-ports@FreeBSD.ORG +List-ID: +List-Archive: (Web Archive) +List-Help: (List Instructions) +List-Subscribe: +List-Unsubscribe: +X-Loop: FreeBSD.org +Precedence: bulk +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +‚à‚à‚ª‚Í‚¶‚¯‚ĂԂǂ¤‚ª‚ä‚ê‚é +‚µ‚¶‚݂Ƃà‚à‚̃Rƒ‰ƒ{ƒŒ[ƒVƒ‡ƒ“ +ƒƒŠ[ƒ^ƒrƒfƒIi‚c‚u‚cjê–å +‚¢‚‚܂ʼnc‹Æ‚Å‚«‚é‚©‚í‚©‚è‚Ü‚¹‚ñ +‚²’•¶‚Í‚¨‘‚ß‚ÉI +http://book-i.net/mutou +ì•i—á +­—“`à@–¼ŒÃ‰®’c’n9@­—‚Ì“¹‘ +‚ȂǂȂÇ132ì•iBD•]”­”„’†I +(^-^)/~ƒƒŠ˜F—˜ƒ€ƒg[ + + +To Unsubscribe: send mail to majordomo@FreeBSD.org +with "unsubscribe freebsd-ports" in the body of the message + diff --git a/Ch3/datasets/spam/spam/00324.6f320a8c6b5f8e4bc47d475b3d4e86ef b/Ch3/datasets/spam/spam/00324.6f320a8c6b5f8e4bc47d475b3d4e86ef new file mode 100644 index 000000000..889ec5c22 --- /dev/null +++ b/Ch3/datasets/spam/spam/00324.6f320a8c6b5f8e4bc47d475b3d4e86ef @@ -0,0 +1,62 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Tue Sep 10 00:35:47 2002 +Received: via dmail-2002(12) for +lists/freebsd/questions; Tue, 10 Sep 2002 00:35:47 -0500 (CDT) +Return-Path: +Received: from mx2.freebsd.org (mx2.FreeBSD.org [216.136.204.119]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g8A5ZaE9004346 + for ; Tue, 10 Sep 2002 00:35:37 -0500 (CDT) +Received: from hub.freebsd.org (hub.FreeBSD.org [216.136.204.18]) + by mx2.freebsd.org (Postfix) with ESMTP + id A93A855610; Mon, 9 Sep 2002 22:35:28 -0700 (PDT) + (envelope-from owner-freebsd-questions@FreeBSD.ORG) +Received: by hub.freebsd.org (Postfix, from userid 538) + id 4467C37B401; Mon, 9 Sep 2002 22:35:27 -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) + by hub.freebsd.org (Postfix) with SMTP + id 1E30F2E800B; Mon, 9 Sep 2002 22:35:27 -0700 (PDT) +Received: by hub.freebsd.org (bulk_mailer v1.12); Mon, 9 Sep 2002 22:35:27 -0700 +Delivered-To: freebsd-questions@freebsd.org +Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) + by hub.freebsd.org (Postfix) with ESMTP id 1F10337B400 + for ; Mon, 9 Sep 2002 22:35:26 -0700 (PDT) +Received: from mail10.m.freebit.net (mail12.m.FreeBit.NET [210.143.144.137]) + by mx1.FreeBSD.org (Postfix) with ESMTP id 497F343E6A + for ; Mon, 9 Sep 2002 22:35:25 -0700 (PDT) + (envelope-from rite1@reset.jp) +Received: from D (p6044-ipad22marunouchi.tokyo.ocn.ne.jp [61.214.35.44]) by mail10.m.freebit.net (Sun Internet Mail Server sims.4.0.2001.07.26.11.50.p9) with SMTP id <0H2700ITXIN2Z2@mail10.m.freebit.net> for questions@FreeBSD.ORG; Tue, 10 Sep 2002 14:20:05 +0900 (JST) +Date: Tue, 10 Sep 2002 14:20:15 +0900 +From: =?iso-2022-jp?B?cml0ZTFAcmVzZXQuanA=?=@p6044-ipad22marunouchi.tokyo.ocn.ne.jp +Subject: =?iso-2022-jp?B?GyRCJDckOCRfJEgkYiRiJE4lMyVpJVwlbCE8JTclZyVzGyhK?= +To: =?iso-2022-jp?B?MTIx?=@p6044-ipad22marunouchi.tokyo.ocn.ne.jp +Reply-To: rite1@reset.jp +Message-id: <0H2700IFQITEZ2@mail10.m.freebit.net> +MIME-version: 1.0 +Content-type: text/plain +Content-transfer-encoding: 8BIT +Sender: owner-freebsd-questions@FreeBSD.ORG +List-ID: +List-Archive: (Web Archive) +List-Help: (List Instructions) +List-Subscribe: +List-Unsubscribe: +X-Loop: FreeBSD.ORG +Precedence: bulk +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +‚à‚à‚ª‚Í‚¶‚¯‚ĂԂǂ¤‚ª‚ä‚ê‚é +‚µ‚¶‚݂Ƃà‚à‚̃Rƒ‰ƒ{ƒŒ[ƒVƒ‡ƒ“ +ƒƒŠ[ƒ^ƒrƒfƒIi‚c‚u‚cjê–å +‚¢‚‚܂ʼnc‹Æ‚Å‚«‚é‚©‚í‚©‚è‚Ü‚¹‚ñ +‚²’•¶‚Í‚¨‘‚ß‚ÉI +http://book-i.net/mutou +ì•i—á +­—“`à@–¼ŒÃ‰®’c’n9@­—‚Ì“¹‘ +‚ȂǂȂÇ132ì•iBD•]”­”„’†I +(^-^)/~ƒƒŠ˜F—˜ƒ€ƒg[ + + +To Unsubscribe: send mail to majordomo@FreeBSD.org +with "unsubscribe freebsd-questions" in the body of the message + diff --git a/Ch3/datasets/spam/spam/00325.58d1a52f435030dc38568bc12a3d76a2 b/Ch3/datasets/spam/spam/00325.58d1a52f435030dc38568bc12a3d76a2 new file mode 100644 index 000000000..c3dccc088 --- /dev/null +++ b/Ch3/datasets/spam/spam/00325.58d1a52f435030dc38568bc12a3d76a2 @@ -0,0 +1,49 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Tue Sep 10 13:50:24 2002 +Return-Path: +Received: from kfep08.dion.ne.jp (kfep08.dion.ne.jp [203.181.105.170]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g8AIoIE9009932 + for ; Tue, 10 Sep 2002 13:50:21 -0500 (CDT) +Received: from access-w5961wae ([211.5.54.44]) by kfep08.dion.ne.jp + with SMTP id <20020910185004624.FXO@kfep08.dion.ne.jp> + for ; Wed, 11 Sep 2002 03:50:04 +0900 +To: ler@lerctr.org +X-Mailer: Easy DM free +Message-ID: <20020910.1852360941@vip-99-81.com> +Date: Wed, 11 Sep 2002 03:52:37 +0900 +From: Vip-mail +Subject: =?ISO-2022-JP?B?GyRCTCQ+NUJ6OS05cCIoPF5HLiEqPVAycSQkJE45LT5sGyhC?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-2022-JP +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +<$B;v6H +$B;aL>(B:Vip-mail +$BFMA3$N%a!<%k<:Ni$$$?$7$^$9!#(B +$B:#8e$3$N9-9p$,$4ITMW$JJ}$O$=$N;]$r(B +stop-vip@e-project-web.com +$B$^$G$*Aw$j2<$5$$!#(B + +$B!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y(B +$B"v%j%C%A$J=P2q$$$O(BVip-mail$B$G"v(B +Vip-mail$B$,%O%$%/%i%9$J=P2q$$$r%W%l%<%s%H!y(B +$B7HBS(B3$B%-%c%j%"$H(BPC$BBP1~$N=P2q$$%5%$%H"v(B +$B:#$^$G$N=P2q$$%5%$%H$KK0$-$??M(B! +$B=P2q$$$OM_$7$$$1$I%5%$%H$r;H$&$N$O$HLB$C$F$k?M(B! +$B:#D>$0(BVip-mail$B$K(BGo!!!!! +http://www.vip-jp.net/?sid=2 +$B=w@-L5NA$OEv$?$jA0(B!? +$BCK@-$K$O$*;n$7%]%$%s%H(B50pt$B%W%l%<%s%H!y(B +$B=w@-$O%j%C%A$JCK@-$r(BGET$B$7$h$&(Bo($B!f"`!e(B)o +$BCK@-$O$*;n$7%]%$%s%H5$$KF~$C$?L<$r8+$D$1$h$&(B($B"`!c(B)b +$B=P2q$$$r5a$a$k$J$i(BVip-mail$B$K:#D>$0%"%/%;%9(B +$B"-"-"-"-"-"-"-"-"-"-"-"-"-"-(B +http://www.vip-jp.net/?sid=2 +$B!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y(B + +$BFMA3$N%a!<%k<:Ni$$$?$7$^$7$?!#(B +$B:#8e$3$N9-9p$,$4ITMW$JJ}!"G[?.Dd;_$r4uK>$5$l$kJ}$O$=$N;]$r(B +stop-vip@e-project-web.com +$B$^$G$*Aw$j2<$5$$(B diff --git a/Ch3/datasets/spam/spam/00326.5ec68244bb085cb140deb79563abd7b3 b/Ch3/datasets/spam/spam/00326.5ec68244bb085cb140deb79563abd7b3 new file mode 100644 index 000000000..a38aaed50 --- /dev/null +++ b/Ch3/datasets/spam/spam/00326.5ec68244bb085cb140deb79563abd7b3 @@ -0,0 +1,62 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Tue Sep 10 13:57:02 2002 +Return-Path: +Received: from mx6.airmail.net from [209.196.77.103] by mail5.airmail.net + (/\##/\ Smail3.1.30.16 #30.56) with esmtp for sender: + id ; Tue, 10 Sep 2002 + 13:53:50 -0500 (CDT) +Received: from mail.black-ring.iadfw.net ([209.196.123.141] + helo=mail.airmail.net) by mx6.airmail.net with smtp (Exim 4.10) id + 17oq5S-0001TE-00 for ler@209.196.123.6; Tue, 10 Sep 2002 13:50:10 -0500 +Received: from mx4.airmail.net from [209.196.77.101] by mail.airmail.net + (/\##/\ Smail3.1.30.16 #30.56) with esmtp for sender: + id ; Tue, 10 Sep 2002 + 13:49:58 -0500 (CDT) +Received: from kfep08.dion.ne.jp ([203.181.105.170]) by mx4.airmail.net + with esmtp (Exim 4.10) id 17oq5G-00091a-00 for ler@airmail.net; Tue, 10 Sep + 2002 13:49:58 -0500 +Received: from access-w5961wae ([211.5.54.44]) by kfep08.dion.ne.jp with + SMTP id <20020910184956724.FWT@kfep08.dion.ne.jp> for ; + Wed, 11 Sep 2002 03:49:56 +0900 +To: ler@airmail.net +X-Mailer: Easy DM free +Message-ID: <20020910.1852290040@vip-99-81.com> +Date: Wed, 11 Sep 2002 03:52:29 +0900 +From: Vip-mail +Subject: =?ISO-2022-JP?B?GyRCTCQ+NUJ6OS05cCIoPF5HLiEqPVAycSQkJE45LT5sGyhC?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-2022-JP +X-Airmail-Delivered: Tue, 10 Sep 2002 13:54:02 -0500 (CDT) +X-Airmail-Spooled: Tue, 10 Sep 2002 13:53:50 -0500 (CDT) +X-Evolution-Source: imap://ler@mail.airmail.net:14343/ +X-Status: +X-Keywords: + +<$B;v6H +$B;aL>(B:Vip-mail +$BFMA3$N%a!<%k<:Ni$$$?$7$^$9!#(B +$B:#8e$3$N9-9p$,$4ITMW$JJ}$O$=$N;]$r(B +stop-vip@e-project-web.com +$B$^$G$*Aw$j2<$5$$!#(B + +$B!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y(B +$B"v%j%C%A$J=P2q$$$O(BVip-mail$B$G"v(B +Vip-mail$B$,%O%$%/%i%9$J=P2q$$$r%W%l%<%s%H!y(B +$B7HBS(B3$B%-%c%j%"$H(BPC$BBP1~$N=P2q$$%5%$%H"v(B +$B:#$^$G$N=P2q$$%5%$%H$KK0$-$??M(B! +$B=P2q$$$OM_$7$$$1$I%5%$%H$r;H$&$N$O$HLB$C$F$k?M(B! +$B:#D>$0(BVip-mail$B$K(BGo!!!!! +http://www.vip-jp.net/?sid=2 +$B=w@-L5NA$OEv$?$jA0(B!? +$BCK@-$K$O$*;n$7%]%$%s%H(B50pt$B%W%l%<%s%H!y(B +$B=w@-$O%j%C%A$JCK@-$r(BGET$B$7$h$&(Bo($B!f"`!e(B)o +$BCK@-$O$*;n$7%]%$%s%H5$$KF~$C$?L<$r8+$D$1$h$&(B($B"`!c(B)b +$B=P2q$$$r5a$a$k$J$i(BVip-mail$B$K:#D>$0%"%/%;%9(B +$B"-"-"-"-"-"-"-"-"-"-"-"-"-"-(B +http://www.vip-jp.net/?sid=2 +$B!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y(B + +$BFMA3$N%a!<%k<:Ni$$$?$7$^$7$?!#(B +$B:#8e$3$N9-9p$,$4ITMW$JJ}!"G[?.Dd;_$r4uK>$5$l$kJ}$O$=$N;]$r(B +stop-vip@e-project-web.com +$B$^$G$*Aw$j2<$5$$(B diff --git a/Ch3/datasets/spam/spam/00327.7f21bc8575786a0e00341a6407b9f286 b/Ch3/datasets/spam/spam/00327.7f21bc8575786a0e00341a6407b9f286 new file mode 100644 index 000000000..0e1655d91 --- /dev/null +++ b/Ch3/datasets/spam/spam/00327.7f21bc8575786a0e00341a6407b9f286 @@ -0,0 +1,66 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Tue Sep 10 13:57:03 2002 +Return-Path: +Received: from mx7.airmail.net from [209.196.77.104] by mail5.airmail.net + (/\##/\ Smail3.1.30.16 #30.56) with esmtp for sender: + id ; Tue, 10 Sep 2002 + 13:53:58 -0500 (CDT) +Received: from mail.black-ring.iadfw.net ([209.196.123.141] + helo=mail.airmail.net) by mx7.airmail.net with smtp (Exim 4.10) id + 17oq5b-0000uj-00 for ler@209.196.123.6; Tue, 10 Sep 2002 13:50:19 -0500 +Received: from mx2.airmail.net from [209.196.77.99] by mail.airmail.net + (/\##/\ Smail3.1.30.16 #30.56) with esmtp for sender: + id ; Tue, 10 Sep 2002 + 13:50:12 -0500 (CDT) +Received: from tide.iadfw.net ([206.66.12.73]) by mx2.airmail.net with + esmtp (Exim 4.10) id 17oq5U-000CMa-00 for ler@airmail.net; Tue, 10 Sep 2002 + 13:50:12 -0500 +Received: from kfep01.dion.ne.jp (kfep01.dion.ne.jp [203.181.105.163]) by + tide.iadfw.net (8.11.6/8.11.6) with ESMTP id g8AIoAw33413 for + ; Tue, 10 Sep 2002 13:50:11 -0500 (CDT) (envelope-from + vip@99-81.com) +Received: from access-w5961wae ([211.5.54.44]) by kfep01.dion.ne.jp with + SMTP id <20020910185009556.VVSY@kfep01.dion.ne.jp> for + ; Wed, 11 Sep 2002 03:50:09 +0900 +To: ler@tide.iadfw.net +X-Mailer: Easy DM free +Message-ID: <20020910.1852410828@vip-99-81.com> +Date: Wed, 11 Sep 2002 03:52:42 +0900 +From: Vip-mail +Subject: =?ISO-2022-JP?B?GyRCTCQ+NUJ6OS05cCIoPF5HLiEqPVAycSQkJE45LT5sGyhC?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-2022-JP +X-Airmail-Delivered: Tue, 10 Sep 2002 13:54:10 -0500 (CDT) +X-Airmail-Spooled: Tue, 10 Sep 2002 13:53:58 -0500 (CDT) +X-Evolution-Source: imap://ler@mail.airmail.net:14343/ +X-Status: +X-Keywords: + +<$B;v6H +$B;aL>(B:Vip-mail +$BFMA3$N%a!<%k<:Ni$$$?$7$^$9!#(B +$B:#8e$3$N9-9p$,$4ITMW$JJ}$O$=$N;]$r(B +stop-vip@e-project-web.com +$B$^$G$*Aw$j2<$5$$!#(B + +$B!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y(B +$B"v%j%C%A$J=P2q$$$O(BVip-mail$B$G"v(B +Vip-mail$B$,%O%$%/%i%9$J=P2q$$$r%W%l%<%s%H!y(B +$B7HBS(B3$B%-%c%j%"$H(BPC$BBP1~$N=P2q$$%5%$%H"v(B +$B:#$^$G$N=P2q$$%5%$%H$KK0$-$??M(B! +$B=P2q$$$OM_$7$$$1$I%5%$%H$r;H$&$N$O$HLB$C$F$k?M(B! +$B:#D>$0(BVip-mail$B$K(BGo!!!!! +http://www.vip-jp.net/?sid=2 +$B=w@-L5NA$OEv$?$jA0(B!? +$BCK@-$K$O$*;n$7%]%$%s%H(B50pt$B%W%l%<%s%H!y(B +$B=w@-$O%j%C%A$JCK@-$r(BGET$B$7$h$&(Bo($B!f"`!e(B)o +$BCK@-$O$*;n$7%]%$%s%H5$$KF~$C$?L<$r8+$D$1$h$&(B($B"`!c(B)b +$B=P2q$$$r5a$a$k$J$i(BVip-mail$B$K:#D>$0%"%/%;%9(B +$B"-"-"-"-"-"-"-"-"-"-"-"-"-"-(B +http://www.vip-jp.net/?sid=2 +$B!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y!z!y(B + +$BFMA3$N%a!<%k<:Ni$$$?$7$^$7$?!#(B +$B:#8e$3$N9-9p$,$4ITMW$JJ}!"G[?.Dd;_$r4uK>$5$l$kJ}$O$=$N;]$r(B +stop-vip@e-project-web.com +$B$^$G$*Aw$j2<$5$$(B diff --git a/Ch3/datasets/spam/spam/00328.73c1a9f83d3b1247522c26eb6d74c215 b/Ch3/datasets/spam/spam/00328.73c1a9f83d3b1247522c26eb6d74c215 new file mode 100644 index 000000000..5428e2fb0 --- /dev/null +++ b/Ch3/datasets/spam/spam/00328.73c1a9f83d3b1247522c26eb6d74c215 @@ -0,0 +1,47 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Wed Sep 11 03:25:27 2002 +Return-Path: +Received: from lbrout13.listbuilder.com (lbrout13.listbuilder.com [204.71.191.17]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with SMTP id g8B8POE9005100 + for ; Wed, 11 Sep 2002 03:25:25 -0500 (CDT) +Received: (qmail 16858 invoked by uid 0); 11 Sep 2002 08:33:28 -0000 +Date: 11 Sep 2002 08:33:28 -0000 +Message-ID: <1031733208.2310.qmail@ech> +To: List Member +Reply-To: FIAZ-feedback-5@lb.bcentral.com +From: "ContraComm International" +Subject: SPS se odrekao Slobodana Milosevica +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by lerami.lerctr.org id g8B8POE9005100 +X-Status: +X-Keywords: + + + Socijalisticka partija Srbije, predvodjena grupom starih socijalista na celu sa Milomirem Minicem, konacno se odrekla politike i herojskog drzanja predsednika te stranke Slobodana Milosevica, saopstenjima, da jedan ,,slabo obavesten covek ne moze, pogotovu ne iz zatvorske celije upravljati tako velikom partijom kao sto je Socijalisticka partija Srbije, pa zvao se on i Slobodan Milosevic''. + Socijalisti koji za sebe danas kazu da vise nisu idolopoklonici Slobodana Milosevica, neprestano, u kontaktima sa clanovima i simpatizerima te partije, pokusavaju da razdvoje odbranu Slobodana Milosevica u Hagu, od politickog zivota u Srbiji, pripisujuci Milosevicevim braniocima iz nacionalnog komiteta za oslobadjanje S. Milosevica, ,,Sloboda'' da im je cilj da uniste Socijalisticku partiju Srbije. + Iako je zbog istih takvih gledista, svojevremeno najpolularniji socijalista, posle predsednika te stranke, prof. Branislav Ivkovic bio iskljucen iz redova SPS, danas rukovodstvo SPS koristi jos teze i grublje kvalifikacije na racun njihovog predsednika, pritom ne strahujuci da bi bilo ko od njih mogao biti iskljucen iz partije. + Ne retko se poslednjih dana, u rokovodstvu partije cuje da partija nije Slobodan Milosevic, i da on ne predstvalja tu partiju, vec da su partija Rukovodstvo i Glavni odbor te stranke. + Medjutim u clanstvu i medju simpatizerima te stranke, stvari se ne odijaju bas po planovima rukovodstva. + Procene idu dotle da se na septembarskim izborima ocekuje da Bata Zivojinovic osvoji tek 1% glasova. Clanovi partije, najveci deo njih i danas veruje svom heroju, Slobodanu Milosevicu. + Po clanstvu partije, ovih dana u rukovodstvu partije, oni koji su predsednika te stranke pogresno informisali poslednjih godina, kada su shvatili da im je ,,odzvonilo'' pokusavaju da sacuvaju sebe eliminacijom predsednika Slobodana Milosevica. + Mladi socijalisti, kojih i nema bas mnogo, kako se SPS svojevremeno hvalio, izgleda su na strani predsednika te stranke. Tako se u nastupima na opstinskim odborima, mogu cuti uverljivi govori Dejana Stjepanovica i Igora Raicevica, i po neki Milinka Isakovica iz redova mladih socijalista, clanova organizaciono politickog odbora predsednika SPS. + Obracanja ovih mladih ljudi, medju clanstvom partije imaju do deset puta vecu tezuni, nego li obracanja profesionalnih politicara koji za sobom vuku teret proslosti. + Stav rukovodstva mladih socijalista, se razlikuje od stava saveta mladih, koji su takodje na strani predsednika. + Branko Ruzic i Dejan Backovic, svojevremeno najveci branioci i zastupnici lika i dela Slobodana Milosevica, danas su se pretvorili u njegove najvece kriticare. Pokusavaju na sve moguce nacine da minorizuju grupu mladih koja ga podrzava. + Cak se poslednjih dana cuje, da je najbolji recept da se rukovodstvo mladih odrzi ikao je protiv Sloba, da se povezu rodbinskim vezama, pa se tako predsednik mladih socijalista Beograda, Ana Djurovic udala za Branka Ruzica, predsednika Mladih socijalista Srbije, koji je za kuma uzeo Dejna Backovia, svog potpredsednika. Backovic se ovih dana zeni, jednom mladom socijalistkinjom koja je clan saveta mladih, a u isto vreme i sestra jednog od clanova IO GO SPS-a, za kuma uzima jos jednog mladog socijalistu iz Saveta mladih. Sve u svemu, mladi u SPS se drze kao italijanske mafijaske porodice 60-tih u SAD. + Sta ce se do kraja price dogoditi ostaje pitanje, no clanstvo i simpatizeri ce oceniti rad svog rukovodstva na predsednickim izborima. + Pimato se samo, sta ce da rade, ako im Bata prodje losije od Seselja koga je predsednik Slobodan Milosevic podrzao za predsednickog kandidat? + + + + + + + +_______________________________________________________________________ +Powered by List Builder +To unsubscribe follow the link: +http://lb.bcentral.com/ex/sp?c=15279&s=54EE057E0B6864FB&m=5 diff --git a/Ch3/datasets/spam/spam/00329.af4af411fb1268d1461b29fa2d2145a3 b/Ch3/datasets/spam/spam/00329.af4af411fb1268d1461b29fa2d2145a3 new file mode 100644 index 000000000..c131ff3b7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00329.af4af411fb1268d1461b29fa2d2145a3 @@ -0,0 +1,22 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Wed Sep 11 12:35:04 2002 +Return-Path: <013516@aol.com> +Received: from lerami.lerctr.org (201.c98.etcenter.net [210.58.98.201]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with SMTP id g8BHYtE9023507; + Wed, 11 Sep 2002 12:34:57 -0500 (CDT) +Message-Id: <200209111734.g8BHYtE9023507@lerami.lerctr.org> +From: =?Big5?B?qfap9qXNrKG69A==?= +Subject: =?Big5?B?rEKq96SjrE5+fqdPtsykRn5+?= +Content-Type: text/html +Date: Wed, 11 Sep 2002 17:19:10 +0800 +X-Priority: 3 +X-Library: Indy 9.0.3-B +To: undisclosed-recipients:; +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + + + + + diff --git a/Ch3/datasets/spam/spam/00330.c5f7346dec1e6fe6ed324d8e78a2b46e b/Ch3/datasets/spam/spam/00330.c5f7346dec1e6fe6ed324d8e78a2b46e new file mode 100644 index 000000000..eb7c0bea8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00330.c5f7346dec1e6fe6ed324d8e78a2b46e @@ -0,0 +1,860 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Wed Sep 11 12:59:26 2002 +Return-Path: +Received: from mail2.heigl-salomon.at ([213.33.70.236]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g8BHxKE9029482 + for ; Wed, 11 Sep 2002 12:59:22 -0500 (CDT) +Received: from HEWLETT-2B2AA46 ([192.168.0.188]) + by mail2.heigl-salomon.at (8.9.3/8.8.7) with SMTP id TAA09773 + for ; Wed, 11 Sep 2002 19:20:09 +0200 +Message-Id: <200209111720.TAA09773@mail2.heigl-salomon.at> +From: K1-Sexkontaktmagazin +To: +Date: Wed, 11 Sep 2002 20:06:00 +0100 +Subject: Sexabenteuer gefällig? +Reply-To: news@k1-web.com +Organization: K1 +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary=XXB57D906D-3535B57DXX +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +This is a Multipart MIME message. Since your mail reader +does not understand this format, some or all of +this message may not be legible. + +--XXB57D906D-3535B57DXX +Content-Type: text/plain; + charset=iso-8859-1 +Content-Transfer-Encoding: 7bit + +Du suchst ein Sexabenteuer, Seitensprung, One-Night-Stand? +Wir helfen Dir dabei! +Im Internet http://www.k1-web.com/Kontakte/index.php +oder im monatlich erscheinenden Farbmagazin mit +hunderten privaten Sexkontakten und heißen, +spritzigen Stories. +Übrigens, K1-Das Sexkontaktmagazin +http://www.k1-web.com Ausgabe Nr. 66 +ist jetzt im Handel erhältlich. + +Solltest Du an unserem Newsletter kein Interesse +mehr haben, dann trage Dich bitte aus unter: +http://www.k1-web.com/newsletr.php + +--XXB57D906D-3535B57DXX +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="K1 Titelseite 66-Internet.jpg" + +/9j/4AAQSkZJRgABAgEASABIAAD/7RoiUGhvdG9zaG9wIDMuMAA4QklNA+kKUHJpbnQgSW5m +bwAAAAB4AAMAAABIAEgAAAAAAw0CGv/i/+MDLAI2A0cFewPgAAIAAABIAEgAAAAAAw0CGgAB +AAAAZAAAAAEAAwMDAP8AAScPAAEAAQAAAAAAAAAAAAAAAGAIABkBkAAAAAAAAAAAAAAAAAAA +AAEAAAAAAAAAAAAAAAAAAAAAOEJJTQPtClJlc29sdXRpb24AAAAAEABIAAAAAQACAEgAAAAB +AAI4QklNBA0YRlggR2xvYmFsIExpZ2h0aW5nIEFuZ2xlAAAAAAQAAAAeOEJJTQQZEkZYIEds +b2JhbCBBbHRpdHVkZQAAAAAEAAAAHjhCSU0D8wtQcmludCBGbGFncwAAAAkAAAAAAAAAAAEA +OEJJTQQKDkNvcHlyaWdodCBGbGFnAAAAAAEAADhCSU0nEBRKYXBhbmVzZSBQcmludCBGbGFn +cwAAAAAKAAEAAAAAAAAAAjhCSU0D9RdDb2xvciBIYWxmdG9uZSBTZXR0aW5ncwAAAEgAL2Zm +AAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAA +AAEALQAAAAYAAAAAAAE4QklNA/gXQ29sb3IgVHJhbnNmZXIgU2V0dGluZ3MAAABwAAD///// +////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP// +//////////////////////////8D6AAAAAD/////////////////////////////A+gAADhC +SU0ECAZHdWlkZXMAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4NVVJMIG92ZXJyaWRlcwAA +AAQAAAAAOEJJTQQaBlNsaWNlcwAAAACBAAAABgAAAAAAAAAAAAAB3QAAAVQAAAAQAEsAMQAg +AFQAaQB0AGUAbABzAGUAaQB0AGUAIAA2ADYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA +AAAAAAAAAVQAAAHdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhCSU0EFBdM +YXllciBJRCBHZW5lcmF0b3IgQmFzZQAAAAQAAAABOEJJTQQMFU5ldyBXaW5kb3dzIFRodW1i +bmFpbAAAFf0AAAABAAAAUAAAAHAAAADwAABpAAAAFeEAGAAB/9j/4AAQSkZJRgABAgEASABI +AAD/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwM +DAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4O +FBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCABwAFAD +ASIAAhEBAxEB/90ABAAF/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEB +AQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWET +InGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOE +w9N14/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQE +AwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYW +orKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm +9ic3R1dnd4eXp7fH/9oADAMBAAIRAxEAPwDicN7j0gbnE/orRqTwA8BDy+l9MrNj6RZscHCi +s3Pe4EOroabXfsyhj/Ussfayv9Xs9Kr0vZd9n+0X/q9b6WCHenXaTU9oFzG2AbrNr3NrtDq9 ++z9H72fQf/bXRCro9WNQ3I6eLcy+h1zhTRhxzb6LG0PxDY91lddT9nrfpfV9ipTzCEiNdZH5 +Xd5jlJ5+X5fJY4YYo7y1/mozlP5J+mPC8B+yneoGi9haXFpsDLiGtDtjL3D0PU9G36Veyvf+ +/XvVpnTcEBlbm232tO259byxpcQHBlddmI/IY6ne1t3qV/TZZ6S7cs+r1LHMuxa8h1LQ2/Io +ow2VOvIe4YuKx2Hc6/3s9Nj/AFf0np35v6DFp9VEso+ruLcMPK6e52XWRXb6eNhMYXj22Po3 +4jrHVOfv9Hf+YhLm43R4r8B9vyf3mr/oyYJAo0OKWsvk/wALF6GX1Cw7Mj6s4uzg3XtJPAks +2z/6T/nV32FRTi0CtpHq6mx886+3e/6X9hv+EXIfUDNvtsyabK62immqyquqtlbKnWOezJ9I +VMbXX6rW+7bT6ty2XdZacy7HNJccZoc4V2Bw3WT6DHe31PXs27n/AE6Kcb9K+7/AW28/PyOO +GOPpAGrQh8I9rmc3FU5iX6O36zhybT4Zfp8LqW9Tpx67si69ldOMA65xLnFkxtZ6dX+Gfuay +undvs/0S806ni2V3WZWP0avAwnl1hxnV03upkl7nWTj/AKCl307cbfb+zn7/APtL+jxuk6sz +reU7FrqNbqK3B19UOpfS/Vrs+jNYWN9Vm97qn+l/1vJT5HUsQ5j2Y1732Y72Mvy9uyttxAJ3 +vr3V4/0v8J+i9RUvckQADd/N4Olgxxxz4jEEi6jMcWOX0/rf+w3l8jHZQDYzHx8ii3aMe70M +etm47HuGSRVb6dlVZd62Pv8A+E/o/vsrdSZj1dPvHo0Nv9Oxssx6Cx3s3PfVeyv2W4/qMpt9 +D2fzN+PauozuhX9LxmdZw6Bf0y5of1DpjS4MY33bLm11/wDabY/1v/NVd+mq/UP6HzvVTmU9 +HuqreL8B1Tqm5Qa6S1gc+vDLrHObjbHM9V2Ls9b2Y/6ezBrxkiMnFAgmiQT6pfL/AM7/ABf/ +AEds1DL6scYVE1kFY4G48UeH5OD97/zo/nuX9ueL2+X/AP/QxvqHRiuxn35jA/Hrq9Lc9r3t +bZfe3HY8MqZd6l/puu+y1en/AEj0/wDja9bLrczqv2ysOw6XU0sxnMO8VvdXj4PpC2wb3fYr +8hvr27PtHps9ev8ASemsv6kZzqMHDracZjftFj7XZLiBENqqcPSY/Iqur3W/ZMnH/mrPU3q9 +12j6w32W4GPXVdfXkh2yBj1AXixzcar7XZjX7GP99GL+fbZdf+n9P11Rz4b45SlGA19c/wDN +k+u+L9X/ACxu9jnkhGErPDLBjhqJZIjFwQ4yIfv/ANX+u5lpL8fHc0+2ndU+sR7XuJu9b979 +bra2r+R+z6/Us/T49at5Pp41lNVDRWcLA30Boj9M6p+fX7R/3cylI9E+ueWLG3txmeqQbXne +8FzH+pFtuHXd/N5GPus3P/nWIGZj9abXazK6v0n2saX+pkPFr/SLXsq/SMZk2+6ir6Xss/Rq +px45ER9yB+bSEuP+c/S9Mfm9WVMuejwTiQI8fu0Ze7eP7x80o8eGHucE5Zf3P3Ha+pWU3Fs6 +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 +3UtyHBtbnVu90n/Bs2/pf7CuV/VnqWRmZWNh1utbiavse01EgjfX+hu/S+pa36FSbYW8MBtO +tv8AmsM7Gx2Zl/pNY2ku/Rtqebaw3/g8h/vsXT5OT063pnQcV9tT2MsrGRXvHtZAbZ6/u/Rt +XLBjnNDOHDSD4/urWt+o/Whk00bqyLg4m0F2yvaN2279H+d+YmalYaJslu9XH1bdg9UFDceu +3HcwYj67PfZIrdZs/SO9T6VjP0aq9Zx+ht6I04X2SrK9odXVYci54lm59eRVZsZ7fp+vQs1/ +1dyas+3BNbsrIp+k2sFwjT37Y+h7/wA9Hx+kWvzW4V1dmM8guj0nOdAH+hrG9K1eFmnXzcL6 +s1dLe/Bbi2g1/onW3Orva8DV9vvc625/5mP9nqrWf1CzoeP0TBbjVUPzcmuMi4OLn0mGbrH0 +sf8AzjlSf0fIf0v9o72ekbxjbDuD987N30ULqn1b6r026xllLraagC7IqY81ajd/OuY36CQ1 +3SKGlkm3qPsH1Wbg21OtxbXtx91WQx4Y91kO/N+0W2epuaz6dap5OT0u/wCrPTqyaWOrtYMt +jP59oBLLLa6/pue+v32PeucxOm5+Uwvxca29jfpOrY5wH9poUqsHNtbY6vHse2kxaQ0nYf8A +hf3EFcPcvTdZxvq8zp1runtxH+0Gl7bi25v0d36Nz7X5Nzv5ddK5q/8A5Mxf+Nv/ACY6hk4u +Ri2elk1OptAnY8FroP8AJci2NnpuKP8AhbvyY6ZM+qH9/wD9R5ExFDe3e6Td+pUg8hoWm2wE +LIxKoxMc7gyWgFx4RrTkY7wHuZsd9F+6AT9yrGJJJHculGNxj5OkbIGgmFX+3dmNLj4NIJ/z +ZVHLsyRWWWNdSf3o3NI/rs9u1Z1NdgvZZubDXAl4PmnRhEgky4SyQxwMSTIA9A7b+pMaYsDq +/wCu0j/pJvtlbh7XA/AqTMplp2mCCeEd3T+n26upbJ7jQ/8AQ2punkxHTo0nXthQ9YTqi29H +wwYZZYyewdP/AFe5Cf0XIAmjKDvAWNj/AKVZ/wC+KSIHQscpDsWXrA6qLnjxQ/2V1UazUfOT +/wCRQren9WGjWMdPcP8A/J7VKCO4Yiwx3b+rUhvI3T8IXUOA9MTysnpXTBhg3W+/JcIc7s0f +uVrQstAZzqoZ6ysdNGS9AHB60xtb2vHJ0KyXW+BWr1iX0Od3aQVhyrERcQtBSOslDOqZSaO6 +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 + +--XXB57D906D-3535B57DXX-- diff --git a/Ch3/datasets/spam/spam/00331.a61788d316e7393c8bbf8ee19b24c713 b/Ch3/datasets/spam/spam/00331.a61788d316e7393c8bbf8ee19b24c713 new file mode 100644 index 000000000..5dce393ab --- /dev/null +++ b/Ch3/datasets/spam/spam/00331.a61788d316e7393c8bbf8ee19b24c713 @@ -0,0 +1,145 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Thu Sep 12 22:16:37 2002 +Return-Path: +Received: from mail.cheerco.net (www-int.cheerleading.com [64.90.53.12]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g8D3GXE9027238 + for ; Thu, 12 Sep 2002 22:16:35 -0500 (CDT) +Received: from gelincik.trnet.com (gelincik.tr.net [195.155.1.7]) + by mail.cheerco.net (8.12.5/8.12.5) with ESMTP id g8D3GRwV080845 + for ; Thu, 12 Sep 2002 22:16:30 -0500 (CDT) + (envelope-from antonyfdy@accesocero.es) +Received: from correo.ruraltour.com ([195.155.94.48]) by gelincik.trnet.com + (InterMail vK.4.02.00.09 201-232-116-109 license 0f5baaa7065154cd09644893d36baf5e) + with SMTP + id <20020913030633.DLCL13768.gelincik@correo.ruraltour.com>; + Fri, 13 Sep 2002 06:06:33 +0300 +From: "Beatrice Nestor" +To: "EXPANDING MARKETS" <3456@register.com> +Subject: -> IN THE NEWS TODAY <---- +MIME-Version: 1.0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable +Message-Id: <20020913030633.DLCL13768.gelincik@correo.ruraltour.com> +Date: Fri, 13 Sep 2002 06:06:40 +0300 +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + + +
    + +OTC
    = + + + Newsletter
    +Discover Tomorrow's Winners 
    + +For Immediate Release
    +

    +Cal-Bay (Stock Symbol: CBYI) +
    Watch for analyst =22Strong Buy Recommendations=22 and several adviso= +ry newsletters picking CBYI. CBYI has filed to be traded on the OTCBB, = +share prices historically INCREASE when companies get listed on this lar= +ger trading exchange. CBYI is trading around 25 cents and should skyrock= +et to =242.66 - =243.25 a share in the near future.
    +Put CBYI on your watch list, acquire a position TODAY.

    +

    +REASONS TO INVEST IN CBYI +

  • = + +A profitable company and is on track to beat ALL earnings estimates=21 +
  • = + +One of the FASTEST growing distributors in environmental & safety e= +quipment instruments. +
  • +Excellent management team, several EXCLUSIVE contracts. IMPRESSIVE cli= +ent list including the U.S. Air Force, Anheuser-Busch, Chevron Refining = +and Mitsubishi Heavy Industries, GE-Energy & Environmental Research.= + +

    +RAPIDLY GROWING INDUSTRY +
    Industry revenues exceed =24900 million, estimates indicate that the= +re could be as much as =2425 billion from =22smell technology=22 by the end= + of 2003.

    +

    +=21=21=21=21=21CONGRATULATIONS=21=21=21=21=21
    Our last recommendation t= +o buy ORBT at =241.29 rallied and is holding steady at =243.50=21 Congratul= +ations to all our subscribers that took advantage of this recommendation= +.









    +

    +ALL removes HONORED. Please allow 7 days to be removed and send ALL add= +resses to: + +GoneForGood=40btamail.ne= +t.cn +

  •  
    + +Certain statements contained in this news release may be forward-lookin= +g statements within the meaning of The Private Securities Litigation Ref= +orm Act of 1995. These statements may be identified by such terms as =22e= +xpect=22, =22believe=22, =22may=22, =22will=22, and =22intend=22 or similar terms= +. We are NOT a registered investment advisor or a broker dealer. This is= + NOT an offer to buy or sell securities. No recommendation that the secu= +rities of the companies profiled should be purchased, sold or held by in= +dividuals or entities that learn of the profiled companies. We were paid= + =2427,000 in cash by a third party to publish this report. Investing in = +companies profiled is high-risk and use of this information is for readi= +ng purposes only. If anyone decides to act as an investor, then it will = +be that investor's sole risk. Investors are advised NOT to invest withou= +t the proper advisement from an attorney or a registered financial broke= +r. Do not rely solely on the information presented, do additional indepe= +ndent research to form your own opinion and decision regarding investing= + in the profiled companies. Be advised that the purchase of such high-ri= +sk securities may result in the loss of your entire investment. Not int= +ended for recipients or residents of CA,CO,CT,DE,ID, IL,IA,LA,MO,NV,NC,O= +K,OH,PA,RI,TN,VA,WA,WV,WI. Void where prohibited. The owners of this pu= +blication may already own free trading shares in CBYI and may immediatel= +y sell all or a portion of these shares into the open market at or about= + the time this report is published. Factual statements are made as of t= +he date stated and are subject to change without notice. +
    Copyright c 2001

    +
    + +OTC
    +
    + +**** diff --git a/Ch3/datasets/spam/spam/00332.580b62752adefb845db173e375271cb5 b/Ch3/datasets/spam/spam/00332.580b62752adefb845db173e375271cb5 new file mode 100644 index 000000000..7a5369108 --- /dev/null +++ b/Ch3/datasets/spam/spam/00332.580b62752adefb845db173e375271cb5 @@ -0,0 +1,100 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Fri Sep 13 22:40:03 2002 +Return-Path: +Received: from mindupmerchants.com (pDepriver@24-205-211-91.rno-cres.charterpipeline.net [24.205.211.91]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g8E3doE9024041 + for ; Fri, 13 Sep 2002 22:39:53 -0500 (CDT) +Message-Id: <200209140339.g8E3doE9024041@lerami.lerctr.org> +Received: from 192.168.0.0 by mindupmerchants.com + with SMTP (MDaemon.PRO.v6.0.7.R) + for ; Fri, 13 Sep 2002 20:38:57 -0700 +From: "Ben Green" +To: ler@lerctr.org +Subject: One of a kind Money maker! Try it for free! +Date: Fri, 13 Sep 2002 20:38:55 -0700 +X-M5MailerProjectID: 4fb0caa2-c329-4c20-b331-229e681acee3 +Reply-To: bengreen@mindupmerchants.com +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----000000000000000000000" +X-Return-Path: bengreen@mindupmerchants.com +X-MDaemon-Deliver-To: ler@lerctr.org +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +------000000000000000000000 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit + + + +
    + + +

    CONSANTLY being +bombarded by so-called “FREE” money-making systems that teases you with limited +information, and when it’s all said and done, blind-sides you by demanding your +money/credit card information upfront in some slick way, after-the-fact! +Yes, I too was as skeptical about such offers and the Internet in general with +all its hype, as you probably are. Fortunate for me, my main business +slowed-down (I have been self-employed all my life), so I looked for +something to fit my lifestyle and some other way to assist me in paying my +bills, without working myself to death or loosing more money; then, this +proposal to try something new without any upfront investment (great! because +I had none) interested me to click on the link provided. And I don’t regret +at all that I did! I am very happy, and happy enough to recommend it to you as +a system that is true to its word. I mean absolutely no upfront money. You join +only if (when) you make money. You also get to track the results of your +time and efforts instantly and updated daily! I especially liked this idea of +personal control with real-time, staying informed statistics.

    + +

    This system is quite simply +the most logical, opened, and fair of any others that I’ve seen before. Why? +Because from the start, you get all the specific facts you need to seriously +consider if this is right for you.  No teasing. No grand testimonies! No +kidding! Just the facts! Unlike in other programs that give you “no idea” of +their overall plan before first forking over your money/credit card; or worst +yet, joining and finding-out too late, after wasting valuable time trying to +figure them out, this system is straightforward and informative, providing you +with the two things you really must know: “What’s it all about?” and “How +does it work?”. These are the ultimate deal makers or deal breakers that +need to be immediately disclosed, well before discovering that maybe you don’t +want to do that; by then you are “hooked” and now locked into a frustrating +battle to try to get your money back!

    + +

    I call this my “Platinum +Choice” because it stands alone as a true, superior deal that is totally +different from previously misleading, “hook-first” programs that promise lofty +mega-money jackpots, but really just want your money upfront to line their own +pockets! You’ve seen the headlines: “Join free and Make $10,000 every week +for life” yeah, right!

    + +

    I did not make millions yet, +but the whole thing was launched just a few weeks ago and I am more than happy +with my earnings, so far. I must tell you, I wouldn’t be able to do anything +without corporate help – which was unusually thorough, timely, and motivating.

    + +

    You have to see this in action +for yourself and make up your own mind; just go to my site and fill out the +form as soon as you can. You will get your own site in a few minutes. Then you +are ready to try whether you can make some decent money with this system and +the Internet’s explosive potential - fully loaded with hi-tech software, free +corporate help, on-time member’s support and even protective safeguards!

    + +

    Get it now, and you can call me +at any time with questions. It really could help you like it is helping me to +finally be able to pay my bills, and keep my free time free.  Good luck!

    + +

    http://www.mindupmerchants.com/default.asp?ID=5581

    + +

    Ben Green, (775) 322-3323

    + +

    P.S.Free POP3 email is ofered for members now!

    +
    + + + +------000000000000000000000-- diff --git a/Ch3/datasets/spam/spam/00333.4bb36a535cb3d738f30f985f1e10a786 b/Ch3/datasets/spam/spam/00333.4bb36a535cb3d738f30f985f1e10a786 new file mode 100644 index 000000000..08d47c256 --- /dev/null +++ b/Ch3/datasets/spam/spam/00333.4bb36a535cb3d738f30f985f1e10a786 @@ -0,0 +1,100 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Fri Sep 13 22:48:06 2002 +Return-Path: +Received: from mindupmerchants.com (pDepriver@24-205-211-91.rno-cres.charterpipeline.net [24.205.211.91]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g8E3loE9024995 + for ; Fri, 13 Sep 2002 22:47:55 -0500 (CDT) +Message-Id: <200209140347.g8E3loE9024995@lerami.lerctr.org> +Received: from 192.168.0.0 by mindupmerchants.com + with SMTP (MDaemon.PRO.v6.0.7.R) + for ; Fri, 13 Sep 2002 20:46:36 -0700 +From: "Ben Green" +To: ler@lerctr.org +Subject: One of a kind Money maker! Try it for free! +Date: Fri, 13 Sep 2002 20:46:34 -0700 +X-M5MailerProjectID: 4fb0caa2-c329-4c20-b331-229e681acee3 +Reply-To: bengreen@mindupmerchants.com +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----000000000000000000000" +X-Return-Path: bengreen@mindupmerchants.com +X-MDaemon-Deliver-To: ler@lerctr.org +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +------000000000000000000000 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit + + + +
    + + +

    CONSANTLY being +bombarded by so-called “FREE” money-making systems that teases you with limited +information, and when it’s all said and done, blind-sides you by demanding your +money/credit card information upfront in some slick way, after-the-fact! +Yes, I too was as skeptical about such offers and the Internet in general with +all its hype, as you probably are. Fortunate for me, my main business +slowed-down (I have been self-employed all my life), so I looked for +something to fit my lifestyle and some other way to assist me in paying my +bills, without working myself to death or loosing more money; then, this +proposal to try something new without any upfront investment (great! because +I had none) interested me to click on the link provided. And I don’t regret +at all that I did! I am very happy, and happy enough to recommend it to you as +a system that is true to its word. I mean absolutely no upfront money. You join +only if (when) you make money. You also get to track the results of your +time and efforts instantly and updated daily! I especially liked this idea of +personal control with real-time, staying informed statistics.

    + +

    This system is quite simply +the most logical, opened, and fair of any others that I’ve seen before. Why? +Because from the start, you get all the specific facts you need to seriously +consider if this is right for you.  No teasing. No grand testimonies! No +kidding! Just the facts! Unlike in other programs that give you “no idea” of +their overall plan before first forking over your money/credit card; or worst +yet, joining and finding-out too late, after wasting valuable time trying to +figure them out, this system is straightforward and informative, providing you +with the two things you really must know: “What’s it all about?” and “How +does it work?”. These are the ultimate deal makers or deal breakers that +need to be immediately disclosed, well before discovering that maybe you don’t +want to do that; by then you are “hooked” and now locked into a frustrating +battle to try to get your money back!

    + +

    I call this my “Platinum +Choice” because it stands alone as a true, superior deal that is totally +different from previously misleading, “hook-first” programs that promise lofty +mega-money jackpots, but really just want your money upfront to line their own +pockets! You’ve seen the headlines: “Join free and Make $10,000 every week +for life” yeah, right!

    + +

    I did not make millions yet, +but the whole thing was launched just a few weeks ago and I am more than happy +with my earnings, so far. I must tell you, I wouldn’t be able to do anything +without corporate help – which was unusually thorough, timely, and motivating.

    + +

    You have to see this in action +for yourself and make up your own mind; just go to my site and fill out the +form as soon as you can. You will get your own site in a few minutes. Then you +are ready to try whether you can make some decent money with this system and +the Internet’s explosive potential - fully loaded with hi-tech software, free +corporate help, on-time member’s support and even protective safeguards!

    + +

    Get it now, and you can call me +at any time with questions. It really could help you like it is helping me to +finally be able to pay my bills, and keep my free time free.  Good luck!

    + +

    http://www.mindupmerchants.com/default.asp?ID=5581

    + +

    Ben Green, (775) 322-3323

    + +

    P.S.Free POP3 email is ofered for members now!

    +
    + + + +------000000000000000000000-- diff --git a/Ch3/datasets/spam/spam/00334.a1038f98abb76b403d068afb57bfb290 b/Ch3/datasets/spam/spam/00334.a1038f98abb76b403d068afb57bfb290 new file mode 100644 index 000000000..ba75ef45d --- /dev/null +++ b/Ch3/datasets/spam/spam/00334.a1038f98abb76b403d068afb57bfb290 @@ -0,0 +1,100 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Fri Sep 13 23:14:55 2002 +Return-Path: +Received: from mindupmerchants.com (pDepriver@24-205-211-91.rno-cres.charterpipeline.net [24.205.211.91]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g8E4EZE9029281 + for ; Fri, 13 Sep 2002 23:14:48 -0500 (CDT) +Message-Id: <200209140414.g8E4EZE9029281@lerami.lerctr.org> +Received: from 192.168.0.0 by mindupmerchants.com + with SMTP (MDaemon.PRO.v6.0.7.R) + for ; Fri, 13 Sep 2002 21:13:21 -0700 +From: "Ben Green" +To: ler@lerctr.org +Subject: One of a kind Money maker! Try it for free! +Date: Fri, 13 Sep 2002 21:13:19 -0700 +X-M5MailerProjectID: 4fb0caa2-c329-4c20-b331-229e681acee3 +Reply-To: bengreen@mindupmerchants.com +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----000000000000000000000" +X-Return-Path: bengreen@mindupmerchants.com +X-MDaemon-Deliver-To: ler@lerctr.org +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +------000000000000000000000 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit + + + +
    + + +

    CONSANTLY being +bombarded by so-called “FREE” money-making systems that teases you with limited +information, and when it’s all said and done, blind-sides you by demanding your +money/credit card information upfront in some slick way, after-the-fact! +Yes, I too was as skeptical about such offers and the Internet in general with +all its hype, as you probably are. Fortunate for me, my main business +slowed-down (I have been self-employed all my life), so I looked for +something to fit my lifestyle and some other way to assist me in paying my +bills, without working myself to death or loosing more money; then, this +proposal to try something new without any upfront investment (great! because +I had none) interested me to click on the link provided. And I don’t regret +at all that I did! I am very happy, and happy enough to recommend it to you as +a system that is true to its word. I mean absolutely no upfront money. You join +only if (when) you make money. You also get to track the results of your +time and efforts instantly and updated daily! I especially liked this idea of +personal control with real-time, staying informed statistics.

    + +

    This system is quite simply +the most logical, opened, and fair of any others that I’ve seen before. Why? +Because from the start, you get all the specific facts you need to seriously +consider if this is right for you.  No teasing. No grand testimonies! No +kidding! Just the facts! Unlike in other programs that give you “no idea” of +their overall plan before first forking over your money/credit card; or worst +yet, joining and finding-out too late, after wasting valuable time trying to +figure them out, this system is straightforward and informative, providing you +with the two things you really must know: “What’s it all about?” and “How +does it work?”. These are the ultimate deal makers or deal breakers that +need to be immediately disclosed, well before discovering that maybe you don’t +want to do that; by then you are “hooked” and now locked into a frustrating +battle to try to get your money back!

    + +

    I call this my “Platinum +Choice” because it stands alone as a true, superior deal that is totally +different from previously misleading, “hook-first” programs that promise lofty +mega-money jackpots, but really just want your money upfront to line their own +pockets! You’ve seen the headlines: “Join free and Make $10,000 every week +for life” yeah, right!

    + +

    I did not make millions yet, +but the whole thing was launched just a few weeks ago and I am more than happy +with my earnings, so far. I must tell you, I wouldn’t be able to do anything +without corporate help – which was unusually thorough, timely, and motivating.

    + +

    You have to see this in action +for yourself and make up your own mind; just go to my site and fill out the +form as soon as you can. You will get your own site in a few minutes. Then you +are ready to try whether you can make some decent money with this system and +the Internet’s explosive potential - fully loaded with hi-tech software, free +corporate help, on-time member’s support and even protective safeguards!

    + +

    Get it now, and you can call me +at any time with questions. It really could help you like it is helping me to +finally be able to pay my bills, and keep my free time free.  Good luck!

    + +

    http://www.mindupmerchants.com/default.asp?ID=5581

    + +

    Ben Green, (775) 322-3323

    + +

    P.S.Free POP3 email is ofered for members now!

    +
    + + + +------000000000000000000000-- diff --git a/Ch3/datasets/spam/spam/00335.f71c6e9b23487811a44e6aeaa50e73a5 b/Ch3/datasets/spam/spam/00335.f71c6e9b23487811a44e6aeaa50e73a5 new file mode 100644 index 000000000..8611568fc --- /dev/null +++ b/Ch3/datasets/spam/spam/00335.f71c6e9b23487811a44e6aeaa50e73a5 @@ -0,0 +1,100 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Fri Sep 13 23:26:40 2002 +Return-Path: +Received: from mindupmerchants.com (pDepriver@24-205-211-91.rno-cres.charterpipeline.net [24.205.211.91]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g8E4QBE9001346 + for ; Fri, 13 Sep 2002 23:26:16 -0500 (CDT) +Message-Id: <200209140426.g8E4QBE9001346@lerami.lerctr.org> +Received: from 192.168.0.0 by mindupmerchants.com + with SMTP (MDaemon.PRO.v6.0.7.R) + for ; Fri, 13 Sep 2002 21:25:02 -0700 +From: "Ben Green" +To: ler@lerctr.org +Subject: One of a kind Money maker! Try it for free! +Date: Fri, 13 Sep 2002 21:25:00 -0700 +X-M5MailerProjectID: 4fb0caa2-c329-4c20-b331-229e681acee3 +Reply-To: bengreen@mindupmerchants.com +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----000000000000000000000" +X-Return-Path: bengreen@mindupmerchants.com +X-MDaemon-Deliver-To: ler@lerctr.org +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +------000000000000000000000 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: 7bit + + + +
    + + +

    CONSANTLY being +bombarded by so-called “FREE” money-making systems that teases you with limited +information, and when it’s all said and done, blind-sides you by demanding your +money/credit card information upfront in some slick way, after-the-fact! +Yes, I too was as skeptical about such offers and the Internet in general with +all its hype, as you probably are. Fortunate for me, my main business +slowed-down (I have been self-employed all my life), so I looked for +something to fit my lifestyle and some other way to assist me in paying my +bills, without working myself to death or loosing more money; then, this +proposal to try something new without any upfront investment (great! because +I had none) interested me to click on the link provided. And I don’t regret +at all that I did! I am very happy, and happy enough to recommend it to you as +a system that is true to its word. I mean absolutely no upfront money. You join +only if (when) you make money. You also get to track the results of your +time and efforts instantly and updated daily! I especially liked this idea of +personal control with real-time, staying informed statistics.

    + +

    This system is quite simply +the most logical, opened, and fair of any others that I’ve seen before. Why? +Because from the start, you get all the specific facts you need to seriously +consider if this is right for you.  No teasing. No grand testimonies! No +kidding! Just the facts! Unlike in other programs that give you “no idea” of +their overall plan before first forking over your money/credit card; or worst +yet, joining and finding-out too late, after wasting valuable time trying to +figure them out, this system is straightforward and informative, providing you +with the two things you really must know: “What’s it all about?” and “How +does it work?”. These are the ultimate deal makers or deal breakers that +need to be immediately disclosed, well before discovering that maybe you don’t +want to do that; by then you are “hooked” and now locked into a frustrating +battle to try to get your money back!

    + +

    I call this my “Platinum +Choice” because it stands alone as a true, superior deal that is totally +different from previously misleading, “hook-first” programs that promise lofty +mega-money jackpots, but really just want your money upfront to line their own +pockets! You’ve seen the headlines: “Join free and Make $10,000 every week +for life” yeah, right!

    + +

    I did not make millions yet, +but the whole thing was launched just a few weeks ago and I am more than happy +with my earnings, so far. I must tell you, I wouldn’t be able to do anything +without corporate help – which was unusually thorough, timely, and motivating.

    + +

    You have to see this in action +for yourself and make up your own mind; just go to my site and fill out the +form as soon as you can. You will get your own site in a few minutes. Then you +are ready to try whether you can make some decent money with this system and +the Internet’s explosive potential - fully loaded with hi-tech software, free +corporate help, on-time member’s support and even protective safeguards!

    + +

    Get it now, and you can call me +at any time with questions. It really could help you like it is helping me to +finally be able to pay my bills, and keep my free time free.  Good luck!

    + +

    http://www.mindupmerchants.com/default.asp?ID=5581

    + +

    Ben Green, (775) 322-3323

    + +

    P.S.Free POP3 email is ofered for members now!

    +
    + + + +------000000000000000000000-- diff --git a/Ch3/datasets/spam/spam/00336.92409253178027f58e2c072a7e82791e b/Ch3/datasets/spam/spam/00336.92409253178027f58e2c072a7e82791e new file mode 100644 index 000000000..8a1ad5e20 --- /dev/null +++ b/Ch3/datasets/spam/spam/00336.92409253178027f58e2c072a7e82791e @@ -0,0 +1,36 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Sat Sep 14 04:51:57 2002 +Return-Path: +Received: from gpwyo (slkcdslgw14PoolD234.slkc.uswest.net [65.103.229.234]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with SMTP id g8E9poE9011985 + for ; Sat, 14 Sep 2002 04:51:52 -0500 (CDT) +From: Isa Aydogan +To: +Subject: Yeni sürümde +Date: Sat, 14 Sep 2002 10:49:08 -0400 +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 +Mime-Version: 1.0 +Content-Type: text/html +Content-Transfer-Encoding: base64 +Message-Id: +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVu +dD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1NCI+DQo8dGl0bGU+U01TVFIgbGls +aHdtdXh2cnN5cWN3amh2dHR4dzwvdGl0bGU+PC9oZWFkPg0KPGJvZHk+PHA+PGZvbnQgZmFj +ZT0iQXJpYWwiIHNpemU9IjQiPkRlZ2VybGkgU01TVFIga3VsbGFuaWNpbWl6PGJyPg0KPGh0 +bWw+DQpTTVMgcHJvZ3JhbWltaXog52VzaXRsaSBha3Nha2xpa2xhciBzZWJlYmkgaWxlIGt1 +bGxhbmlsYW1heiBoYWxlIGdlbG1pc3Rpci4gQnUgDQpzZWJlcHRlbiBkb2xheWkgeWVuaSBi +aXIgcHJvZ3JhbSBoYXppcmxhbWFrIHpvcnVuZGEga2FsZGlrLiBQcm9ncmFtaSBhc2FnaWRh +a2kgbGlua2kgDQprdWxsYW5hcmFrIGluZGlyZWJpbGlyc2luaXouIFByb2dyYW1pIGJpeiB2 +aXL8cyBrb250cm9s/G5kZW4gZ2XnaXJtaXMgYnVsdW5tYWt0YXlpei4NCkJ1IHllbmkgdmVy +c2l5b25kYSBzbXMgaW4geWVyaW5lIHVsYXNtYSBoaXppIOdvayBkYWhhIGFydGlyaWxtaXN0 +aXIuIEF5cmljYSBzaW5pcnNpeiANCnZlIHRvcGx1IHNtcyBn9m5kZXJlYmlsaXJzaW5pei4g +x29rIHlha2luZGEgbG9nbyB2ZSBtZWxvZGkgdHJhbnNmZXJpIGhpem1ldGltaXogDQphY2ls +YWNha3Rpci4gU2l6aSBiaXIgc3VyZSBzaW5pcnNpeiBzbXNkZW4gbWFocnVtIGV0dGlnaW1p +eiBpY2luIG96dXIgDQpkaWxlcml6LjwvZm9udD48YnI+DQo8YnI+PGZvbnQgZmFjZT0iQXJp +YWwiIHNpemU9IjQiPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ2FyYW50aXNtcy5jb20vc21zdHIu +ZXhlIj5TTVNUUg0KVmVyc2l5b24gNy4zIHUgaW5kaXJtZWsgaedpbiBidXJheWEgdGlrbGF5 +aW5pejwvYT48L2ZvbnQ+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPg0KDQo= diff --git a/Ch3/datasets/spam/spam/00337.813498483bc80a24c002e6e7e8e0f2cb b/Ch3/datasets/spam/spam/00337.813498483bc80a24c002e6e7e8e0f2cb new file mode 100644 index 000000000..db21eea54 --- /dev/null +++ b/Ch3/datasets/spam/spam/00337.813498483bc80a24c002e6e7e8e0f2cb @@ -0,0 +1,70 @@ +Return-Path: ler@lerami.lerctr.org +Delivery-Date: Sat Sep 14 13:26:41 2002 +Received: via dmail-2002(12) for +lists/freebsd/ports; Sat, 14 Sep 2002 13:26:41 -0500 (CDT) +Return-Path: +Received: from mx2.freebsd.org (mx2.FreeBSD.org [216.136.204.119]) + by lerami.lerctr.org (8.12.2/8.12.2/20020902/$Revision: 1.30 $) with ESMTP id g8EIQYE9016187 + for ; Sat, 14 Sep 2002 13:26:35 -0500 (CDT) +Received: from hub.freebsd.org (hub.FreeBSD.org [216.136.204.18]) + by mx2.freebsd.org (Postfix) with ESMTP + id A61FE55746; Sat, 14 Sep 2002 11:26:27 -0700 (PDT) + (envelope-from owner-freebsd-ports@FreeBSD.ORG) +Received: by hub.freebsd.org (Postfix, from userid 538) + id 0C79337B401; Sat, 14 Sep 2002 11:26:27 -0700 (PDT) +Received: from localhost (localhost [127.0.0.1]) + by hub.freebsd.org (Postfix) with SMTP + id 005112E800A; Sat, 14 Sep 2002 11:26:26 -0700 (PDT) +Received: by hub.freebsd.org (bulk_mailer v1.12); Sat, 14 Sep 2002 11:26:26 -0700 +Delivered-To: freebsd-ports@freebsd.org +Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) + by hub.freebsd.org (Postfix) with ESMTP id 27A0637B400 + for ; Sat, 14 Sep 2002 11:26:26 -0700 (PDT) +Received: from mail.cyberworldservers.net (mail.cyberworldservers.net [66.206.11.2]) + by mx1.FreeBSD.org (Postfix) with ESMTP id CA9EA43E75 + for ; Sat, 14 Sep 2002 11:26:25 -0700 (PDT) + (envelope-from Jeremy@synteligent.com) +Received: from mail.cnint.com (unverified [67.104.247.119]) by mail.cyberworldservers.net + (Vircom SMTPRS 5.3.232) with ESMTP id for ; + Sat, 14 Sep 2002 11:33:57 -0700 +Message-ID: +From: "Synteligent Properties" +Date: Sat, 14 Sep 2002 13:36:40 +To: ports@FreeBSD.ORG +Subject: Still looking for a house? +MIME-Version: 1.0 +Content-Type: text/plain;charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +Sender: owner-freebsd-ports@FreeBSD.ORG +List-ID: +List-Archive: (Web Archive) +List-Help: (List Instructions) +List-Subscribe: +List-Unsubscribe: +X-Loop: FreeBSD.org +Precedence: bulk +X-Virus-Scanned: by amavisd-milter (http://amavis.org/) +X-Status: +X-Keywords: + +My name is Jeremy Lessaris. I'm looking for investment properties in the Midwest. The issue I've been having is that not every everyone deals with the properties I'm looking for. You know the houses that you are almost sure will not sell; maybe they're really ugly or need a lot of work or are in a bad neighborhood. But for what ever reason, the houses just don't sell. + +I need those houses... + +Most of the agents I've dealt with were hesitant because there isn't much of a return for what time and effort you invest. However, the private investors I work with use "unconventional" private funding so we both can avoid long drawn out loan approvals. In fact most cases we just pay cash and close in a week. I am pre-qualified with Greentree Funding for up to $900,000 for a purchase money mortgage based on a non-owner occupied loan at 90% LTV. (And of course you get your full commission.) + +I'm not a licensed real estate agent nor am I affiliated with any real estate firm, which means I can work with you just about any way you want. Please don't be under the impression that we have to pay under market value to be interested. Sometimes I can even pay retail price. The only guarantee I'll make is that I will not waste your time, and in most cases I can tell you over the phone whether I'm interested or not. + +If you are looking to purchace a project home from our inventory or would like information on forming an alliance with Synteligent Properties, please contact me @ 847.366.4300 or email me @ jeremy@synteligent.com + +Best Wishes, +Jeremy Lessaris + + +847.366.4300 +www.synteligent.com +jeremy@synteligent.com + + +To Unsubscribe: send mail to majordomo@FreeBSD.org +with "unsubscribe freebsd-ports" in the body of the message + diff --git a/Ch3/datasets/spam/spam/00338.a595ffbb6cbcf3a5058293051ebaabf4 b/Ch3/datasets/spam/spam/00338.a595ffbb6cbcf3a5058293051ebaabf4 new file mode 100644 index 000000000..6cc178c2c --- /dev/null +++ b/Ch3/datasets/spam/spam/00338.a595ffbb6cbcf3a5058293051ebaabf4 @@ -0,0 +1,120 @@ +From 27WHlzIOcxxfl@mail.ht.net.tw Mon Sep 16 19:09:40 2002 +Return-Path: <27WHlzIOcxxfl@mail.ht.net.tw> +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 1187616F03 + for ; Mon, 16 Sep 2002 19:09:39 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 16 Sep 2002 19:09:39 +0100 (IST) +Received: from vic (61-230-27-47.HINET-IP.hinet.net [61.230.27.47]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g8GHbBC03550 for + ; Mon, 16 Sep 2002 18:37:11 +0100 +Date: Mon, 16 Sep 2002 18:37:11 +0100 +Received: from party by gcn.net.tw with SMTP id 7AEqQF0sKZQlE5DgCKCEvOP; + Tue, 15 Sep 2015 01:42:02 +0800 +Message-Id: +From: abc@ms22.hinet.net +To: ¥¼©R¦W.txt@dogma.slashnull.org, 0913.10.TXT@dogma.slashnull.org, + 0913.11.TXT@dogma.slashnull.org, 0913.12.TXT@dogma.slashnull.org, + 0913.13.TXT@dogma.slashnull.org, 0913.14.TXT@dogma.slashnull.org, + 0913.2.TXT@dogma.slashnull.org, 0913.3.TXT@dogma.slashnull.org, + 0913.4.TXT@dogma.slashnull.org, 0913.5.TXT@dogma.slashnull.org, + 0913.6.TXT@dogma.slashnull.org, 0913.7.TXT@dogma.slashnull.org, + 0913.8.TXT@dogma.slashnull.org, 0913.9.TXT@dogma.slashnull.org, + 0915.1.TXT@dogma.slashnull.org, 0915.10.TXT@dogma.slashnull.org, + 0915.11.TXT@dogma.slashnull.org, 0915.12.TXT@dogma.slashnull.org, + 0915.13.TXT@dogma.slashnull.org, 0915.14.TXT@dogma.slashnull.org, + 0915.15.TXT@dogma.slashnull.org, 0915.16.TXT@dogma.slashnull.org, + 0915.2.TXT@dogma.slashnull.org, 0915.3.TXT@dogma.slashnull.org, + 0915.4.TXT@dogma.slashnull.org, 0915.5.TXT@dogma.slashnull.org, + 0915.6.TXT@dogma.slashnull.org, 0915.7.TXT@dogma.slashnull.org, + 0915.8.TXT@dogma.slashnull.org, 0915.9.TXT@dogma.slashnull.org, + 0916.1.TXT@dogma.slashnull.org, 0916.10.TXT@dogma.slashnull.org, + 0916.11.TXT@dogma.slashnull.org, 0916.12.TXT@dogma.slashnull.org, + 0916.13.TXT@dogma.slashnull.org, 0916.14.TXT@dogma.slashnull.org, + 0916.15.TXT@dogma.slashnull.org, 0916.16.TXT@dogma.slashnull.org, + 0916.17.TXT@dogma.slashnull.org, 0916.18.TXT@dogma.slashnull.org, + 0916.19.TXT@dogma.slashnull.org, 0916.20.TXT@dogma.slashnull.org, + 0916.21.TXT@dogma.slashnull.org, 0916.22.TXT@dogma.slashnull.org, + 0916.23.TXT@dogma.slashnull.org, 0916.24.TXT@dogma.slashnull.org, + 0916.3.TXT@dogma.slashnull.org, 0916.4.TXT@dogma.slashnull.org, + 0916.5.TXT@dogma.slashnull.org, 0916.6.TXT@dogma.slashnull.org, + 0916.7.TXT@dogma.slashnull.org, 0916.8.TXT@dogma.slashnull.org, + 0916.9.TXT@dogma.slashnull.org, 0913.1.TXT@dogma.slashnull.org +Subject: =?big5?Q?re:=B7Q=ADn=ADP=B4I,=A7A=C1=D9=ADn=B5=A5=A6h=A4[?= +MIME-Version: 1.0 +X-Mailer: bNngf4C0mjSsqJIXFFxHjZeAH9ON5 +X-Priority: 3 +X-Msmail-Priority: Normal +Content-Type: multipart/related; type="multipart/alternative"; boundary="----=_NextPart_dDSo3gGXsd1lAyTI8" + +This is a multi-part message in MIME format. + +------=_NextPart_dDSo3gGXsd1lAyTI8 +Content-Type: multipart/alternative; + boundary="----=_NextPart_dDSo3gGXsd1lAyTI8AA" + + +------=_NextPart_dDSo3gGXsd1lAyTI8AA +Content-Type: text/html; + charset="big5" +Content-Transfer-Encoding: base64 + +PGh0bWw+DQoNCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29u +dGVudD0iemgtdHciPg0KPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNaWNyb3NvZnQg +RnJvbnRQYWdlIDUuMCI+DQo8bWV0YSBuYW1lPSJQcm9nSWQiIGNvbnRlbnQ9IkZyb250UGFnZS5F +ZGl0b3IuRG9jdW1lbnQiPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50 +PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9YmlnNSI+DQo8dGl0bGU+s2+sT6llsFWl0bFNt368c6dppL2l +caVOtW+kxaq9sbWmXqtItUyqa7G1pqwgy+c8L3RpdGxlPg0KPC9oZWFkPg0KDQo8Ym9keT4NCg0K +PHAgc3R5bGU9Im1hcmdpbi10b3A6IDBweDsgbWFyZ2luLWJvdHRvbTogMHB4Ij48Zm9udCBjb2xv +cj0iIzgwODA4MCI+DQqzb6xPqWWwVaXRsU23frxzp2mkvaVxpU61b6TFqr2xtaZeq0i1TKprsbWm +rCDL5yB+ICE8L2ZvbnQ+PC9wPg0KPGhyIFNJWkU9IjEiPg0KPGRpdiBhbGlnbj0iY2VudGVyIj4N +CiAgPGNlbnRlcj4NCiAgPHRhYmxlIHN0eWxlPSJib3JkZXI6IDFweCBkb3R0ZWQgI0ZGMDAwMDsg +OyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2UiIGhlaWdodD0iMzY1IiBjZWxsU3BhY2luZz0iMCIg +Y2VsbFBhZGRpbmc9IjAiIHdpZHRoPSI2MDQiIGJvcmRlcj0iMCIgYm9yZGVyY29sb3JsaWdodD0i +IzAwODAwMCIgYm9yZGVyY29sb3I9IiMxMTExMTEiPg0KICAgIDx0cj4NCiAgICAgIDx0ZCB2QWxp +Z249ImNlbnRlciIgYWxpZ249Im1pZGRsZSIgd2lkdGg9IjU5OCIgYmdDb2xvcj0iI0ZGRkYwMCIg +aGVpZ2h0PSIzNjUiPg0KICAgICAgPHAgYWxpZ249ImNlbnRlciI+oUA8L3A+DQogICAgICA8cCBh +bGlnbj0iY2VudGVyIj48Zm9udCBmYWNlPSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjMDAwMEZG +Ij6mbqpCpM2w2iE8L2ZvbnQ+PC9wPg0KICAgICAgPHAgYWxpZ249ImNlbnRlciI+PGZvbnQgZmFj +ZT0ivNC3osXpIiBzaXplPSI0IiBjb2xvcj0iIzAwMDBGRiI+DQogICAgICCzXKZopEiv4KRPqFOm +s6Txp0GmbiymXaywtHi0pKRGrsm+9zwvZm9udD48L3A+DQogICAgICA8cCBhbGlnbj0iY2VudGVy +Ij48Zm9udCBmYWNlPSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjMDAwMEZGIj6p0qVIpGq1b6dR +passs9C3fq1QtEksPC9mb250PjwvcD4NCiAgICAgIDxwIGFsaWduPSJjZW50ZXIiPjxmb250IGZh +Y2U9IrzQt6LF6SIgc2l6ZT0iNCIgY29sb3I9IiMwMDAwRkYiPrNcpmg8L2ZvbnQ+PGZvbnQgZmFj +ZT0ivNC3osXpIiBjb2xvcj0iI0ZGMDAwMCIgc2l6ZT0iNiI+vve3fDwvZm9udD48Zm9udCBmYWNl +PSK80LeixekiIHNpemU9IjQiIGNvbG9yPSIjMDAwMEZGIj6lbqr5rsksqbmpuaV1PC9mb250Pjxm +b250IGZhY2U9IrzQt6LF6SIgY29sb3I9IiNGRjAwRkYiIHNpemU9IjYiPqazM6ztxMEhPC9mb250 +PjwvcD4NCiAgICAgIDxwIGFsaWduPSJjZW50ZXIiPjxmb250IGZhY2U9IrzQt6LF6SIgc2l6ZT0i +NCIgY29sb3I9IiMwMDAwRkYiPrROpl2ssCZxdW90OzwvZm9udD48Zm9udCBmYWNlPSK80Leixeki +IGNvbG9yPSIjMDAwMEZGIiBzaXplPSI1Ij6ko6XMpN8mcXVvdDs8L2ZvbnQ+PGZvbnQgZmFjZT0i +vNC3osXpIiBzaXplPSI0IiBjb2xvcj0iIzAwMDBGRiI+s3m0TrNcpmikSKZis2+4zKaopVw8L2Zv +bnQ+PC9wPg0KICAgICAgPHAgYWxpZ249ImNlbnRlciI+PGZvbnQgZmFjZT0ivNC3osXpIiBzaXpl +PSI0IiBjb2xvcj0iIzAwMDBGRiI+s8yxTbd+qrq5zraku7K+ybF6PC9mb250PjwvcD4NCiAgICAg +IDxwIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly92aWMuaDhoLmNvbS50dy8iPg0KICAg +ICAgPGZvbnQgc2l6ZT0iNiIgZmFjZT0ivNC3osXpIiBjb2xvcj0iI0ZGMDAwMCI+MrhVpLi26qRA +rdOkcKbRwfOqurnaPC9mb250PjwvYT48L3A+DQogICAgICA8cCBhbGlnbj0iY2VudGVyIj4yMKTA +xMGs3cC0s2+t0773t3wsp0G0TqxPptukdqq6pUSkSCGvrLF6pm65QjwvcD4NCiAgICAgIDxwPjxm +b250IGNvbG9yPSIjZmYwMGZmIj48YSBocmVmPSJodHRwOi8vdmljLmg4aC5jb20udHcvIj4NCiAg +ICAgIGh0dHA6Ly92aWMuaDhoLmNvbS50dzwvYT48L2ZvbnQ+PHA+PGZvbnQgY29sb3I9IiNGRjAw +MDAiPg0KICAgICAgPHNwYW4gbGFuZz0iZW4tdXMiPjxmb250IHNpemU9IjciPnBzOjwvZm9udD48 +L3NwYW4+t1G2aaRAqEKqvrlEpnCm86ZirmG7tMNQpc669Lj0wcikar/6LKVpPC9mb250Pjxmb250 +IHNpemU9IjQiIGNvbG9yPSIjMDAwMEZGIj6nS7ZPs/imV7r0uPSvU7BWPC9mb250PjxwPg0KICAg +ICAgPGZvbnQgY29sb3I9IiNGRjAwMDAiPqZwqkesebZxuUywqqzdpKOo7L11pFe8dqT5LKVpr8Go ++qdLtk+z0Ld+pfq60DwvZm9udD48Zm9udCBjb2xvcj0iIzAwMDBGRiI+KL3QpmKtuq22r2SkValt +ple5cbjcpu2nfSk8L2ZvbnQ+PHA+oUA8cD4NCiAgICAgIKFAPHA+oUA8cD6hQDwvdGQ+DQogICAg +PC90cj4NCiAgPC90YWJsZT4NCiAgPC9jZW50ZXI+DQo8L2Rpdj4NCjxociBTSVpFPSIxIj4NCjxw +IHN0eWxlPSJtYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1ib3R0b206IDBweCIgYWxpZ249ImNlbnRl +ciI+DQo8Zm9udCBjb2xvcj0iI2ZmMDAwMCI+pnCms6W0wlq90KijvcyhQaSjt1GmQaasqOymuatI +vdCr9iZuYnNwOyAtJmd0OyZuYnNwOyAoPGEgaHJlZj0iaHR0cDovL3gtbWFpbC5oOGguY29tLnR3 +IiB0YXJnZXQ9Il9ibGFuayI+qdqmrLxzp2k8L2E+KTwvZm9udD48L3A+DQoNCjwvYm9keT4NCg0K +PC9odG1sPg== + + +------=_NextPart_dDSo3gGXsd1lAyTI8AA-- +------=_NextPart_dDSo3gGXsd1lAyTI8-- + + + + diff --git a/Ch3/datasets/spam/spam/00339.16bd110d8aa11e7d9398287c27b1b389 b/Ch3/datasets/spam/spam/00339.16bd110d8aa11e7d9398287c27b1b389 new file mode 100644 index 000000000..4307cc991 --- /dev/null +++ b/Ch3/datasets/spam/spam/00339.16bd110d8aa11e7d9398287c27b1b389 @@ -0,0 +1,68 @@ +From letssell2620i36@2nd-world.fr Tue Sep 17 11:40:35 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id B1C3716F03 + for ; Tue, 17 Sep 2002 11:40:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 17 Sep 2002 11:40:34 +0100 (IST) +Received: from 2nd-world.fr (customer.iplannetworks.net [200.69.228.133] + (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8H0gxC19862 for ; Tue, 17 Sep 2002 01:43:00 +0100 +Received: from [142.236.177.71] by rly-xr01.nihuyatut.net with smtp; + Mon, 16 Sep 2002 21:40:55 -0200 +Received: from unknown (73.196.152.121) by rly-xl05.dohuya.com with QMQP; + 16 Sep 2002 19:38:15 +0500 +Received: from 84.231.113.186 ([84.231.113.186]) by mta85.snfc21.pibi.net + with esmtp; 17 Sep 2002 00:35:35 -0000 +Reply-To: +Message-Id: <010e64c54d7b$1722c2a1$2ee55cb5@ajeklp> +From: +To: +Subject: fwd: NORTON SYSTEMWORKS CLEARANCE SALE_ONLY $29.99 7126kyiK0-697yFCQ4277rqZm-24 +Date: Tue, 17 Sep 2002 03:26:40 -0300 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: The Bat! (v1.52f) Business +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00E2_80E42E6E.B7623D35" + +------=_NextPart_000_00E2_80E42E6E.B7623D35 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +QVRURU5USU9OOiBUaGlzIGlzIGEgTVVTVCBmb3IgQUxMIENvbXB1dGVyIFVz +ZXJzISEhDQoNCipORVctU3BlY2lhbCBQYWNrYWdlIERlYWwhKg0KDQpOb3J0 +b24gU3lzdGVtV29ya3MgMjAwMiBTb2Z0d2FyZSBTdWl0ZSAtUHJvZmVzc2lv +bmFsIEVkaXRpb24tDQoNCkluY2x1ZGVzIFNpeCAtIFllcyA2ISAtIEZlYXR1 +cmUtUGFja2VkIFV0aWxpdGllcw0KQUxMIEZvciAxIFNwZWNpYWwgTE9XIFBy +aWNlIQ0KDQpUaGlzIFNvZnR3YXJlIFdpbGw6DQotIFByb3RlY3QgeW91ciBj +b21wdXRlciBmcm9tIHVud2FudGVkIGFuZCBoYXphcmRvdXMgdmlydXNlcw0K +LSBIZWxwIHNlY3VyZSB5b3VyIHByaXZhdGUgJiB2YWx1YWJsZSBpbmZvcm1h +dGlvbg0KLSBBbGxvdyB5b3UgdG8gdHJhbnNmZXIgZmlsZXMgYW5kIHNlbmQg +ZS1tYWlscyBzYWZlbHkNCi0gQmFja3VwIHlvdXIgQUxMIHlvdXIgZGF0YSBx +dWljayBhbmQgZWFzaWx5DQotIEltcHJvdmUgeW91ciBQQydzIHBlcmZvcm1h +bmNlIHcvc3VwZXJpb3IgaW50ZWdyYWwgZGlhZ25vc3RpY3MhDQoNCjYgRmVh +dHVyZS1QYWNrZWQgVXRpbGl0aWVzLi4uMSBHcmVhdCBQcmljZSENCkEgJDMw +MCsgQ29tYmluZWQgUmV0YWlsIFZhbHVlIQ0KDQpZT1VSUyBmb3IgT25seSAk +MjkuOTkhICA8SW5jbHVkZXMgRlJFRSBTaGlwcGluZyE+DQoNCkRvbid0IGZh +bGwgcHJleSB0byBkZXN0cnVjdGl2ZSB2aXJ1c2VzIG9yIGhhY2tlcnMhDQpQ +cm90ZWN0ICB5b3VyIGNvbXB1dGVyIGFuZCB5b3VyIHZhbHVhYmxlIGluZm9y +bWF0aW9uIQ0KDQoNClNvIGRvbid0IGRlbGF5Li4uZ2V0IHlvdXIgY29weSBU +T0RBWSENCg0KDQpodHRwOi8vZXVyby5zcGVjaWFsZGlzY291bnRzNHUuY29t +Lw0KKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr +KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KVGhpcyBlbWFp +bCBoYXMgYmVlbiBzY3JlZW5lZCBhbmQgZmlsdGVyZWQgYnkgb3VyIGluIGhv +dXNlICIiT1BULU9VVCIiIHN5c3RlbSBpbiANCmNvbXBsaWFuY2Ugd2l0aCBz +dGF0ZSBsYXdzLiBJZiB5b3Ugd2lzaCB0byAiT1BULU9VVCIgZnJvbSB0aGlz +IG1haWxpbmcgYXMgd2VsbCANCmFzIHRoZSBsaXN0cyBvZiB0aG91c2FuZHMg +IG9mIG90aGVyIGVtYWlsIHByb3ZpZGVycyBwbGVhc2UgdmlzaXQgIA0KDQpo +dHRwOi8vZHZkLnNwZWNpYWxkaXNjb3VudHM0dS5jb20vb3B0b3V0ZC5odG1s +DQorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr +KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQoNCg0KNjYxOHVF +QlU5LTc3NGZEVlEyMzcybDIwDQo4MjI3bDQ= + + diff --git a/Ch3/datasets/spam/spam/00340.520783fd73bb73df88d6effd04e1f55d b/Ch3/datasets/spam/spam/00340.520783fd73bb73df88d6effd04e1f55d new file mode 100644 index 000000000..25d3112a6 --- /dev/null +++ b/Ch3/datasets/spam/spam/00340.520783fd73bb73df88d6effd04e1f55d @@ -0,0 +1,70 @@ +From financeus034818w01@yahoo.com Tue Sep 17 11:40:44 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 2B7C816F03 + for ; Tue, 17 Sep 2002 11:40:43 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 17 Sep 2002 11:40:43 +0100 (IST) +Received: from yahoo.com ([203.226.230.21]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g8H3WKC25106 for ; + Tue, 17 Sep 2002 04:32:20 +0100 +Received: from [144.26.184.74] by m10.grp.snv.yahui.com with local; + Tue, 17 Sep 0102 14:12:41 -0300 +Received: from unknown (HELO sparc.zubilam.net) (89.207.162.132) by + smtp013.mail.yahou.com with asmtp; 17 Sep 0102 11:08:17 -0600 +Reply-To: +Message-Id: <033a83b31d8c$2226c6b3$8cc54ed8@kxvhog> +From: +To: +Subject: Teach and Grow Rich +Date: Tue, 17 Sep 0102 16:06:15 -1100 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00C5_22E25E1D.D0727B17" + +------=_NextPart_000_00C5_22E25E1D.D0727B17 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +IA0KICAgICAgICAgICAgICAgICBEbyBZb3UgV2FudCBUbyBUZWFjaCBhbmQg +R3JvdyBSaWNoPw0KDQoNCg0KDQoNCklmIHlvdSBhcmUgYSBtb3RpdmF0ZWQg +YW5kIHF1YWxpZmllZCBjb21tdW5pY2F0b3IsIEkgd2lsbCBwZXJzb25hbGx5 +IHRyYWluIHlvdSB0byBkbyAzICAyMCBtaW51dGVzIHByZXNlbnRhdGlvbnMg +cGVyIGRheSB0byBxdWFsaWZ5IHByb3NwZWN0cyB0aGF0IEkgY2FuIHByb3Zp +ZGUgdG8geW91LiAgV2Ugd2lsbCBkZW1vbnN0cmF0ZSB0byB5b3UgdGhhdCB5 +b3UgY2FuIG1ha2UgJDQwMCBhIGRheSBwYXJ0IHRpbWUgdXNpbmcgdGhpcyBz +eXN0ZW0uICBPciwgaWYgeW91IGhhdmUgMjAgaG91cnMgcGVyIHdlZWssIGFz +IGluIG15IGNhc2UsIHlvdSBjYW4gbWFrZSBpbiBleGNlc3Mgb2YgJDEwLDAw +MCBwZXIgd2VlaywgYXMgSSBhbSBjdXJyZW50bHkgZ2VuZXJhdGluZyAodmVy +aWZpYWJsZSwgYnkgdGhlIHdheSkuICANCg0KUGx1cyBJIHdpbGwgaW50cm9k +dWNlIHlvdSB0byBteSBtZW50b3Igd2hvIG1ha2VzIHdlbGwgaW4gZXhjZXNz +IG9mICQxLDAwMCwwMDAgYW5udWFsbHkuDQoNCk1hbnkgYXJlIGNhbGxlZCwg +ZmV3IGFyZSBjaG9zZW4uICBUaGlzIG9wcG9ydHVuaXR5IHdpbGwgYmUgbGlt +aXRlZCB0byBvbmUgcXVhbGlmaWVkIGluZGl2aWR1YWwgcGVyIHN0YXRlLiAg +TWFrZSB0aGUgY2FsbCBhbmQgY2FsbCB0aGUgMjQgaG91ciBwcmUtcmVjb3Jk +ZWQgbWVzc2FnZSBudW1iZXIgYmVsb3cuICBXZSB3aWxsIHRha2UgYXMgbXVj +aCBvciBhcyBsaXR0bGUgdGltZSBhcyB5b3UgbmVlZCB0byBzZWUgaWYgdGhp +cyBwcm9ncmFtIGlzIHJpZ2h0IGZvciB5b3UuICANCg0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAqKio4MDEtMjk2LTQ0MTAgKioqIA0KDQpQbGVhc2Ug +ZG8gbm90IG1ha2UgdGhpcyBjYWxsIHVubGVzcyB5b3UgYXJlIGdlbnVpbmVs +eSBtb25leSBtb3RpdmF0ZWQgYW5kIHF1YWxpZmllZC4gIEkgbmVlZCBwZW9w +bGUgd2hvIGFscmVhZHkgaGF2ZSBwZW9wbGUgc2tpbGxzIGluIHBsYWNlIGFu +ZCBoYXZlIGVpdGhlciBtYWRlIGxhcmdlIGFtb3VudHMgb2YgbW9uZXkgaW4g +dGhlIHBhc3Qgb3IgYXJlIHJlYWR5IHRvIGdlbmVyYXRlIGxhcmdlIGFtb3Vu +dHMgb2YgbW9uZXkgaW4gdGhlIGZ1dHVyZS4gIExvb2tpbmcgZm9yd2FyZCB0 +byB5b3VyIGNhbGwuICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAqKio4MDEtMjk2LTQ0MTAg +KioqIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQpfX19fX19f +X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f +X19fX19fX19fX18gDQoqVG8gYmUgdGFrZW4gb3V0IG9mIHRoaXMgZGF0YWJh +c2U6IA0KIGFydDkwNUBjb25zdWx0YW50LmNvbSAgDQoNCg0KDQoNCg0KMjA0 +NE1KTGk2LTc5M2dvTk4xMzA3V29sWDUtNTgxdkZzdTcwMjNuQnhkOC0xbDQy +DQoxNjE1eUpTZjMtMDk3YU1aTzMxMDJuUUpZMi04OTJsMjg= + + diff --git a/Ch3/datasets/spam/spam/00341.99b463b92346291f5848137f4a253966 b/Ch3/datasets/spam/spam/00341.99b463b92346291f5848137f4a253966 new file mode 100644 index 000000000..8f5ce2518 --- /dev/null +++ b/Ch3/datasets/spam/spam/00341.99b463b92346291f5848137f4a253966 @@ -0,0 +1,3080 @@ +From AdvertSpRj40@cs.com Tue Sep 17 11:41:33 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0948E16F03 + for ; Tue, 17 Sep 2002 11:40:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 17 Sep 2002 11:40:46 +0100 (IST) +Received: from cs.com (12-245-142-206.client.attbi.com [12.245.142.206]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8H9cKC04150 for + ; Tue, 17 Sep 2002 10:38:21 +0100 +Message-Id: <4174-22002921794043650@cs.com> +Errors-To: AdvertSpRj40@cs.com +From: "Adverting Department" +Organisation: JOHNSON HOME PRODUCTS & SERVICES +To: "zzzz@spamassassin.taint.org" +Subject: May I have a moment of your Time PLEASE +Date: Tue, 17 Sep 2002 05:40:44 -0400 +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="----=_NextPart_000_01BC2B74.89D1CCC0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_01BC2B74.89D1CCC0 +Content-Type: multipart/alternative; + boundary="----=_NextPart_84815C5ABAF209EF376268C8" + +------=_NextPart_84815C5ABAF209EF376268C8 +Content-type: text/plain; charset=windows-1252 +Content-Transfer-Encoding: quoted-printable + +Dear Sir/Madam + +Wishing you a wonderful day=2E With an offer, to save you money and time= +=2E Shopping from the convenience from home or office=2E +Window shopping, A new way to go window shopping=2E Our online super store= + offers over 1500 quality products, with 15 plus categories=2E +For you to, window shop through=2E=20 + +The following are E-coupons numbers, which you can use with any order=2E Y= +ou place from Johnson Home Products Online Super Store=2E +During the check out process of our online secure shopping cart system ord= +er form, you will be prompt to enter in the E-coupon +number=2E which will give you, your discount on any order you place with J= +ohnson Home Products Online Store=2E All major Credit cards +accepted=2E + +Please visit us at!=20 +http://www=2Ejohnsonhome2276=2Ecom + +E-Coupon Numbers: + +MJ95L594568JWWL 5% off any order ! E-coupon Expires's 01/14/2003 = +any orders, maximum cash value of $5=2E00 off=20 +MJ633554962R89O 10% off any order ! E-Coupon Expires's 01/302003 a= +ny orders, maximum cash value of $10=2E00 off=20 + + +This is not spam I received your email from an email list you may have sub= +script to or from the search engine emailing list, from your submission to= + search engines=2E If you have received this email by error, I am sorry fo= +r any inconvenience=2E To be remove from the emailing list, reply to this = +email with the word remove in the subject area of the email=2E + +the file attached to this email is a Html Document file of the E-coupon fo= +r viewing or for printing out to send in with mail in orders=2E + +Thank you for your time! + +God Bless you! +Sincerely, + +Bob Johnson +Email me with any concerns, comments, or problems, or to be removed from t= +he emailing list=2E +AdvertSpRj40@cs=2Ecom + + +To be removed from my Email list Please reply to this email=2E type "remov= +e" in the subject area of the email=2E + + + +------=_NextPart_84815C5ABAF209EF376268C8 +Content-Type: text/html; charset=windows-1252 +Content-Transfer-Encoding: quoted-printable + + + + + +Welcome + + +
    +3D"Welcome"

    Click= + on to continue

    +
    + + + + +------=_NextPart_84815C5ABAF209EF376268C8-- + +------=_NextPart_000_01BC2B74.89D1CCC0 +Content-Type: image/gif; name="ecp10cc.gif" +Content-Transfer-Encoding: base64 +Content-Description: ecp10cc.gif +Content-Disposition: attachment; filename="ecp10cc.gif" + +R0lGODlhfQIGAfcAAPn6/er3/PPp/Nv3+/b47v0CA+no+vTo7Nrm7Nvn+AEB2jEzAtn07gIB4trY +9+jZ+fHa+wEjAuj17fDL+fPY6eTJ6+bK+ObY68z3+8rX9wALAMvm7Mvn+MnI9veJjfpDPce79ebY +3LGy8flJTPawtPR3iPO1x/eEfdnY68jX6v0aJLbN8Ofm7PdscPovMnyE8fs7Rerk3NnJ94yN7trY +29a76sTFufojHcrV2uW667C0sMzy6mBfP5CViTEv5djI69TH2XmNheCv/0E83/9/oPCWq7rl7fhZ +ZtW52vhkXebH2FFSLKKckHBw7Ji28fnX2r3k+lNpUa2T7DxWRMW52T5B5cjH6dbj2vbDusfH2kA8 +E2lrSh8j2Zym9oR67mNb7/TK59e796Cff/OknUxM57bDuCMb3R8i5JOP2j1BE7nIz0dZR8Kp9EE8 +5+vGyldg3zJMM5WjlIyo5h86JPnH1HaGcaipltLVyfzWzMa66FpyZUA9IIR7a3uH3253aZnG811k +6KCn37349ay61sao2pepqNukw5/Y9xtAG99PX4qLciId4/C89ZCgcMbSyK+o36+n0N9xfIeAX+XQ +yisr2/rHyEtL3bKK23+X/8aX4IB3X6V44+W89/C768jJyY/A8OyUx6ezxZTM37m5xcasyaSEyR9A +IVpj8Imv3SI7JNaQsJWXqnV7hK/k99e3x9jGxkRGGDxF2mVnPIa446+g37q42HRv2jpiRdiLmNOt +92+E93mDXbOX26V30qiI2HiZ2KiYscO4yJ/EteCo4DBgP2CA33uE6WJdSbCYzInG5MezuZi36Zmn +6JRy0Kqoyrem2HOx299ziG9Y39+o4KuayNap2Hqo5auW12+Z2n/H53fD35dkv19w719w8IC68Map +6MeT34Wn/1hjOXmV6ZfH6af9/3+Qz4zU5o/X+5PV6bWpy2+r52e354r8/5z6/Hr8+mCo8G/H8HCI +wIDg74Dv/3Cw/2D4/2Df/2/X71ev92+f/2CI72+w/1CX75fk9wAAACH/C05FVFNDQVBFMi4wAwEA +AAAh/kVKb2huc29uIEhvbWUgUCZTIE9ubGluZSBTdXBlciBTdG9yZSAoaHR0cDovL3d3dy5qb2hu +c29uaG9tZTIyNzYuY29tKS4AIfkEACwBGgAsAAAAAH0CBgEACP8AdRX7E26ft3X68KHrxy4evHz0 +4K2jx69eOXTx0Pmzx03QPXeC3r1rR7Jcu3IY3LkbMMBduQGCUAoShGEmywEBAOjcCSDATQY3b+Zk +GaCozwE9cxrNybOp06dQo0qdSrWq1atYs2rdyrUrzwNew4odS7as2bNo06qNGuIAWAAECOiMC9ep +XKt3o8YFm3et37+AAwseHJYp4cOIEytezHhn27dSBTztOzWuZQJuY8Q4QLex58+gQ4seTbq06dNU +Hzc1PHcn5dZyY9t1jbluT9S4c+vezbu3799mVVN9PZw23AMS5hIHzry58+fQo0vPKrzpcutwr8/l +GyC2ZdvTw4v/H0++vPnA1aeylnq9aOvz8OPLn09fsPa1biGHpdtZOf/u99Un4IAEFmggYPnN5hpP +AdaW3YMAuKUTchBupZ1sBy7IHnhaBZihXhr2h1WDHb5n31UeEpZiad4RkByHMCpH1XqTNRWDAPqJ +hZkE38lGQAA45hjaiqYR+aGRxYHYFY0jMvgekhgiORZxd0lZHJQeWvlXd0nZ9p1xMfIHXl803vji +lJhFWSVnad7FZFVEavlhjRuWJ2eSXDF1J5ywKZhYTnlVGaKFdYnZZJROPvUmYJf52CeXJr55IQCb +Cbkfa3EBqKehQ1oXqIZVLZqooGQJSllfcXq5G6kkoobqapWh/3gahn7KeJ2Ue9JpIp9Qfbpglb5m +lxyqjub1Fq3aVVqqTjzy1CwAw36ZWK68iTjcq3juWiteTsqZKrexhiljn2aROpu5t1o2bHYu8tdu +XDy+C+9dMUSIWQgSZNZWvhQIIEAIE7RFARgPUFDBZhFOQAEBAQNQAcAVTCBxBTlMgBkFIUAwAcUQ +UCCxxxUcbPC/FIMRMhAIoABEBUg4AAQAIQCxcgUXAEFDzSsDgQQQStRcARAh4EADDlnYjIMaWeCA +AxIIAAGJMzgQkgUkpKQACSQVPEMKFc/UgAQkhBBSAzXIEEIFIZmUQsg1yJQiAymlqE0IL6WUHXcN +z1BDBTJgQ//yzTV0y53JN5dkwksmveBdChq8gMALLYFccIABdXa7k2EtYiaAi4Amd+ZhHi4qalbY +jkmrie426m6EFNi7GWZugSGBAMkdEAIYCgvgse4AU+CWEh0rDIDESGxsMBIRe6yEwTKEHLIMECCh +hBIRV0B9Di4LYD0QDvzw8/RACCAzDSo7QIX3QLiSRRZq7AxEFzzzz0TwUSwfxACNFZDKJ0MANs7QwK +anDayp6BNWSQghRIQAIvagC2WpDiamBLGzKQgbgHQCJuhCjFJbbBixz4ghcTmJsUejG3Z0jhEbzo +RS8y4YtLgOMSbFjhNoSQiWZsIhMvvIQv0OYLC7DhEmGQAhv/hLCJID7iEjdkgxA3IYVLSAENSkQD +GoT4RFpIIRC/AIET5LACOXRhBWjogBxEIEUROOGMWxTBCsxhRjkEQg5nlIMbVxCIP/wBFYc4RCBW +8IdDJMMJUAhEMg5Bjk8cAo+HOGMXZrHFFSzDCdlwwiE+4YR0zAIKhxDFMkTRij+Igo9dXMEKRNDH +FRziD6JcQSsyYIRBmDEDHXCCKEUAglp2YAW37AAUVpCBDOQhBSvgAAd4OUwoZAAKHDDCIYyAgV72 +sgMcgAI0MwDMDGAgmBiAAjBbkc0UDKAVLAlmCoywAShgYJzCNAIzjbACI6SAA1kwgiBSsIMdrGAH +G0gmKzcw/84N+JMlGPCnQIfJkgwMAAEsSQBOWBKk5HQsBgaz3isooARSTAAM0lMYRUMwPSRQVAlI +mAZIXZFAiyIBgSEgBRAQKLNg6AwJWXCFzGBKCnXIDBKjQNoggkGFYKgDAKSgBiQcUAsqQKIWY6MG +Ep5BiEcQAgSPwFsY2NC2w4EDHCT0RdoEQIheIONsl7jEAtMmBLpd4xpK5IUTw+pEKbiVilJoRgfY +IEU2/HATaADBEzsgAimAIBAiEAFgA/FXNDjhD6RcxjK4aI4u/sIaaOzDLIwgB1RsYAXZOMQsPkEO +PCYDCk6whii8cYh0ZAMVn/gEKv6Q2k9Yw4ySXAYmV5ACJ/+oMQOBBQEqA3tbNfIxsL1MJRR2OUoO +iKADGQgmX3c5TOQmlwMOwOUKjKlK5PJyuKLMQDSh2UxjHlOYq+TAKjGAAQ4cIprhRSZ5s2lOc7J3 +uNkkLxSMkAAOkFeYwoTCDoQ5AA7swKADqIAROKDQVnAAoNlE8AAkMIAMIPTAQcHAABJwFJ8gFAAb +wABCD+oTgzJAoSxhwIZBjICdHBQpGbiNXDYcgBL3JDkGAFJODpATA6AAAAYwAFgO0DoAPAAnDygK +jUss4wC0TjIbSEoF5OIApOgEAk/WSY8px6UcD4DGATgATnRiAAQoNAAGqIB7ioIAyfgLRwAoc4zT +DBYzSwb/SACQDE+YAiQGGDnLksHMAPwVoZxMQDIVSMABBFBmBDAAxwBAQVwc4OUYIIAGBNCe5Ggs +gAsc2igSQECLGZBpGms500m58ZrL7ADKJUBZopgFOTIpijseYhnYOOMvzghYJ6RWs3+QoxMCYVs0 +/GGLgxjEaldg2+OKchm4fScyU3BeKIiAA8+NZnnnO2D7IpOZyRRmQG+S4QGwcwA7WG8vwS1hDACF +ARgwgk/CzZJkLpTLGGA3tys8ADvbeSkUJopPWryUOTPlRYbGsZcF4AAB5HjNAEgAmqkMFj3h2AE9 +QUGLdWKUnhirJxeQS0407TAwGwAnmsaJAfw18ZyQ/DY5/6Yx5QyeAC6TnHKXYxbFe8IAKkPcxzyJ +cYuRIoAAJIdLYOayyYHe8zQLvSg6zrJOQA4AfSfgRywQOJAIwAEKUFgCLZcLjRNQ4pEjgMlk7rmR +4zy5mevkAj2Rs9ojfZwJFUXsKk7Kz1dDY6NHaOZiR7vR+cwUObccACmOcQJaPnijXMAnb/m4ThR+ +FwmQOegjZ7xSzA6r2ySFcg13cQUMcGkxX67v0NKJnOtucKWYuUIAuHmbWeAeljSdxhKI+tYpznUc +IYDGDDgAAsoMlBDcPgQsOEDUKyCZHW8uzHa/wItiDHsD5AssBpABkChsUAAI4cM1GMADALADHMcY +KTVosf8ANoAARmcaBx2gwQEsgAIUZKA7EJczTlhDgUNfuDUMFj2OoSyZPf9o+0pBYwPAaJDyYxEC +czxRdHcXZ5CiFNv3FVcWZzD3FnImZBNieWy3HlCGc2x3G3IGcUq3ExzHAUXBAQi4dGvWZDlBYXA2 +dgyIFE42f5TjZKzhcLeREw4QdPpXerdhAUs3f0EXAHqXgwBAAUBCO08SZxdIcTAndn9nG3tmeQwI +F62XFEbxACOXg3r3gBWgEw+4fYMWAH9naZQjFz33dwhnYjeof3HGcxNWFD5IANtHAEjxIn/Xcvzm +fTtxcgZXgTkmGQkQZAEwATPWEx83OXtWcTP3I0MhZ57/l4ODGAA5kBMWMAAjt2UDeBc8J2IWcIQT +RjliloeKwodBCCQwlmNgNjnu0XNRiHM1NwBysWc9tzABEGRKKHamZ3YTZ4ioiAAMpmldxmWDdwAJ +kAIflwFcl4OVlgAowAIZgALChwKl1mJdt3sBgANcIgEvUmk6qCxa1iVI8SNpNn8Mo2mS8QCSMQE9 +kQM6IQPIYVBJFgAOcGpLlynbV19qpnA9toGgtzmX82YCEIN7mBQ4IWdNp45wloAtCJCfp3+GoXIG +p3MOABk5cQFmZgByMXI9QYFmGIXa93+3QYN0NnOmVxR6dxsqaGEllmcO8CMtN3Jt1oQMAGW1iGO2 +qIAh//hmAMAARdd/F4ATNGl5UShjcXZvMjaAG7mTO6aIc7YTazaBNDh/l5aIAKB8tahwCFVnpQYA +EIAABgABI0cBsNgTPYZ2BGCEDGkYAOkeStiWd9Fzavd2aedkGKB2cGGXTPF3hlGLORF1dFZ4d/cj +SLEURBF5OfaE/vgAL8IUh/Z6lwMWGyAZPDkhEWgvbSlnh9dnbyZxI1kXZcZlHqiEReZ4LCh6EpBj +PZF13hF6E2BnAZmDBgCCEOAmOLKYRggAPyByQyGGqUlxiYh1OEJyaOcvXtll81cBDmBnlvhiyimC +dQEW/RIhyrJvT+mFhOYABTchAtByB1WJQMIBycEBOP+WAYrpMBvwhrqTZhJwaARAZWNXYoOHY6aH +hhlZF9pXFBDAFFs2iGIXYwE5aE72FUm5iFOYdk0Bcye4Ey8ikE3XZWwpjqJXFFwXaf6pcOKnk5MB +Kf7GhkyIgWz4ZgfleFoGZpCYAKh4ei42gDTCckkxehznYlJ4aKHon/iZEwvjFED3I5xHeXLmYjXY +F1RGYZSjcwZgohIKKEiBUDFGYHumYwJHpBa2mBHCAG+Jo4xIZHm2gRv4oT9Sd12SkIcnIbeRnwu4 +o3AJl6BZoK0Rjo25gBdQZgfAaJLxAwVHcIt3ekwxcpXWc+TnE4Yon1FRg2v4dhMGFxhJcRWndsEo +nwL/IIjBaXdxVp/g4aWWSKImWanuGZBFdgDkp3tpJ2YHEGSDRmiU42Ixpo2GMX+3oVBpphpvaACH +p3f5WYtJpp1DNjypuZJ/N4+bo3BFymUQaobeN5ZgNnm+CR476hNkOgFrxgFYJohGN3JyyRo02IQi +KWWUB4uFqJaUdzm2SGVNsaVeGGdZGSo6h45caWqYCCBvVhRv6aVzMZI815S3iIHgGiGScXiG4YMJ +ZxRlV6hYF4P+0p449hY2GK9ph3mix3NEKWe2mHZmNnQ1iQA/SWjL2YLiaJA8aaMS+5ocOpcoN6SL +J7H/55VYCCQwV2IU2qEGcJsfx4pGqJZe+SNdqBQy/3aJS4eLCMuWgtqiVBmKCdCYKkqSTOFiHKcU +XccaYkdp/vZ2OQEUz2qgMcYAPggoCCCuRbeBFnOZlqeAi2diy+l8EpACctkT5adwFIZxCSqeTZdl +JbacHJeylncsjMhlCTJxPqqLrVFzw9l0UfeZ8riwaVZstkWwlOODRWqGPhiz+lElHVBLICACh9qF +OJKQjqp/HMeQCbhlyTdmWUaUPDGYRieGKNuiJscXQFh0D6ipZvgjcTmFp4OofCUFtNQBJrdmURi5 +tuUELWmhbcmvblaVXDpnbBdpmDIUXCmFeEqmDVeISuhkGSgZCKhxfZZ6Q5cBUmAML2AMfdAFVpBw +S//HevbyucnhZKaKZWtqHVYQuYGVZ3HxuLklnl7rFFzzzzp10imkGrE405aA7pqUgnehj5jf+JY3z1 +Al7wAi/QBSJQY252ZjsmlqArmmKXn3IxO6crAPlJnGk2iNjKZ2/GgnhIaZyzcgdqFAH6YqbXc/4J +Fio4SgjcB15ACyBQfAmQnAuomMUKF1mHcw1pGMkhGVgHZgEpZz0WkEWJjkKYhpY2Obuncj6Ho5Da +fxSHZRcQAmhWrJDnhYdmkHdXYw6zkXkbAAwQZDPQAApgxlzAgU3xFvlZlkv4ZmZ8xg0QBm2YcG8W +Fyaadt/on4N5wlIYut36FD1qckiheEUBiRVYrV3/ApEmh2Mq3MB4+JBDJ8dnPAN2i6dcoABnrAAz +ULZvxo+tF3JZ6adjZnkBEHUR6p5UxnF9JqGAOKsQEI5/WnScUYQOKXpapxNscAoNYMa+rMm9DAgZ +IKzg22chhor1Krx06HNPqxOa/Mzvl3AGEMeanGKVuYYLm2Vl15MsmIifW8d/fIOxSHFDyAF9wAW9 +3MvA3MtfAAIzJoQNmnZDlyhmp6kSW8Ms4ZUJtXgUdpEFJ4aCdqbDc1DwCqE6gcobCXM+8Wad+J0v +cAbrrM6a/AUG9XcfCC0S6QUaImcIaHBwQdBetnFj1nBlp4qaank+OqLG2hpF65QDkGQs0WQFKyFC +/+iV/+tj3fGNH11vKCmhMOhiXDcAluDLDdAEPhEXV9xmPkGI8mnQcdYBz6wAaaxxMvYAdtZ0rFhv +kzeRYszFbUjVPLuTaUqtTTGTZQuxriFn/AevUhgAsxnIUXEAeRDVDUCCBQqLIhDVCmCiRuylbkKL +DRfOcwF3Z3eDOdaBd/GAJQZ7eNhyB3CSS2fKZreNEiwFQ0DJmyzHEv0C7ktx4lhxGrejgQoAHaDO +DeAD3UFhIGDaPmDRMecabOmUdwl5D8gTN8fR2werhVx6XuoEvwzMwL3JRi2Bl9mKFcLFb9E6Pwco +Nbu1ciYXEGCQ8Ixzbts5G0kj7lGrxjt1XNkdqP8ZACKQyesc3OncBDTYcx0oAkMtDRxCZxdNeaUm +AbGsnT1xsliII9nZZkAR2X4Ko00Jo2UYG0gafGCRf263h3LRY9CSkDupY0jp1l74IxKtAF2gg7zZ +dBRHaNhxOX2Qzg1gC3LW0AsNF+pYt3tpswriIIoic6JnolY2sjuxxY2MqEvYFHG5KNQr1krxAums +AD5wc38XGx0OzJSgEzeHoE4WsSMXKHkxeQ94gocnug3JIGpXyIn6eX8HGVVSFMnB48FN3s/cy0PA +FBTogSud4YBioDqBCdTcBIVSxs8sDZ0pn5PHvAzukLYoZkDMrxsIlyTMlXhMOVD95ZtM1Jps1Jj/ +x2dInMNdEslMfdJNwQGSIZ6cR5OzGrGJOJReCyRSHnNommaScaN1lwAMNujUHOaZfeg4iGMWYAC0 +cNlm/AJM0Trf7NF/2p4zxnyiS9KXSTl613dGAaeaxpYN93E62JZm6+KCRiG8SSNrdno66Wc9UQGb +uHQHkNeavWeQYcF5AXEJ6ixk8MtScDl3UXavN2hhSIUWELFwdsdUSL20jMvIPmFyMYebw+U7AYk3 +B74GhxMZqHAQsmZKZxQCjuZw4QOZbd7914QBgPDA7OZtCxdEtoGXCChmJmZIjGiDZtH+WBcrJwCN +mQD7GCGdSADU/oWN2cjCGWUdOHSnANxmDAhd/zDMACACmLAI1FzUNlooYkiHFofFAUCCYogTjg0A +VfDLzHCqAaC7IpAHHfDHhSrgTmYAD0h6GysAEicBE9ndffYAP0KTNzmZTBHu6ewDtMBxA+AEQ3Dq +IKCQ/Zp6z+0vByXxdSGGx3dmOTHMWjdjKniRxuuVbAiLlhiKR3aIf/7aDomRb0DNPtAFhDcAr/7L +DZBiXAIBCRDHZgzwBPCE04toq1kbkZbgnyuEEssCTpqQeLl9Hu0i1D2Hnk2vOlbL7a4fDV0BK2l0 ++96JApABa+ljA2ALmT3moXfdcZYAgZUHTRYbecYsGaDXfycBIhAOIjB4BCvF27nDrXjtgYUU+/++ +HmKYW05Qte/R7vWIWyCA/KBt43FmkFTd9HmQAc2ycnwd8RI46RLdADNc47FZ6AogBe4BEAQABAAA +wIEIESAyEAwgYCACABAEMBBIsGCABAAyINwgAYDDgh0GOBGRYYADghkADLBS0EJIEFJAiPgI4IAA +ggIMNBxAsGJNLwoUNGiggFJGkAUBGPBRVKiCjD0HMnRIAMJSAwlFbDhQ0IEBAwUPPB1qkaHSn0sF +ZlxaEKGIBAYSOOwpwEECgndB0OpCM4GDgSsJsmUAgIBApYaHPjUgtevKIUSFNnlQ8EHhxgIOBNj8 +MSfBqxETo11JBWHBwgMNCJBQFUACBiveBhj/4FCCAwkGKgTAOHDA4wB52IBQGtbwQMQAyCq4abh1 +wSFDizbBuXSAlMUKhni8+FEC740JQSDGKVCAwMrel15IMHPFUs5hcVoBQXKlZgkIeItdSSBz8poK +Mi4ACQjoirbubAIAA50GCAuiAA4LLDUDIBqoQLx8IKuPDQJ4oCUAQOgjsqecImOGLAQEgAEHnJBO +gSoAmKGNopz6goOCMiKAty5qbOAFDl5oysc3RADJIYJEeKPGEhcBRCUF0RrghVickkyBN2YY7bUA +mBGqqBkGMEbDK9/A8QLeHDJgx/N2LIgAFxdrIDGfCBBABDkVGOCjuATwoo3lhDrRrAcIqqCL/y8V +eAGBYrhokib/+jiDqKK4eCGsw/aU4IADhLRSqCHkKIw3BLnczwAJ2svziyMLGuCwABDwUQEty7tT +Ti+CHJJSMjIo1LMEenyqCo+6csJKMlACIJDs+tB1uV5rwlSAAfrQMFEYvbDJgowc2DOBATIKQNk2 +yWpABAbkAokAEYZo45Q+ZgDsWKcs2TMwAJogK0wcpmpKKDNWeGHSK7l5bykKClJTyOyIikVLvCwC +gJkrw3zBUTBVBIC7gXDKTgE5HNAMzYKccLcJL+TQTFgmrZSmpgT+pLREMtA4L8ADEK0REwSMOWOx +Gdb8awYyyari0teO23Jpn5re2M7XErhAp/+LJKgAAQEssNAwxAAM7LGCZHixAeKmJgCBGbiQzClz +h+gC6gAM0PfLIX4uscSutpY7OzLMuNvKrwB4aQAyvmR75ga0JAAwO2e4ku1EKSEOrQCKYRKQu0ts +YKeCsP5MKQEc+sJwMlZMEIAHRn+KjAgbc3y5WRXwQSWfDhhA9enMYFJOES4296kZCHhJIwFegDzR +oshAyj+Fm1cK0Bp94KDr7ngjAHNKLbGJoANsSfSU3c0Vl+u5heqjO0Aq5qx4stJH3Cku9qQgQj9j +//gN47yOkM6ClnyRjC4wQGIY2tEFDHCALzCpCZ8RiN2KopLDnM1wV9KcArigEgEg4CZT+lT/nhTw +hQxUpyvcIAsIaPQUH1zAeeYxDGvIcLg3dIEgFtoTbfa0p/IdTihS+I4cHtewoswOAAioyBtKJIJr +CYULYQnAC3RnpU8pTyBdOYCElLI/zsSKfwCIQWfetCUHUQtCgfFI3ALTkBUpqwIzSBQXABCGnmRg +dLPyQRuGtBgzQKkgfguUD14IRTQY5DATWYR0ZuaDyFCKKOdTiyXMVYUhkKhE41GKvqDog1hQgoJ5 +RIsB1KZDRPrNR0EbiBeVlhhHLeYMQ4BkLFhZBUtUiW02G0gCkYfIE8ppfAWZ1N/saDjZLaaOmquC +WQAwR1VWgUyS+UILOyYxwxyAA5ADwb26/3Mzw7ygRLG4IgB+9rgG1FGUX5pBenCCMaGs4IBh6eVQ +2AKARcyqKLGowtoyBpJTIG8RdkTcG5CilK60qjsg8OBQAOGEqSAHOQRQ21M6AKAVyOkMDcFgDqUj +zo+x7j4B8N9T9nktp7zhKhYhGFEosRyabMZB3XRTB8YmnTdIwSs7ukpFNPm+L6kkgTOTXd3GdsHV +GKiQkllmURBqACMmygxDKFpRAAE2Y64IJChBwK8KhRHOcCowOIEmCzUToIRtSaAJSOpQSqcfAPTB +kApoAogAwIF/FQV/BbHC2oZyivE4SJK0+oibpvkpS6gkI9FxyguUkgG2AeIsCJhjAxbhBf+QaPNF +TXAAYhJw0pAaR5o6JAOOCgJSRSXlVax5THVAQEEoHs9KIiCI8eTUhAyEBgSa/NIbDBQSbJmhD7xh +gDZ5+gIC7ElnQolRX9VKVBEYwUEdSKICOMBb3nBuTXaypFB8IMiBPICrczmPZOfZmgAwQAgTbECv +cCKAOzZAWwZ5jbkYlwAOkIULt81Aw7CUALY09XwNkSyoaFKQDMRVAR3oDgMQEK4dWUCAnbkT5B5X +JIyoSQD1lcwirAmADrCxRm9I6DFfpAAyWAFcEvCCXQlcKO+Gk7WtScCuGpCBA6gwAYHigrwkgILz +hC50YsFJAvQzAGH9jijSkCEB5pIjAs3/bTrnBYBrn+IFAjvEAem1hAUI0oHjnWEGHBiASQBgjMgR +ZzMooK1QaHeBzkhFgxj5igEyEBap8UaDWjVMThIDkgdshlpy0aB50kQQAzDAIQwYalEMSwAcIJZt +M0iAQCwQugO0DDAAwESeMKFghjhSMoFYiXfYmJ0ZRGh4L3wKJgaJJyb54AuPOEmIAMMZg1B4McVo +iEMEAN9ZTS+4nwaeftYEgMI9RQqjAhD3amg8e2KrgkI5gwMQYAHIaesAbAHXcthSvMMZ6QBrUrJQ +gqcaMDsFEKgLwF+ZLYAw3CS8eJKOtgR4nwNsoLLjqkKiDKuj8BIkXHELAG0NvZqC+PYp/y+4oQA4 +EOyhzKDHBnCcU07xqpVoWCjduIjEi4IGNOrEElZSHGKlE7+qqDBOi9xqp81CrXsFYAIJcOIPKTUE +1t72dQbd2meZ1AWwACYB4wTxX8Clk3ouxrBdzk4e/VODnbC7KJAN+O6GoEIDjBQwFbLIADSYGt5g +YGBrzU4VqvnOgTSXFsyjsFMwgZGwGOACA2jZQpr8qTbopzIEeAACErUIHFGrAgTw4WL6YOu2KGUC +dam1BpcCEjQfwCN1eQ1aP9KVR4/rByeRgfwcRIHa8AYCvHnEcloCAgH0gW3FbLRBzEhYodBEAI5c +zBfKDZjCHE7ntHnAH0F1Q598So8BiP/n3xRwhj50wCwoaQLb2oCkSSOAAfV2ShceEmyikEEzCeDO +E4ci/KS9hlo4UTfhjPaCGYD/BX14wQu8QDChuB4CliTKEKJLEdUwfyigLwipiaLYB7BhJZqejEXs +tHFKkQKuyqdhmQFb0IXy8wL3MTT2Eo0A2LyGCACU6jQ9c54JWw4ngIAp8p+icD+2QAnrcy4mQio5 +eYFRIUHgsTXogxGvyBHd8wj3Ia7xmwEafIH0+RIT5AkBeIA90bN7SY3asB0QaIKGwhayoT374yuu +CRFsEQiUEACCYhsUULuU8x7pCCQGIMD2K78XMIYurC712o+kKoozgCD8EoieiDDusbP/i9gNAGCD +Pkil3TmXnBAIl/KR5smhIUAVz0iXAai3p1iB80C4Bmi2HkyTGxyKIRi/F0CDJpgBZEqc3tgRNxmi +Iaoq2tsTaukcTgmoALCAQMsAxECrDPAxBHC2DFiIAKAAnYhAuhOgGggK+MGACgi7mRHAk/ssskAo +AICcPKCNiEE164KID5wVEOCNe3GpxViEx3gAAugAPlItBWiD6dk+zCKKMHGVwIurc3ETyGGDxTmO +O6yU4kiMA/ONneAjb/O/rRqAsZECK2uuLriZCfAKpngRIykIyBGBARAJjZiVqfmiT6msjSnC4/kY +QwtH9uqNuEmA3UEorjqb7jAy1iMK/zO4DzuhoPGounG0oNE4nNjKCShyPCgSgR1hiIiCH+T4psxB +noEbCJJJw67ADc9oCAQ4MA85DDYovpZhnYbQnZw6DoHgNRDrCjsJgEoTt8VZqQwKCuChu3Z6KdhR +lJrYnS4IjdAQCP35jgr4lgBYiK8KgEHoBgqCkSpSiuMSinFTEJDqxuOQGNSjQ+VgEm05SX1zIGU7 +SMhCo7BgAVjDpgRhCIzoxOwaiNAoCFYUnAy6Gj7TLv84DBUKkAFormLImoK4G9fgE82wqysji0Xg +jYThDIFjKzQqiCgUikXopibLjgVSEYJwgiYAyh86CrAYi0ThAKRotPNwgDyZNHZTIv8kUaEmSpQm +OI6k4J8AUDqh6Ikq4omPWIHDwQALYDuy8LE0KYgK2ABz+Q0AyAPD8QGLUIn6egpKyIzaOE2PDBF3 +bJmWyROyoUQ6OZKWMSzB3InGKIjhEgrns5CIUiVXoTsD6C+2goC6IKjFaIPAIAADta4BeIAEULpC +TIBtewzRk45uQJCpNMIXAcdOOx1+Q4gZKIYXiBu0agyCQDihWIrflB1Aq4hEMjTWEEOywATVbDEr +cT62sx85KcmBWFB3QiOsQcylMQySoEEvqCGJyYjC8RE0EoglHQpe/Agowgu4kbLD0ZrOY5sHSDsJ +8xHVmsP/epUI6QkICQC//KKNAR3/dSsIz/Ish0CA1Yiu+BiX7/ACTACESAqLezmWEukAAiUIxEkV +CzgMUJQRsmiDCSCAFGuCtPC+p3ACg3u16vogNzGOenIKxREMnGAiEJiBU7Ab4LGIsUnTvgo4snC/ +gtAFwwGExUEAtoAeoXCCe7G6h3DT85DFDjSM1MCvj/CtIAouCWQSJqLJbFobH0CM0XQ9Z+K1BrCF +5rmATyuKZlKQj8FODkCJrnk1pcgIX7MyjCA1ZgMLO7GLWhMA7CiRIXAmAHBKaQ3MuJRV1LCcp6AO +N0G26cCI3rISDksQWFUAmtiThsGXOkPDxmtF59gJffuO5ViIuOgct8CWggi3yQC7/xVtgDCotRSY +S8nQkhr4iPMQxqIAieVowKTYjwDx1Q8CKFIxWbvMIuQRRFhrwdN6ke9wlbvJCAOgAAbYnXRZigN5 +AAH1AQdBtqF4A2jaGAG4m97ACSLqGlKhFjc5sJrNvrTjDLyYME5ZvNcQGsRYDW6dtuYhiA+rDaWQ +Br75CCLyJsMpTjQCDKJUgC5IGECRji7wiLBK2hIpiM1biliQE04LkF7MDigZBPDrgzYQxdCxiDFs +gN0iiKhEg4ywnZ7QsOazCEAsCpPECHGBHA7YxANAqx00zFfZFbaatsi7gGoUsCbg1k8aCm3pjYJo +OKegCYLArKGQAovIWNRTACfAAP/r+YNlUgBn1QgAyCUFeAQAWIEDcNujeUTG6cEQkovNa1B6eYoh +AL3VeLUMADPDOYN3IggaqRHnC5DxfIraQAkDMF4BFAzSdQIWwIvoeApmEIjW2JG1Gh/CwtyTLIwZ +sIQXwAQ5OEYtujO0w4n4FYo3GAA0sRPPqUjZ+QhYbYB5RJ23KqSPw4vXUNC7iYUI+QE5+xeD2oCl +OCHMFUWs6oI2QMAueDNdfArno42VPSOuii4AKBos8YyKgI2OMoqplTgQY4HmQb/EWRMkEQBEeZG6 +vUcXjpU/w4igIwp4nQpMWMQZKImKOM79IBWloCEFqQBOEYidEJlTZJ78sAIDwSr/JuYNyPEBL5gB +WohEfxWcnJi5hAsXANgA7yraFXHHF2meKgqE0dO3CMGAhrmhN+HToTg+gTBb3mHi14hfovCLtEKc +GbiNAeAgRToF9oq0RMGLbSsIipGOIcALCmATn1WYwRgb1urKnZCKaTIcEYBTTKYUjJPlCn2KUwC0 +9XSKDXiJA8gBA8CWnUACCbhkLwXm47C4MyAwKOAgOQkhqBE0CRAgAQovA4jBLwGEGXACJ7BBL/29 +DrCQQnHIRPm1qnideeo0ApC1oigINHFIK5kLb3lZnYgLAqAYp0BQxJADOeECSpIRxCFbS4wSh6iM +ACixRPGBF6AFEHWiPBlfnpIX/8OYgaH6Ei9gHACIxUD5AhCoAAMAgSRqgCXyCAmg40UAAY9wAB82 +A2f7SsixpgOpM208o3XNE4WWAoTogq1LlLNTCvCpkdaEtf7KmO8I0OV4qgQo36LoAJRg4tC5DrKQ +nOOwHLbxMQJ4DsA7C+MgtwD4AZj8jeYYgMFDHWtykDIFXahR1fD5sA8iCBWyjbm1kioAxBJRVgFw +kRr5Au54jOJbjPVSCikwPr2tJLIALleJRuloAzL4JIczMpuYMoSsAhLO5p6oLFoQ7LPIFyu5lAmI +qpoIACUAgDh5igDIBYKgAnIz1ERhgNqwugOWjrn+mA/akx3RmaKognOEiCOOvv8BwIAeRGQFiAUB +kpAAiOBwiusvMcnN8EsDmp8DGowBsABI9r1AsYS/MFlzZRIEHY2+HooXkIBCtW3t+ImRAzGRAQB+ +HpYOUDuS4UmhWK/Se9KioIQq4LkG6IAwKIgcIGDOgIjgyl9zsStKGV4CAOGhQCQoegqaCE0hAGG7 +qoJrlA6ZcokAkCSi8IFLNRzQ418mSddSPc7gEguwPRsLP8i1OgVIg47laIM2cD2DAy1FBPB2HYgg +044shkyCsILLHQpKGAJ1HArW0onPPQ7OUYp76Qqw2J7H06oL2IEJoJbQyLHSsggEKOUBqIEd/5sG +AATuIIgC8Q8HHpsaeYELII7/CZhUw0aSAAAttzKM7qZKgTVwPRoADpDxQGmA4nRCgciAJTHxeT2w +I1NVixaLXwMtQSTbfRsNggCfLyED1mYA1g4MA+iG7LAED8k8Dti4CQpwLSlVIxpzAKhFwenuH6Gr +/qmYMNjzwSBAIGI2fvSJuNiAyRsACsALCAgBI+uUtVakoTiDnhZowMBVRcmfgjippwABb6kiSg9V +pcAdBfCCnCifZwcLgqhHG+6A9CiInaTuSlmBABCCHWEEgRB1FuqJdSb1H/oSSugCDEYAkNUcTHCg +BgDWnnhl6bClg/SBg0ESI2P1DyuKRfD2TmN0oTBsAq6I0tzUiUgAZAqUFzED/7iYH6UgWjkBBOpb +CQ7UIRz0iC39dG87Dw9xa4XBAMzRnCvJIwtJgfJgqYQCVtqINweRUMXLLv1AgT1BEzTrjq4Ab72N +mxnI8qH4gnysdtoYHgCghUQskaNRidhYCXRSAAgyaI+TjsQIi5sys9GYMUPCl/0JhCT0qC94qLd8 +SxFIesk4GtwYqXps3QYQxB0pFN6Uk3ENi+W1NeJQUAAwyBc4gHr8ZcNIABawYKKArAHQwACogDvZ +YdgmuDexCAsWCuIYnByQQwXQPwBAgpXovaJYgRrYE+IgEABQEsQOJy1hAN0comL+jQNrxR0wDAzQ +CF0ALacYgibw9rR9CSz68f/J2dai441Ji8YGYIOwSJiG2vwdZACWJBsMwjytp5RE5RoJAQFb+s5O +z7H9EUqewNadIIA8wAT5axhLkCnAmPk7kfcz2Hty1uPO4LsX4SYpkH2FBjBkBPnQn34UkqnhSRhQ +ve/ROBAGA4gAAAIYEBDgYAACCXRVUeDwYYMGlmYIMBBgAgEABDJ6aaDAo8MuAgZuFPHFY8SHVTAJ +EHCAAQALZ1A2AGEAgoSBAhnkPBDAJMiHProYAAAggdENIwUSOEhyAMmBAC4YPQAgxgGrCRIMMMC1 +qQGYCABIeADVYIoACSoYkBAiAAgQ4QYNMIIUqlGjDvIaFZhAChsRUvLCrHH/gEAFCUgBGFBodCyA +lgEcSAiQVUAIoyEgAKCQUKrRjAIj9yXbN4AAESJAiEBQNCpkAD5jqq21TMQKqAebluYrwSrq0aNJ +E7AA9QLcgRmM5hBYw6gVAAMyDAiw4SAGoyIG7nUA2cADASxaOmAjJS6Ew0YnhD5YtCmBARkRZLQY +gCpCqQYtHkYhGwBMORGwggMioPEIAAhUoJZARSUUwA4BQEWFUWxkRIhRzwFw3h8gJLCUThY5MJqD +B1jkWG+LjSYAfAS8Z4FGCQpkGQLySZUAAT4lEEAGCw7A2VEJHCDAAAfUAKMBMhi1HAci5CECBxnl +xUFByxHAQWlQZaQbASwG/9CBalKIYJFuAyAXAARjCZDBkzBigJFRVBn140FffORQH/EBgIJq2+EF +wIiRCWfiACv0OSMDAkE2kmzD/WcjaaHlJZxAjGZQyyOq/TBQDgOdKWUAY3XwpAhAtBSZlBk5wJoI +HQw0kgQGRTqei5YaxWgNLjEalwiP+KXVSBQAOWMAOVV1q1EG4CXQkMAxYNV1vAmAwGxeJYgAAqGi +cNCHD/x3VQLUZkTAcj6xCMAEB0B1AAhEWgVABZFhCQAUMfEFgLd5vTanURh0KYhVUIxEAHt8kdgY +QUYtNpKKyN4oEF4cMIpsl94aNN69EFQaHAAQVGdaVKBdpy+AksYIqmiVSf/QmAHqtWQQAnvxyBiV +jE6M2gHIAQdCRu3mNTEFXeblEwEdMGxZUWuGsKYS2V6wAQEyZItUVgo2hcAE1YEBwAZ5xXtAwb2R +BjGJ9/o02mKLxRvZACMN8ECxCVSmk3SMMXAmBU4fJcAGXTEQLwvetQRV2wNFR0AK0k3b9rk5LqXh +vW0nlG7HrwlAQUEWWDTBQRAYVNFGQ4K6Y15/wpTQGQ5F5CrpSAXHopcSVgd7AAxkK8COBHDWNQFy +dgoAz4zdeu5RbMuLO7oFHTUBkQ44AN5Y8bm0gQVzH4Sksozm2xdwTTFFgcMw0yfr2soWl8FIB5AO +IGq4D4nUBWdlV3pGyEn/xt8AA3gm72E5XTSWxgKwIASEgFpqcdsEDIAACGzAJxgYAEYwAD4MQCwv +NZDQpCaAAPxcsAIxK94AQCCdDFCgOt0LANwEFakUZCQ6AEgcAHDAL4MV7GZiQ4iUbpURmzHAWwaw +QAIMkAFsHWQACNhK8wYSr+CgpiAWyVYAUEC42RglD9CZ03uUVZQPoW9gIiQAzwIwCOlgwALWMU7M +iiQAfwWgjAbJYWRGIifp/I5zgIqMxwRomQbljwBgkE8OcLdBB9RAEABAgiAQIIAUoAABKPCPT2ZT +LgRgQJESTB8FsrNGo8DEIo9ZCtxyIh8iDaRlUlkWapb1GgxKhyDKM9ag/1BTt/xx5jc7yNGbQgUT +GKZFIwJ5QFjelSVOPig0icqLipaCELVwhyDeIcupihcAIGQoNFrSCwAy8BAFcIEvQ3IKC2IkwoEA +B3kPiJW6ujSAFHCmAlaBmywNNpVKVQc5IWulbujGmLGoi4hHLBb6orjPlr0sZMrMVsuo5hqpEMSe +ddvhQPbXFBbprnkJYVQAsrAkjeAghwSIlQEusEW/JORDv9lh2uIkHfBVpwIVYIBBPjQArlxkQS80 +Sgqmh0UJ+Icg6hISA+TjACEwkzMZyIg7JzCsz+3IK36RijALJxtc8QV5ijuIt9B0EHO9ymFdhSBU +JgCT4U1KJ6ScjYSWMv+SlgR1YwJU4XN+JBuZBRGDXUkaAFzVlOBVYF0baNkAKJMAnCQga2iSakVO +A4F9jSyoKpRORrITVjxKaCzVGUANPta1GArAASyQQf7MeIEwHKQDDPDkGAGwgs4QCQGbxYsR/jMS +RSYEnoyRgJmqE5yQ5iWUoUzAvDAwkoIYBJjDlA614Ke4vRxggQBgQV8NEIIa9MwoRtsIAPy1Rlnp +ZyB46cCMSrObgwxMVmbZEubiOa74OEU6nKkUyQDwgpQoABD+y8hipONJGEXGNYJUS3hQOJBtza9I +dQ2V2DYrSwF3xpsHkMDXrNIUmEqnegEwjvI8Mxz+2uxeTQHOrYrymtf/KFIzzzzwLU87K5nxh8TD4S +GKuW8DKxHBbJKcLxrlmxMlvXuLaIA7ibAxjgAPTFAG4VwFwHiuQAAVBFSu+b4zjXSrjNgsA6AvAW +jGY2s6II+bIPiliyqhoaDrCHYFXFS2MGYizh3Sc/M5KVQSBWFDNpxI4F45xl9DeQgsnAMnEWCJBS +aNNJAQfBypOVlKyE2xKqJyEUkkCNKkAuCV1AVQLJACvXV0E2o5kAkEEATBTiFKjlL6+Hoc4FjJAz +ECwNBXhI0AUYkCME/GazSkkYGHZElfyxssEA2Jr/TqPfZPlUIJ4ZHKM4cwDjAmpLBgnsrUajyLUe +JGuCcg1SlLWXAXTA/yccUFICkLBWIOHrZWsjp+citaJjdSwji5UNcQcrITwDkTGScwqOpIOXbJU1 +AJYASQO6oDDrElts9uEbbt8mkL5OhmtJaa7cmGmw/BXpVnj50Ejg1hIEeKbEAPiBfyVmAAxorDOo +8ZZPJNclRwlThQPT50d/g5R4tW0AldmKfremMO99SwLPo8BizqJA/kjqXGodAAsezDWD3G0g4bTM +Bi7QSAG8OEEssI5ANsAAjJT6OghI3EZyESpGYYsBFsKsANOXlxw0xQJmdMmz4Isv5hhFozGy4wE4 +oKg/rfSiM9ziQM4ZGhAlxSJNPUqggqisIHWFK03F+ZJdOTtlGVFCUP+LUYIU55UOBwAJr5IPtw7i +gDyADwRbA0E1Kuya7GV3Th/rK9ndMy0AcAB8LPBM4XSTSqdngCvwko87E4ADbOUgtgBIZAmhqEAE +/EAgQJBbReaFFGrJVTbzo+DNTrU/daVyYtEujWcivzZ7vosgcK6qVYgnISFUWD4G2MFhcHDxyOQX +UDO6bFU+lpccldUoHA685ECbWvxUjWxM8fCFFexQkxkFBIARLbBBXNCApFjLvQBAAkoHcARKX2lE +mchGDjEcZ+DVBnVYRvjPWIRXEQURRg0RQSiSArmE7uCVezTLfkjJwTHFpDiF0HjXFHXVUUDFclRH +U/gHudyRS7QMAiz/hwUaBQcsiGiQhYvgl0ZQTVbkVQY8wAMEVBCpywDlTYNdgE8IXgVI0YUlBAp4 +zg4kRdtoFANo3djEiBBkxAY4wABEiQEEGQdomhTGE3cNB174ixKGwcqZHAq2B5wpHMe0XG/ozmjM +B7H4BEyVSUEgok54TF+0xIIwBUKECwMaBWkd4Bw12/UAIRRMBhRgQAJgwDk9AGcIQLqVHICkF91I +SLwoYY0EUbLAGGnYhwM0xXVcQI3QoXx0jQRQAa1tENdYAJF0QLZ4kIQQwHYAQKfU3Pb8zAHq22Mc +xHikVULBWy8iywHIgLLED8S8TAAZhFXwXe2QxNG5SALEzw/p1XMQ/0APlcx6VRkYpUrHJMh7PVTL +CYe3IIZRmMU8ScbC2NgdHcWg5ctIsF8ACEFjbGAOSZhA8BdoKQwTOZVA7MUdCgBMqMveSMeg9Qtt +jdXcSUADDs16yIac1A7zMIBxXFjhuMa6nUtzSdzwWEYOFYX6tMx71A3w+EeCjIQDHEC8CCS63Auj +GABbFJqLDATJsdKQRAZISoWOAUpXeFCitM0RdcBW0OGaXEAC7IXe8Y3JaIQB8FZGhIFG7EVeCYQI +SUC7wFRLUNcBHNUBrMAG5A7p5JHfOQqoLEUTriTpSM5RjAUFLhmRhIci4aKDiBoKVVyk9EZnlU55 +VaTcqcu5cMYAPP+Q22yJTSGFizgWaBiMrOyIVbgKAFCBAQTOOzbSQOQh7Q0ECUQCDXwIOW2hkKxm +FWVXCHpYXtRCpRwGGFbAXlYAEsxG0kXdQTTNWsSMRR1FCNyFTjjh52iEZ6xZCnFfM3XGWOyFZMTI +XaDPTNGHjHgFppWF4W2Qt2jMTXBHggRRjnCF+nCAEgQAB3QCd3ifQ7LdAJiRcIDAg+lftsSknFwQ +v8yee+1Z25hFRbTNvrglBGSHIv1JU/wYBemTlrjOjNVOcPjPVsVZli0RFjlVV0DFawBB/kRT5lWE +8pyJiSAHXsRK+9RY4WjVxM3IiDhKV6GVVWTiYowFBUSSJuYEoyD/hVXhCAF4SyZOhl+wCF5kAEia +CP0xhk+iBgIknYQZxwZoCIB65QXQ4aZsAGnB5A4MVtvcZ75xwAX9gEU8QLyEG90FgIZYgQOA1ohk +B9ZVhwVggChNorf8CFRUY16wBwr5Xo3oxERphD3hyO5hlap0yVPuU6hgyxYl3WnQkxnZm/Ck5Uy9 +CrfISqCwpVFIVFpWUXUBgBWBkVXITLLYHPBQgAB0m0hWB7aM5kVRxggUQAhA2x3qm/5wwDRIxzAY +hZII0cKlTQDkAAUdgFIgRx4aAJlBQUa0Qos6AAc8TwKA3LIiBWdAgbJFhn2I649M6Nzp6A5hJoNh +HhxFxwAIpwFk/4GN1U5mRSbTZaJZGaYveclXUEDfeBpeKEl7oKgvJUiwIRhfBAqo6cTF3V8RMYrC +hhkcHRFOaQQHvItWGIWxpBQAyMD8CAQMWcGMZFWg3ZhUZISGeMlZeU2+nBtk4AXPGQANuA0AZIJR +VIBBTMDMARrhMWpeZEt4DM28fl+cDaR03MVSDGkAgA8IzUmgDUR+wZESpkBQXZncqRRWhoB6OCMQ +uSKSdmlYCEF1mMUFxI9IIYAyQoXApgCVOMYAhIHt4IWWbARv2CqgSEAGrMyISEy0RSZqJIpl7IWe +zNBIWEkH7GBpVmDsQFDnoEa+idABqKYIUWCXHMZspa1hpYm49v/s/pFG0EghY5xJADAC3fXFlhTH +Z3yI+tCpIBBADpRiBWSHVTwtAOBBC4yAChSACahL1mjJ4CTAJMDAB/jLz1jGCXwADJyAsyrLtiBA +Rx3VfzJACJyA8HoAEkjObEzAE5zACIxACVzQaBiB3IlYBXJVQlgiAcxP7WHgZ0DhZvmSeeIIDCpS +rYAqJ4WMVqHJq4TAhD1b0RRLFuTIn7TqXgHIszzzzZFd1LwjQi8BRab7QXjL2L98VRgtBcJygP2lgW +cfwM0/5oqfZfe61V0gIJRrxRZLAHSBJA3wzJvixFlpWMT1DF7GFAOuoogBDOciDsFZRaKXmSoljG +jgwMs/BHAID/3WoN1/3CrFHgwNLGyDkFwBVkr2zADW31RVaBj5lNomV0RlZYhYTR2gEUJWr8APpU +QAc0YMQlhM1dif4SAHUBT2cMQBkUQhnoAAtEIwjEQBkAgw7oACS46Ei8F8+0BM6pGINc2UwOzLmF +QCEEQQ8MwkZUHFMsVBx1SZwBybTJhhnpADWUQQDkwkCQKhJkRKdkRBnYgA3IEwDcgQ3owCv4H1YR +GgCUQR2nbypBihlVhp5qEv/JbVqoF7dsxBXw35xVBE3RQe4WgDIXQAvAzQEAndJZABYs8+Hkwm90 +ggsscwGowBNkXt3EmbqEQDZr8yRAWKhYwBWMszLfQLHibOaN/ws2yop9HFODkMibrVRfUEDiMC0F +HFUWFst2DIhLBJRM+kVd9YUCDRxVMkY0TYAS0B7M3GSCDMBDG0BzcI5FIMFBgC9fpJBTnIXccRdx +gI8e5VlpAu4mbVKj3FYoKnA+SUdO+GkJAuVPvQSswAhkVBYyVSxDV8a5MQsOlR/IriS8GAUQZMQK +ZAQVzEdGHBVSnsv+mNXK5CBk7EVsSIBCbITaMAtHTssFLMeadEwGOAi/HAAM5XAczxCkYKDSBZay +EBW3VYcVbICCjHVBFGUCYJpXJApVZAB7CEDBGEAEDHYEjIK+EUAQEHYE9IAA4cV1BAAVyI4zSkgR +PQhT/AlexP+BYkdAHQDI/MyJ9nTVqc4JaAUAC/wYYePWlnBPaRK23eXLA0TBYNfBk57c7LoEYcMx +A6Zle6lqnRntPj4WQykjUoVTBmAaA8gfQQzAJCSzNhdACQxEvQmEISzzCPwOI0CFOi/zBxTOYlhJ +1G23MsMAo6mPeBfACDAK30nKkoKPocIRqggKamyEoQYhlozGdMAygn2UJmIee2xdb1+ncCSbYxNO +/uwIv3nqTrTS/bIP5rHWRDN41yQWKb2KaDiVhOZQZYYGUisue/PGRqidQFAIAFATsgxHwbwLUkhA +Trjqg/tapOQbafgcvuEgvBiE5lbAXhgnurQUVEAAjsATiwL/ZQVaY0EkDAbQ3AMcm3SYBQZsmwyb +cELIUGCFF1+cmKsEW/GE+EZsVVaAymOo00AsVA8lyrSsXDnVzUt9HFSggA0otjDc9wDAgWLHAc/9 +bP4AaicSwP54BnDYU+Jo9mZHQBAsIdOqpJVXIJBQgBoM9i1EyqpaCACQKgpMwWCHgv9xxxwMthps +8bksxgUIwJtHwBRMBdn1qCcaBSO4SOEUzDAUWIMgwANkRwXUC7O+mfS0gDKPgK6rc8oFpAdocwl4 +JgYwQAks8xHsqjK7gVqgqMRYx7ErcyIcwTIbgl6fALIrewG4Qb8YzB4xsbCBJKAJxyDWjgDI0J4k +BRPuU2nS/4ftJAjgZZNZjHYnJiWDScgDIAcYcRKTbRCo6JUImSSJs8ENeZNzjFiCuOX5AdaOJEAK +vUoKXY7wtMe4VGM8JW5R9/hpTEwAJm3mWQzmyUkaCg18dxi+CKEsdYWEhNOnqryWPBDdjBUKgbmx +1LwCdxgLORwBCC4EwISJG8zDn8vTIUZG5AuYS1iau1lBaK1VyAlGqc3LqG5g+fS4K88ARDYBUAgB +CPpgB0H7OMJml0ErEY+9eEqlyDyITSFOTUAZDDphe8I0gjYGtqVGwNlw5EghOLrJXthaNkUYEMNg +C8O3AEDeR8AcIIxBVIZuwUThr0H68oWUuA5Qns6CcaCN2P8clp77QKyWYxS0xuSuCgjArtKBshOB +d5EADDw3EYw8FRxAMnuAZ4xzCRCJhmWNBAxDMpeAVYyzB7AfASxzC8AE7zPFVFrjM68VOZG1Zzhi +4zHKmmPO4LOlBdzOqSwRBOTLOyXQoecfv6RV4L2JSAJAbElIc/1HADw0AIgtLK4Nf/GFTUlZTIQV +oMktkBylPFcHLPEGUN4YmI8GlQJEAAAAEAw8AGCAwAEDBjIAEAAiQQEBDgg4KIDgwAADKjwUwBDA +Bo0UBj4YiBDAxIkUBeIYaGVgR40EEhoY8MCAQIMAMhAIIMBASgI+dT5kOBEA0QAGKgI4kIDAw4o6 +MWYE0BH/qMAAUTsAoJBB4UCQDhH6fDjw40ACDyBeCBDiwEEAEAhOGGjBAIMMGQBYcCBAwoUKB2ho +ZWAhwQCfPhN0AiChRwTJEYI8ZBBnsmQGBCAkJJAgKVkDaTcORDARAd2+JweYmjwlyJTJegYIqFob +rQDOJUEvDL0wMuWsPwlYoIjyYRDJlXk+9COZFUQIPwdOgGhXeYQeAMJIGKj65N3vSZHyRR6gIICc +igPgiLpXgF4BCBI8KFBgxAAVBTaQGNHChIU8uI/A+yoBgK1OSiDwqgNOuO8IAKxLqb4DBryPEw4A +WBC/zR68jwGBPhyBgutAcuonDCDACIIDApCgqoGC8ko8/wBAQMgBhARyCAHfKDjggQeAeIAAFogk +AKOtAEghxBUkcAij9A6KSr2BeuMJgwASSACBHpNkAEwGDiDALd1OEsjF8NLTSYKNJEAyqRMjOgsA +Bma0K7yJgqKIAPcAoIKrqIo6S6CVNvpqICROMiCqKS3QiM6TKhiqMwES8E5CK0GjLqqq2NpKJ+sC +YESuiahUDTzWxCKAAg4CoEAk6tQLaiW0ilIoqoSc0kinBCA6oCACyAqvqDIREKgrniBaKkkKMIVo +IgrgOugBBt48SjEAaGCKAQckGCADDAxwAIELuMxgxu8uYIiG7JYDwIEAosgsglwFMKnOg/hCgIGq +VkQwqP8HEsLILQDc9UOneSOYIwUANq1qyjMHAA0EKh9KQA/JtrPIV4cf4iDG7Jg7KIDJbJioNiVB +Eihjyq4CDSU0HyKgI5oe+kkgKhEQFC0kMbgqSwtAypYhAgMo4IMBYNSIgSQI/IBAgSnCAIb7SqBp +gAs/CACDJBNjwYX7Whhg5w8/kAGAsAto4QGoiLhvawA4IIDRpCQISiReB2W1qKEGcFGgdAkg+SAX +6WszjBAzWEiAHQ6quYKI0oW3pIFyTOmhnf+86qccYX4sKQIecWBLjPIYCISmkOo4qbMYimpGkPIG +wK3RZpxRyc9ZF0imCmb8PDwUbkUbgBxWDq9OM6sSQCb/POfE9+eUEkrszJOQ6jEphWIkSaGf/k7z +u4gw4isAFCC9+YC7p9SpKPNq8CnelDAdyDvD4+cpqgv8Jjl+A7zTbSk2YcxBGMKsAcQgLgh5AH3s +MoAc2KQGZKsABkgyAAsc5FGrQdBj9vSDgdwiAmvQ2I0YIJmWrUFNNoqJUeL3EYXUpoDLGohsQggp +HEymBgdgykaSRL+b1SkAvsNcQkQYgTJYbgAhGppaABAcPYgFAKuQTCrQ8xByeYV9AgBhBEIBAAxQ +qSo5OcsXKYc5iyHHNimZEEKocBfp9AxqBQjbCaaTLa9A7QMm4JALCGUIApngKgT4EAw68B7y4OGP +GRgT/4c+wAFE3scQ89kQ3KqyqUVZLwB0gdZZTmMlgdDlADeiQFcENgC7BMACIarAwG5SJyIF0QCx +IwkHxpSuvwXAIZs0zUE40BEMrLJfXRLCTybwkY+ICgBCuIuu8IWihwgtmQLBk5c+cgHxaGUphbqb +jqCllYFEb1jHCg+VUAA7HenIJ2KUVFt0opjoCQRfaQlJ6/AlEzr9bSKgIcDp/rSyyAkEAesx01m8 +ZoAKeIckPkRLQZYiI4wQDGDZYwtbbGKllKxyKX87yc8E8EWagCoqc0NIAh5aqJXhUlcsSKDQbOMr +B7gqABmIF0cQIIHOwKiAikFSBXpkHdsgAA4R2GIQOP9xgEJI5jkRiIIMfOKMlqWiBxGJDWzUI4Gp +roEGGJFABiUwmUJAKwEVcE0EhPETNSjMFEHQFQJcdIUgpEIyUVBDVCgwVk8UIqhTuAMWA4CngZRB +MsQYiEtaVgekjEJhc6gMKgGACMmowWBTWEMPrAkAYEi2MqoRgA6IIZldBCMpDUMTQ8CFEQI44CAd +CKgBEjAaDjzgbQQaQS7P1AISRCUREJrOTy5UgOokoGpIswBfBCCSHESCQAeYYACC6wIMcKgABxiA +NeP4Ae4Z5yRyOY5DhEWdnIFkU6TtwEb4ohhyJcQBDwAWBCgwXYhUYD70YYGlCLA4muRKI1DBnJa8 +Y4D/HjHEAQ7hqXL/9t+DcGkDE8BNnU6SnrzN6YevUxpCUHVSa36EAc1MiMBSchzWDCULpjnfSfCl +TAAoqp8yWl/MEpCmeHnngu3FyAHswqqBtNcpJ7JeVd1CACXIRbPzS1LNeliTmwwAChLSkBfFAiq5 +nC+IHiHKBixFIcs9ZFI08RWVNsUXJMnMYQKZHYy2QoEzmiouB3HAAAxggWMtECLlGldWFheiTZUo +ABcwjgDiZRMaIHU5GBhAy0TWFzU4NjN1qGl2TDEAB+hgMkEw7UMBcNQImEKc0q10Ga7QMDXMgV51 +gFZxg5oZRDgCACyYDGYmAwfkRO+vknE1jUAdAU/8/8QR9IqAYWszGYwklRUgYXVllBkAVre6OjnL +i3oOkxILCKIvWcrLAVp0qTjeRwVFCApJ4tM6tZ2gNkA5wn1uoBEHqK0FTI6pdHNbABUgxCXoFsC4 +5Si9tFktKdg7U2Ubkr2IyJBXKGlYGQvIgJoioDAokEAMlk2ADSQEPW/KyQHAgrOZ6WpHP4wZ6kbK +gIm96XQBQMJGbBK5gbgvuwYxLZwAUMgFc9iY48HmdNKIETZ/slAjpo6OT6IEhmC0BtVhIvLmlB74 +/qwzJhFjet6p87EYBQO9gYjN6OQdso30Iel60QG4OxDhAcAlGlkeeZKSLiAw0XYNRZ7YdXiS/KEl +lv8WcahT5N4UqwTAJLtRqUL8h5vaeIdL0vOeem/1QsuoJwBXWI5rgqAox04hOHGwAgLGSi8cWGQy +aghAESOwro51oCN1QGqV+nI5CDDiApXPTAwCgLaWTUYDShXAn3UtGUcEIAdRMfFAJiMWSEvGNHDV +9RUAEALJIIIhhD6JwoIQEcDqmjnpIVRpfDKpJaHFIww5wLXvUwSk5EQnBCLBxBMQxyNshS0E8sDA +K5uBOCah5d4hUAm2DyGM+Er9qnmU+I5jJr/iyUU8JecOIAy8IgX8hyZW4gFWgCI6wDZuRAJcIgAd +wjs2wJAQT+PsBMKWIiqoTEd0yiJOKXKUZgBcZYX/oiI9yEJXMoJoagJeKulWMEKMaiXnfoKkSO/J +qkIrzihbosczXkfjsC9GzkIkGIIB2st7BCLE6KYqpI9YtqIqCql1GmzH5gKeTmJYSgRJHGAo5G7t +vtAs7ElC2GcH6WQIrQ5BNqxLcMwAcICAwgj7dGJGZiyBlKA6dGMCdIhZIIILkURpKiohuE0EZ+X3 +YoMyDEAYlkNhygABWG0OdIAVai2qLkBh6sDSIiAO5kJiAKCI4gAoOqw0FsIRmSAOEC0TBWIyVkEY +FCYCdgAYMqMHLvGIlERJeA/4QqJlnsgAWA0RhCEOai0TbUDWZkgyQuEgDICGbABziigKdEBh4IBn +/6wMKcijU9JjKFACSQigQNzttDZCLkyAQaxnPwrAAzSCDsSvOMRMQggEFxCEASpB/ABg/vzLAdyA +QFwBXz7HLG7smU4CZpbFnHYFAIJOhS5pIKgAIoBAIFYgKQbhJTIJwq6vGx8jjRjMC6vIKmSAfWKm +U2iiM+pmWMiCTTyFIKKiX2YEATLofooCKE6jTRAvK1grJ3RwUaxJJ2wsJR7ANiqAAmYwSXqIUFJi +hxDETGRAh8JtwWoscuBEDk1jIhxgAkDjnzjFTB6nOhgCmpCjXNAjASDACFIiyVxkNIKletInRzzD +5kxlPghAApyQrkqDBUMsz+gO++aJKHIJU2xih/8OQKXeo0tkigUy4DQkiSkeQAIOwJoq4sLOwkWQ +BEoCIDiAQYSaL6lwoNRoAABYAToSgAOKKAi2RIoiIBVqDQ5ywgL0hEpKTQ0ugFYYYslAIDgk7QA8 +EyiEsYaQQAIQARGiIAtCUzsAIA+KSBkLkDtYw64OgAKEzw58IjtYgRgjgBUuQzLWYCKEbxRSxmSu +ItdEs0eMD/jcLCnWLCU6CV52YC44gHFGAzcEwB5b4EMKoAjQhDqKgNxKxCKOpvvuorfAoHFMIojw +Ez7jAwFiqwCuQAAIZAyyiUDThH20KzxAoiULYiFeZGYwJwWiwnzYLACHgiRs5ilmYiBCQGqEYsT/ +CoLPSM8b60Rwgq6T8E4g2ogAgIBubCKDClI1/OpBx6vlJuKUWMpF4ilnPilPPKIu90TrCiahuPAn +xmUoRgMFr24D04O0LMo8H6BrvClnVJCA6KSdliXqgKhWHhQbp2vjWOBM2Cd6Bi4lPtFBNY58wmN+ +zqJPeEYP3Y4sbUUjSsUimkIufIIuCMAu4sIk84I+0EMwHe1YuCSgJGcA2usGg2VihDI7QkE29EAA +XMPVJuO7cOAwA4CGtoMBgEDXdAApquJGAGAyiE8jcgLwGKFOcAAzCYCGMlEAni8C9MB4QsAnBCA7 +5iAqaqCIRiGZGCIHdqKIukgNJGMODGIrgEBV/2noq0TmICbjdQ5AUwWi0CBCOAfgwWLkRL4yAIxA +IOIlAIrgBIhAAAbEAwiAPslRLKqCQ0bgBh2GQLBALOjNBYR0LtjsjwZgOpym3gCUBNACYPloRnJk +CKnET8FoJyYNK72CLyZgcRSC4k7OYgngVBumvh4ABTzOQz0QvITSmTSiR2pJLHxlZ3IiBzaiYOxN +6MaQO07kGvtiM3Q0dqyH5zqMAU7pVEbsC+OFgMZkZYASYgTiW+pGoaBoMb4SdNJD+siCykqVLjFn +IJLlRjACT86IIDXL7eokBoiFZMBoJq1IKs4CNMCH2tqSbrLlc+YkKFCQQjhGxIh0A9jCYfQkof8A +x5gEVXoqQvq0Ar5S8lh+gHfW9AXphLgQIKloQDamABKQSlQjYApGQyaQoAzqoNaUcSBYUamiYigE +hbt6z2K2grQKCACuIBTqANGOaABuKNEwhQCOAToKCNEc4SfDIwMUJg4YQDOVykpmBAgut9ZCAQFk +FxMBwBOO7zEIwDYRAXWKSAcAqojKQEe/TChM4gAc4GvjSS3ILQBaoABMIADAsQBOoCoSKo5KAO8u +5h6jIgHGUX0DgAOCoksG4I8cRhvvA9wMIB5tY/40sa8IxUkxJ0SY1eZYByQYinwSgiFsgiEDAARw +6TS3qkZWwCG4UIcshgCu9DDEKUTyFpfm9if/hyaj/utYbjYpzFN8PhGI3M4AlI4+nKK18PSS+G/B +JsLuiKWy8Cye3IslFAICcmJFiuLJqLYi8QU3cOYIkwLO6MJ28mYDIvJRvjYBzPRtRUxYsscsQOJn +mGIgzJPJ9GRd+k1yBiV7MK7KKGdyBCe/sGwrfEUCzCPsNgKXWOshzAchcuJHosIBKCCIncKmXsTN +SKq1+IUpBgBtnqWy0kJgOisCKqBxs0MNnk8PfGID9ADRMqMjEPnYIiALNDSJ887Xcsou8g4EJOD1 +MgNKAED1RBPVtEgygEEgQMDXtmLNBiU4okr4gEF6ECCVJyNEkhECnm8KHMB/QnMKvCMHaq32/1h3 +LfxOwZIiAX7GSutyBO4DD645KgCWCKKCSAaCQIjAOmJJP+5jXQGAQEMAKECGIE7zBswZNGLrBkji +Ad4ZPhPAAWJLBVhzsE7iAixi7GDmArpF+xastXRCCjM0e8yESpCwo8ysawYCpjoqlgYnMUOklEoq +BW2jRqdwJmDGv95kTuakkIqDfqoiKnwwIToiAG5ZT6rEQb+ZhTfSO/pGRmjFKez4bhd1NB6KzUaj +iFfQ7vpKIBKqKiZgV98JZv60ZTUqGiMiZIMSB08ib3JKPVKQTp4scl6YIORCmWymI+iCIZGjerKJ +dgziGuUil9hyIFrWivqlTXoHABBIzciGS/8sqCY24C92oDcUTAJWSSAJQntk2LHmYABk4xaCag4E +IDYHh5kzYw5eJF5+jzImZiOk5iOiQlNfjM9sABjuYAByQfh0LVMEIHnpZVlRVTIgQSAiNwI6bIOi +ok1iM1lv8SpG29QYQAZqjVODww82KDueKCVqbzKOSHO45MsEYOA09jiIA3wLoGpgAAx6Sy4w5QkI +BA/YLCkgoGAPgATyDwBIAAY+YASqJQDozbpUYRxPoC8IoGCfgHzdFXMooKNlBCUmZALaTCCs6XWm +g8HAgC9wLFs2IAVsw1UgIINU45sTbCJ2FpcEAGTCdSCoDCRwWiyOkABSYyCIM0ck4H1Ersb/Vi48 +8CIdA+7kGIIvNG2DIWYzapFKMM44tiqnzNgfy9asO0csWUsg0MVhZrJUsutWws4lpFQjvpIAkgU5 +TmSNkqUnGAKpT6IrTmsoyPVtk+QC6nS/KO1dqeQnjjEwrZBMXOWoCyIqhfIT/7lXkkJDmHAtrown +zzzzV+PExofhiBogK+bjdemKenZ0xDDoADOmNK7+mbplMAZKPUaEP0tCMA3EWxFEawAAAmaCgCfvty +fAc98iZVC2YiOtFdTMEPTmgjTiPxHLm4Vfu1t+L3buEsvCU8OuD3pqB3/eAHosJdUqEOTsgtJuNG +Ci0qaCg6HoK4JYMGOoAkJmBC4iMB7CKs/+AFWvakE7axQDyAKgYivhslcOK7QFQgBJSGkcIN2wlE +BcAAISzgu6G9AMisIaxvNG7SJLIEAHbA426negzqIcgHley8pe+CX9ZMxS8nLRxgXQKgMGbkCvrF +N9iMX1bGN7I4Tl7kxaXZVWRSLZ4ll4IFKRjWKTL8k7ClaMMDAnTGKJIkTcCISiSgmXKSPLAJh1sy +AAfCg1KiiGdWLnRVK6wxoZSgpgZFBXGWdp7uLCbII8KWWOhOPikAh9taVZjVm7jH5nKEKUnrrglF +YecJ7KJCyAdi4HBg6qyHVoAnAOia7oTGAgY6RyjuaNHkoF/KN1CDfveEmA87M3TgAWiorP9KrQ4S +ItGDoIIuMQLg4MKmQ73CoxPnBAUmgwbGihVoItHrwIpy5QBsYIu0YxSU9VSdCHcG5QCebw1qrRCq +YqyaTwIWHwBIYYreR3drptaiQ7NvcSVu9GeEAOlMCkHA2LRgt7cK5Pz8W7svhI+WByeueRtNoCmA +vwVI6uuBv0BIgA9Bg94KxATWTGPzhnDPRzGWzAh2wyucOijIgrvYQyOufIMQjwEqIG9ChHd8glvL +5ydsY9vxbsMY4ErqZDpgZnaIJVmy+FdGLOgIgCAT6KgBAoKAXAYeQAgAYEACAAESIAQAQMCBiBQh +PhgQAAJDAQwDPIQIUcBHAAYeBrgAESP/ygAVGE7kGADmxJgfKWBAuAMABYgJCDAcAIAABpAQCVyQ +AHFmwgwAGCBAwHDhQgZAIRqQGZJpwpQJUxA1+RWARo9QawSl4RMqASsQrfQMcOBhXI4WJCD0SeBA +XqQAJuZ1SFSjAZABECQwEEJvwqc/OAwQAHQAA49VB8jAWAHoQ8iUYeqIEKHOhjWgIyA6IKA0Cwml +GVgIAAd0kJCmSoO+I3LAhAGoB/iMAnoN1IhBQMMJUFoNAAuxI/QoPCBGHAcIDwB3biM4yB6yCRgg +wIColQFXbIPGCLH0D4/NeyAIBXqKb9IRyiDMDnoQSESgGUgYgEMhOzx0BURMEZCBT0ZA/4SDTkOJ +lBIEJxRAYQE3eBDAawwxRMARFB4RUkmDHdBChS6YUFhmFZYgAAMCCEBAiRTe4AYHUDmAUggyWogF +RS0BAAZEE0CEAEcvApAZABNkcORVHhGAEAUcTTDlABb4NAEDHDhAwQQUMHCAARgF4GIAPlUA5UMM +EOBbAEYspBtDE0SZ1AA7SQYRA0P6xJAME4nF0AOEgSQERBaEBFRLAfwA1GQItKkQQ9QFwEJeSQGA +wEwcATBpXKgNVlFQoEJEU0RXhXmBk4cdUKRHF5i5qZGEeQVAgx15FFQHENEaFkQHGegTCBtCABSM +SPi0AqZjgpQAUg6Q6hGEfUWE0Kakbv8IkaJMHcAUBUBNMNEDIzI0mLUBbNAXB3AZgRoHO3EgKAdF +BYUQUgE8SxJJifkUUwh2RpuURztFBNQBcT5UEETeQlRcBEEIoEdpURhcWkmlGeZIaaFw1HAEc8iG +6KbJAlBHaXHYtYrJCFwsgBoaN9VcHAsB4AdoPXAXgR58XhcHSBSYCdIKBJgXBQC6GlDaBhe4DJow +ADSsB0RTgFZGg7eUBsmG1+nQV8ShAZABBARUgGaTQ84swGB2BgrRBwWY8ASnIPk0cFB83n3tEyS4 +sfADMYkEU90BhFDEK9T2FZPCIZhggq9BDfAsBkwNICgAfgMA57MDMMVRpHkOkAJCkkH/2QF66GYB +kRGiBzVzVTggRYAE4XGkHABZPAbBBgcckEBcoB7gbXUpIbRmSgj4VBXQRBG5PLpBZZuRXa8RQCwB +bOaGLUK/BgAUlPxqtDwBMAZQN5QCQHW+SPdWe1gApx5AnQSblquwAOAObCRHcZE6wXAgQci9aeUO +SYkbU3gmsJDXCOAHEEGJ5ZzXvckAYCgTnFZCRoKpjhyEAO2b3LMSwJEEvMYALPhOwPoikYocKnHe +2ZD/QuI+u7jEbyzYHacEkAHKYE50PpmZRwrzAHThCzIp+RErZDMAnEVgFQCATwTkgxzQ6KEQU8uP +ACTAnyfibAoIIN/5mvInHNhmClWM/4ApJDA0KRaiORFQjgGuEwGuFSKLjsBZEHQFgCqGwgEwcgC3 +DDQk8zBhABVASGn8sMbSeOJp3QHA1XImADhG4Fo4gwMDylAarjEKADIYigU0Q8GgXKFIkBGThlSg +AshcACNSGhH4nuUiFwVlU+L6S0kSAAHZ6SUvGKhKXHQjpkLe6yYX2V0A5pSRhExEKwshAB7Zspa2 +JC4ADwjPLMkUQp8c6ngJ8c13/DKR5MWgJQdQ1EIEwAFLHQCBF1hB2hKQgQQ8hUggbAgIJ8KGa2UE +IavUiQU5Ij6f+UQAO8GXrj55laugkyMFaciQTrKpAZSEmtV6ybL41CtofQUyvGmgR/9K8qICHuUu +eQoABaHyKpI8pDIQ4Qun+PLLhOhqABLtyzmXIilsSWA4ztNdVQCALgKkwCclWR5SALqRkuiFmlAq +Cb6eJQAUuM8qHFHLRFjFEKQopigoWB4E+BiTyBxmX0bjnkNYAhQFZm9S+FqIAQzwJ8xJDTQ6cEDH +UHCAOIAmCiKhj3kiUJKOxaA8oKHBRjAigFbkyWt/ZWIAymiehwjjr6C5BQDoEwe1lEY/YEOIVhyT +R9vEAICQtQ01qygMkZQ2i3C4FAM+Zp7Wck9eAKDVBnyShY8kALFAIRaM5Aq58GgGLAtBWFCow0GE +XEQhjzIfQhKwyrQY4AKPSoC8DED/WwQQCyrWXGlfgCIlAISAIyEYzJJS8hiP/Gl/AwsB5zqwqVz+ +LQUCwYBIrMmAlmDgUMq0HdgY0goEOICmBkBADjZyWBEdDy7LQzA1G9xga1ouPIfyVAX+5BtOVecu +CCGeVf7HT5G8kCi/tdZGXoIagHkHVxVx4AplVSqIbAAhqNsQAfDVYBbnCyH4YqBFQgIABzogLde6 +cYgwctWimAQhgyHqVn4sFjMN+H/FG84Pi8ziqQrryUQZlQ6dbD19KQbJc8sTRkOCrt3CVTOSwVX3 +qliGJAbHIw1jhUZSVpq7ihFkAqhiD16U3sQBlQFsLE0duqdXQ5fGVgeomXkQscgq/9qgKKXBlE8S +RJRnlbFo/x1AokFTMtDgwAFwprNt5tCwKVwKAHguzRxGsZFnVWBTfikyS6EEAKSATyT8itWgeIyt +Mgc5JFB5yPUIkxGMyPNIEXVfhrOHLQJIqZcAgAJEKCg6uZAkbcvp8Ja3/N8f0lYr1rQVDqpVAaj0 +Nih6MUAhgSev84UTAnERCGrqyeHnDWpeH74Wvc4c7J8dky+4+iH5oCytioCKli4JFeYgJJN7iUpE +CvHIA7TpGyPRzTsCQRJcGx6RiaBtWMZ1nwCERYGZuYjMhXpAtxiScojgESZs5oqvp7U6DnmkApP5 +Ik/+ZKaiIgwyRQp5TF4VXoq4z/9JpEIJRy6wKQqQcKsJMbFYAtpSPeEaPYgi1Y9Kkxk7cu86q3gM +BbwWhRg0pwxVnEMMGJLqI/k7IhWQgF/noANupRDtNFi75SDSA9h6zBEiaQ1DMBkBYmRgAuJriUZu +7JNQR6BncQIK2hlQRR1EMQIoGGgVTVFHUCPuuz3IYioc8ScEDGaaLN5twGLiEAEc5nwlgVxfLKA/ +FwGuI8WyVEUu8qINwGRTjMc68Cc4lixxykXVFBQC5lRO3jhAlgHAY9YiAqYW1Y3EEw0AGrcy4x1i +CiEIkAC3dgnXH/nGMAOQwDdiZyAWOIApLOEICzone7uoPlp0+kmeogITRFEZ5pL/QXFxcASjNrkx +FgxFLKTyJztxTAwBAbNTcxORUiC2ejBxEYIyAGNRSHhDOR0BEc+SOPvzADkBAcniWyG1PLQFErwj +OU0xcgqVFAwgA1WXEDf4H8yjc3jEAhfEPRwRHh/BYgYAJiHBLxKEc9Qhd9VRLk9IFiRRbBCyellW +bAZIVhgxJyD0GKokEgzkbkCxSp2TEqNSFRgQAsdGAELgEYxAEnrhc2pwB2ZxGRkiEa/REB4xYOpW +XO3DPeSHAzZgA+JDOdZiA8oBUMPhQwGgBmUQDECBBLVHfl2EHhkAFBugGQPFE/4WQADlCGoQO/nm +XQlBAZ6gBhORKT8FE99BADpQ/wbIwxU/wS8b8hgwRD7F0oUCkTb0ZgAJQB1Bhlgd9nc2FoBKN0To +JSjkpxu980nLgQCKgib7xQDuNhTVFF6HElIGGF+4JoJRJyRJ0QHkE45BgUzpBhcMAAIccSCPsDuc +cygXMWTJYiZ2YS8cZCjXtHJwATk89lHq5T5mRRRhBjSjok+Pw4PEIxHF8iMgFBGHAYuyJxL4VjkX +F4sjgUHQwiY+IUEBcIPLgRF+E4D/IUwNCBkTQX285mX/ExJ/MipRx5K5BgA1oE3VMhwX0DvD4VKW +hhpAdpGDUjnZgmwAlDwg8RQICSsMoSgOYBclZi03lxjhVFuYcxUJ4BTOoxVWBv9hyBYiPIE8DiAm +DwAZI1Q2EDAU4cFzV8EAzzJj+mNsWRltOgcqdkFN5xQTS+kSDUIAEIQAG/mPGDQk/JaVeYAtAgCW +PzEmByF7/BdWm+JAtNaT9DJLwkZApAIjtShR2qQ+Y8J1/xh+CPGBVchim9ISlnIvNlJUbPIYCIAB +k0JdOiFR3pI2Hcg9degACTBaDBURgDMTK7Z6sVgZ2lIUQDFgk+KGBsAJMWEBO/AiO1ABYtJV4SFU +mHIQEXgAE9gXQ6gnbEMwojORCEdi1eKZHwGVxTIZHjGdf9k3IhgX8lNmxTgz+OJATkGQBVYvIRVV +g0FKTNcQw7Nt+hMS8hJATWH/Y9VSixgVV8+DEMICPxGRAalYFMX4PAs3UDk3lGRyZWHBjfTji+aT +KeB5Ek0FZH0BPByxfSRmQSqJc0AWAzb0bIMxYAHQoEDRh1RyTNWSm8PRi7tyRdZCHb0xPGxCEhhh +TckDGEOWJ+EkhCn5ZPzCpMjWYeoDccpDKnfDLw+RkxLGjUfYXXPyHY/xAGDpeg/HPc+iFPkSbBUR +K8ViEgx1ORP6UxSAFHMiAIUUEjDiGhDRkQGZlTe3KX+Ia1AiA7HDmE6RABvglc4mAR0gAfIHF+Fk +PXdBkA9RXPk2XJQJMH1BAEVHU09Apmd5AEbgE+lUGCJYFXyxKT5xW1uBAs/I/ybTZwAyEH5NhgB+ +k2wpASOtwhdO5pa7CoFEFCgecSVKwlsMBhKCIj5ahaDh0yt8AhYSsHAWJTqaQn4kcRgM0VXep1LS +IozzwicPSBijOURctyFUCJmUCVQMsqsK52+yMowT4CREyIkOWHBksiEkRRR/Mqn6FheJ0TkEt4Nn +uiFDOncC+H9jMlAiFpF0qigGsAFi83cJI5mRqW8Y9WD/RDmaSC3iAxYI9l/n2rH6JlAV4UsAQFtW +ikFgAX/7xo0XKW1Aqa74ekG9oib+V3U+UTkGYyZwgRAhYK85hhfL02HGBnGEMTA7QVAoxClxMWQn +wRBqgYTEs5tchlTllxAzs/9r8uJyQ4IBxnpOxfUSLisRZ4I509AQVQUXOcQpDgF1BsCeO4QrMzMz +L2imAHc3caVeKWSmu2MkHVmE+tSWIFEVBOhw/mYlNppCfwk+cfVTLSUSf5ImN4ct1NcrzvoRshco +tkUkWDcwBvB4faqBiSMlPrFejkMw8sNNlYFMRBSEhoJkxCqv0CIm2OeAA8WNRMUCcBF17vOUgEuz +cyMomlJge0IvEIKxzYhRQziqzygSgsK5Xqk+M5NSlwMZVdUq1zIcVbEQXQQ+UiISV0G6GQpQvwWu +FfGo+1M9Eqg8C+cS1zOhFisR+8lvJpF6XYazRFIduPgnr1JsqxOMCeAQBjD/ZIbhdHxiABSEEV30 +gt5rpucDFw4xAPsrGB94ARwQfIXEADXAAPm1A8+3A3tBAQcgARt0ERpJRNg4vSdsJXZBLGH1M0iS +K5MBHgBgBSLCAGj7lwgsLY8CAFdQnpLREiKktAeMABewgUFIJhchu5k6PoCRrL8FPuAjOr2IwH74 +Ir3ovN7nPnCLWHyEOejTYaOCo/xJLbVXVOJSJEPhLck4MLtBLd17cV/MxuZzK1OFdYrJp+hBPs8i +AVc5LTNxgd2zP+Nnj0YDKivbYdSRXpYDQhCZEHVHUNP4cCWBxHPDGyT6jcckEo0pjLmByP8LGWOl +GOjSTwFKtT60l1M5Va+S/wCVM2UtIi0Y8SsaIib0SRKuwWA0AML1snTYRxbogR4tQipdVL1T7CQ1 +9SSYI3Lc9J7z83AAJFfTxAZByCaHQgC7ARgQsj/CYznqhaarJscV8ZfKV0rEsno/shUvIRIKqzC5 +iREKwUDMWiRKlV4wIiaDzJgw9FZddGkX1EW+GFIInAJFkgEPMH8cIQEyEE8OwAGDkQH7g0PTSnfc +A3VhpUNsQxmnwq1vtztfS0hicoFQwTtBsQIGEyYSZQEboHqtAjkFlhnkQ0rTBBOuJxIlOicV2WEO +rbMD4EAtzRkT4bAO+0lh1RGT8hCV8yhpIy1HIk96WFQK5L/TlYd/9HAG0/8Xb1Vc9NRF9wIVBYYp +DBm0UncSNGESl3MRatNMnXMlMLqJAsBfZiE3bx3WU+oSvVhPZK2poosXOs0TE8VNouKLD4w4AGzV +tWl7H/dc99ZFBkCjLTF1PcRJzsZmUIV7MKp6DuC0qeJLFoDIEMKQsCkA9uURQ2IAhSIAxGIBUBEG +7hM/F7ETrtFFtFp1ZEJw3tQ9BQpQ2Jo8tUhRwzik2fbWM4YgpDIZlREZzkpiULJe8jwXZ2WmVqGz +aIWkYoJMePiXjcsRyYi4NlvNZMl4A5ADeqgZpiJCuVY6RRKCD5Zz02g9C0hSX8pJBsI9P4ACC+EA +KGAAGaCUtRkANIACKED/SAKGKel2AKd9f22lKBFVe99JGPAkELTFARoR0AxRKd5tUp3DCSRbSEWy +A+vEGwdgX96hPmCjNp0RtJZDQcrpZv8X2xXxM48hUSblLS5ekSFOoD8K08ITY0pnLRKAFI9SGJPC +tjQrXAc5pSk+qhmk2nwyhMPBmPW0ypLCjw/xVCnhEw4EKthLs0wG0bjie0MiAUHdo0mmdCtxj8uB +YOEL0UQpUQyFsZOCmkbYZpnDEGTVE+FdFGLCkXCFABvwAE8hA0GIwMzqPkCqYxSJXC8KKgHAAa8h +rRaETL5VTXtinVanMAL5PHzCp3chrtYjZBCxZbpyAG79eI/3oINyqv22/xKboWHhk+JyhTnTKCbH +YwD8NTNYqYjlGhlqs4kVLmwCG4RdWCZYR7AJ8X12wRsZh2Sg3REMsMJ+MxiTITsCmjsuriH8Nb25 +FjgCwxNaxQDFZQGdhy8jAwIWCREdnBBr4uGxswHypHoPLJulfTy8lmvhNAE8zsY9XRhpApM9MYwq +5RL/GBXocQATGUIGzW068SI1LeYz0cJPXLkhOrTqKwF9bhQslN3YBxMPRSoaQVCC9pNBQeYYySEg +IUES8IsIcFAwwtZ9cYMH4EAbkiA3tjpZli+vDLk3ms9T5crZY3XBo/I4OHTgVYv/NHcSRFYI8ZdF +MRcTETzTRzkSVtPh/P83BZoSz0IAQW1dzKPaI08RzUKyEQKes8g9SMqTVSwn/Hc4H4YA/KWVgFLN +QFUoFNRdr+HLKy725lpA+AOv8cr3+2am2xqcwmVylLEBq/caKJBSm5EA7lqjttrqIOEIJF6xG7ET +HAiNO/BNLMACDVsY+pNuii2bH24vDbZBsWKjIJG45EJNOAsloWMtSBARbHEAN0gAjyAWqEM3AYhr +zD5+LFHmgsJtmzJkPOtvSxUV//MpVQUSSV8R+HKzFVFcYdxhGXZOVkVvwwbREALS29ph6kahVK5t +Lzj0dJol9kMRiXw5e08UbMyTILFCzNRvXgEUqqdhtjet57Q7qlcQv/X/NxcQJgDhQICBAAYECAAA +IACAAwsTJkTxIMAAAAMCCKCI8cGBARAUVkCwcIBBCQYUepQwIUCAEAcIAEDIAWPBlTIsenRwgALM +AQhFJnQYgABFEklGjBhD4MBDBggZVFhYgYAACgMGvMwAwABUA1azBuBwEUGChSsV7hTw4KVPACeI +EIGZkKxCCSfcLpSQ4OXStRR7pki4YWFWAA4evsRxkQCJFjCOjHH4MPLOiwsFVH6YeeFOACoNXOjZ +tkWRziYtKLzA4GJTAm49LGSg8CqBSDCSkIAaoAKAlw9RkA2QwepIsgYcIFBYdsCFoSVOeEiQQMDQ +lQQlTGSBYMDcAAiQ/yM4sDsAxwsTQSL4YfFAAgorlwJ4QNHAhgkAElSwKF4l7wCUHwBVCDAAOIjL +Iw44GRChVhCSTgAEHjDAAO0gOGADCCaiAIGpwIvPp/oA8AhEihRCKLOHMALqwgEmGFEhADBg8aKR +urpsAPFKfC+hEkMskaDkgEKOqQQQMCnI6yQggAMCArhOJhQcyEk8HRMicCKFCHjJOB/JyusC41x8 +IIGENFypvgAsWEiigwaQiCGHsOzNIgCCBEq15HyMDUXeDmjoIcMC+O+gwghAwAEGBjhuJAQug8kh +RuMaq6A5HVx0OYIGYiiDPquD6YAOH3hwgJaWQsgBgyYFwKYDMrAShf+uEmD1oJAskOgi6TwoINdc +k3hvod4YeAmDhHYosSKGRgxAhr2mbPO9B2IzaSE3PADgiVw/qGgqswAAI9dEkE2oxUfBWwkChEqk +4AK5LruICF1zbQFLMadj6KBLKerOpITeW3K8AZaSbltrC0gEDO04es/DAAY+4rKGDgoABl1VuMgA +DCJrCL/VxNQttk1BTMiE1wYeIQAIkEzAqpXEMiDlBFgYzzsDYP5hqQsygAqAFLbLgMiEvLwoIQfk +MxZFAVgl6D2CxqPpRORWEtZUAWID6rJF9bXXZLJAA6osCDsSCqMDMCoRIQKG1spXAtAMwIE4D4pN +gsygUtdkJiFY66L/y3ystdje4gIZ8EcBjEyy5JhkwO22tSVgNwBOiyuBaDMz4L/renrYWKD4Woqm +slY+IEL7Ng/JxdEBoLq3qXhzWKHO8QaqpE4Bl2Gh0wQAbaAZ/X3oALnp5a9sbdks6LQzpxT0PXXH +LqjlIUc1Fs1wZVsJOQYkGEC7AVB4qL7QANgJi3d1JcKhEZF76UMKmkroP/DbBzxEx0ms6MOX6Cig +fBJyPSGubQHYXwH6Bz8CeORvvDETb7o3pcJYRACTGB//JMWQRhlkJT6xAPtM17sf9Sk2AYQOTAww +tk6J5QEBPIEADCPCgV3rAYIxW0JesgPexEY1VnJRUACABRVQC4VV/ykSn3zFgIYMIEP8WdplNvCd +CcSGAILJjgCuYzoiKuQBEgiJ3CayqMiIh0k/0kxkaGCfCwigV1QxCYX25RIETIAgIFkJA5YGFUQ5 +pFc6BGNmOLbCRgHKJcVKy0nERD/jXMRUAHJgQnjkoow85FSZKdZK1mK4qkhkA0brWok+lCMTvcQj +aZmKvsoCIBmOqSGfuZLZUGQQAyQOQAmb5OqmgrajVc1EZrrQQTbQHiOarizr09aYTJTDfs2kPWVs +Y0I+lByELE0iDLCARaA3Hb8QoD32EQr6JNCU3wFAAvHpZWaSEMFchUspDNSLscxikQi5zwGbGVFo +JNAQk1HkJZXIlf8JAFCEXFELjwFwlwBL+RJ7NuohITJg7+KEOgCMM4IqGJwvTfSmgTbKfYP0yRj6 +qZuVEOhEJkkArgRoMuSoUKO5UkESminKcFkgLC9CnUiw9BAJUGASKigACQAg0hLICT6HmgkENnCB +CsSNP4tSzWmesgO1lCY2Qpmp4cjGqL8FzaAT+U8AUlC47jxEXQOogQHktpcgUS0w3VnUNqGqQLOY +ZZJPGVFv/ufItEQGeIWriJW6KjgAYS1fp8Kj/95TOl/iaEoJY91mVmfVEwkLh5IJERUvlBnj6Wgh +H2qT8QxAgA+pK4bwCwDMIAk4h0jEII3ko1zoF7S5eLRFmtMXANT/pcA8knIAMmgIBIAVUWMtlKEs +cclD2PYisVSgIe/ZjQByQKJkzZUAuvpACT6gK50+jjcp25wivWkfqwhATIUSmmywebrNSmoEuYpB +W/IpGYy8pAgfGAEdhlnKCFnFjdPr7WEOg9MCwMAD012vZZlEUQYe0EUckZFmiDCCD9ChK1ORE9OS +I1ITtNcqDjhBrkjzhAuMbZAJIQjOCpI7mJTILAY5bwFYAIAS5FNQJR6IQBzwgINcYC7eVRcF1gMw +kITLJChgV+hoDJ+VqGmQPjLRjZQz0RINIE/EalHTfNKvmlgENA/alk/KphzDXjUhSLqMWbPVr8wQ +lC9ZZZcvuWqW/ymG0USSG+Y/DTPLEWZvTktLQOcYuTQkd+2dhFqIoZC8pJlyhrahCZrJKLjo/xAA +zXy1Lnz6Qk8LvMQh+mJp3VIWAOn4jIRE0wrATNTkJe2LAC2r3isXUtZw1Wgm0FuITBRCg5UA4Srp +AQ8GKjA1BwwpmgOwAJJNkCsYvOQBKT6Br8qmXUW76DRrE+GcXjJnNPekVEIxAH+96dBKEIo37msk +IifpkEF+yCQz/TBvrAIAN1xrdCn2ALjGs91Fv5bAFOXLMIFdP6rJySIOle9Q4NaCXMkXfEsqlo4Q +4JF6QoBGFSlRSHSVEG4zamrAmxOF2NSr97RnUQ7KwAoXVZiDLP9lzqir82rotULOWJzIzV72QyTS +kdBMki+qnI7YViKeEDXE0ppUpgwxk+7puTV+DCQljiITovr8LSQxx/goAXRAH51bhzcMwPK0bJIc +cfRMpQbxIPG1EnydSDIDzirHMvMvHeEL0T6ZSw4T3Sf3wZKTAHCcxc/nTUsn5IYmolpb8WIWpc2u +qVLp3VKqPsWFtMTpdLkCC4ZW1BlJ4AfayY0ECDNb3hgiV5FYSAICeISKvDMGJnDDzxOCFoWQ4Akg +IwAoXl8fCeT8CSToxEPimqsRJATACQEDFjQXmaEcEAtYmGRcJqDPErkPOZwUXwGoJbcAlgwoPQkB +CVBQlpfo5fT/r5eMSQxAgkqYT7BxwRQJmK9dAPtERRUA8O/GI4DTu4G9FOGIi0hQdk3y/iUSK4CE +MASd+hBfWT484B63SRuluKQJuAJASSbwiY0K8JEziQxAOQx9aaoVWqs5CT3amhNHahAiwRozQggK +wChSyYmfOB18ASkqgUHawgvNEACGcx8SkSK2YKvJMZzhI6W+A7vNMpwPMTHLKo/VARHLwIy8IpuJ +oJepmYqL0RO6mhQmuYwJ6BOF+BPskgu5yQCE0xEHyKXQ0RGHaSaI+RsLyLnQ4YgaYThGeRb4wJeF +kxvdCoAJqL2HWYr2QBeEWKaTcCBEmZoLaYrqoAiYYZTZMpNW/1IIOQIAxwMKNOETI7gA7UgBBtgA +CckWA+gAkyOeluENChi2AkgCmJCOAriBFmCIECC4XLkBOqiBzdCVJ+AvuMACF8gVIsCAEFGCViwA +VZy3FnsXD7iBXCEAALsB8IOAiRMAXSGAFHMBAsCApRgAYbwBLBiYRPif+AiAUWwBBviPAUDFFhAA +/CGYgFIBLGg2IHAoUmQr9XJFN/AVAHDFsxkJkcpFmDAVXUGAmsIAAcBHYhMAC6AAX0zHqSggAijG +AqAAXCzFO6QIX8xFnFKBAwAwFwgBiJmAdjyCCeAABOgABFANI0IAGFkJtFGIaMFDmJCjczGJNLsg +ErGIJTGe3P9IGXaxgPxbiPxTk65bGQtIgP9IgJzwLq0gi1ASE0SbrOIgm4Q4je2wDB2RjvACkHm5 +CDK0DzHpiooJnUjRis3SHqyakoIotRHJsxDEK7kBMT2xIL9DiCu4EAPgEbtZEaBiirRAltwoGt3b +nIX4AWExHXGJMDJpPrywM0d6J60oCSfsDvfBFAp6EO8oQ8ygI/EgCAqQmyxku30JDTaxiA65uIVg +uAmQq8pBFvf5EOhxiQ1wCQYIAQZAAOFYlLHIjg5jk1BLky/qRl15hc7AkhViAACcGCWgiAS4lhTL +lQlYyFxxA2ERAOGEF31BznziPVzUFQ8wCXEsgA/ACGLjL/7/Eb+AyhUXGEVqgZ3DwKeCM4lGW4kA +sk7em4B/fMbxKQH+kEhUpEZ67K+EqICAzBUSWIoDILZAI4hooM8ByIDpzJUnMA4l4T2Hwk4H8b3x +GcUPeM8CKIHuOMbxiQQ+4QCNEcmFW6IL2MWf6RW5Aba5iqedKLu1HBH2WQ2e+CbJyEmw6RUZIhsG +gCsmwRduqgwIgw0tuyDzYR7Oewmb4ImJajkNar6MKAtwLLJ4QoiRiws28RG3kyJOazMBG4hACiVG +uRQb25s7aTuCiC3jsjNZ8REdDBwK+MeKQLPkq47qeKp4YjgIQJax6UwXUYnxcE7dowEykYBuki2y +EwmrMNMc/2KXZSuUBJAAG6On0DGif/EuS2sI8FAIyOmTy0AISAyLGhgSBEiBdOmJ7PmBDXicRZkA +TiUXDGyUYUSWnfBPeJmOdiMnBd2/AJjVAgC/5ewnciqAEUAIWx2BBLDVCPoAsjiA7+SfXKnPFnGf +ZSQfRXLCXS0AN/iPXX29URyfE5iK9CQ9lyAn0rMpb0EIDHiZI6DPC9jVUpQccwSwAgimhfBV6QNW +GJgI8XwXJJiPH0CLlcgAFAiJBNgAggoXIrGdDfI7mdKK5CMeG1GSXtOdX/uiO5saTcwMNgTMN8VU +oSAQFBmKcKkKfzmIsxQRmdKXhviQpnOR9Zkv8+vBPHm7m/+4wMEJLunhrcIYjxWKoZGwDCurjKAZ +G9WoxAhJ2drpKk95uPbiIC08kakoEYwyl4N4MdhhEZ5gFDxkADztjHmCuHLRHNlSDVGSAMfJmSwt +opUoj3Mbm/DYSa3wrtqLFN0IiRXqMY4wCQn4k9nyjiF9xOByVBBIgBAgABxYogMwlQOwApOogBmz +gJIqoztsk+iQyBHYCRRUyPEsAmEsgNgABV1xARJ4z9AFwBOAEP46gTGwTtJoC+s8Ag/gJ5Qag1Ys +tsWQIG6VPmEsmQPIsH7i3AIwgbLUr8qlAMXhXV0pgTFYSA9wuOVVXQ0DAAAMXXUN1ooIoPoMAGEk +T87FiFH/zNA2sooSaMURKIEQCICFDF3OJZQJCKDx7L2K6JMTcF3YfZciaEXufICFLAFcsE4P8A4O +cCyEMIKAtRFgka3vMAsKzAkXATuzsLiBIBJW2Q6Xma2UccRIRIANwA+rgxl6uowC0oshIQDsET84 +a5lFMRXj+BqgBCMNDQoHKTIXmY62eVkt8pVo6Y+VqAp101M7osoT6Yn13BcQI6UNmiyEw8QYQROI ++Rrd2jcPfLFMPQCEnYDd4AzOcJscodpHKgwhekx2GUotJDfV0oqv5EYBQNUpsYidkyrGIoCthVuS +TNKKUEue8GDLkCNBw6ol4dr8S7M11iKGCK4MAIKQ845T/0UAK2CBBCij7HzcFeENGXCdUrqAThif +G8iLBIg+FQgBANgAh9IndDQYfNwmYSQBAoCgAiC9fYKXfUmx+uBc4UMA3ksIkfKAA8BHnQqAa5kO +64SLAKDeayW+zLDkd3EBaMEA6sVXXYUXBkjPFliI2G2BgVEBqWAAZzSA3qUWAehd4ZMAXUmZgCKC +hiCLAeCASOgnMxpFFXg9AWhFEmARfGwBCeCR7wHAC8FHE2CT8QwAW20B4pTmCtBgwziAGACrDcie +HRCr4dk1xagBhHgA9cE7k+tk3UCXC9ra61CWBoLjRixnkDgjkH4QpxQmFxG5hUiNYdmbC0EAGTBT +o+U00v/KgIvRjofgGEflIAIYpEEqi9ozy2jBCJoLvQgpqUTDU0DRSofgovgJLBfZvhrZF7N4gDct +O8kRlJdAVShACEFwG3+T5AHogJcIaxrWL9j6JzGhjjGZiDr16RXELhwOSoP4QoZQI5Grk4GQERJK +mJjEsnliO6YxojLJiI5AFZMhFdNBCD5ZCgTAgRqQTCNQISOogJBEgqvIAaCyE3vrGn2t3gcQqROg +CAYIqP4RxiMYSpGC5gMQRhMwgHfuDXdLCGdEAZEqRRB4rurFgd7dv96Fgc/kPfDQlYxo3xLpjRvU +VWaFgZMAMA9ACDzg5dX2O2LrXWgejxZIXhDpZv+xv9j/LgAXAAAWoDAZucnVvgxhLIHf0eb1EKkb +yE51G4ix4S8x6d0k6IlZ3s9WNIFLuu0PeBBUdY/guDy5FAqIw4jGXYoOQAgLwIAlERYLoKEBgY8H +v6DMnBF7araz466i7A0KLAk5MQDuYQAzYVp/84lN3cnvqZumpZGVgBxHIjRSaisp6hocbKvyKMpF +MyMZmi3B6A5f6RXgWKEjy/F6AR+IOS4VMtNaQbwvebErSIgUEOuEIIwx0pm/eYl+HByWjkkc/5wT +ucArwuu8bbQv8yxGqRitIJcyAjGy81msowu6mFOYQI5KlBGCWI6KoEDwIYujWWwz9RIAiAE+mRMK +kGwz/wIJG9kBB6gAIwAVXRuS3TCA+qCqIQYAE2BWEgiAFHOwORnFZEsxEsiLT4eJFAMDAQAwE8AC +9aPlpaBlAUgx1h3FVU4x800xuEAAV6DVzw3WhTAAXVeBpJHKaPkPLPBVfdbOAjDfAuK9iPlPEyAB +XXcB6iWBRpsshUix1zOZlzCBMXCoEdCtFNOnziCRRFhQhAAwNzAUAND1W3aAFIuEwcEMCiC2niD3 +nCqMV9gVU8+VVFeFCt1ygUWUd0qBoJxS7BkEv1MII3gJARGQFfgZdJpkipAA/waK3qiRd+IoTG01 +PxwTGHoqDZqs/AvZilARhtqgl3iqA7iQR30thfgByv9BiBWrIMT6rCWJJ7MzEWRxiMQsCyTrefHY +vuxEiA0wjMopMbbjojqer0gzjIEkYgAgjA4QGqwg6XBxOBC5lFMZAJmnk/mSk2obps7Ju/BjLjfB +oofVMV53FAWSK/85l+74kyDPnqJcGW/qDgmAHu3AAUQBACNYFErEiOgwDoR2gKzwLjtXoFWtJwII +Zg94AG17iE4PAACLAYsBMM4AQBapV+iSxtFbCQBMr0p31gkNQAAAsG4DIP6BABAqkQrteg902ulA +zhIYIVccEWkdgcy9VetsWIhTJgBLHzxox+vsCAD8xwDAgKX5vYRYyEmOvhKoihRTR80xsehLgs26 +duv/ddYB2HyBhGPdIBXYdAAj8B2b3qSJ1goKWIvG6eSILrG9IEMZKZPuGy0JtQ/vopPU+DFSehq/ +oBKAMEDAgAAAABwgAIBgAAADAwYQSCigIIAABg0KgBCAQ4UDFwkmACDhYkEDBhlWVNjQYkWWBwgA +EMDSogCYAAgUZGmQ5sUAFClevGkRpsUJM0kSCGAxgMOKEi58vEmxQsUBD1IOQFGxAkwrBjkY9GoR +gUwAAzyu1FnRIwOPASZgDOCRoQEEFgIkjOsTpU8JATRmRDnApEECBDziBPAyZlIEEmAyuHBgg9O7 +B1EykBnAgVIhBjnvLcjigMcECGQs7HBhgGkDAVB0/0j4I4GACyHr7qRgkEFSnxWPFCjwIUDwD2YV +jwl+AkDwAgYnqCigYoDP4DcGUGiuPTgMAlaSF/BgsPlFD8GLAPgRXcX44ItLnB8AvwB6AhBMBE+y +E+3FBzwJAFcADADgJ2BMAQxQHHHbNQdDcCqQthRLCUpXVHQMEmHWgykdyJx0AGjEnU8YBFBEcCUM +AAF5AhwwYVkmFkDEWQ/ClIB54XnIoHAB5KAUBAwYcIARRg0wAQMIGEmAAztYxMBBmTHAgVIZVAQW +AJSh5VJFEAjwEE6PJWCYAyZVQJ0ACLCwWU0AZACkXEtRF4AFOyFgkV8VaVZWQwfURVhIDcUUUkGs +Nf80gF8wHYBASDZx6FFZOR0gAG0xNQTURKSddNEBDBEggUxEBUABTU52mVJNAVwlkm8x5EQRghQl +FECZFTkJAG8ApHBTFjfZikGLskoVlE2JXYTSTi0FpZShZpkUqkE0BACTq2Y6RZtSBeGklGs5XaTb +Tj8p9SpTEwmQKgQGSABBXDIxMEFScMmqlEEXwKRuh6PNxYC+Z1aAAAMd8BabsrQOimBvMDk4gpM4 +EVCcAdyVJsB8HhwQnAuKYcCdSRIUF2JwI3zwwQggi1fBjWMAkJ1wGJ0QnCEAKMFdQRZf23IBJkAw +nwkAPDDAjSXE9dEHKhh3E0zFEYBFcQ/ABGMLFKr/AAPIIY8w33DhXpSUggDcWJwLwZkws3AOGFSB +UghovOnHiRp0YxFdWoxsTwbNh56HAwJgY3Ak5PiBCyGHXIIAO5hdJF4pbTpoBwbtqhigPkXLYa0o +GWFQrkFx5ROp1w5AVa1VaW4RQxJhRNamvbH0qZ4zyTRAlwhSVy1Dan1+7FD7HTsRpU5plLJcQCWw +VFAGoWBsYRIeiyeeDAlAkEEHXEWuBIQpZlNbzBY0QfZ/kj23UcPf3j1YB3CQkUxGZaTTS8aWlSrZ +wcvNqG9z5w0TZwckYK3uMZ0ZkwH/O6B5rklKQ0xSp4VY5E86sU2mHncBCFDHAWYqXwBCsJigGPAs +/66zlQNGUiYBTGAwGoGXtywWwoksaAQV4I5BrjICsLmhOAZRWgGSEBIaJgECDROObjDguKRgIAlg +S0CBjiATAbywACEAQAwL0AIU4EGGBkniExJgM74ZJEDikYlrdhI3nSiICNxBiRhx9DG+XKQ4ayIB +FglQRIh8rQAnYMgHggMTGh4hdq4bQMycKCoKfUAiBEgiFg7gio8hCyYEUUqASBCAJrYgIQZIRHBC +IIClpcACBkhABQRAAQdkwAATkNJhtiWvjMQELhcJCQUGgycCGG53vYML6sIAog2waDMO0aRC5EUY +3+Dkl0KBCqqkFTmmtLCFPDkQvC4gL4VQpSJ5Mf8WUTjEq/14JFW84lZQKNI9U4FKm0NBHgFq15PE +8IkAfzJIrL7FqBYx4GwYGAkGJocRmCBwUDdBC/Ws9Kd4jvOaw9PTBkGkk2Elk1fEAkqHbPUmmLgy +JnoUVovuNM2WpG6ZBfGmQeYUkxaRRiYW9EikWEIA/wCgBk4qk1s0czDkAeAGwaGBWQZAguDkcUMI +ekJzCHBTHLnxRIr5qXgAsB6DrOAEHqhETCSQRPsU6ASaqaNzAlCgSADgpycwGwAc5BwAzAdoBFBZ +AbBQlS4a5EKRMkiBkiAxi/0piaBggExvMKgSeOAVd7vI11TwhKQFRzw7vJi6yJNV5RjlLQYBhVD/ +TfKgiQwgBs0JAAOiOjyzlCWJBtFqtCpAVYbU1SIO8MAJVHETKh1kKWRRzANGsqgEDAAqNwne/ypi +EwSNJE6RY1IAMADE4wyFIlb6S0EogJYW+U+0GPnoOClyrkDJJSR4AQ2CvmKYU/lwXo66rAG8ZZDa +sqROlErK7Bwnl4kiK3KZcstywSc3nyTFXlRRZfNQ9V1qteRXANgBTCijFKoQSwIJ4dMv5RWtdz7P +dTJ5gFuaxR/ZUoQ2/2ORSbKkUd/8xSAUGEl1zSLegrToLDvhC158IhNnnnQk6gqVXJQHooQKoC2m +NGgFMYUgFCilnM0zTVUS4gAHHMAC8Oteigzi/1UYKIEAoIhjJCBAVSzYx2YjIMDEYuK2q9yICB6h +ZAHwMIBhNOcJabVjALKcY+tYxG0IKKMHKoCBSxbgBgf5adG6pgRp5sUgVB2BmCcRRw8YIIkFAIMB +mlgA/yTRDXK5kJ+D84QB0MGwWa7Ix5pXxgFRObCzg1zdpgo2n9xoBAaxmXg6zDPfyLQAOLFZhigd +55ckEQ8VQEFzwEBZv8hKXz/S3Km6VwvqkW0AcxLe656XNUYx7iAkGolrApAAgiCAwL07AAqyGSF+ +wk8iaNLwTVK1UYOoi5OqpWyTWMQQCDjgMO1VCjFPghKPNBt5KFnnKmdy3pu47nD0Yx23fSfR5v/F +dkInIQpD2VKYCSSEEdTp2SIFMA2zPBwAQBBdi7HlEwPsYC64DICnrkURvsBPtsJsyZ9yiVZF7dgg +PDaAM1t8E+ftDiMeQYGAhYeS7BIKOwzZVEzagqCW30Uu8QSAD2uMKAMIgS8GcAAGroKAWaEmyBuI +1gaRdJMW6Cg4SvCZxcYwnwKg7EY7C0DdqDMfEjDEZi4gQRKNU529kUDsLCmOM2/EN7EDAAceMo5N +m3OEAAVnMM+8iM109IQAULUALjBBHPXDNYux/WMMEGIBjjCGOLbgJvN52YLC07VE3OSKs3PIAc6e +ErV7vTljUIrO+FesnuWoCCa44nNEBFaLGcL/q0WLZo4X0kk5KYsqDlkdVRwg2zsnAAwJtRdLVIkE +q2QGUe1NQfkY3mzLCVgAU6+It5i2u2a1VwYXwaX2uepR+u4zBcFDAZVYwvLbfNcly6QXAFjAIfXa +Ty787CY7uwgpjMzOpnmfrWRKp1hTA0lU51DWbgQFhzEA2TAAZfBFrjyK8FhO8gjFUqDFTwjewjgO +pTDFUniKbVVEy6HV7XwgSbyJRczcvC3dBejORIzVQDwATRXbBi0du52FoyyTvVgQPt0FWkjXrOTA +BrgGdTyEUHAISkxC1tnQADQhg7gAXCSas3mVKxQEVeEB2VQMg5hVezxIHLmBQagCToUJVYmZ/1dV +QgJQQIFkXpdcyHbcwPdoE0xEkY5k3g7pCB4YCU8xiAkcQIFsxxIBABoWhKBpx3IgXnDEgL08AJB4 +FRhYCxjoyMVsRqK1BLCBoXTEGlsFRwtcio4YAkRgAAUIQAZAkFVQxwXkRZ1sBmi4W94wjw/hgCBY +k3rpF4IkBEolhV8oGFnIC6gYBC7FUzSJBGQ0iVt4C88xi7FJwF0cYUVk3EIMgL8kgJOgUUWAF+4k +y0nsBVqMxPDUioEdE65xSk/oxMg5z1/QhCcFwAaARqvkWUMkQAZwD0y0HEQIABXAxOIAQAfARAZ4 +BJANj7Roz0ZFUyvlzTFdRDSlCgsaGwG4S//MdWPKzMt38UxKnI0rDYZrBIlBsEBtEERBdI9/bMZa +XBNadE+QlIuk1AUXjQkA/GBLcAW+SdScDIAEAYAFeIoOHYi9fI8QdI12vEQIFd6D7Ewh2pFCUJU6 +KaVzUMTX4VRQCNoIeFXvMFYBoMgBaFZXBQcATAAU/FQJHM5QUt4IWMtaBcVQPohupJBXfSJwseWU +RQsiylFheFWpDCXW1dBNUBVyoc5TEYYBsKUKjB0APFVNPY+ecJmAUJVtHZIcBQkDzCUCUAABbAAE +kcWzGR8FPABUGAYVpAyD2YQE6N0/wgQIGIRqAoBoAgDvlU1X2OS3LRKqHJP9geVzmFg4qgT/WFoE +BKWFiwGFXIiKaUAPoFDHD0TKarhLluTGMnWjYPhkqeRXUBxXsOxEYl0mBo3Til3FSWWNc93EEmmE +8HjUd3GmRTACcsVTeU5AmAiBSVjGBPgQfZZYYcTEm8WOtRjAikkXfp7FqxgbUwRgk9wEb4qKRCXP +QSWYADxGi7BAUhiGQhQjAiCJkySoTLyEhOjkcdiKZnwPcmGWTC6G65QPAHBA8EgKQ/yYR2QAVGhF +SuSAQXgGigoACcSR4sXAeXVX4akAHSiWdXiRgISQh7iAhCZF4SVBOhlEJTTHfFwMb5wMQ1iMoQgp +rthMEUREmp2IG5rO/1iEd41BqhXACCgf/4F8DAXEkRHlT/AgwNcdwaZA0BMkngeUxWAhDl+2ACWW +qdgMCEWYJHdA0FxQgI+aABjFWdkkC1qYwIWoXbicnWAUXgvEAHUAyUO8o4XqEZyIzvBwEqBIH3xh +xwECpkxqY+woy2BoH6DyBzslD0FoBQFZ4/NYRFMgiFqYRJC0Ep8ohAFsABDUyaz8CX9skPuJKIgI +BuRU4PBwivFkTSfxpk0wFLKJ2FhtSYZlRkddFgH9hWDYxBE6iW8RHe602DOxIFEIhHWKTo2oHEbK +y7vtBBBgIENR5EeB3004yQK+a0XWSVMQoEZqDgMmErhIVJDk2/zMZLauyYRaxgOslqYmIf9+ltOB +BRABDAMWbKFFcMARxhgJVEKznoQ4fYtIKGGLQABAkgAS2I5NGIIJEICVUIQF6EYY8OBOwEQMvCa8 +SKsHiBlKwIgHaIQGWUQNGMSMAoAhkMATnGkAaJVimAAewF5vIsAFmAANlGfUYgEotIi3wVaX5MQD +uEEjakaqSMD6JOgiuV5NmI9ctGxMrJjRyOtB3ARYFNtQJeWLgRCo9g4bAEAMkIAblFRI+JxP+EsI +SSRLUMaHdmpTMMDs7EBF+NAAxBOQCFSx4EnjSg6eveOP4AQDhGPcqoGr0uqbqIpiEGvlAkpv3qoR +ClibKIqxBU1F+pLyhAtMXRZ1Ju4VSJP/UFCASfQP7XrfcALAIAithY5gSsjWtwzAD9BosWQLAFgB +TBCttwhANAGZWrSEqGyUulTvcq0VoCaUphAuWL6EKebmZeXFTDglRnhteM2FWsyj0RTLQhBEkMBg +obhqMFaTh45UQzCAEDAFcIZQ9zAvANToAwiAahIAaoHAZXbAnYlfSBZQ3hCPTcIFA3SCRYQBbSBA +KrbS4PFF73CCQNlEjTIfojCEEDwuvAhPfZIIVPwP2sQZvPClCeBcghnEmxGdRWTX44UHM+owsj0H +dbhGgi6EzfqFvcTYB7YIUXiLeHHJgTxKv7nloAgACygQAcQoS+guAKAAAVlA9DRbmGAW/1rgxEu0 +CaggxkDIhUcaQeHMGkZqaABQCWYGS4btDkuswNy0GJE1lVukk/bJiRE+x1Z0QsTuRLM8wAR4VFlU +WHu1hPRhRzkpRmRkBgJk5gIOjzPdCfhci4uhC9ag4EVE20npxiKDiG5kgFFgY0KU00skhpwslyg9 +xEG6pED8T/uhwEYF3GseCaC8ZwAMg+tsyp/0p0HIABTcbm9xnE+AhihVRKpYQK1Em1mw1+R4xA7U +Sc7VJLZwCLGgCwBAhUdEm48h01mUBcdVBQXwxgEIWJ3IhKIoBWw1BAIo0lgYWJw8W42JTpcQhOAV +SUJAwJsljgPoCwg8BEVQAUOAwORyxf8AJN3/ZkaXLArmMoBvJWFEkMhbtOp7UVacvFxLSC49F4pF +ZIBF+NdGP8QApEB/DWgXFsCdHUCqHQDZyEXoZk0WwEQeREsepKbotU4FNK4AvJkAnKjhFAlDlAkt +wYuR4OcSQpBiVUWrEMXObWoieYlZWIQFnBTZEMDiVMDi4M9NmE1odAm8dI5B+CNqUckpYgBD5OTZ +6KAAoMCf2LOAvkVRqEuQOMDGIoCU5GtspUpe1E6CssRqREqKKIUqIcBpVkDlUAV/yAsKQEGRZRjk +QFTkCK/ZdJc4H5EHlW00EStF3BavyAl1tNJHUsSxpiCyCMbAVZcqNbJaEFAik0gSXoD/NG81T3CG +QWVKQTDNUEBESKdJCqLWgGEEDsAEb0aLg+6OTdtkbV+We+VKL2JLqiAXDzrJ53SqVGDN3KCRgQms +vHiKXzhoiEWLgZVF/1LwhIRKApDNjzEFBdTJAeiGBKAETIAFLDXQBs1OZrAEbx6P5drOTnxTjeaC +sJCx99mEukgAAhOABRDinWGWek13EhFNc7jAQ7SIryBTLM+Pt1QAFZGLiQG3ia2bU7oOQCmYZfcO +RfhuNCfUPEJAzV4FfKXEtwbFcMvtAIBFkZCEQr0YpaiSV1xJRTSOKGBAQrCGTASPBMAWf1/WPhtE +OE6obCWEBNzKiEL5bswEElKKf0VK/zV78+00Tr3mcOSsb6o8wEfGnEdkckJMXVlEye4OFA5i4HHw +91FUym0Zz8KA5lObtkBhbx4nxQYYxsLwl1lAFH3RhJJkTWHAhPxMN+yKc44V8neB2OrExGr1Bgl6 +xDIWhL0cW7sqxrjojn4hhjXThLyQxaeoRBOHKccVd3vZy3FBDlhu1LWwhAUVelAszDaPRJA1jwyg +EI1ephDoxnti5o9kBIlsCgb3FiOYhdEm+PnWq4RWhBDARBioG/9YBAjg8RIWRNIRwA9k1xHdBG4O +j1Q2hwc8BJckIfV00bJkFwY8pk/C2ytFikk4k/OEI3YfiDr5xKIU1OsgEDMWq56jRP+6Fqtm6JAQ +B4U9vyZZSzZB+FBSJAAsbymfHNjNXoSb5FtkKMUF7RN8HVgNwMWgsPng5UFO0AVJJY9NGIrouKKD +SgtGdARnk4Vu1AtceIQF6GOOBYA/OvnER3K0hYsEFM/0THkArWCBdRhK3Hy/sq+mDE/3/Ek0fW3p +TLpIiJ/vGAAnxHtDUMA8seLSUf0GUnAz6g5DGO2ps8iBlJQspmDRdUhCoN9O6gS9aqSGLcX6ShdC +VFzz3DjJVjk9zjOg+LPfBxRLAFmf1MVtuLOz7WKJ/4RB9G9sqWq+bUCZyIo+UgcQpObgtQkA1AJD +UMFlGkC/mFvmeujCoHRNCZA1IUD/rtKKh1puia2JukQ4bQv6RYS97oRQjn4igqBUa4JbfxQyCOx0 +3LCPQDFUWVuG1+IJQUgQZJ2Kt60Fr8/FOo1E81DKFIMgB7S1RJCNa7wZlYwSspYEyQmKkBgEauWK +mr/mWBzGhBSpUfd3l7gOQBAYICSAgAABBAYAgEEAAgAKwwAgAAACAAsKKwB4qFAjAQEDNA4gQIAB +AgkPTz6EgmBAAgAxKBhwSKAChoIAGHB6KIABgAMDDAAYQIHjSJ4eERwAsOHhAAdAHSLUGEDmQ58B +QEpUqNAgAAMDEGAVkJJrRxQafU5FaxVt1QAJBmz1mRXDgwEtewa4ADaAA4cGqSa4/wAAgQPCGh1Q +sBoiJIGvDOAWNCBA8Q+NVB4qDQAiZNuPAgwEOCBWAICupZUCAKIxRGjNAiauDeCwp4SDDhMgKH0S +IWCcVh+ENSxhsEIGogUcKJ3R48HQYQFcGG3VQIK3CCIfBBAC9tSMAHIctHuhoYWgB5gecECA6ESR +gwlkMI3BJ4a7AB5IqKGR88OKAkpDwCOQAATApdkecqA0ASIioAOO0FIKBNBKS0goAwywgDEHpiPA +sAkeyogqAwhw6YkSPoBhBA8cOgCun8KbTCO7OptGoxw8yJEikJQCrDTRCIxLO4mE8qinhSAQT6EJ +pDpIoAf8kwiCrCYqiwALpERLNP+hjlxLqwyV8vChDkQyLUGvHhJBobsYEDELjVZgYAClOEBANwIK +mwCo1CJ0oLWJeBIKtA3WNI4A22zTiAONmDoIK7QIOAADCmATIi7fiJSAAA4OmOBODgzi7ZGdijxA +xgFgU8iA14rEKocEDPD0gAo2KA0kqQCQAAIMTNXKs6wg/GjNqdwzUKMrOvrxoSMVmojJkKDraVOJ +PlsQhJEyaK6imwBgsqD70Lp1gMEA2K+ghiSybqOKKCLgXAYm8IiwoBxT1zABEjBIgAd6NK0301CF +wCUBsMQvwtAgNDNWAr1KqDSiEDoXpNAkIiDJggoaTUAGSvOXPazC4kjEJJUzkzv/QA1IQSEODnLA +AjsdcOAtyipKcocKJoJAgMEyyIiDHISaUrm4OCFpv9IYuMiniAI4iyP6hPIK1YP2I+DarQI4zupb +QzIIVYtAegCKkEDCwCObqjT2oUglQCC0j2ANgL6gNCIPQ1ihnjNSQQU9qWPnNOrqAa4CqGiAwXXr +iSfYBqiIgYv1LPxrp7Sj6iPTugTRTABSmOg7Ly8HoAONUlhKXsnXyy2lVV/2CjYCYrBCoQxGk3ky +AxTkHDWNsBsWACs0mqz34xAqOI9mB0ghh4n6gwskdY1AaNEDQuYdsQoMwIBumTVycYLdwKIwX3xN +sxNBkC5wCQAODJCA5axjSOCA/5RiE0u2rEIjqvzRLpVRJoUeYBm2TGUrqaFARh4XF6tkhUipGQCI +AjABDIBIACKyAEj0BJrGCQVK0vJSVuKVljLBK3DHidBVFmUVCaRkIz+SAUcUyDWhiGZ+X/nWjwyj +Fy8NqyuBy5VBlIIqkEwpAezqzmkWBKDkFEg5SwxTR6ImFD6xJjlBaxTHvGIdPmGpL5ARYki+shT6 +ZCAuF6jVX1jilWZZLCgFMp1VAqCYtAxpTSOB1FoEspbUdExesdEIBAiAGQD0Z34BUIIPrQPDCYyG +AvvpiFwsYrGJjC6KHasQlAJgnnwV5iDyOddfSmMAnZkmVOQDgHwMFEq2CIhIv/9xlxofsCCRKORB +6FobkZK0nfU84GfEOlcKU9iUDmZlAEATCvbucpePHIACUGOKoIZULo1ozpE1EEi2UFUluBQphBrJ +iwT8QhUFMqADtJnIRGySSABUgFzRuU8etQMSkjyEKd2ZJgMmQgMEpCAuEojLAQ6QgUS1pSgPcci6 +FEg4jbCQBStMgAfRYhADZCCaz5tTs7wELdMksiFcEdLXAhCckIYGQwBgwVpYcBAHhiQlzBqgrdBC +yTeN5iYR1AhROvasbZEueEs6iAXsyJYpToQ31KmAQmA1FYAaCKkaGZgBYkAYOyHmIRl4yh0pxpEC +lUhV7goAdzQDgB8cpGNB0VT/H9Niw0c9YAPGdFDdANQSicZHIpzBSm7UBgAKjO6VWTmoViPigUgU +wSq7Ed0kFVKCEhABlRlQTAaMmDzNDcM9IMlKx2Szg7hC8FlYegAF/AgATjDQkkD5yMVOE5c0gi5w +haMqALj3FJrupmDCUlbbYCMzCTygjavSCCVTkzAB5NACHjgBERQIqgLxlTN5xF5aNDIIE16gTpQS +wA/kR71mnTRSsDnBcTdAn5TcZTY2iUv4FPITlxypSpTxigGUu4MwhKUCR+KV+kQQHbRAbSq1IEzj +vusB0xDgBC0grAVi0IIRtIAEAoGAbV6FgBzQ9wQlKAJ/I8rAV65lcoMxwHce/8CAobkEJKg86UMw +BJQBoPJN6+vVo7xEyc/cLb8BkE9YQBNH62DvOhyRgUaUNpgDFOzHsNXId9SX0VuSMjkYMlUoLSAz +uCgrWe75VuEYgEr1TbEtiepJUIISvnWCRortu01hA+eu0diKIxyhmx0nQi4oGWgiBgjBAdwjgLxN +RXNWQSWWNAdBS5EOaPlq2QB6gmigYRGSCuFMNn+UMN9J4AkFKEAi7GgdeJoJD5YeAVoccCRiOgRq +9LmsS2JTrKi56yOJfgh9sPKsqezAI3l08B8V4s+Q6K8jrwwtpDK2wWLiulMwRFqyymImQBpsJmt5 +mA8nwoBJWPoDEiHv4OYkM/8HvgUkbstVHmE7koFhR30QkqcAwODpvoxEKQewTADyIJEwFPUhULJm +944UlZCsTCm1ipAckeCR1PygY3E5pEGAYOkjUGAAnS7ACFw0AksXQAWdIQChJECoAajC0iWQ9EPk +SEAt/QRgBpraUHwax8350VGkEoDmdrrOhAEACbv2DwYY4axc0WhK/4XSAD73nRG20GBrWaQe/2iV +Rk2mZTJ58kPMM5keEmkimzzzzzv5Same55pVdt9Ipu8APDMGKbKByrOjHR4imKcCUpPoSusMSCFYTd +uUoBOKrB+gIrKDlkBROxgkAiRaBaTYSM8VEIEet2nw2MxF25HM1ECralv/X/tCMmsPQJMNuYcGHh +8mtZQXIOKgHYUFIIKPkPFNOrEIarsTueDCV83XitiN4OJLaROm8BhOpyAwYCeeFOrgItErt8y3Ds +mpJrAaMZTCpNin1xSC63xBELLJ4CHC/ACYgkIgVlgElj89cGHDcAJQTACEd/nAEYkJ+kDUACfAL6 +QSpAgo6T6wcVkUB4chKYRb1FKDKzQE8uyC8cwzRcBDtiRoEARC9QQIgY4jDExIFMjQDGoOPgwvIK +wAMGwA0mrgBgoHyqxaoGoAYm8AIPQ+tKcCqSTG34Il/extAMbcW4xnJCQ34oRmXQpFcWwu2iyEm+ +IoyyB0i2ZXBihQEmg4HK/0QtIuVQNCKqfuNRIASSAECQSmdw8oJNbEPU6OaOZKwo/OigoGst1Edf +vIJcMqA7voJOgogmRCIuGAPrMi6IUmN+rOLXAOQAkiQBAYTuZshRhARPoIjxEoDhKARKqkNd3qov +CINDGmh09qpdugXIOEMARkchsMSP6kwiHsADOm8nfirpAEATr2+BDOcBJuLn4mUAmGbrMAsjMBEs +QswwAKD0hstdBuAKSioWGUhmwC5kYFF9wC7ZZCaObOIBbGJX9ItynOIuLMA68CU0To71UOUzSE5Q +biWHpIJKhGISo8HSWuAhMuj4pBBICOY4LgAEQAIHFKgCZkmZMMAhGEg7Tv+CCDqOY5qpOgJgUQZg +UbDITEIqKxYPLBKAhQoFJ0LNm7TEaQahe2ZHOohkELxKHgugBIgQIk8gAIpg4lTgCHzlIJ6pdECR +BNAiKk6CgdToAg4iX1AMa/5JXdoOz9pJS3Llt1iLRNDES/oDpPClubYQYwIjKFAAs0IIBLhiQR4J +iiYPQralQvQqI/Bs7VyLIlormpzN7dIL5G4KLU4CzOBoI5TCOoKiiEpHAGrlHslufUDEC7uCel6r +3BbKAJiiB7FCIfxkqYDkCWErYTjAAiCgdDrCskKtNHYg5+zOqfDJmx4kBDdCfwwCRFYsXD6IKy1y +BD5gEmDyN9gCFLEgNhj/DqOKJIrwQjagCI4eyNoc0wkLB1fyUUsQJpcuB7PqLrRwQCN2QCJKp4+C +SiCMwEMOT1gG4CKywkVcg1j4CE5iAEGCp5X4xSJOwNJAUm1uQjkopVZGgwOiagBCICIOoANKgwNY +LpOGqGIEoMhqwAM+YATc4CNo0l164gI84iPaSywIQAhKIxew4qhqr0m0QilgsTv6YhjuIoTCYy06 +wScgYDkLwATswgNgAAaw4BMtbQyOLmqSZAKwhAIKlDkrYiTSSz6orCmrLiX95XYGBz8gj5JaqSk7 +BkvUJyuAyu4OwrLAY20uZkoywgB0wkNswwGySkGupCMqwCUOqXtSzdk8/yIotuI0avIk7CNrJEov +yk0rEyYFIckoJEJEvmaOYvJeSKXoNoIv6YZQOpMKZkcjYpMwAsA2HMUong4/0Icq6IgGmjJrFGNO +/og+cCZJEjKQ0II1d4AUl2IrUOUiisKEFiXFksqWfsCPFNFYZoaUiARA5KXeAEUjWsDS6ICAOORw +DqI/misPCkQAICCWSK6MhI8hEqABHeQ27zA1HClw/okPj0j4UOUnzqkCQAQCiCIBzpJJKKMgKqA7 +DCM8ehMrfHNBeo4ttCPaEKMML8fu6IZgjKBbksDSXCEmuM00WKAd9Sw3ysgwDkAQSgMKJkBTJuA4 +0mgD6PQCTBLq5K1ZlP/IAVgmH4noYhIgZ+q1BuLCHH+nOfBODDPpIPYiNmYCBQTBIo4ku9RIEFgi +AI7A0kyAQwSAA+CjYQuADkyIHwnAJgBgbCSuADaszYAHQtigRDjxRySqo471VgJAgMCTKkXioByC +Rj6jcvZwmXCC5OyCfxinYwaHjyAJf7YOTQbHtZyCgPxKIsqUTM7UTRHguepswypTfezzzzoNSHL1Gl +7eySR/ADOsbHUdPCVJQQai3xnOTjLiAgNPxiWULi59DPXw5CD8UJtr4GA16oJ0yoJeiMSUEOES0C +AEiABKKKzKZJPujAEKpTgTyHBDohhWhxJExgEprFTRWlMxaCBEzASz7/wNIKru0kCQBUgQQ6JXB2 +RjQs98zWBIcCgATcoOUAl4BKIwZMAA/UMVzYZTpQwxAqIXC+B2NMwwEwoBJMANagZgdI4AnsizPN +Zk+jESSOQ0/0yhXcYCca7yA6YBL7EtUwSSNgwNI0gg6acyqUxgRMwAJgwwKyMgsUYjVELAxGQ0NM +wA3SryHkgyagFo9wpRIys5XUZ7y2YgN4owyxIgRMwBXSRyYSwCV0IzVmggBms6AC4HIHCAAytwDO +Sy4fYnsLgAbuQjcEOAQIAAcmonRcoABuwMj8UC3+EDStYibarLBmNaOiQjJCp5Um55xsmCRbqVnO +AoXL5Fu6hSP6o2oS/zVrGoOY3MOP9shL5CU1ECbz+pZbOIJcNOVYtcMgAIUsWom1AucA5sxFtGI2 +7MpTT2llziKFYgW2MsIgYGV39kYHA+fOekRXvOIOKYBlFIN8i0gpKiC41KJjSmADk8APp40DQVEF +GnQ6QqBSLS0RjM1AKc4EEEIpLK2EreIEVGDiPOBIbkBztaQwCcADNpkb70I9FZmEK6FFeWvinmCE +C6AICMANWJkIbgIMSrkFgslRpiMAEmzibgAL7CJSAsDSVCAGMNgFchUMplXhQhhQJgIJQNEErkQ0 +hNmfaJmXL7U5OhYLQJUOLA0G7lZzUOCSVQAPivkJPCQQ/3jiiOCmLP/NBTqAACagAxTZA5B54jTS +yKSmXjdj4jRi4iRggl0gBLJmttJZFeoqBIRZikpZBejAt5IzzzzytAArj54dxm4pRghJNgNhhBTgLg +kgsAKkMZIicOBkaCYgugBSag7xTjkqsNFluIojCKQwHIJbQLYHAMFmERO6o0o8o0IxIgI+iDZCM2 +B8AlFo8DQ9YEAS6GqGfDdK0nr9BidgetPbpC9dpIIUzymTBAU9Bi+LACYmZYLaRSKLwQhz82CyOG +SIyzS5oSLcq0tXyiJw7gSDYgKPgSTFnilb5CSKZCnmhSS+D469QCTasHz8p0NTTqJiYiEjaw4zTC +Alm5m2EDNjp24rr/sVvSmZejyiO6WX0ye+IaFACoDaMCCie2sbFbgMwqW5jxYCogoJsn2NIOIJQt +7QnwI7YtLQn2lFqudrUpjrLkhdoiuwCIoF4x2LJxjakqABSxL+cu8qRl4rgnDgzEAoPBVQAssATY +IgyFewOxD0BwobELwBAuaIJHh25DGQ98uxt7WEssgNr6uQA+YLgrUijibQBOOxJoCRSTwC58uwDw +QMR6YoKjxgKxjwCoLZlx4SAYoifgGySoDRQnriJ9OxKAB8JPetXuKGFQwF1Q6aASioZHAlhQDZVW +sSkAYAFPaW28qvbCRVWaJK9hrKSchM6CtjPBQj1bxqA0ggYMci2e/+mtG0jrnLGHnGPmNAKxtahl +oTYLneqqO0YxJkJ9PGIwwK6HvsZigtaPCuY7zOPGueVAADtO7ZI0oTJWQEMJSuqc9Eo0CMCjG9u2 +Hbmx8cBdRrCxi5PzxFu7AcAVPO2cxPvhAMACP22/So8G4HwDo0rCN1AjJ+IVAv3hGhsLDuDON9C2 +JxUtGB25NcLhxPsDAmDTa7s0zpYiMED+InIhLqBjG0zUC+CeX5viOiKdPUBzZAQAKi3QR4ApA/0I +9pjAOccQ2tnVbbs7WhQAKsHTAEDYdd1XegLVT+BIOrYIBkCkN7AbD2qSiYS5CWCQYztIgSYAJvoI +elMDH66UO87aJ/+OMRbP0mQZQvzoQAaQCH+t1HEqr9YDxYLp15ZlInY4irxEkKYmWNTm7l7ojlR2 +cPZmInAa4VE4Nb5DKzUnLtPvLu5laQlDcy6irG7ixHzcN/jEpXkjZNwGiAAkA3yLxNZMpfDjAiTA +AKCkStZMS94CZ/j4CzOD/RriRyAGTi+RXb5jzdbDGTUCAzLAJSrCebAE1UfABE67AMZAADLbwjy6 +BMzDoyOBBGL5AQDaBBT5A/AE1SNBJAzUBUhAwlEA2gGgTAmFAKzvA0xAwqk9lF2gCBibex3DAjnQ +BCLb7FnZAwIglE9AFf5+jeZCADzaBcYgs88J1d3dQDtQ8Ivg77v/ZQdEDwMuQO1BIAaE2SM8GgaI +QMIBBr4lQpFJ4Ej2Ue8LABe+viAg0gXiXpiVWpFJQa/mOZRLYAz+vtTD6CEM3G8x0gPS+QN0UiNA +wdKi4auFGUDovggcmQjzhdo+iwEUmbAcvwBcYAT2bwJQIHU7rjpGMEeSGQZKoBqqXvfdnTUctuTc +Tl9MRVXk4wHKECcMAlTiQl1SKWtQMsmSw3IQACAwAAhQAQAATgIEAFBoEIAFAgAgIAAAceEABgoD +CAhAYACAAxQDBLBg8IBHAB4DINhoMEFEkCQBFCQAkmbDhQcEEqDAUeQBnwEWUhQwIOPPmwMFolxq +sCjSgUwHDBBJ/3UqSwciGTYMYCCDAQMQgyL4GXSgyKVKKX6EKlJq26AquYY4ADLoVAMag1YICsEg +BIhZDJLkqpEBgBMFChRBQcBDgRsmMoxIDINiicRHBoBK3AJkEc4hEhcoCEC0wcsFiAxEjcWgaAqo +PQAw4ICmAwCox4A4/NiECdEEgh5JDOp0YhUHDKBG3iE3FswQJozhHDTBAQEGBDwvgJxoksQkDDpO +7CpH6QIf3CROgvJzgRZSHwgeQIEzgBzujwRQ/5iCwO8FmDDAdi2U9UFidGx1EmoFuOFaATAEcABi +BbS2gWgkoVYcBqJtd4Rh070XVEdajYeLALiIpgpKiX1AxUBIBP9XDWcYPEACZgEYctxRwwVIAQOT +YDaBAQgc2GAADB5BgAAIEGAABiKN58EFDKBWAgEUetABf0dcAECK7w10YwFLSrARXBUFZ1BbSAxk +xUAduOTQbFgtiQBXGyTA0W2zhYRXAAyoCcAGhh3gJEQSBBfUkAb0JQGRCAzgpFoCyImCSBm0lZxQ +WVH0o0EZoBTqUwC8CQAOSDllZlYMZDcRShB4xJJBs44a6ANBbXqqWlBRYAAF2F2n0UAPEACRYQIY +q1BCBkjlUlgGXBCUlwBglaxKMlFU0Q8gJcRAmwFIu5BIBswF0bJC4XVAAkVlkBAH2HWi5wQuBTCA +nOOpUIISBHT/Ai8FRuJiUGgQVoCaCVA41CIRnA0gAZIlkEAABBSa4CUDFtARFAOJucABaoagdBsG +JI1XwAkUxHDdAOOdYNAFUgZHYSQXGMBwAVdaQSEdLSRmAgMeJTbCQGVORaHLRLnnMgDjfeCAQC32 +HKC9HKMnwQChBtDBki3am0hiuCiXWAnWEXDzCQLoWIBsBt2Q2AouESWtAOMlURZlK1CUBR0CMBBA +xy7dbAIA7o0gtTIQBHAhegqtzCRuPg8g9QdBoSD0QFOxEDR6JgEYXpaSSnCzBwzYmJgHGMTqdgFU +YJnYDTVIGFNgvBVAQgATHIxk5FIbMtV5lANwowsiFRRABh0Z/zTBQH05JCkACQR3W65VNUTWRntV +a1D2ZXlJwG6lDisBAK++SBRZXopA0W4jjrtmU2uWZehsJ0mgZ0OkjYr/QkJwhatBgVLUw6CyFqEw +5FVryoj12FWS21xLLJXSU3awcpTGQYQkBAhVBQcCEoPcJoMKqUgAYiWUioRwKgFg1wg5oJGiEIUh +cxmfR/jUEKK0sFIb4IogKvCkmShkfCZLzAlwNxDRAEFNlAmAkUhgCBL8pgAj+FqFfhQUDhgAJZMp +wBNOggECVKIIABpBAHr0hJs8LAA3O47LJAQDBDVlTCUQiRSJMJUshicAUozBEpn4xKEJZVxGqgRU +nri0LMomD/+VWI8dcWGCMbkoJDlZSIsIgAQVJAYibSxAJYhISAigRjUg2REAxqeR7EixCAt54hEo +AAEBUMABrihCjz6AAgioYmxjPJ0dScBLyrxvJUGRIhgQYEiKcOkCArjORh7gSwGI5jqZHNxHniib +BEgpI8epgACyWCAERMpM0MtlAUJAHym6AgA9ogMKMkmCIrTzcgSYjpJG2AEAUKAkvyPKR4gIqo9k +zZUJuaeC7mSQlbxshJLS568AwIG9SEovQIPKBDrVFAMUZC8BoMD4ICJQcXWQgNkJypkelpCQLERR +QZHPVt6XHQaI608C3QhZPnqujZyLAihMYUFk1Te4DCYBd/L/SHIu1SyXHAAEEJkIRwTwg/GFEwBA +CIqpMsAAkERvLSgoyVay45HsNGQACCjXKKHikb60ciQiuWe03ocUjKDkCaIRTSI4epzgSOVyq4tr +i4yUwomsK1kCMJJBCBCDHsXVZUYKjpoOYJgY5JUzPFldDeG4JCPhIShZBEkGMnmAx8b1Ax/xCEQG +sDplBWBMbDMSHTLACEJaUq9Cm8BJBqDSNqoAADfLDAAkC4YdCICau6uQQRKJHijgZQCJS0gWBQpH +QQggBJGAbQn6xp9IHOC114Vti+hTuaxkMgAcMFJrhHc6PjXPAQe6AQBuWYAjtC0xtUEJajVSMUPx +5wMCYeej/25ylkxiBwBGUkgWofda2IKWaSdDyQBIkhKoGuQH79OK8eILvZbcxKtnOYpZroiXknaV +g7QSSKXGh8CwcMQjWQvKFQnIAfhVhINyGkByVHKdjz5vITYdUVlEu+KbKFaE8HtKFipigAdIyiQc +2QAASSNbALI1O4nq6UoHyxSkhOrFdyIAAxIwvphQJG9L+klfGNC8viQkBMkUyvI8MhUIAG0CviUK +rtoEgCEthIQ/SaNoQkaH7d7zbxAigHZb9LqFQAl6V3TA6wiQADAUOK6yOQ5bKCJa98TVBIA+cHtw +OYDX2mu33DEIFV4HaO1WRkID2QhlwiKAEMlG0IlpipQGjf+ehybvI4IF0BhScB4YiJm8OBMAgMoo +gDElwXj2ilWpAYC88RBhBbCGLdtgnYQxjcCZgx6BfMpSKQa47QZEEc1XCICaaPjNXsszQCYrILUx +VKpFDZEAe2UzgCyGwDDGridw7DIIgzwCABc4DqAqIGlAg7vUsK0Mb8bgwY3ihFYAYAFHzJLBbv1k +XfYSKa8cUpayyAQiHfxfGChCZ6K1CTsqFgtIarC+AMQghKR5XwqTpdK6SDDI9craQggKFpl2aoRZ +KQpXKEDQhoyFgCM6gHxCAJVJSeUCFSDA8hai5IFMtM6p/siPsMKAgjAgUzVpCmOXhPVstRgly0tA +4rjiVvL/xTxbS8IIUbASADR3S8sRwfEAhAC0HACKKEF9GAokwAAGCOEmJMhkYiIBgO2A1iNjasF5 +VPCBysPgAzCgEGhVWKlkJaCZQfyAC4hznhEAmcMGIYGRqLNqkVKICFwrgAtOKrQHHIDgjDvOCDBv +eQ84SSQV6ZpFUIPK88weAGGomGgsP4LLe0AIyTrA8ixQgQG/9gLLg/dEBfD6AQiWIlkiH/CVnOlX +UYgEAmAQhEZfgJBNgAOUkRoqRQOD5td/BCUoSqBMCm8IdIygFSNQf+EQ1pcYg9EichIAzkYXfBUU +LfMgxDMVDxMcFwBW/QdrH5B96KERy4d5I9B8JWAQiBED/3jBUC/GUEFWdBCBAQLwACyoEPVSAYUy +GyChUh63PD6BADXSJykxcR4xPn7DYmJhLxdEAKvCEAwREyq1UnKiJ0sCF3JCZUQzLO6jFQ/VEH8y +FDdxEivFhQZgATLGFIbhcfYkK24VALfxhX7TZBDAawFgBATUEHgHAEFoGLsCAHB4dV42VpzSPDho +QwdAA3TRJw/RYETBZnYxEFF4TxmQCztQQ81CBKszNE3DaAooRKW3Y8kDb0FhAkVQEX0WJgLAfh5g +Epl0AUHSXkQGYnSIEh7wWh8Aa360JFk0OKF4YJEXFK+wHpkWHBOBARvwKh2kahuYalmEBQSQigfW +AVmEB/+XUxYcIFB26BEYwDLgsR5L0XrLU4vYdnwAlhiodBYAIB+hmAQbkQB5BADsdyVKlBhXoGAH +8gHfdkXCRxE4eHWKAgDOWADsEYowgFFZdE7jshEDoCGYERzYdmAQcYwLYUkuMHZG4gESEIpDI1IE +EFYSwAK7yI9BoTaJMADE5V5VE4tU9mIHolilsnHFMifVwhBEkjcAUE8AIANCQVtOJRhkqC0lmYR+ +k0wMYYc6mUB3si4skBEZ4QDIIlJ50Sc3wScKsW0CcDV8shIniHR1wRNLchJUoRGR8jjiJ45/xF+t +NAAVMH0q9WIdNFEB8AArIQA78BMYcEUSYB4CkAPXsRb/HEF2BHQScgIBDoBCDOAAqIIrWkEVL7QR +GRFDX5UtybFgfjMYSNYQRhAUVyBaT3AC8NEX9QEhteMCsXIAdgRqKkAtRHACg3OBo3cDdEAAauMB +Fih7V0QDrwMBcMSHYvEEHiB5BgFXUIRtBQAVSiAaiTMmSENZALAZayMAbnNbQjAhEQMXJ5EQr9UQ +BPObAPBEkTAxISBYy7kpJVACbiBlFBB1E+AAUtMjRSAAfQEcb7Vv8AYAMSAaJAACdKFkPEGcHJdY +B9Ax47ifiTF1BJBFOAJqN9A8HhAJgjQAFfg+tVmbCAABRmIAR/EQDjEeUkQCE4UAz7Sb7JmQBOGf +tiMI/4Q0WAZgXAcgCAfQmg6xHSdgAXBEEJZ0A6jWAuAJoAqEAYzQcSO0PduzlnbBCQNhAUHBCRMQ +HFNXEgohUB43LbTiVkUmKWABcH+kFcmBAfckEFE6KojpFy8DEc1zE0pHEWuHHV/RcVFIaWaRcSlE +K4zWFArBhViIFPMTc+HyEWAoEAmAAYliPWbYF8glEm62E1bRRURoFSU0KFIHEUfqVDgwAeMzUeSH +PFp1j1KxdgEgiN0yJ2xGW9UIARhQlDLGFVjxSgGgBKHSCa8lIAIgm1DkfaIRAwHAmwUwEUbCdNEW +Auy3LvxRAFcUGwjweRCyEjfjNOOBSh/FgeDBoe0VAP/HqBDjMQJ/GX6XmBp+E104w6yJEQKxIhpl +NBtZ0Y4BQhHDKh5gkxSFlkVPECivxXQTUI1BIQjW+BiXhAEgIV6486wPcmBSo0UskRLxikoDYAAC +NwCUcUXuQTxQsa+KERxZFAMf8aokRCsUQCFFcABSQj478DpCwILNQhbLkRg8ZSTS1DQGIbDoYRD7 +ukXjEYJ/QQCTGQBqgGCpYS+fFK9EIBJZBAYPmxgxQAAkUAIe8ASjBZTWQ0AuRStTcZGFVxUdVhcG +oaRNRxE32RBGRoVx6HFdBACPOBsc8AAO0DdX4UFbwRIhZHQQxyx01yQ4tlKfhhIbgQC4UkoKoS4i +MbX/S5GTUjpWyCUVNvVfYvimVHIvd+FbDOBbgCKTMnm3agEShoF3aQU92RMS6dY8gDoVRqYQGPEw +gkhKyWNCC6YnDjUBhWdDFwEASsEAUuMCRVAE6wgAAuoCWMB+LdBiFOICJDBLACA1STAGshsUqEEC +MiYaHpBGI8ABFbMUsjIAAKK6vHs6jdExY2AyRGAYvxsR44F+tRMe42G7WVQZxmIVRVG7Y8AgDFc7 +xjoBq7a9JJBFQ0MAaTFYY2IfaoEaqmsyACsaRRBEeXcfA5ED51dnBHuy53Eyryg0JSIatwUR22sC +UhQhZCdC4zE4xPcyLeJUQPZE1AFy9EsCJsNwoZQY/2NAIbEmBMdLdjVwJwXxvzJ7TtdLPurbIyPg +ERHsF2eql05xdk9RFmeqFSXbYxMnFg1hHvwrEys2ETExcjEpVTVEQAzRQS92RT5hLINlU63IlBYM +UgB0JlDBwyuZqfuLhBQFfKI1AEbwE8aChooIKyl1EsiioAYBpONoEEY2WtpyT18qKVOHgyuQZH/K +hYRHKX+XK1Y3EBTgJZk6PWsCVBiRQwnwFSiRAx7BExMwdZamV8VBa08ApE/waMnqCtp1Wd84Th8h +oJBWAUais8lSxxisV3igj9r1AWPYjANhWRxhWYaiXSTwKmMaAPuoV8cXAOw3CWJiHxPAyQv7eykQ +FP/JvMoMBzSUpF0Iy0zapV4JOCjgem/XiY2hrFceYC8rYTIFYhBX4Fm2o08eRwC2HE0U8URJAFb2 +0kEHsMpF0GIIsAGh6Mtui3DcIWnElBjIuAM0wQBjEQP93CDJlEmiayRKgBIhYMwmcEVZVAMVsYRO +dUWNmwVBCCcGYSoW0CwSUhYOkBxn8lHjklUBwAIFZWIvZkJHgXFr0iQxEXUW8RNF8TCMQi86ugHy +oaAiUbX6VGVFlxI2QYV9MQEKUWbJCxL0wYdBvBEWwBMdcE+uNDCJ+HcklnUlpScSgINCKgATpdRM +WQEksQFgNQAOIAFCcBsTAJVVVREnIWZzSz4v8zL/g4iI3fIjQgpwfHsRgOJkZK1gABJXuLA5uxdX +LWAACQBUQdSbH6F4Y5M9/mVPeiZFSRBeicETeYE7kmJYosF4QaFniVEJJZhYI/R9ALBuBmGtolGR +eZHKGyHCxxEyC2EkDlsBhAQ0sA1FBDQBpFrIw4DALHcA9eRJenUDr1As9RZXIVIZDqMWOCVYAuCi +uJQBk80ZBEASxSYaeJA4cKt+BZAID5AQErEmBpBZA8B+RUoATxSCKKAQfFIBsnoDyVEv1qRXKqAx +akLKjoQSAWYAcBgAUKAQKyAZscYkgoUAmUQRJaNXR2Adp50YTSIhR+pBEIFRxtMS5mFRqVYbAnAb +/3fZ2qm8PTKWZgig1h5RAUY1LBohAEYAFqOSEmDxPJkCPX2BOzqMOVs4Eh4BVAqxEiSVan4VUmOR +k89jGLPFEH66xXC6FDLgET+AYicOJf7BEWMmg9exJGCLag/zNBEhFVKxFCFEE2B13VomA22xAR2x +g0UxADgQFFpagZibOBHhE3ORqRXQQUFBk7hjpYkmFXl9dUdRT/uqAicABiDwRB+Aq4mRCNKi4zLL +jxAGPegsGicQURoqe0KFTpyhBkKTAR1jnwGL5QEgAQrre1/FICogSDUhacQ4e7cse4zgEf4rGi3Q +EcUyMerSZiJ8A8jYFMchCB8BJmNAALUhwp2B2f+imzokEsD86CUDkAMXWZCicQNukNcQ8AqvRQTG +9kcd0WKLdi/jMQYLFgAAUgIEAwMxwGbxyR2xMjFTwSBJEBxj2HHGFxGkZhng6GYfnUzBi40O0GHJ +JMIqMDhaiQWWpAIewM4AsAKkRgCoAgBZMD5n3TEC1TFg2DHcLR8inAQxMIb8aRdLfhaztRWf5hbI +tRBXFHJ4oWwJpJcNgSqfxgAwaYc4ABFwWD8ZFz/2Qt8U0chO8rWzwRBVy0AmgXpEs3EKZhdnYZRI +S5BnYlORudTyYzxAYBBVrz3ZQkMy1ixvSocS4hEIUFWEJx8M8CIEUPX3RJZlYQUbwQAs8BMh0BX/ +ClEDOEgrd01mklIByatAAxECNlEUVVcRjTsV1Xg1QQHQASAQ9jIrAzABvlH1AwAC2+GaD2AIw3Qn +XkURMWACT+CVc04HJFBGCYAVD9DoBrBfDGACYECWg5UpHbHjS0IbCSUpjYTZY6velfAqEvoRHVSC +GbWYHUF+NPEKboAsdwJY0UkfB4AFt5MuhmIsMAk+QXYAqgDKRaEm7DMQYCAauCABEpAFJyZbB1AE +buDuRsmaV8f4SJgSiHlPPKE9jEYAbhACV2cWje6p8wMXLPEEWFBGTgEQBAgAIAhgAIEBEgAwACAQ +AoEAAgAIiPiAQQAHASRAkFDAYxEBAy4srNCQ/4IJNwYYNgQQIEAIEgcCFETQMsEBggIeHiBAwWUF +CQF+EHwwYECIARZaTjAw4AHEhiQ61SBooCBFllQLAshCMMPAggIFdJhpZaBTAgdouDQQwOoACAbA +TmS5FUIFAgKUYgRgQaIADlsJIoDoAMADghVcIkDgcoAAiAl+DijoeOZlBCFbUm7JwmUABAZq0p0J +YKRBAG0FUESQQGJmlw4oW21ZejBBuAYhX2YAwSUEBlatHhjwOWQACKsFIDkIJIDRohIByM6r0AJl +iwKIIyaYYEcACpQjPpf4mKBPhSF4tmRw4XlOgwMmYMB52O2Emb4nzpQ+0ycA/E7wqISQJkBtAP8G +8NssKAD0k4uiAWQCb6YJxCsOAASKM4CDvAAI7Lm2XIpvoAA2mAgDgmyjAL4V0xKxrRQpCgCsg+ZK +YSLNUAtJsvHOOkgzhXB6QKIcADiAERwFGM2AHCgzUD7CKgQgAQA88KgAKcFIIIEHMJDgAIYCSLAl +/SDIDcCGzEzRwAAMJPEyGSHIKaGCfGNKvuIgAzDCFXFqs7gJ5mopr+dkku6qnwCQILqWrPSIvwgz +4o4jBlacUTfzODOIgfYGSGCgDFqqYaYcAjjANyEoklJK/iwIQKmCBCmJANoookCgvgiCKlQArJhJ +00QDkGGpiaxara/nFFxxP4lsA65BWrcaYNn/JvdL7bCtXoO1JOQiIg4rOQ9LqKj9LmiqJLpSC86A +AyDMiYWqUoRIIYmGNEC60QK71qWblFztgMwGQOA/yARoCmCRDJLpLdwGqum5gQhorKEaPyPRioZM +JGADQDcg4EYMCbrRPQYqYEChC21Tz08ZirsALAT8cs3TA0SrIAEKJJKzw7pKqi+BEjwyAcBEy6vP +QNyk81NBcn3LyLWGYO0vVyMJMnM18ODDNqyWyqutIQYg0k+m6VJM1zACqIyoa4QEarG+hkoLt7YM +qAzzoIhylKC45xpD8D0CTCjiBo+SGKADkRHAIIELdeWMMoRcnba0iNqSUjerHz8LNxi/pkyA/wQY +NgiqrRho9zEBFMo8Isqsw5CpFFeUDwASxlCh8BPLU8zIlAuiICgRJcLVYAwEuIiAHVZjAAXj8Wt9 +JgwoY8BgAFbsbSWwBSOqtJpUB/7Hhp6qemKyMbX2OJ9kvCrepGfU87KFfpUowRld3Y87rMQsz7BX +KSztwgiR6UcX+VpVJHMR6VDJKgiQU622Zy3f4KQpLBkIViiinMsURyGXGcl4TMW/CDGmXQTByVgk +soIDCMlIOLGAgSpQkgkE6mZ+Alh3cDKazITEbzJBQPnU4zAq0eVeqRENB2LQkgxxoIeg24BbDFOZ +ASiGAL4ZgUeUEB506Yo2V5vTZihWnmZVaP+K01qIUiSgFJyYhzRumlpd3BgSsNhmJm2JWEjISKJ0 +aY8o8KGNbXCVk94AjiwAQEJObAMAKswIBATJxQjT8oErFWAMHViRBeSCkde48TA5u5dqfJO2z1Bp +IIwzlb+K8y1EzSWBLTEbAFAEH9fwh2cVPNYD/hcUBjgAIl2aiIkgeaUxiOhSnJnJXKwSNom0azRn +adNCiFKTGkyvAhy4QAN1tDnUTElaOZIjdw4AKxLyqo8GCswDQiWAUEFkNKUJk3AEo5C5jOdaLJFO +Rs5nHgTYkiERkkAQK9O1bGqKlQN1Cohs0hKrlAYrKXrPQieCq8+sLV0O1R6cSCQBPKLGJe7/mQhD +7Kg+h7kFcQFAwmfwl82VNC6lCKIMAkyXodTIxgCIEUATdeOSEKSlQUkK1178Q6UEZOg9n6kNf55j +P8XAwCNbmgjctMnKS4Utm/CsTEiOc5XiMC5k9kRIavL0P7P9UVDiyaiITFOVQ7YEVuH6i0ua1UeW +mHV9vyIkZYo00II4J4p440CeAHA7j9xAKK/cAa0ipBnQSMeWh3lYwsxGHoLo8lpYmWBNEtpKshmH +I4eB2toeI5yZ+FNGnsoWUQYig31SiXAeUUFEZSSZAzhAeMrZzxwNINur/GuIAgkAukwU1CkZgEdu +XQxDtxcAXvFKa70STBCdCoDkdketIZpY/4gYYqycSEcny6XLabDWIDk9jK4FCcoFauInfhHkNBxV +jnb+QiXarmaIMpLQQkujuhT5iTuLpQhvmxWu0yBmhPWcCP7cei+5UiQoESMAYsQyo87paiAaSwFC +bDk7AoAAVA0ZSrPsqRjWERWn60HAD/z2nQzJoCbXucyrUDe7ALhnvBM7iEdcAJEMEKaYBsiAmDjg +AAkaJQAJcEBbavSYmZhLSQhQnXvOZCTt4mgiEGCyBemSKdlMialumQlMEdoSnKhyna3MI0Drszvd +REdMchqAAThGwrAUhzIXIsDiIHKASKrCK1+GC0MM9N3n+GavyHHZAPj3RLwiFsL8adDUZP8TEQR6 +q2ymKY6abOLWhlRAYJS91kUOYpBiWoAAkSwCZzrEAFiprYRtIYx2lMku9YqGMRvscoYaM9QhA3Bi +BSEbTuA2FxIJhErE8d1tEpOTWYEGN5KpjFbPI5NwORhGBFgJ5SzAkNDgxj2+BnNEHztUp3DNAQqh +0mJlI4EONCZEC1uMdtzaQ/bBCH73cjes92Ww0MbLLb+TgHYMYtngLCQ84DlvnlBnrdrwmCArAEsy +6TWTMIlpIuJpiAHIOQEZP8cxzdJTXX448csg5jHH2zSXTZWTOJZmWUhTigdKQIR7GZoi9hPCTK49 +V03jJqzYWltp7OlPgNKGNvy17BBPbtb/xcSxlQulTUEu2fF0UQ5Cx7FqTiQwU6hWb894BXYx4SOn +EsBgBCDJaJu75JMIIUR44SHIK80jUbAIaitpZSiJjNf2Cv0pAEVhV5uzCRFZCiYiuOqQRPtLnAB4 +4AMjIAGkuSYeeZqX4oIpXwF1JROypc7rmNN5+QIoz1BNAAp6fG5GCxKoidhPoglgSGaRbLZD+T3G +W1F640pTnwv6i6EWdAmbBs7KuSDZJSeb4Nzlitfa8pfRw1GTwf570NpAZDZBPf6h4hrW26Z+SKAT +yBTdAoSGIK6pGRIeRmaCSoka1/K6au+xSPNxRvP6YZVBiIvbkjyjwp4+C/HUtARmprT4/5xM0a4W +45YoM5IJUSNQ85B/gh+swgo/4T2EMzVDIaGB+I/5czq5Q7oUuSRbQo76CDf7OLmtAKfSSQ3Q+BVD +MwoA2ACP+rQQYQ3q+8AHaAvVoIidQZoLaojYi5HzOz/4kA6w8Ik/SSEMsJ68yzmJwC/4mCKxsQ38 +aKYYIQgFYSNGEzms+EBXEoCRsK+4OSQJSZENgg0ZO73HkY5l2TZXQ4BQeY+Kagiw2AiCMAKCMBEA +KAmpURFB8Y3gyZuBUBA16ZxLqRoE7EAMQYzeopA7ZLQJWR+zgZEd7JadGhRmURjKOTpM47mdUS8q +7MS+EA8JaBHjMT8yu68GrA8/CZlrMf+At+iyuasgl+CAT2mN1bAnCcABgiALAhi3gYAXwIOTf5qn +FPoZ/HKL6pmJjLivmlgN7kDBOUq980iTtiC2C+o9CiGmHnQl3FCoNmO74GOTBSy8MgEoYCMNioII +6yMz4YEiL0I59pCn/HsiqFASr9oKFNAjgxiuhwmMwiOMqmEBKjG0yEoynRuodtkNrBEAdEk/5/I2 +tmAWoaOAWGodDSlIYsI9BzQkAKCBunCJ4mkJJXyc9nFAzpiaxPoREpSoRLEWmRiSNhETNDKICiih +z8mMKdEIswkBgtBJRUmXk2ovgkCjJ3oORFSKMfK3zZCJDRIMYjo903JENDQq2YmTx8D/iZzJGvA4 +pYHArhApIHb5CzKBj5NDL3RUumTqmhkBDjDiPAnMH7obKBJclgMIiiCZia+4DOGSCwLgkIUgjjQS +AAqoCTcpiShqCcOwCmZDG43LxxlJAHIDvI8bgA3gCamDmNeTjAS4jt4Ios7Zn9nYDBTwlOOwgE+h +x+dAl7vjPJY7vz5LCts4napxE/Z7HDbDPQE8C6cqK+mQEgkRFKTRwf9pFixMiKobj1NRRF6TR/eT +CNniADlxAMSAAnLyCVixJyKkgOIJib8sjuuYuNfYn6IqCFErKjH5lVSUq2HzirZwgDDxDCWRs5rB +lrwYjcMCnaqpAGMJndsyFun5nyAq/ybS+sWQYUWKAC2EiynJIJEgagwOQAFiC50h647jY8GbDAAU +mYDWiyyx6Jp+IzZXwomP/A3JQCy+UZu0ogy1UZQus5BWkqcFbDPQIBiD+w+NAwxsopyQMZeJAK4Y +s5iIgI3PyaBZYaW9IUKokif+YtGZ2C+jAjyOs5rzOEOD0A9NazDK4LbvYjgAWIGFawg6dCZtBIAU +mAmMChvi6rnNikKragqlSSGDmIDGwBUW8D8A+IGGOoAKCA1lqwp5e8evuS2B4ZWIMS6+eTvSnJHA +OABmSwokU0CQLAgM6KH/kZOIMJGFGtSqkDGK4BGsoAAYGcBD8kKAIpoGgZRUpL+umf/TNwkALhXT +2yAA5zANHFWQ/LCNMKKXePJBGUlN7kkRcLINSIxGbGlGQ3oVBJAtm0yXZUnNxxGRZKy8FhGwvxiI +/Yoby5o9Q3PF+ZIIdnEnospH/Ww4CZ0pq9gL90hI40IBlwgzPeIMDpiJVi0NKiAIXJy4ghAfMlUr +rjkUQjGAcGErOGuWokqo0gAuMrosxunUrBJDx6QNBGgZutAT4UkO+DHGqmEXt8C3L5MXfYtQhZmS +FulO6qFEyFsSyIM4QbOgC4m4xxKNnDgaA6GAe5yAW6maAxAwyRLYLMsfGJU98iQhEuOApjOqmhAJ +bh0IdMEP6YC13VxSYuFCDOgxbEn/iqA0xgCiNMxxi9HIw9EoCH6cQoVKDMo4DeIosswMCftZkWaZ +GD0liA0SKI2yjX6KLAkFHQVzJVYj0CKjt6pBtNQYM4boKgyBFLoaCM/zqlxLERBaVw86QLeAqGAs +JouNGx8cDFLSNIg7um6rGtJhpaorSAI6I7BCqUHUiKtCq4iaPK4JT5yUllzagJqYnoWwiI5yI2+7 +jbXiwSCkqdIQXDThLXlLS7wpCOxhpSwzG9ljsqjr3bCtreHIWJj5GnSMP8xDOo3bm1KMqBabkr84 +lNc8pa960ulolwnq3Bbr06cKkaa4wUs7yImQLdA5OQw4i5KAAqXggCddCQZ4gJZU/x3GLQ12SaHV +yJld3Uk3bSkglJjvvZ8NuJcGHlfPXdSa2BKNq1gP/TTLi8AuqkBK1BUwJQ1p8VOJWo9eMxKoMNOs +K1bJJV5duUSCSCmz8iipGo/9zQ9KhACkWaIhEiU7NJEZWcyJyagwWcYL+M71/At0GYm86KNlyaba +kg4HOVCyIkIH2IAh0Sbze5VjsVWtYUWweKK32rs9kqjFekaeOY0kMT882sqcUA17uxQEK+JuibFC +FUK6HbJm2V57qg80BothmUT7olTPTT/ukhEwNq7cMxsAoxw5WRQ4E+NwkQGXINamUyv/cJ/KGJZE +lFX6OiT+EQyokw50Wbmw6C80vP9ARhPOUbXBTXUJ1TlAbrVYkhKZhiikCcAB8MDfKckMA2ABmcBP +IhINZpOACyivh8QoQoxMBmDRvxOY4RiYIEpRgkIO7apFI/HUg6SISJ1kgYHSSSwfaxNWN0IaOemv +uQoXBQkJQWMzRCxObxrdzQuL29vYh6hErNSug7C0MhNX3EC1IBUigGpE5BOR3sEr5Q0iuJUuEqKN ++qCcIJ22x00odTW0iyCb1lPIr5GjbAK6/+Q4FXRFe0Vkw9IVySFNtHLE4KUJ+AAYhZBUgVlRweAf +Z6uJtDBnyiVEhQ6i5SkIv4M83JojN9WiiRAvubiWm2jepd0K1YAtVnoMvGkit7D/in4C6SG7NYcV +iAsIHVWkaWNzumZpYrojwquSKDZJZ0K0AAYhUnkhACacCaAojw7ZDQOsnhy5F1q5mrZCkzu8WqXR +yHUNCZIRujAJAT25gCM0mHIuqYdJI8ZxzTYhoJPpXgOQIldpMIMRZoXMCAH4wAyQrRAjSpfYi3QO +nZqJsuJaDfupE0jZDMTw1wLL2Lfjw6vJRLKh1P6YnUbTPzCyuWYlrgFoEvkgjj+sOBYeayheCKpT +wEMSMdyzOtDYNNTZvEqeO7hsMVmGnwhJQZkgnYsgyrZY1iUpRc4I3k+1yIo9ae/VuAyBXVZEIrQy +jw2SDk+7tTyx6uNb3QJKwYbA/zzueBkJnacIy5+elF2N7ki4rIwzRWt6uawOZMSEgq//Jqb7Lg6d +QrhX4SHJONZ85Nd5witiRVfwQOUXLiZmQ2PCNYB+E9YLqkA03SMjSXEkXWLbAIp0IZtpbItrgwuU +fL5mypqINWD6vQhywU6mEo9dLVR53l4A0rYpzQ96CQ33qpyguhc9vUcEdGvV8Kbs6g7JQZR2CcNl +/QsbJI42sydexhACTA2BNSSsieqHeSJP3XL7PIy/CJXQaIrxYokDWDn34U8Cxp+GxkcxbpBT6hY8 +ITTkqAyTmcIRtBRma+NTVAIo21+dMQgZGIjr2GzDmzt0MVyryZtuWQkCOA39wP+PxULEFbksMBmS +XNqy2wOTjGi4LpOMCqAIYP6WC1CjCadcVck/chmoM2II7ti1UmUdnGiP6d2acCGb4VbqThJICUjG +4gvdUY4Ik7GUZvFvmbCUZRkkSa6eGQYKoYiIhBWy0u3CyphbDzaSZGTbEMlYLC5Nq20Xcif3qVNz +G/SsqDayz3CPGlwgRCc2gDGYGo4x01HU1YiitiAXxGuK1pYRtjuAGPC3BBCE3dZxOImgjWoJMLAQ +g/8vo5oejeMMDNhejfi0X7HurVAddAn0ZYubdwVWhsLRgBpxnLQNHJIuxepIf0kdQjXGEtlGxOXY +17oM6itIO+QMm4wtg2F4iov/MOOoQNmdqCvlG1F/Kjsm3M09VQNYEQogjigMFPj5FsjiGXAuyFYq +KDouM4WCCDTLv/AJS7gAvEJMyniuDMOuiY8kI3GpGkKuZ8WCH/parkMqx8mBC+Qk9hRJ2hTedLM5 +T7qDPHzLuxLyRICtGj2pD/E5qYLAi72jeTXqa5agDSU+1TCzPp2CDJ5BG6UZe0VBwy4qLrPKpK3w +LrOxJ/5ZcxEpbdwr7WNBsLwkiIn/YrEUAPpoqQwpiZi7d965WkR7kGaZooaIQjYdVTT2yaXY+PFY +R+5Cmp5kFQBlCUScFA9GzabmH1ixfcx3oz++gN6oO8/ljIBT9rkIl3anLdp4/6LFgpUS+pUMBAgA +BwIAQAAAgIABBAccZMiAIEEAEQNQYCjAwMGDAQRoBIDRo8SDBnYAGDAAxQAECAYYIHgBQAKJCwki +iJix4YGCB3OKbNgx5E6GMCkcnCCRI0ODARQCYPDzpgAGFQI4zUjgYc0AEjxuFDogp4GaHzVyhFi1 +p0QCQAU4OMjRZ0iMAWqWlBng7scKMYHeDHtQ7U2ITwUQiEhAwN2lHLdGZLn0AAEDCQhORkgwoUQE +b//WrQv44AMAnwMD/eqWIIW7HCEcZA2gws6MAdTa7NjYqkTWGy9DHIB5dUIKEghUoO2xosyBByUQ +fNiZYYCcdx9opqBZYAgBOf8RWGgtEWMChpMDcKCawaBAm3ctRxcdOsBUxQQNyCUagDVi37IX2oav ++mZGRlmmVmT/IXSUbPkhxoADQk20WWIMhDaAa7ABkNpGAiGmkQMZ3ubZgAkdkNCGCRmH4AAPMBQa +TIXdZeFe35EGGE9yteRRBghZMBBHh2mWgAAC7EUAej229FEAH8m1UQYuopcYR06lBFFZYB2W5IUc +oQcdfzeht1eSGLk4FkxpecRRkDcdMBAFMQmglGjMlUkAB5md2VmYPbn21o0S3EifaBEZcNGBBCQg +V5khAcaQAW0lCqRbB2okmES+lbXheqJJdIB+MQUQU4wNJcmQcp4KVFhG76X/JtBeAlzQUokQSZCm +VbWdJmpBZd0Y0lZ/sfgAQcBuBBh8B8G2G1I3jYamBIwFMAFql0nKp0AvrfnsXRBcxgB9A1SkX20x +EAaAAxygcIBKS3Wg0JsHhAdkAhYkJKBGfg46QFsEdEiuW+Oa+VZZATjAwHhIlVWSb3JpZhNtl+6n +4oHScSZbQ9oZoOKoGOnHwAQr8gZXcwF0hxBLRRk724YAPvCQBeu1B0AOoJ1JZEnJEgQBqfpxRXF6 +NomJkQQV+NZhS70yJ7BETd606qYHFSwRbC0xlQBs4hnACQsYScbQyB8hdlEALxkQ2XKuaYsQYM59 +mrSgQRq0JmIjzuopkkcJ//lATg5MkCa6F0C6wYItdQWAn3OpxdEDh08npl1LisSUTY5yyhqiFojn +m3ISeYpepIVyRhCnbykkGLAGhB7d2TwR2aF/MAE5V7K5uWVQye6y3upmG46NUI8hCZnfAVtxmqF2 +kgoL0gGAQqrebQSkZBLeaRKQE2IuU49YW/dtuhGnAmktQHwyfY3qd5cx1OtBIaxZkgzs3nXBRohB ++6xHMmzU4EcPtFS15TmlSGiSHIARCylkAAk4oNP2Nb2DGMRQPfnTbFIFqLVp5DBiqwmneAI/yYhl +MhyRTsAIBxevfMQBHcrJZLyCM1xtYETnM4DlKGIAbwllhAu51IpSMi/nNf+IQi4bVOcOki+AcSsh +FsqcWyQQkwJlRADDSRwAIMCAKA1qIQOYwAaehQCqbWACGEkIAsJgEgvQpYYOCwCwAMMioSGEAUwk +SMv0xQAJ9FAtOeIXubb4LgYoZXQEYU6QdpUksFzAgDMUAkGmMiIM+K9StslIdwS2lElialLAEshO +IsIAnIlMPylaynvmBzBbXckA+EGhRBwlrA965z53qQEeC4OvsS0lKxtqHwAs0KuPHGCDx3qVdnyj +GIFITDUHcJRHpIORA0wFAH771EDUMpnJKGcgg2rWbtAYJLZIJGu8OxJd/EeDF1FkKSXhjlNYYJEB +vKScYfOgRXZzobvQ4Iv/CQCWhEB5GfXlpJBvaSe0XmOShMwFAdDy1kTulR8BwY+dhSFRVHrkKAsQ +yJkHIUpIuvSkjMrGUU6MSH5iMkUExUVauXRahkAiExkVjjl7mYxkMnAoT22gQYdj2xaFkgC1gCV2 +tSHAlXBlEucZ6orsSgBkDPUpiHgKmkCZzU5LopaqEISnYQONTYIUQQ+xxjTwQQANBIABCCjRAckD +6g0DgAGykOk7A9ENYtRSMktmxCmKwYAks8qzwZlomfuxn6YwqpGKbGQDB8GAghjizzcdyAHE8ol6 +cNMQAqAPk5Wy2YVYAitNZas1BAKqmSjlILmSLzaWsdlGNPO1/6DRN85b/ymASqMgk6ZsZwFLKEGy +N0OIpNEky1ETrzD6mwwhoK0WWkmmPsUAlsREIWMTUgK4lVJzVtEjsPpKkj5ImJTl9i5PQ4j6tjIA +of0viiUzFUZT4Jvw3BBFa5jCGt4L3ynQdwqYYtRIGQAEPZgiAhGIgg4gRzGIrKcy++pdhgg0K015 +kkwTUQ5mQFvViUg1hpiJQwTm4Dw9REAPLyHZnqiH1a5UVS7ZmxjDSGZiyVjOKUCCFWVEmFGMXEdf +7d2NpxxIloyMjncp/c0DGAsAL8qgJhDQTvQGML0LYGBkK7yAYa9CGALP+D0DCRNktOId87IlARTA +iKME1L2vScRyP1FNe//kGpE2bUB/BuhYOd1VHpgM7AJwGgtiADWpswamtgh5EgQM8ruSpMZVw3Ku +m4aUkQ7ASSOCg6LLeFw9iHWsnYTjXkO6dRECtAwALHJeCHriIRIpRDpVPRhdJBVQqrSEY4n8yikt +SrETNUU3ezJtRhMcF4QoaUTOXEmQJNCy6iYmky16jYaSvZcgI2wmEhhAdnqakENRpCaYWVPpstcW +qTVIMwMAgn/DLe4ITOEC1HEAYmiQgegEQQPjjkAPfsITkn7ONJDxtK3AxRoEIIcq1StLfKpH0kuO +xUGE6UEEiPGaNUSAFV7pmHinKhBhvuYwEHjBC7zwAqWJpgPGMIYXZiD/AmWpRQResMUfRveABPQh +5M6C4gNmMAM54MspeU7ADJowg/DIKSMicAIIRPBzECTgJQRYgdCTLgIQKDkAVFgKBETAjSaAwAgp +eKgIdNGEFZArBAFgdABWIIUXzOCOEwYBxpnxF8bMwBbGyLjOX9CFykDqgMx4gS1EYCg3tcXkfQCB +hCSQvIcYYAVeaMMQYvGLsOlVNDVBwaEMkIGwlOdTWywrlprYK+1ssSkYwpOoajOXShnAXq1il2YV +ggAHwHQzTrOAUwZiEOegCi+hlcs2/xzktgk+ATUxILUnzxdqAyAFlfKfcuiyq2nF1ibwGzK4Doqx +gKJJSdGZzSV5IuKb/3x4zOnRGLSdiRl9BskiI6UfASawUbWwiF6gIQCzba2WCkT7NXyMG6Fj48Ik +IUB/BlUIzpSfBQDDu4mbHvAOBuzNFQEAhhVgBOiAclxGTvwAwHAEEP0YAjlNQZjPUYBQ8oCNAVSe +E5GZSCiSo3jdiCSABExBwwEABvhXKEBRQpSepEyFKTkGYgVABjRAAyhAA4ycSDSBD/agF4BOSDDA +G/jgDIyNA8xAD/agD/gGIHUBDw7hCiDFA1BhDyqAAnRAppQEFw6hEl7SFvogF2ICQdxRBoAAF3Ch +CDSJBHDAEIRhA3gBwZiZEw5hFE7KHA4hJXhQ2IShGQ5hA3Ddgq3AGf+YYQN8wbABQAa0ARfy4Au4 +DB8loRgqgA+IQM+BRaXUgEk4AGIZAOA8G+uwEUdQgOuFxLyBC19Eh874znekSEv8CuigUQaVBItA +wGjM0MEkxofkUw0FAEkIgGEBQAccRBYcBNdlBBBJgD+Z02h0AE84iKjwxEOgCwOVCEcVxHh0o28h +wLoJQHkISU8QSvmsx4aghzpJCvmwkzn9B2L0UU4cgIq0SbFgS2bhhFqsCppwkkRMSMd4ms1VBbQF +T12wxGY4VGxUCADqm0RASxD4lx+UgQ5QpA2UQRncAQgQxCAgYwBcgbjFQRkEwRz4VxQASI/0zoFc +Fb9olZJZRddkV0r/jYdqXIQ2Mh9PvAV6GABKlOQqAMAo+NcV3NFMqdnqzZAALQXriAAP8uAv0MYA +DKICAOHHLAIP6h0A5OETKgAZuNQKNGUVngHKpMBW9iAXQAVT0iEXroCSsQEdVuEjaEuQEQAK+MAT +elqO+AAhciEasMQBzIBUKsAbHM4bVGEV+sBRiMAlvqUZRJHzmMEWNqUuTIBaUEJThqEITNkAQKJa ++qAZ7I5OLEZUDAQDKEFKBKRYEcVYmQQEFGOgcMXLCMiGVJStTMo2KoTzXFmHTFVXCADEFMV0qMmy +8MxNWMglKYHJDNld8AhTpMg/WoSEVZWm5MSsUBlQjIZN2NrjREkO/5ifQDIHQ5BPVY3IetxIabVV +U7HGdhwaJiWPp6SgAbDAXpiGpIQFC2SUMKVUr1BP/KzUYfDTazgWAMxZ7GhKnbxJWBnAVMBfSnBK +AkSBf8UBGv3mBQgAKhJGhxAFhEZAKjwEQZRBuAHIbGAkEBwGwFzFax7EWeTHQejAKCzXJXUGA1zk +FbiGptzoFdiAI5DMaQGADoSCDvhXEIykf+mA2Y1MSWzNRTjHTfRBJCrADGTEC0RiD3IAUZjEUkQl +F5rEDnJhExTDEHLLABSmAgCCE/ZgIEjEF/TgF1ChD3bBhAFmA5zBENQpGQiA5bxADy5CG1SBD1RB +Ag5od3BDFXIBBf9wgASgQSSOgzT44J22CWTWIWByIUKkQBiG3BCKwAzpaQMMAcZ5gRc0qhsqhJ76 +oByQ6WcKwKQ2QBc0QQ9aQnRcQCyYIRkA3ReEITeAVkOVhATgzAFYABRcRAstl3ohhGGtnOdEVsUA +SI2o1GDNB6NQnLZsREzsEgJMBTvVFa+IxtnElmjkBGC8BEFuBQakBAawgFh1FYm4hUX4HoB0B7F0 +D4DIZoIEEejojHpK0b1R5n2ohS5GkWXIxl7MW73eBDIhyvWVRACgwIUAxescQL9VVarBCXlKiqlc +xuqBxF2cTwKEVU70T5ko5V0YhW8OTIegGx6hm0IcEBwUKUxwgI3/HmqQ1YkjOkK4hYJsGEBJRkAZ +ZIQEcFi4rcEdZJQf+FcP3AUBbGgQgGSGxQEi+Bcc0IABFcUBFG24EYMNaEkq+JcjAG0ExMF4qQZD +OGC4UYMQQYGFXMR4KcSx+AsgYCIXvsBfQKZeKsAZjFJhdIBZCgkgsCli+IAZVAEbuGAYNogQNoDc +ckAYtowt+OALqA5nzoAJTYYSMQBnjlwxboCSpUAASIEitgGiJoBdsioCMMAi+CACyMCaKsApaMcQ +BO5GCqECfMGbuGoDoIHvya7cEgD8BMCtIm6DJGEDLKEFmOGhtEEPigDrcUEPRgenKoAUGKjsNsDU +tMebyEtMhUdS/0peRIRHBXCAzvgIuxAOfQCNp7wF6xUP1ACMKf0ORwzboZRMwqxbonjaxaBsklCY +Eo1FMt5E/94RFRBFHhyEFRzED2jObOyGsygT/Xqa+soaTGjJKM1HhrQTdXhEczZIR4yfg1jaUTiI +12yKRViGUMBfUySHwt6QTqIfi2DGOuqEcjhF74oIYvTuMwnLAVSFAdDAvbljABTZayCXQahEhwwA +7PnG1GZrJ4Vbr/SvphDCcpnTALAC1JZnR97BTx4IArTsuM2BGvQIC0aADWQFMfiXDQRpBDytuE0B +iwDABnCxuCECDqhIuMGxf4VAwujHzjqgDpCv/cwEQdWMdx2EXv/2oRdwRBd4KRe+QabslhxwIRkw +QJc2wEZCmFY4gBy8wBegUan2QS5JwQx8gURMqQK8AAwdxBCuG2W+ZiS2xQSEBgHkCBlVIRfqwlRg +wBP+AAR0wBDwIBsorhvqhOYexAwMwSJ0QXFNKeLeRxX0oBM4kgGQ8gu0jCX0IBskRCsLQA82Zkxc +rgGcbikzkFKBcxeIxhLVDAYI0ADA0trCBwdIR8uss2igSU4cGbI50xcxCoEFcmzQzrgI3BTFo4AV +moG4Bry+BW8Uxhc1rFpozVFExOqZ094MGbq9zEcxY0ahh6NsNK8BClPsjAP5DFJpDpqsxI1ObW02 +31a4ycK8okv/zE4TPVZoQAANzg4SPwVuyNUG9m53CMWsjBQ17tP6tMxCIcYft+0AHI2EjcZB2Kx/ +zdctwNctrAIFIBaJEMSGsgJgGBRkgEGkhHEE+AFJSmRGhGhZ+xcAIJx/pUIP3EK4UQFDsABY60Ed +qLEfHEAoiFsUULHLAkghBMHTwkEPROR/BUGU6eDzGcTr5IlkeAQXdkMPvgBHkIHjKmFnZEQeYgIA +JPKcYkIVfAEI9MWeDEAbNsA1M8CVXUQiKgDTzYZi+uCsVgEIkA0IROIcDkFo3yhlN0AbQi/geK4C +VMEGYAAVNPMPegEPcsELDAEgiABNT08OSQTzNoAUEEYVDtFB/1zzzz8BJEH/TgDASA7H4BAShmA1QB +D/XyVK4AF5pBk8QVTctulDI1JhEAawQVu5IMReSxbdzLYWGhabWVtxKspPhihrijQG2wV/nOcslE +UOWLszqmZRHGWtUMgIzwvGGE/TQMZjSFwGmFvEKHZTXRjd6a6+EL4TjKbPiaaBzGSlK4n2CQTNio +VaTiwWxG4byYdsREY89JexIUupgORRCJ/vTEZwgAgPqwtvRqipg0p1TAoAhBJmnVW0BAAzqgDSw5 +AHi1RGwtz+akUEz4ADj1A1KEGoSbQtyBf5lCSKBxKgAA0M6BUzDAzgKDQXhCuOmAWpQ5WvN1BASB +QISxMDAsfP+A2QCwICtIRJHqIOGEB5wQhIDYR0NnQNw2s9wmABd+Qd82AC0Ul1u0RB8i8612pqaO +jqN4AXqTQQ2pRR/MYQMwsqY8Lx1mAGE0qmEqABfIekp4ARd2QaTqnREkcnCDowFgJpmCpQLIgYpS +JoVIwKoqRAcMYTyhwJr24ApASwJYpgL0cgO0gW+8dhWoaBWKwKSegnipKAI46TLTDFIYQDqzu+Ug +gK9CwFotRWQgMUty1lo9lhuP0PNlxEBIBydFxVbE3oLxR/UME4AsiU57qxf+hSfF6BRRhTEeBBC0 +EUhJcW1MOAmDnrREPIt3CVVlTsQj8X7+plCE/IDth0aQCo//2Wak2IR9FAR6LMyg83dJQEZ4Oths +KIWWuYmMfEYAqA9HXICj7IXpjAVBFGOdZJ7rMYBaOyANQMwBdCQB/EC4lRZ63BEA1AFZZwQX92wh ++NcaZIRaTwEAcHEdZARfBwFBWK0e9CcX2wBht/lBxP2HjG0E4KwN+FexFUaDMIYLNQQCABWwPAIP +gkAVKIBmozsH1G0D30RvM10zd6YCSNUMOWIVvoFMvdbXheEX7A5G9KEZ9OEiEoS2Z/sWngJNg0AP +AoIDmOG6QcBX+mAGHIAtPCEbTL5aNsBBPJ+2sEGkFgNCpGWnWsIQYHsPfntZlCoXxsInPbsPEgQp +T2Xis+o8//a+AJBylGIS3lzUiFQo3FAPCgz+ADyEiqitRPQK/2H/TrD4TrzFhZdjnomEwwxPrpAT +gS2FxrwFRdnE9QBEAAADBQgAICCEwU4QBBw4OGEgGIMHBAIYcLBggIoBEiAYaCBAQYcNCQDweHCg +wAMMDYYU+GAggAAwAUyoWFImTYMxeRLsCaCkwJ0AJACAQCCAAZkyBWwEQMHlAI0HBSKYKhPp0pQA +HMrUSEDpwZIPJDygSJEnwgNFHQAI2xQATAEWDBiwMODCgwQPDMI0IMCAwwFrIkQIAsyGjTI2dNgA +wMFP4cJzKkiuGLNkjoGDCxdSGYBwhFEAghTuEbN0hB4BJP872pk6yMDQhXiGtnHLdEXJAC4wvTiq +UOFVOupEmCOsTF2ZFwVK0Aih4sWlmBQoGFRFwRsCZxS0AdBAQQOtRZFWVzBAAHjwGUA0AC8CIoYJ +BGaYbyJ9gEM04BU0iTmAgBfIaCIAAqhT4IySdBkQvRfAO2MAB3xQYBEBRKjOhywIIOAA/tpoQr0G +MjCjOjNECMM9BUQYqCsDJlSAiwQGesE8/twDzwcEBEjBgS/MM0+Epg4gUYEh+khRgQy4a6Ctn6oA +b4bHkkIgAYEcSMCABDpKYIMK/urgIgiKgkBHg45C6YCmQtqAq5Mu4+kk3gQSSqMLDLrrIOmWGgC6 +ACq46oD/A07666qUipJOI40u8mgARhOQ6oEBGgUAAxQQZcCqLGVEaYAHBAIrzU2VwiksGQmo0qQq +DQIpgYJY3exPABKgyIALDiBgJwHiTMugoXzyqqFODUAvAAb6vHXOCzTqFQBjNaIgJga4iilRAnp7 +k6uunINIAgHQawqwAEJI0ySiCIDgIgvcEgBTApxlQAgGpN3hIAZaAgCRwhy56KILBmAAVz0ki2AN +DCTDQSqLAOjhlh5CkUkyBEqFozA1AIiisDgGkoDiCOJQI2KHAijOsIskY8ABgxjo2AbJyjAI5AgQ +WWpYkDoeeOAy1I1Q4TAxKAgDCAaCCTsFABhCgSqYCW+G/wsVIKOroQEQwb02IMDAPC+qbKK6Fy56 +AAMAMhjHPCmEGsCADDBJccWKcgUqPKMBAKEkIGRKMQEfFQABAFvCs4QiKhDYj7/wwGMg7hcE2MDv +BmZ41KAEkFbAxDnJqA7J6oZ4wQIJ0HMCwxRAKHEAdR3EHHUAMHdOzWK/Cw9MpOzlIIADMLDA2xyK +zWEHGiowwqDSvbXgJPQs2tSBAND2qnbltxJKWovCsinCZdF71KYNL4K2rpCW0qjFiugGIAtqNzSI +CqD4BiCPgVZg4M8AIFhhoCy8L8gokyyYSlpv35RKKhopykCyUqxheYWAcJHRARqlowM0SQZSuRJc +NjMUnP+cBC2XmRNVQiIVkCiFdlMBH7E88iwDSKAC1IKLQVCokbrABVq8kUlvJPAoBHhkJ48CybiU +YpCSAGhZDFhUntxyEYcUxU+X2Q0k0AOWqRBgDgMLAgpMURhSuA0AqSjMHQ5imTnR4GQA6JgOPBID +l8VBMkqRVBUjEAqQRIxQCJCMGQujIwDooDBTwMqyWIMznBVCRgmogI5s6IDkRahK1TsDeADwpCpg +pwEDoE4DXvAUogDAAgeYAXgsMYAcxG0FIdFF1yYggARABAAO0AV4TpFCo5TEAl4ADyBiIoDzESRF +UkHCrQZiAfN0ITyLsMULINkGbmRAAL0BRHjMwAX3+OD/AvzJAAIgIEsF9CEANgmA3hQQiCrhakIN +gE8CTlGdGaDrIBi4nAK6AJLJiUAgBuDaM3EUAPM0Dzq8oRp4BDAfWxrgTwiIIAIm8K0u3dAC0rJJ +TX42kAoQoHTLMkBJbgUBaKUAhgPRJrSyuZOZ1G4nBQ0ABfTUkgcEBi7KWkntZOJKThgkVlmJiRIm +KlJGXIQTCwUMI5SihE1NBQO1IxYBIJJEt0GLoxMYIE6kwsA0fUogzFlOAAfwqM08QIhQQQkB2gIY +oMikSQw8VUxERgCzcCQkDSHIsmSCwlaxtCnE2+AB/nJDFMwwMFgCyQHsRIAMOCQBEkgbCzwlgOQd +QFUO/6ABh5oFFKK+BG0pCMAF/PWDYYVheRcZFlxaFgE42LFAZgLKKJATijJcAQBTKIwePNqDwsAh +KJKxmFFW8VqgSAYnri0MAVITgbYE4AoRG4hk7jAnNHq2s6lAjWk6JRCGkKaKawhCavTQgyCwCSn4 +YV4ANyKB8FSBAEjjQnUIpDddDAQHGsnAAPymgCgxQD2JOpJ7C1QlRknBPUPgn1ecVgWZHEAEM9AF +UMPDhQGIABPFqAgHwMMFGhnuR+GRkaI2IIUEFI1A5gFABRxQH0oqiwL1YZoFOGDLFMSNKBwZb5Ja +kgAihU0AkBQBBUoCJhH8YAjgaUJ6wsO3GkTHEtXpBv8CUDYsC2wgAAjYQGAHkMIA3EUC/hLMWprM +k8Cw1SFWGMimhhIdAKTAg5LSyF1c8ik1dbnMSpkTTXTCgALhpytNkpGkIJoBi7BJUi3x12YAwAKg +CEUm6tqKkAYClZCUBFVrNUpclfcoXKEkf+TiykwGIrS4QPqrvjJJWDBdaAKiB6HFoom6WBqWJsGk +Kw/ACam08l+lCLrLAKJqBSSFJwaCBAAJuZdD1Bw8tGnEUjX0XioPwhIAHNcPe2VhVIVSEPz1Nggx +kEBv4xAU1apGIMEtTGwAsJsAACOKngUAMSTDbYxFIAoyEMi1YyMAHORLNbqNwlfPXQhOu2UgWuyB +BXD/ULGCMICj+zMKAw6wP111SiYJoFp2wls4vk2Ob1XgDkFyrIAOAIAK/BlIB57UABCwtwpcyEAN +gdmdA3jhSRwY1iTfMDT+hEXEliBAinCyyQZ8YXJxK1wDCJADEeiiCQ8UgnlAgAD+ICUD70wAAfbZ +n/8aZHQK8MFXDeCF8LxBWlqKG2D5IwIEgGAGTcAVB8xz8XV+4QEcQInVwQOCDSqMKTd0AAcelQKJ +XakiEkOAA8ICkr17LibOAUAMBMJRWUFaAK7EzJz4nqc5+fnPk60Sp1vS5DmNz87rgiUBfjCQGvjK +lSkzJQZYcHEAIMF7SVY9AujikLtmadQBqKHfcTit/6FsClHLYaBMpOVmq8rqkMmbVgcxPWxlDVAm +V+4JtjjoLapQMCiPGYjwBdB5OyJACZuRPZ8cwhCWuoRaizfAuIqyKrhvIDApQKZhEfBo/KmaK30p +jQb8WBhElCS7RBlWCODtxzV0ADoGoLYKww/qAN5MISYkIwoMUDJuQYwGpg7OLQJs4CII4LgiQA8Y +MAKUi2R6ACoI4Np0IGGmpc8KQwcwwA52i86kJQDCBu4uQ6cCQArMCQB8JL9Cgj8A0HAujhbAwwwc +ap3cjg00TABeZAYEgAIq7gh9wD3QICRigWkmjRLcI0gQgEikYADe6SCcSQFWwAtewAuawAu+4Ea8 +YP8cNkw9pontYmEAkpAKA8BpzIABioILY8F7MCBQwgE8yAAnJkAIpIkrNsAMwOPi5ABH/oQ/ZIRG +GsC/CGA/yItNEODBFOAF/iJ5qsLQyER+MCUANkBXdARAGsv5UuKHkLAiMAAmkEkCjCAEPM0qHmOh +UOkr4AIp0ALu/kNNeqJbRlAzACAHkEJZ+CxWTELVikIINIpdDgIBXAkics968CclHIA5hGalkDA/ +1AgA2MQi0IOu/qIl/oJQmuKE9CLh3AL8KgJLXIdFEktGEICjdi+VAiVQ/muGFMarMkIsvorYysUk +pMKqpLETM4JdOqhVLsJbvGTDFE0qEiJqBILUUqj/UZZMyd6sOSwiABzgZzyJ3Oovj9zMpJJCJi5w +YKYgBqQxlVam/tSghMJNAbdtACRjIyWjDgiu8G5GMhDBEQggNHQgybqtMN7OWgIgFAqjyUpjCn5m +7oLnKDaRKjajrLiGnQDgERUgHKYGPIbAzlaMC8hgECmxWQZgBhtgEYpBPc5rABaxAYqhaMwgAxjg +dBqgCZ4ERhwCVx6MkhYpaaTlLb2AEsLDByBKssDGaYaAAOgHANaJEpbJPTpgAxhgkrhgvhTACwxr +BnUuRfqAPnRsIDKgQMiQkixCCC6nAXxgvihJftbJB0DEPcaHAtoAc84gx1Jk6o7FufplB+ykxIql +/wIY4AoGKVcMAAE8ZSvIRyawaxDQK21AgjkI4Dj5rLFwoCZkoqDS6YRGioCGxiB/IpuCgqr8bNUm +rNkwDc8OgoGU5SRowFcmLHu8gtZwAgAMMwUGgnYKzXmAwtJ8RS/2biqsonaE5lzgIj8a63hk6iD2 +CiRBK2Uuo4fWRSBmhQBqCCgQQLAE4q4SkifshjgB4K4CAEO1zNnAAgGq6l7+At+SgiJMCT0dooS0 +gl8k5YacBzjDjwESyiL6r/7qgIBYClmAwgZYcg4UYYDuqlEYgGQK4xa4qCIcIdymQA3q7Q4kAwhw +Y9u2rJcOoLcIBgdKItxQawBiZg6wRSBKwxQ8B/9j9ECvTJJHPsI540k+K25FPIwL9IO80mQSzcMM +PCUBaCyczMMH2sdblgRzPA5ADMCZkMTj1PQBCrVGSkxXFiFu4sbOLIACdEUJFtELMuACJIDpdk4B +MGEeKeBFMIcSUElvCic8VsQ13QsoQsABCAC/YCQuDuxRnymqRsdGFEAOCsQi2KArb3UIpAo6BMPJ +CoqgQIoB+EI+pKN4fgIm3HPD6Ep+XgKyCu3iwEBdosZbWkJN9ozTAqgncOIq3G5ufgUrQCIrhsIB +PAICTkoA9MIBHKIGds8p6vM/eKICoMIBJtUAYqAh+MqHSLFXlKcZHYABAsNehsYFXRDSwqcn7Aj/ +hchVK7qiK+4FL1qq0viEq1AJlWrpkv5LeeInhQhgkKZvyziETvDNLeoiAULgQb/qlvLHVkJiLboi +hgrLIiCiBgZifVhAeVjKAVjALhwqJlJIAijgChJDWhwiAyByJ3agDMoA+bzCAK5gFfYFIk4CjyJg +CmziDoABOrOpUB50FUYB+aZigE72J2SiFkJhEAQgA9RAB9ATJKTRlIynW4plJ1zJIEikAQRCxF4A +CgLgDdzDC6AAotbmRoagbSKkqmKBP76AAzSDAWoABJDGPc5ABFLIIxwg57igA3IoZUCACasDEAKX +zDognG6ODQBkAjCgJDjgDUgpbO7C5hAkHNSK/wIwIOnM4xQ6IAXoCnVQRzy+AzwOwSAwQEYwYMW6 +YDNEoCsV4AusoqoAwBALjHn/jFI6wBJSRCzRwLHWVAA4AG1ULnyF6tYu4K+oRVAsqFkOIIYOD0sK +qlU25X13QCA4IIV2YCckIESpVFaAM2pmhfkeLSaOMQCEIEQdtH8tIiguIwcuogIwQDmzSaHQ4xJR +IlyiBgCuIIZad+AcAg+bJSOQ4k2cY8+8BVpExiCoybncDO60i2OBBT1AQtPS1jp5A4arR0MRxT0r +4mxLwiokYAMAKM/4YjgxrSiURfUYstWYAwOUxQG8hE8M0ngo7dKi84C3YkXVrdWa4yI4k/nUzv/x +CI0ncAIwYFgmdKsOpEOIUqIpCBgeeaI3rtMidkKDv+okbIlK8gM6gmcntOqARPh7CsRZxWYgBsEB +yi8mRAAE1G4nugqEQIAz6WwAXDAFaOERMiBLFqpZMkAKQCB4BiI4K0IEREAqWDAmDGAFRIAzsxEo +4jNdHwAjXxko4CcDHmFFRGBD5jA4ZUUErCBCkGmOoycFSoJEE5IDSgK7iEXN2oKrGHkUQcsCROBz +1fUjsiRLukAEhNR7RGYpqiQkWgUw/gSxBEVV6BPg8q4k4rOHIMrJfiBEac0tyqLS5LMkXLB/VOJ7 +7u0p9MRZh61ZFCWR/FNP6HEoSqrwNmKytAL/nD1F8LaqIiSLgtJHQwcieqyl0mQPXNYqUerigQwi +eVb4iCcCWuFipPZqVgTLUAqCP8Nlq/hKVwfIFu+FIOgqTdIECTMPCTYk84ilDUdIrbAxJcYlakbC +SjTCATJAS7TEIlDAIQ7AEy9AgkvoVlpaI0oIJiTAOaIG/vJRaGRE2piCKZyCRTZNBjyPz+oNCRwK +KgQDW/KplpaKY7vMyqZXgg2ioDyp8KSqKfgko1GC+TCUJ1BF8WLip/p66S7tAMIAKC7Olp4MPaDC +1KQGV5gqJmiMPNfFJ6RCAIpubmLogXcAdxxAM+biXAaoEypNZHmCInT33o5xjiGCqwbiAmRk/wJs +ewMEDl06aI4FDZXMuFyiL6E4AiiU4hVTArOVwibgR4hkQCIlhUsiJfzy4000lkVkViqUIJtGQoV6 +6SmShwL8RWjkBymSR6Xd+CdKIhevmG/0ZKI6jSYwCV49JSQQ4HMJIJOcxT1z5U36aSDGhbrbUJQL +T6zRRCNkAKL+JUYvADgduiJuZVPmeI7vhaVwBdDMkb8ttClYQFcmTLIGYgdg4qfet6yDGtEi9KH8 +BIIZnK/AKq2SIskQgCJWdi2+ZylI+CKvZ+8gKvWkQmhU7eIShWTxLQMgIgPGWwgATRuPeD6dzxYJ +uCqSDzQVJgA6Rhh6EYEnrElyJU7eBCd0gv/T3kJhssKFpQP3+CwptGoUDxagD02Ma+fRAAScYQUo +BqgCZe0YZ1QfjSB5NkD4tGes06K7nYdGmwUpnA+Iw8Yk27ITBUF7DECIOieoKAUBwkYjUKnzkPCr +3KyhXJi8vUe7AMRdEMgZvefRmmdDfGICHELQloLCgcUiDoBeKMUiikJexjwt1OxTVmCPRYZ6GILu +brZaIABgmqShClqm0BjfPCol7EijBqIX7+ciFqqDUMnJlRW/ByKCLHI4lbjXZIV2BCBs8omkKggA +7FcmxlvxpANcBdSFh9MgXTBAXeJuU+LeGEt9SbAhUHk5BoJNPuWIzTGA/IdWHELtWnA5hGT/TnT4 +rC8yOpj4t5biRJUnRPeu2aVjWIGCCpT50+7FCjaEfvzKOaEzJZ5IG6s4+j5ig84cLIaLKAXUHQVC +Wdyz8YzZJC6cO5tCWpBCgPFDALoFMFa4IPyMZ6/lUQBLW+sxyokTsUH6TEgeAy5C7XAFJECqOe4K +UxqithEgBBgcVyagh5oCnWh6UNxi1dwES4CgxkoiGGSifACgFrjCTibVzuL+AH634VnghvSegfQk +hTAKZfdMOgwTCBweI04WGucY32bFyfyH1maiAp8CKeLbLRgI7BPvICqAL1zFAFKG1yYiA+ynsWql +KRh8G7+sfkQZKEQhqrbMI04iPiVeVVBF/83i4kTTIin6RHkAiDNxrRNlIpmlVleT+aTeTKQ19ISC +InKExo6ynX2mz5Di6SS0EcyasvI5GlXSqikmNbRsCbBdqU94tiEWOlrBzyAgr9eMaBZpWmTsTFcp +Dao67wBylqSscU5KokINUwJaFfyc6r8AggCAAyEECBwAAEEAAgJlDAhwgQGBCQMSBGAAYCEAhAAw +ZgQAMgDIjQ8HOgAgoAZIEAAo/Bg50kInAQA6TdgoEiXNCTklwIQAsgPMjwDCrMwokuOACwIqjgwQ +wIDIqRwBPDgwsCMACTlBDhCIQKCBj01BjgWQICTSBAjLOghAoQIAoB/H0gwglwJdCwKBCv/0iGCk +AJYAQFSkMOBA4AAOFBIYIFUAhQACEJyliXKAgA40c4z0mfPCAwAVsL6EeFOCABQIDlRAAOHAgE4O +hEZ1wBaHg8ojMwCYsAGAgwMGHtAFejYh5QNQQWI2YBEqVrQGBFxI23QAxQQXAkTf6DXpAZpjvWcc +mwBBxQHqq2oWkGESTAevD1jYqXmCwk4VGPqecFICFBCV1VA5UebcRxx5dNABFKSVEQgESFDDYzwR +IAAEBBD2w01CgGQBSAkQ0BwCHQgklADkDVBSSVMFAAELE2AYgAXvMaCiARTQFEJWA7BAHEwC+DQW +AeWJxBRaIhGgkHoAPDaaAA901xRWO6L/hNVYUnkXFWYwDUjAaCQKl9GAAkgFwFktWhAAAkLIpiJE +TzKHF0dpHZCABYHRdRePBwh0EwQhgsQkcxQgsMFNBEBQHUhADRCbUwJ1NaBIrTyJgWfabeSlSAZg +gAFIoc4F0gMDSCAQVgFMp5ZVIyG0UAA/iDQrZg+IdCFdzgWgGUycgKQEBgKFyutQPn2lFVtPDjDa +byKxOZAEdE2HKwAYACXsVs4FNiYGCLm4EItIyZXRAEiAlAOvCcjFpgQO5UScdw9RcIFXIU13EEci +0STAAcKKGxxaDIjEwA9SXfBQvzu4hhJl6b1E2lADBAfrACcpFRKvOS1W71wPQdBrsSV9/9SxACLJ +MFQFlLHYZkYKCXCFAQYgoHJi7FXm00APJbCBQCDJsIGUAfCEAVSC/Hk0eABAoSEEvNI1KrIINSuV +VFXd1NKTpWakKAA2qoUgeB08ZABG4kK1KGUmO3BSQi0xcJYBhiboGmSjGkCAZ17nNCoGWLEnElbT +NVp1Uzk6IJVvq7b1okGMMfdWwzk1CxUCiG+kKrVv+Rya3IGZ/OefmYW77KoKoeWl0t4xYDlrld2p +KgI09IsTrwytjBIKcwUXwAaXl1WZiiuAlALxOJ30gMlhLDQ8AMUbqTVlxQOgO3h9LWTyUGQCkEFb +GadJokiTVafUt1hNytBXOaMFwBOqCP/kG/dBgWSICQBQgeDQRJxgAkIKQaUEEpDIZLACSQhIQAIA +bGAq+8PCQzBiAkMIJAtDAQIAQmCIP8GoV9TDgwlCIAEEWGCBZXmCCcDQE8rsCzJDqZpa4peUVWHg +VgEgBEpYcoBcIEACP8DABRAQqlqsxGK7qs4GPKc1kPyAJg7gHFGEEpLsNWVlquLJpryCFQSQx1EB +YMGdcvKSA1gBJWrZgdVMRpmBNQUB6rmAldgzHir8RT1vsRhGKGi7cjEHJCI4yJMwwhCQUBAAQglT +miYglZuoaAD3CRvCMlMuqCSFUCABzJOmhwKBnGQxYQrMdMY2GhxBhyfVWVWx7uccAYz/qitdacup +TEYTAuwRPAYYgFwM8JqxMMAjIDDNrohyEcxkDykBUM1WRpSmJx2omACQgU9QcCubdQQBvpHNQlRC +ACieS2NnYs5ZIPQSuK1HkjjhSgBm57PdCKBtIfJOBgQAoZlBgF97ckzACoDPfOrzBghTzb5oJyQE +MGIhnRDIMC+QT8ywalXag0q94POqu5wEQ+sTzCkzIJIM0GEE+WxBDAhQAUXRhAT4pANNDgCUEOCT +BvPEwGTGgE8saKlIA3EBPk2ghJNQAJ94oEgL9FmC6SSvJh/oKKewAgYY5DMSAOCAygJAh6LicwQ+ +ywgagckCg1R1IGPhSVY2ODQOwBMl/xxYCoteY0sB3CQA00BMFNs0xSWBhyJKI1UyB5QxOglzhWlM +zgH+CpIrDWgDjOAeXWa0KbiQUYtKOpN5NmiAxvxNACxoE7nMwpzTASAHWpwAz2iyAQqgYGggwZqX +drI175BInYFJEzxldpZ5npSMKAFpYDgS2Zz1BSUzyhAASqYirHUgeUoxWXrOhBIJpIUAnRhJAm6l +S6woASsesWuzBqJCk5FvkaThl29G+JtSCQ4kWZqkxrh2oALBZFFJDAlQ8gcjTuGEJuT6gc8M1xyo +VOAh5yJg1140JhoA9iLe0R15pNIB6MhgtQlY5FWbAwAs6HPCBfiAzFRo1a4cZAKC+P8WSP43gCLg +EwZyG2ZIqoqqJAZgenNBI2ZENhUlNdF5DLHCDSZMBAA0jwMAIEI+fQarEhSgBcjNiIjxKZAxjeQI +P2aZBwqQhI1EgsIjIJTcVDDhE5ypX1jW5wlGcwAw3FifH0AjyOACYa9METPBIUAGqsocsXRHI7Jy +qAEuMCAgEcdbeHWoF4ljEZgMoHjXJc+oaNs23hBHVXTpM0iMsJDW9kzHjxaJBB4yPRwkJVVYkYuU +djUeiDAnXgRgQFVcxpDhWEsiGGCBqb9VNAyMRRAk0ldXYHIZ8l6GXxpZDEJqzbuycg9WCTDnOwMj +7IDhjZjxe1nI7GKQSuZ3VLKE0HL/rUVerJSFOMhtbZLJG76NWHIAV6hkRgIGqxRgBAHdUUvw5Ds0 +jHjaxFlRpJVgEjBXOcAnXLkXBWrJApKwDFYM2O8BTHUXVqGzIxYYy6Da+RoVvQoC6rHADkizsKYQ +wMcUzmcJhI0AjAxsOg+F53281mcMPRnKBLwqnlvSqaxUR1U4cZt6o2iXm8QAJBwtAAyYXAAVYCUX +AgF6he0zkBDdmATiIsBP8fmBhqEJACfQJ3sDcGMTEOAJ+RxBEvLpBpL0HAZPL4BsJAD0Dzz9Bv5c +uQvKjoV+oamA2pIKzX8TIjB8iAJCqIh+Dxa4igzJASWBQB4Y8ojpyAYILcoJQ2iS/4GbtK1hFTBI +ONWcEb9kr5bkNMh4YNIsB4To8+cr7WhUhpLbtikBM4PhaBlgkRDySo4HgBhGilVLkLBhMpLHigNi +c4A8gEQlM6PTAwhQITcn8SE54cjpKqoRWK2qXhS4il5cZZm0UaciCoHOSCIXIgIgASNlC98p0wsA +4a82Iynems2VMhkWMGlVeIMKC2uAlRwIpDRuFsig8Aoh9AIVD2IWB3ErEmAqmUETWnQReHUSkyUQ +iAEjLzEBKLM1hMEXTPFiHvFXyWMBB4ACqkQBEsAAECABCJgwACBg/qcTU4dGUzFRTiJolFEdBCBk +Q1YEJoAFqmACJKAKTyAYapEzMf/WOwiRAGaTZCZEAmDQKiMRKqfTFWhUNAhBJ8mUTFsFPYJgMoIQ +ACQVdIHxdQUgQABAAmOGT0cAKloBUyqQJl3YZfiUBAiSM5WgTzAgHAEAUzfwJFVXYSDxdB4gEF6o +h2iHT0wniIIAAD1HAjKTT3hAAGHoAUtyaltVV8z0GKVDTAmQHq2FAKZSEQkgGx0ROdGGFK1FKBox +EsKGNRaFEgwiRUoxFp/3FBXjM7fneARAbRmxAxjhQ5f4FJ5UL0zyQ+tUHZGVAL4xaMrUb+g1NA9B +QxIQGQ9BBQhxElChWw1DGt8iSWOBgJ5iVQmCGVgDIVViLZgBIZNSTOl1FgdxaRf/I3oWUUt30SyN +lhFyMTLOMSt3+BT5AxPk1BsiUVZuhhHdkxCh4jS1hRSQZC0QtiAhUX9f0yxeQgMfwRY0wR4bsQO8 +0mYKYhaV0yoLIhIb8BCMVDSwRF4jsYIJkQEyw0bU4X2a2Da2pBCMYn8CYGoAIFVjQElLYmko4ylO +wQFsohkYMAEVYAImEAYYYoQW8RiOQ0aTQAdjRBkEQAL2kxxQBABHyXSOBhJtAyFUABKDkIj4VATF +tnIeYAA3CFR2AgBKdQJWMWUTVgJIcVJmWABzCRJFhZdPVwIisXJv+QA9Fw0gcYMlIABSVQQnwYeR +CAYt4AI3UIJ8aJjekRYzYzXb/1hA3mhBhXEUhCQi5FUaIKEaZ5IAIcBGcdImdTOSqyEzFzQQFjR5 +1Mhj60RyLWIWqRMCbUMYYJkRb0FAKLEurTESTlIDNLFcHSAbKzkAGLFOljEekyGcXrFsiUEDUtFg +FoEncuM1B8AA95ECRmJBsRJZx2QQgZYWgdZEoUZb4vMRY/IjXQkSvMkhI4EnvfkVhBcVoOgpAQBF +ZnN8WbNYqsMYktQmO8Qr8PQngRE5rFeKIsGgabEc58MtldcnSIFbnQlFgxQVp9N9oJgm8Fg1YTMd +OfIkqmaiRfYW9VIa1uFGVsEr3XFnSYICitFgxikSp2MyKeklzMEibJEUltNeI/9BiQAwZg6EEi5V +jgQQlyNAAQRAAzYVdBIWdLiQTy4QA6YGFWAnAPm0UTc1ED2HT0QwKcNAAB7whneJPTnhERdZFtOV +TxIBAGc5lgUwAmOWQCJRAVxndr/Rc3V6U7K0HD+lAl3mASCBB/i0cxqBA0AYAD1XqDuFT801ADdI +BJBaADEgF39JHCxiaoeJT2OAJlNBE9eYXw0VMRNRWk+yVhTRKAGgBA+BAJBmk+yxX4zUfPt2SkoD +IU8xGhz0S82CV9MhQh0hBPtphOATHpExi+WSNXnza2Q0KdACOsWHEhTgGwnAAgPwb6uyAjsHRTuA +RheAAa0FRW8mpFThFVWVOtf/hSUqpBpjsi/r02C5mSaz6SiskkSUmJsEgFdfAWFy41Cq4UlCAVgj +8QBZIBCE4Xjod2sghYtNqh0BYARE8UgHyikDlBFKUFWLUl1EUR605SUHQSJa4hwI4RCkMTAbgRs7 +gIBQYBVQwDl2gW2ViKMJMhUhIDoZcHeM9LFYIiIPoBAPACHqZBD5tHPKoV8IYQhGSwBGBwReSGGJ +QJ/5hBIdNWLC0nE6qUp8mGXI+hvlcRK9OAAcF3VYcYMnEAAq8AEmMAH5pEWlxgE/1QJjMQA3AAMm +wAD5RHMBcJZdJh8A8FNRBhPTYwL5FAJlerXCUZhHFnWhwpdPkj0mwIcuoCtD/zEp2uMjrHIq1nIQ +FqQUUEQx51IYU4FLIKY1Y6JZziOkrYI9MEEnoYhfOYEZmmWSt7aPVcVQ0dMjPlQnRCQBPxRyEGFq +CJMWDHAuFIAR6UEZMnAyT/GZfiG6KrFO9aIsNYAQ+3WHTjE6Y4Ug3yQixqk9iZERtwITcgEjkHMA +iMMcaYEBIRIqDSZfadJaxYN0stKGlNRgCAExSQRLFxZZUME2A6m/2stCTgEVcZMZWMFjFkUiYtGR +VvV44gQrpjggWNFvAcBjEBEV2PUSBBCeyJREfzJI9dIc1YFfDyEQLIADokMdMBE/WRJLzCEXWlRd +UWEAUPsBOazDMDAGuZARPf/XAjCFTycQBitXADdABGD6BAjhhR8wAIU7YWMgA1KlAkQApS4gEKTQ +USUwZiqAIR7BsCPBl22hVAVwAgNwtF6oAr2SFvgkQSgBhGSITzdAQAEgpUcQAFSbEDGVr+Q1Zi0g +En9IGGXsAU+nZUJEyMsiAIc6xyagpqIJTGZxYtSSTPsCRVQwHmMkHCc4Y06DIYpnVXGDN6eTHKJJ +AJPnHG2jODqxKnfRKNc1KIUkVzTHEd+mTG4DPSMhupMhLQblRoqhRQgABCEyRd3nWh0xJjlDvSDy +EenFRF0SHOaJjaMRFcwHGmQiV3V1FopSuUojNcbDmQTQPJgEFe9FFx+LwgP/s7k3eoqpYxUGJb+4 +7LyaRgA94jAioU7KYgAXHG00V1H9SFvemyZYYRQAAAT78pzuJ7pAQUMuSHMYomQI/RlaUap7K2BY +MTZIZy9o8jIgwhhN4RcZ0Z1G3HEkgAEVkAJCrE9HkAJC0HMqkCgEMGYeEBgrh8dqqQJadwCggE9e +/CRdVmpHdgMxIAAhoAIwkARPsCSGIwCoR1cE0HNjAFJEWoickBYVQKUFkAheNQBP9gEPEBwUALMA +cGQjAMAhYFMq8ARe6AI0IWJRt7pECaUqgEJtiU8e4BkI0GUmUMZEsCl2eiYgBbVjwBaacUrCNFPf +cZI5IpRtAwGsxxekET9p/zEB70QAxSMvfmcfLQNh3LIR9ugzHXMTCdBbu8IYn1kgBvBexZpMOzMA +nkFa5cI5QJu7iiHJVCAlC2xLp+KjW1IvIdABWIo7FZAiyAmvpzwwBxEuA1IBycsAEzABptEgNtmK +fWJ+IzEZNYKnzRcS/9lVDOFVF3ASAhAiFBAiEIAyw1qyaVIVqkJD75UisLRaU6kmhELCidYcCDEZ +HIA1A+BMXiMWbWEA8vdYJzGeXvONMSES5Asd2jUgg6JAt7klWDMBPFYaD3QRRiAB/rI7mgQ37MdB +9KIiTOFPAAoSKclIiPIRiHRnaUKAvWMBAwMydGkyXNtx/8YsAmCXN/A3UP/aAjugGWd7EzfoAYxQ +dnQgxkOsNVJlP0pAZkSwis0cbUSEARBqp9YCBvm0xCOCAYbMTAFgU5HoFRxRmCERho7IcYmAEGGe +ICCRAUc+EvnUPwOh5V22iH6TT0yYFSQQhgVQCdNhgpHEFeUhRa39JI1iFYDDfErRPC5rADhQc/Rp +ZYYde5pFACKJ4BJDEvflSk14kqvrlF4RGAPjoCJxBfhczhkxkQPxGPtcf83tWFdiPeL8UOObkDHG +HGj0A5OBfBlhBZABKWMRTb9GhVCxV5TkE9U4ElvS5muVPEaiIrxjSwzXEeHCiyJR5a39XqYlHdGX +kIGV39GBBM8CTCaJI4L/1lSnohoLghlYabOxlGGxIiTvkT+NQVGcZ24Y27MDoDiRs+z2cq7nDo14 +BGIXMTOGjTYCkZIWEGhak8FpYTGjahGjobxd8QBSlQQnoPEl4AEnMJcEwCYBwHH4BApcA3blwnF+ +jZOFuPJQ1hVzrcNyviFQmk85zRB8EieDFBw08WMAkAVqDAD2hXw9p3WUIWFsWD2+wRBl3D94iE8u +UAIlMHYlQAf4tBE+IxBqmWN08WMnIqVs+GO8AsVseMCxdIMtwJzPCtC5PhSDgyGZtxCjUYOZ4TPV +CRf+4xyqbTKIgRCrhK9K0FRBCK0ztrHCtBM+UyHpVx5AET9imRETtD4B/2AF+7IYrLREALwRM46f +djHfSxE41XES3XPpMNZUUWF/zZyA3GZzuKEiY5XgeQ8t5CVbG/SZBAChFmmR9an0Z9E2raWwOiPJ +nGKSLooQrJO+tFVs9rIY6eEc8NwVHVDqaRLoQNFamhw/VgAodlcVts85T5U9zUETAzJRrnu6FJRN +bq6t4R84fOEdBxBw304ijAIAV8B6Q7Mvr6+ColONu/pbI/r9AJHAgoAKFhIEeBBAwAELNwoUMJGA +AAABBgQYDOCgoqqHBVoIAADAREcCBkK2eOghZMcYDjoWCWAgAICONTuaQADgCQybBSbOBHAAwEQC +HUIapfkwJIASD5OEFP+x8iGVpUk8mkQaNWkBGgICNO3ZEWWLpUMBeOhYAoDCAAQ6/ggZ6WGLBCRD +ovU4oC2EAUNHFoBhdm1IoCYHS5gIwGTfmAf0CkgAsqKBBCEHVJyZIAGCATKFBpjZF4BowqVDZgjp +YKnhyoOWKtRrQHQAoYZVGzAJkoBooaZnogjJIHXQnGWprk3wwMEAChcqJheAYKJuJwlQUzwQs8NE +rWUlD80TMnzGB4ovGAgUMkvIBwIEqBbAAuTM6e5fA1ANoHjvmSDxJyZAoQdy8ooQkNAwCYSQLKBA +MpAQgIA9yCALqbfi1sovPwKuE0yjhUA6wL3EoFIMAIMMsyIkECZSEID/8gCoYKniBCgpKBkJm+kA +mWhDwD24AMhixrWACsm1oDjIqa8VQuIgpBUkAACxEVMoS8cAEDgAgQQGcKytkGg4QKgKENCSIgEu +QyC0AWIEIEL7/FsqhI6Cmsi2kCYIqqYkvBoAl44GuGA0Fx4qYoAYOgqAgY4qSOyAjqI5wYMSIj2B +xYlUSUKFjlQyiQAHgFoRABBikKoAFQctgI6ynmCJIjAeeiKj+gjA48+heAqrpicSE46OtO7bylMA +UMViq6EEQLUSAFqAQYUQ1irioREC0AuDygCoLICDRuPSrJkMMylQGNnDsCyzWOurvJkUMgCB8yxq +N8D8AKBABgApGo6C/74oyJFcEysk7NoOVOsLARFYDMkk4eg8jYAATSsxg5hgnEmGmdT1V4mZfjDg +gM0AuOCAChay4Ke2HCtqKPrW8o9Gl4ey4LPBQoowpOlCAukBmbwyMUciKVirZpyp7c0/C/DFL+iQ +gKZoRP8okAChEBWb74CJmJ5Ir3UJSIhIjBek6AL62Dx2KKMkQCqMoBQMAIV+CQjVKAigdIDAifFN +AEr9cF4K7qPg9MoABxgItIIGHwhhswf6Wo7ebROQ6bLKXgRJbzAnOmi3iQnI/KehPA5BptHKIoCE +h1ywQHStLxMAgwpGsEmoB8AqQF8CfH2IAQH++gAAUB66wbDROhpGgP8HJvHAhC9B8YAAISCIAfYC +VCJAtwlmmgADABjBYKIPHpoEAI4K+GA+kEwHDIo2m5oWgAnUhwCK0h8KzKsiJi0h/44iYX/mW+lP +jAAWJj1DcIJ3bZIeHQTwO8CEBFVEGIr0ToAnhQALKMIhjcweNoDqBaBBErgefQIgtCiNBmM3k8CZ +CAOnO+3maIIRjXA4EKMduG8iEaoeA4CWmBGCBgITuR4EOKEXIazMgjnw0lJ6w4AAVIBaAODAASiw +AQjI5AF6o5H7jGAADlRmAOVBQAYalAKmmQQ0NAPADh60FgitJgMTIMAMBzABLmVONjYakgN6UyHa +eIxPgrmWhtbCnDT/BSpA2cqajiIDmfYYLzUWAA1oHhaAJfEshku5zGsIgIEASCCFoytLDgAABX3h +Ry8hoWIcj5YfBOCJATVL4mg4ERJRAsWWCVGZ8xaGAKAN4Gi0EU0FNjCUAU3tiYtrExSgdMFB9gYC +bRFgiBhTwbWASSgX0IgDQoafKyXJc2lCQNTOOBiwfIAE5zTBOUkAikShAC81UcsApFeAE3hFeok4 +E16egpfyTQRKR3hIpQLwPY8QQFP0fIxVClAEivSFBZjcQIC2GAC8wKAFB1WezSRwgoeoZS0OIYHK +lhJRjtJznANYGO9w4BBc6GY30QqLB2aCFxdEAqOgAYsLUPKQkAKg/6T0JKgK6AiZAUDAMWLz4NB4 +NhjDOIZGHrwY1TC5FPNF1TJeYZdmBtCXU4ZGpBWaCBhnsszsIM0/ViMdNbnFmAM8IDvC0REPzdXJ +4IQEAQaQQJKWM4AtJeo1rcOXBO4YgGECSUt8zQkKrgVK0WzLkuvSj9ZiAhrhJQwoD2PiUGSjlwsw +AAEv6swZ6XNKxehlW5ZVzEyY6EkiMcCfZQFKZzYDmtACAAehyVq2LNi3DWCgL5wrDicJYwACCCeO +WcPZp6JDragNQAIvupZok0akiM7HZnDKSX9wxoD8iMsBIWCAzhLgANwUtm9cAg3P4BSAEKAVBJyx +TmR8uVWWVaAvFv9gnS8RwADcEGCnuboBaBhYgCTAVAW7QdVcAMpTyO20BAFwsAX0xhSxLLgASjhL +RxJxgnmSCgIg0QxIwiDi7BwgBgcVC2d+MgCCkkAoHLkBthLQAQp4TCi4GsNw+eoVsJTAdCqIAWoI +NE+bmIBGFEDxXBKGg560IDxccohNSOCARWokJla+Vme6dSOi5Q0ykKNXAJoUFP8ggANeycAa+3MQ +AWRAcB2oCEVU84CJ5OBe/jkIBVDDkPkgID+RwdYLISkBzTA1KgEAwVaTw1WZLQkAKPCPl0DSgXYJ +DjQyCGcF5FPcbhGgQSG7Uns7tpDqCU4GfZnADjyVRALgoGlrKXH/ZIoigW599kz+geOrZ1KzZ7qv +M5+KZIR82Tcz0pkAMcrIJyfGAEgGYKhn+hR3g/YYQkdtR898bl8W46XdqMaWBmCif1ZE675IYG4V +onTYFCOvmbRoQPACgNpE1UTQVKBjFlFtQtjUMf0IIFDSCRUIJuOxKx1EJhaYgPHag4CRCaCLCYDA +tS4QzgNohDLZ+ZhiLhcSRuGLAHypYMcus5shnamCXsFVrqYFgSijbitEcNRDCCqWrQoAV1gIAK5g +coBlvq4nKnFgWE6gRJaFRAj3xQCefBdleoJyMB0JgSAAALuhT0QI2qNADQ/6BKTl5wA79QDVkx4A +DLQnyTVJzACw/8D0EzAiJM9ae0cqxReQhCDlKugpUtjk7XGyBbKDicniAnABvaQrJHpD9pD4VpaO +A0Uon1JMTsozR5v5BgAYOBoGHFCypFWPIiZB9tGGjS8HHN2GJXO2mZbywtP6Ry812Coy+WXUNvHN +CCCBglCoBIAVhCiKAoBLmEZILqFgACTMCYnba//GOBp9133ptVeULrT+kBZi/FLIhUrzd5mkKalh +ng/TlC4AvemuNFQSSllBwy8AZAC52y+LSQQ9yuu1SVtMwtOIhiKuoo7GIhy3IQAQguxYlzM6K6sC +gGFyImSrOFrSnqRpmjh7gCahgDMDEaGIEDXKGZy5jCSSpLVor/+JcAzSYQwM2oDsCQpw8Q+iODub +OAICUCiIiJKSGgElYImZq5Tg6IhdiTI8OD6z8K+ayDHLiIH/KgAVKIIdaqrLYgy9QK5JMIEYeCgV +ehgAcK0ELB1VGBEOWBhXE4yVUYjpcBgAOCcCSJPKE40UUCG0ii0AMAQTOIAHDBDCAoBJIAEM6iB8 +6QQSwAM4qh7teSKSM5fR8ApPMxcVYpkz6gyhCJAmoRZxQSvdkCQRWiaIScAVIgwxTIGZGKbZyCIK +uJm0KgvRGMOFIQ1vWRgvAYoaiqTq6bZTwhJC1A1WNIKQqMX7G505tKWlqEUomolNxJaQSBFQyg/1 +MgkDeIDKMAz/IgEN/jANM/q7CmEaB6EmoImJ2tKLFJqROjENcbmboYHAXjQA9uMhIlkLAgiS4AiA +3askvmmZK+E20bBGHBmMEfzAkCOKK1AMfUyjOcSZSLyXoUCB95sqUKI1YBKg0GCLCtm4BKiAEEEB +vRiICuoR46G1KzhD7dsbzlkq0eger0AqpbNGmIKBOXIDE6i/M6Gg6zEAMKCNOzKXj0sn7Wuz6jkn +PFgL88OXHhJAPAmDCei1DzMboIGAKmoTvRGK+RgQnLkWA1A6zwvACFnIOzqaCwDFzwCDygvKzDKM +OMsIsAGlF4oOqlJFpeSgCtCe6BAK0WCOTOqW3/qWkAA0iqCW/5/AqgpcIf17pnXBN+ewEQI4mgkI +zNwYMw7itRfCHLnMjBeSgaWJywNAisZEPcqhF95LCD3qiyy6prLalsZMNhk5gCapnj0KivSjy9yA +kh+iywMQGwnIDyrxPCh5kdWoIEM0kSYkEpMprpsBiVe6k/6Yjs4AxxhhoQAQJZDRrk/xx8Xam2D8 +F/cRjoWQpF7aywDqG8CkE9FwAKIATNUgirIZCja5ougEAKMggDBYyDiTzrgcRAcAGvtgzB05K6j8 +Jcm4ADAgvwYRgISjDa9opQQIE7YUjBDUjwxIk4rYkO7DlpzQiAGgMgcVTsJw0KB5xzDCltCMCQjI +CQp4JrD4CP8MKKKiqsu0HLMNED0N9TzhCADUWNHRSAyzzzzI0L7Q+vgABcQkH7KrOlCAMOoiMB3E5k +AgrOKA4DeCEH6B7LCKsA6ZpnmkPaSzorXAvtOQhtmQjyGiusAor58yXXqgHpohr7wCYTAdA2eybR ++D82Ag3huCvdgIxAoYyc4JxO+haJ2ZnwhBzJEBwdgReZuBYwIxjRWwrvZNHKKAkzCkaE8Ir3SExR +qRoiXZARyQnDgJIu9TgyCQntkZiZSBN7RIAfkACCk4DGZJ2WMYkrshFpMjaj4YCjGTOBWIt5BJjo +O5kcGb3ECwp+6UrAo0sZmST7A5nwShTN3A0D2ID5cKI2ycz/U1oY92AaMusLpwIJDgAN43ORzyuR +oCASPOEAyOMqJoEk6zIJqPGOyQoASOK8CYhUTQUNb7vTFZwJ+4qs9sOZTOWA3FAkfwOYS12LHZgJ +a1mITI0M2TgT3BCejbOAYn2m3uQXwGQAc4tO3ZEJsXER2vhWzigPzxu2+WoiB/2yqQsoj+EXLrmv +pAyUipibGR0IKJGIQy2OJMkuqUSioNALzpiPK5iI7MrFoWjZhpFXAoDNCrjY45uIFRgtHDkTHfki +K9SZcu0k6xyNweuRoagZyJtSspkI4LiSa+0qAbAYF9GRDEgOB6Cyohs+83AOylo32Ogag3uPFT1G +B6U1YLMC/y6RjAQw0V9rl6Odmb64AijxQhzwHNsKCSAAuajKiMDzPjYSFobFlsDdWTNEJVEkACCo +kMpothgxgFOjkc9CgGJ10QlzD0DZDQhgIjqqkavixMiFUp7pjQAhrg6sIGerDBUyR6waPxs5xSvZ +IyKxL3qLNGqpACbCL2ky1l0zouLYPf8Ql8IqrHEaErGpLN4zxdk0r4/bSa+yQsgjzRVyrqUqwIQg +jeO4jnlJAH2xCNeMEieKjrsKib+1xYlAjefSnUQVWNCQ2CixJkLcjaJhoieyXI7DHtEKDdwoqrTb +WJ2lkf5FUlQxAWejW22TjkcFgMbcG92aiSlqE/c7K/MCt/+G6hsoHQ0GQLYJKKuZiSIxixAOwJMM +YMDLS8QnGo1jfbV3rKtbG40SnhmlU7rFYgCrIRLVRA2S+6MomQ8YplkIkQnSNR7h6ODszUMevozM +Yg4BgqSFYQi9WI7ssJZIQqkHiE59pJb56FE6CoAOSD0AyAH/EI4Y4BIlleLgCNmj2RAVSbuSi13x +u6EEjBGi+D5tfYzLgAB+HY1e+wEyGROEIIDPmMM1XBe3pKqGzdeWqSGn20uT05cwedKy++AAeT8j +4pVBpADhCGR91Ysw8TcMwOQypSOLYB1zLAvVZJreYJpQ9g66RC+zuAx9eb6hIIAwnWMWerUYaGRs +tZpOcSn/NEJSw+DkA+2NGrKiXZ7ZogsQUIQRIFoKa+wUoMkS4hAdiqABz3umAzg1dTk3CqoZ/GqX +TOohvhyc62KAYXNgDxo5ZjMWpRkXkCk6nqGznfQ2Gx497l0XOKK8TJQM2CCADVBR/5mZmciAvjCC +vnhnZ9oqfguQU4y/9AozPDqTTxoM9eIgEKZLZ0Pb9hi+AqyZ8rASpUOicsVWGBHYOykNYL6sVyqu +H9ALJNCdDNiAENmB6xFh0MCTBjSeE1w8eK3CrhrBTfqMrRKECeCvWwMJqcQvhBCN4sAB/whefCEu +brKMrna6p+3qZ6Ui4PUh4dI8YhUbnL1AAK1CZ6NAW9IN/yVS0RHSC2SCouxAE7x2ysiIONhK51db +C9mgpt7Y3kE2iR5FACnNXN0xUmqBONDYZwoqEeN6wB2wiEl+QNJqi0pkIQZoTH8dDaUbDS/quBr4 +id2YCOOyPN8gChV15LYoj4qYa1Ck64p4LnK5xja0QtrCbUWOpFcKN21jgKuGkgLOTLqmjf5AVJau +vciiDc7ZDVx62gfQnsWpIgaov1UupV1Tqr4TS0v8jNmUNhxBJhUyOXC8HpA4ziKKZKi82JI5gBqQ +2gEAJ0k6tqGQmO/gZ6Bui91QT9HCKnXR4ZgmGkLEnsdgC8oLDQG45MvTUIaDHPWVSukDTqVkD8hO +VvdQ4f+tcqKiqlcBYEUOEBuuYjjjw6/26D+6JICUXBmpJLPRwD7S7QtA24Hs+KwVWiz/TpSjCROu +qZi2ONbZDAqh3LOSSMY/VAwWzgn8StpqjZzdcEjnGrxI2jZYs76Lji3RUWIHQL8dsYB09Zag0KO9 +8ZkhcQzJshnRkE5s6T4QMwCJ4Sv4IFaMw1792CPK9VknCYnd6zugsK6lCGKqOJnHyY/rCNLhiJJu +Qds32cXFsw+TCJHvpRrGQMbsoICc0BH/PKstoyYaJcTfLBHR2eoJaC+h2K93pi9qYY6SRQBI8jOU +Wo4v0xa+whbr2qohDTHKOL6DyKRFXprTRogmgQw3Uc//GtmR5BCe7JNLEFuIQVKMbBkzar0WkMCN +b6mMDPgwhGUZNkuAXPh0vvLS+eB1fMtaMWPGHMmbBDSJM3MqNpPPdc2OdOarzFTGCL2AzcCv0OWT +dSG86nFI5dYRDzkzhdCMjsEAA8Am1rSCDDiADWB4A4AAtwkUKXojKLkAwdrn3U5A6UgOCS00zvAY +iXC4OOsYLYGcicZgKgSZNX1n3i4huyL4LHJwNNqWumHNDcCN8YISTAuAHwgA+eCjzxOCbOkq3yC8 +pXKYaZwscEfjoGnG6jkTUf2hH3ZkFTUuk5GZtThWHB2N7UQAe4mOthRRZosNdiFP/PrOr2QqahKb +rDHA/8OwUxjBsyv8VNUQTIooD/aDPIV+NKpS56VQlwY5XecqkRghOKqZ0o8XgA0AjSw71e2iDTbz +PjfrspxfCw7AgbL68jTNyQ8cnWQFta6hoDOpHlIcK6DgCxfJpN+NCd3xmW6WS7tSLgIkr5ZGDuHR +Rsu4IszrDTT3R36soRhN85Ib7QBJScYH4ZGjquWADdgwiymF4YSxq+mXgFdql8GgOxsu6TPZqtu4 +K3yfCT06JPkCT8fILGr/Fsr4vzYCIcWImdEo1s34lAFg+Fa/Am1pKwFIASZiADMOEIDYAABAgAAA +BhA0OPCggIETBgR4MECAgAEJGkIQEMDCAAMcK+IYiP+BAAAoARACYHAAAYKBCAkYlDDQwEIAO2oK +QCDAwA4HJy3AhMASgM4AGBywNCggAcwADFIOmEBSI0mFKGsqHKgxwIEBBAgMOGCAQUOZJw8wIPkS +QMOIAQhoBHCAIMGGA7O6JEh2YAWEJwEkOAABYl8ABvyG1boQ4sKCc+XeRbn2bk3IJxMAwGAQ7ASl +TwUI2tEww8G3KBk8eIoSQ2WFJFPmNbzQ7sGEdtsOYICZgIUDBRmzpAk1gNmrM9kG6GxAInIaB6pm +BDBhoAUABB43fHDyNtuKCQ7HBeoywI+ZAywY2GgQM4AHdQEPdIDcuuL2lF2ShGt97oXXBSvwVZB2 +BbH/9ZVdB8hHgRDSDQQBWzjRV1l6Wz0HGQAVZIXAYdMlZxCAs2nk4GINVQeAFU/5RNdzBp0kVXsD +SFCRgwO4x4ADEP2Q2AApYhZABzI9NhAF8c2n3UBV/dfRSTV2tlFYDmCw0gYYIsQAAx8mEABFF1rn +HgEiCvDahQpZlQNBEDx10AESAUhAZ1zSRQAYWwIgHwDVJQeAiMyJ6GAMJWbwJQM7TjQYTRw8NBAD +CPR1AG01gTnRQO7VFGRjt020XYNJatldVAEkMB2kXBEpplZzWZocQoOJJAADBjhIEQYQnIThmATc +qJOYot7VkKkADGkhXQ3RppQFMoGgFQUEPjjAkGnq//fgbAc4St9bxDZ2Z2P6OepXngZU9KBdiRIb +pl3s0TWdAHOJuNAFKgWQHrMbOTdXo2iWNwAE6YVhgAMWMBCATxQ8ty+Dd6bpbVuKWlDQYO7tOCgE +MKX3gKMYBgDmUzS19Zh8cVV2ZEJ3VXcegfH6RpG+mf2mF7bzhcmwQXORJhmLMdPFXLh1fYVeABg+ +VhB5E11A40E5bPdWBWRVZNcFBTECEZpfhtVRwwDUkNsDCFxQkQyaggrRsqmGG2ICmW400NMNMXpQ +BTpxJFgAFzyQQA2G5SCpTAQNOQDGxYZn3WDdXhDfTwZRMJEArKFFkmbCWTRWbDdTkEGYhWNAaQAU +MP9AweJCBIAAUB5JypVRFRxmnZaDpi7ABhOkl+gDkC+b1VZ1KbWaygakblhFBnEAYgIPZIcuRRlr +KdHmC+nEt0PrGoDZAPqKfdXC0x95wEUkLdvSVHRxkJ6zQjIL2cKatVmRkTm/9lJHtRHkE6td2eWW +nlr59aBCBxSuckItQUZ8xIsIRFiAEgR0ylX6cphXYqW+glwNZwNwjkwsMj0hQOQhAxhKep6GGgEh +pCJqWZd9AFC0g02PBTDxzchqg0COzA0hErjKaw5EmUd16kgxK1FfaIISFrGIIBChgnU6MBAiAiAk +BHkMBbgHv4WQpk6TSsxUVhZEsIznID5RyE4WmCf/uRSkIdRigIM2tyrFYaCL0zEZV3agpVl1JXE0 +egqrUqKrncFsUmEMo2aWhEDlXWAHDdsAR1SywYrE6CY+sVhebBWsgQQpU2hTHgU0s7i5/OxaQaxJ +CgZihIP5ClUEoAJMFqJEIcoRAhsQ2EUCkIG3GUYzDlhlVwbCHoSczURsk0+1QDWzSuHvMDmkyFIc +YACz1KkjGjEASXbDnt0UhHcCM4zlQGYYg2joLUILXW2MmczNHFM4D3qNcFoSEbUZ5jstEQt+FPMa +mAzglAURiGsO8pnKlLIyUcQB9paZLUq9aS7rqoq2drI/Ap0Qi3ShDElakgCduAoz8NKSljSCycc8 +/+ACB5BJ18LEgYZYJEuFYxQz9SciZgZtUgNBQJauMhiEsOYwtPIiQ2hipGBhi0w1eafqaoIQ2N1l +XwtsD00GA9K+ZSArWbsTZpAmHYREDQCcwMuHuMOY6UUvXoxZDAUOg6CltIeB1EqM6nw4F4gQQDh7 +G88FBEKAwAiAAzOFmFENkLkN1QUiRUtcZerH0AjB5ToI6F5KeLMBATjACIF5XQBQQCuBIZAoA+HA +sgyAAu5w8TiyWQhcTpiTB93oODtp2HIIYoG4rBI+OeDAO5VQGZzaMq0GSZG8LmDAWqbVd+hBiOLO +Y1rDWdNCvywhZnPKQ5S0D5l0DCGpdKRD0Spmbv+QhBR9EEITcE33aTjZS1G46BOS+Ga4rwmSnewS +qCN1am4NBUCMpoOdIWWHWJ0y5/0kO5udYguAWpqLBRLwHbFw5SWYiRECvzOhwJAlZUrKJ30MEAJq +tQeA7EHBd3Yi2ZaExTFvqWVpbLnSLAHwQhoJC2a2hKDmTUxcCgWj/m6npa+Qc6HLbKJ1drKUqbRE +Q+ZSzFqtkhewGCRNBPrKQjFp4YWAa50uJUgOSmmpES/Lb3TJTUtY0BW0OAsivrkOREBVxq3pJCwS +KJxcYEcnZjb0Njnsldo2hhihtcQAFfjo0x7wgA2URwBKOOYBeiMACkT2MRIwyGNFmB/i2PEgNAn/ +3cwQgoAMDMkAmKxTdlRoX95GKGSsqQlrWNSUptRl0BVBQMpcRZErsYVSAojRzBSy1q8g+j6b2eZf +0OtpB33JKrRqsTufiOSEtM8gHWEMWU5G3E4R4AGDbuGPkYMXkW2zp5vcVsCyRIBBEaADpoqiEQFA +Glxhk8F30amY8im04yBTjIBJi0s0kiVWpzdeclmLQiIbRI1YuHxsCQEBZIIA7HkFMNK1kQNiAOIO +MJqgRwLQRtKaovWBNUYkETJlyMQdtjgApBoh9a+wwqIsIVaPApidTo0NIYJ8yNIL5yyuFE4XhWCG +hdHMEnzEGa96l3I7/prI3QhAARYsiiihS8+//33DAVxKkaUGsRylFZpWBErgKaDWkjEFwAIBdC1j +MBowQQY9oTVBkC0XSYB8/DuBTv57tmzrcngFDgAOEIcjjwVdQwImxPhNb9TeKYgDYNKk2gjnblgj +CQgeE4P84IptFQEXWQgaL0lXZKxLA5ZvJAKrxfSKQGFpWmVSttDNTZuiXBJYGB+0F7d4GshAxt2D +xjrpBpGFOWD53WcNIum9jHtZFBFTsW5uZK1M5dVacYxXWLhQaflKOM5U1HSlZUSlsDcu4HVIl+0u +dSKzRSXWNgilLiBO+iBgvdKyvXV8InEJVEACD9X3QOqlrb1tKfwAkMFvJbA1B8wFYhiyf8Ca5v+U +sjACxnUErfRIBZDE5BlGjLGXZpHEFtmFT9wOQSSKA3xGDq3R1UwZReVHyLBQHSFE3rAFQnSApIBR +pzDT8qCEAXSGyqzLHOFKmiwUAJnJwTwHR/hNkiAACkwJWiAcTQSMEjyFUfTGAPTLnUDEMkmOkMDE +wkiRtrjdQQwIhiRAXwiMG7lKbwTZAXSASjyAzxkAIQ1Kw0zTdUjLazjIY0zAlk1E4owV8SyQCkJE +arDFDnRGVOQVYJwHQiwVCMJPGp2JYbwJQ8TRT3AGPSEArbxO6ihFnd1JeogImRWLu+BPUTgNYmgP +uLhaCf6byBjGrhHPStkFpQCQOE2EBIhOgwj/hwEMCbVoBHx11EHwlbhoCDodokw0hHDYkBSZjric +yYToRMa9R8hBAMO5hwAAyLl8TIO8lqmwAFugxa7VIdtokUHgSUq0YE0g0Lv0im98CKVkHnJsRRi8 +EN8xgPtNF8ZcTRMNEAQMmgVcgQ7YgA3QQGEwBNgMC4ykxFmxSma9WBcuxO+VULs0hgzYgRgwASRp +iQ40wkHSQDzaQAz032QcBxkeiUMCAfQty/3kUOJo3VzAi/VYHPzASwiCVmX0h3ZExU9NCopsjgAY +wQT8m6sEgCfAY8y5CsGoCgAoQTyShKi8iah0oXDsid3ZjzJ4QgzIwFX9BjsywHQggA7AIxAA/0AI +sMTSRJYE0F/2SCBfUIeQ6AtJGJVSAJnDaEZpJE1YgMVgBBl9zIV/LIStNISt+OR+IY/fYA9rnE28 +fJRMcMRAuNFADBpKmAVckIk/+gqZjUdEtEVgBEDwEER6iN24SRHvHB+LNQX3rYqPlQa+hRF7ZIA0 +gaOfrVOYZAmoSAgK6NQJPmZjCFsIsiBr/oUvhk4kIcR57Y9XvEVVCEdbYoeQLdoE4BsAGQe+SQpz +yaSlJAR7fIyREIu9aASA2N9g6R4kDdoB0MCyFQ5NIJBTHIRAdEQFYMAAFI0dLEB5igEDRI2wTYSz +bJhT3EEhSIdmTAADIMEqOJvl1ZppkuRJVP+QA8wQpTzAFZRnHSxEgJYnHxDALpTnAjhCX3xKxkyR +sPkKeZZnI8xI4oCLZtAK8UhAoryJUT1EmByixAQMrYBLcc6UBUTWY6LNR4AnqDAABmkdAnQARGGA +MsDCgi6AJiwKeGIGBujAEuhoHVyBwDAAE+hoki6oIzxEAAgBAkiCjkYBGACGDf5AeCYAa1DoAvRA +6CBADWwAo9iAHYQAB5zWnRTEBHTaYcHGQQzGmEqPsP3MZ2DA06RkxqSRBQRPXK3RTzKXpO1IRbwN +bxUEB5Aaa8CIZ2WAMTUlqLCAhgxABsyFAxjQAKBmEfFOYKTHdbWF0jXmvKVEvLDNd0iAAcz/4pGJ +4VAoBoJMCEmgB0VsFHvJTsVkJGRK2kV85lLQ3APYCvasB7MoE1eQ0FsRhzeFSVbthJwthASUKtGJ +KmV62v6ECytNijGyhXiICIC4x8wwxUmsh1ZwDGDshKb+kM/MSE7IZBk1DWQahm+oIkp8x1ttqljQ +hGcaBgpcwI0AWkT4ovshl5fEikAdxtkQUg8sqA2gjGEMWgKwClgMAJLqgGQ5hRgsQMRWl12kWPOp +2kxci2QEQXlKpUsY7AKEQADwwILuzKaxWz0dCcWWp8XWIxkdxJswx0l8RZfd3N3VxsnkD/wgl7t8 +yZm8hVCsp1aBC2WdBJIq6RLEpEYobZLy/8CgBYAiKKmSumsAOMIeLK1hXFVLAcjT2sBFHMayGGzE +SkBqkdWQZMW2GkTZ5oR++FPKhM/vKBqoaJR2olMCWkZCSMCWzRZYghBCUBZbZJUuRlFSsQipuRJe +oEpDyAcBmFOX+dpkEQdEKIkDTh8mPS6SPV7IwI+1LdRaZcthZBWoNOA1TZO0/B7Dfch9nYvx6U9r +EATivs91QZ+8xcwzHUdWNFNlsEesiQkQrd9yBJhK2YdFpaq46Js5hZhTtAzvENlbJASoJJVupAfN +fYdzcJ9sLBqNRM9FlBl9nGx5WsppUIYNjO8VCJwnjC8N+EdJldL3EKZ9fF+laC0PwMdUpv/BAkSB +QSwoD6QNYZLgcC3E+C4Aq/nLe3ju8MWuvNWamvHdWwwaTAjfwMaHMn0iZ0EbANDA/latJPgEAuCA +ByupJGiEAVftAvAAYglADAhp1R5kcgqNV8jCgroSMyWADaxBeV7BABgqEOEhV+iHfBjAJLxwCMQJ +VuSHX5SmUs6QA29MVpXUbBVE/whcnEnLTlXcQKxSYyKQWrDFpo2MEjQXFz9XA/dKx1lLC3krVtCE +uK1ZDlXV3gaNGiMHTLAb1z6F1GrZuYGUBx7PVhSONlnIimXaAs/H8L0P8nUui5SXUvwqLj4ba6oF +izBGj82L2ggIOlWQ0ETPW+3EKsJuyAT/wIORhHvgbVcY0wZkjQAs1bpoQXnuQUGU5hZtImZo7QJo +QZZkgAR4sBZkxSbVzy2NmPfJm1wAkNLqQFIYgDIXRA/0ABPYAanlLXtQ5n148BJALnsxhXXkhzGd +RArEC8IRQNEE2WKulIeZRVuUSHWIyVi4CgB0QIWRmXDeyADU6ABowoIugQ487QLIwFvxwf/awciS +LwHwQBSIAw9sAQ84dCyXpydkUpSWpyQMgA7871tBRH8tBWswATQzwaOZqgzkMiwQBApcauqo6M/Q +xRQCQI4uQBqA2l0YwNNwhX85RQa0xNbUiUogABlt0mcuj1wMSk7L20+H8Awt1GdIElC4/8mgBSKw +uIqt/ONQldGH3AgEGB97Asv2xoh9yM39hJeo1NC0jduHwJdGGImIZCQkW+B/8GvqvsmQvEbfQWhN +UACbEgCVsKMAvEn9SIaofIiD1EjHmJRDVKdxOMTnpYhaA5/oqYgJtgUsadSp5cA9gVT9QlJGQqFG +lEd0IgfZ8VamlNDbYN0EVUhrZuv0XAAC3IibVPH/nvYjeQhJ0MCCboE23XZ54i8kXReR3EVV+AUy +LZtCCOkS2M5xz6+YIMaRCDc+/W9KsNp2bjDvRM9a+MpjfZc3j0wQbUfMSC9MXM1J9B24VVyXWVAs +x7JUCoAf6PIClEFB/PIdIIR7l+coJP+ALdoSA2B0LOsARdnAgkaBfbzwAjQul8RoVWzMBqTHHUQ3 +kC2a11E3Vzp4eQ54QbAEbEuZE25Nt/yG8xZEPo0FTRSHir4rs9YJZOaOdYjnzA4ac8LFM/qYqeXt +Y/1FJYVglJVR4jCh/pyEUJXRl8EgeAWXVsjhe2hdnVgFct7jujiAUfUlZw73X3QFTJDhnQriYeVE +RgARQf3Q3WXQIvukQFjjHr1TuATNUJOLQAXM9wALTDAnjXCUyPlVyMTXvyYAaoSFe7TlS7XFqFVM +PfoNDmCfflhFWZSNdWF0eSpCANgAH/CAH9gBeA3AKPSAgvK2QfYARfOvGIgBAFyBQYr/gSccABM0 +tCIAAaUPhA0wgUHSQE0E+AIowkLFuoUOAKt7+qv7ChCIgSZEwRYwgSeETKwvwEHagCLIgh9YLJHF +gKc3gg0AwKNHgSbowFXZRQzYwS4k9Bb0QMcJAA00QkPzABPcwRzeBbgzARPYAAHYQB0wtA6wUGdU ++AJsQYxIQCMs6H97QnTPBdjyFElcQBrE8qwTyECX56S/xSvcwW30315gQAg0AjQj7ATYQA8YPL23 +em4dQLZHwTE0whWICatf/BZ4ukHaAauEixhEPBMU24WEX2EwkxLYgSQcA7AT+vgxgBr0QENHQQ/c +QWS9xhW0uhi4Qg77uiLQgKTYAaRL/wIQfBIDI6bI+EpbXMCySQYYs9nx1AUDSACr7IuwlWZZL3AO +tc6XAx9WyNzxFI27RtbvSBP5tYepnJvAaYnuWog104ZdIBC6hlH8nSHIsOya1QdYbVYWEwj4gstO +VECWvP1y8A4JVSZ4tRqOyRfH+JCWLFri56xFrQQNQP5bohwGTCEJBiAAUG2FXvzLwkQFGLSOonB0 +u+wCiAEJL8AeQHvGkMQWLOhaCYDua8HeGITvx8BERMGChgCutf6CakJlxL4YcHp5xjBJxD4T7LOO +xrCR2ECBL6gWvHo3nn6SdjtHDAm+l+fOJ2kc4Ml0SIAywKMY2jeDukcMjIId2MCyEP/Axd+BqOyJ +fS9BDSgFQEhYMHBBjDujBhCAEACAgIYADFQIMECIGII6IBDgQ5CgliU1AuiAxXFgDwAnN5LkyCOA +wwATdBD0I6ClgQEPCATIcZLJHpVMTp4MkHKgloGKCAQFYHGgnZRG9xyIwYPjHiAMc54cYEDpQ4YB +CCSFmICsgQRCAYRNe/JAUoYMAGwFEIBuXJpg0XbVq3UuggNz/wK4oDdnWIdz6dIN/ICBAAoShH4V +IDYoQ6UBDOR0kBQFA66V09Y9CfekAcsPBziA+3VuXsun4wb9fBZA4NpC3QJgkJht0gMLAwx+q5QA +5Mi5S89NgCA4VsgEEMzlOoAh9Yn/NCY3JPCXoYCbDDZAoD5hAIAKkgimUZlm6wCqKmWpXFAHAFH5 +Swg8KE/A5wItFNiiYaBdaAJggisGkgQACgIYyb+5BKhDvoH4oIwoo0jaY4LW0Buov6oOoOkARzBc +L4aH7COJjw1OEkCT9FTao7EKBnCIgb8YeEAC9fyDoKGJXHoAAQfTcMghsWIaSAe4krKDoCWiIEiR +l9KawAAGyBsAAgyImkSCCqJUaZcAmJhwAR1OCpOk+AbSr6EBliDojgEsoIs8ArwTwMkJdTDyxY44 +ksQhrnYh6D2OxDiUIEkCS4wFy6iDqCXMcmIuAAQSsMml2CA86QGGDMBUK8MYUu2h/8gIG82ttt4k +4LPYxJJg0okGSIAmhxAQ4Ma4JphIouoCkBWrIxcSjK5bJbiJLuaCSoq6AhmyIK27GMAzWPFOEmvS +ZifDiis8T2LwRwAYC2ohAhzoriUBDLirgpPqFOCA1fZC7Nlp8aIuXRYy+zSAv748trG6MHuABlZD +q8yBGhGosa1eE1B0jx7seyWAB6I4dI8tqDo0DR54sAMANgdagglFdRhgwwAw3OJVRQaiocUBGhlo +krguMBSiQjjaQgyYCbIhqC040kKRDgcSmiGiCYLlaI48mZTpBfiIA+kFxHgAgCQH8lnCix5SNA1F +7LMh0rl8PAmBqccUADJ/afpzAf8FpQXARwIcjMLu0mqekI/y4irvKwYsILkhBI5RM40ttmCC6wWO +ESMKDJc46RiPMy4RB5f2pLo2WwlIQOuXbOAoih6mXsIhpgbigWKOhJ6L5AWW6EHNkhtRkwfbTMsg +OqUGoMCAEOeqG0gAzhJt3AJpShexceMCEC/o90qb09uavewrrc3rLigG3iX32UjxTCqjrl5LrNeW +AFe+0wFsa4kt0bRmwPrWXkM//trkb+0htyZ1gZzYpCW+YVaOjjWXrGTvALISl11OEj5JxaWAc0Gg +BFTDPkmFwDSCuc1XDGCBAdzEJgmAnwM4soQQgGVqNiBABgAgoNaFLoYEkYVSOCL/C7pohCBiOABD +XsEDWchCDJ+5gE9YIpQJqGcLghsFQRpBgAF8CChpKROFxLISCbDLDwQJBWI4kgYbyKuLSQNAdAxV +E6bIggnRMQVBmMCqHhBEE6EJY+ymhqYA0AZwB5jjQGBBgz3ShQOWuuIC0nCiGkEEAlzzhG6+Ig4z +nQkiyFMXBg0VKgRs4A4E2UJxAAAHgvSAJgiI00BCAB0Ete4kfzxTApJyygUI8ocJqGVOUCBLMQRF +llc4wIfssJyl0PEBP1zJYARiqANkJo3bOZZc1mIgrLAFAw7RUkKmd7bsHKZFvolgi/xXmgKhb1MM +gYxLxvmZ3BygfeDkigAGAxER/wHoJAmgC20qUywK2Ap7hzESYEpDmZNAgJsAOKdp8tSVDvrzXw0R +wEMvA063WYabv2sJ8VrEEB3dpTWBQadDydWiDnIFMw0JkQHaBSHa0GZ4SRHAwf5SHoiqTV5/QYBZ +2IUDjoyinlOTGV24tssQ8awkXEGAGjiywnSFwIYz7VU9T+IkLaApKFfUQalYx4QAdI4HGQVAf2DR +EBkO5A4P8ekIgwG7k2SgjAsIgUMSsJKrSkANiUHAIZtIGwf0ZwkM6aQXEzO1K8Tmh5Lq3AJEdlMB +LIc6h1xAFRdpq1N2tZIN8ZgODtC3BWzhJA74pq3+ugA/hMh3XOsBAxLANR44gP85EGCCJnqgAwng +iWttBIAnRhlVgtThMDgBgAWcVbrWRcsATOBDI2xwAa6C5Uin7OsDgMCRst4WamkhhScPUydjBcU7 +8GPn6GQAOAzwJX/sKmBiioUtdg5AVpuCy2LzYtJ2MSREkIknSckJ0oe2JF32DAAKRhMpewqmXQKw +VIsW65AKPJRBvWXLg+mCUsSAMC2mAUuy6BKpSzHkAnTxrENPShMDwPCD+D0V97zTmodSJycDni98 +D2fQ0CwLM6xFgANM85fhIa+zaQkMASdimrMFAAcHAFhWkpITHbOgAsIcAFHn9hU4EeQkE5AA63Tg +FlfawDJc04RbaOLJEXpKKJ//iRN+uHtmV80FaAsQ2kaMQlXLHOokXFNQa+hcAQSo1i0Ro7LdAqCo +BcCCCdUKClHQBLgBxMcoQH2S9ARwqFU9+A48WgApowmAdFVaStoi6SGpuk2O9AArfEWMS5xl2to0 +xpU6aBhR7PCvANyovFgGC1MH0oi5yFKQrbpeF42iVUhqis0X0SAApqYfrnG2zosKCjBGGZgaCQAF +05yICd+knHllYF4NnRauUJo8qO5xeQ0RDncVqBRpBaBumqJJh2uUkwp4M8cf/rDW0hY+cTW4xwCQ +QVd05RIIyAonAdgM/z7jHXbTZd1JMeKCBlrlcFWmsGJZyAAk8qOvCOdTDXkv/5NOExgJbrHHEOWO +iuGV0ZE6pE6T+s1uZHwpHRnowWKBqaZBuhbgDiAMZ/SsAFzJhJYrQWcTocChVhNogqCApEFvzVk8 +mZTo2DMnDhEuUNwi3F0+61A/lOVTJwAXkrXkkFUEkM6q6coeSPG3OmOnAUpXIg8xQQL2lGVONkSu +QzHElWJon87elB1PfEgRrRHPDwOgBkvz4V0xXcspwyqUwBRlAY1xCJ0x/iwO2Eqz1LiUCBntVgRY +4FASkBYBNiSvypCMNAA4pd4OSeq0nb5YAiDZCgkAIAHkXQCyDF/4Qh+8rBqYAJplgn7IdBF0Do8s +QcmVj/br0tEYFDY1Eo1tpP+IAFdld1lnpG+nlJc/oSTkeq6pG6fiDaxQ2UhaEvBXbCYiFOPEH/0J +y54ANpDhuQAuvrTyzhZJg2AKCjI0LDnEj/9oQgJ8RNaypVHwRFweIDMmIicqCC3Kg8XwQvxgA6XY +yZpiykcW6V8OxjIq4C9ob0FUwwKMJACmhgIAB6kS5CQ4AQB4pHLAhwF4BBbiSQCmRhnqKQBkSAvy +6p/spjyIJg3mD9n8IwS8AkNggSE8SQBpkMoGwKdC4xWcLQeqkCB88CRgkGp2w8oAwAYEbSCuAAq7 +Bjd0o0TSQm5sYAKSguhicC3o60MoiyYw7iQuwEEWgAcWaIJUzcfo60n8Z2r/tAIPLwABEEBucMAv +BGGJSoZ9KGcudERlZCxceGQPjgQAJIl2XG8gEunUBmyRcsZD9uN3fgcA0uihoiMALE0/Wig6eJAg +QuB3pgYINoRwGAAB9CwoMuV5LMMCEKoAj4U1KqmwFnAyuMPAIiL+2GtLxqnfPiwwpA9cIK46HCyk +cO4w6EkRZWUAGubGJCAiBEfWSmobcwUzDsMAfMQA/GV0bgWggkNS4Acz2OlfbGkiMCMV76Kw8mRd +aoM7MOWeOgg3Moy+buqMlulUEqymHGIHMYO+5EXEOugAMgVUUKrDDM46NgwIjUzTMMAF+Y9GDEAI +Ps9uZAlLmm0gquhfPAnQ/8aKs8TilLRgjCixc8QAW+ICBCdAhnZBKWJgDssjKFlJFVsnbbxjrLqK +Au4uLShA1apJlnAgNqBtIOKAL9bCBnZB7nSNAAgiChgC+oAAQ5JIlkIAcGorKKjjAA6FB05ENw7x +ANbgSZbp/RaJKJBAW+QlAKLwME4pDYqxNr6lP4oEob7QDwCAA0qxD0MEAxiAAjYAYQBAp7omFTUr +LSFFKQ4D8E5CViQAMgzAUFhgObhilRZAHExDlk4EQGTpLx7K95RivmgjLALgB9ZSphDgU1KDIXTP +IjdF4yQlGSkxwvrHJZ7Ko5zHeQTAAR7KwAaKIWzFIRbSK4QEogrEogTHOv9kpS+MYxwTKgAYBDzP +6ZwGaYvAwrMmhSvM4jI4kjqyEytf48PGaSvi8VQ67EdGpxVbAwEgI4F4wzVAA5tw4F8sbF0s4zPT +Ysz8hUbMoz/952DcghF2QwgiLkSCp8Og4ysfAAP+xZVeoUWgbOsMoLa4iSNEZm/ckAC06zAWAmhS +ieaAJgYoQ7iwpjye5FJa5JB2iS+LMi7azIUsgAGeZDBCxJV4Cnvqii5Q4JAoy1DcIiw0C9OeBKIC +gHVGIVfaA2mWoNrAaY8MAGl4gAlbw+Hgx0H6ajDAhSv6Y7UmAtc2qyE2wCGYczkwRBwygF04gERt +RWeW8wD8YAmOKzCC6jT/mBQUWSAuHm474EcADIUb/YAHFIHuQrNkLMwhjG83CNEu0qgzDaUeAwAC +doMCcgV4sNJAxuc3t8WjJE9IPsegHCBEljEheTGBHqKwgsJfSNPABkV49gYYa0XCYA7m2A1eIAUP +DwPAeOwhVuyHrE9+2JE+26e39gMt3OZJu8kabcN/RgcCTINZ4JIupGd0xMUhIA00fkjHVFV+DsPI +tmi2aMJZJtIlDswvEip4wA8AQoBVgMslKCAptEs/3DEAnugoaA4A6Axgtsw8hsmMTiK05kYolIEg +9qA1YsAGbEAZUkkJ1ENvgiIE1IOyWgPLNsMKk+IOSiQGQkJKeqv0AGAD/wb2TVvjGAiCNHbhPYAg +M2rjK0/iUE6EJtTgQ2ggAWh0C7hJTe7T0YrCE6jUSATgce5gGcdPT3ponGSRBUERhgTgkESGAWxA +B2xAkASARhVBZhroR9WGKuYgDc6ohjxELFjHJpMiukiC1DSIBcrAE9TgClziPdJALExTba3WDL+C +BjQnbOmoO2gU0w4AC0viHhPToDbgVVgsKMbrHzVNxNTGxVpEOPYoOlOR/HA2fIi0K+rGJQryOfDk +nEiDAdA0IxbuYnqVngqKnsLnqXaoPteH7dgO/gRnO+3GVaTow8DpVJ6qnH6zn6aNpdCCIUSF3HRD +V9qFXqMDOQ6jLnZXKf+YpS509VvqglnsaRxzZbEaUQAyQFbsiSvy9S8SQAhQ6+I6TBF/KwHgIvbi +UZQQaUzVRGQSgmiMwg6kZxVIQqtGAZiSAiYIwg4EgKiuKij2JMtOgyzzzzBAAOaQl4ahT4sI4SeJQG +LAFokiEqAMqEbS76QwuEQm54oKyAAGlMAgBcaQ1sYM9kyQ9urHMw7SQ6GC4yQ5aWgGN4gGM4izWf +JAouZwui4IauxAHk5g7861JMgwBciQ8OQAfUQwu0AAcIoOzOqHOY4MMyYGqY4KVkQG40gQZ0YC5z +raS8+DQYNYxYYF23BkOqyACIokKCqCjEgCZYhweCgQB04EM0gSY6R9f/GiL2ysMAaFjWBuA+C0sC +LqBG0ktwTkWfREp6xEIyrWndWi4uvpE3ngN/5G+HMi2cKFB7QUMsrGNUc2Q44cc6+sh/AOfDaEM6 +p6Uaf3GawomADAwz/GsruALHGEJmeEw09HNtce5HUApH6U8ofsfhDIAAIcJhvmKB0BMymGV69So5 +Ouh9LeAsaANUTuLm7KmYUCNdLrChLMIouCwoig55BI0PAiBMMEQTAqDNJqSvcmIAzHYkKof/zgwt +uOJQPgMBPkQllmAwDIB1ykAzJhVy6ulHxcIrB8IPuOcL5UMLTuQBrsDSVGINDiBdgoAgLCZb+FS3 +zOQYmmSSuqpGBqAG/+lCOP4NIhAAQ+TuTBiCddSAJi6zNRhAZjlCExjAYUliCRggA87idjzHhjnC +ttYMAH70M8YqRoQlBgaaJHgAbBO2IdrMYqAUpGukO81j2lriF31OxuBHOvwnOMojnuDvmbNtJyvD +MZRiMPSz9qJzP8qx9qoJgjDuWGTRoQxAI/uHWVwCOmvjWdSxRpSzNtJlw8xiK5J5FFnjLPDE+rSD +IZ8HGDGIwyLIQI+kboCLXABysTMO3SQjnERqVm7lgejEJtaNPILFYYJnMoCjXAIgX3OjIGtDXt7p +Mw4lVzjAcAkWoVypJASAdUoiAEzzzza1IIAVYGY6hM60aIIYSrhvmnUf/P4gCCgQ9XwhEOgyqMwhpd +IbfiovQsg0b5YDUYYBVmuii4G0I4jaCBIDAO5VGSQmz7sVDMJAgeoALaSj6mxDtwyyh07S7+8V8e +hyDGhDw6cQF6BQJ4AEM2wMrY7aNHDX6gLIzuQIrAwrGwhi1SB09c4i/UxCK/QrOq4g684yxMVj5O +uLNKT6ZacDJmMWZECK1pQiVfAiyg7wJYRKC0RqAKqH2sJ3jA1SmHpxUxY754TJ3KelRTqiucbB3R +bW8KaJy2bzUCNls4yjSaOQAyznocjnWJmTeq17LDibJtlb5Ow7cuYLb8Rcc8RfrG5YcOwzgeenq0 +xfmyhaAASFf+BQH/AMRWNKo7NiA6RvVNqgMrpxdfs8N51eIsroQAMIBZ+OovPEtrH8IBKMA++iQA +robLLI0ACuFDJIEJBScBJhHY3rINEakWM11uF0ATFsYmAAAI7CMN6C4wDoClqyQO4CgtfsAntGBi +16JM+hcOPzUAbEBuuuYOeI8hQuDWxUCCAGASLUNHb4MANFoldok/JkmQD8DXm0KjpOh8SsoGloBy +CsFZvioS48LU2ItXCgVDlGErKKAQ+DANJEEJsKIxAAC/GTZrDzgp0DMzapDLu+xDYGEX+nOBruBC +HsvhIIKvskIAapAyarCBbKSwLCD/KKCaLsVGFnBM94JdfncuWGQh/2UKcHhRw8CTRaAK/5TDJfyL +m5LsNRpoQUCloRbyLY7kK5zHhEiOLh7T6IbxRwoqL7aDMipIVyboedPCTTiFSgBNydXRJt7PMpKn +etGpO6btJrwDOBDVRxpMSMATIhhZOQZpvwIAhqjEpfbLnzoLpRyALCJyLt5K6nAs4W5lUDrOwCpg +YehEw3ZsMFIDAGIgFO42U8TXBu5WNQwlAfLVBkYhBerJSKaXeLrWEfRRuj3hDqik6eBo4W5CX8rA +Bu4g6RZQelxTYApbK3TzB0RDIehLcOyHLRzhYstDPG48O9Kla9WgXQQnKVZXL1yw3Fi0yooVggCw +YHsFpehk1sgDev8Ah14IAAcs1mHIZTKOX2D6rOMcIHJpoBB04A4eYC8rgAPUQAdC4S/u9D8B4Aos +VmiSYsDU4mJgw21kAzZGxGLBAiACABAQQIAAAwMB2LBxB4BAhwAoACAAoKJAghUHVBxIIMCFAwAe +JDCYQQCABA4IGtzoEGFFkwlZVoTAMsADiwgcBpCw0UFBnT4RUBQg4SEBmBtBQlxKEcAAk08dwpxw +MWRNpxlv5ty4NYBAgUN5LtV4ciBCAwa9AjDwEGSAA18HoH2b4GgCh3fV6twYYGhFhDsxlh2s0avY +jhAJGphbsCDbh1wnSj5AkaLLBDkr9PUqcAAFr0QrUgwQQgBFBBz/HIgF4ACFg7sZLvA8aCGBAQgB +HEy8AIAng5AITB4QwAKBEAIJLFC0oHCB8x65DSBIIFf6awF5RwKAm1SmgAGILURxvuDOhKcCNpgk +MKFi+4h9v/uUO+DtgJGeK1oIYIAqgAp8vcdcYxnRFACAAbT3E2AmHcgfVW8B8N53eh0Q1YFSXfTW +dxsRZFlIBILUlH0GRWXAZwbwthZZAxXk1mZsCYcdTGwBwMIBCExXQwJ9AcDAAXAVxEAGPrm2k24H +vEagQMzx5RABFOlm1V6zBTDATU5COZFXhQ0k10uCWURZQnJZGQACEsx4QAIHuEQRCggIBCAAGXTE +ImstvTRUbk+u/9WkUxYMcF9FPBpEAE0yVbWRgswNgCiiFEkEAG4RvcSfQHCdGFWL+b2FAWRexSmA +UgP4ZIADBgwnUI1qPRQqq925yh8CCPkUk1MCpUnoRGwpGaSKWwkGWZxrAZnrqh09hJCKj8VZWU4/ +IWArQZ11BhiuACDwVJk/AVAaRQNsEJxFQ1IHAAaYnWShZgwcx1MAPP4UgBACfTbvURQw4NO8YpDX +SAfBCWAcRRD8ZsBv34mlXAC4NWXRBATYwcQu5GnhFFXs1UdpAhiM6igBA2Dso0OOCvQABlBqBLJm +ZB3FAEKFXVnRA5gOcAAEGIDEAAUaYcffSFZueRJUhnYYc0Y82v/GFq0V2YrrSLYdtCsAHFAg3V53 +DQYvT8kK9CNWTtXgkIUPYWcAjwPUNsAPZhohgAMbsFsDQmFIZnNvKQ2gYmVSzYQpZB36FdKVSE3K +H7UmUbtUjHkOJtwDqT5gUgIX3OWaZCFIYEEKAjygno8UmPaehRlBVWDPo5ElpEMM7BRy61gVfkHQ +dle0lc386RTnWxzklF+8AmUNNUhICt8guVJCy5tSKQEwu4Nn8gfSqPLCpBF3mnnZIJYDIrheRdxh +WcH1PUfFnnu/HYBBi0oh6tTNzq9VkQRBgr1dVfBGeLfzIE2QQbb7woyVMCKYbzmFAmjC1XdG9R8R +WWkArbOSWML/FBKUgYwt2+oYAxgwAQZogjw2YFMCGACBDQxOQXNqkrBEkxSN8IE8zqkDw37jI6hs +Zik9iopGyKIdmU1KIxBAj0XStqyBrCl4N5EA5GwCnsHUJS22QQ5kRpOqPaEmW185wAUM8BS2PECH +UDFAR+K1L5PUaD2mSUgA7OWQ2WXEIiJhWH0msL7vUIp1CDxABTbAJiM4ACQXqI9mDKAZgzBAOQTA +0nn0Ui/JeAUuhetWAH5TFc9cbyOMUVyPFgcvi5zmL6Oay30QwIAKkDJQMCHIIQ9AQsvU52BKCU0q ++dIoOFokQV6hiUEwcAGTIHArtoMXCh4SFAe0rj4JMYAE5nKS/5t0ro2ysg5bZPClwmBoI56pIzYH +tEhG7mUnalGKTLDkI6o4qmcIo6HNGDeQuwisRJ1JFoe46DHepEkxTuHQQQgiFzbl5CC5SlLWciW5 +giTgLgzgYV94lKaRfOcmZmLNQ0oDkgcciiBN0k3ZKhI6AORAPzHJ3R8B0KT9HKUg37HAwR4wHucc +IAP6WksOBPIDAqiqQ/oBzXZkwhwewHABNrCSbgRgAcr4zAAcIEhwQIYRHm1FNwTgokA4oBHtSAaL +bEnXBVDQNOERb0MDiJMBLCABBHSAJU2EDIsWIy9PzqR8AurRnnimQxkIVZ1TlCRkTHpVsuxsIOOT +zGMahISwCv9BXAAwwgQSsIEfIAADIw3UAzOiGwbwBCQuydVf/vJJFhKKImi7y/SoE73e5G4pedGL +/PBE0op0ADSlWlm9BCI2AUAAAbLRiHRo9pYaXXUjFbiLlKw0mgViiwOVgxngEnM3BnBPKi1rEIA4 ++Le9vAS6aNkAzXzIxZAybJKJ2YhYkNkZncxFMWmMZcsewIF2mmRcNplZwKQ0XK8gRHhNsxRooEoW +aKFlLdJpzFOi1io6FWq10vVbmlDqQwh05AGtW6BOvcXAAeTgU4GK6gA6UKtcDkCJclHfYuDzG0El +Fzk8OtV9AilH8iyBahZAwJoUawAMTKBNE2oVYrJHo7qkQQv/zoGFDkASVoMU1AEalQtFMiAQJufP +AUc5q1lsNx9T7ZQ61EJQ1iRrXB3yDAB2LciVQOOwnljKSytqEW+pdR6LZE1FiLvIUyZ5WwAwQiOS +Wo2DKrK+mfiZNetjQdpUN2ACOICqB+DAhiykRQykCAEVsMADAESAOV3gAWsyTa1EQykCLvO0p60J +j656k5SANY190i1LQFYRhOXsXHPbQA00ssdgASAG2RoANSe1kQ2oBjBG2QhywAe+zOpWIEHJQFlb +IiWQ5oYi3HEIhJAiEEQlriIVeDBkVuLgA6FnK6dy2M9q5MaxXfp+vUk3RCDD1p3aji/1cYCJ1vyS +p2jrK6Ox/1XQimIRixwPnf2uCc9W8pWlrOU7CMLSwQQw8Ek2CAIIodAABaWZgi8lBjZdCwf2swED +BdGMaGGgAN6jnaOYESQQMNQDRFIBgwznAJKrAJBqQJsHyBvSNgvu29YHLyxVuG9u7osNlGGD0TTm +IKkCAAqEM23wBLHK6ZPZzeITn7MECCJDKR9NGICRL64ObAxziAW4rp+eacjffZIAYsAGnsrEZTQT +UdlmBPIpATg6n6pdN0XGKxBoFQZKwFy1UKYjQQCYcAB1Sk8FLtDYbF9tMHMitpYIyLej/FZwEgm7 +S95TAZ7sq2+hdlgsvbLI83hMIgPgakGACRgiZ2QDnaEVn/84opPlFm53UCrvRI7npAGabGYefpuM +HXKTK2U9KwTzikgMklQuQvSgNXFNfShJlvtUh5mZT4BYPs1vsOSm+3PadTdp+N1DXWREP6GWUmjg +JGz3qXrkWqJUrv3u2/IkKm7xzHCedxCQHEBSHTUc76QsFRECY+IR9nUp//MVCeRGwsMbHlEfgnIm ++4Er0iISp9I62iIoEGQlKFAjCcVFI7Ea8TMYbiEZHVEwiVQfBRcyO3EBXPdFJNMbYOQVTKV8+iVt +7rFaCbIDtiEh7+MUQUQy/FQw5zRD/LEDppEAEBcSRlA6XjEnmtFZCGAg4yNH4BJGcqEkC0QdqSIz +t0FKAsP/TGMDGUoxQtIDLxV4AYoGFRphAd/RAXIBMLRibxvwWr72HRdmIbCzO3JlcIhCMxvBWxsF +IqMBceBRM7cxZ1eSE6zGdmZ4GmtUEoxVfBSQAazEARs0Iw4RJxnAMr2BADdRHAHTFRvxGTDXfkcE +AcPRHlPXIglheR0ScbF0F0xoEIGUSHkhcqlkGhiyRjJGFESRSEdxAONlS2+BPxmyRnI2KpWhJVcR +cG8Edp41jdU3EZWxTOihHYUDEVkzQYnyiLeUcSwBgTYUVSahGgGQAQf1HX6HF2/UEZYni0CiFFJm +EhKgESoiAwiXS+lEEye1FqSnZP00Z/zROlzUEdNhEvwo/zWUAofEeCVyoS00gTtlVoOttkZdhB6d +JCGRclWztCVQ8Rn/cRFZg01OgRA5oSIngSgqRVIO9UzDkV+r5RS8AS42kgAsMDTSsxE8siaE4iwB +sAFNIQFpUh+kYzW7YoNk0Y1r9BgCKYt3cRSCAgA7MIQDcZSD8x1XaVlBlBMMQBHrQwCfgiwDwXUm +8R7WVhDJB3dnVH1p9B1llhd/oXtXBRdhFRMwESelUh8X8D87EAZvuAEugUCfxHkm50iCOCEoGWos +FACBcjbBEQDIpUzPsyUv0iowEW2y8m6bBRlQlRGsVDDUghZ3wycHgjA6NDti5BAkSRmcwU/iBD6b +JBnZk/8tZyFvZ6NolBkkI8YdvtU8W4QXZyFG0SQaf/MW0CIVOeEA4FYiM4gXqxJWXCSBCfcQ1Xct +X+EV5nIjO2UhNFGFY4NM6DEoA5Bt5mdeUkER7cEeHSERaZFFrfNFt6EeH9ZBJAR7rJQVudQx9vMw +riIiaVGB1nZLSgUVjNdvGZdG5sKOIANl3YIryak7ZCGIdSYAXOcVKmUArzV7NEkBD3Y/Z9M4+Yhm +VuISLiE0nIIoJDkt3TKb4eEQFUB2iYgy1SZnZSMnO5EtB2EEv7EDSocAIUAAkAYXnMAUJlFxJ6Eb +JkQQFRBxKUoQWYMdZjGlxKaSKSdjNtiaJJgnEaIUvDH/ADVAADujESyAATJAARugBOAEJ1jnXBBR +lRvRXudSEbhWERdgaiFZUSH3cg6lRSnKWts5j4UjFtxxhmpBjqNnl9zxHhOQZFDhTLNEQbGSOJyR +LYnSWqXTiakib5NDeSBiIyOyamUmGnURKtXVJaKRcbpnU2RqUbeSqNbVaq1GEa2UFv+hJx7SIAY4 +GhVITUVxICaxH2ImivdhXGJGlQWRATDzAIEkkLxlSjAnntTVOUTkgkD4XYsBNAjAAm4imkMDEz4h +MMpXUbPzTjtlJvxEO+D1iNJSEAsjJaahcgbHHCbxamzJdeUzEc4VUWtBfjrhdcakPTNDMBNxRx7R +FOqE/2ZspxNB1BgRiku7BBP05hjTAzlDARd34YdEmSsfto4C0QFbJLJn8kcC9SMCEFyXkiHRqUY4 +dZYi6Vm8VyJ/EjP24ZY4SaQ64zWG1xlBYkr9Nky5wwJBQxC9JElxh0DPNDurwSPPxRr1cReBOpUy +wReUkZ44VBEcgBh2Ioj7ZCUGMjb5CBISoFFE5RQQ1SER6zCJ40vERlLeBDuwGISnSSGppraQaXEG +txGdJi+ZdxCyiBUIIYgHJ5fbwTdfYRAGUSNKcROWpxZLM2enAhoCcSMg4QodgAQhgAT5ggQTAARK +QANUAAYhAAQVgATVMAE1gATT4ABg4AqhOwkVUA0VkP8BNVADB5AJP1ABhKAEQIAEv6sEVIAESmAF +4AACkJAJg1ANpHAFIUAKSnAAQEABwisAIUAFBCADFXC6FQAGVJADStBLExACKQAEKSADP0ADFBAC +QgoEk3AANBADi4cAQJA5NHAFOAAEOBACF4AANNAeEHMAYBADEBMDIYBrFxADMUADBLDAlkWk36GB +pWRT7JsDFBECloXBEtBBsiEBMperVaQlEEMAYNARITARascCIPMDY4ImjKY+NzkBCBAD8QEys4MB +FJCPSlCMqTKTfZNxWrIVQtEXWroVxWGmqFIZArBVBJABCHAF0pECKpwBNIAAPxADF7B4H4FIfRFV +tDf/Gpb3f1Y1AeN1KFtymmopKLo0dz8CO2pBgsv1X86zkvq4sQlwBYYmxUucAsYjBGEpMDJGPwiR +AyZRoBbBCT3yFpRmMxKGlhhAK5AMFgx0P5IyAYWMTbHXibS5F9+BEBSAI2JEVv9FLSpyHCfxGwVT +ExZnXzuVoZMSYS9Bdu7mPq4CULdlRoQbx7tyFDdhAJDTb2uCl9kigMl0uH3HlBjxGNMjbFhijhyB +WzKKbH/TcgHwA5ZFOrRjuQAgCivwCSvQCqiQAiuQDYfwB3+ACt5wCKKgzsnwB8lwDtpwCIfADqhw +DivgDfT8CX8wCyuwAn+wAqLwB+DcCrMgCp8wC8nw/wnq/Amo8AeiAA0dsALQwM8ikAzJAA3kcM+t +4M9QoA3erA2toNB/8AmikA3zcA7eoA2zMA/scAjaAA3QEM+zAA0NzdCHMAuocAjZoA3ZYA1/MNEr +gA0AnQ3osA6z4A2fgA2fAA3YgA2/IAdOMA6/IALLwM8rYA4jDQ1OgA3pgApOwNC/sA4igApy8NRb +bQ1OMANyIAeBkNZo8AtOgAaBIALj4NXjIAfY8AdQ3dZOEAhdIAdSYA6A/QtoMAPysNZyIAKFjQZO +YAtoIAfNgAZdIAWbwNZSgAYgEAhosAkrANzzzzIAWXjQZsoNmBMNdosNkr0AyXIAKbANqbsNmbENu5 +EP8Ikf0NvXAJ29DavdAMsV0Kp63ZaCAPaOALttAMvuALvbAJ23ANqr0NMuALzbANbOALyFAK15AJ +vbANVFAKvoAGpUALtEAIvfAI5H0JmUAIyXsJkLAJkIAGFvAIvVAKj4AMj7AKvoADaHAJV3AJ11AL +pUAIAD4I1KAGkAAJhBAMapAFoeAMzpAFwAAC6uDb6kAKzlAKpIADweAMFzAIzlALkEAKVHDhpFAL +auAMSIAEg0AFg5AFSJAFVIADtQAEQEAFSsC9YBAMSoACp6sEORAGqzu7uQAEmVABPwAONSAEmQAE +OZAJNVAB04AEB8ACSqAEE3ABE2AF/9cB4WsFWUz/ARVAA32ROQSgBBQgvwdwY58cAylLAFcwowwQ +SMa4MwwQA45llD8iARO8M0SKa1jcOQQwG6uhFJQh6HtiU3BBOjzRvwTQv58BaWkCAaOmjqO2xICE +WanVI4a6d7ekj0zzzzJEBjHdJ8Kk4BILZlE62yRvxGQ6r+mLnGJbyFKDEAJFU767Re67Z+67ie67q+ +67ze677+68Ae7MJ+qbUnK5zBGRNoJsp+7BLIgc4uKBiAAc3uFNEugdXOgtDOgdce7dx+7TvQ7dUu +7deu7QMgCOUO7hyAARzAAUaQ7kbw7lAABSsABRuwAh2QAfg+ACkABRwgAkMyACIw7/gOAiCA7xkg +/wL4/geHMO8rQA5/IALlPO9/kAIBnwJ/gAET/9UrMAgBPwjl3AqiEPAH/c9fnQzkAPJGYNCtcA7J +YASoAAWiIAowz80unQ4FfdOigNNOgAr+jNgZYA0rMAs+zdB/YA2tkAyB8AhOMAhy8AfL4ARTLQJT +XdaBANWP0AWBMAMiIAVswAyXDdpSEAggAN4WkPUz0AGtPdUr4Nci4NdiLwJsjQZUANqsDfaxzQZs +EPCsvQlscAmUnQlsMNw1cA1S8A2PwAaE8AyHfwl3zwugfQnTLQW9UANssAm+EAaZkAmX4AtIcAmX +UAO8QAvfwAsETwgg8Aiab96BkAvfcN5sUA3NUP8D4g0JSAACSAAJbAAEAI4AhCACMP4IM67Nwj78 +xF/8xn/8yJ/8yr/8zN/8zl+1YCETpbrrZTb9V+Uw1v/8uJ79yd8U3D/rcAf+nekqe7F2KvpN/kpc +2FLs2D6Dyj4A0j5JECTtA/Dt0B7/8E//9F8f4o4BBggQBwAMJFjQ4EGECRUuZNjQ4UOIESVOpFjR +4kWMGTVudEggoUePHEWOJFkSYUiJBECaZLkQ5cAQBCS0pFnT5k2cOXXutPmSZ0afFoMeHDqw6Emk +Hyke5cgUYkioCkOwEPjT6lWsWXcG0NrV61ejV486VQq2rEMaISQQ0NDW7Vu4ceXOpVvX7l28efUZ +7uXb1+9fwIEFDyZc2PBhxIkVL2bc2LHcgAAh+QQBZAAbACy9AaAAkwBdAIQAAAD///8zADMAADMA +MwAzZjMzZgCZmQBmZgAzMwCZmTNmZjOZmWaZZgDMmTNmMwCZZjPMmWaZMwDMZjNmAAAzAACZMzPM +ZmZmMzOZZmYzMzP///8AAAAAAAAAAAAAAAAF/yAgzzzzRpnmiqrmzrvjDrzHRt33iu73zv/8CgTiQs +Go/IpNJGXDqf0OivKa1ar0hqxKGAeBfe7tcL6S4aEMwYAm4j2A03HMweLxZvyPv+jdf5CAsSbQ9s +gRAPbWp8d2CJZwuFCBgLGIeUlIlqlAiak4UMFhqJCGI1VApqCgBeAA4RDwlkkbRdCAkVsgoTCb1g +XRpnqmyxGlwQFaN0f4VfsbIOGAAJlF6TiGrECQIGCg4P082RBRAJC2IPBBVdCrzzzzZeULovC3W+Wp +FRGyEDRU5Zve7ojh42BBBQgRwnihpmDBvjoOymnwphDRggl4yCjEkOAYPUoKEsHzEsHhMGfN3v85 +4sfxQcJzXjjqsUTmQcRe/NL8srQg4kIM3mZQmVEmgphyidDAS8DOIjylY7pEc6kg4Ts9y/KIkZWw +y76QZOI8MGXuWCQ7aMlUYJCzEJg9Fu4kYkcBpi2HCWBBYMDlVVAH/iYeA9ClQoG4CvNErNTAEiU8 +lBqwe6DG56zLdCjSscyIDWKpCsByfnMtkAR2oRE1nYkgLk239MJYqGlMw7tUrPq5miETlixZWem0 +oYOmDVQyDeFlHgkv4tFdq3dZjPMmE5hFGYXXWURTp8Y/bCCFl1cnjbdUX0JiOJjwjW4ahQpSAz72 +appexsws8+LRJ4JoOHGxRVAIvULDefaEsUX/NRWZZwpoZDBFlCk+JUfRWHv5VAg7RkWUkHNf9KIS +Bu/xlkAzrOAFwSiG4EIiBAAsxxBH51BWBl4i8UOHUXqwURVrPIoUkgb8lPRAIGNVkAgARM5Xhy5k +TNQOMwWx4ZxI50RkUxl9UcQUIu0dVGKVVQmoxokJTITMKHwhdE85RgHgEjI9eVEBABEkZFRcDmjw +RlUh4VlkJF0l5AqMRrmUEIyspPKKCCPpAxSXMHKJAThuIoKnPQrcqcE0W3j4ykFANSWVULvNEEFL +Bh3ixVgc5RUBAVZW8GKbP8rCFl58rbPKAvrgCVgm3owCGJc8duGKPjzCGE1PEUzTRUlV4aIX/wPS +FAhBATEaFdJYP/7D0ASreXSmGh2iSoOltCBimwVe5eXAiRE0wNc0Or6CAAO5RQJAPg7wJVM0m5Yi +gZV5lsQVnBG5IpU+BBBWYEm5tJUAAAh0CCOUuExDTQT8KslUe1t0GKo9HoGx2Jg2ilHNHg6tQzFf +5+izFmCGDtvhp1wcao5vXDGwAJMhSQgAUNL0NDRFE9/Zc8AXAyvCpNEihEC3r1RaMjgagLyFBiRK +lVNo5PIjhlckqssbRWAhZxDYN5VzZy4X4zJKMnWnefEDn05TAhi4VFBBJ9JK43FuFyMnwp3/QorM +4kTkyejjkC/OqOO5ME7Uh3oKSFQZGPaktv9zk/ZoBt1GqXEIW0KWsdpIfL9B2YkszlJVwnm+wtcW +u/ND80hNHdOlUeR6XjJRBzpAbqjSFRnUqRAUj9BAZIwJ+Bc7xSKAN7CpnPpTv2ikXRePSUTTVxFV +iBkbskwSCDXXHGPGpb4fA0tyRuUZFF/QFX9e2eljBxfIVbZImGFMe4BVHhwSo4JEgiY1W0yOlPKn +z1ljXnIqmgbWAZgMhuFOedmYuLYgAFZIiEif88bFKMIRZeXmZPyYQF/4woUMiIp3BsraeXxCiDFh +QHXfMUheUiGXV0knNIj5BbycBw8LMAAXFvpKtO6wmF50BU7lYMMWJAaGOAWMJIhCnrMM9LD/MvHl +AjNggAy5JD8Aim1RaXhDBUTXQfiYoxrJwQVCCnEimADFMl0I3dmEF5pjkWFRAqqAgWzWpnoZIwKK +7Mkq4DGWefEnPw7jEGGE5xc3EnIXAZtATgZ4POjEjUbWG9xZyhE1B1rgGgsRW/pWFIZlvOJDcCpZ +sSJArpttsZIIMYhRdoSICHUtDPVAhuQoE4E3nOwvObShqvwygzKZciQgukMffaiA2ahsRTKrD5Ge +5AW2iAEWORrktPCQv0QGRVhPvGVfCGUgs00KN1wg0Qa9mE8C5NN4BVJjUHA5QIqkr001oGExKVTH +Cc1BD7hgQHWA86dEfI4B9orGpS4FraxV/ymHCNHFS8Bxz4iwpSNlEKVVgsSKqoEKUYHc1LICVk0a +fMgbxGunxmoIomyGIW0NdQBc6NAbPo7ibHwzi3O4kIua5U9Pk9gdTjkYLWoU5ZY5kVfAzjMnPTyS +Gpt0lk7E9I5ZdqV4xLumc6QnPBvmxCLK8KEvvArFQPopiLrwiai8t0gBpWGaodkNAxR5PBApTHhu +kleaNhQsvygSGFYcY6gMRMNZ9uUCAy0Q2zyUGsCVZXQOmQUGCPCAXVXMDF5owEHaBCyzlbOvKJOV +npjpjU2Z0WwFwUDubkoYI0nsWD8izAQwRaJoKQCh/5vWDnFrNgL2j0ALaQU/RieTsyBgjv8Rsc0y +hpOm9NlFlPujKf98JD9heQNgpQQjSsXAFvYQLDwmjBP7jGGlWNCALQEs200DuF8crvVVNQIqFVJy +nZb2QhzHiYW2dATH4+lSlCORUx2a+QscgoSW9pCkTMYSCQfMkT0NqdNvgEXEAYYSOtNly/JGyWK9 +uo4YbbAeBPzg1ayW5w5xSEVZygAvSSpInrrcRsTMcTES+KIyscgcrQrjjhQxrptMrZzjFnen3D0v +pw9THoJwGl6a1gQrY7pRGaSxln/Iw31pCBGGGqK+seCQRw9M06WUoQm+zS5NCHHwU3M3vatSaLrU +HBCneGnQaspwhyg7648sK2b+jE4jQrX/TUQQoIzt7mEb/OFPcRF2k1jF6gF2HoVtHlAAvu0jS95Q +aE11xDRRQceGYst0X/yCxvEOUI3NcfFaQ4NZQFJiTK+cRS4S4ulHLDAWv5gAfss0r0r0onTIGZC7 +JtHHfXg0hlxW9ucWxbYBRUSaodqdRw2tKucZ78pvXeoYKPOfR+PFs83U7hwpIwhH1OlUuWOAVUQi +Py7xL95O4sgfCytVGdoUyqZaI3M361p2+E8hoDyitnFrUN+xkkjtDmpjrLoQI90nTZO4w6W2kGwG +DLTTOOWU+GK3CNBxxRtlMyhCuYTqFPflZNOU5zQ7h/PlzRrmChW0R9wFaCqoTDoO0Qcp/+bTrv90 +RQJ9ybNfmsHsMcRqFGgyEFB0mUM9325R3HY0xMcWwF7zT3lnx6nZLkB28E73ra6jTJjPdh9YEMkk +J+KJm6qydWpyKRjO41EnyOeWX1fl6DKceQCRR3dAI3SyfJmA0NOnvHQp+9Bk9LLnvkigptDR6GBp +SAbrzT6+XcegIelonQLGWCAXBVD1tCa8OklTmm7Bhsfrc3Owmen/yY8LbOOSLPmjbAhFbxe4mo2V +RudNOqQJFnwwtTLGBifd0rRMepkY9h2M/UWiPr81NTESAVWkNFbTZKpituS7DtvnsbH2zPbPpDJu +9FctpCNxQcN8LNocIoGlZCTHETQkbv80BIC6Q1l+YYAlMzHa8goNwClsI3m70CGLdlCz9FyWNXzV +k1Kh4VYZgUKgRR86FmKZMB/kpw8dEWJZIyJ55WC3BCgumHsTsninkmprA0eAtTkHp20JKGg4ND1o +hEu5hzLHsAifFVR0MmMwQl8K5mwv4haNsSjz8WzwMz3682YI2INkNFn5I0O8Y3AgQ3Mc2GJv9RfN +BT2gxEaI9jxRxzQ+8gBiMjrFUAlnsA4wAhSgNgrSNmY+UW008jHsF4MHKHRppWg9hWI+wRYPyGX+ +hX55ViAJuIXywQoc0TBgACkeFUgqEmY9Ihnl01TswxBw0g72gGfzESsPo1M4JG67lT//vhduNcA5 +LqYyxSM9YuM/55eGyWVw4dNADsOBHtIYCmE9i1EJR6I3VcgRYDMJhsIjemEQs1MZ+AaDsCVei1QU +fKFGmehfWlRGgZZDtpc+pcSFAQNJVXEnbFBlLdWG4fEF1sNuX3AmArBBhsAi31QW1VIGyBg2YbB+ +CthOcfQYhTBZ5sd101SGEUdAXJIBBNIhzpU+sJY+5oUcFgAYx6BsOmJURZcqleIjFBAvvhAJRzUo +cscjK8h/pjIxkcg7sdASt5ETFChrMUcVjieJ00WBDmBDvaNXveYsnUIYd5IZxfM5cpEbIWgIFkAA +3URao8YGLVQU1EZivKMPrXUUzaFT/+GYGvSGczDXdV6zgGzBgQREQzYYPZnXhl0CSgIVdTk4hsUU +Wj4EK3CQjrYhE3rQDK8gEtBwPBuCHLmmSy6ob/LhWgX1fcljJdGWQwTEX6Y0blvAg96GMtPjIfBw +RXq5kTRwBlk0P72QD+YBEjT1SHpVMpmxSIVSjt7ngiSib3sWifrWfX12b693fciDSCgGGm7nWoR5 +c7FIDD3CicswFnBoG/qYRSRRRcNQYlKIR5GYNVS0NSgEXV1SGdLWBbhiCGyUe79ARj/GHE2hFQ50 +k1u4Gm2AmUSpHBJhRfOSCbHSTLPACoiAC1miGsNmmgWRh6W1CiIgL8HCZ0sSUnmxLP+M4jT7VQaZ +g1uNhQ540WkGcQfTUGVkg1PrwmMXNDpxwBmslAxcYAEnwg4H4SdS0VuvcDEmNSoJwIpm1EyscCQG +cSgF8YtlYkVJFVbYFZk3aSsO1yt4Ui2TshZ4dh98YycKEIRw11n59HmpwlFi8AZ1mTEkZCFq0DqC +FRICYFkckW99RTC3AyC9M1Ml8zHUYJFx8k1jUzx3tJ19olUc4xvFMjv6uENsqDwoYZ6LUTERIgCT +wA778C8EYBJK0VuPwxSoYS3dlzoAQABb5zFhAwvm5RuNwkpHY1cM4Tm7o0f49i/5kyPrIBMKoAyK +mmh7sXesVA3v2AYNQTfJ9iz1JZL/MLEsueKX3XU8rNgAeHI1xECaNwMdkOQSrzABjzpp62hi+jBO +Q4SClXojeGKXVMgRDkOE1QSrdKoH3BYLA1CaGOUUwYBsreAR18AHrISFySINBMMTeblCfTZJUrUb +4ZEtYqOVKTgbCYEpsEINsRAvEMCU+8BBYTB0A5EcnIiYiNo+kBgeoEYMLBISAoOPBZt6pmkPdhaj +iQAu9BofqWBRAVQ61GZ9tpdh/BEQLMoSh1CR8RhHkTJZF8B1ZXAwjoaEbHAa8SkLf/RFCrIm/OZ1 +K7IMYdkl/giYuNOKrYiApOlRALRGpCRACVNwfAZKoSJ1OrtcKWV1dOoHO7ENDgEG/8RaFC3JECXD +ipZhDlqBHKFBEShbmP0Wc4dGLvBCLZLIeMhgDiOAKT+Hc+J2Q34VmWbAYfTHkRPRDLbRMVE6ZmYz +HwchoSupifTWLkeRY7tXqH21pU9VEMgDIqgxTyIADnJCnAyXGg7VbwvnXN4BDY92EAaUhOvFVHyn +N5kBgIXlHRGrDMDxHT6yr8+FW2w5EopoclsQhA5wslf4jbhTjd2njX7nZU3hFnGIhO9wJkQWI9jA +MPhxJPBgTQkoNoHQEnVJZAIXchbFS4KobC4oNj2BeaaEYiRQKmfodq5GeaZAUNQHBhUTZmjWDkSS +Do4BOGgjZ4OUMFtIVAkkai1pAP92FiCpETwCZDbskLb7OrcpNwO5IADuwH27RSDUJJhryz+ihAcE +8WhjoH86IU/Samp8IxnVYzLSOxJWdSKl5id/qFu501fr16swVzKloG5allZmZVP5hYhaxlaiZFIA +JGuBhE2PphnRxRUCUgntIHAcNy1AdksqV7XRSDt2VlDkglmwR3ZbRS5dxWxiWxU+9yBlUz+MmEYG +R5YCMpRq5xnu6G45Eg/QAEoiBj+YiyyFO3QxgXcCp2DStmriiFPOVRKZ0sXqeyAJkY3UhMOBZ34e +NVmLlhjORqedsgzUAJdcMq/KGKQjvH0e/J20EDui9ka6hnq7ByLiubuFuwWKtA//RIZZhMY8D/kg +ZIAr0rMiIUErYUZRdZBU+QYvAYwBBpAAS5RlhNh42BAJciwrw4M7qVF+rpgT39QlHvKQbjsqFAdz +3mB2NxRxMzCWs3TC0Wp/d7t6OnJ/1vsn5bc7+nN+RAEIxugkbFlT3YQ0tFtM5vRmheW4/OAK97Ip +QNvEs9ZOsOcXX/AGoMuyfAAWW9d9SHOKomi033jO3VS9iUANAAwt+lsmrDSYldCeeuV+6jy+iLA7 +7UZ2OLk8E9iVzeUTCtdyY2KV5gFMwlMJ8iFqX3JIQOaM9XQdEzVnkwp8okSc5uEu+JFuXgyAEwhb +GuEohYV+6Meb2FdIYQs6a8yy/2JzR7DlsGTgKuXhu452UhaxdBxBaWUhVX3kOv5ZiS9hgQgKPa7Y +x/xlbjkpjn2GPP7IGQf0aOByt5QCp0bRGAlEPnQM0DIbBzr9Q4CDAf5bCdPXI9FLD30d0FypKpHX +V2dEuAMigeoszzzz7NYlvxzQ8xWu3Uqw27TNt5TkC7gDxGaRB1KXm3WB1KLvsxTUQCyPFBKQmxfn/x +eItn2ya9Yp5j0rf2rP8QP6PjFZTRNhXiZR0bNxVhQN9LTZBxFueiIkQ0yWFwOw2hnrixLFZWTbXW +fjicQ0HhhdOEi6LydovyDCrzaNmAb/4Me76xDEdRmqq7HVhBCb7wCdZgCaNmZ/+szQmh2iOb1Mfe +Ri4Vt40/oidXDBofolCpBmiSDMliBhqtFteqgr1stK/Aw1xZJBc48UDwQD+XQg4i6SrM5BOy6HvI +d1lrOANolDyUN02TnYZsqQAM6Y6/psF5IGvNcR43zzzzfLHLtfaymlYL2Y3BAijAfmcNhQ4psSst4I +pbuQqLtZiHtDKqEdkgFLS01oFBrsOzYC29ItV0hy+8IR6yJjBx4xoQnFRCkL4U3EEBmxMhILFMgF +BXw/J3y1C83pV1ADonaLJ7zQ4YaYEK3CuRzvR8T0gBfZuxxh6+dmUdaAQCNP8jLyoE3SZg8GODE+ +u5Lpp+lcaIBbZnABtc3kQ9D/kCwARnTTxxUNxYFaWe0YLTk7lGEAmQBLAz2XMIYVIXwHS+RmD3LZ +bCh8/dO05SfBZ0eY3EdIXR5dC2DLjwYc2eA/l4JsiasQ4WMGB2AhqcXtgSC1zJAjpqY6Ep0gdx5Q +3Ksqda1G6Zxov+2IklmbbJtdckOn80IK54EU6JnUftnv30HMaTbQs9EQQaqXjpHV+V4kZkOE4TXG +cm0ypR4UvZYuhuyQ/3YMgfC+o3NSDKIeJkcGB1ARtuA6UAHwy2HOCsFuGFcNdhY+rXVVx0PeDkbe +YAiOdS1D5K3uiqk8WrbN0UMGltDTQZU1sxCmZ0E9qLUf5RnwWo0WnewnkPEQdEMiisMwF2E76Ffv +OsB39ajhOlwf1V+PGl/v9VENS6eQKtxZsYFU6ABGGRGbCb4pHqllb2JhEZbgTfAI4p3wQO4Bu2vg +9/vh94I/+IRP+PE39FiQ+Iq/+GPC+I7/+FEwFJA/+ZRfBDFw+Zif+Zq/+ZyPAiEAACH5BAAKAAAA +LN4BLQCCAG0Ah//+/0A/UEA+TVBPYPD6/0hGU1BIT0FBTjw5RvD2/5+doP/78L+9wPD08NDT38/J +z6+ssFtZYO/z/+Dl71NTXe/p79DT0MDDz7C/4ODj4PD48L/Q7y8wP7Czv6Cuz8DCwMnY8TUyPr/V +8B4bIGJkbMDR76+63+/s8L+7v9/b4Ht7hFBOWbCwsJCgv9/b35CdvzAuPeDq8M/O0NDj/09QT6Ck +r6ChoJCQj4uUqt/q/8DQ3+Dx/9/l8N/h78DL34qLkz9BUHBob6Cz0NDh8HR0e5umxX+AiYSFiuDo +75aWm+Ds/2BeZYyWsz9ATG9xfO/4/+/x8K+pr5CYoI2Qn4B/gxYVHXyIou/w78/T4F9harC7zyAf +Imppcy8rNs/IwNDb76CqwJCcsK+20LjG5bC938DIwJ+kv4GNpj9HYPDw77++z7C80KCrv5CXsN/g +4JCZr5CVoG+An7/AwNDX73+Qr6+0wNDa4N/p8K+50K/H4K+zz5+ov8DR4MDP8LDA36CeoGt4kiQi +KsDIz6Cwz//2/9/m/+/u/09ZcZ+hsODn8B8gL4CPsLC5wNDY39Dg77CvsL/C0KCosH+SsF9wkMDJ +0GlzjN/g36+uv8DN58/Q0K+338/P33B7mK2ws8/a75+fr3iCmltogRAPEL/Bz7/E34+iwE9gf9/f +75+gn9DY0M/U756gqLC2wA8NEM/Qz6Cor8/V36Cv0K+5z9Lf9aCnwFBdeZCfwL+3v7DA0NDX4E9R +WqCwwMDH30pOY7/I38/c4O/n7/Dv8K+lr5OPk1lje5CisJCXr+Dg36+4wM/Hz9Do/9/V37C4v/Dt +75+wz8/h8+/o4ODf4KC40MDEv2Bvg4+gv6Cfn7DAz7/I0NDQz0dQZ6+vz3Bve9DP07C3z7+/37+/ +0K+wr5+v0J+z0K+vwODo4J+fsK/A38/HwMDY4N/Y0KCjsL/Av6Cgnzc/V6+nsKCnv+Dw8MW/xcC/ +v+Df39DPz9/X4N/Q0N/o7+Dn/6C336C4z6C/36/Az6+/4L+3wAj/AAEIHEiwoMGDCBMqXMiwocOH +ECNKnEixosWLGDM+XKCxo8ePIEOKHEmypMmTKFOqXMkSgIaWBxfIRDiTY0WbKV82gClzpkGfBW32 +lPjy5EsLD5IqfeClqVMvS5V6KUOVatSrS50q/fBBUFJBglw9KPOhDFSz0z54mdb0atWqXD/sZOni +it27ePGm2cs3zd0KdhsIHjy4AuEGew8LTsA4ARQoDQg0PpFAIGIAgjVoFtyzp+ZpQlUWhUmQgGkA +pk1L+ILFB6VNdiYQwPwQxWiUmq+QFpiagAR8dmBBWqMHDC1aZuCZM8fGTkR2GdI0wHlyrsCX1CNK +bjCBQQ04RrgM/4iQpUMuHz60yFqDywcfPphK8NGB6cweM3EAAQKlp7gxSLMRlB1BKHwggwtIWGfS +XLc1pGAKH9xABQkUGDBAAQZYOAAQQBiBHhZDDAECCCWUMOIcJeqgBzWAcFKJFbX0BwYYYSghUGcJ +ocDABQ5MoGBJaRj040EZWNCBAhNWaAAQGRqwggEFBBBAhuM5EEMMd/AwRCEzdAnCDCCI0AYTkwAS +RxGmtOAHGXiA8QIpN3I04EAosMCADCmcEKBJQR5U2UAJpPBAFDcEQQENTSYK5aIYUmmhAZTEs8MO +SuSQwxAz5ADmiJj4gckcOpDhwRhi4FGqB2/EIGCOEHRwgQsVNP84Uhp7CkQIAIRMIEOhEVBwKA0r ++DrAACs8CWUBGCYLpZQD6KLLKqY9MWkOO8yw5aYg6FCCDhtggAEZY2AghhhFhDGKgHMCgEINrjqg +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 +kMDDv+Dd0KCPfvDt69DV0LKom4uIgM/FwMCvn1V2W+7w7kprUJ+qoLSrpbe2mR9OMDNXPeHTvc/E +vy9cQH54cJB/cLGeoL+wj6GSf83TzDxsUMDGwJWKhZB4gKWalO/j38DIwDpaQaqlmo+YkH+NgNPD +ls/Nz6eXhl9vYERnTJuUikBkP9Da0M3DmtC+kMCrr8O6uNvKp6upodXUr8i4k4yDd1tVTPDp3297 +cClKMJSGeJ+PkNbUu1l6YNC5v8DMsEp0VrrEuWiLcDplSEt/YIKUb0BfUDpPQNzh3L+vsC9wT2Be +Uq/Aj8/CsGSFaA9EI9XLueDPn3BnXzBDLylWOYZ7dsDBsFBPR0FbRN/gy5CBb5WmfsPJpsq1js/K +sIh7bx9gPxhGJw8/IMK5qpB9bz+AX3l0bJmzfWR5ZXaJdyRFLFZqVbWmhqu2lNC7j2BYT0pyTXCH +X6WmiVeAX2hmXJqmmFiEZlCPcIyolHJsZs/f0ODj0G5oYB8vIBk6IGqcgLDAj8zTuC9wUB9nQKa1 +i+/y8LCan/Dv8GBoT6/Dp8DLv/Dw36CNkF+gfzRLNgk0GhY3HnqYgXaTbzh0UhdAH3B4XHqVeH+g +f+DXyh9TL7jDmr/PwGqQasrSrpywnChmRIiWho+nb0yDYVt1T6q1p19bUpaYfODPoODT0J+yin+o +kIuDbNe/wCM8KZy0oGWFXxxZOFyWdO/f0Iuhe+/h0J/Fq0NbO2umheDo0ODMz+/w3+Diz2mWemJ0 +V5/PsJenhSJQL4O1nxAvHwwsFqCMiIaYdmB4T0dIN+/f3zljPavVv6/fwLzTwsvj0HSkhrjEpc/H +z7rQr29fYMCssODM0ND34DA/IODX31ZnTGBXT+/o0HaHZ+Df4Iugh0+Qb6jJsN/f4CdgP8Dw0C84 +H8+/wN/X33BfYFCQb8CvjzdwT7Dgzwj/ACsIHDgQxoEdGQIoWMiwocOHCgZIlKhAwEIBAhRi3Jgx +gcePCQgQAJkgQICPJlOm5IhxosuXExG8RECzpk0ETHLmtAlDYE+fMAwSUNCggAEASJMeTcqUqYGl +Sp8ihToVA4YHAkKKFEmy5EmVKlkKGNCgAc2yDSaaLXvzAdubCB48oCmXSU0MNIMGLRj0QAYFBZoK +Hkx4qlQAVA1jaHBy60iSJ72CDSB2AIICmOFe1mwTcwHNcufSxPtAr+mgNfwOCIw4ceHCBjAYfXr4 +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 +0IjFADzo7V7vNYkAUAztPQDFEInvbY2AAAA7 +------=_NextPart_000_01BC2B74.89D1CCC0-- + + diff --git a/Ch3/datasets/spam/spam/00342.0dab365fab3be83284b08ac5783335da b/Ch3/datasets/spam/spam/00342.0dab365fab3be83284b08ac5783335da new file mode 100644 index 000000000..bda162985 --- /dev/null +++ b/Ch3/datasets/spam/spam/00342.0dab365fab3be83284b08ac5783335da @@ -0,0 +1,65 @@ +From ilug-admin@linux.ie Tue Sep 17 11:28:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id BB90F16F03 + for ; Tue, 17 Sep 2002 11:28:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 17 Sep 2002 11:28:47 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8GNjBC14706 for + ; Tue, 17 Sep 2002 00:45:11 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id AAA20824; Tue, 17 Sep 2002 00:44:29 +0100 +X-Authentication-Warning: lugh.tuatha.org: Host root@localhost [127.0.0.1] + claimed to be lugh +Received: from server759.instantinternetempires.net + (server759.instantinternetempires.net [216.10.23.30]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id AAA20786 for ; Tue, + 17 Sep 2002 00:44:20 +0100 +Received: from nobody by server759.instantinternetempires.net with local + (Exim 3.36 #1) id 17r5X6-0003dr-00 for ilug@linux.ie; Mon, 16 Sep 2002 + 19:44:00 -0400 +To: ilug@linux.ie +From: keegancorless@earthlink.net +Content-Type: text/plain; charset=us-ascii +X-Header: Reply-To: keegancorless@earthlink.net +X-Loop-Prevention: 1 +Message-Id: +Date: Mon, 16 Sep 2002 19:44:00 -0400 +X-Antiabuse: This header was added to track abuse, please include it with + any abuse report +X-Antiabuse: Primary Hostname - server759.instantinternetempires.net +X-Antiabuse: Original Domain - linux.ie +X-Antiabuse: Originator/Caller UID/GID - [99 99] / [99 99] +X-Antiabuse: Sender Address Domain - server759.instantinternetempires.net +Subject: [ILUG] Here is the information you requested +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie + +Are you interested in making some extra money on the internet? +well have i got something for you. Last week i made $3500 ,I am offering you 5 yes 5 web sites that have already been made and are waiting for you to put up to make money with. There is also a few videos that are included that tell you Exactly what you have to do to be successful. I am going to also Offer you the rights to the web pages and to 5 Ebooks that you can sell.. These Ebooks aren't just any Ebooks these are books on how to make money on the internet. I am selling this package deal for a short time only at the low price of $39.77 my friends all say that i am Crazy.. The web site alone is worth over $1500 and its yours for only $39.77. Each eBook you will receive is worth around $350. my web page is. www.Home-Business-onthe-net.com . please come take a look. +if you have any questions please feel free to give me a email. +if you'd like a Free Ebook just give me a email and ill email you one ASAP. + +Sincerly +Your friend +Keegan + +Click on the link below to remove yourself +http://www.hotresponders.com/cgi-bin/varpro/r.cgi?id=keegan007&a=ilug@linux.ie + +AOL Users + Remove Me + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00343.37d895b3a54847548875136ad6b0192d b/Ch3/datasets/spam/spam/00343.37d895b3a54847548875136ad6b0192d new file mode 100644 index 000000000..8c0710d66 --- /dev/null +++ b/Ch3/datasets/spam/spam/00343.37d895b3a54847548875136ad6b0192d @@ -0,0 +1,65 @@ +From printerink176@hotmail.com Tue Sep 17 15:11:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id D983D16F03 + for ; Tue, 17 Sep 2002 15:11:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 17 Sep 2002 15:11:38 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8HBIHC07388 for + ; Tue, 17 Sep 2002 12:18:17 +0100 +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) by + webnote.net (8.9.3/8.9.3) with ESMTP id MAA26301 for ; + Tue, 17 Sep 2002 12:18:46 +0100 +Received: from jlmc.com.cn (unknown [211.141.0.133]) by smtp.easydns.com + (Postfix) with SMTP id 1DE832CE54 for ; Tue, + 17 Sep 2002 07:18:17 -0400 (EDT) +Received: from smtp0592.mail.yahoo.com([10.1.0.7]) by (AIMC 2.9.5.1) with + SMTP id zzzz433d871ef3; Tue, 17 Sep 2002 19:22:32 +0800 +Date: Tue, 17 Sep 2002 07:24:22 -0400 +From: "Anne Kahlon" +X-Priority: 3 +To: zzzz@netmeister.net +Cc: zzzz@spamassassin.taint.org, yyyy@netstream.net +Subject: zzzz,Hello +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +Message-Id: <20020917111817.1DE832CE54@smtp.easydns.com> + +Are you tired of spending a fortune on printer cartridges? + +Are you tired of making a mess trying to refill your old cartridges? + +Then here's your answer...... + +PRINTER CARTRIDGES FOR UP TO 50% OFF STORE PRICES + +The average person spends over $150 on new cartridges per year..... + +DON'T BE ONE OF THEM...EMAIL TODAY! + + +PLEASE DO NOT USE THE REPLY BUTTON + +CLICK HERE: printerink1@cbphost.net + +Just include your printer or cartridge type, and we will email you back +the price, its that simple. THIS WILL SAVE YOU LOTS OF MONEY!! Be +sure to ask about our referral discount for passing the savings on to a +friend. + + +If we don't save you $$, you have lost nothing! In addition, just +reply with your printer type, and be automatically entered in our +monthly $50 gift certificate drawing. + + + +We just wanted to save you some money, but to unsubscribe to this +mailing email here: printerink2@cbphost.net and just type 'REMOVE' in +the subject line + + diff --git a/Ch3/datasets/spam/spam/00344.17882edad13c2c761e6d8d99eef5a346 b/Ch3/datasets/spam/spam/00344.17882edad13c2c761e6d8d99eef5a346 new file mode 100644 index 000000000..13e15c159 --- /dev/null +++ b/Ch3/datasets/spam/spam/00344.17882edad13c2c761e6d8d99eef5a346 @@ -0,0 +1,183 @@ +From 102192086381143-17090200005-spamassassin.taint.org?zzzz@bounce.tilw.net Tue Sep 17 17:23:29 2002 +Return-Path: <102192086381143-17090200005-spamassassin.taint.org?zzzz@bounce.tilw.net> +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 938AE16F03 + for ; Tue, 17 Sep 2002 17:23:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 17 Sep 2002 17:23:27 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8HGF3C17155 for + ; Tue, 17 Sep 2002 17:15:03 +0100 +Received: from sonic1.tilw.net (sonic1.tilw.net [209.164.4.167]) by + webnote.net (8.9.3/8.9.3) with SMTP id RAA27422 for ; + Tue, 17 Sep 2002 17:15:31 +0100 +From: CopyYourDVD +Subject: Friend, Copy ANY DVD or Playstation Game with this software...... +To: zzzz@spamassassin.taint.org +X-Owner: atomicDOT;mp*qhwqrwhlqf!frp;8; +MIME-Version: 1.0 +X-RMD-Text: yes +Date: Tue, 17 Sep 2002 09:15:32 PST +X-Mailer: 2.0-b55-VC_IPA [Aug 20 2002, 12:25:33] +Message-Id: <17090200005$102192086381143$1159552220$0@sonic1.tilw.net> +Content-Type: multipart/alternative; boundary="------------103227703017104" + +--------------103227703017104 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +Friend,Now you can copy DVD's and Games +http://www.terra.es/personal9/iop1008/ + +BACKUP DVD VIDEO's WITH YOUR CD-R BURNER + +With 321 studio's software, you can now copy +any DVD and Playstation Game. Never buy another +backup DVD movie again. Just copy it! + +This is the first time this software is being made +available to the public. All the software you need +to burn your own DVD Video, is included in 321 Studio's +software package DVD Copy Plus! The movies will play +in a standard DVD player. With detailed, easy to follow, +step-by-step instructions, you can BURN your own DVD +Video using nothing more than your DVD-ROM +and CD-R drives. Purchase a copy! Click below. + +http://www.terra.es/personal9/iop1008/ + +Order today and receive! + +*Step by Step Interactive Instructions +*All Software Tools Included On CD +*No DVD Burner Required +*FREE Live Technical Support +*30 Day Risk Free Trial Available + +With DVD Copy Plus you can backup Your DVD Movies with +the same 74min or 80min CD-R's you've used in the past +to create audio CD's. Our software compresses the large +DVD files on your standard DVD to VCD, SVCD, and DivX +much the same way the popular MP3 format compresses audio. +Order today and start burning +http://www.terra.es/personal9/iop1008/ + +Thank You, + +CopymyDVD + + +http://inglesa.net/unsub.php?client=atomicDOT + + + +We take your privacy very seriously and it is our policy never to send +unwanted email messages. This message has been sent to zzzz@spamassassin.taint.org +because you originally joined one of our member sites or you signed up +with a party that has contracted with atomicDOT. Please +http://tilw.net/unsub.php?client=atomicDOT&msgid=17090200005 +to Unsubscribe (replying to this email WILL NOT unsubscribe you). + + + + + +TRCK:atomicDOT;mp*qhwqrwhlqf!frp;8; + + + +--------------103227703017104 +Content-Type: text/html; charset=us-ascii +Content-Transfer-Encoding: 7bit + +Backup your DVD's + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +

    With DVDCopyPlus + and PowerCDR5.0 you can copy and burn your

    +
      +
    • DVD Movies +
    • Playstation +
    • MP3s, AVIs and all + other multimedia Files +
    • Software, Music + CDs (perfect RAW data duplication) +
    • NEW! Burn to CD-R + or DVD-R
    • +
    +

    Protect your + investments by backing up your CD, DVD, MP3, Data and Game collections + with burned copies that really work! Separately, DVDCopyPlus and PowerCDR5.0 + are over $100 worth of software that you can purchase bundled right + now for just $49.99!

    +

    THAT'S 50% OFF!
    +
    MORE DETAILS ORDER NOW

    +
     
    + +

     

    +



    +

    We take your privacy very seriously and it is our policy never to send unwanted email messages. This message has been sent to zzzz@spamassassin.taint.org because you originally joined one of our member sites or you signed up with a party that has contracted with atomicDOT. Please Click Here to Unsubscribe (replying to this email WILL NOT unsubscribe you).



    + +<> +

    + + + +


    +TRCK:atomicDOT;mp*qhwqrwhlqf!frp;8; + + + +--------------103227703017104-- + + diff --git a/Ch3/datasets/spam/spam/00345.613b3c2aeac033eebb379c91b8ce9fba b/Ch3/datasets/spam/spam/00345.613b3c2aeac033eebb379c91b8ce9fba new file mode 100644 index 000000000..0fbde4122 --- /dev/null +++ b/Ch3/datasets/spam/spam/00345.613b3c2aeac033eebb379c91b8ce9fba @@ -0,0 +1,70 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Tue Sep 17 17:23:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 8F5AC16F03 + for ; Tue, 17 Sep 2002 17:23:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 17 Sep 2002 17:23:24 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8HG3BC16652 for + ; Tue, 17 Sep 2002 17:03:11 +0100 +Received: from TIPSMTP1.ADMANMAIL.COM (tipsmtp1.theadmanager.com + [66.111.219.130] (may be forged)) by webnote.net (8.9.3/8.9.3) with ESMTP + id RAA27365 for ; Tue, 17 Sep 2002 17:03:40 +0100 +Message-Id: <200209171603.RAA27365@webnote.net> +Received: from TIPUTIL2 (tiputil2.corp.tiprelease.com) by + TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id + <22.0000A4E8@TIPSMTP1.ADMANMAIL.COM>; Tue, 17 Sep 2002 10:32:47 -0500 +Date: Tue, 17 Sep 2002 10:01:59 -0500 +From: Great Offers +To: JM@NETNOTEINC.COM +Subject: Best Long Distance On the Net - 3.9 Cents With No Monthly Fees +X-Info: 134085 +X-Info2: SGO +MIME-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + + +mailv07a.gif + + + + + + + + + + + + + + + + + + + + +
    +T + +T +


    + +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
    + + diff --git a/Ch3/datasets/spam/spam/00346.1ae83883f566cdf6ff18958a33a215b3 b/Ch3/datasets/spam/spam/00346.1ae83883f566cdf6ff18958a33a215b3 new file mode 100644 index 000000000..faea38469 --- /dev/null +++ b/Ch3/datasets/spam/spam/00346.1ae83883f566cdf6ff18958a33a215b3 @@ -0,0 +1,137 @@ +From ilug-admin@linux.ie Tue Sep 17 17:23:23 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id B2FA716F03 + for ; Tue, 17 Sep 2002 17:23:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 17 Sep 2002 17:23:21 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8HEYmC13765 for + ; Tue, 17 Sep 2002 15:34:48 +0100 +Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id PAA13522; Tue, 17 Sep 2002 15:32:10 +0100 +Received: from rediffmail.com (host213-123-176-17.in-addr.btopenworld.com + [213.123.176.17]) by lugh.tuatha.org (8.9.3/8.9.3) with SMTP id PAA13481 + for ; Tue, 17 Sep 2002 15:31:44 +0100 +Message-Id: <200209171431.PAA13481@lugh.tuatha.org> +X-Authentication-Warning: lugh.tuatha.org: Host host213-123-176-17.in-addr.btopenworld.com + [213.123.176.17] claimed to be rediffmail.com +From: "COL. MICHAEL BUNDU" +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="ISO-8859-1" +Date: Tue, 17 Sep 2002 15:30:45 +0100 +Reply-To: "COL. MICHAEL BUNDU" +Subject: [ILUG] ASSISTANCE +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Mailman-Version: 1.1 +Precedence: bulk +List-Id: Irish Linux Users' Group +X-Beenthere: ilug@linux.ie +Content-Transfer-Encoding: 8bit + +FROM: COL. MICHAEL BUNDU. +DEMOCRATIC REPUBLIC OF CONGO. +Tel No: Your country Intl. access code +8821652098236 +email : mikebundu@rediffmail.com +Dear Sir/Madam + + +SEEKING YOUR IMMEDIATE ASSISTANCE. + +Please permit me to make your acquaintance in so informal a manner. This +is necessitated by my urgent need to reach a +dependable and trust worthy foreign partner. This request may seem strange +and unsolicited but I crave your indulgence +and pray that you view it seriously. My name is COL. MICHAEL BUNDU of the +Democratic Republic of Congo and one of +the close aides to the former President of the Democratic Republic of +Congo LAURENT KABILA of blessed memory, may +his soul rest in peace. + +Due to the military campaign of LAURENT KABILA to force out the rebels in +my country, I and some of my colleagues were +instructed by Late President Kabila to go abroad to purchase arms and +ammunition worth of Twenty Million, Five Hundred +Thousand United States Dollars only (US$20,500,000.00) to fight the rebel +group. We were then given this money privately +by the then President, LAURENT KABILA, without the knowledge of other +Cabinet Members. But when President Kabila +was killed in a bloody shoot-out by one of his bodyguards a day before we +were schedule to travel out of Congo, We +immediately decided to put the funds into a private security company here +in Congo for safe keeping. The security of the +said amount is presently being threatened here following the arrest and +seizure of properties of Col. Rasheidi Karesava +(One of the aides to Laurent Kabila) a tribesman, and some other Military +Personnel from our same tribe, by the new +President of the Democratic Republic of Congo, the son of late President +Laurent Kabila, Joseph Kabila. + +In view of this, we need a reliable and trustworthy foreign partner who +can assist us to move this money out of my country +as the beneficiary. +WE have sufficient ''CONTACTS'' here to move the fund under Diplomatic +Cover to a security company in Europe in your +name. This is to ensure that the Diplomatic Baggage is marked +''CONFIDENTIAL'' and it +will not pass through normal custom/airport screening and clearance. + +Our inability to move this money out of Congo all this while stems from +our lack of trust of our supposed good friends +(western countries) who suddenly became hostile to those of us who worked +with the late President Kabila, immediately +after his son took office. Though we have neither seen nor met each other, +the information We gathered from an associate +who has worked in your country has encouraged and convinced us that with +your sincere assistance, this transaction will +be properly handled with modesty and honesty to a huge success within two +weeks. The said money is a state fund and +therefore requires a total confidentiality. + +We would please need you to stand on our behalf as the beneficiary of this +fund in Europe. This is because we are under +restricted movement and watch and hence we want to be very careful in +order not to lose this fund which we have worked +so hard for. Thus, if you are willing to assist us to move this fund out +of Congo, you can contact me through my email +addresses, Tel/Fax nos. above with your telephone, fax number and personal +information to enable us discuss the +modalities and what will be your share (percentage) for assisting us. + +Please note that There are no RISKS involved in this Deal as everyone's +Security is Guaranteed if we follow the required +guidelines. I will hence furnish you with further details of this Deal as +soon as I am assured of your Sincere interest to assist +us. + +I must use this opportunity and medium to implore you to exercise the +utmost indulgence to keep this matter extraordinarily +confidential, Whatever your decision, while I await your prompt response. +Thank you and God Bless. +Best Regards + + +COL. MICHAEL BUNDU(RTD). m_bundu@rediffmail.com + +N\B. When you are calling my line, you dial your country Intl. access +code, then you dial directly, do not include my country +code i.e. (243). Just dial your country Intl. access code + 88216 +52098236. You can also contact me through the above +email addresses. + + + + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00347.0958e79c14164f0f902d863f41156c0b b/Ch3/datasets/spam/spam/00347.0958e79c14164f0f902d863f41156c0b new file mode 100644 index 000000000..c8760620e --- /dev/null +++ b/Ch3/datasets/spam/spam/00347.0958e79c14164f0f902d863f41156c0b @@ -0,0 +1,84 @@ +From bralbertini21@netscape.net Tue Sep 17 18:42:57 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 9E2F916F03 + for ; Tue, 17 Sep 2002 18:42:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 17 Sep 2002 18:42:56 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8HHSfC20442 for + ; Tue, 17 Sep 2002 18:28:41 +0100 +Received: from imo-r03.mx.aol.com (imo-r03.mx.aol.com [152.163.225.99]) by + webnote.net (8.9.3/8.9.3) with ESMTP id SAA27770 for ; + Tue, 17 Sep 2002 18:29:10 +0100 +From: bralbertini21@netscape.net +Received: from bralbertini21@netscape.net by imo-r03.mx.aol.com + (mail_out_v34.10.) id i.b3.44ad297 (22681) for ; + Tue, 17 Sep 2002 13:27:00 -0400 (EDT) +Received: from netscape.net (mow-d05.webmail.aol.com [205.188.138.69]) by + air-in04.mx.aol.com (v88.20) with ESMTP id MAILININ42-0917132700; + Tue, 17 Sep 2002 13:27:00 -0400 +Date: Tue, 17 Sep 2002 13:28:38 -0400 +To: crew_4@hotmail.com +Subject: Don't get caught by rising interest rates. +Message-Id: <00666955.6C60A11B.25CA56C5@netscape.net> +X-Mailer: Atlas Mailer 2.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit + +Opportunity is knocking. Why? + +Because mortgage rates are rising. + +As a National Lender, not a broker, we can +guarantee you the lowest possible rate on your +home loan. + +Rates may well never be this low again. This is +your chance to secure a better future. You could +literally save enough money to buy that new car +you've been wanting or to take that special +vacation. Why pay more than you have to pay? + +We can guarantee you the best rate and the best +deal possible for you. But only if you act now. + +This is a free service. No fees of any kind. + +You can easily determine if we can help you in +just a few short minutes. We only provide +information in terms so simple that anyone can +understand them. We promise that you won't need +an attorney to see the savings. + +We offer both first and second home loans and we +will be happy to show you why your current loan +is the best for you. 0r why you should replace +it. + +Once again, there's no risk for you. None at all. + +Take two minutes and use the link(s) below that +works for you. Let us show you how to get more +for yourself and your family. Don't let +opportunity pass you by. Take action now. + +Click_Here + +http://209.202.221.16/director.asp?id=1&target=http://211.167.74.101/mortg/ + +Sincerely, + +Chalres M. Gillette +MortCorp, LLC + +olhfilghxvuyfkfqbviqgacyenuuufpyswymlajxucqhpojagplujpmovuiaphwlqkkstgipemliwuugqptjukjklbjlgxqmuogtiwhhdlhjhkbucvbyqvgfp + +__________________________________________________________________ +The NEW Netscape 7.0 browser is now available. Upgrade now! http://channels.netscape.com/ns/browsers/download.jsp + +Get your own FREE, personal Netscape Mail account today at http://webmail.netscape.com/ + + diff --git a/Ch3/datasets/spam/spam/00348.1948d1e6b724e8abf4b8f0fc024ac627 b/Ch3/datasets/spam/spam/00348.1948d1e6b724e8abf4b8f0fc024ac627 new file mode 100644 index 000000000..74af4f276 --- /dev/null +++ b/Ch3/datasets/spam/spam/00348.1948d1e6b724e8abf4b8f0fc024ac627 @@ -0,0 +1,49 @@ +From Subscriber_Services78056@att.net Tue Sep 17 23:31:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id DAA8916F03 + for ; Tue, 17 Sep 2002 23:31:03 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 17 Sep 2002 23:31:03 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8HHlOC20988 for + ; Tue, 17 Sep 2002 18:47:24 +0100 +Received: from 211.248.147.90 ([211.252.253.189]) by webnote.net + (8.9.3/8.9.3) with SMTP id SAA27815 for ; + Tue, 17 Sep 2002 18:47:47 +0100 +Message-Id: <200209171747.SAA27815@webnote.net> +Received: from rly-yk04.mx.aol.com ([99.100.131.137]) by + rly-xw01.mx.aol.com with NNFMP; Sep, 17 2002 12:32:25 PM -0100 +Received: from unknown (74.38.244.167) by asy100.as122.sol.superonline.com + with NNFMP; Sep, 17 2002 11:39:32 AM +1200 +Received: from 34.57.158.148 ([34.57.158.148]) by rly-xr02.mx.aol.com with + local; Sep, 17 2002 10:46:38 AM -0000 +From: "WALL STREET BULLETIN..47331" +To: zzzz@spamassassin.taint.org +Cc: +Subject: New Stock Pick: BBAN - Last Pick UP 309%.......................................... gsg +Sender: "WALL STREET BULLETIN..47331" +MIME-Version: 1.0 +Date: Tue, 17 Sep 2002 12:47:46 -0500 +X-Mailer: Internet Mail Service (5.5.2650.21) +X-Priority: 1 +Content-Type: text/html; charset="iso-8859-1" + + + + + +

    Volume 8, Issue 35 - Sept. 2002

    +

    CLICK HERE

    +

    +

     

    +

     

    +

    I no longer wish to receive your newsletter click here

    + + + +urfrdemubblkunmdbyh + + diff --git a/Ch3/datasets/spam/spam/00349.dd7982f40576ff4897c18efc813e38bf b/Ch3/datasets/spam/spam/00349.dd7982f40576ff4897c18efc813e38bf new file mode 100644 index 000000000..c2ffa2fe7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00349.dd7982f40576ff4897c18efc813e38bf @@ -0,0 +1,55 @@ +From MandyTSmathers@yahoo.co.uk Tue Sep 17 23:31:06 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 79E5416F03 + for ; Tue, 17 Sep 2002 23:31:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 17 Sep 2002 23:31:05 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8HJEjC23479 for + ; Tue, 17 Sep 2002 20:14:45 +0100 +Received: from cdm.imicams.ac.cn ([168.160.170.8]) by webnote.net + (8.9.3/8.9.3) with ESMTP id UAA27982 for ; + Tue, 17 Sep 2002 20:15:10 +0100 +Received: from QRJATYDI (200-171-85-202.dsl.telesp.net.br + [200.171.85.202]) by cdm.imicams.ac.cn (8.9.3/8.9.3) with SMTP id DAA19510; + Wed, 18 Sep 2002 03:12:44 -0700 (CDT) +Message-Id: <200209181012.DAA19510@cdm.imicams.ac.cn> +From: "Mandy" +To: +Subject: Membership Status Notification +X-Priority: 1 +X-Msmail-Priority: High +X-Mailer: Mail for AOL V. 2.3 +Date: Tue, 17 Sep 2002 11:59:30 +-0500 +MIME-Version: 1.0 +Content-Type: text/plain; charset="ISO-8859-2" + +Dear Free Member, + +You were gifted a free membership in cash +wave generator. Our records indicate your +membership is about to expire and you have +not locked in your cash wave income by +registering for your free position. +If you do not register, you will forfeit +all commissions from spillover. + +To confirm your interest in locking in your +position, and for a chance to win $500, use the link +mailto:workinathome@btamail.net.cn?subject=Send_CW_Info_Please + +You will receive an email with instructions +and where to go to lock in your position and +secure your commissions from spillover. + +Cash Wave Generator Administration +1-800-242-0363, ext. 1993 + +To be excluded from future notices: +mailto:guaranteed4u@btamail.net.cn?subject=exclude + + + diff --git a/Ch3/datasets/spam/spam/00350.c2658f17a328efdf045b38ab38db472f b/Ch3/datasets/spam/spam/00350.c2658f17a328efdf045b38ab38db472f new file mode 100644 index 000000000..aa5650f72 --- /dev/null +++ b/Ch3/datasets/spam/spam/00350.c2658f17a328efdf045b38ab38db472f @@ -0,0 +1,46 @@ +From fsnf0r3s@utt.ro Tue Sep 17 23:31:07 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 2204816F03 + for ; Tue, 17 Sep 2002 23:31:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 17 Sep 2002 23:31:07 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8HJU0C23928 for + ; Tue, 17 Sep 2002 20:30:01 +0100 +Received: from w082.z067104062.sjc-ca.dsl.cnc.net + (w082.z067104062.sjc-ca.dsl.cnc.net [67.104.62.82]) by webnote.net + (8.9.3/8.9.3) with SMTP id UAA28017; Tue, 17 Sep 2002 20:30:28 +0100 +Received: from anjin.xpress.se (customer189-73.iplannetworks.net + [200.61.189.73]) by w082.z067104062.sjc-ca.dsl.cnc.net; Tue, + 17 Sep 2002 10:11:35 -0700 +Message-Id: <000071251d3a$00003d4c$00003631@mailhost.trip.to> +To: +From: "Arlinda Borges" +Subject: you don't satisfy me FGTPRIL +Date: Tue, 17 Sep 2002 10:28:14 -1600 +MIME-Version: 1.0 +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + A man endowed with a 7 - 8" hammer is simply
    + better equipped than a man with a 5 - 6" hammer.
    +
    Would you rather have
    more than enough to get the job done or fall = +very short. It's totally up
    to you. Our Methods are guaranteed to incre= +ase your size by 1 - 3"
    Enter here and see how + + + + + + diff --git a/Ch3/datasets/spam/spam/00351.fd1b8a6cd42e81125fb38c2660cd9317 b/Ch3/datasets/spam/spam/00351.fd1b8a6cd42e81125fb38c2660cd9317 new file mode 100644 index 000000000..59a290cec --- /dev/null +++ b/Ch3/datasets/spam/spam/00351.fd1b8a6cd42e81125fb38c2660cd9317 @@ -0,0 +1,63 @@ +From asanchez@uibk.ac.at Tue Sep 17 23:28:51 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 3F42C16F03 + for ; Tue, 17 Sep 2002 23:28:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 17 Sep 2002 23:28:51 +0100 (IST) +Received: from firewall.omv-tag.at ([193.80.119.139]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g8HKHhC25394 for + ; Tue, 17 Sep 2002 21:17:44 +0100 +Message-Id: <200209172017.g8HKHhC25394@dogma.slashnull.org> +Received: from FIREWALL [193.80.119.139] (HELO localhost) by + firewall.omv-tag.at (AltaVista Mail V2.0J/2.0J BL25J listener) id + 0000_003f_3d87_7f5d_8bda; Tue, 17 Sep 2002 21:15:41 +0200 +To: +Received: from unknown by firewall (smtpxd); id XA00251 +From: "mary" +Subject: fwd: NORTON SYSTEMWORKS CLEARANCE SALE! +Date: Tue, 17 Sep 2002 14:50:08 -0500 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + untitled + + + + +

    ATTENTION: T= +his is a MUST for ALL Computer Users!!!
    +

    +
    *NEW-Special Package Deal!*
    +

    +
    Norton SystemWorks 2002 S= +oftware Suite -Professional Edition- + +Includes Six - Yes 6! - Feature-Packed Utilities +ALL For 1 Special LOW Price!6 Feature-Packed Utilities...1 Great Price! +A $300+ Combined Retail Value! + +FREE Shipping!

    + +


    +
    Click Here Now! + + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00352.19a8ba03f566612e0b9e124609d9dbd0 b/Ch3/datasets/spam/spam/00352.19a8ba03f566612e0b9e124609d9dbd0 new file mode 100644 index 000000000..eafb03c98 --- /dev/null +++ b/Ch3/datasets/spam/spam/00352.19a8ba03f566612e0b9e124609d9dbd0 @@ -0,0 +1,321 @@ +From gef@insiq.us Wed Sep 18 00:15:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 768E616F03 + for ; Wed, 18 Sep 2002 00:15:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 18 Sep 2002 00:15:23 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g8HNA3C30692 for ; Wed, 18 Sep 2002 00:10:03 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Tue, 17 Sep 2002 19:11:22 -0400 +Subject: The Best Just Got Better +To: +Date: Tue, 17 Sep 2002 19:11:21 -0400 +From: "IQ - GE Financial" +Message-Id: <1e11b01c25e9f$897bfb10$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJeiy7MaLLuwyKMSwukcYRYNeX/GA== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 17 Sep 2002 23:11:22.0125 (UTC) FILETIME=[899B1BD0:01C25E9F] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_000D_01C25E69.A7BD8E30" + +This is a multi-part message in MIME format. + +------=_NextPart_000_000D_01C25E69.A7BD8E30 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + Any way you slice it...GE Lifetime Protector is a cut above! + Underwritten by General Electric Capital Assurance Company and First +Colony Life Insurance Company + GE Lifetime Protector universal life insurance cooks the competition +with competitive premiums + +Male, Age 55, Best, $500,000 Face Amount, Annual Premiums +GE Lifetime ProtectorSM Lifetime +Premium1 +$6,252 CSV=$1 +@ Age 1002 +$5,356 CSV=Face Amt +@ Age 1002 +$5,841 +Product J $6,365 $7,699 $7,970 +Product I $6,531 $6,809 $7,327 +Product L $6,348 $6,250 $6,630 +Product S $6,538 $5,709 $6,550 +Product U $8,950 $5,827 $6,185 +Product T $7,581 $6,729 $7,372 +Product M $7,637 $6,711 $6,916 +Product G $7,044 $5,529 $6,207 +Source: Industry Market research conducted and compiled by GE Financial, +August 2002. + +GE Lifetime ProtectorSM is subject to the terms, issue limitations and +conditions of Policy Form Nos. UL GE02 et al for GE Capital Assurance +and ULFCL02 et al for First Colony Life, which include exclusion periods +for death by suicide. GE Lifetime ProtectorSM is not available in all +states. + +1Premium that guarantees coverage for the life of the insured according +to the companies' provisions. +Companies refer to premium by different names and the conditions for the +guarantee will vary from company to company. For GE Lifetime +ProtectorSM, this refers to the designated premium requirement: subject +to the policy provisions, policy remains in force as long as the sum of +the premiums paid, less the reduction in policy value for all partial +withdrawals, equals or exceeds the cumulative total of the designated +monthly premiums from the policy date to the end of the current policy +month. + +2Premiums calculated assuming each company's current crediting rate and +charges. Each column represents the premium required annually to age 100 +to achieve target cash surrender value stated in the column heading. + + + Underwritten by +General Electric Capital Assurance Company +First Colony Life Insurance Company + +Lynchburg, VA +Members of the GE Financial family of companies + + Click Here for GE Lifetime Protector(sm) Information and Quotes from a +BRAMCO Agency! +We don't want anyone to receive our mailings who does not wish to +receive them. This is a professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: http://www.insuranceiq.com/optout + + +Legal Notice + +------=_NextPart_000_000D_01C25E69.A7BD8E30 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +The Best Just Got Better + + + +=20 + + =20 + + + =20 + + +
    + + =20 + + +
    3D'Any
    + 3D'Underwritten
    + 3D'GE
    +   + + =20 + + +
    + + =20 + + + =20 + + + + + + =20 + + + + + + =20 + + + + + + =20 + + + + + + =20 + + + + + + =20 + + + + + + =20 + + + + + + =20 + + + + + + =20 + + + + + +
    + Male, Age 55, Best, $500,000 Face Amount, Annual = +Premiums
    GE Lifetime ProtectorSMLifetime
    + Premium1

    + $6,252
    =20 +
    CSV=3D$1
    + @ Age 1002

    + $5,356
    CSV=3DFace Amt
    + @ Age 1002

    + $5,841
    =20 +
    Product = +J$6,365$7,699$7,970
    Product I$6,531$6,809$7,327
    Product L$6,348$6,250$6,630
    Product S$6,538$5,709$6,550
    Product U$8,950$5,827$6,185
    Product T$7,581$6,729$7,372
    Product M$7,637$6,711$6,916
    Product G$7,044$5,529$6,207
    +
    + Source: Industry Market = +research conducted and compiled by GE Financial, August 2002. = + + + =20 + + + =20 + + + =20 + + + + =20 + + +

    + GE Lifetime = +ProtectorSM=20 + is subject to the terms, issue limitations and conditions of = +Policy=20 + Form Nos. UL GE02 et al for GE Capital Assurance and ULFCL02 = +et al=20 + for First Colony Life, which include exclusion periods for = +death by=20 + suicide. GE Lifetime ProtectorSM is not available = +in all=20 + states. +

    1Premium that guarantees coverage for the life = +of the insured according to the companies' provisions.
    + Companies refer to premium by different names and the = +conditions=20 + for the guarantee will vary from company to company. For = +GE Lifetime=20 + ProtectorSM, this refers to the designated = +premium requirement:=20 + subject to the policy provisions, policy remains in force = +as long=20 + as the sum of the premiums paid, less the reduction in = +policy value=20 + for all partial withdrawals, equals or exceeds the = +cumulative total=20 + of the designated monthly premiums from the policy date to = +the end=20 + of the current policy month.

    +

    2Premiums calculated=20 + assuming each company's current crediting rate and = +charges. Each=20 + column represents the premium required annually to age 100 = +to achieve=20 + target cash surrender value stated in the column = +heading.

    +
    =20 +

    Underwritten by
    + General Electric Capital Assurance Company
    + First Colony Life Insurance Company

    +

    Lynchburg, = +VA
    + Members of the GE Financial family of = +companies

    +
    3D"Click
    +
    +

    We don't = +want anyone to receive our mailings who does not=20 + wish to receive them. This is a professional communication=20 + sent to insurance professionals. To be removed from this mailing=20 + list, DO NOT REPLY to this message. Instead, go here: =20 + http://www.insuranceiq.com/optout

    +
    +

    + Legal Notice =20 +
    + + + + +------=_NextPart_000_000D_01C25E69.A7BD8E30-- + + diff --git a/Ch3/datasets/spam/spam/00353.464ef65be6651440e15675faeb15a7ca b/Ch3/datasets/spam/spam/00353.464ef65be6651440e15675faeb15a7ca new file mode 100644 index 000000000..fac3d6d65 --- /dev/null +++ b/Ch3/datasets/spam/spam/00353.464ef65be6651440e15675faeb15a7ca @@ -0,0 +1,51 @@ +From ufjWild_BangBus@yahoo.com Wed Sep 18 00:36:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id C723216F03 + for ; Wed, 18 Sep 2002 00:36:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 18 Sep 2002 00:36:42 +0100 (IST) +Received: from 195.205.114.4 (optjas.intergal.com.pl [195.205.114.4]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g8HNXVC31276 for + ; Wed, 18 Sep 2002 00:33:32 +0100 +Message-Id: <200209172333.g8HNXVC31276@dogma.slashnull.org> +Received: from [174.223.185.169] by rly-xl05.mx.aol.com with NNFMP; + Sep, 17 2002 4:26:01 PM -0100 +Received: from [159.218.252.32] by n7.groups.yahoo.com with SMTP; + Sep, 17 2002 3:31:06 PM -0000 +Received: from [130.91.58.120] by mta6.snfc21.pbi.net with SMTP; + Sep, 17 2002 2:15:55 PM +0300 +From: bayf_Wild_Bus +To: Undisclosed.Recipients@dogma.slashnull.org +Cc: +Subject: Get on the Bus.. gbvzzzz +Sender: bayf_Wild_Bus +MIME-Version: 1.0 +Date: Tue, 17 Sep 2002 16:34:19 -0700 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +Content-Type: text/html; charset="iso-8859-1" + + + + + +
    + +Click here to see the Bang Bus

    It is wild!!!!!! +



    +



    +



    +



    +



    +



    +



    +



    +



    +



    +

    + +tepyycemkckiflbsvpcyi + + diff --git a/Ch3/datasets/spam/spam/00354.dca4b8984863a76ffd01a33888498288 b/Ch3/datasets/spam/spam/00354.dca4b8984863a76ffd01a33888498288 new file mode 100644 index 000000000..651235caf --- /dev/null +++ b/Ch3/datasets/spam/spam/00354.dca4b8984863a76ffd01a33888498288 @@ -0,0 +1,139 @@ +From dyporn@post.com Wed Sep 18 11:54:17 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id D984216F03 + for ; Wed, 18 Sep 2002 11:54:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 18 Sep 2002 11:54:15 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8I3JHC09789 for + ; Wed, 18 Sep 2002 04:19:17 +0100 +Received: from 62.110.233.194 (200-204-121-213.dsl.telesp.net.br + [200.204.121.213]) by webnote.net (8.9.3/8.9.3) with SMTP id EAA29180 for + ; Wed, 18 Sep 2002 04:19:44 +0100 +Message-Id: <200209180319.EAA29180@webnote.net> +Received: from [118.189.136.119] by smtp-server1.cfl.rr.com with NNFMP; + Sep, 17 2002 7:42:10 PM -0300 +Received: from mailout2-eri1.midsouth.rr.com ([110.220.177.171]) by + rly-xr01.mx.aol.com with NNFMP; Sep, 17 2002 7:00:20 PM +1200 +Received: from [110.188.46.152] by mta05bw.bigpond.com with QMQP; + Sep, 17 2002 5:46:27 PM +0600 +From: Adult Club Services +To: zzzz@spamassassin.taint.org +Cc: +Subject: Re: zzzz@spamassassin.taint.org +Sender: Adult Club Services +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Tue, 17 Sep 2002 20:09:29 -0700 +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +X-Priority: 1 + +New Account For: zzzz@spamassassin.taint.org +################################################## +# # +# Free XXX Links .org is a # +# non-profit organization # +# # +# Offering the best in # +# adult entertainment for free. # +# # +################################################## + +>>>>> INSTANT ACCESS TO ALL SITES NOW +>>>>> Your User Name And Password: +>>>>> User Name: zzzz@spamassassin.taint.org +>>>>> Password: 818932 + +Test it out NOW! Adults Farm +http://rd.yahoo.com/*http://80.71.71.88/farm/?aid=818932 +Girls and Animals Getting Freaky....FREE Lifetime Membership!! + +6 of the Best Adult Sites on the Internet for FREE! +--------------------------------------- +NEWS 09/05/02 +With just over 3.9 Million Members that signed up for FREE, Last month there were 894,457 New +Members. Are you one of them yet??? +--------------------------------------- +Our Membership FAQ + +Q. Why are you offering free access to 6 adult membership sites for +free? +A. I have advertisers that pay me for ad space so you don't have to pay +for membership. + +Q. Is it true my membership is for life? +A. Absolutely you'll never have to pay a cent the advertisers do. + +Q. Can I give my account to my friends and family? +A. Yes, as long they are over the age of 18. + +Q. Do I have to sign up for all 6 membership sites? +A. No just one to get access to all of them. + +Q. How do I get started? +A. Click on one of the following links below to become a member. + +- These are multi million dollar operations with policies and rules. +- Fill in the required info and they won't charge you for the Free pass! +- If you don't believe us, just read their terms and conditions. + +--------------------------- + +# 6. > XXX Adults Farm +http://rd.yahoo.com/*http://80.71.71.88/farm/?aid=818932 +Girls and Animals Getting Freaky....FREE Lifetime Membership!! + +# 5. > Sexy Celebes Porn +http://rd.yahoo.com/*http://80.71.71.88/celebst/?aid=818932 +Thousands Of XXX Celebes doing it...FREE Lifetime Membership!! + +# 4. > Play House Porn +http://rd.yahoo.com/*http://80.71.71.88/play/?aid=818932 +Live Feeds From 60 Sites And Web Cams...FREE Lifetime Membership!! + +# 3. > Asian Sex Fantasies +http://rd.yahoo.com/*http://80.71.71.88/asian/?aid=818932 +Japanese Schoolgirls, Live Sex Shows ...FREE Lifetime Membership!! + +# 2. > Lesbian Lace +http://rd.yahoo.com/*http://80.71.71.88/lesbian/?aid=818932 +Girls and Girls Getting Freaky! ...FREE Lifetime Membership!! + +# 1. > New! just added today: Mage Porn Site +http://rd.yahoo.com/*http://80.71.71.88/mega/?aid=818932 +950,00 Pics, 90,000 Movies, Live Sex Shows... FREE Lifetime Membership!! +-------------------------- + +Jennifer Simpson, Miami, FL +Your FREE lifetime membership has entertained my boyffriend and I for +the last two years! Your Adult Sites are the best on the net! + +Joe Morgan Manhattan, NY +Your live sex shows and live sex cams are unbelievable. The best part +about your porn sites, is that they're absolutely FREE! + +-------------------------- + + + + + + + + + + + + +Removal Instructions: +You have received this advertisement because you have opted in to receive free adult internet +offers and specials through our affiliated websites. If you do not wish to receive further emails +or have received the email in error you may opt-out of our database here +http://rd.yahoo.com/*http://80.71.71.88/optout/ . Please allow 24 hours for removal. + +mdnfhmobawljhlqtotlhpikemcywuc + + diff --git a/Ch3/datasets/spam/spam/00355.e10c2eba9316a09e612e6675ce339d5e b/Ch3/datasets/spam/spam/00355.e10c2eba9316a09e612e6675ce339d5e new file mode 100644 index 000000000..db5bc56c6 --- /dev/null +++ b/Ch3/datasets/spam/spam/00355.e10c2eba9316a09e612e6675ce339d5e @@ -0,0 +1,66 @@ +From free_hgh304@eudoramail.com Wed Sep 18 11:54:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id EA78A16F03 + for ; Wed, 18 Sep 2002 11:54:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 18 Sep 2002 11:54:18 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8I7KTC19071 for + ; Wed, 18 Sep 2002 08:20:30 +0100 +Received: from [63.111.238.7] ([63.111.238.7]) by webnote.net + (8.9.3/8.9.3) with SMTP id IAA29748 for ; + Wed, 18 Sep 2002 08:20:59 +0100 +Message-Id: <200209180720.IAA29748@webnote.net> +Received: from hdc1 by [63.111.238.7] via smtpd (for [193.120.211.219]) + with SMTP; 18 Sep 2002 07:47:28 UT +Received: from firewall.singal.net ([192.12.30.2]) by hdc1.singal.net with + SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2650.21) id + S5T3NNVS; Wed, 18 Sep 2002 02:18:43 -0500 +Received: from cm61-18-209-26.hkcable.com.hk ([61.18.209.26]) by + firewall.singal.net via smtpd (for hdc1 [192.12.30.75]) with SMTP; + 18 Sep 2002 07:46:07 UT +Date: Wed, 18 Sep 2002 15:18:43 +0800 +From: "Rosario Joshi" +X-Priority: 3 +To: zzzz@spamassassin.taint.org +Subject: Introducing HGH: The Most Powerful Anti-Obesity Drug Ever +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Type: text/html; charset=us-ascii + + +
    Hello, jm@spamassassin.taint.org

    Human Growth Hormone Therapy

    +

    Lose weight while building lean muscle mass
    and reversing the ravages of aging all at once.

    +

    +As seen on NBC, CBS, and CNN, and even Oprah! The health
    +discovery that actually reverses aging while burning fat,
    +without dieting or exercise! This proven discovery has even
    +been reported on by the New England Journal of Medicine.
    +Forget aging and dieting forever! And it's Guaranteed!

    +
    + +
    +

    Lose Weight
    Build Muscle Tone
    Reverse Aging
    +Increased Libido
    + Duration Of Penile Erection

    +
    +

    Healthier Bones
    +Improved Memory
    Improved skin
    New Hair Growth
    Wrinkle Disappearance

    +


    + Visit Our Web Site and Learn The Facts : Click Here

    +
    + If the above link is not operational, Please Click + Here again.
    +
    +
    + You are receiving this email as a subscriber
    + to the Opt-In America Mailing List.
    + To remove yourself from all related maillists,
    + just Click + Here

    + + + diff --git a/Ch3/datasets/spam/spam/00356.ea7eb32330fa6bf65270023c0d99e2c5 b/Ch3/datasets/spam/spam/00356.ea7eb32330fa6bf65270023c0d99e2c5 new file mode 100644 index 000000000..4184d3a7a --- /dev/null +++ b/Ch3/datasets/spam/spam/00356.ea7eb32330fa6bf65270023c0d99e2c5 @@ -0,0 +1,98 @@ +From blueeyez35@hotmail.com Wed Sep 18 11:54:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 4BC0016F03 + for ; Wed, 18 Sep 2002 11:54:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 18 Sep 2002 11:54:21 +0100 (IST) +Received: from ctb-mesg2.saix.net (ctb-mesg2.saix.net [196.25.240.74]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8I7h1C19873 for + ; Wed, 18 Sep 2002 08:43:01 +0100 +Received: from dmtcsrv.DMTC.CO.ZA (ndf54-01-p114.gt.saix.net + [155.239.64.114]) by ctb-mesg2.saix.net (8.12.5/8.12.5) with ESMTP id + g8I7dO6p014739; Wed, 18 Sep 2002 09:39:30 +0200 (SAT) +Received: from bourseparis.com (196-28-56-244.prtc.net [196.28.56.244]) by + dmtcsrv.DMTC.CO.ZA with SMTP (Microsoft Exchange Internet Mail Service + Version 5.5.2448.0) id RTFDAV74; Wed, 18 Sep 2002 09:40:10 +0200 +Message-Id: <00004c402588$0000520c$00007c7c@agpr-usa.com> +To: , +Cc: +From: blueeyez35@hotmail.com +Subject: Re: Super CHARGE your desktop or laptop today! 17639 +Date: Wed, 18 Sep 2002 03:39:16 -1600 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +Reply-To: blueeyez35@hotmail.com + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + Take Control of Your Computer With This Top-of-the-Line Software! + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + Symantec SystemWorks 2002 + + -=Professional Software Suite=- + + +This Special Package Includes Six - Yes 6! - Feature-Packed Utilities + +ALL for 1 Special LOW Price of Only $29.99! + +This Software Will: + + - Protect your computer from unwanted and hazardous viruses + - Help secure your private & valuable information + - Allow you to transfer files and send e-mails safely + - Backup your ALL your data quick and easily + - Improve your PC's performance w/superior integral diagnostics! + - ***** You'll NEVER have to take your PC to the repair shop AGAIN! ***** + + That's SIX, yes, -6- Feature-Packed Utilities @ 1 Great Price!!! + + A $300+ Combined Retail Value YOURS Only $29.99! (Limited Time Offer) + < Price Includes FREE Shipping! > + + Why SO Cheap you ask? You are buying ONLINE WHOLESALE, + Direct from the Warehouse TO YOU! + + ~~~ AND ~~~ + + FOR A LIMITED TIME BUY 2 OF ANY SOFTWARE & GET 1 FREE!!!! + + + Don't fall prey to destructive viruses or programs! + Protect your computer and your valuable information and... + + + ...CLICK HERE TO ORDER NOW! -> http://61.151.247.39/erik/ + + OR cut & paste the above link ^^^^^^^^^^^^^^^^ in your browser's URL bar. + + + FOR MORE QUESTIONS, OR TO ORDER CALL US TOLL-FREE ANYTIME! + + 1 - 8 0 0 - 8 6 1 - 1 4 8 1 + + + + +We are strongly against sending unsolicited emails to those who do not wish to receive +our special mailings. You have opted-in to one or more of our affiliate sites requesting +to be notified of any special offers we may run from time to time. We also have attained +the services of an independent 3rd party to overlook list management and removal +services. The list CODE in which you are registered is marked at the bottom of this email. +If you do not wish to receive further mailings, + +Please click here -> http://61.151.247.39/erik/remove.asp to be removed from the list. + +Please accept our apologies if you have been sent this email in error. We honor all removal requests. + + +IAES (International Association of Email Security) Approved List. Serial # 9e45tYu2-ssI3USA + + diff --git a/Ch3/datasets/spam/spam/00357.b523d4209d633d6fdf86b93bc19e3aa2 b/Ch3/datasets/spam/spam/00357.b523d4209d633d6fdf86b93bc19e3aa2 new file mode 100644 index 000000000..a85fbcdd3 --- /dev/null +++ b/Ch3/datasets/spam/spam/00357.b523d4209d633d6fdf86b93bc19e3aa2 @@ -0,0 +1,145 @@ +From FreeSoftware-5510u00@yahoo.com Wed Sep 18 11:54:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 5310A16F03 + for ; Wed, 18 Sep 2002 11:54:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 18 Sep 2002 11:54:24 +0100 (IST) +Received: from yahoo.com (dsl-212-23-14-40.zen.co.uk [212.23.14.40]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g8I8BdC21122 for + ; Wed, 18 Sep 2002 09:11:39 +0100 +Reply-To: "Free Publishing Software" +Message-Id: <026e50a38a0e$2433e8b0$7ab34dc4@fltirg> +From: "Free Publishing Software" +To: +Subject: FREE WebBook Publishing Software - Download NOW! +Date: Wed, 18 Sep 2002 18:04:28 -1000 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal +Content-Type: text/html; charset="iso-8859-1" + + + +Digital Publishing Tools - Free Software Alert! + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Publish Like a Professional with Digital Publishing Tools + +
    +Easily Create Professional: + +
      +
    • eBooks
    • +
    • eBrochures
    • +
    • eCatalogs
    • +
    • Resumes
    • +
    • Newsletters
    • +
    • Presentations
    • +
    • Magazines
    • +
    • Photo Albums
    • +
    • Invitations
    • +
    • Much, much more
    • +
    +
    +
    +Save MONEY! - Save Trees +
    +
    + +Save on Printing, Postage and Advertising Costs +
    +
    + +DIGITAL PUBLISHING TOOLS +
    +
    +DOWNLOAD NEW FREE Version NOW!
    +
    +
    +*Limited Time Offer +
    +Choose from these
    +Display Styles:
    + +
      +
    • 3D Page Turn
    • +
    • Slide Show
    • +
    • Sweep/Wipe
    • +
    +
    +Embed hyperlinks and Link to anywhere Online, + +such as your Website, Order Page or Contact Form. +
    +
    +Distribute via Floppy, CD-ROM, E-Mail or Online. +
    +
    + +Take your Marketing to the Next Level! +
    + +For More Info, Samples or a FREE Download, click the appropriate link to the right!   +Server demand is extremely high for this limited time Free Software offer.   +Please try these links periodically if a site seems slow or unreachable. + + + +WEBSITE 1
    +WEBSITE 2
    +WEBSITE 3
    +
    +
    +
    + +If you wish to be removed from our mailing list, please cick the Unsubscribe button + +
    +   + +
    +Copyright © 2002 - Affiliate ID #1269
    +*FREE Version is FULLY FUNCTIONAL with NO EXPIRATION and has a 4 page (2 page spread) limit.
    +
    + +
    + + + + diff --git a/Ch3/datasets/spam/spam/00358.2cf55d91739f3530d1f4bc8bc9bc0b12 b/Ch3/datasets/spam/spam/00358.2cf55d91739f3530d1f4bc8bc9bc0b12 new file mode 100644 index 000000000..da5989fc0 --- /dev/null +++ b/Ch3/datasets/spam/spam/00358.2cf55d91739f3530d1f4bc8bc9bc0b12 @@ -0,0 +1,100 @@ +From social-admin@linux.ie Wed Sep 18 11:54:28 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 61B5B16F03 + for ; Wed, 18 Sep 2002 11:54:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 18 Sep 2002 11:54:27 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8IAVuC25677 for + ; Wed, 18 Sep 2002 11:31:56 +0100 +Received: from lugh.tuatha.org (list@localhost [127.0.0.1]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id LAA15726; Wed, 18 Sep 2002 + 11:32:05 +0100 +Received: from hotmail.com (host90-107.pool10716.interbusiness.it + [80.16.107.90] (may be forged)) by lugh.tuatha.org (8.9.3/8.9.3) with SMTP + id LAA15694 for ; Wed, 18 Sep 2002 11:31:17 +0100 +From: elane_ling@hotmail.com +X-Authentication-Warning: lugh.tuatha.org: Host host90-107.pool10716.interbusiness.it + [80.16.107.90] (may be forged) claimed to be hotmail.com +Received: from unknown (HELO q4.quickslow.com) (156.247.148.149) by + da001d2020.loxi.pianstvu.net with SMTP; 18 Sep 0102 10:25:31 -0000 +Reply-To: +Message-Id: <000e07e11d4d$5435c7c0$1dc53aa4@mtubfx> +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: eGroups Message Poster +Importance: Normal +Subject: [ILUG-Social] Poker for money againts real players +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Beenthere: social@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group social events +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 18 Sep 0102 04:15:01 +0600 +Date: Wed, 18 Sep 0102 04:15:01 +0600 +Content-Transfer-Encoding: 8bit + +Get your favorite Poker action at http://www.multiplayerpoker.net + +Play against real people from around the world for real money or just +for fun. Access one of the busiest poker rooms online. We've dealt +over 8 million hands! Experience the best poker software available +today featuring world class graphics, true random shuffling algorithms, +and 24x7 customer service. We've got a great selection of poker games +for you to play such as: + +Hold'em, Omaha +Omaha Hi/Lo +7 Card Stud +7 Card Stud Hi/Lo +5 Card Stud +Poker tournaments + +Sign up today and start playing with new & old friends...download our free +software now at http://www.MultiPlayerPoker.net + +Current Promotion: + · $50 Deposit Bonus! - 100% bonus! + · Daily High Hand - $250 Daily. + · Progressive Bad Beat Jackpot - $2,000.00 minimum with $100.00 added +daily. + · Tournaments - Multiplayer shootouts. + + + + + + + + + + + + + + + + +wish not to received any further e-mail from us please click +http://www.centralremovalservice.com/cgi-bin/poker-remove.cgi +(I3-SS3) +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00359.4ab70de20a198b736ed01940c9745384 b/Ch3/datasets/spam/spam/00359.4ab70de20a198b736ed01940c9745384 new file mode 100644 index 000000000..bc7ecb8b1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00359.4ab70de20a198b736ed01940c9745384 @@ -0,0 +1,80 @@ +From social-admin@linux.ie Wed Sep 18 11:50:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 714A516F16 + for ; Wed, 18 Sep 2002 11:50:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 18 Sep 2002 11:50:26 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8I0C0C02158 for + ; Wed, 18 Sep 2002 01:12:00 +0100 +Received: from lugh.tuatha.org (list@localhost [127.0.0.1]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id BAA32179; Wed, 18 Sep 2002 + 01:12:09 +0100 +Received: from relay.dub-t3-1.nwcgroup.com + (postfix@relay.dub-t3-1.nwcgroup.com [195.129.80.16]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id BAA32146 for ; Wed, + 18 Sep 2002 01:12:01 +0100 +Received: from glb03 (unknown [81.18.33.83]) by + relay.dub-t3-1.nwcgroup.com (Postfix) with SMTP id 9F3D770044 for + ; Wed, 18 Sep 2002 01:11:58 +0100 (IST) +From: "Femi Daniel" +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Message-Id: <20020918001158.9F3D770044@relay.dub-t3-1.nwcgroup.com> +Subject: [ILUG-Social] HELLO +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Beenthere: social@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group social events +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 18 Sep 2002 01:11:52 +Date: Wed, 18 Sep 2002 01:11:52 + +OFFICE OF:EGNR. FEMI DANIEL +FEDERAL MINISTRY OF WORKS AND HOUSING +FEDERAL SECRETARIAT OFFICE COMPLEX +IKOYI-LAGOS. + +ATTN:, + +First, I must solicit your strictest confidence in this transaction, this is by virtue of it’s nature as being utterly confidential and top secret as you were introduced to me in confidence through the Nigeria Chamber of Commerce and Industries. + +We are top officials from the Federal Ministry of Works and Housing,(FMW&H), Federal Ministry of Finance and the Presidency, making up the Contract Review Panel(CRP) set up by the Federal Government of Nigeria to review contracts awarded by the past military administration. + +In the course of our work on the CRP, we discovered this fund which resulted from grossly over - invoiced contracts which were executed for the FMW&H during the last administration.The companies that executed the contracts have been duly paid and the contracts commissioned leaving the sum of US$21.4 Million floating in the escrow account of the Central Bank of Nigeria ready for payment. + +I have therefore been mandated as a matter of trust by my colleagues in the panel to look for an overseas partner to whom we could transfer the sum of US21.4 legally subcontracting the entitlement to your company.This is bearing in mind that our civil service code of conduct forbids us from owning foreign companies or operating foreign accounts while in government service, hence the need for an overseas partner. + +We have agreed that the funds will be shared thus after it has been paid into your account. +(1) 30% of the money will go to you for acting as the beneficiary of the fund. +(2) 10% has been set aside as an abstract projection for reimbursement to both parties for incidental expences that may be incurred in the course of the transaction. +(3) 60% to us the government officials (with which we intend to commence an importation business in conjunction with you) + +All logistics are in place and all modalities worked out for the smooth conclusion of the transaction within ten to fourteen days of commencement after receipt of the following information; your full names, company's name, address,details & activities, telephone & fax numbers.These information will enable us make the applications and lodge claims to the concerned ministries & agencies in favour of your company and it is pertinent to state here that this transaction is entirely based on trust as the solar bank draft or certified cheque drawable in any of the Central Bank of Nigeria correspondent bankers around the world is going to be made in your name. + +Please acknowledge the reciept of this letter using the above e-mail or the Alternative: femi1855@aol.com to reply me. + +Yours faithfully, + +Egnr. Femi Daniel. + +NB:Bank Account Details not necessary as preferred mode of payment is by draft or cheque. + +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00360.3c1e6c84cb93d024c1f1aa85cd56ac9c b/Ch3/datasets/spam/spam/00360.3c1e6c84cb93d024c1f1aa85cd56ac9c new file mode 100644 index 000000000..e55312e6d --- /dev/null +++ b/Ch3/datasets/spam/spam/00360.3c1e6c84cb93d024c1f1aa85cd56ac9c @@ -0,0 +1,108 @@ +From manaqxh@abptrade.com.br Wed Sep 18 11:51:21 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id AD61316F03 + for ; Wed, 18 Sep 2002 11:51:20 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 18 Sep 2002 11:51:20 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8I5n5C15514 for + ; Wed, 18 Sep 2002 06:49:05 +0100 +Received: from phasefive.de (port-213-148-155-173.reverse.qsc.de + [213.148.155.173]) by webnote.net (8.9.3/8.9.3) with ESMTP id GAA29520; + Wed, 18 Sep 2002 06:49:34 +0100 +Received: from smtp.matrix.com.br ([195.158.151.76]) by phasefive.de + (8.11.6/8.11.6) with SMTP id g8I5npm71763; Wed, 18 Sep 2002 07:49:52 +0200 + (CEST) (envelope-from manaqxh@abptrade.com.br) +Date: Wed, 18 Sep 2002 07:49:52 +0200 (CEST) +Message-Id: <200209180549.g8I5npm71763@phasefive.de> +Reply-To: +From: "Anna" +To: "Inbox" <0927@sprint.com> +Subject: English Well for you? +Content-Type: text/plain; charset="us-ascii";format=flowed +Content-Transfer-Encoding: 7bit + + +Hallo, + + +I found yours Email ID in Directoric. +I have been from Russian and for a man like you have I been lookink. + + +http://www.easygoingcompanion.com/?oc=6120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +.If you no want to hear from me again just reply and i no bother you again + +** + + diff --git a/Ch3/datasets/spam/spam/00361.e91ac048b0ede961d3f51009eee1c620 b/Ch3/datasets/spam/spam/00361.e91ac048b0ede961d3f51009eee1c620 new file mode 100644 index 000000000..fc27471ea --- /dev/null +++ b/Ch3/datasets/spam/spam/00361.e91ac048b0ede961d3f51009eee1c620 @@ -0,0 +1,80 @@ +From ilug-admin@linux.ie Wed Sep 18 11:52:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 3005E16F03 + for ; Wed, 18 Sep 2002 11:52:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 18 Sep 2002 11:52:02 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8I0E0C02429 for + ; Wed, 18 Sep 2002 01:14:00 +0100 +Received: from lugh.tuatha.org (list@localhost [127.0.0.1]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id BAA32252; Wed, 18 Sep 2002 + 01:13:16 +0100 +Received: from relay.dub-t3-1.nwcgroup.com + (postfix@relay.dub-t3-1.nwcgroup.com [195.129.80.16]) by lugh.tuatha.org + (8.9.3/8.9.3) with ESMTP id BAA32159 for ; Wed, + 18 Sep 2002 01:12:03 +0100 +Received: from glb03 (unknown [81.18.33.83]) by + relay.dub-t3-1.nwcgroup.com (Postfix) with SMTP id C45A67004B for + ; Wed, 18 Sep 2002 01:12:00 +0100 (IST) +From: "Femi Daniel" +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Message-Id: <20020918001200.C45A67004B@relay.dub-t3-1.nwcgroup.com> +Subject: [ILUG] HELLO +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 18 Sep 2002 01:11:54 +Date: Wed, 18 Sep 2002 01:11:54 + +OFFICE OF:EGNR. FEMI DANIEL +FEDERAL MINISTRY OF WORKS AND HOUSING +FEDERAL SECRETARIAT OFFICE COMPLEX +IKOYI-LAGOS. + +ATTN:, + +First, I must solicit your strictest confidence in this transaction, this is by virtue of it’s nature as being utterly confidential and top secret as you were introduced to me in confidence through the Nigeria Chamber of Commerce and Industries. + +We are top officials from the Federal Ministry of Works and Housing,(FMW&H), Federal Ministry of Finance and the Presidency, making up the Contract Review Panel(CRP) set up by the Federal Government of Nigeria to review contracts awarded by the past military administration. + +In the course of our work on the CRP, we discovered this fund which resulted from grossly over - invoiced contracts which were executed for the FMW&H during the last administration.The companies that executed the contracts have been duly paid and the contracts commissioned leaving the sum of US$21.4 Million floating in the escrow account of the Central Bank of Nigeria ready for payment. + +I have therefore been mandated as a matter of trust by my colleagues in the panel to look for an overseas partner to whom we could transfer the sum of US21.4 legally subcontracting the entitlement to your company.This is bearing in mind that our civil service code of conduct forbids us from owning foreign companies or operating foreign accounts while in government service, hence the need for an overseas partner. + +We have agreed that the funds will be shared thus after it has been paid into your account. +(1) 30% of the money will go to you for acting as the beneficiary of the fund. +(2) 10% has been set aside as an abstract projection for reimbursement to both parties for incidental expences that may be incurred in the course of the transaction. +(3) 60% to us the government officials (with which we intend to commence an importation business in conjunction with you) + +All logistics are in place and all modalities worked out for the smooth conclusion of the transaction within ten to fourteen days of commencement after receipt of the following information; your full names, company's name, address,details & activities, telephone & fax numbers.These information will enable us make the applications and lodge claims to the concerned ministries & agencies in favour of your company and it is pertinent to state here that this transaction is entirely based on trust as the solar bank draft or certified cheque drawable in any of the Central Bank of Nigeria correspondent bankers around the world is going to be made in your name. + +Please acknowledge the reciept of this letter using the above e-mail or the Alternative: femi1855@aol.com to reply me. + +Yours faithfully, + +Egnr. Femi Daniel. + +NB:Bank Account Details not necessary as preferred mode of payment is by draft or cheque. + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00362.be7a346be8746732d4dc27bc549d7441 b/Ch3/datasets/spam/spam/00362.be7a346be8746732d4dc27bc549d7441 new file mode 100644 index 000000000..bfe75ad94 --- /dev/null +++ b/Ch3/datasets/spam/spam/00362.be7a346be8746732d4dc27bc549d7441 @@ -0,0 +1,147 @@ +From ilug-admin@linux.ie Wed Sep 18 11:52:05 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 3AB4716F03 + for ; Wed, 18 Sep 2002 11:52:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 18 Sep 2002 11:52:04 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8I0sdC04463 for + ; Wed, 18 Sep 2002 01:54:39 +0100 +Received: from lugh.tuatha.org (list@localhost [127.0.0.1]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id BAA00930; Wed, 18 Sep 2002 + 01:54:12 +0100 +Received: from mail.nigol.net.ng (mail.nigol.net.ng [212.96.29.9]) by + lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id BAA00904 for ; + Wed, 18 Sep 2002 01:53:41 +0100 +From: werkenbijdeotto1@37.com +Received: from boston ([216.252.176.119]) by mail.nigol.net.ng + (Post.Office MTA v3.1.2 release (PO205-101c) ID# 0-44314U100L100S0) with + SMTP id HUI544 for ; Wed, 18 Sep 2002 01:34:20 +0100 +To: +Message-Id: <37517.067028703705600.878710@localhost> +MIME-Version: 1.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit +Subject: [ILUG] AWARD NOTIFICATION +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 18 Sep 2002 01:36:31 +0100 +Date: Wed, 18 Sep 2002 01:36:31 +0100 + +WERKEN BIJ DE LOTTO, +41132, NL-1007 DB AMSTERDAM, +THE NETHERLANDS. + + +FROM: THE DESK OF THE DIRECTOR PROMOTIONS, +INTERNATIONAL PROMOTIONS/PRIZE AWARD DEPARTMENT, +REF: WBL/67-B773524441 + +ATTN: + + AWARD NOTIFICATION; FINAL NOTICE + +We are pleased to inform you of the announcement +today, 17 th SEPT. 2002, of +winners of the WERKEN BIJ DE LOTTO/ INTERNATIONAL +PROGRAMS held on 5TH JulY 2002. + +You / your company, attached to ticket number +013-2316-2002-477, with serial +number A025-09 drew the lucky numbers +37-13-34-85-56-42, and consequently won in +category C. + +You have therefore been approved for a lump sum pay +out of US$1,500,000.00 in +cash credited to file REF NO. REF: +WBL/67-B773524441. This is from total prize +money of US$22,500,000.00 shared among the fifteen +international winners in the +category C. All participants were selected through a +computer ballot system +drawn from 30,000 names from Australia, New Zealand, +America, Asia, Europe and +North America as part our +International Promotions Program, which is conducted +annually. + +CONGRATULATIONS! + +Your fund is now deposited with a Finance and +Security House and insured in +your name. Due to the mix up of some numbers and +names, we ask that you keep this +award strictly from public notice until your claim +has been processed and your +money remitted to your account. This is part of our +security protocol to avoid +double claiming or unscrupulous acts by participants +of this program. + +We hope with a part of you prize, you will +participate in our end of year high +stakes US$1.3 billion International lotto. + +To begin your claim, please contact your claims +officer immediately: + +JANSEN DAVIS +FOREIGN SERVICE MANAGER, +EUROLITE BV, +TEL: 31 205241510 +FAX: 31 205241590 +EMAIL:eurolitebv1@theoffice.net + +For due processing and remittance of your prize +money to a designated account +of your choice. Remember, you must contact your +claims officer not later than +SEPTEMBER 27 th, 2002. After this date, all funds +will be returned as unclaimed. + +NOTE: In order to avoid unnecessary delays and +complications, please remember +to quote your reference number in every one of your +correspondences with your +officer. Furthermore, should there be any change of +your address, do inform your +claims officer as soon as possible. + +Congratulations again from all our staff and thank +you for being part of our +promotions program. + + +Sincerely, + +THE DIRECTOR PROMOTIONS, +WERKEN BIJ DE LOTTO. +www.werken-bij-delotto.net + +N.B. Any breach of confidentiality on the part of +the winners will result to +disqualification. Please do not reply this mail. + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00363.e6935b8f87c5984a5c6f6656afa1afb4 b/Ch3/datasets/spam/spam/00363.e6935b8f87c5984a5c6f6656afa1afb4 new file mode 100644 index 000000000..644db8166 --- /dev/null +++ b/Ch3/datasets/spam/spam/00363.e6935b8f87c5984a5c6f6656afa1afb4 @@ -0,0 +1,478 @@ +From jatoy73@bigpond.com Wed Sep 18 17:44:15 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id AFE7B16F03 + for ; Wed, 18 Sep 2002 17:44:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 18 Sep 2002 17:44:10 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8IGEtC06533 for + ; Wed, 18 Sep 2002 17:14:55 +0100 +Received: from 218.5.185.14 (200-206-140-244.dsl.telesp.net.br + [200.206.140.244]) by webnote.net (8.9.3/8.9.3) with SMTP id RAA31243 for + ; Wed, 18 Sep 2002 17:14:38 +0100 +Message-Id: <200209181614.RAA31243@webnote.net> +Received: from mx.rootsystems.net ([60.127.54.24]) by + smtp-server6.tampabay.rr.com with SMTP; Sep, 19 2002 2:02:18 AM -0700 +Received: from smtp-server6.tampabay.rr.com ([12.232.159.86]) by + mailout2-eri1.midsouth.rr.com with asmtp; Sep, 19 2002 12:52:14 AM +0700 +Received: from 177.139.227.166 ([177.139.227.166]) by sparc.isl.net with + QMQP; Sep, 19 2002 12:12:08 AM +0300 +From: "hdwr.Rui Santos" +To: Undisclosed.Recipients@webnote.net +Cc: +Subject: Last time you spent $25 did u make $100,000,s? Well this time you will. wju +Sender: "hdwr.Rui Santos" +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Thu, 19 Sep 2002 02:14:46 +1000 +X-Mailer: eGroups Message Poster + +Hello + +You may have seen this business before and +ignored it. I know I did - many times! However, +please take a few moments to read this letter. +I was amazed when the profit potential of this +business finally sunk in... and it works! + +With easy-to-use e-mail tools and opt-in e-mail, +success in this business is now fast, easy and +well within the capabilities of ordinary people +who know little about internet marketing. And the +earnings potential is truly staggering! + +I'll make you a promise. READ THIS E-MAIL TO THE END! - +follow what it says to the letter - and you will not +worry whether a RECESSION is coming or not, who is +President, or whether you keep your current job or not. +Yes, I know what you are thinking. I never responded +to one of these before either. One day though, +something just said: "You throw away $25.00 going to +a movie for 2 hours with your wife. What the heck." +Believe me, no matter where you believe those "feelings" +come from, I thank every day that I had that feeling. + +I cannot imagine where I would be or what I would be +doing had I not. Read on. It's true. Every word of it. +It is legal. I checked. Simply because you are buying +and selling something of value. + +AS SEEN ON NATIONAL TV: + +Making over half a million dollars every 4 to 5 +months from your home. + +THANKS TO THE COMPUTER AGE AND THE INTERNET! +================================================== +BE AN INTERNET MILLIONAIRE LIKE OTHERS WITHIN A YEAR!!! + +Before you say "Bull", please read the following. +This is the letter you have been hearing about on the +news lately. Due to the popularity of this letter on +the internet, a national weekly news program recently +devoted an entire show to the investigation of this +program described below, to see if it really can make +people money. The show also investigated whether or +not the program was legal. + +Their findings proved once and for all that there are +"absolutely NO laws prohibiting the participation in +the program and if people can 'follow the simple +instructions' they are bound to make some mega bucks +with only $25 out of pocket cost". + +DUE TO THE RECENT INCREASE OF POPULARITY & RESPECT +THIS PROGRAM HAS ATTAINED, IT IS CURRENTLY WORKING +BETTER THAN EVER. + +This is what one had to say: "Thanks to this +profitable opportunity. I was approached many times +before but each time I passed on it. I am so glad +I finally joined just to see what one could expect +in return for the minimal effort and money required. +To my astonishment, I received a total $610,470.00 +in 21 weeks, with money still coming in." + +Pam Hedland, Fort Lee, New Jersey. +================================================== +Another said: "This program has been around for a +long time but I never believed in it. But one day +when I received this again in the mail I decided +to gamble my $25 on it. I followed the simple +instructions and walaa ..... 3 weeks later the +money started to come in. First month I only made +$240.00 but the next 2 months after that I made +a total of $290,000.00. So far, in the past 8 months +by re-entering the program, I have made over +$710,000.00 and I am playing it again. The key to +success in this program is to follow the simple +steps and NOT change anything." + +More testimonials later but first, ======= + +==== PRINT THIS NOW FOR YOUR FUTURE REFERENCE ==== +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ + +If you would like to make at least $500,000 every +4 to 5 months easily and comfortably, please read the +following...THEN READ IT AGAIN and AGAIN!!! + +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ + +FOLLOW THE SIMPLE INSTRUCTION BELOW AND +YOUR FINANCIAL DREAMS WILL COME TRUE, GUARANTEED! + +INSTRUCTIONS: + +=====Order all 5 reports shown on the list below ===== + +For each report, send $5 CASH, THE NAME & NUMBER OF THE +REPORT YOU ARE ORDERING and YOUR E-MAIL ADDRESS to the +person whose name appears ON THAT LIST next to the report. +MAKE SURE YOUR RETURN ADDRESS IS ON YOUR ENVELOPE TOP +LEFT CORNER in case of any mail problems. + +===WHEN YOU PLACE YOUR ORDER, MAKE SURE === +===YOU ORDER EACH OF THE 5 REPORTS! === +You will need all 5 reports so that you can save +them on your computer and resell them. +YOUR TOTAL COST $5 X 5 = $25.00. + +Within a few days you will receive, via e-mail, each +of the 5 reports from these 5 different individuals. +Save them on your computer so they will be accessible +for you to send to the 1,000's of people who will +order them from you. Also make a floppy of these +reports and keep it on your desk in case something +happens to your computer. + +IMPORTANT - DO NOT alter the names of the people who +are listed next to each report, or their sequence on +the list, in any way other than what is instructed +below in steps 1 through 6 or you will lose out +on the majority of your profits. Once you +understand the way this works, you will also +see how it will not work if you change it. + +Remember, this method has been tested, and if you +alter it, it will NOT work!!! People have tried +to put their friends'/relatives' names on all five +thinking they could get all the money. But it does +not work this way. Believe us, some have tried to +be greedy and then nothing happened. So Do Not +try to change anything other than what is instructed. +Because if you do, it will not work for you. +Remember, honesty reaps the reward!!! + +This IS a legitimate BUSINESS. You are offering a +product for sale and getting paid for it. Treat it +as such and you will be VERY profitable in a short +period of time. + +1.. After you have ordered all 5 reports, take this +advertisement and REMOVE the name & address of the +person in REPORT # 5. This person has made it through +the cycle and is no doubt counting their fortune. + +2.. Move the name & address in REPORT # 4 down TO REPORT # 5. + +3.. Move the name & address in REPORT # 3 down TO REPORT # 4. + +4.. Move the name & address in REPORT # 2 down TO REPORT # 3. + +5.. Move the name & address in REPORT # 1 down TO REPORT # 2 + +6.... Insert YOUR name & address in the REPORT # 1 Position. + +PLEASE MAKE SURE you copy every name & address +ACCURATELY! This is critical to YOUR success. + +================================================== +**** Take this entire letter, with the modified +list of names, and save it on your computer. +DO NOT MAKE ANY OTHER CHANGES. + +Save this on a disk as well just in case you lose +any data. To assist you with marketing your business +on the internet, the 5 reports you purchase will +provide you with invaluable marketing information +which includes how to send bulk e-mails legally, +where to find thousands of free classified ads and +much more. There are 2 primary methods to get this +venture going: + +METHOD # 1: BY SENDING BULK E-MAIL LEGALLY +================================================== + +Let's say that you decide to start small, just to see +how it goes, and we will assume you and those involved +send out only 5,000 e-mails each. Let's also assume +that the mailing receives only a 0.2% (2/10 of 1%) +response (the response could be much better but let's +just say it is only 0.2%). Also many people will send +out hundreds of thousands of e-mails instead of only +5,000 each. + +Continuing with this example, you send out only +5,000 e-mails. With a 0.2% response, that is only +10 orders for report # 1. Those 10 people responded +by sending out 5,000 e-mails each for a total of +50,000. Out of those 50,000 e-mails only 0.2% +responded with orders. That's 100 people who +responded and ordered Report # 2. + +Those 100 people mail out 5,000 e-mails each for +a total of 500,000 e-mails. The 0.2% response to +that is 1000 orders for Report # 3. + +Those 1000 people send 5,000 e-mails each for a +total of 5 million e-mails sent out. The 0.2% +response is 10,000 orders for Report # 4. + +Those 10,000 people send out 5,000 e-mails each +for a total of 50,000,000 (50 million) e-mails. +The 0.2% response to that is 100,000 orders for +Report # 5. + +THAT'S 100,000 ORDERS TIMES $5 EACH = $500,000.00 +(half a million dollars). + +Your total income in this example is: 1..... $50 ++ 2..... $500 + 3.....$5,000 + 4..... $50,000 ++ 5.... $500,000 .... Grand Total=$555,550.00 + +NUMBERS DO NOT LIE. GET A PENCIL & PAPER AND +FIGURE OUT THE WORST POSSIBLE RESPONSES AND NO +MATTER HOW YOU CALCULATE IT, YOU WILL STILL +MAKE A LOT OF MONEY! +================================================== + +REMEMBER FRIEND, THIS IS ASSUMING ONLY 10 PEOPLE +ORDERING OUT OF 5,000 YOU MAILED TO. Dare to think +for a moment what would happen if everyone or half +or even one 4th of those people mailed 100,000 +e-mails each or more? + +There are over 150 million people on the internet +worldwide and counting, with thousands more coming +online every day. Believe me, many people will do +just that, and more! + +METHOD # 2: BY PLACING FREE ADS ON THE INTERNET +================================================== + +Advertising on the net is very, very inexpensive and +there are hundreds of FREE places to advertise. +Placing a lot of free ads on the internet will +easily get a larger response. We strongly suggest +you start with Method # 1 and add METHOD # 2 as you +go along. For every $5 you receive, all you must +do is e-mail them the report they ordered. That's it. +Always provide same day service on all orders. + +This will guarantee that the e-mail they send out, +with your name and address on it, will be prompt +because they cannot advertise until they receive +the report. + +===========AVAILABLE REPORTS ==================== +The reason for the "cash" is not because this is +illegal or somehow "wrong". It is simply about time. +Time for checks or credit cards to be cleared or +approved, etc. Concealing it is simply so no one +can SEE there is money in the envelope and steal +it before it gets to you. + +ORDER EACH REPORT BY ITS NUMBER & NAME ONLY. +Notes: Always send $5 cash (U.S. CURRENCY) for +each report. Checks NOT accepted. Make sure the +cash is concealed by wrapping it in at least +2 sheets of paper. On one of those sheets of +paper, write the NUMBER & the NAME of the report +you are ordering, YOUR E-MAIL ADDRESS and your +name and postal address. + +PLACE YOUR ORDER FOR THESE REPORTS NOW : +================================================== + +REPORT # 1: "The Insider's Guide To Advertising +for Free On The Net" + +Order Report #: 1 from +Rui Sousa Santos +P.O. Box 132 +Taylors Lakes VIC 3038 +Australia + ______________________________________________________ + +REPORT # 2: "The Insider's Guide To Sending Bulk +Email On The Net" + +Order Report # 2 from: +Richard Moulton +P.O. Box 82 +Hot Springs,MT 59845 +USA + ___________________________________________________ + +REPORT # 3: "Secret To Multilevel Marketing On The Net" + +Order Report # 3 from: +J.siden +krondikesvägen 54 A +83147 Östersund +Sweden + _____________________________________________________ + +REPORT # 4: "How To Become A Millionaire Using +MLM & The Net" + +Order Report # 4 from: +Francis Kidd +P.O. Box 209 +Homestead,PA 15120 +USA + __________________________________________________ + +REPORT # 5: "How To Send Out One Million Emails +For Free" + +Order Report # 5 From: +M.J. Lee +P.O. Box 19 +52 Victoria Drive +London SW19 6BD +United Kingdom +______________________________________________________ +$$$$$$$$$ YOUR SUCCESS GUIDELINES $$$$$$$$$$$ + +Follow these guidelines to guarantee your success: + +=== If you do not receive at least 10 orders for +Report #1 within 2 weeks, continue sending e-mails +until you do. + +=== After you have received 10 orders, 2 to 3 weeks +after that you should receive 100 orders or more for +REPORT # 2. If you do not, continue advertising or +sending e-mails until you do. + +** Once you have received 100 or more orders for +Report # 2, YOU CAN RELAX, because the system is +already working for you, and the cash will continue +to roll in ! THIS IS IMPORTANT TO REMEMBER: Every time +your name is moved down on the list, you are placed +in front of a different report. + +You can KEEP TRACK of your PROGRESS by watching which +report people are ordering from you. IF YOU WANT TO +GENERATE MORE INCOME SEND ANOTHER BATCH OF E-MAILS +AND START THE WHOLE PROCESS AGAIN. There is NO LIMIT +to the income you can generate from this business !!! +================================================= +FOLLOWING IS A NOTE FROM THE ORIGINATOR OF THIS PROGRAM: +You have just received information that can give you +financial freedom for the rest of your life, with +NO RISK and JUST A LITTLE BIT OF EFFORT. You can +make more money in the next few weeks and months +than you have ever imagined. Follow the program +EXACTLY AS INSTRUCTED. Do Not change it in any way. +It works exceedingly well as it is now. + +Remember to e-mail a copy of this exciting report +after you have put your name and address in +Report #1 and moved others to #2 .....# 5 as +instructed above. One of the people you send this +to may send out 100,000 or more e-mails and your +name will be on every one of them. + +Remember though, the more you send out the more +potential customers you will reach. So my friend, +I have given you the ideas, information, materials +and opportunity to become financially independent. + +IT IS UP TO YOU NOW ! + +=============MORE TESTIMONIALS=============== +"My name is Mitchell. My wife, Jody and I live in +Chicago. I am an accountant with a major U.S. +Corporation and I make pretty good money. When I +received this program I grumbled to Jody about +receiving 'junk mail'. I made fun of the whole +thing, spouting my knowledge of the population +and percentages involved. I 'knew' it wouldn't work. +Jody totally ignored my supposed intelligence and +few days later she jumped in with both feet. I made +merciless fun of her, and was ready to lay the old +'I told you so' on her when the thing didn't work. + +Well, the laugh was on me! Within 3 weeks she had +received 50 responses. Within the next 45 days she +had received total $ 147,200.00 ......... all cash! +I was shocked. I have joined Jody in her 'hobby'." + +Mitchell Wolf M.D., Chicago, Illinois +================================================ +"Not being the gambling type, it took me several +weeks to make up my mind to participate in this plan. +But conservative as I am, I decided that the initial +investment was so little that there was just no way +that I wouldn't get enough orders to at least get +my money back. I was surprised when I found my +medium size post office box crammed with orders. +I made $319,210.00 in the first 12 weeks. + +The nice thing about this deal is that it does not +matter where people live. There simply isn't a +better investment with a faster return and so big." + +Dan Sondstrom, Alberta, Canada +================================================= +"I had received this program before. I deleted it, +but later I wondered if I should have given it a try. +Of course, I had no idea who to contact to get +another copy, so I had to wait until I was e-mailed +again by someone else......... 11 months passed then +it luckily came again...... I did not delete this one! +I made more than $490,000 on my first try and all the +money came within 22 weeks." + +Susan De Suza, New York, N.Y. +================================================= +"It really is a great opportunity to make relatively +easy money with little cost to you. I followed the +simple instructions carefully and within 10 days the +money started to come in. My first month I made $20, +in the 2nd month I made $560.00 and by the end of the +third month my total cash count was $362,840.00. +Life is beautiful, Thanx to internet." + +Fred Dellaca, Westport, New Zealand +================================================= + +ORDER YOUR REPORTS TODAY AND GET STARTED ON YOUR +ROAD TO FINANCIAL FREEDOM ! + +================================================= +If you have any questions of the legality of this +program, contact the Office of Associate Director +for Marketing Practices, Federal Trade Commission, +Bureau of Consumer Protection, Washington, D.C. + +This message is sent in compliance of the proposed +bill SECTION 301, paragraph (a)(2)(C) of S. 1618. + +* This message is not intended for residents in the +State of Washington, Virginia or California, +screening of addresses has been done to the best +of our technical ability. + +* This is a one time mailing and this list will +never be used again. + +slaxflhxbkltlrolpefciayxx + + diff --git a/Ch3/datasets/spam/spam/00364.11dba84b95e0471927d1ebc8ff0017ef b/Ch3/datasets/spam/spam/00364.11dba84b95e0471927d1ebc8ff0017ef new file mode 100644 index 000000000..0bc34a209 --- /dev/null +++ b/Ch3/datasets/spam/spam/00364.11dba84b95e0471927d1ebc8ff0017ef @@ -0,0 +1,107 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Wed Sep 18 17:44:09 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 352BB16F03 + for ; Wed, 18 Sep 2002 17:44:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 18 Sep 2002 17:44:08 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8IFZMC04700 for + ; Wed, 18 Sep 2002 16:35:22 +0100 +Received: from TIPSMTP1.ADMANMAIL.COM (tipsmtp1.theadmanager.com + [66.111.219.130] (may be forged)) by webnote.net (8.9.3/8.9.3) with ESMTP + id QAA31077 for ; Wed, 18 Sep 2002 16:35:52 +0100 +Message-Id: <200209181535.QAA31077@webnote.net> +Received: from TIPUTIL2 (tiputil2.corp.tiprelease.com) by + TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id + <46.0000CF63@TIPSMTP1.ADMANMAIL.COM>; Wed, 18 Sep 2002 9:56:06 -0500 +Date: Wed, 18 Sep 2002 09:12:04 -0500 +From: Great Offers +To: JM@NETNOTEINC.COM +Subject: Introducing Chase Platinum for Students with a 0% Introductory APR +X-Info: 134085 +X-Info2: SGO +MIME-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + + +chase + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +T +
    + +You are receiving this mailing because you are a +member of MyTotalEmail.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=MTE) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
    + + diff --git a/Ch3/datasets/spam/spam/00365.da6795d02b44e4d5e168d62718f3e7c9 b/Ch3/datasets/spam/spam/00365.da6795d02b44e4d5e168d62718f3e7c9 new file mode 100644 index 000000000..2569daa89 --- /dev/null +++ b/Ch3/datasets/spam/spam/00365.da6795d02b44e4d5e168d62718f3e7c9 @@ -0,0 +1,187 @@ +From 102192086381143-18090200013-spamassassin.taint.org?zzzz@bounce.tilw.net Thu Sep 19 11:14:52 2002 +Return-Path: <102192086381143-18090200013-spamassassin.taint.org?zzzz@bounce.tilw.net> +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id C7D1C16F03 + for ; Thu, 19 Sep 2002 11:14:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 11:14:49 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8IIhbC11694 for + ; Wed, 18 Sep 2002 19:43:37 +0100 +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) by + webnote.net (8.9.3/8.9.3) with ESMTP id TAA31737 for ; + Wed, 18 Sep 2002 19:44:07 +0100 +Received: from sonic1.tilw.net (sonic1.tilw.net [209.164.4.167]) by + smtp.easydns.com (Postfix) with SMTP id 4EDD92DFDA for ; + Wed, 18 Sep 2002 14:43:01 -0400 (EDT) +From: CopyYourDVD-NOW +Subject: Friend,Instantly Copy ANY DVD or Playstation Game with this software...... +To: zzzz@spamassassin.taint.org +X-Owner: atomicDOT;mp*qhwqrwhlqf!frp;8; +MIME-Version: 1.0 +X-RMD-Text: yes +Date: Wed, 18 Sep 2002 11:43:02 PST +X-Mailer: 2.0-b55-VC_IPA [Aug 20 2002, 12:25:33] +Message-Id: <18090200013$102192086381143$1100068680$1077023736@sonic1.tilw.net> +Content-Type: multipart/alternative; boundary="------------103237257898946" + +--------------103237257898946 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +Friend,Now you can copy DVD's and Games +http://www.terra.es/personal9/bigmac241/ + +BACKUP DVD VIDEO's WITH YOUR CD-R BURNER + +With 321 studio's software, you can now copy +any DVD and Playstation Game. Never buy another +backup DVD movie again. Just copy it! + +This is the first time this software is being made +available to the public. All the software you need +to burn your own DVD Video, is included in 321 Studio's +software package DVD Copy Plus! The movies will play +in a standard DVD player. With detailed, easy to follow, +step-by-step instructions, you can BURN your own DVD +Video using nothing more than your DVD-ROM +and CD-R drives. Purchase a copy! Click below. + +http://www.terra.es/personal9/bigmac241/ + +Order today and receive! + +*Step by Step Interactive Instructions +*All Software Tools Included On CD +*No DVD Burner Required +*FREE Live Technical Support +*30 Day Risk Free Trial Available + +With DVD Copy Plus you can backup Your DVD Movies with +the same 74min or 80min CD-R's you've used in the past +to create audio CD's. Our software compresses the large +DVD files on your standard DVD to VCD, SVCD, and DivX +much the same way the popular MP3 format compresses audio. +Order today and start burning +http://www.terra.es/personal9/bigmac241/ + +Thank You, + +CopymyDVD + + +http://inglesa.net/unsub.php?client=atomicDOT + + + +We take your privacy very seriously and it is our policy never to send +unwanted email messages. This message has been sent to zzzz@spamassassin.taint.org +because you originally joined one of our member sites or you signed up +with a party that has contracted with atomicDOT. Please +http://tilw.net/unsub.php?client=atomicDOT&msgid=18090200013 +to Unsubscribe (replying to this email WILL NOT unsubscribe you). + + + + + +TRCK:atomicDOT;mp*qhwqrwhlqf!frp;8; + + + +--------------103237257898946 +Content-Type: text/html; charset=us-ascii +Content-Transfer-Encoding: 7bit + +Backup your DVD's + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +

    With DVDCopyPlus + and PowerCDR5.0 you can copy and burn your

    +
      +
    • +
    • DVD Movies +
    • Playstation +
    • MP3s, AVIs and all + other multimedia Files +
    • Software, Music + CDs (perfect RAW data duplication) +
    • NEW! Burn to CD-R + or DVD-R
    • +
    +

    Protect your + investments by backing up your CD, DVD, MP3, Data and Game collections + with burned copies that really work! Separately, DVDCopyPlus and PowerCDR5.0 + are over $100 worth of software that you can purchase bundled right + now for just $49.99!

    +

    THAT'S 50% OFF!
    +
    MORE DETAILS ORDER NOW

    +
     
    + +

     

    +



    +

    We take your privacy very seriously and it is our policy never to send unwanted email messages. This message has been sent to zzzz@spamassassin.taint.org because you originally joined one of our member sites or you signed up with a party that has contracted with atomicDOT. Please Click Here to Unsubscribe (replying to this email WILL NOT unsubscribe you).



    + +<> +

    + + + +


    +TRCK:atomicDOT;mp*qhwqrwhlqf!frp;8; + + + +--------------103237257898946-- + + diff --git a/Ch3/datasets/spam/spam/00366.f0bfcc3c84da11ae1154c6c593362f69 b/Ch3/datasets/spam/spam/00366.f0bfcc3c84da11ae1154c6c593362f69 new file mode 100644 index 000000000..5c254ca1e --- /dev/null +++ b/Ch3/datasets/spam/spam/00366.f0bfcc3c84da11ae1154c6c593362f69 @@ -0,0 +1,274 @@ +From dus@insiq.us Thu Sep 19 11:15:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id A686016F03 + for ; Thu, 19 Sep 2002 11:14:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 11:14:57 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g8J033C24037 for ; Thu, 19 Sep 2002 01:03:04 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Wed, 18 Sep 2002 20:04:22 -0400 +Subject: Impaired Risk Case of the Month +To: +Date: Wed, 18 Sep 2002 20:04:22 -0400 +From: "IQ - DUS" +Message-Id: <639c701c25f70$1bcf46e0$6b01a8c0@insuranceiq.com> +MIME-Version: 1.0 +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJfWF5vSNNI01jiRy+zcoXavycvFQ== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 19 Sep 2002 00:04:22.0937 (UTC) FILETIME=[1BEE4090:01C25F70] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_4098D_01C25F36.D7652D00" + +This is a multi-part message in MIME format. + +------=_NextPart_000_4098D_01C25F36.D7652D00 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: quoted-printable + + Diversified Underwriters Services, Inc. + Impaired Risk Case of the Month August 2002 + Male 64 Non-smoker + Face Amount $6,000,000 + History of Arterial Sclerotic Heart Disease + Coronary Artery Disease + Abnormal Echocardiogram + Increasing Abnormal PSA + Currently on Chelation Therapy + Competition Rated Table 4=20 + + Diversified's Answer... + Preferred! + +Broker's Commission: $69,576 !! + + =09 +Let Us Turn Your Clients That Have Been Declined, Rated or Have Current +Health Problems, Into Placeable Life Cases! + =09 + "INST-A-QUOTE"(tm) for Impaired Risk Life Quotes + Call Now for an "Inst-A-Quote"=99 on your client and we will get back = +to +you within 24 hours! 800-683-3077 ext. 0=97 or =97 + +Please fill out the form below for more information =20 +Name: =09 +E-mail: =20 +Phone: =20 +City: State: =20 + =09 +=20 + =20 +For Broker Use Only. Not for Public Dissemination. =20 +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.Insuranceiq.com/optout +=20 + +Legal Notice =20 + +------=_NextPart_000_4098D_01C25F36.D7652D00 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Impaired Risk Case of the Month + + + + + + =20 + + + =20 + + +

    =20 + 3D"August=20 + + =20 + + + =20 + + + =20 + + + =20 + + + =20 + + +
    + + + + + +
    =20 + =20 + Male 64 Non-smoker
    + Face Amount $6,000,000
    + History of Arterial Sclerotic Heart = +Disease
    + Coronary Artery Disease
    + Abnormal Echocardiogram
    + Increasing Abnormal PSA
    + Currently on Chelation Therapy
    + Competition Rated Table 4=20 +


    + 3D"Standard!"

    + Broker's Commission: $69,576 !!

    +
    =20 +
    +
    + Let Us Turn Your Clients That = +Have Been=20 + Declined, Rated or Have = +Current=20 + Health Problems, Into Placeable=20 + Life Cases!
    +  =20 +
    +
    =20 + 3D"Call=20 + =20 + — or —

    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please fill out the form below for more = +information
    Name:
    E-mail:
    Phone:
    City:State:
     =20 + + + +
    +
    +
    For Broker Use Only. Not for Public = +Dissemination.
    +

    We don't=20 + want anyone to receive our mailings who does not wish to. This = +is professional=20 + communication sent to insurance professionals. To be removed = +from this=20 + mailing list, DO NOT REPLY to this message. Instead, go = +here: =20 + http://www.Insuranceiq.com/optout

    +
    +

    + Legal Notice=20 +
    +=20 + + + +------=_NextPart_000_4098D_01C25F36.D7652D00-- + + diff --git a/Ch3/datasets/spam/spam/00367.9688cdee9dfe720c297672c8f60d998f b/Ch3/datasets/spam/spam/00367.9688cdee9dfe720c297672c8f60d998f new file mode 100644 index 000000000..629fbec3e --- /dev/null +++ b/Ch3/datasets/spam/spam/00367.9688cdee9dfe720c297672c8f60d998f @@ -0,0 +1,103 @@ +From ceciledo1@hotmail.com Thu Sep 19 11:15:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id D9B8D16F03 + for ; Thu, 19 Sep 2002 11:15:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 11:15:01 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8J1DxC30105 for + ; Thu, 19 Sep 2002 02:13:59 +0100 +Received: from server06.bsag.ch (client62-2-203-162.hispeed.ch + [62.2.203.162] (may be forged)) by webnote.net (8.9.3/8.9.3) with ESMTP id + CAA32581 for ; Thu, 19 Sep 2002 02:12:36 +0100 +From: ceciledo1@hotmail.com +Received: from jackwatts.com.au ([200.171.58.171]) by server06.bsag.ch + with Microsoft SMTPSVC(5.0.2195.2966); Thu, 19 Sep 2002 00:47:41 +0200 +Message-Id: <000049ed75d7$000003d2$000034c4@iqyiqndaz.lt> +To: , , , + , , , + , , +Cc: , , + , , + , , + , , +Subject: A revolution in the PC world has arrived. RSIRTR +Date: Wed, 18 Sep 2002 18:48:58 -1600 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +Reply-To: ceciledo1@hotmail.com +X-Originalarrivaltime: 18 Sep 2002 22:47:43.0119 (UTC) FILETIME=[6639B9F0:01C25F65] + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + Take Control of Your Computer With This Top-of-the-Line Software! + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + Symantec SystemWorks 2002 + + -=Professional Software Suite=- + + +This Special Package Includes Six - Yes 6! - Feature-Packed Utilities + +ALL for 1 Special LOW Price of Only $29.99! + +This Software Will: + + - Protect your computer from unwanted and hazardous viruses + - Help secure your private & valuable information + - Allow you to transfer files and send e-mails safely + - Backup your ALL your data quick and easily + - Improve your PC's performance w/superior integral diagnostics! + - ***** You'll NEVER have to take your PC to the repair shop AGAIN! ***** + + That's SIX, yes, -6- Feature-Packed Utilities @ 1 Great Price!!! + + A $300+ Combined Retail Value YOURS Only $29.99! (Limited Time Offer) + < Price Includes FREE Shipping! > + + Why SO Cheap you ask? You are buying ONLINE WHOLESALE, + Direct from the Warehouse TO YOU! + + ~~~ AND ~~~ + + FOR A LIMITED TIME BUY 2 OF ANY SOFTWARE & GET 1 FREE!!!! + + + Don't fall prey to destructive viruses or programs! + Protect your computer and your valuable information and... + + + ...CLICK HERE TO ORDER NOW! -> http://61.151.247.39/erik/ + + OR cut & paste the above link ^^^^^^^^^^^^^^^^ in your browser's URL bar. + + + FOR MORE QUESTIONS, OR TO ORDER CALL US TOLL-FREE ANYTIME! + + 1 - 8 0 0 - 8 6 1 - 1 4 8 1 + + + + +We are strongly against sending unsolicited emails to those who do not wish to receive +our special mailings. You have opted-in to one or more of our affiliate sites requesting +to be notified of any special offers we may run from time to time. We also have attained +the services of an independent 3rd party to overlook list management and removal +services. The list CODE in which you are registered is marked at the bottom of this email. +If you do not wish to receive further mailings, + +Please click here -> http://61.151.247.39/erik/remove.asp to be removed from the list. + +Please accept our apologies if you have been sent this email in error. We honor all removal requests. + + +IAES (International Association of Email Security) Approved List. Serial # 9e45tYu2-ssI3USA + + diff --git a/Ch3/datasets/spam/spam/00368.2c1ab4bc7f408e0fcb22dca9b2d5a113 b/Ch3/datasets/spam/spam/00368.2c1ab4bc7f408e0fcb22dca9b2d5a113 new file mode 100644 index 000000000..63dfd42f3 --- /dev/null +++ b/Ch3/datasets/spam/spam/00368.2c1ab4bc7f408e0fcb22dca9b2d5a113 @@ -0,0 +1,61 @@ +From balance@sbox.tu-graz.ac.at Thu Sep 19 11:15:05 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id D73D616F03 + for ; Thu, 19 Sep 2002 11:15:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 11:15:04 +0100 (IST) +Received: from rrouzxp5u37blla ([211.167.74.170]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8J2EHC32519; Thu, 19 Sep 2002 03:14:18 + +0100 +Received: from 68.17.46.205 [210.22.129.122] by rrouzxp5u37blla with ESMTP + (SMTPD32-7.11 ) id AA1DAE0084; Thu, 19 Sep 2002 03:55:09 +0800 +To: +From: "mary" +Subject: fwd: SYSTEMWORKS CLEARANCE SALE_ONLY $29.99 +Date: Wed, 18 Sep 2002 15:59:21 -1600 +MIME-Version: 1.0 +Message-Id: <200209190355843.SM00884@68.17.46.205> +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + untitled + + + + +

    ATTENTION: T= +his is a MUST for ALL Computer Users!!!
    +

    +
    *NEW-Special Package Deal!*
    +

    +
    Norton SystemWorks 2002 S= +oftware Suite -Professional Edition- + +Includes Six - Yes 6! - Feature-Packed Utilities +ALL For 1 Special LOW Price!6 Feature-Packed Utilities...1 Great Price! +A $300+ Combined Retail Value! + +FREE Shipping!

    + +


    +
    Click Here Now! + + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00369.845eeb9573484bd88a6a6224c7068d81 b/Ch3/datasets/spam/spam/00369.845eeb9573484bd88a6a6224c7068d81 new file mode 100644 index 000000000..c23600b02 --- /dev/null +++ b/Ch3/datasets/spam/spam/00369.845eeb9573484bd88a6a6224c7068d81 @@ -0,0 +1,100 @@ +From fo0kozh4k44705211@hotmail.com Thu Sep 19 11:15:10 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 4745D16F03 + for ; Thu, 19 Sep 2002 11:15:09 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 11:15:09 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8J4OrC04796 for + ; Thu, 19 Sep 2002 05:24:53 +0100 +Received: from mail.kti.nsc.ru (IDENT:root@ns.kti.nsc.ru [194.226.170.3]) + by webnote.net (8.9.3/8.9.3) with ESMTP id FAA00636 for + ; Thu, 19 Sep 2002 05:25:23 +0100 +Received: from unspecified.host ([194.226.170.51]) by mail.kti.nsc.ru + (8.12.5/8.12.5) with ESMTP id g8J2Utmi031901; Thu, 19 Sep 2002 11:23:52 + +0700 (NOVST) +Received: from 172.190.77.230 ([172.190.77.230]) by 127.0.0.1 (WinRoute + Pro 4.2.2) with SMTP; Tue, 17 Sep 2002 15:44:14 +0700 +Message-Id: <00006b1a2e12$00000c87$00006191@mx06.hotmail.com> +To: +Cc: , , , + , , , + +From: "Mackenzie" +Subject: Toners and inkjet cartridges for less.... BSJMCOIK +Date: Tue, 17 Sep 2002 01:46:06 -1900 +MIME-Version: 1.0 +Reply-To: fo0kozh4k44705211@hotmail.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +


    + +
    + +

    +

    Tremendous Savings +on Toners, 

    +

    +Inkjets, FAX, and Thermal Replenishables!!

    +

    Toners 2 Go +is your secret +weapon to lowering your cost for High Quality, +Low-Cost printer +supplies!  We have been in the printer +replenishables business since 1992, +and pride ourselves on rapid response and outstanding +customer service.  +What we sell are 100% compatible replacements for +Epson, Canon, Hewlett Packard, +Xerox, Okidata, Brother, and Lexmark; products that +meet and often exceed +original manufacturer's specifications.

    +

    Check out these +prices!

    +

            Epson Stylus +Color inkjet cartridge +(SO20108):     Epson's Price: +$27.99     +Toners2Go price: $9.95!

    +

           HP +LaserJet 4 Toner Cartridge +(92298A):           = +; +HP's +Price: +$88.99            +Toners2Go + price: $41.75!

    +

     

    +

    Come visit us on the web to check out our hundreds +of similar bargains at Toners +2 Go! +

    + +
    + + request to be excluded by visiting HERE= +

    + +
    + +michaell + + + + + + diff --git a/Ch3/datasets/spam/spam/00370.549e569ab1b84fb13a4ea7d61f98f86d b/Ch3/datasets/spam/spam/00370.549e569ab1b84fb13a4ea7d61f98f86d new file mode 100644 index 000000000..e80797b7b --- /dev/null +++ b/Ch3/datasets/spam/spam/00370.549e569ab1b84fb13a4ea7d61f98f86d @@ -0,0 +1,67 @@ +From greatdaneman34@angelfire.com Thu Sep 19 11:15:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id D2D3516F03 + for ; Thu, 19 Sep 2002 11:15:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 11:15:11 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8J4sGC05810 for + ; Thu, 19 Sep 2002 05:54:16 +0100 +Received: from rack3.easydns.com (rack3.easydns.com [205.210.42.50]) by + webnote.net (8.9.3/8.9.3) with ESMTP id FAA00673 for ; + Thu, 19 Sep 2002 05:54:46 +0100 +From: greatdaneman34@angelfire.com +Received: from angelfire.com (unknown [210.90.110.70]) by + rack3.easydns.com (Postfix) with SMTP id AE6A64AA2E for + ; Thu, 19 Sep 2002 00:54:38 -0400 (EDT) +Received: from 109.63.165.212 ([109.63.165.212]) by sparc.zubilam.net with + esmtp; Thu, 19 Sep 0102 00:54:28 -0400 +Received: from 177.189.232.218 ([177.189.232.218]) by + mailout2-eri1.midmouth.com with NNFMP; 18 Sep 0102 20:51:26 +0800 +Reply-To: +Message-Id: <012d52d76a7a$4353b0d7$4ac14aa5@ldgndy> +To: +Subject: Expand Your business with our Money! +Date: Wed, 18 Sep 0102 23:32:17 +0500 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00C6_24D75C3A.C0588C07" + +------=_NextPart_000_00C6_24D75C3A.C0588C07 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +bG92ZQ0KV29ybGQgQ2FwaXRhbCBHcm91cCBpcyBhIGdyb3VwIG9mIEZ1bmRp +bmcgU291cmNlcyB0aGF0IGhlbHAgYnVzaW5lc3NlcyANCndpdGggdGhlaXIg +ZmluYW5jaWFsIG5lZWRzLiAgV2UgY2FuIHByb3ZpZGUgV29ya2luZyBDYXBp +dGFsIHRvICQxNTAsMDAwIA0Kb24gYW4gdW5zZWN1cmVkIGJhc2lzOyB3aGlj +aCBjYW4gYmUgdXNlZCB0byB0YWtlIGNhcmUgb2YgY2FzaCBmbG93IA0KbmVl +ZHMsIHByb3ZpZGUgZnVuZHMgZm9yIGV4cGFuc2lvbiBhbmQgb3RoZXIgbmVl +ZHMgeW91ciBidXNpbmVzcyBoYXMgKFVTIA0KYnVzaW5lc3NlcyBvbmx5KS4g +IFdlIGFsc28gcHVyY2hhc2UgSW52b2ljZXMsIEFjY291bnRzIFJlY2VpdmFi +bGVzLCANCkxlYXNlcywgQXV0byBQb3J0Zm9saW9zLCBCdXNpbmVzcyBhbmQg +UmVhbCBFc3RhdGUgTm90ZXMsIGFuZCBvdGhlciBDYXNoIA0KRmxvd3MuICBJ +ZiB5b3Ugd291bGQgbGlrZSB0byBpbnF1aXJlIGFib3V0IHVzIGhlbHBpbmcg +eW91IHRvZGF5IHdpdGggeW91ciANCmNhcGl0YWwgbmVlZHMsIHBsZWFzZSBj +bGljayBvbiB0aGUgbGluayBiZWxvdyBmb3IgZGV0YWlscyBhbmQgc3VibWlz +c2lvbiANCmZvcm0uICBUaHggZm9yIHlvdXIgdGltZS4gIFdvcmxkIENhcGl0 +YWwgR3JvdXANCg0KaHR0cDovL3d3dy5tYWlscGFpbC5jb20NCg0KaHR0cDov +L3d3dy5tYWlscGFpbC5jb20NCg0KDQoNCg0KDQoNCg0KDQoNCmxvdmUNCg0K +DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN +Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K +DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KbG92ZQ0KDQpZb3UgYXJlIHJlY2ll +dmluZyB0aGlzIGVtYWlsIGFzIGEgc3Vic2NyaWJlciBvciBhZmZpbGlhdGUg +c3VjYnNjcmliZXIgDQp0byBvcHRpbiBuZXR3b3JrLiAgSWYgeW91IGhhdmUg +cmVjZWl2ZWQgdGhpcyBhcyBhbiBlcnJvciBvciB3b3VsZCBsaWtlIA0KdG8g +YmUgdGFrZW4gb2ZmIG91ciBsaXN0IHBsZWFzZSBzZW5kIGFuIGVtYWlsIHRv +IG5vcm1vcmVAZXlvdS5jb20uICBUaGFuayANCnlvdSBhbmQgaGF2ZSBhIGdy +ZWF0IGRheS5sb3ZlDQowOTgxWFZLVjktMTE1eWFMbDkzMDlRUGFsMjM= + + diff --git a/Ch3/datasets/spam/spam/00371.3bc80f63aa7c64a56eb77fc82ce22e7f b/Ch3/datasets/spam/spam/00371.3bc80f63aa7c64a56eb77fc82ce22e7f new file mode 100644 index 000000000..ed266260b --- /dev/null +++ b/Ch3/datasets/spam/spam/00371.3bc80f63aa7c64a56eb77fc82ce22e7f @@ -0,0 +1,61 @@ +From firstever001@44yes.onlineisbest.com Thu Sep 19 11:15:15 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 2C5AF16F03 + for ; Thu, 19 Sep 2002 11:15:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 11:15:14 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8J6SNC08624 for + ; Thu, 19 Sep 2002 07:28:24 +0100 +Received: from 44yes.onlineisbest.com (44yes.onlineisbest.com + [64.25.33.44]) by webnote.net (8.9.3/8.9.3) with ESMTP id HAA00849 for + ; Thu, 19 Sep 2002 07:28:54 +0100 +From: firstever001@44yes.onlineisbest.com +Date: Wed, 18 Sep 2002 23:32:28 -0400 +Message-Id: <200209190332.g8J3WST10360@44yes.onlineisbest.com> +To: qpwzztnclt@onlineisbest.com +Reply-To: firstever001@44yes.onlineisbest.com +Subject: ADV: Extended Auto Warranties Here hvgxs + +Protect your financial well-being. +Purchase an Extended Auto Warranty for your Car today. + +CLICK HERE for a FREE no obligation quote. +http://ww3.onlineisbest.com/warranty/ + +Car troubles always seem to happen at the worst possible time. +Protect yourself and your family with a +quality Extended Warranty for your car, truck, or SUV, +so that a large expense cannot hit you all at once. + +We cover most vehicles with less than 150,000 miles. + +Buy DIRECT! Our prices are 40-60% LESS! + +We offer fair prices and prompt, toll-free claims service. + +Get an Extended Warranty quote for your car today. + +Warranty plan also includes: + + 1) 24-Hour Roadside Assistance. + 2) Rental Benefit. + 3) Trip Interruption Intervention. + 4) Extended Towing Benefit. + +CLICK HERE for a FREE no obligation quote. +http://ww3.onlineisbest.com/warranty/ + + + + + +--------------------------------------- +To easily remove your address from the list, go to: +http://ww3.onlineisbest.com/stopthemailplease/ +Please allow 48-72 hours for removal. + + diff --git a/Ch3/datasets/spam/spam/00372.4ebcb6306af1946c3ff1b2bc933e1203 b/Ch3/datasets/spam/spam/00372.4ebcb6306af1946c3ff1b2bc933e1203 new file mode 100644 index 000000000..eb581b1c0 --- /dev/null +++ b/Ch3/datasets/spam/spam/00372.4ebcb6306af1946c3ff1b2bc933e1203 @@ -0,0 +1,258 @@ +From calebn@msn.com Thu Sep 19 13:26:56 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id ED29B16F03 + for ; Thu, 19 Sep 2002 13:26:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 13:26:54 +0100 (IST) +Received: from msn.com ([195.101.43.146]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g8JCJlC19041 for ; + Thu, 19 Sep 2002 13:19:47 +0100 +Reply-To: +Message-Id: <000c54e23e0c$4424b7b7$3ce48ec4@mrjgpn> +From: +To: +Subject: Never pay eBay listing fees again! +Date: Thu, 19 Sep 2002 01:15:03 +1100 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +Content-Transfer-Encoding: 8bit + +Hi, + +I'm a college dropout. I work about two hours a day. +I'm ambitious, but extremely lazy, and I make over +$250,000 a year. Are you curious yet? + +In a minute I'm going to tell you my secret, +it's the dirty little secret of the Internet ... + +You've probably heard stories about people making +whopping huge money online, but you thought they +were the big corporate execs, famous programmers, or +boy-geniuses. + +Well, grasshopper, think again ... + +It's people like you and me that are making the real +money. Yep, people like YOU AND ME! + +Ever since the "dot com bubble" burst in 1999, small-time +entrepreneurs are getting richer while the Fortune 500 +companies look for bankruptcy lawyers. + +Today small business owners and ordinary folks +like you and me can use the web to achieve complete +financial freedom with NO INVESTMENT and very little +work. How? By learning the most profitable marketing +technique ever created - it's called BULK EMAIL. + +If you've ever recieved an email advertisement, then +you know what bulk email is. I bet you can't click on +DELETE fast enough for most of those ads, right? +You might not want their product, but remember that +thousands of other folks probably do. Bulk email is a +percentage game - every bulker who contacts you +makes a six figure income on the Internet. I +guarantee it. Now let's go back to Math 101 and +review some numbers ... + +If you sell on eBay, you pay anywhere from a few +dollars to over a hundred dollars just to post one +auction. How many people see your ad? Maybe a +couple thousand or even ten or twenty thousand +over a period of days. Using bulk email, YOU CAN +SEND YOUR AD TO MORE THAN A MILLION PEOPLE A DAY +at virtually no cost. Whether your send 100,000 +emails or 100 million emails, the price is the same. +ZERO! + +Stop paying those outrageous auction listing fees when +hardly anyone sees your ad! + +Imagine that you have a decent product with a +profit margin of $20.00 on each sale. If you send +an email ad to 500,000 people, and only one person +in a thousand actually places an order, then you just +generated 500 orders and made $10,000 in a few hours +of work. + +It's that simple ... + +All you have to do is convince ONE PERSON OUT OF A +THOUSAND to buy your stuff and you're FILTHY RICH. + +The best thing is that anyone can do it. Doesn't +matter if you're a nineteen-year-old college student +using a dorm-room computer or a fifty-year-old +executive working from an office building in New +York City. Anyone, and I repeat ANYONE, can start +bulk emailing with virtually no startup costs. All +it takes is a few days of study, plenty of ambition, +and some basic familiarity with the Internet. + +I quit college when I was 19 to capitalize on the +"Dot Com" mania, and I've never looked back. I +started with no money, no product to sell, and only +the most rudimentary computer skills. I saw an +opportunity and I seized it. A few years later, +I bought my own home - with CASH. + +You don't need any money. You don't need a product. +You don't need to be a computer nerd and no experience +whatsoever is required. + +If you saw an employment ad in the newspaper like that +you'd jump right on it. It would be a dream come true. +So what are you waiting for?! + +I'm going to ask you four simple questions. If you answer +YES to all of them, then I can almost promise that you +will make at least $100,000 using bulk email this year. + +Here goes ... + +Do you have basic experience with the web? +Do you have a computer and an Internet connection? +Do you have a few hours each day of free time? +Do you want to earn some extra money with an eye towards +complete financial freedom? + +If you answer YES to these questions, you could be +making $5,000 - $20,000 per week working from your +home. Kiss your day job goodbye - this sure beats +the 9-5 daily grind! + +All you need is ambition and commitment. This +is no "get rich quick scheme". You have to work +to make big bucks, but ANYONE - and I mean ANYONE - can do +it. + +You're probably wondering if it's hard to get started. +Don't worry, it's not! I will show you step-by-step +how to start your first email campaign and how to +build a booming online business. You'll be generating +orders - AND MAKING MONEY - in less than seven days. + +Okay, so what if you don't have anything to sell? + +No problem!! I'll show you where to find hot +products that sell like CRAAAAAAZY! Most people delay +starting an Internet business because they have +nothing to sell, but I'm removing that hurdle right now. +After reading the Bulkbook, you can build your complete +product line in less than two hours! There is NO EXCUSE +not to get started! I will get you up-and-running within +seven days. In fact ... + +I personally guarantee that you will start your own +bulk email campaign less than a week after reading +the Bulkbook! I'll give you a toll-free phone number +to reach me 24 hours a day, seven days a week; +where else will you find that level of service?! + +I will also include a step-by-step guide to starting +your very first email campaign called "Seven Days to +Bulk Email Success". This seperate guide contains a daily +routine for you to follow with specific, exact +instructions on how to get started. On day one, for +example, I teach you where to find a product to sell. +The next day you learn how to build a fresh mailing +list. On the seventh day, you just click send! Your +very first campaign is ready to go. + +As a special bonus, you'll recieve a FREE copy +of our STEALTH MASS MAILER, a very powerful bulk +email program which retails for $49.99! I'll even +include 7 million email addresses absolutely FREE +if you order NOW! + +Stop wasting your money on auction listing fees, +classifieds, and banner ads - they don't work, and +never will! If you are SERIOUS about making money +on the Internet, bulk email is your only option. +What are you waiting for? Few of us are willing +to share this knowledge, but I promise to teach +you everything I know about bulk emailing in this +extraordinary bulk emailer's handbook ... The Bulkbook! + +Once again, here's the deal. You give me $29.99. +I give you ALL THE TOOLS YOU NEED to become a +successful, high profit bulk emailer. INCLUDING: + +** THE BULKBOOK +Teaches you step-by-step how to become a high profit +bulk emailer. Secret techniques and tips never +before revealed. + +** SEVEN DAYS TO BULK EMAIL SUCCESS +Provides detailed day-by-day instruction to start sending +your first email campaign in seven days. + +** 600 Email subjects that PULL LIKE CRAZY + +** EMAIL LIST MANAGER +Manage your email lists quickly and easily. Very +user-friendly, yet powerful, software. + +** STEALTH MASS MAILER +Software can send up to 50,000 emails an hour automatically. +Just load them in there and click SEND! + +** ADDRESS ROVER 98 and MACROBOT SEARCH ENGINE ROBOT +Extracts email addresses from databases and search engines +at speeds of over 200,000 per hour. + +** WORLDCAST EMAIL VERIFIER +Used to verify your email addresses that you extract to +make sure they're valid. + +** EBOOK PUBLISHER +Easily publish your own e-books and reports for resale using, +you guessed it, bulk email! + +** SEVEN MILLION EMAIL ADDRESSES +This huge list will get you started bulking right away. +I harvested these addresses myself, the list is filled +with IMPULSE BUYERS ready to respond to your ads! + +If you added up all of the FULL VERSION BULK EMAIL software +included with the BULKBOOK package, it would total over +$499. I am giving you the whole bundle for only $29.99. +That means there is no other out-of-pocket startup expense +for you. Nothing else to buy, no reason to waste money on +software that doesn't work. With this one package, you get +EVERYTHING YOU NEED to START BULK EMAILING RIGHT AWAY. + +Are you willing to invest $29.99 for the opportunity +to make a SIX FIGURE INCOME on the Internet with no +startup cash and very little effort? + +Remember, you will recieve a toll-free phone number +for 24 hour expert advice and consultation FROM ME +PERSONALLY. + +To order the Bulkbook right now for only $29.99 with +a Visa or Mastercard, please click on the link below. +This will take you to our secure server for order +processing: + +http://cbphost.net/users/quiksilver/bulkbook.htm + +Note: The Bulkbook will be delivered electronically +within 24 hours. It is not available in printed form. + +*********************************************************** +Our company is strictly opposed to unsolicited email. +To be removed from this opt-in list, please send a +request to "bulkexpert@yahoo.com" +*********************************************************** +5906UuMo0-083oXzI3821cAvh4-032miqQ2111Hkix2-485El45 + + diff --git a/Ch3/datasets/spam/spam/00373.ebe8670ac56b04125c25100a36ab0510 b/Ch3/datasets/spam/spam/00373.ebe8670ac56b04125c25100a36ab0510 new file mode 100644 index 000000000..d253acf0c --- /dev/null +++ b/Ch3/datasets/spam/spam/00373.ebe8670ac56b04125c25100a36ab0510 @@ -0,0 +1,65 @@ +From apf@wu-wien.ac.at Thu Sep 19 13:01:55 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0AFF216F03 + for ; Thu, 19 Sep 2002 13:01:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 13:01:54 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JAUuC15623 for + ; Thu, 19 Sep 2002 11:30:56 +0100 +Received: from server.hub (postoffice.microcadam.co.uk [194.203.149.97] + (may be forged)) by webnote.net (8.9.3/8.9.3) with ESMTP id LAA01417 for + ; Thu, 19 Sep 2002 11:31:26 +0100 +Message-Id: <200209191031.LAA01417@webnote.net> +Received: from mx.univie.ac.at (193.67.157.75 [193.67.157.75]) by + server.hub with SMTP (Microsoft Exchange Internet Mail Service Version + 5.5.2448.0) id TGRQFD1L; Thu, 19 Sep 2002 11:15:29 +0100 +To: +From: "don" +Subject: PROTECT YOUR INFORMATION AND YOUR COMPUTER +Date: Thu, 19 Sep 2002 05:20:18 -0500 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit + +ATTENTION: This is a MUST for ALL Computer Users!!! + +*NEW-Special Package Deal!* + +Norton SystemWorks 2002 Software Suite -Professional Edition- + +Includes Six - Yes 6! - Feature-Packed Utilities +ALL For 1 Special LOW Price! + +This Software Will: +- Protect your computer from unwanted and hazardous viruses +- Help secure your private & valuable information +- Allow you to transfer files and send e-mails safely +- Backup your ALL your data quick and easily +- Improve your PC's performance w/superior integral diagnostics! + +6 Feature-Packed Utilities...1 Great Price! +A $300+ Combined Retail Value! + +YOURS for Only $29.99! + +Don't fall prey to destructive viruses or hackers! +Protect your computer and your valuable information! + + +So don't delay...get your copy TODAY! + + +http://euro.specialdiscounts4u.com/ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +This email has been screened and filtered by our in house ""OPT-OUT"" system in +compliance with state laws. If you wish to "OPT-OUT" from this mailing as well +as the lists of thousands of other email providers please visit + +http://dvd.specialdiscounts4u.com/optoutd.html +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + diff --git a/Ch3/datasets/spam/spam/00374.8942e17f10389fe620e1e96cba52c9aa b/Ch3/datasets/spam/spam/00374.8942e17f10389fe620e1e96cba52c9aa new file mode 100644 index 000000000..a370cc895 --- /dev/null +++ b/Ch3/datasets/spam/spam/00374.8942e17f10389fe620e1e96cba52c9aa @@ -0,0 +1,138 @@ +From veryhot@ebonylust4free.com Thu Sep 19 17:51:40 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 8E13F16F03 + for ; Thu, 19 Sep 2002 17:51:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 17:51:37 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JD55C20421 for + ; Thu, 19 Sep 2002 14:05:05 +0100 +Received: from ebonylust4free.com (HOSTED-BY.megaprovider.nl [80.71.71.4] + (may be forged)) by webnote.net (8.9.3/8.9.3) with SMTP id OAA01871 for + ; Thu, 19 Sep 2002 14:05:36 +0100 +From: veryhot@ebonylust4free.com +Received: (qmail 53447 invoked by uid 0); 19 Sep 2002 09:04:24 -0000 +Date: 19 Sep 2002 09:04:24 -0000 +To: zzzz@spamassassin.taint.org +Subject: found a secret link ADV +Message-Id: <7539710369a6$5bb91624$221a576d@ebonylust4free.com> +Organization: ebonylust4free.com +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Priority: 1 +X-Msmail-Priority: High +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +X-Accept-Language: en +Content-Type: text/html; charset="iso-8859-1" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + +
    + + EBONY ASS 4 FREE + + EBONY ASS 4 FREE +
    + + EBONY ASS 4 FREE + + EBONY ASS 4 FREE +
    + + EBONY ASS 4 FREE + + EBONY ASS 4 FREE +
    + + EBONY ASS 4 FREE + + EBONY ASS 4 FREE +
    + + EBONY ASS 4 FREE +
    + + EBONY ASS 4 FREE + + EBONY ASS 4 FREE + + EBONY ASS 4 FREE + + EBONY ASS 4 FREE +
    + + EBONY ASS 4 FREE +
    +
    +****************************************************************
    +Do Not Reply To This Message To Be Removed. For easy removal from this mail list
    +please click here http://teenie4free.com/remove
    +****************************************************************
    +This email was sent to you because your email is part of a targeted
    +opt-in list. If you do not wish to receive further mailings from this offer,
    +please click above and enter your email to remove your email from future offers.
    +****************************************************************
    +Beaton Enterprises, 102 Jefferson Street, Zegema Beach, PA, 19104 215-828-5000
    +***************************************************************
    +
    + + diff --git a/Ch3/datasets/spam/spam/00375.1130c29a255fa277c5acbee4d08edacd b/Ch3/datasets/spam/spam/00375.1130c29a255fa277c5acbee4d08edacd new file mode 100644 index 000000000..6f2cea0be --- /dev/null +++ b/Ch3/datasets/spam/spam/00375.1130c29a255fa277c5acbee4d08edacd @@ -0,0 +1,71 @@ +From root@ns1.zenmarketing.net Thu Sep 19 17:51:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 78EF016F03 + for ; Thu, 19 Sep 2002 17:51:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 17:51:42 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JEF5C22957 for + ; Thu, 19 Sep 2002 15:15:05 +0100 +Received: from ns1.zenmarketing.net (mail.zenmarketing.net + [216.38.218.12]) by webnote.net (8.9.3/8.9.3) with ESMTP id PAA02049 for + ; Thu, 19 Sep 2002 15:15:32 +0100 +Received: (from root@localhost) by ns1.zenmarketing.net (8.11.6/8.11.6) id + g8JEF8A20151; Thu, 19 Sep 2002 10:15:08 -0400 +Date: Thu, 19 Sep 2002 10:15:08 -0400 +Message-Id: <200209191415.g8JEF8A20151@ns1.zenmarketing.net> +To: zzzz@spamassassin.taint.org +Subject: Slim Factors - A totally new approach to weight loss +From: Slim Factors +Content-Type: text/html + + + + +Slim Factors + + + + + + + + + + + + + + + + + + + + + + + + +
    Slim Factors - A totally new approach to weight lossBuy Slim Factors Now
     
    This e-mail is intended to be a benefit to the recipient. + If you would like to opt-out and not receive any more click + here. Your address will be removed immediately. We sincerely apologize + for any inconvenience. This E-mail is not SPAM under the Federal Regulatory + laws of the United States. This message is being sent to you in compliance + with the proposed Federal Legislation for commercial e-mail (H.R.4176-SECTION + 101 PARAGRAPH (e) (1) (A)) and Bill s.1618 TITLE III passed by the 105th + US Congress. This message is not intended for residents of WA, NV, CA, VA. + Screening of addresses has been done to the best of our technical ability. +
    + + + + + diff --git a/Ch3/datasets/spam/spam/00376.f4ed5f002f9b6b320a67f1da9cacbe72 b/Ch3/datasets/spam/spam/00376.f4ed5f002f9b6b320a67f1da9cacbe72 new file mode 100644 index 000000000..39b3d905c --- /dev/null +++ b/Ch3/datasets/spam/spam/00376.f4ed5f002f9b6b320a67f1da9cacbe72 @@ -0,0 +1,123 @@ +From andraallisonhuaa@email.com Thu Sep 19 17:51:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id EE11116F03 + for ; Thu, 19 Sep 2002 17:51:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 17:51:45 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JEuLC24080 for + ; Thu, 19 Sep 2002 15:56:31 +0100 +Received: from dev-mail1.netsgo.com ([211.39.34.61]) by webnote.net + (8.9.3/8.9.3) with ESMTP id PAA02126 for ; + Thu, 19 Sep 2002 15:56:51 +0100 +From: andraallisonhuaa@email.com +Received: from email-com.mr.outblaze.com (203.145.4.117) by + dev-mail1.netsgo.com (6.5.007) id 3D6CAB5A0016F30F; Thu, 19 Sep 2002 + 23:40:18 +0900 +Message-Id: <000072146bff$00001431$000010db@email-com.mr.outblaze.com> +To: +Subject: Hgh: safe and effective release of your own growth hormone!30543 +Date: Thu, 19 Sep 2002 21:45:31 -0500 +MIME-Version: 1.0 +Reply-To: 100074c213aaa002@hotmail.com +1: X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + Lose weight while building lean muscle mass and reversing the +ravages of aging all at once + + + +
    + + + +
    +
    + + + +
    +
    Hu= +man +Growth Hormone Therapy
    +
    + +
    +

    Lose we= +ight +while building lean muscle mass +
    and +reversing the ravages of aging all at once. +

    Remarkable= + discoveries +about Human Growth Hormones (HGH) +
    are chang= +ing +the way we think about aging and weight loss. + +
    +

    + + + + + +
    Lose +Weight +
    Build +Muscle Tone +
    Reverse +Aging +
    Increased +Libido +
    Duration +Of Penile Erection
    New +Hair Growth +
    Improved +Memory +
    Improved +skin +
    New +Hair Growth +
    Wrinkle +Disappearance
    + +
    +

    Visit +Our Web Site and Lean The Facts: Click Here

    + +

    + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00377.e30c013b7392bf14f132258aa82b1b25 b/Ch3/datasets/spam/spam/00377.e30c013b7392bf14f132258aa82b1b25 new file mode 100644 index 000000000..5c52a8d80 --- /dev/null +++ b/Ch3/datasets/spam/spam/00377.e30c013b7392bf14f132258aa82b1b25 @@ -0,0 +1,124 @@ +From ilug-admin@linux.ie Thu Sep 19 17:52:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 962DC16F03 + for ; Thu, 19 Sep 2002 17:51:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 17:51:58 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JGTGC27825 for + ; Thu, 19 Sep 2002 17:29:16 +0100 +Received: from lugh.tuatha.org (list@localhost [127.0.0.1]) by + lugh.tuatha.org (8.12.3/8.9.3) with ESMTP id g8JGTEFt008077; + Thu, 19 Sep 2002 17:29:14 +0100 +Received: from exchange2000.dsl.gtei.net (exchange.balokannw.com + [66.12.180.211] (may be forged)) by lugh.tuatha.org (8.12.3/8.9.3) with + ESMTP id g8JGS8Ft008051 for ; Thu, 19 Sep 2002 17:28:09 + +0100 +Received: from ciln.sg (w066.z064221110.nyc-ny.dsl.cnc.net + [64.221.110.66]) by exchange2000.dsl.gtei.net with SMTP (Microsoft + Exchange Internet Mail Service Version 5.5.2653.13) id TGJAMRMF; + Thu, 19 Sep 2002 07:45:43 -0700 +Message-Id: <0000414141bc$0000145a$00000b41@ark-la-tex.net> +To: , , , + , +Cc: , , + , , +From: carol_dip@hotmail.com +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +Reply-To: carol_dip@hotmail.com +Subject: [ILUG] Re: This is NO JOKE! Speed up your CPU for under $30! +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 19 Sep 2002 10:38:16 -1600 +Date: Thu, 19 Sep 2002 10:38:16 -1600 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + Take Control of Your Computer With This Top-of-the-Line Software! + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + Symantec SystemWorks 2002 + + -=Professional Software Suite=- + + +This Special Package Includes Six - Yes 6! - Feature-Packed Utilities + +ALL for 1 Special LOW Price of Only $29.99! + +This Software Will: + + - Protect your computer from unwanted and hazardous viruses + - Help secure your private & valuable information + - Allow you to transfer files and send e-mails safely + - Backup your ALL your data quick and easily + - Improve your PC's performance w/superior integral diagnostics! + - ***** You'll NEVER have to take your PC to the repair shop AGAIN! ***** + + That's SIX, yes, -6- Feature-Packed Utilities @ 1 Great Price!!! + + A $300+ Combined Retail Value YOURS Only $29.99! (Limited Time Offer) + < Price Includes FREE Shipping! > + + Why SO Cheap you ask? You are buying ONLINE WHOLESALE, + Direct from the Warehouse TO YOU! + + ~~~ AND ~~~ + + FOR A LIMITED TIME BUY 2 OF ANY SOFTWARE & GET 1 FREE!!!! + + + Don't fall prey to destructive viruses or programs! + Protect your computer and your valuable information and... + + + ...CLICK HERE TO ORDER NOW! -> http://61.151.247.39/erik/ + + OR cut & paste the above link ^^^^^^^^^^^^^^^^ in your browser's URL bar. + + + FOR MORE QUESTIONS, OR TO ORDER CALL US TOLL-FREE ANYTIME! + + 1 - 8 0 0 - 8 6 1 - 1 4 8 1 + + + + +We are strongly against sending unsolicited emails to those who do not wish to receive +our special mailings. You have opted-in to one or more of our affiliate sites requesting +to be notified of any special offers we may run from time to time. We also have attained +the services of an independent 3rd party to overlook list management and removal +services. The list CODE in which you are registered is marked at the bottom of this email. +If you do not wish to receive further mailings, + +Please click here -> http://61.151.247.39/erik/remove.asp to be removed from the list. + +Please accept our apologies if you have been sent this email in error. We honor all removal requests. + + +IAES (International Association of Email Security) Approved List. Serial # 9e45tYu2-ssI3USA + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00378.143069173c8ee0047916f124032367d1 b/Ch3/datasets/spam/spam/00378.143069173c8ee0047916f124032367d1 new file mode 100644 index 000000000..15045ba00 --- /dev/null +++ b/Ch3/datasets/spam/spam/00378.143069173c8ee0047916f124032367d1 @@ -0,0 +1,177 @@ +From cesarsimone@hotmail.com Thu Sep 19 17:52:05 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id A77F016F03 + for ; Thu, 19 Sep 2002 17:52:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 17:52:02 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JGjiC28646 for + ; Thu, 19 Sep 2002 17:45:44 +0100 +Received: from server.nwd.co.uk (mailgate.nwd.co.uk [62.49.171.82]) by + webnote.net (8.9.3/8.9.3) with ESMTP id RAA02471 for ; + Thu, 19 Sep 2002 17:46:08 +0100 +From: cesarsimone@hotmail.com +Received: from designmine.com (200.30.77.113 [200.30.77.113]) by + server.nwd.co.uk with SMTP (Microsoft Exchange Internet Mail Service + Version 5.5.2653.13) id TCAQGRX5; Tue, 17 Sep 2002 07:35:30 +0100 +Message-Id: <00005f670a47$00002b4f$00007773@fmjs.com> +To: , , , + , +Cc: , , + , , +Subject: Fwd: Norton makes the BEST software available, now ONLY $29.99! 32053 +Date: Tue, 17 Sep 2002 02:27:40 -1600 +MIME-Version: 1.0 +Reply-To: conquer44@hotmail.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Does Your Computer Need an Oil Change + + + + + + + + +
    Do + You Care About Your Computer?
    + + + + +
    Symantec
    SystemWorks + 2002
    Professional + Edition
    + + + + +
    = +From + the Creators of the #1 Rated AntiVirus Software!
    + + + + + +
    = +
    = +This + UNBEATABLE software suite comes with EVERY + program you'll ever need to answer the problems or threats that your + computer faces each day of it's Life!


    Included i= +n this magnificent deal + are the following programs:
    + + + + + +
    Norton + AntiVirus=FFFFFF99 2002 - THE #1 + ANTI-VIRUS PROTECION EVER!
    Norton Utilities=FFFFFF99 2002 + -
    DIAGNOSE ANY PROBLEM WI= +TH YOUR + SYSTEM!
    + Norton Ghost=FFFFFF99 2002 -
    MAKES + BACKING UP YOUR VALUABLE DATA EASY!
    + Norton CleanSweep=FFFFFF99 2002 -
    ELIMINATES EXCESS + DATA INSTANTLY!
    + Norton WinFax=FFFFFF99 Basic -
    TURNS YOUR + CPU INTO A FAX MACHINE!
    +
    + GoBack=FFFFFFAE 3 Personal - HELPS + PREVENT YOU FROM MAKING ANY MISTAKES!
    + + + + + +
    = +*ALL + this sells at the store for $99.95*
    Get it + NOW for ONLY $29.99!
    with + FREE SHIPPING!
    + + + + + +
    = +CLICK + HERE to order NOW!
    +

        &nbs= +p;    +Limited Time Offer. When we +run out it's gone, so get it while it's HOT!

    + + + + + +
    = +CALL + 1-800-861-1481 & ORDER NOW!
    +

     

    +

     

    + + + + +
    Your + email address was obtained from an opt-in list. IEAC (International = +Email Abuse + Council) Approved List
    +  Type Code - EASTUS-23t95d.  If you wish to be unsubs= +cribed from + this list, please Click + here. We do not condone spam in any shape or form. We appreciate= + your cooperation.
    + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00379.f04dedf09dce65a80fbe1fd831abefd0 b/Ch3/datasets/spam/spam/00379.f04dedf09dce65a80fbe1fd831abefd0 new file mode 100644 index 000000000..496790431 --- /dev/null +++ b/Ch3/datasets/spam/spam/00379.f04dedf09dce65a80fbe1fd831abefd0 @@ -0,0 +1,77 @@ +From social-admin@linux.ie Thu Sep 19 17:49:38 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 87C5416F03 + for ; Thu, 19 Sep 2002 17:49:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 19 Sep 2002 17:49:37 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JGM4C27587 for + ; Thu, 19 Sep 2002 17:22:04 +0100 +Received: from lugh.tuatha.org (list@localhost [127.0.0.1]) by + lugh.tuatha.org (8.12.3/8.9.3) with ESMTP id g8JGM5Ft007785; + Thu, 19 Sep 2002 17:22:05 +0100 +Received: from teleport3.azoogle.com (teleport3.azoogle.com + [66.197.170.6]) by lugh.tuatha.org (8.12.3/8.9.3) with SMTP id + g8JGLnFu007757 for ; Thu, 19 Sep 2002 17:21:50 +0100 +Received: from azoogle by teleport3.azoogle.com with local (Azoogle 2.1) + id 93-10429-1090346 for Social@Linux.Ie; Thu, 19 Sep 2002 16:21:48 GMT +Content-Type: text/plain; charset="us-ascii" +Content-Disposition: inline +Content-Transfer-Encoding: 7bit +MIME-Version: 1.0 +From: "You$25 GiftCard" +Reply-To: "You$25 GiftCard" +To: Social@linux.ie +Message-Id: <93-10429-1090346@teleport3.azoogle.com> +X-Info: please report abuse of this service to abuse@azoogle.com +Subject: [ILUG-Social] Claim Your $25 Kmart Gift Card +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Beenthere: social@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group social events +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Thu, 19 Sep 2002 16:21:48 GMT +Date: Thu, 19 Sep 2002 16:21:48 GMT + +1) Claim Your $25 Kmart Gift Card +http://www.adclick.ws/p.cfm?o=320&s=pk00001 + +2) Auto Loans, Fast Approvals for Any Credit! +http://www.adclick.ws/p.cfm?o=383&s=pk1 + +3) Are You Paying Too Much for Auto Insurance - Find Out? +http://www.adclick.ws/p.cfm?o=334&s=pk1 + +Have a Wonderful Day, +PrizeMama.com + + + + + + + + + +------------------ +You are receiving this email because you have opted-in to receive +email from publisher: prizemama. To unsubscribe, click below: + +http://u2.azoogle.com/?z=93-1090346-62lLC4 +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00380.a262abe251ca7cc3026e4e146d9cf817 b/Ch3/datasets/spam/spam/00380.a262abe251ca7cc3026e4e146d9cf817 new file mode 100644 index 000000000..717464b14 --- /dev/null +++ b/Ch3/datasets/spam/spam/00380.a262abe251ca7cc3026e4e146d9cf817 @@ -0,0 +1,304 @@ +From Special_Offer-09192002-HTML@frugaljoe.330w.com Fri Sep 20 11:41:00 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 68DA116F03 + for ; Fri, 20 Sep 2002 11:40:56 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:40:56 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JLiVC05050 for + ; Thu, 19 Sep 2002 22:44:31 +0100 +Received: from richard.330w.com (richard.330w.com [216.53.71.115]) by + webnote.net (8.9.3/8.9.3) with ESMTP id WAA03232 for ; + Thu, 19 Sep 2002 22:45:00 +0100 +Message-Id: <200209192145.WAA03232@webnote.net> +Received: by richard.330w.com (PowerMTA(TM) v1.5); Thu, 19 Sep 2002 + 16:28:25 -0400 (envelope-from + ) +From: Special_Offer@FrugalJoe.com +To: zzzz@spamassassin.taint.org +Subject: Unleash your PC's Multimedia POWER at 70% off retail! +Id-Frugaljoe: zzzz####spamassassin.taint.org +Date: Thu, 19 Sep 2002 16:28:25 -0400 +Content-Type: text/html + + + + + + + + + +
    +
    Never Pay Retail!
    + + + + + +
    + + + + + +
    + + + + +
    +
    + + + + + + + + + + + + + + + + + + + +
    Unleash + your PC's Multimedia power TODAY!
    +

    +
    +
    +
    + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Compare + and Save
      +
    Price
    +
    +
    S&H
    +
    +
    Total
    +
    +
    You + Save
    +
    +
    See + for yourself
    +
    +
    AMAZON
    +
    +
    $29.99
    +
    +
    $4.99
    +
    +
    $34.98
    +
    +
    70%
    +
    + +
    +
    CDW
    +
    +
    $29.21
    +
    +
    $7.53
    +
    +
    $36.74
    +
    +
    69%
    +
    + +
    +
    Office + Depot
    +
    +
    $28.99
    +
    +
    $5.95
    +
    +
    $34.94
    +
    +
    69%
    +
    + +
    +
    Office + Max
    +
    +
    $29.99
    +
    +
    $3.99
    +
    +
    $33.98
    +
    +
    70%
    +
    + +
    * + Comparisons are based on similar model from leading merchants. +
    +
    +
    + *Microsoft + Windows® approved and certified compatible with all major voice recognition + software.
      + + + + +

    + + + + +
    Unleash + your PC's Multimedia power TODAY with the + LABTEC® PATENTED NCAT2 noise cancelling-amplification + technology!
    +
    + Use your PC for long distance calls and SAVE + BIG! Activate your PC and all your programs USING + YOUR VOICE!
    +
    + Video Conference with your friends IN REAL TIME! Send VOICE + EMAIL or Chat worldwide over the Internet, LIVE! - even + record your voice & conversations LIKE THE PRO'S.

    +

    This is + THE best headset for your PC by the undisputed industry + leader, LABTEC® - Producing unmatched sound quality, + superior to any headset you've ever owned! The ultimate + in style and quality. Get yours today while they last! FAQ's

    +

    +
    +
    + + + + +
    +

    You can't get a better Headset + -- at a better price -- anywhere else!
    + You pay only: $8.99
    +

    +
    +
     
    + + + + + + + +
    + + + +
    + +You have received this email because you have subscribed + through one of our marketing partners. If you would like + to learn more about Frugaljoe.com then please visit our website + www.frugaljoe.com If this message was sent to you in error, or +if you + would like to unsubscribe please click here or +cut and paste the following link into a web browser:
    + http://www.frugaljoe.com/unsubscribe.php?eid=389099\~moc.cnietonten^^mj\~1754388\~12a1 +

    + + + diff --git a/Ch3/datasets/spam/spam/00381.7d436777379ad18167e4614190b206cf b/Ch3/datasets/spam/spam/00381.7d436777379ad18167e4614190b206cf new file mode 100644 index 000000000..916673666 --- /dev/null +++ b/Ch3/datasets/spam/spam/00381.7d436777379ad18167e4614190b206cf @@ -0,0 +1,40 @@ +From itshappening07@yahoo.co.uk Fri Sep 20 11:41:06 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0514B16F03 + for ; Fri, 20 Sep 2002 11:41:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:41:05 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JM4qC05575 for + ; Thu, 19 Sep 2002 23:04:52 +0100 +Received: from carbon (carbon.btinternet.com [194.73.73.92]) by + webnote.net (8.9.3/8.9.3) with ESMTP id XAA03276 for ; + Thu, 19 Sep 2002 23:05:24 +0100 +Received: from host213-122-181-128.in-addr.btopenworld.com + ([213.122.181.128] helo=Aromist) by carbon with esmtp (Exim 3.22 #8) id + 17s9IS-0003c0-00; Thu, 19 Sep 2002 22:57:17 +0100 +Message-Id: <4119-220029419215717166@Aromist> +To: "OPtinList" +From: "" +Subject: Definitely the answer many have been waiting for!! +Date: Thu, 19 Sep 2002 22:57:17 +0100 +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8JM4qC05575 +Content-Transfer-Encoding: 8bit + +================This Is Definitely the Answer We All Have Been Waiting For=============== + +Every once in awhile, something comes along that you just know, from the people involved, from the features, or just from gut-feeling, that it's going to be very special, something with huge potential and hope. When you know it, it rests deep in your bones, and it's hard not to get overly excited and scream it to the world, which is why I'm writing you today. Although this program is launching with all the potential of being as big as anything on the Internet, and you will soon see it advertised and promoted everywhere you go, I would like to give you an opportunity to get in early before the masses. Traditionally, there have been a couple of flaws to any MLM (multi-level marketing for you newcomers) that have made it difficult for programs to last after the initial hoopla. Today, we have launched the solution to those problems, the newest and most innovative system ever to hit Multi-level Marketing. With a new software system and an ingenious payplan, combined with a 100% payout, everyone comes out a winner. + + +The truth is, you've got to see it to believe it, so rather than feed you a lot of hype and tell you this is the miracle you've been looking for, the magic link that will end all your problems, or a lot of other things you don't need to hear, I'm just going to make you a very simple offer. Email me with 'Send Link' in the subject line to: itshappening@mail2world.com and I will provide the link so you can take a test drive, absolutely risk-free. You can get a birds-eye inside look, revealing the inner-workings of this revolutionary new discovery in online income opportunities. Should you decide you like what you see, you will have the option of activating your position, but that is completely at your option. This isn't a trick, I'm just so convinced that this is such a sound program and unique but solid opportunity that I don't want you to miss out on the chance to get an early position. With an explosive launch, positions will be filling up rapidly, and you have before you a chance to explore the program before diving in head first. If you're one of those cautious people (and who isn't these days on the Internet), that likes to "look before you leap" then here is your chance. Thank you for your time, and I hope you discover why we're all smiling!! + + +Please do not treat this message as spam. I am a professional and very successful networker with a data base of 100,000. I was pursueded to purchase this list containing 200,000 names of individuals, which is guaranteed to include only those people who have given their consent to receive information. I have not used this means of marketing before and frankly I am dubious about its validity. However, having spent an arm and a leg purchasing it I'm initially sending this message to just a small number of the email address's (2,000) to guage results. If you want more information I will happily supply the link without any obligation. But if its of no interest or you take exception to receiving this mail then please accept my apologies for the intrusion and delete the message immediately. As this is a one time mailing there is no need to respond with 'remove'. Thank you. + + diff --git a/Ch3/datasets/spam/spam/00382.98464d934c8402ef42e6dbdb07b18a65 b/Ch3/datasets/spam/spam/00382.98464d934c8402ef42e6dbdb07b18a65 new file mode 100644 index 000000000..1c1a89195 --- /dev/null +++ b/Ch3/datasets/spam/spam/00382.98464d934c8402ef42e6dbdb07b18a65 @@ -0,0 +1,104 @@ +From bellaii@hotmail.com Fri Sep 20 11:41:09 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 071EF16F03 + for ; Fri, 20 Sep 2002 11:41:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:41:08 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JMTYC06196 for + ; Thu, 19 Sep 2002 23:29:34 +0100 +Received: from fileserver.network.grayhome.org + (adsl-209-233-16-22.dsl.snfc21.pacbell.net [209.233.16.22]) by webnote.net + (8.9.3/8.9.3) with ESMTP id XAA03310 for ; + Thu, 19 Sep 2002 23:30:04 +0100 +From: bellaii@hotmail.com +Received: from fresh.com ([200.217.84.31]) by + fileserver.network.grayhome.org with Microsoft SMTPSVC(5.0.2195.4905); + Thu, 19 Sep 2002 08:25:01 -0700 +Message-Id: <000034122297$00007843$000036f5@fastransit.net.uk> +To: , , + , , + , , +Cc: , , + , , , + , +Subject: Re:[1]Save over $70 on this exquisite software suite. FTS +Date: Thu, 19 Sep 2002 11:35:19 -1600 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +Reply-To: adeb11@hotmail.com +X-Originalarrivaltime: 19 Sep 2002 15:25:03.0362 (UTC) FILETIME=[B9CA2E20:01C25FF0] + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + Take Control of Your Computer With This Top-of-the-Line Software! + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + Symantec SystemWorks 2002 + + -=Professional Software Suite=- + + +This Special Package Includes Six - Yes 6! - Feature-Packed Utilities + +ALL for 1 Special LOW Price of Only $29.99! + +This Software Will: + + - Protect your computer from unwanted and hazardous viruses + - Help secure your private & valuable information + - Allow you to transfer files and send e-mails safely + - Backup your ALL your data quick and easily + - Improve your PC's performance w/superior integral diagnostics! + - ***** You'll NEVER have to take your PC to the repair shop AGAIN! ***** + + That's SIX, yes, -6- Feature-Packed Utilities @ 1 Great Price!!! + + A $300+ Combined Retail Value YOURS Only $29.99! (Limited Time Offer) + < Price Includes FREE Shipping! > + + Why SO Cheap you ask? You are buying ONLINE WHOLESALE, + Direct from the Warehouse TO YOU! + + ~~~ AND ~~~ + + FOR A LIMITED TIME BUY 2 OF ANY SOFTWARE & GET 1 FREE!!!! + + + Don't fall prey to destructive viruses or programs! + Protect your computer and your valuable information and... + + + ...CLICK HERE TO ORDER NOW! -> http://61.151.247.39/erik/ + + OR cut & paste the above link ^^^^^^^^^^^^^^^^ in your browser's URL bar. + + + FOR MORE QUESTIONS, OR TO ORDER CALL US TOLL-FREE ANYTIME! + + 1 - 8 0 0 - 8 6 1 - 1 4 8 1 + + + + +We are strongly against sending unsolicited emails to those who do not wish to receive +our special mailings. You have opted-in to one or more of our affiliate sites requesting +to be notified of any special offers we may run from time to time. We also have attained +the services of an independent 3rd party to overlook list management and removal +services. The list CODE in which you are registered is marked at the bottom of this email. +If you do not wish to receive further mailings, + +Please click here -> http://61.151.247.39/erik/remove.asp to be removed from the list. + +Please accept our apologies if you have been sent this email in error. We honor all removal requests. + + +IAES (International Association of Email Security) Approved List. Serial # 9e45tYu2-ssI3USA + + diff --git a/Ch3/datasets/spam/spam/00383.1aa9a8211d1de540d6e3852e230e5a9d b/Ch3/datasets/spam/spam/00383.1aa9a8211d1de540d6e3852e230e5a9d new file mode 100644 index 000000000..f08241649 --- /dev/null +++ b/Ch3/datasets/spam/spam/00383.1aa9a8211d1de540d6e3852e230e5a9d @@ -0,0 +1,104 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Fri Sep 20 11:41:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 1D13516F03 + for ; Fri, 20 Sep 2002 11:41:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:41:11 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JN6PC07591 for + ; Fri, 20 Sep 2002 00:06:25 +0100 +Received: from TIPSMTP1.ADMANMAIL.COM (tipsmtp1.theadmanager.com + [66.111.219.130] (may be forged)) by webnote.net (8.9.3/8.9.3) with ESMTP + id AAA03368 for ; Fri, 20 Sep 2002 00:06:56 +0100 +Message-Id: <200209192306.AAA03368@webnote.net> +Received: from TIPUTIL2 (tiputil2.corp.tiprelease.com) by + TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id + <51.00000E7A@TIPSMTP1.ADMANMAIL.COM>; Thu, 19 Sep 2002 17:46:18 -0500 +Date: Thu, 19 Sep 2002 17:00:05 -0500 +From: Shannon +To: JM@NETNOTEINC.COM +Subject: Shipment Status +X-Info: 134085 +X-Info2: SGO +MIME-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + + +FREE* Liz Claiborne® Fragrance For The Fall + + + + + + + + + + + +
    + + + + +
    +

    Congratulations JM@NETNOTEINC.COM!

    + +

    Dear JM@NETNOTEINC.COM, + +

    You've been selected +to receive a bottle of Liz Claiborne® fragrance - FREE*. + +

    Perfect to wear for any occassion, Liz Claiborne® is a light floral fragrance with just a hint of fresh citrus and mandarin - you'll love it for the Fall Season!  Click here now and we'll send this refreshing scent right out to you. + +

    With only a few +bottles on hand, I know they won't last long. Guarantee your own good fortune - and click here to claim your very own bottle of Liz Claiborne® fragrance. + + +

    JM@NETNOTEINC.COM act now and click here for a one time only chance! + +

    Sincerely,
    + +
    +Shannon Jones
    + +

    P.S. Please feel +free to forward this great offer to a friend!

    +
    + + + + + + + +
    + +

    Special $1 Store on Thank-youGift has great products at an amazing price. Guaranteed first quality 100%. Satisfaction guaranteed or your money back.  Visit Thank-youGift to get in on all the bargains. + +

    +

    Visit Milesource.com - Get miles for just being online! A completely FREE, no obligation program that rewards members for doing the things you already do. Get FREE movie tickets, FREE videos, FREE gifts, even FREE airline tickets just for researching, reading the news, catching up on sports and shopping, even playing games! Visit Milesource.com NOW!

    + +

    *All offers are based on 100% customer satisfaction. Yourfreepresent reserves the right to cancel this offer any time once quantities run out. A handling charge of $5.93 will be applied to each item. All merchandise and offers are based on first come first serve. Offer not valid in the state of California and Washington. +

    + +T +
    + +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
    + + diff --git a/Ch3/datasets/spam/spam/00384.2054d62f06fd10e4018a43e156b32acf b/Ch3/datasets/spam/spam/00384.2054d62f06fd10e4018a43e156b32acf new file mode 100644 index 000000000..ee3068cd7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00384.2054d62f06fd10e4018a43e156b32acf @@ -0,0 +1,272 @@ +From sh@insiq.us Fri Sep 20 11:41:16 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 6654516F03 + for ; Fri, 20 Sep 2002 11:41:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:41:14 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JNQCC08107 for + ; Fri, 20 Sep 2002 00:26:13 +0100 +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by webnote.net (8.9.3/8.9.3) with ESMTP + id AAA03413 for ; Fri, 20 Sep 2002 00:26:43 +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Thu, 19 Sep 2002 19:17:11 -0400 +Subject: 5% Guaranteed for Eight Years +To: +Date: Thu, 19 Sep 2002 19:17:11 -0400 +From: "IQ - Safe Harbor" +Message-Id: +MIME-Version: 1.0 +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJgGwo5EoJ4EtCxSR+Z1+N1RrfGQg== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 19 Sep 2002 23:17:11.0921 (UTC) FILETIME=[AEED3E10:01C26032] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_81109_01C25FF9.832EE820" + +This is a multi-part message in MIME format. + +------=_NextPart_000_81109_01C25FF9.832EE820 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + Pocket the newest 8 year annuity! Pocket the newest 8 year +annuity! + ...from Safe Harbor Financial + 5% Guaranteed for 8 Years (effective yield) + 8 Year Surrender Period Please fax back contracts with +a copy of your insurance +license to 215-564-0155. +Click Here to Contract + Issued to Age 90 + A Rated Company + Alternative 10 Year Guaranteed Plan + +Call today for more information! + +- or - + +Please fill out the form below for more information +Name: +Address: +City: State: Zip: +Phone: Fax: +E-mail: + + + +We don't want anyone to receive our mailings who does not wish to +receive them. This is a professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: http://www.insuranceiq.com/optout + + +Legal Notice + +------=_NextPart_000_81109_01C25FF9.832EE820 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +5% Guaranteed for Eight Years + + + +=20 + + =20 + + + =20 + + +
    + + =20 + + + + + + + +
    3D"Pocket
    + + =20 + + + + + +
    + + =20 + + + + =20 + + + + + + =20 + + + + =20 + + + + =20 + + + +
    5% = +Guaranteed for 8 Years (effective = +yield)
    8 Year Surrender = +Period  + Please fax back = +contracts with
    + a copy of your insurance
    + license to 215-564-0155.
    + 3D"Click +
    Issued to Age 90
    A = +Rated Company
    Alternative 10 Year Guaranteed Plan
    +

    + Call today for more = +information!
    +
    + - or -

    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + +
    Please fill out = +the form below for more information
    Name:
    Address:
    City: =20 + +      State:=20 + +      Zip:=20 + +
    Phone:=20 + +      Fax:=20 + +
    E-mail:
      + + + +
    +
    +  
    +
    +

    We don't = +want anyone to receive our mailings who does not=20 + wish to receive them. This is a professional communication=20 + sent to insurance professionals. To be removed from this mailing=20 + list, DO NOT REPLY to this message. Instead, go here: =20 + http://www.insuranceiq.com/optout

    +
    +
    + Legal Notice =20 +
    +
    + + + + +------=_NextPart_000_81109_01C25FF9.832EE820-- + + diff --git a/Ch3/datasets/spam/spam/00385.51089b24dee5a89d38ee1b505b470c68 b/Ch3/datasets/spam/spam/00385.51089b24dee5a89d38ee1b505b470c68 new file mode 100644 index 000000000..76d327691 --- /dev/null +++ b/Ch3/datasets/spam/spam/00385.51089b24dee5a89d38ee1b505b470c68 @@ -0,0 +1,124 @@ +From foundmoney-3444431.13@linkgift.net Fri Sep 20 11:41:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 442AD16F03 + for ; Fri, 20 Sep 2002 11:41:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:41:18 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8K1LfC14966 for + ; Fri, 20 Sep 2002 02:21:41 +0100 +Received: from linkgift.com (obound03.linkgift.com [64.57.212.53] (may be + forged)) by webnote.net (8.9.3/8.9.3) with SMTP id CAA03610 for + ; Fri, 20 Sep 2002 02:22:12 +0100 +Message-Id: <200209200122.CAA03610@webnote.net> +Date: 19 Sep 2002 12:28:54 -0000 +X-Sender: linkgift.net +X-Mailid: 3444431.13 +Complain-To: abuse@linkgift.com +To: zzzz@spamassassin.taint.org +From: FoundMoney +Subject: zzzz, do we have your money? +Content-Type: text/html; + + + + + + + +
    +
    +
    + + + +
    + + + + + + + + + + + + + + + +
    +
    + + +



    +

    MarketingonTarget.com has teamed up + with FoundMoney to help you locate and claim your lost CASH. + The amount on that check, OR MORE, literally be YOURS for + the claiming. +  

    +

    This is not a contest or a promotion. FoundMoney is a search service dedicated to putting + UNCLAIMED MONEY together with its rightful + owners.


    +

    There are 31 + million North American people eligible right now to claim unknown + cash windfalls. The search is Fast, Easy and GAURANTEED 

    +

    Over BILLION is + sitting in our database alone, which contains bank and government accounts, wills and estates, insurance settlements etc.


    +

    Since 1994, our Web site + has reunited millions upon millions of dollars with thousands + of rightful owners -- who didn't even know  they + had money waiting for them.  +

    +

    Click here + NOW or on the link below to find out -- in seconds -- if there + is money waiting to be claimed in your family name or that of + somebody you know. The INITIAL SEARCH IS +FREE.

    +

    YOU HAVE NOTHING + TO LOSE .... 
    TRY + FOUNDMONEY TODAY 

    +

    CLICK HERE NOW!

    +

    Sincerely,
    LinkGift.com +

    +

    +

    +
    +

     

    +

     

    +

    You received this email because you signed up at one of LinkGift.com's websites or you signed up with a party that has contracted with LinkGift.com. To unsubscribe from our email newsletter, please visit http://opt-out.linkgift.net/?e=jm@netnoteinc.com. + + + + + diff --git a/Ch3/datasets/spam/spam/00386.6074f269f0bd1aec1546f9e654e8fcfe b/Ch3/datasets/spam/spam/00386.6074f269f0bd1aec1546f9e654e8fcfe new file mode 100644 index 000000000..674b4efc5 --- /dev/null +++ b/Ch3/datasets/spam/spam/00386.6074f269f0bd1aec1546f9e654e8fcfe @@ -0,0 +1,58 @@ +From sunday68@bluemail.dk Fri Sep 20 11:41:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 8FD3716F03 + for ; Fri, 20 Sep 2002 11:41:21 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:41:21 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8K3lHC19280 for + ; Fri, 20 Sep 2002 04:47:17 +0100 +Received: from bluemail.dk (host230-95.pool21756.interbusiness.it + [217.56.95.230]) by webnote.net (8.9.3/8.9.3) with SMTP id EAA04124; + Fri, 20 Sep 2002 04:47:45 +0100 +Date: Fri, 20 Sep 2002 04:47:45 +0100 +From: sunday68@bluemail.dk +Reply-To: +Message-Id: <004e01e10eca$6576b5b2$0dd22cc2@qtnqof> +To: paulifree@hotmail.com +Subject: FORTUNE 500 WORK AT HOME REPS NEEDED! +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: MIME-tools 5.503 (Entity 5.501) +Importance: Normal +Content-Transfer-Encoding: 8bit + +Immediate Help Needed. We are a fortune 500 company that is +growing at a tremendous rate of over 1000% per year. We simply cannot +keep up. We are looking for motivated individuals who are looking to +earn a substantial income working from home. + +This is a real opportunity to make an excellent income from home. No +experience is required. We will provide you with any training you may need. + +We are looking for energetic and self motivated people. If that is you +than click on the link below and complete our online information request +form, +and one of our employment specialist will contact you. + +http://ter.netblah.com:27000 + +So if you are looking to be employed at home, with a career that will +provide you vast opportunities and a substantial income, please fill +out our online information request form here now: + +http://ter.netblah.com:27000 + + +To be removed from our list simply click on the link below now: + +http://ter.netblah.com:27000 + +1631Pl5 + + diff --git a/Ch3/datasets/spam/spam/00387.8562ea27520ea0fa6030679792f2fb72 b/Ch3/datasets/spam/spam/00387.8562ea27520ea0fa6030679792f2fb72 new file mode 100644 index 000000000..7de9e7b01 --- /dev/null +++ b/Ch3/datasets/spam/spam/00387.8562ea27520ea0fa6030679792f2fb72 @@ -0,0 +1,48 @@ +From davrem@btamail.net.cn Fri Sep 20 11:41:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 2E23916F03 + for ; Fri, 20 Sep 2002 11:41:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:41:24 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8K6qWC26061 for + ; Fri, 20 Sep 2002 07:52:33 +0100 +Received: from nigaserver2.nigasoft.com (rrcs-se-24-129-185-122.biz.rr.com + [24.129.185.122]) by webnote.net (8.9.3/8.9.3) with ESMTP id HAA04458 for + ; Fri, 20 Sep 2002 07:53:03 +0100 +From: davrem@btamail.net.cn +Message-Id: <200209200653.HAA04458@webnote.net> +Received: from smtp0221.mail.yahoo.com + (24-205-239-139.slo-cres.charterpipeline.net [24.205.239.139]) by + nigaserver2.nigasoft.com with SMTP (Microsoft Exchange Internet Mail + Service Version 5.5.2653.13) id R7TB34PT; Thu, 19 Sep 2002 20:53:35 -0400 +Date: Thu, 19 Sep 2002 20:40:45 -0700 +X-Priority: 3 +To: dpreware@netnoir.net +Subject: Email marketing info +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Type: text/html; charset=us-ascii + + +Untitled + + +Would you like to advertise your website inexpensively?

    Would you +like Double Opt-in Email for as little as $1 CPM (cost per +thousand)?

    We have over 40 million Double Opt-in emails.
    * All Emails +are Double Opt-In
    * Email contains only your advertisement
    * Email a Web +Page (HTML) or Text Message
    * All Emails sent within 72 hours
    * Get +Immediate Results

    Call 954.757.3869 for more info

    Member +Services - You are receiving this email because you signed up, as a member and +are currently subscribed to receive special offers from us or one of our +affiliates. This message was not sent to you unsolicited. If you do not want to +receive future offers from us click below and type 'remove' in the subject line. +
    Unsubscribe + + + diff --git a/Ch3/datasets/spam/spam/00388.53eae0055e66fcb7194f9cca080fdefe b/Ch3/datasets/spam/spam/00388.53eae0055e66fcb7194f9cca080fdefe new file mode 100644 index 000000000..bbbaa4f49 --- /dev/null +++ b/Ch3/datasets/spam/spam/00388.53eae0055e66fcb7194f9cca080fdefe @@ -0,0 +1,62 @@ +From debt_collectors@ns1.chmailnet.com Fri Sep 20 11:41:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id A839D16F03 + for ; Fri, 20 Sep 2002 11:41:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:41:26 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8K8r6C29440 for + ; Fri, 20 Sep 2002 09:53:06 +0100 +Received: from jag2.sus.edu (suswall.sus.edu [192.195.100.102]) by + webnote.net (8.9.3/8.9.3) with ESMTP id JAA04768 for ; + Fri, 20 Sep 2002 09:53:37 +0100 +Message-Id: <200209200853.JAA04768@webnote.net> +Received: from plain (suswall.sus.edu [10.20.1.2]) by jag2.sus.edu with + SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2650.21) id + T10WVDTZ; Fri, 20 Sep 2002 01:01:33 -0500 +From: zzzz@netscape.net +Reply-To: debt_collectors@ns1.chmailnet.com +To: zzzz@netscape.net +Subject: Collect Your Money! Time:1:30:33 AM +Date: Fri, 20 Sep 2002 01:30:33 +MIME-Version: 1.0 +Content-Type: text/plain; charset="DEFAULT" + +PROFESSIONAL, EFFECTIVE DEBT COLLECTION SERVICES AVAILABLE + +For the last seventeen years, National Credit Systems, Inc. has been providing +top flight debt collection services to over 15,000 businesses, institutions, and +healthcare providers. + +We charge only a low-flat fee (less than $20) per account, and all proceeds are +forwarded to you directly -- not to your collections agency. + +If you wish, we will report unpaid accounts to Experian (formerly TRW), +TRANSUNION, and Equifax. There is no charge for this important service. + +PLEASE LET US KNOW IF WE CAN BE OF SERVICE TO YOU. + +Simply reply to debt_collectors@chmailnet.com with the following instructions +in the Subject field - + +REMOVE -- Please remove me from your mailing list. +EMAIL -- Please email more information. +FAX -- Please fax more information. +MAIL -- Please snailmail more information. +CALL -- Please have a representative call. + +Indicate the best time to telephone and any necessary addresses and +telephone/fax numbers in the text of your reply. + +If you prefer you can always telephone us during normal business hours +at (212) 213-3000 Ext 1425. + +Thank you. + +P.S. -- If you are not in need of our services at this time, please retain this +message for future use or past it on to a friend. + + diff --git a/Ch3/datasets/spam/spam/00389.6222f886a2658f890c49f1853beea193 b/Ch3/datasets/spam/spam/00389.6222f886a2658f890c49f1853beea193 new file mode 100644 index 000000000..3ca8e7ae5 --- /dev/null +++ b/Ch3/datasets/spam/spam/00389.6222f886a2658f890c49f1853beea193 @@ -0,0 +1,96 @@ +From wequitychambers@caramail.com Fri Sep 20 11:41:36 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id B6DA716F03 + for ; Fri, 20 Sep 2002 11:41:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:41:34 +0100 (IST) +Received: from mail1.caramail.com (mail1.caramail.com [213.193.13.92]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8KANbC32475 for + ; Fri, 20 Sep 2002 11:23:37 +0100 +Received: from caramail.com (www45.caramail.com [213.193.13.55]) by + mail1.caramail.com (Postfix) with SMTP id 5E8C013A0E; Fri, 20 Sep 2002 + 12:15:38 +0200 (DST) +From: equitychambers williams falana +To: williams.falana@caramail.com +Message-Id: <1032516937019036@caramail.com> +X-Mailer: Caramail - www.caramail.com +X-Originating-Ip: [192.116.122.187] +MIME-Version: 1.0 +Subject: Funds Investment +Date: Fri, 20 Sep 2002 12:15:37 GMT+1 +Content-Type: multipart/mixed; boundary="=_NextPart_Caramail_0190361032516937_ID" + +This message is in MIME format. Since your mail reader does not understand +this format, some or all of this message may not be legible. + +--=_NextPart_Caramail_0190361032516937_ID +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit + +SENIOR ADVOCATE OF NIGERIA +BARR. WILLIAMS FALANA (SAN) + +Dear Sir, + +I am Barrister Williams Falana a member of Nigeria Bar +Association (NBA).Your contact reached me through the World +Business Encyclopaedia.Hence,I made up my mind to introduce +this business to you in confidence for the mutual benefit +of both of us. + +The sum of USD48M (Forty eight Million United States) was +lodged into a security company here in the Country by the +late Head of State (GEN.SANI ABACHA) for safe-keeping. This +money was lodged in security vaults / boxes and labelled as +personal belongings and as such the security company does +not know the true content of the boxes.This money was +originally meant to be used for his political campaign. +Because I was his family Attorney as such he confided in me +with the relevant document papers relating to this deposit +before he died of cardiac arrest. + +As a matter of fact we have concluded all arrangement with +an offshore Security Company to move this money as a +consignment through diplomatic means to their offshore +affiliated office where you will be required to put claim +to the consignment as the bonafide beneficiary of the +consignment. You should know that this business is safety +and 100% risk-free as it does not involve drug money or +Terrorist fund. + +If you are interested to carry out this transaction with +me, 20% will be for you for your assistance, 5% for general +expenses, and 75% for us. + +You are required to send by e-mail immediately your Full +name and Address, which I will use to draft an agreement +that will guide and protect both of us in this transaction +also which will be used to effect the change of ownership +of the consignment to your name as the beneficiary of the +consignment. + +Also send me your Telephone and Fax numbers for easy +communication + +Once you notify me your willingness by sending the above +requirement.This transaction will be concluded within 7 +(seven) working days. + +I will be waiting for your urgent reply.You can reach me on +my Cell Telephone No: 234-80- 33055024 or my alternative E- +mail: williamsfalana@caramail.com + +Best regards, +Barrister Williams Falana {SAN} + +_________________________________________________________ +Envoyez des messages musicaux sur le portable de vos amis + http://mobile.lycos.fr/mobile/local/sms_musicaux/ + + +--=_NextPart_Caramail_0190361032516937_ID-- + + diff --git a/Ch3/datasets/spam/spam/00390.ce19abc8034db9e6b435d494a91db87a b/Ch3/datasets/spam/spam/00390.ce19abc8034db9e6b435d494a91db87a new file mode 100644 index 000000000..f9996bebf --- /dev/null +++ b/Ch3/datasets/spam/spam/00390.ce19abc8034db9e6b435d494a91db87a @@ -0,0 +1,96 @@ +From wequitychambers@caramail.com Fri Sep 20 11:41:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id A116816F03 + for ; Fri, 20 Sep 2002 11:41:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:41:37 +0100 (IST) +Received: from mail1.caramail.com (mail1.caramail.com [213.193.13.92]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8KAdpC00581 for + ; Fri, 20 Sep 2002 11:39:51 +0100 +Received: from caramail.com (www45.caramail.com [213.193.13.55]) by + mail1.caramail.com (Postfix) with SMTP id 28A9413D9E; Fri, 20 Sep 2002 + 12:29:01 +0200 (DST) +From: equitychambers williams falana +To: williams.falana@caramail.com +Message-Id: <1032517739022942@caramail.com> +X-Mailer: Caramail - www.caramail.com +X-Originating-Ip: [192.116.122.187] +MIME-Version: 1.0 +Subject: Funds Investment +Date: Fri, 20 Sep 2002 12:28:59 GMT+1 +Content-Type: multipart/mixed; boundary="=_NextPart_Caramail_0229421032517739_ID" + +This message is in MIME format. Since your mail reader does not understand +this format, some or all of this message may not be legible. + +--=_NextPart_Caramail_0229421032517739_ID +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit + +SENIOR ADVOCATE OF NIGERIA +BARR. WILLIAMS FALANA (SAN) + +Dear Sir, + +I am Barrister Williams Falana a member of Nigeria Bar +Association (NBA).Your contact reached me through the World +Business Encyclopaedia.Hence,I made up my mind to introduce +this business to you in confidence for the mutual benefit +of both of us. + +The sum of USD48M (Forty eight Million United States) was +lodged into a security company here in the Country by the +late Head of State (GEN.SANI ABACHA) for safe-keeping. This +money was lodged in security vaults / boxes and labelled as +personal belongings and as such the security company does +not know the true content of the boxes.This money was +originally meant to be used for his political campaign. +Because I was his family Attorney as such he confided in me +with the relevant document papers relating to this deposit +before he died of cardiac arrest. + +As a matter of fact we have concluded all arrangement with +an offshore Security Company to move this money as a +consignment through diplomatic means to their offshore +affiliated office where you will be required to put claim +to the consignment as the bonafide beneficiary of the +consignment. You should know that this business is safety +and 100% risk-free as it does not involve drug money or +Terrorist fund. + +If you are interested to carry out this transaction with +me, 20% will be for you for your assistance, 5% for general +expenses, and 75% for us. + +You are required to send by e-mail immediately your Full +name and Address, which I will use to draft an agreement +that will guide and protect both of us in this transaction +also which will be used to effect the change of ownership +of the consignment to your name as the beneficiary of the +consignment. + +Also send me your Telephone and Fax numbers for easy +communication + +Once you notify me your willingness by sending the above +requirement.This transaction will be concluded within 7 +(seven) working days. + +I will be waiting for your urgent reply.You can reach me on +my Cell Telephone No: 234-80- 33055024 or my alternative E- +mail: williamsfalana@caramail.com + +Best regards, +Barrister Williams Falana {SAN} + +_________________________________________________________ +Envoyez des messages musicaux sur le portable de vos amis + http://mobile.lycos.fr/mobile/local/sms_musicaux/ + + +--=_NextPart_Caramail_0229421032517739_ID-- + + diff --git a/Ch3/datasets/spam/spam/00391.e2c76e9dc5ef65b90275138f73eb475b b/Ch3/datasets/spam/spam/00391.e2c76e9dc5ef65b90275138f73eb475b new file mode 100644 index 000000000..3c8aa900f --- /dev/null +++ b/Ch3/datasets/spam/spam/00391.e2c76e9dc5ef65b90275138f73eb475b @@ -0,0 +1,185 @@ +From info@sesystems.co.uk Fri Sep 20 11:24:01 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id EA24B16F03 + for ; Fri, 20 Sep 2002 11:23:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:23:45 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8JHReC30210 for + ; Thu, 19 Sep 2002 18:27:40 +0100 +Received: from FUSMTA02-LRS (mta02.btfusion.com [62.172.195.247]) by + webnote.net (8.9.3/8.9.3) with ESMTP id SAA02593 for ; + Thu, 19 Sep 2002 18:28:11 +0100 +Received: from [217.37.142.177] (helo=sesystems.co.uk) by FUSMTA02-LRS + with smtp (Exim 4.05) id 17s52J-0006fZ-00 for zzzz@spamassassin.taint.org; + Thu, 19 Sep 2002 18:24:19 +0100 +From: "SE Systems Ltd" +To: +Subject: Lease Deal +Sender: "SE Systems Ltd" +MIME-Version: 1.0 +Content-Type: text/html; charset="ISO-8859-1" +Date: Thu, 19 Sep 2002 18:24:11 +0100 +Reply-To: "SE Systems Ltd" +Content-Transfer-Encoding: 8bit +Message-Id: + + + + + + + + + +Latest news and information + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + +
    +

    + + Leasing Deal of the Year
    +
    + Mercedes-Benz + E240 (2.6) Elegance Auto

    +

    +

    +
    +

    + + Specification includes: Automatic, Metallic Paint, Alloy +Wheels, + Electric Windows, Remote Central Locking, Electric Folding + Mirrors, Trip computer, Air Conditioning, Headlamp Wash, +Rear + Head Restraints, Tinted Windows and Wood +Trim

    +

    +  £299.00 + per month 2 years (3+23)
    + £276.70
    +per + month +3 + years (3+35)

    +

    + Used 2001 + Registered 01 “Y” +&  01 “51” + plates (sub12,000miles)
    +
    + 10,000 miles per year, PCP, PCH, Contract Purchase and +Finance + Lease are also available on request

    +
    +

    +  

    +
    +

    + + Telephone: 01702 530174     Fax: +01702 530200 +

    + + Email: +sales@sesystems.co.uk
    +
    +
    + + + + + + diff --git a/Ch3/datasets/spam/spam/00392.ffefdd973d6b1bf1243937030e3bd07f b/Ch3/datasets/spam/spam/00392.ffefdd973d6b1bf1243937030e3bd07f new file mode 100644 index 000000000..bd4e1eb2c --- /dev/null +++ b/Ch3/datasets/spam/spam/00392.ffefdd973d6b1bf1243937030e3bd07f @@ -0,0 +1,71 @@ +From social-admin@linux.ie Fri Sep 20 11:30:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E569F16F03 + for ; Fri, 20 Sep 2002 11:30:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:30:51 +0100 (IST) +Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8K9xGC31621 for + ; Fri, 20 Sep 2002 10:59:16 +0100 +Received: from lugh.tuatha.org (list@localhost [127.0.0.1]) by + lugh.tuatha.org (8.12.3/8.9.3) with ESMTP id g8K9xRFt005300; + Fri, 20 Sep 2002 10:59:27 +0100 +Received: from teleport8.azoogle.com (teleport8.azoogle.com + [66.197.170.11]) by lugh.tuatha.org (8.12.3/8.9.3) with SMTP id + g8K9wJFu005206 for ; Fri, 20 Sep 2002 10:58:19 +0100 +Received: from azoogle by teleport8.azoogle.com with local (Azoogle 2.1) + id 93-10505-1090346 for Social@Linux.Ie; Fri, 20 Sep 2002 09:58:19 GMT +Content-Type: text/plain; charset="us-ascii" +Content-Disposition: inline +Content-Transfer-Encoding: 7bit +MIME-Version: 1.0 +From: "Flush Fat Away Forever" +Reply-To: "Flush Fat Away Forever" +To: Social@linux.ie +Message-Id: <93-10505-1090346@teleport8.azoogle.com> +X-Info: please report abuse of this service to abuse@azoogle.com +Subject: [ILUG-Social] Lose 22.5lbs in 3 weeks! +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Beenthere: social@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group social events +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 20 Sep 2002 09:58:19 GMT +Date: Fri, 20 Sep 2002 09:58:19 GMT + +1) Lose 22.5lbs in 3 weeks! +Flush Fat Away Forever! Free 30-Day Supply +http://www.adclick.ws/p.cfm?o=423&s=pk19 + +2) Introducing Chase Platinum for Students +With a 0% Introductory APR +http://www.adclick.ws/p.cfm?o=421&s=pk19 + +3) Access Your PC From Anywhere - Download Now +http://www.adclick.ws/p.cfm?o=425&s=pk19 + +Have a Wonderful day, +PrizeMama + +------------------ +You are receiving this email because you have opted-in to receive +email from publisher: prizemama. To unsubscribe, click below: + +http://u2.azoogle.com/?z=93-1090346-62lLC4 +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00393.13d4d84cb98ea19954f895c629520bf8 b/Ch3/datasets/spam/spam/00393.13d4d84cb98ea19954f895c629520bf8 new file mode 100644 index 000000000..1e6a1682a --- /dev/null +++ b/Ch3/datasets/spam/spam/00393.13d4d84cb98ea19954f895c629520bf8 @@ -0,0 +1,48 @@ +From yourhealth@hottmail.com Fri Sep 20 11:41:32 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0C01C16F03 + for ; Fri, 20 Sep 2002 11:41:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 11:41:31 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8K9pEC31325 for + ; Fri, 20 Sep 2002 10:51:15 +0100 +Received: from 61.185.90.76 ([195.191.54.162]) by webnote.net + (8.9.3/8.9.3) with SMTP id KAA05000 for ; + Fri, 20 Sep 2002 10:51:27 +0100 +Message-Id: <200209200951.KAA05000@webnote.net> +Received: from mailout2-eri1.midsouth.rr.com ([110.220.177.171]) by + rly-xr01.mx.aol.com with NNFMP; Sep, 20 2002 2:29:37 AM -0800 +Received: from 192.249.166.5 ([192.249.166.5]) by rly-xw05.mx.aol.com with + NNFMP; Sep, 20 2002 1:42:39 AM -0800 +Received: from [110.188.46.152] by mta05bw.bigpond.com with QMQP; + Sep, 20 2002 12:24:34 AM +0600 +From: $$$$SAVE$$$$$ +To: zzzz@spamassassin.taint.org +Cc: +Subject: FREE Health Insurance Quotes +Sender: $$$$SAVE$$$$$ +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Fri, 20 Sep 2002 02:50:56 -0700 +X-Mailer: Microsoft Outlook IMO Build 9.0.2416 (9.0.2910.0) +X-Priority: 1 + +NEED Health Insurance? + In addition to featuring the largest selection of major medical +health plans from leading companies, our service also +offers a wide selection of quality dental plans. You can obtain +FREE instant quotes, side-by-side comparisons, the best available +prices, online applications, and a knowledgeable Customer Care +team to help you find the plan that is right for you. +If you would like more information please email +surefiremarketing@btamail.net.cn?subject=healthinsurance +with "Send me health insurance info" in the body of the email +*************************************************************** +If you do not wish to correspond with us, reply to +surefiremarketing@btamail.net.cn with remove as your subject. + + diff --git a/Ch3/datasets/spam/spam/00394.cca39f925676ecca947eaed2b600fe70 b/Ch3/datasets/spam/spam/00394.cca39f925676ecca947eaed2b600fe70 new file mode 100644 index 000000000..024ccf065 --- /dev/null +++ b/Ch3/datasets/spam/spam/00394.cca39f925676ecca947eaed2b600fe70 @@ -0,0 +1,82 @@ +From yhdiana99b@lycos.com Fri Sep 20 14:16:18 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 7B96416F03 + for ; Fri, 20 Sep 2002 14:16:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 14:16:18 +0100 (IST) +Received: from 195.191.54.162 ([195.191.54.162]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g8KDAlC06039 for ; + Fri, 20 Sep 2002 14:10:48 +0100 +Message-Id: <200209201310.g8KDAlC06039@dogma.slashnull.org> +Received: from 152.74.145.157 ([152.74.145.157]) by hd.regsoft.net with + esmtp; Feb, 20 2002 14:48:58 +0400 +Received: from 177.139.227.166 ([177.139.227.166]) by sparc.isl.net with + QMQP; Feb, 20 2002 13:55:48 -0100 +Received: from unknown (HELO mail.gmx.net) (171.245.226.233)by + rly-xl04.mx.aol.com with local; Feb, 20 2002 12:47:03 +0600 +From: uvfsPepperl +To: zzzz@spamassassin.taint.org +Cc: +Subject: .. kennst mich noch ? nehrb +Sender: uvfsPepperl +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Wed, 20 Feb 2002 15:15:14 +0100 +X-Mailer: QUALCOMM Windows Eudora Version 5.1 + +Hallo, + +Wir haben uns schon ziemlich lange nicht mehr gesehen, a ich ja nur noh Zeit für meine Freundin hatte. +DAMIT ist jetzt Schluß. + +Alex hat mich sitzen lassen. Du erhälst dieses Mail, weil ich Dir mal zeigen will, wie die Kleine wirklich so drauf ist. +Ich hab jetzt vor lauter Wut eine eigene Homepage gebastelt, da kannste mal was sehen: +http://alexandra.hobby.privatseite.to + +Wie findest Du das ? + +lg +Peter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +gcoakgwnibgafjecarccjbjiiqlluijseublait + + diff --git a/Ch3/datasets/spam/spam/00395.f9df5b3574ef5ba6143c08a1fa301886 b/Ch3/datasets/spam/spam/00395.f9df5b3574ef5ba6143c08a1fa301886 new file mode 100644 index 000000000..a2451b3ad --- /dev/null +++ b/Ch3/datasets/spam/spam/00395.f9df5b3574ef5ba6143c08a1fa301886 @@ -0,0 +1,102 @@ +From mortgage_quotes_fast@nationwidemortgage.us Fri Sep 20 14:18:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E015516F03 + for ; Fri, 20 Sep 2002 14:18:41 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 14:18:41 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8KCxZC05646 for + ; Fri, 20 Sep 2002 13:59:39 +0100 +Received: from rack3.easydns.com (rack3.easydns.com [205.210.42.50]) by + webnote.net (8.9.3/8.9.3) with ESMTP id OAA06088 for ; + Fri, 20 Sep 2002 14:00:06 +0100 +From: mortgage_quotes_fast@nationwidemortgage.us +Received: from mortgages101.net (mail4.mortgages101.net [4.38.36.3]) by + rack3.easydns.com (Postfix) with SMTP id 0063B4AEE8 for + ; Fri, 20 Sep 2002 09:00:03 -0400 (EDT) +To: +Subject: Adv: Mortgage Quotes Fast Online, No Cost +Message-Id: <20020920130003.0063B4AEE8@rack3.easydns.com> +Date: Fri, 20 Sep 2002 09:00:03 -0400 (EDT) +Content-Type: text/html + + + + +Home Page + + + + +

    + +

    If this promotion has reached you in error and you would prefer not to +receive marketing messages from us, please send an email to  cease-and-desist@mortgages101.net +  (all one word, no spaces) giving us the email address in question or call +1-888-748-7751 for further assistance.

    + +

    Gain access to a Vast Network Of Qualified Lenders at Nationwide Network!

    + +

    This is a zero-cost service which +enables you to shop for a mortgage conveniently from your home computer.   Our +nationwide database will give you access to lenders with a variety of loan programs that +will work for Excellent, Good, Fair or even Poor Credit!
    We will choose up to 3 mortgage companies +from our database of  registered brokers/lenders. Each will contact you to offer you their best rate and terms - at +no charge.

    You choose the best +offer and save - Shop here for your next mortgage with just ONE +CLICK -

    +
    Poor or Damaged Credit Is +Not A Problem!

    + +
      +

      Consolidate & pay + off high interest bills for one lower monthly payment!  +

      +

      Refinance (with or + without cash out) to a low FIXED rate and payment! +

      +

      Get money to cover + expenses for tuitions, home + improvements, a new vehicle or vacations.

      +

      - Talk with up to three of our lenders today! + VISIT OUR SITE HERE! to get no-cost rate and payment quotes.  + This service is completely FREE to you!

      +
    + + +

     

    +
    + +

    If this promotion has reached you in error +and you do not want to be contacted by us further, click here and let us know.  You +will not be bothered by us at this email address again.  Alternatively, you may send +an email to cease-and-desist@mortgages101.net + giving us the email address in question for IMMEDIATE attention.  Should you +wish to delete your email address from our mailing list by phone, please call +1-888-748-7751 and leave your email address - please spell your email address +clearly.   You may also mail a written request to us at Compliance, NMLN, 3053 +Rancho Vista Blvd. #H-252, Palmdale, CA, 93551.  Your request will be honored within +24 hours of our receipt of your mail.  Failure to exclude yourself from our recurring +mailer via any of the lawful channels provided means that you have given your consent to +be included in our mailer.  You will continue to receive email as long as you do NOT +delete yourself from our mailer.  Please do not continue to receive unwanted email +after we have provided you with lawful means to be excluded.  We log, date and retain +ALL delete requests.  NO PART OF THIS STATEMENT MAY BE AMENDED OR ELIMINATED.  +Thank you.

    + + + + + diff --git a/Ch3/datasets/spam/spam/00396.6fc0d31374c02ec5614f503a09a37211 b/Ch3/datasets/spam/spam/00396.6fc0d31374c02ec5614f503a09a37211 new file mode 100644 index 000000000..77d197b9f --- /dev/null +++ b/Ch3/datasets/spam/spam/00396.6fc0d31374c02ec5614f503a09a37211 @@ -0,0 +1,185 @@ +From ellebt@hotmail.com Fri Sep 20 17:36:05 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id A469016F03 + for ; Fri, 20 Sep 2002 17:36:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 17:36:02 +0100 (IST) +Received: from server2k.TISWorld.com ([4.41.176.180]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8KFivC11606 for + ; Fri, 20 Sep 2002 16:44:58 +0100 +Received: from chastney.demon.co.uk (66-0-177-154.deltacom.net + [66.0.177.154]) by server2k.TISWorld.com with SMTP (Microsoft Exchange + Internet Mail Service Version 5.5.2653.13) id STA9WDQF; Fri, + 20 Sep 2002 03:03:16 -0700 +Message-Id: <000029de097e$00000b1a$000006f0@avalonprinting.com> +To: , , + , , + , , , + , +Cc: , , + , , + , , + , , + , +From: ellebt@hotmail.com +Subject: Re: Ink Prices Got You Down? 11956 +Date: Fri, 20 Sep 2002 06:03:11 -1600 +MIME-Version: 1.0 +Reply-To: ellebt@hotmail.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Would You Like to Save up to 80 + + + + +
    +
    + + + + + +
    Would You Like to + Save up to 80% + on Printer, Fax + & = +Copier Suppl= +ies?
    +
    +
    +
    +
    + + + + + + + + +
    On + Brands Like -><= +font face=3D"Tahoma" size=3D"5" color=3D"#FFFFFF">EPSONCanon<= +i>HEWLETT + PACKARD= +Lexmark + & + more!
    +
    +
    +
    +
    + + + + + + + + + + +
    100% + Quality Satisfaction Guarantee or Your Money Back!
    FREE + Same Day shipping on all US Orders*
    We'll + beat ANY Price on the Internet - GUARANTEED!**
    +
    +
    + +
    +
    + + + + +
    OR + Call us Toll-Free at 1-800-758-8084!
    +
    +
    +
    +

     

    +

     

    +
    +
    + + + + +
    *Free Shipping only on + orders of $40 or more.
    **We beat any online retailer's price by= + 5%. + Call us with the URL (Website) advertising the lower price and onc= +e we + verify the price, we will beat it by 5%! (Must be same manufacture= +r)
    +
    +
    +
    +
    + + + + +
    You + are receiving this special offer because you have provided permiss= +ion to + receive email communications regarding special online promotions o= +r + offers. If you feel you have received this message in error, or wi= +sh to + be removed from our subscriber list, Click + HERE . Thank You and we apologize for ANY inconvenience.
    +
    +
    + + + + + + + diff --git a/Ch3/datasets/spam/spam/00397.1a99f98a5b996f99f3661e9609782932 b/Ch3/datasets/spam/spam/00397.1a99f98a5b996f99f3661e9609782932 new file mode 100644 index 000000000..3578cc94a --- /dev/null +++ b/Ch3/datasets/spam/spam/00397.1a99f98a5b996f99f3661e9609782932 @@ -0,0 +1,36 @@ +From market@chinaemail.net Fri Sep 20 17:36:06 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 3BC5B16F16 + for ; Fri, 20 Sep 2002 17:36:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 17:36:06 +0100 (IST) +Received: from chinaemail.net ([218.24.66.155]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8KG0wC12294 for ; + Fri, 20 Sep 2002 17:01:00 +0100 +Message-Id: <200209201601.g8KG0wC12294@dogma.slashnull.org> +From: =?GB2312?B?yKvH8kVNQUlMtdjWt8/6ytvN+A==?= +Subject: =?GB2312?B?NTDUqrvxtcPSu9LazuXHp83yRU1BSUy12Na3tcS7+rvh?= +To: fma@zzzzason.org +Reply-To: market@chinaemail.net +Date: Thu, 20 Sep 2001 23:58:15 +0800 +X-Priority: 2 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +Content-Type: text/html;charset="GB2312" + +ÄúºÃ£º + Èç¹û´ËÐÅ´òÈŵ½Äú£¬ÎÒÃÇÉî¸Ð±§Ç¸£¬Ç뽫´ËÐÅɾ³ý¡£ + Èç¹ûÄúÐèÒª½øÐÐÆóÒµÍøÕ¾ÍÆ¹ã»òÕß²úÆ·ÐÅÏ¢·¢²¼£¬EMAILÓªÏúÊÇÄú½øÐÐÍøÉϵç×ÓÉÌÎñ + ²»¿É±ÜÃâµÄÒ»Ï×÷¡£¾ßCNNIC2002Äê¾ÅÔÂ×îе÷²é25%µÄ¿Í»§Á˽âÐÂÐÅÏ¢µÄÀ´Ô´ÎªEMAIL£¬ + EMAIL¹ã¸æÓªÏúÕý³ÉΪ×îÁ®¼ÛºÍ×îʵÓõķ½·¨¡£ + ¡¶È«ÇòEMAILµØÖ·ÏúÊÛÍø¡·3ÄêÀ´ÖÂÁ¦ÓÚÖйúµç×ÓÉÌÎñµÄ·¢Õ¹ºÍÍÆ¹ã£¬Îª¿Í»§Ìṩ²»Í¬ + µÄ·þÎñ£¬¿Í»§±é¼°20¶à¸öÊ¡Êк͵ØÇø¡£ + + Èç¹ûÄú²»Ï£Íû×Ô¼º±»µç×ÓÉÌÎñÔ¶Ô¶µÄ˦ÔÚºóÃæ£¬ÇëÄú¼°Ê±µÄ·ÃÎÊÎÒÃǵÄÍøÕ¾ + http://www.chinaemail.net »ñµÃ×îÐÂ×ÊÁÏ¡£ + + È«ÇòEMAILµØÖ·ÏúÊÛÍø Êг¡²¿ + + diff --git a/Ch3/datasets/spam/spam/00398.1939605e3c713ff2ef852b1fbf10b0bb b/Ch3/datasets/spam/spam/00398.1939605e3c713ff2ef852b1fbf10b0bb new file mode 100644 index 000000000..120e8bc52 --- /dev/null +++ b/Ch3/datasets/spam/spam/00398.1939605e3c713ff2ef852b1fbf10b0bb @@ -0,0 +1,82 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Fri Sep 20 17:36:09 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id BF83F16F03 + for ; Fri, 20 Sep 2002 17:36:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Fri, 20 Sep 2002 17:36:07 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8KGSCC13401 for + ; Fri, 20 Sep 2002 17:28:12 +0100 +Received: from TIPSMTP1.ADMANMAIL.COM (tipsmtp1.theadmanager.com + [66.111.219.130] (may be forged)) by webnote.net (8.9.3/8.9.3) with ESMTP + id RAA06863 for ; Fri, 20 Sep 2002 17:28:43 +0100 +Message-Id: <200209201628.RAA06863@webnote.net> +Received: from TIPUTIL2 (tiputil2.corp.tiprelease.com) by + TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id + <3.0000C04C@TIPSMTP1.ADMANMAIL.COM>; Fri, 20 Sep 2002 8:36:44 -0500 +Date: Fri, 20 Sep 2002 08:00:14 -0500 +From: Great Offers +To: JM@NETNOTEINC.COM +Subject: You have been hand selected... Free Info! +X-Info: 134085 +X-Info2: SGO +MIME-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + + + + + +
    + + + +


    +
    You've been hand selected
    to access this exclusive +
    work-at-home information
    for FREE! +
    + + + +
    +
    +
    + +T +
    + +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
    + + diff --git a/Ch3/datasets/spam/spam/00399.cd1239166aa4d43f7c3127c3b48b3f18 b/Ch3/datasets/spam/spam/00399.cd1239166aa4d43f7c3127c3b48b3f18 new file mode 100644 index 000000000..ce2a5c3fa --- /dev/null +++ b/Ch3/datasets/spam/spam/00399.cd1239166aa4d43f7c3127c3b48b3f18 @@ -0,0 +1,368 @@ +From vbi@insiq.us Sat Sep 21 10:48:41 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id D7DB516F03 + for ; Sat, 21 Sep 2002 10:48:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 21 Sep 2002 10:48:38 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g8KNIkC27106 for ; Sat, 21 Sep 2002 00:18:47 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Fri, 20 Sep 2002 19:20:08 -0400 +Subject: One Sale - Three Commission Streams +To: +Date: Fri, 20 Sep 2002 19:20:07 -0400 +From: "IQ - VBI" +Message-Id: +MIME-Version: 1.0 +X-Mailer: Microsoft CDO for Windows 2000 +Thread-Index: AcJg5LCIevOju53qQMq7p3RjKYm/cA== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 20 Sep 2002 23:20:08.0062 (UTC) FILETIME=[4253F9E0:01C260FC] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_C16F3_01C260C3.2978B160" + +This is a multi-part message in MIME format. + +------=_NextPart_000_C16F3_01C260C3.2978B160 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: quoted-printable + + An Additional Income Stream + from your current book of business! + =09 + =09 + Agent Commission: +$92,000=20 + Client: + 87-year-old male + 82-Year-old female + + Result: + $2,300,000 second to die + policy, minimal cash value. Policy was no longer + required. Insured utilized a + life settlement and received + $300,000. Agent Commission: +$30,000=20 + Client: + 70-year-old male with health complications + + Result: + $1,000,000 policy with small + cash value. Insured utilized + a life settlement and + received $300,000. Agent Commission: +$90,000=20 + + Client: + 89-year-old female + + Result: + $2,000,000 policy with an + annual premium of $110,000. + Policy expires at age 95. + Insured utilized a life + settlement and received + $325,000.=20 + =09 +=20 + +Multiple opportunities to earn commissions +from one strategy!=20 + + If any of your elderly client=92s health, personal, or financial +needs or circumstances have changed since the original life policy was +issued you have the opportunity to create an additional income stream +with Life Settlements: + + ? Earn a referral fee from a life settlement transaction. +? Trailer commission on the policy for the agent of record. +? Earn investment or annuity commissions from the capital created by=20 + the life settlement transaction. +? Earn a commission on new life insurance products that better suit=20 + your client=92s current needs. +? Earn a commission on the conversion if the policy being considered + is a term product. +?Earn additional commissions for referring other agents or agencies + to The Life Settlement Alliance.=20 +=20 +Call today for more information! + 800-871-9440=97 or =97=20 + +Please fill out the form below for more information =20 +Name: =09 +E-mail: =20 +Phone: =20 +City: State: =20 + =09 +=20 +The Life Settlement Alliance =20 +We don't want anyone to receive our mailings who does not wish to. This +is professional communication sent to insurance professionals. To be +removed from this mailing list, DO NOT REPLY to this message. Instead, +go here: http://www.Insuranceiq.com/optout +=20 + +Legal Notice =20 + +------=_NextPart_000_C16F3_01C260C3.2978B160 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +One Sale - Three Commission Streams + + + + + + =20 + + + + + + =20 + + +
    + 3D"An
    +
    +
    + + =20 + + + + + + =20 + + + + + + =20 + + + + + +
     
      + =20 +
    + Agent Commission:
    + $92,000
    =20 +
    +  Client:
    +  87-year-old male
    +  82-Year-old female
    +
    +  Result:
    +  $2,300,000 second to die
    +  policy, minimal cash value.  Policy was no longer
    +  required. Insured utilized a
    +  life settlement and received
    +  $300,000. +
    +
    + +
    + Agent Commission:
    + $30,000
    +
    +  Client:
    +  70-year-old male with health complications
    +
    +  Result:
    +  $1,000,000 policy with small
    +  cash value. Insured utilized
    +  a life settlement and
    +  received $300,000. +
    +
    =20 + +
    + Agent Commission:
    + $90,000
    +

    +  Client:
    +  89-year-old female
    +
    +  Result:
    +  $2,000,000 policy with an
    +  annual premium of $110,000.
    +  Policy expires at age 95.
    +  Insured utilized a life
    +  settlement and received
    +  $325,000. +
    +
     
    + + =20 + + + =20 + + + =20 + + +

    =20 +
    + Multiple opportunities to earn = +commissions
    + from one strategy!
    =20 +
    + +
    If any of your elderly client's health,=20 + personal, or financial needs or circumstances have changed = +since=20 + the original life policy was issued you have the = +opportunity to=20 + create an additional income stream with Life = +Settlements:
    + + • Earn a referral fee from a life settlement = +transaction.
    + • Trailer commission on the policy for the agent of = +record.
    + • Earn investment or annuity commissions from the = +capital created by
    +    the life settlement transaction.
    + • Earn a commission on new life insurance products that = +better suit
    +    your client's current needs.
    + • Earn a commission on the conversion if the policy = +being considered
    +    is a term product.
    + •Earn additional commissions for referring other agents = +or agencies
    +    to The Life Settlement = +Alliance.
    =20 +
    +
    =20 + Call today for more information!
    + =20 + — or —

    =20 + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please fill out the form below for more = +information
    Name:
    E-mail:
    Phone:
    City: State:
     =20 + =20 + =20 + =20 +
    +
    +
    3D"The
    +
    =20 +

    We = +don't want anyone=20 + to receive our mailings who does not wish to. This is = +professional communication=20 + sent to insurance professionals. To be removed from this mailing = +list,=20 + DO NOT REPLY to this message. Instead, go here: =20 + http://www.Insuranceiq.com/optout

    +
    +
    + Legal Notice=20 +
    +
    =20 + + + + +------=_NextPart_000_C16F3_01C260C3.2978B160-- + + diff --git a/Ch3/datasets/spam/spam/00400.cc74b7994a7282f32ee2a3b7e3634d31 b/Ch3/datasets/spam/spam/00400.cc74b7994a7282f32ee2a3b7e3634d31 new file mode 100644 index 000000000..9d30f7957 --- /dev/null +++ b/Ch3/datasets/spam/spam/00400.cc74b7994a7282f32ee2a3b7e3634d31 @@ -0,0 +1,91 @@ +From ilug-admin@linux.ie Sat Sep 21 10:48:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E685316F03 + for ; Sat, 21 Sep 2002 10:48:42 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 21 Sep 2002 10:48:42 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8L1KmC01845 for + ; Sat, 21 Sep 2002 02:20:48 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 834F5341C6; Sat, 21 Sep 2002 02:21:17 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from 210.204.3.193 (unknown [210.204.3.193]) by lugh.tuatha.org + (Postfix) with SMTP id 1F8FC34158 for ; Sat, 21 Sep 2002 + 02:20:46 +0100 (IST) +Received: from [118.189.136.119] by smtp-server1.cfl.rr.com with NNFMP; + Sep, 20 2002 7:09:49 PM -0300 +Received: from [24.118.23.60] by n9.groups.yahoo.com with SMTP; + Sep, 20 2002 5:55:46 PM +0600 +Received: from [49.164.250.3] by rly-xw01.mx.aol.com with SMTP; + Sep, 20 2002 5:12:29 PM -0000 +From: "ufu_adv@hellerwhirligigs.com" +To: ilug@linux.ie +Cc: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Mailer: The Bat! (v1.52f) Business +Message-Id: <20020921012046.1F8FC34158@lugh.tuatha.org> +Subject: [ILUG] Garden Ornaments | mvcmv +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 20 Sep 2002 19:22:51 -0600 +Date: Fri, 20 Sep 2002 19:22:51 -0600 + +Our delightful garden ornaments combine the finest craftsmanship in woodworking with the lastest technology in paints and hardware: + +http://www.gardenornaments.adv@hellerwhirligigs.com/ + +We are the world's biggest whirligig maker. + + +Sincerely, + +Studio T. Inc., USA +The Home of Heller Whirligigs + + + + +Remove: + +E-mail based commercial communication avoids unnecessary spending on catalogs and paper, and helps to preserve valuable natural resources such as forests and oil. We do not wish to share our valuable information about whirligigs with those who are not interested. Should you not wish to receive information from us in the future, please click on the following removal link: + +http://www.gardenornaments.adv@hellerwhirligigs.com/remove.html + +Even though our database cleansing might be subject to delay or error, we will remove your e-mail address permanently from our database. However, please realize that removal from our database does not guarantee that your e-mail address will be deleted from the many other e-mail marketers who construct databases themselves by harvesting from web sites, or by buying any of the thousands of lists of e-mail addresses that are openly for sale on the internet. + + + + + + + + + + + + +... + +xdreksuhlkuytkyspnjct +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00401.309e29417819ce39d8599047d50933cc b/Ch3/datasets/spam/spam/00401.309e29417819ce39d8599047d50933cc new file mode 100644 index 000000000..755e18e51 --- /dev/null +++ b/Ch3/datasets/spam/spam/00401.309e29417819ce39d8599047d50933cc @@ -0,0 +1,92 @@ +From besthomebiz@subdimension.com Sat Sep 21 10:48:45 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 9362816F16 + for ; Sat, 21 Sep 2002 10:48:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 21 Sep 2002 10:48:44 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8L3P1C05601 for + ; Sat, 21 Sep 2002 04:25:02 +0100 +Received: from emzitd1257.com (home-217-159-17-216.g2heurope.net + [217.159.17.216]) by webnote.net (8.9.3/8.9.3) with SMTP id EAA08289 for + ; Sat, 21 Sep 2002 04:25:09 +0100 +Message-Id: <200209210325.EAA08289@webnote.net> +From: "EasyDownline" +Reply-To: besthomebiz@subdimension.com +To: zzzz@spamassassin.taint.org +Date: Fri, 20 Sep 2002 23:34:52 -0500 +Subject: This one will make you money 9/20/02 11:34:52 PM +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +MIME-Version: 1.0 +X-Precedence-Ref: 1234056789zxcvbnmlkjhgfqwr +Content-Type: text/plain; charset="us-ascii" +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8L3P1C05601 +Content-Transfer-Encoding: 8bit + +A great sponsor will not make you money. +A great product line will not make you money either. +A great compensation plan will not make you money either. +A great company will not make you money either. + +Some say it's a combination of the above. +Some say it's what's inside you that matters the most. + +Forget about meetings, one-on-one, 3-ways calls, etc. +Those old ways of network marketing has come and gone. +They wear you out long before you make any money. + +What makes you money is a downline associated with a +stable company that has consumable products. + +Where's the downline coming from? Well, we have an +online automatic recruiting system that does the work +for you. Our system will place paying members in +your downline. + +Furthermore, you can see it working first hand before +you decide what to do, if any. + + + +For more info on this simple but powerful recruiting system +please click here and send a blank message + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + +We belong to the same opt-in list. But if you wish to have your email +address REMOVE from our database please click here + + + + + + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00402.9fd8762dd436ec868d4c22a17d8ccc3d b/Ch3/datasets/spam/spam/00402.9fd8762dd436ec868d4c22a17d8ccc3d new file mode 100644 index 000000000..6df35f4ec --- /dev/null +++ b/Ch3/datasets/spam/spam/00402.9fd8762dd436ec868d4c22a17d8ccc3d @@ -0,0 +1,196 @@ +From stepshow@hotmail.com Sat Sep 21 10:48:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 761D216F03 + for ; Sat, 21 Sep 2002 10:48:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 21 Sep 2002 10:48:46 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8L3VZC05879 for + ; Sat, 21 Sep 2002 04:31:35 +0100 +Received: from richmortonaut01.richmorton ([63.100.18.2]) by webnote.net + (8.9.3/8.9.3) with ESMTP id EAA08296 for ; + Sat, 21 Sep 2002 04:32:07 +0100 +From: stepshow@hotmail.com +Received: from gotmarketing.com (w066.z064221110.nyc-ny.dsl.cnc.net + [64.221.110.66]) by richmortonaut01.richmorton with SMTP (Microsoft + Exchange Internet Mail Service Version 5.5.2448.0) id THKQTL5A; + Fri, 20 Sep 2002 20:24:18 -0400 +Message-Id: <00004151338b$0000771d$000023be@highway212.com> +To: , , + , , , + +Cc: , , , + , , +Subject: Re: PROTECT YOUR COMPUTER,YOU NEED SYSTEMWORKS! COXR +Date: Fri, 20 Sep 2002 20:37:11 -1600 +MIME-Version: 1.0 +Reply-To: stepshow@hotmail.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + +Norton AD + + + + + + + +
    = +Take + Control of Your Computer With This Top-of-the-Line Software!<= +/td> +
    + + + + + +
    + + + + +
    Norton + SystemWorks 2002 So= +ftware Suite
    +
    + -Professional Edition-
    + + + + +
    Includes + Six - Yes 6! + + - Feature-Packed Utilities
    ALL for
    1 + Special LOW + Price of Only + $29.99!
    + + + + +
    = +This + Software Will:
     - + Protect your computer from unwanted and hazardous vir= +uses
     - + Help secure your private & valuable information
     -= + Allow + you to transfer files and send e-mails safely
     = +;- + Backup your ALL your data quick and easily
     - Improve = +your + PC's performance w/superior + integral diagnostics!
     - You'll NEVER have to take = +your + PC to the repair shop AGAIN!
      + + + + +
    +

    6 + Top-of-the-Line Utilities
    1 +
    + Great Price
    + A
    + + $300+ + + + + Combined Retail Value<= +font color=3D"#00FFFF"> + + YOURS for + a limited time + for Only !!!$29.99!!!
    +
    < + Price Includes FREE Shipping! <= +font face=3D"Tahoma" size=3D"4"> >
    And + For a Limited time Buy 2 of Our Products & Get 1 Free!

    +

    Don't fall + prey to destructive viruses or hackers!
    Protect  your computer= + and + your valuable information and

    + + + + +
    -> + CLICK HERE to Order Yours NOW! <-
    +

    or Call + Toll-Free 1-800-861-1481!

    +

    Your email + address was obtained from an opt-in list. Opt-in EAF (Ecommerce Anti= +-Spam + Federation) Approved List - Type UPC Prefix =3D YY*wud02FLUS. T= +o + unsubscribe from this list, please Click + here . You need to allow 5 Business days for removal. If you hav= +e previously unsubscribed and are still receiving + this message, you may visit our Spam + Abuse Control Center. We do not condone spam in any shape or for= +m. + Thank You kindly for your cooperation.

    + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00403.46d0face754b6bb7dce8b3ea560f75fb b/Ch3/datasets/spam/spam/00403.46d0face754b6bb7dce8b3ea560f75fb new file mode 100644 index 000000000..25f93825c --- /dev/null +++ b/Ch3/datasets/spam/spam/00403.46d0face754b6bb7dce8b3ea560f75fb @@ -0,0 +1,79 @@ +From davidsavimbi@maktoob.com Sat Sep 21 10:48:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 899FA16F16 + for ; Sat, 21 Sep 2002 10:48:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 21 Sep 2002 10:48:49 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8L42hC07532 for + ; Sat, 21 Sep 2002 05:02:43 +0100 +Received: from rack3.easydns.com (rack3.easydns.com [205.210.42.50]) by + webnote.net (8.9.3/8.9.3) with ESMTP id FAA08333 for ; + Sat, 21 Sep 2002 05:03:15 +0100 +Received: from winxp1 (unknown [195.166.226.132]) by rack3.easydns.com + (Postfix) with SMTP id 7300A4B243 for ; Sat, + 21 Sep 2002 00:03:07 -0400 (EDT) +From: "davidsavimbi" +To: "zzzz" +Subject: private +Date: Sat, 21 Sep 02 05:01:06 Greenwich Standard Time +MIME-Version: 1.0 +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2462.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2462.0000 +Message-Id: <20020921040307.7300A4B243@rack3.easydns.com> +Content-Type: multipart/mixed;boundary= "----=_NextPart_000_002B_83A1E322.4D8B344B" + +------=_NextPart_000_002B_83A1E322.4D8B344B +Content-Type: text/plain +Content-Transfer-Encoding: base64 + +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClRoaXMgbWVzc2FnZSB3 +YXMgc2VudCBieSBFeHByZXNzIERpcmVjdCBFbWFpbCBCbGFzdGVyIFY1LjEsIA0KeW91IGNh +biBkb3dubG9hZCBpdCBmcm9tOiBodHRwOi8vd3d3LmZhc3RidWxrZW1haWwuY29tIA0KRXhw +cmVzcyBEaXJlY3QgRW1haWwgQmxhc3RlciBpcyBhIHBvd2VyZnVsIGVtYWlsIG1hcmtldGlu +ZyB0b29sISENCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KDQpE +ZWFyIHNpci9tYWRhbQ0KDQpXaXRoIGdvb2QgcmVjb21tZW5kYXRpb24sSSAgZGVjaWRlZCB0 +byBjb250YWN0IHlvdS4NCkkgYW0gUFJJTkNFIERBVklEICBTQVZJTUJJLCB0aGUgc29uIG9m +IEpPTkFTIFNBVklNQkkgLHRoZSBsZWFkZXIgb2YgdGhlDQpVTklUQSByZWJlbCBpbiBBTkdP +TEEsIHdobyAgd2FzIGtpbGxlZCBpbiBmZWJydWFyeSBieSB0aGUgdHJvb3AgbG95YWwgdG8N +CnRoZSBnb3Zlcm5tZW50IC5BZnRlciBoaXMgZnVuZXJhbCAgYW5kIGJ1cmlhbCx3ZSBoYWQg +YSBmYW1pbHkgbWVldGluZyBhbmQNCnJlc29sdmVkIHRvIGludmVzdCB0aGUgbW9uZXkgaGUg +bGVmdCAgYmVoaW5kIGluIHlvdXIgY291bnRyeSwgaGVuY2UgdGhpcw0KbGV0dGVyIHRvIHlv +dS5IZSBsZWZ0IHRoZSBzdW0gb2YgJDgwIG1pbGxpb24gIHVzIGRvbGxhcnMgaW4gY2FzaCwg +d2hpY2ggd2FzDQphIHByb2NlZWQgZnJvbSB0aGUgc2FsZSBvZiBkaWFtb25kcyx3aGljaCB3 +YXMgIHVuZGVyIGhpcyBjb250cm9sLg0KDQpIb3dldmVyLHRoZSBlbnRpcmUgIGRldmVsb3Bt +ZW50IG1hZGUgdXMgdG8gZmxlZSBBTkdPTEEgdG8gSk9IQU5FU0JVUkcsU09VVEgNCkFGUklD +QSwgZm9yIGZlYXIgb2YgIGJlaW5nIGtpbGxlZC4NClRoZSBhbW91bnQgb2YgJDgwIG1pbGxp +b24gIHVuaXRlZCBzdGF0ZXMgZG9sbGFycyBpbiBjYXNoIGlzIHByZXNlbnRseSBpbiBvdXIN +CnBvc3Nlc3Npb24sIGFuZCBJIHdvdWxkIHdhbnQgaXQgIHRvIGJlIGludmVzdGVkIGluIHlv +dXIgY291bnRyeSxkdWUgdG8gdGhlDQpzdGFiaWxpdHkgb2YgeW91ciBlY29ub215LlRoZSBt +b25leSBpcyAgcHJlc2VudGx5IHdpdGggYW4gZW1lcmdlbmN5DQpkaXBsb21hdGljIHNlY3Vy +aXR5IGNvdXJpZXIgY29tcGFueSx3aGljaCBteSBtb3RoZXIgYW5kIEkgaHVycmllZGx5IHVz +ZWQgdG8gbW92ZSB0aGUNCmNhcmdvIG91dCBmcm9tIG91ciBjb3VudHJ5IHRvIFNPVVRIIEFG +UklDQS5XZSAgcmVnaXN0ZXJlZCBpdCB1bmRlciBhIHNlY3VyaXR5DQpjb2RlIHdpdGggbm8g +bmFtZSwgYW5kIHdhcyByZWdpc3RlcmVkIGFzICBjb250YWluaW5nIHBob3RvZ3JhcGhpYyBw +YXBlcg0KbWF0ZXJpYWwuDQoNCk15IG1vdGhlciBhbmQgSSBoYXZlIHJlc29sdmVkIHRvIGdp +dmUgeW91ICAxNSUgb2YgdGhlIHRvdGFsIHN1bSBmb3IgeW91ciBhc3Npc3RhbmNlIGluDQpn +ZXR0aW5nIHRoaXMgZnVuZHMgdHJhbnNmZXJyZWQgdG8gIHlvdXIgcmVsaWFibGUgY29tcGFu +eSdzIGFjY291bnQgaW4geW91cg0KY291bnRyeSxmb3IgaW52ZXN0bWVudC5XZSBoYXZlIGVx +dWFsbHkgIHJlc29sdmVkIHRvIHNwZW5kIHRoZSByZXN0IG9mIG91cg0KbGl2ZXMgaW4geW91 +ciBjb3VudHJ5LllvdSBoYXZlIHRvICBtYWtlIHRyYXZlbGluZyBhcnJhbmdlbWVudA0Kb2Yg +Y29taW5nIHRvIEpPSEFORVNCVVJHLFNPVVRIIEFGUklDQSxpbW1lZGlhdGVseSB0byAgbWVl +dCB3aXRoIG1lIGZhY2UgdG8NCmZhY2UgYW5kIHNlZSB0aGUgZnVuZHMgcGh5c2ljYWxseSx0 +aGVuIGhhdmUgaXQgdHJhbnNmZXJyZWQgIHRvIHlvdXINCmFjY291bnQuQWZ0ZXJ3aGljaCBi +b3RoIG9mIHVzIHdvdWxkIHRyYXZlbCB0b2dldGhlciB0byB5b3VyIGNvdW50cnkgZm9yDQpz +aGFyaW5nIGFuZCBpbW1lZGlhdGUgaW52ZXN0bWVudCx0aGVuIG15IGZhbWlseSB3aWxsIGpv +aW4gbWUgbGF0ZXIuDQoNCkFzIHdlIGF3YWl0IHlvdXIgdXJnZW50ICByZXBseSwgc3RyaWN0 +bHkgdGhyb3VnaCBteSBlLW1haWwgZGF2c2F2QG1ha3Rvb2IuY29tIG9yDQogZGF2aWRzYXZp +bWJpQG1ha3Rvb2IuY29tICBvciBteSBwcml2YXRlIHBob25lIG51bWJlciArODgyIDEgNjQ2 +Njg1MjI5LiAgeW91cg0KYWJzb2x1dGUgdHJ1c3QgYW5kIGNvbmZpZGVudGlhbGl0eSBpcyBo +aWdobHkgc29saWNpdGVkIHRvIHNlcnZlIHVzIGJldHRlci4NCg0KQmVzdCByZWdhcmQNClBS +SU5DRSBEQVZJRCBTQVZJTUJJICAgIA== +------=_NextPart_000_002B_83A1E322.4D8B344B-- + + diff --git a/Ch3/datasets/spam/spam/00404.b4bbecbee92f735a845f589582e7695d b/Ch3/datasets/spam/spam/00404.b4bbecbee92f735a845f589582e7695d new file mode 100644 index 000000000..ddd2479bb --- /dev/null +++ b/Ch3/datasets/spam/spam/00404.b4bbecbee92f735a845f589582e7695d @@ -0,0 +1,75 @@ +From 107664.1420@actionsports.co.uk Sat Sep 21 10:48:56 2002 +Return-Path: <107664.1420@actionsports.co.uk> +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id F295216F03 + for ; Sat, 21 Sep 2002 10:48:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 21 Sep 2002 10:48:55 +0100 (IST) +Received: from mail.smartstream.net ([209.177.232.107]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8L7v0C14406 for + ; Sat, 21 Sep 2002 08:57:00 +0100 +Received: from activeaircargo.se [64.152.140.147] by mail.smartstream.net + with ESMTP (SMTPD32-6.06) id ABCA15E30122; Thu, 19 Sep 2002 02:16:42 -0400 +Message-Id: <00007c137cc2$00005b16$000056f7@acsbially.com.br> +To: +Cc: , , + , , + , , + , , + , , + , , + , , + , , + , , + , , + , , + , , + , +From: "Mrs. W" <107664.1420@actionsports.co.uk> +Subject: Not too old to put out! 26792 +Date: Thu, 19 Sep 2002 02:29:10 -1600 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +Reply-To: 110035.3134@actionsports.co.uk + + +WET, HORNY AND DIRTY GRANDMAS! + +Remember how you lusted after your friend's mum in high +school? She was 46 and you were 15? Remember the time +when she bent over to do her gardening and you saw her +sagging breasts through the v-neck opening of her summer +dress? She was OLD and you LOVED her! All you wanted to +do was FUK that Dirty Old Mole BLUE! You can now! Follow +the link below to see just how OLD & DIRTY these moles are! +http://62.16.101.30/jump2/index.html + + + + + + + + + + + + + + + + + + + + + + + +Remove here: +http://62.16.101.30/jump1/remove.html + + diff --git a/Ch3/datasets/spam/spam/00405.3163fff27ff95b91afd656f0025c6a83 b/Ch3/datasets/spam/spam/00405.3163fff27ff95b91afd656f0025c6a83 new file mode 100644 index 000000000..0c1a3aea3 --- /dev/null +++ b/Ch3/datasets/spam/spam/00405.3163fff27ff95b91afd656f0025c6a83 @@ -0,0 +1,553 @@ +From ghostrider_13@hotmail.com Sat Sep 21 10:49:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 899ED16F16 + for ; Sat, 21 Sep 2002 10:48:57 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 21 Sep 2002 10:48:57 +0100 (IST) +Received: from hotmail.com (200-161-147-145.dsl.telesp.net.br + [200.161.147.145]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8L8n1C15897 for ; Sat, 21 Sep 2002 09:49:04 +0100 +Reply-To: +Message-Id: <004e02d80b1d$7654a1c1$7dd73db3@vdducg> +From: +To: +Subject: Re: What a night! +Date: Fri, 20 Sep 2002 20:39:50 +1200 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: The Bat! (v1.52f) Business +Importance: Normal +Content-Type: text/html; charset="iso-8859-1" + + + + +
    +

    +  +Free Personal and Business Grants

    + +

      +

    + + + +
    +
    +

    +" Qualify for at least $25,000 in free +grants money - Guaranteed! "

    +
    + +
    +

    +Each day over One Million Dollars in Free +Government
    +Grants  is given away to people just like you for a wide
    +variety of Business And Personal Needs

    +        +Dear Grant Seeker, +
    In a moment, I'll tell you +exactly HOW & WHERE to get Grants. This MONEY has to +be given away, WHY not to YOU?
    + +
    You may be thinking, "How +can I get some of this Free Grants Money"
    + +
    Maybe you think it's impossible +to get free money?
    + +
    Let me tell you it's not +impossible! It's a fact, ordinary people and businesses all across the +United States are receiving millions of dollars from these Government and +Private Foundation's everyday.
    + +
    Who Can Apply?
    + +
    ANYONE can apply +for a Grant from 18 years old and up!
    + +
    Grants from $500.00 to $50,000.00 +are possible! GRANTS don't have to be paid back, +EVER! Claim +your slice of the FREE American Pie.
    + +
    This money is not a loan, +Trying to get money through a conventional bank can be very time consuming +and requires a lot of paperwork, only to find out that you've been denied. +These Government Agencies don't have to operate under the same stringent +requirements that banks do.
    + +
    You decide how much money +you need, as long as it's a lawful amount and meets with the Government +Agencies criteria, the money is yours to keep and never has to be repaid. +This money is non taxable & interest free.
    + +
    None of these programs require +a credit check, collateral, security deposits or co-signers, you can apply +even if you have a bankruptcy or bad credit, it doesn't matter, you as +a tax payer and U.S. citizen are entitled to this money.
    + +
    There are currently over +1,400 Federal Programs, 24,000 State Programs, 30,000 Private Foundations +and 20,000 Scholarship Programs available.
    + +
    This year over $30 Billion +Dollars In Free personal and business Government Grants Money will be given +away by Government Grants Agencies.
    + + +
      +
    + + + +
    +
    +

    +Government Personal +and Business Grants Facts:

    +Over 20 Million People Get Government +Money Every Year: +
      1,000,000 entrepreneurs get money +to start or expand a business +

      4,000,000 people get money to invest +in real estate +

      6,000,000 people get money to go +to college +

      10,000,000 people get free help and +training for a better job

    +
    + +

    +Getting Business +Grants

    + +
    Anyone thinking about going +into business for themselves, or wanting to expand an existing business +should rush for the world's largest "one-stop-money-shop" where FREE business +grants to start or expand a business is being held for you by the Federal +Government.
    + +
    It +sounds absolutely incredible that people living right here in the United +States of America wouldn't know that each year the world's largest source +of free business help delivers:
    + +
      Over $30 billion dollars in free +business grants and low-interest loans; +

      over one-half trillion dollars in +procurement contracts; and +

      over $32 billion dollars in FREE +consulting and research grants.

    + +
    With an economy that remains +unpredictable, and a need for even greater economic development on all +fronts, the federal government is more willing than it ever has been before +to give you the money you need to own your own business and become your +own boss!
    + +
    In +spite of the perception that people should not look to the government for +help, the great government give-away programs have remained so incredibly +huge that if each of the approximately 8 million businesses applied for +an equal share, they would each receive over $70,000.
    + +
    Most +people never apply for FREE Business Grants because they somehow feel it +isn't for them, feel there's too much red-tape, or simply don't know who +to contact.The fact is, however, that people from all walks of life do +receive FREE GRANTS MONEY and other benefits from the government, and you +should also.
    + +

    +Government Grants +for Personal Need

    + +
    Help to buy a new home for +low income families, repair your home, rent, mortgage payments, utility +bills, purchase a new car, groceries, childcare, fuel, general living expenses, +academic tutoring, clothing, school supplies, housing assistance, legal +services, summer camp, debts, music lessons, art lessons, any extracurricular +activities, pay bills for senior citizens, real estate taxes, medical expenses +and general welfare. If you or someone you know suffered a fire lose there +are programs available to help in replacing necessities.
    + +

    +Scholarships And +Grants For Education

    + +
    Grant Money for preschool +children and nursery school education, private, primary and secondary schools, +men and women to further their education, scholarships for athlete's, business +management, engineering, computer science, medical school, undergraduate, +graduate, professional, foreign studies and many more.
    + +

    +Here's How You +Can Get Free Grants
    +In The Shortest Time Possible

    + +
    Once you know how and where +to apply for a specific Free Grant, results are almost inevitable. The +government wants to give away this money. . . it is under congressional +mandate to do so! These funds are made available to help you, the tax payer. +All that's required from you is the proper presentation of your grant request. +That's all.
    +Announcing... +
    +

    +"The Complete +Guide To Government Grants"

    + +
    Forget just about everything +you've seen or heard about government grants. What I've done is put together +a complete blueprint for researching, locating and obtaining government +grants. "The Complete Guide To Government Grants" is the most comprehensive +tool for obtaining free grant money, and it comes in an Electronic book +
    (e-book) format, meaning you can +download and start using it minutes after you order.
    + +
    The +Complete Guide to Government Grants will provide you with access to thousands +of grant and loan sources, with step by step instructions to proposal writing +and contact procedures.
    +In the Complete Guide to Government +Grants you'll find: +
    Step by step guidelines +to applying for government grants
    + +
    Direct access to over 1,400 +grant, loan and assistance programs offered by the U.S. federal government. +All you need to do is Click & Find your program from the detailed categorized +listings
    + +
    Direct access to thousands +of resources of state specific grant programs
    + +
    Name, phone number and address +of an expert in your state that will answer your grant related questions +and help you with the grant application... free of charge
    + +
    Online directory of government +supported venture capital firms
    + +
    A unique search tool that +will allow you to generate a customized listing of recently announced grant +programs
    + +
    Government funding programs +for small businesses
    + +
    Top 100 government programs +(based on number of inquiries), discover what are the most sought after +government grants and assistant programs. Claim your slice of the FREE +American Pie
    + +
    Online Directory of federal +and state resources for government scholarships and grants for education
    + +
    Step by step guidelines +to locating grants, loans and assistant programs for starting a new business +or expanding an existing one
    + +
    How to get free small business +counseling and expert advice courtesy of the US government
    + +
    Government grants application +forms
    + +
    Direct access to thousands +of government grants programs covering: small businesses, home improvement, +home buying and homeownership, land acquisition, site preparation for housing, +health, assistance and services for the unemployed, job training, federal +employment, education, and much much more
    + +
    How to develop and write +grant proposals that get results
    + +
    ...Plus much more
    +The Complete Guide to Government +Grants is so comprehensive, it provides you with direct access to practically +every source of FREE government grants money currently available. +
    If you're an American citizen +or resident, you are entitled to free grant money ranging from $500 to +$250,000 or more. If you are Black you have already qualified for 15 programs, +being Hispanic, you qualify for many programs. Being a Christian will get +you into 20 programs, there are also many other programs available for +different faiths, Jewish, Catholic. Not having any money, will get you +into over 30 programs, 550 programs if you are unemployed, or underemployed. +The list and sources are endless.
    + +
    You Are Eligible! This money +is Absolutely Free and will be yours to use for any worthwhile purpose.
    + +
    Did you know you can apply +for as many grants as you want?
    + +
    It's true, For instance, +you could get a $65,000 grant to begin a weight loss business, get $8,800 +in tuition to become a nurse or $35,000 to open up the day-care center, +you've always dreamed of owning. And then, go out and apply for a grant +to buy a home for you and your family. And once your new business starts +doing well you could go out and get another grant for expansion of your +business. The possibilities are endless.
    + + +
      +
    + + + +
    +

    +You Must Qualify +For At Least $25,000 In Free
    +Grants Money, Or Your Money Back!

    + +
    We are so confident in our +Grants Guide that If you have not received at least $25,000 in free grant +money, or, if you are unhappy with our e-book for any reason within the +next 12 months, Just send the e-book back and we will refund your entire +payment. NO QUESTIONS ASKED!!
    + +
    If you want to order, we +insist you do so entirely at our risk. That is why the E-book comes with +a... No Risk full year Money-Back Guarantee. There is absolutely +NO RISK on your part with this 365 day guarantee. What we mean is we want +you to order without feeling you might "get taken."
    + +
    Therefore, we want you to +order this material today... read it, use it... and if for any reason you +aren't completely satisfied, you not only can cancel, you should, +for an immediate refund of your purchase price. You simply can't lose.
    + +
    Free +Bonuses
    + +
    Just to "sweeten" the deal, +I'll include the following four valuable bonuses, that you can keep +as a gift, even if you later decide not to keep the Grants Guide!
    + +
    Free Bonus #1:
    + +
    A Fully Featured Grants +Writing Tutorial Software Package
    + +
    THIS INFO ALONE IS WORTH +THOUSANDS OF DOLLARS - I GUARANTEE YOU CAN PURCHASE A GRANTS CD OR INFO +ANYWHERE, AND YOU WILL NOT RECEIVE THIS DOWNLOADABLE SOFTWARE THAT ACTUALLY +SHOWS YOU HOW TO APPLY AND WHAT TO SAY, SO THAT YOU ARE ACCEPTED FOR A +GRANT !!!
    + +
    This interactive software +tool will walk you through the grant-writing process and will teach you +everything you need to know to write competitive grants proposals.
    + +
    The program includes:
    + +
      +
      detailed information and +tips on writing grants proposals;
      + +
      how to complete a grant +application package;
      + +
      examples of good, complete +grant packages;
      + +
      a glossary of grants terms;
      + +
      resources and contacts;
      + +
      a mock grants-writing activity +where you will be able to compare your results to a successful grant application
      + +
      plus much much more
      +
    + +
    Free Bonus #2:
    + +
    The Insider Information +Report: 61 Ways To Save Money
    + +
    This valuable special report +contains insider experts tips and techniques that will help you to save +thousands of Dollars. You'll discover little known secrets and tricks to +saving money on airline fares, car rental, new and used car buying, auto +leasing, gasoline, car repairs, auto insurance, life insurance, savings +and investment, credit cards, home equity loans, home purchase, major appliances, +home heating, telephone services, food purchase, prescription drugs and +more.
    + +
    Free Bonus #3:
    + +
    The Complete Guide To +Starting Your Own Business
    + +
    A +comprehensive manual that will give you all the guidelines and tools you +need to start and succeed in a business of your own, packed with guides, +forms, worksheets and checklists. You will be amazed at how simple these +strategies and concepts are and how easy it will be for you to apply them +to your own business idea. Hundreds were sold separately at $40 each... +you get it here for free.
    + +
    Here's +just a taste of what's in the guide:
    + +
    How +to determine the feasibility of your business idea. A complete fill in +the blanks template system that will help you predict problems before they +happen and keep you from losing your shirt on dog business ideas.
    + +
    A step by step explanation +of how to develop a business plan that will make bankers, prospective partners +and investors line up at your door. Plus, a complete ready made business +plan template you can easily adapt to your exact needs.
    + +
    Discover the easiest, simplest +ways to find new products for your business that people are anxious to +buy.
    + +
    How +to make money with your new idea or invention. Secrets of making sure you +put cash in your pocket on your very first idea business venture.
    + +
    Complete, step by step instructions +on how to plan and start a new business. This is must-know must-do information; +ignore it and you stand a good chance to fail. You get specifically designed +instructions for each of the following: a service business, a retail store, +a home based business, a manufacturing company, and more.
    + +
    What nobody ever told you +about raising venture capital money. Insider secrets of attracting investors, +how to best construct your proposal, common mistakes and traps to avoid, +and much more.
    + +
    Checklist +for entering into a partnership. Keeps you from costly mistakes when forming +a partnership.
    + +
    How to select a franchise +business. A step by step guide to selecting a franchise that is best for +you.
    + +
    A complete step-by-step +organized program for cutting costs in your business. Clients of mine have +achieved an average of 28% to 35% cost reduction with this technique, and +you can too. Keep the money in your pocket with this one!
    + +
    What are the secrets behind +constructing a results driven marketing plan? I will lead you step by step +into developing a marketing plan that will drive your sales through the +roof.
    + +
    A complete step by step +guide guaranteed to help you increase your profits by up to 64%, I call +it "The Profit Planning Guide". This is a simple, practical, common sense +strategy, but amazingly enough, almost no one understands or uses it.
    + +
    Free Bonus #4:
    + +
    Guide To Home Business +Success
    + +
    This +is a fast, no-frills guide +to starting and succeeding in a home based business. Here's just a taste +of what's in the guide:
    + +
    Home +business: is it for you?
    + +
    What +are the secrets behind the people who have million dollar home based businesses? +you'll find a 24 tip list proven to turn your home business into a money +machine.
    + +
    Laws and regulations you +must be aware of to avoid legal errors.
    + +
    Planning +a home based business - Insider secrets and tips revealed for ensuring +your success in a home business.
    + +
    Fundamentals +of home business financial planning.
    + +
    Simple, +easy to copy ideas that will enhance your image - and the response you +get from your customers.
    + +
    Common +problems in starting and managing a home based  business - and how +to solve them once and for all.
    +Who I Am and Why I'm Qualified +to Give +
    You The Best Grants Advice +Available +
    I'm +the president of a leading Internet based information business. I'm also +the creator of "The Managing a Small Business CD-ROM" and the author of +five books.
    + +
    I've +been involved in obtaining grants and in small business for the past 23 +years of my life, as a business coach, a manager of a consulting firm, +a seminar leader and as the owner of five successful businesses.
    + +
    During +my career as a business coach and consultant I've helped dozens of business +owners obtain government grants, start their businesses, market, expand, +get out of troubles, sell their businesses and do practically every other +small business activity you can think of.
    + +
    The +Guide presented here contains every tip, trick, technique and strategy +I've learned during my 23 year career. You practically get my whole brain +in a form of an E-book.
    +How the Grants Guide is priced? +
    The Complete Guide To +Government Grants is normally priced at $50, but...
    + +
    ... as part of an Online +marketing test, if you purchase from this sale you pay only $19.99 (that's +75% off ...plus, you still get the FREE valuable bonuses.)
    + +
    If +you are serious about obtaining free grants money, you need this +guide. Don't delay a moment longer. Order Now !!! 
    +P.S. The Complete Guide To Government +Grants will make a huge difference. You risk nothing. The guide is not +the original price of $50, but only $19.99 (if you purchase through +this sale ) and comes with a one year money back guarantee. And you +get four valuable free bonuses which you may keep regardless. Don't delay +a moment longer, ORDER NOW !!!! +
      + +

    Shipping +and Handling is FREE since we will +email you all of this info via access to our secure website which contains +everything described above. +
    +


    +
    +

     Order +Now!!!

    +







    *** Thank you for being a part of another great offer from Quiksilver Enterprises. If you feel you don't belong on our opt-in list please send an email to: Quiksilver@cbulkhost.com and make sure to have "REMOVE" in the subject line. Thank you. + + + + +

    +
      + + +4795Sgyf9-600UjiD5376rfdA5-224brKs3596Alrq4-097nMdy5984RFdb1-998ALzS1480RVgh2-348l76 + + diff --git a/Ch3/datasets/spam/spam/00406.05e2214fea602970426862295f9b4a2e b/Ch3/datasets/spam/spam/00406.05e2214fea602970426862295f9b4a2e new file mode 100644 index 000000000..65981a1b3 --- /dev/null +++ b/Ch3/datasets/spam/spam/00406.05e2214fea602970426862295f9b4a2e @@ -0,0 +1,53 @@ +From iiu-admin@taint.org Sat Sep 21 14:40:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 1C96016F03 + for ; Sat, 21 Sep 2002 14:40:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 21 Sep 2002 14:40:46 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8LBA1C19562 for + ; Sat, 21 Sep 2002 12:10:01 +0100 +Received: from dpi.daewoo.co.kr ([211.217.21.4]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g8LB9JC19407 for ; + Sat, 21 Sep 2002 12:09:19 +0100 +Received: from ciftk.prodigy.net (61-221-55-129.HINET-IP.hinet.net + [61.221.55.129]) by dpi.daewoo.co.kr (8.6.12h2/3.4W4) with SMTP id + TAA290136; Sat, 21 Sep 2002 19:30:24 +0900 +From: "Damon Bonnie" +To: hlothtind@pere.com, h720@alpha3.mth.uea.ac.uk, + holzmann@cip.e-technik.uni-erlangen.de, howemortgage@qwest.net, + josefmarha@msn.com, hwilliams@adventist.org.uk, honey@btl.net, + handyman@winskus.com, hunter@lenzlink.net, hyoskin@earthlink.net, + icyfire@263.net, 74164.1656@webtv.com, inc@photographer.net, + hlfred_hartmann@dell.com, iiu-admin@zzzzason.org, haley@inficad.com, + human@argon.hu, guitar59@webtv.net, harrisog@earthlink.net, + ayhankoc@bellsouth.net, hoof@earthlink.net, images@fone.net, + igedobkdr@sgjxorvlql.com, hsi@netdoor.com +Subject: Re: girls +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Message-Id: <9sbf.jke5etdj@earthlink.net> +Date: Sat Sep 21 08:18:08 2002 +Sender: iiu-owner@taint.org +Errors-To: iiu-owner@taint.org +X-Beenthere: iiu@iiu.taint.org +X-Mailman-Version: 2.0.10 +Precedence: bulk +List-Unsubscribe: , + +List-Id: Irish Internet Users +List-Post: +List-Help: +List-Subscribe: , + +List-Archive: +Content-Type: text/html; charset=ISO-8859-1 + +
    GET FREE ACCESS TO XXX PORN!
    INSTANT ACCESS... 100% FREE HARDCORE



    Note: If you would would like to be removed from our list, please reply to this email with the word REMOVE as the subject
    + +hxvwnj3q + + diff --git a/Ch3/datasets/spam/spam/00407.7a447442b07fa08de0b69e907ce3ca53 b/Ch3/datasets/spam/spam/00407.7a447442b07fa08de0b69e907ce3ca53 new file mode 100644 index 000000000..3f0a4838e --- /dev/null +++ b/Ch3/datasets/spam/spam/00407.7a447442b07fa08de0b69e907ce3ca53 @@ -0,0 +1,75 @@ +From webmake-talk-admin@lists.sourceforge.net Sat Sep 21 14:40:49 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 9093216F16 + for ; Sat, 21 Sep 2002 14:40:48 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 21 Sep 2002 14:40:48 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8LCQ8C21721 for ; Sat, 21 Sep 2002 13:26:08 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17sjKm-0000cs-00; Sat, + 21 Sep 2002 05:26:04 -0700 +Received: from abn133-211.interaktif.net.tr ([195.174.133.211] + helo=webman.ttnet.net.tr) by usw-sf-list1.sourceforge.net with smtp (Exim + 3.31-VA-mm2 #1 (Debian)) id 17sjK3-0008ST-00; Sat, 21 Sep 2002 05:25:20 + -0700 +From: "GREENCARD 2004 ÇEKÝLÝÞÝNÝ KAÇIRMAYIN" +To: webmake-talk@example.sourceforge.net +X-Priority: 1 +X-Mailer: Microsoft Outlook Express 5.00.2919.7000 +MIME-Version: 1.0 +X-Precedence-Ref: 12 +Message-Id: +Subject: [WM] greencard 2004 çekiliþini kaçýrmayýn +Sender: webmake-talk-admin@example.sourceforge.net +Errors-To: webmake-talk-admin@example.sourceforge.net +X-Beenthere: webmake-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion of WebMake. +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 21 Sep 2002 15:28:32 +0300 +Date: Sat, 21 Sep 2002 15:28:32 +0300 +Content-Type: text/html; charset="windows-1254" +Content-Transfer-Encoding: quoted-printable + +=3C!DOCTYPE HTML PUBLIC =22-=2F=2FW3C=2F=2FDTD HTML 4=2E01 Transitional=2F=2FEN=22=3E +=3Chtml=3E +=3Chead=3E +=3Ctitle=3EGREEN CARD=3C=2Ftitle=3E +=3Cscript=3E + +function Go=28=29 +{ +window=2Elocation=3D=22http=3A=2F=2Fwww=2Eyesilkart=2Eorg=2Findex=2Ephp=3FWho=3D19=22=3B +} + =3C=2Fscript=3E +=3C=2Fhead=3E +=3Cbody ONLOAD=3D=22Go=28=29=22 =3E +=3C=2Fbody=3E +=3C=2Fhtml=3E + + + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +webmake-talk mailing list +webmake-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/webmake-talk + + diff --git a/Ch3/datasets/spam/spam/00408.22230b84aee00e439ae1938e025d5005 b/Ch3/datasets/spam/spam/00408.22230b84aee00e439ae1938e025d5005 new file mode 100644 index 000000000..6f112430b --- /dev/null +++ b/Ch3/datasets/spam/spam/00408.22230b84aee00e439ae1938e025d5005 @@ -0,0 +1,124 @@ +From foundmoney-3444431.13@linkgift.net Sat Sep 21 20:23:16 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 9495E16F03 + for ; Sat, 21 Sep 2002 20:23:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 21 Sep 2002 20:23:14 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8LFuUC26890 for + ; Sat, 21 Sep 2002 16:56:31 +0100 +Received: from linkgift.com (obound03.linkgift.com [64.57.212.53] (may be + forged)) by webnote.net (8.9.3/8.9.3) with SMTP id QAA09657 for + ; Sat, 21 Sep 2002 16:57:03 +0100 +Message-Id: <200209211557.QAA09657@webnote.net> +Date: 21 Sep 2002 03:03:55 -0000 +X-Sender: linkgift.net +X-Mailid: 3444431.13 +Complain-To: abuse@linkgift.com +To: zzzz@spamassassin.taint.org +From: FoundMoney +Subject: zzzz, do we have your money? +Content-Type: text/html; + + + + + + + +
    +
    +
    + + + +
    + + + + + + + + + + + + + + + +
    +
    + + +



    +

    MarketingonTarget.com has teamed up + with FoundMoney to help you locate and claim your lost CASH. + The amount on that check, OR MORE, literally be YOURS for + the claiming. +  

    +

    This is not a contest or a promotion. FoundMoney is a search service dedicated to putting + UNCLAIMED MONEY together with its rightful + owners.


    +

    There are 31 + million North American people eligible right now to claim unknown + cash windfalls. The search is Fast, Easy and GAURANTEED 

    +

    Over BILLION is + sitting in our database alone, which contains bank and government accounts, wills and estates, insurance settlements etc.


    +

    Since 1994, our Web site + has reunited millions upon millions of dollars with thousands + of rightful owners -- who didn't even know  they + had money waiting for them.  +

    +

    Click here + NOW or on the link below to find out -- in seconds -- if there + is money waiting to be claimed in your family name or that of + somebody you know. The INITIAL SEARCH IS +FREE.

    +

    YOU HAVE NOTHING + TO LOSE .... 
    TRY + FOUNDMONEY TODAY 

    +

    CLICK HERE NOW!

    +

    Sincerely,
    LinkGift.com +

    +

    +

    +
    +

     

    +

     

    +

    You received this email because you signed up at one of LinkGift.com's websites or you signed up with a party that has contracted with LinkGift.com. To unsubscribe from our email newsletter, please visit http://opt-out.linkgift.net/?e=jm@netnoteinc.com. + + + + + diff --git a/Ch3/datasets/spam/spam/00409.e59f63e813b6766a9a4ddf0790634ca3 b/Ch3/datasets/spam/spam/00409.e59f63e813b6766a9a4ddf0790634ca3 new file mode 100644 index 000000000..8254d0926 --- /dev/null +++ b/Ch3/datasets/spam/spam/00409.e59f63e813b6766a9a4ddf0790634ca3 @@ -0,0 +1,132 @@ +From guillian@georgia.co.jp Sat Sep 21 20:23:18 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 5FC8016F16 + for ; Sat, 21 Sep 2002 20:23:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 21 Sep 2002 20:23:17 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8LGYaC28003 for + ; Sat, 21 Sep 2002 17:34:37 +0100 +Received: from RS01.mondialteknology.com ([209.225.3.198]) by webnote.net + (8.9.3/8.9.3) with ESMTP id RAA09761; Sat, 21 Sep 2002 17:35:07 +0100 +From: guillian@georgia.co.jp +Received: from [205.252.42.99] (helo=[192.168.1.20]) by + RS01.mondialteknology.com with esmtp (Exim 4.01) id 17shcI-0004UC-00; + Sat, 21 Sep 2002 12:36:02 +0200 +Received: from GEOGRAPHY.NET by 192.168.1.20 with SMTP (QuickMail Pro + Server for MacOS 1.1.2); 21-Sep-2002 12:25:55 -0400 +Message-Id: <000060c62ff6$000068bc$00001cd1@alabama.co.jp> +To: +Subject: If You Dont... Your Competition Will! 7377 +Date: Fri, 20 Sep 2002 18:27:57 -0600 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2615.200 +X-Mimeole: Produced By Microsoft MimeOLE V5.00.2615.200 + +Freedombuilder Advertising Services® can put your product or service instantly +into the hands of millions of prospects! +  +"Many business people are finding out that they can now advertise +in ways that they never could have afforded in the past.  The cost +of sending mass e-mail is extremely low, and the response rate is +high and quick." +- USA TODAY +  +" Sanford Wallace says he has made over a Million dollars using bulk email" +- WALL STREET JOURNAL +~~~~~~~~~~~~~~~~~~~~ +  +Since 1998, Freedombuilder Advertising Services has provided bulk email marketing +to thousands of well-satisfied customers. We offer the most competitive prices in the +industry, made possible by our high percentage of repeat business. We have the +most advanced direct email technology employed by only a knowledgeable few +in the world. +  +We have over 260 million active email addresses, increasing our list at the rate of +30-50 million per month. You will have instant guaranteed results, something no other +form of marketing can claim. Our turn around time is a remarkable 24 hours. +  +Our email addresses are sorted, cleaned, and filtered for a very profitable +marketing campaign. +  +We guarantee the lowest prices with a proven track record. +  +Best of ALL, Freedombuilder Advertising Services® can be used as a +100% TAX WRITE OFF for your Business! +  + 1) Let's say you... Sell a $24.95 PRODUCT or SERVICE. + 2) Let's say you... Mass Email to 1,000,000 PEOPLE DAILY. + 3) Let's say you... Receive JUST 1 ORDER for EVERY 2,500 EMAILS. +  + CALCULATION OF YOUR EARNINGS BASED ON THE ABOVE STATISTICS: + [Day 1]: $9,980  [Week 1]: $69,860  [Month 1]: $279,440 +  +Now you can see how bulk email advertising works, and how +Freedombuilder Advertising Services® can help YOU...! +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Our Prices List: +  +200,000 emails: $100 +1,000,000 emails $300 +2,000,000 emails $400 +3,000,000 emails $500 +4,000,000 emails $600 +5,000,000 emails $700 +10,000,000 emails $1250 +OVER 10 Million - Please inquire +  +Prices above are for 100% DELIVERED +Emails, with your message and subject line. +  +Please include this information with your order for faster service! +------------------------------------------------------------------------------------------------------------------- +  +Name: _______________________________ +Address:______________________________ +Phone Number:_________________________ +E Mail Address:_________________________ +"finished, ready to be sent ad", on a 3.5 floppy disk. +  +Payable by: US Cash, Certified Cheque, or International Money +Order to: + +Freedom Builder Advertising Services +Suite 2058 #3, 9899 112th Avenue +Grande Prairie, AB, Canada +T8V-7T2 +----------------------------------------------------------------------------------------------------------------------- +  +For order inquiries or extended information please call or email us: +Voice/Fax-253-660-3853 (Limited to 30 secs) +Customer Service (780) 513-2166 +Email: freedombuilder@btamail.net.cn + +Best Regards, And Have A Blessed Day! +Freedombuilder Advertising Services® +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +  +Under Bill s.1618 TITLE III passed by the 105th U.S. Congress this letter +is not considered "spam" as long as we include: 1) contact information and, +2) the way to be removed from future mailings. +  +If this email has reached you in error or you wish to be removed from our +mailing list please send your "remove request" to: 432rfe3@eudoramail.com +  +We honor all remove requests. + + + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00410.b3134c2bf520f95f9b90d4aef4fdd683 b/Ch3/datasets/spam/spam/00410.b3134c2bf520f95f9b90d4aef4fdd683 new file mode 100644 index 000000000..29096fff2 --- /dev/null +++ b/Ch3/datasets/spam/spam/00410.b3134c2bf520f95f9b90d4aef4fdd683 @@ -0,0 +1,69 @@ +From social-admin@linux.ie Sat Sep 21 20:23:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id CB39916F03 + for ; Sat, 21 Sep 2002 20:23:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 21 Sep 2002 20:23:19 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8LIMYC31175 for + ; Sat, 21 Sep 2002 19:22:34 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 28AF8341D5; Sat, 21 Sep 2002 19:23:05 +0100 (IST) +Delivered-To: linux.ie-social@localhost +Received: from linux.local (unknown [213.9.245.200]) by lugh.tuatha.org + (Postfix) with SMTP id 3C04A341BB for ; Sat, + 21 Sep 2002 19:22:22 +0100 (IST) +Received: (qmail 5842 invoked from network); 21 Sep 2002 16:48:24 -0000 +Received: from unknown (HELO h) (192.168.0.2) by linux.local with SMTP; + 21 Sep 2002 16:48:24 -0000 +From: "Sales Department" +To: social@linux.ie +Reply-To: smokesdirect@terra.es +X-Priority: 3 +X-Library: Indy 8.0.25 +Message-Id: <20020921182222.3C04A341BB@lugh.tuatha.org> +Subject: [ILUG-Social] Low Price Tobacco +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Beenthere: social@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group social events +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sat, 21 Sep 2002 18:53:47 +0200 +Date: Sat, 21 Sep 2002 18:53:47 +0200 + + +Dear Sir or Madam + +In the past you have requested information on discounted products. We hope that you find this of interest. If you are not a smoker, and find this email offensive, we sincerely apologise! We will be only too happy to take you off our mailing list. + +If you are a smoker, however, and are fed up with paying high prices for your cigarettes and tobacco, take a look at what we have to offer by clicking on this link. +http://www.smokersassociation.co.uk/?S=15&ID=2 + +We can send you, legally, by registered air mail, direct to your door, 4 cartons of cigarettes or 40 pouches of rolling tobacco (all brands are available) from only 170 Euros - about 105 pounds - fully inclusive of postage and packing. Why pay more? + +To remove yourself from our mailing list, please click below +mailto:smokersclub@terra.es + +Yours faithfully. +Smokers Association + +http://www.smokersassociation.co.uk/?S=15&ID=2 + +xay3171011y +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00411.fae7b15cc1f966d92c2cedc872893268 b/Ch3/datasets/spam/spam/00411.fae7b15cc1f966d92c2cedc872893268 new file mode 100644 index 000000000..6a1f89228 --- /dev/null +++ b/Ch3/datasets/spam/spam/00411.fae7b15cc1f966d92c2cedc872893268 @@ -0,0 +1,101 @@ +From ilug-admin@linux.ie Sat Sep 21 22:04:31 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 9B45816F03 + for ; Sat, 21 Sep 2002 22:04:30 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sat, 21 Sep 2002 22:04:30 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8LKFkC02344 for + ; Sat, 21 Sep 2002 21:15:46 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 9BF36341D4; Sat, 21 Sep 2002 21:16:16 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from byron.heanet.ie (byron.heanet.ie [193.1.219.90]) by + lugh.tuatha.org (Postfix) with ESMTP id 27B6534150 for ; + Sat, 21 Sep 2002 21:15:02 +0100 (IST) +Received: from dialpool-210-214-173-49.maa.sify.net ([210.214.173.49] + helo=indiatimes.com) by byron.heanet.ie with smtp (Exim 4.05) id + 17sqea-00048d-00 for ilug@linux.ie; Sat, 21 Sep 2002 21:15:01 +0100 +From: "vivek" +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="ISO-8859-1" +Reply-To: "vivek" +Message-Id: +Subject: [ILUG] $4,000/Month with your PC ! NO SPAM ! PLEASE READ ! +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 22 Sep 2002 01:54:09 +0530 +Date: Sun, 22 Sep 2002 01:54:09 +0530 +Content-Transfer-Encoding: 8bit + +DEAR OPPORTUNITIES SEEKERS: + +I THOUGHT YOU JUST MIGHT BE INTERESTED IN THE FOLLOWINGS: + +WE ARE CURRENTLY HIRING WORK HOME +TYPIST/CLERK/SECRETARY/SUPERVISOR/TRAINER/MARKETER/MANAGER.WE PAY WEEKLY +1000 USD +POTENTIAL. NO EXPERIENCE OK. MUST KNOW TYPING. NO SEX,AGE LIMIT. PART/FULL +TIME. ANYWHERE IN +THE WORLD. APPLY NOW! +EMAIL: responsevivek@indiatimes.com and put I AM INTERESTED in subject +line for details. No spam. Give it a chance. + + + +OUR BUSINESS LINKS: + +OFFSHORE BANKING HIGH INTERESTS ACCOUNT. 300% PER YEAR +AFTER YEAR.WHY +JUST SETTLE FOR 4%? SINCE 1993.MORE INFO . responsevivek@indiatimes.com + +TAKE ADVANTAGE OF OUR (MALAYSIA)LOW CURRENCIES.BUY +CELLULAR PHONES +CHEAP. BRAND NAME :MOTOROLA,SIEMEN ETC. FROM 50 USD.BRAND +NEW.GUARANTEED WORLD LOWEST.GOOD QUALITY.ALL +MODELS.DETAILS : responsevivek@indiatimes.com. WE ALSO BUY/SELL +SECOND-HAND CELL PHONES. QUALITY GUARANTEED. + +GUARANTEED WORLD LOWEST PHONE RATES.TRY USE IT YOURSELF +FOR FREE.OR BE AN AGENT FOR THE TOP TEN AND GET YOUR OWN +FREE WEB PAGES AND MAKE BIG $$$.ALL FOR FREE. +PLEASE CONTACT + +YOUR OWN PERFECT MEDICINE.THE MIRACLE OF URINE +THERAPY.GOOD-BYE TO +SURGICAL KNIFE,RADIATION,CHEMO ETC.FRIENDS OF UNRINE +THERAPY LIFE-TIME +MEMBERSHIP.FREE CONSULTATION.DR.LIM HENG KIAP,FATHER OF +URINE +THERAPY,MALAYSIA,HEAD OF CHARITABLE NATURAL HEALTH +FARM,FOREST RESERVE +AREA(FRIM ,KUALA LUMPUR ,MALAYSIA)OTHERS INCLUDE +:FASTING,HERBAL,HYDRO-NATURAL HOT, COLD SPRING +SPAS,CRYSTAL,MEDITATION +ETC.INTERESTED PLEASE CONTACT: responsevivek@indiatimes.com + + +ALL THE ABOVE AGENT/DEALER/REPRESENTATIVE WANTED. + +TRADE ENQUIRIES WELCOMED. PLEASE EMAIL: responsevivek@indiatimes.com +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00412.700e6d74e5f886eb75017714a6aeb735 b/Ch3/datasets/spam/spam/00412.700e6d74e5f886eb75017714a6aeb735 new file mode 100644 index 000000000..e146b752e --- /dev/null +++ b/Ch3/datasets/spam/spam/00412.700e6d74e5f886eb75017714a6aeb735 @@ -0,0 +1,90 @@ +From paige_455@aol.com Sun Sep 22 14:13:09 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 5A9F116F03 + for ; Sun, 22 Sep 2002 14:13:08 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 14:13:08 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8M2ifC17703 for + ; Sun, 22 Sep 2002 03:44:41 +0100 +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) by + webnote.net (8.9.3/8.9.3) with ESMTP id DAA10721 for ; + Sun, 22 Sep 2002 03:45:14 +0100 +Received: from mailin-01.mx.aol.com (unknown [166.114.235.2]) by + smtp.easydns.com (Postfix) with SMTP id E5C312BBF7 for ; + Sat, 21 Sep 2002 22:45:08 -0400 (EDT) +From: Paige +To: +Subject: Remeber me? +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Message-Id: <20020922024508.E5C312BBF7@smtp.easydns.com> +Date: Sat, 21 Sep 2002 22:45:08 -0400 (EDT) +Content-Type: text/html; charset="US-ASCII" + + + + + + + +

    + + + + + + + + + + + + + +
    +
    + +

    THIS + IS A SPECIAL FREE OFFER THAT YOU WILL ONLY GET ONCE!
    +

    + +

    My name + is Paige and I have made a new site for my friends. This is not just a + normal site but it is FREE to you. + I am only making this offer once so hurry and claim your FREE + password now!

    +

    Make + sure that you have at least a valid email to retrieve your password and + that is all that you need.

    + +

    + CLICK + HERE TO
    + RETRIEVE YOUR PASSWORD NOW!
    +
    +
    + MY SITE IS 100% FREE FOR LIFE

    +
    +
    +
    +
    +

    This +email was sent to you because your email address is part of a targeted opt-in +list.You have received this
    email by either requesting more information on +one of our sites or someone may have used your email address.
    If you received +this email in error, please accept our apologies.
    If you do not wish to receive +further offers, please click below and enter your email to remove your email from +future offers.

    Click +Here to Remove

    Anti-SPAM +Policy Disclaimer: Under Bill s.1618 Title III passed by the 105th U. S. Congress, +mail cannot be considered spam
    as long as we include contact information +and a remove link for removal from this mailing list. If this e-mail is unsolicited, +please
    accept our apologies. Per the proposed H.R. 3113 Unsolicited Commercial +Electronic Mail Act of 2000, further transmissions
    to you by the sender may +be stopped at NO COST to you!

    + + diff --git a/Ch3/datasets/spam/spam/00413.28e8cb47d7429bf78c711079da50fcd4 b/Ch3/datasets/spam/spam/00413.28e8cb47d7429bf78c711079da50fcd4 new file mode 100644 index 000000000..a0c1728db --- /dev/null +++ b/Ch3/datasets/spam/spam/00413.28e8cb47d7429bf78c711079da50fcd4 @@ -0,0 +1,52 @@ +From fivestarpicks@netzero.com Sun Sep 22 14:13:11 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id D0B7A16F03 + for ; Sun, 22 Sep 2002 14:13:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 14:13:10 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8M2uMC17924 for + ; Sun, 22 Sep 2002 03:56:22 +0100 +Received: from 210.126.63.68 ([217.167.180.65]) by webnote.net + (8.9.3/8.9.3) with SMTP id DAA10727 for ; + Sun, 22 Sep 2002 03:56:47 +0100 +Message-Id: <200209220256.DAA10727@webnote.net> +Received: from 34.57.158.148 ([34.57.158.148]) by rly-xr02.mx.aol.com with + local; Sep, 21 2002 9:36:31 PM +0400 +Received: from unknown (HELO rly-xw01.mx.aol.com) (96.213.243.25) by + n9.groups.yahoo.com with asmtp; Sep, 21 2002 8:46:25 PM +1200 +Received: from mx.rootsystems.net ([60.127.54.24]) by + smtp-server6.tampabay.rr.com with SMTP; Sep, 21 2002 7:31:16 PM -0200 +From: Sportspicks +To: ACCOUNT.HOLDER@webnote.net +Cc: +Subject: YOUR ACCOUNT HAS BEEN CLOSED! +Sender: Sportspicks +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Sat, 21 Sep 2002 21:57:46 -0700 +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Priority: 1 + +You have been removed from our list. +You will NOT be able to recieve todays picks in the email +You will NOT be notified of any new sports pick websites. + +IF YOU HAVE QUESTIONS ABOUT WHY YOUR ACCOUNT IS EXPIRED, +YOUR ACCOUNT WAS CLOSED FOR ONE OF THE FOLLOWING REASONS. + +1. YOU FAILED TO LOG INTO YOUR ACCCOUNT FOR OVER A MONTH. +2. YOUR ACCOUNT WAS FOUND ON A SPAM LIST AND REJECTED. +3. THE GIFT ACCOUNT SOMEONE SIGNED YOU UP FOR EXPIRED. + +If you wish to rejoin please go to the following url: +http://www.freewebs.com/registar/ + +YOU DO NOT NEED TO DO ANYTHING TO BE REMOVED FROM THIS eMAIL LIST. +THIS IS A ONE TIME MAILING TO NOTIFY YOU THAT, YOU ARE REMOVED. +However, you may reply with the word "remove" in the subject line + + diff --git a/Ch3/datasets/spam/spam/00414.b2312673ca5358901c801eb44c00e310 b/Ch3/datasets/spam/spam/00414.b2312673ca5358901c801eb44c00e310 new file mode 100644 index 000000000..4e024bc33 --- /dev/null +++ b/Ch3/datasets/spam/spam/00414.b2312673ca5358901c801eb44c00e310 @@ -0,0 +1,58 @@ +From offer-09102002-TEXT@offerclubmail.330w.com Sun Sep 22 14:13:17 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 25D1616F03 + for ; Sun, 22 Sep 2002 14:13:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 14:13:15 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8M3hSC21239 for + ; Sun, 22 Sep 2002 04:43:39 +0100 +Received: from duke.330w.com ([216.53.71.117]) by webnote.net + (8.9.3/8.9.3) with ESMTP id EAA11206 for ; + Sun, 22 Sep 2002 04:44:00 +0100 +Message-Id: <200209220344.EAA11206@webnote.net> +Received: by duke.330w.com (PowerMTA(TM) v1.5); Sat, 21 Sep 2002 23:40:27 + -0400 (envelope-from ) +From: offer@offerclubmail.com +To: zzzz@spamassassin.taint.org +Subject: Welcome to OfferClub! +Id-Offerclubmail: zzzz####spamassassin.taint.org +Date: Sat, 21 Sep 2002 23:40:27 -0400 +Content-Type: text/html + + +
    +Dear Valued Member,
    +
    +OfferClub would like to thank you for the opportunity to present you
    +with valuable offers. You are on this list as you indicated that you
    +would like to receive special offers from trusted third parties via
    +email from us or one of our marketing partners. We maintain a high
    +level of customer satisfaction by ensuring periodically that we are
    +presenting third party information that you find important and useful.
    +To keep hearing from us every so often DO NOTHING.
    +
    +We hope you'll stick around to check out our valuable content, but if
    +you do not wish to receive our emails please unsubscribe now by
    +clicking here.
    +
    +
    +Thank you,
    +
    +OfferClub 
    +
    +
    +--------------------------------------------------------------------------------
    +IMPORTANT: If this message was sent to you in error, or if you would
    +like to unsubscribe please click the link above or cut and paste the
    +following link into a web browser:
    +http://www.offerclubmail.com/unsubscribe.php?eid=\~moc.cnietonten^^mj\~1754388\~12a1
    +--------------------------------------------------------------------------------
    +
    + + + + diff --git a/Ch3/datasets/spam/spam/00415.6faccf48ec514344fc850e8b3c154528 b/Ch3/datasets/spam/spam/00415.6faccf48ec514344fc850e8b3c154528 new file mode 100644 index 000000000..3ee0b059c --- /dev/null +++ b/Ch3/datasets/spam/spam/00415.6faccf48ec514344fc850e8b3c154528 @@ -0,0 +1,69 @@ +From cashin@mymail.gr Sun Sep 22 14:13:18 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E442D16F03 + for ; Sun, 22 Sep 2002 14:13:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 14:13:17 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8M4bEC22704 for + ; Sun, 22 Sep 2002 05:37:15 +0100 +Received: from mymail.gr (ip-170-149-113.xdsl-fixo.ctbcnetsuper.com.br + [200.170.149.113]) by webnote.net (8.9.3/8.9.3) with SMTP id FAA11288; + Sun, 22 Sep 2002 05:37:43 +0100 +Date: Sun, 22 Sep 2002 05:37:43 +0100 +From: cashin@mymail.gr +Reply-To: +Message-Id: <007a83d36eda$3357c8a6$5dc54ab7@vlwonn> +To: tom78@mail.gr +Subject: Work at Home - $5000 a month +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2616 +Importance: Normal +Content-Transfer-Encoding: 8bit + + + +Earn Extra Income From Home. Here is tremendous +opportunity to earn big money. We are a multimillion +company that is growing at a rate of 1000% per year. +We are looking for motivated individuals who are +looking to earn a substantial income from home. + +This is what you been waiting for a chance to be +financially secure. Earn Extra Income From Home. Here +is a tremendous opportunity to earn + No experience is required. We will provide the +training you may need. + +We are looking for energetic and self- motivated +people that want to change their life. If that is you +click the link below and complete our online +information request form, and one of our employment +specialist will contact you. + +http://ter.netblah.com:27000 + +Got nothing to lose and a lot to gain, with a career +that will provide you cast opportunities and +substantial income. Please fill our online information +request form here: + +http://ter.netblah.com:27000 + +To remove from our list simply click on the link below +now: + +http://ter.netblah.com:27000/remove.html + + + + +9986dxkU6-303JWSp0699MAYXl24 + + diff --git a/Ch3/datasets/spam/spam/00416.bff1badad869f205fdb54f311f060734 b/Ch3/datasets/spam/spam/00416.bff1badad869f205fdb54f311f060734 new file mode 100644 index 000000000..a15892c96 --- /dev/null +++ b/Ch3/datasets/spam/spam/00416.bff1badad869f205fdb54f311f060734 @@ -0,0 +1,182 @@ +From bestmortgages@uol.com.br Sun Sep 22 14:13:21 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id AC13A16F03 + for ; Sun, 22 Sep 2002 14:13:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 14:13:19 +0100 (IST) +Received: from 211.160.14.157 (customer-200-23-246-163.uninet.net.mx + [200.23.246.163] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with SMTP id g8M5xQC24656 for ; Sun, 22 Sep 2002 + 06:59:33 +0100 +Message-Id: <200209220559.g8M5xQC24656@dogma.slashnull.org> +Received: from 152.74.145.157 ([152.74.145.157]) by hd.regsoft.net with + esmtp; Sep, 21 2002 10:44:12 PM -0700 +Received: from [135.12.72.250] by ssymail.ssy.co.kr with SMTP; + Sep, 21 2002 9:35:13 PM -0200 +Received: from unknown (74.38.244.167) by asy100.as122.sol.superonline.com + with NNFMP; Sep, 21 2002 8:32:21 PM +0700 +Received: from unknown (HELO mail.gmx.net) (78.165.116.169) by + smtp4.cyberec.com with smtp; Sep, 21 2002 7:34:32 PM -0700 +From: Best Mortgage +To: Undisclosed.Recipients@dogma.slashnull.org +Cc: +Subject: Guaranteed Best Mortgage Rate +Sender: Best Mortgage +MIME-Version: 1.0 +Date: Sat, 21 Sep 2002 22:59:44 -0700 +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 +X-Priority: 1 +Content-Type: text/html; charset="iso-8859-1" + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        The + Best Mortage Rates     Simple, + Easy and FREE 
        
      +
    +
    +
    + + + + + + + + + + +
    +
    Have + HUNDREDS of lenders compete for your loan! +
    +


    +
  • Refinancing +
  • New Home Loans +
  • Debt Consolidation +
  • Second Mortgage +
  • Home Equity
    +

    +

    +
    + Click Here To
    + JUMP-START
    + your Plans for
    + the Future!!!
    +
    +
  • +
    Dear + Homeowner, +

    Interest + Rates are at their lowest point in 40 years! We help + you find the best rate for your situation by matching + your needs with hundreds of lenders!
    +
    + Home Improvement, Refinance, + Second Mortgage, Home Equity Loans, and More!

    +
    + You're eligible even with less than perfect credit!
    +
    + This service is 100% FREE + to home owners and new home buyers without any obligation. +
    +
    + Just fill out a quick, simple form and jump-start your + future plans today!

    +
    + Click Here To Begin

    +
    +
    +
    +
     
      
      +
    +
    +
    +
    + + + + + + +
    You are receiving this email because you registered + at one of JUNCAN.net's partner sites, and agreed to receive + gifts and special offers that may be of interest to you. + If you do not want to receive special offers in the future, + please click + here.
    + You are subscribed as: webmaster@efi.ie
    +
    +
     
       + +
    Equal + Housing Opportunity.
    +
      
    +
    +
    + + + + diff --git a/Ch3/datasets/spam/spam/00417.7b196fd20fd308e0afa9032ccb02474b b/Ch3/datasets/spam/spam/00417.7b196fd20fd308e0afa9032ccb02474b new file mode 100644 index 000000000..d3d79a862 --- /dev/null +++ b/Ch3/datasets/spam/spam/00417.7b196fd20fd308e0afa9032ccb02474b @@ -0,0 +1,102 @@ +From mortgage_quotes_fast@nationwidemortgage.us Sun Sep 22 14:13:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id AE85B16F03 + for ; Sun, 22 Sep 2002 14:13:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 14:13:22 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8M9eCC29967 for + ; Sun, 22 Sep 2002 10:40:12 +0100 +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) by + webnote.net (8.9.3/8.9.3) with ESMTP id KAA11656 for ; + Sun, 22 Sep 2002 10:40:45 +0100 +From: mortgage_quotes_fast@nationwidemortgage.us +Received: from mortgages101.net (mail4.mortgages101.net [4.38.36.3]) by + smtp.easydns.com (Postfix) with SMTP id 0AE9C2C3C6 for ; + Sun, 22 Sep 2002 05:40:10 -0400 (EDT) +To: +Subject: Adv: Mortgage Quotes Fast Online, No Cost +Message-Id: <20020922094010.0AE9C2C3C6@smtp.easydns.com> +Date: Sun, 22 Sep 2002 05:40:10 -0400 (EDT) +Content-Type: text/html + + + + +Home Page + + + + +

    + +

    If this promotion has reached you in error and you would prefer not to +receive marketing messages from us, please send an email to  cease-and-desist@mortgages101.net +  (all one word, no spaces) giving us the email address in question or call +1-888-748-7751 for further assistance.

    + +

    Gain access to a Vast Network Of Qualified Lenders at Nationwide Network!

    + +

    This is a zero-cost service which +enables you to shop for a mortgage conveniently from your home computer.   Our +nationwide database will give you access to lenders with a variety of loan programs that +will work for Excellent, Good, Fair or even Poor Credit!
    We will choose up to 3 mortgage companies +from our database of  registered brokers/lenders. Each will contact you to offer you their best rate and terms - at +no charge.

    You choose the best +offer and save - Shop here for your next mortgage with just ONE +CLICK -

    +
    Poor or Damaged Credit Is +Not A Problem!

    + +
      +

      Consolidate & pay + off high interest bills for one lower monthly payment!  +

      +

      Refinance (with or + without cash out) to a low FIXED rate and payment! +

      +

      Get money to cover + expenses for tuitions, home + improvements, a new vehicle or vacations.

      +

      - Talk with up to three of our lenders today! + VISIT OUR SITE HERE! to get no-cost rate and payment quotes.  + This service is completely FREE to you!

      +
    + + +

     

    +
    + +

    If this promotion has reached you in error +and you do not want to be contacted by us further, click here and let us know.  You +will not be bothered by us at this email address again.  Alternatively, you may send +an email to cease-and-desist@mortgages101.net + giving us the email address in question for IMMEDIATE attention.  Should you +wish to delete your email address from our mailing list by phone, please call +1-888-748-7751 and leave your email address - please spell your email address +clearly.   You may also mail a written request to us at Compliance, NMLN, 3053 +Rancho Vista Blvd. #H-252, Palmdale, CA, 93551.  Your request will be honored within +24 hours of our receipt of your mail.  Failure to exclude yourself from our recurring +mailer via any of the lawful channels provided means that you have given your consent to +be included in our mailer.  You will continue to receive email as long as you do NOT +delete yourself from our mailer.  Please do not continue to receive unwanted email +after we have provided you with lawful means to be excluded.  We log, date and retain +ALL delete requests.  NO PART OF THIS STATEMENT MAY BE AMENDED OR ELIMINATED.  +Thank you.

    + + + + + diff --git a/Ch3/datasets/spam/spam/00418.6321175c76411371c109eafc99563d2c b/Ch3/datasets/spam/spam/00418.6321175c76411371c109eafc99563d2c new file mode 100644 index 000000000..5db38f97a --- /dev/null +++ b/Ch3/datasets/spam/spam/00418.6321175c76411371c109eafc99563d2c @@ -0,0 +1,43 @@ +From insurance_life8331@eudoramail.com Sun Sep 22 14:13:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id EE16616F16 + for ; Sun, 22 Sep 2002 14:13:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 14:13:24 +0100 (IST) +Received: from tony.reimersinc.local ([65.210.112.2]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g8MBRdC32691 for + ; Sun, 22 Sep 2002 12:27:40 +0100 +Received: from mx1.eudoramail.com ([202.9.153.196]) by + tony.reimersinc.local (Mail-Gear 2.0.0) with SMTP id M2002092207110412848 ; + Sun, 22 Sep 2002 07:11:57 -0400 +Message-Id: <00004f1230e6$00006950$000050bb@mx1.eudoramail.com> +To: +From: insurance_life8331@eudoramail.com +Subject: Have you planned for your family's future? ZBM +Date: Sun, 22 Sep 2002 16:33:38 -0700 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + +
    +

    = +
    + +
    =FF= +FFFFA9 +Copyright 2002 - All rights reserved

    If you would no longer like us +to contact you or feel that you have
    received this email in error, +please click here to +unsubscribe.
    + + + + diff --git a/Ch3/datasets/spam/spam/00419.141092086514a246ff2ff8d4bc523400 b/Ch3/datasets/spam/spam/00419.141092086514a246ff2ff8d4bc523400 new file mode 100644 index 000000000..4d5b8ded3 --- /dev/null +++ b/Ch3/datasets/spam/spam/00419.141092086514a246ff2ff8d4bc523400 @@ -0,0 +1,67 @@ +From donna22000r47@loveable.com Sun Sep 22 15:52:20 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 4ED1F16F03 + for ; Sun, 22 Sep 2002 15:52:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 15:52:16 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8ME1fC03946 for + ; Sun, 22 Sep 2002 15:01:41 +0100 +Received: from loveable.com ([200.69.25.81]) by webnote.net (8.9.3/8.9.3) + with SMTP id PAA12270 for ; Sun, 22 Sep 2002 15:02:12 + +0100 +From: donna22000r47@loveable.com +Reply-To: +Message-Id: <003e37c87e8d$3533d3e4$2ea35aa8@rxdijr> +To: +Subject: Too Busy Earning A Living To Make Any Money +Date: Mon, 23 Sep 0102 02:41:39 -0900 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2615.200 +Importance: Normal +Content-Transfer-Encoding: 8bit + +Do You Want To Teach and Grow Rich? + + + + + +If you are a motivated and qualified communicator, I will personally train you to do 3 20 minute presentations per day to qualify prospects that I can provide to you. We will demonstrate to you that you can make $400 a day part time using this system. Or, if you have 20 hours per week, as in my case, you can make in excess of $10,000 per week, as I am currently generating (verifiable, by the way). + +Plus I will introduce you to my mentor who makes well in excess of $1,000,000 annually. + +Many are called, few are chosen. Make the call and call the 24 hour pre-recorded message number below. We will take as much or as little time as you need to see if this program is right for you. + + *** 801-294-3480 *** + +Please do not make this call unless you are genuinely money motivated and qualified. I need people who already have people skills in place and have either made large amounts of money in the past or are ready to generate large amounts of money in the future. Looking forward to your call. + + *** 801-294-3480 *** + + +*To be taken out of this database: +sonic5@artlover.com + + + + + + + + + + + + + +1139XCyB6-691RCxf9796bQPB2-309RhAl1944TbmA1-318qdJU7208ntpS7-l57 +3472UXYd0-277TKyH6354fhOg1-115qsJM1944hyLU8-546fHtS72l50 + + diff --git a/Ch3/datasets/spam/spam/00420.e208f7d65551c01efaa3b4ee4bc4df3c b/Ch3/datasets/spam/spam/00420.e208f7d65551c01efaa3b4ee4bc4df3c new file mode 100644 index 000000000..4942ae311 --- /dev/null +++ b/Ch3/datasets/spam/spam/00420.e208f7d65551c01efaa3b4ee4bc4df3c @@ -0,0 +1,56 @@ +From susan_brown@excite.com Sun Sep 22 21:56:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 5AD0D16F03 + for ; Sun, 22 Sep 2002 21:56:24 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 21:56:24 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8MFWmC06188 for + ; Sun, 22 Sep 2002 16:32:48 +0100 +Received: from rack3.easydns.com (rack3.easydns.com [205.210.42.50]) by + webnote.net (8.9.3/8.9.3) with ESMTP id QAA12471 for ; + Sun, 22 Sep 2002 16:33:21 +0100 +From: susan_brown@excite.com +Received: from excite.com (unknown [80.48.248.33]) by rack3.easydns.com + (Postfix) with SMTP id 404084BB2F for ; Sun, + 22 Sep 2002 11:33:15 -0400 (EDT) +Reply-To: +Message-Id: <038e63d02c3c$5127d6e5$5bd10cc0@iofdnm> +To: +Subject: new extensions now only $14.95 +Date: Sun, 22 Sep 0102 04:09:28 +1100 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +Importance: Normal +Content-Transfer-Encoding: 8bit + +REGISTER DOMAINS FOR JUST $14.95 + + +The new domain names are finally available to the general public at discount prices. Now you can register one of the exciting new .BIZ or .INFO domain names, as well as the original .COM and .NET names for just $14.95. These brand new domain extensions were recently approved by ICANN and have the same rights as the original .COM and .NET domain names. The biggest benefit is of-course that the .BIZ and .INFO domain names are currently more available. i.e. it will be much easier to register an attractive and easy-to-remember domain name for the same price. Visit: http://www.domainsforeveryone.com/ today for more info. + +Register your domain name today for just $14.95 at: http://www.domainsforeveryone.com/ Registration fees include full access to an easy-to-use control panel to manage your domain name in the future. + +Sincerely, + +Domain Administrator +Domains For Everyone + + +To remove your email address from further promotional mailings from this company, click here: +http://www.centralremovalservice.com/cgi-bin/domain-remove.cgi +(f4)5241SxzP1-426eVQm2568RURF1-685fOOl31 + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00421.ca2fe949a956845a9ba81c649a7db6c0 b/Ch3/datasets/spam/spam/00421.ca2fe949a956845a9ba81c649a7db6c0 new file mode 100644 index 000000000..ae6bc5a47 --- /dev/null +++ b/Ch3/datasets/spam/spam/00421.ca2fe949a956845a9ba81c649a7db6c0 @@ -0,0 +1,57 @@ +From silagra888@hotmail.com Sun Sep 22 21:56:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 1CA9116F03 + for ; Sun, 22 Sep 2002 21:56:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 21:56:27 +0100 (IST) +Received: from exchange1.cpcus.com (mail.cpcus.com [12.29.79.131]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8MG2HC06855 for + ; Sun, 22 Sep 2002 17:02:17 +0100 +Message-Id: <200209221602.g8MG2HC06855@dogma.slashnull.org> +Received: by EXCHANGE1 with Internet Mail Service (5.5.2653.19) id + ; Sun, 22 Sep 2002 11:59:17 -0400 +Received: from 218.10.122.220 (KKK [218.10.122.220]) by + exchange1.cpcus.com with SMTP (Microsoft Exchange Internet Mail Service + Version 5.5.2653.13) id S46KLV34; Sun, 22 Sep 2002 11:59:08 -0400 +From: Patrice Alt +To: millennium@efi.fi +Date: 22 Sep 02 15:51:31 -0000 +Subject: First Time Generic V*agra under $3 per 50mg +X-Mailer: Microsoft Outlook Express 6.00.2600.0000.213597 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +MIME-Version: 1.0 +Content-Type: multipart/alternative; boundary=NS_MAIL_Boundary_07132002 + +This is a multi-part message in MIME format. +--NS_MAIL_Boundary_07132002 +Content-Type: text/html + + +
    +
    +
    +
    Generic V*AGRA - +$3 per 50mg - Generic V*AGRA

    Only The Price & The Packaging is +Different

    • Shipping & Handling - FREE
    • NO Prescription +Required for shipping.
    • NO Consultation +Fee.
    +

    +

    +

    If you do not wish to receive mail from us please +follow this link for removal and we will ensure +that you never receive email from our system again.

    +We apologise for any inconvenience we may have caused you.
    +
    +--NS_MAIL_Boundary_07132002-- + + diff --git a/Ch3/datasets/spam/spam/00422.7d5baf3fe64de8647b41aeb820ada876 b/Ch3/datasets/spam/spam/00422.7d5baf3fe64de8647b41aeb820ada876 new file mode 100644 index 000000000..27aee4e7a --- /dev/null +++ b/Ch3/datasets/spam/spam/00422.7d5baf3fe64de8647b41aeb820ada876 @@ -0,0 +1,500 @@ +From ilug-admin@linux.ie Sun Sep 22 21:56:33 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 2878F16F03 + for ; Sun, 22 Sep 2002 21:56:29 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 21:56:29 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8MK3oC13384 for + ; Sun, 22 Sep 2002 21:03:50 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id B7C2E340E4; Sun, 22 Sep 2002 21:04:20 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from relay.dub-t3-1.nwcgroup.com (relay.dub-t3-1.nwcgroup.com + [195.129.80.16]) by lugh.tuatha.org (Postfix) with ESMTP id 5362B340D5 for + ; Sun, 22 Sep 2002 21:03:32 +0100 (IST) +Received: from 202.103.11.82 (unknown [211.101.198.69]) by + relay.dub-t3-1.nwcgroup.com (Postfix) with SMTP id 0935270005 for + ; Sun, 22 Sep 2002 21:03:22 +0100 (IST) +From: "Robert@home-based-business.de" +To: ilug@linux.ie +Cc: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Mailer: Internet Mail Service (5.5.2650.21) +X-Priority: 1 +Message-Id: <20020922200322.0935270005@relay.dub-t3-1.nwcgroup.com> +Subject: [ILUG] Earn 100.000$ in one year working at home +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Sun, 22 Sep 2002 22:02:32 +0200 +Date: Sun, 22 Sep 2002 22:02:32 +0200 + +Hello + +You may have seen this business before and +ignored it. I know I did - many times! However, +please take a few moments to read this letter. +I was amazed when the profit potential of this +business finally sunk in... and it works! + +With easy-to-use e-mail tools and opt-in e-mail, +success in this business is now fast, easy and +well within the capabilities of ordinary people +who know little about internet marketing. And the +earnings potential is truly staggering! + +I'll make you a promise. READ THIS E-MAIL TO THE END! - +follow what it says to the letter - and you will not +worry whether a RECESSION is coming or not, who is +President, or whether you keep your current job or not. +Yes, I know what you are thinking. I never responded +to one of these before either. One day though, +something just said: "You throw away $25.00 going to +a movie for 2 hours with your wife. What the heck." +Believe me, no matter where you believe those "feelings" +come from, I thank every day that I had that feeling. + +I cannot imagine where I would be or what I would be +doing had I not. Read on. It's true. Every word of it. +It is legal. I checked. Simply because you are buying +and selling something of value. + +AS SEEN ON NATIONAL TV: + +Making over half a million dollars every 4 to 5 +months from your home. + +THANKS TO THE COMPUTER AGE AND THE INTERNET! +================================================== +BE AN INTERNET MILLIONAIRE LIKE OTHERS WITHIN A YEAR!!! + +Before you say "Bull", please read the following. +This is the letter you have been hearing about on the +news lately. Due to the popularity of this letter on +the internet, a national weekly news program recently +devoted an entire show to the investigation of this +program described below, to see if it really can make +people money. The show also investigated whether or +not the program was legal. + +Their findings proved once and for all that there are +"absolutely NO laws prohibiting the participation in +the program and if people can 'follow the simple +instructions' they are bound to make some mega bucks +with only $25 out of pocket cost". + +DUE TO THE RECENT INCREASE OF POPULARITY & RESPECT +THIS PROGRAM HAS ATTAINED, IT IS CURRENTLY WORKING +BETTER THAN EVER. + +This is what one had to say: "Thanks to this +profitable opportunity. I was approached many times +before but each time I passed on it. I am so glad +I finally joined just to see what one could expect +in return for the minimal effort and money required. +To my astonishment, I received a total $610,470.00 +in 21 weeks, with money still coming in." + +Pam Hedland, Fort Lee, New Jersey. +================================================== +Another said: "This program has been around for a +long time but I never believed in it. But one day +when I received this again in the mail I decided +to gamble my $25 on it. I followed the simple +instructions and walaa ..... 3 weeks later the +money started to come in. First month I only made +$240.00 but the next 2 months after that I made +a total of $290,000.00. So far, in the past 8 months +by re-entering the program, I have made over +$710,000.00 and I am playing it again. The key to +success in this program is to follow the simple +steps and NOT change anything." + +More testimonials later but first, ======= + +==== PRINT THIS NOW FOR YOUR FUTURE REFERENCE ==== +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ + +If you would like to make at least $500,000 every +4 to 5 months easily and comfortably, please read the +following...THEN READ IT AGAIN and AGAIN!!! + +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ + +FOLLOW THE SIMPLE INSTRUCTION BELOW AND +YOUR FINANCIAL DREAMS WILL COME TRUE, GUARANTEED! + +INSTRUCTIONS: + +=====Order all 5 reports shown on the list below ===== + +For each report, send $5 CASH, THE NAME & NUMBER OF THE +REPORT YOU ARE ORDERING and YOUR E-MAIL ADDRESS to the +person whose name appears ON THAT LIST next to the report. +MAKE SURE YOUR RETURN ADDRESS IS ON YOUR ENVELOPE TOP +LEFT CORNER in case of any mail problems. + +===WHEN YOU PLACE YOUR ORDER, MAKE SURE === +===YOU ORDER EACH OF THE 5 REPORTS! === +You will need all 5 reports so that you can save +them on your computer and resell them. +YOUR TOTAL COST $5 X 5 = $25.00. + +Within a few days you will receive, via e-mail, each +of the 5 reports from these 5 different individuals. +Save them on your computer so they will be accessible +for you to send to the 1,000's of people who will +order them from you. Also make a floppy of these +reports and keep it on your desk in case something +happens to your computer. + +IMPORTANT - DO NOT alter the names of the people who +are listed next to each report, or their sequence on +the list, in any way other than what is instructed +below in steps 1 through 6 or you will lose out +on the majority of your profits. Once you +understand the way this works, you will also +see how it will not work if you change it. + +Remember, this method has been tested, and if you +alter it, it will NOT work!!! People have tried +to put their friends'/relatives' names on all five +thinking they could get all the money. But it does +not work this way. Believe us, some have tried to +be greedy and then nothing happened. So Do Not +try to change anything other than what is instructed. +Because if you do, it will not work for you. +Remember, honesty reaps the reward!!! + +This IS a legitimate BUSINESS. You are offering a +product for sale and getting paid for it. Treat it +as such and you will be VERY profitable in a short +period of time. + +1.. After you have ordered all 5 reports, take this +advertisement and REMOVE the name & address of the +person in REPORT # 5. This person has made it through +the cycle and is no doubt counting their fortune. + +2.. Move the name & address in REPORT # 4 down TO REPORT # 5. + +3.. Move the name & address in REPORT # 3 down TO REPORT # 4. + +4.. Move the name & address in REPORT # 2 down TO REPORT # 3. + +5.. Move the name & address in REPORT # 1 down TO REPORT # 2 + +6.... Insert YOUR name & address in the REPORT # 1 Position. + +PLEASE MAKE SURE you copy every name & address +ACCURATELY! This is critical to YOUR success. + +================================================== +**** Take this entire letter, with the modified +list of names, and save it on your computer. +DO NOT MAKE ANY OTHER CHANGES. + +Save this on a disk as well just in case you lose +any data. To assist you with marketing your business +on the internet, the 5 reports you purchase will +provide you with invaluable marketing information +which includes how to send bulk e-mails legally, +where to find thousands of free classified ads and +much more. There are 2 primary methods to get this +venture going: + +METHOD # 1: BY SENDING BULK E-MAIL LEGALLY +================================================== + +Let's say that you decide to start small, just to see +how it goes, and we will assume you and those involved +send out only 5,000 e-mails each. Let's also assume +that the mailing receives only a 0.2% (2/10 of 1%) +response (the response could be much better but let's +just say it is only 0.2%). Also many people will send +out hundreds of thousands of e-mails instead of only +5,000 each. + +Continuing with this example, you send out only +5,000 e-mails. With a 0.2% response, that is only +10 orders for report # 1. Those 10 people responded +by sending out 5,000 e-mails each for a total of +50,000. Out of those 50,000 e-mails only 0.2% +responded with orders. That's 100 people who +responded and ordered Report # 2. + +Those 100 people mail out 5,000 e-mails each for +a total of 500,000 e-mails. The 0.2% response to +that is 1000 orders for Report # 3. + +Those 1000 people send 5,000 e-mails each for a +total of 5 million e-mails sent out. The 0.2% +response is 10,000 orders for Report # 4. + +Those 10,000 people send out 5,000 e-mails each +for a total of 50,000,000 (50 million) e-mails. +The 0.2% response to that is 100,000 orders for +Report # 5. + +THAT'S 100,000 ORDERS TIMES $5 EACH = $500,000.00 +(half a million dollars). + +Your total income in this example is: 1..... $50 ++ 2..... $500 + 3.....$5,000 + 4..... $50,000 ++ 5.... $500,000 .... Grand Total=$555,550.00 + +NUMBERS DO NOT LIE. GET A PENCIL & PAPER AND +FIGURE OUT THE WORST POSSIBLE RESPONSES AND NO +MATTER HOW YOU CALCULATE IT, YOU WILL STILL +MAKE A LOT OF MONEY! +================================================== + +REMEMBER FRIEND, THIS IS ASSUMING ONLY 10 PEOPLE +ORDERING OUT OF 5,000 YOU MAILED TO. Dare to think +for a moment what would happen if everyone or half +or even one 4th of those people mailed 100,000 +e-mails each or more? + +There are over 150 million people on the internet +worldwide and counting, with thousands more coming +online every day. Believe me, many people will do +just that, and more! + +METHOD # 2: BY PLACING FREE ADS ON THE INTERNET +================================================== + +Advertising on the net is very, very inexpensive and +there are hundreds of FREE places to advertise. +Placing a lot of free ads on the internet will +easily get a larger response. We strongly suggest +you start with Method # 1 and add METHOD # 2 as you +go along. For every $5 you receive, all you must +do is e-mail them the report they ordered. That's it. +Always provide same day service on all orders. + +This will guarantee that the e-mail they send out, +with your name and address on it, will be prompt +because they cannot advertise until they receive +the report. + +===========AVAILABLE REPORTS ==================== +The reason for the "cash" is not because this is +illegal or somehow "wrong". It is simply about time. +Time for checks or credit cards to be cleared or +approved, etc. Concealing it is simply so no one +can SEE there is money in the envelope and steal +it before it gets to you. + +ORDER EACH REPORT BY ITS NUMBER & NAME ONLY. +Notes: Always send $5 cash (U.S. CURRENCY) for +each report. Checks NOT accepted. Make sure the +cash is concealed by wrapping it in at least +2 sheets of paper. On one of those sheets of +paper, write the NUMBER & the NAME of the report +you are ordering, YOUR E-MAIL ADDRESS and your +name and postal address. + +PLACE YOUR ORDER FOR THESE REPORTS NOW : +================================================== +REPORT # 1: "The Insider's Guide To Advertising +for Free On The Net" +Order Report #1 from: + +Robert Borowczyk +ul. J. Olbrachta 118C m. 28 +01-373 Warsaw +Poland + +______________________________________________________ + +REPORT # 2: "The Insider's Guide To Sending Bulk +Email On The Net" +Order Report # 2 from: + +Mohammad Faraziyan +Engelbertstr. 25 +40233 Düsseldorf +Germany + + +______________________________________________________ + +REPORT # 3: "Secret To Multilevel Marketing On The Net" +Order Report # 3 from: + +Luis Pastor +Apartado 81 +48080 +Bilbao +Spain + +______________________________________________________ + +REPORT # 4: "How To Become A Millionaire Using +MLM & The Net" +Order Report # 4 from: + + +Ali Reza +Auf den Holln 68 +44894 Bochum +Germany + +______________________________________________________ + +REPORT # 5: "How To Send Out One Million Emails +For Free" +Order Report # 5 From: + +J.siden +krondikesvägen 54 A +83147 Östersund +Sweden + +______________________________________________________ +$$$$$$$$$ YOUR SUCCESS GUIDELINES $$$$$$$$$$$ + +Follow these guidelines to guarantee your success: + +=== If you do not receive at least 10 orders for +Report #1 within 2 weeks, continue sending e-mails +until you do. + +=== After you have received 10 orders, 2 to 3 weeks +after that you should receive 100 orders or more for +REPORT # 2. If you do not, continue advertising or +sending e-mails until you do. + +** Once you have received 100 or more orders for +Report # 2, YOU CAN RELAX, because the system is +already working for you, and the cash will continue +to roll in ! THIS IS IMPORTANT TO REMEMBER: Every time +your name is moved down on the list, you are placed +in front of a different report. + +You can KEEP TRACK of your PROGRESS by watching which +report people are ordering from you. IF YOU WANT TO +GENERATE MORE INCOME SEND ANOTHER BATCH OF E-MAILS +AND START THE WHOLE PROCESS AGAIN. There is NO LIMIT +to the income you can generate from this business !!! +================================================= +FOLLOWING IS A NOTE FROM THE ORIGINATOR OF THIS PROGRAM: +You have just received information that can give you +financial freedom for the rest of your life, with +NO RISK and JUST A LITTLE BIT OF EFFORT. You can +make more money in the next few weeks and months +than you have ever imagined. Follow the program +EXACTLY AS INSTRUCTED. Do Not change it in any way. +It works exceedingly well as it is now. + +Remember to e-mail a copy of this exciting report +after you have put your name and address in +Report #1 and moved others to #2 .....# 5 as +instructed above. One of the people you send this +to may send out 100,000 or more e-mails and your +name will be on every one of them. + +Remember though, the more you send out the more +potential customers you will reach. So my friend, +I have given you the ideas, information, materials +and opportunity to become financially independent. + +IT IS UP TO YOU NOW ! + +=============MORE TESTIMONIALS=============== +"My name is Mitchell. My wife, Jody and I live in +Chicago. I am an accountant with a major U.S. +Corporation and I make pretty good money. When I +received this program I grumbled to Jody about +receiving 'junk mail'. I made fun of the whole +thing, spouting my knowledge of the population +and percentages involved. I 'knew' it wouldn't work. +Jody totally ignored my supposed intelligence and +few days later she jumped in with both feet. I made +merciless fun of her, and was ready to lay the old +'I told you so' on her when the thing didn't work. + +Well, the laugh was on me! Within 3 weeks she had +received 50 responses. Within the next 45 days she +had received total $ 147,200.00 ......... all cash! +I was shocked. I have joined Jody in her 'hobby'." + +Mitchell Wolf M.D., Chicago, Illinois +================================================ +"Not being the gambling type, it took me several +weeks to make up my mind to participate in this plan. +But conservative as I am, I decided that the initial +investment was so little that there was just no way +that I wouldn't get enough orders to at least get +my money back. I was surprised when I found my +medium size post office box crammed with orders. +I made $319,210.00 in the first 12 weeks. + +The nice thing about this deal is that it does not +matter where people live. There simply isn't a +better investment with a faster return and so big." + +Dan Sondstrom, Alberta, Canada +================================================= +"I had received this program before. I deleted it, +but later I wondered if I should have given it a try. +Of course, I had no idea who to contact to get +another copy, so I had to wait until I was e-mailed +again by someone else......... 11 months passed then +it luckily came again...... I did not delete this one! +I made more than $490,000 on my first try and all the +money came within 22 weeks." + +Susan De Suza, New York, N.Y. +================================================= +"It really is a great opportunity to make relatively +easy money with little cost to you. I followed the +simple instructions carefully and within 10 days the +money started to come in. My first month I made $20, +in the 2nd month I made $560.00 and by the end of the +third month my total cash count was $362,840.00. +Life is beautiful, Thanx to internet." + +Fred Dellaca, Westport, New Zealand +================================================= + +ORDER YOUR REPORTS TODAY AND GET STARTED ON YOUR +ROAD TO FINANCIAL FREEDOM ! + +================================================= +If you have any questions of the legality of this +program, contact the Office of Associate Director +for Marketing Practices, Federal Trade Commission, +Bureau of Consumer Protection, Washington, D.C. + +This message is sent in compliance of the proposed +bill SECTION 301, paragraph (a)(2)(C) of S. 1618. + +* This message is not intended for residents in the +State of Washington, Virginia or California, +screening of addresses has been done to the best +of our technical ability. + +* This is a one time mailing and this list will +never be used again. +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00423.bee32224fd8c9c8c06e2099d9c2adccd b/Ch3/datasets/spam/spam/00423.bee32224fd8c9c8c06e2099d9c2adccd new file mode 100644 index 000000000..c5d15f1fa --- /dev/null +++ b/Ch3/datasets/spam/spam/00423.bee32224fd8c9c8c06e2099d9c2adccd @@ -0,0 +1,477 @@ +From Robert@home-based-business.de Sun Sep 22 21:56:38 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 45C4316F16 + for ; Sun, 22 Sep 2002 21:56:34 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 21:56:34 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8MKXiC14225 for + ; Sun, 22 Sep 2002 21:33:44 +0100 +Received: from 217.167.180.65 (aurora.marine.su [212.107.193.66]) by + webnote.net (8.9.3/8.9.3) with SMTP id VAA13010 for ; + Sun, 22 Sep 2002 21:33:17 +0100 +Message-Id: <200209222033.VAA13010@webnote.net> +From: "Robert@home-based-business.de" +To: zzzz@spamassassin.taint.org +Cc: +Subject: Earn 100.000$ in one year working at home +Sender: "Robert@home-based-business.de" +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Sun, 22 Sep 2002 22:32:08 +0200 +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +X-Priority: 1 + +Hello + +You may have seen this business before and +ignored it. I know I did - many times! However, +please take a few moments to read this letter. +I was amazed when the profit potential of this +business finally sunk in... and it works! + +With easy-to-use e-mail tools and opt-in e-mail, +success in this business is now fast, easy and +well within the capabilities of ordinary people +who know little about internet marketing. And the +earnings potential is truly staggering! + +I'll make you a promise. READ THIS E-MAIL TO THE END! - +follow what it says to the letter - and you will not +worry whether a RECESSION is coming or not, who is +President, or whether you keep your current job or not. +Yes, I know what you are thinking. I never responded +to one of these before either. One day though, +something just said: "You throw away $25.00 going to +a movie for 2 hours with your wife. What the heck." +Believe me, no matter where you believe those "feelings" +come from, I thank every day that I had that feeling. + +I cannot imagine where I would be or what I would be +doing had I not. Read on. It's true. Every word of it. +It is legal. I checked. Simply because you are buying +and selling something of value. + +AS SEEN ON NATIONAL TV: + +Making over half a million dollars every 4 to 5 +months from your home. + +THANKS TO THE COMPUTER AGE AND THE INTERNET! +================================================== +BE AN INTERNET MILLIONAIRE LIKE OTHERS WITHIN A YEAR!!! + +Before you say "Bull", please read the following. +This is the letter you have been hearing about on the +news lately. Due to the popularity of this letter on +the internet, a national weekly news program recently +devoted an entire show to the investigation of this +program described below, to see if it really can make +people money. The show also investigated whether or +not the program was legal. + +Their findings proved once and for all that there are +"absolutely NO laws prohibiting the participation in +the program and if people can 'follow the simple +instructions' they are bound to make some mega bucks +with only $25 out of pocket cost". + +DUE TO THE RECENT INCREASE OF POPULARITY & RESPECT +THIS PROGRAM HAS ATTAINED, IT IS CURRENTLY WORKING +BETTER THAN EVER. + +This is what one had to say: "Thanks to this +profitable opportunity. I was approached many times +before but each time I passed on it. I am so glad +I finally joined just to see what one could expect +in return for the minimal effort and money required. +To my astonishment, I received a total $610,470.00 +in 21 weeks, with money still coming in." + +Pam Hedland, Fort Lee, New Jersey. +================================================== +Another said: "This program has been around for a +long time but I never believed in it. But one day +when I received this again in the mail I decided +to gamble my $25 on it. I followed the simple +instructions and walaa ..... 3 weeks later the +money started to come in. First month I only made +$240.00 but the next 2 months after that I made +a total of $290,000.00. So far, in the past 8 months +by re-entering the program, I have made over +$710,000.00 and I am playing it again. The key to +success in this program is to follow the simple +steps and NOT change anything." + +More testimonials later but first, ======= + +==== PRINT THIS NOW FOR YOUR FUTURE REFERENCE ==== +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ + +If you would like to make at least $500,000 every +4 to 5 months easily and comfortably, please read the +following...THEN READ IT AGAIN and AGAIN!!! + +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ + +FOLLOW THE SIMPLE INSTRUCTION BELOW AND +YOUR FINANCIAL DREAMS WILL COME TRUE, GUARANTEED! + +INSTRUCTIONS: + +=====Order all 5 reports shown on the list below ===== + +For each report, send $5 CASH, THE NAME & NUMBER OF THE +REPORT YOU ARE ORDERING and YOUR E-MAIL ADDRESS to the +person whose name appears ON THAT LIST next to the report. +MAKE SURE YOUR RETURN ADDRESS IS ON YOUR ENVELOPE TOP +LEFT CORNER in case of any mail problems. + +===WHEN YOU PLACE YOUR ORDER, MAKE SURE === +===YOU ORDER EACH OF THE 5 REPORTS! === +You will need all 5 reports so that you can save +them on your computer and resell them. +YOUR TOTAL COST $5 X 5 = $25.00. + +Within a few days you will receive, via e-mail, each +of the 5 reports from these 5 different individuals. +Save them on your computer so they will be accessible +for you to send to the 1,000's of people who will +order them from you. Also make a floppy of these +reports and keep it on your desk in case something +happens to your computer. + +IMPORTANT - DO NOT alter the names of the people who +are listed next to each report, or their sequence on +the list, in any way other than what is instructed +below in steps 1 through 6 or you will lose out +on the majority of your profits. Once you +understand the way this works, you will also +see how it will not work if you change it. + +Remember, this method has been tested, and if you +alter it, it will NOT work!!! People have tried +to put their friends'/relatives' names on all five +thinking they could get all the money. But it does +not work this way. Believe us, some have tried to +be greedy and then nothing happened. So Do Not +try to change anything other than what is instructed. +Because if you do, it will not work for you. +Remember, honesty reaps the reward!!! + +This IS a legitimate BUSINESS. You are offering a +product for sale and getting paid for it. Treat it +as such and you will be VERY profitable in a short +period of time. + +1.. After you have ordered all 5 reports, take this +advertisement and REMOVE the name & address of the +person in REPORT # 5. This person has made it through +the cycle and is no doubt counting their fortune. + +2.. Move the name & address in REPORT # 4 down TO REPORT # 5. + +3.. Move the name & address in REPORT # 3 down TO REPORT # 4. + +4.. Move the name & address in REPORT # 2 down TO REPORT # 3. + +5.. Move the name & address in REPORT # 1 down TO REPORT # 2 + +6.... Insert YOUR name & address in the REPORT # 1 Position. + +PLEASE MAKE SURE you copy every name & address +ACCURATELY! This is critical to YOUR success. + +================================================== +**** Take this entire letter, with the modified +list of names, and save it on your computer. +DO NOT MAKE ANY OTHER CHANGES. + +Save this on a disk as well just in case you lose +any data. To assist you with marketing your business +on the internet, the 5 reports you purchase will +provide you with invaluable marketing information +which includes how to send bulk e-mails legally, +where to find thousands of free classified ads and +much more. There are 2 primary methods to get this +venture going: + +METHOD # 1: BY SENDING BULK E-MAIL LEGALLY +================================================== + +Let's say that you decide to start small, just to see +how it goes, and we will assume you and those involved +send out only 5,000 e-mails each. Let's also assume +that the mailing receives only a 0.2% (2/10 of 1%) +response (the response could be much better but let's +just say it is only 0.2%). Also many people will send +out hundreds of thousands of e-mails instead of only +5,000 each. + +Continuing with this example, you send out only +5,000 e-mails. With a 0.2% response, that is only +10 orders for report # 1. Those 10 people responded +by sending out 5,000 e-mails each for a total of +50,000. Out of those 50,000 e-mails only 0.2% +responded with orders. That's 100 people who +responded and ordered Report # 2. + +Those 100 people mail out 5,000 e-mails each for +a total of 500,000 e-mails. The 0.2% response to +that is 1000 orders for Report # 3. + +Those 1000 people send 5,000 e-mails each for a +total of 5 million e-mails sent out. The 0.2% +response is 10,000 orders for Report # 4. + +Those 10,000 people send out 5,000 e-mails each +for a total of 50,000,000 (50 million) e-mails. +The 0.2% response to that is 100,000 orders for +Report # 5. + +THAT'S 100,000 ORDERS TIMES $5 EACH = $500,000.00 +(half a million dollars). + +Your total income in this example is: 1..... $50 ++ 2..... $500 + 3.....$5,000 + 4..... $50,000 ++ 5.... $500,000 .... Grand Total=$555,550.00 + +NUMBERS DO NOT LIE. GET A PENCIL & PAPER AND +FIGURE OUT THE WORST POSSIBLE RESPONSES AND NO +MATTER HOW YOU CALCULATE IT, YOU WILL STILL +MAKE A LOT OF MONEY! +================================================== + +REMEMBER FRIEND, THIS IS ASSUMING ONLY 10 PEOPLE +ORDERING OUT OF 5,000 YOU MAILED TO. Dare to think +for a moment what would happen if everyone or half +or even one 4th of those people mailed 100,000 +e-mails each or more? + +There are over 150 million people on the internet +worldwide and counting, with thousands more coming +online every day. Believe me, many people will do +just that, and more! + +METHOD # 2: BY PLACING FREE ADS ON THE INTERNET +================================================== + +Advertising on the net is very, very inexpensive and +there are hundreds of FREE places to advertise. +Placing a lot of free ads on the internet will +easily get a larger response. We strongly suggest +you start with Method # 1 and add METHOD # 2 as you +go along. For every $5 you receive, all you must +do is e-mail them the report they ordered. That's it. +Always provide same day service on all orders. + +This will guarantee that the e-mail they send out, +with your name and address on it, will be prompt +because they cannot advertise until they receive +the report. + +===========AVAILABLE REPORTS ==================== +The reason for the "cash" is not because this is +illegal or somehow "wrong". It is simply about time. +Time for checks or credit cards to be cleared or +approved, etc. Concealing it is simply so no one +can SEE there is money in the envelope and steal +it before it gets to you. + +ORDER EACH REPORT BY ITS NUMBER & NAME ONLY. +Notes: Always send $5 cash (U.S. CURRENCY) for +each report. Checks NOT accepted. Make sure the +cash is concealed by wrapping it in at least +2 sheets of paper. On one of those sheets of +paper, write the NUMBER & the NAME of the report +you are ordering, YOUR E-MAIL ADDRESS and your +name and postal address. + +PLACE YOUR ORDER FOR THESE REPORTS NOW : +================================================== +REPORT # 1: "The Insider's Guide To Advertising +for Free On The Net" +Order Report #1 from: + +Robert Borowczyk +ul. J. Olbrachta 118C m. 28 +01-373 Warsaw +Poland + +______________________________________________________ + +REPORT # 2: "The Insider's Guide To Sending Bulk +Email On The Net" +Order Report # 2 from: + +Mohammad Faraziyan +Engelbertstr. 25 +40233 Düsseldorf +Germany + + +______________________________________________________ + +REPORT # 3: "Secret To Multilevel Marketing On The Net" +Order Report # 3 from: + +Luis Pastor +Apartado 81 +48080 +Bilbao +Spain + +______________________________________________________ + +REPORT # 4: "How To Become A Millionaire Using +MLM & The Net" +Order Report # 4 from: + + +Ali Reza +Auf den Holln 68 +44894 Bochum +Germany + +______________________________________________________ + +REPORT # 5: "How To Send Out One Million Emails +For Free" +Order Report # 5 From: + +J.siden +krondikesvägen 54 A +83147 Östersund +Sweden + +______________________________________________________ +$$$$$$$$$ YOUR SUCCESS GUIDELINES $$$$$$$$$$$ + +Follow these guidelines to guarantee your success: + +=== If you do not receive at least 10 orders for +Report #1 within 2 weeks, continue sending e-mails +until you do. + +=== After you have received 10 orders, 2 to 3 weeks +after that you should receive 100 orders or more for +REPORT # 2. If you do not, continue advertising or +sending e-mails until you do. + +** Once you have received 100 or more orders for +Report # 2, YOU CAN RELAX, because the system is +already working for you, and the cash will continue +to roll in ! THIS IS IMPORTANT TO REMEMBER: Every time +your name is moved down on the list, you are placed +in front of a different report. + +You can KEEP TRACK of your PROGRESS by watching which +report people are ordering from you. IF YOU WANT TO +GENERATE MORE INCOME SEND ANOTHER BATCH OF E-MAILS +AND START THE WHOLE PROCESS AGAIN. There is NO LIMIT +to the income you can generate from this business !!! +================================================= +FOLLOWING IS A NOTE FROM THE ORIGINATOR OF THIS PROGRAM: +You have just received information that can give you +financial freedom for the rest of your life, with +NO RISK and JUST A LITTLE BIT OF EFFORT. You can +make more money in the next few weeks and months +than you have ever imagined. Follow the program +EXACTLY AS INSTRUCTED. Do Not change it in any way. +It works exceedingly well as it is now. + +Remember to e-mail a copy of this exciting report +after you have put your name and address in +Report #1 and moved others to #2 .....# 5 as +instructed above. One of the people you send this +to may send out 100,000 or more e-mails and your +name will be on every one of them. + +Remember though, the more you send out the more +potential customers you will reach. So my friend, +I have given you the ideas, information, materials +and opportunity to become financially independent. + +IT IS UP TO YOU NOW ! + +=============MORE TESTIMONIALS=============== +"My name is Mitchell. My wife, Jody and I live in +Chicago. I am an accountant with a major U.S. +Corporation and I make pretty good money. When I +received this program I grumbled to Jody about +receiving 'junk mail'. I made fun of the whole +thing, spouting my knowledge of the population +and percentages involved. I 'knew' it wouldn't work. +Jody totally ignored my supposed intelligence and +few days later she jumped in with both feet. I made +merciless fun of her, and was ready to lay the old +'I told you so' on her when the thing didn't work. + +Well, the laugh was on me! Within 3 weeks she had +received 50 responses. Within the next 45 days she +had received total $ 147,200.00 ......... all cash! +I was shocked. I have joined Jody in her 'hobby'." + +Mitchell Wolf M.D., Chicago, Illinois +================================================ +"Not being the gambling type, it took me several +weeks to make up my mind to participate in this plan. +But conservative as I am, I decided that the initial +investment was so little that there was just no way +that I wouldn't get enough orders to at least get +my money back. I was surprised when I found my +medium size post office box crammed with orders. +I made $319,210.00 in the first 12 weeks. + +The nice thing about this deal is that it does not +matter where people live. There simply isn't a +better investment with a faster return and so big." + +Dan Sondstrom, Alberta, Canada +================================================= +"I had received this program before. I deleted it, +but later I wondered if I should have given it a try. +Of course, I had no idea who to contact to get +another copy, so I had to wait until I was e-mailed +again by someone else......... 11 months passed then +it luckily came again...... I did not delete this one! +I made more than $490,000 on my first try and all the +money came within 22 weeks." + +Susan De Suza, New York, N.Y. +================================================= +"It really is a great opportunity to make relatively +easy money with little cost to you. I followed the +simple instructions carefully and within 10 days the +money started to come in. My first month I made $20, +in the 2nd month I made $560.00 and by the end of the +third month my total cash count was $362,840.00. +Life is beautiful, Thanx to internet." + +Fred Dellaca, Westport, New Zealand +================================================= + +ORDER YOUR REPORTS TODAY AND GET STARTED ON YOUR +ROAD TO FINANCIAL FREEDOM ! + +================================================= +If you have any questions of the legality of this +program, contact the Office of Associate Director +for Marketing Practices, Federal Trade Commission, +Bureau of Consumer Protection, Washington, D.C. + +This message is sent in compliance of the proposed +bill SECTION 301, paragraph (a)(2)(C) of S. 1618. + +* This message is not intended for residents in the +State of Washington, Virginia or California, +screening of addresses has been done to the best +of our technical ability. + +* This is a one time mailing and this list will +never be used again. + + diff --git a/Ch3/datasets/spam/spam/00424.9acca894169b3162d76ebddb69097f3c b/Ch3/datasets/spam/spam/00424.9acca894169b3162d76ebddb69097f3c new file mode 100644 index 000000000..6dac6ff93 --- /dev/null +++ b/Ch3/datasets/spam/spam/00424.9acca894169b3162d76ebddb69097f3c @@ -0,0 +1,174 @@ +From bmortgage@ig.com.br Sun Sep 22 23:59:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 7E2CA16F03 + for ; Sun, 22 Sep 2002 23:59:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 23:59:10 +0100 (IST) +Received: from 4.60.250.211 + (crtntx1-ar1-4-60-250-211.crtntx1.dsl-verizon.net [4.60.250.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g8MMNaC17586 for + ; Sun, 22 Sep 2002 23:23:37 +0100 +Message-Id: <200209222223.g8MMNaC17586@dogma.slashnull.org> +From: Best Mortgage +To: optin-virtmund@dogma.slashnull.org +Cc: +Subject: Guaranteed Best Mortgage Rate +Sender: Best Mortgage +MIME-Version: 1.0 +Date: Sun, 22 Sep 2002 15:24:13 -0700 +X-Mailer: eGroups Message Poster +X-Priority: 1 +Content-Type: text/html; charset="iso-8859-1" + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        The + Best Mortage Rates     Simple, + Easy and FREE 
        
      +
    +
    +
    + + + + + + + + + + +
    +
    Have + HUNDREDS of lenders compete for your loan! +
    +


    +
  • Refinancing +
  • New Home Loans +
  • Debt Consolidation +
  • Second Mortgage +
  • Home Equity
    +

    +

    +
    + Click Here To
    + JUMP-START
    + your Plans for
    + the Future!!!
    +
    +
  • +
    Dear + Homeowner, +

    Interest + Rates are at their lowest point in 40 years! We help + you find the best rate for your situation by matching + your needs with hundreds of lenders!
    +
    + Home Improvement, Refinance, + Second Mortgage, Home Equity Loans, and More!

    +
    + You're eligible even with less than perfect credit!
    +
    + This service is 100% FREE + to home owners and new home buyers without any obligation. +
    +
    + Just fill out a quick, simple form and jump-start your + future plans today!

    +
    + Click Here To Begin

    +
    +
    +
    +
     
      
      +
    +
    +
    +
    + + + + + + +
    You are receiving this email because you registered + at one of JUNCAN.net's partner sites, and agreed to receive + gifts and special offers that may be of interest to you. + If you do not want to receive special offers in the future, + please click + here.
    + You are subscribed as: webmaster@efi.ie
    +
    +
     
       + +
    Equal + Housing Opportunity.
    +
      
    +
    +
    + + + + diff --git a/Ch3/datasets/spam/spam/00425.1434e0ab4e5235b64825b4c2a0999d76 b/Ch3/datasets/spam/spam/00425.1434e0ab4e5235b64825b4c2a0999d76 new file mode 100644 index 000000000..502acd1d5 --- /dev/null +++ b/Ch3/datasets/spam/spam/00425.1434e0ab4e5235b64825b4c2a0999d76 @@ -0,0 +1,117 @@ +From sitescooper-talk-admin@lists.sourceforge.net Sun Sep 22 23:59:16 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 468D416F16 + for ; Sun, 22 Sep 2002 23:59:14 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Sun, 22 Sep 2002 23:59:14 +0100 (IST) +Received: from usw-sf-list2.sourceforge.net (usw-sf-fw2.sourceforge.net + [216.136.171.252]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8MMdhC18102 for ; Sun, 22 Sep 2002 23:39:43 +0100 +Received: from usw-sf-list1-b.sourceforge.net ([10.3.1.13] + helo=usw-sf-list1.sourceforge.net) by usw-sf-list2.sourceforge.net with + esmtp (Exim 3.31-VA-mm2 #1 (Debian)) id 17tFOW-0000HI-00; Sun, + 22 Sep 2002 15:40:04 -0700 +Received: from [61.188.203.25] (helo=61.188.203.25) by + usw-sf-list1.sourceforge.net with smtp (Exim 3.31-VA-mm2 #1 (Debian)) id + 17tFO0-0004wM-00 for ; + Sun, 22 Sep 2002 15:39:33 -0700 +Received: from 117.83.248.68 ([117.83.248.68]) by rly-xl04.mx.aol.com with + NNFMP; Sep, 23 2002 12:23:31 AM -0300 +Received: from unknown (HELO web13708.mail.yahoo.com) (141.52.163.69) by + smtp4.cyberec.com with SMTP; Sep, 22 2002 11:23:30 PM +0300 +Received: from unknown (HELO smtp4.cyberec.com) (24.156.151.193) by + rly-xw05.mx.aol.com with esmtp; Sep, 22 2002 10:05:12 PM +1100 +Received: from 155.89.28.179 ([155.89.28.179]) by rly-xw05.mx.aol.com with + smtp; Sep, 22 2002 9:10:38 PM -0100 +From: "tgpy. Allison" +To: sitescooper-talk@example.sourceforge.net +Cc: +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 +X-Priority: 1 +Message-Id: +Subject: [scoop] ....It is not my fault. .- vwiid +Sender: sitescooper-talk-admin@example.sourceforge.net +Errors-To: sitescooper-talk-admin@example.sourceforge.net +X-Beenthere: sitescooper-talk@example.sourceforge.net +X-Mailman-Version: 2.0.9-sf.net +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Discussion of sitescooper - see http://sitescooper.org/ + +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Mon, 23 Sep 2002 00:33:42 +0200 +Date: Mon, 23 Sep 2002 00:33:42 +0200 +Content-Type: text/html; charset="iso-8859-1" + +Hi i'm Rita !!! + + + + + + +
    READ + MY + LIPStick + ! +

    Nobody knows, I love to smoke....

    +
    + + +
    +

    LIVE + From + Amsterdam + !

    +


    +

     

    +

     

    +

     

    +

     

    +

     

    +






    This mail is NEVER sent unsolicited, Got it by +error ?
    [ CLICK HERE ] to be removed from our +subscribers List !
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +

    + + + + +fuclcxlequtkbfuoeseysgfu + + +------------------------------------------------------- +This sf.net email is sponsored by:ThinkGeek +Welcome to geek heaven. +http://thinkgeek.com/sf +_______________________________________________ +Sitescooper-talk mailing list +Sitescooper-talk@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/sitescooper-talk + + diff --git a/Ch3/datasets/spam/spam/00426.36b36cbe96efe9001c4d80363ea7ed4e b/Ch3/datasets/spam/spam/00426.36b36cbe96efe9001c4d80363ea7ed4e new file mode 100644 index 000000000..66603b300 --- /dev/null +++ b/Ch3/datasets/spam/spam/00426.36b36cbe96efe9001c4d80363ea7ed4e @@ -0,0 +1,84 @@ +From renato51927@netscape.net Mon Sep 23 12:11:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 1F27F16F03 + for ; Mon, 23 Sep 2002 12:11:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 23 Sep 2002 12:11:46 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8N52UC01467 for + ; Mon, 23 Sep 2002 06:02:30 +0100 +Received: from imo-m05.mx.aol.com (imo-m05.mx.aol.com [64.12.136.8]) by + webnote.net (8.9.3/8.9.3) with ESMTP id GAA13543 for ; + Mon, 23 Sep 2002 06:03:03 +0100 +From: renato51927@netscape.net +Received: from renato51927@netscape.net by imo-m05.mx.aol.com + (mail_out_v34.10.) id j.1b7.1f35906 (22682) for ; + Mon, 23 Sep 2002 00:59:34 -0400 (EDT) +Received: from netscape.net (mow-d01.webmail.aol.com [205.188.138.65]) by + air-in04.mx.aol.com (v88.20) with ESMTP id MAILININ43-0923005934; + Mon, 23 Sep 2002 00:59:34 -0400 +Date: Mon, 23 Sep 2002 00:59:34 -0400 +To: kimk@sprint.ca +Subject: You can gain from lowest interest rates in 30 years +Message-Id: <4A5D73AD.36FB1893.51423799@netscape.net> +X-Mailer: Atlas Mailer 2.0 +Content-Type: text/plain; charset=iso-8859-1 +Content-Transfer-Encoding: 8bit + +Opportunity is knocking. Why? + +Because mortgage rates are rising. + +As a National Lender, not a broker, we can +guarantee you the lowest possible rate on your +home loan. + +Rates may well never be this low again. This is +your chance to secure a better future. You could +literally save enough money to buy that new car +you've been wanting or to take that special +vacation. Why pay more than you have to pay? + +We can guarantee you the best rate and the best +deal possible for you. But only if you act now. + +This is a free service. No fees of any kind. + +You can easily determine if we can help you in +just a few short minutes. We only provide +information in terms so simple that anyone can +understand them. We promise that you won't need +an attorney to see the savings. + +We offer both first and second home loans and we +will be happy to show you why your current loan +is the best for you. 0r why you should replace +it. + +Once again, there's no risk for you. None at all. + +Take two minutes and use the link(s) below that +works for you. Let us show you how to get more +for yourself and your family. Don't let +opportunity pass you by. Take action now. + +Click_Here + +http://n62.go2net.com/adclick?cid=180713&site=dp&cp=nbci&clickurl=http://211.167.74.101/mortg/ + +Sincerely, + +Chalres M. Gillette +MortCorp, LLC + +rpmmumwnzvrmtuqepbremaddardmkkksfpipttmsdocbmnbkghfqauxdoitvxdmvdazpibikzbfxporvaazcuttzzzzjxuitoysdfbyominmypxtuomobktfgqg + +__________________________________________________________________ +The NEW Netscape 7.0 browser is now available. Upgrade now! http://channels.netscape.com/ns/browsers/download.jsp + +Get your own FREE, personal Netscape Mail account today at http://webmail.netscape.com/ + + diff --git a/Ch3/datasets/spam/spam/00427.fa1252c91a3b89bb64bc2bc217725e26 b/Ch3/datasets/spam/spam/00427.fa1252c91a3b89bb64bc2bc217725e26 new file mode 100644 index 000000000..4b4a509bf --- /dev/null +++ b/Ch3/datasets/spam/spam/00427.fa1252c91a3b89bb64bc2bc217725e26 @@ -0,0 +1,258 @@ +From robertm@att.net Mon Sep 23 12:11:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id F204B16F16 + for ; Mon, 23 Sep 2002 12:11:47 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 23 Sep 2002 12:11:47 +0100 (IST) +Received: from att.net ([211.184.127.65]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g8NAdNC12338 for ; + Mon, 23 Sep 2002 11:39:25 +0100 +Reply-To: +Message-Id: <002b15b22d4b$3342b5d0$1ad66aa0@rlvljc> +From: +To: +Subject: Your eBay account is about to expire! +Date: Mon, 23 Sep 2002 05:29:50 +0500 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2462.0000 +Importance: Normal +Content-Transfer-Encoding: 8bit + +Hi, + +I'm a college dropout. I work about two hours a day. +I'm ambitious, but extremely lazy, and I make over +$250,000 a year. Are you curious yet? + +In a minute I'm going to tell you my secret, +it's the dirty little secret of the Internet ... + +You've probably heard stories about people making +whopping huge money online, but you thought they +were the big corporate execs, famous programmers, or +boy-geniuses. + +Well, grasshopper, think again ... + +It's people like you and me that are making the real +money. Yep, people like YOU AND ME! + +Ever since the "dot com bubble" burst in 1999, small-time +entrepreneurs are getting richer while the Fortune 500 +companies look for bankruptcy lawyers. + +Today small business owners and ordinary folks +like you and me can use the web to achieve complete +financial freedom with NO INVESTMENT and very little +work. How? By learning the most profitable marketing +technique ever created - it's called BULK EMAIL. + +If you've ever recieved an email advertisement, then +you know what bulk email is. I bet you can't click on +DELETE fast enough for most of those ads, right? +You might not want their product, but remember that +thousands of other folks probably do. Bulk email is a +percentage game - every bulker who contacts you +makes a six figure income on the Internet. I +guarantee it. Now let's go back to Math 101 and +review some numbers ... + +If you sell on eBay, you pay anywhere from a few +dollars to over a hundred dollars just to post one +auction. How many people see your ad? Maybe a +couple thousand or even ten or twenty thousand +over a period of days. Using bulk email, YOU CAN +SEND YOUR AD TO MORE THAN A MILLION PEOPLE A DAY +at virtually no cost. Whether your send 100,000 +emails or 100 million emails, the price is the same. +ZERO! + +Stop paying those outrageous auction listing fees when +hardly anyone sees your ad! + +Imagine that you have a decent product with a +profit margin of $20.00 on each sale. If you send +an email ad to 500,000 people, and only one person +in a thousand actually places an order, then you just +generated 500 orders and made $10,000 in a few hours +of work. + +It's that simple ... + +All you have to do is convince ONE PERSON OUT OF A +THOUSAND to buy your stuff and you're FILTHY RICH. + +The best thing is that anyone can do it. Doesn't +matter if you're a nineteen-year-old college student +using a dorm-room computer or a fifty-year-old +executive working from an office building in New +York City. Anyone, and I repeat ANYONE, can start +bulk emailing with virtually no startup costs. All +it takes is a few days of study, plenty of ambition, +and some basic familiarity with the Internet. + +I quit college when I was 19 to capitalize on the +"Dot Com" mania, and I've never looked back. I +started with no money, no product to sell, and only +the most rudimentary computer skills. I saw an +opportunity and I seized it. A few years later, +I bought my own home - with CASH. + +You don't need any money. You don't need a product. +You don't need to be a computer nerd and no experience +whatsoever is required. + +If you saw an employment ad in the newspaper like that +you'd jump right on it. It would be a dream come true. +So what are you waiting for?! + +I'm going to ask you four simple questions. If you answer +YES to all of them, then I can almost promise that you +will make at least $100,000 using bulk email this year. + +Here goes ... + +Do you have basic experience with the web? +Do you have a computer and an Internet connection? +Do you have a few hours each day of free time? +Do you want to earn some extra money with an eye towards +complete financial freedom? + +If you answer YES to these questions, you could be +making $5,000 - $20,000 per week working from your +home. Kiss your day job goodbye - this sure beats +the 9-5 daily grind! + +All you need is ambition and commitment. This +is no "get rich quick scheme". You have to work +to make big bucks, but ANYONE - and I mean ANYONE - can do +it. + +You're probably wondering if it's hard to get started. +Don't worry, it's not! I will show you step-by-step +how to start your first email campaign and how to +build a booming online business. You'll be generating +orders - AND MAKING MONEY - in less than seven days. + +Okay, so what if you don't have anything to sell? + +No problem!! I'll show you where to find hot +products that sell like CRAAAAAAZY! Most people delay +starting an Internet business because they have +nothing to sell, but I'm removing that hurdle right now. +After reading the Bulkbook, you can build your complete +product line in less than two hours! There is NO EXCUSE +not to get started! I will get you up-and-running within +seven days. In fact ... + +I personally guarantee that you will start your own +bulk email campaign less than a week after reading +the Bulkbook! I'll give you a toll-free phone number +to reach me 24 hours a day, seven days a week; +where else will you find that level of service?! + +I will also include a step-by-step guide to starting +your very first email campaign called "Seven Days to +Bulk Email Success". This seperate guide contains a daily +routine for you to follow with specific, exact +instructions on how to get started. On day one, for +example, I teach you where to find a product to sell. +The next day you learn how to build a fresh mailing +list. On the seventh day, you just click send! Your +very first campaign is ready to go. + +As a special bonus, you'll recieve a FREE copy +of our STEALTH MASS MAILER, a very powerful bulk +email program which retails for $49.99! I'll even +include 7 million email addresses absolutely FREE +if you order NOW! + +Stop wasting your money on auction listing fees, +classifieds, and banner ads - they don't work, and +never will! If you are SERIOUS about making money +on the Internet, bulk email is your only option. +What are you waiting for? Few of us are willing +to share this knowledge, but I promise to teach +you everything I know about bulk emailing in this +extraordinary bulk emailer's handbook ... The Bulkbook! + +Once again, here's the deal. You give me $29.99. +I give you ALL THE TOOLS YOU NEED to become a +successful, high profit bulk emailer. INCLUDING: + +** THE BULKBOOK +Teaches you step-by-step how to become a high profit +bulk emailer. Secret techniques and tips never +before revealed. + +** SEVEN DAYS TO BULK EMAIL SUCCESS +Provides detailed day-by-day instruction to start sending +your first email campaign in seven days. + +** 600 Email subjects that PULL LIKE CRAZY + +** EMAIL LIST MANAGER +Manage your email lists quickly and easily. Very +user-friendly, yet powerful, software. + +** STEALTH MASS MAILER +Software can send up to 50,000 emails an hour automatically. +Just load them in there and click SEND! + +** ADDRESS ROVER 98 and MACROBOT SEARCH ENGINE ROBOT +Extracts email addresses from databases and search engines +at speeds of over 200,000 per hour. + +** WORLDCAST EMAIL VERIFIER +Used to verify your email addresses that you extract to +make sure they're valid. + +** EBOOK PUBLISHER +Easily publish your own e-books and reports for resale using, +you guessed it, bulk email! + +** SEVEN MILLION EMAIL ADDRESSES +This huge list will get you started bulking right away. +I harvested these addresses myself, the list is filled +with IMPULSE BUYERS ready to respond to your ads! + +If you added up all of the FULL VERSION BULK EMAIL software +included with the BULKBOOK package, it would total over +$499. I am giving you the whole bundle for only $29.99. +That means there is no other out-of-pocket startup expense +for you. Nothing else to buy, no reason to waste money on +software that doesn't work. With this one package, you get +EVERYTHING YOU NEED to START BULK EMAILING RIGHT AWAY. + +Are you willing to invest $29.99 for the opportunity +to make a SIX FIGURE INCOME on the Internet with no +startup cash and very little effort? + +Remember, you will recieve a toll-free phone number +for 24 hour expert advice and consultation FROM ME +PERSONALLY. + +To order the Bulkbook right now for only $29.99 with +a Visa or Mastercard, please click on the link below. +This will take you to our secure server for order +processing: + +http://cbphost.net/users/quiksilver/bulkbook.htm + +Note: The Bulkbook will be delivered electronically +within 24 hours. It is not available in printed form. + +*********************************************************** +Our company is strictly opposed to unsolicited email. +To be removed from this opt-in list, please send a +request to "quiksilver@cbulkhost.com" +*********************************************************** +7870fubX0-764wHdL6646musT3-086uml30 + + diff --git a/Ch3/datasets/spam/spam/00428.a7bbcb15affd49a93d516d5ed5700d66 b/Ch3/datasets/spam/spam/00428.a7bbcb15affd49a93d516d5ed5700d66 new file mode 100644 index 000000000..02305970c --- /dev/null +++ b/Ch3/datasets/spam/spam/00428.a7bbcb15affd49a93d516d5ed5700d66 @@ -0,0 +1,63 @@ +From exelle@webinfo.fi Mon Sep 23 15:02:06 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 8D1D716F03 + for ; Mon, 23 Sep 2002 15:02:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 23 Sep 2002 15:02:05 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NBpKC14790 for + ; Mon, 23 Sep 2002 12:51:20 +0100 +Received: from webinfo.fi ([211.184.2.252]) by webnote.net (8.9.3/8.9.3) + with SMTP id MAA14513; Mon, 23 Sep 2002 12:51:49 +0100 +Date: Mon, 23 Sep 2002 12:51:49 +0100 +From: exelle@webinfo.fi +Reply-To: +Message-Id: <005e58c17aab$8136d2b8$4ee83ab7@qrlwcm> +To: glen5@mail.gr +Subject: HOME REPS WANTED-FORTUNE 500 COMP HIRING +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2615.200 +Importance: Normal +Content-Transfer-Encoding: 8bit + + +Question? + +Do you want a different job? +Do you want to be your own boss? +Do you need extra income? +Do you need to start a new life? +Does your current job seem to go nowhere? + +If you answered yes to these questions, then here is your solution. + +We are a fortune 500 company looking for motivated individuals who are +looking +to a substantial income working from home. + +Thousands of individual are currently do this RIGHT NOW. +So if you are looking to be employed at home, with a career that will +provide you vast opportunities and a substantial income, please fill +out our online information request form here now: + +http://ter.netblah.com:27000 + + + + + + + + + +To miss out on this opportunity, click here + +http://ter.netblah.com:27000/remove.html + + diff --git a/Ch3/datasets/spam/spam/00429.0061e48e64f9ce93ffae69bba9151357 b/Ch3/datasets/spam/spam/00429.0061e48e64f9ce93ffae69bba9151357 new file mode 100644 index 000000000..feaed03ed --- /dev/null +++ b/Ch3/datasets/spam/spam/00429.0061e48e64f9ce93ffae69bba9151357 @@ -0,0 +1,73 @@ +From hlbi_adv@hellerwhirligigs.com Mon Sep 23 18:33:37 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0420C16F03 + for ; Mon, 23 Sep 2002 18:33:37 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 23 Sep 2002 18:33:37 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NFNcC23093 for + ; Mon, 23 Sep 2002 16:23:38 +0100 +Received: from 213.77.170.80 (po80.knurow.sdi.tpnet.pl [217.98.195.80]) by + webnote.net (8.9.3/8.9.3) with SMTP id QAA15255 for ; + Mon, 23 Sep 2002 16:24:10 +0100 +Message-Id: <200209231524.QAA15255@webnote.net> +Received: from 184.244.108.80 ([184.244.108.80]) by rly-xr02.mx.aol.com + with SMTP; Sep, 23 2002 9:13:52 AM +0300 +Received: from unknown (6.61.10.17) by rly-xr02.mx.aol.com with NNFMP; + Sep, 23 2002 8:13:09 AM -0200 +Received: from 30.215.79.204 ([30.215.79.204]) by m10.grp.snv.yahoo.com + with SMTP; Sep, 23 2002 7:06:08 AM +0700 +Received: from ssymail.ssy.co.kr ([115.212.44.160]) by hd.regsoft.net with + asmtp; Sep, 23 2002 6:25:55 AM +1100 +From: "iaic_adv@hellerwhirligigs.com" +To: zzzz@spamassassin.taint.org +Cc: +Subject: Garden Ornaments | ppu +Sender: "iaic_adv@hellerwhirligigs.com" +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Mon, 23 Sep 2002 09:26:16 -0600 +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 + +Our delightful garden ornaments combine the finest craftsmanship in woodworking with the lastest technology in paints and hardware: + +http://www.gardenornaments.adv@hellerwhirligigs.com/ + +We are the world's biggest whirligig maker. + + +Sincerely, + +Studio T. Inc., USA +The Home of Heller Whirligigs + + + + +Remove: + +E-mail based commercial communication avoids unnecessary spending on catalogs and paper, and helps to preserve valuable natural resources such as forests and oil. We do not wish to share our valuable information about whirligigs with those who are not interested. Should you not wish to receive information from us in the future, please click on the following removal link: + +http://www.gardenornaments.adv@hellerwhirligigs.com/remove.html + +Even though our database cleansing might be subject to delay or error, we will remove your e-mail address permanently from our database. However, please realize that removal from our database does not guarantee that your e-mail address will be deleted from the many other e-mail marketers who construct databases themselves by harvesting from web sites, or by buying any of the thousands of lists of e-mail addresses that are openly for sale on the internet. + + + + + + + + + + + + +... + +sgossqweylpfdxongtxllytjnmkamyrwrascyl + + diff --git a/Ch3/datasets/spam/spam/00430.d2179c2841013fea688db8bbcf60b3b0 b/Ch3/datasets/spam/spam/00430.d2179c2841013fea688db8bbcf60b3b0 new file mode 100644 index 000000000..ffbc61a2f --- /dev/null +++ b/Ch3/datasets/spam/spam/00430.d2179c2841013fea688db8bbcf60b3b0 @@ -0,0 +1,304 @@ +From John-09222002-HTML@frugaljoe.330w.com Mon Sep 23 18:33:43 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id F0C8D16F03 + for ; Mon, 23 Sep 2002 18:33:38 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 23 Sep 2002 18:33:39 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NGoEC26024 for + ; Mon, 23 Sep 2002 17:50:14 +0100 +Received: from richard.330w.com (richard.330w.com [216.53.71.115]) by + webnote.net (8.9.3/8.9.3) with ESMTP id RAA15513 for ; + Mon, 23 Sep 2002 17:50:48 +0100 +Message-Id: <200209231650.RAA15513@webnote.net> +Received: by richard.330w.com (PowerMTA(TM) v1.5); Mon, 23 Sep 2002 + 12:13:19 -0400 (envelope-from ) +From: John@FrugalJoe.com +To: zzzz@spamassassin.taint.org +Subject: Save $100's, maybe $1,000's with No Lender's Fees. Click here! +Id-Frugaljoe: zzzz####spamassassin.taint.org +Date: Mon, 23 Sep 2002 12:13:19 -0400 +Content-Type: text/html + + + + + + + + + +
    +
    Never Pay Retail!
    + + +Direct Synergy - Household Creative Sep 02 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +


    + Our + application process is quick and easy - And, you'll receive a response + back in moments.
    +
    + No lender's fees means you could save $100's maybe even $1,000's. + Compare for yourself and see the difference a Household loan can make. +
    +
    +

    +
    + + + + + + + + + + + +
    + + + + +
    Origination + Fee*
    + Doc Prep Fee
    + Application Fee
    + Credit Report Charge
    + Processing Fee
    +
    + + + + +
    $250 +
    + $200
    + $250
    + $25
    + $300
    +
    + + + + +
    $0* +
    + $0
    + $0
    + $0
    + $0
    +
    +
    + + + + + + + + + +
    + + + + +
    Total + Lender Fees*
    +
    +
    + + + + +
    $1025
    +
    +
    + + + + +
    $0* +
    +
    +
    +

    + The immediate + savings could mean more money for you to put toward bills, home improvements + or to use however you'd like.

    +

    +
    +
    It's + simple to get started and there's no obligation.
    + Here's all you need to do: +

    +
    +
    +
    + + + + + + + + +
    Find + the loan to fit your needs - even if you have less than perfect credit.
    • + Mortgage Refinance Loans
    + • Home Equity Loans
    + • Personal Loans for Homeowners

    +
    + + + + + + + + +
    Apply + Online and you're automatically qualified for our "No Lender's + Fees" offer.
    You'll + save $100's right away and as a Household customer you can take advantage + of our Pay Right Rewards, Online Bill Pay and many other benefits + - which means you could save money over time as well!
    +
    + + + + + + + + +
    With + an approved loan, you could lower your monthly payments by $100's.
    Try + our Calculate + and Save tool and see for yourself!
    +
    +


    + Don't + delay - This is a limited time offer!

    +

    +

    Promotion + Expires 09/30/02

    +
    PS:
    + If you are a current Household customer (Household Finance Corporation, + Beneficial Corporation or their subsidiaries), please contact your branch + for more information on other great products
    . +
    +
    + * Not applicable in Illinois as origination fee may be charged. + You and your lender may negotiate discount points to buy down rates. Third + party fees such as title insurance, appraisal, closing fee, government recording + fee and other charges (where applicable) are the responsibility of the borrower. + All loans made by Household Finance Corporation (or subsidiares).
    +
    + As a Household company, we're part of a financial family that has been helping + working people since 1878. We have the experience, size and strength to + help you access the money you need.

    + No time to apply right now? No problem, click + here and register to receive future updates, information and special + offers.
    + + + + + + + +
    + + + +
    + +You have received this email because you have subscribed + through one of our marketing partners. If you would like + to learn more about Frugaljoe.com then please visit our website + www.frugaljoe.com If this message was sent to you in error, or +if you + would like to unsubscribe please click here or +cut and paste the following link into a web browser:
    + http://www.frugaljoe.com/unsubscribe.php?eid=399843\~moc.cnietonten^^mj\~1754388\~12a1 +

    + + + +

     

    + + + + + diff --git a/Ch3/datasets/spam/spam/00431.12b2043fed99f1202eb0677969d1a61e b/Ch3/datasets/spam/spam/00431.12b2043fed99f1202eb0677969d1a61e new file mode 100644 index 000000000..501e03ac3 --- /dev/null +++ b/Ch3/datasets/spam/spam/00431.12b2043fed99f1202eb0677969d1a61e @@ -0,0 +1,61 @@ +From firstever001@44yes.onlineisbest.com Mon Sep 23 18:33:45 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id B2EEA16F03 + for ; Mon, 23 Sep 2002 18:33:44 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 23 Sep 2002 18:33:44 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NGpbC26045 for + ; Mon, 23 Sep 2002 17:51:37 +0100 +Received: from 44yes.onlineisbest.com (44yes.onlineisbest.com + [64.25.33.44]) by webnote.net (8.9.3/8.9.3) with ESMTP id RAA15516 for + ; Mon, 23 Sep 2002 17:52:11 +0100 +From: firstever001@44yes.onlineisbest.com +Date: Mon, 23 Sep 2002 09:55:53 -0400 +Message-Id: <200209231355.g8NDtro27632@44yes.onlineisbest.com> +To: skyogppeif@onlineisbest.com +Reply-To: firstever001@44yes.onlineisbest.com +Subject: ADV: Extended Auto Warranties Here iubrq + +Protect your financial well-being. +Purchase an Extended Auto Warranty for your Car today. + +CLICK HERE for a FREE no obligation quote. +http://ww3.onlineisbest.com/warranty/ + +Car troubles always seem to happen at the worst possible time. +Protect yourself and your family with a +quality Extended Warranty for your car, truck, or SUV, +so that a large expense cannot hit you all at once. + +We cover most vehicles with less than 150,000 miles. + +Buy DIRECT! Our prices are 40-60% LESS! + +We offer fair prices and prompt, toll-free claims service. + +Get an Extended Warranty quote for your car today. + +Warranty plan also includes: + + 1) 24-Hour Roadside Assistance. + 2) Rental Benefit. + 3) Trip Interruption Intervention. + 4) Extended Towing Benefit. + +CLICK HERE for a FREE no obligation quote. +http://ww3.onlineisbest.com/warranty/ + + + + + +--------------------------------------- +To easily remove your address from the list, go to: +http://ww3.onlineisbest.com/stopthemailplease/ +Please allow 48-72 hours for removal. + + diff --git a/Ch3/datasets/spam/spam/00432.40ceb2dcb26e292ea6fd8669dfc9b4c5 b/Ch3/datasets/spam/spam/00432.40ceb2dcb26e292ea6fd8669dfc9b4c5 new file mode 100644 index 000000000..53cbb56ad --- /dev/null +++ b/Ch3/datasets/spam/spam/00432.40ceb2dcb26e292ea6fd8669dfc9b4c5 @@ -0,0 +1,96 @@ +From k_bakar100@mail.com Mon Sep 23 18:33:47 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 9313916F03 + for ; Mon, 23 Sep 2002 18:33:46 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 23 Sep 2002 18:33:46 +0100 (IST) +Received: from ws1-4.us4.outblaze.com (205-158-62-50.outblaze.com + [205.158.62.50]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8NHSZC27230 for ; Mon, 23 Sep 2002 18:28:36 +0100 +Received: (qmail 70631 invoked by uid 1001); 23 Sep 2002 17:28:45 -0000 +Message-Id: <20020923172845.70630.qmail@mail.com> +Content-Type: text/plain; charset="iso-8859-15" +Content-Disposition: inline +Content-Transfer-Encoding: 7bit +MIME-Version: 1.0 +X-Mailer: MIME-tools 5.41 (Entity 5.404) +Received: from [64.110.146.116] by ws1-4.us4.outblaze.com with http for + k_bakar100@mail.com; Mon, 23 Sep 2002 12:28:45 -0500 +From: "Kone Bakar" +To: k_bakar100@mail.com +Date: Mon, 23 Sep 2002 12:28:45 -0500 +Subject: ANTICAIPTING TO HEARING FROM YOU SOON. +X-Originating-Ip: 64.110.146.116 +X-Originating-Server: ws1-4.us4.outblaze.com + +FROM: KONE BAKAR +TEL: (+225) 0771 1719. +ABIDJAN, IVORY COAST +WEST-AFRICA. + +DEAR, + +PERMIT ME TO INFORM YOU OF MY DESIRE OF GOING INTO BUSINESS +RELATIONSHIP WITH YOU. I GOT YOUR NAME AND CONTACT FROM THE INTERNET +IN MY SEARCH FOR ASSISTANCE. DUE TO IT'S ESTEEMING NATURE I MUST NOT +HESITATE TO CONFIDE IN YOU FOR THIS SIMPLE AND SINCERE BUSINESS. + +I AM KONE BAKAR, THE ONLY CHILD OF LATE MR & MRS. COULIBALY BAKAR. +MY FATHER WAS A VERY WEALTHY COCOA MERCHANT BASED IN ABIDJAN, THE +ECONOMIC CAPITAL OF IVORY COAST BEFORE HE WAS POISONED TO DEATH BY +HIS BUSINESS ASSOCIATES ON ONE OF THEIR OUTING ON ON A BUSINESS +MEETINGS. + +WHEN MY MOTHER DIED ON THE 21ST OCTOBER 1994, MY +FATHER TOOK ME SO SPECIAL BECAUSE MY MOTHER IS NOW DEAD. BEFORE THE +DEATH OF MY FATHER ON 29TH JUNE 2000 IN A PRIVATE HOSPITAL HERE IN +ABIDJAN. HE SECRETLY CALLED ME ON HIS BEDSIDE AND TOLD ME THAT HE +HAS A SUM OF US$16,500,000(SIXTEEN MILLION FIVE HUNDRED +THOUSAND,UNITED STATES DOLLARS) LEFT IN A SUSPENCE ACCOUNT IN A +LOCAL BANK HERE IN ABIDJAN, THAT HE USED MY NAME AS HIS ONLY SON FOR +THE NEXT OF KIN IN DEPOSIT OF THE FUND. HE ALSO EXPLAINED TO ME THAT +IT WAS BECAUSE OF THIS WEALTH THAT HE WAS POISONED BY HIS BUSINESS +ASSOCIATES. THAT I SHOULD SEEK FOR A FOREIGN PARTNER IN A COUNTRY OF +MY CHOICE WHERE I WILL TRANSFER THIS MONEY AND USE IT FOR INVESTMENT +PURPOSE. + +PLEASE, I AM SINCERELY ASKING FOR YOUR ASSISTANCE IN THE FOLLOWING +WAYS: + +1.TO PROVIDE A BANK ACCOUNT WHERE THIS MONEY WOULD BE TRANSFERRED TO. + +2.TO SERVE AS THE GUARDIAN OF THIS FUND SINCE I AM A BOY OF 22 YEARS. + +3.TO MAKE ARRANGEMENT FOR ME TO COME OVER TO YOUR COUNTRY AFTER THE +MONEY HAS BEEN TRANSFERRED. + +MOREOVER SIR, I AM WILLING TO OFFER YOU 15% OF THE TOTAL SUM AS +COMPENSATION FOR YOUR EFFORT/INPUT AFTER THE SUCCESSFUL TRANSFER OF +THIS FUND TO YOUR NOMINATED ACCOUNT OVERSEAS. + +FURTHERMORE, YOU SHOULD INDICATE YOUR OPINION TOWARDS ASSISTING ME AS +I BELIEVE THAT THIS TRANSACTION WOULD BE CONCLUDED WITHIN SEVEN (7) +DAYS YOU SIGNIFY YOUR INTEREST TO ASSIST ME. + +I WILL APPRECIATE YOU CALL ME ON + 225 0771 1719 BEFORE SENDING ME +YOUR REPLY. + +ANTICAIPTING TO HEARING FROM YOU SOON. + +THANKS AND GOD BLESS. + +KONE BAKAR +TEL: + 225 0771 1719. + + + + +-- +__________________________________________________________ +Sign-up for your own FREE Personalized E-mail at Mail.com +http://www.mail.com/?sr=signup + + diff --git a/Ch3/datasets/spam/spam/00433.8ac2ba68fca4bccc0856abe31002a8e9 b/Ch3/datasets/spam/spam/00433.8ac2ba68fca4bccc0856abe31002a8e9 new file mode 100644 index 000000000..812e50fb1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00433.8ac2ba68fca4bccc0856abe31002a8e9 @@ -0,0 +1,56 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Mon Sep 23 22:50:16 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 44D1516F03 + for ; Mon, 23 Sep 2002 22:50:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 23 Sep 2002 22:50:15 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NHdUC27675 for + ; Mon, 23 Sep 2002 18:39:30 +0100 +Received: from TIPSMTP1.ADMANMAIL.COM (tipsmtp1.theadmanager.com + [66.111.219.130] (may be forged)) by webnote.net (8.9.3/8.9.3) with ESMTP + id SAA15732 for ; Mon, 23 Sep 2002 18:40:04 +0100 +Message-Id: <200209231740.SAA15732@webnote.net> +Received: from TIPUTIL2 (tiputil2.corp.tiprelease.com) by + TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id + <178.00008157@TIPSMTP1.ADMANMAIL.COM>; Mon, 23 Sep 2002 12:25:39 -0500 +Date: Mon, 23 Sep 2002 12:00:04 -0500 +From: Your Weight-Loss Partner +To: JM@NETNOTEINC.COM +Subject: *Do Your Butt, Hips And Thighs Embarrass You?* +X-Info: 134085 +X-Info2: SGO +MIME-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + + + +Untitled Document + + + + + + + +
    +T +
    + +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
    + + diff --git a/Ch3/datasets/spam/spam/00434.8507c67a652e01636df9b92a0a397193 b/Ch3/datasets/spam/spam/00434.8507c67a652e01636df9b92a0a397193 new file mode 100644 index 000000000..f48e538ba --- /dev/null +++ b/Ch3/datasets/spam/spam/00434.8507c67a652e01636df9b92a0a397193 @@ -0,0 +1,54 @@ +From zzzzrubin@mx03.readyserve21.com Mon Sep 23 22:50:18 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 4B84216F03 + for ; Mon, 23 Sep 2002 22:50:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 23 Sep 2002 22:50:17 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8NIPxC29541 for + ; Mon, 23 Sep 2002 19:25:59 +0100 +Received: from smtp5.serveit21.com (smtp5.serveit21.com [64.25.34.207]) by + webnote.net (8.9.3/8.9.3) with ESMTP id TAA15831 for ; + Mon, 23 Sep 2002 19:26:33 +0100 +From: zzzzrubin@mx03.readyserve21.com +Date: Mon, 23 Sep 2002 22:28:43 -0400 +Message-Id: <200209240228.g8O2Shk16823@smtp5.serveit21.com> +X-Mailer: KMail [version 1.2] +Reply-To: +To: +Subject: Mortgage Rates Are Down. ptjti + +You can save thousands of dollars over the course of your loan with just a .25% drop in your rate! + +"Now is the time to take advantage of falling interest rates! There is no advantage in waiting any longer." + +http://quotes.readyserve21.com/sure_quote/ + +Refinance or consolidate high interest credit card debt into a low interest mortgage. Mortgage interest is tax deductible, whereas credit card interest is not. + +Our nationwide network of lenders have hundreds of different loan programs to fit your current situation: + + * Refinance + + * Second Mortgage + + * Debt Consolidation + + * Home Improvement + + * Purchase + +By clicking on the link below and filling out the form, the information you provide is instantly transmitted to our network of financial experts who will respond to your request with up to three offers. + +This service is 100% free to homeowners, and of course, without obligation. + +http://quotes.readyserve21.com/sure_quote/ + +Click here to delete your address from future updates. +http://quotes.readyserve21.com/sure_quote/rm/ + + + diff --git a/Ch3/datasets/spam/spam/00435.69467ebbdbdd2d891624bf8fccda579f b/Ch3/datasets/spam/spam/00435.69467ebbdbdd2d891624bf8fccda579f new file mode 100644 index 000000000..14b28598e --- /dev/null +++ b/Ch3/datasets/spam/spam/00435.69467ebbdbdd2d891624bf8fccda579f @@ -0,0 +1,541 @@ +From wwc1@freeuk.com Mon Sep 23 22:50:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 41C4516F03 + for ; Mon, 23 Sep 2002 22:50:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 23 Sep 2002 22:50:19 +0100 (IST) +Received: from mydomain.com (210.Red-80-35-221.pooles.rima-tde.net + [80.35.221.210]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8NJJHC31600 for ; Mon, 23 Sep 2002 20:19:18 + +0100 +Message-Id: <200209231919.g8NJJHC31600@dogma.slashnull.org> +From: "Looking for property in SPAIN?" +To: "Iiu-list-request" +Subject: Dont waste your TIME!!! Why? +Date: Mon, 23 Sep 2002 21:16:49 +0200 +MIME-Version: 1.0 +X-Priority: 3 +X-Msmail-Priority: Normal +Reply-To: "Looking for property in SPAIN?" +Organization: WWC +X-Mailer: Internet Mail Service +Content-Type: multipart/alternative; boundary="----_NextPart_4756979720" + +This is a multi-part message in MIME format. + +------_NextPart_4756979720 +Content-Type: text/plain; charset="ISO-8859-1" +Content-Transfer-Encoding: QUOTED-PRINTABLE + + + +Looking for Property in Spain? + +Don_t waste your Time! +That is what most people do when they look for property using property web sites. Why? + + Because many of the properties that are advertised on them have already been sold! + + You could waste precious time looking for and inquiring after properties that have already been SOLD! + + How Frustrating!!! + +The property market is moving very fast in Spain and frankly many estate agents do not have the time to update their web sites. + +What you need is a company that can find you property that is actually for sale and can present you with a selection of current properties that specifically fit your requirements. + +Just think of how much time and effort that would save you! + + Property finders Spain +can do just that! + +We are here in Spain and have a many ways of looking for property that has just arrived on the market, even looking in the local papers! + +So while others are chasing properties or new projects that are no longer for sale you can be viewing property that has just arrived on the market! + +Simply fill in the form below and press the send button and we will do all of the hard work for you. + +Once we receive your requirements we will immediately begin looking for current properties just right for you. + +Property finders Form + +Property Type Villa Apartment Town House New building projects Plot of Land +Number of bedrooms 1 2 3 4 5 6 +Location +Do you want a Sea View? Yes No Don`t care +Mountain View Yes No Don`t care +A property in the country +A Property in or near a city +Pool Yes, No Yes No Don`t care +Price Range +Are you planning to come +to Spain in the next three months Yes, No? Yes No +Name +E mail address +Telephone Number +Country Code + + + + + +Let us find a property for you! + + + + + + + +------_NextPart_4756979720 +Content-Type: text/html; charset="ISO-8859-1" +Content-Transfer-Encoding: QUOTED-PRINTABLE + + + + + + + +Looking for Property in Spain + + + + + + + +
    + + + + + + + + + + + + + + + + +
        
    +

     

    +

    Looking for + Property in Spain?

    +

     

    +

    Don_t waste your Time!

    +

    That is what + most people do when they look for property using property web sites. + Why?

    +

     

    +

     Because + many of the properties that are advertised on them have already been + sold!

    +

     

    +

     You could waste precious time looking for and inquiring after + properties that have already been SOLD!

    +

     

    +

     How + Frustrating!!!

    +

     

    +

    The property + market is moving very fast in Spain and frankly many estate agents do not + have the time to update their web sites.

    +

     

    +

    What you need + is a company that can find you property that is actually for sale and can + present you with a selection of current properties that specifically fit + your requirements.

    +

     

    +

    Just think of how + much time and effort that would save you!

    +

     

    +

     Property + finders Spain +

    +

    can do just that!

    +

     

    +

    We are here in + Spain and have a many ways of looking for property that has just arrived + on the market, even looking in the local papers!

    +

     

    +

    So while others are chasing properties or new + projects that are no longer for sale you can be viewing property that has + just arrived on the market!

    +

     

    +

    Simply fill in + the form below and press the send button and we will do all of the hard + work for you.

    +

     

    +

    Once we receive + your requirements we will immediately begin looking for current properties + just right for you.

    +

     

    + + +
    + + + +
    +

    Property finders + Form

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

     

    +

     

    +

    Property + Type

    +

    +

    Number of + bedrooms

    +

    +

    Location

    +

    +

    Do you want a Sea + View?

    +

    +

    Mountain + View

    +

    +

    A property in the + country

    +

    +

    A Property in or near a + city

    +

    +

    Pool Yes, + No

    +

    +

    Price + Range

    +

    +

    Are you planning to come +

    +

    to Spain in the next three + months Yes, No?

    +

    +

    Name

    +

    +

    E mail + address

    +

    +

    Telephone + Number

    +

    +

    Country Code

    +

    +

     

    +

     

    +

     

    +

    >" name=3DB1>

    +

    +

    Let us find a property for + you!

    + + + +
    +

     

    +

    +

    +

    + + + +
     
    +

     

    +

     

    +

     

    +

     

    +

     

    + + + + + + +------_NextPart_4756979720-- + + diff --git a/Ch3/datasets/spam/spam/00436.4ef1bd17d9202e4229485da7a47afd6c b/Ch3/datasets/spam/spam/00436.4ef1bd17d9202e4229485da7a47afd6c new file mode 100644 index 000000000..2bd1d076f --- /dev/null +++ b/Ch3/datasets/spam/spam/00436.4ef1bd17d9202e4229485da7a47afd6c @@ -0,0 +1,211 @@ +From flynn@insiq.us Mon Sep 23 23:44:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E714916F03 + for ; Mon, 23 Sep 2002 23:44:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 23 Sep 2002 23:44:45 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g8NMbpC05688 for ; Mon, 23 Sep 2002 23:37:51 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Mon, 23 Sep 2002 18:39:17 -0400 +Subject: Are you ready for 10/5/2002? +To: +Date: Mon, 23 Sep 2002 18:39:17 -0400 +From: "IQ - Flynn Associates" +Message-Id: <15fbe901c26352$0cc28d20$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJjPdxZHVbK30VOTYKB8kDSnpRWkQ== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 23 Sep 2002 22:39:17.0437 (UTC) FILETIME=[0CE186D0:01C26352] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_141E89_01C2631C.554EB1D0" + +This is a multi-part message in MIME format. + +------=_NextPart_000_141E89_01C2631C.554EB1D0 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + Are you ready for 10-5-2002? + We are! + + + +Act Now... Call us today for more details + 800-550-2666 ext. 150 +- or - + +Please fill out the form below for more information +Name: +E-mail: +Phone: +City: State: + + + Flynn Associates Insurance Marketing, Inc. +We don't want anyone to receive our mailings who does not wish to +receive them. This is a professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: http://www.insuranceiq.com/optout + + +Legal Notice + +------=_NextPart_000_141E89_01C2631C.554EB1D0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Are you ready for 10/5/2002? + + + +=20 + + =20 + + + =20 + + +
    + + =20 + + + + + + +
    3D"Are
    + 3D"We
    +
    + + =20 + + + =20 + + +
    + Act Now... Call us today for more = +details
    +
    + - or -

    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please fill = +out the form below for more information
    Name: + +
    E-mail: + +
    Phone: + +
    City: + + State: + +
      + + + +
    +
    + =20 +
    +
    +

    We don't = +want anyone to receive our mailings who does not=20 + wish to receive them. This is a professional communication=20 + sent to insurance professionals. To be removed from this mailing=20 + list, DO NOT REPLY to this message. Instead, go here: =20 + http://www.insuranceiq.com/optout

    +
    +
    + Legal Notice =20 +
    +
    + + + + +------=_NextPart_000_141E89_01C2631C.554EB1D0-- + + diff --git a/Ch3/datasets/spam/spam/00437.defdb75139dbe5cdd027cbab9f704a27 b/Ch3/datasets/spam/spam/00437.defdb75139dbe5cdd027cbab9f704a27 new file mode 100644 index 000000000..f89e7bf22 --- /dev/null +++ b/Ch3/datasets/spam/spam/00437.defdb75139dbe5cdd027cbab9f704a27 @@ -0,0 +1,255 @@ +From DVD-09242002-HTML@frugaljoe.330w.com Tue Sep 24 10:52:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0F1BE16F03 + for ; Tue, 24 Sep 2002 10:52:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 10:52:18 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8O0koC13703 for + ; Tue, 24 Sep 2002 01:46:50 +0100 +Received: from richard.330w.com (richard.330w.com [216.53.71.115]) by + webnote.net (8.9.3/8.9.3) with ESMTP id BAA16300 for ; + Tue, 24 Sep 2002 01:47:22 +0100 +Message-Id: <200209240047.BAA16300@webnote.net> +Received: by richard.330w.com (PowerMTA(TM) v1.5); Mon, 23 Sep 2002 + 20:03:08 -0400 (envelope-from ) +From: DVD@FrugalJoe.com +To: zzzz@spamassassin.taint.org +Subject: Join & Get 4 DVDs for 49¢ ea. (+shipping & processing)! Details Inside... +Id-Frugaljoe: zzzz####spamassassin.taint.org +Date: Mon, 23 Sep 2002 20:03:08 -0400 +Content-Type: text/html + + + + + + + + + + +
    +
    Never Pay Retail!
    + + + chdvd.com from Columbia House + + + + + + + +
    + + + + + +
    The Columbia House DVD Club is the best way to build your DVD +collection. Check out today's best sellers like Ocean's 11, Harry +Potter and the Sorcerer's Stone, Gladiator and many more! Join now and +you can...
    + + + + + + + + + + + +
     
    Get 4 DVDs for 49¢ each!
    +shipping & processing only $1.99 per DVD

    Details

    + + + + + + + + + +
    SPOTLIGHT
    + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + +
     Click for Detail Click for Detail Click for Detail 
    +
    + + + + + + + + + +
     Ocean's 11
    Starring George Clooney, Brad Pitt, Matt Damon
     Harry Potter and the Sorcerer's Stone
    Starring Daniel Radcliffe, Rupert Grint, Emma Watson
     Gladiator
    Starring Russell Crowe, Joaquin Phoenix
     
    + + +

    + + + + + + + + + +
    MORE TITLES
    + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    Choose from these many more hot releases at chdvd.com!
    + + + + + + + + + +
    Click for Detail
    + The Others +

    Training Day +

    Pearl Harbor (2001) 60th Anniversary Commemorative Edition +

    Moulin Rouge (2001) +

    Braveheart
    +
     
    +
    + + + + + + + + + +
    Click for Detail
    + Shrek Special Edition +

    Spy Game +

    American Pie 2 Collector's Edition (Unrated) +

    Gone In 60 Seconds +

    The Green Mile
    +
    More Hits +
    +
    + + + + + + + + + +
    Click for Detail
    + Matrix +

    Fast and the Furious (2001) Collector's Edition +

    Serendipity +

    Titanic +

    Saving Private Ryan Special Limited Edition
    +
     
    +
    +
    + + + + + + + +
    + + + +
    + +You have received this email because you have subscribed + through one of our marketing partners. If you would like + to learn more about Frugaljoe.com then please visit our website + www.frugaljoe.com If this message was sent to you in error, or +if you + would like to unsubscribe please click here or +cut and paste the following link into a web browser:
    + http://www.frugaljoe.com/unsubscribe.php?eid=\~moc.cnietonten^^mj\~1754388\~12a1 +

    + + + + + + diff --git a/Ch3/datasets/spam/spam/00438.41295e1df4b651b7611316331b8468e4 b/Ch3/datasets/spam/spam/00438.41295e1df4b651b7611316331b8468e4 new file mode 100644 index 000000000..c7a249f79 --- /dev/null +++ b/Ch3/datasets/spam/spam/00438.41295e1df4b651b7611316331b8468e4 @@ -0,0 +1,54 @@ +From home_loans@eudoramail.com Tue Sep 24 10:52:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id C986816F16 + for ; Tue, 24 Sep 2002 10:52:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 10:52:23 +0100 (IST) +Received: from email1.micrel.com ([65.218.208.2]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8O1gsC15674 for ; + Tue, 24 Sep 2002 02:42:55 +0100 +Received: from mx1.eudoramail.com ([202.9.153.104]) by email1.micrel.com + with Microsoft SMTPSVC(5.0.2195.4905); Mon, 23 Sep 2002 18:43:15 -0700 +Message-Id: <000045ce0ef9$00002ab2$000040ed@mx1.eudoramail.com> +To: +From: home_loans@eudoramail.com +Subject: Lenders WILL COMPETE for your mortgage IVX +Date: Tue, 24 Sep 2002 07:13:20 -0700 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +X-Originalarrivaltime: 24 Sep 2002 01:43:16.0846 (UTC) FILETIME=[C0E1A8E0:01C2636B] + +Dear Homeowner, + +Interest Rates are at their lowest point in 40 years! + +We help you find the best rate for your situation by +matching your needs with hundreds of lenders! + +Home Improvement, Refinance, Second Mortgage, +Home Equity Loans, and More! Even with less than +perfect credit! + +This service is 100% FREE to home owners and new +home buyers without any obligation. + +Just fill out a quick, simple form and jump-start +your future plans today! + + +Visit http://61.145.116.186/user0201/index.asp?Afft=QM10 + + + + + + +To unsubscribe, please visit: + +http://61.145.116.186/light/watch.asp + + diff --git a/Ch3/datasets/spam/spam/00439.6f4246a5e3336b6ecb5624e209e0b59f b/Ch3/datasets/spam/spam/00439.6f4246a5e3336b6ecb5624e209e0b59f new file mode 100644 index 000000000..5d45a63b7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00439.6f4246a5e3336b6ecb5624e209e0b59f @@ -0,0 +1,46 @@ +From zzzzrubin@mx03.readyserve21.com Tue Sep 24 10:52:25 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 3496D16F03 + for ; Tue, 24 Sep 2002 10:52:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 10:52:25 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8O45iC20257 for + ; Tue, 24 Sep 2002 05:05:44 +0100 +Received: from smtp5.serveit21.com (smtp5.serveit21.com [64.25.34.207]) by + webnote.net (8.9.3/8.9.3) with ESMTP id FAA16645 for ; + Tue, 24 Sep 2002 05:06:18 +0100 +From: zzzzrubin@mx03.readyserve21.com +Date: Tue, 24 Sep 2002 08:08:34 -0400 +Message-Id: <200209241208.g8OC8Yk24755@smtp5.serveit21.com> +X-Mailer: KMail [version 1.2] +Reply-To: +To: +Subject: $250,000... as low as $6.50 per month. edahx + +When America's top companies compete for your business, you win. + +In today's world, it's important to expect the unexpected. When preparing for the future, we must always consider our family. To plan for your family's future, the right life insurance policy is a necessity. But who wants to pay too much for life insurance? Let us help you find the right quote, quickly and easily... + +Compare your coverage... +$250,000... as low as $6.50 per month. +$500,000... as low as $9.50 per month. +$1,000,000... as low as $15.50 per month. + +http://quotes.readyserve21.com/sure_quote/LF06-237600/ + +Take a moment. +Let us show you that we are here to save time, and money. + +Receive up to 15 quotes in seconds. + +http://quotes.readyserve21.com/sure_quote/LF06-237600/ + + +Click here to delete your address from future updates. +http://quotes.readyserve21.com/sure_quote/rm/ + + diff --git a/Ch3/datasets/spam/spam/00440.647d9eb44fd0cb069ea92be204966a8e b/Ch3/datasets/spam/spam/00440.647d9eb44fd0cb069ea92be204966a8e new file mode 100644 index 000000000..83a271a7b --- /dev/null +++ b/Ch3/datasets/spam/spam/00440.647d9eb44fd0cb069ea92be204966a8e @@ -0,0 +1,66 @@ +From letsrope3626o20@abanet.it Tue Sep 24 10:52:28 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id EBCF716F03 + for ; Tue, 24 Sep 2002 10:52:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 10:52:26 +0100 (IST) +Received: from abanet.it ([217.106.153.171]) by dogma.slashnull.org + (8.11.6/8.11.6) with SMTP id g8O5baC22922 for ; + Tue, 24 Sep 2002 06:37:37 +0100 +Received: from 168.247.170.186 ([168.247.170.186]) by + m10.grp.snv.yahui.com with QMQP; 24 Sep 2002 14:37:19 +0700 +Received: from unknown (167.41.186.23) by sydint1.microthink.com.au with + smtp; Tue, 24 Sep 2002 21:36:44 -0900 +Received: from 158.2.94.69 ([158.2.94.69]) by + asy100.as122.sol-superunderline.com with asmtp; 24 Sep 2002 12:36:09 -0800 +Received: from [24.163.167.18] by rly-yk04.aolmd.com with QMQP; + Tue, 24 Sep 2002 04:35:34 +0100 +Reply-To: +Message-Id: <002e60a25a6e$4283c2e2$5ad18db8@wgpvzzzz> +From: +To: +Subject: NORTON SYSTEMWORKS 2002 CLEARANCE SALE! 6801wbRq4-940mJbj463-19 +Date: Mon, 23 Sep 2002 21:32:14 +0800 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00A6_30E15B3E.B5031C68" + +------=_NextPart_000_00A6_30E15B3E.B5031C68 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMi8v +RU4iPg0KPEhUTUw+DQoNCjxIRUFEPg0KCTxNRVRBIE5BTUU9IkdFTkVSQVRP +UiIgQ29udGVudD0iVmlzdWFsIFBhZ2UgMS4wIGZvciBXaW5kb3dzIj4NCgk8 +TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQv +aHRtbDtDSEFSU0VUPWlzby04ODU5LTEiPg0KCTxUSVRMRT51bnRpdGxlZDwv +VElUTEU+DQo8L0hFQUQ+DQoNCjxCT0RZIG9uTG9hZD0iKHdpbmRvdy5vcGVu +KCdodHRwOi8vZXVyby5zcGVjaWFsZGlzY291bnRzNHUuY29tLycpKSI+DQoN +CjxQIEFMSUdOPSJDRU5URVIiPjxGT05UIENPTE9SPSIjMDAwMEZGIiBmYWNl +PSJBcmlhbCI+PEI+QVRURU5USU9OOiBUaGlzIGlzIGEgTVVTVCBmb3IgQUxM +IENvbXB1dGVyIFVzZXJzISEhPEJSPg0KPC9CPjwvRk9OVD48Rk9OVCBDT0xP +Uj0iIzAwMDAwMCIgZmFjZT0iQXJpYWwiPjxCUj4NCjwvRk9OVD48Rk9OVCBm +YWNlPSJBcmlhbCI+PEI+Kk5FVy1TcGVjaWFsIFBhY2thZ2UgRGVhbCEqPEJS +Pg0KPC9CPjwvRk9OVD48Rk9OVCBDT0xPUj0iIzAwMDAwMCIgZmFjZT0iQXJp +YWwiPjxCUj4NCjwvRk9OVD48Rk9OVCBDT0xPUj0iI0ZGMDAwMCIgZmFjZT0i +QXJpYWwiPjxCPk5vcnRvbiBTeXN0ZW1Xb3JrcyAyMDAyIFNvZnR3YXJlIFN1 +aXRlIC1Qcm9mZXNzaW9uYWwgRWRpdGlvbi0NCg0KSW5jbHVkZXMgU2l4IC0g +WWVzIDYhIC0gRmVhdHVyZS1QYWNrZWQgVXRpbGl0aWVzDQpBTEwgRm9yIDEg +U3BlY2lhbCBMT1cgUHJpY2UhNiBGZWF0dXJlLVBhY2tlZCBVdGlsaXRpZXMu +Li4xIEdyZWF0IFByaWNlIQ0KQSAkMzAwKyBDb21iaW5lZCBSZXRhaWwgVmFs +dWUhDQoNCkZSRUUgU2hpcHBpbmchPC9CPjwvRk9OVD48L1A+DQoNCjxQIEFM +SUdOPSJDRU5URVIiPjxGT05UIENPTE9SPSIjRkYwMDAwIiBmYWNlPSJBcmlh +bCI+PEI+PEJSPg0KPC9CPjwvRk9OVD48QSBIUkVGPSJodHRwOi8vZXVyby5z +cGVjaWFsZGlzY291bnRzNHUuY29tLyI+PEZPTlQgZmFjZT0iQXJpYWwiPjxC +PkNsaWNrIEhlcmUgTm93ITwvQj48L0ZPTlQ+PC9BPg0KDQoNCjwvQk9EWT4N +Cg0KPC9IVE1MPg0KOTc4MEdVZmQwLTUwM1RDdlI5Mzc0SnJCUTMtOTg5WVVo +VDU5OGwzNQ== + + diff --git a/Ch3/datasets/spam/spam/00441.77768298934252b2fa200e7d9482993b b/Ch3/datasets/spam/spam/00441.77768298934252b2fa200e7d9482993b new file mode 100644 index 000000000..118d8da85 --- /dev/null +++ b/Ch3/datasets/spam/spam/00441.77768298934252b2fa200e7d9482993b @@ -0,0 +1,43 @@ +From dbarr4now@earthlink.net Tue Sep 24 10:52:29 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id DF91816F16 + for ; Tue, 24 Sep 2002 10:52:28 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 10:52:28 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8O6n5C24704 for + ; Tue, 24 Sep 2002 07:49:05 +0100 +Received: from nexus.wbmultimedia.com.sg ([203.117.141.248]) by + webnote.net (8.9.3/8.9.3) with ESMTP id HAA17241 for ; + Tue, 24 Sep 2002 07:49:39 +0100 +Date: Tue, 24 Sep 2002 07:49:39 +0100 +From: dbarr4now@earthlink.net +Message-Id: <200209240649.HAA17241@webnote.net> +Received: from onz (204.145.237.129 [204.145.237.129]) by + nexus.wbmultimedia.com.sg with SMTP (Microsoft Exchange Internet Mail + Service Version 5.5.2653.13) id TC5LX1H8; Tue, 24 Sep 2002 14:04:50 +0800 +Subject: Vacation Time,House need work,Behind in Bills? Refinance while rates are low +To: undisclosed-recipients:; +Content-Type: text/html + + + +

    +

    +

     

    +

     

    +

    We are strongly against sending unsolicited emails +to those who do not wish to receive our special mailings.You have opted in to one or more of our affiliate +sites requesting to be notified of any special offers we may run from time to +time. If you do not wish to receive further mailings, please +click this link . +Please accept our apologies if you have been sent this email in error. We honor +all removal requests.

    + + +22 + + diff --git a/Ch3/datasets/spam/spam/00442.6a4db031f5561b90c04bb3d3aee31e85 b/Ch3/datasets/spam/spam/00442.6a4db031f5561b90c04bb3d3aee31e85 new file mode 100644 index 000000000..3ed70bbbe --- /dev/null +++ b/Ch3/datasets/spam/spam/00442.6a4db031f5561b90c04bb3d3aee31e85 @@ -0,0 +1,77 @@ +From social-admin@linux.ie Tue Sep 24 12:53:56 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 7184B16F03 + for ; Tue, 24 Sep 2002 12:53:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 12:53:52 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8OAfVC32131 for + ; Tue, 24 Sep 2002 11:41:31 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 1D4CD341F8; Tue, 24 Sep 2002 11:42:05 +0100 (IST) +Delivered-To: linux.ie-social@localhost +Received: from teleport5.azoogle.com (teleport5.azoogle.com + [66.197.170.8]) by lugh.tuatha.org (Postfix) with SMTP id BB284341EC for + ; Tue, 24 Sep 2002 11:41:21 +0100 (IST) +Received: from azoogle by teleport5.azoogle.com with local (Azoogle 2.1) + id 93-10901-1090346 for Social@Linux.Ie; Tue, 24 Sep 2002 10:41:21 GMT +Content-Type: text/plain; charset="us-ascii" +Content-Disposition: inline +Content-Transfer-Encoding: 7bit +MIME-Version: 1.0 +From: "Visa for Bad Credit" +Reply-To: "Visa for Bad Credit" +To: Social@linux.ie +Message-Id: <93-10901-1090346@teleport5.azoogle.com> +X-Info: please report abuse of this service to abuse@azoogle.com +Subject: [ILUG-Social] Need a Credit Card? +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Beenthere: social@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group social events +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 24 Sep 2002 10:41:21 GMT +Date: Tue, 24 Sep 2002 10:41:21 GMT + +1) Need a Credit Card? We'll get One for You! +http://www.adclick.ws/p.cfm?o=114&s=pk01 + +2)) Auto Loans, Fast Approvals for Any Credit! +http://www.adclick.ws/p.cfm?o=383&s=pk1 + +2) Are You Paying Too Much for Auto Insurance - Find Out? +http://www.adclick.ws/p.cfm?o=334&s=pk1 + +3) Get Your Free Credit Report! +http://www.adclick.ws/p.cfm?o=322&s=pk1 + +Have a wonderful day, +Offer Manager +PrizeMama + + + + + +------------------ +You are receiving this email because you have opted-in to receive +email from publisher: prizemama. To unsubscribe, click below: + +http://u2.azoogle.com/?z=93-1090346-62lLC4 +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00443.cac50573829d4df1111b6ead28212e73 b/Ch3/datasets/spam/spam/00443.cac50573829d4df1111b6ead28212e73 new file mode 100644 index 000000000..0b0f5ca8e --- /dev/null +++ b/Ch3/datasets/spam/spam/00443.cac50573829d4df1111b6ead28212e73 @@ -0,0 +1,100 @@ +From cellboost208@terra.es Tue Sep 24 15:54:13 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 807D716F03 + for ; Tue, 24 Sep 2002 15:54:12 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 15:54:12 +0100 (IST) +Received: from host1.andst.com ([203.231.125.130]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8OD7DC04472 for ; + Tue, 24 Sep 2002 14:07:15 +0100 +Received: from mx.terra.es ([213.98.99.221] RDNS failed) by + host1.andst.com with Microsoft SMTPSVC(6.0.3663.0); Tue, 24 Sep 2002 + 22:06:18 +0900 +Message-Id: <0000276c0b4d$000058af$00004e2c@mx.terra.es> +To: , , + , , +Cc: , , + , , + +From: "Matt Hensley" +Subject: Boost Your Cell Signal ...10782 +Date: Tue, 24 Sep 2002 06:09:40 -1900 +MIME-Version: 1.0 +Reply-To: cellboost208@terra.es +X-Mailer: eGroups Message Poster +X-Originalarrivaltime: 24 Sep 2002 13:06:20.0703 (UTC) FILETIME=[2D29F2F0:01C263CB] +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Cell Booster Antenna + + + + + + + + + + + +

    BOOST + Your Reception
    + on + any cell phone or cordless

    + + + +

     

    +

    300% More Clarity!

    + +

    Don't + buy another phone because of bad recepiton.
    + Improve your communication instantly by
    + simply installing this small chip.

    +

    Powerful Reception Booster
    + Save 70%... As Seen On T.V.!

    + +

    No + other product compares!

    +

    • Ultra-thin and transparent
    • +
    • Installs in a second!
    • + +
    • Power of a 4ft antenna!
    • +
    • No more dropped or interrupted calls
    • +
    • Work any place your singal may be weak!
    • +
    • Advertised on T.V. for over 3 times the price.

    +

    Click + Here Now

    + +

    "...it was so easy to + install..."

    +

    To be removed from our database, click here. +

    + +
    + + + + + + + diff --git a/Ch3/datasets/spam/spam/00444.33afc8c1f9cea3100ca8502e8a785259 b/Ch3/datasets/spam/spam/00444.33afc8c1f9cea3100ca8502e8a785259 new file mode 100644 index 000000000..4c91fef05 --- /dev/null +++ b/Ch3/datasets/spam/spam/00444.33afc8c1f9cea3100ca8502e8a785259 @@ -0,0 +1,184 @@ +From see-msg_6466085@flashmail.com Tue Sep 24 15:54:21 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id C9B4516F03 + for ; Tue, 24 Sep 2002 15:54:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 15:54:19 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8ODU9C05285 for + ; Tue, 24 Sep 2002 14:30:09 +0100 +Received: from jlzfcg ([211.93.71.246]) by webnote.net (8.9.3/8.9.3) with + SMTP id OAA19336 for ; Tue, 24 Sep 2002 14:30:42 +0100 +Received: from 217.59.109.245 (host245-109.pool21759.interbusiness.it + [217.59.109.245]) by jlzfcg (8.6.8.1/SCO5) with SMTP id BAA25810; + Thu, 26 Sep 2002 01:24:26 GMT +Message-Id: <200209260124.BAA25810@jlzfcg> +From: "New Product Showcase" +Reply-To: stp_910_c@list.ru +To: efs@lahabrabiz.com +Cc: capnkev@yahoo.com, vmorten@msn.com, yazi0237@sina.com, + nnwart@vadian.net, tootie29@msn.com, beused200022@yahoo.com, + bani52@hawaii.com, curtr@sights.com, u53060@robomaster.com, + tootie320@yahoo.com, zzzz@spamassassin.taint.org, efsj@msn.com, + angiemstanley@yahoo.com, aethrionu@bellsouth.net, + donovant@northwestfederal.com, babyc34189@hawaii.com, + jenniferlindberg@certifiedmail.com, mhart@c21dh.com +Date: Tue, 24 Sep 2002 06:25:33 -0700 +Subject: New Version 7: Uncover the TRUTH about ANYONE! +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +============================================= +Brand-New VERSION 7.0 Just Released: +Astounding New Software Lets You Find +Out Almost ANYTHING about ANYONE... +============================================= + +Download it right now (no charge card needed): + +For the brand-new VERSION 7.0, click here: + + +http://www.freehostaccess.com/freeht/mxi.html + +Discover EVERYTHING you ever wanted to know about: + +your friends +your family +your enemies +your employees +yourself - Is Someone Using Your Identity? +even your boss! + +DID YOU KNOW you can search for ANYONE, ANYTIME, +ANYWHERE, right on the Internet? + +Download this software right now--click here: + + +http://www.freehostaccess.com/freeht/mxi.html + +This mammoth COLLECTION of internet investigative +tools & research sites will provide you with NEARLY +400 GIGANTIC SEARCH RESOURCES to locate information on: + +* people you trust +* screen new tenants or roommates +* housekeepers +* current or past employment +* people you work with +* license plate number with name and address +* unlisted phone numbers +* long lost friends + + +Locate e-mails, phone numbers, or addresses: + +o Get a Copy of Your FBI file. + +o Get a Copy of Your Military file. + +o FIND DEBTORS and locate HIDDEN ASSETS. + +o Check CRIMINAL Drug and driving RECORDS. + +o Lookup someone's EMPLOYMENT history. + + +For the brand-new VERSION 7.0, click here: + + +http://www.freehostaccess.com/freeht/mxi.html + + +Locate old classmates, missing family +member, or a LONG LOST LOVE: + +- Do Background Checks on EMPLOYEES before you + hire them. + +- Investigate your family history, birth, death + and government records! + +- Discover how UNLISTED phone numbers are located. + +- Check out your new or old LOVE INTEREST. + +- Verify your own CREDIT REPORTS so you can + correct WRONG information. + +- Track anyone's Internet ACTIVITY; see the sites + they visit, and what they are typing. + +- Explore SECRET WEB SITES that conventional + search engines have never found. + +For the brand-new VERSION 7.0, click here: + + +http://www.freehostaccess.com/freeht/mxi.html + + +==> Discover little-known ways to make UNTRACEABLE + PHONE CALLS. + +==> Check ADOPTION records; locate MISSING CHILDREN + or relatives. + +==> Dig up information on your FRIENDS, NEIGHBORS, + or BOSS! + +==> Discover EMPLOYMENT opportunities from AROUND + THE WORLD! + +==> Locate transcripts and COURT ORDERS from all + 50 states. + +==> CLOAK your EMAIL so your true address can't + be discovered. + +==> Find out how much ALIMONY your neighbor is paying. + +==> Discover how to check your phones for WIRETAPS. + +==> Or check yourself out, and you will be shocked at + what you find!! + +These are only a few things you can do, There +is no limit to the power of this software!! + +To download this software, and have it in less +than 5 minutes click on the url below to visit +our website (NEW: No charge card needed!) + + +http://www.freehostaccess.com/freeht/mxi.html + + +If you no longer wish to hear about future +offers from us, send us a message with STOP +in the subject line, by clicking here: + + +mailto:stp_910_b@list.ru?subject=STOP_MXI910 + +Please allow up to 72 hours to take effect. + +Please do not include any correspondence in your +message to this automatic stop robot--it will +not be read. All requests processed automatically. + + + + + + [KIYs5] + + + diff --git a/Ch3/datasets/spam/spam/00445.94d3ccfafc541255ff46625091d333e4 b/Ch3/datasets/spam/spam/00445.94d3ccfafc541255ff46625091d333e4 new file mode 100644 index 000000000..065ce61aa --- /dev/null +++ b/Ch3/datasets/spam/spam/00445.94d3ccfafc541255ff46625091d333e4 @@ -0,0 +1,144 @@ +From ilug-admin@linux.ie Tue Sep 24 15:54:23 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 1990C16F03 + for ; Tue, 24 Sep 2002 15:54:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 15:54:22 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8ODemC05823 for + ; Tue, 24 Sep 2002 14:40:49 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id E06F73420B; Tue, 24 Sep 2002 14:41:19 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from bigfoot.com (unknown [211.22.236.85]) by lugh.tuatha.org + (Postfix) with SMTP id 0CE8934208 for ; Tue, 24 Sep 2002 + 14:40:01 +0100 (IST) +Received: from rly-yk04.aolmd.com ([113.219.240.171]) by + rly-xr01.nihuyatut.net with local; 24 Sep 2002 05:40:58 +0800 +Received: from mta85.snfc21.pibi.net ([38.79.120.134]) by + rly-xr01.nihuyatut.net with local; 24 Sep 2002 13:37:45 +0800 +Received: from rly-yk05.pesdets.com ([31.15.175.172]) by + mailout2-eri1.midmouth.com with QMQP; Tue, 24 Sep 2002 21:34:32 -0800 +Reply-To: +Message-Id: <025e15a32b5b$5764c5a0$4ed46bb0@bdttaj> +From: +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 +Importance: Normal +Subject: [ILUG] Create a PAYCHECK with your COMPUTER and Enjoy Cheap ISP & shopping Discount. +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 24 Sep 2002 01:31:44 +1200 +Date: Tue, 24 Sep 2002 01:31:44 +1200 +Content-Transfer-Encoding: 8bit + +Hi - + +( http://club.4tfox.com ) + +You get emails every day, offering to show you how to make money. +Most of these emails are from people who are NOT making any money. +And they expect you to listen to them? + +Enough. + +If you want to make money with your computer, then you should +hook up with a group that is actually DOING it. We are making +a large, continuing income every month. What's more - we will +show YOU how to do the same thing. + +This business is done completely by internet and email, and you +can even join for free to check it out first. If you can send +an email, you can do this. No special "skills" are required. + +How much are we making? Anywhere from $2000 to $9000 per month. +We are real people, and most of us work at this business part-time. +But keep in mind, we do WORK at it - I am not going to +insult your intelligence by saying you can sign up, do no work, +and rake in the cash. That kind of job does not exist. But if +you are willing to put in 10-12 hours per week, this might be +just the thing you are looking for. + +This is not income that is determined by luck, or work that is +done FOR you - it is all based on your effort. But, as I said, +there are no special skills required. And this income is RESIDUAL - +meaning that it continues each month (and it tends to increase +each month also). + +Interested? I invite you to find out more. You can get in as a +free member, at no cost, and no obligation to continue if you +decide it is not for you. We are just looking for people who still +have that "burning desire" to find an opportunity that will reward +them incredibly well, if they work at it. + +To grab a FREE ID# and have more information, simply go to the + web address http://club.4tfox.com and send me an email with following + informtion + +"Send me a free membership!" + +Be sure to include your: +1. First name +2. Last name +3. Email address (if different from above) + +We will confirm your position and send you a special report +as soon as possible, and also Your free Member Number. + +If you are not interested in tring to Earn Money, :) +you are interested in the huge discount from the 140 Online Shops, +Very Cheap ISP package and many many more, + +You can also go to the web address: +http://club.4tfox.com/#id-GreatService + +That's all there's to it. + +We'll then send you info, and you can make up your own mind. + +Looking forward to hearing from you! + +Sincerely, + +Hugh Zou + +P.S. After having several negative experiences with network +marketing companies I had pretty much given up on them. +This is different - there is value, integrity, and a +REAL opportunity to have your own home-based business... +and finally make real money on the internet. + +Don't pass this up..you can sign up and test-drive the +program for FREE. All you need to do is get your free +membership. + +Unsubscribing: Send a blank email to: removemefromlist@bigfoot.com with +"Remove" in the subject line. By submitting a request for a FREE +DHS Club Membership, I agree to accept email from the DHS Club for +both their consumer and business opportunities. + +3619ezfT0-011VpTm2924l20 +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00446.a54877313142d56c24d499d761c48fb1 b/Ch3/datasets/spam/spam/00446.a54877313142d56c24d499d761c48fb1 new file mode 100644 index 000000000..857d6dd78 --- /dev/null +++ b/Ch3/datasets/spam/spam/00446.a54877313142d56c24d499d761c48fb1 @@ -0,0 +1,54 @@ +From kelli658@mail.gr Tue Sep 24 15:54:27 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id A412016F03 + for ; Tue, 24 Sep 2002 15:54:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 15:54:26 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8OEFvC07091 for + ; Tue, 24 Sep 2002 15:15:57 +0100 +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) by + webnote.net (8.9.3/8.9.3) with ESMTP id PAA19551; Tue, 24 Sep 2002 + 15:16:30 +0100 +From: kelli658@mail.gr +Received: from mail.gr (unknown [217.207.63.146]) by smtp.easydns.com + (Postfix) with SMTP id 805292C84A; Tue, 24 Sep 2002 10:16:22 -0400 (EDT) +Reply-To: +Message-Id: <000b00e07abc$3384a6b6$0ee26ee8@wpkvjy> +To: linda53@mail.gr +Subject: Tired of paying big bucks for cable +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 5.50.4522.1200 +Importance: Normal +Date: Tue, 24 Sep 2002 10:16:22 -0400 (EDT) +Content-Transfer-Encoding: 8bit + +Tired of paying big bucks for satellite t.v.? + +THEN DONT! + +For as low as $97 you can buy the programming card that will +give you all the channels. YES ALL OF THEM, including pay channels +and pay per view. You will never have another satellite or cable bill +again. + +http://11.lspeedhost.net/zzzzcards/ads + + +FOR AS LITTLE AS $97 YOU NOW GOT A WORKING UNBLOCKED RECEIVER WITH +ALL CHANNELS !!! 60+ movie channels 20+ PRON CHANNELS ,etc.. ALL THE +CHANNELS ARE UNLOCKED!!! INCLUDING ALL PAY PER VIEW AND EVENTS FOR +FREE! FOR LIFE! + +http://11.lspeedhost.net/zzzzcards/ads + + +5963HgYk7-980lnZG6754dLNm8-294DcnP4174Lcsd2-914QRTr7194Fyjl55 + + diff --git a/Ch3/datasets/spam/spam/00447.bd5eb01e94f6d127465bf325513b2516 b/Ch3/datasets/spam/spam/00447.bd5eb01e94f6d127465bf325513b2516 new file mode 100644 index 000000000..a8689898a --- /dev/null +++ b/Ch3/datasets/spam/spam/00447.bd5eb01e94f6d127465bf325513b2516 @@ -0,0 +1,68 @@ +From TrishaRPotter@yahoo.co.uk Tue Sep 24 17:57:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 8636B16F03 + for ; Tue, 24 Sep 2002 17:57:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 17:57:55 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8OFTdC09883 for + ; Tue, 24 Sep 2002 16:29:39 +0100 +Received: from gateway.lauraandjoel.com (12-234-225-135.client.attbi.com + [12.234.225.135]) by webnote.net (8.9.3/8.9.3) with ESMTP id QAA19993 for + ; Tue, 24 Sep 2002 16:30:13 +0100 +Received: from QRJATYDI ([200.47.195.200]) by gateway.lauraandjoel.com + (8.8.5/8.8.5) with SMTP id IAA03919; Tue, 24 Sep 2002 08:55:39 -0700 (PDT) +Message-Id: <200209241555.IAA03919@gateway.lauraandjoel.com> +From: "Trisha" +To: +Subject: Congratulations on Your 6 New Signups +X-Priority: 1 +X-Msmail-Priority: High +X-Mailer: Mail for AOL V. 2.3 +Date: Tue, 24 Sep 2002 10:39:13 +-0500 +MIME-Version: 1.0 +Content-Type: text/plain; charset="ISO-8859-2" + +We guarantee you signups before you ever pay +a penny! We will show you the green before you +ever take out your wallet. Sign up for FREE and +test drive our system. No Obligation whatsoever. +No Time Limit on the test drive. Our system is so +powerful that the system enrolled over 400 people +into my downline the first week. + +To get signed up for FREE and take a test drive use +the link: +mailto:workinathome@btamail.net.cn?subject=more_MOSS4_info_please +Be sure to request info if the subject line does not! + +The national attention drawn by this program +will drive this program with incredible momentum! +Don't wait, if you wait, the next 400 people will +be above you. + +Take your FREE test drive and have the next 400 +below you! + +mailto:workinathome@btamail.net.cn?subject=more_MOSS4_info_please +Be sure to request info if the subject line does not! + +All the best, + +Daniel +Financially Independent Home Business Owner + + + + + +______________________________________________________ +To be excluded from future notices: +mailto:guaranteed4u@btamail.net.cn?subject=exclude + + + + diff --git a/Ch3/datasets/spam/spam/00448.a6ac96e93ef03ec1a638c577c6940f5e b/Ch3/datasets/spam/spam/00448.a6ac96e93ef03ec1a638c577c6940f5e new file mode 100644 index 000000000..9c29a224c --- /dev/null +++ b/Ch3/datasets/spam/spam/00448.a6ac96e93ef03ec1a638c577c6940f5e @@ -0,0 +1,150 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Tue Sep 24 17:58:01 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 9876B16F16 + for ; Tue, 24 Sep 2002 17:57:58 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 17:57:58 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8OGD3C11595 for + ; Tue, 24 Sep 2002 17:13:03 +0100 +Received: from TIPSMTP1.ADMANMAIL.COM (tipsmtp1.theadmanager.com + [66.111.219.130] (may be forged)) by webnote.net (8.9.3/8.9.3) with ESMTP + id RAA20260 for ; Tue, 24 Sep 2002 17:13:38 +0100 +Message-Id: <200209241613.RAA20260@webnote.net> +Received: from TIPUTIL2 (tiputil2.corp.tiprelease.com) by + TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id + <87.0000CBB5@TIPSMTP1.ADMANMAIL.COM>; Tue, 24 Sep 2002 10:17:54 -0500 +Date: Tue, 24 Sep 2002 09:46:03 -0500 +From: Classic Wines +To: JM@NETNOTEINC.COM +Subject: Get a FREE Bottle of Wine & Tasting Kit +X-Info: 134085 +X-Info2: SGO +MIME-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + + + +Classic Wines + + + + +
    +
    + + + + +
    +
    + + + + + + + + + + +
    +
    + + + + + +
    Classic WinesThe World's Best Wines
    +

    Free Wine Kit

    + +

    All of this can be
    + Yours for only
    + $12.99*

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    2 Bottles of Premium Wine

    +

    2 Elegant Wine Glasses

    +

    Capitano Waiter's Corkscrew

    +

    Marble Bottle Stopper

    +

    Delicious Gourmet Wine Crackers

    +

    Member Discounts on Additional Wine + Selections

    +

    Our Cellar Profile newsletter

    +

    Total Retail Value of this Special Offer - + $42.95

    +


    + +

    +

    A + special offer for the discriminating
    + wine drinker.
    +

    +
    +

    Indulge your love of adventure . discovery . and fine wine from the comfort of your home with our convenient program. Receive two expertly selected premium wines for + the price of one - only $12.99* - 50% off the regular price - delivered to your door with our Wine Starter Kit as a FREE Gift. Starter Kit includes, 2 Elegant Wine Glasses, a Capitano Waiter's Corkscrew, Gourmet Wine Crackers and MORE!

    +

    You'll have your choice of two reds, two whites or one of each. One month you may have the pleasure of experiencing a wonderfully full-bodied Cabernet Sauvignon from California and a delicious Chardonnay from Australia. Another month, you may get an exquisite Chianti from Italy and a fabulous Sauvignon Blanc from France. You'll savor a broad range of some of the world's most fascinating wine - right in your own home.

    +

    Your satisfaction is 100% guaranteed. If you are not completely satisfied with the Classic Selections program, you can cancel at any time. + There is no minimum to buy and no obligation for further purchases or deliveries. + So, uncork your own wine adventure and explore the world's finest vineyards with Classic Selections! +

    +
    +


    +
    *Plus shipping and tax from $7.00 - $9.00 depending on destination state.
    +
    + We accept orders from adults at least 21 or older only. All shipments are delivered by UPS or private courier and the signature of an adult is required at the time of delivery. Offer cannot be combined with any other offer and is void where prohibited. This offer is only valid in the following states: AZ, CA, CO, CT, FL, IA, ID, IL, IN, MI, MO, NC, NE, NJ, NM, NY, OH, OR, TX, VA, WA, WI. List of legal states subject to change.
    + Due to legal restrictions in some states, alcohol can not be given away for free. Therefore, the promotion is 50% off of the two bottles which equates to the same as one free bottle.

    +
    +
    +
    +

    +
    + +T +
    + +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
    + + diff --git a/Ch3/datasets/spam/spam/00449.7d33f465cb813806296901ee541841d6 b/Ch3/datasets/spam/spam/00449.7d33f465cb813806296901ee541841d6 new file mode 100644 index 000000000..d06145ca8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00449.7d33f465cb813806296901ee541841d6 @@ -0,0 +1,145 @@ +From Casino-09242002-HTML@frugaljoe.330w.com Tue Sep 24 23:33:18 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 2AC7816F03 + for ; Tue, 24 Sep 2002 23:33:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 23:33:16 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8OJe0C19083 for + ; Tue, 24 Sep 2002 20:40:01 +0100 +Received: from richard.330w.com (richard.330w.com [216.53.71.115]) by + webnote.net (8.9.3/8.9.3) with ESMTP id UAA21219 for ; + Tue, 24 Sep 2002 20:40:35 +0100 +Message-Id: <200209241940.UAA21219@webnote.net> +Received: by richard.330w.com (PowerMTA(TM) v1.5); Tue, 24 Sep 2002 + 14:50:43 -0400 (envelope-from ) +From: Casino@FrugalJoe.com +To: zzzz@spamassassin.taint.org +Subject: Get $100 Free - Beat the House at Royal Vegas! +Id-Frugaljoe: zzzz####spamassassin.taint.org +Date: Tue, 24 Sep 2002 14:50:43 -0400 +Content-Type: text/html + + + + + + + + + +
    +
    Never Pay Retail!
    + + +:::::: Royal Vegas Online Casino -- Beat the House at Royal Vegas !!! :::::: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + + + + + + + +
    + + + +
    + +You have received this email because you have subscribed + through one of our marketing partners. If you would like + to learn more about Frugaljoe.com then please visit our website + www.frugaljoe.com If this message was sent to you in error, or +if you + would like to unsubscribe please click here or +cut and paste the following link into a web browser:
    + http://www.frugaljoe.com/unsubscribe.php?eid=340329\~moc.cnietonten^^mj\~1754388\~12a1 +

    + + + + + diff --git a/Ch3/datasets/spam/spam/00450.93d3d59fcdd0f8fda9ef4678535182e8 b/Ch3/datasets/spam/spam/00450.93d3d59fcdd0f8fda9ef4678535182e8 new file mode 100644 index 000000000..8323186ef --- /dev/null +++ b/Ch3/datasets/spam/spam/00450.93d3d59fcdd0f8fda9ef4678535182e8 @@ -0,0 +1,302 @@ +From AMERICAN-MILLIONAIRE@EXCITE.COM Tue Sep 24 23:33:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 54E0116F03 + for ; Tue, 24 Sep 2002 23:33:19 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 23:33:19 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8OKjJC21431 for + ; Tue, 24 Sep 2002 21:45:19 +0100 +Received: from scooby.spatia.net ([144.189.10.72]) by webnote.net + (8.9.3/8.9.3) with ESMTP id VAA21544 for ; + Tue, 24 Sep 2002 21:45:54 +0100 +From: AMERICAN-MILLIONAIRE@EXCITE.COM +Received: from smtp0592.mail.yahoo.com ([24.232.72.41]) by + scooby.spatia.net with Microsoft SMTPSVC(5.0.2195.5329); Tue, + 24 Sep 2002 13:44:56 -0700 +Date: Tue, 24 Sep 2002 16:45:42 -0400 +X-Priority: 3 +To: jlynn_2002@yahoo.com +Cc: jlyost2@glasscity.net, jlytle@provantage.com, jlzlaz@cs.com, + zzzz@grandpahough.com, jm@spamassassin.taint.org, jm@normanrockwellvt.com, + zzzz@venturecaribbean.com, jm_6_99@yahoo.com, jm1@freeautobot.com +Subject: **** American Millionaire Reveals His Secret Source of Wealth On The Internet!!! +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Message-Id: +X-Originalarrivaltime: 24 Sep 2002 20:44:57.0679 (UTC) FILETIME=[3E8F45F0:01C2640B] +Content-Type: text/html; charset=us-ascii + + + + +

    Hello! :

    +

    + +=================================================================== +

    +

    "Dmm": Discount Mortgage Millionaire
    +Program:

    +

    +

    A Special Invitation To Wealth !!!

    +

    +

    Help Us Contact Home Owners In Your City And Pocket
    +"$1000" / Deal, Easy Cash!!!

    + +

    +

    +============================================================= +
    +

    +

    +

    To: +

    +This e-mail is addressed to all people who have tried different internet
    +programs and failed, who are tired of working hard, but getting nowhere,
    +who are unemployed, and all those who have jobs but need extra income,
    +and all those who are sick and tired of being sick and tired.

    + +

    +

    How It Works:

    + +

    +

    We buy Real Estate Notes and Trust Deeds. We also represent investors
    +who invest in them. +

    +When you apply, you can help us contact Home Owners in your city and
    +on the internet. +

    +All you do is call or e-mail them or send a simple but Powerful letter and form
    to them to complete and return back to us. +

    +If they have Real Estate Notes or Trust Deeds, we'll either buy them or refer
    +them to our associates. +

    +If the deal goes through, we pay you 10% of whatever net amount we made.

    + +

    +

    For example, if we made $10,000, you'll get 10% = $1000.
    +Therefore if we do 10 deals in a month, you will take in an
    +easy 10 x $1000 = $10,000!!!

    + +

    +

    Rake in Big Cash without any hard work, or large investment
    or special training!

    + +

    +

    We'll give you all the resources needed to make the contacts, including
    +the sales letter, the e-mail letter, the forms, and the phone script!
    + + +

    The Real Estate Market

    +

    +

    One of the primary human needs is Security. Shelter. Home. House. +

    +Wherever you go, there are homes, houses and buildings!
    +Therefore Real Estate Market is huge! More than $500 billion
    +in Usa alone!!! +

    +That is why opportunities to create vast wealth is always available!!!
    +

    +You may have heard that more than 56% of millionaires in Usa
    +(and probably in other countries also) created their wealth through
    +Real Estate investments! +

    +Well, that is half the truth!

    + +

    +

    You Must know Millionaires "Jealously Guarded
    +Real Estate Secrets, Before You May Succeed"!!!

    +

    +

    The way to create vast Wealth in Real Estate is Not by buying Real
    +Estate and holding it until it appreciates in value, then you sell it. +

    +That is the hard way. You'll be bogged down by cash flow crunch
    +and all the hassles with tenants and maintenance. +

    +That is what the majority of Real Estate investors do.
    +It is Not fun, and it can frustrate and wear you thin!

    +

    +

    Discover The "Millionaires' Secret" Of
    +Creating Vast Wealth Through
    +Real Estate Investments…

    +

    +

    The Smart, Fast, easy and highly profitable way to make
    +Millions in Real Estate is to buy and sell Discounted
    +Mortgages, Real Estate Notes and Trust Deeds
    +from homeowners!

    +

    +

    That is why we need you! By joining us, you'll help us
    +contact homeowners in your city, and we and our associates will invest
    +in them, and do all the work, while you get paid about 10% of the deal (or
    +$1000/deal), without doing any hard work or large investment!
    +

    +

    How To Apply:

    +

    +

    This package: "Discount Mortgage Millionaire"
    + (Dmm) program is almost "Free" !!!

    +

    +

    However, we must ask you to donate a token fee of $10.
    (This is voluntary)

    +

    +

    This is our way to discourage those who are not serious.
    Our time is worth a lot of money. +

    +We only want to hear from those who are serious! +

    +If you're interested, please follow the simple steps below to apply. +

    +Help us make contacts, and we'll spend our money to do the deal, and also
    +compensate you handsomely (10% of whatever amount we make). It is a
    +win-win relationship !

    + +

    +

    Application Steps:

    +

    + +

    (1) Write your Name, Address, E-mail address, Phone and fax
    +(if any) on a piece of paper.

    +

    +

    Then Write the words:
    +"$10 Donation" for Dmm program.

    +

    +

    (2) Enclose $10 Usa Dollars in cash or money order (Usa only)
    +and send it by Priority mail to the Name and Address below :
    +(Customers from outside Usa, please buy and send
    +Usa Dollars cash only)

    +

    +

    Mr. Benney, Ceo
    +(Dmm Package)
    +328 Flatbush Ave.,
    +Suite 221
    +Brooklyn, Ny 11238
    +Usa +

    +******* +

    +Phone: (718) 595 0529
    +(Please Mention "Dmm Program, Code B")

    +

    +

    (3) After sending the "Donation", send an e-mail and notify
    +us that you have sent it.

    +

    +

    Include your full Name, and Phone. +

    +And put these words in the subject space: +

    +"Donation Sent for Dmm program, Code B"

    +

    +

    Please Send the e-mail notice to:


    +

    polsew246@btamail.net.cn

    +

    +

    (4) What You Shall Receive:

    + +

    +

    (a) You'll receive the "Discount Mortgage Millionaire"
    +Dmm package, which gives you all the details on how this
    +cash program works, including all the resources you need
    +to make contacts for us. +

    +When you order "Dmm eBook", you will have two choices: +

    +(a) You can use our Real Estate Millionaire Cash Secret
    +(Dmm ebook) to find the deals, do them yourself and
    +keep all the money!
    +Or
    +(b) You can apply and become our Associate Mortgage
    +Agent (Ama) and participate in our Millionaire
    +"Real Estate Acquisition Plan" (Reap)! +

    +(b) You'll also receive Free details on how to obtain
    +another powerful program that we have:


    +

    "Quick Cash Secret Banking System,
    +The Royal Road To Riches", (Qcsbs-rrr)

    +

    +

    You'll discover the jealously guarded 2000 yrs old
    +millionaire cash secret little known to the general public. +

    +All you do is go to the "Secret Website" on the internet,
    +we shall reveal, open a "special bank account", then
    +click your mouse and enter a "Secret Code Number". +

    +Then click your mouse again, and you'll start making
    +money! It takes only minutes to do, and you can
    +rake in $1,500/wk from this!!! +

    +100% legal and valid in all countries of the world.
    +No hard work or special training or scam or
    +large investment!

    + +

    +

    When you order the "Dmm package", you'll get all the
    +details about this "Qcsbs-rrr" also, and we'll help you learn
    +and also start using it to create true wealth and success! +

    +Qcsbs Millionaire Cash System is the Fastest and Greatest way
    +to make money on earth!!! +

    +That is how we obtained the money we want to spend in Real
    +Estate investments! +

    +When you get Qcsbs, it will also help you to create powerful
    +cash flow to acquire Real Estate and other assets fast!!! +

    +When we get your "donation", we shall send you an e-mail
    +to download this Dmm ebook from our storage site on the
    +internet. So be sure your e-mail address is valid, and you
    +notify us by e-mail after you send the $10 donation. +

    +Please allow at least 2 weeks, after you send the donation
    +so we may receive it. When we receive it, we'll send an e-mail
    +to you to download the "Dmm eBook".
    +

    +We look forward to working with you, to help you begin to
    +acquire Real Estate and Cash flow, without any headaches
    +hassles, or large investments!!! +

    +Your time to stay at home and make money in Real Estate deals
    +has come, so answer this special invitation today!!! +

    +Thank you! +

    +Mwc Investments, International (A Div. of Mwc)

    + +

    +

    Deadline To Apply:

    +

    +

    This offer is valid for 1 week only. +

    +Please apply within 1 week of getting this e-mail.
    +If you fail, you may Not be accepted! +

    +Therefore print this e-mail now!
    +Then Read it many times to understand and agree
    +to our offer and then place an order now! +

    +You may get this e-mail only once.
    +So, hurry to avoid missing this fabulous
    +One-In-A-lifetime Real Estate, Easy, Fast Cash Opportunity! +

    +Start today! In less than a year, you may be worth
    +about $1,000,000!!! Come and join us now!!! +

    +

    +

    Unsubscribe Info:

    +

    +

    This e-mail is Not intended for Washington State residents, and any
    +other anti-internet commerce state. +

    +If you're from any of these states, please delete this e-mail and don't respond.
    +This offer is void wherever prohibited by law. +

    +Your name is not in our database, therefore you may Not get another
    + e-mail from us! +

    +Our remove address is: +removeme@easy.com +

    +=============================End==================================== +

    + + + + diff --git a/Ch3/datasets/spam/spam/00451.5af88ff99e71a8984ac293c250b37d34 b/Ch3/datasets/spam/spam/00451.5af88ff99e71a8984ac293c250b37d34 new file mode 100644 index 000000000..e4278747c --- /dev/null +++ b/Ch3/datasets/spam/spam/00451.5af88ff99e71a8984ac293c250b37d34 @@ -0,0 +1,102 @@ +From carolrabxxxmeb13mxy@aol.com Tue Sep 24 23:33:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 8A06B16F16 + for ; Tue, 24 Sep 2002 23:33:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 23:33:23 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8OLCwC22399 for + ; Tue, 24 Sep 2002 22:12:58 +0100 +Received: from mail.zeelandnet.nl (mail1.zeelandnet.nl [212.115.192.151]) + by webnote.net (8.9.3/8.9.3) with ESMTP id WAA21652 for + ; Tue, 24 Sep 2002 22:13:34 +0100 +From: carolrabxxxmeb13mxy@aol.com +Received: from 10.255.255.151 (mailscan [10.255.255.153]) by mail + (Postfix) with SMTP id 82B3E3C424; Tue, 24 Sep 2002 23:13:03 +0200 (CEST) +Received: from 210.54.213.16 (kbl-gs5723.zeelandnet.nl [62.238.86.135]) by + mail.zeelandnet.nl (Postfix) with SMTP id 8E2A13C765; Tue, 24 Sep 2002 + 23:12:39 +0200 (CEST) +Message-Id: <00004a754d74$0000723c$00006463@210.54.213.16> +To: +Subject: Make $500 - $2500/Week on Ebay 3352 +Date: Wed, 25 Sep 2002 05:13:01 -0400 +MIME-Version: 1.0 +X-Priority: 3 +X-Msmail-Priority: Normal +Reply-To: carolrabxxxmeb13mxy@aol.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + + + + + + +
    +

    Fortunes are literally being made in this gre= +at new + marketplace!

    +

    Over $9 Billion i= +n merchandise + was sold on eBay in 2001 by people just like you - right= + from + their homes!

    +

    Now you too can learn the secrets of successf= +ul selling + on eBay and make a staggering income from the co= +mfort + of your own home. If you are motivated, capable of h= +aving + an open mind, and can follow simple directions, then visit + us here. If server busy - alternate.

    +

    We are strongly against sendin= +g unsolicited + emails to those who do not wish to receive our special mailings. Y= +ou have + opted in to one or more of our affiliate sites requesting to be no= +tified + of any special offers we may run from time to time. We also have a= +ttained + the services of an independent 3rd party to overlook list manageme= +nt and + removal services. This is NOT unsolicited email. If you do not wis= +h to + receive further mailings, please GO + HERE to be removed from the list. Please accept our apologies = +if you + have been sent this email in error.

    +
    +

     

    +

     

    +

     

    +

     

    + + + +

    + + + + + + + + +

    charset=3Diso-8859-1">

    + + + + + + diff --git a/Ch3/datasets/spam/spam/00452.ed43fc952c31c82aa29646edfbecb03f b/Ch3/datasets/spam/spam/00452.ed43fc952c31c82aa29646edfbecb03f new file mode 100644 index 000000000..1f4a5bfea --- /dev/null +++ b/Ch3/datasets/spam/spam/00452.ed43fc952c31c82aa29646edfbecb03f @@ -0,0 +1,75 @@ +From social-admin@linux.ie Tue Sep 24 23:33:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 826DA16F03 + for ; Tue, 24 Sep 2002 23:33:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 23:33:25 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8OLoXC23527 for + ; Tue, 24 Sep 2002 22:50:33 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 86BE13420E; Tue, 24 Sep 2002 22:51:06 +0100 (IST) +Delivered-To: linux.ie-social@localhost +Received: from hotmail.com (ATuileries-108-2-1-172.abo.wanadoo.fr + [217.128.152.172]) by lugh.tuatha.org (Postfix) with SMTP id 547813420A + for ; Tue, 24 Sep 2002 22:50:24 +0100 (IST) +Reply-To: +Message-Id: <023d23e34c8e$3777b3a7$5cd78ac0@jvbmmi> +From: +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2616 +Importance: Normal +Subject: [ILUG-Social] re: how to register one of the new domain extensions +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Beenthere: social@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group social events +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 25 Sep 2002 04:23:33 -0700 +Date: Wed, 25 Sep 2002 04:23:33 -0700 +Content-Transfer-Encoding: 8bit + +IMPORTANT DOMAIN INFORMATION: + + +The new domain names are finally available to the general public at discount prices. Now you can register one of the exciting new .BIZ or .INFO domain names, as well as the original .COM and .NET names for just $14.95. These brand new domain extensions were recently approved by ICANN and have the same rights as the original .COM and .NET domain names. The biggest benefit is of-course that the .BIZ and .INFO domain names are currently more available. i.e. it will be much easier to register an attractive and easy-to-remember domain name for the same price. Visit: http://www.domainsforeveryone.com/ today for more info. + +Register your domain name today for just $14.95 at: http://www.domainsforeveryone.com/ Registration fees include full access to an easy-to-use control panel to manage your domain name in the future. + +Sincerely, + +Domain Administrator +Domains For Everyone + + +To remove your email address from further promotional mailings from this company, click here: +http://www.centralremovalservice.com/cgi-bin/domain-remove.cgi +(b1)0474aQIz9-237xTMz9546aZDm1-521Lllj5910RDZl1-150RKYm2509Gxri8-258Tytl2824AfwK4-512Qxl78 + + + + + + + +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00453.456abc0bc83034492888f63725796d5b b/Ch3/datasets/spam/spam/00453.456abc0bc83034492888f63725796d5b new file mode 100644 index 000000000..d3d39a7f5 --- /dev/null +++ b/Ch3/datasets/spam/spam/00453.456abc0bc83034492888f63725796d5b @@ -0,0 +1,51 @@ +From Subscriber_Services78044@juno.com Tue Sep 24 23:44:52 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 54EFB16F03 + for ; Tue, 24 Sep 2002 23:44:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 23:44:51 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8OMbUC25361 for + ; Tue, 24 Sep 2002 23:37:31 +0100 +Received: from 210.126.63.68 ([211.252.174.10]) by webnote.net + (8.9.3/8.9.3) with SMTP id XAA21905 for ; + Tue, 24 Sep 2002 23:38:03 +0100 +Message-Id: <200209242238.XAA21905@webnote.net> +Received: from smtp-server6.tampabay.rr.com ([12.232.159.86]) by + mailout2-eri1.midsouth.rr.com with asmtp; Sep, 24 2002 5:15:37 PM +0300 +Received: from 117.83.248.68 ([117.83.248.68]) by rly-xl04.mx.aol.com with + NNFMP; Sep, 24 2002 4:39:25 PM +0600 +Received: from [135.12.72.250] by ssymail.ssy.co.kr with SMTP; + Sep, 24 2002 3:13:40 PM -0200 +Received: from 213.54.67.154 ([213.54.67.154]) by sparc.isl.net with esmtp; + Sep, 24 2002 2:25:33 PM +0700 +From: "WALL STREET BULLETIN..47717" +To: #recipient#@webnote.net +Cc: +Subject: FREE TRIAL - Last Stock pick UP 309%................................................. cqhcp +Sender: "WALL STREET BULLETIN..47717" +MIME-Version: 1.0 +Date: Tue, 24 Sep 2002 17:39:44 -0500 +X-Mailer: Microsoft Outlook Express 5.50.4133.2400 +X-Priority: 1 +Content-Type: text/html; charset="iso-8859-1" + + + + + +

    Special Offer - FREE TRIAL

    +

    CLICK HERE

    +

    +

     

    +

     

    +

    I'm not interested click here

    + + + +sajfdibpjnjppmhbymschktbn + + diff --git a/Ch3/datasets/spam/spam/00454.1bb460b3ade9801644e4eb60e18d1f8d b/Ch3/datasets/spam/spam/00454.1bb460b3ade9801644e4eb60e18d1f8d new file mode 100644 index 000000000..eec52a183 --- /dev/null +++ b/Ch3/datasets/spam/spam/00454.1bb460b3ade9801644e4eb60e18d1f8d @@ -0,0 +1,242 @@ +From aig@insiq.us Tue Sep 24 23:55:56 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id BB0CF16F03 + for ; Tue, 24 Sep 2002 23:55:54 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 24 Sep 2002 23:55:54 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g8OMsMC26073 for ; Tue, 24 Sep 2002 23:54:23 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Tue, 24 Sep 2002 18:55:48 -0400 +Subject: Financial Power You Can Depend On +To: +Date: Tue, 24 Sep 2002 18:55:48 -0400 +From: "IQ - AIG" +Message-Id: <19fbcd01c2641d$862becd0$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJkCWV2dc7W7ROJQ9uErUFVajNRCQ== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 24 Sep 2002 22:55:48.0968 (UTC) FILETIME=[864AE680:01C2641D] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_181FC9_01C263E7.DE66F600" + +This is a multi-part message in MIME format. + +------=_NextPart_000_181FC9_01C263E7.DE66F600 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: quoted-printable + +=20 + Financial Power You Can Depend On +=20 + Very Competitive Rates=0A= +Guaranteed 6 Years + + Let AIG's Annuity Portfolio Work for You!=09 +A.M. Best Company "A+" Superior =20 +Standard & Poor's Corp. "AA+" Very Strong =20 +Fitch "AA+" Very Strong =20 +Moody's Investors Service "Aa1" Excellent =20 +Call today for more information! + 888-237-4210 +- or - + +Please fill out the form below for more information =20 +Name: =09 +E-mail: =09 +Phone: =09 +City: State: =09 + =09 +=20 + + AIG Annuity Insurance Company +We don't want anyone to receive our mailings who does not wish to +receive them. This is a professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: insuranceiq.com/optout +=20 + +Legal Notice =20 + +------=_NextPart_000_181FC9_01C263E7.DE66F600 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Financial Power You Can Depend On + + + +=20 + + =20 + + + =20 + + +
    +
    + 3D'Financial
    +
    +
    + + =20 + + + + + +
    + + =20 + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + +
    3D"Let
    A.M. Best = +Company"A+" = +Superior
    Standard & Poor's = +Corp."AA+" Very = +Strong
    Fitch"AA+" Very = +Strong
    Moody's Investors = +Service"Aa1" = +Excellent
    +
    + Call today for more = +information!
    +
    + - or -

    + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + + =20 + + + + =20 + + + + =20 + + + + + + =20 + + + +
    Please fill out the form below for more = +information
    Name:=20 + +
    E-mail:=20 + +
    Phone:=20 + +
    City:=20 + + State:=20 + +
     =20 + + + +
    +
    +
    + +
    +
    +

    We don't = +want anyone to receive our mailings who does not=20 + wish to receive them. This is a professional communication=20 + sent to insurance professionals. To be removed from this mailing=20 + list, DO NOT REPLY to this message. Instead, go here: =20 + insuranceiq.com/optout

    +
    +
    + Legal Notice =20 +
    +
    + + + + +------=_NextPart_000_181FC9_01C263E7.DE66F600-- + + diff --git a/Ch3/datasets/spam/spam/00455.c48d026b0aae9a1a14e9ab1193a2a5f3 b/Ch3/datasets/spam/spam/00455.c48d026b0aae9a1a14e9ab1193a2a5f3 new file mode 100644 index 000000000..62e770e47 --- /dev/null +++ b/Ch3/datasets/spam/spam/00455.c48d026b0aae9a1a14e9ab1193a2a5f3 @@ -0,0 +1,146 @@ +From antheaygd@chinchilla.freeserve.co.uk Wed Sep 25 00:17:09 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id B141E16F03 + for ; Wed, 25 Sep 2002 00:17:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 25 Sep 2002 00:17:07 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8ONBYC27124 for + ; Wed, 25 Sep 2002 00:11:34 +0100 +Received: from mail1.codetel.net.do (m30exfe1.codetel.net.do + [196.3.81.56]) by webnote.net (8.9.3/8.9.3) with ESMTP id AAA21947; + Wed, 25 Sep 2002 00:12:07 +0100 +Received: from mail-in.pol.net.uk ([64.32.101.241]) by + mail1.codetel.net.do with Microsoft SMTPSVC(5.0.2195.5329); Tue, + 24 Sep 2002 19:11:08 -0400 +From: "Ingrid Marksberry" +To: "MARKET INTERESTS" <7869@xo.com> +Subject: FW: FOCUS ON VALUE +MIME-Version: 1.0 +Message-Id: +X-Originalarrivaltime: 24 Sep 2002 23:11:10.0850 (UTC) FILETIME=[ABC6EE20:01C2641F] +Date: 24 Sep 2002 19:11:10 -0400 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + +
    + +OTC
    = + + + Newsletter
    +Discover Tomorrow's Winners 
    + +For Immediate Release
    +

    +Cal-Bay (Stock Symbol: CBYI) +
    Watch for analyst =22Strong Buy Recommendations=22 and several adviso= +ry newsletters picking CBYI. CBYI has filed to be traded on the OTCBB, = +share prices historically INCREASE when companies get listed on this lar= +ger trading exchange. CBYI is trading around 25 cents and should skyrock= +et to =242.66 - =243.25 a share in the near future.
    +Put CBYI on your watch list, acquire a position TODAY.

    +

    +REASONS TO INVEST IN CBYI +

  • = + +A profitable company and is on track to beat ALL earnings estimates=21 +
  • = + +One of the FASTEST growing distributors in environmental & safety e= +quipment instruments. +
  • +Excellent management team, several EXCLUSIVE contracts. IMPRESSIVE cli= +ent list including the U.S. Air Force, Anheuser-Busch, Chevron Refining = +and Mitsubishi Heavy Industries, GE-Energy & Environmental Research.= + +

    +RAPIDLY GROWING INDUSTRY +
    Industry revenues exceed =24900 million, estimates indicate that the= +re could be as much as =2425 billion from =22smell technology=22 by the end= + of 2003.

    +

    +=21=21=21=21=21CONGRATULATIONS=21=21=21=21=21
    Our last recommendation t= +o buy ORBT at =241.29 rallied and is holding steady at =243.50=21 Congratul= +ations to all our subscribers that took advantage of this recommendation= +.









    +

    +ALL removes HONORED. Please allow 7 days to be removed and send ALL add= +resses to: + +GoneForGood=40btamail.ne= +t.cn +

  •  
    + +Certain statements contained in this news release may be forward-lookin= +g statements within the meaning of The Private Securities Litigation Ref= +orm Act of 1995. These statements may be identified by such terms as =22e= +xpect=22, =22believe=22, =22may=22, =22will=22, and =22intend=22 or similar terms= +. We are NOT a registered investment advisor or a broker dealer. This is= + NOT an offer to buy or sell securities. No recommendation that the secu= +rities of the companies profiled should be purchased, sold or held by in= +dividuals or entities that learn of the profiled companies. We were paid= + =2427,000 in cash by a third party to publish this report. Investing in = +companies profiled is high-risk and use of this information is for readi= +ng purposes only. If anyone decides to act as an investor, then it will = +be that investor's sole risk. Investors are advised NOT to invest withou= +t the proper advisement from an attorney or a registered financial broke= +r. Do not rely solely on the information presented, do additional indepe= +ndent research to form your own opinion and decision regarding investing= + in the profiled companies. Be advised that the purchase of such high-ri= +sk securities may result in the loss of your entire investment. Not int= +ended for recipients or residents of CA,CO,CT,DE,ID, IL,IA,LA,MO,NV,NC,O= +K,OH,PA,RI,TN,VA,WA,WV,WI. Void where prohibited. The owners of this pu= +blication may already own free trading shares in CBYI and may immediatel= +y sell all or a portion of these shares into the open market at or about= + the time this report is published. Factual statements are made as of t= +he date stated and are subject to change without notice. +
    Copyright c 2001

    +
    + +OTC
    +
    + +****** + + diff --git a/Ch3/datasets/spam/spam/00456.b700dd37219f192d25cfc87f5c97a86d b/Ch3/datasets/spam/spam/00456.b700dd37219f192d25cfc87f5c97a86d new file mode 100644 index 000000000..e42725059 --- /dev/null +++ b/Ch3/datasets/spam/spam/00456.b700dd37219f192d25cfc87f5c97a86d @@ -0,0 +1,66 @@ +From guage_420@aol.com Wed Sep 25 10:29:07 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 3E6F416F03 + for ; Wed, 25 Sep 2002 10:29:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 25 Sep 2002 10:29:05 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8ONseC28579 for + ; Wed, 25 Sep 2002 00:54:45 +0100 +Received: from rack3.easydns.com (rack3.easydns.com [205.210.42.50]) by + webnote.net (8.9.3/8.9.3) with ESMTP id AAA22025 for ; + Wed, 25 Sep 2002 00:55:15 +0100 +Received: from mailin-02.mx.aol.com (93bt-218.eridan.cz [62.80.93.218]) by + rack3.easydns.com (Postfix) with SMTP id 84D0B4A828 for + ; Tue, 24 Sep 2002 19:55:11 -0400 (EDT) +From: Guage +To: +Subject: I was so scared... my very first DP +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Message-Id: <20020924235511.84D0B4A828@rack3.easydns.com> +Date: Tue, 24 Sep 2002 19:55:11 -0400 (EDT) +Content-Type: text/html; charset="US-ASCII" + + + + Teen + + +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    Legal Teen XXX Hardcore
    4 FREE
    Boy was Gauge surprised when Joey's friend conveniently showed up as things were getting hot. She always dreamed of sucking two cocks while she played with herself during study hall, but fantasy is different than reality. I wonder if she ever gave a thought to where those dicks would end up after they were done with her mouth?

    Find out for 100% FREE at Legal Teen Girls!!! We just added Gauge's three way, you have to see it!!! We have tons of other sweet young teens getting it in ways they never imagined possible, for FREE!!!!

    CLICK HERE FOR YOUR 100% FREE LIFETIME MEMBERSHIP!
    Disclaimer:
    We are strongly against sending unsolicited emails to those who do not wish to receive our special mailings. You have opted in to one or more of our affiliate sites requesting to be notified of any special offers we may run from time to time. We also have attained the services of an independent 3rd party to overlook list management and removal services. This is NOT unsolicited email. If you do not wish to receive further mailings, please click here to be removed from the list. Please accept our apologies if you have been sent this email in error. We honor all removal requests.

    +
    +
    + + diff --git a/Ch3/datasets/spam/spam/00457.f8db516c753eff2c82cfb89b33bd2620 b/Ch3/datasets/spam/spam/00457.f8db516c753eff2c82cfb89b33bd2620 new file mode 100644 index 000000000..0d2ea37ef --- /dev/null +++ b/Ch3/datasets/spam/spam/00457.f8db516c753eff2c82cfb89b33bd2620 @@ -0,0 +1,53 @@ +From svzsx@wanadoo.fr Wed Sep 25 10:29:10 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 1110216F03 + for ; Wed, 25 Sep 2002 10:29:10 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 25 Sep 2002 10:29:10 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8P1ZTC03446 for + ; Wed, 25 Sep 2002 02:35:29 +0100 +Received: from deathstar.katomic.com ([208.252.232.12]) by webnote.net + (8.9.3/8.9.3) with ESMTP id CAA22126; Wed, 25 Sep 2002 02:36:03 +0100 +Received: from mailhost.tst.es (bdsl.66.13.242.131.gte.net + [66.13.242.131]) by deathstar.katomic.com (Postfix) with ESMTP id + 2A30D2F36E2; Tue, 24 Sep 2002 19:36:55 -0600 (MDT) +Message-Id: <00007e6e5327$00006d95$00001240@mail.dknet.info> +To: +From: "Mandy Barton" +Subject: are you in the mood XGHTMTGGC +Date: Tue, 24 Sep 2002 18:59:51 -1600 +MIME-Version: 1.0 +X-Priority: 1 +X-Msmail-Priority: High +X-Mailer: Juno 4.0.5 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + + + +VIAGRA, XENICAL, VIOXX, ZYBAN, PROPECIA ®
    +We only offer the real VIAGRA, XENICAL, VIOXX, ZYBAN, PROPECIA ®
    +No Herbal Supplements at a much reduced rate found anyplace on
    +the Internet.all orders shipped discreetly and swiftly to your door
    +Enter here for = +pricing and info +
    +
    +
    +
    +
    +
    +Enter this link to abandon future offer's? + + + + + + diff --git a/Ch3/datasets/spam/spam/00458.62211764fde0dd7128ea4146268b40dd b/Ch3/datasets/spam/spam/00458.62211764fde0dd7128ea4146268b40dd new file mode 100644 index 000000000..c934c56cd --- /dev/null +++ b/Ch3/datasets/spam/spam/00458.62211764fde0dd7128ea4146268b40dd @@ -0,0 +1,57 @@ +From haggen@freemail.nl Wed Sep 25 10:29:12 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id EA41316F03 + for ; Wed, 25 Sep 2002 10:29:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 25 Sep 2002 10:29:11 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8P28HC04819 for + ; Wed, 25 Sep 2002 03:08:17 +0100 +Received: from freemail.nl (200-161-16-177.dsl.telesp.net.br + [200.161.16.177]) by webnote.net (8.9.3/8.9.3) with SMTP id DAA22151; + Wed, 25 Sep 2002 03:08:34 +0100 +Date: Wed, 25 Sep 2002 03:08:34 +0100 +From: haggen@freemail.nl +Reply-To: +Message-Id: <004c10e04bea$8426d3c4$8ba66bd7@huvnsn> +To: glen12@yahoo.com +Subject: FORTUNE 500 WORK AT HOME REPS NEEDED! +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook, Build 10.0.2627 +Importance: Normal +Content-Transfer-Encoding: 8bit + +Immediate Help Needed. We are a fortune 500 company that is +growing at a tremendous rate of over 1000% per year. We simply cannot +keep up. We are looking for motivated individuals who are looking to +earn a substantial income working from home. + +This is a real opportunity to make an excellent income from home. No +experience is required. We will provide you with any training you may need. + +We are looking for energetic and self motivated people. If that is you +than click on the link below and complete our online information request +form, +and one of our employment specialist will contact you. + +http://ter.netblah.com:8080 + +So if you are looking to be employed at home, with a career that will +provide you vast opportunities and a substantial income, please fill +out our online information request form here now: + +http://www.zhoster.com:8080/homeopp/ + + +To be removed from our list simply click on the link below now: + +http://www.zhoster.com:26000/homeopp/remove.html +6115CNUY4-341mBpO6887KGZk1-483ZEiE1934cEmx1-116CJYF2258Aegj1-5l58 + + diff --git a/Ch3/datasets/spam/spam/00459.e71f7a769d6b09c6d75bfbe8711dbbbe b/Ch3/datasets/spam/spam/00459.e71f7a769d6b09c6d75bfbe8711dbbbe new file mode 100644 index 000000000..8cb587d0f --- /dev/null +++ b/Ch3/datasets/spam/spam/00459.e71f7a769d6b09c6d75bfbe8711dbbbe @@ -0,0 +1,55 @@ +From kelli70@swi.hu Wed Sep 25 10:29:14 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E7CD916F03 + for ; Wed, 25 Sep 2002 10:29:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 25 Sep 2002 10:29:13 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8P4DtC10222 for + ; Wed, 25 Sep 2002 05:13:56 +0100 +Received: from rack3.easydns.com (rack3.easydns.com [205.210.42.50]) by + webnote.net (8.9.3/8.9.3) with ESMTP id FAA22666; Wed, 25 Sep 2002 + 05:14:29 +0100 +From: kelli70@swi.hu +Received: from swi.hu (adsl8tky2-p41.hi-ho.ne.jp [218.42.171.42]) by + rack3.easydns.com (Postfix) with SMTP id D7BE04A7C5; Wed, 25 Sep 2002 + 00:14:22 -0400 (EDT) +Reply-To: +Message-Id: <003a50e80cbd$5537c5b5$5ee52ad7@fdpcqw> +To: ricki36@netposta.net +Subject: Holidays are coming? +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: QUALCOMM Windows Eudora Version 5.1 +Importance: Normal +Date: Wed, 25 Sep 2002 00:14:22 -0400 (EDT) +Content-Transfer-Encoding: 8bit + +Help wanted. We are a 14 year old fortune 500 company, that is +growing at a tremendous rate. We are looking for individuals who +want to work from home. + +This is an opportunity to make an excellent income. No experience +is required. We will train you. + +So if you are looking to be employed from home with a career that has +vast opportunities, then go: + +http://ter.netblah.com:8080 + +We are looking for energetic and self motivated people. If that is you +than click on the link and fill out the form, and one of our +employment specialist will contact you. + +To be removed from our link simple go to: + +http://ter.netblah.com:8080/remove.html + +2737cCYw6-489ODYT6241mnnu4-719yRix1751YUrY1-602Nnab8882DYTA1-376gVJi7941l68 + + diff --git a/Ch3/datasets/spam/spam/00460.8996dc28ab56dd7b6f35b956deceaf22 b/Ch3/datasets/spam/spam/00460.8996dc28ab56dd7b6f35b956deceaf22 new file mode 100644 index 000000000..cbe51e439 --- /dev/null +++ b/Ch3/datasets/spam/spam/00460.8996dc28ab56dd7b6f35b956deceaf22 @@ -0,0 +1,142 @@ +From ilug-admin@linux.ie Wed Sep 25 10:29:22 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0C21316F03 + for ; Wed, 25 Sep 2002 10:29:16 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 25 Sep 2002 10:29:16 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8P5knC14087 for + ; Wed, 25 Sep 2002 06:46:49 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id DC30D34218; Wed, 25 Sep 2002 06:47:22 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from bigfoot.com (unknown [211.114.191.4]) by lugh.tuatha.org + (Postfix) with SMTP id E140434217 for ; Wed, 25 Sep 2002 + 06:46:37 +0100 (IST) +Received: from 131.202.150.211 ([131.202.150.211]) by + mta85.snfc21.pibi.net with NNFMP; 24 Sep 2002 18:47:37 +0700 +Received: from [70.215.169.121] by rly-yk04.aolmd.com with local; + 25 Sep 2002 01:43:09 +0400 +Reply-To: +Message-Id: <016d67e76d4c$5225e4b5$7ab08de4@jeramx> +From: +To: +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal +Subject: [ILUG] Create a PAYCHECK with your COMPUTER and Enjoy Cheap ISP & shopping Discount. +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Wed, 25 Sep 2002 09:45:21 -0400 +Date: Wed, 25 Sep 2002 09:45:21 -0400 +Content-Transfer-Encoding: 8bit + +Hi - + +( http://club.4tfox.com ) + +You get emails every day, offering to show you how to make money. +Most of these emails are from people who are NOT making any money. +And they expect you to listen to them? + +Enough. + +If you want to make money with your computer, then you should +hook up with a group that is actually DOING it. We are making +a large, continuing income every month. What's more - we will +show YOU how to do the same thing. + +This business is done completely by internet and email, and you +can even join for free to check it out first. If you can send +an email, you can do this. No special "skills" are required. + +How much are we making? Anywhere from $2000 to $9000 per month. +We are real people, and most of us work at this business part-time. +But keep in mind, we do WORK at it - I am not going to +insult your intelligence by saying you can sign up, do no work, +and rake in the cash. That kind of job does not exist. But if +you are willing to put in 10-12 hours per week, this might be +just the thing you are looking for. + +This is not income that is determined by luck, or work that is +done FOR you - it is all based on your effort. But, as I said, +there are no special skills required. And this income is RESIDUAL - +meaning that it continues each month (and it tends to increase +each month also). + +Interested? I invite you to find out more. You can get in as a +free member, at no cost, and no obligation to continue if you +decide it is not for you. We are just looking for people who still +have that "burning desire" to find an opportunity that will reward +them incredibly well, if they work at it. + +To grab a FREE ID# and have more information, simply go to the + web address http://club.4tfox.com and send me an email with following + information + +"Send me a free membership!" + +Be sure to include your: +1. First name +2. Last name +3. Email address (if different from above) + +We will confirm your position and send you a special report +as soon as possible, and also Your free Member Number. + +If you are not interested in tring to Earn Money, :) +you are interested in the huge discount from the 140 Online Shops, +Very Cheap ISP package and many many more, + +You can also go to the web address: +http://club.4tfox.com/#id-GreatService + +That's all there's to it. + +We'll then send you info, and you can make up your own mind. + +Looking forward to hearing from you! + +Sincerely, + +Hugh Zou + +P.S. After having several negative experiences with network +marketing companies I had pretty much given up on them. +This is different - there is value, integrity, and a +REAL opportunity to have your own home-based business... +and finally make real money on the internet. + +Don't pass this up..you can sign up and test-drive the +program for FREE. All you need to do is get your free +membership. + +Unsubscribing: Send a blank email to: removemefromlist@bigfoot.com with +"Remove" in the subject line. By submitting a request for a FREE +DHS Club Membership, I agree to accept email from the DHS Club for +both their consumer and business opportunities. + +6341syJY3-651BumD4705MRUD6-842PIIO5741fevP5-325qxvW7258Ol53 +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00461.1a27d007492d1c665d07db820b7dc3b8 b/Ch3/datasets/spam/spam/00461.1a27d007492d1c665d07db820b7dc3b8 new file mode 100644 index 000000000..584340a07 --- /dev/null +++ b/Ch3/datasets/spam/spam/00461.1a27d007492d1c665d07db820b7dc3b8 @@ -0,0 +1,139 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Wed Sep 25 10:29:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E561216F03 + for ; Wed, 25 Sep 2002 10:29:23 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 25 Sep 2002 10:29:23 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8P68bC14856 for + ; Wed, 25 Sep 2002 07:08:37 +0100 +Received: from TIPSMTP1.ADMANMAIL.COM (tipsmtp1.theadmanager.com + [66.111.219.130] (may be forged)) by webnote.net (8.9.3/8.9.3) with ESMTP + id HAA23180 for ; Wed, 25 Sep 2002 07:09:13 +0100 +Message-Id: <200209250609.HAA23180@webnote.net> +Received: from TIPUTIL2 (tiputil2.corp.tiprelease.com) by + TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id + <140.0000125D@TIPSMTP1.ADMANMAIL.COM>; Wed, 25 Sep 2002 1:06:37 -0500 +Date: Wed, 25 Sep 2002 01:00:04 -0500 +From: Benefits Department +To: JM@NETNOTEINC.COM +Subject: Tell Me Where to Send Your Health Card +X-Info: 134085 +X-Info2: SGO +MIME-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + + +Tell Me Where to Send Your Health Card + + + + +You requested to receive this mailing, by registering at Send Great Offers. + + + + + + + +
    + + + + + + + + + + + + +
    +

    + I'm your Healthy AdvantageSM + PERSONAL ADVOCATE. I'm
    + available 24 hours a day, 7 days a week to help you with insurance
    + claims, finding a specialist, helping you cut through red tape. + + + + +
    +
    +
    + + + + FREE for one full month
    +
      +
    • 30% off doctor visits and medical care
    • +
    • 50% off dental care
    • +
    • 50% off prescription drugs
    • +
    • No commitments. No hassles.
    • +
    • AND MUCH MORE!
      + Best of all, you cannot be turned down.
    • +
    + +
    + + + + + + + + + +
    +

    SPECIAL + BONUS OFFER: Get a FREE + Samsonite Tote (with accompanying Cosmetic Case) and 10-Piece + Manicure Set. Yours to keep FREE with your + + FREE Trial Membership + in Healthy Advantage.

    +

    +
    +
    + +
    +
    +
    + +
    +
    + +
    + +
    +
    +

    NO SPAM POLICY +
    Your privacy is important to us. You received this message because you have agreed to + receive offers from Send Great Offers or one of our + carefully selected marketing partners.
    We abide by a no spam policy. + If you believe that you are receiving this message in error or would no + longer like to receive email from Send Great Offers, + please click on the link below.

    +
    +T +
    + +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
    + + diff --git a/Ch3/datasets/spam/spam/00462.868771c8074e480f540a1d2e6a5ac7cb b/Ch3/datasets/spam/spam/00462.868771c8074e480f540a1d2e6a5ac7cb new file mode 100644 index 000000000..c30644798 --- /dev/null +++ b/Ch3/datasets/spam/spam/00462.868771c8074e480f540a1d2e6a5ac7cb @@ -0,0 +1,128 @@ +From nkup@asia.com Wed Sep 25 10:29:29 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 4939D16F03 + for ; Wed, 25 Sep 2002 10:29:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 25 Sep 2002 10:29:27 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8P7lMC17659 for + ; Wed, 25 Sep 2002 08:47:22 +0100 +Received: from smtp.easydns.com (smtp.easydns.com [205.210.42.30]) by + webnote.net (8.9.3/8.9.3) with ESMTP id IAA23624 for ; + Wed, 25 Sep 2002 08:47:57 +0100 +Received: from 200.72.19.107 (unknown [200.189.72.186]) by + smtp.easydns.com (Postfix) with SMTP id C2E172CFA4 for ; + Wed, 25 Sep 2002 03:47:48 -0400 (EDT) +Received: from 184.244.108.80 ([184.244.108.80]) by rly-xr02.mx.aol.com + with SMTP; Sep, 25 2002 12:30:14 AM -0100 +Received: from 34.57.158.148 ([34.57.158.148]) by rly-xr02.mx.aol.com with + local; Sep, 24 2002 11:41:03 PM -0800 +Received: from unknown (HELO anther.webhostingtalk.com) (205.220.75.34) by + asy100.as122.sol.superonline.com with smtp; Sep, 24 2002 10:25:15 PM +1100 +From: AdultClub +To: zzzz@spamassassin.taint.org +Cc: +Subject: Account zzzz@spamassassin.taint.org +Sender: AdultClub +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +Date: Wed, 25 Sep 2002 00:48:28 -0700 +X-Mailer: The Bat! (v1.52f) Business +Message-Id: <20020925074748.C2E172CFA4@smtp.easydns.com> + +New Account For: zzzz@spamassassin.taint.org +################################################## +# # +# Adult Club # +# Offers FREE Membership # +# # +# 3 of the Best Adult Sites # +# on the Internet for Absolutely FREE # +# # +################################################## + +> > > > YOU HAVE INSTANT ACCESS TO ALL 3 SITES NOW +> > > > User Name: zzzz@spamassassin.taint.org +> > > > Password: 1534 + +- - - - - - - - - - - - - - - - - - - - +NEWS 09/24/02 +With just over 4.8 Million Members that signed up for FREE, Last month there were 921,947 New +Members. Are you one of them yet??? +- - - - - - - - - - - - - - - - - - - - + +Our Membership FAQ + +Q. Why are you offering free access to 3 adult membership sites for free? +A. I have advertisers that pay me for ad space so you don't have to pay for membership. + +Q. Is it true my membership is for life? +A. Absolutely you'll never have to pay a cent the advertisers do. + +Q. Can I give my account to my friends and family? +A. Yes, as long they are over the age of 18. + +Q. Do I have to sign up for all 3 membership sites? +A. No just one to get access to all of them. + +Q. How do I get started? +A. Click on one of the following links below to become a member. + +> > > > Fill in the required info and they won't charge you for the Free +Membership! +> > > > If you don't believe us, just read their terms and conditions. + +- - - - - - - - - - - - - - - - - - - - + +# 3. > Lucky Amateur Wives +http://www.bozombo.com/luckyamateurwives/index.php?affid=1534 +You won't believe what we take these Wives into doing...FREE VIP Membership!! + +# 2. > New! just added today: Cum Drinkers +http://www.bozombo.com/cumdrinkers/index.php?affid=1534 +950,00 Pics, 90,000 Movies, Live Sex Shows... FREE Lifetime Membership!! + +# 1. > Filthy Teen Sluts +http://www.bozombo.com/filthyteensluts/index.php?affid=1534 +The Ultimate XXX TEEN Site... FREE VIP Membership!! + +- - - - - - - - - - - - - - - - - - - - + +Jennifer Simpson, Miami, FL +Your FREE lifetime membership has entertained my boyffriend and I for the last two years! Your +Adult Sites are the best on the net! + +Joe Morgan Manhattan, NY +Your live sex shows and live sex cams are unbelievable. The best part about your porn sites, is +that they're absolutely FREE! + +- - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + +Disclaimer: +We are strongly against sending unsolicited emails to those who do not wish to receive our special +mailings. You have opted in to one or more of our affiliate sites requesting to be notified of any +special offers we may run from time to time. We also have attained the services of an independent +3rd party to overlook list management and removal services. This is NOT unsolicited email. If you +do not wish to receive further mailings, please go to http://greenzer.com/remove.php to be removed +from the list. Please accept our apologies if you have been sent this email in error. We honor all +removal requests. + +Thank you zzzz@spamassassin.taint.org + +oldhtlheuhcclco + + diff --git a/Ch3/datasets/spam/spam/00463.45bff4629688e8031231a8b64a4eef06 b/Ch3/datasets/spam/spam/00463.45bff4629688e8031231a8b64a4eef06 new file mode 100644 index 000000000..e987e6f4a --- /dev/null +++ b/Ch3/datasets/spam/spam/00463.45bff4629688e8031231a8b64a4eef06 @@ -0,0 +1,103 @@ +From smave@datapart.no Wed Sep 25 10:29:33 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 9739916F03 + for ; Wed, 25 Sep 2002 10:29:32 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 25 Sep 2002 10:29:32 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8P8UZC19035 for + ; Wed, 25 Sep 2002 09:30:36 +0100 +Received: from localhost.localdomain (IDENT:root@[202.103.67.98]) by + webnote.net (8.9.3/8.9.3) with ESMTP id JAA23850 for ; + Wed, 25 Sep 2002 09:31:08 +0100 +Received: from yu2now910.com (200-207-205-247.dsl.telesp.net.br + [200.207.205.247]) by localhost.localdomain (8.12.1/8.12.1) with SMTP id + g8P72DSh015978; Wed, 25 Sep 2002 15:06:03 +0800 +Message-Id: <200209250706.g8P72DSh015978@localhost.localdomain> +From: "jaqwill" +Reply-To: "jaqwill" +Date: Tue, 24 Sep 2002 23:57:03 -0700 +Subject: Act Now - Reach Hundreds of Prospects +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Precedence-Ref: l23405678 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit +To: undisclosed-recipients:; + +_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + + S P E C I A L R E P O R T + +How To Reliably Generate Hundreds Of Leads And Prospects +Every Week! + +_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + +Our research has found that many online entrepreneurs have +tried one or more of the following... + + Free Classifieds? (Don't work anymore) + Web Site? (Takes thousands of surfers) + Banners? (Expensive and losing their punch) + E-Zine? (Hope they have a -huge- subscriber list) + Search Engines? (Forget it, unless you're in the top 10) + + S O W H A T D O E S W O R K ? + +Although often misunderstood, there is one method that has +proven to succeed time-after-time. + + + E - M A I L M A R K E T I N G ! ! + + +Does the thought of $50,000 to $151,200.00 per year make you +tingle with excitement? Many of our customers make that and +more... Click here to find out how: + + +http://http://32.97.166.75/seinet.veri321/ + + +HERE'S WHAT THE EXPERTS HAVE TO SAY ABOUT E-MAIL MARKETING: + + +"A gold mine for those who can take advantage of +bulk e-mail programs" - The New York Times + +"E-mail is an incredible lead generation tool" +- Crains Magazine + + +Click here to find out how YOU can do it: + + +http://http://32.97.166.75/seinet.veri321/ + + + + + +========================================================== + + +If you no longer wish to hear about future +offers from us, send us a message with STOP +in the subject line, by clicking here: + +mailto:list6644@postino.ch?Subject=Stop + +Please do not include any correspondence in your +message to this automatic stop robot--it will +not be read. All requests processed automatically. +********************************************************** + + [7(^(PO1:KJ)_8J7BJK9^":}H&*T] + + + diff --git a/Ch3/datasets/spam/spam/00464.8240aba24840864cb7439fc03f94ef6e b/Ch3/datasets/spam/spam/00464.8240aba24840864cb7439fc03f94ef6e new file mode 100644 index 000000000..147958249 --- /dev/null +++ b/Ch3/datasets/spam/spam/00464.8240aba24840864cb7439fc03f94ef6e @@ -0,0 +1,59 @@ +From firstever001@top13.bestoffersonthenet.com Wed Sep 25 14:45:06 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 94BA116F03 + for ; Wed, 25 Sep 2002 14:45:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 25 Sep 2002 14:45:05 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8P9jgC21631 for + ; Wed, 25 Sep 2002 10:45:47 +0100 +Received: from top13.bestoffersonthenet.com (top13.bestoffersonthenet.com + [64.25.38.253]) by webnote.net (8.9.3/8.9.3) with ESMTP id KAA24228 for + ; Wed, 25 Sep 2002 10:46:18 +0100 +From: firstever001@top13.bestoffersonthenet.com +Date: Wed, 25 Sep 2002 02:43:44 -0400 +Message-Id: <200209250643.g8P6hi923124@top13.bestoffersonthenet.com> +To: hbncikzddu@top13.bestoffersonthenet.com +Reply-To: firstever001@top13.bestoffersonthenet.com +Subject: ADV: Extended Auto Warranties Here vfafu + +Protect your financial well-being. +Purchase an Extended Auto Warranty for your Car today. + +CLICK HERE for a FREE no obligation quote. +http://ww1.bestoffersonthenet.com/autoprotectquote/ + +Car troubles always seem to happen at the worst possible time. +Protect yourself and your family with a quality Extended Warranty for your car, truck, or SUV, so that a large expense cannot hit you all at once. + +We cover most vehicles with less than 150,000 miles. + +Buy DIRECT! Our prices are 40-60% LESS! + +We offer fair prices and prompt, toll-free claims service. + +Get an Extended Warranty quote for your car today. + +Warranty plan also includes: + + 1) 24-Hour Roadside Assistance. + 2) Rental Benefit. + 3) Trip Interruption Intervention. + 4) Extended Towing Benefit. + +CLICK HERE for a FREE no obligation quote. +http://ww1.bestoffersonthenet.com/autoprotectquote/ + + + + + +--------------------------------------- +To easily remove your address from the list, go to: +http://ww1.bestoffersonthenet.com/stopthemailplease/ +Please allow 48-72 hours for removal. + + diff --git a/Ch3/datasets/spam/spam/00465.ca5d79d0e5dadee322c117789196ebb4 b/Ch3/datasets/spam/spam/00465.ca5d79d0e5dadee322c117789196ebb4 new file mode 100644 index 000000000..8b7e69ba1 --- /dev/null +++ b/Ch3/datasets/spam/spam/00465.ca5d79d0e5dadee322c117789196ebb4 @@ -0,0 +1,47 @@ +From vinnet@mail.com Wed Sep 25 17:22:05 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id AD14B16F03 + for ; Wed, 25 Sep 2002 17:22:04 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 25 Sep 2002 17:22:04 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8PFMQC01001 for + ; Wed, 25 Sep 2002 16:22:26 +0100 +Received: from localhst1916.com ([213.181.64.18]) by webnote.net + (8.9.3/8.9.3) with SMTP id QAA26122 for ; + Wed, 25 Sep 2002 16:23:00 +0100 +Message-Id: <200209251523.QAA26122@webnote.net> +From: "MR.VINCENT NNAJI." +Reply-To: vinnety@mail.com +To: zzzz@spamassassin.taint.org +Date: Thu, 26 Sep 2002 04:22:43 +0200 +Subject: BUSINESS PARTNERSHIP(URGENT/CONFIDENTIAL) +X-Mailer: Microsoft Outlook Express 5.00.2919.6900 DM +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8PFMQC01001 +Content-Transfer-Encoding: 8bit + +Mr.Vincent Nnaji, + Standard Trust Bank Ltd, + Lagos,Nigeria. + Dear Sir, + I am Mr.Vincent Nnaji, Bank Manager of Standard Trust Bank,Lagos,Nigeria. I have urgent and very confidential business proposition for you. +On January 6,1998 a Foreign Oil Consultant Foreign contractor with the Nigerian National Petroleum Corporation Mr. James Herbert made a numbered time Fixed Deposit for twelve calendar months valued at US$20M ( Twenty Million United States Dollars) in my branch. +Upon maturity I sent a routine notification to his forwarding address but got no reply. After a month we sent a reminder and finally we discovered from his contract employers the Nigerian National Petroleum Corporation that Mr. James Herbert died from an automobile accident. +On further investigation, I found out that he died without making a WILL and all attempts to trace his next of kin was fruitless. I therefore made further investigation and discovered that Mr.James Herbert did not declare any next of kin or relations in all his official documents including his Bank Deposit paperwork in my Bank. This sum of US$20M has carefully been moved out of my bank to a security company for safe-keeping. No one will ever come forward to claim it. +According to Nigerian Law at the expiration of 5 years the money will revert to the ownership of the Nigerian Government if nobody applies to claim the fund. Consequently my proposal is that I will like you as a Foreigner to stand in as the owner of the money I deposited it in a security company in two trunk boxes though the security company does not know the contents of the boxes as I tagged them to be photographic materials for export I am writing you because I as a public servant I cannot operate a foreign account or have an account that is more than $1m. + I want to present you as the owner of the boxes in the security company so you can be able to claim them with the help of my attorney. All these are to make sure that the fruits of this old man's labour will not get into the hands of some corrupt government officials. +This is simple. I will like you to provide immediately your full names and address so that the Attorney will prepare the necessary documents which will put you in place as the owner of the boxes. The money will be shared in the ratio of 70% for me and 25% for you and 5% will take care of all expenses. +There is no risk at all as all the paperwork for this transaction will be done by the Attorney and this will guarantee the successful execution of this transaction. If you are interested, please reply immediately via my private email address. +Upon your response I shall then provide you with more details and relevant documents that will help you understand the transaction. Please observe with utmost confidentiality and be rest assured that this transaction would be most profitable for both of us because I shall require your assistance to invest my share in your country. + Awaiting your urgent reply via my private email to indicate your interest. +Thanks and Regards, + MR.VINCENT NNAJI. + + + diff --git a/Ch3/datasets/spam/spam/00466.ecb11c98ec4511b5422b20476d935bd1 b/Ch3/datasets/spam/spam/00466.ecb11c98ec4511b5422b20476d935bd1 new file mode 100644 index 000000000..cbd429061 --- /dev/null +++ b/Ch3/datasets/spam/spam/00466.ecb11c98ec4511b5422b20476d935bd1 @@ -0,0 +1,99 @@ +From annekojo@email.com Wed Sep 25 17:22:07 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id CD54A16F03 + for ; Wed, 25 Sep 2002 17:22:06 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Wed, 25 Sep 2002 17:22:06 +0100 (IST) +Received: from email.com (host-66-133-60-171.verestar.net [66.133.60.171]) + by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g8PFqmC02323 for + ; Wed, 25 Sep 2002 16:52:49 +0100 +Message-Id: <200209251552.g8PFqmC02323@dogma.slashnull.org> +From: "Mrs. Anne Kojo" +To: +Subject: Partnership. +Sender: "Mrs. Anne Kojo" +MIME-Version: 1.0 +Content-Type: text/plain; charset="ISO-8859-1" +Date: Wed, 25 Sep 2002 16:46:33 -0700 +Content-Transfer-Encoding: 8bit + +Dear Sir, +With due respect and humility I write you this letter which I believe you +would +be of great assistance to my children and I. +I got your contact through my husband commercial address book and believed +that +you must be a trust worthy and reliable person that will not like to +intimidate me +or betray my trust after hearing this news. I am a native of KONOBO in the +KEREMA +local district of SIERRA LEONE in West Africa and the wife of Late DR. +MUNDI A. +KOJO who was assassinated by the rebel forced loyal to Major John Paul +Koromah +because he was the Director General National Gold and Diamond Mining +Corporation +of Sierra Leone. Few days before my husband was assassinated, he +instructed me +and my children (Ibrahim and Amina) to move out of Sierra Leone immediately, +before the powerful Economic community of West African States (ECOMOG) +forces +intervened, which eventually resulted into a brutal civil war. My children +and I +managed to escape to Togo through the help of my husband's friend. We came +into +Togo with some valuables including a cash sum of $25MILLION(TWENTY FIVE +MILLION +UNITED STATES DOLLARS ONLY) in two trunks boxes which I have deposited +with a +Trust Company here in Togo and special arrangement has been made with the +currier +company who will freight the money to your country. +Meanwhile, I want to leave Togo entirely with this money for investment in +your +country because of a stable political situation there and mostly for the +future of +my children. I want you to please assist us to claim this fund from the +Trust +Company in any of their branches in Europe, after which the fund will be +deposited +into your account for investment in your country. You should also help us to +source for good investment opportunity so that we can invest wisely in your +country when the fund is finally confirmed in your account. +We have it in mind to reward you handsomely for your assistance as we have +resolved to give you 20% of the total sum for your help. But due to how I +am being +monitored by the Sierra Leonean Government Secret Agents, I will advice +you to +have the +deal concluded with my son (IBRAHIM KOJO). Please contact my son on this +email: +ibrahimkojo@caramail.com , immediately you receive this letter to enable us +proceed in earnest towards retrieving the consignments and transferring +same into +your account. +Your private Fax and Phone is needed in this transaction for private +discussions. +Note: There is no risk involved in this business. +Remain Blessed, +MRS. ANNE KOJO + + + + + + + + + + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00467.5b733c506b7165424a0d4a298e67970f b/Ch3/datasets/spam/spam/00467.5b733c506b7165424a0d4a298e67970f new file mode 100644 index 000000000..b7ac82aa3 --- /dev/null +++ b/Ch3/datasets/spam/spam/00467.5b733c506b7165424a0d4a298e67970f @@ -0,0 +1,217 @@ +From InkjetDeals@acsmsupplies.com Thu Sep 26 11:11:54 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id BF27916F03 + for ; Thu, 26 Sep 2002 11:11:52 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:11:52 +0100 (IST) +Received: from acsmsupplies.com (host02.acsm.synergy-networks.com + [64.200.6.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) with + SMTP id g8PIPHC08718 for ; Wed, 25 Sep 2002 19:25:17 + +0100 +Message-Id: <200209251825.g8PIPHC08718@dogma.slashnull.org> +From: "Affordable Computer Supply" +To: +Subject: Printer Cartridges as low as $1.21 each! +Sender: "Affordable Computer Supply" +MIME-Version: 1.0 +Date: Wed, 25 Sep 2002 14:29:23 -0400 +Reply-To: "Affordable Computer Supply" +Content-Type: multipart/alternative; boundary="=Multipart Boundary 0925021429" + +This is a multipart MIME message. + +--= Multipart Boundary 0925021429 +Content-Type: text/plain; + charset="ISO-8859-1" +Content-Transfer-Encoding: 8bit + + + + + + + + +

    You +are receiving this email because you opted-in to receive special offers from +OptinDeals through one of our marketing partners. If you feel you have received +this email in error or do not wish to receive additional special offers, please +reply to this email with the word "remove" in the subject line or +follow the unsubscribe instructions below. + +

    +

    +

    +
    + Incredible Deals on Inkjet Cartridges! + +
    +
    + Our Prices Start as low as $1.21 + +
    +
    + Check out some of our deals: +
    +
    +   +
    + +
    +   +
    +
    + Check our web site for all the incredible + deals +
    +
    +   +
    + +
    +   +
    +
    + We have been selling only the best generic printer + cartridges for over 5 years, and all of our cartridges come with a 6 month + guarantee! +
    +
    +   +
    +

     For your best price on cartridges shop at +http://www.inkjetrus.com/customer!.html

    +

    HOW TO UNSUBSCRIBE:
    +You received this e-mail because you are registered at one of our web sites,
    +or at one of our partners' sites or are listed in one of several list +subscriptions.
    +If you do not want to receive e-mail offers, or any email marketing from us
    +please click +here

    + + + + + +--= Multipart Boundary 0925021429 +Content-Type: text/html; + charset="ISO-8859-1" +Content-Transfer-Encoding: 8bit + + + + + + + + +

    You +are receiving this email because you opted-in to receive special offers from +OptinDeals through one of our marketing partners. If you feel you have +received +this email in error or do not wish to receive additional special offers, +please +reply to this email with the word "remove" in the subject line or +follow the unsubscribe instructions below. + +

    +

    +

    +
    + Incredible Deals on Inkjet Cartridges! + +
    +
    + Our Prices Start as low as +$1.21 + +
    +
    + Check out some of our +deals: +
    +
    +   +
    + +
    +   +
    +
    + Check our web site for all the +incredible + deals +
    +
    +   +
    + +
    +   +
    +
    + We have been selling only the best generic +printer + cartridges for over 5 years, and all of our cartridges come with a 6 month + guarantee! +
    +
    +   +
    +

     For your best price on cartridges shop at +http://www.inkjetrus.com/customer!.html

    +

    HOW TO UNSUBSCRIBE:
    +You received this e-mail because you are registered at one of our web +sites,
    +or at one of our partners' sites or are listed in one of several list +subscriptions.
    +If you do not want to receive e-mail offers, or any email marketing from +us
    +please click +here

    + + + + + +--= Multipart Boundary 0925021429-- + + diff --git a/Ch3/datasets/spam/spam/00468.77534696791a755fb0fb8be8c2704ed8 b/Ch3/datasets/spam/spam/00468.77534696791a755fb0fb8be8c2704ed8 new file mode 100644 index 000000000..6a3391d40 --- /dev/null +++ b/Ch3/datasets/spam/spam/00468.77534696791a755fb0fb8be8c2704ed8 @@ -0,0 +1,193 @@ +From WebBuilders@YourService.com Thu Sep 26 11:11:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id D4FFF16F03 + for ; Thu, 26 Sep 2002 11:11:55 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:11:55 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8PISRC08752 for + ; Wed, 25 Sep 2002 19:28:27 +0100 +Received: from rack3.easydns.com (rack3.easydns.com [205.210.42.50]) by + webnote.net (8.9.3/8.9.3) with ESMTP id TAA27238 for ; + Wed, 25 Sep 2002 19:29:02 +0100 +Received: from 52.25.36.25 (216-91-88-22.biltmorecomm.com [216.91.88.22]) + by rack3.easydns.com (Postfix) with SMTP id 9821F4BE98 for + ; Wed, 25 Sep 2002 14:28:58 -0400 (EDT) +From: WebXperts@no.hostname.specified, Design@no.hostname.specified, + "Inc." +To: zzzz@spamassassin.taint.org +Reply-To: WebBuilders@YourService.com +Subject: We Build The Internet. WebXperts.com (Design / Programming / Consultation) +Date: Wed, 25 Sep 2002 14:25:38 -0400 +MIME-Version: 1.0 +Message-Id: <20020925182858.9821F4BE98@rack3.easydns.com> +Content-Type: multipart/related; boundary="1d9d507a-d864-478d-ba24-917611e50332" + + +This is a multi-part message in MIME format +--1d9d507a-d864-478d-ba24-917611e50332 +Content-Type: text/html; charset=iso-8859-1 +Content-Transfer-Encoding: quoted-printable + + + + +WebXperts Design, Inc. We Build The Internet. + + +
    +

    +If This Flyer does not appear correctly and/or images do not appear, please = +click the following link: http://www.webxperts.com.
    + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +



    +Your email address was obtained from a purchased list. You are receiving this = +from Eluxmedia LLC, and are a part of their mailing list. If you wish to = +unsubscribe from this list, please click here and enter = +your name into the remove box.

    If you have previously unsubscribed and = +are still receiving this message, you may email our Abuse Control Center.
    +
    + + +--1d9d507a-d864-478d-ba24-917611e50332-- + + diff --git a/Ch3/datasets/spam/spam/00469.ee3b2f31459cc2ec43ae7cae00d40cf6 b/Ch3/datasets/spam/spam/00469.ee3b2f31459cc2ec43ae7cae00d40cf6 new file mode 100644 index 000000000..d1dd28afb --- /dev/null +++ b/Ch3/datasets/spam/spam/00469.ee3b2f31459cc2ec43ae7cae00d40cf6 @@ -0,0 +1,44 @@ +From firstever001@top10.bestoffersonthenet.com Thu Sep 26 11:11:37 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 8706216F03 + for ; Thu, 26 Sep 2002 11:11:36 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:11:36 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8PGjpC05018 for + ; Wed, 25 Sep 2002 17:45:51 +0100 +Received: from top10.bestoffersonthenet.com ([64.25.38.250]) by + webnote.net (8.9.3/8.9.3) with ESMTP id RAA26647 for ; + Wed, 25 Sep 2002 17:46:27 +0100 +From: firstever001@top10.bestoffersonthenet.com +Date: Wed, 25 Sep 2002 09:47:00 -0400 +Message-Id: <200209251347.g8PDl0m01880@top10.bestoffersonthenet.com> +To: yziubpzytm@top10.bestoffersonthenet.com +Reply-To: firstever001@top10.bestoffersonthenet.com +Subject: ADV: Are you protected? Free Life Insurance quote oefik + +Lowest rates available for term life insurance! + +Take a moment and fill out our online form to see the low rate you qualify for. + +Save up to 70% from regular rates! + +Smokers accepted! + +http://ww1.bestoffersonthenet.com/termlifequote/ + +Representing quality nationwide carriers. Act now! + + + + + +--------------------------------------- +To easily remove your address from the list, go to: +http://ww1.bestoffersonthenet.com/stopthemailplease/ +Please allow 48-72 hours for removal. + + diff --git a/Ch3/datasets/spam/spam/00470.32f31d3d1598f840a6471fa25332336d b/Ch3/datasets/spam/spam/00470.32f31d3d1598f840a6471fa25332336d new file mode 100644 index 000000000..a847fb03d --- /dev/null +++ b/Ch3/datasets/spam/spam/00470.32f31d3d1598f840a6471fa25332336d @@ -0,0 +1,160 @@ +From newsletter@sitehoster.net Thu Sep 26 11:29:48 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id B9F8916F03 + for ; Thu, 26 Sep 2002 11:29:45 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:29:45 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8PKXEC12677 for + ; Wed, 25 Sep 2002 21:33:14 +0100 +Received: from bulk_domain_hosting ([64.57.207.23]) by webnote.net + (8.9.3/8.9.3) with SMTP id VAA27757 for ; Wed, + 25 Sep 2002 21:33:41 +0100 +From: newsletter@sitehoster.net +To: zzzz@spamassassin.taint.org +Message-Id: +Subject: Private Label Reseller Hosting - Expires 9/30/2002 +Content-Transfer-Encoding: 7BIT +Date: Wed, 25 Sep 2002 16:33:34 -0500 +Reply-To: sales1@sitehoster.net +Content-Type: text/html; charset="iso-8859-1" + +
       
     
      +

    Private Label +Reseller Hosting Plans

     Starter PlanMidsize +PlanSuperSIZE Plan
    Price   +99.95/mo.259.95/mo.425.95/mo. +
    Domains   75UnlimitedUnlimited
    Disk Space   +2X 500 Mb 2X 1GB2X 10 GB
    Bandwidth   +2X 15 GB2x 50 GB2X +100GB
    Billing   750125
      More Info More Info +More +Info

    That's +right, we will DOUBLE these already huge amounts of Disk Space and Bandwidth: +only Available until 9/30/2002 6 P.M. EST. +

    Think this offer can't get any better? Think +again!  If you sign - up for a six (6) month hosting package,  we +are going to give you 1 free month of service.

    We offer a 30 Day money back guarantee so this offer is +absolutely risk free. Come find out what it is like to host with a company +that has Real Live 24/7 Support and enough bandwidth to host the +largest web sites worldwide.

    Key +Features of Reseller Plans

    • Automated +customer signup
    • Automated domain registration
    • Credit card +processing
    • Recurrent billing
    • E-mail  invoicing
    • Fully automated +set-up
    • Includes Win2000 AND Linux +OS
    • Completely brandable interface
    • Multilingual support
    • Flexible end +user interface
    • Control Panel Walk Through provided by our +techs
    • Shared or Dedicated IPs
    • Database hosting (MySQL, MS SQL, PostgreSQL, +Access and ODBC)
    • E-commerce support (Miva and osCommerce)
    • ASP PHP ColdFusion
    • Integrated WebMail
    • Streaming Media hosting
    • Shared FTP +access 
    • Anonymous FTP
    • Error Document +management
    • Shared SSL support
    • CGI +scripts
    • And Much more... +

    This offer is a Month End Closeout so please act before 9/30/2002 +

    Sign up before +Wed 9/25/2002 and receive $50 off of the set up fee


    For more information + call 1-866-858-HOST +(4678)  +

      
      +



      +

    + + diff --git a/Ch3/datasets/spam/spam/00471.fc87286572c99b7a554dc8c86f34506c b/Ch3/datasets/spam/spam/00471.fc87286572c99b7a554dc8c86f34506c new file mode 100644 index 000000000..631b63d68 --- /dev/null +++ b/Ch3/datasets/spam/spam/00471.fc87286572c99b7a554dc8c86f34506c @@ -0,0 +1,48 @@ +From michaelrobbins012389150776@hotmail.com Thu Sep 26 11:29:50 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id AE35516F03 + for ; Thu, 26 Sep 2002 11:29:49 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:29:49 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8PKenC13084 for + ; Wed, 25 Sep 2002 21:40:49 +0100 +Received: from youngcp.www.youngcp.co.kr ([218.145.125.66]) by webnote.net + (8.9.3/8.9.3) with SMTP id VAA27795 for ; + Wed, 25 Sep 2002 21:41:24 +0100 +From: michaelrobbins012389150776@hotmail.com +Received: from 200.158.102.5 (unverified [200.158.102.5]) by + youngcp.www.youngcp.co.kr (EMWAC SMTPRS 0.83) with SMTP id + ; Thu, 26 Sep 2002 05:33:03 +0900 +Message-Id: +To: nalpers@aol.com, cscheer13@aol.com, nals5582@yahoo.com, + zzzz@hockinghills.net +Cc: cschein@msn.com, richard2500@aol.com, zzzz@spamassassin.taint.org +Date: Wed, 25 Sep 2002 13:21:26 -0700 +Subject: The best possible mortgage +MIME-Version: 1.0 +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-Mimeole: Produced By Microsoft MimeOLE V6.00.2600.0000 +X-Precedence-Ref: 1234056789zxcvbn +Content-Transfer-Encoding: 7bit +Content-Type: text/html; charset=us-ascii + +HAS YOUR MORTGAGE SEARCH GOT YOU DOWN?
    +
    +Are you frustrated and confused with all the different terms and quotes? Don't
    +know who is telling you the truth? We can solve all your problems.
    +
    +Visit our site today and in two minutes you can have us searching thousands of
    +programs and lenders for you. Get the truth, get the facts, get your options
    +all in one shot. It's absolutely FREE, and you can be done in only two minutes,
    +so Click Right NOW and put your worries behind you!
    +
    +
    + + [RYTE^3247(^(PO1:KJ)_8J7BJK] + + + diff --git a/Ch3/datasets/spam/spam/00472.713268dfca421e165c1ac59bab045e00 b/Ch3/datasets/spam/spam/00472.713268dfca421e165c1ac59bab045e00 new file mode 100644 index 000000000..c5d62dc03 --- /dev/null +++ b/Ch3/datasets/spam/spam/00472.713268dfca421e165c1ac59bab045e00 @@ -0,0 +1,36 @@ +From freeadult9b9a@hotmail.com Thu Sep 26 11:29:51 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 5889916F03 + for ; Thu, 26 Sep 2002 11:29:51 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:29:51 +0100 (IST) +Received: from hotmail.com (adsl-34-63-100.mia.bellsouth.net + [67.34.63.100]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id + g8PLtkC15641 for ; Wed, 25 Sep 2002 22:55:46 +0100 +Reply-To: "Jim" +Message-Id: <021e82d64d2c$7528e6a8$0eb72aa0@btdjiu> +From: "Jim" +To: User@dogma.slashnull.org +Subject: Adult: Free Access +Date: Wed, 25 Sep 2002 00:52:05 -0300 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: MIME-tools 5.503 (Entity 5.501) +Importance: Normal +Content-Type: multipart/mixed; boundary="----=_NextPart_000_00E3_67D27D5C.B1748B87" + +------=_NextPart_000_00E3_67D27D5C.B1748B87 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: base64 + + +R2V0IGFjY2VzcyB0byB0aGUgbGFyZ2VzdCBmcmVlIGFkdWx0IHNpdGUgb24g +dGhlIG5ldC4NCg0KaHR0cDovL3d3dy5teWZyZWVhZHVsdHBheXNpdGUuY29t +L2ZyZWVzaXRlLmh0bWwNCjM4NjJ5VVJQOC03OTdoam9qNzY2MHhubFk5LTY1 +MVBGWFIyOTYzS2tBaDYtMzgya0tLUDQxN2w1MQ== + + diff --git a/Ch3/datasets/spam/spam/00473.7086ec944a1245a002b04547a433c887 b/Ch3/datasets/spam/spam/00473.7086ec944a1245a002b04547a433c887 new file mode 100644 index 000000000..9c05676cc --- /dev/null +++ b/Ch3/datasets/spam/spam/00473.7086ec944a1245a002b04547a433c887 @@ -0,0 +1,479 @@ +From Alex-09242002-HTML@frugaljoe.330w.com Thu Sep 26 11:29:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 1DBF416F03 + for ; Thu, 26 Sep 2002 11:29:53 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:29:53 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8PMgVC17176 for + ; Wed, 25 Sep 2002 23:42:31 +0100 +Received: from richard.330w.com (richard.330w.com [216.53.71.115]) by + webnote.net (8.9.3/8.9.3) with ESMTP id XAA28236 for ; + Wed, 25 Sep 2002 23:43:07 +0100 +Message-Id: <200209252243.XAA28236@webnote.net> +Received: by richard.330w.com (PowerMTA(TM) v1.5); Wed, 25 Sep 2002 + 17:48:33 -0400 (envelope-from ) +From: Alex@FrugalJoe.com +To: zzzz@spamassassin.taint.org +Subject: Got plans tonight? +Id-Frugaljoe: zzzz####spamassassin.taint.org +Date: Wed, 25 Sep 2002 17:48:33 -0400 +Content-Type: text/html + + + + + + + + +
    +
    Never Pay Retail!
    + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + + + + + + +
    + + + +
    + +You have received this email because you have subscribed + through one of our marketing partners. If you would like + to learn more about Frugaljoe.com then please visit our website + www.frugaljoe.com If this message was sent to you in error, or +if you + would like to unsubscribe please click here or +cut and paste the following link into a web browser:
    + http://www.frugaljoe.com/unsubscribe.php?eid=392232\~moc.cnietonten^^mj\~1754388\~12a1 +

    + + + + + + diff --git a/Ch3/datasets/spam/spam/00474.30772a1ac9e824976fc6676844d68b76 b/Ch3/datasets/spam/spam/00474.30772a1ac9e824976fc6676844d68b76 new file mode 100644 index 000000000..1b7b8fa61 --- /dev/null +++ b/Ch3/datasets/spam/spam/00474.30772a1ac9e824976fc6676844d68b76 @@ -0,0 +1,115 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Thu Sep 26 11:30:03 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 6AE8F16F16 + for ; Thu, 26 Sep 2002 11:30:02 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:30:02 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8PMxGC17673 for + ; Wed, 25 Sep 2002 23:59:16 +0100 +Received: from TIPSMTP1.ADMANMAIL.COM (tipsmtp1.theadmanager.com + [66.111.219.130] (may be forged)) by webnote.net (8.9.3/8.9.3) with ESMTP + id XAA28260 for ; Wed, 25 Sep 2002 23:59:52 +0100 +Message-Id: <200209252259.XAA28260@webnote.net> +Received: from TIPUTIL2 (tiputil2.corp.tiprelease.com) by + TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id + <70.00006950@TIPSMTP1.ADMANMAIL.COM>; Wed, 25 Sep 2002 17:39:28 -0500 +Date: Wed, 25 Sep 2002 17:23:03 -0500 +From: Customer Service +To: JM@NETNOTEINC.COM +Subject: Congratulations! You Get a Free Handheld Organizer! +X-Info: 134085 +X-Info2: SGO +MIME-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + +Congratulations! You Get a Free Handheld Organizer! + + +
    + + + +
    + + + + + + + + +
    + +

    Dear Friend, +

    I have your Personal Digital Organizer. It's FREE, but I need to know where to send it. Click + Here and complete the form. +

    Organize your life and keep track of + appointments, names and numbers with this modern digital organizer. + Store up to 100 important text notes and 100 names/numbers. + Features easy to use, touch-screen technology, 10 digit calculator, + currency and metric converters, alarm clock and password + protection.

    Plus you can try all of our money-saving benefits + FREE for 30 days. Act + Now! + + + + +

    +

    +

    + +
    + +
    + +

    +You also get a full subscription to HOME Magazine at no additional cost! + +This offer is risk-free, registration only takes a minute and is completely secure. +It's that easy. Your satisfaction is guaranteed because our credibility is on the line. +

    +P.S.: +This offer is only valid for the next 48 hours, so Act Now!

    + + +
    + + +

    + +Copyright 2002, American Homeowners Association (AHA). All rights reserved. +

    +

    +
    + + +
    + +
    + +
    + +T +
    + +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
    + + diff --git a/Ch3/datasets/spam/spam/00475.71f75afb1960d619af86e1c64dcb11fc b/Ch3/datasets/spam/spam/00475.71f75afb1960d619af86e1c64dcb11fc new file mode 100644 index 000000000..bb9185097 --- /dev/null +++ b/Ch3/datasets/spam/spam/00475.71f75afb1960d619af86e1c64dcb11fc @@ -0,0 +1,349 @@ +From lp@insiq.us Thu Sep 26 11:30:08 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 101F916F17 + for ; Thu, 26 Sep 2002 11:30:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:30:05 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g8PMxgC17688 for ; Wed, 25 Sep 2002 23:59:42 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Wed, 25 Sep 2002 19:01:08 -0400 +Subject: Commissions Too High to Publish +To: +Date: Wed, 25 Sep 2002 19:01:08 -0400 +From: "IQ - Life Pros" +Message-Id: <1df93b01c264e7$6f39ff10$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJk01CT2F28laJpRrabSLkMp7Qtcg== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 25 Sep 2002 23:01:08.0812 (UTC) FILETIME=[6F58F8C0:01C264E7] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_1C1E03_01C264B1.C98D8800" + +This is a multi-part message in MIME format. + +------=_NextPart_000_1C1E03_01C264B1.C98D8800 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + Non-Med Level Term 15-20 & 30 year with Return of Premium Rider! + It's Lucrative: + Commission so high we can't publish them + +Annualization Available +Daily Commission by EFT + It's Fast: + Qualifying policies processed in 4 days or company pays you +$100.00 +Forms and Status from Internet + It's Easy: + Non-medical underwriting (No Blood, No HOS, No Exam)* + Ages 0-60 $100,000 + Ages 61-70 $50,000 + Easy To Complete Application +Fax Application to Home Office (No Need to Mail Original) + 888-574-9088 +Please fill out the form below for more information +Name: +E-mail: +Phone: +City: State: + + + +M14070PBL602 +*Issuance of the policy based on answers to medical questions +We don't want anybody to receive our mailing who does not wish to +receive them. This is a professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: http://www.insuranceiq.com/optout +Legal Notice + + +------=_NextPart_000_1C1E03_01C264B1.C98D8800 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Commissions Too High to Publish + + + + +

    =20 + + + + +
    + + =20 + + + =20 + + +
    3D'Non-Med
    3D"It's
    + + =20 + + + + =20 + + + + + =20 + + +
      + + Commission so high we can't publish them
    +
    +
    + + Annualization Available
    + + Daily Commission by EFT + +
    + + =20 + + +
    3D"It's
    + + =20 + + + + =20 + + +
      + + Qualifying policies processed in 4 days or company pays = +you $100.00 + +
    + + Forms and Status from Internet + +
    + + =20 + + +
    3D"It's
    + + =20 + + + +
      + + Non-medical underwriting (No Blood, No HOS, No = +Exam)* +
    + + =20 + + + + + =20 + + + + +
     Ages 0-60$100,000
     Ages 61-70$50,000
    + + =20 + + + + =20 + + +
      + + Easy To Complete Application +
    + + Fax Application to Home Office (No Need to Mail = +Original) +
    + + =20 + + +
    3D'888-574-9088'
    + + =20 + + +
    =20 + + =20 + + + + + +
    =20 + + =20 + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + + + + =20 + + + + + +
    Please fill out the form below for more = +information
    Name:=20 + +
    E-mail:=20 + +
    Phone:=20 + +
    City:=20 + + State:=20 + +
     =20 + +  =20 + + +
    +
    +
    + + =20 + + + =20 + + + =20 + + +
    =20 +
    M14070PBL602
    +
    =20 +

    *Issuance=20 + of the policy based on answers to medical = +questions
    + We don't want anybody to receive our mailing who does = +not wish=20 + to receive them. This is a professional communication = +sent to=20 + insurance professionals. To be removed from this = +mailing list,=20 + DO NOT REPLY to this message. Instead, go here: http://www.insuranceiq.com/opt= +out
    + Legal = +Notice
    =20 +

    +
    +
    +

    + + + + +------=_NextPart_000_1C1E03_01C264B1.C98D8800-- + + diff --git a/Ch3/datasets/spam/spam/00476.af3a29817853a5c56bae5257c2d4b742 b/Ch3/datasets/spam/spam/00476.af3a29817853a5c56bae5257c2d4b742 new file mode 100644 index 000000000..35791605a --- /dev/null +++ b/Ch3/datasets/spam/spam/00476.af3a29817853a5c56bae5257c2d4b742 @@ -0,0 +1,557 @@ +From harbie@juno.com Thu Sep 26 11:30:18 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id AE05116F16 + for ; Thu, 26 Sep 2002 11:30:11 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:30:11 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8Q3v3C31731 for + ; Thu, 26 Sep 2002 04:57:03 +0100 +Received: from rack3.easydns.com (rack3.easydns.com [205.210.42.50]) by + webnote.net (8.9.3/8.9.3) with ESMTP id EAA28707; Thu, 26 Sep 2002 + 04:57:37 +0100 +From: harbie@juno.com +Received: from juno.com (host42-176.pool21757.interbusiness.it + [217.57.176.42]) by rack3.easydns.com (Postfix) with SMTP id 402744AB48; + Wed, 25 Sep 2002 23:57:28 -0400 (EDT) +Reply-To: +Message-Id: <032a10c08e3c$5876c4e4$1ec01bd0@vpivqi> +To: +Cc: +Subject: The Government Grants You $25,000! +Date: Wed, 25 Sep 2002 23:45:58 +0400 +MIME-Version: 1.0 +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: eGroups Message Poster +Importance: Normal +Content-Type: text/html; charset="iso-8859-1" + + + + +
    +

    +  +Free Personal and Business Grants

    + +

      +

    + + + +
    +
    +

    +" Qualify for at least $25,000 in free +grants money - Guaranteed! "

    +
    + +
    +

    +Each day over One Million Dollars in Free +Government
    +Grants  is given away to people just like you for a wide
    +variety of Business And Personal Needs

    +        +Dear Grant Seeker, +
    In a moment, I'll tell you +exactly HOW & WHERE to get Grants. This MONEY has to +be given away, WHY not to YOU?
    + +
    You may be thinking, "How +can I get some of this Free Grants Money"
    + +
    Maybe you think it's impossible +to get free money?
    + +
    Let me tell you it's not +impossible! It's a fact, ordinary people and businesses all across the +United States are receiving millions of dollars from these Government and +Private Foundation's everyday.
    + +
    Who Can Apply?
    + +
    ANYONE can apply +for a Grant from 18 years old and up!
    + +
    Grants from $500.00 to $50,000.00 +are possible! GRANTS don't have to be paid back, +EVER! Claim +your slice of the FREE American Pie.
    + +
    This money is not a loan, +Trying to get money through a conventional bank can be very time consuming +and requires a lot of paperwork, only to find out that you've been denied. +These Government Agencies don't have to operate under the same stringent +requirements that banks do.
    + +
    You decide how much money +you need, as long as it's a lawful amount and meets with the Government +Agencies criteria, the money is yours to keep and never has to be repaid. +This money is non taxable & interest free.
    + +
    None of these programs require +a credit check, collateral, security deposits or co-signers, you can apply +even if you have a bankruptcy or bad credit, it doesn't matter, you as +a tax payer and U.S. citizen are entitled to this money.
    + +
    There are currently over +1,400 Federal Programs, 24,000 State Programs, 30,000 Private Foundations +and 20,000 Scholarship Programs available.
    + +
    This year over $30 Billion +Dollars In Free personal and business Government Grants Money will be given +away by Government Grants Agencies.
    + + +
      +
    + + + +
    +
    +

    +Government Personal +and Business Grants Facts:

    +Over 20 Million People Get Government +Money Every Year: +
      1,000,000 entrepreneurs get money +to start or expand a business +

      4,000,000 people get money to invest +in real estate +

      6,000,000 people get money to go +to college +

      10,000,000 people get free help and +training for a better job

    +
    + +

    +Getting Business +Grants

    + +
    Anyone thinking about going +into business for themselves, or wanting to expand an existing business +should rush for the world's largest "one-stop-money-shop" where FREE business +grants to start or expand a business is being held for you by the Federal +Government.
    + +
    It +sounds absolutely incredible that people living right here in the United +States of America wouldn't know that each year the world's largest source +of free business help delivers:
    + +
      Over $30 billion dollars in free +business grants and low-interest loans; +

      over one-half trillion dollars in +procurement contracts; and +

      over $32 billion dollars in FREE +consulting and research grants.

    + +
    With an economy that remains +unpredictable, and a need for even greater economic development on all +fronts, the federal government is more willing than it ever has been before +to give you the money you need to own your own business and become your +own boss!
    + +
    In +spite of the perception that people should not look to the government for +help, the great government give-away programs have remained so incredibly +huge that if each of the approximately 8 million businesses applied for +an equal share, they would each receive over $70,000.
    + +
    Most +people never apply for FREE Business Grants because they somehow feel it +isn't for them, feel there's too much red-tape, or simply don't know who +to contact.The fact is, however, that people from all walks of life do +receive FREE GRANTS MONEY and other benefits from the government, and you +should also.
    + +

    +Government Grants +for Personal Need

    + +
    Help to buy a new home for +low income families, repair your home, rent, mortgage payments, utility +bills, purchase a new car, groceries, childcare, fuel, general living expenses, +academic tutoring, clothing, school supplies, housing assistance, legal +services, summer camp, debts, music lessons, art lessons, any extracurricular +activities, pay bills for senior citizens, real estate taxes, medical expenses +and general welfare. If you or someone you know suffered a fire lose there +are programs available to help in replacing necessities.
    + +

    +Scholarships And +Grants For Education

    + +
    Grant Money for preschool +children and nursery school education, private, primary and secondary schools, +men and women to further their education, scholarships for athlete's, business +management, engineering, computer science, medical school, undergraduate, +graduate, professional, foreign studies and many more.
    + +

    +Here's How You +Can Get Free Grants
    +In The Shortest Time Possible

    + +
    Once you know how and where +to apply for a specific Free Grant, results are almost inevitable. The +government wants to give away this money. . . it is under congressional +mandate to do so! These funds are made available to help you, the tax payer. +All that's required from you is the proper presentation of your grant request. +That's all.
    +Announcing... +
    +

    +"The Complete +Guide To Government Grants"

    + +
    Forget just about everything +you've seen or heard about government grants. What I've done is put together +a complete blueprint for researching, locating and obtaining government +grants. "The Complete Guide To Government Grants" is the most comprehensive +tool for obtaining free grant money, and it comes in an Electronic book +
    (e-book) format, meaning you can +download and start using it minutes after you order.
    + +
    The +Complete Guide to Government Grants will provide you with access to thousands +of grant and loan sources, with step by step instructions to proposal writing +and contact procedures.
    +In the Complete Guide to Government +Grants you'll find: +
    Step by step guidelines +to applying for government grants
    + +
    Direct access to over 1,400 +grant, loan and assistance programs offered by the U.S. federal government. +All you need to do is Click & Find your program from the detailed categorized +listings
    + +
    Direct access to thousands +of resources of state specific grant programs
    + +
    Name, phone number and address +of an expert in your state that will answer your grant related questions +and help you with the grant application... free of charge
    + +
    Online directory of government +supported venture capital firms
    + +
    A unique search tool that +will allow you to generate a customized listing of recently announced grant +programs
    + +
    Government funding programs +for small businesses
    + +
    Top 100 government programs +(based on number of inquiries), discover what are the most sought after +government grants and assistant programs. Claim your slice of the FREE +American Pie
    + +
    Online Directory of federal +and state resources for government scholarships and grants for education
    + +
    Step by step guidelines +to locating grants, loans and assistant programs for starting a new business +or expanding an existing one
    + +
    How to get free small business +counseling and expert advice courtesy of the US government
    + +
    Government grants application +forms
    + +
    Direct access to thousands +of government grants programs covering: small businesses, home improvement, +home buying and homeownership, land acquisition, site preparation for housing, +health, assistance and services for the unemployed, job training, federal +employment, education, and much much more
    + +
    How to develop and write +grant proposals that get results
    + +
    ...Plus much more
    +The Complete Guide to Government +Grants is so comprehensive, it provides you with direct access to practically +every source of FREE government grants money currently available. +
    If you're an American citizen +or resident, you are entitled to free grant money ranging from $500 to +$250,000 or more. If you are Black you have already qualified for 15 programs, +being Hispanic, you qualify for many programs. Being a Christian will get +you into 20 programs, there are also many other programs available for +different faiths, Jewish, Catholic. Not having any money, will get you +into over 30 programs, 550 programs if you are unemployed, or underemployed. +The list and sources are endless.
    + +
    You Are Eligible! This money +is Absolutely Free and will be yours to use for any worthwhile purpose.
    + +
    Did you know you can apply +for as many grants as you want?
    + +
    It's true, For instance, +you could get a $65,000 grant to begin a weight loss business, get $8,800 +in tuition to become a nurse or $35,000 to open up the day-care center, +you've always dreamed of owning. And then, go out and apply for a grant +to buy a home for you and your family. And once your new business starts +doing well you could go out and get another grant for expansion of your +business. The possibilities are endless.
    + + +
      +
    + + + +
    +

    +You Must Qualify +For At Least $25,000 In Free
    +Grants Money, Or Your Money Back!

    + +
    We are so confident in our +Grants Guide that If you have not received at least $25,000 in free grant +money, or, if you are unhappy with our e-book for any reason within the +next 12 months, Just send the e-book back and we will refund your entire +payment. NO QUESTIONS ASKED!!
    + +
    If you want to order, we +insist you do so entirely at our risk. That is why the E-book comes with +a... No Risk full year Money-Back Guarantee. There is absolutely +NO RISK on your part with this 365 day guarantee. What we mean is we want +you to order without feeling you might "get taken."
    + +
    Therefore, we want you to +order this material today... read it, use it... and if for any reason you +aren't completely satisfied, you not only can cancel, you should, +for an immediate refund of your purchase price. You simply can't lose.
    + +
    Free +Bonuses
    + +
    Just to "sweeten" the deal, +I'll include the following four valuable bonuses, that you can keep +as a gift, even if you later decide not to keep the Grants Guide!
    + +
    Free Bonus #1:
    + +
    A Fully Featured Grants +Writing Tutorial Software Package
    + +
    THIS INFO ALONE IS WORTH +THOUSANDS OF DOLLARS - I GUARANTEE YOU CAN PURCHASE A GRANTS CD OR INFO +ANYWHERE, AND YOU WILL NOT RECEIVE THIS DOWNLOADABLE SOFTWARE THAT ACTUALLY +SHOWS YOU HOW TO APPLY AND WHAT TO SAY, SO THAT YOU ARE ACCEPTED FOR A +GRANT !!!
    + +
    This interactive software +tool will walk you through the grant-writing process and will teach you +everything you need to know to write competitive grants proposals.
    + +
    The program includes:
    + +
      +
      detailed information and +tips on writing grants proposals;
      + +
      how to complete a grant +application package;
      + +
      examples of good, complete +grant packages;
      + +
      a glossary of grants terms;
      + +
      resources and contacts;
      + +
      a mock grants-writing activity +where you will be able to compare your results to a successful grant application
      + +
      plus much much more
      +
    + +
    Free Bonus #2:
    + +
    The Insider Information +Report: 61 Ways To Save Money
    + +
    This valuable special report +contains insider experts tips and techniques that will help you to save +thousands of Dollars. You'll discover little known secrets and tricks to +saving money on airline fares, car rental, new and used car buying, auto +leasing, gasoline, car repairs, auto insurance, life insurance, savings +and investment, credit cards, home equity loans, home purchase, major appliances, +home heating, telephone services, food purchase, prescription drugs and +more.
    + +
    Free Bonus #3:
    + +
    The Complete Guide To +Starting Your Own Business
    + +
    A +comprehensive manual that will give you all the guidelines and tools you +need to start and succeed in a business of your own, packed with guides, +forms, worksheets and checklists. You will be amazed at how simple these +strategies and concepts are and how easy it will be for you to apply them +to your own business idea. Hundreds were sold separately at $40 each... +you get it here for free.
    + +
    Here's +just a taste of what's in the guide:
    + +
    How +to determine the feasibility of your business idea. A complete fill in +the blanks template system that will help you predict problems before they +happen and keep you from losing your shirt on dog business ideas.
    + +
    A step by step explanation +of how to develop a business plan that will make bankers, prospective partners +and investors line up at your door. Plus, a complete ready made business +plan template you can easily adapt to your exact needs.
    + +
    Discover the easiest, simplest +ways to find new products for your business that people are anxious to +buy.
    + +
    How +to make money with your new idea or invention. Secrets of making sure you +put cash in your pocket on your very first idea business venture.
    + +
    Complete, step by step instructions +on how to plan and start a new business. This is must-know must-do information; +ignore it and you stand a good chance to fail. You get specifically designed +instructions for each of the following: a service business, a retail store, +a home based business, a manufacturing company, and more.
    + +
    What nobody ever told you +about raising venture capital money. Insider secrets of attracting investors, +how to best construct your proposal, common mistakes and traps to avoid, +and much more.
    + +
    Checklist +for entering into a partnership. Keeps you from costly mistakes when forming +a partnership.
    + +
    How to select a franchise +business. A step by step guide to selecting a franchise that is best for +you.
    + +
    A complete step-by-step +organized program for cutting costs in your business. Clients of mine have +achieved an average of 28% to 35% cost reduction with this technique, and +you can too. Keep the money in your pocket with this one!
    + +
    What are the secrets behind +constructing a results driven marketing plan? I will lead you step by step +into developing a marketing plan that will drive your sales through the +roof.
    + +
    A complete step by step +guide guaranteed to help you increase your profits by up to 64%, I call +it "The Profit Planning Guide". This is a simple, practical, common sense +strategy, but amazingly enough, almost no one understands or uses it.
    + +
    Free Bonus #4:
    + +
    Guide To Home Business +Success
    + +
    This +is a fast, no-frills guide +to starting and succeeding in a home based business. Here's just a taste +of what's in the guide:
    + +
    Home +business: is it for you?
    + +
    What +are the secrets behind the people who have million dollar home based businesses? +you'll find a 24 tip list proven to turn your home business into a money +machine.
    + +
    Laws and regulations you +must be aware of to avoid legal errors.
    + +
    Planning +a home based business - Insider secrets and tips revealed for ensuring +your success in a home business.
    + +
    Fundamentals +of home business financial planning.
    + +
    Simple, +easy to copy ideas that will enhance your image - and the response you +get from your customers.
    + +
    Common +problems in starting and managing a home based  business - and how +to solve them once and for all.
    +Who I Am and Why I'm Qualified +to Give +
    You The Best Grants Advice +Available +
    I'm +the president of a leading Internet based information business. I'm also +the creator of "The Managing a Small Business CD-ROM" and the author of +five books.
    + +
    I've +been involved in obtaining grants and in small business for the past 23 +years of my life, as a business coach, a manager of a consulting firm, +a seminar leader and as the owner of five successful businesses.
    + +
    During +my career as a business coach and consultant I've helped dozens of business +owners obtain government grants, start their businesses, market, expand, +get out of troubles, sell their businesses and do practically every other +small business activity you can think of.
    + +
    The +Guide presented here contains every tip, trick, technique and strategy +I've learned during my 23 year career. You practically get my whole brain +in a form of an E-book.
    +How the Grants Guide is priced? +
    The Complete Guide To +Government Grants is normally priced at $50, but...
    + +
    ... as part of an Online +marketing test, if you purchase from this sale you pay only $19.99 (that's +75% off ...plus, you still get the FREE valuable bonuses.)
    + +
    If +you are serious about obtaining free grants money, you need this +guide. Don't delay a moment longer. Order Now !!! 
    +P.S. The Complete Guide To Government +Grants will make a huge difference. You risk nothing. The guide is not +the original price of $50, but only $19.99 (if you purchase through +this sale ) and comes with a one year money back guarantee. And you +get four valuable free bonuses which you may keep regardless. Don't delay +a moment longer, ORDER NOW !!!! +
      + +

    Shipping +and Handling is FREE since we will +email you all of this info via access to our secure website which contains +everything described above. +
    +


    +
    +

     Order +Now!!!

    +
    + +

    +
      + + +6662EeWq8-515WKuU5183iwyB0-300LKqX8676juxP8-030cvdb2664Hhl54 + + diff --git a/Ch3/datasets/spam/spam/00477.24ef7a042f97482f884387c75249380c b/Ch3/datasets/spam/spam/00477.24ef7a042f97482f884387c75249380c new file mode 100644 index 000000000..1ddfa8408 --- /dev/null +++ b/Ch3/datasets/spam/spam/00477.24ef7a042f97482f884387c75249380c @@ -0,0 +1,114 @@ +From Blair-09252002-HTML@frugaljoe.330w.com Thu Sep 26 11:30:24 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id E36C516F16 + for ; Thu, 26 Sep 2002 11:30:22 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:30:22 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8Q4GTC32642 for + ; Thu, 26 Sep 2002 05:16:29 +0100 +Received: from richard.330w.com (richard.330w.com [216.53.71.115]) by + webnote.net (8.9.3/8.9.3) with ESMTP id FAA28786 for ; + Thu, 26 Sep 2002 05:17:06 +0100 +Message-Id: <200209260417.FAA28786@webnote.net> +Received: by richard.330w.com (PowerMTA(TM) v1.5); Wed, 25 Sep 2002 + 23:55:18 -0400 (envelope-from ) +From: Blair@FrugalJoe.com +To: zzzz@spamassassin.taint.org +Subject: Free Shipping on all orders at Blair.com +Id-Frugaljoe: zzzz####spamassassin.taint.org +Date: Wed, 25 Sep 2002 23:55:18 -0400 +Content-Type: text/html + + + + + + + + + +
    +
    Never Pay Retail!
    + + + + + + + + +
    + + +  You can count on Blair.com for savings, selection and satisfaction… all day,
    +  every day. Plus, for a limited time, you'll enjoy FREE standard shipping on
    +  every order. So shop now!
    +
    +
          Women's. Must-have fashions.
          Men's. Dress and casual favorites.
          Home. Values for every room.
          Clearance. Closeouts at 40%-75% off.
          +
    + + + +
    + +

    +  Just click the button above to go to Blair.com and enjoy FREE shipping
    +  automatically on your entire order. (You'll see the savings at checkout.)
    +  Don't wait. This offer ends October 15, 2002.
    +
    +


    + +
    + +©BLAIR 2000-2002 | 220 Hickory St., Warren, PA 16366 + + + + + + + + + +
    + + + +
    + +You have received this email because you have subscribed + through one of our marketing partners. If you would like + to learn more about Frugaljoe.com then please visit our website + www.frugaljoe.com If this message was sent to you in error, or +if you + would like to unsubscribe please click here or +cut and paste the following link into a web browser:
    + http://www.frugaljoe.com/unsubscribe.php?eid=384847\~moc.cnietonten^^mj\~1754388\~12a1 +

    + + + + + diff --git a/Ch3/datasets/spam/spam/00478.6c50ff18ef92c52a3342f1c9f090740b b/Ch3/datasets/spam/spam/00478.6c50ff18ef92c52a3342f1c9f090740b new file mode 100644 index 000000000..43f70d965 --- /dev/null +++ b/Ch3/datasets/spam/spam/00478.6c50ff18ef92c52a3342f1c9f090740b @@ -0,0 +1,94 @@ +From bert_327@hotmail.com Thu Sep 26 11:30:26 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id BFE4616F03 + for ; Thu, 26 Sep 2002 11:30:25 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:30:25 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8Q6MEC03747 for + ; Thu, 26 Sep 2002 07:22:14 +0100 +Received: from utpbravo.pascualbravo ([200.13.229.210]) by webnote.net + (8.9.3/8.9.3) with ESMTP id HAA29308 for ; + Thu, 26 Sep 2002 07:22:47 +0100 +From: bert_327@hotmail.com +Received: from freefast.it (200-168-58-251.dsl.telesp.net.br + [200.168.58.251]) by utpbravo.pascualbravo with SMTP (Microsoft Exchange + Internet Mail Service Version 5.5.2653.13) id TT4H28A8; Wed, + 25 Sep 2002 22:44:54 -0500 +Message-Id: <0000275d33f3$0000786a$0000389a@cssazf.fi> +To: , , + , , , + , , + , , , + , , , + , , + , , + , , , + , , , + +Cc: , , , + , , , + , , , + , , , + , , , + , , , + , , , + , +Subject: Attn: PROTECT YOURSELF AGAINST HARMFUL VIRUSES! SONLSNAIK +Date: Wed, 25 Sep 2002 23:46:33 -1600 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +Reply-To: dkboys@hotmail.com + +Here is an excerpt from your local newspaper. +A recent interview with a curious Computer User: + + +Q: Is my computer supposed run this slow? +A: NO, your computer should be as fast as the day you purchased it. + The solution to your problem is NORTON SYSTEMWORKS 2002. + +Q: I think have a Virus, what do I do? +A: QUICK! Before the virus spreads and infects your entire system + you must get a copy of NORTON SYSTEMWORKS 2002! + +Q: I am worried that I may lose my data if my computer crashes, how + do I backup my data safely and EASILY? +A: Everything for your data backup is included in NORTON SYSTEMWORKS 2002. + +Q: I occasionally need to send a fax with my computer, what will make + this EASIER for me? +A: Winfax, the easiest to use fax software available is also included + in NORTON SYSTEMWORKS 2002! + +Q: This Systemworks 2002 sounds like it does ALOT for my computer, can + anyone use this software? +A: Yes, it is EASY to use and tech support is included. + NORTON SYSTEMWORKS 2002 is the best software available on the market + and helps you and your PC have a better relationship! + +Q: Ok, but wait, it must cost a TON of money, right? +A: Well, usually yes, -BUT- this is a SPECIAL OFFER. It sells at your local + computer store for $99 but it is available for a LIMITED TIME for + ONLY $29.99 & FREE SHIPPING!!!! + +Q: WHAT A DEAL! So, HOW DO I ORDER? +A: To Order, Click HERE -> http://168.75.161.77/systemworkse123.htm <- + + +Q: GREAT, THANKS! + + +Q: One more question, how do I get REMOVED from this DARN EMAIL LIST? + +A: That is NOT a problem. Click here -> http://168.75.161.77/removeme.html + And you will be removed within the legal period of 5 business days. + + +ISAPP opp code djT*&204 + + diff --git a/Ch3/datasets/spam/spam/00479.a2cd6780001042d8203b05a6ab0f34ac b/Ch3/datasets/spam/spam/00479.a2cd6780001042d8203b05a6ab0f34ac new file mode 100644 index 000000000..1c3463bc9 --- /dev/null +++ b/Ch3/datasets/spam/spam/00479.a2cd6780001042d8203b05a6ab0f34ac @@ -0,0 +1,81 @@ +From crackmice-admin@crackmice.com Thu Sep 26 11:30:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id DF50516F16 + for ; Thu, 26 Sep 2002 11:30:27 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:30:27 +0100 (IST) +Received: from dogma.slashnull.org (localhost [127.0.0.1]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8Q7uGC06182; + Thu, 26 Sep 2002 08:56:16 +0100 +Received: from VL-MS-MR005.sc1.videotron.ca (relais.videotron.ca + [24.201.245.36]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id + g8Q7rTC06111 for ; Thu, 26 Sep 2002 08:53:29 +0100 +Received: from netscape.net ([24.203.255.139]) by + VL-MS-MR005.sc1.videotron.ca (iPlanet Messaging Server 5.2 HotFix 0.9 + (built Jul 29 2002)) with SMTP id + <0H31005KPCKSPH@VL-MS-MR005.sc1.videotron.ca> for mice@crackmice.com; + Thu, 26 Sep 2002 03:54:04 -0400 (EDT) +From: AnawatyTrucks@netscape.net +Subject: Never pay for the goodz again (8SimUgQ) +X-Sender: Nova Frymark +To: Patricia@netscape.com +Message-Id: <0H3100571CM3PH@VL-MS-MR005.sc1.videotron.ca> +Organization: X03Mv28k05mA07uwfBJn1I +MIME-Version: 1.0 +X-Mailer: KMail [version 1.2] +Importance: Normal +X-Priority: 3 (Normal) +Iplanet-SMTP-Warning: Lines longer than SMTP allows found and truncated. +X-Comment: 05 +Sender: crackmice-admin@crackmice.com +Errors-To: crackmice-admin@crackmice.com +X-Beenthere: crackmice@crackmice.com +X-Mailman-Version: 2.0.10 +Precedence: bulk +Reply-To: mice@crackmice.com +X-Reply-To: mendyfredrickao6bmdpgtr@yahoo.com +List-Unsubscribe: , + +List-Id: http://crackmice.com/ +List-Post: +List-Help: +List-Subscribe: , + +List-Archive: +Date: Thu, 26 Sep 2002 01:00:53 -0400 +Content-Type: multipart/mixed; boundary="Boundary_(ID_57z4OPjIWZtVBINVV279ZQ)" + + +--Boundary_(ID_57z4OPjIWZtVBINVV279ZQ) +Content-type: text/html; charset=ISO-8859-1 +Content-transfer-encoding: QUOTED-PRINTABLE + +
    + + +
    +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id CDC1F16F16 + for ; Thu, 26 Sep 2002 11:30:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 11:30:31 +0100 (IST) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8Q9qkg10534 for + ; Thu, 26 Sep 2002 10:52:46 +0100 +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 00CE83422D; Thu, 26 Sep 2002 10:53:20 +0100 (IST) +Delivered-To: linux.ie-ilug@localhost +Received: from localhst1607.com (66-178-46-141.reverse.newskies.net + [66.178.46.141]) by lugh.tuatha.org (Postfix) with SMTP id 365B13422D for + ; Thu, 26 Sep 2002 10:52:50 +0100 (IST) +From: "VICTOR SANKOH" +Reply-To: victorsankoh@mail.com +To: ilug@linux.ie +X-Mailer: Microsoft Outlook Express 5.00.2919.6900 DM +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Message-Id: <20020926095250.365B13422D@lugh.tuatha.org> +Subject: [ILUG] WE NEED YOUR ASSISTANCE TO INVEST IN YOUR COUNTRY +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Fri, 13 Jul 2001 10:53:02 +0200 +Date: Fri, 13 Jul 2001 10:53:02 +0200 +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id g8Q9qkg10534 +Content-Transfer-Encoding: 8bit + +Dear Sir/Madam, + +I am well confident of your capability to assist me in +a transaction for mutual benefit of both parties, ie +(me and you) I am also believing that you will not +expose or betray the trust and confidence I am about +to establish with you. I have decided to contact you +with greatest delight and personal respect. + +Well, I am VICTOR SANKOH, Son to Mr.FODAY +SANKOH +who was arrested by the ECOMOG PEACE KEEPING FORCE +months ago in my country Sierra Leone. +Few days before the arrest of my father, he confided +in me and ordered me to go to his underground safe and +move out immediately, with a Deposit Agreement and +Cash Receipt he made with a security Company in +Abidjan Cote d'Ivoire where he deposited One Iron Box +containing USD$ 22 million dollars cash (Twenty Two +Million dollars). + +This money was made from the sell of Gold and Diamond +by my FATHER and he have already +decided to use this money for future investment of +the family before his arrest. + +Thereafter, I rushed down to Abidjan with these +documents and confirmed the deposit of the box by my +father. Also, I have been granted political stay as a +Refugee by the Government of Côte d'Ivoire. + +Meanwhile, my father have instructed me to look for a +trusted foreigner who can assist me to move out this +money from Côte d'Ivoire immediately for investment . +Based on this , I solicit for your assistance to +transfer this fund into your Account, but I will +demand for the following requirement: + +(1) Could you provide for me a safe Bank Account where +this fund will be transferred to in your country or +another neaarby country where taxation will not +takegreat toll on the money? + +(2) Could you be able to assist me to obtain my +travelling papers after this transfer to enable me +come over to meet you in your country for +theinvestment of this money? + +(3) Could you be able to introduce me to a profitable +business venture that would not require much technical +expertise in your country where part of this fund +willbe invested? + +Please, all these requirements are urgently needed as +it will enable me to establish a stronger business +relationship with you hence I will like you to be the +general overseer of the investment thereafter. I am a +Christian and I will please, want you to handle this +transaction based on the trust I have established +on you. + +For your assistance in this transaction, I have +decided to offer you 12% percent commission of the +total amount at the end of this business. The security +of this business is very important to me and as such, +I would like you to keep this business very +confidential. I shall be expecting your urgent reply. +Thank you and God bless you. + +VICTOR SANKOH + + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00481.5c95b526e965fa325044123c4ce29c1f b/Ch3/datasets/spam/spam/00481.5c95b526e965fa325044123c4ce29c1f new file mode 100644 index 000000000..381991b9c --- /dev/null +++ b/Ch3/datasets/spam/spam/00481.5c95b526e965fa325044123c4ce29c1f @@ -0,0 +1,1712 @@ +From webmaster@szdrx.com Thu Sep 26 12:18:58 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 42E3016F03 + for ; Thu, 26 Sep 2002 12:18:31 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 12:18:31 +0100 (IST) +Received: from ywxb ([61.144.189.72]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g8QB8Qg14711 for ; + Thu, 26 Sep 2002 12:08:30 +0100 +Date: Thu, 26 Sep 2002 12:08:30 +0100 +Message-Id: <200209261108.g8QB8Qg14711@dogma.slashnull.org> +From: =?GB2312?B?tdrKrtK7vey159fT1bnX6c6vu+E=?= +Subject: =?GB2312?B?0rvN+KGwu92hsczsz8KjrNK71bnM7M/C1qotLS0tMjAwM8TqNNTCMcjVLS00?= +To: undisclosed-recipients:; + + =?GB2312?B?yNW12squ0ru97NbQufq5+rzKtefX08nosbihorXn19PUqsb3vP6horHtw+bM?= + + =?GB2312?B?+dew1bnAwLvhu7bTrbGow/uyztW5o6E=?= +To: fma@zzzzason.org +Content-Type: multipart/mixed; + boundary="=_NextPart_2rfkindysadvnqw3nerasdf";charset="GB2312" +MIME-Version: 1.0 +Reply-To: webmaster@szdrx.com +Date: Thu, 26 Sep 2002 19:11:11 +0800 +X-Priority: 3 +X-Mailer: EhooSend 2002d + +This is a multi-part message in MIME format + +--=_NextPart_2rfkindysadvnqw3nerasdf +Content-Type: text/plain +Content-Transfer-Encoding: 7bit + +µÚʮһ½ìÖйú¹ú¼Êµç×ÓÉ豸¡¢µç×ÓÔªÆ÷¼þ¡¢±íÃæÌù×°Õ¹ÀÀ»á½«ÓÚ2002Äê4ÔÂ1ÈÕ--4ÈÕÔÚÉîÛÚÖйú¹ú¼Ê¸ßм¼Êõ³É +¹û½»Ò×»áÕ¹ÀÀÖÐÐÄÂ¡ÖØ¾ÙÐС£ +ÓûÖªÕ¹»áÏêÇ飬¾´ÇëµÇ¼ÎÒÃÇÍøÕ¾£ºhttp://www.e-dowell.com£¨¶àÈËÐеç×Ó½»Ò×Íø£©¡£ +ÔÚÉç»á¸÷½çµÄ´óÁ¦Ö§³ÖÏ£¬¶àÈËÐеç×ÓÕ¹ÒѾ­³É¹¦¾Ù°ìÁËÊ®½ì£¬¸ÃÕ¹»áÒò²Î¹ÛÕßÖÚ¶à¡¢¶©»õÁ¿´ó¶øÉî»ñ¹ã´ó³§ +ÉÌºÃÆÀ¡£¸ÃÕ¹ÒѳÉΪһÄêÒ»¶ÈµÄµç×ÓÐÐҵʢ»á£¬ÊǹúÄÚͬÐÐÒµÖÐ×î¾ßÓ°ÏìÁ¦¡¢ºÅÕÙÁ¦µÄ´óÐÍÕ¹ÀÀ»áÖ®Ò»¡£ÎÒÃÇ +½«ÓÚ2003Äê4ÔÂ1ÈÕÖÁ4ÈÕ¾Ù°ìµÚʮһ½ìÖйú¹ú¼Êµç×ÓÉ豸¡¢µç×ÓÔªÆ÷¼þ¡¢±íÃæÌù×°Õ¹ÀÀ»á¡£ +ʱֵ¹úÇì½Ú½«ÖÁ£¬¶àÈËÐй«Ë¾×£Äú½ÚÈÕÓä¿ì£¬ÊÂÒµÓгɣ¡ +ËæÐŸ½ÉÏÑûÇ뺯ͼƬ£¬¾´ÇëÖ¸µ¼¡£»¶Ó­×Éѯ×éί»áÃØÊé´¦µç»°£º0755-83502458¡¢83502441£¬»¶Ó­À´µç×Éѯ¡£ +2003µÚʮһ½ìÖйú¹ú¼Ê[Åú×¼Îĺţº¹ú¿ÆÍâÉó×Ö£¨2002£©0737ºÅ] +µç×ÓÔªÆ÷¼þ¡¢É豸¡¢Ó¡ÖƵç·¡¢±íÃæÌù×°Õ¹ÀÀ»á +2003 the 11th China International Electronic Equipments and +Components & Surface Mounting Technology Fair +ÐÅÏ¢²úÒµ²¿¡¢¿ÆÑ§¼¼Êõ²¿¡¢Öйúµç×Óѧ»á¡¢ÉîÛÚÊÐÕþ¸®ÖصãÖ§³ÖµÄ´óÐ͵ç×Óרҵչ +ʱ¼ä£º 2003Äê4ÔÂ1ÈÕÖÁ4ÈÕ +TIME£ºApril 1st to 4th , 2003 +µØµã£º ÉîÛÚÖйú¹ú¼Ê¸ßм¼Êõ³É¹û½»Ò×»áÕ¹ÀÀÖÐÐÄ +ADD£ºCHINA HI-TECH FAIR EXHIBITION CENTRE £¨SHENZHEN£© +Åú×¼µ¥Î»: ÖлªÈËÃñ¹²ºÍ¹ú¿ÆÑ§¼¼Êõ²¿ +Approver: Ministry of Science and Technology of People's Republic of China +Ö÷°ìµ¥Î»/Sponsors: +Öйúµç×Óѧ»á Chinese Institute of Electronics (CIE) +Э°ìµ¥Î»/CO-ORGANIZER£º +Öйú°ëµ¼ÌåÐÐҵЭ»á China Semiconductor Association +Öйúµç×Ó±¨Éç China Electronics News Agency +³Ð°ìµ¥Î»/Organizer £º +Öйúµç×Óѧ»áÕ¹ÀÀ²¿ Exhibition Dept. of Chinese Institute of Electronics +ÉîÛÚÊжàÈËÐÐʵҵÓÐÏÞ¹«Ë¾ SHENZHEN DOWELL INDUSTRIAL CO.,LTD +Ϊ³ä·Ö±£Ö¤Õ¹»áÖÊÁ¿£¬×Ô2003ÄêÆð£¬¶àÈËÐеç×ÓÕ¹ÓÉÒ»ÄêÁ½½ì¸ÄΪһÄêÒ»½ì +չƷÀà±ð£º +¡´Ò»¡µ¡¢µç×ÓÔªÆ÷¼þ¡¢µç×ÓÉ豸¡¢Ó¡ÖƵç·¡¢±íÃæÌù×° ¡´ËÄ¡µ¡¢µçÔ´¡¢µç³Ø¡¢±äѹÆ÷ +¡´¶þ¡µ¡¢×èÈݲúÆ· ¡´Î塵¡¢µç×Ó¹¤¾ß +¡´Èý¡µ¡¢Á¬½ÓÆ÷¡¢½Ó²å¼þ ¡´Áù¡µ¡¢ÇåÏ´¡¢¾»»¯¡¢·À¾²µç +ͬÆÚ¾Ù°ì£º¹ú¼Ê¹âµç²úÒµ¡¢ÏÔʾÆ÷¼þÕ¹ÀÀ»á +²ÎÕ¹·ÑÓÃ: +Àà ±ð 9ƽ·½Ã× ¿Õ µØ ÌØ×°·Ñ +¹ú¼ÊÇø USD 2800/9m2 USD 300/m2 USD 10/m2 +A Çø RMB 7800/9m2 RMB 800/m2 RMB 25/m2 +B Çø RMB 6800/9m2 RMB 700/m2 RMB25/m2 +°üÀ¨£ºÇ¢Ì¸×ÀÒ»ÕÅ¡¢ÒÎ×ÓÁ½°Ñ¡¢É䵯¶þÕµ¡¢µçÔ´Ò»¸ö¡¢é¹°åÖÆ×÷¡¢300×ÖÆóÒµ¼ò½é¡£ +»á¿¯¹ã¸æ£º ·â Ãæ £¤ 28000 ·Æ Ò³ £¤ 10000 ·â µ× £¤ 18000 + ²ÊÈ«°æ £¤ 4000 ·â ¶þ £¤ 10000 ²Ê°ë°æ £¤ 2000 + ·â Èý £¤ 8000 ºÚ°×°æ £¤ 2000 + ¹° ÃÅ £¤ 3800 ÊƱ £¤1000/ÍòÕÅ + Éý¿ÕÆûÇò £¤ 3800 Â䵨ÆûÇò £¤ 2800 +×¢£º·ÆÁÖÓɿͻ§×Ô¼ºÌṩ£¨¿í210mm*285mm£© +»ã¿îµØÖ·: +ÕÊ »§£º ÉîÛÚÊжàÈËÐÐʵҵÓÐÏÞ¹«Ë¾ +¿ª»§ÐУº ¹¤ÐÐÉîÛÚÍåÖ§ÐÐ +ÕÊ ºÅ£º 4000027719200016455 +×éί»áÃØÊé´¦: +ÉîÛÚÊжàÈËÐÐʵҵÓÐÏÞ¹«Ë¾ +µØÖ·:ÉîÛÚÊи£ÌïÇøÐÂÎÅ·¾°Ô·´óÏÃB2603ÊÒ +Óʱࣺ518034 +µç»°:(86) 755-83503744¡¢83502441¡¢83502448¡¢83502458 +´«Õ棺(86)755-83088130 83502435 +ÍøÖ·Website: www.e-dowell.com www.szdrx.com +E-mail:webmaster@szdrx.com +ÁªÏµÈË:ÕÅÏÈÉú + + + + + + + + + + + + + +¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ + +--=_NextPart_2rfkindysadvnqw3nerasdf +Content-Type: application/octet-stream; + name="2003µç×ÓÕ¹ÓʼþÑûÇ뺯¼òÌå.jpg" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; + filename="2003µç×ÓÕ¹ÓʼþÑûÇ뺯¼òÌå.jpg" + +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 +6Gv9V/Sfi/t5eH0GH0PUwugwug/1X9H4v7eZGLlJJJ5PTXIYR04+Xy/k1w3jj6gAOTQXU+g/iUl1 +PoP4nXw/yZy6WAA9bmAAAeX5T9Yj8p6hj1mknfapRaSSxxNY3VS9PLBvq8nSVidm1x8UmXXaOiNM +5KHFLK4m/aMeteUAelpNLTZp4ynHLfvLbok2800aD1uH1NN/k9ymnTiMceLGm0VlV8ZyccLoS5TS +6u28AHJt4+v9bn9C7S3930jlt3Zngp1/rc/oTrrlbotsFl788zr8MfKdnlHfXKPZ4ysczCaO53/p +X3Q7nf8ApX3Qmol3UbrlbGC24cVjOeZBxSqjLxbaLe53/pX3Ry6uVVMIzWHlsvAt8mesS+U9Q8vy +Z6xL5T1Dnl21j0Hj6/1uf0PYPH1/rc/oXDsy6XaW/u+kctu7M8CzyjvrlHs8ZWOZCuuVui2wWXvz +zIdzv/Svui6nynLOXXXK2MFtw4rGc8yXc7/0r7odzv8A0r7o1uJqqnFKqMvFto0+TPWJfKVXVyqp +hGaw8tlvkz1iXykvRO3qAA5Ojw9R6xZ8zErpSpjVw2x4jUesWfMy1aSdlMJ1rOc5Ozmprm4Sck8P +HA5GcoS3ReGcacW01ho0aKpTsc5ejBZYozjLeOPLkHzZKUHGEZeEkVHq6K7taFl+dHgzQeX5NlJX +4SbTXE9Q5ZTVdJeAAq1GohRFtvMvBGVY/KduXGtPlxZl00XLUQS65I2Tdk3OXNmryZXutc3+VHXq +OfdVa/1uf0LPJnrEvlK9f63P6Fnk1pah5eMxH+1fl6Paw7Rw3LcvAmePrWnqptP7GryZOUlNSk2l +jGTFx42svOm4AGWnl+U/WI/KYz0ddp7bblKEcrGOZXRoJym1cnGOPBnWWSMWcsQNWt00NPt2NvPU +oqip2xi+TeC7+U0gdXNHp/06r9UjBqIRqvlGDykJZSzT21yQMmgvndGSnh7fE1nKzTpA8vym09Qs +PlE9Q8XVTVmonJcs4NYds5dL/JifbyeOG09M8/yV/wAz6HoEy7XHoABlQAAADkpKKzJpLqwM+vrl +ZR5qy084POt01lVe+aS44wet29XtI/cy+UbYToSjNN7vBm8bembIw6f1iv5kWa/1uf0K6GlfBt4S +kietkpamTi011Rv5Z+EaqJ2xk4cdvgbvJ1LhCU5LDfBFXk2yEN++SjnHNm7t6vaR+5jK3pqT5WA5 +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 +dToa6+MvPfv5HX2jGqy6TRu2W6xNQX7letSjqZJLCWD2DFqtFK23fCS480zMy55Wzh50LJwzsk45 +6M5KTk8ybb6s1/0239USVfk2e7z5LHuNe0Z1WjydFx02X+Z5NRyEIwioxWEjpzvNdIHjauGzUzXv +yeyYtZpJ33KUMJY8S43VZyjzDpuj5MePOsSfuRcvJ1Say5M37Rn1ryjp7EdHRF5UF9SyNVcXmMIr +4Inuvq8NNxaaeGj2tNa7qYzaw/Eor0EVe5Sw4Z4I2JJLCWEiZWVZNAAMNAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAACjWWSqqTg8PJj73d+v9jdqq1Ol5/LxPKMZdvR45LG6x9pod8+Muv1MJvrg +7NAoppN9fiZrtPKmO6Ti+OOBKuFk3P7dsjp1W3CbcuhQuaBro0m7bOcljnhDtq2YzlLVU171OU9u +V0yZ7+yW2NXFLm+pt1te6jK5x4nmlyZ8fMX6KCndx4pLOD0zLoIba3J/mZqNY9OXku8gAFcwAAAA +AKrJU2RcZTj9y18meM08vgZt06ePH2bO7ab2v7l+mrrr3dnLdnnxPLNvk78/0JLy6Z42Y9mo0s7L +pSUo4fVlfcrP1R+5Vdntp8+bIed7yXTUmWu3C6nTyujui4rjjiVYfRjj7yN3+mjuVn6o/c31rbXG +PRYPI873noaDPYvPU1i4+SXXNaQAbcAAAAAAMOusnG1KMmljwZuPP8ofjL4GcunTxfyc0ts3fHdN +48cs3dtX+uP3PN08d1u3qn/sVcmSXTrlhMq9i2TjVKS5pHkznKbzJts9BWxs0r85OW3ieaMk8U1t +p0+ldqU5PEDXB0VxahKK+pTC2MNDhvi00kYknJpLmxvRq572m7rM+nL7m7QylKpuTbefE809Dyf+ +C/iMe18knq1AA28wAAAAAAAAAAAAAAAAVy9Zh8r/AILCuXrMPlf8AVSp/vxWfyss7H/I7L1mHyv+ +Cw5/ix+mvaqux/yHY/5FoH4sPo9qq7H/ACHY/wCRaB+LD6Paqux/yHY/5FoH4sPo9qq7H/Idj/kW +gfiw+j2qrsf8h2P+RaB+LD6Paqux/wAh2P8AkWgfiw+j2qrsf8h2P+RaB+LD6Paqux/yHY/5FoH4 +sPo9qq7H/Idj/kWgfiw+j2qrsf8AIdj/AJFoH4sPo9qq7H/Idj/kWgfiw+j2qrsf8h2P+RaB+LD6 +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 +b7TfL0t0LHtUk3z4E8ecn0PLjJxeYtp+4l2tn65fc539Nfir7tmopjNObbykYCbsm1hyf3IHfxYX +CatZt26uZpt1EJ1OKTyZQaywmVlvwS6C3TKLuW546FQLlNzRHoy7Oc8SfGPgShOM03HilwPNy+PH +nzOqcorCk0vcea/puNba9m2fZXQcm8Y/YyUuKtW7iiGX9zh1w8XrLNpbt6Er6oYWc/A5qJRUa3lY +3JmA7l4xkxP08lllX2bYTjZqcxeVtMln40viRjJxeYtr4BvLy+ZvDx+t3PpLdtmsf9mPxO2epr4I +xZOucnHDk8dDM8OpJvq7PZvqjCurzXwazlnn5allc0xlnDfj8frbbd7Ldt85PuqeXnC4l3gjzN8m +sbnjod7Wz9cvucL+ntna+z0ePHlg8z831JdrZ+uX3IHXxeK4b2lu3qSipwxLkcUIKGxej0POdk2s +OTa+JzL6nKfprrtfZ6VdcK87FjJ59n40vicU5R5SaONtvL5nXx+K4W23aW7elJNqOGk11RGyEprC +sSXj7zA5yksOTf1OZfU5z9PZ8/8AhfZvrqlXBxViafLhyMVsNljjnOPEjl9Th1w8dxttqW7ejS4O +K2Y4L6huuVm1+knkwRlKPotr4HMtvOeJz/0/Nu19m9Szqmk+UTLqvx5FalJPKbT6nG3J5byzeHi9 +Mt/0lu29be7x3+jhHY3VzkkpcfAwOcnHDk8dCJj/AE+97q+z02oysT4bomTWYdy+BSpyjyk0cbbe +W8s14/DcMt7S5bj0oxUVHjyWDlarzJwabfPDPOy34s7GUo+i2vgYv6a67X2eklLe3u4dDDqvx5Fe ++Wc7nnrk425PLeWb8XhuGW9pcttmkglHepc+aLq3ubanuXh7jzVJpNJvDOqcorCk18DOfguVt2sy +03xui5yi5LOeBl1aSt4PLfMoOttvLeWbw8PpluVLluNekrhjfltr9iVl6dkYQfjxaMSk0mk2kwnh +5XMl8O8rlae3D0Z1uUotSxj9zNrIKLi1nj1ZT2tn65fcjKTk8ybfxJ4/DljZbS5StOkrrknJ8WvB +ndTetuyDz1aMqbXJ4ycN/i3n7Wm+NNem1Cxsm8Y5NnNXCEWpL0n4GU623zeRPFrP2lN8abdK4ql8 +ePNl0c9El7jzE2uTJdrP9cvucs/09ytsqzJ6S+Jl1KlGxWvGF4dTMpyjyk0JTlJYlJv4lw8Fxy3s +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 +usm9so7fBND4Nz22wyfmY3wfwXE6nmON8Fw6F8tJdJYbh9EdWluSxmv7GdV09p9r9Jt7BKMt2PE7 +qsOiSlLbkjp67a5Pe47eiRHUQnbbCCXmLi2b+HL/AHdqFTbCUYK1JvkkzvZ3dp2fbLd0yy7UVt3V +Sim8PDYshJayE4xyscWZ037bc0cY1ucd+Z+KNRllXKGsjOEXtlzLNQ7kkqlnPN9DU4c8puqrFLTX +9quMJekiM5y1dmyvhBc2djpbLHm6bx0R2WlnXLdRLHuZOW9z75aoRUIqMVhIp1dcp15jLCSeV1I0 +WX9psshw6ndXKxRUYR3KSafAvwxJZkzUadW0uWWmmcpoVyf9xqS8MGvR1uunEubecFNrsqvk4VLj +4ozp09rbZFWlo7WTe5x2vwNOv/Biv8hoapQjKUlhyfIlq65W1JQ4tPJZOEuX72bU6aFNSlFvLfia +J1O3RxSXnJJoonVqrUoz5ZLbY31xiqnmKXEi29c8q7HLtKIzXnLmbjJRXbZcrbeGOSLdQ7Ukqlz5 +voWMZc2RXrLvN7KHGUueCvY9JOE+cWsSLtPpuzbnN7pvxL5xU4uMllMa2e0nE6ISU4qUXlMTjGcX +GSyjJCu3T24h51cn9jRf2nZ/2sbi7Zs1eKzS1iw4KrzeRVDUuMZw2txfJdC3Gs6f7EI1aqDbiuMu +fIzy7SY/1/3c0sa5XLzJcOPM9ExJazP/APw2rkWOfk5rPqq6nidjcfDKKpaeiNbn2kml0ZrsrjZH +bNZRju0coputtx6CxcL8bT0FcknNt4fJGsrobdMcx2vHIlbGUq2oPDfJlnTGV3kx6uqanZZw2tHf +/Tf/AJ1OS0uoksOzK97Odzv27d629MmXXc1JtZTVN212P0VFYNb5GJabUJYVuF8TZBOMUm8tLmaj +nn/yxKnU0tqt5TK4947xLH4mOJ6RkvpuV/aVeJLG8c996VuF25W3vChxNq22QTayms4ZjlDV2LbP +k+fI2wjshGPRYEZzR7Gv9EfsZtdXCFScYpPPgid8L+031SyuhVsv1Ml2i2xX0FXHjnbTXXXKuMnX +HLXQtSSWFwQSSSS5I5POx7eLxwNOdu3m2Q3SunnG1knpGqO0Us8M4LI0TWknmPny44OVQ1M1FN7Y +rqY07+31VGyGxPtHlvlg9OqGyuMct48WZbdLKM+0pxnoaqnN1rtFiXiiyaYzy3OEgAacgAAAAAAA +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 + +--=_NextPart_2rfkindysadvnqw3nerasdf-- + + diff --git a/Ch3/datasets/spam/spam/00482.980c7ceb9333bc5027cd8d1d360a8c6f b/Ch3/datasets/spam/spam/00482.980c7ceb9333bc5027cd8d1d360a8c6f new file mode 100644 index 000000000..c7cea1c1d --- /dev/null +++ b/Ch3/datasets/spam/spam/00482.980c7ceb9333bc5027cd8d1d360a8c6f @@ -0,0 +1,53 @@ +From tanya_clark@excite.com Thu Sep 26 16:40:14 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 7A00916F83 + for ; Thu, 26 Sep 2002 16:38:17 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 16:38:17 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8QCNig17870 for + ; Thu, 26 Sep 2002 13:23:45 +0100 +Received: from excite.com (200-204-182-45.dsl.telesp.net.br + [200.204.182.45]) by webnote.net (8.9.3/8.9.3) with SMTP id NAA31173 for + ; Thu, 26 Sep 2002 13:24:18 +0100 +From: tanya_clark@excite.com +Reply-To: +Message-Id: <030a58d08d7a$6664e8c7$7db17be5@sxurqc> +To: +Subject: $14.95 per year domain names +Date: Thu, 26 Sep 2002 18:11:48 -0600 +MIME-Version: 1.0 +Content-Type: text/plain; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2462.0000 +Importance: Normal +Content-Transfer-Encoding: 8bit + +AFFORDABLE DOMAIN REGISTRATION FOR EVERYONE + + +The new domain names are finally available to the general public at discount prices. Now you can register one of the exciting new .BIZ or .INFO domain names, as well as the original .COM and .NET names for just $14.95. These brand new domain extensions were recently approved by ICANN and have the same rights as the original .COM and .NET domain names. The biggest benefit is of-course that the .BIZ and .INFO domain names are currently more available. i.e. it will be much easier to register an attractive and easy-to-remember domain name for the same price. Visit: http://www.domainsforeveryone.com/ today for more info. + +Register your domain name today for just $14.95 at: http://www.domainsforeveryone.com/ Registration fees include full access to an easy-to-use control panel to manage your domain name in the future. + +Sincerely, + +Domain Administrator +Domains For Everyone + + +To remove your email address from further promotional mailings from this company, click here: +http://www.centralremovalservice.com/cgi-bin/domain-remove.cgi +(f4)5088VukL9-796qVfq4651flcG5-695tl29 + + + + + + + + diff --git a/Ch3/datasets/spam/spam/00483.50c5dda7dd4710798c15a85ade6e9f93 b/Ch3/datasets/spam/spam/00483.50c5dda7dd4710798c15a85ade6e9f93 new file mode 100644 index 000000000..c9bf8958e --- /dev/null +++ b/Ch3/datasets/spam/spam/00483.50c5dda7dd4710798c15a85ade6e9f93 @@ -0,0 +1,200 @@ +From OWNER-NOLIST-SGODAILY*JM**NETNOTEINC*-COM@SMTP1.ADMANMAIL.COM Thu Sep 26 18:13:06 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 049D016F16 + for ; Thu, 26 Sep 2002 18:13:01 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Thu, 26 Sep 2002 18:13:01 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g8QGh5g28291 for + ; Thu, 26 Sep 2002 17:43:05 +0100 +Received: from TIPSMTP1.ADMANMAIL.COM (TIPSMTP1.ADMANMAIL.COM + [209.216.124.212] (may be forged)) by webnote.net (8.9.3/8.9.3) with ESMTP + id RAA00497 for ; Thu, 26 Sep 2002 17:43:42 +0100 +Message-Id: <200209261643.RAA00497@webnote.net> +Received: from TIPUTIL2 (tiputil2.corp.tiprelease.com) by + TIPSMTP1.ADMANMAIL.COM (LSMTP for Windows NT v1.1b) with SMTP id + <9.00008649@TIPSMTP1.ADMANMAIL.COM>; Thu, 26 Sep 2002 11:18:53 -0500 +Date: Thu, 26 Sep 2002 11:00:05 -0500 +From: Great Offers +To: JM@NETNOTEINC.COM +Subject: MAKE MONEY GIVING AWAY FREE STUFF! +X-Info: 134085 +X-Info2: SGO +MIME-Version: 1.0 +Content-Type: text/html; charset="us-ascii" + + + +FREESTORES - MAKE MONEY GIVING AWAY FREE STUFF!!! + + + + + +
    GET FREE ACCESS TO X X= + X 


    GUARANTEED 100% F= +REE PASSWORDS
    GET INTO = +PAYSITES FOR FREE
    !

    Click Here to Enter!
    + + + +
    + + + + + + + + + +
    + + + + + + + + + + + +
    + + + + + + +
    + + + + + + + + +
    + + + + + +
    +

    Make Money With + Your Own Free Stuff Website!
    +
    Get Your Own Free Stuff + Website. With FREEstores.biz, there is no need + to learn any programming skills. Your store is + automatically set up for you. Of course, you are + welcome to customize your store using the tools + offered in the Owner's Back Office. Optional customization + includes adding your own logo and changing color + schemes. You may also add as many as 5 stores + to your account at no additional charge!

    +

    Access to hundreds of + Free products!
    + FREEstores.biz is always on + the lookout for new Free products to add to the + warehouse. Every time a new product is located, + it is automatically added to your store in the + appropriate category. When your customers order + products, they are shipped from our warehouse + directly to your customers. There is no inventory + for you to manage - ever!

    +
    + + + + + + + + + + + + +
    +

    +
    +
    Act now + and receive
    + a brand-new 1.2 Ghz
    + Gateway© Computer
    +
    +
    +
    +

    +
    + + + + + +
    + + + + +
    +

    Monthly + Commissions!
    +
    You earn $3 for every Free item ordered by your + customers. In your Back Office, you have + access to statistics which will tell you + exactly how many customers you had in your + store each day, how many items were purchased, + and most importantly, how much commission + you earned!

    +
    +

    +
    +
    +
    +
    + + + + + + + + + +
    +
    TRUE MAKE MONEY WHILE YOU SLEEP BUSINESS!
    +
    + +
    +

    + +T +
    + +You are receiving this mailing because you are a +member of SendGreatOffers.com and subscribed as:JM@NETNOTEINC.COM +To unsubscribe
    +Click Here +(http://admanmail.com/subscription.asp?em=JM@NETNOTEINC.COM&l=SGO) +or reply to this email with REMOVE in the subject line - you must +also include the body of this message to be unsubscribed. Any correspondence about +the products/services should be directed to +the company in the ad. +%EM%JM@NETNOTEINC.COM%/EM% +
    + + diff --git a/Ch3/datasets/spam/spam/00484.a34bda1ad8a88b5b21b13b8ad05d0dd3 b/Ch3/datasets/spam/spam/00484.a34bda1ad8a88b5b21b13b8ad05d0dd3 new file mode 100644 index 000000000..f7f9c74e7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00484.a34bda1ad8a88b5b21b13b8ad05d0dd3 @@ -0,0 +1,144 @@ +From 2002biz2biz2513@Flashmail.com Mon Oct 7 22:42:03 2002 +Return-Path: <2002biz2biz2513@Flashmail.com> +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id D2F6116F17 + for ; Mon, 7 Oct 2002 22:41:15 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 22:41:15 +0100 (IST) +Received: from mail.qdrail.com ([61.179.116.173]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97LDbK17278 for ; + Mon, 7 Oct 2002 22:13:37 +0100 +Received: from yu ([211.162.242.171]) by mail.qdrail.com with Microsoft + SMTPSVC(5.0.2195.2966); Tue, 8 Oct 2002 05:15:19 +0800 +Message-Id: <000048521f46$00000709$000076c3@jl> +To: , , , + , , + , , + , , +Cc: , , + , , + , , + , , + +From: 2002biz2biz2513@Flashmail.com +Subject: FWD:Direct marketing is working 16889 +Date: Tue, 15 Oct 2002 13:07:24 -1900 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +X-Originalarrivaltime: 07 Oct 2002 21:15:20.0062 (UTC) FILETIME=[A42799E0:01C26E46] + +There is NO stumbling on to it! + +The greatest way of marketing this century is undoubtedly direct +e-mail. It's similar to the postman delivering a letter to your +mailbox. + +The ability to promote your product, service, website, or +MLM/network marketing opportunity to millions instantly is +what advertisers have been dreaming of for over 100 years. + +We e-mail your one page promotion to a list of our +general addresses. The greatest part is, it's +completely affordable. + +E-MAIL MARKETING IS THE ANSWER! + +How do we know? + +We know because that's exactly what we do. + +It's a proven fact that you can attract new business through +Direct E-mail Marketing. + +The profits that E-mail advertising generate are amazing! + +We are living proof. + +We are a direct E-mail internet advertising company and +our clients pay us thousands of dollars a week to E-mail +their products and services. + +We Don't want any one spending thousands on a direct email marketing campane +with out testing the market to see how it works. + +STANDARD PRICING AND PROCEDURES + +----------------------------------------------------------------------- + +EXTRACTING: + +Our list of general Internet addreses are actually extracted +from the most popular web sites on the Internet. The addresses are verified +and run through our purification process. The process includes addresses +run against our custom remove filter of 2,492 keywords, as well as +through our 192MB remove /flamer list. The EDU, ORG, GOV, MIL, and US +domains are removed, as well as other domains that asked not to +receive e-mail. + +----------------------------------------------------------------------- + +EVALUATION: $350.00 (optional) +One of our marketing specialists will evaluate your sales letter, and +offer his/her expertise on how to make it the most successful. + +----------------------------------------------------------------------- + +STANDARD PRICING: (Emails Delivered) +1 Million- $700.00 per +2 Million- $600.00 per +3 Million- $500.00 per +4 Million & up - $400.00 per + +----------------------------------------------------------------------- + +SPECIAL OFFER! + +This introductory offer of $300.00 includes: + +1. Set-Up Fee +2. Evaluation of Sales Letter +3. 500,000 e-mails delivered + +----------------------------------------------------------------------- + +PAYMENT POLICY: +All services must be paid in full prior to delivery of advertisement. +----------------------------------------------------------------------- +NOTICE: +Absolutely no threatening or questionable materials. + +If you are serious about Direct >>Email>> Marketing>>--Fax +the following to (602) 392-8288 +---------------------------------------------------------------------- + +PLEASE FILL THIS FORM OUT COMPLETELY! + +Contact Name: _____________________________________________ + +Business Name: ______________________________________ + +# Years in Business: _________________________ + +Business Type: ______________________________________ + +Address: _________________________________________________ + +City: ____________________ State: ______ + +Zip: ______________ Country: _______________ + +Email Address: _______________________________________________ + +Phone: __________________________ Fax: _______________________ +>>>>>-> << NO Toll-Free Phone #'s >> +------------------------------------------ + + +To get out from our email database send an email to + +mailto:publicservice1@btamail.net.cn + + diff --git a/Ch3/datasets/spam/spam/00485.a5d28b804adbceff7fd75ed9fc8138bb b/Ch3/datasets/spam/spam/00485.a5d28b804adbceff7fd75ed9fc8138bb new file mode 100644 index 000000000..705bffbe7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00485.a5d28b804adbceff7fd75ed9fc8138bb @@ -0,0 +1,144 @@ +From biz2biz2446@Flashmail.com Mon Oct 7 22:42:04 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 0F60316F1F + for ; Mon, 7 Oct 2002 22:41:18 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Mon, 07 Oct 2002 22:41:18 +0100 (IST) +Received: from mail.qdrail.com ([61.179.116.173]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id g97LDdK17283 for ; + Mon, 7 Oct 2002 22:13:39 +0100 +Received: from yu ([211.162.242.171]) by mail.qdrail.com with Microsoft + SMTPSVC(5.0.2195.2966); Tue, 8 Oct 2002 05:15:22 +0800 +Message-Id: <00006250709f$000004fe$000076cd@er> +To: , , , + , , + , , + , , +Cc: , , + , , + , , + , , + +From: biz2biz2446@Flashmail.com +Subject: See your Company sales sky rocket. 4611 +Date: Tue, 15 Oct 2002 13:07:27 -1900 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +X-Originalarrivaltime: 07 Oct 2002 21:15:22.0890 (UTC) FILETIME=[A5D71EA0:01C26E46] + +There is NO stumbling on to it! + +The greatest way of marketing this century is undoubtedly direct +e-mail. It's similar to the postman delivering a letter to your +mailbox. + +The ability to promote your product, service, website, or +MLM/network marketing opportunity to millions instantly is +what advertisers have been dreaming of for over 100 years. + +We e-mail your one page promotion to a list of our +general addresses. The greatest part is, it's +completely affordable. + +E-MAIL MARKETING IS THE ANSWER! + +How do we know? + +We know because that's exactly what we do. + +It's a proven fact that you can attract new business through +Direct E-mail Marketing. + +The profits that E-mail advertising generate are amazing! + +We are living proof. + +We are a direct E-mail internet advertising company and +our clients pay us thousands of dollars a week to E-mail +their products and services. + +We Don't want any one spending thousands on a direct email marketing campane +with out testing the market to see how it works. + +STANDARD PRICING AND PROCEDURES + +----------------------------------------------------------------------- + +EXTRACTING: + +Our list of general Internet addreses are actually extracted +from the most popular web sites on the Internet. The addresses are verified +and run through our purification process. The process includes addresses +run against our custom remove filter of 2,492 keywords, as well as +through our 192MB remove /flamer list. The EDU, ORG, GOV, MIL, and US +domains are removed, as well as other domains that asked not to +receive e-mail. + +----------------------------------------------------------------------- + +EVALUATION: $350.00 (optional) +One of our marketing specialists will evaluate your sales letter, and +offer his/her expertise on how to make it the most successful. + +----------------------------------------------------------------------- + +STANDARD PRICING: (Emails Delivered) +1 Million- $700.00 per +2 Million- $600.00 per +3 Million- $500.00 per +4 Million & up - $400.00 per + +----------------------------------------------------------------------- + +SPECIAL OFFER! + +This introductory offer of $300.00 includes: + +1. Set-Up Fee +2. Evaluation of Sales Letter +3. 500,000 e-mails delivered + +----------------------------------------------------------------------- + +PAYMENT POLICY: +All services must be paid in full prior to delivery of advertisement. +----------------------------------------------------------------------- +NOTICE: +Absolutely no threatening or questionable materials. + +If you are serious about Direct >>Email>> Marketing>>--Fax +the following to (602) 392-8288 +---------------------------------------------------------------------- + +PLEASE FILL THIS FORM OUT COMPLETELY! + +Contact Name: _____________________________________________ + +Business Name: ______________________________________ + +# Years in Business: _________________________ + +Business Type: ______________________________________ + +Address: _________________________________________________ + +City: ____________________ State: ______ + +Zip: ______________ Country: _______________ + +Email Address: _______________________________________________ + +Phone: __________________________ Fax: _______________________ +>>>>>-> << NO Toll-Free Phone #'s >> +------------------------------------------ + + +To get out from our email database send an email to + +publicservice1@btamail.net.cn + + diff --git a/Ch3/datasets/spam/spam/00486.c0a2036a3da75d6d5ac6d19ab4b3d6ec b/Ch3/datasets/spam/spam/00486.c0a2036a3da75d6d5ac6d19ab4b3d6ec new file mode 100644 index 000000000..b13cd4798 --- /dev/null +++ b/Ch3/datasets/spam/spam/00486.c0a2036a3da75d6d5ac6d19ab4b3d6ec @@ -0,0 +1,489 @@ +From cna@insiq.us Tue Oct 8 00:10:39 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 1F1D016F03 + for ; Tue, 8 Oct 2002 00:10:26 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 00:10:26 +0100 (IST) +Received: from mail1.insuranceiq.com (host66.insuranceiq.com + [65.217.159.66] (may be forged)) by dogma.slashnull.org (8.11.6/8.11.6) + with ESMTP id g97N33K20720 for ; Tue, 8 Oct 2002 00:03:03 + +0100 +Received: from mail pickup service by mail1.insuranceiq.com with Microsoft + SMTPSVC; Mon, 7 Oct 2002 19:04:35 -0400 +Subject: Hit the Road with CNA +To: +Date: Mon, 7 Oct 2002 19:04:35 -0400 +From: "IQ - CNA" +Message-Id: <45798701c26e55$e78984a0$6b01a8c0@insuranceiq.com> +X-Mailer: Microsoft CDO for Windows 2000 +MIME-Version: 1.0 +Thread-Index: AcJuQhZmI9l/Tc03RsKcpcRHSEAYvA== +X-Mimeole: Produced By Microsoft MimeOLE V5.50.4522.1200 +Content-Class: urn:content-classes:message +X-Originalarrivaltime: 07 Oct 2002 23:04:35.0765 (UTC) FILETIME=[E7A87E50:01C26E55] +Content-Type: multipart/alternative; boundary="----=_NextPart_000_43A60B_01C26E20.8F5BC480" + +This is a multi-part message in MIME format. + +------=_NextPart_000_43A60B_01C26E20.8F5BC480 +Content-Type: text/plain; + charset="Windows-1252" +Content-Transfer-Encoding: 7bit + + What does it mean to be made in the USA? + CNA is hitting the road to tell you about ingenuity, innovative +products and gutsy spirit. +We encourage you to attend the CNA American Road +Show. You'll get an insider's glimpse of CNA's new products: +a revolutionary long-term care, an innovative annuity and a +ground-breaking new CNA term that'll dominate the market. +CNA management will also share profitable ideas, discuss +service and distribution strategies and unveil exciting +incentive programs. + +8:00 a.m. ? Coffee and rolls +8:15 a.m.-12:00 p.m. ? Road Show presentations + + +Oct. 8 New Orleans, LA +Hilton New Orleans Airport +901 Airline Drive ? Kenner, LA + +Oct. 9 Houston, TX +Marriott Houston Bush IAH +18700 John F. Kennedy Blvd. + +Oct. 10 Dallas, TX +Marriott Suites Dallas Market Center +2493 N. Stemmons Fwy. + +Oct. 16 Pittsburgh, PA +Pittsburgh Marriott City Center +112 Washington Place + +Oct. 18 Baltimore, MD +BWI Airport Marriott +1743 West Nursery Rd. + +Oct. 22 Chicago, IL +Marriott Chicago O?Hare +8538 West Higgins Rd. + +Oct. 23 Seattle, WA +Doubletree Hotel Seattle Airport +18740 Pacific Hwy. South + +Oct. 24 Salt Lake City, UT +Hilton Salt Lake City Airport +5151 Wiley Post Way + +Oct. 25 Phoenix, AZ +Embassy Suites Phoenix +Airport +1515 N. 44th Street + +Oct. 28 Nashville, TN +Sheraton Music City +777 McGavock Pike + +Oct. 29 Kansas City, MO +Embassy Suites KCI +7640 NW Tiffany Springs Pkwy. + +Oct. 30 St. Louis, MO +Marriott St. Louis Airport +I-70 at Lambert Airport + +Oct. 31 Minneapolis, MN +Marriott Minneapolis Airport +2020 East 79th Street + +Nov. 6 Charlotte, NC +Renaissance Charlotte +Suites Hotel +2800 Coliseum Centre Drive + +Nov. 8 Hartford, CT +Hartford/Windsor Marriott +Airport +28 Day Hill Road ? Windsor, CT + +Nov. 11 Los Angeles, CA +Marriott Warner Center +21850 Oxnard St. +Woodland Hills + +Nov. 12 Orange County, CA +Marriott Irvine John Wayne Airport +8538 West Higgins Rd. +18000 VonKarman Ave. + +Nov. 13 San Diego, CA +Marriott San Diego Mission Valley +8757 San Diego Drive + +Nov. 14 San Francisco, CA +Santa Clara Marriott +2700 Mission College Blvd. +Santa Clara + +Nov. 15 Sacramento, CA +Marriott Sacramento +11211 Point East Drive +Rancho Cordova, CA + +Nov. 19 Atlanta, GA +Marriott Atlanta Northwest +200 Interstate North Parkway + +Nov. 20 Tampa, FL +Hilton Garden Inn Tampa North +600 Tampa Oaks Blvd. + + The CNA American Road Show is the must-attend meeting of the +year. + Visit http://agents.cnalife.com for more information. + +? OR ? + Please fill out the form below for more information +Name: +E-mail: +Phone: +City: State: + + + CNA, CNA Life and CNA LTC are registered service marks, trade +names and domain names of CNA Financial Corporation. CNA life insurance +and annuity products are underwritten by Valley Forge Life Insurance +Company and, in New York, Continental Assurance Company. CNA long-term +care products are underwritten by Continental Casualty Company and +Valley Forge Life Insurance Company. All products and their features may +not be available in all states. +MX3229 9/02 http://agents.cnalife.com FOR PRODUCER USE ONLY +We don't want anybody to receive our mailing who does not wish to +receive them. This is a professional communication sent to insurance +professionals. To be removed from this mailing list, DO NOT REPLY to +this message. Instead, go here: http://www.insuranceiq.com/optout +Legal Notice + + +------=_NextPart_000_43A60B_01C26E20.8F5BC480 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +Hit the Road with CNA + + + + +

    =20 + + + + +
    + + =20 + + +
    3D'What
    + 3D'CNA
    + + =20 + + +
    =20 + + =20 + + +
    =20 +

    + We encourage you to attend the CNA American Road
    + Show.
    You'll get an insider's glimpse = +of CNA's new products:
    + a revolutionary = +long-term care, an innovative annuity and a
    + ground-breaking new = +CNA term that'll dominate the market.
    + CNA management will also share profitable ideas, = +discuss
    + service and distribution strategies and unveil = +exciting
    + incentive programs.

    +

    + 8:00 a.m. – Coffee and rolls
    + 8:15 a.m.-12:00 p.m. – Road Show = +presentations

    +

    +
    + + =20 + + + + +
    =20 + +

    Oct. 8 New Orleans, = +LA
    + Hilton New Orleans Airport
    + 901 Airline Drive – Kenner, LA

    +

    Oct. 9 Houston, TX
    + Marriott Houston Bush IAH
    + 18700 John F. Kennedy Blvd.

    +

    Oct. 10 Dallas, TX
    + Marriott Suites Dallas Market Center
    + 2493 N. Stemmons Fwy.

    +

    Oct. 16 Pittsburgh, = +PA
    + Pittsburgh Marriott City Center
    + 112 Washington Place

    +

    Oct. 18 Baltimore, = +MD
    + BWI Airport Marriott
    + 1743 West Nursery Rd.

    +

    Oct. 22 Chicago, IL
    + Marriott Chicago O’Hare
    + 8538 West Higgins Rd.

    +

    Oct. 23 Seattle, WA
    + Doubletree Hotel Seattle Airport
    + 18740 Pacific Hwy. South

    +

    Oct. 24 Salt Lake City, = +UT
    + Hilton Salt Lake City Airport
    + 5151 Wiley Post Way

    +
    +
    =20 + +

    Oct. 25 Phoenix, AZ
    + Embassy Suites Phoenix
    + Airport
    + 1515 N. 44th Street

    +

    Oct. 28 Nashville, = +TN
    + Sheraton Music City
    + 777 McGavock Pike

    +

    Oct. 29 Kansas City, = +MO
    + Embassy Suites KCI
    + 7640 NW Tiffany Springs Pkwy.

    +

    Oct. 30 St. Louis, = +MO
    + Marriott St. Louis Airport
    + I-70 at Lambert Airport

    +

    Oct. 31 Minneapolis, = +MN
    + Marriott Minneapolis Airport
    + 2020 East 79th Street

    +

    Nov. 6 Charlotte, NC
    + Renaissance Charlotte
    + Suites Hotel
    + 2800 Coliseum Centre Drive

    +

    Nov. 8 Hartford, CT
    + Hartford/Windsor Marriott
    + Airport
    + 28 Day Hill Road – Windsor, CT

    +
    +
    =20 + +

    Nov. 11 Los Angeles, = +CA
    + Marriott Warner Center
    + 21850 Oxnard St.
    + Woodland Hills

    +

    Nov. 12 Orange County, = +CA
    + Marriott Irvine John Wayne Airport
    + 8538 West Higgins Rd.
    + 18000 VonKarman Ave.

    +

    Nov. 13 San Diego, = +CA
    + Marriott San Diego Mission Valley
    + 8757 San Diego Drive

    +

    Nov. 14 San Francisco, = +CA
    + Santa Clara Marriott
    + 2700 Mission College Blvd.
    + Santa Clara

    +

    Nov. 15 Sacramento, = +CA
    + Marriott Sacramento
    + 11211 Point East Drive
    + Rancho Cordova, CA

    +

    Nov. 19 Atlanta, GA
    + Marriott Atlanta Northwest
    + 200 Interstate North Parkway

    +

    Nov. 20 Tampa, FL
    + Hilton Garden Inn Tampa North
    + 600 Tampa Oaks Blvd.

    +
    +
    + + =20 + + +
    =20 +
    =20 +

    + The CNA American Road Show is the must-attend meeting = +of the year.
    + Visit http://agents.cnalife.com=20 + for more information.

    +
    +
    + + =20 + + +
    + — OR — +
    + + =20 + + +
    =20 + + =20 + + + + + +
    =20 + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + =20 + + + + + + + =20 + + + +
     Please fill out = +the form below for more information
    Name:
    E-mail:
    Phone:
    City:State:
     =20 + + + +
    +
    +
    + + =20 + + + +
    CNA,=20 + CNA Life and CNA LTC are registered service marks, trade = +names and=20 + domain names of CNA Financial Corporation. CNA life = +insurance and=20 + annuity products are underwritten by Valley Forge Life = +Insurance=20 + Company and, in New York, Continental Assurance Company. = +CNA long-term=20 + care products are underwritten by Continental Casualty = +Company and=20 + Valley Forge Life Insurance Company. All products and = +their features=20 + may not be available in all states.
    + MX3229 9/02 http://agents.cnalife.com FOR PRODUCER USE = +ONLY
    + We don't want anybody to receive our mailing who does not = +wish to=20 + receive them. This is a professional communication sent to = +insurance=20 + professionals. To be removed from this mailing list, DO = +NOT REPLY=20 + to this message. Instead, go here: http://www.insuranceiq.com/opt= +out
    + Legal = +Notice
    =20 +
    +
    +

    + + + +------=_NextPart_000_43A60B_01C26E20.8F5BC480-- + + diff --git a/Ch3/datasets/spam/spam/00487.139a2f4e8edbbdd64441536308169d74 b/Ch3/datasets/spam/spam/00487.139a2f4e8edbbdd64441536308169d74 new file mode 100644 index 000000000..ee9844a1f --- /dev/null +++ b/Ch3/datasets/spam/spam/00487.139a2f4e8edbbdd64441536308169d74 @@ -0,0 +1,186 @@ +From bounce2@u-answer.com Tue Oct 8 11:02:30 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id 10C9616F18 + for ; Tue, 8 Oct 2002 11:02:05 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 11:02:05 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g98339K30569 for + ; Tue, 8 Oct 2002 04:03:10 +0100 +Received: from davicom.co.kr (IDENT:root@[211.205.76.5]) by webnote.net + (8.9.3/8.9.3) with ESMTP id EAA21173 for ; + Tue, 8 Oct 2002 04:03:55 +0100 +Received: from u-answer.com (kenny.answer-us.com [12.43.213.7]) by + davicom.co.kr (v3smtp 8.11.2 Copyright (c) 1998-2000 Sendmail, + Inc. All rights reserved. Copyright (c) 1988, 1993 The Regents of the + University of California. All rights reserved./8.11.3) with ESMTP id + g983Hsn28746; Tue, 8 Oct 2002 12:17:55 +0900 +Message-Id: <200210080317.g983Hsn28746@davicom.co.kr> +From: Answer.Us@davicom.co.kr +Subject: $10 a hour for watching e-mmercials! No joke! +Reply-To: bounce2@u-answer.com +Date: 07 Oct 2002 22:57:45 -0400 +MIME-Version: 1.0 +To: undisclosed-recipients:; +Content-Type: text/html +Content-Transfer-Encoding: 8bit + + + + + + + + +Answer-Us + + + + +

     

    + +
    +
    + + + + +
    +

    +
    + +

    +
    + +
    + + + + +
    +

    + Unlist Information +

    +
    + +
    + + + + +
    + + This message is brought to you by Answer-us.com in + compliance with current federal laws. To find out more about Answer-us.com visit + + + + + + http://www.answer-us.com. + You are receiving this mailing because you or someone you know has + registered this email address to receive special offers from an Answer-us.com + marketing partner. Screening of addresses has been done to the best of + our knowledge. We honor all unlist requests within 72 hours. If you + have received this email in error, we apologize for any inconvenience it + has caused and will not mail further offers to you. To be + unlisted from our database, please do the + following: Simply + + + + + + click here + + + + . If you have your mail forwarded to a new email address + please provide your old email address. + +
    +
    + +
    +
    +
    + +
    + + + + + + +
    +   + + + + + + +
    +

    Answer-Us
    +
    Nationwide

    + + +

    + + + support@answer-us.com

    +
      +

    + + +
    +
    + Our + E-Mail Campaigns Have Produced + Staggering Response Rates!
    +
    + Responsive + General or Targeted Managed E-Mail Lists + + +
    +
    +
    + + Visit + + + www.answer-us.com + today! +

    +
    + +
    + + + + +
    +

    + + Copyright + © 2002 Answer-us.com. All rights reserved. +

    +
    +
    +
    +
    +
    + +

    + + + + + + diff --git a/Ch3/datasets/spam/spam/00488.29e96da757cc5566c848833e26abdd65 b/Ch3/datasets/spam/spam/00488.29e96da757cc5566c848833e26abdd65 new file mode 100644 index 000000000..0c673fda8 --- /dev/null +++ b/Ch3/datasets/spam/spam/00488.29e96da757cc5566c848833e26abdd65 @@ -0,0 +1,92 @@ +From beautyinfufuxxxmeb13mxy@aol.com Tue Oct 8 11:02:32 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id EA07F16F19 + for ; Tue, 8 Oct 2002 11:02:07 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 11:02:07 +0100 (IST) +Received: from FUSMTA03-LRS (mta03.btfusion.com [62.172.195.12]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g983qgK31902 for + ; Tue, 8 Oct 2002 04:52:42 +0100 +Received: from [217.36.117.194] (helo=firstloansdirect.co.uk) by + FUSMTA03-LRS with smtp (Exim 4.05) id 17ylQ4-000018-00; Tue, + 08 Oct 2002 04:52:29 +0100 +Received: from with PostMaster 3.14.1 + (M); Mon, 07 Oct 2002 15:10:41 +100 +Message-Id: <00002acb4852$00002826$000060c4@210.54.219.50> +To: +From: beautyinfufuxxxmeb13mxy@aol.com +Subject: Make a Fortune On eBay 24772 +Date: Mon, 07 Oct 2002 09:45:36 -0400 +MIME-Version: 1.0 +X-Priority: 3 +X-Msmail-Priority: Normal +Reply-To: beautyinfufuxxxmeb13mxy@aol.com +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + + + +
    +

    "eBay - #1 Rated Work A= +t Home Business + Opportunity"
    + -
    PC Magazine

    +

    Fortunes are literally being= + made in + this great new marketplace!

    +

    Over $= +9 Billion + in merchandise was sold on eBay in 2001 by people just like= + you + - right from their homes.

    +

    Now you too can learn the secrets= + of successful + selling on eBay and make a staggering income fro= +m the + comfort of your own home. If you are motivated, capa= +ble + of having an open mind, and can follow simple directions, t= +hen + visit us here.<= +/font>

    +

    We are strongly against sendin= +g unsolicited + emails to those who do not wish to receive our special mailings. Y= +ou have + opted in to one or more of our affiliate sites requesting to be no= +tified + of any special offers we may run from time to time. We also have a= +ttained + the services of an independent 3rd party to overlook list manageme= +nt and + removal services. This is NOT unsolicited email. If you do not wis= +h to + receive further mailings, please GO + HERE to be removed from the list. Please accept our apologies = +if you + have been sent this email in error.

    +
    +

     

    +

     

    +

     

    +

     

    + + + +

    + +

    charset=3Diso-8859-1">

    + + + + + diff --git a/Ch3/datasets/spam/spam/00489.023c1d77de9365cad956a4c9118aee4b b/Ch3/datasets/spam/spam/00489.023c1d77de9365cad956a4c9118aee4b new file mode 100644 index 000000000..2e19b5ac7 --- /dev/null +++ b/Ch3/datasets/spam/spam/00489.023c1d77de9365cad956a4c9118aee4b @@ -0,0 +1,322 @@ +From evtwqmigru@datcon.co.uk Tue Oct 8 11:02:37 2002 +Return-Path: +Delivered-To: zzzz@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by zzzzason.org (Postfix) with ESMTP id F3CF116F1B + for ; Tue, 8 Oct 2002 11:02:13 +0100 (IST) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for zzzz@localhost (single-drop); Tue, 08 Oct 2002 11:02:13 +0100 (IST) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g989wGK10152 for + ; Tue, 8 Oct 2002 10:58:16 +0100 +Received: from sanaga.camtel.cm ([195.24.194.61]) by webnote.net + (8.9.3/8.9.3) with ESMTP id KAA21887 for ; + Tue, 8 Oct 2002 10:59:00 +0100 +Received: from ens.fr (host42-226.pool8173.interbusiness.it + [81.73.226.42]) by sanaga.camtel.cm with SMTP (Microsoft Exchange Internet + Mail Service Version 5.5.1960.3) id 431SJ0H6; Tue, 8 Oct 2002 06:55:54 + -0000 +Message-Id: <00004b14417b$0000234d$000007e2@cuug.ab.ca> +To: +From: "About Time" +Subject: Faeries +Date: Wed, 07 Oct 2020 23:01:36 -1900 +MIME-Version: 1.0 +Content-Type: text/plain; charset="Windows-1252" +Content-Transfer-Encoding: 7bit +Reply-To: evtwqmigru@datcon.co.uk + +UNCOMMON EXOTIC PLEASURE BOTANICALS! + +Feeling marvelous, Mood-Sensitive, Mood-Enhancing, Depressive/Regressive, "Sweet Treat" forumulations for the Pleasuring and Well-Being of Body, Mind & Spirit from the planet's foremost "Sensitive" ethnobotanical cooperative -- Exotic Botanical Resources! (Product descriptions, pricing and deep-discounted Intro Offers information below.) + +SEVENTH HEAVEN "SWEET TREAT" MENU + +1. SHANGRILA ZOWIE WOWIE (tm) (Gnarly Sweet Grass). Absolutely, the most significant legal "Personal Choice" non-cannabis, non-marijuana, non-tobacco smoking botanical on the planet. + +2. PROSAKA (tm) High-Ratio extracts in tablet form for Calm, Balance, Serenity & Peaceful living. + +3. AQUEOUS KATHMANDU (tm) (Happy Drops) "Personal Choice" enhanced "Sensitivity" for non-smokers & tokers. + +4. SWEET VJESTIKA (tm) (Aphrodisia Drops) Erotica; Intimacy "Sensitivity" Enhancement at its finest for men & woman. + +5. GENTLE FEROCITY (tm) Viripotent Energization, Appetite Suppression Tablets without the inclusion of Caffeine or MaHaung Herb or Ephedrine! + +6. CAPILLARIS HERBA (tm) A sedate smoking and/or brewing Happiness Botanical. + +******************************** +**Shangrila Zowie Wowie (tm)** +******************************** + +"Personal Choice" Primo Exotic Supplemental Smoking Botanical / Gnarly "SweetGrass" Variety / Supplemental Agenda "Seventh Heaven" Paradoxical Configuration for the "significant" Enhancement and Pleasuring of body, mind & spirit "sensitivities" -- Potentiated; Gnarly, whole-plant Matrix -- Paragonic Reserve; Enigmatic Blendage Mood "Sensitive / Responsive" Smoking / Brewing Herba. + +Actions & indications: Simultaneous, High-Spirited; "Stimulation / Relaxation / Aphrodisia" (Significant Paradise Consequence!) + +This is the Personal Choice, Sensitive, Responsive Smoking ("Smoka") product we have wanting to offer! This is the product and the VALUE that you have been searching for. This is the product that you will buy again & again! + +We have been in the business (science) of developing non-cannabis, personal choice sensitive smoking agendas for a good, goodly while. Along this avenue of ethnobotany, we have always strived to achieve greater and greater "Sensitivity / Responsiveness" & Aphrodisia within our gourmet smokables and brews. And indeed, we have. Many of these previous products are still marketed today by companies who are less developmental than our botanical resource cooperative. Even our own two signature "smokables" (Ragga Dagga & Stoney Mahoney) are being discontinued. That Shangrila Zowie Wowie is by far such a superior product is undeniable, therefore it makes no sense to us at all to offer any other smoking product. Quite simply we have surpassed even our own expectations of excellence, thereby; our definition of excellence has evolved. This "Shangrila" project has been in research and development for sometime on two fronts. First, on an agricultural level, fields for our Gnarly SweetGrass! + must be planted and be allowed to propagate for several years before initial harvest can even be undertaken. This is how the botanical achieves "potent significance" much like the regimen of ginseng. Also, harvest time is limited and can take place only twice a year, as like the hemp plant, maximum potency is only achieved after "flowering" occurs. But, unlike the hemp plant, and for that matter, unlike most herbs, the entire base plant of Shangrila Zowie Wowie (leave, stem & root) is all "viripotent," which makes this "gnarly stoke" a botanical phenomenon! As well, most potentiating factors of Shangrila, as well as the primary botanical factor of Shangrila, will not achieve "viripotency" if grown in our hemisphere, therefore; Shangrila is indeed a multi-national, multi-complicated, agricultural undertaking. However, all of this undertaking has indeed been worthwhile! Secondly, the potentiating, infusion regimen used to enhance the attributes of Shangrila has also taken a lon! +g time to bring into potent fruition as there are many balancings of the various molecular factors involved in the completion of Zowie Wowie. We are most pleased to be able to say, as you will note in the experience of Shangrila Zowie Wowie, that this process has achieved fruition. + +Suffice to say, without any hype or glype, Shangrila Zowie Wowie Gnarly SweetGrass is without a doubt, the most significant, non-invasive, non-cannabis, "sensitive/responsive", personal choice, absolutely legal (cannot fail a drug test), smoking ("Smoka") botanical on our planet ... probably in the universe! Hard to believe that this product is ABSOLUTELY LEGAL! + +* Mill-stoned & honed. +* Depressive regressive! +* Psychologically uplifting! +* Good-bye stress, anxiety & restlessness! +* Sophisticated, well-balanced "ambiance." +* Inspires contemplativeness and creativity. +* "Potentiated" & viripotent! +* 4 – 5 draws lasts a good, goodly while. +* Sweet aphrodisia! (Horny Goat Weed factoring) +* Simultaneously; uplifting and relaxing! +* Easy ignition, Smooth draw, Sweet, heady taste. +* Easy on, easy off! +* SATISFACTION GUARANTEED! +* No "munchie" factor. +* No failed drug tests! + +Shangrila Zowie Wowie (tm) Gnarly "SweetGrass" botanical is best utilized as a viri-potent "Smoka", via an herb-pipe. As is an herbalist's way, four or five draws of "Smoka" should be inhaled and retained. For the non-smoker, it is most appropriate to engage this herbaceousness as a potentiated tea/brew. (Steep approximately one teaspoon of Shangrila Zowie Wowie (tm) herba per one cup of water for ten minutes or so & strain.) When smoking Shangrila Zowie Wowie (tm), please draw gently as it is a most preeminent "Sensitive / Responsive" Smoke. Both a personal water-pipe (huuka) (water-pipe is included with quarter pound can only) and a standard herb-pipe are included for your smoking convenience and delight. Smoke and Brew concurrently is absolutely a Sweet, Sensitive Treat! + +Shangrila Zowie Wowie (tm) "Sensitive/Responsive" Smoka includes and is potentiated with the following non-irradiated, Mill-Stoned & Honed, exotica botanicals and botanical essences: Half-edged Lily-rare Bian Lian (lobeline factors), Kona Lactuca virosa, Yucatan Turnera aphrodisaca, Hawaiian Vervain (Maui strain), Siberian Leonorus Sibricus, rare Lotus Leaf, Jamaican Blue Verbena officinalis, Spanish Peumus Crocus Sativa, Chinese (flowering-tops only) Horny Goat Weed, Ginko Biloba, African Cola Vera, and African Wilde Dagga (flowering-tops only). Shangrila Zowie Wowie (tm) does not include any tobacco or any cannabis factors. Shangrila Zowie Wowie (tm) does indeed achieve gourmet distinction upon its own merit. + +Shangrila Zowie Wowie (tm) is not intended for use during work or while driving. Nor should it be enjoyed during pregnancy. In addition, although no factor in Shangrila Zowie Wowie (tm) is illegal or regulated, it is the ethical policy of Exotic Botanical Resources that Shangrila Zowie Wowie (tm) not be sold or offered to any person that has not attained at least 21 years of age. All things in their time.... + +******************************************************** +SHANGRILA ZOWIE WOWIE PRICING: + +* One 1 oz. bag (incl. herb-pipe only) $80.00 (plus shipping) +* One 4 oz. Q.P.C. (Quarter Pound Can) (incl. herb-pipe & +personal brass hookah) $150.00 (plus shipping) +Also included as an added BONUS with each Q.P.C. purchase is a FREE 2 oz. package of our Capillaris Herba. + +(See Intro Offers at bottom of this text for further savings) + +****************** +**PROSAKA (tm)** +****************** + +High-Ratio extracts in tablet form for Calm, Balance, Serenity & Peaceful living. + +This Prosaka formulation, which we have just recently further potentiated, boasts an extremely loyal and abundant patronage, having been available to market at large now for a number of years. Prosaka botanical tablets were originally introduced as a botanical, supplemental alternative to various traditional medications that are prescribed for stress, anxiety, depressiveness, mood enhancement, insomnia, excessive dream activity, etc. We like to use this analogy: Imagine the circumstances of your life to be hurricane-ish. Certainly, Prosaka will not stop the wind from blowing. However, it will help to center you within the calm eye of your hurricane, so that you will better see your living and make your decisions from a calmer, more serene, more balanced perspective. Please note that when undertaking any supplemental herbal regimen in this arena, it is important to make a personal commitment to the therapy. It would make no sense to purchase Prosaka and to take it only sporadic! +ally or only briefly. It is for this reason, although Prosaka is a very expensive formulation to produce; that we offer 300 count containers at as much of a reduced price as we are able to offer. + +Prosaka is an exclusive, proprietary amalgamation in tablet form which includes the following uncommon botanicals, extracts, flower-top essences and essential oils: Radix Salviae, Sensitive Mimosa Bark, Arillus Euphoriae, Shizandra, Frutcus Mori, Caulis Polygoni, Zizyohus, Tang Kuei, Cedar Seed, Sweetflag Rhizome, Cuscutae, Amber, Radix Scutellariae, Evodia, Longan, Arisaema, Cistanches, Radix Polygalae, Red Sage Root and Eucommia. No factor contained within Prosaka is restricted or regulated by law. All botanicals contained within are non-irradiated and are of pharmaceutical grade. + +Suggested Usage: 1 - 2 tablets; 2 to 3 times per day as needed. Best taken on an empty stomach. (During times of intensity up to 10 tablets per day may be utilized.) + +Also Note: Prosaka is not intended to supercede physician's care nor is it intended for use during pregnancy. + +******************************************************** +PROSAKA PRICING: + +* One 100 count bag ... $55.00 plus shipping +* One 300 count container ... $130.00 plus shipping +For larger quantities, please inquire. + +(See Intro Offers at bottom of this text for further savings!) + +******************************************* +**AQUEOUS KATHMANDU (tm) (Happy Drops)** +******************************************* + +"Personal Choice" enhanced "Sensitivity" for non-smokers & tokers. + +Aqueous Kathmandu has only been offered to market at large for a short while. However, in a short time this product has achieved a tremendous, very happy following. + +Aqueous Kathmandu (tm) "Sensitive/Responsive" Happiness Drops(Temple "Quantum" Variety). Indeed; a Happiness Brew from the Kathmandu a.k.a. "Secret Fire" from a toke-smoke point of view, if you know what I mean and be groovin' the scene. Who du the Kathmandu? Now, everybody can du the Kathmandu! (that is, if you're 21 years of age or older) Aqueous Kathmandu is engaged to holistically inspire and instill "sensitive/responsive" happiness and mellowness without the detriment of carcinogenic inhalation (smoking). Aqueous Kathmandu is absolutely legal and does not contain any controlled, considered to be harmful or regulated herbs or cannabis/marijuana factors! + +As "smoking" has become so socially taboo over the years and as so many people have asked us for a liquid product, we have long strived to bring a quantum-factored, concentrated liquid product to fruition. This has been no easy task for a variety of botanical and technological reasons. Finally, we are able to say that this task has been accomplished. A "Sensitive" herbal/botanical awakening, if you will, as we have introduced and brought to market Aqueous Kathmandu (tm) Happiness Drops, Temple "Quantum" Variety, a.k.a. "Secret Fire." + +- NO need to smoke. NO carcinogenic factors! +- Absolutely Legal! NO Prescription Required. +- NO Failed Drug Tests! +- NO Cannabis or any Tobacco variety. +- Quantum-Ratio, Core-Extracted, Refined Organic Factors. +- Marvelously Potent - REMARKABLY Substantial! +- Inspires Contemplativeness and Creativity! +- Attitude and Mood Enhancement, Adjustment. +- Interrupts Anxiety, Relaxes Stress. +- A much superior product Better than Kava Kava, St. John's Wort, etc. +- Many fine ganja virtues with NONE of the Negatives! +- Better sleeping and dreaming. +- Non-invasive - NO Downside! +- Promotes Body, Mind and Spirit Intimacy. + +Contents: Aqueous Kathmandu is a unique botanical substantiality. It is offered and marketed as such. Undisputedly, it achieves "distinctive accolade" of its own merit. Aqueous Kathmandu is absolutely legal and does not contain any controlled or regulated or harmful herbs or cannabis factors. However, it is our mandatory ethical policy that Aqueous Kathmandu not be offered to individuals who have not yet attained at least 21 years of age (all things in their time). Please note as well that Aqueous Kathmandu is not intended for usage during work or while driving. And, as is true of all substance and indulgence, this product should not be enjoyed during pregnancy. This proprietary formulation does include the following quantum-ratio, core-extracted/refined botanicals in an alcohol base as a preservative: Albizzia flower-tops, Drachsha, Chavana Prash, Lactuca Virosa, Hybrid Flowering Turnera Diffusa, Wild Dagga, Capillaris Herba, Angelica Root, Zizyphi Spinosae, Buplerum, ! +Hybrid Valeriana officinalis Root, Albizzia flower-tops, mature Polygonum Vine, Calea Zacatechichi, Crocus Sativa flower-tops, Leonorus Sibricus buds, Cinnabaris, Margarita herba, Biotae Orientalis, Salviae Miltiorrhizae. + +Usage Instructions: Shake well. Mix 30-50 drops with juice or water (best on empty stomach). Ambiance lasts about two hours or so. Not intended for use during pregnancy or while working or driving. Keep out of reach of children. + +******************************************************** +AQUEOUS KATHMANDU PRICING: + +* One 2 oz. bottle (90+ usages)... $115.00 plus shipping +* Two 2 oz. bottles ... $170.00 plus shipping + +(See Intro Offers at bottom of this text for further savings!) + +******************************************** +**SWEET VJESTIKA (tm) (Aphrodisia Drops)** +******************************************** + +Erotica, Intimacy "Sensitivity" Enhancement at its finest for men & women. + +Even we did not imagine the "sweet" customer appreciation that Sweet Vjestika has enjoyed. Now, more potent than ever due to higher concentrations of Sweet Vjestika's botanical factors, this is intimacy enhancement at its finest. + +Sweet Vjestika is an erotic aphrodisia, sexual intensifier/enhancer, liquid amalgamated extract for men & women. Indeed, a HeavenSent Treasure of Pleasure to entice your Passion, to intrigue your Desire, Enchantment's Rapture, Sweet Vjestika's Fire. + +The Tantra Sacrament of Sweet Vjestika Aphrodisia Drops Extravagantly Inspires and Enhances: + +*Sensitivity to touch +*Desire to touch & be touched +*Fantasy / Lust / Rapture / Uninhibitedness +*Erogenous sensitivity +*Sexual courageousness +*Sexual gentleness and ferocity + +SWEET VJESTIKA APHRODISIA DROPS + +*Prolongs and intensifies foreplay +*Prolongs and intensifies orgasm / climax +*Inspires body, mind, spirit orgasm / climax +*Inspires and enhances body, mind, spirit communion betwixt lovers +*Inspires and enhances the enchantment / glamourie of Love + +Contents: Whole MaHuang, Bee Pollen, Epimedium Angelica, Rehmannia, Ginger, Schizandra, Polygonatum, Adenophora, Tremella, Tang Kuei, Reishi, Codonopsis, Eucommium, Lycii Berry, Ligusticum, Peony Root, Fo Ti, Atractylodes, Ophiopogon, Royal Jelly, Euryales Seeds, Poria, Licorice, Mountain Peony Bark, Cormi Fruit, Rose Hips, Prince Ginseng, Scrophularia, Alisma, Astragalus, Fennel, Buplerium, Cypera, Aconite, Polygala, Red Sage Root, Jujube Seed, Lotus Seed, Tien Chi Ginseng, Ligus Ticum, Psoralea, Dodder Seed, and Cisthanches in a solution containing 24% pure grain alcohol as a preservative, distilled water and Lecithen as an emulsifier. + +Suggested Usage: Sweet Vjestika is extremely potent. Use 10 - 15 drops sublingually or in juice or tea, not to exceed 25 drops. Best when taken upon an empty stomach approx. 45 minutes before intimacy. Based upon 25 - drop increments there are approx. 60 dosages per 1 oz. bottle. Usage should not exceed 2 doses per week. Persons taking any prescription medication or suffering from depression or anxiety, should consult with their health care provider before using. This product is not intended for usage by persons with abnormal blood pressure or any cardiovascular malady or any thyroid dysfunction. Nor is it to be used during pregnancy or by any person under 21 years of age. + +******************************************************** +SWEET VJESTIKA PRICING: + +* One 1 oz. bottle (approx. 60 dosages) ... $90.00 plus shipping +* Two 1 oz. bottles (approx. 120 dosages) ... $140.00 plus shipping + +(See Intro Offers at bottom of this text for further savings!) + +*************************** +**GENTLE FEROCITY (tm)** +*************************** + +Heaven-Sent "Viripotent" Energization, Appetite Suppression Tablets without the inclusion of Caffeine or MaHaung Herb or Ephedrine! +* NO jitters. +* NO inability to sleep at bedtime. +* NO strung-out feeling! + +A non-caffeine, non-ephedrine, non-ephedra, non-MaHuang; virpotent, herbaceous prescription for the dynamic energization of body, mind and spirit. + +This Gentle Ferocity Formulation is amalgamated in accordance with the fundamental Taoist herbal principle of botanical interactiveness and precursorship which in essence is a molecular equation of the relevant botanical/herbal alkaloids and glycosides interacting with one another to proliferate molecular communion and thereby to achieve demonstrative herbal efficaciousness without negative implication to any aspect of human composition. These Gentle Ferocity Cordial Tablets are incredulously and thoroughly effective. Enjoy! + +Entirely Natural! Increases Energy! Increases Metabolism! Decreases Appetite! + +Contents: Each Gentle Ferocity Tablet contains 500 mg. of the following proprietary formulated, high-ratio concentrated botanical factors: Cortex Eucommiae, Radex Polygoni Multiflori, Zizyphus Seed, Fructus Schisandrae, Radix Panax Ginseng, Radix Astragali, Atractylode, Sclerotium, Porial Cocos, Saussurea Tang Kuei, Longan, Radix Paeoniae, Biota Seeds, Glehnia, Radix Salviae, Ligusticum, Lycu Berry, Radix Dioscoreae, Cortex Mouton, Frutcus Corni, Radix Polygalae, Cistanches, Radix Pseudoslellariae and Cortex Aranthopanacis. + +Suggested Usage: 1 - 2 tablets as needed. Best taken on an empty stomach. Not to exceed 6 tablets per day. Please Note: Persons with high blood pressure or any cardio-vascular malady should consult with their health care provider before engaging Gentle Ferocity. Also: Gentle Ferocity is not intended for use during pregnancy nor is it intended for acquisition by any person who has not attained at least 18 years of age. + +******************************************************** +GENTLE FEROCITY TABLETS PRICING: + +* One 300 count jar ... $130.00 plus shipping +* Two 300 count jars .. for $220.00 plus shipping (reg. $260, save $40) +* Three 300 count jars .. for $290.00 plus shipping (reg. $390, save $100) + +(See Intro Offers at bottom of this text for further savings!) + +*************************** +**CAPILLARIS HERBA (tm)** +*************************** + +A Sedate Smoking or Brewing Happiness Botanical. + +Capillaris Loose-leaf Herba is a very calming, happy sort of smoking/brewing herba. Capillaris Herba is a singular botanical and is best utilized close to bedtime as it is a very sedate herba. Not as potent as Shangrila Zowie Wowie from a smoking perspective (no legal product is), but well worth your attention! Many folks find that if they partake of both smoke and brew that not only do they go to sleep very happily, but that their dreaming life is often nicely enhanced. + +Capillaris Herba botanical is best rolled or bowled when engaged as a "Smoka." As is an herbalist's way, four or five draws of "Smoka" should be inhaled and retained. For the non-smoker, it is most appropriate to engage Capillaris Herba as a most peaceful brew/tea. (Steep approximately one teaspoon of Capillaris Herba per one cup of water for ten minutes or so & strain.) + +Capillaris Herba is not intended for use during work or while driving. Nor should it be enjoyed during pregnancy. In addition, although no factor in Capillaris Herba is illegal or regulated, it is the ethical policy of Exotic Botanical Resources that Capillaris Herba not be sold or offered to any person that has not attained at least 21 years of age. All things in their time. + +******************************************************** +CAPILLARIS HERBA PRICING: + +* One 2 oz. bag ... $65.00 plus shipping +* Two 2 oz. bags ... $100.00 plus shipping + +(See Intro Offers at bottom of this text for further savings!) + +******************************************************** + +"CUSTOMER APPRECIATION" INTRODUCTORY OFFERS + +All intro offers include a FREE 2 oz. package of our Capillaris Herba (regularly $65.00). + +PLEASE NOTE: + +All Exotic Botanical Resource Product are intended for sophisticated adult usage. No Exotic Botanical Resource product is intended for use during pregnancy and although no factor or product is regulated or illegal, it is the mandatory ethical policy of Exotic Botanical Resources that no XBR product be sold or offered to any person that has not attained at least 21 years of age. All things in their time. + +A) NORTH INTRO OFFER -- Includes the following: +* One 1/4 lb. can of Shangrila Zowie Wowie +(incl. hookah & herb pipe) +* One 300 count container of Prozaka tablets +PRICE: $180.00 (Reg. price $280 - you SAVE $100) + +B) SOUTH INTRO OFFER -- Includes the following: +* One 1/4 lb. can of Shangrila Zowie Wowie +(incl. hookah & herb pipe) +* One 300 count jar Gentle Ferocity tablets +PRICE: $190.00 (Reg. price $280. You save $90) + +C) EAST INTRO OFFER -- Includes the following: +* One 1/4 lb. can of Shangrila Zowie Wowie +(incl. hookah & herb pipe) +* One 1 oz. bottle of Sweet Vjestika Aphrodisia Drops +PRICE: $170.00 (Reg. price $240. You save $70) + +D) WEST INTRO OFFER -- Includes the following: +* One 1/4 lb. can of Shangrila Zowie Wowie +(incl. hookah & herb pipe) +* One 2 oz. bottle of Aqueous Kathmandu +PRICE: $170.00 (Reg. price $265. You save $95) + +E) WET INTRO OFFER -- Includes the following: +* One 2 oz. bottle of Aqueous Kathmandu +* One 1 oz. bottle of Sweet Vjestika Aphrodisia Drops +PRICE: $145.00 (Reg. price $205. You save $60) + +F) APHRODISIA INTRO OFFER -- Includes the following: +* One 1/4 lb. can of Shangrila Zowie Wowie +(incl. hookah & herb pipe) +* One 1 oz. bottle of Sweet Vjestika Aphrodisia Drops +PRICE: $150.00 (Reg. price $240. You save $90) + +G) MINI INTRO OFFER -- Includes the following: +* One 1 oz. bag of Shangrila Zowie Wowie +(incl. herb pipe only) +* One 100 count container of Prozaka tablets +PRICE: $110.00 (Reg. price $135. You save $25) + +H) VISIONARY INTRO OFFER -- Includes the following: +* One 1/4 lb. can of Shangrila Zowie Wowie +(incl. hookah & herb pipe) +* One 300 count container of Prozaka tablets +* One 300 count Gentle Ferocity tablets +* One 1 oz. bottle of Sweet Vjestika Aphrodisia Drops +* One 2 oz. bottle of Aqueous Kathmandu +PRICE: $310.00 (Reg. price $615. You save $305) + +********************************************************************** + +To order via credit card or for customer +assistance & product information, please call: + +1-623-972-5999 + +Hours: Mon. - Sat. 10 a.m. to 9 p.m. Central Time + +All orders are shipped next day via US Postal domestic and international Priority Mail. + +Beyond business hours, please enjoy automated convenience. Leave your name and phone number and a convenient time to return your call. Certainly, we will be happy to do so. + +*********************************************************************** +To remove your address from our list, click on the following link and send a blank email. mailto:bm7@btamail.net.cn?subject=Remove + diff --git a/Ch3/datasets/spam/spam/00490.f0020a3ea5546c122f688b39f4380c95 b/Ch3/datasets/spam/spam/00490.f0020a3ea5546c122f688b39f4380c95 new file mode 100644 index 000000000..522158abe --- /dev/null +++ b/Ch3/datasets/spam/spam/00490.f0020a3ea5546c122f688b39f4380c95 @@ -0,0 +1,132 @@ +From social-admin@linux.ie Tue Dec 3 11:57:03 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5545416F16 + for ; Tue, 3 Dec 2002 11:57:03 +0000 (GMT) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Dec 2002 11:57:03 +0000 (GMT) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id gB37qp826485 for + ; Tue, 3 Dec 2002 07:52:52 GMT +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 7F84634229; Tue, 3 Dec 2002 07:54:25 +0000 (GMT) +Delivered-To: linux.ie-social@localhost +Received: from byron.heanet.ie (byron.heanet.ie [193.1.219.90]) by + lugh.tuatha.org (Postfix) with ESMTP id D30D634224 for ; + Tue, 3 Dec 2002 07:53:38 +0000 (GMT) +Received: from cm61-15-244-114.hkcable.com.hk ([61.15.244.114] + helo=mail.lycos.com) by byron.heanet.ie with smtp (Exim 4.05) id + 18J7s9-00055L-00 for social@linux.ie; Tue, 03 Dec 2002 07:53:38 +0000 +X-Msmail-Priority: Normal +From: bcsocial1@yahoo.com +Received: from mail.lycos.com by BQIPT.mail.lycos.com with SMTP for + social@linux.ie; Tue, 03 Dec 2002 02:55:25 -0500 +X-Mailer: Microsoft Outlook Express 5.00.2919.6700 +Importance: Normal +Message-Id: +To: social@linux.ie +Content-Type: text/plain; charset="iso-8859-1" +Subject: [ILUG-Social] prirodu requiremus social sample +Sender: social-admin@linux.ie +Errors-To: social-admin@linux.ie +X-Beenthere: social@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group social events +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 03 Dec 2002 02:55:25 -0500 +Date: Tue, 03 Dec 2002 02:55:25 -0500 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id gB37qp826485 + + + +social + + + +On January 1st 2002, the European countries began + +using the new Euro. Never before have so + +many countries with such powerful economies united + +to use a single currency. Get your piece of history + +now! We would like to send you a FREE Euro + +and a FREE report on world currency. Just visit + +our site to request your Euro and Euro report: + + + +http://www.justaclick-supersite.com/euro/ + + + +In addition to our currency report, you can receive + +our FREE INVESTMENT PACKAGE: + + + +* Learn how $10,000 in options will leverage $1,000,000 in + +Euro Currency. This means even a small movement in the market + +has huge profit potential. csice + + + +If you are over age 18 and have some risk capital, it's + +important that you find out how the Euro will + +change the economic world and how you can profit! + + + +http://www.justaclick-supersite.com/euro/ + + + + + +Please carefully evaluate your financial position before + +trading. Only risk capital should be used. + + + +8C43FD25CB6F949944EE12C379E50028 + +UTBXCUHEPUFFBNKWQ + + + +Full opt-out instructions on the bottom of the site + + + + + + + + + +-- +Irish Linux Users' Group Social Events: social@linux.ie +http://www.linux.ie/mailman/listinfo/social for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00491.28cb63173ed4740180e45e6248db5584 b/Ch3/datasets/spam/spam/00491.28cb63173ed4740180e45e6248db5584 new file mode 100644 index 000000000..4bcb864db --- /dev/null +++ b/Ch3/datasets/spam/spam/00491.28cb63173ed4740180e45e6248db5584 @@ -0,0 +1,115 @@ +From akadim@yahoo.com Tue Dec 3 11:57:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 3F1FB16F17 + for ; Tue, 3 Dec 2002 11:57:05 +0000 (GMT) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Dec 2002 11:57:05 +0000 (GMT) +Received: from group.int.lycos.co.kr ([211.196.154.69]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id gB38ER827338 for + ; Tue, 3 Dec 2002 08:14:27 GMT +Received: from mx1.mail.yahoo.com (int-200-49-212-39.movi.com.ar + [200.49.212.39]) by group.int.lycos.co.kr with SMTP (Microsoft Exchange + Internet Mail Service Version 5.5.2653.13) id YFC8NGTQ; Tue, + 3 Dec 2002 17:11:07 +0900 +Message-Id: <00001ca3096b$00002fff$0000461d@mx1.mail.yahoo.com> +To: +From: "Response Unit" +Subject: Finally! Sexy DVDs for FREE. Christmas is Great! NMV +Date: Tue, 03 Dec 2002 03:10:52 -1700 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable +Reply-To: akadim@yahoo.com + +

    + + + +

    +
    + +
    Get 12 FREE VHS or DVDs!
    + +
    +
    Click HERE For Details! +
    +

    + + +

    +We Only Have HIGH QUALITY
    Porno Movies to Choose From!

    + + "This is a VERY SPECIAL, LIMITED TIME OFFER."

    Get up to 12= + DVDs absolutely FREE,
    with NO COMMITMENT! +

    +There's no better deal anywhere.
    +There's no catches and no gimmicks.
    You only pay for the= + shipping,
    and the DVDs are absolutely free!

    + +Take a Peak at our F= +ull Catalog! + + +
    +
    +

    + + +

    + +
    + + + High quality cum filled titles such as:

    + = +500 Oral Cumshots 5
    + +
    Description: 500 Oral Cum Shots! I need hot jiz on my face= +!
    Will you cum in my mouth?


    + + +

    + +
    + + + Dozens of Dirty Hardcore titles such as:

    <= +center> + = +Amazing Penetrations No. 17
    + +
    Description: 4 full hours of amazing penetrations
    with= + some of the most beautiful women in porn!


    + + +

    + +
    + + From our "Sexiest Innocent Blondes" collections:<= +br>
    + = +Audition Tapes
    + +
    Description: Our girls go from cute, young and innocent, <= +br>to screaming sex goddess + beggin' to have massive cocks in their tight,
    wet pussies and asses!<= +br


    +





    +
    + + + + + + diff --git a/Ch3/datasets/spam/spam/00492.73db79fb9ad03aff1e08deb73b83203c b/Ch3/datasets/spam/spam/00492.73db79fb9ad03aff1e08deb73b83203c new file mode 100644 index 000000000..2dbf090bd --- /dev/null +++ b/Ch3/datasets/spam/spam/00492.73db79fb9ad03aff1e08deb73b83203c @@ -0,0 +1,115 @@ +From akakay54@excite.com Tue Dec 3 11:57:08 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id B1F4E16F16 + for ; Tue, 3 Dec 2002 11:57:07 +0000 (GMT) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Dec 2002 11:57:07 +0000 (GMT) +Received: from eigmail.eigec.com ([202.105.138.211]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id gB391C829340 for + ; Tue, 3 Dec 2002 09:01:14 GMT +Received: from xmxpita.excite.com (h-66-166-138-180.MCLNVA23.covad.net + [66.166.138.180]) by eigmail.eigec.com with SMTP (Microsoft Exchange + Internet Mail Service Version 5.5.2653.13) id X46K98L3; Tue, + 3 Dec 2002 01:33:44 +0800 +Message-Id: <00006387410f$00006fc4$000027b0@xmxpita.excite.com> +To: +From: "CallBack Centre" +Subject: Today's Special: Amazing Penetrations No. 17 29264 +Date: Mon, 02 Dec 2002 12:35:14 -1700 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable +Reply-To: akakay54@excite.com + +
    + + + +

    +
    + +
    Get 12 FREE VHS or DVDs!
    + +
    +
    Click HERE For Details! +
    +

    + + +

    +We Only Have HIGH QUALITY
    Porno Movies to Choose From!

    + + "This is a VERY SPECIAL, LIMITED TIME OFFER."

    Get up to 12= + DVDs absolutely FREE,
    with NO COMMITMENT! +

    +There's no better deal anywhere.
    +There's no catches and no gimmicks.
    You only pay for the= + shipping,
    and the DVDs are absolutely free!

    + +Take a Peak at our F= +ull Catalog! + + +
    +
    +

    + + +

    + +
    + + + High quality cum filled titles such as:

    + = +500 Oral Cumshots 5
    + +
    Description: 500 Oral Cum Shots! I need hot jiz on my face= +!
    Will you cum in my mouth?


    + + +

    + +
    + + + Dozens of Dirty Hardcore titles such as:

    <= +center> + = +Amazing Penetrations No. 17
    + +
    Description: 4 full hours of amazing penetrations
    with= + some of the most beautiful women in porn!


    + + +

    + +
    + + From our "Sexiest Innocent Blondes" collections:<= +br>
    + = +Audition Tapes
    + +
    Description: Our girls go from cute, young and innocent, <= +br>to screaming sex goddess + beggin' to have massive cocks in their tight,
    wet pussies and asses!<= +br


    +





    +
    + + + + + + diff --git a/Ch3/datasets/spam/spam/00493.1c5f59825f7a246187c137614fb1ea82 b/Ch3/datasets/spam/spam/00493.1c5f59825f7a246187c137614fb1ea82 new file mode 100644 index 000000000..393436365 --- /dev/null +++ b/Ch3/datasets/spam/spam/00493.1c5f59825f7a246187c137614fb1ea82 @@ -0,0 +1,188 @@ +From dega_jc271@hotmail.com Tue Dec 3 11:57:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 5C5C916F17 + for ; Tue, 3 Dec 2002 11:57:10 +0000 (GMT) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Dec 2002 11:57:10 +0000 (GMT) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id gB39ZY830733 for + ; Tue, 3 Dec 2002 09:35:34 GMT +Received: from hotmail.com ([202.106.168.178]) by webnote.net + (8.9.3/8.9.3) with SMTP id JAA15480 for ; + Tue, 3 Dec 2002 09:37:03 GMT +Reply-To: "hey" +Message-Id: <012a12a22e6b$4242c4a3$6cb82ad2@nsnnbl> +From: "hey" +To: Administrator@webnote.net +Subject: GOV'T GUARANTEED HOME BUSINESS +Date: Tue, 03 Dec 2002 09:34:07 -0000 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) +Importance: Normal + +
    + + + Secured Investements + + + +

    +

    + + + +
    WEALTH WITHOUT RISK!!! +
    +

    +

    + + + +
    Discover The Best Kept Secret In America! +
    + + + +
    +

    Turning $300 Into $20,000 +

    +

    In Oklahoma, Craig +Talkington purchased a Tax Lien on a 5 acre parcel for +$300. The owner failed to pay the taxes and forfeited +the 5-acre parcel to Craig Talkington. A short time +later Craig sold that property to one of the neighbors +for $20,000. That's the kind of money that buys new +cars and sends young people to college. Craig didn't +stop at one deal. He later bought a tax lien for only +$17 on a ten acre track, the property owner failed to +pay the taxes, and Craig ended up the property, which +he sold for $4,000. I don't know how much money you +are making right now but these are the kinds of +profits that change peoples lives and solve financial +problems and make things a lot better. +

    +

    +

    + + + +
    Janice Knetzger Turned A $463.00 Investment Into $65,000.00!
    + Wayne Robertson Paid $1.00 For A Home! +
    Todd Beemer Turned A $21,500 Investment Into $150,000.00! +
    +

    +

    + + +
    For Serious Investors and Entrepreneurs Only
    +
    +

    +

    + + + +
    For a + FREE +Consultantion to see if you qualify
    +
    +
    +

    + + + +
    Fill out +the no obligation form below for more +information. +

    +

    + + + +
    Required Input Field*

    +

    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + +
    NAME + *
    ADDRESS + *
    CITY + *
    STATE + *
    PHONE + *
    EMAIL ADDRESS + *
    +

    +

    +

    +

    + + + +
    *All +tax liens and deeds directly support local + fire departments, police departments, schools, +roads, and hospitals. Thank you for your interest and +support.
    + To be removed, please + click here
    .

    + +4589dfSl1-151rzeh9359iYoc9-006Fl29 + + diff --git a/Ch3/datasets/spam/spam/00494.fd2efa67e63247ee89cdcf3a6fe7906d b/Ch3/datasets/spam/spam/00494.fd2efa67e63247ee89cdcf3a6fe7906d new file mode 100644 index 000000000..ea5724bcf --- /dev/null +++ b/Ch3/datasets/spam/spam/00494.fd2efa67e63247ee89cdcf3a6fe7906d @@ -0,0 +1,76 @@ +From ilug-admin@linux.ie Tue Dec 3 15:15:11 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E9F2F16F16 + for ; Tue, 3 Dec 2002 15:15:10 +0000 (GMT) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Dec 2002 15:15:10 +0000 (GMT) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id gB3EJa812647 for + ; Tue, 3 Dec 2002 14:19:36 GMT +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 9FC8E3423E; Tue, 3 Dec 2002 14:21:09 +0000 (GMT) +Delivered-To: linux.ie-ilug@localhost +Received: from mail.tuatha.org (node-c-0c73.a2000.nl [62.194.12.115]) by + lugh.tuatha.org (Postfix) with SMTP id ED16B341D0 for ; + Tue, 3 Dec 2002 14:20:37 +0000 (GMT) +From: "manueloko1000@netscape.net" +To: ilug@linux.ie +MIME-Version: 1.0 +Content-Type: text/plain;charset="iso-8859-1" +Content-Transfer-Encoding: 7bit +Message-Id: <20021203142037.ED16B341D0@lugh.tuatha.org> +Subject: [ILUG] MANUEL OKO +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 03 Dec 2002 15:20:18 +Date: Tue, 03 Dec 2002 15:20:18 + +ATTN:SIR/MADAN + + STRICTLY CONFIDENTIAL. + +I am pleased to introduce myself to you.My name is Mr. Manuel Oko a native of South Africa and a senior employee of mines and natural resources department currently on a trainning course in Holland for few months. + +I am writing this letter to request your assistance in order to redeem an investment with the South African mining Corporation.The said investment, now valued at ($15.5 million dollars ) Fifteen million,five hundred thousand dollars only was purchased by Lucio Harper and contracted out to the South African Mining Corporation in 1977 now recognised as mines and natural resources department.This redeemable investment interest,has now matured since March last year. + +Since MARCH last year, several attempts have been made to contact Lucio Harper without success and there is no way to contact any of his close relatives in whose favour the investment cash value can be paid. + +Since we have access to all Lucio Harper's information,we can claim this money with the help of my partners with the South African Mines and natural resources department.All we have to do is to file claim using you as Lucio Harper's relative. + +I will like to assure you that there is absolutely nothing to worry about,because it is perfectly safe with no risk involved.Please ensure to keep this matter strictly confidential.My partner will file a claim for this money on your behalf from the SouthAfrican mining Corporation.When the claim is approved,you as the beneficiary +will be paid (25%) of the total amouth. + +Since this money can be paid directly into any bank account of your choice,you have responsibility to ensure that my partner and Ireceive(70%)of the total amouth.While the balance (5%) will be set aside for any unforseen expenses in the cause of transfering this money. + +I will appreciate if you can give your assurance and guarantee that our share will be well secured.Please for the sake of confidentiality,reach me on my e-mail address: manueloko1000@netscape.net . Please let me know if this proposal is acceptable to you. Kindly reach me immediately with any of the stated contact addresses so that better clearifications +relating to the transaction will be explained to you. + + +Truly yours + +Manuel Oko + + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00495.e22a609b7dc412c120d09e11544c67fb b/Ch3/datasets/spam/spam/00495.e22a609b7dc412c120d09e11544c67fb new file mode 100644 index 000000000..d2bbbb045 --- /dev/null +++ b/Ch3/datasets/spam/spam/00495.e22a609b7dc412c120d09e11544c67fb @@ -0,0 +1,76 @@ +From ilug-admin@linux.ie Tue Dec 3 15:16:02 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 6898616F17 + for ; Tue, 3 Dec 2002 15:16:01 +0000 (GMT) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Dec 2002 15:16:01 +0000 (GMT) +Received: from lugh.tuatha.org (postfix@lugh.tuatha.org [194.125.145.45]) + by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id gB3Cbb806505 for + ; Tue, 3 Dec 2002 12:37:37 GMT +Received: from lugh.tuatha.org (localhost [127.0.0.1]) by lugh.tuatha.org + (Postfix) with ESMTP id 9A6633422D; Tue, 3 Dec 2002 12:39:09 +0000 (GMT) +Delivered-To: linux.ie-ilug@localhost +Received: from localhost.com (node-c-1074.a2000.nl [62.194.16.116]) by + lugh.tuatha.org (Postfix) with SMTP id 1773D3420E for ; + Tue, 3 Dec 2002 12:38:07 +0000 (GMT) +From: "DESMOND STEVENS." +Reply-To: desmondstevens@iname.com +To: ilug@linux.ie +X-Mailer: Microsoft Outlook Express 5.00.2919.7000 Demo +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Message-Id: <20021203123807.1773D3420E@lugh.tuatha.org> +Subject: [ILUG] please kindly get back to me +Sender: ilug-admin@linux.ie +Errors-To: ilug-admin@linux.ie +X-Beenthere: ilug@linux.ie +X-Mailman-Version: 2.0.11 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: Irish Linux Users' Group +List-Unsubscribe: , + +List-Archive: +X-Original-Date: Tue, 3 Dec 2002 13:38:05 +0100 +Date: Tue, 3 Dec 2002 13:38:05 +0100 +Content-Transfer-Encoding: 8bit +X-MIME-Autoconverted: from quoted-printable to 8bit by dogma.slashnull.org + id gB3Cbb806505 + + + + + + + + +FROM:MR. DESMOND STEVENS + + URGENT ASSISTANCE. +YOU MAY BE SURPRISED TO RECEIVE THIS LETTER FROM ME SINCE YOU DO NOT KNOW ME PERSONALLY. I AM MR.DESMOND STEVENS, THE FIRST SON OF DR. DENNIS STEVENS, WHO WAS RECENTLY MURDERED IN THE LAND DISPUTE IN ZIMBABWE. I WAS FURNISHED WITH VIABLE INFORMATION FROM THE WORLD TRADE CENTRE HERE IN AMSTERDAM, THE NETHERLANDS AND DECIDED TO WRITE YOU. +BEFORE THE DEATH OF MY FATHER, HE HAD TAKEN ME TO AMSTERDAM TO DEPOSIT THE SUM OF TEN MILLION,FIVE HUNDRED THOUSAND UNITED STATES DOLLARS (US$10,500,000) IN A SECURITY COMPANY, AS IF HE FORESAW THE LOOMING DANGER IN ZIMBABWE. THIS MONEY WAS DEPOSITED IN A BOX AS GEMSTONES TO AVOID MUCH DEMURRAGE FROM THE SECURITY COMPANY. THIS AMOUNT WAS MEANT FOR THE PURCHASE OF NEW MACHINES AND CHEMICALS FOR THE FARMS AND ESTABLISHMENT OF NEW FARM IN SWAZILAND. THIS LAND PROBLEM CAME WHEN ZIMBABWE PRESIDENT MR. ROBERT MUGABE, INTRODUCED A NEW LAND ACT THAT WHOLLY AFFECTED RICH WHITE FARMERS AND SOME FEW BLACK FARMERS. THIS RESULTED TO THE KILLING AND MOB ACTION BY ZIMBABWE WAR VETERANS AND SOME LUNATICS IN THE SOCIETY. INFACT, A LOT OF PEOPLE WERE KILLED BECAUSE OF THIS LAND REFORM ACT OF WHICH MY FATHER WAS ONE OF THE VICTIMS. IT IS AGAINST THIS BACKGROUND THAT MY FAMILY AND I WHO ARE CURRENTLY STAYING IN AMSTERDAM DECIDED TO TRANSFER MY FATHER’S MONEY TO + A FOREIGN ACCOUNT. SINCE THE LAW OF THE NETHERLANDS PROHIBIT A REFUGEE (ASYLUM SEEKER) TO OPEN ANY ACCOUNT OR TO BE INVOLVED IN ANY FINANCIAL TRANSACTION. +AS THE ELDEST SON OF MY FATHER, I AM SADDLED WITH THE RESPONSIBILITY OF SEEKING A GENUINE FOREIGN ACCOUNT WHERE THIS MONEY COULD BE TRANSFERRED WITHOUT THE KNOWLEDGE OF MY GOVERNMENT WHO ARE BENT ON TAKING EVERYTHING WE HAVE GOT. I AM FACED WITH THE DILEMMA OF INVESTING THIS AMOUNT OF MONEY IN THE NETHERLANDS FOR THE FEAR OF GOING THROUGH THE SAME EXPERIENCE IN FUTURE SINCE BOTH COUNTRIES HAVE SIMILAR HISTORY. MOREOVER, THE NETHERLANDS FOREIGN EXCHANGE POLICY DOES NOT ALLOW SUCH INVESTMENT FROM ASYLUM SEEKERS. AS A BUSINESSMAN, WHOM I HAVE ENTRUSTED MY FUTURE AND MY FAMILY IN HIS HANDS, I MUST LET YOU KNOW THAT THIS TRANSACTION IS RISK FREE. IF YOU ACCEPT TO ASSIST ME AND MY FAMILY, ALL I NEED YOU TO DO FOR ME IS TO MAKE ARRANGEMENT AND COME TO AMSTERDAM, THE NETHERLANDS SO THAT YOU CAN OPEN THE NON-RESIDENT ACCOUNT WHICH WILL AID US IN TRANSFERRING THE MONEY INTO ANY ACCOUNT YOU WILL NOMINATE OVERSEAS. THIS MONEY I INTEND TO USE FOR INVESTMENT. I HAVE + OPTIONS TO OFFER YOU, FIRST YOU CAN CHOOSE TO HAVE CERTAIN PERCENTAGE OF THE MONEY FOR NOMINATING YOUR ACCOUNT FOR THE TRANSACTION, OR YOU CAN GO INTO PARTNERSHIP WITH ME FOR A PROPER PROFITABLE INVESTMENT OF THE MONEY IN YOUR COUNTRY. WHICHEVER OPTION YOU CHOOSE, FEEL FREE TO NOTIFY ME. I HAVE MAPPED OUT 5% OF THIS MONEY FOR ALL EXPENSES INCURRED IN PROCESSING THIS TRANSACTION. IF YOU DO NOT PREFER A PARTNERSHIP, I AM WILLING TO GIVE YOU 25% OF THE MONEY WHILE THE REMAINING 70% THAT IS MEANT FOR ME, WILL BE FOR THE INVESTMENT IN YOUR COUNTRY. +PLEASE, CONTACT ME WITH THE ABOVE TELEPHONE AND E-MAIL ADDRESS, WHILE I IMPLORE YOU TO MAINTAIN THE ABSOLUTE SECRECY REQUIRED IN THE TRANSACTION. +YOURS FAITHFULLY, +DESMOND STEVENS. + + + + + + + +-- +Irish Linux Users' Group: ilug@linux.ie +http://www.linux.ie/mailman/listinfo/ilug for (un)subscription information. +List maintainer: listmaster@linux.ie + + diff --git a/Ch3/datasets/spam/spam/00496.1a37de098f6c8847c3c7839d73cc7106 b/Ch3/datasets/spam/spam/00496.1a37de098f6c8847c3c7839d73cc7106 new file mode 100644 index 000000000..ed3061093 --- /dev/null +++ b/Ch3/datasets/spam/spam/00496.1a37de098f6c8847c3c7839d73cc7106 @@ -0,0 +1,59 @@ +From yelanotyami912@bot.or.th Tue Dec 3 15:16:04 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id A3E6516F18 + for ; Tue, 3 Dec 2002 15:16:03 +0000 (GMT) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Dec 2002 15:16:03 +0000 (GMT) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id gB3DrV811037 for + ; Tue, 3 Dec 2002 13:53:33 GMT +Received: from ipn ([211.217.6.151]) by webnote.net (8.9.3/8.9.3) with + ESMTP id NAA16603 for ; Tue, 3 Dec 2002 13:55:04 GMT +Received: from datanet.ro ([212.185.27.10]) by ipn with Microsoft + SMTPSVC(5.0.2195.2966); Tue, 3 Dec 2002 22:56:10 +0900 +Message-Id: <000049450530$00001a10$00004d94@emn.ru> +To: +Cc: , , +From: "Rob" +Subject: hurry +Date: Tue, 03 Dec 2002 08:54:07 -1700 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable +Reply-To: yelanotyami912@bot.or.th +X-Originalarrivaltime: 03 Dec 2002 13:56:10.0968 (UTC) FILETIME=[BC6AAD80:01C29AD3] + + + +Toy + + +
    +

    ABC's Good Morning America ranks it the #1 Christmas Toy of the seaso= +n!

    +

    "The new 3-inch mini remote control cars are out of stock eve= +rywhere! + Parents are searching frantically but having no luck. There are millio= +ns of + kids expecting these for the Holiday season, lets hope somebody gets t= +hem + in or Santa may be in trouble!" Dianne Sawyer, Nov 2002

    +

    Sold Out in all stores accross the country. Retail price is $59.99. W= +e have + limited stock and Free shipping for only $29.95!

    +

    Check out this Years Hott= +est Toy!

    +

     

    +

    unsubs= +cribe + forever

    +
    + + + + + + diff --git a/Ch3/datasets/spam/spam/00497.ebf699da617b11135f3aa9173b9781b9 b/Ch3/datasets/spam/spam/00497.ebf699da617b11135f3aa9173b9781b9 new file mode 100644 index 000000000..340151796 --- /dev/null +++ b/Ch3/datasets/spam/spam/00497.ebf699da617b11135f3aa9173b9781b9 @@ -0,0 +1,119 @@ +From bolttish@hotmail.com Tue Dec 3 15:16:06 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id E094916F17 + for ; Tue, 3 Dec 2002 15:16:05 +0000 (GMT) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Dec 2002 15:16:05 +0000 (GMT) +Received: from SENSUR.akershus-f.kommune.no ([148.83.253.66]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id gB3DrB811008 for + ; Tue, 3 Dec 2002 13:53:11 GMT +Received: from mx14.hotmail.com (unverified) by + SENSUR.akershus-f.kommune.no (Content Technologies SMTPRS 4.3.1) with + ESMTP id ; + Wed, 27 Nov 2002 11:44:19 +0100 +Message-Id: <00006e3648ca$000032cf$0000640b@mx14.hotmail.com> +To: +Cc: , , + , , + , , , + , , , + , , + , , , + , , + , , , + , , + , , + , , + , , , + , , + , , + , , + , , + , , + , , + , , , + +From: bolttish@hotmail.com +Subject: Do you need a second MORTGAGE? 22956 +Date: Wed, 27 Nov 2002 18:40:15 -0400 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable +Reply-To: bolttish@hotmail.com + + + +Untitled Document + + + + +

     

    +

     

    + + + + +
    + + + + + +
    +
    + + + + +
    +
    + + + + + + + + +

    + Did you receive an email advertisement in err= +or? + Our goal is to only target individuals who would like to take advant= +age + of our offers. If you'd like to be removed from our mailing list, pl= +ease + click on the link below. You will be removed immediately and automat= +ically + from all of our future mailings.
    +
    +
    We= + protect + all email addresses from other third parties. Thank you.= +Please + remove me.
    + + + + + + diff --git a/Ch3/datasets/spam/spam/00498.48c3098854d339353f1a28a13b196017 b/Ch3/datasets/spam/spam/00498.48c3098854d339353f1a28a13b196017 new file mode 100644 index 000000000..7d36f4cda --- /dev/null +++ b/Ch3/datasets/spam/spam/00498.48c3098854d339353f1a28a13b196017 @@ -0,0 +1,54 @@ +From removeme@marysstore.com Tue Dec 3 15:16:09 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 21DD516F18 + for ; Tue, 3 Dec 2002 15:16:08 +0000 (GMT) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Dec 2002 15:16:08 +0000 (GMT) +Received: from webnote.net (mail.webnote.net [193.120.211.219]) by + dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id gB3EBA811998 for + ; Tue, 3 Dec 2002 14:11:11 GMT +Received: from mail.webnote.net (adsl-67-64-113-55.dsl.rcsntx.swbell.net + [67.64.113.55] (may be forged)) by webnote.net (8.9.3/8.9.3) with SMTP id + OAA16696 for ; Tue, 3 Dec 2002 14:12:45 GMT +From: "Mary's Store" +Date: Tue, 03 Dec 2002 08:14:54 +To: yyyy@netnoteinc.com +Subject: +MIME-Version: 1.0 +Content-Type: multipart/related; boundary="----=_NextPart_OOMLWVMESG" +Content-Transfer-Encoding: 7bit +Message-Id: PM20008:14:54 AM + +This is an HTML email message. If you see this, your mail client does not support HTML messages. + +------=_NextPart_OOMLWVMESG +Content-Type: text/html;charset="iso-8859-1" +Content-Transfer-Encoding: 7bit + + + + + + + + + + + +
    THANK YOU FOR SHOPPING WITH US
    +

    GIFTS FOR ALL OCCASIONS

    +

     

    +

    FREE GIFT WITH $50.00 PURCHASE

    31509.jpg (37077 bytes)For a limited time only, receive this 11” plush Santa Bear, FREE, with your purchase of $50.00 or more. +

    When your order totals $50.00 or more (order must be $50.00 or more before shipping and handling) this Santa Bear is added to your cart for free, while supplies last.

    wpe8.jpg (15433 bytes) +

    Mary's Store would like to thank you for being a valued customer.   As our way of saying thanks to you, the customer, we are offering a 15% discount  on all purchases made during the month of  November.  Just enter the word:

    +

    THANKS  

    +

    In the discount code box during checkout to receive your automatic 15% discount.

    +

    CLICK HERE TO ENTER

    +

    MARY'S STORE

    +

    If you do not wish to receive further discounts please click here and type remove in the subject line.

    +------=_NextPart_OOMLWVMESG-- + + diff --git a/Ch3/datasets/spam/spam/00499.988506a852cf86b396771a8bdc8cf839 b/Ch3/datasets/spam/spam/00499.988506a852cf86b396771a8bdc8cf839 new file mode 100644 index 000000000..29e637647 --- /dev/null +++ b/Ch3/datasets/spam/spam/00499.988506a852cf86b396771a8bdc8cf839 @@ -0,0 +1,223 @@ +From eBayInternetMarketing@yahoo.com Tue Dec 3 19:21:45 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id 7382816F16 + for ; Tue, 3 Dec 2002 19:21:43 +0000 (GMT) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Dec 2002 19:21:43 +0000 (GMT) +Received: from yahoo.com (a227055.upc-a.chello.nl [62.163.227.55]) by + dogma.slashnull.org (8.11.6/8.11.6) with SMTP id gB3HpN823687 for + ; Tue, 3 Dec 2002 17:51:23 GMT +Received: from f64.law4.hottestmale.com ([52.20.174.38]) by + symail.kustanai.co.kr with smtp; 04 Dec 2002 08:52:54 -0800 +Received: from [53.206.88.172] by smtp013.mail.yahou.com with QMQP; + 04 Dec 2002 00:45:09 +0300 +Received: from unknown (HELO sydint1.microthink.com.au) (182.213.152.165) + by symail.kustanai.co.kr with asmtp; 04 Dec 2002 03:37:24 -1000 +Reply-To: +Message-Id: <024d30b77e6d$6335b0e6$6ab30da6@abrbwu> +From: +To: +Subject: Earn Your Fortune on eBay! +Date: Tue, 03 Dec 2002 18:44:52 -0100 +MIME-Version: 1.0 +Content-Type: text/html; charset="iso-8859-1" +X-Priority: 3 (Normal) +X-Msmail-Priority: Normal +X-Mailer: Internet Mail Service (5.5.2650.21) +Importance: Normal + + + + + + +
    +
    + + + + + + + +
    +
    + + + + + + + + + + + +
    The + Famous + eBay Marketing e-Course...

    + +

     

    +
    + +
    +

    +
    + +
    +

    +
    + + + + + + + + + + + + + + + + + + + + + +
      + Learn To + Sell With the Complete eBay™ +Auction Marketing e-Course + +

    Here's + YOUR Chance To Join The Online + Selling Revolution And EARN A FULL TIME INCOME!

    + +

    + Our eBay Marketing e-Course will show you how to create +HUGE profits selling on eBay!

    +
    + +
    + +

     Do you sell on eBay? If so, you could be making up +to $100,000 per month.
    +
    + This is no hype and no scam. Receiving over 1.5 billion page views per +month, eBay is the ULTIMATE venue for selling virtually anything and making +huge profits with almost no effort. But you have to know what to sell and +how to sell. That's where I come in.
    +
    + As a leading expert in internet marketing and the owner of several profitable +auction-based businesses, the manual that I have written provides easy to +understand and detailed instructions for maximizing your profits with selling +strategies that are PROVEN WINNERS.
    +
    + If you've read any other books on eBay, you know that all of them are designed +for the computer idiot and the auction novice. They tell you how to register, +how to list an item, how to avoid fraud, etc. This is not the information +you need to make millions on eBay. You need to learn effective SELLING STRATEGIES +not read a photocopy of eBay help files! My manual assumes that you already +know your way around eBay; you don't need any specialized computer knowledge, +but you should be familiar with buying and selling on eBay auctions. I'm +not going to waste your time teaching you how to register - I'm going to +pass on the SECRET SELLING TECHNIQUES that I use each and every day to bring +in hundreds of thousands of dollars selling my products on internet auctions. +The manual comes as a complete course with the following lessons:

    +

    +

    Make a Fortune on eBay™ 
    + Make a Fortune on eBay™ is filled with page after page +of vital eBay™ marketing information. This valuable e-Book +is terrific for the eBay™ user to get the right eBay™ information +and have an instant edge over other more experienced eBay™ +Sellers

    +

    Advanced Selling on eBay™ 
    + Advanced Selling on eBay™ has more vital information +to make their auction a success. This e-Book has many topics +to ensure that they get the maximum potential from their +auctions. Advanced Selling on eBay™ goes into more detailed +information than it's sister e-Book Make a Fortune on eBay™.

    +

    16 eBay™ Forms 
    +
    "16 eBay™ Forms" is a must. These +forms will help them track, analyze and record their auctions. +It contains 16 forms with full instructions. This E-Book +also contains the forms in printer friendly version, so + they can print them for immediate use.

    +

    Wholesale Sources
    +
    Wholesale Sources is the final e-Book +in the eBay™ Marketing e-Course. It contains wholesale distributors +from the United States, Mexico, Hong Kong, Taiwan, Asia +and the Philippines.  Armed with this e-Book your customers +will have over 10,000,000 wholesale products at their +finger tips..

    +

    This manual is designed for individuals looking to form +an online business for extra income or as a full-time job making hundreds +of thousands of dollars on eBay. Contained in the manual are WINNING STRATEGIES +for selling on eBay auctions. The manual is not designed for eBay novices +and does not teach the "basics" such as registering, putting an item online, +buying an item, etc. This manual is designed to make eBay users into successful +and wealthy entrepreneurs!
    +
    +

    +

    Not only will you be able to make THOUSANDS with the +information in these e-Books, you will also receive FULL +Resellers rights. This is not an affiliate program where + you get 20 or 30%... you keep all the money generated from your + e-Course sales.

    + +

    You can sell this e-Course as many times as you want for + whatever price you choose. There is NO LIMIT on how much +you can make from this incredible product!
    +

    + +

    + +
    +

    +
    + +
    + + + + + + + + +
    + +

    Sell these e-Books individually or +as a complete e-Course. Give "Make a Fortune on eBay" +for free and use "Advanced Selling on eBay", "16 +eBay Forms" and "Wholesale Sources" as a sell up.  +

    +
    +
    +
    All 4 e-Books +for only $19.99.  Click Here To Order Your e-Course Today!
    + +

     

    +
    Please allow up to 24 hours to +process your order (1-2 hours during business hours).
    +
    +Thank you for your time and I hope to hear from you soon!
    +
    +
    +
    +
    +
    + +

     

    + + + + + diff --git a/Ch3/datasets/spam/spam/00500.85b72f09f6778a085dc8b6821965a76f b/Ch3/datasets/spam/spam/00500.85b72f09f6778a085dc8b6821965a76f new file mode 100644 index 000000000..43c9e73fe --- /dev/null +++ b/Ch3/datasets/spam/spam/00500.85b72f09f6778a085dc8b6821965a76f @@ -0,0 +1,158 @@ +From email@hkem.com Tue Dec 3 11:46:36 2002 +Return-Path: +Delivered-To: yyyy@localhost.spamassassin.taint.org +Received: from localhost (jalapeno [127.0.0.1]) + by jmason.org (Postfix) with ESMTP id F161516F16 + for ; Tue, 3 Dec 2002 11:46:31 +0000 (GMT) +Received: from jalapeno [127.0.0.1] + by localhost with IMAP (fetchmail-5.9.0) + for jm@localhost (single-drop); Tue, 03 Dec 2002 11:46:32 +0000 (GMT) +Received: from hkem.com ([61.236.128.64]) by dogma.slashnull.org + (8.11.6/8.11.6) with ESMTP id gB3Be9803237 for ; + Tue, 3 Dec 2002 11:40:11 GMT +Message-Id: <200212031140.gB3Be9803237@dogma.slashnull.org> +From: email@hkem.com +Subject: HK Email marking ! +To: yyyy@spamassassin.taint.org +Content-Type: text/html;charset="GB2312" +Reply-To: email@hkem.com +Date: Tue, 3 Dec 2002 19:41:57 +0800 +X-Priority: 3 +X-Mailer: Microsoft Outlook Express 5.00.2615.200 + + + + +

    (Hello,This is Chinese Traditional)
    +

    +
    +
    +
    +

    ëŠ×Óà]¼þ ¡ª¡ª21ÊÀ¼o×îÓÐЧµÄÐû‚÷·½Ê½£º
    +   ÄúÏë׌®”µØ10ÈfÈËͬһ•r¿ÌÖªµÀÄúµÄV¸æ†á£¿ÄúÏë·½±ã¿ì½ÝµÄÐû‚÷ÄúµÄÆó˜I†á£¿ +
    +   ÄúÏëÔÚÉ̘I¸‚ ŽÖв½²½“Œ×ÏÈ™C†á£¿ +ÄúÏëÒ»´Î“íÓЎ׃|‚€“ÔÚÉ̘I¿Í‘ô†á£¿
    +   Ô½íÔ½¶àµÄÕ{²é±íÃ÷ £¬¾W·ֱäNŒ¢•þ³É ‘δí IäN·½Ê½µÄÖ÷Á÷£¬¶øE-mailŒ¢ÊǾWÉÏ IäN×î³£ÓÃÒ²ÊÇ×îŒÓõŤ¾ß¡£
    +ÆäÌØüc£º¹ ‡úV£¬•rЧ¸ß£¬ƒr¸ñµÍ¡£“þeMarketer¹ÀÓ‹£¬ÃÀ‡øÓÐ61%µÄÖеÈÒŽÄ£¹«Ë¾½›³£ß\ÓÃëŠ×Óà]¼þßMÐРIäN»î„Ó¡£
    +
    +²¿·ÖV¸æÃ½ówƽ¾ù»Ø‘ªÂʱÈÝ^ £¨Average Response +Rate Ranges£©
    +¡¡ 0.5-1% ÆÕͨºá·ù¹ã¸æ(banner ads)
    +
    +¡¡ 1-2% ÆÕͨÐżþ(direct mail)
    +
    +¡¡ 10-15% ëŠ×Óà]¼þ(Email)
    +
    +
    +Ò» [à]¼þ³öÊÛ]
    +
    +ÙÙIÈ«Çòà]¼þµØÖ·£º ÿ1000Èf/500HK £¨ÙÙIÈ«²¿9000Èf/3600HK£© +
    +ÙÙIÏã¸Ûà]¼þµØÖ·£º ÿ10Èf/400HK   £¨ÙÙIÏã¸ÛÈ«²¿325Èf/5500HK£© + free download
    +ÙÙIÅ_ž³à]¼þµØÖ·£º ÿ10Èf/400HK   £¨ÙÙIÅ_ž³È«²¿201Èf/4500HK£© + free download
    +
    +    [à]¼þ°lËÍ]
    +V¸æà]¼þ´úÀí°lËÍ£º ÿ10Èf/500HK 20ÈfÆð°l +£¨œÊ´_ÂÊ90%ÒÔÉÏ£©
    +°üÖÜȺ°l£º         Ò»ÖÜ60Èf/2500HK +
    +            +       Ò»ÖÜ100Èf/4000HK +£¨±£×C¾WÕ¾ÈÕÔL†–Á¿ÌáÉý2000ÒÔÉÏ£©
    +°üÔÂȺ°l£º         Ò»ÔÂ500Èf/9500HK +£¨±£×C¾WÕ¾ÈÕÔL†–Á¿ÌáÉý5000ÒÔÉÏ£©
    +
    +    [à]¼þÜ›ów]
    +70ðNÌ×Ⱥ°l£¬ËÑË÷£¬¾W·°lÑÜ›ów/2200HK ׌Äã×Ô¼º“íÓÐÒ»Ì×ÍêÉÆµÄëŠ×Óà]¼þȺ°l£¬ËÑË÷£¬¾W·°lÑϵ½y
    +ÓÐÒâÕßÇëÀ´ÐÅÁªÏµ£ºyhzx599@vip.sina.com

    + + +


    +¶þ ËÑË÷ÒýÇæÔ]ƒÔµÇê‘ £¨³¬Öµ·þ„Õ£¬Ìػ݃r2200 +HK£©
    +ãyºÓÖ®ÐÇŽÍÄúµÇê‘È«Çò6000‚€Ó¢ÎÄËÑË÷ÒýÇæ£¬ßM200‚€ÖÐÎÄËÑË÷ÒýÇæ¡£×ŒÄãµÄ¾WÕ¾Ïí×uÈ«Çò¡£
    +
    +
    +e-mailµØÖ·ÔÚ¸÷µØ…^µÄ·ÖÑ”µÁ¿
    +
    +Ïã¸Û¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª32525642‚€ + free download the sample
    +Å_ž³¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª20012356‚€ + free download the sample
    +È«Çò¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª9000Èf
    +
    +
    +
    +  ãyºÓÖ®ÐÇ“íÓЇøƒÈÍâÉσ|‚€ÓÐЧµÄemailλַÙYÁώ죬¿ÉÒÔ¸ù“þ¿Í‘ôµÄÐèÒª£¬ÔÚÖ¸¶¨µÄµØ·½£¬…^Óò,ÐИIî„eµÈŒÙÐÔͶ·ÅëŠ×Óà]¼þV¸æ¡£
    +È磺ÄãÏë׌ijµØ10ÈfÈËÒ»Ìì֮֪µÀÄãµÄ®aÆ·£¬ÙYÓ¡£ÄÇ÷áV¸æà]¼þͶ·Å¾ÍÊÇÄã×îºÃµÄ½â›Q·½°¸£¬ËüµÄƒr¸ñÊÇËùÓЂ÷úƒr¸ñÖÐ×îµÍ£¬
    +µ«ÓÖÊÇ×îÓÐЧµÄ¡£™CÓöÿ•rÿ¿Ì¶¼µÈ´ýÖøÄ㣬ҲÔSÄãÕýÊÇÓÃÁËß@˜ÓµÄ‚÷úÊֶΣ¬¶ø´ò¿åÁËËùÓеĸ‚ ŽŒ¦ÊÖ¡£Ús¿ìÐЄӰɣ¬×ŒÄãµÄÆó˜I£¬
    +¹«Ë¾Á¢¼´ÕÆÎÕÉ̘I‚÷ýµÄÃüÃ}------V¸æe-mail¡£ß@ÊÇÆÕͨ‚÷äN½› IËù²»ÄܱȔMµÄ¡£
    +
    +
    +“ÀM¼°¸¶¿î·½Ê½£º
    +±¾¹«Ë¾ÄʾW·V¸æ¶àÄ꣬Ðû‚÷Á¦¶Èλ¾ÓÖЇøµÚËÄ´ó¾W·V¸æÉÌÖ®Ò»£¬
    +ÎÒ‚ƒÓÐŒ£éTµÄ¼¼ÐgȈTºÍ¸ßËÙŒ£˜IµÄ·þ„Õϵ½yÄÊ´Ëí—¹¤×÷£¬±ØŒ¢ ‘ÄúµÄÆó˜IÌṩ×îѸ½Ý¡¢×îÓÐЧ¡¢×îMÒâµÄ·þ„Õ¡£
    +
    +
    +ÐèÇó¿Í‘ôÕˆüc“ôß@ÑY£¨Â“ÀMà]Ïä)
    +yhzx599@vip.sina.com £¨íÐÅՈעÃ÷ÄúÐèÒªµÄ·þ„ÕÅc“ÀM·½Ê½£¬ÎÒ‚ƒ•þƒ¿ì»ØÍÄú¡££©

    +
    +¸Û¡¢°Ä¡¢Å_µØ…^¸¶¿î·½Ê½£¨Èκ·ø¼Ò¾ù¿Éµ½®”µØãyÐÐ늅R£¬2-3Ììµ½Ž¤£©
    +Ðèµ½®”µØãyÐÐÞkÀí늅R
    +English:
    +
    +BENIFICIARY CUSTOMER:  wangjingjing
    +A/C BANK:           +   BANK OF CHINA MIANYANG BRANCH
    +A/C NO:           +     8209 9802 0003 158
    +BENIFICIARY'S TEL NO : 0816-6623109
    +
    +ÖÐÎÄŒ¦ÕÕ£º
    +ÊÕ ¿î ÈË£º Íõ¾§¾§
    +ÊÕ¿îãyÐУº ÖЇøãyÐоdê–·ÖÐÐ
    +ޤ    Ì–£º 8209 9802 0003 158
    +ÊÕ¿îÈËëŠÔ’£º0816-6623109
    +
    +2-3Ììµ½Ž¤£¬¿îµ½ááÎÒ‚ƒŒ¢Á¢¼´ ‘ÄúÌṩ×îMÒâ·þ„Õ¡£
    +
    +šgÓ­íÐÅíëŠÖJԃ“ÀM ëŠÔ’£º0086-0816-6623109 +

    +
    +ãyºÓÖ®ÐǾW·ÙYÓÓÐÏÞ¹«Ë¾
    +¹«Ë¾µØÖ·£ºÖЇø´óꑾdê–
    +EMAIL£ºyhzx599@vip.sina.com
    +ÖJÔƒëŠÔ’£º0086-0816-6623109

    +
    +-----------------------------------------------------------------------------------------------------------------------------------
    +¹«Ë¾·þ„ÕŒ£°¸£º¾WÂ·ÍÆV ¾WÕ¾½¨ÔO ¾W·ŒÃû +¾Wí“¼Ä´æ ¹¦ÄÜ׃”µÃû·Q¿Õég Ü›ów°lÕ¹µÈ£¬ƒråXµÍÁ®£¬·þ„ÕƒžÙ|šgÓ­íÐÅíëŠÂ“ÀM
    +-----------------------------------------------------------------------------------------------------------------------------------

    + + + diff --git a/Ch3/datasets/spam/spam/cmds b/Ch3/datasets/spam/spam/cmds new file mode 100644 index 000000000..47accede2 --- /dev/null +++ b/Ch3/datasets/spam/spam/cmds @@ -0,0 +1,500 @@ +mv 00001.7848dde101aa985090474a91ec93fcf0 00001.7848dde101aa985090474a91ec93fcf0 +mv 00002.d94f1b97e48ed3b553b3508d116e6a09 00002.d94f1b97e48ed3b553b3508d116e6a09 +mv 00003.2ee33bc6eacdb11f38d052c44819ba6c 00003.2ee33bc6eacdb11f38d052c44819ba6c +mv 00004.eac8de8d759b7e74154f142194282724 00004.eac8de8d759b7e74154f142194282724 +mv 00005.57696a39d7d84318ce497886896bf90d 00005.57696a39d7d84318ce497886896bf90d +mv 00006.5ab5620d3d7c6c0db76234556a16f6c1 00006.5ab5620d3d7c6c0db76234556a16f6c1 +mv 00007.d8521faf753ff9ee989122f6816f87d7 00007.d8521faf753ff9ee989122f6816f87d7 +mv 00008.dfd941deb10f5eed78b1594b131c9266 00008.dfd941deb10f5eed78b1594b131c9266 +mv 00009.027bf6e0b0c4ab34db3ce0ea4bf2edab 00009.027bf6e0b0c4ab34db3ce0ea4bf2edab +mv 00010.445affef4c70feec58f9198cfbc22997 00010.445affef4c70feec58f9198cfbc22997 +mv 00011.61816b9ad167657773a427d890d0468e 00011.61816b9ad167657773a427d890d0468e +mv 00012.381e4f512915109ba1e0853a7a8407b2 00012.381e4f512915109ba1e0853a7a8407b2 +mv 00013.d3f0b591a65f116ea5d9d4ad919f83aa 00013.d3f0b591a65f116ea5d9d4ad919f83aa +mv 00014.7d38c46424f24fc8012ac15a95a2ac14 00014.7d38c46424f24fc8012ac15a95a2ac14 +mv 00015.048434ab64c86cf890eda1326a5643f5 00015.048434ab64c86cf890eda1326a5643f5 +mv 00016.67fb281761ca1051a22ec3f21917e7c0 00016.67fb281761ca1051a22ec3f21917e7c0 +mv 00017.1a938ecddd047b93cbd7ed92c241e6d1 00017.1a938ecddd047b93cbd7ed92c241e6d1 +mv 00018.5b2765c42b7648d41c93b9b27140b23a 00018.5b2765c42b7648d41c93b9b27140b23a +mv 00019.bbc97ad616ffd06e93ce0f821ca8c381 00019.bbc97ad616ffd06e93ce0f821ca8c381 +mv 00020.29725cf331fc21e18a1809e7d8b27332 00020.29725cf331fc21e18a1809e7d8b27332 +mv 00021.effe1449462a9d7ad7af0f1c94b1a237 00021.effe1449462a9d7ad7af0f1c94b1a237 +mv 00022.8203cdf03888f656dc0381701148f73d 00022.8203cdf03888f656dc0381701148f73d +mv 00023.b6d27c684f5fc803cfa1060adb2d0805 00023.b6d27c684f5fc803cfa1060adb2d0805 +mv 00024.6b5437b14d403176c3f046c871b5b52f 00024.6b5437b14d403176c3f046c871b5b52f +mv 00025.619ab8051359048795e3cd09e82ad1a0 00025.619ab8051359048795e3cd09e82ad1a0 +mv 00026.da18dbed27ae933172f7a70f860c6ad0 00026.da18dbed27ae933172f7a70f860c6ad0 +mv 00027.d1d0f97e096fe08fc80a4939355759e7 00027.d1d0f97e096fe08fc80a4939355759e7 +mv 00028.ace98eff213f4e6314b5571aece625e1 00028.ace98eff213f4e6314b5571aece625e1 +mv 00029.de865ad8d5ad0df985ae2f72388befba 00029.de865ad8d5ad0df985ae2f72388befba +mv 00030.0c9cdd9d4025bd55dac02719ec8d29dc 00030.0c9cdd9d4025bd55dac02719ec8d29dc +mv 00031.a78bb452b3a7376202b5e62a81530449 00031.a78bb452b3a7376202b5e62a81530449 +mv 00032.7b07a09236ce9feb12d80197144d3206 00032.7b07a09236ce9feb12d80197144d3206 +mv 00033.9babb58d9298daa2963d4f514193d7d6 00033.9babb58d9298daa2963d4f514193d7d6 +mv 00034.8e582263070076dfe6000411d9b13ce6 00034.8e582263070076dfe6000411d9b13ce6 +mv 00035.7ce3307b56dd90453027a6630179282e 00035.7ce3307b56dd90453027a6630179282e +mv 00036.256602e2cb5a5b373bdd1fb631d9f452 00036.256602e2cb5a5b373bdd1fb631d9f452 +mv 00037.21cc985cc36d931916863aed24de8c27 00037.21cc985cc36d931916863aed24de8c27 +mv 00038.8d93819b95ff90bf2e2b141c2909bfc9 00038.8d93819b95ff90bf2e2b141c2909bfc9 +mv 00039.889d785885f092c269741b11f2124dce 00039.889d785885f092c269741b11f2124dce +mv 00040.949a3d300eadb91d8745f1c1dab51133 00040.949a3d300eadb91d8745f1c1dab51133 +mv 00041.f1b3402799046db3c1f143a911dc085d 00041.f1b3402799046db3c1f143a911dc085d +mv 00042.3e934ba4075f82283d755174d2642b76 00042.3e934ba4075f82283d755174d2642b76 +mv 00043.548c447db5d9ba3f5546de96baa9b0e6 00043.548c447db5d9ba3f5546de96baa9b0e6 +mv 00044.9eece8e53a8982c26558b9eb38230bb8 00044.9eece8e53a8982c26558b9eb38230bb8 +mv 00045.7282c2c4e009744f2f3450d370009235 00045.7282c2c4e009744f2f3450d370009235 +mv 00046.e0fd04360622dbe9250380447f6465cc 00046.e0fd04360622dbe9250380447f6465cc +mv 00047.0d7a240951e460b5884a8886ee64a8c3 00047.0d7a240951e460b5884a8886ee64a8c3 +mv 00048.8a64080dbd9d868358a22b655fb1b1cd 00048.8a64080dbd9d868358a22b655fb1b1cd +mv 00049.09e42d433e0661f264a25c7d4ed6e3ea 00049.09e42d433e0661f264a25c7d4ed6e3ea +mv 00050.45de99e8c120fddafe7c89fb3de1c14f 00050.45de99e8c120fddafe7c89fb3de1c14f +mv 00051.fd20658f0e586d1f27f9396401f4981c 00051.fd20658f0e586d1f27f9396401f4981c +mv 00052.edb775ef7470f35cd593d07e5a0466a8 00052.edb775ef7470f35cd593d07e5a0466a8 +mv 00053.d88d8b162ca1b7108221fb338cd7d0a5 00053.d88d8b162ca1b7108221fb338cd7d0a5 +mv 00054.62863160db27f89df8c73275b6dae134 00054.62863160db27f89df8c73275b6dae134 +mv 00055.58adfd0c60ebc04370658a76b9352aa1 00055.58adfd0c60ebc04370658a76b9352aa1 +mv 00056.c56d61cadd81b4ade0030c8dee384704 00056.c56d61cadd81b4ade0030c8dee384704 +mv 00057.0a2e17bde9485e999ac2259df38528e2 00057.0a2e17bde9485e999ac2259df38528e2 +mv 00058.64bb1902c4e561fb3e521a6dbf8625be 00058.64bb1902c4e561fb3e521a6dbf8625be +mv 00059.dc5b9ea22c6848c97871f0d9576cc931 00059.dc5b9ea22c6848c97871f0d9576cc931 +mv 00060.ec71d52a6f585ace52f4a2a2be2adfce 00060.ec71d52a6f585ace52f4a2a2be2adfce +mv 00061.bec763248306fb3228141491856ed216 00061.bec763248306fb3228141491856ed216 +mv 00062.3019eac14dfe3c503c03e25e70e63091 00062.3019eac14dfe3c503c03e25e70e63091 +mv 00063.2334fb4e465fc61e8406c75918ff72ed 00063.2334fb4e465fc61e8406c75918ff72ed +mv 00064.65b95365450ebe5eef61e7f1c60edc5e 00064.65b95365450ebe5eef61e7f1c60edc5e +mv 00065.6203de135559b319326445aafd68dbca 00065.6203de135559b319326445aafd68dbca +mv 00066.6afbb1258bcf3e4d59d53c847a84e469 00066.6afbb1258bcf3e4d59d53c847a84e469 +mv 00067.ec108870b01dc3ccb8fabc5def869ca5 00067.ec108870b01dc3ccb8fabc5def869ca5 +mv 00068.d10af636a6082d5172ceb34a944486e6 00068.d10af636a6082d5172ceb34a944486e6 +mv 00069.066b1a012235d062a5da73eead4a6b35 00069.066b1a012235d062a5da73eead4a6b35 +mv 00070.ab34b6c044a55bef3d6c1f64b7521773 00070.ab34b6c044a55bef3d6c1f64b7521773 +mv 00071.4b7e06d97286ec97820a0f8725878126 00071.4b7e06d97286ec97820a0f8725878126 +mv 00072.d519a73b92f487519c2bc5ba45f5eb2c 00072.d519a73b92f487519c2bc5ba45f5eb2c +mv 00073.8dcd40346d48c69a9e075e935395e96d 00073.8dcd40346d48c69a9e075e935395e96d +mv 00074.51aab41b27a9ba7736803318a2e4c8de 00074.51aab41b27a9ba7736803318a2e4c8de +mv 00075.28a918cd03a0ef5aa2f1e0551a798108 00075.28a918cd03a0ef5aa2f1e0551a798108 +mv 00076.066bf704d9c4a3cf45da5ac7a6b684f8 00076.066bf704d9c4a3cf45da5ac7a6b684f8 +mv 00077.c85b7442247d61308f15d86aa125ec28 00077.c85b7442247d61308f15d86aa125ec28 +mv 00078.6944f51ce9c0586d8f9137d2d2207df0 00078.6944f51ce9c0586d8f9137d2d2207df0 +mv 00079.cc3fa7d977a44a09d450dde5db161c37 00079.cc3fa7d977a44a09d450dde5db161c37 +mv 00080.5a7386cb47846dfef68429241ad80354 00080.5a7386cb47846dfef68429241ad80354 +mv 00081.123b29a781b2e8c83763e5d440e672a3 00081.123b29a781b2e8c83763e5d440e672a3 +mv 00082.0341a767bbaca01fd89b6236ef681257 00082.0341a767bbaca01fd89b6236ef681257 +mv 00083.c1891c507954e5b75b72b16712e799bf 00083.c1891c507954e5b75b72b16712e799bf +mv 00084.a9f5b3a9b7feb7070f25ae76320c8ec6 00084.a9f5b3a9b7feb7070f25ae76320c8ec6 +mv 00085.f63a9484ac582233db057dbb45dc0eaf 00085.f63a9484ac582233db057dbb45dc0eaf +mv 00086.9c945bb90f76a8b76331599106c28429 00086.9c945bb90f76a8b76331599106c28429 +mv 00087.f09438ca6392721e63696f4f753effbb 00087.f09438ca6392721e63696f4f753effbb +mv 00088.1673f91313df07da1a18b2fc458dd4c4 00088.1673f91313df07da1a18b2fc458dd4c4 +mv 00089.7e7baae6ef4a8fb945d7b3fe551329fe 00089.7e7baae6ef4a8fb945d7b3fe551329fe +mv 00090.52630c4c07cd069c7bc7658c1a7a7253 00090.52630c4c07cd069c7bc7658c1a7a7253 +mv 00091.bcaf9648660ba372bc4d542aa06456ad 00091.bcaf9648660ba372bc4d542aa06456ad +mv 00092.8ca54ce0c31e6149b5ef05c0108743be 00092.8ca54ce0c31e6149b5ef05c0108743be +mv 00093.ca4edc32d2ff8e1dbb5f9c0b15ec435b 00093.ca4edc32d2ff8e1dbb5f9c0b15ec435b +mv 00094.7f704c47988221c18cb6a620409442b8 00094.7f704c47988221c18cb6a620409442b8 +mv 00095.17594a58d6736a8f6a1990b0b92090cd 00095.17594a58d6736a8f6a1990b0b92090cd +mv 00096.a791864be5f1205bf2cea0adf241b25a 00096.a791864be5f1205bf2cea0adf241b25a +mv 00097.013347cc91e7d0915074dccb0428883f 00097.013347cc91e7d0915074dccb0428883f +mv 00098.f1f1a3bd3ec32d8e967fba2a7a03e1e5 00098.f1f1a3bd3ec32d8e967fba2a7a03e1e5 +mv 00099.d41a21dc96bb3c3342292f7c9fa4db1e 00099.d41a21dc96bb3c3342292f7c9fa4db1e +mv 00100.81611d62ec1f172be947fda4af7caa2c 00100.81611d62ec1f172be947fda4af7caa2c +mv 00101.5a24bf3ba3962442179b1a0325a1d1cb 00101.5a24bf3ba3962442179b1a0325a1d1cb +mv 00102.fb09d2f978a271fba5a3ffc172003ed9 00102.fb09d2f978a271fba5a3ffc172003ed9 +mv 00103.2eef38789b4ecce796e7e8dbe718e3d2 00103.2eef38789b4ecce796e7e8dbe718e3d2 +mv 00104.04d165183bb8feab0956362c70591b3d 00104.04d165183bb8feab0956362c70591b3d +mv 00105.00951a21b8464f4eb4e106d6b14c68b6 00105.00951a21b8464f4eb4e106d6b14c68b6 +mv 00106.f20a99365b7016f8e9dcd8620b472e74 00106.f20a99365b7016f8e9dcd8620b472e74 +mv 00107.e6cd2d9f49514710dc85db0fef5b8726 00107.e6cd2d9f49514710dc85db0fef5b8726 +mv 00108.ce25a55c6b4cc9bcd32ed090ee20785a 00108.ce25a55c6b4cc9bcd32ed090ee20785a +mv 00109.eda1664dd3b3c31b67e5cd04553b6546 00109.eda1664dd3b3c31b67e5cd04553b6546 +mv 00110.f3c4ebe14b439420b53212332326181f 00110.f3c4ebe14b439420b53212332326181f +mv 00111.ae6aba48f8aa83849be067076eea8ce5 00111.ae6aba48f8aa83849be067076eea8ce5 +mv 00112.be81f2f6f7940a9403c9809b4a9e243a 00112.be81f2f6f7940a9403c9809b4a9e243a +mv 00113.eebc11982ccc4730fb8759f94400ce19 00113.eebc11982ccc4730fb8759f94400ce19 +mv 00114.e337195587d1dbb42e8a2b693e9fc938 00114.e337195587d1dbb42e8a2b693e9fc938 +mv 00115.c97af50ef7ccd816f95bbdc6f4d226b2 00115.c97af50ef7ccd816f95bbdc6f4d226b2 +mv 00116.29e39a0064e2714681726ac28ff3fdef 00116.29e39a0064e2714681726ac28ff3fdef +mv 00117.b3ceb6525a1dc935463f3e3080110039 00117.b3ceb6525a1dc935463f3e3080110039 +mv 00118.b31615605a37b4878bd1de4f829c89cb 00118.b31615605a37b4878bd1de4f829c89cb +mv 00119.7bd666ac52f079fb3b5ff0be83b55286 00119.7bd666ac52f079fb3b5ff0be83b55286 +mv 00120.58579af867ff9a702cff23e7b8818a59 00120.58579af867ff9a702cff23e7b8818a59 +mv 00121.bf18a63d6e7d40409f8b722036eadd82 00121.bf18a63d6e7d40409f8b722036eadd82 +mv 00122.98bcaad36eb81e75911371f841f28dfc 00122.98bcaad36eb81e75911371f841f28dfc +mv 00123.a5ee0040ec9a30b3f32f61e547fa5f8f 00123.a5ee0040ec9a30b3f32f61e547fa5f8f +mv 00124.db848e36f1b4c2705cbc16ef33a302d4 00124.db848e36f1b4c2705cbc16ef33a302d4 +mv 00125.120d27c936362896c00a3db9d3a4571e 00125.120d27c936362896c00a3db9d3a4571e +mv 00126.e98e1ba87a38e0cceeb55f3b86dbd4dd 00126.e98e1ba87a38e0cceeb55f3b86dbd4dd +mv 00127.3500d109361b544b0937523adb763588 00127.3500d109361b544b0937523adb763588 +mv 00128.721b6b20d5834d490662e2ae8c5c0684 00128.721b6b20d5834d490662e2ae8c5c0684 +mv 00129.1080cea3a532759b015dc071d033749d 00129.1080cea3a532759b015dc071d033749d +mv 00130.c8128e89eff5b0e61aa864ebfd96afba 00130.c8128e89eff5b0e61aa864ebfd96afba +mv 00131.d955acc659fb151479460f9dd2f87efe 00131.d955acc659fb151479460f9dd2f87efe +mv 00132.0ead3e293c6c41cbffb69670e8b85ae7 00132.0ead3e293c6c41cbffb69670e8b85ae7 +mv 00133.17dccf2499a4245b83890e0784c43499 00133.17dccf2499a4245b83890e0784c43499 +mv 00134.9f41f4111a33dc1efca04de72e1a105a 00134.9f41f4111a33dc1efca04de72e1a105a +mv 00135.00e388e3b23df6278a8845047ca25160 00135.00e388e3b23df6278a8845047ca25160 +mv 00136.faa39d8e816c70f23b4bb8758d8a74f0 00136.faa39d8e816c70f23b4bb8758d8a74f0 +mv 00137.09969121c8540730f1020b5a700b4c42 00137.09969121c8540730f1020b5a700b4c42 +mv 00138.c15973a4d40bed4333079296be2522ca 00138.c15973a4d40bed4333079296be2522ca +mv 00139.b2a205ac25d7d907cdfb3f865dbae1ae 00139.b2a205ac25d7d907cdfb3f865dbae1ae +mv 00140.eba666846fa0a138a90aeef51a627022 00140.eba666846fa0a138a90aeef51a627022 +mv 00141.c30e993ea9a98743b0a98733bdfba8c2 00141.c30e993ea9a98743b0a98733bdfba8c2 +mv 00142.eddc7114a8566cbf83fa8210bf0d3603 00142.eddc7114a8566cbf83fa8210bf0d3603 +mv 00143.13c0751d4b9f10098bb3ac85a435d884 00143.13c0751d4b9f10098bb3ac85a435d884 +mv 00144.4eeba2f228a8658e0d2e3a64764f4f31 00144.4eeba2f228a8658e0d2e3a64764f4f31 +mv 00145.0ec326fee0570953d684e40edd3fa7b8 00145.0ec326fee0570953d684e40edd3fa7b8 +mv 00146.e9b64856c0cd982a64f47c9ab9084287 00146.e9b64856c0cd982a64f47c9ab9084287 +mv 00147.1782d51354c31ea53db25ea927d5c51d 00147.1782d51354c31ea53db25ea927d5c51d +mv 00148.21c30154aa358d903c10c5d8a3ef6ffd 00148.21c30154aa358d903c10c5d8a3ef6ffd +mv 00149.c07359393107925a86798dd72d6a56b3 00149.c07359393107925a86798dd72d6a56b3 +mv 00150.f97c73fa56460a6afc6d9418ad76b5b5 00150.f97c73fa56460a6afc6d9418ad76b5b5 +mv 00151.34bbdbf089edc6f58080753a166a3cfc 00151.34bbdbf089edc6f58080753a166a3cfc +mv 00152.8ed8aaed94054e507af5b9c760dd7be6 00152.8ed8aaed94054e507af5b9c760dd7be6 +mv 00153.6a5ffe584834ea334041ab958cadcadb 00153.6a5ffe584834ea334041ab958cadcadb +mv 00154.b6c448ccff434e2dbe2c7c200a36aa31 00154.b6c448ccff434e2dbe2c7c200a36aa31 +mv 00155.1c37ce73590cc67186717a491ed0db5f 00155.1c37ce73590cc67186717a491ed0db5f +mv 00156.0b541afe96820e3bb8f900b565608269 00156.0b541afe96820e3bb8f900b565608269 +mv 00157.52b0a260de7c64f539b0e5d16198b5bf 00157.52b0a260de7c64f539b0e5d16198b5bf +mv 00158.9c8bf53ed738031b4bfab819c4b3ef13 00158.9c8bf53ed738031b4bfab819c4b3ef13 +mv 00159.b16f070a576c2eb1533aa9e2cf8e6b77 00159.b16f070a576c2eb1533aa9e2cf8e6b77 +mv 00160.cec5f611ae665ff0add6c4928d47f2be 00160.cec5f611ae665ff0add6c4928d47f2be +mv 00161.ae33257753c9bdaaadc9221347868496 00161.ae33257753c9bdaaadc9221347868496 +mv 00162.6d0397cc491b214db1e84e19bb49177a 00162.6d0397cc491b214db1e84e19bb49177a +mv 00163.244a217b150d2129cbdc52b96d992382 00163.244a217b150d2129cbdc52b96d992382 +mv 00164.8536500ed9cadc8397a63b697d043c0b 00164.8536500ed9cadc8397a63b697d043c0b +mv 00165.45db168e8e1a78a66972b9f50c47b6dc 00165.45db168e8e1a78a66972b9f50c47b6dc +mv 00166.1b7ca83ece36a955e80c7f32efe5fd3d 00166.1b7ca83ece36a955e80c7f32efe5fd3d +mv 00167.af33a21e8b279ee28d5e70a6ef1dc86a 00167.af33a21e8b279ee28d5e70a6ef1dc86a +mv 00168.7422ce438a3d745e2cafb7430e5ddb0f 00168.7422ce438a3d745e2cafb7430e5ddb0f +mv 00169.86721d6b50e889ed39c7d302adb2a5ab 00169.86721d6b50e889ed39c7d302adb2a5ab +mv 00170.33a973aa9bb7d122bdfbd96d44332996 00170.33a973aa9bb7d122bdfbd96d44332996 +mv 00171.08c5c55e9c2b4062344655e9ee32b979 00171.08c5c55e9c2b4062344655e9ee32b979 +mv 00172.7fe063c5f90c46934dc79a83d9fdabfe 00172.7fe063c5f90c46934dc79a83d9fdabfe +mv 00173.e10eb62e2c7808674c43d6a5e9e08a1c 00173.e10eb62e2c7808674c43d6a5e9e08a1c +mv 00174.516721408a0d043ffc5258ecc49e907a 00174.516721408a0d043ffc5258ecc49e907a +mv 00175.e672ac062c93c15915d4d264c4282b47 00175.e672ac062c93c15915d4d264c4282b47 +mv 00176.79f82496c612ea28f45f13ca5c47f8c2 00176.79f82496c612ea28f45f13ca5c47f8c2 +mv 00177.56ed33af0cb1d0f700cc2d26a866870b 00177.56ed33af0cb1d0f700cc2d26a866870b +mv 00178.cdecf0f56ddc0bf61e922a131dc806c2 00178.cdecf0f56ddc0bf61e922a131dc806c2 +mv 00179.2174c80cb3eff623dfc991e51a53eb99 00179.2174c80cb3eff623dfc991e51a53eb99 +mv 00180.13a95a2542a0fd01ff24303561cca949 00180.13a95a2542a0fd01ff24303561cca949 +mv 00181.a9ce64eb710cb3f00a7d7db7911291ab 00181.a9ce64eb710cb3f00a7d7db7911291ab +mv 00182.1b9ba0f95506a6f2bf256f40fad0687d 00182.1b9ba0f95506a6f2bf256f40fad0687d +mv 00183.38d9e73b56e7a59ca1472e08076a9b71 00183.38d9e73b56e7a59ca1472e08076a9b71 +mv 00184.ead42d7ed872c504c79928a5f0a2b2eb 00184.ead42d7ed872c504c79928a5f0a2b2eb +mv 00185.8ca19012fa3f2a906f23c3b41f11ffed 00185.8ca19012fa3f2a906f23c3b41f11ffed +mv 00186.a66b4fc4ab114c9cb37e1a31d1ea1aeb 00186.a66b4fc4ab114c9cb37e1a31d1ea1aeb +mv 00187.efd97ab2034b3384606e21db00014ecb 00187.efd97ab2034b3384606e21db00014ecb +mv 00188.3d145a97a4ccf05a36a1f2795b4c331d 00188.3d145a97a4ccf05a36a1f2795b4c331d +mv 00189.58d4489891c5ab450678438eb8cc4a3e 00189.58d4489891c5ab450678438eb8cc4a3e +mv 00190.dbaebac8c91d57cf7c9b9a431606ce54 00190.dbaebac8c91d57cf7c9b9a431606ce54 +mv 00191.9ff80a41f015b7a6c409732e41c0df07 00191.9ff80a41f015b7a6c409732e41c0df07 +mv 00192.e5a6bb15ae1e965f3b823c75e435651a 00192.e5a6bb15ae1e965f3b823c75e435651a +mv 00193.c04ef77bc3dbaa5762760a6ea138df0e 00193.c04ef77bc3dbaa5762760a6ea138df0e +mv 00194.767c323b4ae7a4909397e42cbd0c56a4 00194.767c323b4ae7a4909397e42cbd0c56a4 +mv 00195.0a543c2780491168160570bb6708af86 00195.0a543c2780491168160570bb6708af86 +mv 00196.dd21040c7757d477c967ae71b537810e 00196.dd21040c7757d477c967ae71b537810e +mv 00197.5a921df53d215a60d557c68754559e93 00197.5a921df53d215a60d557c68754559e93 +mv 00198.aad7df5b8be674a0ce09c8040ef53f1e 00198.aad7df5b8be674a0ce09c8040ef53f1e +mv 00199.9be6cec49c53210152780926cdeb59ff 00199.9be6cec49c53210152780926cdeb59ff +mv 00200.bacd4b2168049778b480367ca670254f 00200.bacd4b2168049778b480367ca670254f +mv 00201.00020fc9911604f6cae7ae0f598ad29d 00201.00020fc9911604f6cae7ae0f598ad29d +mv 00202.d5b52386f66bd36cd1508319c82cf671 00202.d5b52386f66bd36cd1508319c82cf671 +mv 00203.3956f8506171ffd90a0060cafad4fdea 00203.3956f8506171ffd90a0060cafad4fdea +mv 00204.a008813ddeb2d5febd1fc676c07e9760 00204.a008813ddeb2d5febd1fc676c07e9760 +mv 00205.312e72065386636132fa6c4a1fde871e 00205.312e72065386636132fa6c4a1fde871e +mv 00206.0c8362d7e86ddcaf39829800ac40e2ca 00206.0c8362d7e86ddcaf39829800ac40e2ca +mv 00207.0b71ac81a360455c1514f5872564b1e1 00207.0b71ac81a360455c1514f5872564b1e1 +mv 00208.369921416af87a0b70f133632131b184 00208.369921416af87a0b70f133632131b184 +mv 00209.5276f967533f2ce0209c1eff631a86ff 00209.5276f967533f2ce0209c1eff631a86ff +mv 00210.050ffd105bd4e006771ee63cabc59978 00210.050ffd105bd4e006771ee63cabc59978 +mv 00211.d976c6049e8448e7c407c124b580e0ba 00211.d976c6049e8448e7c407c124b580e0ba +mv 00212.a9947ad74a529a35d11538e1df60cd73 00212.a9947ad74a529a35d11538e1df60cd73 +mv 00213.8c42a1c257aa30ff3b3ba668cca59408 00213.8c42a1c257aa30ff3b3ba668cca59408 +mv 00214.1367039e50dc6b7adb0f2aa8aba83216 00214.1367039e50dc6b7adb0f2aa8aba83216 +mv 00215.f571ecd203e8d39296419bffc47e4a6a 00215.f571ecd203e8d39296419bffc47e4a6a +mv 00216.89c1ede0b81fb09f7334f47a5183410a 00216.89c1ede0b81fb09f7334f47a5183410a +mv 00217.43b4ef3d9c56cf42be9c37b546a19e78 00217.43b4ef3d9c56cf42be9c37b546a19e78 +mv 00218.917ed95f5c90c1d9d15d2528b0bd1e79 00218.917ed95f5c90c1d9d15d2528b0bd1e79 +mv 00219.eaf6c0ff67706c784f67f5c1225028a1 00219.eaf6c0ff67706c784f67f5c1225028a1 +mv 00220.cf7d03e161582887dc589229e2896e26 00220.cf7d03e161582887dc589229e2896e26 +mv 00221.c4dfeecf0cacc9469540337f5baf69db 00221.c4dfeecf0cacc9469540337f5baf69db +mv 00222.77293b7002c5749b9d31a99b2f4e0366 00222.77293b7002c5749b9d31a99b2f4e0366 +mv 00223.349b9b0748ee72bad60729ffaae2cc00 00223.349b9b0748ee72bad60729ffaae2cc00 +mv 00224.0654fe0af51e1dcefa0eb66eb932f55f 00224.0654fe0af51e1dcefa0eb66eb932f55f +mv 00225.b1ca16fa2be1be1d68f5e3bf2603f3cb 00225.b1ca16fa2be1be1d68f5e3bf2603f3cb +mv 00226.e0e2704cde3bbd561a98042f4a3baf5f 00226.e0e2704cde3bbd561a98042f4a3baf5f +mv 00227.1171cc6d8c586141b4110a2abdccba00 00227.1171cc6d8c586141b4110a2abdccba00 +mv 00228.cf58326ab05a757c7e759acc8d6b360d 00228.cf58326ab05a757c7e759acc8d6b360d +mv 00229.4c37dd3d98b8d6fb2694b6f83061ca5a 00229.4c37dd3d98b8d6fb2694b6f83061ca5a +mv 00230.214f8d9a756aee75e292056c1f65a005 00230.214f8d9a756aee75e292056c1f65a005 +mv 00231.77a5d20da55f185c1bb7a3949332d364 00231.77a5d20da55f185c1bb7a3949332d364 +mv 00232.2d55046b9cf0b192ad6332545ef2a334 00232.2d55046b9cf0b192ad6332545ef2a334 +mv 00233.a268478ca6f03604012ffff8dd3de396 00233.a268478ca6f03604012ffff8dd3de396 +mv 00234.6b386bd178f4ae52c67b6c6d15ece489 00234.6b386bd178f4ae52c67b6c6d15ece489 +mv 00235.45b5f386cf62b5865d9d4440d8b78aab 00235.45b5f386cf62b5865d9d4440d8b78aab +mv 00236.2772a068fff32e2f8d7f8a94bd9280cd 00236.2772a068fff32e2f8d7f8a94bd9280cd +mv 00237.9cee6fd8bdd653d21d92158e702adf50 00237.9cee6fd8bdd653d21d92158e702adf50 +mv 00238.e3e16467d10137fa9a99b1701d76ae94 00238.e3e16467d10137fa9a99b1701d76ae94 +mv 00239.2f1370f9cba5ab21297eadb2af40b051 00239.2f1370f9cba5ab21297eadb2af40b051 +mv 00240.2ff7f745285653a238214d975859406b 00240.2ff7f745285653a238214d975859406b +mv 00241.c28ade5771085a8fddd054a219566b7c 00241.c28ade5771085a8fddd054a219566b7c +mv 00242.e030c8b1f053037aeffb062f3a34b523 00242.e030c8b1f053037aeffb062f3a34b523 +mv 00243.c6e70273fe1cf9e56e26bb6bbeef415d 00243.c6e70273fe1cf9e56e26bb6bbeef415d +mv 00244.5cac9708afd7f9f00e9bf64eeb127f0a 00244.5cac9708afd7f9f00e9bf64eeb127f0a +mv 00245.f129d5e7df2eebd03948bb4f33fa7107 00245.f129d5e7df2eebd03948bb4f33fa7107 +mv 00246.4dc5830a5a3e1fda805613b61822bac8 00246.4dc5830a5a3e1fda805613b61822bac8 +mv 00247.4f7c67c9792706fa90fe218d4b092b7a 00247.4f7c67c9792706fa90fe218d4b092b7a +mv 00248.b243bca51ee69d6e428ca2f45f0fe41b 00248.b243bca51ee69d6e428ca2f45f0fe41b +mv 00249.5f45607c1bffe89f60ba1ec9f878039a 00249.5f45607c1bffe89f60ba1ec9f878039a +mv 00250.32279787338af8a5de4cfbc0b837718e 00250.32279787338af8a5de4cfbc0b837718e +mv 00251.6b4b7e79e1706156839a00817d774e37 00251.6b4b7e79e1706156839a00817d774e37 +mv 00252.7e355e0c5fd1de609684544262435579 00252.7e355e0c5fd1de609684544262435579 +mv 00253.83b95b05e275286eddcf557ea581e754 00253.83b95b05e275286eddcf557ea581e754 +mv 00254.e3e30f2b37ef8db36aa652bb3e563b61 00254.e3e30f2b37ef8db36aa652bb3e563b61 +mv 00255.aeff2fdf2ba6b8b49686df3575859a48 00255.aeff2fdf2ba6b8b49686df3575859a48 +mv 00256.edd9bfb44729edf3c4f177814fd8c9e1 00256.edd9bfb44729edf3c4f177814fd8c9e1 +mv 00257.5c8ef87f8b11d2515df71a7fe46a70b6 00257.5c8ef87f8b11d2515df71a7fe46a70b6 +mv 00258.4af5bde7fabd4e797b85cf95bcbbb45a 00258.4af5bde7fabd4e797b85cf95bcbbb45a +mv 00259.7b838a90b63541213eff9099e1a1aa3c 00259.7b838a90b63541213eff9099e1a1aa3c +mv 00260.c75ce8b8d8bfc55723426979d260bf61 00260.c75ce8b8d8bfc55723426979d260bf61 +mv 00261.12b64e557e52daf5fc5a52e47df2f4e3 00261.12b64e557e52daf5fc5a52e47df2f4e3 +mv 00262.678598cbe253f19239da03b65dac7392 00262.678598cbe253f19239da03b65dac7392 +mv 00263.13fc73e09ae15e0023bdb13d0a010f2d 00263.13fc73e09ae15e0023bdb13d0a010f2d +mv 00264.02b614f34aa0d5970959123b9386b285 00264.02b614f34aa0d5970959123b9386b285 +mv 00265.d2acd28cf29d90c9b7a1297b219187b3 00265.d2acd28cf29d90c9b7a1297b219187b3 +mv 00266.3cf1dcf8df07100b1530493e11f80a25 00266.3cf1dcf8df07100b1530493e11f80a25 +mv 00267.ef433fb350170f28a1567cbc24900e53 00267.ef433fb350170f28a1567cbc24900e53 +mv 00268.9b64189b6da55d1e0a30026ca73eb0da 00268.9b64189b6da55d1e0a30026ca73eb0da +mv 00269.e85c3ef79a5cf21ee1ef7b8df17760e1 00269.e85c3ef79a5cf21ee1ef7b8df17760e1 +mv 00270.5dcd9ce3be2992222b9038d7bf75a23a 00270.5dcd9ce3be2992222b9038d7bf75a23a +mv 00271.85110ef4815c81ccea879857b0b062ed 00271.85110ef4815c81ccea879857b0b062ed +mv 00272.8353b9140b08dab4be0e8ce53f09172b 00272.8353b9140b08dab4be0e8ce53f09172b +mv 00273.0c7d73771d79e84e2aab8c909c5bb210 00273.0c7d73771d79e84e2aab8c909c5bb210 +mv 00274.ecb5ce751d8768ef609c171b84ca07a9 00274.ecb5ce751d8768ef609c171b84ca07a9 +mv 00275.4675c4cce2bf27adaafeef693d562f8b 00275.4675c4cce2bf27adaafeef693d562f8b +mv 00276.a6e447390e371ddba7cee092bb0ec98f 00276.a6e447390e371ddba7cee092bb0ec98f +mv 00277.64128ce1653bc4e1bde9ffe2f83db557 00277.64128ce1653bc4e1bde9ffe2f83db557 +mv 00278.b62c5fc23a2f87760696cb9fa51f073c 00278.b62c5fc23a2f87760696cb9fa51f073c +mv 00279.1d58a13e343c1e53aca2ed2121a3f815 00279.1d58a13e343c1e53aca2ed2121a3f815 +mv 00280.026da2bd191f11081b8d8428134b0c66 00280.026da2bd191f11081b8d8428134b0c66 +mv 00281.db28f3aab77ff478279d8de20d572b42 00281.db28f3aab77ff478279d8de20d572b42 +mv 00282.0e230e05877f40a522bfb93aa3e314f3 00282.0e230e05877f40a522bfb93aa3e314f3 +mv 00283.e8e42ee52f919afd2a453983f1256b1d 00283.e8e42ee52f919afd2a453983f1256b1d +mv 00284.4cdf4c9e9404c79c85ab5ac12ce39e85 00284.4cdf4c9e9404c79c85ab5ac12ce39e85 +mv 00285.8a06c91fcdf4a1ae8ca928f3ef3feecb 00285.8a06c91fcdf4a1ae8ca928f3ef3feecb +mv 00286.efd0b8f0c9c779b7a0ad93505c9b0bae 00286.efd0b8f0c9c779b7a0ad93505c9b0bae +mv 00287.b0495a4dbdff36654c3b3ee2f92bdbf3 00287.b0495a4dbdff36654c3b3ee2f92bdbf3 +mv 00288.8c8bc71976c3b67d900ebd8eeab8a0f5 00288.8c8bc71976c3b67d900ebd8eeab8a0f5 +mv 00289.61a681a72c71512f115ad65033acc7c9 00289.61a681a72c71512f115ad65033acc7c9 +mv 00290.eb053a191b7509a9399aa16717630414 00290.eb053a191b7509a9399aa16717630414 +mv 00291.7aa227e74e89bdd529a3875459d0d5a2 00291.7aa227e74e89bdd529a3875459d0d5a2 +mv 00292.dbf78a2aaa230d288eb80ab843804252 00292.dbf78a2aaa230d288eb80ab843804252 +mv 00293.f4e9fd5549f9063ad5559c094edf08f2 00293.f4e9fd5549f9063ad5559c094edf08f2 +mv 00294.df27a988d82cc82296e33e6d727ac47e 00294.df27a988d82cc82296e33e6d727ac47e +mv 00295.b028688ce4ea3693f4ed591b8ca3f72e 00295.b028688ce4ea3693f4ed591b8ca3f72e +mv 00296.0087354f4bb7c4e756124632a4a7e80a 00296.0087354f4bb7c4e756124632a4a7e80a +mv 00297.3350c2dbbb0272c27b2c7773d7012356 00297.3350c2dbbb0272c27b2c7773d7012356 +mv 00298.90b548a0816ca0783f012bb9c69166cc 00298.90b548a0816ca0783f012bb9c69166cc +mv 00299.f786faed64bef7134e52fafa17ea861f 00299.f786faed64bef7134e52fafa17ea861f +mv 00300.834f370a21ca4f1774d5724b5443411c 00300.834f370a21ca4f1774d5724b5443411c +mv 00301.68fe7955b96d085360ca916289e8e716 00301.68fe7955b96d085360ca916289e8e716 +mv 00302.544366fa4cd0f5d210dd8443a1c2c95a 00302.544366fa4cd0f5d210dd8443a1c2c95a +mv 00303.22239f1393297a691eb5df3dfe7a5001 00303.22239f1393297a691eb5df3dfe7a5001 +mv 00304.ed5fbfc3e6f2be662f29f43f172a1fb3 00304.ed5fbfc3e6f2be662f29f43f172a1fb3 +mv 00305.f80c21904d6d4f6facd036450a588b0d 00305.f80c21904d6d4f6facd036450a588b0d +mv 00306.729a42414b91e9b2bddf273c514c50d7 00306.729a42414b91e9b2bddf273c514c50d7 +mv 00307.7ed50c6d80c6e37c8cc1b132f4a19e4d 00307.7ed50c6d80c6e37c8cc1b132f4a19e4d +mv 00308.c80d7cb2a6981efac408b429d42d2b89 00308.c80d7cb2a6981efac408b429d42d2b89 +mv 00309.d9efb4713f45f4e1237d3f9b757d0916 00309.d9efb4713f45f4e1237d3f9b757d0916 +mv 00310.3f652995aadb0bf696dd10c89ce30afc 00310.3f652995aadb0bf696dd10c89ce30afc +mv 00311.9797029f3ee441b00f3b7521e573cb96 00311.9797029f3ee441b00f3b7521e573cb96 +mv 00312.75c839d7d4f6da9e860a11b617904fb5 00312.75c839d7d4f6da9e860a11b617904fb5 +mv 00313.fab744bfd5a128fca39b69df9811c086 00313.fab744bfd5a128fca39b69df9811c086 +mv 00314.8f7993db02bde4d724e1eff9d2d35db1 00314.8f7993db02bde4d724e1eff9d2d35db1 +mv 00315.0ee82a2e087ffcf6efbd30b36499ead6 00315.0ee82a2e087ffcf6efbd30b36499ead6 +mv 00316.311d11f764c6e452b2f0208b53b94ea2 00316.311d11f764c6e452b2f0208b53b94ea2 +mv 00317.22fe43af6f4c707c4f1bdc56af959a8e 00317.22fe43af6f4c707c4f1bdc56af959a8e +mv 00318.7ce7e3cbbf4fa9c30a67b7ecdda2342e 00318.7ce7e3cbbf4fa9c30a67b7ecdda2342e +mv 00319.a99dff9c010e00ec182ed5701556d330 00319.a99dff9c010e00ec182ed5701556d330 +mv 00320.20dcbb5b047b8e2f212ee78267ee27ad 00320.20dcbb5b047b8e2f212ee78267ee27ad +mv 00321.22ec127de780c31da00ae5e1c1aa32e4 00321.22ec127de780c31da00ae5e1c1aa32e4 +mv 00322.7d39d31fb7aad32c15dff84c14019b8c 00322.7d39d31fb7aad32c15dff84c14019b8c +mv 00323.9e36bf05304c99f2133a4c03c49533a9 00323.9e36bf05304c99f2133a4c03c49533a9 +mv 00324.6f320a8c6b5f8e4bc47d475b3d4e86ef 00324.6f320a8c6b5f8e4bc47d475b3d4e86ef +mv 00325.58d1a52f435030dc38568bc12a3d76a2 00325.58d1a52f435030dc38568bc12a3d76a2 +mv 00326.5ec68244bb085cb140deb79563abd7b3 00326.5ec68244bb085cb140deb79563abd7b3 +mv 00327.7f21bc8575786a0e00341a6407b9f286 00327.7f21bc8575786a0e00341a6407b9f286 +mv 00328.73c1a9f83d3b1247522c26eb6d74c215 00328.73c1a9f83d3b1247522c26eb6d74c215 +mv 00329.af4af411fb1268d1461b29fa2d2145a3 00329.af4af411fb1268d1461b29fa2d2145a3 +mv 00330.c5f7346dec1e6fe6ed324d8e78a2b46e 00330.c5f7346dec1e6fe6ed324d8e78a2b46e +mv 00331.a61788d316e7393c8bbf8ee19b24c713 00331.a61788d316e7393c8bbf8ee19b24c713 +mv 00332.580b62752adefb845db173e375271cb5 00332.580b62752adefb845db173e375271cb5 +mv 00333.4bb36a535cb3d738f30f985f1e10a786 00333.4bb36a535cb3d738f30f985f1e10a786 +mv 00334.a1038f98abb76b403d068afb57bfb290 00334.a1038f98abb76b403d068afb57bfb290 +mv 00335.f71c6e9b23487811a44e6aeaa50e73a5 00335.f71c6e9b23487811a44e6aeaa50e73a5 +mv 00336.92409253178027f58e2c072a7e82791e 00336.92409253178027f58e2c072a7e82791e +mv 00337.813498483bc80a24c002e6e7e8e0f2cb 00337.813498483bc80a24c002e6e7e8e0f2cb +mv 00338.a595ffbb6cbcf3a5058293051ebaabf4 00338.a595ffbb6cbcf3a5058293051ebaabf4 +mv 00339.16bd110d8aa11e7d9398287c27b1b389 00339.16bd110d8aa11e7d9398287c27b1b389 +mv 00340.520783fd73bb73df88d6effd04e1f55d 00340.520783fd73bb73df88d6effd04e1f55d +mv 00341.99b463b92346291f5848137f4a253966 00341.99b463b92346291f5848137f4a253966 +mv 00342.0dab365fab3be83284b08ac5783335da 00342.0dab365fab3be83284b08ac5783335da +mv 00343.37d895b3a54847548875136ad6b0192d 00343.37d895b3a54847548875136ad6b0192d +mv 00344.17882edad13c2c761e6d8d99eef5a346 00344.17882edad13c2c761e6d8d99eef5a346 +mv 00345.613b3c2aeac033eebb379c91b8ce9fba 00345.613b3c2aeac033eebb379c91b8ce9fba +mv 00346.1ae83883f566cdf6ff18958a33a215b3 00346.1ae83883f566cdf6ff18958a33a215b3 +mv 00347.0958e79c14164f0f902d863f41156c0b 00347.0958e79c14164f0f902d863f41156c0b +mv 00348.1948d1e6b724e8abf4b8f0fc024ac627 00348.1948d1e6b724e8abf4b8f0fc024ac627 +mv 00349.dd7982f40576ff4897c18efc813e38bf 00349.dd7982f40576ff4897c18efc813e38bf +mv 00350.c2658f17a328efdf045b38ab38db472f 00350.c2658f17a328efdf045b38ab38db472f +mv 00351.fd1b8a6cd42e81125fb38c2660cd9317 00351.fd1b8a6cd42e81125fb38c2660cd9317 +mv 00352.19a8ba03f566612e0b9e124609d9dbd0 00352.19a8ba03f566612e0b9e124609d9dbd0 +mv 00353.464ef65be6651440e15675faeb15a7ca 00353.464ef65be6651440e15675faeb15a7ca +mv 00354.dca4b8984863a76ffd01a33888498288 00354.dca4b8984863a76ffd01a33888498288 +mv 00355.e10c2eba9316a09e612e6675ce339d5e 00355.e10c2eba9316a09e612e6675ce339d5e +mv 00356.ea7eb32330fa6bf65270023c0d99e2c5 00356.ea7eb32330fa6bf65270023c0d99e2c5 +mv 00357.b523d4209d633d6fdf86b93bc19e3aa2 00357.b523d4209d633d6fdf86b93bc19e3aa2 +mv 00358.2cf55d91739f3530d1f4bc8bc9bc0b12 00358.2cf55d91739f3530d1f4bc8bc9bc0b12 +mv 00359.4ab70de20a198b736ed01940c9745384 00359.4ab70de20a198b736ed01940c9745384 +mv 00360.3c1e6c84cb93d024c1f1aa85cd56ac9c 00360.3c1e6c84cb93d024c1f1aa85cd56ac9c +mv 00361.e91ac048b0ede961d3f51009eee1c620 00361.e91ac048b0ede961d3f51009eee1c620 +mv 00362.be7a346be8746732d4dc27bc549d7441 00362.be7a346be8746732d4dc27bc549d7441 +mv 00363.e6935b8f87c5984a5c6f6656afa1afb4 00363.e6935b8f87c5984a5c6f6656afa1afb4 +mv 00364.11dba84b95e0471927d1ebc8ff0017ef 00364.11dba84b95e0471927d1ebc8ff0017ef +mv 00365.da6795d02b44e4d5e168d62718f3e7c9 00365.da6795d02b44e4d5e168d62718f3e7c9 +mv 00366.f0bfcc3c84da11ae1154c6c593362f69 00366.f0bfcc3c84da11ae1154c6c593362f69 +mv 00367.9688cdee9dfe720c297672c8f60d998f 00367.9688cdee9dfe720c297672c8f60d998f +mv 00368.2c1ab4bc7f408e0fcb22dca9b2d5a113 00368.2c1ab4bc7f408e0fcb22dca9b2d5a113 +mv 00369.845eeb9573484bd88a6a6224c7068d81 00369.845eeb9573484bd88a6a6224c7068d81 +mv 00370.549e569ab1b84fb13a4ea7d61f98f86d 00370.549e569ab1b84fb13a4ea7d61f98f86d +mv 00371.3bc80f63aa7c64a56eb77fc82ce22e7f 00371.3bc80f63aa7c64a56eb77fc82ce22e7f +mv 00372.4ebcb6306af1946c3ff1b2bc933e1203 00372.4ebcb6306af1946c3ff1b2bc933e1203 +mv 00373.ebe8670ac56b04125c25100a36ab0510 00373.ebe8670ac56b04125c25100a36ab0510 +mv 00374.8942e17f10389fe620e1e96cba52c9aa 00374.8942e17f10389fe620e1e96cba52c9aa +mv 00375.1130c29a255fa277c5acbee4d08edacd 00375.1130c29a255fa277c5acbee4d08edacd +mv 00376.f4ed5f002f9b6b320a67f1da9cacbe72 00376.f4ed5f002f9b6b320a67f1da9cacbe72 +mv 00377.e30c013b7392bf14f132258aa82b1b25 00377.e30c013b7392bf14f132258aa82b1b25 +mv 00378.143069173c8ee0047916f124032367d1 00378.143069173c8ee0047916f124032367d1 +mv 00379.f04dedf09dce65a80fbe1fd831abefd0 00379.f04dedf09dce65a80fbe1fd831abefd0 +mv 00380.a262abe251ca7cc3026e4e146d9cf817 00380.a262abe251ca7cc3026e4e146d9cf817 +mv 00381.7d436777379ad18167e4614190b206cf 00381.7d436777379ad18167e4614190b206cf +mv 00382.98464d934c8402ef42e6dbdb07b18a65 00382.98464d934c8402ef42e6dbdb07b18a65 +mv 00383.1aa9a8211d1de540d6e3852e230e5a9d 00383.1aa9a8211d1de540d6e3852e230e5a9d +mv 00384.2054d62f06fd10e4018a43e156b32acf 00384.2054d62f06fd10e4018a43e156b32acf +mv 00385.51089b24dee5a89d38ee1b505b470c68 00385.51089b24dee5a89d38ee1b505b470c68 +mv 00386.6074f269f0bd1aec1546f9e654e8fcfe 00386.6074f269f0bd1aec1546f9e654e8fcfe +mv 00387.8562ea27520ea0fa6030679792f2fb72 00387.8562ea27520ea0fa6030679792f2fb72 +mv 00388.53eae0055e66fcb7194f9cca080fdefe 00388.53eae0055e66fcb7194f9cca080fdefe +mv 00389.6222f886a2658f890c49f1853beea193 00389.6222f886a2658f890c49f1853beea193 +mv 00390.ce19abc8034db9e6b435d494a91db87a 00390.ce19abc8034db9e6b435d494a91db87a +mv 00391.e2c76e9dc5ef65b90275138f73eb475b 00391.e2c76e9dc5ef65b90275138f73eb475b +mv 00392.ffefdd973d6b1bf1243937030e3bd07f 00392.ffefdd973d6b1bf1243937030e3bd07f +mv 00393.13d4d84cb98ea19954f895c629520bf8 00393.13d4d84cb98ea19954f895c629520bf8 +mv 00394.cca39f925676ecca947eaed2b600fe70 00394.cca39f925676ecca947eaed2b600fe70 +mv 00395.f9df5b3574ef5ba6143c08a1fa301886 00395.f9df5b3574ef5ba6143c08a1fa301886 +mv 00396.6fc0d31374c02ec5614f503a09a37211 00396.6fc0d31374c02ec5614f503a09a37211 +mv 00397.1a99f98a5b996f99f3661e9609782932 00397.1a99f98a5b996f99f3661e9609782932 +mv 00398.1939605e3c713ff2ef852b1fbf10b0bb 00398.1939605e3c713ff2ef852b1fbf10b0bb +mv 00399.cd1239166aa4d43f7c3127c3b48b3f18 00399.cd1239166aa4d43f7c3127c3b48b3f18 +mv 00400.cc74b7994a7282f32ee2a3b7e3634d31 00400.cc74b7994a7282f32ee2a3b7e3634d31 +mv 00401.309e29417819ce39d8599047d50933cc 00401.309e29417819ce39d8599047d50933cc +mv 00402.9fd8762dd436ec868d4c22a17d8ccc3d 00402.9fd8762dd436ec868d4c22a17d8ccc3d +mv 00403.46d0face754b6bb7dce8b3ea560f75fb 00403.46d0face754b6bb7dce8b3ea560f75fb +mv 00404.b4bbecbee92f735a845f589582e7695d 00404.b4bbecbee92f735a845f589582e7695d +mv 00405.3163fff27ff95b91afd656f0025c6a83 00405.3163fff27ff95b91afd656f0025c6a83 +mv 00406.05e2214fea602970426862295f9b4a2e 00406.05e2214fea602970426862295f9b4a2e +mv 00407.7a447442b07fa08de0b69e907ce3ca53 00407.7a447442b07fa08de0b69e907ce3ca53 +mv 00408.22230b84aee00e439ae1938e025d5005 00408.22230b84aee00e439ae1938e025d5005 +mv 00409.e59f63e813b6766a9a4ddf0790634ca3 00409.e59f63e813b6766a9a4ddf0790634ca3 +mv 00410.b3134c2bf520f95f9b90d4aef4fdd683 00410.b3134c2bf520f95f9b90d4aef4fdd683 +mv 00411.fae7b15cc1f966d92c2cedc872893268 00411.fae7b15cc1f966d92c2cedc872893268 +mv 00412.700e6d74e5f886eb75017714a6aeb735 00412.700e6d74e5f886eb75017714a6aeb735 +mv 00413.28e8cb47d7429bf78c711079da50fcd4 00413.28e8cb47d7429bf78c711079da50fcd4 +mv 00414.b2312673ca5358901c801eb44c00e310 00414.b2312673ca5358901c801eb44c00e310 +mv 00415.6faccf48ec514344fc850e8b3c154528 00415.6faccf48ec514344fc850e8b3c154528 +mv 00416.bff1badad869f205fdb54f311f060734 00416.bff1badad869f205fdb54f311f060734 +mv 00417.7b196fd20fd308e0afa9032ccb02474b 00417.7b196fd20fd308e0afa9032ccb02474b +mv 00418.6321175c76411371c109eafc99563d2c 00418.6321175c76411371c109eafc99563d2c +mv 00419.141092086514a246ff2ff8d4bc523400 00419.141092086514a246ff2ff8d4bc523400 +mv 00420.e208f7d65551c01efaa3b4ee4bc4df3c 00420.e208f7d65551c01efaa3b4ee4bc4df3c +mv 00421.ca2fe949a956845a9ba81c649a7db6c0 00421.ca2fe949a956845a9ba81c649a7db6c0 +mv 00422.7d5baf3fe64de8647b41aeb820ada876 00422.7d5baf3fe64de8647b41aeb820ada876 +mv 00423.bee32224fd8c9c8c06e2099d9c2adccd 00423.bee32224fd8c9c8c06e2099d9c2adccd +mv 00424.9acca894169b3162d76ebddb69097f3c 00424.9acca894169b3162d76ebddb69097f3c +mv 00425.1434e0ab4e5235b64825b4c2a0999d76 00425.1434e0ab4e5235b64825b4c2a0999d76 +mv 00426.36b36cbe96efe9001c4d80363ea7ed4e 00426.36b36cbe96efe9001c4d80363ea7ed4e +mv 00427.fa1252c91a3b89bb64bc2bc217725e26 00427.fa1252c91a3b89bb64bc2bc217725e26 +mv 00428.a7bbcb15affd49a93d516d5ed5700d66 00428.a7bbcb15affd49a93d516d5ed5700d66 +mv 00429.0061e48e64f9ce93ffae69bba9151357 00429.0061e48e64f9ce93ffae69bba9151357 +mv 00430.d2179c2841013fea688db8bbcf60b3b0 00430.d2179c2841013fea688db8bbcf60b3b0 +mv 00431.12b2043fed99f1202eb0677969d1a61e 00431.12b2043fed99f1202eb0677969d1a61e +mv 00432.40ceb2dcb26e292ea6fd8669dfc9b4c5 00432.40ceb2dcb26e292ea6fd8669dfc9b4c5 +mv 00433.8ac2ba68fca4bccc0856abe31002a8e9 00433.8ac2ba68fca4bccc0856abe31002a8e9 +mv 00434.8507c67a652e01636df9b92a0a397193 00434.8507c67a652e01636df9b92a0a397193 +mv 00435.69467ebbdbdd2d891624bf8fccda579f 00435.69467ebbdbdd2d891624bf8fccda579f +mv 00436.4ef1bd17d9202e4229485da7a47afd6c 00436.4ef1bd17d9202e4229485da7a47afd6c +mv 00437.defdb75139dbe5cdd027cbab9f704a27 00437.defdb75139dbe5cdd027cbab9f704a27 +mv 00438.41295e1df4b651b7611316331b8468e4 00438.41295e1df4b651b7611316331b8468e4 +mv 00439.6f4246a5e3336b6ecb5624e209e0b59f 00439.6f4246a5e3336b6ecb5624e209e0b59f +mv 00440.647d9eb44fd0cb069ea92be204966a8e 00440.647d9eb44fd0cb069ea92be204966a8e +mv 00441.77768298934252b2fa200e7d9482993b 00441.77768298934252b2fa200e7d9482993b +mv 00442.6a4db031f5561b90c04bb3d3aee31e85 00442.6a4db031f5561b90c04bb3d3aee31e85 +mv 00443.cac50573829d4df1111b6ead28212e73 00443.cac50573829d4df1111b6ead28212e73 +mv 00444.33afc8c1f9cea3100ca8502e8a785259 00444.33afc8c1f9cea3100ca8502e8a785259 +mv 00445.94d3ccfafc541255ff46625091d333e4 00445.94d3ccfafc541255ff46625091d333e4 +mv 00446.a54877313142d56c24d499d761c48fb1 00446.a54877313142d56c24d499d761c48fb1 +mv 00447.bd5eb01e94f6d127465bf325513b2516 00447.bd5eb01e94f6d127465bf325513b2516 +mv 00448.a6ac96e93ef03ec1a638c577c6940f5e 00448.a6ac96e93ef03ec1a638c577c6940f5e +mv 00449.7d33f465cb813806296901ee541841d6 00449.7d33f465cb813806296901ee541841d6 +mv 00450.93d3d59fcdd0f8fda9ef4678535182e8 00450.93d3d59fcdd0f8fda9ef4678535182e8 +mv 00451.5af88ff99e71a8984ac293c250b37d34 00451.5af88ff99e71a8984ac293c250b37d34 +mv 00452.ed43fc952c31c82aa29646edfbecb03f 00452.ed43fc952c31c82aa29646edfbecb03f +mv 00453.456abc0bc83034492888f63725796d5b 00453.456abc0bc83034492888f63725796d5b +mv 00454.1bb460b3ade9801644e4eb60e18d1f8d 00454.1bb460b3ade9801644e4eb60e18d1f8d +mv 00455.c48d026b0aae9a1a14e9ab1193a2a5f3 00455.c48d026b0aae9a1a14e9ab1193a2a5f3 +mv 00456.b700dd37219f192d25cfc87f5c97a86d 00456.b700dd37219f192d25cfc87f5c97a86d +mv 00457.f8db516c753eff2c82cfb89b33bd2620 00457.f8db516c753eff2c82cfb89b33bd2620 +mv 00458.62211764fde0dd7128ea4146268b40dd 00458.62211764fde0dd7128ea4146268b40dd +mv 00459.e71f7a769d6b09c6d75bfbe8711dbbbe 00459.e71f7a769d6b09c6d75bfbe8711dbbbe +mv 00460.8996dc28ab56dd7b6f35b956deceaf22 00460.8996dc28ab56dd7b6f35b956deceaf22 +mv 00461.1a27d007492d1c665d07db820b7dc3b8 00461.1a27d007492d1c665d07db820b7dc3b8 +mv 00462.868771c8074e480f540a1d2e6a5ac7cb 00462.868771c8074e480f540a1d2e6a5ac7cb +mv 00463.45bff4629688e8031231a8b64a4eef06 00463.45bff4629688e8031231a8b64a4eef06 +mv 00464.8240aba24840864cb7439fc03f94ef6e 00464.8240aba24840864cb7439fc03f94ef6e +mv 00465.ca5d79d0e5dadee322c117789196ebb4 00465.ca5d79d0e5dadee322c117789196ebb4 +mv 00466.ecb11c98ec4511b5422b20476d935bd1 00466.ecb11c98ec4511b5422b20476d935bd1 +mv 00467.5b733c506b7165424a0d4a298e67970f 00467.5b733c506b7165424a0d4a298e67970f +mv 00468.77534696791a755fb0fb8be8c2704ed8 00468.77534696791a755fb0fb8be8c2704ed8 +mv 00469.ee3b2f31459cc2ec43ae7cae00d40cf6 00469.ee3b2f31459cc2ec43ae7cae00d40cf6 +mv 00470.32f31d3d1598f840a6471fa25332336d 00470.32f31d3d1598f840a6471fa25332336d +mv 00471.fc87286572c99b7a554dc8c86f34506c 00471.fc87286572c99b7a554dc8c86f34506c +mv 00472.713268dfca421e165c1ac59bab045e00 00472.713268dfca421e165c1ac59bab045e00 +mv 00473.7086ec944a1245a002b04547a433c887 00473.7086ec944a1245a002b04547a433c887 +mv 00474.30772a1ac9e824976fc6676844d68b76 00474.30772a1ac9e824976fc6676844d68b76 +mv 00475.71f75afb1960d619af86e1c64dcb11fc 00475.71f75afb1960d619af86e1c64dcb11fc +mv 00476.af3a29817853a5c56bae5257c2d4b742 00476.af3a29817853a5c56bae5257c2d4b742 +mv 00477.24ef7a042f97482f884387c75249380c 00477.24ef7a042f97482f884387c75249380c +mv 00478.6c50ff18ef92c52a3342f1c9f090740b 00478.6c50ff18ef92c52a3342f1c9f090740b +mv 00479.a2cd6780001042d8203b05a6ab0f34ac 00479.a2cd6780001042d8203b05a6ab0f34ac +mv 00480.a5931465ca6f5b22eff24943b5c8b17d 00480.a5931465ca6f5b22eff24943b5c8b17d +mv 00481.5c95b526e965fa325044123c4ce29c1f 00481.5c95b526e965fa325044123c4ce29c1f +mv 00482.980c7ceb9333bc5027cd8d1d360a8c6f 00482.980c7ceb9333bc5027cd8d1d360a8c6f +mv 00483.50c5dda7dd4710798c15a85ade6e9f93 00483.50c5dda7dd4710798c15a85ade6e9f93 +mv 00484.a34bda1ad8a88b5b21b13b8ad05d0dd3 00484.a34bda1ad8a88b5b21b13b8ad05d0dd3 +mv 00485.a5d28b804adbceff7fd75ed9fc8138bb 00485.a5d28b804adbceff7fd75ed9fc8138bb +mv 00486.c0a2036a3da75d6d5ac6d19ab4b3d6ec 00486.c0a2036a3da75d6d5ac6d19ab4b3d6ec +mv 00487.139a2f4e8edbbdd64441536308169d74 00487.139a2f4e8edbbdd64441536308169d74 +mv 00488.29e96da757cc5566c848833e26abdd65 00488.29e96da757cc5566c848833e26abdd65 +mv 00489.023c1d77de9365cad956a4c9118aee4b 00489.023c1d77de9365cad956a4c9118aee4b +mv 00490.747dec7634a0d98a259a16688329754f 00490.f0020a3ea5546c122f688b39f4380c95 +mv 00491.122e0af9014b3447d8f780737f6e14a9 00491.28cb63173ed4740180e45e6248db5584 +mv 00492.d105cab2e1e36d3033f13f25c6dfb09e 00492.73db79fb9ad03aff1e08deb73b83203c +mv 00493.6095c3511cc7dcaf6c2155731ff44d74 00493.1c5f59825f7a246187c137614fb1ea82 +mv 00494.c0ea2fa1ad3700a6fd904b6d09736e8e 00494.fd2efa67e63247ee89cdcf3a6fe7906d +mv 00495.39beae8a69a30f92b88d2f4f477ec9a4 00495.e22a609b7dc412c120d09e11544c67fb +mv 00496.5532bca8eaa99fd0ae849d76bc69fe88 00496.1a37de098f6c8847c3c7839d73cc7106 +mv 00497.836c84df73db0486601438a71758a992 00497.ebf699da617b11135f3aa9173b9781b9 +mv 00498.608c0a56be8b166576c5995d36769e7e 00498.48c3098854d339353f1a28a13b196017 +mv 00499.258d3f6b0590a119ebe230b0dd0d8f34 00499.988506a852cf86b396771a8bdc8cf839 +mv 00500.de747663b1a04a33e489b7896f77531d 00500.85b72f09f6778a085dc8b6821965a76f diff --git a/Ch3/datasets/titanic/gender_submission.csv b/Ch3/datasets/titanic/gender_submission.csv new file mode 100644 index 000000000..80bbbd851 --- /dev/null +++ b/Ch3/datasets/titanic/gender_submission.csv @@ -0,0 +1,419 @@ +PassengerId,Survived +892,0 +893,1 +894,0 +895,0 +896,1 +897,0 +898,1 +899,0 +900,1 +901,0 +902,0 +903,0 +904,1 +905,0 +906,1 +907,1 +908,0 +909,0 +910,1 +911,1 +912,0 +913,0 +914,1 +915,0 +916,1 +917,0 +918,1 +919,0 +920,0 +921,0 +922,0 +923,0 +924,1 +925,1 +926,0 +927,0 +928,1 +929,1 +930,0 +931,0 +932,0 +933,0 +934,0 +935,1 +936,1 +937,0 +938,0 +939,0 +940,1 +941,1 +942,0 +943,0 +944,1 +945,1 +946,0 +947,0 +948,0 +949,0 +950,0 +951,1 +952,0 +953,0 +954,0 +955,1 +956,0 +957,1 +958,1 +959,0 +960,0 +961,1 +962,1 +963,0 +964,1 +965,0 +966,1 +967,0 +968,0 +969,1 +970,0 +971,1 +972,0 +973,0 +974,0 +975,0 +976,0 +977,0 +978,1 +979,1 +980,1 +981,0 +982,1 +983,0 +984,1 +985,0 +986,0 +987,0 +988,1 +989,0 +990,1 +991,0 +992,1 +993,0 +994,0 +995,0 +996,1 +997,0 +998,0 +999,0 +1000,0 +1001,0 +1002,0 +1003,1 +1004,1 +1005,1 +1006,1 +1007,0 +1008,0 +1009,1 +1010,0 +1011,1 +1012,1 +1013,0 +1014,1 +1015,0 +1016,0 +1017,1 +1018,0 +1019,1 +1020,0 +1021,0 +1022,0 +1023,0 +1024,1 +1025,0 +1026,0 +1027,0 +1028,0 +1029,0 +1030,1 +1031,0 +1032,1 +1033,1 +1034,0 +1035,0 +1036,0 +1037,0 +1038,0 +1039,0 +1040,0 +1041,0 +1042,1 +1043,0 +1044,0 +1045,1 +1046,0 +1047,0 +1048,1 +1049,1 +1050,0 +1051,1 +1052,1 +1053,0 +1054,1 +1055,0 +1056,0 +1057,1 +1058,0 +1059,0 +1060,1 +1061,1 +1062,0 +1063,0 +1064,0 +1065,0 +1066,0 +1067,1 +1068,1 +1069,0 +1070,1 +1071,1 +1072,0 +1073,0 +1074,1 +1075,0 +1076,1 +1077,0 +1078,1 +1079,0 +1080,1 +1081,0 +1082,0 +1083,0 +1084,0 +1085,0 +1086,0 +1087,0 +1088,0 +1089,1 +1090,0 +1091,1 +1092,1 +1093,0 +1094,0 +1095,1 +1096,0 +1097,0 +1098,1 +1099,0 +1100,1 +1101,0 +1102,0 +1103,0 +1104,0 +1105,1 +1106,1 +1107,0 +1108,1 +1109,0 +1110,1 +1111,0 +1112,1 +1113,0 +1114,1 +1115,0 +1116,1 +1117,1 +1118,0 +1119,1 +1120,0 +1121,0 +1122,0 +1123,1 +1124,0 +1125,0 +1126,0 +1127,0 +1128,0 +1129,0 +1130,1 +1131,1 +1132,1 +1133,1 +1134,0 +1135,0 +1136,0 +1137,0 +1138,1 +1139,0 +1140,1 +1141,1 +1142,1 +1143,0 +1144,0 +1145,0 +1146,0 +1147,0 +1148,0 +1149,0 +1150,1 +1151,0 +1152,0 +1153,0 +1154,1 +1155,1 +1156,0 +1157,0 +1158,0 +1159,0 +1160,1 +1161,0 +1162,0 +1163,0 +1164,1 +1165,1 +1166,0 +1167,1 +1168,0 +1169,0 +1170,0 +1171,0 +1172,1 +1173,0 +1174,1 +1175,1 +1176,1 +1177,0 +1178,0 +1179,0 +1180,0 +1181,0 +1182,0 +1183,1 +1184,0 +1185,0 +1186,0 +1187,0 +1188,1 +1189,0 +1190,0 +1191,0 +1192,0 +1193,0 +1194,0 +1195,0 +1196,1 +1197,1 +1198,0 +1199,0 +1200,0 +1201,1 +1202,0 +1203,0 +1204,0 +1205,1 +1206,1 +1207,1 +1208,0 +1209,0 +1210,0 +1211,0 +1212,0 +1213,0 +1214,0 +1215,0 +1216,1 +1217,0 +1218,1 +1219,0 +1220,0 +1221,0 +1222,1 +1223,0 +1224,0 +1225,1 +1226,0 +1227,0 +1228,0 +1229,0 +1230,0 +1231,0 +1232,0 +1233,0 +1234,0 +1235,1 +1236,0 +1237,1 +1238,0 +1239,1 +1240,0 +1241,1 +1242,1 +1243,0 +1244,0 +1245,0 +1246,1 +1247,0 +1248,1 +1249,0 +1250,0 +1251,1 +1252,0 +1253,1 +1254,1 +1255,0 +1256,1 +1257,1 +1258,0 +1259,1 +1260,1 +1261,0 +1262,0 +1263,1 +1264,0 +1265,0 +1266,1 +1267,1 +1268,1 +1269,0 +1270,0 +1271,0 +1272,0 +1273,0 +1274,1 +1275,1 +1276,0 +1277,1 +1278,0 +1279,0 +1280,0 +1281,0 +1282,0 +1283,1 +1284,0 +1285,0 +1286,0 +1287,1 +1288,0 +1289,1 +1290,0 +1291,0 +1292,1 +1293,0 +1294,1 +1295,0 +1296,0 +1297,0 +1298,0 +1299,0 +1300,1 +1301,1 +1302,1 +1303,1 +1304,1 +1305,0 +1306,1 +1307,0 +1308,0 +1309,0 diff --git a/Ch3/datasets/titanic/test.csv b/Ch3/datasets/titanic/test.csv new file mode 100644 index 000000000..2ed7ef490 --- /dev/null +++ b/Ch3/datasets/titanic/test.csv @@ -0,0 +1,419 @@ +PassengerId,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked +892,3,"Kelly, Mr. James",male,34.5,0,0,330911,7.8292,,Q +893,3,"Wilkes, Mrs. James (Ellen Needs)",female,47,1,0,363272,7,,S +894,2,"Myles, Mr. Thomas Francis",male,62,0,0,240276,9.6875,,Q +895,3,"Wirz, Mr. Albert",male,27,0,0,315154,8.6625,,S +896,3,"Hirvonen, Mrs. Alexander (Helga E Lindqvist)",female,22,1,1,3101298,12.2875,,S +897,3,"Svensson, Mr. Johan Cervin",male,14,0,0,7538,9.225,,S +898,3,"Connolly, Miss. Kate",female,30,0,0,330972,7.6292,,Q +899,2,"Caldwell, Mr. Albert Francis",male,26,1,1,248738,29,,S +900,3,"Abrahim, Mrs. Joseph (Sophie Halaut Easu)",female,18,0,0,2657,7.2292,,C +901,3,"Davies, Mr. John Samuel",male,21,2,0,A/4 48871,24.15,,S +902,3,"Ilieff, Mr. Ylio",male,,0,0,349220,7.8958,,S +903,1,"Jones, Mr. Charles Cresson",male,46,0,0,694,26,,S +904,1,"Snyder, Mrs. John Pillsbury (Nelle Stevenson)",female,23,1,0,21228,82.2667,B45,S +905,2,"Howard, Mr. Benjamin",male,63,1,0,24065,26,,S +906,1,"Chaffee, Mrs. Herbert Fuller (Carrie Constance Toogood)",female,47,1,0,W.E.P. 5734,61.175,E31,S +907,2,"del Carlo, Mrs. Sebastiano (Argenia Genovesi)",female,24,1,0,SC/PARIS 2167,27.7208,,C +908,2,"Keane, Mr. Daniel",male,35,0,0,233734,12.35,,Q +909,3,"Assaf, Mr. Gerios",male,21,0,0,2692,7.225,,C +910,3,"Ilmakangas, Miss. Ida Livija",female,27,1,0,STON/O2. 3101270,7.925,,S +911,3,"Assaf Khalil, Mrs. Mariana (Miriam"")""",female,45,0,0,2696,7.225,,C +912,1,"Rothschild, Mr. Martin",male,55,1,0,PC 17603,59.4,,C +913,3,"Olsen, Master. Artur Karl",male,9,0,1,C 17368,3.1708,,S +914,1,"Flegenheim, Mrs. Alfred (Antoinette)",female,,0,0,PC 17598,31.6833,,S +915,1,"Williams, Mr. Richard Norris II",male,21,0,1,PC 17597,61.3792,,C +916,1,"Ryerson, Mrs. Arthur Larned (Emily Maria Borie)",female,48,1,3,PC 17608,262.375,B57 B59 B63 B66,C +917,3,"Robins, Mr. Alexander A",male,50,1,0,A/5. 3337,14.5,,S +918,1,"Ostby, Miss. Helene Ragnhild",female,22,0,1,113509,61.9792,B36,C +919,3,"Daher, Mr. Shedid",male,22.5,0,0,2698,7.225,,C +920,1,"Brady, Mr. John Bertram",male,41,0,0,113054,30.5,A21,S +921,3,"Samaan, Mr. Elias",male,,2,0,2662,21.6792,,C +922,2,"Louch, Mr. Charles Alexander",male,50,1,0,SC/AH 3085,26,,S +923,2,"Jefferys, Mr. Clifford Thomas",male,24,2,0,C.A. 31029,31.5,,S +924,3,"Dean, Mrs. Bertram (Eva Georgetta Light)",female,33,1,2,C.A. 2315,20.575,,S +925,3,"Johnston, Mrs. Andrew G (Elizabeth Lily"" Watson)""",female,,1,2,W./C. 6607,23.45,,S +926,1,"Mock, Mr. Philipp Edmund",male,30,1,0,13236,57.75,C78,C +927,3,"Katavelas, Mr. Vassilios (Catavelas Vassilios"")""",male,18.5,0,0,2682,7.2292,,C +928,3,"Roth, Miss. Sarah A",female,,0,0,342712,8.05,,S +929,3,"Cacic, Miss. Manda",female,21,0,0,315087,8.6625,,S +930,3,"Sap, Mr. Julius",male,25,0,0,345768,9.5,,S +931,3,"Hee, Mr. Ling",male,,0,0,1601,56.4958,,S +932,3,"Karun, Mr. Franz",male,39,0,1,349256,13.4167,,C +933,1,"Franklin, Mr. Thomas Parham",male,,0,0,113778,26.55,D34,S +934,3,"Goldsmith, Mr. Nathan",male,41,0,0,SOTON/O.Q. 3101263,7.85,,S +935,2,"Corbett, Mrs. Walter H (Irene Colvin)",female,30,0,0,237249,13,,S +936,1,"Kimball, Mrs. Edwin Nelson Jr (Gertrude Parsons)",female,45,1,0,11753,52.5542,D19,S +937,3,"Peltomaki, Mr. Nikolai Johannes",male,25,0,0,STON/O 2. 3101291,7.925,,S +938,1,"Chevre, Mr. Paul Romaine",male,45,0,0,PC 17594,29.7,A9,C +939,3,"Shaughnessy, Mr. Patrick",male,,0,0,370374,7.75,,Q +940,1,"Bucknell, Mrs. William Robert (Emma Eliza Ward)",female,60,0,0,11813,76.2917,D15,C +941,3,"Coutts, Mrs. William (Winnie Minnie"" Treanor)""",female,36,0,2,C.A. 37671,15.9,,S +942,1,"Smith, Mr. Lucien Philip",male,24,1,0,13695,60,C31,S +943,2,"Pulbaum, Mr. Franz",male,27,0,0,SC/PARIS 2168,15.0333,,C +944,2,"Hocking, Miss. Ellen Nellie""""",female,20,2,1,29105,23,,S +945,1,"Fortune, Miss. Ethel Flora",female,28,3,2,19950,263,C23 C25 C27,S +946,2,"Mangiavacchi, Mr. Serafino Emilio",male,,0,0,SC/A.3 2861,15.5792,,C +947,3,"Rice, Master. Albert",male,10,4,1,382652,29.125,,Q +948,3,"Cor, Mr. Bartol",male,35,0,0,349230,7.8958,,S +949,3,"Abelseth, Mr. Olaus Jorgensen",male,25,0,0,348122,7.65,F G63,S +950,3,"Davison, Mr. Thomas Henry",male,,1,0,386525,16.1,,S +951,1,"Chaudanson, Miss. Victorine",female,36,0,0,PC 17608,262.375,B61,C +952,3,"Dika, Mr. Mirko",male,17,0,0,349232,7.8958,,S +953,2,"McCrae, Mr. Arthur Gordon",male,32,0,0,237216,13.5,,S +954,3,"Bjorklund, Mr. Ernst Herbert",male,18,0,0,347090,7.75,,S +955,3,"Bradley, Miss. Bridget Delia",female,22,0,0,334914,7.725,,Q +956,1,"Ryerson, Master. John Borie",male,13,2,2,PC 17608,262.375,B57 B59 B63 B66,C +957,2,"Corey, Mrs. Percy C (Mary Phyllis Elizabeth Miller)",female,,0,0,F.C.C. 13534,21,,S +958,3,"Burns, Miss. Mary Delia",female,18,0,0,330963,7.8792,,Q +959,1,"Moore, Mr. Clarence Bloomfield",male,47,0,0,113796,42.4,,S +960,1,"Tucker, Mr. Gilbert Milligan Jr",male,31,0,0,2543,28.5375,C53,C +961,1,"Fortune, Mrs. Mark (Mary McDougald)",female,60,1,4,19950,263,C23 C25 C27,S +962,3,"Mulvihill, Miss. Bertha E",female,24,0,0,382653,7.75,,Q +963,3,"Minkoff, Mr. Lazar",male,21,0,0,349211,7.8958,,S +964,3,"Nieminen, Miss. Manta Josefina",female,29,0,0,3101297,7.925,,S +965,1,"Ovies y Rodriguez, Mr. Servando",male,28.5,0,0,PC 17562,27.7208,D43,C +966,1,"Geiger, Miss. Amalie",female,35,0,0,113503,211.5,C130,C +967,1,"Keeping, Mr. Edwin",male,32.5,0,0,113503,211.5,C132,C +968,3,"Miles, Mr. Frank",male,,0,0,359306,8.05,,S +969,1,"Cornell, Mrs. Robert Clifford (Malvina Helen Lamson)",female,55,2,0,11770,25.7,C101,S +970,2,"Aldworth, Mr. Charles Augustus",male,30,0,0,248744,13,,S +971,3,"Doyle, Miss. Elizabeth",female,24,0,0,368702,7.75,,Q +972,3,"Boulos, Master. Akar",male,6,1,1,2678,15.2458,,C +973,1,"Straus, Mr. Isidor",male,67,1,0,PC 17483,221.7792,C55 C57,S +974,1,"Case, Mr. Howard Brown",male,49,0,0,19924,26,,S +975,3,"Demetri, Mr. Marinko",male,,0,0,349238,7.8958,,S +976,2,"Lamb, Mr. John Joseph",male,,0,0,240261,10.7083,,Q +977,3,"Khalil, Mr. Betros",male,,1,0,2660,14.4542,,C +978,3,"Barry, Miss. Julia",female,27,0,0,330844,7.8792,,Q +979,3,"Badman, Miss. Emily Louisa",female,18,0,0,A/4 31416,8.05,,S +980,3,"O'Donoghue, Ms. Bridget",female,,0,0,364856,7.75,,Q +981,2,"Wells, Master. Ralph Lester",male,2,1,1,29103,23,,S +982,3,"Dyker, Mrs. Adolf Fredrik (Anna Elisabeth Judith Andersson)",female,22,1,0,347072,13.9,,S +983,3,"Pedersen, Mr. Olaf",male,,0,0,345498,7.775,,S +984,1,"Davidson, Mrs. Thornton (Orian Hays)",female,27,1,2,F.C. 12750,52,B71,S +985,3,"Guest, Mr. Robert",male,,0,0,376563,8.05,,S +986,1,"Birnbaum, Mr. Jakob",male,25,0,0,13905,26,,C +987,3,"Tenglin, Mr. Gunnar Isidor",male,25,0,0,350033,7.7958,,S +988,1,"Cavendish, Mrs. Tyrell William (Julia Florence Siegel)",female,76,1,0,19877,78.85,C46,S +989,3,"Makinen, Mr. Kalle Edvard",male,29,0,0,STON/O 2. 3101268,7.925,,S +990,3,"Braf, Miss. Elin Ester Maria",female,20,0,0,347471,7.8542,,S +991,3,"Nancarrow, Mr. William Henry",male,33,0,0,A./5. 3338,8.05,,S +992,1,"Stengel, Mrs. Charles Emil Henry (Annie May Morris)",female,43,1,0,11778,55.4417,C116,C +993,2,"Weisz, Mr. Leopold",male,27,1,0,228414,26,,S +994,3,"Foley, Mr. William",male,,0,0,365235,7.75,,Q +995,3,"Johansson Palmquist, Mr. Oskar Leander",male,26,0,0,347070,7.775,,S +996,3,"Thomas, Mrs. Alexander (Thamine Thelma"")""",female,16,1,1,2625,8.5167,,C +997,3,"Holthen, Mr. Johan Martin",male,28,0,0,C 4001,22.525,,S +998,3,"Buckley, Mr. Daniel",male,21,0,0,330920,7.8208,,Q +999,3,"Ryan, Mr. Edward",male,,0,0,383162,7.75,,Q +1000,3,"Willer, Mr. Aaron (Abi Weller"")""",male,,0,0,3410,8.7125,,S +1001,2,"Swane, Mr. George",male,18.5,0,0,248734,13,F,S +1002,2,"Stanton, Mr. Samuel Ward",male,41,0,0,237734,15.0458,,C +1003,3,"Shine, Miss. Ellen Natalia",female,,0,0,330968,7.7792,,Q +1004,1,"Evans, Miss. Edith Corse",female,36,0,0,PC 17531,31.6792,A29,C +1005,3,"Buckley, Miss. Katherine",female,18.5,0,0,329944,7.2833,,Q +1006,1,"Straus, Mrs. Isidor (Rosalie Ida Blun)",female,63,1,0,PC 17483,221.7792,C55 C57,S +1007,3,"Chronopoulos, Mr. Demetrios",male,18,1,0,2680,14.4542,,C +1008,3,"Thomas, Mr. John",male,,0,0,2681,6.4375,,C +1009,3,"Sandstrom, Miss. Beatrice Irene",female,1,1,1,PP 9549,16.7,G6,S +1010,1,"Beattie, Mr. Thomson",male,36,0,0,13050,75.2417,C6,C +1011,2,"Chapman, Mrs. John Henry (Sara Elizabeth Lawry)",female,29,1,0,SC/AH 29037,26,,S +1012,2,"Watt, Miss. Bertha J",female,12,0,0,C.A. 33595,15.75,,S +1013,3,"Kiernan, Mr. John",male,,1,0,367227,7.75,,Q +1014,1,"Schabert, Mrs. Paul (Emma Mock)",female,35,1,0,13236,57.75,C28,C +1015,3,"Carver, Mr. Alfred John",male,28,0,0,392095,7.25,,S +1016,3,"Kennedy, Mr. John",male,,0,0,368783,7.75,,Q +1017,3,"Cribb, Miss. Laura Alice",female,17,0,1,371362,16.1,,S +1018,3,"Brobeck, Mr. Karl Rudolf",male,22,0,0,350045,7.7958,,S +1019,3,"McCoy, Miss. Alicia",female,,2,0,367226,23.25,,Q +1020,2,"Bowenur, Mr. Solomon",male,42,0,0,211535,13,,S +1021,3,"Petersen, Mr. Marius",male,24,0,0,342441,8.05,,S +1022,3,"Spinner, Mr. Henry John",male,32,0,0,STON/OQ. 369943,8.05,,S +1023,1,"Gracie, Col. Archibald IV",male,53,0,0,113780,28.5,C51,C +1024,3,"Lefebre, Mrs. Frank (Frances)",female,,0,4,4133,25.4667,,S +1025,3,"Thomas, Mr. Charles P",male,,1,0,2621,6.4375,,C +1026,3,"Dintcheff, Mr. Valtcho",male,43,0,0,349226,7.8958,,S +1027,3,"Carlsson, Mr. Carl Robert",male,24,0,0,350409,7.8542,,S +1028,3,"Zakarian, Mr. Mapriededer",male,26.5,0,0,2656,7.225,,C +1029,2,"Schmidt, Mr. August",male,26,0,0,248659,13,,S +1030,3,"Drapkin, Miss. Jennie",female,23,0,0,SOTON/OQ 392083,8.05,,S +1031,3,"Goodwin, Mr. Charles Frederick",male,40,1,6,CA 2144,46.9,,S +1032,3,"Goodwin, Miss. Jessie Allis",female,10,5,2,CA 2144,46.9,,S +1033,1,"Daniels, Miss. Sarah",female,33,0,0,113781,151.55,,S +1034,1,"Ryerson, Mr. Arthur Larned",male,61,1,3,PC 17608,262.375,B57 B59 B63 B66,C +1035,2,"Beauchamp, Mr. Henry James",male,28,0,0,244358,26,,S +1036,1,"Lindeberg-Lind, Mr. Erik Gustaf (Mr Edward Lingrey"")""",male,42,0,0,17475,26.55,,S +1037,3,"Vander Planke, Mr. Julius",male,31,3,0,345763,18,,S +1038,1,"Hilliard, Mr. Herbert Henry",male,,0,0,17463,51.8625,E46,S +1039,3,"Davies, Mr. Evan",male,22,0,0,SC/A4 23568,8.05,,S +1040,1,"Crafton, Mr. John Bertram",male,,0,0,113791,26.55,,S +1041,2,"Lahtinen, Rev. William",male,30,1,1,250651,26,,S +1042,1,"Earnshaw, Mrs. Boulton (Olive Potter)",female,23,0,1,11767,83.1583,C54,C +1043,3,"Matinoff, Mr. Nicola",male,,0,0,349255,7.8958,,C +1044,3,"Storey, Mr. Thomas",male,60.5,0,0,3701,,,S +1045,3,"Klasen, Mrs. (Hulda Kristina Eugenia Lofqvist)",female,36,0,2,350405,12.1833,,S +1046,3,"Asplund, Master. Filip Oscar",male,13,4,2,347077,31.3875,,S +1047,3,"Duquemin, Mr. Joseph",male,24,0,0,S.O./P.P. 752,7.55,,S +1048,1,"Bird, Miss. Ellen",female,29,0,0,PC 17483,221.7792,C97,S +1049,3,"Lundin, Miss. Olga Elida",female,23,0,0,347469,7.8542,,S +1050,1,"Borebank, Mr. John James",male,42,0,0,110489,26.55,D22,S +1051,3,"Peacock, Mrs. Benjamin (Edith Nile)",female,26,0,2,SOTON/O.Q. 3101315,13.775,,S +1052,3,"Smyth, Miss. Julia",female,,0,0,335432,7.7333,,Q +1053,3,"Touma, Master. Georges Youssef",male,7,1,1,2650,15.2458,,C +1054,2,"Wright, Miss. Marion",female,26,0,0,220844,13.5,,S +1055,3,"Pearce, Mr. Ernest",male,,0,0,343271,7,,S +1056,2,"Peruschitz, Rev. Joseph Maria",male,41,0,0,237393,13,,S +1057,3,"Kink-Heilmann, Mrs. Anton (Luise Heilmann)",female,26,1,1,315153,22.025,,S +1058,1,"Brandeis, Mr. Emil",male,48,0,0,PC 17591,50.4958,B10,C +1059,3,"Ford, Mr. Edward Watson",male,18,2,2,W./C. 6608,34.375,,S +1060,1,"Cassebeer, Mrs. Henry Arthur Jr (Eleanor Genevieve Fosdick)",female,,0,0,17770,27.7208,,C +1061,3,"Hellstrom, Miss. Hilda Maria",female,22,0,0,7548,8.9625,,S +1062,3,"Lithman, Mr. Simon",male,,0,0,S.O./P.P. 251,7.55,,S +1063,3,"Zakarian, Mr. Ortin",male,27,0,0,2670,7.225,,C +1064,3,"Dyker, Mr. Adolf Fredrik",male,23,1,0,347072,13.9,,S +1065,3,"Torfa, Mr. Assad",male,,0,0,2673,7.2292,,C +1066,3,"Asplund, Mr. Carl Oscar Vilhelm Gustafsson",male,40,1,5,347077,31.3875,,S +1067,2,"Brown, Miss. Edith Eileen",female,15,0,2,29750,39,,S +1068,2,"Sincock, Miss. Maude",female,20,0,0,C.A. 33112,36.75,,S +1069,1,"Stengel, Mr. Charles Emil Henry",male,54,1,0,11778,55.4417,C116,C +1070,2,"Becker, Mrs. Allen Oliver (Nellie E Baumgardner)",female,36,0,3,230136,39,F4,S +1071,1,"Compton, Mrs. Alexander Taylor (Mary Eliza Ingersoll)",female,64,0,2,PC 17756,83.1583,E45,C +1072,2,"McCrie, Mr. James Matthew",male,30,0,0,233478,13,,S +1073,1,"Compton, Mr. Alexander Taylor Jr",male,37,1,1,PC 17756,83.1583,E52,C +1074,1,"Marvin, Mrs. Daniel Warner (Mary Graham Carmichael Farquarson)",female,18,1,0,113773,53.1,D30,S +1075,3,"Lane, Mr. Patrick",male,,0,0,7935,7.75,,Q +1076,1,"Douglas, Mrs. Frederick Charles (Mary Helene Baxter)",female,27,1,1,PC 17558,247.5208,B58 B60,C +1077,2,"Maybery, Mr. Frank Hubert",male,40,0,0,239059,16,,S +1078,2,"Phillips, Miss. Alice Frances Louisa",female,21,0,1,S.O./P.P. 2,21,,S +1079,3,"Davies, Mr. Joseph",male,17,2,0,A/4 48873,8.05,,S +1080,3,"Sage, Miss. Ada",female,,8,2,CA. 2343,69.55,,S +1081,2,"Veal, Mr. James",male,40,0,0,28221,13,,S +1082,2,"Angle, Mr. William A",male,34,1,0,226875,26,,S +1083,1,"Salomon, Mr. Abraham L",male,,0,0,111163,26,,S +1084,3,"van Billiard, Master. Walter John",male,11.5,1,1,A/5. 851,14.5,,S +1085,2,"Lingane, Mr. John",male,61,0,0,235509,12.35,,Q +1086,2,"Drew, Master. Marshall Brines",male,8,0,2,28220,32.5,,S +1087,3,"Karlsson, Mr. Julius Konrad Eugen",male,33,0,0,347465,7.8542,,S +1088,1,"Spedden, Master. Robert Douglas",male,6,0,2,16966,134.5,E34,C +1089,3,"Nilsson, Miss. Berta Olivia",female,18,0,0,347066,7.775,,S +1090,2,"Baimbrigge, Mr. Charles Robert",male,23,0,0,C.A. 31030,10.5,,S +1091,3,"Rasmussen, Mrs. (Lena Jacobsen Solvang)",female,,0,0,65305,8.1125,,S +1092,3,"Murphy, Miss. Nora",female,,0,0,36568,15.5,,Q +1093,3,"Danbom, Master. Gilbert Sigvard Emanuel",male,0.33,0,2,347080,14.4,,S +1094,1,"Astor, Col. John Jacob",male,47,1,0,PC 17757,227.525,C62 C64,C +1095,2,"Quick, Miss. Winifred Vera",female,8,1,1,26360,26,,S +1096,2,"Andrew, Mr. Frank Thomas",male,25,0,0,C.A. 34050,10.5,,S +1097,1,"Omont, Mr. Alfred Fernand",male,,0,0,F.C. 12998,25.7417,,C +1098,3,"McGowan, Miss. Katherine",female,35,0,0,9232,7.75,,Q +1099,2,"Collett, Mr. Sidney C Stuart",male,24,0,0,28034,10.5,,S +1100,1,"Rosenbaum, Miss. Edith Louise",female,33,0,0,PC 17613,27.7208,A11,C +1101,3,"Delalic, Mr. Redjo",male,25,0,0,349250,7.8958,,S +1102,3,"Andersen, Mr. Albert Karvin",male,32,0,0,C 4001,22.525,,S +1103,3,"Finoli, Mr. Luigi",male,,0,0,SOTON/O.Q. 3101308,7.05,,S +1104,2,"Deacon, Mr. Percy William",male,17,0,0,S.O.C. 14879,73.5,,S +1105,2,"Howard, Mrs. Benjamin (Ellen Truelove Arman)",female,60,1,0,24065,26,,S +1106,3,"Andersson, Miss. Ida Augusta Margareta",female,38,4,2,347091,7.775,,S +1107,1,"Head, Mr. Christopher",male,42,0,0,113038,42.5,B11,S +1108,3,"Mahon, Miss. Bridget Delia",female,,0,0,330924,7.8792,,Q +1109,1,"Wick, Mr. George Dennick",male,57,1,1,36928,164.8667,,S +1110,1,"Widener, Mrs. George Dunton (Eleanor Elkins)",female,50,1,1,113503,211.5,C80,C +1111,3,"Thomson, Mr. Alexander Morrison",male,,0,0,32302,8.05,,S +1112,2,"Duran y More, Miss. Florentina",female,30,1,0,SC/PARIS 2148,13.8583,,C +1113,3,"Reynolds, Mr. Harold J",male,21,0,0,342684,8.05,,S +1114,2,"Cook, Mrs. (Selena Rogers)",female,22,0,0,W./C. 14266,10.5,F33,S +1115,3,"Karlsson, Mr. Einar Gervasius",male,21,0,0,350053,7.7958,,S +1116,1,"Candee, Mrs. Edward (Helen Churchill Hungerford)",female,53,0,0,PC 17606,27.4458,,C +1117,3,"Moubarek, Mrs. George (Omine Amenia"" Alexander)""",female,,0,2,2661,15.2458,,C +1118,3,"Asplund, Mr. Johan Charles",male,23,0,0,350054,7.7958,,S +1119,3,"McNeill, Miss. Bridget",female,,0,0,370368,7.75,,Q +1120,3,"Everett, Mr. Thomas James",male,40.5,0,0,C.A. 6212,15.1,,S +1121,2,"Hocking, Mr. Samuel James Metcalfe",male,36,0,0,242963,13,,S +1122,2,"Sweet, Mr. George Frederick",male,14,0,0,220845,65,,S +1123,1,"Willard, Miss. Constance",female,21,0,0,113795,26.55,,S +1124,3,"Wiklund, Mr. Karl Johan",male,21,1,0,3101266,6.4958,,S +1125,3,"Linehan, Mr. Michael",male,,0,0,330971,7.8792,,Q +1126,1,"Cumings, Mr. John Bradley",male,39,1,0,PC 17599,71.2833,C85,C +1127,3,"Vendel, Mr. Olof Edvin",male,20,0,0,350416,7.8542,,S +1128,1,"Warren, Mr. Frank Manley",male,64,1,0,110813,75.25,D37,C +1129,3,"Baccos, Mr. Raffull",male,20,0,0,2679,7.225,,C +1130,2,"Hiltunen, Miss. Marta",female,18,1,1,250650,13,,S +1131,1,"Douglas, Mrs. Walter Donald (Mahala Dutton)",female,48,1,0,PC 17761,106.425,C86,C +1132,1,"Lindstrom, Mrs. Carl Johan (Sigrid Posse)",female,55,0,0,112377,27.7208,,C +1133,2,"Christy, Mrs. (Alice Frances)",female,45,0,2,237789,30,,S +1134,1,"Spedden, Mr. Frederic Oakley",male,45,1,1,16966,134.5,E34,C +1135,3,"Hyman, Mr. Abraham",male,,0,0,3470,7.8875,,S +1136,3,"Johnston, Master. William Arthur Willie""""",male,,1,2,W./C. 6607,23.45,,S +1137,1,"Kenyon, Mr. Frederick R",male,41,1,0,17464,51.8625,D21,S +1138,2,"Karnes, Mrs. J Frank (Claire Bennett)",female,22,0,0,F.C.C. 13534,21,,S +1139,2,"Drew, Mr. James Vivian",male,42,1,1,28220,32.5,,S +1140,2,"Hold, Mrs. Stephen (Annie Margaret Hill)",female,29,1,0,26707,26,,S +1141,3,"Khalil, Mrs. Betros (Zahie Maria"" Elias)""",female,,1,0,2660,14.4542,,C +1142,2,"West, Miss. Barbara J",female,0.92,1,2,C.A. 34651,27.75,,S +1143,3,"Abrahamsson, Mr. Abraham August Johannes",male,20,0,0,SOTON/O2 3101284,7.925,,S +1144,1,"Clark, Mr. Walter Miller",male,27,1,0,13508,136.7792,C89,C +1145,3,"Salander, Mr. Karl Johan",male,24,0,0,7266,9.325,,S +1146,3,"Wenzel, Mr. Linhart",male,32.5,0,0,345775,9.5,,S +1147,3,"MacKay, Mr. George William",male,,0,0,C.A. 42795,7.55,,S +1148,3,"Mahon, Mr. John",male,,0,0,AQ/4 3130,7.75,,Q +1149,3,"Niklasson, Mr. Samuel",male,28,0,0,363611,8.05,,S +1150,2,"Bentham, Miss. Lilian W",female,19,0,0,28404,13,,S +1151,3,"Midtsjo, Mr. Karl Albert",male,21,0,0,345501,7.775,,S +1152,3,"de Messemaeker, Mr. Guillaume Joseph",male,36.5,1,0,345572,17.4,,S +1153,3,"Nilsson, Mr. August Ferdinand",male,21,0,0,350410,7.8542,,S +1154,2,"Wells, Mrs. Arthur Henry (Addie"" Dart Trevaskis)""",female,29,0,2,29103,23,,S +1155,3,"Klasen, Miss. Gertrud Emilia",female,1,1,1,350405,12.1833,,S +1156,2,"Portaluppi, Mr. Emilio Ilario Giuseppe",male,30,0,0,C.A. 34644,12.7375,,C +1157,3,"Lyntakoff, Mr. Stanko",male,,0,0,349235,7.8958,,S +1158,1,"Chisholm, Mr. Roderick Robert Crispin",male,,0,0,112051,0,,S +1159,3,"Warren, Mr. Charles William",male,,0,0,C.A. 49867,7.55,,S +1160,3,"Howard, Miss. May Elizabeth",female,,0,0,A. 2. 39186,8.05,,S +1161,3,"Pokrnic, Mr. Mate",male,17,0,0,315095,8.6625,,S +1162,1,"McCaffry, Mr. Thomas Francis",male,46,0,0,13050,75.2417,C6,C +1163,3,"Fox, Mr. Patrick",male,,0,0,368573,7.75,,Q +1164,1,"Clark, Mrs. Walter Miller (Virginia McDowell)",female,26,1,0,13508,136.7792,C89,C +1165,3,"Lennon, Miss. Mary",female,,1,0,370371,15.5,,Q +1166,3,"Saade, Mr. Jean Nassr",male,,0,0,2676,7.225,,C +1167,2,"Bryhl, Miss. Dagmar Jenny Ingeborg ",female,20,1,0,236853,26,,S +1168,2,"Parker, Mr. Clifford Richard",male,28,0,0,SC 14888,10.5,,S +1169,2,"Faunthorpe, Mr. Harry",male,40,1,0,2926,26,,S +1170,2,"Ware, Mr. John James",male,30,1,0,CA 31352,21,,S +1171,2,"Oxenham, Mr. Percy Thomas",male,22,0,0,W./C. 14260,10.5,,S +1172,3,"Oreskovic, Miss. Jelka",female,23,0,0,315085,8.6625,,S +1173,3,"Peacock, Master. Alfred Edward",male,0.75,1,1,SOTON/O.Q. 3101315,13.775,,S +1174,3,"Fleming, Miss. Honora",female,,0,0,364859,7.75,,Q +1175,3,"Touma, Miss. Maria Youssef",female,9,1,1,2650,15.2458,,C +1176,3,"Rosblom, Miss. Salli Helena",female,2,1,1,370129,20.2125,,S +1177,3,"Dennis, Mr. William",male,36,0,0,A/5 21175,7.25,,S +1178,3,"Franklin, Mr. Charles (Charles Fardon)",male,,0,0,SOTON/O.Q. 3101314,7.25,,S +1179,1,"Snyder, Mr. John Pillsbury",male,24,1,0,21228,82.2667,B45,S +1180,3,"Mardirosian, Mr. Sarkis",male,,0,0,2655,7.2292,F E46,C +1181,3,"Ford, Mr. Arthur",male,,0,0,A/5 1478,8.05,,S +1182,1,"Rheims, Mr. George Alexander Lucien",male,,0,0,PC 17607,39.6,,S +1183,3,"Daly, Miss. Margaret Marcella Maggie""""",female,30,0,0,382650,6.95,,Q +1184,3,"Nasr, Mr. Mustafa",male,,0,0,2652,7.2292,,C +1185,1,"Dodge, Dr. Washington",male,53,1,1,33638,81.8583,A34,S +1186,3,"Wittevrongel, Mr. Camille",male,36,0,0,345771,9.5,,S +1187,3,"Angheloff, Mr. Minko",male,26,0,0,349202,7.8958,,S +1188,2,"Laroche, Miss. Louise",female,1,1,2,SC/Paris 2123,41.5792,,C +1189,3,"Samaan, Mr. Hanna",male,,2,0,2662,21.6792,,C +1190,1,"Loring, Mr. Joseph Holland",male,30,0,0,113801,45.5,,S +1191,3,"Johansson, Mr. Nils",male,29,0,0,347467,7.8542,,S +1192,3,"Olsson, Mr. Oscar Wilhelm",male,32,0,0,347079,7.775,,S +1193,2,"Malachard, Mr. Noel",male,,0,0,237735,15.0458,D,C +1194,2,"Phillips, Mr. Escott Robert",male,43,0,1,S.O./P.P. 2,21,,S +1195,3,"Pokrnic, Mr. Tome",male,24,0,0,315092,8.6625,,S +1196,3,"McCarthy, Miss. Catherine Katie""""",female,,0,0,383123,7.75,,Q +1197,1,"Crosby, Mrs. Edward Gifford (Catherine Elizabeth Halstead)",female,64,1,1,112901,26.55,B26,S +1198,1,"Allison, Mr. Hudson Joshua Creighton",male,30,1,2,113781,151.55,C22 C26,S +1199,3,"Aks, Master. Philip Frank",male,0.83,0,1,392091,9.35,,S +1200,1,"Hays, Mr. Charles Melville",male,55,1,1,12749,93.5,B69,S +1201,3,"Hansen, Mrs. Claus Peter (Jennie L Howard)",female,45,1,0,350026,14.1083,,S +1202,3,"Cacic, Mr. Jego Grga",male,18,0,0,315091,8.6625,,S +1203,3,"Vartanian, Mr. David",male,22,0,0,2658,7.225,,C +1204,3,"Sadowitz, Mr. Harry",male,,0,0,LP 1588,7.575,,S +1205,3,"Carr, Miss. Jeannie",female,37,0,0,368364,7.75,,Q +1206,1,"White, Mrs. John Stuart (Ella Holmes)",female,55,0,0,PC 17760,135.6333,C32,C +1207,3,"Hagardon, Miss. Kate",female,17,0,0,AQ/3. 30631,7.7333,,Q +1208,1,"Spencer, Mr. William Augustus",male,57,1,0,PC 17569,146.5208,B78,C +1209,2,"Rogers, Mr. Reginald Harry",male,19,0,0,28004,10.5,,S +1210,3,"Jonsson, Mr. Nils Hilding",male,27,0,0,350408,7.8542,,S +1211,2,"Jefferys, Mr. Ernest Wilfred",male,22,2,0,C.A. 31029,31.5,,S +1212,3,"Andersson, Mr. Johan Samuel",male,26,0,0,347075,7.775,,S +1213,3,"Krekorian, Mr. Neshan",male,25,0,0,2654,7.2292,F E57,C +1214,2,"Nesson, Mr. Israel",male,26,0,0,244368,13,F2,S +1215,1,"Rowe, Mr. Alfred G",male,33,0,0,113790,26.55,,S +1216,1,"Kreuchen, Miss. Emilie",female,39,0,0,24160,211.3375,,S +1217,3,"Assam, Mr. Ali",male,23,0,0,SOTON/O.Q. 3101309,7.05,,S +1218,2,"Becker, Miss. Ruth Elizabeth",female,12,2,1,230136,39,F4,S +1219,1,"Rosenshine, Mr. George (Mr George Thorne"")""",male,46,0,0,PC 17585,79.2,,C +1220,2,"Clarke, Mr. Charles Valentine",male,29,1,0,2003,26,,S +1221,2,"Enander, Mr. Ingvar",male,21,0,0,236854,13,,S +1222,2,"Davies, Mrs. John Morgan (Elizabeth Agnes Mary White) ",female,48,0,2,C.A. 33112,36.75,,S +1223,1,"Dulles, Mr. William Crothers",male,39,0,0,PC 17580,29.7,A18,C +1224,3,"Thomas, Mr. Tannous",male,,0,0,2684,7.225,,C +1225,3,"Nakid, Mrs. Said (Waika Mary"" Mowad)""",female,19,1,1,2653,15.7417,,C +1226,3,"Cor, Mr. Ivan",male,27,0,0,349229,7.8958,,S +1227,1,"Maguire, Mr. John Edward",male,30,0,0,110469,26,C106,S +1228,2,"de Brito, Mr. Jose Joaquim",male,32,0,0,244360,13,,S +1229,3,"Elias, Mr. Joseph",male,39,0,2,2675,7.2292,,C +1230,2,"Denbury, Mr. Herbert",male,25,0,0,C.A. 31029,31.5,,S +1231,3,"Betros, Master. Seman",male,,0,0,2622,7.2292,,C +1232,2,"Fillbrook, Mr. Joseph Charles",male,18,0,0,C.A. 15185,10.5,,S +1233,3,"Lundstrom, Mr. Thure Edvin",male,32,0,0,350403,7.5792,,S +1234,3,"Sage, Mr. John George",male,,1,9,CA. 2343,69.55,,S +1235,1,"Cardeza, Mrs. James Warburton Martinez (Charlotte Wardle Drake)",female,58,0,1,PC 17755,512.3292,B51 B53 B55,C +1236,3,"van Billiard, Master. James William",male,,1,1,A/5. 851,14.5,,S +1237,3,"Abelseth, Miss. Karen Marie",female,16,0,0,348125,7.65,,S +1238,2,"Botsford, Mr. William Hull",male,26,0,0,237670,13,,S +1239,3,"Whabee, Mrs. George Joseph (Shawneene Abi-Saab)",female,38,0,0,2688,7.2292,,C +1240,2,"Giles, Mr. Ralph",male,24,0,0,248726,13.5,,S +1241,2,"Walcroft, Miss. Nellie",female,31,0,0,F.C.C. 13528,21,,S +1242,1,"Greenfield, Mrs. Leo David (Blanche Strouse)",female,45,0,1,PC 17759,63.3583,D10 D12,C +1243,2,"Stokes, Mr. Philip Joseph",male,25,0,0,F.C.C. 13540,10.5,,S +1244,2,"Dibden, Mr. William",male,18,0,0,S.O.C. 14879,73.5,,S +1245,2,"Herman, Mr. Samuel",male,49,1,2,220845,65,,S +1246,3,"Dean, Miss. Elizabeth Gladys Millvina""""",female,0.17,1,2,C.A. 2315,20.575,,S +1247,1,"Julian, Mr. Henry Forbes",male,50,0,0,113044,26,E60,S +1248,1,"Brown, Mrs. John Murray (Caroline Lane Lamson)",female,59,2,0,11769,51.4792,C101,S +1249,3,"Lockyer, Mr. Edward",male,,0,0,1222,7.8792,,S +1250,3,"O'Keefe, Mr. Patrick",male,,0,0,368402,7.75,,Q +1251,3,"Lindell, Mrs. Edvard Bengtsson (Elin Gerda Persson)",female,30,1,0,349910,15.55,,S +1252,3,"Sage, Master. William Henry",male,14.5,8,2,CA. 2343,69.55,,S +1253,2,"Mallet, Mrs. Albert (Antoinette Magnin)",female,24,1,1,S.C./PARIS 2079,37.0042,,C +1254,2,"Ware, Mrs. John James (Florence Louise Long)",female,31,0,0,CA 31352,21,,S +1255,3,"Strilic, Mr. Ivan",male,27,0,0,315083,8.6625,,S +1256,1,"Harder, Mrs. George Achilles (Dorothy Annan)",female,25,1,0,11765,55.4417,E50,C +1257,3,"Sage, Mrs. John (Annie Bullen)",female,,1,9,CA. 2343,69.55,,S +1258,3,"Caram, Mr. Joseph",male,,1,0,2689,14.4583,,C +1259,3,"Riihivouri, Miss. Susanna Juhantytar Sanni""""",female,22,0,0,3101295,39.6875,,S +1260,1,"Gibson, Mrs. Leonard (Pauline C Boeson)",female,45,0,1,112378,59.4,,C +1261,2,"Pallas y Castello, Mr. Emilio",male,29,0,0,SC/PARIS 2147,13.8583,,C +1262,2,"Giles, Mr. Edgar",male,21,1,0,28133,11.5,,S +1263,1,"Wilson, Miss. Helen Alice",female,31,0,0,16966,134.5,E39 E41,C +1264,1,"Ismay, Mr. Joseph Bruce",male,49,0,0,112058,0,B52 B54 B56,S +1265,2,"Harbeck, Mr. William H",male,44,0,0,248746,13,,S +1266,1,"Dodge, Mrs. Washington (Ruth Vidaver)",female,54,1,1,33638,81.8583,A34,S +1267,1,"Bowen, Miss. Grace Scott",female,45,0,0,PC 17608,262.375,,C +1268,3,"Kink, Miss. Maria",female,22,2,0,315152,8.6625,,S +1269,2,"Cotterill, Mr. Henry Harry""""",male,21,0,0,29107,11.5,,S +1270,1,"Hipkins, Mr. William Edward",male,55,0,0,680,50,C39,S +1271,3,"Asplund, Master. Carl Edgar",male,5,4,2,347077,31.3875,,S +1272,3,"O'Connor, Mr. Patrick",male,,0,0,366713,7.75,,Q +1273,3,"Foley, Mr. Joseph",male,26,0,0,330910,7.8792,,Q +1274,3,"Risien, Mrs. Samuel (Emma)",female,,0,0,364498,14.5,,S +1275,3,"McNamee, Mrs. Neal (Eileen O'Leary)",female,19,1,0,376566,16.1,,S +1276,2,"Wheeler, Mr. Edwin Frederick""""",male,,0,0,SC/PARIS 2159,12.875,,S +1277,2,"Herman, Miss. Kate",female,24,1,2,220845,65,,S +1278,3,"Aronsson, Mr. Ernst Axel Algot",male,24,0,0,349911,7.775,,S +1279,2,"Ashby, Mr. John",male,57,0,0,244346,13,,S +1280,3,"Canavan, Mr. Patrick",male,21,0,0,364858,7.75,,Q +1281,3,"Palsson, Master. Paul Folke",male,6,3,1,349909,21.075,,S +1282,1,"Payne, Mr. Vivian Ponsonby",male,23,0,0,12749,93.5,B24,S +1283,1,"Lines, Mrs. Ernest H (Elizabeth Lindsey James)",female,51,0,1,PC 17592,39.4,D28,S +1284,3,"Abbott, Master. Eugene Joseph",male,13,0,2,C.A. 2673,20.25,,S +1285,2,"Gilbert, Mr. William",male,47,0,0,C.A. 30769,10.5,,S +1286,3,"Kink-Heilmann, Mr. Anton",male,29,3,1,315153,22.025,,S +1287,1,"Smith, Mrs. Lucien Philip (Mary Eloise Hughes)",female,18,1,0,13695,60,C31,S +1288,3,"Colbert, Mr. Patrick",male,24,0,0,371109,7.25,,Q +1289,1,"Frolicher-Stehli, Mrs. Maxmillian (Margaretha Emerentia Stehli)",female,48,1,1,13567,79.2,B41,C +1290,3,"Larsson-Rondberg, Mr. Edvard A",male,22,0,0,347065,7.775,,S +1291,3,"Conlon, Mr. Thomas Henry",male,31,0,0,21332,7.7333,,Q +1292,1,"Bonnell, Miss. Caroline",female,30,0,0,36928,164.8667,C7,S +1293,2,"Gale, Mr. Harry",male,38,1,0,28664,21,,S +1294,1,"Gibson, Miss. Dorothy Winifred",female,22,0,1,112378,59.4,,C +1295,1,"Carrau, Mr. Jose Pedro",male,17,0,0,113059,47.1,,S +1296,1,"Frauenthal, Mr. Isaac Gerald",male,43,1,0,17765,27.7208,D40,C +1297,2,"Nourney, Mr. Alfred (Baron von Drachstedt"")""",male,20,0,0,SC/PARIS 2166,13.8625,D38,C +1298,2,"Ware, Mr. William Jeffery",male,23,1,0,28666,10.5,,S +1299,1,"Widener, Mr. George Dunton",male,50,1,1,113503,211.5,C80,C +1300,3,"Riordan, Miss. Johanna Hannah""""",female,,0,0,334915,7.7208,,Q +1301,3,"Peacock, Miss. Treasteall",female,3,1,1,SOTON/O.Q. 3101315,13.775,,S +1302,3,"Naughton, Miss. Hannah",female,,0,0,365237,7.75,,Q +1303,1,"Minahan, Mrs. William Edward (Lillian E Thorpe)",female,37,1,0,19928,90,C78,Q +1304,3,"Henriksson, Miss. Jenny Lovisa",female,28,0,0,347086,7.775,,S +1305,3,"Spector, Mr. Woolf",male,,0,0,A.5. 3236,8.05,,S +1306,1,"Oliva y Ocana, Dona. Fermina",female,39,0,0,PC 17758,108.9,C105,C +1307,3,"Saether, Mr. Simon Sivertsen",male,38.5,0,0,SOTON/O.Q. 3101262,7.25,,S +1308,3,"Ware, Mr. Frederick",male,,0,0,359309,8.05,,S +1309,3,"Peter, Master. Michael J",male,,1,1,2668,22.3583,,C diff --git a/Ch3/datasets/titanic/train.csv b/Ch3/datasets/titanic/train.csv new file mode 100644 index 000000000..5cc466e97 --- /dev/null +++ b/Ch3/datasets/titanic/train.csv @@ -0,0 +1,892 @@ +PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked +1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S +2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C +3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S +4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S +5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S +6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q +7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S +8,0,3,"Palsson, Master. Gosta Leonard",male,2,3,1,349909,21.075,,S +9,1,3,"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)",female,27,0,2,347742,11.1333,,S +10,1,2,"Nasser, Mrs. Nicholas (Adele Achem)",female,14,1,0,237736,30.0708,,C +11,1,3,"Sandstrom, Miss. Marguerite Rut",female,4,1,1,PP 9549,16.7,G6,S +12,1,1,"Bonnell, Miss. Elizabeth",female,58,0,0,113783,26.55,C103,S +13,0,3,"Saundercock, Mr. William Henry",male,20,0,0,A/5. 2151,8.05,,S +14,0,3,"Andersson, Mr. Anders Johan",male,39,1,5,347082,31.275,,S +15,0,3,"Vestrom, Miss. Hulda Amanda Adolfina",female,14,0,0,350406,7.8542,,S +16,1,2,"Hewlett, Mrs. (Mary D Kingcome) ",female,55,0,0,248706,16,,S +17,0,3,"Rice, Master. Eugene",male,2,4,1,382652,29.125,,Q +18,1,2,"Williams, Mr. Charles Eugene",male,,0,0,244373,13,,S +19,0,3,"Vander Planke, Mrs. Julius (Emelia Maria Vandemoortele)",female,31,1,0,345763,18,,S +20,1,3,"Masselmani, Mrs. Fatima",female,,0,0,2649,7.225,,C +21,0,2,"Fynney, Mr. Joseph J",male,35,0,0,239865,26,,S +22,1,2,"Beesley, Mr. Lawrence",male,34,0,0,248698,13,D56,S +23,1,3,"McGowan, Miss. Anna ""Annie""",female,15,0,0,330923,8.0292,,Q +24,1,1,"Sloper, Mr. William Thompson",male,28,0,0,113788,35.5,A6,S +25,0,3,"Palsson, Miss. Torborg Danira",female,8,3,1,349909,21.075,,S +26,1,3,"Asplund, Mrs. Carl Oscar (Selma Augusta Emilia Johansson)",female,38,1,5,347077,31.3875,,S +27,0,3,"Emir, Mr. Farred Chehab",male,,0,0,2631,7.225,,C +28,0,1,"Fortune, Mr. Charles Alexander",male,19,3,2,19950,263,C23 C25 C27,S +29,1,3,"O'Dwyer, Miss. Ellen ""Nellie""",female,,0,0,330959,7.8792,,Q +30,0,3,"Todoroff, Mr. Lalio",male,,0,0,349216,7.8958,,S +31,0,1,"Uruchurtu, Don. Manuel E",male,40,0,0,PC 17601,27.7208,,C +32,1,1,"Spencer, Mrs. William Augustus (Marie Eugenie)",female,,1,0,PC 17569,146.5208,B78,C +33,1,3,"Glynn, Miss. Mary Agatha",female,,0,0,335677,7.75,,Q +34,0,2,"Wheadon, Mr. Edward H",male,66,0,0,C.A. 24579,10.5,,S +35,0,1,"Meyer, Mr. Edgar Joseph",male,28,1,0,PC 17604,82.1708,,C +36,0,1,"Holverson, Mr. Alexander Oskar",male,42,1,0,113789,52,,S +37,1,3,"Mamee, Mr. Hanna",male,,0,0,2677,7.2292,,C +38,0,3,"Cann, Mr. Ernest Charles",male,21,0,0,A./5. 2152,8.05,,S +39,0,3,"Vander Planke, Miss. Augusta Maria",female,18,2,0,345764,18,,S +40,1,3,"Nicola-Yarred, Miss. Jamila",female,14,1,0,2651,11.2417,,C +41,0,3,"Ahlin, Mrs. Johan (Johanna Persdotter Larsson)",female,40,1,0,7546,9.475,,S +42,0,2,"Turpin, Mrs. William John Robert (Dorothy Ann Wonnacott)",female,27,1,0,11668,21,,S +43,0,3,"Kraeff, Mr. Theodor",male,,0,0,349253,7.8958,,C +44,1,2,"Laroche, Miss. Simonne Marie Anne Andree",female,3,1,2,SC/Paris 2123,41.5792,,C +45,1,3,"Devaney, Miss. Margaret Delia",female,19,0,0,330958,7.8792,,Q +46,0,3,"Rogers, Mr. William John",male,,0,0,S.C./A.4. 23567,8.05,,S +47,0,3,"Lennon, Mr. Denis",male,,1,0,370371,15.5,,Q +48,1,3,"O'Driscoll, Miss. Bridget",female,,0,0,14311,7.75,,Q +49,0,3,"Samaan, Mr. Youssef",male,,2,0,2662,21.6792,,C +50,0,3,"Arnold-Franchi, Mrs. Josef (Josefine Franchi)",female,18,1,0,349237,17.8,,S +51,0,3,"Panula, Master. Juha Niilo",male,7,4,1,3101295,39.6875,,S +52,0,3,"Nosworthy, Mr. Richard Cater",male,21,0,0,A/4. 39886,7.8,,S +53,1,1,"Harper, Mrs. Henry Sleeper (Myna Haxtun)",female,49,1,0,PC 17572,76.7292,D33,C +54,1,2,"Faunthorpe, Mrs. Lizzie (Elizabeth Anne Wilkinson)",female,29,1,0,2926,26,,S +55,0,1,"Ostby, Mr. Engelhart Cornelius",male,65,0,1,113509,61.9792,B30,C +56,1,1,"Woolner, Mr. Hugh",male,,0,0,19947,35.5,C52,S +57,1,2,"Rugg, Miss. Emily",female,21,0,0,C.A. 31026,10.5,,S +58,0,3,"Novel, Mr. Mansouer",male,28.5,0,0,2697,7.2292,,C +59,1,2,"West, Miss. Constance Mirium",female,5,1,2,C.A. 34651,27.75,,S +60,0,3,"Goodwin, Master. William Frederick",male,11,5,2,CA 2144,46.9,,S +61,0,3,"Sirayanian, Mr. Orsen",male,22,0,0,2669,7.2292,,C +62,1,1,"Icard, Miss. Amelie",female,38,0,0,113572,80,B28, +63,0,1,"Harris, Mr. Henry Birkhardt",male,45,1,0,36973,83.475,C83,S +64,0,3,"Skoog, Master. Harald",male,4,3,2,347088,27.9,,S +65,0,1,"Stewart, Mr. Albert A",male,,0,0,PC 17605,27.7208,,C +66,1,3,"Moubarek, Master. Gerios",male,,1,1,2661,15.2458,,C +67,1,2,"Nye, Mrs. (Elizabeth Ramell)",female,29,0,0,C.A. 29395,10.5,F33,S +68,0,3,"Crease, Mr. Ernest James",male,19,0,0,S.P. 3464,8.1583,,S +69,1,3,"Andersson, Miss. Erna Alexandra",female,17,4,2,3101281,7.925,,S +70,0,3,"Kink, Mr. Vincenz",male,26,2,0,315151,8.6625,,S +71,0,2,"Jenkin, Mr. Stephen Curnow",male,32,0,0,C.A. 33111,10.5,,S +72,0,3,"Goodwin, Miss. Lillian Amy",female,16,5,2,CA 2144,46.9,,S +73,0,2,"Hood, Mr. Ambrose Jr",male,21,0,0,S.O.C. 14879,73.5,,S +74,0,3,"Chronopoulos, Mr. Apostolos",male,26,1,0,2680,14.4542,,C +75,1,3,"Bing, Mr. Lee",male,32,0,0,1601,56.4958,,S +76,0,3,"Moen, Mr. Sigurd Hansen",male,25,0,0,348123,7.65,F G73,S +77,0,3,"Staneff, Mr. Ivan",male,,0,0,349208,7.8958,,S +78,0,3,"Moutal, Mr. Rahamin Haim",male,,0,0,374746,8.05,,S +79,1,2,"Caldwell, Master. Alden Gates",male,0.83,0,2,248738,29,,S +80,1,3,"Dowdell, Miss. Elizabeth",female,30,0,0,364516,12.475,,S +81,0,3,"Waelens, Mr. Achille",male,22,0,0,345767,9,,S +82,1,3,"Sheerlinck, Mr. Jan Baptist",male,29,0,0,345779,9.5,,S +83,1,3,"McDermott, Miss. Brigdet Delia",female,,0,0,330932,7.7875,,Q +84,0,1,"Carrau, Mr. Francisco M",male,28,0,0,113059,47.1,,S +85,1,2,"Ilett, Miss. Bertha",female,17,0,0,SO/C 14885,10.5,,S +86,1,3,"Backstrom, Mrs. Karl Alfred (Maria Mathilda Gustafsson)",female,33,3,0,3101278,15.85,,S +87,0,3,"Ford, Mr. William Neal",male,16,1,3,W./C. 6608,34.375,,S +88,0,3,"Slocovski, Mr. Selman Francis",male,,0,0,SOTON/OQ 392086,8.05,,S +89,1,1,"Fortune, Miss. Mabel Helen",female,23,3,2,19950,263,C23 C25 C27,S +90,0,3,"Celotti, Mr. Francesco",male,24,0,0,343275,8.05,,S +91,0,3,"Christmann, Mr. Emil",male,29,0,0,343276,8.05,,S +92,0,3,"Andreasson, Mr. Paul Edvin",male,20,0,0,347466,7.8542,,S +93,0,1,"Chaffee, Mr. Herbert Fuller",male,46,1,0,W.E.P. 5734,61.175,E31,S +94,0,3,"Dean, Mr. Bertram Frank",male,26,1,2,C.A. 2315,20.575,,S +95,0,3,"Coxon, Mr. Daniel",male,59,0,0,364500,7.25,,S +96,0,3,"Shorney, Mr. Charles Joseph",male,,0,0,374910,8.05,,S +97,0,1,"Goldschmidt, Mr. George B",male,71,0,0,PC 17754,34.6542,A5,C +98,1,1,"Greenfield, Mr. William Bertram",male,23,0,1,PC 17759,63.3583,D10 D12,C +99,1,2,"Doling, Mrs. John T (Ada Julia Bone)",female,34,0,1,231919,23,,S +100,0,2,"Kantor, Mr. Sinai",male,34,1,0,244367,26,,S +101,0,3,"Petranec, Miss. Matilda",female,28,0,0,349245,7.8958,,S +102,0,3,"Petroff, Mr. Pastcho (""Pentcho"")",male,,0,0,349215,7.8958,,S +103,0,1,"White, Mr. Richard Frasar",male,21,0,1,35281,77.2875,D26,S +104,0,3,"Johansson, Mr. Gustaf Joel",male,33,0,0,7540,8.6542,,S +105,0,3,"Gustafsson, Mr. Anders Vilhelm",male,37,2,0,3101276,7.925,,S +106,0,3,"Mionoff, Mr. Stoytcho",male,28,0,0,349207,7.8958,,S +107,1,3,"Salkjelsvik, Miss. Anna Kristine",female,21,0,0,343120,7.65,,S +108,1,3,"Moss, Mr. Albert Johan",male,,0,0,312991,7.775,,S +109,0,3,"Rekic, Mr. Tido",male,38,0,0,349249,7.8958,,S +110,1,3,"Moran, Miss. Bertha",female,,1,0,371110,24.15,,Q +111,0,1,"Porter, Mr. Walter Chamberlain",male,47,0,0,110465,52,C110,S +112,0,3,"Zabour, Miss. Hileni",female,14.5,1,0,2665,14.4542,,C +113,0,3,"Barton, Mr. David John",male,22,0,0,324669,8.05,,S +114,0,3,"Jussila, Miss. Katriina",female,20,1,0,4136,9.825,,S +115,0,3,"Attalah, Miss. Malake",female,17,0,0,2627,14.4583,,C +116,0,3,"Pekoniemi, Mr. Edvard",male,21,0,0,STON/O 2. 3101294,7.925,,S +117,0,3,"Connors, Mr. Patrick",male,70.5,0,0,370369,7.75,,Q +118,0,2,"Turpin, Mr. William John Robert",male,29,1,0,11668,21,,S +119,0,1,"Baxter, Mr. Quigg Edmond",male,24,0,1,PC 17558,247.5208,B58 B60,C +120,0,3,"Andersson, Miss. Ellis Anna Maria",female,2,4,2,347082,31.275,,S +121,0,2,"Hickman, Mr. Stanley George",male,21,2,0,S.O.C. 14879,73.5,,S +122,0,3,"Moore, Mr. Leonard Charles",male,,0,0,A4. 54510,8.05,,S +123,0,2,"Nasser, Mr. Nicholas",male,32.5,1,0,237736,30.0708,,C +124,1,2,"Webber, Miss. Susan",female,32.5,0,0,27267,13,E101,S +125,0,1,"White, Mr. Percival Wayland",male,54,0,1,35281,77.2875,D26,S +126,1,3,"Nicola-Yarred, Master. Elias",male,12,1,0,2651,11.2417,,C +127,0,3,"McMahon, Mr. Martin",male,,0,0,370372,7.75,,Q +128,1,3,"Madsen, Mr. Fridtjof Arne",male,24,0,0,C 17369,7.1417,,S +129,1,3,"Peter, Miss. Anna",female,,1,1,2668,22.3583,F E69,C +130,0,3,"Ekstrom, Mr. Johan",male,45,0,0,347061,6.975,,S +131,0,3,"Drazenoic, Mr. Jozef",male,33,0,0,349241,7.8958,,C +132,0,3,"Coelho, Mr. Domingos Fernandeo",male,20,0,0,SOTON/O.Q. 3101307,7.05,,S +133,0,3,"Robins, Mrs. Alexander A (Grace Charity Laury)",female,47,1,0,A/5. 3337,14.5,,S +134,1,2,"Weisz, Mrs. Leopold (Mathilde Francoise Pede)",female,29,1,0,228414,26,,S +135,0,2,"Sobey, Mr. Samuel James Hayden",male,25,0,0,C.A. 29178,13,,S +136,0,2,"Richard, Mr. Emile",male,23,0,0,SC/PARIS 2133,15.0458,,C +137,1,1,"Newsom, Miss. Helen Monypeny",female,19,0,2,11752,26.2833,D47,S +138,0,1,"Futrelle, Mr. Jacques Heath",male,37,1,0,113803,53.1,C123,S +139,0,3,"Osen, Mr. Olaf Elon",male,16,0,0,7534,9.2167,,S +140,0,1,"Giglio, Mr. Victor",male,24,0,0,PC 17593,79.2,B86,C +141,0,3,"Boulos, Mrs. Joseph (Sultana)",female,,0,2,2678,15.2458,,C +142,1,3,"Nysten, Miss. Anna Sofia",female,22,0,0,347081,7.75,,S +143,1,3,"Hakkarainen, Mrs. Pekka Pietari (Elin Matilda Dolck)",female,24,1,0,STON/O2. 3101279,15.85,,S +144,0,3,"Burke, Mr. Jeremiah",male,19,0,0,365222,6.75,,Q +145,0,2,"Andrew, Mr. Edgardo Samuel",male,18,0,0,231945,11.5,,S +146,0,2,"Nicholls, Mr. Joseph Charles",male,19,1,1,C.A. 33112,36.75,,S +147,1,3,"Andersson, Mr. August Edvard (""Wennerstrom"")",male,27,0,0,350043,7.7958,,S +148,0,3,"Ford, Miss. Robina Maggie ""Ruby""",female,9,2,2,W./C. 6608,34.375,,S +149,0,2,"Navratil, Mr. Michel (""Louis M Hoffman"")",male,36.5,0,2,230080,26,F2,S +150,0,2,"Byles, Rev. Thomas Roussel Davids",male,42,0,0,244310,13,,S +151,0,2,"Bateman, Rev. Robert James",male,51,0,0,S.O.P. 1166,12.525,,S +152,1,1,"Pears, Mrs. Thomas (Edith Wearne)",female,22,1,0,113776,66.6,C2,S +153,0,3,"Meo, Mr. Alfonzo",male,55.5,0,0,A.5. 11206,8.05,,S +154,0,3,"van Billiard, Mr. Austin Blyler",male,40.5,0,2,A/5. 851,14.5,,S +155,0,3,"Olsen, Mr. Ole Martin",male,,0,0,Fa 265302,7.3125,,S +156,0,1,"Williams, Mr. Charles Duane",male,51,0,1,PC 17597,61.3792,,C +157,1,3,"Gilnagh, Miss. Katherine ""Katie""",female,16,0,0,35851,7.7333,,Q +158,0,3,"Corn, Mr. Harry",male,30,0,0,SOTON/OQ 392090,8.05,,S +159,0,3,"Smiljanic, Mr. Mile",male,,0,0,315037,8.6625,,S +160,0,3,"Sage, Master. Thomas Henry",male,,8,2,CA. 2343,69.55,,S +161,0,3,"Cribb, Mr. John Hatfield",male,44,0,1,371362,16.1,,S +162,1,2,"Watt, Mrs. James (Elizabeth ""Bessie"" Inglis Milne)",female,40,0,0,C.A. 33595,15.75,,S +163,0,3,"Bengtsson, Mr. John Viktor",male,26,0,0,347068,7.775,,S +164,0,3,"Calic, Mr. Jovo",male,17,0,0,315093,8.6625,,S +165,0,3,"Panula, Master. Eino Viljami",male,1,4,1,3101295,39.6875,,S +166,1,3,"Goldsmith, Master. Frank John William ""Frankie""",male,9,0,2,363291,20.525,,S +167,1,1,"Chibnall, Mrs. (Edith Martha Bowerman)",female,,0,1,113505,55,E33,S +168,0,3,"Skoog, Mrs. William (Anna Bernhardina Karlsson)",female,45,1,4,347088,27.9,,S +169,0,1,"Baumann, Mr. John D",male,,0,0,PC 17318,25.925,,S +170,0,3,"Ling, Mr. Lee",male,28,0,0,1601,56.4958,,S +171,0,1,"Van der hoef, Mr. Wyckoff",male,61,0,0,111240,33.5,B19,S +172,0,3,"Rice, Master. Arthur",male,4,4,1,382652,29.125,,Q +173,1,3,"Johnson, Miss. Eleanor Ileen",female,1,1,1,347742,11.1333,,S +174,0,3,"Sivola, Mr. Antti Wilhelm",male,21,0,0,STON/O 2. 3101280,7.925,,S +175,0,1,"Smith, Mr. James Clinch",male,56,0,0,17764,30.6958,A7,C +176,0,3,"Klasen, Mr. Klas Albin",male,18,1,1,350404,7.8542,,S +177,0,3,"Lefebre, Master. Henry Forbes",male,,3,1,4133,25.4667,,S +178,0,1,"Isham, Miss. Ann Elizabeth",female,50,0,0,PC 17595,28.7125,C49,C +179,0,2,"Hale, Mr. Reginald",male,30,0,0,250653,13,,S +180,0,3,"Leonard, Mr. Lionel",male,36,0,0,LINE,0,,S +181,0,3,"Sage, Miss. Constance Gladys",female,,8,2,CA. 2343,69.55,,S +182,0,2,"Pernot, Mr. Rene",male,,0,0,SC/PARIS 2131,15.05,,C +183,0,3,"Asplund, Master. Clarence Gustaf Hugo",male,9,4,2,347077,31.3875,,S +184,1,2,"Becker, Master. Richard F",male,1,2,1,230136,39,F4,S +185,1,3,"Kink-Heilmann, Miss. Luise Gretchen",female,4,0,2,315153,22.025,,S +186,0,1,"Rood, Mr. Hugh Roscoe",male,,0,0,113767,50,A32,S +187,1,3,"O'Brien, Mrs. Thomas (Johanna ""Hannah"" Godfrey)",female,,1,0,370365,15.5,,Q +188,1,1,"Romaine, Mr. Charles Hallace (""Mr C Rolmane"")",male,45,0,0,111428,26.55,,S +189,0,3,"Bourke, Mr. John",male,40,1,1,364849,15.5,,Q +190,0,3,"Turcin, Mr. Stjepan",male,36,0,0,349247,7.8958,,S +191,1,2,"Pinsky, Mrs. (Rosa)",female,32,0,0,234604,13,,S +192,0,2,"Carbines, Mr. William",male,19,0,0,28424,13,,S +193,1,3,"Andersen-Jensen, Miss. Carla Christine Nielsine",female,19,1,0,350046,7.8542,,S +194,1,2,"Navratil, Master. Michel M",male,3,1,1,230080,26,F2,S +195,1,1,"Brown, Mrs. James Joseph (Margaret Tobin)",female,44,0,0,PC 17610,27.7208,B4,C +196,1,1,"Lurette, Miss. Elise",female,58,0,0,PC 17569,146.5208,B80,C +197,0,3,"Mernagh, Mr. Robert",male,,0,0,368703,7.75,,Q +198,0,3,"Olsen, Mr. Karl Siegwart Andreas",male,42,0,1,4579,8.4042,,S +199,1,3,"Madigan, Miss. Margaret ""Maggie""",female,,0,0,370370,7.75,,Q +200,0,2,"Yrois, Miss. Henriette (""Mrs Harbeck"")",female,24,0,0,248747,13,,S +201,0,3,"Vande Walle, Mr. Nestor Cyriel",male,28,0,0,345770,9.5,,S +202,0,3,"Sage, Mr. Frederick",male,,8,2,CA. 2343,69.55,,S +203,0,3,"Johanson, Mr. Jakob Alfred",male,34,0,0,3101264,6.4958,,S +204,0,3,"Youseff, Mr. Gerious",male,45.5,0,0,2628,7.225,,C +205,1,3,"Cohen, Mr. Gurshon ""Gus""",male,18,0,0,A/5 3540,8.05,,S +206,0,3,"Strom, Miss. Telma Matilda",female,2,0,1,347054,10.4625,G6,S +207,0,3,"Backstrom, Mr. Karl Alfred",male,32,1,0,3101278,15.85,,S +208,1,3,"Albimona, Mr. Nassef Cassem",male,26,0,0,2699,18.7875,,C +209,1,3,"Carr, Miss. Helen ""Ellen""",female,16,0,0,367231,7.75,,Q +210,1,1,"Blank, Mr. Henry",male,40,0,0,112277,31,A31,C +211,0,3,"Ali, Mr. Ahmed",male,24,0,0,SOTON/O.Q. 3101311,7.05,,S +212,1,2,"Cameron, Miss. Clear Annie",female,35,0,0,F.C.C. 13528,21,,S +213,0,3,"Perkin, Mr. John Henry",male,22,0,0,A/5 21174,7.25,,S +214,0,2,"Givard, Mr. Hans Kristensen",male,30,0,0,250646,13,,S +215,0,3,"Kiernan, Mr. Philip",male,,1,0,367229,7.75,,Q +216,1,1,"Newell, Miss. Madeleine",female,31,1,0,35273,113.275,D36,C +217,1,3,"Honkanen, Miss. Eliina",female,27,0,0,STON/O2. 3101283,7.925,,S +218,0,2,"Jacobsohn, Mr. Sidney Samuel",male,42,1,0,243847,27,,S +219,1,1,"Bazzani, Miss. Albina",female,32,0,0,11813,76.2917,D15,C +220,0,2,"Harris, Mr. Walter",male,30,0,0,W/C 14208,10.5,,S +221,1,3,"Sunderland, Mr. Victor Francis",male,16,0,0,SOTON/OQ 392089,8.05,,S +222,0,2,"Bracken, Mr. James H",male,27,0,0,220367,13,,S +223,0,3,"Green, Mr. George Henry",male,51,0,0,21440,8.05,,S +224,0,3,"Nenkoff, Mr. Christo",male,,0,0,349234,7.8958,,S +225,1,1,"Hoyt, Mr. Frederick Maxfield",male,38,1,0,19943,90,C93,S +226,0,3,"Berglund, Mr. Karl Ivar Sven",male,22,0,0,PP 4348,9.35,,S +227,1,2,"Mellors, Mr. William John",male,19,0,0,SW/PP 751,10.5,,S +228,0,3,"Lovell, Mr. John Hall (""Henry"")",male,20.5,0,0,A/5 21173,7.25,,S +229,0,2,"Fahlstrom, Mr. Arne Jonas",male,18,0,0,236171,13,,S +230,0,3,"Lefebre, Miss. Mathilde",female,,3,1,4133,25.4667,,S +231,1,1,"Harris, Mrs. Henry Birkhardt (Irene Wallach)",female,35,1,0,36973,83.475,C83,S +232,0,3,"Larsson, Mr. Bengt Edvin",male,29,0,0,347067,7.775,,S +233,0,2,"Sjostedt, Mr. Ernst Adolf",male,59,0,0,237442,13.5,,S +234,1,3,"Asplund, Miss. Lillian Gertrud",female,5,4,2,347077,31.3875,,S +235,0,2,"Leyson, Mr. Robert William Norman",male,24,0,0,C.A. 29566,10.5,,S +236,0,3,"Harknett, Miss. Alice Phoebe",female,,0,0,W./C. 6609,7.55,,S +237,0,2,"Hold, Mr. Stephen",male,44,1,0,26707,26,,S +238,1,2,"Collyer, Miss. Marjorie ""Lottie""",female,8,0,2,C.A. 31921,26.25,,S +239,0,2,"Pengelly, Mr. Frederick William",male,19,0,0,28665,10.5,,S +240,0,2,"Hunt, Mr. George Henry",male,33,0,0,SCO/W 1585,12.275,,S +241,0,3,"Zabour, Miss. Thamine",female,,1,0,2665,14.4542,,C +242,1,3,"Murphy, Miss. Katherine ""Kate""",female,,1,0,367230,15.5,,Q +243,0,2,"Coleridge, Mr. Reginald Charles",male,29,0,0,W./C. 14263,10.5,,S +244,0,3,"Maenpaa, Mr. Matti Alexanteri",male,22,0,0,STON/O 2. 3101275,7.125,,S +245,0,3,"Attalah, Mr. Sleiman",male,30,0,0,2694,7.225,,C +246,0,1,"Minahan, Dr. William Edward",male,44,2,0,19928,90,C78,Q +247,0,3,"Lindahl, Miss. Agda Thorilda Viktoria",female,25,0,0,347071,7.775,,S +248,1,2,"Hamalainen, Mrs. William (Anna)",female,24,0,2,250649,14.5,,S +249,1,1,"Beckwith, Mr. Richard Leonard",male,37,1,1,11751,52.5542,D35,S +250,0,2,"Carter, Rev. Ernest Courtenay",male,54,1,0,244252,26,,S +251,0,3,"Reed, Mr. James George",male,,0,0,362316,7.25,,S +252,0,3,"Strom, Mrs. Wilhelm (Elna Matilda Persson)",female,29,1,1,347054,10.4625,G6,S +253,0,1,"Stead, Mr. William Thomas",male,62,0,0,113514,26.55,C87,S +254,0,3,"Lobb, Mr. William Arthur",male,30,1,0,A/5. 3336,16.1,,S +255,0,3,"Rosblom, Mrs. Viktor (Helena Wilhelmina)",female,41,0,2,370129,20.2125,,S +256,1,3,"Touma, Mrs. Darwis (Hanne Youssef Razi)",female,29,0,2,2650,15.2458,,C +257,1,1,"Thorne, Mrs. Gertrude Maybelle",female,,0,0,PC 17585,79.2,,C +258,1,1,"Cherry, Miss. Gladys",female,30,0,0,110152,86.5,B77,S +259,1,1,"Ward, Miss. Anna",female,35,0,0,PC 17755,512.3292,,C +260,1,2,"Parrish, Mrs. (Lutie Davis)",female,50,0,1,230433,26,,S +261,0,3,"Smith, Mr. Thomas",male,,0,0,384461,7.75,,Q +262,1,3,"Asplund, Master. Edvin Rojj Felix",male,3,4,2,347077,31.3875,,S +263,0,1,"Taussig, Mr. Emil",male,52,1,1,110413,79.65,E67,S +264,0,1,"Harrison, Mr. William",male,40,0,0,112059,0,B94,S +265,0,3,"Henry, Miss. Delia",female,,0,0,382649,7.75,,Q +266,0,2,"Reeves, Mr. David",male,36,0,0,C.A. 17248,10.5,,S +267,0,3,"Panula, Mr. Ernesti Arvid",male,16,4,1,3101295,39.6875,,S +268,1,3,"Persson, Mr. Ernst Ulrik",male,25,1,0,347083,7.775,,S +269,1,1,"Graham, Mrs. William Thompson (Edith Junkins)",female,58,0,1,PC 17582,153.4625,C125,S +270,1,1,"Bissette, Miss. Amelia",female,35,0,0,PC 17760,135.6333,C99,S +271,0,1,"Cairns, Mr. Alexander",male,,0,0,113798,31,,S +272,1,3,"Tornquist, Mr. William Henry",male,25,0,0,LINE,0,,S +273,1,2,"Mellinger, Mrs. (Elizabeth Anne Maidment)",female,41,0,1,250644,19.5,,S +274,0,1,"Natsch, Mr. Charles H",male,37,0,1,PC 17596,29.7,C118,C +275,1,3,"Healy, Miss. Hanora ""Nora""",female,,0,0,370375,7.75,,Q +276,1,1,"Andrews, Miss. Kornelia Theodosia",female,63,1,0,13502,77.9583,D7,S +277,0,3,"Lindblom, Miss. Augusta Charlotta",female,45,0,0,347073,7.75,,S +278,0,2,"Parkes, Mr. Francis ""Frank""",male,,0,0,239853,0,,S +279,0,3,"Rice, Master. Eric",male,7,4,1,382652,29.125,,Q +280,1,3,"Abbott, Mrs. Stanton (Rosa Hunt)",female,35,1,1,C.A. 2673,20.25,,S +281,0,3,"Duane, Mr. Frank",male,65,0,0,336439,7.75,,Q +282,0,3,"Olsson, Mr. Nils Johan Goransson",male,28,0,0,347464,7.8542,,S +283,0,3,"de Pelsmaeker, Mr. Alfons",male,16,0,0,345778,9.5,,S +284,1,3,"Dorking, Mr. Edward Arthur",male,19,0,0,A/5. 10482,8.05,,S +285,0,1,"Smith, Mr. Richard William",male,,0,0,113056,26,A19,S +286,0,3,"Stankovic, Mr. Ivan",male,33,0,0,349239,8.6625,,C +287,1,3,"de Mulder, Mr. Theodore",male,30,0,0,345774,9.5,,S +288,0,3,"Naidenoff, Mr. Penko",male,22,0,0,349206,7.8958,,S +289,1,2,"Hosono, Mr. Masabumi",male,42,0,0,237798,13,,S +290,1,3,"Connolly, Miss. Kate",female,22,0,0,370373,7.75,,Q +291,1,1,"Barber, Miss. Ellen ""Nellie""",female,26,0,0,19877,78.85,,S +292,1,1,"Bishop, Mrs. Dickinson H (Helen Walton)",female,19,1,0,11967,91.0792,B49,C +293,0,2,"Levy, Mr. Rene Jacques",male,36,0,0,SC/Paris 2163,12.875,D,C +294,0,3,"Haas, Miss. Aloisia",female,24,0,0,349236,8.85,,S +295,0,3,"Mineff, Mr. Ivan",male,24,0,0,349233,7.8958,,S +296,0,1,"Lewy, Mr. Ervin G",male,,0,0,PC 17612,27.7208,,C +297,0,3,"Hanna, Mr. Mansour",male,23.5,0,0,2693,7.2292,,C +298,0,1,"Allison, Miss. Helen Loraine",female,2,1,2,113781,151.55,C22 C26,S +299,1,1,"Saalfeld, Mr. Adolphe",male,,0,0,19988,30.5,C106,S +300,1,1,"Baxter, Mrs. James (Helene DeLaudeniere Chaput)",female,50,0,1,PC 17558,247.5208,B58 B60,C +301,1,3,"Kelly, Miss. Anna Katherine ""Annie Kate""",female,,0,0,9234,7.75,,Q +302,1,3,"McCoy, Mr. Bernard",male,,2,0,367226,23.25,,Q +303,0,3,"Johnson, Mr. William Cahoone Jr",male,19,0,0,LINE,0,,S +304,1,2,"Keane, Miss. Nora A",female,,0,0,226593,12.35,E101,Q +305,0,3,"Williams, Mr. Howard Hugh ""Harry""",male,,0,0,A/5 2466,8.05,,S +306,1,1,"Allison, Master. Hudson Trevor",male,0.92,1,2,113781,151.55,C22 C26,S +307,1,1,"Fleming, Miss. Margaret",female,,0,0,17421,110.8833,,C +308,1,1,"Penasco y Castellana, Mrs. Victor de Satode (Maria Josefa Perez de Soto y Vallejo)",female,17,1,0,PC 17758,108.9,C65,C +309,0,2,"Abelson, Mr. Samuel",male,30,1,0,P/PP 3381,24,,C +310,1,1,"Francatelli, Miss. Laura Mabel",female,30,0,0,PC 17485,56.9292,E36,C +311,1,1,"Hays, Miss. Margaret Bechstein",female,24,0,0,11767,83.1583,C54,C +312,1,1,"Ryerson, Miss. Emily Borie",female,18,2,2,PC 17608,262.375,B57 B59 B63 B66,C +313,0,2,"Lahtinen, Mrs. William (Anna Sylfven)",female,26,1,1,250651,26,,S +314,0,3,"Hendekovic, Mr. Ignjac",male,28,0,0,349243,7.8958,,S +315,0,2,"Hart, Mr. Benjamin",male,43,1,1,F.C.C. 13529,26.25,,S +316,1,3,"Nilsson, Miss. Helmina Josefina",female,26,0,0,347470,7.8542,,S +317,1,2,"Kantor, Mrs. Sinai (Miriam Sternin)",female,24,1,0,244367,26,,S +318,0,2,"Moraweck, Dr. Ernest",male,54,0,0,29011,14,,S +319,1,1,"Wick, Miss. Mary Natalie",female,31,0,2,36928,164.8667,C7,S +320,1,1,"Spedden, Mrs. Frederic Oakley (Margaretta Corning Stone)",female,40,1,1,16966,134.5,E34,C +321,0,3,"Dennis, Mr. Samuel",male,22,0,0,A/5 21172,7.25,,S +322,0,3,"Danoff, Mr. Yoto",male,27,0,0,349219,7.8958,,S +323,1,2,"Slayter, Miss. Hilda Mary",female,30,0,0,234818,12.35,,Q +324,1,2,"Caldwell, Mrs. Albert Francis (Sylvia Mae Harbaugh)",female,22,1,1,248738,29,,S +325,0,3,"Sage, Mr. George John Jr",male,,8,2,CA. 2343,69.55,,S +326,1,1,"Young, Miss. Marie Grice",female,36,0,0,PC 17760,135.6333,C32,C +327,0,3,"Nysveen, Mr. Johan Hansen",male,61,0,0,345364,6.2375,,S +328,1,2,"Ball, Mrs. (Ada E Hall)",female,36,0,0,28551,13,D,S +329,1,3,"Goldsmith, Mrs. Frank John (Emily Alice Brown)",female,31,1,1,363291,20.525,,S +330,1,1,"Hippach, Miss. Jean Gertrude",female,16,0,1,111361,57.9792,B18,C +331,1,3,"McCoy, Miss. Agnes",female,,2,0,367226,23.25,,Q +332,0,1,"Partner, Mr. Austen",male,45.5,0,0,113043,28.5,C124,S +333,0,1,"Graham, Mr. George Edward",male,38,0,1,PC 17582,153.4625,C91,S +334,0,3,"Vander Planke, Mr. Leo Edmondus",male,16,2,0,345764,18,,S +335,1,1,"Frauenthal, Mrs. Henry William (Clara Heinsheimer)",female,,1,0,PC 17611,133.65,,S +336,0,3,"Denkoff, Mr. Mitto",male,,0,0,349225,7.8958,,S +337,0,1,"Pears, Mr. Thomas Clinton",male,29,1,0,113776,66.6,C2,S +338,1,1,"Burns, Miss. Elizabeth Margaret",female,41,0,0,16966,134.5,E40,C +339,1,3,"Dahl, Mr. Karl Edwart",male,45,0,0,7598,8.05,,S +340,0,1,"Blackwell, Mr. Stephen Weart",male,45,0,0,113784,35.5,T,S +341,1,2,"Navratil, Master. Edmond Roger",male,2,1,1,230080,26,F2,S +342,1,1,"Fortune, Miss. Alice Elizabeth",female,24,3,2,19950,263,C23 C25 C27,S +343,0,2,"Collander, Mr. Erik Gustaf",male,28,0,0,248740,13,,S +344,0,2,"Sedgwick, Mr. Charles Frederick Waddington",male,25,0,0,244361,13,,S +345,0,2,"Fox, Mr. Stanley Hubert",male,36,0,0,229236,13,,S +346,1,2,"Brown, Miss. Amelia ""Mildred""",female,24,0,0,248733,13,F33,S +347,1,2,"Smith, Miss. Marion Elsie",female,40,0,0,31418,13,,S +348,1,3,"Davison, Mrs. Thomas Henry (Mary E Finck)",female,,1,0,386525,16.1,,S +349,1,3,"Coutts, Master. William Loch ""William""",male,3,1,1,C.A. 37671,15.9,,S +350,0,3,"Dimic, Mr. Jovan",male,42,0,0,315088,8.6625,,S +351,0,3,"Odahl, Mr. Nils Martin",male,23,0,0,7267,9.225,,S +352,0,1,"Williams-Lambert, Mr. Fletcher Fellows",male,,0,0,113510,35,C128,S +353,0,3,"Elias, Mr. Tannous",male,15,1,1,2695,7.2292,,C +354,0,3,"Arnold-Franchi, Mr. Josef",male,25,1,0,349237,17.8,,S +355,0,3,"Yousif, Mr. Wazli",male,,0,0,2647,7.225,,C +356,0,3,"Vanden Steen, Mr. Leo Peter",male,28,0,0,345783,9.5,,S +357,1,1,"Bowerman, Miss. Elsie Edith",female,22,0,1,113505,55,E33,S +358,0,2,"Funk, Miss. Annie Clemmer",female,38,0,0,237671,13,,S +359,1,3,"McGovern, Miss. Mary",female,,0,0,330931,7.8792,,Q +360,1,3,"Mockler, Miss. Helen Mary ""Ellie""",female,,0,0,330980,7.8792,,Q +361,0,3,"Skoog, Mr. Wilhelm",male,40,1,4,347088,27.9,,S +362,0,2,"del Carlo, Mr. Sebastiano",male,29,1,0,SC/PARIS 2167,27.7208,,C +363,0,3,"Barbara, Mrs. (Catherine David)",female,45,0,1,2691,14.4542,,C +364,0,3,"Asim, Mr. Adola",male,35,0,0,SOTON/O.Q. 3101310,7.05,,S +365,0,3,"O'Brien, Mr. Thomas",male,,1,0,370365,15.5,,Q +366,0,3,"Adahl, Mr. Mauritz Nils Martin",male,30,0,0,C 7076,7.25,,S +367,1,1,"Warren, Mrs. Frank Manley (Anna Sophia Atkinson)",female,60,1,0,110813,75.25,D37,C +368,1,3,"Moussa, Mrs. (Mantoura Boulos)",female,,0,0,2626,7.2292,,C +369,1,3,"Jermyn, Miss. Annie",female,,0,0,14313,7.75,,Q +370,1,1,"Aubart, Mme. Leontine Pauline",female,24,0,0,PC 17477,69.3,B35,C +371,1,1,"Harder, Mr. George Achilles",male,25,1,0,11765,55.4417,E50,C +372,0,3,"Wiklund, Mr. Jakob Alfred",male,18,1,0,3101267,6.4958,,S +373,0,3,"Beavan, Mr. William Thomas",male,19,0,0,323951,8.05,,S +374,0,1,"Ringhini, Mr. Sante",male,22,0,0,PC 17760,135.6333,,C +375,0,3,"Palsson, Miss. Stina Viola",female,3,3,1,349909,21.075,,S +376,1,1,"Meyer, Mrs. Edgar Joseph (Leila Saks)",female,,1,0,PC 17604,82.1708,,C +377,1,3,"Landergren, Miss. Aurora Adelia",female,22,0,0,C 7077,7.25,,S +378,0,1,"Widener, Mr. Harry Elkins",male,27,0,2,113503,211.5,C82,C +379,0,3,"Betros, Mr. Tannous",male,20,0,0,2648,4.0125,,C +380,0,3,"Gustafsson, Mr. Karl Gideon",male,19,0,0,347069,7.775,,S +381,1,1,"Bidois, Miss. Rosalie",female,42,0,0,PC 17757,227.525,,C +382,1,3,"Nakid, Miss. Maria (""Mary"")",female,1,0,2,2653,15.7417,,C +383,0,3,"Tikkanen, Mr. Juho",male,32,0,0,STON/O 2. 3101293,7.925,,S +384,1,1,"Holverson, Mrs. Alexander Oskar (Mary Aline Towner)",female,35,1,0,113789,52,,S +385,0,3,"Plotcharsky, Mr. Vasil",male,,0,0,349227,7.8958,,S +386,0,2,"Davies, Mr. Charles Henry",male,18,0,0,S.O.C. 14879,73.5,,S +387,0,3,"Goodwin, Master. Sidney Leonard",male,1,5,2,CA 2144,46.9,,S +388,1,2,"Buss, Miss. Kate",female,36,0,0,27849,13,,S +389,0,3,"Sadlier, Mr. Matthew",male,,0,0,367655,7.7292,,Q +390,1,2,"Lehmann, Miss. Bertha",female,17,0,0,SC 1748,12,,C +391,1,1,"Carter, Mr. William Ernest",male,36,1,2,113760,120,B96 B98,S +392,1,3,"Jansson, Mr. Carl Olof",male,21,0,0,350034,7.7958,,S +393,0,3,"Gustafsson, Mr. Johan Birger",male,28,2,0,3101277,7.925,,S +394,1,1,"Newell, Miss. Marjorie",female,23,1,0,35273,113.275,D36,C +395,1,3,"Sandstrom, Mrs. Hjalmar (Agnes Charlotta Bengtsson)",female,24,0,2,PP 9549,16.7,G6,S +396,0,3,"Johansson, Mr. Erik",male,22,0,0,350052,7.7958,,S +397,0,3,"Olsson, Miss. Elina",female,31,0,0,350407,7.8542,,S +398,0,2,"McKane, Mr. Peter David",male,46,0,0,28403,26,,S +399,0,2,"Pain, Dr. Alfred",male,23,0,0,244278,10.5,,S +400,1,2,"Trout, Mrs. William H (Jessie L)",female,28,0,0,240929,12.65,,S +401,1,3,"Niskanen, Mr. Juha",male,39,0,0,STON/O 2. 3101289,7.925,,S +402,0,3,"Adams, Mr. John",male,26,0,0,341826,8.05,,S +403,0,3,"Jussila, Miss. Mari Aina",female,21,1,0,4137,9.825,,S +404,0,3,"Hakkarainen, Mr. Pekka Pietari",male,28,1,0,STON/O2. 3101279,15.85,,S +405,0,3,"Oreskovic, Miss. Marija",female,20,0,0,315096,8.6625,,S +406,0,2,"Gale, Mr. Shadrach",male,34,1,0,28664,21,,S +407,0,3,"Widegren, Mr. Carl/Charles Peter",male,51,0,0,347064,7.75,,S +408,1,2,"Richards, Master. William Rowe",male,3,1,1,29106,18.75,,S +409,0,3,"Birkeland, Mr. Hans Martin Monsen",male,21,0,0,312992,7.775,,S +410,0,3,"Lefebre, Miss. Ida",female,,3,1,4133,25.4667,,S +411,0,3,"Sdycoff, Mr. Todor",male,,0,0,349222,7.8958,,S +412,0,3,"Hart, Mr. Henry",male,,0,0,394140,6.8583,,Q +413,1,1,"Minahan, Miss. Daisy E",female,33,1,0,19928,90,C78,Q +414,0,2,"Cunningham, Mr. Alfred Fleming",male,,0,0,239853,0,,S +415,1,3,"Sundman, Mr. Johan Julian",male,44,0,0,STON/O 2. 3101269,7.925,,S +416,0,3,"Meek, Mrs. Thomas (Annie Louise Rowley)",female,,0,0,343095,8.05,,S +417,1,2,"Drew, Mrs. James Vivian (Lulu Thorne Christian)",female,34,1,1,28220,32.5,,S +418,1,2,"Silven, Miss. Lyyli Karoliina",female,18,0,2,250652,13,,S +419,0,2,"Matthews, Mr. William John",male,30,0,0,28228,13,,S +420,0,3,"Van Impe, Miss. Catharina",female,10,0,2,345773,24.15,,S +421,0,3,"Gheorgheff, Mr. Stanio",male,,0,0,349254,7.8958,,C +422,0,3,"Charters, Mr. David",male,21,0,0,A/5. 13032,7.7333,,Q +423,0,3,"Zimmerman, Mr. Leo",male,29,0,0,315082,7.875,,S +424,0,3,"Danbom, Mrs. Ernst Gilbert (Anna Sigrid Maria Brogren)",female,28,1,1,347080,14.4,,S +425,0,3,"Rosblom, Mr. Viktor Richard",male,18,1,1,370129,20.2125,,S +426,0,3,"Wiseman, Mr. Phillippe",male,,0,0,A/4. 34244,7.25,,S +427,1,2,"Clarke, Mrs. Charles V (Ada Maria Winfield)",female,28,1,0,2003,26,,S +428,1,2,"Phillips, Miss. Kate Florence (""Mrs Kate Louise Phillips Marshall"")",female,19,0,0,250655,26,,S +429,0,3,"Flynn, Mr. James",male,,0,0,364851,7.75,,Q +430,1,3,"Pickard, Mr. Berk (Berk Trembisky)",male,32,0,0,SOTON/O.Q. 392078,8.05,E10,S +431,1,1,"Bjornstrom-Steffansson, Mr. Mauritz Hakan",male,28,0,0,110564,26.55,C52,S +432,1,3,"Thorneycroft, Mrs. Percival (Florence Kate White)",female,,1,0,376564,16.1,,S +433,1,2,"Louch, Mrs. Charles Alexander (Alice Adelaide Slow)",female,42,1,0,SC/AH 3085,26,,S +434,0,3,"Kallio, Mr. Nikolai Erland",male,17,0,0,STON/O 2. 3101274,7.125,,S +435,0,1,"Silvey, Mr. William Baird",male,50,1,0,13507,55.9,E44,S +436,1,1,"Carter, Miss. Lucile Polk",female,14,1,2,113760,120,B96 B98,S +437,0,3,"Ford, Miss. Doolina Margaret ""Daisy""",female,21,2,2,W./C. 6608,34.375,,S +438,1,2,"Richards, Mrs. Sidney (Emily Hocking)",female,24,2,3,29106,18.75,,S +439,0,1,"Fortune, Mr. Mark",male,64,1,4,19950,263,C23 C25 C27,S +440,0,2,"Kvillner, Mr. Johan Henrik Johannesson",male,31,0,0,C.A. 18723,10.5,,S +441,1,2,"Hart, Mrs. Benjamin (Esther Ada Bloomfield)",female,45,1,1,F.C.C. 13529,26.25,,S +442,0,3,"Hampe, Mr. Leon",male,20,0,0,345769,9.5,,S +443,0,3,"Petterson, Mr. Johan Emil",male,25,1,0,347076,7.775,,S +444,1,2,"Reynaldo, Ms. Encarnacion",female,28,0,0,230434,13,,S +445,1,3,"Johannesen-Bratthammer, Mr. Bernt",male,,0,0,65306,8.1125,,S +446,1,1,"Dodge, Master. Washington",male,4,0,2,33638,81.8583,A34,S +447,1,2,"Mellinger, Miss. Madeleine Violet",female,13,0,1,250644,19.5,,S +448,1,1,"Seward, Mr. Frederic Kimber",male,34,0,0,113794,26.55,,S +449,1,3,"Baclini, Miss. Marie Catherine",female,5,2,1,2666,19.2583,,C +450,1,1,"Peuchen, Major. Arthur Godfrey",male,52,0,0,113786,30.5,C104,S +451,0,2,"West, Mr. Edwy Arthur",male,36,1,2,C.A. 34651,27.75,,S +452,0,3,"Hagland, Mr. Ingvald Olai Olsen",male,,1,0,65303,19.9667,,S +453,0,1,"Foreman, Mr. Benjamin Laventall",male,30,0,0,113051,27.75,C111,C +454,1,1,"Goldenberg, Mr. Samuel L",male,49,1,0,17453,89.1042,C92,C +455,0,3,"Peduzzi, Mr. Joseph",male,,0,0,A/5 2817,8.05,,S +456,1,3,"Jalsevac, Mr. Ivan",male,29,0,0,349240,7.8958,,C +457,0,1,"Millet, Mr. Francis Davis",male,65,0,0,13509,26.55,E38,S +458,1,1,"Kenyon, Mrs. Frederick R (Marion)",female,,1,0,17464,51.8625,D21,S +459,1,2,"Toomey, Miss. Ellen",female,50,0,0,F.C.C. 13531,10.5,,S +460,0,3,"O'Connor, Mr. Maurice",male,,0,0,371060,7.75,,Q +461,1,1,"Anderson, Mr. Harry",male,48,0,0,19952,26.55,E12,S +462,0,3,"Morley, Mr. William",male,34,0,0,364506,8.05,,S +463,0,1,"Gee, Mr. Arthur H",male,47,0,0,111320,38.5,E63,S +464,0,2,"Milling, Mr. Jacob Christian",male,48,0,0,234360,13,,S +465,0,3,"Maisner, Mr. Simon",male,,0,0,A/S 2816,8.05,,S +466,0,3,"Goncalves, Mr. Manuel Estanslas",male,38,0,0,SOTON/O.Q. 3101306,7.05,,S +467,0,2,"Campbell, Mr. William",male,,0,0,239853,0,,S +468,0,1,"Smart, Mr. John Montgomery",male,56,0,0,113792,26.55,,S +469,0,3,"Scanlan, Mr. James",male,,0,0,36209,7.725,,Q +470,1,3,"Baclini, Miss. Helene Barbara",female,0.75,2,1,2666,19.2583,,C +471,0,3,"Keefe, Mr. Arthur",male,,0,0,323592,7.25,,S +472,0,3,"Cacic, Mr. Luka",male,38,0,0,315089,8.6625,,S +473,1,2,"West, Mrs. Edwy Arthur (Ada Mary Worth)",female,33,1,2,C.A. 34651,27.75,,S +474,1,2,"Jerwan, Mrs. Amin S (Marie Marthe Thuillard)",female,23,0,0,SC/AH Basle 541,13.7917,D,C +475,0,3,"Strandberg, Miss. Ida Sofia",female,22,0,0,7553,9.8375,,S +476,0,1,"Clifford, Mr. George Quincy",male,,0,0,110465,52,A14,S +477,0,2,"Renouf, Mr. Peter Henry",male,34,1,0,31027,21,,S +478,0,3,"Braund, Mr. Lewis Richard",male,29,1,0,3460,7.0458,,S +479,0,3,"Karlsson, Mr. Nils August",male,22,0,0,350060,7.5208,,S +480,1,3,"Hirvonen, Miss. Hildur E",female,2,0,1,3101298,12.2875,,S +481,0,3,"Goodwin, Master. Harold Victor",male,9,5,2,CA 2144,46.9,,S +482,0,2,"Frost, Mr. Anthony Wood ""Archie""",male,,0,0,239854,0,,S +483,0,3,"Rouse, Mr. Richard Henry",male,50,0,0,A/5 3594,8.05,,S +484,1,3,"Turkula, Mrs. (Hedwig)",female,63,0,0,4134,9.5875,,S +485,1,1,"Bishop, Mr. Dickinson H",male,25,1,0,11967,91.0792,B49,C +486,0,3,"Lefebre, Miss. Jeannie",female,,3,1,4133,25.4667,,S +487,1,1,"Hoyt, Mrs. Frederick Maxfield (Jane Anne Forby)",female,35,1,0,19943,90,C93,S +488,0,1,"Kent, Mr. Edward Austin",male,58,0,0,11771,29.7,B37,C +489,0,3,"Somerton, Mr. Francis William",male,30,0,0,A.5. 18509,8.05,,S +490,1,3,"Coutts, Master. Eden Leslie ""Neville""",male,9,1,1,C.A. 37671,15.9,,S +491,0,3,"Hagland, Mr. Konrad Mathias Reiersen",male,,1,0,65304,19.9667,,S +492,0,3,"Windelov, Mr. Einar",male,21,0,0,SOTON/OQ 3101317,7.25,,S +493,0,1,"Molson, Mr. Harry Markland",male,55,0,0,113787,30.5,C30,S +494,0,1,"Artagaveytia, Mr. Ramon",male,71,0,0,PC 17609,49.5042,,C +495,0,3,"Stanley, Mr. Edward Roland",male,21,0,0,A/4 45380,8.05,,S +496,0,3,"Yousseff, Mr. Gerious",male,,0,0,2627,14.4583,,C +497,1,1,"Eustis, Miss. Elizabeth Mussey",female,54,1,0,36947,78.2667,D20,C +498,0,3,"Shellard, Mr. Frederick William",male,,0,0,C.A. 6212,15.1,,S +499,0,1,"Allison, Mrs. Hudson J C (Bessie Waldo Daniels)",female,25,1,2,113781,151.55,C22 C26,S +500,0,3,"Svensson, Mr. Olof",male,24,0,0,350035,7.7958,,S +501,0,3,"Calic, Mr. Petar",male,17,0,0,315086,8.6625,,S +502,0,3,"Canavan, Miss. Mary",female,21,0,0,364846,7.75,,Q +503,0,3,"O'Sullivan, Miss. Bridget Mary",female,,0,0,330909,7.6292,,Q +504,0,3,"Laitinen, Miss. Kristina Sofia",female,37,0,0,4135,9.5875,,S +505,1,1,"Maioni, Miss. Roberta",female,16,0,0,110152,86.5,B79,S +506,0,1,"Penasco y Castellana, Mr. Victor de Satode",male,18,1,0,PC 17758,108.9,C65,C +507,1,2,"Quick, Mrs. Frederick Charles (Jane Richards)",female,33,0,2,26360,26,,S +508,1,1,"Bradley, Mr. George (""George Arthur Brayton"")",male,,0,0,111427,26.55,,S +509,0,3,"Olsen, Mr. Henry Margido",male,28,0,0,C 4001,22.525,,S +510,1,3,"Lang, Mr. Fang",male,26,0,0,1601,56.4958,,S +511,1,3,"Daly, Mr. Eugene Patrick",male,29,0,0,382651,7.75,,Q +512,0,3,"Webber, Mr. James",male,,0,0,SOTON/OQ 3101316,8.05,,S +513,1,1,"McGough, Mr. James Robert",male,36,0,0,PC 17473,26.2875,E25,S +514,1,1,"Rothschild, Mrs. Martin (Elizabeth L. Barrett)",female,54,1,0,PC 17603,59.4,,C +515,0,3,"Coleff, Mr. Satio",male,24,0,0,349209,7.4958,,S +516,0,1,"Walker, Mr. William Anderson",male,47,0,0,36967,34.0208,D46,S +517,1,2,"Lemore, Mrs. (Amelia Milley)",female,34,0,0,C.A. 34260,10.5,F33,S +518,0,3,"Ryan, Mr. Patrick",male,,0,0,371110,24.15,,Q +519,1,2,"Angle, Mrs. William A (Florence ""Mary"" Agnes Hughes)",female,36,1,0,226875,26,,S +520,0,3,"Pavlovic, Mr. Stefo",male,32,0,0,349242,7.8958,,S +521,1,1,"Perreault, Miss. Anne",female,30,0,0,12749,93.5,B73,S +522,0,3,"Vovk, Mr. Janko",male,22,0,0,349252,7.8958,,S +523,0,3,"Lahoud, Mr. Sarkis",male,,0,0,2624,7.225,,C +524,1,1,"Hippach, Mrs. Louis Albert (Ida Sophia Fischer)",female,44,0,1,111361,57.9792,B18,C +525,0,3,"Kassem, Mr. Fared",male,,0,0,2700,7.2292,,C +526,0,3,"Farrell, Mr. James",male,40.5,0,0,367232,7.75,,Q +527,1,2,"Ridsdale, Miss. Lucy",female,50,0,0,W./C. 14258,10.5,,S +528,0,1,"Farthing, Mr. John",male,,0,0,PC 17483,221.7792,C95,S +529,0,3,"Salonen, Mr. Johan Werner",male,39,0,0,3101296,7.925,,S +530,0,2,"Hocking, Mr. Richard George",male,23,2,1,29104,11.5,,S +531,1,2,"Quick, Miss. Phyllis May",female,2,1,1,26360,26,,S +532,0,3,"Toufik, Mr. Nakli",male,,0,0,2641,7.2292,,C +533,0,3,"Elias, Mr. Joseph Jr",male,17,1,1,2690,7.2292,,C +534,1,3,"Peter, Mrs. Catherine (Catherine Rizk)",female,,0,2,2668,22.3583,,C +535,0,3,"Cacic, Miss. Marija",female,30,0,0,315084,8.6625,,S +536,1,2,"Hart, Miss. Eva Miriam",female,7,0,2,F.C.C. 13529,26.25,,S +537,0,1,"Butt, Major. Archibald Willingham",male,45,0,0,113050,26.55,B38,S +538,1,1,"LeRoy, Miss. Bertha",female,30,0,0,PC 17761,106.425,,C +539,0,3,"Risien, Mr. Samuel Beard",male,,0,0,364498,14.5,,S +540,1,1,"Frolicher, Miss. Hedwig Margaritha",female,22,0,2,13568,49.5,B39,C +541,1,1,"Crosby, Miss. Harriet R",female,36,0,2,WE/P 5735,71,B22,S +542,0,3,"Andersson, Miss. Ingeborg Constanzia",female,9,4,2,347082,31.275,,S +543,0,3,"Andersson, Miss. Sigrid Elisabeth",female,11,4,2,347082,31.275,,S +544,1,2,"Beane, Mr. Edward",male,32,1,0,2908,26,,S +545,0,1,"Douglas, Mr. Walter Donald",male,50,1,0,PC 17761,106.425,C86,C +546,0,1,"Nicholson, Mr. Arthur Ernest",male,64,0,0,693,26,,S +547,1,2,"Beane, Mrs. Edward (Ethel Clarke)",female,19,1,0,2908,26,,S +548,1,2,"Padro y Manent, Mr. Julian",male,,0,0,SC/PARIS 2146,13.8625,,C +549,0,3,"Goldsmith, Mr. Frank John",male,33,1,1,363291,20.525,,S +550,1,2,"Davies, Master. John Morgan Jr",male,8,1,1,C.A. 33112,36.75,,S +551,1,1,"Thayer, Mr. John Borland Jr",male,17,0,2,17421,110.8833,C70,C +552,0,2,"Sharp, Mr. Percival James R",male,27,0,0,244358,26,,S +553,0,3,"O'Brien, Mr. Timothy",male,,0,0,330979,7.8292,,Q +554,1,3,"Leeni, Mr. Fahim (""Philip Zenni"")",male,22,0,0,2620,7.225,,C +555,1,3,"Ohman, Miss. Velin",female,22,0,0,347085,7.775,,S +556,0,1,"Wright, Mr. George",male,62,0,0,113807,26.55,,S +557,1,1,"Duff Gordon, Lady. (Lucille Christiana Sutherland) (""Mrs Morgan"")",female,48,1,0,11755,39.6,A16,C +558,0,1,"Robbins, Mr. Victor",male,,0,0,PC 17757,227.525,,C +559,1,1,"Taussig, Mrs. Emil (Tillie Mandelbaum)",female,39,1,1,110413,79.65,E67,S +560,1,3,"de Messemaeker, Mrs. Guillaume Joseph (Emma)",female,36,1,0,345572,17.4,,S +561,0,3,"Morrow, Mr. Thomas Rowan",male,,0,0,372622,7.75,,Q +562,0,3,"Sivic, Mr. Husein",male,40,0,0,349251,7.8958,,S +563,0,2,"Norman, Mr. Robert Douglas",male,28,0,0,218629,13.5,,S +564,0,3,"Simmons, Mr. John",male,,0,0,SOTON/OQ 392082,8.05,,S +565,0,3,"Meanwell, Miss. (Marion Ogden)",female,,0,0,SOTON/O.Q. 392087,8.05,,S +566,0,3,"Davies, Mr. Alfred J",male,24,2,0,A/4 48871,24.15,,S +567,0,3,"Stoytcheff, Mr. Ilia",male,19,0,0,349205,7.8958,,S +568,0,3,"Palsson, Mrs. Nils (Alma Cornelia Berglund)",female,29,0,4,349909,21.075,,S +569,0,3,"Doharr, Mr. Tannous",male,,0,0,2686,7.2292,,C +570,1,3,"Jonsson, Mr. Carl",male,32,0,0,350417,7.8542,,S +571,1,2,"Harris, Mr. George",male,62,0,0,S.W./PP 752,10.5,,S +572,1,1,"Appleton, Mrs. Edward Dale (Charlotte Lamson)",female,53,2,0,11769,51.4792,C101,S +573,1,1,"Flynn, Mr. John Irwin (""Irving"")",male,36,0,0,PC 17474,26.3875,E25,S +574,1,3,"Kelly, Miss. Mary",female,,0,0,14312,7.75,,Q +575,0,3,"Rush, Mr. Alfred George John",male,16,0,0,A/4. 20589,8.05,,S +576,0,3,"Patchett, Mr. George",male,19,0,0,358585,14.5,,S +577,1,2,"Garside, Miss. Ethel",female,34,0,0,243880,13,,S +578,1,1,"Silvey, Mrs. William Baird (Alice Munger)",female,39,1,0,13507,55.9,E44,S +579,0,3,"Caram, Mrs. Joseph (Maria Elias)",female,,1,0,2689,14.4583,,C +580,1,3,"Jussila, Mr. Eiriik",male,32,0,0,STON/O 2. 3101286,7.925,,S +581,1,2,"Christy, Miss. Julie Rachel",female,25,1,1,237789,30,,S +582,1,1,"Thayer, Mrs. John Borland (Marian Longstreth Morris)",female,39,1,1,17421,110.8833,C68,C +583,0,2,"Downton, Mr. William James",male,54,0,0,28403,26,,S +584,0,1,"Ross, Mr. John Hugo",male,36,0,0,13049,40.125,A10,C +585,0,3,"Paulner, Mr. Uscher",male,,0,0,3411,8.7125,,C +586,1,1,"Taussig, Miss. Ruth",female,18,0,2,110413,79.65,E68,S +587,0,2,"Jarvis, Mr. John Denzil",male,47,0,0,237565,15,,S +588,1,1,"Frolicher-Stehli, Mr. Maxmillian",male,60,1,1,13567,79.2,B41,C +589,0,3,"Gilinski, Mr. Eliezer",male,22,0,0,14973,8.05,,S +590,0,3,"Murdlin, Mr. Joseph",male,,0,0,A./5. 3235,8.05,,S +591,0,3,"Rintamaki, Mr. Matti",male,35,0,0,STON/O 2. 3101273,7.125,,S +592,1,1,"Stephenson, Mrs. Walter Bertram (Martha Eustis)",female,52,1,0,36947,78.2667,D20,C +593,0,3,"Elsbury, Mr. William James",male,47,0,0,A/5 3902,7.25,,S +594,0,3,"Bourke, Miss. Mary",female,,0,2,364848,7.75,,Q +595,0,2,"Chapman, Mr. John Henry",male,37,1,0,SC/AH 29037,26,,S +596,0,3,"Van Impe, Mr. Jean Baptiste",male,36,1,1,345773,24.15,,S +597,1,2,"Leitch, Miss. Jessie Wills",female,,0,0,248727,33,,S +598,0,3,"Johnson, Mr. Alfred",male,49,0,0,LINE,0,,S +599,0,3,"Boulos, Mr. Hanna",male,,0,0,2664,7.225,,C +600,1,1,"Duff Gordon, Sir. Cosmo Edmund (""Mr Morgan"")",male,49,1,0,PC 17485,56.9292,A20,C +601,1,2,"Jacobsohn, Mrs. Sidney Samuel (Amy Frances Christy)",female,24,2,1,243847,27,,S +602,0,3,"Slabenoff, Mr. Petco",male,,0,0,349214,7.8958,,S +603,0,1,"Harrington, Mr. Charles H",male,,0,0,113796,42.4,,S +604,0,3,"Torber, Mr. Ernst William",male,44,0,0,364511,8.05,,S +605,1,1,"Homer, Mr. Harry (""Mr E Haven"")",male,35,0,0,111426,26.55,,C +606,0,3,"Lindell, Mr. Edvard Bengtsson",male,36,1,0,349910,15.55,,S +607,0,3,"Karaic, Mr. Milan",male,30,0,0,349246,7.8958,,S +608,1,1,"Daniel, Mr. Robert Williams",male,27,0,0,113804,30.5,,S +609,1,2,"Laroche, Mrs. Joseph (Juliette Marie Louise Lafargue)",female,22,1,2,SC/Paris 2123,41.5792,,C +610,1,1,"Shutes, Miss. Elizabeth W",female,40,0,0,PC 17582,153.4625,C125,S +611,0,3,"Andersson, Mrs. Anders Johan (Alfrida Konstantia Brogren)",female,39,1,5,347082,31.275,,S +612,0,3,"Jardin, Mr. Jose Neto",male,,0,0,SOTON/O.Q. 3101305,7.05,,S +613,1,3,"Murphy, Miss. Margaret Jane",female,,1,0,367230,15.5,,Q +614,0,3,"Horgan, Mr. John",male,,0,0,370377,7.75,,Q +615,0,3,"Brocklebank, Mr. William Alfred",male,35,0,0,364512,8.05,,S +616,1,2,"Herman, Miss. Alice",female,24,1,2,220845,65,,S +617,0,3,"Danbom, Mr. Ernst Gilbert",male,34,1,1,347080,14.4,,S +618,0,3,"Lobb, Mrs. William Arthur (Cordelia K Stanlick)",female,26,1,0,A/5. 3336,16.1,,S +619,1,2,"Becker, Miss. Marion Louise",female,4,2,1,230136,39,F4,S +620,0,2,"Gavey, Mr. Lawrence",male,26,0,0,31028,10.5,,S +621,0,3,"Yasbeck, Mr. Antoni",male,27,1,0,2659,14.4542,,C +622,1,1,"Kimball, Mr. Edwin Nelson Jr",male,42,1,0,11753,52.5542,D19,S +623,1,3,"Nakid, Mr. Sahid",male,20,1,1,2653,15.7417,,C +624,0,3,"Hansen, Mr. Henry Damsgaard",male,21,0,0,350029,7.8542,,S +625,0,3,"Bowen, Mr. David John ""Dai""",male,21,0,0,54636,16.1,,S +626,0,1,"Sutton, Mr. Frederick",male,61,0,0,36963,32.3208,D50,S +627,0,2,"Kirkland, Rev. Charles Leonard",male,57,0,0,219533,12.35,,Q +628,1,1,"Longley, Miss. Gretchen Fiske",female,21,0,0,13502,77.9583,D9,S +629,0,3,"Bostandyeff, Mr. Guentcho",male,26,0,0,349224,7.8958,,S +630,0,3,"O'Connell, Mr. Patrick D",male,,0,0,334912,7.7333,,Q +631,1,1,"Barkworth, Mr. Algernon Henry Wilson",male,80,0,0,27042,30,A23,S +632,0,3,"Lundahl, Mr. Johan Svensson",male,51,0,0,347743,7.0542,,S +633,1,1,"Stahelin-Maeglin, Dr. Max",male,32,0,0,13214,30.5,B50,C +634,0,1,"Parr, Mr. William Henry Marsh",male,,0,0,112052,0,,S +635,0,3,"Skoog, Miss. Mabel",female,9,3,2,347088,27.9,,S +636,1,2,"Davis, Miss. Mary",female,28,0,0,237668,13,,S +637,0,3,"Leinonen, Mr. Antti Gustaf",male,32,0,0,STON/O 2. 3101292,7.925,,S +638,0,2,"Collyer, Mr. Harvey",male,31,1,1,C.A. 31921,26.25,,S +639,0,3,"Panula, Mrs. Juha (Maria Emilia Ojala)",female,41,0,5,3101295,39.6875,,S +640,0,3,"Thorneycroft, Mr. Percival",male,,1,0,376564,16.1,,S +641,0,3,"Jensen, Mr. Hans Peder",male,20,0,0,350050,7.8542,,S +642,1,1,"Sagesser, Mlle. Emma",female,24,0,0,PC 17477,69.3,B35,C +643,0,3,"Skoog, Miss. Margit Elizabeth",female,2,3,2,347088,27.9,,S +644,1,3,"Foo, Mr. Choong",male,,0,0,1601,56.4958,,S +645,1,3,"Baclini, Miss. Eugenie",female,0.75,2,1,2666,19.2583,,C +646,1,1,"Harper, Mr. Henry Sleeper",male,48,1,0,PC 17572,76.7292,D33,C +647,0,3,"Cor, Mr. Liudevit",male,19,0,0,349231,7.8958,,S +648,1,1,"Simonius-Blumer, Col. Oberst Alfons",male,56,0,0,13213,35.5,A26,C +649,0,3,"Willey, Mr. Edward",male,,0,0,S.O./P.P. 751,7.55,,S +650,1,3,"Stanley, Miss. Amy Zillah Elsie",female,23,0,0,CA. 2314,7.55,,S +651,0,3,"Mitkoff, Mr. Mito",male,,0,0,349221,7.8958,,S +652,1,2,"Doling, Miss. Elsie",female,18,0,1,231919,23,,S +653,0,3,"Kalvik, Mr. Johannes Halvorsen",male,21,0,0,8475,8.4333,,S +654,1,3,"O'Leary, Miss. Hanora ""Norah""",female,,0,0,330919,7.8292,,Q +655,0,3,"Hegarty, Miss. Hanora ""Nora""",female,18,0,0,365226,6.75,,Q +656,0,2,"Hickman, Mr. Leonard Mark",male,24,2,0,S.O.C. 14879,73.5,,S +657,0,3,"Radeff, Mr. Alexander",male,,0,0,349223,7.8958,,S +658,0,3,"Bourke, Mrs. John (Catherine)",female,32,1,1,364849,15.5,,Q +659,0,2,"Eitemiller, Mr. George Floyd",male,23,0,0,29751,13,,S +660,0,1,"Newell, Mr. Arthur Webster",male,58,0,2,35273,113.275,D48,C +661,1,1,"Frauenthal, Dr. Henry William",male,50,2,0,PC 17611,133.65,,S +662,0,3,"Badt, Mr. Mohamed",male,40,0,0,2623,7.225,,C +663,0,1,"Colley, Mr. Edward Pomeroy",male,47,0,0,5727,25.5875,E58,S +664,0,3,"Coleff, Mr. Peju",male,36,0,0,349210,7.4958,,S +665,1,3,"Lindqvist, Mr. Eino William",male,20,1,0,STON/O 2. 3101285,7.925,,S +666,0,2,"Hickman, Mr. Lewis",male,32,2,0,S.O.C. 14879,73.5,,S +667,0,2,"Butler, Mr. Reginald Fenton",male,25,0,0,234686,13,,S +668,0,3,"Rommetvedt, Mr. Knud Paust",male,,0,0,312993,7.775,,S +669,0,3,"Cook, Mr. Jacob",male,43,0,0,A/5 3536,8.05,,S +670,1,1,"Taylor, Mrs. Elmer Zebley (Juliet Cummins Wright)",female,,1,0,19996,52,C126,S +671,1,2,"Brown, Mrs. Thomas William Solomon (Elizabeth Catherine Ford)",female,40,1,1,29750,39,,S +672,0,1,"Davidson, Mr. Thornton",male,31,1,0,F.C. 12750,52,B71,S +673,0,2,"Mitchell, Mr. Henry Michael",male,70,0,0,C.A. 24580,10.5,,S +674,1,2,"Wilhelms, Mr. Charles",male,31,0,0,244270,13,,S +675,0,2,"Watson, Mr. Ennis Hastings",male,,0,0,239856,0,,S +676,0,3,"Edvardsson, Mr. Gustaf Hjalmar",male,18,0,0,349912,7.775,,S +677,0,3,"Sawyer, Mr. Frederick Charles",male,24.5,0,0,342826,8.05,,S +678,1,3,"Turja, Miss. Anna Sofia",female,18,0,0,4138,9.8417,,S +679,0,3,"Goodwin, Mrs. Frederick (Augusta Tyler)",female,43,1,6,CA 2144,46.9,,S +680,1,1,"Cardeza, Mr. Thomas Drake Martinez",male,36,0,1,PC 17755,512.3292,B51 B53 B55,C +681,0,3,"Peters, Miss. Katie",female,,0,0,330935,8.1375,,Q +682,1,1,"Hassab, Mr. Hammad",male,27,0,0,PC 17572,76.7292,D49,C +683,0,3,"Olsvigen, Mr. Thor Anderson",male,20,0,0,6563,9.225,,S +684,0,3,"Goodwin, Mr. Charles Edward",male,14,5,2,CA 2144,46.9,,S +685,0,2,"Brown, Mr. Thomas William Solomon",male,60,1,1,29750,39,,S +686,0,2,"Laroche, Mr. Joseph Philippe Lemercier",male,25,1,2,SC/Paris 2123,41.5792,,C +687,0,3,"Panula, Mr. Jaako Arnold",male,14,4,1,3101295,39.6875,,S +688,0,3,"Dakic, Mr. Branko",male,19,0,0,349228,10.1708,,S +689,0,3,"Fischer, Mr. Eberhard Thelander",male,18,0,0,350036,7.7958,,S +690,1,1,"Madill, Miss. Georgette Alexandra",female,15,0,1,24160,211.3375,B5,S +691,1,1,"Dick, Mr. Albert Adrian",male,31,1,0,17474,57,B20,S +692,1,3,"Karun, Miss. Manca",female,4,0,1,349256,13.4167,,C +693,1,3,"Lam, Mr. Ali",male,,0,0,1601,56.4958,,S +694,0,3,"Saad, Mr. Khalil",male,25,0,0,2672,7.225,,C +695,0,1,"Weir, Col. John",male,60,0,0,113800,26.55,,S +696,0,2,"Chapman, Mr. Charles Henry",male,52,0,0,248731,13.5,,S +697,0,3,"Kelly, Mr. James",male,44,0,0,363592,8.05,,S +698,1,3,"Mullens, Miss. Katherine ""Katie""",female,,0,0,35852,7.7333,,Q +699,0,1,"Thayer, Mr. John Borland",male,49,1,1,17421,110.8833,C68,C +700,0,3,"Humblen, Mr. Adolf Mathias Nicolai Olsen",male,42,0,0,348121,7.65,F G63,S +701,1,1,"Astor, Mrs. John Jacob (Madeleine Talmadge Force)",female,18,1,0,PC 17757,227.525,C62 C64,C +702,1,1,"Silverthorne, Mr. Spencer Victor",male,35,0,0,PC 17475,26.2875,E24,S +703,0,3,"Barbara, Miss. Saiide",female,18,0,1,2691,14.4542,,C +704,0,3,"Gallagher, Mr. Martin",male,25,0,0,36864,7.7417,,Q +705,0,3,"Hansen, Mr. Henrik Juul",male,26,1,0,350025,7.8542,,S +706,0,2,"Morley, Mr. Henry Samuel (""Mr Henry Marshall"")",male,39,0,0,250655,26,,S +707,1,2,"Kelly, Mrs. Florence ""Fannie""",female,45,0,0,223596,13.5,,S +708,1,1,"Calderhead, Mr. Edward Pennington",male,42,0,0,PC 17476,26.2875,E24,S +709,1,1,"Cleaver, Miss. Alice",female,22,0,0,113781,151.55,,S +710,1,3,"Moubarek, Master. Halim Gonios (""William George"")",male,,1,1,2661,15.2458,,C +711,1,1,"Mayne, Mlle. Berthe Antonine (""Mrs de Villiers"")",female,24,0,0,PC 17482,49.5042,C90,C +712,0,1,"Klaber, Mr. Herman",male,,0,0,113028,26.55,C124,S +713,1,1,"Taylor, Mr. Elmer Zebley",male,48,1,0,19996,52,C126,S +714,0,3,"Larsson, Mr. August Viktor",male,29,0,0,7545,9.4833,,S +715,0,2,"Greenberg, Mr. Samuel",male,52,0,0,250647,13,,S +716,0,3,"Soholt, Mr. Peter Andreas Lauritz Andersen",male,19,0,0,348124,7.65,F G73,S +717,1,1,"Endres, Miss. Caroline Louise",female,38,0,0,PC 17757,227.525,C45,C +718,1,2,"Troutt, Miss. Edwina Celia ""Winnie""",female,27,0,0,34218,10.5,E101,S +719,0,3,"McEvoy, Mr. Michael",male,,0,0,36568,15.5,,Q +720,0,3,"Johnson, Mr. Malkolm Joackim",male,33,0,0,347062,7.775,,S +721,1,2,"Harper, Miss. Annie Jessie ""Nina""",female,6,0,1,248727,33,,S +722,0,3,"Jensen, Mr. Svend Lauritz",male,17,1,0,350048,7.0542,,S +723,0,2,"Gillespie, Mr. William Henry",male,34,0,0,12233,13,,S +724,0,2,"Hodges, Mr. Henry Price",male,50,0,0,250643,13,,S +725,1,1,"Chambers, Mr. Norman Campbell",male,27,1,0,113806,53.1,E8,S +726,0,3,"Oreskovic, Mr. Luka",male,20,0,0,315094,8.6625,,S +727,1,2,"Renouf, Mrs. Peter Henry (Lillian Jefferys)",female,30,3,0,31027,21,,S +728,1,3,"Mannion, Miss. Margareth",female,,0,0,36866,7.7375,,Q +729,0,2,"Bryhl, Mr. Kurt Arnold Gottfrid",male,25,1,0,236853,26,,S +730,0,3,"Ilmakangas, Miss. Pieta Sofia",female,25,1,0,STON/O2. 3101271,7.925,,S +731,1,1,"Allen, Miss. Elisabeth Walton",female,29,0,0,24160,211.3375,B5,S +732,0,3,"Hassan, Mr. Houssein G N",male,11,0,0,2699,18.7875,,C +733,0,2,"Knight, Mr. Robert J",male,,0,0,239855,0,,S +734,0,2,"Berriman, Mr. William John",male,23,0,0,28425,13,,S +735,0,2,"Troupiansky, Mr. Moses Aaron",male,23,0,0,233639,13,,S +736,0,3,"Williams, Mr. Leslie",male,28.5,0,0,54636,16.1,,S +737,0,3,"Ford, Mrs. Edward (Margaret Ann Watson)",female,48,1,3,W./C. 6608,34.375,,S +738,1,1,"Lesurer, Mr. Gustave J",male,35,0,0,PC 17755,512.3292,B101,C +739,0,3,"Ivanoff, Mr. Kanio",male,,0,0,349201,7.8958,,S +740,0,3,"Nankoff, Mr. Minko",male,,0,0,349218,7.8958,,S +741,1,1,"Hawksford, Mr. Walter James",male,,0,0,16988,30,D45,S +742,0,1,"Cavendish, Mr. Tyrell William",male,36,1,0,19877,78.85,C46,S +743,1,1,"Ryerson, Miss. Susan Parker ""Suzette""",female,21,2,2,PC 17608,262.375,B57 B59 B63 B66,C +744,0,3,"McNamee, Mr. Neal",male,24,1,0,376566,16.1,,S +745,1,3,"Stranden, Mr. Juho",male,31,0,0,STON/O 2. 3101288,7.925,,S +746,0,1,"Crosby, Capt. Edward Gifford",male,70,1,1,WE/P 5735,71,B22,S +747,0,3,"Abbott, Mr. Rossmore Edward",male,16,1,1,C.A. 2673,20.25,,S +748,1,2,"Sinkkonen, Miss. Anna",female,30,0,0,250648,13,,S +749,0,1,"Marvin, Mr. Daniel Warner",male,19,1,0,113773,53.1,D30,S +750,0,3,"Connaghton, Mr. Michael",male,31,0,0,335097,7.75,,Q +751,1,2,"Wells, Miss. Joan",female,4,1,1,29103,23,,S +752,1,3,"Moor, Master. Meier",male,6,0,1,392096,12.475,E121,S +753,0,3,"Vande Velde, Mr. Johannes Joseph",male,33,0,0,345780,9.5,,S +754,0,3,"Jonkoff, Mr. Lalio",male,23,0,0,349204,7.8958,,S +755,1,2,"Herman, Mrs. Samuel (Jane Laver)",female,48,1,2,220845,65,,S +756,1,2,"Hamalainen, Master. Viljo",male,0.67,1,1,250649,14.5,,S +757,0,3,"Carlsson, Mr. August Sigfrid",male,28,0,0,350042,7.7958,,S +758,0,2,"Bailey, Mr. Percy Andrew",male,18,0,0,29108,11.5,,S +759,0,3,"Theobald, Mr. Thomas Leonard",male,34,0,0,363294,8.05,,S +760,1,1,"Rothes, the Countess. of (Lucy Noel Martha Dyer-Edwards)",female,33,0,0,110152,86.5,B77,S +761,0,3,"Garfirth, Mr. John",male,,0,0,358585,14.5,,S +762,0,3,"Nirva, Mr. Iisakki Antino Aijo",male,41,0,0,SOTON/O2 3101272,7.125,,S +763,1,3,"Barah, Mr. Hanna Assi",male,20,0,0,2663,7.2292,,C +764,1,1,"Carter, Mrs. William Ernest (Lucile Polk)",female,36,1,2,113760,120,B96 B98,S +765,0,3,"Eklund, Mr. Hans Linus",male,16,0,0,347074,7.775,,S +766,1,1,"Hogeboom, Mrs. John C (Anna Andrews)",female,51,1,0,13502,77.9583,D11,S +767,0,1,"Brewe, Dr. Arthur Jackson",male,,0,0,112379,39.6,,C +768,0,3,"Mangan, Miss. Mary",female,30.5,0,0,364850,7.75,,Q +769,0,3,"Moran, Mr. Daniel J",male,,1,0,371110,24.15,,Q +770,0,3,"Gronnestad, Mr. Daniel Danielsen",male,32,0,0,8471,8.3625,,S +771,0,3,"Lievens, Mr. Rene Aime",male,24,0,0,345781,9.5,,S +772,0,3,"Jensen, Mr. Niels Peder",male,48,0,0,350047,7.8542,,S +773,0,2,"Mack, Mrs. (Mary)",female,57,0,0,S.O./P.P. 3,10.5,E77,S +774,0,3,"Elias, Mr. Dibo",male,,0,0,2674,7.225,,C +775,1,2,"Hocking, Mrs. Elizabeth (Eliza Needs)",female,54,1,3,29105,23,,S +776,0,3,"Myhrman, Mr. Pehr Fabian Oliver Malkolm",male,18,0,0,347078,7.75,,S +777,0,3,"Tobin, Mr. Roger",male,,0,0,383121,7.75,F38,Q +778,1,3,"Emanuel, Miss. Virginia Ethel",female,5,0,0,364516,12.475,,S +779,0,3,"Kilgannon, Mr. Thomas J",male,,0,0,36865,7.7375,,Q +780,1,1,"Robert, Mrs. Edward Scott (Elisabeth Walton McMillan)",female,43,0,1,24160,211.3375,B3,S +781,1,3,"Ayoub, Miss. Banoura",female,13,0,0,2687,7.2292,,C +782,1,1,"Dick, Mrs. Albert Adrian (Vera Gillespie)",female,17,1,0,17474,57,B20,S +783,0,1,"Long, Mr. Milton Clyde",male,29,0,0,113501,30,D6,S +784,0,3,"Johnston, Mr. Andrew G",male,,1,2,W./C. 6607,23.45,,S +785,0,3,"Ali, Mr. William",male,25,0,0,SOTON/O.Q. 3101312,7.05,,S +786,0,3,"Harmer, Mr. Abraham (David Lishin)",male,25,0,0,374887,7.25,,S +787,1,3,"Sjoblom, Miss. Anna Sofia",female,18,0,0,3101265,7.4958,,S +788,0,3,"Rice, Master. George Hugh",male,8,4,1,382652,29.125,,Q +789,1,3,"Dean, Master. Bertram Vere",male,1,1,2,C.A. 2315,20.575,,S +790,0,1,"Guggenheim, Mr. Benjamin",male,46,0,0,PC 17593,79.2,B82 B84,C +791,0,3,"Keane, Mr. Andrew ""Andy""",male,,0,0,12460,7.75,,Q +792,0,2,"Gaskell, Mr. Alfred",male,16,0,0,239865,26,,S +793,0,3,"Sage, Miss. Stella Anna",female,,8,2,CA. 2343,69.55,,S +794,0,1,"Hoyt, Mr. William Fisher",male,,0,0,PC 17600,30.6958,,C +795,0,3,"Dantcheff, Mr. Ristiu",male,25,0,0,349203,7.8958,,S +796,0,2,"Otter, Mr. Richard",male,39,0,0,28213,13,,S +797,1,1,"Leader, Dr. Alice (Farnham)",female,49,0,0,17465,25.9292,D17,S +798,1,3,"Osman, Mrs. Mara",female,31,0,0,349244,8.6833,,S +799,0,3,"Ibrahim Shawah, Mr. Yousseff",male,30,0,0,2685,7.2292,,C +800,0,3,"Van Impe, Mrs. Jean Baptiste (Rosalie Paula Govaert)",female,30,1,1,345773,24.15,,S +801,0,2,"Ponesell, Mr. Martin",male,34,0,0,250647,13,,S +802,1,2,"Collyer, Mrs. Harvey (Charlotte Annie Tate)",female,31,1,1,C.A. 31921,26.25,,S +803,1,1,"Carter, Master. William Thornton II",male,11,1,2,113760,120,B96 B98,S +804,1,3,"Thomas, Master. Assad Alexander",male,0.42,0,1,2625,8.5167,,C +805,1,3,"Hedman, Mr. Oskar Arvid",male,27,0,0,347089,6.975,,S +806,0,3,"Johansson, Mr. Karl Johan",male,31,0,0,347063,7.775,,S +807,0,1,"Andrews, Mr. Thomas Jr",male,39,0,0,112050,0,A36,S +808,0,3,"Pettersson, Miss. Ellen Natalia",female,18,0,0,347087,7.775,,S +809,0,2,"Meyer, Mr. August",male,39,0,0,248723,13,,S +810,1,1,"Chambers, Mrs. Norman Campbell (Bertha Griggs)",female,33,1,0,113806,53.1,E8,S +811,0,3,"Alexander, Mr. William",male,26,0,0,3474,7.8875,,S +812,0,3,"Lester, Mr. James",male,39,0,0,A/4 48871,24.15,,S +813,0,2,"Slemen, Mr. Richard James",male,35,0,0,28206,10.5,,S +814,0,3,"Andersson, Miss. Ebba Iris Alfrida",female,6,4,2,347082,31.275,,S +815,0,3,"Tomlin, Mr. Ernest Portage",male,30.5,0,0,364499,8.05,,S +816,0,1,"Fry, Mr. Richard",male,,0,0,112058,0,B102,S +817,0,3,"Heininen, Miss. Wendla Maria",female,23,0,0,STON/O2. 3101290,7.925,,S +818,0,2,"Mallet, Mr. Albert",male,31,1,1,S.C./PARIS 2079,37.0042,,C +819,0,3,"Holm, Mr. John Fredrik Alexander",male,43,0,0,C 7075,6.45,,S +820,0,3,"Skoog, Master. Karl Thorsten",male,10,3,2,347088,27.9,,S +821,1,1,"Hays, Mrs. Charles Melville (Clara Jennings Gregg)",female,52,1,1,12749,93.5,B69,S +822,1,3,"Lulic, Mr. Nikola",male,27,0,0,315098,8.6625,,S +823,0,1,"Reuchlin, Jonkheer. John George",male,38,0,0,19972,0,,S +824,1,3,"Moor, Mrs. (Beila)",female,27,0,1,392096,12.475,E121,S +825,0,3,"Panula, Master. Urho Abraham",male,2,4,1,3101295,39.6875,,S +826,0,3,"Flynn, Mr. John",male,,0,0,368323,6.95,,Q +827,0,3,"Lam, Mr. Len",male,,0,0,1601,56.4958,,S +828,1,2,"Mallet, Master. Andre",male,1,0,2,S.C./PARIS 2079,37.0042,,C +829,1,3,"McCormack, Mr. Thomas Joseph",male,,0,0,367228,7.75,,Q +830,1,1,"Stone, Mrs. George Nelson (Martha Evelyn)",female,62,0,0,113572,80,B28, +831,1,3,"Yasbeck, Mrs. Antoni (Selini Alexander)",female,15,1,0,2659,14.4542,,C +832,1,2,"Richards, Master. George Sibley",male,0.83,1,1,29106,18.75,,S +833,0,3,"Saad, Mr. Amin",male,,0,0,2671,7.2292,,C +834,0,3,"Augustsson, Mr. Albert",male,23,0,0,347468,7.8542,,S +835,0,3,"Allum, Mr. Owen George",male,18,0,0,2223,8.3,,S +836,1,1,"Compton, Miss. Sara Rebecca",female,39,1,1,PC 17756,83.1583,E49,C +837,0,3,"Pasic, Mr. Jakob",male,21,0,0,315097,8.6625,,S +838,0,3,"Sirota, Mr. Maurice",male,,0,0,392092,8.05,,S +839,1,3,"Chip, Mr. Chang",male,32,0,0,1601,56.4958,,S +840,1,1,"Marechal, Mr. Pierre",male,,0,0,11774,29.7,C47,C +841,0,3,"Alhomaki, Mr. Ilmari Rudolf",male,20,0,0,SOTON/O2 3101287,7.925,,S +842,0,2,"Mudd, Mr. Thomas Charles",male,16,0,0,S.O./P.P. 3,10.5,,S +843,1,1,"Serepeca, Miss. Augusta",female,30,0,0,113798,31,,C +844,0,3,"Lemberopolous, Mr. Peter L",male,34.5,0,0,2683,6.4375,,C +845,0,3,"Culumovic, Mr. Jeso",male,17,0,0,315090,8.6625,,S +846,0,3,"Abbing, Mr. Anthony",male,42,0,0,C.A. 5547,7.55,,S +847,0,3,"Sage, Mr. Douglas Bullen",male,,8,2,CA. 2343,69.55,,S +848,0,3,"Markoff, Mr. Marin",male,35,0,0,349213,7.8958,,C +849,0,2,"Harper, Rev. John",male,28,0,1,248727,33,,S +850,1,1,"Goldenberg, Mrs. Samuel L (Edwiga Grabowska)",female,,1,0,17453,89.1042,C92,C +851,0,3,"Andersson, Master. Sigvard Harald Elias",male,4,4,2,347082,31.275,,S +852,0,3,"Svensson, Mr. Johan",male,74,0,0,347060,7.775,,S +853,0,3,"Boulos, Miss. Nourelain",female,9,1,1,2678,15.2458,,C +854,1,1,"Lines, Miss. Mary Conover",female,16,0,1,PC 17592,39.4,D28,S +855,0,2,"Carter, Mrs. Ernest Courtenay (Lilian Hughes)",female,44,1,0,244252,26,,S +856,1,3,"Aks, Mrs. Sam (Leah Rosen)",female,18,0,1,392091,9.35,,S +857,1,1,"Wick, Mrs. George Dennick (Mary Hitchcock)",female,45,1,1,36928,164.8667,,S +858,1,1,"Daly, Mr. Peter Denis ",male,51,0,0,113055,26.55,E17,S +859,1,3,"Baclini, Mrs. Solomon (Latifa Qurban)",female,24,0,3,2666,19.2583,,C +860,0,3,"Razi, Mr. Raihed",male,,0,0,2629,7.2292,,C +861,0,3,"Hansen, Mr. Claus Peter",male,41,2,0,350026,14.1083,,S +862,0,2,"Giles, Mr. Frederick Edward",male,21,1,0,28134,11.5,,S +863,1,1,"Swift, Mrs. Frederick Joel (Margaret Welles Barron)",female,48,0,0,17466,25.9292,D17,S +864,0,3,"Sage, Miss. Dorothy Edith ""Dolly""",female,,8,2,CA. 2343,69.55,,S +865,0,2,"Gill, Mr. John William",male,24,0,0,233866,13,,S +866,1,2,"Bystrom, Mrs. (Karolina)",female,42,0,0,236852,13,,S +867,1,2,"Duran y More, Miss. Asuncion",female,27,1,0,SC/PARIS 2149,13.8583,,C +868,0,1,"Roebling, Mr. Washington Augustus II",male,31,0,0,PC 17590,50.4958,A24,S +869,0,3,"van Melkebeke, Mr. Philemon",male,,0,0,345777,9.5,,S +870,1,3,"Johnson, Master. Harold Theodor",male,4,1,1,347742,11.1333,,S +871,0,3,"Balkic, Mr. Cerin",male,26,0,0,349248,7.8958,,S +872,1,1,"Beckwith, Mrs. Richard Leonard (Sallie Monypeny)",female,47,1,1,11751,52.5542,D35,S +873,0,1,"Carlsson, Mr. Frans Olof",male,33,0,0,695,5,B51 B53 B55,S +874,0,3,"Vander Cruyssen, Mr. Victor",male,47,0,0,345765,9,,S +875,1,2,"Abelson, Mrs. Samuel (Hannah Wizosky)",female,28,1,0,P/PP 3381,24,,C +876,1,3,"Najib, Miss. Adele Kiamie ""Jane""",female,15,0,0,2667,7.225,,C +877,0,3,"Gustafsson, Mr. Alfred Ossian",male,20,0,0,7534,9.8458,,S +878,0,3,"Petroff, Mr. Nedelio",male,19,0,0,349212,7.8958,,S +879,0,3,"Laleff, Mr. Kristo",male,,0,0,349217,7.8958,,S +880,1,1,"Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)",female,56,0,1,11767,83.1583,C50,C +881,1,2,"Shelley, Mrs. William (Imanita Parrish Hall)",female,25,0,1,230433,26,,S +882,0,3,"Markun, Mr. Johann",male,33,0,0,349257,7.8958,,S +883,0,3,"Dahlberg, Miss. Gerda Ulrika",female,22,0,0,7552,10.5167,,S +884,0,2,"Banfield, Mr. Frederick James",male,28,0,0,C.A./SOTON 34068,10.5,,S +885,0,3,"Sutehall, Mr. Henry Jr",male,25,0,0,SOTON/OQ 392076,7.05,,S +886,0,3,"Rice, Mrs. William (Margaret Norton)",female,39,0,5,382652,29.125,,Q +887,0,2,"Montvila, Rev. Juozas",male,27,0,0,211536,13,,S +888,1,1,"Graham, Miss. Margaret Edith",female,19,0,0,112053,30,B42,S +889,0,3,"Johnston, Miss. Catherine Helen ""Carrie""",female,,1,2,W./C. 6607,23.45,,S +890,1,1,"Behr, Mr. Karl Howell",male,26,0,0,111369,30,C148,C +891,0,3,"Dooley, Mr. Patrick",male,32,0,0,370376,7.75,,Q diff --git a/Ch3/rfSubmission.csv b/Ch3/rfSubmission.csv new file mode 100644 index 000000000..10e844e1e --- /dev/null +++ b/Ch3/rfSubmission.csv @@ -0,0 +1,419 @@ +PassengerId,Survived +892,0 +893,0 +894,0 +895,0 +896,1 +897,0 +898,1 +899,0 +900,1 +901,0 +902,0 +903,0 +904,1 +905,0 +906,1 +907,1 +908,0 +909,0 +910,1 +911,1 +912,0 +913,1 +914,1 +915,0 +916,1 +917,0 +918,1 +919,0 +920,1 +921,0 +922,0 +923,0 +924,1 +925,0 +926,1 +927,0 +928,1 +929,0 +930,0 +931,0 +932,0 +933,0 +934,0 +935,1 +936,1 +937,0 +938,0 +939,0 +940,1 +941,1 +942,0 +943,0 +944,1 +945,1 +946,0 +947,0 +948,0 +949,0 +950,0 +951,1 +952,0 +953,0 +954,0 +955,1 +956,1 +957,1 +958,1 +959,0 +960,0 +961,1 +962,1 +963,0 +964,0 +965,0 +966,1 +967,0 +968,0 +969,1 +970,0 +971,1 +972,1 +973,0 +974,0 +975,0 +976,0 +977,0 +978,1 +979,1 +980,1 +981,1 +982,0 +983,0 +984,1 +985,0 +986,0 +987,0 +988,1 +989,0 +990,1 +991,0 +992,1 +993,0 +994,0 +995,0 +996,1 +997,0 +998,0 +999,0 +1000,0 +1001,0 +1002,0 +1003,1 +1004,1 +1005,1 +1006,1 +1007,0 +1008,0 +1009,1 +1010,0 +1011,1 +1012,1 +1013,0 +1014,1 +1015,0 +1016,0 +1017,1 +1018,0 +1019,1 +1020,0 +1021,0 +1022,0 +1023,0 +1024,0 +1025,0 +1026,0 +1027,0 +1028,0 +1029,0 +1030,1 +1031,0 +1032,0 +1033,1 +1034,0 +1035,0 +1036,0 +1037,0 +1038,0 +1039,0 +1040,0 +1041,0 +1042,1 +1043,0 +1044,0 +1045,1 +1046,0 +1047,0 +1048,1 +1049,1 +1050,0 +1051,1 +1052,1 +1053,1 +1054,1 +1055,0 +1056,0 +1057,1 +1058,0 +1059,0 +1060,1 +1061,0 +1062,0 +1063,0 +1064,0 +1065,0 +1066,0 +1067,1 +1068,1 +1069,0 +1070,1 +1071,1 +1072,0 +1073,1 +1074,1 +1075,0 +1076,1 +1077,0 +1078,1 +1079,0 +1080,0 +1081,0 +1082,0 +1083,0 +1084,0 +1085,0 +1086,1 +1087,0 +1088,1 +1089,1 +1090,0 +1091,1 +1092,1 +1093,1 +1094,1 +1095,1 +1096,0 +1097,0 +1098,1 +1099,0 +1100,1 +1101,0 +1102,0 +1103,0 +1104,0 +1105,1 +1106,0 +1107,0 +1108,1 +1109,0 +1110,1 +1111,0 +1112,1 +1113,0 +1114,1 +1115,0 +1116,1 +1117,1 +1118,0 +1119,1 +1120,0 +1121,0 +1122,0 +1123,1 +1124,0 +1125,0 +1126,1 +1127,0 +1128,0 +1129,0 +1130,1 +1131,1 +1132,1 +1133,1 +1134,0 +1135,0 +1136,0 +1137,0 +1138,1 +1139,0 +1140,1 +1141,0 +1142,1 +1143,0 +1144,0 +1145,0 +1146,0 +1147,0 +1148,0 +1149,0 +1150,1 +1151,0 +1152,0 +1153,0 +1154,1 +1155,1 +1156,0 +1157,0 +1158,0 +1159,0 +1160,1 +1161,0 +1162,0 +1163,0 +1164,1 +1165,1 +1166,0 +1167,1 +1168,0 +1169,0 +1170,0 +1171,0 +1172,0 +1173,1 +1174,1 +1175,0 +1176,1 +1177,0 +1178,0 +1179,0 +1180,0 +1181,0 +1182,0 +1183,1 +1184,0 +1185,0 +1186,0 +1187,0 +1188,1 +1189,0 +1190,0 +1191,0 +1192,0 +1193,0 +1194,0 +1195,0 +1196,1 +1197,1 +1198,1 +1199,1 +1200,0 +1201,0 +1202,0 +1203,0 +1204,0 +1205,1 +1206,1 +1207,1 +1208,0 +1209,0 +1210,0 +1211,0 +1212,0 +1213,0 +1214,0 +1215,0 +1216,1 +1217,0 +1218,1 +1219,0 +1220,0 +1221,0 +1222,1 +1223,0 +1224,0 +1225,0 +1226,0 +1227,0 +1228,0 +1229,0 +1230,0 +1231,0 +1232,0 +1233,0 +1234,0 +1235,1 +1236,0 +1237,1 +1238,0 +1239,1 +1240,0 +1241,1 +1242,1 +1243,0 +1244,0 +1245,0 +1246,1 +1247,0 +1248,1 +1249,0 +1250,0 +1251,0 +1252,0 +1253,1 +1254,1 +1255,0 +1256,1 +1257,0 +1258,0 +1259,0 +1260,1 +1261,0 +1262,0 +1263,1 +1264,0 +1265,0 +1266,1 +1267,1 +1268,0 +1269,0 +1270,0 +1271,0 +1272,0 +1273,0 +1274,1 +1275,0 +1276,0 +1277,1 +1278,0 +1279,0 +1280,0 +1281,0 +1282,0 +1283,1 +1284,0 +1285,0 +1286,0 +1287,1 +1288,0 +1289,1 +1290,0 +1291,0 +1292,1 +1293,0 +1294,1 +1295,0 +1296,0 +1297,0 +1298,0 +1299,0 +1300,1 +1301,1 +1302,1 +1303,1 +1304,0 +1305,0 +1306,1 +1307,0 +1308,0 +1309,1 diff --git a/my_env/Include/Python-ast.h b/my_env/Include/Python-ast.h new file mode 100644 index 000000000..8e0f750a8 --- /dev/null +++ b/my_env/Include/Python-ast.h @@ -0,0 +1,637 @@ +/* File automatically generated by Parser/asdl_c.py. */ + +#include "asdl.h" + +typedef struct _mod *mod_ty; + +typedef struct _stmt *stmt_ty; + +typedef struct _expr *expr_ty; + +typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5, + Param=6 } expr_context_ty; + +typedef struct _slice *slice_ty; + +typedef enum _boolop { And=1, Or=2 } boolop_ty; + +typedef enum _operator { Add=1, Sub=2, Mult=3, MatMult=4, Div=5, Mod=6, Pow=7, + LShift=8, RShift=9, BitOr=10, BitXor=11, BitAnd=12, + FloorDiv=13 } operator_ty; + +typedef enum _unaryop { Invert=1, Not=2, UAdd=3, USub=4 } unaryop_ty; + +typedef enum _cmpop { Eq=1, NotEq=2, Lt=3, LtE=4, Gt=5, GtE=6, Is=7, IsNot=8, + In=9, NotIn=10 } cmpop_ty; + +typedef struct _comprehension *comprehension_ty; + +typedef struct _excepthandler *excepthandler_ty; + +typedef struct _arguments *arguments_ty; + +typedef struct _arg *arg_ty; + +typedef struct _keyword *keyword_ty; + +typedef struct _alias *alias_ty; + +typedef struct _withitem *withitem_ty; + + +enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3, + Suite_kind=4}; +struct _mod { + enum _mod_kind kind; + union { + struct { + asdl_seq *body; + } Module; + + struct { + asdl_seq *body; + } Interactive; + + struct { + expr_ty body; + } Expression; + + struct { + asdl_seq *body; + } Suite; + + } v; +}; + +enum _stmt_kind {FunctionDef_kind=1, AsyncFunctionDef_kind=2, ClassDef_kind=3, + Return_kind=4, Delete_kind=5, Assign_kind=6, + AugAssign_kind=7, AnnAssign_kind=8, For_kind=9, + AsyncFor_kind=10, While_kind=11, If_kind=12, With_kind=13, + AsyncWith_kind=14, Raise_kind=15, Try_kind=16, + Assert_kind=17, Import_kind=18, ImportFrom_kind=19, + Global_kind=20, Nonlocal_kind=21, Expr_kind=22, Pass_kind=23, + Break_kind=24, Continue_kind=25}; +struct _stmt { + enum _stmt_kind kind; + union { + struct { + identifier name; + arguments_ty args; + asdl_seq *body; + asdl_seq *decorator_list; + expr_ty returns; + } FunctionDef; + + struct { + identifier name; + arguments_ty args; + asdl_seq *body; + asdl_seq *decorator_list; + expr_ty returns; + } AsyncFunctionDef; + + struct { + identifier name; + asdl_seq *bases; + asdl_seq *keywords; + asdl_seq *body; + asdl_seq *decorator_list; + } ClassDef; + + struct { + expr_ty value; + } Return; + + struct { + asdl_seq *targets; + } Delete; + + struct { + asdl_seq *targets; + expr_ty value; + } Assign; + + struct { + expr_ty target; + operator_ty op; + expr_ty value; + } AugAssign; + + struct { + expr_ty target; + expr_ty annotation; + expr_ty value; + int simple; + } AnnAssign; + + struct { + expr_ty target; + expr_ty iter; + asdl_seq *body; + asdl_seq *orelse; + } For; + + struct { + expr_ty target; + expr_ty iter; + asdl_seq *body; + asdl_seq *orelse; + } AsyncFor; + + struct { + expr_ty test; + asdl_seq *body; + asdl_seq *orelse; + } While; + + struct { + expr_ty test; + asdl_seq *body; + asdl_seq *orelse; + } If; + + struct { + asdl_seq *items; + asdl_seq *body; + } With; + + struct { + asdl_seq *items; + asdl_seq *body; + } AsyncWith; + + struct { + expr_ty exc; + expr_ty cause; + } Raise; + + struct { + asdl_seq *body; + asdl_seq *handlers; + asdl_seq *orelse; + asdl_seq *finalbody; + } Try; + + struct { + expr_ty test; + expr_ty msg; + } Assert; + + struct { + asdl_seq *names; + } Import; + + struct { + identifier module; + asdl_seq *names; + int level; + } ImportFrom; + + struct { + asdl_seq *names; + } Global; + + struct { + asdl_seq *names; + } Nonlocal; + + struct { + expr_ty value; + } Expr; + + } v; + int lineno; + int col_offset; +}; + +enum _expr_kind {BoolOp_kind=1, BinOp_kind=2, UnaryOp_kind=3, Lambda_kind=4, + IfExp_kind=5, Dict_kind=6, Set_kind=7, ListComp_kind=8, + SetComp_kind=9, DictComp_kind=10, GeneratorExp_kind=11, + Await_kind=12, Yield_kind=13, YieldFrom_kind=14, + Compare_kind=15, Call_kind=16, Num_kind=17, Str_kind=18, + FormattedValue_kind=19, JoinedStr_kind=20, Bytes_kind=21, + NameConstant_kind=22, Ellipsis_kind=23, Constant_kind=24, + Attribute_kind=25, Subscript_kind=26, Starred_kind=27, + Name_kind=28, List_kind=29, Tuple_kind=30}; +struct _expr { + enum _expr_kind kind; + union { + struct { + boolop_ty op; + asdl_seq *values; + } BoolOp; + + struct { + expr_ty left; + operator_ty op; + expr_ty right; + } BinOp; + + struct { + unaryop_ty op; + expr_ty operand; + } UnaryOp; + + struct { + arguments_ty args; + expr_ty body; + } Lambda; + + struct { + expr_ty test; + expr_ty body; + expr_ty orelse; + } IfExp; + + struct { + asdl_seq *keys; + asdl_seq *values; + } Dict; + + struct { + asdl_seq *elts; + } Set; + + struct { + expr_ty elt; + asdl_seq *generators; + } ListComp; + + struct { + expr_ty elt; + asdl_seq *generators; + } SetComp; + + struct { + expr_ty key; + expr_ty value; + asdl_seq *generators; + } DictComp; + + struct { + expr_ty elt; + asdl_seq *generators; + } GeneratorExp; + + struct { + expr_ty value; + } Await; + + struct { + expr_ty value; + } Yield; + + struct { + expr_ty value; + } YieldFrom; + + struct { + expr_ty left; + asdl_int_seq *ops; + asdl_seq *comparators; + } Compare; + + struct { + expr_ty func; + asdl_seq *args; + asdl_seq *keywords; + } Call; + + struct { + object n; + } Num; + + struct { + string s; + } Str; + + struct { + expr_ty value; + int conversion; + expr_ty format_spec; + } FormattedValue; + + struct { + asdl_seq *values; + } JoinedStr; + + struct { + bytes s; + } Bytes; + + struct { + singleton value; + } NameConstant; + + struct { + constant value; + } Constant; + + struct { + expr_ty value; + identifier attr; + expr_context_ty ctx; + } Attribute; + + struct { + expr_ty value; + slice_ty slice; + expr_context_ty ctx; + } Subscript; + + struct { + expr_ty value; + expr_context_ty ctx; + } Starred; + + struct { + identifier id; + expr_context_ty ctx; + } Name; + + struct { + asdl_seq *elts; + expr_context_ty ctx; + } List; + + struct { + asdl_seq *elts; + expr_context_ty ctx; + } Tuple; + + } v; + int lineno; + int col_offset; +}; + +enum _slice_kind {Slice_kind=1, ExtSlice_kind=2, Index_kind=3}; +struct _slice { + enum _slice_kind kind; + union { + struct { + expr_ty lower; + expr_ty upper; + expr_ty step; + } Slice; + + struct { + asdl_seq *dims; + } ExtSlice; + + struct { + expr_ty value; + } Index; + + } v; +}; + +struct _comprehension { + expr_ty target; + expr_ty iter; + asdl_seq *ifs; + int is_async; +}; + +enum _excepthandler_kind {ExceptHandler_kind=1}; +struct _excepthandler { + enum _excepthandler_kind kind; + union { + struct { + expr_ty type; + identifier name; + asdl_seq *body; + } ExceptHandler; + + } v; + int lineno; + int col_offset; +}; + +struct _arguments { + asdl_seq *args; + arg_ty vararg; + asdl_seq *kwonlyargs; + asdl_seq *kw_defaults; + arg_ty kwarg; + asdl_seq *defaults; +}; + +struct _arg { + identifier arg; + expr_ty annotation; + int lineno; + int col_offset; +}; + +struct _keyword { + identifier arg; + expr_ty value; +}; + +struct _alias { + identifier name; + identifier asname; +}; + +struct _withitem { + expr_ty context_expr; + expr_ty optional_vars; +}; + + +#define Module(a0, a1) _Py_Module(a0, a1) +mod_ty _Py_Module(asdl_seq * body, PyArena *arena); +#define Interactive(a0, a1) _Py_Interactive(a0, a1) +mod_ty _Py_Interactive(asdl_seq * body, PyArena *arena); +#define Expression(a0, a1) _Py_Expression(a0, a1) +mod_ty _Py_Expression(expr_ty body, PyArena *arena); +#define Suite(a0, a1) _Py_Suite(a0, a1) +mod_ty _Py_Suite(asdl_seq * body, PyArena *arena); +#define FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7) _Py_FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7) +stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_seq * body, + asdl_seq * decorator_list, expr_ty returns, int lineno, + int col_offset, PyArena *arena); +#define AsyncFunctionDef(a0, a1, a2, a3, a4, a5, a6, a7) _Py_AsyncFunctionDef(a0, a1, a2, a3, a4, a5, a6, a7) +stmt_ty _Py_AsyncFunctionDef(identifier name, arguments_ty args, asdl_seq * + body, asdl_seq * decorator_list, expr_ty returns, + int lineno, int col_offset, PyArena *arena); +#define ClassDef(a0, a1, a2, a3, a4, a5, a6, a7) _Py_ClassDef(a0, a1, a2, a3, a4, a5, a6, a7) +stmt_ty _Py_ClassDef(identifier name, asdl_seq * bases, asdl_seq * keywords, + asdl_seq * body, asdl_seq * decorator_list, int lineno, + int col_offset, PyArena *arena); +#define Return(a0, a1, a2, a3) _Py_Return(a0, a1, a2, a3) +stmt_ty _Py_Return(expr_ty value, int lineno, int col_offset, PyArena *arena); +#define Delete(a0, a1, a2, a3) _Py_Delete(a0, a1, a2, a3) +stmt_ty _Py_Delete(asdl_seq * targets, int lineno, int col_offset, PyArena + *arena); +#define Assign(a0, a1, a2, a3, a4) _Py_Assign(a0, a1, a2, a3, a4) +stmt_ty _Py_Assign(asdl_seq * targets, expr_ty value, int lineno, int + col_offset, PyArena *arena); +#define AugAssign(a0, a1, a2, a3, a4, a5) _Py_AugAssign(a0, a1, a2, a3, a4, a5) +stmt_ty _Py_AugAssign(expr_ty target, operator_ty op, expr_ty value, int + lineno, int col_offset, PyArena *arena); +#define AnnAssign(a0, a1, a2, a3, a4, a5, a6) _Py_AnnAssign(a0, a1, a2, a3, a4, a5, a6) +stmt_ty _Py_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int + simple, int lineno, int col_offset, PyArena *arena); +#define For(a0, a1, a2, a3, a4, a5, a6) _Py_For(a0, a1, a2, a3, a4, a5, a6) +stmt_ty _Py_For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * + orelse, int lineno, int col_offset, PyArena *arena); +#define AsyncFor(a0, a1, a2, a3, a4, a5, a6) _Py_AsyncFor(a0, a1, a2, a3, a4, a5, a6) +stmt_ty _Py_AsyncFor(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * + orelse, int lineno, int col_offset, PyArena *arena); +#define While(a0, a1, a2, a3, a4, a5) _Py_While(a0, a1, a2, a3, a4, a5) +stmt_ty _Py_While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, + int col_offset, PyArena *arena); +#define If(a0, a1, a2, a3, a4, a5) _Py_If(a0, a1, a2, a3, a4, a5) +stmt_ty _Py_If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, + int col_offset, PyArena *arena); +#define With(a0, a1, a2, a3, a4) _Py_With(a0, a1, a2, a3, a4) +stmt_ty _Py_With(asdl_seq * items, asdl_seq * body, int lineno, int col_offset, + PyArena *arena); +#define AsyncWith(a0, a1, a2, a3, a4) _Py_AsyncWith(a0, a1, a2, a3, a4) +stmt_ty _Py_AsyncWith(asdl_seq * items, asdl_seq * body, int lineno, int + col_offset, PyArena *arena); +#define Raise(a0, a1, a2, a3, a4) _Py_Raise(a0, a1, a2, a3, a4) +stmt_ty _Py_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, + PyArena *arena); +#define Try(a0, a1, a2, a3, a4, a5, a6) _Py_Try(a0, a1, a2, a3, a4, a5, a6) +stmt_ty _Py_Try(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, + asdl_seq * finalbody, int lineno, int col_offset, PyArena + *arena); +#define Assert(a0, a1, a2, a3, a4) _Py_Assert(a0, a1, a2, a3, a4) +stmt_ty _Py_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, + PyArena *arena); +#define Import(a0, a1, a2, a3) _Py_Import(a0, a1, a2, a3) +stmt_ty _Py_Import(asdl_seq * names, int lineno, int col_offset, PyArena + *arena); +#define ImportFrom(a0, a1, a2, a3, a4, a5) _Py_ImportFrom(a0, a1, a2, a3, a4, a5) +stmt_ty _Py_ImportFrom(identifier module, asdl_seq * names, int level, int + lineno, int col_offset, PyArena *arena); +#define Global(a0, a1, a2, a3) _Py_Global(a0, a1, a2, a3) +stmt_ty _Py_Global(asdl_seq * names, int lineno, int col_offset, PyArena + *arena); +#define Nonlocal(a0, a1, a2, a3) _Py_Nonlocal(a0, a1, a2, a3) +stmt_ty _Py_Nonlocal(asdl_seq * names, int lineno, int col_offset, PyArena + *arena); +#define Expr(a0, a1, a2, a3) _Py_Expr(a0, a1, a2, a3) +stmt_ty _Py_Expr(expr_ty value, int lineno, int col_offset, PyArena *arena); +#define Pass(a0, a1, a2) _Py_Pass(a0, a1, a2) +stmt_ty _Py_Pass(int lineno, int col_offset, PyArena *arena); +#define Break(a0, a1, a2) _Py_Break(a0, a1, a2) +stmt_ty _Py_Break(int lineno, int col_offset, PyArena *arena); +#define Continue(a0, a1, a2) _Py_Continue(a0, a1, a2) +stmt_ty _Py_Continue(int lineno, int col_offset, PyArena *arena); +#define BoolOp(a0, a1, a2, a3, a4) _Py_BoolOp(a0, a1, a2, a3, a4) +expr_ty _Py_BoolOp(boolop_ty op, asdl_seq * values, int lineno, int col_offset, + PyArena *arena); +#define BinOp(a0, a1, a2, a3, a4, a5) _Py_BinOp(a0, a1, a2, a3, a4, a5) +expr_ty _Py_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int + col_offset, PyArena *arena); +#define UnaryOp(a0, a1, a2, a3, a4) _Py_UnaryOp(a0, a1, a2, a3, a4) +expr_ty _Py_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, + PyArena *arena); +#define Lambda(a0, a1, a2, a3, a4) _Py_Lambda(a0, a1, a2, a3, a4) +expr_ty _Py_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, + PyArena *arena); +#define IfExp(a0, a1, a2, a3, a4, a5) _Py_IfExp(a0, a1, a2, a3, a4, a5) +expr_ty _Py_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int + col_offset, PyArena *arena); +#define Dict(a0, a1, a2, a3, a4) _Py_Dict(a0, a1, a2, a3, a4) +expr_ty _Py_Dict(asdl_seq * keys, asdl_seq * values, int lineno, int + col_offset, PyArena *arena); +#define Set(a0, a1, a2, a3) _Py_Set(a0, a1, a2, a3) +expr_ty _Py_Set(asdl_seq * elts, int lineno, int col_offset, PyArena *arena); +#define ListComp(a0, a1, a2, a3, a4) _Py_ListComp(a0, a1, a2, a3, a4) +expr_ty _Py_ListComp(expr_ty elt, asdl_seq * generators, int lineno, int + col_offset, PyArena *arena); +#define SetComp(a0, a1, a2, a3, a4) _Py_SetComp(a0, a1, a2, a3, a4) +expr_ty _Py_SetComp(expr_ty elt, asdl_seq * generators, int lineno, int + col_offset, PyArena *arena); +#define DictComp(a0, a1, a2, a3, a4, a5) _Py_DictComp(a0, a1, a2, a3, a4, a5) +expr_ty _Py_DictComp(expr_ty key, expr_ty value, asdl_seq * generators, int + lineno, int col_offset, PyArena *arena); +#define GeneratorExp(a0, a1, a2, a3, a4) _Py_GeneratorExp(a0, a1, a2, a3, a4) +expr_ty _Py_GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int + col_offset, PyArena *arena); +#define Await(a0, a1, a2, a3) _Py_Await(a0, a1, a2, a3) +expr_ty _Py_Await(expr_ty value, int lineno, int col_offset, PyArena *arena); +#define Yield(a0, a1, a2, a3) _Py_Yield(a0, a1, a2, a3) +expr_ty _Py_Yield(expr_ty value, int lineno, int col_offset, PyArena *arena); +#define YieldFrom(a0, a1, a2, a3) _Py_YieldFrom(a0, a1, a2, a3) +expr_ty _Py_YieldFrom(expr_ty value, int lineno, int col_offset, PyArena + *arena); +#define Compare(a0, a1, a2, a3, a4, a5) _Py_Compare(a0, a1, a2, a3, a4, a5) +expr_ty _Py_Compare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators, + int lineno, int col_offset, PyArena *arena); +#define Call(a0, a1, a2, a3, a4, a5) _Py_Call(a0, a1, a2, a3, a4, a5) +expr_ty _Py_Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, int + lineno, int col_offset, PyArena *arena); +#define Num(a0, a1, a2, a3) _Py_Num(a0, a1, a2, a3) +expr_ty _Py_Num(object n, int lineno, int col_offset, PyArena *arena); +#define Str(a0, a1, a2, a3) _Py_Str(a0, a1, a2, a3) +expr_ty _Py_Str(string s, int lineno, int col_offset, PyArena *arena); +#define FormattedValue(a0, a1, a2, a3, a4, a5) _Py_FormattedValue(a0, a1, a2, a3, a4, a5) +expr_ty _Py_FormattedValue(expr_ty value, int conversion, expr_ty format_spec, + int lineno, int col_offset, PyArena *arena); +#define JoinedStr(a0, a1, a2, a3) _Py_JoinedStr(a0, a1, a2, a3) +expr_ty _Py_JoinedStr(asdl_seq * values, int lineno, int col_offset, PyArena + *arena); +#define Bytes(a0, a1, a2, a3) _Py_Bytes(a0, a1, a2, a3) +expr_ty _Py_Bytes(bytes s, int lineno, int col_offset, PyArena *arena); +#define NameConstant(a0, a1, a2, a3) _Py_NameConstant(a0, a1, a2, a3) +expr_ty _Py_NameConstant(singleton value, int lineno, int col_offset, PyArena + *arena); +#define Ellipsis(a0, a1, a2) _Py_Ellipsis(a0, a1, a2) +expr_ty _Py_Ellipsis(int lineno, int col_offset, PyArena *arena); +#define Constant(a0, a1, a2, a3) _Py_Constant(a0, a1, a2, a3) +expr_ty _Py_Constant(constant value, int lineno, int col_offset, PyArena + *arena); +#define Attribute(a0, a1, a2, a3, a4, a5) _Py_Attribute(a0, a1, a2, a3, a4, a5) +expr_ty _Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int + lineno, int col_offset, PyArena *arena); +#define Subscript(a0, a1, a2, a3, a4, a5) _Py_Subscript(a0, a1, a2, a3, a4, a5) +expr_ty _Py_Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int + lineno, int col_offset, PyArena *arena); +#define Starred(a0, a1, a2, a3, a4) _Py_Starred(a0, a1, a2, a3, a4) +expr_ty _Py_Starred(expr_ty value, expr_context_ty ctx, int lineno, int + col_offset, PyArena *arena); +#define Name(a0, a1, a2, a3, a4) _Py_Name(a0, a1, a2, a3, a4) +expr_ty _Py_Name(identifier id, expr_context_ty ctx, int lineno, int + col_offset, PyArena *arena); +#define List(a0, a1, a2, a3, a4) _Py_List(a0, a1, a2, a3, a4) +expr_ty _Py_List(asdl_seq * elts, expr_context_ty ctx, int lineno, int + col_offset, PyArena *arena); +#define Tuple(a0, a1, a2, a3, a4) _Py_Tuple(a0, a1, a2, a3, a4) +expr_ty _Py_Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int + col_offset, PyArena *arena); +#define Slice(a0, a1, a2, a3) _Py_Slice(a0, a1, a2, a3) +slice_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena); +#define ExtSlice(a0, a1) _Py_ExtSlice(a0, a1) +slice_ty _Py_ExtSlice(asdl_seq * dims, PyArena *arena); +#define Index(a0, a1) _Py_Index(a0, a1) +slice_ty _Py_Index(expr_ty value, PyArena *arena); +#define comprehension(a0, a1, a2, a3, a4) _Py_comprehension(a0, a1, a2, a3, a4) +comprehension_ty _Py_comprehension(expr_ty target, expr_ty iter, asdl_seq * + ifs, int is_async, PyArena *arena); +#define ExceptHandler(a0, a1, a2, a3, a4, a5) _Py_ExceptHandler(a0, a1, a2, a3, a4, a5) +excepthandler_ty _Py_ExceptHandler(expr_ty type, identifier name, asdl_seq * + body, int lineno, int col_offset, PyArena + *arena); +#define arguments(a0, a1, a2, a3, a4, a5, a6) _Py_arguments(a0, a1, a2, a3, a4, a5, a6) +arguments_ty _Py_arguments(asdl_seq * args, arg_ty vararg, asdl_seq * + kwonlyargs, asdl_seq * kw_defaults, arg_ty kwarg, + asdl_seq * defaults, PyArena *arena); +#define arg(a0, a1, a2, a3, a4) _Py_arg(a0, a1, a2, a3, a4) +arg_ty _Py_arg(identifier arg, expr_ty annotation, int lineno, int col_offset, + PyArena *arena); +#define keyword(a0, a1, a2) _Py_keyword(a0, a1, a2) +keyword_ty _Py_keyword(identifier arg, expr_ty value, PyArena *arena); +#define alias(a0, a1, a2) _Py_alias(a0, a1, a2) +alias_ty _Py_alias(identifier name, identifier asname, PyArena *arena); +#define withitem(a0, a1, a2) _Py_withitem(a0, a1, a2) +withitem_ty _Py_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena + *arena); + +PyObject* PyAST_mod2obj(mod_ty t); +mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode); +int PyAST_Check(PyObject* obj); diff --git a/my_env/Include/Python.h b/my_env/Include/Python.h new file mode 100644 index 000000000..54ea32148 --- /dev/null +++ b/my_env/Include/Python.h @@ -0,0 +1,159 @@ +#ifndef Py_PYTHON_H +#define Py_PYTHON_H +/* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */ + +/* Include nearly all Python header files */ + +#include "patchlevel.h" +#include "pyconfig.h" +#include "pymacconfig.h" + +#include + +#ifndef UCHAR_MAX +#error "Something's broken. UCHAR_MAX should be defined in limits.h." +#endif + +#if UCHAR_MAX != 255 +#error "Python's source code assumes C's unsigned char is an 8-bit type." +#endif + +#if defined(__sgi) && !defined(_SGI_MP_SOURCE) +#define _SGI_MP_SOURCE +#endif + +#include +#ifndef NULL +# error "Python.h requires that stdio.h define NULL." +#endif + +#include +#ifdef HAVE_ERRNO_H +#include +#endif +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_CRYPT_H +#if defined(HAVE_CRYPT_R) && !defined(_GNU_SOURCE) +/* Required for glibc to expose the crypt_r() function prototype. */ +# define _GNU_SOURCE +# define _Py_GNU_SOURCE_FOR_CRYPT +#endif +#include +#ifdef _Py_GNU_SOURCE_FOR_CRYPT +/* Don't leak the _GNU_SOURCE define to other headers. */ +# undef _GNU_SOURCE +# undef _Py_GNU_SOURCE_FOR_CRYPT +#endif +#endif + +/* For size_t? */ +#ifdef HAVE_STDDEF_H +#include +#endif + +/* CAUTION: Build setups should ensure that NDEBUG is defined on the + * compiler command line when building Python in release mode; else + * assert() calls won't be removed. + */ +#include + +#include "pyport.h" +#include "pymacro.h" + +/* A convenient way for code to know if clang's memory sanitizer is enabled. */ +#if defined(__has_feature) +# if __has_feature(memory_sanitizer) +# if !defined(_Py_MEMORY_SANITIZER) +# define _Py_MEMORY_SANITIZER +# endif +# endif +#endif + +#include "pyatomic.h" + +/* Debug-mode build with pymalloc implies PYMALLOC_DEBUG. + * PYMALLOC_DEBUG is in error if pymalloc is not in use. + */ +#if defined(Py_DEBUG) && defined(WITH_PYMALLOC) && !defined(PYMALLOC_DEBUG) +#define PYMALLOC_DEBUG +#endif +#if defined(PYMALLOC_DEBUG) && !defined(WITH_PYMALLOC) +#error "PYMALLOC_DEBUG requires WITH_PYMALLOC" +#endif +#include "pymath.h" +#include "pytime.h" +#include "pymem.h" + +#include "object.h" +#include "objimpl.h" +#include "typeslots.h" +#include "pyhash.h" + +#include "pydebug.h" + +#include "bytearrayobject.h" +#include "bytesobject.h" +#include "unicodeobject.h" +#include "longobject.h" +#include "longintrepr.h" +#include "boolobject.h" +#include "floatobject.h" +#include "complexobject.h" +#include "rangeobject.h" +#include "memoryobject.h" +#include "tupleobject.h" +#include "listobject.h" +#include "dictobject.h" +#include "odictobject.h" +#include "enumobject.h" +#include "setobject.h" +#include "methodobject.h" +#include "moduleobject.h" +#include "funcobject.h" +#include "classobject.h" +#include "fileobject.h" +#include "pycapsule.h" +#include "traceback.h" +#include "sliceobject.h" +#include "cellobject.h" +#include "iterobject.h" +#include "genobject.h" +#include "descrobject.h" +#include "warnings.h" +#include "weakrefobject.h" +#include "structseq.h" +#include "namespaceobject.h" + +#include "codecs.h" +#include "pyerrors.h" + +#include "pystate.h" +#include "context.h" + +#include "pyarena.h" +#include "modsupport.h" +#include "compile.h" +#include "pythonrun.h" +#include "pylifecycle.h" +#include "ceval.h" +#include "sysmodule.h" +#include "osmodule.h" +#include "intrcheck.h" +#include "import.h" + +#include "abstract.h" +#include "bltinmodule.h" + +#include "eval.h" + +#include "pyctype.h" +#include "pystrtod.h" +#include "pystrcmp.h" +#include "dtoa.h" +#include "fileutils.h" +#include "pyfpe.h" + +#endif /* !Py_PYTHON_H */ diff --git a/my_env/Include/abstract.h b/my_env/Include/abstract.h new file mode 100644 index 000000000..3fe5a0064 --- /dev/null +++ b/my_env/Include/abstract.h @@ -0,0 +1,1109 @@ +/* Abstract Object Interface (many thanks to Jim Fulton) */ + +#ifndef Py_ABSTRACTOBJECT_H +#define Py_ABSTRACTOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +/* === Object Protocol ================================================== */ + +/* Implemented elsewhere: + + int PyObject_Print(PyObject *o, FILE *fp, int flags); + + Print an object 'o' on file 'fp'. Returns -1 on error. The flags argument + is used to enable certain printing options. The only option currently + supported is Py_Print_RAW. + + (What should be said about Py_Print_RAW?). */ + + +/* Implemented elsewhere: + + int PyObject_HasAttrString(PyObject *o, const char *attr_name); + + Returns 1 if object 'o' has the attribute attr_name, and 0 otherwise. + + This is equivalent to the Python expression: hasattr(o,attr_name). + + This function always succeeds. */ + + +/* Implemented elsewhere: + + PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name); + + Retrieve an attributed named attr_name form object o. + Returns the attribute value on success, or NULL on failure. + + This is the equivalent of the Python expression: o.attr_name. */ + + +/* Implemented elsewhere: + + int PyObject_HasAttr(PyObject *o, PyObject *attr_name); + + Returns 1 if o has the attribute attr_name, and 0 otherwise. + + This is equivalent to the Python expression: hasattr(o,attr_name). + + This function always succeeds. */ + +/* Implemented elsewhere: + + PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name); + + Retrieve an attributed named 'attr_name' form object 'o'. + Returns the attribute value on success, or NULL on failure. + + This is the equivalent of the Python expression: o.attr_name. */ + + +/* Implemented elsewhere: + + int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v); + + Set the value of the attribute named attr_name, for object 'o', + to the value 'v'. Raise an exception and return -1 on failure; return 0 on + success. + + This is the equivalent of the Python statement o.attr_name=v. */ + + +/* Implemented elsewhere: + + int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v); + + Set the value of the attribute named attr_name, for object 'o', to the value + 'v'. an exception and return -1 on failure; return 0 on success. + + This is the equivalent of the Python statement o.attr_name=v. */ + +/* Implemented as a macro: + + int PyObject_DelAttrString(PyObject *o, const char *attr_name); + + Delete attribute named attr_name, for object o. Returns + -1 on failure. + + This is the equivalent of the Python statement: del o.attr_name. */ +#define PyObject_DelAttrString(O,A) PyObject_SetAttrString((O),(A), NULL) + + +/* Implemented as a macro: + + int PyObject_DelAttr(PyObject *o, PyObject *attr_name); + + Delete attribute named attr_name, for object o. Returns -1 + on failure. This is the equivalent of the Python + statement: del o.attr_name. */ +#define PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A), NULL) + + +/* Implemented elsewhere: + + PyObject *PyObject_Repr(PyObject *o); + + Compute the string representation of object 'o'. Returns the + string representation on success, NULL on failure. + + This is the equivalent of the Python expression: repr(o). + + Called by the repr() built-in function. */ + + +/* Implemented elsewhere: + + PyObject *PyObject_Str(PyObject *o); + + Compute the string representation of object, o. Returns the + string representation on success, NULL on failure. + + This is the equivalent of the Python expression: str(o). + + Called by the str() and print() built-in functions. */ + + +/* Declared elsewhere + + PyAPI_FUNC(int) PyCallable_Check(PyObject *o); + + Determine if the object, o, is callable. Return 1 if the object is callable + and 0 otherwise. + + This function always succeeds. */ + + +#ifdef PY_SSIZE_T_CLEAN +# define PyObject_CallFunction _PyObject_CallFunction_SizeT +# define PyObject_CallMethod _PyObject_CallMethod_SizeT +# ifndef Py_LIMITED_API +# define _PyObject_CallMethodId _PyObject_CallMethodId_SizeT +# endif /* !Py_LIMITED_API */ +#endif + + +/* Call a callable Python object 'callable' with arguments given by the + tuple 'args' and keywords arguments given by the dictionary 'kwargs'. + + 'args' must not be *NULL*, use an empty tuple if no arguments are + needed. If no named arguments are needed, 'kwargs' can be NULL. + + This is the equivalent of the Python expression: + callable(*args, **kwargs). */ +PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable, + PyObject *args, PyObject *kwargs); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) _PyStack_AsTuple( + PyObject *const *stack, + Py_ssize_t nargs); + +PyAPI_FUNC(PyObject*) _PyStack_AsTupleSlice( + PyObject *const *stack, + Py_ssize_t nargs, + Py_ssize_t start, + Py_ssize_t end); + +/* Convert keyword arguments from the FASTCALL (stack: C array, kwnames: tuple) + format to a Python dictionary ("kwargs" dict). + + The type of kwnames keys is not checked. The final function getting + arguments is responsible to check if all keys are strings, for example using + PyArg_ParseTupleAndKeywords() or PyArg_ValidateKeywordArguments(). + + Duplicate keys are merged using the last value. If duplicate keys must raise + an exception, the caller is responsible to implement an explicit keys on + kwnames. */ +PyAPI_FUNC(PyObject *) _PyStack_AsDict( + PyObject *const *values, + PyObject *kwnames); + +/* Convert (args, nargs, kwargs: dict) into a (stack, nargs, kwnames: tuple). + + Return 0 on success, raise an exception and return -1 on error. + + Write the new stack into *p_stack. If *p_stack is differen than args, it + must be released by PyMem_Free(). + + The stack uses borrowed references. + + The type of keyword keys is not checked, these checks should be done + later (ex: _PyArg_ParseStackAndKeywords). */ +PyAPI_FUNC(int) _PyStack_UnpackDict( + PyObject *const *args, + Py_ssize_t nargs, + PyObject *kwargs, + PyObject *const **p_stack, + PyObject **p_kwnames); + +/* Suggested size (number of positional arguments) for arrays of PyObject* + allocated on a C stack to avoid allocating memory on the heap memory. Such + array is used to pass positional arguments to call functions of the + _PyObject_FastCall() family. + + The size is chosen to not abuse the C stack and so limit the risk of stack + overflow. The size is also chosen to allow using the small stack for most + function calls of the Python standard library. On 64-bit CPU, it allocates + 40 bytes on the stack. */ +#define _PY_FASTCALL_SMALL_STACK 5 + +/* Return 1 if callable supports FASTCALL calling convention for positional + arguments: see _PyObject_FastCallDict() and _PyObject_FastCallKeywords() */ +PyAPI_FUNC(int) _PyObject_HasFastCall(PyObject *callable); + +/* Call the callable object 'callable' with the "fast call" calling convention: + args is a C array for positional arguments (nargs is the number of + positional arguments), kwargs is a dictionary for keyword arguments. + + If nargs is equal to zero, args can be NULL. kwargs can be NULL. + nargs must be greater or equal to zero. + + Return the result on success. Raise an exception and return NULL on + error. */ +PyAPI_FUNC(PyObject *) _PyObject_FastCallDict( + PyObject *callable, + PyObject *const *args, + Py_ssize_t nargs, + PyObject *kwargs); + +/* Call the callable object 'callable' with the "fast call" calling convention: + args is a C array for positional arguments followed by values of + keyword arguments. Keys of keyword arguments are stored as a tuple + of strings in kwnames. nargs is the number of positional parameters at + the beginning of stack. The size of kwnames gives the number of keyword + values in the stack after positional arguments. + + kwnames must only contains str strings, no subclass, and all keys must + be unique. + + If nargs is equal to zero and there is no keyword argument (kwnames is + NULL or its size is zero), args can be NULL. + + Return the result on success. Raise an exception and return NULL on + error. */ +PyAPI_FUNC(PyObject *) _PyObject_FastCallKeywords( + PyObject *callable, + PyObject *const *args, + Py_ssize_t nargs, + PyObject *kwnames); + +#define _PyObject_FastCall(func, args, nargs) \ + _PyObject_FastCallDict((func), (args), (nargs), NULL) + +#define _PyObject_CallNoArg(func) \ + _PyObject_FastCallDict((func), NULL, 0, NULL) + +PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend( + PyObject *callable, + PyObject *obj, + PyObject *args, + PyObject *kwargs); + +PyAPI_FUNC(PyObject *) _PyObject_FastCall_Prepend( + PyObject *callable, + PyObject *obj, + PyObject *const *args, + Py_ssize_t nargs); + +PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *callable, + PyObject *result, + const char *where); +#endif /* Py_LIMITED_API */ + + +/* Call a callable Python object 'callable', with arguments given by the + tuple 'args'. If no arguments are needed, then 'args' can be *NULL*. + + Returns the result of the call on success, or *NULL* on failure. + + This is the equivalent of the Python expression: + callable(*args). */ +PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable, + PyObject *args); + +/* Call a callable Python object, callable, with a variable number of C + arguments. The C arguments are described using a mkvalue-style format + string. + + The format may be NULL, indicating that no arguments are provided. + + Returns the result of the call on success, or NULL on failure. + + This is the equivalent of the Python expression: + callable(arg1, arg2, ...). */ +PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable, + const char *format, ...); + +/* Call the method named 'name' of object 'obj' with a variable number of + C arguments. The C arguments are described by a mkvalue format string. + + The format can be NULL, indicating that no arguments are provided. + + Returns the result of the call on success, or NULL on failure. + + This is the equivalent of the Python expression: + obj.name(arg1, arg2, ...). */ +PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *obj, + const char *name, + const char *format, ...); + +#ifndef Py_LIMITED_API +/* Like PyObject_CallMethod(), but expect a _Py_Identifier* + as the method name. */ +PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *obj, + _Py_Identifier *name, + const char *format, ...); +#endif /* !Py_LIMITED_API */ + +PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable, + const char *format, + ...); + +PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *obj, + const char *name, + const char *format, + ...); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyObject_CallMethodId_SizeT(PyObject *obj, + _Py_Identifier *name, + const char *format, + ...); +#endif /* !Py_LIMITED_API */ + +/* Call a callable Python object 'callable' with a variable number of C + arguments. The C arguments are provided as PyObject* values, terminated + by a NULL. + + Returns the result of the call on success, or NULL on failure. + + This is the equivalent of the Python expression: + callable(arg1, arg2, ...). */ +PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable, + ...); + +/* Call the method named 'name' of object 'obj' with a variable number of + C arguments. The C arguments are provided as PyObject* values, terminated + by NULL. + + Returns the result of the call on success, or NULL on failure. + + This is the equivalent of the Python expression: obj.name(*args). */ + +PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs( + PyObject *obj, + PyObject *name, + ...); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyObject_CallMethodIdObjArgs( + PyObject *obj, + struct _Py_Identifier *name, + ...); +#endif /* !Py_LIMITED_API */ + + +/* Implemented elsewhere: + + Py_hash_t PyObject_Hash(PyObject *o); + + Compute and return the hash, hash_value, of an object, o. On + failure, return -1. + + This is the equivalent of the Python expression: hash(o). */ + + +/* Implemented elsewhere: + + int PyObject_IsTrue(PyObject *o); + + Returns 1 if the object, o, is considered to be true, 0 if o is + considered to be false and -1 on failure. + + This is equivalent to the Python expression: not not o. */ + + +/* Implemented elsewhere: + + int PyObject_Not(PyObject *o); + + Returns 0 if the object, o, is considered to be true, 1 if o is + considered to be false and -1 on failure. + + This is equivalent to the Python expression: not o. */ + + +/* Get the type of an object. + + On success, returns a type object corresponding to the object type of object + 'o'. On failure, returns NULL. + + This is equivalent to the Python expression: type(o) */ +PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o); + + +/* Return the size of object 'o'. If the object 'o' provides both sequence and + mapping protocols, the sequence size is returned. + + On error, -1 is returned. + + This is the equivalent to the Python expression: len(o) */ +PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o); + + +/* For DLL compatibility */ +#undef PyObject_Length +PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o); +#define PyObject_Length PyObject_Size + + +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o); + +/* Guess the size of object 'o' using len(o) or o.__length_hint__(). + If neither of those return a non-negative value, then return the default + value. If one of the calls fails, this function returns -1. */ +PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t); +#endif + +/* Return element of 'o' corresponding to the object 'key'. Return NULL + on failure. + + This is the equivalent of the Python expression: o[key] */ +PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key); + + +/* Map the object 'key' to the value 'v' into 'o'. + + Raise an exception and return -1 on failure; return 0 on success. + + This is the equivalent of the Python statement: o[key]=v. */ +PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v); + +/* Remove the mapping for the string 'key' from the object 'o'. + Returns -1 on failure. + + This is equivalent to the Python statement: del o[key]. */ +PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key); + +/* Delete the mapping for the object 'key' from the object 'o'. + Returns -1 on failure. + + This is the equivalent of the Python statement: del o[key]. */ +PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key); + + +/* === Old Buffer API ============================================ */ + +/* FIXME: usage of these should all be replaced in Python itself + but for backwards compatibility we will implement them. + Their usage without a corresponding "unlock" mechanism + may create issues (but they would already be there). */ + +/* Takes an arbitrary object which must support the (character, single segment) + buffer interface and returns a pointer to a read-only memory location + useable as character based input for subsequent processing. + + Return 0 on success. buffer and buffer_len are only set in case no error + occurs. Otherwise, -1 is returned and an exception set. */ +PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj, + const char **buffer, + Py_ssize_t *buffer_len) + Py_DEPRECATED(3.0); + +/* Checks whether an arbitrary object supports the (character, single segment) + buffer interface. + + Returns 1 on success, 0 on failure. */ +PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj) + Py_DEPRECATED(3.0); + +/* Same as PyObject_AsCharBuffer() except that this API expects (readable, + single segment) buffer interface and returns a pointer to a read-only memory + location which can contain arbitrary data. + + 0 is returned on success. buffer and buffer_len are only set in case no + error occurs. Otherwise, -1 is returned and an exception set. */ +PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj, + const void **buffer, + Py_ssize_t *buffer_len) + Py_DEPRECATED(3.0); + +/* Takes an arbitrary object which must support the (writable, single segment) + buffer interface and returns a pointer to a writable memory location in + buffer of size 'buffer_len'. + + Return 0 on success. buffer and buffer_len are only set in case no error + occurs. Otherwise, -1 is returned and an exception set. */ +PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj, + void **buffer, + Py_ssize_t *buffer_len) + Py_DEPRECATED(3.0); + + +/* === New Buffer API ============================================ */ + +#ifndef Py_LIMITED_API + +/* Return 1 if the getbuffer function is available, otherwise return 0. */ +#define PyObject_CheckBuffer(obj) \ + (((obj)->ob_type->tp_as_buffer != NULL) && \ + ((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL)) + +/* This is a C-API version of the getbuffer function call. It checks + to make sure object has the required function pointer and issues the + call. + + Returns -1 and raises an error on failure and returns 0 on success. */ +PyAPI_FUNC(int) PyObject_GetBuffer(PyObject *obj, Py_buffer *view, + int flags); + +/* Get the memory area pointed to by the indices for the buffer given. + Note that view->ndim is the assumed size of indices. */ +PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices); + +/* Return the implied itemsize of the data-format area from a + struct-style description. */ +PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *); + +/* Implementation in memoryobject.c */ +PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view, + Py_ssize_t len, char order); + +PyAPI_FUNC(int) PyBuffer_FromContiguous(Py_buffer *view, void *buf, + Py_ssize_t len, char order); + +/* Copy len bytes of data from the contiguous chunk of memory + pointed to by buf into the buffer exported by obj. Return + 0 on success and return -1 and raise a PyBuffer_Error on + error (i.e. the object does not have a buffer interface or + it is not working). + + If fort is 'F', then if the object is multi-dimensional, + then the data will be copied into the array in + Fortran-style (first dimension varies the fastest). If + fort is 'C', then the data will be copied into the array + in C-style (last dimension varies the fastest). If fort + is 'A', then it does not matter and the copy will be made + in whatever way is more efficient. */ +PyAPI_FUNC(int) PyObject_CopyData(PyObject *dest, PyObject *src); + +/* Copy the data from the src buffer to the buffer of destination. */ +PyAPI_FUNC(int) PyBuffer_IsContiguous(const Py_buffer *view, char fort); + +/*Fill the strides array with byte-strides of a contiguous + (Fortran-style if fort is 'F' or C-style otherwise) + array of the given shape with the given number of bytes + per element. */ +PyAPI_FUNC(void) PyBuffer_FillContiguousStrides(int ndims, + Py_ssize_t *shape, + Py_ssize_t *strides, + int itemsize, + char fort); + +/* Fills in a buffer-info structure correctly for an exporter + that can only share a contiguous chunk of memory of + "unsigned bytes" of the given length. + + Returns 0 on success and -1 (with raising an error) on error. */ +PyAPI_FUNC(int) PyBuffer_FillInfo(Py_buffer *view, PyObject *o, void *buf, + Py_ssize_t len, int readonly, + int flags); + +/* Releases a Py_buffer obtained from getbuffer ParseTuple's "s*". */ +PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view); + +#endif /* Py_LIMITED_API */ + +/* Takes an arbitrary object and returns the result of calling + obj.__format__(format_spec). */ +PyAPI_FUNC(PyObject *) PyObject_Format(PyObject *obj, + PyObject *format_spec); + + +/* ==== Iterators ================================================ */ + +/* Takes an object and returns an iterator for it. + This is typically a new iterator but if the argument is an iterator, this + returns itself. */ +PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *); + +#define PyIter_Check(obj) \ + ((obj)->ob_type->tp_iternext != NULL && \ + (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented) + +/* Takes an iterator object and calls its tp_iternext slot, + returning the next value. + + If the iterator is exhausted, this returns NULL without setting an + exception. + + NULL with an exception means an error occurred. */ +PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *); + + +/* === Number Protocol ================================================== */ + +/* Returns 1 if the object 'o' provides numeric protocols, and 0 otherwise. + + This function always succeeds. */ +PyAPI_FUNC(int) PyNumber_Check(PyObject *o); + +/* Returns the result of adding o1 and o2, or NULL on failure. + + This is the equivalent of the Python expression: o1 + o2. */ +PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2); + +/* Returns the result of subtracting o2 from o1, or NULL on failure. + + This is the equivalent of the Python expression: o1 - o2. */ +PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2); + +/* Returns the result of multiplying o1 and o2, or NULL on failure. + + This is the equivalent of the Python expression: o1 * o2. */ +PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2); + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +/* This is the equivalent of the Python expression: o1 @ o2. */ +PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2); +#endif + +/* Returns the result of dividing o1 by o2 giving an integral result, + or NULL on failure. + + This is the equivalent of the Python expression: o1 // o2. */ +PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2); + +/* Returns the result of dividing o1 by o2 giving a float result, or NULL on + failure. + + This is the equivalent of the Python expression: o1 / o2. */ +PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2); + +/* Returns the remainder of dividing o1 by o2, or NULL on failure. + + This is the equivalent of the Python expression: o1 % o2. */ +PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2); + +/* See the built-in function divmod. + + Returns NULL on failure. + + This is the equivalent of the Python expression: divmod(o1, o2). */ +PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2); + +/* See the built-in function pow. Returns NULL on failure. + + This is the equivalent of the Python expression: pow(o1, o2, o3), + where o3 is optional. */ +PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2, + PyObject *o3); + +/* Returns the negation of o on success, or NULL on failure. + + This is the equivalent of the Python expression: -o. */ +PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o); + +/* Returns the positive of o on success, or NULL on failure. + + This is the equivalent of the Python expression: +o. */ +PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o); + +/* Returns the absolute value of 'o', or NULL on failure. + + This is the equivalent of the Python expression: abs(o). */ +PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o); + +/* Returns the bitwise negation of 'o' on success, or NULL on failure. + + This is the equivalent of the Python expression: ~o. */ +PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o); + +/* Returns the result of left shifting o1 by o2 on success, or NULL on failure. + + This is the equivalent of the Python expression: o1 << o2. */ +PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2); + +/* Returns the result of right shifting o1 by o2 on success, or NULL on + failure. + + This is the equivalent of the Python expression: o1 >> o2. */ +PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2); + +/* Returns the result of bitwise and of o1 and o2 on success, or NULL on + failure. + + This is the equivalent of the Python expression: o1 & o2. */ +PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2); + +/* Returns the bitwise exclusive or of o1 by o2 on success, or NULL on failure. + + This is the equivalent of the Python expression: o1 ^ o2. */ +PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2); + +/* Returns the result of bitwise or on o1 and o2 on success, or NULL on + failure. + + This is the equivalent of the Python expression: o1 | o2. */ +PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2); + +#define PyIndex_Check(obj) \ + ((obj)->ob_type->tp_as_number != NULL && \ + (obj)->ob_type->tp_as_number->nb_index != NULL) + +/* Returns the object 'o' converted to a Python int, or NULL with an exception + raised on failure. */ +PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o); + +/* Returns the object 'o' converted to Py_ssize_t by going through + PyNumber_Index() first. + + If an overflow error occurs while converting the int to Py_ssize_t, then the + second argument 'exc' is the error-type to return. If it is NULL, then the + overflow error is cleared and the value is clipped. */ +PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc); + +/* Returns the object 'o' converted to an integer object on success, or NULL + on failure. + + This is the equivalent of the Python expression: int(o). */ +PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o); + +/* Returns the object 'o' converted to a float object on success, or NULL + on failure. + + This is the equivalent of the Python expression: float(o). */ +PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o); + + +/* --- In-place variants of (some of) the above number protocol functions -- */ + +/* Returns the result of adding o2 to o1, possibly in-place, or NULL + on failure. + + This is the equivalent of the Python expression: o1 += o2. */ +PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2); + +/* Returns the result of subtracting o2 from o1, possibly in-place or + NULL on failure. + + This is the equivalent of the Python expression: o1 -= o2. */ +PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2); + +/* Returns the result of multiplying o1 by o2, possibly in-place, or NULL on + failure. + + This is the equivalent of the Python expression: o1 *= o2. */ +PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2); + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +/* This is the equivalent of the Python expression: o1 @= o2. */ +PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2); +#endif + +/* Returns the result of dividing o1 by o2 giving an integral result, possibly + in-place, or NULL on failure. + + This is the equivalent of the Python expression: o1 /= o2. */ +PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1, + PyObject *o2); + +/* Returns the result of dividing o1 by o2 giving a float result, possibly + in-place, or null on failure. + + This is the equivalent of the Python expression: o1 /= o2. */ +PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1, + PyObject *o2); + +/* Returns the remainder of dividing o1 by o2, possibly in-place, or NULL on + failure. + + This is the equivalent of the Python expression: o1 %= o2. */ +PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2); + +/* Returns the result of raising o1 to the power of o2, possibly in-place, + or NULL on failure. + + This is the equivalent of the Python expression: o1 **= o2, + or o1 = pow(o1, o2, o3) if o3 is present. */ +PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2, + PyObject *o3); + +/* Returns the result of left shifting o1 by o2, possibly in-place, or NULL + on failure. + + This is the equivalent of the Python expression: o1 <<= o2. */ +PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2); + +/* Returns the result of right shifting o1 by o2, possibly in-place or NULL + on failure. + + This is the equivalent of the Python expression: o1 >>= o2. */ +PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2); + +/* Returns the result of bitwise and of o1 and o2, possibly in-place, or NULL + on failure. + + This is the equivalent of the Python expression: o1 &= o2. */ +PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2); + +/* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or NULL + on failure. + + This is the equivalent of the Python expression: o1 ^= o2. */ +PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2); + +/* Returns the result of bitwise or of o1 and o2, possibly in-place, + or NULL on failure. + + This is the equivalent of the Python expression: o1 |= o2. */ +PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2); + +/* Returns the integer n converted to a string with a base, with a base + marker of 0b, 0o or 0x prefixed if applicable. + + If n is not an int object, it is converted with PyNumber_Index first. */ +PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base); + + +/* === Sequence protocol ================================================ */ + +/* Return 1 if the object provides sequence protocol, and zero + otherwise. + + This function always succeeds. */ +PyAPI_FUNC(int) PySequence_Check(PyObject *o); + +/* Return the size of sequence object o, or -1 on failure. */ +PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o); + +/* For DLL compatibility */ +#undef PySequence_Length +PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o); +#define PySequence_Length PySequence_Size + + +/* Return the concatenation of o1 and o2 on success, and NULL on failure. + + This is the equivalent of the Python expression: o1 + o2. */ +PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2); + +/* Return the result of repeating sequence object 'o' 'count' times, + or NULL on failure. + + This is the equivalent of the Python expression: o * count. */ +PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count); + +/* Return the ith element of o, or NULL on failure. + + This is the equivalent of the Python expression: o[i]. */ +PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i); + +/* Return the slice of sequence object o between i1 and i2, or NULL on failure. + + This is the equivalent of the Python expression: o[i1:i2]. */ +PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2); + +/* Assign object 'v' to the ith element of the sequence 'o'. Raise an exception + and return -1 on failure; return 0 on success. + + This is the equivalent of the Python statement o[i] = v. */ +PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v); + +/* Delete the 'i'-th element of the sequence 'v'. Returns -1 on failure. + + This is the equivalent of the Python statement: del o[i]. */ +PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i); + +/* Assign the sequence object 'v' to the slice in sequence object 'o', + from 'i1' to 'i2'. Returns -1 on failure. + + This is the equivalent of the Python statement: o[i1:i2] = v. */ +PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2, + PyObject *v); + +/* Delete the slice in sequence object 'o' from 'i1' to 'i2'. + Returns -1 on failure. + + This is the equivalent of the Python statement: del o[i1:i2]. */ +PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2); + +/* Returns the sequence 'o' as a tuple on success, and NULL on failure. + + This is equivalent to the Python expression: tuple(o). */ +PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o); + +/* Returns the sequence 'o' as a list on success, and NULL on failure. + This is equivalent to the Python expression: list(o) */ +PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o); + +/* Return the sequence 'o' as a list, unless it's already a tuple or list. + + Use PySequence_Fast_GET_ITEM to access the members of this list, and + PySequence_Fast_GET_SIZE to get its length. + + Returns NULL on failure. If the object does not support iteration, raises a + TypeError exception with 'm' as the message text. */ +PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m); + +/* Return the size of the sequence 'o', assuming that 'o' was returned by + PySequence_Fast and is not NULL. */ +#define PySequence_Fast_GET_SIZE(o) \ + (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o)) + +/* Return the 'i'-th element of the sequence 'o', assuming that o was returned + by PySequence_Fast, and that i is within bounds. */ +#define PySequence_Fast_GET_ITEM(o, i)\ + (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i)) + +/* Assume tp_as_sequence and sq_item exist and that 'i' does not + need to be corrected for a negative index. */ +#define PySequence_ITEM(o, i)\ + ( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) ) + +/* Return a pointer to the underlying item array for + an object retured by PySequence_Fast */ +#define PySequence_Fast_ITEMS(sf) \ + (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \ + : ((PyTupleObject *)(sf))->ob_item) + +/* Return the number of occurrences on value on 'o', that is, return + the number of keys for which o[key] == value. + + On failure, return -1. This is equivalent to the Python expression: + o.count(value). */ +PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value); + +/* Return 1 if 'ob' is in the sequence 'seq'; 0 if 'ob' is not in the sequence + 'seq'; -1 on error. + + Use __contains__ if possible, else _PySequence_IterSearch(). */ +PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob); + +#ifndef Py_LIMITED_API +#define PY_ITERSEARCH_COUNT 1 +#define PY_ITERSEARCH_INDEX 2 +#define PY_ITERSEARCH_CONTAINS 3 + +/* Iterate over seq. + + Result depends on the operation: + + PY_ITERSEARCH_COUNT: return # of times obj appears in seq; -1 if + error. + PY_ITERSEARCH_INDEX: return 0-based index of first occurrence of + obj in seq; set ValueError and return -1 if none found; + also return -1 on error. + PY_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on + error. */ +PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq, + PyObject *obj, int operation); +#endif + + +/* For DLL-level backwards compatibility */ +#undef PySequence_In +/* Determine if the sequence 'o' contains 'value'. If an item in 'o' is equal + to 'value', return 1, otherwise return 0. On error, return -1. + + This is equivalent to the Python expression: value in o. */ +PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value); + +/* For source-level backwards compatibility */ +#define PySequence_In PySequence_Contains + + +/* Return the first index for which o[i] == value. + On error, return -1. + + This is equivalent to the Python expression: o.index(value). */ +PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value); + + +/* --- In-place versions of some of the above Sequence functions --- */ + +/* Append sequence 'o2' to sequence 'o1', in-place when possible. Return the + resulting object, which could be 'o1', or NULL on failure. + + This is the equivalent of the Python expression: o1 += o2. */ +PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2); + +/* Repeat sequence 'o' by 'count', in-place when possible. Return the resulting + object, which could be 'o', or NULL on failure. + + This is the equivalent of the Python expression: o1 *= count. */ +PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count); + + +/* === Mapping protocol ================================================= */ + +/* Return 1 if the object provides mapping protocol, and 0 otherwise. + + This function always succeeds. */ +PyAPI_FUNC(int) PyMapping_Check(PyObject *o); + +/* Returns the number of keys in mapping object 'o' on success, and -1 on + failure. This is equivalent to the Python expression: len(o). */ +PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o); + +/* For DLL compatibility */ +#undef PyMapping_Length +PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o); +#define PyMapping_Length PyMapping_Size + + +/* Implemented as a macro: + + int PyMapping_DelItemString(PyObject *o, const char *key); + + Remove the mapping for the string 'key' from the mapping 'o'. Returns -1 on + failure. + + This is equivalent to the Python statement: del o[key]. */ +#define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K)) + +/* Implemented as a macro: + + int PyMapping_DelItem(PyObject *o, PyObject *key); + + Remove the mapping for the object 'key' from the mapping object 'o'. + Returns -1 on failure. + + This is equivalent to the Python statement: del o[key]. */ +#define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K)) + +/* On success, return 1 if the mapping object 'o' has the key 'key', + and 0 otherwise. + + This is equivalent to the Python expression: key in o. + + This function always succeeds. */ +PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key); + +/* Return 1 if the mapping object has the key 'key', and 0 otherwise. + + This is equivalent to the Python expression: key in o. + + This function always succeeds. */ +PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key); + +/* On success, return a list or tuple of the keys in mapping object 'o'. + On failure, return NULL. */ +PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o); + +/* On success, return a list or tuple of the values in mapping object 'o'. + On failure, return NULL. */ +PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o); + +/* On success, return a list or tuple of the items in mapping object 'o', + where each item is a tuple containing a key-value pair. On failure, return + NULL. */ +PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o); + +/* Return element of 'o' corresponding to the string 'key' or NULL on failure. + + This is the equivalent of the Python expression: o[key]. */ +PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o, + const char *key); + +/* Map the string 'key' to the value 'v' in the mapping 'o'. + Returns -1 on failure. + + This is the equivalent of the Python statement: o[key]=v. */ +PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key, + PyObject *value); + +/* isinstance(object, typeorclass) */ +PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass); + +/* issubclass(object, typeorclass) */ +PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass); + + +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyObject_RealIsInstance(PyObject *inst, PyObject *cls); + +PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls); + +PyAPI_FUNC(char *const *) _PySequence_BytesToCharpArray(PyObject* self); + +PyAPI_FUNC(void) _Py_FreeCharPArray(char *const array[]); + +/* For internal use by buffer API functions */ +PyAPI_FUNC(void) _Py_add_one_to_index_F(int nd, Py_ssize_t *index, + const Py_ssize_t *shape); +PyAPI_FUNC(void) _Py_add_one_to_index_C(int nd, Py_ssize_t *index, + const Py_ssize_t *shape); + +/* Convert Python int to Py_ssize_t. Do nothing if the argument is None. */ +PyAPI_FUNC(int) _Py_convert_optional_to_ssize_t(PyObject *, void *); +#endif /* !Py_LIMITED_API */ + + +#ifdef __cplusplus +} +#endif +#endif /* Py_ABSTRACTOBJECT_H */ diff --git a/my_env/Include/accu.h b/my_env/Include/accu.h new file mode 100644 index 000000000..3636ea6c9 --- /dev/null +++ b/my_env/Include/accu.h @@ -0,0 +1,37 @@ +#ifndef Py_LIMITED_API +#ifndef Py_ACCU_H +#define Py_ACCU_H + +/*** This is a private API for use by the interpreter and the stdlib. + *** Its definition may be changed or removed at any moment. + ***/ + +/* + * A two-level accumulator of unicode objects that avoids both the overhead + * of keeping a huge number of small separate objects, and the quadratic + * behaviour of using a naive repeated concatenation scheme. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#undef small /* defined by some Windows headers */ + +typedef struct { + PyObject *large; /* A list of previously accumulated large strings */ + PyObject *small; /* Pending small strings */ +} _PyAccu; + +PyAPI_FUNC(int) _PyAccu_Init(_PyAccu *acc); +PyAPI_FUNC(int) _PyAccu_Accumulate(_PyAccu *acc, PyObject *unicode); +PyAPI_FUNC(PyObject *) _PyAccu_FinishAsList(_PyAccu *acc); +PyAPI_FUNC(PyObject *) _PyAccu_Finish(_PyAccu *acc); +PyAPI_FUNC(void) _PyAccu_Destroy(_PyAccu *acc); + +#ifdef __cplusplus +} +#endif + +#endif /* Py_ACCU_H */ +#endif /* Py_LIMITED_API */ diff --git a/my_env/Include/asdl.h b/my_env/Include/asdl.h new file mode 100644 index 000000000..35e9fa186 --- /dev/null +++ b/my_env/Include/asdl.h @@ -0,0 +1,46 @@ +#ifndef Py_ASDL_H +#define Py_ASDL_H + +typedef PyObject * identifier; +typedef PyObject * string; +typedef PyObject * bytes; +typedef PyObject * object; +typedef PyObject * singleton; +typedef PyObject * constant; + +/* It would be nice if the code generated by asdl_c.py was completely + independent of Python, but it is a goal the requires too much work + at this stage. So, for example, I'll represent identifiers as + interned Python strings. +*/ + +/* XXX A sequence should be typed so that its use can be typechecked. */ + +typedef struct { + Py_ssize_t size; + void *elements[1]; +} asdl_seq; + +typedef struct { + Py_ssize_t size; + int elements[1]; +} asdl_int_seq; + +asdl_seq *_Py_asdl_seq_new(Py_ssize_t size, PyArena *arena); +asdl_int_seq *_Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena); + +#define asdl_seq_GET(S, I) (S)->elements[(I)] +#define asdl_seq_LEN(S) ((S) == NULL ? 0 : (S)->size) +#ifdef Py_DEBUG +#define asdl_seq_SET(S, I, V) \ + do { \ + Py_ssize_t _asdl_i = (I); \ + assert((S) != NULL); \ + assert(_asdl_i < (S)->size); \ + (S)->elements[_asdl_i] = (V); \ + } while (0) +#else +#define asdl_seq_SET(S, I, V) (S)->elements[I] = (V) +#endif + +#endif /* !Py_ASDL_H */ diff --git a/my_env/Include/ast.h b/my_env/Include/ast.h new file mode 100644 index 000000000..5bc2b05b3 --- /dev/null +++ b/my_env/Include/ast.h @@ -0,0 +1,29 @@ +#ifndef Py_AST_H +#define Py_AST_H +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_FUNC(int) PyAST_Validate(mod_ty); +PyAPI_FUNC(mod_ty) PyAST_FromNode( + const node *n, + PyCompilerFlags *flags, + const char *filename, /* decoded from the filesystem encoding */ + PyArena *arena); +PyAPI_FUNC(mod_ty) PyAST_FromNodeObject( + const node *n, + PyCompilerFlags *flags, + PyObject *filename, + PyArena *arena); + +#ifndef Py_LIMITED_API + +/* _PyAST_ExprAsUnicode is defined in ast_unparse.c */ +PyAPI_FUNC(PyObject *) _PyAST_ExprAsUnicode(expr_ty); + +#endif /* !Py_LIMITED_API */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_AST_H */ diff --git a/my_env/Include/bitset.h b/my_env/Include/bitset.h new file mode 100644 index 000000000..b22fa7781 --- /dev/null +++ b/my_env/Include/bitset.h @@ -0,0 +1,32 @@ + +#ifndef Py_BITSET_H +#define Py_BITSET_H +#ifdef __cplusplus +extern "C" { +#endif + +/* Bitset interface */ + +#define BYTE char + +typedef BYTE *bitset; + +bitset newbitset(int nbits); +void delbitset(bitset bs); +#define testbit(ss, ibit) (((ss)[BIT2BYTE(ibit)] & BIT2MASK(ibit)) != 0) +int addbit(bitset bs, int ibit); /* Returns 0 if already set */ +int samebitset(bitset bs1, bitset bs2, int nbits); +void mergebitset(bitset bs1, bitset bs2, int nbits); + +#define BITSPERBYTE (8*sizeof(BYTE)) +#define NBYTES(nbits) (((nbits) + BITSPERBYTE - 1) / BITSPERBYTE) + +#define BIT2BYTE(ibit) ((ibit) / BITSPERBYTE) +#define BIT2SHIFT(ibit) ((ibit) % BITSPERBYTE) +#define BIT2MASK(ibit) (1 << BIT2SHIFT(ibit)) +#define BYTE2BIT(ibyte) ((ibyte) * BITSPERBYTE) + +#ifdef __cplusplus +} +#endif +#endif /* !Py_BITSET_H */ diff --git a/my_env/Include/bltinmodule.h b/my_env/Include/bltinmodule.h new file mode 100644 index 000000000..868c9e644 --- /dev/null +++ b/my_env/Include/bltinmodule.h @@ -0,0 +1,14 @@ +#ifndef Py_BLTINMODULE_H +#define Py_BLTINMODULE_H +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_DATA(PyTypeObject) PyFilter_Type; +PyAPI_DATA(PyTypeObject) PyMap_Type; +PyAPI_DATA(PyTypeObject) PyZip_Type; + +#ifdef __cplusplus +} +#endif +#endif /* !Py_BLTINMODULE_H */ diff --git a/my_env/Include/boolobject.h b/my_env/Include/boolobject.h new file mode 100644 index 000000000..7cc2f1fe2 --- /dev/null +++ b/my_env/Include/boolobject.h @@ -0,0 +1,34 @@ +/* Boolean object interface */ + +#ifndef Py_BOOLOBJECT_H +#define Py_BOOLOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + + +PyAPI_DATA(PyTypeObject) PyBool_Type; + +#define PyBool_Check(x) (Py_TYPE(x) == &PyBool_Type) + +/* Py_False and Py_True are the only two bools in existence. +Don't forget to apply Py_INCREF() when returning either!!! */ + +/* Don't use these directly */ +PyAPI_DATA(struct _longobject) _Py_FalseStruct, _Py_TrueStruct; + +/* Use these macros */ +#define Py_False ((PyObject *) &_Py_FalseStruct) +#define Py_True ((PyObject *) &_Py_TrueStruct) + +/* Macros for returning Py_True or Py_False, respectively */ +#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True +#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False + +/* Function to return a bool from a C long */ +PyAPI_FUNC(PyObject *) PyBool_FromLong(long); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_BOOLOBJECT_H */ diff --git a/my_env/Include/bytearrayobject.h b/my_env/Include/bytearrayobject.h new file mode 100644 index 000000000..a757b8805 --- /dev/null +++ b/my_env/Include/bytearrayobject.h @@ -0,0 +1,62 @@ +/* ByteArray object interface */ + +#ifndef Py_BYTEARRAYOBJECT_H +#define Py_BYTEARRAYOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* Type PyByteArrayObject represents a mutable array of bytes. + * The Python API is that of a sequence; + * the bytes are mapped to ints in [0, 256). + * Bytes are not characters; they may be used to encode characters. + * The only way to go between bytes and str/unicode is via encoding + * and decoding. + * For the convenience of C programmers, the bytes type is considered + * to contain a char pointer, not an unsigned char pointer. + */ + +/* Object layout */ +#ifndef Py_LIMITED_API +typedef struct { + PyObject_VAR_HEAD + Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */ + char *ob_bytes; /* Physical backing buffer */ + char *ob_start; /* Logical start inside ob_bytes */ + /* XXX(nnorwitz): should ob_exports be Py_ssize_t? */ + int ob_exports; /* How many buffer exports */ +} PyByteArrayObject; +#endif + +/* Type object */ +PyAPI_DATA(PyTypeObject) PyByteArray_Type; +PyAPI_DATA(PyTypeObject) PyByteArrayIter_Type; + +/* Type check macros */ +#define PyByteArray_Check(self) PyObject_TypeCheck(self, &PyByteArray_Type) +#define PyByteArray_CheckExact(self) (Py_TYPE(self) == &PyByteArray_Type) + +/* Direct API functions */ +PyAPI_FUNC(PyObject *) PyByteArray_FromObject(PyObject *); +PyAPI_FUNC(PyObject *) PyByteArray_Concat(PyObject *, PyObject *); +PyAPI_FUNC(PyObject *) PyByteArray_FromStringAndSize(const char *, Py_ssize_t); +PyAPI_FUNC(Py_ssize_t) PyByteArray_Size(PyObject *); +PyAPI_FUNC(char *) PyByteArray_AsString(PyObject *); +PyAPI_FUNC(int) PyByteArray_Resize(PyObject *, Py_ssize_t); + +/* Macros, trading safety for speed */ +#ifndef Py_LIMITED_API +#define PyByteArray_AS_STRING(self) \ + (assert(PyByteArray_Check(self)), \ + Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string) +#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self)) + +PyAPI_DATA(char) _PyByteArray_empty_string[]; +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_BYTEARRAYOBJECT_H */ diff --git a/my_env/Include/bytes_methods.h b/my_env/Include/bytes_methods.h new file mode 100644 index 000000000..8434a50a4 --- /dev/null +++ b/my_env/Include/bytes_methods.h @@ -0,0 +1,69 @@ +#ifndef Py_LIMITED_API +#ifndef Py_BYTES_CTYPE_H +#define Py_BYTES_CTYPE_H + +/* + * The internal implementation behind PyBytes (bytes) and PyByteArray (bytearray) + * methods of the given names, they operate on ASCII byte strings. + */ +extern PyObject* _Py_bytes_isspace(const char *cptr, Py_ssize_t len); +extern PyObject* _Py_bytes_isalpha(const char *cptr, Py_ssize_t len); +extern PyObject* _Py_bytes_isalnum(const char *cptr, Py_ssize_t len); +extern PyObject* _Py_bytes_isascii(const char *cptr, Py_ssize_t len); +extern PyObject* _Py_bytes_isdigit(const char *cptr, Py_ssize_t len); +extern PyObject* _Py_bytes_islower(const char *cptr, Py_ssize_t len); +extern PyObject* _Py_bytes_isupper(const char *cptr, Py_ssize_t len); +extern PyObject* _Py_bytes_istitle(const char *cptr, Py_ssize_t len); + +/* These store their len sized answer in the given preallocated *result arg. */ +extern void _Py_bytes_lower(char *result, const char *cptr, Py_ssize_t len); +extern void _Py_bytes_upper(char *result, const char *cptr, Py_ssize_t len); +extern void _Py_bytes_title(char *result, const char *s, Py_ssize_t len); +extern void _Py_bytes_capitalize(char *result, const char *s, Py_ssize_t len); +extern void _Py_bytes_swapcase(char *result, const char *s, Py_ssize_t len); + +extern PyObject *_Py_bytes_find(const char *str, Py_ssize_t len, PyObject *args); +extern PyObject *_Py_bytes_index(const char *str, Py_ssize_t len, PyObject *args); +extern PyObject *_Py_bytes_rfind(const char *str, Py_ssize_t len, PyObject *args); +extern PyObject *_Py_bytes_rindex(const char *str, Py_ssize_t len, PyObject *args); +extern PyObject *_Py_bytes_count(const char *str, Py_ssize_t len, PyObject *args); +extern int _Py_bytes_contains(const char *str, Py_ssize_t len, PyObject *arg); +extern PyObject *_Py_bytes_startswith(const char *str, Py_ssize_t len, PyObject *args); +extern PyObject *_Py_bytes_endswith(const char *str, Py_ssize_t len, PyObject *args); + +/* The maketrans() static method. */ +extern PyObject* _Py_bytes_maketrans(Py_buffer *frm, Py_buffer *to); + +/* Shared __doc__ strings. */ +extern const char _Py_isspace__doc__[]; +extern const char _Py_isalpha__doc__[]; +extern const char _Py_isalnum__doc__[]; +extern const char _Py_isascii__doc__[]; +extern const char _Py_isdigit__doc__[]; +extern const char _Py_islower__doc__[]; +extern const char _Py_isupper__doc__[]; +extern const char _Py_istitle__doc__[]; +extern const char _Py_lower__doc__[]; +extern const char _Py_upper__doc__[]; +extern const char _Py_title__doc__[]; +extern const char _Py_capitalize__doc__[]; +extern const char _Py_swapcase__doc__[]; +extern const char _Py_count__doc__[]; +extern const char _Py_find__doc__[]; +extern const char _Py_index__doc__[]; +extern const char _Py_rfind__doc__[]; +extern const char _Py_rindex__doc__[]; +extern const char _Py_startswith__doc__[]; +extern const char _Py_endswith__doc__[]; +extern const char _Py_maketrans__doc__[]; +extern const char _Py_expandtabs__doc__[]; +extern const char _Py_ljust__doc__[]; +extern const char _Py_rjust__doc__[]; +extern const char _Py_center__doc__[]; +extern const char _Py_zfill__doc__[]; + +/* this is needed because some docs are shared from the .o, not static */ +#define PyDoc_STRVAR_shared(name,str) const char name[] = PyDoc_STR(str) + +#endif /* !Py_BYTES_CTYPE_H */ +#endif /* !Py_LIMITED_API */ diff --git a/my_env/Include/bytesobject.h b/my_env/Include/bytesobject.h new file mode 100644 index 000000000..3fde4a221 --- /dev/null +++ b/my_env/Include/bytesobject.h @@ -0,0 +1,224 @@ + +/* Bytes (String) object interface */ + +#ifndef Py_BYTESOBJECT_H +#define Py_BYTESOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* +Type PyBytesObject represents a character string. An extra zero byte is +reserved at the end to ensure it is zero-terminated, but a size is +present so strings with null bytes in them can be represented. This +is an immutable object type. + +There are functions to create new string objects, to test +an object for string-ness, and to get the +string value. The latter function returns a null pointer +if the object is not of the proper type. +There is a variant that takes an explicit size as well as a +variant that assumes a zero-terminated string. Note that none of the +functions should be applied to nil objects. +*/ + +/* Caching the hash (ob_shash) saves recalculation of a string's hash value. + This significantly speeds up dict lookups. */ + +#ifndef Py_LIMITED_API +typedef struct { + PyObject_VAR_HEAD + Py_hash_t ob_shash; + char ob_sval[1]; + + /* Invariants: + * ob_sval contains space for 'ob_size+1' elements. + * ob_sval[ob_size] == 0. + * ob_shash is the hash of the string or -1 if not computed yet. + */ +} PyBytesObject; +#endif + +PyAPI_DATA(PyTypeObject) PyBytes_Type; +PyAPI_DATA(PyTypeObject) PyBytesIter_Type; + +#define PyBytes_Check(op) \ + PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS) +#define PyBytes_CheckExact(op) (Py_TYPE(op) == &PyBytes_Type) + +PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t); +PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *); +PyAPI_FUNC(PyObject *) PyBytes_FromObject(PyObject *); +PyAPI_FUNC(PyObject *) PyBytes_FromFormatV(const char*, va_list) + Py_GCC_ATTRIBUTE((format(printf, 1, 0))); +PyAPI_FUNC(PyObject *) PyBytes_FromFormat(const char*, ...) + Py_GCC_ATTRIBUTE((format(printf, 1, 2))); +PyAPI_FUNC(Py_ssize_t) PyBytes_Size(PyObject *); +PyAPI_FUNC(char *) PyBytes_AsString(PyObject *); +PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int); +PyAPI_FUNC(void) PyBytes_Concat(PyObject **, PyObject *); +PyAPI_FUNC(void) PyBytes_ConcatAndDel(PyObject **, PyObject *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t); +PyAPI_FUNC(PyObject*) _PyBytes_FormatEx( + const char *format, + Py_ssize_t format_len, + PyObject *args, + int use_bytearray); +PyAPI_FUNC(PyObject*) _PyBytes_FromHex( + PyObject *string, + int use_bytearray); +#endif +PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t, + const char *, Py_ssize_t, + const char *); +#ifndef Py_LIMITED_API +/* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */ +PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t, + const char *, Py_ssize_t, + const char *, + const char **); +#endif + +/* Macro, trading safety for speed */ +#ifndef Py_LIMITED_API +#define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \ + (((PyBytesObject *)(op))->ob_sval)) +#define PyBytes_GET_SIZE(op) (assert(PyBytes_Check(op)),Py_SIZE(op)) +#endif + +/* _PyBytes_Join(sep, x) is like sep.join(x). sep must be PyBytesObject*, + x must be an iterable object. */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x); +#endif + +/* Provides access to the internal data buffer and size of a string + object or the default encoded version of a Unicode object. Passing + NULL as *len parameter will force the string buffer to be + 0-terminated (passing a string with embedded NULL characters will + cause an exception). */ +PyAPI_FUNC(int) PyBytes_AsStringAndSize( + PyObject *obj, /* string or Unicode object */ + char **s, /* pointer to buffer variable */ + Py_ssize_t *len /* pointer to length variable or NULL + (only possible for 0-terminated + strings) */ + ); + +/* Using the current locale, insert the thousands grouping + into the string pointed to by buffer. For the argument descriptions, + see Objects/stringlib/localeutil.h */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGroupingLocale(char *buffer, + Py_ssize_t n_buffer, + char *digits, + Py_ssize_t n_digits, + Py_ssize_t min_width); + +/* Using explicit passed-in values, insert the thousands grouping + into the string pointed to by buffer. For the argument descriptions, + see Objects/stringlib/localeutil.h */ +PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer, + Py_ssize_t n_buffer, + char *digits, + Py_ssize_t n_digits, + Py_ssize_t min_width, + const char *grouping, + const char *thousands_sep); +#endif + +/* Flags used by string formatting */ +#define F_LJUST (1<<0) +#define F_SIGN (1<<1) +#define F_BLANK (1<<2) +#define F_ALT (1<<3) +#define F_ZERO (1<<4) + +#ifndef Py_LIMITED_API +/* The _PyBytesWriter structure is big: it contains an embedded "stack buffer". + A _PyBytesWriter variable must be declared at the end of variables in a + function to optimize the memory allocation on the stack. */ +typedef struct { + /* bytes, bytearray or NULL (when the small buffer is used) */ + PyObject *buffer; + + /* Number of allocated size. */ + Py_ssize_t allocated; + + /* Minimum number of allocated bytes, + incremented by _PyBytesWriter_Prepare() */ + Py_ssize_t min_size; + + /* If non-zero, use a bytearray instead of a bytes object for buffer. */ + int use_bytearray; + + /* If non-zero, overallocate the buffer (default: 0). + This flag must be zero if use_bytearray is non-zero. */ + int overallocate; + + /* Stack buffer */ + int use_small_buffer; + char small_buffer[512]; +} _PyBytesWriter; + +/* Initialize a bytes writer + + By default, the overallocation is disabled. Set the overallocate attribute + to control the allocation of the buffer. */ +PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer); + +/* Get the buffer content and reset the writer. + Return a bytes object, or a bytearray object if use_bytearray is non-zero. + Raise an exception and return NULL on error. */ +PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer, + void *str); + +/* Deallocate memory of a writer (clear its internal buffer). */ +PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer); + +/* Allocate the buffer to write size bytes. + Return the pointer to the beginning of buffer data. + Raise an exception and return NULL on error. */ +PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer, + Py_ssize_t size); + +/* Ensure that the buffer is large enough to write *size* bytes. + Add size to the writer minimum size (min_size attribute). + + str is the current pointer inside the buffer. + Return the updated current pointer inside the buffer. + Raise an exception and return NULL on error. */ +PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer, + void *str, + Py_ssize_t size); + +/* Resize the buffer to make it larger. + The new buffer may be larger than size bytes because of overallocation. + Return the updated current pointer inside the buffer. + Raise an exception and return NULL on error. + + Note: size must be greater than the number of allocated bytes in the writer. + + This function doesn't use the writer minimum size (min_size attribute). + + See also _PyBytesWriter_Prepare(). + */ +PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer, + void *str, + Py_ssize_t size); + +/* Write bytes. + Raise an exception and return NULL on error. */ +PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer, + void *str, + const void *bytes, + Py_ssize_t size); +#endif /* Py_LIMITED_API */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_BYTESOBJECT_H */ diff --git a/my_env/Include/cellobject.h b/my_env/Include/cellobject.h new file mode 100644 index 000000000..2f9b5b75d --- /dev/null +++ b/my_env/Include/cellobject.h @@ -0,0 +1,29 @@ +/* Cell object interface */ +#ifndef Py_LIMITED_API +#ifndef Py_CELLOBJECT_H +#define Py_CELLOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + PyObject_HEAD + PyObject *ob_ref; /* Content of the cell or NULL when empty */ +} PyCellObject; + +PyAPI_DATA(PyTypeObject) PyCell_Type; + +#define PyCell_Check(op) (Py_TYPE(op) == &PyCell_Type) + +PyAPI_FUNC(PyObject *) PyCell_New(PyObject *); +PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *); +PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *); + +#define PyCell_GET(op) (((PyCellObject *)(op))->ob_ref) +#define PyCell_SET(op, v) (((PyCellObject *)(op))->ob_ref = v) + +#ifdef __cplusplus +} +#endif +#endif /* !Py_TUPLEOBJECT_H */ +#endif /* Py_LIMITED_API */ diff --git a/my_env/Include/ceval.h b/my_env/Include/ceval.h new file mode 100644 index 000000000..11283c0a5 --- /dev/null +++ b/my_env/Include/ceval.h @@ -0,0 +1,239 @@ +#ifndef Py_CEVAL_H +#define Py_CEVAL_H +#ifdef __cplusplus +extern "C" { +#endif + + +/* Interface to random parts in ceval.c */ + +/* PyEval_CallObjectWithKeywords(), PyEval_CallObject(), PyEval_CallFunction + * and PyEval_CallMethod are kept for backward compatibility: PyObject_Call(), + * PyObject_CallFunction() and PyObject_CallMethod() are recommended to call + * a callable object. + */ + +PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords( + PyObject *callable, + PyObject *args, + PyObject *kwargs); + +/* Inline this */ +#define PyEval_CallObject(callable, arg) \ + PyEval_CallObjectWithKeywords(callable, arg, (PyObject *)NULL) + +PyAPI_FUNC(PyObject *) PyEval_CallFunction(PyObject *callable, + const char *format, ...); +PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj, + const char *name, + const char *format, ...); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *); +PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *); +PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth(int new_depth); +PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void); +PyAPI_FUNC(void) _PyEval_SetCoroutineWrapper(PyObject *); +PyAPI_FUNC(PyObject *) _PyEval_GetCoroutineWrapper(void); +PyAPI_FUNC(void) _PyEval_SetAsyncGenFirstiter(PyObject *); +PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void); +PyAPI_FUNC(void) _PyEval_SetAsyncGenFinalizer(PyObject *); +PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void); +#endif + +struct _frame; /* Avoid including frameobject.h */ + +PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void); +PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void); +PyAPI_FUNC(PyObject *) PyEval_GetLocals(void); +PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void); + +#ifndef Py_LIMITED_API +/* Helper to look up a builtin object */ +PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *); +/* Look at the current frame's (if any) code's co_flags, and turn on + the corresponding compiler flags in cf->cf_flags. Return 1 if any + flag was set, else return 0. */ +PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf); +#endif + +PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg); +PyAPI_FUNC(void) _PyEval_SignalReceived(void); +PyAPI_FUNC(int) Py_MakePendingCalls(void); + +/* Protection against deeply nested recursive calls + + In Python 3.0, this protection has two levels: + * normal anti-recursion protection is triggered when the recursion level + exceeds the current recursion limit. It raises a RecursionError, and sets + the "overflowed" flag in the thread state structure. This flag + temporarily *disables* the normal protection; this allows cleanup code + to potentially outgrow the recursion limit while processing the + RecursionError. + * "last chance" anti-recursion protection is triggered when the recursion + level exceeds "current recursion limit + 50". By construction, this + protection can only be triggered when the "overflowed" flag is set. It + means the cleanup code has itself gone into an infinite loop, or the + RecursionError has been mistakingly ignored. When this protection is + triggered, the interpreter aborts with a Fatal Error. + + In addition, the "overflowed" flag is automatically reset when the + recursion level drops below "current recursion limit - 50". This heuristic + is meant to ensure that the normal anti-recursion protection doesn't get + disabled too long. + + Please note: this scheme has its own limitations. See: + http://mail.python.org/pipermail/python-dev/2008-August/082106.html + for some observations. +*/ +PyAPI_FUNC(void) Py_SetRecursionLimit(int); +PyAPI_FUNC(int) Py_GetRecursionLimit(void); + +#define Py_EnterRecursiveCall(where) \ + (_Py_MakeRecCheck(PyThreadState_GET()->recursion_depth) && \ + _Py_CheckRecursiveCall(where)) +#define Py_LeaveRecursiveCall() \ + do{ if(_Py_MakeEndRecCheck(PyThreadState_GET()->recursion_depth)) \ + PyThreadState_GET()->overflowed = 0; \ + } while(0) +PyAPI_FUNC(int) _Py_CheckRecursiveCall(const char *where); + +/* Due to the macros in which it's used, _Py_CheckRecursionLimit is in + the stable ABI. It should be removed therefrom when possible. +*/ +PyAPI_DATA(int) _Py_CheckRecursionLimit; + +#ifdef USE_STACKCHECK +/* With USE_STACKCHECK, trigger stack checks in _Py_CheckRecursiveCall() + on every 64th call to Py_EnterRecursiveCall. +*/ +# define _Py_MakeRecCheck(x) \ + (++(x) > _Py_CheckRecursionLimit || \ + ++(PyThreadState_GET()->stackcheck_counter) > 64) +#else +# define _Py_MakeRecCheck(x) (++(x) > _Py_CheckRecursionLimit) +#endif + +/* Compute the "lower-water mark" for a recursion limit. When + * Py_LeaveRecursiveCall() is called with a recursion depth below this mark, + * the overflowed flag is reset to 0. */ +#define _Py_RecursionLimitLowerWaterMark(limit) \ + (((limit) > 200) \ + ? ((limit) - 50) \ + : (3 * ((limit) >> 2))) + +#define _Py_MakeEndRecCheck(x) \ + (--(x) < _Py_RecursionLimitLowerWaterMark(_Py_CheckRecursionLimit)) + +#define Py_ALLOW_RECURSION \ + do { unsigned char _old = PyThreadState_GET()->recursion_critical;\ + PyThreadState_GET()->recursion_critical = 1; + +#define Py_END_ALLOW_RECURSION \ + PyThreadState_GET()->recursion_critical = _old; \ + } while(0); + +PyAPI_FUNC(const char *) PyEval_GetFuncName(PyObject *); +PyAPI_FUNC(const char *) PyEval_GetFuncDesc(PyObject *); + +PyAPI_FUNC(PyObject *) PyEval_EvalFrame(struct _frame *); +PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(struct _frame *f, int exc); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc); +#endif + +/* Interface for threads. + + A module that plans to do a blocking system call (or something else + that lasts a long time and doesn't touch Python data) can allow other + threads to run as follows: + + ...preparations here... + Py_BEGIN_ALLOW_THREADS + ...blocking system call here... + Py_END_ALLOW_THREADS + ...interpret result here... + + The Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS pair expands to a + {}-surrounded block. + To leave the block in the middle (e.g., with return), you must insert + a line containing Py_BLOCK_THREADS before the return, e.g. + + if (...premature_exit...) { + Py_BLOCK_THREADS + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } + + An alternative is: + + Py_BLOCK_THREADS + if (...premature_exit...) { + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } + Py_UNBLOCK_THREADS + + For convenience, that the value of 'errno' is restored across + Py_END_ALLOW_THREADS and Py_BLOCK_THREADS. + + WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND + Py_END_ALLOW_THREADS!!! + + The function PyEval_InitThreads() should be called only from + init_thread() in "_threadmodule.c". + + Note that not yet all candidates have been converted to use this + mechanism! +*/ + +PyAPI_FUNC(PyThreadState *) PyEval_SaveThread(void); +PyAPI_FUNC(void) PyEval_RestoreThread(PyThreadState *); + +PyAPI_FUNC(int) PyEval_ThreadsInitialized(void); +PyAPI_FUNC(void) PyEval_InitThreads(void); +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _PyEval_FiniThreads(void); +#endif /* !Py_LIMITED_API */ +PyAPI_FUNC(void) PyEval_AcquireLock(void) Py_DEPRECATED(3.2); +PyAPI_FUNC(void) PyEval_ReleaseLock(void) /* Py_DEPRECATED(3.2) */; +PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate); +PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate); +PyAPI_FUNC(void) PyEval_ReInitThreads(void); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds); +PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void); +#endif + +#ifndef Py_LIMITED_API +PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc); +#endif + +#define Py_BEGIN_ALLOW_THREADS { \ + PyThreadState *_save; \ + _save = PyEval_SaveThread(); +#define Py_BLOCK_THREADS PyEval_RestoreThread(_save); +#define Py_UNBLOCK_THREADS _save = PyEval_SaveThread(); +#define Py_END_ALLOW_THREADS PyEval_RestoreThread(_save); \ + } + +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *); +PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *); +PyAPI_FUNC(void) _PyEval_SignalAsyncExc(void); +#endif + +/* Masks and values used by FORMAT_VALUE opcode. */ +#define FVC_MASK 0x3 +#define FVC_NONE 0x0 +#define FVC_STR 0x1 +#define FVC_REPR 0x2 +#define FVC_ASCII 0x3 +#define FVS_MASK 0x4 +#define FVS_HAVE_SPEC 0x4 + +#ifdef __cplusplus +} +#endif +#endif /* !Py_CEVAL_H */ diff --git a/my_env/Include/classobject.h b/my_env/Include/classobject.h new file mode 100644 index 000000000..209f0f4a2 --- /dev/null +++ b/my_env/Include/classobject.h @@ -0,0 +1,58 @@ +/* Former class object interface -- now only bound methods are here */ + +/* Revealing some structures (not for general use) */ + +#ifndef Py_LIMITED_API +#ifndef Py_CLASSOBJECT_H +#define Py_CLASSOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + PyObject_HEAD + PyObject *im_func; /* The callable object implementing the method */ + PyObject *im_self; /* The instance it is bound to */ + PyObject *im_weakreflist; /* List of weak references */ +} PyMethodObject; + +PyAPI_DATA(PyTypeObject) PyMethod_Type; + +#define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type) + +PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *); + +PyAPI_FUNC(PyObject *) PyMethod_Function(PyObject *); +PyAPI_FUNC(PyObject *) PyMethod_Self(PyObject *); + +/* Macros for direct access to these values. Type checks are *not* + done, so use with care. */ +#define PyMethod_GET_FUNCTION(meth) \ + (((PyMethodObject *)meth) -> im_func) +#define PyMethod_GET_SELF(meth) \ + (((PyMethodObject *)meth) -> im_self) + +PyAPI_FUNC(int) PyMethod_ClearFreeList(void); + +typedef struct { + PyObject_HEAD + PyObject *func; +} PyInstanceMethodObject; + +PyAPI_DATA(PyTypeObject) PyInstanceMethod_Type; + +#define PyInstanceMethod_Check(op) ((op)->ob_type == &PyInstanceMethod_Type) + +PyAPI_FUNC(PyObject *) PyInstanceMethod_New(PyObject *); +PyAPI_FUNC(PyObject *) PyInstanceMethod_Function(PyObject *); + +/* Macros for direct access to these values. Type checks are *not* + done, so use with care. */ +#define PyInstanceMethod_GET_FUNCTION(meth) \ + (((PyInstanceMethodObject *)meth) -> func) + +#ifdef __cplusplus +} +#endif +#endif /* !Py_CLASSOBJECT_H */ +#endif /* Py_LIMITED_API */ diff --git a/my_env/Include/code.h b/my_env/Include/code.h new file mode 100644 index 000000000..2e661e8b3 --- /dev/null +++ b/my_env/Include/code.h @@ -0,0 +1,157 @@ +/* Definitions for bytecode */ + +#ifndef Py_LIMITED_API +#ifndef Py_CODE_H +#define Py_CODE_H +#ifdef __cplusplus +extern "C" { +#endif + +typedef uint16_t _Py_CODEUNIT; + +#ifdef WORDS_BIGENDIAN +# define _Py_OPCODE(word) ((word) >> 8) +# define _Py_OPARG(word) ((word) & 255) +#else +# define _Py_OPCODE(word) ((word) & 255) +# define _Py_OPARG(word) ((word) >> 8) +#endif + +/* Bytecode object */ +typedef struct { + PyObject_HEAD + int co_argcount; /* #arguments, except *args */ + int co_kwonlyargcount; /* #keyword only arguments */ + int co_nlocals; /* #local variables */ + int co_stacksize; /* #entries needed for evaluation stack */ + int co_flags; /* CO_..., see below */ + int co_firstlineno; /* first source line number */ + PyObject *co_code; /* instruction opcodes */ + PyObject *co_consts; /* list (constants used) */ + PyObject *co_names; /* list of strings (names used) */ + PyObject *co_varnames; /* tuple of strings (local variable names) */ + PyObject *co_freevars; /* tuple of strings (free variable names) */ + PyObject *co_cellvars; /* tuple of strings (cell variable names) */ + /* The rest aren't used in either hash or comparisons, except for co_name, + used in both. This is done to preserve the name and line number + for tracebacks and debuggers; otherwise, constant de-duplication + would collapse identical functions/lambdas defined on different lines. + */ + Py_ssize_t *co_cell2arg; /* Maps cell vars which are arguments. */ + PyObject *co_filename; /* unicode (where it was loaded from) */ + PyObject *co_name; /* unicode (name, for reference) */ + PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See + Objects/lnotab_notes.txt for details. */ + void *co_zombieframe; /* for optimization only (see frameobject.c) */ + PyObject *co_weakreflist; /* to support weakrefs to code objects */ + /* Scratch space for extra data relating to the code object. + Type is a void* to keep the format private in codeobject.c to force + people to go through the proper APIs. */ + void *co_extra; +} PyCodeObject; + +/* Masks for co_flags above */ +#define CO_OPTIMIZED 0x0001 +#define CO_NEWLOCALS 0x0002 +#define CO_VARARGS 0x0004 +#define CO_VARKEYWORDS 0x0008 +#define CO_NESTED 0x0010 +#define CO_GENERATOR 0x0020 +/* The CO_NOFREE flag is set if there are no free or cell variables. + This information is redundant, but it allows a single flag test + to determine whether there is any extra work to be done when the + call frame it setup. +*/ +#define CO_NOFREE 0x0040 + +/* The CO_COROUTINE flag is set for coroutine functions (defined with + ``async def`` keywords) */ +#define CO_COROUTINE 0x0080 +#define CO_ITERABLE_COROUTINE 0x0100 +#define CO_ASYNC_GENERATOR 0x0200 + +/* These are no longer used. */ +#if 0 +#define CO_GENERATOR_ALLOWED 0x1000 +#endif +#define CO_FUTURE_DIVISION 0x2000 +#define CO_FUTURE_ABSOLUTE_IMPORT 0x4000 /* do absolute imports by default */ +#define CO_FUTURE_WITH_STATEMENT 0x8000 +#define CO_FUTURE_PRINT_FUNCTION 0x10000 +#define CO_FUTURE_UNICODE_LITERALS 0x20000 + +#define CO_FUTURE_BARRY_AS_BDFL 0x40000 +#define CO_FUTURE_GENERATOR_STOP 0x80000 +#define CO_FUTURE_ANNOTATIONS 0x100000 + +/* This value is found in the co_cell2arg array when the associated cell + variable does not correspond to an argument. */ +#define CO_CELL_NOT_AN_ARG (-1) + +/* This should be defined if a future statement modifies the syntax. + For example, when a keyword is added. +*/ +#define PY_PARSER_REQUIRES_FUTURE_KEYWORD + +#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */ + +PyAPI_DATA(PyTypeObject) PyCode_Type; + +#define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type) +#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars)) + +/* Public interface */ +PyAPI_FUNC(PyCodeObject *) PyCode_New( + int, int, int, int, int, PyObject *, PyObject *, + PyObject *, PyObject *, PyObject *, PyObject *, + PyObject *, PyObject *, int, PyObject *); + /* same as struct above */ + +/* Creates a new empty code object with the specified source location. */ +PyAPI_FUNC(PyCodeObject *) +PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno); + +/* Return the line number associated with the specified bytecode index + in this code object. If you just need the line number of a frame, + use PyFrame_GetLineNumber() instead. */ +PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int); + +/* for internal use only */ +typedef struct _addr_pair { + int ap_lower; + int ap_upper; +} PyAddrPair; + +#ifndef Py_LIMITED_API +/* Update *bounds to describe the first and one-past-the-last instructions in the + same line as lasti. Return the number of that line. +*/ +PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co, + int lasti, PyAddrPair *bounds); + +/* Create a comparable key used to compare constants taking in account the + * object type. It is used to make sure types are not coerced (e.g., float and + * complex) _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms + * + * Return (type(obj), obj, ...): a tuple with variable size (at least 2 items) + * depending on the type and the value. The type is the first item to not + * compare bytes and str which can raise a BytesWarning exception. */ +PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj); +#endif + +PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts, + PyObject *names, PyObject *lnotab); + + +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyCode_GetExtra(PyObject *code, Py_ssize_t index, + void **extra); +PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index, + void *extra); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_CODE_H */ +#endif /* Py_LIMITED_API */ diff --git a/my_env/Include/codecs.h b/my_env/Include/codecs.h new file mode 100644 index 000000000..3ad0f2b5a --- /dev/null +++ b/my_env/Include/codecs.h @@ -0,0 +1,240 @@ +#ifndef Py_CODECREGISTRY_H +#define Py_CODECREGISTRY_H +#ifdef __cplusplus +extern "C" { +#endif + +/* ------------------------------------------------------------------------ + + Python Codec Registry and support functions + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +Copyright (c) Corporation for National Research Initiatives. + + ------------------------------------------------------------------------ */ + +/* Register a new codec search function. + + As side effect, this tries to load the encodings package, if not + yet done, to make sure that it is always first in the list of + search functions. + + The search_function's refcount is incremented by this function. */ + +PyAPI_FUNC(int) PyCodec_Register( + PyObject *search_function + ); + +/* Codec registry lookup API. + + Looks up the given encoding and returns a CodecInfo object with + function attributes which implement the different aspects of + processing the encoding. + + The encoding string is looked up converted to all lower-case + characters. This makes encodings looked up through this mechanism + effectively case-insensitive. + + If no codec is found, a KeyError is set and NULL returned. + + As side effect, this tries to load the encodings package, if not + yet done. This is part of the lazy load strategy for the encodings + package. + + */ + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyCodec_Lookup( + const char *encoding + ); + +PyAPI_FUNC(int) _PyCodec_Forget( + const char *encoding + ); +#endif + +/* Codec registry encoding check API. + + Returns 1/0 depending on whether there is a registered codec for + the given encoding. + +*/ + +PyAPI_FUNC(int) PyCodec_KnownEncoding( + const char *encoding + ); + +/* Generic codec based encoding API. + + object is passed through the encoder function found for the given + encoding using the error handling method defined by errors. errors + may be NULL to use the default method defined for the codec. + + Raises a LookupError in case no encoder can be found. + + */ + +PyAPI_FUNC(PyObject *) PyCodec_Encode( + PyObject *object, + const char *encoding, + const char *errors + ); + +/* Generic codec based decoding API. + + object is passed through the decoder function found for the given + encoding using the error handling method defined by errors. errors + may be NULL to use the default method defined for the codec. + + Raises a LookupError in case no encoder can be found. + + */ + +PyAPI_FUNC(PyObject *) PyCodec_Decode( + PyObject *object, + const char *encoding, + const char *errors + ); + +#ifndef Py_LIMITED_API +/* Text codec specific encoding and decoding API. + + Checks the encoding against a list of codecs which do not + implement a str<->bytes encoding before attempting the + operation. + + Please note that these APIs are internal and should not + be used in Python C extensions. + + XXX (ncoghlan): should we make these, or something like them, public + in Python 3.5+? + + */ +PyAPI_FUNC(PyObject *) _PyCodec_LookupTextEncoding( + const char *encoding, + const char *alternate_command + ); + +PyAPI_FUNC(PyObject *) _PyCodec_EncodeText( + PyObject *object, + const char *encoding, + const char *errors + ); + +PyAPI_FUNC(PyObject *) _PyCodec_DecodeText( + PyObject *object, + const char *encoding, + const char *errors + ); + +/* These two aren't actually text encoding specific, but _io.TextIOWrapper + * is the only current API consumer. + */ +PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalDecoder( + PyObject *codec_info, + const char *errors + ); + +PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalEncoder( + PyObject *codec_info, + const char *errors + ); +#endif + + + +/* --- Codec Lookup APIs -------------------------------------------------- + + All APIs return a codec object with incremented refcount and are + based on _PyCodec_Lookup(). The same comments w/r to the encoding + name also apply to these APIs. + +*/ + +/* Get an encoder function for the given encoding. */ + +PyAPI_FUNC(PyObject *) PyCodec_Encoder( + const char *encoding + ); + +/* Get a decoder function for the given encoding. */ + +PyAPI_FUNC(PyObject *) PyCodec_Decoder( + const char *encoding + ); + +/* Get an IncrementalEncoder object for the given encoding. */ + +PyAPI_FUNC(PyObject *) PyCodec_IncrementalEncoder( + const char *encoding, + const char *errors + ); + +/* Get an IncrementalDecoder object function for the given encoding. */ + +PyAPI_FUNC(PyObject *) PyCodec_IncrementalDecoder( + const char *encoding, + const char *errors + ); + +/* Get a StreamReader factory function for the given encoding. */ + +PyAPI_FUNC(PyObject *) PyCodec_StreamReader( + const char *encoding, + PyObject *stream, + const char *errors + ); + +/* Get a StreamWriter factory function for the given encoding. */ + +PyAPI_FUNC(PyObject *) PyCodec_StreamWriter( + const char *encoding, + PyObject *stream, + const char *errors + ); + +/* Unicode encoding error handling callback registry API */ + +/* Register the error handling callback function error under the given + name. This function will be called by the codec when it encounters + unencodable characters/undecodable bytes and doesn't know the + callback name, when name is specified as the error parameter + in the call to the encode/decode function. + Return 0 on success, -1 on error */ +PyAPI_FUNC(int) PyCodec_RegisterError(const char *name, PyObject *error); + +/* Lookup the error handling callback function registered under the given + name. As a special case NULL can be passed, in which case + the error handling callback for "strict" will be returned. */ +PyAPI_FUNC(PyObject *) PyCodec_LookupError(const char *name); + +/* raise exc as an exception */ +PyAPI_FUNC(PyObject *) PyCodec_StrictErrors(PyObject *exc); + +/* ignore the unicode error, skipping the faulty input */ +PyAPI_FUNC(PyObject *) PyCodec_IgnoreErrors(PyObject *exc); + +/* replace the unicode encode error with ? or U+FFFD */ +PyAPI_FUNC(PyObject *) PyCodec_ReplaceErrors(PyObject *exc); + +/* replace the unicode encode error with XML character references */ +PyAPI_FUNC(PyObject *) PyCodec_XMLCharRefReplaceErrors(PyObject *exc); + +/* replace the unicode encode error with backslash escapes (\x, \u and \U) */ +PyAPI_FUNC(PyObject *) PyCodec_BackslashReplaceErrors(PyObject *exc); + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +/* replace the unicode encode error with backslash escapes (\N, \x, \u and \U) */ +PyAPI_FUNC(PyObject *) PyCodec_NameReplaceErrors(PyObject *exc); +#endif + +#ifndef Py_LIMITED_API +PyAPI_DATA(const char *) Py_hexdigits; +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_CODECREGISTRY_H */ diff --git a/my_env/Include/compile.h b/my_env/Include/compile.h new file mode 100644 index 000000000..edb961f4d --- /dev/null +++ b/my_env/Include/compile.h @@ -0,0 +1,93 @@ +#ifndef Py_COMPILE_H +#define Py_COMPILE_H + +#ifndef Py_LIMITED_API +#include "code.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Public interface */ +struct _node; /* Declare the existence of this type */ +PyAPI_FUNC(PyCodeObject *) PyNode_Compile(struct _node *, const char *); +/* XXX (ncoghlan): Unprefixed type name in a public API! */ + +#define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \ + CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \ + CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | \ + CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS) +#define PyCF_MASK_OBSOLETE (CO_NESTED) +#define PyCF_SOURCE_IS_UTF8 0x0100 +#define PyCF_DONT_IMPLY_DEDENT 0x0200 +#define PyCF_ONLY_AST 0x0400 +#define PyCF_IGNORE_COOKIE 0x0800 + +#ifndef Py_LIMITED_API +typedef struct { + int cf_flags; /* bitmask of CO_xxx flags relevant to future */ +} PyCompilerFlags; +#endif + +/* Future feature support */ + +typedef struct { + int ff_features; /* flags set by future statements */ + int ff_lineno; /* line number of last future statement */ +} PyFutureFeatures; + +#define FUTURE_NESTED_SCOPES "nested_scopes" +#define FUTURE_GENERATORS "generators" +#define FUTURE_DIVISION "division" +#define FUTURE_ABSOLUTE_IMPORT "absolute_import" +#define FUTURE_WITH_STATEMENT "with_statement" +#define FUTURE_PRINT_FUNCTION "print_function" +#define FUTURE_UNICODE_LITERALS "unicode_literals" +#define FUTURE_BARRY_AS_BDFL "barry_as_FLUFL" +#define FUTURE_GENERATOR_STOP "generator_stop" +#define FUTURE_ANNOTATIONS "annotations" + +struct _mod; /* Declare the existence of this type */ +#define PyAST_Compile(mod, s, f, ar) PyAST_CompileEx(mod, s, f, -1, ar) +PyAPI_FUNC(PyCodeObject *) PyAST_CompileEx( + struct _mod *mod, + const char *filename, /* decoded from the filesystem encoding */ + PyCompilerFlags *flags, + int optimize, + PyArena *arena); +PyAPI_FUNC(PyCodeObject *) PyAST_CompileObject( + struct _mod *mod, + PyObject *filename, + PyCompilerFlags *flags, + int optimize, + PyArena *arena); +PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST( + struct _mod * mod, + const char *filename /* decoded from the filesystem encoding */ + ); +PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromASTObject( + struct _mod * mod, + PyObject *filename + ); + +/* _Py_Mangle is defined in compile.c */ +PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name); + +#define PY_INVALID_STACK_EFFECT INT_MAX +PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg); + +PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, int optimize); + +#ifdef __cplusplus +} +#endif + +#endif /* !Py_LIMITED_API */ + +/* These definitions must match corresponding definitions in graminit.h. + There's code in compile.c that checks that they are the same. */ +#define Py_single_input 256 +#define Py_file_input 257 +#define Py_eval_input 258 + +#endif /* !Py_COMPILE_H */ diff --git a/my_env/Include/complexobject.h b/my_env/Include/complexobject.h new file mode 100644 index 000000000..cb8c52c58 --- /dev/null +++ b/my_env/Include/complexobject.h @@ -0,0 +1,69 @@ +/* Complex number structure */ + +#ifndef Py_COMPLEXOBJECT_H +#define Py_COMPLEXOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API +typedef struct { + double real; + double imag; +} Py_complex; + +/* Operations on complex numbers from complexmodule.c */ + +PyAPI_FUNC(Py_complex) _Py_c_sum(Py_complex, Py_complex); +PyAPI_FUNC(Py_complex) _Py_c_diff(Py_complex, Py_complex); +PyAPI_FUNC(Py_complex) _Py_c_neg(Py_complex); +PyAPI_FUNC(Py_complex) _Py_c_prod(Py_complex, Py_complex); +PyAPI_FUNC(Py_complex) _Py_c_quot(Py_complex, Py_complex); +PyAPI_FUNC(Py_complex) _Py_c_pow(Py_complex, Py_complex); +PyAPI_FUNC(double) _Py_c_abs(Py_complex); +#endif + +/* Complex object interface */ + +/* +PyComplexObject represents a complex number with double-precision +real and imaginary parts. +*/ +#ifndef Py_LIMITED_API +typedef struct { + PyObject_HEAD + Py_complex cval; +} PyComplexObject; +#endif + +PyAPI_DATA(PyTypeObject) PyComplex_Type; + +#define PyComplex_Check(op) PyObject_TypeCheck(op, &PyComplex_Type) +#define PyComplex_CheckExact(op) (Py_TYPE(op) == &PyComplex_Type) + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) PyComplex_FromCComplex(Py_complex); +#endif +PyAPI_FUNC(PyObject *) PyComplex_FromDoubles(double real, double imag); + +PyAPI_FUNC(double) PyComplex_RealAsDouble(PyObject *op); +PyAPI_FUNC(double) PyComplex_ImagAsDouble(PyObject *op); +#ifndef Py_LIMITED_API +PyAPI_FUNC(Py_complex) PyComplex_AsCComplex(PyObject *op); +#endif + +/* Format the object based on the format_spec, as defined in PEP 3101 + (Advanced String Formatting). */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyComplex_FormatAdvancedWriter( + _PyUnicodeWriter *writer, + PyObject *obj, + PyObject *format_spec, + Py_ssize_t start, + Py_ssize_t end); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_COMPLEXOBJECT_H */ diff --git a/my_env/Include/context.h b/my_env/Include/context.h new file mode 100644 index 000000000..958128524 --- /dev/null +++ b/my_env/Include/context.h @@ -0,0 +1,84 @@ +#ifndef Py_CONTEXT_H +#define Py_CONTEXT_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API + + +PyAPI_DATA(PyTypeObject) PyContext_Type; +typedef struct _pycontextobject PyContext; + +PyAPI_DATA(PyTypeObject) PyContextVar_Type; +typedef struct _pycontextvarobject PyContextVar; + +PyAPI_DATA(PyTypeObject) PyContextToken_Type; +typedef struct _pycontexttokenobject PyContextToken; + + +#define PyContext_CheckExact(o) (Py_TYPE(o) == &PyContext_Type) +#define PyContextVar_CheckExact(o) (Py_TYPE(o) == &PyContextVar_Type) +#define PyContextToken_CheckExact(o) (Py_TYPE(o) == &PyContextToken_Type) + + +PyAPI_FUNC(PyObject *) PyContext_New(void); +PyAPI_FUNC(PyObject *) PyContext_Copy(PyObject *); +PyAPI_FUNC(PyObject *) PyContext_CopyCurrent(void); + +PyAPI_FUNC(int) PyContext_Enter(PyObject *); +PyAPI_FUNC(int) PyContext_Exit(PyObject *); + + +/* Create a new context variable. + + default_value can be NULL. +*/ +PyAPI_FUNC(PyObject *) PyContextVar_New( + const char *name, PyObject *default_value); + + +/* Get a value for the variable. + + Returns -1 if an error occurred during lookup. + + Returns 0 if value either was or was not found. + + If value was found, *value will point to it. + If not, it will point to: + + - default_value, if not NULL; + - the default value of "var", if not NULL; + - NULL. + + '*value' will be a new ref, if not NULL. +*/ +PyAPI_FUNC(int) PyContextVar_Get( + PyObject *var, PyObject *default_value, PyObject **value); + + +/* Set a new value for the variable. + Returns NULL if an error occurs. +*/ +PyAPI_FUNC(PyObject *) PyContextVar_Set(PyObject *var, PyObject *value); + + +/* Reset a variable to its previous value. + Returns 0 on success, -1 on error. +*/ +PyAPI_FUNC(int) PyContextVar_Reset(PyObject *var, PyObject *token); + + +/* This method is exposed only for CPython tests. Don not use it. */ +PyAPI_FUNC(PyObject *) _PyContext_NewHamtForTests(void); + + +PyAPI_FUNC(int) PyContext_ClearFreeList(void); + + +#endif /* !Py_LIMITED_API */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_CONTEXT_H */ diff --git a/my_env/Include/datetime.h b/my_env/Include/datetime.h new file mode 100644 index 000000000..059d5ecf7 --- /dev/null +++ b/my_env/Include/datetime.h @@ -0,0 +1,273 @@ +/* datetime.h + */ +#ifndef Py_LIMITED_API +#ifndef DATETIME_H +#define DATETIME_H +#ifdef __cplusplus +extern "C" { +#endif + +/* Fields are packed into successive bytes, each viewed as unsigned and + * big-endian, unless otherwise noted: + * + * byte offset + * 0 year 2 bytes, 1-9999 + * 2 month 1 byte, 1-12 + * 3 day 1 byte, 1-31 + * 4 hour 1 byte, 0-23 + * 5 minute 1 byte, 0-59 + * 6 second 1 byte, 0-59 + * 7 usecond 3 bytes, 0-999999 + * 10 + */ + +/* # of bytes for year, month, and day. */ +#define _PyDateTime_DATE_DATASIZE 4 + +/* # of bytes for hour, minute, second, and usecond. */ +#define _PyDateTime_TIME_DATASIZE 6 + +/* # of bytes for year, month, day, hour, minute, second, and usecond. */ +#define _PyDateTime_DATETIME_DATASIZE 10 + + +typedef struct +{ + PyObject_HEAD + Py_hash_t hashcode; /* -1 when unknown */ + int days; /* -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS */ + int seconds; /* 0 <= seconds < 24*3600 is invariant */ + int microseconds; /* 0 <= microseconds < 1000000 is invariant */ +} PyDateTime_Delta; + +typedef struct +{ + PyObject_HEAD /* a pure abstract base class */ +} PyDateTime_TZInfo; + + +/* The datetime and time types have hashcodes, and an optional tzinfo member, + * present if and only if hastzinfo is true. + */ +#define _PyTZINFO_HEAD \ + PyObject_HEAD \ + Py_hash_t hashcode; \ + char hastzinfo; /* boolean flag */ + +/* No _PyDateTime_BaseTZInfo is allocated; it's just to have something + * convenient to cast to, when getting at the hastzinfo member of objects + * starting with _PyTZINFO_HEAD. + */ +typedef struct +{ + _PyTZINFO_HEAD +} _PyDateTime_BaseTZInfo; + +/* All time objects are of PyDateTime_TimeType, but that can be allocated + * in two ways, with or without a tzinfo member. Without is the same as + * tzinfo == None, but consumes less memory. _PyDateTime_BaseTime is an + * internal struct used to allocate the right amount of space for the + * "without" case. + */ +#define _PyDateTime_TIMEHEAD \ + _PyTZINFO_HEAD \ + unsigned char data[_PyDateTime_TIME_DATASIZE]; + +typedef struct +{ + _PyDateTime_TIMEHEAD +} _PyDateTime_BaseTime; /* hastzinfo false */ + +typedef struct +{ + _PyDateTime_TIMEHEAD + unsigned char fold; + PyObject *tzinfo; +} PyDateTime_Time; /* hastzinfo true */ + + +/* All datetime objects are of PyDateTime_DateTimeType, but that can be + * allocated in two ways too, just like for time objects above. In addition, + * the plain date type is a base class for datetime, so it must also have + * a hastzinfo member (although it's unused there). + */ +typedef struct +{ + _PyTZINFO_HEAD + unsigned char data[_PyDateTime_DATE_DATASIZE]; +} PyDateTime_Date; + +#define _PyDateTime_DATETIMEHEAD \ + _PyTZINFO_HEAD \ + unsigned char data[_PyDateTime_DATETIME_DATASIZE]; + +typedef struct +{ + _PyDateTime_DATETIMEHEAD +} _PyDateTime_BaseDateTime; /* hastzinfo false */ + +typedef struct +{ + _PyDateTime_DATETIMEHEAD + unsigned char fold; + PyObject *tzinfo; +} PyDateTime_DateTime; /* hastzinfo true */ + + +/* Apply for date and datetime instances. */ +#define PyDateTime_GET_YEAR(o) ((((PyDateTime_Date*)o)->data[0] << 8) | \ + ((PyDateTime_Date*)o)->data[1]) +#define PyDateTime_GET_MONTH(o) (((PyDateTime_Date*)o)->data[2]) +#define PyDateTime_GET_DAY(o) (((PyDateTime_Date*)o)->data[3]) + +#define PyDateTime_DATE_GET_HOUR(o) (((PyDateTime_DateTime*)o)->data[4]) +#define PyDateTime_DATE_GET_MINUTE(o) (((PyDateTime_DateTime*)o)->data[5]) +#define PyDateTime_DATE_GET_SECOND(o) (((PyDateTime_DateTime*)o)->data[6]) +#define PyDateTime_DATE_GET_MICROSECOND(o) \ + ((((PyDateTime_DateTime*)o)->data[7] << 16) | \ + (((PyDateTime_DateTime*)o)->data[8] << 8) | \ + ((PyDateTime_DateTime*)o)->data[9]) +#define PyDateTime_DATE_GET_FOLD(o) (((PyDateTime_DateTime*)o)->fold) + +/* Apply for time instances. */ +#define PyDateTime_TIME_GET_HOUR(o) (((PyDateTime_Time*)o)->data[0]) +#define PyDateTime_TIME_GET_MINUTE(o) (((PyDateTime_Time*)o)->data[1]) +#define PyDateTime_TIME_GET_SECOND(o) (((PyDateTime_Time*)o)->data[2]) +#define PyDateTime_TIME_GET_MICROSECOND(o) \ + ((((PyDateTime_Time*)o)->data[3] << 16) | \ + (((PyDateTime_Time*)o)->data[4] << 8) | \ + ((PyDateTime_Time*)o)->data[5]) +#define PyDateTime_TIME_GET_FOLD(o) (((PyDateTime_Time*)o)->fold) + +/* Apply for time delta instances */ +#define PyDateTime_DELTA_GET_DAYS(o) (((PyDateTime_Delta*)o)->days) +#define PyDateTime_DELTA_GET_SECONDS(o) (((PyDateTime_Delta*)o)->seconds) +#define PyDateTime_DELTA_GET_MICROSECONDS(o) \ + (((PyDateTime_Delta*)o)->microseconds) + + +/* Define structure for C API. */ +typedef struct { + /* type objects */ + PyTypeObject *DateType; + PyTypeObject *DateTimeType; + PyTypeObject *TimeType; + PyTypeObject *DeltaType; + PyTypeObject *TZInfoType; + + /* singletons */ + PyObject *TimeZone_UTC; + + /* constructors */ + PyObject *(*Date_FromDate)(int, int, int, PyTypeObject*); + PyObject *(*DateTime_FromDateAndTime)(int, int, int, int, int, int, int, + PyObject*, PyTypeObject*); + PyObject *(*Time_FromTime)(int, int, int, int, PyObject*, PyTypeObject*); + PyObject *(*Delta_FromDelta)(int, int, int, int, PyTypeObject*); + PyObject *(*TimeZone_FromTimeZone)(PyObject *offset, PyObject *name); + + /* constructors for the DB API */ + PyObject *(*DateTime_FromTimestamp)(PyObject*, PyObject*, PyObject*); + PyObject *(*Date_FromTimestamp)(PyObject*, PyObject*); + + /* PEP 495 constructors */ + PyObject *(*DateTime_FromDateAndTimeAndFold)(int, int, int, int, int, int, int, + PyObject*, int, PyTypeObject*); + PyObject *(*Time_FromTimeAndFold)(int, int, int, int, PyObject*, int, PyTypeObject*); + +} PyDateTime_CAPI; + +#define PyDateTime_CAPSULE_NAME "datetime.datetime_CAPI" + + +#ifdef Py_BUILD_CORE + +/* Macros for type checking when building the Python core. */ +#define PyDate_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateType) +#define PyDate_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateType) + +#define PyDateTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateTimeType) +#define PyDateTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateTimeType) + +#define PyTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_TimeType) +#define PyTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TimeType) + +#define PyDelta_Check(op) PyObject_TypeCheck(op, &PyDateTime_DeltaType) +#define PyDelta_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DeltaType) + +#define PyTZInfo_Check(op) PyObject_TypeCheck(op, &PyDateTime_TZInfoType) +#define PyTZInfo_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TZInfoType) + +#else + +/* Define global variable for the C API and a macro for setting it. */ +static PyDateTime_CAPI *PyDateTimeAPI = NULL; + +#define PyDateTime_IMPORT \ + PyDateTimeAPI = (PyDateTime_CAPI *)PyCapsule_Import(PyDateTime_CAPSULE_NAME, 0) + +/* Macro for access to the UTC singleton */ +#define PyDateTime_TimeZone_UTC PyDateTimeAPI->TimeZone_UTC + +/* Macros for type checking when not building the Python core. */ +#define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType) +#define PyDate_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateType) + +#define PyDateTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateTimeType) +#define PyDateTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateTimeType) + +#define PyTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TimeType) +#define PyTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TimeType) + +#define PyDelta_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DeltaType) +#define PyDelta_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DeltaType) + +#define PyTZInfo_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TZInfoType) +#define PyTZInfo_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TZInfoType) + +/* Macros for accessing constructors in a simplified fashion. */ +#define PyDate_FromDate(year, month, day) \ + PyDateTimeAPI->Date_FromDate(year, month, day, PyDateTimeAPI->DateType) + +#define PyDateTime_FromDateAndTime(year, month, day, hour, min, sec, usec) \ + PyDateTimeAPI->DateTime_FromDateAndTime(year, month, day, hour, \ + min, sec, usec, Py_None, PyDateTimeAPI->DateTimeType) + +#define PyDateTime_FromDateAndTimeAndFold(year, month, day, hour, min, sec, usec, fold) \ + PyDateTimeAPI->DateTime_FromDateAndTimeAndFold(year, month, day, hour, \ + min, sec, usec, Py_None, fold, PyDateTimeAPI->DateTimeType) + +#define PyTime_FromTime(hour, minute, second, usecond) \ + PyDateTimeAPI->Time_FromTime(hour, minute, second, usecond, \ + Py_None, PyDateTimeAPI->TimeType) + +#define PyTime_FromTimeAndFold(hour, minute, second, usecond, fold) \ + PyDateTimeAPI->Time_FromTimeAndFold(hour, minute, second, usecond, \ + Py_None, fold, PyDateTimeAPI->TimeType) + +#define PyDelta_FromDSU(days, seconds, useconds) \ + PyDateTimeAPI->Delta_FromDelta(days, seconds, useconds, 1, \ + PyDateTimeAPI->DeltaType) + +#define PyTimeZone_FromOffset(offset) \ + PyDateTimeAPI->TimeZone_FromTimeZone(offset, NULL) + +#define PyTimeZone_FromOffsetAndName(offset, name) \ + PyDateTimeAPI->TimeZone_FromTimeZone(offset, name) + +/* Macros supporting the DB API. */ +#define PyDateTime_FromTimestamp(args) \ + PyDateTimeAPI->DateTime_FromTimestamp( \ + (PyObject*) (PyDateTimeAPI->DateTimeType), args, NULL) + +#define PyDate_FromTimestamp(args) \ + PyDateTimeAPI->Date_FromTimestamp( \ + (PyObject*) (PyDateTimeAPI->DateType), args) + +#endif /* Py_BUILD_CORE */ + +#ifdef __cplusplus +} +#endif +#endif +#endif /* !Py_LIMITED_API */ diff --git a/my_env/Include/descrobject.h b/my_env/Include/descrobject.h new file mode 100644 index 000000000..73bbb3fe5 --- /dev/null +++ b/my_env/Include/descrobject.h @@ -0,0 +1,110 @@ +/* Descriptors */ +#ifndef Py_DESCROBJECT_H +#define Py_DESCROBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +typedef PyObject *(*getter)(PyObject *, void *); +typedef int (*setter)(PyObject *, PyObject *, void *); + +typedef struct PyGetSetDef { + const char *name; + getter get; + setter set; + const char *doc; + void *closure; +} PyGetSetDef; + +#ifndef Py_LIMITED_API +typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args, + void *wrapped); + +typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args, + void *wrapped, PyObject *kwds); + +struct wrapperbase { + const char *name; + int offset; + void *function; + wrapperfunc wrapper; + const char *doc; + int flags; + PyObject *name_strobj; +}; + +/* Flags for above struct */ +#define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */ + +/* Various kinds of descriptor objects */ + +typedef struct { + PyObject_HEAD + PyTypeObject *d_type; + PyObject *d_name; + PyObject *d_qualname; +} PyDescrObject; + +#define PyDescr_COMMON PyDescrObject d_common + +#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type) +#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name) + +typedef struct { + PyDescr_COMMON; + PyMethodDef *d_method; +} PyMethodDescrObject; + +typedef struct { + PyDescr_COMMON; + struct PyMemberDef *d_member; +} PyMemberDescrObject; + +typedef struct { + PyDescr_COMMON; + PyGetSetDef *d_getset; +} PyGetSetDescrObject; + +typedef struct { + PyDescr_COMMON; + struct wrapperbase *d_base; + void *d_wrapped; /* This can be any function pointer */ +} PyWrapperDescrObject; +#endif /* Py_LIMITED_API */ + +PyAPI_DATA(PyTypeObject) PyClassMethodDescr_Type; +PyAPI_DATA(PyTypeObject) PyGetSetDescr_Type; +PyAPI_DATA(PyTypeObject) PyMemberDescr_Type; +PyAPI_DATA(PyTypeObject) PyMethodDescr_Type; +PyAPI_DATA(PyTypeObject) PyWrapperDescr_Type; +PyAPI_DATA(PyTypeObject) PyDictProxy_Type; +#ifndef Py_LIMITED_API +PyAPI_DATA(PyTypeObject) _PyMethodWrapper_Type; +#endif /* Py_LIMITED_API */ + +PyAPI_FUNC(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *); +PyAPI_FUNC(PyObject *) PyDescr_NewClassMethod(PyTypeObject *, PyMethodDef *); +struct PyMemberDef; /* forward declaration for following prototype */ +PyAPI_FUNC(PyObject *) PyDescr_NewMember(PyTypeObject *, + struct PyMemberDef *); +PyAPI_FUNC(PyObject *) PyDescr_NewGetSet(PyTypeObject *, + struct PyGetSetDef *); +#ifndef Py_LIMITED_API + +PyAPI_FUNC(PyObject *) _PyMethodDescr_FastCallKeywords( + PyObject *descrobj, PyObject *const *stack, Py_ssize_t nargs, PyObject *kwnames); +PyAPI_FUNC(PyObject *) PyDescr_NewWrapper(PyTypeObject *, + struct wrapperbase *, void *); +#define PyDescr_IsData(d) (Py_TYPE(d)->tp_descr_set != NULL) +#endif + +PyAPI_FUNC(PyObject *) PyDictProxy_New(PyObject *); +PyAPI_FUNC(PyObject *) PyWrapper_New(PyObject *, PyObject *); + + +PyAPI_DATA(PyTypeObject) PyProperty_Type; +#ifdef __cplusplus +} +#endif +#endif /* !Py_DESCROBJECT_H */ + diff --git a/my_env/Include/dictobject.h b/my_env/Include/dictobject.h new file mode 100644 index 000000000..28930f436 --- /dev/null +++ b/my_env/Include/dictobject.h @@ -0,0 +1,179 @@ +#ifndef Py_DICTOBJECT_H +#define Py_DICTOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + + +/* Dictionary object type -- mapping from hashable object to object */ + +/* The distribution includes a separate file, Objects/dictnotes.txt, + describing explorations into dictionary design and optimization. + It covers typical dictionary use patterns, the parameters for + tuning dictionaries, and several ideas for possible optimizations. +*/ + +#ifndef Py_LIMITED_API + +typedef struct _dictkeysobject PyDictKeysObject; + +/* The ma_values pointer is NULL for a combined table + * or points to an array of PyObject* for a split table + */ +typedef struct { + PyObject_HEAD + + /* Number of items in the dictionary */ + Py_ssize_t ma_used; + + /* Dictionary version: globally unique, value change each time + the dictionary is modified */ + uint64_t ma_version_tag; + + PyDictKeysObject *ma_keys; + + /* If ma_values is NULL, the table is "combined": keys and values + are stored in ma_keys. + + If ma_values is not NULL, the table is splitted: + keys are stored in ma_keys and values are stored in ma_values */ + PyObject **ma_values; +} PyDictObject; + +typedef struct { + PyObject_HEAD + PyDictObject *dv_dict; +} _PyDictViewObject; + +#endif /* Py_LIMITED_API */ + +PyAPI_DATA(PyTypeObject) PyDict_Type; +PyAPI_DATA(PyTypeObject) PyDictIterKey_Type; +PyAPI_DATA(PyTypeObject) PyDictIterValue_Type; +PyAPI_DATA(PyTypeObject) PyDictIterItem_Type; +PyAPI_DATA(PyTypeObject) PyDictKeys_Type; +PyAPI_DATA(PyTypeObject) PyDictItems_Type; +PyAPI_DATA(PyTypeObject) PyDictValues_Type; + +#define PyDict_Check(op) \ + PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS) +#define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type) +#define PyDictKeys_Check(op) PyObject_TypeCheck(op, &PyDictKeys_Type) +#define PyDictItems_Check(op) PyObject_TypeCheck(op, &PyDictItems_Type) +#define PyDictValues_Check(op) PyObject_TypeCheck(op, &PyDictValues_Type) +/* This excludes Values, since they are not sets. */ +# define PyDictViewSet_Check(op) \ + (PyDictKeys_Check(op) || PyDictItems_Check(op)) + + +PyAPI_FUNC(PyObject *) PyDict_New(void); +PyAPI_FUNC(PyObject *) PyDict_GetItem(PyObject *mp, PyObject *key); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyDict_GetItem_KnownHash(PyObject *mp, PyObject *key, + Py_hash_t hash); +#endif +PyAPI_FUNC(PyObject *) PyDict_GetItemWithError(PyObject *mp, PyObject *key); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyDict_GetItemIdWithError(PyObject *dp, + struct _Py_Identifier *key); +PyAPI_FUNC(PyObject *) PyDict_SetDefault( + PyObject *mp, PyObject *key, PyObject *defaultobj); +#endif +PyAPI_FUNC(int) PyDict_SetItem(PyObject *mp, PyObject *key, PyObject *item); +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyDict_SetItem_KnownHash(PyObject *mp, PyObject *key, + PyObject *item, Py_hash_t hash); +#endif +PyAPI_FUNC(int) PyDict_DelItem(PyObject *mp, PyObject *key); +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyDict_DelItem_KnownHash(PyObject *mp, PyObject *key, + Py_hash_t hash); +PyAPI_FUNC(int) _PyDict_DelItemIf(PyObject *mp, PyObject *key, + int (*predicate)(PyObject *value)); +#endif +PyAPI_FUNC(void) PyDict_Clear(PyObject *mp); +PyAPI_FUNC(int) PyDict_Next( + PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value); +#ifndef Py_LIMITED_API +PyDictKeysObject *_PyDict_NewKeysForClass(void); +PyAPI_FUNC(PyObject *) PyObject_GenericGetDict(PyObject *, void *); +PyAPI_FUNC(int) _PyDict_Next( + PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value, Py_hash_t *hash); +PyObject *_PyDictView_New(PyObject *, PyTypeObject *); +#endif +PyAPI_FUNC(PyObject *) PyDict_Keys(PyObject *mp); +PyAPI_FUNC(PyObject *) PyDict_Values(PyObject *mp); +PyAPI_FUNC(PyObject *) PyDict_Items(PyObject *mp); +PyAPI_FUNC(Py_ssize_t) PyDict_Size(PyObject *mp); +PyAPI_FUNC(PyObject *) PyDict_Copy(PyObject *mp); +PyAPI_FUNC(int) PyDict_Contains(PyObject *mp, PyObject *key); +#ifndef Py_LIMITED_API +/* Get the number of items of a dictionary. */ +#define PyDict_GET_SIZE(mp) (assert(PyDict_Check(mp)),((PyDictObject *)mp)->ma_used) +PyAPI_FUNC(int) _PyDict_Contains(PyObject *mp, PyObject *key, Py_hash_t hash); +PyAPI_FUNC(PyObject *) _PyDict_NewPresized(Py_ssize_t minused); +PyAPI_FUNC(void) _PyDict_MaybeUntrack(PyObject *mp); +PyAPI_FUNC(int) _PyDict_HasOnlyStringKeys(PyObject *mp); +Py_ssize_t _PyDict_KeysSize(PyDictKeysObject *keys); +PyAPI_FUNC(Py_ssize_t) _PyDict_SizeOf(PyDictObject *); +PyAPI_FUNC(PyObject *) _PyDict_Pop(PyObject *, PyObject *, PyObject *); +PyObject *_PyDict_Pop_KnownHash(PyObject *, PyObject *, Py_hash_t, PyObject *); +PyObject *_PyDict_FromKeys(PyObject *, PyObject *, PyObject *); +#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL) + +PyAPI_FUNC(int) PyDict_ClearFreeList(void); +#endif + +/* PyDict_Update(mp, other) is equivalent to PyDict_Merge(mp, other, 1). */ +PyAPI_FUNC(int) PyDict_Update(PyObject *mp, PyObject *other); + +/* PyDict_Merge updates/merges from a mapping object (an object that + supports PyMapping_Keys() and PyObject_GetItem()). If override is true, + the last occurrence of a key wins, else the first. The Python + dict.update(other) is equivalent to PyDict_Merge(dict, other, 1). +*/ +PyAPI_FUNC(int) PyDict_Merge(PyObject *mp, + PyObject *other, + int override); + +#ifndef Py_LIMITED_API +/* Like PyDict_Merge, but override can be 0, 1 or 2. If override is 0, + the first occurrence of a key wins, if override is 1, the last occurrence + of a key wins, if override is 2, a KeyError with conflicting key as + argument is raised. +*/ +PyAPI_FUNC(int) _PyDict_MergeEx(PyObject *mp, PyObject *other, int override); +PyAPI_FUNC(PyObject *) _PyDictView_Intersect(PyObject* self, PyObject *other); +#endif + +/* PyDict_MergeFromSeq2 updates/merges from an iterable object producing + iterable objects of length 2. If override is true, the last occurrence + of a key wins, else the first. The Python dict constructor dict(seq2) + is equivalent to dict={}; PyDict_MergeFromSeq(dict, seq2, 1). +*/ +PyAPI_FUNC(int) PyDict_MergeFromSeq2(PyObject *d, + PyObject *seq2, + int override); + +PyAPI_FUNC(PyObject *) PyDict_GetItemString(PyObject *dp, const char *key); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyDict_GetItemId(PyObject *dp, struct _Py_Identifier *key); +#endif /* !Py_LIMITED_API */ +PyAPI_FUNC(int) PyDict_SetItemString(PyObject *dp, const char *key, PyObject *item); +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyDict_SetItemId(PyObject *dp, struct _Py_Identifier *key, PyObject *item); +#endif /* !Py_LIMITED_API */ +PyAPI_FUNC(int) PyDict_DelItemString(PyObject *dp, const char *key); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyDict_DelItemId(PyObject *mp, struct _Py_Identifier *key); +PyAPI_FUNC(void) _PyDict_DebugMallocStats(FILE *out); + +int _PyObjectDict_SetItem(PyTypeObject *tp, PyObject **dictptr, PyObject *name, PyObject *value); +PyObject *_PyDict_LoadGlobal(PyDictObject *, PyDictObject *, PyObject *); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_DICTOBJECT_H */ diff --git a/my_env/Include/dtoa.h b/my_env/Include/dtoa.h new file mode 100644 index 000000000..9bfb6251d --- /dev/null +++ b/my_env/Include/dtoa.h @@ -0,0 +1,19 @@ +#ifndef Py_LIMITED_API +#ifndef PY_NO_SHORT_FLOAT_REPR +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_FUNC(double) _Py_dg_strtod(const char *str, char **ptr); +PyAPI_FUNC(char *) _Py_dg_dtoa(double d, int mode, int ndigits, + int *decpt, int *sign, char **rve); +PyAPI_FUNC(void) _Py_dg_freedtoa(char *s); +PyAPI_FUNC(double) _Py_dg_stdnan(int sign); +PyAPI_FUNC(double) _Py_dg_infinity(int sign); + + +#ifdef __cplusplus +} +#endif +#endif +#endif diff --git a/my_env/Include/dynamic_annotations.h b/my_env/Include/dynamic_annotations.h new file mode 100644 index 000000000..0bd1a833c --- /dev/null +++ b/my_env/Include/dynamic_annotations.h @@ -0,0 +1,499 @@ +/* Copyright (c) 2008-2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Kostya Serebryany + * Copied to CPython by Jeffrey Yasskin, with all macros renamed to + * start with _Py_ to avoid colliding with users embedding Python, and + * with deprecated macros removed. + */ + +/* This file defines dynamic annotations for use with dynamic analysis + tool such as valgrind, PIN, etc. + + Dynamic annotation is a source code annotation that affects + the generated code (that is, the annotation is not a comment). + Each such annotation is attached to a particular + instruction and/or to a particular object (address) in the program. + + The annotations that should be used by users are macros in all upper-case + (e.g., _Py_ANNOTATE_NEW_MEMORY). + + Actual implementation of these macros may differ depending on the + dynamic analysis tool being used. + + See http://code.google.com/p/data-race-test/ for more information. + + This file supports the following dynamic analysis tools: + - None (DYNAMIC_ANNOTATIONS_ENABLED is not defined or zero). + Macros are defined empty. + - ThreadSanitizer, Helgrind, DRD (DYNAMIC_ANNOTATIONS_ENABLED is 1). + Macros are defined as calls to non-inlinable empty functions + that are intercepted by Valgrind. */ + +#ifndef __DYNAMIC_ANNOTATIONS_H__ +#define __DYNAMIC_ANNOTATIONS_H__ + +#ifndef DYNAMIC_ANNOTATIONS_ENABLED +# define DYNAMIC_ANNOTATIONS_ENABLED 0 +#endif + +#if DYNAMIC_ANNOTATIONS_ENABLED != 0 + + /* ------------------------------------------------------------- + Annotations useful when implementing condition variables such as CondVar, + using conditional critical sections (Await/LockWhen) and when constructing + user-defined synchronization mechanisms. + + The annotations _Py_ANNOTATE_HAPPENS_BEFORE() and + _Py_ANNOTATE_HAPPENS_AFTER() can be used to define happens-before arcs in + user-defined synchronization mechanisms: the race detector will infer an + arc from the former to the latter when they share the same argument + pointer. + + Example 1 (reference counting): + + void Unref() { + _Py_ANNOTATE_HAPPENS_BEFORE(&refcount_); + if (AtomicDecrementByOne(&refcount_) == 0) { + _Py_ANNOTATE_HAPPENS_AFTER(&refcount_); + delete this; + } + } + + Example 2 (message queue): + + void MyQueue::Put(Type *e) { + MutexLock lock(&mu_); + _Py_ANNOTATE_HAPPENS_BEFORE(e); + PutElementIntoMyQueue(e); + } + + Type *MyQueue::Get() { + MutexLock lock(&mu_); + Type *e = GetElementFromMyQueue(); + _Py_ANNOTATE_HAPPENS_AFTER(e); + return e; + } + + Note: when possible, please use the existing reference counting and message + queue implementations instead of inventing new ones. */ + + /* Report that wait on the condition variable at address "cv" has succeeded + and the lock at address "lock" is held. */ +#define _Py_ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) \ + AnnotateCondVarWait(__FILE__, __LINE__, cv, lock) + + /* Report that wait on the condition variable at "cv" has succeeded. Variant + w/o lock. */ +#define _Py_ANNOTATE_CONDVAR_WAIT(cv) \ + AnnotateCondVarWait(__FILE__, __LINE__, cv, NULL) + + /* Report that we are about to signal on the condition variable at address + "cv". */ +#define _Py_ANNOTATE_CONDVAR_SIGNAL(cv) \ + AnnotateCondVarSignal(__FILE__, __LINE__, cv) + + /* Report that we are about to signal_all on the condition variable at "cv". */ +#define _Py_ANNOTATE_CONDVAR_SIGNAL_ALL(cv) \ + AnnotateCondVarSignalAll(__FILE__, __LINE__, cv) + + /* Annotations for user-defined synchronization mechanisms. */ +#define _Py_ANNOTATE_HAPPENS_BEFORE(obj) _Py_ANNOTATE_CONDVAR_SIGNAL(obj) +#define _Py_ANNOTATE_HAPPENS_AFTER(obj) _Py_ANNOTATE_CONDVAR_WAIT(obj) + + /* Report that the bytes in the range [pointer, pointer+size) are about + to be published safely. The race checker will create a happens-before + arc from the call _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) to + subsequent accesses to this memory. + Note: this annotation may not work properly if the race detector uses + sampling, i.e. does not observe all memory accesses. + */ +#define _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) \ + AnnotatePublishMemoryRange(__FILE__, __LINE__, pointer, size) + + /* Instruct the tool to create a happens-before arc between mu->Unlock() and + mu->Lock(). This annotation may slow down the race detector and hide real + races. Normally it is used only when it would be difficult to annotate each + of the mutex's critical sections individually using the annotations above. + This annotation makes sense only for hybrid race detectors. For pure + happens-before detectors this is a no-op. For more details see + http://code.google.com/p/data-race-test/wiki/PureHappensBeforeVsHybrid . */ +#define _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) \ + AnnotateMutexIsUsedAsCondVar(__FILE__, __LINE__, mu) + + /* ------------------------------------------------------------- + Annotations useful when defining memory allocators, or when memory that + was protected in one way starts to be protected in another. */ + + /* Report that a new memory at "address" of size "size" has been allocated. + This might be used when the memory has been retrieved from a free list and + is about to be reused, or when the locking discipline for a variable + changes. */ +#define _Py_ANNOTATE_NEW_MEMORY(address, size) \ + AnnotateNewMemory(__FILE__, __LINE__, address, size) + + /* ------------------------------------------------------------- + Annotations useful when defining FIFO queues that transfer data between + threads. */ + + /* Report that the producer-consumer queue (such as ProducerConsumerQueue) at + address "pcq" has been created. The _Py_ANNOTATE_PCQ_* annotations should + be used only for FIFO queues. For non-FIFO queues use + _Py_ANNOTATE_HAPPENS_BEFORE (for put) and _Py_ANNOTATE_HAPPENS_AFTER (for + get). */ +#define _Py_ANNOTATE_PCQ_CREATE(pcq) \ + AnnotatePCQCreate(__FILE__, __LINE__, pcq) + + /* Report that the queue at address "pcq" is about to be destroyed. */ +#define _Py_ANNOTATE_PCQ_DESTROY(pcq) \ + AnnotatePCQDestroy(__FILE__, __LINE__, pcq) + + /* Report that we are about to put an element into a FIFO queue at address + "pcq". */ +#define _Py_ANNOTATE_PCQ_PUT(pcq) \ + AnnotatePCQPut(__FILE__, __LINE__, pcq) + + /* Report that we've just got an element from a FIFO queue at address "pcq". */ +#define _Py_ANNOTATE_PCQ_GET(pcq) \ + AnnotatePCQGet(__FILE__, __LINE__, pcq) + + /* ------------------------------------------------------------- + Annotations that suppress errors. It is usually better to express the + program's synchronization using the other annotations, but these can + be used when all else fails. */ + + /* Report that we may have a benign race at "pointer", with size + "sizeof(*(pointer))". "pointer" must be a non-void* pointer. Insert at the + point where "pointer" has been allocated, preferably close to the point + where the race happens. See also _Py_ANNOTATE_BENIGN_RACE_STATIC. */ +#define _Py_ANNOTATE_BENIGN_RACE(pointer, description) \ + AnnotateBenignRaceSized(__FILE__, __LINE__, pointer, \ + sizeof(*(pointer)), description) + + /* Same as _Py_ANNOTATE_BENIGN_RACE(address, description), but applies to + the memory range [address, address+size). */ +#define _Py_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) \ + AnnotateBenignRaceSized(__FILE__, __LINE__, address, size, description) + + /* Request the analysis tool to ignore all reads in the current thread + until _Py_ANNOTATE_IGNORE_READS_END is called. + Useful to ignore intentional racey reads, while still checking + other reads and all writes. + See also _Py_ANNOTATE_UNPROTECTED_READ. */ +#define _Py_ANNOTATE_IGNORE_READS_BEGIN() \ + AnnotateIgnoreReadsBegin(__FILE__, __LINE__) + + /* Stop ignoring reads. */ +#define _Py_ANNOTATE_IGNORE_READS_END() \ + AnnotateIgnoreReadsEnd(__FILE__, __LINE__) + + /* Similar to _Py_ANNOTATE_IGNORE_READS_BEGIN, but ignore writes. */ +#define _Py_ANNOTATE_IGNORE_WRITES_BEGIN() \ + AnnotateIgnoreWritesBegin(__FILE__, __LINE__) + + /* Stop ignoring writes. */ +#define _Py_ANNOTATE_IGNORE_WRITES_END() \ + AnnotateIgnoreWritesEnd(__FILE__, __LINE__) + + /* Start ignoring all memory accesses (reads and writes). */ +#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \ + do {\ + _Py_ANNOTATE_IGNORE_READS_BEGIN();\ + _Py_ANNOTATE_IGNORE_WRITES_BEGIN();\ + }while(0)\ + + /* Stop ignoring all memory accesses. */ +#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_END() \ + do {\ + _Py_ANNOTATE_IGNORE_WRITES_END();\ + _Py_ANNOTATE_IGNORE_READS_END();\ + }while(0)\ + + /* Similar to _Py_ANNOTATE_IGNORE_READS_BEGIN, but ignore synchronization events: + RWLOCK* and CONDVAR*. */ +#define _Py_ANNOTATE_IGNORE_SYNC_BEGIN() \ + AnnotateIgnoreSyncBegin(__FILE__, __LINE__) + + /* Stop ignoring sync events. */ +#define _Py_ANNOTATE_IGNORE_SYNC_END() \ + AnnotateIgnoreSyncEnd(__FILE__, __LINE__) + + + /* Enable (enable!=0) or disable (enable==0) race detection for all threads. + This annotation could be useful if you want to skip expensive race analysis + during some period of program execution, e.g. during initialization. */ +#define _Py_ANNOTATE_ENABLE_RACE_DETECTION(enable) \ + AnnotateEnableRaceDetection(__FILE__, __LINE__, enable) + + /* ------------------------------------------------------------- + Annotations useful for debugging. */ + + /* Request to trace every access to "address". */ +#define _Py_ANNOTATE_TRACE_MEMORY(address) \ + AnnotateTraceMemory(__FILE__, __LINE__, address) + + /* Report the current thread name to a race detector. */ +#define _Py_ANNOTATE_THREAD_NAME(name) \ + AnnotateThreadName(__FILE__, __LINE__, name) + + /* ------------------------------------------------------------- + Annotations useful when implementing locks. They are not + normally needed by modules that merely use locks. + The "lock" argument is a pointer to the lock object. */ + + /* Report that a lock has been created at address "lock". */ +#define _Py_ANNOTATE_RWLOCK_CREATE(lock) \ + AnnotateRWLockCreate(__FILE__, __LINE__, lock) + + /* Report that the lock at address "lock" is about to be destroyed. */ +#define _Py_ANNOTATE_RWLOCK_DESTROY(lock) \ + AnnotateRWLockDestroy(__FILE__, __LINE__, lock) + + /* Report that the lock at address "lock" has been acquired. + is_w=1 for writer lock, is_w=0 for reader lock. */ +#define _Py_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \ + AnnotateRWLockAcquired(__FILE__, __LINE__, lock, is_w) + + /* Report that the lock at address "lock" is about to be released. */ +#define _Py_ANNOTATE_RWLOCK_RELEASED(lock, is_w) \ + AnnotateRWLockReleased(__FILE__, __LINE__, lock, is_w) + + /* ------------------------------------------------------------- + Annotations useful when implementing barriers. They are not + normally needed by modules that merely use barriers. + The "barrier" argument is a pointer to the barrier object. */ + + /* Report that the "barrier" has been initialized with initial "count". + If 'reinitialization_allowed' is true, initialization is allowed to happen + multiple times w/o calling barrier_destroy() */ +#define _Py_ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed) \ + AnnotateBarrierInit(__FILE__, __LINE__, barrier, count, \ + reinitialization_allowed) + + /* Report that we are about to enter barrier_wait("barrier"). */ +#define _Py_ANNOTATE_BARRIER_WAIT_BEFORE(barrier) \ + AnnotateBarrierWaitBefore(__FILE__, __LINE__, barrier) + + /* Report that we just exited barrier_wait("barrier"). */ +#define _Py_ANNOTATE_BARRIER_WAIT_AFTER(barrier) \ + AnnotateBarrierWaitAfter(__FILE__, __LINE__, barrier) + + /* Report that the "barrier" has been destroyed. */ +#define _Py_ANNOTATE_BARRIER_DESTROY(barrier) \ + AnnotateBarrierDestroy(__FILE__, __LINE__, barrier) + + /* ------------------------------------------------------------- + Annotations useful for testing race detectors. */ + + /* Report that we expect a race on the variable at "address". + Use only in unit tests for a race detector. */ +#define _Py_ANNOTATE_EXPECT_RACE(address, description) \ + AnnotateExpectRace(__FILE__, __LINE__, address, description) + + /* A no-op. Insert where you like to test the interceptors. */ +#define _Py_ANNOTATE_NO_OP(arg) \ + AnnotateNoOp(__FILE__, __LINE__, arg) + + /* Force the race detector to flush its state. The actual effect depends on + * the implementation of the detector. */ +#define _Py_ANNOTATE_FLUSH_STATE() \ + AnnotateFlushState(__FILE__, __LINE__) + + +#else /* DYNAMIC_ANNOTATIONS_ENABLED == 0 */ + +#define _Py_ANNOTATE_RWLOCK_CREATE(lock) /* empty */ +#define _Py_ANNOTATE_RWLOCK_DESTROY(lock) /* empty */ +#define _Py_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) /* empty */ +#define _Py_ANNOTATE_RWLOCK_RELEASED(lock, is_w) /* empty */ +#define _Py_ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed) /* */ +#define _Py_ANNOTATE_BARRIER_WAIT_BEFORE(barrier) /* empty */ +#define _Py_ANNOTATE_BARRIER_WAIT_AFTER(barrier) /* empty */ +#define _Py_ANNOTATE_BARRIER_DESTROY(barrier) /* empty */ +#define _Py_ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) /* empty */ +#define _Py_ANNOTATE_CONDVAR_WAIT(cv) /* empty */ +#define _Py_ANNOTATE_CONDVAR_SIGNAL(cv) /* empty */ +#define _Py_ANNOTATE_CONDVAR_SIGNAL_ALL(cv) /* empty */ +#define _Py_ANNOTATE_HAPPENS_BEFORE(obj) /* empty */ +#define _Py_ANNOTATE_HAPPENS_AFTER(obj) /* empty */ +#define _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(address, size) /* empty */ +#define _Py_ANNOTATE_UNPUBLISH_MEMORY_RANGE(address, size) /* empty */ +#define _Py_ANNOTATE_SWAP_MEMORY_RANGE(address, size) /* empty */ +#define _Py_ANNOTATE_PCQ_CREATE(pcq) /* empty */ +#define _Py_ANNOTATE_PCQ_DESTROY(pcq) /* empty */ +#define _Py_ANNOTATE_PCQ_PUT(pcq) /* empty */ +#define _Py_ANNOTATE_PCQ_GET(pcq) /* empty */ +#define _Py_ANNOTATE_NEW_MEMORY(address, size) /* empty */ +#define _Py_ANNOTATE_EXPECT_RACE(address, description) /* empty */ +#define _Py_ANNOTATE_BENIGN_RACE(address, description) /* empty */ +#define _Py_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) /* empty */ +#define _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) /* empty */ +#define _Py_ANNOTATE_MUTEX_IS_USED_AS_CONDVAR(mu) /* empty */ +#define _Py_ANNOTATE_TRACE_MEMORY(arg) /* empty */ +#define _Py_ANNOTATE_THREAD_NAME(name) /* empty */ +#define _Py_ANNOTATE_IGNORE_READS_BEGIN() /* empty */ +#define _Py_ANNOTATE_IGNORE_READS_END() /* empty */ +#define _Py_ANNOTATE_IGNORE_WRITES_BEGIN() /* empty */ +#define _Py_ANNOTATE_IGNORE_WRITES_END() /* empty */ +#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() /* empty */ +#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_END() /* empty */ +#define _Py_ANNOTATE_IGNORE_SYNC_BEGIN() /* empty */ +#define _Py_ANNOTATE_IGNORE_SYNC_END() /* empty */ +#define _Py_ANNOTATE_ENABLE_RACE_DETECTION(enable) /* empty */ +#define _Py_ANNOTATE_NO_OP(arg) /* empty */ +#define _Py_ANNOTATE_FLUSH_STATE() /* empty */ + +#endif /* DYNAMIC_ANNOTATIONS_ENABLED */ + +/* Use the macros above rather than using these functions directly. */ +#ifdef __cplusplus +extern "C" { +#endif +void AnnotateRWLockCreate(const char *file, int line, + const volatile void *lock); +void AnnotateRWLockDestroy(const char *file, int line, + const volatile void *lock); +void AnnotateRWLockAcquired(const char *file, int line, + const volatile void *lock, long is_w); +void AnnotateRWLockReleased(const char *file, int line, + const volatile void *lock, long is_w); +void AnnotateBarrierInit(const char *file, int line, + const volatile void *barrier, long count, + long reinitialization_allowed); +void AnnotateBarrierWaitBefore(const char *file, int line, + const volatile void *barrier); +void AnnotateBarrierWaitAfter(const char *file, int line, + const volatile void *barrier); +void AnnotateBarrierDestroy(const char *file, int line, + const volatile void *barrier); +void AnnotateCondVarWait(const char *file, int line, + const volatile void *cv, + const volatile void *lock); +void AnnotateCondVarSignal(const char *file, int line, + const volatile void *cv); +void AnnotateCondVarSignalAll(const char *file, int line, + const volatile void *cv); +void AnnotatePublishMemoryRange(const char *file, int line, + const volatile void *address, + long size); +void AnnotateUnpublishMemoryRange(const char *file, int line, + const volatile void *address, + long size); +void AnnotatePCQCreate(const char *file, int line, + const volatile void *pcq); +void AnnotatePCQDestroy(const char *file, int line, + const volatile void *pcq); +void AnnotatePCQPut(const char *file, int line, + const volatile void *pcq); +void AnnotatePCQGet(const char *file, int line, + const volatile void *pcq); +void AnnotateNewMemory(const char *file, int line, + const volatile void *address, + long size); +void AnnotateExpectRace(const char *file, int line, + const volatile void *address, + const char *description); +void AnnotateBenignRace(const char *file, int line, + const volatile void *address, + const char *description); +void AnnotateBenignRaceSized(const char *file, int line, + const volatile void *address, + long size, + const char *description); +void AnnotateMutexIsUsedAsCondVar(const char *file, int line, + const volatile void *mu); +void AnnotateTraceMemory(const char *file, int line, + const volatile void *arg); +void AnnotateThreadName(const char *file, int line, + const char *name); +void AnnotateIgnoreReadsBegin(const char *file, int line); +void AnnotateIgnoreReadsEnd(const char *file, int line); +void AnnotateIgnoreWritesBegin(const char *file, int line); +void AnnotateIgnoreWritesEnd(const char *file, int line); +void AnnotateEnableRaceDetection(const char *file, int line, int enable); +void AnnotateNoOp(const char *file, int line, + const volatile void *arg); +void AnnotateFlushState(const char *file, int line); + +/* Return non-zero value if running under valgrind. + + If "valgrind.h" is included into dynamic_annotations.c, + the regular valgrind mechanism will be used. + See http://valgrind.org/docs/manual/manual-core-adv.html about + RUNNING_ON_VALGRIND and other valgrind "client requests". + The file "valgrind.h" may be obtained by doing + svn co svn://svn.valgrind.org/valgrind/trunk/include + + If for some reason you can't use "valgrind.h" or want to fake valgrind, + there are two ways to make this function return non-zero: + - Use environment variable: export RUNNING_ON_VALGRIND=1 + - Make your tool intercept the function RunningOnValgrind() and + change its return value. + */ +int RunningOnValgrind(void); + +#ifdef __cplusplus +} +#endif + +#if DYNAMIC_ANNOTATIONS_ENABLED != 0 && defined(__cplusplus) + + /* _Py_ANNOTATE_UNPROTECTED_READ is the preferred way to annotate racey reads. + + Instead of doing + _Py_ANNOTATE_IGNORE_READS_BEGIN(); + ... = x; + _Py_ANNOTATE_IGNORE_READS_END(); + one can use + ... = _Py_ANNOTATE_UNPROTECTED_READ(x); */ + template + inline T _Py_ANNOTATE_UNPROTECTED_READ(const volatile T &x) { + _Py_ANNOTATE_IGNORE_READS_BEGIN(); + T res = x; + _Py_ANNOTATE_IGNORE_READS_END(); + return res; + } + /* Apply _Py_ANNOTATE_BENIGN_RACE_SIZED to a static variable. */ +#define _Py_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) \ + namespace { \ + class static_var ## _annotator { \ + public: \ + static_var ## _annotator() { \ + _Py_ANNOTATE_BENIGN_RACE_SIZED(&static_var, \ + sizeof(static_var), \ + # static_var ": " description); \ + } \ + }; \ + static static_var ## _annotator the ## static_var ## _annotator;\ + } +#else /* DYNAMIC_ANNOTATIONS_ENABLED == 0 */ + +#define _Py_ANNOTATE_UNPROTECTED_READ(x) (x) +#define _Py_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) /* empty */ + +#endif /* DYNAMIC_ANNOTATIONS_ENABLED */ + +#endif /* __DYNAMIC_ANNOTATIONS_H__ */ diff --git a/my_env/Include/enumobject.h b/my_env/Include/enumobject.h new file mode 100644 index 000000000..c14dbfc8c --- /dev/null +++ b/my_env/Include/enumobject.h @@ -0,0 +1,17 @@ +#ifndef Py_ENUMOBJECT_H +#define Py_ENUMOBJECT_H + +/* Enumerate Object */ + +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_DATA(PyTypeObject) PyEnum_Type; +PyAPI_DATA(PyTypeObject) PyReversed_Type; + +#ifdef __cplusplus +} +#endif + +#endif /* !Py_ENUMOBJECT_H */ diff --git a/my_env/Include/errcode.h b/my_env/Include/errcode.h new file mode 100644 index 000000000..b37cd261d --- /dev/null +++ b/my_env/Include/errcode.h @@ -0,0 +1,38 @@ +#ifndef Py_ERRCODE_H +#define Py_ERRCODE_H +#ifdef __cplusplus +extern "C" { +#endif + + +/* Error codes passed around between file input, tokenizer, parser and + interpreter. This is necessary so we can turn them into Python + exceptions at a higher level. Note that some errors have a + slightly different meaning when passed from the tokenizer to the + parser than when passed from the parser to the interpreter; e.g. + the parser only returns E_EOF when it hits EOF immediately, and it + never returns E_OK. */ + +#define E_OK 10 /* No error */ +#define E_EOF 11 /* End Of File */ +#define E_INTR 12 /* Interrupted */ +#define E_TOKEN 13 /* Bad token */ +#define E_SYNTAX 14 /* Syntax error */ +#define E_NOMEM 15 /* Ran out of memory */ +#define E_DONE 16 /* Parsing complete */ +#define E_ERROR 17 /* Execution error */ +#define E_TABSPACE 18 /* Inconsistent mixing of tabs and spaces */ +#define E_OVERFLOW 19 /* Node had too many children */ +#define E_TOODEEP 20 /* Too many indentation levels */ +#define E_DEDENT 21 /* No matching outer block for dedent */ +#define E_DECODE 22 /* Error in decoding into Unicode */ +#define E_EOFS 23 /* EOF in triple-quoted string */ +#define E_EOLS 24 /* EOL in single-quoted string */ +#define E_LINECONT 25 /* Unexpected characters after a line continuation */ +#define E_IDENTIFIER 26 /* Invalid characters in identifier */ +#define E_BADSINGLE 27 /* Ill-formed single statement input */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_ERRCODE_H */ diff --git a/my_env/Include/eval.h b/my_env/Include/eval.h new file mode 100644 index 000000000..2c1c2d054 --- /dev/null +++ b/my_env/Include/eval.h @@ -0,0 +1,37 @@ + +/* Interface to execute compiled code */ + +#ifndef Py_EVAL_H +#define Py_EVAL_H +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_FUNC(PyObject *) PyEval_EvalCode(PyObject *, PyObject *, PyObject *); + +PyAPI_FUNC(PyObject *) PyEval_EvalCodeEx(PyObject *co, + PyObject *globals, + PyObject *locals, + PyObject *const *args, int argc, + PyObject *const *kwds, int kwdc, + PyObject *const *defs, int defc, + PyObject *kwdefs, PyObject *closure); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyEval_EvalCodeWithName( + PyObject *co, + PyObject *globals, PyObject *locals, + PyObject *const *args, Py_ssize_t argcount, + PyObject *const *kwnames, PyObject *const *kwargs, + Py_ssize_t kwcount, int kwstep, + PyObject *const *defs, Py_ssize_t defcount, + PyObject *kwdefs, PyObject *closure, + PyObject *name, PyObject *qualname); + +PyAPI_FUNC(PyObject *) _PyEval_CallTracing(PyObject *func, PyObject *args); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_EVAL_H */ diff --git a/my_env/Include/fileobject.h b/my_env/Include/fileobject.h new file mode 100644 index 000000000..89e8dd6a2 --- /dev/null +++ b/my_env/Include/fileobject.h @@ -0,0 +1,55 @@ +/* File object interface (what's left of it -- see io.py) */ + +#ifndef Py_FILEOBJECT_H +#define Py_FILEOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +#define PY_STDIOTEXTMODE "b" + +PyAPI_FUNC(PyObject *) PyFile_FromFd(int, const char *, const char *, int, + const char *, const char *, + const char *, int); +PyAPI_FUNC(PyObject *) PyFile_GetLine(PyObject *, int); +PyAPI_FUNC(int) PyFile_WriteObject(PyObject *, PyObject *, int); +PyAPI_FUNC(int) PyFile_WriteString(const char *, PyObject *); +PyAPI_FUNC(int) PyObject_AsFileDescriptor(PyObject *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(char *) Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *); +#endif + +/* The default encoding used by the platform file system APIs + If non-NULL, this is different than the default encoding for strings +*/ +PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding; +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 +PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors; +#endif +PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding; + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 +PyAPI_DATA(int) Py_UTF8Mode; +#endif + +/* Internal API + + The std printer acts as a preliminary sys.stderr until the new io + infrastructure is in place. */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) PyFile_NewStdPrinter(int); +PyAPI_DATA(PyTypeObject) PyStdPrinter_Type; +#endif /* Py_LIMITED_API */ + +/* A routine to check if a file descriptor can be select()-ed. */ +#ifdef _MSC_VER + /* On Windows, any socket fd can be select()-ed, no matter how high */ + #define _PyIsSelectable_fd(FD) (1) +#else + #define _PyIsSelectable_fd(FD) ((unsigned int)(FD) < (unsigned int)FD_SETSIZE) +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_FILEOBJECT_H */ diff --git a/my_env/Include/fileutils.h b/my_env/Include/fileutils.h new file mode 100644 index 000000000..419d49ab7 --- /dev/null +++ b/my_env/Include/fileutils.h @@ -0,0 +1,201 @@ +#ifndef Py_FILEUTILS_H +#define Py_FILEUTILS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +PyAPI_FUNC(wchar_t *) Py_DecodeLocale( + const char *arg, + size_t *size); + +PyAPI_FUNC(char*) Py_EncodeLocale( + const wchar_t *text, + size_t *error_pos); + +PyAPI_FUNC(char*) _Py_EncodeLocaleRaw( + const wchar_t *text, + size_t *error_pos); +#endif + +#ifdef Py_BUILD_CORE +PyAPI_FUNC(int) _Py_DecodeUTF8Ex( + const char *arg, + Py_ssize_t arglen, + wchar_t **wstr, + size_t *wlen, + const char **reason, + int surrogateescape); + +PyAPI_FUNC(int) _Py_EncodeUTF8Ex( + const wchar_t *text, + char **str, + size_t *error_pos, + const char **reason, + int raw_malloc, + int surrogateescape); + +PyAPI_FUNC(wchar_t*) _Py_DecodeUTF8_surrogateescape( + const char *arg, + Py_ssize_t arglen); + +PyAPI_FUNC(int) _Py_DecodeLocaleEx( + const char *arg, + wchar_t **wstr, + size_t *wlen, + const char **reason, + int current_locale, + int surrogateescape); + +PyAPI_FUNC(int) _Py_EncodeLocaleEx( + const wchar_t *text, + char **str, + size_t *error_pos, + const char **reason, + int current_locale, + int surrogateescape); +#endif + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _Py_device_encoding(int); + +#if defined(MS_WINDOWS) || defined(__APPLE__) + /* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611). + On macOS 10.13, read() and write() with more than INT_MAX bytes + fail with EINVAL (bpo-24658). */ +# define _PY_READ_MAX INT_MAX +# define _PY_WRITE_MAX INT_MAX +#else + /* write() should truncate the input to PY_SSIZE_T_MAX bytes, + but it's safer to do it ourself to have a portable behaviour */ +# define _PY_READ_MAX PY_SSIZE_T_MAX +# define _PY_WRITE_MAX PY_SSIZE_T_MAX +#endif + +#ifdef MS_WINDOWS +struct _Py_stat_struct { + unsigned long st_dev; + uint64_t st_ino; + unsigned short st_mode; + int st_nlink; + int st_uid; + int st_gid; + unsigned long st_rdev; + __int64 st_size; + time_t st_atime; + int st_atime_nsec; + time_t st_mtime; + int st_mtime_nsec; + time_t st_ctime; + int st_ctime_nsec; + unsigned long st_file_attributes; +}; +#else +# define _Py_stat_struct stat +#endif + +PyAPI_FUNC(int) _Py_fstat( + int fd, + struct _Py_stat_struct *status); + +PyAPI_FUNC(int) _Py_fstat_noraise( + int fd, + struct _Py_stat_struct *status); + +PyAPI_FUNC(int) _Py_stat( + PyObject *path, + struct stat *status); + +PyAPI_FUNC(int) _Py_open( + const char *pathname, + int flags); + +PyAPI_FUNC(int) _Py_open_noraise( + const char *pathname, + int flags); + +PyAPI_FUNC(FILE *) _Py_wfopen( + const wchar_t *path, + const wchar_t *mode); + +PyAPI_FUNC(FILE*) _Py_fopen( + const char *pathname, + const char *mode); + +PyAPI_FUNC(FILE*) _Py_fopen_obj( + PyObject *path, + const char *mode); + +PyAPI_FUNC(Py_ssize_t) _Py_read( + int fd, + void *buf, + size_t count); + +PyAPI_FUNC(Py_ssize_t) _Py_write( + int fd, + const void *buf, + size_t count); + +PyAPI_FUNC(Py_ssize_t) _Py_write_noraise( + int fd, + const void *buf, + size_t count); + +#ifdef HAVE_READLINK +PyAPI_FUNC(int) _Py_wreadlink( + const wchar_t *path, + wchar_t *buf, + size_t bufsiz); +#endif + +#ifdef HAVE_REALPATH +PyAPI_FUNC(wchar_t*) _Py_wrealpath( + const wchar_t *path, + wchar_t *resolved_path, + size_t resolved_path_size); +#endif + +PyAPI_FUNC(wchar_t*) _Py_wgetcwd( + wchar_t *buf, + size_t size); + +PyAPI_FUNC(int) _Py_get_inheritable(int fd); + +PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable, + int *atomic_flag_works); + +PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable, + int *atomic_flag_works); + +PyAPI_FUNC(int) _Py_dup(int fd); + +#ifndef MS_WINDOWS +PyAPI_FUNC(int) _Py_get_blocking(int fd); + +PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking); +#endif /* !MS_WINDOWS */ + +PyAPI_FUNC(int) _Py_GetLocaleconvNumeric( + PyObject **decimal_point, + PyObject **thousands_sep, + const char **grouping); + +#endif /* Py_LIMITED_API */ + +#ifdef Py_BUILD_CORE +PyAPI_FUNC(int) _Py_GetForceASCII(void); + +/* Reset "force ASCII" mode (if it was initialized). + + This function should be called when Python changes the LC_CTYPE locale, + so the "force ASCII" mode can be detected again on the new locale + encoding. */ +PyAPI_FUNC(void) _Py_ResetForceASCII(void); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* !Py_FILEUTILS_H */ diff --git a/my_env/Include/floatobject.h b/my_env/Include/floatobject.h new file mode 100644 index 000000000..f1044d64c --- /dev/null +++ b/my_env/Include/floatobject.h @@ -0,0 +1,130 @@ + +/* Float object interface */ + +/* +PyFloatObject represents a (double precision) floating point number. +*/ + +#ifndef Py_FLOATOBJECT_H +#define Py_FLOATOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API +typedef struct { + PyObject_HEAD + double ob_fval; +} PyFloatObject; +#endif + +PyAPI_DATA(PyTypeObject) PyFloat_Type; + +#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type) +#define PyFloat_CheckExact(op) (Py_TYPE(op) == &PyFloat_Type) + +#ifdef Py_NAN +#define Py_RETURN_NAN return PyFloat_FromDouble(Py_NAN) +#endif + +#define Py_RETURN_INF(sign) do \ + if (copysign(1., sign) == 1.) { \ + return PyFloat_FromDouble(Py_HUGE_VAL); \ + } else { \ + return PyFloat_FromDouble(-Py_HUGE_VAL); \ + } while(0) + +PyAPI_FUNC(double) PyFloat_GetMax(void); +PyAPI_FUNC(double) PyFloat_GetMin(void); +PyAPI_FUNC(PyObject *) PyFloat_GetInfo(void); + +/* Return Python float from string PyObject. */ +PyAPI_FUNC(PyObject *) PyFloat_FromString(PyObject*); + +/* Return Python float from C double. */ +PyAPI_FUNC(PyObject *) PyFloat_FromDouble(double); + +/* Extract C double from Python float. The macro version trades safety for + speed. */ +PyAPI_FUNC(double) PyFloat_AsDouble(PyObject *); +#ifndef Py_LIMITED_API +#define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval) +#endif + +#ifndef Py_LIMITED_API +/* _PyFloat_{Pack,Unpack}{4,8} + * + * The struct and pickle (at least) modules need an efficient platform- + * independent way to store floating-point values as byte strings. + * The Pack routines produce a string from a C double, and the Unpack + * routines produce a C double from such a string. The suffix (4 or 8) + * specifies the number of bytes in the string. + * + * On platforms that appear to use (see _PyFloat_Init()) IEEE-754 formats + * these functions work by copying bits. On other platforms, the formats the + * 4- byte format is identical to the IEEE-754 single precision format, and + * the 8-byte format to the IEEE-754 double precision format, although the + * packing of INFs and NaNs (if such things exist on the platform) isn't + * handled correctly, and attempting to unpack a string containing an IEEE + * INF or NaN will raise an exception. + * + * On non-IEEE platforms with more precision, or larger dynamic range, than + * 754 supports, not all values can be packed; on non-IEEE platforms with less + * precision, or smaller dynamic range, not all values can be unpacked. What + * happens in such cases is partly accidental (alas). + */ + +/* The pack routines write 2, 4 or 8 bytes, starting at p. le is a bool + * argument, true if you want the string in little-endian format (exponent + * last, at p+1, p+3 or p+7), false if you want big-endian format (exponent + * first, at p). + * Return value: 0 if all is OK, -1 if error (and an exception is + * set, most likely OverflowError). + * There are two problems on non-IEEE platforms: + * 1): What this does is undefined if x is a NaN or infinity. + * 2): -0.0 and +0.0 produce the same string. + */ +PyAPI_FUNC(int) _PyFloat_Pack2(double x, unsigned char *p, int le); +PyAPI_FUNC(int) _PyFloat_Pack4(double x, unsigned char *p, int le); +PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le); + +/* Needed for the old way for marshal to store a floating point number. + Returns the string length copied into p, -1 on error. + */ +PyAPI_FUNC(int) _PyFloat_Repr(double x, char *p, size_t len); + +/* Used to get the important decimal digits of a double */ +PyAPI_FUNC(int) _PyFloat_Digits(char *buf, double v, int *signum); +PyAPI_FUNC(void) _PyFloat_DigitsInit(void); + +/* The unpack routines read 2, 4 or 8 bytes, starting at p. le is a bool + * argument, true if the string is in little-endian format (exponent + * last, at p+1, p+3 or p+7), false if big-endian (exponent first, at p). + * Return value: The unpacked double. On error, this is -1.0 and + * PyErr_Occurred() is true (and an exception is set, most likely + * OverflowError). Note that on a non-IEEE platform this will refuse + * to unpack a string that represents a NaN or infinity. + */ +PyAPI_FUNC(double) _PyFloat_Unpack2(const unsigned char *p, int le); +PyAPI_FUNC(double) _PyFloat_Unpack4(const unsigned char *p, int le); +PyAPI_FUNC(double) _PyFloat_Unpack8(const unsigned char *p, int le); + +/* free list api */ +PyAPI_FUNC(int) PyFloat_ClearFreeList(void); + +PyAPI_FUNC(void) _PyFloat_DebugMallocStats(FILE* out); + +/* Format the object based on the format_spec, as defined in PEP 3101 + (Advanced String Formatting). */ +PyAPI_FUNC(int) _PyFloat_FormatAdvancedWriter( + _PyUnicodeWriter *writer, + PyObject *obj, + PyObject *format_spec, + Py_ssize_t start, + Py_ssize_t end); +#endif /* Py_LIMITED_API */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_FLOATOBJECT_H */ diff --git a/my_env/Include/frameobject.h b/my_env/Include/frameobject.h new file mode 100644 index 000000000..a95baf886 --- /dev/null +++ b/my_env/Include/frameobject.h @@ -0,0 +1,93 @@ + +/* Frame object interface */ + +#ifndef Py_LIMITED_API +#ifndef Py_FRAMEOBJECT_H +#define Py_FRAMEOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + int b_type; /* what kind of block this is */ + int b_handler; /* where to jump to find handler */ + int b_level; /* value stack level to pop to */ +} PyTryBlock; + +typedef struct _frame { + PyObject_VAR_HEAD + struct _frame *f_back; /* previous frame, or NULL */ + PyCodeObject *f_code; /* code segment */ + PyObject *f_builtins; /* builtin symbol table (PyDictObject) */ + PyObject *f_globals; /* global symbol table (PyDictObject) */ + PyObject *f_locals; /* local symbol table (any mapping) */ + PyObject **f_valuestack; /* points after the last local */ + /* Next free slot in f_valuestack. Frame creation sets to f_valuestack. + Frame evaluation usually NULLs it, but a frame that yields sets it + to the current stack top. */ + PyObject **f_stacktop; + PyObject *f_trace; /* Trace function */ + char f_trace_lines; /* Emit per-line trace events? */ + char f_trace_opcodes; /* Emit per-opcode trace events? */ + + /* Borrowed reference to a generator, or NULL */ + PyObject *f_gen; + + int f_lasti; /* Last instruction if called */ + /* Call PyFrame_GetLineNumber() instead of reading this field + directly. As of 2.3 f_lineno is only valid when tracing is + active (i.e. when f_trace is set). At other times we use + PyCode_Addr2Line to calculate the line from the current + bytecode index. */ + int f_lineno; /* Current line number */ + int f_iblock; /* index in f_blockstack */ + char f_executing; /* whether the frame is still executing */ + PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */ + PyObject *f_localsplus[1]; /* locals+stack, dynamically sized */ +} PyFrameObject; + + +/* Standard object interface */ + +PyAPI_DATA(PyTypeObject) PyFrame_Type; + +#define PyFrame_Check(op) (Py_TYPE(op) == &PyFrame_Type) + +PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *, + PyObject *, PyObject *); + +/* only internal use */ +PyFrameObject* _PyFrame_New_NoTrack(PyThreadState *, PyCodeObject *, + PyObject *, PyObject *); + + +/* The rest of the interface is specific for frame objects */ + +/* Block management functions */ + +PyAPI_FUNC(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int); +PyAPI_FUNC(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *); + +/* Extend the value stack */ + +PyAPI_FUNC(PyObject **) PyFrame_ExtendStack(PyFrameObject *, int, int); + +/* Conversions between "fast locals" and locals in dictionary */ + +PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int); + +PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f); +PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *); + +PyAPI_FUNC(int) PyFrame_ClearFreeList(void); + +PyAPI_FUNC(void) _PyFrame_DebugMallocStats(FILE *out); + +/* Return the line of code the frame is currently executing. */ +PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_FRAMEOBJECT_H */ +#endif /* Py_LIMITED_API */ diff --git a/my_env/Include/funcobject.h b/my_env/Include/funcobject.h new file mode 100644 index 000000000..86674ac90 --- /dev/null +++ b/my_env/Include/funcobject.h @@ -0,0 +1,103 @@ + +/* Function object interface */ +#ifndef Py_LIMITED_API +#ifndef Py_FUNCOBJECT_H +#define Py_FUNCOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +/* Function objects and code objects should not be confused with each other: + * + * Function objects are created by the execution of the 'def' statement. + * They reference a code object in their __code__ attribute, which is a + * purely syntactic object, i.e. nothing more than a compiled version of some + * source code lines. There is one code object per source code "fragment", + * but each code object can be referenced by zero or many function objects + * depending only on how many times the 'def' statement in the source was + * executed so far. + */ + +typedef struct { + PyObject_HEAD + PyObject *func_code; /* A code object, the __code__ attribute */ + PyObject *func_globals; /* A dictionary (other mappings won't do) */ + PyObject *func_defaults; /* NULL or a tuple */ + PyObject *func_kwdefaults; /* NULL or a dict */ + PyObject *func_closure; /* NULL or a tuple of cell objects */ + PyObject *func_doc; /* The __doc__ attribute, can be anything */ + PyObject *func_name; /* The __name__ attribute, a string object */ + PyObject *func_dict; /* The __dict__ attribute, a dict or NULL */ + PyObject *func_weakreflist; /* List of weak references */ + PyObject *func_module; /* The __module__ attribute, can be anything */ + PyObject *func_annotations; /* Annotations, a dict or NULL */ + PyObject *func_qualname; /* The qualified name */ + + /* Invariant: + * func_closure contains the bindings for func_code->co_freevars, so + * PyTuple_Size(func_closure) == PyCode_GetNumFree(func_code) + * (func_closure may be NULL if PyCode_GetNumFree(func_code) == 0). + */ +} PyFunctionObject; + +PyAPI_DATA(PyTypeObject) PyFunction_Type; + +#define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type) + +PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *); +PyAPI_FUNC(PyObject *) PyFunction_NewWithQualName(PyObject *, PyObject *, PyObject *); +PyAPI_FUNC(PyObject *) PyFunction_GetCode(PyObject *); +PyAPI_FUNC(PyObject *) PyFunction_GetGlobals(PyObject *); +PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *); +PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *); +PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *); +PyAPI_FUNC(PyObject *) PyFunction_GetKwDefaults(PyObject *); +PyAPI_FUNC(int) PyFunction_SetKwDefaults(PyObject *, PyObject *); +PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *); +PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *); +PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *); +PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyFunction_FastCallDict( + PyObject *func, + PyObject *const *args, + Py_ssize_t nargs, + PyObject *kwargs); + +PyAPI_FUNC(PyObject *) _PyFunction_FastCallKeywords( + PyObject *func, + PyObject *const *stack, + Py_ssize_t nargs, + PyObject *kwnames); +#endif + +/* Macros for direct access to these values. Type checks are *not* + done, so use with care. */ +#define PyFunction_GET_CODE(func) \ + (((PyFunctionObject *)func) -> func_code) +#define PyFunction_GET_GLOBALS(func) \ + (((PyFunctionObject *)func) -> func_globals) +#define PyFunction_GET_MODULE(func) \ + (((PyFunctionObject *)func) -> func_module) +#define PyFunction_GET_DEFAULTS(func) \ + (((PyFunctionObject *)func) -> func_defaults) +#define PyFunction_GET_KW_DEFAULTS(func) \ + (((PyFunctionObject *)func) -> func_kwdefaults) +#define PyFunction_GET_CLOSURE(func) \ + (((PyFunctionObject *)func) -> func_closure) +#define PyFunction_GET_ANNOTATIONS(func) \ + (((PyFunctionObject *)func) -> func_annotations) + +/* The classmethod and staticmethod types lives here, too */ +PyAPI_DATA(PyTypeObject) PyClassMethod_Type; +PyAPI_DATA(PyTypeObject) PyStaticMethod_Type; + +PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *); +PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_FUNCOBJECT_H */ +#endif /* Py_LIMITED_API */ diff --git a/my_env/Include/genobject.h b/my_env/Include/genobject.h new file mode 100644 index 000000000..16b983339 --- /dev/null +++ b/my_env/Include/genobject.h @@ -0,0 +1,105 @@ + +/* Generator object interface */ + +#ifndef Py_LIMITED_API +#ifndef Py_GENOBJECT_H +#define Py_GENOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +struct _frame; /* Avoid including frameobject.h */ + +/* _PyGenObject_HEAD defines the initial segment of generator + and coroutine objects. */ +#define _PyGenObject_HEAD(prefix) \ + PyObject_HEAD \ + /* Note: gi_frame can be NULL if the generator is "finished" */ \ + struct _frame *prefix##_frame; \ + /* True if generator is being executed. */ \ + char prefix##_running; \ + /* The code object backing the generator */ \ + PyObject *prefix##_code; \ + /* List of weak reference. */ \ + PyObject *prefix##_weakreflist; \ + /* Name of the generator. */ \ + PyObject *prefix##_name; \ + /* Qualified name of the generator. */ \ + PyObject *prefix##_qualname; \ + _PyErr_StackItem prefix##_exc_state; + +typedef struct { + /* The gi_ prefix is intended to remind of generator-iterator. */ + _PyGenObject_HEAD(gi) +} PyGenObject; + +PyAPI_DATA(PyTypeObject) PyGen_Type; + +#define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type) +#define PyGen_CheckExact(op) (Py_TYPE(op) == &PyGen_Type) + +PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *); +PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(struct _frame *, + PyObject *name, PyObject *qualname); +PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *); +PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *); +PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **); +PyAPI_FUNC(PyObject *) _PyGen_Send(PyGenObject *, PyObject *); +PyObject *_PyGen_yf(PyGenObject *); +PyAPI_FUNC(void) _PyGen_Finalize(PyObject *self); + +#ifndef Py_LIMITED_API +typedef struct { + _PyGenObject_HEAD(cr) + PyObject *cr_origin; +} PyCoroObject; + +PyAPI_DATA(PyTypeObject) PyCoro_Type; +PyAPI_DATA(PyTypeObject) _PyCoroWrapper_Type; + +PyAPI_DATA(PyTypeObject) _PyAIterWrapper_Type; + +#define PyCoro_CheckExact(op) (Py_TYPE(op) == &PyCoro_Type) +PyObject *_PyCoro_GetAwaitableIter(PyObject *o); +PyAPI_FUNC(PyObject *) PyCoro_New(struct _frame *, + PyObject *name, PyObject *qualname); + +/* Asynchronous Generators */ + +typedef struct { + _PyGenObject_HEAD(ag) + PyObject *ag_finalizer; + + /* Flag is set to 1 when hooks set up by sys.set_asyncgen_hooks + were called on the generator, to avoid calling them more + than once. */ + int ag_hooks_inited; + + /* Flag is set to 1 when aclose() is called for the first time, or + when a StopAsyncIteration exception is raised. */ + int ag_closed; +} PyAsyncGenObject; + +PyAPI_DATA(PyTypeObject) PyAsyncGen_Type; +PyAPI_DATA(PyTypeObject) _PyAsyncGenASend_Type; +PyAPI_DATA(PyTypeObject) _PyAsyncGenWrappedValue_Type; +PyAPI_DATA(PyTypeObject) _PyAsyncGenAThrow_Type; + +PyAPI_FUNC(PyObject *) PyAsyncGen_New(struct _frame *, + PyObject *name, PyObject *qualname); + +#define PyAsyncGen_CheckExact(op) (Py_TYPE(op) == &PyAsyncGen_Type) + +PyObject *_PyAsyncGenValueWrapperNew(PyObject *); + +int PyAsyncGen_ClearFreeLists(void); + +#endif + +#undef _PyGenObject_HEAD + +#ifdef __cplusplus +} +#endif +#endif /* !Py_GENOBJECT_H */ +#endif /* Py_LIMITED_API */ diff --git a/my_env/Include/graminit.h b/my_env/Include/graminit.h new file mode 100644 index 000000000..bdfe821ad --- /dev/null +++ b/my_env/Include/graminit.h @@ -0,0 +1,89 @@ +/* Generated by Parser/pgen */ + +#define single_input 256 +#define file_input 257 +#define eval_input 258 +#define decorator 259 +#define decorators 260 +#define decorated 261 +#define async_funcdef 262 +#define funcdef 263 +#define parameters 264 +#define typedargslist 265 +#define tfpdef 266 +#define varargslist 267 +#define vfpdef 268 +#define stmt 269 +#define simple_stmt 270 +#define small_stmt 271 +#define expr_stmt 272 +#define annassign 273 +#define testlist_star_expr 274 +#define augassign 275 +#define del_stmt 276 +#define pass_stmt 277 +#define flow_stmt 278 +#define break_stmt 279 +#define continue_stmt 280 +#define return_stmt 281 +#define yield_stmt 282 +#define raise_stmt 283 +#define import_stmt 284 +#define import_name 285 +#define import_from 286 +#define import_as_name 287 +#define dotted_as_name 288 +#define import_as_names 289 +#define dotted_as_names 290 +#define dotted_name 291 +#define global_stmt 292 +#define nonlocal_stmt 293 +#define assert_stmt 294 +#define compound_stmt 295 +#define async_stmt 296 +#define if_stmt 297 +#define while_stmt 298 +#define for_stmt 299 +#define try_stmt 300 +#define with_stmt 301 +#define with_item 302 +#define except_clause 303 +#define suite 304 +#define test 305 +#define test_nocond 306 +#define lambdef 307 +#define lambdef_nocond 308 +#define or_test 309 +#define and_test 310 +#define not_test 311 +#define comparison 312 +#define comp_op 313 +#define star_expr 314 +#define expr 315 +#define xor_expr 316 +#define and_expr 317 +#define shift_expr 318 +#define arith_expr 319 +#define term 320 +#define factor 321 +#define power 322 +#define atom_expr 323 +#define atom 324 +#define testlist_comp 325 +#define trailer 326 +#define subscriptlist 327 +#define subscript 328 +#define sliceop 329 +#define exprlist 330 +#define testlist 331 +#define dictorsetmaker 332 +#define classdef 333 +#define arglist 334 +#define argument 335 +#define comp_iter 336 +#define sync_comp_for 337 +#define comp_for 338 +#define comp_if 339 +#define encoding_decl 340 +#define yield_expr 341 +#define yield_arg 342 diff --git a/my_env/Include/grammar.h b/my_env/Include/grammar.h new file mode 100644 index 000000000..e1703f4b3 --- /dev/null +++ b/my_env/Include/grammar.h @@ -0,0 +1,94 @@ + +/* Grammar interface */ + +#ifndef Py_GRAMMAR_H +#define Py_GRAMMAR_H +#ifdef __cplusplus +extern "C" { +#endif + +#include "bitset.h" /* Sigh... */ + +/* A label of an arc */ + +typedef struct { + int lb_type; + char *lb_str; +} label; + +#define EMPTY 0 /* Label number 0 is by definition the empty label */ + +/* A list of labels */ + +typedef struct { + int ll_nlabels; + label *ll_label; +} labellist; + +/* An arc from one state to another */ + +typedef struct { + short a_lbl; /* Label of this arc */ + short a_arrow; /* State where this arc goes to */ +} arc; + +/* A state in a DFA */ + +typedef struct { + int s_narcs; + arc *s_arc; /* Array of arcs */ + + /* Optional accelerators */ + int s_lower; /* Lowest label index */ + int s_upper; /* Highest label index */ + int *s_accel; /* Accelerator */ + int s_accept; /* Nonzero for accepting state */ +} state; + +/* A DFA */ + +typedef struct { + int d_type; /* Non-terminal this represents */ + char *d_name; /* For printing */ + int d_initial; /* Initial state */ + int d_nstates; + state *d_state; /* Array of states */ + bitset d_first; +} dfa; + +/* A grammar */ + +typedef struct { + int g_ndfas; + dfa *g_dfa; /* Array of DFAs */ + labellist g_ll; + int g_start; /* Start symbol of the grammar */ + int g_accel; /* Set if accelerators present */ +} grammar; + +/* FUNCTIONS */ + +grammar *newgrammar(int start); +void freegrammar(grammar *g); +dfa *adddfa(grammar *g, int type, const char *name); +int addstate(dfa *d); +void addarc(dfa *d, int from, int to, int lbl); +dfa *PyGrammar_FindDFA(grammar *g, int type); + +int addlabel(labellist *ll, int type, const char *str); +int findlabel(labellist *ll, int type, const char *str); +const char *PyGrammar_LabelRepr(label *lb); +void translatelabels(grammar *g); + +void addfirstsets(grammar *g); + +void PyGrammar_AddAccelerators(grammar *g); +void PyGrammar_RemoveAccelerators(grammar *); + +void printgrammar(grammar *g, FILE *fp); +void printnonterminals(grammar *g, FILE *fp); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_GRAMMAR_H */ diff --git a/my_env/Include/import.h b/my_env/Include/import.h new file mode 100644 index 000000000..c66480347 --- /dev/null +++ b/my_env/Include/import.h @@ -0,0 +1,151 @@ + +/* Module definition and import interface */ + +#ifndef Py_IMPORT_H +#define Py_IMPORT_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API +PyAPI_FUNC(_PyInitError) _PyImportZip_Init(void); + +PyMODINIT_FUNC PyInit__imp(void); +#endif /* !Py_LIMITED_API */ +PyAPI_FUNC(long) PyImport_GetMagicNumber(void); +PyAPI_FUNC(const char *) PyImport_GetMagicTag(void); +PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule( + const char *name, /* UTF-8 encoded string */ + PyObject *co + ); +PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleEx( + const char *name, /* UTF-8 encoded string */ + PyObject *co, + const char *pathname /* decoded from the filesystem encoding */ + ); +PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleWithPathnames( + const char *name, /* UTF-8 encoded string */ + PyObject *co, + const char *pathname, /* decoded from the filesystem encoding */ + const char *cpathname /* decoded from the filesystem encoding */ + ); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleObject( + PyObject *name, + PyObject *co, + PyObject *pathname, + PyObject *cpathname + ); +#endif +PyAPI_FUNC(PyObject *) PyImport_GetModuleDict(void); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 +PyAPI_FUNC(PyObject *) PyImport_GetModule(PyObject *name); +#endif +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *); +PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name); +PyAPI_FUNC(PyObject *) _PyImport_AddModuleObject(PyObject *name, + PyObject *modules); +PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module); +PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module); +#endif +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(PyObject *) PyImport_AddModuleObject( + PyObject *name + ); +#endif +PyAPI_FUNC(PyObject *) PyImport_AddModule( + const char *name /* UTF-8 encoded string */ + ); +PyAPI_FUNC(PyObject *) PyImport_ImportModule( + const char *name /* UTF-8 encoded string */ + ); +PyAPI_FUNC(PyObject *) PyImport_ImportModuleNoBlock( + const char *name /* UTF-8 encoded string */ + ); +PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevel( + const char *name, /* UTF-8 encoded string */ + PyObject *globals, + PyObject *locals, + PyObject *fromlist, + int level + ); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject( + PyObject *name, + PyObject *globals, + PyObject *locals, + PyObject *fromlist, + int level + ); +#endif + +#define PyImport_ImportModuleEx(n, g, l, f) \ + PyImport_ImportModuleLevel(n, g, l, f, 0) + +PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path); +PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name); +PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m); +PyAPI_FUNC(void) PyImport_Cleanup(void); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(int) PyImport_ImportFrozenModuleObject( + PyObject *name + ); +#endif +PyAPI_FUNC(int) PyImport_ImportFrozenModule( + const char *name /* UTF-8 encoded string */ + ); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _PyImport_AcquireLock(void); +PyAPI_FUNC(int) _PyImport_ReleaseLock(void); + +PyAPI_FUNC(void) _PyImport_ReInitLock(void); + +PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin( + const char *name, /* UTF-8 encoded string */ + PyObject *modules + ); +PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *); +PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObjectEx(PyObject *, PyObject *, + PyObject *); +PyAPI_FUNC(int) _PyImport_FixupBuiltin( + PyObject *mod, + const char *name, /* UTF-8 encoded string */ + PyObject *modules + ); +PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *, + PyObject *, PyObject *); + +struct _inittab { + const char *name; /* ASCII encoded string */ + PyObject* (*initfunc)(void); +}; +PyAPI_DATA(struct _inittab *) PyImport_Inittab; +PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab); +#endif /* Py_LIMITED_API */ + +PyAPI_DATA(PyTypeObject) PyNullImporter_Type; + +PyAPI_FUNC(int) PyImport_AppendInittab( + const char *name, /* ASCII encoded string */ + PyObject* (*initfunc)(void) + ); + +#ifndef Py_LIMITED_API +struct _frozen { + const char *name; /* ASCII encoded string */ + const unsigned char *code; + int size; +}; + +/* Embedding apps may change this pointer to point to their favorite + collection of frozen modules: */ + +PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules; +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_IMPORT_H */ diff --git a/my_env/Include/internal/ceval.h b/my_env/Include/internal/ceval.h new file mode 100644 index 000000000..cdabb9521 --- /dev/null +++ b/my_env/Include/internal/ceval.h @@ -0,0 +1,52 @@ +#ifndef Py_INTERNAL_CEVAL_H +#define Py_INTERNAL_CEVAL_H +#ifdef __cplusplus +extern "C" { +#endif + +#include "pyatomic.h" +#include "pythread.h" + +struct _pending_calls { + unsigned long main_thread; + PyThread_type_lock lock; + /* Request for running pending calls. */ + _Py_atomic_int calls_to_do; + /* Request for looking at the `async_exc` field of the current + thread state. + Guarded by the GIL. */ + int async_exc; +#define NPENDINGCALLS 32 + struct { + int (*func)(void *); + void *arg; + } calls[NPENDINGCALLS]; + int first; + int last; +}; + +#include "internal/gil.h" + +struct _ceval_runtime_state { + int recursion_limit; + /* Records whether tracing is on for any thread. Counts the number + of threads for which tstate->c_tracefunc is non-NULL, so if the + value is 0, we know we don't have to check this thread's + c_tracefunc. This speeds up the if statement in + PyEval_EvalFrameEx() after fast_next_opcode. */ + int tracing_possible; + /* This single variable consolidates all requests to break out of + the fast path in the eval loop. */ + _Py_atomic_int eval_breaker; + /* Request for dropping the GIL */ + _Py_atomic_int gil_drop_request; + struct _pending_calls pending; + struct _gil_runtime_state gil; +}; + +PyAPI_FUNC(void) _PyEval_Initialize(struct _ceval_runtime_state *); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_CEVAL_H */ diff --git a/my_env/Include/internal/condvar.h b/my_env/Include/internal/condvar.h new file mode 100644 index 000000000..f9330890d --- /dev/null +++ b/my_env/Include/internal/condvar.h @@ -0,0 +1,91 @@ +#ifndef Py_INTERNAL_CONDVAR_H +#define Py_INTERNAL_CONDVAR_H + +#ifndef _POSIX_THREADS +/* This means pthreads are not implemented in libc headers, hence the macro + not present in unistd.h. But they still can be implemented as an external + library (e.g. gnu pth in pthread emulation) */ +# ifdef HAVE_PTHREAD_H +# include /* _POSIX_THREADS */ +# endif +#endif + +#ifdef _POSIX_THREADS +/* + * POSIX support + */ +#define Py_HAVE_CONDVAR + +#include + +#define PyMUTEX_T pthread_mutex_t +#define PyCOND_T pthread_cond_t + +#elif defined(NT_THREADS) +/* + * Windows (XP, 2003 server and later, as well as (hopefully) CE) support + * + * Emulated condition variables ones that work with XP and later, plus + * example native support on VISTA and onwards. + */ +#define Py_HAVE_CONDVAR + +/* include windows if it hasn't been done before */ +#define WIN32_LEAN_AND_MEAN +#include + +/* options */ +/* non-emulated condition variables are provided for those that want + * to target Windows Vista. Modify this macro to enable them. + */ +#ifndef _PY_EMULATED_WIN_CV +#define _PY_EMULATED_WIN_CV 1 /* use emulated condition variables */ +#endif + +/* fall back to emulation if not targeting Vista */ +#if !defined NTDDI_VISTA || NTDDI_VERSION < NTDDI_VISTA +#undef _PY_EMULATED_WIN_CV +#define _PY_EMULATED_WIN_CV 1 +#endif + +#if _PY_EMULATED_WIN_CV + +typedef CRITICAL_SECTION PyMUTEX_T; + +/* The ConditionVariable object. From XP onwards it is easily emulated + with a Semaphore. + Semaphores are available on Windows XP (2003 server) and later. + We use a Semaphore rather than an auto-reset event, because although + an auto-resent event might appear to solve the lost-wakeup bug (race + condition between releasing the outer lock and waiting) because it + maintains state even though a wait hasn't happened, there is still + a lost wakeup problem if more than one thread are interrupted in the + critical place. A semaphore solves that, because its state is + counted, not Boolean. + Because it is ok to signal a condition variable with no one + waiting, we need to keep track of the number of + waiting threads. Otherwise, the semaphore's state could rise + without bound. This also helps reduce the number of "spurious wakeups" + that would otherwise happen. + */ + +typedef struct _PyCOND_T +{ + HANDLE sem; + int waiting; /* to allow PyCOND_SIGNAL to be a no-op */ +} PyCOND_T; + +#else /* !_PY_EMULATED_WIN_CV */ + +/* Use native Win7 primitives if build target is Win7 or higher */ + +/* SRWLOCK is faster and better than CriticalSection */ +typedef SRWLOCK PyMUTEX_T; + +typedef CONDITION_VARIABLE PyCOND_T; + +#endif /* _PY_EMULATED_WIN_CV */ + +#endif /* _POSIX_THREADS, NT_THREADS */ + +#endif /* Py_INTERNAL_CONDVAR_H */ diff --git a/my_env/Include/internal/context.h b/my_env/Include/internal/context.h new file mode 100644 index 000000000..59f88f261 --- /dev/null +++ b/my_env/Include/internal/context.h @@ -0,0 +1,41 @@ +#ifndef Py_INTERNAL_CONTEXT_H +#define Py_INTERNAL_CONTEXT_H + + +#include "internal/hamt.h" + + +struct _pycontextobject { + PyObject_HEAD + PyContext *ctx_prev; + PyHamtObject *ctx_vars; + PyObject *ctx_weakreflist; + int ctx_entered; +}; + + +struct _pycontextvarobject { + PyObject_HEAD + PyObject *var_name; + PyObject *var_default; + PyObject *var_cached; + uint64_t var_cached_tsid; + uint64_t var_cached_tsver; + Py_hash_t var_hash; +}; + + +struct _pycontexttokenobject { + PyObject_HEAD + PyContext *tok_ctx; + PyContextVar *tok_var; + PyObject *tok_oldval; + int tok_used; +}; + + +int _PyContext_Init(void); +void _PyContext_Fini(void); + + +#endif /* !Py_INTERNAL_CONTEXT_H */ diff --git a/my_env/Include/internal/gil.h b/my_env/Include/internal/gil.h new file mode 100644 index 000000000..6139bd215 --- /dev/null +++ b/my_env/Include/internal/gil.h @@ -0,0 +1,46 @@ +#ifndef Py_INTERNAL_GIL_H +#define Py_INTERNAL_GIL_H +#ifdef __cplusplus +extern "C" { +#endif + +#include "pyatomic.h" + +#include "internal/condvar.h" +#ifndef Py_HAVE_CONDVAR +#error You need either a POSIX-compatible or a Windows system! +#endif + +/* Enable if you want to force the switching of threads at least + every `interval`. */ +#undef FORCE_SWITCHING +#define FORCE_SWITCHING + +struct _gil_runtime_state { + /* microseconds (the Python API uses seconds, though) */ + unsigned long interval; + /* Last PyThreadState holding / having held the GIL. This helps us + know whether anyone else was scheduled after we dropped the GIL. */ + _Py_atomic_address last_holder; + /* Whether the GIL is already taken (-1 if uninitialized). This is + atomic because it can be read without any lock taken in ceval.c. */ + _Py_atomic_int locked; + /* Number of GIL switches since the beginning. */ + unsigned long switch_number; + /* This condition variable allows one or several threads to wait + until the GIL is released. In addition, the mutex also protects + the above variables. */ + PyCOND_T cond; + PyMUTEX_T mutex; +#ifdef FORCE_SWITCHING + /* This condition variable helps the GIL-releasing thread wait for + a GIL-awaiting thread to be scheduled and take the GIL. */ + PyCOND_T switch_cond; + PyMUTEX_T switch_mutex; +#endif +}; + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_GIL_H */ diff --git a/my_env/Include/internal/hamt.h b/my_env/Include/internal/hamt.h new file mode 100644 index 000000000..29ad28b1d --- /dev/null +++ b/my_env/Include/internal/hamt.h @@ -0,0 +1,113 @@ +#ifndef Py_INTERNAL_HAMT_H +#define Py_INTERNAL_HAMT_H + + +#define _Py_HAMT_MAX_TREE_DEPTH 7 + + +#define PyHamt_Check(o) (Py_TYPE(o) == &_PyHamt_Type) + + +/* Abstract tree node. */ +typedef struct { + PyObject_HEAD +} PyHamtNode; + + +/* An HAMT immutable mapping collection. */ +typedef struct { + PyObject_HEAD + PyHamtNode *h_root; + PyObject *h_weakreflist; + Py_ssize_t h_count; +} PyHamtObject; + + +/* A struct to hold the state of depth-first traverse of the tree. + + HAMT is an immutable collection. Iterators will hold a strong reference + to it, and every node in the HAMT has strong references to its children. + + So for iterators, we can implement zero allocations and zero reference + inc/dec depth-first iteration. + + - i_nodes: an array of seven pointers to tree nodes + - i_level: the current node in i_nodes + - i_pos: an array of positions within nodes in i_nodes. +*/ +typedef struct { + PyHamtNode *i_nodes[_Py_HAMT_MAX_TREE_DEPTH]; + Py_ssize_t i_pos[_Py_HAMT_MAX_TREE_DEPTH]; + int8_t i_level; +} PyHamtIteratorState; + + +/* Base iterator object. + + Contains the iteration state, a pointer to the HAMT tree, + and a pointer to the 'yield function'. The latter is a simple + function that returns a key/value tuple for the 'Items' iterator, + just a key for the 'Keys' iterator, and a value for the 'Values' + iterator. +*/ +typedef struct { + PyObject_HEAD + PyHamtObject *hi_obj; + PyHamtIteratorState hi_iter; + binaryfunc hi_yield; +} PyHamtIterator; + + +PyAPI_DATA(PyTypeObject) _PyHamt_Type; +PyAPI_DATA(PyTypeObject) _PyHamt_ArrayNode_Type; +PyAPI_DATA(PyTypeObject) _PyHamt_BitmapNode_Type; +PyAPI_DATA(PyTypeObject) _PyHamt_CollisionNode_Type; +PyAPI_DATA(PyTypeObject) _PyHamtKeys_Type; +PyAPI_DATA(PyTypeObject) _PyHamtValues_Type; +PyAPI_DATA(PyTypeObject) _PyHamtItems_Type; + + +/* Create a new HAMT immutable mapping. */ +PyHamtObject * _PyHamt_New(void); + +/* Return a new collection based on "o", but with an additional + key/val pair. */ +PyHamtObject * _PyHamt_Assoc(PyHamtObject *o, PyObject *key, PyObject *val); + +/* Return a new collection based on "o", but without "key". */ +PyHamtObject * _PyHamt_Without(PyHamtObject *o, PyObject *key); + +/* Find "key" in the "o" collection. + + Return: + - -1: An error occurred. + - 0: "key" wasn't found in "o". + - 1: "key" is in "o"; "*val" is set to its value (a borrowed ref). +*/ +int _PyHamt_Find(PyHamtObject *o, PyObject *key, PyObject **val); + +/* Check if "v" is equal to "w". + + Return: + - 0: v != w + - 1: v == w + - -1: An error occurred. +*/ +int _PyHamt_Eq(PyHamtObject *v, PyHamtObject *w); + +/* Return the size of "o"; equivalent of "len(o)". */ +Py_ssize_t _PyHamt_Len(PyHamtObject *o); + +/* Return a Keys iterator over "o". */ +PyObject * _PyHamt_NewIterKeys(PyHamtObject *o); + +/* Return a Values iterator over "o". */ +PyObject * _PyHamt_NewIterValues(PyHamtObject *o); + +/* Return a Items iterator over "o". */ +PyObject * _PyHamt_NewIterItems(PyHamtObject *o); + +int _PyHamt_Init(void); +void _PyHamt_Fini(void); + +#endif /* !Py_INTERNAL_HAMT_H */ diff --git a/my_env/Include/internal/hash.h b/my_env/Include/internal/hash.h new file mode 100644 index 000000000..e14b80a7f --- /dev/null +++ b/my_env/Include/internal/hash.h @@ -0,0 +1,6 @@ +#ifndef Py_INTERNAL_HASH_H +#define Py_INTERNAL_HASH_H + +uint64_t _Py_KeyedHash(uint64_t, const char *, Py_ssize_t); + +#endif diff --git a/my_env/Include/internal/import.h b/my_env/Include/internal/import.h new file mode 100644 index 000000000..4746e7557 --- /dev/null +++ b/my_env/Include/internal/import.h @@ -0,0 +1,6 @@ +#ifndef Py_INTERNAL_IMPORT_H +#define Py_INTERNAL_IMPORT_H + +extern const char *_Py_CheckHashBasedPycsMode; + +#endif diff --git a/my_env/Include/internal/mem.h b/my_env/Include/internal/mem.h new file mode 100644 index 000000000..5896e4a05 --- /dev/null +++ b/my_env/Include/internal/mem.h @@ -0,0 +1,175 @@ +#ifndef Py_INTERNAL_MEM_H +#define Py_INTERNAL_MEM_H +#ifdef __cplusplus +extern "C" { +#endif + +#include "objimpl.h" +#include "pymem.h" + + +/* GC runtime state */ + +/* If we change this, we need to change the default value in the + signature of gc.collect. */ +#define NUM_GENERATIONS 3 + +/* + NOTE: about the counting of long-lived objects. + + To limit the cost of garbage collection, there are two strategies; + - make each collection faster, e.g. by scanning fewer objects + - do less collections + This heuristic is about the latter strategy. + + In addition to the various configurable thresholds, we only trigger a + full collection if the ratio + long_lived_pending / long_lived_total + is above a given value (hardwired to 25%). + + The reason is that, while "non-full" collections (i.e., collections of + the young and middle generations) will always examine roughly the same + number of objects -- determined by the aforementioned thresholds --, + the cost of a full collection is proportional to the total number of + long-lived objects, which is virtually unbounded. + + Indeed, it has been remarked that doing a full collection every + of object creations entails a dramatic performance + degradation in workloads which consist in creating and storing lots of + long-lived objects (e.g. building a large list of GC-tracked objects would + show quadratic performance, instead of linear as expected: see issue #4074). + + Using the above ratio, instead, yields amortized linear performance in + the total number of objects (the effect of which can be summarized + thusly: "each full garbage collection is more and more costly as the + number of objects grows, but we do fewer and fewer of them"). + + This heuristic was suggested by Martin von Löwis on python-dev in + June 2008. His original analysis and proposal can be found at: + http://mail.python.org/pipermail/python-dev/2008-June/080579.html +*/ + +/* + NOTE: about untracking of mutable objects. + + Certain types of container cannot participate in a reference cycle, and + so do not need to be tracked by the garbage collector. Untracking these + objects reduces the cost of garbage collections. However, determining + which objects may be untracked is not free, and the costs must be + weighed against the benefits for garbage collection. + + There are two possible strategies for when to untrack a container: + + i) When the container is created. + ii) When the container is examined by the garbage collector. + + Tuples containing only immutable objects (integers, strings etc, and + recursively, tuples of immutable objects) do not need to be tracked. + The interpreter creates a large number of tuples, many of which will + not survive until garbage collection. It is therefore not worthwhile + to untrack eligible tuples at creation time. + + Instead, all tuples except the empty tuple are tracked when created. + During garbage collection it is determined whether any surviving tuples + can be untracked. A tuple can be untracked if all of its contents are + already not tracked. Tuples are examined for untracking in all garbage + collection cycles. It may take more than one cycle to untrack a tuple. + + Dictionaries containing only immutable objects also do not need to be + tracked. Dictionaries are untracked when created. If a tracked item is + inserted into a dictionary (either as a key or value), the dictionary + becomes tracked. During a full garbage collection (all generations), + the collector will untrack any dictionaries whose contents are not + tracked. + + The module provides the python function is_tracked(obj), which returns + the CURRENT tracking status of the object. Subsequent garbage + collections may change the tracking status of the object. + + Untracking of certain containers was introduced in issue #4688, and + the algorithm was refined in response to issue #14775. +*/ + +struct gc_generation { + PyGC_Head head; + int threshold; /* collection threshold */ + int count; /* count of allocations or collections of younger + generations */ +}; + +/* Running stats per generation */ +struct gc_generation_stats { + /* total number of collections */ + Py_ssize_t collections; + /* total number of collected objects */ + Py_ssize_t collected; + /* total number of uncollectable objects (put into gc.garbage) */ + Py_ssize_t uncollectable; +}; + +struct _gc_runtime_state { + /* List of objects that still need to be cleaned up, singly linked + * via their gc headers' gc_prev pointers. */ + PyObject *trash_delete_later; + /* Current call-stack depth of tp_dealloc calls. */ + int trash_delete_nesting; + + int enabled; + int debug; + /* linked lists of container objects */ + struct gc_generation generations[NUM_GENERATIONS]; + PyGC_Head *generation0; + /* a permanent generation which won't be collected */ + struct gc_generation permanent_generation; + struct gc_generation_stats generation_stats[NUM_GENERATIONS]; + /* true if we are currently running the collector */ + int collecting; + /* list of uncollectable objects */ + PyObject *garbage; + /* a list of callbacks to be invoked when collection is performed */ + PyObject *callbacks; + /* This is the number of objects that survived the last full + collection. It approximates the number of long lived objects + tracked by the GC. + + (by "full collection", we mean a collection of the oldest + generation). */ + Py_ssize_t long_lived_total; + /* This is the number of objects that survived all "non-full" + collections, and are awaiting to undergo a full collection for + the first time. */ + Py_ssize_t long_lived_pending; +}; + +PyAPI_FUNC(void) _PyGC_Initialize(struct _gc_runtime_state *); + +#define _PyGC_generation0 _PyRuntime.gc.generation0 + +/* Heuristic checking if a pointer value is newly allocated + (uninitialized) or newly freed. The pointer is not dereferenced, only the + pointer value is checked. + + The heuristic relies on the debug hooks on Python memory allocators which + fills newly allocated memory with CLEANBYTE (0xCD) and newly freed memory + with DEADBYTE (0xDD). Detect also "untouchable bytes" marked + with FORBIDDENBYTE (0xFD). */ +static inline int _PyMem_IsPtrFreed(void *ptr) +{ + uintptr_t value = (uintptr_t)ptr; +#if SIZEOF_VOID_P == 8 + return (value == (uintptr_t)0xCDCDCDCDCDCDCDCD + || value == (uintptr_t)0xDDDDDDDDDDDDDDDD + || value == (uintptr_t)0xFDFDFDFDFDFDFDFD); +#elif SIZEOF_VOID_P == 4 + return (value == (uintptr_t)0xCDCDCDCD + || value == (uintptr_t)0xDDDDDDDD + || value == (uintptr_t)0xFDFDFDFD); +#else +# error "unknown pointer size" +#endif +} + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_MEM_H */ diff --git a/my_env/Include/internal/pygetopt.h b/my_env/Include/internal/pygetopt.h new file mode 100644 index 000000000..8ef2ada72 --- /dev/null +++ b/my_env/Include/internal/pygetopt.h @@ -0,0 +1,19 @@ +#ifndef Py_INTERNAL_PYGETOPT_H +#define Py_INTERNAL_PYGETOPT_H + +extern int _PyOS_opterr; +extern int _PyOS_optind; +extern wchar_t *_PyOS_optarg; + +extern void _PyOS_ResetGetOpt(void); + +typedef struct { + const wchar_t *name; + int has_arg; + int val; +} _PyOS_LongOption; + +extern int _PyOS_GetOpt(int argc, wchar_t **argv, wchar_t *optstring, + const _PyOS_LongOption *longopts, int *longindex); + +#endif /* !Py_INTERNAL_PYGETOPT_H */ diff --git a/my_env/Include/internal/pystate.h b/my_env/Include/internal/pystate.h new file mode 100644 index 000000000..5891339b5 --- /dev/null +++ b/my_env/Include/internal/pystate.h @@ -0,0 +1,135 @@ +#ifndef Py_INTERNAL_PYSTATE_H +#define Py_INTERNAL_PYSTATE_H +#ifdef __cplusplus +extern "C" { +#endif + +#include "pystate.h" +#include "pyatomic.h" +#include "pythread.h" + +#include "internal/mem.h" +#include "internal/ceval.h" +#include "internal/warnings.h" + + +/* GIL state */ + +struct _gilstate_runtime_state { + int check_enabled; + /* Assuming the current thread holds the GIL, this is the + PyThreadState for the current thread. */ + _Py_atomic_address tstate_current; + PyThreadFrameGetter getframe; + /* The single PyInterpreterState used by this process' + GILState implementation + */ + /* TODO: Given interp_main, it may be possible to kill this ref */ + PyInterpreterState *autoInterpreterState; + Py_tss_t autoTSSkey; +}; + +/* hook for PyEval_GetFrame(), requested for Psyco */ +#define _PyThreadState_GetFrame _PyRuntime.gilstate.getframe + +/* Issue #26558: Flag to disable PyGILState_Check(). + If set to non-zero, PyGILState_Check() always return 1. */ +#define _PyGILState_check_enabled _PyRuntime.gilstate.check_enabled + + +typedef struct { + /* Full path to the Python program */ + wchar_t *program_full_path; + wchar_t *prefix; +#ifdef MS_WINDOWS + wchar_t *dll_path; +#else + wchar_t *exec_prefix; +#endif + /* Set by Py_SetPath(), or computed by _PyPathConfig_Init() */ + wchar_t *module_search_path; + /* Python program name */ + wchar_t *program_name; + /* Set by Py_SetPythonHome() or PYTHONHOME environment variable */ + wchar_t *home; +} _PyPathConfig; + +#define _PyPathConfig_INIT {.module_search_path = NULL} +/* Note: _PyPathConfig_INIT sets other fields to 0/NULL */ + +PyAPI_DATA(_PyPathConfig) _Py_path_config; + +PyAPI_FUNC(_PyInitError) _PyPathConfig_Calculate( + _PyPathConfig *config, + const _PyCoreConfig *core_config); +PyAPI_FUNC(void) _PyPathConfig_Clear(_PyPathConfig *config); + + +/* interpreter state */ + +PyAPI_FUNC(PyInterpreterState *) _PyInterpreterState_LookUpID(PY_INT64_T); + +PyAPI_FUNC(int) _PyInterpreterState_IDInitref(PyInterpreterState *); +PyAPI_FUNC(void) _PyInterpreterState_IDIncref(PyInterpreterState *); +PyAPI_FUNC(void) _PyInterpreterState_IDDecref(PyInterpreterState *); + +/* Full Python runtime state */ + +typedef struct pyruntimestate { + int initialized; + int core_initialized; + PyThreadState *finalizing; + + struct pyinterpreters { + PyThread_type_lock mutex; + PyInterpreterState *head; + PyInterpreterState *main; + /* _next_interp_id is an auto-numbered sequence of small + integers. It gets initialized in _PyInterpreterState_Init(), + which is called in Py_Initialize(), and used in + PyInterpreterState_New(). A negative interpreter ID + indicates an error occurred. The main interpreter will + always have an ID of 0. Overflow results in a RuntimeError. + If that becomes a problem later then we can adjust, e.g. by + using a Python int. */ + int64_t next_id; + } interpreters; + +#define NEXITFUNCS 32 + void (*exitfuncs[NEXITFUNCS])(void); + int nexitfuncs; + + struct _gc_runtime_state gc; + struct _warnings_runtime_state warnings; + struct _ceval_runtime_state ceval; + struct _gilstate_runtime_state gilstate; + + // XXX Consolidate globals found via the check-c-globals script. +} _PyRuntimeState; + +#define _PyRuntimeState_INIT {.initialized = 0, .core_initialized = 0} +/* Note: _PyRuntimeState_INIT sets other fields to 0/NULL */ + +PyAPI_DATA(_PyRuntimeState) _PyRuntime; +PyAPI_FUNC(_PyInitError) _PyRuntimeState_Init(_PyRuntimeState *); +PyAPI_FUNC(void) _PyRuntimeState_Fini(_PyRuntimeState *); + +/* Initialize _PyRuntimeState. + Return NULL on success, or return an error message on failure. */ +PyAPI_FUNC(_PyInitError) _PyRuntime_Initialize(void); + +PyAPI_FUNC(void) _PyRuntime_Finalize(void); + + +#define _Py_CURRENTLY_FINALIZING(tstate) \ + (_PyRuntime.finalizing == tstate) + + +/* Other */ + +PyAPI_FUNC(_PyInitError) _PyInterpreterState_Enable(_PyRuntimeState *); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_PYSTATE_H */ diff --git a/my_env/Include/internal/warnings.h b/my_env/Include/internal/warnings.h new file mode 100644 index 000000000..2878a28a2 --- /dev/null +++ b/my_env/Include/internal/warnings.h @@ -0,0 +1,21 @@ +#ifndef Py_INTERNAL_WARNINGS_H +#define Py_INTERNAL_WARNINGS_H +#ifdef __cplusplus +extern "C" { +#endif + +#include "object.h" + +struct _warnings_runtime_state { + /* Both 'filters' and 'onceregistry' can be set in warnings.py; + get_warnings_attr() will reset these variables accordingly. */ + PyObject *filters; /* List */ + PyObject *once_registry; /* Dict */ + PyObject *default_action; /* String */ + long filters_version; +}; + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_WARNINGS_H */ diff --git a/my_env/Include/intrcheck.h b/my_env/Include/intrcheck.h new file mode 100644 index 000000000..2e17336ca --- /dev/null +++ b/my_env/Include/intrcheck.h @@ -0,0 +1,33 @@ + +#ifndef Py_INTRCHECK_H +#define Py_INTRCHECK_H +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_FUNC(int) PyOS_InterruptOccurred(void); +PyAPI_FUNC(void) PyOS_InitInterrupts(void); +#ifdef HAVE_FORK +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 +PyAPI_FUNC(void) PyOS_BeforeFork(void); +PyAPI_FUNC(void) PyOS_AfterFork_Parent(void); +PyAPI_FUNC(void) PyOS_AfterFork_Child(void); +#endif +#endif +/* Deprecated, please use PyOS_AfterFork_Child() instead */ +PyAPI_FUNC(void) PyOS_AfterFork(void) Py_DEPRECATED(3.7); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyOS_IsMainThread(void); +PyAPI_FUNC(void) _PySignal_AfterFork(void); + +#ifdef MS_WINDOWS +/* windows.h is not included by Python.h so use void* instead of HANDLE */ +PyAPI_FUNC(void*) _PyOS_SigintEvent(void); +#endif +#endif /* !Py_LIMITED_API */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTRCHECK_H */ diff --git a/my_env/Include/iterobject.h b/my_env/Include/iterobject.h new file mode 100644 index 000000000..f61726f1f --- /dev/null +++ b/my_env/Include/iterobject.h @@ -0,0 +1,25 @@ +#ifndef Py_ITEROBJECT_H +#define Py_ITEROBJECT_H +/* Iterators (the basic kind, over a sequence) */ +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_DATA(PyTypeObject) PySeqIter_Type; +PyAPI_DATA(PyTypeObject) PyCallIter_Type; +PyAPI_DATA(PyTypeObject) PyCmpWrapper_Type; + +#define PySeqIter_Check(op) (Py_TYPE(op) == &PySeqIter_Type) + +PyAPI_FUNC(PyObject *) PySeqIter_New(PyObject *); + + +#define PyCallIter_Check(op) (Py_TYPE(op) == &PyCallIter_Type) + +PyAPI_FUNC(PyObject *) PyCallIter_New(PyObject *, PyObject *); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_ITEROBJECT_H */ + diff --git a/my_env/Include/listobject.h b/my_env/Include/listobject.h new file mode 100644 index 000000000..6057279d5 --- /dev/null +++ b/my_env/Include/listobject.h @@ -0,0 +1,81 @@ + +/* List object interface */ + +/* +Another generally useful object type is a list of object pointers. +This is a mutable type: the list items can be changed, and items can be +added or removed. Out-of-range indices or non-list objects are ignored. + +*** WARNING *** PyList_SetItem does not increment the new item's reference +count, but does decrement the reference count of the item it replaces, +if not nil. It does *decrement* the reference count if it is *not* +inserted in the list. Similarly, PyList_GetItem does not increment the +returned item's reference count. +*/ + +#ifndef Py_LISTOBJECT_H +#define Py_LISTOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API +typedef struct { + PyObject_VAR_HEAD + /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */ + PyObject **ob_item; + + /* ob_item contains space for 'allocated' elements. The number + * currently in use is ob_size. + * Invariants: + * 0 <= ob_size <= allocated + * len(list) == ob_size + * ob_item == NULL implies ob_size == allocated == 0 + * list.sort() temporarily sets allocated to -1 to detect mutations. + * + * Items must normally not be NULL, except during construction when + * the list is not yet visible outside the function that builds it. + */ + Py_ssize_t allocated; +} PyListObject; +#endif + +PyAPI_DATA(PyTypeObject) PyList_Type; +PyAPI_DATA(PyTypeObject) PyListIter_Type; +PyAPI_DATA(PyTypeObject) PyListRevIter_Type; +PyAPI_DATA(PyTypeObject) PySortWrapper_Type; + +#define PyList_Check(op) \ + PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS) +#define PyList_CheckExact(op) (Py_TYPE(op) == &PyList_Type) + +PyAPI_FUNC(PyObject *) PyList_New(Py_ssize_t size); +PyAPI_FUNC(Py_ssize_t) PyList_Size(PyObject *); +PyAPI_FUNC(PyObject *) PyList_GetItem(PyObject *, Py_ssize_t); +PyAPI_FUNC(int) PyList_SetItem(PyObject *, Py_ssize_t, PyObject *); +PyAPI_FUNC(int) PyList_Insert(PyObject *, Py_ssize_t, PyObject *); +PyAPI_FUNC(int) PyList_Append(PyObject *, PyObject *); +PyAPI_FUNC(PyObject *) PyList_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t); +PyAPI_FUNC(int) PyList_SetSlice(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *); +PyAPI_FUNC(int) PyList_Sort(PyObject *); +PyAPI_FUNC(int) PyList_Reverse(PyObject *); +PyAPI_FUNC(PyObject *) PyList_AsTuple(PyObject *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *); + +PyAPI_FUNC(int) PyList_ClearFreeList(void); +PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out); +#endif + +/* Macro, trading safety for speed */ +#ifndef Py_LIMITED_API +#define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i]) +#define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item[i] = (v)) +#define PyList_GET_SIZE(op) (assert(PyList_Check(op)),Py_SIZE(op)) +#define _PyList_ITEMS(op) (((PyListObject *)(op))->ob_item) +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_LISTOBJECT_H */ diff --git a/my_env/Include/longintrepr.h b/my_env/Include/longintrepr.h new file mode 100644 index 000000000..ff4155f96 --- /dev/null +++ b/my_env/Include/longintrepr.h @@ -0,0 +1,99 @@ +#ifndef Py_LIMITED_API +#ifndef Py_LONGINTREPR_H +#define Py_LONGINTREPR_H +#ifdef __cplusplus +extern "C" { +#endif + + +/* This is published for the benefit of "friends" marshal.c and _decimal.c. */ + +/* Parameters of the integer representation. There are two different + sets of parameters: one set for 30-bit digits, stored in an unsigned 32-bit + integer type, and one set for 15-bit digits with each digit stored in an + unsigned short. The value of PYLONG_BITS_IN_DIGIT, defined either at + configure time or in pyport.h, is used to decide which digit size to use. + + Type 'digit' should be able to hold 2*PyLong_BASE-1, and type 'twodigits' + should be an unsigned integer type able to hold all integers up to + PyLong_BASE*PyLong_BASE-1. x_sub assumes that 'digit' is an unsigned type, + and that overflow is handled by taking the result modulo 2**N for some N > + PyLong_SHIFT. The majority of the code doesn't care about the precise + value of PyLong_SHIFT, but there are some notable exceptions: + + - long_pow() requires that PyLong_SHIFT be divisible by 5 + + - PyLong_{As,From}ByteArray require that PyLong_SHIFT be at least 8 + + - long_hash() requires that PyLong_SHIFT is *strictly* less than the number + of bits in an unsigned long, as do the PyLong <-> long (or unsigned long) + conversion functions + + - the Python int <-> size_t/Py_ssize_t conversion functions expect that + PyLong_SHIFT is strictly less than the number of bits in a size_t + + - the marshal code currently expects that PyLong_SHIFT is a multiple of 15 + + - NSMALLNEGINTS and NSMALLPOSINTS should be small enough to fit in a single + digit; with the current values this forces PyLong_SHIFT >= 9 + + The values 15 and 30 should fit all of the above requirements, on any + platform. +*/ + +#if PYLONG_BITS_IN_DIGIT == 30 +typedef uint32_t digit; +typedef int32_t sdigit; /* signed variant of digit */ +typedef uint64_t twodigits; +typedef int64_t stwodigits; /* signed variant of twodigits */ +#define PyLong_SHIFT 30 +#define _PyLong_DECIMAL_SHIFT 9 /* max(e such that 10**e fits in a digit) */ +#define _PyLong_DECIMAL_BASE ((digit)1000000000) /* 10 ** DECIMAL_SHIFT */ +#elif PYLONG_BITS_IN_DIGIT == 15 +typedef unsigned short digit; +typedef short sdigit; /* signed variant of digit */ +typedef unsigned long twodigits; +typedef long stwodigits; /* signed variant of twodigits */ +#define PyLong_SHIFT 15 +#define _PyLong_DECIMAL_SHIFT 4 /* max(e such that 10**e fits in a digit) */ +#define _PyLong_DECIMAL_BASE ((digit)10000) /* 10 ** DECIMAL_SHIFT */ +#else +#error "PYLONG_BITS_IN_DIGIT should be 15 or 30" +#endif +#define PyLong_BASE ((digit)1 << PyLong_SHIFT) +#define PyLong_MASK ((digit)(PyLong_BASE - 1)) + +#if PyLong_SHIFT % 5 != 0 +#error "longobject.c requires that PyLong_SHIFT be divisible by 5" +#endif + +/* Long integer representation. + The absolute value of a number is equal to + SUM(for i=0 through abs(ob_size)-1) ob_digit[i] * 2**(SHIFT*i) + Negative numbers are represented with ob_size < 0; + zero is represented by ob_size == 0. + In a normalized number, ob_digit[abs(ob_size)-1] (the most significant + digit) is never zero. Also, in all cases, for all valid i, + 0 <= ob_digit[i] <= MASK. + The allocation function takes care of allocating extra memory + so that ob_digit[0] ... ob_digit[abs(ob_size)-1] are actually available. + + CAUTION: Generic code manipulating subtypes of PyVarObject has to + aware that ints abuse ob_size's sign bit. +*/ + +struct _longobject { + PyObject_VAR_HEAD + digit ob_digit[1]; +}; + +PyAPI_FUNC(PyLongObject *) _PyLong_New(Py_ssize_t); + +/* Return a copy of src. */ +PyAPI_FUNC(PyObject *) _PyLong_Copy(PyLongObject *src); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_LONGINTREPR_H */ +#endif /* Py_LIMITED_API */ diff --git a/my_env/Include/longobject.h b/my_env/Include/longobject.h new file mode 100644 index 000000000..7bdd0472b --- /dev/null +++ b/my_env/Include/longobject.h @@ -0,0 +1,220 @@ +#ifndef Py_LONGOBJECT_H +#define Py_LONGOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + + +/* Long (arbitrary precision) integer object interface */ + +typedef struct _longobject PyLongObject; /* Revealed in longintrepr.h */ + +PyAPI_DATA(PyTypeObject) PyLong_Type; + +#define PyLong_Check(op) \ + PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS) +#define PyLong_CheckExact(op) (Py_TYPE(op) == &PyLong_Type) + +PyAPI_FUNC(PyObject *) PyLong_FromLong(long); +PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLong(unsigned long); +PyAPI_FUNC(PyObject *) PyLong_FromSize_t(size_t); +PyAPI_FUNC(PyObject *) PyLong_FromSsize_t(Py_ssize_t); +PyAPI_FUNC(PyObject *) PyLong_FromDouble(double); +PyAPI_FUNC(long) PyLong_AsLong(PyObject *); +PyAPI_FUNC(long) PyLong_AsLongAndOverflow(PyObject *, int *); +PyAPI_FUNC(Py_ssize_t) PyLong_AsSsize_t(PyObject *); +PyAPI_FUNC(size_t) PyLong_AsSize_t(PyObject *); +PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLong(PyObject *); +PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLongMask(PyObject *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyLong_AsInt(PyObject *); +#endif +PyAPI_FUNC(PyObject *) PyLong_GetInfo(void); + +/* It may be useful in the future. I've added it in the PyInt -> PyLong + cleanup to keep the extra information. [CH] */ +#define PyLong_AS_LONG(op) PyLong_AsLong(op) + +/* Issue #1983: pid_t can be longer than a C long on some systems */ +#if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT +#define _Py_PARSE_PID "i" +#define PyLong_FromPid PyLong_FromLong +#define PyLong_AsPid PyLong_AsLong +#elif SIZEOF_PID_T == SIZEOF_LONG +#define _Py_PARSE_PID "l" +#define PyLong_FromPid PyLong_FromLong +#define PyLong_AsPid PyLong_AsLong +#elif defined(SIZEOF_LONG_LONG) && SIZEOF_PID_T == SIZEOF_LONG_LONG +#define _Py_PARSE_PID "L" +#define PyLong_FromPid PyLong_FromLongLong +#define PyLong_AsPid PyLong_AsLongLong +#else +#error "sizeof(pid_t) is neither sizeof(int), sizeof(long) or sizeof(long long)" +#endif /* SIZEOF_PID_T */ + +#if SIZEOF_VOID_P == SIZEOF_INT +# define _Py_PARSE_INTPTR "i" +# define _Py_PARSE_UINTPTR "I" +#elif SIZEOF_VOID_P == SIZEOF_LONG +# define _Py_PARSE_INTPTR "l" +# define _Py_PARSE_UINTPTR "k" +#elif defined(SIZEOF_LONG_LONG) && SIZEOF_VOID_P == SIZEOF_LONG_LONG +# define _Py_PARSE_INTPTR "L" +# define _Py_PARSE_UINTPTR "K" +#else +# error "void* different in size from int, long and long long" +#endif /* SIZEOF_VOID_P */ + +/* Used by Python/mystrtoul.c, _PyBytes_FromHex(), + _PyBytes_DecodeEscapeRecode(), etc. */ +#ifndef Py_LIMITED_API +PyAPI_DATA(unsigned char) _PyLong_DigitValue[256]; +#endif + +/* _PyLong_Frexp returns a double x and an exponent e such that the + true value is approximately equal to x * 2**e. e is >= 0. x is + 0.0 if and only if the input is 0 (in which case, e and x are both + zeroes); otherwise, 0.5 <= abs(x) < 1.0. On overflow, which is + possible if the number of bits doesn't fit into a Py_ssize_t, sets + OverflowError and returns -1.0 for x, 0 for e. */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(double) _PyLong_Frexp(PyLongObject *a, Py_ssize_t *e); +#endif + +PyAPI_FUNC(double) PyLong_AsDouble(PyObject *); +PyAPI_FUNC(PyObject *) PyLong_FromVoidPtr(void *); +PyAPI_FUNC(void *) PyLong_AsVoidPtr(PyObject *); + +PyAPI_FUNC(PyObject *) PyLong_FromLongLong(long long); +PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLongLong(unsigned long long); +PyAPI_FUNC(long long) PyLong_AsLongLong(PyObject *); +PyAPI_FUNC(unsigned long long) PyLong_AsUnsignedLongLong(PyObject *); +PyAPI_FUNC(unsigned long long) PyLong_AsUnsignedLongLongMask(PyObject *); +PyAPI_FUNC(long long) PyLong_AsLongLongAndOverflow(PyObject *, int *); + +PyAPI_FUNC(PyObject *) PyLong_FromString(const char *, char **, int); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) PyLong_FromUnicode(Py_UNICODE*, Py_ssize_t, int) Py_DEPRECATED(3.3); +PyAPI_FUNC(PyObject *) PyLong_FromUnicodeObject(PyObject *u, int base); +PyAPI_FUNC(PyObject *) _PyLong_FromBytes(const char *, Py_ssize_t, int); +#endif + +#ifndef Py_LIMITED_API +/* _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0. + v must not be NULL, and must be a normalized long. + There are no error cases. +*/ +PyAPI_FUNC(int) _PyLong_Sign(PyObject *v); + + +/* _PyLong_NumBits. Return the number of bits needed to represent the + absolute value of a long. For example, this returns 1 for 1 and -1, 2 + for 2 and -2, and 2 for 3 and -3. It returns 0 for 0. + v must not be NULL, and must be a normalized long. + (size_t)-1 is returned and OverflowError set if the true result doesn't + fit in a size_t. +*/ +PyAPI_FUNC(size_t) _PyLong_NumBits(PyObject *v); + +/* _PyLong_DivmodNear. Given integers a and b, compute the nearest + integer q to the exact quotient a / b, rounding to the nearest even integer + in the case of a tie. Return (q, r), where r = a - q*b. The remainder r + will satisfy abs(r) <= abs(b)/2, with equality possible only if q is + even. +*/ +PyAPI_FUNC(PyObject *) _PyLong_DivmodNear(PyObject *, PyObject *); + +/* _PyLong_FromByteArray: View the n unsigned bytes as a binary integer in + base 256, and return a Python int with the same numeric value. + If n is 0, the integer is 0. Else: + If little_endian is 1/true, bytes[n-1] is the MSB and bytes[0] the LSB; + else (little_endian is 0/false) bytes[0] is the MSB and bytes[n-1] the + LSB. + If is_signed is 0/false, view the bytes as a non-negative integer. + If is_signed is 1/true, view the bytes as a 2's-complement integer, + non-negative if bit 0x80 of the MSB is clear, negative if set. + Error returns: + + Return NULL with the appropriate exception set if there's not + enough memory to create the Python int. +*/ +PyAPI_FUNC(PyObject *) _PyLong_FromByteArray( + const unsigned char* bytes, size_t n, + int little_endian, int is_signed); + +/* _PyLong_AsByteArray: Convert the least-significant 8*n bits of long + v to a base-256 integer, stored in array bytes. Normally return 0, + return -1 on error. + If little_endian is 1/true, store the MSB at bytes[n-1] and the LSB at + bytes[0]; else (little_endian is 0/false) store the MSB at bytes[0] and + the LSB at bytes[n-1]. + If is_signed is 0/false, it's an error if v < 0; else (v >= 0) n bytes + are filled and there's nothing special about bit 0x80 of the MSB. + If is_signed is 1/true, bytes is filled with the 2's-complement + representation of v's value. Bit 0x80 of the MSB is the sign bit. + Error returns (-1): + + is_signed is 0 and v < 0. TypeError is set in this case, and bytes + isn't altered. + + n isn't big enough to hold the full mathematical value of v. For + example, if is_signed is 0 and there are more digits in the v than + fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of + being large enough to hold a sign bit. OverflowError is set in this + case, but bytes holds the least-significant n bytes of the true value. +*/ +PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v, + unsigned char* bytes, size_t n, + int little_endian, int is_signed); + +/* _PyLong_FromNbInt: Convert the given object to a PyLongObject + using the nb_int slot, if available. Raise TypeError if either the + nb_int slot is not available or the result of the call to nb_int + returns something not of type int. +*/ +PyAPI_FUNC(PyLongObject *)_PyLong_FromNbInt(PyObject *); + +/* _PyLong_Format: Convert the long to a string object with given base, + appending a base prefix of 0[box] if base is 2, 8 or 16. */ +PyAPI_FUNC(PyObject *) _PyLong_Format(PyObject *obj, int base); + +PyAPI_FUNC(int) _PyLong_FormatWriter( + _PyUnicodeWriter *writer, + PyObject *obj, + int base, + int alternate); + +PyAPI_FUNC(char*) _PyLong_FormatBytesWriter( + _PyBytesWriter *writer, + char *str, + PyObject *obj, + int base, + int alternate); + +/* Format the object based on the format_spec, as defined in PEP 3101 + (Advanced String Formatting). */ +PyAPI_FUNC(int) _PyLong_FormatAdvancedWriter( + _PyUnicodeWriter *writer, + PyObject *obj, + PyObject *format_spec, + Py_ssize_t start, + Py_ssize_t end); +#endif /* Py_LIMITED_API */ + +/* These aren't really part of the int object, but they're handy. The + functions are in Python/mystrtoul.c. + */ +PyAPI_FUNC(unsigned long) PyOS_strtoul(const char *, char **, int); +PyAPI_FUNC(long) PyOS_strtol(const char *, char **, int); + +#ifndef Py_LIMITED_API +/* For use by the gcd function in mathmodule.c */ +PyAPI_FUNC(PyObject *) _PyLong_GCD(PyObject *, PyObject *); +#endif /* !Py_LIMITED_API */ + +#ifndef Py_LIMITED_API +PyAPI_DATA(PyObject *) _PyLong_Zero; +PyAPI_DATA(PyObject *) _PyLong_One; +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_LONGOBJECT_H */ diff --git a/my_env/Include/marshal.h b/my_env/Include/marshal.h new file mode 100644 index 000000000..09d9337e5 --- /dev/null +++ b/my_env/Include/marshal.h @@ -0,0 +1,28 @@ + +/* Interface for marshal.c */ + +#ifndef Py_MARSHAL_H +#define Py_MARSHAL_H +#ifdef __cplusplus +extern "C" { +#endif + +#define Py_MARSHAL_VERSION 4 + +PyAPI_FUNC(void) PyMarshal_WriteLongToFile(long, FILE *, int); +PyAPI_FUNC(void) PyMarshal_WriteObjectToFile(PyObject *, FILE *, int); +PyAPI_FUNC(PyObject *) PyMarshal_WriteObjectToString(PyObject *, int); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(long) PyMarshal_ReadLongFromFile(FILE *); +PyAPI_FUNC(int) PyMarshal_ReadShortFromFile(FILE *); +PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromFile(FILE *); +PyAPI_FUNC(PyObject *) PyMarshal_ReadLastObjectFromFile(FILE *); +#endif +PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromString(const char *, + Py_ssize_t); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_MARSHAL_H */ diff --git a/my_env/Include/memoryobject.h b/my_env/Include/memoryobject.h new file mode 100644 index 000000000..990a716f2 --- /dev/null +++ b/my_env/Include/memoryobject.h @@ -0,0 +1,72 @@ +/* Memory view object. In Python this is available as "memoryview". */ + +#ifndef Py_MEMORYOBJECT_H +#define Py_MEMORYOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API +PyAPI_DATA(PyTypeObject) _PyManagedBuffer_Type; +#endif +PyAPI_DATA(PyTypeObject) PyMemoryView_Type; + +#define PyMemoryView_Check(op) (Py_TYPE(op) == &PyMemoryView_Type) + +#ifndef Py_LIMITED_API +/* Get a pointer to the memoryview's private copy of the exporter's buffer. */ +#define PyMemoryView_GET_BUFFER(op) (&((PyMemoryViewObject *)(op))->view) +/* Get a pointer to the exporting object (this may be NULL!). */ +#define PyMemoryView_GET_BASE(op) (((PyMemoryViewObject *)(op))->view.obj) +#endif + +PyAPI_FUNC(PyObject *) PyMemoryView_FromObject(PyObject *base); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(PyObject *) PyMemoryView_FromMemory(char *mem, Py_ssize_t size, + int flags); +#endif +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(Py_buffer *info); +#endif +PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base, + int buffertype, + char order); + + +/* The structs are declared here so that macros can work, but they shouldn't + be considered public. Don't access their fields directly, use the macros + and functions instead! */ +#ifndef Py_LIMITED_API +#define _Py_MANAGED_BUFFER_RELEASED 0x001 /* access to exporter blocked */ +#define _Py_MANAGED_BUFFER_FREE_FORMAT 0x002 /* free format */ +typedef struct { + PyObject_HEAD + int flags; /* state flags */ + Py_ssize_t exports; /* number of direct memoryview exports */ + Py_buffer master; /* snapshot buffer obtained from the original exporter */ +} _PyManagedBufferObject; + + +/* memoryview state flags */ +#define _Py_MEMORYVIEW_RELEASED 0x001 /* access to master buffer blocked */ +#define _Py_MEMORYVIEW_C 0x002 /* C-contiguous layout */ +#define _Py_MEMORYVIEW_FORTRAN 0x004 /* Fortran contiguous layout */ +#define _Py_MEMORYVIEW_SCALAR 0x008 /* scalar: ndim = 0 */ +#define _Py_MEMORYVIEW_PIL 0x010 /* PIL-style layout */ + +typedef struct { + PyObject_VAR_HEAD + _PyManagedBufferObject *mbuf; /* managed buffer */ + Py_hash_t hash; /* hash value for read-only views */ + int flags; /* state flags */ + Py_ssize_t exports; /* number of buffer re-exports */ + Py_buffer view; /* private copy of the exporter's view */ + PyObject *weakreflist; + Py_ssize_t ob_array[1]; /* shape, strides, suboffsets */ +} PyMemoryViewObject; +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_MEMORYOBJECT_H */ diff --git a/my_env/Include/metagrammar.h b/my_env/Include/metagrammar.h new file mode 100644 index 000000000..15c8ef8f3 --- /dev/null +++ b/my_env/Include/metagrammar.h @@ -0,0 +1,18 @@ +#ifndef Py_METAGRAMMAR_H +#define Py_METAGRAMMAR_H +#ifdef __cplusplus +extern "C" { +#endif + + +#define MSTART 256 +#define RULE 257 +#define RHS 258 +#define ALT 259 +#define ITEM 260 +#define ATOM 261 + +#ifdef __cplusplus +} +#endif +#endif /* !Py_METAGRAMMAR_H */ diff --git a/my_env/Include/methodobject.h b/my_env/Include/methodobject.h new file mode 100644 index 000000000..ea35d86bc --- /dev/null +++ b/my_env/Include/methodobject.h @@ -0,0 +1,135 @@ + +/* Method object interface */ + +#ifndef Py_METHODOBJECT_H +#define Py_METHODOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +/* This is about the type 'builtin_function_or_method', + not Python methods in user-defined classes. See classobject.h + for the latter. */ + +PyAPI_DATA(PyTypeObject) PyCFunction_Type; + +#define PyCFunction_Check(op) (Py_TYPE(op) == &PyCFunction_Type) + +typedef PyObject *(*PyCFunction)(PyObject *, PyObject *); +typedef PyObject *(*_PyCFunctionFast) (PyObject *, PyObject *const *, Py_ssize_t); +typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *, + PyObject *); +typedef PyObject *(*_PyCFunctionFastWithKeywords) (PyObject *, + PyObject *const *, Py_ssize_t, + PyObject *); +typedef PyObject *(*PyNoArgsFunction)(PyObject *); + +PyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *); +PyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *); +PyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *); + +/* Macros for direct access to these values. Type checks are *not* + done, so use with care. */ +#ifndef Py_LIMITED_API +#define PyCFunction_GET_FUNCTION(func) \ + (((PyCFunctionObject *)func) -> m_ml -> ml_meth) +#define PyCFunction_GET_SELF(func) \ + (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_STATIC ? \ + NULL : ((PyCFunctionObject *)func) -> m_self) +#define PyCFunction_GET_FLAGS(func) \ + (((PyCFunctionObject *)func) -> m_ml -> ml_flags) +#endif +PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyCFunction_FastCallDict(PyObject *func, + PyObject *const *args, + Py_ssize_t nargs, + PyObject *kwargs); + +PyAPI_FUNC(PyObject *) _PyCFunction_FastCallKeywords(PyObject *func, + PyObject *const *stack, + Py_ssize_t nargs, + PyObject *kwnames); +#endif + +struct PyMethodDef { + const char *ml_name; /* The name of the built-in function/method */ + PyCFunction ml_meth; /* The C function that implements it */ + int ml_flags; /* Combination of METH_xxx flags, which mostly + describe the args expected by the C func */ + const char *ml_doc; /* The __doc__ attribute, or NULL */ +}; +typedef struct PyMethodDef PyMethodDef; + +#define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL) +PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *, + PyObject *); + +/* Flag passed to newmethodobject */ +/* #define METH_OLDARGS 0x0000 -- unsupported now */ +#define METH_VARARGS 0x0001 +#define METH_KEYWORDS 0x0002 +/* METH_NOARGS and METH_O must not be combined with the flags above. */ +#define METH_NOARGS 0x0004 +#define METH_O 0x0008 + +/* METH_CLASS and METH_STATIC are a little different; these control + the construction of methods for a class. These cannot be used for + functions in modules. */ +#define METH_CLASS 0x0010 +#define METH_STATIC 0x0020 + +/* METH_COEXIST allows a method to be entered even though a slot has + already filled the entry. When defined, the flag allows a separate + method, "__contains__" for example, to coexist with a defined + slot like sq_contains. */ + +#define METH_COEXIST 0x0040 + +#ifndef Py_LIMITED_API +#define METH_FASTCALL 0x0080 +#endif + +/* This bit is preserved for Stackless Python */ +#ifdef STACKLESS +#define METH_STACKLESS 0x0100 +#else +#define METH_STACKLESS 0x0000 +#endif + +#ifndef Py_LIMITED_API +typedef struct { + PyObject_HEAD + PyMethodDef *m_ml; /* Description of the C function to call */ + PyObject *m_self; /* Passed as 'self' arg to the C func, can be NULL */ + PyObject *m_module; /* The __module__ attribute, can be anything */ + PyObject *m_weakreflist; /* List of weak references */ +} PyCFunctionObject; + +PyAPI_FUNC(PyObject *) _PyMethodDef_RawFastCallDict( + PyMethodDef *method, + PyObject *self, + PyObject *const *args, + Py_ssize_t nargs, + PyObject *kwargs); + +PyAPI_FUNC(PyObject *) _PyMethodDef_RawFastCallKeywords( + PyMethodDef *method, + PyObject *self, + PyObject *const *args, + Py_ssize_t nargs, + PyObject *kwnames); +#endif + +PyAPI_FUNC(int) PyCFunction_ClearFreeList(void); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _PyCFunction_DebugMallocStats(FILE *out); +PyAPI_FUNC(void) _PyMethod_DebugMallocStats(FILE *out); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_METHODOBJECT_H */ diff --git a/my_env/Include/modsupport.h b/my_env/Include/modsupport.h new file mode 100644 index 000000000..a238bef03 --- /dev/null +++ b/my_env/Include/modsupport.h @@ -0,0 +1,229 @@ + +#ifndef Py_MODSUPPORT_H +#define Py_MODSUPPORT_H +#ifdef __cplusplus +extern "C" { +#endif + +/* Module support interface */ + +#include + +/* If PY_SSIZE_T_CLEAN is defined, each functions treats #-specifier + to mean Py_ssize_t */ +#ifdef PY_SSIZE_T_CLEAN +#define PyArg_Parse _PyArg_Parse_SizeT +#define PyArg_ParseTuple _PyArg_ParseTuple_SizeT +#define PyArg_ParseTupleAndKeywords _PyArg_ParseTupleAndKeywords_SizeT +#define PyArg_VaParse _PyArg_VaParse_SizeT +#define PyArg_VaParseTupleAndKeywords _PyArg_VaParseTupleAndKeywords_SizeT +#define Py_BuildValue _Py_BuildValue_SizeT +#define Py_VaBuildValue _Py_VaBuildValue_SizeT +#ifndef Py_LIMITED_API +#define _Py_VaBuildStack _Py_VaBuildStack_SizeT +#endif +#else +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _Py_VaBuildValue_SizeT(const char *, va_list); +PyAPI_FUNC(PyObject **) _Py_VaBuildStack_SizeT( + PyObject **small_stack, + Py_ssize_t small_stack_len, + const char *format, + va_list va, + Py_ssize_t *p_nargs); +#endif /* !Py_LIMITED_API */ +#endif + +/* Due to a glitch in 3.2, the _SizeT versions weren't exported from the DLL. */ +#if !defined(PY_SSIZE_T_CLEAN) || !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(int) PyArg_Parse(PyObject *, const char *, ...); +PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...); +PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *, + const char *, char **, ...); +PyAPI_FUNC(int) PyArg_VaParse(PyObject *, const char *, va_list); +PyAPI_FUNC(int) PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *, + const char *, char **, va_list); +#endif +PyAPI_FUNC(int) PyArg_ValidateKeywordArguments(PyObject *); +PyAPI_FUNC(int) PyArg_UnpackTuple(PyObject *, const char *, Py_ssize_t, Py_ssize_t, ...); +PyAPI_FUNC(PyObject *) Py_BuildValue(const char *, ...); +PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...); + + +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyArg_UnpackStack( + PyObject *const *args, + Py_ssize_t nargs, + const char *name, + Py_ssize_t min, + Py_ssize_t max, + ...); + +PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kwargs); +PyAPI_FUNC(int) _PyArg_NoPositional(const char *funcname, PyObject *args); +#define _PyArg_NoKeywords(funcname, kwargs) \ + ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs))) +#define _PyArg_NoPositional(funcname, args) \ + ((args) == NULL || _PyArg_NoPositional((funcname), (args))) + +#endif + +PyAPI_FUNC(PyObject *) Py_VaBuildValue(const char *, va_list); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject **) _Py_VaBuildStack( + PyObject **small_stack, + Py_ssize_t small_stack_len, + const char *format, + va_list va, + Py_ssize_t *p_nargs); +#endif + +#ifndef Py_LIMITED_API +typedef struct _PyArg_Parser { + const char *format; + const char * const *keywords; + const char *fname; + const char *custom_msg; + int pos; /* number of positional-only arguments */ + int min; /* minimal number of arguments */ + int max; /* maximal number of positional arguments */ + PyObject *kwtuple; /* tuple of keyword parameter names */ + struct _PyArg_Parser *next; +} _PyArg_Parser; +#ifdef PY_SSIZE_T_CLEAN +#define _PyArg_ParseTupleAndKeywordsFast _PyArg_ParseTupleAndKeywordsFast_SizeT +#define _PyArg_ParseStack _PyArg_ParseStack_SizeT +#define _PyArg_ParseStackAndKeywords _PyArg_ParseStackAndKeywords_SizeT +#define _PyArg_VaParseTupleAndKeywordsFast _PyArg_VaParseTupleAndKeywordsFast_SizeT +#endif +PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywordsFast(PyObject *, PyObject *, + struct _PyArg_Parser *, ...); +PyAPI_FUNC(int) _PyArg_ParseStack( + PyObject *const *args, + Py_ssize_t nargs, + const char *format, + ...); +PyAPI_FUNC(int) _PyArg_ParseStackAndKeywords( + PyObject *const *args, + Py_ssize_t nargs, + PyObject *kwnames, + struct _PyArg_Parser *, + ...); +PyAPI_FUNC(int) _PyArg_VaParseTupleAndKeywordsFast(PyObject *, PyObject *, + struct _PyArg_Parser *, va_list); +void _PyArg_Fini(void); +#endif /* Py_LIMITED_API */ + +PyAPI_FUNC(int) PyModule_AddObject(PyObject *, const char *, PyObject *); +PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long); +PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *); +#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant(m, #c, c) +#define PyModule_AddStringMacro(m, c) PyModule_AddStringConstant(m, #c, c) + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +/* New in 3.5 */ +PyAPI_FUNC(int) PyModule_SetDocString(PyObject *, const char *); +PyAPI_FUNC(int) PyModule_AddFunctions(PyObject *, PyMethodDef *); +PyAPI_FUNC(int) PyModule_ExecDef(PyObject *module, PyModuleDef *def); +#endif + +#define Py_CLEANUP_SUPPORTED 0x20000 + +#define PYTHON_API_VERSION 1013 +#define PYTHON_API_STRING "1013" +/* The API version is maintained (independently from the Python version) + so we can detect mismatches between the interpreter and dynamically + loaded modules. These are diagnosed by an error message but + the module is still loaded (because the mismatch can only be tested + after loading the module). The error message is intended to + explain the core dump a few seconds later. + + The symbol PYTHON_API_STRING defines the same value as a string + literal. *** PLEASE MAKE SURE THE DEFINITIONS MATCH. *** + + Please add a line or two to the top of this log for each API + version change: + + 22-Feb-2006 MvL 1013 PEP 353 - long indices for sequence lengths + + 19-Aug-2002 GvR 1012 Changes to string object struct for + interning changes, saving 3 bytes. + + 17-Jul-2001 GvR 1011 Descr-branch, just to be on the safe side + + 25-Jan-2001 FLD 1010 Parameters added to PyCode_New() and + PyFrame_New(); Python 2.1a2 + + 14-Mar-2000 GvR 1009 Unicode API added + + 3-Jan-1999 GvR 1007 Decided to change back! (Don't reuse 1008!) + + 3-Dec-1998 GvR 1008 Python 1.5.2b1 + + 18-Jan-1997 GvR 1007 string interning and other speedups + + 11-Oct-1996 GvR renamed Py_Ellipses to Py_Ellipsis :-( + + 30-Jul-1996 GvR Slice and ellipses syntax added + + 23-Jul-1996 GvR For 1.4 -- better safe than sorry this time :-) + + 7-Nov-1995 GvR Keyword arguments (should've been done at 1.3 :-( ) + + 10-Jan-1995 GvR Renamed globals to new naming scheme + + 9-Jan-1995 GvR Initial version (incompatible with older API) +*/ + +/* The PYTHON_ABI_VERSION is introduced in PEP 384. For the lifetime of + Python 3, it will stay at the value of 3; changes to the limited API + must be performed in a strictly backwards-compatible manner. */ +#define PYTHON_ABI_VERSION 3 +#define PYTHON_ABI_STRING "3" + +#ifdef Py_TRACE_REFS + /* When we are tracing reference counts, rename module creation functions so + modules compiled with incompatible settings will generate a + link-time error. */ + #define PyModule_Create2 PyModule_Create2TraceRefs + #define PyModule_FromDefAndSpec2 PyModule_FromDefAndSpec2TraceRefs +#endif + +PyAPI_FUNC(PyObject *) PyModule_Create2(struct PyModuleDef*, + int apiver); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyModule_CreateInitialized(struct PyModuleDef*, + int apiver); +#endif + +#ifdef Py_LIMITED_API +#define PyModule_Create(module) \ + PyModule_Create2(module, PYTHON_ABI_VERSION) +#else +#define PyModule_Create(module) \ + PyModule_Create2(module, PYTHON_API_VERSION) +#endif + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +/* New in 3.5 */ +PyAPI_FUNC(PyObject *) PyModule_FromDefAndSpec2(PyModuleDef *def, + PyObject *spec, + int module_api_version); + +#ifdef Py_LIMITED_API +#define PyModule_FromDefAndSpec(module, spec) \ + PyModule_FromDefAndSpec2(module, spec, PYTHON_ABI_VERSION) +#else +#define PyModule_FromDefAndSpec(module, spec) \ + PyModule_FromDefAndSpec2(module, spec, PYTHON_API_VERSION) +#endif /* Py_LIMITED_API */ +#endif /* New in 3.5 */ + +#ifndef Py_LIMITED_API +PyAPI_DATA(const char *) _Py_PackageContext; +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_MODSUPPORT_H */ diff --git a/my_env/Include/moduleobject.h b/my_env/Include/moduleobject.h new file mode 100644 index 000000000..1d8fe46de --- /dev/null +++ b/my_env/Include/moduleobject.h @@ -0,0 +1,89 @@ + +/* Module object interface */ + +#ifndef Py_MODULEOBJECT_H +#define Py_MODULEOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_DATA(PyTypeObject) PyModule_Type; + +#define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type) +#define PyModule_CheckExact(op) (Py_TYPE(op) == &PyModule_Type) + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(PyObject *) PyModule_NewObject( + PyObject *name + ); +#endif +PyAPI_FUNC(PyObject *) PyModule_New( + const char *name /* UTF-8 encoded string */ + ); +PyAPI_FUNC(PyObject *) PyModule_GetDict(PyObject *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(PyObject *) PyModule_GetNameObject(PyObject *); +#endif +PyAPI_FUNC(const char *) PyModule_GetName(PyObject *); +PyAPI_FUNC(const char *) PyModule_GetFilename(PyObject *) Py_DEPRECATED(3.2); +PyAPI_FUNC(PyObject *) PyModule_GetFilenameObject(PyObject *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _PyModule_Clear(PyObject *); +PyAPI_FUNC(void) _PyModule_ClearDict(PyObject *); +#endif +PyAPI_FUNC(struct PyModuleDef*) PyModule_GetDef(PyObject*); +PyAPI_FUNC(void*) PyModule_GetState(PyObject*); + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +/* New in 3.5 */ +PyAPI_FUNC(PyObject *) PyModuleDef_Init(struct PyModuleDef*); +PyAPI_DATA(PyTypeObject) PyModuleDef_Type; +#endif + +typedef struct PyModuleDef_Base { + PyObject_HEAD + PyObject* (*m_init)(void); + Py_ssize_t m_index; + PyObject* m_copy; +} PyModuleDef_Base; + +#define PyModuleDef_HEAD_INIT { \ + PyObject_HEAD_INIT(NULL) \ + NULL, /* m_init */ \ + 0, /* m_index */ \ + NULL, /* m_copy */ \ + } + +struct PyModuleDef_Slot; +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +/* New in 3.5 */ +typedef struct PyModuleDef_Slot{ + int slot; + void *value; +} PyModuleDef_Slot; + +#define Py_mod_create 1 +#define Py_mod_exec 2 + +#ifndef Py_LIMITED_API +#define _Py_mod_LAST_SLOT 2 +#endif + +#endif /* New in 3.5 */ + +typedef struct PyModuleDef{ + PyModuleDef_Base m_base; + const char* m_name; + const char* m_doc; + Py_ssize_t m_size; + PyMethodDef *m_methods; + struct PyModuleDef_Slot* m_slots; + traverseproc m_traverse; + inquiry m_clear; + freefunc m_free; +} PyModuleDef; + +#ifdef __cplusplus +} +#endif +#endif /* !Py_MODULEOBJECT_H */ diff --git a/my_env/Include/namespaceobject.h b/my_env/Include/namespaceobject.h new file mode 100644 index 000000000..0c8d95c0f --- /dev/null +++ b/my_env/Include/namespaceobject.h @@ -0,0 +1,19 @@ + +/* simple namespace object interface */ + +#ifndef NAMESPACEOBJECT_H +#define NAMESPACEOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API +PyAPI_DATA(PyTypeObject) _PyNamespace_Type; + +PyAPI_FUNC(PyObject *) _PyNamespace_New(PyObject *kwds); +#endif /* !Py_LIMITED_API */ + +#ifdef __cplusplus +} +#endif +#endif /* !NAMESPACEOBJECT_H */ diff --git a/my_env/Include/node.h b/my_env/Include/node.h new file mode 100644 index 000000000..40596dfec --- /dev/null +++ b/my_env/Include/node.h @@ -0,0 +1,44 @@ + +/* Parse tree node interface */ + +#ifndef Py_NODE_H +#define Py_NODE_H +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _node { + short n_type; + char *n_str; + int n_lineno; + int n_col_offset; + int n_nchildren; + struct _node *n_child; +} node; + +PyAPI_FUNC(node *) PyNode_New(int type); +PyAPI_FUNC(int) PyNode_AddChild(node *n, int type, + char *str, int lineno, int col_offset); +PyAPI_FUNC(void) PyNode_Free(node *n); +#ifndef Py_LIMITED_API +PyAPI_FUNC(Py_ssize_t) _PyNode_SizeOf(node *n); +#endif + +/* Node access functions */ +#define NCH(n) ((n)->n_nchildren) + +#define CHILD(n, i) (&(n)->n_child[i]) +#define RCHILD(n, i) (CHILD(n, NCH(n) + i)) +#define TYPE(n) ((n)->n_type) +#define STR(n) ((n)->n_str) +#define LINENO(n) ((n)->n_lineno) + +/* Assert that the type of a node is what we expect */ +#define REQ(n, type) assert(TYPE(n) == (type)) + +PyAPI_FUNC(void) PyNode_ListTree(node *); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_NODE_H */ diff --git a/my_env/Include/object.h b/my_env/Include/object.h new file mode 100644 index 000000000..bcf78afe6 --- /dev/null +++ b/my_env/Include/object.h @@ -0,0 +1,1105 @@ +#ifndef Py_OBJECT_H +#define Py_OBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + + +/* Object and type object interface */ + +/* +Objects are structures allocated on the heap. Special rules apply to +the use of objects to ensure they are properly garbage-collected. +Objects are never allocated statically or on the stack; they must be +accessed through special macros and functions only. (Type objects are +exceptions to the first rule; the standard types are represented by +statically initialized type objects, although work on type/class unification +for Python 2.2 made it possible to have heap-allocated type objects too). + +An object has a 'reference count' that is increased or decreased when a +pointer to the object is copied or deleted; when the reference count +reaches zero there are no references to the object left and it can be +removed from the heap. + +An object has a 'type' that determines what it represents and what kind +of data it contains. An object's type is fixed when it is created. +Types themselves are represented as objects; an object contains a +pointer to the corresponding type object. The type itself has a type +pointer pointing to the object representing the type 'type', which +contains a pointer to itself!). + +Objects do not float around in memory; once allocated an object keeps +the same size and address. Objects that must hold variable-size data +can contain pointers to variable-size parts of the object. Not all +objects of the same type have the same size; but the size cannot change +after allocation. (These restrictions are made so a reference to an +object can be simply a pointer -- moving an object would require +updating all the pointers, and changing an object's size would require +moving it if there was another object right next to it.) + +Objects are always accessed through pointers of the type 'PyObject *'. +The type 'PyObject' is a structure that only contains the reference count +and the type pointer. The actual memory allocated for an object +contains other data that can only be accessed after casting the pointer +to a pointer to a longer structure type. This longer type must start +with the reference count and type fields; the macro PyObject_HEAD should be +used for this (to accommodate for future changes). The implementation +of a particular object type can cast the object pointer to the proper +type and back. + +A standard interface exists for objects that contain an array of items +whose size is determined when the object is allocated. +*/ + +/* Py_DEBUG implies Py_TRACE_REFS. */ +#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS) +#define Py_TRACE_REFS +#endif + +/* Py_TRACE_REFS implies Py_REF_DEBUG. */ +#if defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) +#define Py_REF_DEBUG +#endif + +#if defined(Py_LIMITED_API) && defined(Py_REF_DEBUG) +#error Py_LIMITED_API is incompatible with Py_DEBUG, Py_TRACE_REFS, and Py_REF_DEBUG +#endif + + +#ifdef Py_TRACE_REFS +/* Define pointers to support a doubly-linked list of all live heap objects. */ +#define _PyObject_HEAD_EXTRA \ + struct _object *_ob_next; \ + struct _object *_ob_prev; + +#define _PyObject_EXTRA_INIT 0, 0, + +#else +#define _PyObject_HEAD_EXTRA +#define _PyObject_EXTRA_INIT +#endif + +/* PyObject_HEAD defines the initial segment of every PyObject. */ +#define PyObject_HEAD PyObject ob_base; + +#define PyObject_HEAD_INIT(type) \ + { _PyObject_EXTRA_INIT \ + 1, type }, + +#define PyVarObject_HEAD_INIT(type, size) \ + { PyObject_HEAD_INIT(type) size }, + +/* PyObject_VAR_HEAD defines the initial segment of all variable-size + * container objects. These end with a declaration of an array with 1 + * element, but enough space is malloc'ed so that the array actually + * has room for ob_size elements. Note that ob_size is an element count, + * not necessarily a byte count. + */ +#define PyObject_VAR_HEAD PyVarObject ob_base; +#define Py_INVALID_SIZE (Py_ssize_t)-1 + +/* Nothing is actually declared to be a PyObject, but every pointer to + * a Python object can be cast to a PyObject*. This is inheritance built + * by hand. Similarly every pointer to a variable-size Python object can, + * in addition, be cast to PyVarObject*. + */ +typedef struct _object { + _PyObject_HEAD_EXTRA + Py_ssize_t ob_refcnt; + struct _typeobject *ob_type; +} PyObject; + +typedef struct { + PyObject ob_base; + Py_ssize_t ob_size; /* Number of items in variable part */ +} PyVarObject; + +#define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) +#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) +#define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) + +#ifndef Py_LIMITED_API +/********************* String Literals ****************************************/ +/* This structure helps managing static strings. The basic usage goes like this: + Instead of doing + + r = PyObject_CallMethod(o, "foo", "args", ...); + + do + + _Py_IDENTIFIER(foo); + ... + r = _PyObject_CallMethodId(o, &PyId_foo, "args", ...); + + PyId_foo is a static variable, either on block level or file level. On first + usage, the string "foo" is interned, and the structures are linked. On interpreter + shutdown, all strings are released (through _PyUnicode_ClearStaticStrings). + + Alternatively, _Py_static_string allows choosing the variable name. + _PyUnicode_FromId returns a borrowed reference to the interned string. + _PyObject_{Get,Set,Has}AttrId are __getattr__ versions using _Py_Identifier*. +*/ +typedef struct _Py_Identifier { + struct _Py_Identifier *next; + const char* string; + PyObject *object; +} _Py_Identifier; + +#define _Py_static_string_init(value) { .next = NULL, .string = value, .object = NULL } +#define _Py_static_string(varname, value) static _Py_Identifier varname = _Py_static_string_init(value) +#define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname) + +#endif /* !Py_LIMITED_API */ + +/* +Type objects contain a string containing the type name (to help somewhat +in debugging), the allocation parameters (see PyObject_New() and +PyObject_NewVar()), +and methods for accessing objects of the type. Methods are optional, a +nil pointer meaning that particular kind of access is not available for +this type. The Py_DECREF() macro uses the tp_dealloc method without +checking for a nil pointer; it should always be implemented except if +the implementation can guarantee that the reference count will never +reach zero (e.g., for statically allocated type objects). + +NB: the methods for certain type groups are now contained in separate +method blocks. +*/ + +typedef PyObject * (*unaryfunc)(PyObject *); +typedef PyObject * (*binaryfunc)(PyObject *, PyObject *); +typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *); +typedef int (*inquiry)(PyObject *); +typedef Py_ssize_t (*lenfunc)(PyObject *); +typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t); +typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t, Py_ssize_t); +typedef int(*ssizeobjargproc)(PyObject *, Py_ssize_t, PyObject *); +typedef int(*ssizessizeobjargproc)(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *); +typedef int(*objobjargproc)(PyObject *, PyObject *, PyObject *); + +#ifndef Py_LIMITED_API +/* buffer interface */ +typedef struct bufferinfo { + void *buf; + PyObject *obj; /* owned reference */ + Py_ssize_t len; + Py_ssize_t itemsize; /* This is Py_ssize_t so it can be + pointed to by strides in simple case.*/ + int readonly; + int ndim; + char *format; + Py_ssize_t *shape; + Py_ssize_t *strides; + Py_ssize_t *suboffsets; + void *internal; +} Py_buffer; + +typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); +typedef void (*releasebufferproc)(PyObject *, Py_buffer *); + +/* Maximum number of dimensions */ +#define PyBUF_MAX_NDIM 64 + +/* Flags for getting buffers */ +#define PyBUF_SIMPLE 0 +#define PyBUF_WRITABLE 0x0001 +/* we used to include an E, backwards compatible alias */ +#define PyBUF_WRITEABLE PyBUF_WRITABLE +#define PyBUF_FORMAT 0x0004 +#define PyBUF_ND 0x0008 +#define PyBUF_STRIDES (0x0010 | PyBUF_ND) +#define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) +#define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) +#define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) +#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) + +#define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE) +#define PyBUF_CONTIG_RO (PyBUF_ND) + +#define PyBUF_STRIDED (PyBUF_STRIDES | PyBUF_WRITABLE) +#define PyBUF_STRIDED_RO (PyBUF_STRIDES) + +#define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_WRITABLE | PyBUF_FORMAT) +#define PyBUF_RECORDS_RO (PyBUF_STRIDES | PyBUF_FORMAT) + +#define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_WRITABLE | PyBUF_FORMAT) +#define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT) + + +#define PyBUF_READ 0x100 +#define PyBUF_WRITE 0x200 + +/* End buffer interface */ +#endif /* Py_LIMITED_API */ + +typedef int (*objobjproc)(PyObject *, PyObject *); +typedef int (*visitproc)(PyObject *, void *); +typedef int (*traverseproc)(PyObject *, visitproc, void *); + +#ifndef Py_LIMITED_API +typedef struct { + /* Number implementations must check *both* + arguments for proper type and implement the necessary conversions + in the slot functions themselves. */ + + binaryfunc nb_add; + binaryfunc nb_subtract; + binaryfunc nb_multiply; + binaryfunc nb_remainder; + binaryfunc nb_divmod; + ternaryfunc nb_power; + unaryfunc nb_negative; + unaryfunc nb_positive; + unaryfunc nb_absolute; + inquiry nb_bool; + unaryfunc nb_invert; + binaryfunc nb_lshift; + binaryfunc nb_rshift; + binaryfunc nb_and; + binaryfunc nb_xor; + binaryfunc nb_or; + unaryfunc nb_int; + void *nb_reserved; /* the slot formerly known as nb_long */ + unaryfunc nb_float; + + binaryfunc nb_inplace_add; + binaryfunc nb_inplace_subtract; + binaryfunc nb_inplace_multiply; + binaryfunc nb_inplace_remainder; + ternaryfunc nb_inplace_power; + binaryfunc nb_inplace_lshift; + binaryfunc nb_inplace_rshift; + binaryfunc nb_inplace_and; + binaryfunc nb_inplace_xor; + binaryfunc nb_inplace_or; + + binaryfunc nb_floor_divide; + binaryfunc nb_true_divide; + binaryfunc nb_inplace_floor_divide; + binaryfunc nb_inplace_true_divide; + + unaryfunc nb_index; + + binaryfunc nb_matrix_multiply; + binaryfunc nb_inplace_matrix_multiply; +} PyNumberMethods; + +typedef struct { + lenfunc sq_length; + binaryfunc sq_concat; + ssizeargfunc sq_repeat; + ssizeargfunc sq_item; + void *was_sq_slice; + ssizeobjargproc sq_ass_item; + void *was_sq_ass_slice; + objobjproc sq_contains; + + binaryfunc sq_inplace_concat; + ssizeargfunc sq_inplace_repeat; +} PySequenceMethods; + +typedef struct { + lenfunc mp_length; + binaryfunc mp_subscript; + objobjargproc mp_ass_subscript; +} PyMappingMethods; + +typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; +} PyAsyncMethods; + +typedef struct { + getbufferproc bf_getbuffer; + releasebufferproc bf_releasebuffer; +} PyBufferProcs; +#endif /* Py_LIMITED_API */ + +typedef void (*freefunc)(void *); +typedef void (*destructor)(PyObject *); +#ifndef Py_LIMITED_API +/* We can't provide a full compile-time check that limited-API + users won't implement tp_print. However, not defining printfunc + and making tp_print of a different function pointer type + should at least cause a warning in most cases. */ +typedef int (*printfunc)(PyObject *, FILE *, int); +#endif +typedef PyObject *(*getattrfunc)(PyObject *, char *); +typedef PyObject *(*getattrofunc)(PyObject *, PyObject *); +typedef int (*setattrfunc)(PyObject *, char *, PyObject *); +typedef int (*setattrofunc)(PyObject *, PyObject *, PyObject *); +typedef PyObject *(*reprfunc)(PyObject *); +typedef Py_hash_t (*hashfunc)(PyObject *); +typedef PyObject *(*richcmpfunc) (PyObject *, PyObject *, int); +typedef PyObject *(*getiterfunc) (PyObject *); +typedef PyObject *(*iternextfunc) (PyObject *); +typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *); +typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *); +typedef int (*initproc)(PyObject *, PyObject *, PyObject *); +typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *); +typedef PyObject *(*allocfunc)(struct _typeobject *, Py_ssize_t); + +#ifdef Py_LIMITED_API +typedef struct _typeobject PyTypeObject; /* opaque */ +#else +typedef struct _typeobject { + PyObject_VAR_HEAD + const char *tp_name; /* For printing, in format "." */ + Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */ + + /* Methods to implement standard operations */ + + destructor tp_dealloc; + printfunc tp_print; + getattrfunc tp_getattr; + setattrfunc tp_setattr; + PyAsyncMethods *tp_as_async; /* formerly known as tp_compare (Python 2) + or tp_reserved (Python 3) */ + reprfunc tp_repr; + + /* Method suites for standard classes */ + + PyNumberMethods *tp_as_number; + PySequenceMethods *tp_as_sequence; + PyMappingMethods *tp_as_mapping; + + /* More standard operations (here for binary compatibility) */ + + hashfunc tp_hash; + ternaryfunc tp_call; + reprfunc tp_str; + getattrofunc tp_getattro; + setattrofunc tp_setattro; + + /* Functions to access object as input/output buffer */ + PyBufferProcs *tp_as_buffer; + + /* Flags to define presence of optional/expanded features */ + unsigned long tp_flags; + + const char *tp_doc; /* Documentation string */ + + /* Assigned meaning in release 2.0 */ + /* call function for all accessible objects */ + traverseproc tp_traverse; + + /* delete references to contained objects */ + inquiry tp_clear; + + /* Assigned meaning in release 2.1 */ + /* rich comparisons */ + richcmpfunc tp_richcompare; + + /* weak reference enabler */ + Py_ssize_t tp_weaklistoffset; + + /* Iterators */ + getiterfunc tp_iter; + iternextfunc tp_iternext; + + /* Attribute descriptor and subclassing stuff */ + struct PyMethodDef *tp_methods; + struct PyMemberDef *tp_members; + struct PyGetSetDef *tp_getset; + struct _typeobject *tp_base; + PyObject *tp_dict; + descrgetfunc tp_descr_get; + descrsetfunc tp_descr_set; + Py_ssize_t tp_dictoffset; + initproc tp_init; + allocfunc tp_alloc; + newfunc tp_new; + freefunc tp_free; /* Low-level free-memory routine */ + inquiry tp_is_gc; /* For PyObject_IS_GC */ + PyObject *tp_bases; + PyObject *tp_mro; /* method resolution order */ + PyObject *tp_cache; + PyObject *tp_subclasses; + PyObject *tp_weaklist; + destructor tp_del; + + /* Type attribute cache version tag. Added in version 2.6 */ + unsigned int tp_version_tag; + + destructor tp_finalize; + +#ifdef COUNT_ALLOCS + /* these must be last and never explicitly initialized */ + Py_ssize_t tp_allocs; + Py_ssize_t tp_frees; + Py_ssize_t tp_maxalloc; + struct _typeobject *tp_prev; + struct _typeobject *tp_next; +#endif +} PyTypeObject; +#endif + +typedef struct{ + int slot; /* slot id, see below */ + void *pfunc; /* function pointer */ +} PyType_Slot; + +typedef struct{ + const char* name; + int basicsize; + int itemsize; + unsigned int flags; + PyType_Slot *slots; /* terminated by slot==0. */ +} PyType_Spec; + +PyAPI_FUNC(PyObject*) PyType_FromSpec(PyType_Spec*); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(PyObject*) PyType_FromSpecWithBases(PyType_Spec*, PyObject*); +#endif +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000 +PyAPI_FUNC(void*) PyType_GetSlot(PyTypeObject*, int); +#endif + +#ifndef Py_LIMITED_API +/* The *real* layout of a type object when allocated on the heap */ +typedef struct _heaptypeobject { + /* Note: there's a dependency on the order of these members + in slotptr() in typeobject.c . */ + PyTypeObject ht_type; + PyAsyncMethods as_async; + PyNumberMethods as_number; + PyMappingMethods as_mapping; + PySequenceMethods as_sequence; /* as_sequence comes after as_mapping, + so that the mapping wins when both + the mapping and the sequence define + a given operator (e.g. __getitem__). + see add_operators() in typeobject.c . */ + PyBufferProcs as_buffer; + PyObject *ht_name, *ht_slots, *ht_qualname; + struct _dictkeysobject *ht_cached_keys; + /* here are optional user slots, followed by the members. */ +} PyHeapTypeObject; + +/* access macro to the members which are floating "behind" the object */ +#define PyHeapType_GET_MEMBERS(etype) \ + ((PyMemberDef *)(((char *)etype) + Py_TYPE(etype)->tp_basicsize)) +#endif + +/* Generic type check */ +PyAPI_FUNC(int) PyType_IsSubtype(PyTypeObject *, PyTypeObject *); +#define PyObject_TypeCheck(ob, tp) \ + (Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp))) + +PyAPI_DATA(PyTypeObject) PyType_Type; /* built-in 'type' */ +PyAPI_DATA(PyTypeObject) PyBaseObject_Type; /* built-in 'object' */ +PyAPI_DATA(PyTypeObject) PySuper_Type; /* built-in 'super' */ + +PyAPI_FUNC(unsigned long) PyType_GetFlags(PyTypeObject*); + +#define PyType_Check(op) \ + PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS) +#define PyType_CheckExact(op) (Py_TYPE(op) == &PyType_Type) + +PyAPI_FUNC(int) PyType_Ready(PyTypeObject *); +PyAPI_FUNC(PyObject *) PyType_GenericAlloc(PyTypeObject *, Py_ssize_t); +PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *, + PyObject *, PyObject *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(const char *) _PyType_Name(PyTypeObject *); +PyAPI_FUNC(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *); +PyAPI_FUNC(PyObject *) _PyType_LookupId(PyTypeObject *, _Py_Identifier *); +PyAPI_FUNC(PyObject *) _PyObject_LookupSpecial(PyObject *, _Py_Identifier *); +PyAPI_FUNC(PyTypeObject *) _PyType_CalculateMetaclass(PyTypeObject *, PyObject *); +#endif +PyAPI_FUNC(unsigned int) PyType_ClearCache(void); +PyAPI_FUNC(void) PyType_Modified(PyTypeObject *); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyType_GetDocFromInternalDoc(const char *, const char *); +PyAPI_FUNC(PyObject *) _PyType_GetTextSignatureFromInternalDoc(const char *, const char *); +#endif + +/* Generic operations on objects */ +#ifndef Py_LIMITED_API +struct _Py_Identifier; +PyAPI_FUNC(int) PyObject_Print(PyObject *, FILE *, int); +PyAPI_FUNC(void) _Py_BreakPoint(void); +PyAPI_FUNC(void) _PyObject_Dump(PyObject *); +PyAPI_FUNC(int) _PyObject_IsFreed(PyObject *); +#endif +PyAPI_FUNC(PyObject *) PyObject_Repr(PyObject *); +PyAPI_FUNC(PyObject *) PyObject_Str(PyObject *); +PyAPI_FUNC(PyObject *) PyObject_ASCII(PyObject *); +PyAPI_FUNC(PyObject *) PyObject_Bytes(PyObject *); +PyAPI_FUNC(PyObject *) PyObject_RichCompare(PyObject *, PyObject *, int); +PyAPI_FUNC(int) PyObject_RichCompareBool(PyObject *, PyObject *, int); +PyAPI_FUNC(PyObject *) PyObject_GetAttrString(PyObject *, const char *); +PyAPI_FUNC(int) PyObject_SetAttrString(PyObject *, const char *, PyObject *); +PyAPI_FUNC(int) PyObject_HasAttrString(PyObject *, const char *); +PyAPI_FUNC(PyObject *) PyObject_GetAttr(PyObject *, PyObject *); +PyAPI_FUNC(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *); +PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyObject_IsAbstract(PyObject *); +PyAPI_FUNC(PyObject *) _PyObject_GetAttrId(PyObject *, struct _Py_Identifier *); +PyAPI_FUNC(int) _PyObject_SetAttrId(PyObject *, struct _Py_Identifier *, PyObject *); +PyAPI_FUNC(int) _PyObject_HasAttrId(PyObject *, struct _Py_Identifier *); +/* Replacements of PyObject_GetAttr() and _PyObject_GetAttrId() which + don't raise AttributeError. + + Return 1 and set *result != NULL if an attribute is found. + Return 0 and set *result == NULL if an attribute is not found; + an AttributeError is silenced. + Return -1 and set *result == NULL if an error other than AttributeError + is raised. +*/ +PyAPI_FUNC(int) _PyObject_LookupAttr(PyObject *, PyObject *, PyObject **); +PyAPI_FUNC(int) _PyObject_LookupAttrId(PyObject *, struct _Py_Identifier *, PyObject **); +PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *); +#endif +PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyObject_NextNotImplemented(PyObject *); +#endif +PyAPI_FUNC(PyObject *) PyObject_GenericGetAttr(PyObject *, PyObject *); +PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *, + PyObject *, PyObject *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(int) PyObject_GenericSetDict(PyObject *, PyObject *, void *); +#endif +PyAPI_FUNC(Py_hash_t) PyObject_Hash(PyObject *); +PyAPI_FUNC(Py_hash_t) PyObject_HashNotImplemented(PyObject *); +PyAPI_FUNC(int) PyObject_IsTrue(PyObject *); +PyAPI_FUNC(int) PyObject_Not(PyObject *); +PyAPI_FUNC(int) PyCallable_Check(PyObject *); + +PyAPI_FUNC(void) PyObject_ClearWeakRefs(PyObject *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) PyObject_CallFinalizer(PyObject *); +PyAPI_FUNC(int) PyObject_CallFinalizerFromDealloc(PyObject *); +#endif + +#ifndef Py_LIMITED_API +/* Same as PyObject_Generic{Get,Set}Attr, but passing the attributes + dict as the last parameter. */ +PyAPI_FUNC(PyObject *) +_PyObject_GenericGetAttrWithDict(PyObject *, PyObject *, PyObject *, int); +PyAPI_FUNC(int) +_PyObject_GenericSetAttrWithDict(PyObject *, PyObject *, + PyObject *, PyObject *); +#endif /* !Py_LIMITED_API */ + +/* Helper to look up a builtin object */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) +_PyObject_GetBuiltin(const char *name); +#endif + +/* PyObject_Dir(obj) acts like Python builtins.dir(obj), returning a + list of strings. PyObject_Dir(NULL) is like builtins.dir(), + returning the names of the current locals. In this case, if there are + no current locals, NULL is returned, and PyErr_Occurred() is false. +*/ +PyAPI_FUNC(PyObject *) PyObject_Dir(PyObject *); + + +/* Helpers for printing recursive container types */ +PyAPI_FUNC(int) Py_ReprEnter(PyObject *); +PyAPI_FUNC(void) Py_ReprLeave(PyObject *); + +/* Flag bits for printing: */ +#define Py_PRINT_RAW 1 /* No string quotes etc. */ + +/* +`Type flags (tp_flags) + +These flags are used to extend the type structure in a backwards-compatible +fashion. Extensions can use the flags to indicate (and test) when a given +type structure contains a new feature. The Python core will use these when +introducing new functionality between major revisions (to avoid mid-version +changes in the PYTHON_API_VERSION). + +Arbitration of the flag bit positions will need to be coordinated among +all extension writers who publicly release their extensions (this will +be fewer than you might expect!).. + +Most flags were removed as of Python 3.0 to make room for new flags. (Some +flags are not for backwards compatibility but to indicate the presence of an +optional feature; these flags remain of course.) + +Type definitions should use Py_TPFLAGS_DEFAULT for their tp_flags value. + +Code can use PyType_HasFeature(type_ob, flag_value) to test whether the +given type object has a specified feature. +*/ + +/* Set if the type object is dynamically allocated */ +#define Py_TPFLAGS_HEAPTYPE (1UL << 9) + +/* Set if the type allows subclassing */ +#define Py_TPFLAGS_BASETYPE (1UL << 10) + +/* Set if the type is 'ready' -- fully initialized */ +#define Py_TPFLAGS_READY (1UL << 12) + +/* Set while the type is being 'readied', to prevent recursive ready calls */ +#define Py_TPFLAGS_READYING (1UL << 13) + +/* Objects support garbage collection (see objimp.h) */ +#define Py_TPFLAGS_HAVE_GC (1UL << 14) + +/* These two bits are preserved for Stackless Python, next after this is 17 */ +#ifdef STACKLESS +#define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION (3UL << 15) +#else +#define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION 0 +#endif + +/* Objects support type attribute cache */ +#define Py_TPFLAGS_HAVE_VERSION_TAG (1UL << 18) +#define Py_TPFLAGS_VALID_VERSION_TAG (1UL << 19) + +/* Type is abstract and cannot be instantiated */ +#define Py_TPFLAGS_IS_ABSTRACT (1UL << 20) + +/* These flags are used to determine if a type is a subclass. */ +#define Py_TPFLAGS_LONG_SUBCLASS (1UL << 24) +#define Py_TPFLAGS_LIST_SUBCLASS (1UL << 25) +#define Py_TPFLAGS_TUPLE_SUBCLASS (1UL << 26) +#define Py_TPFLAGS_BYTES_SUBCLASS (1UL << 27) +#define Py_TPFLAGS_UNICODE_SUBCLASS (1UL << 28) +#define Py_TPFLAGS_DICT_SUBCLASS (1UL << 29) +#define Py_TPFLAGS_BASE_EXC_SUBCLASS (1UL << 30) +#define Py_TPFLAGS_TYPE_SUBCLASS (1UL << 31) + +#define Py_TPFLAGS_DEFAULT ( \ + Py_TPFLAGS_HAVE_STACKLESS_EXTENSION | \ + Py_TPFLAGS_HAVE_VERSION_TAG | \ + 0) + +/* NOTE: The following flags reuse lower bits (removed as part of the + * Python 3.0 transition). */ + +/* Type structure has tp_finalize member (3.4) */ +#define Py_TPFLAGS_HAVE_FINALIZE (1UL << 0) + +#ifdef Py_LIMITED_API +#define PyType_HasFeature(t,f) ((PyType_GetFlags(t) & (f)) != 0) +#else +#define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0) +#endif +#define PyType_FastSubclass(t,f) PyType_HasFeature(t,f) + + +/* +The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement +reference counts. Py_DECREF calls the object's deallocator function when +the refcount falls to 0; for +objects that don't contain references to other objects or heap memory +this can be the standard function free(). Both macros can be used +wherever a void expression is allowed. The argument must not be a +NULL pointer. If it may be NULL, use Py_XINCREF/Py_XDECREF instead. +The macro _Py_NewReference(op) initialize reference counts to 1, and +in special builds (Py_REF_DEBUG, Py_TRACE_REFS) performs additional +bookkeeping appropriate to the special build. + +We assume that the reference count field can never overflow; this can +be proven when the size of the field is the same as the pointer size, so +we ignore the possibility. Provided a C int is at least 32 bits (which +is implicitly assumed in many parts of this code), that's enough for +about 2**31 references to an object. + +XXX The following became out of date in Python 2.2, but I'm not sure +XXX what the full truth is now. Certainly, heap-allocated type objects +XXX can and should be deallocated. +Type objects should never be deallocated; the type pointer in an object +is not considered to be a reference to the type object, to save +complications in the deallocation function. (This is actually a +decision that's up to the implementer of each new type so if you want, +you can count such references to the type object.) +*/ + +/* First define a pile of simple helper macros, one set per special + * build symbol. These either expand to the obvious things, or to + * nothing at all when the special mode isn't in effect. The main + * macros can later be defined just once then, yet expand to different + * things depending on which special build options are and aren't in effect. + * Trust me : while painful, this is 20x easier to understand than, + * e.g, defining _Py_NewReference five different times in a maze of nested + * #ifdefs (we used to do that -- it was impenetrable). + */ +#ifdef Py_REF_DEBUG +PyAPI_DATA(Py_ssize_t) _Py_RefTotal; +PyAPI_FUNC(void) _Py_NegativeRefcount(const char *fname, + int lineno, PyObject *op); +PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void); +#define _Py_INC_REFTOTAL _Py_RefTotal++ +#define _Py_DEC_REFTOTAL _Py_RefTotal-- +#define _Py_REF_DEBUG_COMMA , +#define _Py_CHECK_REFCNT(OP) \ +{ if (((PyObject*)OP)->ob_refcnt < 0) \ + _Py_NegativeRefcount(__FILE__, __LINE__, \ + (PyObject *)(OP)); \ +} +/* Py_REF_DEBUG also controls the display of refcounts and memory block + * allocations at the interactive prompt and at interpreter shutdown + */ +PyAPI_FUNC(void) _PyDebug_PrintTotalRefs(void); +#else +#define _Py_INC_REFTOTAL +#define _Py_DEC_REFTOTAL +#define _Py_REF_DEBUG_COMMA +#define _Py_CHECK_REFCNT(OP) /* a semicolon */; +#endif /* Py_REF_DEBUG */ + +#ifdef COUNT_ALLOCS +PyAPI_FUNC(void) inc_count(PyTypeObject *); +PyAPI_FUNC(void) dec_count(PyTypeObject *); +#define _Py_INC_TPALLOCS(OP) inc_count(Py_TYPE(OP)) +#define _Py_INC_TPFREES(OP) dec_count(Py_TYPE(OP)) +#define _Py_DEC_TPFREES(OP) Py_TYPE(OP)->tp_frees-- +#define _Py_COUNT_ALLOCS_COMMA , +#else +#define _Py_INC_TPALLOCS(OP) +#define _Py_INC_TPFREES(OP) +#define _Py_DEC_TPFREES(OP) +#define _Py_COUNT_ALLOCS_COMMA +#endif /* COUNT_ALLOCS */ + +#ifdef Py_TRACE_REFS +/* Py_TRACE_REFS is such major surgery that we call external routines. */ +PyAPI_FUNC(void) _Py_NewReference(PyObject *); +PyAPI_FUNC(void) _Py_ForgetReference(PyObject *); +PyAPI_FUNC(void) _Py_Dealloc(PyObject *); +PyAPI_FUNC(void) _Py_PrintReferences(FILE *); +PyAPI_FUNC(void) _Py_PrintReferenceAddresses(FILE *); +PyAPI_FUNC(void) _Py_AddToAllObjects(PyObject *, int force); + +#else +/* Without Py_TRACE_REFS, there's little enough to do that we expand code + * inline. + */ +#define _Py_NewReference(op) ( \ + _Py_INC_TPALLOCS(op) _Py_COUNT_ALLOCS_COMMA \ + _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA \ + Py_REFCNT(op) = 1) + +#define _Py_ForgetReference(op) _Py_INC_TPFREES(op) + +#ifdef Py_LIMITED_API +PyAPI_FUNC(void) _Py_Dealloc(PyObject *); +#else +#define _Py_Dealloc(op) ( \ + _Py_INC_TPFREES(op) _Py_COUNT_ALLOCS_COMMA \ + (*Py_TYPE(op)->tp_dealloc)((PyObject *)(op))) +#endif +#endif /* !Py_TRACE_REFS */ + +#define Py_INCREF(op) ( \ + _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA \ + ((PyObject *)(op))->ob_refcnt++) + +#define Py_DECREF(op) \ + do { \ + PyObject *_py_decref_tmp = (PyObject *)(op); \ + if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA \ + --(_py_decref_tmp)->ob_refcnt != 0) \ + _Py_CHECK_REFCNT(_py_decref_tmp) \ + else \ + _Py_Dealloc(_py_decref_tmp); \ + } while (0) + +/* Safely decref `op` and set `op` to NULL, especially useful in tp_clear + * and tp_dealloc implementations. + * + * Note that "the obvious" code can be deadly: + * + * Py_XDECREF(op); + * op = NULL; + * + * Typically, `op` is something like self->containee, and `self` is done + * using its `containee` member. In the code sequence above, suppose + * `containee` is non-NULL with a refcount of 1. Its refcount falls to + * 0 on the first line, which can trigger an arbitrary amount of code, + * possibly including finalizers (like __del__ methods or weakref callbacks) + * coded in Python, which in turn can release the GIL and allow other threads + * to run, etc. Such code may even invoke methods of `self` again, or cause + * cyclic gc to trigger, but-- oops! --self->containee still points to the + * object being torn down, and it may be in an insane state while being torn + * down. This has in fact been a rich historic source of miserable (rare & + * hard-to-diagnose) segfaulting (and other) bugs. + * + * The safe way is: + * + * Py_CLEAR(op); + * + * That arranges to set `op` to NULL _before_ decref'ing, so that any code + * triggered as a side-effect of `op` getting torn down no longer believes + * `op` points to a valid object. + * + * There are cases where it's safe to use the naive code, but they're brittle. + * For example, if `op` points to a Python integer, you know that destroying + * one of those can't cause problems -- but in part that relies on that + * Python integers aren't currently weakly referencable. Best practice is + * to use Py_CLEAR() even if you can't think of a reason for why you need to. + */ +#define Py_CLEAR(op) \ + do { \ + PyObject *_py_tmp = (PyObject *)(op); \ + if (_py_tmp != NULL) { \ + (op) = NULL; \ + Py_DECREF(_py_tmp); \ + } \ + } while (0) + +/* Macros to use in case the object pointer may be NULL: */ +#define Py_XINCREF(op) \ + do { \ + PyObject *_py_xincref_tmp = (PyObject *)(op); \ + if (_py_xincref_tmp != NULL) \ + Py_INCREF(_py_xincref_tmp); \ + } while (0) + +#define Py_XDECREF(op) \ + do { \ + PyObject *_py_xdecref_tmp = (PyObject *)(op); \ + if (_py_xdecref_tmp != NULL) \ + Py_DECREF(_py_xdecref_tmp); \ + } while (0) + +#ifndef Py_LIMITED_API +/* Safely decref `op` and set `op` to `op2`. + * + * As in case of Py_CLEAR "the obvious" code can be deadly: + * + * Py_DECREF(op); + * op = op2; + * + * The safe way is: + * + * Py_SETREF(op, op2); + * + * That arranges to set `op` to `op2` _before_ decref'ing, so that any code + * triggered as a side-effect of `op` getting torn down no longer believes + * `op` points to a valid object. + * + * Py_XSETREF is a variant of Py_SETREF that uses Py_XDECREF instead of + * Py_DECREF. + */ + +#define Py_SETREF(op, op2) \ + do { \ + PyObject *_py_tmp = (PyObject *)(op); \ + (op) = (op2); \ + Py_DECREF(_py_tmp); \ + } while (0) + +#define Py_XSETREF(op, op2) \ + do { \ + PyObject *_py_tmp = (PyObject *)(op); \ + (op) = (op2); \ + Py_XDECREF(_py_tmp); \ + } while (0) + +#endif /* ifndef Py_LIMITED_API */ + +/* +These are provided as conveniences to Python runtime embedders, so that +they can have object code that is not dependent on Python compilation flags. +*/ +PyAPI_FUNC(void) Py_IncRef(PyObject *); +PyAPI_FUNC(void) Py_DecRef(PyObject *); + +#ifndef Py_LIMITED_API +PyAPI_DATA(PyTypeObject) _PyNone_Type; +PyAPI_DATA(PyTypeObject) _PyNotImplemented_Type; +#endif /* !Py_LIMITED_API */ + +/* +_Py_NoneStruct is an object of undefined type which can be used in contexts +where NULL (nil) is not suitable (since NULL often means 'error'). + +Don't forget to apply Py_INCREF() when returning this value!!! +*/ +PyAPI_DATA(PyObject) _Py_NoneStruct; /* Don't use this directly */ +#define Py_None (&_Py_NoneStruct) + +/* Macro for returning Py_None from a function */ +#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None + +/* +Py_NotImplemented is a singleton used to signal that an operation is +not implemented for a given type combination. +*/ +PyAPI_DATA(PyObject) _Py_NotImplementedStruct; /* Don't use this directly */ +#define Py_NotImplemented (&_Py_NotImplementedStruct) + +/* Macro for returning Py_NotImplemented from a function */ +#define Py_RETURN_NOTIMPLEMENTED \ + return Py_INCREF(Py_NotImplemented), Py_NotImplemented + +/* Rich comparison opcodes */ +#define Py_LT 0 +#define Py_LE 1 +#define Py_EQ 2 +#define Py_NE 3 +#define Py_GT 4 +#define Py_GE 5 + +/* + * Macro for implementing rich comparisons + * + * Needs to be a macro because any C-comparable type can be used. + */ +#define Py_RETURN_RICHCOMPARE(val1, val2, op) \ + do { \ + switch (op) { \ + case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ + case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ + case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ + case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ + case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ + case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ + default: \ + Py_UNREACHABLE(); \ + } \ + } while (0) + +#ifndef Py_LIMITED_API +/* Maps Py_LT to Py_GT, ..., Py_GE to Py_LE. + * Defined in object.c. + */ +PyAPI_DATA(int) _Py_SwappedOp[]; +#endif /* !Py_LIMITED_API */ + + +/* +More conventions +================ + +Argument Checking +----------------- + +Functions that take objects as arguments normally don't check for nil +arguments, but they do check the type of the argument, and return an +error if the function doesn't apply to the type. + +Failure Modes +------------- + +Functions may fail for a variety of reasons, including running out of +memory. This is communicated to the caller in two ways: an error string +is set (see errors.h), and the function result differs: functions that +normally return a pointer return NULL for failure, functions returning +an integer return -1 (which could be a legal return value too!), and +other functions return 0 for success and -1 for failure. +Callers should always check for errors before using the result. If +an error was set, the caller must either explicitly clear it, or pass +the error on to its caller. + +Reference Counts +---------------- + +It takes a while to get used to the proper usage of reference counts. + +Functions that create an object set the reference count to 1; such new +objects must be stored somewhere or destroyed again with Py_DECREF(). +Some functions that 'store' objects, such as PyTuple_SetItem() and +PyList_SetItem(), +don't increment the reference count of the object, since the most +frequent use is to store a fresh object. Functions that 'retrieve' +objects, such as PyTuple_GetItem() and PyDict_GetItemString(), also +don't increment +the reference count, since most frequently the object is only looked at +quickly. Thus, to retrieve an object and store it again, the caller +must call Py_INCREF() explicitly. + +NOTE: functions that 'consume' a reference count, like +PyList_SetItem(), consume the reference even if the object wasn't +successfully stored, to simplify error handling. + +It seems attractive to make other functions that take an object as +argument consume a reference count; however, this may quickly get +confusing (even the current practice is already confusing). Consider +it carefully, it may save lots of calls to Py_INCREF() and Py_DECREF() at +times. +*/ + + +/* Trashcan mechanism, thanks to Christian Tismer. + +When deallocating a container object, it's possible to trigger an unbounded +chain of deallocations, as each Py_DECREF in turn drops the refcount on "the +next" object in the chain to 0. This can easily lead to stack faults, and +especially in threads (which typically have less stack space to work with). + +A container object that participates in cyclic gc can avoid this by +bracketing the body of its tp_dealloc function with a pair of macros: + +static void +mytype_dealloc(mytype *p) +{ + ... declarations go here ... + + PyObject_GC_UnTrack(p); // must untrack first + Py_TRASHCAN_SAFE_BEGIN(p) + ... The body of the deallocator goes here, including all calls ... + ... to Py_DECREF on contained objects. ... + Py_TRASHCAN_SAFE_END(p) +} + +CAUTION: Never return from the middle of the body! If the body needs to +"get out early", put a label immediately before the Py_TRASHCAN_SAFE_END +call, and goto it. Else the call-depth counter (see below) will stay +above 0 forever, and the trashcan will never get emptied. + +How it works: The BEGIN macro increments a call-depth counter. So long +as this counter is small, the body of the deallocator is run directly without +further ado. But if the counter gets large, it instead adds p to a list of +objects to be deallocated later, skips the body of the deallocator, and +resumes execution after the END macro. The tp_dealloc routine then returns +without deallocating anything (and so unbounded call-stack depth is avoided). + +When the call stack finishes unwinding again, code generated by the END macro +notices this, and calls another routine to deallocate all the objects that +may have been added to the list of deferred deallocations. In effect, a +chain of N deallocations is broken into (N-1)/(PyTrash_UNWIND_LEVEL-1) pieces, +with the call stack never exceeding a depth of PyTrash_UNWIND_LEVEL. +*/ + +#ifndef Py_LIMITED_API +/* This is the old private API, invoked by the macros before 3.2.4. + Kept for binary compatibility of extensions using the stable ABI. */ +PyAPI_FUNC(void) _PyTrash_deposit_object(PyObject*); +PyAPI_FUNC(void) _PyTrash_destroy_chain(void); +#endif /* !Py_LIMITED_API */ + +/* The new thread-safe private API, invoked by the macros below. */ +PyAPI_FUNC(void) _PyTrash_thread_deposit_object(PyObject*); +PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(void); + +#define PyTrash_UNWIND_LEVEL 50 + +#define Py_TRASHCAN_SAFE_BEGIN(op) \ + do { \ + PyThreadState *_tstate = PyThreadState_GET(); \ + if (_tstate->trash_delete_nesting < PyTrash_UNWIND_LEVEL) { \ + ++_tstate->trash_delete_nesting; + /* The body of the deallocator is here. */ +#define Py_TRASHCAN_SAFE_END(op) \ + --_tstate->trash_delete_nesting; \ + if (_tstate->trash_delete_later && _tstate->trash_delete_nesting <= 0) \ + _PyTrash_thread_destroy_chain(); \ + } \ + else \ + _PyTrash_thread_deposit_object((PyObject*)op); \ + } while (0); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) +_PyDebugAllocatorStats(FILE *out, const char *block_name, int num_blocks, + size_t sizeof_block); +PyAPI_FUNC(void) +_PyObject_DebugTypeStats(FILE *out); +#endif /* ifndef Py_LIMITED_API */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_OBJECT_H */ diff --git a/my_env/Include/objimpl.h b/my_env/Include/objimpl.h new file mode 100644 index 000000000..0436ba789 --- /dev/null +++ b/my_env/Include/objimpl.h @@ -0,0 +1,374 @@ +/* The PyObject_ memory family: high-level object memory interfaces. + See pymem.h for the low-level PyMem_ family. +*/ + +#ifndef Py_OBJIMPL_H +#define Py_OBJIMPL_H + +#include "pymem.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* BEWARE: + + Each interface exports both functions and macros. Extension modules should + use the functions, to ensure binary compatibility across Python versions. + Because the Python implementation is free to change internal details, and + the macros may (or may not) expose details for speed, if you do use the + macros you must recompile your extensions with each Python release. + + Never mix calls to PyObject_ memory functions with calls to the platform + malloc/realloc/ calloc/free, or with calls to PyMem_. +*/ + +/* +Functions and macros for modules that implement new object types. + + - PyObject_New(type, typeobj) allocates memory for a new object of the given + type, and initializes part of it. 'type' must be the C structure type used + to represent the object, and 'typeobj' the address of the corresponding + type object. Reference count and type pointer are filled in; the rest of + the bytes of the object are *undefined*! The resulting expression type is + 'type *'. The size of the object is determined by the tp_basicsize field + of the type object. + + - PyObject_NewVar(type, typeobj, n) is similar but allocates a variable-size + object with room for n items. In addition to the refcount and type pointer + fields, this also fills in the ob_size field. + + - PyObject_Del(op) releases the memory allocated for an object. It does not + run a destructor -- it only frees the memory. PyObject_Free is identical. + + - PyObject_Init(op, typeobj) and PyObject_InitVar(op, typeobj, n) don't + allocate memory. Instead of a 'type' parameter, they take a pointer to a + new object (allocated by an arbitrary allocator), and initialize its object + header fields. + +Note that objects created with PyObject_{New, NewVar} are allocated using the +specialized Python allocator (implemented in obmalloc.c), if WITH_PYMALLOC is +enabled. In addition, a special debugging allocator is used if PYMALLOC_DEBUG +is also #defined. + +In case a specific form of memory management is needed (for example, if you +must use the platform malloc heap(s), or shared memory, or C++ local storage or +operator new), you must first allocate the object with your custom allocator, +then pass its pointer to PyObject_{Init, InitVar} for filling in its Python- +specific fields: reference count, type pointer, possibly others. You should +be aware that Python has no control over these objects because they don't +cooperate with the Python memory manager. Such objects may not be eligible +for automatic garbage collection and you have to make sure that they are +released accordingly whenever their destructor gets called (cf. the specific +form of memory management you're using). + +Unless you have specific memory management requirements, use +PyObject_{New, NewVar, Del}. +*/ + +/* + * Raw object memory interface + * =========================== + */ + +/* Functions to call the same malloc/realloc/free as used by Python's + object allocator. If WITH_PYMALLOC is enabled, these may differ from + the platform malloc/realloc/free. The Python object allocator is + designed for fast, cache-conscious allocation of many "small" objects, + and with low hidden memory overhead. + + PyObject_Malloc(0) returns a unique non-NULL pointer if possible. + + PyObject_Realloc(NULL, n) acts like PyObject_Malloc(n). + PyObject_Realloc(p != NULL, 0) does not return NULL, or free the memory + at p. + + Returned pointers must be checked for NULL explicitly; no action is + performed on failure other than to return NULL (no warning it printed, no + exception is set, etc). + + For allocating objects, use PyObject_{New, NewVar} instead whenever + possible. The PyObject_{Malloc, Realloc, Free} family is exposed + so that you can exploit Python's small-block allocator for non-object + uses. If you must use these routines to allocate object memory, make sure + the object gets initialized via PyObject_{Init, InitVar} after obtaining + the raw memory. +*/ +PyAPI_FUNC(void *) PyObject_Malloc(size_t size); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +PyAPI_FUNC(void *) PyObject_Calloc(size_t nelem, size_t elsize); +#endif +PyAPI_FUNC(void *) PyObject_Realloc(void *ptr, size_t new_size); +PyAPI_FUNC(void) PyObject_Free(void *ptr); + +#ifndef Py_LIMITED_API +/* This function returns the number of allocated memory blocks, regardless of size */ +PyAPI_FUNC(Py_ssize_t) _Py_GetAllocatedBlocks(void); +#endif /* !Py_LIMITED_API */ + +/* Macros */ +#ifdef WITH_PYMALLOC +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyObject_DebugMallocStats(FILE *out); +#endif /* #ifndef Py_LIMITED_API */ +#endif + +/* Macros */ +#define PyObject_MALLOC PyObject_Malloc +#define PyObject_REALLOC PyObject_Realloc +#define PyObject_FREE PyObject_Free +#define PyObject_Del PyObject_Free +#define PyObject_DEL PyObject_Free + + +/* + * Generic object allocator interface + * ================================== + */ + +/* Functions */ +PyAPI_FUNC(PyObject *) PyObject_Init(PyObject *, PyTypeObject *); +PyAPI_FUNC(PyVarObject *) PyObject_InitVar(PyVarObject *, + PyTypeObject *, Py_ssize_t); +PyAPI_FUNC(PyObject *) _PyObject_New(PyTypeObject *); +PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, Py_ssize_t); + +#define PyObject_New(type, typeobj) \ + ( (type *) _PyObject_New(typeobj) ) +#define PyObject_NewVar(type, typeobj, n) \ + ( (type *) _PyObject_NewVar((typeobj), (n)) ) + +/* Macros trading binary compatibility for speed. See also pymem.h. + Note that these macros expect non-NULL object pointers.*/ +#define PyObject_INIT(op, typeobj) \ + ( Py_TYPE(op) = (typeobj), _Py_NewReference((PyObject *)(op)), (op) ) +#define PyObject_INIT_VAR(op, typeobj, size) \ + ( Py_SIZE(op) = (size), PyObject_INIT((op), (typeobj)) ) + +#define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize ) + +/* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a + vrbl-size object with nitems items, exclusive of gc overhead (if any). The + value is rounded up to the closest multiple of sizeof(void *), in order to + ensure that pointer fields at the end of the object are correctly aligned + for the platform (this is of special importance for subclasses of, e.g., + str or int, so that pointers can be stored after the embedded data). + + Note that there's no memory wastage in doing this, as malloc has to + return (at worst) pointer-aligned memory anyway. +*/ +#if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0 +# error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2" +#endif + +#define _PyObject_VAR_SIZE(typeobj, nitems) \ + _Py_SIZE_ROUND_UP((typeobj)->tp_basicsize + \ + (nitems)*(typeobj)->tp_itemsize, \ + SIZEOF_VOID_P) + +#define PyObject_NEW(type, typeobj) \ +( (type *) PyObject_Init( \ + (PyObject *) PyObject_MALLOC( _PyObject_SIZE(typeobj) ), (typeobj)) ) + +#define PyObject_NEW_VAR(type, typeobj, n) \ +( (type *) PyObject_InitVar( \ + (PyVarObject *) PyObject_MALLOC(_PyObject_VAR_SIZE((typeobj),(n)) ),\ + (typeobj), (n)) ) + +/* This example code implements an object constructor with a custom + allocator, where PyObject_New is inlined, and shows the important + distinction between two steps (at least): + 1) the actual allocation of the object storage; + 2) the initialization of the Python specific fields + in this storage with PyObject_{Init, InitVar}. + + PyObject * + YourObject_New(...) + { + PyObject *op; + + op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct)); + if (op == NULL) + return PyErr_NoMemory(); + + PyObject_Init(op, &YourTypeStruct); + + op->ob_field = value; + ... + return op; + } + + Note that in C++, the use of the new operator usually implies that + the 1st step is performed automatically for you, so in a C++ class + constructor you would start directly with PyObject_Init/InitVar +*/ + +#ifndef Py_LIMITED_API +typedef struct { + /* user context passed as the first argument to the 2 functions */ + void *ctx; + + /* allocate an arena of size bytes */ + void* (*alloc) (void *ctx, size_t size); + + /* free an arena */ + void (*free) (void *ctx, void *ptr, size_t size); +} PyObjectArenaAllocator; + +/* Get the arena allocator. */ +PyAPI_FUNC(void) PyObject_GetArenaAllocator(PyObjectArenaAllocator *allocator); + +/* Set the arena allocator. */ +PyAPI_FUNC(void) PyObject_SetArenaAllocator(PyObjectArenaAllocator *allocator); +#endif + + +/* + * Garbage Collection Support + * ========================== + */ + +/* C equivalent of gc.collect() which ignores the state of gc.enabled. */ +PyAPI_FUNC(Py_ssize_t) PyGC_Collect(void); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(Py_ssize_t) _PyGC_CollectNoFail(void); +PyAPI_FUNC(Py_ssize_t) _PyGC_CollectIfEnabled(void); +#endif + +/* Test if a type has a GC head */ +#define PyType_IS_GC(t) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC) + +/* Test if an object has a GC head */ +#define PyObject_IS_GC(o) (PyType_IS_GC(Py_TYPE(o)) && \ + (Py_TYPE(o)->tp_is_gc == NULL || Py_TYPE(o)->tp_is_gc(o))) + +PyAPI_FUNC(PyVarObject *) _PyObject_GC_Resize(PyVarObject *, Py_ssize_t); +#define PyObject_GC_Resize(type, op, n) \ + ( (type *) _PyObject_GC_Resize((PyVarObject *)(op), (n)) ) + +/* GC information is stored BEFORE the object structure. */ +#ifndef Py_LIMITED_API +typedef union _gc_head { + struct { + union _gc_head *gc_next; + union _gc_head *gc_prev; + Py_ssize_t gc_refs; + } gc; + long double dummy; /* force worst-case alignment */ + // malloc returns memory block aligned for any built-in types and + // long double is the largest standard C type. + // On amd64 linux, long double requires 16 byte alignment. + // See bpo-27987 for more discussion. +} PyGC_Head; + +extern PyGC_Head *_PyGC_generation0; + +#define _Py_AS_GC(o) ((PyGC_Head *)(o)-1) + +/* Bit 0 is set when tp_finalize is called */ +#define _PyGC_REFS_MASK_FINALIZED (1 << 0) +/* The (N-1) most significant bits contain the gc state / refcount */ +#define _PyGC_REFS_SHIFT (1) +#define _PyGC_REFS_MASK (((size_t) -1) << _PyGC_REFS_SHIFT) + +#define _PyGCHead_REFS(g) ((g)->gc.gc_refs >> _PyGC_REFS_SHIFT) +#define _PyGCHead_SET_REFS(g, v) do { \ + (g)->gc.gc_refs = ((g)->gc.gc_refs & ~_PyGC_REFS_MASK) \ + | (((size_t)(v)) << _PyGC_REFS_SHIFT); \ + } while (0) +#define _PyGCHead_DECREF(g) ((g)->gc.gc_refs -= 1 << _PyGC_REFS_SHIFT) + +#define _PyGCHead_FINALIZED(g) (((g)->gc.gc_refs & _PyGC_REFS_MASK_FINALIZED) != 0) +#define _PyGCHead_SET_FINALIZED(g, v) do { \ + (g)->gc.gc_refs = ((g)->gc.gc_refs & ~_PyGC_REFS_MASK_FINALIZED) \ + | (v != 0); \ + } while (0) + +#define _PyGC_FINALIZED(o) _PyGCHead_FINALIZED(_Py_AS_GC(o)) +#define _PyGC_SET_FINALIZED(o, v) _PyGCHead_SET_FINALIZED(_Py_AS_GC(o), v) + +#define _PyGC_REFS(o) _PyGCHead_REFS(_Py_AS_GC(o)) + +#define _PyGC_REFS_UNTRACKED (-2) +#define _PyGC_REFS_REACHABLE (-3) +#define _PyGC_REFS_TENTATIVELY_UNREACHABLE (-4) + +/* Tell the GC to track this object. NB: While the object is tracked the + * collector it must be safe to call the ob_traverse method. */ +#define _PyObject_GC_TRACK(o) do { \ + PyGC_Head *g = _Py_AS_GC(o); \ + if (_PyGCHead_REFS(g) != _PyGC_REFS_UNTRACKED) \ + Py_FatalError("GC object already tracked"); \ + _PyGCHead_SET_REFS(g, _PyGC_REFS_REACHABLE); \ + g->gc.gc_next = _PyGC_generation0; \ + g->gc.gc_prev = _PyGC_generation0->gc.gc_prev; \ + g->gc.gc_prev->gc.gc_next = g; \ + _PyGC_generation0->gc.gc_prev = g; \ + } while (0); + +/* Tell the GC to stop tracking this object. + * gc_next doesn't need to be set to NULL, but doing so is a good + * way to provoke memory errors if calling code is confused. + */ +#define _PyObject_GC_UNTRACK(o) do { \ + PyGC_Head *g = _Py_AS_GC(o); \ + assert(_PyGCHead_REFS(g) != _PyGC_REFS_UNTRACKED); \ + _PyGCHead_SET_REFS(g, _PyGC_REFS_UNTRACKED); \ + g->gc.gc_prev->gc.gc_next = g->gc.gc_next; \ + g->gc.gc_next->gc.gc_prev = g->gc.gc_prev; \ + g->gc.gc_next = NULL; \ + } while (0); + +/* True if the object is currently tracked by the GC. */ +#define _PyObject_GC_IS_TRACKED(o) \ + (_PyGC_REFS(o) != _PyGC_REFS_UNTRACKED) + +/* True if the object may be tracked by the GC in the future, or already is. + This can be useful to implement some optimizations. */ +#define _PyObject_GC_MAY_BE_TRACKED(obj) \ + (PyObject_IS_GC(obj) && \ + (!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj))) +#endif /* Py_LIMITED_API */ + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyObject_GC_Malloc(size_t size); +PyAPI_FUNC(PyObject *) _PyObject_GC_Calloc(size_t size); +#endif /* !Py_LIMITED_API */ +PyAPI_FUNC(PyObject *) _PyObject_GC_New(PyTypeObject *); +PyAPI_FUNC(PyVarObject *) _PyObject_GC_NewVar(PyTypeObject *, Py_ssize_t); +PyAPI_FUNC(void) PyObject_GC_Track(void *); +PyAPI_FUNC(void) PyObject_GC_UnTrack(void *); +PyAPI_FUNC(void) PyObject_GC_Del(void *); + +#define PyObject_GC_New(type, typeobj) \ + ( (type *) _PyObject_GC_New(typeobj) ) +#define PyObject_GC_NewVar(type, typeobj, n) \ + ( (type *) _PyObject_GC_NewVar((typeobj), (n)) ) + + +/* Utility macro to help write tp_traverse functions. + * To use this macro, the tp_traverse function must name its arguments + * "visit" and "arg". This is intended to keep tp_traverse functions + * looking as much alike as possible. + */ +#define Py_VISIT(op) \ + do { \ + if (op) { \ + int vret = visit((PyObject *)(op), arg); \ + if (vret) \ + return vret; \ + } \ + } while (0) + + +/* Test if a type supports weak references */ +#define PyType_SUPPORTS_WEAKREFS(t) ((t)->tp_weaklistoffset > 0) + +#define PyObject_GET_WEAKREFS_LISTPTR(o) \ + ((PyObject **) (((char *) (o)) + Py_TYPE(o)->tp_weaklistoffset)) + +#ifdef __cplusplus +} +#endif +#endif /* !Py_OBJIMPL_H */ diff --git a/my_env/Include/odictobject.h b/my_env/Include/odictobject.h new file mode 100644 index 000000000..8378dc4bf --- /dev/null +++ b/my_env/Include/odictobject.h @@ -0,0 +1,43 @@ +#ifndef Py_ODICTOBJECT_H +#define Py_ODICTOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + + +/* OrderedDict */ +/* This API is optional and mostly redundant. */ + +#ifndef Py_LIMITED_API + +typedef struct _odictobject PyODictObject; + +PyAPI_DATA(PyTypeObject) PyODict_Type; +PyAPI_DATA(PyTypeObject) PyODictIter_Type; +PyAPI_DATA(PyTypeObject) PyODictKeys_Type; +PyAPI_DATA(PyTypeObject) PyODictItems_Type; +PyAPI_DATA(PyTypeObject) PyODictValues_Type; + +#define PyODict_Check(op) PyObject_TypeCheck(op, &PyODict_Type) +#define PyODict_CheckExact(op) (Py_TYPE(op) == &PyODict_Type) +#define PyODict_SIZE(op) PyDict_GET_SIZE((op)) + +PyAPI_FUNC(PyObject *) PyODict_New(void); +PyAPI_FUNC(int) PyODict_SetItem(PyObject *od, PyObject *key, PyObject *item); +PyAPI_FUNC(int) PyODict_DelItem(PyObject *od, PyObject *key); + +/* wrappers around PyDict* functions */ +#define PyODict_GetItem(od, key) PyDict_GetItem((PyObject *)od, key) +#define PyODict_GetItemWithError(od, key) \ + PyDict_GetItemWithError((PyObject *)od, key) +#define PyODict_Contains(od, key) PyDict_Contains((PyObject *)od, key) +#define PyODict_Size(od) PyDict_Size((PyObject *)od) +#define PyODict_GetItemString(od, key) \ + PyDict_GetItemString((PyObject *)od, key) + +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_ODICTOBJECT_H */ diff --git a/my_env/Include/opcode.h b/my_env/Include/opcode.h new file mode 100644 index 000000000..fc6cbf3a7 --- /dev/null +++ b/my_env/Include/opcode.h @@ -0,0 +1,147 @@ +/* Auto-generated by Tools/scripts/generate_opcode_h.py */ +#ifndef Py_OPCODE_H +#define Py_OPCODE_H +#ifdef __cplusplus +extern "C" { +#endif + + + /* Instruction opcodes for compiled code */ +#define POP_TOP 1 +#define ROT_TWO 2 +#define ROT_THREE 3 +#define DUP_TOP 4 +#define DUP_TOP_TWO 5 +#define NOP 9 +#define UNARY_POSITIVE 10 +#define UNARY_NEGATIVE 11 +#define UNARY_NOT 12 +#define UNARY_INVERT 15 +#define BINARY_MATRIX_MULTIPLY 16 +#define INPLACE_MATRIX_MULTIPLY 17 +#define BINARY_POWER 19 +#define BINARY_MULTIPLY 20 +#define BINARY_MODULO 22 +#define BINARY_ADD 23 +#define BINARY_SUBTRACT 24 +#define BINARY_SUBSCR 25 +#define BINARY_FLOOR_DIVIDE 26 +#define BINARY_TRUE_DIVIDE 27 +#define INPLACE_FLOOR_DIVIDE 28 +#define INPLACE_TRUE_DIVIDE 29 +#define GET_AITER 50 +#define GET_ANEXT 51 +#define BEFORE_ASYNC_WITH 52 +#define INPLACE_ADD 55 +#define INPLACE_SUBTRACT 56 +#define INPLACE_MULTIPLY 57 +#define INPLACE_MODULO 59 +#define STORE_SUBSCR 60 +#define DELETE_SUBSCR 61 +#define BINARY_LSHIFT 62 +#define BINARY_RSHIFT 63 +#define BINARY_AND 64 +#define BINARY_XOR 65 +#define BINARY_OR 66 +#define INPLACE_POWER 67 +#define GET_ITER 68 +#define GET_YIELD_FROM_ITER 69 +#define PRINT_EXPR 70 +#define LOAD_BUILD_CLASS 71 +#define YIELD_FROM 72 +#define GET_AWAITABLE 73 +#define INPLACE_LSHIFT 75 +#define INPLACE_RSHIFT 76 +#define INPLACE_AND 77 +#define INPLACE_XOR 78 +#define INPLACE_OR 79 +#define BREAK_LOOP 80 +#define WITH_CLEANUP_START 81 +#define WITH_CLEANUP_FINISH 82 +#define RETURN_VALUE 83 +#define IMPORT_STAR 84 +#define SETUP_ANNOTATIONS 85 +#define YIELD_VALUE 86 +#define POP_BLOCK 87 +#define END_FINALLY 88 +#define POP_EXCEPT 89 +#define HAVE_ARGUMENT 90 +#define STORE_NAME 90 +#define DELETE_NAME 91 +#define UNPACK_SEQUENCE 92 +#define FOR_ITER 93 +#define UNPACK_EX 94 +#define STORE_ATTR 95 +#define DELETE_ATTR 96 +#define STORE_GLOBAL 97 +#define DELETE_GLOBAL 98 +#define LOAD_CONST 100 +#define LOAD_NAME 101 +#define BUILD_TUPLE 102 +#define BUILD_LIST 103 +#define BUILD_SET 104 +#define BUILD_MAP 105 +#define LOAD_ATTR 106 +#define COMPARE_OP 107 +#define IMPORT_NAME 108 +#define IMPORT_FROM 109 +#define JUMP_FORWARD 110 +#define JUMP_IF_FALSE_OR_POP 111 +#define JUMP_IF_TRUE_OR_POP 112 +#define JUMP_ABSOLUTE 113 +#define POP_JUMP_IF_FALSE 114 +#define POP_JUMP_IF_TRUE 115 +#define LOAD_GLOBAL 116 +#define CONTINUE_LOOP 119 +#define SETUP_LOOP 120 +#define SETUP_EXCEPT 121 +#define SETUP_FINALLY 122 +#define LOAD_FAST 124 +#define STORE_FAST 125 +#define DELETE_FAST 126 +#define RAISE_VARARGS 130 +#define CALL_FUNCTION 131 +#define MAKE_FUNCTION 132 +#define BUILD_SLICE 133 +#define LOAD_CLOSURE 135 +#define LOAD_DEREF 136 +#define STORE_DEREF 137 +#define DELETE_DEREF 138 +#define CALL_FUNCTION_KW 141 +#define CALL_FUNCTION_EX 142 +#define SETUP_WITH 143 +#define EXTENDED_ARG 144 +#define LIST_APPEND 145 +#define SET_ADD 146 +#define MAP_ADD 147 +#define LOAD_CLASSDEREF 148 +#define BUILD_LIST_UNPACK 149 +#define BUILD_MAP_UNPACK 150 +#define BUILD_MAP_UNPACK_WITH_CALL 151 +#define BUILD_TUPLE_UNPACK 152 +#define BUILD_SET_UNPACK 153 +#define SETUP_ASYNC_WITH 154 +#define FORMAT_VALUE 155 +#define BUILD_CONST_KEY_MAP 156 +#define BUILD_STRING 157 +#define BUILD_TUPLE_UNPACK_WITH_CALL 158 +#define LOAD_METHOD 160 +#define CALL_METHOD 161 + +/* EXCEPT_HANDLER is a special, implicit block type which is created when + entering an except handler. It is not an opcode but we define it here + as we want it to be available to both frameobject.c and ceval.c, while + remaining private.*/ +#define EXCEPT_HANDLER 257 + + +enum cmp_op {PyCmp_LT=Py_LT, PyCmp_LE=Py_LE, PyCmp_EQ=Py_EQ, PyCmp_NE=Py_NE, + PyCmp_GT=Py_GT, PyCmp_GE=Py_GE, PyCmp_IN, PyCmp_NOT_IN, + PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD}; + +#define HAS_ARG(op) ((op) >= HAVE_ARGUMENT) + +#ifdef __cplusplus +} +#endif +#endif /* !Py_OPCODE_H */ diff --git a/my_env/Include/osdefs.h b/my_env/Include/osdefs.h new file mode 100644 index 000000000..bd84c1c12 --- /dev/null +++ b/my_env/Include/osdefs.h @@ -0,0 +1,47 @@ +#ifndef Py_OSDEFS_H +#define Py_OSDEFS_H +#ifdef __cplusplus +extern "C" { +#endif + + +/* Operating system dependencies */ + +#ifdef MS_WINDOWS +#define SEP L'\\' +#define ALTSEP L'/' +#define MAXPATHLEN 256 +#define DELIM L';' +#endif + +/* Filename separator */ +#ifndef SEP +#define SEP L'/' +#endif + +/* Max pathname length */ +#ifdef __hpux +#include +#include +#ifndef PATH_MAX +#define PATH_MAX MAXPATHLEN +#endif +#endif + +#ifndef MAXPATHLEN +#if defined(PATH_MAX) && PATH_MAX > 1024 +#define MAXPATHLEN PATH_MAX +#else +#define MAXPATHLEN 1024 +#endif +#endif + +/* Search path entry delimiter */ +#ifndef DELIM +#define DELIM L':' +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_OSDEFS_H */ diff --git a/my_env/Include/osmodule.h b/my_env/Include/osmodule.h new file mode 100644 index 000000000..9095c2fdd --- /dev/null +++ b/my_env/Include/osmodule.h @@ -0,0 +1,17 @@ + +/* os module interface */ + +#ifndef Py_OSMODULE_H +#define Py_OSMODULE_H +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 +PyAPI_FUNC(PyObject *) PyOS_FSPath(PyObject *path); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_OSMODULE_H */ diff --git a/my_env/Include/parsetok.h b/my_env/Include/parsetok.h new file mode 100644 index 000000000..c9407a3f7 --- /dev/null +++ b/my_env/Include/parsetok.h @@ -0,0 +1,108 @@ + +/* Parser-tokenizer link interface */ +#ifndef Py_LIMITED_API +#ifndef Py_PARSETOK_H +#define Py_PARSETOK_H +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + int error; +#ifndef PGEN + /* The filename is useless for pgen, see comment in tok_state structure */ + PyObject *filename; +#endif + int lineno; + int offset; + char *text; /* UTF-8-encoded string */ + int token; + int expected; +} perrdetail; + +#if 0 +#define PyPARSE_YIELD_IS_KEYWORD 0x0001 +#endif + +#define PyPARSE_DONT_IMPLY_DEDENT 0x0002 + +#if 0 +#define PyPARSE_WITH_IS_KEYWORD 0x0003 +#define PyPARSE_PRINT_IS_FUNCTION 0x0004 +#define PyPARSE_UNICODE_LITERALS 0x0008 +#endif + +#define PyPARSE_IGNORE_COOKIE 0x0010 +#define PyPARSE_BARRY_AS_BDFL 0x0020 + +PyAPI_FUNC(node *) PyParser_ParseString(const char *, grammar *, int, + perrdetail *); +PyAPI_FUNC(node *) PyParser_ParseFile (FILE *, const char *, grammar *, int, + const char *, const char *, + perrdetail *); + +PyAPI_FUNC(node *) PyParser_ParseStringFlags(const char *, grammar *, int, + perrdetail *, int); +PyAPI_FUNC(node *) PyParser_ParseFileFlags( + FILE *fp, + const char *filename, /* decoded from the filesystem encoding */ + const char *enc, + grammar *g, + int start, + const char *ps1, + const char *ps2, + perrdetail *err_ret, + int flags); +PyAPI_FUNC(node *) PyParser_ParseFileFlagsEx( + FILE *fp, + const char *filename, /* decoded from the filesystem encoding */ + const char *enc, + grammar *g, + int start, + const char *ps1, + const char *ps2, + perrdetail *err_ret, + int *flags); +PyAPI_FUNC(node *) PyParser_ParseFileObject( + FILE *fp, + PyObject *filename, + const char *enc, + grammar *g, + int start, + const char *ps1, + const char *ps2, + perrdetail *err_ret, + int *flags); + +PyAPI_FUNC(node *) PyParser_ParseStringFlagsFilename( + const char *s, + const char *filename, /* decoded from the filesystem encoding */ + grammar *g, + int start, + perrdetail *err_ret, + int flags); +PyAPI_FUNC(node *) PyParser_ParseStringFlagsFilenameEx( + const char *s, + const char *filename, /* decoded from the filesystem encoding */ + grammar *g, + int start, + perrdetail *err_ret, + int *flags); +PyAPI_FUNC(node *) PyParser_ParseStringObject( + const char *s, + PyObject *filename, + grammar *g, + int start, + perrdetail *err_ret, + int *flags); + +/* Note that the following functions are defined in pythonrun.c, + not in parsetok.c */ +PyAPI_FUNC(void) PyParser_SetError(perrdetail *); +PyAPI_FUNC(void) PyParser_ClearError(perrdetail *); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_PARSETOK_H */ +#endif /* !Py_LIMITED_API */ diff --git a/my_env/Include/patchlevel.h b/my_env/Include/patchlevel.h new file mode 100644 index 000000000..a388239c7 --- /dev/null +++ b/my_env/Include/patchlevel.h @@ -0,0 +1,35 @@ + +/* Python version identification scheme. + + When the major or minor version changes, the VERSION variable in + configure.ac must also be changed. + + There is also (independent) API version information in modsupport.h. +*/ + +/* Values for PY_RELEASE_LEVEL */ +#define PY_RELEASE_LEVEL_ALPHA 0xA +#define PY_RELEASE_LEVEL_BETA 0xB +#define PY_RELEASE_LEVEL_GAMMA 0xC /* For release candidates */ +#define PY_RELEASE_LEVEL_FINAL 0xF /* Serial should be 0 here */ + /* Higher for patch releases */ + +/* Version parsed out into numeric values */ +/*--start constants--*/ +#define PY_MAJOR_VERSION 3 +#define PY_MINOR_VERSION 7 +#define PY_MICRO_VERSION 4 +#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL +#define PY_RELEASE_SERIAL 0 + +/* Version as a string */ +#define PY_VERSION "3.7.4" +/*--end constants--*/ + +/* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. + Use this for numeric comparisons, e.g. #if PY_VERSION_HEX >= ... */ +#define PY_VERSION_HEX ((PY_MAJOR_VERSION << 24) | \ + (PY_MINOR_VERSION << 16) | \ + (PY_MICRO_VERSION << 8) | \ + (PY_RELEASE_LEVEL << 4) | \ + (PY_RELEASE_SERIAL << 0)) diff --git a/my_env/Include/pgen.h b/my_env/Include/pgen.h new file mode 100644 index 000000000..8a325ed07 --- /dev/null +++ b/my_env/Include/pgen.h @@ -0,0 +1,18 @@ +#ifndef Py_PGEN_H +#define Py_PGEN_H +#ifdef __cplusplus +extern "C" { +#endif + + +/* Parser generator interface */ + +extern grammar *meta_grammar(void); + +struct _node; +extern grammar *pgen(struct _node *); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_PGEN_H */ diff --git a/my_env/Include/pgenheaders.h b/my_env/Include/pgenheaders.h new file mode 100644 index 000000000..dbc5e0a5f --- /dev/null +++ b/my_env/Include/pgenheaders.h @@ -0,0 +1,43 @@ +#ifndef Py_PGENHEADERS_H +#define Py_PGENHEADERS_H +#ifdef __cplusplus +extern "C" { +#endif + + +/* Include files and extern declarations used by most of the parser. */ + +#include "Python.h" + +PyAPI_FUNC(void) PySys_WriteStdout(const char *format, ...) + Py_GCC_ATTRIBUTE((format(printf, 1, 2))); +PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...) + Py_GCC_ATTRIBUTE((format(printf, 1, 2))); + +#define addarc _Py_addarc +#define addbit _Py_addbit +#define adddfa _Py_adddfa +#define addfirstsets _Py_addfirstsets +#define addlabel _Py_addlabel +#define addstate _Py_addstate +#define delbitset _Py_delbitset +#define dumptree _Py_dumptree +#define findlabel _Py_findlabel +#define freegrammar _Py_freegrammar +#define mergebitset _Py_mergebitset +#define meta_grammar _Py_meta_grammar +#define newbitset _Py_newbitset +#define newgrammar _Py_newgrammar +#define pgen _Py_pgen +#define printgrammar _Py_printgrammar +#define printnonterminals _Py_printnonterminals +#define printtree _Py_printtree +#define samebitset _Py_samebitset +#define showtree _Py_showtree +#define tok_dump _Py_tok_dump +#define translatelabels _Py_translatelabels + +#ifdef __cplusplus +} +#endif +#endif /* !Py_PGENHEADERS_H */ diff --git a/my_env/Include/py_curses.h b/my_env/Include/py_curses.h new file mode 100644 index 000000000..0eebc362a --- /dev/null +++ b/my_env/Include/py_curses.h @@ -0,0 +1,159 @@ + +#ifndef Py_CURSES_H +#define Py_CURSES_H + +#ifdef __APPLE__ +/* +** On Mac OS X 10.2 [n]curses.h and stdlib.h use different guards +** against multiple definition of wchar_t. +*/ +#ifdef _BSD_WCHAR_T_DEFINED_ +#define _WCHAR_T +#endif +#endif /* __APPLE__ */ + +/* On FreeBSD, [n]curses.h and stdlib.h/wchar.h use different guards + against multiple definition of wchar_t and wint_t. */ +#if defined(__FreeBSD__) && defined(_XOPEN_SOURCE_EXTENDED) +# ifndef __wchar_t +# define __wchar_t +# endif +# ifndef __wint_t +# define __wint_t +# endif +#endif + +#if !defined(HAVE_CURSES_IS_PAD) && defined(WINDOW_HAS_FLAGS) +/* The following definition is necessary for ncurses 5.7; without it, + some of [n]curses.h set NCURSES_OPAQUE to 1, and then Python + can't get at the WINDOW flags field. */ +#define NCURSES_OPAQUE 0 +#endif + +#ifdef HAVE_NCURSES_H +#include +#else +#include +#endif + +#ifdef HAVE_NCURSES_H +/* configure was checking , but we will + use , which has some or all these features. */ +#if !defined(WINDOW_HAS_FLAGS) && !(NCURSES_OPAQUE+0) +#define WINDOW_HAS_FLAGS 1 +#endif +#if !defined(HAVE_CURSES_IS_PAD) && NCURSES_VERSION_PATCH+0 >= 20090906 +#define HAVE_CURSES_IS_PAD 1 +#endif +#ifndef MVWDELCH_IS_EXPRESSION +#define MVWDELCH_IS_EXPRESSION 1 +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define PyCurses_API_pointers 4 + +/* Type declarations */ + +typedef struct { + PyObject_HEAD + WINDOW *win; + char *encoding; +} PyCursesWindowObject; + +#define PyCursesWindow_Check(v) (Py_TYPE(v) == &PyCursesWindow_Type) + +#define PyCurses_CAPSULE_NAME "_curses._C_API" + + +#ifdef CURSES_MODULE +/* This section is used when compiling _cursesmodule.c */ + +#else +/* This section is used in modules that use the _cursesmodule API */ + +static void **PyCurses_API; + +#define PyCursesWindow_Type (*(PyTypeObject *) PyCurses_API[0]) +#define PyCursesSetupTermCalled {if (! ((int (*)(void))PyCurses_API[1]) () ) return NULL;} +#define PyCursesInitialised {if (! ((int (*)(void))PyCurses_API[2]) () ) return NULL;} +#define PyCursesInitialisedColor {if (! ((int (*)(void))PyCurses_API[3]) () ) return NULL;} + +#define import_curses() \ + PyCurses_API = (void **)PyCapsule_Import(PyCurses_CAPSULE_NAME, 1); + +#endif + +/* general error messages */ +static const char catchall_ERR[] = "curses function returned ERR"; +static const char catchall_NULL[] = "curses function returned NULL"; + +/* Function Prototype Macros - They are ugly but very, very useful. ;-) + + X - function name + TYPE - parameter Type + ERGSTR - format string for construction of the return value + PARSESTR - format string for argument parsing + */ + +#define NoArgNoReturnFunction(X) \ +static PyObject *PyCurses_ ## X (PyObject *self) \ +{ \ + PyCursesInitialised \ + return PyCursesCheckERR(X(), # X); } + +#define NoArgOrFlagNoReturnFunction(X) \ +static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \ +{ \ + int flag = 0; \ + PyCursesInitialised \ + switch(PyTuple_Size(args)) { \ + case 0: \ + return PyCursesCheckERR(X(), # X); \ + case 1: \ + if (!PyArg_ParseTuple(args, "i;True(1) or False(0)", &flag)) return NULL; \ + if (flag) return PyCursesCheckERR(X(), # X); \ + else return PyCursesCheckERR(no ## X (), # X); \ + default: \ + PyErr_SetString(PyExc_TypeError, # X " requires 0 or 1 arguments"); \ + return NULL; } } + +#define NoArgReturnIntFunction(X) \ +static PyObject *PyCurses_ ## X (PyObject *self) \ +{ \ + PyCursesInitialised \ + return PyLong_FromLong((long) X()); } + + +#define NoArgReturnStringFunction(X) \ +static PyObject *PyCurses_ ## X (PyObject *self) \ +{ \ + PyCursesInitialised \ + return PyBytes_FromString(X()); } + +#define NoArgTrueFalseFunction(X) \ +static PyObject *PyCurses_ ## X (PyObject *self) \ +{ \ + PyCursesInitialised \ + if (X () == FALSE) { \ + Py_RETURN_FALSE; \ + } \ + Py_RETURN_TRUE; } + +#define NoArgNoReturnVoidFunction(X) \ +static PyObject *PyCurses_ ## X (PyObject *self) \ +{ \ + PyCursesInitialised \ + X(); \ + Py_RETURN_NONE; } + +#ifdef __cplusplus +} +#endif + +#endif /* !defined(Py_CURSES_H) */ + + diff --git a/my_env/Include/pyarena.h b/my_env/Include/pyarena.h new file mode 100644 index 000000000..db3ad0188 --- /dev/null +++ b/my_env/Include/pyarena.h @@ -0,0 +1,64 @@ +/* An arena-like memory interface for the compiler. + */ + +#ifndef Py_LIMITED_API +#ifndef Py_PYARENA_H +#define Py_PYARENA_H + +#ifdef __cplusplus +extern "C" { +#endif + + typedef struct _arena PyArena; + + /* PyArena_New() and PyArena_Free() create a new arena and free it, + respectively. Once an arena has been created, it can be used + to allocate memory via PyArena_Malloc(). Pointers to PyObject can + also be registered with the arena via PyArena_AddPyObject(), and the + arena will ensure that the PyObjects stay alive at least until + PyArena_Free() is called. When an arena is freed, all the memory it + allocated is freed, the arena releases internal references to registered + PyObject*, and none of its pointers are valid. + XXX (tim) What does "none of its pointers are valid" mean? Does it + XXX mean that pointers previously obtained via PyArena_Malloc() are + XXX no longer valid? (That's clearly true, but not sure that's what + XXX the text is trying to say.) + + PyArena_New() returns an arena pointer. On error, it + returns a negative number and sets an exception. + XXX (tim): Not true. On error, PyArena_New() actually returns NULL, + XXX and looks like it may or may not set an exception (e.g., if the + XXX internal PyList_New(0) returns NULL, PyArena_New() passes that on + XXX and an exception is set; OTOH, if the internal + XXX block_new(DEFAULT_BLOCK_SIZE) returns NULL, that's passed on but + XXX an exception is not set in that case). + */ + PyAPI_FUNC(PyArena *) PyArena_New(void); + PyAPI_FUNC(void) PyArena_Free(PyArena *); + + /* Mostly like malloc(), return the address of a block of memory spanning + * `size` bytes, or return NULL (without setting an exception) if enough + * new memory can't be obtained. Unlike malloc(0), PyArena_Malloc() with + * size=0 does not guarantee to return a unique pointer (the pointer + * returned may equal one or more other pointers obtained from + * PyArena_Malloc()). + * Note that pointers obtained via PyArena_Malloc() must never be passed to + * the system free() or realloc(), or to any of Python's similar memory- + * management functions. PyArena_Malloc()-obtained pointers remain valid + * until PyArena_Free(ar) is called, at which point all pointers obtained + * from the arena `ar` become invalid simultaneously. + */ + PyAPI_FUNC(void *) PyArena_Malloc(PyArena *, size_t size); + + /* This routine isn't a proper arena allocation routine. It takes + * a PyObject* and records it so that it can be DECREFed when the + * arena is freed. + */ + PyAPI_FUNC(int) PyArena_AddPyObject(PyArena *, PyObject *); + +#ifdef __cplusplus +} +#endif + +#endif /* !Py_PYARENA_H */ +#endif /* Py_LIMITED_API */ diff --git a/my_env/Include/pyatomic.h b/my_env/Include/pyatomic.h new file mode 100644 index 000000000..9a497a683 --- /dev/null +++ b/my_env/Include/pyatomic.h @@ -0,0 +1,535 @@ +#ifndef Py_ATOMIC_H +#define Py_ATOMIC_H +#ifdef Py_BUILD_CORE + +#include "dynamic_annotations.h" + +#include "pyconfig.h" + +#if defined(HAVE_STD_ATOMIC) +#include +#endif + + +#if defined(_MSC_VER) +#include +#include +#endif + +/* This is modeled after the atomics interface from C1x, according to + * the draft at + * http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1425.pdf. + * Operations and types are named the same except with a _Py_ prefix + * and have the same semantics. + * + * Beware, the implementations here are deep magic. + */ + +#if defined(HAVE_STD_ATOMIC) + +typedef enum _Py_memory_order { + _Py_memory_order_relaxed = memory_order_relaxed, + _Py_memory_order_acquire = memory_order_acquire, + _Py_memory_order_release = memory_order_release, + _Py_memory_order_acq_rel = memory_order_acq_rel, + _Py_memory_order_seq_cst = memory_order_seq_cst +} _Py_memory_order; + +typedef struct _Py_atomic_address { + atomic_uintptr_t _value; +} _Py_atomic_address; + +typedef struct _Py_atomic_int { + atomic_int _value; +} _Py_atomic_int; + +#define _Py_atomic_signal_fence(/*memory_order*/ ORDER) \ + atomic_signal_fence(ORDER) + +#define _Py_atomic_thread_fence(/*memory_order*/ ORDER) \ + atomic_thread_fence(ORDER) + +#define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \ + atomic_store_explicit(&(ATOMIC_VAL)->_value, NEW_VAL, ORDER) + +#define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \ + atomic_load_explicit(&(ATOMIC_VAL)->_value, ORDER) + +/* Use builtin atomic operations in GCC >= 4.7 */ +#elif defined(HAVE_BUILTIN_ATOMIC) + +typedef enum _Py_memory_order { + _Py_memory_order_relaxed = __ATOMIC_RELAXED, + _Py_memory_order_acquire = __ATOMIC_ACQUIRE, + _Py_memory_order_release = __ATOMIC_RELEASE, + _Py_memory_order_acq_rel = __ATOMIC_ACQ_REL, + _Py_memory_order_seq_cst = __ATOMIC_SEQ_CST +} _Py_memory_order; + +typedef struct _Py_atomic_address { + uintptr_t _value; +} _Py_atomic_address; + +typedef struct _Py_atomic_int { + int _value; +} _Py_atomic_int; + +#define _Py_atomic_signal_fence(/*memory_order*/ ORDER) \ + __atomic_signal_fence(ORDER) + +#define _Py_atomic_thread_fence(/*memory_order*/ ORDER) \ + __atomic_thread_fence(ORDER) + +#define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \ + (assert((ORDER) == __ATOMIC_RELAXED \ + || (ORDER) == __ATOMIC_SEQ_CST \ + || (ORDER) == __ATOMIC_RELEASE), \ + __atomic_store_n(&(ATOMIC_VAL)->_value, NEW_VAL, ORDER)) + +#define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \ + (assert((ORDER) == __ATOMIC_RELAXED \ + || (ORDER) == __ATOMIC_SEQ_CST \ + || (ORDER) == __ATOMIC_ACQUIRE \ + || (ORDER) == __ATOMIC_CONSUME), \ + __atomic_load_n(&(ATOMIC_VAL)->_value, ORDER)) + +/* Only support GCC (for expression statements) and x86 (for simple + * atomic semantics) and MSVC x86/x64/ARM */ +#elif defined(__GNUC__) && (defined(__i386__) || defined(__amd64)) +typedef enum _Py_memory_order { + _Py_memory_order_relaxed, + _Py_memory_order_acquire, + _Py_memory_order_release, + _Py_memory_order_acq_rel, + _Py_memory_order_seq_cst +} _Py_memory_order; + +typedef struct _Py_atomic_address { + uintptr_t _value; +} _Py_atomic_address; + +typedef struct _Py_atomic_int { + int _value; +} _Py_atomic_int; + + +static __inline__ void +_Py_atomic_signal_fence(_Py_memory_order order) +{ + if (order != _Py_memory_order_relaxed) + __asm__ volatile("":::"memory"); +} + +static __inline__ void +_Py_atomic_thread_fence(_Py_memory_order order) +{ + if (order != _Py_memory_order_relaxed) + __asm__ volatile("mfence":::"memory"); +} + +/* Tell the race checker about this operation's effects. */ +static __inline__ void +_Py_ANNOTATE_MEMORY_ORDER(const volatile void *address, _Py_memory_order order) +{ + (void)address; /* shut up -Wunused-parameter */ + switch(order) { + case _Py_memory_order_release: + case _Py_memory_order_acq_rel: + case _Py_memory_order_seq_cst: + _Py_ANNOTATE_HAPPENS_BEFORE(address); + break; + case _Py_memory_order_relaxed: + case _Py_memory_order_acquire: + break; + } + switch(order) { + case _Py_memory_order_acquire: + case _Py_memory_order_acq_rel: + case _Py_memory_order_seq_cst: + _Py_ANNOTATE_HAPPENS_AFTER(address); + break; + case _Py_memory_order_relaxed: + case _Py_memory_order_release: + break; + } +} + +#define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \ + __extension__ ({ \ + __typeof__(ATOMIC_VAL) atomic_val = ATOMIC_VAL; \ + __typeof__(atomic_val->_value) new_val = NEW_VAL;\ + volatile __typeof__(new_val) *volatile_data = &atomic_val->_value; \ + _Py_memory_order order = ORDER; \ + _Py_ANNOTATE_MEMORY_ORDER(atomic_val, order); \ + \ + /* Perform the operation. */ \ + _Py_ANNOTATE_IGNORE_WRITES_BEGIN(); \ + switch(order) { \ + case _Py_memory_order_release: \ + _Py_atomic_signal_fence(_Py_memory_order_release); \ + /* fallthrough */ \ + case _Py_memory_order_relaxed: \ + *volatile_data = new_val; \ + break; \ + \ + case _Py_memory_order_acquire: \ + case _Py_memory_order_acq_rel: \ + case _Py_memory_order_seq_cst: \ + __asm__ volatile("xchg %0, %1" \ + : "+r"(new_val) \ + : "m"(atomic_val->_value) \ + : "memory"); \ + break; \ + } \ + _Py_ANNOTATE_IGNORE_WRITES_END(); \ + }) + +#define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \ + __extension__ ({ \ + __typeof__(ATOMIC_VAL) atomic_val = ATOMIC_VAL; \ + __typeof__(atomic_val->_value) result; \ + volatile __typeof__(result) *volatile_data = &atomic_val->_value; \ + _Py_memory_order order = ORDER; \ + _Py_ANNOTATE_MEMORY_ORDER(atomic_val, order); \ + \ + /* Perform the operation. */ \ + _Py_ANNOTATE_IGNORE_READS_BEGIN(); \ + switch(order) { \ + case _Py_memory_order_release: \ + case _Py_memory_order_acq_rel: \ + case _Py_memory_order_seq_cst: \ + /* Loads on x86 are not releases by default, so need a */ \ + /* thread fence. */ \ + _Py_atomic_thread_fence(_Py_memory_order_release); \ + break; \ + default: \ + /* No fence */ \ + break; \ + } \ + result = *volatile_data; \ + switch(order) { \ + case _Py_memory_order_acquire: \ + case _Py_memory_order_acq_rel: \ + case _Py_memory_order_seq_cst: \ + /* Loads on x86 are automatically acquire operations so */ \ + /* can get by with just a compiler fence. */ \ + _Py_atomic_signal_fence(_Py_memory_order_acquire); \ + break; \ + default: \ + /* No fence */ \ + break; \ + } \ + _Py_ANNOTATE_IGNORE_READS_END(); \ + result; \ + }) + +#elif defined(_MSC_VER) +/* _Interlocked* functions provide a full memory barrier and are therefore + enough for acq_rel and seq_cst. If the HLE variants aren't available + in hardware they will fall back to a full memory barrier as well. + + This might affect performance but likely only in some very specific and + hard to meassure scenario. +*/ +#if defined(_M_IX86) || defined(_M_X64) +typedef enum _Py_memory_order { + _Py_memory_order_relaxed, + _Py_memory_order_acquire, + _Py_memory_order_release, + _Py_memory_order_acq_rel, + _Py_memory_order_seq_cst +} _Py_memory_order; + +typedef struct _Py_atomic_address { + volatile uintptr_t _value; +} _Py_atomic_address; + +typedef struct _Py_atomic_int { + volatile int _value; +} _Py_atomic_int; + + +#if defined(_M_X64) +#define _Py_atomic_store_64bit(ATOMIC_VAL, NEW_VAL, ORDER) \ + switch (ORDER) { \ + case _Py_memory_order_acquire: \ + _InterlockedExchange64_HLEAcquire((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \ + break; \ + case _Py_memory_order_release: \ + _InterlockedExchange64_HLERelease((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \ + break; \ + default: \ + _InterlockedExchange64((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \ + break; \ + } +#else +#define _Py_atomic_store_64bit(ATOMIC_VAL, NEW_VAL, ORDER) ((void)0); +#endif + +#define _Py_atomic_store_32bit(ATOMIC_VAL, NEW_VAL, ORDER) \ + switch (ORDER) { \ + case _Py_memory_order_acquire: \ + _InterlockedExchange_HLEAcquire((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \ + break; \ + case _Py_memory_order_release: \ + _InterlockedExchange_HLERelease((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \ + break; \ + default: \ + _InterlockedExchange((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \ + break; \ + } + +#if defined(_M_X64) +/* This has to be an intptr_t for now. + gil_created() uses -1 as a sentinel value, if this returns + a uintptr_t it will do an unsigned compare and crash +*/ +inline intptr_t _Py_atomic_load_64bit(volatile uintptr_t* value, int order) { + __int64 old; + switch (order) { + case _Py_memory_order_acquire: + { + do { + old = *value; + } while(_InterlockedCompareExchange64_HLEAcquire((volatile __int64*)value, old, old) != old); + break; + } + case _Py_memory_order_release: + { + do { + old = *value; + } while(_InterlockedCompareExchange64_HLERelease((volatile __int64*)value, old, old) != old); + break; + } + case _Py_memory_order_relaxed: + old = *value; + break; + default: + { + do { + old = *value; + } while(_InterlockedCompareExchange64((volatile __int64*)value, old, old) != old); + break; + } + } + return old; +} + +#else +#define _Py_atomic_load_64bit(ATOMIC_VAL, ORDER) *ATOMIC_VAL +#endif + +inline int _Py_atomic_load_32bit(volatile int* value, int order) { + long old; + switch (order) { + case _Py_memory_order_acquire: + { + do { + old = *value; + } while(_InterlockedCompareExchange_HLEAcquire((volatile long*)value, old, old) != old); + break; + } + case _Py_memory_order_release: + { + do { + old = *value; + } while(_InterlockedCompareExchange_HLERelease((volatile long*)value, old, old) != old); + break; + } + case _Py_memory_order_relaxed: + old = *value; + break; + default: + { + do { + old = *value; + } while(_InterlockedCompareExchange((volatile long*)value, old, old) != old); + break; + } + } + return old; +} + +#define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \ + if (sizeof(*ATOMIC_VAL._value) == 8) { \ + _Py_atomic_store_64bit((volatile long long*)ATOMIC_VAL._value, NEW_VAL, ORDER) } else { \ + _Py_atomic_store_32bit((volatile long*)ATOMIC_VAL._value, NEW_VAL, ORDER) } + +#define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \ + ( \ + sizeof(*(ATOMIC_VAL._value)) == 8 ? \ + _Py_atomic_load_64bit((volatile long long*)ATOMIC_VAL._value, ORDER) : \ + _Py_atomic_load_32bit((volatile long*)ATOMIC_VAL._value, ORDER) \ + ) +#elif defined(_M_ARM) || defined(_M_ARM64) +typedef enum _Py_memory_order { + _Py_memory_order_relaxed, + _Py_memory_order_acquire, + _Py_memory_order_release, + _Py_memory_order_acq_rel, + _Py_memory_order_seq_cst +} _Py_memory_order; + +typedef struct _Py_atomic_address { + volatile uintptr_t _value; +} _Py_atomic_address; + +typedef struct _Py_atomic_int { + volatile int _value; +} _Py_atomic_int; + + +#if defined(_M_ARM64) +#define _Py_atomic_store_64bit(ATOMIC_VAL, NEW_VAL, ORDER) \ + switch (ORDER) { \ + case _Py_memory_order_acquire: \ + _InterlockedExchange64_acq((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \ + break; \ + case _Py_memory_order_release: \ + _InterlockedExchange64_rel((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \ + break; \ + default: \ + _InterlockedExchange64((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \ + break; \ + } +#else +#define _Py_atomic_store_64bit(ATOMIC_VAL, NEW_VAL, ORDER) ((void)0); +#endif + +#define _Py_atomic_store_32bit(ATOMIC_VAL, NEW_VAL, ORDER) \ + switch (ORDER) { \ + case _Py_memory_order_acquire: \ + _InterlockedExchange_acq((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \ + break; \ + case _Py_memory_order_release: \ + _InterlockedExchange_rel((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \ + break; \ + default: \ + _InterlockedExchange((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \ + break; \ + } + +#if defined(_M_ARM64) +/* This has to be an intptr_t for now. + gil_created() uses -1 as a sentinel value, if this returns + a uintptr_t it will do an unsigned compare and crash +*/ +inline intptr_t _Py_atomic_load_64bit(volatile uintptr_t* value, int order) { + uintptr_t old; + switch (order) { + case _Py_memory_order_acquire: + { + do { + old = *value; + } while(_InterlockedCompareExchange64_acq(value, old, old) != old); + break; + } + case _Py_memory_order_release: + { + do { + old = *value; + } while(_InterlockedCompareExchange64_rel(value, old, old) != old); + break; + } + case _Py_memory_order_relaxed: + old = *value; + break; + default: + { + do { + old = *value; + } while(_InterlockedCompareExchange64(value, old, old) != old); + break; + } + } + return old; +} + +#else +#define _Py_atomic_load_64bit(ATOMIC_VAL, ORDER) *ATOMIC_VAL +#endif + +inline int _Py_atomic_load_32bit(volatile int* value, int order) { + int old; + switch (order) { + case _Py_memory_order_acquire: + { + do { + old = *value; + } while(_InterlockedCompareExchange_acq(value, old, old) != old); + break; + } + case _Py_memory_order_release: + { + do { + old = *value; + } while(_InterlockedCompareExchange_rel(value, old, old) != old); + break; + } + case _Py_memory_order_relaxed: + old = *value; + break; + default: + { + do { + old = *value; + } while(_InterlockedCompareExchange(value, old, old) != old); + break; + } + } + return old; +} + +#define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \ + if (sizeof(*ATOMIC_VAL._value) == 8) { \ + _Py_atomic_store_64bit(ATOMIC_VAL._value, NEW_VAL, ORDER) } else { \ + _Py_atomic_store_32bit(ATOMIC_VAL._value, NEW_VAL, ORDER) } + +#define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \ + ( \ + sizeof(*(ATOMIC_VAL._value)) == 8 ? \ + _Py_atomic_load_64bit(ATOMIC_VAL._value, ORDER) : \ + _Py_atomic_load_32bit(ATOMIC_VAL._value, ORDER) \ + ) +#endif +#else /* !gcc x86 !_msc_ver */ +typedef enum _Py_memory_order { + _Py_memory_order_relaxed, + _Py_memory_order_acquire, + _Py_memory_order_release, + _Py_memory_order_acq_rel, + _Py_memory_order_seq_cst +} _Py_memory_order; + +typedef struct _Py_atomic_address { + uintptr_t _value; +} _Py_atomic_address; + +typedef struct _Py_atomic_int { + int _value; +} _Py_atomic_int; +/* Fall back to other compilers and processors by assuming that simple + volatile accesses are atomic. This is false, so people should port + this. */ +#define _Py_atomic_signal_fence(/*memory_order*/ ORDER) ((void)0) +#define _Py_atomic_thread_fence(/*memory_order*/ ORDER) ((void)0) +#define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \ + ((ATOMIC_VAL)->_value = NEW_VAL) +#define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \ + ((ATOMIC_VAL)->_value) +#endif + +/* Standardized shortcuts. */ +#define _Py_atomic_store(ATOMIC_VAL, NEW_VAL) \ + _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, _Py_memory_order_seq_cst) +#define _Py_atomic_load(ATOMIC_VAL) \ + _Py_atomic_load_explicit(ATOMIC_VAL, _Py_memory_order_seq_cst) + +/* Python-local extensions */ + +#define _Py_atomic_store_relaxed(ATOMIC_VAL, NEW_VAL) \ + _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, _Py_memory_order_relaxed) +#define _Py_atomic_load_relaxed(ATOMIC_VAL) \ + _Py_atomic_load_explicit(ATOMIC_VAL, _Py_memory_order_relaxed) +#endif /* Py_BUILD_CORE */ +#endif /* Py_ATOMIC_H */ diff --git a/my_env/Include/pycapsule.h b/my_env/Include/pycapsule.h new file mode 100644 index 000000000..d9ecda7a4 --- /dev/null +++ b/my_env/Include/pycapsule.h @@ -0,0 +1,59 @@ + +/* Capsule objects let you wrap a C "void *" pointer in a Python + object. They're a way of passing data through the Python interpreter + without creating your own custom type. + + Capsules are used for communication between extension modules. + They provide a way for an extension module to export a C interface + to other extension modules, so that extension modules can use the + Python import mechanism to link to one another. + + For more information, please see "c-api/capsule.html" in the + documentation. +*/ + +#ifndef Py_CAPSULE_H +#define Py_CAPSULE_H +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_DATA(PyTypeObject) PyCapsule_Type; + +typedef void (*PyCapsule_Destructor)(PyObject *); + +#define PyCapsule_CheckExact(op) (Py_TYPE(op) == &PyCapsule_Type) + + +PyAPI_FUNC(PyObject *) PyCapsule_New( + void *pointer, + const char *name, + PyCapsule_Destructor destructor); + +PyAPI_FUNC(void *) PyCapsule_GetPointer(PyObject *capsule, const char *name); + +PyAPI_FUNC(PyCapsule_Destructor) PyCapsule_GetDestructor(PyObject *capsule); + +PyAPI_FUNC(const char *) PyCapsule_GetName(PyObject *capsule); + +PyAPI_FUNC(void *) PyCapsule_GetContext(PyObject *capsule); + +PyAPI_FUNC(int) PyCapsule_IsValid(PyObject *capsule, const char *name); + +PyAPI_FUNC(int) PyCapsule_SetPointer(PyObject *capsule, void *pointer); + +PyAPI_FUNC(int) PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor); + +PyAPI_FUNC(int) PyCapsule_SetName(PyObject *capsule, const char *name); + +PyAPI_FUNC(int) PyCapsule_SetContext(PyObject *capsule, void *context); + +PyAPI_FUNC(void *) PyCapsule_Import( + const char *name, /* UTF-8 encoded string */ + int no_block); + + +#ifdef __cplusplus +} +#endif +#endif /* !Py_CAPSULE_H */ diff --git a/my_env/Include/pyconfig.h b/my_env/Include/pyconfig.h new file mode 100644 index 000000000..46fc84e92 --- /dev/null +++ b/my_env/Include/pyconfig.h @@ -0,0 +1,680 @@ +#ifndef Py_CONFIG_H +#define Py_CONFIG_H + +/* pyconfig.h. NOT Generated automatically by configure. + +This is a manually maintained version used for the Watcom, +Borland and Microsoft Visual C++ compilers. It is a +standard part of the Python distribution. + +WINDOWS DEFINES: +The code specific to Windows should be wrapped around one of +the following #defines + +MS_WIN64 - Code specific to the MS Win64 API +MS_WIN32 - Code specific to the MS Win32 (and Win64) API (obsolete, this covers all supported APIs) +MS_WINDOWS - Code specific to Windows, but all versions. +Py_ENABLE_SHARED - Code if the Python core is built as a DLL. + +Also note that neither "_M_IX86" or "_MSC_VER" should be used for +any purpose other than "Windows Intel x86 specific" and "Microsoft +compiler specific". Therefore, these should be very rare. + + +NOTE: The following symbols are deprecated: +NT, USE_DL_EXPORT, USE_DL_IMPORT, DL_EXPORT, DL_IMPORT +MS_CORE_DLL. + +WIN32 is still required for the locale module. + +*/ + +/* Deprecated USE_DL_EXPORT macro - please use Py_BUILD_CORE */ +#ifdef USE_DL_EXPORT +# define Py_BUILD_CORE +#endif /* USE_DL_EXPORT */ + +/* Visual Studio 2005 introduces deprecation warnings for + "insecure" and POSIX functions. The insecure functions should + be replaced by *_s versions (according to Microsoft); the + POSIX functions by _* versions (which, according to Microsoft, + would be ISO C conforming). Neither renaming is feasible, so + we just silence the warnings. */ + +#ifndef _CRT_SECURE_NO_DEPRECATE +#define _CRT_SECURE_NO_DEPRECATE 1 +#endif +#ifndef _CRT_NONSTDC_NO_DEPRECATE +#define _CRT_NONSTDC_NO_DEPRECATE 1 +#endif + +#define HAVE_IO_H +#define HAVE_SYS_UTIME_H +#define HAVE_TEMPNAM +#define HAVE_TMPFILE +#define HAVE_TMPNAM +#define HAVE_CLOCK +#define HAVE_STRERROR + +#include + +#define HAVE_HYPOT +#define HAVE_STRFTIME +#define DONT_HAVE_SIG_ALARM +#define DONT_HAVE_SIG_PAUSE +#define LONG_BIT 32 +#define WORD_BIT 32 + +#define MS_WIN32 /* only support win32 and greater. */ +#define MS_WINDOWS +#ifndef PYTHONPATH +# define PYTHONPATH L".\\DLLs;.\\lib" +#endif +#define NT_THREADS +#define WITH_THREAD +#ifndef NETSCAPE_PI +#define USE_SOCKET +#endif + + +/* Compiler specific defines */ + +/* ------------------------------------------------------------------------*/ +/* Microsoft C defines _MSC_VER */ +#ifdef _MSC_VER + +/* We want COMPILER to expand to a string containing _MSC_VER's *value*. + * This is horridly tricky, because the stringization operator only works + * on macro arguments, and doesn't evaluate macros passed *as* arguments. + * Attempts simpler than the following appear doomed to produce "_MSC_VER" + * literally in the string. + */ +#define _Py_PASTE_VERSION(SUFFIX) \ + ("[MSC v." _Py_STRINGIZE(_MSC_VER) " " SUFFIX "]") +/* e.g., this produces, after compile-time string catenation, + * ("[MSC v.1200 32 bit (Intel)]") + * + * _Py_STRINGIZE(_MSC_VER) expands to + * _Py_STRINGIZE1((_MSC_VER)) expands to + * _Py_STRINGIZE2(_MSC_VER) but as this call is the result of token-pasting + * it's scanned again for macros and so further expands to (under MSVC 6) + * _Py_STRINGIZE2(1200) which then expands to + * "1200" + */ +#define _Py_STRINGIZE(X) _Py_STRINGIZE1((X)) +#define _Py_STRINGIZE1(X) _Py_STRINGIZE2 ## X +#define _Py_STRINGIZE2(X) #X + +/* MSVC defines _WINxx to differentiate the windows platform types + + Note that for compatibility reasons _WIN32 is defined on Win32 + *and* on Win64. For the same reasons, in Python, MS_WIN32 is + defined on Win32 *and* Win64. Win32 only code must therefore be + guarded as follows: + #if defined(MS_WIN32) && !defined(MS_WIN64) +*/ +#ifdef _WIN64 +#define MS_WIN64 +#endif + +/* set the COMPILER */ +#ifdef MS_WIN64 +#if defined(_M_X64) || defined(_M_AMD64) +#if defined(__INTEL_COMPILER) +#define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 64 bit (amd64) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]") +#else +#define COMPILER _Py_PASTE_VERSION("64 bit (AMD64)") +#endif /* __INTEL_COMPILER */ +#define PYD_PLATFORM_TAG "win_amd64" +#else +#define COMPILER _Py_PASTE_VERSION("64 bit (Unknown)") +#endif +#endif /* MS_WIN64 */ + +/* set the version macros for the windows headers */ +/* Python 3.5+ requires Windows Vista or greater */ +#define Py_WINVER 0x0600 /* _WIN32_WINNT_VISTA */ +#define Py_NTDDI NTDDI_VISTA + +/* We only set these values when building Python - we don't want to force + these values on extensions, as that will affect the prototypes and + structures exposed in the Windows headers. Even when building Python, we + allow a single source file to override this - they may need access to + structures etc so it can optionally use new Windows features if it + determines at runtime they are available. +*/ +#if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_BUILTIN) || defined(Py_BUILD_CORE_MODULE) +#ifndef NTDDI_VERSION +#define NTDDI_VERSION Py_NTDDI +#endif +#ifndef WINVER +#define WINVER Py_WINVER +#endif +#ifndef _WIN32_WINNT +#define _WIN32_WINNT Py_WINVER +#endif +#endif + +/* _W64 is not defined for VC6 or eVC4 */ +#ifndef _W64 +#define _W64 +#endif + +/* Define like size_t, omitting the "unsigned" */ +#ifdef MS_WIN64 +typedef __int64 ssize_t; +#else +typedef _W64 int ssize_t; +#endif +#define HAVE_SSIZE_T 1 + +#if defined(MS_WIN32) && !defined(MS_WIN64) +#if defined(_M_IX86) +#if defined(__INTEL_COMPILER) +#define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 32 bit (Intel) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]") +#else +#define COMPILER _Py_PASTE_VERSION("32 bit (Intel)") +#endif /* __INTEL_COMPILER */ +#define PYD_PLATFORM_TAG "win32" +#elif defined(_M_ARM) +#define COMPILER _Py_PASTE_VERSION("32 bit (ARM)") +#define PYD_PLATFORM_TAG "win_arm" +#else +#define COMPILER _Py_PASTE_VERSION("32 bit (Unknown)") +#endif +#endif /* MS_WIN32 && !MS_WIN64 */ + +typedef int pid_t; + +#include +#define Py_IS_NAN _isnan +#define Py_IS_INFINITY(X) (!_finite(X) && !_isnan(X)) +#define Py_IS_FINITE(X) _finite(X) +#define copysign _copysign + +/* Side by Side assemblies supported in VS 2005 and VS 2008 but not 2010*/ +#if _MSC_VER >= 1400 && _MSC_VER < 1600 +#define HAVE_SXS 1 +#endif + +/* define some ANSI types that are not defined in earlier Win headers */ +#if _MSC_VER >= 1200 +/* This file only exists in VC 6.0 or higher */ +#include +#endif + +#endif /* _MSC_VER */ + +/* ------------------------------------------------------------------------*/ +/* egcs/gnu-win32 defines __GNUC__ and _WIN32 */ +#if defined(__GNUC__) && defined(_WIN32) +/* XXX These defines are likely incomplete, but should be easy to fix. + They should be complete enough to build extension modules. */ +/* Suggested by Rene Liebscher to avoid a GCC 2.91.* + bug that requires structure imports. More recent versions of the + compiler don't exhibit this bug. +*/ +#if (__GNUC__==2) && (__GNUC_MINOR__<=91) +#warning "Please use an up-to-date version of gcc! (>2.91 recommended)" +#endif + +#define COMPILER "[gcc]" +#define PY_LONG_LONG long long +#define PY_LLONG_MIN LLONG_MIN +#define PY_LLONG_MAX LLONG_MAX +#define PY_ULLONG_MAX ULLONG_MAX +#endif /* GNUC */ + +/* ------------------------------------------------------------------------*/ +/* lcc-win32 defines __LCC__ */ +#if defined(__LCC__) +/* XXX These defines are likely incomplete, but should be easy to fix. + They should be complete enough to build extension modules. */ + +#define COMPILER "[lcc-win32]" +typedef int pid_t; +/* __declspec() is supported here too - do nothing to get the defaults */ + +#endif /* LCC */ + +/* ------------------------------------------------------------------------*/ +/* End of compilers - finish up */ + +#ifndef NO_STDIO_H +# include +#endif + +/* 64 bit ints are usually spelt __int64 unless compiler has overridden */ +#ifndef PY_LONG_LONG +# define PY_LONG_LONG __int64 +# define PY_LLONG_MAX _I64_MAX +# define PY_LLONG_MIN _I64_MIN +# define PY_ULLONG_MAX _UI64_MAX +#endif + +/* For Windows the Python core is in a DLL by default. Test +Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ +#if !defined(MS_NO_COREDLL) && !defined(Py_NO_ENABLE_SHARED) +# define Py_ENABLE_SHARED 1 /* standard symbol for shared library */ +# define MS_COREDLL /* deprecated old symbol */ +#endif /* !MS_NO_COREDLL && ... */ + +/* All windows compilers that use this header support __declspec */ +#define HAVE_DECLSPEC_DLL + +/* For an MSVC DLL, we can nominate the .lib files used by extensions */ +#ifdef MS_COREDLL +# if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) + /* not building the core - must be an ext */ +# if defined(_MSC_VER) + /* So MSVC users need not specify the .lib + file in their Makefile (other compilers are + generally taken care of by distutils.) */ +# if defined(_DEBUG) +# pragma comment(lib,"python37_d.lib") +# elif defined(Py_LIMITED_API) +# pragma comment(lib,"python3.lib") +# else +# pragma comment(lib,"python37.lib") +# endif /* _DEBUG */ +# endif /* _MSC_VER */ +# endif /* Py_BUILD_CORE */ +#endif /* MS_COREDLL */ + +#if defined(MS_WIN64) +/* maintain "win32" sys.platform for backward compatibility of Python code, + the Win64 API should be close enough to the Win32 API to make this + preferable */ +# define PLATFORM "win32" +# define SIZEOF_VOID_P 8 +# define SIZEOF_TIME_T 8 +# define SIZEOF_OFF_T 4 +# define SIZEOF_FPOS_T 8 +# define SIZEOF_HKEY 8 +# define SIZEOF_SIZE_T 8 +/* configure.ac defines HAVE_LARGEFILE_SUPPORT iff HAVE_LONG_LONG, + sizeof(off_t) > sizeof(long), and sizeof(PY_LONG_LONG) >= sizeof(off_t). + On Win64 the second condition is not true, but if fpos_t replaces off_t + then this is true. The uses of HAVE_LARGEFILE_SUPPORT imply that Win64 + should define this. */ +# define HAVE_LARGEFILE_SUPPORT +#elif defined(MS_WIN32) +# define PLATFORM "win32" +# define HAVE_LARGEFILE_SUPPORT +# define SIZEOF_VOID_P 4 +# define SIZEOF_OFF_T 4 +# define SIZEOF_FPOS_T 8 +# define SIZEOF_HKEY 4 +# define SIZEOF_SIZE_T 4 + /* MS VS2005 changes time_t to a 64-bit type on all platforms */ +# if defined(_MSC_VER) && _MSC_VER >= 1400 +# define SIZEOF_TIME_T 8 +# else +# define SIZEOF_TIME_T 4 +# endif +#endif + +#ifdef _DEBUG +# define Py_DEBUG +#endif + + +#ifdef MS_WIN32 + +#define SIZEOF_SHORT 2 +#define SIZEOF_INT 4 +#define SIZEOF_LONG 4 +#define SIZEOF_LONG_LONG 8 +#define SIZEOF_DOUBLE 8 +#define SIZEOF_FLOAT 4 + +/* VC 7.1 has them and VC 6.0 does not. VC 6.0 has a version number of 1200. + Microsoft eMbedded Visual C++ 4.0 has a version number of 1201 and doesn't + define these. + If some compiler does not provide them, modify the #if appropriately. */ +#if defined(_MSC_VER) +#if _MSC_VER > 1300 +#define HAVE_UINTPTR_T 1 +#define HAVE_INTPTR_T 1 +#else +/* VC6, VS 2002 and eVC4 don't support the C99 LL suffix for 64-bit integer literals */ +#define Py_LL(x) x##I64 +#endif /* _MSC_VER > 1300 */ +#endif /* _MSC_VER */ + +#endif + +/* define signed and unsigned exact-width 32-bit and 64-bit types, used in the + implementation of Python integers. */ +#define PY_UINT32_T uint32_t +#define PY_UINT64_T uint64_t +#define PY_INT32_T int32_t +#define PY_INT64_T int64_t + +/* Fairly standard from here! */ + +/* Define to 1 if you have the `copysign' function. */ +#define HAVE_COPYSIGN 1 + +/* Define to 1 if you have the `round' function. */ +#if _MSC_VER >= 1800 +#define HAVE_ROUND 1 +#endif + +/* Define to 1 if you have the `isinf' macro. */ +#define HAVE_DECL_ISINF 1 + +/* Define to 1 if you have the `isnan' function. */ +#define HAVE_DECL_ISNAN 1 + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* #undef _ALL_SOURCE */ +#endif + +/* Define to empty if the keyword does not work. */ +/* #define const */ + +/* Define to 1 if you have the header file. */ +#define HAVE_CONIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_DIRECT_H 1 + +/* Define if you have dirent.h. */ +/* #define DIRENT 1 */ + +/* Define to the type of elements in the array set by `getgroups'. + Usually this is either `int' or `gid_t'. */ +/* #undef GETGROUPS_T */ + +/* Define to `int' if doesn't define. */ +/* #undef gid_t */ + +/* Define if your struct tm has tm_zone. */ +/* #undef HAVE_TM_ZONE */ + +/* Define if you don't have tm_zone but do have the external array + tzname. */ +#define HAVE_TZNAME + +/* Define to `int' if doesn't define. */ +/* #undef mode_t */ + +/* Define if you don't have dirent.h, but have ndir.h. */ +/* #undef NDIR */ + +/* Define to `long' if doesn't define. */ +/* #undef off_t */ + +/* Define to `int' if doesn't define. */ +/* #undef pid_t */ + +/* Define if the system does not provide POSIX.1 features except + with this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define if you need to in order for stat and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define as the return type of signal handlers (int or void). */ +#define RETSIGTYPE void + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if you don't have dirent.h, but have sys/dir.h. */ +/* #undef SYSDIR */ + +/* Define if you don't have dirent.h, but have sys/ndir.h. */ +/* #undef SYSNDIR */ + +/* Define if you can safely include both and . */ +/* #undef TIME_WITH_SYS_TIME */ + +/* Define if your declares struct tm. */ +/* #define TM_IN_SYS_TIME 1 */ + +/* Define to `int' if doesn't define. */ +/* #undef uid_t */ + +/* Define if the closedir function returns void instead of int. */ +/* #undef VOID_CLOSEDIR */ + +/* Define if getpgrp() must be called as getpgrp(0) + and (consequently) setpgrp() as setpgrp(0, 0). */ +/* #undef GETPGRP_HAVE_ARGS */ + +/* Define this if your time.h defines altzone */ +/* #define HAVE_ALTZONE */ + +/* Define if you have the putenv function. */ +#define HAVE_PUTENV + +/* Define if your compiler supports function prototypes */ +#define HAVE_PROTOTYPES + +/* Define if you can safely include both and + (which you can't on SCO ODT 3.0). */ +/* #undef SYS_SELECT_WITH_SYS_TIME */ + +/* Define if you want documentation strings in extension modules */ +#define WITH_DOC_STRINGS 1 + +/* Define if you want to compile in rudimentary thread support */ +/* #undef WITH_THREAD */ + +/* Define if you want to use the GNU readline library */ +/* #define WITH_READLINE 1 */ + +/* Use Python's own small-block memory-allocator. */ +#define WITH_PYMALLOC 1 + +/* Define if you have clock. */ +/* #define HAVE_CLOCK */ + +/* Define when any dynamic module loading is enabled */ +#define HAVE_DYNAMIC_LOADING + +/* Define if you have ftime. */ +#define HAVE_FTIME + +/* Define if you have getpeername. */ +#define HAVE_GETPEERNAME + +/* Define if you have getpgrp. */ +/* #undef HAVE_GETPGRP */ + +/* Define if you have getpid. */ +#define HAVE_GETPID + +/* Define if you have gettimeofday. */ +/* #undef HAVE_GETTIMEOFDAY */ + +/* Define if you have getwd. */ +/* #undef HAVE_GETWD */ + +/* Define if you have lstat. */ +/* #undef HAVE_LSTAT */ + +/* Define if you have the mktime function. */ +#define HAVE_MKTIME + +/* Define if you have nice. */ +/* #undef HAVE_NICE */ + +/* Define if you have readlink. */ +/* #undef HAVE_READLINK */ + +/* Define if you have setpgid. */ +/* #undef HAVE_SETPGID */ + +/* Define if you have setpgrp. */ +/* #undef HAVE_SETPGRP */ + +/* Define if you have setsid. */ +/* #undef HAVE_SETSID */ + +/* Define if you have setvbuf. */ +#define HAVE_SETVBUF + +/* Define if you have siginterrupt. */ +/* #undef HAVE_SIGINTERRUPT */ + +/* Define if you have symlink. */ +/* #undef HAVE_SYMLINK */ + +/* Define if you have tcgetpgrp. */ +/* #undef HAVE_TCGETPGRP */ + +/* Define if you have tcsetpgrp. */ +/* #undef HAVE_TCSETPGRP */ + +/* Define if you have times. */ +/* #undef HAVE_TIMES */ + +/* Define if you have uname. */ +/* #undef HAVE_UNAME */ + +/* Define if you have waitpid. */ +/* #undef HAVE_WAITPID */ + +/* Define to 1 if you have the `wcsftime' function. */ +#if defined(_MSC_VER) && _MSC_VER >= 1310 +#define HAVE_WCSFTIME 1 +#endif + +/* Define to 1 if you have the `wcscoll' function. */ +#define HAVE_WCSCOLL 1 + +/* Define to 1 if you have the `wcsxfrm' function. */ +#define HAVE_WCSXFRM 1 + +/* Define if the zlib library has inflateCopy */ +#define HAVE_ZLIB_COPY 1 + +/* Define if you have the header file. */ +/* #undef HAVE_DLFCN_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_ERRNO_H 1 + +/* Define if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_PROCESS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SIGNAL_H 1 + +/* Define if you have the prototypes. */ +#define HAVE_STDARG_PROTOTYPES + +/* Define if you have the header file. */ +#define HAVE_STDDEF_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_AUDIOIO_H */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_PARAM_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_SELECT_H 1 */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define if you have the header file. */ +/* #define HAVE_SYS_TIME_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_TIMES_H 1 */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define if you have the header file. */ +/* #define HAVE_SYS_UN_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_UTIME_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_UTSNAME_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_UNISTD_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_UTIME_H 1 */ + +/* Define if the compiler provides a wchar.h header file. */ +#define HAVE_WCHAR_H 1 + +/* The size of `wchar_t', as computed by sizeof. */ +#define SIZEOF_WCHAR_T 2 + +/* The size of `_Bool', as computed by sizeof. */ +#define SIZEOF__BOOL 1 + +/* The size of `pid_t', as computed by sizeof. */ +#define SIZEOF_PID_T SIZEOF_INT + +/* Define if you have the dl library (-ldl). */ +/* #undef HAVE_LIBDL */ + +/* Define if you have the mpc library (-lmpc). */ +/* #undef HAVE_LIBMPC */ + +/* Define if you have the nsl library (-lnsl). */ +#define HAVE_LIBNSL 1 + +/* Define if you have the seq library (-lseq). */ +/* #undef HAVE_LIBSEQ */ + +/* Define if you have the socket library (-lsocket). */ +#define HAVE_LIBSOCKET 1 + +/* Define if you have the sun library (-lsun). */ +/* #undef HAVE_LIBSUN */ + +/* Define if you have the termcap library (-ltermcap). */ +/* #undef HAVE_LIBTERMCAP */ + +/* Define if you have the termlib library (-ltermlib). */ +/* #undef HAVE_LIBTERMLIB */ + +/* Define if you have the thread library (-lthread). */ +/* #undef HAVE_LIBTHREAD */ + +/* WinSock does not use a bitmask in select, and uses + socket handles greater than FD_SETSIZE */ +#define Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE + +/* Define if C doubles are 64-bit IEEE 754 binary format, stored with the + least significant byte first */ +#define DOUBLE_IS_LITTLE_ENDIAN_IEEE754 1 + +/* Define to 1 if you have the `erf' function. */ +#define HAVE_ERF 1 + +/* Define to 1 if you have the `erfc' function. */ +#define HAVE_ERFC 1 + +/* Define if you have the 'inet_pton' function. */ +#define HAVE_INET_PTON 1 + +/* framework name */ +#define _PYTHONFRAMEWORK "" + +/* Define if libssl has X509_VERIFY_PARAM_set1_host and related function */ +#define HAVE_X509_VERIFY_PARAM_SET1_HOST 1 + +#endif /* !Py_CONFIG_H */ diff --git a/my_env/Include/pyctype.h b/my_env/Include/pyctype.h new file mode 100644 index 000000000..6bce63eeb --- /dev/null +++ b/my_env/Include/pyctype.h @@ -0,0 +1,33 @@ +#ifndef Py_LIMITED_API +#ifndef PYCTYPE_H +#define PYCTYPE_H + +#define PY_CTF_LOWER 0x01 +#define PY_CTF_UPPER 0x02 +#define PY_CTF_ALPHA (PY_CTF_LOWER|PY_CTF_UPPER) +#define PY_CTF_DIGIT 0x04 +#define PY_CTF_ALNUM (PY_CTF_ALPHA|PY_CTF_DIGIT) +#define PY_CTF_SPACE 0x08 +#define PY_CTF_XDIGIT 0x10 + +PyAPI_DATA(const unsigned int) _Py_ctype_table[256]; + +/* Unlike their C counterparts, the following macros are not meant to + * handle an int with any of the values [EOF, 0-UCHAR_MAX]. The argument + * must be a signed/unsigned char. */ +#define Py_ISLOWER(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_LOWER) +#define Py_ISUPPER(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_UPPER) +#define Py_ISALPHA(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALPHA) +#define Py_ISDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT) +#define Py_ISXDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_XDIGIT) +#define Py_ISALNUM(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM) +#define Py_ISSPACE(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE) + +PyAPI_DATA(const unsigned char) _Py_ctype_tolower[256]; +PyAPI_DATA(const unsigned char) _Py_ctype_toupper[256]; + +#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)]) +#define Py_TOUPPER(c) (_Py_ctype_toupper[Py_CHARMASK(c)]) + +#endif /* !PYCTYPE_H */ +#endif /* !Py_LIMITED_API */ diff --git a/my_env/Include/pydebug.h b/my_env/Include/pydebug.h new file mode 100644 index 000000000..bd4aafe3b --- /dev/null +++ b/my_env/Include/pydebug.h @@ -0,0 +1,40 @@ +#ifndef Py_LIMITED_API +#ifndef Py_PYDEBUG_H +#define Py_PYDEBUG_H +#ifdef __cplusplus +extern "C" { +#endif + +/* These global variable are defined in pylifecycle.c */ +/* XXX (ncoghlan): move these declarations to pylifecycle.h? */ +PyAPI_DATA(int) Py_DebugFlag; +PyAPI_DATA(int) Py_VerboseFlag; +PyAPI_DATA(int) Py_QuietFlag; +PyAPI_DATA(int) Py_InteractiveFlag; +PyAPI_DATA(int) Py_InspectFlag; +PyAPI_DATA(int) Py_OptimizeFlag; +PyAPI_DATA(int) Py_NoSiteFlag; +PyAPI_DATA(int) Py_BytesWarningFlag; +PyAPI_DATA(int) Py_FrozenFlag; +PyAPI_DATA(int) Py_IgnoreEnvironmentFlag; +PyAPI_DATA(int) Py_DontWriteBytecodeFlag; +PyAPI_DATA(int) Py_NoUserSiteDirectory; +PyAPI_DATA(int) Py_UnbufferedStdioFlag; +PyAPI_DATA(int) Py_HashRandomizationFlag; +PyAPI_DATA(int) Py_IsolatedFlag; + +#ifdef MS_WINDOWS +PyAPI_DATA(int) Py_LegacyWindowsFSEncodingFlag; +PyAPI_DATA(int) Py_LegacyWindowsStdioFlag; +#endif + +/* this is a wrapper around getenv() that pays attention to + Py_IgnoreEnvironmentFlag. It should be used for getting variables like + PYTHONPATH and PYTHONHOME from the environment */ +#define Py_GETENV(s) (Py_IgnoreEnvironmentFlag ? NULL : getenv(s)) + +#ifdef __cplusplus +} +#endif +#endif /* !Py_PYDEBUG_H */ +#endif /* Py_LIMITED_API */ diff --git a/my_env/Include/pydtrace.h b/my_env/Include/pydtrace.h new file mode 100644 index 000000000..7a0427816 --- /dev/null +++ b/my_env/Include/pydtrace.h @@ -0,0 +1,57 @@ +/* Static DTrace probes interface */ + +#ifndef Py_DTRACE_H +#define Py_DTRACE_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef WITH_DTRACE + +#include "pydtrace_probes.h" + +/* pydtrace_probes.h, on systems with DTrace, is auto-generated to include + `PyDTrace_{PROBE}` and `PyDTrace_{PROBE}_ENABLED()` macros for every probe + defined in pydtrace_provider.d. + + Calling these functions must be guarded by a `PyDTrace_{PROBE}_ENABLED()` + check to minimize performance impact when probing is off. For example: + + if (PyDTrace_FUNCTION_ENTRY_ENABLED()) + PyDTrace_FUNCTION_ENTRY(f); +*/ + +#else + +/* Without DTrace, compile to nothing. */ + +static inline void PyDTrace_LINE(const char *arg0, const char *arg1, int arg2) {} +static inline void PyDTrace_FUNCTION_ENTRY(const char *arg0, const char *arg1, int arg2) {} +static inline void PyDTrace_FUNCTION_RETURN(const char *arg0, const char *arg1, int arg2) {} +static inline void PyDTrace_GC_START(int arg0) {} +static inline void PyDTrace_GC_DONE(Py_ssize_t arg0) {} +static inline void PyDTrace_INSTANCE_NEW_START(int arg0) {} +static inline void PyDTrace_INSTANCE_NEW_DONE(int arg0) {} +static inline void PyDTrace_INSTANCE_DELETE_START(int arg0) {} +static inline void PyDTrace_INSTANCE_DELETE_DONE(int arg0) {} +static inline void PyDTrace_IMPORT_FIND_LOAD_START(const char *arg0) {} +static inline void PyDTrace_IMPORT_FIND_LOAD_DONE(const char *arg0, int arg1) {} + +static inline int PyDTrace_LINE_ENABLED(void) { return 0; } +static inline int PyDTrace_FUNCTION_ENTRY_ENABLED(void) { return 0; } +static inline int PyDTrace_FUNCTION_RETURN_ENABLED(void) { return 0; } +static inline int PyDTrace_GC_START_ENABLED(void) { return 0; } +static inline int PyDTrace_GC_DONE_ENABLED(void) { return 0; } +static inline int PyDTrace_INSTANCE_NEW_START_ENABLED(void) { return 0; } +static inline int PyDTrace_INSTANCE_NEW_DONE_ENABLED(void) { return 0; } +static inline int PyDTrace_INSTANCE_DELETE_START_ENABLED(void) { return 0; } +static inline int PyDTrace_INSTANCE_DELETE_DONE_ENABLED(void) { return 0; } +static inline int PyDTrace_IMPORT_FIND_LOAD_START_ENABLED(void) { return 0; } +static inline int PyDTrace_IMPORT_FIND_LOAD_DONE_ENABLED(void) { return 0; } + +#endif /* !WITH_DTRACE */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_DTRACE_H */ diff --git a/my_env/Include/pyerrors.h b/my_env/Include/pyerrors.h new file mode 100644 index 000000000..f49d4e8bd --- /dev/null +++ b/my_env/Include/pyerrors.h @@ -0,0 +1,504 @@ +#ifndef Py_ERRORS_H +#define Py_ERRORS_H +#ifdef __cplusplus +extern "C" { +#endif + +/* Error objects */ + +#ifndef Py_LIMITED_API +/* PyException_HEAD defines the initial segment of every exception class. */ +#define PyException_HEAD PyObject_HEAD PyObject *dict;\ + PyObject *args; PyObject *traceback;\ + PyObject *context; PyObject *cause;\ + char suppress_context; + +typedef struct { + PyException_HEAD +} PyBaseExceptionObject; + +typedef struct { + PyException_HEAD + PyObject *msg; + PyObject *filename; + PyObject *lineno; + PyObject *offset; + PyObject *text; + PyObject *print_file_and_line; +} PySyntaxErrorObject; + +typedef struct { + PyException_HEAD + PyObject *msg; + PyObject *name; + PyObject *path; +} PyImportErrorObject; + +typedef struct { + PyException_HEAD + PyObject *encoding; + PyObject *object; + Py_ssize_t start; + Py_ssize_t end; + PyObject *reason; +} PyUnicodeErrorObject; + +typedef struct { + PyException_HEAD + PyObject *code; +} PySystemExitObject; + +typedef struct { + PyException_HEAD + PyObject *myerrno; + PyObject *strerror; + PyObject *filename; + PyObject *filename2; +#ifdef MS_WINDOWS + PyObject *winerror; +#endif + Py_ssize_t written; /* only for BlockingIOError, -1 otherwise */ +} PyOSErrorObject; + +typedef struct { + PyException_HEAD + PyObject *value; +} PyStopIterationObject; + +/* Compatibility typedefs */ +typedef PyOSErrorObject PyEnvironmentErrorObject; +#ifdef MS_WINDOWS +typedef PyOSErrorObject PyWindowsErrorObject; +#endif +#endif /* !Py_LIMITED_API */ + +/* Error handling definitions */ + +PyAPI_FUNC(void) PyErr_SetNone(PyObject *); +PyAPI_FUNC(void) PyErr_SetObject(PyObject *, PyObject *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *); +_PyErr_StackItem *_PyErr_GetTopmostException(PyThreadState *tstate); +#endif +PyAPI_FUNC(void) PyErr_SetString( + PyObject *exception, + const char *string /* decoded from utf-8 */ + ); +PyAPI_FUNC(PyObject *) PyErr_Occurred(void); +PyAPI_FUNC(void) PyErr_Clear(void); +PyAPI_FUNC(void) PyErr_Fetch(PyObject **, PyObject **, PyObject **); +PyAPI_FUNC(void) PyErr_Restore(PyObject *, PyObject *, PyObject *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(void) PyErr_GetExcInfo(PyObject **, PyObject **, PyObject **); +PyAPI_FUNC(void) PyErr_SetExcInfo(PyObject *, PyObject *, PyObject *); +#endif + +#if defined(__clang__) || \ + (defined(__GNUC__) && \ + ((__GNUC__ >= 3) || \ + (__GNUC__ == 2) && (__GNUC_MINOR__ >= 5))) +#define _Py_NO_RETURN __attribute__((__noreturn__)) +#else +#define _Py_NO_RETURN +#endif + +/* Defined in Python/pylifecycle.c */ +PyAPI_FUNC(void) Py_FatalError(const char *message) _Py_NO_RETURN; + +#if defined(Py_DEBUG) || defined(Py_LIMITED_API) +#define _PyErr_OCCURRED() PyErr_Occurred() +#else +#define _PyErr_OCCURRED() (PyThreadState_GET()->curexc_type) +#endif + +/* Error testing and normalization */ +PyAPI_FUNC(int) PyErr_GivenExceptionMatches(PyObject *, PyObject *); +PyAPI_FUNC(int) PyErr_ExceptionMatches(PyObject *); +PyAPI_FUNC(void) PyErr_NormalizeException(PyObject**, PyObject**, PyObject**); + +/* Traceback manipulation (PEP 3134) */ +PyAPI_FUNC(int) PyException_SetTraceback(PyObject *, PyObject *); +PyAPI_FUNC(PyObject *) PyException_GetTraceback(PyObject *); + +/* Cause manipulation (PEP 3134) */ +PyAPI_FUNC(PyObject *) PyException_GetCause(PyObject *); +PyAPI_FUNC(void) PyException_SetCause(PyObject *, PyObject *); + +/* Context manipulation (PEP 3134) */ +PyAPI_FUNC(PyObject *) PyException_GetContext(PyObject *); +PyAPI_FUNC(void) PyException_SetContext(PyObject *, PyObject *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *); +#endif + +/* */ + +#define PyExceptionClass_Check(x) \ + (PyType_Check((x)) && \ + PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)) + +#define PyExceptionInstance_Check(x) \ + PyType_FastSubclass((x)->ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS) + +#define PyExceptionClass_Name(x) \ + ((char *)(((PyTypeObject*)(x))->tp_name)) + +#define PyExceptionInstance_Class(x) ((PyObject*)((x)->ob_type)) + + +/* Predefined exceptions */ + +PyAPI_DATA(PyObject *) PyExc_BaseException; +PyAPI_DATA(PyObject *) PyExc_Exception; +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +PyAPI_DATA(PyObject *) PyExc_StopAsyncIteration; +#endif +PyAPI_DATA(PyObject *) PyExc_StopIteration; +PyAPI_DATA(PyObject *) PyExc_GeneratorExit; +PyAPI_DATA(PyObject *) PyExc_ArithmeticError; +PyAPI_DATA(PyObject *) PyExc_LookupError; + +PyAPI_DATA(PyObject *) PyExc_AssertionError; +PyAPI_DATA(PyObject *) PyExc_AttributeError; +PyAPI_DATA(PyObject *) PyExc_BufferError; +PyAPI_DATA(PyObject *) PyExc_EOFError; +PyAPI_DATA(PyObject *) PyExc_FloatingPointError; +PyAPI_DATA(PyObject *) PyExc_OSError; +PyAPI_DATA(PyObject *) PyExc_ImportError; +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 +PyAPI_DATA(PyObject *) PyExc_ModuleNotFoundError; +#endif +PyAPI_DATA(PyObject *) PyExc_IndexError; +PyAPI_DATA(PyObject *) PyExc_KeyError; +PyAPI_DATA(PyObject *) PyExc_KeyboardInterrupt; +PyAPI_DATA(PyObject *) PyExc_MemoryError; +PyAPI_DATA(PyObject *) PyExc_NameError; +PyAPI_DATA(PyObject *) PyExc_OverflowError; +PyAPI_DATA(PyObject *) PyExc_RuntimeError; +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +PyAPI_DATA(PyObject *) PyExc_RecursionError; +#endif +PyAPI_DATA(PyObject *) PyExc_NotImplementedError; +PyAPI_DATA(PyObject *) PyExc_SyntaxError; +PyAPI_DATA(PyObject *) PyExc_IndentationError; +PyAPI_DATA(PyObject *) PyExc_TabError; +PyAPI_DATA(PyObject *) PyExc_ReferenceError; +PyAPI_DATA(PyObject *) PyExc_SystemError; +PyAPI_DATA(PyObject *) PyExc_SystemExit; +PyAPI_DATA(PyObject *) PyExc_TypeError; +PyAPI_DATA(PyObject *) PyExc_UnboundLocalError; +PyAPI_DATA(PyObject *) PyExc_UnicodeError; +PyAPI_DATA(PyObject *) PyExc_UnicodeEncodeError; +PyAPI_DATA(PyObject *) PyExc_UnicodeDecodeError; +PyAPI_DATA(PyObject *) PyExc_UnicodeTranslateError; +PyAPI_DATA(PyObject *) PyExc_ValueError; +PyAPI_DATA(PyObject *) PyExc_ZeroDivisionError; + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_DATA(PyObject *) PyExc_BlockingIOError; +PyAPI_DATA(PyObject *) PyExc_BrokenPipeError; +PyAPI_DATA(PyObject *) PyExc_ChildProcessError; +PyAPI_DATA(PyObject *) PyExc_ConnectionError; +PyAPI_DATA(PyObject *) PyExc_ConnectionAbortedError; +PyAPI_DATA(PyObject *) PyExc_ConnectionRefusedError; +PyAPI_DATA(PyObject *) PyExc_ConnectionResetError; +PyAPI_DATA(PyObject *) PyExc_FileExistsError; +PyAPI_DATA(PyObject *) PyExc_FileNotFoundError; +PyAPI_DATA(PyObject *) PyExc_InterruptedError; +PyAPI_DATA(PyObject *) PyExc_IsADirectoryError; +PyAPI_DATA(PyObject *) PyExc_NotADirectoryError; +PyAPI_DATA(PyObject *) PyExc_PermissionError; +PyAPI_DATA(PyObject *) PyExc_ProcessLookupError; +PyAPI_DATA(PyObject *) PyExc_TimeoutError; +#endif + + +/* Compatibility aliases */ +PyAPI_DATA(PyObject *) PyExc_EnvironmentError; +PyAPI_DATA(PyObject *) PyExc_IOError; +#ifdef MS_WINDOWS +PyAPI_DATA(PyObject *) PyExc_WindowsError; +#endif + +/* Predefined warning categories */ +PyAPI_DATA(PyObject *) PyExc_Warning; +PyAPI_DATA(PyObject *) PyExc_UserWarning; +PyAPI_DATA(PyObject *) PyExc_DeprecationWarning; +PyAPI_DATA(PyObject *) PyExc_PendingDeprecationWarning; +PyAPI_DATA(PyObject *) PyExc_SyntaxWarning; +PyAPI_DATA(PyObject *) PyExc_RuntimeWarning; +PyAPI_DATA(PyObject *) PyExc_FutureWarning; +PyAPI_DATA(PyObject *) PyExc_ImportWarning; +PyAPI_DATA(PyObject *) PyExc_UnicodeWarning; +PyAPI_DATA(PyObject *) PyExc_BytesWarning; +PyAPI_DATA(PyObject *) PyExc_ResourceWarning; + + +/* Convenience functions */ + +PyAPI_FUNC(int) PyErr_BadArgument(void); +PyAPI_FUNC(PyObject *) PyErr_NoMemory(void); +PyAPI_FUNC(PyObject *) PyErr_SetFromErrno(PyObject *); +PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObject( + PyObject *, PyObject *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000 +PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObjects( + PyObject *, PyObject *, PyObject *); +#endif +PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilename( + PyObject *exc, + const char *filename /* decoded from the filesystem encoding */ + ); +#if defined(MS_WINDOWS) && !defined(Py_LIMITED_API) +PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilename( + PyObject *, const Py_UNICODE *) Py_DEPRECATED(3.3); +#endif /* MS_WINDOWS */ + +PyAPI_FUNC(PyObject *) PyErr_Format( + PyObject *exception, + const char *format, /* ASCII-encoded string */ + ... + ); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +PyAPI_FUNC(PyObject *) PyErr_FormatV( + PyObject *exception, + const char *format, + va_list vargs); +#endif + +#ifndef Py_LIMITED_API +/* Like PyErr_Format(), but saves current exception as __context__ and + __cause__. + */ +PyAPI_FUNC(PyObject *) _PyErr_FormatFromCause( + PyObject *exception, + const char *format, /* ASCII-encoded string */ + ... + ); +#endif + +#ifdef MS_WINDOWS +PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename( + int ierr, + const char *filename /* decoded from the filesystem encoding */ + ); +#ifndef Py_LIMITED_API +/* XXX redeclare to use WSTRING */ +PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilename( + int, const Py_UNICODE *) Py_DEPRECATED(3.3); +#endif +PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErr(int); +PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject( + PyObject *,int, PyObject *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000 +PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObjects( + PyObject *,int, PyObject *, PyObject *); +#endif +PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilename( + PyObject *exc, + int ierr, + const char *filename /* decoded from the filesystem encoding */ + ); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename( + PyObject *,int, const Py_UNICODE *) Py_DEPRECATED(3.3); +#endif +PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErr(PyObject *, int); +#endif /* MS_WINDOWS */ + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 +PyAPI_FUNC(PyObject *) PyErr_SetImportErrorSubclass(PyObject *, PyObject *, + PyObject *, PyObject *); +#endif +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(PyObject *) PyErr_SetImportError(PyObject *, PyObject *, + PyObject *); +#endif + +/* Export the old function so that the existing API remains available: */ +PyAPI_FUNC(void) PyErr_BadInternalCall(void); +PyAPI_FUNC(void) _PyErr_BadInternalCall(const char *filename, int lineno); +/* Mask the old API with a call to the new API for code compiled under + Python 2.0: */ +#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__) + +/* Function to create a new exception */ +PyAPI_FUNC(PyObject *) PyErr_NewException( + const char *name, PyObject *base, PyObject *dict); +PyAPI_FUNC(PyObject *) PyErr_NewExceptionWithDoc( + const char *name, const char *doc, PyObject *base, PyObject *dict); +PyAPI_FUNC(void) PyErr_WriteUnraisable(PyObject *); + +/* In exceptions.c */ +#ifndef Py_LIMITED_API +/* Helper that attempts to replace the current exception with one of the + * same type but with a prefix added to the exception text. The resulting + * exception description looks like: + * + * prefix (exc_type: original_exc_str) + * + * Only some exceptions can be safely replaced. If the function determines + * it isn't safe to perform the replacement, it will leave the original + * unmodified exception in place. + * + * Returns a borrowed reference to the new exception (if any), NULL if the + * existing exception was left in place. + */ +PyAPI_FUNC(PyObject *) _PyErr_TrySetFromCause( + const char *prefix_format, /* ASCII-encoded string */ + ... + ); +#endif + + +/* In signalmodule.c */ +PyAPI_FUNC(int) PyErr_CheckSignals(void); +PyAPI_FUNC(void) PyErr_SetInterrupt(void); + +/* In signalmodule.c */ +#ifndef Py_LIMITED_API +int PySignal_SetWakeupFd(int fd); +#endif + +/* Support for adding program text to SyntaxErrors */ +PyAPI_FUNC(void) PyErr_SyntaxLocation( + const char *filename, /* decoded from the filesystem encoding */ + int lineno); +PyAPI_FUNC(void) PyErr_SyntaxLocationEx( + const char *filename, /* decoded from the filesystem encoding */ + int lineno, + int col_offset); +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) PyErr_SyntaxLocationObject( + PyObject *filename, + int lineno, + int col_offset); +#endif +PyAPI_FUNC(PyObject *) PyErr_ProgramText( + const char *filename, /* decoded from the filesystem encoding */ + int lineno); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject( + PyObject *filename, + int lineno); +#endif + +/* The following functions are used to create and modify unicode + exceptions from C */ + +/* create a UnicodeDecodeError object */ +PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_Create( + const char *encoding, /* UTF-8 encoded string */ + const char *object, + Py_ssize_t length, + Py_ssize_t start, + Py_ssize_t end, + const char *reason /* UTF-8 encoded string */ + ); + +/* create a UnicodeEncodeError object */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create( + const char *encoding, /* UTF-8 encoded string */ + const Py_UNICODE *object, + Py_ssize_t length, + Py_ssize_t start, + Py_ssize_t end, + const char *reason /* UTF-8 encoded string */ + ) Py_DEPRECATED(3.3); +#endif + +/* create a UnicodeTranslateError object */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create( + const Py_UNICODE *object, + Py_ssize_t length, + Py_ssize_t start, + Py_ssize_t end, + const char *reason /* UTF-8 encoded string */ + ) Py_DEPRECATED(3.3); +PyAPI_FUNC(PyObject *) _PyUnicodeTranslateError_Create( + PyObject *object, + Py_ssize_t start, + Py_ssize_t end, + const char *reason /* UTF-8 encoded string */ + ); +#endif + +/* get the encoding attribute */ +PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetEncoding(PyObject *); +PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetEncoding(PyObject *); + +/* get the object attribute */ +PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetObject(PyObject *); +PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetObject(PyObject *); +PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetObject(PyObject *); + +/* get the value of the start attribute (the int * may not be NULL) + return 0 on success, -1 on failure */ +PyAPI_FUNC(int) PyUnicodeEncodeError_GetStart(PyObject *, Py_ssize_t *); +PyAPI_FUNC(int) PyUnicodeDecodeError_GetStart(PyObject *, Py_ssize_t *); +PyAPI_FUNC(int) PyUnicodeTranslateError_GetStart(PyObject *, Py_ssize_t *); + +/* assign a new value to the start attribute + return 0 on success, -1 on failure */ +PyAPI_FUNC(int) PyUnicodeEncodeError_SetStart(PyObject *, Py_ssize_t); +PyAPI_FUNC(int) PyUnicodeDecodeError_SetStart(PyObject *, Py_ssize_t); +PyAPI_FUNC(int) PyUnicodeTranslateError_SetStart(PyObject *, Py_ssize_t); + +/* get the value of the end attribute (the int *may not be NULL) + return 0 on success, -1 on failure */ +PyAPI_FUNC(int) PyUnicodeEncodeError_GetEnd(PyObject *, Py_ssize_t *); +PyAPI_FUNC(int) PyUnicodeDecodeError_GetEnd(PyObject *, Py_ssize_t *); +PyAPI_FUNC(int) PyUnicodeTranslateError_GetEnd(PyObject *, Py_ssize_t *); + +/* assign a new value to the end attribute + return 0 on success, -1 on failure */ +PyAPI_FUNC(int) PyUnicodeEncodeError_SetEnd(PyObject *, Py_ssize_t); +PyAPI_FUNC(int) PyUnicodeDecodeError_SetEnd(PyObject *, Py_ssize_t); +PyAPI_FUNC(int) PyUnicodeTranslateError_SetEnd(PyObject *, Py_ssize_t); + +/* get the value of the reason attribute */ +PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetReason(PyObject *); +PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetReason(PyObject *); +PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetReason(PyObject *); + +/* assign a new value to the reason attribute + return 0 on success, -1 on failure */ +PyAPI_FUNC(int) PyUnicodeEncodeError_SetReason( + PyObject *exc, + const char *reason /* UTF-8 encoded string */ + ); +PyAPI_FUNC(int) PyUnicodeDecodeError_SetReason( + PyObject *exc, + const char *reason /* UTF-8 encoded string */ + ); +PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason( + PyObject *exc, + const char *reason /* UTF-8 encoded string */ + ); + +/* These APIs aren't really part of the error implementation, but + often needed to format error messages; the native C lib APIs are + not available on all platforms, which is why we provide emulations + for those platforms in Python/mysnprintf.c, + WARNING: The return value of snprintf varies across platforms; do + not rely on any particular behavior; eventually the C99 defn may + be reliable. +*/ +#if defined(MS_WIN32) && !defined(HAVE_SNPRINTF) +# define HAVE_SNPRINTF +# define snprintf _snprintf +# define vsnprintf _vsnprintf +#endif + +#include +PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char *format, ...) + Py_GCC_ATTRIBUTE((format(printf, 3, 4))); +PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va) + Py_GCC_ATTRIBUTE((format(printf, 3, 0))); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_ERRORS_H */ diff --git a/my_env/Include/pyexpat.h b/my_env/Include/pyexpat.h new file mode 100644 index 000000000..07020b5dc --- /dev/null +++ b/my_env/Include/pyexpat.h @@ -0,0 +1,55 @@ +/* Stuff to export relevant 'expat' entry points from pyexpat to other + * parser modules, such as cElementTree. */ + +/* note: you must import expat.h before importing this module! */ + +#define PyExpat_CAPI_MAGIC "pyexpat.expat_CAPI 1.1" +#define PyExpat_CAPSULE_NAME "pyexpat.expat_CAPI" + +struct PyExpat_CAPI +{ + char* magic; /* set to PyExpat_CAPI_MAGIC */ + int size; /* set to sizeof(struct PyExpat_CAPI) */ + int MAJOR_VERSION; + int MINOR_VERSION; + int MICRO_VERSION; + /* pointers to selected expat functions. add new functions at + the end, if needed */ + const XML_LChar * (*ErrorString)(enum XML_Error code); + enum XML_Error (*GetErrorCode)(XML_Parser parser); + XML_Size (*GetErrorColumnNumber)(XML_Parser parser); + XML_Size (*GetErrorLineNumber)(XML_Parser parser); + enum XML_Status (*Parse)( + XML_Parser parser, const char *s, int len, int isFinal); + XML_Parser (*ParserCreate_MM)( + const XML_Char *encoding, const XML_Memory_Handling_Suite *memsuite, + const XML_Char *namespaceSeparator); + void (*ParserFree)(XML_Parser parser); + void (*SetCharacterDataHandler)( + XML_Parser parser, XML_CharacterDataHandler handler); + void (*SetCommentHandler)( + XML_Parser parser, XML_CommentHandler handler); + void (*SetDefaultHandlerExpand)( + XML_Parser parser, XML_DefaultHandler handler); + void (*SetElementHandler)( + XML_Parser parser, XML_StartElementHandler start, + XML_EndElementHandler end); + void (*SetNamespaceDeclHandler)( + XML_Parser parser, XML_StartNamespaceDeclHandler start, + XML_EndNamespaceDeclHandler end); + void (*SetProcessingInstructionHandler)( + XML_Parser parser, XML_ProcessingInstructionHandler handler); + void (*SetUnknownEncodingHandler)( + XML_Parser parser, XML_UnknownEncodingHandler handler, + void *encodingHandlerData); + void (*SetUserData)(XML_Parser parser, void *userData); + void (*SetStartDoctypeDeclHandler)(XML_Parser parser, + XML_StartDoctypeDeclHandler start); + enum XML_Status (*SetEncoding)(XML_Parser parser, const XML_Char *encoding); + int (*DefaultUnknownEncodingHandler)( + void *encodingHandlerData, const XML_Char *name, XML_Encoding *info); + /* might be none for expat < 2.1.0 */ + int (*SetHashSalt)(XML_Parser parser, unsigned long hash_salt); + /* always add new stuff to the end! */ +}; + diff --git a/my_env/Include/pyfpe.h b/my_env/Include/pyfpe.h new file mode 100644 index 000000000..5a99e3979 --- /dev/null +++ b/my_env/Include/pyfpe.h @@ -0,0 +1,12 @@ +#ifndef Py_PYFPE_H +#define Py_PYFPE_H + +/* These macros used to do something when Python was built with --with-fpectl, + * but support for that was dropped in 3.7. We continue to define them though, + * to avoid breaking API users. + */ + +#define PyFPE_START_PROTECT(err_string, leave_stmt) +#define PyFPE_END_PROTECT(v) + +#endif /* !Py_PYFPE_H */ diff --git a/my_env/Include/pyhash.h b/my_env/Include/pyhash.h new file mode 100644 index 000000000..9cfd071ea --- /dev/null +++ b/my_env/Include/pyhash.h @@ -0,0 +1,145 @@ +#ifndef Py_HASH_H + +#define Py_HASH_H +#ifdef __cplusplus +extern "C" { +#endif + +/* Helpers for hash functions */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(Py_hash_t) _Py_HashDouble(double); +PyAPI_FUNC(Py_hash_t) _Py_HashPointer(void*); +PyAPI_FUNC(Py_hash_t) _Py_HashBytes(const void*, Py_ssize_t); +#endif + +/* Prime multiplier used in string and various other hashes. */ +#define _PyHASH_MULTIPLIER 1000003UL /* 0xf4243 */ + +/* Parameters used for the numeric hash implementation. See notes for + _Py_HashDouble in Python/pyhash.c. Numeric hashes are based on + reduction modulo the prime 2**_PyHASH_BITS - 1. */ + +#if SIZEOF_VOID_P >= 8 +# define _PyHASH_BITS 61 +#else +# define _PyHASH_BITS 31 +#endif + +#define _PyHASH_MODULUS (((size_t)1 << _PyHASH_BITS) - 1) +#define _PyHASH_INF 314159 +#define _PyHASH_NAN 0 +#define _PyHASH_IMAG _PyHASH_MULTIPLIER + + +/* hash secret + * + * memory layout on 64 bit systems + * cccccccc cccccccc cccccccc uc -- unsigned char[24] + * pppppppp ssssssss ........ fnv -- two Py_hash_t + * k0k0k0k0 k1k1k1k1 ........ siphash -- two uint64_t + * ........ ........ ssssssss djbx33a -- 16 bytes padding + one Py_hash_t + * ........ ........ eeeeeeee pyexpat XML hash salt + * + * memory layout on 32 bit systems + * cccccccc cccccccc cccccccc uc + * ppppssss ........ ........ fnv -- two Py_hash_t + * k0k0k0k0 k1k1k1k1 ........ siphash -- two uint64_t (*) + * ........ ........ ssss.... djbx33a -- 16 bytes padding + one Py_hash_t + * ........ ........ eeee.... pyexpat XML hash salt + * + * (*) The siphash member may not be available on 32 bit platforms without + * an unsigned int64 data type. + */ +#ifndef Py_LIMITED_API +typedef union { + /* ensure 24 bytes */ + unsigned char uc[24]; + /* two Py_hash_t for FNV */ + struct { + Py_hash_t prefix; + Py_hash_t suffix; + } fnv; + /* two uint64 for SipHash24 */ + struct { + uint64_t k0; + uint64_t k1; + } siphash; + /* a different (!) Py_hash_t for small string optimization */ + struct { + unsigned char padding[16]; + Py_hash_t suffix; + } djbx33a; + struct { + unsigned char padding[16]; + Py_hash_t hashsalt; + } expat; +} _Py_HashSecret_t; +PyAPI_DATA(_Py_HashSecret_t) _Py_HashSecret; +#endif + +#ifdef Py_DEBUG +PyAPI_DATA(int) _Py_HashSecret_Initialized; +#endif + + +/* hash function definition */ +#ifndef Py_LIMITED_API +typedef struct { + Py_hash_t (*const hash)(const void *, Py_ssize_t); + const char *name; + const int hash_bits; + const int seed_bits; +} PyHash_FuncDef; + +PyAPI_FUNC(PyHash_FuncDef*) PyHash_GetFuncDef(void); +#endif + + +/* cutoff for small string DJBX33A optimization in range [1, cutoff). + * + * About 50% of the strings in a typical Python application are smaller than + * 6 to 7 chars. However DJBX33A is vulnerable to hash collision attacks. + * NEVER use DJBX33A for long strings! + * + * A Py_HASH_CUTOFF of 0 disables small string optimization. 32 bit platforms + * should use a smaller cutoff because it is easier to create colliding + * strings. A cutoff of 7 on 64bit platforms and 5 on 32bit platforms should + * provide a decent safety margin. + */ +#ifndef Py_HASH_CUTOFF +# define Py_HASH_CUTOFF 0 +#elif (Py_HASH_CUTOFF > 7 || Py_HASH_CUTOFF < 0) +# error Py_HASH_CUTOFF must in range 0...7. +#endif /* Py_HASH_CUTOFF */ + + +/* hash algorithm selection + * + * The values for Py_HASH_SIPHASH24 and Py_HASH_FNV are hard-coded in the + * configure script. + * + * - FNV is available on all platforms and architectures. + * - SIPHASH24 only works on plaforms that don't require aligned memory for integers. + * - With EXTERNAL embedders can provide an alternative implementation with:: + * + * PyHash_FuncDef PyHash_Func = {...}; + * + * XXX: Figure out __declspec() for extern PyHash_FuncDef. + */ +#define Py_HASH_EXTERNAL 0 +#define Py_HASH_SIPHASH24 1 +#define Py_HASH_FNV 2 + +#ifndef Py_HASH_ALGORITHM +# ifndef HAVE_ALIGNED_REQUIRED +# define Py_HASH_ALGORITHM Py_HASH_SIPHASH24 +# else +# define Py_HASH_ALGORITHM Py_HASH_FNV +# endif /* uint64_t && uint32_t && aligned */ +#endif /* Py_HASH_ALGORITHM */ + +#ifdef __cplusplus +} +#endif + +#endif /* !Py_HASH_H */ diff --git a/my_env/Include/pylifecycle.h b/my_env/Include/pylifecycle.h new file mode 100644 index 000000000..5d9f049d8 --- /dev/null +++ b/my_env/Include/pylifecycle.h @@ -0,0 +1,238 @@ + +/* Interfaces to configure, query, create & destroy the Python runtime */ + +#ifndef Py_PYLIFECYCLE_H +#define Py_PYLIFECYCLE_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API +typedef struct { + const char *prefix; + const char *msg; + int user_err; +} _PyInitError; + +/* Almost all errors causing Python initialization to fail */ +#ifdef _MSC_VER + /* Visual Studio 2015 doesn't implement C99 __func__ in C */ +# define _Py_INIT_GET_FUNC() __FUNCTION__ +#else +# define _Py_INIT_GET_FUNC() __func__ +#endif + +#define _Py_INIT_OK() \ + (_PyInitError){.prefix = NULL, .msg = NULL, .user_err = 0} +#define _Py_INIT_ERR(MSG) \ + (_PyInitError){.prefix = _Py_INIT_GET_FUNC(), .msg = (MSG), .user_err = 0} +/* Error that can be fixed by the user like invalid input parameter. + Don't abort() the process on such error. */ +#define _Py_INIT_USER_ERR(MSG) \ + (_PyInitError){.prefix = _Py_INIT_GET_FUNC(), .msg = (MSG), .user_err = 1} +#define _Py_INIT_NO_MEMORY() _Py_INIT_USER_ERR("memory allocation failed") +#define _Py_INIT_FAILED(err) \ + (err.msg != NULL) + +#endif + + +PyAPI_FUNC(void) Py_SetProgramName(const wchar_t *); +PyAPI_FUNC(wchar_t *) Py_GetProgramName(void); + +PyAPI_FUNC(void) Py_SetPythonHome(const wchar_t *); +PyAPI_FUNC(wchar_t *) Py_GetPythonHome(void); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _Py_SetProgramFullPath(const wchar_t *); + +/* Only used by applications that embed the interpreter and need to + * override the standard encoding determination mechanism + */ +PyAPI_FUNC(int) Py_SetStandardStreamEncoding(const char *encoding, + const char *errors); + +/* PEP 432 Multi-phase initialization API (Private while provisional!) */ +PyAPI_FUNC(_PyInitError) _Py_InitializeCore( + PyInterpreterState **interp_p, + const _PyCoreConfig *config); +PyAPI_FUNC(int) _Py_IsCoreInitialized(void); +PyAPI_FUNC(_PyInitError) _Py_InitializeFromConfig( + const _PyCoreConfig *config); +#ifdef Py_BUILD_CORE +PyAPI_FUNC(void) _Py_Initialize_ReadEnvVarsNoAlloc(void); +#endif + +PyAPI_FUNC(PyObject *) _Py_GetGlobalVariablesAsDict(void); + +PyAPI_FUNC(_PyInitError) _PyCoreConfig_Read(_PyCoreConfig *); +PyAPI_FUNC(void) _PyCoreConfig_Clear(_PyCoreConfig *); +PyAPI_FUNC(int) _PyCoreConfig_Copy( + _PyCoreConfig *config, + const _PyCoreConfig *config2); +PyAPI_FUNC(PyObject *) _PyCoreConfig_AsDict(const _PyCoreConfig *config); +PyAPI_FUNC(void) _PyCoreConfig_SetGlobalConfig( + const _PyCoreConfig *config); + + +PyAPI_FUNC(_PyInitError) _PyMainInterpreterConfig_Read( + _PyMainInterpreterConfig *config, + const _PyCoreConfig *core_config); +PyAPI_FUNC(void) _PyMainInterpreterConfig_Clear(_PyMainInterpreterConfig *); +PyAPI_FUNC(int) _PyMainInterpreterConfig_Copy( + _PyMainInterpreterConfig *config, + const _PyMainInterpreterConfig *config2); +/* Used by _testcapi.get_main_config() */ +PyAPI_FUNC(PyObject*) _PyMainInterpreterConfig_AsDict( + const _PyMainInterpreterConfig *config); + +PyAPI_FUNC(_PyInitError) _Py_InitializeMainInterpreter( + PyInterpreterState *interp, + const _PyMainInterpreterConfig *config); +#endif /* !defined(Py_LIMITED_API) */ + + +/* Initialization and finalization */ +PyAPI_FUNC(void) Py_Initialize(void); +PyAPI_FUNC(void) Py_InitializeEx(int); +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _Py_FatalInitError(_PyInitError err) _Py_NO_RETURN; +#endif +PyAPI_FUNC(void) Py_Finalize(void); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 +PyAPI_FUNC(int) Py_FinalizeEx(void); +#endif +PyAPI_FUNC(int) Py_IsInitialized(void); + +/* Subinterpreter support */ +PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void); +PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *); + + +/* Py_PyAtExit is for the atexit module, Py_AtExit is for low-level + * exit functions. + */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _Py_PyAtExit(void (*func)(PyObject *), PyObject *); +#endif +PyAPI_FUNC(int) Py_AtExit(void (*func)(void)); + +PyAPI_FUNC(void) Py_Exit(int) _Py_NO_RETURN; + +/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _Py_RestoreSignals(void); + +PyAPI_FUNC(int) Py_FdIsInteractive(FILE *, const char *); +#endif + +/* Bootstrap __main__ (defined in Modules/main.c) */ +PyAPI_FUNC(int) Py_Main(int argc, wchar_t **argv); +#ifdef Py_BUILD_CORE +PyAPI_FUNC(int) _Py_UnixMain(int argc, char **argv); +#endif + +/* In getpath.c */ +PyAPI_FUNC(wchar_t *) Py_GetProgramFullPath(void); +PyAPI_FUNC(wchar_t *) Py_GetPrefix(void); +PyAPI_FUNC(wchar_t *) Py_GetExecPrefix(void); +PyAPI_FUNC(wchar_t *) Py_GetPath(void); +#ifdef Py_BUILD_CORE +PyAPI_FUNC(_PyInitError) _PyPathConfig_Init(const _PyCoreConfig *core_config); +PyAPI_FUNC(int) _PyPathConfig_ComputeArgv0( + int argc, wchar_t **argv, + PyObject **argv0_p); +PyAPI_FUNC(int) _Py_FindEnvConfigValue( + FILE *env_file, + const wchar_t *key, + wchar_t *value, + size_t value_size); +#endif +PyAPI_FUNC(void) Py_SetPath(const wchar_t *); +#ifdef MS_WINDOWS +int _Py_CheckPython3(void); +#endif + +/* In their own files */ +PyAPI_FUNC(const char *) Py_GetVersion(void); +PyAPI_FUNC(const char *) Py_GetPlatform(void); +PyAPI_FUNC(const char *) Py_GetCopyright(void); +PyAPI_FUNC(const char *) Py_GetCompiler(void); +PyAPI_FUNC(const char *) Py_GetBuildInfo(void); +#ifndef Py_LIMITED_API +PyAPI_FUNC(const char *) _Py_gitidentifier(void); +PyAPI_FUNC(const char *) _Py_gitversion(void); +#endif + +/* Internal -- various one-time initializations */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void); +PyAPI_FUNC(_PyInitError) _PySys_BeginInit(PyObject **sysmod); +PyAPI_FUNC(int) _PySys_EndInit(PyObject *sysdict, _PyMainInterpreterConfig *config); +PyAPI_FUNC(_PyInitError) _PyImport_Init(PyInterpreterState *interp); +PyAPI_FUNC(void) _PyExc_Init(PyObject * bltinmod); +PyAPI_FUNC(_PyInitError) _PyImportHooks_Init(void); +PyAPI_FUNC(int) _PyFrame_Init(void); +PyAPI_FUNC(int) _PyFloat_Init(void); +PyAPI_FUNC(int) PyByteArray_Init(void); +PyAPI_FUNC(_PyInitError) _Py_HashRandomization_Init(const _PyCoreConfig *); +#endif +#ifdef Py_BUILD_CORE +PyAPI_FUNC(int) _Py_ReadHashSeed( + const char *seed_text, + int *use_hash_seed, + unsigned long *hash_seed); +#endif + +/* Various internal finalizers */ + +#ifdef Py_BUILD_CORE +PyAPI_FUNC(void) _PyExc_Fini(void); +PyAPI_FUNC(void) _PyImport_Fini(void); +PyAPI_FUNC(void) _PyImport_Fini2(void); +PyAPI_FUNC(void) _PyGC_DumpShutdownStats(void); +PyAPI_FUNC(void) _PyGC_Fini(void); +PyAPI_FUNC(void) _PyType_Fini(void); +PyAPI_FUNC(void) _Py_HashRandomization_Fini(void); +#endif /* Py_BUILD_CORE */ + +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) PyMethod_Fini(void); +PyAPI_FUNC(void) PyFrame_Fini(void); +PyAPI_FUNC(void) PyCFunction_Fini(void); +PyAPI_FUNC(void) PyDict_Fini(void); +PyAPI_FUNC(void) PyTuple_Fini(void); +PyAPI_FUNC(void) PyList_Fini(void); +PyAPI_FUNC(void) PySet_Fini(void); +PyAPI_FUNC(void) PyBytes_Fini(void); +PyAPI_FUNC(void) PyByteArray_Fini(void); +PyAPI_FUNC(void) PyFloat_Fini(void); +PyAPI_FUNC(void) PyOS_FiniInterrupts(void); +PyAPI_FUNC(void) PySlice_Fini(void); +PyAPI_FUNC(void) PyAsyncGen_Fini(void); + +PyAPI_FUNC(int) _Py_IsFinalizing(void); +#endif /* !Py_LIMITED_API */ + +/* Signals */ +typedef void (*PyOS_sighandler_t)(int); +PyAPI_FUNC(PyOS_sighandler_t) PyOS_getsig(int); +PyAPI_FUNC(PyOS_sighandler_t) PyOS_setsig(int, PyOS_sighandler_t); + +#ifndef Py_LIMITED_API +/* Random */ +PyAPI_FUNC(int) _PyOS_URandom(void *buffer, Py_ssize_t size); +PyAPI_FUNC(int) _PyOS_URandomNonblock(void *buffer, Py_ssize_t size); +#endif /* !Py_LIMITED_API */ + +/* Legacy locale support */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _Py_CoerceLegacyLocale(const _PyCoreConfig *config); +PyAPI_FUNC(int) _Py_LegacyLocaleDetected(void); +PyAPI_FUNC(char *) _Py_SetLocaleFromEnv(int category); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_PYLIFECYCLE_H */ diff --git a/my_env/Include/pymacconfig.h b/my_env/Include/pymacconfig.h new file mode 100644 index 000000000..9dde11bd5 --- /dev/null +++ b/my_env/Include/pymacconfig.h @@ -0,0 +1,102 @@ +#ifndef PYMACCONFIG_H +#define PYMACCONFIG_H + /* + * This file moves some of the autoconf magic to compile-time + * when building on MacOSX. This is needed for building 4-way + * universal binaries and for 64-bit universal binaries because + * the values redefined below aren't configure-time constant but + * only compile-time constant in these scenarios. + */ + +#if defined(__APPLE__) + +# undef SIZEOF_LONG +# undef SIZEOF_PTHREAD_T +# undef SIZEOF_SIZE_T +# undef SIZEOF_TIME_T +# undef SIZEOF_VOID_P +# undef SIZEOF__BOOL +# undef SIZEOF_UINTPTR_T +# undef SIZEOF_PTHREAD_T +# undef WORDS_BIGENDIAN +# undef DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 +# undef DOUBLE_IS_BIG_ENDIAN_IEEE754 +# undef DOUBLE_IS_LITTLE_ENDIAN_IEEE754 +# undef HAVE_GCC_ASM_FOR_X87 + +# undef VA_LIST_IS_ARRAY +# if defined(__LP64__) && defined(__x86_64__) +# define VA_LIST_IS_ARRAY 1 +# endif + +# undef HAVE_LARGEFILE_SUPPORT +# ifndef __LP64__ +# define HAVE_LARGEFILE_SUPPORT 1 +# endif + +# undef SIZEOF_LONG +# ifdef __LP64__ +# define SIZEOF__BOOL 1 +# define SIZEOF__BOOL 1 +# define SIZEOF_LONG 8 +# define SIZEOF_PTHREAD_T 8 +# define SIZEOF_SIZE_T 8 +# define SIZEOF_TIME_T 8 +# define SIZEOF_VOID_P 8 +# define SIZEOF_UINTPTR_T 8 +# define SIZEOF_PTHREAD_T 8 +# else +# ifdef __ppc__ +# define SIZEOF__BOOL 4 +# else +# define SIZEOF__BOOL 1 +# endif +# define SIZEOF_LONG 4 +# define SIZEOF_PTHREAD_T 4 +# define SIZEOF_SIZE_T 4 +# define SIZEOF_TIME_T 4 +# define SIZEOF_VOID_P 4 +# define SIZEOF_UINTPTR_T 4 +# define SIZEOF_PTHREAD_T 4 +# endif + +# if defined(__LP64__) + /* MacOSX 10.4 (the first release to support 64-bit code + * at all) only supports 64-bit in the UNIX layer. + * Therefore suppress the toolbox-glue in 64-bit mode. + */ + + /* In 64-bit mode setpgrp always has no arguments, in 32-bit + * mode that depends on the compilation environment + */ +# undef SETPGRP_HAVE_ARG + +# endif + +#ifdef __BIG_ENDIAN__ +#define WORDS_BIGENDIAN 1 +#define DOUBLE_IS_BIG_ENDIAN_IEEE754 +#else +#define DOUBLE_IS_LITTLE_ENDIAN_IEEE754 +#endif /* __BIG_ENDIAN */ + +#ifdef __i386__ +# define HAVE_GCC_ASM_FOR_X87 +#endif + + /* + * The definition in pyconfig.h is only valid on the OS release + * where configure ran on and not necessarily for all systems where + * the executable can be used on. + * + * Specifically: OSX 10.4 has limited supported for '%zd', while + * 10.5 has full support for '%zd'. A binary built on 10.5 won't + * work properly on 10.4 unless we suppress the definition + * of PY_FORMAT_SIZE_T + */ +#undef PY_FORMAT_SIZE_T + + +#endif /* defined(_APPLE__) */ + +#endif /* PYMACCONFIG_H */ diff --git a/my_env/Include/pymacro.h b/my_env/Include/pymacro.h new file mode 100644 index 000000000..3f6ddbe99 --- /dev/null +++ b/my_env/Include/pymacro.h @@ -0,0 +1,100 @@ +#ifndef Py_PYMACRO_H +#define Py_PYMACRO_H + +/* Minimum value between x and y */ +#define Py_MIN(x, y) (((x) > (y)) ? (y) : (x)) + +/* Maximum value between x and y */ +#define Py_MAX(x, y) (((x) > (y)) ? (x) : (y)) + +/* Absolute value of the number x */ +#define Py_ABS(x) ((x) < 0 ? -(x) : (x)) + +#define _Py_XSTRINGIFY(x) #x + +/* Convert the argument to a string. For example, Py_STRINGIFY(123) is replaced + with "123" by the preprocessor. Defines are also replaced by their value. + For example Py_STRINGIFY(__LINE__) is replaced by the line number, not + by "__LINE__". */ +#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x) + +/* Get the size of a structure member in bytes */ +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) + +/* Argument must be a char or an int in [-128, 127] or [0, 255]. */ +#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff)) + +/* Assert a build-time dependency, as an expression. + + Your compile will fail if the condition isn't true, or can't be evaluated + by the compiler. This can be used in an expression: its value is 0. + + Example: + + #define foo_to_char(foo) \ + ((char *)(foo) \ + + Py_BUILD_ASSERT_EXPR(offsetof(struct foo, string) == 0)) + + Written by Rusty Russell, public domain, http://ccodearchive.net/ */ +#define Py_BUILD_ASSERT_EXPR(cond) \ + (sizeof(char [1 - 2*!(cond)]) - 1) + +#define Py_BUILD_ASSERT(cond) do { \ + (void)Py_BUILD_ASSERT_EXPR(cond); \ + } while(0) + +/* Get the number of elements in a visible array + + This does not work on pointers, or arrays declared as [], or function + parameters. With correct compiler support, such usage will cause a build + error (see Py_BUILD_ASSERT_EXPR). + + Written by Rusty Russell, public domain, http://ccodearchive.net/ + + Requires at GCC 3.1+ */ +#if (defined(__GNUC__) && !defined(__STRICT_ANSI__) && \ + (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ >= 4))) +/* Two gcc extensions. + &a[0] degrades to a pointer: a different type from an array */ +#define Py_ARRAY_LENGTH(array) \ + (sizeof(array) / sizeof((array)[0]) \ + + Py_BUILD_ASSERT_EXPR(!__builtin_types_compatible_p(typeof(array), \ + typeof(&(array)[0])))) +#else +#define Py_ARRAY_LENGTH(array) \ + (sizeof(array) / sizeof((array)[0])) +#endif + + +/* Define macros for inline documentation. */ +#define PyDoc_VAR(name) static char name[] +#define PyDoc_STRVAR(name,str) PyDoc_VAR(name) = PyDoc_STR(str) +#ifdef WITH_DOC_STRINGS +#define PyDoc_STR(str) str +#else +#define PyDoc_STR(str) "" +#endif + +/* Below "a" is a power of 2. */ +/* Round down size "n" to be a multiple of "a". */ +#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1)) +/* Round up size "n" to be a multiple of "a". */ +#define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \ + (size_t)((a) - 1)) & ~(size_t)((a) - 1)) +/* Round pointer "p" down to the closest "a"-aligned address <= "p". */ +#define _Py_ALIGN_DOWN(p, a) ((void *)((uintptr_t)(p) & ~(uintptr_t)((a) - 1))) +/* Round pointer "p" up to the closest "a"-aligned address >= "p". */ +#define _Py_ALIGN_UP(p, a) ((void *)(((uintptr_t)(p) + \ + (uintptr_t)((a) - 1)) & ~(uintptr_t)((a) - 1))) +/* Check if pointer "p" is aligned to "a"-bytes boundary. */ +#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1))) + +#ifdef __GNUC__ +#define Py_UNUSED(name) _unused_ ## name __attribute__((unused)) +#else +#define Py_UNUSED(name) _unused_ ## name +#endif + +#define Py_UNREACHABLE() abort() + +#endif /* Py_PYMACRO_H */ diff --git a/my_env/Include/pymath.h b/my_env/Include/pymath.h new file mode 100644 index 000000000..6cf69f98a --- /dev/null +++ b/my_env/Include/pymath.h @@ -0,0 +1,230 @@ +#ifndef Py_PYMATH_H +#define Py_PYMATH_H + +#include "pyconfig.h" /* include for defines */ + +/************************************************************************** +Symbols and macros to supply platform-independent interfaces to mathematical +functions and constants +**************************************************************************/ + +/* Python provides implementations for copysign, round and hypot in + * Python/pymath.c just in case your math library doesn't provide the + * functions. + * + *Note: PC/pyconfig.h defines copysign as _copysign + */ +#ifndef HAVE_COPYSIGN +extern double copysign(double, double); +#endif + +#ifndef HAVE_ROUND +extern double round(double); +#endif + +#ifndef HAVE_HYPOT +extern double hypot(double, double); +#endif + +/* extra declarations */ +#ifndef _MSC_VER +#ifndef __STDC__ +extern double fmod (double, double); +extern double frexp (double, int *); +extern double ldexp (double, int); +extern double modf (double, double *); +extern double pow(double, double); +#endif /* __STDC__ */ +#endif /* _MSC_VER */ + +/* High precision definition of pi and e (Euler) + * The values are taken from libc6's math.h. + */ +#ifndef Py_MATH_PIl +#define Py_MATH_PIl 3.1415926535897932384626433832795029L +#endif +#ifndef Py_MATH_PI +#define Py_MATH_PI 3.14159265358979323846 +#endif + +#ifndef Py_MATH_El +#define Py_MATH_El 2.7182818284590452353602874713526625L +#endif + +#ifndef Py_MATH_E +#define Py_MATH_E 2.7182818284590452354 +#endif + +/* Tau (2pi) to 40 digits, taken from tauday.com/tau-digits. */ +#ifndef Py_MATH_TAU +#define Py_MATH_TAU 6.2831853071795864769252867665590057683943L +#endif + + +/* On x86, Py_FORCE_DOUBLE forces a floating-point number out of an x87 FPU + register and into a 64-bit memory location, rounding from extended + precision to double precision in the process. On other platforms it does + nothing. */ + +/* we take double rounding as evidence of x87 usage */ +#ifndef Py_LIMITED_API +#ifndef Py_FORCE_DOUBLE +# ifdef X87_DOUBLE_ROUNDING +PyAPI_FUNC(double) _Py_force_double(double); +# define Py_FORCE_DOUBLE(X) (_Py_force_double(X)) +# else +# define Py_FORCE_DOUBLE(X) (X) +# endif +#endif +#endif + +#ifndef Py_LIMITED_API +#ifdef HAVE_GCC_ASM_FOR_X87 +PyAPI_FUNC(unsigned short) _Py_get_387controlword(void); +PyAPI_FUNC(void) _Py_set_387controlword(unsigned short); +#endif +#endif + +/* Py_IS_NAN(X) + * Return 1 if float or double arg is a NaN, else 0. + * Caution: + * X is evaluated more than once. + * This may not work on all platforms. Each platform has *some* + * way to spell this, though -- override in pyconfig.h if you have + * a platform where it doesn't work. + * Note: PC/pyconfig.h defines Py_IS_NAN as _isnan + */ +#ifndef Py_IS_NAN +#if defined HAVE_DECL_ISNAN && HAVE_DECL_ISNAN == 1 +#define Py_IS_NAN(X) isnan(X) +#else +#define Py_IS_NAN(X) ((X) != (X)) +#endif +#endif + +/* Py_IS_INFINITY(X) + * Return 1 if float or double arg is an infinity, else 0. + * Caution: + * X is evaluated more than once. + * This implementation may set the underflow flag if |X| is very small; + * it really can't be implemented correctly (& easily) before C99. + * Override in pyconfig.h if you have a better spelling on your platform. + * Py_FORCE_DOUBLE is used to avoid getting false negatives from a + * non-infinite value v sitting in an 80-bit x87 register such that + * v becomes infinite when spilled from the register to 64-bit memory. + * Note: PC/pyconfig.h defines Py_IS_INFINITY as _isinf + */ +#ifndef Py_IS_INFINITY +# if defined HAVE_DECL_ISINF && HAVE_DECL_ISINF == 1 +# define Py_IS_INFINITY(X) isinf(X) +# else +# define Py_IS_INFINITY(X) ((X) && \ + (Py_FORCE_DOUBLE(X)*0.5 == Py_FORCE_DOUBLE(X))) +# endif +#endif + +/* Py_IS_FINITE(X) + * Return 1 if float or double arg is neither infinite nor NAN, else 0. + * Some compilers (e.g. VisualStudio) have intrisics for this, so a special + * macro for this particular test is useful + * Note: PC/pyconfig.h defines Py_IS_FINITE as _finite + */ +#ifndef Py_IS_FINITE +#if defined HAVE_DECL_ISFINITE && HAVE_DECL_ISFINITE == 1 +#define Py_IS_FINITE(X) isfinite(X) +#elif defined HAVE_FINITE +#define Py_IS_FINITE(X) finite(X) +#else +#define Py_IS_FINITE(X) (!Py_IS_INFINITY(X) && !Py_IS_NAN(X)) +#endif +#endif + +/* HUGE_VAL is supposed to expand to a positive double infinity. Python + * uses Py_HUGE_VAL instead because some platforms are broken in this + * respect. We used to embed code in pyport.h to try to worm around that, + * but different platforms are broken in conflicting ways. If you're on + * a platform where HUGE_VAL is defined incorrectly, fiddle your Python + * config to #define Py_HUGE_VAL to something that works on your platform. + */ +#ifndef Py_HUGE_VAL +#define Py_HUGE_VAL HUGE_VAL +#endif + +/* Py_NAN + * A value that evaluates to a NaN. On IEEE 754 platforms INF*0 or + * INF/INF works. Define Py_NO_NAN in pyconfig.h if your platform + * doesn't support NaNs. + */ +#if !defined(Py_NAN) && !defined(Py_NO_NAN) +#if !defined(__INTEL_COMPILER) + #define Py_NAN (Py_HUGE_VAL * 0.) +#else /* __INTEL_COMPILER */ + #if defined(ICC_NAN_STRICT) + #pragma float_control(push) + #pragma float_control(precise, on) + #pragma float_control(except, on) + #if defined(_MSC_VER) + __declspec(noinline) + #else /* Linux */ + __attribute__((noinline)) + #endif /* _MSC_VER */ + static double __icc_nan() + { + return sqrt(-1.0); + } + #pragma float_control (pop) + #define Py_NAN __icc_nan() + #else /* ICC_NAN_RELAXED as default for Intel Compiler */ + static const union { unsigned char buf[8]; double __icc_nan; } __nan_store = {0,0,0,0,0,0,0xf8,0x7f}; + #define Py_NAN (__nan_store.__icc_nan) + #endif /* ICC_NAN_STRICT */ +#endif /* __INTEL_COMPILER */ +#endif + +/* Py_OVERFLOWED(X) + * Return 1 iff a libm function overflowed. Set errno to 0 before calling + * a libm function, and invoke this macro after, passing the function + * result. + * Caution: + * This isn't reliable. C99 no longer requires libm to set errno under + * any exceptional condition, but does require +- HUGE_VAL return + * values on overflow. A 754 box *probably* maps HUGE_VAL to a + * double infinity, and we're cool if that's so, unless the input + * was an infinity and an infinity is the expected result. A C89 + * system sets errno to ERANGE, so we check for that too. We're + * out of luck if a C99 754 box doesn't map HUGE_VAL to +Inf, or + * if the returned result is a NaN, or if a C89 box returns HUGE_VAL + * in non-overflow cases. + * X is evaluated more than once. + * Some platforms have better way to spell this, so expect some #ifdef'ery. + * + * OpenBSD uses 'isinf()' because a compiler bug on that platform causes + * the longer macro version to be mis-compiled. This isn't optimal, and + * should be removed once a newer compiler is available on that platform. + * The system that had the failure was running OpenBSD 3.2 on Intel, with + * gcc 2.95.3. + * + * According to Tim's checkin, the FreeBSD systems use isinf() to work + * around a FPE bug on that platform. + */ +#if defined(__FreeBSD__) || defined(__OpenBSD__) +#define Py_OVERFLOWED(X) isinf(X) +#else +#define Py_OVERFLOWED(X) ((X) != 0.0 && (errno == ERANGE || \ + (X) == Py_HUGE_VAL || \ + (X) == -Py_HUGE_VAL)) +#endif + +/* Return whether integral type *type* is signed or not. */ +#define _Py_IntegralTypeSigned(type) ((type)(-1) < 0) +/* Return the maximum value of integral type *type*. */ +#define _Py_IntegralTypeMax(type) ((_Py_IntegralTypeSigned(type)) ? (((((type)1 << (sizeof(type)*CHAR_BIT - 2)) - 1) << 1) + 1) : ~(type)0) +/* Return the minimum value of integral type *type*. */ +#define _Py_IntegralTypeMin(type) ((_Py_IntegralTypeSigned(type)) ? -_Py_IntegralTypeMax(type) - 1 : 0) +/* Check whether *v* is in the range of integral type *type*. This is most + * useful if *v* is floating-point, since demoting a floating-point *v* to an + * integral type that cannot represent *v*'s integral part is undefined + * behavior. */ +#define _Py_InIntegralTypeRange(type, v) (_Py_IntegralTypeMin(type) <= v && v <= _Py_IntegralTypeMax(type)) + +#endif /* Py_PYMATH_H */ diff --git a/my_env/Include/pymem.h b/my_env/Include/pymem.h new file mode 100644 index 000000000..458a6489c --- /dev/null +++ b/my_env/Include/pymem.h @@ -0,0 +1,244 @@ +/* The PyMem_ family: low-level memory allocation interfaces. + See objimpl.h for the PyObject_ memory family. +*/ + +#ifndef Py_PYMEM_H +#define Py_PYMEM_H + +#include "pyport.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API +PyAPI_FUNC(void *) PyMem_RawMalloc(size_t size); +PyAPI_FUNC(void *) PyMem_RawCalloc(size_t nelem, size_t elsize); +PyAPI_FUNC(void *) PyMem_RawRealloc(void *ptr, size_t new_size); +PyAPI_FUNC(void) PyMem_RawFree(void *ptr); + +/* Configure the Python memory allocators. Pass NULL to use default + allocators. */ +PyAPI_FUNC(int) _PyMem_SetupAllocators(const char *opt); + +/* Try to get the allocators name set by _PyMem_SetupAllocators(). */ +PyAPI_FUNC(const char*) _PyMem_GetAllocatorsName(void); + +/* Track an allocated memory block in the tracemalloc module. + Return 0 on success, return -1 on error (failed to allocate memory to store + the trace). + + Return -2 if tracemalloc is disabled. + + If memory block is already tracked, update the existing trace. */ +PyAPI_FUNC(int) PyTraceMalloc_Track( + unsigned int domain, + uintptr_t ptr, + size_t size); + +/* Untrack an allocated memory block in the tracemalloc module. + Do nothing if the block was not tracked. + + Return -2 if tracemalloc is disabled, otherwise return 0. */ +PyAPI_FUNC(int) PyTraceMalloc_Untrack( + unsigned int domain, + uintptr_t ptr); + +/* Get the traceback where a memory block was allocated. + + Return a tuple of (filename: str, lineno: int) tuples. + + Return None if the tracemalloc module is disabled or if the memory block + is not tracked by tracemalloc. + + Raise an exception and return NULL on error. */ +PyAPI_FUNC(PyObject*) _PyTraceMalloc_GetTraceback( + unsigned int domain, + uintptr_t ptr); +#endif /* !defined(Py_LIMITED_API) */ + + +/* BEWARE: + + Each interface exports both functions and macros. Extension modules should + use the functions, to ensure binary compatibility across Python versions. + Because the Python implementation is free to change internal details, and + the macros may (or may not) expose details for speed, if you do use the + macros you must recompile your extensions with each Python release. + + Never mix calls to PyMem_ with calls to the platform malloc/realloc/ + calloc/free. For example, on Windows different DLLs may end up using + different heaps, and if you use PyMem_Malloc you'll get the memory from the + heap used by the Python DLL; it could be a disaster if you free()'ed that + directly in your own extension. Using PyMem_Free instead ensures Python + can return the memory to the proper heap. As another example, in + PYMALLOC_DEBUG mode, Python wraps all calls to all PyMem_ and PyObject_ + memory functions in special debugging wrappers that add additional + debugging info to dynamic memory blocks. The system routines have no idea + what to do with that stuff, and the Python wrappers have no idea what to do + with raw blocks obtained directly by the system routines then. + + The GIL must be held when using these APIs. +*/ + +/* + * Raw memory interface + * ==================== + */ + +/* Functions + + Functions supplying platform-independent semantics for malloc/realloc/ + free. These functions make sure that allocating 0 bytes returns a distinct + non-NULL pointer (whenever possible -- if we're flat out of memory, NULL + may be returned), even if the platform malloc and realloc don't. + Returned pointers must be checked for NULL explicitly. No action is + performed on failure (no exception is set, no warning is printed, etc). +*/ + +PyAPI_FUNC(void *) PyMem_Malloc(size_t size); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +PyAPI_FUNC(void *) PyMem_Calloc(size_t nelem, size_t elsize); +#endif +PyAPI_FUNC(void *) PyMem_Realloc(void *ptr, size_t new_size); +PyAPI_FUNC(void) PyMem_Free(void *ptr); + +#ifndef Py_LIMITED_API +/* strdup() using PyMem_RawMalloc() */ +PyAPI_FUNC(char *) _PyMem_RawStrdup(const char *str); + +/* strdup() using PyMem_Malloc() */ +PyAPI_FUNC(char *) _PyMem_Strdup(const char *str); + +/* wcsdup() using PyMem_RawMalloc() */ +PyAPI_FUNC(wchar_t*) _PyMem_RawWcsdup(const wchar_t *str); +#endif + +/* Macros. */ + +/* PyMem_MALLOC(0) means malloc(1). Some systems would return NULL + for malloc(0), which would be treated as an error. Some platforms + would return a pointer with no memory behind it, which would break + pymalloc. To solve these problems, allocate an extra byte. */ +/* Returns NULL to indicate error if a negative size or size larger than + Py_ssize_t can represent is supplied. Helps prevents security holes. */ +#define PyMem_MALLOC(n) PyMem_Malloc(n) +#define PyMem_REALLOC(p, n) PyMem_Realloc(p, n) +#define PyMem_FREE(p) PyMem_Free(p) + +/* + * Type-oriented memory interface + * ============================== + * + * Allocate memory for n objects of the given type. Returns a new pointer + * or NULL if the request was too large or memory allocation failed. Use + * these macros rather than doing the multiplication yourself so that proper + * overflow checking is always done. + */ + +#define PyMem_New(type, n) \ + ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ + ( (type *) PyMem_Malloc((n) * sizeof(type)) ) ) +#define PyMem_NEW(type, n) \ + ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ + ( (type *) PyMem_MALLOC((n) * sizeof(type)) ) ) + +/* + * The value of (p) is always clobbered by this macro regardless of success. + * The caller MUST check if (p) is NULL afterwards and deal with the memory + * error if so. This means the original value of (p) MUST be saved for the + * caller's memory error handler to not lose track of it. + */ +#define PyMem_Resize(p, type, n) \ + ( (p) = ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ + (type *) PyMem_Realloc((p), (n) * sizeof(type)) ) +#define PyMem_RESIZE(p, type, n) \ + ( (p) = ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ + (type *) PyMem_REALLOC((p), (n) * sizeof(type)) ) + +/* PyMem{Del,DEL} are left over from ancient days, and shouldn't be used + * anymore. They're just confusing aliases for PyMem_{Free,FREE} now. + */ +#define PyMem_Del PyMem_Free +#define PyMem_DEL PyMem_FREE + +#ifndef Py_LIMITED_API +typedef enum { + /* PyMem_RawMalloc(), PyMem_RawRealloc() and PyMem_RawFree() */ + PYMEM_DOMAIN_RAW, + + /* PyMem_Malloc(), PyMem_Realloc() and PyMem_Free() */ + PYMEM_DOMAIN_MEM, + + /* PyObject_Malloc(), PyObject_Realloc() and PyObject_Free() */ + PYMEM_DOMAIN_OBJ +} PyMemAllocatorDomain; + +typedef struct { + /* user context passed as the first argument to the 4 functions */ + void *ctx; + + /* allocate a memory block */ + void* (*malloc) (void *ctx, size_t size); + + /* allocate a memory block initialized by zeros */ + void* (*calloc) (void *ctx, size_t nelem, size_t elsize); + + /* allocate or resize a memory block */ + void* (*realloc) (void *ctx, void *ptr, size_t new_size); + + /* release a memory block */ + void (*free) (void *ctx, void *ptr); +} PyMemAllocatorEx; + +/* Get the memory block allocator of the specified domain. */ +PyAPI_FUNC(void) PyMem_GetAllocator(PyMemAllocatorDomain domain, + PyMemAllocatorEx *allocator); + +/* Set the memory block allocator of the specified domain. + + The new allocator must return a distinct non-NULL pointer when requesting + zero bytes. + + For the PYMEM_DOMAIN_RAW domain, the allocator must be thread-safe: the GIL + is not held when the allocator is called. + + If the new allocator is not a hook (don't call the previous allocator), the + PyMem_SetupDebugHooks() function must be called to reinstall the debug hooks + on top on the new allocator. */ +PyAPI_FUNC(void) PyMem_SetAllocator(PyMemAllocatorDomain domain, + PyMemAllocatorEx *allocator); + +/* Setup hooks to detect bugs in the following Python memory allocator + functions: + + - PyMem_RawMalloc(), PyMem_RawRealloc(), PyMem_RawFree() + - PyMem_Malloc(), PyMem_Realloc(), PyMem_Free() + - PyObject_Malloc(), PyObject_Realloc() and PyObject_Free() + + Newly allocated memory is filled with the byte 0xCB, freed memory is filled + with the byte 0xDB. Additional checks: + + - detect API violations, ex: PyObject_Free() called on a buffer allocated + by PyMem_Malloc() + - detect write before the start of the buffer (buffer underflow) + - detect write after the end of the buffer (buffer overflow) + + The function does nothing if Python is not compiled is debug mode. */ +PyAPI_FUNC(void) PyMem_SetupDebugHooks(void); +#endif + +#ifdef Py_BUILD_CORE +/* Set the memory allocator of the specified domain to the default. + Save the old allocator into *old_alloc if it's non-NULL. + Return on success, or return -1 if the domain is unknown. */ +PyAPI_FUNC(int) _PyMem_SetDefaultAllocator( + PyMemAllocatorDomain domain, + PyMemAllocatorEx *old_alloc); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* !Py_PYMEM_H */ diff --git a/my_env/Include/pyport.h b/my_env/Include/pyport.h new file mode 100644 index 000000000..c1f4c7fbb --- /dev/null +++ b/my_env/Include/pyport.h @@ -0,0 +1,793 @@ +#ifndef Py_PYPORT_H +#define Py_PYPORT_H + +#include "pyconfig.h" /* include for defines */ + +#include + +/************************************************************************** +Symbols and macros to supply platform-independent interfaces to basic +C language & library operations whose spellings vary across platforms. + +Please try to make documentation here as clear as possible: by definition, +the stuff here is trying to illuminate C's darkest corners. + +Config #defines referenced here: + +SIGNED_RIGHT_SHIFT_ZERO_FILLS +Meaning: To be defined iff i>>j does not extend the sign bit when i is a + signed integral type and i < 0. +Used in: Py_ARITHMETIC_RIGHT_SHIFT + +Py_DEBUG +Meaning: Extra checks compiled in for debug mode. +Used in: Py_SAFE_DOWNCAST + +**************************************************************************/ + +/* typedefs for some C9X-defined synonyms for integral types. + * + * The names in Python are exactly the same as the C9X names, except with a + * Py_ prefix. Until C9X is universally implemented, this is the only way + * to ensure that Python gets reliable names that don't conflict with names + * in non-Python code that are playing their own tricks to define the C9X + * names. + * + * NOTE: don't go nuts here! Python has no use for *most* of the C9X + * integral synonyms. Only define the ones we actually need. + */ + +/* long long is required. Ensure HAVE_LONG_LONG is defined for compatibility. */ +#ifndef HAVE_LONG_LONG +#define HAVE_LONG_LONG 1 +#endif +#ifndef PY_LONG_LONG +#define PY_LONG_LONG long long +/* If LLONG_MAX is defined in limits.h, use that. */ +#define PY_LLONG_MIN LLONG_MIN +#define PY_LLONG_MAX LLONG_MAX +#define PY_ULLONG_MAX ULLONG_MAX +#endif + +#define PY_UINT32_T uint32_t +#define PY_UINT64_T uint64_t + +/* Signed variants of the above */ +#define PY_INT32_T int32_t +#define PY_INT64_T int64_t + +/* If PYLONG_BITS_IN_DIGIT is not defined then we'll use 30-bit digits if all + the necessary integer types are available, and we're on a 64-bit platform + (as determined by SIZEOF_VOID_P); otherwise we use 15-bit digits. */ + +#ifndef PYLONG_BITS_IN_DIGIT +#if SIZEOF_VOID_P >= 8 +#define PYLONG_BITS_IN_DIGIT 30 +#else +#define PYLONG_BITS_IN_DIGIT 15 +#endif +#endif + +/* uintptr_t is the C9X name for an unsigned integral type such that a + * legitimate void* can be cast to uintptr_t and then back to void* again + * without loss of information. Similarly for intptr_t, wrt a signed + * integral type. + */ +typedef uintptr_t Py_uintptr_t; +typedef intptr_t Py_intptr_t; + +/* Py_ssize_t is a signed integral type such that sizeof(Py_ssize_t) == + * sizeof(size_t). C99 doesn't define such a thing directly (size_t is an + * unsigned integral type). See PEP 353 for details. + */ +#ifdef HAVE_SSIZE_T +typedef ssize_t Py_ssize_t; +#elif SIZEOF_VOID_P == SIZEOF_SIZE_T +typedef Py_intptr_t Py_ssize_t; +#else +# error "Python needs a typedef for Py_ssize_t in pyport.h." +#endif + +/* Py_hash_t is the same size as a pointer. */ +#define SIZEOF_PY_HASH_T SIZEOF_SIZE_T +typedef Py_ssize_t Py_hash_t; +/* Py_uhash_t is the unsigned equivalent needed to calculate numeric hash. */ +#define SIZEOF_PY_UHASH_T SIZEOF_SIZE_T +typedef size_t Py_uhash_t; + +/* Only used for compatibility with code that may not be PY_SSIZE_T_CLEAN. */ +#ifdef PY_SSIZE_T_CLEAN +typedef Py_ssize_t Py_ssize_clean_t; +#else +typedef int Py_ssize_clean_t; +#endif + +/* Largest possible value of size_t. */ +#define PY_SIZE_MAX SIZE_MAX + +/* Largest positive value of type Py_ssize_t. */ +#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1)) +/* Smallest negative value of type Py_ssize_t. */ +#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1) + +/* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf + * format to convert an argument with the width of a size_t or Py_ssize_t. + * C99 introduced "z" for this purpose, but not all platforms support that; + * e.g., MS compilers use "I" instead. + * + * These "high level" Python format functions interpret "z" correctly on + * all platforms (Python interprets the format string itself, and does whatever + * the platform C requires to convert a size_t/Py_ssize_t argument): + * + * PyBytes_FromFormat + * PyErr_Format + * PyBytes_FromFormatV + * PyUnicode_FromFormatV + * + * Lower-level uses require that you interpolate the correct format modifier + * yourself (e.g., calling printf, fprintf, sprintf, PyOS_snprintf); for + * example, + * + * Py_ssize_t index; + * fprintf(stderr, "index %" PY_FORMAT_SIZE_T "d sucks\n", index); + * + * That will expand to %ld, or %Id, or to something else correct for a + * Py_ssize_t on the platform. + */ +#ifndef PY_FORMAT_SIZE_T +# if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__) +# define PY_FORMAT_SIZE_T "" +# elif SIZEOF_SIZE_T == SIZEOF_LONG +# define PY_FORMAT_SIZE_T "l" +# elif defined(MS_WINDOWS) +# define PY_FORMAT_SIZE_T "I" +# else +# error "This platform's pyconfig.h needs to define PY_FORMAT_SIZE_T" +# endif +#endif + +/* Py_LOCAL can be used instead of static to get the fastest possible calling + * convention for functions that are local to a given module. + * + * Py_LOCAL_INLINE does the same thing, and also explicitly requests inlining, + * for platforms that support that. + * + * If PY_LOCAL_AGGRESSIVE is defined before python.h is included, more + * "aggressive" inlining/optimization is enabled for the entire module. This + * may lead to code bloat, and may slow things down for those reasons. It may + * also lead to errors, if the code relies on pointer aliasing. Use with + * care. + * + * NOTE: You can only use this for functions that are entirely local to a + * module; functions that are exported via method tables, callbacks, etc, + * should keep using static. + */ + +#if defined(_MSC_VER) +#if defined(PY_LOCAL_AGGRESSIVE) +/* enable more aggressive optimization for visual studio */ +#pragma optimize("agtw", on) +#endif +/* ignore warnings if the compiler decides not to inline a function */ +#pragma warning(disable: 4710) +/* fastest possible local call under MSVC */ +#define Py_LOCAL(type) static type __fastcall +#define Py_LOCAL_INLINE(type) static __inline type __fastcall +#else +#define Py_LOCAL(type) static type +#define Py_LOCAL_INLINE(type) static inline type +#endif + +/* Py_MEMCPY is kept for backwards compatibility, + * see https://bugs.python.org/issue28126 */ +#define Py_MEMCPY memcpy + +#include + +#ifdef HAVE_IEEEFP_H +#include /* needed for 'finite' declaration on some platforms */ +#endif + +#include /* Moved here from the math section, before extern "C" */ + +/******************************************** + * WRAPPER FOR and/or * + ********************************************/ + +#ifdef TIME_WITH_SYS_TIME +#include +#include +#else /* !TIME_WITH_SYS_TIME */ +#ifdef HAVE_SYS_TIME_H +#include +#else /* !HAVE_SYS_TIME_H */ +#include +#endif /* !HAVE_SYS_TIME_H */ +#endif /* !TIME_WITH_SYS_TIME */ + + +/****************************** + * WRAPPER FOR * + ******************************/ + +/* NB caller must include */ + +#ifdef HAVE_SYS_SELECT_H +#include +#endif /* !HAVE_SYS_SELECT_H */ + +/******************************* + * stat() and fstat() fiddling * + *******************************/ + +#ifdef HAVE_SYS_STAT_H +#include +#elif defined(HAVE_STAT_H) +#include +#endif + +#ifndef S_IFMT +/* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */ +#define S_IFMT 0170000 +#endif + +#ifndef S_IFLNK +/* Windows doesn't define S_IFLNK but posixmodule.c maps + * IO_REPARSE_TAG_SYMLINK to S_IFLNK */ +# define S_IFLNK 0120000 +#endif + +#ifndef S_ISREG +#define S_ISREG(x) (((x) & S_IFMT) == S_IFREG) +#endif + +#ifndef S_ISDIR +#define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR) +#endif + +#ifndef S_ISCHR +#define S_ISCHR(x) (((x) & S_IFMT) == S_IFCHR) +#endif + +#ifdef __cplusplus +/* Move this down here since some C++ #include's don't like to be included + inside an extern "C" */ +extern "C" { +#endif + + +/* Py_ARITHMETIC_RIGHT_SHIFT + * C doesn't define whether a right-shift of a signed integer sign-extends + * or zero-fills. Here a macro to force sign extension: + * Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) + * Return I >> J, forcing sign extension. Arithmetically, return the + * floor of I/2**J. + * Requirements: + * I should have signed integer type. In the terminology of C99, this can + * be either one of the five standard signed integer types (signed char, + * short, int, long, long long) or an extended signed integer type. + * J is an integer >= 0 and strictly less than the number of bits in the + * type of I (because C doesn't define what happens for J outside that + * range either). + * TYPE used to specify the type of I, but is now ignored. It's been left + * in for backwards compatibility with versions <= 2.6 or 3.0. + * Caution: + * I may be evaluated more than once. + */ +#ifdef SIGNED_RIGHT_SHIFT_ZERO_FILLS +#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) \ + ((I) < 0 ? -1-((-1-(I)) >> (J)) : (I) >> (J)) +#else +#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) ((I) >> (J)) +#endif + +/* Py_FORCE_EXPANSION(X) + * "Simply" returns its argument. However, macro expansions within the + * argument are evaluated. This unfortunate trickery is needed to get + * token-pasting to work as desired in some cases. + */ +#define Py_FORCE_EXPANSION(X) X + +/* Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) + * Cast VALUE to type NARROW from type WIDE. In Py_DEBUG mode, this + * assert-fails if any information is lost. + * Caution: + * VALUE may be evaluated more than once. + */ +#ifdef Py_DEBUG +#define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) \ + (assert((WIDE)(NARROW)(VALUE) == (VALUE)), (NARROW)(VALUE)) +#else +#define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) (NARROW)(VALUE) +#endif + +/* Py_SET_ERRNO_ON_MATH_ERROR(x) + * If a libm function did not set errno, but it looks like the result + * overflowed or not-a-number, set errno to ERANGE or EDOM. Set errno + * to 0 before calling a libm function, and invoke this macro after, + * passing the function result. + * Caution: + * This isn't reliable. See Py_OVERFLOWED comments. + * X is evaluated more than once. + */ +#if defined(__FreeBSD__) || defined(__OpenBSD__) || (defined(__hpux) && defined(__ia64)) +#define _Py_SET_EDOM_FOR_NAN(X) if (isnan(X)) errno = EDOM; +#else +#define _Py_SET_EDOM_FOR_NAN(X) ; +#endif +#define Py_SET_ERRNO_ON_MATH_ERROR(X) \ + do { \ + if (errno == 0) { \ + if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL) \ + errno = ERANGE; \ + else _Py_SET_EDOM_FOR_NAN(X) \ + } \ + } while(0) + +/* Py_SET_ERANGE_ON_OVERFLOW(x) + * An alias of Py_SET_ERRNO_ON_MATH_ERROR for backward-compatibility. + */ +#define Py_SET_ERANGE_IF_OVERFLOW(X) Py_SET_ERRNO_ON_MATH_ERROR(X) + +/* Py_ADJUST_ERANGE1(x) + * Py_ADJUST_ERANGE2(x, y) + * Set errno to 0 before calling a libm function, and invoke one of these + * macros after, passing the function result(s) (Py_ADJUST_ERANGE2 is useful + * for functions returning complex results). This makes two kinds of + * adjustments to errno: (A) If it looks like the platform libm set + * errno=ERANGE due to underflow, clear errno. (B) If it looks like the + * platform libm overflowed but didn't set errno, force errno to ERANGE. In + * effect, we're trying to force a useful implementation of C89 errno + * behavior. + * Caution: + * This isn't reliable. See Py_OVERFLOWED comments. + * X and Y may be evaluated more than once. + */ +#define Py_ADJUST_ERANGE1(X) \ + do { \ + if (errno == 0) { \ + if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL) \ + errno = ERANGE; \ + } \ + else if (errno == ERANGE && (X) == 0.0) \ + errno = 0; \ + } while(0) + +#define Py_ADJUST_ERANGE2(X, Y) \ + do { \ + if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL || \ + (Y) == Py_HUGE_VAL || (Y) == -Py_HUGE_VAL) { \ + if (errno == 0) \ + errno = ERANGE; \ + } \ + else if (errno == ERANGE) \ + errno = 0; \ + } while(0) + +/* The functions _Py_dg_strtod and _Py_dg_dtoa in Python/dtoa.c (which are + * required to support the short float repr introduced in Python 3.1) require + * that the floating-point unit that's being used for arithmetic operations + * on C doubles is set to use 53-bit precision. It also requires that the + * FPU rounding mode is round-half-to-even, but that's less often an issue. + * + * If your FPU isn't already set to 53-bit precision/round-half-to-even, and + * you want to make use of _Py_dg_strtod and _Py_dg_dtoa, then you should + * + * #define HAVE_PY_SET_53BIT_PRECISION 1 + * + * and also give appropriate definitions for the following three macros: + * + * _PY_SET_53BIT_PRECISION_START : store original FPU settings, and + * set FPU to 53-bit precision/round-half-to-even + * _PY_SET_53BIT_PRECISION_END : restore original FPU settings + * _PY_SET_53BIT_PRECISION_HEADER : any variable declarations needed to + * use the two macros above. + * + * The macros are designed to be used within a single C function: see + * Python/pystrtod.c for an example of their use. + */ + +/* get and set x87 control word for gcc/x86 */ +#ifdef HAVE_GCC_ASM_FOR_X87 +#define HAVE_PY_SET_53BIT_PRECISION 1 +/* _Py_get/set_387controlword functions are defined in Python/pymath.c */ +#define _Py_SET_53BIT_PRECISION_HEADER \ + unsigned short old_387controlword, new_387controlword +#define _Py_SET_53BIT_PRECISION_START \ + do { \ + old_387controlword = _Py_get_387controlword(); \ + new_387controlword = (old_387controlword & ~0x0f00) | 0x0200; \ + if (new_387controlword != old_387controlword) \ + _Py_set_387controlword(new_387controlword); \ + } while (0) +#define _Py_SET_53BIT_PRECISION_END \ + if (new_387controlword != old_387controlword) \ + _Py_set_387controlword(old_387controlword) +#endif + +/* get and set x87 control word for VisualStudio/x86 */ +#if defined(_MSC_VER) && !defined(_WIN64) /* x87 not supported in 64-bit */ +#define HAVE_PY_SET_53BIT_PRECISION 1 +#define _Py_SET_53BIT_PRECISION_HEADER \ + unsigned int old_387controlword, new_387controlword, out_387controlword +/* We use the __control87_2 function to set only the x87 control word. + The SSE control word is unaffected. */ +#define _Py_SET_53BIT_PRECISION_START \ + do { \ + __control87_2(0, 0, &old_387controlword, NULL); \ + new_387controlword = \ + (old_387controlword & ~(_MCW_PC | _MCW_RC)) | (_PC_53 | _RC_NEAR); \ + if (new_387controlword != old_387controlword) \ + __control87_2(new_387controlword, _MCW_PC | _MCW_RC, \ + &out_387controlword, NULL); \ + } while (0) +#define _Py_SET_53BIT_PRECISION_END \ + do { \ + if (new_387controlword != old_387controlword) \ + __control87_2(old_387controlword, _MCW_PC | _MCW_RC, \ + &out_387controlword, NULL); \ + } while (0) +#endif + +#ifdef HAVE_GCC_ASM_FOR_MC68881 +#define HAVE_PY_SET_53BIT_PRECISION 1 +#define _Py_SET_53BIT_PRECISION_HEADER \ + unsigned int old_fpcr, new_fpcr +#define _Py_SET_53BIT_PRECISION_START \ + do { \ + __asm__ ("fmove.l %%fpcr,%0" : "=g" (old_fpcr)); \ + /* Set double precision / round to nearest. */ \ + new_fpcr = (old_fpcr & ~0xf0) | 0x80; \ + if (new_fpcr != old_fpcr) \ + __asm__ volatile ("fmove.l %0,%%fpcr" : : "g" (new_fpcr)); \ + } while (0) +#define _Py_SET_53BIT_PRECISION_END \ + do { \ + if (new_fpcr != old_fpcr) \ + __asm__ volatile ("fmove.l %0,%%fpcr" : : "g" (old_fpcr)); \ + } while (0) +#endif + +/* default definitions are empty */ +#ifndef HAVE_PY_SET_53BIT_PRECISION +#define _Py_SET_53BIT_PRECISION_HEADER +#define _Py_SET_53BIT_PRECISION_START +#define _Py_SET_53BIT_PRECISION_END +#endif + +/* If we can't guarantee 53-bit precision, don't use the code + in Python/dtoa.c, but fall back to standard code. This + means that repr of a float will be long (17 sig digits). + + Realistically, there are two things that could go wrong: + + (1) doubles aren't IEEE 754 doubles, or + (2) we're on x86 with the rounding precision set to 64-bits + (extended precision), and we don't know how to change + the rounding precision. + */ + +#if !defined(DOUBLE_IS_LITTLE_ENDIAN_IEEE754) && \ + !defined(DOUBLE_IS_BIG_ENDIAN_IEEE754) && \ + !defined(DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754) +#define PY_NO_SHORT_FLOAT_REPR +#endif + +/* double rounding is symptomatic of use of extended precision on x86. If + we're seeing double rounding, and we don't have any mechanism available for + changing the FPU rounding precision, then don't use Python/dtoa.c. */ +#if defined(X87_DOUBLE_ROUNDING) && !defined(HAVE_PY_SET_53BIT_PRECISION) +#define PY_NO_SHORT_FLOAT_REPR +#endif + + +/* Py_DEPRECATED(version) + * Declare a variable, type, or function deprecated. + * Usage: + * extern int old_var Py_DEPRECATED(2.3); + * typedef int T1 Py_DEPRECATED(2.4); + * extern int x() Py_DEPRECATED(2.5); + */ +#if defined(__GNUC__) \ + && ((__GNUC__ >= 4) || (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)) +#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__)) +#else +#define Py_DEPRECATED(VERSION_UNUSED) +#endif + + +/* _Py_HOT_FUNCTION + * The hot attribute on a function is used to inform the compiler that the + * function is a hot spot of the compiled program. The function is optimized + * more aggressively and on many target it is placed into special subsection of + * the text section so all hot functions appears close together improving + * locality. + * + * Usage: + * int _Py_HOT_FUNCTION x(void) { return 3; } + * + * Issue #28618: This attribute must not be abused, otherwise it can have a + * negative effect on performance. Only the functions were Python spend most of + * its time must use it. Use a profiler when running performance benchmark + * suite to find these functions. + */ +#if defined(__GNUC__) \ + && ((__GNUC__ >= 5) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) +#define _Py_HOT_FUNCTION __attribute__((hot)) +#else +#define _Py_HOT_FUNCTION +#endif + +/* _Py_NO_INLINE + * Disable inlining on a function. For example, it helps to reduce the C stack + * consumption. + * + * Usage: + * int _Py_NO_INLINE x(void) { return 3; } + */ +#if defined(__GNUC__) || defined(__clang__) +# define _Py_NO_INLINE __attribute__((noinline)) +#else +# define _Py_NO_INLINE +#endif + +/************************************************************************** +Prototypes that are missing from the standard include files on some systems +(and possibly only some versions of such systems.) + +Please be conservative with adding new ones, document them and enclose them +in platform-specific #ifdefs. +**************************************************************************/ + +#ifdef SOLARIS +/* Unchecked */ +extern int gethostname(char *, int); +#endif + +#ifdef HAVE__GETPTY +#include /* we need to import mode_t */ +extern char * _getpty(int *, int, mode_t, int); +#endif + +/* On QNX 6, struct termio must be declared by including sys/termio.h + if TCGETA, TCSETA, TCSETAW, or TCSETAF are used. sys/termio.h must + be included before termios.h or it will generate an error. */ +#if defined(HAVE_SYS_TERMIO_H) && !defined(__hpux) +#include +#endif + + +/* On 4.4BSD-descendants, ctype functions serves the whole range of + * wchar_t character set rather than single byte code points only. + * This characteristic can break some operations of string object + * including str.upper() and str.split() on UTF-8 locales. This + * workaround was provided by Tim Robbins of FreeBSD project. + */ + +#if defined(__APPLE__) +# define _PY_PORT_CTYPE_UTF8_ISSUE +#endif + +#ifdef _PY_PORT_CTYPE_UTF8_ISSUE +#ifndef __cplusplus + /* The workaround below is unsafe in C++ because + * the defines these symbols as real functions, + * with a slightly different signature. + * See issue #10910 + */ +#include +#include +#undef isalnum +#define isalnum(c) iswalnum(btowc(c)) +#undef isalpha +#define isalpha(c) iswalpha(btowc(c)) +#undef islower +#define islower(c) iswlower(btowc(c)) +#undef isspace +#define isspace(c) iswspace(btowc(c)) +#undef isupper +#define isupper(c) iswupper(btowc(c)) +#undef tolower +#define tolower(c) towlower(btowc(c)) +#undef toupper +#define toupper(c) towupper(btowc(c)) +#endif +#endif + + +/* Declarations for symbol visibility. + + PyAPI_FUNC(type): Declares a public Python API function and return type + PyAPI_DATA(type): Declares public Python data and its type + PyMODINIT_FUNC: A Python module init function. If these functions are + inside the Python core, they are private to the core. + If in an extension module, it may be declared with + external linkage depending on the platform. + + As a number of platforms support/require "__declspec(dllimport/dllexport)", + we support a HAVE_DECLSPEC_DLL macro to save duplication. +*/ + +/* + All windows ports, except cygwin, are handled in PC/pyconfig.h. + + Cygwin is the only other autoconf platform requiring special + linkage handling and it uses __declspec(). +*/ +#if defined(__CYGWIN__) +# define HAVE_DECLSPEC_DLL +#endif + +/* only get special linkage if built as shared or platform is Cygwin */ +#if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__) +# if defined(HAVE_DECLSPEC_DLL) +# if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_BUILTIN) +# define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE +# define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE + /* module init functions inside the core need no external linkage */ + /* except for Cygwin to handle embedding */ +# if defined(__CYGWIN__) +# define PyMODINIT_FUNC __declspec(dllexport) PyObject* +# else /* __CYGWIN__ */ +# define PyMODINIT_FUNC PyObject* +# endif /* __CYGWIN__ */ +# else /* Py_BUILD_CORE */ + /* Building an extension module, or an embedded situation */ + /* public Python functions and data are imported */ + /* Under Cygwin, auto-import functions to prevent compilation */ + /* failures similar to those described at the bottom of 4.1: */ + /* http://docs.python.org/extending/windows.html#a-cookbook-approach */ +# if !defined(__CYGWIN__) +# define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE +# endif /* !__CYGWIN__ */ +# define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE + /* module init functions outside the core must be exported */ +# if defined(__cplusplus) +# define PyMODINIT_FUNC extern "C" __declspec(dllexport) PyObject* +# else /* __cplusplus */ +# define PyMODINIT_FUNC __declspec(dllexport) PyObject* +# endif /* __cplusplus */ +# endif /* Py_BUILD_CORE */ +# endif /* HAVE_DECLSPEC_DLL */ +#endif /* Py_ENABLE_SHARED */ + +/* If no external linkage macros defined by now, create defaults */ +#ifndef PyAPI_FUNC +# define PyAPI_FUNC(RTYPE) RTYPE +#endif +#ifndef PyAPI_DATA +# define PyAPI_DATA(RTYPE) extern RTYPE +#endif +#ifndef PyMODINIT_FUNC +# if defined(__cplusplus) +# define PyMODINIT_FUNC extern "C" PyObject* +# else /* __cplusplus */ +# define PyMODINIT_FUNC PyObject* +# endif /* __cplusplus */ +#endif + +/* limits.h constants that may be missing */ + +#ifndef INT_MAX +#define INT_MAX 2147483647 +#endif + +#ifndef LONG_MAX +#if SIZEOF_LONG == 4 +#define LONG_MAX 0X7FFFFFFFL +#elif SIZEOF_LONG == 8 +#define LONG_MAX 0X7FFFFFFFFFFFFFFFL +#else +#error "could not set LONG_MAX in pyport.h" +#endif +#endif + +#ifndef LONG_MIN +#define LONG_MIN (-LONG_MAX-1) +#endif + +#ifndef LONG_BIT +#define LONG_BIT (8 * SIZEOF_LONG) +#endif + +#if LONG_BIT != 8 * SIZEOF_LONG +/* 04-Oct-2000 LONG_BIT is apparently (mis)defined as 64 on some recent + * 32-bit platforms using gcc. We try to catch that here at compile-time + * rather than waiting for integer multiplication to trigger bogus + * overflows. + */ +#error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)." +#endif + +#ifdef __cplusplus +} +#endif + +/* + * Hide GCC attributes from compilers that don't support them. + */ +#if (!defined(__GNUC__) || __GNUC__ < 2 || \ + (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ) +#define Py_GCC_ATTRIBUTE(x) +#else +#define Py_GCC_ATTRIBUTE(x) __attribute__(x) +#endif + +/* + * Specify alignment on compilers that support it. + */ +#if defined(__GNUC__) && __GNUC__ >= 3 +#define Py_ALIGNED(x) __attribute__((aligned(x))) +#else +#define Py_ALIGNED(x) +#endif + +/* Eliminate end-of-loop code not reached warnings from SunPro C + * when using do{...}while(0) macros + */ +#ifdef __SUNPRO_C +#pragma error_messages (off,E_END_OF_LOOP_CODE_NOT_REACHED) +#endif + +#ifndef Py_LL +#define Py_LL(x) x##LL +#endif + +#ifndef Py_ULL +#define Py_ULL(x) Py_LL(x##U) +#endif + +#define Py_VA_COPY va_copy + +/* + * Convenient macros to deal with endianness of the platform. WORDS_BIGENDIAN is + * detected by configure and defined in pyconfig.h. The code in pyconfig.h + * also takes care of Apple's universal builds. + */ + +#ifdef WORDS_BIGENDIAN +#define PY_BIG_ENDIAN 1 +#define PY_LITTLE_ENDIAN 0 +#else +#define PY_BIG_ENDIAN 0 +#define PY_LITTLE_ENDIAN 1 +#endif + +#if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_BUILTIN) +/* + * Macros to protect CRT calls against instant termination when passed an + * invalid parameter (issue23524). + */ +#if defined _MSC_VER && _MSC_VER >= 1900 + +extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler; +#define _Py_BEGIN_SUPPRESS_IPH { _invalid_parameter_handler _Py_old_handler = \ + _set_thread_local_invalid_parameter_handler(_Py_silent_invalid_parameter_handler); +#define _Py_END_SUPPRESS_IPH _set_thread_local_invalid_parameter_handler(_Py_old_handler); } + +#else + +#define _Py_BEGIN_SUPPRESS_IPH +#define _Py_END_SUPPRESS_IPH + +#endif /* _MSC_VER >= 1900 */ +#endif /* Py_BUILD_CORE */ + +#ifdef __ANDROID__ +/* The Android langinfo.h header is not used. */ +#undef HAVE_LANGINFO_H +#undef CODESET +#endif + +/* Maximum value of the Windows DWORD type */ +#define PY_DWORD_MAX 4294967295U + +/* This macro used to tell whether Python was built with multithreading + * enabled. Now multithreading is always enabled, but keep the macro + * for compatibility. + */ +#ifndef WITH_THREAD +#define WITH_THREAD +#endif + +#endif /* Py_PYPORT_H */ diff --git a/my_env/Include/pystate.h b/my_env/Include/pystate.h new file mode 100644 index 000000000..f16ffb8fd --- /dev/null +++ b/my_env/Include/pystate.h @@ -0,0 +1,455 @@ + +/* Thread and interpreter state structures and their interfaces */ + + +#ifndef Py_PYSTATE_H +#define Py_PYSTATE_H +#ifdef __cplusplus +extern "C" { +#endif + +#include "pythread.h" + +/* This limitation is for performance and simplicity. If needed it can be +removed (with effort). */ +#define MAX_CO_EXTRA_USERS 255 + +/* State shared between threads */ + +struct _ts; /* Forward */ +struct _is; /* Forward */ +struct _frame; /* Forward declaration for PyFrameObject. */ + +#ifdef Py_LIMITED_API +typedef struct _is PyInterpreterState; +#else +typedef PyObject* (*_PyFrameEvalFunction)(struct _frame *, int); + + +typedef struct { + int install_signal_handlers; /* Install signal handlers? -1 means unset */ + + int ignore_environment; /* -E, Py_IgnoreEnvironmentFlag */ + int use_hash_seed; /* PYTHONHASHSEED=x */ + unsigned long hash_seed; + const char *allocator; /* Memory allocator: _PyMem_SetupAllocators() */ + int dev_mode; /* PYTHONDEVMODE, -X dev */ + int faulthandler; /* PYTHONFAULTHANDLER, -X faulthandler */ + int tracemalloc; /* PYTHONTRACEMALLOC, -X tracemalloc=N */ + int import_time; /* PYTHONPROFILEIMPORTTIME, -X importtime */ + int show_ref_count; /* -X showrefcount */ + int show_alloc_count; /* -X showalloccount */ + int dump_refs; /* PYTHONDUMPREFS */ + int malloc_stats; /* PYTHONMALLOCSTATS */ + int coerce_c_locale; /* PYTHONCOERCECLOCALE, -1 means unknown */ + int coerce_c_locale_warn; /* PYTHONCOERCECLOCALE=warn */ + int utf8_mode; /* PYTHONUTF8, -X utf8; -1 means unknown */ + + wchar_t *program_name; /* Program name, see also Py_GetProgramName() */ + int argc; /* Number of command line arguments, + -1 means unset */ + wchar_t **argv; /* Command line arguments */ + wchar_t *program; /* argv[0] or "" */ + + int nxoption; /* Number of -X options */ + wchar_t **xoptions; /* -X options */ + + int nwarnoption; /* Number of warnings options */ + wchar_t **warnoptions; /* Warnings options */ + + /* Path configuration inputs */ + wchar_t *module_search_path_env; /* PYTHONPATH environment variable */ + wchar_t *home; /* PYTHONHOME environment variable, + see also Py_SetPythonHome(). */ + + /* Path configuration outputs */ + int nmodule_search_path; /* Number of sys.path paths, + -1 means unset */ + wchar_t **module_search_paths; /* sys.path paths */ + wchar_t *executable; /* sys.executable */ + wchar_t *prefix; /* sys.prefix */ + wchar_t *base_prefix; /* sys.base_prefix */ + wchar_t *exec_prefix; /* sys.exec_prefix */ + wchar_t *base_exec_prefix; /* sys.base_exec_prefix */ + + /* Private fields */ + int _disable_importlib; /* Needed by freeze_importlib */ +} _PyCoreConfig; + +#define _PyCoreConfig_INIT \ + (_PyCoreConfig){ \ + .install_signal_handlers = -1, \ + .ignore_environment = -1, \ + .use_hash_seed = -1, \ + .coerce_c_locale = -1, \ + .faulthandler = -1, \ + .tracemalloc = -1, \ + .utf8_mode = -1, \ + .argc = -1, \ + .nmodule_search_path = -1} +/* Note: _PyCoreConfig_INIT sets other fields to 0/NULL */ + +/* Placeholders while working on the new configuration API + * + * See PEP 432 for final anticipated contents + */ +typedef struct { + int install_signal_handlers; /* Install signal handlers? -1 means unset */ + PyObject *argv; /* sys.argv list, can be NULL */ + PyObject *executable; /* sys.executable str */ + PyObject *prefix; /* sys.prefix str */ + PyObject *base_prefix; /* sys.base_prefix str, can be NULL */ + PyObject *exec_prefix; /* sys.exec_prefix str */ + PyObject *base_exec_prefix; /* sys.base_exec_prefix str, can be NULL */ + PyObject *warnoptions; /* sys.warnoptions list, can be NULL */ + PyObject *xoptions; /* sys._xoptions dict, can be NULL */ + PyObject *module_search_path; /* sys.path list */ +} _PyMainInterpreterConfig; + +#define _PyMainInterpreterConfig_INIT \ + (_PyMainInterpreterConfig){.install_signal_handlers = -1} +/* Note: _PyMainInterpreterConfig_INIT sets other fields to 0/NULL */ + +typedef struct _is { + + struct _is *next; + struct _ts *tstate_head; + + int64_t id; + int64_t id_refcount; + PyThread_type_lock id_mutex; + + PyObject *modules; + PyObject *modules_by_index; + PyObject *sysdict; + PyObject *builtins; + PyObject *importlib; + + /* Used in Python/sysmodule.c. */ + int check_interval; + + /* Used in Modules/_threadmodule.c. */ + long num_threads; + /* Support for runtime thread stack size tuning. + A value of 0 means using the platform's default stack size + or the size specified by the THREAD_STACK_SIZE macro. */ + /* Used in Python/thread.c. */ + size_t pythread_stacksize; + + PyObject *codec_search_path; + PyObject *codec_search_cache; + PyObject *codec_error_registry; + int codecs_initialized; + int fscodec_initialized; + + _PyCoreConfig core_config; + _PyMainInterpreterConfig config; +#ifdef HAVE_DLOPEN + int dlopenflags; +#endif + + PyObject *builtins_copy; + PyObject *import_func; + /* Initialized to PyEval_EvalFrameDefault(). */ + _PyFrameEvalFunction eval_frame; + + Py_ssize_t co_extra_user_count; + freefunc co_extra_freefuncs[MAX_CO_EXTRA_USERS]; + +#ifdef HAVE_FORK + PyObject *before_forkers; + PyObject *after_forkers_parent; + PyObject *after_forkers_child; +#endif + /* AtExit module */ + void (*pyexitfunc)(PyObject *); + PyObject *pyexitmodule; + + uint64_t tstate_next_unique_id; +} PyInterpreterState; +#endif /* !Py_LIMITED_API */ + + +/* State unique per thread */ + +#ifndef Py_LIMITED_API +/* Py_tracefunc return -1 when raising an exception, or 0 for success. */ +typedef int (*Py_tracefunc)(PyObject *, struct _frame *, int, PyObject *); + +/* The following values are used for 'what' for tracefunc functions + * + * To add a new kind of trace event, also update "trace_init" in + * Python/sysmodule.c to define the Python level event name + */ +#define PyTrace_CALL 0 +#define PyTrace_EXCEPTION 1 +#define PyTrace_LINE 2 +#define PyTrace_RETURN 3 +#define PyTrace_C_CALL 4 +#define PyTrace_C_EXCEPTION 5 +#define PyTrace_C_RETURN 6 +#define PyTrace_OPCODE 7 +#endif /* Py_LIMITED_API */ + +#ifdef Py_LIMITED_API +typedef struct _ts PyThreadState; +#else + +typedef struct _err_stackitem { + /* This struct represents an entry on the exception stack, which is a + * per-coroutine state. (Coroutine in the computer science sense, + * including the thread and generators). + * This ensures that the exception state is not impacted by "yields" + * from an except handler. + */ + PyObject *exc_type, *exc_value, *exc_traceback; + + struct _err_stackitem *previous_item; + +} _PyErr_StackItem; + + +typedef struct _ts { + /* See Python/ceval.c for comments explaining most fields */ + + struct _ts *prev; + struct _ts *next; + PyInterpreterState *interp; + + struct _frame *frame; + int recursion_depth; + char overflowed; /* The stack has overflowed. Allow 50 more calls + to handle the runtime error. */ + char recursion_critical; /* The current calls must not cause + a stack overflow. */ + int stackcheck_counter; + + /* 'tracing' keeps track of the execution depth when tracing/profiling. + This is to prevent the actual trace/profile code from being recorded in + the trace/profile. */ + int tracing; + int use_tracing; + + Py_tracefunc c_profilefunc; + Py_tracefunc c_tracefunc; + PyObject *c_profileobj; + PyObject *c_traceobj; + + /* The exception currently being raised */ + PyObject *curexc_type; + PyObject *curexc_value; + PyObject *curexc_traceback; + + /* The exception currently being handled, if no coroutines/generators + * are present. Always last element on the stack referred to be exc_info. + */ + _PyErr_StackItem exc_state; + + /* Pointer to the top of the stack of the exceptions currently + * being handled */ + _PyErr_StackItem *exc_info; + + PyObject *dict; /* Stores per-thread state */ + + int gilstate_counter; + + PyObject *async_exc; /* Asynchronous exception to raise */ + unsigned long thread_id; /* Thread id where this tstate was created */ + + int trash_delete_nesting; + PyObject *trash_delete_later; + + /* Called when a thread state is deleted normally, but not when it + * is destroyed after fork(). + * Pain: to prevent rare but fatal shutdown errors (issue 18808), + * Thread.join() must wait for the join'ed thread's tstate to be unlinked + * from the tstate chain. That happens at the end of a thread's life, + * in pystate.c. + * The obvious way doesn't quite work: create a lock which the tstate + * unlinking code releases, and have Thread.join() wait to acquire that + * lock. The problem is that we _are_ at the end of the thread's life: + * if the thread holds the last reference to the lock, decref'ing the + * lock will delete the lock, and that may trigger arbitrary Python code + * if there's a weakref, with a callback, to the lock. But by this time + * _PyThreadState_Current is already NULL, so only the simplest of C code + * can be allowed to run (in particular it must not be possible to + * release the GIL). + * So instead of holding the lock directly, the tstate holds a weakref to + * the lock: that's the value of on_delete_data below. Decref'ing a + * weakref is harmless. + * on_delete points to _threadmodule.c's static release_sentinel() function. + * After the tstate is unlinked, release_sentinel is called with the + * weakref-to-lock (on_delete_data) argument, and release_sentinel releases + * the indirectly held lock. + */ + void (*on_delete)(void *); + void *on_delete_data; + + int coroutine_origin_tracking_depth; + + PyObject *coroutine_wrapper; + int in_coroutine_wrapper; + + PyObject *async_gen_firstiter; + PyObject *async_gen_finalizer; + + PyObject *context; + uint64_t context_ver; + + /* Unique thread state id. */ + uint64_t id; + + /* XXX signal handlers should also be here */ + +} PyThreadState; +#endif /* !Py_LIMITED_API */ + + +PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_New(void); +PyAPI_FUNC(void) PyInterpreterState_Clear(PyInterpreterState *); +PyAPI_FUNC(void) PyInterpreterState_Delete(PyInterpreterState *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 +/* New in 3.7 */ +PyAPI_FUNC(int64_t) PyInterpreterState_GetID(PyInterpreterState *); +#endif +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyState_AddModule(PyObject*, struct PyModuleDef*); +#endif /* !Py_LIMITED_API */ +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +/* New in 3.3 */ +PyAPI_FUNC(int) PyState_AddModule(PyObject*, struct PyModuleDef*); +PyAPI_FUNC(int) PyState_RemoveModule(struct PyModuleDef*); +#endif +PyAPI_FUNC(PyObject*) PyState_FindModule(struct PyModuleDef*); +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _PyState_ClearModules(void); +#endif + +PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *); +PyAPI_FUNC(void) _PyThreadState_Init(PyThreadState *); +#endif /* !Py_LIMITED_API */ +PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *); +PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _PyThreadState_DeleteExcept(PyThreadState *tstate); +#endif /* !Py_LIMITED_API */ +PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void); +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _PyGILState_Reinit(void); +#endif /* !Py_LIMITED_API */ + +/* Return the current thread state. The global interpreter lock must be held. + * When the current thread state is NULL, this issues a fatal error (so that + * the caller needn't check for NULL). */ +PyAPI_FUNC(PyThreadState *) PyThreadState_Get(void); + +#ifndef Py_LIMITED_API +/* Similar to PyThreadState_Get(), but don't issue a fatal error + * if it is NULL. */ +PyAPI_FUNC(PyThreadState *) _PyThreadState_UncheckedGet(void); +#endif /* !Py_LIMITED_API */ + +PyAPI_FUNC(PyThreadState *) PyThreadState_Swap(PyThreadState *); +PyAPI_FUNC(PyObject *) PyThreadState_GetDict(void); +PyAPI_FUNC(int) PyThreadState_SetAsyncExc(unsigned long, PyObject *); + + +/* Variable and macro for in-line access to current thread state */ + +/* Assuming the current thread holds the GIL, this is the + PyThreadState for the current thread. */ +#ifdef Py_BUILD_CORE +# define _PyThreadState_Current _PyRuntime.gilstate.tstate_current +# define PyThreadState_GET() \ + ((PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current)) +#else +# define PyThreadState_GET() PyThreadState_Get() +#endif + +typedef + enum {PyGILState_LOCKED, PyGILState_UNLOCKED} + PyGILState_STATE; + + +/* Ensure that the current thread is ready to call the Python + C API, regardless of the current state of Python, or of its + thread lock. This may be called as many times as desired + by a thread so long as each call is matched with a call to + PyGILState_Release(). In general, other thread-state APIs may + be used between _Ensure() and _Release() calls, so long as the + thread-state is restored to its previous state before the Release(). + For example, normal use of the Py_BEGIN_ALLOW_THREADS/ + Py_END_ALLOW_THREADS macros are acceptable. + + The return value is an opaque "handle" to the thread state when + PyGILState_Ensure() was called, and must be passed to + PyGILState_Release() to ensure Python is left in the same state. Even + though recursive calls are allowed, these handles can *not* be shared - + each unique call to PyGILState_Ensure must save the handle for its + call to PyGILState_Release. + + When the function returns, the current thread will hold the GIL. + + Failure is a fatal error. +*/ +PyAPI_FUNC(PyGILState_STATE) PyGILState_Ensure(void); + +/* Release any resources previously acquired. After this call, Python's + state will be the same as it was prior to the corresponding + PyGILState_Ensure() call (but generally this state will be unknown to + the caller, hence the use of the GILState API.) + + Every call to PyGILState_Ensure must be matched by a call to + PyGILState_Release on the same thread. +*/ +PyAPI_FUNC(void) PyGILState_Release(PyGILState_STATE); + +/* Helper/diagnostic function - get the current thread state for + this thread. May return NULL if no GILState API has been used + on the current thread. Note that the main thread always has such a + thread-state, even if no auto-thread-state call has been made + on the main thread. +*/ +PyAPI_FUNC(PyThreadState *) PyGILState_GetThisThreadState(void); + +#ifndef Py_LIMITED_API +/* Helper/diagnostic function - return 1 if the current thread + currently holds the GIL, 0 otherwise. + + The function returns 1 if _PyGILState_check_enabled is non-zero. */ +PyAPI_FUNC(int) PyGILState_Check(void); + +/* Unsafe function to get the single PyInterpreterState used by this process' + GILState implementation. + + Return NULL before _PyGILState_Init() is called and after _PyGILState_Fini() + is called. */ +PyAPI_FUNC(PyInterpreterState *) _PyGILState_GetInterpreterStateUnsafe(void); +#endif /* !Py_LIMITED_API */ + + +/* The implementation of sys._current_frames() Returns a dict mapping + thread id to that thread's current frame. +*/ +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyThread_CurrentFrames(void); +#endif + +/* Routines for advanced debuggers, requested by David Beazley. + Don't use unless you know what you are doing! */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Main(void); +PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Head(void); +PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Next(PyInterpreterState *); +PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *); +PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *); + +typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_PYSTATE_H */ diff --git a/my_env/Include/pystrcmp.h b/my_env/Include/pystrcmp.h new file mode 100644 index 000000000..edb12397e --- /dev/null +++ b/my_env/Include/pystrcmp.h @@ -0,0 +1,23 @@ +#ifndef Py_STRCMP_H +#define Py_STRCMP_H + +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_FUNC(int) PyOS_mystrnicmp(const char *, const char *, Py_ssize_t); +PyAPI_FUNC(int) PyOS_mystricmp(const char *, const char *); + +#ifdef MS_WINDOWS +#define PyOS_strnicmp strnicmp +#define PyOS_stricmp stricmp +#else +#define PyOS_strnicmp PyOS_mystrnicmp +#define PyOS_stricmp PyOS_mystricmp +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* !Py_STRCMP_H */ diff --git a/my_env/Include/pystrhex.h b/my_env/Include/pystrhex.h new file mode 100644 index 000000000..66a30e223 --- /dev/null +++ b/my_env/Include/pystrhex.h @@ -0,0 +1,19 @@ +#ifndef Py_STRHEX_H +#define Py_STRHEX_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API +/* Returns a str() containing the hex representation of argbuf. */ +PyAPI_FUNC(PyObject*) _Py_strhex(const char* argbuf, const Py_ssize_t arglen); +/* Returns a bytes() containing the ASCII hex representation of argbuf. */ +PyAPI_FUNC(PyObject*) _Py_strhex_bytes(const char* argbuf, const Py_ssize_t arglen); +#endif /* !Py_LIMITED_API */ + +#ifdef __cplusplus +} +#endif + +#endif /* !Py_STRHEX_H */ diff --git a/my_env/Include/pystrtod.h b/my_env/Include/pystrtod.h new file mode 100644 index 000000000..c1e84de6f --- /dev/null +++ b/my_env/Include/pystrtod.h @@ -0,0 +1,45 @@ +#ifndef Py_STRTOD_H +#define Py_STRTOD_H + +#ifdef __cplusplus +extern "C" { +#endif + + +PyAPI_FUNC(double) PyOS_string_to_double(const char *str, + char **endptr, + PyObject *overflow_exception); + +/* The caller is responsible for calling PyMem_Free to free the buffer + that's is returned. */ +PyAPI_FUNC(char *) PyOS_double_to_string(double val, + char format_code, + int precision, + int flags, + int *type); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _Py_string_to_number_with_underscores( + const char *str, Py_ssize_t len, const char *what, PyObject *obj, void *arg, + PyObject *(*innerfunc)(const char *, Py_ssize_t, void *)); + +PyAPI_FUNC(double) _Py_parse_inf_or_nan(const char *p, char **endptr); +#endif + + +/* PyOS_double_to_string's "flags" parameter can be set to 0 or more of: */ +#define Py_DTSF_SIGN 0x01 /* always add the sign */ +#define Py_DTSF_ADD_DOT_0 0x02 /* if the result is an integer add ".0" */ +#define Py_DTSF_ALT 0x04 /* "alternate" formatting. it's format_code + specific */ + +/* PyOS_double_to_string's "type", if non-NULL, will be set to one of: */ +#define Py_DTST_FINITE 0 +#define Py_DTST_INFINITE 1 +#define Py_DTST_NAN 2 + +#ifdef __cplusplus +} +#endif + +#endif /* !Py_STRTOD_H */ diff --git a/my_env/Include/pythonrun.h b/my_env/Include/pythonrun.h new file mode 100644 index 000000000..6f0c6fc65 --- /dev/null +++ b/my_env/Include/pythonrun.h @@ -0,0 +1,181 @@ + +/* Interfaces to parse and execute pieces of python code */ + +#ifndef Py_PYTHONRUN_H +#define Py_PYTHONRUN_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *); +PyAPI_FUNC(int) PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *); +PyAPI_FUNC(int) PyRun_AnyFileExFlags( + FILE *fp, + const char *filename, /* decoded from the filesystem encoding */ + int closeit, + PyCompilerFlags *flags); +PyAPI_FUNC(int) PyRun_SimpleFileExFlags( + FILE *fp, + const char *filename, /* decoded from the filesystem encoding */ + int closeit, + PyCompilerFlags *flags); +PyAPI_FUNC(int) PyRun_InteractiveOneFlags( + FILE *fp, + const char *filename, /* decoded from the filesystem encoding */ + PyCompilerFlags *flags); +PyAPI_FUNC(int) PyRun_InteractiveOneObject( + FILE *fp, + PyObject *filename, + PyCompilerFlags *flags); +PyAPI_FUNC(int) PyRun_InteractiveLoopFlags( + FILE *fp, + const char *filename, /* decoded from the filesystem encoding */ + PyCompilerFlags *flags); + +PyAPI_FUNC(struct _mod *) PyParser_ASTFromString( + const char *s, + const char *filename, /* decoded from the filesystem encoding */ + int start, + PyCompilerFlags *flags, + PyArena *arena); +PyAPI_FUNC(struct _mod *) PyParser_ASTFromStringObject( + const char *s, + PyObject *filename, + int start, + PyCompilerFlags *flags, + PyArena *arena); +PyAPI_FUNC(struct _mod *) PyParser_ASTFromFile( + FILE *fp, + const char *filename, /* decoded from the filesystem encoding */ + const char* enc, + int start, + const char *ps1, + const char *ps2, + PyCompilerFlags *flags, + int *errcode, + PyArena *arena); +PyAPI_FUNC(struct _mod *) PyParser_ASTFromFileObject( + FILE *fp, + PyObject *filename, + const char* enc, + int start, + const char *ps1, + const char *ps2, + PyCompilerFlags *flags, + int *errcode, + PyArena *arena); +#endif + +#ifndef PyParser_SimpleParseString +#define PyParser_SimpleParseString(S, B) \ + PyParser_SimpleParseStringFlags(S, B, 0) +#define PyParser_SimpleParseFile(FP, S, B) \ + PyParser_SimpleParseFileFlags(FP, S, B, 0) +#endif +PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlags(const char *, int, + int); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlagsFilename(const char *, + const char *, + int, int); +#endif +PyAPI_FUNC(struct _node *) PyParser_SimpleParseFileFlags(FILE *, const char *, + int, int); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) PyRun_StringFlags(const char *, int, PyObject *, + PyObject *, PyCompilerFlags *); + +PyAPI_FUNC(PyObject *) PyRun_FileExFlags( + FILE *fp, + const char *filename, /* decoded from the filesystem encoding */ + int start, + PyObject *globals, + PyObject *locals, + int closeit, + PyCompilerFlags *flags); +#endif + +#ifdef Py_LIMITED_API +PyAPI_FUNC(PyObject *) Py_CompileString(const char *, const char *, int); +#else +#define Py_CompileString(str, p, s) Py_CompileStringExFlags(str, p, s, NULL, -1) +#define Py_CompileStringFlags(str, p, s, f) Py_CompileStringExFlags(str, p, s, f, -1) +PyAPI_FUNC(PyObject *) Py_CompileStringExFlags( + const char *str, + const char *filename, /* decoded from the filesystem encoding */ + int start, + PyCompilerFlags *flags, + int optimize); +PyAPI_FUNC(PyObject *) Py_CompileStringObject( + const char *str, + PyObject *filename, int start, + PyCompilerFlags *flags, + int optimize); +#endif +PyAPI_FUNC(struct symtable *) Py_SymtableString( + const char *str, + const char *filename, /* decoded from the filesystem encoding */ + int start); +#ifndef Py_LIMITED_API +PyAPI_FUNC(struct symtable *) Py_SymtableStringObject( + const char *str, + PyObject *filename, + int start); +#endif + +PyAPI_FUNC(void) PyErr_Print(void); +PyAPI_FUNC(void) PyErr_PrintEx(int); +PyAPI_FUNC(void) PyErr_Display(PyObject *, PyObject *, PyObject *); + +#ifndef Py_LIMITED_API +/* Use macros for a bunch of old variants */ +#define PyRun_String(str, s, g, l) PyRun_StringFlags(str, s, g, l, NULL) +#define PyRun_AnyFile(fp, name) PyRun_AnyFileExFlags(fp, name, 0, NULL) +#define PyRun_AnyFileEx(fp, name, closeit) \ + PyRun_AnyFileExFlags(fp, name, closeit, NULL) +#define PyRun_AnyFileFlags(fp, name, flags) \ + PyRun_AnyFileExFlags(fp, name, 0, flags) +#define PyRun_SimpleString(s) PyRun_SimpleStringFlags(s, NULL) +#define PyRun_SimpleFile(f, p) PyRun_SimpleFileExFlags(f, p, 0, NULL) +#define PyRun_SimpleFileEx(f, p, c) PyRun_SimpleFileExFlags(f, p, c, NULL) +#define PyRun_InteractiveOne(f, p) PyRun_InteractiveOneFlags(f, p, NULL) +#define PyRun_InteractiveLoop(f, p) PyRun_InteractiveLoopFlags(f, p, NULL) +#define PyRun_File(fp, p, s, g, l) \ + PyRun_FileExFlags(fp, p, s, g, l, 0, NULL) +#define PyRun_FileEx(fp, p, s, g, l, c) \ + PyRun_FileExFlags(fp, p, s, g, l, c, NULL) +#define PyRun_FileFlags(fp, p, s, g, l, flags) \ + PyRun_FileExFlags(fp, p, s, g, l, 0, flags) +#endif + +/* Stuff with no proper home (yet) */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(char *) PyOS_Readline(FILE *, FILE *, const char *); +#endif +PyAPI_DATA(int) (*PyOS_InputHook)(void); +PyAPI_DATA(char) *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *); +#ifndef Py_LIMITED_API +PyAPI_DATA(PyThreadState*) _PyOS_ReadlineTState; +#endif + +/* Stack size, in "pointers" (so we get extra safety margins + on 64-bit platforms). On a 32-bit platform, this translates + to an 8k margin. */ +#define PYOS_STACK_MARGIN 2048 + +#if defined(WIN32) && !defined(MS_WIN64) && defined(_MSC_VER) && _MSC_VER >= 1300 +/* Enable stack checking under Microsoft C */ +#define USE_STACKCHECK +#endif + +#ifdef USE_STACKCHECK +/* Check that we aren't overflowing our stack */ +PyAPI_FUNC(int) PyOS_CheckStack(void); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_PYTHONRUN_H */ diff --git a/my_env/Include/pythread.h b/my_env/Include/pythread.h new file mode 100644 index 000000000..eb61033b2 --- /dev/null +++ b/my_env/Include/pythread.h @@ -0,0 +1,155 @@ + +#ifndef Py_PYTHREAD_H +#define Py_PYTHREAD_H + +typedef void *PyThread_type_lock; +typedef void *PyThread_type_sema; + +#ifdef __cplusplus +extern "C" { +#endif + +/* Return status codes for Python lock acquisition. Chosen for maximum + * backwards compatibility, ie failure -> 0, success -> 1. */ +typedef enum PyLockStatus { + PY_LOCK_FAILURE = 0, + PY_LOCK_ACQUIRED = 1, + PY_LOCK_INTR +} PyLockStatus; + +#ifndef Py_LIMITED_API +#define PYTHREAD_INVALID_THREAD_ID ((unsigned long)-1) +#endif + +PyAPI_FUNC(void) PyThread_init_thread(void); +PyAPI_FUNC(unsigned long) PyThread_start_new_thread(void (*)(void *), void *); +PyAPI_FUNC(void) PyThread_exit_thread(void); +PyAPI_FUNC(unsigned long) PyThread_get_thread_ident(void); + +PyAPI_FUNC(PyThread_type_lock) PyThread_allocate_lock(void); +PyAPI_FUNC(void) PyThread_free_lock(PyThread_type_lock); +PyAPI_FUNC(int) PyThread_acquire_lock(PyThread_type_lock, int); +#define WAIT_LOCK 1 +#define NOWAIT_LOCK 0 + +/* PY_TIMEOUT_T is the integral type used to specify timeouts when waiting + on a lock (see PyThread_acquire_lock_timed() below). + PY_TIMEOUT_MAX is the highest usable value (in microseconds) of that + type, and depends on the system threading API. + + NOTE: this isn't the same value as `_thread.TIMEOUT_MAX`. The _thread + module exposes a higher-level API, with timeouts expressed in seconds + and floating-point numbers allowed. +*/ +#define PY_TIMEOUT_T long long + +#if defined(_POSIX_THREADS) + /* PyThread_acquire_lock_timed() uses _PyTime_FromNanoseconds(us * 1000), + convert microseconds to nanoseconds. */ +# define PY_TIMEOUT_MAX (PY_LLONG_MAX / 1000) +#elif defined (NT_THREADS) + /* In the NT API, the timeout is a DWORD and is expressed in milliseconds */ +# if 0xFFFFFFFFLL * 1000 < PY_LLONG_MAX +# define PY_TIMEOUT_MAX (0xFFFFFFFFLL * 1000) +# else +# define PY_TIMEOUT_MAX PY_LLONG_MAX +# endif +#else +# define PY_TIMEOUT_MAX PY_LLONG_MAX +#endif + + +/* If microseconds == 0, the call is non-blocking: it returns immediately + even when the lock can't be acquired. + If microseconds > 0, the call waits up to the specified duration. + If microseconds < 0, the call waits until success (or abnormal failure) + + microseconds must be less than PY_TIMEOUT_MAX. Behaviour otherwise is + undefined. + + If intr_flag is true and the acquire is interrupted by a signal, then the + call will return PY_LOCK_INTR. The caller may reattempt to acquire the + lock. +*/ +PyAPI_FUNC(PyLockStatus) PyThread_acquire_lock_timed(PyThread_type_lock, + PY_TIMEOUT_T microseconds, + int intr_flag); + +PyAPI_FUNC(void) PyThread_release_lock(PyThread_type_lock); + +PyAPI_FUNC(size_t) PyThread_get_stacksize(void); +PyAPI_FUNC(int) PyThread_set_stacksize(size_t); + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(PyObject*) PyThread_GetInfo(void); +#endif + + +/* Thread Local Storage (TLS) API + TLS API is DEPRECATED. Use Thread Specific Storage (TSS) API. + + The existing TLS API has used int to represent TLS keys across all + platforms, but it is not POSIX-compliant. Therefore, the new TSS API uses + opaque data type to represent TSS keys to be compatible (see PEP 539). +*/ +PyAPI_FUNC(int) PyThread_create_key(void) Py_DEPRECATED(3.7); +PyAPI_FUNC(void) PyThread_delete_key(int key) Py_DEPRECATED(3.7); +PyAPI_FUNC(int) PyThread_set_key_value(int key, void *value) Py_DEPRECATED(3.7); +PyAPI_FUNC(void *) PyThread_get_key_value(int key) Py_DEPRECATED(3.7); +PyAPI_FUNC(void) PyThread_delete_key_value(int key) Py_DEPRECATED(3.7); + +/* Cleanup after a fork */ +PyAPI_FUNC(void) PyThread_ReInitTLS(void) Py_DEPRECATED(3.7); + + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 +/* New in 3.7 */ +/* Thread Specific Storage (TSS) API */ + +typedef struct _Py_tss_t Py_tss_t; /* opaque */ + +#ifndef Py_LIMITED_API +#if defined(_POSIX_THREADS) + /* Darwin needs pthread.h to know type name the pthread_key_t. */ +# include +# define NATIVE_TSS_KEY_T pthread_key_t +#elif defined(NT_THREADS) + /* In Windows, native TSS key type is DWORD, + but hardcode the unsigned long to avoid errors for include directive. + */ +# define NATIVE_TSS_KEY_T unsigned long +#else +# error "Require native threads. See https://bugs.python.org/issue31370" +#endif + +/* When Py_LIMITED_API is not defined, the type layout of Py_tss_t is + exposed to allow static allocation in the API clients. Even in this case, + you must handle TSS keys through API functions due to compatibility. +*/ +struct _Py_tss_t { + int _is_initialized; + NATIVE_TSS_KEY_T _key; +}; + +#undef NATIVE_TSS_KEY_T + +/* When static allocation, you must initialize with Py_tss_NEEDS_INIT. */ +#define Py_tss_NEEDS_INIT {0} +#endif /* !Py_LIMITED_API */ + +PyAPI_FUNC(Py_tss_t *) PyThread_tss_alloc(void); +PyAPI_FUNC(void) PyThread_tss_free(Py_tss_t *key); + +/* The parameter key must not be NULL. */ +PyAPI_FUNC(int) PyThread_tss_is_created(Py_tss_t *key); +PyAPI_FUNC(int) PyThread_tss_create(Py_tss_t *key); +PyAPI_FUNC(void) PyThread_tss_delete(Py_tss_t *key); +PyAPI_FUNC(int) PyThread_tss_set(Py_tss_t *key, void *value); +PyAPI_FUNC(void *) PyThread_tss_get(Py_tss_t *key); +#endif /* New in 3.7 */ + +#ifdef __cplusplus +} +#endif + +#endif /* !Py_PYTHREAD_H */ diff --git a/my_env/Include/pytime.h b/my_env/Include/pytime.h new file mode 100644 index 000000000..4870a9df5 --- /dev/null +++ b/my_env/Include/pytime.h @@ -0,0 +1,246 @@ +#ifndef Py_LIMITED_API +#ifndef Py_PYTIME_H +#define Py_PYTIME_H + +#include "pyconfig.h" /* include for defines */ +#include "object.h" + +/************************************************************************** +Symbols and macros to supply platform-independent interfaces to time related +functions and constants +**************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +/* _PyTime_t: Python timestamp with subsecond precision. It can be used to + store a duration, and so indirectly a date (related to another date, like + UNIX epoch). */ +typedef int64_t _PyTime_t; +#define _PyTime_MIN PY_LLONG_MIN +#define _PyTime_MAX PY_LLONG_MAX + +typedef enum { + /* Round towards minus infinity (-inf). + For example, used to read a clock. */ + _PyTime_ROUND_FLOOR=0, + /* Round towards infinity (+inf). + For example, used for timeout to wait "at least" N seconds. */ + _PyTime_ROUND_CEILING=1, + /* Round to nearest with ties going to nearest even integer. + For example, used to round from a Python float. */ + _PyTime_ROUND_HALF_EVEN=2, + /* Round away from zero + For example, used for timeout. _PyTime_ROUND_CEILING rounds + -1e-9 to 0 milliseconds which causes bpo-31786 issue. + _PyTime_ROUND_UP rounds -1e-9 to -1 millisecond which keeps + the timeout sign as expected. select.poll(timeout) must block + for negative values." */ + _PyTime_ROUND_UP=3, + /* _PyTime_ROUND_TIMEOUT (an alias for _PyTime_ROUND_UP) should be + used for timeouts. */ + _PyTime_ROUND_TIMEOUT = _PyTime_ROUND_UP +} _PyTime_round_t; + + +/* Convert a time_t to a PyLong. */ +PyAPI_FUNC(PyObject *) _PyLong_FromTime_t( + time_t sec); + +/* Convert a PyLong to a time_t. */ +PyAPI_FUNC(time_t) _PyLong_AsTime_t( + PyObject *obj); + +/* Convert a number of seconds, int or float, to time_t. */ +PyAPI_FUNC(int) _PyTime_ObjectToTime_t( + PyObject *obj, + time_t *sec, + _PyTime_round_t); + +/* Convert a number of seconds, int or float, to a timeval structure. + usec is in the range [0; 999999] and rounded towards zero. + For example, -1.2 is converted to (-2, 800000). */ +PyAPI_FUNC(int) _PyTime_ObjectToTimeval( + PyObject *obj, + time_t *sec, + long *usec, + _PyTime_round_t); + +/* Convert a number of seconds, int or float, to a timespec structure. + nsec is in the range [0; 999999999] and rounded towards zero. + For example, -1.2 is converted to (-2, 800000000). */ +PyAPI_FUNC(int) _PyTime_ObjectToTimespec( + PyObject *obj, + time_t *sec, + long *nsec, + _PyTime_round_t); + + +/* Create a timestamp from a number of seconds. */ +PyAPI_FUNC(_PyTime_t) _PyTime_FromSeconds(int seconds); + +/* Macro to create a timestamp from a number of seconds, no integer overflow. + Only use the macro for small values, prefer _PyTime_FromSeconds(). */ +#define _PYTIME_FROMSECONDS(seconds) \ + ((_PyTime_t)(seconds) * (1000 * 1000 * 1000)) + +/* Create a timestamp from a number of nanoseconds. */ +PyAPI_FUNC(_PyTime_t) _PyTime_FromNanoseconds(_PyTime_t ns); + +/* Create a timestamp from nanoseconds (Python int). */ +PyAPI_FUNC(int) _PyTime_FromNanosecondsObject(_PyTime_t *t, + PyObject *obj); + +/* Convert a number of seconds (Python float or int) to a timetamp. + Raise an exception and return -1 on error, return 0 on success. */ +PyAPI_FUNC(int) _PyTime_FromSecondsObject(_PyTime_t *t, + PyObject *obj, + _PyTime_round_t round); + +/* Convert a number of milliseconds (Python float or int, 10^-3) to a timetamp. + Raise an exception and return -1 on error, return 0 on success. */ +PyAPI_FUNC(int) _PyTime_FromMillisecondsObject(_PyTime_t *t, + PyObject *obj, + _PyTime_round_t round); + +/* Convert a timestamp to a number of seconds as a C double. */ +PyAPI_FUNC(double) _PyTime_AsSecondsDouble(_PyTime_t t); + +/* Convert timestamp to a number of milliseconds (10^-3 seconds). */ +PyAPI_FUNC(_PyTime_t) _PyTime_AsMilliseconds(_PyTime_t t, + _PyTime_round_t round); + +/* Convert timestamp to a number of microseconds (10^-6 seconds). */ +PyAPI_FUNC(_PyTime_t) _PyTime_AsMicroseconds(_PyTime_t t, + _PyTime_round_t round); + +/* Convert timestamp to a number of nanoseconds (10^-9 seconds) as a Python int + object. */ +PyAPI_FUNC(PyObject *) _PyTime_AsNanosecondsObject(_PyTime_t t); + +/* Create a timestamp from a timeval structure. + Raise an exception and return -1 on overflow, return 0 on success. */ +PyAPI_FUNC(int) _PyTime_FromTimeval(_PyTime_t *tp, struct timeval *tv); + +/* Convert a timestamp to a timeval structure (microsecond resolution). + tv_usec is always positive. + Raise an exception and return -1 if the conversion overflowed, + return 0 on success. */ +PyAPI_FUNC(int) _PyTime_AsTimeval(_PyTime_t t, + struct timeval *tv, + _PyTime_round_t round); + +/* Similar to _PyTime_AsTimeval(), but don't raise an exception on error. */ +PyAPI_FUNC(int) _PyTime_AsTimeval_noraise(_PyTime_t t, + struct timeval *tv, + _PyTime_round_t round); + +/* Convert a timestamp to a number of seconds (secs) and microseconds (us). + us is always positive. This function is similar to _PyTime_AsTimeval() + except that secs is always a time_t type, whereas the timeval structure + uses a C long for tv_sec on Windows. + Raise an exception and return -1 if the conversion overflowed, + return 0 on success. */ +PyAPI_FUNC(int) _PyTime_AsTimevalTime_t( + _PyTime_t t, + time_t *secs, + int *us, + _PyTime_round_t round); + +#if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_KQUEUE) +/* Create a timestamp from a timespec structure. + Raise an exception and return -1 on overflow, return 0 on success. */ +PyAPI_FUNC(int) _PyTime_FromTimespec(_PyTime_t *tp, struct timespec *ts); + +/* Convert a timestamp to a timespec structure (nanosecond resolution). + tv_nsec is always positive. + Raise an exception and return -1 on error, return 0 on success. */ +PyAPI_FUNC(int) _PyTime_AsTimespec(_PyTime_t t, struct timespec *ts); +#endif + +/* Compute ticks * mul / div. + The caller must ensure that ((div - 1) * mul) cannot overflow. */ +PyAPI_FUNC(_PyTime_t) _PyTime_MulDiv(_PyTime_t ticks, + _PyTime_t mul, + _PyTime_t div); + +/* Get the current time from the system clock. + + The function cannot fail. _PyTime_Init() ensures that the system clock + works. */ +PyAPI_FUNC(_PyTime_t) _PyTime_GetSystemClock(void); + +/* Get the time of a monotonic clock, i.e. a clock that cannot go backwards. + The clock is not affected by system clock updates. The reference point of + the returned value is undefined, so that only the difference between the + results of consecutive calls is valid. + + The function cannot fail. _PyTime_Init() ensures that a monotonic clock + is available and works. */ +PyAPI_FUNC(_PyTime_t) _PyTime_GetMonotonicClock(void); + + +/* Structure used by time.get_clock_info() */ +typedef struct { + const char *implementation; + int monotonic; + int adjustable; + double resolution; +} _Py_clock_info_t; + +/* Get the current time from the system clock. + * Fill clock information if info is not NULL. + * Raise an exception and return -1 on error, return 0 on success. + */ +PyAPI_FUNC(int) _PyTime_GetSystemClockWithInfo( + _PyTime_t *t, + _Py_clock_info_t *info); + +/* Get the time of a monotonic clock, i.e. a clock that cannot go backwards. + The clock is not affected by system clock updates. The reference point of + the returned value is undefined, so that only the difference between the + results of consecutive calls is valid. + + Fill info (if set) with information of the function used to get the time. + + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) _PyTime_GetMonotonicClockWithInfo( + _PyTime_t *t, + _Py_clock_info_t *info); + + +/* Initialize time. + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) _PyTime_Init(void); + +/* Converts a timestamp to the Gregorian time, using the local time zone. + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) _PyTime_localtime(time_t t, struct tm *tm); + +/* Converts a timestamp to the Gregorian time, assuming UTC. + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) _PyTime_gmtime(time_t t, struct tm *tm); + +/* Get the performance counter: clock with the highest available resolution to + measure a short duration. + + The function cannot fail. _PyTime_Init() ensures that the system clock + works. */ +PyAPI_FUNC(_PyTime_t) _PyTime_GetPerfCounter(void); + +/* Get the performance counter: clock with the highest available resolution to + measure a short duration. + + Fill info (if set) with information of the function used to get the time. + + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) _PyTime_GetPerfCounterWithInfo( + _PyTime_t *t, + _Py_clock_info_t *info); + +#ifdef __cplusplus +} +#endif + +#endif /* Py_PYTIME_H */ +#endif /* Py_LIMITED_API */ diff --git a/my_env/Include/rangeobject.h b/my_env/Include/rangeobject.h new file mode 100644 index 000000000..7e4dc2889 --- /dev/null +++ b/my_env/Include/rangeobject.h @@ -0,0 +1,27 @@ + +/* Range object interface */ + +#ifndef Py_RANGEOBJECT_H +#define Py_RANGEOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +/* +A range object represents an integer range. This is an immutable object; +a range cannot change its value after creation. + +Range objects behave like the corresponding tuple objects except that +they are represented by a start, stop, and step datamembers. +*/ + +PyAPI_DATA(PyTypeObject) PyRange_Type; +PyAPI_DATA(PyTypeObject) PyRangeIter_Type; +PyAPI_DATA(PyTypeObject) PyLongRangeIter_Type; + +#define PyRange_Check(op) (Py_TYPE(op) == &PyRange_Type) + +#ifdef __cplusplus +} +#endif +#endif /* !Py_RANGEOBJECT_H */ diff --git a/my_env/Include/setobject.h b/my_env/Include/setobject.h new file mode 100644 index 000000000..fc0ea8392 --- /dev/null +++ b/my_env/Include/setobject.h @@ -0,0 +1,108 @@ +/* Set object interface */ + +#ifndef Py_SETOBJECT_H +#define Py_SETOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API + +/* There are three kinds of entries in the table: + +1. Unused: key == NULL and hash == 0 +2. Dummy: key == dummy and hash == -1 +3. Active: key != NULL and key != dummy and hash != -1 + +The hash field of Unused slots is always zero. + +The hash field of Dummy slots are set to -1 +meaning that dummy entries can be detected by +either entry->key==dummy or by entry->hash==-1. +*/ + +#define PySet_MINSIZE 8 + +typedef struct { + PyObject *key; + Py_hash_t hash; /* Cached hash code of the key */ +} setentry; + +/* The SetObject data structure is shared by set and frozenset objects. + +Invariant for sets: + - hash is -1 + +Invariants for frozensets: + - data is immutable. + - hash is the hash of the frozenset or -1 if not computed yet. + +*/ + +typedef struct { + PyObject_HEAD + + Py_ssize_t fill; /* Number active and dummy entries*/ + Py_ssize_t used; /* Number active entries */ + + /* The table contains mask + 1 slots, and that's a power of 2. + * We store the mask instead of the size because the mask is more + * frequently needed. + */ + Py_ssize_t mask; + + /* The table points to a fixed-size smalltable for small tables + * or to additional malloc'ed memory for bigger tables. + * The table pointer is never NULL which saves us from repeated + * runtime null-tests. + */ + setentry *table; + Py_hash_t hash; /* Only used by frozenset objects */ + Py_ssize_t finger; /* Search finger for pop() */ + + setentry smalltable[PySet_MINSIZE]; + PyObject *weakreflist; /* List of weak references */ +} PySetObject; + +#define PySet_GET_SIZE(so) (assert(PyAnySet_Check(so)),(((PySetObject *)(so))->used)) + +PyAPI_DATA(PyObject *) _PySet_Dummy; + +PyAPI_FUNC(int) _PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, Py_hash_t *hash); +PyAPI_FUNC(int) _PySet_Update(PyObject *set, PyObject *iterable); +PyAPI_FUNC(int) PySet_ClearFreeList(void); + +#endif /* Section excluded by Py_LIMITED_API */ + +PyAPI_DATA(PyTypeObject) PySet_Type; +PyAPI_DATA(PyTypeObject) PyFrozenSet_Type; +PyAPI_DATA(PyTypeObject) PySetIter_Type; + +PyAPI_FUNC(PyObject *) PySet_New(PyObject *); +PyAPI_FUNC(PyObject *) PyFrozenSet_New(PyObject *); + +PyAPI_FUNC(int) PySet_Add(PyObject *set, PyObject *key); +PyAPI_FUNC(int) PySet_Clear(PyObject *set); +PyAPI_FUNC(int) PySet_Contains(PyObject *anyset, PyObject *key); +PyAPI_FUNC(int) PySet_Discard(PyObject *set, PyObject *key); +PyAPI_FUNC(PyObject *) PySet_Pop(PyObject *set); +PyAPI_FUNC(Py_ssize_t) PySet_Size(PyObject *anyset); + +#define PyFrozenSet_CheckExact(ob) (Py_TYPE(ob) == &PyFrozenSet_Type) +#define PyAnySet_CheckExact(ob) \ + (Py_TYPE(ob) == &PySet_Type || Py_TYPE(ob) == &PyFrozenSet_Type) +#define PyAnySet_Check(ob) \ + (Py_TYPE(ob) == &PySet_Type || Py_TYPE(ob) == &PyFrozenSet_Type || \ + PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \ + PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type)) +#define PySet_Check(ob) \ + (Py_TYPE(ob) == &PySet_Type || \ + PyType_IsSubtype(Py_TYPE(ob), &PySet_Type)) +#define PyFrozenSet_Check(ob) \ + (Py_TYPE(ob) == &PyFrozenSet_Type || \ + PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type)) + +#ifdef __cplusplus +} +#endif +#endif /* !Py_SETOBJECT_H */ diff --git a/my_env/Include/sliceobject.h b/my_env/Include/sliceobject.h new file mode 100644 index 000000000..c238b099e --- /dev/null +++ b/my_env/Include/sliceobject.h @@ -0,0 +1,63 @@ +#ifndef Py_SLICEOBJECT_H +#define Py_SLICEOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +/* The unique ellipsis object "..." */ + +PyAPI_DATA(PyObject) _Py_EllipsisObject; /* Don't use this directly */ + +#define Py_Ellipsis (&_Py_EllipsisObject) + +/* Slice object interface */ + +/* + +A slice object containing start, stop, and step data members (the +names are from range). After much talk with Guido, it was decided to +let these be any arbitrary python type. Py_None stands for omitted values. +*/ +#ifndef Py_LIMITED_API +typedef struct { + PyObject_HEAD + PyObject *start, *stop, *step; /* not NULL */ +} PySliceObject; +#endif + +PyAPI_DATA(PyTypeObject) PySlice_Type; +PyAPI_DATA(PyTypeObject) PyEllipsis_Type; + +#define PySlice_Check(op) (Py_TYPE(op) == &PySlice_Type) + +PyAPI_FUNC(PyObject *) PySlice_New(PyObject* start, PyObject* stop, + PyObject* step); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PySlice_FromIndices(Py_ssize_t start, Py_ssize_t stop); +PyAPI_FUNC(int) _PySlice_GetLongIndices(PySliceObject *self, PyObject *length, + PyObject **start_ptr, PyObject **stop_ptr, + PyObject **step_ptr); +#endif +PyAPI_FUNC(int) PySlice_GetIndices(PyObject *r, Py_ssize_t length, + Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step); +PyAPI_FUNC(int) PySlice_GetIndicesEx(PyObject *r, Py_ssize_t length, + Py_ssize_t *start, Py_ssize_t *stop, + Py_ssize_t *step, Py_ssize_t *slicelength) Py_DEPRECATED(3.7); + +#if !defined(Py_LIMITED_API) || (Py_LIMITED_API+0 >= 0x03050400 && Py_LIMITED_API+0 < 0x03060000) || Py_LIMITED_API+0 >= 0x03060100 +#define PySlice_GetIndicesEx(slice, length, start, stop, step, slicelen) ( \ + PySlice_Unpack((slice), (start), (stop), (step)) < 0 ? \ + ((*(slicelen) = 0), -1) : \ + ((*(slicelen) = PySlice_AdjustIndices((length), (start), (stop), *(step))), \ + 0)) +PyAPI_FUNC(int) PySlice_Unpack(PyObject *slice, + Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step); +PyAPI_FUNC(Py_ssize_t) PySlice_AdjustIndices(Py_ssize_t length, + Py_ssize_t *start, Py_ssize_t *stop, + Py_ssize_t step); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_SLICEOBJECT_H */ diff --git a/my_env/Include/structmember.h b/my_env/Include/structmember.h new file mode 100644 index 000000000..b54f7081f --- /dev/null +++ b/my_env/Include/structmember.h @@ -0,0 +1,74 @@ +#ifndef Py_STRUCTMEMBER_H +#define Py_STRUCTMEMBER_H +#ifdef __cplusplus +extern "C" { +#endif + + +/* Interface to map C struct members to Python object attributes */ + +#include /* For offsetof */ + +/* An array of PyMemberDef structures defines the name, type and offset + of selected members of a C structure. These can be read by + PyMember_GetOne() and set by PyMember_SetOne() (except if their READONLY + flag is set). The array must be terminated with an entry whose name + pointer is NULL. */ + +typedef struct PyMemberDef { + const char *name; + int type; + Py_ssize_t offset; + int flags; + const char *doc; +} PyMemberDef; + +/* Types */ +#define T_SHORT 0 +#define T_INT 1 +#define T_LONG 2 +#define T_FLOAT 3 +#define T_DOUBLE 4 +#define T_STRING 5 +#define T_OBJECT 6 +/* XXX the ordering here is weird for binary compatibility */ +#define T_CHAR 7 /* 1-character string */ +#define T_BYTE 8 /* 8-bit signed int */ +/* unsigned variants: */ +#define T_UBYTE 9 +#define T_USHORT 10 +#define T_UINT 11 +#define T_ULONG 12 + +/* Added by Jack: strings contained in the structure */ +#define T_STRING_INPLACE 13 + +/* Added by Lillo: bools contained in the structure (assumed char) */ +#define T_BOOL 14 + +#define T_OBJECT_EX 16 /* Like T_OBJECT, but raises AttributeError + when the value is NULL, instead of + converting to None. */ +#define T_LONGLONG 17 +#define T_ULONGLONG 18 + +#define T_PYSSIZET 19 /* Py_ssize_t */ +#define T_NONE 20 /* Value is always None */ + + +/* Flags */ +#define READONLY 1 +#define READ_RESTRICTED 2 +#define PY_WRITE_RESTRICTED 4 +#define RESTRICTED (READ_RESTRICTED | PY_WRITE_RESTRICTED) + + +/* Current API, use this */ +PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, struct PyMemberDef *); +PyAPI_FUNC(int) PyMember_SetOne(char *, struct PyMemberDef *, PyObject *); + + +#ifdef __cplusplus +} +#endif +#endif /* !Py_STRUCTMEMBER_H */ diff --git a/my_env/Include/structseq.h b/my_env/Include/structseq.h new file mode 100644 index 000000000..e5e5d5c57 --- /dev/null +++ b/my_env/Include/structseq.h @@ -0,0 +1,49 @@ + +/* Named tuple object interface */ + +#ifndef Py_STRUCTSEQ_H +#define Py_STRUCTSEQ_H +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PyStructSequence_Field { + const char *name; + const char *doc; +} PyStructSequence_Field; + +typedef struct PyStructSequence_Desc { + const char *name; + const char *doc; + struct PyStructSequence_Field *fields; + int n_in_sequence; +} PyStructSequence_Desc; + +extern char* PyStructSequence_UnnamedField; + +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) PyStructSequence_InitType(PyTypeObject *type, + PyStructSequence_Desc *desc); +PyAPI_FUNC(int) PyStructSequence_InitType2(PyTypeObject *type, + PyStructSequence_Desc *desc); +#endif +PyAPI_FUNC(PyTypeObject*) PyStructSequence_NewType(PyStructSequence_Desc *desc); + +PyAPI_FUNC(PyObject *) PyStructSequence_New(PyTypeObject* type); + +#ifndef Py_LIMITED_API +typedef PyTupleObject PyStructSequence; + +/* Macro, *only* to be used to fill in brand new objects */ +#define PyStructSequence_SET_ITEM(op, i, v) PyTuple_SET_ITEM(op, i, v) + +#define PyStructSequence_GET_ITEM(op, i) PyTuple_GET_ITEM(op, i) +#endif + +PyAPI_FUNC(void) PyStructSequence_SetItem(PyObject*, Py_ssize_t, PyObject*); +PyAPI_FUNC(PyObject*) PyStructSequence_GetItem(PyObject*, Py_ssize_t); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_STRUCTSEQ_H */ diff --git a/my_env/Include/symtable.h b/my_env/Include/symtable.h new file mode 100644 index 000000000..007f88db4 --- /dev/null +++ b/my_env/Include/symtable.h @@ -0,0 +1,118 @@ +#ifndef Py_LIMITED_API +#ifndef Py_SYMTABLE_H +#define Py_SYMTABLE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* XXX(ncoghlan): This is a weird mix of public names and interpreter internal + * names. + */ + +typedef enum _block_type { FunctionBlock, ClassBlock, ModuleBlock } + _Py_block_ty; + +struct _symtable_entry; + +struct symtable { + PyObject *st_filename; /* name of file being compiled, + decoded from the filesystem encoding */ + struct _symtable_entry *st_cur; /* current symbol table entry */ + struct _symtable_entry *st_top; /* symbol table entry for module */ + PyObject *st_blocks; /* dict: map AST node addresses + * to symbol table entries */ + PyObject *st_stack; /* list: stack of namespace info */ + PyObject *st_global; /* borrowed ref to st_top->ste_symbols */ + int st_nblocks; /* number of blocks used. kept for + consistency with the corresponding + compiler structure */ + PyObject *st_private; /* name of current class or NULL */ + PyFutureFeatures *st_future; /* module's future features that affect + the symbol table */ + int recursion_depth; /* current recursion depth */ + int recursion_limit; /* recursion limit */ +}; + +typedef struct _symtable_entry { + PyObject_HEAD + PyObject *ste_id; /* int: key in ste_table->st_blocks */ + PyObject *ste_symbols; /* dict: variable names to flags */ + PyObject *ste_name; /* string: name of current block */ + PyObject *ste_varnames; /* list of function parameters */ + PyObject *ste_children; /* list of child blocks */ + PyObject *ste_directives;/* locations of global and nonlocal statements */ + _Py_block_ty ste_type; /* module, class, or function */ + int ste_nested; /* true if block is nested */ + unsigned ste_free : 1; /* true if block has free variables */ + unsigned ste_child_free : 1; /* true if a child block has free vars, + including free refs to globals */ + unsigned ste_generator : 1; /* true if namespace is a generator */ + unsigned ste_coroutine : 1; /* true if namespace is a coroutine */ + unsigned ste_varargs : 1; /* true if block has varargs */ + unsigned ste_varkeywords : 1; /* true if block has varkeywords */ + unsigned ste_returns_value : 1; /* true if namespace uses return with + an argument */ + unsigned ste_needs_class_closure : 1; /* for class scopes, true if a + closure over __class__ + should be created */ + int ste_lineno; /* first line of block */ + int ste_col_offset; /* offset of first line of block */ + int ste_opt_lineno; /* lineno of last exec or import * */ + int ste_opt_col_offset; /* offset of last exec or import * */ + struct symtable *ste_table; +} PySTEntryObject; + +PyAPI_DATA(PyTypeObject) PySTEntry_Type; + +#define PySTEntry_Check(op) (Py_TYPE(op) == &PySTEntry_Type) + +PyAPI_FUNC(int) PyST_GetScope(PySTEntryObject *, PyObject *); + +PyAPI_FUNC(struct symtable *) PySymtable_Build( + mod_ty mod, + const char *filename, /* decoded from the filesystem encoding */ + PyFutureFeatures *future); +PyAPI_FUNC(struct symtable *) PySymtable_BuildObject( + mod_ty mod, + PyObject *filename, + PyFutureFeatures *future); +PyAPI_FUNC(PySTEntryObject *) PySymtable_Lookup(struct symtable *, void *); + +PyAPI_FUNC(void) PySymtable_Free(struct symtable *); + +/* Flags for def-use information */ + +#define DEF_GLOBAL 1 /* global stmt */ +#define DEF_LOCAL 2 /* assignment in code block */ +#define DEF_PARAM 2<<1 /* formal parameter */ +#define DEF_NONLOCAL 2<<2 /* nonlocal stmt */ +#define USE 2<<3 /* name is used */ +#define DEF_FREE 2<<4 /* name used but not defined in nested block */ +#define DEF_FREE_CLASS 2<<5 /* free variable from class's method */ +#define DEF_IMPORT 2<<6 /* assignment occurred via import */ +#define DEF_ANNOT 2<<7 /* this name is annotated */ + +#define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT) + +/* GLOBAL_EXPLICIT and GLOBAL_IMPLICIT are used internally by the symbol + table. GLOBAL is returned from PyST_GetScope() for either of them. + It is stored in ste_symbols at bits 12-15. +*/ +#define SCOPE_OFFSET 11 +#define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL) + +#define LOCAL 1 +#define GLOBAL_EXPLICIT 2 +#define GLOBAL_IMPLICIT 3 +#define FREE 4 +#define CELL 5 + +#define GENERATOR 1 +#define GENERATOR_EXPRESSION 2 + +#ifdef __cplusplus +} +#endif +#endif /* !Py_SYMTABLE_H */ +#endif /* Py_LIMITED_API */ diff --git a/my_env/Include/sysmodule.h b/my_env/Include/sysmodule.h new file mode 100644 index 000000000..719ecfcf6 --- /dev/null +++ b/my_env/Include/sysmodule.h @@ -0,0 +1,48 @@ + +/* System module interface */ + +#ifndef Py_SYSMODULE_H +#define Py_SYSMODULE_H +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_FUNC(PyObject *) PySys_GetObject(const char *); +PyAPI_FUNC(int) PySys_SetObject(const char *, PyObject *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PySys_GetObjectId(_Py_Identifier *key); +PyAPI_FUNC(int) _PySys_SetObjectId(_Py_Identifier *key, PyObject *); +#endif + +PyAPI_FUNC(void) PySys_SetArgv(int, wchar_t **); +PyAPI_FUNC(void) PySys_SetArgvEx(int, wchar_t **, int); +PyAPI_FUNC(void) PySys_SetPath(const wchar_t *); + +PyAPI_FUNC(void) PySys_WriteStdout(const char *format, ...) + Py_GCC_ATTRIBUTE((format(printf, 1, 2))); +PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...) + Py_GCC_ATTRIBUTE((format(printf, 1, 2))); +PyAPI_FUNC(void) PySys_FormatStdout(const char *format, ...); +PyAPI_FUNC(void) PySys_FormatStderr(const char *format, ...); + +PyAPI_FUNC(void) PySys_ResetWarnOptions(void); +PyAPI_FUNC(void) PySys_AddWarnOption(const wchar_t *); +PyAPI_FUNC(void) PySys_AddWarnOptionUnicode(PyObject *); +PyAPI_FUNC(int) PySys_HasWarnOptions(void); + +PyAPI_FUNC(void) PySys_AddXOption(const wchar_t *); +PyAPI_FUNC(PyObject *) PySys_GetXOptions(void); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(size_t) _PySys_GetSizeOf(PyObject *); +#endif + +#ifdef Py_BUILD_CORE +PyAPI_FUNC(int) _PySys_AddXOptionWithError(const wchar_t *s); +PyAPI_FUNC(int) _PySys_AddWarnOptionWithError(PyObject *option); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_SYSMODULE_H */ diff --git a/my_env/Include/token.h b/my_env/Include/token.h new file mode 100644 index 000000000..cd1cd00f0 --- /dev/null +++ b/my_env/Include/token.h @@ -0,0 +1,92 @@ + +/* Token types */ +#ifndef Py_LIMITED_API +#ifndef Py_TOKEN_H +#define Py_TOKEN_H +#ifdef __cplusplus +extern "C" { +#endif + +#undef TILDE /* Prevent clash of our definition with system macro. Ex AIX, ioctl.h */ + +#define ENDMARKER 0 +#define NAME 1 +#define NUMBER 2 +#define STRING 3 +#define NEWLINE 4 +#define INDENT 5 +#define DEDENT 6 +#define LPAR 7 +#define RPAR 8 +#define LSQB 9 +#define RSQB 10 +#define COLON 11 +#define COMMA 12 +#define SEMI 13 +#define PLUS 14 +#define MINUS 15 +#define STAR 16 +#define SLASH 17 +#define VBAR 18 +#define AMPER 19 +#define LESS 20 +#define GREATER 21 +#define EQUAL 22 +#define DOT 23 +#define PERCENT 24 +#define LBRACE 25 +#define RBRACE 26 +#define EQEQUAL 27 +#define NOTEQUAL 28 +#define LESSEQUAL 29 +#define GREATEREQUAL 30 +#define TILDE 31 +#define CIRCUMFLEX 32 +#define LEFTSHIFT 33 +#define RIGHTSHIFT 34 +#define DOUBLESTAR 35 +#define PLUSEQUAL 36 +#define MINEQUAL 37 +#define STAREQUAL 38 +#define SLASHEQUAL 39 +#define PERCENTEQUAL 40 +#define AMPEREQUAL 41 +#define VBAREQUAL 42 +#define CIRCUMFLEXEQUAL 43 +#define LEFTSHIFTEQUAL 44 +#define RIGHTSHIFTEQUAL 45 +#define DOUBLESTAREQUAL 46 +#define DOUBLESLASH 47 +#define DOUBLESLASHEQUAL 48 +#define AT 49 +#define ATEQUAL 50 +#define RARROW 51 +#define ELLIPSIS 52 +/* Don't forget to update the table _PyParser_TokenNames in tokenizer.c! */ +#define OP 53 +#define ERRORTOKEN 54 +/* These aren't used by the C tokenizer but are needed for tokenize.py */ +#define COMMENT 55 +#define NL 56 +#define ENCODING 57 +#define N_TOKENS 58 + +/* Special definitions for cooperation with parser */ + +#define NT_OFFSET 256 + +#define ISTERMINAL(x) ((x) < NT_OFFSET) +#define ISNONTERMINAL(x) ((x) >= NT_OFFSET) +#define ISEOF(x) ((x) == ENDMARKER) + + +PyAPI_DATA(const char *) _PyParser_TokenNames[]; /* Token names */ +PyAPI_FUNC(int) PyToken_OneChar(int); +PyAPI_FUNC(int) PyToken_TwoChars(int, int); +PyAPI_FUNC(int) PyToken_ThreeChars(int, int, int); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_TOKEN_H */ +#endif /* Py_LIMITED_API */ diff --git a/my_env/Include/traceback.h b/my_env/Include/traceback.h new file mode 100644 index 000000000..b5874100f --- /dev/null +++ b/my_env/Include/traceback.h @@ -0,0 +1,119 @@ + +#ifndef Py_TRACEBACK_H +#define Py_TRACEBACK_H +#ifdef __cplusplus +extern "C" { +#endif + +#include "pystate.h" + +struct _frame; + +/* Traceback interface */ +#ifndef Py_LIMITED_API +typedef struct _traceback { + PyObject_HEAD + struct _traceback *tb_next; + struct _frame *tb_frame; + int tb_lasti; + int tb_lineno; +} PyTracebackObject; +#endif + +PyAPI_FUNC(int) PyTraceBack_Here(struct _frame *); +PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *); +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _Py_DisplaySourceLine(PyObject *, PyObject *, int, int); +PyAPI_FUNC(void) _PyTraceback_Add(const char *, const char *, int); +#endif + +/* Reveal traceback type so we can typecheck traceback objects */ +PyAPI_DATA(PyTypeObject) PyTraceBack_Type; +#define PyTraceBack_Check(v) (Py_TYPE(v) == &PyTraceBack_Type) + +#ifndef Py_LIMITED_API +/* Write the Python traceback into the file 'fd'. For example: + + Traceback (most recent call first): + File "xxx", line xxx in + File "xxx", line xxx in + ... + File "xxx", line xxx in + + This function is written for debug purpose only, to dump the traceback in + the worst case: after a segmentation fault, at fatal error, etc. That's why, + it is very limited. Strings are truncated to 100 characters and encoded to + ASCII with backslashreplace. It doesn't write the source code, only the + function name, filename and line number of each frame. Write only the first + 100 frames: if the traceback is truncated, write the line " ...". + + This function is signal safe. */ + +PyAPI_FUNC(void) _Py_DumpTraceback( + int fd, + PyThreadState *tstate); + +/* Write the traceback of all threads into the file 'fd'. current_thread can be + NULL. + + Return NULL on success, or an error message on error. + + This function is written for debug purpose only. It calls + _Py_DumpTraceback() for each thread, and so has the same limitations. It + only write the traceback of the first 100 threads: write "..." if there are + more threads. + + If current_tstate is NULL, the function tries to get the Python thread state + of the current thread. It is not an error if the function is unable to get + the current Python thread state. + + If interp is NULL, the function tries to get the interpreter state from + the current Python thread state, or from + _PyGILState_GetInterpreterStateUnsafe() in last resort. + + It is better to pass NULL to interp and current_tstate, the function tries + different options to retrieve these informations. + + This function is signal safe. */ + +PyAPI_FUNC(const char*) _Py_DumpTracebackThreads( + int fd, + PyInterpreterState *interp, + PyThreadState *current_tstate); +#endif /* !Py_LIMITED_API */ + +#ifndef Py_LIMITED_API + +/* Write a Unicode object into the file descriptor fd. Encode the string to + ASCII using the backslashreplace error handler. + + Do nothing if text is not a Unicode object. The function accepts Unicode + string which is not ready (PyUnicode_WCHAR_KIND). + + This function is signal safe. */ +PyAPI_FUNC(void) _Py_DumpASCII(int fd, PyObject *text); + +/* Format an integer as decimal into the file descriptor fd. + + This function is signal safe. */ +PyAPI_FUNC(void) _Py_DumpDecimal( + int fd, + unsigned long value); + +/* Format an integer as hexadecimal into the file descriptor fd with at least + width digits. + + The maximum width is sizeof(unsigned long)*2 digits. + + This function is signal safe. */ +PyAPI_FUNC(void) _Py_DumpHexadecimal( + int fd, + unsigned long value, + Py_ssize_t width); + +#endif /* !Py_LIMITED_API */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_TRACEBACK_H */ diff --git a/my_env/Include/tupleobject.h b/my_env/Include/tupleobject.h new file mode 100644 index 000000000..72a7d8d58 --- /dev/null +++ b/my_env/Include/tupleobject.h @@ -0,0 +1,73 @@ + +/* Tuple object interface */ + +#ifndef Py_TUPLEOBJECT_H +#define Py_TUPLEOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +/* +Another generally useful object type is a tuple of object pointers. +For Python, this is an immutable type. C code can change the tuple items +(but not their number), and even use tuples as general-purpose arrays of +object references, but in general only brand new tuples should be mutated, +not ones that might already have been exposed to Python code. + +*** WARNING *** PyTuple_SetItem does not increment the new item's reference +count, but does decrement the reference count of the item it replaces, +if not nil. It does *decrement* the reference count if it is *not* +inserted in the tuple. Similarly, PyTuple_GetItem does not increment the +returned item's reference count. +*/ + +#ifndef Py_LIMITED_API +typedef struct { + PyObject_VAR_HEAD + PyObject *ob_item[1]; + + /* ob_item contains space for 'ob_size' elements. + * Items must normally not be NULL, except during construction when + * the tuple is not yet visible outside the function that builds it. + */ +} PyTupleObject; +#endif + +PyAPI_DATA(PyTypeObject) PyTuple_Type; +PyAPI_DATA(PyTypeObject) PyTupleIter_Type; + +#define PyTuple_Check(op) \ + PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS) +#define PyTuple_CheckExact(op) (Py_TYPE(op) == &PyTuple_Type) + +PyAPI_FUNC(PyObject *) PyTuple_New(Py_ssize_t size); +PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *); +PyAPI_FUNC(PyObject *) PyTuple_GetItem(PyObject *, Py_ssize_t); +PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *); +PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t); +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyTuple_Resize(PyObject **, Py_ssize_t); +#endif +PyAPI_FUNC(PyObject *) PyTuple_Pack(Py_ssize_t, ...); +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _PyTuple_MaybeUntrack(PyObject *); +#endif + +/* Macro, trading safety for speed */ +#ifndef Py_LIMITED_API +#define PyTuple_GET_ITEM(op, i) (((PyTupleObject *)(op))->ob_item[i]) +#define PyTuple_GET_SIZE(op) (assert(PyTuple_Check(op)),Py_SIZE(op)) + +/* Macro, *only* to be used to fill in brand new tuples */ +#define PyTuple_SET_ITEM(op, i, v) (((PyTupleObject *)(op))->ob_item[i] = v) +#endif + +PyAPI_FUNC(int) PyTuple_ClearFreeList(void); +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _PyTuple_DebugMallocStats(FILE *out); +#endif /* Py_LIMITED_API */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_TUPLEOBJECT_H */ diff --git a/my_env/Include/typeslots.h b/my_env/Include/typeslots.h new file mode 100644 index 000000000..0ce6a377d --- /dev/null +++ b/my_env/Include/typeslots.h @@ -0,0 +1,85 @@ +/* Do not renumber the file; these numbers are part of the stable ABI. */ +/* Disabled, see #10181 */ +#undef Py_bf_getbuffer +#undef Py_bf_releasebuffer +#define Py_mp_ass_subscript 3 +#define Py_mp_length 4 +#define Py_mp_subscript 5 +#define Py_nb_absolute 6 +#define Py_nb_add 7 +#define Py_nb_and 8 +#define Py_nb_bool 9 +#define Py_nb_divmod 10 +#define Py_nb_float 11 +#define Py_nb_floor_divide 12 +#define Py_nb_index 13 +#define Py_nb_inplace_add 14 +#define Py_nb_inplace_and 15 +#define Py_nb_inplace_floor_divide 16 +#define Py_nb_inplace_lshift 17 +#define Py_nb_inplace_multiply 18 +#define Py_nb_inplace_or 19 +#define Py_nb_inplace_power 20 +#define Py_nb_inplace_remainder 21 +#define Py_nb_inplace_rshift 22 +#define Py_nb_inplace_subtract 23 +#define Py_nb_inplace_true_divide 24 +#define Py_nb_inplace_xor 25 +#define Py_nb_int 26 +#define Py_nb_invert 27 +#define Py_nb_lshift 28 +#define Py_nb_multiply 29 +#define Py_nb_negative 30 +#define Py_nb_or 31 +#define Py_nb_positive 32 +#define Py_nb_power 33 +#define Py_nb_remainder 34 +#define Py_nb_rshift 35 +#define Py_nb_subtract 36 +#define Py_nb_true_divide 37 +#define Py_nb_xor 38 +#define Py_sq_ass_item 39 +#define Py_sq_concat 40 +#define Py_sq_contains 41 +#define Py_sq_inplace_concat 42 +#define Py_sq_inplace_repeat 43 +#define Py_sq_item 44 +#define Py_sq_length 45 +#define Py_sq_repeat 46 +#define Py_tp_alloc 47 +#define Py_tp_base 48 +#define Py_tp_bases 49 +#define Py_tp_call 50 +#define Py_tp_clear 51 +#define Py_tp_dealloc 52 +#define Py_tp_del 53 +#define Py_tp_descr_get 54 +#define Py_tp_descr_set 55 +#define Py_tp_doc 56 +#define Py_tp_getattr 57 +#define Py_tp_getattro 58 +#define Py_tp_hash 59 +#define Py_tp_init 60 +#define Py_tp_is_gc 61 +#define Py_tp_iter 62 +#define Py_tp_iternext 63 +#define Py_tp_methods 64 +#define Py_tp_new 65 +#define Py_tp_repr 66 +#define Py_tp_richcompare 67 +#define Py_tp_setattr 68 +#define Py_tp_setattro 69 +#define Py_tp_str 70 +#define Py_tp_traverse 71 +#define Py_tp_members 72 +#define Py_tp_getset 73 +#define Py_tp_free 74 +#define Py_nb_matrix_multiply 75 +#define Py_nb_inplace_matrix_multiply 76 +#define Py_am_await 77 +#define Py_am_aiter 78 +#define Py_am_anext 79 +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 +/* New in 3.5 */ +#define Py_tp_finalize 80 +#endif diff --git a/my_env/Include/ucnhash.h b/my_env/Include/ucnhash.h new file mode 100644 index 000000000..45362e997 --- /dev/null +++ b/my_env/Include/ucnhash.h @@ -0,0 +1,36 @@ +/* Unicode name database interface */ +#ifndef Py_LIMITED_API +#ifndef Py_UCNHASH_H +#define Py_UCNHASH_H +#ifdef __cplusplus +extern "C" { +#endif + +/* revised ucnhash CAPI interface (exported through a "wrapper") */ + +#define PyUnicodeData_CAPSULE_NAME "unicodedata.ucnhash_CAPI" + +typedef struct { + + /* Size of this struct */ + int size; + + /* Get name for a given character code. Returns non-zero if + success, zero if not. Does not set Python exceptions. + If self is NULL, data come from the default version of the database. + If it is not NULL, it should be a unicodedata.ucd_X_Y_Z object */ + int (*getname)(PyObject *self, Py_UCS4 code, char* buffer, int buflen, + int with_alias_and_seq); + + /* Get character code for a given name. Same error handling + as for getname. */ + int (*getcode)(PyObject *self, const char* name, int namelen, Py_UCS4* code, + int with_named_seq); + +} _PyUnicode_Name_CAPI; + +#ifdef __cplusplus +} +#endif +#endif /* !Py_UCNHASH_H */ +#endif /* !Py_LIMITED_API */ diff --git a/my_env/Include/unicodeobject.h b/my_env/Include/unicodeobject.h new file mode 100644 index 000000000..45998a13a --- /dev/null +++ b/my_env/Include/unicodeobject.h @@ -0,0 +1,2334 @@ +#ifndef Py_UNICODEOBJECT_H +#define Py_UNICODEOBJECT_H + +#include + +/* + +Unicode implementation based on original code by Fredrik Lundh, +modified by Marc-Andre Lemburg (mal@lemburg.com) according to the +Unicode Integration Proposal. (See +http://www.egenix.com/files/python/unicode-proposal.txt). + +Copyright (c) Corporation for National Research Initiatives. + + + Original header: + -------------------------------------------------------------------- + + * Yet another Unicode string type for Python. This type supports the + * 16-bit Basic Multilingual Plane (BMP) only. + * + * Written by Fredrik Lundh, January 1999. + * + * Copyright (c) 1999 by Secret Labs AB. + * Copyright (c) 1999 by Fredrik Lundh. + * + * fredrik@pythonware.com + * http://www.pythonware.com + * + * -------------------------------------------------------------------- + * This Unicode String Type is + * + * Copyright (c) 1999 by Secret Labs AB + * Copyright (c) 1999 by Fredrik Lundh + * + * By obtaining, using, and/or copying this software and/or its + * associated documentation, you agree that you have read, understood, + * and will comply with the following terms and conditions: + * + * Permission to use, copy, modify, and distribute this software and its + * associated documentation for any purpose and without fee is hereby + * granted, provided that the above copyright notice appears in all + * copies, and that both that copyright notice and this permission notice + * appear in supporting documentation, and that the name of Secret Labs + * AB or the author not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior + * permission. + * + * SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * -------------------------------------------------------------------- */ + +#include + +/* === Internal API ======================================================= */ + +/* --- Internal Unicode Format -------------------------------------------- */ + +/* Python 3.x requires unicode */ +#define Py_USING_UNICODE + +#ifndef SIZEOF_WCHAR_T +#error Must define SIZEOF_WCHAR_T +#endif + +#define Py_UNICODE_SIZE SIZEOF_WCHAR_T + +/* If wchar_t can be used for UCS-4 storage, set Py_UNICODE_WIDE. + Otherwise, Unicode strings are stored as UCS-2 (with limited support + for UTF-16) */ + +#if Py_UNICODE_SIZE >= 4 +#define Py_UNICODE_WIDE +#endif + +/* Set these flags if the platform has "wchar.h" and the + wchar_t type is a 16-bit unsigned type */ +/* #define HAVE_WCHAR_H */ +/* #define HAVE_USABLE_WCHAR_T */ + +/* Py_UNICODE was the native Unicode storage format (code unit) used by + Python and represents a single Unicode element in the Unicode type. + With PEP 393, Py_UNICODE is deprecated and replaced with a + typedef to wchar_t. */ + +#ifndef Py_LIMITED_API +#define PY_UNICODE_TYPE wchar_t +typedef wchar_t Py_UNICODE /* Py_DEPRECATED(3.3) */; +#endif + +/* If the compiler provides a wchar_t type we try to support it + through the interface functions PyUnicode_FromWideChar(), + PyUnicode_AsWideChar() and PyUnicode_AsWideCharString(). */ + +#ifdef HAVE_USABLE_WCHAR_T +# ifndef HAVE_WCHAR_H +# define HAVE_WCHAR_H +# endif +#endif + +#ifdef HAVE_WCHAR_H +# include +#endif + +/* Py_UCS4 and Py_UCS2 are typedefs for the respective + unicode representations. */ +typedef uint32_t Py_UCS4; +typedef uint16_t Py_UCS2; +typedef uint8_t Py_UCS1; + +/* --- Internal Unicode Operations ---------------------------------------- */ + +/* Since splitting on whitespace is an important use case, and + whitespace in most situations is solely ASCII whitespace, we + optimize for the common case by using a quick look-up table + _Py_ascii_whitespace (see below) with an inlined check. + + */ +#ifndef Py_LIMITED_API +#define Py_UNICODE_ISSPACE(ch) \ + ((ch) < 128U ? _Py_ascii_whitespace[(ch)] : _PyUnicode_IsWhitespace(ch)) + +#define Py_UNICODE_ISLOWER(ch) _PyUnicode_IsLowercase(ch) +#define Py_UNICODE_ISUPPER(ch) _PyUnicode_IsUppercase(ch) +#define Py_UNICODE_ISTITLE(ch) _PyUnicode_IsTitlecase(ch) +#define Py_UNICODE_ISLINEBREAK(ch) _PyUnicode_IsLinebreak(ch) + +#define Py_UNICODE_TOLOWER(ch) _PyUnicode_ToLowercase(ch) +#define Py_UNICODE_TOUPPER(ch) _PyUnicode_ToUppercase(ch) +#define Py_UNICODE_TOTITLE(ch) _PyUnicode_ToTitlecase(ch) + +#define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch) +#define Py_UNICODE_ISDIGIT(ch) _PyUnicode_IsDigit(ch) +#define Py_UNICODE_ISNUMERIC(ch) _PyUnicode_IsNumeric(ch) +#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch) + +#define Py_UNICODE_TODECIMAL(ch) _PyUnicode_ToDecimalDigit(ch) +#define Py_UNICODE_TODIGIT(ch) _PyUnicode_ToDigit(ch) +#define Py_UNICODE_TONUMERIC(ch) _PyUnicode_ToNumeric(ch) + +#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch) + +#define Py_UNICODE_ISALNUM(ch) \ + (Py_UNICODE_ISALPHA(ch) || \ + Py_UNICODE_ISDECIMAL(ch) || \ + Py_UNICODE_ISDIGIT(ch) || \ + Py_UNICODE_ISNUMERIC(ch)) + +#define Py_UNICODE_COPY(target, source, length) \ + memcpy((target), (source), (length)*sizeof(Py_UNICODE)) + +#define Py_UNICODE_FILL(target, value, length) \ + do {Py_ssize_t i_; Py_UNICODE *t_ = (target); Py_UNICODE v_ = (value);\ + for (i_ = 0; i_ < (length); i_++) t_[i_] = v_;\ + } while (0) + +/* macros to work with surrogates */ +#define Py_UNICODE_IS_SURROGATE(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF) +#define Py_UNICODE_IS_HIGH_SURROGATE(ch) (0xD800 <= (ch) && (ch) <= 0xDBFF) +#define Py_UNICODE_IS_LOW_SURROGATE(ch) (0xDC00 <= (ch) && (ch) <= 0xDFFF) +/* Join two surrogate characters and return a single Py_UCS4 value. */ +#define Py_UNICODE_JOIN_SURROGATES(high, low) \ + (((((Py_UCS4)(high) & 0x03FF) << 10) | \ + ((Py_UCS4)(low) & 0x03FF)) + 0x10000) +/* high surrogate = top 10 bits added to D800 */ +#define Py_UNICODE_HIGH_SURROGATE(ch) (0xD800 - (0x10000 >> 10) + ((ch) >> 10)) +/* low surrogate = bottom 10 bits added to DC00 */ +#define Py_UNICODE_LOW_SURROGATE(ch) (0xDC00 + ((ch) & 0x3FF)) + +/* Check if substring matches at given offset. The offset must be + valid, and the substring must not be empty. */ + +#define Py_UNICODE_MATCH(string, offset, substring) \ + ((*((string)->wstr + (offset)) == *((substring)->wstr)) && \ + ((*((string)->wstr + (offset) + (substring)->wstr_length-1) == *((substring)->wstr + (substring)->wstr_length-1))) && \ + !memcmp((string)->wstr + (offset), (substring)->wstr, (substring)->wstr_length*sizeof(Py_UNICODE))) + +#endif /* Py_LIMITED_API */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* --- Unicode Type ------------------------------------------------------- */ + +#ifndef Py_LIMITED_API + +/* ASCII-only strings created through PyUnicode_New use the PyASCIIObject + structure. state.ascii and state.compact are set, and the data + immediately follow the structure. utf8_length and wstr_length can be found + in the length field; the utf8 pointer is equal to the data pointer. */ +typedef struct { + /* There are 4 forms of Unicode strings: + + - compact ascii: + + * structure = PyASCIIObject + * test: PyUnicode_IS_COMPACT_ASCII(op) + * kind = PyUnicode_1BYTE_KIND + * compact = 1 + * ascii = 1 + * ready = 1 + * (length is the length of the utf8 and wstr strings) + * (data starts just after the structure) + * (since ASCII is decoded from UTF-8, the utf8 string are the data) + + - compact: + + * structure = PyCompactUnicodeObject + * test: PyUnicode_IS_COMPACT(op) && !PyUnicode_IS_ASCII(op) + * kind = PyUnicode_1BYTE_KIND, PyUnicode_2BYTE_KIND or + PyUnicode_4BYTE_KIND + * compact = 1 + * ready = 1 + * ascii = 0 + * utf8 is not shared with data + * utf8_length = 0 if utf8 is NULL + * wstr is shared with data and wstr_length=length + if kind=PyUnicode_2BYTE_KIND and sizeof(wchar_t)=2 + or if kind=PyUnicode_4BYTE_KIND and sizeof(wchar_t)=4 + * wstr_length = 0 if wstr is NULL + * (data starts just after the structure) + + - legacy string, not ready: + + * structure = PyUnicodeObject + * test: kind == PyUnicode_WCHAR_KIND + * length = 0 (use wstr_length) + * hash = -1 + * kind = PyUnicode_WCHAR_KIND + * compact = 0 + * ascii = 0 + * ready = 0 + * interned = SSTATE_NOT_INTERNED + * wstr is not NULL + * data.any is NULL + * utf8 is NULL + * utf8_length = 0 + + - legacy string, ready: + + * structure = PyUnicodeObject structure + * test: !PyUnicode_IS_COMPACT(op) && kind != PyUnicode_WCHAR_KIND + * kind = PyUnicode_1BYTE_KIND, PyUnicode_2BYTE_KIND or + PyUnicode_4BYTE_KIND + * compact = 0 + * ready = 1 + * data.any is not NULL + * utf8 is shared and utf8_length = length with data.any if ascii = 1 + * utf8_length = 0 if utf8 is NULL + * wstr is shared with data.any and wstr_length = length + if kind=PyUnicode_2BYTE_KIND and sizeof(wchar_t)=2 + or if kind=PyUnicode_4BYTE_KIND and sizeof(wchar_4)=4 + * wstr_length = 0 if wstr is NULL + + Compact strings use only one memory block (structure + characters), + whereas legacy strings use one block for the structure and one block + for characters. + + Legacy strings are created by PyUnicode_FromUnicode() and + PyUnicode_FromStringAndSize(NULL, size) functions. They become ready + when PyUnicode_READY() is called. + + See also _PyUnicode_CheckConsistency(). + */ + PyObject_HEAD + Py_ssize_t length; /* Number of code points in the string */ + Py_hash_t hash; /* Hash value; -1 if not set */ + struct { + /* + SSTATE_NOT_INTERNED (0) + SSTATE_INTERNED_MORTAL (1) + SSTATE_INTERNED_IMMORTAL (2) + + If interned != SSTATE_NOT_INTERNED, the two references from the + dictionary to this object are *not* counted in ob_refcnt. + */ + unsigned int interned:2; + /* Character size: + + - PyUnicode_WCHAR_KIND (0): + + * character type = wchar_t (16 or 32 bits, depending on the + platform) + + - PyUnicode_1BYTE_KIND (1): + + * character type = Py_UCS1 (8 bits, unsigned) + * all characters are in the range U+0000-U+00FF (latin1) + * if ascii is set, all characters are in the range U+0000-U+007F + (ASCII), otherwise at least one character is in the range + U+0080-U+00FF + + - PyUnicode_2BYTE_KIND (2): + + * character type = Py_UCS2 (16 bits, unsigned) + * all characters are in the range U+0000-U+FFFF (BMP) + * at least one character is in the range U+0100-U+FFFF + + - PyUnicode_4BYTE_KIND (4): + + * character type = Py_UCS4 (32 bits, unsigned) + * all characters are in the range U+0000-U+10FFFF + * at least one character is in the range U+10000-U+10FFFF + */ + unsigned int kind:3; + /* Compact is with respect to the allocation scheme. Compact unicode + objects only require one memory block while non-compact objects use + one block for the PyUnicodeObject struct and another for its data + buffer. */ + unsigned int compact:1; + /* The string only contains characters in the range U+0000-U+007F (ASCII) + and the kind is PyUnicode_1BYTE_KIND. If ascii is set and compact is + set, use the PyASCIIObject structure. */ + unsigned int ascii:1; + /* The ready flag indicates whether the object layout is initialized + completely. This means that this is either a compact object, or + the data pointer is filled out. The bit is redundant, and helps + to minimize the test in PyUnicode_IS_READY(). */ + unsigned int ready:1; + /* Padding to ensure that PyUnicode_DATA() is always aligned to + 4 bytes (see issue #19537 on m68k). */ + unsigned int :24; + } state; + wchar_t *wstr; /* wchar_t representation (null-terminated) */ +} PyASCIIObject; + +/* Non-ASCII strings allocated through PyUnicode_New use the + PyCompactUnicodeObject structure. state.compact is set, and the data + immediately follow the structure. */ +typedef struct { + PyASCIIObject _base; + Py_ssize_t utf8_length; /* Number of bytes in utf8, excluding the + * terminating \0. */ + char *utf8; /* UTF-8 representation (null-terminated) */ + Py_ssize_t wstr_length; /* Number of code points in wstr, possible + * surrogates count as two code points. */ +} PyCompactUnicodeObject; + +/* Strings allocated through PyUnicode_FromUnicode(NULL, len) use the + PyUnicodeObject structure. The actual string data is initially in the wstr + block, and copied into the data block using _PyUnicode_Ready. */ +typedef struct { + PyCompactUnicodeObject _base; + union { + void *any; + Py_UCS1 *latin1; + Py_UCS2 *ucs2; + Py_UCS4 *ucs4; + } data; /* Canonical, smallest-form Unicode buffer */ +} PyUnicodeObject; +#endif + +PyAPI_DATA(PyTypeObject) PyUnicode_Type; +PyAPI_DATA(PyTypeObject) PyUnicodeIter_Type; + +#define PyUnicode_Check(op) \ + PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS) +#define PyUnicode_CheckExact(op) (Py_TYPE(op) == &PyUnicode_Type) + +/* Fast access macros */ +#ifndef Py_LIMITED_API + +#define PyUnicode_WSTR_LENGTH(op) \ + (PyUnicode_IS_COMPACT_ASCII(op) ? \ + ((PyASCIIObject*)op)->length : \ + ((PyCompactUnicodeObject*)op)->wstr_length) + +/* Returns the deprecated Py_UNICODE representation's size in code units + (this includes surrogate pairs as 2 units). + If the Py_UNICODE representation is not available, it will be computed + on request. Use PyUnicode_GET_LENGTH() for the length in code points. */ + +#define PyUnicode_GET_SIZE(op) \ + (assert(PyUnicode_Check(op)), \ + (((PyASCIIObject *)(op))->wstr) ? \ + PyUnicode_WSTR_LENGTH(op) : \ + ((void)PyUnicode_AsUnicode((PyObject *)(op)), \ + assert(((PyASCIIObject *)(op))->wstr), \ + PyUnicode_WSTR_LENGTH(op))) + /* Py_DEPRECATED(3.3) */ + +#define PyUnicode_GET_DATA_SIZE(op) \ + (PyUnicode_GET_SIZE(op) * Py_UNICODE_SIZE) + /* Py_DEPRECATED(3.3) */ + +/* Alias for PyUnicode_AsUnicode(). This will create a wchar_t/Py_UNICODE + representation on demand. Using this macro is very inefficient now, + try to port your code to use the new PyUnicode_*BYTE_DATA() macros or + use PyUnicode_WRITE() and PyUnicode_READ(). */ + +#define PyUnicode_AS_UNICODE(op) \ + (assert(PyUnicode_Check(op)), \ + (((PyASCIIObject *)(op))->wstr) ? (((PyASCIIObject *)(op))->wstr) : \ + PyUnicode_AsUnicode((PyObject *)(op))) + /* Py_DEPRECATED(3.3) */ + +#define PyUnicode_AS_DATA(op) \ + ((const char *)(PyUnicode_AS_UNICODE(op))) + /* Py_DEPRECATED(3.3) */ + + +/* --- Flexible String Representation Helper Macros (PEP 393) -------------- */ + +/* Values for PyASCIIObject.state: */ + +/* Interning state. */ +#define SSTATE_NOT_INTERNED 0 +#define SSTATE_INTERNED_MORTAL 1 +#define SSTATE_INTERNED_IMMORTAL 2 + +/* Return true if the string contains only ASCII characters, or 0 if not. The + string may be compact (PyUnicode_IS_COMPACT_ASCII) or not, but must be + ready. */ +#define PyUnicode_IS_ASCII(op) \ + (assert(PyUnicode_Check(op)), \ + assert(PyUnicode_IS_READY(op)), \ + ((PyASCIIObject*)op)->state.ascii) + +/* Return true if the string is compact or 0 if not. + No type checks or Ready calls are performed. */ +#define PyUnicode_IS_COMPACT(op) \ + (((PyASCIIObject*)(op))->state.compact) + +/* Return true if the string is a compact ASCII string (use PyASCIIObject + structure), or 0 if not. No type checks or Ready calls are performed. */ +#define PyUnicode_IS_COMPACT_ASCII(op) \ + (((PyASCIIObject*)op)->state.ascii && PyUnicode_IS_COMPACT(op)) + +enum PyUnicode_Kind { +/* String contains only wstr byte characters. This is only possible + when the string was created with a legacy API and _PyUnicode_Ready() + has not been called yet. */ + PyUnicode_WCHAR_KIND = 0, +/* Return values of the PyUnicode_KIND() macro: */ + PyUnicode_1BYTE_KIND = 1, + PyUnicode_2BYTE_KIND = 2, + PyUnicode_4BYTE_KIND = 4 +}; + +/* Return pointers to the canonical representation cast to unsigned char, + Py_UCS2, or Py_UCS4 for direct character access. + No checks are performed, use PyUnicode_KIND() before to ensure + these will work correctly. */ + +#define PyUnicode_1BYTE_DATA(op) ((Py_UCS1*)PyUnicode_DATA(op)) +#define PyUnicode_2BYTE_DATA(op) ((Py_UCS2*)PyUnicode_DATA(op)) +#define PyUnicode_4BYTE_DATA(op) ((Py_UCS4*)PyUnicode_DATA(op)) + +/* Return one of the PyUnicode_*_KIND values defined above. */ +#define PyUnicode_KIND(op) \ + (assert(PyUnicode_Check(op)), \ + assert(PyUnicode_IS_READY(op)), \ + ((PyASCIIObject *)(op))->state.kind) + +/* Return a void pointer to the raw unicode buffer. */ +#define _PyUnicode_COMPACT_DATA(op) \ + (PyUnicode_IS_ASCII(op) ? \ + ((void*)((PyASCIIObject*)(op) + 1)) : \ + ((void*)((PyCompactUnicodeObject*)(op) + 1))) + +#define _PyUnicode_NONCOMPACT_DATA(op) \ + (assert(((PyUnicodeObject*)(op))->data.any), \ + ((((PyUnicodeObject *)(op))->data.any))) + +#define PyUnicode_DATA(op) \ + (assert(PyUnicode_Check(op)), \ + PyUnicode_IS_COMPACT(op) ? _PyUnicode_COMPACT_DATA(op) : \ + _PyUnicode_NONCOMPACT_DATA(op)) + +/* In the access macros below, "kind" may be evaluated more than once. + All other macro parameters are evaluated exactly once, so it is safe + to put side effects into them (such as increasing the index). */ + +/* Write into the canonical representation, this macro does not do any sanity + checks and is intended for usage in loops. The caller should cache the + kind and data pointers obtained from other macro calls. + index is the index in the string (starts at 0) and value is the new + code point value which should be written to that location. */ +#define PyUnicode_WRITE(kind, data, index, value) \ + do { \ + switch ((kind)) { \ + case PyUnicode_1BYTE_KIND: { \ + ((Py_UCS1 *)(data))[(index)] = (Py_UCS1)(value); \ + break; \ + } \ + case PyUnicode_2BYTE_KIND: { \ + ((Py_UCS2 *)(data))[(index)] = (Py_UCS2)(value); \ + break; \ + } \ + default: { \ + assert((kind) == PyUnicode_4BYTE_KIND); \ + ((Py_UCS4 *)(data))[(index)] = (Py_UCS4)(value); \ + } \ + } \ + } while (0) + +/* Read a code point from the string's canonical representation. No checks + or ready calls are performed. */ +#define PyUnicode_READ(kind, data, index) \ + ((Py_UCS4) \ + ((kind) == PyUnicode_1BYTE_KIND ? \ + ((const Py_UCS1 *)(data))[(index)] : \ + ((kind) == PyUnicode_2BYTE_KIND ? \ + ((const Py_UCS2 *)(data))[(index)] : \ + ((const Py_UCS4 *)(data))[(index)] \ + ) \ + )) + +/* PyUnicode_READ_CHAR() is less efficient than PyUnicode_READ() because it + calls PyUnicode_KIND() and might call it twice. For single reads, use + PyUnicode_READ_CHAR, for multiple consecutive reads callers should + cache kind and use PyUnicode_READ instead. */ +#define PyUnicode_READ_CHAR(unicode, index) \ + (assert(PyUnicode_Check(unicode)), \ + assert(PyUnicode_IS_READY(unicode)), \ + (Py_UCS4) \ + (PyUnicode_KIND((unicode)) == PyUnicode_1BYTE_KIND ? \ + ((const Py_UCS1 *)(PyUnicode_DATA((unicode))))[(index)] : \ + (PyUnicode_KIND((unicode)) == PyUnicode_2BYTE_KIND ? \ + ((const Py_UCS2 *)(PyUnicode_DATA((unicode))))[(index)] : \ + ((const Py_UCS4 *)(PyUnicode_DATA((unicode))))[(index)] \ + ) \ + )) + +/* Returns the length of the unicode string. The caller has to make sure that + the string has it's canonical representation set before calling + this macro. Call PyUnicode_(FAST_)Ready to ensure that. */ +#define PyUnicode_GET_LENGTH(op) \ + (assert(PyUnicode_Check(op)), \ + assert(PyUnicode_IS_READY(op)), \ + ((PyASCIIObject *)(op))->length) + + +/* Fast check to determine whether an object is ready. Equivalent to + PyUnicode_IS_COMPACT(op) || ((PyUnicodeObject*)(op))->data.any) */ + +#define PyUnicode_IS_READY(op) (((PyASCIIObject*)op)->state.ready) + +/* PyUnicode_READY() does less work than _PyUnicode_Ready() in the best + case. If the canonical representation is not yet set, it will still call + _PyUnicode_Ready(). + Returns 0 on success and -1 on errors. */ +#define PyUnicode_READY(op) \ + (assert(PyUnicode_Check(op)), \ + (PyUnicode_IS_READY(op) ? \ + 0 : _PyUnicode_Ready((PyObject *)(op)))) + +/* Return a maximum character value which is suitable for creating another + string based on op. This is always an approximation but more efficient + than iterating over the string. */ +#define PyUnicode_MAX_CHAR_VALUE(op) \ + (assert(PyUnicode_IS_READY(op)), \ + (PyUnicode_IS_ASCII(op) ? \ + (0x7f) : \ + (PyUnicode_KIND(op) == PyUnicode_1BYTE_KIND ? \ + (0xffU) : \ + (PyUnicode_KIND(op) == PyUnicode_2BYTE_KIND ? \ + (0xffffU) : \ + (0x10ffffU))))) + +#endif + +/* --- Constants ---------------------------------------------------------- */ + +/* This Unicode character will be used as replacement character during + decoding if the errors argument is set to "replace". Note: the + Unicode character U+FFFD is the official REPLACEMENT CHARACTER in + Unicode 3.0. */ + +#define Py_UNICODE_REPLACEMENT_CHARACTER ((Py_UCS4) 0xFFFD) + +/* === Public API ========================================================= */ + +/* --- Plain Py_UNICODE --------------------------------------------------- */ + +/* With PEP 393, this is the recommended way to allocate a new unicode object. + This function will allocate the object and its buffer in a single memory + block. Objects created using this function are not resizable. */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) PyUnicode_New( + Py_ssize_t size, /* Number of code points in the new string */ + Py_UCS4 maxchar /* maximum code point value in the string */ + ); +#endif + +/* Initializes the canonical string representation from the deprecated + wstr/Py_UNICODE representation. This function is used to convert Unicode + objects which were created using the old API to the new flexible format + introduced with PEP 393. + + Don't call this function directly, use the public PyUnicode_READY() macro + instead. */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) _PyUnicode_Ready( + PyObject *unicode /* Unicode object */ + ); +#endif + +/* Get a copy of a Unicode string. */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) _PyUnicode_Copy( + PyObject *unicode + ); +#endif + +/* Copy character from one unicode object into another, this function performs + character conversion when necessary and falls back to memcpy() if possible. + + Fail if to is too small (smaller than *how_many* or smaller than + len(from)-from_start), or if kind(from[from_start:from_start+how_many]) > + kind(to), or if *to* has more than 1 reference. + + Return the number of written character, or return -1 and raise an exception + on error. + + Pseudo-code: + + how_many = min(how_many, len(from) - from_start) + to[to_start:to_start+how_many] = from[from_start:from_start+how_many] + return how_many + + Note: The function doesn't write a terminating null character. + */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(Py_ssize_t) PyUnicode_CopyCharacters( + PyObject *to, + Py_ssize_t to_start, + PyObject *from, + Py_ssize_t from_start, + Py_ssize_t how_many + ); + +/* Unsafe version of PyUnicode_CopyCharacters(): don't check arguments and so + may crash if parameters are invalid (e.g. if the output string + is too short). */ +PyAPI_FUNC(void) _PyUnicode_FastCopyCharacters( + PyObject *to, + Py_ssize_t to_start, + PyObject *from, + Py_ssize_t from_start, + Py_ssize_t how_many + ); +#endif + +#ifndef Py_LIMITED_API +/* Fill a string with a character: write fill_char into + unicode[start:start+length]. + + Fail if fill_char is bigger than the string maximum character, or if the + string has more than 1 reference. + + Return the number of written character, or return -1 and raise an exception + on error. */ +PyAPI_FUNC(Py_ssize_t) PyUnicode_Fill( + PyObject *unicode, + Py_ssize_t start, + Py_ssize_t length, + Py_UCS4 fill_char + ); + +/* Unsafe version of PyUnicode_Fill(): don't check arguments and so may crash + if parameters are invalid (e.g. if length is longer than the string). */ +PyAPI_FUNC(void) _PyUnicode_FastFill( + PyObject *unicode, + Py_ssize_t start, + Py_ssize_t length, + Py_UCS4 fill_char + ); +#endif + +/* Create a Unicode Object from the Py_UNICODE buffer u of the given + size. + + u may be NULL which causes the contents to be undefined. It is the + user's responsibility to fill in the needed data afterwards. Note + that modifying the Unicode object contents after construction is + only allowed if u was set to NULL. + + The buffer is copied into the new object. */ + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode( + const Py_UNICODE *u, /* Unicode buffer */ + Py_ssize_t size /* size of buffer */ + ) /* Py_DEPRECATED(3.3) */; +#endif + +/* Similar to PyUnicode_FromUnicode(), but u points to UTF-8 encoded bytes */ +PyAPI_FUNC(PyObject*) PyUnicode_FromStringAndSize( + const char *u, /* UTF-8 encoded string */ + Py_ssize_t size /* size of buffer */ + ); + +/* Similar to PyUnicode_FromUnicode(), but u points to null-terminated + UTF-8 encoded bytes. The size is determined with strlen(). */ +PyAPI_FUNC(PyObject*) PyUnicode_FromString( + const char *u /* UTF-8 encoded string */ + ); + +#ifndef Py_LIMITED_API +/* Create a new string from a buffer of Py_UCS1, Py_UCS2 or Py_UCS4 characters. + Scan the string to find the maximum character. */ +PyAPI_FUNC(PyObject*) PyUnicode_FromKindAndData( + int kind, + const void *buffer, + Py_ssize_t size); + +/* Create a new string from a buffer of ASCII characters. + WARNING: Don't check if the string contains any non-ASCII character. */ +PyAPI_FUNC(PyObject*) _PyUnicode_FromASCII( + const char *buffer, + Py_ssize_t size); +#endif + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(PyObject*) PyUnicode_Substring( + PyObject *str, + Py_ssize_t start, + Py_ssize_t end); +#endif + +#ifndef Py_LIMITED_API +/* Compute the maximum character of the substring unicode[start:end]. + Return 127 for an empty string. */ +PyAPI_FUNC(Py_UCS4) _PyUnicode_FindMaxChar ( + PyObject *unicode, + Py_ssize_t start, + Py_ssize_t end); +#endif + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +/* Copy the string into a UCS4 buffer including the null character if copy_null + is set. Return NULL and raise an exception on error. Raise a SystemError if + the buffer is smaller than the string. Return buffer on success. + + buflen is the length of the buffer in (Py_UCS4) characters. */ +PyAPI_FUNC(Py_UCS4*) PyUnicode_AsUCS4( + PyObject *unicode, + Py_UCS4* buffer, + Py_ssize_t buflen, + int copy_null); + +/* Copy the string into a UCS4 buffer. A new buffer is allocated using + * PyMem_Malloc; if this fails, NULL is returned with a memory error + exception set. */ +PyAPI_FUNC(Py_UCS4*) PyUnicode_AsUCS4Copy(PyObject *unicode); +#endif + +#ifndef Py_LIMITED_API +/* Return a read-only pointer to the Unicode object's internal + Py_UNICODE buffer. + If the wchar_t/Py_UNICODE representation is not yet available, this + function will calculate it. */ + +PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode( + PyObject *unicode /* Unicode object */ + ) /* Py_DEPRECATED(3.3) */; + +/* Similar to PyUnicode_AsUnicode(), but raises a ValueError if the string + contains null characters. */ +PyAPI_FUNC(const Py_UNICODE *) _PyUnicode_AsUnicode( + PyObject *unicode /* Unicode object */ + ); + +/* Return a read-only pointer to the Unicode object's internal + Py_UNICODE buffer and save the length at size. + If the wchar_t/Py_UNICODE representation is not yet available, this + function will calculate it. */ + +PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicodeAndSize( + PyObject *unicode, /* Unicode object */ + Py_ssize_t *size /* location where to save the length */ + ) /* Py_DEPRECATED(3.3) */; +#endif + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +/* Get the length of the Unicode object. */ + +PyAPI_FUNC(Py_ssize_t) PyUnicode_GetLength( + PyObject *unicode +); +#endif + +/* Get the number of Py_UNICODE units in the + string representation. */ + +PyAPI_FUNC(Py_ssize_t) PyUnicode_GetSize( + PyObject *unicode /* Unicode object */ + ) Py_DEPRECATED(3.3); + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +/* Read a character from the string. */ + +PyAPI_FUNC(Py_UCS4) PyUnicode_ReadChar( + PyObject *unicode, + Py_ssize_t index + ); + +/* Write a character to the string. The string must have been created through + PyUnicode_New, must not be shared, and must not have been hashed yet. + + Return 0 on success, -1 on error. */ + +PyAPI_FUNC(int) PyUnicode_WriteChar( + PyObject *unicode, + Py_ssize_t index, + Py_UCS4 character + ); +#endif + +#ifndef Py_LIMITED_API +/* Get the maximum ordinal for a Unicode character. */ +PyAPI_FUNC(Py_UNICODE) PyUnicode_GetMax(void) Py_DEPRECATED(3.3); +#endif + +/* Resize a Unicode object. The length is the number of characters, except + if the kind of the string is PyUnicode_WCHAR_KIND: in this case, the length + is the number of Py_UNICODE characters. + + *unicode is modified to point to the new (resized) object and 0 + returned on success. + + Try to resize the string in place (which is usually faster than allocating + a new string and copy characters), or create a new string. + + Error handling is implemented as follows: an exception is set, -1 + is returned and *unicode left untouched. + + WARNING: The function doesn't check string content, the result may not be a + string in canonical representation. */ + +PyAPI_FUNC(int) PyUnicode_Resize( + PyObject **unicode, /* Pointer to the Unicode object */ + Py_ssize_t length /* New length */ + ); + +/* Decode obj to a Unicode object. + + bytes, bytearray and other bytes-like objects are decoded according to the + given encoding and error handler. The encoding and error handler can be + NULL to have the interface use UTF-8 and "strict". + + All other objects (including Unicode objects) raise an exception. + + The API returns NULL in case of an error. The caller is responsible + for decref'ing the returned objects. + +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_FromEncodedObject( + PyObject *obj, /* Object */ + const char *encoding, /* encoding */ + const char *errors /* error handling */ + ); + +/* Copy an instance of a Unicode subtype to a new true Unicode object if + necessary. If obj is already a true Unicode object (not a subtype), return + the reference with *incremented* refcount. + + The API returns NULL in case of an error. The caller is responsible + for decref'ing the returned objects. + +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_FromObject( + PyObject *obj /* Object */ + ); + +PyAPI_FUNC(PyObject *) PyUnicode_FromFormatV( + const char *format, /* ASCII-encoded string */ + va_list vargs + ); +PyAPI_FUNC(PyObject *) PyUnicode_FromFormat( + const char *format, /* ASCII-encoded string */ + ... + ); + +#ifndef Py_LIMITED_API +typedef struct { + PyObject *buffer; + void *data; + enum PyUnicode_Kind kind; + Py_UCS4 maxchar; + Py_ssize_t size; + Py_ssize_t pos; + + /* minimum number of allocated characters (default: 0) */ + Py_ssize_t min_length; + + /* minimum character (default: 127, ASCII) */ + Py_UCS4 min_char; + + /* If non-zero, overallocate the buffer (default: 0). */ + unsigned char overallocate; + + /* If readonly is 1, buffer is a shared string (cannot be modified) + and size is set to 0. */ + unsigned char readonly; +} _PyUnicodeWriter ; + +/* Initialize a Unicode writer. + * + * By default, the minimum buffer size is 0 character and overallocation is + * disabled. Set min_length, min_char and overallocate attributes to control + * the allocation of the buffer. */ +PyAPI_FUNC(void) +_PyUnicodeWriter_Init(_PyUnicodeWriter *writer); + +/* Prepare the buffer to write 'length' characters + with the specified maximum character. + + Return 0 on success, raise an exception and return -1 on error. */ +#define _PyUnicodeWriter_Prepare(WRITER, LENGTH, MAXCHAR) \ + (((MAXCHAR) <= (WRITER)->maxchar \ + && (LENGTH) <= (WRITER)->size - (WRITER)->pos) \ + ? 0 \ + : (((LENGTH) == 0) \ + ? 0 \ + : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR)))) + +/* Don't call this function directly, use the _PyUnicodeWriter_Prepare() macro + instead. */ +PyAPI_FUNC(int) +_PyUnicodeWriter_PrepareInternal(_PyUnicodeWriter *writer, + Py_ssize_t length, Py_UCS4 maxchar); + +/* Prepare the buffer to have at least the kind KIND. + For example, kind=PyUnicode_2BYTE_KIND ensures that the writer will + support characters in range U+000-U+FFFF. + + Return 0 on success, raise an exception and return -1 on error. */ +#define _PyUnicodeWriter_PrepareKind(WRITER, KIND) \ + (assert((KIND) != PyUnicode_WCHAR_KIND), \ + (KIND) <= (WRITER)->kind \ + ? 0 \ + : _PyUnicodeWriter_PrepareKindInternal((WRITER), (KIND))) + +/* Don't call this function directly, use the _PyUnicodeWriter_PrepareKind() + macro instead. */ +PyAPI_FUNC(int) +_PyUnicodeWriter_PrepareKindInternal(_PyUnicodeWriter *writer, + enum PyUnicode_Kind kind); + +/* Append a Unicode character. + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) +_PyUnicodeWriter_WriteChar(_PyUnicodeWriter *writer, + Py_UCS4 ch + ); + +/* Append a Unicode string. + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) +_PyUnicodeWriter_WriteStr(_PyUnicodeWriter *writer, + PyObject *str /* Unicode string */ + ); + +/* Append a substring of a Unicode string. + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) +_PyUnicodeWriter_WriteSubstring(_PyUnicodeWriter *writer, + PyObject *str, /* Unicode string */ + Py_ssize_t start, + Py_ssize_t end + ); + +/* Append an ASCII-encoded byte string. + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) +_PyUnicodeWriter_WriteASCIIString(_PyUnicodeWriter *writer, + const char *str, /* ASCII-encoded byte string */ + Py_ssize_t len /* number of bytes, or -1 if unknown */ + ); + +/* Append a latin1-encoded byte string. + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) +_PyUnicodeWriter_WriteLatin1String(_PyUnicodeWriter *writer, + const char *str, /* latin1-encoded byte string */ + Py_ssize_t len /* length in bytes */ + ); + +/* Get the value of the writer as a Unicode string. Clear the + buffer of the writer. Raise an exception and return NULL + on error. */ +PyAPI_FUNC(PyObject *) +_PyUnicodeWriter_Finish(_PyUnicodeWriter *writer); + +/* Deallocate memory of a writer (clear its internal buffer). */ +PyAPI_FUNC(void) +_PyUnicodeWriter_Dealloc(_PyUnicodeWriter *writer); +#endif + +#ifndef Py_LIMITED_API +/* Format the object based on the format_spec, as defined in PEP 3101 + (Advanced String Formatting). */ +PyAPI_FUNC(int) _PyUnicode_FormatAdvancedWriter( + _PyUnicodeWriter *writer, + PyObject *obj, + PyObject *format_spec, + Py_ssize_t start, + Py_ssize_t end); +#endif + +PyAPI_FUNC(void) PyUnicode_InternInPlace(PyObject **); +PyAPI_FUNC(void) PyUnicode_InternImmortal(PyObject **); +PyAPI_FUNC(PyObject *) PyUnicode_InternFromString( + const char *u /* UTF-8 encoded string */ + ); +#ifndef Py_LIMITED_API +PyAPI_FUNC(void) _Py_ReleaseInternedUnicodeStrings(void); +#endif + +/* Use only if you know it's a string */ +#define PyUnicode_CHECK_INTERNED(op) \ + (((PyASCIIObject *)(op))->state.interned) + +/* --- wchar_t support for platforms which support it --------------------- */ + +#ifdef HAVE_WCHAR_H + +/* Create a Unicode Object from the wchar_t buffer w of the given + size. + + The buffer is copied into the new object. */ + +PyAPI_FUNC(PyObject*) PyUnicode_FromWideChar( + const wchar_t *w, /* wchar_t buffer */ + Py_ssize_t size /* size of buffer */ + ); + +/* Copies the Unicode Object contents into the wchar_t buffer w. At + most size wchar_t characters are copied. + + Note that the resulting wchar_t string may or may not be + 0-terminated. It is the responsibility of the caller to make sure + that the wchar_t string is 0-terminated in case this is required by + the application. + + Returns the number of wchar_t characters copied (excluding a + possibly trailing 0-termination character) or -1 in case of an + error. */ + +PyAPI_FUNC(Py_ssize_t) PyUnicode_AsWideChar( + PyObject *unicode, /* Unicode object */ + wchar_t *w, /* wchar_t buffer */ + Py_ssize_t size /* size of buffer */ + ); + +/* Convert the Unicode object to a wide character string. The output string + always ends with a nul character. If size is not NULL, write the number of + wide characters (excluding the null character) into *size. + + Returns a buffer allocated by PyMem_Malloc() (use PyMem_Free() to free it) + on success. On error, returns NULL, *size is undefined and raises a + MemoryError. */ + +PyAPI_FUNC(wchar_t*) PyUnicode_AsWideCharString( + PyObject *unicode, /* Unicode object */ + Py_ssize_t *size /* number of characters of the result */ + ); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(void*) _PyUnicode_AsKind(PyObject *s, unsigned int kind); +#endif + +#endif + +/* --- Unicode ordinals --------------------------------------------------- */ + +/* Create a Unicode Object from the given Unicode code point ordinal. + + The ordinal must be in range(0x110000). A ValueError is + raised in case it is not. + +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_FromOrdinal(int ordinal); + +/* --- Free-list management ----------------------------------------------- */ + +/* Clear the free list used by the Unicode implementation. + + This can be used to release memory used for objects on the free + list back to the Python memory allocator. + +*/ + +PyAPI_FUNC(int) PyUnicode_ClearFreeList(void); + +/* === Builtin Codecs ===================================================== + + Many of these APIs take two arguments encoding and errors. These + parameters encoding and errors have the same semantics as the ones + of the builtin str() API. + + Setting encoding to NULL causes the default encoding (UTF-8) to be used. + + Error handling is set by errors which may also be set to NULL + meaning to use the default handling defined for the codec. Default + error handling for all builtin codecs is "strict" (ValueErrors are + raised). + + The codecs all use a similar interface. Only deviation from the + generic ones are documented. + +*/ + +/* --- Manage the default encoding ---------------------------------------- */ + +/* Returns a pointer to the default encoding (UTF-8) of the + Unicode object unicode and the size of the encoded representation + in bytes stored in *size. + + In case of an error, no *size is set. + + This function caches the UTF-8 encoded string in the unicodeobject + and subsequent calls will return the same string. The memory is released + when the unicodeobject is deallocated. + + _PyUnicode_AsStringAndSize is a #define for PyUnicode_AsUTF8AndSize to + support the previous internal function with the same behaviour. + + *** This API is for interpreter INTERNAL USE ONLY and will likely + *** be removed or changed in the future. + + *** If you need to access the Unicode object as UTF-8 bytes string, + *** please use PyUnicode_AsUTF8String() instead. +*/ + +#ifndef Py_LIMITED_API +PyAPI_FUNC(const char *) PyUnicode_AsUTF8AndSize( + PyObject *unicode, + Py_ssize_t *size); +#define _PyUnicode_AsStringAndSize PyUnicode_AsUTF8AndSize +#endif + +/* Returns a pointer to the default encoding (UTF-8) of the + Unicode object unicode. + + Like PyUnicode_AsUTF8AndSize(), this also caches the UTF-8 representation + in the unicodeobject. + + _PyUnicode_AsString is a #define for PyUnicode_AsUTF8 to + support the previous internal function with the same behaviour. + + Use of this API is DEPRECATED since no size information can be + extracted from the returned data. + + *** This API is for interpreter INTERNAL USE ONLY and will likely + *** be removed or changed for Python 3.1. + + *** If you need to access the Unicode object as UTF-8 bytes string, + *** please use PyUnicode_AsUTF8String() instead. + +*/ + +#ifndef Py_LIMITED_API +PyAPI_FUNC(const char *) PyUnicode_AsUTF8(PyObject *unicode); +#define _PyUnicode_AsString PyUnicode_AsUTF8 +#endif + +/* Returns "utf-8". */ + +PyAPI_FUNC(const char*) PyUnicode_GetDefaultEncoding(void); + +/* --- Generic Codecs ----------------------------------------------------- */ + +/* Create a Unicode object by decoding the encoded string s of the + given size. */ + +PyAPI_FUNC(PyObject*) PyUnicode_Decode( + const char *s, /* encoded string */ + Py_ssize_t size, /* size of buffer */ + const char *encoding, /* encoding */ + const char *errors /* error handling */ + ); + +/* Decode a Unicode object unicode and return the result as Python + object. + + This API is DEPRECATED. The only supported standard encoding is rot13. + Use PyCodec_Decode() to decode with rot13 and non-standard codecs + that decode from str. */ + +PyAPI_FUNC(PyObject*) PyUnicode_AsDecodedObject( + PyObject *unicode, /* Unicode object */ + const char *encoding, /* encoding */ + const char *errors /* error handling */ + ) Py_DEPRECATED(3.6); + +/* Decode a Unicode object unicode and return the result as Unicode + object. + + This API is DEPRECATED. The only supported standard encoding is rot13. + Use PyCodec_Decode() to decode with rot13 and non-standard codecs + that decode from str to str. */ + +PyAPI_FUNC(PyObject*) PyUnicode_AsDecodedUnicode( + PyObject *unicode, /* Unicode object */ + const char *encoding, /* encoding */ + const char *errors /* error handling */ + ) Py_DEPRECATED(3.6); + +/* Encodes a Py_UNICODE buffer of the given size and returns a + Python string object. */ + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) PyUnicode_Encode( + const Py_UNICODE *s, /* Unicode char buffer */ + Py_ssize_t size, /* number of Py_UNICODE chars to encode */ + const char *encoding, /* encoding */ + const char *errors /* error handling */ + ) Py_DEPRECATED(3.3); +#endif + +/* Encodes a Unicode object and returns the result as Python + object. + + This API is DEPRECATED. It is superseded by PyUnicode_AsEncodedString() + since all standard encodings (except rot13) encode str to bytes. + Use PyCodec_Encode() for encoding with rot13 and non-standard codecs + that encode form str to non-bytes. */ + +PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedObject( + PyObject *unicode, /* Unicode object */ + const char *encoding, /* encoding */ + const char *errors /* error handling */ + ) Py_DEPRECATED(3.6); + +/* Encodes a Unicode object and returns the result as Python string + object. */ + +PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedString( + PyObject *unicode, /* Unicode object */ + const char *encoding, /* encoding */ + const char *errors /* error handling */ + ); + +/* Encodes a Unicode object and returns the result as Unicode + object. + + This API is DEPRECATED. The only supported standard encodings is rot13. + Use PyCodec_Encode() to encode with rot13 and non-standard codecs + that encode from str to str. */ + +PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedUnicode( + PyObject *unicode, /* Unicode object */ + const char *encoding, /* encoding */ + const char *errors /* error handling */ + ) Py_DEPRECATED(3.6); + +/* Build an encoding map. */ + +PyAPI_FUNC(PyObject*) PyUnicode_BuildEncodingMap( + PyObject* string /* 256 character map */ + ); + +/* --- UTF-7 Codecs ------------------------------------------------------- */ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF7( + const char *string, /* UTF-7 encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors /* error handling */ + ); + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF7Stateful( + const char *string, /* UTF-7 encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors, /* error handling */ + Py_ssize_t *consumed /* bytes consumed */ + ); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF7( + const Py_UNICODE *data, /* Unicode char buffer */ + Py_ssize_t length, /* number of Py_UNICODE chars to encode */ + int base64SetO, /* Encode RFC2152 Set O characters in base64 */ + int base64WhiteSpace, /* Encode whitespace (sp, ht, nl, cr) in base64 */ + const char *errors /* error handling */ + ) Py_DEPRECATED(3.3); +PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF7( + PyObject *unicode, /* Unicode object */ + int base64SetO, /* Encode RFC2152 Set O characters in base64 */ + int base64WhiteSpace, /* Encode whitespace (sp, ht, nl, cr) in base64 */ + const char *errors /* error handling */ + ); +#endif + +/* --- UTF-8 Codecs ------------------------------------------------------- */ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8( + const char *string, /* UTF-8 encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors /* error handling */ + ); + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8Stateful( + const char *string, /* UTF-8 encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors, /* error handling */ + Py_ssize_t *consumed /* bytes consumed */ + ); + +PyAPI_FUNC(PyObject*) PyUnicode_AsUTF8String( + PyObject *unicode /* Unicode object */ + ); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) _PyUnicode_AsUTF8String( + PyObject *unicode, + const char *errors); + +PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF8( + const Py_UNICODE *data, /* Unicode char buffer */ + Py_ssize_t length, /* number of Py_UNICODE chars to encode */ + const char *errors /* error handling */ + ) Py_DEPRECATED(3.3); +#endif + +/* --- UTF-32 Codecs ------------------------------------------------------ */ + +/* Decodes length bytes from a UTF-32 encoded buffer string and returns + the corresponding Unicode object. + + errors (if non-NULL) defines the error handling. It defaults + to "strict". + + If byteorder is non-NULL, the decoder starts decoding using the + given byte order: + + *byteorder == -1: little endian + *byteorder == 0: native order + *byteorder == 1: big endian + + In native mode, the first four bytes of the stream are checked for a + BOM mark. If found, the BOM mark is analysed, the byte order + adjusted and the BOM skipped. In the other modes, no BOM mark + interpretation is done. After completion, *byteorder is set to the + current byte order at the end of input data. + + If byteorder is NULL, the codec starts in native order mode. + +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF32( + const char *string, /* UTF-32 encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors, /* error handling */ + int *byteorder /* pointer to byteorder to use + 0=native;-1=LE,1=BE; updated on + exit */ + ); + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF32Stateful( + const char *string, /* UTF-32 encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors, /* error handling */ + int *byteorder, /* pointer to byteorder to use + 0=native;-1=LE,1=BE; updated on + exit */ + Py_ssize_t *consumed /* bytes consumed */ + ); + +/* Returns a Python string using the UTF-32 encoding in native byte + order. The string always starts with a BOM mark. */ + +PyAPI_FUNC(PyObject*) PyUnicode_AsUTF32String( + PyObject *unicode /* Unicode object */ + ); + +/* Returns a Python string object holding the UTF-32 encoded value of + the Unicode data. + + If byteorder is not 0, output is written according to the following + byte order: + + byteorder == -1: little endian + byteorder == 0: native byte order (writes a BOM mark) + byteorder == 1: big endian + + If byteorder is 0, the output string will always start with the + Unicode BOM mark (U+FEFF). In the other two modes, no BOM mark is + prepended. + +*/ + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF32( + const Py_UNICODE *data, /* Unicode char buffer */ + Py_ssize_t length, /* number of Py_UNICODE chars to encode */ + const char *errors, /* error handling */ + int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */ + ) Py_DEPRECATED(3.3); +PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF32( + PyObject *object, /* Unicode object */ + const char *errors, /* error handling */ + int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */ + ); +#endif + +/* --- UTF-16 Codecs ------------------------------------------------------ */ + +/* Decodes length bytes from a UTF-16 encoded buffer string and returns + the corresponding Unicode object. + + errors (if non-NULL) defines the error handling. It defaults + to "strict". + + If byteorder is non-NULL, the decoder starts decoding using the + given byte order: + + *byteorder == -1: little endian + *byteorder == 0: native order + *byteorder == 1: big endian + + In native mode, the first two bytes of the stream are checked for a + BOM mark. If found, the BOM mark is analysed, the byte order + adjusted and the BOM skipped. In the other modes, no BOM mark + interpretation is done. After completion, *byteorder is set to the + current byte order at the end of input data. + + If byteorder is NULL, the codec starts in native order mode. + +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16( + const char *string, /* UTF-16 encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors, /* error handling */ + int *byteorder /* pointer to byteorder to use + 0=native;-1=LE,1=BE; updated on + exit */ + ); + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16Stateful( + const char *string, /* UTF-16 encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors, /* error handling */ + int *byteorder, /* pointer to byteorder to use + 0=native;-1=LE,1=BE; updated on + exit */ + Py_ssize_t *consumed /* bytes consumed */ + ); + +/* Returns a Python string using the UTF-16 encoding in native byte + order. The string always starts with a BOM mark. */ + +PyAPI_FUNC(PyObject*) PyUnicode_AsUTF16String( + PyObject *unicode /* Unicode object */ + ); + +/* Returns a Python string object holding the UTF-16 encoded value of + the Unicode data. + + If byteorder is not 0, output is written according to the following + byte order: + + byteorder == -1: little endian + byteorder == 0: native byte order (writes a BOM mark) + byteorder == 1: big endian + + If byteorder is 0, the output string will always start with the + Unicode BOM mark (U+FEFF). In the other two modes, no BOM mark is + prepended. + + Note that Py_UNICODE data is being interpreted as UTF-16 reduced to + UCS-2. This trick makes it possible to add full UTF-16 capabilities + at a later point without compromising the APIs. + +*/ + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF16( + const Py_UNICODE *data, /* Unicode char buffer */ + Py_ssize_t length, /* number of Py_UNICODE chars to encode */ + const char *errors, /* error handling */ + int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */ + ) Py_DEPRECATED(3.3); +PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF16( + PyObject* unicode, /* Unicode object */ + const char *errors, /* error handling */ + int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */ + ); +#endif + +/* --- Unicode-Escape Codecs ---------------------------------------------- */ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeUnicodeEscape( + const char *string, /* Unicode-Escape encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors /* error handling */ + ); + +#ifndef Py_LIMITED_API +/* Helper for PyUnicode_DecodeUnicodeEscape that detects invalid escape + chars. */ +PyAPI_FUNC(PyObject*) _PyUnicode_DecodeUnicodeEscape( + const char *string, /* Unicode-Escape encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors, /* error handling */ + const char **first_invalid_escape /* on return, points to first + invalid escaped char in + string. */ +); +#endif + +PyAPI_FUNC(PyObject*) PyUnicode_AsUnicodeEscapeString( + PyObject *unicode /* Unicode object */ + ); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) PyUnicode_EncodeUnicodeEscape( + const Py_UNICODE *data, /* Unicode char buffer */ + Py_ssize_t length /* Number of Py_UNICODE chars to encode */ + ) Py_DEPRECATED(3.3); +#endif + +/* --- Raw-Unicode-Escape Codecs ------------------------------------------ */ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeRawUnicodeEscape( + const char *string, /* Raw-Unicode-Escape encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors /* error handling */ + ); + +PyAPI_FUNC(PyObject*) PyUnicode_AsRawUnicodeEscapeString( + PyObject *unicode /* Unicode object */ + ); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) PyUnicode_EncodeRawUnicodeEscape( + const Py_UNICODE *data, /* Unicode char buffer */ + Py_ssize_t length /* Number of Py_UNICODE chars to encode */ + ) Py_DEPRECATED(3.3); +#endif + +/* --- Unicode Internal Codec --------------------------------------------- + + Only for internal use in _codecsmodule.c */ + +#ifndef Py_LIMITED_API +PyObject *_PyUnicode_DecodeUnicodeInternal( + const char *string, + Py_ssize_t length, + const char *errors + ); +#endif + +/* --- Latin-1 Codecs ----------------------------------------------------- + + Note: Latin-1 corresponds to the first 256 Unicode ordinals. + +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeLatin1( + const char *string, /* Latin-1 encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors /* error handling */ + ); + +PyAPI_FUNC(PyObject*) PyUnicode_AsLatin1String( + PyObject *unicode /* Unicode object */ + ); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) _PyUnicode_AsLatin1String( + PyObject* unicode, + const char* errors); + +PyAPI_FUNC(PyObject*) PyUnicode_EncodeLatin1( + const Py_UNICODE *data, /* Unicode char buffer */ + Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ + const char *errors /* error handling */ + ) Py_DEPRECATED(3.3); +#endif + +/* --- ASCII Codecs ------------------------------------------------------- + + Only 7-bit ASCII data is excepted. All other codes generate errors. + +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeASCII( + const char *string, /* ASCII encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors /* error handling */ + ); + +PyAPI_FUNC(PyObject*) PyUnicode_AsASCIIString( + PyObject *unicode /* Unicode object */ + ); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) _PyUnicode_AsASCIIString( + PyObject* unicode, + const char* errors); + +PyAPI_FUNC(PyObject*) PyUnicode_EncodeASCII( + const Py_UNICODE *data, /* Unicode char buffer */ + Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ + const char *errors /* error handling */ + ) Py_DEPRECATED(3.3); +#endif + +/* --- Character Map Codecs ----------------------------------------------- + + This codec uses mappings to encode and decode characters. + + Decoding mappings must map byte ordinals (integers in the range from 0 to + 255) to Unicode strings, integers (which are then interpreted as Unicode + ordinals) or None. Unmapped data bytes (ones which cause a LookupError) + as well as mapped to None, 0xFFFE or '\ufffe' are treated as "undefined + mapping" and cause an error. + + Encoding mappings must map Unicode ordinal integers to bytes objects, + integers in the range from 0 to 255 or None. Unmapped character + ordinals (ones which cause a LookupError) as well as mapped to + None are treated as "undefined mapping" and cause an error. + +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeCharmap( + const char *string, /* Encoded string */ + Py_ssize_t length, /* size of string */ + PyObject *mapping, /* decoding mapping */ + const char *errors /* error handling */ + ); + +PyAPI_FUNC(PyObject*) PyUnicode_AsCharmapString( + PyObject *unicode, /* Unicode object */ + PyObject *mapping /* encoding mapping */ + ); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) PyUnicode_EncodeCharmap( + const Py_UNICODE *data, /* Unicode char buffer */ + Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ + PyObject *mapping, /* encoding mapping */ + const char *errors /* error handling */ + ) Py_DEPRECATED(3.3); +PyAPI_FUNC(PyObject*) _PyUnicode_EncodeCharmap( + PyObject *unicode, /* Unicode object */ + PyObject *mapping, /* encoding mapping */ + const char *errors /* error handling */ + ); +#endif + +/* Translate a Py_UNICODE buffer of the given length by applying a + character mapping table to it and return the resulting Unicode + object. + + The mapping table must map Unicode ordinal integers to Unicode strings, + Unicode ordinal integers or None (causing deletion of the character). + + Mapping tables may be dictionaries or sequences. Unmapped character + ordinals (ones which cause a LookupError) are left untouched and + are copied as-is. + +*/ + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) PyUnicode_TranslateCharmap( + const Py_UNICODE *data, /* Unicode char buffer */ + Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ + PyObject *table, /* Translate table */ + const char *errors /* error handling */ + ) Py_DEPRECATED(3.3); +#endif + +#ifdef MS_WINDOWS + +/* --- MBCS codecs for Windows -------------------------------------------- */ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeMBCS( + const char *string, /* MBCS encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors /* error handling */ + ); + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeMBCSStateful( + const char *string, /* MBCS encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors, /* error handling */ + Py_ssize_t *consumed /* bytes consumed */ + ); + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(PyObject*) PyUnicode_DecodeCodePageStateful( + int code_page, /* code page number */ + const char *string, /* encoded string */ + Py_ssize_t length, /* size of string */ + const char *errors, /* error handling */ + Py_ssize_t *consumed /* bytes consumed */ + ); +#endif + +PyAPI_FUNC(PyObject*) PyUnicode_AsMBCSString( + PyObject *unicode /* Unicode object */ + ); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS( + const Py_UNICODE *data, /* Unicode char buffer */ + Py_ssize_t length, /* number of Py_UNICODE chars to encode */ + const char *errors /* error handling */ + ) Py_DEPRECATED(3.3); +#endif + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +PyAPI_FUNC(PyObject*) PyUnicode_EncodeCodePage( + int code_page, /* code page number */ + PyObject *unicode, /* Unicode object */ + const char *errors /* error handling */ + ); +#endif + +#endif /* MS_WINDOWS */ + +#ifndef Py_LIMITED_API +/* --- Decimal Encoder ---------------------------------------------------- */ + +/* Takes a Unicode string holding a decimal value and writes it into + an output buffer using standard ASCII digit codes. + + The output buffer has to provide at least length+1 bytes of storage + area. The output string is 0-terminated. + + The encoder converts whitespace to ' ', decimal characters to their + corresponding ASCII digit and all other Latin-1 characters except + \0 as-is. Characters outside this range (Unicode ordinals 1-256) + are treated as errors. This includes embedded NULL bytes. + + Error handling is defined by the errors argument: + + NULL or "strict": raise a ValueError + "ignore": ignore the wrong characters (these are not copied to the + output buffer) + "replace": replaces illegal characters with '?' + + Returns 0 on success, -1 on failure. + +*/ + +PyAPI_FUNC(int) PyUnicode_EncodeDecimal( + Py_UNICODE *s, /* Unicode buffer */ + Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ + char *output, /* Output buffer; must have size >= length */ + const char *errors /* error handling */ + ) /* Py_DEPRECATED(3.3) */; + +/* Transforms code points that have decimal digit property to the + corresponding ASCII digit code points. + + Returns a new Unicode string on success, NULL on failure. +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_TransformDecimalToASCII( + Py_UNICODE *s, /* Unicode buffer */ + Py_ssize_t length /* Number of Py_UNICODE chars to transform */ + ) /* Py_DEPRECATED(3.3) */; + +/* Coverts a Unicode object holding a decimal value to an ASCII string + for using in int, float and complex parsers. + Transforms code points that have decimal digit property to the + corresponding ASCII digit code points. Transforms spaces to ASCII. + Transforms code points starting from the first non-ASCII code point that + is neither a decimal digit nor a space to the end into '?'. */ + +PyAPI_FUNC(PyObject*) _PyUnicode_TransformDecimalAndSpaceToASCII( + PyObject *unicode /* Unicode object */ + ); +#endif + +/* --- Locale encoding --------------------------------------------------- */ + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +/* Decode a string from the current locale encoding. The decoder is strict if + *surrogateescape* is equal to zero, otherwise it uses the 'surrogateescape' + error handler (PEP 383) to escape undecodable bytes. If a byte sequence can + be decoded as a surrogate character and *surrogateescape* is not equal to + zero, the byte sequence is escaped using the 'surrogateescape' error handler + instead of being decoded. *str* must end with a null character but cannot + contain embedded null characters. */ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeLocaleAndSize( + const char *str, + Py_ssize_t len, + const char *errors); + +/* Similar to PyUnicode_DecodeLocaleAndSize(), but compute the string + length using strlen(). */ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeLocale( + const char *str, + const char *errors); + +/* Encode a Unicode object to the current locale encoding. The encoder is + strict is *surrogateescape* is equal to zero, otherwise the + "surrogateescape" error handler is used. Return a bytes object. The string + cannot contain embedded null characters. */ + +PyAPI_FUNC(PyObject*) PyUnicode_EncodeLocale( + PyObject *unicode, + const char *errors + ); +#endif + +/* --- File system encoding ---------------------------------------------- */ + +/* ParseTuple converter: encode str objects to bytes using + PyUnicode_EncodeFSDefault(); bytes objects are output as-is. */ + +PyAPI_FUNC(int) PyUnicode_FSConverter(PyObject*, void*); + +/* ParseTuple converter: decode bytes objects to unicode using + PyUnicode_DecodeFSDefaultAndSize(); str objects are output as-is. */ + +PyAPI_FUNC(int) PyUnicode_FSDecoder(PyObject*, void*); + +/* Decode a null-terminated string using Py_FileSystemDefaultEncoding + and the "surrogateescape" error handler. + + If Py_FileSystemDefaultEncoding is not set, fall back to the locale + encoding. + + Use PyUnicode_DecodeFSDefaultAndSize() if the string length is known. +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeFSDefault( + const char *s /* encoded string */ + ); + +/* Decode a string using Py_FileSystemDefaultEncoding + and the "surrogateescape" error handler. + + If Py_FileSystemDefaultEncoding is not set, fall back to the locale + encoding. +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_DecodeFSDefaultAndSize( + const char *s, /* encoded string */ + Py_ssize_t size /* size */ + ); + +/* Encode a Unicode object to Py_FileSystemDefaultEncoding with the + "surrogateescape" error handler, and return bytes. + + If Py_FileSystemDefaultEncoding is not set, fall back to the locale + encoding. +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_EncodeFSDefault( + PyObject *unicode + ); + +/* --- Methods & Slots ---------------------------------------------------- + + These are capable of handling Unicode objects and strings on input + (we refer to them as strings in the descriptions) and return + Unicode objects or integers as appropriate. */ + +/* Concat two strings giving a new Unicode string. */ + +PyAPI_FUNC(PyObject*) PyUnicode_Concat( + PyObject *left, /* Left string */ + PyObject *right /* Right string */ + ); + +/* Concat two strings and put the result in *pleft + (sets *pleft to NULL on error) */ + +PyAPI_FUNC(void) PyUnicode_Append( + PyObject **pleft, /* Pointer to left string */ + PyObject *right /* Right string */ + ); + +/* Concat two strings, put the result in *pleft and drop the right object + (sets *pleft to NULL on error) */ + +PyAPI_FUNC(void) PyUnicode_AppendAndDel( + PyObject **pleft, /* Pointer to left string */ + PyObject *right /* Right string */ + ); + +/* Split a string giving a list of Unicode strings. + + If sep is NULL, splitting will be done at all whitespace + substrings. Otherwise, splits occur at the given separator. + + At most maxsplit splits will be done. If negative, no limit is set. + + Separators are not included in the resulting list. + +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_Split( + PyObject *s, /* String to split */ + PyObject *sep, /* String separator */ + Py_ssize_t maxsplit /* Maxsplit count */ + ); + +/* Dito, but split at line breaks. + + CRLF is considered to be one line break. Line breaks are not + included in the resulting list. */ + +PyAPI_FUNC(PyObject*) PyUnicode_Splitlines( + PyObject *s, /* String to split */ + int keepends /* If true, line end markers are included */ + ); + +/* Partition a string using a given separator. */ + +PyAPI_FUNC(PyObject*) PyUnicode_Partition( + PyObject *s, /* String to partition */ + PyObject *sep /* String separator */ + ); + +/* Partition a string using a given separator, searching from the end of the + string. */ + +PyAPI_FUNC(PyObject*) PyUnicode_RPartition( + PyObject *s, /* String to partition */ + PyObject *sep /* String separator */ + ); + +/* Split a string giving a list of Unicode strings. + + If sep is NULL, splitting will be done at all whitespace + substrings. Otherwise, splits occur at the given separator. + + At most maxsplit splits will be done. But unlike PyUnicode_Split + PyUnicode_RSplit splits from the end of the string. If negative, + no limit is set. + + Separators are not included in the resulting list. + +*/ + +PyAPI_FUNC(PyObject*) PyUnicode_RSplit( + PyObject *s, /* String to split */ + PyObject *sep, /* String separator */ + Py_ssize_t maxsplit /* Maxsplit count */ + ); + +/* Translate a string by applying a character mapping table to it and + return the resulting Unicode object. + + The mapping table must map Unicode ordinal integers to Unicode strings, + Unicode ordinal integers or None (causing deletion of the character). + + Mapping tables may be dictionaries or sequences. Unmapped character + ordinals (ones which cause a LookupError) are left untouched and + are copied as-is. + +*/ + +PyAPI_FUNC(PyObject *) PyUnicode_Translate( + PyObject *str, /* String */ + PyObject *table, /* Translate table */ + const char *errors /* error handling */ + ); + +/* Join a sequence of strings using the given separator and return + the resulting Unicode string. */ + +PyAPI_FUNC(PyObject*) PyUnicode_Join( + PyObject *separator, /* Separator string */ + PyObject *seq /* Sequence object */ + ); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject *) _PyUnicode_JoinArray( + PyObject *separator, + PyObject *const *items, + Py_ssize_t seqlen + ); +#endif /* Py_LIMITED_API */ + +/* Return 1 if substr matches str[start:end] at the given tail end, 0 + otherwise. */ + +PyAPI_FUNC(Py_ssize_t) PyUnicode_Tailmatch( + PyObject *str, /* String */ + PyObject *substr, /* Prefix or Suffix string */ + Py_ssize_t start, /* Start index */ + Py_ssize_t end, /* Stop index */ + int direction /* Tail end: -1 prefix, +1 suffix */ + ); + +/* Return the first position of substr in str[start:end] using the + given search direction or -1 if not found. -2 is returned in case + an error occurred and an exception is set. */ + +PyAPI_FUNC(Py_ssize_t) PyUnicode_Find( + PyObject *str, /* String */ + PyObject *substr, /* Substring to find */ + Py_ssize_t start, /* Start index */ + Py_ssize_t end, /* Stop index */ + int direction /* Find direction: +1 forward, -1 backward */ + ); + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +/* Like PyUnicode_Find, but search for single character only. */ +PyAPI_FUNC(Py_ssize_t) PyUnicode_FindChar( + PyObject *str, + Py_UCS4 ch, + Py_ssize_t start, + Py_ssize_t end, + int direction + ); +#endif + +/* Count the number of occurrences of substr in str[start:end]. */ + +PyAPI_FUNC(Py_ssize_t) PyUnicode_Count( + PyObject *str, /* String */ + PyObject *substr, /* Substring to count */ + Py_ssize_t start, /* Start index */ + Py_ssize_t end /* Stop index */ + ); + +/* Replace at most maxcount occurrences of substr in str with replstr + and return the resulting Unicode object. */ + +PyAPI_FUNC(PyObject *) PyUnicode_Replace( + PyObject *str, /* String */ + PyObject *substr, /* Substring to find */ + PyObject *replstr, /* Substring to replace */ + Py_ssize_t maxcount /* Max. number of replacements to apply; + -1 = all */ + ); + +/* Compare two strings and return -1, 0, 1 for less than, equal, + greater than resp. + Raise an exception and return -1 on error. */ + +PyAPI_FUNC(int) PyUnicode_Compare( + PyObject *left, /* Left string */ + PyObject *right /* Right string */ + ); + +#ifndef Py_LIMITED_API +/* Test whether a unicode is equal to ASCII identifier. Return 1 if true, + 0 otherwise. The right argument must be ASCII identifier. + Any error occurs inside will be cleared before return. */ + +PyAPI_FUNC(int) _PyUnicode_EqualToASCIIId( + PyObject *left, /* Left string */ + _Py_Identifier *right /* Right identifier */ + ); +#endif + +/* Compare a Unicode object with C string and return -1, 0, 1 for less than, + equal, and greater than, respectively. It is best to pass only + ASCII-encoded strings, but the function interprets the input string as + ISO-8859-1 if it contains non-ASCII characters. + This function does not raise exceptions. */ + +PyAPI_FUNC(int) PyUnicode_CompareWithASCIIString( + PyObject *left, + const char *right /* ASCII-encoded string */ + ); + +#ifndef Py_LIMITED_API +/* Test whether a unicode is equal to ASCII string. Return 1 if true, + 0 otherwise. The right argument must be ASCII-encoded string. + Any error occurs inside will be cleared before return. */ + +PyAPI_FUNC(int) _PyUnicode_EqualToASCIIString( + PyObject *left, + const char *right /* ASCII-encoded string */ + ); +#endif + +/* Rich compare two strings and return one of the following: + + - NULL in case an exception was raised + - Py_True or Py_False for successful comparisons + - Py_NotImplemented in case the type combination is unknown + + Possible values for op: + + Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE + +*/ + +PyAPI_FUNC(PyObject *) PyUnicode_RichCompare( + PyObject *left, /* Left string */ + PyObject *right, /* Right string */ + int op /* Operation: Py_EQ, Py_NE, Py_GT, etc. */ + ); + +/* Apply an argument tuple or dictionary to a format string and return + the resulting Unicode string. */ + +PyAPI_FUNC(PyObject *) PyUnicode_Format( + PyObject *format, /* Format string */ + PyObject *args /* Argument tuple or dictionary */ + ); + +/* Checks whether element is contained in container and return 1/0 + accordingly. + + element has to coerce to a one element Unicode string. -1 is + returned in case of an error. */ + +PyAPI_FUNC(int) PyUnicode_Contains( + PyObject *container, /* Container string */ + PyObject *element /* Element string */ + ); + +/* Checks whether argument is a valid identifier. */ + +PyAPI_FUNC(int) PyUnicode_IsIdentifier(PyObject *s); + +#ifndef Py_LIMITED_API +/* Externally visible for str.strip(unicode) */ +PyAPI_FUNC(PyObject *) _PyUnicode_XStrip( + PyObject *self, + int striptype, + PyObject *sepobj + ); +#endif + +/* Using explicit passed-in values, insert the thousands grouping + into the string pointed to by buffer. For the argument descriptions, + see Objects/stringlib/localeutil.h */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(Py_ssize_t) _PyUnicode_InsertThousandsGrouping( + _PyUnicodeWriter *writer, + Py_ssize_t n_buffer, + PyObject *digits, + Py_ssize_t d_pos, + Py_ssize_t n_digits, + Py_ssize_t min_width, + const char *grouping, + PyObject *thousands_sep, + Py_UCS4 *maxchar); +#endif +/* === Characters Type APIs =============================================== */ + +/* Helper array used by Py_UNICODE_ISSPACE(). */ + +#ifndef Py_LIMITED_API +PyAPI_DATA(const unsigned char) _Py_ascii_whitespace[]; + +/* These should not be used directly. Use the Py_UNICODE_IS* and + Py_UNICODE_TO* macros instead. + + These APIs are implemented in Objects/unicodectype.c. + +*/ + +PyAPI_FUNC(int) _PyUnicode_IsLowercase( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_IsUppercase( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_IsTitlecase( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_IsXidStart( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_IsXidContinue( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_IsWhitespace( + const Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_IsLinebreak( + const Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(Py_UCS4) _PyUnicode_ToLowercase( + Py_UCS4 ch /* Unicode character */ + ) /* Py_DEPRECATED(3.3) */; + +PyAPI_FUNC(Py_UCS4) _PyUnicode_ToUppercase( + Py_UCS4 ch /* Unicode character */ + ) /* Py_DEPRECATED(3.3) */; + +PyAPI_FUNC(Py_UCS4) _PyUnicode_ToTitlecase( + Py_UCS4 ch /* Unicode character */ + ) Py_DEPRECATED(3.3); + +PyAPI_FUNC(int) _PyUnicode_ToLowerFull( + Py_UCS4 ch, /* Unicode character */ + Py_UCS4 *res + ); + +PyAPI_FUNC(int) _PyUnicode_ToTitleFull( + Py_UCS4 ch, /* Unicode character */ + Py_UCS4 *res + ); + +PyAPI_FUNC(int) _PyUnicode_ToUpperFull( + Py_UCS4 ch, /* Unicode character */ + Py_UCS4 *res + ); + +PyAPI_FUNC(int) _PyUnicode_ToFoldedFull( + Py_UCS4 ch, /* Unicode character */ + Py_UCS4 *res + ); + +PyAPI_FUNC(int) _PyUnicode_IsCaseIgnorable( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_IsCased( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_ToDecimalDigit( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_ToDigit( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(double) _PyUnicode_ToNumeric( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_IsDecimalDigit( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_IsDigit( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_IsNumeric( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_IsPrintable( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(int) _PyUnicode_IsAlpha( + Py_UCS4 ch /* Unicode character */ + ); + +PyAPI_FUNC(size_t) Py_UNICODE_strlen( + const Py_UNICODE *u + ) Py_DEPRECATED(3.3); + +PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strcpy( + Py_UNICODE *s1, + const Py_UNICODE *s2) Py_DEPRECATED(3.3); + +PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strcat( + Py_UNICODE *s1, const Py_UNICODE *s2) Py_DEPRECATED(3.3); + +PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strncpy( + Py_UNICODE *s1, + const Py_UNICODE *s2, + size_t n) Py_DEPRECATED(3.3); + +PyAPI_FUNC(int) Py_UNICODE_strcmp( + const Py_UNICODE *s1, + const Py_UNICODE *s2 + ) Py_DEPRECATED(3.3); + +PyAPI_FUNC(int) Py_UNICODE_strncmp( + const Py_UNICODE *s1, + const Py_UNICODE *s2, + size_t n + ) Py_DEPRECATED(3.3); + +PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strchr( + const Py_UNICODE *s, + Py_UNICODE c + ) Py_DEPRECATED(3.3); + +PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strrchr( + const Py_UNICODE *s, + Py_UNICODE c + ) Py_DEPRECATED(3.3); + +PyAPI_FUNC(PyObject*) _PyUnicode_FormatLong(PyObject *, int, int, int); + +/* Create a copy of a unicode string ending with a nul character. Return NULL + and raise a MemoryError exception on memory allocation failure, otherwise + return a new allocated buffer (use PyMem_Free() to free the buffer). */ + +PyAPI_FUNC(Py_UNICODE*) PyUnicode_AsUnicodeCopy( + PyObject *unicode + ) Py_DEPRECATED(3.3); +#endif /* Py_LIMITED_API */ + +#if defined(Py_DEBUG) && !defined(Py_LIMITED_API) +PyAPI_FUNC(int) _PyUnicode_CheckConsistency( + PyObject *op, + int check_content); +#elif !defined(NDEBUG) +/* For asserts that call _PyUnicode_CheckConsistency(), which would + * otherwise be a problem when building with asserts but without Py_DEBUG. */ +#define _PyUnicode_CheckConsistency(op, check_content) PyUnicode_Check(op) +#endif + +#ifndef Py_LIMITED_API +/* Return an interned Unicode object for an Identifier; may fail if there is no memory.*/ +PyAPI_FUNC(PyObject*) _PyUnicode_FromId(_Py_Identifier*); +/* Clear all static strings. */ +PyAPI_FUNC(void) _PyUnicode_ClearStaticStrings(void); + +/* Fast equality check when the inputs are known to be exact unicode types + and where the hash values are equal (i.e. a very probable match) */ +PyAPI_FUNC(int) _PyUnicode_EQ(PyObject *, PyObject *); +#endif /* !Py_LIMITED_API */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_UNICODEOBJECT_H */ diff --git a/my_env/Include/warnings.h b/my_env/Include/warnings.h new file mode 100644 index 000000000..a675bb5df --- /dev/null +++ b/my_env/Include/warnings.h @@ -0,0 +1,67 @@ +#ifndef Py_WARNINGS_H +#define Py_WARNINGS_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API +PyAPI_FUNC(PyObject*) _PyWarnings_Init(void); +#endif + +PyAPI_FUNC(int) PyErr_WarnEx( + PyObject *category, + const char *message, /* UTF-8 encoded string */ + Py_ssize_t stack_level); +PyAPI_FUNC(int) PyErr_WarnFormat( + PyObject *category, + Py_ssize_t stack_level, + const char *format, /* ASCII-encoded string */ + ...); + +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 +/* Emit a ResourceWarning warning */ +PyAPI_FUNC(int) PyErr_ResourceWarning( + PyObject *source, + Py_ssize_t stack_level, + const char *format, /* ASCII-encoded string */ + ...); +#endif +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) PyErr_WarnExplicitObject( + PyObject *category, + PyObject *message, + PyObject *filename, + int lineno, + PyObject *module, + PyObject *registry); +#endif +PyAPI_FUNC(int) PyErr_WarnExplicit( + PyObject *category, + const char *message, /* UTF-8 encoded string */ + const char *filename, /* decoded from the filesystem encoding */ + int lineno, + const char *module, /* UTF-8 encoded string */ + PyObject *registry); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(int) +PyErr_WarnExplicitFormat(PyObject *category, + const char *filename, int lineno, + const char *module, PyObject *registry, + const char *format, ...); +#endif + +/* DEPRECATED: Use PyErr_WarnEx() instead. */ +#ifndef Py_LIMITED_API +#define PyErr_Warn(category, msg) PyErr_WarnEx(category, msg, 1) +#endif + +#ifndef Py_LIMITED_API +void _PyErr_WarnUnawaitedCoroutine(PyObject *coro); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_WARNINGS_H */ + diff --git a/my_env/Include/weakrefobject.h b/my_env/Include/weakrefobject.h new file mode 100644 index 000000000..17051568f --- /dev/null +++ b/my_env/Include/weakrefobject.h @@ -0,0 +1,86 @@ +/* Weak references objects for Python. */ + +#ifndef Py_WEAKREFOBJECT_H +#define Py_WEAKREFOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct _PyWeakReference PyWeakReference; + +/* PyWeakReference is the base struct for the Python ReferenceType, ProxyType, + * and CallableProxyType. + */ +#ifndef Py_LIMITED_API +struct _PyWeakReference { + PyObject_HEAD + + /* The object to which this is a weak reference, or Py_None if none. + * Note that this is a stealth reference: wr_object's refcount is + * not incremented to reflect this pointer. + */ + PyObject *wr_object; + + /* A callable to invoke when wr_object dies, or NULL if none. */ + PyObject *wr_callback; + + /* A cache for wr_object's hash code. As usual for hashes, this is -1 + * if the hash code isn't known yet. + */ + Py_hash_t hash; + + /* If wr_object is weakly referenced, wr_object has a doubly-linked NULL- + * terminated list of weak references to it. These are the list pointers. + * If wr_object goes away, wr_object is set to Py_None, and these pointers + * have no meaning then. + */ + PyWeakReference *wr_prev; + PyWeakReference *wr_next; +}; +#endif + +PyAPI_DATA(PyTypeObject) _PyWeakref_RefType; +PyAPI_DATA(PyTypeObject) _PyWeakref_ProxyType; +PyAPI_DATA(PyTypeObject) _PyWeakref_CallableProxyType; + +#define PyWeakref_CheckRef(op) PyObject_TypeCheck(op, &_PyWeakref_RefType) +#define PyWeakref_CheckRefExact(op) \ + (Py_TYPE(op) == &_PyWeakref_RefType) +#define PyWeakref_CheckProxy(op) \ + ((Py_TYPE(op) == &_PyWeakref_ProxyType) || \ + (Py_TYPE(op) == &_PyWeakref_CallableProxyType)) + +#define PyWeakref_Check(op) \ + (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op)) + + +PyAPI_FUNC(PyObject *) PyWeakref_NewRef(PyObject *ob, + PyObject *callback); +PyAPI_FUNC(PyObject *) PyWeakref_NewProxy(PyObject *ob, + PyObject *callback); +PyAPI_FUNC(PyObject *) PyWeakref_GetObject(PyObject *ref); + +#ifndef Py_LIMITED_API +PyAPI_FUNC(Py_ssize_t) _PyWeakref_GetWeakrefCount(PyWeakReference *head); + +PyAPI_FUNC(void) _PyWeakref_ClearRef(PyWeakReference *self); +#endif + +/* Explanation for the Py_REFCNT() check: when a weakref's target is part + of a long chain of deallocations which triggers the trashcan mechanism, + clearing the weakrefs can be delayed long after the target's refcount + has dropped to zero. In the meantime, code accessing the weakref will + be able to "see" the target object even though it is supposed to be + unreachable. See issue #16602. */ + +#define PyWeakref_GET_OBJECT(ref) \ + (Py_REFCNT(((PyWeakReference *)(ref))->wr_object) > 0 \ + ? ((PyWeakReference *)(ref))->wr_object \ + : Py_None) + + +#ifdef __cplusplus +} +#endif +#endif /* !Py_WEAKREFOBJECT_H */ diff --git a/my_env/LICENSE.txt b/my_env/LICENSE.txt new file mode 100644 index 000000000..43fe0d6c8 --- /dev/null +++ b/my_env/LICENSE.txt @@ -0,0 +1,603 @@ +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + + +Additional Conditions for this Windows binary build +--------------------------------------------------- + +This program is linked with and uses Microsoft Distributable Code, +copyrighted by Microsoft Corporation. The Microsoft Distributable Code +is embedded in each .exe, .dll and .pyd file as a result of running +the code through a linker. + +If you further distribute programs that include the Microsoft +Distributable Code, you must comply with the restrictions on +distribution specified by Microsoft. In particular, you must require +distributors and external end users to agree to terms that protect the +Microsoft Distributable Code at least as much as Microsoft's own +requirements for the Distributable Code. See Microsoft's documentation +(included in its developer tools and on its website at microsoft.com) +for specific details. + +Redistribution of the Windows binary build of the Python interpreter +complies with this agreement, provided that you do not: + +- alter any copyright, trademark or patent notice in Microsoft's +Distributable Code; + +- use Microsoft's trademarks in your programs' names or in a way that +suggests your programs come from or are endorsed by Microsoft; + +- distribute Microsoft's Distributable Code to run on a platform other +than Microsoft operating systems, run-time technologies or application +platforms; or + +- include Microsoft Distributable Code in malicious, deceptive or +unlawful programs. + +These restrictions apply only to the Microsoft Distributable Code as +defined above, not to Python itself or any programs running on the +Python interpreter. The redistribution of the Python interpreter and +libraries is governed by the Python Software License included with this +file, or by other licenses as marked. + + + +-------------------------------------------------------------------------- + +This program, "bzip2", the associated library "libbzip2", and all +documentation, are copyright (C) 1996-2010 Julian R Seward. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + +3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Julian Seward, jseward@bzip.org +bzip2/libbzip2 version 1.0.6 of 6 September 2010 + +-------------------------------------------------------------------------- + + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a double license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + + +This software is copyrighted by the Regents of the University of +California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState +Corporation and other parties. The following terms apply to all files +associated with the software unless explicitly disclaimed in +individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7014 (b) (3) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. + +This software is copyrighted by the Regents of the University of +California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState +Corporation, Apple Inc. and other parties. The following terms apply to +all files associated with the software unless explicitly disclaimed in +individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7013 (b) (3) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. + +Copyright (c) 1993-1999 Ioi Kim Lam. +Copyright (c) 2000-2001 Tix Project Group. +Copyright (c) 2004 ActiveState + +This software is copyrighted by the above entities +and other parties. The following terms apply to all files associated +with the software unless explicitly disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. + +---------------------------------------------------------------------- + +Parts of this software are based on the Tcl/Tk software copyrighted by +the Regents of the University of California, Sun Microsystems, Inc., +and other parties. The original license terms of the Tcl/Tk software +distribution is included in the file docs/license.tcltk. + +Parts of this software are based on the HTML Library software +copyrighted by Sun Microsystems, Inc. The original license terms of +the HTML Library software distribution is included in the file +docs/license.html_lib. + diff --git a/my_env/Lib/__future__.py b/my_env/Lib/__future__.py new file mode 100644 index 000000000..ce8bed7a6 --- /dev/null +++ b/my_env/Lib/__future__.py @@ -0,0 +1,146 @@ +"""Record of phased-in incompatible language changes. + +Each line is of the form: + + FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease "," + CompilerFlag ")" + +where, normally, OptionalRelease < MandatoryRelease, and both are 5-tuples +of the same form as sys.version_info: + + (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int + PY_MINOR_VERSION, # the 1; an int + PY_MICRO_VERSION, # the 0; an int + PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string + PY_RELEASE_SERIAL # the 3; an int + ) + +OptionalRelease records the first release in which + + from __future__ import FeatureName + +was accepted. + +In the case of MandatoryReleases that have not yet occurred, +MandatoryRelease predicts the release in which the feature will become part +of the language. + +Else MandatoryRelease records when the feature became part of the language; +in releases at or after that, modules no longer need + + from __future__ import FeatureName + +to use the feature in question, but may continue to use such imports. + +MandatoryRelease may also be None, meaning that a planned feature got +dropped. + +Instances of class _Feature have two corresponding methods, +.getOptionalRelease() and .getMandatoryRelease(). + +CompilerFlag is the (bitfield) flag that should be passed in the fourth +argument to the builtin function compile() to enable the feature in +dynamically compiled code. This flag is stored in the .compiler_flag +attribute on _Future instances. These values must match the appropriate +#defines of CO_xxx flags in Include/compile.h. + +No feature line is ever to be deleted from this file. +""" + +all_feature_names = [ + "nested_scopes", + "generators", + "division", + "absolute_import", + "with_statement", + "print_function", + "unicode_literals", + "barry_as_FLUFL", + "generator_stop", + "annotations", +] + +__all__ = ["all_feature_names"] + all_feature_names + +# The CO_xxx symbols are defined here under the same names defined in +# code.h and used by compile.h, so that an editor search will find them here. +# However, they're not exported in __all__, because they don't really belong to +# this module. +CO_NESTED = 0x0010 # nested_scopes +CO_GENERATOR_ALLOWED = 0 # generators (obsolete, was 0x1000) +CO_FUTURE_DIVISION = 0x2000 # division +CO_FUTURE_ABSOLUTE_IMPORT = 0x4000 # perform absolute imports by default +CO_FUTURE_WITH_STATEMENT = 0x8000 # with statement +CO_FUTURE_PRINT_FUNCTION = 0x10000 # print function +CO_FUTURE_UNICODE_LITERALS = 0x20000 # unicode string literals +CO_FUTURE_BARRY_AS_BDFL = 0x40000 +CO_FUTURE_GENERATOR_STOP = 0x80000 # StopIteration becomes RuntimeError in generators +CO_FUTURE_ANNOTATIONS = 0x100000 # annotations become strings at runtime + +class _Feature: + def __init__(self, optionalRelease, mandatoryRelease, compiler_flag): + self.optional = optionalRelease + self.mandatory = mandatoryRelease + self.compiler_flag = compiler_flag + + def getOptionalRelease(self): + """Return first release in which this feature was recognized. + + This is a 5-tuple, of the same form as sys.version_info. + """ + + return self.optional + + def getMandatoryRelease(self): + """Return release in which this feature will become mandatory. + + This is a 5-tuple, of the same form as sys.version_info, or, if + the feature was dropped, is None. + """ + + return self.mandatory + + def __repr__(self): + return "_Feature" + repr((self.optional, + self.mandatory, + self.compiler_flag)) + +nested_scopes = _Feature((2, 1, 0, "beta", 1), + (2, 2, 0, "alpha", 0), + CO_NESTED) + +generators = _Feature((2, 2, 0, "alpha", 1), + (2, 3, 0, "final", 0), + CO_GENERATOR_ALLOWED) + +division = _Feature((2, 2, 0, "alpha", 2), + (3, 0, 0, "alpha", 0), + CO_FUTURE_DIVISION) + +absolute_import = _Feature((2, 5, 0, "alpha", 1), + (3, 0, 0, "alpha", 0), + CO_FUTURE_ABSOLUTE_IMPORT) + +with_statement = _Feature((2, 5, 0, "alpha", 1), + (2, 6, 0, "alpha", 0), + CO_FUTURE_WITH_STATEMENT) + +print_function = _Feature((2, 6, 0, "alpha", 2), + (3, 0, 0, "alpha", 0), + CO_FUTURE_PRINT_FUNCTION) + +unicode_literals = _Feature((2, 6, 0, "alpha", 2), + (3, 0, 0, "alpha", 0), + CO_FUTURE_UNICODE_LITERALS) + +barry_as_FLUFL = _Feature((3, 1, 0, "alpha", 2), + (3, 9, 0, "alpha", 0), + CO_FUTURE_BARRY_AS_BDFL) + +generator_stop = _Feature((3, 5, 0, "beta", 1), + (3, 7, 0, "alpha", 0), + CO_FUTURE_GENERATOR_STOP) + +annotations = _Feature((3, 7, 0, "beta", 1), + (4, 0, 0, "alpha", 0), + CO_FUTURE_ANNOTATIONS) diff --git a/my_env/Lib/__pycache__/__future__.cpython-37.pyc b/my_env/Lib/__pycache__/__future__.cpython-37.pyc new file mode 100644 index 000000000..a98c3b2c8 Binary files /dev/null and b/my_env/Lib/__pycache__/__future__.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/_bootlocale.cpython-37.pyc b/my_env/Lib/__pycache__/_bootlocale.cpython-37.pyc new file mode 100644 index 000000000..e32ef6774 Binary files /dev/null and b/my_env/Lib/__pycache__/_bootlocale.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/_collections_abc.cpython-37.pyc b/my_env/Lib/__pycache__/_collections_abc.cpython-37.pyc new file mode 100644 index 000000000..7f336603d Binary files /dev/null and b/my_env/Lib/__pycache__/_collections_abc.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/_weakrefset.cpython-37.pyc b/my_env/Lib/__pycache__/_weakrefset.cpython-37.pyc new file mode 100644 index 000000000..abaedc63a Binary files /dev/null and b/my_env/Lib/__pycache__/_weakrefset.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/abc.cpython-37.pyc b/my_env/Lib/__pycache__/abc.cpython-37.pyc new file mode 100644 index 000000000..bcc11c7e8 Binary files /dev/null and b/my_env/Lib/__pycache__/abc.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/base64.cpython-37.pyc b/my_env/Lib/__pycache__/base64.cpython-37.pyc new file mode 100644 index 000000000..d19837f46 Binary files /dev/null and b/my_env/Lib/__pycache__/base64.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/bisect.cpython-37.pyc b/my_env/Lib/__pycache__/bisect.cpython-37.pyc new file mode 100644 index 000000000..fed03b2fb Binary files /dev/null and b/my_env/Lib/__pycache__/bisect.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/codecs.cpython-37.pyc b/my_env/Lib/__pycache__/codecs.cpython-37.pyc new file mode 100644 index 000000000..76d20575d Binary files /dev/null and b/my_env/Lib/__pycache__/codecs.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/copy.cpython-37.pyc b/my_env/Lib/__pycache__/copy.cpython-37.pyc new file mode 100644 index 000000000..e62699b08 Binary files /dev/null and b/my_env/Lib/__pycache__/copy.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/copyreg.cpython-37.pyc b/my_env/Lib/__pycache__/copyreg.cpython-37.pyc new file mode 100644 index 000000000..5b0968fa6 Binary files /dev/null and b/my_env/Lib/__pycache__/copyreg.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/enum.cpython-37.pyc b/my_env/Lib/__pycache__/enum.cpython-37.pyc new file mode 100644 index 000000000..d57702838 Binary files /dev/null and b/my_env/Lib/__pycache__/enum.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/fnmatch.cpython-37.pyc b/my_env/Lib/__pycache__/fnmatch.cpython-37.pyc new file mode 100644 index 000000000..744e6231e Binary files /dev/null and b/my_env/Lib/__pycache__/fnmatch.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/functools.cpython-37.pyc b/my_env/Lib/__pycache__/functools.cpython-37.pyc new file mode 100644 index 000000000..575c4840c Binary files /dev/null and b/my_env/Lib/__pycache__/functools.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/genericpath.cpython-37.pyc b/my_env/Lib/__pycache__/genericpath.cpython-37.pyc new file mode 100644 index 000000000..5a3d6e480 Binary files /dev/null and b/my_env/Lib/__pycache__/genericpath.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/hashlib.cpython-37.pyc b/my_env/Lib/__pycache__/hashlib.cpython-37.pyc new file mode 100644 index 000000000..d2efabb3c Binary files /dev/null and b/my_env/Lib/__pycache__/hashlib.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/heapq.cpython-37.pyc b/my_env/Lib/__pycache__/heapq.cpython-37.pyc new file mode 100644 index 000000000..661fa8ade Binary files /dev/null and b/my_env/Lib/__pycache__/heapq.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/hmac.cpython-37.pyc b/my_env/Lib/__pycache__/hmac.cpython-37.pyc new file mode 100644 index 000000000..d0ebad213 Binary files /dev/null and b/my_env/Lib/__pycache__/hmac.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/io.cpython-37.pyc b/my_env/Lib/__pycache__/io.cpython-37.pyc new file mode 100644 index 000000000..5b3fff991 Binary files /dev/null and b/my_env/Lib/__pycache__/io.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/keyword.cpython-37.pyc b/my_env/Lib/__pycache__/keyword.cpython-37.pyc new file mode 100644 index 000000000..5ac2ec877 Binary files /dev/null and b/my_env/Lib/__pycache__/keyword.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/linecache.cpython-37.pyc b/my_env/Lib/__pycache__/linecache.cpython-37.pyc new file mode 100644 index 000000000..868a08bfd Binary files /dev/null and b/my_env/Lib/__pycache__/linecache.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/locale.cpython-37.pyc b/my_env/Lib/__pycache__/locale.cpython-37.pyc new file mode 100644 index 000000000..b7b138e72 Binary files /dev/null and b/my_env/Lib/__pycache__/locale.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/ntpath.cpython-37.pyc b/my_env/Lib/__pycache__/ntpath.cpython-37.pyc new file mode 100644 index 000000000..03878cf7e Binary files /dev/null and b/my_env/Lib/__pycache__/ntpath.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/operator.cpython-37.pyc b/my_env/Lib/__pycache__/operator.cpython-37.pyc new file mode 100644 index 000000000..ad9b13fe5 Binary files /dev/null and b/my_env/Lib/__pycache__/operator.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/os.cpython-37.pyc b/my_env/Lib/__pycache__/os.cpython-37.pyc new file mode 100644 index 000000000..42681499b Binary files /dev/null and b/my_env/Lib/__pycache__/os.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/posixpath.cpython-37.pyc b/my_env/Lib/__pycache__/posixpath.cpython-37.pyc new file mode 100644 index 000000000..fedb8e519 Binary files /dev/null and b/my_env/Lib/__pycache__/posixpath.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/random.cpython-37.pyc b/my_env/Lib/__pycache__/random.cpython-37.pyc new file mode 100644 index 000000000..103ceed93 Binary files /dev/null and b/my_env/Lib/__pycache__/random.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/re.cpython-37.pyc b/my_env/Lib/__pycache__/re.cpython-37.pyc new file mode 100644 index 000000000..1aabba665 Binary files /dev/null and b/my_env/Lib/__pycache__/re.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/reprlib.cpython-37.pyc b/my_env/Lib/__pycache__/reprlib.cpython-37.pyc new file mode 100644 index 000000000..fb113022f Binary files /dev/null and b/my_env/Lib/__pycache__/reprlib.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/shutil.cpython-37.pyc b/my_env/Lib/__pycache__/shutil.cpython-37.pyc new file mode 100644 index 000000000..39dae3bf3 Binary files /dev/null and b/my_env/Lib/__pycache__/shutil.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/site.cpython-37.pyc b/my_env/Lib/__pycache__/site.cpython-37.pyc new file mode 100644 index 000000000..f6aaf8109 Binary files /dev/null and b/my_env/Lib/__pycache__/site.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/sre_compile.cpython-37.pyc b/my_env/Lib/__pycache__/sre_compile.cpython-37.pyc new file mode 100644 index 000000000..4208ef9b1 Binary files /dev/null and b/my_env/Lib/__pycache__/sre_compile.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/sre_constants.cpython-37.pyc b/my_env/Lib/__pycache__/sre_constants.cpython-37.pyc new file mode 100644 index 000000000..b4f4139c6 Binary files /dev/null and b/my_env/Lib/__pycache__/sre_constants.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/sre_parse.cpython-37.pyc b/my_env/Lib/__pycache__/sre_parse.cpython-37.pyc new file mode 100644 index 000000000..6527d4e45 Binary files /dev/null and b/my_env/Lib/__pycache__/sre_parse.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/stat.cpython-37.pyc b/my_env/Lib/__pycache__/stat.cpython-37.pyc new file mode 100644 index 000000000..7364be23d Binary files /dev/null and b/my_env/Lib/__pycache__/stat.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/struct.cpython-37.pyc b/my_env/Lib/__pycache__/struct.cpython-37.pyc new file mode 100644 index 000000000..d847a4de4 Binary files /dev/null and b/my_env/Lib/__pycache__/struct.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/tarfile.cpython-37.pyc b/my_env/Lib/__pycache__/tarfile.cpython-37.pyc new file mode 100644 index 000000000..347494122 Binary files /dev/null and b/my_env/Lib/__pycache__/tarfile.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/tempfile.cpython-37.pyc b/my_env/Lib/__pycache__/tempfile.cpython-37.pyc new file mode 100644 index 000000000..4ff90deac Binary files /dev/null and b/my_env/Lib/__pycache__/tempfile.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/token.cpython-37.pyc b/my_env/Lib/__pycache__/token.cpython-37.pyc new file mode 100644 index 000000000..c61169f0f Binary files /dev/null and b/my_env/Lib/__pycache__/token.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/tokenize.cpython-37.pyc b/my_env/Lib/__pycache__/tokenize.cpython-37.pyc new file mode 100644 index 000000000..0f9922653 Binary files /dev/null and b/my_env/Lib/__pycache__/tokenize.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/types.cpython-37.pyc b/my_env/Lib/__pycache__/types.cpython-37.pyc new file mode 100644 index 000000000..66a0cb41e Binary files /dev/null and b/my_env/Lib/__pycache__/types.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/warnings.cpython-37.pyc b/my_env/Lib/__pycache__/warnings.cpython-37.pyc new file mode 100644 index 000000000..68017387c Binary files /dev/null and b/my_env/Lib/__pycache__/warnings.cpython-37.pyc differ diff --git a/my_env/Lib/__pycache__/weakref.cpython-37.pyc b/my_env/Lib/__pycache__/weakref.cpython-37.pyc new file mode 100644 index 000000000..3176980df Binary files /dev/null and b/my_env/Lib/__pycache__/weakref.cpython-37.pyc differ diff --git a/my_env/Lib/_bootlocale.py b/my_env/Lib/_bootlocale.py new file mode 100644 index 000000000..3273a3b42 --- /dev/null +++ b/my_env/Lib/_bootlocale.py @@ -0,0 +1,46 @@ +"""A minimal subset of the locale module used at interpreter startup +(imported by the _io module), in order to reduce startup time. + +Don't import directly from third-party code; use the `locale` module instead! +""" + +import sys +import _locale + +if sys.platform.startswith("win"): + def getpreferredencoding(do_setlocale=True): + if sys.flags.utf8_mode: + return 'UTF-8' + return _locale._getdefaultlocale()[1] +else: + try: + _locale.CODESET + except AttributeError: + if hasattr(sys, 'getandroidapilevel'): + # On Android langinfo.h and CODESET are missing, and UTF-8 is + # always used in mbstowcs() and wcstombs(). + def getpreferredencoding(do_setlocale=True): + return 'UTF-8' + else: + def getpreferredencoding(do_setlocale=True): + if sys.flags.utf8_mode: + return 'UTF-8' + # This path for legacy systems needs the more complex + # getdefaultlocale() function, import the full locale module. + import locale + return locale.getpreferredencoding(do_setlocale) + else: + def getpreferredencoding(do_setlocale=True): + assert not do_setlocale + if sys.flags.utf8_mode: + return 'UTF-8' + result = _locale.nl_langinfo(_locale.CODESET) + if not result and sys.platform == 'darwin': + # nl_langinfo can return an empty string + # when the setting has an invalid value. + # Default to UTF-8 in that case because + # UTF-8 is the default charset on OSX and + # returning nothing will crash the + # interpreter. + result = 'UTF-8' + return result diff --git a/my_env/Lib/_collections_abc.py b/my_env/Lib/_collections_abc.py new file mode 100644 index 000000000..dbe30dff1 --- /dev/null +++ b/my_env/Lib/_collections_abc.py @@ -0,0 +1,1011 @@ +# Copyright 2007 Google, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +"""Abstract Base Classes (ABCs) for collections, according to PEP 3119. + +Unit tests are in test_collections. +""" + +from abc import ABCMeta, abstractmethod +import sys + +__all__ = ["Awaitable", "Coroutine", + "AsyncIterable", "AsyncIterator", "AsyncGenerator", + "Hashable", "Iterable", "Iterator", "Generator", "Reversible", + "Sized", "Container", "Callable", "Collection", + "Set", "MutableSet", + "Mapping", "MutableMapping", + "MappingView", "KeysView", "ItemsView", "ValuesView", + "Sequence", "MutableSequence", + "ByteString", + ] + +# This module has been renamed from collections.abc to _collections_abc to +# speed up interpreter startup. Some of the types such as MutableMapping are +# required early but collections module imports a lot of other modules. +# See issue #19218 +__name__ = "collections.abc" + +# Private list of types that we want to register with the various ABCs +# so that they will pass tests like: +# it = iter(somebytearray) +# assert isinstance(it, Iterable) +# Note: in other implementations, these types might not be distinct +# and they may have their own implementation specific types that +# are not included on this list. +bytes_iterator = type(iter(b'')) +bytearray_iterator = type(iter(bytearray())) +#callable_iterator = ??? +dict_keyiterator = type(iter({}.keys())) +dict_valueiterator = type(iter({}.values())) +dict_itemiterator = type(iter({}.items())) +list_iterator = type(iter([])) +list_reverseiterator = type(iter(reversed([]))) +range_iterator = type(iter(range(0))) +longrange_iterator = type(iter(range(1 << 1000))) +set_iterator = type(iter(set())) +str_iterator = type(iter("")) +tuple_iterator = type(iter(())) +zip_iterator = type(iter(zip())) +## views ## +dict_keys = type({}.keys()) +dict_values = type({}.values()) +dict_items = type({}.items()) +## misc ## +mappingproxy = type(type.__dict__) +generator = type((lambda: (yield))()) +## coroutine ## +async def _coro(): pass +_coro = _coro() +coroutine = type(_coro) +_coro.close() # Prevent ResourceWarning +del _coro +## asynchronous generator ## +async def _ag(): yield +_ag = _ag() +async_generator = type(_ag) +del _ag + + +### ONE-TRICK PONIES ### + +def _check_methods(C, *methods): + mro = C.__mro__ + for method in methods: + for B in mro: + if method in B.__dict__: + if B.__dict__[method] is None: + return NotImplemented + break + else: + return NotImplemented + return True + +class Hashable(metaclass=ABCMeta): + + __slots__ = () + + @abstractmethod + def __hash__(self): + return 0 + + @classmethod + def __subclasshook__(cls, C): + if cls is Hashable: + return _check_methods(C, "__hash__") + return NotImplemented + + +class Awaitable(metaclass=ABCMeta): + + __slots__ = () + + @abstractmethod + def __await__(self): + yield + + @classmethod + def __subclasshook__(cls, C): + if cls is Awaitable: + return _check_methods(C, "__await__") + return NotImplemented + + +class Coroutine(Awaitable): + + __slots__ = () + + @abstractmethod + def send(self, value): + """Send a value into the coroutine. + Return next yielded value or raise StopIteration. + """ + raise StopIteration + + @abstractmethod + def throw(self, typ, val=None, tb=None): + """Raise an exception in the coroutine. + Return next yielded value or raise StopIteration. + """ + if val is None: + if tb is None: + raise typ + val = typ() + if tb is not None: + val = val.with_traceback(tb) + raise val + + def close(self): + """Raise GeneratorExit inside coroutine. + """ + try: + self.throw(GeneratorExit) + except (GeneratorExit, StopIteration): + pass + else: + raise RuntimeError("coroutine ignored GeneratorExit") + + @classmethod + def __subclasshook__(cls, C): + if cls is Coroutine: + return _check_methods(C, '__await__', 'send', 'throw', 'close') + return NotImplemented + + +Coroutine.register(coroutine) + + +class AsyncIterable(metaclass=ABCMeta): + + __slots__ = () + + @abstractmethod + def __aiter__(self): + return AsyncIterator() + + @classmethod + def __subclasshook__(cls, C): + if cls is AsyncIterable: + return _check_methods(C, "__aiter__") + return NotImplemented + + +class AsyncIterator(AsyncIterable): + + __slots__ = () + + @abstractmethod + async def __anext__(self): + """Return the next item or raise StopAsyncIteration when exhausted.""" + raise StopAsyncIteration + + def __aiter__(self): + return self + + @classmethod + def __subclasshook__(cls, C): + if cls is AsyncIterator: + return _check_methods(C, "__anext__", "__aiter__") + return NotImplemented + + +class AsyncGenerator(AsyncIterator): + + __slots__ = () + + async def __anext__(self): + """Return the next item from the asynchronous generator. + When exhausted, raise StopAsyncIteration. + """ + return await self.asend(None) + + @abstractmethod + async def asend(self, value): + """Send a value into the asynchronous generator. + Return next yielded value or raise StopAsyncIteration. + """ + raise StopAsyncIteration + + @abstractmethod + async def athrow(self, typ, val=None, tb=None): + """Raise an exception in the asynchronous generator. + Return next yielded value or raise StopAsyncIteration. + """ + if val is None: + if tb is None: + raise typ + val = typ() + if tb is not None: + val = val.with_traceback(tb) + raise val + + async def aclose(self): + """Raise GeneratorExit inside coroutine. + """ + try: + await self.athrow(GeneratorExit) + except (GeneratorExit, StopAsyncIteration): + pass + else: + raise RuntimeError("asynchronous generator ignored GeneratorExit") + + @classmethod + def __subclasshook__(cls, C): + if cls is AsyncGenerator: + return _check_methods(C, '__aiter__', '__anext__', + 'asend', 'athrow', 'aclose') + return NotImplemented + + +AsyncGenerator.register(async_generator) + + +class Iterable(metaclass=ABCMeta): + + __slots__ = () + + @abstractmethod + def __iter__(self): + while False: + yield None + + @classmethod + def __subclasshook__(cls, C): + if cls is Iterable: + return _check_methods(C, "__iter__") + return NotImplemented + + +class Iterator(Iterable): + + __slots__ = () + + @abstractmethod + def __next__(self): + 'Return the next item from the iterator. When exhausted, raise StopIteration' + raise StopIteration + + def __iter__(self): + return self + + @classmethod + def __subclasshook__(cls, C): + if cls is Iterator: + return _check_methods(C, '__iter__', '__next__') + return NotImplemented + +Iterator.register(bytes_iterator) +Iterator.register(bytearray_iterator) +#Iterator.register(callable_iterator) +Iterator.register(dict_keyiterator) +Iterator.register(dict_valueiterator) +Iterator.register(dict_itemiterator) +Iterator.register(list_iterator) +Iterator.register(list_reverseiterator) +Iterator.register(range_iterator) +Iterator.register(longrange_iterator) +Iterator.register(set_iterator) +Iterator.register(str_iterator) +Iterator.register(tuple_iterator) +Iterator.register(zip_iterator) + + +class Reversible(Iterable): + + __slots__ = () + + @abstractmethod + def __reversed__(self): + while False: + yield None + + @classmethod + def __subclasshook__(cls, C): + if cls is Reversible: + return _check_methods(C, "__reversed__", "__iter__") + return NotImplemented + + +class Generator(Iterator): + + __slots__ = () + + def __next__(self): + """Return the next item from the generator. + When exhausted, raise StopIteration. + """ + return self.send(None) + + @abstractmethod + def send(self, value): + """Send a value into the generator. + Return next yielded value or raise StopIteration. + """ + raise StopIteration + + @abstractmethod + def throw(self, typ, val=None, tb=None): + """Raise an exception in the generator. + Return next yielded value or raise StopIteration. + """ + if val is None: + if tb is None: + raise typ + val = typ() + if tb is not None: + val = val.with_traceback(tb) + raise val + + def close(self): + """Raise GeneratorExit inside generator. + """ + try: + self.throw(GeneratorExit) + except (GeneratorExit, StopIteration): + pass + else: + raise RuntimeError("generator ignored GeneratorExit") + + @classmethod + def __subclasshook__(cls, C): + if cls is Generator: + return _check_methods(C, '__iter__', '__next__', + 'send', 'throw', 'close') + return NotImplemented + +Generator.register(generator) + + +class Sized(metaclass=ABCMeta): + + __slots__ = () + + @abstractmethod + def __len__(self): + return 0 + + @classmethod + def __subclasshook__(cls, C): + if cls is Sized: + return _check_methods(C, "__len__") + return NotImplemented + + +class Container(metaclass=ABCMeta): + + __slots__ = () + + @abstractmethod + def __contains__(self, x): + return False + + @classmethod + def __subclasshook__(cls, C): + if cls is Container: + return _check_methods(C, "__contains__") + return NotImplemented + +class Collection(Sized, Iterable, Container): + + __slots__ = () + + @classmethod + def __subclasshook__(cls, C): + if cls is Collection: + return _check_methods(C, "__len__", "__iter__", "__contains__") + return NotImplemented + +class Callable(metaclass=ABCMeta): + + __slots__ = () + + @abstractmethod + def __call__(self, *args, **kwds): + return False + + @classmethod + def __subclasshook__(cls, C): + if cls is Callable: + return _check_methods(C, "__call__") + return NotImplemented + + +### SETS ### + + +class Set(Collection): + + """A set is a finite, iterable container. + + This class provides concrete generic implementations of all + methods except for __contains__, __iter__ and __len__. + + To override the comparisons (presumably for speed, as the + semantics are fixed), redefine __le__ and __ge__, + then the other operations will automatically follow suit. + """ + + __slots__ = () + + def __le__(self, other): + if not isinstance(other, Set): + return NotImplemented + if len(self) > len(other): + return False + for elem in self: + if elem not in other: + return False + return True + + def __lt__(self, other): + if not isinstance(other, Set): + return NotImplemented + return len(self) < len(other) and self.__le__(other) + + def __gt__(self, other): + if not isinstance(other, Set): + return NotImplemented + return len(self) > len(other) and self.__ge__(other) + + def __ge__(self, other): + if not isinstance(other, Set): + return NotImplemented + if len(self) < len(other): + return False + for elem in other: + if elem not in self: + return False + return True + + def __eq__(self, other): + if not isinstance(other, Set): + return NotImplemented + return len(self) == len(other) and self.__le__(other) + + @classmethod + def _from_iterable(cls, it): + '''Construct an instance of the class from any iterable input. + + Must override this method if the class constructor signature + does not accept an iterable for an input. + ''' + return cls(it) + + def __and__(self, other): + if not isinstance(other, Iterable): + return NotImplemented + return self._from_iterable(value for value in other if value in self) + + __rand__ = __and__ + + def isdisjoint(self, other): + 'Return True if two sets have a null intersection.' + for value in other: + if value in self: + return False + return True + + def __or__(self, other): + if not isinstance(other, Iterable): + return NotImplemented + chain = (e for s in (self, other) for e in s) + return self._from_iterable(chain) + + __ror__ = __or__ + + def __sub__(self, other): + if not isinstance(other, Set): + if not isinstance(other, Iterable): + return NotImplemented + other = self._from_iterable(other) + return self._from_iterable(value for value in self + if value not in other) + + def __rsub__(self, other): + if not isinstance(other, Set): + if not isinstance(other, Iterable): + return NotImplemented + other = self._from_iterable(other) + return self._from_iterable(value for value in other + if value not in self) + + def __xor__(self, other): + if not isinstance(other, Set): + if not isinstance(other, Iterable): + return NotImplemented + other = self._from_iterable(other) + return (self - other) | (other - self) + + __rxor__ = __xor__ + + def _hash(self): + """Compute the hash value of a set. + + Note that we don't define __hash__: not all sets are hashable. + But if you define a hashable set type, its __hash__ should + call this function. + + This must be compatible __eq__. + + All sets ought to compare equal if they contain the same + elements, regardless of how they are implemented, and + regardless of the order of the elements; so there's not much + freedom for __eq__ or __hash__. We match the algorithm used + by the built-in frozenset type. + """ + MAX = sys.maxsize + MASK = 2 * MAX + 1 + n = len(self) + h = 1927868237 * (n + 1) + h &= MASK + for x in self: + hx = hash(x) + h ^= (hx ^ (hx << 16) ^ 89869747) * 3644798167 + h &= MASK + h = h * 69069 + 907133923 + h &= MASK + if h > MAX: + h -= MASK + 1 + if h == -1: + h = 590923713 + return h + +Set.register(frozenset) + + +class MutableSet(Set): + """A mutable set is a finite, iterable container. + + This class provides concrete generic implementations of all + methods except for __contains__, __iter__, __len__, + add(), and discard(). + + To override the comparisons (presumably for speed, as the + semantics are fixed), all you have to do is redefine __le__ and + then the other operations will automatically follow suit. + """ + + __slots__ = () + + @abstractmethod + def add(self, value): + """Add an element.""" + raise NotImplementedError + + @abstractmethod + def discard(self, value): + """Remove an element. Do not raise an exception if absent.""" + raise NotImplementedError + + def remove(self, value): + """Remove an element. If not a member, raise a KeyError.""" + if value not in self: + raise KeyError(value) + self.discard(value) + + def pop(self): + """Return the popped value. Raise KeyError if empty.""" + it = iter(self) + try: + value = next(it) + except StopIteration: + raise KeyError from None + self.discard(value) + return value + + def clear(self): + """This is slow (creates N new iterators!) but effective.""" + try: + while True: + self.pop() + except KeyError: + pass + + def __ior__(self, it): + for value in it: + self.add(value) + return self + + def __iand__(self, it): + for value in (self - it): + self.discard(value) + return self + + def __ixor__(self, it): + if it is self: + self.clear() + else: + if not isinstance(it, Set): + it = self._from_iterable(it) + for value in it: + if value in self: + self.discard(value) + else: + self.add(value) + return self + + def __isub__(self, it): + if it is self: + self.clear() + else: + for value in it: + self.discard(value) + return self + +MutableSet.register(set) + + +### MAPPINGS ### + + +class Mapping(Collection): + + __slots__ = () + + """A Mapping is a generic container for associating key/value + pairs. + + This class provides concrete generic implementations of all + methods except for __getitem__, __iter__, and __len__. + + """ + + @abstractmethod + def __getitem__(self, key): + raise KeyError + + def get(self, key, default=None): + 'D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.' + try: + return self[key] + except KeyError: + return default + + def __contains__(self, key): + try: + self[key] + except KeyError: + return False + else: + return True + + def keys(self): + "D.keys() -> a set-like object providing a view on D's keys" + return KeysView(self) + + def items(self): + "D.items() -> a set-like object providing a view on D's items" + return ItemsView(self) + + def values(self): + "D.values() -> an object providing a view on D's values" + return ValuesView(self) + + def __eq__(self, other): + if not isinstance(other, Mapping): + return NotImplemented + return dict(self.items()) == dict(other.items()) + + __reversed__ = None + +Mapping.register(mappingproxy) + + +class MappingView(Sized): + + __slots__ = '_mapping', + + def __init__(self, mapping): + self._mapping = mapping + + def __len__(self): + return len(self._mapping) + + def __repr__(self): + return '{0.__class__.__name__}({0._mapping!r})'.format(self) + + +class KeysView(MappingView, Set): + + __slots__ = () + + @classmethod + def _from_iterable(self, it): + return set(it) + + def __contains__(self, key): + return key in self._mapping + + def __iter__(self): + yield from self._mapping + +KeysView.register(dict_keys) + + +class ItemsView(MappingView, Set): + + __slots__ = () + + @classmethod + def _from_iterable(self, it): + return set(it) + + def __contains__(self, item): + key, value = item + try: + v = self._mapping[key] + except KeyError: + return False + else: + return v is value or v == value + + def __iter__(self): + for key in self._mapping: + yield (key, self._mapping[key]) + +ItemsView.register(dict_items) + + +class ValuesView(MappingView, Collection): + + __slots__ = () + + def __contains__(self, value): + for key in self._mapping: + v = self._mapping[key] + if v is value or v == value: + return True + return False + + def __iter__(self): + for key in self._mapping: + yield self._mapping[key] + +ValuesView.register(dict_values) + + +class MutableMapping(Mapping): + + __slots__ = () + + """A MutableMapping is a generic container for associating + key/value pairs. + + This class provides concrete generic implementations of all + methods except for __getitem__, __setitem__, __delitem__, + __iter__, and __len__. + + """ + + @abstractmethod + def __setitem__(self, key, value): + raise KeyError + + @abstractmethod + def __delitem__(self, key): + raise KeyError + + __marker = object() + + def pop(self, key, default=__marker): + '''D.pop(k[,d]) -> v, remove specified key and return the corresponding value. + If key is not found, d is returned if given, otherwise KeyError is raised. + ''' + try: + value = self[key] + except KeyError: + if default is self.__marker: + raise + return default + else: + del self[key] + return value + + def popitem(self): + '''D.popitem() -> (k, v), remove and return some (key, value) pair + as a 2-tuple; but raise KeyError if D is empty. + ''' + try: + key = next(iter(self)) + except StopIteration: + raise KeyError from None + value = self[key] + del self[key] + return key, value + + def clear(self): + 'D.clear() -> None. Remove all items from D.' + try: + while True: + self.popitem() + except KeyError: + pass + + def update(*args, **kwds): + ''' D.update([E, ]**F) -> None. Update D from mapping/iterable E and F. + If E present and has a .keys() method, does: for k in E: D[k] = E[k] + If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v + In either case, this is followed by: for k, v in F.items(): D[k] = v + ''' + if not args: + raise TypeError("descriptor 'update' of 'MutableMapping' object " + "needs an argument") + self, *args = args + if len(args) > 1: + raise TypeError('update expected at most 1 arguments, got %d' % + len(args)) + if args: + other = args[0] + if isinstance(other, Mapping): + for key in other: + self[key] = other[key] + elif hasattr(other, "keys"): + for key in other.keys(): + self[key] = other[key] + else: + for key, value in other: + self[key] = value + for key, value in kwds.items(): + self[key] = value + + def setdefault(self, key, default=None): + 'D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D' + try: + return self[key] + except KeyError: + self[key] = default + return default + +MutableMapping.register(dict) + + +### SEQUENCES ### + + +class Sequence(Reversible, Collection): + + """All the operations on a read-only sequence. + + Concrete subclasses must override __new__ or __init__, + __getitem__, and __len__. + """ + + __slots__ = () + + @abstractmethod + def __getitem__(self, index): + raise IndexError + + def __iter__(self): + i = 0 + try: + while True: + v = self[i] + yield v + i += 1 + except IndexError: + return + + def __contains__(self, value): + for v in self: + if v is value or v == value: + return True + return False + + def __reversed__(self): + for i in reversed(range(len(self))): + yield self[i] + + def index(self, value, start=0, stop=None): + '''S.index(value, [start, [stop]]) -> integer -- return first index of value. + Raises ValueError if the value is not present. + + Supporting start and stop arguments is optional, but + recommended. + ''' + if start is not None and start < 0: + start = max(len(self) + start, 0) + if stop is not None and stop < 0: + stop += len(self) + + i = start + while stop is None or i < stop: + try: + v = self[i] + if v is value or v == value: + return i + except IndexError: + break + i += 1 + raise ValueError + + def count(self, value): + 'S.count(value) -> integer -- return number of occurrences of value' + return sum(1 for v in self if v is value or v == value) + +Sequence.register(tuple) +Sequence.register(str) +Sequence.register(range) +Sequence.register(memoryview) + + +class ByteString(Sequence): + + """This unifies bytes and bytearray. + + XXX Should add all their methods. + """ + + __slots__ = () + +ByteString.register(bytes) +ByteString.register(bytearray) + + +class MutableSequence(Sequence): + + __slots__ = () + + """All the operations on a read-write sequence. + + Concrete subclasses must provide __new__ or __init__, + __getitem__, __setitem__, __delitem__, __len__, and insert(). + + """ + + @abstractmethod + def __setitem__(self, index, value): + raise IndexError + + @abstractmethod + def __delitem__(self, index): + raise IndexError + + @abstractmethod + def insert(self, index, value): + 'S.insert(index, value) -- insert value before index' + raise IndexError + + def append(self, value): + 'S.append(value) -- append value to the end of the sequence' + self.insert(len(self), value) + + def clear(self): + 'S.clear() -> None -- remove all items from S' + try: + while True: + self.pop() + except IndexError: + pass + + def reverse(self): + 'S.reverse() -- reverse *IN PLACE*' + n = len(self) + for i in range(n//2): + self[i], self[n-i-1] = self[n-i-1], self[i] + + def extend(self, values): + 'S.extend(iterable) -- extend sequence by appending elements from the iterable' + for v in values: + self.append(v) + + def pop(self, index=-1): + '''S.pop([index]) -> item -- remove and return item at index (default last). + Raise IndexError if list is empty or index is out of range. + ''' + v = self[index] + del self[index] + return v + + def remove(self, value): + '''S.remove(value) -- remove first occurrence of value. + Raise ValueError if the value is not present. + ''' + del self[self.index(value)] + + def __iadd__(self, values): + self.extend(values) + return self + +MutableSequence.register(list) +MutableSequence.register(bytearray) # Multiply inheriting, see ByteString diff --git a/my_env/Lib/_dummy_thread.py b/my_env/Lib/_dummy_thread.py new file mode 100644 index 000000000..2e46a0760 --- /dev/null +++ b/my_env/Lib/_dummy_thread.py @@ -0,0 +1,193 @@ +"""Drop-in replacement for the thread module. + +Meant to be used as a brain-dead substitute so that threaded code does +not need to be rewritten for when the thread module is not present. + +Suggested usage is:: + + try: + import _thread + except ImportError: + import _dummy_thread as _thread + +""" +# Exports only things specified by thread documentation; +# skipping obsolete synonyms allocate(), start_new(), exit_thread(). +__all__ = ['error', 'start_new_thread', 'exit', 'get_ident', 'allocate_lock', + 'interrupt_main', 'LockType', 'RLock'] + +# A dummy value +TIMEOUT_MAX = 2**31 + +# NOTE: this module can be imported early in the extension building process, +# and so top level imports of other modules should be avoided. Instead, all +# imports are done when needed on a function-by-function basis. Since threads +# are disabled, the import lock should not be an issue anyway (??). + +error = RuntimeError + +def start_new_thread(function, args, kwargs={}): + """Dummy implementation of _thread.start_new_thread(). + + Compatibility is maintained by making sure that ``args`` is a + tuple and ``kwargs`` is a dictionary. If an exception is raised + and it is SystemExit (which can be done by _thread.exit()) it is + caught and nothing is done; all other exceptions are printed out + by using traceback.print_exc(). + + If the executed function calls interrupt_main the KeyboardInterrupt will be + raised when the function returns. + + """ + if type(args) != type(tuple()): + raise TypeError("2nd arg must be a tuple") + if type(kwargs) != type(dict()): + raise TypeError("3rd arg must be a dict") + global _main + _main = False + try: + function(*args, **kwargs) + except SystemExit: + pass + except: + import traceback + traceback.print_exc() + _main = True + global _interrupt + if _interrupt: + _interrupt = False + raise KeyboardInterrupt + +def exit(): + """Dummy implementation of _thread.exit().""" + raise SystemExit + +def get_ident(): + """Dummy implementation of _thread.get_ident(). + + Since this module should only be used when _threadmodule is not + available, it is safe to assume that the current process is the + only thread. Thus a constant can be safely returned. + """ + return 1 + +def allocate_lock(): + """Dummy implementation of _thread.allocate_lock().""" + return LockType() + +def stack_size(size=None): + """Dummy implementation of _thread.stack_size().""" + if size is not None: + raise error("setting thread stack size not supported") + return 0 + +def _set_sentinel(): + """Dummy implementation of _thread._set_sentinel().""" + return LockType() + +class LockType(object): + """Class implementing dummy implementation of _thread.LockType. + + Compatibility is maintained by maintaining self.locked_status + which is a boolean that stores the state of the lock. Pickling of + the lock, though, should not be done since if the _thread module is + then used with an unpickled ``lock()`` from here problems could + occur from this class not having atomic methods. + + """ + + def __init__(self): + self.locked_status = False + + def acquire(self, waitflag=None, timeout=-1): + """Dummy implementation of acquire(). + + For blocking calls, self.locked_status is automatically set to + True and returned appropriately based on value of + ``waitflag``. If it is non-blocking, then the value is + actually checked and not set if it is already acquired. This + is all done so that threading.Condition's assert statements + aren't triggered and throw a little fit. + + """ + if waitflag is None or waitflag: + self.locked_status = True + return True + else: + if not self.locked_status: + self.locked_status = True + return True + else: + if timeout > 0: + import time + time.sleep(timeout) + return False + + __enter__ = acquire + + def __exit__(self, typ, val, tb): + self.release() + + def release(self): + """Release the dummy lock.""" + # XXX Perhaps shouldn't actually bother to test? Could lead + # to problems for complex, threaded code. + if not self.locked_status: + raise error + self.locked_status = False + return True + + def locked(self): + return self.locked_status + + def __repr__(self): + return "<%s %s.%s object at %s>" % ( + "locked" if self.locked_status else "unlocked", + self.__class__.__module__, + self.__class__.__qualname__, + hex(id(self)) + ) + + +class RLock(LockType): + """Dummy implementation of threading._RLock. + + Re-entrant lock can be aquired multiple times and needs to be released + just as many times. This dummy implemention does not check wheter the + current thread actually owns the lock, but does accounting on the call + counts. + """ + def __init__(self): + super().__init__() + self._levels = 0 + + def acquire(self, waitflag=None, timeout=-1): + """Aquire the lock, can be called multiple times in succession. + """ + locked = super().acquire(waitflag, timeout) + if locked: + self._levels += 1 + return locked + + def release(self): + """Release needs to be called once for every call to acquire(). + """ + if self._levels == 0: + raise error + if self._levels == 1: + super().release() + self._levels -= 1 + +# Used to signal that interrupt_main was called in a "thread" +_interrupt = False +# True when not executing in a "thread" +_main = True + +def interrupt_main(): + """Set _interrupt flag to True to have start_new_thread raise + KeyboardInterrupt upon exiting.""" + if _main: + raise KeyboardInterrupt + else: + global _interrupt + _interrupt = True diff --git a/my_env/Lib/_weakrefset.py b/my_env/Lib/_weakrefset.py new file mode 100644 index 000000000..304c66f59 --- /dev/null +++ b/my_env/Lib/_weakrefset.py @@ -0,0 +1,196 @@ +# Access WeakSet through the weakref module. +# This code is separated-out because it is needed +# by abc.py to load everything else at startup. + +from _weakref import ref + +__all__ = ['WeakSet'] + + +class _IterationGuard: + # This context manager registers itself in the current iterators of the + # weak container, such as to delay all removals until the context manager + # exits. + # This technique should be relatively thread-safe (since sets are). + + def __init__(self, weakcontainer): + # Don't create cycles + self.weakcontainer = ref(weakcontainer) + + def __enter__(self): + w = self.weakcontainer() + if w is not None: + w._iterating.add(self) + return self + + def __exit__(self, e, t, b): + w = self.weakcontainer() + if w is not None: + s = w._iterating + s.remove(self) + if not s: + w._commit_removals() + + +class WeakSet: + def __init__(self, data=None): + self.data = set() + def _remove(item, selfref=ref(self)): + self = selfref() + if self is not None: + if self._iterating: + self._pending_removals.append(item) + else: + self.data.discard(item) + self._remove = _remove + # A list of keys to be removed + self._pending_removals = [] + self._iterating = set() + if data is not None: + self.update(data) + + def _commit_removals(self): + l = self._pending_removals + discard = self.data.discard + while l: + discard(l.pop()) + + def __iter__(self): + with _IterationGuard(self): + for itemref in self.data: + item = itemref() + if item is not None: + # Caveat: the iterator will keep a strong reference to + # `item` until it is resumed or closed. + yield item + + def __len__(self): + return len(self.data) - len(self._pending_removals) + + def __contains__(self, item): + try: + wr = ref(item) + except TypeError: + return False + return wr in self.data + + def __reduce__(self): + return (self.__class__, (list(self),), + getattr(self, '__dict__', None)) + + def add(self, item): + if self._pending_removals: + self._commit_removals() + self.data.add(ref(item, self._remove)) + + def clear(self): + if self._pending_removals: + self._commit_removals() + self.data.clear() + + def copy(self): + return self.__class__(self) + + def pop(self): + if self._pending_removals: + self._commit_removals() + while True: + try: + itemref = self.data.pop() + except KeyError: + raise KeyError('pop from empty WeakSet') from None + item = itemref() + if item is not None: + return item + + def remove(self, item): + if self._pending_removals: + self._commit_removals() + self.data.remove(ref(item)) + + def discard(self, item): + if self._pending_removals: + self._commit_removals() + self.data.discard(ref(item)) + + def update(self, other): + if self._pending_removals: + self._commit_removals() + for element in other: + self.add(element) + + def __ior__(self, other): + self.update(other) + return self + + def difference(self, other): + newset = self.copy() + newset.difference_update(other) + return newset + __sub__ = difference + + def difference_update(self, other): + self.__isub__(other) + def __isub__(self, other): + if self._pending_removals: + self._commit_removals() + if self is other: + self.data.clear() + else: + self.data.difference_update(ref(item) for item in other) + return self + + def intersection(self, other): + return self.__class__(item for item in other if item in self) + __and__ = intersection + + def intersection_update(self, other): + self.__iand__(other) + def __iand__(self, other): + if self._pending_removals: + self._commit_removals() + self.data.intersection_update(ref(item) for item in other) + return self + + def issubset(self, other): + return self.data.issubset(ref(item) for item in other) + __le__ = issubset + + def __lt__(self, other): + return self.data < set(map(ref, other)) + + def issuperset(self, other): + return self.data.issuperset(ref(item) for item in other) + __ge__ = issuperset + + def __gt__(self, other): + return self.data > set(map(ref, other)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return NotImplemented + return self.data == set(map(ref, other)) + + def symmetric_difference(self, other): + newset = self.copy() + newset.symmetric_difference_update(other) + return newset + __xor__ = symmetric_difference + + def symmetric_difference_update(self, other): + self.__ixor__(other) + def __ixor__(self, other): + if self._pending_removals: + self._commit_removals() + if self is other: + self.data.clear() + else: + self.data.symmetric_difference_update(ref(item, self._remove) for item in other) + return self + + def union(self, other): + return self.__class__(e for s in (self, other) for e in s) + __or__ = union + + def isdisjoint(self, other): + return len(self.intersection(other)) == 0 diff --git a/my_env/Lib/abc.py b/my_env/Lib/abc.py new file mode 100644 index 000000000..709414127 --- /dev/null +++ b/my_env/Lib/abc.py @@ -0,0 +1,170 @@ +# Copyright 2007 Google, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +"""Abstract Base Classes (ABCs) according to PEP 3119.""" + + +def abstractmethod(funcobj): + """A decorator indicating abstract methods. + + Requires that the metaclass is ABCMeta or derived from it. A + class that has a metaclass derived from ABCMeta cannot be + instantiated unless all of its abstract methods are overridden. + The abstract methods can be called using any of the normal + 'super' call mechanisms. + + Usage: + + class C(metaclass=ABCMeta): + @abstractmethod + def my_abstract_method(self, ...): + ... + """ + funcobj.__isabstractmethod__ = True + return funcobj + + +class abstractclassmethod(classmethod): + """A decorator indicating abstract classmethods. + + Similar to abstractmethod. + + Usage: + + class C(metaclass=ABCMeta): + @abstractclassmethod + def my_abstract_classmethod(cls, ...): + ... + + 'abstractclassmethod' is deprecated. Use 'classmethod' with + 'abstractmethod' instead. + """ + + __isabstractmethod__ = True + + def __init__(self, callable): + callable.__isabstractmethod__ = True + super().__init__(callable) + + +class abstractstaticmethod(staticmethod): + """A decorator indicating abstract staticmethods. + + Similar to abstractmethod. + + Usage: + + class C(metaclass=ABCMeta): + @abstractstaticmethod + def my_abstract_staticmethod(...): + ... + + 'abstractstaticmethod' is deprecated. Use 'staticmethod' with + 'abstractmethod' instead. + """ + + __isabstractmethod__ = True + + def __init__(self, callable): + callable.__isabstractmethod__ = True + super().__init__(callable) + + +class abstractproperty(property): + """A decorator indicating abstract properties. + + Requires that the metaclass is ABCMeta or derived from it. A + class that has a metaclass derived from ABCMeta cannot be + instantiated unless all of its abstract properties are overridden. + The abstract properties can be called using any of the normal + 'super' call mechanisms. + + Usage: + + class C(metaclass=ABCMeta): + @abstractproperty + def my_abstract_property(self): + ... + + This defines a read-only property; you can also define a read-write + abstract property using the 'long' form of property declaration: + + class C(metaclass=ABCMeta): + def getx(self): ... + def setx(self, value): ... + x = abstractproperty(getx, setx) + + 'abstractproperty' is deprecated. Use 'property' with 'abstractmethod' + instead. + """ + + __isabstractmethod__ = True + + +try: + from _abc import (get_cache_token, _abc_init, _abc_register, + _abc_instancecheck, _abc_subclasscheck, _get_dump, + _reset_registry, _reset_caches) +except ImportError: + from _py_abc import ABCMeta, get_cache_token + ABCMeta.__module__ = 'abc' +else: + class ABCMeta(type): + """Metaclass for defining Abstract Base Classes (ABCs). + + Use this metaclass to create an ABC. An ABC can be subclassed + directly, and then acts as a mix-in class. You can also register + unrelated concrete classes (even built-in classes) and unrelated + ABCs as 'virtual subclasses' -- these and their descendants will + be considered subclasses of the registering ABC by the built-in + issubclass() function, but the registering ABC won't show up in + their MRO (Method Resolution Order) nor will method + implementations defined by the registering ABC be callable (not + even via super()). + """ + def __new__(mcls, name, bases, namespace, **kwargs): + cls = super().__new__(mcls, name, bases, namespace, **kwargs) + _abc_init(cls) + return cls + + def register(cls, subclass): + """Register a virtual subclass of an ABC. + + Returns the subclass, to allow usage as a class decorator. + """ + return _abc_register(cls, subclass) + + def __instancecheck__(cls, instance): + """Override for isinstance(instance, cls).""" + return _abc_instancecheck(cls, instance) + + def __subclasscheck__(cls, subclass): + """Override for issubclass(subclass, cls).""" + return _abc_subclasscheck(cls, subclass) + + def _dump_registry(cls, file=None): + """Debug helper to print the ABC registry.""" + print(f"Class: {cls.__module__}.{cls.__qualname__}", file=file) + print(f"Inv. counter: {get_cache_token()}", file=file) + (_abc_registry, _abc_cache, _abc_negative_cache, + _abc_negative_cache_version) = _get_dump(cls) + print(f"_abc_registry: {_abc_registry!r}", file=file) + print(f"_abc_cache: {_abc_cache!r}", file=file) + print(f"_abc_negative_cache: {_abc_negative_cache!r}", file=file) + print(f"_abc_negative_cache_version: {_abc_negative_cache_version!r}", + file=file) + + def _abc_registry_clear(cls): + """Clear the registry (for debugging or testing).""" + _reset_registry(cls) + + def _abc_caches_clear(cls): + """Clear the caches (for debugging or testing).""" + _reset_caches(cls) + + +class ABC(metaclass=ABCMeta): + """Helper class that provides a standard way to create an ABC using + inheritance. + """ + __slots__ = () diff --git a/my_env/Lib/base64.py b/my_env/Lib/base64.py new file mode 100644 index 000000000..2be9c395a --- /dev/null +++ b/my_env/Lib/base64.py @@ -0,0 +1,595 @@ +#! /usr/bin/env python3 + +"""Base16, Base32, Base64 (RFC 3548), Base85 and Ascii85 data encodings""" + +# Modified 04-Oct-1995 by Jack Jansen to use binascii module +# Modified 30-Dec-2003 by Barry Warsaw to add full RFC 3548 support +# Modified 22-May-2007 by Guido van Rossum to use bytes everywhere + +import re +import struct +import binascii + + +__all__ = [ + # Legacy interface exports traditional RFC 2045 Base64 encodings + 'encode', 'decode', 'encodebytes', 'decodebytes', + # Generalized interface for other encodings + 'b64encode', 'b64decode', 'b32encode', 'b32decode', + 'b16encode', 'b16decode', + # Base85 and Ascii85 encodings + 'b85encode', 'b85decode', 'a85encode', 'a85decode', + # Standard Base64 encoding + 'standard_b64encode', 'standard_b64decode', + # Some common Base64 alternatives. As referenced by RFC 3458, see thread + # starting at: + # + # http://zgp.org/pipermail/p2p-hackers/2001-September/000316.html + 'urlsafe_b64encode', 'urlsafe_b64decode', + ] + + +bytes_types = (bytes, bytearray) # Types acceptable as binary data + +def _bytes_from_decode_data(s): + if isinstance(s, str): + try: + return s.encode('ascii') + except UnicodeEncodeError: + raise ValueError('string argument should contain only ASCII characters') + if isinstance(s, bytes_types): + return s + try: + return memoryview(s).tobytes() + except TypeError: + raise TypeError("argument should be a bytes-like object or ASCII " + "string, not %r" % s.__class__.__name__) from None + + +# Base64 encoding/decoding uses binascii + +def b64encode(s, altchars=None): + """Encode the bytes-like object s using Base64 and return a bytes object. + + Optional altchars should be a byte string of length 2 which specifies an + alternative alphabet for the '+' and '/' characters. This allows an + application to e.g. generate url or filesystem safe Base64 strings. + """ + encoded = binascii.b2a_base64(s, newline=False) + if altchars is not None: + assert len(altchars) == 2, repr(altchars) + return encoded.translate(bytes.maketrans(b'+/', altchars)) + return encoded + + +def b64decode(s, altchars=None, validate=False): + """Decode the Base64 encoded bytes-like object or ASCII string s. + + Optional altchars must be a bytes-like object or ASCII string of length 2 + which specifies the alternative alphabet used instead of the '+' and '/' + characters. + + The result is returned as a bytes object. A binascii.Error is raised if + s is incorrectly padded. + + If validate is False (the default), characters that are neither in the + normal base-64 alphabet nor the alternative alphabet are discarded prior + to the padding check. If validate is True, these non-alphabet characters + in the input result in a binascii.Error. + """ + s = _bytes_from_decode_data(s) + if altchars is not None: + altchars = _bytes_from_decode_data(altchars) + assert len(altchars) == 2, repr(altchars) + s = s.translate(bytes.maketrans(altchars, b'+/')) + if validate and not re.match(b'^[A-Za-z0-9+/]*={0,2}$', s): + raise binascii.Error('Non-base64 digit found') + return binascii.a2b_base64(s) + + +def standard_b64encode(s): + """Encode bytes-like object s using the standard Base64 alphabet. + + The result is returned as a bytes object. + """ + return b64encode(s) + +def standard_b64decode(s): + """Decode bytes encoded with the standard Base64 alphabet. + + Argument s is a bytes-like object or ASCII string to decode. The result + is returned as a bytes object. A binascii.Error is raised if the input + is incorrectly padded. Characters that are not in the standard alphabet + are discarded prior to the padding check. + """ + return b64decode(s) + + +_urlsafe_encode_translation = bytes.maketrans(b'+/', b'-_') +_urlsafe_decode_translation = bytes.maketrans(b'-_', b'+/') + +def urlsafe_b64encode(s): + """Encode bytes using the URL- and filesystem-safe Base64 alphabet. + + Argument s is a bytes-like object to encode. The result is returned as a + bytes object. The alphabet uses '-' instead of '+' and '_' instead of + '/'. + """ + return b64encode(s).translate(_urlsafe_encode_translation) + +def urlsafe_b64decode(s): + """Decode bytes using the URL- and filesystem-safe Base64 alphabet. + + Argument s is a bytes-like object or ASCII string to decode. The result + is returned as a bytes object. A binascii.Error is raised if the input + is incorrectly padded. Characters that are not in the URL-safe base-64 + alphabet, and are not a plus '+' or slash '/', are discarded prior to the + padding check. + + The alphabet uses '-' instead of '+' and '_' instead of '/'. + """ + s = _bytes_from_decode_data(s) + s = s.translate(_urlsafe_decode_translation) + return b64decode(s) + + + +# Base32 encoding/decoding must be done in Python +_b32alphabet = b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567' +_b32tab2 = None +_b32rev = None + +def b32encode(s): + """Encode the bytes-like object s using Base32 and return a bytes object. + """ + global _b32tab2 + # Delay the initialization of the table to not waste memory + # if the function is never called + if _b32tab2 is None: + b32tab = [bytes((i,)) for i in _b32alphabet] + _b32tab2 = [a + b for a in b32tab for b in b32tab] + b32tab = None + + if not isinstance(s, bytes_types): + s = memoryview(s).tobytes() + leftover = len(s) % 5 + # Pad the last quantum with zero bits if necessary + if leftover: + s = s + b'\0' * (5 - leftover) # Don't use += ! + encoded = bytearray() + from_bytes = int.from_bytes + b32tab2 = _b32tab2 + for i in range(0, len(s), 5): + c = from_bytes(s[i: i + 5], 'big') + encoded += (b32tab2[c >> 30] + # bits 1 - 10 + b32tab2[(c >> 20) & 0x3ff] + # bits 11 - 20 + b32tab2[(c >> 10) & 0x3ff] + # bits 21 - 30 + b32tab2[c & 0x3ff] # bits 31 - 40 + ) + # Adjust for any leftover partial quanta + if leftover == 1: + encoded[-6:] = b'======' + elif leftover == 2: + encoded[-4:] = b'====' + elif leftover == 3: + encoded[-3:] = b'===' + elif leftover == 4: + encoded[-1:] = b'=' + return bytes(encoded) + +def b32decode(s, casefold=False, map01=None): + """Decode the Base32 encoded bytes-like object or ASCII string s. + + Optional casefold is a flag specifying whether a lowercase alphabet is + acceptable as input. For security purposes, the default is False. + + RFC 3548 allows for optional mapping of the digit 0 (zero) to the + letter O (oh), and for optional mapping of the digit 1 (one) to + either the letter I (eye) or letter L (el). The optional argument + map01 when not None, specifies which letter the digit 1 should be + mapped to (when map01 is not None, the digit 0 is always mapped to + the letter O). For security purposes the default is None, so that + 0 and 1 are not allowed in the input. + + The result is returned as a bytes object. A binascii.Error is raised if + the input is incorrectly padded or if there are non-alphabet + characters present in the input. + """ + global _b32rev + # Delay the initialization of the table to not waste memory + # if the function is never called + if _b32rev is None: + _b32rev = {v: k for k, v in enumerate(_b32alphabet)} + s = _bytes_from_decode_data(s) + if len(s) % 8: + raise binascii.Error('Incorrect padding') + # Handle section 2.4 zero and one mapping. The flag map01 will be either + # False, or the character to map the digit 1 (one) to. It should be + # either L (el) or I (eye). + if map01 is not None: + map01 = _bytes_from_decode_data(map01) + assert len(map01) == 1, repr(map01) + s = s.translate(bytes.maketrans(b'01', b'O' + map01)) + if casefold: + s = s.upper() + # Strip off pad characters from the right. We need to count the pad + # characters because this will tell us how many null bytes to remove from + # the end of the decoded string. + l = len(s) + s = s.rstrip(b'=') + padchars = l - len(s) + # Now decode the full quanta + decoded = bytearray() + b32rev = _b32rev + for i in range(0, len(s), 8): + quanta = s[i: i + 8] + acc = 0 + try: + for c in quanta: + acc = (acc << 5) + b32rev[c] + except KeyError: + raise binascii.Error('Non-base32 digit found') from None + decoded += acc.to_bytes(5, 'big') + # Process the last, partial quanta + if l % 8 or padchars not in {0, 1, 3, 4, 6}: + raise binascii.Error('Incorrect padding') + if padchars and decoded: + acc <<= 5 * padchars + last = acc.to_bytes(5, 'big') + leftover = (43 - 5 * padchars) // 8 # 1: 4, 3: 3, 4: 2, 6: 1 + decoded[-5:] = last[:leftover] + return bytes(decoded) + + +# RFC 3548, Base 16 Alphabet specifies uppercase, but hexlify() returns +# lowercase. The RFC also recommends against accepting input case +# insensitively. +def b16encode(s): + """Encode the bytes-like object s using Base16 and return a bytes object. + """ + return binascii.hexlify(s).upper() + + +def b16decode(s, casefold=False): + """Decode the Base16 encoded bytes-like object or ASCII string s. + + Optional casefold is a flag specifying whether a lowercase alphabet is + acceptable as input. For security purposes, the default is False. + + The result is returned as a bytes object. A binascii.Error is raised if + s is incorrectly padded or if there are non-alphabet characters present + in the input. + """ + s = _bytes_from_decode_data(s) + if casefold: + s = s.upper() + if re.search(b'[^0-9A-F]', s): + raise binascii.Error('Non-base16 digit found') + return binascii.unhexlify(s) + +# +# Ascii85 encoding/decoding +# + +_a85chars = None +_a85chars2 = None +_A85START = b"<~" +_A85END = b"~>" + +def _85encode(b, chars, chars2, pad=False, foldnuls=False, foldspaces=False): + # Helper function for a85encode and b85encode + if not isinstance(b, bytes_types): + b = memoryview(b).tobytes() + + padding = (-len(b)) % 4 + if padding: + b = b + b'\0' * padding + words = struct.Struct('!%dI' % (len(b) // 4)).unpack(b) + + chunks = [b'z' if foldnuls and not word else + b'y' if foldspaces and word == 0x20202020 else + (chars2[word // 614125] + + chars2[word // 85 % 7225] + + chars[word % 85]) + for word in words] + + if padding and not pad: + if chunks[-1] == b'z': + chunks[-1] = chars[0] * 5 + chunks[-1] = chunks[-1][:-padding] + + return b''.join(chunks) + +def a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False): + """Encode bytes-like object b using Ascii85 and return a bytes object. + + foldspaces is an optional flag that uses the special short sequence 'y' + instead of 4 consecutive spaces (ASCII 0x20) as supported by 'btoa'. This + feature is not supported by the "standard" Adobe encoding. + + wrapcol controls whether the output should have newline (b'\\n') characters + added to it. If this is non-zero, each output line will be at most this + many characters long. + + pad controls whether the input is padded to a multiple of 4 before + encoding. Note that the btoa implementation always pads. + + adobe controls whether the encoded byte sequence is framed with <~ and ~>, + which is used by the Adobe implementation. + """ + global _a85chars, _a85chars2 + # Delay the initialization of tables to not waste memory + # if the function is never called + if _a85chars is None: + _a85chars = [bytes((i,)) for i in range(33, 118)] + _a85chars2 = [(a + b) for a in _a85chars for b in _a85chars] + + result = _85encode(b, _a85chars, _a85chars2, pad, True, foldspaces) + + if adobe: + result = _A85START + result + if wrapcol: + wrapcol = max(2 if adobe else 1, wrapcol) + chunks = [result[i: i + wrapcol] + for i in range(0, len(result), wrapcol)] + if adobe: + if len(chunks[-1]) + 2 > wrapcol: + chunks.append(b'') + result = b'\n'.join(chunks) + if adobe: + result += _A85END + + return result + +def a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\v'): + """Decode the Ascii85 encoded bytes-like object or ASCII string b. + + foldspaces is a flag that specifies whether the 'y' short sequence should be + accepted as shorthand for 4 consecutive spaces (ASCII 0x20). This feature is + not supported by the "standard" Adobe encoding. + + adobe controls whether the input sequence is in Adobe Ascii85 format (i.e. + is framed with <~ and ~>). + + ignorechars should be a byte string containing characters to ignore from the + input. This should only contain whitespace characters, and by default + contains all whitespace characters in ASCII. + + The result is returned as a bytes object. + """ + b = _bytes_from_decode_data(b) + if adobe: + if not b.endswith(_A85END): + raise ValueError( + "Ascii85 encoded byte sequences must end " + "with {!r}".format(_A85END) + ) + if b.startswith(_A85START): + b = b[2:-2] # Strip off start/end markers + else: + b = b[:-2] + # + # We have to go through this stepwise, so as to ignore spaces and handle + # special short sequences + # + packI = struct.Struct('!I').pack + decoded = [] + decoded_append = decoded.append + curr = [] + curr_append = curr.append + curr_clear = curr.clear + for x in b + b'u' * 4: + if b'!'[0] <= x <= b'u'[0]: + curr_append(x) + if len(curr) == 5: + acc = 0 + for x in curr: + acc = 85 * acc + (x - 33) + try: + decoded_append(packI(acc)) + except struct.error: + raise ValueError('Ascii85 overflow') from None + curr_clear() + elif x == b'z'[0]: + if curr: + raise ValueError('z inside Ascii85 5-tuple') + decoded_append(b'\0\0\0\0') + elif foldspaces and x == b'y'[0]: + if curr: + raise ValueError('y inside Ascii85 5-tuple') + decoded_append(b'\x20\x20\x20\x20') + elif x in ignorechars: + # Skip whitespace + continue + else: + raise ValueError('Non-Ascii85 digit found: %c' % x) + + result = b''.join(decoded) + padding = 4 - len(curr) + if padding: + # Throw away the extra padding + result = result[:-padding] + return result + +# The following code is originally taken (with permission) from Mercurial + +_b85alphabet = (b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" + b"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~") +_b85chars = None +_b85chars2 = None +_b85dec = None + +def b85encode(b, pad=False): + """Encode bytes-like object b in base85 format and return a bytes object. + + If pad is true, the input is padded with b'\\0' so its length is a multiple of + 4 bytes before encoding. + """ + global _b85chars, _b85chars2 + # Delay the initialization of tables to not waste memory + # if the function is never called + if _b85chars is None: + _b85chars = [bytes((i,)) for i in _b85alphabet] + _b85chars2 = [(a + b) for a in _b85chars for b in _b85chars] + return _85encode(b, _b85chars, _b85chars2, pad) + +def b85decode(b): + """Decode the base85-encoded bytes-like object or ASCII string b + + The result is returned as a bytes object. + """ + global _b85dec + # Delay the initialization of tables to not waste memory + # if the function is never called + if _b85dec is None: + _b85dec = [None] * 256 + for i, c in enumerate(_b85alphabet): + _b85dec[c] = i + + b = _bytes_from_decode_data(b) + padding = (-len(b)) % 5 + b = b + b'~' * padding + out = [] + packI = struct.Struct('!I').pack + for i in range(0, len(b), 5): + chunk = b[i:i + 5] + acc = 0 + try: + for c in chunk: + acc = acc * 85 + _b85dec[c] + except TypeError: + for j, c in enumerate(chunk): + if _b85dec[c] is None: + raise ValueError('bad base85 character at position %d' + % (i + j)) from None + raise + try: + out.append(packI(acc)) + except struct.error: + raise ValueError('base85 overflow in hunk starting at byte %d' + % i) from None + + result = b''.join(out) + if padding: + result = result[:-padding] + return result + +# Legacy interface. This code could be cleaned up since I don't believe +# binascii has any line length limitations. It just doesn't seem worth it +# though. The files should be opened in binary mode. + +MAXLINESIZE = 76 # Excluding the CRLF +MAXBINSIZE = (MAXLINESIZE//4)*3 + +def encode(input, output): + """Encode a file; input and output are binary files.""" + while True: + s = input.read(MAXBINSIZE) + if not s: + break + while len(s) < MAXBINSIZE: + ns = input.read(MAXBINSIZE-len(s)) + if not ns: + break + s += ns + line = binascii.b2a_base64(s) + output.write(line) + + +def decode(input, output): + """Decode a file; input and output are binary files.""" + while True: + line = input.readline() + if not line: + break + s = binascii.a2b_base64(line) + output.write(s) + +def _input_type_check(s): + try: + m = memoryview(s) + except TypeError as err: + msg = "expected bytes-like object, not %s" % s.__class__.__name__ + raise TypeError(msg) from err + if m.format not in ('c', 'b', 'B'): + msg = ("expected single byte elements, not %r from %s" % + (m.format, s.__class__.__name__)) + raise TypeError(msg) + if m.ndim != 1: + msg = ("expected 1-D data, not %d-D data from %s" % + (m.ndim, s.__class__.__name__)) + raise TypeError(msg) + + +def encodebytes(s): + """Encode a bytestring into a bytes object containing multiple lines + of base-64 data.""" + _input_type_check(s) + pieces = [] + for i in range(0, len(s), MAXBINSIZE): + chunk = s[i : i + MAXBINSIZE] + pieces.append(binascii.b2a_base64(chunk)) + return b"".join(pieces) + +def encodestring(s): + """Legacy alias of encodebytes().""" + import warnings + warnings.warn("encodestring() is a deprecated alias since 3.1, " + "use encodebytes()", + DeprecationWarning, 2) + return encodebytes(s) + + +def decodebytes(s): + """Decode a bytestring of base-64 data into a bytes object.""" + _input_type_check(s) + return binascii.a2b_base64(s) + +def decodestring(s): + """Legacy alias of decodebytes().""" + import warnings + warnings.warn("decodestring() is a deprecated alias since Python 3.1, " + "use decodebytes()", + DeprecationWarning, 2) + return decodebytes(s) + + +# Usable as a script... +def main(): + """Small main program""" + import sys, getopt + try: + opts, args = getopt.getopt(sys.argv[1:], 'deut') + except getopt.error as msg: + sys.stdout = sys.stderr + print(msg) + print("""usage: %s [-d|-e|-u|-t] [file|-] + -d, -u: decode + -e: encode (default) + -t: encode and decode string 'Aladdin:open sesame'"""%sys.argv[0]) + sys.exit(2) + func = encode + for o, a in opts: + if o == '-e': func = encode + if o == '-d': func = decode + if o == '-u': func = decode + if o == '-t': test(); return + if args and args[0] != '-': + with open(args[0], 'rb') as f: + func(f, sys.stdout.buffer) + else: + func(sys.stdin.buffer, sys.stdout.buffer) + + +def test(): + s0 = b"Aladdin:open sesame" + print(repr(s0)) + s1 = encodebytes(s0) + print(repr(s1)) + s2 = decodebytes(s1) + print(repr(s2)) + assert s0 == s2 + + +if __name__ == '__main__': + main() diff --git a/my_env/Lib/bisect.py b/my_env/Lib/bisect.py new file mode 100644 index 000000000..7732c639e --- /dev/null +++ b/my_env/Lib/bisect.py @@ -0,0 +1,92 @@ +"""Bisection algorithms.""" + +def insort_right(a, x, lo=0, hi=None): + """Insert item x in list a, and keep it sorted assuming a is sorted. + + If x is already in a, insert it to the right of the rightmost x. + + Optional args lo (default 0) and hi (default len(a)) bound the + slice of a to be searched. + """ + + if lo < 0: + raise ValueError('lo must be non-negative') + if hi is None: + hi = len(a) + while lo < hi: + mid = (lo+hi)//2 + if x < a[mid]: hi = mid + else: lo = mid+1 + a.insert(lo, x) + +def bisect_right(a, x, lo=0, hi=None): + """Return the index where to insert item x in list a, assuming a is sorted. + + The return value i is such that all e in a[:i] have e <= x, and all e in + a[i:] have e > x. So if x already appears in the list, a.insert(x) will + insert just after the rightmost x already there. + + Optional args lo (default 0) and hi (default len(a)) bound the + slice of a to be searched. + """ + + if lo < 0: + raise ValueError('lo must be non-negative') + if hi is None: + hi = len(a) + while lo < hi: + mid = (lo+hi)//2 + if x < a[mid]: hi = mid + else: lo = mid+1 + return lo + +def insort_left(a, x, lo=0, hi=None): + """Insert item x in list a, and keep it sorted assuming a is sorted. + + If x is already in a, insert it to the left of the leftmost x. + + Optional args lo (default 0) and hi (default len(a)) bound the + slice of a to be searched. + """ + + if lo < 0: + raise ValueError('lo must be non-negative') + if hi is None: + hi = len(a) + while lo < hi: + mid = (lo+hi)//2 + if a[mid] < x: lo = mid+1 + else: hi = mid + a.insert(lo, x) + + +def bisect_left(a, x, lo=0, hi=None): + """Return the index where to insert item x in list a, assuming a is sorted. + + The return value i is such that all e in a[:i] have e < x, and all e in + a[i:] have e >= x. So if x already appears in the list, a.insert(x) will + insert just before the leftmost x already there. + + Optional args lo (default 0) and hi (default len(a)) bound the + slice of a to be searched. + """ + + if lo < 0: + raise ValueError('lo must be non-negative') + if hi is None: + hi = len(a) + while lo < hi: + mid = (lo+hi)//2 + if a[mid] < x: lo = mid+1 + else: hi = mid + return lo + +# Overwrite above definitions with a fast C implementation +try: + from _bisect import * +except ImportError: + pass + +# Create aliases +bisect = bisect_right +insort = insort_right diff --git a/my_env/Lib/codecs.py b/my_env/Lib/codecs.py new file mode 100644 index 000000000..cfca5d38b --- /dev/null +++ b/my_env/Lib/codecs.py @@ -0,0 +1,1120 @@ +""" codecs -- Python Codec Registry, API and helpers. + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" + +import builtins +import sys + +### Registry and builtin stateless codec functions + +try: + from _codecs import * +except ImportError as why: + raise SystemError('Failed to load the builtin codecs: %s' % why) + +__all__ = ["register", "lookup", "open", "EncodedFile", "BOM", "BOM_BE", + "BOM_LE", "BOM32_BE", "BOM32_LE", "BOM64_BE", "BOM64_LE", + "BOM_UTF8", "BOM_UTF16", "BOM_UTF16_LE", "BOM_UTF16_BE", + "BOM_UTF32", "BOM_UTF32_LE", "BOM_UTF32_BE", + "CodecInfo", "Codec", "IncrementalEncoder", "IncrementalDecoder", + "StreamReader", "StreamWriter", + "StreamReaderWriter", "StreamRecoder", + "getencoder", "getdecoder", "getincrementalencoder", + "getincrementaldecoder", "getreader", "getwriter", + "encode", "decode", "iterencode", "iterdecode", + "strict_errors", "ignore_errors", "replace_errors", + "xmlcharrefreplace_errors", + "backslashreplace_errors", "namereplace_errors", + "register_error", "lookup_error"] + +### Constants + +# +# Byte Order Mark (BOM = ZERO WIDTH NO-BREAK SPACE = U+FEFF) +# and its possible byte string values +# for UTF8/UTF16/UTF32 output and little/big endian machines +# + +# UTF-8 +BOM_UTF8 = b'\xef\xbb\xbf' + +# UTF-16, little endian +BOM_LE = BOM_UTF16_LE = b'\xff\xfe' + +# UTF-16, big endian +BOM_BE = BOM_UTF16_BE = b'\xfe\xff' + +# UTF-32, little endian +BOM_UTF32_LE = b'\xff\xfe\x00\x00' + +# UTF-32, big endian +BOM_UTF32_BE = b'\x00\x00\xfe\xff' + +if sys.byteorder == 'little': + + # UTF-16, native endianness + BOM = BOM_UTF16 = BOM_UTF16_LE + + # UTF-32, native endianness + BOM_UTF32 = BOM_UTF32_LE + +else: + + # UTF-16, native endianness + BOM = BOM_UTF16 = BOM_UTF16_BE + + # UTF-32, native endianness + BOM_UTF32 = BOM_UTF32_BE + +# Old broken names (don't use in new code) +BOM32_LE = BOM_UTF16_LE +BOM32_BE = BOM_UTF16_BE +BOM64_LE = BOM_UTF32_LE +BOM64_BE = BOM_UTF32_BE + + +### Codec base classes (defining the API) + +class CodecInfo(tuple): + """Codec details when looking up the codec registry""" + + # Private API to allow Python 3.4 to blacklist the known non-Unicode + # codecs in the standard library. A more general mechanism to + # reliably distinguish test encodings from other codecs will hopefully + # be defined for Python 3.5 + # + # See http://bugs.python.org/issue19619 + _is_text_encoding = True # Assume codecs are text encodings by default + + def __new__(cls, encode, decode, streamreader=None, streamwriter=None, + incrementalencoder=None, incrementaldecoder=None, name=None, + *, _is_text_encoding=None): + self = tuple.__new__(cls, (encode, decode, streamreader, streamwriter)) + self.name = name + self.encode = encode + self.decode = decode + self.incrementalencoder = incrementalencoder + self.incrementaldecoder = incrementaldecoder + self.streamwriter = streamwriter + self.streamreader = streamreader + if _is_text_encoding is not None: + self._is_text_encoding = _is_text_encoding + return self + + def __repr__(self): + return "<%s.%s object for encoding %s at %#x>" % \ + (self.__class__.__module__, self.__class__.__qualname__, + self.name, id(self)) + +class Codec: + + """ Defines the interface for stateless encoders/decoders. + + The .encode()/.decode() methods may use different error + handling schemes by providing the errors argument. These + string values are predefined: + + 'strict' - raise a ValueError error (or a subclass) + 'ignore' - ignore the character and continue with the next + 'replace' - replace with a suitable replacement character; + Python will use the official U+FFFD REPLACEMENT + CHARACTER for the builtin Unicode codecs on + decoding and '?' on encoding. + 'surrogateescape' - replace with private code points U+DCnn. + 'xmlcharrefreplace' - Replace with the appropriate XML + character reference (only for encoding). + 'backslashreplace' - Replace with backslashed escape sequences. + 'namereplace' - Replace with \\N{...} escape sequences + (only for encoding). + + The set of allowed values can be extended via register_error. + + """ + def encode(self, input, errors='strict'): + + """ Encodes the object input and returns a tuple (output + object, length consumed). + + errors defines the error handling to apply. It defaults to + 'strict' handling. + + The method may not store state in the Codec instance. Use + StreamWriter for codecs which have to keep state in order to + make encoding efficient. + + The encoder must be able to handle zero length input and + return an empty object of the output object type in this + situation. + + """ + raise NotImplementedError + + def decode(self, input, errors='strict'): + + """ Decodes the object input and returns a tuple (output + object, length consumed). + + input must be an object which provides the bf_getreadbuf + buffer slot. Python strings, buffer objects and memory + mapped files are examples of objects providing this slot. + + errors defines the error handling to apply. It defaults to + 'strict' handling. + + The method may not store state in the Codec instance. Use + StreamReader for codecs which have to keep state in order to + make decoding efficient. + + The decoder must be able to handle zero length input and + return an empty object of the output object type in this + situation. + + """ + raise NotImplementedError + +class IncrementalEncoder(object): + """ + An IncrementalEncoder encodes an input in multiple steps. The input can + be passed piece by piece to the encode() method. The IncrementalEncoder + remembers the state of the encoding process between calls to encode(). + """ + def __init__(self, errors='strict'): + """ + Creates an IncrementalEncoder instance. + + The IncrementalEncoder may use different error handling schemes by + providing the errors keyword argument. See the module docstring + for a list of possible values. + """ + self.errors = errors + self.buffer = "" + + def encode(self, input, final=False): + """ + Encodes input and returns the resulting object. + """ + raise NotImplementedError + + def reset(self): + """ + Resets the encoder to the initial state. + """ + + def getstate(self): + """ + Return the current state of the encoder. + """ + return 0 + + def setstate(self, state): + """ + Set the current state of the encoder. state must have been + returned by getstate(). + """ + +class BufferedIncrementalEncoder(IncrementalEncoder): + """ + This subclass of IncrementalEncoder can be used as the baseclass for an + incremental encoder if the encoder must keep some of the output in a + buffer between calls to encode(). + """ + def __init__(self, errors='strict'): + IncrementalEncoder.__init__(self, errors) + # unencoded input that is kept between calls to encode() + self.buffer = "" + + def _buffer_encode(self, input, errors, final): + # Overwrite this method in subclasses: It must encode input + # and return an (output, length consumed) tuple + raise NotImplementedError + + def encode(self, input, final=False): + # encode input (taking the buffer into account) + data = self.buffer + input + (result, consumed) = self._buffer_encode(data, self.errors, final) + # keep unencoded input until the next call + self.buffer = data[consumed:] + return result + + def reset(self): + IncrementalEncoder.reset(self) + self.buffer = "" + + def getstate(self): + return self.buffer or 0 + + def setstate(self, state): + self.buffer = state or "" + +class IncrementalDecoder(object): + """ + An IncrementalDecoder decodes an input in multiple steps. The input can + be passed piece by piece to the decode() method. The IncrementalDecoder + remembers the state of the decoding process between calls to decode(). + """ + def __init__(self, errors='strict'): + """ + Create an IncrementalDecoder instance. + + The IncrementalDecoder may use different error handling schemes by + providing the errors keyword argument. See the module docstring + for a list of possible values. + """ + self.errors = errors + + def decode(self, input, final=False): + """ + Decode input and returns the resulting object. + """ + raise NotImplementedError + + def reset(self): + """ + Reset the decoder to the initial state. + """ + + def getstate(self): + """ + Return the current state of the decoder. + + This must be a (buffered_input, additional_state_info) tuple. + buffered_input must be a bytes object containing bytes that + were passed to decode() that have not yet been converted. + additional_state_info must be a non-negative integer + representing the state of the decoder WITHOUT yet having + processed the contents of buffered_input. In the initial state + and after reset(), getstate() must return (b"", 0). + """ + return (b"", 0) + + def setstate(self, state): + """ + Set the current state of the decoder. + + state must have been returned by getstate(). The effect of + setstate((b"", 0)) must be equivalent to reset(). + """ + +class BufferedIncrementalDecoder(IncrementalDecoder): + """ + This subclass of IncrementalDecoder can be used as the baseclass for an + incremental decoder if the decoder must be able to handle incomplete + byte sequences. + """ + def __init__(self, errors='strict'): + IncrementalDecoder.__init__(self, errors) + # undecoded input that is kept between calls to decode() + self.buffer = b"" + + def _buffer_decode(self, input, errors, final): + # Overwrite this method in subclasses: It must decode input + # and return an (output, length consumed) tuple + raise NotImplementedError + + def decode(self, input, final=False): + # decode input (taking the buffer into account) + data = self.buffer + input + (result, consumed) = self._buffer_decode(data, self.errors, final) + # keep undecoded input until the next call + self.buffer = data[consumed:] + return result + + def reset(self): + IncrementalDecoder.reset(self) + self.buffer = b"" + + def getstate(self): + # additional state info is always 0 + return (self.buffer, 0) + + def setstate(self, state): + # ignore additional state info + self.buffer = state[0] + +# +# The StreamWriter and StreamReader class provide generic working +# interfaces which can be used to implement new encoding submodules +# very easily. See encodings/utf_8.py for an example on how this is +# done. +# + +class StreamWriter(Codec): + + def __init__(self, stream, errors='strict'): + + """ Creates a StreamWriter instance. + + stream must be a file-like object open for writing. + + The StreamWriter may use different error handling + schemes by providing the errors keyword argument. These + parameters are predefined: + + 'strict' - raise a ValueError (or a subclass) + 'ignore' - ignore the character and continue with the next + 'replace'- replace with a suitable replacement character + 'xmlcharrefreplace' - Replace with the appropriate XML + character reference. + 'backslashreplace' - Replace with backslashed escape + sequences. + 'namereplace' - Replace with \\N{...} escape sequences. + + The set of allowed parameter values can be extended via + register_error. + """ + self.stream = stream + self.errors = errors + + def write(self, object): + + """ Writes the object's contents encoded to self.stream. + """ + data, consumed = self.encode(object, self.errors) + self.stream.write(data) + + def writelines(self, list): + + """ Writes the concatenated list of strings to the stream + using .write(). + """ + self.write(''.join(list)) + + def reset(self): + + """ Flushes and resets the codec buffers used for keeping state. + + Calling this method should ensure that the data on the + output is put into a clean state, that allows appending + of new fresh data without having to rescan the whole + stream to recover state. + + """ + pass + + def seek(self, offset, whence=0): + self.stream.seek(offset, whence) + if whence == 0 and offset == 0: + self.reset() + + def __getattr__(self, name, + getattr=getattr): + + """ Inherit all other methods from the underlying stream. + """ + return getattr(self.stream, name) + + def __enter__(self): + return self + + def __exit__(self, type, value, tb): + self.stream.close() + +### + +class StreamReader(Codec): + + charbuffertype = str + + def __init__(self, stream, errors='strict'): + + """ Creates a StreamReader instance. + + stream must be a file-like object open for reading. + + The StreamReader may use different error handling + schemes by providing the errors keyword argument. These + parameters are predefined: + + 'strict' - raise a ValueError (or a subclass) + 'ignore' - ignore the character and continue with the next + 'replace'- replace with a suitable replacement character + 'backslashreplace' - Replace with backslashed escape sequences; + + The set of allowed parameter values can be extended via + register_error. + """ + self.stream = stream + self.errors = errors + self.bytebuffer = b"" + self._empty_charbuffer = self.charbuffertype() + self.charbuffer = self._empty_charbuffer + self.linebuffer = None + + def decode(self, input, errors='strict'): + raise NotImplementedError + + def read(self, size=-1, chars=-1, firstline=False): + + """ Decodes data from the stream self.stream and returns the + resulting object. + + chars indicates the number of decoded code points or bytes to + return. read() will never return more data than requested, + but it might return less, if there is not enough available. + + size indicates the approximate maximum number of decoded + bytes or code points to read for decoding. The decoder + can modify this setting as appropriate. The default value + -1 indicates to read and decode as much as possible. size + is intended to prevent having to decode huge files in one + step. + + If firstline is true, and a UnicodeDecodeError happens + after the first line terminator in the input only the first line + will be returned, the rest of the input will be kept until the + next call to read(). + + The method should use a greedy read strategy, meaning that + it should read as much data as is allowed within the + definition of the encoding and the given size, e.g. if + optional encoding endings or state markers are available + on the stream, these should be read too. + """ + # If we have lines cached, first merge them back into characters + if self.linebuffer: + self.charbuffer = self._empty_charbuffer.join(self.linebuffer) + self.linebuffer = None + + if chars < 0: + # For compatibility with other read() methods that take a + # single argument + chars = size + + # read until we get the required number of characters (if available) + while True: + # can the request be satisfied from the character buffer? + if chars >= 0: + if len(self.charbuffer) >= chars: + break + # we need more data + if size < 0: + newdata = self.stream.read() + else: + newdata = self.stream.read(size) + # decode bytes (those remaining from the last call included) + data = self.bytebuffer + newdata + if not data: + break + try: + newchars, decodedbytes = self.decode(data, self.errors) + except UnicodeDecodeError as exc: + if firstline: + newchars, decodedbytes = \ + self.decode(data[:exc.start], self.errors) + lines = newchars.splitlines(keepends=True) + if len(lines)<=1: + raise + else: + raise + # keep undecoded bytes until the next call + self.bytebuffer = data[decodedbytes:] + # put new characters in the character buffer + self.charbuffer += newchars + # there was no data available + if not newdata: + break + if chars < 0: + # Return everything we've got + result = self.charbuffer + self.charbuffer = self._empty_charbuffer + else: + # Return the first chars characters + result = self.charbuffer[:chars] + self.charbuffer = self.charbuffer[chars:] + return result + + def readline(self, size=None, keepends=True): + + """ Read one line from the input stream and return the + decoded data. + + size, if given, is passed as size argument to the + read() method. + + """ + # If we have lines cached from an earlier read, return + # them unconditionally + if self.linebuffer: + line = self.linebuffer[0] + del self.linebuffer[0] + if len(self.linebuffer) == 1: + # revert to charbuffer mode; we might need more data + # next time + self.charbuffer = self.linebuffer[0] + self.linebuffer = None + if not keepends: + line = line.splitlines(keepends=False)[0] + return line + + readsize = size or 72 + line = self._empty_charbuffer + # If size is given, we call read() only once + while True: + data = self.read(readsize, firstline=True) + if data: + # If we're at a "\r" read one extra character (which might + # be a "\n") to get a proper line ending. If the stream is + # temporarily exhausted we return the wrong line ending. + if (isinstance(data, str) and data.endswith("\r")) or \ + (isinstance(data, bytes) and data.endswith(b"\r")): + data += self.read(size=1, chars=1) + + line += data + lines = line.splitlines(keepends=True) + if lines: + if len(lines) > 1: + # More than one line result; the first line is a full line + # to return + line = lines[0] + del lines[0] + if len(lines) > 1: + # cache the remaining lines + lines[-1] += self.charbuffer + self.linebuffer = lines + self.charbuffer = None + else: + # only one remaining line, put it back into charbuffer + self.charbuffer = lines[0] + self.charbuffer + if not keepends: + line = line.splitlines(keepends=False)[0] + break + line0withend = lines[0] + line0withoutend = lines[0].splitlines(keepends=False)[0] + if line0withend != line0withoutend: # We really have a line end + # Put the rest back together and keep it until the next call + self.charbuffer = self._empty_charbuffer.join(lines[1:]) + \ + self.charbuffer + if keepends: + line = line0withend + else: + line = line0withoutend + break + # we didn't get anything or this was our only try + if not data or size is not None: + if line and not keepends: + line = line.splitlines(keepends=False)[0] + break + if readsize < 8000: + readsize *= 2 + return line + + def readlines(self, sizehint=None, keepends=True): + + """ Read all lines available on the input stream + and return them as a list. + + Line breaks are implemented using the codec's decoder + method and are included in the list entries. + + sizehint, if given, is ignored since there is no efficient + way to finding the true end-of-line. + + """ + data = self.read() + return data.splitlines(keepends) + + def reset(self): + + """ Resets the codec buffers used for keeping state. + + Note that no stream repositioning should take place. + This method is primarily intended to be able to recover + from decoding errors. + + """ + self.bytebuffer = b"" + self.charbuffer = self._empty_charbuffer + self.linebuffer = None + + def seek(self, offset, whence=0): + """ Set the input stream's current position. + + Resets the codec buffers used for keeping state. + """ + self.stream.seek(offset, whence) + self.reset() + + def __next__(self): + + """ Return the next decoded line from the input stream.""" + line = self.readline() + if line: + return line + raise StopIteration + + def __iter__(self): + return self + + def __getattr__(self, name, + getattr=getattr): + + """ Inherit all other methods from the underlying stream. + """ + return getattr(self.stream, name) + + def __enter__(self): + return self + + def __exit__(self, type, value, tb): + self.stream.close() + +### + +class StreamReaderWriter: + + """ StreamReaderWriter instances allow wrapping streams which + work in both read and write modes. + + The design is such that one can use the factory functions + returned by the codec.lookup() function to construct the + instance. + + """ + # Optional attributes set by the file wrappers below + encoding = 'unknown' + + def __init__(self, stream, Reader, Writer, errors='strict'): + + """ Creates a StreamReaderWriter instance. + + stream must be a Stream-like object. + + Reader, Writer must be factory functions or classes + providing the StreamReader, StreamWriter interface resp. + + Error handling is done in the same way as defined for the + StreamWriter/Readers. + + """ + self.stream = stream + self.reader = Reader(stream, errors) + self.writer = Writer(stream, errors) + self.errors = errors + + def read(self, size=-1): + + return self.reader.read(size) + + def readline(self, size=None): + + return self.reader.readline(size) + + def readlines(self, sizehint=None): + + return self.reader.readlines(sizehint) + + def __next__(self): + + """ Return the next decoded line from the input stream.""" + return next(self.reader) + + def __iter__(self): + return self + + def write(self, data): + + return self.writer.write(data) + + def writelines(self, list): + + return self.writer.writelines(list) + + def reset(self): + + self.reader.reset() + self.writer.reset() + + def seek(self, offset, whence=0): + self.stream.seek(offset, whence) + self.reader.reset() + if whence == 0 and offset == 0: + self.writer.reset() + + def __getattr__(self, name, + getattr=getattr): + + """ Inherit all other methods from the underlying stream. + """ + return getattr(self.stream, name) + + # these are needed to make "with StreamReaderWriter(...)" work properly + + def __enter__(self): + return self + + def __exit__(self, type, value, tb): + self.stream.close() + +### + +class StreamRecoder: + + """ StreamRecoder instances translate data from one encoding to another. + + They use the complete set of APIs returned by the + codecs.lookup() function to implement their task. + + Data written to the StreamRecoder is first decoded into an + intermediate format (depending on the "decode" codec) and then + written to the underlying stream using an instance of the provided + Writer class. + + In the other direction, data is read from the underlying stream using + a Reader instance and then encoded and returned to the caller. + + """ + # Optional attributes set by the file wrappers below + data_encoding = 'unknown' + file_encoding = 'unknown' + + def __init__(self, stream, encode, decode, Reader, Writer, + errors='strict'): + + """ Creates a StreamRecoder instance which implements a two-way + conversion: encode and decode work on the frontend (the + data visible to .read() and .write()) while Reader and Writer + work on the backend (the data in stream). + + You can use these objects to do transparent + transcodings from e.g. latin-1 to utf-8 and back. + + stream must be a file-like object. + + encode and decode must adhere to the Codec interface; Reader and + Writer must be factory functions or classes providing the + StreamReader and StreamWriter interfaces resp. + + Error handling is done in the same way as defined for the + StreamWriter/Readers. + + """ + self.stream = stream + self.encode = encode + self.decode = decode + self.reader = Reader(stream, errors) + self.writer = Writer(stream, errors) + self.errors = errors + + def read(self, size=-1): + + data = self.reader.read(size) + data, bytesencoded = self.encode(data, self.errors) + return data + + def readline(self, size=None): + + if size is None: + data = self.reader.readline() + else: + data = self.reader.readline(size) + data, bytesencoded = self.encode(data, self.errors) + return data + + def readlines(self, sizehint=None): + + data = self.reader.read() + data, bytesencoded = self.encode(data, self.errors) + return data.splitlines(keepends=True) + + def __next__(self): + + """ Return the next decoded line from the input stream.""" + data = next(self.reader) + data, bytesencoded = self.encode(data, self.errors) + return data + + def __iter__(self): + return self + + def write(self, data): + + data, bytesdecoded = self.decode(data, self.errors) + return self.writer.write(data) + + def writelines(self, list): + + data = b''.join(list) + data, bytesdecoded = self.decode(data, self.errors) + return self.writer.write(data) + + def reset(self): + + self.reader.reset() + self.writer.reset() + + def seek(self, offset, whence=0): + # Seeks must be propagated to both the readers and writers + # as they might need to reset their internal buffers. + self.reader.seek(offset, whence) + self.writer.seek(offset, whence) + + def __getattr__(self, name, + getattr=getattr): + + """ Inherit all other methods from the underlying stream. + """ + return getattr(self.stream, name) + + def __enter__(self): + return self + + def __exit__(self, type, value, tb): + self.stream.close() + +### Shortcuts + +def open(filename, mode='r', encoding=None, errors='strict', buffering=1): + + """ Open an encoded file using the given mode and return + a wrapped version providing transparent encoding/decoding. + + Note: The wrapped version will only accept the object format + defined by the codecs, i.e. Unicode objects for most builtin + codecs. Output is also codec dependent and will usually be + Unicode as well. + + Underlying encoded files are always opened in binary mode. + The default file mode is 'r', meaning to open the file in read mode. + + encoding specifies the encoding which is to be used for the + file. + + errors may be given to define the error handling. It defaults + to 'strict' which causes ValueErrors to be raised in case an + encoding error occurs. + + buffering has the same meaning as for the builtin open() API. + It defaults to line buffered. + + The returned wrapped file object provides an extra attribute + .encoding which allows querying the used encoding. This + attribute is only available if an encoding was specified as + parameter. + + """ + if encoding is not None and \ + 'b' not in mode: + # Force opening of the file in binary mode + mode = mode + 'b' + file = builtins.open(filename, mode, buffering) + if encoding is None: + return file + info = lookup(encoding) + srw = StreamReaderWriter(file, info.streamreader, info.streamwriter, errors) + # Add attributes to simplify introspection + srw.encoding = encoding + return srw + +def EncodedFile(file, data_encoding, file_encoding=None, errors='strict'): + + """ Return a wrapped version of file which provides transparent + encoding translation. + + Data written to the wrapped file is decoded according + to the given data_encoding and then encoded to the underlying + file using file_encoding. The intermediate data type + will usually be Unicode but depends on the specified codecs. + + Bytes read from the file are decoded using file_encoding and then + passed back to the caller encoded using data_encoding. + + If file_encoding is not given, it defaults to data_encoding. + + errors may be given to define the error handling. It defaults + to 'strict' which causes ValueErrors to be raised in case an + encoding error occurs. + + The returned wrapped file object provides two extra attributes + .data_encoding and .file_encoding which reflect the given + parameters of the same name. The attributes can be used for + introspection by Python programs. + + """ + if file_encoding is None: + file_encoding = data_encoding + data_info = lookup(data_encoding) + file_info = lookup(file_encoding) + sr = StreamRecoder(file, data_info.encode, data_info.decode, + file_info.streamreader, file_info.streamwriter, errors) + # Add attributes to simplify introspection + sr.data_encoding = data_encoding + sr.file_encoding = file_encoding + return sr + +### Helpers for codec lookup + +def getencoder(encoding): + + """ Lookup up the codec for the given encoding and return + its encoder function. + + Raises a LookupError in case the encoding cannot be found. + + """ + return lookup(encoding).encode + +def getdecoder(encoding): + + """ Lookup up the codec for the given encoding and return + its decoder function. + + Raises a LookupError in case the encoding cannot be found. + + """ + return lookup(encoding).decode + +def getincrementalencoder(encoding): + + """ Lookup up the codec for the given encoding and return + its IncrementalEncoder class or factory function. + + Raises a LookupError in case the encoding cannot be found + or the codecs doesn't provide an incremental encoder. + + """ + encoder = lookup(encoding).incrementalencoder + if encoder is None: + raise LookupError(encoding) + return encoder + +def getincrementaldecoder(encoding): + + """ Lookup up the codec for the given encoding and return + its IncrementalDecoder class or factory function. + + Raises a LookupError in case the encoding cannot be found + or the codecs doesn't provide an incremental decoder. + + """ + decoder = lookup(encoding).incrementaldecoder + if decoder is None: + raise LookupError(encoding) + return decoder + +def getreader(encoding): + + """ Lookup up the codec for the given encoding and return + its StreamReader class or factory function. + + Raises a LookupError in case the encoding cannot be found. + + """ + return lookup(encoding).streamreader + +def getwriter(encoding): + + """ Lookup up the codec for the given encoding and return + its StreamWriter class or factory function. + + Raises a LookupError in case the encoding cannot be found. + + """ + return lookup(encoding).streamwriter + +def iterencode(iterator, encoding, errors='strict', **kwargs): + """ + Encoding iterator. + + Encodes the input strings from the iterator using an IncrementalEncoder. + + errors and kwargs are passed through to the IncrementalEncoder + constructor. + """ + encoder = getincrementalencoder(encoding)(errors, **kwargs) + for input in iterator: + output = encoder.encode(input) + if output: + yield output + output = encoder.encode("", True) + if output: + yield output + +def iterdecode(iterator, encoding, errors='strict', **kwargs): + """ + Decoding iterator. + + Decodes the input strings from the iterator using an IncrementalDecoder. + + errors and kwargs are passed through to the IncrementalDecoder + constructor. + """ + decoder = getincrementaldecoder(encoding)(errors, **kwargs) + for input in iterator: + output = decoder.decode(input) + if output: + yield output + output = decoder.decode(b"", True) + if output: + yield output + +### Helpers for charmap-based codecs + +def make_identity_dict(rng): + + """ make_identity_dict(rng) -> dict + + Return a dictionary where elements of the rng sequence are + mapped to themselves. + + """ + return {i:i for i in rng} + +def make_encoding_map(decoding_map): + + """ Creates an encoding map from a decoding map. + + If a target mapping in the decoding map occurs multiple + times, then that target is mapped to None (undefined mapping), + causing an exception when encountered by the charmap codec + during translation. + + One example where this happens is cp875.py which decodes + multiple character to \\u001a. + + """ + m = {} + for k,v in decoding_map.items(): + if not v in m: + m[v] = k + else: + m[v] = None + return m + +### error handlers + +try: + strict_errors = lookup_error("strict") + ignore_errors = lookup_error("ignore") + replace_errors = lookup_error("replace") + xmlcharrefreplace_errors = lookup_error("xmlcharrefreplace") + backslashreplace_errors = lookup_error("backslashreplace") + namereplace_errors = lookup_error("namereplace") +except LookupError: + # In --disable-unicode builds, these error handler are missing + strict_errors = None + ignore_errors = None + replace_errors = None + xmlcharrefreplace_errors = None + backslashreplace_errors = None + namereplace_errors = None + +# Tell modulefinder that using codecs probably needs the encodings +# package +_false = 0 +if _false: + import encodings + +### Tests + +if __name__ == '__main__': + + # Make stdout translate Latin-1 output into UTF-8 output + sys.stdout = EncodedFile(sys.stdout, 'latin-1', 'utf-8') + + # Have stdin translate Latin-1 input into UTF-8 input + sys.stdin = EncodedFile(sys.stdin, 'utf-8', 'latin-1') diff --git a/my_env/Lib/collections/__init__.py b/my_env/Lib/collections/__init__.py new file mode 100644 index 000000000..64bbee8fa --- /dev/null +++ b/my_env/Lib/collections/__init__.py @@ -0,0 +1,1299 @@ +'''This module implements specialized container datatypes providing +alternatives to Python's general purpose built-in containers, dict, +list, set, and tuple. + +* namedtuple factory function for creating tuple subclasses with named fields +* deque list-like container with fast appends and pops on either end +* ChainMap dict-like class for creating a single view of multiple mappings +* Counter dict subclass for counting hashable objects +* OrderedDict dict subclass that remembers the order entries were added +* defaultdict dict subclass that calls a factory function to supply missing values +* UserDict wrapper around dictionary objects for easier dict subclassing +* UserList wrapper around list objects for easier list subclassing +* UserString wrapper around string objects for easier string subclassing + +''' + +__all__ = ['deque', 'defaultdict', 'namedtuple', 'UserDict', 'UserList', + 'UserString', 'Counter', 'OrderedDict', 'ChainMap'] + +import _collections_abc +from operator import itemgetter as _itemgetter, eq as _eq +from keyword import iskeyword as _iskeyword +import sys as _sys +import heapq as _heapq +from _weakref import proxy as _proxy +from itertools import repeat as _repeat, chain as _chain, starmap as _starmap +from reprlib import recursive_repr as _recursive_repr + +try: + from _collections import deque +except ImportError: + pass +else: + _collections_abc.MutableSequence.register(deque) + +try: + from _collections import defaultdict +except ImportError: + pass + + +def __getattr__(name): + # For backwards compatibility, continue to make the collections ABCs + # through Python 3.6 available through the collections module. + # Note, no new collections ABCs were added in Python 3.7 + if name in _collections_abc.__all__: + obj = getattr(_collections_abc, name) + import warnings + warnings.warn("Using or importing the ABCs from 'collections' instead " + "of from 'collections.abc' is deprecated, " + "and in 3.8 it will stop working", + DeprecationWarning, stacklevel=2) + globals()[name] = obj + return obj + raise AttributeError(f'module {__name__!r} has no attribute {name!r}') + +################################################################################ +### OrderedDict +################################################################################ + +class _OrderedDictKeysView(_collections_abc.KeysView): + + def __reversed__(self): + yield from reversed(self._mapping) + +class _OrderedDictItemsView(_collections_abc.ItemsView): + + def __reversed__(self): + for key in reversed(self._mapping): + yield (key, self._mapping[key]) + +class _OrderedDictValuesView(_collections_abc.ValuesView): + + def __reversed__(self): + for key in reversed(self._mapping): + yield self._mapping[key] + +class _Link(object): + __slots__ = 'prev', 'next', 'key', '__weakref__' + +class OrderedDict(dict): + 'Dictionary that remembers insertion order' + # An inherited dict maps keys to values. + # The inherited dict provides __getitem__, __len__, __contains__, and get. + # The remaining methods are order-aware. + # Big-O running times for all methods are the same as regular dictionaries. + + # The internal self.__map dict maps keys to links in a doubly linked list. + # The circular doubly linked list starts and ends with a sentinel element. + # The sentinel element never gets deleted (this simplifies the algorithm). + # The sentinel is in self.__hardroot with a weakref proxy in self.__root. + # The prev links are weakref proxies (to prevent circular references). + # Individual links are kept alive by the hard reference in self.__map. + # Those hard references disappear when a key is deleted from an OrderedDict. + + def __init__(*args, **kwds): + '''Initialize an ordered dictionary. The signature is the same as + regular dictionaries. Keyword argument order is preserved. + ''' + if not args: + raise TypeError("descriptor '__init__' of 'OrderedDict' object " + "needs an argument") + self, *args = args + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + try: + self.__root + except AttributeError: + self.__hardroot = _Link() + self.__root = root = _proxy(self.__hardroot) + root.prev = root.next = root + self.__map = {} + self.__update(*args, **kwds) + + def __setitem__(self, key, value, + dict_setitem=dict.__setitem__, proxy=_proxy, Link=_Link): + 'od.__setitem__(i, y) <==> od[i]=y' + # Setting a new item creates a new link at the end of the linked list, + # and the inherited dictionary is updated with the new key/value pair. + if key not in self: + self.__map[key] = link = Link() + root = self.__root + last = root.prev + link.prev, link.next, link.key = last, root, key + last.next = link + root.prev = proxy(link) + dict_setitem(self, key, value) + + def __delitem__(self, key, dict_delitem=dict.__delitem__): + 'od.__delitem__(y) <==> del od[y]' + # Deleting an existing item uses self.__map to find the link which gets + # removed by updating the links in the predecessor and successor nodes. + dict_delitem(self, key) + link = self.__map.pop(key) + link_prev = link.prev + link_next = link.next + link_prev.next = link_next + link_next.prev = link_prev + link.prev = None + link.next = None + + def __iter__(self): + 'od.__iter__() <==> iter(od)' + # Traverse the linked list in order. + root = self.__root + curr = root.next + while curr is not root: + yield curr.key + curr = curr.next + + def __reversed__(self): + 'od.__reversed__() <==> reversed(od)' + # Traverse the linked list in reverse order. + root = self.__root + curr = root.prev + while curr is not root: + yield curr.key + curr = curr.prev + + def clear(self): + 'od.clear() -> None. Remove all items from od.' + root = self.__root + root.prev = root.next = root + self.__map.clear() + dict.clear(self) + + def popitem(self, last=True): + '''Remove and return a (key, value) pair from the dictionary. + + Pairs are returned in LIFO order if last is true or FIFO order if false. + ''' + if not self: + raise KeyError('dictionary is empty') + root = self.__root + if last: + link = root.prev + link_prev = link.prev + link_prev.next = root + root.prev = link_prev + else: + link = root.next + link_next = link.next + root.next = link_next + link_next.prev = root + key = link.key + del self.__map[key] + value = dict.pop(self, key) + return key, value + + def move_to_end(self, key, last=True): + '''Move an existing element to the end (or beginning if last is false). + + Raise KeyError if the element does not exist. + ''' + link = self.__map[key] + link_prev = link.prev + link_next = link.next + soft_link = link_next.prev + link_prev.next = link_next + link_next.prev = link_prev + root = self.__root + if last: + last = root.prev + link.prev = last + link.next = root + root.prev = soft_link + last.next = link + else: + first = root.next + link.prev = root + link.next = first + first.prev = soft_link + root.next = link + + def __sizeof__(self): + sizeof = _sys.getsizeof + n = len(self) + 1 # number of links including root + size = sizeof(self.__dict__) # instance dictionary + size += sizeof(self.__map) * 2 # internal dict and inherited dict + size += sizeof(self.__hardroot) * n # link objects + size += sizeof(self.__root) * n # proxy objects + return size + + update = __update = _collections_abc.MutableMapping.update + + def keys(self): + "D.keys() -> a set-like object providing a view on D's keys" + return _OrderedDictKeysView(self) + + def items(self): + "D.items() -> a set-like object providing a view on D's items" + return _OrderedDictItemsView(self) + + def values(self): + "D.values() -> an object providing a view on D's values" + return _OrderedDictValuesView(self) + + __ne__ = _collections_abc.MutableMapping.__ne__ + + __marker = object() + + def pop(self, key, default=__marker): + '''od.pop(k[,d]) -> v, remove specified key and return the corresponding + value. If key is not found, d is returned if given, otherwise KeyError + is raised. + + ''' + if key in self: + result = self[key] + del self[key] + return result + if default is self.__marker: + raise KeyError(key) + return default + + def setdefault(self, key, default=None): + '''Insert key with a value of default if key is not in the dictionary. + + Return the value for key if key is in the dictionary, else default. + ''' + if key in self: + return self[key] + self[key] = default + return default + + @_recursive_repr() + def __repr__(self): + 'od.__repr__() <==> repr(od)' + if not self: + return '%s()' % (self.__class__.__name__,) + return '%s(%r)' % (self.__class__.__name__, list(self.items())) + + def __reduce__(self): + 'Return state information for pickling' + inst_dict = vars(self).copy() + for k in vars(OrderedDict()): + inst_dict.pop(k, None) + return self.__class__, (), inst_dict or None, None, iter(self.items()) + + def copy(self): + 'od.copy() -> a shallow copy of od' + return self.__class__(self) + + @classmethod + def fromkeys(cls, iterable, value=None): + '''Create a new ordered dictionary with keys from iterable and values set to value. + ''' + self = cls() + for key in iterable: + self[key] = value + return self + + def __eq__(self, other): + '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive + while comparison to a regular mapping is order-insensitive. + + ''' + if isinstance(other, OrderedDict): + return dict.__eq__(self, other) and all(map(_eq, self, other)) + return dict.__eq__(self, other) + + +try: + from _collections import OrderedDict +except ImportError: + # Leave the pure Python version in place. + pass + + +################################################################################ +### namedtuple +################################################################################ + +_nt_itemgetters = {} + +def namedtuple(typename, field_names, *, rename=False, defaults=None, module=None): + """Returns a new subclass of tuple with named fields. + + >>> Point = namedtuple('Point', ['x', 'y']) + >>> Point.__doc__ # docstring for the new class + 'Point(x, y)' + >>> p = Point(11, y=22) # instantiate with positional args or keywords + >>> p[0] + p[1] # indexable like a plain tuple + 33 + >>> x, y = p # unpack like a regular tuple + >>> x, y + (11, 22) + >>> p.x + p.y # fields also accessible by name + 33 + >>> d = p._asdict() # convert to a dictionary + >>> d['x'] + 11 + >>> Point(**d) # convert from a dictionary + Point(x=11, y=22) + >>> p._replace(x=100) # _replace() is like str.replace() but targets named fields + Point(x=100, y=22) + + """ + + # Validate the field names. At the user's option, either generate an error + # message or automatically replace the field name with a valid name. + if isinstance(field_names, str): + field_names = field_names.replace(',', ' ').split() + field_names = list(map(str, field_names)) + typename = _sys.intern(str(typename)) + + if rename: + seen = set() + for index, name in enumerate(field_names): + if (not name.isidentifier() + or _iskeyword(name) + or name.startswith('_') + or name in seen): + field_names[index] = f'_{index}' + seen.add(name) + + for name in [typename] + field_names: + if type(name) is not str: + raise TypeError('Type names and field names must be strings') + if not name.isidentifier(): + raise ValueError('Type names and field names must be valid ' + f'identifiers: {name!r}') + if _iskeyword(name): + raise ValueError('Type names and field names cannot be a ' + f'keyword: {name!r}') + + seen = set() + for name in field_names: + if name.startswith('_') and not rename: + raise ValueError('Field names cannot start with an underscore: ' + f'{name!r}') + if name in seen: + raise ValueError(f'Encountered duplicate field name: {name!r}') + seen.add(name) + + field_defaults = {} + if defaults is not None: + defaults = tuple(defaults) + if len(defaults) > len(field_names): + raise TypeError('Got more default values than field names') + field_defaults = dict(reversed(list(zip(reversed(field_names), + reversed(defaults))))) + + # Variables used in the methods and docstrings + field_names = tuple(map(_sys.intern, field_names)) + num_fields = len(field_names) + arg_list = repr(field_names).replace("'", "")[1:-1] + repr_fmt = '(' + ', '.join(f'{name}=%r' for name in field_names) + ')' + tuple_new = tuple.__new__ + _len = len + + # Create all the named tuple methods to be added to the class namespace + + s = f'def __new__(_cls, {arg_list}): return _tuple_new(_cls, ({arg_list}))' + namespace = {'_tuple_new': tuple_new, '__name__': f'namedtuple_{typename}'} + # Note: exec() has the side-effect of interning the field names + exec(s, namespace) + __new__ = namespace['__new__'] + __new__.__doc__ = f'Create new instance of {typename}({arg_list})' + if defaults is not None: + __new__.__defaults__ = defaults + + @classmethod + def _make(cls, iterable): + result = tuple_new(cls, iterable) + if _len(result) != num_fields: + raise TypeError(f'Expected {num_fields} arguments, got {len(result)}') + return result + + _make.__func__.__doc__ = (f'Make a new {typename} object from a sequence ' + 'or iterable') + + def _replace(_self, **kwds): + result = _self._make(map(kwds.pop, field_names, _self)) + if kwds: + raise ValueError(f'Got unexpected field names: {list(kwds)!r}') + return result + + _replace.__doc__ = (f'Return a new {typename} object replacing specified ' + 'fields with new values') + + def __repr__(self): + 'Return a nicely formatted representation string' + return self.__class__.__name__ + repr_fmt % self + + def _asdict(self): + 'Return a new OrderedDict which maps field names to their values.' + return OrderedDict(zip(self._fields, self)) + + def __getnewargs__(self): + 'Return self as a plain tuple. Used by copy and pickle.' + return tuple(self) + + # Modify function metadata to help with introspection and debugging + + for method in (__new__, _make.__func__, _replace, + __repr__, _asdict, __getnewargs__): + method.__qualname__ = f'{typename}.{method.__name__}' + + # Build-up the class namespace dictionary + # and use type() to build the result class + class_namespace = { + '__doc__': f'{typename}({arg_list})', + '__slots__': (), + '_fields': field_names, + '_field_defaults': field_defaults, + # alternate spelling for backward compatiblity + '_fields_defaults': field_defaults, + '__new__': __new__, + '_make': _make, + '_replace': _replace, + '__repr__': __repr__, + '_asdict': _asdict, + '__getnewargs__': __getnewargs__, + } + cache = _nt_itemgetters + for index, name in enumerate(field_names): + try: + itemgetter_object, doc = cache[index] + except KeyError: + itemgetter_object = _itemgetter(index) + doc = f'Alias for field number {index}' + cache[index] = itemgetter_object, doc + class_namespace[name] = property(itemgetter_object, doc=doc) + + result = type(typename, (tuple,), class_namespace) + + # For pickling to work, the __module__ variable needs to be set to the frame + # where the named tuple is created. Bypass this step in environments where + # sys._getframe is not defined (Jython for example) or sys._getframe is not + # defined for arguments greater than 0 (IronPython), or where the user has + # specified a particular module. + if module is None: + try: + module = _sys._getframe(1).f_globals.get('__name__', '__main__') + except (AttributeError, ValueError): + pass + if module is not None: + result.__module__ = module + + return result + + +######################################################################## +### Counter +######################################################################## + +def _count_elements(mapping, iterable): + 'Tally elements from the iterable.' + mapping_get = mapping.get + for elem in iterable: + mapping[elem] = mapping_get(elem, 0) + 1 + +try: # Load C helper function if available + from _collections import _count_elements +except ImportError: + pass + +class Counter(dict): + '''Dict subclass for counting hashable items. Sometimes called a bag + or multiset. Elements are stored as dictionary keys and their counts + are stored as dictionary values. + + >>> c = Counter('abcdeabcdabcaba') # count elements from a string + + >>> c.most_common(3) # three most common elements + [('a', 5), ('b', 4), ('c', 3)] + >>> sorted(c) # list all unique elements + ['a', 'b', 'c', 'd', 'e'] + >>> ''.join(sorted(c.elements())) # list elements with repetitions + 'aaaaabbbbcccdde' + >>> sum(c.values()) # total of all counts + 15 + + >>> c['a'] # count of letter 'a' + 5 + >>> for elem in 'shazam': # update counts from an iterable + ... c[elem] += 1 # by adding 1 to each element's count + >>> c['a'] # now there are seven 'a' + 7 + >>> del c['b'] # remove all 'b' + >>> c['b'] # now there are zero 'b' + 0 + + >>> d = Counter('simsalabim') # make another counter + >>> c.update(d) # add in the second counter + >>> c['a'] # now there are nine 'a' + 9 + + >>> c.clear() # empty the counter + >>> c + Counter() + + Note: If a count is set to zero or reduced to zero, it will remain + in the counter until the entry is deleted or the counter is cleared: + + >>> c = Counter('aaabbc') + >>> c['b'] -= 2 # reduce the count of 'b' by two + >>> c.most_common() # 'b' is still in, but its count is zero + [('a', 3), ('c', 1), ('b', 0)] + + ''' + # References: + # http://en.wikipedia.org/wiki/Multiset + # http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html + # http://www.demo2s.com/Tutorial/Cpp/0380__set-multiset/Catalog0380__set-multiset.htm + # http://code.activestate.com/recipes/259174/ + # Knuth, TAOCP Vol. II section 4.6.3 + + def __init__(*args, **kwds): + '''Create a new, empty Counter object. And if given, count elements + from an input iterable. Or, initialize the count from another mapping + of elements to their counts. + + >>> c = Counter() # a new, empty counter + >>> c = Counter('gallahad') # a new counter from an iterable + >>> c = Counter({'a': 4, 'b': 2}) # a new counter from a mapping + >>> c = Counter(a=4, b=2) # a new counter from keyword args + + ''' + if not args: + raise TypeError("descriptor '__init__' of 'Counter' object " + "needs an argument") + self, *args = args + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + super(Counter, self).__init__() + self.update(*args, **kwds) + + def __missing__(self, key): + 'The count of elements not in the Counter is zero.' + # Needed so that self[missing_item] does not raise KeyError + return 0 + + def most_common(self, n=None): + '''List the n most common elements and their counts from the most + common to the least. If n is None, then list all element counts. + + >>> Counter('abcdeabcdabcaba').most_common(3) + [('a', 5), ('b', 4), ('c', 3)] + + ''' + # Emulate Bag.sortedByCount from Smalltalk + if n is None: + return sorted(self.items(), key=_itemgetter(1), reverse=True) + return _heapq.nlargest(n, self.items(), key=_itemgetter(1)) + + def elements(self): + '''Iterator over elements repeating each as many times as its count. + + >>> c = Counter('ABCABC') + >>> sorted(c.elements()) + ['A', 'A', 'B', 'B', 'C', 'C'] + + # Knuth's example for prime factors of 1836: 2**2 * 3**3 * 17**1 + >>> prime_factors = Counter({2: 2, 3: 3, 17: 1}) + >>> product = 1 + >>> for factor in prime_factors.elements(): # loop over factors + ... product *= factor # and multiply them + >>> product + 1836 + + Note, if an element's count has been set to zero or is a negative + number, elements() will ignore it. + + ''' + # Emulate Bag.do from Smalltalk and Multiset.begin from C++. + return _chain.from_iterable(_starmap(_repeat, self.items())) + + # Override dict methods where necessary + + @classmethod + def fromkeys(cls, iterable, v=None): + # There is no equivalent method for counters because setting v=1 + # means that no element can have a count greater than one. + raise NotImplementedError( + 'Counter.fromkeys() is undefined. Use Counter(iterable) instead.') + + def update(*args, **kwds): + '''Like dict.update() but add counts instead of replacing them. + + Source can be an iterable, a dictionary, or another Counter instance. + + >>> c = Counter('which') + >>> c.update('witch') # add elements from another iterable + >>> d = Counter('watch') + >>> c.update(d) # add elements from another counter + >>> c['h'] # four 'h' in which, witch, and watch + 4 + + ''' + # The regular dict.update() operation makes no sense here because the + # replace behavior results in the some of original untouched counts + # being mixed-in with all of the other counts for a mismash that + # doesn't have a straight-forward interpretation in most counting + # contexts. Instead, we implement straight-addition. Both the inputs + # and outputs are allowed to contain zero and negative counts. + + if not args: + raise TypeError("descriptor 'update' of 'Counter' object " + "needs an argument") + self, *args = args + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + iterable = args[0] if args else None + if iterable is not None: + if isinstance(iterable, _collections_abc.Mapping): + if self: + self_get = self.get + for elem, count in iterable.items(): + self[elem] = count + self_get(elem, 0) + else: + super(Counter, self).update(iterable) # fast path when counter is empty + else: + _count_elements(self, iterable) + if kwds: + self.update(kwds) + + def subtract(*args, **kwds): + '''Like dict.update() but subtracts counts instead of replacing them. + Counts can be reduced below zero. Both the inputs and outputs are + allowed to contain zero and negative counts. + + Source can be an iterable, a dictionary, or another Counter instance. + + >>> c = Counter('which') + >>> c.subtract('witch') # subtract elements from another iterable + >>> c.subtract(Counter('watch')) # subtract elements from another counter + >>> c['h'] # 2 in which, minus 1 in witch, minus 1 in watch + 0 + >>> c['w'] # 1 in which, minus 1 in witch, minus 1 in watch + -1 + + ''' + if not args: + raise TypeError("descriptor 'subtract' of 'Counter' object " + "needs an argument") + self, *args = args + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + iterable = args[0] if args else None + if iterable is not None: + self_get = self.get + if isinstance(iterable, _collections_abc.Mapping): + for elem, count in iterable.items(): + self[elem] = self_get(elem, 0) - count + else: + for elem in iterable: + self[elem] = self_get(elem, 0) - 1 + if kwds: + self.subtract(kwds) + + def copy(self): + 'Return a shallow copy.' + return self.__class__(self) + + def __reduce__(self): + return self.__class__, (dict(self),) + + def __delitem__(self, elem): + 'Like dict.__delitem__() but does not raise KeyError for missing values.' + if elem in self: + super().__delitem__(elem) + + def __repr__(self): + if not self: + return '%s()' % self.__class__.__name__ + try: + items = ', '.join(map('%r: %r'.__mod__, self.most_common())) + return '%s({%s})' % (self.__class__.__name__, items) + except TypeError: + # handle case where values are not orderable + return '{0}({1!r})'.format(self.__class__.__name__, dict(self)) + + # Multiset-style mathematical operations discussed in: + # Knuth TAOCP Volume II section 4.6.3 exercise 19 + # and at http://en.wikipedia.org/wiki/Multiset + # + # Outputs guaranteed to only include positive counts. + # + # To strip negative and zero counts, add-in an empty counter: + # c += Counter() + + def __add__(self, other): + '''Add counts from two counters. + + >>> Counter('abbb') + Counter('bcc') + Counter({'b': 4, 'c': 2, 'a': 1}) + + ''' + if not isinstance(other, Counter): + return NotImplemented + result = Counter() + for elem, count in self.items(): + newcount = count + other[elem] + if newcount > 0: + result[elem] = newcount + for elem, count in other.items(): + if elem not in self and count > 0: + result[elem] = count + return result + + def __sub__(self, other): + ''' Subtract count, but keep only results with positive counts. + + >>> Counter('abbbc') - Counter('bccd') + Counter({'b': 2, 'a': 1}) + + ''' + if not isinstance(other, Counter): + return NotImplemented + result = Counter() + for elem, count in self.items(): + newcount = count - other[elem] + if newcount > 0: + result[elem] = newcount + for elem, count in other.items(): + if elem not in self and count < 0: + result[elem] = 0 - count + return result + + def __or__(self, other): + '''Union is the maximum of value in either of the input counters. + + >>> Counter('abbb') | Counter('bcc') + Counter({'b': 3, 'c': 2, 'a': 1}) + + ''' + if not isinstance(other, Counter): + return NotImplemented + result = Counter() + for elem, count in self.items(): + other_count = other[elem] + newcount = other_count if count < other_count else count + if newcount > 0: + result[elem] = newcount + for elem, count in other.items(): + if elem not in self and count > 0: + result[elem] = count + return result + + def __and__(self, other): + ''' Intersection is the minimum of corresponding counts. + + >>> Counter('abbb') & Counter('bcc') + Counter({'b': 1}) + + ''' + if not isinstance(other, Counter): + return NotImplemented + result = Counter() + for elem, count in self.items(): + other_count = other[elem] + newcount = count if count < other_count else other_count + if newcount > 0: + result[elem] = newcount + return result + + def __pos__(self): + 'Adds an empty counter, effectively stripping negative and zero counts' + result = Counter() + for elem, count in self.items(): + if count > 0: + result[elem] = count + return result + + def __neg__(self): + '''Subtracts from an empty counter. Strips positive and zero counts, + and flips the sign on negative counts. + + ''' + result = Counter() + for elem, count in self.items(): + if count < 0: + result[elem] = 0 - count + return result + + def _keep_positive(self): + '''Internal method to strip elements with a negative or zero count''' + nonpositive = [elem for elem, count in self.items() if not count > 0] + for elem in nonpositive: + del self[elem] + return self + + def __iadd__(self, other): + '''Inplace add from another counter, keeping only positive counts. + + >>> c = Counter('abbb') + >>> c += Counter('bcc') + >>> c + Counter({'b': 4, 'c': 2, 'a': 1}) + + ''' + for elem, count in other.items(): + self[elem] += count + return self._keep_positive() + + def __isub__(self, other): + '''Inplace subtract counter, but keep only results with positive counts. + + >>> c = Counter('abbbc') + >>> c -= Counter('bccd') + >>> c + Counter({'b': 2, 'a': 1}) + + ''' + for elem, count in other.items(): + self[elem] -= count + return self._keep_positive() + + def __ior__(self, other): + '''Inplace union is the maximum of value from either counter. + + >>> c = Counter('abbb') + >>> c |= Counter('bcc') + >>> c + Counter({'b': 3, 'c': 2, 'a': 1}) + + ''' + for elem, other_count in other.items(): + count = self[elem] + if other_count > count: + self[elem] = other_count + return self._keep_positive() + + def __iand__(self, other): + '''Inplace intersection is the minimum of corresponding counts. + + >>> c = Counter('abbb') + >>> c &= Counter('bcc') + >>> c + Counter({'b': 1}) + + ''' + for elem, count in self.items(): + other_count = other[elem] + if other_count < count: + self[elem] = other_count + return self._keep_positive() + + +######################################################################## +### ChainMap +######################################################################## + +class ChainMap(_collections_abc.MutableMapping): + ''' A ChainMap groups multiple dicts (or other mappings) together + to create a single, updateable view. + + The underlying mappings are stored in a list. That list is public and can + be accessed or updated using the *maps* attribute. There is no other + state. + + Lookups search the underlying mappings successively until a key is found. + In contrast, writes, updates, and deletions only operate on the first + mapping. + + ''' + + def __init__(self, *maps): + '''Initialize a ChainMap by setting *maps* to the given mappings. + If no mappings are provided, a single empty dictionary is used. + + ''' + self.maps = list(maps) or [{}] # always at least one map + + def __missing__(self, key): + raise KeyError(key) + + def __getitem__(self, key): + for mapping in self.maps: + try: + return mapping[key] # can't use 'key in mapping' with defaultdict + except KeyError: + pass + return self.__missing__(key) # support subclasses that define __missing__ + + def get(self, key, default=None): + return self[key] if key in self else default + + def __len__(self): + return len(set().union(*self.maps)) # reuses stored hash values if possible + + def __iter__(self): + d = {} + for mapping in reversed(self.maps): + d.update(mapping) # reuses stored hash values if possible + return iter(d) + + def __contains__(self, key): + return any(key in m for m in self.maps) + + def __bool__(self): + return any(self.maps) + + @_recursive_repr() + def __repr__(self): + return '{0.__class__.__name__}({1})'.format( + self, ', '.join(map(repr, self.maps))) + + @classmethod + def fromkeys(cls, iterable, *args): + 'Create a ChainMap with a single dict created from the iterable.' + return cls(dict.fromkeys(iterable, *args)) + + def copy(self): + 'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]' + return self.__class__(self.maps[0].copy(), *self.maps[1:]) + + __copy__ = copy + + def new_child(self, m=None): # like Django's Context.push() + '''New ChainMap with a new map followed by all previous maps. + If no map is provided, an empty dict is used. + ''' + if m is None: + m = {} + return self.__class__(m, *self.maps) + + @property + def parents(self): # like Django's Context.pop() + 'New ChainMap from maps[1:].' + return self.__class__(*self.maps[1:]) + + def __setitem__(self, key, value): + self.maps[0][key] = value + + def __delitem__(self, key): + try: + del self.maps[0][key] + except KeyError: + raise KeyError('Key not found in the first mapping: {!r}'.format(key)) + + def popitem(self): + 'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.' + try: + return self.maps[0].popitem() + except KeyError: + raise KeyError('No keys found in the first mapping.') + + def pop(self, key, *args): + 'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].' + try: + return self.maps[0].pop(key, *args) + except KeyError: + raise KeyError('Key not found in the first mapping: {!r}'.format(key)) + + def clear(self): + 'Clear maps[0], leaving maps[1:] intact.' + self.maps[0].clear() + + +################################################################################ +### UserDict +################################################################################ + +class UserDict(_collections_abc.MutableMapping): + + # Start by filling-out the abstract methods + def __init__(*args, **kwargs): + if not args: + raise TypeError("descriptor '__init__' of 'UserDict' object " + "needs an argument") + self, *args = args + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + if args: + dict = args[0] + elif 'dict' in kwargs: + dict = kwargs.pop('dict') + import warnings + warnings.warn("Passing 'dict' as keyword argument is deprecated", + DeprecationWarning, stacklevel=2) + else: + dict = None + self.data = {} + if dict is not None: + self.update(dict) + if len(kwargs): + self.update(kwargs) + def __len__(self): return len(self.data) + def __getitem__(self, key): + if key in self.data: + return self.data[key] + if hasattr(self.__class__, "__missing__"): + return self.__class__.__missing__(self, key) + raise KeyError(key) + def __setitem__(self, key, item): self.data[key] = item + def __delitem__(self, key): del self.data[key] + def __iter__(self): + return iter(self.data) + + # Modify __contains__ to work correctly when __missing__ is present + def __contains__(self, key): + return key in self.data + + # Now, add the methods in dicts but not in MutableMapping + def __repr__(self): return repr(self.data) + def __copy__(self): + inst = self.__class__.__new__(self.__class__) + inst.__dict__.update(self.__dict__) + # Create a copy and avoid triggering descriptors + inst.__dict__["data"] = self.__dict__["data"].copy() + return inst + + def copy(self): + if self.__class__ is UserDict: + return UserDict(self.data.copy()) + import copy + data = self.data + try: + self.data = {} + c = copy.copy(self) + finally: + self.data = data + c.update(self) + return c + + @classmethod + def fromkeys(cls, iterable, value=None): + d = cls() + for key in iterable: + d[key] = value + return d + + + +################################################################################ +### UserList +################################################################################ + +class UserList(_collections_abc.MutableSequence): + """A more or less complete user-defined wrapper around list objects.""" + def __init__(self, initlist=None): + self.data = [] + if initlist is not None: + # XXX should this accept an arbitrary sequence? + if type(initlist) == type(self.data): + self.data[:] = initlist + elif isinstance(initlist, UserList): + self.data[:] = initlist.data[:] + else: + self.data = list(initlist) + def __repr__(self): return repr(self.data) + def __lt__(self, other): return self.data < self.__cast(other) + def __le__(self, other): return self.data <= self.__cast(other) + def __eq__(self, other): return self.data == self.__cast(other) + def __gt__(self, other): return self.data > self.__cast(other) + def __ge__(self, other): return self.data >= self.__cast(other) + def __cast(self, other): + return other.data if isinstance(other, UserList) else other + def __contains__(self, item): return item in self.data + def __len__(self): return len(self.data) + def __getitem__(self, i): + if isinstance(i, slice): + return self.__class__(self.data[i]) + else: + return self.data[i] + def __setitem__(self, i, item): self.data[i] = item + def __delitem__(self, i): del self.data[i] + def __add__(self, other): + if isinstance(other, UserList): + return self.__class__(self.data + other.data) + elif isinstance(other, type(self.data)): + return self.__class__(self.data + other) + return self.__class__(self.data + list(other)) + def __radd__(self, other): + if isinstance(other, UserList): + return self.__class__(other.data + self.data) + elif isinstance(other, type(self.data)): + return self.__class__(other + self.data) + return self.__class__(list(other) + self.data) + def __iadd__(self, other): + if isinstance(other, UserList): + self.data += other.data + elif isinstance(other, type(self.data)): + self.data += other + else: + self.data += list(other) + return self + def __mul__(self, n): + return self.__class__(self.data*n) + __rmul__ = __mul__ + def __imul__(self, n): + self.data *= n + return self + def __copy__(self): + inst = self.__class__.__new__(self.__class__) + inst.__dict__.update(self.__dict__) + # Create a copy and avoid triggering descriptors + inst.__dict__["data"] = self.__dict__["data"][:] + return inst + def append(self, item): self.data.append(item) + def insert(self, i, item): self.data.insert(i, item) + def pop(self, i=-1): return self.data.pop(i) + def remove(self, item): self.data.remove(item) + def clear(self): self.data.clear() + def copy(self): return self.__class__(self) + def count(self, item): return self.data.count(item) + def index(self, item, *args): return self.data.index(item, *args) + def reverse(self): self.data.reverse() + def sort(self, *args, **kwds): self.data.sort(*args, **kwds) + def extend(self, other): + if isinstance(other, UserList): + self.data.extend(other.data) + else: + self.data.extend(other) + + + +################################################################################ +### UserString +################################################################################ + +class UserString(_collections_abc.Sequence): + def __init__(self, seq): + if isinstance(seq, str): + self.data = seq + elif isinstance(seq, UserString): + self.data = seq.data[:] + else: + self.data = str(seq) + def __str__(self): return str(self.data) + def __repr__(self): return repr(self.data) + def __int__(self): return int(self.data) + def __float__(self): return float(self.data) + def __complex__(self): return complex(self.data) + def __hash__(self): return hash(self.data) + def __getnewargs__(self): + return (self.data[:],) + + def __eq__(self, string): + if isinstance(string, UserString): + return self.data == string.data + return self.data == string + def __lt__(self, string): + if isinstance(string, UserString): + return self.data < string.data + return self.data < string + def __le__(self, string): + if isinstance(string, UserString): + return self.data <= string.data + return self.data <= string + def __gt__(self, string): + if isinstance(string, UserString): + return self.data > string.data + return self.data > string + def __ge__(self, string): + if isinstance(string, UserString): + return self.data >= string.data + return self.data >= string + + def __contains__(self, char): + if isinstance(char, UserString): + char = char.data + return char in self.data + + def __len__(self): return len(self.data) + def __getitem__(self, index): return self.__class__(self.data[index]) + def __add__(self, other): + if isinstance(other, UserString): + return self.__class__(self.data + other.data) + elif isinstance(other, str): + return self.__class__(self.data + other) + return self.__class__(self.data + str(other)) + def __radd__(self, other): + if isinstance(other, str): + return self.__class__(other + self.data) + return self.__class__(str(other) + self.data) + def __mul__(self, n): + return self.__class__(self.data*n) + __rmul__ = __mul__ + def __mod__(self, args): + return self.__class__(self.data % args) + def __rmod__(self, format): + return self.__class__(format % args) + + # the following methods are defined in alphabetical order: + def capitalize(self): return self.__class__(self.data.capitalize()) + def casefold(self): + return self.__class__(self.data.casefold()) + def center(self, width, *args): + return self.__class__(self.data.center(width, *args)) + def count(self, sub, start=0, end=_sys.maxsize): + if isinstance(sub, UserString): + sub = sub.data + return self.data.count(sub, start, end) + def encode(self, encoding=None, errors=None): # XXX improve this? + if encoding: + if errors: + return self.__class__(self.data.encode(encoding, errors)) + return self.__class__(self.data.encode(encoding)) + return self.__class__(self.data.encode()) + def endswith(self, suffix, start=0, end=_sys.maxsize): + return self.data.endswith(suffix, start, end) + def expandtabs(self, tabsize=8): + return self.__class__(self.data.expandtabs(tabsize)) + def find(self, sub, start=0, end=_sys.maxsize): + if isinstance(sub, UserString): + sub = sub.data + return self.data.find(sub, start, end) + def format(self, *args, **kwds): + return self.data.format(*args, **kwds) + def format_map(self, mapping): + return self.data.format_map(mapping) + def index(self, sub, start=0, end=_sys.maxsize): + return self.data.index(sub, start, end) + def isalpha(self): return self.data.isalpha() + def isalnum(self): return self.data.isalnum() + def isascii(self): return self.data.isascii() + def isdecimal(self): return self.data.isdecimal() + def isdigit(self): return self.data.isdigit() + def isidentifier(self): return self.data.isidentifier() + def islower(self): return self.data.islower() + def isnumeric(self): return self.data.isnumeric() + def isprintable(self): return self.data.isprintable() + def isspace(self): return self.data.isspace() + def istitle(self): return self.data.istitle() + def isupper(self): return self.data.isupper() + def join(self, seq): return self.data.join(seq) + def ljust(self, width, *args): + return self.__class__(self.data.ljust(width, *args)) + def lower(self): return self.__class__(self.data.lower()) + def lstrip(self, chars=None): return self.__class__(self.data.lstrip(chars)) + maketrans = str.maketrans + def partition(self, sep): + return self.data.partition(sep) + def replace(self, old, new, maxsplit=-1): + if isinstance(old, UserString): + old = old.data + if isinstance(new, UserString): + new = new.data + return self.__class__(self.data.replace(old, new, maxsplit)) + def rfind(self, sub, start=0, end=_sys.maxsize): + if isinstance(sub, UserString): + sub = sub.data + return self.data.rfind(sub, start, end) + def rindex(self, sub, start=0, end=_sys.maxsize): + return self.data.rindex(sub, start, end) + def rjust(self, width, *args): + return self.__class__(self.data.rjust(width, *args)) + def rpartition(self, sep): + return self.data.rpartition(sep) + def rstrip(self, chars=None): + return self.__class__(self.data.rstrip(chars)) + def split(self, sep=None, maxsplit=-1): + return self.data.split(sep, maxsplit) + def rsplit(self, sep=None, maxsplit=-1): + return self.data.rsplit(sep, maxsplit) + def splitlines(self, keepends=False): return self.data.splitlines(keepends) + def startswith(self, prefix, start=0, end=_sys.maxsize): + return self.data.startswith(prefix, start, end) + def strip(self, chars=None): return self.__class__(self.data.strip(chars)) + def swapcase(self): return self.__class__(self.data.swapcase()) + def title(self): return self.__class__(self.data.title()) + def translate(self, *args): + return self.__class__(self.data.translate(*args)) + def upper(self): return self.__class__(self.data.upper()) + def zfill(self, width): return self.__class__(self.data.zfill(width)) diff --git a/my_env/Lib/collections/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/collections/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..c368b5fdc Binary files /dev/null and b/my_env/Lib/collections/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/collections/__pycache__/abc.cpython-37.pyc b/my_env/Lib/collections/__pycache__/abc.cpython-37.pyc new file mode 100644 index 000000000..c3bf50ef6 Binary files /dev/null and b/my_env/Lib/collections/__pycache__/abc.cpython-37.pyc differ diff --git a/my_env/Lib/collections/abc.py b/my_env/Lib/collections/abc.py new file mode 100644 index 000000000..891600d16 --- /dev/null +++ b/my_env/Lib/collections/abc.py @@ -0,0 +1,2 @@ +from _collections_abc import * +from _collections_abc import __all__ diff --git a/my_env/Lib/copy.py b/my_env/Lib/copy.py new file mode 100644 index 000000000..f86040a33 --- /dev/null +++ b/my_env/Lib/copy.py @@ -0,0 +1,313 @@ +"""Generic (shallow and deep) copying operations. + +Interface summary: + + import copy + + x = copy.copy(y) # make a shallow copy of y + x = copy.deepcopy(y) # make a deep copy of y + +For module specific errors, copy.Error is raised. + +The difference between shallow and deep copying is only relevant for +compound objects (objects that contain other objects, like lists or +class instances). + +- A shallow copy constructs a new compound object and then (to the + extent possible) inserts *the same objects* into it that the + original contains. + +- A deep copy constructs a new compound object and then, recursively, + inserts *copies* into it of the objects found in the original. + +Two problems often exist with deep copy operations that don't exist +with shallow copy operations: + + a) recursive objects (compound objects that, directly or indirectly, + contain a reference to themselves) may cause a recursive loop + + b) because deep copy copies *everything* it may copy too much, e.g. + administrative data structures that should be shared even between + copies + +Python's deep copy operation avoids these problems by: + + a) keeping a table of objects already copied during the current + copying pass + + b) letting user-defined classes override the copying operation or the + set of components copied + +This version does not copy types like module, class, function, method, +nor stack trace, stack frame, nor file, socket, window, nor array, nor +any similar types. + +Classes can use the same interfaces to control copying that they use +to control pickling: they can define methods called __getinitargs__(), +__getstate__() and __setstate__(). See the documentation for module +"pickle" for information on these methods. +""" + +import types +import weakref +from copyreg import dispatch_table + +class Error(Exception): + pass +error = Error # backward compatibility + +try: + from org.python.core import PyStringMap +except ImportError: + PyStringMap = None + +__all__ = ["Error", "copy", "deepcopy"] + +def copy(x): + """Shallow copy operation on arbitrary Python objects. + + See the module's __doc__ string for more info. + """ + + cls = type(x) + + copier = _copy_dispatch.get(cls) + if copier: + return copier(x) + + try: + issc = issubclass(cls, type) + except TypeError: # cls is not a class + issc = False + if issc: + # treat it as a regular class: + return _copy_immutable(x) + + copier = getattr(cls, "__copy__", None) + if copier: + return copier(x) + + reductor = dispatch_table.get(cls) + if reductor: + rv = reductor(x) + else: + reductor = getattr(x, "__reduce_ex__", None) + if reductor: + rv = reductor(4) + else: + reductor = getattr(x, "__reduce__", None) + if reductor: + rv = reductor() + else: + raise Error("un(shallow)copyable object of type %s" % cls) + + if isinstance(rv, str): + return x + return _reconstruct(x, None, *rv) + + +_copy_dispatch = d = {} + +def _copy_immutable(x): + return x +for t in (type(None), int, float, bool, complex, str, tuple, + bytes, frozenset, type, range, slice, + types.BuiltinFunctionType, type(Ellipsis), type(NotImplemented), + types.FunctionType, weakref.ref): + d[t] = _copy_immutable +t = getattr(types, "CodeType", None) +if t is not None: + d[t] = _copy_immutable + +d[list] = list.copy +d[dict] = dict.copy +d[set] = set.copy +d[bytearray] = bytearray.copy + +if PyStringMap is not None: + d[PyStringMap] = PyStringMap.copy + +del d, t + +def deepcopy(x, memo=None, _nil=[]): + """Deep copy operation on arbitrary Python objects. + + See the module's __doc__ string for more info. + """ + + if memo is None: + memo = {} + + d = id(x) + y = memo.get(d, _nil) + if y is not _nil: + return y + + cls = type(x) + + copier = _deepcopy_dispatch.get(cls) + if copier: + y = copier(x, memo) + else: + try: + issc = issubclass(cls, type) + except TypeError: # cls is not a class (old Boost; see SF #502085) + issc = 0 + if issc: + y = _deepcopy_atomic(x, memo) + else: + copier = getattr(x, "__deepcopy__", None) + if copier: + y = copier(memo) + else: + reductor = dispatch_table.get(cls) + if reductor: + rv = reductor(x) + else: + reductor = getattr(x, "__reduce_ex__", None) + if reductor: + rv = reductor(4) + else: + reductor = getattr(x, "__reduce__", None) + if reductor: + rv = reductor() + else: + raise Error( + "un(deep)copyable object of type %s" % cls) + if isinstance(rv, str): + y = x + else: + y = _reconstruct(x, memo, *rv) + + # If is its own copy, don't memoize. + if y is not x: + memo[d] = y + _keep_alive(x, memo) # Make sure x lives at least as long as d + return y + +_deepcopy_dispatch = d = {} + +def _deepcopy_atomic(x, memo): + return x +d[type(None)] = _deepcopy_atomic +d[type(Ellipsis)] = _deepcopy_atomic +d[type(NotImplemented)] = _deepcopy_atomic +d[int] = _deepcopy_atomic +d[float] = _deepcopy_atomic +d[bool] = _deepcopy_atomic +d[complex] = _deepcopy_atomic +d[bytes] = _deepcopy_atomic +d[str] = _deepcopy_atomic +try: + d[types.CodeType] = _deepcopy_atomic +except AttributeError: + pass +d[type] = _deepcopy_atomic +d[types.BuiltinFunctionType] = _deepcopy_atomic +d[types.FunctionType] = _deepcopy_atomic +d[weakref.ref] = _deepcopy_atomic + +def _deepcopy_list(x, memo, deepcopy=deepcopy): + y = [] + memo[id(x)] = y + append = y.append + for a in x: + append(deepcopy(a, memo)) + return y +d[list] = _deepcopy_list + +def _deepcopy_tuple(x, memo, deepcopy=deepcopy): + y = [deepcopy(a, memo) for a in x] + # We're not going to put the tuple in the memo, but it's still important we + # check for it, in case the tuple contains recursive mutable structures. + try: + return memo[id(x)] + except KeyError: + pass + for k, j in zip(x, y): + if k is not j: + y = tuple(y) + break + else: + y = x + return y +d[tuple] = _deepcopy_tuple + +def _deepcopy_dict(x, memo, deepcopy=deepcopy): + y = {} + memo[id(x)] = y + for key, value in x.items(): + y[deepcopy(key, memo)] = deepcopy(value, memo) + return y +d[dict] = _deepcopy_dict +if PyStringMap is not None: + d[PyStringMap] = _deepcopy_dict + +def _deepcopy_method(x, memo): # Copy instance methods + return type(x)(x.__func__, deepcopy(x.__self__, memo)) +d[types.MethodType] = _deepcopy_method + +del d + +def _keep_alive(x, memo): + """Keeps a reference to the object x in the memo. + + Because we remember objects by their id, we have + to assure that possibly temporary objects are kept + alive by referencing them. + We store a reference at the id of the memo, which should + normally not be used unless someone tries to deepcopy + the memo itself... + """ + try: + memo[id(memo)].append(x) + except KeyError: + # aha, this is the first one :-) + memo[id(memo)]=[x] + +def _reconstruct(x, memo, func, args, + state=None, listiter=None, dictiter=None, + deepcopy=deepcopy): + deep = memo is not None + if deep and args: + args = (deepcopy(arg, memo) for arg in args) + y = func(*args) + if deep: + memo[id(x)] = y + + if state is not None: + if deep: + state = deepcopy(state, memo) + if hasattr(y, '__setstate__'): + y.__setstate__(state) + else: + if isinstance(state, tuple) and len(state) == 2: + state, slotstate = state + else: + slotstate = None + if state is not None: + y.__dict__.update(state) + if slotstate is not None: + for key, value in slotstate.items(): + setattr(y, key, value) + + if listiter is not None: + if deep: + for item in listiter: + item = deepcopy(item, memo) + y.append(item) + else: + for item in listiter: + y.append(item) + if dictiter is not None: + if deep: + for key, value in dictiter: + key = deepcopy(key, memo) + value = deepcopy(value, memo) + y[key] = value + else: + for key, value in dictiter: + y[key] = value + return y + +del types, weakref, PyStringMap diff --git a/my_env/Lib/copyreg.py b/my_env/Lib/copyreg.py new file mode 100644 index 000000000..bbe1af4e2 --- /dev/null +++ b/my_env/Lib/copyreg.py @@ -0,0 +1,206 @@ +"""Helper to provide extensibility for pickle. + +This is only useful to add pickle support for extension types defined in +C, not for instances of user-defined classes. +""" + +__all__ = ["pickle", "constructor", + "add_extension", "remove_extension", "clear_extension_cache"] + +dispatch_table = {} + +def pickle(ob_type, pickle_function, constructor_ob=None): + if not callable(pickle_function): + raise TypeError("reduction functions must be callable") + dispatch_table[ob_type] = pickle_function + + # The constructor_ob function is a vestige of safe for unpickling. + # There is no reason for the caller to pass it anymore. + if constructor_ob is not None: + constructor(constructor_ob) + +def constructor(object): + if not callable(object): + raise TypeError("constructors must be callable") + +# Example: provide pickling support for complex numbers. + +try: + complex +except NameError: + pass +else: + + def pickle_complex(c): + return complex, (c.real, c.imag) + + pickle(complex, pickle_complex, complex) + +# Support for pickling new-style objects + +def _reconstructor(cls, base, state): + if base is object: + obj = object.__new__(cls) + else: + obj = base.__new__(cls, state) + if base.__init__ != object.__init__: + base.__init__(obj, state) + return obj + +_HEAPTYPE = 1<<9 + +# Python code for object.__reduce_ex__ for protocols 0 and 1 + +def _reduce_ex(self, proto): + assert proto < 2 + for base in self.__class__.__mro__: + if hasattr(base, '__flags__') and not base.__flags__ & _HEAPTYPE: + break + else: + base = object # not really reachable + if base is object: + state = None + else: + if base is self.__class__: + raise TypeError("can't pickle %s objects" % base.__name__) + state = base(self) + args = (self.__class__, base, state) + try: + getstate = self.__getstate__ + except AttributeError: + if getattr(self, "__slots__", None): + raise TypeError("a class that defines __slots__ without " + "defining __getstate__ cannot be pickled") from None + try: + dict = self.__dict__ + except AttributeError: + dict = None + else: + dict = getstate() + if dict: + return _reconstructor, args, dict + else: + return _reconstructor, args + +# Helper for __reduce_ex__ protocol 2 + +def __newobj__(cls, *args): + return cls.__new__(cls, *args) + +def __newobj_ex__(cls, args, kwargs): + """Used by pickle protocol 4, instead of __newobj__ to allow classes with + keyword-only arguments to be pickled correctly. + """ + return cls.__new__(cls, *args, **kwargs) + +def _slotnames(cls): + """Return a list of slot names for a given class. + + This needs to find slots defined by the class and its bases, so we + can't simply return the __slots__ attribute. We must walk down + the Method Resolution Order and concatenate the __slots__ of each + class found there. (This assumes classes don't modify their + __slots__ attribute to misrepresent their slots after the class is + defined.) + """ + + # Get the value from a cache in the class if possible + names = cls.__dict__.get("__slotnames__") + if names is not None: + return names + + # Not cached -- calculate the value + names = [] + if not hasattr(cls, "__slots__"): + # This class has no slots + pass + else: + # Slots found -- gather slot names from all base classes + for c in cls.__mro__: + if "__slots__" in c.__dict__: + slots = c.__dict__['__slots__'] + # if class has a single slot, it can be given as a string + if isinstance(slots, str): + slots = (slots,) + for name in slots: + # special descriptors + if name in ("__dict__", "__weakref__"): + continue + # mangled names + elif name.startswith('__') and not name.endswith('__'): + stripped = c.__name__.lstrip('_') + if stripped: + names.append('_%s%s' % (stripped, name)) + else: + names.append(name) + else: + names.append(name) + + # Cache the outcome in the class if at all possible + try: + cls.__slotnames__ = names + except: + pass # But don't die if we can't + + return names + +# A registry of extension codes. This is an ad-hoc compression +# mechanism. Whenever a global reference to , is about +# to be pickled, the (, ) tuple is looked up here to see +# if it is a registered extension code for it. Extension codes are +# universal, so that the meaning of a pickle does not depend on +# context. (There are also some codes reserved for local use that +# don't have this restriction.) Codes are positive ints; 0 is +# reserved. + +_extension_registry = {} # key -> code +_inverted_registry = {} # code -> key +_extension_cache = {} # code -> object +# Don't ever rebind those names: pickling grabs a reference to them when +# it's initialized, and won't see a rebinding. + +def add_extension(module, name, code): + """Register an extension code.""" + code = int(code) + if not 1 <= code <= 0x7fffffff: + raise ValueError("code out of range") + key = (module, name) + if (_extension_registry.get(key) == code and + _inverted_registry.get(code) == key): + return # Redundant registrations are benign + if key in _extension_registry: + raise ValueError("key %s is already registered with code %s" % + (key, _extension_registry[key])) + if code in _inverted_registry: + raise ValueError("code %s is already in use for key %s" % + (code, _inverted_registry[code])) + _extension_registry[key] = code + _inverted_registry[code] = key + +def remove_extension(module, name, code): + """Unregister an extension code. For testing only.""" + key = (module, name) + if (_extension_registry.get(key) != code or + _inverted_registry.get(code) != key): + raise ValueError("key %s is not registered with code %s" % + (key, code)) + del _extension_registry[key] + del _inverted_registry[code] + if code in _extension_cache: + del _extension_cache[code] + +def clear_extension_cache(): + _extension_cache.clear() + +# Standard extension code assignments + +# Reserved ranges + +# First Last Count Purpose +# 1 127 127 Reserved for Python standard library +# 128 191 64 Reserved for Zope +# 192 239 48 Reserved for 3rd parties +# 240 255 16 Reserved for private use (will never be assigned) +# 256 Inf Inf Reserved for future assignment + +# Extension codes are assigned by the Python Software Foundation. diff --git a/my_env/Lib/distutils/__init__.py b/my_env/Lib/distutils/__init__.py new file mode 100644 index 000000000..b9b0f24f7 --- /dev/null +++ b/my_env/Lib/distutils/__init__.py @@ -0,0 +1,134 @@ +import os +import sys +import warnings + +# opcode is not a virtualenv module, so we can use it to find the stdlib +# Important! To work on pypy, this must be a module that resides in the +# lib-python/modified-x.y.z directory +import opcode + +dirname = os.path.dirname + +distutils_path = os.path.join(os.path.dirname(opcode.__file__), "distutils") +if os.path.normpath(distutils_path) == os.path.dirname(os.path.normpath(__file__)): + warnings.warn("The virtualenv distutils package at %s appears to be in the same location as the system distutils?") +else: + __path__.insert(0, distutils_path) # noqa: F821 + if sys.version_info < (3, 4): + import imp + + real_distutils = imp.load_module("_virtualenv_distutils", None, distutils_path, ("", "", imp.PKG_DIRECTORY)) + else: + import importlib.machinery + + distutils_path = os.path.join(distutils_path, "__init__.py") + loader = importlib.machinery.SourceFileLoader("_virtualenv_distutils", distutils_path) + if sys.version_info < (3, 5): + import types + + real_distutils = types.ModuleType(loader.name) + else: + import importlib.util + + spec = importlib.util.spec_from_loader(loader.name, loader) + real_distutils = importlib.util.module_from_spec(spec) + loader.exec_module(real_distutils) + + # Copy the relevant attributes + try: + __revision__ = real_distutils.__revision__ + except AttributeError: + pass + __version__ = real_distutils.__version__ + +from distutils import dist, sysconfig # isort:skip + +try: + basestring +except NameError: + basestring = str + +# patch build_ext (distutils doesn't know how to get the libs directory +# path on windows - it hardcodes the paths around the patched sys.prefix) + +if sys.platform == "win32": + from distutils.command.build_ext import build_ext as old_build_ext + + class build_ext(old_build_ext): + def finalize_options(self): + if self.library_dirs is None: + self.library_dirs = [] + elif isinstance(self.library_dirs, basestring): + self.library_dirs = self.library_dirs.split(os.pathsep) + + self.library_dirs.insert(0, os.path.join(sys.real_prefix, "Libs")) + old_build_ext.finalize_options(self) + + from distutils.command import build_ext as build_ext_module + + build_ext_module.build_ext = build_ext + +# distutils.dist patches: + +old_find_config_files = dist.Distribution.find_config_files + + +def find_config_files(self): + found = old_find_config_files(self) + if os.name == "posix": + user_filename = ".pydistutils.cfg" + else: + user_filename = "pydistutils.cfg" + user_filename = os.path.join(sys.prefix, user_filename) + if os.path.isfile(user_filename): + for item in list(found): + if item.endswith("pydistutils.cfg"): + found.remove(item) + found.append(user_filename) + return found + + +dist.Distribution.find_config_files = find_config_files + +# distutils.sysconfig patches: + +old_get_python_inc = sysconfig.get_python_inc + + +def sysconfig_get_python_inc(plat_specific=0, prefix=None): + if prefix is None: + prefix = sys.real_prefix + return old_get_python_inc(plat_specific, prefix) + + +sysconfig_get_python_inc.__doc__ = old_get_python_inc.__doc__ +sysconfig.get_python_inc = sysconfig_get_python_inc + +old_get_python_lib = sysconfig.get_python_lib + + +def sysconfig_get_python_lib(plat_specific=0, standard_lib=0, prefix=None): + if standard_lib and prefix is None: + prefix = sys.real_prefix + return old_get_python_lib(plat_specific, standard_lib, prefix) + + +sysconfig_get_python_lib.__doc__ = old_get_python_lib.__doc__ +sysconfig.get_python_lib = sysconfig_get_python_lib + +old_get_config_vars = sysconfig.get_config_vars + + +def sysconfig_get_config_vars(*args): + real_vars = old_get_config_vars(*args) + if sys.platform == "win32": + lib_dir = os.path.join(sys.real_prefix, "libs") + if isinstance(real_vars, dict) and "LIBDIR" not in real_vars: + real_vars["LIBDIR"] = lib_dir # asked for all + elif isinstance(real_vars, list) and "LIBDIR" in args: + real_vars = real_vars + [lib_dir] # asked for list + return real_vars + + +sysconfig_get_config_vars.__doc__ = old_get_config_vars.__doc__ +sysconfig.get_config_vars = sysconfig_get_config_vars diff --git a/my_env/Lib/distutils/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/distutils/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..2da9a4d0f Binary files /dev/null and b/my_env/Lib/distutils/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/distutils/distutils.cfg b/my_env/Lib/distutils/distutils.cfg new file mode 100644 index 000000000..1af230ec9 --- /dev/null +++ b/my_env/Lib/distutils/distutils.cfg @@ -0,0 +1,6 @@ +# This is a config file local to this virtualenv installation +# You may include options that will be used by all distutils commands, +# and by easy_install. For instance: +# +# [easy_install] +# find_links = http://mylocalsite diff --git a/my_env/Lib/encodings/__init__.py b/my_env/Lib/encodings/__init__.py new file mode 100644 index 000000000..025b7a8da --- /dev/null +++ b/my_env/Lib/encodings/__init__.py @@ -0,0 +1,170 @@ +""" Standard "encodings" Package + + Standard Python encoding modules are stored in this package + directory. + + Codec modules must have names corresponding to normalized encoding + names as defined in the normalize_encoding() function below, e.g. + 'utf-8' must be implemented by the module 'utf_8.py'. + + Each codec module must export the following interface: + + * getregentry() -> codecs.CodecInfo object + The getregentry() API must return a CodecInfo object with encoder, decoder, + incrementalencoder, incrementaldecoder, streamwriter and streamreader + atttributes which adhere to the Python Codec Interface Standard. + + In addition, a module may optionally also define the following + APIs which are then used by the package's codec search function: + + * getaliases() -> sequence of encoding name strings to use as aliases + + Alias names returned by getaliases() must be normalized encoding + names as defined by normalize_encoding(). + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +"""#" + +import codecs +import sys +from . import aliases + +_cache = {} +_unknown = '--unknown--' +_import_tail = ['*'] +_aliases = aliases.aliases + +class CodecRegistryError(LookupError, SystemError): + pass + +def normalize_encoding(encoding): + + """ Normalize an encoding name. + + Normalization works as follows: all non-alphanumeric + characters except the dot used for Python package names are + collapsed and replaced with a single underscore, e.g. ' -;#' + becomes '_'. Leading and trailing underscores are removed. + + Note that encoding names should be ASCII only; if they do use + non-ASCII characters, these must be Latin-1 compatible. + + """ + if isinstance(encoding, bytes): + encoding = str(encoding, "ascii") + + chars = [] + punct = False + for c in encoding: + if c.isalnum() or c == '.': + if punct and chars: + chars.append('_') + chars.append(c) + punct = False + else: + punct = True + return ''.join(chars) + +def search_function(encoding): + + # Cache lookup + entry = _cache.get(encoding, _unknown) + if entry is not _unknown: + return entry + + # Import the module: + # + # First try to find an alias for the normalized encoding + # name and lookup the module using the aliased name, then try to + # lookup the module using the standard import scheme, i.e. first + # try in the encodings package, then at top-level. + # + norm_encoding = normalize_encoding(encoding) + aliased_encoding = _aliases.get(norm_encoding) or \ + _aliases.get(norm_encoding.replace('.', '_')) + if aliased_encoding is not None: + modnames = [aliased_encoding, + norm_encoding] + else: + modnames = [norm_encoding] + for modname in modnames: + if not modname or '.' in modname: + continue + try: + # Import is absolute to prevent the possibly malicious import of a + # module with side-effects that is not in the 'encodings' package. + mod = __import__('encodings.' + modname, fromlist=_import_tail, + level=0) + except ImportError: + # ImportError may occur because 'encodings.(modname)' does not exist, + # or because it imports a name that does not exist (see mbcs and oem) + pass + else: + break + else: + mod = None + + try: + getregentry = mod.getregentry + except AttributeError: + # Not a codec module + mod = None + + if mod is None: + # Cache misses + _cache[encoding] = None + return None + + # Now ask the module for the registry entry + entry = getregentry() + if not isinstance(entry, codecs.CodecInfo): + if not 4 <= len(entry) <= 7: + raise CodecRegistryError('module "%s" (%s) failed to register' + % (mod.__name__, mod.__file__)) + if not callable(entry[0]) or not callable(entry[1]) or \ + (entry[2] is not None and not callable(entry[2])) or \ + (entry[3] is not None and not callable(entry[3])) or \ + (len(entry) > 4 and entry[4] is not None and not callable(entry[4])) or \ + (len(entry) > 5 and entry[5] is not None and not callable(entry[5])): + raise CodecRegistryError('incompatible codecs in module "%s" (%s)' + % (mod.__name__, mod.__file__)) + if len(entry)<7 or entry[6] is None: + entry += (None,)*(6-len(entry)) + (mod.__name__.split(".", 1)[1],) + entry = codecs.CodecInfo(*entry) + + # Cache the codec registry entry + _cache[encoding] = entry + + # Register its aliases (without overwriting previously registered + # aliases) + try: + codecaliases = mod.getaliases() + except AttributeError: + pass + else: + for alias in codecaliases: + if alias not in _aliases: + _aliases[alias] = modname + + # Return the registry entry + return entry + +# Register the search_function in the Python codec registry +codecs.register(search_function) + +if sys.platform == 'win32': + def _alias_mbcs(encoding): + try: + import _winapi + ansi_code_page = "cp%s" % _winapi.GetACP() + if encoding == ansi_code_page: + import encodings.mbcs + return encodings.mbcs.getregentry() + except ImportError: + # Imports may fail while we are shutting down + pass + + codecs.register(_alias_mbcs) diff --git a/my_env/Lib/encodings/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..cd9184539 Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/aliases.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/aliases.cpython-37.pyc new file mode 100644 index 000000000..9eed6a5f3 Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/aliases.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/ascii.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/ascii.cpython-37.pyc new file mode 100644 index 000000000..184c311ee Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/ascii.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/big5.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/big5.cpython-37.pyc new file mode 100644 index 000000000..3e6288b0e Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/big5.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/cp1252.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/cp1252.cpython-37.pyc new file mode 100644 index 000000000..deade5d81 Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/cp1252.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/cp437.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/cp437.cpython-37.pyc new file mode 100644 index 000000000..85b4ded00 Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/cp437.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/hex_codec.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/hex_codec.cpython-37.pyc new file mode 100644 index 000000000..b4930e559 Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/hex_codec.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/idna.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/idna.cpython-37.pyc new file mode 100644 index 000000000..a2a164de0 Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/idna.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/iso8859_5.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/iso8859_5.cpython-37.pyc new file mode 100644 index 000000000..29bd83b44 Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/iso8859_5.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/latin_1.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/latin_1.cpython-37.pyc new file mode 100644 index 000000000..fdc777092 Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/latin_1.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/mbcs.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/mbcs.cpython-37.pyc new file mode 100644 index 000000000..520c3a2a8 Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/mbcs.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/raw_unicode_escape.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/raw_unicode_escape.cpython-37.pyc new file mode 100644 index 000000000..678295338 Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/raw_unicode_escape.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/unicode_escape.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/unicode_escape.cpython-37.pyc new file mode 100644 index 000000000..758faa630 Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/unicode_escape.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/utf_16_be.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/utf_16_be.cpython-37.pyc new file mode 100644 index 000000000..ef5d61811 Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/utf_16_be.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/utf_16_le.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/utf_16_le.cpython-37.pyc new file mode 100644 index 000000000..fff4e0850 Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/utf_16_le.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/__pycache__/utf_8.cpython-37.pyc b/my_env/Lib/encodings/__pycache__/utf_8.cpython-37.pyc new file mode 100644 index 000000000..a136c5bbb Binary files /dev/null and b/my_env/Lib/encodings/__pycache__/utf_8.cpython-37.pyc differ diff --git a/my_env/Lib/encodings/aliases.py b/my_env/Lib/encodings/aliases.py new file mode 100644 index 000000000..2e63c2f94 --- /dev/null +++ b/my_env/Lib/encodings/aliases.py @@ -0,0 +1,550 @@ +""" Encoding Aliases Support + + This module is used by the encodings package search function to + map encodings names to module names. + + Note that the search function normalizes the encoding names before + doing the lookup, so the mapping will have to map normalized + encoding names to module names. + + Contents: + + The following aliases dictionary contains mappings of all IANA + character set names for which the Python core library provides + codecs. In addition to these, a few Python specific codec + aliases have also been added. + +""" +aliases = { + + # Please keep this list sorted alphabetically by value ! + + # ascii codec + '646' : 'ascii', + 'ansi_x3.4_1968' : 'ascii', + 'ansi_x3_4_1968' : 'ascii', # some email headers use this non-standard name + 'ansi_x3.4_1986' : 'ascii', + 'cp367' : 'ascii', + 'csascii' : 'ascii', + 'ibm367' : 'ascii', + 'iso646_us' : 'ascii', + 'iso_646.irv_1991' : 'ascii', + 'iso_ir_6' : 'ascii', + 'us' : 'ascii', + 'us_ascii' : 'ascii', + + # base64_codec codec + 'base64' : 'base64_codec', + 'base_64' : 'base64_codec', + + # big5 codec + 'big5_tw' : 'big5', + 'csbig5' : 'big5', + + # big5hkscs codec + 'big5_hkscs' : 'big5hkscs', + 'hkscs' : 'big5hkscs', + + # bz2_codec codec + 'bz2' : 'bz2_codec', + + # cp037 codec + '037' : 'cp037', + 'csibm037' : 'cp037', + 'ebcdic_cp_ca' : 'cp037', + 'ebcdic_cp_nl' : 'cp037', + 'ebcdic_cp_us' : 'cp037', + 'ebcdic_cp_wt' : 'cp037', + 'ibm037' : 'cp037', + 'ibm039' : 'cp037', + + # cp1026 codec + '1026' : 'cp1026', + 'csibm1026' : 'cp1026', + 'ibm1026' : 'cp1026', + + # cp1125 codec + '1125' : 'cp1125', + 'ibm1125' : 'cp1125', + 'cp866u' : 'cp1125', + 'ruscii' : 'cp1125', + + # cp1140 codec + '1140' : 'cp1140', + 'ibm1140' : 'cp1140', + + # cp1250 codec + '1250' : 'cp1250', + 'windows_1250' : 'cp1250', + + # cp1251 codec + '1251' : 'cp1251', + 'windows_1251' : 'cp1251', + + # cp1252 codec + '1252' : 'cp1252', + 'windows_1252' : 'cp1252', + + # cp1253 codec + '1253' : 'cp1253', + 'windows_1253' : 'cp1253', + + # cp1254 codec + '1254' : 'cp1254', + 'windows_1254' : 'cp1254', + + # cp1255 codec + '1255' : 'cp1255', + 'windows_1255' : 'cp1255', + + # cp1256 codec + '1256' : 'cp1256', + 'windows_1256' : 'cp1256', + + # cp1257 codec + '1257' : 'cp1257', + 'windows_1257' : 'cp1257', + + # cp1258 codec + '1258' : 'cp1258', + 'windows_1258' : 'cp1258', + + # cp273 codec + '273' : 'cp273', + 'ibm273' : 'cp273', + 'csibm273' : 'cp273', + + # cp424 codec + '424' : 'cp424', + 'csibm424' : 'cp424', + 'ebcdic_cp_he' : 'cp424', + 'ibm424' : 'cp424', + + # cp437 codec + '437' : 'cp437', + 'cspc8codepage437' : 'cp437', + 'ibm437' : 'cp437', + + # cp500 codec + '500' : 'cp500', + 'csibm500' : 'cp500', + 'ebcdic_cp_be' : 'cp500', + 'ebcdic_cp_ch' : 'cp500', + 'ibm500' : 'cp500', + + # cp775 codec + '775' : 'cp775', + 'cspc775baltic' : 'cp775', + 'ibm775' : 'cp775', + + # cp850 codec + '850' : 'cp850', + 'cspc850multilingual' : 'cp850', + 'ibm850' : 'cp850', + + # cp852 codec + '852' : 'cp852', + 'cspcp852' : 'cp852', + 'ibm852' : 'cp852', + + # cp855 codec + '855' : 'cp855', + 'csibm855' : 'cp855', + 'ibm855' : 'cp855', + + # cp857 codec + '857' : 'cp857', + 'csibm857' : 'cp857', + 'ibm857' : 'cp857', + + # cp858 codec + '858' : 'cp858', + 'csibm858' : 'cp858', + 'ibm858' : 'cp858', + + # cp860 codec + '860' : 'cp860', + 'csibm860' : 'cp860', + 'ibm860' : 'cp860', + + # cp861 codec + '861' : 'cp861', + 'cp_is' : 'cp861', + 'csibm861' : 'cp861', + 'ibm861' : 'cp861', + + # cp862 codec + '862' : 'cp862', + 'cspc862latinhebrew' : 'cp862', + 'ibm862' : 'cp862', + + # cp863 codec + '863' : 'cp863', + 'csibm863' : 'cp863', + 'ibm863' : 'cp863', + + # cp864 codec + '864' : 'cp864', + 'csibm864' : 'cp864', + 'ibm864' : 'cp864', + + # cp865 codec + '865' : 'cp865', + 'csibm865' : 'cp865', + 'ibm865' : 'cp865', + + # cp866 codec + '866' : 'cp866', + 'csibm866' : 'cp866', + 'ibm866' : 'cp866', + + # cp869 codec + '869' : 'cp869', + 'cp_gr' : 'cp869', + 'csibm869' : 'cp869', + 'ibm869' : 'cp869', + + # cp932 codec + '932' : 'cp932', + 'ms932' : 'cp932', + 'mskanji' : 'cp932', + 'ms_kanji' : 'cp932', + + # cp949 codec + '949' : 'cp949', + 'ms949' : 'cp949', + 'uhc' : 'cp949', + + # cp950 codec + '950' : 'cp950', + 'ms950' : 'cp950', + + # euc_jis_2004 codec + 'jisx0213' : 'euc_jis_2004', + 'eucjis2004' : 'euc_jis_2004', + 'euc_jis2004' : 'euc_jis_2004', + + # euc_jisx0213 codec + 'eucjisx0213' : 'euc_jisx0213', + + # euc_jp codec + 'eucjp' : 'euc_jp', + 'ujis' : 'euc_jp', + 'u_jis' : 'euc_jp', + + # euc_kr codec + 'euckr' : 'euc_kr', + 'korean' : 'euc_kr', + 'ksc5601' : 'euc_kr', + 'ks_c_5601' : 'euc_kr', + 'ks_c_5601_1987' : 'euc_kr', + 'ksx1001' : 'euc_kr', + 'ks_x_1001' : 'euc_kr', + + # gb18030 codec + 'gb18030_2000' : 'gb18030', + + # gb2312 codec + 'chinese' : 'gb2312', + 'csiso58gb231280' : 'gb2312', + 'euc_cn' : 'gb2312', + 'euccn' : 'gb2312', + 'eucgb2312_cn' : 'gb2312', + 'gb2312_1980' : 'gb2312', + 'gb2312_80' : 'gb2312', + 'iso_ir_58' : 'gb2312', + + # gbk codec + '936' : 'gbk', + 'cp936' : 'gbk', + 'ms936' : 'gbk', + + # hex_codec codec + 'hex' : 'hex_codec', + + # hp_roman8 codec + 'roman8' : 'hp_roman8', + 'r8' : 'hp_roman8', + 'csHPRoman8' : 'hp_roman8', + + # hz codec + 'hzgb' : 'hz', + 'hz_gb' : 'hz', + 'hz_gb_2312' : 'hz', + + # iso2022_jp codec + 'csiso2022jp' : 'iso2022_jp', + 'iso2022jp' : 'iso2022_jp', + 'iso_2022_jp' : 'iso2022_jp', + + # iso2022_jp_1 codec + 'iso2022jp_1' : 'iso2022_jp_1', + 'iso_2022_jp_1' : 'iso2022_jp_1', + + # iso2022_jp_2 codec + 'iso2022jp_2' : 'iso2022_jp_2', + 'iso_2022_jp_2' : 'iso2022_jp_2', + + # iso2022_jp_2004 codec + 'iso_2022_jp_2004' : 'iso2022_jp_2004', + 'iso2022jp_2004' : 'iso2022_jp_2004', + + # iso2022_jp_3 codec + 'iso2022jp_3' : 'iso2022_jp_3', + 'iso_2022_jp_3' : 'iso2022_jp_3', + + # iso2022_jp_ext codec + 'iso2022jp_ext' : 'iso2022_jp_ext', + 'iso_2022_jp_ext' : 'iso2022_jp_ext', + + # iso2022_kr codec + 'csiso2022kr' : 'iso2022_kr', + 'iso2022kr' : 'iso2022_kr', + 'iso_2022_kr' : 'iso2022_kr', + + # iso8859_10 codec + 'csisolatin6' : 'iso8859_10', + 'iso_8859_10' : 'iso8859_10', + 'iso_8859_10_1992' : 'iso8859_10', + 'iso_ir_157' : 'iso8859_10', + 'l6' : 'iso8859_10', + 'latin6' : 'iso8859_10', + + # iso8859_11 codec + 'thai' : 'iso8859_11', + 'iso_8859_11' : 'iso8859_11', + 'iso_8859_11_2001' : 'iso8859_11', + + # iso8859_13 codec + 'iso_8859_13' : 'iso8859_13', + 'l7' : 'iso8859_13', + 'latin7' : 'iso8859_13', + + # iso8859_14 codec + 'iso_8859_14' : 'iso8859_14', + 'iso_8859_14_1998' : 'iso8859_14', + 'iso_celtic' : 'iso8859_14', + 'iso_ir_199' : 'iso8859_14', + 'l8' : 'iso8859_14', + 'latin8' : 'iso8859_14', + + # iso8859_15 codec + 'iso_8859_15' : 'iso8859_15', + 'l9' : 'iso8859_15', + 'latin9' : 'iso8859_15', + + # iso8859_16 codec + 'iso_8859_16' : 'iso8859_16', + 'iso_8859_16_2001' : 'iso8859_16', + 'iso_ir_226' : 'iso8859_16', + 'l10' : 'iso8859_16', + 'latin10' : 'iso8859_16', + + # iso8859_2 codec + 'csisolatin2' : 'iso8859_2', + 'iso_8859_2' : 'iso8859_2', + 'iso_8859_2_1987' : 'iso8859_2', + 'iso_ir_101' : 'iso8859_2', + 'l2' : 'iso8859_2', + 'latin2' : 'iso8859_2', + + # iso8859_3 codec + 'csisolatin3' : 'iso8859_3', + 'iso_8859_3' : 'iso8859_3', + 'iso_8859_3_1988' : 'iso8859_3', + 'iso_ir_109' : 'iso8859_3', + 'l3' : 'iso8859_3', + 'latin3' : 'iso8859_3', + + # iso8859_4 codec + 'csisolatin4' : 'iso8859_4', + 'iso_8859_4' : 'iso8859_4', + 'iso_8859_4_1988' : 'iso8859_4', + 'iso_ir_110' : 'iso8859_4', + 'l4' : 'iso8859_4', + 'latin4' : 'iso8859_4', + + # iso8859_5 codec + 'csisolatincyrillic' : 'iso8859_5', + 'cyrillic' : 'iso8859_5', + 'iso_8859_5' : 'iso8859_5', + 'iso_8859_5_1988' : 'iso8859_5', + 'iso_ir_144' : 'iso8859_5', + + # iso8859_6 codec + 'arabic' : 'iso8859_6', + 'asmo_708' : 'iso8859_6', + 'csisolatinarabic' : 'iso8859_6', + 'ecma_114' : 'iso8859_6', + 'iso_8859_6' : 'iso8859_6', + 'iso_8859_6_1987' : 'iso8859_6', + 'iso_ir_127' : 'iso8859_6', + + # iso8859_7 codec + 'csisolatingreek' : 'iso8859_7', + 'ecma_118' : 'iso8859_7', + 'elot_928' : 'iso8859_7', + 'greek' : 'iso8859_7', + 'greek8' : 'iso8859_7', + 'iso_8859_7' : 'iso8859_7', + 'iso_8859_7_1987' : 'iso8859_7', + 'iso_ir_126' : 'iso8859_7', + + # iso8859_8 codec + 'csisolatinhebrew' : 'iso8859_8', + 'hebrew' : 'iso8859_8', + 'iso_8859_8' : 'iso8859_8', + 'iso_8859_8_1988' : 'iso8859_8', + 'iso_ir_138' : 'iso8859_8', + + # iso8859_9 codec + 'csisolatin5' : 'iso8859_9', + 'iso_8859_9' : 'iso8859_9', + 'iso_8859_9_1989' : 'iso8859_9', + 'iso_ir_148' : 'iso8859_9', + 'l5' : 'iso8859_9', + 'latin5' : 'iso8859_9', + + # johab codec + 'cp1361' : 'johab', + 'ms1361' : 'johab', + + # koi8_r codec + 'cskoi8r' : 'koi8_r', + + # kz1048 codec + 'kz_1048' : 'kz1048', + 'rk1048' : 'kz1048', + 'strk1048_2002' : 'kz1048', + + # latin_1 codec + # + # Note that the latin_1 codec is implemented internally in C and a + # lot faster than the charmap codec iso8859_1 which uses the same + # encoding. This is why we discourage the use of the iso8859_1 + # codec and alias it to latin_1 instead. + # + '8859' : 'latin_1', + 'cp819' : 'latin_1', + 'csisolatin1' : 'latin_1', + 'ibm819' : 'latin_1', + 'iso8859' : 'latin_1', + 'iso8859_1' : 'latin_1', + 'iso_8859_1' : 'latin_1', + 'iso_8859_1_1987' : 'latin_1', + 'iso_ir_100' : 'latin_1', + 'l1' : 'latin_1', + 'latin' : 'latin_1', + 'latin1' : 'latin_1', + + # mac_cyrillic codec + 'maccyrillic' : 'mac_cyrillic', + + # mac_greek codec + 'macgreek' : 'mac_greek', + + # mac_iceland codec + 'maciceland' : 'mac_iceland', + + # mac_latin2 codec + 'maccentraleurope' : 'mac_latin2', + 'maclatin2' : 'mac_latin2', + + # mac_roman codec + 'macintosh' : 'mac_roman', + 'macroman' : 'mac_roman', + + # mac_turkish codec + 'macturkish' : 'mac_turkish', + + # mbcs codec + 'ansi' : 'mbcs', + 'dbcs' : 'mbcs', + + # ptcp154 codec + 'csptcp154' : 'ptcp154', + 'pt154' : 'ptcp154', + 'cp154' : 'ptcp154', + 'cyrillic_asian' : 'ptcp154', + + # quopri_codec codec + 'quopri' : 'quopri_codec', + 'quoted_printable' : 'quopri_codec', + 'quotedprintable' : 'quopri_codec', + + # rot_13 codec + 'rot13' : 'rot_13', + + # shift_jis codec + 'csshiftjis' : 'shift_jis', + 'shiftjis' : 'shift_jis', + 'sjis' : 'shift_jis', + 's_jis' : 'shift_jis', + + # shift_jis_2004 codec + 'shiftjis2004' : 'shift_jis_2004', + 'sjis_2004' : 'shift_jis_2004', + 's_jis_2004' : 'shift_jis_2004', + + # shift_jisx0213 codec + 'shiftjisx0213' : 'shift_jisx0213', + 'sjisx0213' : 'shift_jisx0213', + 's_jisx0213' : 'shift_jisx0213', + + # tactis codec + 'tis260' : 'tactis', + + # tis_620 codec + 'tis620' : 'tis_620', + 'tis_620_0' : 'tis_620', + 'tis_620_2529_0' : 'tis_620', + 'tis_620_2529_1' : 'tis_620', + 'iso_ir_166' : 'tis_620', + + # utf_16 codec + 'u16' : 'utf_16', + 'utf16' : 'utf_16', + + # utf_16_be codec + 'unicodebigunmarked' : 'utf_16_be', + 'utf_16be' : 'utf_16_be', + + # utf_16_le codec + 'unicodelittleunmarked' : 'utf_16_le', + 'utf_16le' : 'utf_16_le', + + # utf_32 codec + 'u32' : 'utf_32', + 'utf32' : 'utf_32', + + # utf_32_be codec + 'utf_32be' : 'utf_32_be', + + # utf_32_le codec + 'utf_32le' : 'utf_32_le', + + # utf_7 codec + 'u7' : 'utf_7', + 'utf7' : 'utf_7', + 'unicode_1_1_utf_7' : 'utf_7', + + # utf_8 codec + 'u8' : 'utf_8', + 'utf' : 'utf_8', + 'utf8' : 'utf_8', + 'utf8_ucs2' : 'utf_8', + 'utf8_ucs4' : 'utf_8', + + # uu_codec codec + 'uu' : 'uu_codec', + + # zlib_codec codec + 'zip' : 'zlib_codec', + 'zlib' : 'zlib_codec', + + # temporary mac CJK aliases, will be replaced by proper codecs in 3.1 + 'x_mac_japanese' : 'shift_jis', + 'x_mac_korean' : 'euc_kr', + 'x_mac_simp_chinese' : 'gb2312', + 'x_mac_trad_chinese' : 'big5', +} diff --git a/my_env/Lib/encodings/ascii.py b/my_env/Lib/encodings/ascii.py new file mode 100644 index 000000000..2033cde97 --- /dev/null +++ b/my_env/Lib/encodings/ascii.py @@ -0,0 +1,50 @@ +""" Python 'ascii' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + # Note: Binding these as C functions will result in the class not + # converting them to methods. This is intended. + encode = codecs.ascii_encode + decode = codecs.ascii_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.ascii_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.ascii_decode(input, self.errors)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +class StreamConverter(StreamWriter,StreamReader): + + encode = codecs.ascii_decode + decode = codecs.ascii_encode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='ascii', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/my_env/Lib/encodings/base64_codec.py b/my_env/Lib/encodings/base64_codec.py new file mode 100644 index 000000000..8e7703b3b --- /dev/null +++ b/my_env/Lib/encodings/base64_codec.py @@ -0,0 +1,55 @@ +"""Python 'base64_codec' Codec - base64 content transfer encoding. + +This codec de/encodes from bytes to bytes. + +Written by Marc-Andre Lemburg (mal@lemburg.com). +""" + +import codecs +import base64 + +### Codec APIs + +def base64_encode(input, errors='strict'): + assert errors == 'strict' + return (base64.encodebytes(input), len(input)) + +def base64_decode(input, errors='strict'): + assert errors == 'strict' + return (base64.decodebytes(input), len(input)) + +class Codec(codecs.Codec): + def encode(self, input, errors='strict'): + return base64_encode(input, errors) + def decode(self, input, errors='strict'): + return base64_decode(input, errors) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + assert self.errors == 'strict' + return base64.encodebytes(input) + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + assert self.errors == 'strict' + return base64.decodebytes(input) + +class StreamWriter(Codec, codecs.StreamWriter): + charbuffertype = bytes + +class StreamReader(Codec, codecs.StreamReader): + charbuffertype = bytes + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='base64', + encode=base64_encode, + decode=base64_decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + _is_text_encoding=False, + ) diff --git a/my_env/Lib/encodings/big5.py b/my_env/Lib/encodings/big5.py new file mode 100644 index 000000000..7adeb0e16 --- /dev/null +++ b/my_env/Lib/encodings/big5.py @@ -0,0 +1,39 @@ +# +# big5.py: Python Unicode Codec for BIG5 +# +# Written by Hye-Shik Chang +# + +import _codecs_tw, codecs +import _multibytecodec as mbc + +codec = _codecs_tw.getcodec('big5') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='big5', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/big5hkscs.py b/my_env/Lib/encodings/big5hkscs.py new file mode 100644 index 000000000..350df37ba --- /dev/null +++ b/my_env/Lib/encodings/big5hkscs.py @@ -0,0 +1,39 @@ +# +# big5hkscs.py: Python Unicode Codec for BIG5HKSCS +# +# Written by Hye-Shik Chang +# + +import _codecs_hk, codecs +import _multibytecodec as mbc + +codec = _codecs_hk.getcodec('big5hkscs') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='big5hkscs', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/bz2_codec.py b/my_env/Lib/encodings/bz2_codec.py new file mode 100644 index 000000000..fd9495e34 --- /dev/null +++ b/my_env/Lib/encodings/bz2_codec.py @@ -0,0 +1,78 @@ +"""Python 'bz2_codec' Codec - bz2 compression encoding. + +This codec de/encodes from bytes to bytes and is therefore usable with +bytes.transform() and bytes.untransform(). + +Adapted by Raymond Hettinger from zlib_codec.py which was written +by Marc-Andre Lemburg (mal@lemburg.com). +""" + +import codecs +import bz2 # this codec needs the optional bz2 module ! + +### Codec APIs + +def bz2_encode(input, errors='strict'): + assert errors == 'strict' + return (bz2.compress(input), len(input)) + +def bz2_decode(input, errors='strict'): + assert errors == 'strict' + return (bz2.decompress(input), len(input)) + +class Codec(codecs.Codec): + def encode(self, input, errors='strict'): + return bz2_encode(input, errors) + def decode(self, input, errors='strict'): + return bz2_decode(input, errors) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def __init__(self, errors='strict'): + assert errors == 'strict' + self.errors = errors + self.compressobj = bz2.BZ2Compressor() + + def encode(self, input, final=False): + if final: + c = self.compressobj.compress(input) + return c + self.compressobj.flush() + else: + return self.compressobj.compress(input) + + def reset(self): + self.compressobj = bz2.BZ2Compressor() + +class IncrementalDecoder(codecs.IncrementalDecoder): + def __init__(self, errors='strict'): + assert errors == 'strict' + self.errors = errors + self.decompressobj = bz2.BZ2Decompressor() + + def decode(self, input, final=False): + try: + return self.decompressobj.decompress(input) + except EOFError: + return '' + + def reset(self): + self.decompressobj = bz2.BZ2Decompressor() + +class StreamWriter(Codec, codecs.StreamWriter): + charbuffertype = bytes + +class StreamReader(Codec, codecs.StreamReader): + charbuffertype = bytes + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name="bz2", + encode=bz2_encode, + decode=bz2_decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + _is_text_encoding=False, + ) diff --git a/my_env/Lib/encodings/charmap.py b/my_env/Lib/encodings/charmap.py new file mode 100644 index 000000000..81189b161 --- /dev/null +++ b/my_env/Lib/encodings/charmap.py @@ -0,0 +1,69 @@ +""" Generic Python Character Mapping Codec. + + Use this codec directly rather than through the automatic + conversion mechanisms supplied by unicode() and .encode(). + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + # Note: Binding these as C functions will result in the class not + # converting them to methods. This is intended. + encode = codecs.charmap_encode + decode = codecs.charmap_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def __init__(self, errors='strict', mapping=None): + codecs.IncrementalEncoder.__init__(self, errors) + self.mapping = mapping + + def encode(self, input, final=False): + return codecs.charmap_encode(input, self.errors, self.mapping)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def __init__(self, errors='strict', mapping=None): + codecs.IncrementalDecoder.__init__(self, errors) + self.mapping = mapping + + def decode(self, input, final=False): + return codecs.charmap_decode(input, self.errors, self.mapping)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + + def __init__(self,stream,errors='strict',mapping=None): + codecs.StreamWriter.__init__(self,stream,errors) + self.mapping = mapping + + def encode(self,input,errors='strict'): + return Codec.encode(input,errors,self.mapping) + +class StreamReader(Codec,codecs.StreamReader): + + def __init__(self,stream,errors='strict',mapping=None): + codecs.StreamReader.__init__(self,stream,errors) + self.mapping = mapping + + def decode(self,input,errors='strict'): + return Codec.decode(input,errors,self.mapping) + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='charmap', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/my_env/Lib/encodings/cp037.py b/my_env/Lib/encodings/cp037.py new file mode 100644 index 000000000..4edd708f3 --- /dev/null +++ b/my_env/Lib/encodings/cp037.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp037 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP037.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp037', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x9c' # 0x04 -> CONTROL + '\t' # 0x05 -> HORIZONTAL TABULATION + '\x86' # 0x06 -> CONTROL + '\x7f' # 0x07 -> DELETE + '\x97' # 0x08 -> CONTROL + '\x8d' # 0x09 -> CONTROL + '\x8e' # 0x0A -> CONTROL + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x9d' # 0x14 -> CONTROL + '\x85' # 0x15 -> CONTROL + '\x08' # 0x16 -> BACKSPACE + '\x87' # 0x17 -> CONTROL + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x92' # 0x1A -> CONTROL + '\x8f' # 0x1B -> CONTROL + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + '\x80' # 0x20 -> CONTROL + '\x81' # 0x21 -> CONTROL + '\x82' # 0x22 -> CONTROL + '\x83' # 0x23 -> CONTROL + '\x84' # 0x24 -> CONTROL + '\n' # 0x25 -> LINE FEED + '\x17' # 0x26 -> END OF TRANSMISSION BLOCK + '\x1b' # 0x27 -> ESCAPE + '\x88' # 0x28 -> CONTROL + '\x89' # 0x29 -> CONTROL + '\x8a' # 0x2A -> CONTROL + '\x8b' # 0x2B -> CONTROL + '\x8c' # 0x2C -> CONTROL + '\x05' # 0x2D -> ENQUIRY + '\x06' # 0x2E -> ACKNOWLEDGE + '\x07' # 0x2F -> BELL + '\x90' # 0x30 -> CONTROL + '\x91' # 0x31 -> CONTROL + '\x16' # 0x32 -> SYNCHRONOUS IDLE + '\x93' # 0x33 -> CONTROL + '\x94' # 0x34 -> CONTROL + '\x95' # 0x35 -> CONTROL + '\x96' # 0x36 -> CONTROL + '\x04' # 0x37 -> END OF TRANSMISSION + '\x98' # 0x38 -> CONTROL + '\x99' # 0x39 -> CONTROL + '\x9a' # 0x3A -> CONTROL + '\x9b' # 0x3B -> CONTROL + '\x14' # 0x3C -> DEVICE CONTROL FOUR + '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE + '\x9e' # 0x3E -> CONTROL + '\x1a' # 0x3F -> SUBSTITUTE + ' ' # 0x40 -> SPACE + '\xa0' # 0x41 -> NO-BREAK SPACE + '\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE + '\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE + '\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA + '\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE + '\xa2' # 0x4A -> CENT SIGN + '.' # 0x4B -> FULL STOP + '<' # 0x4C -> LESS-THAN SIGN + '(' # 0x4D -> LEFT PARENTHESIS + '+' # 0x4E -> PLUS SIGN + '|' # 0x4F -> VERTICAL LINE + '&' # 0x50 -> AMPERSAND + '\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE + '\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS + '\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE + '\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) + '!' # 0x5A -> EXCLAMATION MARK + '$' # 0x5B -> DOLLAR SIGN + '*' # 0x5C -> ASTERISK + ')' # 0x5D -> RIGHT PARENTHESIS + ';' # 0x5E -> SEMICOLON + '\xac' # 0x5F -> NOT SIGN + '-' # 0x60 -> HYPHEN-MINUS + '/' # 0x61 -> SOLIDUS + '\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE + '\xa6' # 0x6A -> BROKEN BAR + ',' # 0x6B -> COMMA + '%' # 0x6C -> PERCENT SIGN + '_' # 0x6D -> LOW LINE + '>' # 0x6E -> GREATER-THAN SIGN + '?' # 0x6F -> QUESTION MARK + '\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE + '\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE + '`' # 0x79 -> GRAVE ACCENT + ':' # 0x7A -> COLON + '#' # 0x7B -> NUMBER SIGN + '@' # 0x7C -> COMMERCIAL AT + "'" # 0x7D -> APOSTROPHE + '=' # 0x7E -> EQUALS SIGN + '"' # 0x7F -> QUOTATION MARK + '\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE + 'a' # 0x81 -> LATIN SMALL LETTER A + 'b' # 0x82 -> LATIN SMALL LETTER B + 'c' # 0x83 -> LATIN SMALL LETTER C + 'd' # 0x84 -> LATIN SMALL LETTER D + 'e' # 0x85 -> LATIN SMALL LETTER E + 'f' # 0x86 -> LATIN SMALL LETTER F + 'g' # 0x87 -> LATIN SMALL LETTER G + 'h' # 0x88 -> LATIN SMALL LETTER H + 'i' # 0x89 -> LATIN SMALL LETTER I + '\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xf0' # 0x8C -> LATIN SMALL LETTER ETH (ICELANDIC) + '\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE + '\xfe' # 0x8E -> LATIN SMALL LETTER THORN (ICELANDIC) + '\xb1' # 0x8F -> PLUS-MINUS SIGN + '\xb0' # 0x90 -> DEGREE SIGN + 'j' # 0x91 -> LATIN SMALL LETTER J + 'k' # 0x92 -> LATIN SMALL LETTER K + 'l' # 0x93 -> LATIN SMALL LETTER L + 'm' # 0x94 -> LATIN SMALL LETTER M + 'n' # 0x95 -> LATIN SMALL LETTER N + 'o' # 0x96 -> LATIN SMALL LETTER O + 'p' # 0x97 -> LATIN SMALL LETTER P + 'q' # 0x98 -> LATIN SMALL LETTER Q + 'r' # 0x99 -> LATIN SMALL LETTER R + '\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR + '\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR + '\xe6' # 0x9C -> LATIN SMALL LIGATURE AE + '\xb8' # 0x9D -> CEDILLA + '\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE + '\xa4' # 0x9F -> CURRENCY SIGN + '\xb5' # 0xA0 -> MICRO SIGN + '~' # 0xA1 -> TILDE + 's' # 0xA2 -> LATIN SMALL LETTER S + 't' # 0xA3 -> LATIN SMALL LETTER T + 'u' # 0xA4 -> LATIN SMALL LETTER U + 'v' # 0xA5 -> LATIN SMALL LETTER V + 'w' # 0xA6 -> LATIN SMALL LETTER W + 'x' # 0xA7 -> LATIN SMALL LETTER X + 'y' # 0xA8 -> LATIN SMALL LETTER Y + 'z' # 0xA9 -> LATIN SMALL LETTER Z + '\xa1' # 0xAA -> INVERTED EXCLAMATION MARK + '\xbf' # 0xAB -> INVERTED QUESTION MARK + '\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC) + '\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC) + '\xae' # 0xAF -> REGISTERED SIGN + '^' # 0xB0 -> CIRCUMFLEX ACCENT + '\xa3' # 0xB1 -> POUND SIGN + '\xa5' # 0xB2 -> YEN SIGN + '\xb7' # 0xB3 -> MIDDLE DOT + '\xa9' # 0xB4 -> COPYRIGHT SIGN + '\xa7' # 0xB5 -> SECTION SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF + '\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS + '[' # 0xBA -> LEFT SQUARE BRACKET + ']' # 0xBB -> RIGHT SQUARE BRACKET + '\xaf' # 0xBC -> MACRON + '\xa8' # 0xBD -> DIAERESIS + '\xb4' # 0xBE -> ACUTE ACCENT + '\xd7' # 0xBF -> MULTIPLICATION SIGN + '{' # 0xC0 -> LEFT CURLY BRACKET + 'A' # 0xC1 -> LATIN CAPITAL LETTER A + 'B' # 0xC2 -> LATIN CAPITAL LETTER B + 'C' # 0xC3 -> LATIN CAPITAL LETTER C + 'D' # 0xC4 -> LATIN CAPITAL LETTER D + 'E' # 0xC5 -> LATIN CAPITAL LETTER E + 'F' # 0xC6 -> LATIN CAPITAL LETTER F + 'G' # 0xC7 -> LATIN CAPITAL LETTER G + 'H' # 0xC8 -> LATIN CAPITAL LETTER H + 'I' # 0xC9 -> LATIN CAPITAL LETTER I + '\xad' # 0xCA -> SOFT HYPHEN + '\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0xCC -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE + '\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE + '}' # 0xD0 -> RIGHT CURLY BRACKET + 'J' # 0xD1 -> LATIN CAPITAL LETTER J + 'K' # 0xD2 -> LATIN CAPITAL LETTER K + 'L' # 0xD3 -> LATIN CAPITAL LETTER L + 'M' # 0xD4 -> LATIN CAPITAL LETTER M + 'N' # 0xD5 -> LATIN CAPITAL LETTER N + 'O' # 0xD6 -> LATIN CAPITAL LETTER O + 'P' # 0xD7 -> LATIN CAPITAL LETTER P + 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q + 'R' # 0xD9 -> LATIN CAPITAL LETTER R + '\xb9' # 0xDA -> SUPERSCRIPT ONE + '\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xDC -> LATIN SMALL LETTER U WITH DIAERESIS + '\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE + '\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS + '\\' # 0xE0 -> REVERSE SOLIDUS + '\xf7' # 0xE1 -> DIVISION SIGN + 'S' # 0xE2 -> LATIN CAPITAL LETTER S + 'T' # 0xE3 -> LATIN CAPITAL LETTER T + 'U' # 0xE4 -> LATIN CAPITAL LETTER U + 'V' # 0xE5 -> LATIN CAPITAL LETTER V + 'W' # 0xE6 -> LATIN CAPITAL LETTER W + 'X' # 0xE7 -> LATIN CAPITAL LETTER X + 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y + 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z + '\xb2' # 0xEA -> SUPERSCRIPT TWO + '\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd6' # 0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE + '0' # 0xF0 -> DIGIT ZERO + '1' # 0xF1 -> DIGIT ONE + '2' # 0xF2 -> DIGIT TWO + '3' # 0xF3 -> DIGIT THREE + '4' # 0xF4 -> DIGIT FOUR + '5' # 0xF5 -> DIGIT FIVE + '6' # 0xF6 -> DIGIT SIX + '7' # 0xF7 -> DIGIT SEVEN + '8' # 0xF8 -> DIGIT EIGHT + '9' # 0xF9 -> DIGIT NINE + '\xb3' # 0xFA -> SUPERSCRIPT THREE + '\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE + '\x9f' # 0xFF -> CONTROL +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp1006.py b/my_env/Lib/encodings/cp1006.py new file mode 100644 index 000000000..a1221c3ef --- /dev/null +++ b/my_env/Lib/encodings/cp1006.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1006 generated from 'MAPPINGS/VENDORS/MISC/CP1006.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1006', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u06f0' # 0xA1 -> EXTENDED ARABIC-INDIC DIGIT ZERO + '\u06f1' # 0xA2 -> EXTENDED ARABIC-INDIC DIGIT ONE + '\u06f2' # 0xA3 -> EXTENDED ARABIC-INDIC DIGIT TWO + '\u06f3' # 0xA4 -> EXTENDED ARABIC-INDIC DIGIT THREE + '\u06f4' # 0xA5 -> EXTENDED ARABIC-INDIC DIGIT FOUR + '\u06f5' # 0xA6 -> EXTENDED ARABIC-INDIC DIGIT FIVE + '\u06f6' # 0xA7 -> EXTENDED ARABIC-INDIC DIGIT SIX + '\u06f7' # 0xA8 -> EXTENDED ARABIC-INDIC DIGIT SEVEN + '\u06f8' # 0xA9 -> EXTENDED ARABIC-INDIC DIGIT EIGHT + '\u06f9' # 0xAA -> EXTENDED ARABIC-INDIC DIGIT NINE + '\u060c' # 0xAB -> ARABIC COMMA + '\u061b' # 0xAC -> ARABIC SEMICOLON + '\xad' # 0xAD -> SOFT HYPHEN + '\u061f' # 0xAE -> ARABIC QUESTION MARK + '\ufe81' # 0xAF -> ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM + '\ufe8d' # 0xB0 -> ARABIC LETTER ALEF ISOLATED FORM + '\ufe8e' # 0xB1 -> ARABIC LETTER ALEF FINAL FORM + '\ufe8e' # 0xB2 -> ARABIC LETTER ALEF FINAL FORM + '\ufe8f' # 0xB3 -> ARABIC LETTER BEH ISOLATED FORM + '\ufe91' # 0xB4 -> ARABIC LETTER BEH INITIAL FORM + '\ufb56' # 0xB5 -> ARABIC LETTER PEH ISOLATED FORM + '\ufb58' # 0xB6 -> ARABIC LETTER PEH INITIAL FORM + '\ufe93' # 0xB7 -> ARABIC LETTER TEH MARBUTA ISOLATED FORM + '\ufe95' # 0xB8 -> ARABIC LETTER TEH ISOLATED FORM + '\ufe97' # 0xB9 -> ARABIC LETTER TEH INITIAL FORM + '\ufb66' # 0xBA -> ARABIC LETTER TTEH ISOLATED FORM + '\ufb68' # 0xBB -> ARABIC LETTER TTEH INITIAL FORM + '\ufe99' # 0xBC -> ARABIC LETTER THEH ISOLATED FORM + '\ufe9b' # 0xBD -> ARABIC LETTER THEH INITIAL FORM + '\ufe9d' # 0xBE -> ARABIC LETTER JEEM ISOLATED FORM + '\ufe9f' # 0xBF -> ARABIC LETTER JEEM INITIAL FORM + '\ufb7a' # 0xC0 -> ARABIC LETTER TCHEH ISOLATED FORM + '\ufb7c' # 0xC1 -> ARABIC LETTER TCHEH INITIAL FORM + '\ufea1' # 0xC2 -> ARABIC LETTER HAH ISOLATED FORM + '\ufea3' # 0xC3 -> ARABIC LETTER HAH INITIAL FORM + '\ufea5' # 0xC4 -> ARABIC LETTER KHAH ISOLATED FORM + '\ufea7' # 0xC5 -> ARABIC LETTER KHAH INITIAL FORM + '\ufea9' # 0xC6 -> ARABIC LETTER DAL ISOLATED FORM + '\ufb84' # 0xC7 -> ARABIC LETTER DAHAL ISOLATED FORMN + '\ufeab' # 0xC8 -> ARABIC LETTER THAL ISOLATED FORM + '\ufead' # 0xC9 -> ARABIC LETTER REH ISOLATED FORM + '\ufb8c' # 0xCA -> ARABIC LETTER RREH ISOLATED FORM + '\ufeaf' # 0xCB -> ARABIC LETTER ZAIN ISOLATED FORM + '\ufb8a' # 0xCC -> ARABIC LETTER JEH ISOLATED FORM + '\ufeb1' # 0xCD -> ARABIC LETTER SEEN ISOLATED FORM + '\ufeb3' # 0xCE -> ARABIC LETTER SEEN INITIAL FORM + '\ufeb5' # 0xCF -> ARABIC LETTER SHEEN ISOLATED FORM + '\ufeb7' # 0xD0 -> ARABIC LETTER SHEEN INITIAL FORM + '\ufeb9' # 0xD1 -> ARABIC LETTER SAD ISOLATED FORM + '\ufebb' # 0xD2 -> ARABIC LETTER SAD INITIAL FORM + '\ufebd' # 0xD3 -> ARABIC LETTER DAD ISOLATED FORM + '\ufebf' # 0xD4 -> ARABIC LETTER DAD INITIAL FORM + '\ufec1' # 0xD5 -> ARABIC LETTER TAH ISOLATED FORM + '\ufec5' # 0xD6 -> ARABIC LETTER ZAH ISOLATED FORM + '\ufec9' # 0xD7 -> ARABIC LETTER AIN ISOLATED FORM + '\ufeca' # 0xD8 -> ARABIC LETTER AIN FINAL FORM + '\ufecb' # 0xD9 -> ARABIC LETTER AIN INITIAL FORM + '\ufecc' # 0xDA -> ARABIC LETTER AIN MEDIAL FORM + '\ufecd' # 0xDB -> ARABIC LETTER GHAIN ISOLATED FORM + '\ufece' # 0xDC -> ARABIC LETTER GHAIN FINAL FORM + '\ufecf' # 0xDD -> ARABIC LETTER GHAIN INITIAL FORM + '\ufed0' # 0xDE -> ARABIC LETTER GHAIN MEDIAL FORM + '\ufed1' # 0xDF -> ARABIC LETTER FEH ISOLATED FORM + '\ufed3' # 0xE0 -> ARABIC LETTER FEH INITIAL FORM + '\ufed5' # 0xE1 -> ARABIC LETTER QAF ISOLATED FORM + '\ufed7' # 0xE2 -> ARABIC LETTER QAF INITIAL FORM + '\ufed9' # 0xE3 -> ARABIC LETTER KAF ISOLATED FORM + '\ufedb' # 0xE4 -> ARABIC LETTER KAF INITIAL FORM + '\ufb92' # 0xE5 -> ARABIC LETTER GAF ISOLATED FORM + '\ufb94' # 0xE6 -> ARABIC LETTER GAF INITIAL FORM + '\ufedd' # 0xE7 -> ARABIC LETTER LAM ISOLATED FORM + '\ufedf' # 0xE8 -> ARABIC LETTER LAM INITIAL FORM + '\ufee0' # 0xE9 -> ARABIC LETTER LAM MEDIAL FORM + '\ufee1' # 0xEA -> ARABIC LETTER MEEM ISOLATED FORM + '\ufee3' # 0xEB -> ARABIC LETTER MEEM INITIAL FORM + '\ufb9e' # 0xEC -> ARABIC LETTER NOON GHUNNA ISOLATED FORM + '\ufee5' # 0xED -> ARABIC LETTER NOON ISOLATED FORM + '\ufee7' # 0xEE -> ARABIC LETTER NOON INITIAL FORM + '\ufe85' # 0xEF -> ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM + '\ufeed' # 0xF0 -> ARABIC LETTER WAW ISOLATED FORM + '\ufba6' # 0xF1 -> ARABIC LETTER HEH GOAL ISOLATED FORM + '\ufba8' # 0xF2 -> ARABIC LETTER HEH GOAL INITIAL FORM + '\ufba9' # 0xF3 -> ARABIC LETTER HEH GOAL MEDIAL FORM + '\ufbaa' # 0xF4 -> ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM + '\ufe80' # 0xF5 -> ARABIC LETTER HAMZA ISOLATED FORM + '\ufe89' # 0xF6 -> ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM + '\ufe8a' # 0xF7 -> ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM + '\ufe8b' # 0xF8 -> ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM + '\ufef1' # 0xF9 -> ARABIC LETTER YEH ISOLATED FORM + '\ufef2' # 0xFA -> ARABIC LETTER YEH FINAL FORM + '\ufef3' # 0xFB -> ARABIC LETTER YEH INITIAL FORM + '\ufbb0' # 0xFC -> ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM + '\ufbae' # 0xFD -> ARABIC LETTER YEH BARREE ISOLATED FORM + '\ufe7c' # 0xFE -> ARABIC SHADDA ISOLATED FORM + '\ufe7d' # 0xFF -> ARABIC SHADDA MEDIAL FORM +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp1026.py b/my_env/Lib/encodings/cp1026.py new file mode 100644 index 000000000..46f71f74d --- /dev/null +++ b/my_env/Lib/encodings/cp1026.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1026 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP1026.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1026', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x9c' # 0x04 -> CONTROL + '\t' # 0x05 -> HORIZONTAL TABULATION + '\x86' # 0x06 -> CONTROL + '\x7f' # 0x07 -> DELETE + '\x97' # 0x08 -> CONTROL + '\x8d' # 0x09 -> CONTROL + '\x8e' # 0x0A -> CONTROL + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x9d' # 0x14 -> CONTROL + '\x85' # 0x15 -> CONTROL + '\x08' # 0x16 -> BACKSPACE + '\x87' # 0x17 -> CONTROL + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x92' # 0x1A -> CONTROL + '\x8f' # 0x1B -> CONTROL + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + '\x80' # 0x20 -> CONTROL + '\x81' # 0x21 -> CONTROL + '\x82' # 0x22 -> CONTROL + '\x83' # 0x23 -> CONTROL + '\x84' # 0x24 -> CONTROL + '\n' # 0x25 -> LINE FEED + '\x17' # 0x26 -> END OF TRANSMISSION BLOCK + '\x1b' # 0x27 -> ESCAPE + '\x88' # 0x28 -> CONTROL + '\x89' # 0x29 -> CONTROL + '\x8a' # 0x2A -> CONTROL + '\x8b' # 0x2B -> CONTROL + '\x8c' # 0x2C -> CONTROL + '\x05' # 0x2D -> ENQUIRY + '\x06' # 0x2E -> ACKNOWLEDGE + '\x07' # 0x2F -> BELL + '\x90' # 0x30 -> CONTROL + '\x91' # 0x31 -> CONTROL + '\x16' # 0x32 -> SYNCHRONOUS IDLE + '\x93' # 0x33 -> CONTROL + '\x94' # 0x34 -> CONTROL + '\x95' # 0x35 -> CONTROL + '\x96' # 0x36 -> CONTROL + '\x04' # 0x37 -> END OF TRANSMISSION + '\x98' # 0x38 -> CONTROL + '\x99' # 0x39 -> CONTROL + '\x9a' # 0x3A -> CONTROL + '\x9b' # 0x3B -> CONTROL + '\x14' # 0x3C -> DEVICE CONTROL FOUR + '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE + '\x9e' # 0x3E -> CONTROL + '\x1a' # 0x3F -> SUBSTITUTE + ' ' # 0x40 -> SPACE + '\xa0' # 0x41 -> NO-BREAK SPACE + '\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE + '\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE + '\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE + '{' # 0x48 -> LEFT CURLY BRACKET + '\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE + '\xc7' # 0x4A -> LATIN CAPITAL LETTER C WITH CEDILLA + '.' # 0x4B -> FULL STOP + '<' # 0x4C -> LESS-THAN SIGN + '(' # 0x4D -> LEFT PARENTHESIS + '+' # 0x4E -> PLUS SIGN + '!' # 0x4F -> EXCLAMATION MARK + '&' # 0x50 -> AMPERSAND + '\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE + '\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS + '\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE + '\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) + '\u011e' # 0x5A -> LATIN CAPITAL LETTER G WITH BREVE + '\u0130' # 0x5B -> LATIN CAPITAL LETTER I WITH DOT ABOVE + '*' # 0x5C -> ASTERISK + ')' # 0x5D -> RIGHT PARENTHESIS + ';' # 0x5E -> SEMICOLON + '^' # 0x5F -> CIRCUMFLEX ACCENT + '-' # 0x60 -> HYPHEN-MINUS + '/' # 0x61 -> SOLIDUS + '\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '[' # 0x68 -> LEFT SQUARE BRACKET + '\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE + '\u015f' # 0x6A -> LATIN SMALL LETTER S WITH CEDILLA + ',' # 0x6B -> COMMA + '%' # 0x6C -> PERCENT SIGN + '_' # 0x6D -> LOW LINE + '>' # 0x6E -> GREATER-THAN SIGN + '?' # 0x6F -> QUESTION MARK + '\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE + '\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE + '\u0131' # 0x79 -> LATIN SMALL LETTER DOTLESS I + ':' # 0x7A -> COLON + '\xd6' # 0x7B -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\u015e' # 0x7C -> LATIN CAPITAL LETTER S WITH CEDILLA + "'" # 0x7D -> APOSTROPHE + '=' # 0x7E -> EQUALS SIGN + '\xdc' # 0x7F -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE + 'a' # 0x81 -> LATIN SMALL LETTER A + 'b' # 0x82 -> LATIN SMALL LETTER B + 'c' # 0x83 -> LATIN SMALL LETTER C + 'd' # 0x84 -> LATIN SMALL LETTER D + 'e' # 0x85 -> LATIN SMALL LETTER E + 'f' # 0x86 -> LATIN SMALL LETTER F + 'g' # 0x87 -> LATIN SMALL LETTER G + 'h' # 0x88 -> LATIN SMALL LETTER H + 'i' # 0x89 -> LATIN SMALL LETTER I + '\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '}' # 0x8C -> RIGHT CURLY BRACKET + '`' # 0x8D -> GRAVE ACCENT + '\xa6' # 0x8E -> BROKEN BAR + '\xb1' # 0x8F -> PLUS-MINUS SIGN + '\xb0' # 0x90 -> DEGREE SIGN + 'j' # 0x91 -> LATIN SMALL LETTER J + 'k' # 0x92 -> LATIN SMALL LETTER K + 'l' # 0x93 -> LATIN SMALL LETTER L + 'm' # 0x94 -> LATIN SMALL LETTER M + 'n' # 0x95 -> LATIN SMALL LETTER N + 'o' # 0x96 -> LATIN SMALL LETTER O + 'p' # 0x97 -> LATIN SMALL LETTER P + 'q' # 0x98 -> LATIN SMALL LETTER Q + 'r' # 0x99 -> LATIN SMALL LETTER R + '\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR + '\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR + '\xe6' # 0x9C -> LATIN SMALL LIGATURE AE + '\xb8' # 0x9D -> CEDILLA + '\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE + '\xa4' # 0x9F -> CURRENCY SIGN + '\xb5' # 0xA0 -> MICRO SIGN + '\xf6' # 0xA1 -> LATIN SMALL LETTER O WITH DIAERESIS + 's' # 0xA2 -> LATIN SMALL LETTER S + 't' # 0xA3 -> LATIN SMALL LETTER T + 'u' # 0xA4 -> LATIN SMALL LETTER U + 'v' # 0xA5 -> LATIN SMALL LETTER V + 'w' # 0xA6 -> LATIN SMALL LETTER W + 'x' # 0xA7 -> LATIN SMALL LETTER X + 'y' # 0xA8 -> LATIN SMALL LETTER Y + 'z' # 0xA9 -> LATIN SMALL LETTER Z + '\xa1' # 0xAA -> INVERTED EXCLAMATION MARK + '\xbf' # 0xAB -> INVERTED QUESTION MARK + ']' # 0xAC -> RIGHT SQUARE BRACKET + '$' # 0xAD -> DOLLAR SIGN + '@' # 0xAE -> COMMERCIAL AT + '\xae' # 0xAF -> REGISTERED SIGN + '\xa2' # 0xB0 -> CENT SIGN + '\xa3' # 0xB1 -> POUND SIGN + '\xa5' # 0xB2 -> YEN SIGN + '\xb7' # 0xB3 -> MIDDLE DOT + '\xa9' # 0xB4 -> COPYRIGHT SIGN + '\xa7' # 0xB5 -> SECTION SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF + '\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS + '\xac' # 0xBA -> NOT SIGN + '|' # 0xBB -> VERTICAL LINE + '\xaf' # 0xBC -> MACRON + '\xa8' # 0xBD -> DIAERESIS + '\xb4' # 0xBE -> ACUTE ACCENT + '\xd7' # 0xBF -> MULTIPLICATION SIGN + '\xe7' # 0xC0 -> LATIN SMALL LETTER C WITH CEDILLA + 'A' # 0xC1 -> LATIN CAPITAL LETTER A + 'B' # 0xC2 -> LATIN CAPITAL LETTER B + 'C' # 0xC3 -> LATIN CAPITAL LETTER C + 'D' # 0xC4 -> LATIN CAPITAL LETTER D + 'E' # 0xC5 -> LATIN CAPITAL LETTER E + 'F' # 0xC6 -> LATIN CAPITAL LETTER F + 'G' # 0xC7 -> LATIN CAPITAL LETTER G + 'H' # 0xC8 -> LATIN CAPITAL LETTER H + 'I' # 0xC9 -> LATIN CAPITAL LETTER I + '\xad' # 0xCA -> SOFT HYPHEN + '\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '~' # 0xCC -> TILDE + '\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE + '\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE + '\u011f' # 0xD0 -> LATIN SMALL LETTER G WITH BREVE + 'J' # 0xD1 -> LATIN CAPITAL LETTER J + 'K' # 0xD2 -> LATIN CAPITAL LETTER K + 'L' # 0xD3 -> LATIN CAPITAL LETTER L + 'M' # 0xD4 -> LATIN CAPITAL LETTER M + 'N' # 0xD5 -> LATIN CAPITAL LETTER N + 'O' # 0xD6 -> LATIN CAPITAL LETTER O + 'P' # 0xD7 -> LATIN CAPITAL LETTER P + 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q + 'R' # 0xD9 -> LATIN CAPITAL LETTER R + '\xb9' # 0xDA -> SUPERSCRIPT ONE + '\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\\' # 0xDC -> REVERSE SOLIDUS + '\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE + '\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS + '\xfc' # 0xE0 -> LATIN SMALL LETTER U WITH DIAERESIS + '\xf7' # 0xE1 -> DIVISION SIGN + 'S' # 0xE2 -> LATIN CAPITAL LETTER S + 'T' # 0xE3 -> LATIN CAPITAL LETTER T + 'U' # 0xE4 -> LATIN CAPITAL LETTER U + 'V' # 0xE5 -> LATIN CAPITAL LETTER V + 'W' # 0xE6 -> LATIN CAPITAL LETTER W + 'X' # 0xE7 -> LATIN CAPITAL LETTER X + 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y + 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z + '\xb2' # 0xEA -> SUPERSCRIPT TWO + '\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '#' # 0xEC -> NUMBER SIGN + '\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE + '0' # 0xF0 -> DIGIT ZERO + '1' # 0xF1 -> DIGIT ONE + '2' # 0xF2 -> DIGIT TWO + '3' # 0xF3 -> DIGIT THREE + '4' # 0xF4 -> DIGIT FOUR + '5' # 0xF5 -> DIGIT FIVE + '6' # 0xF6 -> DIGIT SIX + '7' # 0xF7 -> DIGIT SEVEN + '8' # 0xF8 -> DIGIT EIGHT + '9' # 0xF9 -> DIGIT NINE + '\xb3' # 0xFA -> SUPERSCRIPT THREE + '\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '"' # 0xFC -> QUOTATION MARK + '\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE + '\x9f' # 0xFF -> CONTROL +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp1125.py b/my_env/Lib/encodings/cp1125.py new file mode 100644 index 000000000..b1fd69deb --- /dev/null +++ b/my_env/Lib/encodings/cp1125.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec for CP1125 + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1125', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x0410, # CYRILLIC CAPITAL LETTER A + 0x0081: 0x0411, # CYRILLIC CAPITAL LETTER BE + 0x0082: 0x0412, # CYRILLIC CAPITAL LETTER VE + 0x0083: 0x0413, # CYRILLIC CAPITAL LETTER GHE + 0x0084: 0x0414, # CYRILLIC CAPITAL LETTER DE + 0x0085: 0x0415, # CYRILLIC CAPITAL LETTER IE + 0x0086: 0x0416, # CYRILLIC CAPITAL LETTER ZHE + 0x0087: 0x0417, # CYRILLIC CAPITAL LETTER ZE + 0x0088: 0x0418, # CYRILLIC CAPITAL LETTER I + 0x0089: 0x0419, # CYRILLIC CAPITAL LETTER SHORT I + 0x008a: 0x041a, # CYRILLIC CAPITAL LETTER KA + 0x008b: 0x041b, # CYRILLIC CAPITAL LETTER EL + 0x008c: 0x041c, # CYRILLIC CAPITAL LETTER EM + 0x008d: 0x041d, # CYRILLIC CAPITAL LETTER EN + 0x008e: 0x041e, # CYRILLIC CAPITAL LETTER O + 0x008f: 0x041f, # CYRILLIC CAPITAL LETTER PE + 0x0090: 0x0420, # CYRILLIC CAPITAL LETTER ER + 0x0091: 0x0421, # CYRILLIC CAPITAL LETTER ES + 0x0092: 0x0422, # CYRILLIC CAPITAL LETTER TE + 0x0093: 0x0423, # CYRILLIC CAPITAL LETTER U + 0x0094: 0x0424, # CYRILLIC CAPITAL LETTER EF + 0x0095: 0x0425, # CYRILLIC CAPITAL LETTER HA + 0x0096: 0x0426, # CYRILLIC CAPITAL LETTER TSE + 0x0097: 0x0427, # CYRILLIC CAPITAL LETTER CHE + 0x0098: 0x0428, # CYRILLIC CAPITAL LETTER SHA + 0x0099: 0x0429, # CYRILLIC CAPITAL LETTER SHCHA + 0x009a: 0x042a, # CYRILLIC CAPITAL LETTER HARD SIGN + 0x009b: 0x042b, # CYRILLIC CAPITAL LETTER YERU + 0x009c: 0x042c, # CYRILLIC CAPITAL LETTER SOFT SIGN + 0x009d: 0x042d, # CYRILLIC CAPITAL LETTER E + 0x009e: 0x042e, # CYRILLIC CAPITAL LETTER YU + 0x009f: 0x042f, # CYRILLIC CAPITAL LETTER YA + 0x00a0: 0x0430, # CYRILLIC SMALL LETTER A + 0x00a1: 0x0431, # CYRILLIC SMALL LETTER BE + 0x00a2: 0x0432, # CYRILLIC SMALL LETTER VE + 0x00a3: 0x0433, # CYRILLIC SMALL LETTER GHE + 0x00a4: 0x0434, # CYRILLIC SMALL LETTER DE + 0x00a5: 0x0435, # CYRILLIC SMALL LETTER IE + 0x00a6: 0x0436, # CYRILLIC SMALL LETTER ZHE + 0x00a7: 0x0437, # CYRILLIC SMALL LETTER ZE + 0x00a8: 0x0438, # CYRILLIC SMALL LETTER I + 0x00a9: 0x0439, # CYRILLIC SMALL LETTER SHORT I + 0x00aa: 0x043a, # CYRILLIC SMALL LETTER KA + 0x00ab: 0x043b, # CYRILLIC SMALL LETTER EL + 0x00ac: 0x043c, # CYRILLIC SMALL LETTER EM + 0x00ad: 0x043d, # CYRILLIC SMALL LETTER EN + 0x00ae: 0x043e, # CYRILLIC SMALL LETTER O + 0x00af: 0x043f, # CYRILLIC SMALL LETTER PE + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x0440, # CYRILLIC SMALL LETTER ER + 0x00e1: 0x0441, # CYRILLIC SMALL LETTER ES + 0x00e2: 0x0442, # CYRILLIC SMALL LETTER TE + 0x00e3: 0x0443, # CYRILLIC SMALL LETTER U + 0x00e4: 0x0444, # CYRILLIC SMALL LETTER EF + 0x00e5: 0x0445, # CYRILLIC SMALL LETTER HA + 0x00e6: 0x0446, # CYRILLIC SMALL LETTER TSE + 0x00e7: 0x0447, # CYRILLIC SMALL LETTER CHE + 0x00e8: 0x0448, # CYRILLIC SMALL LETTER SHA + 0x00e9: 0x0449, # CYRILLIC SMALL LETTER SHCHA + 0x00ea: 0x044a, # CYRILLIC SMALL LETTER HARD SIGN + 0x00eb: 0x044b, # CYRILLIC SMALL LETTER YERU + 0x00ec: 0x044c, # CYRILLIC SMALL LETTER SOFT SIGN + 0x00ed: 0x044d, # CYRILLIC SMALL LETTER E + 0x00ee: 0x044e, # CYRILLIC SMALL LETTER YU + 0x00ef: 0x044f, # CYRILLIC SMALL LETTER YA + 0x00f0: 0x0401, # CYRILLIC CAPITAL LETTER IO + 0x00f1: 0x0451, # CYRILLIC SMALL LETTER IO + 0x00f2: 0x0490, # CYRILLIC CAPITAL LETTER GHE WITH UPTURN + 0x00f3: 0x0491, # CYRILLIC SMALL LETTER GHE WITH UPTURN + 0x00f4: 0x0404, # CYRILLIC CAPITAL LETTER UKRAINIAN IE + 0x00f5: 0x0454, # CYRILLIC SMALL LETTER UKRAINIAN IE + 0x00f6: 0x0406, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + 0x00f7: 0x0456, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + 0x00f8: 0x0407, # CYRILLIC CAPITAL LETTER YI + 0x00f9: 0x0457, # CYRILLIC SMALL LETTER YI + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x2116, # NUMERO SIGN + 0x00fd: 0x00a4, # CURRENCY SIGN + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\u0410' # 0x0080 -> CYRILLIC CAPITAL LETTER A + '\u0411' # 0x0081 -> CYRILLIC CAPITAL LETTER BE + '\u0412' # 0x0082 -> CYRILLIC CAPITAL LETTER VE + '\u0413' # 0x0083 -> CYRILLIC CAPITAL LETTER GHE + '\u0414' # 0x0084 -> CYRILLIC CAPITAL LETTER DE + '\u0415' # 0x0085 -> CYRILLIC CAPITAL LETTER IE + '\u0416' # 0x0086 -> CYRILLIC CAPITAL LETTER ZHE + '\u0417' # 0x0087 -> CYRILLIC CAPITAL LETTER ZE + '\u0418' # 0x0088 -> CYRILLIC CAPITAL LETTER I + '\u0419' # 0x0089 -> CYRILLIC CAPITAL LETTER SHORT I + '\u041a' # 0x008a -> CYRILLIC CAPITAL LETTER KA + '\u041b' # 0x008b -> CYRILLIC CAPITAL LETTER EL + '\u041c' # 0x008c -> CYRILLIC CAPITAL LETTER EM + '\u041d' # 0x008d -> CYRILLIC CAPITAL LETTER EN + '\u041e' # 0x008e -> CYRILLIC CAPITAL LETTER O + '\u041f' # 0x008f -> CYRILLIC CAPITAL LETTER PE + '\u0420' # 0x0090 -> CYRILLIC CAPITAL LETTER ER + '\u0421' # 0x0091 -> CYRILLIC CAPITAL LETTER ES + '\u0422' # 0x0092 -> CYRILLIC CAPITAL LETTER TE + '\u0423' # 0x0093 -> CYRILLIC CAPITAL LETTER U + '\u0424' # 0x0094 -> CYRILLIC CAPITAL LETTER EF + '\u0425' # 0x0095 -> CYRILLIC CAPITAL LETTER HA + '\u0426' # 0x0096 -> CYRILLIC CAPITAL LETTER TSE + '\u0427' # 0x0097 -> CYRILLIC CAPITAL LETTER CHE + '\u0428' # 0x0098 -> CYRILLIC CAPITAL LETTER SHA + '\u0429' # 0x0099 -> CYRILLIC CAPITAL LETTER SHCHA + '\u042a' # 0x009a -> CYRILLIC CAPITAL LETTER HARD SIGN + '\u042b' # 0x009b -> CYRILLIC CAPITAL LETTER YERU + '\u042c' # 0x009c -> CYRILLIC CAPITAL LETTER SOFT SIGN + '\u042d' # 0x009d -> CYRILLIC CAPITAL LETTER E + '\u042e' # 0x009e -> CYRILLIC CAPITAL LETTER YU + '\u042f' # 0x009f -> CYRILLIC CAPITAL LETTER YA + '\u0430' # 0x00a0 -> CYRILLIC SMALL LETTER A + '\u0431' # 0x00a1 -> CYRILLIC SMALL LETTER BE + '\u0432' # 0x00a2 -> CYRILLIC SMALL LETTER VE + '\u0433' # 0x00a3 -> CYRILLIC SMALL LETTER GHE + '\u0434' # 0x00a4 -> CYRILLIC SMALL LETTER DE + '\u0435' # 0x00a5 -> CYRILLIC SMALL LETTER IE + '\u0436' # 0x00a6 -> CYRILLIC SMALL LETTER ZHE + '\u0437' # 0x00a7 -> CYRILLIC SMALL LETTER ZE + '\u0438' # 0x00a8 -> CYRILLIC SMALL LETTER I + '\u0439' # 0x00a9 -> CYRILLIC SMALL LETTER SHORT I + '\u043a' # 0x00aa -> CYRILLIC SMALL LETTER KA + '\u043b' # 0x00ab -> CYRILLIC SMALL LETTER EL + '\u043c' # 0x00ac -> CYRILLIC SMALL LETTER EM + '\u043d' # 0x00ad -> CYRILLIC SMALL LETTER EN + '\u043e' # 0x00ae -> CYRILLIC SMALL LETTER O + '\u043f' # 0x00af -> CYRILLIC SMALL LETTER PE + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\u258c' # 0x00dd -> LEFT HALF BLOCK + '\u2590' # 0x00de -> RIGHT HALF BLOCK + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\u0440' # 0x00e0 -> CYRILLIC SMALL LETTER ER + '\u0441' # 0x00e1 -> CYRILLIC SMALL LETTER ES + '\u0442' # 0x00e2 -> CYRILLIC SMALL LETTER TE + '\u0443' # 0x00e3 -> CYRILLIC SMALL LETTER U + '\u0444' # 0x00e4 -> CYRILLIC SMALL LETTER EF + '\u0445' # 0x00e5 -> CYRILLIC SMALL LETTER HA + '\u0446' # 0x00e6 -> CYRILLIC SMALL LETTER TSE + '\u0447' # 0x00e7 -> CYRILLIC SMALL LETTER CHE + '\u0448' # 0x00e8 -> CYRILLIC SMALL LETTER SHA + '\u0449' # 0x00e9 -> CYRILLIC SMALL LETTER SHCHA + '\u044a' # 0x00ea -> CYRILLIC SMALL LETTER HARD SIGN + '\u044b' # 0x00eb -> CYRILLIC SMALL LETTER YERU + '\u044c' # 0x00ec -> CYRILLIC SMALL LETTER SOFT SIGN + '\u044d' # 0x00ed -> CYRILLIC SMALL LETTER E + '\u044e' # 0x00ee -> CYRILLIC SMALL LETTER YU + '\u044f' # 0x00ef -> CYRILLIC SMALL LETTER YA + '\u0401' # 0x00f0 -> CYRILLIC CAPITAL LETTER IO + '\u0451' # 0x00f1 -> CYRILLIC SMALL LETTER IO + '\u0490' # 0x00f2 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN + '\u0491' # 0x00f3 -> CYRILLIC SMALL LETTER GHE WITH UPTURN + '\u0404' # 0x00f4 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE + '\u0454' # 0x00f5 -> CYRILLIC SMALL LETTER UKRAINIAN IE + '\u0406' # 0x00f6 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + '\u0456' # 0x00f7 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + '\u0407' # 0x00f8 -> CYRILLIC CAPITAL LETTER YI + '\u0457' # 0x00f9 -> CYRILLIC SMALL LETTER YI + '\xb7' # 0x00fa -> MIDDLE DOT + '\u221a' # 0x00fb -> SQUARE ROOT + '\u2116' # 0x00fc -> NUMERO SIGN + '\xa4' # 0x00fd -> CURRENCY SIGN + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a4: 0x00fd, # CURRENCY SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x0401: 0x00f0, # CYRILLIC CAPITAL LETTER IO + 0x0404: 0x00f4, # CYRILLIC CAPITAL LETTER UKRAINIAN IE + 0x0406: 0x00f6, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + 0x0407: 0x00f8, # CYRILLIC CAPITAL LETTER YI + 0x0410: 0x0080, # CYRILLIC CAPITAL LETTER A + 0x0411: 0x0081, # CYRILLIC CAPITAL LETTER BE + 0x0412: 0x0082, # CYRILLIC CAPITAL LETTER VE + 0x0413: 0x0083, # CYRILLIC CAPITAL LETTER GHE + 0x0414: 0x0084, # CYRILLIC CAPITAL LETTER DE + 0x0415: 0x0085, # CYRILLIC CAPITAL LETTER IE + 0x0416: 0x0086, # CYRILLIC CAPITAL LETTER ZHE + 0x0417: 0x0087, # CYRILLIC CAPITAL LETTER ZE + 0x0418: 0x0088, # CYRILLIC CAPITAL LETTER I + 0x0419: 0x0089, # CYRILLIC CAPITAL LETTER SHORT I + 0x041a: 0x008a, # CYRILLIC CAPITAL LETTER KA + 0x041b: 0x008b, # CYRILLIC CAPITAL LETTER EL + 0x041c: 0x008c, # CYRILLIC CAPITAL LETTER EM + 0x041d: 0x008d, # CYRILLIC CAPITAL LETTER EN + 0x041e: 0x008e, # CYRILLIC CAPITAL LETTER O + 0x041f: 0x008f, # CYRILLIC CAPITAL LETTER PE + 0x0420: 0x0090, # CYRILLIC CAPITAL LETTER ER + 0x0421: 0x0091, # CYRILLIC CAPITAL LETTER ES + 0x0422: 0x0092, # CYRILLIC CAPITAL LETTER TE + 0x0423: 0x0093, # CYRILLIC CAPITAL LETTER U + 0x0424: 0x0094, # CYRILLIC CAPITAL LETTER EF + 0x0425: 0x0095, # CYRILLIC CAPITAL LETTER HA + 0x0426: 0x0096, # CYRILLIC CAPITAL LETTER TSE + 0x0427: 0x0097, # CYRILLIC CAPITAL LETTER CHE + 0x0428: 0x0098, # CYRILLIC CAPITAL LETTER SHA + 0x0429: 0x0099, # CYRILLIC CAPITAL LETTER SHCHA + 0x042a: 0x009a, # CYRILLIC CAPITAL LETTER HARD SIGN + 0x042b: 0x009b, # CYRILLIC CAPITAL LETTER YERU + 0x042c: 0x009c, # CYRILLIC CAPITAL LETTER SOFT SIGN + 0x042d: 0x009d, # CYRILLIC CAPITAL LETTER E + 0x042e: 0x009e, # CYRILLIC CAPITAL LETTER YU + 0x042f: 0x009f, # CYRILLIC CAPITAL LETTER YA + 0x0430: 0x00a0, # CYRILLIC SMALL LETTER A + 0x0431: 0x00a1, # CYRILLIC SMALL LETTER BE + 0x0432: 0x00a2, # CYRILLIC SMALL LETTER VE + 0x0433: 0x00a3, # CYRILLIC SMALL LETTER GHE + 0x0434: 0x00a4, # CYRILLIC SMALL LETTER DE + 0x0435: 0x00a5, # CYRILLIC SMALL LETTER IE + 0x0436: 0x00a6, # CYRILLIC SMALL LETTER ZHE + 0x0437: 0x00a7, # CYRILLIC SMALL LETTER ZE + 0x0438: 0x00a8, # CYRILLIC SMALL LETTER I + 0x0439: 0x00a9, # CYRILLIC SMALL LETTER SHORT I + 0x043a: 0x00aa, # CYRILLIC SMALL LETTER KA + 0x043b: 0x00ab, # CYRILLIC SMALL LETTER EL + 0x043c: 0x00ac, # CYRILLIC SMALL LETTER EM + 0x043d: 0x00ad, # CYRILLIC SMALL LETTER EN + 0x043e: 0x00ae, # CYRILLIC SMALL LETTER O + 0x043f: 0x00af, # CYRILLIC SMALL LETTER PE + 0x0440: 0x00e0, # CYRILLIC SMALL LETTER ER + 0x0441: 0x00e1, # CYRILLIC SMALL LETTER ES + 0x0442: 0x00e2, # CYRILLIC SMALL LETTER TE + 0x0443: 0x00e3, # CYRILLIC SMALL LETTER U + 0x0444: 0x00e4, # CYRILLIC SMALL LETTER EF + 0x0445: 0x00e5, # CYRILLIC SMALL LETTER HA + 0x0446: 0x00e6, # CYRILLIC SMALL LETTER TSE + 0x0447: 0x00e7, # CYRILLIC SMALL LETTER CHE + 0x0448: 0x00e8, # CYRILLIC SMALL LETTER SHA + 0x0449: 0x00e9, # CYRILLIC SMALL LETTER SHCHA + 0x044a: 0x00ea, # CYRILLIC SMALL LETTER HARD SIGN + 0x044b: 0x00eb, # CYRILLIC SMALL LETTER YERU + 0x044c: 0x00ec, # CYRILLIC SMALL LETTER SOFT SIGN + 0x044d: 0x00ed, # CYRILLIC SMALL LETTER E + 0x044e: 0x00ee, # CYRILLIC SMALL LETTER YU + 0x044f: 0x00ef, # CYRILLIC SMALL LETTER YA + 0x0451: 0x00f1, # CYRILLIC SMALL LETTER IO + 0x0454: 0x00f5, # CYRILLIC SMALL LETTER UKRAINIAN IE + 0x0456: 0x00f7, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + 0x0457: 0x00f9, # CYRILLIC SMALL LETTER YI + 0x0490: 0x00f2, # CYRILLIC CAPITAL LETTER GHE WITH UPTURN + 0x0491: 0x00f3, # CYRILLIC SMALL LETTER GHE WITH UPTURN + 0x2116: 0x00fc, # NUMERO SIGN + 0x221a: 0x00fb, # SQUARE ROOT + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp1140.py b/my_env/Lib/encodings/cp1140.py new file mode 100644 index 000000000..0a919d837 --- /dev/null +++ b/my_env/Lib/encodings/cp1140.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1140 generated from 'python-mappings/CP1140.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1140', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x9c' # 0x04 -> CONTROL + '\t' # 0x05 -> HORIZONTAL TABULATION + '\x86' # 0x06 -> CONTROL + '\x7f' # 0x07 -> DELETE + '\x97' # 0x08 -> CONTROL + '\x8d' # 0x09 -> CONTROL + '\x8e' # 0x0A -> CONTROL + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x9d' # 0x14 -> CONTROL + '\x85' # 0x15 -> CONTROL + '\x08' # 0x16 -> BACKSPACE + '\x87' # 0x17 -> CONTROL + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x92' # 0x1A -> CONTROL + '\x8f' # 0x1B -> CONTROL + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + '\x80' # 0x20 -> CONTROL + '\x81' # 0x21 -> CONTROL + '\x82' # 0x22 -> CONTROL + '\x83' # 0x23 -> CONTROL + '\x84' # 0x24 -> CONTROL + '\n' # 0x25 -> LINE FEED + '\x17' # 0x26 -> END OF TRANSMISSION BLOCK + '\x1b' # 0x27 -> ESCAPE + '\x88' # 0x28 -> CONTROL + '\x89' # 0x29 -> CONTROL + '\x8a' # 0x2A -> CONTROL + '\x8b' # 0x2B -> CONTROL + '\x8c' # 0x2C -> CONTROL + '\x05' # 0x2D -> ENQUIRY + '\x06' # 0x2E -> ACKNOWLEDGE + '\x07' # 0x2F -> BELL + '\x90' # 0x30 -> CONTROL + '\x91' # 0x31 -> CONTROL + '\x16' # 0x32 -> SYNCHRONOUS IDLE + '\x93' # 0x33 -> CONTROL + '\x94' # 0x34 -> CONTROL + '\x95' # 0x35 -> CONTROL + '\x96' # 0x36 -> CONTROL + '\x04' # 0x37 -> END OF TRANSMISSION + '\x98' # 0x38 -> CONTROL + '\x99' # 0x39 -> CONTROL + '\x9a' # 0x3A -> CONTROL + '\x9b' # 0x3B -> CONTROL + '\x14' # 0x3C -> DEVICE CONTROL FOUR + '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE + '\x9e' # 0x3E -> CONTROL + '\x1a' # 0x3F -> SUBSTITUTE + ' ' # 0x40 -> SPACE + '\xa0' # 0x41 -> NO-BREAK SPACE + '\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE + '\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE + '\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA + '\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE + '\xa2' # 0x4A -> CENT SIGN + '.' # 0x4B -> FULL STOP + '<' # 0x4C -> LESS-THAN SIGN + '(' # 0x4D -> LEFT PARENTHESIS + '+' # 0x4E -> PLUS SIGN + '|' # 0x4F -> VERTICAL LINE + '&' # 0x50 -> AMPERSAND + '\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE + '\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS + '\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE + '\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) + '!' # 0x5A -> EXCLAMATION MARK + '$' # 0x5B -> DOLLAR SIGN + '*' # 0x5C -> ASTERISK + ')' # 0x5D -> RIGHT PARENTHESIS + ';' # 0x5E -> SEMICOLON + '\xac' # 0x5F -> NOT SIGN + '-' # 0x60 -> HYPHEN-MINUS + '/' # 0x61 -> SOLIDUS + '\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE + '\xa6' # 0x6A -> BROKEN BAR + ',' # 0x6B -> COMMA + '%' # 0x6C -> PERCENT SIGN + '_' # 0x6D -> LOW LINE + '>' # 0x6E -> GREATER-THAN SIGN + '?' # 0x6F -> QUESTION MARK + '\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE + '\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE + '`' # 0x79 -> GRAVE ACCENT + ':' # 0x7A -> COLON + '#' # 0x7B -> NUMBER SIGN + '@' # 0x7C -> COMMERCIAL AT + "'" # 0x7D -> APOSTROPHE + '=' # 0x7E -> EQUALS SIGN + '"' # 0x7F -> QUOTATION MARK + '\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE + 'a' # 0x81 -> LATIN SMALL LETTER A + 'b' # 0x82 -> LATIN SMALL LETTER B + 'c' # 0x83 -> LATIN SMALL LETTER C + 'd' # 0x84 -> LATIN SMALL LETTER D + 'e' # 0x85 -> LATIN SMALL LETTER E + 'f' # 0x86 -> LATIN SMALL LETTER F + 'g' # 0x87 -> LATIN SMALL LETTER G + 'h' # 0x88 -> LATIN SMALL LETTER H + 'i' # 0x89 -> LATIN SMALL LETTER I + '\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xf0' # 0x8C -> LATIN SMALL LETTER ETH (ICELANDIC) + '\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE + '\xfe' # 0x8E -> LATIN SMALL LETTER THORN (ICELANDIC) + '\xb1' # 0x8F -> PLUS-MINUS SIGN + '\xb0' # 0x90 -> DEGREE SIGN + 'j' # 0x91 -> LATIN SMALL LETTER J + 'k' # 0x92 -> LATIN SMALL LETTER K + 'l' # 0x93 -> LATIN SMALL LETTER L + 'm' # 0x94 -> LATIN SMALL LETTER M + 'n' # 0x95 -> LATIN SMALL LETTER N + 'o' # 0x96 -> LATIN SMALL LETTER O + 'p' # 0x97 -> LATIN SMALL LETTER P + 'q' # 0x98 -> LATIN SMALL LETTER Q + 'r' # 0x99 -> LATIN SMALL LETTER R + '\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR + '\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR + '\xe6' # 0x9C -> LATIN SMALL LIGATURE AE + '\xb8' # 0x9D -> CEDILLA + '\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE + '\u20ac' # 0x9F -> EURO SIGN + '\xb5' # 0xA0 -> MICRO SIGN + '~' # 0xA1 -> TILDE + 's' # 0xA2 -> LATIN SMALL LETTER S + 't' # 0xA3 -> LATIN SMALL LETTER T + 'u' # 0xA4 -> LATIN SMALL LETTER U + 'v' # 0xA5 -> LATIN SMALL LETTER V + 'w' # 0xA6 -> LATIN SMALL LETTER W + 'x' # 0xA7 -> LATIN SMALL LETTER X + 'y' # 0xA8 -> LATIN SMALL LETTER Y + 'z' # 0xA9 -> LATIN SMALL LETTER Z + '\xa1' # 0xAA -> INVERTED EXCLAMATION MARK + '\xbf' # 0xAB -> INVERTED QUESTION MARK + '\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC) + '\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC) + '\xae' # 0xAF -> REGISTERED SIGN + '^' # 0xB0 -> CIRCUMFLEX ACCENT + '\xa3' # 0xB1 -> POUND SIGN + '\xa5' # 0xB2 -> YEN SIGN + '\xb7' # 0xB3 -> MIDDLE DOT + '\xa9' # 0xB4 -> COPYRIGHT SIGN + '\xa7' # 0xB5 -> SECTION SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF + '\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS + '[' # 0xBA -> LEFT SQUARE BRACKET + ']' # 0xBB -> RIGHT SQUARE BRACKET + '\xaf' # 0xBC -> MACRON + '\xa8' # 0xBD -> DIAERESIS + '\xb4' # 0xBE -> ACUTE ACCENT + '\xd7' # 0xBF -> MULTIPLICATION SIGN + '{' # 0xC0 -> LEFT CURLY BRACKET + 'A' # 0xC1 -> LATIN CAPITAL LETTER A + 'B' # 0xC2 -> LATIN CAPITAL LETTER B + 'C' # 0xC3 -> LATIN CAPITAL LETTER C + 'D' # 0xC4 -> LATIN CAPITAL LETTER D + 'E' # 0xC5 -> LATIN CAPITAL LETTER E + 'F' # 0xC6 -> LATIN CAPITAL LETTER F + 'G' # 0xC7 -> LATIN CAPITAL LETTER G + 'H' # 0xC8 -> LATIN CAPITAL LETTER H + 'I' # 0xC9 -> LATIN CAPITAL LETTER I + '\xad' # 0xCA -> SOFT HYPHEN + '\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0xCC -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE + '\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE + '}' # 0xD0 -> RIGHT CURLY BRACKET + 'J' # 0xD1 -> LATIN CAPITAL LETTER J + 'K' # 0xD2 -> LATIN CAPITAL LETTER K + 'L' # 0xD3 -> LATIN CAPITAL LETTER L + 'M' # 0xD4 -> LATIN CAPITAL LETTER M + 'N' # 0xD5 -> LATIN CAPITAL LETTER N + 'O' # 0xD6 -> LATIN CAPITAL LETTER O + 'P' # 0xD7 -> LATIN CAPITAL LETTER P + 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q + 'R' # 0xD9 -> LATIN CAPITAL LETTER R + '\xb9' # 0xDA -> SUPERSCRIPT ONE + '\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xDC -> LATIN SMALL LETTER U WITH DIAERESIS + '\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE + '\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS + '\\' # 0xE0 -> REVERSE SOLIDUS + '\xf7' # 0xE1 -> DIVISION SIGN + 'S' # 0xE2 -> LATIN CAPITAL LETTER S + 'T' # 0xE3 -> LATIN CAPITAL LETTER T + 'U' # 0xE4 -> LATIN CAPITAL LETTER U + 'V' # 0xE5 -> LATIN CAPITAL LETTER V + 'W' # 0xE6 -> LATIN CAPITAL LETTER W + 'X' # 0xE7 -> LATIN CAPITAL LETTER X + 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y + 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z + '\xb2' # 0xEA -> SUPERSCRIPT TWO + '\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd6' # 0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE + '0' # 0xF0 -> DIGIT ZERO + '1' # 0xF1 -> DIGIT ONE + '2' # 0xF2 -> DIGIT TWO + '3' # 0xF3 -> DIGIT THREE + '4' # 0xF4 -> DIGIT FOUR + '5' # 0xF5 -> DIGIT FIVE + '6' # 0xF6 -> DIGIT SIX + '7' # 0xF7 -> DIGIT SEVEN + '8' # 0xF8 -> DIGIT EIGHT + '9' # 0xF9 -> DIGIT NINE + '\xb3' # 0xFA -> SUPERSCRIPT THREE + '\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE + '\x9f' # 0xFF -> CONTROL +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp1250.py b/my_env/Lib/encodings/cp1250.py new file mode 100644 index 000000000..c2c83aaf3 --- /dev/null +++ b/my_env/Lib/encodings/cp1250.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1250 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1250.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1250', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u20ac' # 0x80 -> EURO SIGN + '\ufffe' # 0x81 -> UNDEFINED + '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + '\ufffe' # 0x83 -> UNDEFINED + '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\u2020' # 0x86 -> DAGGER + '\u2021' # 0x87 -> DOUBLE DAGGER + '\ufffe' # 0x88 -> UNDEFINED + '\u2030' # 0x89 -> PER MILLE SIGN + '\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON + '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u015a' # 0x8C -> LATIN CAPITAL LETTER S WITH ACUTE + '\u0164' # 0x8D -> LATIN CAPITAL LETTER T WITH CARON + '\u017d' # 0x8E -> LATIN CAPITAL LETTER Z WITH CARON + '\u0179' # 0x8F -> LATIN CAPITAL LETTER Z WITH ACUTE + '\ufffe' # 0x90 -> UNDEFINED + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\ufffe' # 0x98 -> UNDEFINED + '\u2122' # 0x99 -> TRADE MARK SIGN + '\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON + '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\u015b' # 0x9C -> LATIN SMALL LETTER S WITH ACUTE + '\u0165' # 0x9D -> LATIN SMALL LETTER T WITH CARON + '\u017e' # 0x9E -> LATIN SMALL LETTER Z WITH CARON + '\u017a' # 0x9F -> LATIN SMALL LETTER Z WITH ACUTE + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u02c7' # 0xA1 -> CARON + '\u02d8' # 0xA2 -> BREVE + '\u0141' # 0xA3 -> LATIN CAPITAL LETTER L WITH STROKE + '\xa4' # 0xA4 -> CURRENCY SIGN + '\u0104' # 0xA5 -> LATIN CAPITAL LETTER A WITH OGONEK + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u015e' # 0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\u017b' # 0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\u02db' # 0xB2 -> OGONEK + '\u0142' # 0xB3 -> LATIN SMALL LETTER L WITH STROKE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\xb8' # 0xB8 -> CEDILLA + '\u0105' # 0xB9 -> LATIN SMALL LETTER A WITH OGONEK + '\u015f' # 0xBA -> LATIN SMALL LETTER S WITH CEDILLA + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u013d' # 0xBC -> LATIN CAPITAL LETTER L WITH CARON + '\u02dd' # 0xBD -> DOUBLE ACUTE ACCENT + '\u013e' # 0xBE -> LATIN SMALL LETTER L WITH CARON + '\u017c' # 0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE + '\u0154' # 0xC0 -> LATIN CAPITAL LETTER R WITH ACUTE + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\u0139' # 0xC5 -> LATIN CAPITAL LETTER L WITH ACUTE + '\u0106' # 0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE + '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\u0118' # 0xCA -> LATIN CAPITAL LETTER E WITH OGONEK + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\u011a' # 0xCC -> LATIN CAPITAL LETTER E WITH CARON + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\u010e' # 0xCF -> LATIN CAPITAL LETTER D WITH CARON + '\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE + '\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE + '\u0147' # 0xD2 -> LATIN CAPITAL LETTER N WITH CARON + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\u0150' # 0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\u0158' # 0xD8 -> LATIN CAPITAL LETTER R WITH CARON + '\u016e' # 0xD9 -> LATIN CAPITAL LETTER U WITH RING ABOVE + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\u0170' # 0xDB -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + '\u0162' # 0xDE -> LATIN CAPITAL LETTER T WITH CEDILLA + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + '\u0155' # 0xE0 -> LATIN SMALL LETTER R WITH ACUTE + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\u013a' # 0xE5 -> LATIN SMALL LETTER L WITH ACUTE + '\u0107' # 0xE6 -> LATIN SMALL LETTER C WITH ACUTE + '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\u0119' # 0xEA -> LATIN SMALL LETTER E WITH OGONEK + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\u011b' # 0xEC -> LATIN SMALL LETTER E WITH CARON + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\u010f' # 0xEF -> LATIN SMALL LETTER D WITH CARON + '\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE + '\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE + '\u0148' # 0xF2 -> LATIN SMALL LETTER N WITH CARON + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\u0151' # 0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0xF7 -> DIVISION SIGN + '\u0159' # 0xF8 -> LATIN SMALL LETTER R WITH CARON + '\u016f' # 0xF9 -> LATIN SMALL LETTER U WITH RING ABOVE + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\u0171' # 0xFB -> LATIN SMALL LETTER U WITH DOUBLE ACUTE + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + '\u0163' # 0xFE -> LATIN SMALL LETTER T WITH CEDILLA + '\u02d9' # 0xFF -> DOT ABOVE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp1251.py b/my_env/Lib/encodings/cp1251.py new file mode 100644 index 000000000..22bc66002 --- /dev/null +++ b/my_env/Lib/encodings/cp1251.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1251 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1251', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u0402' # 0x80 -> CYRILLIC CAPITAL LETTER DJE + '\u0403' # 0x81 -> CYRILLIC CAPITAL LETTER GJE + '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + '\u0453' # 0x83 -> CYRILLIC SMALL LETTER GJE + '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\u2020' # 0x86 -> DAGGER + '\u2021' # 0x87 -> DOUBLE DAGGER + '\u20ac' # 0x88 -> EURO SIGN + '\u2030' # 0x89 -> PER MILLE SIGN + '\u0409' # 0x8A -> CYRILLIC CAPITAL LETTER LJE + '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u040a' # 0x8C -> CYRILLIC CAPITAL LETTER NJE + '\u040c' # 0x8D -> CYRILLIC CAPITAL LETTER KJE + '\u040b' # 0x8E -> CYRILLIC CAPITAL LETTER TSHE + '\u040f' # 0x8F -> CYRILLIC CAPITAL LETTER DZHE + '\u0452' # 0x90 -> CYRILLIC SMALL LETTER DJE + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\ufffe' # 0x98 -> UNDEFINED + '\u2122' # 0x99 -> TRADE MARK SIGN + '\u0459' # 0x9A -> CYRILLIC SMALL LETTER LJE + '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\u045a' # 0x9C -> CYRILLIC SMALL LETTER NJE + '\u045c' # 0x9D -> CYRILLIC SMALL LETTER KJE + '\u045b' # 0x9E -> CYRILLIC SMALL LETTER TSHE + '\u045f' # 0x9F -> CYRILLIC SMALL LETTER DZHE + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u040e' # 0xA1 -> CYRILLIC CAPITAL LETTER SHORT U + '\u045e' # 0xA2 -> CYRILLIC SMALL LETTER SHORT U + '\u0408' # 0xA3 -> CYRILLIC CAPITAL LETTER JE + '\xa4' # 0xA4 -> CURRENCY SIGN + '\u0490' # 0xA5 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\u0401' # 0xA8 -> CYRILLIC CAPITAL LETTER IO + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u0404' # 0xAA -> CYRILLIC CAPITAL LETTER UKRAINIAN IE + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\u0407' # 0xAF -> CYRILLIC CAPITAL LETTER YI + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\u0406' # 0xB2 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + '\u0456' # 0xB3 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + '\u0491' # 0xB4 -> CYRILLIC SMALL LETTER GHE WITH UPTURN + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\u0451' # 0xB8 -> CYRILLIC SMALL LETTER IO + '\u2116' # 0xB9 -> NUMERO SIGN + '\u0454' # 0xBA -> CYRILLIC SMALL LETTER UKRAINIAN IE + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u0458' # 0xBC -> CYRILLIC SMALL LETTER JE + '\u0405' # 0xBD -> CYRILLIC CAPITAL LETTER DZE + '\u0455' # 0xBE -> CYRILLIC SMALL LETTER DZE + '\u0457' # 0xBF -> CYRILLIC SMALL LETTER YI + '\u0410' # 0xC0 -> CYRILLIC CAPITAL LETTER A + '\u0411' # 0xC1 -> CYRILLIC CAPITAL LETTER BE + '\u0412' # 0xC2 -> CYRILLIC CAPITAL LETTER VE + '\u0413' # 0xC3 -> CYRILLIC CAPITAL LETTER GHE + '\u0414' # 0xC4 -> CYRILLIC CAPITAL LETTER DE + '\u0415' # 0xC5 -> CYRILLIC CAPITAL LETTER IE + '\u0416' # 0xC6 -> CYRILLIC CAPITAL LETTER ZHE + '\u0417' # 0xC7 -> CYRILLIC CAPITAL LETTER ZE + '\u0418' # 0xC8 -> CYRILLIC CAPITAL LETTER I + '\u0419' # 0xC9 -> CYRILLIC CAPITAL LETTER SHORT I + '\u041a' # 0xCA -> CYRILLIC CAPITAL LETTER KA + '\u041b' # 0xCB -> CYRILLIC CAPITAL LETTER EL + '\u041c' # 0xCC -> CYRILLIC CAPITAL LETTER EM + '\u041d' # 0xCD -> CYRILLIC CAPITAL LETTER EN + '\u041e' # 0xCE -> CYRILLIC CAPITAL LETTER O + '\u041f' # 0xCF -> CYRILLIC CAPITAL LETTER PE + '\u0420' # 0xD0 -> CYRILLIC CAPITAL LETTER ER + '\u0421' # 0xD1 -> CYRILLIC CAPITAL LETTER ES + '\u0422' # 0xD2 -> CYRILLIC CAPITAL LETTER TE + '\u0423' # 0xD3 -> CYRILLIC CAPITAL LETTER U + '\u0424' # 0xD4 -> CYRILLIC CAPITAL LETTER EF + '\u0425' # 0xD5 -> CYRILLIC CAPITAL LETTER HA + '\u0426' # 0xD6 -> CYRILLIC CAPITAL LETTER TSE + '\u0427' # 0xD7 -> CYRILLIC CAPITAL LETTER CHE + '\u0428' # 0xD8 -> CYRILLIC CAPITAL LETTER SHA + '\u0429' # 0xD9 -> CYRILLIC CAPITAL LETTER SHCHA + '\u042a' # 0xDA -> CYRILLIC CAPITAL LETTER HARD SIGN + '\u042b' # 0xDB -> CYRILLIC CAPITAL LETTER YERU + '\u042c' # 0xDC -> CYRILLIC CAPITAL LETTER SOFT SIGN + '\u042d' # 0xDD -> CYRILLIC CAPITAL LETTER E + '\u042e' # 0xDE -> CYRILLIC CAPITAL LETTER YU + '\u042f' # 0xDF -> CYRILLIC CAPITAL LETTER YA + '\u0430' # 0xE0 -> CYRILLIC SMALL LETTER A + '\u0431' # 0xE1 -> CYRILLIC SMALL LETTER BE + '\u0432' # 0xE2 -> CYRILLIC SMALL LETTER VE + '\u0433' # 0xE3 -> CYRILLIC SMALL LETTER GHE + '\u0434' # 0xE4 -> CYRILLIC SMALL LETTER DE + '\u0435' # 0xE5 -> CYRILLIC SMALL LETTER IE + '\u0436' # 0xE6 -> CYRILLIC SMALL LETTER ZHE + '\u0437' # 0xE7 -> CYRILLIC SMALL LETTER ZE + '\u0438' # 0xE8 -> CYRILLIC SMALL LETTER I + '\u0439' # 0xE9 -> CYRILLIC SMALL LETTER SHORT I + '\u043a' # 0xEA -> CYRILLIC SMALL LETTER KA + '\u043b' # 0xEB -> CYRILLIC SMALL LETTER EL + '\u043c' # 0xEC -> CYRILLIC SMALL LETTER EM + '\u043d' # 0xED -> CYRILLIC SMALL LETTER EN + '\u043e' # 0xEE -> CYRILLIC SMALL LETTER O + '\u043f' # 0xEF -> CYRILLIC SMALL LETTER PE + '\u0440' # 0xF0 -> CYRILLIC SMALL LETTER ER + '\u0441' # 0xF1 -> CYRILLIC SMALL LETTER ES + '\u0442' # 0xF2 -> CYRILLIC SMALL LETTER TE + '\u0443' # 0xF3 -> CYRILLIC SMALL LETTER U + '\u0444' # 0xF4 -> CYRILLIC SMALL LETTER EF + '\u0445' # 0xF5 -> CYRILLIC SMALL LETTER HA + '\u0446' # 0xF6 -> CYRILLIC SMALL LETTER TSE + '\u0447' # 0xF7 -> CYRILLIC SMALL LETTER CHE + '\u0448' # 0xF8 -> CYRILLIC SMALL LETTER SHA + '\u0449' # 0xF9 -> CYRILLIC SMALL LETTER SHCHA + '\u044a' # 0xFA -> CYRILLIC SMALL LETTER HARD SIGN + '\u044b' # 0xFB -> CYRILLIC SMALL LETTER YERU + '\u044c' # 0xFC -> CYRILLIC SMALL LETTER SOFT SIGN + '\u044d' # 0xFD -> CYRILLIC SMALL LETTER E + '\u044e' # 0xFE -> CYRILLIC SMALL LETTER YU + '\u044f' # 0xFF -> CYRILLIC SMALL LETTER YA +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp1252.py b/my_env/Lib/encodings/cp1252.py new file mode 100644 index 000000000..c0e8088ea --- /dev/null +++ b/my_env/Lib/encodings/cp1252.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1252 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1252', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u20ac' # 0x80 -> EURO SIGN + '\ufffe' # 0x81 -> UNDEFINED + '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK + '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\u2020' # 0x86 -> DAGGER + '\u2021' # 0x87 -> DOUBLE DAGGER + '\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT + '\u2030' # 0x89 -> PER MILLE SIGN + '\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON + '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE + '\ufffe' # 0x8D -> UNDEFINED + '\u017d' # 0x8E -> LATIN CAPITAL LETTER Z WITH CARON + '\ufffe' # 0x8F -> UNDEFINED + '\ufffe' # 0x90 -> UNDEFINED + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\u02dc' # 0x98 -> SMALL TILDE + '\u2122' # 0x99 -> TRADE MARK SIGN + '\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON + '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\u0153' # 0x9C -> LATIN SMALL LIGATURE OE + '\ufffe' # 0x9D -> UNDEFINED + '\u017e' # 0x9E -> LATIN SMALL LETTER Z WITH CARON + '\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa4' # 0xA4 -> CURRENCY SIGN + '\xa5' # 0xA5 -> YEN SIGN + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\xaf' # 0xAF -> MACRON + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\xb8' # 0xB8 -> CEDILLA + '\xb9' # 0xB9 -> SUPERSCRIPT ONE + '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + '\xbf' # 0xBF -> INVERTED QUESTION MARK + '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH + '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xde' # 0xDE -> LATIN CAPITAL LETTER THORN + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe6' # 0xE6 -> LATIN SMALL LETTER AE + '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + '\xf0' # 0xF0 -> LATIN SMALL LETTER ETH + '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0xF7 -> DIVISION SIGN + '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + '\xfe' # 0xFE -> LATIN SMALL LETTER THORN + '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp1253.py b/my_env/Lib/encodings/cp1253.py new file mode 100644 index 000000000..ec9c0972d --- /dev/null +++ b/my_env/Lib/encodings/cp1253.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1253 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1253.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1253', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u20ac' # 0x80 -> EURO SIGN + '\ufffe' # 0x81 -> UNDEFINED + '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK + '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\u2020' # 0x86 -> DAGGER + '\u2021' # 0x87 -> DOUBLE DAGGER + '\ufffe' # 0x88 -> UNDEFINED + '\u2030' # 0x89 -> PER MILLE SIGN + '\ufffe' # 0x8A -> UNDEFINED + '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\ufffe' # 0x8C -> UNDEFINED + '\ufffe' # 0x8D -> UNDEFINED + '\ufffe' # 0x8E -> UNDEFINED + '\ufffe' # 0x8F -> UNDEFINED + '\ufffe' # 0x90 -> UNDEFINED + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\ufffe' # 0x98 -> UNDEFINED + '\u2122' # 0x99 -> TRADE MARK SIGN + '\ufffe' # 0x9A -> UNDEFINED + '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\ufffe' # 0x9C -> UNDEFINED + '\ufffe' # 0x9D -> UNDEFINED + '\ufffe' # 0x9E -> UNDEFINED + '\ufffe' # 0x9F -> UNDEFINED + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u0385' # 0xA1 -> GREEK DIALYTIKA TONOS + '\u0386' # 0xA2 -> GREEK CAPITAL LETTER ALPHA WITH TONOS + '\xa3' # 0xA3 -> POUND SIGN + '\xa4' # 0xA4 -> CURRENCY SIGN + '\xa5' # 0xA5 -> YEN SIGN + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\ufffe' # 0xAA -> UNDEFINED + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\u2015' # 0xAF -> HORIZONTAL BAR + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\u0384' # 0xB4 -> GREEK TONOS + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\u0388' # 0xB8 -> GREEK CAPITAL LETTER EPSILON WITH TONOS + '\u0389' # 0xB9 -> GREEK CAPITAL LETTER ETA WITH TONOS + '\u038a' # 0xBA -> GREEK CAPITAL LETTER IOTA WITH TONOS + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u038c' # 0xBC -> GREEK CAPITAL LETTER OMICRON WITH TONOS + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\u038e' # 0xBE -> GREEK CAPITAL LETTER UPSILON WITH TONOS + '\u038f' # 0xBF -> GREEK CAPITAL LETTER OMEGA WITH TONOS + '\u0390' # 0xC0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + '\u0391' # 0xC1 -> GREEK CAPITAL LETTER ALPHA + '\u0392' # 0xC2 -> GREEK CAPITAL LETTER BETA + '\u0393' # 0xC3 -> GREEK CAPITAL LETTER GAMMA + '\u0394' # 0xC4 -> GREEK CAPITAL LETTER DELTA + '\u0395' # 0xC5 -> GREEK CAPITAL LETTER EPSILON + '\u0396' # 0xC6 -> GREEK CAPITAL LETTER ZETA + '\u0397' # 0xC7 -> GREEK CAPITAL LETTER ETA + '\u0398' # 0xC8 -> GREEK CAPITAL LETTER THETA + '\u0399' # 0xC9 -> GREEK CAPITAL LETTER IOTA + '\u039a' # 0xCA -> GREEK CAPITAL LETTER KAPPA + '\u039b' # 0xCB -> GREEK CAPITAL LETTER LAMDA + '\u039c' # 0xCC -> GREEK CAPITAL LETTER MU + '\u039d' # 0xCD -> GREEK CAPITAL LETTER NU + '\u039e' # 0xCE -> GREEK CAPITAL LETTER XI + '\u039f' # 0xCF -> GREEK CAPITAL LETTER OMICRON + '\u03a0' # 0xD0 -> GREEK CAPITAL LETTER PI + '\u03a1' # 0xD1 -> GREEK CAPITAL LETTER RHO + '\ufffe' # 0xD2 -> UNDEFINED + '\u03a3' # 0xD3 -> GREEK CAPITAL LETTER SIGMA + '\u03a4' # 0xD4 -> GREEK CAPITAL LETTER TAU + '\u03a5' # 0xD5 -> GREEK CAPITAL LETTER UPSILON + '\u03a6' # 0xD6 -> GREEK CAPITAL LETTER PHI + '\u03a7' # 0xD7 -> GREEK CAPITAL LETTER CHI + '\u03a8' # 0xD8 -> GREEK CAPITAL LETTER PSI + '\u03a9' # 0xD9 -> GREEK CAPITAL LETTER OMEGA + '\u03aa' # 0xDA -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + '\u03ab' # 0xDB -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + '\u03ac' # 0xDC -> GREEK SMALL LETTER ALPHA WITH TONOS + '\u03ad' # 0xDD -> GREEK SMALL LETTER EPSILON WITH TONOS + '\u03ae' # 0xDE -> GREEK SMALL LETTER ETA WITH TONOS + '\u03af' # 0xDF -> GREEK SMALL LETTER IOTA WITH TONOS + '\u03b0' # 0xE0 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + '\u03b1' # 0xE1 -> GREEK SMALL LETTER ALPHA + '\u03b2' # 0xE2 -> GREEK SMALL LETTER BETA + '\u03b3' # 0xE3 -> GREEK SMALL LETTER GAMMA + '\u03b4' # 0xE4 -> GREEK SMALL LETTER DELTA + '\u03b5' # 0xE5 -> GREEK SMALL LETTER EPSILON + '\u03b6' # 0xE6 -> GREEK SMALL LETTER ZETA + '\u03b7' # 0xE7 -> GREEK SMALL LETTER ETA + '\u03b8' # 0xE8 -> GREEK SMALL LETTER THETA + '\u03b9' # 0xE9 -> GREEK SMALL LETTER IOTA + '\u03ba' # 0xEA -> GREEK SMALL LETTER KAPPA + '\u03bb' # 0xEB -> GREEK SMALL LETTER LAMDA + '\u03bc' # 0xEC -> GREEK SMALL LETTER MU + '\u03bd' # 0xED -> GREEK SMALL LETTER NU + '\u03be' # 0xEE -> GREEK SMALL LETTER XI + '\u03bf' # 0xEF -> GREEK SMALL LETTER OMICRON + '\u03c0' # 0xF0 -> GREEK SMALL LETTER PI + '\u03c1' # 0xF1 -> GREEK SMALL LETTER RHO + '\u03c2' # 0xF2 -> GREEK SMALL LETTER FINAL SIGMA + '\u03c3' # 0xF3 -> GREEK SMALL LETTER SIGMA + '\u03c4' # 0xF4 -> GREEK SMALL LETTER TAU + '\u03c5' # 0xF5 -> GREEK SMALL LETTER UPSILON + '\u03c6' # 0xF6 -> GREEK SMALL LETTER PHI + '\u03c7' # 0xF7 -> GREEK SMALL LETTER CHI + '\u03c8' # 0xF8 -> GREEK SMALL LETTER PSI + '\u03c9' # 0xF9 -> GREEK SMALL LETTER OMEGA + '\u03ca' # 0xFA -> GREEK SMALL LETTER IOTA WITH DIALYTIKA + '\u03cb' # 0xFB -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA + '\u03cc' # 0xFC -> GREEK SMALL LETTER OMICRON WITH TONOS + '\u03cd' # 0xFD -> GREEK SMALL LETTER UPSILON WITH TONOS + '\u03ce' # 0xFE -> GREEK SMALL LETTER OMEGA WITH TONOS + '\ufffe' # 0xFF -> UNDEFINED +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp1254.py b/my_env/Lib/encodings/cp1254.py new file mode 100644 index 000000000..4912327a5 --- /dev/null +++ b/my_env/Lib/encodings/cp1254.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1254 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1254.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1254', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u20ac' # 0x80 -> EURO SIGN + '\ufffe' # 0x81 -> UNDEFINED + '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK + '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\u2020' # 0x86 -> DAGGER + '\u2021' # 0x87 -> DOUBLE DAGGER + '\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT + '\u2030' # 0x89 -> PER MILLE SIGN + '\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON + '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE + '\ufffe' # 0x8D -> UNDEFINED + '\ufffe' # 0x8E -> UNDEFINED + '\ufffe' # 0x8F -> UNDEFINED + '\ufffe' # 0x90 -> UNDEFINED + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\u02dc' # 0x98 -> SMALL TILDE + '\u2122' # 0x99 -> TRADE MARK SIGN + '\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON + '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\u0153' # 0x9C -> LATIN SMALL LIGATURE OE + '\ufffe' # 0x9D -> UNDEFINED + '\ufffe' # 0x9E -> UNDEFINED + '\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa4' # 0xA4 -> CURRENCY SIGN + '\xa5' # 0xA5 -> YEN SIGN + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\xaf' # 0xAF -> MACRON + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\xb8' # 0xB8 -> CEDILLA + '\xb9' # 0xB9 -> SUPERSCRIPT ONE + '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + '\xbf' # 0xBF -> INVERTED QUESTION MARK + '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\u011e' # 0xD0 -> LATIN CAPITAL LETTER G WITH BREVE + '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\u0130' # 0xDD -> LATIN CAPITAL LETTER I WITH DOT ABOVE + '\u015e' # 0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe6' # 0xE6 -> LATIN SMALL LETTER AE + '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + '\u011f' # 0xF0 -> LATIN SMALL LETTER G WITH BREVE + '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0xF7 -> DIVISION SIGN + '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\u0131' # 0xFD -> LATIN SMALL LETTER DOTLESS I + '\u015f' # 0xFE -> LATIN SMALL LETTER S WITH CEDILLA + '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp1255.py b/my_env/Lib/encodings/cp1255.py new file mode 100644 index 000000000..91ce26b9b --- /dev/null +++ b/my_env/Lib/encodings/cp1255.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1255 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1255.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1255', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u20ac' # 0x80 -> EURO SIGN + '\ufffe' # 0x81 -> UNDEFINED + '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK + '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\u2020' # 0x86 -> DAGGER + '\u2021' # 0x87 -> DOUBLE DAGGER + '\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT + '\u2030' # 0x89 -> PER MILLE SIGN + '\ufffe' # 0x8A -> UNDEFINED + '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\ufffe' # 0x8C -> UNDEFINED + '\ufffe' # 0x8D -> UNDEFINED + '\ufffe' # 0x8E -> UNDEFINED + '\ufffe' # 0x8F -> UNDEFINED + '\ufffe' # 0x90 -> UNDEFINED + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\u02dc' # 0x98 -> SMALL TILDE + '\u2122' # 0x99 -> TRADE MARK SIGN + '\ufffe' # 0x9A -> UNDEFINED + '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\ufffe' # 0x9C -> UNDEFINED + '\ufffe' # 0x9D -> UNDEFINED + '\ufffe' # 0x9E -> UNDEFINED + '\ufffe' # 0x9F -> UNDEFINED + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\u20aa' # 0xA4 -> NEW SHEQEL SIGN + '\xa5' # 0xA5 -> YEN SIGN + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\xd7' # 0xAA -> MULTIPLICATION SIGN + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\xaf' # 0xAF -> MACRON + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\xb8' # 0xB8 -> CEDILLA + '\xb9' # 0xB9 -> SUPERSCRIPT ONE + '\xf7' # 0xBA -> DIVISION SIGN + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + '\xbf' # 0xBF -> INVERTED QUESTION MARK + '\u05b0' # 0xC0 -> HEBREW POINT SHEVA + '\u05b1' # 0xC1 -> HEBREW POINT HATAF SEGOL + '\u05b2' # 0xC2 -> HEBREW POINT HATAF PATAH + '\u05b3' # 0xC3 -> HEBREW POINT HATAF QAMATS + '\u05b4' # 0xC4 -> HEBREW POINT HIRIQ + '\u05b5' # 0xC5 -> HEBREW POINT TSERE + '\u05b6' # 0xC6 -> HEBREW POINT SEGOL + '\u05b7' # 0xC7 -> HEBREW POINT PATAH + '\u05b8' # 0xC8 -> HEBREW POINT QAMATS + '\u05b9' # 0xC9 -> HEBREW POINT HOLAM + '\ufffe' # 0xCA -> UNDEFINED + '\u05bb' # 0xCB -> HEBREW POINT QUBUTS + '\u05bc' # 0xCC -> HEBREW POINT DAGESH OR MAPIQ + '\u05bd' # 0xCD -> HEBREW POINT METEG + '\u05be' # 0xCE -> HEBREW PUNCTUATION MAQAF + '\u05bf' # 0xCF -> HEBREW POINT RAFE + '\u05c0' # 0xD0 -> HEBREW PUNCTUATION PASEQ + '\u05c1' # 0xD1 -> HEBREW POINT SHIN DOT + '\u05c2' # 0xD2 -> HEBREW POINT SIN DOT + '\u05c3' # 0xD3 -> HEBREW PUNCTUATION SOF PASUQ + '\u05f0' # 0xD4 -> HEBREW LIGATURE YIDDISH DOUBLE VAV + '\u05f1' # 0xD5 -> HEBREW LIGATURE YIDDISH VAV YOD + '\u05f2' # 0xD6 -> HEBREW LIGATURE YIDDISH DOUBLE YOD + '\u05f3' # 0xD7 -> HEBREW PUNCTUATION GERESH + '\u05f4' # 0xD8 -> HEBREW PUNCTUATION GERSHAYIM + '\ufffe' # 0xD9 -> UNDEFINED + '\ufffe' # 0xDA -> UNDEFINED + '\ufffe' # 0xDB -> UNDEFINED + '\ufffe' # 0xDC -> UNDEFINED + '\ufffe' # 0xDD -> UNDEFINED + '\ufffe' # 0xDE -> UNDEFINED + '\ufffe' # 0xDF -> UNDEFINED + '\u05d0' # 0xE0 -> HEBREW LETTER ALEF + '\u05d1' # 0xE1 -> HEBREW LETTER BET + '\u05d2' # 0xE2 -> HEBREW LETTER GIMEL + '\u05d3' # 0xE3 -> HEBREW LETTER DALET + '\u05d4' # 0xE4 -> HEBREW LETTER HE + '\u05d5' # 0xE5 -> HEBREW LETTER VAV + '\u05d6' # 0xE6 -> HEBREW LETTER ZAYIN + '\u05d7' # 0xE7 -> HEBREW LETTER HET + '\u05d8' # 0xE8 -> HEBREW LETTER TET + '\u05d9' # 0xE9 -> HEBREW LETTER YOD + '\u05da' # 0xEA -> HEBREW LETTER FINAL KAF + '\u05db' # 0xEB -> HEBREW LETTER KAF + '\u05dc' # 0xEC -> HEBREW LETTER LAMED + '\u05dd' # 0xED -> HEBREW LETTER FINAL MEM + '\u05de' # 0xEE -> HEBREW LETTER MEM + '\u05df' # 0xEF -> HEBREW LETTER FINAL NUN + '\u05e0' # 0xF0 -> HEBREW LETTER NUN + '\u05e1' # 0xF1 -> HEBREW LETTER SAMEKH + '\u05e2' # 0xF2 -> HEBREW LETTER AYIN + '\u05e3' # 0xF3 -> HEBREW LETTER FINAL PE + '\u05e4' # 0xF4 -> HEBREW LETTER PE + '\u05e5' # 0xF5 -> HEBREW LETTER FINAL TSADI + '\u05e6' # 0xF6 -> HEBREW LETTER TSADI + '\u05e7' # 0xF7 -> HEBREW LETTER QOF + '\u05e8' # 0xF8 -> HEBREW LETTER RESH + '\u05e9' # 0xF9 -> HEBREW LETTER SHIN + '\u05ea' # 0xFA -> HEBREW LETTER TAV + '\ufffe' # 0xFB -> UNDEFINED + '\ufffe' # 0xFC -> UNDEFINED + '\u200e' # 0xFD -> LEFT-TO-RIGHT MARK + '\u200f' # 0xFE -> RIGHT-TO-LEFT MARK + '\ufffe' # 0xFF -> UNDEFINED +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp1256.py b/my_env/Lib/encodings/cp1256.py new file mode 100644 index 000000000..fd6afab52 --- /dev/null +++ b/my_env/Lib/encodings/cp1256.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1256 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1256.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1256', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u20ac' # 0x80 -> EURO SIGN + '\u067e' # 0x81 -> ARABIC LETTER PEH + '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK + '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\u2020' # 0x86 -> DAGGER + '\u2021' # 0x87 -> DOUBLE DAGGER + '\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT + '\u2030' # 0x89 -> PER MILLE SIGN + '\u0679' # 0x8A -> ARABIC LETTER TTEH + '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE + '\u0686' # 0x8D -> ARABIC LETTER TCHEH + '\u0698' # 0x8E -> ARABIC LETTER JEH + '\u0688' # 0x8F -> ARABIC LETTER DDAL + '\u06af' # 0x90 -> ARABIC LETTER GAF + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\u06a9' # 0x98 -> ARABIC LETTER KEHEH + '\u2122' # 0x99 -> TRADE MARK SIGN + '\u0691' # 0x9A -> ARABIC LETTER RREH + '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\u0153' # 0x9C -> LATIN SMALL LIGATURE OE + '\u200c' # 0x9D -> ZERO WIDTH NON-JOINER + '\u200d' # 0x9E -> ZERO WIDTH JOINER + '\u06ba' # 0x9F -> ARABIC LETTER NOON GHUNNA + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u060c' # 0xA1 -> ARABIC COMMA + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa4' # 0xA4 -> CURRENCY SIGN + '\xa5' # 0xA5 -> YEN SIGN + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u06be' # 0xAA -> ARABIC LETTER HEH DOACHASHMEE + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\xaf' # 0xAF -> MACRON + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\xb8' # 0xB8 -> CEDILLA + '\xb9' # 0xB9 -> SUPERSCRIPT ONE + '\u061b' # 0xBA -> ARABIC SEMICOLON + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + '\u061f' # 0xBF -> ARABIC QUESTION MARK + '\u06c1' # 0xC0 -> ARABIC LETTER HEH GOAL + '\u0621' # 0xC1 -> ARABIC LETTER HAMZA + '\u0622' # 0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE + '\u0623' # 0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE + '\u0624' # 0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE + '\u0625' # 0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW + '\u0626' # 0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE + '\u0627' # 0xC7 -> ARABIC LETTER ALEF + '\u0628' # 0xC8 -> ARABIC LETTER BEH + '\u0629' # 0xC9 -> ARABIC LETTER TEH MARBUTA + '\u062a' # 0xCA -> ARABIC LETTER TEH + '\u062b' # 0xCB -> ARABIC LETTER THEH + '\u062c' # 0xCC -> ARABIC LETTER JEEM + '\u062d' # 0xCD -> ARABIC LETTER HAH + '\u062e' # 0xCE -> ARABIC LETTER KHAH + '\u062f' # 0xCF -> ARABIC LETTER DAL + '\u0630' # 0xD0 -> ARABIC LETTER THAL + '\u0631' # 0xD1 -> ARABIC LETTER REH + '\u0632' # 0xD2 -> ARABIC LETTER ZAIN + '\u0633' # 0xD3 -> ARABIC LETTER SEEN + '\u0634' # 0xD4 -> ARABIC LETTER SHEEN + '\u0635' # 0xD5 -> ARABIC LETTER SAD + '\u0636' # 0xD6 -> ARABIC LETTER DAD + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\u0637' # 0xD8 -> ARABIC LETTER TAH + '\u0638' # 0xD9 -> ARABIC LETTER ZAH + '\u0639' # 0xDA -> ARABIC LETTER AIN + '\u063a' # 0xDB -> ARABIC LETTER GHAIN + '\u0640' # 0xDC -> ARABIC TATWEEL + '\u0641' # 0xDD -> ARABIC LETTER FEH + '\u0642' # 0xDE -> ARABIC LETTER QAF + '\u0643' # 0xDF -> ARABIC LETTER KAF + '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + '\u0644' # 0xE1 -> ARABIC LETTER LAM + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\u0645' # 0xE3 -> ARABIC LETTER MEEM + '\u0646' # 0xE4 -> ARABIC LETTER NOON + '\u0647' # 0xE5 -> ARABIC LETTER HEH + '\u0648' # 0xE6 -> ARABIC LETTER WAW + '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\u0649' # 0xEC -> ARABIC LETTER ALEF MAKSURA + '\u064a' # 0xED -> ARABIC LETTER YEH + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + '\u064b' # 0xF0 -> ARABIC FATHATAN + '\u064c' # 0xF1 -> ARABIC DAMMATAN + '\u064d' # 0xF2 -> ARABIC KASRATAN + '\u064e' # 0xF3 -> ARABIC FATHA + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\u064f' # 0xF5 -> ARABIC DAMMA + '\u0650' # 0xF6 -> ARABIC KASRA + '\xf7' # 0xF7 -> DIVISION SIGN + '\u0651' # 0xF8 -> ARABIC SHADDA + '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + '\u0652' # 0xFA -> ARABIC SUKUN + '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\u200e' # 0xFD -> LEFT-TO-RIGHT MARK + '\u200f' # 0xFE -> RIGHT-TO-LEFT MARK + '\u06d2' # 0xFF -> ARABIC LETTER YEH BARREE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp1257.py b/my_env/Lib/encodings/cp1257.py new file mode 100644 index 000000000..9ebc90d50 --- /dev/null +++ b/my_env/Lib/encodings/cp1257.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1257 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1257.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1257', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u20ac' # 0x80 -> EURO SIGN + '\ufffe' # 0x81 -> UNDEFINED + '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + '\ufffe' # 0x83 -> UNDEFINED + '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\u2020' # 0x86 -> DAGGER + '\u2021' # 0x87 -> DOUBLE DAGGER + '\ufffe' # 0x88 -> UNDEFINED + '\u2030' # 0x89 -> PER MILLE SIGN + '\ufffe' # 0x8A -> UNDEFINED + '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\ufffe' # 0x8C -> UNDEFINED + '\xa8' # 0x8D -> DIAERESIS + '\u02c7' # 0x8E -> CARON + '\xb8' # 0x8F -> CEDILLA + '\ufffe' # 0x90 -> UNDEFINED + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\ufffe' # 0x98 -> UNDEFINED + '\u2122' # 0x99 -> TRADE MARK SIGN + '\ufffe' # 0x9A -> UNDEFINED + '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\ufffe' # 0x9C -> UNDEFINED + '\xaf' # 0x9D -> MACRON + '\u02db' # 0x9E -> OGONEK + '\ufffe' # 0x9F -> UNDEFINED + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\ufffe' # 0xA1 -> UNDEFINED + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa4' # 0xA4 -> CURRENCY SIGN + '\ufffe' # 0xA5 -> UNDEFINED + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xd8' # 0xA8 -> LATIN CAPITAL LETTER O WITH STROKE + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u0156' # 0xAA -> LATIN CAPITAL LETTER R WITH CEDILLA + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\xc6' # 0xAF -> LATIN CAPITAL LETTER AE + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\xf8' # 0xB8 -> LATIN SMALL LETTER O WITH STROKE + '\xb9' # 0xB9 -> SUPERSCRIPT ONE + '\u0157' # 0xBA -> LATIN SMALL LETTER R WITH CEDILLA + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + '\xe6' # 0xBF -> LATIN SMALL LETTER AE + '\u0104' # 0xC0 -> LATIN CAPITAL LETTER A WITH OGONEK + '\u012e' # 0xC1 -> LATIN CAPITAL LETTER I WITH OGONEK + '\u0100' # 0xC2 -> LATIN CAPITAL LETTER A WITH MACRON + '\u0106' # 0xC3 -> LATIN CAPITAL LETTER C WITH ACUTE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\u0118' # 0xC6 -> LATIN CAPITAL LETTER E WITH OGONEK + '\u0112' # 0xC7 -> LATIN CAPITAL LETTER E WITH MACRON + '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\u0179' # 0xCA -> LATIN CAPITAL LETTER Z WITH ACUTE + '\u0116' # 0xCB -> LATIN CAPITAL LETTER E WITH DOT ABOVE + '\u0122' # 0xCC -> LATIN CAPITAL LETTER G WITH CEDILLA + '\u0136' # 0xCD -> LATIN CAPITAL LETTER K WITH CEDILLA + '\u012a' # 0xCE -> LATIN CAPITAL LETTER I WITH MACRON + '\u013b' # 0xCF -> LATIN CAPITAL LETTER L WITH CEDILLA + '\u0160' # 0xD0 -> LATIN CAPITAL LETTER S WITH CARON + '\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE + '\u0145' # 0xD2 -> LATIN CAPITAL LETTER N WITH CEDILLA + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\u014c' # 0xD4 -> LATIN CAPITAL LETTER O WITH MACRON + '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\u0172' # 0xD8 -> LATIN CAPITAL LETTER U WITH OGONEK + '\u0141' # 0xD9 -> LATIN CAPITAL LETTER L WITH STROKE + '\u015a' # 0xDA -> LATIN CAPITAL LETTER S WITH ACUTE + '\u016a' # 0xDB -> LATIN CAPITAL LETTER U WITH MACRON + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\u017b' # 0xDD -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + '\u017d' # 0xDE -> LATIN CAPITAL LETTER Z WITH CARON + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + '\u0105' # 0xE0 -> LATIN SMALL LETTER A WITH OGONEK + '\u012f' # 0xE1 -> LATIN SMALL LETTER I WITH OGONEK + '\u0101' # 0xE2 -> LATIN SMALL LETTER A WITH MACRON + '\u0107' # 0xE3 -> LATIN SMALL LETTER C WITH ACUTE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + '\u0119' # 0xE6 -> LATIN SMALL LETTER E WITH OGONEK + '\u0113' # 0xE7 -> LATIN SMALL LETTER E WITH MACRON + '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\u017a' # 0xEA -> LATIN SMALL LETTER Z WITH ACUTE + '\u0117' # 0xEB -> LATIN SMALL LETTER E WITH DOT ABOVE + '\u0123' # 0xEC -> LATIN SMALL LETTER G WITH CEDILLA + '\u0137' # 0xED -> LATIN SMALL LETTER K WITH CEDILLA + '\u012b' # 0xEE -> LATIN SMALL LETTER I WITH MACRON + '\u013c' # 0xEF -> LATIN SMALL LETTER L WITH CEDILLA + '\u0161' # 0xF0 -> LATIN SMALL LETTER S WITH CARON + '\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE + '\u0146' # 0xF2 -> LATIN SMALL LETTER N WITH CEDILLA + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\u014d' # 0xF4 -> LATIN SMALL LETTER O WITH MACRON + '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0xF7 -> DIVISION SIGN + '\u0173' # 0xF8 -> LATIN SMALL LETTER U WITH OGONEK + '\u0142' # 0xF9 -> LATIN SMALL LETTER L WITH STROKE + '\u015b' # 0xFA -> LATIN SMALL LETTER S WITH ACUTE + '\u016b' # 0xFB -> LATIN SMALL LETTER U WITH MACRON + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\u017c' # 0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE + '\u017e' # 0xFE -> LATIN SMALL LETTER Z WITH CARON + '\u02d9' # 0xFF -> DOT ABOVE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp1258.py b/my_env/Lib/encodings/cp1258.py new file mode 100644 index 000000000..784378a83 --- /dev/null +++ b/my_env/Lib/encodings/cp1258.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1258 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1258.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1258', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u20ac' # 0x80 -> EURO SIGN + '\ufffe' # 0x81 -> UNDEFINED + '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK + '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\u2020' # 0x86 -> DAGGER + '\u2021' # 0x87 -> DOUBLE DAGGER + '\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT + '\u2030' # 0x89 -> PER MILLE SIGN + '\ufffe' # 0x8A -> UNDEFINED + '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE + '\ufffe' # 0x8D -> UNDEFINED + '\ufffe' # 0x8E -> UNDEFINED + '\ufffe' # 0x8F -> UNDEFINED + '\ufffe' # 0x90 -> UNDEFINED + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\u02dc' # 0x98 -> SMALL TILDE + '\u2122' # 0x99 -> TRADE MARK SIGN + '\ufffe' # 0x9A -> UNDEFINED + '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\u0153' # 0x9C -> LATIN SMALL LIGATURE OE + '\ufffe' # 0x9D -> UNDEFINED + '\ufffe' # 0x9E -> UNDEFINED + '\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa4' # 0xA4 -> CURRENCY SIGN + '\xa5' # 0xA5 -> YEN SIGN + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\xaf' # 0xAF -> MACRON + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\xb8' # 0xB8 -> CEDILLA + '\xb9' # 0xB9 -> SUPERSCRIPT ONE + '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + '\xbf' # 0xBF -> INVERTED QUESTION MARK + '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\u0300' # 0xCC -> COMBINING GRAVE ACCENT + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE + '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + '\u0309' # 0xD2 -> COMBINING HOOK ABOVE + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\u01a0' # 0xD5 -> LATIN CAPITAL LETTER O WITH HORN + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\u01af' # 0xDD -> LATIN CAPITAL LETTER U WITH HORN + '\u0303' # 0xDE -> COMBINING TILDE + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe6' # 0xE6 -> LATIN SMALL LETTER AE + '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\u0301' # 0xEC -> COMBINING ACUTE ACCENT + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + '\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE + '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + '\u0323' # 0xF2 -> COMBINING DOT BELOW + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\u01a1' # 0xF5 -> LATIN SMALL LETTER O WITH HORN + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0xF7 -> DIVISION SIGN + '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\u01b0' # 0xFD -> LATIN SMALL LETTER U WITH HORN + '\u20ab' # 0xFE -> DONG SIGN + '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp273.py b/my_env/Lib/encodings/cp273.py new file mode 100644 index 000000000..69c6d778c --- /dev/null +++ b/my_env/Lib/encodings/cp273.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp273 generated from 'python-mappings/CP273.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp273', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL (NUL) + '\x01' # 0x01 -> START OF HEADING (SOH) + '\x02' # 0x02 -> START OF TEXT (STX) + '\x03' # 0x03 -> END OF TEXT (ETX) + '\x9c' # 0x04 -> STRING TERMINATOR (ST) + '\t' # 0x05 -> CHARACTER TABULATION (HT) + '\x86' # 0x06 -> START OF SELECTED AREA (SSA) + '\x7f' # 0x07 -> DELETE (DEL) + '\x97' # 0x08 -> END OF GUARDED AREA (EPA) + '\x8d' # 0x09 -> REVERSE LINE FEED (RI) + '\x8e' # 0x0A -> SINGLE-SHIFT TWO (SS2) + '\x0b' # 0x0B -> LINE TABULATION (VT) + '\x0c' # 0x0C -> FORM FEED (FF) + '\r' # 0x0D -> CARRIAGE RETURN (CR) + '\x0e' # 0x0E -> SHIFT OUT (SO) + '\x0f' # 0x0F -> SHIFT IN (SI) + '\x10' # 0x10 -> DATALINK ESCAPE (DLE) + '\x11' # 0x11 -> DEVICE CONTROL ONE (DC1) + '\x12' # 0x12 -> DEVICE CONTROL TWO (DC2) + '\x13' # 0x13 -> DEVICE CONTROL THREE (DC3) + '\x9d' # 0x14 -> OPERATING SYSTEM COMMAND (OSC) + '\x85' # 0x15 -> NEXT LINE (NEL) + '\x08' # 0x16 -> BACKSPACE (BS) + '\x87' # 0x17 -> END OF SELECTED AREA (ESA) + '\x18' # 0x18 -> CANCEL (CAN) + '\x19' # 0x19 -> END OF MEDIUM (EM) + '\x92' # 0x1A -> PRIVATE USE TWO (PU2) + '\x8f' # 0x1B -> SINGLE-SHIFT THREE (SS3) + '\x1c' # 0x1C -> FILE SEPARATOR (IS4) + '\x1d' # 0x1D -> GROUP SEPARATOR (IS3) + '\x1e' # 0x1E -> RECORD SEPARATOR (IS2) + '\x1f' # 0x1F -> UNIT SEPARATOR (IS1) + '\x80' # 0x20 -> PADDING CHARACTER (PAD) + '\x81' # 0x21 -> HIGH OCTET PRESET (HOP) + '\x82' # 0x22 -> BREAK PERMITTED HERE (BPH) + '\x83' # 0x23 -> NO BREAK HERE (NBH) + '\x84' # 0x24 -> INDEX (IND) + '\n' # 0x25 -> LINE FEED (LF) + '\x17' # 0x26 -> END OF TRANSMISSION BLOCK (ETB) + '\x1b' # 0x27 -> ESCAPE (ESC) + '\x88' # 0x28 -> CHARACTER TABULATION SET (HTS) + '\x89' # 0x29 -> CHARACTER TABULATION WITH JUSTIFICATION (HTJ) + '\x8a' # 0x2A -> LINE TABULATION SET (VTS) + '\x8b' # 0x2B -> PARTIAL LINE FORWARD (PLD) + '\x8c' # 0x2C -> PARTIAL LINE BACKWARD (PLU) + '\x05' # 0x2D -> ENQUIRY (ENQ) + '\x06' # 0x2E -> ACKNOWLEDGE (ACK) + '\x07' # 0x2F -> BELL (BEL) + '\x90' # 0x30 -> DEVICE CONTROL STRING (DCS) + '\x91' # 0x31 -> PRIVATE USE ONE (PU1) + '\x16' # 0x32 -> SYNCHRONOUS IDLE (SYN) + '\x93' # 0x33 -> SET TRANSMIT STATE (STS) + '\x94' # 0x34 -> CANCEL CHARACTER (CCH) + '\x95' # 0x35 -> MESSAGE WAITING (MW) + '\x96' # 0x36 -> START OF GUARDED AREA (SPA) + '\x04' # 0x37 -> END OF TRANSMISSION (EOT) + '\x98' # 0x38 -> START OF STRING (SOS) + '\x99' # 0x39 -> SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) + '\x9a' # 0x3A -> SINGLE CHARACTER INTRODUCER (SCI) + '\x9b' # 0x3B -> CONTROL SEQUENCE INTRODUCER (CSI) + '\x14' # 0x3C -> DEVICE CONTROL FOUR (DC4) + '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE (NAK) + '\x9e' # 0x3E -> PRIVACY MESSAGE (PM) + '\x1a' # 0x3F -> SUBSTITUTE (SUB) + ' ' # 0x40 -> SPACE + '\xa0' # 0x41 -> NO-BREAK SPACE + '\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '{' # 0x43 -> LEFT CURLY BRACKET + '\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE + '\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE + '\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA + '\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE + '\xc4' # 0x4A -> LATIN CAPITAL LETTER A WITH DIAERESIS + '.' # 0x4B -> FULL STOP + '<' # 0x4C -> LESS-THAN SIGN + '(' # 0x4D -> LEFT PARENTHESIS + '+' # 0x4E -> PLUS SIGN + '!' # 0x4F -> EXCLAMATION MARK + '&' # 0x50 -> AMPERSAND + '\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE + '\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS + '\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE + '~' # 0x59 -> TILDE + '\xdc' # 0x5A -> LATIN CAPITAL LETTER U WITH DIAERESIS + '$' # 0x5B -> DOLLAR SIGN + '*' # 0x5C -> ASTERISK + ')' # 0x5D -> RIGHT PARENTHESIS + ';' # 0x5E -> SEMICOLON + '^' # 0x5F -> CIRCUMFLEX ACCENT + '-' # 0x60 -> HYPHEN-MINUS + '/' # 0x61 -> SOLIDUS + '\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '[' # 0x63 -> LEFT SQUARE BRACKET + '\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE + '\xf6' # 0x6A -> LATIN SMALL LETTER O WITH DIAERESIS + ',' # 0x6B -> COMMA + '%' # 0x6C -> PERCENT SIGN + '_' # 0x6D -> LOW LINE + '>' # 0x6E -> GREATER-THAN SIGN + '?' # 0x6F -> QUESTION MARK + '\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE + '\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE + '`' # 0x79 -> GRAVE ACCENT + ':' # 0x7A -> COLON + '#' # 0x7B -> NUMBER SIGN + '\xa7' # 0x7C -> SECTION SIGN + "'" # 0x7D -> APOSTROPHE + '=' # 0x7E -> EQUALS SIGN + '"' # 0x7F -> QUOTATION MARK + '\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE + 'a' # 0x81 -> LATIN SMALL LETTER A + 'b' # 0x82 -> LATIN SMALL LETTER B + 'c' # 0x83 -> LATIN SMALL LETTER C + 'd' # 0x84 -> LATIN SMALL LETTER D + 'e' # 0x85 -> LATIN SMALL LETTER E + 'f' # 0x86 -> LATIN SMALL LETTER F + 'g' # 0x87 -> LATIN SMALL LETTER G + 'h' # 0x88 -> LATIN SMALL LETTER H + 'i' # 0x89 -> LATIN SMALL LETTER I + '\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xf0' # 0x8C -> LATIN SMALL LETTER ETH (Icelandic) + '\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE + '\xfe' # 0x8E -> LATIN SMALL LETTER THORN (Icelandic) + '\xb1' # 0x8F -> PLUS-MINUS SIGN + '\xb0' # 0x90 -> DEGREE SIGN + 'j' # 0x91 -> LATIN SMALL LETTER J + 'k' # 0x92 -> LATIN SMALL LETTER K + 'l' # 0x93 -> LATIN SMALL LETTER L + 'm' # 0x94 -> LATIN SMALL LETTER M + 'n' # 0x95 -> LATIN SMALL LETTER N + 'o' # 0x96 -> LATIN SMALL LETTER O + 'p' # 0x97 -> LATIN SMALL LETTER P + 'q' # 0x98 -> LATIN SMALL LETTER Q + 'r' # 0x99 -> LATIN SMALL LETTER R + '\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR + '\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR + '\xe6' # 0x9C -> LATIN SMALL LETTER AE + '\xb8' # 0x9D -> CEDILLA + '\xc6' # 0x9E -> LATIN CAPITAL LETTER AE + '\xa4' # 0x9F -> CURRENCY SIGN + '\xb5' # 0xA0 -> MICRO SIGN + '\xdf' # 0xA1 -> LATIN SMALL LETTER SHARP S (German) + 's' # 0xA2 -> LATIN SMALL LETTER S + 't' # 0xA3 -> LATIN SMALL LETTER T + 'u' # 0xA4 -> LATIN SMALL LETTER U + 'v' # 0xA5 -> LATIN SMALL LETTER V + 'w' # 0xA6 -> LATIN SMALL LETTER W + 'x' # 0xA7 -> LATIN SMALL LETTER X + 'y' # 0xA8 -> LATIN SMALL LETTER Y + 'z' # 0xA9 -> LATIN SMALL LETTER Z + '\xa1' # 0xAA -> INVERTED EXCLAMATION MARK + '\xbf' # 0xAB -> INVERTED QUESTION MARK + '\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (Icelandic) + '\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (Icelandic) + '\xae' # 0xAF -> REGISTERED SIGN + '\xa2' # 0xB0 -> CENT SIGN + '\xa3' # 0xB1 -> POUND SIGN + '\xa5' # 0xB2 -> YEN SIGN + '\xb7' # 0xB3 -> MIDDLE DOT + '\xa9' # 0xB4 -> COPYRIGHT SIGN + '@' # 0xB5 -> COMMERCIAL AT + '\xb6' # 0xB6 -> PILCROW SIGN + '\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF + '\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS + '\xac' # 0xBA -> NOT SIGN + '|' # 0xBB -> VERTICAL LINE + '\u203e' # 0xBC -> OVERLINE + '\xa8' # 0xBD -> DIAERESIS + '\xb4' # 0xBE -> ACUTE ACCENT + '\xd7' # 0xBF -> MULTIPLICATION SIGN + '\xe4' # 0xC0 -> LATIN SMALL LETTER A WITH DIAERESIS + 'A' # 0xC1 -> LATIN CAPITAL LETTER A + 'B' # 0xC2 -> LATIN CAPITAL LETTER B + 'C' # 0xC3 -> LATIN CAPITAL LETTER C + 'D' # 0xC4 -> LATIN CAPITAL LETTER D + 'E' # 0xC5 -> LATIN CAPITAL LETTER E + 'F' # 0xC6 -> LATIN CAPITAL LETTER F + 'G' # 0xC7 -> LATIN CAPITAL LETTER G + 'H' # 0xC8 -> LATIN CAPITAL LETTER H + 'I' # 0xC9 -> LATIN CAPITAL LETTER I + '\xad' # 0xCA -> SOFT HYPHEN + '\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xa6' # 0xCC -> BROKEN BAR + '\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE + '\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE + '\xfc' # 0xD0 -> LATIN SMALL LETTER U WITH DIAERESIS + 'J' # 0xD1 -> LATIN CAPITAL LETTER J + 'K' # 0xD2 -> LATIN CAPITAL LETTER K + 'L' # 0xD3 -> LATIN CAPITAL LETTER L + 'M' # 0xD4 -> LATIN CAPITAL LETTER M + 'N' # 0xD5 -> LATIN CAPITAL LETTER N + 'O' # 0xD6 -> LATIN CAPITAL LETTER O + 'P' # 0xD7 -> LATIN CAPITAL LETTER P + 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q + 'R' # 0xD9 -> LATIN CAPITAL LETTER R + '\xb9' # 0xDA -> SUPERSCRIPT ONE + '\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '}' # 0xDC -> RIGHT CURLY BRACKET + '\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE + '\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS + '\xd6' # 0xE0 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xf7' # 0xE1 -> DIVISION SIGN + 'S' # 0xE2 -> LATIN CAPITAL LETTER S + 'T' # 0xE3 -> LATIN CAPITAL LETTER T + 'U' # 0xE4 -> LATIN CAPITAL LETTER U + 'V' # 0xE5 -> LATIN CAPITAL LETTER V + 'W' # 0xE6 -> LATIN CAPITAL LETTER W + 'X' # 0xE7 -> LATIN CAPITAL LETTER X + 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y + 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z + '\xb2' # 0xEA -> SUPERSCRIPT TWO + '\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\\' # 0xEC -> REVERSE SOLIDUS + '\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE + '0' # 0xF0 -> DIGIT ZERO + '1' # 0xF1 -> DIGIT ONE + '2' # 0xF2 -> DIGIT TWO + '3' # 0xF3 -> DIGIT THREE + '4' # 0xF4 -> DIGIT FOUR + '5' # 0xF5 -> DIGIT FIVE + '6' # 0xF6 -> DIGIT SIX + '7' # 0xF7 -> DIGIT SEVEN + '8' # 0xF8 -> DIGIT EIGHT + '9' # 0xF9 -> DIGIT NINE + '\xb3' # 0xFA -> SUPERSCRIPT THREE + '\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + ']' # 0xFC -> RIGHT SQUARE BRACKET + '\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE + '\x9f' # 0xFF -> APPLICATION PROGRAM COMMAND (APC) +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp424.py b/my_env/Lib/encodings/cp424.py new file mode 100644 index 000000000..6753daf12 --- /dev/null +++ b/my_env/Lib/encodings/cp424.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp424 generated from 'MAPPINGS/VENDORS/MISC/CP424.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp424', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x9c' # 0x04 -> SELECT + '\t' # 0x05 -> HORIZONTAL TABULATION + '\x86' # 0x06 -> REQUIRED NEW LINE + '\x7f' # 0x07 -> DELETE + '\x97' # 0x08 -> GRAPHIC ESCAPE + '\x8d' # 0x09 -> SUPERSCRIPT + '\x8e' # 0x0A -> REPEAT + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x9d' # 0x14 -> RESTORE/ENABLE PRESENTATION + '\x85' # 0x15 -> NEW LINE + '\x08' # 0x16 -> BACKSPACE + '\x87' # 0x17 -> PROGRAM OPERATOR COMMUNICATION + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x92' # 0x1A -> UNIT BACK SPACE + '\x8f' # 0x1B -> CUSTOMER USE ONE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + '\x80' # 0x20 -> DIGIT SELECT + '\x81' # 0x21 -> START OF SIGNIFICANCE + '\x82' # 0x22 -> FIELD SEPARATOR + '\x83' # 0x23 -> WORD UNDERSCORE + '\x84' # 0x24 -> BYPASS OR INHIBIT PRESENTATION + '\n' # 0x25 -> LINE FEED + '\x17' # 0x26 -> END OF TRANSMISSION BLOCK + '\x1b' # 0x27 -> ESCAPE + '\x88' # 0x28 -> SET ATTRIBUTE + '\x89' # 0x29 -> START FIELD EXTENDED + '\x8a' # 0x2A -> SET MODE OR SWITCH + '\x8b' # 0x2B -> CONTROL SEQUENCE PREFIX + '\x8c' # 0x2C -> MODIFY FIELD ATTRIBUTE + '\x05' # 0x2D -> ENQUIRY + '\x06' # 0x2E -> ACKNOWLEDGE + '\x07' # 0x2F -> BELL + '\x90' # 0x30 -> + '\x91' # 0x31 -> + '\x16' # 0x32 -> SYNCHRONOUS IDLE + '\x93' # 0x33 -> INDEX RETURN + '\x94' # 0x34 -> PRESENTATION POSITION + '\x95' # 0x35 -> TRANSPARENT + '\x96' # 0x36 -> NUMERIC BACKSPACE + '\x04' # 0x37 -> END OF TRANSMISSION + '\x98' # 0x38 -> SUBSCRIPT + '\x99' # 0x39 -> INDENT TABULATION + '\x9a' # 0x3A -> REVERSE FORM FEED + '\x9b' # 0x3B -> CUSTOMER USE THREE + '\x14' # 0x3C -> DEVICE CONTROL FOUR + '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE + '\x9e' # 0x3E -> + '\x1a' # 0x3F -> SUBSTITUTE + ' ' # 0x40 -> SPACE + '\u05d0' # 0x41 -> HEBREW LETTER ALEF + '\u05d1' # 0x42 -> HEBREW LETTER BET + '\u05d2' # 0x43 -> HEBREW LETTER GIMEL + '\u05d3' # 0x44 -> HEBREW LETTER DALET + '\u05d4' # 0x45 -> HEBREW LETTER HE + '\u05d5' # 0x46 -> HEBREW LETTER VAV + '\u05d6' # 0x47 -> HEBREW LETTER ZAYIN + '\u05d7' # 0x48 -> HEBREW LETTER HET + '\u05d8' # 0x49 -> HEBREW LETTER TET + '\xa2' # 0x4A -> CENT SIGN + '.' # 0x4B -> FULL STOP + '<' # 0x4C -> LESS-THAN SIGN + '(' # 0x4D -> LEFT PARENTHESIS + '+' # 0x4E -> PLUS SIGN + '|' # 0x4F -> VERTICAL LINE + '&' # 0x50 -> AMPERSAND + '\u05d9' # 0x51 -> HEBREW LETTER YOD + '\u05da' # 0x52 -> HEBREW LETTER FINAL KAF + '\u05db' # 0x53 -> HEBREW LETTER KAF + '\u05dc' # 0x54 -> HEBREW LETTER LAMED + '\u05dd' # 0x55 -> HEBREW LETTER FINAL MEM + '\u05de' # 0x56 -> HEBREW LETTER MEM + '\u05df' # 0x57 -> HEBREW LETTER FINAL NUN + '\u05e0' # 0x58 -> HEBREW LETTER NUN + '\u05e1' # 0x59 -> HEBREW LETTER SAMEKH + '!' # 0x5A -> EXCLAMATION MARK + '$' # 0x5B -> DOLLAR SIGN + '*' # 0x5C -> ASTERISK + ')' # 0x5D -> RIGHT PARENTHESIS + ';' # 0x5E -> SEMICOLON + '\xac' # 0x5F -> NOT SIGN + '-' # 0x60 -> HYPHEN-MINUS + '/' # 0x61 -> SOLIDUS + '\u05e2' # 0x62 -> HEBREW LETTER AYIN + '\u05e3' # 0x63 -> HEBREW LETTER FINAL PE + '\u05e4' # 0x64 -> HEBREW LETTER PE + '\u05e5' # 0x65 -> HEBREW LETTER FINAL TSADI + '\u05e6' # 0x66 -> HEBREW LETTER TSADI + '\u05e7' # 0x67 -> HEBREW LETTER QOF + '\u05e8' # 0x68 -> HEBREW LETTER RESH + '\u05e9' # 0x69 -> HEBREW LETTER SHIN + '\xa6' # 0x6A -> BROKEN BAR + ',' # 0x6B -> COMMA + '%' # 0x6C -> PERCENT SIGN + '_' # 0x6D -> LOW LINE + '>' # 0x6E -> GREATER-THAN SIGN + '?' # 0x6F -> QUESTION MARK + '\ufffe' # 0x70 -> UNDEFINED + '\u05ea' # 0x71 -> HEBREW LETTER TAV + '\ufffe' # 0x72 -> UNDEFINED + '\ufffe' # 0x73 -> UNDEFINED + '\xa0' # 0x74 -> NO-BREAK SPACE + '\ufffe' # 0x75 -> UNDEFINED + '\ufffe' # 0x76 -> UNDEFINED + '\ufffe' # 0x77 -> UNDEFINED + '\u2017' # 0x78 -> DOUBLE LOW LINE + '`' # 0x79 -> GRAVE ACCENT + ':' # 0x7A -> COLON + '#' # 0x7B -> NUMBER SIGN + '@' # 0x7C -> COMMERCIAL AT + "'" # 0x7D -> APOSTROPHE + '=' # 0x7E -> EQUALS SIGN + '"' # 0x7F -> QUOTATION MARK + '\ufffe' # 0x80 -> UNDEFINED + 'a' # 0x81 -> LATIN SMALL LETTER A + 'b' # 0x82 -> LATIN SMALL LETTER B + 'c' # 0x83 -> LATIN SMALL LETTER C + 'd' # 0x84 -> LATIN SMALL LETTER D + 'e' # 0x85 -> LATIN SMALL LETTER E + 'f' # 0x86 -> LATIN SMALL LETTER F + 'g' # 0x87 -> LATIN SMALL LETTER G + 'h' # 0x88 -> LATIN SMALL LETTER H + 'i' # 0x89 -> LATIN SMALL LETTER I + '\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\ufffe' # 0x8C -> UNDEFINED + '\ufffe' # 0x8D -> UNDEFINED + '\ufffe' # 0x8E -> UNDEFINED + '\xb1' # 0x8F -> PLUS-MINUS SIGN + '\xb0' # 0x90 -> DEGREE SIGN + 'j' # 0x91 -> LATIN SMALL LETTER J + 'k' # 0x92 -> LATIN SMALL LETTER K + 'l' # 0x93 -> LATIN SMALL LETTER L + 'm' # 0x94 -> LATIN SMALL LETTER M + 'n' # 0x95 -> LATIN SMALL LETTER N + 'o' # 0x96 -> LATIN SMALL LETTER O + 'p' # 0x97 -> LATIN SMALL LETTER P + 'q' # 0x98 -> LATIN SMALL LETTER Q + 'r' # 0x99 -> LATIN SMALL LETTER R + '\ufffe' # 0x9A -> UNDEFINED + '\ufffe' # 0x9B -> UNDEFINED + '\ufffe' # 0x9C -> UNDEFINED + '\xb8' # 0x9D -> CEDILLA + '\ufffe' # 0x9E -> UNDEFINED + '\xa4' # 0x9F -> CURRENCY SIGN + '\xb5' # 0xA0 -> MICRO SIGN + '~' # 0xA1 -> TILDE + 's' # 0xA2 -> LATIN SMALL LETTER S + 't' # 0xA3 -> LATIN SMALL LETTER T + 'u' # 0xA4 -> LATIN SMALL LETTER U + 'v' # 0xA5 -> LATIN SMALL LETTER V + 'w' # 0xA6 -> LATIN SMALL LETTER W + 'x' # 0xA7 -> LATIN SMALL LETTER X + 'y' # 0xA8 -> LATIN SMALL LETTER Y + 'z' # 0xA9 -> LATIN SMALL LETTER Z + '\ufffe' # 0xAA -> UNDEFINED + '\ufffe' # 0xAB -> UNDEFINED + '\ufffe' # 0xAC -> UNDEFINED + '\ufffe' # 0xAD -> UNDEFINED + '\ufffe' # 0xAE -> UNDEFINED + '\xae' # 0xAF -> REGISTERED SIGN + '^' # 0xB0 -> CIRCUMFLEX ACCENT + '\xa3' # 0xB1 -> POUND SIGN + '\xa5' # 0xB2 -> YEN SIGN + '\xb7' # 0xB3 -> MIDDLE DOT + '\xa9' # 0xB4 -> COPYRIGHT SIGN + '\xa7' # 0xB5 -> SECTION SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF + '\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS + '[' # 0xBA -> LEFT SQUARE BRACKET + ']' # 0xBB -> RIGHT SQUARE BRACKET + '\xaf' # 0xBC -> MACRON + '\xa8' # 0xBD -> DIAERESIS + '\xb4' # 0xBE -> ACUTE ACCENT + '\xd7' # 0xBF -> MULTIPLICATION SIGN + '{' # 0xC0 -> LEFT CURLY BRACKET + 'A' # 0xC1 -> LATIN CAPITAL LETTER A + 'B' # 0xC2 -> LATIN CAPITAL LETTER B + 'C' # 0xC3 -> LATIN CAPITAL LETTER C + 'D' # 0xC4 -> LATIN CAPITAL LETTER D + 'E' # 0xC5 -> LATIN CAPITAL LETTER E + 'F' # 0xC6 -> LATIN CAPITAL LETTER F + 'G' # 0xC7 -> LATIN CAPITAL LETTER G + 'H' # 0xC8 -> LATIN CAPITAL LETTER H + 'I' # 0xC9 -> LATIN CAPITAL LETTER I + '\xad' # 0xCA -> SOFT HYPHEN + '\ufffe' # 0xCB -> UNDEFINED + '\ufffe' # 0xCC -> UNDEFINED + '\ufffe' # 0xCD -> UNDEFINED + '\ufffe' # 0xCE -> UNDEFINED + '\ufffe' # 0xCF -> UNDEFINED + '}' # 0xD0 -> RIGHT CURLY BRACKET + 'J' # 0xD1 -> LATIN CAPITAL LETTER J + 'K' # 0xD2 -> LATIN CAPITAL LETTER K + 'L' # 0xD3 -> LATIN CAPITAL LETTER L + 'M' # 0xD4 -> LATIN CAPITAL LETTER M + 'N' # 0xD5 -> LATIN CAPITAL LETTER N + 'O' # 0xD6 -> LATIN CAPITAL LETTER O + 'P' # 0xD7 -> LATIN CAPITAL LETTER P + 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q + 'R' # 0xD9 -> LATIN CAPITAL LETTER R + '\xb9' # 0xDA -> SUPERSCRIPT ONE + '\ufffe' # 0xDB -> UNDEFINED + '\ufffe' # 0xDC -> UNDEFINED + '\ufffe' # 0xDD -> UNDEFINED + '\ufffe' # 0xDE -> UNDEFINED + '\ufffe' # 0xDF -> UNDEFINED + '\\' # 0xE0 -> REVERSE SOLIDUS + '\xf7' # 0xE1 -> DIVISION SIGN + 'S' # 0xE2 -> LATIN CAPITAL LETTER S + 'T' # 0xE3 -> LATIN CAPITAL LETTER T + 'U' # 0xE4 -> LATIN CAPITAL LETTER U + 'V' # 0xE5 -> LATIN CAPITAL LETTER V + 'W' # 0xE6 -> LATIN CAPITAL LETTER W + 'X' # 0xE7 -> LATIN CAPITAL LETTER X + 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y + 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z + '\xb2' # 0xEA -> SUPERSCRIPT TWO + '\ufffe' # 0xEB -> UNDEFINED + '\ufffe' # 0xEC -> UNDEFINED + '\ufffe' # 0xED -> UNDEFINED + '\ufffe' # 0xEE -> UNDEFINED + '\ufffe' # 0xEF -> UNDEFINED + '0' # 0xF0 -> DIGIT ZERO + '1' # 0xF1 -> DIGIT ONE + '2' # 0xF2 -> DIGIT TWO + '3' # 0xF3 -> DIGIT THREE + '4' # 0xF4 -> DIGIT FOUR + '5' # 0xF5 -> DIGIT FIVE + '6' # 0xF6 -> DIGIT SIX + '7' # 0xF7 -> DIGIT SEVEN + '8' # 0xF8 -> DIGIT EIGHT + '9' # 0xF9 -> DIGIT NINE + '\xb3' # 0xFA -> SUPERSCRIPT THREE + '\ufffe' # 0xFB -> UNDEFINED + '\ufffe' # 0xFC -> UNDEFINED + '\ufffe' # 0xFD -> UNDEFINED + '\ufffe' # 0xFE -> UNDEFINED + '\x9f' # 0xFF -> EIGHT ONES +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp437.py b/my_env/Lib/encodings/cp437.py new file mode 100644 index 000000000..b6c75e2ca --- /dev/null +++ b/my_env/Lib/encodings/cp437.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec cp437 generated from 'VENDORS/MICSFT/PC/CP437.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp437', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE + 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE + 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00a2, # CENT SIGN + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00a5, # YEN SIGN + 0x009e: 0x20a7, # PESETA SIGN + 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x2310, # REVERSED NOT SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00e3: 0x03c0, # GREEK SMALL LETTER PI + 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU + 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00ec: 0x221e, # INFINITY + 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00ef: 0x2229, # INTERSECTION + 0x00f0: 0x2261, # IDENTICAL TO + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x2320, # TOP HALF INTEGRAL + 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + '\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS + '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE + '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE + '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE + '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE + '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE + '\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS + '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xa2' # 0x009b -> CENT SIGN + '\xa3' # 0x009c -> POUND SIGN + '\xa5' # 0x009d -> YEN SIGN + '\u20a7' # 0x009e -> PESETA SIGN + '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK + '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE + '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE + '\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR + '\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR + '\xbf' # 0x00a8 -> INVERTED QUESTION MARK + '\u2310' # 0x00a9 -> REVERSED NOT SIGN + '\xac' # 0x00aa -> NOT SIGN + '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\u258c' # 0x00dd -> LEFT HALF BLOCK + '\u2590' # 0x00de -> RIGHT HALF BLOCK + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA + '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + '\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA + '\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI + '\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA + '\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA + '\xb5' # 0x00e6 -> MICRO SIGN + '\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU + '\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI + '\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA + '\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA + '\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA + '\u221e' # 0x00ec -> INFINITY + '\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI + '\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON + '\u2229' # 0x00ef -> INTERSECTION + '\u2261' # 0x00f0 -> IDENTICAL TO + '\xb1' # 0x00f1 -> PLUS-MINUS SIGN + '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + '\u2320' # 0x00f4 -> TOP HALF INTEGRAL + '\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL + '\xf7' # 0x00f6 -> DIVISION SIGN + '\u2248' # 0x00f7 -> ALMOST EQUAL TO + '\xb0' # 0x00f8 -> DEGREE SIGN + '\u2219' # 0x00f9 -> BULLET OPERATOR + '\xb7' # 0x00fa -> MIDDLE DOT + '\u221a' # 0x00fb -> SQUARE ROOT + '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + '\xb2' # 0x00fd -> SUPERSCRIPT TWO + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a2: 0x009b, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00a5: 0x009d, # YEN SIGN + 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE + 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK + 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA + 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA + 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA + 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI + 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA + 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA + 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON + 0x03c0: 0x00e3, # GREEK SMALL LETTER PI + 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU + 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x20a7: 0x009e, # PESETA SIGN + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x221e: 0x00ec, # INFINITY + 0x2229: 0x00ef, # INTERSECTION + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2261: 0x00f0, # IDENTICAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2310: 0x00a9, # REVERSED NOT SIGN + 0x2320: 0x00f4, # TOP HALF INTEGRAL + 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp500.py b/my_env/Lib/encodings/cp500.py new file mode 100644 index 000000000..5f61535f8 --- /dev/null +++ b/my_env/Lib/encodings/cp500.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp500 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP500.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp500', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x9c' # 0x04 -> CONTROL + '\t' # 0x05 -> HORIZONTAL TABULATION + '\x86' # 0x06 -> CONTROL + '\x7f' # 0x07 -> DELETE + '\x97' # 0x08 -> CONTROL + '\x8d' # 0x09 -> CONTROL + '\x8e' # 0x0A -> CONTROL + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x9d' # 0x14 -> CONTROL + '\x85' # 0x15 -> CONTROL + '\x08' # 0x16 -> BACKSPACE + '\x87' # 0x17 -> CONTROL + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x92' # 0x1A -> CONTROL + '\x8f' # 0x1B -> CONTROL + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + '\x80' # 0x20 -> CONTROL + '\x81' # 0x21 -> CONTROL + '\x82' # 0x22 -> CONTROL + '\x83' # 0x23 -> CONTROL + '\x84' # 0x24 -> CONTROL + '\n' # 0x25 -> LINE FEED + '\x17' # 0x26 -> END OF TRANSMISSION BLOCK + '\x1b' # 0x27 -> ESCAPE + '\x88' # 0x28 -> CONTROL + '\x89' # 0x29 -> CONTROL + '\x8a' # 0x2A -> CONTROL + '\x8b' # 0x2B -> CONTROL + '\x8c' # 0x2C -> CONTROL + '\x05' # 0x2D -> ENQUIRY + '\x06' # 0x2E -> ACKNOWLEDGE + '\x07' # 0x2F -> BELL + '\x90' # 0x30 -> CONTROL + '\x91' # 0x31 -> CONTROL + '\x16' # 0x32 -> SYNCHRONOUS IDLE + '\x93' # 0x33 -> CONTROL + '\x94' # 0x34 -> CONTROL + '\x95' # 0x35 -> CONTROL + '\x96' # 0x36 -> CONTROL + '\x04' # 0x37 -> END OF TRANSMISSION + '\x98' # 0x38 -> CONTROL + '\x99' # 0x39 -> CONTROL + '\x9a' # 0x3A -> CONTROL + '\x9b' # 0x3B -> CONTROL + '\x14' # 0x3C -> DEVICE CONTROL FOUR + '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE + '\x9e' # 0x3E -> CONTROL + '\x1a' # 0x3F -> SUBSTITUTE + ' ' # 0x40 -> SPACE + '\xa0' # 0x41 -> NO-BREAK SPACE + '\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE + '\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE + '\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA + '\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE + '[' # 0x4A -> LEFT SQUARE BRACKET + '.' # 0x4B -> FULL STOP + '<' # 0x4C -> LESS-THAN SIGN + '(' # 0x4D -> LEFT PARENTHESIS + '+' # 0x4E -> PLUS SIGN + '!' # 0x4F -> EXCLAMATION MARK + '&' # 0x50 -> AMPERSAND + '\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE + '\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS + '\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE + '\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) + ']' # 0x5A -> RIGHT SQUARE BRACKET + '$' # 0x5B -> DOLLAR SIGN + '*' # 0x5C -> ASTERISK + ')' # 0x5D -> RIGHT PARENTHESIS + ';' # 0x5E -> SEMICOLON + '^' # 0x5F -> CIRCUMFLEX ACCENT + '-' # 0x60 -> HYPHEN-MINUS + '/' # 0x61 -> SOLIDUS + '\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE + '\xa6' # 0x6A -> BROKEN BAR + ',' # 0x6B -> COMMA + '%' # 0x6C -> PERCENT SIGN + '_' # 0x6D -> LOW LINE + '>' # 0x6E -> GREATER-THAN SIGN + '?' # 0x6F -> QUESTION MARK + '\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE + '\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE + '`' # 0x79 -> GRAVE ACCENT + ':' # 0x7A -> COLON + '#' # 0x7B -> NUMBER SIGN + '@' # 0x7C -> COMMERCIAL AT + "'" # 0x7D -> APOSTROPHE + '=' # 0x7E -> EQUALS SIGN + '"' # 0x7F -> QUOTATION MARK + '\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE + 'a' # 0x81 -> LATIN SMALL LETTER A + 'b' # 0x82 -> LATIN SMALL LETTER B + 'c' # 0x83 -> LATIN SMALL LETTER C + 'd' # 0x84 -> LATIN SMALL LETTER D + 'e' # 0x85 -> LATIN SMALL LETTER E + 'f' # 0x86 -> LATIN SMALL LETTER F + 'g' # 0x87 -> LATIN SMALL LETTER G + 'h' # 0x88 -> LATIN SMALL LETTER H + 'i' # 0x89 -> LATIN SMALL LETTER I + '\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xf0' # 0x8C -> LATIN SMALL LETTER ETH (ICELANDIC) + '\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE + '\xfe' # 0x8E -> LATIN SMALL LETTER THORN (ICELANDIC) + '\xb1' # 0x8F -> PLUS-MINUS SIGN + '\xb0' # 0x90 -> DEGREE SIGN + 'j' # 0x91 -> LATIN SMALL LETTER J + 'k' # 0x92 -> LATIN SMALL LETTER K + 'l' # 0x93 -> LATIN SMALL LETTER L + 'm' # 0x94 -> LATIN SMALL LETTER M + 'n' # 0x95 -> LATIN SMALL LETTER N + 'o' # 0x96 -> LATIN SMALL LETTER O + 'p' # 0x97 -> LATIN SMALL LETTER P + 'q' # 0x98 -> LATIN SMALL LETTER Q + 'r' # 0x99 -> LATIN SMALL LETTER R + '\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR + '\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR + '\xe6' # 0x9C -> LATIN SMALL LIGATURE AE + '\xb8' # 0x9D -> CEDILLA + '\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE + '\xa4' # 0x9F -> CURRENCY SIGN + '\xb5' # 0xA0 -> MICRO SIGN + '~' # 0xA1 -> TILDE + 's' # 0xA2 -> LATIN SMALL LETTER S + 't' # 0xA3 -> LATIN SMALL LETTER T + 'u' # 0xA4 -> LATIN SMALL LETTER U + 'v' # 0xA5 -> LATIN SMALL LETTER V + 'w' # 0xA6 -> LATIN SMALL LETTER W + 'x' # 0xA7 -> LATIN SMALL LETTER X + 'y' # 0xA8 -> LATIN SMALL LETTER Y + 'z' # 0xA9 -> LATIN SMALL LETTER Z + '\xa1' # 0xAA -> INVERTED EXCLAMATION MARK + '\xbf' # 0xAB -> INVERTED QUESTION MARK + '\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC) + '\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC) + '\xae' # 0xAF -> REGISTERED SIGN + '\xa2' # 0xB0 -> CENT SIGN + '\xa3' # 0xB1 -> POUND SIGN + '\xa5' # 0xB2 -> YEN SIGN + '\xb7' # 0xB3 -> MIDDLE DOT + '\xa9' # 0xB4 -> COPYRIGHT SIGN + '\xa7' # 0xB5 -> SECTION SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF + '\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS + '\xac' # 0xBA -> NOT SIGN + '|' # 0xBB -> VERTICAL LINE + '\xaf' # 0xBC -> MACRON + '\xa8' # 0xBD -> DIAERESIS + '\xb4' # 0xBE -> ACUTE ACCENT + '\xd7' # 0xBF -> MULTIPLICATION SIGN + '{' # 0xC0 -> LEFT CURLY BRACKET + 'A' # 0xC1 -> LATIN CAPITAL LETTER A + 'B' # 0xC2 -> LATIN CAPITAL LETTER B + 'C' # 0xC3 -> LATIN CAPITAL LETTER C + 'D' # 0xC4 -> LATIN CAPITAL LETTER D + 'E' # 0xC5 -> LATIN CAPITAL LETTER E + 'F' # 0xC6 -> LATIN CAPITAL LETTER F + 'G' # 0xC7 -> LATIN CAPITAL LETTER G + 'H' # 0xC8 -> LATIN CAPITAL LETTER H + 'I' # 0xC9 -> LATIN CAPITAL LETTER I + '\xad' # 0xCA -> SOFT HYPHEN + '\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0xCC -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE + '\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE + '}' # 0xD0 -> RIGHT CURLY BRACKET + 'J' # 0xD1 -> LATIN CAPITAL LETTER J + 'K' # 0xD2 -> LATIN CAPITAL LETTER K + 'L' # 0xD3 -> LATIN CAPITAL LETTER L + 'M' # 0xD4 -> LATIN CAPITAL LETTER M + 'N' # 0xD5 -> LATIN CAPITAL LETTER N + 'O' # 0xD6 -> LATIN CAPITAL LETTER O + 'P' # 0xD7 -> LATIN CAPITAL LETTER P + 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q + 'R' # 0xD9 -> LATIN CAPITAL LETTER R + '\xb9' # 0xDA -> SUPERSCRIPT ONE + '\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xDC -> LATIN SMALL LETTER U WITH DIAERESIS + '\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE + '\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS + '\\' # 0xE0 -> REVERSE SOLIDUS + '\xf7' # 0xE1 -> DIVISION SIGN + 'S' # 0xE2 -> LATIN CAPITAL LETTER S + 'T' # 0xE3 -> LATIN CAPITAL LETTER T + 'U' # 0xE4 -> LATIN CAPITAL LETTER U + 'V' # 0xE5 -> LATIN CAPITAL LETTER V + 'W' # 0xE6 -> LATIN CAPITAL LETTER W + 'X' # 0xE7 -> LATIN CAPITAL LETTER X + 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y + 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z + '\xb2' # 0xEA -> SUPERSCRIPT TWO + '\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd6' # 0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE + '0' # 0xF0 -> DIGIT ZERO + '1' # 0xF1 -> DIGIT ONE + '2' # 0xF2 -> DIGIT TWO + '3' # 0xF3 -> DIGIT THREE + '4' # 0xF4 -> DIGIT FOUR + '5' # 0xF5 -> DIGIT FIVE + '6' # 0xF6 -> DIGIT SIX + '7' # 0xF7 -> DIGIT SEVEN + '8' # 0xF8 -> DIGIT EIGHT + '9' # 0xF9 -> DIGIT NINE + '\xb3' # 0xFA -> SUPERSCRIPT THREE + '\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE + '\x9f' # 0xFF -> CONTROL +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp65001.py b/my_env/Lib/encodings/cp65001.py new file mode 100644 index 000000000..95cb2aecf --- /dev/null +++ b/my_env/Lib/encodings/cp65001.py @@ -0,0 +1,43 @@ +""" +Code page 65001: Windows UTF-8 (CP_UTF8). +""" + +import codecs +import functools + +if not hasattr(codecs, 'code_page_encode'): + raise LookupError("cp65001 encoding is only available on Windows") + +### Codec APIs + +encode = functools.partial(codecs.code_page_encode, 65001) +_decode = functools.partial(codecs.code_page_decode, 65001) + +def decode(input, errors='strict'): + return codecs.code_page_decode(65001, input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + _buffer_decode = _decode + +class StreamWriter(codecs.StreamWriter): + encode = encode + +class StreamReader(codecs.StreamReader): + decode = _decode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp65001', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/cp720.py b/my_env/Lib/encodings/cp720.py new file mode 100644 index 000000000..96d609616 --- /dev/null +++ b/my_env/Lib/encodings/cp720.py @@ -0,0 +1,309 @@ +"""Python Character Mapping Codec cp720 generated on Windows: +Vista 6.0.6002 SP2 Multiprocessor Free with the command: + python Tools/unicode/genwincodec.py 720 +"""#" + + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp720', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> CONTROL CHARACTER + '\x01' # 0x01 -> CONTROL CHARACTER + '\x02' # 0x02 -> CONTROL CHARACTER + '\x03' # 0x03 -> CONTROL CHARACTER + '\x04' # 0x04 -> CONTROL CHARACTER + '\x05' # 0x05 -> CONTROL CHARACTER + '\x06' # 0x06 -> CONTROL CHARACTER + '\x07' # 0x07 -> CONTROL CHARACTER + '\x08' # 0x08 -> CONTROL CHARACTER + '\t' # 0x09 -> CONTROL CHARACTER + '\n' # 0x0A -> CONTROL CHARACTER + '\x0b' # 0x0B -> CONTROL CHARACTER + '\x0c' # 0x0C -> CONTROL CHARACTER + '\r' # 0x0D -> CONTROL CHARACTER + '\x0e' # 0x0E -> CONTROL CHARACTER + '\x0f' # 0x0F -> CONTROL CHARACTER + '\x10' # 0x10 -> CONTROL CHARACTER + '\x11' # 0x11 -> CONTROL CHARACTER + '\x12' # 0x12 -> CONTROL CHARACTER + '\x13' # 0x13 -> CONTROL CHARACTER + '\x14' # 0x14 -> CONTROL CHARACTER + '\x15' # 0x15 -> CONTROL CHARACTER + '\x16' # 0x16 -> CONTROL CHARACTER + '\x17' # 0x17 -> CONTROL CHARACTER + '\x18' # 0x18 -> CONTROL CHARACTER + '\x19' # 0x19 -> CONTROL CHARACTER + '\x1a' # 0x1A -> CONTROL CHARACTER + '\x1b' # 0x1B -> CONTROL CHARACTER + '\x1c' # 0x1C -> CONTROL CHARACTER + '\x1d' # 0x1D -> CONTROL CHARACTER + '\x1e' # 0x1E -> CONTROL CHARACTER + '\x1f' # 0x1F -> CONTROL CHARACTER + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> CONTROL CHARACTER + '\x80' + '\x81' + '\xe9' # 0x82 -> LATIN SMALL LETTER E WITH ACUTE + '\xe2' # 0x83 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\x84' + '\xe0' # 0x85 -> LATIN SMALL LETTER A WITH GRAVE + '\x86' + '\xe7' # 0x87 -> LATIN SMALL LETTER C WITH CEDILLA + '\xea' # 0x88 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x89 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x8A -> LATIN SMALL LETTER E WITH GRAVE + '\xef' # 0x8B -> LATIN SMALL LETTER I WITH DIAERESIS + '\xee' # 0x8C -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\x8d' + '\x8e' + '\x8f' + '\x90' + '\u0651' # 0x91 -> ARABIC SHADDA + '\u0652' # 0x92 -> ARABIC SUKUN + '\xf4' # 0x93 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xa4' # 0x94 -> CURRENCY SIGN + '\u0640' # 0x95 -> ARABIC TATWEEL + '\xfb' # 0x96 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xf9' # 0x97 -> LATIN SMALL LETTER U WITH GRAVE + '\u0621' # 0x98 -> ARABIC LETTER HAMZA + '\u0622' # 0x99 -> ARABIC LETTER ALEF WITH MADDA ABOVE + '\u0623' # 0x9A -> ARABIC LETTER ALEF WITH HAMZA ABOVE + '\u0624' # 0x9B -> ARABIC LETTER WAW WITH HAMZA ABOVE + '\xa3' # 0x9C -> POUND SIGN + '\u0625' # 0x9D -> ARABIC LETTER ALEF WITH HAMZA BELOW + '\u0626' # 0x9E -> ARABIC LETTER YEH WITH HAMZA ABOVE + '\u0627' # 0x9F -> ARABIC LETTER ALEF + '\u0628' # 0xA0 -> ARABIC LETTER BEH + '\u0629' # 0xA1 -> ARABIC LETTER TEH MARBUTA + '\u062a' # 0xA2 -> ARABIC LETTER TEH + '\u062b' # 0xA3 -> ARABIC LETTER THEH + '\u062c' # 0xA4 -> ARABIC LETTER JEEM + '\u062d' # 0xA5 -> ARABIC LETTER HAH + '\u062e' # 0xA6 -> ARABIC LETTER KHAH + '\u062f' # 0xA7 -> ARABIC LETTER DAL + '\u0630' # 0xA8 -> ARABIC LETTER THAL + '\u0631' # 0xA9 -> ARABIC LETTER REH + '\u0632' # 0xAA -> ARABIC LETTER ZAIN + '\u0633' # 0xAB -> ARABIC LETTER SEEN + '\u0634' # 0xAC -> ARABIC LETTER SHEEN + '\u0635' # 0xAD -> ARABIC LETTER SAD + '\xab' # 0xAE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0xAF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0xB0 -> LIGHT SHADE + '\u2592' # 0xB1 -> MEDIUM SHADE + '\u2593' # 0xB2 -> DARK SHADE + '\u2502' # 0xB3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0xB4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u2561' # 0xB5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + '\u2562' # 0xB6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + '\u2556' # 0xB7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + '\u2555' # 0xB8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + '\u2563' # 0xB9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0xBA -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0xBB -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0xBC -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u255c' # 0xBD -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + '\u255b' # 0xBE -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + '\u2510' # 0xBF -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0xC0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0xC1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0xC2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0xC3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0xC4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0xC5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u255e' # 0xC6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + '\u255f' # 0xC7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + '\u255a' # 0xC8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0xC9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0xCA -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0xCB -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0xCC -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0xCD -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0xCE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\u2567' # 0xCF -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + '\u2568' # 0xD0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + '\u2564' # 0xD1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + '\u2565' # 0xD2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + '\u2559' # 0xD3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + '\u2558' # 0xD4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + '\u2552' # 0xD5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + '\u2553' # 0xD6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + '\u256b' # 0xD7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + '\u256a' # 0xD8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + '\u2518' # 0xD9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0xDA -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0xDB -> FULL BLOCK + '\u2584' # 0xDC -> LOWER HALF BLOCK + '\u258c' # 0xDD -> LEFT HALF BLOCK + '\u2590' # 0xDE -> RIGHT HALF BLOCK + '\u2580' # 0xDF -> UPPER HALF BLOCK + '\u0636' # 0xE0 -> ARABIC LETTER DAD + '\u0637' # 0xE1 -> ARABIC LETTER TAH + '\u0638' # 0xE2 -> ARABIC LETTER ZAH + '\u0639' # 0xE3 -> ARABIC LETTER AIN + '\u063a' # 0xE4 -> ARABIC LETTER GHAIN + '\u0641' # 0xE5 -> ARABIC LETTER FEH + '\xb5' # 0xE6 -> MICRO SIGN + '\u0642' # 0xE7 -> ARABIC LETTER QAF + '\u0643' # 0xE8 -> ARABIC LETTER KAF + '\u0644' # 0xE9 -> ARABIC LETTER LAM + '\u0645' # 0xEA -> ARABIC LETTER MEEM + '\u0646' # 0xEB -> ARABIC LETTER NOON + '\u0647' # 0xEC -> ARABIC LETTER HEH + '\u0648' # 0xED -> ARABIC LETTER WAW + '\u0649' # 0xEE -> ARABIC LETTER ALEF MAKSURA + '\u064a' # 0xEF -> ARABIC LETTER YEH + '\u2261' # 0xF0 -> IDENTICAL TO + '\u064b' # 0xF1 -> ARABIC FATHATAN + '\u064c' # 0xF2 -> ARABIC DAMMATAN + '\u064d' # 0xF3 -> ARABIC KASRATAN + '\u064e' # 0xF4 -> ARABIC FATHA + '\u064f' # 0xF5 -> ARABIC DAMMA + '\u0650' # 0xF6 -> ARABIC KASRA + '\u2248' # 0xF7 -> ALMOST EQUAL TO + '\xb0' # 0xF8 -> DEGREE SIGN + '\u2219' # 0xF9 -> BULLET OPERATOR + '\xb7' # 0xFA -> MIDDLE DOT + '\u221a' # 0xFB -> SQUARE ROOT + '\u207f' # 0xFC -> SUPERSCRIPT LATIN SMALL LETTER N + '\xb2' # 0xFD -> SUPERSCRIPT TWO + '\u25a0' # 0xFE -> BLACK SQUARE + '\xa0' # 0xFF -> NO-BREAK SPACE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp737.py b/my_env/Lib/encodings/cp737.py new file mode 100644 index 000000000..9685bae75 --- /dev/null +++ b/my_env/Lib/encodings/cp737.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec cp737 generated from 'VENDORS/MICSFT/PC/CP737.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp737', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x0391, # GREEK CAPITAL LETTER ALPHA + 0x0081: 0x0392, # GREEK CAPITAL LETTER BETA + 0x0082: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x0083: 0x0394, # GREEK CAPITAL LETTER DELTA + 0x0084: 0x0395, # GREEK CAPITAL LETTER EPSILON + 0x0085: 0x0396, # GREEK CAPITAL LETTER ZETA + 0x0086: 0x0397, # GREEK CAPITAL LETTER ETA + 0x0087: 0x0398, # GREEK CAPITAL LETTER THETA + 0x0088: 0x0399, # GREEK CAPITAL LETTER IOTA + 0x0089: 0x039a, # GREEK CAPITAL LETTER KAPPA + 0x008a: 0x039b, # GREEK CAPITAL LETTER LAMDA + 0x008b: 0x039c, # GREEK CAPITAL LETTER MU + 0x008c: 0x039d, # GREEK CAPITAL LETTER NU + 0x008d: 0x039e, # GREEK CAPITAL LETTER XI + 0x008e: 0x039f, # GREEK CAPITAL LETTER OMICRON + 0x008f: 0x03a0, # GREEK CAPITAL LETTER PI + 0x0090: 0x03a1, # GREEK CAPITAL LETTER RHO + 0x0091: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x0092: 0x03a4, # GREEK CAPITAL LETTER TAU + 0x0093: 0x03a5, # GREEK CAPITAL LETTER UPSILON + 0x0094: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x0095: 0x03a7, # GREEK CAPITAL LETTER CHI + 0x0096: 0x03a8, # GREEK CAPITAL LETTER PSI + 0x0097: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x0098: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x0099: 0x03b2, # GREEK SMALL LETTER BETA + 0x009a: 0x03b3, # GREEK SMALL LETTER GAMMA + 0x009b: 0x03b4, # GREEK SMALL LETTER DELTA + 0x009c: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x009d: 0x03b6, # GREEK SMALL LETTER ZETA + 0x009e: 0x03b7, # GREEK SMALL LETTER ETA + 0x009f: 0x03b8, # GREEK SMALL LETTER THETA + 0x00a0: 0x03b9, # GREEK SMALL LETTER IOTA + 0x00a1: 0x03ba, # GREEK SMALL LETTER KAPPA + 0x00a2: 0x03bb, # GREEK SMALL LETTER LAMDA + 0x00a3: 0x03bc, # GREEK SMALL LETTER MU + 0x00a4: 0x03bd, # GREEK SMALL LETTER NU + 0x00a5: 0x03be, # GREEK SMALL LETTER XI + 0x00a6: 0x03bf, # GREEK SMALL LETTER OMICRON + 0x00a7: 0x03c0, # GREEK SMALL LETTER PI + 0x00a8: 0x03c1, # GREEK SMALL LETTER RHO + 0x00a9: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00aa: 0x03c2, # GREEK SMALL LETTER FINAL SIGMA + 0x00ab: 0x03c4, # GREEK SMALL LETTER TAU + 0x00ac: 0x03c5, # GREEK SMALL LETTER UPSILON + 0x00ad: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ae: 0x03c7, # GREEK SMALL LETTER CHI + 0x00af: 0x03c8, # GREEK SMALL LETTER PSI + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03c9, # GREEK SMALL LETTER OMEGA + 0x00e1: 0x03ac, # GREEK SMALL LETTER ALPHA WITH TONOS + 0x00e2: 0x03ad, # GREEK SMALL LETTER EPSILON WITH TONOS + 0x00e3: 0x03ae, # GREEK SMALL LETTER ETA WITH TONOS + 0x00e4: 0x03ca, # GREEK SMALL LETTER IOTA WITH DIALYTIKA + 0x00e5: 0x03af, # GREEK SMALL LETTER IOTA WITH TONOS + 0x00e6: 0x03cc, # GREEK SMALL LETTER OMICRON WITH TONOS + 0x00e7: 0x03cd, # GREEK SMALL LETTER UPSILON WITH TONOS + 0x00e8: 0x03cb, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA + 0x00e9: 0x03ce, # GREEK SMALL LETTER OMEGA WITH TONOS + 0x00ea: 0x0386, # GREEK CAPITAL LETTER ALPHA WITH TONOS + 0x00eb: 0x0388, # GREEK CAPITAL LETTER EPSILON WITH TONOS + 0x00ec: 0x0389, # GREEK CAPITAL LETTER ETA WITH TONOS + 0x00ed: 0x038a, # GREEK CAPITAL LETTER IOTA WITH TONOS + 0x00ee: 0x038c, # GREEK CAPITAL LETTER OMICRON WITH TONOS + 0x00ef: 0x038e, # GREEK CAPITAL LETTER UPSILON WITH TONOS + 0x00f0: 0x038f, # GREEK CAPITAL LETTER OMEGA WITH TONOS + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x03aa, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + 0x00f5: 0x03ab, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\u0391' # 0x0080 -> GREEK CAPITAL LETTER ALPHA + '\u0392' # 0x0081 -> GREEK CAPITAL LETTER BETA + '\u0393' # 0x0082 -> GREEK CAPITAL LETTER GAMMA + '\u0394' # 0x0083 -> GREEK CAPITAL LETTER DELTA + '\u0395' # 0x0084 -> GREEK CAPITAL LETTER EPSILON + '\u0396' # 0x0085 -> GREEK CAPITAL LETTER ZETA + '\u0397' # 0x0086 -> GREEK CAPITAL LETTER ETA + '\u0398' # 0x0087 -> GREEK CAPITAL LETTER THETA + '\u0399' # 0x0088 -> GREEK CAPITAL LETTER IOTA + '\u039a' # 0x0089 -> GREEK CAPITAL LETTER KAPPA + '\u039b' # 0x008a -> GREEK CAPITAL LETTER LAMDA + '\u039c' # 0x008b -> GREEK CAPITAL LETTER MU + '\u039d' # 0x008c -> GREEK CAPITAL LETTER NU + '\u039e' # 0x008d -> GREEK CAPITAL LETTER XI + '\u039f' # 0x008e -> GREEK CAPITAL LETTER OMICRON + '\u03a0' # 0x008f -> GREEK CAPITAL LETTER PI + '\u03a1' # 0x0090 -> GREEK CAPITAL LETTER RHO + '\u03a3' # 0x0091 -> GREEK CAPITAL LETTER SIGMA + '\u03a4' # 0x0092 -> GREEK CAPITAL LETTER TAU + '\u03a5' # 0x0093 -> GREEK CAPITAL LETTER UPSILON + '\u03a6' # 0x0094 -> GREEK CAPITAL LETTER PHI + '\u03a7' # 0x0095 -> GREEK CAPITAL LETTER CHI + '\u03a8' # 0x0096 -> GREEK CAPITAL LETTER PSI + '\u03a9' # 0x0097 -> GREEK CAPITAL LETTER OMEGA + '\u03b1' # 0x0098 -> GREEK SMALL LETTER ALPHA + '\u03b2' # 0x0099 -> GREEK SMALL LETTER BETA + '\u03b3' # 0x009a -> GREEK SMALL LETTER GAMMA + '\u03b4' # 0x009b -> GREEK SMALL LETTER DELTA + '\u03b5' # 0x009c -> GREEK SMALL LETTER EPSILON + '\u03b6' # 0x009d -> GREEK SMALL LETTER ZETA + '\u03b7' # 0x009e -> GREEK SMALL LETTER ETA + '\u03b8' # 0x009f -> GREEK SMALL LETTER THETA + '\u03b9' # 0x00a0 -> GREEK SMALL LETTER IOTA + '\u03ba' # 0x00a1 -> GREEK SMALL LETTER KAPPA + '\u03bb' # 0x00a2 -> GREEK SMALL LETTER LAMDA + '\u03bc' # 0x00a3 -> GREEK SMALL LETTER MU + '\u03bd' # 0x00a4 -> GREEK SMALL LETTER NU + '\u03be' # 0x00a5 -> GREEK SMALL LETTER XI + '\u03bf' # 0x00a6 -> GREEK SMALL LETTER OMICRON + '\u03c0' # 0x00a7 -> GREEK SMALL LETTER PI + '\u03c1' # 0x00a8 -> GREEK SMALL LETTER RHO + '\u03c3' # 0x00a9 -> GREEK SMALL LETTER SIGMA + '\u03c2' # 0x00aa -> GREEK SMALL LETTER FINAL SIGMA + '\u03c4' # 0x00ab -> GREEK SMALL LETTER TAU + '\u03c5' # 0x00ac -> GREEK SMALL LETTER UPSILON + '\u03c6' # 0x00ad -> GREEK SMALL LETTER PHI + '\u03c7' # 0x00ae -> GREEK SMALL LETTER CHI + '\u03c8' # 0x00af -> GREEK SMALL LETTER PSI + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\u258c' # 0x00dd -> LEFT HALF BLOCK + '\u2590' # 0x00de -> RIGHT HALF BLOCK + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\u03c9' # 0x00e0 -> GREEK SMALL LETTER OMEGA + '\u03ac' # 0x00e1 -> GREEK SMALL LETTER ALPHA WITH TONOS + '\u03ad' # 0x00e2 -> GREEK SMALL LETTER EPSILON WITH TONOS + '\u03ae' # 0x00e3 -> GREEK SMALL LETTER ETA WITH TONOS + '\u03ca' # 0x00e4 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA + '\u03af' # 0x00e5 -> GREEK SMALL LETTER IOTA WITH TONOS + '\u03cc' # 0x00e6 -> GREEK SMALL LETTER OMICRON WITH TONOS + '\u03cd' # 0x00e7 -> GREEK SMALL LETTER UPSILON WITH TONOS + '\u03cb' # 0x00e8 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA + '\u03ce' # 0x00e9 -> GREEK SMALL LETTER OMEGA WITH TONOS + '\u0386' # 0x00ea -> GREEK CAPITAL LETTER ALPHA WITH TONOS + '\u0388' # 0x00eb -> GREEK CAPITAL LETTER EPSILON WITH TONOS + '\u0389' # 0x00ec -> GREEK CAPITAL LETTER ETA WITH TONOS + '\u038a' # 0x00ed -> GREEK CAPITAL LETTER IOTA WITH TONOS + '\u038c' # 0x00ee -> GREEK CAPITAL LETTER OMICRON WITH TONOS + '\u038e' # 0x00ef -> GREEK CAPITAL LETTER UPSILON WITH TONOS + '\u038f' # 0x00f0 -> GREEK CAPITAL LETTER OMEGA WITH TONOS + '\xb1' # 0x00f1 -> PLUS-MINUS SIGN + '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + '\u03aa' # 0x00f4 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + '\u03ab' # 0x00f5 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + '\xf7' # 0x00f6 -> DIVISION SIGN + '\u2248' # 0x00f7 -> ALMOST EQUAL TO + '\xb0' # 0x00f8 -> DEGREE SIGN + '\u2219' # 0x00f9 -> BULLET OPERATOR + '\xb7' # 0x00fa -> MIDDLE DOT + '\u221a' # 0x00fb -> SQUARE ROOT + '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + '\xb2' # 0x00fd -> SUPERSCRIPT TWO + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00f7: 0x00f6, # DIVISION SIGN + 0x0386: 0x00ea, # GREEK CAPITAL LETTER ALPHA WITH TONOS + 0x0388: 0x00eb, # GREEK CAPITAL LETTER EPSILON WITH TONOS + 0x0389: 0x00ec, # GREEK CAPITAL LETTER ETA WITH TONOS + 0x038a: 0x00ed, # GREEK CAPITAL LETTER IOTA WITH TONOS + 0x038c: 0x00ee, # GREEK CAPITAL LETTER OMICRON WITH TONOS + 0x038e: 0x00ef, # GREEK CAPITAL LETTER UPSILON WITH TONOS + 0x038f: 0x00f0, # GREEK CAPITAL LETTER OMEGA WITH TONOS + 0x0391: 0x0080, # GREEK CAPITAL LETTER ALPHA + 0x0392: 0x0081, # GREEK CAPITAL LETTER BETA + 0x0393: 0x0082, # GREEK CAPITAL LETTER GAMMA + 0x0394: 0x0083, # GREEK CAPITAL LETTER DELTA + 0x0395: 0x0084, # GREEK CAPITAL LETTER EPSILON + 0x0396: 0x0085, # GREEK CAPITAL LETTER ZETA + 0x0397: 0x0086, # GREEK CAPITAL LETTER ETA + 0x0398: 0x0087, # GREEK CAPITAL LETTER THETA + 0x0399: 0x0088, # GREEK CAPITAL LETTER IOTA + 0x039a: 0x0089, # GREEK CAPITAL LETTER KAPPA + 0x039b: 0x008a, # GREEK CAPITAL LETTER LAMDA + 0x039c: 0x008b, # GREEK CAPITAL LETTER MU + 0x039d: 0x008c, # GREEK CAPITAL LETTER NU + 0x039e: 0x008d, # GREEK CAPITAL LETTER XI + 0x039f: 0x008e, # GREEK CAPITAL LETTER OMICRON + 0x03a0: 0x008f, # GREEK CAPITAL LETTER PI + 0x03a1: 0x0090, # GREEK CAPITAL LETTER RHO + 0x03a3: 0x0091, # GREEK CAPITAL LETTER SIGMA + 0x03a4: 0x0092, # GREEK CAPITAL LETTER TAU + 0x03a5: 0x0093, # GREEK CAPITAL LETTER UPSILON + 0x03a6: 0x0094, # GREEK CAPITAL LETTER PHI + 0x03a7: 0x0095, # GREEK CAPITAL LETTER CHI + 0x03a8: 0x0096, # GREEK CAPITAL LETTER PSI + 0x03a9: 0x0097, # GREEK CAPITAL LETTER OMEGA + 0x03aa: 0x00f4, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + 0x03ab: 0x00f5, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + 0x03ac: 0x00e1, # GREEK SMALL LETTER ALPHA WITH TONOS + 0x03ad: 0x00e2, # GREEK SMALL LETTER EPSILON WITH TONOS + 0x03ae: 0x00e3, # GREEK SMALL LETTER ETA WITH TONOS + 0x03af: 0x00e5, # GREEK SMALL LETTER IOTA WITH TONOS + 0x03b1: 0x0098, # GREEK SMALL LETTER ALPHA + 0x03b2: 0x0099, # GREEK SMALL LETTER BETA + 0x03b3: 0x009a, # GREEK SMALL LETTER GAMMA + 0x03b4: 0x009b, # GREEK SMALL LETTER DELTA + 0x03b5: 0x009c, # GREEK SMALL LETTER EPSILON + 0x03b6: 0x009d, # GREEK SMALL LETTER ZETA + 0x03b7: 0x009e, # GREEK SMALL LETTER ETA + 0x03b8: 0x009f, # GREEK SMALL LETTER THETA + 0x03b9: 0x00a0, # GREEK SMALL LETTER IOTA + 0x03ba: 0x00a1, # GREEK SMALL LETTER KAPPA + 0x03bb: 0x00a2, # GREEK SMALL LETTER LAMDA + 0x03bc: 0x00a3, # GREEK SMALL LETTER MU + 0x03bd: 0x00a4, # GREEK SMALL LETTER NU + 0x03be: 0x00a5, # GREEK SMALL LETTER XI + 0x03bf: 0x00a6, # GREEK SMALL LETTER OMICRON + 0x03c0: 0x00a7, # GREEK SMALL LETTER PI + 0x03c1: 0x00a8, # GREEK SMALL LETTER RHO + 0x03c2: 0x00aa, # GREEK SMALL LETTER FINAL SIGMA + 0x03c3: 0x00a9, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00ab, # GREEK SMALL LETTER TAU + 0x03c5: 0x00ac, # GREEK SMALL LETTER UPSILON + 0x03c6: 0x00ad, # GREEK SMALL LETTER PHI + 0x03c7: 0x00ae, # GREEK SMALL LETTER CHI + 0x03c8: 0x00af, # GREEK SMALL LETTER PSI + 0x03c9: 0x00e0, # GREEK SMALL LETTER OMEGA + 0x03ca: 0x00e4, # GREEK SMALL LETTER IOTA WITH DIALYTIKA + 0x03cb: 0x00e8, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA + 0x03cc: 0x00e6, # GREEK SMALL LETTER OMICRON WITH TONOS + 0x03cd: 0x00e7, # GREEK SMALL LETTER UPSILON WITH TONOS + 0x03ce: 0x00e9, # GREEK SMALL LETTER OMEGA WITH TONOS + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp775.py b/my_env/Lib/encodings/cp775.py new file mode 100644 index 000000000..fe06e7bc3 --- /dev/null +++ b/my_env/Lib/encodings/cp775.py @@ -0,0 +1,697 @@ +""" Python Character Mapping Codec cp775 generated from 'VENDORS/MICSFT/PC/CP775.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp775', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x0106, # LATIN CAPITAL LETTER C WITH ACUTE + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x0101, # LATIN SMALL LETTER A WITH MACRON + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x0123, # LATIN SMALL LETTER G WITH CEDILLA + 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x0087: 0x0107, # LATIN SMALL LETTER C WITH ACUTE + 0x0088: 0x0142, # LATIN SMALL LETTER L WITH STROKE + 0x0089: 0x0113, # LATIN SMALL LETTER E WITH MACRON + 0x008a: 0x0156, # LATIN CAPITAL LETTER R WITH CEDILLA + 0x008b: 0x0157, # LATIN SMALL LETTER R WITH CEDILLA + 0x008c: 0x012b, # LATIN SMALL LETTER I WITH MACRON + 0x008d: 0x0179, # LATIN CAPITAL LETTER Z WITH ACUTE + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE + 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE + 0x0093: 0x014d, # LATIN SMALL LETTER O WITH MACRON + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x0122, # LATIN CAPITAL LETTER G WITH CEDILLA + 0x0096: 0x00a2, # CENT SIGN + 0x0097: 0x015a, # LATIN CAPITAL LETTER S WITH ACUTE + 0x0098: 0x015b, # LATIN SMALL LETTER S WITH ACUTE + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE + 0x009e: 0x00d7, # MULTIPLICATION SIGN + 0x009f: 0x00a4, # CURRENCY SIGN + 0x00a0: 0x0100, # LATIN CAPITAL LETTER A WITH MACRON + 0x00a1: 0x012a, # LATIN CAPITAL LETTER I WITH MACRON + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x017b, # LATIN CAPITAL LETTER Z WITH DOT ABOVE + 0x00a4: 0x017c, # LATIN SMALL LETTER Z WITH DOT ABOVE + 0x00a5: 0x017a, # LATIN SMALL LETTER Z WITH ACUTE + 0x00a6: 0x201d, # RIGHT DOUBLE QUOTATION MARK + 0x00a7: 0x00a6, # BROKEN BAR + 0x00a8: 0x00a9, # COPYRIGHT SIGN + 0x00a9: 0x00ae, # REGISTERED SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x0141, # LATIN CAPITAL LETTER L WITH STROKE + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x0104, # LATIN CAPITAL LETTER A WITH OGONEK + 0x00b6: 0x010c, # LATIN CAPITAL LETTER C WITH CARON + 0x00b7: 0x0118, # LATIN CAPITAL LETTER E WITH OGONEK + 0x00b8: 0x0116, # LATIN CAPITAL LETTER E WITH DOT ABOVE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x012e, # LATIN CAPITAL LETTER I WITH OGONEK + 0x00be: 0x0160, # LATIN CAPITAL LETTER S WITH CARON + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x0172, # LATIN CAPITAL LETTER U WITH OGONEK + 0x00c7: 0x016a, # LATIN CAPITAL LETTER U WITH MACRON + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x017d, # LATIN CAPITAL LETTER Z WITH CARON + 0x00d0: 0x0105, # LATIN SMALL LETTER A WITH OGONEK + 0x00d1: 0x010d, # LATIN SMALL LETTER C WITH CARON + 0x00d2: 0x0119, # LATIN SMALL LETTER E WITH OGONEK + 0x00d3: 0x0117, # LATIN SMALL LETTER E WITH DOT ABOVE + 0x00d4: 0x012f, # LATIN SMALL LETTER I WITH OGONEK + 0x00d5: 0x0161, # LATIN SMALL LETTER S WITH CARON + 0x00d6: 0x0173, # LATIN SMALL LETTER U WITH OGONEK + 0x00d7: 0x016b, # LATIN SMALL LETTER U WITH MACRON + 0x00d8: 0x017e, # LATIN SMALL LETTER Z WITH CARON + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S (GERMAN) + 0x00e2: 0x014c, # LATIN CAPITAL LETTER O WITH MACRON + 0x00e3: 0x0143, # LATIN CAPITAL LETTER N WITH ACUTE + 0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE + 0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x0144, # LATIN SMALL LETTER N WITH ACUTE + 0x00e8: 0x0136, # LATIN CAPITAL LETTER K WITH CEDILLA + 0x00e9: 0x0137, # LATIN SMALL LETTER K WITH CEDILLA + 0x00ea: 0x013b, # LATIN CAPITAL LETTER L WITH CEDILLA + 0x00eb: 0x013c, # LATIN SMALL LETTER L WITH CEDILLA + 0x00ec: 0x0146, # LATIN SMALL LETTER N WITH CEDILLA + 0x00ed: 0x0112, # LATIN CAPITAL LETTER E WITH MACRON + 0x00ee: 0x0145, # LATIN CAPITAL LETTER N WITH CEDILLA + 0x00ef: 0x2019, # RIGHT SINGLE QUOTATION MARK + 0x00f0: 0x00ad, # SOFT HYPHEN + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x201c, # LEFT DOUBLE QUOTATION MARK + 0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS + 0x00f4: 0x00b6, # PILCROW SIGN + 0x00f5: 0x00a7, # SECTION SIGN + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x201e, # DOUBLE LOW-9 QUOTATION MARK + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x00b9, # SUPERSCRIPT ONE + 0x00fc: 0x00b3, # SUPERSCRIPT THREE + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\u0106' # 0x0080 -> LATIN CAPITAL LETTER C WITH ACUTE + '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + '\u0101' # 0x0083 -> LATIN SMALL LETTER A WITH MACRON + '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + '\u0123' # 0x0085 -> LATIN SMALL LETTER G WITH CEDILLA + '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE + '\u0107' # 0x0087 -> LATIN SMALL LETTER C WITH ACUTE + '\u0142' # 0x0088 -> LATIN SMALL LETTER L WITH STROKE + '\u0113' # 0x0089 -> LATIN SMALL LETTER E WITH MACRON + '\u0156' # 0x008a -> LATIN CAPITAL LETTER R WITH CEDILLA + '\u0157' # 0x008b -> LATIN SMALL LETTER R WITH CEDILLA + '\u012b' # 0x008c -> LATIN SMALL LETTER I WITH MACRON + '\u0179' # 0x008d -> LATIN CAPITAL LETTER Z WITH ACUTE + '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE + '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE + '\u014d' # 0x0093 -> LATIN SMALL LETTER O WITH MACRON + '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + '\u0122' # 0x0095 -> LATIN CAPITAL LETTER G WITH CEDILLA + '\xa2' # 0x0096 -> CENT SIGN + '\u015a' # 0x0097 -> LATIN CAPITAL LETTER S WITH ACUTE + '\u015b' # 0x0098 -> LATIN SMALL LETTER S WITH ACUTE + '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE + '\xa3' # 0x009c -> POUND SIGN + '\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE + '\xd7' # 0x009e -> MULTIPLICATION SIGN + '\xa4' # 0x009f -> CURRENCY SIGN + '\u0100' # 0x00a0 -> LATIN CAPITAL LETTER A WITH MACRON + '\u012a' # 0x00a1 -> LATIN CAPITAL LETTER I WITH MACRON + '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + '\u017b' # 0x00a3 -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + '\u017c' # 0x00a4 -> LATIN SMALL LETTER Z WITH DOT ABOVE + '\u017a' # 0x00a5 -> LATIN SMALL LETTER Z WITH ACUTE + '\u201d' # 0x00a6 -> RIGHT DOUBLE QUOTATION MARK + '\xa6' # 0x00a7 -> BROKEN BAR + '\xa9' # 0x00a8 -> COPYRIGHT SIGN + '\xae' # 0x00a9 -> REGISTERED SIGN + '\xac' # 0x00aa -> NOT SIGN + '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + '\u0141' # 0x00ad -> LATIN CAPITAL LETTER L WITH STROKE + '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u0104' # 0x00b5 -> LATIN CAPITAL LETTER A WITH OGONEK + '\u010c' # 0x00b6 -> LATIN CAPITAL LETTER C WITH CARON + '\u0118' # 0x00b7 -> LATIN CAPITAL LETTER E WITH OGONEK + '\u0116' # 0x00b8 -> LATIN CAPITAL LETTER E WITH DOT ABOVE + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u012e' # 0x00bd -> LATIN CAPITAL LETTER I WITH OGONEK + '\u0160' # 0x00be -> LATIN CAPITAL LETTER S WITH CARON + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u0172' # 0x00c6 -> LATIN CAPITAL LETTER U WITH OGONEK + '\u016a' # 0x00c7 -> LATIN CAPITAL LETTER U WITH MACRON + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\u017d' # 0x00cf -> LATIN CAPITAL LETTER Z WITH CARON + '\u0105' # 0x00d0 -> LATIN SMALL LETTER A WITH OGONEK + '\u010d' # 0x00d1 -> LATIN SMALL LETTER C WITH CARON + '\u0119' # 0x00d2 -> LATIN SMALL LETTER E WITH OGONEK + '\u0117' # 0x00d3 -> LATIN SMALL LETTER E WITH DOT ABOVE + '\u012f' # 0x00d4 -> LATIN SMALL LETTER I WITH OGONEK + '\u0161' # 0x00d5 -> LATIN SMALL LETTER S WITH CARON + '\u0173' # 0x00d6 -> LATIN SMALL LETTER U WITH OGONEK + '\u016b' # 0x00d7 -> LATIN SMALL LETTER U WITH MACRON + '\u017e' # 0x00d8 -> LATIN SMALL LETTER Z WITH CARON + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\u258c' # 0x00dd -> LEFT HALF BLOCK + '\u2590' # 0x00de -> RIGHT HALF BLOCK + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S (GERMAN) + '\u014c' # 0x00e2 -> LATIN CAPITAL LETTER O WITH MACRON + '\u0143' # 0x00e3 -> LATIN CAPITAL LETTER N WITH ACUTE + '\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE + '\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xb5' # 0x00e6 -> MICRO SIGN + '\u0144' # 0x00e7 -> LATIN SMALL LETTER N WITH ACUTE + '\u0136' # 0x00e8 -> LATIN CAPITAL LETTER K WITH CEDILLA + '\u0137' # 0x00e9 -> LATIN SMALL LETTER K WITH CEDILLA + '\u013b' # 0x00ea -> LATIN CAPITAL LETTER L WITH CEDILLA + '\u013c' # 0x00eb -> LATIN SMALL LETTER L WITH CEDILLA + '\u0146' # 0x00ec -> LATIN SMALL LETTER N WITH CEDILLA + '\u0112' # 0x00ed -> LATIN CAPITAL LETTER E WITH MACRON + '\u0145' # 0x00ee -> LATIN CAPITAL LETTER N WITH CEDILLA + '\u2019' # 0x00ef -> RIGHT SINGLE QUOTATION MARK + '\xad' # 0x00f0 -> SOFT HYPHEN + '\xb1' # 0x00f1 -> PLUS-MINUS SIGN + '\u201c' # 0x00f2 -> LEFT DOUBLE QUOTATION MARK + '\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS + '\xb6' # 0x00f4 -> PILCROW SIGN + '\xa7' # 0x00f5 -> SECTION SIGN + '\xf7' # 0x00f6 -> DIVISION SIGN + '\u201e' # 0x00f7 -> DOUBLE LOW-9 QUOTATION MARK + '\xb0' # 0x00f8 -> DEGREE SIGN + '\u2219' # 0x00f9 -> BULLET OPERATOR + '\xb7' # 0x00fa -> MIDDLE DOT + '\xb9' # 0x00fb -> SUPERSCRIPT ONE + '\xb3' # 0x00fc -> SUPERSCRIPT THREE + '\xb2' # 0x00fd -> SUPERSCRIPT TWO + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a2: 0x0096, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00a4: 0x009f, # CURRENCY SIGN + 0x00a6: 0x00a7, # BROKEN BAR + 0x00a7: 0x00f5, # SECTION SIGN + 0x00a9: 0x00a8, # COPYRIGHT SIGN + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00ad: 0x00f0, # SOFT HYPHEN + 0x00ae: 0x00a9, # REGISTERED SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b3: 0x00fc, # SUPERSCRIPT THREE + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b6: 0x00f4, # PILCROW SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00b9: 0x00fb, # SUPERSCRIPT ONE + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00d7: 0x009e, # MULTIPLICATION SIGN + 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S (GERMAN) + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0100: 0x00a0, # LATIN CAPITAL LETTER A WITH MACRON + 0x0101: 0x0083, # LATIN SMALL LETTER A WITH MACRON + 0x0104: 0x00b5, # LATIN CAPITAL LETTER A WITH OGONEK + 0x0105: 0x00d0, # LATIN SMALL LETTER A WITH OGONEK + 0x0106: 0x0080, # LATIN CAPITAL LETTER C WITH ACUTE + 0x0107: 0x0087, # LATIN SMALL LETTER C WITH ACUTE + 0x010c: 0x00b6, # LATIN CAPITAL LETTER C WITH CARON + 0x010d: 0x00d1, # LATIN SMALL LETTER C WITH CARON + 0x0112: 0x00ed, # LATIN CAPITAL LETTER E WITH MACRON + 0x0113: 0x0089, # LATIN SMALL LETTER E WITH MACRON + 0x0116: 0x00b8, # LATIN CAPITAL LETTER E WITH DOT ABOVE + 0x0117: 0x00d3, # LATIN SMALL LETTER E WITH DOT ABOVE + 0x0118: 0x00b7, # LATIN CAPITAL LETTER E WITH OGONEK + 0x0119: 0x00d2, # LATIN SMALL LETTER E WITH OGONEK + 0x0122: 0x0095, # LATIN CAPITAL LETTER G WITH CEDILLA + 0x0123: 0x0085, # LATIN SMALL LETTER G WITH CEDILLA + 0x012a: 0x00a1, # LATIN CAPITAL LETTER I WITH MACRON + 0x012b: 0x008c, # LATIN SMALL LETTER I WITH MACRON + 0x012e: 0x00bd, # LATIN CAPITAL LETTER I WITH OGONEK + 0x012f: 0x00d4, # LATIN SMALL LETTER I WITH OGONEK + 0x0136: 0x00e8, # LATIN CAPITAL LETTER K WITH CEDILLA + 0x0137: 0x00e9, # LATIN SMALL LETTER K WITH CEDILLA + 0x013b: 0x00ea, # LATIN CAPITAL LETTER L WITH CEDILLA + 0x013c: 0x00eb, # LATIN SMALL LETTER L WITH CEDILLA + 0x0141: 0x00ad, # LATIN CAPITAL LETTER L WITH STROKE + 0x0142: 0x0088, # LATIN SMALL LETTER L WITH STROKE + 0x0143: 0x00e3, # LATIN CAPITAL LETTER N WITH ACUTE + 0x0144: 0x00e7, # LATIN SMALL LETTER N WITH ACUTE + 0x0145: 0x00ee, # LATIN CAPITAL LETTER N WITH CEDILLA + 0x0146: 0x00ec, # LATIN SMALL LETTER N WITH CEDILLA + 0x014c: 0x00e2, # LATIN CAPITAL LETTER O WITH MACRON + 0x014d: 0x0093, # LATIN SMALL LETTER O WITH MACRON + 0x0156: 0x008a, # LATIN CAPITAL LETTER R WITH CEDILLA + 0x0157: 0x008b, # LATIN SMALL LETTER R WITH CEDILLA + 0x015a: 0x0097, # LATIN CAPITAL LETTER S WITH ACUTE + 0x015b: 0x0098, # LATIN SMALL LETTER S WITH ACUTE + 0x0160: 0x00be, # LATIN CAPITAL LETTER S WITH CARON + 0x0161: 0x00d5, # LATIN SMALL LETTER S WITH CARON + 0x016a: 0x00c7, # LATIN CAPITAL LETTER U WITH MACRON + 0x016b: 0x00d7, # LATIN SMALL LETTER U WITH MACRON + 0x0172: 0x00c6, # LATIN CAPITAL LETTER U WITH OGONEK + 0x0173: 0x00d6, # LATIN SMALL LETTER U WITH OGONEK + 0x0179: 0x008d, # LATIN CAPITAL LETTER Z WITH ACUTE + 0x017a: 0x00a5, # LATIN SMALL LETTER Z WITH ACUTE + 0x017b: 0x00a3, # LATIN CAPITAL LETTER Z WITH DOT ABOVE + 0x017c: 0x00a4, # LATIN SMALL LETTER Z WITH DOT ABOVE + 0x017d: 0x00cf, # LATIN CAPITAL LETTER Z WITH CARON + 0x017e: 0x00d8, # LATIN SMALL LETTER Z WITH CARON + 0x2019: 0x00ef, # RIGHT SINGLE QUOTATION MARK + 0x201c: 0x00f2, # LEFT DOUBLE QUOTATION MARK + 0x201d: 0x00a6, # RIGHT DOUBLE QUOTATION MARK + 0x201e: 0x00f7, # DOUBLE LOW-9 QUOTATION MARK + 0x2219: 0x00f9, # BULLET OPERATOR + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp850.py b/my_env/Lib/encodings/cp850.py new file mode 100644 index 000000000..f98aef99f --- /dev/null +++ b/my_env/Lib/encodings/cp850.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP850.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp850', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE + 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE + 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE + 0x009e: 0x00d7, # MULTIPLICATION SIGN + 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x00ae, # REGISTERED SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00b7: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00b8: 0x00a9, # COPYRIGHT SIGN + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x00a2, # CENT SIGN + 0x00be: 0x00a5, # YEN SIGN + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x00e3, # LATIN SMALL LETTER A WITH TILDE + 0x00c7: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x00a4, # CURRENCY SIGN + 0x00d0: 0x00f0, # LATIN SMALL LETTER ETH + 0x00d1: 0x00d0, # LATIN CAPITAL LETTER ETH + 0x00d2: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00d4: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00d5: 0x0131, # LATIN SMALL LETTER DOTLESS I + 0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00d8: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x00a6, # BROKEN BAR + 0x00de: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00e3: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE + 0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x00fe, # LATIN SMALL LETTER THORN + 0x00e8: 0x00de, # LATIN CAPITAL LETTER THORN + 0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00ea: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00eb: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00ec: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE + 0x00ed: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00ee: 0x00af, # MACRON + 0x00ef: 0x00b4, # ACUTE ACCENT + 0x00f0: 0x00ad, # SOFT HYPHEN + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2017, # DOUBLE LOW LINE + 0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS + 0x00f4: 0x00b6, # PILCROW SIGN + 0x00f5: 0x00a7, # SECTION SIGN + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x00b8, # CEDILLA + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x00a8, # DIAERESIS + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x00b9, # SUPERSCRIPT ONE + 0x00fc: 0x00b3, # SUPERSCRIPT THREE + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + '\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS + '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE + '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE + '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE + '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE + '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE + '\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS + '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE + '\xa3' # 0x009c -> POUND SIGN + '\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE + '\xd7' # 0x009e -> MULTIPLICATION SIGN + '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK + '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE + '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE + '\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR + '\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR + '\xbf' # 0x00a8 -> INVERTED QUESTION MARK + '\xae' # 0x00a9 -> REGISTERED SIGN + '\xac' # 0x00aa -> NOT SIGN + '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc0' # 0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xa9' # 0x00b8 -> COPYRIGHT SIGN + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\xa2' # 0x00bd -> CENT SIGN + '\xa5' # 0x00be -> YEN SIGN + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\xe3' # 0x00c6 -> LATIN SMALL LETTER A WITH TILDE + '\xc3' # 0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\xa4' # 0x00cf -> CURRENCY SIGN + '\xf0' # 0x00d0 -> LATIN SMALL LETTER ETH + '\xd0' # 0x00d1 -> LATIN CAPITAL LETTER ETH + '\xca' # 0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xc8' # 0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE + '\u0131' # 0x00d5 -> LATIN SMALL LETTER DOTLESS I + '\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\xa6' # 0x00dd -> BROKEN BAR + '\xcc' # 0x00de -> LATIN CAPITAL LETTER I WITH GRAVE + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + '\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd2' # 0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE + '\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xb5' # 0x00e6 -> MICRO SIGN + '\xfe' # 0x00e7 -> LATIN SMALL LETTER THORN + '\xde' # 0x00e8 -> LATIN CAPITAL LETTER THORN + '\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xd9' # 0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE + '\xfd' # 0x00ec -> LATIN SMALL LETTER Y WITH ACUTE + '\xdd' # 0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xaf' # 0x00ee -> MACRON + '\xb4' # 0x00ef -> ACUTE ACCENT + '\xad' # 0x00f0 -> SOFT HYPHEN + '\xb1' # 0x00f1 -> PLUS-MINUS SIGN + '\u2017' # 0x00f2 -> DOUBLE LOW LINE + '\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS + '\xb6' # 0x00f4 -> PILCROW SIGN + '\xa7' # 0x00f5 -> SECTION SIGN + '\xf7' # 0x00f6 -> DIVISION SIGN + '\xb8' # 0x00f7 -> CEDILLA + '\xb0' # 0x00f8 -> DEGREE SIGN + '\xa8' # 0x00f9 -> DIAERESIS + '\xb7' # 0x00fa -> MIDDLE DOT + '\xb9' # 0x00fb -> SUPERSCRIPT ONE + '\xb3' # 0x00fc -> SUPERSCRIPT THREE + '\xb2' # 0x00fd -> SUPERSCRIPT TWO + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a2: 0x00bd, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00a4: 0x00cf, # CURRENCY SIGN + 0x00a5: 0x00be, # YEN SIGN + 0x00a6: 0x00dd, # BROKEN BAR + 0x00a7: 0x00f5, # SECTION SIGN + 0x00a8: 0x00f9, # DIAERESIS + 0x00a9: 0x00b8, # COPYRIGHT SIGN + 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00ad: 0x00f0, # SOFT HYPHEN + 0x00ae: 0x00a9, # REGISTERED SIGN + 0x00af: 0x00ee, # MACRON + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b3: 0x00fc, # SUPERSCRIPT THREE + 0x00b4: 0x00ef, # ACUTE ACCENT + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b6: 0x00f4, # PILCROW SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00b8: 0x00f7, # CEDILLA + 0x00b9: 0x00fb, # SUPERSCRIPT ONE + 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00c0: 0x00b7, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00c3: 0x00c7, # LATIN CAPITAL LETTER A WITH TILDE + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c8: 0x00d4, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00ca: 0x00d2, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00cc: 0x00de, # LATIN CAPITAL LETTER I WITH GRAVE + 0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00cf: 0x00d8, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00d0: 0x00d1, # LATIN CAPITAL LETTER ETH + 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE + 0x00d2: 0x00e3, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00d7: 0x009e, # MULTIPLICATION SIGN + 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE + 0x00d9: 0x00eb, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00db: 0x00ea, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00dd: 0x00ed, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00de: 0x00e8, # LATIN CAPITAL LETTER THORN + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e3: 0x00c6, # LATIN SMALL LETTER A WITH TILDE + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00f0: 0x00d0, # LATIN SMALL LETTER ETH + 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE + 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE + 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00fd: 0x00ec, # LATIN SMALL LETTER Y WITH ACUTE + 0x00fe: 0x00e7, # LATIN SMALL LETTER THORN + 0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x0131: 0x00d5, # LATIN SMALL LETTER DOTLESS I + 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK + 0x2017: 0x00f2, # DOUBLE LOW LINE + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp852.py b/my_env/Lib/encodings/cp852.py new file mode 100644 index 000000000..34d8a0ea5 --- /dev/null +++ b/my_env/Lib/encodings/cp852.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP852.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp852', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x016f, # LATIN SMALL LETTER U WITH RING ABOVE + 0x0086: 0x0107, # LATIN SMALL LETTER C WITH ACUTE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x0142, # LATIN SMALL LETTER L WITH STROKE + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x0150, # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + 0x008b: 0x0151, # LATIN SMALL LETTER O WITH DOUBLE ACUTE + 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x008d: 0x0179, # LATIN CAPITAL LETTER Z WITH ACUTE + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x0106, # LATIN CAPITAL LETTER C WITH ACUTE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x0139, # LATIN CAPITAL LETTER L WITH ACUTE + 0x0092: 0x013a, # LATIN SMALL LETTER L WITH ACUTE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x013d, # LATIN CAPITAL LETTER L WITH CARON + 0x0096: 0x013e, # LATIN SMALL LETTER L WITH CARON + 0x0097: 0x015a, # LATIN CAPITAL LETTER S WITH ACUTE + 0x0098: 0x015b, # LATIN SMALL LETTER S WITH ACUTE + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x0164, # LATIN CAPITAL LETTER T WITH CARON + 0x009c: 0x0165, # LATIN SMALL LETTER T WITH CARON + 0x009d: 0x0141, # LATIN CAPITAL LETTER L WITH STROKE + 0x009e: 0x00d7, # MULTIPLICATION SIGN + 0x009f: 0x010d, # LATIN SMALL LETTER C WITH CARON + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x0104, # LATIN CAPITAL LETTER A WITH OGONEK + 0x00a5: 0x0105, # LATIN SMALL LETTER A WITH OGONEK + 0x00a6: 0x017d, # LATIN CAPITAL LETTER Z WITH CARON + 0x00a7: 0x017e, # LATIN SMALL LETTER Z WITH CARON + 0x00a8: 0x0118, # LATIN CAPITAL LETTER E WITH OGONEK + 0x00a9: 0x0119, # LATIN SMALL LETTER E WITH OGONEK + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x017a, # LATIN SMALL LETTER Z WITH ACUTE + 0x00ac: 0x010c, # LATIN CAPITAL LETTER C WITH CARON + 0x00ad: 0x015f, # LATIN SMALL LETTER S WITH CEDILLA + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00b7: 0x011a, # LATIN CAPITAL LETTER E WITH CARON + 0x00b8: 0x015e, # LATIN CAPITAL LETTER S WITH CEDILLA + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x017b, # LATIN CAPITAL LETTER Z WITH DOT ABOVE + 0x00be: 0x017c, # LATIN SMALL LETTER Z WITH DOT ABOVE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x0102, # LATIN CAPITAL LETTER A WITH BREVE + 0x00c7: 0x0103, # LATIN SMALL LETTER A WITH BREVE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x00a4, # CURRENCY SIGN + 0x00d0: 0x0111, # LATIN SMALL LETTER D WITH STROKE + 0x00d1: 0x0110, # LATIN CAPITAL LETTER D WITH STROKE + 0x00d2: 0x010e, # LATIN CAPITAL LETTER D WITH CARON + 0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00d4: 0x010f, # LATIN SMALL LETTER D WITH CARON + 0x00d5: 0x0147, # LATIN CAPITAL LETTER N WITH CARON + 0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00d8: 0x011b, # LATIN SMALL LETTER E WITH CARON + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x0162, # LATIN CAPITAL LETTER T WITH CEDILLA + 0x00de: 0x016e, # LATIN CAPITAL LETTER U WITH RING ABOVE + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00e3: 0x0143, # LATIN CAPITAL LETTER N WITH ACUTE + 0x00e4: 0x0144, # LATIN SMALL LETTER N WITH ACUTE + 0x00e5: 0x0148, # LATIN SMALL LETTER N WITH CARON + 0x00e6: 0x0160, # LATIN CAPITAL LETTER S WITH CARON + 0x00e7: 0x0161, # LATIN SMALL LETTER S WITH CARON + 0x00e8: 0x0154, # LATIN CAPITAL LETTER R WITH ACUTE + 0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00ea: 0x0155, # LATIN SMALL LETTER R WITH ACUTE + 0x00eb: 0x0170, # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + 0x00ec: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE + 0x00ed: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00ee: 0x0163, # LATIN SMALL LETTER T WITH CEDILLA + 0x00ef: 0x00b4, # ACUTE ACCENT + 0x00f0: 0x00ad, # SOFT HYPHEN + 0x00f1: 0x02dd, # DOUBLE ACUTE ACCENT + 0x00f2: 0x02db, # OGONEK + 0x00f3: 0x02c7, # CARON + 0x00f4: 0x02d8, # BREVE + 0x00f5: 0x00a7, # SECTION SIGN + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x00b8, # CEDILLA + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x00a8, # DIAERESIS + 0x00fa: 0x02d9, # DOT ABOVE + 0x00fb: 0x0171, # LATIN SMALL LETTER U WITH DOUBLE ACUTE + 0x00fc: 0x0158, # LATIN CAPITAL LETTER R WITH CARON + 0x00fd: 0x0159, # LATIN SMALL LETTER R WITH CARON + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + '\u016f' # 0x0085 -> LATIN SMALL LETTER U WITH RING ABOVE + '\u0107' # 0x0086 -> LATIN SMALL LETTER C WITH ACUTE + '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + '\u0142' # 0x0088 -> LATIN SMALL LETTER L WITH STROKE + '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + '\u0150' # 0x008a -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + '\u0151' # 0x008b -> LATIN SMALL LETTER O WITH DOUBLE ACUTE + '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\u0179' # 0x008d -> LATIN CAPITAL LETTER Z WITH ACUTE + '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\u0106' # 0x008f -> LATIN CAPITAL LETTER C WITH ACUTE + '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + '\u0139' # 0x0091 -> LATIN CAPITAL LETTER L WITH ACUTE + '\u013a' # 0x0092 -> LATIN SMALL LETTER L WITH ACUTE + '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + '\u013d' # 0x0095 -> LATIN CAPITAL LETTER L WITH CARON + '\u013e' # 0x0096 -> LATIN SMALL LETTER L WITH CARON + '\u015a' # 0x0097 -> LATIN CAPITAL LETTER S WITH ACUTE + '\u015b' # 0x0098 -> LATIN SMALL LETTER S WITH ACUTE + '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\u0164' # 0x009b -> LATIN CAPITAL LETTER T WITH CARON + '\u0165' # 0x009c -> LATIN SMALL LETTER T WITH CARON + '\u0141' # 0x009d -> LATIN CAPITAL LETTER L WITH STROKE + '\xd7' # 0x009e -> MULTIPLICATION SIGN + '\u010d' # 0x009f -> LATIN SMALL LETTER C WITH CARON + '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + '\u0104' # 0x00a4 -> LATIN CAPITAL LETTER A WITH OGONEK + '\u0105' # 0x00a5 -> LATIN SMALL LETTER A WITH OGONEK + '\u017d' # 0x00a6 -> LATIN CAPITAL LETTER Z WITH CARON + '\u017e' # 0x00a7 -> LATIN SMALL LETTER Z WITH CARON + '\u0118' # 0x00a8 -> LATIN CAPITAL LETTER E WITH OGONEK + '\u0119' # 0x00a9 -> LATIN SMALL LETTER E WITH OGONEK + '\xac' # 0x00aa -> NOT SIGN + '\u017a' # 0x00ab -> LATIN SMALL LETTER Z WITH ACUTE + '\u010c' # 0x00ac -> LATIN CAPITAL LETTER C WITH CARON + '\u015f' # 0x00ad -> LATIN SMALL LETTER S WITH CEDILLA + '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\u011a' # 0x00b7 -> LATIN CAPITAL LETTER E WITH CARON + '\u015e' # 0x00b8 -> LATIN CAPITAL LETTER S WITH CEDILLA + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u017b' # 0x00bd -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + '\u017c' # 0x00be -> LATIN SMALL LETTER Z WITH DOT ABOVE + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u0102' # 0x00c6 -> LATIN CAPITAL LETTER A WITH BREVE + '\u0103' # 0x00c7 -> LATIN SMALL LETTER A WITH BREVE + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\xa4' # 0x00cf -> CURRENCY SIGN + '\u0111' # 0x00d0 -> LATIN SMALL LETTER D WITH STROKE + '\u0110' # 0x00d1 -> LATIN CAPITAL LETTER D WITH STROKE + '\u010e' # 0x00d2 -> LATIN CAPITAL LETTER D WITH CARON + '\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\u010f' # 0x00d4 -> LATIN SMALL LETTER D WITH CARON + '\u0147' # 0x00d5 -> LATIN CAPITAL LETTER N WITH CARON + '\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\u011b' # 0x00d8 -> LATIN SMALL LETTER E WITH CARON + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\u0162' # 0x00dd -> LATIN CAPITAL LETTER T WITH CEDILLA + '\u016e' # 0x00de -> LATIN CAPITAL LETTER U WITH RING ABOVE + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + '\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\u0143' # 0x00e3 -> LATIN CAPITAL LETTER N WITH ACUTE + '\u0144' # 0x00e4 -> LATIN SMALL LETTER N WITH ACUTE + '\u0148' # 0x00e5 -> LATIN SMALL LETTER N WITH CARON + '\u0160' # 0x00e6 -> LATIN CAPITAL LETTER S WITH CARON + '\u0161' # 0x00e7 -> LATIN SMALL LETTER S WITH CARON + '\u0154' # 0x00e8 -> LATIN CAPITAL LETTER R WITH ACUTE + '\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE + '\u0155' # 0x00ea -> LATIN SMALL LETTER R WITH ACUTE + '\u0170' # 0x00eb -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + '\xfd' # 0x00ec -> LATIN SMALL LETTER Y WITH ACUTE + '\xdd' # 0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE + '\u0163' # 0x00ee -> LATIN SMALL LETTER T WITH CEDILLA + '\xb4' # 0x00ef -> ACUTE ACCENT + '\xad' # 0x00f0 -> SOFT HYPHEN + '\u02dd' # 0x00f1 -> DOUBLE ACUTE ACCENT + '\u02db' # 0x00f2 -> OGONEK + '\u02c7' # 0x00f3 -> CARON + '\u02d8' # 0x00f4 -> BREVE + '\xa7' # 0x00f5 -> SECTION SIGN + '\xf7' # 0x00f6 -> DIVISION SIGN + '\xb8' # 0x00f7 -> CEDILLA + '\xb0' # 0x00f8 -> DEGREE SIGN + '\xa8' # 0x00f9 -> DIAERESIS + '\u02d9' # 0x00fa -> DOT ABOVE + '\u0171' # 0x00fb -> LATIN SMALL LETTER U WITH DOUBLE ACUTE + '\u0158' # 0x00fc -> LATIN CAPITAL LETTER R WITH CARON + '\u0159' # 0x00fd -> LATIN SMALL LETTER R WITH CARON + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a4: 0x00cf, # CURRENCY SIGN + 0x00a7: 0x00f5, # SECTION SIGN + 0x00a8: 0x00f9, # DIAERESIS + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00ad: 0x00f0, # SOFT HYPHEN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b4: 0x00ef, # ACUTE ACCENT + 0x00b8: 0x00f7, # CEDILLA + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00d7: 0x009e, # MULTIPLICATION SIGN + 0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00dd: 0x00ed, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00fd: 0x00ec, # LATIN SMALL LETTER Y WITH ACUTE + 0x0102: 0x00c6, # LATIN CAPITAL LETTER A WITH BREVE + 0x0103: 0x00c7, # LATIN SMALL LETTER A WITH BREVE + 0x0104: 0x00a4, # LATIN CAPITAL LETTER A WITH OGONEK + 0x0105: 0x00a5, # LATIN SMALL LETTER A WITH OGONEK + 0x0106: 0x008f, # LATIN CAPITAL LETTER C WITH ACUTE + 0x0107: 0x0086, # LATIN SMALL LETTER C WITH ACUTE + 0x010c: 0x00ac, # LATIN CAPITAL LETTER C WITH CARON + 0x010d: 0x009f, # LATIN SMALL LETTER C WITH CARON + 0x010e: 0x00d2, # LATIN CAPITAL LETTER D WITH CARON + 0x010f: 0x00d4, # LATIN SMALL LETTER D WITH CARON + 0x0110: 0x00d1, # LATIN CAPITAL LETTER D WITH STROKE + 0x0111: 0x00d0, # LATIN SMALL LETTER D WITH STROKE + 0x0118: 0x00a8, # LATIN CAPITAL LETTER E WITH OGONEK + 0x0119: 0x00a9, # LATIN SMALL LETTER E WITH OGONEK + 0x011a: 0x00b7, # LATIN CAPITAL LETTER E WITH CARON + 0x011b: 0x00d8, # LATIN SMALL LETTER E WITH CARON + 0x0139: 0x0091, # LATIN CAPITAL LETTER L WITH ACUTE + 0x013a: 0x0092, # LATIN SMALL LETTER L WITH ACUTE + 0x013d: 0x0095, # LATIN CAPITAL LETTER L WITH CARON + 0x013e: 0x0096, # LATIN SMALL LETTER L WITH CARON + 0x0141: 0x009d, # LATIN CAPITAL LETTER L WITH STROKE + 0x0142: 0x0088, # LATIN SMALL LETTER L WITH STROKE + 0x0143: 0x00e3, # LATIN CAPITAL LETTER N WITH ACUTE + 0x0144: 0x00e4, # LATIN SMALL LETTER N WITH ACUTE + 0x0147: 0x00d5, # LATIN CAPITAL LETTER N WITH CARON + 0x0148: 0x00e5, # LATIN SMALL LETTER N WITH CARON + 0x0150: 0x008a, # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + 0x0151: 0x008b, # LATIN SMALL LETTER O WITH DOUBLE ACUTE + 0x0154: 0x00e8, # LATIN CAPITAL LETTER R WITH ACUTE + 0x0155: 0x00ea, # LATIN SMALL LETTER R WITH ACUTE + 0x0158: 0x00fc, # LATIN CAPITAL LETTER R WITH CARON + 0x0159: 0x00fd, # LATIN SMALL LETTER R WITH CARON + 0x015a: 0x0097, # LATIN CAPITAL LETTER S WITH ACUTE + 0x015b: 0x0098, # LATIN SMALL LETTER S WITH ACUTE + 0x015e: 0x00b8, # LATIN CAPITAL LETTER S WITH CEDILLA + 0x015f: 0x00ad, # LATIN SMALL LETTER S WITH CEDILLA + 0x0160: 0x00e6, # LATIN CAPITAL LETTER S WITH CARON + 0x0161: 0x00e7, # LATIN SMALL LETTER S WITH CARON + 0x0162: 0x00dd, # LATIN CAPITAL LETTER T WITH CEDILLA + 0x0163: 0x00ee, # LATIN SMALL LETTER T WITH CEDILLA + 0x0164: 0x009b, # LATIN CAPITAL LETTER T WITH CARON + 0x0165: 0x009c, # LATIN SMALL LETTER T WITH CARON + 0x016e: 0x00de, # LATIN CAPITAL LETTER U WITH RING ABOVE + 0x016f: 0x0085, # LATIN SMALL LETTER U WITH RING ABOVE + 0x0170: 0x00eb, # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + 0x0171: 0x00fb, # LATIN SMALL LETTER U WITH DOUBLE ACUTE + 0x0179: 0x008d, # LATIN CAPITAL LETTER Z WITH ACUTE + 0x017a: 0x00ab, # LATIN SMALL LETTER Z WITH ACUTE + 0x017b: 0x00bd, # LATIN CAPITAL LETTER Z WITH DOT ABOVE + 0x017c: 0x00be, # LATIN SMALL LETTER Z WITH DOT ABOVE + 0x017d: 0x00a6, # LATIN CAPITAL LETTER Z WITH CARON + 0x017e: 0x00a7, # LATIN SMALL LETTER Z WITH CARON + 0x02c7: 0x00f3, # CARON + 0x02d8: 0x00f4, # BREVE + 0x02d9: 0x00fa, # DOT ABOVE + 0x02db: 0x00f2, # OGONEK + 0x02dd: 0x00f1, # DOUBLE ACUTE ACCENT + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp855.py b/my_env/Lib/encodings/cp855.py new file mode 100644 index 000000000..4fe921069 --- /dev/null +++ b/my_env/Lib/encodings/cp855.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP855.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp855', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x0452, # CYRILLIC SMALL LETTER DJE + 0x0081: 0x0402, # CYRILLIC CAPITAL LETTER DJE + 0x0082: 0x0453, # CYRILLIC SMALL LETTER GJE + 0x0083: 0x0403, # CYRILLIC CAPITAL LETTER GJE + 0x0084: 0x0451, # CYRILLIC SMALL LETTER IO + 0x0085: 0x0401, # CYRILLIC CAPITAL LETTER IO + 0x0086: 0x0454, # CYRILLIC SMALL LETTER UKRAINIAN IE + 0x0087: 0x0404, # CYRILLIC CAPITAL LETTER UKRAINIAN IE + 0x0088: 0x0455, # CYRILLIC SMALL LETTER DZE + 0x0089: 0x0405, # CYRILLIC CAPITAL LETTER DZE + 0x008a: 0x0456, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + 0x008b: 0x0406, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + 0x008c: 0x0457, # CYRILLIC SMALL LETTER YI + 0x008d: 0x0407, # CYRILLIC CAPITAL LETTER YI + 0x008e: 0x0458, # CYRILLIC SMALL LETTER JE + 0x008f: 0x0408, # CYRILLIC CAPITAL LETTER JE + 0x0090: 0x0459, # CYRILLIC SMALL LETTER LJE + 0x0091: 0x0409, # CYRILLIC CAPITAL LETTER LJE + 0x0092: 0x045a, # CYRILLIC SMALL LETTER NJE + 0x0093: 0x040a, # CYRILLIC CAPITAL LETTER NJE + 0x0094: 0x045b, # CYRILLIC SMALL LETTER TSHE + 0x0095: 0x040b, # CYRILLIC CAPITAL LETTER TSHE + 0x0096: 0x045c, # CYRILLIC SMALL LETTER KJE + 0x0097: 0x040c, # CYRILLIC CAPITAL LETTER KJE + 0x0098: 0x045e, # CYRILLIC SMALL LETTER SHORT U + 0x0099: 0x040e, # CYRILLIC CAPITAL LETTER SHORT U + 0x009a: 0x045f, # CYRILLIC SMALL LETTER DZHE + 0x009b: 0x040f, # CYRILLIC CAPITAL LETTER DZHE + 0x009c: 0x044e, # CYRILLIC SMALL LETTER YU + 0x009d: 0x042e, # CYRILLIC CAPITAL LETTER YU + 0x009e: 0x044a, # CYRILLIC SMALL LETTER HARD SIGN + 0x009f: 0x042a, # CYRILLIC CAPITAL LETTER HARD SIGN + 0x00a0: 0x0430, # CYRILLIC SMALL LETTER A + 0x00a1: 0x0410, # CYRILLIC CAPITAL LETTER A + 0x00a2: 0x0431, # CYRILLIC SMALL LETTER BE + 0x00a3: 0x0411, # CYRILLIC CAPITAL LETTER BE + 0x00a4: 0x0446, # CYRILLIC SMALL LETTER TSE + 0x00a5: 0x0426, # CYRILLIC CAPITAL LETTER TSE + 0x00a6: 0x0434, # CYRILLIC SMALL LETTER DE + 0x00a7: 0x0414, # CYRILLIC CAPITAL LETTER DE + 0x00a8: 0x0435, # CYRILLIC SMALL LETTER IE + 0x00a9: 0x0415, # CYRILLIC CAPITAL LETTER IE + 0x00aa: 0x0444, # CYRILLIC SMALL LETTER EF + 0x00ab: 0x0424, # CYRILLIC CAPITAL LETTER EF + 0x00ac: 0x0433, # CYRILLIC SMALL LETTER GHE + 0x00ad: 0x0413, # CYRILLIC CAPITAL LETTER GHE + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x0445, # CYRILLIC SMALL LETTER HA + 0x00b6: 0x0425, # CYRILLIC CAPITAL LETTER HA + 0x00b7: 0x0438, # CYRILLIC SMALL LETTER I + 0x00b8: 0x0418, # CYRILLIC CAPITAL LETTER I + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x0439, # CYRILLIC SMALL LETTER SHORT I + 0x00be: 0x0419, # CYRILLIC CAPITAL LETTER SHORT I + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x043a, # CYRILLIC SMALL LETTER KA + 0x00c7: 0x041a, # CYRILLIC CAPITAL LETTER KA + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x00a4, # CURRENCY SIGN + 0x00d0: 0x043b, # CYRILLIC SMALL LETTER EL + 0x00d1: 0x041b, # CYRILLIC CAPITAL LETTER EL + 0x00d2: 0x043c, # CYRILLIC SMALL LETTER EM + 0x00d3: 0x041c, # CYRILLIC CAPITAL LETTER EM + 0x00d4: 0x043d, # CYRILLIC SMALL LETTER EN + 0x00d5: 0x041d, # CYRILLIC CAPITAL LETTER EN + 0x00d6: 0x043e, # CYRILLIC SMALL LETTER O + 0x00d7: 0x041e, # CYRILLIC CAPITAL LETTER O + 0x00d8: 0x043f, # CYRILLIC SMALL LETTER PE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x041f, # CYRILLIC CAPITAL LETTER PE + 0x00de: 0x044f, # CYRILLIC SMALL LETTER YA + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x042f, # CYRILLIC CAPITAL LETTER YA + 0x00e1: 0x0440, # CYRILLIC SMALL LETTER ER + 0x00e2: 0x0420, # CYRILLIC CAPITAL LETTER ER + 0x00e3: 0x0441, # CYRILLIC SMALL LETTER ES + 0x00e4: 0x0421, # CYRILLIC CAPITAL LETTER ES + 0x00e5: 0x0442, # CYRILLIC SMALL LETTER TE + 0x00e6: 0x0422, # CYRILLIC CAPITAL LETTER TE + 0x00e7: 0x0443, # CYRILLIC SMALL LETTER U + 0x00e8: 0x0423, # CYRILLIC CAPITAL LETTER U + 0x00e9: 0x0436, # CYRILLIC SMALL LETTER ZHE + 0x00ea: 0x0416, # CYRILLIC CAPITAL LETTER ZHE + 0x00eb: 0x0432, # CYRILLIC SMALL LETTER VE + 0x00ec: 0x0412, # CYRILLIC CAPITAL LETTER VE + 0x00ed: 0x044c, # CYRILLIC SMALL LETTER SOFT SIGN + 0x00ee: 0x042c, # CYRILLIC CAPITAL LETTER SOFT SIGN + 0x00ef: 0x2116, # NUMERO SIGN + 0x00f0: 0x00ad, # SOFT HYPHEN + 0x00f1: 0x044b, # CYRILLIC SMALL LETTER YERU + 0x00f2: 0x042b, # CYRILLIC CAPITAL LETTER YERU + 0x00f3: 0x0437, # CYRILLIC SMALL LETTER ZE + 0x00f4: 0x0417, # CYRILLIC CAPITAL LETTER ZE + 0x00f5: 0x0448, # CYRILLIC SMALL LETTER SHA + 0x00f6: 0x0428, # CYRILLIC CAPITAL LETTER SHA + 0x00f7: 0x044d, # CYRILLIC SMALL LETTER E + 0x00f8: 0x042d, # CYRILLIC CAPITAL LETTER E + 0x00f9: 0x0449, # CYRILLIC SMALL LETTER SHCHA + 0x00fa: 0x0429, # CYRILLIC CAPITAL LETTER SHCHA + 0x00fb: 0x0447, # CYRILLIC SMALL LETTER CHE + 0x00fc: 0x0427, # CYRILLIC CAPITAL LETTER CHE + 0x00fd: 0x00a7, # SECTION SIGN + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\u0452' # 0x0080 -> CYRILLIC SMALL LETTER DJE + '\u0402' # 0x0081 -> CYRILLIC CAPITAL LETTER DJE + '\u0453' # 0x0082 -> CYRILLIC SMALL LETTER GJE + '\u0403' # 0x0083 -> CYRILLIC CAPITAL LETTER GJE + '\u0451' # 0x0084 -> CYRILLIC SMALL LETTER IO + '\u0401' # 0x0085 -> CYRILLIC CAPITAL LETTER IO + '\u0454' # 0x0086 -> CYRILLIC SMALL LETTER UKRAINIAN IE + '\u0404' # 0x0087 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE + '\u0455' # 0x0088 -> CYRILLIC SMALL LETTER DZE + '\u0405' # 0x0089 -> CYRILLIC CAPITAL LETTER DZE + '\u0456' # 0x008a -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + '\u0406' # 0x008b -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + '\u0457' # 0x008c -> CYRILLIC SMALL LETTER YI + '\u0407' # 0x008d -> CYRILLIC CAPITAL LETTER YI + '\u0458' # 0x008e -> CYRILLIC SMALL LETTER JE + '\u0408' # 0x008f -> CYRILLIC CAPITAL LETTER JE + '\u0459' # 0x0090 -> CYRILLIC SMALL LETTER LJE + '\u0409' # 0x0091 -> CYRILLIC CAPITAL LETTER LJE + '\u045a' # 0x0092 -> CYRILLIC SMALL LETTER NJE + '\u040a' # 0x0093 -> CYRILLIC CAPITAL LETTER NJE + '\u045b' # 0x0094 -> CYRILLIC SMALL LETTER TSHE + '\u040b' # 0x0095 -> CYRILLIC CAPITAL LETTER TSHE + '\u045c' # 0x0096 -> CYRILLIC SMALL LETTER KJE + '\u040c' # 0x0097 -> CYRILLIC CAPITAL LETTER KJE + '\u045e' # 0x0098 -> CYRILLIC SMALL LETTER SHORT U + '\u040e' # 0x0099 -> CYRILLIC CAPITAL LETTER SHORT U + '\u045f' # 0x009a -> CYRILLIC SMALL LETTER DZHE + '\u040f' # 0x009b -> CYRILLIC CAPITAL LETTER DZHE + '\u044e' # 0x009c -> CYRILLIC SMALL LETTER YU + '\u042e' # 0x009d -> CYRILLIC CAPITAL LETTER YU + '\u044a' # 0x009e -> CYRILLIC SMALL LETTER HARD SIGN + '\u042a' # 0x009f -> CYRILLIC CAPITAL LETTER HARD SIGN + '\u0430' # 0x00a0 -> CYRILLIC SMALL LETTER A + '\u0410' # 0x00a1 -> CYRILLIC CAPITAL LETTER A + '\u0431' # 0x00a2 -> CYRILLIC SMALL LETTER BE + '\u0411' # 0x00a3 -> CYRILLIC CAPITAL LETTER BE + '\u0446' # 0x00a4 -> CYRILLIC SMALL LETTER TSE + '\u0426' # 0x00a5 -> CYRILLIC CAPITAL LETTER TSE + '\u0434' # 0x00a6 -> CYRILLIC SMALL LETTER DE + '\u0414' # 0x00a7 -> CYRILLIC CAPITAL LETTER DE + '\u0435' # 0x00a8 -> CYRILLIC SMALL LETTER IE + '\u0415' # 0x00a9 -> CYRILLIC CAPITAL LETTER IE + '\u0444' # 0x00aa -> CYRILLIC SMALL LETTER EF + '\u0424' # 0x00ab -> CYRILLIC CAPITAL LETTER EF + '\u0433' # 0x00ac -> CYRILLIC SMALL LETTER GHE + '\u0413' # 0x00ad -> CYRILLIC CAPITAL LETTER GHE + '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u0445' # 0x00b5 -> CYRILLIC SMALL LETTER HA + '\u0425' # 0x00b6 -> CYRILLIC CAPITAL LETTER HA + '\u0438' # 0x00b7 -> CYRILLIC SMALL LETTER I + '\u0418' # 0x00b8 -> CYRILLIC CAPITAL LETTER I + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u0439' # 0x00bd -> CYRILLIC SMALL LETTER SHORT I + '\u0419' # 0x00be -> CYRILLIC CAPITAL LETTER SHORT I + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u043a' # 0x00c6 -> CYRILLIC SMALL LETTER KA + '\u041a' # 0x00c7 -> CYRILLIC CAPITAL LETTER KA + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\xa4' # 0x00cf -> CURRENCY SIGN + '\u043b' # 0x00d0 -> CYRILLIC SMALL LETTER EL + '\u041b' # 0x00d1 -> CYRILLIC CAPITAL LETTER EL + '\u043c' # 0x00d2 -> CYRILLIC SMALL LETTER EM + '\u041c' # 0x00d3 -> CYRILLIC CAPITAL LETTER EM + '\u043d' # 0x00d4 -> CYRILLIC SMALL LETTER EN + '\u041d' # 0x00d5 -> CYRILLIC CAPITAL LETTER EN + '\u043e' # 0x00d6 -> CYRILLIC SMALL LETTER O + '\u041e' # 0x00d7 -> CYRILLIC CAPITAL LETTER O + '\u043f' # 0x00d8 -> CYRILLIC SMALL LETTER PE + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\u041f' # 0x00dd -> CYRILLIC CAPITAL LETTER PE + '\u044f' # 0x00de -> CYRILLIC SMALL LETTER YA + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\u042f' # 0x00e0 -> CYRILLIC CAPITAL LETTER YA + '\u0440' # 0x00e1 -> CYRILLIC SMALL LETTER ER + '\u0420' # 0x00e2 -> CYRILLIC CAPITAL LETTER ER + '\u0441' # 0x00e3 -> CYRILLIC SMALL LETTER ES + '\u0421' # 0x00e4 -> CYRILLIC CAPITAL LETTER ES + '\u0442' # 0x00e5 -> CYRILLIC SMALL LETTER TE + '\u0422' # 0x00e6 -> CYRILLIC CAPITAL LETTER TE + '\u0443' # 0x00e7 -> CYRILLIC SMALL LETTER U + '\u0423' # 0x00e8 -> CYRILLIC CAPITAL LETTER U + '\u0436' # 0x00e9 -> CYRILLIC SMALL LETTER ZHE + '\u0416' # 0x00ea -> CYRILLIC CAPITAL LETTER ZHE + '\u0432' # 0x00eb -> CYRILLIC SMALL LETTER VE + '\u0412' # 0x00ec -> CYRILLIC CAPITAL LETTER VE + '\u044c' # 0x00ed -> CYRILLIC SMALL LETTER SOFT SIGN + '\u042c' # 0x00ee -> CYRILLIC CAPITAL LETTER SOFT SIGN + '\u2116' # 0x00ef -> NUMERO SIGN + '\xad' # 0x00f0 -> SOFT HYPHEN + '\u044b' # 0x00f1 -> CYRILLIC SMALL LETTER YERU + '\u042b' # 0x00f2 -> CYRILLIC CAPITAL LETTER YERU + '\u0437' # 0x00f3 -> CYRILLIC SMALL LETTER ZE + '\u0417' # 0x00f4 -> CYRILLIC CAPITAL LETTER ZE + '\u0448' # 0x00f5 -> CYRILLIC SMALL LETTER SHA + '\u0428' # 0x00f6 -> CYRILLIC CAPITAL LETTER SHA + '\u044d' # 0x00f7 -> CYRILLIC SMALL LETTER E + '\u042d' # 0x00f8 -> CYRILLIC CAPITAL LETTER E + '\u0449' # 0x00f9 -> CYRILLIC SMALL LETTER SHCHA + '\u0429' # 0x00fa -> CYRILLIC CAPITAL LETTER SHCHA + '\u0447' # 0x00fb -> CYRILLIC SMALL LETTER CHE + '\u0427' # 0x00fc -> CYRILLIC CAPITAL LETTER CHE + '\xa7' # 0x00fd -> SECTION SIGN + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a4: 0x00cf, # CURRENCY SIGN + 0x00a7: 0x00fd, # SECTION SIGN + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ad: 0x00f0, # SOFT HYPHEN + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x0401: 0x0085, # CYRILLIC CAPITAL LETTER IO + 0x0402: 0x0081, # CYRILLIC CAPITAL LETTER DJE + 0x0403: 0x0083, # CYRILLIC CAPITAL LETTER GJE + 0x0404: 0x0087, # CYRILLIC CAPITAL LETTER UKRAINIAN IE + 0x0405: 0x0089, # CYRILLIC CAPITAL LETTER DZE + 0x0406: 0x008b, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + 0x0407: 0x008d, # CYRILLIC CAPITAL LETTER YI + 0x0408: 0x008f, # CYRILLIC CAPITAL LETTER JE + 0x0409: 0x0091, # CYRILLIC CAPITAL LETTER LJE + 0x040a: 0x0093, # CYRILLIC CAPITAL LETTER NJE + 0x040b: 0x0095, # CYRILLIC CAPITAL LETTER TSHE + 0x040c: 0x0097, # CYRILLIC CAPITAL LETTER KJE + 0x040e: 0x0099, # CYRILLIC CAPITAL LETTER SHORT U + 0x040f: 0x009b, # CYRILLIC CAPITAL LETTER DZHE + 0x0410: 0x00a1, # CYRILLIC CAPITAL LETTER A + 0x0411: 0x00a3, # CYRILLIC CAPITAL LETTER BE + 0x0412: 0x00ec, # CYRILLIC CAPITAL LETTER VE + 0x0413: 0x00ad, # CYRILLIC CAPITAL LETTER GHE + 0x0414: 0x00a7, # CYRILLIC CAPITAL LETTER DE + 0x0415: 0x00a9, # CYRILLIC CAPITAL LETTER IE + 0x0416: 0x00ea, # CYRILLIC CAPITAL LETTER ZHE + 0x0417: 0x00f4, # CYRILLIC CAPITAL LETTER ZE + 0x0418: 0x00b8, # CYRILLIC CAPITAL LETTER I + 0x0419: 0x00be, # CYRILLIC CAPITAL LETTER SHORT I + 0x041a: 0x00c7, # CYRILLIC CAPITAL LETTER KA + 0x041b: 0x00d1, # CYRILLIC CAPITAL LETTER EL + 0x041c: 0x00d3, # CYRILLIC CAPITAL LETTER EM + 0x041d: 0x00d5, # CYRILLIC CAPITAL LETTER EN + 0x041e: 0x00d7, # CYRILLIC CAPITAL LETTER O + 0x041f: 0x00dd, # CYRILLIC CAPITAL LETTER PE + 0x0420: 0x00e2, # CYRILLIC CAPITAL LETTER ER + 0x0421: 0x00e4, # CYRILLIC CAPITAL LETTER ES + 0x0422: 0x00e6, # CYRILLIC CAPITAL LETTER TE + 0x0423: 0x00e8, # CYRILLIC CAPITAL LETTER U + 0x0424: 0x00ab, # CYRILLIC CAPITAL LETTER EF + 0x0425: 0x00b6, # CYRILLIC CAPITAL LETTER HA + 0x0426: 0x00a5, # CYRILLIC CAPITAL LETTER TSE + 0x0427: 0x00fc, # CYRILLIC CAPITAL LETTER CHE + 0x0428: 0x00f6, # CYRILLIC CAPITAL LETTER SHA + 0x0429: 0x00fa, # CYRILLIC CAPITAL LETTER SHCHA + 0x042a: 0x009f, # CYRILLIC CAPITAL LETTER HARD SIGN + 0x042b: 0x00f2, # CYRILLIC CAPITAL LETTER YERU + 0x042c: 0x00ee, # CYRILLIC CAPITAL LETTER SOFT SIGN + 0x042d: 0x00f8, # CYRILLIC CAPITAL LETTER E + 0x042e: 0x009d, # CYRILLIC CAPITAL LETTER YU + 0x042f: 0x00e0, # CYRILLIC CAPITAL LETTER YA + 0x0430: 0x00a0, # CYRILLIC SMALL LETTER A + 0x0431: 0x00a2, # CYRILLIC SMALL LETTER BE + 0x0432: 0x00eb, # CYRILLIC SMALL LETTER VE + 0x0433: 0x00ac, # CYRILLIC SMALL LETTER GHE + 0x0434: 0x00a6, # CYRILLIC SMALL LETTER DE + 0x0435: 0x00a8, # CYRILLIC SMALL LETTER IE + 0x0436: 0x00e9, # CYRILLIC SMALL LETTER ZHE + 0x0437: 0x00f3, # CYRILLIC SMALL LETTER ZE + 0x0438: 0x00b7, # CYRILLIC SMALL LETTER I + 0x0439: 0x00bd, # CYRILLIC SMALL LETTER SHORT I + 0x043a: 0x00c6, # CYRILLIC SMALL LETTER KA + 0x043b: 0x00d0, # CYRILLIC SMALL LETTER EL + 0x043c: 0x00d2, # CYRILLIC SMALL LETTER EM + 0x043d: 0x00d4, # CYRILLIC SMALL LETTER EN + 0x043e: 0x00d6, # CYRILLIC SMALL LETTER O + 0x043f: 0x00d8, # CYRILLIC SMALL LETTER PE + 0x0440: 0x00e1, # CYRILLIC SMALL LETTER ER + 0x0441: 0x00e3, # CYRILLIC SMALL LETTER ES + 0x0442: 0x00e5, # CYRILLIC SMALL LETTER TE + 0x0443: 0x00e7, # CYRILLIC SMALL LETTER U + 0x0444: 0x00aa, # CYRILLIC SMALL LETTER EF + 0x0445: 0x00b5, # CYRILLIC SMALL LETTER HA + 0x0446: 0x00a4, # CYRILLIC SMALL LETTER TSE + 0x0447: 0x00fb, # CYRILLIC SMALL LETTER CHE + 0x0448: 0x00f5, # CYRILLIC SMALL LETTER SHA + 0x0449: 0x00f9, # CYRILLIC SMALL LETTER SHCHA + 0x044a: 0x009e, # CYRILLIC SMALL LETTER HARD SIGN + 0x044b: 0x00f1, # CYRILLIC SMALL LETTER YERU + 0x044c: 0x00ed, # CYRILLIC SMALL LETTER SOFT SIGN + 0x044d: 0x00f7, # CYRILLIC SMALL LETTER E + 0x044e: 0x009c, # CYRILLIC SMALL LETTER YU + 0x044f: 0x00de, # CYRILLIC SMALL LETTER YA + 0x0451: 0x0084, # CYRILLIC SMALL LETTER IO + 0x0452: 0x0080, # CYRILLIC SMALL LETTER DJE + 0x0453: 0x0082, # CYRILLIC SMALL LETTER GJE + 0x0454: 0x0086, # CYRILLIC SMALL LETTER UKRAINIAN IE + 0x0455: 0x0088, # CYRILLIC SMALL LETTER DZE + 0x0456: 0x008a, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + 0x0457: 0x008c, # CYRILLIC SMALL LETTER YI + 0x0458: 0x008e, # CYRILLIC SMALL LETTER JE + 0x0459: 0x0090, # CYRILLIC SMALL LETTER LJE + 0x045a: 0x0092, # CYRILLIC SMALL LETTER NJE + 0x045b: 0x0094, # CYRILLIC SMALL LETTER TSHE + 0x045c: 0x0096, # CYRILLIC SMALL LETTER KJE + 0x045e: 0x0098, # CYRILLIC SMALL LETTER SHORT U + 0x045f: 0x009a, # CYRILLIC SMALL LETTER DZHE + 0x2116: 0x00ef, # NUMERO SIGN + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp856.py b/my_env/Lib/encodings/cp856.py new file mode 100644 index 000000000..cacbfb2f8 --- /dev/null +++ b/my_env/Lib/encodings/cp856.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp856 generated from 'MAPPINGS/VENDORS/MISC/CP856.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp856', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u05d0' # 0x80 -> HEBREW LETTER ALEF + '\u05d1' # 0x81 -> HEBREW LETTER BET + '\u05d2' # 0x82 -> HEBREW LETTER GIMEL + '\u05d3' # 0x83 -> HEBREW LETTER DALET + '\u05d4' # 0x84 -> HEBREW LETTER HE + '\u05d5' # 0x85 -> HEBREW LETTER VAV + '\u05d6' # 0x86 -> HEBREW LETTER ZAYIN + '\u05d7' # 0x87 -> HEBREW LETTER HET + '\u05d8' # 0x88 -> HEBREW LETTER TET + '\u05d9' # 0x89 -> HEBREW LETTER YOD + '\u05da' # 0x8A -> HEBREW LETTER FINAL KAF + '\u05db' # 0x8B -> HEBREW LETTER KAF + '\u05dc' # 0x8C -> HEBREW LETTER LAMED + '\u05dd' # 0x8D -> HEBREW LETTER FINAL MEM + '\u05de' # 0x8E -> HEBREW LETTER MEM + '\u05df' # 0x8F -> HEBREW LETTER FINAL NUN + '\u05e0' # 0x90 -> HEBREW LETTER NUN + '\u05e1' # 0x91 -> HEBREW LETTER SAMEKH + '\u05e2' # 0x92 -> HEBREW LETTER AYIN + '\u05e3' # 0x93 -> HEBREW LETTER FINAL PE + '\u05e4' # 0x94 -> HEBREW LETTER PE + '\u05e5' # 0x95 -> HEBREW LETTER FINAL TSADI + '\u05e6' # 0x96 -> HEBREW LETTER TSADI + '\u05e7' # 0x97 -> HEBREW LETTER QOF + '\u05e8' # 0x98 -> HEBREW LETTER RESH + '\u05e9' # 0x99 -> HEBREW LETTER SHIN + '\u05ea' # 0x9A -> HEBREW LETTER TAV + '\ufffe' # 0x9B -> UNDEFINED + '\xa3' # 0x9C -> POUND SIGN + '\ufffe' # 0x9D -> UNDEFINED + '\xd7' # 0x9E -> MULTIPLICATION SIGN + '\ufffe' # 0x9F -> UNDEFINED + '\ufffe' # 0xA0 -> UNDEFINED + '\ufffe' # 0xA1 -> UNDEFINED + '\ufffe' # 0xA2 -> UNDEFINED + '\ufffe' # 0xA3 -> UNDEFINED + '\ufffe' # 0xA4 -> UNDEFINED + '\ufffe' # 0xA5 -> UNDEFINED + '\ufffe' # 0xA6 -> UNDEFINED + '\ufffe' # 0xA7 -> UNDEFINED + '\ufffe' # 0xA8 -> UNDEFINED + '\xae' # 0xA9 -> REGISTERED SIGN + '\xac' # 0xAA -> NOT SIGN + '\xbd' # 0xAB -> VULGAR FRACTION ONE HALF + '\xbc' # 0xAC -> VULGAR FRACTION ONE QUARTER + '\ufffe' # 0xAD -> UNDEFINED + '\xab' # 0xAE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0xAF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0xB0 -> LIGHT SHADE + '\u2592' # 0xB1 -> MEDIUM SHADE + '\u2593' # 0xB2 -> DARK SHADE + '\u2502' # 0xB3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0xB4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\ufffe' # 0xB5 -> UNDEFINED + '\ufffe' # 0xB6 -> UNDEFINED + '\ufffe' # 0xB7 -> UNDEFINED + '\xa9' # 0xB8 -> COPYRIGHT SIGN + '\u2563' # 0xB9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0xBA -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0xBB -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0xBC -> BOX DRAWINGS DOUBLE UP AND LEFT + '\xa2' # 0xBD -> CENT SIGN + '\xa5' # 0xBE -> YEN SIGN + '\u2510' # 0xBF -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0xC0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0xC1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0xC2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0xC3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0xC4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0xC5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\ufffe' # 0xC6 -> UNDEFINED + '\ufffe' # 0xC7 -> UNDEFINED + '\u255a' # 0xC8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0xC9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0xCA -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0xCB -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0xCC -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0xCD -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0xCE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\xa4' # 0xCF -> CURRENCY SIGN + '\ufffe' # 0xD0 -> UNDEFINED + '\ufffe' # 0xD1 -> UNDEFINED + '\ufffe' # 0xD2 -> UNDEFINED + '\ufffe' # 0xD3 -> UNDEFINEDS + '\ufffe' # 0xD4 -> UNDEFINED + '\ufffe' # 0xD5 -> UNDEFINED + '\ufffe' # 0xD6 -> UNDEFINEDE + '\ufffe' # 0xD7 -> UNDEFINED + '\ufffe' # 0xD8 -> UNDEFINED + '\u2518' # 0xD9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0xDA -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0xDB -> FULL BLOCK + '\u2584' # 0xDC -> LOWER HALF BLOCK + '\xa6' # 0xDD -> BROKEN BAR + '\ufffe' # 0xDE -> UNDEFINED + '\u2580' # 0xDF -> UPPER HALF BLOCK + '\ufffe' # 0xE0 -> UNDEFINED + '\ufffe' # 0xE1 -> UNDEFINED + '\ufffe' # 0xE2 -> UNDEFINED + '\ufffe' # 0xE3 -> UNDEFINED + '\ufffe' # 0xE4 -> UNDEFINED + '\ufffe' # 0xE5 -> UNDEFINED + '\xb5' # 0xE6 -> MICRO SIGN + '\ufffe' # 0xE7 -> UNDEFINED + '\ufffe' # 0xE8 -> UNDEFINED + '\ufffe' # 0xE9 -> UNDEFINED + '\ufffe' # 0xEA -> UNDEFINED + '\ufffe' # 0xEB -> UNDEFINED + '\ufffe' # 0xEC -> UNDEFINED + '\ufffe' # 0xED -> UNDEFINED + '\xaf' # 0xEE -> MACRON + '\xb4' # 0xEF -> ACUTE ACCENT + '\xad' # 0xF0 -> SOFT HYPHEN + '\xb1' # 0xF1 -> PLUS-MINUS SIGN + '\u2017' # 0xF2 -> DOUBLE LOW LINE + '\xbe' # 0xF3 -> VULGAR FRACTION THREE QUARTERS + '\xb6' # 0xF4 -> PILCROW SIGN + '\xa7' # 0xF5 -> SECTION SIGN + '\xf7' # 0xF6 -> DIVISION SIGN + '\xb8' # 0xF7 -> CEDILLA + '\xb0' # 0xF8 -> DEGREE SIGN + '\xa8' # 0xF9 -> DIAERESIS + '\xb7' # 0xFA -> MIDDLE DOT + '\xb9' # 0xFB -> SUPERSCRIPT ONE + '\xb3' # 0xFC -> SUPERSCRIPT THREE + '\xb2' # 0xFD -> SUPERSCRIPT TWO + '\u25a0' # 0xFE -> BLACK SQUARE + '\xa0' # 0xFF -> NO-BREAK SPACE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp857.py b/my_env/Lib/encodings/cp857.py new file mode 100644 index 000000000..741b059b9 --- /dev/null +++ b/my_env/Lib/encodings/cp857.py @@ -0,0 +1,694 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP857.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp857', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x008d: 0x0131, # LATIN SMALL LETTER DOTLESS I + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE + 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE + 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x0098: 0x0130, # LATIN CAPITAL LETTER I WITH DOT ABOVE + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE + 0x009e: 0x015e, # LATIN CAPITAL LETTER S WITH CEDILLA + 0x009f: 0x015f, # LATIN SMALL LETTER S WITH CEDILLA + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00a6: 0x011e, # LATIN CAPITAL LETTER G WITH BREVE + 0x00a7: 0x011f, # LATIN SMALL LETTER G WITH BREVE + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x00ae, # REGISTERED SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00b7: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00b8: 0x00a9, # COPYRIGHT SIGN + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x00a2, # CENT SIGN + 0x00be: 0x00a5, # YEN SIGN + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x00e3, # LATIN SMALL LETTER A WITH TILDE + 0x00c7: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x00a4, # CURRENCY SIGN + 0x00d0: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00d1: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00d2: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00d4: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00d5: None, # UNDEFINED + 0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00d8: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x00a6, # BROKEN BAR + 0x00de: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00e3: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE + 0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: None, # UNDEFINED + 0x00e8: 0x00d7, # MULTIPLICATION SIGN + 0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00ea: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00eb: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00ed: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x00ee: 0x00af, # MACRON + 0x00ef: 0x00b4, # ACUTE ACCENT + 0x00f0: 0x00ad, # SOFT HYPHEN + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: None, # UNDEFINED + 0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS + 0x00f4: 0x00b6, # PILCROW SIGN + 0x00f5: 0x00a7, # SECTION SIGN + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x00b8, # CEDILLA + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x00a8, # DIAERESIS + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x00b9, # SUPERSCRIPT ONE + 0x00fc: 0x00b3, # SUPERSCRIPT THREE + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + '\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS + '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\u0131' # 0x008d -> LATIN SMALL LETTER DOTLESS I + '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE + '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE + '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE + '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE + '\u0130' # 0x0098 -> LATIN CAPITAL LETTER I WITH DOT ABOVE + '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE + '\xa3' # 0x009c -> POUND SIGN + '\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE + '\u015e' # 0x009e -> LATIN CAPITAL LETTER S WITH CEDILLA + '\u015f' # 0x009f -> LATIN SMALL LETTER S WITH CEDILLA + '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE + '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE + '\u011e' # 0x00a6 -> LATIN CAPITAL LETTER G WITH BREVE + '\u011f' # 0x00a7 -> LATIN SMALL LETTER G WITH BREVE + '\xbf' # 0x00a8 -> INVERTED QUESTION MARK + '\xae' # 0x00a9 -> REGISTERED SIGN + '\xac' # 0x00aa -> NOT SIGN + '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc0' # 0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xa9' # 0x00b8 -> COPYRIGHT SIGN + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\xa2' # 0x00bd -> CENT SIGN + '\xa5' # 0x00be -> YEN SIGN + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\xe3' # 0x00c6 -> LATIN SMALL LETTER A WITH TILDE + '\xc3' # 0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\xa4' # 0x00cf -> CURRENCY SIGN + '\xba' # 0x00d0 -> MASCULINE ORDINAL INDICATOR + '\xaa' # 0x00d1 -> FEMININE ORDINAL INDICATOR + '\xca' # 0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xc8' # 0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE + '\ufffe' # 0x00d5 -> UNDEFINED + '\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\xa6' # 0x00dd -> BROKEN BAR + '\xcc' # 0x00de -> LATIN CAPITAL LETTER I WITH GRAVE + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + '\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd2' # 0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE + '\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xb5' # 0x00e6 -> MICRO SIGN + '\ufffe' # 0x00e7 -> UNDEFINED + '\xd7' # 0x00e8 -> MULTIPLICATION SIGN + '\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xd9' # 0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE + '\xec' # 0x00ec -> LATIN SMALL LETTER I WITH GRAVE + '\xff' # 0x00ed -> LATIN SMALL LETTER Y WITH DIAERESIS + '\xaf' # 0x00ee -> MACRON + '\xb4' # 0x00ef -> ACUTE ACCENT + '\xad' # 0x00f0 -> SOFT HYPHEN + '\xb1' # 0x00f1 -> PLUS-MINUS SIGN + '\ufffe' # 0x00f2 -> UNDEFINED + '\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS + '\xb6' # 0x00f4 -> PILCROW SIGN + '\xa7' # 0x00f5 -> SECTION SIGN + '\xf7' # 0x00f6 -> DIVISION SIGN + '\xb8' # 0x00f7 -> CEDILLA + '\xb0' # 0x00f8 -> DEGREE SIGN + '\xa8' # 0x00f9 -> DIAERESIS + '\xb7' # 0x00fa -> MIDDLE DOT + '\xb9' # 0x00fb -> SUPERSCRIPT ONE + '\xb3' # 0x00fc -> SUPERSCRIPT THREE + '\xb2' # 0x00fd -> SUPERSCRIPT TWO + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a2: 0x00bd, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00a4: 0x00cf, # CURRENCY SIGN + 0x00a5: 0x00be, # YEN SIGN + 0x00a6: 0x00dd, # BROKEN BAR + 0x00a7: 0x00f5, # SECTION SIGN + 0x00a8: 0x00f9, # DIAERESIS + 0x00a9: 0x00b8, # COPYRIGHT SIGN + 0x00aa: 0x00d1, # FEMININE ORDINAL INDICATOR + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00ad: 0x00f0, # SOFT HYPHEN + 0x00ae: 0x00a9, # REGISTERED SIGN + 0x00af: 0x00ee, # MACRON + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b3: 0x00fc, # SUPERSCRIPT THREE + 0x00b4: 0x00ef, # ACUTE ACCENT + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b6: 0x00f4, # PILCROW SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00b8: 0x00f7, # CEDILLA + 0x00b9: 0x00fb, # SUPERSCRIPT ONE + 0x00ba: 0x00d0, # MASCULINE ORDINAL INDICATOR + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00c0: 0x00b7, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00c3: 0x00c7, # LATIN CAPITAL LETTER A WITH TILDE + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c8: 0x00d4, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00ca: 0x00d2, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00cc: 0x00de, # LATIN CAPITAL LETTER I WITH GRAVE + 0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00cf: 0x00d8, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE + 0x00d2: 0x00e3, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00d7: 0x00e8, # MULTIPLICATION SIGN + 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE + 0x00d9: 0x00eb, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00db: 0x00ea, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e3: 0x00c6, # LATIN SMALL LETTER A WITH TILDE + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ec: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE + 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE + 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00ff: 0x00ed, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x011e: 0x00a6, # LATIN CAPITAL LETTER G WITH BREVE + 0x011f: 0x00a7, # LATIN SMALL LETTER G WITH BREVE + 0x0130: 0x0098, # LATIN CAPITAL LETTER I WITH DOT ABOVE + 0x0131: 0x008d, # LATIN SMALL LETTER DOTLESS I + 0x015e: 0x009e, # LATIN CAPITAL LETTER S WITH CEDILLA + 0x015f: 0x009f, # LATIN SMALL LETTER S WITH CEDILLA + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp858.py b/my_env/Lib/encodings/cp858.py new file mode 100644 index 000000000..7579f5253 --- /dev/null +++ b/my_env/Lib/encodings/cp858.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec for CP858, modified from cp850. + +""" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp858', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE + 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE + 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE + 0x009e: 0x00d7, # MULTIPLICATION SIGN + 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x00ae, # REGISTERED SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00b7: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00b8: 0x00a9, # COPYRIGHT SIGN + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x00a2, # CENT SIGN + 0x00be: 0x00a5, # YEN SIGN + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x00e3, # LATIN SMALL LETTER A WITH TILDE + 0x00c7: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x00a4, # CURRENCY SIGN + 0x00d0: 0x00f0, # LATIN SMALL LETTER ETH + 0x00d1: 0x00d0, # LATIN CAPITAL LETTER ETH + 0x00d2: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00d4: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00d5: 0x20ac, # EURO SIGN + 0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00d8: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x00a6, # BROKEN BAR + 0x00de: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00e3: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE + 0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x00fe, # LATIN SMALL LETTER THORN + 0x00e8: 0x00de, # LATIN CAPITAL LETTER THORN + 0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00ea: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00eb: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00ec: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE + 0x00ed: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00ee: 0x00af, # MACRON + 0x00ef: 0x00b4, # ACUTE ACCENT + 0x00f0: 0x00ad, # SOFT HYPHEN + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2017, # DOUBLE LOW LINE + 0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS + 0x00f4: 0x00b6, # PILCROW SIGN + 0x00f5: 0x00a7, # SECTION SIGN + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x00b8, # CEDILLA + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x00a8, # DIAERESIS + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x00b9, # SUPERSCRIPT ONE + 0x00fc: 0x00b3, # SUPERSCRIPT THREE + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + '\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS + '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE + '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE + '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE + '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE + '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE + '\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS + '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE + '\xa3' # 0x009c -> POUND SIGN + '\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE + '\xd7' # 0x009e -> MULTIPLICATION SIGN + '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK + '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE + '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE + '\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR + '\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR + '\xbf' # 0x00a8 -> INVERTED QUESTION MARK + '\xae' # 0x00a9 -> REGISTERED SIGN + '\xac' # 0x00aa -> NOT SIGN + '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc0' # 0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xa9' # 0x00b8 -> COPYRIGHT SIGN + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\xa2' # 0x00bd -> CENT SIGN + '\xa5' # 0x00be -> YEN SIGN + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\xe3' # 0x00c6 -> LATIN SMALL LETTER A WITH TILDE + '\xc3' # 0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\xa4' # 0x00cf -> CURRENCY SIGN + '\xf0' # 0x00d0 -> LATIN SMALL LETTER ETH + '\xd0' # 0x00d1 -> LATIN CAPITAL LETTER ETH + '\xca' # 0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xc8' # 0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE + '\u20ac' # 0x00d5 -> EURO SIGN + '\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\xa6' # 0x00dd -> BROKEN BAR + '\xcc' # 0x00de -> LATIN CAPITAL LETTER I WITH GRAVE + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + '\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd2' # 0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE + '\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xb5' # 0x00e6 -> MICRO SIGN + '\xfe' # 0x00e7 -> LATIN SMALL LETTER THORN + '\xde' # 0x00e8 -> LATIN CAPITAL LETTER THORN + '\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xd9' # 0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE + '\xfd' # 0x00ec -> LATIN SMALL LETTER Y WITH ACUTE + '\xdd' # 0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xaf' # 0x00ee -> MACRON + '\xb4' # 0x00ef -> ACUTE ACCENT + '\xad' # 0x00f0 -> SOFT HYPHEN + '\xb1' # 0x00f1 -> PLUS-MINUS SIGN + '\u2017' # 0x00f2 -> DOUBLE LOW LINE + '\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS + '\xb6' # 0x00f4 -> PILCROW SIGN + '\xa7' # 0x00f5 -> SECTION SIGN + '\xf7' # 0x00f6 -> DIVISION SIGN + '\xb8' # 0x00f7 -> CEDILLA + '\xb0' # 0x00f8 -> DEGREE SIGN + '\xa8' # 0x00f9 -> DIAERESIS + '\xb7' # 0x00fa -> MIDDLE DOT + '\xb9' # 0x00fb -> SUPERSCRIPT ONE + '\xb3' # 0x00fc -> SUPERSCRIPT THREE + '\xb2' # 0x00fd -> SUPERSCRIPT TWO + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a2: 0x00bd, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00a4: 0x00cf, # CURRENCY SIGN + 0x00a5: 0x00be, # YEN SIGN + 0x00a6: 0x00dd, # BROKEN BAR + 0x00a7: 0x00f5, # SECTION SIGN + 0x00a8: 0x00f9, # DIAERESIS + 0x00a9: 0x00b8, # COPYRIGHT SIGN + 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00ad: 0x00f0, # SOFT HYPHEN + 0x00ae: 0x00a9, # REGISTERED SIGN + 0x00af: 0x00ee, # MACRON + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b3: 0x00fc, # SUPERSCRIPT THREE + 0x00b4: 0x00ef, # ACUTE ACCENT + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b6: 0x00f4, # PILCROW SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00b8: 0x00f7, # CEDILLA + 0x00b9: 0x00fb, # SUPERSCRIPT ONE + 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00c0: 0x00b7, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00c3: 0x00c7, # LATIN CAPITAL LETTER A WITH TILDE + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c8: 0x00d4, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00ca: 0x00d2, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00cc: 0x00de, # LATIN CAPITAL LETTER I WITH GRAVE + 0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00cf: 0x00d8, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00d0: 0x00d1, # LATIN CAPITAL LETTER ETH + 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE + 0x00d2: 0x00e3, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00d7: 0x009e, # MULTIPLICATION SIGN + 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE + 0x00d9: 0x00eb, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00db: 0x00ea, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00dd: 0x00ed, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00de: 0x00e8, # LATIN CAPITAL LETTER THORN + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e3: 0x00c6, # LATIN SMALL LETTER A WITH TILDE + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00f0: 0x00d0, # LATIN SMALL LETTER ETH + 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE + 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE + 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00fd: 0x00ec, # LATIN SMALL LETTER Y WITH ACUTE + 0x00fe: 0x00e7, # LATIN SMALL LETTER THORN + 0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x20ac: 0x00d5, # EURO SIGN + 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK + 0x2017: 0x00f2, # DOUBLE LOW LINE + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp860.py b/my_env/Lib/encodings/cp860.py new file mode 100644 index 000000000..65903e746 --- /dev/null +++ b/my_env/Lib/encodings/cp860.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP860.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp860', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e3, # LATIN SMALL LETTER A WITH TILDE + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x008c: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE + 0x008e: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE + 0x008f: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE + 0x0092: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f5, # LATIN SMALL LETTER O WITH TILDE + 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE + 0x0096: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x0098: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE + 0x0099: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00a2, # CENT SIGN + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE + 0x009e: 0x20a7, # PESETA SIGN + 0x009f: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00e3: 0x03c0, # GREEK SMALL LETTER PI + 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU + 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00ec: 0x221e, # INFINITY + 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00ef: 0x2229, # INTERSECTION + 0x00f0: 0x2261, # IDENTICAL TO + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x2320, # TOP HALF INTEGRAL + 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe3' # 0x0084 -> LATIN SMALL LETTER A WITH TILDE + '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + '\xc1' # 0x0086 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xca' # 0x0089 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + '\xcd' # 0x008b -> LATIN CAPITAL LETTER I WITH ACUTE + '\xd4' # 0x008c -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE + '\xc3' # 0x008e -> LATIN CAPITAL LETTER A WITH TILDE + '\xc2' # 0x008f -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xc0' # 0x0091 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc8' # 0x0092 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf5' # 0x0094 -> LATIN SMALL LETTER O WITH TILDE + '\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE + '\xda' # 0x0096 -> LATIN CAPITAL LETTER U WITH ACUTE + '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE + '\xcc' # 0x0098 -> LATIN CAPITAL LETTER I WITH GRAVE + '\xd5' # 0x0099 -> LATIN CAPITAL LETTER O WITH TILDE + '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xa2' # 0x009b -> CENT SIGN + '\xa3' # 0x009c -> POUND SIGN + '\xd9' # 0x009d -> LATIN CAPITAL LETTER U WITH GRAVE + '\u20a7' # 0x009e -> PESETA SIGN + '\xd3' # 0x009f -> LATIN CAPITAL LETTER O WITH ACUTE + '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE + '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE + '\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR + '\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR + '\xbf' # 0x00a8 -> INVERTED QUESTION MARK + '\xd2' # 0x00a9 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xac' # 0x00aa -> NOT SIGN + '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\u258c' # 0x00dd -> LEFT HALF BLOCK + '\u2590' # 0x00de -> RIGHT HALF BLOCK + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA + '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + '\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA + '\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI + '\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA + '\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA + '\xb5' # 0x00e6 -> MICRO SIGN + '\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU + '\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI + '\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA + '\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA + '\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA + '\u221e' # 0x00ec -> INFINITY + '\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI + '\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON + '\u2229' # 0x00ef -> INTERSECTION + '\u2261' # 0x00f0 -> IDENTICAL TO + '\xb1' # 0x00f1 -> PLUS-MINUS SIGN + '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + '\u2320' # 0x00f4 -> TOP HALF INTEGRAL + '\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL + '\xf7' # 0x00f6 -> DIVISION SIGN + '\u2248' # 0x00f7 -> ALMOST EQUAL TO + '\xb0' # 0x00f8 -> DEGREE SIGN + '\u2219' # 0x00f9 -> BULLET OPERATOR + '\xb7' # 0x00fa -> MIDDLE DOT + '\u221a' # 0x00fb -> SQUARE ROOT + '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + '\xb2' # 0x00fd -> SUPERSCRIPT TWO + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a2: 0x009b, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00c0: 0x0091, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00c1: 0x0086, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00c2: 0x008f, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00c3: 0x008e, # LATIN CAPITAL LETTER A WITH TILDE + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c8: 0x0092, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00ca: 0x0089, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00cc: 0x0098, # LATIN CAPITAL LETTER I WITH GRAVE + 0x00cd: 0x008b, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE + 0x00d2: 0x00a9, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00d3: 0x009f, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00d4: 0x008c, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00d5: 0x0099, # LATIN CAPITAL LETTER O WITH TILDE + 0x00d9: 0x009d, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00da: 0x0096, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e3: 0x0084, # LATIN SMALL LETTER A WITH TILDE + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE + 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f5: 0x0094, # LATIN SMALL LETTER O WITH TILDE + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA + 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA + 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA + 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI + 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA + 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA + 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON + 0x03c0: 0x00e3, # GREEK SMALL LETTER PI + 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU + 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x20a7: 0x009e, # PESETA SIGN + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x221e: 0x00ec, # INFINITY + 0x2229: 0x00ef, # INTERSECTION + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2261: 0x00f0, # IDENTICAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2320: 0x00f4, # TOP HALF INTEGRAL + 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp861.py b/my_env/Lib/encodings/cp861.py new file mode 100644 index 000000000..860a05fa3 --- /dev/null +++ b/my_env/Lib/encodings/cp861.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP861.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp861', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00d0, # LATIN CAPITAL LETTER ETH + 0x008c: 0x00f0, # LATIN SMALL LETTER ETH + 0x008d: 0x00de, # LATIN CAPITAL LETTER THORN + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE + 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x00fe, # LATIN SMALL LETTER THORN + 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x0097: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x0098: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE + 0x009e: 0x20a7, # PESETA SIGN + 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00a5: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00a6: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00a7: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x2310, # REVERSED NOT SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00e3: 0x03c0, # GREEK SMALL LETTER PI + 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU + 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00ec: 0x221e, # INFINITY + 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00ef: 0x2229, # INTERSECTION + 0x00f0: 0x2261, # IDENTICAL TO + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x2320, # TOP HALF INTEGRAL + 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + '\xd0' # 0x008b -> LATIN CAPITAL LETTER ETH + '\xf0' # 0x008c -> LATIN SMALL LETTER ETH + '\xde' # 0x008d -> LATIN CAPITAL LETTER THORN + '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE + '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE + '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xfe' # 0x0095 -> LATIN SMALL LETTER THORN + '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xdd' # 0x0097 -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xfd' # 0x0098 -> LATIN SMALL LETTER Y WITH ACUTE + '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE + '\xa3' # 0x009c -> POUND SIGN + '\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE + '\u20a7' # 0x009e -> PESETA SIGN + '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK + '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + '\xc1' # 0x00a4 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xcd' # 0x00a5 -> LATIN CAPITAL LETTER I WITH ACUTE + '\xd3' # 0x00a6 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xda' # 0x00a7 -> LATIN CAPITAL LETTER U WITH ACUTE + '\xbf' # 0x00a8 -> INVERTED QUESTION MARK + '\u2310' # 0x00a9 -> REVERSED NOT SIGN + '\xac' # 0x00aa -> NOT SIGN + '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\u258c' # 0x00dd -> LEFT HALF BLOCK + '\u2590' # 0x00de -> RIGHT HALF BLOCK + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA + '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + '\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA + '\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI + '\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA + '\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA + '\xb5' # 0x00e6 -> MICRO SIGN + '\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU + '\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI + '\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA + '\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA + '\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA + '\u221e' # 0x00ec -> INFINITY + '\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI + '\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON + '\u2229' # 0x00ef -> INTERSECTION + '\u2261' # 0x00f0 -> IDENTICAL TO + '\xb1' # 0x00f1 -> PLUS-MINUS SIGN + '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + '\u2320' # 0x00f4 -> TOP HALF INTEGRAL + '\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL + '\xf7' # 0x00f6 -> DIVISION SIGN + '\u2248' # 0x00f7 -> ALMOST EQUAL TO + '\xb0' # 0x00f8 -> DEGREE SIGN + '\u2219' # 0x00f9 -> BULLET OPERATOR + '\xb7' # 0x00fa -> MIDDLE DOT + '\u221a' # 0x00fb -> SQUARE ROOT + '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + '\xb2' # 0x00fd -> SUPERSCRIPT TWO + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a3: 0x009c, # POUND SIGN + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00c1: 0x00a4, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00cd: 0x00a5, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00d0: 0x008b, # LATIN CAPITAL LETTER ETH + 0x00d3: 0x00a6, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE + 0x00da: 0x00a7, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00dd: 0x0097, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00de: 0x008d, # LATIN CAPITAL LETTER THORN + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00f0: 0x008c, # LATIN SMALL LETTER ETH + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00fd: 0x0098, # LATIN SMALL LETTER Y WITH ACUTE + 0x00fe: 0x0095, # LATIN SMALL LETTER THORN + 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK + 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA + 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA + 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA + 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI + 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA + 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA + 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON + 0x03c0: 0x00e3, # GREEK SMALL LETTER PI + 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU + 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x20a7: 0x009e, # PESETA SIGN + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x221e: 0x00ec, # INFINITY + 0x2229: 0x00ef, # INTERSECTION + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2261: 0x00f0, # IDENTICAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2310: 0x00a9, # REVERSED NOT SIGN + 0x2320: 0x00f4, # TOP HALF INTEGRAL + 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp862.py b/my_env/Lib/encodings/cp862.py new file mode 100644 index 000000000..3df22f997 --- /dev/null +++ b/my_env/Lib/encodings/cp862.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP862.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp862', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x05d0, # HEBREW LETTER ALEF + 0x0081: 0x05d1, # HEBREW LETTER BET + 0x0082: 0x05d2, # HEBREW LETTER GIMEL + 0x0083: 0x05d3, # HEBREW LETTER DALET + 0x0084: 0x05d4, # HEBREW LETTER HE + 0x0085: 0x05d5, # HEBREW LETTER VAV + 0x0086: 0x05d6, # HEBREW LETTER ZAYIN + 0x0087: 0x05d7, # HEBREW LETTER HET + 0x0088: 0x05d8, # HEBREW LETTER TET + 0x0089: 0x05d9, # HEBREW LETTER YOD + 0x008a: 0x05da, # HEBREW LETTER FINAL KAF + 0x008b: 0x05db, # HEBREW LETTER KAF + 0x008c: 0x05dc, # HEBREW LETTER LAMED + 0x008d: 0x05dd, # HEBREW LETTER FINAL MEM + 0x008e: 0x05de, # HEBREW LETTER MEM + 0x008f: 0x05df, # HEBREW LETTER FINAL NUN + 0x0090: 0x05e0, # HEBREW LETTER NUN + 0x0091: 0x05e1, # HEBREW LETTER SAMEKH + 0x0092: 0x05e2, # HEBREW LETTER AYIN + 0x0093: 0x05e3, # HEBREW LETTER FINAL PE + 0x0094: 0x05e4, # HEBREW LETTER PE + 0x0095: 0x05e5, # HEBREW LETTER FINAL TSADI + 0x0096: 0x05e6, # HEBREW LETTER TSADI + 0x0097: 0x05e7, # HEBREW LETTER QOF + 0x0098: 0x05e8, # HEBREW LETTER RESH + 0x0099: 0x05e9, # HEBREW LETTER SHIN + 0x009a: 0x05ea, # HEBREW LETTER TAV + 0x009b: 0x00a2, # CENT SIGN + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00a5, # YEN SIGN + 0x009e: 0x20a7, # PESETA SIGN + 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x2310, # REVERSED NOT SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S (GERMAN) + 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00e3: 0x03c0, # GREEK SMALL LETTER PI + 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU + 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00ec: 0x221e, # INFINITY + 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00ef: 0x2229, # INTERSECTION + 0x00f0: 0x2261, # IDENTICAL TO + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x2320, # TOP HALF INTEGRAL + 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\u05d0' # 0x0080 -> HEBREW LETTER ALEF + '\u05d1' # 0x0081 -> HEBREW LETTER BET + '\u05d2' # 0x0082 -> HEBREW LETTER GIMEL + '\u05d3' # 0x0083 -> HEBREW LETTER DALET + '\u05d4' # 0x0084 -> HEBREW LETTER HE + '\u05d5' # 0x0085 -> HEBREW LETTER VAV + '\u05d6' # 0x0086 -> HEBREW LETTER ZAYIN + '\u05d7' # 0x0087 -> HEBREW LETTER HET + '\u05d8' # 0x0088 -> HEBREW LETTER TET + '\u05d9' # 0x0089 -> HEBREW LETTER YOD + '\u05da' # 0x008a -> HEBREW LETTER FINAL KAF + '\u05db' # 0x008b -> HEBREW LETTER KAF + '\u05dc' # 0x008c -> HEBREW LETTER LAMED + '\u05dd' # 0x008d -> HEBREW LETTER FINAL MEM + '\u05de' # 0x008e -> HEBREW LETTER MEM + '\u05df' # 0x008f -> HEBREW LETTER FINAL NUN + '\u05e0' # 0x0090 -> HEBREW LETTER NUN + '\u05e1' # 0x0091 -> HEBREW LETTER SAMEKH + '\u05e2' # 0x0092 -> HEBREW LETTER AYIN + '\u05e3' # 0x0093 -> HEBREW LETTER FINAL PE + '\u05e4' # 0x0094 -> HEBREW LETTER PE + '\u05e5' # 0x0095 -> HEBREW LETTER FINAL TSADI + '\u05e6' # 0x0096 -> HEBREW LETTER TSADI + '\u05e7' # 0x0097 -> HEBREW LETTER QOF + '\u05e8' # 0x0098 -> HEBREW LETTER RESH + '\u05e9' # 0x0099 -> HEBREW LETTER SHIN + '\u05ea' # 0x009a -> HEBREW LETTER TAV + '\xa2' # 0x009b -> CENT SIGN + '\xa3' # 0x009c -> POUND SIGN + '\xa5' # 0x009d -> YEN SIGN + '\u20a7' # 0x009e -> PESETA SIGN + '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK + '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE + '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE + '\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR + '\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR + '\xbf' # 0x00a8 -> INVERTED QUESTION MARK + '\u2310' # 0x00a9 -> REVERSED NOT SIGN + '\xac' # 0x00aa -> NOT SIGN + '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\u258c' # 0x00dd -> LEFT HALF BLOCK + '\u2590' # 0x00de -> RIGHT HALF BLOCK + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA + '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S (GERMAN) + '\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA + '\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI + '\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA + '\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA + '\xb5' # 0x00e6 -> MICRO SIGN + '\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU + '\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI + '\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA + '\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA + '\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA + '\u221e' # 0x00ec -> INFINITY + '\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI + '\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON + '\u2229' # 0x00ef -> INTERSECTION + '\u2261' # 0x00f0 -> IDENTICAL TO + '\xb1' # 0x00f1 -> PLUS-MINUS SIGN + '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + '\u2320' # 0x00f4 -> TOP HALF INTEGRAL + '\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL + '\xf7' # 0x00f6 -> DIVISION SIGN + '\u2248' # 0x00f7 -> ALMOST EQUAL TO + '\xb0' # 0x00f8 -> DEGREE SIGN + '\u2219' # 0x00f9 -> BULLET OPERATOR + '\xb7' # 0x00fa -> MIDDLE DOT + '\u221a' # 0x00fb -> SQUARE ROOT + '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + '\xb2' # 0x00fd -> SUPERSCRIPT TWO + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a2: 0x009b, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00a5: 0x009d, # YEN SIGN + 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S (GERMAN) + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK + 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA + 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA + 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA + 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI + 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA + 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA + 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON + 0x03c0: 0x00e3, # GREEK SMALL LETTER PI + 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU + 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI + 0x05d0: 0x0080, # HEBREW LETTER ALEF + 0x05d1: 0x0081, # HEBREW LETTER BET + 0x05d2: 0x0082, # HEBREW LETTER GIMEL + 0x05d3: 0x0083, # HEBREW LETTER DALET + 0x05d4: 0x0084, # HEBREW LETTER HE + 0x05d5: 0x0085, # HEBREW LETTER VAV + 0x05d6: 0x0086, # HEBREW LETTER ZAYIN + 0x05d7: 0x0087, # HEBREW LETTER HET + 0x05d8: 0x0088, # HEBREW LETTER TET + 0x05d9: 0x0089, # HEBREW LETTER YOD + 0x05da: 0x008a, # HEBREW LETTER FINAL KAF + 0x05db: 0x008b, # HEBREW LETTER KAF + 0x05dc: 0x008c, # HEBREW LETTER LAMED + 0x05dd: 0x008d, # HEBREW LETTER FINAL MEM + 0x05de: 0x008e, # HEBREW LETTER MEM + 0x05df: 0x008f, # HEBREW LETTER FINAL NUN + 0x05e0: 0x0090, # HEBREW LETTER NUN + 0x05e1: 0x0091, # HEBREW LETTER SAMEKH + 0x05e2: 0x0092, # HEBREW LETTER AYIN + 0x05e3: 0x0093, # HEBREW LETTER FINAL PE + 0x05e4: 0x0094, # HEBREW LETTER PE + 0x05e5: 0x0095, # HEBREW LETTER FINAL TSADI + 0x05e6: 0x0096, # HEBREW LETTER TSADI + 0x05e7: 0x0097, # HEBREW LETTER QOF + 0x05e8: 0x0098, # HEBREW LETTER RESH + 0x05e9: 0x0099, # HEBREW LETTER SHIN + 0x05ea: 0x009a, # HEBREW LETTER TAV + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x20a7: 0x009e, # PESETA SIGN + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x221e: 0x00ec, # INFINITY + 0x2229: 0x00ef, # INTERSECTION + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2261: 0x00f0, # IDENTICAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2310: 0x00a9, # REVERSED NOT SIGN + 0x2320: 0x00f4, # TOP HALF INTEGRAL + 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp863.py b/my_env/Lib/encodings/cp863.py new file mode 100644 index 000000000..764180b62 --- /dev/null +++ b/my_env/Lib/encodings/cp863.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP863.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp863', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00b6, # PILCROW SIGN + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x008d: 0x2017, # DOUBLE LOW LINE + 0x008e: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE + 0x008f: 0x00a7, # SECTION SIGN + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE + 0x0092: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x0095: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x0098: 0x00a4, # CURRENCY SIGN + 0x0099: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00a2, # CENT SIGN + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE + 0x009e: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00a0: 0x00a6, # BROKEN BAR + 0x00a1: 0x00b4, # ACUTE ACCENT + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00a8, # DIAERESIS + 0x00a5: 0x00b8, # CEDILLA + 0x00a6: 0x00b3, # SUPERSCRIPT THREE + 0x00a7: 0x00af, # MACRON + 0x00a8: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00a9: 0x2310, # REVERSED NOT SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00be, # VULGAR FRACTION THREE QUARTERS + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00e3: 0x03c0, # GREEK SMALL LETTER PI + 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU + 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00ec: 0x221e, # INFINITY + 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00ef: 0x2229, # INTERSECTION + 0x00f0: 0x2261, # IDENTICAL TO + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x2320, # TOP HALF INTEGRAL + 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xc2' # 0x0084 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + '\xb6' # 0x0086 -> PILCROW SIGN + '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + '\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS + '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\u2017' # 0x008d -> DOUBLE LOW LINE + '\xc0' # 0x008e -> LATIN CAPITAL LETTER A WITH GRAVE + '\xa7' # 0x008f -> SECTION SIGN + '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xc8' # 0x0091 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xca' # 0x0092 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xcb' # 0x0094 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xcf' # 0x0095 -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE + '\xa4' # 0x0098 -> CURRENCY SIGN + '\xd4' # 0x0099 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xa2' # 0x009b -> CENT SIGN + '\xa3' # 0x009c -> POUND SIGN + '\xd9' # 0x009d -> LATIN CAPITAL LETTER U WITH GRAVE + '\xdb' # 0x009e -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK + '\xa6' # 0x00a0 -> BROKEN BAR + '\xb4' # 0x00a1 -> ACUTE ACCENT + '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + '\xa8' # 0x00a4 -> DIAERESIS + '\xb8' # 0x00a5 -> CEDILLA + '\xb3' # 0x00a6 -> SUPERSCRIPT THREE + '\xaf' # 0x00a7 -> MACRON + '\xce' # 0x00a8 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\u2310' # 0x00a9 -> REVERSED NOT SIGN + '\xac' # 0x00aa -> NOT SIGN + '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + '\xbe' # 0x00ad -> VULGAR FRACTION THREE QUARTERS + '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\u258c' # 0x00dd -> LEFT HALF BLOCK + '\u2590' # 0x00de -> RIGHT HALF BLOCK + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA + '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + '\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA + '\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI + '\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA + '\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA + '\xb5' # 0x00e6 -> MICRO SIGN + '\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU + '\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI + '\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA + '\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA + '\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA + '\u221e' # 0x00ec -> INFINITY + '\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI + '\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON + '\u2229' # 0x00ef -> INTERSECTION + '\u2261' # 0x00f0 -> IDENTICAL TO + '\xb1' # 0x00f1 -> PLUS-MINUS SIGN + '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + '\u2320' # 0x00f4 -> TOP HALF INTEGRAL + '\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL + '\xf7' # 0x00f6 -> DIVISION SIGN + '\u2248' # 0x00f7 -> ALMOST EQUAL TO + '\xb0' # 0x00f8 -> DEGREE SIGN + '\u2219' # 0x00f9 -> BULLET OPERATOR + '\xb7' # 0x00fa -> MIDDLE DOT + '\u221a' # 0x00fb -> SQUARE ROOT + '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + '\xb2' # 0x00fd -> SUPERSCRIPT TWO + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a2: 0x009b, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00a4: 0x0098, # CURRENCY SIGN + 0x00a6: 0x00a0, # BROKEN BAR + 0x00a7: 0x008f, # SECTION SIGN + 0x00a8: 0x00a4, # DIAERESIS + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00af: 0x00a7, # MACRON + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b3: 0x00a6, # SUPERSCRIPT THREE + 0x00b4: 0x00a1, # ACUTE ACCENT + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b6: 0x0086, # PILCROW SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00b8: 0x00a5, # CEDILLA + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00be: 0x00ad, # VULGAR FRACTION THREE QUARTERS + 0x00c0: 0x008e, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00c2: 0x0084, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c8: 0x0091, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00ca: 0x0092, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00cb: 0x0094, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00ce: 0x00a8, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00cf: 0x0095, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00d4: 0x0099, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00d9: 0x009d, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00db: 0x009e, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK + 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA + 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA + 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA + 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI + 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA + 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA + 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON + 0x03c0: 0x00e3, # GREEK SMALL LETTER PI + 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU + 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI + 0x2017: 0x008d, # DOUBLE LOW LINE + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x221e: 0x00ec, # INFINITY + 0x2229: 0x00ef, # INTERSECTION + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2261: 0x00f0, # IDENTICAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2310: 0x00a9, # REVERSED NOT SIGN + 0x2320: 0x00f4, # TOP HALF INTEGRAL + 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp864.py b/my_env/Lib/encodings/cp864.py new file mode 100644 index 000000000..53df482dc --- /dev/null +++ b/my_env/Lib/encodings/cp864.py @@ -0,0 +1,690 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP864.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp864', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0025: 0x066a, # ARABIC PERCENT SIGN + 0x0080: 0x00b0, # DEGREE SIGN + 0x0081: 0x00b7, # MIDDLE DOT + 0x0082: 0x2219, # BULLET OPERATOR + 0x0083: 0x221a, # SQUARE ROOT + 0x0084: 0x2592, # MEDIUM SHADE + 0x0085: 0x2500, # FORMS LIGHT HORIZONTAL + 0x0086: 0x2502, # FORMS LIGHT VERTICAL + 0x0087: 0x253c, # FORMS LIGHT VERTICAL AND HORIZONTAL + 0x0088: 0x2524, # FORMS LIGHT VERTICAL AND LEFT + 0x0089: 0x252c, # FORMS LIGHT DOWN AND HORIZONTAL + 0x008a: 0x251c, # FORMS LIGHT VERTICAL AND RIGHT + 0x008b: 0x2534, # FORMS LIGHT UP AND HORIZONTAL + 0x008c: 0x2510, # FORMS LIGHT DOWN AND LEFT + 0x008d: 0x250c, # FORMS LIGHT DOWN AND RIGHT + 0x008e: 0x2514, # FORMS LIGHT UP AND RIGHT + 0x008f: 0x2518, # FORMS LIGHT UP AND LEFT + 0x0090: 0x03b2, # GREEK SMALL BETA + 0x0091: 0x221e, # INFINITY + 0x0092: 0x03c6, # GREEK SMALL PHI + 0x0093: 0x00b1, # PLUS-OR-MINUS SIGN + 0x0094: 0x00bd, # FRACTION 1/2 + 0x0095: 0x00bc, # FRACTION 1/4 + 0x0096: 0x2248, # ALMOST EQUAL TO + 0x0097: 0x00ab, # LEFT POINTING GUILLEMET + 0x0098: 0x00bb, # RIGHT POINTING GUILLEMET + 0x0099: 0xfef7, # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM + 0x009a: 0xfef8, # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM + 0x009b: None, # UNDEFINED + 0x009c: None, # UNDEFINED + 0x009d: 0xfefb, # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM + 0x009e: 0xfefc, # ARABIC LIGATURE LAM WITH ALEF FINAL FORM + 0x009f: None, # UNDEFINED + 0x00a1: 0x00ad, # SOFT HYPHEN + 0x00a2: 0xfe82, # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM + 0x00a5: 0xfe84, # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM + 0x00a6: None, # UNDEFINED + 0x00a7: None, # UNDEFINED + 0x00a8: 0xfe8e, # ARABIC LETTER ALEF FINAL FORM + 0x00a9: 0xfe8f, # ARABIC LETTER BEH ISOLATED FORM + 0x00aa: 0xfe95, # ARABIC LETTER TEH ISOLATED FORM + 0x00ab: 0xfe99, # ARABIC LETTER THEH ISOLATED FORM + 0x00ac: 0x060c, # ARABIC COMMA + 0x00ad: 0xfe9d, # ARABIC LETTER JEEM ISOLATED FORM + 0x00ae: 0xfea1, # ARABIC LETTER HAH ISOLATED FORM + 0x00af: 0xfea5, # ARABIC LETTER KHAH ISOLATED FORM + 0x00b0: 0x0660, # ARABIC-INDIC DIGIT ZERO + 0x00b1: 0x0661, # ARABIC-INDIC DIGIT ONE + 0x00b2: 0x0662, # ARABIC-INDIC DIGIT TWO + 0x00b3: 0x0663, # ARABIC-INDIC DIGIT THREE + 0x00b4: 0x0664, # ARABIC-INDIC DIGIT FOUR + 0x00b5: 0x0665, # ARABIC-INDIC DIGIT FIVE + 0x00b6: 0x0666, # ARABIC-INDIC DIGIT SIX + 0x00b7: 0x0667, # ARABIC-INDIC DIGIT SEVEN + 0x00b8: 0x0668, # ARABIC-INDIC DIGIT EIGHT + 0x00b9: 0x0669, # ARABIC-INDIC DIGIT NINE + 0x00ba: 0xfed1, # ARABIC LETTER FEH ISOLATED FORM + 0x00bb: 0x061b, # ARABIC SEMICOLON + 0x00bc: 0xfeb1, # ARABIC LETTER SEEN ISOLATED FORM + 0x00bd: 0xfeb5, # ARABIC LETTER SHEEN ISOLATED FORM + 0x00be: 0xfeb9, # ARABIC LETTER SAD ISOLATED FORM + 0x00bf: 0x061f, # ARABIC QUESTION MARK + 0x00c0: 0x00a2, # CENT SIGN + 0x00c1: 0xfe80, # ARABIC LETTER HAMZA ISOLATED FORM + 0x00c2: 0xfe81, # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM + 0x00c3: 0xfe83, # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM + 0x00c4: 0xfe85, # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM + 0x00c5: 0xfeca, # ARABIC LETTER AIN FINAL FORM + 0x00c6: 0xfe8b, # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM + 0x00c7: 0xfe8d, # ARABIC LETTER ALEF ISOLATED FORM + 0x00c8: 0xfe91, # ARABIC LETTER BEH INITIAL FORM + 0x00c9: 0xfe93, # ARABIC LETTER TEH MARBUTA ISOLATED FORM + 0x00ca: 0xfe97, # ARABIC LETTER TEH INITIAL FORM + 0x00cb: 0xfe9b, # ARABIC LETTER THEH INITIAL FORM + 0x00cc: 0xfe9f, # ARABIC LETTER JEEM INITIAL FORM + 0x00cd: 0xfea3, # ARABIC LETTER HAH INITIAL FORM + 0x00ce: 0xfea7, # ARABIC LETTER KHAH INITIAL FORM + 0x00cf: 0xfea9, # ARABIC LETTER DAL ISOLATED FORM + 0x00d0: 0xfeab, # ARABIC LETTER THAL ISOLATED FORM + 0x00d1: 0xfead, # ARABIC LETTER REH ISOLATED FORM + 0x00d2: 0xfeaf, # ARABIC LETTER ZAIN ISOLATED FORM + 0x00d3: 0xfeb3, # ARABIC LETTER SEEN INITIAL FORM + 0x00d4: 0xfeb7, # ARABIC LETTER SHEEN INITIAL FORM + 0x00d5: 0xfebb, # ARABIC LETTER SAD INITIAL FORM + 0x00d6: 0xfebf, # ARABIC LETTER DAD INITIAL FORM + 0x00d7: 0xfec1, # ARABIC LETTER TAH ISOLATED FORM + 0x00d8: 0xfec5, # ARABIC LETTER ZAH ISOLATED FORM + 0x00d9: 0xfecb, # ARABIC LETTER AIN INITIAL FORM + 0x00da: 0xfecf, # ARABIC LETTER GHAIN INITIAL FORM + 0x00db: 0x00a6, # BROKEN VERTICAL BAR + 0x00dc: 0x00ac, # NOT SIGN + 0x00dd: 0x00f7, # DIVISION SIGN + 0x00de: 0x00d7, # MULTIPLICATION SIGN + 0x00df: 0xfec9, # ARABIC LETTER AIN ISOLATED FORM + 0x00e0: 0x0640, # ARABIC TATWEEL + 0x00e1: 0xfed3, # ARABIC LETTER FEH INITIAL FORM + 0x00e2: 0xfed7, # ARABIC LETTER QAF INITIAL FORM + 0x00e3: 0xfedb, # ARABIC LETTER KAF INITIAL FORM + 0x00e4: 0xfedf, # ARABIC LETTER LAM INITIAL FORM + 0x00e5: 0xfee3, # ARABIC LETTER MEEM INITIAL FORM + 0x00e6: 0xfee7, # ARABIC LETTER NOON INITIAL FORM + 0x00e7: 0xfeeb, # ARABIC LETTER HEH INITIAL FORM + 0x00e8: 0xfeed, # ARABIC LETTER WAW ISOLATED FORM + 0x00e9: 0xfeef, # ARABIC LETTER ALEF MAKSURA ISOLATED FORM + 0x00ea: 0xfef3, # ARABIC LETTER YEH INITIAL FORM + 0x00eb: 0xfebd, # ARABIC LETTER DAD ISOLATED FORM + 0x00ec: 0xfecc, # ARABIC LETTER AIN MEDIAL FORM + 0x00ed: 0xfece, # ARABIC LETTER GHAIN FINAL FORM + 0x00ee: 0xfecd, # ARABIC LETTER GHAIN ISOLATED FORM + 0x00ef: 0xfee1, # ARABIC LETTER MEEM ISOLATED FORM + 0x00f0: 0xfe7d, # ARABIC SHADDA MEDIAL FORM + 0x00f1: 0x0651, # ARABIC SHADDAH + 0x00f2: 0xfee5, # ARABIC LETTER NOON ISOLATED FORM + 0x00f3: 0xfee9, # ARABIC LETTER HEH ISOLATED FORM + 0x00f4: 0xfeec, # ARABIC LETTER HEH MEDIAL FORM + 0x00f5: 0xfef0, # ARABIC LETTER ALEF MAKSURA FINAL FORM + 0x00f6: 0xfef2, # ARABIC LETTER YEH FINAL FORM + 0x00f7: 0xfed0, # ARABIC LETTER GHAIN MEDIAL FORM + 0x00f8: 0xfed5, # ARABIC LETTER QAF ISOLATED FORM + 0x00f9: 0xfef5, # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM + 0x00fa: 0xfef6, # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM + 0x00fb: 0xfedd, # ARABIC LETTER LAM ISOLATED FORM + 0x00fc: 0xfed9, # ARABIC LETTER KAF ISOLATED FORM + 0x00fd: 0xfef1, # ARABIC LETTER YEH ISOLATED FORM + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: None, # UNDEFINED +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '\u066a' # 0x0025 -> ARABIC PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\xb0' # 0x0080 -> DEGREE SIGN + '\xb7' # 0x0081 -> MIDDLE DOT + '\u2219' # 0x0082 -> BULLET OPERATOR + '\u221a' # 0x0083 -> SQUARE ROOT + '\u2592' # 0x0084 -> MEDIUM SHADE + '\u2500' # 0x0085 -> FORMS LIGHT HORIZONTAL + '\u2502' # 0x0086 -> FORMS LIGHT VERTICAL + '\u253c' # 0x0087 -> FORMS LIGHT VERTICAL AND HORIZONTAL + '\u2524' # 0x0088 -> FORMS LIGHT VERTICAL AND LEFT + '\u252c' # 0x0089 -> FORMS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x008a -> FORMS LIGHT VERTICAL AND RIGHT + '\u2534' # 0x008b -> FORMS LIGHT UP AND HORIZONTAL + '\u2510' # 0x008c -> FORMS LIGHT DOWN AND LEFT + '\u250c' # 0x008d -> FORMS LIGHT DOWN AND RIGHT + '\u2514' # 0x008e -> FORMS LIGHT UP AND RIGHT + '\u2518' # 0x008f -> FORMS LIGHT UP AND LEFT + '\u03b2' # 0x0090 -> GREEK SMALL BETA + '\u221e' # 0x0091 -> INFINITY + '\u03c6' # 0x0092 -> GREEK SMALL PHI + '\xb1' # 0x0093 -> PLUS-OR-MINUS SIGN + '\xbd' # 0x0094 -> FRACTION 1/2 + '\xbc' # 0x0095 -> FRACTION 1/4 + '\u2248' # 0x0096 -> ALMOST EQUAL TO + '\xab' # 0x0097 -> LEFT POINTING GUILLEMET + '\xbb' # 0x0098 -> RIGHT POINTING GUILLEMET + '\ufef7' # 0x0099 -> ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM + '\ufef8' # 0x009a -> ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM + '\ufffe' # 0x009b -> UNDEFINED + '\ufffe' # 0x009c -> UNDEFINED + '\ufefb' # 0x009d -> ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM + '\ufefc' # 0x009e -> ARABIC LIGATURE LAM WITH ALEF FINAL FORM + '\ufffe' # 0x009f -> UNDEFINED + '\xa0' # 0x00a0 -> NON-BREAKING SPACE + '\xad' # 0x00a1 -> SOFT HYPHEN + '\ufe82' # 0x00a2 -> ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM + '\xa3' # 0x00a3 -> POUND SIGN + '\xa4' # 0x00a4 -> CURRENCY SIGN + '\ufe84' # 0x00a5 -> ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM + '\ufffe' # 0x00a6 -> UNDEFINED + '\ufffe' # 0x00a7 -> UNDEFINED + '\ufe8e' # 0x00a8 -> ARABIC LETTER ALEF FINAL FORM + '\ufe8f' # 0x00a9 -> ARABIC LETTER BEH ISOLATED FORM + '\ufe95' # 0x00aa -> ARABIC LETTER TEH ISOLATED FORM + '\ufe99' # 0x00ab -> ARABIC LETTER THEH ISOLATED FORM + '\u060c' # 0x00ac -> ARABIC COMMA + '\ufe9d' # 0x00ad -> ARABIC LETTER JEEM ISOLATED FORM + '\ufea1' # 0x00ae -> ARABIC LETTER HAH ISOLATED FORM + '\ufea5' # 0x00af -> ARABIC LETTER KHAH ISOLATED FORM + '\u0660' # 0x00b0 -> ARABIC-INDIC DIGIT ZERO + '\u0661' # 0x00b1 -> ARABIC-INDIC DIGIT ONE + '\u0662' # 0x00b2 -> ARABIC-INDIC DIGIT TWO + '\u0663' # 0x00b3 -> ARABIC-INDIC DIGIT THREE + '\u0664' # 0x00b4 -> ARABIC-INDIC DIGIT FOUR + '\u0665' # 0x00b5 -> ARABIC-INDIC DIGIT FIVE + '\u0666' # 0x00b6 -> ARABIC-INDIC DIGIT SIX + '\u0667' # 0x00b7 -> ARABIC-INDIC DIGIT SEVEN + '\u0668' # 0x00b8 -> ARABIC-INDIC DIGIT EIGHT + '\u0669' # 0x00b9 -> ARABIC-INDIC DIGIT NINE + '\ufed1' # 0x00ba -> ARABIC LETTER FEH ISOLATED FORM + '\u061b' # 0x00bb -> ARABIC SEMICOLON + '\ufeb1' # 0x00bc -> ARABIC LETTER SEEN ISOLATED FORM + '\ufeb5' # 0x00bd -> ARABIC LETTER SHEEN ISOLATED FORM + '\ufeb9' # 0x00be -> ARABIC LETTER SAD ISOLATED FORM + '\u061f' # 0x00bf -> ARABIC QUESTION MARK + '\xa2' # 0x00c0 -> CENT SIGN + '\ufe80' # 0x00c1 -> ARABIC LETTER HAMZA ISOLATED FORM + '\ufe81' # 0x00c2 -> ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM + '\ufe83' # 0x00c3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM + '\ufe85' # 0x00c4 -> ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM + '\ufeca' # 0x00c5 -> ARABIC LETTER AIN FINAL FORM + '\ufe8b' # 0x00c6 -> ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM + '\ufe8d' # 0x00c7 -> ARABIC LETTER ALEF ISOLATED FORM + '\ufe91' # 0x00c8 -> ARABIC LETTER BEH INITIAL FORM + '\ufe93' # 0x00c9 -> ARABIC LETTER TEH MARBUTA ISOLATED FORM + '\ufe97' # 0x00ca -> ARABIC LETTER TEH INITIAL FORM + '\ufe9b' # 0x00cb -> ARABIC LETTER THEH INITIAL FORM + '\ufe9f' # 0x00cc -> ARABIC LETTER JEEM INITIAL FORM + '\ufea3' # 0x00cd -> ARABIC LETTER HAH INITIAL FORM + '\ufea7' # 0x00ce -> ARABIC LETTER KHAH INITIAL FORM + '\ufea9' # 0x00cf -> ARABIC LETTER DAL ISOLATED FORM + '\ufeab' # 0x00d0 -> ARABIC LETTER THAL ISOLATED FORM + '\ufead' # 0x00d1 -> ARABIC LETTER REH ISOLATED FORM + '\ufeaf' # 0x00d2 -> ARABIC LETTER ZAIN ISOLATED FORM + '\ufeb3' # 0x00d3 -> ARABIC LETTER SEEN INITIAL FORM + '\ufeb7' # 0x00d4 -> ARABIC LETTER SHEEN INITIAL FORM + '\ufebb' # 0x00d5 -> ARABIC LETTER SAD INITIAL FORM + '\ufebf' # 0x00d6 -> ARABIC LETTER DAD INITIAL FORM + '\ufec1' # 0x00d7 -> ARABIC LETTER TAH ISOLATED FORM + '\ufec5' # 0x00d8 -> ARABIC LETTER ZAH ISOLATED FORM + '\ufecb' # 0x00d9 -> ARABIC LETTER AIN INITIAL FORM + '\ufecf' # 0x00da -> ARABIC LETTER GHAIN INITIAL FORM + '\xa6' # 0x00db -> BROKEN VERTICAL BAR + '\xac' # 0x00dc -> NOT SIGN + '\xf7' # 0x00dd -> DIVISION SIGN + '\xd7' # 0x00de -> MULTIPLICATION SIGN + '\ufec9' # 0x00df -> ARABIC LETTER AIN ISOLATED FORM + '\u0640' # 0x00e0 -> ARABIC TATWEEL + '\ufed3' # 0x00e1 -> ARABIC LETTER FEH INITIAL FORM + '\ufed7' # 0x00e2 -> ARABIC LETTER QAF INITIAL FORM + '\ufedb' # 0x00e3 -> ARABIC LETTER KAF INITIAL FORM + '\ufedf' # 0x00e4 -> ARABIC LETTER LAM INITIAL FORM + '\ufee3' # 0x00e5 -> ARABIC LETTER MEEM INITIAL FORM + '\ufee7' # 0x00e6 -> ARABIC LETTER NOON INITIAL FORM + '\ufeeb' # 0x00e7 -> ARABIC LETTER HEH INITIAL FORM + '\ufeed' # 0x00e8 -> ARABIC LETTER WAW ISOLATED FORM + '\ufeef' # 0x00e9 -> ARABIC LETTER ALEF MAKSURA ISOLATED FORM + '\ufef3' # 0x00ea -> ARABIC LETTER YEH INITIAL FORM + '\ufebd' # 0x00eb -> ARABIC LETTER DAD ISOLATED FORM + '\ufecc' # 0x00ec -> ARABIC LETTER AIN MEDIAL FORM + '\ufece' # 0x00ed -> ARABIC LETTER GHAIN FINAL FORM + '\ufecd' # 0x00ee -> ARABIC LETTER GHAIN ISOLATED FORM + '\ufee1' # 0x00ef -> ARABIC LETTER MEEM ISOLATED FORM + '\ufe7d' # 0x00f0 -> ARABIC SHADDA MEDIAL FORM + '\u0651' # 0x00f1 -> ARABIC SHADDAH + '\ufee5' # 0x00f2 -> ARABIC LETTER NOON ISOLATED FORM + '\ufee9' # 0x00f3 -> ARABIC LETTER HEH ISOLATED FORM + '\ufeec' # 0x00f4 -> ARABIC LETTER HEH MEDIAL FORM + '\ufef0' # 0x00f5 -> ARABIC LETTER ALEF MAKSURA FINAL FORM + '\ufef2' # 0x00f6 -> ARABIC LETTER YEH FINAL FORM + '\ufed0' # 0x00f7 -> ARABIC LETTER GHAIN MEDIAL FORM + '\ufed5' # 0x00f8 -> ARABIC LETTER QAF ISOLATED FORM + '\ufef5' # 0x00f9 -> ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM + '\ufef6' # 0x00fa -> ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM + '\ufedd' # 0x00fb -> ARABIC LETTER LAM ISOLATED FORM + '\ufed9' # 0x00fc -> ARABIC LETTER KAF ISOLATED FORM + '\ufef1' # 0x00fd -> ARABIC LETTER YEH ISOLATED FORM + '\u25a0' # 0x00fe -> BLACK SQUARE + '\ufffe' # 0x00ff -> UNDEFINED +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00a0, # NON-BREAKING SPACE + 0x00a2: 0x00c0, # CENT SIGN + 0x00a3: 0x00a3, # POUND SIGN + 0x00a4: 0x00a4, # CURRENCY SIGN + 0x00a6: 0x00db, # BROKEN VERTICAL BAR + 0x00ab: 0x0097, # LEFT POINTING GUILLEMET + 0x00ac: 0x00dc, # NOT SIGN + 0x00ad: 0x00a1, # SOFT HYPHEN + 0x00b0: 0x0080, # DEGREE SIGN + 0x00b1: 0x0093, # PLUS-OR-MINUS SIGN + 0x00b7: 0x0081, # MIDDLE DOT + 0x00bb: 0x0098, # RIGHT POINTING GUILLEMET + 0x00bc: 0x0095, # FRACTION 1/4 + 0x00bd: 0x0094, # FRACTION 1/2 + 0x00d7: 0x00de, # MULTIPLICATION SIGN + 0x00f7: 0x00dd, # DIVISION SIGN + 0x03b2: 0x0090, # GREEK SMALL BETA + 0x03c6: 0x0092, # GREEK SMALL PHI + 0x060c: 0x00ac, # ARABIC COMMA + 0x061b: 0x00bb, # ARABIC SEMICOLON + 0x061f: 0x00bf, # ARABIC QUESTION MARK + 0x0640: 0x00e0, # ARABIC TATWEEL + 0x0651: 0x00f1, # ARABIC SHADDAH + 0x0660: 0x00b0, # ARABIC-INDIC DIGIT ZERO + 0x0661: 0x00b1, # ARABIC-INDIC DIGIT ONE + 0x0662: 0x00b2, # ARABIC-INDIC DIGIT TWO + 0x0663: 0x00b3, # ARABIC-INDIC DIGIT THREE + 0x0664: 0x00b4, # ARABIC-INDIC DIGIT FOUR + 0x0665: 0x00b5, # ARABIC-INDIC DIGIT FIVE + 0x0666: 0x00b6, # ARABIC-INDIC DIGIT SIX + 0x0667: 0x00b7, # ARABIC-INDIC DIGIT SEVEN + 0x0668: 0x00b8, # ARABIC-INDIC DIGIT EIGHT + 0x0669: 0x00b9, # ARABIC-INDIC DIGIT NINE + 0x066a: 0x0025, # ARABIC PERCENT SIGN + 0x2219: 0x0082, # BULLET OPERATOR + 0x221a: 0x0083, # SQUARE ROOT + 0x221e: 0x0091, # INFINITY + 0x2248: 0x0096, # ALMOST EQUAL TO + 0x2500: 0x0085, # FORMS LIGHT HORIZONTAL + 0x2502: 0x0086, # FORMS LIGHT VERTICAL + 0x250c: 0x008d, # FORMS LIGHT DOWN AND RIGHT + 0x2510: 0x008c, # FORMS LIGHT DOWN AND LEFT + 0x2514: 0x008e, # FORMS LIGHT UP AND RIGHT + 0x2518: 0x008f, # FORMS LIGHT UP AND LEFT + 0x251c: 0x008a, # FORMS LIGHT VERTICAL AND RIGHT + 0x2524: 0x0088, # FORMS LIGHT VERTICAL AND LEFT + 0x252c: 0x0089, # FORMS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x008b, # FORMS LIGHT UP AND HORIZONTAL + 0x253c: 0x0087, # FORMS LIGHT VERTICAL AND HORIZONTAL + 0x2592: 0x0084, # MEDIUM SHADE + 0x25a0: 0x00fe, # BLACK SQUARE + 0xfe7d: 0x00f0, # ARABIC SHADDA MEDIAL FORM + 0xfe80: 0x00c1, # ARABIC LETTER HAMZA ISOLATED FORM + 0xfe81: 0x00c2, # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM + 0xfe82: 0x00a2, # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM + 0xfe83: 0x00c3, # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM + 0xfe84: 0x00a5, # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM + 0xfe85: 0x00c4, # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM + 0xfe8b: 0x00c6, # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM + 0xfe8d: 0x00c7, # ARABIC LETTER ALEF ISOLATED FORM + 0xfe8e: 0x00a8, # ARABIC LETTER ALEF FINAL FORM + 0xfe8f: 0x00a9, # ARABIC LETTER BEH ISOLATED FORM + 0xfe91: 0x00c8, # ARABIC LETTER BEH INITIAL FORM + 0xfe93: 0x00c9, # ARABIC LETTER TEH MARBUTA ISOLATED FORM + 0xfe95: 0x00aa, # ARABIC LETTER TEH ISOLATED FORM + 0xfe97: 0x00ca, # ARABIC LETTER TEH INITIAL FORM + 0xfe99: 0x00ab, # ARABIC LETTER THEH ISOLATED FORM + 0xfe9b: 0x00cb, # ARABIC LETTER THEH INITIAL FORM + 0xfe9d: 0x00ad, # ARABIC LETTER JEEM ISOLATED FORM + 0xfe9f: 0x00cc, # ARABIC LETTER JEEM INITIAL FORM + 0xfea1: 0x00ae, # ARABIC LETTER HAH ISOLATED FORM + 0xfea3: 0x00cd, # ARABIC LETTER HAH INITIAL FORM + 0xfea5: 0x00af, # ARABIC LETTER KHAH ISOLATED FORM + 0xfea7: 0x00ce, # ARABIC LETTER KHAH INITIAL FORM + 0xfea9: 0x00cf, # ARABIC LETTER DAL ISOLATED FORM + 0xfeab: 0x00d0, # ARABIC LETTER THAL ISOLATED FORM + 0xfead: 0x00d1, # ARABIC LETTER REH ISOLATED FORM + 0xfeaf: 0x00d2, # ARABIC LETTER ZAIN ISOLATED FORM + 0xfeb1: 0x00bc, # ARABIC LETTER SEEN ISOLATED FORM + 0xfeb3: 0x00d3, # ARABIC LETTER SEEN INITIAL FORM + 0xfeb5: 0x00bd, # ARABIC LETTER SHEEN ISOLATED FORM + 0xfeb7: 0x00d4, # ARABIC LETTER SHEEN INITIAL FORM + 0xfeb9: 0x00be, # ARABIC LETTER SAD ISOLATED FORM + 0xfebb: 0x00d5, # ARABIC LETTER SAD INITIAL FORM + 0xfebd: 0x00eb, # ARABIC LETTER DAD ISOLATED FORM + 0xfebf: 0x00d6, # ARABIC LETTER DAD INITIAL FORM + 0xfec1: 0x00d7, # ARABIC LETTER TAH ISOLATED FORM + 0xfec5: 0x00d8, # ARABIC LETTER ZAH ISOLATED FORM + 0xfec9: 0x00df, # ARABIC LETTER AIN ISOLATED FORM + 0xfeca: 0x00c5, # ARABIC LETTER AIN FINAL FORM + 0xfecb: 0x00d9, # ARABIC LETTER AIN INITIAL FORM + 0xfecc: 0x00ec, # ARABIC LETTER AIN MEDIAL FORM + 0xfecd: 0x00ee, # ARABIC LETTER GHAIN ISOLATED FORM + 0xfece: 0x00ed, # ARABIC LETTER GHAIN FINAL FORM + 0xfecf: 0x00da, # ARABIC LETTER GHAIN INITIAL FORM + 0xfed0: 0x00f7, # ARABIC LETTER GHAIN MEDIAL FORM + 0xfed1: 0x00ba, # ARABIC LETTER FEH ISOLATED FORM + 0xfed3: 0x00e1, # ARABIC LETTER FEH INITIAL FORM + 0xfed5: 0x00f8, # ARABIC LETTER QAF ISOLATED FORM + 0xfed7: 0x00e2, # ARABIC LETTER QAF INITIAL FORM + 0xfed9: 0x00fc, # ARABIC LETTER KAF ISOLATED FORM + 0xfedb: 0x00e3, # ARABIC LETTER KAF INITIAL FORM + 0xfedd: 0x00fb, # ARABIC LETTER LAM ISOLATED FORM + 0xfedf: 0x00e4, # ARABIC LETTER LAM INITIAL FORM + 0xfee1: 0x00ef, # ARABIC LETTER MEEM ISOLATED FORM + 0xfee3: 0x00e5, # ARABIC LETTER MEEM INITIAL FORM + 0xfee5: 0x00f2, # ARABIC LETTER NOON ISOLATED FORM + 0xfee7: 0x00e6, # ARABIC LETTER NOON INITIAL FORM + 0xfee9: 0x00f3, # ARABIC LETTER HEH ISOLATED FORM + 0xfeeb: 0x00e7, # ARABIC LETTER HEH INITIAL FORM + 0xfeec: 0x00f4, # ARABIC LETTER HEH MEDIAL FORM + 0xfeed: 0x00e8, # ARABIC LETTER WAW ISOLATED FORM + 0xfeef: 0x00e9, # ARABIC LETTER ALEF MAKSURA ISOLATED FORM + 0xfef0: 0x00f5, # ARABIC LETTER ALEF MAKSURA FINAL FORM + 0xfef1: 0x00fd, # ARABIC LETTER YEH ISOLATED FORM + 0xfef2: 0x00f6, # ARABIC LETTER YEH FINAL FORM + 0xfef3: 0x00ea, # ARABIC LETTER YEH INITIAL FORM + 0xfef5: 0x00f9, # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM + 0xfef6: 0x00fa, # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM + 0xfef7: 0x0099, # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM + 0xfef8: 0x009a, # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM + 0xfefb: 0x009d, # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM + 0xfefc: 0x009e, # ARABIC LIGATURE LAM WITH ALEF FINAL FORM +} diff --git a/my_env/Lib/encodings/cp865.py b/my_env/Lib/encodings/cp865.py new file mode 100644 index 000000000..6726cf3f9 --- /dev/null +++ b/my_env/Lib/encodings/cp865.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP865.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp865', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE + 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE + 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE + 0x009e: 0x20a7, # PESETA SIGN + 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x2310, # REVERSED NOT SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00a4, # CURRENCY SIGN + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00e3: 0x03c0, # GREEK SMALL LETTER PI + 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU + 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00ec: 0x221e, # INFINITY + 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00ef: 0x2229, # INTERSECTION + 0x00f0: 0x2261, # IDENTICAL TO + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x2320, # TOP HALF INTEGRAL + 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + '\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS + '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE + '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE + '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE + '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE + '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE + '\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS + '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE + '\xa3' # 0x009c -> POUND SIGN + '\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE + '\u20a7' # 0x009e -> PESETA SIGN + '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK + '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE + '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE + '\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR + '\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR + '\xbf' # 0x00a8 -> INVERTED QUESTION MARK + '\u2310' # 0x00a9 -> REVERSED NOT SIGN + '\xac' # 0x00aa -> NOT SIGN + '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xa4' # 0x00af -> CURRENCY SIGN + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\u258c' # 0x00dd -> LEFT HALF BLOCK + '\u2590' # 0x00de -> RIGHT HALF BLOCK + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA + '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + '\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA + '\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI + '\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA + '\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA + '\xb5' # 0x00e6 -> MICRO SIGN + '\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU + '\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI + '\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA + '\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA + '\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA + '\u221e' # 0x00ec -> INFINITY + '\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI + '\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON + '\u2229' # 0x00ef -> INTERSECTION + '\u2261' # 0x00f0 -> IDENTICAL TO + '\xb1' # 0x00f1 -> PLUS-MINUS SIGN + '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + '\u2320' # 0x00f4 -> TOP HALF INTEGRAL + '\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL + '\xf7' # 0x00f6 -> DIVISION SIGN + '\u2248' # 0x00f7 -> ALMOST EQUAL TO + '\xb0' # 0x00f8 -> DEGREE SIGN + '\u2219' # 0x00f9 -> BULLET OPERATOR + '\xb7' # 0x00fa -> MIDDLE DOT + '\u221a' # 0x00fb -> SQUARE ROOT + '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + '\xb2' # 0x00fd -> SUPERSCRIPT TWO + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a3: 0x009c, # POUND SIGN + 0x00a4: 0x00af, # CURRENCY SIGN + 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE + 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE + 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK + 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA + 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA + 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA + 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI + 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA + 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA + 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON + 0x03c0: 0x00e3, # GREEK SMALL LETTER PI + 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU + 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x20a7: 0x009e, # PESETA SIGN + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x221e: 0x00ec, # INFINITY + 0x2229: 0x00ef, # INTERSECTION + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2261: 0x00f0, # IDENTICAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2310: 0x00a9, # REVERSED NOT SIGN + 0x2320: 0x00f4, # TOP HALF INTEGRAL + 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp866.py b/my_env/Lib/encodings/cp866.py new file mode 100644 index 000000000..bec7ae39f --- /dev/null +++ b/my_env/Lib/encodings/cp866.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP866.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp866', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x0410, # CYRILLIC CAPITAL LETTER A + 0x0081: 0x0411, # CYRILLIC CAPITAL LETTER BE + 0x0082: 0x0412, # CYRILLIC CAPITAL LETTER VE + 0x0083: 0x0413, # CYRILLIC CAPITAL LETTER GHE + 0x0084: 0x0414, # CYRILLIC CAPITAL LETTER DE + 0x0085: 0x0415, # CYRILLIC CAPITAL LETTER IE + 0x0086: 0x0416, # CYRILLIC CAPITAL LETTER ZHE + 0x0087: 0x0417, # CYRILLIC CAPITAL LETTER ZE + 0x0088: 0x0418, # CYRILLIC CAPITAL LETTER I + 0x0089: 0x0419, # CYRILLIC CAPITAL LETTER SHORT I + 0x008a: 0x041a, # CYRILLIC CAPITAL LETTER KA + 0x008b: 0x041b, # CYRILLIC CAPITAL LETTER EL + 0x008c: 0x041c, # CYRILLIC CAPITAL LETTER EM + 0x008d: 0x041d, # CYRILLIC CAPITAL LETTER EN + 0x008e: 0x041e, # CYRILLIC CAPITAL LETTER O + 0x008f: 0x041f, # CYRILLIC CAPITAL LETTER PE + 0x0090: 0x0420, # CYRILLIC CAPITAL LETTER ER + 0x0091: 0x0421, # CYRILLIC CAPITAL LETTER ES + 0x0092: 0x0422, # CYRILLIC CAPITAL LETTER TE + 0x0093: 0x0423, # CYRILLIC CAPITAL LETTER U + 0x0094: 0x0424, # CYRILLIC CAPITAL LETTER EF + 0x0095: 0x0425, # CYRILLIC CAPITAL LETTER HA + 0x0096: 0x0426, # CYRILLIC CAPITAL LETTER TSE + 0x0097: 0x0427, # CYRILLIC CAPITAL LETTER CHE + 0x0098: 0x0428, # CYRILLIC CAPITAL LETTER SHA + 0x0099: 0x0429, # CYRILLIC CAPITAL LETTER SHCHA + 0x009a: 0x042a, # CYRILLIC CAPITAL LETTER HARD SIGN + 0x009b: 0x042b, # CYRILLIC CAPITAL LETTER YERU + 0x009c: 0x042c, # CYRILLIC CAPITAL LETTER SOFT SIGN + 0x009d: 0x042d, # CYRILLIC CAPITAL LETTER E + 0x009e: 0x042e, # CYRILLIC CAPITAL LETTER YU + 0x009f: 0x042f, # CYRILLIC CAPITAL LETTER YA + 0x00a0: 0x0430, # CYRILLIC SMALL LETTER A + 0x00a1: 0x0431, # CYRILLIC SMALL LETTER BE + 0x00a2: 0x0432, # CYRILLIC SMALL LETTER VE + 0x00a3: 0x0433, # CYRILLIC SMALL LETTER GHE + 0x00a4: 0x0434, # CYRILLIC SMALL LETTER DE + 0x00a5: 0x0435, # CYRILLIC SMALL LETTER IE + 0x00a6: 0x0436, # CYRILLIC SMALL LETTER ZHE + 0x00a7: 0x0437, # CYRILLIC SMALL LETTER ZE + 0x00a8: 0x0438, # CYRILLIC SMALL LETTER I + 0x00a9: 0x0439, # CYRILLIC SMALL LETTER SHORT I + 0x00aa: 0x043a, # CYRILLIC SMALL LETTER KA + 0x00ab: 0x043b, # CYRILLIC SMALL LETTER EL + 0x00ac: 0x043c, # CYRILLIC SMALL LETTER EM + 0x00ad: 0x043d, # CYRILLIC SMALL LETTER EN + 0x00ae: 0x043e, # CYRILLIC SMALL LETTER O + 0x00af: 0x043f, # CYRILLIC SMALL LETTER PE + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x0440, # CYRILLIC SMALL LETTER ER + 0x00e1: 0x0441, # CYRILLIC SMALL LETTER ES + 0x00e2: 0x0442, # CYRILLIC SMALL LETTER TE + 0x00e3: 0x0443, # CYRILLIC SMALL LETTER U + 0x00e4: 0x0444, # CYRILLIC SMALL LETTER EF + 0x00e5: 0x0445, # CYRILLIC SMALL LETTER HA + 0x00e6: 0x0446, # CYRILLIC SMALL LETTER TSE + 0x00e7: 0x0447, # CYRILLIC SMALL LETTER CHE + 0x00e8: 0x0448, # CYRILLIC SMALL LETTER SHA + 0x00e9: 0x0449, # CYRILLIC SMALL LETTER SHCHA + 0x00ea: 0x044a, # CYRILLIC SMALL LETTER HARD SIGN + 0x00eb: 0x044b, # CYRILLIC SMALL LETTER YERU + 0x00ec: 0x044c, # CYRILLIC SMALL LETTER SOFT SIGN + 0x00ed: 0x044d, # CYRILLIC SMALL LETTER E + 0x00ee: 0x044e, # CYRILLIC SMALL LETTER YU + 0x00ef: 0x044f, # CYRILLIC SMALL LETTER YA + 0x00f0: 0x0401, # CYRILLIC CAPITAL LETTER IO + 0x00f1: 0x0451, # CYRILLIC SMALL LETTER IO + 0x00f2: 0x0404, # CYRILLIC CAPITAL LETTER UKRAINIAN IE + 0x00f3: 0x0454, # CYRILLIC SMALL LETTER UKRAINIAN IE + 0x00f4: 0x0407, # CYRILLIC CAPITAL LETTER YI + 0x00f5: 0x0457, # CYRILLIC SMALL LETTER YI + 0x00f6: 0x040e, # CYRILLIC CAPITAL LETTER SHORT U + 0x00f7: 0x045e, # CYRILLIC SMALL LETTER SHORT U + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x2116, # NUMERO SIGN + 0x00fd: 0x00a4, # CURRENCY SIGN + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\u0410' # 0x0080 -> CYRILLIC CAPITAL LETTER A + '\u0411' # 0x0081 -> CYRILLIC CAPITAL LETTER BE + '\u0412' # 0x0082 -> CYRILLIC CAPITAL LETTER VE + '\u0413' # 0x0083 -> CYRILLIC CAPITAL LETTER GHE + '\u0414' # 0x0084 -> CYRILLIC CAPITAL LETTER DE + '\u0415' # 0x0085 -> CYRILLIC CAPITAL LETTER IE + '\u0416' # 0x0086 -> CYRILLIC CAPITAL LETTER ZHE + '\u0417' # 0x0087 -> CYRILLIC CAPITAL LETTER ZE + '\u0418' # 0x0088 -> CYRILLIC CAPITAL LETTER I + '\u0419' # 0x0089 -> CYRILLIC CAPITAL LETTER SHORT I + '\u041a' # 0x008a -> CYRILLIC CAPITAL LETTER KA + '\u041b' # 0x008b -> CYRILLIC CAPITAL LETTER EL + '\u041c' # 0x008c -> CYRILLIC CAPITAL LETTER EM + '\u041d' # 0x008d -> CYRILLIC CAPITAL LETTER EN + '\u041e' # 0x008e -> CYRILLIC CAPITAL LETTER O + '\u041f' # 0x008f -> CYRILLIC CAPITAL LETTER PE + '\u0420' # 0x0090 -> CYRILLIC CAPITAL LETTER ER + '\u0421' # 0x0091 -> CYRILLIC CAPITAL LETTER ES + '\u0422' # 0x0092 -> CYRILLIC CAPITAL LETTER TE + '\u0423' # 0x0093 -> CYRILLIC CAPITAL LETTER U + '\u0424' # 0x0094 -> CYRILLIC CAPITAL LETTER EF + '\u0425' # 0x0095 -> CYRILLIC CAPITAL LETTER HA + '\u0426' # 0x0096 -> CYRILLIC CAPITAL LETTER TSE + '\u0427' # 0x0097 -> CYRILLIC CAPITAL LETTER CHE + '\u0428' # 0x0098 -> CYRILLIC CAPITAL LETTER SHA + '\u0429' # 0x0099 -> CYRILLIC CAPITAL LETTER SHCHA + '\u042a' # 0x009a -> CYRILLIC CAPITAL LETTER HARD SIGN + '\u042b' # 0x009b -> CYRILLIC CAPITAL LETTER YERU + '\u042c' # 0x009c -> CYRILLIC CAPITAL LETTER SOFT SIGN + '\u042d' # 0x009d -> CYRILLIC CAPITAL LETTER E + '\u042e' # 0x009e -> CYRILLIC CAPITAL LETTER YU + '\u042f' # 0x009f -> CYRILLIC CAPITAL LETTER YA + '\u0430' # 0x00a0 -> CYRILLIC SMALL LETTER A + '\u0431' # 0x00a1 -> CYRILLIC SMALL LETTER BE + '\u0432' # 0x00a2 -> CYRILLIC SMALL LETTER VE + '\u0433' # 0x00a3 -> CYRILLIC SMALL LETTER GHE + '\u0434' # 0x00a4 -> CYRILLIC SMALL LETTER DE + '\u0435' # 0x00a5 -> CYRILLIC SMALL LETTER IE + '\u0436' # 0x00a6 -> CYRILLIC SMALL LETTER ZHE + '\u0437' # 0x00a7 -> CYRILLIC SMALL LETTER ZE + '\u0438' # 0x00a8 -> CYRILLIC SMALL LETTER I + '\u0439' # 0x00a9 -> CYRILLIC SMALL LETTER SHORT I + '\u043a' # 0x00aa -> CYRILLIC SMALL LETTER KA + '\u043b' # 0x00ab -> CYRILLIC SMALL LETTER EL + '\u043c' # 0x00ac -> CYRILLIC SMALL LETTER EM + '\u043d' # 0x00ad -> CYRILLIC SMALL LETTER EN + '\u043e' # 0x00ae -> CYRILLIC SMALL LETTER O + '\u043f' # 0x00af -> CYRILLIC SMALL LETTER PE + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\u258c' # 0x00dd -> LEFT HALF BLOCK + '\u2590' # 0x00de -> RIGHT HALF BLOCK + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\u0440' # 0x00e0 -> CYRILLIC SMALL LETTER ER + '\u0441' # 0x00e1 -> CYRILLIC SMALL LETTER ES + '\u0442' # 0x00e2 -> CYRILLIC SMALL LETTER TE + '\u0443' # 0x00e3 -> CYRILLIC SMALL LETTER U + '\u0444' # 0x00e4 -> CYRILLIC SMALL LETTER EF + '\u0445' # 0x00e5 -> CYRILLIC SMALL LETTER HA + '\u0446' # 0x00e6 -> CYRILLIC SMALL LETTER TSE + '\u0447' # 0x00e7 -> CYRILLIC SMALL LETTER CHE + '\u0448' # 0x00e8 -> CYRILLIC SMALL LETTER SHA + '\u0449' # 0x00e9 -> CYRILLIC SMALL LETTER SHCHA + '\u044a' # 0x00ea -> CYRILLIC SMALL LETTER HARD SIGN + '\u044b' # 0x00eb -> CYRILLIC SMALL LETTER YERU + '\u044c' # 0x00ec -> CYRILLIC SMALL LETTER SOFT SIGN + '\u044d' # 0x00ed -> CYRILLIC SMALL LETTER E + '\u044e' # 0x00ee -> CYRILLIC SMALL LETTER YU + '\u044f' # 0x00ef -> CYRILLIC SMALL LETTER YA + '\u0401' # 0x00f0 -> CYRILLIC CAPITAL LETTER IO + '\u0451' # 0x00f1 -> CYRILLIC SMALL LETTER IO + '\u0404' # 0x00f2 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE + '\u0454' # 0x00f3 -> CYRILLIC SMALL LETTER UKRAINIAN IE + '\u0407' # 0x00f4 -> CYRILLIC CAPITAL LETTER YI + '\u0457' # 0x00f5 -> CYRILLIC SMALL LETTER YI + '\u040e' # 0x00f6 -> CYRILLIC CAPITAL LETTER SHORT U + '\u045e' # 0x00f7 -> CYRILLIC SMALL LETTER SHORT U + '\xb0' # 0x00f8 -> DEGREE SIGN + '\u2219' # 0x00f9 -> BULLET OPERATOR + '\xb7' # 0x00fa -> MIDDLE DOT + '\u221a' # 0x00fb -> SQUARE ROOT + '\u2116' # 0x00fc -> NUMERO SIGN + '\xa4' # 0x00fd -> CURRENCY SIGN + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a4: 0x00fd, # CURRENCY SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x0401: 0x00f0, # CYRILLIC CAPITAL LETTER IO + 0x0404: 0x00f2, # CYRILLIC CAPITAL LETTER UKRAINIAN IE + 0x0407: 0x00f4, # CYRILLIC CAPITAL LETTER YI + 0x040e: 0x00f6, # CYRILLIC CAPITAL LETTER SHORT U + 0x0410: 0x0080, # CYRILLIC CAPITAL LETTER A + 0x0411: 0x0081, # CYRILLIC CAPITAL LETTER BE + 0x0412: 0x0082, # CYRILLIC CAPITAL LETTER VE + 0x0413: 0x0083, # CYRILLIC CAPITAL LETTER GHE + 0x0414: 0x0084, # CYRILLIC CAPITAL LETTER DE + 0x0415: 0x0085, # CYRILLIC CAPITAL LETTER IE + 0x0416: 0x0086, # CYRILLIC CAPITAL LETTER ZHE + 0x0417: 0x0087, # CYRILLIC CAPITAL LETTER ZE + 0x0418: 0x0088, # CYRILLIC CAPITAL LETTER I + 0x0419: 0x0089, # CYRILLIC CAPITAL LETTER SHORT I + 0x041a: 0x008a, # CYRILLIC CAPITAL LETTER KA + 0x041b: 0x008b, # CYRILLIC CAPITAL LETTER EL + 0x041c: 0x008c, # CYRILLIC CAPITAL LETTER EM + 0x041d: 0x008d, # CYRILLIC CAPITAL LETTER EN + 0x041e: 0x008e, # CYRILLIC CAPITAL LETTER O + 0x041f: 0x008f, # CYRILLIC CAPITAL LETTER PE + 0x0420: 0x0090, # CYRILLIC CAPITAL LETTER ER + 0x0421: 0x0091, # CYRILLIC CAPITAL LETTER ES + 0x0422: 0x0092, # CYRILLIC CAPITAL LETTER TE + 0x0423: 0x0093, # CYRILLIC CAPITAL LETTER U + 0x0424: 0x0094, # CYRILLIC CAPITAL LETTER EF + 0x0425: 0x0095, # CYRILLIC CAPITAL LETTER HA + 0x0426: 0x0096, # CYRILLIC CAPITAL LETTER TSE + 0x0427: 0x0097, # CYRILLIC CAPITAL LETTER CHE + 0x0428: 0x0098, # CYRILLIC CAPITAL LETTER SHA + 0x0429: 0x0099, # CYRILLIC CAPITAL LETTER SHCHA + 0x042a: 0x009a, # CYRILLIC CAPITAL LETTER HARD SIGN + 0x042b: 0x009b, # CYRILLIC CAPITAL LETTER YERU + 0x042c: 0x009c, # CYRILLIC CAPITAL LETTER SOFT SIGN + 0x042d: 0x009d, # CYRILLIC CAPITAL LETTER E + 0x042e: 0x009e, # CYRILLIC CAPITAL LETTER YU + 0x042f: 0x009f, # CYRILLIC CAPITAL LETTER YA + 0x0430: 0x00a0, # CYRILLIC SMALL LETTER A + 0x0431: 0x00a1, # CYRILLIC SMALL LETTER BE + 0x0432: 0x00a2, # CYRILLIC SMALL LETTER VE + 0x0433: 0x00a3, # CYRILLIC SMALL LETTER GHE + 0x0434: 0x00a4, # CYRILLIC SMALL LETTER DE + 0x0435: 0x00a5, # CYRILLIC SMALL LETTER IE + 0x0436: 0x00a6, # CYRILLIC SMALL LETTER ZHE + 0x0437: 0x00a7, # CYRILLIC SMALL LETTER ZE + 0x0438: 0x00a8, # CYRILLIC SMALL LETTER I + 0x0439: 0x00a9, # CYRILLIC SMALL LETTER SHORT I + 0x043a: 0x00aa, # CYRILLIC SMALL LETTER KA + 0x043b: 0x00ab, # CYRILLIC SMALL LETTER EL + 0x043c: 0x00ac, # CYRILLIC SMALL LETTER EM + 0x043d: 0x00ad, # CYRILLIC SMALL LETTER EN + 0x043e: 0x00ae, # CYRILLIC SMALL LETTER O + 0x043f: 0x00af, # CYRILLIC SMALL LETTER PE + 0x0440: 0x00e0, # CYRILLIC SMALL LETTER ER + 0x0441: 0x00e1, # CYRILLIC SMALL LETTER ES + 0x0442: 0x00e2, # CYRILLIC SMALL LETTER TE + 0x0443: 0x00e3, # CYRILLIC SMALL LETTER U + 0x0444: 0x00e4, # CYRILLIC SMALL LETTER EF + 0x0445: 0x00e5, # CYRILLIC SMALL LETTER HA + 0x0446: 0x00e6, # CYRILLIC SMALL LETTER TSE + 0x0447: 0x00e7, # CYRILLIC SMALL LETTER CHE + 0x0448: 0x00e8, # CYRILLIC SMALL LETTER SHA + 0x0449: 0x00e9, # CYRILLIC SMALL LETTER SHCHA + 0x044a: 0x00ea, # CYRILLIC SMALL LETTER HARD SIGN + 0x044b: 0x00eb, # CYRILLIC SMALL LETTER YERU + 0x044c: 0x00ec, # CYRILLIC SMALL LETTER SOFT SIGN + 0x044d: 0x00ed, # CYRILLIC SMALL LETTER E + 0x044e: 0x00ee, # CYRILLIC SMALL LETTER YU + 0x044f: 0x00ef, # CYRILLIC SMALL LETTER YA + 0x0451: 0x00f1, # CYRILLIC SMALL LETTER IO + 0x0454: 0x00f3, # CYRILLIC SMALL LETTER UKRAINIAN IE + 0x0457: 0x00f5, # CYRILLIC SMALL LETTER YI + 0x045e: 0x00f7, # CYRILLIC SMALL LETTER SHORT U + 0x2116: 0x00fc, # NUMERO SIGN + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp869.py b/my_env/Lib/encodings/cp869.py new file mode 100644 index 000000000..8d8a29b17 --- /dev/null +++ b/my_env/Lib/encodings/cp869.py @@ -0,0 +1,689 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP869.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp869', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: None, # UNDEFINED + 0x0081: None, # UNDEFINED + 0x0082: None, # UNDEFINED + 0x0083: None, # UNDEFINED + 0x0084: None, # UNDEFINED + 0x0085: None, # UNDEFINED + 0x0086: 0x0386, # GREEK CAPITAL LETTER ALPHA WITH TONOS + 0x0087: None, # UNDEFINED + 0x0088: 0x00b7, # MIDDLE DOT + 0x0089: 0x00ac, # NOT SIGN + 0x008a: 0x00a6, # BROKEN BAR + 0x008b: 0x2018, # LEFT SINGLE QUOTATION MARK + 0x008c: 0x2019, # RIGHT SINGLE QUOTATION MARK + 0x008d: 0x0388, # GREEK CAPITAL LETTER EPSILON WITH TONOS + 0x008e: 0x2015, # HORIZONTAL BAR + 0x008f: 0x0389, # GREEK CAPITAL LETTER ETA WITH TONOS + 0x0090: 0x038a, # GREEK CAPITAL LETTER IOTA WITH TONOS + 0x0091: 0x03aa, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + 0x0092: 0x038c, # GREEK CAPITAL LETTER OMICRON WITH TONOS + 0x0093: None, # UNDEFINED + 0x0094: None, # UNDEFINED + 0x0095: 0x038e, # GREEK CAPITAL LETTER UPSILON WITH TONOS + 0x0096: 0x03ab, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + 0x0097: 0x00a9, # COPYRIGHT SIGN + 0x0098: 0x038f, # GREEK CAPITAL LETTER OMEGA WITH TONOS + 0x0099: 0x00b2, # SUPERSCRIPT TWO + 0x009a: 0x00b3, # SUPERSCRIPT THREE + 0x009b: 0x03ac, # GREEK SMALL LETTER ALPHA WITH TONOS + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x03ad, # GREEK SMALL LETTER EPSILON WITH TONOS + 0x009e: 0x03ae, # GREEK SMALL LETTER ETA WITH TONOS + 0x009f: 0x03af, # GREEK SMALL LETTER IOTA WITH TONOS + 0x00a0: 0x03ca, # GREEK SMALL LETTER IOTA WITH DIALYTIKA + 0x00a1: 0x0390, # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + 0x00a2: 0x03cc, # GREEK SMALL LETTER OMICRON WITH TONOS + 0x00a3: 0x03cd, # GREEK SMALL LETTER UPSILON WITH TONOS + 0x00a4: 0x0391, # GREEK CAPITAL LETTER ALPHA + 0x00a5: 0x0392, # GREEK CAPITAL LETTER BETA + 0x00a6: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00a7: 0x0394, # GREEK CAPITAL LETTER DELTA + 0x00a8: 0x0395, # GREEK CAPITAL LETTER EPSILON + 0x00a9: 0x0396, # GREEK CAPITAL LETTER ZETA + 0x00aa: 0x0397, # GREEK CAPITAL LETTER ETA + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ad: 0x0399, # GREEK CAPITAL LETTER IOTA + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x039a, # GREEK CAPITAL LETTER KAPPA + 0x00b6: 0x039b, # GREEK CAPITAL LETTER LAMDA + 0x00b7: 0x039c, # GREEK CAPITAL LETTER MU + 0x00b8: 0x039d, # GREEK CAPITAL LETTER NU + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x039e, # GREEK CAPITAL LETTER XI + 0x00be: 0x039f, # GREEK CAPITAL LETTER OMICRON + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x03a0, # GREEK CAPITAL LETTER PI + 0x00c7: 0x03a1, # GREEK CAPITAL LETTER RHO + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00d0: 0x03a4, # GREEK CAPITAL LETTER TAU + 0x00d1: 0x03a5, # GREEK CAPITAL LETTER UPSILON + 0x00d2: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00d3: 0x03a7, # GREEK CAPITAL LETTER CHI + 0x00d4: 0x03a8, # GREEK CAPITAL LETTER PSI + 0x00d5: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00d6: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00d7: 0x03b2, # GREEK SMALL LETTER BETA + 0x00d8: 0x03b3, # GREEK SMALL LETTER GAMMA + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00de: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b6, # GREEK SMALL LETTER ZETA + 0x00e1: 0x03b7, # GREEK SMALL LETTER ETA + 0x00e2: 0x03b8, # GREEK SMALL LETTER THETA + 0x00e3: 0x03b9, # GREEK SMALL LETTER IOTA + 0x00e4: 0x03ba, # GREEK SMALL LETTER KAPPA + 0x00e5: 0x03bb, # GREEK SMALL LETTER LAMDA + 0x00e6: 0x03bc, # GREEK SMALL LETTER MU + 0x00e7: 0x03bd, # GREEK SMALL LETTER NU + 0x00e8: 0x03be, # GREEK SMALL LETTER XI + 0x00e9: 0x03bf, # GREEK SMALL LETTER OMICRON + 0x00ea: 0x03c0, # GREEK SMALL LETTER PI + 0x00eb: 0x03c1, # GREEK SMALL LETTER RHO + 0x00ec: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00ed: 0x03c2, # GREEK SMALL LETTER FINAL SIGMA + 0x00ee: 0x03c4, # GREEK SMALL LETTER TAU + 0x00ef: 0x0384, # GREEK TONOS + 0x00f0: 0x00ad, # SOFT HYPHEN + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x03c5, # GREEK SMALL LETTER UPSILON + 0x00f3: 0x03c6, # GREEK SMALL LETTER PHI + 0x00f4: 0x03c7, # GREEK SMALL LETTER CHI + 0x00f5: 0x00a7, # SECTION SIGN + 0x00f6: 0x03c8, # GREEK SMALL LETTER PSI + 0x00f7: 0x0385, # GREEK DIALYTIKA TONOS + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x00a8, # DIAERESIS + 0x00fa: 0x03c9, # GREEK SMALL LETTER OMEGA + 0x00fb: 0x03cb, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA + 0x00fc: 0x03b0, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + 0x00fd: 0x03ce, # GREEK SMALL LETTER OMEGA WITH TONOS + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> NULL + '\x01' # 0x0001 -> START OF HEADING + '\x02' # 0x0002 -> START OF TEXT + '\x03' # 0x0003 -> END OF TEXT + '\x04' # 0x0004 -> END OF TRANSMISSION + '\x05' # 0x0005 -> ENQUIRY + '\x06' # 0x0006 -> ACKNOWLEDGE + '\x07' # 0x0007 -> BELL + '\x08' # 0x0008 -> BACKSPACE + '\t' # 0x0009 -> HORIZONTAL TABULATION + '\n' # 0x000a -> LINE FEED + '\x0b' # 0x000b -> VERTICAL TABULATION + '\x0c' # 0x000c -> FORM FEED + '\r' # 0x000d -> CARRIAGE RETURN + '\x0e' # 0x000e -> SHIFT OUT + '\x0f' # 0x000f -> SHIFT IN + '\x10' # 0x0010 -> DATA LINK ESCAPE + '\x11' # 0x0011 -> DEVICE CONTROL ONE + '\x12' # 0x0012 -> DEVICE CONTROL TWO + '\x13' # 0x0013 -> DEVICE CONTROL THREE + '\x14' # 0x0014 -> DEVICE CONTROL FOUR + '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x0016 -> SYNCHRONOUS IDLE + '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + '\x18' # 0x0018 -> CANCEL + '\x19' # 0x0019 -> END OF MEDIUM + '\x1a' # 0x001a -> SUBSTITUTE + '\x1b' # 0x001b -> ESCAPE + '\x1c' # 0x001c -> FILE SEPARATOR + '\x1d' # 0x001d -> GROUP SEPARATOR + '\x1e' # 0x001e -> RECORD SEPARATOR + '\x1f' # 0x001f -> UNIT SEPARATOR + ' ' # 0x0020 -> SPACE + '!' # 0x0021 -> EXCLAMATION MARK + '"' # 0x0022 -> QUOTATION MARK + '#' # 0x0023 -> NUMBER SIGN + '$' # 0x0024 -> DOLLAR SIGN + '%' # 0x0025 -> PERCENT SIGN + '&' # 0x0026 -> AMPERSAND + "'" # 0x0027 -> APOSTROPHE + '(' # 0x0028 -> LEFT PARENTHESIS + ')' # 0x0029 -> RIGHT PARENTHESIS + '*' # 0x002a -> ASTERISK + '+' # 0x002b -> PLUS SIGN + ',' # 0x002c -> COMMA + '-' # 0x002d -> HYPHEN-MINUS + '.' # 0x002e -> FULL STOP + '/' # 0x002f -> SOLIDUS + '0' # 0x0030 -> DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE + '2' # 0x0032 -> DIGIT TWO + '3' # 0x0033 -> DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE + ':' # 0x003a -> COLON + ';' # 0x003b -> SEMICOLON + '<' # 0x003c -> LESS-THAN SIGN + '=' # 0x003d -> EQUALS SIGN + '>' # 0x003e -> GREATER-THAN SIGN + '?' # 0x003f -> QUESTION MARK + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET + '\\' # 0x005c -> REVERSE SOLIDUS + ']' # 0x005d -> RIGHT SQUARE BRACKET + '^' # 0x005e -> CIRCUMFLEX ACCENT + '_' # 0x005f -> LOW LINE + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET + '|' # 0x007c -> VERTICAL LINE + '}' # 0x007d -> RIGHT CURLY BRACKET + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> DELETE + '\ufffe' # 0x0080 -> UNDEFINED + '\ufffe' # 0x0081 -> UNDEFINED + '\ufffe' # 0x0082 -> UNDEFINED + '\ufffe' # 0x0083 -> UNDEFINED + '\ufffe' # 0x0084 -> UNDEFINED + '\ufffe' # 0x0085 -> UNDEFINED + '\u0386' # 0x0086 -> GREEK CAPITAL LETTER ALPHA WITH TONOS + '\ufffe' # 0x0087 -> UNDEFINED + '\xb7' # 0x0088 -> MIDDLE DOT + '\xac' # 0x0089 -> NOT SIGN + '\xa6' # 0x008a -> BROKEN BAR + '\u2018' # 0x008b -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x008c -> RIGHT SINGLE QUOTATION MARK + '\u0388' # 0x008d -> GREEK CAPITAL LETTER EPSILON WITH TONOS + '\u2015' # 0x008e -> HORIZONTAL BAR + '\u0389' # 0x008f -> GREEK CAPITAL LETTER ETA WITH TONOS + '\u038a' # 0x0090 -> GREEK CAPITAL LETTER IOTA WITH TONOS + '\u03aa' # 0x0091 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + '\u038c' # 0x0092 -> GREEK CAPITAL LETTER OMICRON WITH TONOS + '\ufffe' # 0x0093 -> UNDEFINED + '\ufffe' # 0x0094 -> UNDEFINED + '\u038e' # 0x0095 -> GREEK CAPITAL LETTER UPSILON WITH TONOS + '\u03ab' # 0x0096 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + '\xa9' # 0x0097 -> COPYRIGHT SIGN + '\u038f' # 0x0098 -> GREEK CAPITAL LETTER OMEGA WITH TONOS + '\xb2' # 0x0099 -> SUPERSCRIPT TWO + '\xb3' # 0x009a -> SUPERSCRIPT THREE + '\u03ac' # 0x009b -> GREEK SMALL LETTER ALPHA WITH TONOS + '\xa3' # 0x009c -> POUND SIGN + '\u03ad' # 0x009d -> GREEK SMALL LETTER EPSILON WITH TONOS + '\u03ae' # 0x009e -> GREEK SMALL LETTER ETA WITH TONOS + '\u03af' # 0x009f -> GREEK SMALL LETTER IOTA WITH TONOS + '\u03ca' # 0x00a0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA + '\u0390' # 0x00a1 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + '\u03cc' # 0x00a2 -> GREEK SMALL LETTER OMICRON WITH TONOS + '\u03cd' # 0x00a3 -> GREEK SMALL LETTER UPSILON WITH TONOS + '\u0391' # 0x00a4 -> GREEK CAPITAL LETTER ALPHA + '\u0392' # 0x00a5 -> GREEK CAPITAL LETTER BETA + '\u0393' # 0x00a6 -> GREEK CAPITAL LETTER GAMMA + '\u0394' # 0x00a7 -> GREEK CAPITAL LETTER DELTA + '\u0395' # 0x00a8 -> GREEK CAPITAL LETTER EPSILON + '\u0396' # 0x00a9 -> GREEK CAPITAL LETTER ZETA + '\u0397' # 0x00aa -> GREEK CAPITAL LETTER ETA + '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + '\u0398' # 0x00ac -> GREEK CAPITAL LETTER THETA + '\u0399' # 0x00ad -> GREEK CAPITAL LETTER IOTA + '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0x00b0 -> LIGHT SHADE + '\u2592' # 0x00b1 -> MEDIUM SHADE + '\u2593' # 0x00b2 -> DARK SHADE + '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u039a' # 0x00b5 -> GREEK CAPITAL LETTER KAPPA + '\u039b' # 0x00b6 -> GREEK CAPITAL LETTER LAMDA + '\u039c' # 0x00b7 -> GREEK CAPITAL LETTER MU + '\u039d' # 0x00b8 -> GREEK CAPITAL LETTER NU + '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u039e' # 0x00bd -> GREEK CAPITAL LETTER XI + '\u039f' # 0x00be -> GREEK CAPITAL LETTER OMICRON + '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u03a0' # 0x00c6 -> GREEK CAPITAL LETTER PI + '\u03a1' # 0x00c7 -> GREEK CAPITAL LETTER RHO + '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\u03a3' # 0x00cf -> GREEK CAPITAL LETTER SIGMA + '\u03a4' # 0x00d0 -> GREEK CAPITAL LETTER TAU + '\u03a5' # 0x00d1 -> GREEK CAPITAL LETTER UPSILON + '\u03a6' # 0x00d2 -> GREEK CAPITAL LETTER PHI + '\u03a7' # 0x00d3 -> GREEK CAPITAL LETTER CHI + '\u03a8' # 0x00d4 -> GREEK CAPITAL LETTER PSI + '\u03a9' # 0x00d5 -> GREEK CAPITAL LETTER OMEGA + '\u03b1' # 0x00d6 -> GREEK SMALL LETTER ALPHA + '\u03b2' # 0x00d7 -> GREEK SMALL LETTER BETA + '\u03b3' # 0x00d8 -> GREEK SMALL LETTER GAMMA + '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0x00db -> FULL BLOCK + '\u2584' # 0x00dc -> LOWER HALF BLOCK + '\u03b4' # 0x00dd -> GREEK SMALL LETTER DELTA + '\u03b5' # 0x00de -> GREEK SMALL LETTER EPSILON + '\u2580' # 0x00df -> UPPER HALF BLOCK + '\u03b6' # 0x00e0 -> GREEK SMALL LETTER ZETA + '\u03b7' # 0x00e1 -> GREEK SMALL LETTER ETA + '\u03b8' # 0x00e2 -> GREEK SMALL LETTER THETA + '\u03b9' # 0x00e3 -> GREEK SMALL LETTER IOTA + '\u03ba' # 0x00e4 -> GREEK SMALL LETTER KAPPA + '\u03bb' # 0x00e5 -> GREEK SMALL LETTER LAMDA + '\u03bc' # 0x00e6 -> GREEK SMALL LETTER MU + '\u03bd' # 0x00e7 -> GREEK SMALL LETTER NU + '\u03be' # 0x00e8 -> GREEK SMALL LETTER XI + '\u03bf' # 0x00e9 -> GREEK SMALL LETTER OMICRON + '\u03c0' # 0x00ea -> GREEK SMALL LETTER PI + '\u03c1' # 0x00eb -> GREEK SMALL LETTER RHO + '\u03c3' # 0x00ec -> GREEK SMALL LETTER SIGMA + '\u03c2' # 0x00ed -> GREEK SMALL LETTER FINAL SIGMA + '\u03c4' # 0x00ee -> GREEK SMALL LETTER TAU + '\u0384' # 0x00ef -> GREEK TONOS + '\xad' # 0x00f0 -> SOFT HYPHEN + '\xb1' # 0x00f1 -> PLUS-MINUS SIGN + '\u03c5' # 0x00f2 -> GREEK SMALL LETTER UPSILON + '\u03c6' # 0x00f3 -> GREEK SMALL LETTER PHI + '\u03c7' # 0x00f4 -> GREEK SMALL LETTER CHI + '\xa7' # 0x00f5 -> SECTION SIGN + '\u03c8' # 0x00f6 -> GREEK SMALL LETTER PSI + '\u0385' # 0x00f7 -> GREEK DIALYTIKA TONOS + '\xb0' # 0x00f8 -> DEGREE SIGN + '\xa8' # 0x00f9 -> DIAERESIS + '\u03c9' # 0x00fa -> GREEK SMALL LETTER OMEGA + '\u03cb' # 0x00fb -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA + '\u03b0' # 0x00fc -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + '\u03ce' # 0x00fd -> GREEK SMALL LETTER OMEGA WITH TONOS + '\u25a0' # 0x00fe -> BLACK SQUARE + '\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a3: 0x009c, # POUND SIGN + 0x00a6: 0x008a, # BROKEN BAR + 0x00a7: 0x00f5, # SECTION SIGN + 0x00a8: 0x00f9, # DIAERESIS + 0x00a9: 0x0097, # COPYRIGHT SIGN + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x0089, # NOT SIGN + 0x00ad: 0x00f0, # SOFT HYPHEN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x0099, # SUPERSCRIPT TWO + 0x00b3: 0x009a, # SUPERSCRIPT THREE + 0x00b7: 0x0088, # MIDDLE DOT + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x0384: 0x00ef, # GREEK TONOS + 0x0385: 0x00f7, # GREEK DIALYTIKA TONOS + 0x0386: 0x0086, # GREEK CAPITAL LETTER ALPHA WITH TONOS + 0x0388: 0x008d, # GREEK CAPITAL LETTER EPSILON WITH TONOS + 0x0389: 0x008f, # GREEK CAPITAL LETTER ETA WITH TONOS + 0x038a: 0x0090, # GREEK CAPITAL LETTER IOTA WITH TONOS + 0x038c: 0x0092, # GREEK CAPITAL LETTER OMICRON WITH TONOS + 0x038e: 0x0095, # GREEK CAPITAL LETTER UPSILON WITH TONOS + 0x038f: 0x0098, # GREEK CAPITAL LETTER OMEGA WITH TONOS + 0x0390: 0x00a1, # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + 0x0391: 0x00a4, # GREEK CAPITAL LETTER ALPHA + 0x0392: 0x00a5, # GREEK CAPITAL LETTER BETA + 0x0393: 0x00a6, # GREEK CAPITAL LETTER GAMMA + 0x0394: 0x00a7, # GREEK CAPITAL LETTER DELTA + 0x0395: 0x00a8, # GREEK CAPITAL LETTER EPSILON + 0x0396: 0x00a9, # GREEK CAPITAL LETTER ZETA + 0x0397: 0x00aa, # GREEK CAPITAL LETTER ETA + 0x0398: 0x00ac, # GREEK CAPITAL LETTER THETA + 0x0399: 0x00ad, # GREEK CAPITAL LETTER IOTA + 0x039a: 0x00b5, # GREEK CAPITAL LETTER KAPPA + 0x039b: 0x00b6, # GREEK CAPITAL LETTER LAMDA + 0x039c: 0x00b7, # GREEK CAPITAL LETTER MU + 0x039d: 0x00b8, # GREEK CAPITAL LETTER NU + 0x039e: 0x00bd, # GREEK CAPITAL LETTER XI + 0x039f: 0x00be, # GREEK CAPITAL LETTER OMICRON + 0x03a0: 0x00c6, # GREEK CAPITAL LETTER PI + 0x03a1: 0x00c7, # GREEK CAPITAL LETTER RHO + 0x03a3: 0x00cf, # GREEK CAPITAL LETTER SIGMA + 0x03a4: 0x00d0, # GREEK CAPITAL LETTER TAU + 0x03a5: 0x00d1, # GREEK CAPITAL LETTER UPSILON + 0x03a6: 0x00d2, # GREEK CAPITAL LETTER PHI + 0x03a7: 0x00d3, # GREEK CAPITAL LETTER CHI + 0x03a8: 0x00d4, # GREEK CAPITAL LETTER PSI + 0x03a9: 0x00d5, # GREEK CAPITAL LETTER OMEGA + 0x03aa: 0x0091, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + 0x03ab: 0x0096, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + 0x03ac: 0x009b, # GREEK SMALL LETTER ALPHA WITH TONOS + 0x03ad: 0x009d, # GREEK SMALL LETTER EPSILON WITH TONOS + 0x03ae: 0x009e, # GREEK SMALL LETTER ETA WITH TONOS + 0x03af: 0x009f, # GREEK SMALL LETTER IOTA WITH TONOS + 0x03b0: 0x00fc, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + 0x03b1: 0x00d6, # GREEK SMALL LETTER ALPHA + 0x03b2: 0x00d7, # GREEK SMALL LETTER BETA + 0x03b3: 0x00d8, # GREEK SMALL LETTER GAMMA + 0x03b4: 0x00dd, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00de, # GREEK SMALL LETTER EPSILON + 0x03b6: 0x00e0, # GREEK SMALL LETTER ZETA + 0x03b7: 0x00e1, # GREEK SMALL LETTER ETA + 0x03b8: 0x00e2, # GREEK SMALL LETTER THETA + 0x03b9: 0x00e3, # GREEK SMALL LETTER IOTA + 0x03ba: 0x00e4, # GREEK SMALL LETTER KAPPA + 0x03bb: 0x00e5, # GREEK SMALL LETTER LAMDA + 0x03bc: 0x00e6, # GREEK SMALL LETTER MU + 0x03bd: 0x00e7, # GREEK SMALL LETTER NU + 0x03be: 0x00e8, # GREEK SMALL LETTER XI + 0x03bf: 0x00e9, # GREEK SMALL LETTER OMICRON + 0x03c0: 0x00ea, # GREEK SMALL LETTER PI + 0x03c1: 0x00eb, # GREEK SMALL LETTER RHO + 0x03c2: 0x00ed, # GREEK SMALL LETTER FINAL SIGMA + 0x03c3: 0x00ec, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00ee, # GREEK SMALL LETTER TAU + 0x03c5: 0x00f2, # GREEK SMALL LETTER UPSILON + 0x03c6: 0x00f3, # GREEK SMALL LETTER PHI + 0x03c7: 0x00f4, # GREEK SMALL LETTER CHI + 0x03c8: 0x00f6, # GREEK SMALL LETTER PSI + 0x03c9: 0x00fa, # GREEK SMALL LETTER OMEGA + 0x03ca: 0x00a0, # GREEK SMALL LETTER IOTA WITH DIALYTIKA + 0x03cb: 0x00fb, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA + 0x03cc: 0x00a2, # GREEK SMALL LETTER OMICRON WITH TONOS + 0x03cd: 0x00a3, # GREEK SMALL LETTER UPSILON WITH TONOS + 0x03ce: 0x00fd, # GREEK SMALL LETTER OMEGA WITH TONOS + 0x2015: 0x008e, # HORIZONTAL BAR + 0x2018: 0x008b, # LEFT SINGLE QUOTATION MARK + 0x2019: 0x008c, # RIGHT SINGLE QUOTATION MARK + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/my_env/Lib/encodings/cp874.py b/my_env/Lib/encodings/cp874.py new file mode 100644 index 000000000..59bfcbc98 --- /dev/null +++ b/my_env/Lib/encodings/cp874.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp874 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP874.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp874', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u20ac' # 0x80 -> EURO SIGN + '\ufffe' # 0x81 -> UNDEFINED + '\ufffe' # 0x82 -> UNDEFINED + '\ufffe' # 0x83 -> UNDEFINED + '\ufffe' # 0x84 -> UNDEFINED + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\ufffe' # 0x86 -> UNDEFINED + '\ufffe' # 0x87 -> UNDEFINED + '\ufffe' # 0x88 -> UNDEFINED + '\ufffe' # 0x89 -> UNDEFINED + '\ufffe' # 0x8A -> UNDEFINED + '\ufffe' # 0x8B -> UNDEFINED + '\ufffe' # 0x8C -> UNDEFINED + '\ufffe' # 0x8D -> UNDEFINED + '\ufffe' # 0x8E -> UNDEFINED + '\ufffe' # 0x8F -> UNDEFINED + '\ufffe' # 0x90 -> UNDEFINED + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\ufffe' # 0x98 -> UNDEFINED + '\ufffe' # 0x99 -> UNDEFINED + '\ufffe' # 0x9A -> UNDEFINED + '\ufffe' # 0x9B -> UNDEFINED + '\ufffe' # 0x9C -> UNDEFINED + '\ufffe' # 0x9D -> UNDEFINED + '\ufffe' # 0x9E -> UNDEFINED + '\ufffe' # 0x9F -> UNDEFINED + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u0e01' # 0xA1 -> THAI CHARACTER KO KAI + '\u0e02' # 0xA2 -> THAI CHARACTER KHO KHAI + '\u0e03' # 0xA3 -> THAI CHARACTER KHO KHUAT + '\u0e04' # 0xA4 -> THAI CHARACTER KHO KHWAI + '\u0e05' # 0xA5 -> THAI CHARACTER KHO KHON + '\u0e06' # 0xA6 -> THAI CHARACTER KHO RAKHANG + '\u0e07' # 0xA7 -> THAI CHARACTER NGO NGU + '\u0e08' # 0xA8 -> THAI CHARACTER CHO CHAN + '\u0e09' # 0xA9 -> THAI CHARACTER CHO CHING + '\u0e0a' # 0xAA -> THAI CHARACTER CHO CHANG + '\u0e0b' # 0xAB -> THAI CHARACTER SO SO + '\u0e0c' # 0xAC -> THAI CHARACTER CHO CHOE + '\u0e0d' # 0xAD -> THAI CHARACTER YO YING + '\u0e0e' # 0xAE -> THAI CHARACTER DO CHADA + '\u0e0f' # 0xAF -> THAI CHARACTER TO PATAK + '\u0e10' # 0xB0 -> THAI CHARACTER THO THAN + '\u0e11' # 0xB1 -> THAI CHARACTER THO NANGMONTHO + '\u0e12' # 0xB2 -> THAI CHARACTER THO PHUTHAO + '\u0e13' # 0xB3 -> THAI CHARACTER NO NEN + '\u0e14' # 0xB4 -> THAI CHARACTER DO DEK + '\u0e15' # 0xB5 -> THAI CHARACTER TO TAO + '\u0e16' # 0xB6 -> THAI CHARACTER THO THUNG + '\u0e17' # 0xB7 -> THAI CHARACTER THO THAHAN + '\u0e18' # 0xB8 -> THAI CHARACTER THO THONG + '\u0e19' # 0xB9 -> THAI CHARACTER NO NU + '\u0e1a' # 0xBA -> THAI CHARACTER BO BAIMAI + '\u0e1b' # 0xBB -> THAI CHARACTER PO PLA + '\u0e1c' # 0xBC -> THAI CHARACTER PHO PHUNG + '\u0e1d' # 0xBD -> THAI CHARACTER FO FA + '\u0e1e' # 0xBE -> THAI CHARACTER PHO PHAN + '\u0e1f' # 0xBF -> THAI CHARACTER FO FAN + '\u0e20' # 0xC0 -> THAI CHARACTER PHO SAMPHAO + '\u0e21' # 0xC1 -> THAI CHARACTER MO MA + '\u0e22' # 0xC2 -> THAI CHARACTER YO YAK + '\u0e23' # 0xC3 -> THAI CHARACTER RO RUA + '\u0e24' # 0xC4 -> THAI CHARACTER RU + '\u0e25' # 0xC5 -> THAI CHARACTER LO LING + '\u0e26' # 0xC6 -> THAI CHARACTER LU + '\u0e27' # 0xC7 -> THAI CHARACTER WO WAEN + '\u0e28' # 0xC8 -> THAI CHARACTER SO SALA + '\u0e29' # 0xC9 -> THAI CHARACTER SO RUSI + '\u0e2a' # 0xCA -> THAI CHARACTER SO SUA + '\u0e2b' # 0xCB -> THAI CHARACTER HO HIP + '\u0e2c' # 0xCC -> THAI CHARACTER LO CHULA + '\u0e2d' # 0xCD -> THAI CHARACTER O ANG + '\u0e2e' # 0xCE -> THAI CHARACTER HO NOKHUK + '\u0e2f' # 0xCF -> THAI CHARACTER PAIYANNOI + '\u0e30' # 0xD0 -> THAI CHARACTER SARA A + '\u0e31' # 0xD1 -> THAI CHARACTER MAI HAN-AKAT + '\u0e32' # 0xD2 -> THAI CHARACTER SARA AA + '\u0e33' # 0xD3 -> THAI CHARACTER SARA AM + '\u0e34' # 0xD4 -> THAI CHARACTER SARA I + '\u0e35' # 0xD5 -> THAI CHARACTER SARA II + '\u0e36' # 0xD6 -> THAI CHARACTER SARA UE + '\u0e37' # 0xD7 -> THAI CHARACTER SARA UEE + '\u0e38' # 0xD8 -> THAI CHARACTER SARA U + '\u0e39' # 0xD9 -> THAI CHARACTER SARA UU + '\u0e3a' # 0xDA -> THAI CHARACTER PHINTHU + '\ufffe' # 0xDB -> UNDEFINED + '\ufffe' # 0xDC -> UNDEFINED + '\ufffe' # 0xDD -> UNDEFINED + '\ufffe' # 0xDE -> UNDEFINED + '\u0e3f' # 0xDF -> THAI CURRENCY SYMBOL BAHT + '\u0e40' # 0xE0 -> THAI CHARACTER SARA E + '\u0e41' # 0xE1 -> THAI CHARACTER SARA AE + '\u0e42' # 0xE2 -> THAI CHARACTER SARA O + '\u0e43' # 0xE3 -> THAI CHARACTER SARA AI MAIMUAN + '\u0e44' # 0xE4 -> THAI CHARACTER SARA AI MAIMALAI + '\u0e45' # 0xE5 -> THAI CHARACTER LAKKHANGYAO + '\u0e46' # 0xE6 -> THAI CHARACTER MAIYAMOK + '\u0e47' # 0xE7 -> THAI CHARACTER MAITAIKHU + '\u0e48' # 0xE8 -> THAI CHARACTER MAI EK + '\u0e49' # 0xE9 -> THAI CHARACTER MAI THO + '\u0e4a' # 0xEA -> THAI CHARACTER MAI TRI + '\u0e4b' # 0xEB -> THAI CHARACTER MAI CHATTAWA + '\u0e4c' # 0xEC -> THAI CHARACTER THANTHAKHAT + '\u0e4d' # 0xED -> THAI CHARACTER NIKHAHIT + '\u0e4e' # 0xEE -> THAI CHARACTER YAMAKKAN + '\u0e4f' # 0xEF -> THAI CHARACTER FONGMAN + '\u0e50' # 0xF0 -> THAI DIGIT ZERO + '\u0e51' # 0xF1 -> THAI DIGIT ONE + '\u0e52' # 0xF2 -> THAI DIGIT TWO + '\u0e53' # 0xF3 -> THAI DIGIT THREE + '\u0e54' # 0xF4 -> THAI DIGIT FOUR + '\u0e55' # 0xF5 -> THAI DIGIT FIVE + '\u0e56' # 0xF6 -> THAI DIGIT SIX + '\u0e57' # 0xF7 -> THAI DIGIT SEVEN + '\u0e58' # 0xF8 -> THAI DIGIT EIGHT + '\u0e59' # 0xF9 -> THAI DIGIT NINE + '\u0e5a' # 0xFA -> THAI CHARACTER ANGKHANKHU + '\u0e5b' # 0xFB -> THAI CHARACTER KHOMUT + '\ufffe' # 0xFC -> UNDEFINED + '\ufffe' # 0xFD -> UNDEFINED + '\ufffe' # 0xFE -> UNDEFINED + '\ufffe' # 0xFF -> UNDEFINED +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp875.py b/my_env/Lib/encodings/cp875.py new file mode 100644 index 000000000..c25a5a43b --- /dev/null +++ b/my_env/Lib/encodings/cp875.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp875 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP875.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp875', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x9c' # 0x04 -> CONTROL + '\t' # 0x05 -> HORIZONTAL TABULATION + '\x86' # 0x06 -> CONTROL + '\x7f' # 0x07 -> DELETE + '\x97' # 0x08 -> CONTROL + '\x8d' # 0x09 -> CONTROL + '\x8e' # 0x0A -> CONTROL + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x9d' # 0x14 -> CONTROL + '\x85' # 0x15 -> CONTROL + '\x08' # 0x16 -> BACKSPACE + '\x87' # 0x17 -> CONTROL + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x92' # 0x1A -> CONTROL + '\x8f' # 0x1B -> CONTROL + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + '\x80' # 0x20 -> CONTROL + '\x81' # 0x21 -> CONTROL + '\x82' # 0x22 -> CONTROL + '\x83' # 0x23 -> CONTROL + '\x84' # 0x24 -> CONTROL + '\n' # 0x25 -> LINE FEED + '\x17' # 0x26 -> END OF TRANSMISSION BLOCK + '\x1b' # 0x27 -> ESCAPE + '\x88' # 0x28 -> CONTROL + '\x89' # 0x29 -> CONTROL + '\x8a' # 0x2A -> CONTROL + '\x8b' # 0x2B -> CONTROL + '\x8c' # 0x2C -> CONTROL + '\x05' # 0x2D -> ENQUIRY + '\x06' # 0x2E -> ACKNOWLEDGE + '\x07' # 0x2F -> BELL + '\x90' # 0x30 -> CONTROL + '\x91' # 0x31 -> CONTROL + '\x16' # 0x32 -> SYNCHRONOUS IDLE + '\x93' # 0x33 -> CONTROL + '\x94' # 0x34 -> CONTROL + '\x95' # 0x35 -> CONTROL + '\x96' # 0x36 -> CONTROL + '\x04' # 0x37 -> END OF TRANSMISSION + '\x98' # 0x38 -> CONTROL + '\x99' # 0x39 -> CONTROL + '\x9a' # 0x3A -> CONTROL + '\x9b' # 0x3B -> CONTROL + '\x14' # 0x3C -> DEVICE CONTROL FOUR + '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE + '\x9e' # 0x3E -> CONTROL + '\x1a' # 0x3F -> SUBSTITUTE + ' ' # 0x40 -> SPACE + '\u0391' # 0x41 -> GREEK CAPITAL LETTER ALPHA + '\u0392' # 0x42 -> GREEK CAPITAL LETTER BETA + '\u0393' # 0x43 -> GREEK CAPITAL LETTER GAMMA + '\u0394' # 0x44 -> GREEK CAPITAL LETTER DELTA + '\u0395' # 0x45 -> GREEK CAPITAL LETTER EPSILON + '\u0396' # 0x46 -> GREEK CAPITAL LETTER ZETA + '\u0397' # 0x47 -> GREEK CAPITAL LETTER ETA + '\u0398' # 0x48 -> GREEK CAPITAL LETTER THETA + '\u0399' # 0x49 -> GREEK CAPITAL LETTER IOTA + '[' # 0x4A -> LEFT SQUARE BRACKET + '.' # 0x4B -> FULL STOP + '<' # 0x4C -> LESS-THAN SIGN + '(' # 0x4D -> LEFT PARENTHESIS + '+' # 0x4E -> PLUS SIGN + '!' # 0x4F -> EXCLAMATION MARK + '&' # 0x50 -> AMPERSAND + '\u039a' # 0x51 -> GREEK CAPITAL LETTER KAPPA + '\u039b' # 0x52 -> GREEK CAPITAL LETTER LAMDA + '\u039c' # 0x53 -> GREEK CAPITAL LETTER MU + '\u039d' # 0x54 -> GREEK CAPITAL LETTER NU + '\u039e' # 0x55 -> GREEK CAPITAL LETTER XI + '\u039f' # 0x56 -> GREEK CAPITAL LETTER OMICRON + '\u03a0' # 0x57 -> GREEK CAPITAL LETTER PI + '\u03a1' # 0x58 -> GREEK CAPITAL LETTER RHO + '\u03a3' # 0x59 -> GREEK CAPITAL LETTER SIGMA + ']' # 0x5A -> RIGHT SQUARE BRACKET + '$' # 0x5B -> DOLLAR SIGN + '*' # 0x5C -> ASTERISK + ')' # 0x5D -> RIGHT PARENTHESIS + ';' # 0x5E -> SEMICOLON + '^' # 0x5F -> CIRCUMFLEX ACCENT + '-' # 0x60 -> HYPHEN-MINUS + '/' # 0x61 -> SOLIDUS + '\u03a4' # 0x62 -> GREEK CAPITAL LETTER TAU + '\u03a5' # 0x63 -> GREEK CAPITAL LETTER UPSILON + '\u03a6' # 0x64 -> GREEK CAPITAL LETTER PHI + '\u03a7' # 0x65 -> GREEK CAPITAL LETTER CHI + '\u03a8' # 0x66 -> GREEK CAPITAL LETTER PSI + '\u03a9' # 0x67 -> GREEK CAPITAL LETTER OMEGA + '\u03aa' # 0x68 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + '\u03ab' # 0x69 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + '|' # 0x6A -> VERTICAL LINE + ',' # 0x6B -> COMMA + '%' # 0x6C -> PERCENT SIGN + '_' # 0x6D -> LOW LINE + '>' # 0x6E -> GREATER-THAN SIGN + '?' # 0x6F -> QUESTION MARK + '\xa8' # 0x70 -> DIAERESIS + '\u0386' # 0x71 -> GREEK CAPITAL LETTER ALPHA WITH TONOS + '\u0388' # 0x72 -> GREEK CAPITAL LETTER EPSILON WITH TONOS + '\u0389' # 0x73 -> GREEK CAPITAL LETTER ETA WITH TONOS + '\xa0' # 0x74 -> NO-BREAK SPACE + '\u038a' # 0x75 -> GREEK CAPITAL LETTER IOTA WITH TONOS + '\u038c' # 0x76 -> GREEK CAPITAL LETTER OMICRON WITH TONOS + '\u038e' # 0x77 -> GREEK CAPITAL LETTER UPSILON WITH TONOS + '\u038f' # 0x78 -> GREEK CAPITAL LETTER OMEGA WITH TONOS + '`' # 0x79 -> GRAVE ACCENT + ':' # 0x7A -> COLON + '#' # 0x7B -> NUMBER SIGN + '@' # 0x7C -> COMMERCIAL AT + "'" # 0x7D -> APOSTROPHE + '=' # 0x7E -> EQUALS SIGN + '"' # 0x7F -> QUOTATION MARK + '\u0385' # 0x80 -> GREEK DIALYTIKA TONOS + 'a' # 0x81 -> LATIN SMALL LETTER A + 'b' # 0x82 -> LATIN SMALL LETTER B + 'c' # 0x83 -> LATIN SMALL LETTER C + 'd' # 0x84 -> LATIN SMALL LETTER D + 'e' # 0x85 -> LATIN SMALL LETTER E + 'f' # 0x86 -> LATIN SMALL LETTER F + 'g' # 0x87 -> LATIN SMALL LETTER G + 'h' # 0x88 -> LATIN SMALL LETTER H + 'i' # 0x89 -> LATIN SMALL LETTER I + '\u03b1' # 0x8A -> GREEK SMALL LETTER ALPHA + '\u03b2' # 0x8B -> GREEK SMALL LETTER BETA + '\u03b3' # 0x8C -> GREEK SMALL LETTER GAMMA + '\u03b4' # 0x8D -> GREEK SMALL LETTER DELTA + '\u03b5' # 0x8E -> GREEK SMALL LETTER EPSILON + '\u03b6' # 0x8F -> GREEK SMALL LETTER ZETA + '\xb0' # 0x90 -> DEGREE SIGN + 'j' # 0x91 -> LATIN SMALL LETTER J + 'k' # 0x92 -> LATIN SMALL LETTER K + 'l' # 0x93 -> LATIN SMALL LETTER L + 'm' # 0x94 -> LATIN SMALL LETTER M + 'n' # 0x95 -> LATIN SMALL LETTER N + 'o' # 0x96 -> LATIN SMALL LETTER O + 'p' # 0x97 -> LATIN SMALL LETTER P + 'q' # 0x98 -> LATIN SMALL LETTER Q + 'r' # 0x99 -> LATIN SMALL LETTER R + '\u03b7' # 0x9A -> GREEK SMALL LETTER ETA + '\u03b8' # 0x9B -> GREEK SMALL LETTER THETA + '\u03b9' # 0x9C -> GREEK SMALL LETTER IOTA + '\u03ba' # 0x9D -> GREEK SMALL LETTER KAPPA + '\u03bb' # 0x9E -> GREEK SMALL LETTER LAMDA + '\u03bc' # 0x9F -> GREEK SMALL LETTER MU + '\xb4' # 0xA0 -> ACUTE ACCENT + '~' # 0xA1 -> TILDE + 's' # 0xA2 -> LATIN SMALL LETTER S + 't' # 0xA3 -> LATIN SMALL LETTER T + 'u' # 0xA4 -> LATIN SMALL LETTER U + 'v' # 0xA5 -> LATIN SMALL LETTER V + 'w' # 0xA6 -> LATIN SMALL LETTER W + 'x' # 0xA7 -> LATIN SMALL LETTER X + 'y' # 0xA8 -> LATIN SMALL LETTER Y + 'z' # 0xA9 -> LATIN SMALL LETTER Z + '\u03bd' # 0xAA -> GREEK SMALL LETTER NU + '\u03be' # 0xAB -> GREEK SMALL LETTER XI + '\u03bf' # 0xAC -> GREEK SMALL LETTER OMICRON + '\u03c0' # 0xAD -> GREEK SMALL LETTER PI + '\u03c1' # 0xAE -> GREEK SMALL LETTER RHO + '\u03c3' # 0xAF -> GREEK SMALL LETTER SIGMA + '\xa3' # 0xB0 -> POUND SIGN + '\u03ac' # 0xB1 -> GREEK SMALL LETTER ALPHA WITH TONOS + '\u03ad' # 0xB2 -> GREEK SMALL LETTER EPSILON WITH TONOS + '\u03ae' # 0xB3 -> GREEK SMALL LETTER ETA WITH TONOS + '\u03ca' # 0xB4 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA + '\u03af' # 0xB5 -> GREEK SMALL LETTER IOTA WITH TONOS + '\u03cc' # 0xB6 -> GREEK SMALL LETTER OMICRON WITH TONOS + '\u03cd' # 0xB7 -> GREEK SMALL LETTER UPSILON WITH TONOS + '\u03cb' # 0xB8 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA + '\u03ce' # 0xB9 -> GREEK SMALL LETTER OMEGA WITH TONOS + '\u03c2' # 0xBA -> GREEK SMALL LETTER FINAL SIGMA + '\u03c4' # 0xBB -> GREEK SMALL LETTER TAU + '\u03c5' # 0xBC -> GREEK SMALL LETTER UPSILON + '\u03c6' # 0xBD -> GREEK SMALL LETTER PHI + '\u03c7' # 0xBE -> GREEK SMALL LETTER CHI + '\u03c8' # 0xBF -> GREEK SMALL LETTER PSI + '{' # 0xC0 -> LEFT CURLY BRACKET + 'A' # 0xC1 -> LATIN CAPITAL LETTER A + 'B' # 0xC2 -> LATIN CAPITAL LETTER B + 'C' # 0xC3 -> LATIN CAPITAL LETTER C + 'D' # 0xC4 -> LATIN CAPITAL LETTER D + 'E' # 0xC5 -> LATIN CAPITAL LETTER E + 'F' # 0xC6 -> LATIN CAPITAL LETTER F + 'G' # 0xC7 -> LATIN CAPITAL LETTER G + 'H' # 0xC8 -> LATIN CAPITAL LETTER H + 'I' # 0xC9 -> LATIN CAPITAL LETTER I + '\xad' # 0xCA -> SOFT HYPHEN + '\u03c9' # 0xCB -> GREEK SMALL LETTER OMEGA + '\u0390' # 0xCC -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + '\u03b0' # 0xCD -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + '\u2018' # 0xCE -> LEFT SINGLE QUOTATION MARK + '\u2015' # 0xCF -> HORIZONTAL BAR + '}' # 0xD0 -> RIGHT CURLY BRACKET + 'J' # 0xD1 -> LATIN CAPITAL LETTER J + 'K' # 0xD2 -> LATIN CAPITAL LETTER K + 'L' # 0xD3 -> LATIN CAPITAL LETTER L + 'M' # 0xD4 -> LATIN CAPITAL LETTER M + 'N' # 0xD5 -> LATIN CAPITAL LETTER N + 'O' # 0xD6 -> LATIN CAPITAL LETTER O + 'P' # 0xD7 -> LATIN CAPITAL LETTER P + 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q + 'R' # 0xD9 -> LATIN CAPITAL LETTER R + '\xb1' # 0xDA -> PLUS-MINUS SIGN + '\xbd' # 0xDB -> VULGAR FRACTION ONE HALF + '\x1a' # 0xDC -> SUBSTITUTE + '\u0387' # 0xDD -> GREEK ANO TELEIA + '\u2019' # 0xDE -> RIGHT SINGLE QUOTATION MARK + '\xa6' # 0xDF -> BROKEN BAR + '\\' # 0xE0 -> REVERSE SOLIDUS + '\x1a' # 0xE1 -> SUBSTITUTE + 'S' # 0xE2 -> LATIN CAPITAL LETTER S + 'T' # 0xE3 -> LATIN CAPITAL LETTER T + 'U' # 0xE4 -> LATIN CAPITAL LETTER U + 'V' # 0xE5 -> LATIN CAPITAL LETTER V + 'W' # 0xE6 -> LATIN CAPITAL LETTER W + 'X' # 0xE7 -> LATIN CAPITAL LETTER X + 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y + 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z + '\xb2' # 0xEA -> SUPERSCRIPT TWO + '\xa7' # 0xEB -> SECTION SIGN + '\x1a' # 0xEC -> SUBSTITUTE + '\x1a' # 0xED -> SUBSTITUTE + '\xab' # 0xEE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xEF -> NOT SIGN + '0' # 0xF0 -> DIGIT ZERO + '1' # 0xF1 -> DIGIT ONE + '2' # 0xF2 -> DIGIT TWO + '3' # 0xF3 -> DIGIT THREE + '4' # 0xF4 -> DIGIT FOUR + '5' # 0xF5 -> DIGIT FIVE + '6' # 0xF6 -> DIGIT SIX + '7' # 0xF7 -> DIGIT SEVEN + '8' # 0xF8 -> DIGIT EIGHT + '9' # 0xF9 -> DIGIT NINE + '\xb3' # 0xFA -> SUPERSCRIPT THREE + '\xa9' # 0xFB -> COPYRIGHT SIGN + '\x1a' # 0xFC -> SUBSTITUTE + '\x1a' # 0xFD -> SUBSTITUTE + '\xbb' # 0xFE -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\x9f' # 0xFF -> CONTROL +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/cp932.py b/my_env/Lib/encodings/cp932.py new file mode 100644 index 000000000..e01f59b71 --- /dev/null +++ b/my_env/Lib/encodings/cp932.py @@ -0,0 +1,39 @@ +# +# cp932.py: Python Unicode Codec for CP932 +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('cp932') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='cp932', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/cp949.py b/my_env/Lib/encodings/cp949.py new file mode 100644 index 000000000..627c87125 --- /dev/null +++ b/my_env/Lib/encodings/cp949.py @@ -0,0 +1,39 @@ +# +# cp949.py: Python Unicode Codec for CP949 +# +# Written by Hye-Shik Chang +# + +import _codecs_kr, codecs +import _multibytecodec as mbc + +codec = _codecs_kr.getcodec('cp949') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='cp949', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/cp950.py b/my_env/Lib/encodings/cp950.py new file mode 100644 index 000000000..39eec5ed0 --- /dev/null +++ b/my_env/Lib/encodings/cp950.py @@ -0,0 +1,39 @@ +# +# cp950.py: Python Unicode Codec for CP950 +# +# Written by Hye-Shik Chang +# + +import _codecs_tw, codecs +import _multibytecodec as mbc + +codec = _codecs_tw.getcodec('cp950') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='cp950', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/euc_jis_2004.py b/my_env/Lib/encodings/euc_jis_2004.py new file mode 100644 index 000000000..72b87aea6 --- /dev/null +++ b/my_env/Lib/encodings/euc_jis_2004.py @@ -0,0 +1,39 @@ +# +# euc_jis_2004.py: Python Unicode Codec for EUC_JIS_2004 +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('euc_jis_2004') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='euc_jis_2004', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/euc_jisx0213.py b/my_env/Lib/encodings/euc_jisx0213.py new file mode 100644 index 000000000..cc47d0411 --- /dev/null +++ b/my_env/Lib/encodings/euc_jisx0213.py @@ -0,0 +1,39 @@ +# +# euc_jisx0213.py: Python Unicode Codec for EUC_JISX0213 +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('euc_jisx0213') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='euc_jisx0213', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/euc_jp.py b/my_env/Lib/encodings/euc_jp.py new file mode 100644 index 000000000..7bcbe4147 --- /dev/null +++ b/my_env/Lib/encodings/euc_jp.py @@ -0,0 +1,39 @@ +# +# euc_jp.py: Python Unicode Codec for EUC_JP +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('euc_jp') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='euc_jp', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/euc_kr.py b/my_env/Lib/encodings/euc_kr.py new file mode 100644 index 000000000..c1fb1260e --- /dev/null +++ b/my_env/Lib/encodings/euc_kr.py @@ -0,0 +1,39 @@ +# +# euc_kr.py: Python Unicode Codec for EUC_KR +# +# Written by Hye-Shik Chang +# + +import _codecs_kr, codecs +import _multibytecodec as mbc + +codec = _codecs_kr.getcodec('euc_kr') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='euc_kr', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/gb18030.py b/my_env/Lib/encodings/gb18030.py new file mode 100644 index 000000000..34fb6c366 --- /dev/null +++ b/my_env/Lib/encodings/gb18030.py @@ -0,0 +1,39 @@ +# +# gb18030.py: Python Unicode Codec for GB18030 +# +# Written by Hye-Shik Chang +# + +import _codecs_cn, codecs +import _multibytecodec as mbc + +codec = _codecs_cn.getcodec('gb18030') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='gb18030', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/gb2312.py b/my_env/Lib/encodings/gb2312.py new file mode 100644 index 000000000..3c3b837d6 --- /dev/null +++ b/my_env/Lib/encodings/gb2312.py @@ -0,0 +1,39 @@ +# +# gb2312.py: Python Unicode Codec for GB2312 +# +# Written by Hye-Shik Chang +# + +import _codecs_cn, codecs +import _multibytecodec as mbc + +codec = _codecs_cn.getcodec('gb2312') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='gb2312', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/gbk.py b/my_env/Lib/encodings/gbk.py new file mode 100644 index 000000000..1b45db898 --- /dev/null +++ b/my_env/Lib/encodings/gbk.py @@ -0,0 +1,39 @@ +# +# gbk.py: Python Unicode Codec for GBK +# +# Written by Hye-Shik Chang +# + +import _codecs_cn, codecs +import _multibytecodec as mbc + +codec = _codecs_cn.getcodec('gbk') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='gbk', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/hex_codec.py b/my_env/Lib/encodings/hex_codec.py new file mode 100644 index 000000000..9fb107280 --- /dev/null +++ b/my_env/Lib/encodings/hex_codec.py @@ -0,0 +1,55 @@ +"""Python 'hex_codec' Codec - 2-digit hex content transfer encoding. + +This codec de/encodes from bytes to bytes. + +Written by Marc-Andre Lemburg (mal@lemburg.com). +""" + +import codecs +import binascii + +### Codec APIs + +def hex_encode(input, errors='strict'): + assert errors == 'strict' + return (binascii.b2a_hex(input), len(input)) + +def hex_decode(input, errors='strict'): + assert errors == 'strict' + return (binascii.a2b_hex(input), len(input)) + +class Codec(codecs.Codec): + def encode(self, input, errors='strict'): + return hex_encode(input, errors) + def decode(self, input, errors='strict'): + return hex_decode(input, errors) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + assert self.errors == 'strict' + return binascii.b2a_hex(input) + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + assert self.errors == 'strict' + return binascii.a2b_hex(input) + +class StreamWriter(Codec, codecs.StreamWriter): + charbuffertype = bytes + +class StreamReader(Codec, codecs.StreamReader): + charbuffertype = bytes + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='hex', + encode=hex_encode, + decode=hex_decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + _is_text_encoding=False, + ) diff --git a/my_env/Lib/encodings/hp_roman8.py b/my_env/Lib/encodings/hp_roman8.py new file mode 100644 index 000000000..58de1033c --- /dev/null +++ b/my_env/Lib/encodings/hp_roman8.py @@ -0,0 +1,314 @@ +""" Python Character Mapping Codec generated from 'hp_roman8.txt' with gencodec.py. + + Based on data from ftp://dkuug.dk/i18n/charmaps/HP-ROMAN8 (Keld Simonsen) + + Original source: LaserJet IIP Printer User's Manual HP part no + 33471-90901, Hewlet-Packard, June 1989. + + (Used with permission) + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='hp-roman8', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\xc0' # 0xA1 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc2' # 0xA2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc8' # 0xA3 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xca' # 0xA4 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0xA5 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xce' # 0xA6 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xA7 -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xb4' # 0xA8 -> ACUTE ACCENT + '\u02cb' # 0xA9 -> MODIFIER LETTER GRAVE ACCENT (MANDARIN CHINESE FOURTH TONE) + '\u02c6' # 0xAA -> MODIFIER LETTER CIRCUMFLEX ACCENT + '\xa8' # 0xAB -> DIAERESIS + '\u02dc' # 0xAC -> SMALL TILDE + '\xd9' # 0xAD -> LATIN CAPITAL LETTER U WITH GRAVE + '\xdb' # 0xAE -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\u20a4' # 0xAF -> LIRA SIGN + '\xaf' # 0xB0 -> MACRON + '\xdd' # 0xB1 -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xfd' # 0xB2 -> LATIN SMALL LETTER Y WITH ACUTE + '\xb0' # 0xB3 -> DEGREE SIGN + '\xc7' # 0xB4 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xe7' # 0xB5 -> LATIN SMALL LETTER C WITH CEDILLA + '\xd1' # 0xB6 -> LATIN CAPITAL LETTER N WITH TILDE + '\xf1' # 0xB7 -> LATIN SMALL LETTER N WITH TILDE + '\xa1' # 0xB8 -> INVERTED EXCLAMATION MARK + '\xbf' # 0xB9 -> INVERTED QUESTION MARK + '\xa4' # 0xBA -> CURRENCY SIGN + '\xa3' # 0xBB -> POUND SIGN + '\xa5' # 0xBC -> YEN SIGN + '\xa7' # 0xBD -> SECTION SIGN + '\u0192' # 0xBE -> LATIN SMALL LETTER F WITH HOOK + '\xa2' # 0xBF -> CENT SIGN + '\xe2' # 0xC0 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xea' # 0xC1 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xf4' # 0xC2 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xfb' # 0xC3 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xe1' # 0xC4 -> LATIN SMALL LETTER A WITH ACUTE + '\xe9' # 0xC5 -> LATIN SMALL LETTER E WITH ACUTE + '\xf3' # 0xC6 -> LATIN SMALL LETTER O WITH ACUTE + '\xfa' # 0xC7 -> LATIN SMALL LETTER U WITH ACUTE + '\xe0' # 0xC8 -> LATIN SMALL LETTER A WITH GRAVE + '\xe8' # 0xC9 -> LATIN SMALL LETTER E WITH GRAVE + '\xf2' # 0xCA -> LATIN SMALL LETTER O WITH GRAVE + '\xf9' # 0xCB -> LATIN SMALL LETTER U WITH GRAVE + '\xe4' # 0xCC -> LATIN SMALL LETTER A WITH DIAERESIS + '\xeb' # 0xCD -> LATIN SMALL LETTER E WITH DIAERESIS + '\xf6' # 0xCE -> LATIN SMALL LETTER O WITH DIAERESIS + '\xfc' # 0xCF -> LATIN SMALL LETTER U WITH DIAERESIS + '\xc5' # 0xD0 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xee' # 0xD1 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xd8' # 0xD2 -> LATIN CAPITAL LETTER O WITH STROKE + '\xc6' # 0xD3 -> LATIN CAPITAL LETTER AE + '\xe5' # 0xD4 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xed' # 0xD5 -> LATIN SMALL LETTER I WITH ACUTE + '\xf8' # 0xD6 -> LATIN SMALL LETTER O WITH STROKE + '\xe6' # 0xD7 -> LATIN SMALL LETTER AE + '\xc4' # 0xD8 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xec' # 0xD9 -> LATIN SMALL LETTER I WITH GRAVE + '\xd6' # 0xDA -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0xDB -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xc9' # 0xDC -> LATIN CAPITAL LETTER E WITH ACUTE + '\xef' # 0xDD -> LATIN SMALL LETTER I WITH DIAERESIS + '\xdf' # 0xDE -> LATIN SMALL LETTER SHARP S (GERMAN) + '\xd4' # 0xDF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xc1' # 0xE0 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc3' # 0xE1 -> LATIN CAPITAL LETTER A WITH TILDE + '\xe3' # 0xE2 -> LATIN SMALL LETTER A WITH TILDE + '\xd0' # 0xE3 -> LATIN CAPITAL LETTER ETH (ICELANDIC) + '\xf0' # 0xE4 -> LATIN SMALL LETTER ETH (ICELANDIC) + '\xcd' # 0xE5 -> LATIN CAPITAL LETTER I WITH ACUTE + '\xcc' # 0xE6 -> LATIN CAPITAL LETTER I WITH GRAVE + '\xd3' # 0xE7 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd2' # 0xE8 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd5' # 0xE9 -> LATIN CAPITAL LETTER O WITH TILDE + '\xf5' # 0xEA -> LATIN SMALL LETTER O WITH TILDE + '\u0160' # 0xEB -> LATIN CAPITAL LETTER S WITH CARON + '\u0161' # 0xEC -> LATIN SMALL LETTER S WITH CARON + '\xda' # 0xED -> LATIN CAPITAL LETTER U WITH ACUTE + '\u0178' # 0xEE -> LATIN CAPITAL LETTER Y WITH DIAERESIS + '\xff' # 0xEF -> LATIN SMALL LETTER Y WITH DIAERESIS + '\xde' # 0xF0 -> LATIN CAPITAL LETTER THORN (ICELANDIC) + '\xfe' # 0xF1 -> LATIN SMALL LETTER THORN (ICELANDIC) + '\xb7' # 0xF2 -> MIDDLE DOT + '\xb5' # 0xF3 -> MICRO SIGN + '\xb6' # 0xF4 -> PILCROW SIGN + '\xbe' # 0xF5 -> VULGAR FRACTION THREE QUARTERS + '\u2014' # 0xF6 -> EM DASH + '\xbc' # 0xF7 -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xF8 -> VULGAR FRACTION ONE HALF + '\xaa' # 0xF9 -> FEMININE ORDINAL INDICATOR + '\xba' # 0xFA -> MASCULINE ORDINAL INDICATOR + '\xab' # 0xFB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u25a0' # 0xFC -> BLACK SQUARE + '\xbb' # 0xFD -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xb1' # 0xFE -> PLUS-MINUS SIGN + '\ufffe' +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/hz.py b/my_env/Lib/encodings/hz.py new file mode 100644 index 000000000..383442a3c --- /dev/null +++ b/my_env/Lib/encodings/hz.py @@ -0,0 +1,39 @@ +# +# hz.py: Python Unicode Codec for HZ +# +# Written by Hye-Shik Chang +# + +import _codecs_cn, codecs +import _multibytecodec as mbc + +codec = _codecs_cn.getcodec('hz') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='hz', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/idna.py b/my_env/Lib/encodings/idna.py new file mode 100644 index 000000000..ea4058512 --- /dev/null +++ b/my_env/Lib/encodings/idna.py @@ -0,0 +1,309 @@ +# This module implements the RFCs 3490 (IDNA) and 3491 (Nameprep) + +import stringprep, re, codecs +from unicodedata import ucd_3_2_0 as unicodedata + +# IDNA section 3.1 +dots = re.compile("[\u002E\u3002\uFF0E\uFF61]") + +# IDNA section 5 +ace_prefix = b"xn--" +sace_prefix = "xn--" + +# This assumes query strings, so AllowUnassigned is true +def nameprep(label): + # Map + newlabel = [] + for c in label: + if stringprep.in_table_b1(c): + # Map to nothing + continue + newlabel.append(stringprep.map_table_b2(c)) + label = "".join(newlabel) + + # Normalize + label = unicodedata.normalize("NFKC", label) + + # Prohibit + for c in label: + if stringprep.in_table_c12(c) or \ + stringprep.in_table_c22(c) or \ + stringprep.in_table_c3(c) or \ + stringprep.in_table_c4(c) or \ + stringprep.in_table_c5(c) or \ + stringprep.in_table_c6(c) or \ + stringprep.in_table_c7(c) or \ + stringprep.in_table_c8(c) or \ + stringprep.in_table_c9(c): + raise UnicodeError("Invalid character %r" % c) + + # Check bidi + RandAL = [stringprep.in_table_d1(x) for x in label] + for c in RandAL: + if c: + # There is a RandAL char in the string. Must perform further + # tests: + # 1) The characters in section 5.8 MUST be prohibited. + # This is table C.8, which was already checked + # 2) If a string contains any RandALCat character, the string + # MUST NOT contain any LCat character. + if any(stringprep.in_table_d2(x) for x in label): + raise UnicodeError("Violation of BIDI requirement 2") + + # 3) If a string contains any RandALCat character, a + # RandALCat character MUST be the first character of the + # string, and a RandALCat character MUST be the last + # character of the string. + if not RandAL[0] or not RandAL[-1]: + raise UnicodeError("Violation of BIDI requirement 3") + + return label + +def ToASCII(label): + try: + # Step 1: try ASCII + label = label.encode("ascii") + except UnicodeError: + pass + else: + # Skip to step 3: UseSTD3ASCIIRules is false, so + # Skip to step 8. + if 0 < len(label) < 64: + return label + raise UnicodeError("label empty or too long") + + # Step 2: nameprep + label = nameprep(label) + + # Step 3: UseSTD3ASCIIRules is false + # Step 4: try ASCII + try: + label = label.encode("ascii") + except UnicodeError: + pass + else: + # Skip to step 8. + if 0 < len(label) < 64: + return label + raise UnicodeError("label empty or too long") + + # Step 5: Check ACE prefix + if label.startswith(sace_prefix): + raise UnicodeError("Label starts with ACE prefix") + + # Step 6: Encode with PUNYCODE + label = label.encode("punycode") + + # Step 7: Prepend ACE prefix + label = ace_prefix + label + + # Step 8: Check size + if 0 < len(label) < 64: + return label + raise UnicodeError("label empty or too long") + +def ToUnicode(label): + # Step 1: Check for ASCII + if isinstance(label, bytes): + pure_ascii = True + else: + try: + label = label.encode("ascii") + pure_ascii = True + except UnicodeError: + pure_ascii = False + if not pure_ascii: + # Step 2: Perform nameprep + label = nameprep(label) + # It doesn't say this, but apparently, it should be ASCII now + try: + label = label.encode("ascii") + except UnicodeError: + raise UnicodeError("Invalid character in IDN label") + # Step 3: Check for ACE prefix + if not label.startswith(ace_prefix): + return str(label, "ascii") + + # Step 4: Remove ACE prefix + label1 = label[len(ace_prefix):] + + # Step 5: Decode using PUNYCODE + result = label1.decode("punycode") + + # Step 6: Apply ToASCII + label2 = ToASCII(result) + + # Step 7: Compare the result of step 6 with the one of step 3 + # label2 will already be in lower case. + if str(label, "ascii").lower() != str(label2, "ascii"): + raise UnicodeError("IDNA does not round-trip", label, label2) + + # Step 8: return the result of step 5 + return result + +### Codec APIs + +class Codec(codecs.Codec): + def encode(self, input, errors='strict'): + + if errors != 'strict': + # IDNA is quite clear that implementations must be strict + raise UnicodeError("unsupported error handling "+errors) + + if not input: + return b'', 0 + + try: + result = input.encode('ascii') + except UnicodeEncodeError: + pass + else: + # ASCII name: fast path + labels = result.split(b'.') + for label in labels[:-1]: + if not (0 < len(label) < 64): + raise UnicodeError("label empty or too long") + if len(labels[-1]) >= 64: + raise UnicodeError("label too long") + return result, len(input) + + result = bytearray() + labels = dots.split(input) + if labels and not labels[-1]: + trailing_dot = b'.' + del labels[-1] + else: + trailing_dot = b'' + for label in labels: + if result: + # Join with U+002E + result.extend(b'.') + result.extend(ToASCII(label)) + return bytes(result+trailing_dot), len(input) + + def decode(self, input, errors='strict'): + + if errors != 'strict': + raise UnicodeError("Unsupported error handling "+errors) + + if not input: + return "", 0 + + # IDNA allows decoding to operate on Unicode strings, too. + if not isinstance(input, bytes): + # XXX obviously wrong, see #3232 + input = bytes(input) + + if ace_prefix not in input: + # Fast path + try: + return input.decode('ascii'), len(input) + except UnicodeDecodeError: + pass + + labels = input.split(b".") + + if labels and len(labels[-1]) == 0: + trailing_dot = '.' + del labels[-1] + else: + trailing_dot = '' + + result = [] + for label in labels: + result.append(ToUnicode(label)) + + return ".".join(result)+trailing_dot, len(input) + +class IncrementalEncoder(codecs.BufferedIncrementalEncoder): + def _buffer_encode(self, input, errors, final): + if errors != 'strict': + # IDNA is quite clear that implementations must be strict + raise UnicodeError("unsupported error handling "+errors) + + if not input: + return (b'', 0) + + labels = dots.split(input) + trailing_dot = b'' + if labels: + if not labels[-1]: + trailing_dot = b'.' + del labels[-1] + elif not final: + # Keep potentially unfinished label until the next call + del labels[-1] + if labels: + trailing_dot = b'.' + + result = bytearray() + size = 0 + for label in labels: + if size: + # Join with U+002E + result.extend(b'.') + size += 1 + result.extend(ToASCII(label)) + size += len(label) + + result += trailing_dot + size += len(trailing_dot) + return (bytes(result), size) + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def _buffer_decode(self, input, errors, final): + if errors != 'strict': + raise UnicodeError("Unsupported error handling "+errors) + + if not input: + return ("", 0) + + # IDNA allows decoding to operate on Unicode strings, too. + if isinstance(input, str): + labels = dots.split(input) + else: + # Must be ASCII string + input = str(input, "ascii") + labels = input.split(".") + + trailing_dot = '' + if labels: + if not labels[-1]: + trailing_dot = '.' + del labels[-1] + elif not final: + # Keep potentially unfinished label until the next call + del labels[-1] + if labels: + trailing_dot = '.' + + result = [] + size = 0 + for label in labels: + result.append(ToUnicode(label)) + if size: + size += 1 + size += len(label) + + result = ".".join(result) + trailing_dot + size += len(trailing_dot) + return (result, size) + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='idna', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/my_env/Lib/encodings/iso2022_jp.py b/my_env/Lib/encodings/iso2022_jp.py new file mode 100644 index 000000000..ab0406069 --- /dev/null +++ b/my_env/Lib/encodings/iso2022_jp.py @@ -0,0 +1,39 @@ +# +# iso2022_jp.py: Python Unicode Codec for ISO2022_JP +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_jp') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_jp', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/iso2022_jp_1.py b/my_env/Lib/encodings/iso2022_jp_1.py new file mode 100644 index 000000000..997044dc3 --- /dev/null +++ b/my_env/Lib/encodings/iso2022_jp_1.py @@ -0,0 +1,39 @@ +# +# iso2022_jp_1.py: Python Unicode Codec for ISO2022_JP_1 +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_jp_1') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_jp_1', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/iso2022_jp_2.py b/my_env/Lib/encodings/iso2022_jp_2.py new file mode 100644 index 000000000..9106bf762 --- /dev/null +++ b/my_env/Lib/encodings/iso2022_jp_2.py @@ -0,0 +1,39 @@ +# +# iso2022_jp_2.py: Python Unicode Codec for ISO2022_JP_2 +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_jp_2') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_jp_2', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/iso2022_jp_2004.py b/my_env/Lib/encodings/iso2022_jp_2004.py new file mode 100644 index 000000000..40198bf09 --- /dev/null +++ b/my_env/Lib/encodings/iso2022_jp_2004.py @@ -0,0 +1,39 @@ +# +# iso2022_jp_2004.py: Python Unicode Codec for ISO2022_JP_2004 +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_jp_2004') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_jp_2004', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/iso2022_jp_3.py b/my_env/Lib/encodings/iso2022_jp_3.py new file mode 100644 index 000000000..346e08bec --- /dev/null +++ b/my_env/Lib/encodings/iso2022_jp_3.py @@ -0,0 +1,39 @@ +# +# iso2022_jp_3.py: Python Unicode Codec for ISO2022_JP_3 +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_jp_3') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_jp_3', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/iso2022_jp_ext.py b/my_env/Lib/encodings/iso2022_jp_ext.py new file mode 100644 index 000000000..752bab981 --- /dev/null +++ b/my_env/Lib/encodings/iso2022_jp_ext.py @@ -0,0 +1,39 @@ +# +# iso2022_jp_ext.py: Python Unicode Codec for ISO2022_JP_EXT +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_jp_ext') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_jp_ext', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/iso2022_kr.py b/my_env/Lib/encodings/iso2022_kr.py new file mode 100644 index 000000000..bf7018763 --- /dev/null +++ b/my_env/Lib/encodings/iso2022_kr.py @@ -0,0 +1,39 @@ +# +# iso2022_kr.py: Python Unicode Codec for ISO2022_KR +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_kr') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_kr', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/iso8859_1.py b/my_env/Lib/encodings/iso8859_1.py new file mode 100644 index 000000000..8cfc01fe1 --- /dev/null +++ b/my_env/Lib/encodings/iso8859_1.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_1 generated from 'MAPPINGS/ISO8859/8859-1.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-1', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa4' # 0xA4 -> CURRENCY SIGN + '\xa5' # 0xA5 -> YEN SIGN + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\xaf' # 0xAF -> MACRON + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\xb8' # 0xB8 -> CEDILLA + '\xb9' # 0xB9 -> SUPERSCRIPT ONE + '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + '\xbf' # 0xBF -> INVERTED QUESTION MARK + '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH (Icelandic) + '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xde' # 0xDE -> LATIN CAPITAL LETTER THORN (Icelandic) + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S (German) + '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe6' # 0xE6 -> LATIN SMALL LETTER AE + '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + '\xf0' # 0xF0 -> LATIN SMALL LETTER ETH (Icelandic) + '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0xF7 -> DIVISION SIGN + '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + '\xfe' # 0xFE -> LATIN SMALL LETTER THORN (Icelandic) + '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_10.py b/my_env/Lib/encodings/iso8859_10.py new file mode 100644 index 000000000..b4fb0419c --- /dev/null +++ b/my_env/Lib/encodings/iso8859_10.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_10 generated from 'MAPPINGS/ISO8859/8859-10.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-10', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u0104' # 0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK + '\u0112' # 0xA2 -> LATIN CAPITAL LETTER E WITH MACRON + '\u0122' # 0xA3 -> LATIN CAPITAL LETTER G WITH CEDILLA + '\u012a' # 0xA4 -> LATIN CAPITAL LETTER I WITH MACRON + '\u0128' # 0xA5 -> LATIN CAPITAL LETTER I WITH TILDE + '\u0136' # 0xA6 -> LATIN CAPITAL LETTER K WITH CEDILLA + '\xa7' # 0xA7 -> SECTION SIGN + '\u013b' # 0xA8 -> LATIN CAPITAL LETTER L WITH CEDILLA + '\u0110' # 0xA9 -> LATIN CAPITAL LETTER D WITH STROKE + '\u0160' # 0xAA -> LATIN CAPITAL LETTER S WITH CARON + '\u0166' # 0xAB -> LATIN CAPITAL LETTER T WITH STROKE + '\u017d' # 0xAC -> LATIN CAPITAL LETTER Z WITH CARON + '\xad' # 0xAD -> SOFT HYPHEN + '\u016a' # 0xAE -> LATIN CAPITAL LETTER U WITH MACRON + '\u014a' # 0xAF -> LATIN CAPITAL LETTER ENG + '\xb0' # 0xB0 -> DEGREE SIGN + '\u0105' # 0xB1 -> LATIN SMALL LETTER A WITH OGONEK + '\u0113' # 0xB2 -> LATIN SMALL LETTER E WITH MACRON + '\u0123' # 0xB3 -> LATIN SMALL LETTER G WITH CEDILLA + '\u012b' # 0xB4 -> LATIN SMALL LETTER I WITH MACRON + '\u0129' # 0xB5 -> LATIN SMALL LETTER I WITH TILDE + '\u0137' # 0xB6 -> LATIN SMALL LETTER K WITH CEDILLA + '\xb7' # 0xB7 -> MIDDLE DOT + '\u013c' # 0xB8 -> LATIN SMALL LETTER L WITH CEDILLA + '\u0111' # 0xB9 -> LATIN SMALL LETTER D WITH STROKE + '\u0161' # 0xBA -> LATIN SMALL LETTER S WITH CARON + '\u0167' # 0xBB -> LATIN SMALL LETTER T WITH STROKE + '\u017e' # 0xBC -> LATIN SMALL LETTER Z WITH CARON + '\u2015' # 0xBD -> HORIZONTAL BAR + '\u016b' # 0xBE -> LATIN SMALL LETTER U WITH MACRON + '\u014b' # 0xBF -> LATIN SMALL LETTER ENG + '\u0100' # 0xC0 -> LATIN CAPITAL LETTER A WITH MACRON + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + '\u012e' # 0xC7 -> LATIN CAPITAL LETTER I WITH OGONEK + '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\u0118' # 0xCA -> LATIN CAPITAL LETTER E WITH OGONEK + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\u0116' # 0xCC -> LATIN CAPITAL LETTER E WITH DOT ABOVE + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH (Icelandic) + '\u0145' # 0xD1 -> LATIN CAPITAL LETTER N WITH CEDILLA + '\u014c' # 0xD2 -> LATIN CAPITAL LETTER O WITH MACRON + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\u0168' # 0xD7 -> LATIN CAPITAL LETTER U WITH TILDE + '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + '\u0172' # 0xD9 -> LATIN CAPITAL LETTER U WITH OGONEK + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xde' # 0xDE -> LATIN CAPITAL LETTER THORN (Icelandic) + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S (German) + '\u0101' # 0xE0 -> LATIN SMALL LETTER A WITH MACRON + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe6' # 0xE6 -> LATIN SMALL LETTER AE + '\u012f' # 0xE7 -> LATIN SMALL LETTER I WITH OGONEK + '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\u0119' # 0xEA -> LATIN SMALL LETTER E WITH OGONEK + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\u0117' # 0xEC -> LATIN SMALL LETTER E WITH DOT ABOVE + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + '\xf0' # 0xF0 -> LATIN SMALL LETTER ETH (Icelandic) + '\u0146' # 0xF1 -> LATIN SMALL LETTER N WITH CEDILLA + '\u014d' # 0xF2 -> LATIN SMALL LETTER O WITH MACRON + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\u0169' # 0xF7 -> LATIN SMALL LETTER U WITH TILDE + '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + '\u0173' # 0xF9 -> LATIN SMALL LETTER U WITH OGONEK + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + '\xfe' # 0xFE -> LATIN SMALL LETTER THORN (Icelandic) + '\u0138' # 0xFF -> LATIN SMALL LETTER KRA +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_11.py b/my_env/Lib/encodings/iso8859_11.py new file mode 100644 index 000000000..c7258ecf4 --- /dev/null +++ b/my_env/Lib/encodings/iso8859_11.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_11 generated from 'MAPPINGS/ISO8859/8859-11.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-11', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u0e01' # 0xA1 -> THAI CHARACTER KO KAI + '\u0e02' # 0xA2 -> THAI CHARACTER KHO KHAI + '\u0e03' # 0xA3 -> THAI CHARACTER KHO KHUAT + '\u0e04' # 0xA4 -> THAI CHARACTER KHO KHWAI + '\u0e05' # 0xA5 -> THAI CHARACTER KHO KHON + '\u0e06' # 0xA6 -> THAI CHARACTER KHO RAKHANG + '\u0e07' # 0xA7 -> THAI CHARACTER NGO NGU + '\u0e08' # 0xA8 -> THAI CHARACTER CHO CHAN + '\u0e09' # 0xA9 -> THAI CHARACTER CHO CHING + '\u0e0a' # 0xAA -> THAI CHARACTER CHO CHANG + '\u0e0b' # 0xAB -> THAI CHARACTER SO SO + '\u0e0c' # 0xAC -> THAI CHARACTER CHO CHOE + '\u0e0d' # 0xAD -> THAI CHARACTER YO YING + '\u0e0e' # 0xAE -> THAI CHARACTER DO CHADA + '\u0e0f' # 0xAF -> THAI CHARACTER TO PATAK + '\u0e10' # 0xB0 -> THAI CHARACTER THO THAN + '\u0e11' # 0xB1 -> THAI CHARACTER THO NANGMONTHO + '\u0e12' # 0xB2 -> THAI CHARACTER THO PHUTHAO + '\u0e13' # 0xB3 -> THAI CHARACTER NO NEN + '\u0e14' # 0xB4 -> THAI CHARACTER DO DEK + '\u0e15' # 0xB5 -> THAI CHARACTER TO TAO + '\u0e16' # 0xB6 -> THAI CHARACTER THO THUNG + '\u0e17' # 0xB7 -> THAI CHARACTER THO THAHAN + '\u0e18' # 0xB8 -> THAI CHARACTER THO THONG + '\u0e19' # 0xB9 -> THAI CHARACTER NO NU + '\u0e1a' # 0xBA -> THAI CHARACTER BO BAIMAI + '\u0e1b' # 0xBB -> THAI CHARACTER PO PLA + '\u0e1c' # 0xBC -> THAI CHARACTER PHO PHUNG + '\u0e1d' # 0xBD -> THAI CHARACTER FO FA + '\u0e1e' # 0xBE -> THAI CHARACTER PHO PHAN + '\u0e1f' # 0xBF -> THAI CHARACTER FO FAN + '\u0e20' # 0xC0 -> THAI CHARACTER PHO SAMPHAO + '\u0e21' # 0xC1 -> THAI CHARACTER MO MA + '\u0e22' # 0xC2 -> THAI CHARACTER YO YAK + '\u0e23' # 0xC3 -> THAI CHARACTER RO RUA + '\u0e24' # 0xC4 -> THAI CHARACTER RU + '\u0e25' # 0xC5 -> THAI CHARACTER LO LING + '\u0e26' # 0xC6 -> THAI CHARACTER LU + '\u0e27' # 0xC7 -> THAI CHARACTER WO WAEN + '\u0e28' # 0xC8 -> THAI CHARACTER SO SALA + '\u0e29' # 0xC9 -> THAI CHARACTER SO RUSI + '\u0e2a' # 0xCA -> THAI CHARACTER SO SUA + '\u0e2b' # 0xCB -> THAI CHARACTER HO HIP + '\u0e2c' # 0xCC -> THAI CHARACTER LO CHULA + '\u0e2d' # 0xCD -> THAI CHARACTER O ANG + '\u0e2e' # 0xCE -> THAI CHARACTER HO NOKHUK + '\u0e2f' # 0xCF -> THAI CHARACTER PAIYANNOI + '\u0e30' # 0xD0 -> THAI CHARACTER SARA A + '\u0e31' # 0xD1 -> THAI CHARACTER MAI HAN-AKAT + '\u0e32' # 0xD2 -> THAI CHARACTER SARA AA + '\u0e33' # 0xD3 -> THAI CHARACTER SARA AM + '\u0e34' # 0xD4 -> THAI CHARACTER SARA I + '\u0e35' # 0xD5 -> THAI CHARACTER SARA II + '\u0e36' # 0xD6 -> THAI CHARACTER SARA UE + '\u0e37' # 0xD7 -> THAI CHARACTER SARA UEE + '\u0e38' # 0xD8 -> THAI CHARACTER SARA U + '\u0e39' # 0xD9 -> THAI CHARACTER SARA UU + '\u0e3a' # 0xDA -> THAI CHARACTER PHINTHU + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\u0e3f' # 0xDF -> THAI CURRENCY SYMBOL BAHT + '\u0e40' # 0xE0 -> THAI CHARACTER SARA E + '\u0e41' # 0xE1 -> THAI CHARACTER SARA AE + '\u0e42' # 0xE2 -> THAI CHARACTER SARA O + '\u0e43' # 0xE3 -> THAI CHARACTER SARA AI MAIMUAN + '\u0e44' # 0xE4 -> THAI CHARACTER SARA AI MAIMALAI + '\u0e45' # 0xE5 -> THAI CHARACTER LAKKHANGYAO + '\u0e46' # 0xE6 -> THAI CHARACTER MAIYAMOK + '\u0e47' # 0xE7 -> THAI CHARACTER MAITAIKHU + '\u0e48' # 0xE8 -> THAI CHARACTER MAI EK + '\u0e49' # 0xE9 -> THAI CHARACTER MAI THO + '\u0e4a' # 0xEA -> THAI CHARACTER MAI TRI + '\u0e4b' # 0xEB -> THAI CHARACTER MAI CHATTAWA + '\u0e4c' # 0xEC -> THAI CHARACTER THANTHAKHAT + '\u0e4d' # 0xED -> THAI CHARACTER NIKHAHIT + '\u0e4e' # 0xEE -> THAI CHARACTER YAMAKKAN + '\u0e4f' # 0xEF -> THAI CHARACTER FONGMAN + '\u0e50' # 0xF0 -> THAI DIGIT ZERO + '\u0e51' # 0xF1 -> THAI DIGIT ONE + '\u0e52' # 0xF2 -> THAI DIGIT TWO + '\u0e53' # 0xF3 -> THAI DIGIT THREE + '\u0e54' # 0xF4 -> THAI DIGIT FOUR + '\u0e55' # 0xF5 -> THAI DIGIT FIVE + '\u0e56' # 0xF6 -> THAI DIGIT SIX + '\u0e57' # 0xF7 -> THAI DIGIT SEVEN + '\u0e58' # 0xF8 -> THAI DIGIT EIGHT + '\u0e59' # 0xF9 -> THAI DIGIT NINE + '\u0e5a' # 0xFA -> THAI CHARACTER ANGKHANKHU + '\u0e5b' # 0xFB -> THAI CHARACTER KHOMUT + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_13.py b/my_env/Lib/encodings/iso8859_13.py new file mode 100644 index 000000000..6f8eab2b8 --- /dev/null +++ b/my_env/Lib/encodings/iso8859_13.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_13 generated from 'MAPPINGS/ISO8859/8859-13.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-13', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u201d' # 0xA1 -> RIGHT DOUBLE QUOTATION MARK + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa4' # 0xA4 -> CURRENCY SIGN + '\u201e' # 0xA5 -> DOUBLE LOW-9 QUOTATION MARK + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xd8' # 0xA8 -> LATIN CAPITAL LETTER O WITH STROKE + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u0156' # 0xAA -> LATIN CAPITAL LETTER R WITH CEDILLA + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\xc6' # 0xAF -> LATIN CAPITAL LETTER AE + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\u201c' # 0xB4 -> LEFT DOUBLE QUOTATION MARK + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\xf8' # 0xB8 -> LATIN SMALL LETTER O WITH STROKE + '\xb9' # 0xB9 -> SUPERSCRIPT ONE + '\u0157' # 0xBA -> LATIN SMALL LETTER R WITH CEDILLA + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + '\xe6' # 0xBF -> LATIN SMALL LETTER AE + '\u0104' # 0xC0 -> LATIN CAPITAL LETTER A WITH OGONEK + '\u012e' # 0xC1 -> LATIN CAPITAL LETTER I WITH OGONEK + '\u0100' # 0xC2 -> LATIN CAPITAL LETTER A WITH MACRON + '\u0106' # 0xC3 -> LATIN CAPITAL LETTER C WITH ACUTE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\u0118' # 0xC6 -> LATIN CAPITAL LETTER E WITH OGONEK + '\u0112' # 0xC7 -> LATIN CAPITAL LETTER E WITH MACRON + '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\u0179' # 0xCA -> LATIN CAPITAL LETTER Z WITH ACUTE + '\u0116' # 0xCB -> LATIN CAPITAL LETTER E WITH DOT ABOVE + '\u0122' # 0xCC -> LATIN CAPITAL LETTER G WITH CEDILLA + '\u0136' # 0xCD -> LATIN CAPITAL LETTER K WITH CEDILLA + '\u012a' # 0xCE -> LATIN CAPITAL LETTER I WITH MACRON + '\u013b' # 0xCF -> LATIN CAPITAL LETTER L WITH CEDILLA + '\u0160' # 0xD0 -> LATIN CAPITAL LETTER S WITH CARON + '\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE + '\u0145' # 0xD2 -> LATIN CAPITAL LETTER N WITH CEDILLA + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\u014c' # 0xD4 -> LATIN CAPITAL LETTER O WITH MACRON + '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\u0172' # 0xD8 -> LATIN CAPITAL LETTER U WITH OGONEK + '\u0141' # 0xD9 -> LATIN CAPITAL LETTER L WITH STROKE + '\u015a' # 0xDA -> LATIN CAPITAL LETTER S WITH ACUTE + '\u016a' # 0xDB -> LATIN CAPITAL LETTER U WITH MACRON + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\u017b' # 0xDD -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + '\u017d' # 0xDE -> LATIN CAPITAL LETTER Z WITH CARON + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S (German) + '\u0105' # 0xE0 -> LATIN SMALL LETTER A WITH OGONEK + '\u012f' # 0xE1 -> LATIN SMALL LETTER I WITH OGONEK + '\u0101' # 0xE2 -> LATIN SMALL LETTER A WITH MACRON + '\u0107' # 0xE3 -> LATIN SMALL LETTER C WITH ACUTE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + '\u0119' # 0xE6 -> LATIN SMALL LETTER E WITH OGONEK + '\u0113' # 0xE7 -> LATIN SMALL LETTER E WITH MACRON + '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\u017a' # 0xEA -> LATIN SMALL LETTER Z WITH ACUTE + '\u0117' # 0xEB -> LATIN SMALL LETTER E WITH DOT ABOVE + '\u0123' # 0xEC -> LATIN SMALL LETTER G WITH CEDILLA + '\u0137' # 0xED -> LATIN SMALL LETTER K WITH CEDILLA + '\u012b' # 0xEE -> LATIN SMALL LETTER I WITH MACRON + '\u013c' # 0xEF -> LATIN SMALL LETTER L WITH CEDILLA + '\u0161' # 0xF0 -> LATIN SMALL LETTER S WITH CARON + '\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE + '\u0146' # 0xF2 -> LATIN SMALL LETTER N WITH CEDILLA + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\u014d' # 0xF4 -> LATIN SMALL LETTER O WITH MACRON + '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0xF7 -> DIVISION SIGN + '\u0173' # 0xF8 -> LATIN SMALL LETTER U WITH OGONEK + '\u0142' # 0xF9 -> LATIN SMALL LETTER L WITH STROKE + '\u015b' # 0xFA -> LATIN SMALL LETTER S WITH ACUTE + '\u016b' # 0xFB -> LATIN SMALL LETTER U WITH MACRON + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\u017c' # 0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE + '\u017e' # 0xFE -> LATIN SMALL LETTER Z WITH CARON + '\u2019' # 0xFF -> RIGHT SINGLE QUOTATION MARK +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_14.py b/my_env/Lib/encodings/iso8859_14.py new file mode 100644 index 000000000..7568d4ee1 --- /dev/null +++ b/my_env/Lib/encodings/iso8859_14.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_14 generated from 'MAPPINGS/ISO8859/8859-14.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-14', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u1e02' # 0xA1 -> LATIN CAPITAL LETTER B WITH DOT ABOVE + '\u1e03' # 0xA2 -> LATIN SMALL LETTER B WITH DOT ABOVE + '\xa3' # 0xA3 -> POUND SIGN + '\u010a' # 0xA4 -> LATIN CAPITAL LETTER C WITH DOT ABOVE + '\u010b' # 0xA5 -> LATIN SMALL LETTER C WITH DOT ABOVE + '\u1e0a' # 0xA6 -> LATIN CAPITAL LETTER D WITH DOT ABOVE + '\xa7' # 0xA7 -> SECTION SIGN + '\u1e80' # 0xA8 -> LATIN CAPITAL LETTER W WITH GRAVE + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u1e82' # 0xAA -> LATIN CAPITAL LETTER W WITH ACUTE + '\u1e0b' # 0xAB -> LATIN SMALL LETTER D WITH DOT ABOVE + '\u1ef2' # 0xAC -> LATIN CAPITAL LETTER Y WITH GRAVE + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\u0178' # 0xAF -> LATIN CAPITAL LETTER Y WITH DIAERESIS + '\u1e1e' # 0xB0 -> LATIN CAPITAL LETTER F WITH DOT ABOVE + '\u1e1f' # 0xB1 -> LATIN SMALL LETTER F WITH DOT ABOVE + '\u0120' # 0xB2 -> LATIN CAPITAL LETTER G WITH DOT ABOVE + '\u0121' # 0xB3 -> LATIN SMALL LETTER G WITH DOT ABOVE + '\u1e40' # 0xB4 -> LATIN CAPITAL LETTER M WITH DOT ABOVE + '\u1e41' # 0xB5 -> LATIN SMALL LETTER M WITH DOT ABOVE + '\xb6' # 0xB6 -> PILCROW SIGN + '\u1e56' # 0xB7 -> LATIN CAPITAL LETTER P WITH DOT ABOVE + '\u1e81' # 0xB8 -> LATIN SMALL LETTER W WITH GRAVE + '\u1e57' # 0xB9 -> LATIN SMALL LETTER P WITH DOT ABOVE + '\u1e83' # 0xBA -> LATIN SMALL LETTER W WITH ACUTE + '\u1e60' # 0xBB -> LATIN CAPITAL LETTER S WITH DOT ABOVE + '\u1ef3' # 0xBC -> LATIN SMALL LETTER Y WITH GRAVE + '\u1e84' # 0xBD -> LATIN CAPITAL LETTER W WITH DIAERESIS + '\u1e85' # 0xBE -> LATIN SMALL LETTER W WITH DIAERESIS + '\u1e61' # 0xBF -> LATIN SMALL LETTER S WITH DOT ABOVE + '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\u0174' # 0xD0 -> LATIN CAPITAL LETTER W WITH CIRCUMFLEX + '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\u1e6a' # 0xD7 -> LATIN CAPITAL LETTER T WITH DOT ABOVE + '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + '\u0176' # 0xDE -> LATIN CAPITAL LETTER Y WITH CIRCUMFLEX + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe6' # 0xE6 -> LATIN SMALL LETTER AE + '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + '\u0175' # 0xF0 -> LATIN SMALL LETTER W WITH CIRCUMFLEX + '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\u1e6b' # 0xF7 -> LATIN SMALL LETTER T WITH DOT ABOVE + '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + '\u0177' # 0xFE -> LATIN SMALL LETTER Y WITH CIRCUMFLEX + '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_15.py b/my_env/Lib/encodings/iso8859_15.py new file mode 100644 index 000000000..43bdecd44 --- /dev/null +++ b/my_env/Lib/encodings/iso8859_15.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_15 generated from 'MAPPINGS/ISO8859/8859-15.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-15', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\u20ac' # 0xA4 -> EURO SIGN + '\xa5' # 0xA5 -> YEN SIGN + '\u0160' # 0xA6 -> LATIN CAPITAL LETTER S WITH CARON + '\xa7' # 0xA7 -> SECTION SIGN + '\u0161' # 0xA8 -> LATIN SMALL LETTER S WITH CARON + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\xaf' # 0xAF -> MACRON + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\u017d' # 0xB4 -> LATIN CAPITAL LETTER Z WITH CARON + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\u017e' # 0xB8 -> LATIN SMALL LETTER Z WITH CARON + '\xb9' # 0xB9 -> SUPERSCRIPT ONE + '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u0152' # 0xBC -> LATIN CAPITAL LIGATURE OE + '\u0153' # 0xBD -> LATIN SMALL LIGATURE OE + '\u0178' # 0xBE -> LATIN CAPITAL LETTER Y WITH DIAERESIS + '\xbf' # 0xBF -> INVERTED QUESTION MARK + '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH + '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xde' # 0xDE -> LATIN CAPITAL LETTER THORN + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe6' # 0xE6 -> LATIN SMALL LETTER AE + '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + '\xf0' # 0xF0 -> LATIN SMALL LETTER ETH + '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0xF7 -> DIVISION SIGN + '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + '\xfe' # 0xFE -> LATIN SMALL LETTER THORN + '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_16.py b/my_env/Lib/encodings/iso8859_16.py new file mode 100644 index 000000000..e70c96e33 --- /dev/null +++ b/my_env/Lib/encodings/iso8859_16.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_16 generated from 'MAPPINGS/ISO8859/8859-16.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-16', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u0104' # 0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK + '\u0105' # 0xA2 -> LATIN SMALL LETTER A WITH OGONEK + '\u0141' # 0xA3 -> LATIN CAPITAL LETTER L WITH STROKE + '\u20ac' # 0xA4 -> EURO SIGN + '\u201e' # 0xA5 -> DOUBLE LOW-9 QUOTATION MARK + '\u0160' # 0xA6 -> LATIN CAPITAL LETTER S WITH CARON + '\xa7' # 0xA7 -> SECTION SIGN + '\u0161' # 0xA8 -> LATIN SMALL LETTER S WITH CARON + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u0218' # 0xAA -> LATIN CAPITAL LETTER S WITH COMMA BELOW + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u0179' # 0xAC -> LATIN CAPITAL LETTER Z WITH ACUTE + '\xad' # 0xAD -> SOFT HYPHEN + '\u017a' # 0xAE -> LATIN SMALL LETTER Z WITH ACUTE + '\u017b' # 0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\u010c' # 0xB2 -> LATIN CAPITAL LETTER C WITH CARON + '\u0142' # 0xB3 -> LATIN SMALL LETTER L WITH STROKE + '\u017d' # 0xB4 -> LATIN CAPITAL LETTER Z WITH CARON + '\u201d' # 0xB5 -> RIGHT DOUBLE QUOTATION MARK + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\u017e' # 0xB8 -> LATIN SMALL LETTER Z WITH CARON + '\u010d' # 0xB9 -> LATIN SMALL LETTER C WITH CARON + '\u0219' # 0xBA -> LATIN SMALL LETTER S WITH COMMA BELOW + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u0152' # 0xBC -> LATIN CAPITAL LIGATURE OE + '\u0153' # 0xBD -> LATIN SMALL LIGATURE OE + '\u0178' # 0xBE -> LATIN CAPITAL LETTER Y WITH DIAERESIS + '\u017c' # 0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE + '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\u0106' # 0xC5 -> LATIN CAPITAL LETTER C WITH ACUTE + '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE + '\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE + '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\u0150' # 0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\u015a' # 0xD7 -> LATIN CAPITAL LETTER S WITH ACUTE + '\u0170' # 0xD8 -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\u0118' # 0xDD -> LATIN CAPITAL LETTER E WITH OGONEK + '\u021a' # 0xDE -> LATIN CAPITAL LETTER T WITH COMMA BELOW + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\u0107' # 0xE5 -> LATIN SMALL LETTER C WITH ACUTE + '\xe6' # 0xE6 -> LATIN SMALL LETTER AE + '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + '\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE + '\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE + '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\u0151' # 0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\u015b' # 0xF7 -> LATIN SMALL LETTER S WITH ACUTE + '\u0171' # 0xF8 -> LATIN SMALL LETTER U WITH DOUBLE ACUTE + '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\u0119' # 0xFD -> LATIN SMALL LETTER E WITH OGONEK + '\u021b' # 0xFE -> LATIN SMALL LETTER T WITH COMMA BELOW + '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_2.py b/my_env/Lib/encodings/iso8859_2.py new file mode 100644 index 000000000..3698747b4 --- /dev/null +++ b/my_env/Lib/encodings/iso8859_2.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_2 generated from 'MAPPINGS/ISO8859/8859-2.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-2', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u0104' # 0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK + '\u02d8' # 0xA2 -> BREVE + '\u0141' # 0xA3 -> LATIN CAPITAL LETTER L WITH STROKE + '\xa4' # 0xA4 -> CURRENCY SIGN + '\u013d' # 0xA5 -> LATIN CAPITAL LETTER L WITH CARON + '\u015a' # 0xA6 -> LATIN CAPITAL LETTER S WITH ACUTE + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\u0160' # 0xA9 -> LATIN CAPITAL LETTER S WITH CARON + '\u015e' # 0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA + '\u0164' # 0xAB -> LATIN CAPITAL LETTER T WITH CARON + '\u0179' # 0xAC -> LATIN CAPITAL LETTER Z WITH ACUTE + '\xad' # 0xAD -> SOFT HYPHEN + '\u017d' # 0xAE -> LATIN CAPITAL LETTER Z WITH CARON + '\u017b' # 0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + '\xb0' # 0xB0 -> DEGREE SIGN + '\u0105' # 0xB1 -> LATIN SMALL LETTER A WITH OGONEK + '\u02db' # 0xB2 -> OGONEK + '\u0142' # 0xB3 -> LATIN SMALL LETTER L WITH STROKE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\u013e' # 0xB5 -> LATIN SMALL LETTER L WITH CARON + '\u015b' # 0xB6 -> LATIN SMALL LETTER S WITH ACUTE + '\u02c7' # 0xB7 -> CARON + '\xb8' # 0xB8 -> CEDILLA + '\u0161' # 0xB9 -> LATIN SMALL LETTER S WITH CARON + '\u015f' # 0xBA -> LATIN SMALL LETTER S WITH CEDILLA + '\u0165' # 0xBB -> LATIN SMALL LETTER T WITH CARON + '\u017a' # 0xBC -> LATIN SMALL LETTER Z WITH ACUTE + '\u02dd' # 0xBD -> DOUBLE ACUTE ACCENT + '\u017e' # 0xBE -> LATIN SMALL LETTER Z WITH CARON + '\u017c' # 0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE + '\u0154' # 0xC0 -> LATIN CAPITAL LETTER R WITH ACUTE + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\u0139' # 0xC5 -> LATIN CAPITAL LETTER L WITH ACUTE + '\u0106' # 0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE + '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\u0118' # 0xCA -> LATIN CAPITAL LETTER E WITH OGONEK + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\u011a' # 0xCC -> LATIN CAPITAL LETTER E WITH CARON + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\u010e' # 0xCF -> LATIN CAPITAL LETTER D WITH CARON + '\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE + '\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE + '\u0147' # 0xD2 -> LATIN CAPITAL LETTER N WITH CARON + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\u0150' # 0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\u0158' # 0xD8 -> LATIN CAPITAL LETTER R WITH CARON + '\u016e' # 0xD9 -> LATIN CAPITAL LETTER U WITH RING ABOVE + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\u0170' # 0xDB -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + '\u0162' # 0xDE -> LATIN CAPITAL LETTER T WITH CEDILLA + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + '\u0155' # 0xE0 -> LATIN SMALL LETTER R WITH ACUTE + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\u013a' # 0xE5 -> LATIN SMALL LETTER L WITH ACUTE + '\u0107' # 0xE6 -> LATIN SMALL LETTER C WITH ACUTE + '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\u0119' # 0xEA -> LATIN SMALL LETTER E WITH OGONEK + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\u011b' # 0xEC -> LATIN SMALL LETTER E WITH CARON + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\u010f' # 0xEF -> LATIN SMALL LETTER D WITH CARON + '\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE + '\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE + '\u0148' # 0xF2 -> LATIN SMALL LETTER N WITH CARON + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\u0151' # 0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0xF7 -> DIVISION SIGN + '\u0159' # 0xF8 -> LATIN SMALL LETTER R WITH CARON + '\u016f' # 0xF9 -> LATIN SMALL LETTER U WITH RING ABOVE + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\u0171' # 0xFB -> LATIN SMALL LETTER U WITH DOUBLE ACUTE + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + '\u0163' # 0xFE -> LATIN SMALL LETTER T WITH CEDILLA + '\u02d9' # 0xFF -> DOT ABOVE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_3.py b/my_env/Lib/encodings/iso8859_3.py new file mode 100644 index 000000000..96d3063ea --- /dev/null +++ b/my_env/Lib/encodings/iso8859_3.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_3 generated from 'MAPPINGS/ISO8859/8859-3.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-3', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u0126' # 0xA1 -> LATIN CAPITAL LETTER H WITH STROKE + '\u02d8' # 0xA2 -> BREVE + '\xa3' # 0xA3 -> POUND SIGN + '\xa4' # 0xA4 -> CURRENCY SIGN + '\ufffe' + '\u0124' # 0xA6 -> LATIN CAPITAL LETTER H WITH CIRCUMFLEX + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\u0130' # 0xA9 -> LATIN CAPITAL LETTER I WITH DOT ABOVE + '\u015e' # 0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA + '\u011e' # 0xAB -> LATIN CAPITAL LETTER G WITH BREVE + '\u0134' # 0xAC -> LATIN CAPITAL LETTER J WITH CIRCUMFLEX + '\xad' # 0xAD -> SOFT HYPHEN + '\ufffe' + '\u017b' # 0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + '\xb0' # 0xB0 -> DEGREE SIGN + '\u0127' # 0xB1 -> LATIN SMALL LETTER H WITH STROKE + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\xb5' # 0xB5 -> MICRO SIGN + '\u0125' # 0xB6 -> LATIN SMALL LETTER H WITH CIRCUMFLEX + '\xb7' # 0xB7 -> MIDDLE DOT + '\xb8' # 0xB8 -> CEDILLA + '\u0131' # 0xB9 -> LATIN SMALL LETTER DOTLESS I + '\u015f' # 0xBA -> LATIN SMALL LETTER S WITH CEDILLA + '\u011f' # 0xBB -> LATIN SMALL LETTER G WITH BREVE + '\u0135' # 0xBC -> LATIN SMALL LETTER J WITH CIRCUMFLEX + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\ufffe' + '\u017c' # 0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE + '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\ufffe' + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\u010a' # 0xC5 -> LATIN CAPITAL LETTER C WITH DOT ABOVE + '\u0108' # 0xC6 -> LATIN CAPITAL LETTER C WITH CIRCUMFLEX + '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\ufffe' + '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\u0120' # 0xD5 -> LATIN CAPITAL LETTER G WITH DOT ABOVE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\u011c' # 0xD8 -> LATIN CAPITAL LETTER G WITH CIRCUMFLEX + '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\u016c' # 0xDD -> LATIN CAPITAL LETTER U WITH BREVE + '\u015c' # 0xDE -> LATIN CAPITAL LETTER S WITH CIRCUMFLEX + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\ufffe' + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\u010b' # 0xE5 -> LATIN SMALL LETTER C WITH DOT ABOVE + '\u0109' # 0xE6 -> LATIN SMALL LETTER C WITH CIRCUMFLEX + '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + '\ufffe' + '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\u0121' # 0xF5 -> LATIN SMALL LETTER G WITH DOT ABOVE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0xF7 -> DIVISION SIGN + '\u011d' # 0xF8 -> LATIN SMALL LETTER G WITH CIRCUMFLEX + '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\u016d' # 0xFD -> LATIN SMALL LETTER U WITH BREVE + '\u015d' # 0xFE -> LATIN SMALL LETTER S WITH CIRCUMFLEX + '\u02d9' # 0xFF -> DOT ABOVE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_4.py b/my_env/Lib/encodings/iso8859_4.py new file mode 100644 index 000000000..65c1e00f3 --- /dev/null +++ b/my_env/Lib/encodings/iso8859_4.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_4 generated from 'MAPPINGS/ISO8859/8859-4.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-4', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u0104' # 0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK + '\u0138' # 0xA2 -> LATIN SMALL LETTER KRA + '\u0156' # 0xA3 -> LATIN CAPITAL LETTER R WITH CEDILLA + '\xa4' # 0xA4 -> CURRENCY SIGN + '\u0128' # 0xA5 -> LATIN CAPITAL LETTER I WITH TILDE + '\u013b' # 0xA6 -> LATIN CAPITAL LETTER L WITH CEDILLA + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\u0160' # 0xA9 -> LATIN CAPITAL LETTER S WITH CARON + '\u0112' # 0xAA -> LATIN CAPITAL LETTER E WITH MACRON + '\u0122' # 0xAB -> LATIN CAPITAL LETTER G WITH CEDILLA + '\u0166' # 0xAC -> LATIN CAPITAL LETTER T WITH STROKE + '\xad' # 0xAD -> SOFT HYPHEN + '\u017d' # 0xAE -> LATIN CAPITAL LETTER Z WITH CARON + '\xaf' # 0xAF -> MACRON + '\xb0' # 0xB0 -> DEGREE SIGN + '\u0105' # 0xB1 -> LATIN SMALL LETTER A WITH OGONEK + '\u02db' # 0xB2 -> OGONEK + '\u0157' # 0xB3 -> LATIN SMALL LETTER R WITH CEDILLA + '\xb4' # 0xB4 -> ACUTE ACCENT + '\u0129' # 0xB5 -> LATIN SMALL LETTER I WITH TILDE + '\u013c' # 0xB6 -> LATIN SMALL LETTER L WITH CEDILLA + '\u02c7' # 0xB7 -> CARON + '\xb8' # 0xB8 -> CEDILLA + '\u0161' # 0xB9 -> LATIN SMALL LETTER S WITH CARON + '\u0113' # 0xBA -> LATIN SMALL LETTER E WITH MACRON + '\u0123' # 0xBB -> LATIN SMALL LETTER G WITH CEDILLA + '\u0167' # 0xBC -> LATIN SMALL LETTER T WITH STROKE + '\u014a' # 0xBD -> LATIN CAPITAL LETTER ENG + '\u017e' # 0xBE -> LATIN SMALL LETTER Z WITH CARON + '\u014b' # 0xBF -> LATIN SMALL LETTER ENG + '\u0100' # 0xC0 -> LATIN CAPITAL LETTER A WITH MACRON + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + '\u012e' # 0xC7 -> LATIN CAPITAL LETTER I WITH OGONEK + '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\u0118' # 0xCA -> LATIN CAPITAL LETTER E WITH OGONEK + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\u0116' # 0xCC -> LATIN CAPITAL LETTER E WITH DOT ABOVE + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\u012a' # 0xCF -> LATIN CAPITAL LETTER I WITH MACRON + '\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE + '\u0145' # 0xD1 -> LATIN CAPITAL LETTER N WITH CEDILLA + '\u014c' # 0xD2 -> LATIN CAPITAL LETTER O WITH MACRON + '\u0136' # 0xD3 -> LATIN CAPITAL LETTER K WITH CEDILLA + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + '\u0172' # 0xD9 -> LATIN CAPITAL LETTER U WITH OGONEK + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\u0168' # 0xDD -> LATIN CAPITAL LETTER U WITH TILDE + '\u016a' # 0xDE -> LATIN CAPITAL LETTER U WITH MACRON + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + '\u0101' # 0xE0 -> LATIN SMALL LETTER A WITH MACRON + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe6' # 0xE6 -> LATIN SMALL LETTER AE + '\u012f' # 0xE7 -> LATIN SMALL LETTER I WITH OGONEK + '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\u0119' # 0xEA -> LATIN SMALL LETTER E WITH OGONEK + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\u0117' # 0xEC -> LATIN SMALL LETTER E WITH DOT ABOVE + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\u012b' # 0xEF -> LATIN SMALL LETTER I WITH MACRON + '\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE + '\u0146' # 0xF1 -> LATIN SMALL LETTER N WITH CEDILLA + '\u014d' # 0xF2 -> LATIN SMALL LETTER O WITH MACRON + '\u0137' # 0xF3 -> LATIN SMALL LETTER K WITH CEDILLA + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0xF7 -> DIVISION SIGN + '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + '\u0173' # 0xF9 -> LATIN SMALL LETTER U WITH OGONEK + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\u0169' # 0xFD -> LATIN SMALL LETTER U WITH TILDE + '\u016b' # 0xFE -> LATIN SMALL LETTER U WITH MACRON + '\u02d9' # 0xFF -> DOT ABOVE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_5.py b/my_env/Lib/encodings/iso8859_5.py new file mode 100644 index 000000000..a3c868a50 --- /dev/null +++ b/my_env/Lib/encodings/iso8859_5.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_5 generated from 'MAPPINGS/ISO8859/8859-5.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-5', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u0401' # 0xA1 -> CYRILLIC CAPITAL LETTER IO + '\u0402' # 0xA2 -> CYRILLIC CAPITAL LETTER DJE + '\u0403' # 0xA3 -> CYRILLIC CAPITAL LETTER GJE + '\u0404' # 0xA4 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE + '\u0405' # 0xA5 -> CYRILLIC CAPITAL LETTER DZE + '\u0406' # 0xA6 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + '\u0407' # 0xA7 -> CYRILLIC CAPITAL LETTER YI + '\u0408' # 0xA8 -> CYRILLIC CAPITAL LETTER JE + '\u0409' # 0xA9 -> CYRILLIC CAPITAL LETTER LJE + '\u040a' # 0xAA -> CYRILLIC CAPITAL LETTER NJE + '\u040b' # 0xAB -> CYRILLIC CAPITAL LETTER TSHE + '\u040c' # 0xAC -> CYRILLIC CAPITAL LETTER KJE + '\xad' # 0xAD -> SOFT HYPHEN + '\u040e' # 0xAE -> CYRILLIC CAPITAL LETTER SHORT U + '\u040f' # 0xAF -> CYRILLIC CAPITAL LETTER DZHE + '\u0410' # 0xB0 -> CYRILLIC CAPITAL LETTER A + '\u0411' # 0xB1 -> CYRILLIC CAPITAL LETTER BE + '\u0412' # 0xB2 -> CYRILLIC CAPITAL LETTER VE + '\u0413' # 0xB3 -> CYRILLIC CAPITAL LETTER GHE + '\u0414' # 0xB4 -> CYRILLIC CAPITAL LETTER DE + '\u0415' # 0xB5 -> CYRILLIC CAPITAL LETTER IE + '\u0416' # 0xB6 -> CYRILLIC CAPITAL LETTER ZHE + '\u0417' # 0xB7 -> CYRILLIC CAPITAL LETTER ZE + '\u0418' # 0xB8 -> CYRILLIC CAPITAL LETTER I + '\u0419' # 0xB9 -> CYRILLIC CAPITAL LETTER SHORT I + '\u041a' # 0xBA -> CYRILLIC CAPITAL LETTER KA + '\u041b' # 0xBB -> CYRILLIC CAPITAL LETTER EL + '\u041c' # 0xBC -> CYRILLIC CAPITAL LETTER EM + '\u041d' # 0xBD -> CYRILLIC CAPITAL LETTER EN + '\u041e' # 0xBE -> CYRILLIC CAPITAL LETTER O + '\u041f' # 0xBF -> CYRILLIC CAPITAL LETTER PE + '\u0420' # 0xC0 -> CYRILLIC CAPITAL LETTER ER + '\u0421' # 0xC1 -> CYRILLIC CAPITAL LETTER ES + '\u0422' # 0xC2 -> CYRILLIC CAPITAL LETTER TE + '\u0423' # 0xC3 -> CYRILLIC CAPITAL LETTER U + '\u0424' # 0xC4 -> CYRILLIC CAPITAL LETTER EF + '\u0425' # 0xC5 -> CYRILLIC CAPITAL LETTER HA + '\u0426' # 0xC6 -> CYRILLIC CAPITAL LETTER TSE + '\u0427' # 0xC7 -> CYRILLIC CAPITAL LETTER CHE + '\u0428' # 0xC8 -> CYRILLIC CAPITAL LETTER SHA + '\u0429' # 0xC9 -> CYRILLIC CAPITAL LETTER SHCHA + '\u042a' # 0xCA -> CYRILLIC CAPITAL LETTER HARD SIGN + '\u042b' # 0xCB -> CYRILLIC CAPITAL LETTER YERU + '\u042c' # 0xCC -> CYRILLIC CAPITAL LETTER SOFT SIGN + '\u042d' # 0xCD -> CYRILLIC CAPITAL LETTER E + '\u042e' # 0xCE -> CYRILLIC CAPITAL LETTER YU + '\u042f' # 0xCF -> CYRILLIC CAPITAL LETTER YA + '\u0430' # 0xD0 -> CYRILLIC SMALL LETTER A + '\u0431' # 0xD1 -> CYRILLIC SMALL LETTER BE + '\u0432' # 0xD2 -> CYRILLIC SMALL LETTER VE + '\u0433' # 0xD3 -> CYRILLIC SMALL LETTER GHE + '\u0434' # 0xD4 -> CYRILLIC SMALL LETTER DE + '\u0435' # 0xD5 -> CYRILLIC SMALL LETTER IE + '\u0436' # 0xD6 -> CYRILLIC SMALL LETTER ZHE + '\u0437' # 0xD7 -> CYRILLIC SMALL LETTER ZE + '\u0438' # 0xD8 -> CYRILLIC SMALL LETTER I + '\u0439' # 0xD9 -> CYRILLIC SMALL LETTER SHORT I + '\u043a' # 0xDA -> CYRILLIC SMALL LETTER KA + '\u043b' # 0xDB -> CYRILLIC SMALL LETTER EL + '\u043c' # 0xDC -> CYRILLIC SMALL LETTER EM + '\u043d' # 0xDD -> CYRILLIC SMALL LETTER EN + '\u043e' # 0xDE -> CYRILLIC SMALL LETTER O + '\u043f' # 0xDF -> CYRILLIC SMALL LETTER PE + '\u0440' # 0xE0 -> CYRILLIC SMALL LETTER ER + '\u0441' # 0xE1 -> CYRILLIC SMALL LETTER ES + '\u0442' # 0xE2 -> CYRILLIC SMALL LETTER TE + '\u0443' # 0xE3 -> CYRILLIC SMALL LETTER U + '\u0444' # 0xE4 -> CYRILLIC SMALL LETTER EF + '\u0445' # 0xE5 -> CYRILLIC SMALL LETTER HA + '\u0446' # 0xE6 -> CYRILLIC SMALL LETTER TSE + '\u0447' # 0xE7 -> CYRILLIC SMALL LETTER CHE + '\u0448' # 0xE8 -> CYRILLIC SMALL LETTER SHA + '\u0449' # 0xE9 -> CYRILLIC SMALL LETTER SHCHA + '\u044a' # 0xEA -> CYRILLIC SMALL LETTER HARD SIGN + '\u044b' # 0xEB -> CYRILLIC SMALL LETTER YERU + '\u044c' # 0xEC -> CYRILLIC SMALL LETTER SOFT SIGN + '\u044d' # 0xED -> CYRILLIC SMALL LETTER E + '\u044e' # 0xEE -> CYRILLIC SMALL LETTER YU + '\u044f' # 0xEF -> CYRILLIC SMALL LETTER YA + '\u2116' # 0xF0 -> NUMERO SIGN + '\u0451' # 0xF1 -> CYRILLIC SMALL LETTER IO + '\u0452' # 0xF2 -> CYRILLIC SMALL LETTER DJE + '\u0453' # 0xF3 -> CYRILLIC SMALL LETTER GJE + '\u0454' # 0xF4 -> CYRILLIC SMALL LETTER UKRAINIAN IE + '\u0455' # 0xF5 -> CYRILLIC SMALL LETTER DZE + '\u0456' # 0xF6 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + '\u0457' # 0xF7 -> CYRILLIC SMALL LETTER YI + '\u0458' # 0xF8 -> CYRILLIC SMALL LETTER JE + '\u0459' # 0xF9 -> CYRILLIC SMALL LETTER LJE + '\u045a' # 0xFA -> CYRILLIC SMALL LETTER NJE + '\u045b' # 0xFB -> CYRILLIC SMALL LETTER TSHE + '\u045c' # 0xFC -> CYRILLIC SMALL LETTER KJE + '\xa7' # 0xFD -> SECTION SIGN + '\u045e' # 0xFE -> CYRILLIC SMALL LETTER SHORT U + '\u045f' # 0xFF -> CYRILLIC SMALL LETTER DZHE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_6.py b/my_env/Lib/encodings/iso8859_6.py new file mode 100644 index 000000000..b02ade6ea --- /dev/null +++ b/my_env/Lib/encodings/iso8859_6.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_6 generated from 'MAPPINGS/ISO8859/8859-6.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-6', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\ufffe' + '\ufffe' + '\ufffe' + '\xa4' # 0xA4 -> CURRENCY SIGN + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\u060c' # 0xAC -> ARABIC COMMA + '\xad' # 0xAD -> SOFT HYPHEN + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\u061b' # 0xBB -> ARABIC SEMICOLON + '\ufffe' + '\ufffe' + '\ufffe' + '\u061f' # 0xBF -> ARABIC QUESTION MARK + '\ufffe' + '\u0621' # 0xC1 -> ARABIC LETTER HAMZA + '\u0622' # 0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE + '\u0623' # 0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE + '\u0624' # 0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE + '\u0625' # 0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW + '\u0626' # 0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE + '\u0627' # 0xC7 -> ARABIC LETTER ALEF + '\u0628' # 0xC8 -> ARABIC LETTER BEH + '\u0629' # 0xC9 -> ARABIC LETTER TEH MARBUTA + '\u062a' # 0xCA -> ARABIC LETTER TEH + '\u062b' # 0xCB -> ARABIC LETTER THEH + '\u062c' # 0xCC -> ARABIC LETTER JEEM + '\u062d' # 0xCD -> ARABIC LETTER HAH + '\u062e' # 0xCE -> ARABIC LETTER KHAH + '\u062f' # 0xCF -> ARABIC LETTER DAL + '\u0630' # 0xD0 -> ARABIC LETTER THAL + '\u0631' # 0xD1 -> ARABIC LETTER REH + '\u0632' # 0xD2 -> ARABIC LETTER ZAIN + '\u0633' # 0xD3 -> ARABIC LETTER SEEN + '\u0634' # 0xD4 -> ARABIC LETTER SHEEN + '\u0635' # 0xD5 -> ARABIC LETTER SAD + '\u0636' # 0xD6 -> ARABIC LETTER DAD + '\u0637' # 0xD7 -> ARABIC LETTER TAH + '\u0638' # 0xD8 -> ARABIC LETTER ZAH + '\u0639' # 0xD9 -> ARABIC LETTER AIN + '\u063a' # 0xDA -> ARABIC LETTER GHAIN + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\u0640' # 0xE0 -> ARABIC TATWEEL + '\u0641' # 0xE1 -> ARABIC LETTER FEH + '\u0642' # 0xE2 -> ARABIC LETTER QAF + '\u0643' # 0xE3 -> ARABIC LETTER KAF + '\u0644' # 0xE4 -> ARABIC LETTER LAM + '\u0645' # 0xE5 -> ARABIC LETTER MEEM + '\u0646' # 0xE6 -> ARABIC LETTER NOON + '\u0647' # 0xE7 -> ARABIC LETTER HEH + '\u0648' # 0xE8 -> ARABIC LETTER WAW + '\u0649' # 0xE9 -> ARABIC LETTER ALEF MAKSURA + '\u064a' # 0xEA -> ARABIC LETTER YEH + '\u064b' # 0xEB -> ARABIC FATHATAN + '\u064c' # 0xEC -> ARABIC DAMMATAN + '\u064d' # 0xED -> ARABIC KASRATAN + '\u064e' # 0xEE -> ARABIC FATHA + '\u064f' # 0xEF -> ARABIC DAMMA + '\u0650' # 0xF0 -> ARABIC KASRA + '\u0651' # 0xF1 -> ARABIC SHADDA + '\u0652' # 0xF2 -> ARABIC SUKUN + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_7.py b/my_env/Lib/encodings/iso8859_7.py new file mode 100644 index 000000000..d7b39cbc3 --- /dev/null +++ b/my_env/Lib/encodings/iso8859_7.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_7 generated from 'MAPPINGS/ISO8859/8859-7.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-7', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u2018' # 0xA1 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0xA2 -> RIGHT SINGLE QUOTATION MARK + '\xa3' # 0xA3 -> POUND SIGN + '\u20ac' # 0xA4 -> EURO SIGN + '\u20af' # 0xA5 -> DRACHMA SIGN + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u037a' # 0xAA -> GREEK YPOGEGRAMMENI + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\ufffe' + '\u2015' # 0xAF -> HORIZONTAL BAR + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\u0384' # 0xB4 -> GREEK TONOS + '\u0385' # 0xB5 -> GREEK DIALYTIKA TONOS + '\u0386' # 0xB6 -> GREEK CAPITAL LETTER ALPHA WITH TONOS + '\xb7' # 0xB7 -> MIDDLE DOT + '\u0388' # 0xB8 -> GREEK CAPITAL LETTER EPSILON WITH TONOS + '\u0389' # 0xB9 -> GREEK CAPITAL LETTER ETA WITH TONOS + '\u038a' # 0xBA -> GREEK CAPITAL LETTER IOTA WITH TONOS + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u038c' # 0xBC -> GREEK CAPITAL LETTER OMICRON WITH TONOS + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\u038e' # 0xBE -> GREEK CAPITAL LETTER UPSILON WITH TONOS + '\u038f' # 0xBF -> GREEK CAPITAL LETTER OMEGA WITH TONOS + '\u0390' # 0xC0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + '\u0391' # 0xC1 -> GREEK CAPITAL LETTER ALPHA + '\u0392' # 0xC2 -> GREEK CAPITAL LETTER BETA + '\u0393' # 0xC3 -> GREEK CAPITAL LETTER GAMMA + '\u0394' # 0xC4 -> GREEK CAPITAL LETTER DELTA + '\u0395' # 0xC5 -> GREEK CAPITAL LETTER EPSILON + '\u0396' # 0xC6 -> GREEK CAPITAL LETTER ZETA + '\u0397' # 0xC7 -> GREEK CAPITAL LETTER ETA + '\u0398' # 0xC8 -> GREEK CAPITAL LETTER THETA + '\u0399' # 0xC9 -> GREEK CAPITAL LETTER IOTA + '\u039a' # 0xCA -> GREEK CAPITAL LETTER KAPPA + '\u039b' # 0xCB -> GREEK CAPITAL LETTER LAMDA + '\u039c' # 0xCC -> GREEK CAPITAL LETTER MU + '\u039d' # 0xCD -> GREEK CAPITAL LETTER NU + '\u039e' # 0xCE -> GREEK CAPITAL LETTER XI + '\u039f' # 0xCF -> GREEK CAPITAL LETTER OMICRON + '\u03a0' # 0xD0 -> GREEK CAPITAL LETTER PI + '\u03a1' # 0xD1 -> GREEK CAPITAL LETTER RHO + '\ufffe' + '\u03a3' # 0xD3 -> GREEK CAPITAL LETTER SIGMA + '\u03a4' # 0xD4 -> GREEK CAPITAL LETTER TAU + '\u03a5' # 0xD5 -> GREEK CAPITAL LETTER UPSILON + '\u03a6' # 0xD6 -> GREEK CAPITAL LETTER PHI + '\u03a7' # 0xD7 -> GREEK CAPITAL LETTER CHI + '\u03a8' # 0xD8 -> GREEK CAPITAL LETTER PSI + '\u03a9' # 0xD9 -> GREEK CAPITAL LETTER OMEGA + '\u03aa' # 0xDA -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + '\u03ab' # 0xDB -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + '\u03ac' # 0xDC -> GREEK SMALL LETTER ALPHA WITH TONOS + '\u03ad' # 0xDD -> GREEK SMALL LETTER EPSILON WITH TONOS + '\u03ae' # 0xDE -> GREEK SMALL LETTER ETA WITH TONOS + '\u03af' # 0xDF -> GREEK SMALL LETTER IOTA WITH TONOS + '\u03b0' # 0xE0 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + '\u03b1' # 0xE1 -> GREEK SMALL LETTER ALPHA + '\u03b2' # 0xE2 -> GREEK SMALL LETTER BETA + '\u03b3' # 0xE3 -> GREEK SMALL LETTER GAMMA + '\u03b4' # 0xE4 -> GREEK SMALL LETTER DELTA + '\u03b5' # 0xE5 -> GREEK SMALL LETTER EPSILON + '\u03b6' # 0xE6 -> GREEK SMALL LETTER ZETA + '\u03b7' # 0xE7 -> GREEK SMALL LETTER ETA + '\u03b8' # 0xE8 -> GREEK SMALL LETTER THETA + '\u03b9' # 0xE9 -> GREEK SMALL LETTER IOTA + '\u03ba' # 0xEA -> GREEK SMALL LETTER KAPPA + '\u03bb' # 0xEB -> GREEK SMALL LETTER LAMDA + '\u03bc' # 0xEC -> GREEK SMALL LETTER MU + '\u03bd' # 0xED -> GREEK SMALL LETTER NU + '\u03be' # 0xEE -> GREEK SMALL LETTER XI + '\u03bf' # 0xEF -> GREEK SMALL LETTER OMICRON + '\u03c0' # 0xF0 -> GREEK SMALL LETTER PI + '\u03c1' # 0xF1 -> GREEK SMALL LETTER RHO + '\u03c2' # 0xF2 -> GREEK SMALL LETTER FINAL SIGMA + '\u03c3' # 0xF3 -> GREEK SMALL LETTER SIGMA + '\u03c4' # 0xF4 -> GREEK SMALL LETTER TAU + '\u03c5' # 0xF5 -> GREEK SMALL LETTER UPSILON + '\u03c6' # 0xF6 -> GREEK SMALL LETTER PHI + '\u03c7' # 0xF7 -> GREEK SMALL LETTER CHI + '\u03c8' # 0xF8 -> GREEK SMALL LETTER PSI + '\u03c9' # 0xF9 -> GREEK SMALL LETTER OMEGA + '\u03ca' # 0xFA -> GREEK SMALL LETTER IOTA WITH DIALYTIKA + '\u03cb' # 0xFB -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA + '\u03cc' # 0xFC -> GREEK SMALL LETTER OMICRON WITH TONOS + '\u03cd' # 0xFD -> GREEK SMALL LETTER UPSILON WITH TONOS + '\u03ce' # 0xFE -> GREEK SMALL LETTER OMEGA WITH TONOS + '\ufffe' +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_8.py b/my_env/Lib/encodings/iso8859_8.py new file mode 100644 index 000000000..818490273 --- /dev/null +++ b/my_env/Lib/encodings/iso8859_8.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_8 generated from 'MAPPINGS/ISO8859/8859-8.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-8', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\ufffe' + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa4' # 0xA4 -> CURRENCY SIGN + '\xa5' # 0xA5 -> YEN SIGN + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\xd7' # 0xAA -> MULTIPLICATION SIGN + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\xaf' # 0xAF -> MACRON + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\xb8' # 0xB8 -> CEDILLA + '\xb9' # 0xB9 -> SUPERSCRIPT ONE + '\xf7' # 0xBA -> DIVISION SIGN + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\u2017' # 0xDF -> DOUBLE LOW LINE + '\u05d0' # 0xE0 -> HEBREW LETTER ALEF + '\u05d1' # 0xE1 -> HEBREW LETTER BET + '\u05d2' # 0xE2 -> HEBREW LETTER GIMEL + '\u05d3' # 0xE3 -> HEBREW LETTER DALET + '\u05d4' # 0xE4 -> HEBREW LETTER HE + '\u05d5' # 0xE5 -> HEBREW LETTER VAV + '\u05d6' # 0xE6 -> HEBREW LETTER ZAYIN + '\u05d7' # 0xE7 -> HEBREW LETTER HET + '\u05d8' # 0xE8 -> HEBREW LETTER TET + '\u05d9' # 0xE9 -> HEBREW LETTER YOD + '\u05da' # 0xEA -> HEBREW LETTER FINAL KAF + '\u05db' # 0xEB -> HEBREW LETTER KAF + '\u05dc' # 0xEC -> HEBREW LETTER LAMED + '\u05dd' # 0xED -> HEBREW LETTER FINAL MEM + '\u05de' # 0xEE -> HEBREW LETTER MEM + '\u05df' # 0xEF -> HEBREW LETTER FINAL NUN + '\u05e0' # 0xF0 -> HEBREW LETTER NUN + '\u05e1' # 0xF1 -> HEBREW LETTER SAMEKH + '\u05e2' # 0xF2 -> HEBREW LETTER AYIN + '\u05e3' # 0xF3 -> HEBREW LETTER FINAL PE + '\u05e4' # 0xF4 -> HEBREW LETTER PE + '\u05e5' # 0xF5 -> HEBREW LETTER FINAL TSADI + '\u05e6' # 0xF6 -> HEBREW LETTER TSADI + '\u05e7' # 0xF7 -> HEBREW LETTER QOF + '\u05e8' # 0xF8 -> HEBREW LETTER RESH + '\u05e9' # 0xF9 -> HEBREW LETTER SHIN + '\u05ea' # 0xFA -> HEBREW LETTER TAV + '\ufffe' + '\ufffe' + '\u200e' # 0xFD -> LEFT-TO-RIGHT MARK + '\u200f' # 0xFE -> RIGHT-TO-LEFT MARK + '\ufffe' +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/iso8859_9.py b/my_env/Lib/encodings/iso8859_9.py new file mode 100644 index 000000000..e539fddac --- /dev/null +++ b/my_env/Lib/encodings/iso8859_9.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_9 generated from 'MAPPINGS/ISO8859/8859-9.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-9', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa4' # 0xA4 -> CURRENCY SIGN + '\xa5' # 0xA5 -> YEN SIGN + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\xaf' # 0xAF -> MACRON + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\xb8' # 0xB8 -> CEDILLA + '\xb9' # 0xB9 -> SUPERSCRIPT ONE + '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + '\xbf' # 0xBF -> INVERTED QUESTION MARK + '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\u011e' # 0xD0 -> LATIN CAPITAL LETTER G WITH BREVE + '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\u0130' # 0xDD -> LATIN CAPITAL LETTER I WITH DOT ABOVE + '\u015e' # 0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe6' # 0xE6 -> LATIN SMALL LETTER AE + '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + '\u011f' # 0xF0 -> LATIN SMALL LETTER G WITH BREVE + '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0xF7 -> DIVISION SIGN + '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\u0131' # 0xFD -> LATIN SMALL LETTER DOTLESS I + '\u015f' # 0xFE -> LATIN SMALL LETTER S WITH CEDILLA + '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/johab.py b/my_env/Lib/encodings/johab.py new file mode 100644 index 000000000..512aeeb73 --- /dev/null +++ b/my_env/Lib/encodings/johab.py @@ -0,0 +1,39 @@ +# +# johab.py: Python Unicode Codec for JOHAB +# +# Written by Hye-Shik Chang +# + +import _codecs_kr, codecs +import _multibytecodec as mbc + +codec = _codecs_kr.getcodec('johab') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='johab', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/koi8_r.py b/my_env/Lib/encodings/koi8_r.py new file mode 100644 index 000000000..41ddde856 --- /dev/null +++ b/my_env/Lib/encodings/koi8_r.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec koi8_r generated from 'MAPPINGS/VENDORS/MISC/KOI8-R.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='koi8-r', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u2500' # 0x80 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u2502' # 0x81 -> BOX DRAWINGS LIGHT VERTICAL + '\u250c' # 0x82 -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2510' # 0x83 -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x84 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2518' # 0x85 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u251c' # 0x86 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2524' # 0x87 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u252c' # 0x88 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u2534' # 0x89 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u253c' # 0x8A -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u2580' # 0x8B -> UPPER HALF BLOCK + '\u2584' # 0x8C -> LOWER HALF BLOCK + '\u2588' # 0x8D -> FULL BLOCK + '\u258c' # 0x8E -> LEFT HALF BLOCK + '\u2590' # 0x8F -> RIGHT HALF BLOCK + '\u2591' # 0x90 -> LIGHT SHADE + '\u2592' # 0x91 -> MEDIUM SHADE + '\u2593' # 0x92 -> DARK SHADE + '\u2320' # 0x93 -> TOP HALF INTEGRAL + '\u25a0' # 0x94 -> BLACK SQUARE + '\u2219' # 0x95 -> BULLET OPERATOR + '\u221a' # 0x96 -> SQUARE ROOT + '\u2248' # 0x97 -> ALMOST EQUAL TO + '\u2264' # 0x98 -> LESS-THAN OR EQUAL TO + '\u2265' # 0x99 -> GREATER-THAN OR EQUAL TO + '\xa0' # 0x9A -> NO-BREAK SPACE + '\u2321' # 0x9B -> BOTTOM HALF INTEGRAL + '\xb0' # 0x9C -> DEGREE SIGN + '\xb2' # 0x9D -> SUPERSCRIPT TWO + '\xb7' # 0x9E -> MIDDLE DOT + '\xf7' # 0x9F -> DIVISION SIGN + '\u2550' # 0xA0 -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u2551' # 0xA1 -> BOX DRAWINGS DOUBLE VERTICAL + '\u2552' # 0xA2 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + '\u0451' # 0xA3 -> CYRILLIC SMALL LETTER IO + '\u2553' # 0xA4 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + '\u2554' # 0xA5 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2555' # 0xA6 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + '\u2556' # 0xA7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + '\u2557' # 0xA8 -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u2558' # 0xA9 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + '\u2559' # 0xAA -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + '\u255a' # 0xAB -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u255b' # 0xAC -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + '\u255c' # 0xAD -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + '\u255d' # 0xAE -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u255e' # 0xAF -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + '\u255f' # 0xB0 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + '\u2560' # 0xB1 -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2561' # 0xB2 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + '\u0401' # 0xB3 -> CYRILLIC CAPITAL LETTER IO + '\u2562' # 0xB4 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + '\u2563' # 0xB5 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2564' # 0xB6 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + '\u2565' # 0xB7 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + '\u2566' # 0xB8 -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2567' # 0xB9 -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + '\u2568' # 0xBA -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + '\u2569' # 0xBB -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u256a' # 0xBC -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + '\u256b' # 0xBD -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + '\u256c' # 0xBE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\xa9' # 0xBF -> COPYRIGHT SIGN + '\u044e' # 0xC0 -> CYRILLIC SMALL LETTER YU + '\u0430' # 0xC1 -> CYRILLIC SMALL LETTER A + '\u0431' # 0xC2 -> CYRILLIC SMALL LETTER BE + '\u0446' # 0xC3 -> CYRILLIC SMALL LETTER TSE + '\u0434' # 0xC4 -> CYRILLIC SMALL LETTER DE + '\u0435' # 0xC5 -> CYRILLIC SMALL LETTER IE + '\u0444' # 0xC6 -> CYRILLIC SMALL LETTER EF + '\u0433' # 0xC7 -> CYRILLIC SMALL LETTER GHE + '\u0445' # 0xC8 -> CYRILLIC SMALL LETTER HA + '\u0438' # 0xC9 -> CYRILLIC SMALL LETTER I + '\u0439' # 0xCA -> CYRILLIC SMALL LETTER SHORT I + '\u043a' # 0xCB -> CYRILLIC SMALL LETTER KA + '\u043b' # 0xCC -> CYRILLIC SMALL LETTER EL + '\u043c' # 0xCD -> CYRILLIC SMALL LETTER EM + '\u043d' # 0xCE -> CYRILLIC SMALL LETTER EN + '\u043e' # 0xCF -> CYRILLIC SMALL LETTER O + '\u043f' # 0xD0 -> CYRILLIC SMALL LETTER PE + '\u044f' # 0xD1 -> CYRILLIC SMALL LETTER YA + '\u0440' # 0xD2 -> CYRILLIC SMALL LETTER ER + '\u0441' # 0xD3 -> CYRILLIC SMALL LETTER ES + '\u0442' # 0xD4 -> CYRILLIC SMALL LETTER TE + '\u0443' # 0xD5 -> CYRILLIC SMALL LETTER U + '\u0436' # 0xD6 -> CYRILLIC SMALL LETTER ZHE + '\u0432' # 0xD7 -> CYRILLIC SMALL LETTER VE + '\u044c' # 0xD8 -> CYRILLIC SMALL LETTER SOFT SIGN + '\u044b' # 0xD9 -> CYRILLIC SMALL LETTER YERU + '\u0437' # 0xDA -> CYRILLIC SMALL LETTER ZE + '\u0448' # 0xDB -> CYRILLIC SMALL LETTER SHA + '\u044d' # 0xDC -> CYRILLIC SMALL LETTER E + '\u0449' # 0xDD -> CYRILLIC SMALL LETTER SHCHA + '\u0447' # 0xDE -> CYRILLIC SMALL LETTER CHE + '\u044a' # 0xDF -> CYRILLIC SMALL LETTER HARD SIGN + '\u042e' # 0xE0 -> CYRILLIC CAPITAL LETTER YU + '\u0410' # 0xE1 -> CYRILLIC CAPITAL LETTER A + '\u0411' # 0xE2 -> CYRILLIC CAPITAL LETTER BE + '\u0426' # 0xE3 -> CYRILLIC CAPITAL LETTER TSE + '\u0414' # 0xE4 -> CYRILLIC CAPITAL LETTER DE + '\u0415' # 0xE5 -> CYRILLIC CAPITAL LETTER IE + '\u0424' # 0xE6 -> CYRILLIC CAPITAL LETTER EF + '\u0413' # 0xE7 -> CYRILLIC CAPITAL LETTER GHE + '\u0425' # 0xE8 -> CYRILLIC CAPITAL LETTER HA + '\u0418' # 0xE9 -> CYRILLIC CAPITAL LETTER I + '\u0419' # 0xEA -> CYRILLIC CAPITAL LETTER SHORT I + '\u041a' # 0xEB -> CYRILLIC CAPITAL LETTER KA + '\u041b' # 0xEC -> CYRILLIC CAPITAL LETTER EL + '\u041c' # 0xED -> CYRILLIC CAPITAL LETTER EM + '\u041d' # 0xEE -> CYRILLIC CAPITAL LETTER EN + '\u041e' # 0xEF -> CYRILLIC CAPITAL LETTER O + '\u041f' # 0xF0 -> CYRILLIC CAPITAL LETTER PE + '\u042f' # 0xF1 -> CYRILLIC CAPITAL LETTER YA + '\u0420' # 0xF2 -> CYRILLIC CAPITAL LETTER ER + '\u0421' # 0xF3 -> CYRILLIC CAPITAL LETTER ES + '\u0422' # 0xF4 -> CYRILLIC CAPITAL LETTER TE + '\u0423' # 0xF5 -> CYRILLIC CAPITAL LETTER U + '\u0416' # 0xF6 -> CYRILLIC CAPITAL LETTER ZHE + '\u0412' # 0xF7 -> CYRILLIC CAPITAL LETTER VE + '\u042c' # 0xF8 -> CYRILLIC CAPITAL LETTER SOFT SIGN + '\u042b' # 0xF9 -> CYRILLIC CAPITAL LETTER YERU + '\u0417' # 0xFA -> CYRILLIC CAPITAL LETTER ZE + '\u0428' # 0xFB -> CYRILLIC CAPITAL LETTER SHA + '\u042d' # 0xFC -> CYRILLIC CAPITAL LETTER E + '\u0429' # 0xFD -> CYRILLIC CAPITAL LETTER SHCHA + '\u0427' # 0xFE -> CYRILLIC CAPITAL LETTER CHE + '\u042a' # 0xFF -> CYRILLIC CAPITAL LETTER HARD SIGN +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/koi8_t.py b/my_env/Lib/encodings/koi8_t.py new file mode 100644 index 000000000..b5415ba36 --- /dev/null +++ b/my_env/Lib/encodings/koi8_t.py @@ -0,0 +1,308 @@ +""" Python Character Mapping Codec koi8_t +""" +# http://ru.wikipedia.org/wiki/КОИ-8 +# http://www.opensource.apple.com/source/libiconv/libiconv-4/libiconv/tests/KOI8-T.TXT + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='koi8-t', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u049b' # 0x80 -> CYRILLIC SMALL LETTER KA WITH DESCENDER + '\u0493' # 0x81 -> CYRILLIC SMALL LETTER GHE WITH STROKE + '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + '\u0492' # 0x83 -> CYRILLIC CAPITAL LETTER GHE WITH STROKE + '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\u2020' # 0x86 -> DAGGER + '\u2021' # 0x87 -> DOUBLE DAGGER + '\ufffe' # 0x88 -> UNDEFINED + '\u2030' # 0x89 -> PER MILLE SIGN + '\u04b3' # 0x8A -> CYRILLIC SMALL LETTER HA WITH DESCENDER + '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u04b2' # 0x8C -> CYRILLIC CAPITAL LETTER HA WITH DESCENDER + '\u04b7' # 0x8D -> CYRILLIC SMALL LETTER CHE WITH DESCENDER + '\u04b6' # 0x8E -> CYRILLIC CAPITAL LETTER CHE WITH DESCENDER + '\ufffe' # 0x8F -> UNDEFINED + '\u049a' # 0x90 -> CYRILLIC CAPITAL LETTER KA WITH DESCENDER + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\ufffe' # 0x98 -> UNDEFINED + '\u2122' # 0x99 -> TRADE MARK SIGN + '\ufffe' # 0x9A -> UNDEFINED + '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\ufffe' # 0x9C -> UNDEFINED + '\ufffe' # 0x9D -> UNDEFINED + '\ufffe' # 0x9E -> UNDEFINED + '\ufffe' # 0x9F -> UNDEFINED + '\ufffe' # 0xA0 -> UNDEFINED + '\u04ef' # 0xA1 -> CYRILLIC SMALL LETTER U WITH MACRON + '\u04ee' # 0xA2 -> CYRILLIC CAPITAL LETTER U WITH MACRON + '\u0451' # 0xA3 -> CYRILLIC SMALL LETTER IO + '\xa4' # 0xA4 -> CURRENCY SIGN + '\u04e3' # 0xA5 -> CYRILLIC SMALL LETTER I WITH MACRON + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\ufffe' # 0xA8 -> UNDEFINED + '\ufffe' # 0xA9 -> UNDEFINED + '\ufffe' # 0xAA -> UNDEFINED + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\ufffe' # 0xAF -> UNDEFINED + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\u0401' # 0xB3 -> CYRILLIC CAPITAL LETTER IO + '\ufffe' # 0xB4 -> UNDEFINED + '\u04e2' # 0xB5 -> CYRILLIC CAPITAL LETTER I WITH MACRON + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\ufffe' # 0xB8 -> UNDEFINED + '\u2116' # 0xB9 -> NUMERO SIGN + '\ufffe' # 0xBA -> UNDEFINED + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\ufffe' # 0xBC -> UNDEFINED + '\ufffe' # 0xBD -> UNDEFINED + '\ufffe' # 0xBE -> UNDEFINED + '\xa9' # 0xBF -> COPYRIGHT SIGN + '\u044e' # 0xC0 -> CYRILLIC SMALL LETTER YU + '\u0430' # 0xC1 -> CYRILLIC SMALL LETTER A + '\u0431' # 0xC2 -> CYRILLIC SMALL LETTER BE + '\u0446' # 0xC3 -> CYRILLIC SMALL LETTER TSE + '\u0434' # 0xC4 -> CYRILLIC SMALL LETTER DE + '\u0435' # 0xC5 -> CYRILLIC SMALL LETTER IE + '\u0444' # 0xC6 -> CYRILLIC SMALL LETTER EF + '\u0433' # 0xC7 -> CYRILLIC SMALL LETTER GHE + '\u0445' # 0xC8 -> CYRILLIC SMALL LETTER HA + '\u0438' # 0xC9 -> CYRILLIC SMALL LETTER I + '\u0439' # 0xCA -> CYRILLIC SMALL LETTER SHORT I + '\u043a' # 0xCB -> CYRILLIC SMALL LETTER KA + '\u043b' # 0xCC -> CYRILLIC SMALL LETTER EL + '\u043c' # 0xCD -> CYRILLIC SMALL LETTER EM + '\u043d' # 0xCE -> CYRILLIC SMALL LETTER EN + '\u043e' # 0xCF -> CYRILLIC SMALL LETTER O + '\u043f' # 0xD0 -> CYRILLIC SMALL LETTER PE + '\u044f' # 0xD1 -> CYRILLIC SMALL LETTER YA + '\u0440' # 0xD2 -> CYRILLIC SMALL LETTER ER + '\u0441' # 0xD3 -> CYRILLIC SMALL LETTER ES + '\u0442' # 0xD4 -> CYRILLIC SMALL LETTER TE + '\u0443' # 0xD5 -> CYRILLIC SMALL LETTER U + '\u0436' # 0xD6 -> CYRILLIC SMALL LETTER ZHE + '\u0432' # 0xD7 -> CYRILLIC SMALL LETTER VE + '\u044c' # 0xD8 -> CYRILLIC SMALL LETTER SOFT SIGN + '\u044b' # 0xD9 -> CYRILLIC SMALL LETTER YERU + '\u0437' # 0xDA -> CYRILLIC SMALL LETTER ZE + '\u0448' # 0xDB -> CYRILLIC SMALL LETTER SHA + '\u044d' # 0xDC -> CYRILLIC SMALL LETTER E + '\u0449' # 0xDD -> CYRILLIC SMALL LETTER SHCHA + '\u0447' # 0xDE -> CYRILLIC SMALL LETTER CHE + '\u044a' # 0xDF -> CYRILLIC SMALL LETTER HARD SIGN + '\u042e' # 0xE0 -> CYRILLIC CAPITAL LETTER YU + '\u0410' # 0xE1 -> CYRILLIC CAPITAL LETTER A + '\u0411' # 0xE2 -> CYRILLIC CAPITAL LETTER BE + '\u0426' # 0xE3 -> CYRILLIC CAPITAL LETTER TSE + '\u0414' # 0xE4 -> CYRILLIC CAPITAL LETTER DE + '\u0415' # 0xE5 -> CYRILLIC CAPITAL LETTER IE + '\u0424' # 0xE6 -> CYRILLIC CAPITAL LETTER EF + '\u0413' # 0xE7 -> CYRILLIC CAPITAL LETTER GHE + '\u0425' # 0xE8 -> CYRILLIC CAPITAL LETTER HA + '\u0418' # 0xE9 -> CYRILLIC CAPITAL LETTER I + '\u0419' # 0xEA -> CYRILLIC CAPITAL LETTER SHORT I + '\u041a' # 0xEB -> CYRILLIC CAPITAL LETTER KA + '\u041b' # 0xEC -> CYRILLIC CAPITAL LETTER EL + '\u041c' # 0xED -> CYRILLIC CAPITAL LETTER EM + '\u041d' # 0xEE -> CYRILLIC CAPITAL LETTER EN + '\u041e' # 0xEF -> CYRILLIC CAPITAL LETTER O + '\u041f' # 0xF0 -> CYRILLIC CAPITAL LETTER PE + '\u042f' # 0xF1 -> CYRILLIC CAPITAL LETTER YA + '\u0420' # 0xF2 -> CYRILLIC CAPITAL LETTER ER + '\u0421' # 0xF3 -> CYRILLIC CAPITAL LETTER ES + '\u0422' # 0xF4 -> CYRILLIC CAPITAL LETTER TE + '\u0423' # 0xF5 -> CYRILLIC CAPITAL LETTER U + '\u0416' # 0xF6 -> CYRILLIC CAPITAL LETTER ZHE + '\u0412' # 0xF7 -> CYRILLIC CAPITAL LETTER VE + '\u042c' # 0xF8 -> CYRILLIC CAPITAL LETTER SOFT SIGN + '\u042b' # 0xF9 -> CYRILLIC CAPITAL LETTER YERU + '\u0417' # 0xFA -> CYRILLIC CAPITAL LETTER ZE + '\u0428' # 0xFB -> CYRILLIC CAPITAL LETTER SHA + '\u042d' # 0xFC -> CYRILLIC CAPITAL LETTER E + '\u0429' # 0xFD -> CYRILLIC CAPITAL LETTER SHCHA + '\u0427' # 0xFE -> CYRILLIC CAPITAL LETTER CHE + '\u042a' # 0xFF -> CYRILLIC CAPITAL LETTER HARD SIGN +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/koi8_u.py b/my_env/Lib/encodings/koi8_u.py new file mode 100644 index 000000000..f9e3fae5f --- /dev/null +++ b/my_env/Lib/encodings/koi8_u.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec koi8_u generated from 'python-mappings/KOI8-U.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='koi8-u', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u2500' # 0x80 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u2502' # 0x81 -> BOX DRAWINGS LIGHT VERTICAL + '\u250c' # 0x82 -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2510' # 0x83 -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0x84 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2518' # 0x85 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u251c' # 0x86 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2524' # 0x87 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u252c' # 0x88 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u2534' # 0x89 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u253c' # 0x8A -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u2580' # 0x8B -> UPPER HALF BLOCK + '\u2584' # 0x8C -> LOWER HALF BLOCK + '\u2588' # 0x8D -> FULL BLOCK + '\u258c' # 0x8E -> LEFT HALF BLOCK + '\u2590' # 0x8F -> RIGHT HALF BLOCK + '\u2591' # 0x90 -> LIGHT SHADE + '\u2592' # 0x91 -> MEDIUM SHADE + '\u2593' # 0x92 -> DARK SHADE + '\u2320' # 0x93 -> TOP HALF INTEGRAL + '\u25a0' # 0x94 -> BLACK SQUARE + '\u2219' # 0x95 -> BULLET OPERATOR + '\u221a' # 0x96 -> SQUARE ROOT + '\u2248' # 0x97 -> ALMOST EQUAL TO + '\u2264' # 0x98 -> LESS-THAN OR EQUAL TO + '\u2265' # 0x99 -> GREATER-THAN OR EQUAL TO + '\xa0' # 0x9A -> NO-BREAK SPACE + '\u2321' # 0x9B -> BOTTOM HALF INTEGRAL + '\xb0' # 0x9C -> DEGREE SIGN + '\xb2' # 0x9D -> SUPERSCRIPT TWO + '\xb7' # 0x9E -> MIDDLE DOT + '\xf7' # 0x9F -> DIVISION SIGN + '\u2550' # 0xA0 -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u2551' # 0xA1 -> BOX DRAWINGS DOUBLE VERTICAL + '\u2552' # 0xA2 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + '\u0451' # 0xA3 -> CYRILLIC SMALL LETTER IO + '\u0454' # 0xA4 -> CYRILLIC SMALL LETTER UKRAINIAN IE + '\u2554' # 0xA5 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u0456' # 0xA6 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + '\u0457' # 0xA7 -> CYRILLIC SMALL LETTER YI (UKRAINIAN) + '\u2557' # 0xA8 -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u2558' # 0xA9 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + '\u2559' # 0xAA -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + '\u255a' # 0xAB -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u255b' # 0xAC -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + '\u0491' # 0xAD -> CYRILLIC SMALL LETTER UKRAINIAN GHE WITH UPTURN + '\u255d' # 0xAE -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u255e' # 0xAF -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + '\u255f' # 0xB0 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + '\u2560' # 0xB1 -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2561' # 0xB2 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + '\u0401' # 0xB3 -> CYRILLIC CAPITAL LETTER IO + '\u0404' # 0xB4 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE + '\u2563' # 0xB5 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u0406' # 0xB6 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + '\u0407' # 0xB7 -> CYRILLIC CAPITAL LETTER YI (UKRAINIAN) + '\u2566' # 0xB8 -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2567' # 0xB9 -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + '\u2568' # 0xBA -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + '\u2569' # 0xBB -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u256a' # 0xBC -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + '\u0490' # 0xBD -> CYRILLIC CAPITAL LETTER UKRAINIAN GHE WITH UPTURN + '\u256c' # 0xBE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\xa9' # 0xBF -> COPYRIGHT SIGN + '\u044e' # 0xC0 -> CYRILLIC SMALL LETTER YU + '\u0430' # 0xC1 -> CYRILLIC SMALL LETTER A + '\u0431' # 0xC2 -> CYRILLIC SMALL LETTER BE + '\u0446' # 0xC3 -> CYRILLIC SMALL LETTER TSE + '\u0434' # 0xC4 -> CYRILLIC SMALL LETTER DE + '\u0435' # 0xC5 -> CYRILLIC SMALL LETTER IE + '\u0444' # 0xC6 -> CYRILLIC SMALL LETTER EF + '\u0433' # 0xC7 -> CYRILLIC SMALL LETTER GHE + '\u0445' # 0xC8 -> CYRILLIC SMALL LETTER HA + '\u0438' # 0xC9 -> CYRILLIC SMALL LETTER I + '\u0439' # 0xCA -> CYRILLIC SMALL LETTER SHORT I + '\u043a' # 0xCB -> CYRILLIC SMALL LETTER KA + '\u043b' # 0xCC -> CYRILLIC SMALL LETTER EL + '\u043c' # 0xCD -> CYRILLIC SMALL LETTER EM + '\u043d' # 0xCE -> CYRILLIC SMALL LETTER EN + '\u043e' # 0xCF -> CYRILLIC SMALL LETTER O + '\u043f' # 0xD0 -> CYRILLIC SMALL LETTER PE + '\u044f' # 0xD1 -> CYRILLIC SMALL LETTER YA + '\u0440' # 0xD2 -> CYRILLIC SMALL LETTER ER + '\u0441' # 0xD3 -> CYRILLIC SMALL LETTER ES + '\u0442' # 0xD4 -> CYRILLIC SMALL LETTER TE + '\u0443' # 0xD5 -> CYRILLIC SMALL LETTER U + '\u0436' # 0xD6 -> CYRILLIC SMALL LETTER ZHE + '\u0432' # 0xD7 -> CYRILLIC SMALL LETTER VE + '\u044c' # 0xD8 -> CYRILLIC SMALL LETTER SOFT SIGN + '\u044b' # 0xD9 -> CYRILLIC SMALL LETTER YERU + '\u0437' # 0xDA -> CYRILLIC SMALL LETTER ZE + '\u0448' # 0xDB -> CYRILLIC SMALL LETTER SHA + '\u044d' # 0xDC -> CYRILLIC SMALL LETTER E + '\u0449' # 0xDD -> CYRILLIC SMALL LETTER SHCHA + '\u0447' # 0xDE -> CYRILLIC SMALL LETTER CHE + '\u044a' # 0xDF -> CYRILLIC SMALL LETTER HARD SIGN + '\u042e' # 0xE0 -> CYRILLIC CAPITAL LETTER YU + '\u0410' # 0xE1 -> CYRILLIC CAPITAL LETTER A + '\u0411' # 0xE2 -> CYRILLIC CAPITAL LETTER BE + '\u0426' # 0xE3 -> CYRILLIC CAPITAL LETTER TSE + '\u0414' # 0xE4 -> CYRILLIC CAPITAL LETTER DE + '\u0415' # 0xE5 -> CYRILLIC CAPITAL LETTER IE + '\u0424' # 0xE6 -> CYRILLIC CAPITAL LETTER EF + '\u0413' # 0xE7 -> CYRILLIC CAPITAL LETTER GHE + '\u0425' # 0xE8 -> CYRILLIC CAPITAL LETTER HA + '\u0418' # 0xE9 -> CYRILLIC CAPITAL LETTER I + '\u0419' # 0xEA -> CYRILLIC CAPITAL LETTER SHORT I + '\u041a' # 0xEB -> CYRILLIC CAPITAL LETTER KA + '\u041b' # 0xEC -> CYRILLIC CAPITAL LETTER EL + '\u041c' # 0xED -> CYRILLIC CAPITAL LETTER EM + '\u041d' # 0xEE -> CYRILLIC CAPITAL LETTER EN + '\u041e' # 0xEF -> CYRILLIC CAPITAL LETTER O + '\u041f' # 0xF0 -> CYRILLIC CAPITAL LETTER PE + '\u042f' # 0xF1 -> CYRILLIC CAPITAL LETTER YA + '\u0420' # 0xF2 -> CYRILLIC CAPITAL LETTER ER + '\u0421' # 0xF3 -> CYRILLIC CAPITAL LETTER ES + '\u0422' # 0xF4 -> CYRILLIC CAPITAL LETTER TE + '\u0423' # 0xF5 -> CYRILLIC CAPITAL LETTER U + '\u0416' # 0xF6 -> CYRILLIC CAPITAL LETTER ZHE + '\u0412' # 0xF7 -> CYRILLIC CAPITAL LETTER VE + '\u042c' # 0xF8 -> CYRILLIC CAPITAL LETTER SOFT SIGN + '\u042b' # 0xF9 -> CYRILLIC CAPITAL LETTER YERU + '\u0417' # 0xFA -> CYRILLIC CAPITAL LETTER ZE + '\u0428' # 0xFB -> CYRILLIC CAPITAL LETTER SHA + '\u042d' # 0xFC -> CYRILLIC CAPITAL LETTER E + '\u0429' # 0xFD -> CYRILLIC CAPITAL LETTER SHCHA + '\u0427' # 0xFE -> CYRILLIC CAPITAL LETTER CHE + '\u042a' # 0xFF -> CYRILLIC CAPITAL LETTER HARD SIGN +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/kz1048.py b/my_env/Lib/encodings/kz1048.py new file mode 100644 index 000000000..712aee6e9 --- /dev/null +++ b/my_env/Lib/encodings/kz1048.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec kz1048 generated from 'MAPPINGS/VENDORS/MISC/KZ1048.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self, input, errors='strict'): + return codecs.charmap_encode(input, errors, encoding_table) + + def decode(self, input, errors='strict'): + return codecs.charmap_decode(input, errors, decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input, self.errors, encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input, self.errors, decoding_table)[0] + +class StreamWriter(Codec, codecs.StreamWriter): + pass + +class StreamReader(Codec, codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='kz1048', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u0402' # 0x80 -> CYRILLIC CAPITAL LETTER DJE + '\u0403' # 0x81 -> CYRILLIC CAPITAL LETTER GJE + '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + '\u0453' # 0x83 -> CYRILLIC SMALL LETTER GJE + '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\u2020' # 0x86 -> DAGGER + '\u2021' # 0x87 -> DOUBLE DAGGER + '\u20ac' # 0x88 -> EURO SIGN + '\u2030' # 0x89 -> PER MILLE SIGN + '\u0409' # 0x8A -> CYRILLIC CAPITAL LETTER LJE + '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u040a' # 0x8C -> CYRILLIC CAPITAL LETTER NJE + '\u049a' # 0x8D -> CYRILLIC CAPITAL LETTER KA WITH DESCENDER + '\u04ba' # 0x8E -> CYRILLIC CAPITAL LETTER SHHA + '\u040f' # 0x8F -> CYRILLIC CAPITAL LETTER DZHE + '\u0452' # 0x90 -> CYRILLIC SMALL LETTER DJE + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\ufffe' # 0x98 -> UNDEFINED + '\u2122' # 0x99 -> TRADE MARK SIGN + '\u0459' # 0x9A -> CYRILLIC SMALL LETTER LJE + '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\u045a' # 0x9C -> CYRILLIC SMALL LETTER NJE + '\u049b' # 0x9D -> CYRILLIC SMALL LETTER KA WITH DESCENDER + '\u04bb' # 0x9E -> CYRILLIC SMALL LETTER SHHA + '\u045f' # 0x9F -> CYRILLIC SMALL LETTER DZHE + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u04b0' # 0xA1 -> CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE + '\u04b1' # 0xA2 -> CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE + '\u04d8' # 0xA3 -> CYRILLIC CAPITAL LETTER SCHWA + '\xa4' # 0xA4 -> CURRENCY SIGN + '\u04e8' # 0xA5 -> CYRILLIC CAPITAL LETTER BARRED O + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\u0401' # 0xA8 -> CYRILLIC CAPITAL LETTER IO + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u0492' # 0xAA -> CYRILLIC CAPITAL LETTER GHE WITH STROKE + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\u04ae' # 0xAF -> CYRILLIC CAPITAL LETTER STRAIGHT U + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\u0406' # 0xB2 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + '\u0456' # 0xB3 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + '\u04e9' # 0xB4 -> CYRILLIC SMALL LETTER BARRED O + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\u0451' # 0xB8 -> CYRILLIC SMALL LETTER IO + '\u2116' # 0xB9 -> NUMERO SIGN + '\u0493' # 0xBA -> CYRILLIC SMALL LETTER GHE WITH STROKE + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u04d9' # 0xBC -> CYRILLIC SMALL LETTER SCHWA + '\u04a2' # 0xBD -> CYRILLIC CAPITAL LETTER EN WITH DESCENDER + '\u04a3' # 0xBE -> CYRILLIC SMALL LETTER EN WITH DESCENDER + '\u04af' # 0xBF -> CYRILLIC SMALL LETTER STRAIGHT U + '\u0410' # 0xC0 -> CYRILLIC CAPITAL LETTER A + '\u0411' # 0xC1 -> CYRILLIC CAPITAL LETTER BE + '\u0412' # 0xC2 -> CYRILLIC CAPITAL LETTER VE + '\u0413' # 0xC3 -> CYRILLIC CAPITAL LETTER GHE + '\u0414' # 0xC4 -> CYRILLIC CAPITAL LETTER DE + '\u0415' # 0xC5 -> CYRILLIC CAPITAL LETTER IE + '\u0416' # 0xC6 -> CYRILLIC CAPITAL LETTER ZHE + '\u0417' # 0xC7 -> CYRILLIC CAPITAL LETTER ZE + '\u0418' # 0xC8 -> CYRILLIC CAPITAL LETTER I + '\u0419' # 0xC9 -> CYRILLIC CAPITAL LETTER SHORT I + '\u041a' # 0xCA -> CYRILLIC CAPITAL LETTER KA + '\u041b' # 0xCB -> CYRILLIC CAPITAL LETTER EL + '\u041c' # 0xCC -> CYRILLIC CAPITAL LETTER EM + '\u041d' # 0xCD -> CYRILLIC CAPITAL LETTER EN + '\u041e' # 0xCE -> CYRILLIC CAPITAL LETTER O + '\u041f' # 0xCF -> CYRILLIC CAPITAL LETTER PE + '\u0420' # 0xD0 -> CYRILLIC CAPITAL LETTER ER + '\u0421' # 0xD1 -> CYRILLIC CAPITAL LETTER ES + '\u0422' # 0xD2 -> CYRILLIC CAPITAL LETTER TE + '\u0423' # 0xD3 -> CYRILLIC CAPITAL LETTER U + '\u0424' # 0xD4 -> CYRILLIC CAPITAL LETTER EF + '\u0425' # 0xD5 -> CYRILLIC CAPITAL LETTER HA + '\u0426' # 0xD6 -> CYRILLIC CAPITAL LETTER TSE + '\u0427' # 0xD7 -> CYRILLIC CAPITAL LETTER CHE + '\u0428' # 0xD8 -> CYRILLIC CAPITAL LETTER SHA + '\u0429' # 0xD9 -> CYRILLIC CAPITAL LETTER SHCHA + '\u042a' # 0xDA -> CYRILLIC CAPITAL LETTER HARD SIGN + '\u042b' # 0xDB -> CYRILLIC CAPITAL LETTER YERU + '\u042c' # 0xDC -> CYRILLIC CAPITAL LETTER SOFT SIGN + '\u042d' # 0xDD -> CYRILLIC CAPITAL LETTER E + '\u042e' # 0xDE -> CYRILLIC CAPITAL LETTER YU + '\u042f' # 0xDF -> CYRILLIC CAPITAL LETTER YA + '\u0430' # 0xE0 -> CYRILLIC SMALL LETTER A + '\u0431' # 0xE1 -> CYRILLIC SMALL LETTER BE + '\u0432' # 0xE2 -> CYRILLIC SMALL LETTER VE + '\u0433' # 0xE3 -> CYRILLIC SMALL LETTER GHE + '\u0434' # 0xE4 -> CYRILLIC SMALL LETTER DE + '\u0435' # 0xE5 -> CYRILLIC SMALL LETTER IE + '\u0436' # 0xE6 -> CYRILLIC SMALL LETTER ZHE + '\u0437' # 0xE7 -> CYRILLIC SMALL LETTER ZE + '\u0438' # 0xE8 -> CYRILLIC SMALL LETTER I + '\u0439' # 0xE9 -> CYRILLIC SMALL LETTER SHORT I + '\u043a' # 0xEA -> CYRILLIC SMALL LETTER KA + '\u043b' # 0xEB -> CYRILLIC SMALL LETTER EL + '\u043c' # 0xEC -> CYRILLIC SMALL LETTER EM + '\u043d' # 0xED -> CYRILLIC SMALL LETTER EN + '\u043e' # 0xEE -> CYRILLIC SMALL LETTER O + '\u043f' # 0xEF -> CYRILLIC SMALL LETTER PE + '\u0440' # 0xF0 -> CYRILLIC SMALL LETTER ER + '\u0441' # 0xF1 -> CYRILLIC SMALL LETTER ES + '\u0442' # 0xF2 -> CYRILLIC SMALL LETTER TE + '\u0443' # 0xF3 -> CYRILLIC SMALL LETTER U + '\u0444' # 0xF4 -> CYRILLIC SMALL LETTER EF + '\u0445' # 0xF5 -> CYRILLIC SMALL LETTER HA + '\u0446' # 0xF6 -> CYRILLIC SMALL LETTER TSE + '\u0447' # 0xF7 -> CYRILLIC SMALL LETTER CHE + '\u0448' # 0xF8 -> CYRILLIC SMALL LETTER SHA + '\u0449' # 0xF9 -> CYRILLIC SMALL LETTER SHCHA + '\u044a' # 0xFA -> CYRILLIC SMALL LETTER HARD SIGN + '\u044b' # 0xFB -> CYRILLIC SMALL LETTER YERU + '\u044c' # 0xFC -> CYRILLIC SMALL LETTER SOFT SIGN + '\u044d' # 0xFD -> CYRILLIC SMALL LETTER E + '\u044e' # 0xFE -> CYRILLIC SMALL LETTER YU + '\u044f' # 0xFF -> CYRILLIC SMALL LETTER YA +) + +### Encoding table +encoding_table = codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/latin_1.py b/my_env/Lib/encodings/latin_1.py new file mode 100644 index 000000000..370160c0c --- /dev/null +++ b/my_env/Lib/encodings/latin_1.py @@ -0,0 +1,50 @@ +""" Python 'latin-1' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + # Note: Binding these as C functions will result in the class not + # converting them to methods. This is intended. + encode = codecs.latin_1_encode + decode = codecs.latin_1_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.latin_1_encode(input,self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.latin_1_decode(input,self.errors)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +class StreamConverter(StreamWriter,StreamReader): + + encode = codecs.latin_1_decode + decode = codecs.latin_1_encode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-1', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/mac_arabic.py b/my_env/Lib/encodings/mac_arabic.py new file mode 100644 index 000000000..72847e859 --- /dev/null +++ b/my_env/Lib/encodings/mac_arabic.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/APPLE/ARABIC.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-arabic', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x0081: 0x00a0, # NO-BREAK SPACE, right-left + 0x0082: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0083: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0084: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x0085: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x0086: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x0087: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x0088: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0089: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x008a: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x008b: 0x06ba, # ARABIC LETTER NOON GHUNNA + 0x008c: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + 0x008d: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x008e: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x008f: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x0090: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0091: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x0092: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x0093: 0x2026, # HORIZONTAL ELLIPSIS, right-left + 0x0094: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x0095: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x0096: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x0097: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x0098: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + 0x0099: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x009a: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x009b: 0x00f7, # DIVISION SIGN, right-left + 0x009c: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x009d: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x009e: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x009f: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00a0: 0x0020, # SPACE, right-left + 0x00a1: 0x0021, # EXCLAMATION MARK, right-left + 0x00a2: 0x0022, # QUOTATION MARK, right-left + 0x00a3: 0x0023, # NUMBER SIGN, right-left + 0x00a4: 0x0024, # DOLLAR SIGN, right-left + 0x00a5: 0x066a, # ARABIC PERCENT SIGN + 0x00a6: 0x0026, # AMPERSAND, right-left + 0x00a7: 0x0027, # APOSTROPHE, right-left + 0x00a8: 0x0028, # LEFT PARENTHESIS, right-left + 0x00a9: 0x0029, # RIGHT PARENTHESIS, right-left + 0x00aa: 0x002a, # ASTERISK, right-left + 0x00ab: 0x002b, # PLUS SIGN, right-left + 0x00ac: 0x060c, # ARABIC COMMA + 0x00ad: 0x002d, # HYPHEN-MINUS, right-left + 0x00ae: 0x002e, # FULL STOP, right-left + 0x00af: 0x002f, # SOLIDUS, right-left + 0x00b0: 0x0660, # ARABIC-INDIC DIGIT ZERO, right-left (need override) + 0x00b1: 0x0661, # ARABIC-INDIC DIGIT ONE, right-left (need override) + 0x00b2: 0x0662, # ARABIC-INDIC DIGIT TWO, right-left (need override) + 0x00b3: 0x0663, # ARABIC-INDIC DIGIT THREE, right-left (need override) + 0x00b4: 0x0664, # ARABIC-INDIC DIGIT FOUR, right-left (need override) + 0x00b5: 0x0665, # ARABIC-INDIC DIGIT FIVE, right-left (need override) + 0x00b6: 0x0666, # ARABIC-INDIC DIGIT SIX, right-left (need override) + 0x00b7: 0x0667, # ARABIC-INDIC DIGIT SEVEN, right-left (need override) + 0x00b8: 0x0668, # ARABIC-INDIC DIGIT EIGHT, right-left (need override) + 0x00b9: 0x0669, # ARABIC-INDIC DIGIT NINE, right-left (need override) + 0x00ba: 0x003a, # COLON, right-left + 0x00bb: 0x061b, # ARABIC SEMICOLON + 0x00bc: 0x003c, # LESS-THAN SIGN, right-left + 0x00bd: 0x003d, # EQUALS SIGN, right-left + 0x00be: 0x003e, # GREATER-THAN SIGN, right-left + 0x00bf: 0x061f, # ARABIC QUESTION MARK + 0x00c0: 0x274a, # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left + 0x00c1: 0x0621, # ARABIC LETTER HAMZA + 0x00c2: 0x0622, # ARABIC LETTER ALEF WITH MADDA ABOVE + 0x00c3: 0x0623, # ARABIC LETTER ALEF WITH HAMZA ABOVE + 0x00c4: 0x0624, # ARABIC LETTER WAW WITH HAMZA ABOVE + 0x00c5: 0x0625, # ARABIC LETTER ALEF WITH HAMZA BELOW + 0x00c6: 0x0626, # ARABIC LETTER YEH WITH HAMZA ABOVE + 0x00c7: 0x0627, # ARABIC LETTER ALEF + 0x00c8: 0x0628, # ARABIC LETTER BEH + 0x00c9: 0x0629, # ARABIC LETTER TEH MARBUTA + 0x00ca: 0x062a, # ARABIC LETTER TEH + 0x00cb: 0x062b, # ARABIC LETTER THEH + 0x00cc: 0x062c, # ARABIC LETTER JEEM + 0x00cd: 0x062d, # ARABIC LETTER HAH + 0x00ce: 0x062e, # ARABIC LETTER KHAH + 0x00cf: 0x062f, # ARABIC LETTER DAL + 0x00d0: 0x0630, # ARABIC LETTER THAL + 0x00d1: 0x0631, # ARABIC LETTER REH + 0x00d2: 0x0632, # ARABIC LETTER ZAIN + 0x00d3: 0x0633, # ARABIC LETTER SEEN + 0x00d4: 0x0634, # ARABIC LETTER SHEEN + 0x00d5: 0x0635, # ARABIC LETTER SAD + 0x00d6: 0x0636, # ARABIC LETTER DAD + 0x00d7: 0x0637, # ARABIC LETTER TAH + 0x00d8: 0x0638, # ARABIC LETTER ZAH + 0x00d9: 0x0639, # ARABIC LETTER AIN + 0x00da: 0x063a, # ARABIC LETTER GHAIN + 0x00db: 0x005b, # LEFT SQUARE BRACKET, right-left + 0x00dc: 0x005c, # REVERSE SOLIDUS, right-left + 0x00dd: 0x005d, # RIGHT SQUARE BRACKET, right-left + 0x00de: 0x005e, # CIRCUMFLEX ACCENT, right-left + 0x00df: 0x005f, # LOW LINE, right-left + 0x00e0: 0x0640, # ARABIC TATWEEL + 0x00e1: 0x0641, # ARABIC LETTER FEH + 0x00e2: 0x0642, # ARABIC LETTER QAF + 0x00e3: 0x0643, # ARABIC LETTER KAF + 0x00e4: 0x0644, # ARABIC LETTER LAM + 0x00e5: 0x0645, # ARABIC LETTER MEEM + 0x00e6: 0x0646, # ARABIC LETTER NOON + 0x00e7: 0x0647, # ARABIC LETTER HEH + 0x00e8: 0x0648, # ARABIC LETTER WAW + 0x00e9: 0x0649, # ARABIC LETTER ALEF MAKSURA + 0x00ea: 0x064a, # ARABIC LETTER YEH + 0x00eb: 0x064b, # ARABIC FATHATAN + 0x00ec: 0x064c, # ARABIC DAMMATAN + 0x00ed: 0x064d, # ARABIC KASRATAN + 0x00ee: 0x064e, # ARABIC FATHA + 0x00ef: 0x064f, # ARABIC DAMMA + 0x00f0: 0x0650, # ARABIC KASRA + 0x00f1: 0x0651, # ARABIC SHADDA + 0x00f2: 0x0652, # ARABIC SUKUN + 0x00f3: 0x067e, # ARABIC LETTER PEH + 0x00f4: 0x0679, # ARABIC LETTER TTEH + 0x00f5: 0x0686, # ARABIC LETTER TCHEH + 0x00f6: 0x06d5, # ARABIC LETTER AE + 0x00f7: 0x06a4, # ARABIC LETTER VEH + 0x00f8: 0x06af, # ARABIC LETTER GAF + 0x00f9: 0x0688, # ARABIC LETTER DDAL + 0x00fa: 0x0691, # ARABIC LETTER RREH + 0x00fb: 0x007b, # LEFT CURLY BRACKET, right-left + 0x00fc: 0x007c, # VERTICAL LINE, right-left + 0x00fd: 0x007d, # RIGHT CURLY BRACKET, right-left + 0x00fe: 0x0698, # ARABIC LETTER JEH + 0x00ff: 0x06d2, # ARABIC LETTER YEH BARREE +}) + +### Decoding Table + +decoding_table = ( + '\x00' # 0x0000 -> CONTROL CHARACTER + '\x01' # 0x0001 -> CONTROL CHARACTER + '\x02' # 0x0002 -> CONTROL CHARACTER + '\x03' # 0x0003 -> CONTROL CHARACTER + '\x04' # 0x0004 -> CONTROL CHARACTER + '\x05' # 0x0005 -> CONTROL CHARACTER + '\x06' # 0x0006 -> CONTROL CHARACTER + '\x07' # 0x0007 -> CONTROL CHARACTER + '\x08' # 0x0008 -> CONTROL CHARACTER + '\t' # 0x0009 -> CONTROL CHARACTER + '\n' # 0x000a -> CONTROL CHARACTER + '\x0b' # 0x000b -> CONTROL CHARACTER + '\x0c' # 0x000c -> CONTROL CHARACTER + '\r' # 0x000d -> CONTROL CHARACTER + '\x0e' # 0x000e -> CONTROL CHARACTER + '\x0f' # 0x000f -> CONTROL CHARACTER + '\x10' # 0x0010 -> CONTROL CHARACTER + '\x11' # 0x0011 -> CONTROL CHARACTER + '\x12' # 0x0012 -> CONTROL CHARACTER + '\x13' # 0x0013 -> CONTROL CHARACTER + '\x14' # 0x0014 -> CONTROL CHARACTER + '\x15' # 0x0015 -> CONTROL CHARACTER + '\x16' # 0x0016 -> CONTROL CHARACTER + '\x17' # 0x0017 -> CONTROL CHARACTER + '\x18' # 0x0018 -> CONTROL CHARACTER + '\x19' # 0x0019 -> CONTROL CHARACTER + '\x1a' # 0x001a -> CONTROL CHARACTER + '\x1b' # 0x001b -> CONTROL CHARACTER + '\x1c' # 0x001c -> CONTROL CHARACTER + '\x1d' # 0x001d -> CONTROL CHARACTER + '\x1e' # 0x001e -> CONTROL CHARACTER + '\x1f' # 0x001f -> CONTROL CHARACTER + ' ' # 0x0020 -> SPACE, left-right + '!' # 0x0021 -> EXCLAMATION MARK, left-right + '"' # 0x0022 -> QUOTATION MARK, left-right + '#' # 0x0023 -> NUMBER SIGN, left-right + '$' # 0x0024 -> DOLLAR SIGN, left-right + '%' # 0x0025 -> PERCENT SIGN, left-right + '&' # 0x0026 -> AMPERSAND, left-right + "'" # 0x0027 -> APOSTROPHE, left-right + '(' # 0x0028 -> LEFT PARENTHESIS, left-right + ')' # 0x0029 -> RIGHT PARENTHESIS, left-right + '*' # 0x002a -> ASTERISK, left-right + '+' # 0x002b -> PLUS SIGN, left-right + ',' # 0x002c -> COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR + '-' # 0x002d -> HYPHEN-MINUS, left-right + '.' # 0x002e -> FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR + '/' # 0x002f -> SOLIDUS, left-right + '0' # 0x0030 -> DIGIT ZERO; in Arabic-script context, displayed as 0x0660 ARABIC-INDIC DIGIT ZERO + '1' # 0x0031 -> DIGIT ONE; in Arabic-script context, displayed as 0x0661 ARABIC-INDIC DIGIT ONE + '2' # 0x0032 -> DIGIT TWO; in Arabic-script context, displayed as 0x0662 ARABIC-INDIC DIGIT TWO + '3' # 0x0033 -> DIGIT THREE; in Arabic-script context, displayed as 0x0663 ARABIC-INDIC DIGIT THREE + '4' # 0x0034 -> DIGIT FOUR; in Arabic-script context, displayed as 0x0664 ARABIC-INDIC DIGIT FOUR + '5' # 0x0035 -> DIGIT FIVE; in Arabic-script context, displayed as 0x0665 ARABIC-INDIC DIGIT FIVE + '6' # 0x0036 -> DIGIT SIX; in Arabic-script context, displayed as 0x0666 ARABIC-INDIC DIGIT SIX + '7' # 0x0037 -> DIGIT SEVEN; in Arabic-script context, displayed as 0x0667 ARABIC-INDIC DIGIT SEVEN + '8' # 0x0038 -> DIGIT EIGHT; in Arabic-script context, displayed as 0x0668 ARABIC-INDIC DIGIT EIGHT + '9' # 0x0039 -> DIGIT NINE; in Arabic-script context, displayed as 0x0669 ARABIC-INDIC DIGIT NINE + ':' # 0x003a -> COLON, left-right + ';' # 0x003b -> SEMICOLON, left-right + '<' # 0x003c -> LESS-THAN SIGN, left-right + '=' # 0x003d -> EQUALS SIGN, left-right + '>' # 0x003e -> GREATER-THAN SIGN, left-right + '?' # 0x003f -> QUESTION MARK, left-right + '@' # 0x0040 -> COMMERCIAL AT + 'A' # 0x0041 -> LATIN CAPITAL LETTER A + 'B' # 0x0042 -> LATIN CAPITAL LETTER B + 'C' # 0x0043 -> LATIN CAPITAL LETTER C + 'D' # 0x0044 -> LATIN CAPITAL LETTER D + 'E' # 0x0045 -> LATIN CAPITAL LETTER E + 'F' # 0x0046 -> LATIN CAPITAL LETTER F + 'G' # 0x0047 -> LATIN CAPITAL LETTER G + 'H' # 0x0048 -> LATIN CAPITAL LETTER H + 'I' # 0x0049 -> LATIN CAPITAL LETTER I + 'J' # 0x004a -> LATIN CAPITAL LETTER J + 'K' # 0x004b -> LATIN CAPITAL LETTER K + 'L' # 0x004c -> LATIN CAPITAL LETTER L + 'M' # 0x004d -> LATIN CAPITAL LETTER M + 'N' # 0x004e -> LATIN CAPITAL LETTER N + 'O' # 0x004f -> LATIN CAPITAL LETTER O + 'P' # 0x0050 -> LATIN CAPITAL LETTER P + 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + 'R' # 0x0052 -> LATIN CAPITAL LETTER R + 'S' # 0x0053 -> LATIN CAPITAL LETTER S + 'T' # 0x0054 -> LATIN CAPITAL LETTER T + 'U' # 0x0055 -> LATIN CAPITAL LETTER U + 'V' # 0x0056 -> LATIN CAPITAL LETTER V + 'W' # 0x0057 -> LATIN CAPITAL LETTER W + 'X' # 0x0058 -> LATIN CAPITAL LETTER X + 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + 'Z' # 0x005a -> LATIN CAPITAL LETTER Z + '[' # 0x005b -> LEFT SQUARE BRACKET, left-right + '\\' # 0x005c -> REVERSE SOLIDUS, left-right + ']' # 0x005d -> RIGHT SQUARE BRACKET, left-right + '^' # 0x005e -> CIRCUMFLEX ACCENT, left-right + '_' # 0x005f -> LOW LINE, left-right + '`' # 0x0060 -> GRAVE ACCENT + 'a' # 0x0061 -> LATIN SMALL LETTER A + 'b' # 0x0062 -> LATIN SMALL LETTER B + 'c' # 0x0063 -> LATIN SMALL LETTER C + 'd' # 0x0064 -> LATIN SMALL LETTER D + 'e' # 0x0065 -> LATIN SMALL LETTER E + 'f' # 0x0066 -> LATIN SMALL LETTER F + 'g' # 0x0067 -> LATIN SMALL LETTER G + 'h' # 0x0068 -> LATIN SMALL LETTER H + 'i' # 0x0069 -> LATIN SMALL LETTER I + 'j' # 0x006a -> LATIN SMALL LETTER J + 'k' # 0x006b -> LATIN SMALL LETTER K + 'l' # 0x006c -> LATIN SMALL LETTER L + 'm' # 0x006d -> LATIN SMALL LETTER M + 'n' # 0x006e -> LATIN SMALL LETTER N + 'o' # 0x006f -> LATIN SMALL LETTER O + 'p' # 0x0070 -> LATIN SMALL LETTER P + 'q' # 0x0071 -> LATIN SMALL LETTER Q + 'r' # 0x0072 -> LATIN SMALL LETTER R + 's' # 0x0073 -> LATIN SMALL LETTER S + 't' # 0x0074 -> LATIN SMALL LETTER T + 'u' # 0x0075 -> LATIN SMALL LETTER U + 'v' # 0x0076 -> LATIN SMALL LETTER V + 'w' # 0x0077 -> LATIN SMALL LETTER W + 'x' # 0x0078 -> LATIN SMALL LETTER X + 'y' # 0x0079 -> LATIN SMALL LETTER Y + 'z' # 0x007a -> LATIN SMALL LETTER Z + '{' # 0x007b -> LEFT CURLY BRACKET, left-right + '|' # 0x007c -> VERTICAL LINE, left-right + '}' # 0x007d -> RIGHT CURLY BRACKET, left-right + '~' # 0x007e -> TILDE + '\x7f' # 0x007f -> CONTROL CHARACTER + '\xc4' # 0x0080 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xa0' # 0x0081 -> NO-BREAK SPACE, right-left + '\xc7' # 0x0082 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc9' # 0x0083 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xd1' # 0x0084 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd6' # 0x0085 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x0086 -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xe1' # 0x0087 -> LATIN SMALL LETTER A WITH ACUTE + '\xe0' # 0x0088 -> LATIN SMALL LETTER A WITH GRAVE + '\xe2' # 0x0089 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x008a -> LATIN SMALL LETTER A WITH DIAERESIS + '\u06ba' # 0x008b -> ARABIC LETTER NOON GHUNNA + '\xab' # 0x008c -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + '\xe7' # 0x008d -> LATIN SMALL LETTER C WITH CEDILLA + '\xe9' # 0x008e -> LATIN SMALL LETTER E WITH ACUTE + '\xe8' # 0x008f -> LATIN SMALL LETTER E WITH GRAVE + '\xea' # 0x0090 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x0091 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xed' # 0x0092 -> LATIN SMALL LETTER I WITH ACUTE + '\u2026' # 0x0093 -> HORIZONTAL ELLIPSIS, right-left + '\xee' # 0x0094 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0x0095 -> LATIN SMALL LETTER I WITH DIAERESIS + '\xf1' # 0x0096 -> LATIN SMALL LETTER N WITH TILDE + '\xf3' # 0x0097 -> LATIN SMALL LETTER O WITH ACUTE + '\xbb' # 0x0098 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + '\xf4' # 0x0099 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x009a -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0x009b -> DIVISION SIGN, right-left + '\xfa' # 0x009c -> LATIN SMALL LETTER U WITH ACUTE + '\xf9' # 0x009d -> LATIN SMALL LETTER U WITH GRAVE + '\xfb' # 0x009e -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0x009f -> LATIN SMALL LETTER U WITH DIAERESIS + ' ' # 0x00a0 -> SPACE, right-left + '!' # 0x00a1 -> EXCLAMATION MARK, right-left + '"' # 0x00a2 -> QUOTATION MARK, right-left + '#' # 0x00a3 -> NUMBER SIGN, right-left + '$' # 0x00a4 -> DOLLAR SIGN, right-left + '\u066a' # 0x00a5 -> ARABIC PERCENT SIGN + '&' # 0x00a6 -> AMPERSAND, right-left + "'" # 0x00a7 -> APOSTROPHE, right-left + '(' # 0x00a8 -> LEFT PARENTHESIS, right-left + ')' # 0x00a9 -> RIGHT PARENTHESIS, right-left + '*' # 0x00aa -> ASTERISK, right-left + '+' # 0x00ab -> PLUS SIGN, right-left + '\u060c' # 0x00ac -> ARABIC COMMA + '-' # 0x00ad -> HYPHEN-MINUS, right-left + '.' # 0x00ae -> FULL STOP, right-left + '/' # 0x00af -> SOLIDUS, right-left + '\u0660' # 0x00b0 -> ARABIC-INDIC DIGIT ZERO, right-left (need override) + '\u0661' # 0x00b1 -> ARABIC-INDIC DIGIT ONE, right-left (need override) + '\u0662' # 0x00b2 -> ARABIC-INDIC DIGIT TWO, right-left (need override) + '\u0663' # 0x00b3 -> ARABIC-INDIC DIGIT THREE, right-left (need override) + '\u0664' # 0x00b4 -> ARABIC-INDIC DIGIT FOUR, right-left (need override) + '\u0665' # 0x00b5 -> ARABIC-INDIC DIGIT FIVE, right-left (need override) + '\u0666' # 0x00b6 -> ARABIC-INDIC DIGIT SIX, right-left (need override) + '\u0667' # 0x00b7 -> ARABIC-INDIC DIGIT SEVEN, right-left (need override) + '\u0668' # 0x00b8 -> ARABIC-INDIC DIGIT EIGHT, right-left (need override) + '\u0669' # 0x00b9 -> ARABIC-INDIC DIGIT NINE, right-left (need override) + ':' # 0x00ba -> COLON, right-left + '\u061b' # 0x00bb -> ARABIC SEMICOLON + '<' # 0x00bc -> LESS-THAN SIGN, right-left + '=' # 0x00bd -> EQUALS SIGN, right-left + '>' # 0x00be -> GREATER-THAN SIGN, right-left + '\u061f' # 0x00bf -> ARABIC QUESTION MARK + '\u274a' # 0x00c0 -> EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left + '\u0621' # 0x00c1 -> ARABIC LETTER HAMZA + '\u0622' # 0x00c2 -> ARABIC LETTER ALEF WITH MADDA ABOVE + '\u0623' # 0x00c3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE + '\u0624' # 0x00c4 -> ARABIC LETTER WAW WITH HAMZA ABOVE + '\u0625' # 0x00c5 -> ARABIC LETTER ALEF WITH HAMZA BELOW + '\u0626' # 0x00c6 -> ARABIC LETTER YEH WITH HAMZA ABOVE + '\u0627' # 0x00c7 -> ARABIC LETTER ALEF + '\u0628' # 0x00c8 -> ARABIC LETTER BEH + '\u0629' # 0x00c9 -> ARABIC LETTER TEH MARBUTA + '\u062a' # 0x00ca -> ARABIC LETTER TEH + '\u062b' # 0x00cb -> ARABIC LETTER THEH + '\u062c' # 0x00cc -> ARABIC LETTER JEEM + '\u062d' # 0x00cd -> ARABIC LETTER HAH + '\u062e' # 0x00ce -> ARABIC LETTER KHAH + '\u062f' # 0x00cf -> ARABIC LETTER DAL + '\u0630' # 0x00d0 -> ARABIC LETTER THAL + '\u0631' # 0x00d1 -> ARABIC LETTER REH + '\u0632' # 0x00d2 -> ARABIC LETTER ZAIN + '\u0633' # 0x00d3 -> ARABIC LETTER SEEN + '\u0634' # 0x00d4 -> ARABIC LETTER SHEEN + '\u0635' # 0x00d5 -> ARABIC LETTER SAD + '\u0636' # 0x00d6 -> ARABIC LETTER DAD + '\u0637' # 0x00d7 -> ARABIC LETTER TAH + '\u0638' # 0x00d8 -> ARABIC LETTER ZAH + '\u0639' # 0x00d9 -> ARABIC LETTER AIN + '\u063a' # 0x00da -> ARABIC LETTER GHAIN + '[' # 0x00db -> LEFT SQUARE BRACKET, right-left + '\\' # 0x00dc -> REVERSE SOLIDUS, right-left + ']' # 0x00dd -> RIGHT SQUARE BRACKET, right-left + '^' # 0x00de -> CIRCUMFLEX ACCENT, right-left + '_' # 0x00df -> LOW LINE, right-left + '\u0640' # 0x00e0 -> ARABIC TATWEEL + '\u0641' # 0x00e1 -> ARABIC LETTER FEH + '\u0642' # 0x00e2 -> ARABIC LETTER QAF + '\u0643' # 0x00e3 -> ARABIC LETTER KAF + '\u0644' # 0x00e4 -> ARABIC LETTER LAM + '\u0645' # 0x00e5 -> ARABIC LETTER MEEM + '\u0646' # 0x00e6 -> ARABIC LETTER NOON + '\u0647' # 0x00e7 -> ARABIC LETTER HEH + '\u0648' # 0x00e8 -> ARABIC LETTER WAW + '\u0649' # 0x00e9 -> ARABIC LETTER ALEF MAKSURA + '\u064a' # 0x00ea -> ARABIC LETTER YEH + '\u064b' # 0x00eb -> ARABIC FATHATAN + '\u064c' # 0x00ec -> ARABIC DAMMATAN + '\u064d' # 0x00ed -> ARABIC KASRATAN + '\u064e' # 0x00ee -> ARABIC FATHA + '\u064f' # 0x00ef -> ARABIC DAMMA + '\u0650' # 0x00f0 -> ARABIC KASRA + '\u0651' # 0x00f1 -> ARABIC SHADDA + '\u0652' # 0x00f2 -> ARABIC SUKUN + '\u067e' # 0x00f3 -> ARABIC LETTER PEH + '\u0679' # 0x00f4 -> ARABIC LETTER TTEH + '\u0686' # 0x00f5 -> ARABIC LETTER TCHEH + '\u06d5' # 0x00f6 -> ARABIC LETTER AE + '\u06a4' # 0x00f7 -> ARABIC LETTER VEH + '\u06af' # 0x00f8 -> ARABIC LETTER GAF + '\u0688' # 0x00f9 -> ARABIC LETTER DDAL + '\u0691' # 0x00fa -> ARABIC LETTER RREH + '{' # 0x00fb -> LEFT CURLY BRACKET, right-left + '|' # 0x00fc -> VERTICAL LINE, right-left + '}' # 0x00fd -> RIGHT CURLY BRACKET, right-left + '\u0698' # 0x00fe -> ARABIC LETTER JEH + '\u06d2' # 0x00ff -> ARABIC LETTER YEH BARREE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # CONTROL CHARACTER + 0x0001: 0x0001, # CONTROL CHARACTER + 0x0002: 0x0002, # CONTROL CHARACTER + 0x0003: 0x0003, # CONTROL CHARACTER + 0x0004: 0x0004, # CONTROL CHARACTER + 0x0005: 0x0005, # CONTROL CHARACTER + 0x0006: 0x0006, # CONTROL CHARACTER + 0x0007: 0x0007, # CONTROL CHARACTER + 0x0008: 0x0008, # CONTROL CHARACTER + 0x0009: 0x0009, # CONTROL CHARACTER + 0x000a: 0x000a, # CONTROL CHARACTER + 0x000b: 0x000b, # CONTROL CHARACTER + 0x000c: 0x000c, # CONTROL CHARACTER + 0x000d: 0x000d, # CONTROL CHARACTER + 0x000e: 0x000e, # CONTROL CHARACTER + 0x000f: 0x000f, # CONTROL CHARACTER + 0x0010: 0x0010, # CONTROL CHARACTER + 0x0011: 0x0011, # CONTROL CHARACTER + 0x0012: 0x0012, # CONTROL CHARACTER + 0x0013: 0x0013, # CONTROL CHARACTER + 0x0014: 0x0014, # CONTROL CHARACTER + 0x0015: 0x0015, # CONTROL CHARACTER + 0x0016: 0x0016, # CONTROL CHARACTER + 0x0017: 0x0017, # CONTROL CHARACTER + 0x0018: 0x0018, # CONTROL CHARACTER + 0x0019: 0x0019, # CONTROL CHARACTER + 0x001a: 0x001a, # CONTROL CHARACTER + 0x001b: 0x001b, # CONTROL CHARACTER + 0x001c: 0x001c, # CONTROL CHARACTER + 0x001d: 0x001d, # CONTROL CHARACTER + 0x001e: 0x001e, # CONTROL CHARACTER + 0x001f: 0x001f, # CONTROL CHARACTER + 0x0020: 0x0020, # SPACE, left-right + 0x0020: 0x00a0, # SPACE, right-left + 0x0021: 0x0021, # EXCLAMATION MARK, left-right + 0x0021: 0x00a1, # EXCLAMATION MARK, right-left + 0x0022: 0x0022, # QUOTATION MARK, left-right + 0x0022: 0x00a2, # QUOTATION MARK, right-left + 0x0023: 0x0023, # NUMBER SIGN, left-right + 0x0023: 0x00a3, # NUMBER SIGN, right-left + 0x0024: 0x0024, # DOLLAR SIGN, left-right + 0x0024: 0x00a4, # DOLLAR SIGN, right-left + 0x0025: 0x0025, # PERCENT SIGN, left-right + 0x0026: 0x0026, # AMPERSAND, left-right + 0x0026: 0x00a6, # AMPERSAND, right-left + 0x0027: 0x0027, # APOSTROPHE, left-right + 0x0027: 0x00a7, # APOSTROPHE, right-left + 0x0028: 0x0028, # LEFT PARENTHESIS, left-right + 0x0028: 0x00a8, # LEFT PARENTHESIS, right-left + 0x0029: 0x0029, # RIGHT PARENTHESIS, left-right + 0x0029: 0x00a9, # RIGHT PARENTHESIS, right-left + 0x002a: 0x002a, # ASTERISK, left-right + 0x002a: 0x00aa, # ASTERISK, right-left + 0x002b: 0x002b, # PLUS SIGN, left-right + 0x002b: 0x00ab, # PLUS SIGN, right-left + 0x002c: 0x002c, # COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR + 0x002d: 0x002d, # HYPHEN-MINUS, left-right + 0x002d: 0x00ad, # HYPHEN-MINUS, right-left + 0x002e: 0x002e, # FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR + 0x002e: 0x00ae, # FULL STOP, right-left + 0x002f: 0x002f, # SOLIDUS, left-right + 0x002f: 0x00af, # SOLIDUS, right-left + 0x0030: 0x0030, # DIGIT ZERO; in Arabic-script context, displayed as 0x0660 ARABIC-INDIC DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE; in Arabic-script context, displayed as 0x0661 ARABIC-INDIC DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO; in Arabic-script context, displayed as 0x0662 ARABIC-INDIC DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE; in Arabic-script context, displayed as 0x0663 ARABIC-INDIC DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR; in Arabic-script context, displayed as 0x0664 ARABIC-INDIC DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE; in Arabic-script context, displayed as 0x0665 ARABIC-INDIC DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX; in Arabic-script context, displayed as 0x0666 ARABIC-INDIC DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN; in Arabic-script context, displayed as 0x0667 ARABIC-INDIC DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT; in Arabic-script context, displayed as 0x0668 ARABIC-INDIC DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE; in Arabic-script context, displayed as 0x0669 ARABIC-INDIC DIGIT NINE + 0x003a: 0x003a, # COLON, left-right + 0x003a: 0x00ba, # COLON, right-left + 0x003b: 0x003b, # SEMICOLON, left-right + 0x003c: 0x003c, # LESS-THAN SIGN, left-right + 0x003c: 0x00bc, # LESS-THAN SIGN, right-left + 0x003d: 0x003d, # EQUALS SIGN, left-right + 0x003d: 0x00bd, # EQUALS SIGN, right-left + 0x003e: 0x003e, # GREATER-THAN SIGN, left-right + 0x003e: 0x00be, # GREATER-THAN SIGN, right-left + 0x003f: 0x003f, # QUESTION MARK, left-right + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET, left-right + 0x005b: 0x00db, # LEFT SQUARE BRACKET, right-left + 0x005c: 0x005c, # REVERSE SOLIDUS, left-right + 0x005c: 0x00dc, # REVERSE SOLIDUS, right-left + 0x005d: 0x005d, # RIGHT SQUARE BRACKET, left-right + 0x005d: 0x00dd, # RIGHT SQUARE BRACKET, right-left + 0x005e: 0x005e, # CIRCUMFLEX ACCENT, left-right + 0x005e: 0x00de, # CIRCUMFLEX ACCENT, right-left + 0x005f: 0x005f, # LOW LINE, left-right + 0x005f: 0x00df, # LOW LINE, right-left + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET, left-right + 0x007b: 0x00fb, # LEFT CURLY BRACKET, right-left + 0x007c: 0x007c, # VERTICAL LINE, left-right + 0x007c: 0x00fc, # VERTICAL LINE, right-left + 0x007d: 0x007d, # RIGHT CURLY BRACKET, left-right + 0x007d: 0x00fd, # RIGHT CURLY BRACKET, right-left + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # CONTROL CHARACTER + 0x00a0: 0x0081, # NO-BREAK SPACE, right-left + 0x00ab: 0x008c, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + 0x00bb: 0x0098, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + 0x00c4: 0x0080, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c7: 0x0082, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c9: 0x0083, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00d1: 0x0084, # LATIN CAPITAL LETTER N WITH TILDE + 0x00d6: 0x0085, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00dc: 0x0086, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00e0: 0x0088, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x0087, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0089, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e4: 0x008a, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e7: 0x008d, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008f, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x008e, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0090, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0091, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ed: 0x0092, # LATIN SMALL LETTER I WITH ACUTE + 0x00ee: 0x0094, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00ef: 0x0095, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00f1: 0x0096, # LATIN SMALL LETTER N WITH TILDE + 0x00f3: 0x0097, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0099, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f6: 0x009a, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x009b, # DIVISION SIGN, right-left + 0x00f9: 0x009d, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x009c, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x009e, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x009f, # LATIN SMALL LETTER U WITH DIAERESIS + 0x060c: 0x00ac, # ARABIC COMMA + 0x061b: 0x00bb, # ARABIC SEMICOLON + 0x061f: 0x00bf, # ARABIC QUESTION MARK + 0x0621: 0x00c1, # ARABIC LETTER HAMZA + 0x0622: 0x00c2, # ARABIC LETTER ALEF WITH MADDA ABOVE + 0x0623: 0x00c3, # ARABIC LETTER ALEF WITH HAMZA ABOVE + 0x0624: 0x00c4, # ARABIC LETTER WAW WITH HAMZA ABOVE + 0x0625: 0x00c5, # ARABIC LETTER ALEF WITH HAMZA BELOW + 0x0626: 0x00c6, # ARABIC LETTER YEH WITH HAMZA ABOVE + 0x0627: 0x00c7, # ARABIC LETTER ALEF + 0x0628: 0x00c8, # ARABIC LETTER BEH + 0x0629: 0x00c9, # ARABIC LETTER TEH MARBUTA + 0x062a: 0x00ca, # ARABIC LETTER TEH + 0x062b: 0x00cb, # ARABIC LETTER THEH + 0x062c: 0x00cc, # ARABIC LETTER JEEM + 0x062d: 0x00cd, # ARABIC LETTER HAH + 0x062e: 0x00ce, # ARABIC LETTER KHAH + 0x062f: 0x00cf, # ARABIC LETTER DAL + 0x0630: 0x00d0, # ARABIC LETTER THAL + 0x0631: 0x00d1, # ARABIC LETTER REH + 0x0632: 0x00d2, # ARABIC LETTER ZAIN + 0x0633: 0x00d3, # ARABIC LETTER SEEN + 0x0634: 0x00d4, # ARABIC LETTER SHEEN + 0x0635: 0x00d5, # ARABIC LETTER SAD + 0x0636: 0x00d6, # ARABIC LETTER DAD + 0x0637: 0x00d7, # ARABIC LETTER TAH + 0x0638: 0x00d8, # ARABIC LETTER ZAH + 0x0639: 0x00d9, # ARABIC LETTER AIN + 0x063a: 0x00da, # ARABIC LETTER GHAIN + 0x0640: 0x00e0, # ARABIC TATWEEL + 0x0641: 0x00e1, # ARABIC LETTER FEH + 0x0642: 0x00e2, # ARABIC LETTER QAF + 0x0643: 0x00e3, # ARABIC LETTER KAF + 0x0644: 0x00e4, # ARABIC LETTER LAM + 0x0645: 0x00e5, # ARABIC LETTER MEEM + 0x0646: 0x00e6, # ARABIC LETTER NOON + 0x0647: 0x00e7, # ARABIC LETTER HEH + 0x0648: 0x00e8, # ARABIC LETTER WAW + 0x0649: 0x00e9, # ARABIC LETTER ALEF MAKSURA + 0x064a: 0x00ea, # ARABIC LETTER YEH + 0x064b: 0x00eb, # ARABIC FATHATAN + 0x064c: 0x00ec, # ARABIC DAMMATAN + 0x064d: 0x00ed, # ARABIC KASRATAN + 0x064e: 0x00ee, # ARABIC FATHA + 0x064f: 0x00ef, # ARABIC DAMMA + 0x0650: 0x00f0, # ARABIC KASRA + 0x0651: 0x00f1, # ARABIC SHADDA + 0x0652: 0x00f2, # ARABIC SUKUN + 0x0660: 0x00b0, # ARABIC-INDIC DIGIT ZERO, right-left (need override) + 0x0661: 0x00b1, # ARABIC-INDIC DIGIT ONE, right-left (need override) + 0x0662: 0x00b2, # ARABIC-INDIC DIGIT TWO, right-left (need override) + 0x0663: 0x00b3, # ARABIC-INDIC DIGIT THREE, right-left (need override) + 0x0664: 0x00b4, # ARABIC-INDIC DIGIT FOUR, right-left (need override) + 0x0665: 0x00b5, # ARABIC-INDIC DIGIT FIVE, right-left (need override) + 0x0666: 0x00b6, # ARABIC-INDIC DIGIT SIX, right-left (need override) + 0x0667: 0x00b7, # ARABIC-INDIC DIGIT SEVEN, right-left (need override) + 0x0668: 0x00b8, # ARABIC-INDIC DIGIT EIGHT, right-left (need override) + 0x0669: 0x00b9, # ARABIC-INDIC DIGIT NINE, right-left (need override) + 0x066a: 0x00a5, # ARABIC PERCENT SIGN + 0x0679: 0x00f4, # ARABIC LETTER TTEH + 0x067e: 0x00f3, # ARABIC LETTER PEH + 0x0686: 0x00f5, # ARABIC LETTER TCHEH + 0x0688: 0x00f9, # ARABIC LETTER DDAL + 0x0691: 0x00fa, # ARABIC LETTER RREH + 0x0698: 0x00fe, # ARABIC LETTER JEH + 0x06a4: 0x00f7, # ARABIC LETTER VEH + 0x06af: 0x00f8, # ARABIC LETTER GAF + 0x06ba: 0x008b, # ARABIC LETTER NOON GHUNNA + 0x06d2: 0x00ff, # ARABIC LETTER YEH BARREE + 0x06d5: 0x00f6, # ARABIC LETTER AE + 0x2026: 0x0093, # HORIZONTAL ELLIPSIS, right-left + 0x274a: 0x00c0, # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left +} diff --git a/my_env/Lib/encodings/mac_centeuro.py b/my_env/Lib/encodings/mac_centeuro.py new file mode 100644 index 000000000..5785a0ec1 --- /dev/null +++ b/my_env/Lib/encodings/mac_centeuro.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_centeuro generated from 'MAPPINGS/VENDORS/APPLE/CENTEURO.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-centeuro', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> CONTROL CHARACTER + '\x01' # 0x01 -> CONTROL CHARACTER + '\x02' # 0x02 -> CONTROL CHARACTER + '\x03' # 0x03 -> CONTROL CHARACTER + '\x04' # 0x04 -> CONTROL CHARACTER + '\x05' # 0x05 -> CONTROL CHARACTER + '\x06' # 0x06 -> CONTROL CHARACTER + '\x07' # 0x07 -> CONTROL CHARACTER + '\x08' # 0x08 -> CONTROL CHARACTER + '\t' # 0x09 -> CONTROL CHARACTER + '\n' # 0x0A -> CONTROL CHARACTER + '\x0b' # 0x0B -> CONTROL CHARACTER + '\x0c' # 0x0C -> CONTROL CHARACTER + '\r' # 0x0D -> CONTROL CHARACTER + '\x0e' # 0x0E -> CONTROL CHARACTER + '\x0f' # 0x0F -> CONTROL CHARACTER + '\x10' # 0x10 -> CONTROL CHARACTER + '\x11' # 0x11 -> CONTROL CHARACTER + '\x12' # 0x12 -> CONTROL CHARACTER + '\x13' # 0x13 -> CONTROL CHARACTER + '\x14' # 0x14 -> CONTROL CHARACTER + '\x15' # 0x15 -> CONTROL CHARACTER + '\x16' # 0x16 -> CONTROL CHARACTER + '\x17' # 0x17 -> CONTROL CHARACTER + '\x18' # 0x18 -> CONTROL CHARACTER + '\x19' # 0x19 -> CONTROL CHARACTER + '\x1a' # 0x1A -> CONTROL CHARACTER + '\x1b' # 0x1B -> CONTROL CHARACTER + '\x1c' # 0x1C -> CONTROL CHARACTER + '\x1d' # 0x1D -> CONTROL CHARACTER + '\x1e' # 0x1E -> CONTROL CHARACTER + '\x1f' # 0x1F -> CONTROL CHARACTER + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> CONTROL CHARACTER + '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\u0100' # 0x81 -> LATIN CAPITAL LETTER A WITH MACRON + '\u0101' # 0x82 -> LATIN SMALL LETTER A WITH MACRON + '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + '\u0104' # 0x84 -> LATIN CAPITAL LETTER A WITH OGONEK + '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + '\u0105' # 0x88 -> LATIN SMALL LETTER A WITH OGONEK + '\u010c' # 0x89 -> LATIN CAPITAL LETTER C WITH CARON + '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + '\u010d' # 0x8B -> LATIN SMALL LETTER C WITH CARON + '\u0106' # 0x8C -> LATIN CAPITAL LETTER C WITH ACUTE + '\u0107' # 0x8D -> LATIN SMALL LETTER C WITH ACUTE + '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + '\u0179' # 0x8F -> LATIN CAPITAL LETTER Z WITH ACUTE + '\u017a' # 0x90 -> LATIN SMALL LETTER Z WITH ACUTE + '\u010e' # 0x91 -> LATIN CAPITAL LETTER D WITH CARON + '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + '\u010f' # 0x93 -> LATIN SMALL LETTER D WITH CARON + '\u0112' # 0x94 -> LATIN CAPITAL LETTER E WITH MACRON + '\u0113' # 0x95 -> LATIN SMALL LETTER E WITH MACRON + '\u0116' # 0x96 -> LATIN CAPITAL LETTER E WITH DOT ABOVE + '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + '\u0117' # 0x98 -> LATIN SMALL LETTER E WITH DOT ABOVE + '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE + '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + '\u011a' # 0x9D -> LATIN CAPITAL LETTER E WITH CARON + '\u011b' # 0x9E -> LATIN SMALL LETTER E WITH CARON + '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + '\u2020' # 0xA0 -> DAGGER + '\xb0' # 0xA1 -> DEGREE SIGN + '\u0118' # 0xA2 -> LATIN CAPITAL LETTER E WITH OGONEK + '\xa3' # 0xA3 -> POUND SIGN + '\xa7' # 0xA4 -> SECTION SIGN + '\u2022' # 0xA5 -> BULLET + '\xb6' # 0xA6 -> PILCROW SIGN + '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + '\xae' # 0xA8 -> REGISTERED SIGN + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u2122' # 0xAA -> TRADE MARK SIGN + '\u0119' # 0xAB -> LATIN SMALL LETTER E WITH OGONEK + '\xa8' # 0xAC -> DIAERESIS + '\u2260' # 0xAD -> NOT EQUAL TO + '\u0123' # 0xAE -> LATIN SMALL LETTER G WITH CEDILLA + '\u012e' # 0xAF -> LATIN CAPITAL LETTER I WITH OGONEK + '\u012f' # 0xB0 -> LATIN SMALL LETTER I WITH OGONEK + '\u012a' # 0xB1 -> LATIN CAPITAL LETTER I WITH MACRON + '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + '\u012b' # 0xB4 -> LATIN SMALL LETTER I WITH MACRON + '\u0136' # 0xB5 -> LATIN CAPITAL LETTER K WITH CEDILLA + '\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL + '\u2211' # 0xB7 -> N-ARY SUMMATION + '\u0142' # 0xB8 -> LATIN SMALL LETTER L WITH STROKE + '\u013b' # 0xB9 -> LATIN CAPITAL LETTER L WITH CEDILLA + '\u013c' # 0xBA -> LATIN SMALL LETTER L WITH CEDILLA + '\u013d' # 0xBB -> LATIN CAPITAL LETTER L WITH CARON + '\u013e' # 0xBC -> LATIN SMALL LETTER L WITH CARON + '\u0139' # 0xBD -> LATIN CAPITAL LETTER L WITH ACUTE + '\u013a' # 0xBE -> LATIN SMALL LETTER L WITH ACUTE + '\u0145' # 0xBF -> LATIN CAPITAL LETTER N WITH CEDILLA + '\u0146' # 0xC0 -> LATIN SMALL LETTER N WITH CEDILLA + '\u0143' # 0xC1 -> LATIN CAPITAL LETTER N WITH ACUTE + '\xac' # 0xC2 -> NOT SIGN + '\u221a' # 0xC3 -> SQUARE ROOT + '\u0144' # 0xC4 -> LATIN SMALL LETTER N WITH ACUTE + '\u0147' # 0xC5 -> LATIN CAPITAL LETTER N WITH CARON + '\u2206' # 0xC6 -> INCREMENT + '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + '\xa0' # 0xCA -> NO-BREAK SPACE + '\u0148' # 0xCB -> LATIN SMALL LETTER N WITH CARON + '\u0150' # 0xCC -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + '\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE + '\u0151' # 0xCE -> LATIN SMALL LETTER O WITH DOUBLE ACUTE + '\u014c' # 0xCF -> LATIN CAPITAL LETTER O WITH MACRON + '\u2013' # 0xD0 -> EN DASH + '\u2014' # 0xD1 -> EM DASH + '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + '\xf7' # 0xD6 -> DIVISION SIGN + '\u25ca' # 0xD7 -> LOZENGE + '\u014d' # 0xD8 -> LATIN SMALL LETTER O WITH MACRON + '\u0154' # 0xD9 -> LATIN CAPITAL LETTER R WITH ACUTE + '\u0155' # 0xDA -> LATIN SMALL LETTER R WITH ACUTE + '\u0158' # 0xDB -> LATIN CAPITAL LETTER R WITH CARON + '\u2039' # 0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u203a' # 0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\u0159' # 0xDE -> LATIN SMALL LETTER R WITH CARON + '\u0156' # 0xDF -> LATIN CAPITAL LETTER R WITH CEDILLA + '\u0157' # 0xE0 -> LATIN SMALL LETTER R WITH CEDILLA + '\u0160' # 0xE1 -> LATIN CAPITAL LETTER S WITH CARON + '\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK + '\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK + '\u0161' # 0xE4 -> LATIN SMALL LETTER S WITH CARON + '\u015a' # 0xE5 -> LATIN CAPITAL LETTER S WITH ACUTE + '\u015b' # 0xE6 -> LATIN SMALL LETTER S WITH ACUTE + '\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE + '\u0164' # 0xE8 -> LATIN CAPITAL LETTER T WITH CARON + '\u0165' # 0xE9 -> LATIN SMALL LETTER T WITH CARON + '\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE + '\u017d' # 0xEB -> LATIN CAPITAL LETTER Z WITH CARON + '\u017e' # 0xEC -> LATIN SMALL LETTER Z WITH CARON + '\u016a' # 0xED -> LATIN CAPITAL LETTER U WITH MACRON + '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\u016b' # 0xF0 -> LATIN SMALL LETTER U WITH MACRON + '\u016e' # 0xF1 -> LATIN CAPITAL LETTER U WITH RING ABOVE + '\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE + '\u016f' # 0xF3 -> LATIN SMALL LETTER U WITH RING ABOVE + '\u0170' # 0xF4 -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + '\u0171' # 0xF5 -> LATIN SMALL LETTER U WITH DOUBLE ACUTE + '\u0172' # 0xF6 -> LATIN CAPITAL LETTER U WITH OGONEK + '\u0173' # 0xF7 -> LATIN SMALL LETTER U WITH OGONEK + '\xdd' # 0xF8 -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xfd' # 0xF9 -> LATIN SMALL LETTER Y WITH ACUTE + '\u0137' # 0xFA -> LATIN SMALL LETTER K WITH CEDILLA + '\u017b' # 0xFB -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + '\u0141' # 0xFC -> LATIN CAPITAL LETTER L WITH STROKE + '\u017c' # 0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE + '\u0122' # 0xFE -> LATIN CAPITAL LETTER G WITH CEDILLA + '\u02c7' # 0xFF -> CARON +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/mac_croatian.py b/my_env/Lib/encodings/mac_croatian.py new file mode 100644 index 000000000..4a92fe61a --- /dev/null +++ b/my_env/Lib/encodings/mac_croatian.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_croatian generated from 'MAPPINGS/VENDORS/APPLE/CROATIAN.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-croatian', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> CONTROL CHARACTER + '\x01' # 0x01 -> CONTROL CHARACTER + '\x02' # 0x02 -> CONTROL CHARACTER + '\x03' # 0x03 -> CONTROL CHARACTER + '\x04' # 0x04 -> CONTROL CHARACTER + '\x05' # 0x05 -> CONTROL CHARACTER + '\x06' # 0x06 -> CONTROL CHARACTER + '\x07' # 0x07 -> CONTROL CHARACTER + '\x08' # 0x08 -> CONTROL CHARACTER + '\t' # 0x09 -> CONTROL CHARACTER + '\n' # 0x0A -> CONTROL CHARACTER + '\x0b' # 0x0B -> CONTROL CHARACTER + '\x0c' # 0x0C -> CONTROL CHARACTER + '\r' # 0x0D -> CONTROL CHARACTER + '\x0e' # 0x0E -> CONTROL CHARACTER + '\x0f' # 0x0F -> CONTROL CHARACTER + '\x10' # 0x10 -> CONTROL CHARACTER + '\x11' # 0x11 -> CONTROL CHARACTER + '\x12' # 0x12 -> CONTROL CHARACTER + '\x13' # 0x13 -> CONTROL CHARACTER + '\x14' # 0x14 -> CONTROL CHARACTER + '\x15' # 0x15 -> CONTROL CHARACTER + '\x16' # 0x16 -> CONTROL CHARACTER + '\x17' # 0x17 -> CONTROL CHARACTER + '\x18' # 0x18 -> CONTROL CHARACTER + '\x19' # 0x19 -> CONTROL CHARACTER + '\x1a' # 0x1A -> CONTROL CHARACTER + '\x1b' # 0x1B -> CONTROL CHARACTER + '\x1c' # 0x1C -> CONTROL CHARACTER + '\x1d' # 0x1D -> CONTROL CHARACTER + '\x1e' # 0x1E -> CONTROL CHARACTER + '\x1f' # 0x1F -> CONTROL CHARACTER + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> CONTROL CHARACTER + '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE + '\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + '\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE + '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + '\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE + '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + '\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE + '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE + '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + '\u2020' # 0xA0 -> DAGGER + '\xb0' # 0xA1 -> DEGREE SIGN + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa7' # 0xA4 -> SECTION SIGN + '\u2022' # 0xA5 -> BULLET + '\xb6' # 0xA6 -> PILCROW SIGN + '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + '\xae' # 0xA8 -> REGISTERED SIGN + '\u0160' # 0xA9 -> LATIN CAPITAL LETTER S WITH CARON + '\u2122' # 0xAA -> TRADE MARK SIGN + '\xb4' # 0xAB -> ACUTE ACCENT + '\xa8' # 0xAC -> DIAERESIS + '\u2260' # 0xAD -> NOT EQUAL TO + '\u017d' # 0xAE -> LATIN CAPITAL LETTER Z WITH CARON + '\xd8' # 0xAF -> LATIN CAPITAL LETTER O WITH STROKE + '\u221e' # 0xB0 -> INFINITY + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + '\u2206' # 0xB4 -> INCREMENT + '\xb5' # 0xB5 -> MICRO SIGN + '\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL + '\u2211' # 0xB7 -> N-ARY SUMMATION + '\u220f' # 0xB8 -> N-ARY PRODUCT + '\u0161' # 0xB9 -> LATIN SMALL LETTER S WITH CARON + '\u222b' # 0xBA -> INTEGRAL + '\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR + '\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR + '\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA + '\u017e' # 0xBE -> LATIN SMALL LETTER Z WITH CARON + '\xf8' # 0xBF -> LATIN SMALL LETTER O WITH STROKE + '\xbf' # 0xC0 -> INVERTED QUESTION MARK + '\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK + '\xac' # 0xC2 -> NOT SIGN + '\u221a' # 0xC3 -> SQUARE ROOT + '\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK + '\u2248' # 0xC5 -> ALMOST EQUAL TO + '\u0106' # 0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE + '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + '\xa0' # 0xCA -> NO-BREAK SPACE + '\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE + '\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE + '\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE + '\u0153' # 0xCF -> LATIN SMALL LIGATURE OE + '\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE + '\u2014' # 0xD1 -> EM DASH + '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + '\xf7' # 0xD6 -> DIVISION SIGN + '\u25ca' # 0xD7 -> LOZENGE + '\uf8ff' # 0xD8 -> Apple logo + '\xa9' # 0xD9 -> COPYRIGHT SIGN + '\u2044' # 0xDA -> FRACTION SLASH + '\u20ac' # 0xDB -> EURO SIGN + '\u2039' # 0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u203a' # 0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\xc6' # 0xDE -> LATIN CAPITAL LETTER AE + '\xbb' # 0xDF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2013' # 0xE0 -> EN DASH + '\xb7' # 0xE1 -> MIDDLE DOT + '\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK + '\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK + '\u2030' # 0xE4 -> PER MILLE SIGN + '\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\u0107' # 0xE6 -> LATIN SMALL LETTER C WITH ACUTE + '\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE + '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + '\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE + '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE + '\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE + '\u0131' # 0xF5 -> LATIN SMALL LETTER DOTLESS I + '\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT + '\u02dc' # 0xF7 -> SMALL TILDE + '\xaf' # 0xF8 -> MACRON + '\u03c0' # 0xF9 -> GREEK SMALL LETTER PI + '\xcb' # 0xFA -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\u02da' # 0xFB -> RING ABOVE + '\xb8' # 0xFC -> CEDILLA + '\xca' # 0xFD -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xe6' # 0xFE -> LATIN SMALL LETTER AE + '\u02c7' # 0xFF -> CARON +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/mac_cyrillic.py b/my_env/Lib/encodings/mac_cyrillic.py new file mode 100644 index 000000000..d20272acf --- /dev/null +++ b/my_env/Lib/encodings/mac_cyrillic.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_cyrillic generated from 'MAPPINGS/VENDORS/APPLE/CYRILLIC.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-cyrillic', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> CONTROL CHARACTER + '\x01' # 0x01 -> CONTROL CHARACTER + '\x02' # 0x02 -> CONTROL CHARACTER + '\x03' # 0x03 -> CONTROL CHARACTER + '\x04' # 0x04 -> CONTROL CHARACTER + '\x05' # 0x05 -> CONTROL CHARACTER + '\x06' # 0x06 -> CONTROL CHARACTER + '\x07' # 0x07 -> CONTROL CHARACTER + '\x08' # 0x08 -> CONTROL CHARACTER + '\t' # 0x09 -> CONTROL CHARACTER + '\n' # 0x0A -> CONTROL CHARACTER + '\x0b' # 0x0B -> CONTROL CHARACTER + '\x0c' # 0x0C -> CONTROL CHARACTER + '\r' # 0x0D -> CONTROL CHARACTER + '\x0e' # 0x0E -> CONTROL CHARACTER + '\x0f' # 0x0F -> CONTROL CHARACTER + '\x10' # 0x10 -> CONTROL CHARACTER + '\x11' # 0x11 -> CONTROL CHARACTER + '\x12' # 0x12 -> CONTROL CHARACTER + '\x13' # 0x13 -> CONTROL CHARACTER + '\x14' # 0x14 -> CONTROL CHARACTER + '\x15' # 0x15 -> CONTROL CHARACTER + '\x16' # 0x16 -> CONTROL CHARACTER + '\x17' # 0x17 -> CONTROL CHARACTER + '\x18' # 0x18 -> CONTROL CHARACTER + '\x19' # 0x19 -> CONTROL CHARACTER + '\x1a' # 0x1A -> CONTROL CHARACTER + '\x1b' # 0x1B -> CONTROL CHARACTER + '\x1c' # 0x1C -> CONTROL CHARACTER + '\x1d' # 0x1D -> CONTROL CHARACTER + '\x1e' # 0x1E -> CONTROL CHARACTER + '\x1f' # 0x1F -> CONTROL CHARACTER + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> CONTROL CHARACTER + '\u0410' # 0x80 -> CYRILLIC CAPITAL LETTER A + '\u0411' # 0x81 -> CYRILLIC CAPITAL LETTER BE + '\u0412' # 0x82 -> CYRILLIC CAPITAL LETTER VE + '\u0413' # 0x83 -> CYRILLIC CAPITAL LETTER GHE + '\u0414' # 0x84 -> CYRILLIC CAPITAL LETTER DE + '\u0415' # 0x85 -> CYRILLIC CAPITAL LETTER IE + '\u0416' # 0x86 -> CYRILLIC CAPITAL LETTER ZHE + '\u0417' # 0x87 -> CYRILLIC CAPITAL LETTER ZE + '\u0418' # 0x88 -> CYRILLIC CAPITAL LETTER I + '\u0419' # 0x89 -> CYRILLIC CAPITAL LETTER SHORT I + '\u041a' # 0x8A -> CYRILLIC CAPITAL LETTER KA + '\u041b' # 0x8B -> CYRILLIC CAPITAL LETTER EL + '\u041c' # 0x8C -> CYRILLIC CAPITAL LETTER EM + '\u041d' # 0x8D -> CYRILLIC CAPITAL LETTER EN + '\u041e' # 0x8E -> CYRILLIC CAPITAL LETTER O + '\u041f' # 0x8F -> CYRILLIC CAPITAL LETTER PE + '\u0420' # 0x90 -> CYRILLIC CAPITAL LETTER ER + '\u0421' # 0x91 -> CYRILLIC CAPITAL LETTER ES + '\u0422' # 0x92 -> CYRILLIC CAPITAL LETTER TE + '\u0423' # 0x93 -> CYRILLIC CAPITAL LETTER U + '\u0424' # 0x94 -> CYRILLIC CAPITAL LETTER EF + '\u0425' # 0x95 -> CYRILLIC CAPITAL LETTER HA + '\u0426' # 0x96 -> CYRILLIC CAPITAL LETTER TSE + '\u0427' # 0x97 -> CYRILLIC CAPITAL LETTER CHE + '\u0428' # 0x98 -> CYRILLIC CAPITAL LETTER SHA + '\u0429' # 0x99 -> CYRILLIC CAPITAL LETTER SHCHA + '\u042a' # 0x9A -> CYRILLIC CAPITAL LETTER HARD SIGN + '\u042b' # 0x9B -> CYRILLIC CAPITAL LETTER YERU + '\u042c' # 0x9C -> CYRILLIC CAPITAL LETTER SOFT SIGN + '\u042d' # 0x9D -> CYRILLIC CAPITAL LETTER E + '\u042e' # 0x9E -> CYRILLIC CAPITAL LETTER YU + '\u042f' # 0x9F -> CYRILLIC CAPITAL LETTER YA + '\u2020' # 0xA0 -> DAGGER + '\xb0' # 0xA1 -> DEGREE SIGN + '\u0490' # 0xA2 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN + '\xa3' # 0xA3 -> POUND SIGN + '\xa7' # 0xA4 -> SECTION SIGN + '\u2022' # 0xA5 -> BULLET + '\xb6' # 0xA6 -> PILCROW SIGN + '\u0406' # 0xA7 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + '\xae' # 0xA8 -> REGISTERED SIGN + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u2122' # 0xAA -> TRADE MARK SIGN + '\u0402' # 0xAB -> CYRILLIC CAPITAL LETTER DJE + '\u0452' # 0xAC -> CYRILLIC SMALL LETTER DJE + '\u2260' # 0xAD -> NOT EQUAL TO + '\u0403' # 0xAE -> CYRILLIC CAPITAL LETTER GJE + '\u0453' # 0xAF -> CYRILLIC SMALL LETTER GJE + '\u221e' # 0xB0 -> INFINITY + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + '\u0456' # 0xB4 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + '\xb5' # 0xB5 -> MICRO SIGN + '\u0491' # 0xB6 -> CYRILLIC SMALL LETTER GHE WITH UPTURN + '\u0408' # 0xB7 -> CYRILLIC CAPITAL LETTER JE + '\u0404' # 0xB8 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE + '\u0454' # 0xB9 -> CYRILLIC SMALL LETTER UKRAINIAN IE + '\u0407' # 0xBA -> CYRILLIC CAPITAL LETTER YI + '\u0457' # 0xBB -> CYRILLIC SMALL LETTER YI + '\u0409' # 0xBC -> CYRILLIC CAPITAL LETTER LJE + '\u0459' # 0xBD -> CYRILLIC SMALL LETTER LJE + '\u040a' # 0xBE -> CYRILLIC CAPITAL LETTER NJE + '\u045a' # 0xBF -> CYRILLIC SMALL LETTER NJE + '\u0458' # 0xC0 -> CYRILLIC SMALL LETTER JE + '\u0405' # 0xC1 -> CYRILLIC CAPITAL LETTER DZE + '\xac' # 0xC2 -> NOT SIGN + '\u221a' # 0xC3 -> SQUARE ROOT + '\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK + '\u2248' # 0xC5 -> ALMOST EQUAL TO + '\u2206' # 0xC6 -> INCREMENT + '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + '\xa0' # 0xCA -> NO-BREAK SPACE + '\u040b' # 0xCB -> CYRILLIC CAPITAL LETTER TSHE + '\u045b' # 0xCC -> CYRILLIC SMALL LETTER TSHE + '\u040c' # 0xCD -> CYRILLIC CAPITAL LETTER KJE + '\u045c' # 0xCE -> CYRILLIC SMALL LETTER KJE + '\u0455' # 0xCF -> CYRILLIC SMALL LETTER DZE + '\u2013' # 0xD0 -> EN DASH + '\u2014' # 0xD1 -> EM DASH + '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + '\xf7' # 0xD6 -> DIVISION SIGN + '\u201e' # 0xD7 -> DOUBLE LOW-9 QUOTATION MARK + '\u040e' # 0xD8 -> CYRILLIC CAPITAL LETTER SHORT U + '\u045e' # 0xD9 -> CYRILLIC SMALL LETTER SHORT U + '\u040f' # 0xDA -> CYRILLIC CAPITAL LETTER DZHE + '\u045f' # 0xDB -> CYRILLIC SMALL LETTER DZHE + '\u2116' # 0xDC -> NUMERO SIGN + '\u0401' # 0xDD -> CYRILLIC CAPITAL LETTER IO + '\u0451' # 0xDE -> CYRILLIC SMALL LETTER IO + '\u044f' # 0xDF -> CYRILLIC SMALL LETTER YA + '\u0430' # 0xE0 -> CYRILLIC SMALL LETTER A + '\u0431' # 0xE1 -> CYRILLIC SMALL LETTER BE + '\u0432' # 0xE2 -> CYRILLIC SMALL LETTER VE + '\u0433' # 0xE3 -> CYRILLIC SMALL LETTER GHE + '\u0434' # 0xE4 -> CYRILLIC SMALL LETTER DE + '\u0435' # 0xE5 -> CYRILLIC SMALL LETTER IE + '\u0436' # 0xE6 -> CYRILLIC SMALL LETTER ZHE + '\u0437' # 0xE7 -> CYRILLIC SMALL LETTER ZE + '\u0438' # 0xE8 -> CYRILLIC SMALL LETTER I + '\u0439' # 0xE9 -> CYRILLIC SMALL LETTER SHORT I + '\u043a' # 0xEA -> CYRILLIC SMALL LETTER KA + '\u043b' # 0xEB -> CYRILLIC SMALL LETTER EL + '\u043c' # 0xEC -> CYRILLIC SMALL LETTER EM + '\u043d' # 0xED -> CYRILLIC SMALL LETTER EN + '\u043e' # 0xEE -> CYRILLIC SMALL LETTER O + '\u043f' # 0xEF -> CYRILLIC SMALL LETTER PE + '\u0440' # 0xF0 -> CYRILLIC SMALL LETTER ER + '\u0441' # 0xF1 -> CYRILLIC SMALL LETTER ES + '\u0442' # 0xF2 -> CYRILLIC SMALL LETTER TE + '\u0443' # 0xF3 -> CYRILLIC SMALL LETTER U + '\u0444' # 0xF4 -> CYRILLIC SMALL LETTER EF + '\u0445' # 0xF5 -> CYRILLIC SMALL LETTER HA + '\u0446' # 0xF6 -> CYRILLIC SMALL LETTER TSE + '\u0447' # 0xF7 -> CYRILLIC SMALL LETTER CHE + '\u0448' # 0xF8 -> CYRILLIC SMALL LETTER SHA + '\u0449' # 0xF9 -> CYRILLIC SMALL LETTER SHCHA + '\u044a' # 0xFA -> CYRILLIC SMALL LETTER HARD SIGN + '\u044b' # 0xFB -> CYRILLIC SMALL LETTER YERU + '\u044c' # 0xFC -> CYRILLIC SMALL LETTER SOFT SIGN + '\u044d' # 0xFD -> CYRILLIC SMALL LETTER E + '\u044e' # 0xFE -> CYRILLIC SMALL LETTER YU + '\u20ac' # 0xFF -> EURO SIGN +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/mac_farsi.py b/my_env/Lib/encodings/mac_farsi.py new file mode 100644 index 000000000..e357d4351 --- /dev/null +++ b/my_env/Lib/encodings/mac_farsi.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_farsi generated from 'MAPPINGS/VENDORS/APPLE/FARSI.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-farsi', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> CONTROL CHARACTER + '\x01' # 0x01 -> CONTROL CHARACTER + '\x02' # 0x02 -> CONTROL CHARACTER + '\x03' # 0x03 -> CONTROL CHARACTER + '\x04' # 0x04 -> CONTROL CHARACTER + '\x05' # 0x05 -> CONTROL CHARACTER + '\x06' # 0x06 -> CONTROL CHARACTER + '\x07' # 0x07 -> CONTROL CHARACTER + '\x08' # 0x08 -> CONTROL CHARACTER + '\t' # 0x09 -> CONTROL CHARACTER + '\n' # 0x0A -> CONTROL CHARACTER + '\x0b' # 0x0B -> CONTROL CHARACTER + '\x0c' # 0x0C -> CONTROL CHARACTER + '\r' # 0x0D -> CONTROL CHARACTER + '\x0e' # 0x0E -> CONTROL CHARACTER + '\x0f' # 0x0F -> CONTROL CHARACTER + '\x10' # 0x10 -> CONTROL CHARACTER + '\x11' # 0x11 -> CONTROL CHARACTER + '\x12' # 0x12 -> CONTROL CHARACTER + '\x13' # 0x13 -> CONTROL CHARACTER + '\x14' # 0x14 -> CONTROL CHARACTER + '\x15' # 0x15 -> CONTROL CHARACTER + '\x16' # 0x16 -> CONTROL CHARACTER + '\x17' # 0x17 -> CONTROL CHARACTER + '\x18' # 0x18 -> CONTROL CHARACTER + '\x19' # 0x19 -> CONTROL CHARACTER + '\x1a' # 0x1A -> CONTROL CHARACTER + '\x1b' # 0x1B -> CONTROL CHARACTER + '\x1c' # 0x1C -> CONTROL CHARACTER + '\x1d' # 0x1D -> CONTROL CHARACTER + '\x1e' # 0x1E -> CONTROL CHARACTER + '\x1f' # 0x1F -> CONTROL CHARACTER + ' ' # 0x20 -> SPACE, left-right + '!' # 0x21 -> EXCLAMATION MARK, left-right + '"' # 0x22 -> QUOTATION MARK, left-right + '#' # 0x23 -> NUMBER SIGN, left-right + '$' # 0x24 -> DOLLAR SIGN, left-right + '%' # 0x25 -> PERCENT SIGN, left-right + '&' # 0x26 -> AMPERSAND, left-right + "'" # 0x27 -> APOSTROPHE, left-right + '(' # 0x28 -> LEFT PARENTHESIS, left-right + ')' # 0x29 -> RIGHT PARENTHESIS, left-right + '*' # 0x2A -> ASTERISK, left-right + '+' # 0x2B -> PLUS SIGN, left-right + ',' # 0x2C -> COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR + '-' # 0x2D -> HYPHEN-MINUS, left-right + '.' # 0x2E -> FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR + '/' # 0x2F -> SOLIDUS, left-right + '0' # 0x30 -> DIGIT ZERO; in Arabic-script context, displayed as 0x06F0 EXTENDED ARABIC-INDIC DIGIT ZERO + '1' # 0x31 -> DIGIT ONE; in Arabic-script context, displayed as 0x06F1 EXTENDED ARABIC-INDIC DIGIT ONE + '2' # 0x32 -> DIGIT TWO; in Arabic-script context, displayed as 0x06F2 EXTENDED ARABIC-INDIC DIGIT TWO + '3' # 0x33 -> DIGIT THREE; in Arabic-script context, displayed as 0x06F3 EXTENDED ARABIC-INDIC DIGIT THREE + '4' # 0x34 -> DIGIT FOUR; in Arabic-script context, displayed as 0x06F4 EXTENDED ARABIC-INDIC DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE; in Arabic-script context, displayed as 0x06F5 EXTENDED ARABIC-INDIC DIGIT FIVE + '6' # 0x36 -> DIGIT SIX; in Arabic-script context, displayed as 0x06F6 EXTENDED ARABIC-INDIC DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN; in Arabic-script context, displayed as 0x06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT; in Arabic-script context, displayed as 0x06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE; in Arabic-script context, displayed as 0x06F9 EXTENDED ARABIC-INDIC DIGIT NINE + ':' # 0x3A -> COLON, left-right + ';' # 0x3B -> SEMICOLON, left-right + '<' # 0x3C -> LESS-THAN SIGN, left-right + '=' # 0x3D -> EQUALS SIGN, left-right + '>' # 0x3E -> GREATER-THAN SIGN, left-right + '?' # 0x3F -> QUESTION MARK, left-right + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET, left-right + '\\' # 0x5C -> REVERSE SOLIDUS, left-right + ']' # 0x5D -> RIGHT SQUARE BRACKET, left-right + '^' # 0x5E -> CIRCUMFLEX ACCENT, left-right + '_' # 0x5F -> LOW LINE, left-right + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET, left-right + '|' # 0x7C -> VERTICAL LINE, left-right + '}' # 0x7D -> RIGHT CURLY BRACKET, left-right + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> CONTROL CHARACTER + '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xa0' # 0x81 -> NO-BREAK SPACE, right-left + '\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + '\u06ba' # 0x8B -> ARABIC LETTER NOON GHUNNA + '\xab' # 0x8C -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + '\u2026' # 0x93 -> HORIZONTAL ELLIPSIS, right-left + '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + '\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE + '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + '\xbb' # 0x98 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0x9B -> DIVISION SIGN, right-left + '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + ' ' # 0xA0 -> SPACE, right-left + '!' # 0xA1 -> EXCLAMATION MARK, right-left + '"' # 0xA2 -> QUOTATION MARK, right-left + '#' # 0xA3 -> NUMBER SIGN, right-left + '$' # 0xA4 -> DOLLAR SIGN, right-left + '\u066a' # 0xA5 -> ARABIC PERCENT SIGN + '&' # 0xA6 -> AMPERSAND, right-left + "'" # 0xA7 -> APOSTROPHE, right-left + '(' # 0xA8 -> LEFT PARENTHESIS, right-left + ')' # 0xA9 -> RIGHT PARENTHESIS, right-left + '*' # 0xAA -> ASTERISK, right-left + '+' # 0xAB -> PLUS SIGN, right-left + '\u060c' # 0xAC -> ARABIC COMMA + '-' # 0xAD -> HYPHEN-MINUS, right-left + '.' # 0xAE -> FULL STOP, right-left + '/' # 0xAF -> SOLIDUS, right-left + '\u06f0' # 0xB0 -> EXTENDED ARABIC-INDIC DIGIT ZERO, right-left (need override) + '\u06f1' # 0xB1 -> EXTENDED ARABIC-INDIC DIGIT ONE, right-left (need override) + '\u06f2' # 0xB2 -> EXTENDED ARABIC-INDIC DIGIT TWO, right-left (need override) + '\u06f3' # 0xB3 -> EXTENDED ARABIC-INDIC DIGIT THREE, right-left (need override) + '\u06f4' # 0xB4 -> EXTENDED ARABIC-INDIC DIGIT FOUR, right-left (need override) + '\u06f5' # 0xB5 -> EXTENDED ARABIC-INDIC DIGIT FIVE, right-left (need override) + '\u06f6' # 0xB6 -> EXTENDED ARABIC-INDIC DIGIT SIX, right-left (need override) + '\u06f7' # 0xB7 -> EXTENDED ARABIC-INDIC DIGIT SEVEN, right-left (need override) + '\u06f8' # 0xB8 -> EXTENDED ARABIC-INDIC DIGIT EIGHT, right-left (need override) + '\u06f9' # 0xB9 -> EXTENDED ARABIC-INDIC DIGIT NINE, right-left (need override) + ':' # 0xBA -> COLON, right-left + '\u061b' # 0xBB -> ARABIC SEMICOLON + '<' # 0xBC -> LESS-THAN SIGN, right-left + '=' # 0xBD -> EQUALS SIGN, right-left + '>' # 0xBE -> GREATER-THAN SIGN, right-left + '\u061f' # 0xBF -> ARABIC QUESTION MARK + '\u274a' # 0xC0 -> EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left + '\u0621' # 0xC1 -> ARABIC LETTER HAMZA + '\u0622' # 0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE + '\u0623' # 0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE + '\u0624' # 0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE + '\u0625' # 0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW + '\u0626' # 0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE + '\u0627' # 0xC7 -> ARABIC LETTER ALEF + '\u0628' # 0xC8 -> ARABIC LETTER BEH + '\u0629' # 0xC9 -> ARABIC LETTER TEH MARBUTA + '\u062a' # 0xCA -> ARABIC LETTER TEH + '\u062b' # 0xCB -> ARABIC LETTER THEH + '\u062c' # 0xCC -> ARABIC LETTER JEEM + '\u062d' # 0xCD -> ARABIC LETTER HAH + '\u062e' # 0xCE -> ARABIC LETTER KHAH + '\u062f' # 0xCF -> ARABIC LETTER DAL + '\u0630' # 0xD0 -> ARABIC LETTER THAL + '\u0631' # 0xD1 -> ARABIC LETTER REH + '\u0632' # 0xD2 -> ARABIC LETTER ZAIN + '\u0633' # 0xD3 -> ARABIC LETTER SEEN + '\u0634' # 0xD4 -> ARABIC LETTER SHEEN + '\u0635' # 0xD5 -> ARABIC LETTER SAD + '\u0636' # 0xD6 -> ARABIC LETTER DAD + '\u0637' # 0xD7 -> ARABIC LETTER TAH + '\u0638' # 0xD8 -> ARABIC LETTER ZAH + '\u0639' # 0xD9 -> ARABIC LETTER AIN + '\u063a' # 0xDA -> ARABIC LETTER GHAIN + '[' # 0xDB -> LEFT SQUARE BRACKET, right-left + '\\' # 0xDC -> REVERSE SOLIDUS, right-left + ']' # 0xDD -> RIGHT SQUARE BRACKET, right-left + '^' # 0xDE -> CIRCUMFLEX ACCENT, right-left + '_' # 0xDF -> LOW LINE, right-left + '\u0640' # 0xE0 -> ARABIC TATWEEL + '\u0641' # 0xE1 -> ARABIC LETTER FEH + '\u0642' # 0xE2 -> ARABIC LETTER QAF + '\u0643' # 0xE3 -> ARABIC LETTER KAF + '\u0644' # 0xE4 -> ARABIC LETTER LAM + '\u0645' # 0xE5 -> ARABIC LETTER MEEM + '\u0646' # 0xE6 -> ARABIC LETTER NOON + '\u0647' # 0xE7 -> ARABIC LETTER HEH + '\u0648' # 0xE8 -> ARABIC LETTER WAW + '\u0649' # 0xE9 -> ARABIC LETTER ALEF MAKSURA + '\u064a' # 0xEA -> ARABIC LETTER YEH + '\u064b' # 0xEB -> ARABIC FATHATAN + '\u064c' # 0xEC -> ARABIC DAMMATAN + '\u064d' # 0xED -> ARABIC KASRATAN + '\u064e' # 0xEE -> ARABIC FATHA + '\u064f' # 0xEF -> ARABIC DAMMA + '\u0650' # 0xF0 -> ARABIC KASRA + '\u0651' # 0xF1 -> ARABIC SHADDA + '\u0652' # 0xF2 -> ARABIC SUKUN + '\u067e' # 0xF3 -> ARABIC LETTER PEH + '\u0679' # 0xF4 -> ARABIC LETTER TTEH + '\u0686' # 0xF5 -> ARABIC LETTER TCHEH + '\u06d5' # 0xF6 -> ARABIC LETTER AE + '\u06a4' # 0xF7 -> ARABIC LETTER VEH + '\u06af' # 0xF8 -> ARABIC LETTER GAF + '\u0688' # 0xF9 -> ARABIC LETTER DDAL + '\u0691' # 0xFA -> ARABIC LETTER RREH + '{' # 0xFB -> LEFT CURLY BRACKET, right-left + '|' # 0xFC -> VERTICAL LINE, right-left + '}' # 0xFD -> RIGHT CURLY BRACKET, right-left + '\u0698' # 0xFE -> ARABIC LETTER JEH + '\u06d2' # 0xFF -> ARABIC LETTER YEH BARREE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/mac_greek.py b/my_env/Lib/encodings/mac_greek.py new file mode 100644 index 000000000..d3d0c4f0c --- /dev/null +++ b/my_env/Lib/encodings/mac_greek.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_greek generated from 'MAPPINGS/VENDORS/APPLE/GREEK.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-greek', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> CONTROL CHARACTER + '\x01' # 0x01 -> CONTROL CHARACTER + '\x02' # 0x02 -> CONTROL CHARACTER + '\x03' # 0x03 -> CONTROL CHARACTER + '\x04' # 0x04 -> CONTROL CHARACTER + '\x05' # 0x05 -> CONTROL CHARACTER + '\x06' # 0x06 -> CONTROL CHARACTER + '\x07' # 0x07 -> CONTROL CHARACTER + '\x08' # 0x08 -> CONTROL CHARACTER + '\t' # 0x09 -> CONTROL CHARACTER + '\n' # 0x0A -> CONTROL CHARACTER + '\x0b' # 0x0B -> CONTROL CHARACTER + '\x0c' # 0x0C -> CONTROL CHARACTER + '\r' # 0x0D -> CONTROL CHARACTER + '\x0e' # 0x0E -> CONTROL CHARACTER + '\x0f' # 0x0F -> CONTROL CHARACTER + '\x10' # 0x10 -> CONTROL CHARACTER + '\x11' # 0x11 -> CONTROL CHARACTER + '\x12' # 0x12 -> CONTROL CHARACTER + '\x13' # 0x13 -> CONTROL CHARACTER + '\x14' # 0x14 -> CONTROL CHARACTER + '\x15' # 0x15 -> CONTROL CHARACTER + '\x16' # 0x16 -> CONTROL CHARACTER + '\x17' # 0x17 -> CONTROL CHARACTER + '\x18' # 0x18 -> CONTROL CHARACTER + '\x19' # 0x19 -> CONTROL CHARACTER + '\x1a' # 0x1A -> CONTROL CHARACTER + '\x1b' # 0x1B -> CONTROL CHARACTER + '\x1c' # 0x1C -> CONTROL CHARACTER + '\x1d' # 0x1D -> CONTROL CHARACTER + '\x1e' # 0x1E -> CONTROL CHARACTER + '\x1f' # 0x1F -> CONTROL CHARACTER + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> CONTROL CHARACTER + '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xb9' # 0x81 -> SUPERSCRIPT ONE + '\xb2' # 0x82 -> SUPERSCRIPT TWO + '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xb3' # 0x84 -> SUPERSCRIPT THREE + '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\u0385' # 0x87 -> GREEK DIALYTIKA TONOS + '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + '\u0384' # 0x8B -> GREEK TONOS + '\xa8' # 0x8C -> DIAERESIS + '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xa3' # 0x92 -> POUND SIGN + '\u2122' # 0x93 -> TRADE MARK SIGN + '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + '\u2022' # 0x96 -> BULLET + '\xbd' # 0x97 -> VULGAR FRACTION ONE HALF + '\u2030' # 0x98 -> PER MILLE SIGN + '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + '\xa6' # 0x9B -> BROKEN BAR + '\u20ac' # 0x9C -> EURO SIGN # before Mac OS 9.2.2, was SOFT HYPHEN + '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + '\u2020' # 0xA0 -> DAGGER + '\u0393' # 0xA1 -> GREEK CAPITAL LETTER GAMMA + '\u0394' # 0xA2 -> GREEK CAPITAL LETTER DELTA + '\u0398' # 0xA3 -> GREEK CAPITAL LETTER THETA + '\u039b' # 0xA4 -> GREEK CAPITAL LETTER LAMDA + '\u039e' # 0xA5 -> GREEK CAPITAL LETTER XI + '\u03a0' # 0xA6 -> GREEK CAPITAL LETTER PI + '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + '\xae' # 0xA8 -> REGISTERED SIGN + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u03a3' # 0xAA -> GREEK CAPITAL LETTER SIGMA + '\u03aa' # 0xAB -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + '\xa7' # 0xAC -> SECTION SIGN + '\u2260' # 0xAD -> NOT EQUAL TO + '\xb0' # 0xAE -> DEGREE SIGN + '\xb7' # 0xAF -> MIDDLE DOT + '\u0391' # 0xB0 -> GREEK CAPITAL LETTER ALPHA + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + '\xa5' # 0xB4 -> YEN SIGN + '\u0392' # 0xB5 -> GREEK CAPITAL LETTER BETA + '\u0395' # 0xB6 -> GREEK CAPITAL LETTER EPSILON + '\u0396' # 0xB7 -> GREEK CAPITAL LETTER ZETA + '\u0397' # 0xB8 -> GREEK CAPITAL LETTER ETA + '\u0399' # 0xB9 -> GREEK CAPITAL LETTER IOTA + '\u039a' # 0xBA -> GREEK CAPITAL LETTER KAPPA + '\u039c' # 0xBB -> GREEK CAPITAL LETTER MU + '\u03a6' # 0xBC -> GREEK CAPITAL LETTER PHI + '\u03ab' # 0xBD -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + '\u03a8' # 0xBE -> GREEK CAPITAL LETTER PSI + '\u03a9' # 0xBF -> GREEK CAPITAL LETTER OMEGA + '\u03ac' # 0xC0 -> GREEK SMALL LETTER ALPHA WITH TONOS + '\u039d' # 0xC1 -> GREEK CAPITAL LETTER NU + '\xac' # 0xC2 -> NOT SIGN + '\u039f' # 0xC3 -> GREEK CAPITAL LETTER OMICRON + '\u03a1' # 0xC4 -> GREEK CAPITAL LETTER RHO + '\u2248' # 0xC5 -> ALMOST EQUAL TO + '\u03a4' # 0xC6 -> GREEK CAPITAL LETTER TAU + '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + '\xa0' # 0xCA -> NO-BREAK SPACE + '\u03a5' # 0xCB -> GREEK CAPITAL LETTER UPSILON + '\u03a7' # 0xCC -> GREEK CAPITAL LETTER CHI + '\u0386' # 0xCD -> GREEK CAPITAL LETTER ALPHA WITH TONOS + '\u0388' # 0xCE -> GREEK CAPITAL LETTER EPSILON WITH TONOS + '\u0153' # 0xCF -> LATIN SMALL LIGATURE OE + '\u2013' # 0xD0 -> EN DASH + '\u2015' # 0xD1 -> HORIZONTAL BAR + '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + '\xf7' # 0xD6 -> DIVISION SIGN + '\u0389' # 0xD7 -> GREEK CAPITAL LETTER ETA WITH TONOS + '\u038a' # 0xD8 -> GREEK CAPITAL LETTER IOTA WITH TONOS + '\u038c' # 0xD9 -> GREEK CAPITAL LETTER OMICRON WITH TONOS + '\u038e' # 0xDA -> GREEK CAPITAL LETTER UPSILON WITH TONOS + '\u03ad' # 0xDB -> GREEK SMALL LETTER EPSILON WITH TONOS + '\u03ae' # 0xDC -> GREEK SMALL LETTER ETA WITH TONOS + '\u03af' # 0xDD -> GREEK SMALL LETTER IOTA WITH TONOS + '\u03cc' # 0xDE -> GREEK SMALL LETTER OMICRON WITH TONOS + '\u038f' # 0xDF -> GREEK CAPITAL LETTER OMEGA WITH TONOS + '\u03cd' # 0xE0 -> GREEK SMALL LETTER UPSILON WITH TONOS + '\u03b1' # 0xE1 -> GREEK SMALL LETTER ALPHA + '\u03b2' # 0xE2 -> GREEK SMALL LETTER BETA + '\u03c8' # 0xE3 -> GREEK SMALL LETTER PSI + '\u03b4' # 0xE4 -> GREEK SMALL LETTER DELTA + '\u03b5' # 0xE5 -> GREEK SMALL LETTER EPSILON + '\u03c6' # 0xE6 -> GREEK SMALL LETTER PHI + '\u03b3' # 0xE7 -> GREEK SMALL LETTER GAMMA + '\u03b7' # 0xE8 -> GREEK SMALL LETTER ETA + '\u03b9' # 0xE9 -> GREEK SMALL LETTER IOTA + '\u03be' # 0xEA -> GREEK SMALL LETTER XI + '\u03ba' # 0xEB -> GREEK SMALL LETTER KAPPA + '\u03bb' # 0xEC -> GREEK SMALL LETTER LAMDA + '\u03bc' # 0xED -> GREEK SMALL LETTER MU + '\u03bd' # 0xEE -> GREEK SMALL LETTER NU + '\u03bf' # 0xEF -> GREEK SMALL LETTER OMICRON + '\u03c0' # 0xF0 -> GREEK SMALL LETTER PI + '\u03ce' # 0xF1 -> GREEK SMALL LETTER OMEGA WITH TONOS + '\u03c1' # 0xF2 -> GREEK SMALL LETTER RHO + '\u03c3' # 0xF3 -> GREEK SMALL LETTER SIGMA + '\u03c4' # 0xF4 -> GREEK SMALL LETTER TAU + '\u03b8' # 0xF5 -> GREEK SMALL LETTER THETA + '\u03c9' # 0xF6 -> GREEK SMALL LETTER OMEGA + '\u03c2' # 0xF7 -> GREEK SMALL LETTER FINAL SIGMA + '\u03c7' # 0xF8 -> GREEK SMALL LETTER CHI + '\u03c5' # 0xF9 -> GREEK SMALL LETTER UPSILON + '\u03b6' # 0xFA -> GREEK SMALL LETTER ZETA + '\u03ca' # 0xFB -> GREEK SMALL LETTER IOTA WITH DIALYTIKA + '\u03cb' # 0xFC -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA + '\u0390' # 0xFD -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + '\u03b0' # 0xFE -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + '\xad' # 0xFF -> SOFT HYPHEN # before Mac OS 9.2.2, was undefined +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/mac_iceland.py b/my_env/Lib/encodings/mac_iceland.py new file mode 100644 index 000000000..add10f4e5 --- /dev/null +++ b/my_env/Lib/encodings/mac_iceland.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_iceland generated from 'MAPPINGS/VENDORS/APPLE/ICELAND.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-iceland', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> CONTROL CHARACTER + '\x01' # 0x01 -> CONTROL CHARACTER + '\x02' # 0x02 -> CONTROL CHARACTER + '\x03' # 0x03 -> CONTROL CHARACTER + '\x04' # 0x04 -> CONTROL CHARACTER + '\x05' # 0x05 -> CONTROL CHARACTER + '\x06' # 0x06 -> CONTROL CHARACTER + '\x07' # 0x07 -> CONTROL CHARACTER + '\x08' # 0x08 -> CONTROL CHARACTER + '\t' # 0x09 -> CONTROL CHARACTER + '\n' # 0x0A -> CONTROL CHARACTER + '\x0b' # 0x0B -> CONTROL CHARACTER + '\x0c' # 0x0C -> CONTROL CHARACTER + '\r' # 0x0D -> CONTROL CHARACTER + '\x0e' # 0x0E -> CONTROL CHARACTER + '\x0f' # 0x0F -> CONTROL CHARACTER + '\x10' # 0x10 -> CONTROL CHARACTER + '\x11' # 0x11 -> CONTROL CHARACTER + '\x12' # 0x12 -> CONTROL CHARACTER + '\x13' # 0x13 -> CONTROL CHARACTER + '\x14' # 0x14 -> CONTROL CHARACTER + '\x15' # 0x15 -> CONTROL CHARACTER + '\x16' # 0x16 -> CONTROL CHARACTER + '\x17' # 0x17 -> CONTROL CHARACTER + '\x18' # 0x18 -> CONTROL CHARACTER + '\x19' # 0x19 -> CONTROL CHARACTER + '\x1a' # 0x1A -> CONTROL CHARACTER + '\x1b' # 0x1B -> CONTROL CHARACTER + '\x1c' # 0x1C -> CONTROL CHARACTER + '\x1d' # 0x1D -> CONTROL CHARACTER + '\x1e' # 0x1E -> CONTROL CHARACTER + '\x1f' # 0x1F -> CONTROL CHARACTER + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> CONTROL CHARACTER + '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE + '\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + '\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE + '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + '\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE + '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + '\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE + '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE + '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + '\xdd' # 0xA0 -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xb0' # 0xA1 -> DEGREE SIGN + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa7' # 0xA4 -> SECTION SIGN + '\u2022' # 0xA5 -> BULLET + '\xb6' # 0xA6 -> PILCROW SIGN + '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + '\xae' # 0xA8 -> REGISTERED SIGN + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u2122' # 0xAA -> TRADE MARK SIGN + '\xb4' # 0xAB -> ACUTE ACCENT + '\xa8' # 0xAC -> DIAERESIS + '\u2260' # 0xAD -> NOT EQUAL TO + '\xc6' # 0xAE -> LATIN CAPITAL LETTER AE + '\xd8' # 0xAF -> LATIN CAPITAL LETTER O WITH STROKE + '\u221e' # 0xB0 -> INFINITY + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + '\xa5' # 0xB4 -> YEN SIGN + '\xb5' # 0xB5 -> MICRO SIGN + '\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL + '\u2211' # 0xB7 -> N-ARY SUMMATION + '\u220f' # 0xB8 -> N-ARY PRODUCT + '\u03c0' # 0xB9 -> GREEK SMALL LETTER PI + '\u222b' # 0xBA -> INTEGRAL + '\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR + '\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR + '\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA + '\xe6' # 0xBE -> LATIN SMALL LETTER AE + '\xf8' # 0xBF -> LATIN SMALL LETTER O WITH STROKE + '\xbf' # 0xC0 -> INVERTED QUESTION MARK + '\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK + '\xac' # 0xC2 -> NOT SIGN + '\u221a' # 0xC3 -> SQUARE ROOT + '\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK + '\u2248' # 0xC5 -> ALMOST EQUAL TO + '\u2206' # 0xC6 -> INCREMENT + '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + '\xa0' # 0xCA -> NO-BREAK SPACE + '\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE + '\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE + '\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE + '\u0153' # 0xCF -> LATIN SMALL LIGATURE OE + '\u2013' # 0xD0 -> EN DASH + '\u2014' # 0xD1 -> EM DASH + '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + '\xf7' # 0xD6 -> DIVISION SIGN + '\u25ca' # 0xD7 -> LOZENGE + '\xff' # 0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS + '\u0178' # 0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS + '\u2044' # 0xDA -> FRACTION SLASH + '\u20ac' # 0xDB -> EURO SIGN + '\xd0' # 0xDC -> LATIN CAPITAL LETTER ETH + '\xf0' # 0xDD -> LATIN SMALL LETTER ETH + '\xde' # 0xDE -> LATIN CAPITAL LETTER THORN + '\xfe' # 0xDF -> LATIN SMALL LETTER THORN + '\xfd' # 0xE0 -> LATIN SMALL LETTER Y WITH ACUTE + '\xb7' # 0xE1 -> MIDDLE DOT + '\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK + '\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK + '\u2030' # 0xE4 -> PER MILLE SIGN + '\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xca' # 0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xcb' # 0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE + '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\uf8ff' # 0xF0 -> Apple logo + '\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE + '\u0131' # 0xF5 -> LATIN SMALL LETTER DOTLESS I + '\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT + '\u02dc' # 0xF7 -> SMALL TILDE + '\xaf' # 0xF8 -> MACRON + '\u02d8' # 0xF9 -> BREVE + '\u02d9' # 0xFA -> DOT ABOVE + '\u02da' # 0xFB -> RING ABOVE + '\xb8' # 0xFC -> CEDILLA + '\u02dd' # 0xFD -> DOUBLE ACUTE ACCENT + '\u02db' # 0xFE -> OGONEK + '\u02c7' # 0xFF -> CARON +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/mac_latin2.py b/my_env/Lib/encodings/mac_latin2.py new file mode 100644 index 000000000..da9d4b134 --- /dev/null +++ b/my_env/Lib/encodings/mac_latin2.py @@ -0,0 +1,312 @@ +""" Python Character Mapping Codec mac_latin2 generated from 'MAPPINGS/VENDORS/MICSFT/MAC/LATIN2.TXT' with gencodec.py. + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. +(c) Copyright 2000 Guido van Rossum. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-latin2', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\u0100' # 0x81 -> LATIN CAPITAL LETTER A WITH MACRON + '\u0101' # 0x82 -> LATIN SMALL LETTER A WITH MACRON + '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + '\u0104' # 0x84 -> LATIN CAPITAL LETTER A WITH OGONEK + '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + '\u0105' # 0x88 -> LATIN SMALL LETTER A WITH OGONEK + '\u010c' # 0x89 -> LATIN CAPITAL LETTER C WITH CARON + '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + '\u010d' # 0x8B -> LATIN SMALL LETTER C WITH CARON + '\u0106' # 0x8C -> LATIN CAPITAL LETTER C WITH ACUTE + '\u0107' # 0x8D -> LATIN SMALL LETTER C WITH ACUTE + '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + '\u0179' # 0x8F -> LATIN CAPITAL LETTER Z WITH ACUTE + '\u017a' # 0x90 -> LATIN SMALL LETTER Z WITH ACUTE + '\u010e' # 0x91 -> LATIN CAPITAL LETTER D WITH CARON + '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + '\u010f' # 0x93 -> LATIN SMALL LETTER D WITH CARON + '\u0112' # 0x94 -> LATIN CAPITAL LETTER E WITH MACRON + '\u0113' # 0x95 -> LATIN SMALL LETTER E WITH MACRON + '\u0116' # 0x96 -> LATIN CAPITAL LETTER E WITH DOT ABOVE + '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + '\u0117' # 0x98 -> LATIN SMALL LETTER E WITH DOT ABOVE + '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE + '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + '\u011a' # 0x9D -> LATIN CAPITAL LETTER E WITH CARON + '\u011b' # 0x9E -> LATIN SMALL LETTER E WITH CARON + '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + '\u2020' # 0xA0 -> DAGGER + '\xb0' # 0xA1 -> DEGREE SIGN + '\u0118' # 0xA2 -> LATIN CAPITAL LETTER E WITH OGONEK + '\xa3' # 0xA3 -> POUND SIGN + '\xa7' # 0xA4 -> SECTION SIGN + '\u2022' # 0xA5 -> BULLET + '\xb6' # 0xA6 -> PILCROW SIGN + '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + '\xae' # 0xA8 -> REGISTERED SIGN + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u2122' # 0xAA -> TRADE MARK SIGN + '\u0119' # 0xAB -> LATIN SMALL LETTER E WITH OGONEK + '\xa8' # 0xAC -> DIAERESIS + '\u2260' # 0xAD -> NOT EQUAL TO + '\u0123' # 0xAE -> LATIN SMALL LETTER G WITH CEDILLA + '\u012e' # 0xAF -> LATIN CAPITAL LETTER I WITH OGONEK + '\u012f' # 0xB0 -> LATIN SMALL LETTER I WITH OGONEK + '\u012a' # 0xB1 -> LATIN CAPITAL LETTER I WITH MACRON + '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + '\u012b' # 0xB4 -> LATIN SMALL LETTER I WITH MACRON + '\u0136' # 0xB5 -> LATIN CAPITAL LETTER K WITH CEDILLA + '\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL + '\u2211' # 0xB7 -> N-ARY SUMMATION + '\u0142' # 0xB8 -> LATIN SMALL LETTER L WITH STROKE + '\u013b' # 0xB9 -> LATIN CAPITAL LETTER L WITH CEDILLA + '\u013c' # 0xBA -> LATIN SMALL LETTER L WITH CEDILLA + '\u013d' # 0xBB -> LATIN CAPITAL LETTER L WITH CARON + '\u013e' # 0xBC -> LATIN SMALL LETTER L WITH CARON + '\u0139' # 0xBD -> LATIN CAPITAL LETTER L WITH ACUTE + '\u013a' # 0xBE -> LATIN SMALL LETTER L WITH ACUTE + '\u0145' # 0xBF -> LATIN CAPITAL LETTER N WITH CEDILLA + '\u0146' # 0xC0 -> LATIN SMALL LETTER N WITH CEDILLA + '\u0143' # 0xC1 -> LATIN CAPITAL LETTER N WITH ACUTE + '\xac' # 0xC2 -> NOT SIGN + '\u221a' # 0xC3 -> SQUARE ROOT + '\u0144' # 0xC4 -> LATIN SMALL LETTER N WITH ACUTE + '\u0147' # 0xC5 -> LATIN CAPITAL LETTER N WITH CARON + '\u2206' # 0xC6 -> INCREMENT + '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + '\xa0' # 0xCA -> NO-BREAK SPACE + '\u0148' # 0xCB -> LATIN SMALL LETTER N WITH CARON + '\u0150' # 0xCC -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + '\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE + '\u0151' # 0xCE -> LATIN SMALL LETTER O WITH DOUBLE ACUTE + '\u014c' # 0xCF -> LATIN CAPITAL LETTER O WITH MACRON + '\u2013' # 0xD0 -> EN DASH + '\u2014' # 0xD1 -> EM DASH + '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + '\xf7' # 0xD6 -> DIVISION SIGN + '\u25ca' # 0xD7 -> LOZENGE + '\u014d' # 0xD8 -> LATIN SMALL LETTER O WITH MACRON + '\u0154' # 0xD9 -> LATIN CAPITAL LETTER R WITH ACUTE + '\u0155' # 0xDA -> LATIN SMALL LETTER R WITH ACUTE + '\u0158' # 0xDB -> LATIN CAPITAL LETTER R WITH CARON + '\u2039' # 0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u203a' # 0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\u0159' # 0xDE -> LATIN SMALL LETTER R WITH CARON + '\u0156' # 0xDF -> LATIN CAPITAL LETTER R WITH CEDILLA + '\u0157' # 0xE0 -> LATIN SMALL LETTER R WITH CEDILLA + '\u0160' # 0xE1 -> LATIN CAPITAL LETTER S WITH CARON + '\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK + '\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK + '\u0161' # 0xE4 -> LATIN SMALL LETTER S WITH CARON + '\u015a' # 0xE5 -> LATIN CAPITAL LETTER S WITH ACUTE + '\u015b' # 0xE6 -> LATIN SMALL LETTER S WITH ACUTE + '\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE + '\u0164' # 0xE8 -> LATIN CAPITAL LETTER T WITH CARON + '\u0165' # 0xE9 -> LATIN SMALL LETTER T WITH CARON + '\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE + '\u017d' # 0xEB -> LATIN CAPITAL LETTER Z WITH CARON + '\u017e' # 0xEC -> LATIN SMALL LETTER Z WITH CARON + '\u016a' # 0xED -> LATIN CAPITAL LETTER U WITH MACRON + '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\u016b' # 0xF0 -> LATIN SMALL LETTER U WITH MACRON + '\u016e' # 0xF1 -> LATIN CAPITAL LETTER U WITH RING ABOVE + '\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE + '\u016f' # 0xF3 -> LATIN SMALL LETTER U WITH RING ABOVE + '\u0170' # 0xF4 -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + '\u0171' # 0xF5 -> LATIN SMALL LETTER U WITH DOUBLE ACUTE + '\u0172' # 0xF6 -> LATIN CAPITAL LETTER U WITH OGONEK + '\u0173' # 0xF7 -> LATIN SMALL LETTER U WITH OGONEK + '\xdd' # 0xF8 -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xfd' # 0xF9 -> LATIN SMALL LETTER Y WITH ACUTE + '\u0137' # 0xFA -> LATIN SMALL LETTER K WITH CEDILLA + '\u017b' # 0xFB -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + '\u0141' # 0xFC -> LATIN CAPITAL LETTER L WITH STROKE + '\u017c' # 0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE + '\u0122' # 0xFE -> LATIN CAPITAL LETTER G WITH CEDILLA + '\u02c7' # 0xFF -> CARON +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/mac_roman.py b/my_env/Lib/encodings/mac_roman.py new file mode 100644 index 000000000..b74b00213 --- /dev/null +++ b/my_env/Lib/encodings/mac_roman.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_roman generated from 'MAPPINGS/VENDORS/APPLE/ROMAN.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-roman', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> CONTROL CHARACTER + '\x01' # 0x01 -> CONTROL CHARACTER + '\x02' # 0x02 -> CONTROL CHARACTER + '\x03' # 0x03 -> CONTROL CHARACTER + '\x04' # 0x04 -> CONTROL CHARACTER + '\x05' # 0x05 -> CONTROL CHARACTER + '\x06' # 0x06 -> CONTROL CHARACTER + '\x07' # 0x07 -> CONTROL CHARACTER + '\x08' # 0x08 -> CONTROL CHARACTER + '\t' # 0x09 -> CONTROL CHARACTER + '\n' # 0x0A -> CONTROL CHARACTER + '\x0b' # 0x0B -> CONTROL CHARACTER + '\x0c' # 0x0C -> CONTROL CHARACTER + '\r' # 0x0D -> CONTROL CHARACTER + '\x0e' # 0x0E -> CONTROL CHARACTER + '\x0f' # 0x0F -> CONTROL CHARACTER + '\x10' # 0x10 -> CONTROL CHARACTER + '\x11' # 0x11 -> CONTROL CHARACTER + '\x12' # 0x12 -> CONTROL CHARACTER + '\x13' # 0x13 -> CONTROL CHARACTER + '\x14' # 0x14 -> CONTROL CHARACTER + '\x15' # 0x15 -> CONTROL CHARACTER + '\x16' # 0x16 -> CONTROL CHARACTER + '\x17' # 0x17 -> CONTROL CHARACTER + '\x18' # 0x18 -> CONTROL CHARACTER + '\x19' # 0x19 -> CONTROL CHARACTER + '\x1a' # 0x1A -> CONTROL CHARACTER + '\x1b' # 0x1B -> CONTROL CHARACTER + '\x1c' # 0x1C -> CONTROL CHARACTER + '\x1d' # 0x1D -> CONTROL CHARACTER + '\x1e' # 0x1E -> CONTROL CHARACTER + '\x1f' # 0x1F -> CONTROL CHARACTER + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> CONTROL CHARACTER + '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE + '\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + '\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE + '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + '\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE + '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + '\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE + '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE + '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + '\u2020' # 0xA0 -> DAGGER + '\xb0' # 0xA1 -> DEGREE SIGN + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa7' # 0xA4 -> SECTION SIGN + '\u2022' # 0xA5 -> BULLET + '\xb6' # 0xA6 -> PILCROW SIGN + '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + '\xae' # 0xA8 -> REGISTERED SIGN + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u2122' # 0xAA -> TRADE MARK SIGN + '\xb4' # 0xAB -> ACUTE ACCENT + '\xa8' # 0xAC -> DIAERESIS + '\u2260' # 0xAD -> NOT EQUAL TO + '\xc6' # 0xAE -> LATIN CAPITAL LETTER AE + '\xd8' # 0xAF -> LATIN CAPITAL LETTER O WITH STROKE + '\u221e' # 0xB0 -> INFINITY + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + '\xa5' # 0xB4 -> YEN SIGN + '\xb5' # 0xB5 -> MICRO SIGN + '\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL + '\u2211' # 0xB7 -> N-ARY SUMMATION + '\u220f' # 0xB8 -> N-ARY PRODUCT + '\u03c0' # 0xB9 -> GREEK SMALL LETTER PI + '\u222b' # 0xBA -> INTEGRAL + '\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR + '\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR + '\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA + '\xe6' # 0xBE -> LATIN SMALL LETTER AE + '\xf8' # 0xBF -> LATIN SMALL LETTER O WITH STROKE + '\xbf' # 0xC0 -> INVERTED QUESTION MARK + '\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK + '\xac' # 0xC2 -> NOT SIGN + '\u221a' # 0xC3 -> SQUARE ROOT + '\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK + '\u2248' # 0xC5 -> ALMOST EQUAL TO + '\u2206' # 0xC6 -> INCREMENT + '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + '\xa0' # 0xCA -> NO-BREAK SPACE + '\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE + '\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE + '\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE + '\u0153' # 0xCF -> LATIN SMALL LIGATURE OE + '\u2013' # 0xD0 -> EN DASH + '\u2014' # 0xD1 -> EM DASH + '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + '\xf7' # 0xD6 -> DIVISION SIGN + '\u25ca' # 0xD7 -> LOZENGE + '\xff' # 0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS + '\u0178' # 0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS + '\u2044' # 0xDA -> FRACTION SLASH + '\u20ac' # 0xDB -> EURO SIGN + '\u2039' # 0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u203a' # 0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\ufb01' # 0xDE -> LATIN SMALL LIGATURE FI + '\ufb02' # 0xDF -> LATIN SMALL LIGATURE FL + '\u2021' # 0xE0 -> DOUBLE DAGGER + '\xb7' # 0xE1 -> MIDDLE DOT + '\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK + '\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK + '\u2030' # 0xE4 -> PER MILLE SIGN + '\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xca' # 0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xcb' # 0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE + '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\uf8ff' # 0xF0 -> Apple logo + '\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE + '\u0131' # 0xF5 -> LATIN SMALL LETTER DOTLESS I + '\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT + '\u02dc' # 0xF7 -> SMALL TILDE + '\xaf' # 0xF8 -> MACRON + '\u02d8' # 0xF9 -> BREVE + '\u02d9' # 0xFA -> DOT ABOVE + '\u02da' # 0xFB -> RING ABOVE + '\xb8' # 0xFC -> CEDILLA + '\u02dd' # 0xFD -> DOUBLE ACUTE ACCENT + '\u02db' # 0xFE -> OGONEK + '\u02c7' # 0xFF -> CARON +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/mac_romanian.py b/my_env/Lib/encodings/mac_romanian.py new file mode 100644 index 000000000..d141b4c50 --- /dev/null +++ b/my_env/Lib/encodings/mac_romanian.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_romanian generated from 'MAPPINGS/VENDORS/APPLE/ROMANIAN.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-romanian', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> CONTROL CHARACTER + '\x01' # 0x01 -> CONTROL CHARACTER + '\x02' # 0x02 -> CONTROL CHARACTER + '\x03' # 0x03 -> CONTROL CHARACTER + '\x04' # 0x04 -> CONTROL CHARACTER + '\x05' # 0x05 -> CONTROL CHARACTER + '\x06' # 0x06 -> CONTROL CHARACTER + '\x07' # 0x07 -> CONTROL CHARACTER + '\x08' # 0x08 -> CONTROL CHARACTER + '\t' # 0x09 -> CONTROL CHARACTER + '\n' # 0x0A -> CONTROL CHARACTER + '\x0b' # 0x0B -> CONTROL CHARACTER + '\x0c' # 0x0C -> CONTROL CHARACTER + '\r' # 0x0D -> CONTROL CHARACTER + '\x0e' # 0x0E -> CONTROL CHARACTER + '\x0f' # 0x0F -> CONTROL CHARACTER + '\x10' # 0x10 -> CONTROL CHARACTER + '\x11' # 0x11 -> CONTROL CHARACTER + '\x12' # 0x12 -> CONTROL CHARACTER + '\x13' # 0x13 -> CONTROL CHARACTER + '\x14' # 0x14 -> CONTROL CHARACTER + '\x15' # 0x15 -> CONTROL CHARACTER + '\x16' # 0x16 -> CONTROL CHARACTER + '\x17' # 0x17 -> CONTROL CHARACTER + '\x18' # 0x18 -> CONTROL CHARACTER + '\x19' # 0x19 -> CONTROL CHARACTER + '\x1a' # 0x1A -> CONTROL CHARACTER + '\x1b' # 0x1B -> CONTROL CHARACTER + '\x1c' # 0x1C -> CONTROL CHARACTER + '\x1d' # 0x1D -> CONTROL CHARACTER + '\x1e' # 0x1E -> CONTROL CHARACTER + '\x1f' # 0x1F -> CONTROL CHARACTER + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> CONTROL CHARACTER + '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE + '\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + '\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE + '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + '\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE + '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + '\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE + '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE + '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + '\u2020' # 0xA0 -> DAGGER + '\xb0' # 0xA1 -> DEGREE SIGN + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa7' # 0xA4 -> SECTION SIGN + '\u2022' # 0xA5 -> BULLET + '\xb6' # 0xA6 -> PILCROW SIGN + '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + '\xae' # 0xA8 -> REGISTERED SIGN + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u2122' # 0xAA -> TRADE MARK SIGN + '\xb4' # 0xAB -> ACUTE ACCENT + '\xa8' # 0xAC -> DIAERESIS + '\u2260' # 0xAD -> NOT EQUAL TO + '\u0102' # 0xAE -> LATIN CAPITAL LETTER A WITH BREVE + '\u0218' # 0xAF -> LATIN CAPITAL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later + '\u221e' # 0xB0 -> INFINITY + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + '\xa5' # 0xB4 -> YEN SIGN + '\xb5' # 0xB5 -> MICRO SIGN + '\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL + '\u2211' # 0xB7 -> N-ARY SUMMATION + '\u220f' # 0xB8 -> N-ARY PRODUCT + '\u03c0' # 0xB9 -> GREEK SMALL LETTER PI + '\u222b' # 0xBA -> INTEGRAL + '\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR + '\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR + '\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA + '\u0103' # 0xBE -> LATIN SMALL LETTER A WITH BREVE + '\u0219' # 0xBF -> LATIN SMALL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later + '\xbf' # 0xC0 -> INVERTED QUESTION MARK + '\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK + '\xac' # 0xC2 -> NOT SIGN + '\u221a' # 0xC3 -> SQUARE ROOT + '\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK + '\u2248' # 0xC5 -> ALMOST EQUAL TO + '\u2206' # 0xC6 -> INCREMENT + '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + '\xa0' # 0xCA -> NO-BREAK SPACE + '\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE + '\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE + '\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE + '\u0153' # 0xCF -> LATIN SMALL LIGATURE OE + '\u2013' # 0xD0 -> EN DASH + '\u2014' # 0xD1 -> EM DASH + '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + '\xf7' # 0xD6 -> DIVISION SIGN + '\u25ca' # 0xD7 -> LOZENGE + '\xff' # 0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS + '\u0178' # 0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS + '\u2044' # 0xDA -> FRACTION SLASH + '\u20ac' # 0xDB -> EURO SIGN + '\u2039' # 0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u203a' # 0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\u021a' # 0xDE -> LATIN CAPITAL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later + '\u021b' # 0xDF -> LATIN SMALL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later + '\u2021' # 0xE0 -> DOUBLE DAGGER + '\xb7' # 0xE1 -> MIDDLE DOT + '\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK + '\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK + '\u2030' # 0xE4 -> PER MILLE SIGN + '\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xca' # 0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xcb' # 0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE + '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\uf8ff' # 0xF0 -> Apple logo + '\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE + '\u0131' # 0xF5 -> LATIN SMALL LETTER DOTLESS I + '\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT + '\u02dc' # 0xF7 -> SMALL TILDE + '\xaf' # 0xF8 -> MACRON + '\u02d8' # 0xF9 -> BREVE + '\u02d9' # 0xFA -> DOT ABOVE + '\u02da' # 0xFB -> RING ABOVE + '\xb8' # 0xFC -> CEDILLA + '\u02dd' # 0xFD -> DOUBLE ACUTE ACCENT + '\u02db' # 0xFE -> OGONEK + '\u02c7' # 0xFF -> CARON +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/mac_turkish.py b/my_env/Lib/encodings/mac_turkish.py new file mode 100644 index 000000000..044d4cb5a --- /dev/null +++ b/my_env/Lib/encodings/mac_turkish.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_turkish generated from 'MAPPINGS/VENDORS/APPLE/TURKISH.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-turkish', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> CONTROL CHARACTER + '\x01' # 0x01 -> CONTROL CHARACTER + '\x02' # 0x02 -> CONTROL CHARACTER + '\x03' # 0x03 -> CONTROL CHARACTER + '\x04' # 0x04 -> CONTROL CHARACTER + '\x05' # 0x05 -> CONTROL CHARACTER + '\x06' # 0x06 -> CONTROL CHARACTER + '\x07' # 0x07 -> CONTROL CHARACTER + '\x08' # 0x08 -> CONTROL CHARACTER + '\t' # 0x09 -> CONTROL CHARACTER + '\n' # 0x0A -> CONTROL CHARACTER + '\x0b' # 0x0B -> CONTROL CHARACTER + '\x0c' # 0x0C -> CONTROL CHARACTER + '\r' # 0x0D -> CONTROL CHARACTER + '\x0e' # 0x0E -> CONTROL CHARACTER + '\x0f' # 0x0F -> CONTROL CHARACTER + '\x10' # 0x10 -> CONTROL CHARACTER + '\x11' # 0x11 -> CONTROL CHARACTER + '\x12' # 0x12 -> CONTROL CHARACTER + '\x13' # 0x13 -> CONTROL CHARACTER + '\x14' # 0x14 -> CONTROL CHARACTER + '\x15' # 0x15 -> CONTROL CHARACTER + '\x16' # 0x16 -> CONTROL CHARACTER + '\x17' # 0x17 -> CONTROL CHARACTER + '\x18' # 0x18 -> CONTROL CHARACTER + '\x19' # 0x19 -> CONTROL CHARACTER + '\x1a' # 0x1A -> CONTROL CHARACTER + '\x1b' # 0x1B -> CONTROL CHARACTER + '\x1c' # 0x1C -> CONTROL CHARACTER + '\x1d' # 0x1D -> CONTROL CHARACTER + '\x1e' # 0x1E -> CONTROL CHARACTER + '\x1f' # 0x1F -> CONTROL CHARACTER + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> CONTROL CHARACTER + '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE + '\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + '\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE + '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + '\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE + '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + '\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE + '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE + '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + '\u2020' # 0xA0 -> DAGGER + '\xb0' # 0xA1 -> DEGREE SIGN + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa7' # 0xA4 -> SECTION SIGN + '\u2022' # 0xA5 -> BULLET + '\xb6' # 0xA6 -> PILCROW SIGN + '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + '\xae' # 0xA8 -> REGISTERED SIGN + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u2122' # 0xAA -> TRADE MARK SIGN + '\xb4' # 0xAB -> ACUTE ACCENT + '\xa8' # 0xAC -> DIAERESIS + '\u2260' # 0xAD -> NOT EQUAL TO + '\xc6' # 0xAE -> LATIN CAPITAL LETTER AE + '\xd8' # 0xAF -> LATIN CAPITAL LETTER O WITH STROKE + '\u221e' # 0xB0 -> INFINITY + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + '\xa5' # 0xB4 -> YEN SIGN + '\xb5' # 0xB5 -> MICRO SIGN + '\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL + '\u2211' # 0xB7 -> N-ARY SUMMATION + '\u220f' # 0xB8 -> N-ARY PRODUCT + '\u03c0' # 0xB9 -> GREEK SMALL LETTER PI + '\u222b' # 0xBA -> INTEGRAL + '\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR + '\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR + '\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA + '\xe6' # 0xBE -> LATIN SMALL LETTER AE + '\xf8' # 0xBF -> LATIN SMALL LETTER O WITH STROKE + '\xbf' # 0xC0 -> INVERTED QUESTION MARK + '\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK + '\xac' # 0xC2 -> NOT SIGN + '\u221a' # 0xC3 -> SQUARE ROOT + '\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK + '\u2248' # 0xC5 -> ALMOST EQUAL TO + '\u2206' # 0xC6 -> INCREMENT + '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + '\xa0' # 0xCA -> NO-BREAK SPACE + '\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE + '\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE + '\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE + '\u0153' # 0xCF -> LATIN SMALL LIGATURE OE + '\u2013' # 0xD0 -> EN DASH + '\u2014' # 0xD1 -> EM DASH + '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + '\xf7' # 0xD6 -> DIVISION SIGN + '\u25ca' # 0xD7 -> LOZENGE + '\xff' # 0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS + '\u0178' # 0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS + '\u011e' # 0xDA -> LATIN CAPITAL LETTER G WITH BREVE + '\u011f' # 0xDB -> LATIN SMALL LETTER G WITH BREVE + '\u0130' # 0xDC -> LATIN CAPITAL LETTER I WITH DOT ABOVE + '\u0131' # 0xDD -> LATIN SMALL LETTER DOTLESS I + '\u015e' # 0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA + '\u015f' # 0xDF -> LATIN SMALL LETTER S WITH CEDILLA + '\u2021' # 0xE0 -> DOUBLE DAGGER + '\xb7' # 0xE1 -> MIDDLE DOT + '\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK + '\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK + '\u2030' # 0xE4 -> PER MILLE SIGN + '\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xca' # 0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xcb' # 0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE + '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\uf8ff' # 0xF0 -> Apple logo + '\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE + '\uf8a0' # 0xF5 -> undefined1 + '\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT + '\u02dc' # 0xF7 -> SMALL TILDE + '\xaf' # 0xF8 -> MACRON + '\u02d8' # 0xF9 -> BREVE + '\u02d9' # 0xFA -> DOT ABOVE + '\u02da' # 0xFB -> RING ABOVE + '\xb8' # 0xFC -> CEDILLA + '\u02dd' # 0xFD -> DOUBLE ACUTE ACCENT + '\u02db' # 0xFE -> OGONEK + '\u02c7' # 0xFF -> CARON +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/mbcs.py b/my_env/Lib/encodings/mbcs.py new file mode 100644 index 000000000..baf46cbd4 --- /dev/null +++ b/my_env/Lib/encodings/mbcs.py @@ -0,0 +1,47 @@ +""" Python 'mbcs' Codec for Windows + + +Cloned by Mark Hammond (mhammond@skippinet.com.au) from ascii.py, +which was written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +# Import them explicitly to cause an ImportError +# on non-Windows systems +from codecs import mbcs_encode, mbcs_decode +# for IncrementalDecoder, IncrementalEncoder, ... +import codecs + +### Codec APIs + +encode = mbcs_encode + +def decode(input, errors='strict'): + return mbcs_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return mbcs_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + _buffer_decode = mbcs_decode + +class StreamWriter(codecs.StreamWriter): + encode = mbcs_encode + +class StreamReader(codecs.StreamReader): + decode = mbcs_decode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mbcs', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/oem.py b/my_env/Lib/encodings/oem.py new file mode 100644 index 000000000..2c3426ba4 --- /dev/null +++ b/my_env/Lib/encodings/oem.py @@ -0,0 +1,41 @@ +""" Python 'oem' Codec for Windows + +""" +# Import them explicitly to cause an ImportError +# on non-Windows systems +from codecs import oem_encode, oem_decode +# for IncrementalDecoder, IncrementalEncoder, ... +import codecs + +### Codec APIs + +encode = oem_encode + +def decode(input, errors='strict'): + return oem_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return oem_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + _buffer_decode = oem_decode + +class StreamWriter(codecs.StreamWriter): + encode = oem_encode + +class StreamReader(codecs.StreamReader): + decode = oem_decode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='oem', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/palmos.py b/my_env/Lib/encodings/palmos.py new file mode 100644 index 000000000..c506d6545 --- /dev/null +++ b/my_env/Lib/encodings/palmos.py @@ -0,0 +1,308 @@ +""" Python Character Mapping Codec for PalmOS 3.5. + +Written by Sjoerd Mullender (sjoerd@acm.org); based on iso8859_15.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='palmos', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\u20ac' # 0x80 -> EURO SIGN + '\x81' # 0x81 -> + '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK + '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\u2020' # 0x86 -> DAGGER + '\u2021' # 0x87 -> DOUBLE DAGGER + '\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT + '\u2030' # 0x89 -> PER MILLE SIGN + '\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON + '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE + '\u2666' # 0x8D -> BLACK DIAMOND SUIT + '\u2663' # 0x8E -> BLACK CLUB SUIT + '\u2665' # 0x8F -> BLACK HEART SUIT + '\u2660' # 0x90 -> BLACK SPADE SUIT + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\u02dc' # 0x98 -> SMALL TILDE + '\u2122' # 0x99 -> TRADE MARK SIGN + '\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON + '\x9b' # 0x9B -> + '\u0153' # 0x9C -> LATIN SMALL LIGATURE OE + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN + '\xa4' # 0xA4 -> CURRENCY SIGN + '\xa5' # 0xA5 -> YEN SIGN + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\xad' # 0xAD -> SOFT HYPHEN + '\xae' # 0xAE -> REGISTERED SIGN + '\xaf' # 0xAF -> MACRON + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\xb8' # 0xB8 -> CEDILLA + '\xb9' # 0xB9 -> SUPERSCRIPT ONE + '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + '\xbf' # 0xBF -> INVERTED QUESTION MARK + '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + '\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH (Icelandic) + '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + '\xd7' # 0xD7 -> MULTIPLICATION SIGN + '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + '\xde' # 0xDE -> LATIN CAPITAL LETTER THORN (Icelandic) + '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S (German) + '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + '\xe6' # 0xE6 -> LATIN SMALL LETTER AE + '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + '\xf0' # 0xF0 -> LATIN SMALL LETTER ETH (Icelandic) + '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + '\xf7' # 0xF7 -> DIVISION SIGN + '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + '\xfe' # 0xFE -> LATIN SMALL LETTER THORN (Icelandic) + '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/ptcp154.py b/my_env/Lib/encodings/ptcp154.py new file mode 100644 index 000000000..656b79d6a --- /dev/null +++ b/my_env/Lib/encodings/ptcp154.py @@ -0,0 +1,312 @@ +""" Python Character Mapping Codec generated from 'PTCP154.txt' with gencodec.py. + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. +(c) Copyright 2000 Guido van Rossum. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='ptcp154', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE (DEL) + '\u0496' # 0x80 -> CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER + '\u0492' # 0x81 -> CYRILLIC CAPITAL LETTER GHE WITH STROKE + '\u04ee' # 0x82 -> CYRILLIC CAPITAL LETTER U WITH MACRON + '\u0493' # 0x83 -> CYRILLIC SMALL LETTER GHE WITH STROKE + '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + '\u04b6' # 0x86 -> CYRILLIC CAPITAL LETTER CHE WITH DESCENDER + '\u04ae' # 0x87 -> CYRILLIC CAPITAL LETTER STRAIGHT U + '\u04b2' # 0x88 -> CYRILLIC CAPITAL LETTER HA WITH DESCENDER + '\u04af' # 0x89 -> CYRILLIC SMALL LETTER STRAIGHT U + '\u04a0' # 0x8A -> CYRILLIC CAPITAL LETTER BASHKIR KA + '\u04e2' # 0x8B -> CYRILLIC CAPITAL LETTER I WITH MACRON + '\u04a2' # 0x8C -> CYRILLIC CAPITAL LETTER EN WITH DESCENDER + '\u049a' # 0x8D -> CYRILLIC CAPITAL LETTER KA WITH DESCENDER + '\u04ba' # 0x8E -> CYRILLIC CAPITAL LETTER SHHA + '\u04b8' # 0x8F -> CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE + '\u0497' # 0x90 -> CYRILLIC SMALL LETTER ZHE WITH DESCENDER + '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + '\u2022' # 0x95 -> BULLET + '\u2013' # 0x96 -> EN DASH + '\u2014' # 0x97 -> EM DASH + '\u04b3' # 0x98 -> CYRILLIC SMALL LETTER HA WITH DESCENDER + '\u04b7' # 0x99 -> CYRILLIC SMALL LETTER CHE WITH DESCENDER + '\u04a1' # 0x9A -> CYRILLIC SMALL LETTER BASHKIR KA + '\u04e3' # 0x9B -> CYRILLIC SMALL LETTER I WITH MACRON + '\u04a3' # 0x9C -> CYRILLIC SMALL LETTER EN WITH DESCENDER + '\u049b' # 0x9D -> CYRILLIC SMALL LETTER KA WITH DESCENDER + '\u04bb' # 0x9E -> CYRILLIC SMALL LETTER SHHA + '\u04b9' # 0x9F -> CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE + '\xa0' # 0xA0 -> NO-BREAK SPACE + '\u040e' # 0xA1 -> CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) + '\u045e' # 0xA2 -> CYRILLIC SMALL LETTER SHORT U (Byelorussian) + '\u0408' # 0xA3 -> CYRILLIC CAPITAL LETTER JE + '\u04e8' # 0xA4 -> CYRILLIC CAPITAL LETTER BARRED O + '\u0498' # 0xA5 -> CYRILLIC CAPITAL LETTER ZE WITH DESCENDER + '\u04b0' # 0xA6 -> CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE + '\xa7' # 0xA7 -> SECTION SIGN + '\u0401' # 0xA8 -> CYRILLIC CAPITAL LETTER IO + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\u04d8' # 0xAA -> CYRILLIC CAPITAL LETTER SCHWA + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\u04ef' # 0xAD -> CYRILLIC SMALL LETTER U WITH MACRON + '\xae' # 0xAE -> REGISTERED SIGN + '\u049c' # 0xAF -> CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE + '\xb0' # 0xB0 -> DEGREE SIGN + '\u04b1' # 0xB1 -> CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE + '\u0406' # 0xB2 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + '\u0456' # 0xB3 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + '\u0499' # 0xB4 -> CYRILLIC SMALL LETTER ZE WITH DESCENDER + '\u04e9' # 0xB5 -> CYRILLIC SMALL LETTER BARRED O + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\u0451' # 0xB8 -> CYRILLIC SMALL LETTER IO + '\u2116' # 0xB9 -> NUMERO SIGN + '\u04d9' # 0xBA -> CYRILLIC SMALL LETTER SCHWA + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u0458' # 0xBC -> CYRILLIC SMALL LETTER JE + '\u04aa' # 0xBD -> CYRILLIC CAPITAL LETTER ES WITH DESCENDER + '\u04ab' # 0xBE -> CYRILLIC SMALL LETTER ES WITH DESCENDER + '\u049d' # 0xBF -> CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE + '\u0410' # 0xC0 -> CYRILLIC CAPITAL LETTER A + '\u0411' # 0xC1 -> CYRILLIC CAPITAL LETTER BE + '\u0412' # 0xC2 -> CYRILLIC CAPITAL LETTER VE + '\u0413' # 0xC3 -> CYRILLIC CAPITAL LETTER GHE + '\u0414' # 0xC4 -> CYRILLIC CAPITAL LETTER DE + '\u0415' # 0xC5 -> CYRILLIC CAPITAL LETTER IE + '\u0416' # 0xC6 -> CYRILLIC CAPITAL LETTER ZHE + '\u0417' # 0xC7 -> CYRILLIC CAPITAL LETTER ZE + '\u0418' # 0xC8 -> CYRILLIC CAPITAL LETTER I + '\u0419' # 0xC9 -> CYRILLIC CAPITAL LETTER SHORT I + '\u041a' # 0xCA -> CYRILLIC CAPITAL LETTER KA + '\u041b' # 0xCB -> CYRILLIC CAPITAL LETTER EL + '\u041c' # 0xCC -> CYRILLIC CAPITAL LETTER EM + '\u041d' # 0xCD -> CYRILLIC CAPITAL LETTER EN + '\u041e' # 0xCE -> CYRILLIC CAPITAL LETTER O + '\u041f' # 0xCF -> CYRILLIC CAPITAL LETTER PE + '\u0420' # 0xD0 -> CYRILLIC CAPITAL LETTER ER + '\u0421' # 0xD1 -> CYRILLIC CAPITAL LETTER ES + '\u0422' # 0xD2 -> CYRILLIC CAPITAL LETTER TE + '\u0423' # 0xD3 -> CYRILLIC CAPITAL LETTER U + '\u0424' # 0xD4 -> CYRILLIC CAPITAL LETTER EF + '\u0425' # 0xD5 -> CYRILLIC CAPITAL LETTER HA + '\u0426' # 0xD6 -> CYRILLIC CAPITAL LETTER TSE + '\u0427' # 0xD7 -> CYRILLIC CAPITAL LETTER CHE + '\u0428' # 0xD8 -> CYRILLIC CAPITAL LETTER SHA + '\u0429' # 0xD9 -> CYRILLIC CAPITAL LETTER SHCHA + '\u042a' # 0xDA -> CYRILLIC CAPITAL LETTER HARD SIGN + '\u042b' # 0xDB -> CYRILLIC CAPITAL LETTER YERU + '\u042c' # 0xDC -> CYRILLIC CAPITAL LETTER SOFT SIGN + '\u042d' # 0xDD -> CYRILLIC CAPITAL LETTER E + '\u042e' # 0xDE -> CYRILLIC CAPITAL LETTER YU + '\u042f' # 0xDF -> CYRILLIC CAPITAL LETTER YA + '\u0430' # 0xE0 -> CYRILLIC SMALL LETTER A + '\u0431' # 0xE1 -> CYRILLIC SMALL LETTER BE + '\u0432' # 0xE2 -> CYRILLIC SMALL LETTER VE + '\u0433' # 0xE3 -> CYRILLIC SMALL LETTER GHE + '\u0434' # 0xE4 -> CYRILLIC SMALL LETTER DE + '\u0435' # 0xE5 -> CYRILLIC SMALL LETTER IE + '\u0436' # 0xE6 -> CYRILLIC SMALL LETTER ZHE + '\u0437' # 0xE7 -> CYRILLIC SMALL LETTER ZE + '\u0438' # 0xE8 -> CYRILLIC SMALL LETTER I + '\u0439' # 0xE9 -> CYRILLIC SMALL LETTER SHORT I + '\u043a' # 0xEA -> CYRILLIC SMALL LETTER KA + '\u043b' # 0xEB -> CYRILLIC SMALL LETTER EL + '\u043c' # 0xEC -> CYRILLIC SMALL LETTER EM + '\u043d' # 0xED -> CYRILLIC SMALL LETTER EN + '\u043e' # 0xEE -> CYRILLIC SMALL LETTER O + '\u043f' # 0xEF -> CYRILLIC SMALL LETTER PE + '\u0440' # 0xF0 -> CYRILLIC SMALL LETTER ER + '\u0441' # 0xF1 -> CYRILLIC SMALL LETTER ES + '\u0442' # 0xF2 -> CYRILLIC SMALL LETTER TE + '\u0443' # 0xF3 -> CYRILLIC SMALL LETTER U + '\u0444' # 0xF4 -> CYRILLIC SMALL LETTER EF + '\u0445' # 0xF5 -> CYRILLIC SMALL LETTER HA + '\u0446' # 0xF6 -> CYRILLIC SMALL LETTER TSE + '\u0447' # 0xF7 -> CYRILLIC SMALL LETTER CHE + '\u0448' # 0xF8 -> CYRILLIC SMALL LETTER SHA + '\u0449' # 0xF9 -> CYRILLIC SMALL LETTER SHCHA + '\u044a' # 0xFA -> CYRILLIC SMALL LETTER HARD SIGN + '\u044b' # 0xFB -> CYRILLIC SMALL LETTER YERU + '\u044c' # 0xFC -> CYRILLIC SMALL LETTER SOFT SIGN + '\u044d' # 0xFD -> CYRILLIC SMALL LETTER E + '\u044e' # 0xFE -> CYRILLIC SMALL LETTER YU + '\u044f' # 0xFF -> CYRILLIC SMALL LETTER YA +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/punycode.py b/my_env/Lib/encodings/punycode.py new file mode 100644 index 000000000..66c51013e --- /dev/null +++ b/my_env/Lib/encodings/punycode.py @@ -0,0 +1,237 @@ +""" Codec for the Punicode encoding, as specified in RFC 3492 + +Written by Martin v. Löwis. +""" + +import codecs + +##################### Encoding ##################################### + +def segregate(str): + """3.1 Basic code point segregation""" + base = bytearray() + extended = set() + for c in str: + if ord(c) < 128: + base.append(ord(c)) + else: + extended.add(c) + extended = sorted(extended) + return bytes(base), extended + +def selective_len(str, max): + """Return the length of str, considering only characters below max.""" + res = 0 + for c in str: + if ord(c) < max: + res += 1 + return res + +def selective_find(str, char, index, pos): + """Return a pair (index, pos), indicating the next occurrence of + char in str. index is the position of the character considering + only ordinals up to and including char, and pos is the position in + the full string. index/pos is the starting position in the full + string.""" + + l = len(str) + while 1: + pos += 1 + if pos == l: + return (-1, -1) + c = str[pos] + if c == char: + return index+1, pos + elif c < char: + index += 1 + +def insertion_unsort(str, extended): + """3.2 Insertion unsort coding""" + oldchar = 0x80 + result = [] + oldindex = -1 + for c in extended: + index = pos = -1 + char = ord(c) + curlen = selective_len(str, char) + delta = (curlen+1) * (char - oldchar) + while 1: + index,pos = selective_find(str,c,index,pos) + if index == -1: + break + delta += index - oldindex + result.append(delta-1) + oldindex = index + delta = 0 + oldchar = char + + return result + +def T(j, bias): + # Punycode parameters: tmin = 1, tmax = 26, base = 36 + res = 36 * (j + 1) - bias + if res < 1: return 1 + if res > 26: return 26 + return res + +digits = b"abcdefghijklmnopqrstuvwxyz0123456789" +def generate_generalized_integer(N, bias): + """3.3 Generalized variable-length integers""" + result = bytearray() + j = 0 + while 1: + t = T(j, bias) + if N < t: + result.append(digits[N]) + return bytes(result) + result.append(digits[t + ((N - t) % (36 - t))]) + N = (N - t) // (36 - t) + j += 1 + +def adapt(delta, first, numchars): + if first: + delta //= 700 + else: + delta //= 2 + delta += delta // numchars + # ((base - tmin) * tmax) // 2 == 455 + divisions = 0 + while delta > 455: + delta = delta // 35 # base - tmin + divisions += 36 + bias = divisions + (36 * delta // (delta + 38)) + return bias + + +def generate_integers(baselen, deltas): + """3.4 Bias adaptation""" + # Punycode parameters: initial bias = 72, damp = 700, skew = 38 + result = bytearray() + bias = 72 + for points, delta in enumerate(deltas): + s = generate_generalized_integer(delta, bias) + result.extend(s) + bias = adapt(delta, points==0, baselen+points+1) + return bytes(result) + +def punycode_encode(text): + base, extended = segregate(text) + deltas = insertion_unsort(text, extended) + extended = generate_integers(len(base), deltas) + if base: + return base + b"-" + extended + return extended + +##################### Decoding ##################################### + +def decode_generalized_number(extended, extpos, bias, errors): + """3.3 Generalized variable-length integers""" + result = 0 + w = 1 + j = 0 + while 1: + try: + char = ord(extended[extpos]) + except IndexError: + if errors == "strict": + raise UnicodeError("incomplete punicode string") + return extpos + 1, None + extpos += 1 + if 0x41 <= char <= 0x5A: # A-Z + digit = char - 0x41 + elif 0x30 <= char <= 0x39: + digit = char - 22 # 0x30-26 + elif errors == "strict": + raise UnicodeError("Invalid extended code point '%s'" + % extended[extpos]) + else: + return extpos, None + t = T(j, bias) + result += digit * w + if digit < t: + return extpos, result + w = w * (36 - t) + j += 1 + + +def insertion_sort(base, extended, errors): + """3.2 Insertion unsort coding""" + char = 0x80 + pos = -1 + bias = 72 + extpos = 0 + while extpos < len(extended): + newpos, delta = decode_generalized_number(extended, extpos, + bias, errors) + if delta is None: + # There was an error in decoding. We can't continue because + # synchronization is lost. + return base + pos += delta+1 + char += pos // (len(base) + 1) + if char > 0x10FFFF: + if errors == "strict": + raise UnicodeError("Invalid character U+%x" % char) + char = ord('?') + pos = pos % (len(base) + 1) + base = base[:pos] + chr(char) + base[pos:] + bias = adapt(delta, (extpos == 0), len(base)) + extpos = newpos + return base + +def punycode_decode(text, errors): + if isinstance(text, str): + text = text.encode("ascii") + if isinstance(text, memoryview): + text = bytes(text) + pos = text.rfind(b"-") + if pos == -1: + base = "" + extended = str(text, "ascii").upper() + else: + base = str(text[:pos], "ascii", errors) + extended = str(text[pos+1:], "ascii").upper() + return insertion_sort(base, extended, errors) + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self, input, errors='strict'): + res = punycode_encode(input) + return res, len(input) + + def decode(self, input, errors='strict'): + if errors not in ('strict', 'replace', 'ignore'): + raise UnicodeError("Unsupported error handling "+errors) + res = punycode_decode(input, errors) + return res, len(input) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return punycode_encode(input) + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + if self.errors not in ('strict', 'replace', 'ignore'): + raise UnicodeError("Unsupported error handling "+self.errors) + return punycode_decode(input, self.errors) + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='punycode', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/my_env/Lib/encodings/quopri_codec.py b/my_env/Lib/encodings/quopri_codec.py new file mode 100644 index 000000000..496cb7655 --- /dev/null +++ b/my_env/Lib/encodings/quopri_codec.py @@ -0,0 +1,56 @@ +"""Codec for quoted-printable encoding. + +This codec de/encodes from bytes to bytes. +""" + +import codecs +import quopri +from io import BytesIO + +def quopri_encode(input, errors='strict'): + assert errors == 'strict' + f = BytesIO(input) + g = BytesIO() + quopri.encode(f, g, quotetabs=True) + return (g.getvalue(), len(input)) + +def quopri_decode(input, errors='strict'): + assert errors == 'strict' + f = BytesIO(input) + g = BytesIO() + quopri.decode(f, g) + return (g.getvalue(), len(input)) + +class Codec(codecs.Codec): + def encode(self, input, errors='strict'): + return quopri_encode(input, errors) + def decode(self, input, errors='strict'): + return quopri_decode(input, errors) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return quopri_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return quopri_decode(input, self.errors)[0] + +class StreamWriter(Codec, codecs.StreamWriter): + charbuffertype = bytes + +class StreamReader(Codec, codecs.StreamReader): + charbuffertype = bytes + +# encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='quopri', + encode=quopri_encode, + decode=quopri_decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + _is_text_encoding=False, + ) diff --git a/my_env/Lib/encodings/raw_unicode_escape.py b/my_env/Lib/encodings/raw_unicode_escape.py new file mode 100644 index 000000000..2b919b40d --- /dev/null +++ b/my_env/Lib/encodings/raw_unicode_escape.py @@ -0,0 +1,45 @@ +""" Python 'raw-unicode-escape' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + # Note: Binding these as C functions will result in the class not + # converting them to methods. This is intended. + encode = codecs.raw_unicode_escape_encode + decode = codecs.raw_unicode_escape_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.raw_unicode_escape_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.raw_unicode_escape_decode(input, self.errors)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='raw-unicode-escape', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/my_env/Lib/encodings/rot_13.py b/my_env/Lib/encodings/rot_13.py new file mode 100644 index 000000000..5627bfbc6 --- /dev/null +++ b/my_env/Lib/encodings/rot_13.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python +""" Python Character Mapping Codec for ROT13. + +This codec de/encodes from str to str. + +Written by Marc-Andre Lemburg (mal@lemburg.com). +""" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + def encode(self, input, errors='strict'): + return (str.translate(input, rot13_map), len(input)) + + def decode(self, input, errors='strict'): + return (str.translate(input, rot13_map), len(input)) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return str.translate(input, rot13_map) + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return str.translate(input, rot13_map) + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='rot-13', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + _is_text_encoding=False, + ) + +### Map + +rot13_map = codecs.make_identity_dict(range(256)) +rot13_map.update({ + 0x0041: 0x004e, + 0x0042: 0x004f, + 0x0043: 0x0050, + 0x0044: 0x0051, + 0x0045: 0x0052, + 0x0046: 0x0053, + 0x0047: 0x0054, + 0x0048: 0x0055, + 0x0049: 0x0056, + 0x004a: 0x0057, + 0x004b: 0x0058, + 0x004c: 0x0059, + 0x004d: 0x005a, + 0x004e: 0x0041, + 0x004f: 0x0042, + 0x0050: 0x0043, + 0x0051: 0x0044, + 0x0052: 0x0045, + 0x0053: 0x0046, + 0x0054: 0x0047, + 0x0055: 0x0048, + 0x0056: 0x0049, + 0x0057: 0x004a, + 0x0058: 0x004b, + 0x0059: 0x004c, + 0x005a: 0x004d, + 0x0061: 0x006e, + 0x0062: 0x006f, + 0x0063: 0x0070, + 0x0064: 0x0071, + 0x0065: 0x0072, + 0x0066: 0x0073, + 0x0067: 0x0074, + 0x0068: 0x0075, + 0x0069: 0x0076, + 0x006a: 0x0077, + 0x006b: 0x0078, + 0x006c: 0x0079, + 0x006d: 0x007a, + 0x006e: 0x0061, + 0x006f: 0x0062, + 0x0070: 0x0063, + 0x0071: 0x0064, + 0x0072: 0x0065, + 0x0073: 0x0066, + 0x0074: 0x0067, + 0x0075: 0x0068, + 0x0076: 0x0069, + 0x0077: 0x006a, + 0x0078: 0x006b, + 0x0079: 0x006c, + 0x007a: 0x006d, +}) + +### Filter API + +def rot13(infile, outfile): + outfile.write(codecs.encode(infile.read(), 'rot-13')) + +if __name__ == '__main__': + import sys + rot13(sys.stdin, sys.stdout) diff --git a/my_env/Lib/encodings/shift_jis.py b/my_env/Lib/encodings/shift_jis.py new file mode 100644 index 000000000..833811727 --- /dev/null +++ b/my_env/Lib/encodings/shift_jis.py @@ -0,0 +1,39 @@ +# +# shift_jis.py: Python Unicode Codec for SHIFT_JIS +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('shift_jis') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='shift_jis', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/shift_jis_2004.py b/my_env/Lib/encodings/shift_jis_2004.py new file mode 100644 index 000000000..161b1e86f --- /dev/null +++ b/my_env/Lib/encodings/shift_jis_2004.py @@ -0,0 +1,39 @@ +# +# shift_jis_2004.py: Python Unicode Codec for SHIFT_JIS_2004 +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('shift_jis_2004') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='shift_jis_2004', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/shift_jisx0213.py b/my_env/Lib/encodings/shift_jisx0213.py new file mode 100644 index 000000000..cb653f530 --- /dev/null +++ b/my_env/Lib/encodings/shift_jisx0213.py @@ -0,0 +1,39 @@ +# +# shift_jisx0213.py: Python Unicode Codec for SHIFT_JISX0213 +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('shift_jisx0213') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='shift_jisx0213', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/tis_620.py b/my_env/Lib/encodings/tis_620.py new file mode 100644 index 000000000..e28838634 --- /dev/null +++ b/my_env/Lib/encodings/tis_620.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec tis_620 generated from 'python-mappings/TIS-620.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='tis-620', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> NULL + '\x01' # 0x01 -> START OF HEADING + '\x02' # 0x02 -> START OF TEXT + '\x03' # 0x03 -> END OF TEXT + '\x04' # 0x04 -> END OF TRANSMISSION + '\x05' # 0x05 -> ENQUIRY + '\x06' # 0x06 -> ACKNOWLEDGE + '\x07' # 0x07 -> BELL + '\x08' # 0x08 -> BACKSPACE + '\t' # 0x09 -> HORIZONTAL TABULATION + '\n' # 0x0A -> LINE FEED + '\x0b' # 0x0B -> VERTICAL TABULATION + '\x0c' # 0x0C -> FORM FEED + '\r' # 0x0D -> CARRIAGE RETURN + '\x0e' # 0x0E -> SHIFT OUT + '\x0f' # 0x0F -> SHIFT IN + '\x10' # 0x10 -> DATA LINK ESCAPE + '\x11' # 0x11 -> DEVICE CONTROL ONE + '\x12' # 0x12 -> DEVICE CONTROL TWO + '\x13' # 0x13 -> DEVICE CONTROL THREE + '\x14' # 0x14 -> DEVICE CONTROL FOUR + '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + '\x16' # 0x16 -> SYNCHRONOUS IDLE + '\x17' # 0x17 -> END OF TRANSMISSION BLOCK + '\x18' # 0x18 -> CANCEL + '\x19' # 0x19 -> END OF MEDIUM + '\x1a' # 0x1A -> SUBSTITUTE + '\x1b' # 0x1B -> ESCAPE + '\x1c' # 0x1C -> FILE SEPARATOR + '\x1d' # 0x1D -> GROUP SEPARATOR + '\x1e' # 0x1E -> RECORD SEPARATOR + '\x1f' # 0x1F -> UNIT SEPARATOR + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> DELETE + '\x80' # 0x80 -> + '\x81' # 0x81 -> + '\x82' # 0x82 -> + '\x83' # 0x83 -> + '\x84' # 0x84 -> + '\x85' # 0x85 -> + '\x86' # 0x86 -> + '\x87' # 0x87 -> + '\x88' # 0x88 -> + '\x89' # 0x89 -> + '\x8a' # 0x8A -> + '\x8b' # 0x8B -> + '\x8c' # 0x8C -> + '\x8d' # 0x8D -> + '\x8e' # 0x8E -> + '\x8f' # 0x8F -> + '\x90' # 0x90 -> + '\x91' # 0x91 -> + '\x92' # 0x92 -> + '\x93' # 0x93 -> + '\x94' # 0x94 -> + '\x95' # 0x95 -> + '\x96' # 0x96 -> + '\x97' # 0x97 -> + '\x98' # 0x98 -> + '\x99' # 0x99 -> + '\x9a' # 0x9A -> + '\x9b' # 0x9B -> + '\x9c' # 0x9C -> + '\x9d' # 0x9D -> + '\x9e' # 0x9E -> + '\x9f' # 0x9F -> + '\ufffe' + '\u0e01' # 0xA1 -> THAI CHARACTER KO KAI + '\u0e02' # 0xA2 -> THAI CHARACTER KHO KHAI + '\u0e03' # 0xA3 -> THAI CHARACTER KHO KHUAT + '\u0e04' # 0xA4 -> THAI CHARACTER KHO KHWAI + '\u0e05' # 0xA5 -> THAI CHARACTER KHO KHON + '\u0e06' # 0xA6 -> THAI CHARACTER KHO RAKHANG + '\u0e07' # 0xA7 -> THAI CHARACTER NGO NGU + '\u0e08' # 0xA8 -> THAI CHARACTER CHO CHAN + '\u0e09' # 0xA9 -> THAI CHARACTER CHO CHING + '\u0e0a' # 0xAA -> THAI CHARACTER CHO CHANG + '\u0e0b' # 0xAB -> THAI CHARACTER SO SO + '\u0e0c' # 0xAC -> THAI CHARACTER CHO CHOE + '\u0e0d' # 0xAD -> THAI CHARACTER YO YING + '\u0e0e' # 0xAE -> THAI CHARACTER DO CHADA + '\u0e0f' # 0xAF -> THAI CHARACTER TO PATAK + '\u0e10' # 0xB0 -> THAI CHARACTER THO THAN + '\u0e11' # 0xB1 -> THAI CHARACTER THO NANGMONTHO + '\u0e12' # 0xB2 -> THAI CHARACTER THO PHUTHAO + '\u0e13' # 0xB3 -> THAI CHARACTER NO NEN + '\u0e14' # 0xB4 -> THAI CHARACTER DO DEK + '\u0e15' # 0xB5 -> THAI CHARACTER TO TAO + '\u0e16' # 0xB6 -> THAI CHARACTER THO THUNG + '\u0e17' # 0xB7 -> THAI CHARACTER THO THAHAN + '\u0e18' # 0xB8 -> THAI CHARACTER THO THONG + '\u0e19' # 0xB9 -> THAI CHARACTER NO NU + '\u0e1a' # 0xBA -> THAI CHARACTER BO BAIMAI + '\u0e1b' # 0xBB -> THAI CHARACTER PO PLA + '\u0e1c' # 0xBC -> THAI CHARACTER PHO PHUNG + '\u0e1d' # 0xBD -> THAI CHARACTER FO FA + '\u0e1e' # 0xBE -> THAI CHARACTER PHO PHAN + '\u0e1f' # 0xBF -> THAI CHARACTER FO FAN + '\u0e20' # 0xC0 -> THAI CHARACTER PHO SAMPHAO + '\u0e21' # 0xC1 -> THAI CHARACTER MO MA + '\u0e22' # 0xC2 -> THAI CHARACTER YO YAK + '\u0e23' # 0xC3 -> THAI CHARACTER RO RUA + '\u0e24' # 0xC4 -> THAI CHARACTER RU + '\u0e25' # 0xC5 -> THAI CHARACTER LO LING + '\u0e26' # 0xC6 -> THAI CHARACTER LU + '\u0e27' # 0xC7 -> THAI CHARACTER WO WAEN + '\u0e28' # 0xC8 -> THAI CHARACTER SO SALA + '\u0e29' # 0xC9 -> THAI CHARACTER SO RUSI + '\u0e2a' # 0xCA -> THAI CHARACTER SO SUA + '\u0e2b' # 0xCB -> THAI CHARACTER HO HIP + '\u0e2c' # 0xCC -> THAI CHARACTER LO CHULA + '\u0e2d' # 0xCD -> THAI CHARACTER O ANG + '\u0e2e' # 0xCE -> THAI CHARACTER HO NOKHUK + '\u0e2f' # 0xCF -> THAI CHARACTER PAIYANNOI + '\u0e30' # 0xD0 -> THAI CHARACTER SARA A + '\u0e31' # 0xD1 -> THAI CHARACTER MAI HAN-AKAT + '\u0e32' # 0xD2 -> THAI CHARACTER SARA AA + '\u0e33' # 0xD3 -> THAI CHARACTER SARA AM + '\u0e34' # 0xD4 -> THAI CHARACTER SARA I + '\u0e35' # 0xD5 -> THAI CHARACTER SARA II + '\u0e36' # 0xD6 -> THAI CHARACTER SARA UE + '\u0e37' # 0xD7 -> THAI CHARACTER SARA UEE + '\u0e38' # 0xD8 -> THAI CHARACTER SARA U + '\u0e39' # 0xD9 -> THAI CHARACTER SARA UU + '\u0e3a' # 0xDA -> THAI CHARACTER PHINTHU + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\u0e3f' # 0xDF -> THAI CURRENCY SYMBOL BAHT + '\u0e40' # 0xE0 -> THAI CHARACTER SARA E + '\u0e41' # 0xE1 -> THAI CHARACTER SARA AE + '\u0e42' # 0xE2 -> THAI CHARACTER SARA O + '\u0e43' # 0xE3 -> THAI CHARACTER SARA AI MAIMUAN + '\u0e44' # 0xE4 -> THAI CHARACTER SARA AI MAIMALAI + '\u0e45' # 0xE5 -> THAI CHARACTER LAKKHANGYAO + '\u0e46' # 0xE6 -> THAI CHARACTER MAIYAMOK + '\u0e47' # 0xE7 -> THAI CHARACTER MAITAIKHU + '\u0e48' # 0xE8 -> THAI CHARACTER MAI EK + '\u0e49' # 0xE9 -> THAI CHARACTER MAI THO + '\u0e4a' # 0xEA -> THAI CHARACTER MAI TRI + '\u0e4b' # 0xEB -> THAI CHARACTER MAI CHATTAWA + '\u0e4c' # 0xEC -> THAI CHARACTER THANTHAKHAT + '\u0e4d' # 0xED -> THAI CHARACTER NIKHAHIT + '\u0e4e' # 0xEE -> THAI CHARACTER YAMAKKAN + '\u0e4f' # 0xEF -> THAI CHARACTER FONGMAN + '\u0e50' # 0xF0 -> THAI DIGIT ZERO + '\u0e51' # 0xF1 -> THAI DIGIT ONE + '\u0e52' # 0xF2 -> THAI DIGIT TWO + '\u0e53' # 0xF3 -> THAI DIGIT THREE + '\u0e54' # 0xF4 -> THAI DIGIT FOUR + '\u0e55' # 0xF5 -> THAI DIGIT FIVE + '\u0e56' # 0xF6 -> THAI DIGIT SIX + '\u0e57' # 0xF7 -> THAI DIGIT SEVEN + '\u0e58' # 0xF8 -> THAI DIGIT EIGHT + '\u0e59' # 0xF9 -> THAI DIGIT NINE + '\u0e5a' # 0xFA -> THAI CHARACTER ANGKHANKHU + '\u0e5b' # 0xFB -> THAI CHARACTER KHOMUT + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/my_env/Lib/encodings/undefined.py b/my_env/Lib/encodings/undefined.py new file mode 100644 index 000000000..469028835 --- /dev/null +++ b/my_env/Lib/encodings/undefined.py @@ -0,0 +1,49 @@ +""" Python 'undefined' Codec + + This codec will always raise a ValueError exception when being + used. It is intended for use by the site.py file to switch off + automatic string to Unicode coercion. + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + raise UnicodeError("undefined encoding") + + def decode(self,input,errors='strict'): + raise UnicodeError("undefined encoding") + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + raise UnicodeError("undefined encoding") + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + raise UnicodeError("undefined encoding") + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='undefined', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/my_env/Lib/encodings/unicode_escape.py b/my_env/Lib/encodings/unicode_escape.py new file mode 100644 index 000000000..817f93265 --- /dev/null +++ b/my_env/Lib/encodings/unicode_escape.py @@ -0,0 +1,45 @@ +""" Python 'unicode-escape' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + # Note: Binding these as C functions will result in the class not + # converting them to methods. This is intended. + encode = codecs.unicode_escape_encode + decode = codecs.unicode_escape_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.unicode_escape_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.unicode_escape_decode(input, self.errors)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='unicode-escape', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/my_env/Lib/encodings/unicode_internal.py b/my_env/Lib/encodings/unicode_internal.py new file mode 100644 index 000000000..df3e7752d --- /dev/null +++ b/my_env/Lib/encodings/unicode_internal.py @@ -0,0 +1,45 @@ +""" Python 'unicode-internal' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + # Note: Binding these as C functions will result in the class not + # converting them to methods. This is intended. + encode = codecs.unicode_internal_encode + decode = codecs.unicode_internal_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.unicode_internal_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.unicode_internal_decode(input, self.errors)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='unicode-internal', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/my_env/Lib/encodings/utf_16.py b/my_env/Lib/encodings/utf_16.py new file mode 100644 index 000000000..c61248242 --- /dev/null +++ b/my_env/Lib/encodings/utf_16.py @@ -0,0 +1,155 @@ +""" Python 'utf-16' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs, sys + +### Codec APIs + +encode = codecs.utf_16_encode + +def decode(input, errors='strict'): + return codecs.utf_16_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def __init__(self, errors='strict'): + codecs.IncrementalEncoder.__init__(self, errors) + self.encoder = None + + def encode(self, input, final=False): + if self.encoder is None: + result = codecs.utf_16_encode(input, self.errors)[0] + if sys.byteorder == 'little': + self.encoder = codecs.utf_16_le_encode + else: + self.encoder = codecs.utf_16_be_encode + return result + return self.encoder(input, self.errors)[0] + + def reset(self): + codecs.IncrementalEncoder.reset(self) + self.encoder = None + + def getstate(self): + # state info we return to the caller: + # 0: stream is in natural order for this platform + # 2: endianness hasn't been determined yet + # (we're never writing in unnatural order) + return (2 if self.encoder is None else 0) + + def setstate(self, state): + if state: + self.encoder = None + else: + if sys.byteorder == 'little': + self.encoder = codecs.utf_16_le_encode + else: + self.encoder = codecs.utf_16_be_encode + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def __init__(self, errors='strict'): + codecs.BufferedIncrementalDecoder.__init__(self, errors) + self.decoder = None + + def _buffer_decode(self, input, errors, final): + if self.decoder is None: + (output, consumed, byteorder) = \ + codecs.utf_16_ex_decode(input, errors, 0, final) + if byteorder == -1: + self.decoder = codecs.utf_16_le_decode + elif byteorder == 1: + self.decoder = codecs.utf_16_be_decode + elif consumed >= 2: + raise UnicodeError("UTF-16 stream does not start with BOM") + return (output, consumed) + return self.decoder(input, self.errors, final) + + def reset(self): + codecs.BufferedIncrementalDecoder.reset(self) + self.decoder = None + + def getstate(self): + # additional state info from the base class must be None here, + # as it isn't passed along to the caller + state = codecs.BufferedIncrementalDecoder.getstate(self)[0] + # additional state info we pass to the caller: + # 0: stream is in natural order for this platform + # 1: stream is in unnatural order + # 2: endianness hasn't been determined yet + if self.decoder is None: + return (state, 2) + addstate = int((sys.byteorder == "big") != + (self.decoder is codecs.utf_16_be_decode)) + return (state, addstate) + + def setstate(self, state): + # state[1] will be ignored by BufferedIncrementalDecoder.setstate() + codecs.BufferedIncrementalDecoder.setstate(self, state) + state = state[1] + if state == 0: + self.decoder = (codecs.utf_16_be_decode + if sys.byteorder == "big" + else codecs.utf_16_le_decode) + elif state == 1: + self.decoder = (codecs.utf_16_le_decode + if sys.byteorder == "big" + else codecs.utf_16_be_decode) + else: + self.decoder = None + +class StreamWriter(codecs.StreamWriter): + def __init__(self, stream, errors='strict'): + codecs.StreamWriter.__init__(self, stream, errors) + self.encoder = None + + def reset(self): + codecs.StreamWriter.reset(self) + self.encoder = None + + def encode(self, input, errors='strict'): + if self.encoder is None: + result = codecs.utf_16_encode(input, errors) + if sys.byteorder == 'little': + self.encoder = codecs.utf_16_le_encode + else: + self.encoder = codecs.utf_16_be_encode + return result + else: + return self.encoder(input, errors) + +class StreamReader(codecs.StreamReader): + + def reset(self): + codecs.StreamReader.reset(self) + try: + del self.decode + except AttributeError: + pass + + def decode(self, input, errors='strict'): + (object, consumed, byteorder) = \ + codecs.utf_16_ex_decode(input, errors, 0, False) + if byteorder == -1: + self.decode = codecs.utf_16_le_decode + elif byteorder == 1: + self.decode = codecs.utf_16_be_decode + elif consumed>=2: + raise UnicodeError("UTF-16 stream does not start with BOM") + return (object, consumed) + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-16', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/utf_16_be.py b/my_env/Lib/encodings/utf_16_be.py new file mode 100644 index 000000000..86b458eb9 --- /dev/null +++ b/my_env/Lib/encodings/utf_16_be.py @@ -0,0 +1,42 @@ +""" Python 'utf-16-be' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +encode = codecs.utf_16_be_encode + +def decode(input, errors='strict'): + return codecs.utf_16_be_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.utf_16_be_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + _buffer_decode = codecs.utf_16_be_decode + +class StreamWriter(codecs.StreamWriter): + encode = codecs.utf_16_be_encode + +class StreamReader(codecs.StreamReader): + decode = codecs.utf_16_be_decode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-16-be', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/utf_16_le.py b/my_env/Lib/encodings/utf_16_le.py new file mode 100644 index 000000000..ec454142e --- /dev/null +++ b/my_env/Lib/encodings/utf_16_le.py @@ -0,0 +1,42 @@ +""" Python 'utf-16-le' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +encode = codecs.utf_16_le_encode + +def decode(input, errors='strict'): + return codecs.utf_16_le_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.utf_16_le_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + _buffer_decode = codecs.utf_16_le_decode + +class StreamWriter(codecs.StreamWriter): + encode = codecs.utf_16_le_encode + +class StreamReader(codecs.StreamReader): + decode = codecs.utf_16_le_decode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-16-le', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/utf_32.py b/my_env/Lib/encodings/utf_32.py new file mode 100644 index 000000000..cdf84d141 --- /dev/null +++ b/my_env/Lib/encodings/utf_32.py @@ -0,0 +1,150 @@ +""" +Python 'utf-32' Codec +""" +import codecs, sys + +### Codec APIs + +encode = codecs.utf_32_encode + +def decode(input, errors='strict'): + return codecs.utf_32_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def __init__(self, errors='strict'): + codecs.IncrementalEncoder.__init__(self, errors) + self.encoder = None + + def encode(self, input, final=False): + if self.encoder is None: + result = codecs.utf_32_encode(input, self.errors)[0] + if sys.byteorder == 'little': + self.encoder = codecs.utf_32_le_encode + else: + self.encoder = codecs.utf_32_be_encode + return result + return self.encoder(input, self.errors)[0] + + def reset(self): + codecs.IncrementalEncoder.reset(self) + self.encoder = None + + def getstate(self): + # state info we return to the caller: + # 0: stream is in natural order for this platform + # 2: endianness hasn't been determined yet + # (we're never writing in unnatural order) + return (2 if self.encoder is None else 0) + + def setstate(self, state): + if state: + self.encoder = None + else: + if sys.byteorder == 'little': + self.encoder = codecs.utf_32_le_encode + else: + self.encoder = codecs.utf_32_be_encode + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def __init__(self, errors='strict'): + codecs.BufferedIncrementalDecoder.__init__(self, errors) + self.decoder = None + + def _buffer_decode(self, input, errors, final): + if self.decoder is None: + (output, consumed, byteorder) = \ + codecs.utf_32_ex_decode(input, errors, 0, final) + if byteorder == -1: + self.decoder = codecs.utf_32_le_decode + elif byteorder == 1: + self.decoder = codecs.utf_32_be_decode + elif consumed >= 4: + raise UnicodeError("UTF-32 stream does not start with BOM") + return (output, consumed) + return self.decoder(input, self.errors, final) + + def reset(self): + codecs.BufferedIncrementalDecoder.reset(self) + self.decoder = None + + def getstate(self): + # additional state info from the base class must be None here, + # as it isn't passed along to the caller + state = codecs.BufferedIncrementalDecoder.getstate(self)[0] + # additional state info we pass to the caller: + # 0: stream is in natural order for this platform + # 1: stream is in unnatural order + # 2: endianness hasn't been determined yet + if self.decoder is None: + return (state, 2) + addstate = int((sys.byteorder == "big") != + (self.decoder is codecs.utf_32_be_decode)) + return (state, addstate) + + def setstate(self, state): + # state[1] will be ignored by BufferedIncrementalDecoder.setstate() + codecs.BufferedIncrementalDecoder.setstate(self, state) + state = state[1] + if state == 0: + self.decoder = (codecs.utf_32_be_decode + if sys.byteorder == "big" + else codecs.utf_32_le_decode) + elif state == 1: + self.decoder = (codecs.utf_32_le_decode + if sys.byteorder == "big" + else codecs.utf_32_be_decode) + else: + self.decoder = None + +class StreamWriter(codecs.StreamWriter): + def __init__(self, stream, errors='strict'): + self.encoder = None + codecs.StreamWriter.__init__(self, stream, errors) + + def reset(self): + codecs.StreamWriter.reset(self) + self.encoder = None + + def encode(self, input, errors='strict'): + if self.encoder is None: + result = codecs.utf_32_encode(input, errors) + if sys.byteorder == 'little': + self.encoder = codecs.utf_32_le_encode + else: + self.encoder = codecs.utf_32_be_encode + return result + else: + return self.encoder(input, errors) + +class StreamReader(codecs.StreamReader): + + def reset(self): + codecs.StreamReader.reset(self) + try: + del self.decode + except AttributeError: + pass + + def decode(self, input, errors='strict'): + (object, consumed, byteorder) = \ + codecs.utf_32_ex_decode(input, errors, 0, False) + if byteorder == -1: + self.decode = codecs.utf_32_le_decode + elif byteorder == 1: + self.decode = codecs.utf_32_be_decode + elif consumed>=4: + raise UnicodeError("UTF-32 stream does not start with BOM") + return (object, consumed) + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-32', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/utf_32_be.py b/my_env/Lib/encodings/utf_32_be.py new file mode 100644 index 000000000..fe272b5fa --- /dev/null +++ b/my_env/Lib/encodings/utf_32_be.py @@ -0,0 +1,37 @@ +""" +Python 'utf-32-be' Codec +""" +import codecs + +### Codec APIs + +encode = codecs.utf_32_be_encode + +def decode(input, errors='strict'): + return codecs.utf_32_be_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.utf_32_be_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + _buffer_decode = codecs.utf_32_be_decode + +class StreamWriter(codecs.StreamWriter): + encode = codecs.utf_32_be_encode + +class StreamReader(codecs.StreamReader): + decode = codecs.utf_32_be_decode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-32-be', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/utf_32_le.py b/my_env/Lib/encodings/utf_32_le.py new file mode 100644 index 000000000..9e4821092 --- /dev/null +++ b/my_env/Lib/encodings/utf_32_le.py @@ -0,0 +1,37 @@ +""" +Python 'utf-32-le' Codec +""" +import codecs + +### Codec APIs + +encode = codecs.utf_32_le_encode + +def decode(input, errors='strict'): + return codecs.utf_32_le_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.utf_32_le_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + _buffer_decode = codecs.utf_32_le_decode + +class StreamWriter(codecs.StreamWriter): + encode = codecs.utf_32_le_encode + +class StreamReader(codecs.StreamReader): + decode = codecs.utf_32_le_decode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-32-le', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/utf_7.py b/my_env/Lib/encodings/utf_7.py new file mode 100644 index 000000000..8e0567f20 --- /dev/null +++ b/my_env/Lib/encodings/utf_7.py @@ -0,0 +1,38 @@ +""" Python 'utf-7' Codec + +Written by Brian Quinlan (brian@sweetapp.com). +""" +import codecs + +### Codec APIs + +encode = codecs.utf_7_encode + +def decode(input, errors='strict'): + return codecs.utf_7_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.utf_7_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + _buffer_decode = codecs.utf_7_decode + +class StreamWriter(codecs.StreamWriter): + encode = codecs.utf_7_encode + +class StreamReader(codecs.StreamReader): + decode = codecs.utf_7_decode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-7', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/utf_8.py b/my_env/Lib/encodings/utf_8.py new file mode 100644 index 000000000..1bf633657 --- /dev/null +++ b/my_env/Lib/encodings/utf_8.py @@ -0,0 +1,42 @@ +""" Python 'utf-8' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +encode = codecs.utf_8_encode + +def decode(input, errors='strict'): + return codecs.utf_8_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.utf_8_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + _buffer_decode = codecs.utf_8_decode + +class StreamWriter(codecs.StreamWriter): + encode = codecs.utf_8_encode + +class StreamReader(codecs.StreamReader): + decode = codecs.utf_8_decode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-8', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/utf_8_sig.py b/my_env/Lib/encodings/utf_8_sig.py new file mode 100644 index 000000000..1bb479203 --- /dev/null +++ b/my_env/Lib/encodings/utf_8_sig.py @@ -0,0 +1,130 @@ +""" Python 'utf-8-sig' Codec +This work similar to UTF-8 with the following changes: + +* On encoding/writing a UTF-8 encoded BOM will be prepended/written as the + first three bytes. + +* On decoding/reading if the first three bytes are a UTF-8 encoded BOM, these + bytes will be skipped. +""" +import codecs + +### Codec APIs + +def encode(input, errors='strict'): + return (codecs.BOM_UTF8 + codecs.utf_8_encode(input, errors)[0], + len(input)) + +def decode(input, errors='strict'): + prefix = 0 + if input[:3] == codecs.BOM_UTF8: + input = input[3:] + prefix = 3 + (output, consumed) = codecs.utf_8_decode(input, errors, True) + return (output, consumed+prefix) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def __init__(self, errors='strict'): + codecs.IncrementalEncoder.__init__(self, errors) + self.first = 1 + + def encode(self, input, final=False): + if self.first: + self.first = 0 + return codecs.BOM_UTF8 + \ + codecs.utf_8_encode(input, self.errors)[0] + else: + return codecs.utf_8_encode(input, self.errors)[0] + + def reset(self): + codecs.IncrementalEncoder.reset(self) + self.first = 1 + + def getstate(self): + return self.first + + def setstate(self, state): + self.first = state + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def __init__(self, errors='strict'): + codecs.BufferedIncrementalDecoder.__init__(self, errors) + self.first = 1 + + def _buffer_decode(self, input, errors, final): + if self.first: + if len(input) < 3: + if codecs.BOM_UTF8.startswith(input): + # not enough data to decide if this really is a BOM + # => try again on the next call + return ("", 0) + else: + self.first = 0 + else: + self.first = 0 + if input[:3] == codecs.BOM_UTF8: + (output, consumed) = \ + codecs.utf_8_decode(input[3:], errors, final) + return (output, consumed+3) + return codecs.utf_8_decode(input, errors, final) + + def reset(self): + codecs.BufferedIncrementalDecoder.reset(self) + self.first = 1 + + def getstate(self): + state = codecs.BufferedIncrementalDecoder.getstate(self) + # state[1] must be 0 here, as it isn't passed along to the caller + return (state[0], self.first) + + def setstate(self, state): + # state[1] will be ignored by BufferedIncrementalDecoder.setstate() + codecs.BufferedIncrementalDecoder.setstate(self, state) + self.first = state[1] + +class StreamWriter(codecs.StreamWriter): + def reset(self): + codecs.StreamWriter.reset(self) + try: + del self.encode + except AttributeError: + pass + + def encode(self, input, errors='strict'): + self.encode = codecs.utf_8_encode + return encode(input, errors) + +class StreamReader(codecs.StreamReader): + def reset(self): + codecs.StreamReader.reset(self) + try: + del self.decode + except AttributeError: + pass + + def decode(self, input, errors='strict'): + if len(input) < 3: + if codecs.BOM_UTF8.startswith(input): + # not enough data to decide if this is a BOM + # => try again on the next call + return ("", 0) + elif input[:3] == codecs.BOM_UTF8: + self.decode = codecs.utf_8_decode + (output, consumed) = codecs.utf_8_decode(input[3:],errors) + return (output, consumed+3) + # (else) no BOM present + self.decode = codecs.utf_8_decode + return codecs.utf_8_decode(input, errors) + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-8-sig', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/my_env/Lib/encodings/uu_codec.py b/my_env/Lib/encodings/uu_codec.py new file mode 100644 index 000000000..2a5728fb5 --- /dev/null +++ b/my_env/Lib/encodings/uu_codec.py @@ -0,0 +1,99 @@ +"""Python 'uu_codec' Codec - UU content transfer encoding. + +This codec de/encodes from bytes to bytes. + +Written by Marc-Andre Lemburg (mal@lemburg.com). Some details were +adapted from uu.py which was written by Lance Ellinghouse and +modified by Jack Jansen and Fredrik Lundh. +""" + +import codecs +import binascii +from io import BytesIO + +### Codec APIs + +def uu_encode(input, errors='strict', filename='', mode=0o666): + assert errors == 'strict' + infile = BytesIO(input) + outfile = BytesIO() + read = infile.read + write = outfile.write + + # Encode + write(('begin %o %s\n' % (mode & 0o777, filename)).encode('ascii')) + chunk = read(45) + while chunk: + write(binascii.b2a_uu(chunk)) + chunk = read(45) + write(b' \nend\n') + + return (outfile.getvalue(), len(input)) + +def uu_decode(input, errors='strict'): + assert errors == 'strict' + infile = BytesIO(input) + outfile = BytesIO() + readline = infile.readline + write = outfile.write + + # Find start of encoded data + while 1: + s = readline() + if not s: + raise ValueError('Missing "begin" line in input data') + if s[:5] == b'begin': + break + + # Decode + while True: + s = readline() + if not s or s == b'end\n': + break + try: + data = binascii.a2b_uu(s) + except binascii.Error as v: + # Workaround for broken uuencoders by /Fredrik Lundh + nbytes = (((s[0]-32) & 63) * 4 + 5) // 3 + data = binascii.a2b_uu(s[:nbytes]) + #sys.stderr.write("Warning: %s\n" % str(v)) + write(data) + if not s: + raise ValueError('Truncated input data') + + return (outfile.getvalue(), len(input)) + +class Codec(codecs.Codec): + def encode(self, input, errors='strict'): + return uu_encode(input, errors) + + def decode(self, input, errors='strict'): + return uu_decode(input, errors) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return uu_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return uu_decode(input, self.errors)[0] + +class StreamWriter(Codec, codecs.StreamWriter): + charbuffertype = bytes + +class StreamReader(Codec, codecs.StreamReader): + charbuffertype = bytes + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='uu', + encode=uu_encode, + decode=uu_decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + _is_text_encoding=False, + ) diff --git a/my_env/Lib/encodings/zlib_codec.py b/my_env/Lib/encodings/zlib_codec.py new file mode 100644 index 000000000..95908a4b4 --- /dev/null +++ b/my_env/Lib/encodings/zlib_codec.py @@ -0,0 +1,77 @@ +"""Python 'zlib_codec' Codec - zlib compression encoding. + +This codec de/encodes from bytes to bytes. + +Written by Marc-Andre Lemburg (mal@lemburg.com). +""" + +import codecs +import zlib # this codec needs the optional zlib module ! + +### Codec APIs + +def zlib_encode(input, errors='strict'): + assert errors == 'strict' + return (zlib.compress(input), len(input)) + +def zlib_decode(input, errors='strict'): + assert errors == 'strict' + return (zlib.decompress(input), len(input)) + +class Codec(codecs.Codec): + def encode(self, input, errors='strict'): + return zlib_encode(input, errors) + def decode(self, input, errors='strict'): + return zlib_decode(input, errors) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def __init__(self, errors='strict'): + assert errors == 'strict' + self.errors = errors + self.compressobj = zlib.compressobj() + + def encode(self, input, final=False): + if final: + c = self.compressobj.compress(input) + return c + self.compressobj.flush() + else: + return self.compressobj.compress(input) + + def reset(self): + self.compressobj = zlib.compressobj() + +class IncrementalDecoder(codecs.IncrementalDecoder): + def __init__(self, errors='strict'): + assert errors == 'strict' + self.errors = errors + self.decompressobj = zlib.decompressobj() + + def decode(self, input, final=False): + if final: + c = self.decompressobj.decompress(input) + return c + self.decompressobj.flush() + else: + return self.decompressobj.decompress(input) + + def reset(self): + self.decompressobj = zlib.decompressobj() + +class StreamWriter(Codec, codecs.StreamWriter): + charbuffertype = bytes + +class StreamReader(Codec, codecs.StreamReader): + charbuffertype = bytes + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='zlib', + encode=zlib_encode, + decode=zlib_decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + _is_text_encoding=False, + ) diff --git a/my_env/Lib/enum.py b/my_env/Lib/enum.py new file mode 100644 index 000000000..5e97a9e8d --- /dev/null +++ b/my_env/Lib/enum.py @@ -0,0 +1,910 @@ +import sys +from types import MappingProxyType, DynamicClassAttribute + +# try _collections first to reduce startup cost +try: + from _collections import OrderedDict +except ImportError: + from collections import OrderedDict + + +__all__ = [ + 'EnumMeta', + 'Enum', 'IntEnum', 'Flag', 'IntFlag', + 'auto', 'unique', + ] + + +def _is_descriptor(obj): + """Returns True if obj is a descriptor, False otherwise.""" + return ( + hasattr(obj, '__get__') or + hasattr(obj, '__set__') or + hasattr(obj, '__delete__')) + + +def _is_dunder(name): + """Returns True if a __dunder__ name, False otherwise.""" + return (len(name) > 4 and + name[:2] == name[-2:] == '__' and + name[2] != '_' and + name[-3] != '_') + + +def _is_sunder(name): + """Returns True if a _sunder_ name, False otherwise.""" + return (len(name) > 2 and + name[0] == name[-1] == '_' and + name[1:2] != '_' and + name[-2:-1] != '_') + + +def _make_class_unpicklable(cls): + """Make the given class un-picklable.""" + def _break_on_call_reduce(self, proto): + raise TypeError('%r cannot be pickled' % self) + cls.__reduce_ex__ = _break_on_call_reduce + cls.__module__ = '' + +_auto_null = object() +class auto: + """ + Instances are replaced with an appropriate value in Enum class suites. + """ + value = _auto_null + + +class _EnumDict(dict): + """Track enum member order and ensure member names are not reused. + + EnumMeta will use the names found in self._member_names as the + enumeration member names. + + """ + def __init__(self): + super().__init__() + self._member_names = [] + self._last_values = [] + self._ignore = [] + + def __setitem__(self, key, value): + """Changes anything not dundered or not a descriptor. + + If an enum member name is used twice, an error is raised; duplicate + values are not checked for. + + Single underscore (sunder) names are reserved. + + """ + if _is_sunder(key): + if key not in ( + '_order_', '_create_pseudo_member_', + '_generate_next_value_', '_missing_', '_ignore_', + ): + raise ValueError('_names_ are reserved for future Enum use') + if key == '_generate_next_value_': + setattr(self, '_generate_next_value', value) + elif key == '_ignore_': + if isinstance(value, str): + value = value.replace(',',' ').split() + else: + value = list(value) + self._ignore = value + already = set(value) & set(self._member_names) + if already: + raise ValueError('_ignore_ cannot specify already set names: %r' % (already, )) + elif _is_dunder(key): + if key == '__order__': + key = '_order_' + elif key in self._member_names: + # descriptor overwriting an enum? + raise TypeError('Attempted to reuse key: %r' % key) + elif key in self._ignore: + pass + elif not _is_descriptor(value): + if key in self: + # enum overwriting a descriptor? + raise TypeError('%r already defined as: %r' % (key, self[key])) + if isinstance(value, auto): + if value.value == _auto_null: + value.value = self._generate_next_value(key, 1, len(self._member_names), self._last_values[:]) + value = value.value + self._member_names.append(key) + self._last_values.append(value) + super().__setitem__(key, value) + + +# Dummy value for Enum as EnumMeta explicitly checks for it, but of course +# until EnumMeta finishes running the first time the Enum class doesn't exist. +# This is also why there are checks in EnumMeta like `if Enum is not None` +Enum = None + + +class EnumMeta(type): + """Metaclass for Enum""" + @classmethod + def __prepare__(metacls, cls, bases): + # create the namespace dict + enum_dict = _EnumDict() + # inherit previous flags and _generate_next_value_ function + member_type, first_enum = metacls._get_mixins_(bases) + if first_enum is not None: + enum_dict['_generate_next_value_'] = getattr(first_enum, '_generate_next_value_', None) + return enum_dict + + def __new__(metacls, cls, bases, classdict): + # an Enum class is final once enumeration items have been defined; it + # cannot be mixed with other types (int, float, etc.) if it has an + # inherited __new__ unless a new __new__ is defined (or the resulting + # class will fail). + # + # remove any keys listed in _ignore_ + classdict.setdefault('_ignore_', []).append('_ignore_') + ignore = classdict['_ignore_'] + for key in ignore: + classdict.pop(key, None) + member_type, first_enum = metacls._get_mixins_(bases) + __new__, save_new, use_args = metacls._find_new_(classdict, member_type, + first_enum) + + # save enum items into separate mapping so they don't get baked into + # the new class + enum_members = {k: classdict[k] for k in classdict._member_names} + for name in classdict._member_names: + del classdict[name] + + # adjust the sunders + _order_ = classdict.pop('_order_', None) + + # check for illegal enum names (any others?) + invalid_names = set(enum_members) & {'mro', ''} + if invalid_names: + raise ValueError('Invalid enum member name: {0}'.format( + ','.join(invalid_names))) + + # create a default docstring if one has not been provided + if '__doc__' not in classdict: + classdict['__doc__'] = 'An enumeration.' + + # create our new Enum type + enum_class = super().__new__(metacls, cls, bases, classdict) + enum_class._member_names_ = [] # names in definition order + enum_class._member_map_ = OrderedDict() # name->value map + enum_class._member_type_ = member_type + + # save DynamicClassAttribute attributes from super classes so we know + # if we can take the shortcut of storing members in the class dict + dynamic_attributes = {k for c in enum_class.mro() + for k, v in c.__dict__.items() + if isinstance(v, DynamicClassAttribute)} + + # Reverse value->name map for hashable values. + enum_class._value2member_map_ = {} + + # If a custom type is mixed into the Enum, and it does not know how + # to pickle itself, pickle.dumps will succeed but pickle.loads will + # fail. Rather than have the error show up later and possibly far + # from the source, sabotage the pickle protocol for this class so + # that pickle.dumps also fails. + # + # However, if the new class implements its own __reduce_ex__, do not + # sabotage -- it's on them to make sure it works correctly. We use + # __reduce_ex__ instead of any of the others as it is preferred by + # pickle over __reduce__, and it handles all pickle protocols. + if '__reduce_ex__' not in classdict: + if member_type is not object: + methods = ('__getnewargs_ex__', '__getnewargs__', + '__reduce_ex__', '__reduce__') + if not any(m in member_type.__dict__ for m in methods): + _make_class_unpicklable(enum_class) + + # instantiate them, checking for duplicates as we go + # we instantiate first instead of checking for duplicates first in case + # a custom __new__ is doing something funky with the values -- such as + # auto-numbering ;) + for member_name in classdict._member_names: + value = enum_members[member_name] + if not isinstance(value, tuple): + args = (value, ) + else: + args = value + if member_type is tuple: # special case for tuple enums + args = (args, ) # wrap it one more time + if not use_args: + enum_member = __new__(enum_class) + if not hasattr(enum_member, '_value_'): + enum_member._value_ = value + else: + enum_member = __new__(enum_class, *args) + if not hasattr(enum_member, '_value_'): + if member_type is object: + enum_member._value_ = value + else: + enum_member._value_ = member_type(*args) + value = enum_member._value_ + enum_member._name_ = member_name + enum_member.__objclass__ = enum_class + enum_member.__init__(*args) + # If another member with the same value was already defined, the + # new member becomes an alias to the existing one. + for name, canonical_member in enum_class._member_map_.items(): + if canonical_member._value_ == enum_member._value_: + enum_member = canonical_member + break + else: + # Aliases don't appear in member names (only in __members__). + enum_class._member_names_.append(member_name) + # performance boost for any member that would not shadow + # a DynamicClassAttribute + if member_name not in dynamic_attributes: + setattr(enum_class, member_name, enum_member) + # now add to _member_map_ + enum_class._member_map_[member_name] = enum_member + try: + # This may fail if value is not hashable. We can't add the value + # to the map, and by-value lookups for this value will be + # linear. + enum_class._value2member_map_[value] = enum_member + except TypeError: + pass + + # double check that repr and friends are not the mixin's or various + # things break (such as pickle) + for name in ('__repr__', '__str__', '__format__', '__reduce_ex__'): + class_method = getattr(enum_class, name) + obj_method = getattr(member_type, name, None) + enum_method = getattr(first_enum, name, None) + if obj_method is not None and obj_method is class_method: + setattr(enum_class, name, enum_method) + + # replace any other __new__ with our own (as long as Enum is not None, + # anyway) -- again, this is to support pickle + if Enum is not None: + # if the user defined their own __new__, save it before it gets + # clobbered in case they subclass later + if save_new: + enum_class.__new_member__ = __new__ + enum_class.__new__ = Enum.__new__ + + # py3 support for definition order (helps keep py2/py3 code in sync) + if _order_ is not None: + if isinstance(_order_, str): + _order_ = _order_.replace(',', ' ').split() + if _order_ != enum_class._member_names_: + raise TypeError('member order does not match _order_') + + return enum_class + + def __bool__(self): + """ + classes/types should always be True. + """ + return True + + def __call__(cls, value, names=None, *, module=None, qualname=None, type=None, start=1): + """Either returns an existing member, or creates a new enum class. + + This method is used both when an enum class is given a value to match + to an enumeration member (i.e. Color(3)) and for the functional API + (i.e. Color = Enum('Color', names='RED GREEN BLUE')). + + When used for the functional API: + + `value` will be the name of the new class. + + `names` should be either a string of white-space/comma delimited names + (values will start at `start`), or an iterator/mapping of name, value pairs. + + `module` should be set to the module this class is being created in; + if it is not set, an attempt to find that module will be made, but if + it fails the class will not be picklable. + + `qualname` should be set to the actual location this class can be found + at in its module; by default it is set to the global scope. If this is + not correct, unpickling will fail in some circumstances. + + `type`, if set, will be mixed in as the first base class. + + """ + if names is None: # simple value lookup + return cls.__new__(cls, value) + # otherwise, functional API: we're creating a new Enum type + return cls._create_(value, names, module=module, qualname=qualname, type=type, start=start) + + def __contains__(cls, member): + if not isinstance(member, Enum): + import warnings + warnings.warn( + "using non-Enums in containment checks will raise " + "TypeError in Python 3.8", + DeprecationWarning, 2) + return isinstance(member, cls) and member._name_ in cls._member_map_ + + def __delattr__(cls, attr): + # nicer error message when someone tries to delete an attribute + # (see issue19025). + if attr in cls._member_map_: + raise AttributeError( + "%s: cannot delete Enum member." % cls.__name__) + super().__delattr__(attr) + + def __dir__(self): + return (['__class__', '__doc__', '__members__', '__module__'] + + self._member_names_) + + def __getattr__(cls, name): + """Return the enum member matching `name` + + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + + """ + if _is_dunder(name): + raise AttributeError(name) + try: + return cls._member_map_[name] + except KeyError: + raise AttributeError(name) from None + + def __getitem__(cls, name): + return cls._member_map_[name] + + def __iter__(cls): + return (cls._member_map_[name] for name in cls._member_names_) + + def __len__(cls): + return len(cls._member_names_) + + @property + def __members__(cls): + """Returns a mapping of member name->value. + + This mapping lists all enum members, including aliases. Note that this + is a read-only view of the internal mapping. + + """ + return MappingProxyType(cls._member_map_) + + def __repr__(cls): + return "" % cls.__name__ + + def __reversed__(cls): + return (cls._member_map_[name] for name in reversed(cls._member_names_)) + + def __setattr__(cls, name, value): + """Block attempts to reassign Enum members. + + A simple assignment to the class namespace only changes one of the + several possible ways to get an Enum member from the Enum class, + resulting in an inconsistent Enumeration. + + """ + member_map = cls.__dict__.get('_member_map_', {}) + if name in member_map: + raise AttributeError('Cannot reassign members.') + super().__setattr__(name, value) + + def _create_(cls, class_name, names, *, module=None, qualname=None, type=None, start=1): + """Convenience method to create a new Enum class. + + `names` can be: + + * A string containing member names, separated either with spaces or + commas. Values are incremented by 1 from `start`. + * An iterable of member names. Values are incremented by 1 from `start`. + * An iterable of (member name, value) pairs. + * A mapping of member name -> value pairs. + + """ + metacls = cls.__class__ + bases = (cls, ) if type is None else (type, cls) + _, first_enum = cls._get_mixins_(bases) + classdict = metacls.__prepare__(class_name, bases) + + # special processing needed for names? + if isinstance(names, str): + names = names.replace(',', ' ').split() + if isinstance(names, (tuple, list)) and names and isinstance(names[0], str): + original_names, names = names, [] + last_values = [] + for count, name in enumerate(original_names): + value = first_enum._generate_next_value_(name, start, count, last_values[:]) + last_values.append(value) + names.append((name, value)) + + # Here, names is either an iterable of (name, value) or a mapping. + for item in names: + if isinstance(item, str): + member_name, member_value = item, names[item] + else: + member_name, member_value = item + classdict[member_name] = member_value + enum_class = metacls.__new__(metacls, class_name, bases, classdict) + + # TODO: replace the frame hack if a blessed way to know the calling + # module is ever developed + if module is None: + try: + module = sys._getframe(2).f_globals['__name__'] + except (AttributeError, ValueError, KeyError) as exc: + pass + if module is None: + _make_class_unpicklable(enum_class) + else: + enum_class.__module__ = module + if qualname is not None: + enum_class.__qualname__ = qualname + + return enum_class + + @staticmethod + def _get_mixins_(bases): + """Returns the type for creating enum members, and the first inherited + enum class. + + bases: the tuple of bases that was given to __new__ + + """ + if not bases: + return object, Enum + + def _find_data_type(bases): + for chain in bases: + for base in chain.__mro__: + if base is object: + continue + elif '__new__' in base.__dict__: + if issubclass(base, Enum): + continue + return base + + # ensure final parent class is an Enum derivative, find any concrete + # data type, and check that Enum has no members + first_enum = bases[-1] + if not issubclass(first_enum, Enum): + raise TypeError("new enumerations should be created as " + "`EnumName([mixin_type, ...] [data_type,] enum_type)`") + member_type = _find_data_type(bases) or object + if first_enum._member_names_: + raise TypeError("Cannot extend enumerations") + return member_type, first_enum + + @staticmethod + def _find_new_(classdict, member_type, first_enum): + """Returns the __new__ to be used for creating the enum members. + + classdict: the class dictionary given to __new__ + member_type: the data type whose __new__ will be used by default + first_enum: enumeration to check for an overriding __new__ + + """ + # now find the correct __new__, checking to see of one was defined + # by the user; also check earlier enum classes in case a __new__ was + # saved as __new_member__ + __new__ = classdict.get('__new__', None) + + # should __new__ be saved as __new_member__ later? + save_new = __new__ is not None + + if __new__ is None: + # check all possibles for __new_member__ before falling back to + # __new__ + for method in ('__new_member__', '__new__'): + for possible in (member_type, first_enum): + target = getattr(possible, method, None) + if target not in { + None, + None.__new__, + object.__new__, + Enum.__new__, + }: + __new__ = target + break + if __new__ is not None: + break + else: + __new__ = object.__new__ + + # if a non-object.__new__ is used then whatever value/tuple was + # assigned to the enum member name will be passed to __new__ and to the + # new enum member's __init__ + if __new__ is object.__new__: + use_args = False + else: + use_args = True + return __new__, save_new, use_args + + +class Enum(metaclass=EnumMeta): + """Generic enumeration. + + Derive from this class to define new enumerations. + + """ + def __new__(cls, value): + # all enum instances are actually created during class construction + # without calling this method; this method is called by the metaclass' + # __call__ (i.e. Color(3) ), and by pickle + if type(value) is cls: + # For lookups like Color(Color.RED) + return value + # by-value search for a matching enum member + # see if it's in the reverse mapping (for hashable values) + try: + return cls._value2member_map_[value] + except KeyError: + # Not found, no need to do long O(n) search + pass + except TypeError: + # not there, now do long search -- O(n) behavior + for member in cls._member_map_.values(): + if member._value_ == value: + return member + # still not found -- try _missing_ hook + try: + exc = None + result = cls._missing_(value) + except Exception as e: + exc = e + result = None + if isinstance(result, cls): + return result + else: + ve_exc = ValueError("%r is not a valid %s" % (value, cls.__name__)) + if result is None and exc is None: + raise ve_exc + elif exc is None: + exc = TypeError( + 'error in %s._missing_: returned %r instead of None or a valid member' + % (cls.__name__, result) + ) + exc.__context__ = ve_exc + raise exc + + def _generate_next_value_(name, start, count, last_values): + for last_value in reversed(last_values): + try: + return last_value + 1 + except TypeError: + pass + else: + return start + + @classmethod + def _missing_(cls, value): + raise ValueError("%r is not a valid %s" % (value, cls.__name__)) + + def __repr__(self): + return "<%s.%s: %r>" % ( + self.__class__.__name__, self._name_, self._value_) + + def __str__(self): + return "%s.%s" % (self.__class__.__name__, self._name_) + + def __dir__(self): + added_behavior = [ + m + for cls in self.__class__.mro() + for m in cls.__dict__ + if m[0] != '_' and m not in self._member_map_ + ] + return (['__class__', '__doc__', '__module__'] + added_behavior) + + def __format__(self, format_spec): + # mixed-in Enums should use the mixed-in type's __format__, otherwise + # we can get strange results with the Enum name showing up instead of + # the value + + # pure Enum branch + if self._member_type_ is object: + cls = str + val = str(self) + # mix-in branch + else: + cls = self._member_type_ + val = self._value_ + return cls.__format__(val, format_spec) + + def __hash__(self): + return hash(self._name_) + + def __reduce_ex__(self, proto): + return self.__class__, (self._value_, ) + + # DynamicClassAttribute is used to provide access to the `name` and + # `value` properties of enum members while keeping some measure of + # protection from modification, while still allowing for an enumeration + # to have members named `name` and `value`. This works because enumeration + # members are not set directly on the enum class -- __getattr__ is + # used to look them up. + + @DynamicClassAttribute + def name(self): + """The name of the Enum member.""" + return self._name_ + + @DynamicClassAttribute + def value(self): + """The value of the Enum member.""" + return self._value_ + + @classmethod + def _convert(cls, name, module, filter, source=None): + """ + Create a new Enum subclass that replaces a collection of global constants + """ + # convert all constants from source (or module) that pass filter() to + # a new Enum called name, and export the enum and its members back to + # module; + # also, replace the __reduce_ex__ method so unpickling works in + # previous Python versions + module_globals = vars(sys.modules[module]) + if source: + source = vars(source) + else: + source = module_globals + # We use an OrderedDict of sorted source keys so that the + # _value2member_map is populated in the same order every time + # for a consistent reverse mapping of number to name when there + # are multiple names for the same number rather than varying + # between runs due to hash randomization of the module dictionary. + members = [ + (name, source[name]) + for name in source.keys() + if filter(name)] + try: + # sort by value + members.sort(key=lambda t: (t[1], t[0])) + except TypeError: + # unless some values aren't comparable, in which case sort by name + members.sort(key=lambda t: t[0]) + cls = cls(name, members, module=module) + cls.__reduce_ex__ = _reduce_ex_by_name + module_globals.update(cls.__members__) + module_globals[name] = cls + return cls + + +class IntEnum(int, Enum): + """Enum where members are also (and must be) ints""" + + +def _reduce_ex_by_name(self, proto): + return self.name + +class Flag(Enum): + """Support for flags""" + + def _generate_next_value_(name, start, count, last_values): + """ + Generate the next value when not given. + + name: the name of the member + start: the initital start value or None + count: the number of existing members + last_value: the last value assigned or None + """ + if not count: + return start if start is not None else 1 + for last_value in reversed(last_values): + try: + high_bit = _high_bit(last_value) + break + except Exception: + raise TypeError('Invalid Flag value: %r' % last_value) from None + return 2 ** (high_bit+1) + + @classmethod + def _missing_(cls, value): + original_value = value + if value < 0: + value = ~value + possible_member = cls._create_pseudo_member_(value) + if original_value < 0: + possible_member = ~possible_member + return possible_member + + @classmethod + def _create_pseudo_member_(cls, value): + """ + Create a composite member iff value contains only members. + """ + pseudo_member = cls._value2member_map_.get(value, None) + if pseudo_member is None: + # verify all bits are accounted for + _, extra_flags = _decompose(cls, value) + if extra_flags: + raise ValueError("%r is not a valid %s" % (value, cls.__name__)) + # construct a singleton enum pseudo-member + pseudo_member = object.__new__(cls) + pseudo_member._name_ = None + pseudo_member._value_ = value + # use setdefault in case another thread already created a composite + # with this value + pseudo_member = cls._value2member_map_.setdefault(value, pseudo_member) + return pseudo_member + + def __contains__(self, other): + if not isinstance(other, self.__class__): + import warnings + warnings.warn( + "using non-Flags in containment checks will raise " + "TypeError in Python 3.8", + DeprecationWarning, 2) + return False + return other._value_ & self._value_ == other._value_ + + def __repr__(self): + cls = self.__class__ + if self._name_ is not None: + return '<%s.%s: %r>' % (cls.__name__, self._name_, self._value_) + members, uncovered = _decompose(cls, self._value_) + return '<%s.%s: %r>' % ( + cls.__name__, + '|'.join([str(m._name_ or m._value_) for m in members]), + self._value_, + ) + + def __str__(self): + cls = self.__class__ + if self._name_ is not None: + return '%s.%s' % (cls.__name__, self._name_) + members, uncovered = _decompose(cls, self._value_) + if len(members) == 1 and members[0]._name_ is None: + return '%s.%r' % (cls.__name__, members[0]._value_) + else: + return '%s.%s' % ( + cls.__name__, + '|'.join([str(m._name_ or m._value_) for m in members]), + ) + + def __bool__(self): + return bool(self._value_) + + def __or__(self, other): + if not isinstance(other, self.__class__): + return NotImplemented + return self.__class__(self._value_ | other._value_) + + def __and__(self, other): + if not isinstance(other, self.__class__): + return NotImplemented + return self.__class__(self._value_ & other._value_) + + def __xor__(self, other): + if not isinstance(other, self.__class__): + return NotImplemented + return self.__class__(self._value_ ^ other._value_) + + def __invert__(self): + members, uncovered = _decompose(self.__class__, self._value_) + inverted = self.__class__(0) + for m in self.__class__: + if m not in members and not (m._value_ & self._value_): + inverted = inverted | m + return self.__class__(inverted) + + +class IntFlag(int, Flag): + """Support for integer-based Flags""" + + @classmethod + def _missing_(cls, value): + if not isinstance(value, int): + raise ValueError("%r is not a valid %s" % (value, cls.__name__)) + new_member = cls._create_pseudo_member_(value) + return new_member + + @classmethod + def _create_pseudo_member_(cls, value): + pseudo_member = cls._value2member_map_.get(value, None) + if pseudo_member is None: + need_to_create = [value] + # get unaccounted for bits + _, extra_flags = _decompose(cls, value) + # timer = 10 + while extra_flags: + # timer -= 1 + bit = _high_bit(extra_flags) + flag_value = 2 ** bit + if (flag_value not in cls._value2member_map_ and + flag_value not in need_to_create + ): + need_to_create.append(flag_value) + if extra_flags == -flag_value: + extra_flags = 0 + else: + extra_flags ^= flag_value + for value in reversed(need_to_create): + # construct singleton pseudo-members + pseudo_member = int.__new__(cls, value) + pseudo_member._name_ = None + pseudo_member._value_ = value + # use setdefault in case another thread already created a composite + # with this value + pseudo_member = cls._value2member_map_.setdefault(value, pseudo_member) + return pseudo_member + + def __or__(self, other): + if not isinstance(other, (self.__class__, int)): + return NotImplemented + result = self.__class__(self._value_ | self.__class__(other)._value_) + return result + + def __and__(self, other): + if not isinstance(other, (self.__class__, int)): + return NotImplemented + return self.__class__(self._value_ & self.__class__(other)._value_) + + def __xor__(self, other): + if not isinstance(other, (self.__class__, int)): + return NotImplemented + return self.__class__(self._value_ ^ self.__class__(other)._value_) + + __ror__ = __or__ + __rand__ = __and__ + __rxor__ = __xor__ + + def __invert__(self): + result = self.__class__(~self._value_) + return result + + +def _high_bit(value): + """returns index of highest bit, or -1 if value is zero or negative""" + return value.bit_length() - 1 + +def unique(enumeration): + """Class decorator for enumerations ensuring unique member values.""" + duplicates = [] + for name, member in enumeration.__members__.items(): + if name != member.name: + duplicates.append((name, member.name)) + if duplicates: + alias_details = ', '.join( + ["%s -> %s" % (alias, name) for (alias, name) in duplicates]) + raise ValueError('duplicate values found in %r: %s' % + (enumeration, alias_details)) + return enumeration + +def _decompose(flag, value): + """Extract all members from the value.""" + # _decompose is only called if the value is not named + not_covered = value + negative = value < 0 + # issue29167: wrap accesses to _value2member_map_ in a list to avoid race + # conditions between iterating over it and having more pseudo- + # members added to it + if negative: + # only check for named flags + flags_to_check = [ + (m, v) + for v, m in list(flag._value2member_map_.items()) + if m.name is not None + ] + else: + # check for named flags and powers-of-two flags + flags_to_check = [ + (m, v) + for v, m in list(flag._value2member_map_.items()) + if m.name is not None or _power_of_two(v) + ] + members = [] + for member, member_value in flags_to_check: + if member_value and member_value & value == member_value: + members.append(member) + not_covered &= ~member_value + if not members and value in flag._value2member_map_: + members.append(flag._value2member_map_[value]) + members.sort(key=lambda m: m._value_, reverse=True) + if len(members) > 1 and members[0].value == value: + # we have the breakdown, don't need the value member itself + members.pop(0) + return members, not_covered + +def _power_of_two(value): + if value < 1: + return False + return value == 2 ** _high_bit(value) diff --git a/my_env/Lib/fnmatch.py b/my_env/Lib/fnmatch.py new file mode 100644 index 000000000..b98e64132 --- /dev/null +++ b/my_env/Lib/fnmatch.py @@ -0,0 +1,128 @@ +"""Filename matching with shell patterns. + +fnmatch(FILENAME, PATTERN) matches according to the local convention. +fnmatchcase(FILENAME, PATTERN) always takes case in account. + +The functions operate by translating the pattern into a regular +expression. They cache the compiled regular expressions for speed. + +The function translate(PATTERN) returns a regular expression +corresponding to PATTERN. (It does not compile it.) +""" +import os +import posixpath +import re +import functools + +__all__ = ["filter", "fnmatch", "fnmatchcase", "translate"] + +def fnmatch(name, pat): + """Test whether FILENAME matches PATTERN. + + Patterns are Unix shell style: + + * matches everything + ? matches any single character + [seq] matches any character in seq + [!seq] matches any char not in seq + + An initial period in FILENAME is not special. + Both FILENAME and PATTERN are first case-normalized + if the operating system requires it. + If you don't want this, use fnmatchcase(FILENAME, PATTERN). + """ + name = os.path.normcase(name) + pat = os.path.normcase(pat) + return fnmatchcase(name, pat) + +@functools.lru_cache(maxsize=256, typed=True) +def _compile_pattern(pat): + if isinstance(pat, bytes): + pat_str = str(pat, 'ISO-8859-1') + res_str = translate(pat_str) + res = bytes(res_str, 'ISO-8859-1') + else: + res = translate(pat) + return re.compile(res).match + +def filter(names, pat): + """Return the subset of the list NAMES that match PAT.""" + result = [] + pat = os.path.normcase(pat) + match = _compile_pattern(pat) + if os.path is posixpath: + # normcase on posix is NOP. Optimize it away from the loop. + for name in names: + if match(name): + result.append(name) + else: + for name in names: + if match(os.path.normcase(name)): + result.append(name) + return result + +def fnmatchcase(name, pat): + """Test whether FILENAME matches PATTERN, including case. + + This is a version of fnmatch() which doesn't case-normalize + its arguments. + """ + match = _compile_pattern(pat) + return match(name) is not None + + +def translate(pat): + """Translate a shell PATTERN to a regular expression. + + There is no way to quote meta-characters. + """ + + i, n = 0, len(pat) + res = '' + while i < n: + c = pat[i] + i = i+1 + if c == '*': + res = res + '.*' + elif c == '?': + res = res + '.' + elif c == '[': + j = i + if j < n and pat[j] == '!': + j = j+1 + if j < n and pat[j] == ']': + j = j+1 + while j < n and pat[j] != ']': + j = j+1 + if j >= n: + res = res + '\\[' + else: + stuff = pat[i:j] + if '--' not in stuff: + stuff = stuff.replace('\\', r'\\') + else: + chunks = [] + k = i+2 if pat[i] == '!' else i+1 + while True: + k = pat.find('-', k, j) + if k < 0: + break + chunks.append(pat[i:k]) + i = k+1 + k = k+3 + chunks.append(pat[i:j]) + # Escape backslashes and hyphens for set difference (--). + # Hyphens that create ranges shouldn't be escaped. + stuff = '-'.join(s.replace('\\', r'\\').replace('-', r'\-') + for s in chunks) + # Escape set operations (&&, ~~ and ||). + stuff = re.sub(r'([&~|])', r'\\\1', stuff) + i = j+1 + if stuff[0] == '!': + stuff = '^' + stuff[1:] + elif stuff[0] in ('^', '['): + stuff = '\\' + stuff + res = '%s[%s]' % (res, stuff) + else: + res = res + re.escape(c) + return r'(?s:%s)\Z' % res diff --git a/my_env/Lib/functools.py b/my_env/Lib/functools.py new file mode 100644 index 000000000..1daa1d177 --- /dev/null +++ b/my_env/Lib/functools.py @@ -0,0 +1,849 @@ +"""functools.py - Tools for working with functions and callable objects +""" +# Python module wrapper for _functools C module +# to allow utilities written in Python to be added +# to the functools module. +# Written by Nick Coghlan , +# Raymond Hettinger , +# and Åukasz Langa . +# Copyright (C) 2006-2013 Python Software Foundation. +# See C source code for _functools credits/copyright + +__all__ = ['update_wrapper', 'wraps', 'WRAPPER_ASSIGNMENTS', 'WRAPPER_UPDATES', + 'total_ordering', 'cmp_to_key', 'lru_cache', 'reduce', 'partial', + 'partialmethod', 'singledispatch'] + +try: + from _functools import reduce +except ImportError: + pass +from abc import get_cache_token +from collections import namedtuple +# import types, weakref # Deferred to single_dispatch() +from reprlib import recursive_repr +from _thread import RLock + + +################################################################################ +### update_wrapper() and wraps() decorator +################################################################################ + +# update_wrapper() and wraps() are tools to help write +# wrapper functions that can handle naive introspection + +WRAPPER_ASSIGNMENTS = ('__module__', '__name__', '__qualname__', '__doc__', + '__annotations__') +WRAPPER_UPDATES = ('__dict__',) +def update_wrapper(wrapper, + wrapped, + assigned = WRAPPER_ASSIGNMENTS, + updated = WRAPPER_UPDATES): + """Update a wrapper function to look like the wrapped function + + wrapper is the function to be updated + wrapped is the original function + assigned is a tuple naming the attributes assigned directly + from the wrapped function to the wrapper function (defaults to + functools.WRAPPER_ASSIGNMENTS) + updated is a tuple naming the attributes of the wrapper that + are updated with the corresponding attribute from the wrapped + function (defaults to functools.WRAPPER_UPDATES) + """ + for attr in assigned: + try: + value = getattr(wrapped, attr) + except AttributeError: + pass + else: + setattr(wrapper, attr, value) + for attr in updated: + getattr(wrapper, attr).update(getattr(wrapped, attr, {})) + # Issue #17482: set __wrapped__ last so we don't inadvertently copy it + # from the wrapped function when updating __dict__ + wrapper.__wrapped__ = wrapped + # Return the wrapper so this can be used as a decorator via partial() + return wrapper + +def wraps(wrapped, + assigned = WRAPPER_ASSIGNMENTS, + updated = WRAPPER_UPDATES): + """Decorator factory to apply update_wrapper() to a wrapper function + + Returns a decorator that invokes update_wrapper() with the decorated + function as the wrapper argument and the arguments to wraps() as the + remaining arguments. Default arguments are as for update_wrapper(). + This is a convenience function to simplify applying partial() to + update_wrapper(). + """ + return partial(update_wrapper, wrapped=wrapped, + assigned=assigned, updated=updated) + + +################################################################################ +### total_ordering class decorator +################################################################################ + +# The total ordering functions all invoke the root magic method directly +# rather than using the corresponding operator. This avoids possible +# infinite recursion that could occur when the operator dispatch logic +# detects a NotImplemented result and then calls a reflected method. + +def _gt_from_lt(self, other, NotImplemented=NotImplemented): + 'Return a > b. Computed by @total_ordering from (not a < b) and (a != b).' + op_result = self.__lt__(other) + if op_result is NotImplemented: + return op_result + return not op_result and self != other + +def _le_from_lt(self, other, NotImplemented=NotImplemented): + 'Return a <= b. Computed by @total_ordering from (a < b) or (a == b).' + op_result = self.__lt__(other) + return op_result or self == other + +def _ge_from_lt(self, other, NotImplemented=NotImplemented): + 'Return a >= b. Computed by @total_ordering from (not a < b).' + op_result = self.__lt__(other) + if op_result is NotImplemented: + return op_result + return not op_result + +def _ge_from_le(self, other, NotImplemented=NotImplemented): + 'Return a >= b. Computed by @total_ordering from (not a <= b) or (a == b).' + op_result = self.__le__(other) + if op_result is NotImplemented: + return op_result + return not op_result or self == other + +def _lt_from_le(self, other, NotImplemented=NotImplemented): + 'Return a < b. Computed by @total_ordering from (a <= b) and (a != b).' + op_result = self.__le__(other) + if op_result is NotImplemented: + return op_result + return op_result and self != other + +def _gt_from_le(self, other, NotImplemented=NotImplemented): + 'Return a > b. Computed by @total_ordering from (not a <= b).' + op_result = self.__le__(other) + if op_result is NotImplemented: + return op_result + return not op_result + +def _lt_from_gt(self, other, NotImplemented=NotImplemented): + 'Return a < b. Computed by @total_ordering from (not a > b) and (a != b).' + op_result = self.__gt__(other) + if op_result is NotImplemented: + return op_result + return not op_result and self != other + +def _ge_from_gt(self, other, NotImplemented=NotImplemented): + 'Return a >= b. Computed by @total_ordering from (a > b) or (a == b).' + op_result = self.__gt__(other) + return op_result or self == other + +def _le_from_gt(self, other, NotImplemented=NotImplemented): + 'Return a <= b. Computed by @total_ordering from (not a > b).' + op_result = self.__gt__(other) + if op_result is NotImplemented: + return op_result + return not op_result + +def _le_from_ge(self, other, NotImplemented=NotImplemented): + 'Return a <= b. Computed by @total_ordering from (not a >= b) or (a == b).' + op_result = self.__ge__(other) + if op_result is NotImplemented: + return op_result + return not op_result or self == other + +def _gt_from_ge(self, other, NotImplemented=NotImplemented): + 'Return a > b. Computed by @total_ordering from (a >= b) and (a != b).' + op_result = self.__ge__(other) + if op_result is NotImplemented: + return op_result + return op_result and self != other + +def _lt_from_ge(self, other, NotImplemented=NotImplemented): + 'Return a < b. Computed by @total_ordering from (not a >= b).' + op_result = self.__ge__(other) + if op_result is NotImplemented: + return op_result + return not op_result + +_convert = { + '__lt__': [('__gt__', _gt_from_lt), + ('__le__', _le_from_lt), + ('__ge__', _ge_from_lt)], + '__le__': [('__ge__', _ge_from_le), + ('__lt__', _lt_from_le), + ('__gt__', _gt_from_le)], + '__gt__': [('__lt__', _lt_from_gt), + ('__ge__', _ge_from_gt), + ('__le__', _le_from_gt)], + '__ge__': [('__le__', _le_from_ge), + ('__gt__', _gt_from_ge), + ('__lt__', _lt_from_ge)] +} + +def total_ordering(cls): + """Class decorator that fills in missing ordering methods""" + # Find user-defined comparisons (not those inherited from object). + roots = {op for op in _convert if getattr(cls, op, None) is not getattr(object, op, None)} + if not roots: + raise ValueError('must define at least one ordering operation: < > <= >=') + root = max(roots) # prefer __lt__ to __le__ to __gt__ to __ge__ + for opname, opfunc in _convert[root]: + if opname not in roots: + opfunc.__name__ = opname + setattr(cls, opname, opfunc) + return cls + + +################################################################################ +### cmp_to_key() function converter +################################################################################ + +def cmp_to_key(mycmp): + """Convert a cmp= function into a key= function""" + class K(object): + __slots__ = ['obj'] + def __init__(self, obj): + self.obj = obj + def __lt__(self, other): + return mycmp(self.obj, other.obj) < 0 + def __gt__(self, other): + return mycmp(self.obj, other.obj) > 0 + def __eq__(self, other): + return mycmp(self.obj, other.obj) == 0 + def __le__(self, other): + return mycmp(self.obj, other.obj) <= 0 + def __ge__(self, other): + return mycmp(self.obj, other.obj) >= 0 + __hash__ = None + return K + +try: + from _functools import cmp_to_key +except ImportError: + pass + + +################################################################################ +### partial() argument application +################################################################################ + +# Purely functional, no descriptor behaviour +class partial: + """New function with partial application of the given arguments + and keywords. + """ + + __slots__ = "func", "args", "keywords", "__dict__", "__weakref__" + + def __new__(*args, **keywords): + if not args: + raise TypeError("descriptor '__new__' of partial needs an argument") + if len(args) < 2: + raise TypeError("type 'partial' takes at least one argument") + cls, func, *args = args + if not callable(func): + raise TypeError("the first argument must be callable") + args = tuple(args) + + if hasattr(func, "func"): + args = func.args + args + tmpkw = func.keywords.copy() + tmpkw.update(keywords) + keywords = tmpkw + del tmpkw + func = func.func + + self = super(partial, cls).__new__(cls) + + self.func = func + self.args = args + self.keywords = keywords + return self + + def __call__(*args, **keywords): + if not args: + raise TypeError("descriptor '__call__' of partial needs an argument") + self, *args = args + newkeywords = self.keywords.copy() + newkeywords.update(keywords) + return self.func(*self.args, *args, **newkeywords) + + @recursive_repr() + def __repr__(self): + qualname = type(self).__qualname__ + args = [repr(self.func)] + args.extend(repr(x) for x in self.args) + args.extend(f"{k}={v!r}" for (k, v) in self.keywords.items()) + if type(self).__module__ == "functools": + return f"functools.{qualname}({', '.join(args)})" + return f"{qualname}({', '.join(args)})" + + def __reduce__(self): + return type(self), (self.func,), (self.func, self.args, + self.keywords or None, self.__dict__ or None) + + def __setstate__(self, state): + if not isinstance(state, tuple): + raise TypeError("argument to __setstate__ must be a tuple") + if len(state) != 4: + raise TypeError(f"expected 4 items in state, got {len(state)}") + func, args, kwds, namespace = state + if (not callable(func) or not isinstance(args, tuple) or + (kwds is not None and not isinstance(kwds, dict)) or + (namespace is not None and not isinstance(namespace, dict))): + raise TypeError("invalid partial state") + + args = tuple(args) # just in case it's a subclass + if kwds is None: + kwds = {} + elif type(kwds) is not dict: # XXX does it need to be *exactly* dict? + kwds = dict(kwds) + if namespace is None: + namespace = {} + + self.__dict__ = namespace + self.func = func + self.args = args + self.keywords = kwds + +try: + from _functools import partial +except ImportError: + pass + +# Descriptor version +class partialmethod(object): + """Method descriptor with partial application of the given arguments + and keywords. + + Supports wrapping existing descriptors and handles non-descriptor + callables as instance methods. + """ + + def __init__(*args, **keywords): + if len(args) >= 2: + self, func, *args = args + elif not args: + raise TypeError("descriptor '__init__' of partialmethod " + "needs an argument") + elif 'func' in keywords: + func = keywords.pop('func') + self, *args = args + else: + raise TypeError("type 'partialmethod' takes at least one argument, " + "got %d" % (len(args)-1)) + args = tuple(args) + + if not callable(func) and not hasattr(func, "__get__"): + raise TypeError("{!r} is not callable or a descriptor" + .format(func)) + + # func could be a descriptor like classmethod which isn't callable, + # so we can't inherit from partial (it verifies func is callable) + if isinstance(func, partialmethod): + # flattening is mandatory in order to place cls/self before all + # other arguments + # it's also more efficient since only one function will be called + self.func = func.func + self.args = func.args + args + self.keywords = func.keywords.copy() + self.keywords.update(keywords) + else: + self.func = func + self.args = args + self.keywords = keywords + + def __repr__(self): + args = ", ".join(map(repr, self.args)) + keywords = ", ".join("{}={!r}".format(k, v) + for k, v in self.keywords.items()) + format_string = "{module}.{cls}({func}, {args}, {keywords})" + return format_string.format(module=self.__class__.__module__, + cls=self.__class__.__qualname__, + func=self.func, + args=args, + keywords=keywords) + + def _make_unbound_method(self): + def _method(*args, **keywords): + call_keywords = self.keywords.copy() + call_keywords.update(keywords) + cls_or_self, *rest = args + call_args = (cls_or_self,) + self.args + tuple(rest) + return self.func(*call_args, **call_keywords) + _method.__isabstractmethod__ = self.__isabstractmethod__ + _method._partialmethod = self + return _method + + def __get__(self, obj, cls): + get = getattr(self.func, "__get__", None) + result = None + if get is not None: + new_func = get(obj, cls) + if new_func is not self.func: + # Assume __get__ returning something new indicates the + # creation of an appropriate callable + result = partial(new_func, *self.args, **self.keywords) + try: + result.__self__ = new_func.__self__ + except AttributeError: + pass + if result is None: + # If the underlying descriptor didn't do anything, treat this + # like an instance method + result = self._make_unbound_method().__get__(obj, cls) + return result + + @property + def __isabstractmethod__(self): + return getattr(self.func, "__isabstractmethod__", False) + + +################################################################################ +### LRU Cache function decorator +################################################################################ + +_CacheInfo = namedtuple("CacheInfo", ["hits", "misses", "maxsize", "currsize"]) + +class _HashedSeq(list): + """ This class guarantees that hash() will be called no more than once + per element. This is important because the lru_cache() will hash + the key multiple times on a cache miss. + + """ + + __slots__ = 'hashvalue' + + def __init__(self, tup, hash=hash): + self[:] = tup + self.hashvalue = hash(tup) + + def __hash__(self): + return self.hashvalue + +def _make_key(args, kwds, typed, + kwd_mark = (object(),), + fasttypes = {int, str}, + tuple=tuple, type=type, len=len): + """Make a cache key from optionally typed positional and keyword arguments + + The key is constructed in a way that is flat as possible rather than + as a nested structure that would take more memory. + + If there is only a single argument and its data type is known to cache + its hash value, then that argument is returned without a wrapper. This + saves space and improves lookup speed. + + """ + # All of code below relies on kwds preserving the order input by the user. + # Formerly, we sorted() the kwds before looping. The new way is *much* + # faster; however, it means that f(x=1, y=2) will now be treated as a + # distinct call from f(y=2, x=1) which will be cached separately. + key = args + if kwds: + key += kwd_mark + for item in kwds.items(): + key += item + if typed: + key += tuple(type(v) for v in args) + if kwds: + key += tuple(type(v) for v in kwds.values()) + elif len(key) == 1 and type(key[0]) in fasttypes: + return key[0] + return _HashedSeq(key) + +def lru_cache(maxsize=128, typed=False): + """Least-recently-used cache decorator. + + If *maxsize* is set to None, the LRU features are disabled and the cache + can grow without bound. + + If *typed* is True, arguments of different types will be cached separately. + For example, f(3.0) and f(3) will be treated as distinct calls with + distinct results. + + Arguments to the cached function must be hashable. + + View the cache statistics named tuple (hits, misses, maxsize, currsize) + with f.cache_info(). Clear the cache and statistics with f.cache_clear(). + Access the underlying function with f.__wrapped__. + + See: http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used + + """ + + # Users should only access the lru_cache through its public API: + # cache_info, cache_clear, and f.__wrapped__ + # The internals of the lru_cache are encapsulated for thread safety and + # to allow the implementation to change (including a possible C version). + + # Early detection of an erroneous call to @lru_cache without any arguments + # resulting in the inner function being passed to maxsize instead of an + # integer or None. Negative maxsize is treated as 0. + if isinstance(maxsize, int): + if maxsize < 0: + maxsize = 0 + elif maxsize is not None: + raise TypeError('Expected maxsize to be an integer or None') + + def decorating_function(user_function): + wrapper = _lru_cache_wrapper(user_function, maxsize, typed, _CacheInfo) + return update_wrapper(wrapper, user_function) + + return decorating_function + +def _lru_cache_wrapper(user_function, maxsize, typed, _CacheInfo): + # Constants shared by all lru cache instances: + sentinel = object() # unique object used to signal cache misses + make_key = _make_key # build a key from the function arguments + PREV, NEXT, KEY, RESULT = 0, 1, 2, 3 # names for the link fields + + cache = {} + hits = misses = 0 + full = False + cache_get = cache.get # bound method to lookup a key or return None + cache_len = cache.__len__ # get cache size without calling len() + lock = RLock() # because linkedlist updates aren't threadsafe + root = [] # root of the circular doubly linked list + root[:] = [root, root, None, None] # initialize by pointing to self + + if maxsize == 0: + + def wrapper(*args, **kwds): + # No caching -- just a statistics update + nonlocal misses + misses += 1 + result = user_function(*args, **kwds) + return result + + elif maxsize is None: + + def wrapper(*args, **kwds): + # Simple caching without ordering or size limit + nonlocal hits, misses + key = make_key(args, kwds, typed) + result = cache_get(key, sentinel) + if result is not sentinel: + hits += 1 + return result + misses += 1 + result = user_function(*args, **kwds) + cache[key] = result + return result + + else: + + def wrapper(*args, **kwds): + # Size limited caching that tracks accesses by recency + nonlocal root, hits, misses, full + key = make_key(args, kwds, typed) + with lock: + link = cache_get(key) + if link is not None: + # Move the link to the front of the circular queue + link_prev, link_next, _key, result = link + link_prev[NEXT] = link_next + link_next[PREV] = link_prev + last = root[PREV] + last[NEXT] = root[PREV] = link + link[PREV] = last + link[NEXT] = root + hits += 1 + return result + misses += 1 + result = user_function(*args, **kwds) + with lock: + if key in cache: + # Getting here means that this same key was added to the + # cache while the lock was released. Since the link + # update is already done, we need only return the + # computed result and update the count of misses. + pass + elif full: + # Use the old root to store the new key and result. + oldroot = root + oldroot[KEY] = key + oldroot[RESULT] = result + # Empty the oldest link and make it the new root. + # Keep a reference to the old key and old result to + # prevent their ref counts from going to zero during the + # update. That will prevent potentially arbitrary object + # clean-up code (i.e. __del__) from running while we're + # still adjusting the links. + root = oldroot[NEXT] + oldkey = root[KEY] + oldresult = root[RESULT] + root[KEY] = root[RESULT] = None + # Now update the cache dictionary. + del cache[oldkey] + # Save the potentially reentrant cache[key] assignment + # for last, after the root and links have been put in + # a consistent state. + cache[key] = oldroot + else: + # Put result in a new link at the front of the queue. + last = root[PREV] + link = [last, root, key, result] + last[NEXT] = root[PREV] = cache[key] = link + # Use the cache_len bound method instead of the len() function + # which could potentially be wrapped in an lru_cache itself. + full = (cache_len() >= maxsize) + return result + + def cache_info(): + """Report cache statistics""" + with lock: + return _CacheInfo(hits, misses, maxsize, cache_len()) + + def cache_clear(): + """Clear the cache and cache statistics""" + nonlocal hits, misses, full + with lock: + cache.clear() + root[:] = [root, root, None, None] + hits = misses = 0 + full = False + + wrapper.cache_info = cache_info + wrapper.cache_clear = cache_clear + return wrapper + +try: + from _functools import _lru_cache_wrapper +except ImportError: + pass + + +################################################################################ +### singledispatch() - single-dispatch generic function decorator +################################################################################ + +def _c3_merge(sequences): + """Merges MROs in *sequences* to a single MRO using the C3 algorithm. + + Adapted from http://www.python.org/download/releases/2.3/mro/. + + """ + result = [] + while True: + sequences = [s for s in sequences if s] # purge empty sequences + if not sequences: + return result + for s1 in sequences: # find merge candidates among seq heads + candidate = s1[0] + for s2 in sequences: + if candidate in s2[1:]: + candidate = None + break # reject the current head, it appears later + else: + break + if candidate is None: + raise RuntimeError("Inconsistent hierarchy") + result.append(candidate) + # remove the chosen candidate + for seq in sequences: + if seq[0] == candidate: + del seq[0] + +def _c3_mro(cls, abcs=None): + """Computes the method resolution order using extended C3 linearization. + + If no *abcs* are given, the algorithm works exactly like the built-in C3 + linearization used for method resolution. + + If given, *abcs* is a list of abstract base classes that should be inserted + into the resulting MRO. Unrelated ABCs are ignored and don't end up in the + result. The algorithm inserts ABCs where their functionality is introduced, + i.e. issubclass(cls, abc) returns True for the class itself but returns + False for all its direct base classes. Implicit ABCs for a given class + (either registered or inferred from the presence of a special method like + __len__) are inserted directly after the last ABC explicitly listed in the + MRO of said class. If two implicit ABCs end up next to each other in the + resulting MRO, their ordering depends on the order of types in *abcs*. + + """ + for i, base in enumerate(reversed(cls.__bases__)): + if hasattr(base, '__abstractmethods__'): + boundary = len(cls.__bases__) - i + break # Bases up to the last explicit ABC are considered first. + else: + boundary = 0 + abcs = list(abcs) if abcs else [] + explicit_bases = list(cls.__bases__[:boundary]) + abstract_bases = [] + other_bases = list(cls.__bases__[boundary:]) + for base in abcs: + if issubclass(cls, base) and not any( + issubclass(b, base) for b in cls.__bases__ + ): + # If *cls* is the class that introduces behaviour described by + # an ABC *base*, insert said ABC to its MRO. + abstract_bases.append(base) + for base in abstract_bases: + abcs.remove(base) + explicit_c3_mros = [_c3_mro(base, abcs=abcs) for base in explicit_bases] + abstract_c3_mros = [_c3_mro(base, abcs=abcs) for base in abstract_bases] + other_c3_mros = [_c3_mro(base, abcs=abcs) for base in other_bases] + return _c3_merge( + [[cls]] + + explicit_c3_mros + abstract_c3_mros + other_c3_mros + + [explicit_bases] + [abstract_bases] + [other_bases] + ) + +def _compose_mro(cls, types): + """Calculates the method resolution order for a given class *cls*. + + Includes relevant abstract base classes (with their respective bases) from + the *types* iterable. Uses a modified C3 linearization algorithm. + + """ + bases = set(cls.__mro__) + # Remove entries which are already present in the __mro__ or unrelated. + def is_related(typ): + return (typ not in bases and hasattr(typ, '__mro__') + and issubclass(cls, typ)) + types = [n for n in types if is_related(n)] + # Remove entries which are strict bases of other entries (they will end up + # in the MRO anyway. + def is_strict_base(typ): + for other in types: + if typ != other and typ in other.__mro__: + return True + return False + types = [n for n in types if not is_strict_base(n)] + # Subclasses of the ABCs in *types* which are also implemented by + # *cls* can be used to stabilize ABC ordering. + type_set = set(types) + mro = [] + for typ in types: + found = [] + for sub in typ.__subclasses__(): + if sub not in bases and issubclass(cls, sub): + found.append([s for s in sub.__mro__ if s in type_set]) + if not found: + mro.append(typ) + continue + # Favor subclasses with the biggest number of useful bases + found.sort(key=len, reverse=True) + for sub in found: + for subcls in sub: + if subcls not in mro: + mro.append(subcls) + return _c3_mro(cls, abcs=mro) + +def _find_impl(cls, registry): + """Returns the best matching implementation from *registry* for type *cls*. + + Where there is no registered implementation for a specific type, its method + resolution order is used to find a more generic implementation. + + Note: if *registry* does not contain an implementation for the base + *object* type, this function may return None. + + """ + mro = _compose_mro(cls, registry.keys()) + match = None + for t in mro: + if match is not None: + # If *match* is an implicit ABC but there is another unrelated, + # equally matching implicit ABC, refuse the temptation to guess. + if (t in registry and t not in cls.__mro__ + and match not in cls.__mro__ + and not issubclass(match, t)): + raise RuntimeError("Ambiguous dispatch: {} or {}".format( + match, t)) + break + if t in registry: + match = t + return registry.get(match) + +def singledispatch(func): + """Single-dispatch generic function decorator. + + Transforms a function into a generic function, which can have different + behaviours depending upon the type of its first argument. The decorated + function acts as the default implementation, and additional + implementations can be registered using the register() attribute of the + generic function. + """ + # There are many programs that use functools without singledispatch, so we + # trade-off making singledispatch marginally slower for the benefit of + # making start-up of such applications slightly faster. + import types, weakref + + registry = {} + dispatch_cache = weakref.WeakKeyDictionary() + cache_token = None + + def dispatch(cls): + """generic_func.dispatch(cls) -> + + Runs the dispatch algorithm to return the best available implementation + for the given *cls* registered on *generic_func*. + + """ + nonlocal cache_token + if cache_token is not None: + current_token = get_cache_token() + if cache_token != current_token: + dispatch_cache.clear() + cache_token = current_token + try: + impl = dispatch_cache[cls] + except KeyError: + try: + impl = registry[cls] + except KeyError: + impl = _find_impl(cls, registry) + dispatch_cache[cls] = impl + return impl + + def register(cls, func=None): + """generic_func.register(cls, func) -> func + + Registers a new implementation for the given *cls* on a *generic_func*. + + """ + nonlocal cache_token + if func is None: + if isinstance(cls, type): + return lambda f: register(cls, f) + ann = getattr(cls, '__annotations__', {}) + if not ann: + raise TypeError( + f"Invalid first argument to `register()`: {cls!r}. " + f"Use either `@register(some_class)` or plain `@register` " + f"on an annotated function." + ) + func = cls + + # only import typing if annotation parsing is necessary + from typing import get_type_hints + argname, cls = next(iter(get_type_hints(func).items())) + assert isinstance(cls, type), ( + f"Invalid annotation for {argname!r}. {cls!r} is not a class." + ) + registry[cls] = func + if cache_token is None and hasattr(cls, '__abstractmethods__'): + cache_token = get_cache_token() + dispatch_cache.clear() + return func + + def wrapper(*args, **kw): + if not args: + raise TypeError(f'{funcname} requires at least ' + '1 positional argument') + + return dispatch(args[0].__class__)(*args, **kw) + + funcname = getattr(func, '__name__', 'singledispatch function') + registry[object] = func + wrapper.register = register + wrapper.dispatch = dispatch + wrapper.registry = types.MappingProxyType(registry) + wrapper._clear_cache = dispatch_cache.clear + update_wrapper(wrapper, func) + return wrapper diff --git a/my_env/Lib/genericpath.py b/my_env/Lib/genericpath.py new file mode 100644 index 000000000..303b3b349 --- /dev/null +++ b/my_env/Lib/genericpath.py @@ -0,0 +1,151 @@ +""" +Path operations common to more than one OS +Do not use directly. The OS specific modules import the appropriate +functions from this module themselves. +""" +import os +import stat + +__all__ = ['commonprefix', 'exists', 'getatime', 'getctime', 'getmtime', + 'getsize', 'isdir', 'isfile', 'samefile', 'sameopenfile', + 'samestat'] + + +# Does a path exist? +# This is false for dangling symbolic links on systems that support them. +def exists(path): + """Test whether a path exists. Returns False for broken symbolic links""" + try: + os.stat(path) + except OSError: + return False + return True + + +# This follows symbolic links, so both islink() and isdir() can be true +# for the same path on systems that support symlinks +def isfile(path): + """Test whether a path is a regular file""" + try: + st = os.stat(path) + except OSError: + return False + return stat.S_ISREG(st.st_mode) + + +# Is a path a directory? +# This follows symbolic links, so both islink() and isdir() +# can be true for the same path on systems that support symlinks +def isdir(s): + """Return true if the pathname refers to an existing directory.""" + try: + st = os.stat(s) + except OSError: + return False + return stat.S_ISDIR(st.st_mode) + + +def getsize(filename): + """Return the size of a file, reported by os.stat().""" + return os.stat(filename).st_size + + +def getmtime(filename): + """Return the last modification time of a file, reported by os.stat().""" + return os.stat(filename).st_mtime + + +def getatime(filename): + """Return the last access time of a file, reported by os.stat().""" + return os.stat(filename).st_atime + + +def getctime(filename): + """Return the metadata change time of a file, reported by os.stat().""" + return os.stat(filename).st_ctime + + +# Return the longest prefix of all list elements. +def commonprefix(m): + "Given a list of pathnames, returns the longest common leading component" + if not m: return '' + # Some people pass in a list of pathname parts to operate in an OS-agnostic + # fashion; don't try to translate in that case as that's an abuse of the + # API and they are already doing what they need to be OS-agnostic and so + # they most likely won't be using an os.PathLike object in the sublists. + if not isinstance(m[0], (list, tuple)): + m = tuple(map(os.fspath, m)) + s1 = min(m) + s2 = max(m) + for i, c in enumerate(s1): + if c != s2[i]: + return s1[:i] + return s1 + +# Are two stat buffers (obtained from stat, fstat or lstat) +# describing the same file? +def samestat(s1, s2): + """Test whether two stat buffers reference the same file""" + return (s1.st_ino == s2.st_ino and + s1.st_dev == s2.st_dev) + + +# Are two filenames really pointing to the same file? +def samefile(f1, f2): + """Test whether two pathnames reference the same actual file""" + s1 = os.stat(f1) + s2 = os.stat(f2) + return samestat(s1, s2) + + +# Are two open files really referencing the same file? +# (Not necessarily the same file descriptor!) +def sameopenfile(fp1, fp2): + """Test whether two open file objects reference the same file""" + s1 = os.fstat(fp1) + s2 = os.fstat(fp2) + return samestat(s1, s2) + + +# Split a path in root and extension. +# The extension is everything starting at the last dot in the last +# pathname component; the root is everything before that. +# It is always true that root + ext == p. + +# Generic implementation of splitext, to be parametrized with +# the separators +def _splitext(p, sep, altsep, extsep): + """Split the extension from a pathname. + + Extension is everything from the last dot to the end, ignoring + leading dots. Returns "(root, ext)"; ext may be empty.""" + # NOTE: This code must work for text and bytes strings. + + sepIndex = p.rfind(sep) + if altsep: + altsepIndex = p.rfind(altsep) + sepIndex = max(sepIndex, altsepIndex) + + dotIndex = p.rfind(extsep) + if dotIndex > sepIndex: + # skip all leading dots + filenameIndex = sepIndex + 1 + while filenameIndex < dotIndex: + if p[filenameIndex:filenameIndex+1] != extsep: + return p[:dotIndex], p[dotIndex:] + filenameIndex += 1 + + return p, p[:0] + +def _check_arg_types(funcname, *args): + hasstr = hasbytes = False + for s in args: + if isinstance(s, str): + hasstr = True + elif isinstance(s, bytes): + hasbytes = True + else: + raise TypeError('%s() argument must be str or bytes, not %r' % + (funcname, s.__class__.__name__)) from None + if hasstr and hasbytes: + raise TypeError("Can't mix strings and bytes in path components") from None diff --git a/my_env/Lib/hashlib.py b/my_env/Lib/hashlib.py new file mode 100644 index 000000000..4e783a86a --- /dev/null +++ b/my_env/Lib/hashlib.py @@ -0,0 +1,252 @@ +#. Copyright (C) 2005-2010 Gregory P. Smith (greg@krypto.org) +# Licensed to PSF under a Contributor Agreement. +# + +__doc__ = """hashlib module - A common interface to many hash functions. + +new(name, data=b'', **kwargs) - returns a new hash object implementing the + given hash function; initializing the hash + using the given binary data. + +Named constructor functions are also available, these are faster +than using new(name): + +md5(), sha1(), sha224(), sha256(), sha384(), sha512(), blake2b(), blake2s(), +sha3_224, sha3_256, sha3_384, sha3_512, shake_128, and shake_256. + +More algorithms may be available on your platform but the above are guaranteed +to exist. See the algorithms_guaranteed and algorithms_available attributes +to find out what algorithm names can be passed to new(). + +NOTE: If you want the adler32 or crc32 hash functions they are available in +the zlib module. + +Choose your hash function wisely. Some have known collision weaknesses. +sha384 and sha512 will be slow on 32 bit platforms. + +Hash objects have these methods: + - update(data): Update the hash object with the bytes in data. Repeated calls + are equivalent to a single call with the concatenation of all + the arguments. + - digest(): Return the digest of the bytes passed to the update() method + so far as a bytes object. + - hexdigest(): Like digest() except the digest is returned as a string + of double length, containing only hexadecimal digits. + - copy(): Return a copy (clone) of the hash object. This can be used to + efficiently compute the digests of datas that share a common + initial substring. + +For example, to obtain the digest of the byte string 'Nobody inspects the +spammish repetition': + + >>> import hashlib + >>> m = hashlib.md5() + >>> m.update(b"Nobody inspects") + >>> m.update(b" the spammish repetition") + >>> m.digest() + b'\\xbbd\\x9c\\x83\\xdd\\x1e\\xa5\\xc9\\xd9\\xde\\xc9\\xa1\\x8d\\xf0\\xff\\xe9' + +More condensed: + + >>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest() + 'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2' + +""" + +# This tuple and __get_builtin_constructor() must be modified if a new +# always available algorithm is added. +__always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', + 'blake2b', 'blake2s', + 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', + 'shake_128', 'shake_256') + + +algorithms_guaranteed = set(__always_supported) +algorithms_available = set(__always_supported) + +__all__ = __always_supported + ('new', 'algorithms_guaranteed', + 'algorithms_available', 'pbkdf2_hmac') + + +__builtin_constructor_cache = {} + +def __get_builtin_constructor(name): + cache = __builtin_constructor_cache + constructor = cache.get(name) + if constructor is not None: + return constructor + try: + if name in ('SHA1', 'sha1'): + import _sha1 + cache['SHA1'] = cache['sha1'] = _sha1.sha1 + elif name in ('MD5', 'md5'): + import _md5 + cache['MD5'] = cache['md5'] = _md5.md5 + elif name in ('SHA256', 'sha256', 'SHA224', 'sha224'): + import _sha256 + cache['SHA224'] = cache['sha224'] = _sha256.sha224 + cache['SHA256'] = cache['sha256'] = _sha256.sha256 + elif name in ('SHA512', 'sha512', 'SHA384', 'sha384'): + import _sha512 + cache['SHA384'] = cache['sha384'] = _sha512.sha384 + cache['SHA512'] = cache['sha512'] = _sha512.sha512 + elif name in ('blake2b', 'blake2s'): + import _blake2 + cache['blake2b'] = _blake2.blake2b + cache['blake2s'] = _blake2.blake2s + elif name in {'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', + 'shake_128', 'shake_256'}: + import _sha3 + cache['sha3_224'] = _sha3.sha3_224 + cache['sha3_256'] = _sha3.sha3_256 + cache['sha3_384'] = _sha3.sha3_384 + cache['sha3_512'] = _sha3.sha3_512 + cache['shake_128'] = _sha3.shake_128 + cache['shake_256'] = _sha3.shake_256 + except ImportError: + pass # no extension module, this hash is unsupported. + + constructor = cache.get(name) + if constructor is not None: + return constructor + + raise ValueError('unsupported hash type ' + name) + + +def __get_openssl_constructor(name): + if name in {'blake2b', 'blake2s'}: + # Prefer our blake2 implementation. + return __get_builtin_constructor(name) + try: + f = getattr(_hashlib, 'openssl_' + name) + # Allow the C module to raise ValueError. The function will be + # defined but the hash not actually available thanks to OpenSSL. + f() + # Use the C function directly (very fast) + return f + except (AttributeError, ValueError): + return __get_builtin_constructor(name) + + +def __py_new(name, data=b'', **kwargs): + """new(name, data=b'', **kwargs) - Return a new hashing object using the + named algorithm; optionally initialized with data (which must be + a bytes-like object). + """ + return __get_builtin_constructor(name)(data, **kwargs) + + +def __hash_new(name, data=b'', **kwargs): + """new(name, data=b'') - Return a new hashing object using the named algorithm; + optionally initialized with data (which must be a bytes-like object). + """ + if name in {'blake2b', 'blake2s'}: + # Prefer our blake2 implementation. + # OpenSSL 1.1.0 comes with a limited implementation of blake2b/s. + # It does neither support keyed blake2 nor advanced features like + # salt, personal, tree hashing or SSE. + return __get_builtin_constructor(name)(data, **kwargs) + try: + return _hashlib.new(name, data) + except ValueError: + # If the _hashlib module (OpenSSL) doesn't support the named + # hash, try using our builtin implementations. + # This allows for SHA224/256 and SHA384/512 support even though + # the OpenSSL library prior to 0.9.8 doesn't provide them. + return __get_builtin_constructor(name)(data) + + +try: + import _hashlib + new = __hash_new + __get_hash = __get_openssl_constructor + algorithms_available = algorithms_available.union( + _hashlib.openssl_md_meth_names) +except ImportError: + new = __py_new + __get_hash = __get_builtin_constructor + +try: + # OpenSSL's PKCS5_PBKDF2_HMAC requires OpenSSL 1.0+ with HMAC and SHA + from _hashlib import pbkdf2_hmac +except ImportError: + _trans_5C = bytes((x ^ 0x5C) for x in range(256)) + _trans_36 = bytes((x ^ 0x36) for x in range(256)) + + def pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None): + """Password based key derivation function 2 (PKCS #5 v2.0) + + This Python implementations based on the hmac module about as fast + as OpenSSL's PKCS5_PBKDF2_HMAC for short passwords and much faster + for long passwords. + """ + if not isinstance(hash_name, str): + raise TypeError(hash_name) + + if not isinstance(password, (bytes, bytearray)): + password = bytes(memoryview(password)) + if not isinstance(salt, (bytes, bytearray)): + salt = bytes(memoryview(salt)) + + # Fast inline HMAC implementation + inner = new(hash_name) + outer = new(hash_name) + blocksize = getattr(inner, 'block_size', 64) + if len(password) > blocksize: + password = new(hash_name, password).digest() + password = password + b'\x00' * (blocksize - len(password)) + inner.update(password.translate(_trans_36)) + outer.update(password.translate(_trans_5C)) + + def prf(msg, inner=inner, outer=outer): + # PBKDF2_HMAC uses the password as key. We can re-use the same + # digest objects and just update copies to skip initialization. + icpy = inner.copy() + ocpy = outer.copy() + icpy.update(msg) + ocpy.update(icpy.digest()) + return ocpy.digest() + + if iterations < 1: + raise ValueError(iterations) + if dklen is None: + dklen = outer.digest_size + if dklen < 1: + raise ValueError(dklen) + + dkey = b'' + loop = 1 + from_bytes = int.from_bytes + while len(dkey) < dklen: + prev = prf(salt + loop.to_bytes(4, 'big')) + # endianness doesn't matter here as long to / from use the same + rkey = int.from_bytes(prev, 'big') + for i in range(iterations - 1): + prev = prf(prev) + # rkey = rkey ^ prev + rkey ^= from_bytes(prev, 'big') + loop += 1 + dkey += rkey.to_bytes(inner.digest_size, 'big') + + return dkey[:dklen] + +try: + # OpenSSL's scrypt requires OpenSSL 1.1+ + from _hashlib import scrypt +except ImportError: + pass + + +for __func_name in __always_supported: + # try them all, some may not work due to the OpenSSL + # version not supporting that algorithm. + try: + globals()[__func_name] = __get_hash(__func_name) + except ValueError: + import logging + logging.exception('code for hash %s was not found.', __func_name) + + +# Cleanup locals() +del __always_supported, __func_name, __get_hash +del __py_new, __hash_new, __get_openssl_constructor diff --git a/my_env/Lib/heapq.py b/my_env/Lib/heapq.py new file mode 100644 index 000000000..b31f4186c --- /dev/null +++ b/my_env/Lib/heapq.py @@ -0,0 +1,607 @@ +"""Heap queue algorithm (a.k.a. priority queue). + +Heaps are arrays for which a[k] <= a[2*k+1] and a[k] <= a[2*k+2] for +all k, counting elements from 0. For the sake of comparison, +non-existing elements are considered to be infinite. The interesting +property of a heap is that a[0] is always its smallest element. + +Usage: + +heap = [] # creates an empty heap +heappush(heap, item) # pushes a new item on the heap +item = heappop(heap) # pops the smallest item from the heap +item = heap[0] # smallest item on the heap without popping it +heapify(x) # transforms list into a heap, in-place, in linear time +item = heapreplace(heap, item) # pops and returns smallest item, and adds + # new item; the heap size is unchanged + +Our API differs from textbook heap algorithms as follows: + +- We use 0-based indexing. This makes the relationship between the + index for a node and the indexes for its children slightly less + obvious, but is more suitable since Python uses 0-based indexing. + +- Our heappop() method returns the smallest item, not the largest. + +These two make it possible to view the heap as a regular Python list +without surprises: heap[0] is the smallest item, and heap.sort() +maintains the heap invariant! +""" + +# Original code by Kevin O'Connor, augmented by Tim Peters and Raymond Hettinger + +__about__ = """Heap queues + +[explanation by François Pinard] + +Heaps are arrays for which a[k] <= a[2*k+1] and a[k] <= a[2*k+2] for +all k, counting elements from 0. For the sake of comparison, +non-existing elements are considered to be infinite. The interesting +property of a heap is that a[0] is always its smallest element. + +The strange invariant above is meant to be an efficient memory +representation for a tournament. The numbers below are `k', not a[k]: + + 0 + + 1 2 + + 3 4 5 6 + + 7 8 9 10 11 12 13 14 + + 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 + + +In the tree above, each cell `k' is topping `2*k+1' and `2*k+2'. In +a usual binary tournament we see in sports, each cell is the winner +over the two cells it tops, and we can trace the winner down the tree +to see all opponents s/he had. However, in many computer applications +of such tournaments, we do not need to trace the history of a winner. +To be more memory efficient, when a winner is promoted, we try to +replace it by something else at a lower level, and the rule becomes +that a cell and the two cells it tops contain three different items, +but the top cell "wins" over the two topped cells. + +If this heap invariant is protected at all time, index 0 is clearly +the overall winner. The simplest algorithmic way to remove it and +find the "next" winner is to move some loser (let's say cell 30 in the +diagram above) into the 0 position, and then percolate this new 0 down +the tree, exchanging values, until the invariant is re-established. +This is clearly logarithmic on the total number of items in the tree. +By iterating over all items, you get an O(n ln n) sort. + +A nice feature of this sort is that you can efficiently insert new +items while the sort is going on, provided that the inserted items are +not "better" than the last 0'th element you extracted. This is +especially useful in simulation contexts, where the tree holds all +incoming events, and the "win" condition means the smallest scheduled +time. When an event schedule other events for execution, they are +scheduled into the future, so they can easily go into the heap. So, a +heap is a good structure for implementing schedulers (this is what I +used for my MIDI sequencer :-). + +Various structures for implementing schedulers have been extensively +studied, and heaps are good for this, as they are reasonably speedy, +the speed is almost constant, and the worst case is not much different +than the average case. However, there are other representations which +are more efficient overall, yet the worst cases might be terrible. + +Heaps are also very useful in big disk sorts. You most probably all +know that a big sort implies producing "runs" (which are pre-sorted +sequences, which size is usually related to the amount of CPU memory), +followed by a merging passes for these runs, which merging is often +very cleverly organised[1]. It is very important that the initial +sort produces the longest runs possible. Tournaments are a good way +to that. If, using all the memory available to hold a tournament, you +replace and percolate items that happen to fit the current run, you'll +produce runs which are twice the size of the memory for random input, +and much better for input fuzzily ordered. + +Moreover, if you output the 0'th item on disk and get an input which +may not fit in the current tournament (because the value "wins" over +the last output value), it cannot fit in the heap, so the size of the +heap decreases. The freed memory could be cleverly reused immediately +for progressively building a second heap, which grows at exactly the +same rate the first heap is melting. When the first heap completely +vanishes, you switch heaps and start a new run. Clever and quite +effective! + +In a word, heaps are useful memory structures to know. I use them in +a few applications, and I think it is good to keep a `heap' module +around. :-) + +-------------------- +[1] The disk balancing algorithms which are current, nowadays, are +more annoying than clever, and this is a consequence of the seeking +capabilities of the disks. On devices which cannot seek, like big +tape drives, the story was quite different, and one had to be very +clever to ensure (far in advance) that each tape movement will be the +most effective possible (that is, will best participate at +"progressing" the merge). Some tapes were even able to read +backwards, and this was also used to avoid the rewinding time. +Believe me, real good tape sorts were quite spectacular to watch! +From all times, sorting has always been a Great Art! :-) +""" + +__all__ = ['heappush', 'heappop', 'heapify', 'heapreplace', 'merge', + 'nlargest', 'nsmallest', 'heappushpop'] + +def heappush(heap, item): + """Push item onto heap, maintaining the heap invariant.""" + heap.append(item) + _siftdown(heap, 0, len(heap)-1) + +def heappop(heap): + """Pop the smallest item off the heap, maintaining the heap invariant.""" + lastelt = heap.pop() # raises appropriate IndexError if heap is empty + if heap: + returnitem = heap[0] + heap[0] = lastelt + _siftup(heap, 0) + return returnitem + return lastelt + +def heapreplace(heap, item): + """Pop and return the current smallest value, and add the new item. + + This is more efficient than heappop() followed by heappush(), and can be + more appropriate when using a fixed-size heap. Note that the value + returned may be larger than item! That constrains reasonable uses of + this routine unless written as part of a conditional replacement: + + if item > heap[0]: + item = heapreplace(heap, item) + """ + returnitem = heap[0] # raises appropriate IndexError if heap is empty + heap[0] = item + _siftup(heap, 0) + return returnitem + +def heappushpop(heap, item): + """Fast version of a heappush followed by a heappop.""" + if heap and heap[0] < item: + item, heap[0] = heap[0], item + _siftup(heap, 0) + return item + +def heapify(x): + """Transform list into a heap, in-place, in O(len(x)) time.""" + n = len(x) + # Transform bottom-up. The largest index there's any point to looking at + # is the largest with a child index in-range, so must have 2*i + 1 < n, + # or i < (n-1)/2. If n is even = 2*j, this is (2*j-1)/2 = j-1/2 so + # j-1 is the largest, which is n//2 - 1. If n is odd = 2*j+1, this is + # (2*j+1-1)/2 = j so j-1 is the largest, and that's again n//2-1. + for i in reversed(range(n//2)): + _siftup(x, i) + +def _heappop_max(heap): + """Maxheap version of a heappop.""" + lastelt = heap.pop() # raises appropriate IndexError if heap is empty + if heap: + returnitem = heap[0] + heap[0] = lastelt + _siftup_max(heap, 0) + return returnitem + return lastelt + +def _heapreplace_max(heap, item): + """Maxheap version of a heappop followed by a heappush.""" + returnitem = heap[0] # raises appropriate IndexError if heap is empty + heap[0] = item + _siftup_max(heap, 0) + return returnitem + +def _heapify_max(x): + """Transform list into a maxheap, in-place, in O(len(x)) time.""" + n = len(x) + for i in reversed(range(n//2)): + _siftup_max(x, i) + +# 'heap' is a heap at all indices >= startpos, except possibly for pos. pos +# is the index of a leaf with a possibly out-of-order value. Restore the +# heap invariant. +def _siftdown(heap, startpos, pos): + newitem = heap[pos] + # Follow the path to the root, moving parents down until finding a place + # newitem fits. + while pos > startpos: + parentpos = (pos - 1) >> 1 + parent = heap[parentpos] + if newitem < parent: + heap[pos] = parent + pos = parentpos + continue + break + heap[pos] = newitem + +# The child indices of heap index pos are already heaps, and we want to make +# a heap at index pos too. We do this by bubbling the smaller child of +# pos up (and so on with that child's children, etc) until hitting a leaf, +# then using _siftdown to move the oddball originally at index pos into place. +# +# We *could* break out of the loop as soon as we find a pos where newitem <= +# both its children, but turns out that's not a good idea, and despite that +# many books write the algorithm that way. During a heap pop, the last array +# element is sifted in, and that tends to be large, so that comparing it +# against values starting from the root usually doesn't pay (= usually doesn't +# get us out of the loop early). See Knuth, Volume 3, where this is +# explained and quantified in an exercise. +# +# Cutting the # of comparisons is important, since these routines have no +# way to extract "the priority" from an array element, so that intelligence +# is likely to be hiding in custom comparison methods, or in array elements +# storing (priority, record) tuples. Comparisons are thus potentially +# expensive. +# +# On random arrays of length 1000, making this change cut the number of +# comparisons made by heapify() a little, and those made by exhaustive +# heappop() a lot, in accord with theory. Here are typical results from 3 +# runs (3 just to demonstrate how small the variance is): +# +# Compares needed by heapify Compares needed by 1000 heappops +# -------------------------- -------------------------------- +# 1837 cut to 1663 14996 cut to 8680 +# 1855 cut to 1659 14966 cut to 8678 +# 1847 cut to 1660 15024 cut to 8703 +# +# Building the heap by using heappush() 1000 times instead required +# 2198, 2148, and 2219 compares: heapify() is more efficient, when +# you can use it. +# +# The total compares needed by list.sort() on the same lists were 8627, +# 8627, and 8632 (this should be compared to the sum of heapify() and +# heappop() compares): list.sort() is (unsurprisingly!) more efficient +# for sorting. + +def _siftup(heap, pos): + endpos = len(heap) + startpos = pos + newitem = heap[pos] + # Bubble up the smaller child until hitting a leaf. + childpos = 2*pos + 1 # leftmost child position + while childpos < endpos: + # Set childpos to index of smaller child. + rightpos = childpos + 1 + if rightpos < endpos and not heap[childpos] < heap[rightpos]: + childpos = rightpos + # Move the smaller child up. + heap[pos] = heap[childpos] + pos = childpos + childpos = 2*pos + 1 + # The leaf at pos is empty now. Put newitem there, and bubble it up + # to its final resting place (by sifting its parents down). + heap[pos] = newitem + _siftdown(heap, startpos, pos) + +def _siftdown_max(heap, startpos, pos): + 'Maxheap variant of _siftdown' + newitem = heap[pos] + # Follow the path to the root, moving parents down until finding a place + # newitem fits. + while pos > startpos: + parentpos = (pos - 1) >> 1 + parent = heap[parentpos] + if parent < newitem: + heap[pos] = parent + pos = parentpos + continue + break + heap[pos] = newitem + +def _siftup_max(heap, pos): + 'Maxheap variant of _siftup' + endpos = len(heap) + startpos = pos + newitem = heap[pos] + # Bubble up the larger child until hitting a leaf. + childpos = 2*pos + 1 # leftmost child position + while childpos < endpos: + # Set childpos to index of larger child. + rightpos = childpos + 1 + if rightpos < endpos and not heap[rightpos] < heap[childpos]: + childpos = rightpos + # Move the larger child up. + heap[pos] = heap[childpos] + pos = childpos + childpos = 2*pos + 1 + # The leaf at pos is empty now. Put newitem there, and bubble it up + # to its final resting place (by sifting its parents down). + heap[pos] = newitem + _siftdown_max(heap, startpos, pos) + +def merge(*iterables, key=None, reverse=False): + '''Merge multiple sorted inputs into a single sorted output. + + Similar to sorted(itertools.chain(*iterables)) but returns a generator, + does not pull the data into memory all at once, and assumes that each of + the input streams is already sorted (smallest to largest). + + >>> list(merge([1,3,5,7], [0,2,4,8], [5,10,15,20], [], [25])) + [0, 1, 2, 3, 4, 5, 5, 7, 8, 10, 15, 20, 25] + + If *key* is not None, applies a key function to each element to determine + its sort order. + + >>> list(merge(['dog', 'horse'], ['cat', 'fish', 'kangaroo'], key=len)) + ['dog', 'cat', 'fish', 'horse', 'kangaroo'] + + ''' + + h = [] + h_append = h.append + + if reverse: + _heapify = _heapify_max + _heappop = _heappop_max + _heapreplace = _heapreplace_max + direction = -1 + else: + _heapify = heapify + _heappop = heappop + _heapreplace = heapreplace + direction = 1 + + if key is None: + for order, it in enumerate(map(iter, iterables)): + try: + next = it.__next__ + h_append([next(), order * direction, next]) + except StopIteration: + pass + _heapify(h) + while len(h) > 1: + try: + while True: + value, order, next = s = h[0] + yield value + s[0] = next() # raises StopIteration when exhausted + _heapreplace(h, s) # restore heap condition + except StopIteration: + _heappop(h) # remove empty iterator + if h: + # fast case when only a single iterator remains + value, order, next = h[0] + yield value + yield from next.__self__ + return + + for order, it in enumerate(map(iter, iterables)): + try: + next = it.__next__ + value = next() + h_append([key(value), order * direction, value, next]) + except StopIteration: + pass + _heapify(h) + while len(h) > 1: + try: + while True: + key_value, order, value, next = s = h[0] + yield value + value = next() + s[0] = key(value) + s[2] = value + _heapreplace(h, s) + except StopIteration: + _heappop(h) + if h: + key_value, order, value, next = h[0] + yield value + yield from next.__self__ + + +# Algorithm notes for nlargest() and nsmallest() +# ============================================== +# +# Make a single pass over the data while keeping the k most extreme values +# in a heap. Memory consumption is limited to keeping k values in a list. +# +# Measured performance for random inputs: +# +# number of comparisons +# n inputs k-extreme values (average of 5 trials) % more than min() +# ------------- ---------------- --------------------- ----------------- +# 1,000 100 3,317 231.7% +# 10,000 100 14,046 40.5% +# 100,000 100 105,749 5.7% +# 1,000,000 100 1,007,751 0.8% +# 10,000,000 100 10,009,401 0.1% +# +# Theoretical number of comparisons for k smallest of n random inputs: +# +# Step Comparisons Action +# ---- -------------------------- --------------------------- +# 1 1.66 * k heapify the first k-inputs +# 2 n - k compare remaining elements to top of heap +# 3 k * (1 + lg2(k)) * ln(n/k) replace the topmost value on the heap +# 4 k * lg2(k) - (k/2) final sort of the k most extreme values +# +# Combining and simplifying for a rough estimate gives: +# +# comparisons = n + k * (log(k, 2) * log(n/k) + log(k, 2) + log(n/k)) +# +# Computing the number of comparisons for step 3: +# ----------------------------------------------- +# * For the i-th new value from the iterable, the probability of being in the +# k most extreme values is k/i. For example, the probability of the 101st +# value seen being in the 100 most extreme values is 100/101. +# * If the value is a new extreme value, the cost of inserting it into the +# heap is 1 + log(k, 2). +# * The probability times the cost gives: +# (k/i) * (1 + log(k, 2)) +# * Summing across the remaining n-k elements gives: +# sum((k/i) * (1 + log(k, 2)) for i in range(k+1, n+1)) +# * This reduces to: +# (H(n) - H(k)) * k * (1 + log(k, 2)) +# * Where H(n) is the n-th harmonic number estimated by: +# gamma = 0.5772156649 +# H(n) = log(n, e) + gamma + 1 / (2 * n) +# http://en.wikipedia.org/wiki/Harmonic_series_(mathematics)#Rate_of_divergence +# * Substituting the H(n) formula: +# comparisons = k * (1 + log(k, 2)) * (log(n/k, e) + (1/n - 1/k) / 2) +# +# Worst-case for step 3: +# ---------------------- +# In the worst case, the input data is reversed sorted so that every new element +# must be inserted in the heap: +# +# comparisons = 1.66 * k + log(k, 2) * (n - k) +# +# Alternative Algorithms +# ---------------------- +# Other algorithms were not used because they: +# 1) Took much more auxiliary memory, +# 2) Made multiple passes over the data. +# 3) Made more comparisons in common cases (small k, large n, semi-random input). +# See the more detailed comparison of approach at: +# http://code.activestate.com/recipes/577573-compare-algorithms-for-heapqsmallest + +def nsmallest(n, iterable, key=None): + """Find the n smallest elements in a dataset. + + Equivalent to: sorted(iterable, key=key)[:n] + """ + + # Short-cut for n==1 is to use min() + if n == 1: + it = iter(iterable) + sentinel = object() + if key is None: + result = min(it, default=sentinel) + else: + result = min(it, default=sentinel, key=key) + return [] if result is sentinel else [result] + + # When n>=size, it's faster to use sorted() + try: + size = len(iterable) + except (TypeError, AttributeError): + pass + else: + if n >= size: + return sorted(iterable, key=key)[:n] + + # When key is none, use simpler decoration + if key is None: + it = iter(iterable) + # put the range(n) first so that zip() doesn't + # consume one too many elements from the iterator + result = [(elem, i) for i, elem in zip(range(n), it)] + if not result: + return result + _heapify_max(result) + top = result[0][0] + order = n + _heapreplace = _heapreplace_max + for elem in it: + if elem < top: + _heapreplace(result, (elem, order)) + top, _order = result[0] + order += 1 + result.sort() + return [elem for (elem, order) in result] + + # General case, slowest method + it = iter(iterable) + result = [(key(elem), i, elem) for i, elem in zip(range(n), it)] + if not result: + return result + _heapify_max(result) + top = result[0][0] + order = n + _heapreplace = _heapreplace_max + for elem in it: + k = key(elem) + if k < top: + _heapreplace(result, (k, order, elem)) + top, _order, _elem = result[0] + order += 1 + result.sort() + return [elem for (k, order, elem) in result] + +def nlargest(n, iterable, key=None): + """Find the n largest elements in a dataset. + + Equivalent to: sorted(iterable, key=key, reverse=True)[:n] + """ + + # Short-cut for n==1 is to use max() + if n == 1: + it = iter(iterable) + sentinel = object() + if key is None: + result = max(it, default=sentinel) + else: + result = max(it, default=sentinel, key=key) + return [] if result is sentinel else [result] + + # When n>=size, it's faster to use sorted() + try: + size = len(iterable) + except (TypeError, AttributeError): + pass + else: + if n >= size: + return sorted(iterable, key=key, reverse=True)[:n] + + # When key is none, use simpler decoration + if key is None: + it = iter(iterable) + result = [(elem, i) for i, elem in zip(range(0, -n, -1), it)] + if not result: + return result + heapify(result) + top = result[0][0] + order = -n + _heapreplace = heapreplace + for elem in it: + if top < elem: + _heapreplace(result, (elem, order)) + top, _order = result[0] + order -= 1 + result.sort(reverse=True) + return [elem for (elem, order) in result] + + # General case, slowest method + it = iter(iterable) + result = [(key(elem), i, elem) for i, elem in zip(range(0, -n, -1), it)] + if not result: + return result + heapify(result) + top = result[0][0] + order = -n + _heapreplace = heapreplace + for elem in it: + k = key(elem) + if top < k: + _heapreplace(result, (k, order, elem)) + top, _order, _elem = result[0] + order -= 1 + result.sort(reverse=True) + return [elem for (k, order, elem) in result] + +# If available, use C implementation +try: + from _heapq import * +except ImportError: + pass +try: + from _heapq import _heapreplace_max +except ImportError: + pass +try: + from _heapq import _heapify_max +except ImportError: + pass +try: + from _heapq import _heappop_max +except ImportError: + pass + + +if __name__ == "__main__": + + import doctest + print(doctest.testmod()) diff --git a/my_env/Lib/hmac.py b/my_env/Lib/hmac.py new file mode 100644 index 000000000..43b721297 --- /dev/null +++ b/my_env/Lib/hmac.py @@ -0,0 +1,188 @@ +"""HMAC (Keyed-Hashing for Message Authentication) Python module. + +Implements the HMAC algorithm as described by RFC 2104. +""" + +import warnings as _warnings +from _operator import _compare_digest as compare_digest +try: + import _hashlib as _hashopenssl +except ImportError: + _hashopenssl = None + _openssl_md_meths = None +else: + _openssl_md_meths = frozenset(_hashopenssl.openssl_md_meth_names) +import hashlib as _hashlib + +trans_5C = bytes((x ^ 0x5C) for x in range(256)) +trans_36 = bytes((x ^ 0x36) for x in range(256)) + +# The size of the digests returned by HMAC depends on the underlying +# hashing module used. Use digest_size from the instance of HMAC instead. +digest_size = None + + + +class HMAC: + """RFC 2104 HMAC class. Also complies with RFC 4231. + + This supports the API for Cryptographic Hash Functions (PEP 247). + """ + blocksize = 64 # 512-bit HMAC; can be changed in subclasses. + + def __init__(self, key, msg = None, digestmod = None): + """Create a new HMAC object. + + key: key for the keyed hash object. + msg: Initial input for the hash, if provided. + digestmod: A module supporting PEP 247. *OR* + A hashlib constructor returning a new hash object. *OR* + A hash name suitable for hashlib.new(). + Defaults to hashlib.md5. + Implicit default to hashlib.md5 is deprecated since Python + 3.4 and will be removed in Python 3.8. + + Note: key and msg must be a bytes or bytearray objects. + """ + + if not isinstance(key, (bytes, bytearray)): + raise TypeError("key: expected bytes or bytearray, but got %r" % type(key).__name__) + + if digestmod is None: + _warnings.warn("HMAC() without an explicit digestmod argument " + "is deprecated since Python 3.4, and will be removed " + "in 3.8", + DeprecationWarning, 2) + digestmod = _hashlib.md5 + + if callable(digestmod): + self.digest_cons = digestmod + elif isinstance(digestmod, str): + self.digest_cons = lambda d=b'': _hashlib.new(digestmod, d) + else: + self.digest_cons = lambda d=b'': digestmod.new(d) + + self.outer = self.digest_cons() + self.inner = self.digest_cons() + self.digest_size = self.inner.digest_size + + if hasattr(self.inner, 'block_size'): + blocksize = self.inner.block_size + if blocksize < 16: + _warnings.warn('block_size of %d seems too small; using our ' + 'default of %d.' % (blocksize, self.blocksize), + RuntimeWarning, 2) + blocksize = self.blocksize + else: + _warnings.warn('No block_size attribute on given digest object; ' + 'Assuming %d.' % (self.blocksize), + RuntimeWarning, 2) + blocksize = self.blocksize + + # self.blocksize is the default blocksize. self.block_size is + # effective block size as well as the public API attribute. + self.block_size = blocksize + + if len(key) > blocksize: + key = self.digest_cons(key).digest() + + key = key.ljust(blocksize, b'\0') + self.outer.update(key.translate(trans_5C)) + self.inner.update(key.translate(trans_36)) + if msg is not None: + self.update(msg) + + @property + def name(self): + return "hmac-" + self.inner.name + + def update(self, msg): + """Update this hashing object with the string msg. + """ + self.inner.update(msg) + + def copy(self): + """Return a separate copy of this hashing object. + + An update to this copy won't affect the original object. + """ + # Call __new__ directly to avoid the expensive __init__. + other = self.__class__.__new__(self.__class__) + other.digest_cons = self.digest_cons + other.digest_size = self.digest_size + other.inner = self.inner.copy() + other.outer = self.outer.copy() + return other + + def _current(self): + """Return a hash object for the current state. + + To be used only internally with digest() and hexdigest(). + """ + h = self.outer.copy() + h.update(self.inner.digest()) + return h + + def digest(self): + """Return the hash value of this hashing object. + + This returns a string containing 8-bit data. The object is + not altered in any way by this function; you can continue + updating the object after calling this function. + """ + h = self._current() + return h.digest() + + def hexdigest(self): + """Like digest(), but returns a string of hexadecimal digits instead. + """ + h = self._current() + return h.hexdigest() + +def new(key, msg = None, digestmod = None): + """Create a new hashing object and return it. + + key: The starting key for the hash. + msg: if available, will immediately be hashed into the object's starting + state. + + You can now feed arbitrary strings into the object using its update() + method, and can ask for the hash value at any time by calling its digest() + method. + """ + return HMAC(key, msg, digestmod) + + +def digest(key, msg, digest): + """Fast inline implementation of HMAC + + key: key for the keyed hash object. + msg: input message + digest: A hash name suitable for hashlib.new() for best performance. *OR* + A hashlib constructor returning a new hash object. *OR* + A module supporting PEP 247. + + Note: key and msg must be a bytes or bytearray objects. + """ + if (_hashopenssl is not None and + isinstance(digest, str) and digest in _openssl_md_meths): + return _hashopenssl.hmac_digest(key, msg, digest) + + if callable(digest): + digest_cons = digest + elif isinstance(digest, str): + digest_cons = lambda d=b'': _hashlib.new(digest, d) + else: + digest_cons = lambda d=b'': digest.new(d) + + inner = digest_cons() + outer = digest_cons() + blocksize = getattr(inner, 'block_size', 64) + if len(key) > blocksize: + key = digest_cons(key).digest() + key = key + b'\x00' * (blocksize - len(key)) + inner.update(key.translate(trans_36)) + outer.update(key.translate(trans_5C)) + inner.update(msg) + outer.update(inner.digest()) + return outer.digest() diff --git a/my_env/Lib/imp.py b/my_env/Lib/imp.py new file mode 100644 index 000000000..31f8c7663 --- /dev/null +++ b/my_env/Lib/imp.py @@ -0,0 +1,345 @@ +"""This module provides the components needed to build your own __import__ +function. Undocumented functions are obsolete. + +In most cases it is preferred you consider using the importlib module's +functionality over this module. + +""" +# (Probably) need to stay in _imp +from _imp import (lock_held, acquire_lock, release_lock, + get_frozen_object, is_frozen_package, + init_frozen, is_builtin, is_frozen, + _fix_co_filename) +try: + from _imp import create_dynamic +except ImportError: + # Platform doesn't support dynamic loading. + create_dynamic = None + +from importlib._bootstrap import _ERR_MSG, _exec, _load, _builtin_from_name +from importlib._bootstrap_external import SourcelessFileLoader + +from importlib import machinery +from importlib import util +import importlib +import os +import sys +import tokenize +import types +import warnings + +warnings.warn("the imp module is deprecated in favour of importlib; " + "see the module's documentation for alternative uses", + DeprecationWarning, stacklevel=2) + +# DEPRECATED +SEARCH_ERROR = 0 +PY_SOURCE = 1 +PY_COMPILED = 2 +C_EXTENSION = 3 +PY_RESOURCE = 4 +PKG_DIRECTORY = 5 +C_BUILTIN = 6 +PY_FROZEN = 7 +PY_CODERESOURCE = 8 +IMP_HOOK = 9 + + +def new_module(name): + """**DEPRECATED** + + Create a new module. + + The module is not entered into sys.modules. + + """ + return types.ModuleType(name) + + +def get_magic(): + """**DEPRECATED** + + Return the magic number for .pyc files. + """ + return util.MAGIC_NUMBER + + +def get_tag(): + """Return the magic tag for .pyc files.""" + return sys.implementation.cache_tag + + +def cache_from_source(path, debug_override=None): + """**DEPRECATED** + + Given the path to a .py file, return the path to its .pyc file. + + The .py file does not need to exist; this simply returns the path to the + .pyc file calculated as if the .py file were imported. + + If debug_override is not None, then it must be a boolean and is used in + place of sys.flags.optimize. + + If sys.implementation.cache_tag is None then NotImplementedError is raised. + + """ + with warnings.catch_warnings(): + warnings.simplefilter('ignore') + return util.cache_from_source(path, debug_override) + + +def source_from_cache(path): + """**DEPRECATED** + + Given the path to a .pyc. file, return the path to its .py file. + + The .pyc file does not need to exist; this simply returns the path to + the .py file calculated to correspond to the .pyc file. If path does + not conform to PEP 3147 format, ValueError will be raised. If + sys.implementation.cache_tag is None then NotImplementedError is raised. + + """ + return util.source_from_cache(path) + + +def get_suffixes(): + """**DEPRECATED**""" + extensions = [(s, 'rb', C_EXTENSION) for s in machinery.EXTENSION_SUFFIXES] + source = [(s, 'r', PY_SOURCE) for s in machinery.SOURCE_SUFFIXES] + bytecode = [(s, 'rb', PY_COMPILED) for s in machinery.BYTECODE_SUFFIXES] + + return extensions + source + bytecode + + +class NullImporter: + + """**DEPRECATED** + + Null import object. + + """ + + def __init__(self, path): + if path == '': + raise ImportError('empty pathname', path='') + elif os.path.isdir(path): + raise ImportError('existing directory', path=path) + + def find_module(self, fullname): + """Always returns None.""" + return None + + +class _HackedGetData: + + """Compatibility support for 'file' arguments of various load_*() + functions.""" + + def __init__(self, fullname, path, file=None): + super().__init__(fullname, path) + self.file = file + + def get_data(self, path): + """Gross hack to contort loader to deal w/ load_*()'s bad API.""" + if self.file and path == self.path: + # The contract of get_data() requires us to return bytes. Reopen the + # file in binary mode if needed. + if not self.file.closed: + file = self.file + if 'b' not in file.mode: + file.close() + if self.file.closed: + self.file = file = open(self.path, 'rb') + + with file: + return file.read() + else: + return super().get_data(path) + + +class _LoadSourceCompatibility(_HackedGetData, machinery.SourceFileLoader): + + """Compatibility support for implementing load_source().""" + + +def load_source(name, pathname, file=None): + loader = _LoadSourceCompatibility(name, pathname, file) + spec = util.spec_from_file_location(name, pathname, loader=loader) + if name in sys.modules: + module = _exec(spec, sys.modules[name]) + else: + module = _load(spec) + # To allow reloading to potentially work, use a non-hacked loader which + # won't rely on a now-closed file object. + module.__loader__ = machinery.SourceFileLoader(name, pathname) + module.__spec__.loader = module.__loader__ + return module + + +class _LoadCompiledCompatibility(_HackedGetData, SourcelessFileLoader): + + """Compatibility support for implementing load_compiled().""" + + +def load_compiled(name, pathname, file=None): + """**DEPRECATED**""" + loader = _LoadCompiledCompatibility(name, pathname, file) + spec = util.spec_from_file_location(name, pathname, loader=loader) + if name in sys.modules: + module = _exec(spec, sys.modules[name]) + else: + module = _load(spec) + # To allow reloading to potentially work, use a non-hacked loader which + # won't rely on a now-closed file object. + module.__loader__ = SourcelessFileLoader(name, pathname) + module.__spec__.loader = module.__loader__ + return module + + +def load_package(name, path): + """**DEPRECATED**""" + if os.path.isdir(path): + extensions = (machinery.SOURCE_SUFFIXES[:] + + machinery.BYTECODE_SUFFIXES[:]) + for extension in extensions: + init_path = os.path.join(path, '__init__' + extension) + if os.path.exists(init_path): + path = init_path + break + else: + raise ValueError('{!r} is not a package'.format(path)) + spec = util.spec_from_file_location(name, path, + submodule_search_locations=[]) + if name in sys.modules: + return _exec(spec, sys.modules[name]) + else: + return _load(spec) + + +def load_module(name, file, filename, details): + """**DEPRECATED** + + Load a module, given information returned by find_module(). + + The module name must include the full package name, if any. + + """ + suffix, mode, type_ = details + if mode and (not mode.startswith(('r', 'U')) or '+' in mode): + raise ValueError('invalid file open mode {!r}'.format(mode)) + elif file is None and type_ in {PY_SOURCE, PY_COMPILED}: + msg = 'file object required for import (type code {})'.format(type_) + raise ValueError(msg) + elif type_ == PY_SOURCE: + return load_source(name, filename, file) + elif type_ == PY_COMPILED: + return load_compiled(name, filename, file) + elif type_ == C_EXTENSION and load_dynamic is not None: + if file is None: + with open(filename, 'rb') as opened_file: + return load_dynamic(name, filename, opened_file) + else: + return load_dynamic(name, filename, file) + elif type_ == PKG_DIRECTORY: + return load_package(name, filename) + elif type_ == C_BUILTIN: + return init_builtin(name) + elif type_ == PY_FROZEN: + return init_frozen(name) + else: + msg = "Don't know how to import {} (type code {})".format(name, type_) + raise ImportError(msg, name=name) + + +def find_module(name, path=None): + """**DEPRECATED** + + Search for a module. + + If path is omitted or None, search for a built-in, frozen or special + module and continue search in sys.path. The module name cannot + contain '.'; to search for a submodule of a package, pass the + submodule name and the package's __path__. + + """ + if not isinstance(name, str): + raise TypeError("'name' must be a str, not {}".format(type(name))) + elif not isinstance(path, (type(None), list)): + # Backwards-compatibility + raise RuntimeError("'path' must be None or a list, " + "not {}".format(type(path))) + + if path is None: + if is_builtin(name): + return None, None, ('', '', C_BUILTIN) + elif is_frozen(name): + return None, None, ('', '', PY_FROZEN) + else: + path = sys.path + + for entry in path: + package_directory = os.path.join(entry, name) + for suffix in ['.py', machinery.BYTECODE_SUFFIXES[0]]: + package_file_name = '__init__' + suffix + file_path = os.path.join(package_directory, package_file_name) + if os.path.isfile(file_path): + return None, package_directory, ('', '', PKG_DIRECTORY) + for suffix, mode, type_ in get_suffixes(): + file_name = name + suffix + file_path = os.path.join(entry, file_name) + if os.path.isfile(file_path): + break + else: + continue + break # Break out of outer loop when breaking out of inner loop. + else: + raise ImportError(_ERR_MSG.format(name), name=name) + + encoding = None + if 'b' not in mode: + with open(file_path, 'rb') as file: + encoding = tokenize.detect_encoding(file.readline)[0] + file = open(file_path, mode, encoding=encoding) + return file, file_path, (suffix, mode, type_) + + +def reload(module): + """**DEPRECATED** + + Reload the module and return it. + + The module must have been successfully imported before. + + """ + return importlib.reload(module) + + +def init_builtin(name): + """**DEPRECATED** + + Load and return a built-in module by name, or None is such module doesn't + exist + """ + try: + return _builtin_from_name(name) + except ImportError: + return None + + +if create_dynamic: + def load_dynamic(name, path, file=None): + """**DEPRECATED** + + Load an extension module. + """ + import importlib.machinery + loader = importlib.machinery.ExtensionFileLoader(name, path) + + # Issue #24748: Skip the sys.modules check in _load_module_shim; + # always load new extension + spec = importlib.machinery.ModuleSpec( + name=name, loader=loader, origin=path) + return _load(spec) + +else: + load_dynamic = None diff --git a/my_env/Lib/importlib/__init__.py b/my_env/Lib/importlib/__init__.py new file mode 100644 index 000000000..cb37d246a --- /dev/null +++ b/my_env/Lib/importlib/__init__.py @@ -0,0 +1,176 @@ +"""A pure Python implementation of import.""" +__all__ = ['__import__', 'import_module', 'invalidate_caches', 'reload'] + +# Bootstrap help ##################################################### + +# Until bootstrapping is complete, DO NOT import any modules that attempt +# to import importlib._bootstrap (directly or indirectly). Since this +# partially initialised package would be present in sys.modules, those +# modules would get an uninitialised copy of the source version, instead +# of a fully initialised version (either the frozen one or the one +# initialised below if the frozen one is not available). +import _imp # Just the builtin component, NOT the full Python module +import sys + +try: + import _frozen_importlib as _bootstrap +except ImportError: + from . import _bootstrap + _bootstrap._setup(sys, _imp) +else: + # importlib._bootstrap is the built-in import, ensure we don't create + # a second copy of the module. + _bootstrap.__name__ = 'importlib._bootstrap' + _bootstrap.__package__ = 'importlib' + try: + _bootstrap.__file__ = __file__.replace('__init__.py', '_bootstrap.py') + except NameError: + # __file__ is not guaranteed to be defined, e.g. if this code gets + # frozen by a tool like cx_Freeze. + pass + sys.modules['importlib._bootstrap'] = _bootstrap + +try: + import _frozen_importlib_external as _bootstrap_external +except ImportError: + from . import _bootstrap_external + _bootstrap_external._setup(_bootstrap) + _bootstrap._bootstrap_external = _bootstrap_external +else: + _bootstrap_external.__name__ = 'importlib._bootstrap_external' + _bootstrap_external.__package__ = 'importlib' + try: + _bootstrap_external.__file__ = __file__.replace('__init__.py', '_bootstrap_external.py') + except NameError: + # __file__ is not guaranteed to be defined, e.g. if this code gets + # frozen by a tool like cx_Freeze. + pass + sys.modules['importlib._bootstrap_external'] = _bootstrap_external + +# To simplify imports in test code +_w_long = _bootstrap_external._w_long +_r_long = _bootstrap_external._r_long + +# Fully bootstrapped at this point, import whatever you like, circular +# dependencies and startup overhead minimisation permitting :) + +import types +import warnings + + +# Public API ######################################################### + +from ._bootstrap import __import__ + + +def invalidate_caches(): + """Call the invalidate_caches() method on all meta path finders stored in + sys.meta_path (where implemented).""" + for finder in sys.meta_path: + if hasattr(finder, 'invalidate_caches'): + finder.invalidate_caches() + + +def find_loader(name, path=None): + """Return the loader for the specified module. + + This is a backward-compatible wrapper around find_spec(). + + This function is deprecated in favor of importlib.util.find_spec(). + + """ + warnings.warn('Deprecated since Python 3.4. ' + 'Use importlib.util.find_spec() instead.', + DeprecationWarning, stacklevel=2) + try: + loader = sys.modules[name].__loader__ + if loader is None: + raise ValueError('{}.__loader__ is None'.format(name)) + else: + return loader + except KeyError: + pass + except AttributeError: + raise ValueError('{}.__loader__ is not set'.format(name)) from None + + spec = _bootstrap._find_spec(name, path) + # We won't worry about malformed specs (missing attributes). + if spec is None: + return None + if spec.loader is None: + if spec.submodule_search_locations is None: + raise ImportError('spec for {} missing loader'.format(name), + name=name) + raise ImportError('namespace packages do not have loaders', + name=name) + return spec.loader + + +def import_module(name, package=None): + """Import a module. + + The 'package' argument is required when performing a relative import. It + specifies the package to use as the anchor point from which to resolve the + relative import to an absolute import. + + """ + level = 0 + if name.startswith('.'): + if not package: + msg = ("the 'package' argument is required to perform a relative " + "import for {!r}") + raise TypeError(msg.format(name)) + for character in name: + if character != '.': + break + level += 1 + return _bootstrap._gcd_import(name[level:], package, level) + + +_RELOADING = {} + + +def reload(module): + """Reload the module and return it. + + The module must have been successfully imported before. + + """ + if not module or not isinstance(module, types.ModuleType): + raise TypeError("reload() argument must be a module") + try: + name = module.__spec__.name + except AttributeError: + name = module.__name__ + + if sys.modules.get(name) is not module: + msg = "module {} not in sys.modules" + raise ImportError(msg.format(name), name=name) + if name in _RELOADING: + return _RELOADING[name] + _RELOADING[name] = module + try: + parent_name = name.rpartition('.')[0] + if parent_name: + try: + parent = sys.modules[parent_name] + except KeyError: + msg = "parent {!r} not in sys.modules" + raise ImportError(msg.format(parent_name), + name=parent_name) from None + else: + pkgpath = parent.__path__ + else: + pkgpath = None + target = module + spec = module.__spec__ = _bootstrap._find_spec(name, pkgpath, target) + if spec is None: + raise ModuleNotFoundError(f"spec not found for the module {name!r}", name=name) + _bootstrap._exec(spec, module) + # The module may have replaced itself in sys.modules! + return sys.modules[name] + finally: + try: + del _RELOADING[name] + except KeyError: + pass diff --git a/my_env/Lib/importlib/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/importlib/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..44995bcf7 Binary files /dev/null and b/my_env/Lib/importlib/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/importlib/__pycache__/abc.cpython-37.pyc b/my_env/Lib/importlib/__pycache__/abc.cpython-37.pyc new file mode 100644 index 000000000..14e28543a Binary files /dev/null and b/my_env/Lib/importlib/__pycache__/abc.cpython-37.pyc differ diff --git a/my_env/Lib/importlib/__pycache__/machinery.cpython-37.pyc b/my_env/Lib/importlib/__pycache__/machinery.cpython-37.pyc new file mode 100644 index 000000000..dad698fe8 Binary files /dev/null and b/my_env/Lib/importlib/__pycache__/machinery.cpython-37.pyc differ diff --git a/my_env/Lib/importlib/__pycache__/util.cpython-37.pyc b/my_env/Lib/importlib/__pycache__/util.cpython-37.pyc new file mode 100644 index 000000000..24c1d807c Binary files /dev/null and b/my_env/Lib/importlib/__pycache__/util.cpython-37.pyc differ diff --git a/my_env/Lib/importlib/_bootstrap.py b/my_env/Lib/importlib/_bootstrap.py new file mode 100644 index 000000000..2bdd1929b --- /dev/null +++ b/my_env/Lib/importlib/_bootstrap.py @@ -0,0 +1,1164 @@ +"""Core implementation of import. + +This module is NOT meant to be directly imported! It has been designed such +that it can be bootstrapped into Python as the implementation of import. As +such it requires the injection of specific modules and attributes in order to +work. One should use importlib as the public-facing version of this module. + +""" +# +# IMPORTANT: Whenever making changes to this module, be sure to run +# a top-level make in order to get the frozen version of the module +# updated. Not doing so will result in the Makefile to fail for +# all others who don't have a ./python around to freeze the module +# in the early stages of compilation. +# + +# See importlib._setup() for what is injected into the global namespace. + +# When editing this code be aware that code executed at import time CANNOT +# reference any injected objects! This includes not only global code but also +# anything specified at the class level. + +# Bootstrap-related code ###################################################### + +_bootstrap_external = None + +def _wrap(new, old): + """Simple substitute for functools.update_wrapper.""" + for replace in ['__module__', '__name__', '__qualname__', '__doc__']: + if hasattr(old, replace): + setattr(new, replace, getattr(old, replace)) + new.__dict__.update(old.__dict__) + + +def _new_module(name): + return type(sys)(name) + + +# Module-level locking ######################################################## + +# A dict mapping module names to weakrefs of _ModuleLock instances +# Dictionary protected by the global import lock +_module_locks = {} +# A dict mapping thread ids to _ModuleLock instances +_blocking_on = {} + + +class _DeadlockError(RuntimeError): + pass + + +class _ModuleLock: + """A recursive lock implementation which is able to detect deadlocks + (e.g. thread 1 trying to take locks A then B, and thread 2 trying to + take locks B then A). + """ + + def __init__(self, name): + self.lock = _thread.allocate_lock() + self.wakeup = _thread.allocate_lock() + self.name = name + self.owner = None + self.count = 0 + self.waiters = 0 + + def has_deadlock(self): + # Deadlock avoidance for concurrent circular imports. + me = _thread.get_ident() + tid = self.owner + while True: + lock = _blocking_on.get(tid) + if lock is None: + return False + tid = lock.owner + if tid == me: + return True + + def acquire(self): + """ + Acquire the module lock. If a potential deadlock is detected, + a _DeadlockError is raised. + Otherwise, the lock is always acquired and True is returned. + """ + tid = _thread.get_ident() + _blocking_on[tid] = self + try: + while True: + with self.lock: + if self.count == 0 or self.owner == tid: + self.owner = tid + self.count += 1 + return True + if self.has_deadlock(): + raise _DeadlockError('deadlock detected by %r' % self) + if self.wakeup.acquire(False): + self.waiters += 1 + # Wait for a release() call + self.wakeup.acquire() + self.wakeup.release() + finally: + del _blocking_on[tid] + + def release(self): + tid = _thread.get_ident() + with self.lock: + if self.owner != tid: + raise RuntimeError('cannot release un-acquired lock') + assert self.count > 0 + self.count -= 1 + if self.count == 0: + self.owner = None + if self.waiters: + self.waiters -= 1 + self.wakeup.release() + + def __repr__(self): + return '_ModuleLock({!r}) at {}'.format(self.name, id(self)) + + +class _DummyModuleLock: + """A simple _ModuleLock equivalent for Python builds without + multi-threading support.""" + + def __init__(self, name): + self.name = name + self.count = 0 + + def acquire(self): + self.count += 1 + return True + + def release(self): + if self.count == 0: + raise RuntimeError('cannot release un-acquired lock') + self.count -= 1 + + def __repr__(self): + return '_DummyModuleLock({!r}) at {}'.format(self.name, id(self)) + + +class _ModuleLockManager: + + def __init__(self, name): + self._name = name + self._lock = None + + def __enter__(self): + self._lock = _get_module_lock(self._name) + self._lock.acquire() + + def __exit__(self, *args, **kwargs): + self._lock.release() + + +# The following two functions are for consumption by Python/import.c. + +def _get_module_lock(name): + """Get or create the module lock for a given module name. + + Acquire/release internally the global import lock to protect + _module_locks.""" + + _imp.acquire_lock() + try: + try: + lock = _module_locks[name]() + except KeyError: + lock = None + + if lock is None: + if _thread is None: + lock = _DummyModuleLock(name) + else: + lock = _ModuleLock(name) + + def cb(ref, name=name): + _imp.acquire_lock() + try: + # bpo-31070: Check if another thread created a new lock + # after the previous lock was destroyed + # but before the weakref callback was called. + if _module_locks.get(name) is ref: + del _module_locks[name] + finally: + _imp.release_lock() + + _module_locks[name] = _weakref.ref(lock, cb) + finally: + _imp.release_lock() + + return lock + + +def _lock_unlock_module(name): + """Acquires then releases the module lock for a given module name. + + This is used to ensure a module is completely initialized, in the + event it is being imported by another thread. + """ + lock = _get_module_lock(name) + try: + lock.acquire() + except _DeadlockError: + # Concurrent circular import, we'll accept a partially initialized + # module object. + pass + else: + lock.release() + +# Frame stripping magic ############################################### +def _call_with_frames_removed(f, *args, **kwds): + """remove_importlib_frames in import.c will always remove sequences + of importlib frames that end with a call to this function + + Use it instead of a normal call in places where including the importlib + frames introduces unwanted noise into the traceback (e.g. when executing + module code) + """ + return f(*args, **kwds) + + +def _verbose_message(message, *args, verbosity=1): + """Print the message to stderr if -v/PYTHONVERBOSE is turned on.""" + if sys.flags.verbose >= verbosity: + if not message.startswith(('#', 'import ')): + message = '# ' + message + print(message.format(*args), file=sys.stderr) + + +def _requires_builtin(fxn): + """Decorator to verify the named module is built-in.""" + def _requires_builtin_wrapper(self, fullname): + if fullname not in sys.builtin_module_names: + raise ImportError('{!r} is not a built-in module'.format(fullname), + name=fullname) + return fxn(self, fullname) + _wrap(_requires_builtin_wrapper, fxn) + return _requires_builtin_wrapper + + +def _requires_frozen(fxn): + """Decorator to verify the named module is frozen.""" + def _requires_frozen_wrapper(self, fullname): + if not _imp.is_frozen(fullname): + raise ImportError('{!r} is not a frozen module'.format(fullname), + name=fullname) + return fxn(self, fullname) + _wrap(_requires_frozen_wrapper, fxn) + return _requires_frozen_wrapper + + +# Typically used by loader classes as a method replacement. +def _load_module_shim(self, fullname): + """Load the specified module into sys.modules and return it. + + This method is deprecated. Use loader.exec_module instead. + + """ + spec = spec_from_loader(fullname, self) + if fullname in sys.modules: + module = sys.modules[fullname] + _exec(spec, module) + return sys.modules[fullname] + else: + return _load(spec) + +# Module specifications ####################################################### + +def _module_repr(module): + # The implementation of ModuleType.__repr__(). + loader = getattr(module, '__loader__', None) + if hasattr(loader, 'module_repr'): + # As soon as BuiltinImporter, FrozenImporter, and NamespaceLoader + # drop their implementations for module_repr. we can add a + # deprecation warning here. + try: + return loader.module_repr(module) + except Exception: + pass + try: + spec = module.__spec__ + except AttributeError: + pass + else: + if spec is not None: + return _module_repr_from_spec(spec) + + # We could use module.__class__.__name__ instead of 'module' in the + # various repr permutations. + try: + name = module.__name__ + except AttributeError: + name = '?' + try: + filename = module.__file__ + except AttributeError: + if loader is None: + return ''.format(name) + else: + return ''.format(name, loader) + else: + return ''.format(name, filename) + + +class _installed_safely: + + def __init__(self, module): + self._module = module + self._spec = module.__spec__ + + def __enter__(self): + # This must be done before putting the module in sys.modules + # (otherwise an optimization shortcut in import.c becomes + # wrong) + self._spec._initializing = True + sys.modules[self._spec.name] = self._module + + def __exit__(self, *args): + try: + spec = self._spec + if any(arg is not None for arg in args): + try: + del sys.modules[spec.name] + except KeyError: + pass + else: + _verbose_message('import {!r} # {!r}', spec.name, spec.loader) + finally: + self._spec._initializing = False + + +class ModuleSpec: + """The specification for a module, used for loading. + + A module's spec is the source for information about the module. For + data associated with the module, including source, use the spec's + loader. + + `name` is the absolute name of the module. `loader` is the loader + to use when loading the module. `parent` is the name of the + package the module is in. The parent is derived from the name. + + `is_package` determines if the module is considered a package or + not. On modules this is reflected by the `__path__` attribute. + + `origin` is the specific location used by the loader from which to + load the module, if that information is available. When filename is + set, origin will match. + + `has_location` indicates that a spec's "origin" reflects a location. + When this is True, `__file__` attribute of the module is set. + + `cached` is the location of the cached bytecode file, if any. It + corresponds to the `__cached__` attribute. + + `submodule_search_locations` is the sequence of path entries to + search when importing submodules. If set, is_package should be + True--and False otherwise. + + Packages are simply modules that (may) have submodules. If a spec + has a non-None value in `submodule_search_locations`, the import + system will consider modules loaded from the spec as packages. + + Only finders (see importlib.abc.MetaPathFinder and + importlib.abc.PathEntryFinder) should modify ModuleSpec instances. + + """ + + def __init__(self, name, loader, *, origin=None, loader_state=None, + is_package=None): + self.name = name + self.loader = loader + self.origin = origin + self.loader_state = loader_state + self.submodule_search_locations = [] if is_package else None + + # file-location attributes + self._set_fileattr = False + self._cached = None + + def __repr__(self): + args = ['name={!r}'.format(self.name), + 'loader={!r}'.format(self.loader)] + if self.origin is not None: + args.append('origin={!r}'.format(self.origin)) + if self.submodule_search_locations is not None: + args.append('submodule_search_locations={}' + .format(self.submodule_search_locations)) + return '{}({})'.format(self.__class__.__name__, ', '.join(args)) + + def __eq__(self, other): + smsl = self.submodule_search_locations + try: + return (self.name == other.name and + self.loader == other.loader and + self.origin == other.origin and + smsl == other.submodule_search_locations and + self.cached == other.cached and + self.has_location == other.has_location) + except AttributeError: + return False + + @property + def cached(self): + if self._cached is None: + if self.origin is not None and self._set_fileattr: + if _bootstrap_external is None: + raise NotImplementedError + self._cached = _bootstrap_external._get_cached(self.origin) + return self._cached + + @cached.setter + def cached(self, cached): + self._cached = cached + + @property + def parent(self): + """The name of the module's parent.""" + if self.submodule_search_locations is None: + return self.name.rpartition('.')[0] + else: + return self.name + + @property + def has_location(self): + return self._set_fileattr + + @has_location.setter + def has_location(self, value): + self._set_fileattr = bool(value) + + +def spec_from_loader(name, loader, *, origin=None, is_package=None): + """Return a module spec based on various loader methods.""" + if hasattr(loader, 'get_filename'): + if _bootstrap_external is None: + raise NotImplementedError + spec_from_file_location = _bootstrap_external.spec_from_file_location + + if is_package is None: + return spec_from_file_location(name, loader=loader) + search = [] if is_package else None + return spec_from_file_location(name, loader=loader, + submodule_search_locations=search) + + if is_package is None: + if hasattr(loader, 'is_package'): + try: + is_package = loader.is_package(name) + except ImportError: + is_package = None # aka, undefined + else: + # the default + is_package = False + + return ModuleSpec(name, loader, origin=origin, is_package=is_package) + + +def _spec_from_module(module, loader=None, origin=None): + # This function is meant for use in _setup(). + try: + spec = module.__spec__ + except AttributeError: + pass + else: + if spec is not None: + return spec + + name = module.__name__ + if loader is None: + try: + loader = module.__loader__ + except AttributeError: + # loader will stay None. + pass + try: + location = module.__file__ + except AttributeError: + location = None + if origin is None: + if location is None: + try: + origin = loader._ORIGIN + except AttributeError: + origin = None + else: + origin = location + try: + cached = module.__cached__ + except AttributeError: + cached = None + try: + submodule_search_locations = list(module.__path__) + except AttributeError: + submodule_search_locations = None + + spec = ModuleSpec(name, loader, origin=origin) + spec._set_fileattr = False if location is None else True + spec.cached = cached + spec.submodule_search_locations = submodule_search_locations + return spec + + +def _init_module_attrs(spec, module, *, override=False): + # The passed-in module may be not support attribute assignment, + # in which case we simply don't set the attributes. + # __name__ + if (override or getattr(module, '__name__', None) is None): + try: + module.__name__ = spec.name + except AttributeError: + pass + # __loader__ + if override or getattr(module, '__loader__', None) is None: + loader = spec.loader + if loader is None: + # A backward compatibility hack. + if spec.submodule_search_locations is not None: + if _bootstrap_external is None: + raise NotImplementedError + _NamespaceLoader = _bootstrap_external._NamespaceLoader + + loader = _NamespaceLoader.__new__(_NamespaceLoader) + loader._path = spec.submodule_search_locations + spec.loader = loader + # While the docs say that module.__file__ is not set for + # built-in modules, and the code below will avoid setting it if + # spec.has_location is false, this is incorrect for namespace + # packages. Namespace packages have no location, but their + # __spec__.origin is None, and thus their module.__file__ + # should also be None for consistency. While a bit of a hack, + # this is the best place to ensure this consistency. + # + # See # https://docs.python.org/3/library/importlib.html#importlib.abc.Loader.load_module + # and bpo-32305 + module.__file__ = None + try: + module.__loader__ = loader + except AttributeError: + pass + # __package__ + if override or getattr(module, '__package__', None) is None: + try: + module.__package__ = spec.parent + except AttributeError: + pass + # __spec__ + try: + module.__spec__ = spec + except AttributeError: + pass + # __path__ + if override or getattr(module, '__path__', None) is None: + if spec.submodule_search_locations is not None: + try: + module.__path__ = spec.submodule_search_locations + except AttributeError: + pass + # __file__/__cached__ + if spec.has_location: + if override or getattr(module, '__file__', None) is None: + try: + module.__file__ = spec.origin + except AttributeError: + pass + + if override or getattr(module, '__cached__', None) is None: + if spec.cached is not None: + try: + module.__cached__ = spec.cached + except AttributeError: + pass + return module + + +def module_from_spec(spec): + """Create a module based on the provided spec.""" + # Typically loaders will not implement create_module(). + module = None + if hasattr(spec.loader, 'create_module'): + # If create_module() returns `None` then it means default + # module creation should be used. + module = spec.loader.create_module(spec) + elif hasattr(spec.loader, 'exec_module'): + raise ImportError('loaders that define exec_module() ' + 'must also define create_module()') + if module is None: + module = _new_module(spec.name) + _init_module_attrs(spec, module) + return module + + +def _module_repr_from_spec(spec): + """Return the repr to use for the module.""" + # We mostly replicate _module_repr() using the spec attributes. + name = '?' if spec.name is None else spec.name + if spec.origin is None: + if spec.loader is None: + return ''.format(name) + else: + return ''.format(name, spec.loader) + else: + if spec.has_location: + return ''.format(name, spec.origin) + else: + return ''.format(spec.name, spec.origin) + + +# Used by importlib.reload() and _load_module_shim(). +def _exec(spec, module): + """Execute the spec's specified module in an existing module's namespace.""" + name = spec.name + with _ModuleLockManager(name): + if sys.modules.get(name) is not module: + msg = 'module {!r} not in sys.modules'.format(name) + raise ImportError(msg, name=name) + if spec.loader is None: + if spec.submodule_search_locations is None: + raise ImportError('missing loader', name=spec.name) + # namespace package + _init_module_attrs(spec, module, override=True) + return module + _init_module_attrs(spec, module, override=True) + if not hasattr(spec.loader, 'exec_module'): + # (issue19713) Once BuiltinImporter and ExtensionFileLoader + # have exec_module() implemented, we can add a deprecation + # warning here. + spec.loader.load_module(name) + else: + spec.loader.exec_module(module) + return sys.modules[name] + + +def _load_backward_compatible(spec): + # (issue19713) Once BuiltinImporter and ExtensionFileLoader + # have exec_module() implemented, we can add a deprecation + # warning here. + spec.loader.load_module(spec.name) + # The module must be in sys.modules at this point! + module = sys.modules[spec.name] + if getattr(module, '__loader__', None) is None: + try: + module.__loader__ = spec.loader + except AttributeError: + pass + if getattr(module, '__package__', None) is None: + try: + # Since module.__path__ may not line up with + # spec.submodule_search_paths, we can't necessarily rely + # on spec.parent here. + module.__package__ = module.__name__ + if not hasattr(module, '__path__'): + module.__package__ = spec.name.rpartition('.')[0] + except AttributeError: + pass + if getattr(module, '__spec__', None) is None: + try: + module.__spec__ = spec + except AttributeError: + pass + return module + +def _load_unlocked(spec): + # A helper for direct use by the import system. + if spec.loader is not None: + # not a namespace package + if not hasattr(spec.loader, 'exec_module'): + return _load_backward_compatible(spec) + + module = module_from_spec(spec) + with _installed_safely(module): + if spec.loader is None: + if spec.submodule_search_locations is None: + raise ImportError('missing loader', name=spec.name) + # A namespace package so do nothing. + else: + spec.loader.exec_module(module) + + # We don't ensure that the import-related module attributes get + # set in the sys.modules replacement case. Such modules are on + # their own. + return sys.modules[spec.name] + +# A method used during testing of _load_unlocked() and by +# _load_module_shim(). +def _load(spec): + """Return a new module object, loaded by the spec's loader. + + The module is not added to its parent. + + If a module is already in sys.modules, that existing module gets + clobbered. + + """ + with _ModuleLockManager(spec.name): + return _load_unlocked(spec) + + +# Loaders ##################################################################### + +class BuiltinImporter: + + """Meta path import for built-in modules. + + All methods are either class or static methods to avoid the need to + instantiate the class. + + """ + + @staticmethod + def module_repr(module): + """Return repr for the module. + + The method is deprecated. The import machinery does the job itself. + + """ + return ''.format(module.__name__) + + @classmethod + def find_spec(cls, fullname, path=None, target=None): + if path is not None: + return None + if _imp.is_builtin(fullname): + return spec_from_loader(fullname, cls, origin='built-in') + else: + return None + + @classmethod + def find_module(cls, fullname, path=None): + """Find the built-in module. + + If 'path' is ever specified then the search is considered a failure. + + This method is deprecated. Use find_spec() instead. + + """ + spec = cls.find_spec(fullname, path) + return spec.loader if spec is not None else None + + @classmethod + def create_module(self, spec): + """Create a built-in module""" + if spec.name not in sys.builtin_module_names: + raise ImportError('{!r} is not a built-in module'.format(spec.name), + name=spec.name) + return _call_with_frames_removed(_imp.create_builtin, spec) + + @classmethod + def exec_module(self, module): + """Exec a built-in module""" + _call_with_frames_removed(_imp.exec_builtin, module) + + @classmethod + @_requires_builtin + def get_code(cls, fullname): + """Return None as built-in modules do not have code objects.""" + return None + + @classmethod + @_requires_builtin + def get_source(cls, fullname): + """Return None as built-in modules do not have source code.""" + return None + + @classmethod + @_requires_builtin + def is_package(cls, fullname): + """Return False as built-in modules are never packages.""" + return False + + load_module = classmethod(_load_module_shim) + + +class FrozenImporter: + + """Meta path import for frozen modules. + + All methods are either class or static methods to avoid the need to + instantiate the class. + + """ + + @staticmethod + def module_repr(m): + """Return repr for the module. + + The method is deprecated. The import machinery does the job itself. + + """ + return ''.format(m.__name__) + + @classmethod + def find_spec(cls, fullname, path=None, target=None): + if _imp.is_frozen(fullname): + return spec_from_loader(fullname, cls, origin='frozen') + else: + return None + + @classmethod + def find_module(cls, fullname, path=None): + """Find a frozen module. + + This method is deprecated. Use find_spec() instead. + + """ + return cls if _imp.is_frozen(fullname) else None + + @classmethod + def create_module(cls, spec): + """Use default semantics for module creation.""" + + @staticmethod + def exec_module(module): + name = module.__spec__.name + if not _imp.is_frozen(name): + raise ImportError('{!r} is not a frozen module'.format(name), + name=name) + code = _call_with_frames_removed(_imp.get_frozen_object, name) + exec(code, module.__dict__) + + @classmethod + def load_module(cls, fullname): + """Load a frozen module. + + This method is deprecated. Use exec_module() instead. + + """ + return _load_module_shim(cls, fullname) + + @classmethod + @_requires_frozen + def get_code(cls, fullname): + """Return the code object for the frozen module.""" + return _imp.get_frozen_object(fullname) + + @classmethod + @_requires_frozen + def get_source(cls, fullname): + """Return None as frozen modules do not have source code.""" + return None + + @classmethod + @_requires_frozen + def is_package(cls, fullname): + """Return True if the frozen module is a package.""" + return _imp.is_frozen_package(fullname) + + +# Import itself ############################################################### + +class _ImportLockContext: + + """Context manager for the import lock.""" + + def __enter__(self): + """Acquire the import lock.""" + _imp.acquire_lock() + + def __exit__(self, exc_type, exc_value, exc_traceback): + """Release the import lock regardless of any raised exceptions.""" + _imp.release_lock() + + +def _resolve_name(name, package, level): + """Resolve a relative module name to an absolute one.""" + bits = package.rsplit('.', level - 1) + if len(bits) < level: + raise ValueError('attempted relative import beyond top-level package') + base = bits[0] + return '{}.{}'.format(base, name) if name else base + + +def _find_spec_legacy(finder, name, path): + # This would be a good place for a DeprecationWarning if + # we ended up going that route. + loader = finder.find_module(name, path) + if loader is None: + return None + return spec_from_loader(name, loader) + + +def _find_spec(name, path, target=None): + """Find a module's spec.""" + meta_path = sys.meta_path + if meta_path is None: + # PyImport_Cleanup() is running or has been called. + raise ImportError("sys.meta_path is None, Python is likely " + "shutting down") + + if not meta_path: + _warnings.warn('sys.meta_path is empty', ImportWarning) + + # We check sys.modules here for the reload case. While a passed-in + # target will usually indicate a reload there is no guarantee, whereas + # sys.modules provides one. + is_reload = name in sys.modules + for finder in meta_path: + with _ImportLockContext(): + try: + find_spec = finder.find_spec + except AttributeError: + spec = _find_spec_legacy(finder, name, path) + if spec is None: + continue + else: + spec = find_spec(name, path, target) + if spec is not None: + # The parent import may have already imported this module. + if not is_reload and name in sys.modules: + module = sys.modules[name] + try: + __spec__ = module.__spec__ + except AttributeError: + # We use the found spec since that is the one that + # we would have used if the parent module hadn't + # beaten us to the punch. + return spec + else: + if __spec__ is None: + return spec + else: + return __spec__ + else: + return spec + else: + return None + + +def _sanity_check(name, package, level): + """Verify arguments are "sane".""" + if not isinstance(name, str): + raise TypeError('module name must be str, not {}'.format(type(name))) + if level < 0: + raise ValueError('level must be >= 0') + if level > 0: + if not isinstance(package, str): + raise TypeError('__package__ not set to a string') + elif not package: + raise ImportError('attempted relative import with no known parent ' + 'package') + if not name and level == 0: + raise ValueError('Empty module name') + + +_ERR_MSG_PREFIX = 'No module named ' +_ERR_MSG = _ERR_MSG_PREFIX + '{!r}' + +def _find_and_load_unlocked(name, import_): + path = None + parent = name.rpartition('.')[0] + if parent: + if parent not in sys.modules: + _call_with_frames_removed(import_, parent) + # Crazy side-effects! + if name in sys.modules: + return sys.modules[name] + parent_module = sys.modules[parent] + try: + path = parent_module.__path__ + except AttributeError: + msg = (_ERR_MSG + '; {!r} is not a package').format(name, parent) + raise ModuleNotFoundError(msg, name=name) from None + spec = _find_spec(name, path) + if spec is None: + raise ModuleNotFoundError(_ERR_MSG.format(name), name=name) + else: + module = _load_unlocked(spec) + if parent: + # Set the module as an attribute on its parent. + parent_module = sys.modules[parent] + setattr(parent_module, name.rpartition('.')[2], module) + return module + + +_NEEDS_LOADING = object() + + +def _find_and_load(name, import_): + """Find and load the module.""" + with _ModuleLockManager(name): + module = sys.modules.get(name, _NEEDS_LOADING) + if module is _NEEDS_LOADING: + return _find_and_load_unlocked(name, import_) + + if module is None: + message = ('import of {} halted; ' + 'None in sys.modules'.format(name)) + raise ModuleNotFoundError(message, name=name) + + _lock_unlock_module(name) + return module + + +def _gcd_import(name, package=None, level=0): + """Import and return the module based on its name, the package the call is + being made from, and the level adjustment. + + This function represents the greatest common denominator of functionality + between import_module and __import__. This includes setting __package__ if + the loader did not. + + """ + _sanity_check(name, package, level) + if level > 0: + name = _resolve_name(name, package, level) + return _find_and_load(name, _gcd_import) + + +def _handle_fromlist(module, fromlist, import_, *, recursive=False): + """Figure out what __import__ should return. + + The import_ parameter is a callable which takes the name of module to + import. It is required to decouple the function from assuming importlib's + import implementation is desired. + + """ + # The hell that is fromlist ... + # If a package was imported, try to import stuff from fromlist. + if hasattr(module, '__path__'): + for x in fromlist: + if not isinstance(x, str): + if recursive: + where = module.__name__ + '.__all__' + else: + where = "``from list''" + raise TypeError(f"Item in {where} must be str, " + f"not {type(x).__name__}") + elif x == '*': + if not recursive and hasattr(module, '__all__'): + _handle_fromlist(module, module.__all__, import_, + recursive=True) + elif not hasattr(module, x): + from_name = '{}.{}'.format(module.__name__, x) + try: + _call_with_frames_removed(import_, from_name) + except ModuleNotFoundError as exc: + # Backwards-compatibility dictates we ignore failed + # imports triggered by fromlist for modules that don't + # exist. + if (exc.name == from_name and + sys.modules.get(from_name, _NEEDS_LOADING) is not None): + continue + raise + return module + + +def _calc___package__(globals): + """Calculate what __package__ should be. + + __package__ is not guaranteed to be defined or could be set to None + to represent that its proper value is unknown. + + """ + package = globals.get('__package__') + spec = globals.get('__spec__') + if package is not None: + if spec is not None and package != spec.parent: + _warnings.warn("__package__ != __spec__.parent " + f"({package!r} != {spec.parent!r})", + ImportWarning, stacklevel=3) + return package + elif spec is not None: + return spec.parent + else: + _warnings.warn("can't resolve package from __spec__ or __package__, " + "falling back on __name__ and __path__", + ImportWarning, stacklevel=3) + package = globals['__name__'] + if '__path__' not in globals: + package = package.rpartition('.')[0] + return package + + +def __import__(name, globals=None, locals=None, fromlist=(), level=0): + """Import a module. + + The 'globals' argument is used to infer where the import is occurring from + to handle relative imports. The 'locals' argument is ignored. The + 'fromlist' argument specifies what should exist as attributes on the module + being imported (e.g. ``from module import ``). The 'level' + argument represents the package location to import from in a relative + import (e.g. ``from ..pkg import mod`` would have a 'level' of 2). + + """ + if level == 0: + module = _gcd_import(name) + else: + globals_ = globals if globals is not None else {} + package = _calc___package__(globals_) + module = _gcd_import(name, package, level) + if not fromlist: + # Return up to the first dot in 'name'. This is complicated by the fact + # that 'name' may be relative. + if level == 0: + return _gcd_import(name.partition('.')[0]) + elif not name: + return module + else: + # Figure out where to slice the module's name up to the first dot + # in 'name'. + cut_off = len(name) - len(name.partition('.')[0]) + # Slice end needs to be positive to alleviate need to special-case + # when ``'.' not in name``. + return sys.modules[module.__name__[:len(module.__name__)-cut_off]] + else: + return _handle_fromlist(module, fromlist, _gcd_import) + + +def _builtin_from_name(name): + spec = BuiltinImporter.find_spec(name) + if spec is None: + raise ImportError('no built-in module named ' + name) + return _load_unlocked(spec) + + +def _setup(sys_module, _imp_module): + """Setup importlib by importing needed built-in modules and injecting them + into the global namespace. + + As sys is needed for sys.modules access and _imp is needed to load built-in + modules, those two modules must be explicitly passed in. + + """ + global _imp, sys + _imp = _imp_module + sys = sys_module + + # Set up the spec for existing builtin/frozen modules. + module_type = type(sys) + for name, module in sys.modules.items(): + if isinstance(module, module_type): + if name in sys.builtin_module_names: + loader = BuiltinImporter + elif _imp.is_frozen(name): + loader = FrozenImporter + else: + continue + spec = _spec_from_module(module, loader) + _init_module_attrs(spec, module) + + # Directly load built-in modules needed during bootstrap. + self_module = sys.modules[__name__] + for builtin_name in ('_thread', '_warnings', '_weakref'): + if builtin_name not in sys.modules: + builtin_module = _builtin_from_name(builtin_name) + else: + builtin_module = sys.modules[builtin_name] + setattr(self_module, builtin_name, builtin_module) + + +def _install(sys_module, _imp_module): + """Install importers for builtin and frozen modules""" + _setup(sys_module, _imp_module) + + sys.meta_path.append(BuiltinImporter) + sys.meta_path.append(FrozenImporter) + + +def _install_external_importers(): + """Install importers that require external filesystem access""" + global _bootstrap_external + import _frozen_importlib_external + _bootstrap_external = _frozen_importlib_external + _frozen_importlib_external._install(sys.modules[__name__]) diff --git a/my_env/Lib/importlib/_bootstrap_external.py b/my_env/Lib/importlib/_bootstrap_external.py new file mode 100644 index 000000000..53b24ff1b --- /dev/null +++ b/my_env/Lib/importlib/_bootstrap_external.py @@ -0,0 +1,1562 @@ +"""Core implementation of path-based import. + +This module is NOT meant to be directly imported! It has been designed such +that it can be bootstrapped into Python as the implementation of import. As +such it requires the injection of specific modules and attributes in order to +work. One should use importlib as the public-facing version of this module. + +""" +# IMPORTANT: Whenever making changes to this module, be sure to run a top-level +# `make regen-importlib` followed by `make` in order to get the frozen version +# of the module updated. Not doing so will result in the Makefile to fail for +# all others who don't have a ./python around to freeze the module in the early +# stages of compilation. +# + +# See importlib._setup() for what is injected into the global namespace. + +# When editing this code be aware that code executed at import time CANNOT +# reference any injected objects! This includes not only global code but also +# anything specified at the class level. + +# Bootstrap-related code ###################################################### +_CASE_INSENSITIVE_PLATFORMS_STR_KEY = 'win', +_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY = 'cygwin', 'darwin' +_CASE_INSENSITIVE_PLATFORMS = (_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY + + _CASE_INSENSITIVE_PLATFORMS_STR_KEY) + + +def _make_relax_case(): + if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS): + if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS_STR_KEY): + key = 'PYTHONCASEOK' + else: + key = b'PYTHONCASEOK' + + def _relax_case(): + """True if filenames must be checked case-insensitively.""" + return key in _os.environ + else: + def _relax_case(): + """True if filenames must be checked case-insensitively.""" + return False + return _relax_case + + +def _w_long(x): + """Convert a 32-bit integer to little-endian.""" + return (int(x) & 0xFFFFFFFF).to_bytes(4, 'little') + + +def _r_long(int_bytes): + """Convert 4 bytes in little-endian to an integer.""" + return int.from_bytes(int_bytes, 'little') + + +def _path_join(*path_parts): + """Replacement for os.path.join().""" + return path_sep.join([part.rstrip(path_separators) + for part in path_parts if part]) + + +def _path_split(path): + """Replacement for os.path.split().""" + if len(path_separators) == 1: + front, _, tail = path.rpartition(path_sep) + return front, tail + for x in reversed(path): + if x in path_separators: + front, tail = path.rsplit(x, maxsplit=1) + return front, tail + return '', path + + +def _path_stat(path): + """Stat the path. + + Made a separate function to make it easier to override in experiments + (e.g. cache stat results). + + """ + return _os.stat(path) + + +def _path_is_mode_type(path, mode): + """Test whether the path is the specified mode type.""" + try: + stat_info = _path_stat(path) + except OSError: + return False + return (stat_info.st_mode & 0o170000) == mode + + +def _path_isfile(path): + """Replacement for os.path.isfile.""" + return _path_is_mode_type(path, 0o100000) + + +def _path_isdir(path): + """Replacement for os.path.isdir.""" + if not path: + path = _os.getcwd() + return _path_is_mode_type(path, 0o040000) + + +def _write_atomic(path, data, mode=0o666): + """Best-effort function to write data to a path atomically. + Be prepared to handle a FileExistsError if concurrent writing of the + temporary file is attempted.""" + # id() is used to generate a pseudo-random filename. + path_tmp = '{}.{}'.format(path, id(path)) + fd = _os.open(path_tmp, + _os.O_EXCL | _os.O_CREAT | _os.O_WRONLY, mode & 0o666) + try: + # We first write data to a temporary file, and then use os.replace() to + # perform an atomic rename. + with _io.FileIO(fd, 'wb') as file: + file.write(data) + _os.replace(path_tmp, path) + except OSError: + try: + _os.unlink(path_tmp) + except OSError: + pass + raise + + +_code_type = type(_write_atomic.__code__) + + +# Finder/loader utility code ############################################### + +# Magic word to reject .pyc files generated by other Python versions. +# It should change for each incompatible change to the bytecode. +# +# The value of CR and LF is incorporated so if you ever read or write +# a .pyc file in text mode the magic number will be wrong; also, the +# Apple MPW compiler swaps their values, botching string constants. +# +# There were a variety of old schemes for setting the magic number. +# The current working scheme is to increment the previous value by +# 10. +# +# Starting with the adoption of PEP 3147 in Python 3.2, every bump in magic +# number also includes a new "magic tag", i.e. a human readable string used +# to represent the magic number in __pycache__ directories. When you change +# the magic number, you must also set a new unique magic tag. Generally this +# can be named after the Python major version of the magic number bump, but +# it can really be anything, as long as it's different than anything else +# that's come before. The tags are included in the following table, starting +# with Python 3.2a0. +# +# Known values: +# Python 1.5: 20121 +# Python 1.5.1: 20121 +# Python 1.5.2: 20121 +# Python 1.6: 50428 +# Python 2.0: 50823 +# Python 2.0.1: 50823 +# Python 2.1: 60202 +# Python 2.1.1: 60202 +# Python 2.1.2: 60202 +# Python 2.2: 60717 +# Python 2.3a0: 62011 +# Python 2.3a0: 62021 +# Python 2.3a0: 62011 (!) +# Python 2.4a0: 62041 +# Python 2.4a3: 62051 +# Python 2.4b1: 62061 +# Python 2.5a0: 62071 +# Python 2.5a0: 62081 (ast-branch) +# Python 2.5a0: 62091 (with) +# Python 2.5a0: 62092 (changed WITH_CLEANUP opcode) +# Python 2.5b3: 62101 (fix wrong code: for x, in ...) +# Python 2.5b3: 62111 (fix wrong code: x += yield) +# Python 2.5c1: 62121 (fix wrong lnotab with for loops and +# storing constants that should have been removed) +# Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp) +# Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode) +# Python 2.6a1: 62161 (WITH_CLEANUP optimization) +# Python 2.7a0: 62171 (optimize list comprehensions/change LIST_APPEND) +# Python 2.7a0: 62181 (optimize conditional branches: +# introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE) +# Python 2.7a0 62191 (introduce SETUP_WITH) +# Python 2.7a0 62201 (introduce BUILD_SET) +# Python 2.7a0 62211 (introduce MAP_ADD and SET_ADD) +# Python 3000: 3000 +# 3010 (removed UNARY_CONVERT) +# 3020 (added BUILD_SET) +# 3030 (added keyword-only parameters) +# 3040 (added signature annotations) +# 3050 (print becomes a function) +# 3060 (PEP 3115 metaclass syntax) +# 3061 (string literals become unicode) +# 3071 (PEP 3109 raise changes) +# 3081 (PEP 3137 make __file__ and __name__ unicode) +# 3091 (kill str8 interning) +# 3101 (merge from 2.6a0, see 62151) +# 3103 (__file__ points to source file) +# Python 3.0a4: 3111 (WITH_CLEANUP optimization). +# Python 3.0b1: 3131 (lexical exception stacking, including POP_EXCEPT + #3021) +# Python 3.1a1: 3141 (optimize list, set and dict comprehensions: +# change LIST_APPEND and SET_ADD, add MAP_ADD #2183) +# Python 3.1a1: 3151 (optimize conditional branches: +# introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE + #4715) +# Python 3.2a1: 3160 (add SETUP_WITH #6101) +# tag: cpython-32 +# Python 3.2a2: 3170 (add DUP_TOP_TWO, remove DUP_TOPX and ROT_FOUR #9225) +# tag: cpython-32 +# Python 3.2a3 3180 (add DELETE_DEREF #4617) +# Python 3.3a1 3190 (__class__ super closure changed) +# Python 3.3a1 3200 (PEP 3155 __qualname__ added #13448) +# Python 3.3a1 3210 (added size modulo 2**32 to the pyc header #13645) +# Python 3.3a2 3220 (changed PEP 380 implementation #14230) +# Python 3.3a4 3230 (revert changes to implicit __class__ closure #14857) +# Python 3.4a1 3250 (evaluate positional default arguments before +# keyword-only defaults #16967) +# Python 3.4a1 3260 (add LOAD_CLASSDEREF; allow locals of class to override +# free vars #17853) +# Python 3.4a1 3270 (various tweaks to the __class__ closure #12370) +# Python 3.4a1 3280 (remove implicit class argument) +# Python 3.4a4 3290 (changes to __qualname__ computation #19301) +# Python 3.4a4 3300 (more changes to __qualname__ computation #19301) +# Python 3.4rc2 3310 (alter __qualname__ computation #20625) +# Python 3.5a1 3320 (PEP 465: Matrix multiplication operator #21176) +# Python 3.5b1 3330 (PEP 448: Additional Unpacking Generalizations #2292) +# Python 3.5b2 3340 (fix dictionary display evaluation order #11205) +# Python 3.5b3 3350 (add GET_YIELD_FROM_ITER opcode #24400) +# Python 3.5.2 3351 (fix BUILD_MAP_UNPACK_WITH_CALL opcode #27286) +# Python 3.6a0 3360 (add FORMAT_VALUE opcode #25483) +# Python 3.6a1 3361 (lineno delta of code.co_lnotab becomes signed #26107) +# Python 3.6a2 3370 (16 bit wordcode #26647) +# Python 3.6a2 3371 (add BUILD_CONST_KEY_MAP opcode #27140) +# Python 3.6a2 3372 (MAKE_FUNCTION simplification, remove MAKE_CLOSURE +# #27095) +# Python 3.6b1 3373 (add BUILD_STRING opcode #27078) +# Python 3.6b1 3375 (add SETUP_ANNOTATIONS and STORE_ANNOTATION opcodes +# #27985) +# Python 3.6b1 3376 (simplify CALL_FUNCTIONs & BUILD_MAP_UNPACK_WITH_CALL + #27213) +# Python 3.6b1 3377 (set __class__ cell from type.__new__ #23722) +# Python 3.6b2 3378 (add BUILD_TUPLE_UNPACK_WITH_CALL #28257) +# Python 3.6rc1 3379 (more thorough __class__ validation #23722) +# Python 3.7a1 3390 (add LOAD_METHOD and CALL_METHOD opcodes #26110) +# Python 3.7a2 3391 (update GET_AITER #31709) +# Python 3.7a4 3392 (PEP 552: Deterministic pycs #31650) +# Python 3.7b1 3393 (remove STORE_ANNOTATION opcode #32550) +# Python 3.7b5 3394 (restored docstring as the firts stmt in the body; +# this might affected the first line number #32911) +# +# MAGIC must change whenever the bytecode emitted by the compiler may no +# longer be understood by older implementations of the eval loop (usually +# due to the addition of new opcodes). +# +# Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array +# in PC/launcher.c must also be updated. + +MAGIC_NUMBER = (3394).to_bytes(2, 'little') + b'\r\n' +_RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c + +_PYCACHE = '__pycache__' +_OPT = 'opt-' + +SOURCE_SUFFIXES = ['.py'] # _setup() adds .pyw as needed. + +BYTECODE_SUFFIXES = ['.pyc'] +# Deprecated. +DEBUG_BYTECODE_SUFFIXES = OPTIMIZED_BYTECODE_SUFFIXES = BYTECODE_SUFFIXES + +def cache_from_source(path, debug_override=None, *, optimization=None): + """Given the path to a .py file, return the path to its .pyc file. + + The .py file does not need to exist; this simply returns the path to the + .pyc file calculated as if the .py file were imported. + + The 'optimization' parameter controls the presumed optimization level of + the bytecode file. If 'optimization' is not None, the string representation + of the argument is taken and verified to be alphanumeric (else ValueError + is raised). + + The debug_override parameter is deprecated. If debug_override is not None, + a True value is the same as setting 'optimization' to the empty string + while a False value is equivalent to setting 'optimization' to '1'. + + If sys.implementation.cache_tag is None then NotImplementedError is raised. + + """ + if debug_override is not None: + _warnings.warn('the debug_override parameter is deprecated; use ' + "'optimization' instead", DeprecationWarning) + if optimization is not None: + message = 'debug_override or optimization must be set to None' + raise TypeError(message) + optimization = '' if debug_override else 1 + path = _os.fspath(path) + head, tail = _path_split(path) + base, sep, rest = tail.rpartition('.') + tag = sys.implementation.cache_tag + if tag is None: + raise NotImplementedError('sys.implementation.cache_tag is None') + almost_filename = ''.join([(base if base else rest), sep, tag]) + if optimization is None: + if sys.flags.optimize == 0: + optimization = '' + else: + optimization = sys.flags.optimize + optimization = str(optimization) + if optimization != '': + if not optimization.isalnum(): + raise ValueError('{!r} is not alphanumeric'.format(optimization)) + almost_filename = '{}.{}{}'.format(almost_filename, _OPT, optimization) + return _path_join(head, _PYCACHE, almost_filename + BYTECODE_SUFFIXES[0]) + + +def source_from_cache(path): + """Given the path to a .pyc. file, return the path to its .py file. + + The .pyc file does not need to exist; this simply returns the path to + the .py file calculated to correspond to the .pyc file. If path does + not conform to PEP 3147/488 format, ValueError will be raised. If + sys.implementation.cache_tag is None then NotImplementedError is raised. + + """ + if sys.implementation.cache_tag is None: + raise NotImplementedError('sys.implementation.cache_tag is None') + path = _os.fspath(path) + head, pycache_filename = _path_split(path) + head, pycache = _path_split(head) + if pycache != _PYCACHE: + raise ValueError('{} not bottom-level directory in ' + '{!r}'.format(_PYCACHE, path)) + dot_count = pycache_filename.count('.') + if dot_count not in {2, 3}: + raise ValueError('expected only 2 or 3 dots in ' + '{!r}'.format(pycache_filename)) + elif dot_count == 3: + optimization = pycache_filename.rsplit('.', 2)[-2] + if not optimization.startswith(_OPT): + raise ValueError("optimization portion of filename does not start " + "with {!r}".format(_OPT)) + opt_level = optimization[len(_OPT):] + if not opt_level.isalnum(): + raise ValueError("optimization level {!r} is not an alphanumeric " + "value".format(optimization)) + base_filename = pycache_filename.partition('.')[0] + return _path_join(head, base_filename + SOURCE_SUFFIXES[0]) + + +def _get_sourcefile(bytecode_path): + """Convert a bytecode file path to a source path (if possible). + + This function exists purely for backwards-compatibility for + PyImport_ExecCodeModuleWithFilenames() in the C API. + + """ + if len(bytecode_path) == 0: + return None + rest, _, extension = bytecode_path.rpartition('.') + if not rest or extension.lower()[-3:-1] != 'py': + return bytecode_path + try: + source_path = source_from_cache(bytecode_path) + except (NotImplementedError, ValueError): + source_path = bytecode_path[:-1] + return source_path if _path_isfile(source_path) else bytecode_path + + +def _get_cached(filename): + if filename.endswith(tuple(SOURCE_SUFFIXES)): + try: + return cache_from_source(filename) + except NotImplementedError: + pass + elif filename.endswith(tuple(BYTECODE_SUFFIXES)): + return filename + else: + return None + + +def _calc_mode(path): + """Calculate the mode permissions for a bytecode file.""" + try: + mode = _path_stat(path).st_mode + except OSError: + mode = 0o666 + # We always ensure write access so we can update cached files + # later even when the source files are read-only on Windows (#6074) + mode |= 0o200 + return mode + + +def _check_name(method): + """Decorator to verify that the module being requested matches the one the + loader can handle. + + The first argument (self) must define _name which the second argument is + compared against. If the comparison fails then ImportError is raised. + + """ + def _check_name_wrapper(self, name=None, *args, **kwargs): + if name is None: + name = self.name + elif self.name != name: + raise ImportError('loader for %s cannot handle %s' % + (self.name, name), name=name) + return method(self, name, *args, **kwargs) + try: + _wrap = _bootstrap._wrap + except NameError: + # XXX yuck + def _wrap(new, old): + for replace in ['__module__', '__name__', '__qualname__', '__doc__']: + if hasattr(old, replace): + setattr(new, replace, getattr(old, replace)) + new.__dict__.update(old.__dict__) + _wrap(_check_name_wrapper, method) + return _check_name_wrapper + + +def _find_module_shim(self, fullname): + """Try to find a loader for the specified module by delegating to + self.find_loader(). + + This method is deprecated in favor of finder.find_spec(). + + """ + # Call find_loader(). If it returns a string (indicating this + # is a namespace package portion), generate a warning and + # return None. + loader, portions = self.find_loader(fullname) + if loader is None and len(portions): + msg = 'Not importing directory {}: missing __init__' + _warnings.warn(msg.format(portions[0]), ImportWarning) + return loader + + +def _classify_pyc(data, name, exc_details): + """Perform basic validity checking of a pyc header and return the flags field, + which determines how the pyc should be further validated against the source. + + *data* is the contents of the pyc file. (Only the first 16 bytes are + required, though.) + + *name* is the name of the module being imported. It is used for logging. + + *exc_details* is a dictionary passed to ImportError if it raised for + improved debugging. + + ImportError is raised when the magic number is incorrect or when the flags + field is invalid. EOFError is raised when the data is found to be truncated. + + """ + magic = data[:4] + if magic != MAGIC_NUMBER: + message = f'bad magic number in {name!r}: {magic!r}' + _bootstrap._verbose_message('{}', message) + raise ImportError(message, **exc_details) + if len(data) < 16: + message = f'reached EOF while reading pyc header of {name!r}' + _bootstrap._verbose_message('{}', message) + raise EOFError(message) + flags = _r_long(data[4:8]) + # Only the first two flags are defined. + if flags & ~0b11: + message = f'invalid flags {flags!r} in {name!r}' + raise ImportError(message, **exc_details) + return flags + + +def _validate_timestamp_pyc(data, source_mtime, source_size, name, + exc_details): + """Validate a pyc against the source last-modified time. + + *data* is the contents of the pyc file. (Only the first 16 bytes are + required.) + + *source_mtime* is the last modified timestamp of the source file. + + *source_size* is None or the size of the source file in bytes. + + *name* is the name of the module being imported. It is used for logging. + + *exc_details* is a dictionary passed to ImportError if it raised for + improved debugging. + + An ImportError is raised if the bytecode is stale. + + """ + if _r_long(data[8:12]) != (source_mtime & 0xFFFFFFFF): + message = f'bytecode is stale for {name!r}' + _bootstrap._verbose_message('{}', message) + raise ImportError(message, **exc_details) + if (source_size is not None and + _r_long(data[12:16]) != (source_size & 0xFFFFFFFF)): + raise ImportError(f'bytecode is stale for {name!r}', **exc_details) + + +def _validate_hash_pyc(data, source_hash, name, exc_details): + """Validate a hash-based pyc by checking the real source hash against the one in + the pyc header. + + *data* is the contents of the pyc file. (Only the first 16 bytes are + required.) + + *source_hash* is the importlib.util.source_hash() of the source file. + + *name* is the name of the module being imported. It is used for logging. + + *exc_details* is a dictionary passed to ImportError if it raised for + improved debugging. + + An ImportError is raised if the bytecode is stale. + + """ + if data[8:16] != source_hash: + raise ImportError( + f'hash in bytecode doesn\'t match hash of source {name!r}', + **exc_details, + ) + + +def _compile_bytecode(data, name=None, bytecode_path=None, source_path=None): + """Compile bytecode as found in a pyc.""" + code = marshal.loads(data) + if isinstance(code, _code_type): + _bootstrap._verbose_message('code object from {!r}', bytecode_path) + if source_path is not None: + _imp._fix_co_filename(code, source_path) + return code + else: + raise ImportError('Non-code object in {!r}'.format(bytecode_path), + name=name, path=bytecode_path) + + +def _code_to_timestamp_pyc(code, mtime=0, source_size=0): + "Produce the data for a timestamp-based pyc." + data = bytearray(MAGIC_NUMBER) + data.extend(_w_long(0)) + data.extend(_w_long(mtime)) + data.extend(_w_long(source_size)) + data.extend(marshal.dumps(code)) + return data + + +def _code_to_hash_pyc(code, source_hash, checked=True): + "Produce the data for a hash-based pyc." + data = bytearray(MAGIC_NUMBER) + flags = 0b1 | checked << 1 + data.extend(_w_long(flags)) + assert len(source_hash) == 8 + data.extend(source_hash) + data.extend(marshal.dumps(code)) + return data + + +def decode_source(source_bytes): + """Decode bytes representing source code and return the string. + + Universal newline support is used in the decoding. + """ + import tokenize # To avoid bootstrap issues. + source_bytes_readline = _io.BytesIO(source_bytes).readline + encoding = tokenize.detect_encoding(source_bytes_readline) + newline_decoder = _io.IncrementalNewlineDecoder(None, True) + return newline_decoder.decode(source_bytes.decode(encoding[0])) + + +# Module specifications ####################################################### + +_POPULATE = object() + + +def spec_from_file_location(name, location=None, *, loader=None, + submodule_search_locations=_POPULATE): + """Return a module spec based on a file location. + + To indicate that the module is a package, set + submodule_search_locations to a list of directory paths. An + empty list is sufficient, though its not otherwise useful to the + import system. + + The loader must take a spec as its only __init__() arg. + + """ + if location is None: + # The caller may simply want a partially populated location- + # oriented spec. So we set the location to a bogus value and + # fill in as much as we can. + location = '' + if hasattr(loader, 'get_filename'): + # ExecutionLoader + try: + location = loader.get_filename(name) + except ImportError: + pass + else: + location = _os.fspath(location) + + # If the location is on the filesystem, but doesn't actually exist, + # we could return None here, indicating that the location is not + # valid. However, we don't have a good way of testing since an + # indirect location (e.g. a zip file or URL) will look like a + # non-existent file relative to the filesystem. + + spec = _bootstrap.ModuleSpec(name, loader, origin=location) + spec._set_fileattr = True + + # Pick a loader if one wasn't provided. + if loader is None: + for loader_class, suffixes in _get_supported_file_loaders(): + if location.endswith(tuple(suffixes)): + loader = loader_class(name, location) + spec.loader = loader + break + else: + return None + + # Set submodule_search_paths appropriately. + if submodule_search_locations is _POPULATE: + # Check the loader. + if hasattr(loader, 'is_package'): + try: + is_package = loader.is_package(name) + except ImportError: + pass + else: + if is_package: + spec.submodule_search_locations = [] + else: + spec.submodule_search_locations = submodule_search_locations + if spec.submodule_search_locations == []: + if location: + dirname = _path_split(location)[0] + spec.submodule_search_locations.append(dirname) + + return spec + + +# Loaders ##################################################################### + +class WindowsRegistryFinder: + + """Meta path finder for modules declared in the Windows registry.""" + + REGISTRY_KEY = ( + 'Software\\Python\\PythonCore\\{sys_version}' + '\\Modules\\{fullname}') + REGISTRY_KEY_DEBUG = ( + 'Software\\Python\\PythonCore\\{sys_version}' + '\\Modules\\{fullname}\\Debug') + DEBUG_BUILD = False # Changed in _setup() + + @classmethod + def _open_registry(cls, key): + try: + return _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, key) + except OSError: + return _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, key) + + @classmethod + def _search_registry(cls, fullname): + if cls.DEBUG_BUILD: + registry_key = cls.REGISTRY_KEY_DEBUG + else: + registry_key = cls.REGISTRY_KEY + key = registry_key.format(fullname=fullname, + sys_version='%d.%d' % sys.version_info[:2]) + try: + with cls._open_registry(key) as hkey: + filepath = _winreg.QueryValue(hkey, '') + except OSError: + return None + return filepath + + @classmethod + def find_spec(cls, fullname, path=None, target=None): + filepath = cls._search_registry(fullname) + if filepath is None: + return None + try: + _path_stat(filepath) + except OSError: + return None + for loader, suffixes in _get_supported_file_loaders(): + if filepath.endswith(tuple(suffixes)): + spec = _bootstrap.spec_from_loader(fullname, + loader(fullname, filepath), + origin=filepath) + return spec + + @classmethod + def find_module(cls, fullname, path=None): + """Find module named in the registry. + + This method is deprecated. Use exec_module() instead. + + """ + spec = cls.find_spec(fullname, path) + if spec is not None: + return spec.loader + else: + return None + + +class _LoaderBasics: + + """Base class of common code needed by both SourceLoader and + SourcelessFileLoader.""" + + def is_package(self, fullname): + """Concrete implementation of InspectLoader.is_package by checking if + the path returned by get_filename has a filename of '__init__.py'.""" + filename = _path_split(self.get_filename(fullname))[1] + filename_base = filename.rsplit('.', 1)[0] + tail_name = fullname.rpartition('.')[2] + return filename_base == '__init__' and tail_name != '__init__' + + def create_module(self, spec): + """Use default semantics for module creation.""" + + def exec_module(self, module): + """Execute the module.""" + code = self.get_code(module.__name__) + if code is None: + raise ImportError('cannot load module {!r} when get_code() ' + 'returns None'.format(module.__name__)) + _bootstrap._call_with_frames_removed(exec, code, module.__dict__) + + def load_module(self, fullname): + """This module is deprecated.""" + return _bootstrap._load_module_shim(self, fullname) + + +class SourceLoader(_LoaderBasics): + + def path_mtime(self, path): + """Optional method that returns the modification time (an int) for the + specified path, where path is a str. + + Raises OSError when the path cannot be handled. + """ + raise OSError + + def path_stats(self, path): + """Optional method returning a metadata dict for the specified path + to by the path (str). + Possible keys: + - 'mtime' (mandatory) is the numeric timestamp of last source + code modification; + - 'size' (optional) is the size in bytes of the source code. + + Implementing this method allows the loader to read bytecode files. + Raises OSError when the path cannot be handled. + """ + return {'mtime': self.path_mtime(path)} + + def _cache_bytecode(self, source_path, cache_path, data): + """Optional method which writes data (bytes) to a file path (a str). + + Implementing this method allows for the writing of bytecode files. + + The source path is needed in order to correctly transfer permissions + """ + # For backwards compatibility, we delegate to set_data() + return self.set_data(cache_path, data) + + def set_data(self, path, data): + """Optional method which writes data (bytes) to a file path (a str). + + Implementing this method allows for the writing of bytecode files. + """ + + + def get_source(self, fullname): + """Concrete implementation of InspectLoader.get_source.""" + path = self.get_filename(fullname) + try: + source_bytes = self.get_data(path) + except OSError as exc: + raise ImportError('source not available through get_data()', + name=fullname) from exc + return decode_source(source_bytes) + + def source_to_code(self, data, path, *, _optimize=-1): + """Return the code object compiled from source. + + The 'data' argument can be any object type that compile() supports. + """ + return _bootstrap._call_with_frames_removed(compile, data, path, 'exec', + dont_inherit=True, optimize=_optimize) + + def get_code(self, fullname): + """Concrete implementation of InspectLoader.get_code. + + Reading of bytecode requires path_stats to be implemented. To write + bytecode, set_data must also be implemented. + + """ + source_path = self.get_filename(fullname) + source_mtime = None + source_bytes = None + source_hash = None + hash_based = False + check_source = True + try: + bytecode_path = cache_from_source(source_path) + except NotImplementedError: + bytecode_path = None + else: + try: + st = self.path_stats(source_path) + except OSError: + pass + else: + source_mtime = int(st['mtime']) + try: + data = self.get_data(bytecode_path) + except OSError: + pass + else: + exc_details = { + 'name': fullname, + 'path': bytecode_path, + } + try: + flags = _classify_pyc(data, fullname, exc_details) + bytes_data = memoryview(data)[16:] + hash_based = flags & 0b1 != 0 + if hash_based: + check_source = flags & 0b10 != 0 + if (_imp.check_hash_based_pycs != 'never' and + (check_source or + _imp.check_hash_based_pycs == 'always')): + source_bytes = self.get_data(source_path) + source_hash = _imp.source_hash( + _RAW_MAGIC_NUMBER, + source_bytes, + ) + _validate_hash_pyc(data, source_hash, fullname, + exc_details) + else: + _validate_timestamp_pyc( + data, + source_mtime, + st['size'], + fullname, + exc_details, + ) + except (ImportError, EOFError): + pass + else: + _bootstrap._verbose_message('{} matches {}', bytecode_path, + source_path) + return _compile_bytecode(bytes_data, name=fullname, + bytecode_path=bytecode_path, + source_path=source_path) + if source_bytes is None: + source_bytes = self.get_data(source_path) + code_object = self.source_to_code(source_bytes, source_path) + _bootstrap._verbose_message('code object from {}', source_path) + if (not sys.dont_write_bytecode and bytecode_path is not None and + source_mtime is not None): + if hash_based: + if source_hash is None: + source_hash = _imp.source_hash(source_bytes) + data = _code_to_hash_pyc(code_object, source_hash, check_source) + else: + data = _code_to_timestamp_pyc(code_object, source_mtime, + len(source_bytes)) + try: + self._cache_bytecode(source_path, bytecode_path, data) + _bootstrap._verbose_message('wrote {!r}', bytecode_path) + except NotImplementedError: + pass + return code_object + + +class FileLoader: + + """Base file loader class which implements the loader protocol methods that + require file system usage.""" + + def __init__(self, fullname, path): + """Cache the module name and the path to the file found by the + finder.""" + self.name = fullname + self.path = path + + def __eq__(self, other): + return (self.__class__ == other.__class__ and + self.__dict__ == other.__dict__) + + def __hash__(self): + return hash(self.name) ^ hash(self.path) + + @_check_name + def load_module(self, fullname): + """Load a module from a file. + + This method is deprecated. Use exec_module() instead. + + """ + # The only reason for this method is for the name check. + # Issue #14857: Avoid the zero-argument form of super so the implementation + # of that form can be updated without breaking the frozen module + return super(FileLoader, self).load_module(fullname) + + @_check_name + def get_filename(self, fullname): + """Return the path to the source file as found by the finder.""" + return self.path + + def get_data(self, path): + """Return the data from path as raw bytes.""" + with _io.FileIO(path, 'r') as file: + return file.read() + + # ResourceReader ABC API. + + @_check_name + def get_resource_reader(self, module): + if self.is_package(module): + return self + return None + + def open_resource(self, resource): + path = _path_join(_path_split(self.path)[0], resource) + return _io.FileIO(path, 'r') + + def resource_path(self, resource): + if not self.is_resource(resource): + raise FileNotFoundError + path = _path_join(_path_split(self.path)[0], resource) + return path + + def is_resource(self, name): + if path_sep in name: + return False + path = _path_join(_path_split(self.path)[0], name) + return _path_isfile(path) + + def contents(self): + return iter(_os.listdir(_path_split(self.path)[0])) + + +class SourceFileLoader(FileLoader, SourceLoader): + + """Concrete implementation of SourceLoader using the file system.""" + + def path_stats(self, path): + """Return the metadata for the path.""" + st = _path_stat(path) + return {'mtime': st.st_mtime, 'size': st.st_size} + + def _cache_bytecode(self, source_path, bytecode_path, data): + # Adapt between the two APIs + mode = _calc_mode(source_path) + return self.set_data(bytecode_path, data, _mode=mode) + + def set_data(self, path, data, *, _mode=0o666): + """Write bytes data to a file.""" + parent, filename = _path_split(path) + path_parts = [] + # Figure out what directories are missing. + while parent and not _path_isdir(parent): + parent, part = _path_split(parent) + path_parts.append(part) + # Create needed directories. + for part in reversed(path_parts): + parent = _path_join(parent, part) + try: + _os.mkdir(parent) + except FileExistsError: + # Probably another Python process already created the dir. + continue + except OSError as exc: + # Could be a permission error, read-only filesystem: just forget + # about writing the data. + _bootstrap._verbose_message('could not create {!r}: {!r}', + parent, exc) + return + try: + _write_atomic(path, data, _mode) + _bootstrap._verbose_message('created {!r}', path) + except OSError as exc: + # Same as above: just don't write the bytecode. + _bootstrap._verbose_message('could not create {!r}: {!r}', path, + exc) + + +class SourcelessFileLoader(FileLoader, _LoaderBasics): + + """Loader which handles sourceless file imports.""" + + def get_code(self, fullname): + path = self.get_filename(fullname) + data = self.get_data(path) + # Call _classify_pyc to do basic validation of the pyc but ignore the + # result. There's no source to check against. + exc_details = { + 'name': fullname, + 'path': path, + } + _classify_pyc(data, fullname, exc_details) + return _compile_bytecode( + memoryview(data)[16:], + name=fullname, + bytecode_path=path, + ) + + def get_source(self, fullname): + """Return None as there is no source code.""" + return None + + +# Filled in by _setup(). +EXTENSION_SUFFIXES = [] + + +class ExtensionFileLoader(FileLoader, _LoaderBasics): + + """Loader for extension modules. + + The constructor is designed to work with FileFinder. + + """ + + def __init__(self, name, path): + self.name = name + self.path = path + + def __eq__(self, other): + return (self.__class__ == other.__class__ and + self.__dict__ == other.__dict__) + + def __hash__(self): + return hash(self.name) ^ hash(self.path) + + def create_module(self, spec): + """Create an unitialized extension module""" + module = _bootstrap._call_with_frames_removed( + _imp.create_dynamic, spec) + _bootstrap._verbose_message('extension module {!r} loaded from {!r}', + spec.name, self.path) + return module + + def exec_module(self, module): + """Initialize an extension module""" + _bootstrap._call_with_frames_removed(_imp.exec_dynamic, module) + _bootstrap._verbose_message('extension module {!r} executed from {!r}', + self.name, self.path) + + def is_package(self, fullname): + """Return True if the extension module is a package.""" + file_name = _path_split(self.path)[1] + return any(file_name == '__init__' + suffix + for suffix in EXTENSION_SUFFIXES) + + def get_code(self, fullname): + """Return None as an extension module cannot create a code object.""" + return None + + def get_source(self, fullname): + """Return None as extension modules have no source code.""" + return None + + @_check_name + def get_filename(self, fullname): + """Return the path to the source file as found by the finder.""" + return self.path + + +class _NamespacePath: + """Represents a namespace package's path. It uses the module name + to find its parent module, and from there it looks up the parent's + __path__. When this changes, the module's own path is recomputed, + using path_finder. For top-level modules, the parent module's path + is sys.path.""" + + def __init__(self, name, path, path_finder): + self._name = name + self._path = path + self._last_parent_path = tuple(self._get_parent_path()) + self._path_finder = path_finder + + def _find_parent_path_names(self): + """Returns a tuple of (parent-module-name, parent-path-attr-name)""" + parent, dot, me = self._name.rpartition('.') + if dot == '': + # This is a top-level module. sys.path contains the parent path. + return 'sys', 'path' + # Not a top-level module. parent-module.__path__ contains the + # parent path. + return parent, '__path__' + + def _get_parent_path(self): + parent_module_name, path_attr_name = self._find_parent_path_names() + return getattr(sys.modules[parent_module_name], path_attr_name) + + def _recalculate(self): + # If the parent's path has changed, recalculate _path + parent_path = tuple(self._get_parent_path()) # Make a copy + if parent_path != self._last_parent_path: + spec = self._path_finder(self._name, parent_path) + # Note that no changes are made if a loader is returned, but we + # do remember the new parent path + if spec is not None and spec.loader is None: + if spec.submodule_search_locations: + self._path = spec.submodule_search_locations + self._last_parent_path = parent_path # Save the copy + return self._path + + def __iter__(self): + return iter(self._recalculate()) + + def __setitem__(self, index, path): + self._path[index] = path + + def __len__(self): + return len(self._recalculate()) + + def __repr__(self): + return '_NamespacePath({!r})'.format(self._path) + + def __contains__(self, item): + return item in self._recalculate() + + def append(self, item): + self._path.append(item) + + +# We use this exclusively in module_from_spec() for backward-compatibility. +class _NamespaceLoader: + def __init__(self, name, path, path_finder): + self._path = _NamespacePath(name, path, path_finder) + + @classmethod + def module_repr(cls, module): + """Return repr for the module. + + The method is deprecated. The import machinery does the job itself. + + """ + return ''.format(module.__name__) + + def is_package(self, fullname): + return True + + def get_source(self, fullname): + return '' + + def get_code(self, fullname): + return compile('', '', 'exec', dont_inherit=True) + + def create_module(self, spec): + """Use default semantics for module creation.""" + + def exec_module(self, module): + pass + + def load_module(self, fullname): + """Load a namespace module. + + This method is deprecated. Use exec_module() instead. + + """ + # The import system never calls this method. + _bootstrap._verbose_message('namespace module loaded with path {!r}', + self._path) + return _bootstrap._load_module_shim(self, fullname) + + +# Finders ##################################################################### + +class PathFinder: + + """Meta path finder for sys.path and package __path__ attributes.""" + + @classmethod + def invalidate_caches(cls): + """Call the invalidate_caches() method on all path entry finders + stored in sys.path_importer_caches (where implemented).""" + for name, finder in list(sys.path_importer_cache.items()): + if finder is None: + del sys.path_importer_cache[name] + elif hasattr(finder, 'invalidate_caches'): + finder.invalidate_caches() + + @classmethod + def _path_hooks(cls, path): + """Search sys.path_hooks for a finder for 'path'.""" + if sys.path_hooks is not None and not sys.path_hooks: + _warnings.warn('sys.path_hooks is empty', ImportWarning) + for hook in sys.path_hooks: + try: + return hook(path) + except ImportError: + continue + else: + return None + + @classmethod + def _path_importer_cache(cls, path): + """Get the finder for the path entry from sys.path_importer_cache. + + If the path entry is not in the cache, find the appropriate finder + and cache it. If no finder is available, store None. + + """ + if path == '': + try: + path = _os.getcwd() + except FileNotFoundError: + # Don't cache the failure as the cwd can easily change to + # a valid directory later on. + return None + try: + finder = sys.path_importer_cache[path] + except KeyError: + finder = cls._path_hooks(path) + sys.path_importer_cache[path] = finder + return finder + + @classmethod + def _legacy_get_spec(cls, fullname, finder): + # This would be a good place for a DeprecationWarning if + # we ended up going that route. + if hasattr(finder, 'find_loader'): + loader, portions = finder.find_loader(fullname) + else: + loader = finder.find_module(fullname) + portions = [] + if loader is not None: + return _bootstrap.spec_from_loader(fullname, loader) + spec = _bootstrap.ModuleSpec(fullname, None) + spec.submodule_search_locations = portions + return spec + + @classmethod + def _get_spec(cls, fullname, path, target=None): + """Find the loader or namespace_path for this module/package name.""" + # If this ends up being a namespace package, namespace_path is + # the list of paths that will become its __path__ + namespace_path = [] + for entry in path: + if not isinstance(entry, (str, bytes)): + continue + finder = cls._path_importer_cache(entry) + if finder is not None: + if hasattr(finder, 'find_spec'): + spec = finder.find_spec(fullname, target) + else: + spec = cls._legacy_get_spec(fullname, finder) + if spec is None: + continue + if spec.loader is not None: + return spec + portions = spec.submodule_search_locations + if portions is None: + raise ImportError('spec missing loader') + # This is possibly part of a namespace package. + # Remember these path entries (if any) for when we + # create a namespace package, and continue iterating + # on path. + namespace_path.extend(portions) + else: + spec = _bootstrap.ModuleSpec(fullname, None) + spec.submodule_search_locations = namespace_path + return spec + + @classmethod + def find_spec(cls, fullname, path=None, target=None): + """Try to find a spec for 'fullname' on sys.path or 'path'. + + The search is based on sys.path_hooks and sys.path_importer_cache. + """ + if path is None: + path = sys.path + spec = cls._get_spec(fullname, path, target) + if spec is None: + return None + elif spec.loader is None: + namespace_path = spec.submodule_search_locations + if namespace_path: + # We found at least one namespace path. Return a spec which + # can create the namespace package. + spec.origin = None + spec.submodule_search_locations = _NamespacePath(fullname, namespace_path, cls._get_spec) + return spec + else: + return None + else: + return spec + + @classmethod + def find_module(cls, fullname, path=None): + """find the module on sys.path or 'path' based on sys.path_hooks and + sys.path_importer_cache. + + This method is deprecated. Use find_spec() instead. + + """ + spec = cls.find_spec(fullname, path) + if spec is None: + return None + return spec.loader + + +class FileFinder: + + """File-based finder. + + Interactions with the file system are cached for performance, being + refreshed when the directory the finder is handling has been modified. + + """ + + def __init__(self, path, *loader_details): + """Initialize with the path to search on and a variable number of + 2-tuples containing the loader and the file suffixes the loader + recognizes.""" + loaders = [] + for loader, suffixes in loader_details: + loaders.extend((suffix, loader) for suffix in suffixes) + self._loaders = loaders + # Base (directory) path + self.path = path or '.' + self._path_mtime = -1 + self._path_cache = set() + self._relaxed_path_cache = set() + + def invalidate_caches(self): + """Invalidate the directory mtime.""" + self._path_mtime = -1 + + find_module = _find_module_shim + + def find_loader(self, fullname): + """Try to find a loader for the specified module, or the namespace + package portions. Returns (loader, list-of-portions). + + This method is deprecated. Use find_spec() instead. + + """ + spec = self.find_spec(fullname) + if spec is None: + return None, [] + return spec.loader, spec.submodule_search_locations or [] + + def _get_spec(self, loader_class, fullname, path, smsl, target): + loader = loader_class(fullname, path) + return spec_from_file_location(fullname, path, loader=loader, + submodule_search_locations=smsl) + + def find_spec(self, fullname, target=None): + """Try to find a spec for the specified module. + + Returns the matching spec, or None if not found. + """ + is_namespace = False + tail_module = fullname.rpartition('.')[2] + try: + mtime = _path_stat(self.path or _os.getcwd()).st_mtime + except OSError: + mtime = -1 + if mtime != self._path_mtime: + self._fill_cache() + self._path_mtime = mtime + # tail_module keeps the original casing, for __file__ and friends + if _relax_case(): + cache = self._relaxed_path_cache + cache_module = tail_module.lower() + else: + cache = self._path_cache + cache_module = tail_module + # Check if the module is the name of a directory (and thus a package). + if cache_module in cache: + base_path = _path_join(self.path, tail_module) + for suffix, loader_class in self._loaders: + init_filename = '__init__' + suffix + full_path = _path_join(base_path, init_filename) + if _path_isfile(full_path): + return self._get_spec(loader_class, fullname, full_path, [base_path], target) + else: + # If a namespace package, return the path if we don't + # find a module in the next section. + is_namespace = _path_isdir(base_path) + # Check for a file w/ a proper suffix exists. + for suffix, loader_class in self._loaders: + full_path = _path_join(self.path, tail_module + suffix) + _bootstrap._verbose_message('trying {}', full_path, verbosity=2) + if cache_module + suffix in cache: + if _path_isfile(full_path): + return self._get_spec(loader_class, fullname, full_path, + None, target) + if is_namespace: + _bootstrap._verbose_message('possible namespace for {}', base_path) + spec = _bootstrap.ModuleSpec(fullname, None) + spec.submodule_search_locations = [base_path] + return spec + return None + + def _fill_cache(self): + """Fill the cache of potential modules and packages for this directory.""" + path = self.path + try: + contents = _os.listdir(path or _os.getcwd()) + except (FileNotFoundError, PermissionError, NotADirectoryError): + # Directory has either been removed, turned into a file, or made + # unreadable. + contents = [] + # We store two cached versions, to handle runtime changes of the + # PYTHONCASEOK environment variable. + if not sys.platform.startswith('win'): + self._path_cache = set(contents) + else: + # Windows users can import modules with case-insensitive file + # suffixes (for legacy reasons). Make the suffix lowercase here + # so it's done once instead of for every import. This is safe as + # the specified suffixes to check against are always specified in a + # case-sensitive manner. + lower_suffix_contents = set() + for item in contents: + name, dot, suffix = item.partition('.') + if dot: + new_name = '{}.{}'.format(name, suffix.lower()) + else: + new_name = name + lower_suffix_contents.add(new_name) + self._path_cache = lower_suffix_contents + if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS): + self._relaxed_path_cache = {fn.lower() for fn in contents} + + @classmethod + def path_hook(cls, *loader_details): + """A class method which returns a closure to use on sys.path_hook + which will return an instance using the specified loaders and the path + called on the closure. + + If the path called on the closure is not a directory, ImportError is + raised. + + """ + def path_hook_for_FileFinder(path): + """Path hook for importlib.machinery.FileFinder.""" + if not _path_isdir(path): + raise ImportError('only directories are supported', path=path) + return cls(path, *loader_details) + + return path_hook_for_FileFinder + + def __repr__(self): + return 'FileFinder({!r})'.format(self.path) + + +# Import setup ############################################################### + +def _fix_up_module(ns, name, pathname, cpathname=None): + # This function is used by PyImport_ExecCodeModuleObject(). + loader = ns.get('__loader__') + spec = ns.get('__spec__') + if not loader: + if spec: + loader = spec.loader + elif pathname == cpathname: + loader = SourcelessFileLoader(name, pathname) + else: + loader = SourceFileLoader(name, pathname) + if not spec: + spec = spec_from_file_location(name, pathname, loader=loader) + try: + ns['__spec__'] = spec + ns['__loader__'] = loader + ns['__file__'] = pathname + ns['__cached__'] = cpathname + except Exception: + # Not important enough to report. + pass + + +def _get_supported_file_loaders(): + """Returns a list of file-based module loaders. + + Each item is a tuple (loader, suffixes). + """ + extensions = ExtensionFileLoader, _imp.extension_suffixes() + source = SourceFileLoader, SOURCE_SUFFIXES + bytecode = SourcelessFileLoader, BYTECODE_SUFFIXES + return [extensions, source, bytecode] + + +def _setup(_bootstrap_module): + """Setup the path-based importers for importlib by importing needed + built-in modules and injecting them into the global namespace. + + Other components are extracted from the core bootstrap module. + + """ + global sys, _imp, _bootstrap + _bootstrap = _bootstrap_module + sys = _bootstrap.sys + _imp = _bootstrap._imp + + # Directly load built-in modules needed during bootstrap. + self_module = sys.modules[__name__] + for builtin_name in ('_io', '_warnings', 'builtins', 'marshal'): + if builtin_name not in sys.modules: + builtin_module = _bootstrap._builtin_from_name(builtin_name) + else: + builtin_module = sys.modules[builtin_name] + setattr(self_module, builtin_name, builtin_module) + + # Directly load the os module (needed during bootstrap). + os_details = ('posix', ['/']), ('nt', ['\\', '/']) + for builtin_os, path_separators in os_details: + # Assumption made in _path_join() + assert all(len(sep) == 1 for sep in path_separators) + path_sep = path_separators[0] + if builtin_os in sys.modules: + os_module = sys.modules[builtin_os] + break + else: + try: + os_module = _bootstrap._builtin_from_name(builtin_os) + break + except ImportError: + continue + else: + raise ImportError('importlib requires posix or nt') + setattr(self_module, '_os', os_module) + setattr(self_module, 'path_sep', path_sep) + setattr(self_module, 'path_separators', ''.join(path_separators)) + + # Directly load the _thread module (needed during bootstrap). + thread_module = _bootstrap._builtin_from_name('_thread') + setattr(self_module, '_thread', thread_module) + + # Directly load the _weakref module (needed during bootstrap). + weakref_module = _bootstrap._builtin_from_name('_weakref') + setattr(self_module, '_weakref', weakref_module) + + # Directly load the winreg module (needed during bootstrap). + if builtin_os == 'nt': + winreg_module = _bootstrap._builtin_from_name('winreg') + setattr(self_module, '_winreg', winreg_module) + + # Constants + setattr(self_module, '_relax_case', _make_relax_case()) + EXTENSION_SUFFIXES.extend(_imp.extension_suffixes()) + if builtin_os == 'nt': + SOURCE_SUFFIXES.append('.pyw') + if '_d.pyd' in EXTENSION_SUFFIXES: + WindowsRegistryFinder.DEBUG_BUILD = True + + +def _install(_bootstrap_module): + """Install the path-based import components.""" + _setup(_bootstrap_module) + supported_loaders = _get_supported_file_loaders() + sys.path_hooks.extend([FileFinder.path_hook(*supported_loaders)]) + sys.meta_path.append(PathFinder) diff --git a/my_env/Lib/importlib/abc.py b/my_env/Lib/importlib/abc.py new file mode 100644 index 000000000..4b2d3de6d --- /dev/null +++ b/my_env/Lib/importlib/abc.py @@ -0,0 +1,388 @@ +"""Abstract base classes related to import.""" +from . import _bootstrap +from . import _bootstrap_external +from . import machinery +try: + import _frozen_importlib +except ImportError as exc: + if exc.name != '_frozen_importlib': + raise + _frozen_importlib = None +try: + import _frozen_importlib_external +except ImportError as exc: + _frozen_importlib_external = _bootstrap_external +import abc +import warnings + + +def _register(abstract_cls, *classes): + for cls in classes: + abstract_cls.register(cls) + if _frozen_importlib is not None: + try: + frozen_cls = getattr(_frozen_importlib, cls.__name__) + except AttributeError: + frozen_cls = getattr(_frozen_importlib_external, cls.__name__) + abstract_cls.register(frozen_cls) + + +class Finder(metaclass=abc.ABCMeta): + + """Legacy abstract base class for import finders. + + It may be subclassed for compatibility with legacy third party + reimplementations of the import system. Otherwise, finder + implementations should derive from the more specific MetaPathFinder + or PathEntryFinder ABCs. + + Deprecated since Python 3.3 + """ + + @abc.abstractmethod + def find_module(self, fullname, path=None): + """An abstract method that should find a module. + The fullname is a str and the optional path is a str or None. + Returns a Loader object or None. + """ + + +class MetaPathFinder(Finder): + + """Abstract base class for import finders on sys.meta_path.""" + + # We don't define find_spec() here since that would break + # hasattr checks we do to support backward compatibility. + + def find_module(self, fullname, path): + """Return a loader for the module. + + If no module is found, return None. The fullname is a str and + the path is a list of strings or None. + + This method is deprecated since Python 3.4 in favor of + finder.find_spec(). If find_spec() exists then backwards-compatible + functionality is provided for this method. + + """ + warnings.warn("MetaPathFinder.find_module() is deprecated since Python " + "3.4 in favor of MetaPathFinder.find_spec() " + "(available since 3.4)", + DeprecationWarning, + stacklevel=2) + if not hasattr(self, 'find_spec'): + return None + found = self.find_spec(fullname, path) + return found.loader if found is not None else None + + def invalidate_caches(self): + """An optional method for clearing the finder's cache, if any. + This method is used by importlib.invalidate_caches(). + """ + +_register(MetaPathFinder, machinery.BuiltinImporter, machinery.FrozenImporter, + machinery.PathFinder, machinery.WindowsRegistryFinder) + + +class PathEntryFinder(Finder): + + """Abstract base class for path entry finders used by PathFinder.""" + + # We don't define find_spec() here since that would break + # hasattr checks we do to support backward compatibility. + + def find_loader(self, fullname): + """Return (loader, namespace portion) for the path entry. + + The fullname is a str. The namespace portion is a sequence of + path entries contributing to part of a namespace package. The + sequence may be empty. If loader is not None, the portion will + be ignored. + + The portion will be discarded if another path entry finder + locates the module as a normal module or package. + + This method is deprecated since Python 3.4 in favor of + finder.find_spec(). If find_spec() is provided than backwards-compatible + functionality is provided. + """ + warnings.warn("PathEntryFinder.find_loader() is deprecated since Python " + "3.4 in favor of PathEntryFinder.find_spec() " + "(available since 3.4)", + DeprecationWarning, + stacklevel=2) + if not hasattr(self, 'find_spec'): + return None, [] + found = self.find_spec(fullname) + if found is not None: + if not found.submodule_search_locations: + portions = [] + else: + portions = found.submodule_search_locations + return found.loader, portions + else: + return None, [] + + find_module = _bootstrap_external._find_module_shim + + def invalidate_caches(self): + """An optional method for clearing the finder's cache, if any. + This method is used by PathFinder.invalidate_caches(). + """ + +_register(PathEntryFinder, machinery.FileFinder) + + +class Loader(metaclass=abc.ABCMeta): + + """Abstract base class for import loaders.""" + + def create_module(self, spec): + """Return a module to initialize and into which to load. + + This method should raise ImportError if anything prevents it + from creating a new module. It may return None to indicate + that the spec should create the new module. + """ + # By default, defer to default semantics for the new module. + return None + + # We don't define exec_module() here since that would break + # hasattr checks we do to support backward compatibility. + + def load_module(self, fullname): + """Return the loaded module. + + The module must be added to sys.modules and have import-related + attributes set properly. The fullname is a str. + + ImportError is raised on failure. + + This method is deprecated in favor of loader.exec_module(). If + exec_module() exists then it is used to provide a backwards-compatible + functionality for this method. + + """ + if not hasattr(self, 'exec_module'): + raise ImportError + return _bootstrap._load_module_shim(self, fullname) + + def module_repr(self, module): + """Return a module's repr. + + Used by the module type when the method does not raise + NotImplementedError. + + This method is deprecated. + + """ + # The exception will cause ModuleType.__repr__ to ignore this method. + raise NotImplementedError + + +class ResourceLoader(Loader): + + """Abstract base class for loaders which can return data from their + back-end storage. + + This ABC represents one of the optional protocols specified by PEP 302. + + """ + + @abc.abstractmethod + def get_data(self, path): + """Abstract method which when implemented should return the bytes for + the specified path. The path must be a str.""" + raise OSError + + +class InspectLoader(Loader): + + """Abstract base class for loaders which support inspection about the + modules they can load. + + This ABC represents one of the optional protocols specified by PEP 302. + + """ + + def is_package(self, fullname): + """Optional method which when implemented should return whether the + module is a package. The fullname is a str. Returns a bool. + + Raises ImportError if the module cannot be found. + """ + raise ImportError + + def get_code(self, fullname): + """Method which returns the code object for the module. + + The fullname is a str. Returns a types.CodeType if possible, else + returns None if a code object does not make sense + (e.g. built-in module). Raises ImportError if the module cannot be + found. + """ + source = self.get_source(fullname) + if source is None: + return None + return self.source_to_code(source) + + @abc.abstractmethod + def get_source(self, fullname): + """Abstract method which should return the source code for the + module. The fullname is a str. Returns a str. + + Raises ImportError if the module cannot be found. + """ + raise ImportError + + @staticmethod + def source_to_code(data, path=''): + """Compile 'data' into a code object. + + The 'data' argument can be anything that compile() can handle. The'path' + argument should be where the data was retrieved (when applicable).""" + return compile(data, path, 'exec', dont_inherit=True) + + exec_module = _bootstrap_external._LoaderBasics.exec_module + load_module = _bootstrap_external._LoaderBasics.load_module + +_register(InspectLoader, machinery.BuiltinImporter, machinery.FrozenImporter) + + +class ExecutionLoader(InspectLoader): + + """Abstract base class for loaders that wish to support the execution of + modules as scripts. + + This ABC represents one of the optional protocols specified in PEP 302. + + """ + + @abc.abstractmethod + def get_filename(self, fullname): + """Abstract method which should return the value that __file__ is to be + set to. + + Raises ImportError if the module cannot be found. + """ + raise ImportError + + def get_code(self, fullname): + """Method to return the code object for fullname. + + Should return None if not applicable (e.g. built-in module). + Raise ImportError if the module cannot be found. + """ + source = self.get_source(fullname) + if source is None: + return None + try: + path = self.get_filename(fullname) + except ImportError: + return self.source_to_code(source) + else: + return self.source_to_code(source, path) + +_register(ExecutionLoader, machinery.ExtensionFileLoader) + + +class FileLoader(_bootstrap_external.FileLoader, ResourceLoader, ExecutionLoader): + + """Abstract base class partially implementing the ResourceLoader and + ExecutionLoader ABCs.""" + +_register(FileLoader, machinery.SourceFileLoader, + machinery.SourcelessFileLoader) + + +class SourceLoader(_bootstrap_external.SourceLoader, ResourceLoader, ExecutionLoader): + + """Abstract base class for loading source code (and optionally any + corresponding bytecode). + + To support loading from source code, the abstractmethods inherited from + ResourceLoader and ExecutionLoader need to be implemented. To also support + loading from bytecode, the optional methods specified directly by this ABC + is required. + + Inherited abstractmethods not implemented in this ABC: + + * ResourceLoader.get_data + * ExecutionLoader.get_filename + + """ + + def path_mtime(self, path): + """Return the (int) modification time for the path (str).""" + if self.path_stats.__func__ is SourceLoader.path_stats: + raise OSError + return int(self.path_stats(path)['mtime']) + + def path_stats(self, path): + """Return a metadata dict for the source pointed to by the path (str). + Possible keys: + - 'mtime' (mandatory) is the numeric timestamp of last source + code modification; + - 'size' (optional) is the size in bytes of the source code. + """ + if self.path_mtime.__func__ is SourceLoader.path_mtime: + raise OSError + return {'mtime': self.path_mtime(path)} + + def set_data(self, path, data): + """Write the bytes to the path (if possible). + + Accepts a str path and data as bytes. + + Any needed intermediary directories are to be created. If for some + reason the file cannot be written because of permissions, fail + silently. + """ + +_register(SourceLoader, machinery.SourceFileLoader) + + +class ResourceReader(metaclass=abc.ABCMeta): + + """Abstract base class to provide resource-reading support. + + Loaders that support resource reading are expected to implement + the ``get_resource_reader(fullname)`` method and have it either return None + or an object compatible with this ABC. + """ + + @abc.abstractmethod + def open_resource(self, resource): + """Return an opened, file-like object for binary reading. + + The 'resource' argument is expected to represent only a file name + and thus not contain any subdirectory components. + + If the resource cannot be found, FileNotFoundError is raised. + """ + raise FileNotFoundError + + @abc.abstractmethod + def resource_path(self, resource): + """Return the file system path to the specified resource. + + The 'resource' argument is expected to represent only a file name + and thus not contain any subdirectory components. + + If the resource does not exist on the file system, raise + FileNotFoundError. + """ + raise FileNotFoundError + + @abc.abstractmethod + def is_resource(self, name): + """Return True if the named 'name' is consider a resource.""" + raise FileNotFoundError + + @abc.abstractmethod + def contents(self): + """Return an iterable of strings over the contents of the package.""" + return [] + + +_register(ResourceReader, machinery.SourceFileLoader) diff --git a/my_env/Lib/importlib/machinery.py b/my_env/Lib/importlib/machinery.py new file mode 100644 index 000000000..1b2b5c9b4 --- /dev/null +++ b/my_env/Lib/importlib/machinery.py @@ -0,0 +1,21 @@ +"""The machinery of importlib: finders, loaders, hooks, etc.""" + +import _imp + +from ._bootstrap import ModuleSpec +from ._bootstrap import BuiltinImporter +from ._bootstrap import FrozenImporter +from ._bootstrap_external import (SOURCE_SUFFIXES, DEBUG_BYTECODE_SUFFIXES, + OPTIMIZED_BYTECODE_SUFFIXES, BYTECODE_SUFFIXES, + EXTENSION_SUFFIXES) +from ._bootstrap_external import WindowsRegistryFinder +from ._bootstrap_external import PathFinder +from ._bootstrap_external import FileFinder +from ._bootstrap_external import SourceFileLoader +from ._bootstrap_external import SourcelessFileLoader +from ._bootstrap_external import ExtensionFileLoader + + +def all_suffixes(): + """Returns a list of all recognized module suffixes for this process""" + return SOURCE_SUFFIXES + BYTECODE_SUFFIXES + EXTENSION_SUFFIXES diff --git a/my_env/Lib/importlib/resources.py b/my_env/Lib/importlib/resources.py new file mode 100644 index 000000000..cbefdd540 --- /dev/null +++ b/my_env/Lib/importlib/resources.py @@ -0,0 +1,343 @@ +import os +import tempfile + +from . import abc as resources_abc +from contextlib import contextmanager, suppress +from importlib import import_module +from importlib.abc import ResourceLoader +from io import BytesIO, TextIOWrapper +from pathlib import Path +from types import ModuleType +from typing import Iterable, Iterator, Optional, Set, Union # noqa: F401 +from typing import cast +from typing.io import BinaryIO, TextIO +from zipimport import ZipImportError + + +__all__ = [ + 'Package', + 'Resource', + 'contents', + 'is_resource', + 'open_binary', + 'open_text', + 'path', + 'read_binary', + 'read_text', + ] + + +Package = Union[str, ModuleType] +Resource = Union[str, os.PathLike] + + +def _get_package(package) -> ModuleType: + """Take a package name or module object and return the module. + + If a name, the module is imported. If the passed or imported module + object is not a package, raise an exception. + """ + if hasattr(package, '__spec__'): + if package.__spec__.submodule_search_locations is None: + raise TypeError('{!r} is not a package'.format( + package.__spec__.name)) + else: + return package + else: + module = import_module(package) + if module.__spec__.submodule_search_locations is None: + raise TypeError('{!r} is not a package'.format(package)) + else: + return module + + +def _normalize_path(path) -> str: + """Normalize a path by ensuring it is a string. + + If the resulting string contains path separators, an exception is raised. + """ + parent, file_name = os.path.split(path) + if parent: + raise ValueError('{!r} must be only a file name'.format(path)) + else: + return file_name + + +def _get_resource_reader( + package: ModuleType) -> Optional[resources_abc.ResourceReader]: + # Return the package's loader if it's a ResourceReader. We can't use + # a issubclass() check here because apparently abc.'s __subclasscheck__() + # hook wants to create a weak reference to the object, but + # zipimport.zipimporter does not support weak references, resulting in a + # TypeError. That seems terrible. + spec = package.__spec__ + if hasattr(spec.loader, 'get_resource_reader'): + return cast(resources_abc.ResourceReader, + spec.loader.get_resource_reader(spec.name)) + return None + + +def _check_location(package): + if package.__spec__.origin is None or not package.__spec__.has_location: + raise FileNotFoundError(f'Package has no location {package!r}') + + +def open_binary(package: Package, resource: Resource) -> BinaryIO: + """Return a file-like object opened for binary reading of the resource.""" + resource = _normalize_path(resource) + package = _get_package(package) + reader = _get_resource_reader(package) + if reader is not None: + return reader.open_resource(resource) + _check_location(package) + absolute_package_path = os.path.abspath(package.__spec__.origin) + package_path = os.path.dirname(absolute_package_path) + full_path = os.path.join(package_path, resource) + try: + return open(full_path, mode='rb') + except OSError: + # Just assume the loader is a resource loader; all the relevant + # importlib.machinery loaders are and an AttributeError for + # get_data() will make it clear what is needed from the loader. + loader = cast(ResourceLoader, package.__spec__.loader) + data = None + if hasattr(package.__spec__.loader, 'get_data'): + with suppress(OSError): + data = loader.get_data(full_path) + if data is None: + package_name = package.__spec__.name + message = '{!r} resource not found in {!r}'.format( + resource, package_name) + raise FileNotFoundError(message) + else: + return BytesIO(data) + + +def open_text(package: Package, + resource: Resource, + encoding: str = 'utf-8', + errors: str = 'strict') -> TextIO: + """Return a file-like object opened for text reading of the resource.""" + resource = _normalize_path(resource) + package = _get_package(package) + reader = _get_resource_reader(package) + if reader is not None: + return TextIOWrapper(reader.open_resource(resource), encoding, errors) + _check_location(package) + absolute_package_path = os.path.abspath(package.__spec__.origin) + package_path = os.path.dirname(absolute_package_path) + full_path = os.path.join(package_path, resource) + try: + return open(full_path, mode='r', encoding=encoding, errors=errors) + except OSError: + # Just assume the loader is a resource loader; all the relevant + # importlib.machinery loaders are and an AttributeError for + # get_data() will make it clear what is needed from the loader. + loader = cast(ResourceLoader, package.__spec__.loader) + data = None + if hasattr(package.__spec__.loader, 'get_data'): + with suppress(OSError): + data = loader.get_data(full_path) + if data is None: + package_name = package.__spec__.name + message = '{!r} resource not found in {!r}'.format( + resource, package_name) + raise FileNotFoundError(message) + else: + return TextIOWrapper(BytesIO(data), encoding, errors) + + +def read_binary(package: Package, resource: Resource) -> bytes: + """Return the binary contents of the resource.""" + resource = _normalize_path(resource) + package = _get_package(package) + with open_binary(package, resource) as fp: + return fp.read() + + +def read_text(package: Package, + resource: Resource, + encoding: str = 'utf-8', + errors: str = 'strict') -> str: + """Return the decoded string of the resource. + + The decoding-related arguments have the same semantics as those of + bytes.decode(). + """ + resource = _normalize_path(resource) + package = _get_package(package) + with open_text(package, resource, encoding, errors) as fp: + return fp.read() + + +@contextmanager +def path(package: Package, resource: Resource) -> Iterator[Path]: + """A context manager providing a file path object to the resource. + + If the resource does not already exist on its own on the file system, + a temporary file will be created. If the file was created, the file + will be deleted upon exiting the context manager (no exception is + raised if the file was deleted prior to the context manager + exiting). + """ + resource = _normalize_path(resource) + package = _get_package(package) + reader = _get_resource_reader(package) + if reader is not None: + try: + yield Path(reader.resource_path(resource)) + return + except FileNotFoundError: + pass + else: + _check_location(package) + # Fall-through for both the lack of resource_path() *and* if + # resource_path() raises FileNotFoundError. + package_directory = Path(package.__spec__.origin).parent + file_path = package_directory / resource + if file_path.exists(): + yield file_path + else: + with open_binary(package, resource) as fp: + data = fp.read() + # Not using tempfile.NamedTemporaryFile as it leads to deeper 'try' + # blocks due to the need to close the temporary file to work on + # Windows properly. + fd, raw_path = tempfile.mkstemp() + try: + os.write(fd, data) + os.close(fd) + yield Path(raw_path) + finally: + try: + os.remove(raw_path) + except FileNotFoundError: + pass + + +def is_resource(package: Package, name: str) -> bool: + """True if 'name' is a resource inside 'package'. + + Directories are *not* resources. + """ + package = _get_package(package) + _normalize_path(name) + reader = _get_resource_reader(package) + if reader is not None: + return reader.is_resource(name) + try: + package_contents = set(contents(package)) + except (NotADirectoryError, FileNotFoundError): + return False + if name not in package_contents: + return False + # Just because the given file_name lives as an entry in the package's + # contents doesn't necessarily mean it's a resource. Directories are not + # resources, so let's try to find out if it's a directory or not. + path = Path(package.__spec__.origin).parent / name + return path.is_file() + + +def contents(package: Package) -> Iterable[str]: + """Return an iterable of entries in 'package'. + + Note that not all entries are resources. Specifically, directories are + not considered resources. Use `is_resource()` on each entry returned here + to check if it is a resource or not. + """ + package = _get_package(package) + reader = _get_resource_reader(package) + if reader is not None: + return reader.contents() + # Is the package a namespace package? By definition, namespace packages + # cannot have resources. We could use _check_location() and catch the + # exception, but that's extra work, so just inline the check. + elif package.__spec__.origin is None or not package.__spec__.has_location: + return () + else: + package_directory = Path(package.__spec__.origin).parent + return os.listdir(package_directory) + + +# Private implementation of ResourceReader and get_resource_reader() called +# from zipimport.c. Don't use these directly! We're implementing these in +# Python because 1) it's easier, 2) zipimport may get rewritten in Python +# itself at some point, so doing this all in C would difficult and a waste of +# effort. + +class _ZipImportResourceReader(resources_abc.ResourceReader): + """Private class used to support ZipImport.get_resource_reader(). + + This class is allowed to reference all the innards and private parts of + the zipimporter. + """ + + def __init__(self, zipimporter, fullname): + self.zipimporter = zipimporter + self.fullname = fullname + + def open_resource(self, resource): + fullname_as_path = self.fullname.replace('.', '/') + path = f'{fullname_as_path}/{resource}' + try: + return BytesIO(self.zipimporter.get_data(path)) + except OSError: + raise FileNotFoundError(path) + + def resource_path(self, resource): + # All resources are in the zip file, so there is no path to the file. + # Raising FileNotFoundError tells the higher level API to extract the + # binary data and create a temporary file. + raise FileNotFoundError + + def is_resource(self, name): + # Maybe we could do better, but if we can get the data, it's a + # resource. Otherwise it isn't. + fullname_as_path = self.fullname.replace('.', '/') + path = f'{fullname_as_path}/{name}' + try: + self.zipimporter.get_data(path) + except OSError: + return False + return True + + def contents(self): + # This is a bit convoluted, because fullname will be a module path, + # but _files is a list of file names relative to the top of the + # archive's namespace. We want to compare file paths to find all the + # names of things inside the module represented by fullname. So we + # turn the module path of fullname into a file path relative to the + # top of the archive, and then we iterate through _files looking for + # names inside that "directory". + fullname_path = Path(self.zipimporter.get_filename(self.fullname)) + relative_path = fullname_path.relative_to(self.zipimporter.archive) + # Don't forget that fullname names a package, so its path will include + # __init__.py, which we want to ignore. + assert relative_path.name == '__init__.py' + package_path = relative_path.parent + subdirs_seen = set() + for filename in self.zipimporter._files: + try: + relative = Path(filename).relative_to(package_path) + except ValueError: + continue + # If the path of the file (which is relative to the top of the zip + # namespace), relative to the package given when the resource + # reader was created, has a parent, then it's a name in a + # subdirectory and thus we skip it. + parent_name = relative.parent.name + if len(parent_name) == 0: + yield relative.name + elif parent_name not in subdirs_seen: + subdirs_seen.add(parent_name) + yield parent_name + + +# Called from zipimport.c +def _zipimport_get_resource_reader(zipimporter, fullname): + try: + if not zipimporter.is_package(fullname): + return None + except ZipImportError: + return None + return _ZipImportResourceReader(zipimporter, fullname) diff --git a/my_env/Lib/importlib/util.py b/my_env/Lib/importlib/util.py new file mode 100644 index 000000000..201e0f4cb --- /dev/null +++ b/my_env/Lib/importlib/util.py @@ -0,0 +1,300 @@ +"""Utility code for constructing importers, etc.""" +from . import abc +from ._bootstrap import module_from_spec +from ._bootstrap import _resolve_name +from ._bootstrap import spec_from_loader +from ._bootstrap import _find_spec +from ._bootstrap_external import MAGIC_NUMBER +from ._bootstrap_external import _RAW_MAGIC_NUMBER +from ._bootstrap_external import cache_from_source +from ._bootstrap_external import decode_source +from ._bootstrap_external import source_from_cache +from ._bootstrap_external import spec_from_file_location + +from contextlib import contextmanager +import _imp +import functools +import sys +import types +import warnings + + +def source_hash(source_bytes): + "Return the hash of *source_bytes* as used in hash-based pyc files." + return _imp.source_hash(_RAW_MAGIC_NUMBER, source_bytes) + + +def resolve_name(name, package): + """Resolve a relative module name to an absolute one.""" + if not name.startswith('.'): + return name + elif not package: + raise ValueError(f'no package specified for {repr(name)} ' + '(required for relative module names)') + level = 0 + for character in name: + if character != '.': + break + level += 1 + return _resolve_name(name[level:], package, level) + + +def _find_spec_from_path(name, path=None): + """Return the spec for the specified module. + + First, sys.modules is checked to see if the module was already imported. If + so, then sys.modules[name].__spec__ is returned. If that happens to be + set to None, then ValueError is raised. If the module is not in + sys.modules, then sys.meta_path is searched for a suitable spec with the + value of 'path' given to the finders. None is returned if no spec could + be found. + + Dotted names do not have their parent packages implicitly imported. You will + most likely need to explicitly import all parent packages in the proper + order for a submodule to get the correct spec. + + """ + if name not in sys.modules: + return _find_spec(name, path) + else: + module = sys.modules[name] + if module is None: + return None + try: + spec = module.__spec__ + except AttributeError: + raise ValueError('{}.__spec__ is not set'.format(name)) from None + else: + if spec is None: + raise ValueError('{}.__spec__ is None'.format(name)) + return spec + + +def find_spec(name, package=None): + """Return the spec for the specified module. + + First, sys.modules is checked to see if the module was already imported. If + so, then sys.modules[name].__spec__ is returned. If that happens to be + set to None, then ValueError is raised. If the module is not in + sys.modules, then sys.meta_path is searched for a suitable spec with the + value of 'path' given to the finders. None is returned if no spec could + be found. + + If the name is for submodule (contains a dot), the parent module is + automatically imported. + + The name and package arguments work the same as importlib.import_module(). + In other words, relative module names (with leading dots) work. + + """ + fullname = resolve_name(name, package) if name.startswith('.') else name + if fullname not in sys.modules: + parent_name = fullname.rpartition('.')[0] + if parent_name: + parent = __import__(parent_name, fromlist=['__path__']) + try: + parent_path = parent.__path__ + except AttributeError as e: + raise ModuleNotFoundError( + f"__path__ attribute not found on {parent_name!r} " + f"while trying to find {fullname!r}", name=fullname) from e + else: + parent_path = None + return _find_spec(fullname, parent_path) + else: + module = sys.modules[fullname] + if module is None: + return None + try: + spec = module.__spec__ + except AttributeError: + raise ValueError('{}.__spec__ is not set'.format(name)) from None + else: + if spec is None: + raise ValueError('{}.__spec__ is None'.format(name)) + return spec + + +@contextmanager +def _module_to_load(name): + is_reload = name in sys.modules + + module = sys.modules.get(name) + if not is_reload: + # This must be done before open() is called as the 'io' module + # implicitly imports 'locale' and would otherwise trigger an + # infinite loop. + module = type(sys)(name) + # This must be done before putting the module in sys.modules + # (otherwise an optimization shortcut in import.c becomes wrong) + module.__initializing__ = True + sys.modules[name] = module + try: + yield module + except Exception: + if not is_reload: + try: + del sys.modules[name] + except KeyError: + pass + finally: + module.__initializing__ = False + + +def set_package(fxn): + """Set __package__ on the returned module. + + This function is deprecated. + + """ + @functools.wraps(fxn) + def set_package_wrapper(*args, **kwargs): + warnings.warn('The import system now takes care of this automatically.', + DeprecationWarning, stacklevel=2) + module = fxn(*args, **kwargs) + if getattr(module, '__package__', None) is None: + module.__package__ = module.__name__ + if not hasattr(module, '__path__'): + module.__package__ = module.__package__.rpartition('.')[0] + return module + return set_package_wrapper + + +def set_loader(fxn): + """Set __loader__ on the returned module. + + This function is deprecated. + + """ + @functools.wraps(fxn) + def set_loader_wrapper(self, *args, **kwargs): + warnings.warn('The import system now takes care of this automatically.', + DeprecationWarning, stacklevel=2) + module = fxn(self, *args, **kwargs) + if getattr(module, '__loader__', None) is None: + module.__loader__ = self + return module + return set_loader_wrapper + + +def module_for_loader(fxn): + """Decorator to handle selecting the proper module for loaders. + + The decorated function is passed the module to use instead of the module + name. The module passed in to the function is either from sys.modules if + it already exists or is a new module. If the module is new, then __name__ + is set the first argument to the method, __loader__ is set to self, and + __package__ is set accordingly (if self.is_package() is defined) will be set + before it is passed to the decorated function (if self.is_package() does + not work for the module it will be set post-load). + + If an exception is raised and the decorator created the module it is + subsequently removed from sys.modules. + + The decorator assumes that the decorated function takes the module name as + the second argument. + + """ + warnings.warn('The import system now takes care of this automatically.', + DeprecationWarning, stacklevel=2) + @functools.wraps(fxn) + def module_for_loader_wrapper(self, fullname, *args, **kwargs): + with _module_to_load(fullname) as module: + module.__loader__ = self + try: + is_package = self.is_package(fullname) + except (ImportError, AttributeError): + pass + else: + if is_package: + module.__package__ = fullname + else: + module.__package__ = fullname.rpartition('.')[0] + # If __package__ was not set above, __import__() will do it later. + return fxn(self, module, *args, **kwargs) + + return module_for_loader_wrapper + + +class _LazyModule(types.ModuleType): + + """A subclass of the module type which triggers loading upon attribute access.""" + + def __getattribute__(self, attr): + """Trigger the load of the module and return the attribute.""" + # All module metadata must be garnered from __spec__ in order to avoid + # using mutated values. + # Stop triggering this method. + self.__class__ = types.ModuleType + # Get the original name to make sure no object substitution occurred + # in sys.modules. + original_name = self.__spec__.name + # Figure out exactly what attributes were mutated between the creation + # of the module and now. + attrs_then = self.__spec__.loader_state['__dict__'] + original_type = self.__spec__.loader_state['__class__'] + attrs_now = self.__dict__ + attrs_updated = {} + for key, value in attrs_now.items(): + # Code that set the attribute may have kept a reference to the + # assigned object, making identity more important than equality. + if key not in attrs_then: + attrs_updated[key] = value + elif id(attrs_now[key]) != id(attrs_then[key]): + attrs_updated[key] = value + self.__spec__.loader.exec_module(self) + # If exec_module() was used directly there is no guarantee the module + # object was put into sys.modules. + if original_name in sys.modules: + if id(self) != id(sys.modules[original_name]): + raise ValueError(f"module object for {original_name!r} " + "substituted in sys.modules during a lazy " + "load") + # Update after loading since that's what would happen in an eager + # loading situation. + self.__dict__.update(attrs_updated) + return getattr(self, attr) + + def __delattr__(self, attr): + """Trigger the load and then perform the deletion.""" + # To trigger the load and raise an exception if the attribute + # doesn't exist. + self.__getattribute__(attr) + delattr(self, attr) + + +class LazyLoader(abc.Loader): + + """A loader that creates a module which defers loading until attribute access.""" + + @staticmethod + def __check_eager_loader(loader): + if not hasattr(loader, 'exec_module'): + raise TypeError('loader must define exec_module()') + + @classmethod + def factory(cls, loader): + """Construct a callable which returns the eager loader made lazy.""" + cls.__check_eager_loader(loader) + return lambda *args, **kwargs: cls(loader(*args, **kwargs)) + + def __init__(self, loader): + self.__check_eager_loader(loader) + self.loader = loader + + def create_module(self, spec): + return self.loader.create_module(spec) + + def exec_module(self, module): + """Make the module load lazily.""" + module.__spec__.loader = self.loader + module.__loader__ = self.loader + # Don't need to worry about deep-copying as trying to set an attribute + # on an object would have triggered the load, + # e.g. ``module.__spec__.loader = None`` would trigger a load from + # trying to access module.__spec__. + loader_state = {} + loader_state['__dict__'] = module.__dict__.copy() + loader_state['__class__'] = module.__class__ + module.__spec__.loader_state = loader_state + module.__class__ = _LazyModule diff --git a/my_env/Lib/io.py b/my_env/Lib/io.py new file mode 100644 index 000000000..968ee5073 --- /dev/null +++ b/my_env/Lib/io.py @@ -0,0 +1,99 @@ +"""The io module provides the Python interfaces to stream handling. The +builtin open function is defined in this module. + +At the top of the I/O hierarchy is the abstract base class IOBase. It +defines the basic interface to a stream. Note, however, that there is no +separation between reading and writing to streams; implementations are +allowed to raise an OSError if they do not support a given operation. + +Extending IOBase is RawIOBase which deals simply with the reading and +writing of raw bytes to a stream. FileIO subclasses RawIOBase to provide +an interface to OS files. + +BufferedIOBase deals with buffering on a raw byte stream (RawIOBase). Its +subclasses, BufferedWriter, BufferedReader, and BufferedRWPair buffer +streams that are readable, writable, and both respectively. +BufferedRandom provides a buffered interface to random access +streams. BytesIO is a simple stream of in-memory bytes. + +Another IOBase subclass, TextIOBase, deals with the encoding and decoding +of streams into text. TextIOWrapper, which extends it, is a buffered text +interface to a buffered raw stream (`BufferedIOBase`). Finally, StringIO +is an in-memory stream for text. + +Argument names are not part of the specification, and only the arguments +of open() are intended to be used as keyword arguments. + +data: + +DEFAULT_BUFFER_SIZE + + An int containing the default buffer size used by the module's buffered + I/O classes. open() uses the file's blksize (as obtained by os.stat) if + possible. +""" +# New I/O library conforming to PEP 3116. + +__author__ = ("Guido van Rossum , " + "Mike Verdone , " + "Mark Russell , " + "Antoine Pitrou , " + "Amaury Forgeot d'Arc , " + "Benjamin Peterson ") + +__all__ = ["BlockingIOError", "open", "IOBase", "RawIOBase", "FileIO", + "BytesIO", "StringIO", "BufferedIOBase", + "BufferedReader", "BufferedWriter", "BufferedRWPair", + "BufferedRandom", "TextIOBase", "TextIOWrapper", + "UnsupportedOperation", "SEEK_SET", "SEEK_CUR", "SEEK_END"] + + +import _io +import abc + +from _io import (DEFAULT_BUFFER_SIZE, BlockingIOError, UnsupportedOperation, + open, FileIO, BytesIO, StringIO, BufferedReader, + BufferedWriter, BufferedRWPair, BufferedRandom, + IncrementalNewlineDecoder, TextIOWrapper) + +OpenWrapper = _io.open # for compatibility with _pyio + +# Pretend this exception was created here. +UnsupportedOperation.__module__ = "io" + +# for seek() +SEEK_SET = 0 +SEEK_CUR = 1 +SEEK_END = 2 + +# Declaring ABCs in C is tricky so we do it here. +# Method descriptions and default implementations are inherited from the C +# version however. +class IOBase(_io._IOBase, metaclass=abc.ABCMeta): + __doc__ = _io._IOBase.__doc__ + +class RawIOBase(_io._RawIOBase, IOBase): + __doc__ = _io._RawIOBase.__doc__ + +class BufferedIOBase(_io._BufferedIOBase, IOBase): + __doc__ = _io._BufferedIOBase.__doc__ + +class TextIOBase(_io._TextIOBase, IOBase): + __doc__ = _io._TextIOBase.__doc__ + +RawIOBase.register(FileIO) + +for klass in (BytesIO, BufferedReader, BufferedWriter, BufferedRandom, + BufferedRWPair): + BufferedIOBase.register(klass) + +for klass in (StringIO, TextIOWrapper): + TextIOBase.register(klass) +del klass + +try: + from _io import _WindowsConsoleIO +except ImportError: + pass +else: + RawIOBase.register(_WindowsConsoleIO) diff --git a/my_env/Lib/keyword.py b/my_env/Lib/keyword.py new file mode 100644 index 000000000..431991dcf --- /dev/null +++ b/my_env/Lib/keyword.py @@ -0,0 +1,96 @@ +#! /usr/bin/env python3 + +"""Keywords (from "graminit.c") + +This file is automatically generated; please don't muck it up! + +To update the symbols in this file, 'cd' to the top directory of +the python source tree after building the interpreter and run: + + ./python Lib/keyword.py +""" + +__all__ = ["iskeyword", "kwlist"] + +kwlist = [ +#--start keywords-- + 'False', + 'None', + 'True', + 'and', + 'as', + 'assert', + 'async', + 'await', + 'break', + 'class', + 'continue', + 'def', + 'del', + 'elif', + 'else', + 'except', + 'finally', + 'for', + 'from', + 'global', + 'if', + 'import', + 'in', + 'is', + 'lambda', + 'nonlocal', + 'not', + 'or', + 'pass', + 'raise', + 'return', + 'try', + 'while', + 'with', + 'yield', +#--end keywords-- + ] + +iskeyword = frozenset(kwlist).__contains__ + +def main(): + import sys, re + + args = sys.argv[1:] + iptfile = args and args[0] or "Python/graminit.c" + if len(args) > 1: optfile = args[1] + else: optfile = "Lib/keyword.py" + + # load the output skeleton from the target, taking care to preserve its + # newline convention. + with open(optfile, newline='') as fp: + format = fp.readlines() + nl = format[0][len(format[0].strip()):] if format else '\n' + + # scan the source file for keywords + with open(iptfile) as fp: + strprog = re.compile('"([^"]+)"') + lines = [] + for line in fp: + if '{1, "' in line: + match = strprog.search(line) + if match: + lines.append(" '" + match.group(1) + "'," + nl) + lines.sort() + + # insert the lines of keywords into the skeleton + try: + start = format.index("#--start keywords--" + nl) + 1 + end = format.index("#--end keywords--" + nl) + format[start:end] = lines + except ValueError: + sys.stderr.write("target does not contain format markers\n") + sys.exit(1) + + # write the output file + with open(optfile, 'w', newline='') as fp: + fp.writelines(format) + +if __name__ == "__main__": + main() diff --git a/my_env/Lib/linecache.py b/my_env/Lib/linecache.py new file mode 100644 index 000000000..3afcce1f0 --- /dev/null +++ b/my_env/Lib/linecache.py @@ -0,0 +1,177 @@ +"""Cache lines from Python source files. + +This is intended to read lines from modules imported -- hence if a filename +is not found, it will look down the module search path for a file by +that name. +""" + +import functools +import sys +import os +import tokenize + +__all__ = ["getline", "clearcache", "checkcache"] + +def getline(filename, lineno, module_globals=None): + lines = getlines(filename, module_globals) + if 1 <= lineno <= len(lines): + return lines[lineno-1] + else: + return '' + + +# The cache + +# The cache. Maps filenames to either a thunk which will provide source code, +# or a tuple (size, mtime, lines, fullname) once loaded. +cache = {} + + +def clearcache(): + """Clear the cache entirely.""" + + global cache + cache = {} + + +def getlines(filename, module_globals=None): + """Get the lines for a Python source file from the cache. + Update the cache if it doesn't contain an entry for this file already.""" + + if filename in cache: + entry = cache[filename] + if len(entry) != 1: + return cache[filename][2] + + try: + return updatecache(filename, module_globals) + except MemoryError: + clearcache() + return [] + + +def checkcache(filename=None): + """Discard cache entries that are out of date. + (This is not checked upon each call!)""" + + if filename is None: + filenames = list(cache.keys()) + else: + if filename in cache: + filenames = [filename] + else: + return + + for filename in filenames: + entry = cache[filename] + if len(entry) == 1: + # lazy cache entry, leave it lazy. + continue + size, mtime, lines, fullname = entry + if mtime is None: + continue # no-op for files loaded via a __loader__ + try: + stat = os.stat(fullname) + except OSError: + del cache[filename] + continue + if size != stat.st_size or mtime != stat.st_mtime: + del cache[filename] + + +def updatecache(filename, module_globals=None): + """Update a cache entry and return its list of lines. + If something's wrong, print a message, discard the cache entry, + and return an empty list.""" + + if filename in cache: + if len(cache[filename]) != 1: + del cache[filename] + if not filename or (filename.startswith('<') and filename.endswith('>')): + return [] + + fullname = filename + try: + stat = os.stat(fullname) + except OSError: + basename = filename + + # Realise a lazy loader based lookup if there is one + # otherwise try to lookup right now. + if lazycache(filename, module_globals): + try: + data = cache[filename][0]() + except (ImportError, OSError): + pass + else: + if data is None: + # No luck, the PEP302 loader cannot find the source + # for this module. + return [] + cache[filename] = ( + len(data), None, + [line+'\n' for line in data.splitlines()], fullname + ) + return cache[filename][2] + + # Try looking through the module search path, which is only useful + # when handling a relative filename. + if os.path.isabs(filename): + return [] + + for dirname in sys.path: + try: + fullname = os.path.join(dirname, basename) + except (TypeError, AttributeError): + # Not sufficiently string-like to do anything useful with. + continue + try: + stat = os.stat(fullname) + break + except OSError: + pass + else: + return [] + try: + with tokenize.open(fullname) as fp: + lines = fp.readlines() + except OSError: + return [] + if lines and not lines[-1].endswith('\n'): + lines[-1] += '\n' + size, mtime = stat.st_size, stat.st_mtime + cache[filename] = size, mtime, lines, fullname + return lines + + +def lazycache(filename, module_globals): + """Seed the cache for filename with module_globals. + + The module loader will be asked for the source only when getlines is + called, not immediately. + + If there is an entry in the cache already, it is not altered. + + :return: True if a lazy load is registered in the cache, + otherwise False. To register such a load a module loader with a + get_source method must be found, the filename must be a cachable + filename, and the filename must not be already cached. + """ + if filename in cache: + if len(cache[filename]) == 1: + return True + else: + return False + if not filename or (filename.startswith('<') and filename.endswith('>')): + return False + # Try for a __loader__, if available + if module_globals and '__loader__' in module_globals: + name = module_globals.get('__name__') + loader = module_globals['__loader__'] + get_source = getattr(loader, 'get_source', None) + + if name and get_source: + get_lines = functools.partial(get_source, name) + cache[filename] = (get_lines,) + return True + return False diff --git a/my_env/Lib/locale.py b/my_env/Lib/locale.py new file mode 100644 index 000000000..f3d3973d0 --- /dev/null +++ b/my_env/Lib/locale.py @@ -0,0 +1,1749 @@ +"""Locale support module. + +The module provides low-level access to the C lib's locale APIs and adds high +level number formatting APIs as well as a locale aliasing engine to complement +these. + +The aliasing engine includes support for many commonly used locale names and +maps them to values suitable for passing to the C lib's setlocale() function. It +also includes default encodings for all supported locale names. + +""" + +import sys +import encodings +import encodings.aliases +import re +import _collections_abc +from builtins import str as _builtin_str +import functools + +# Try importing the _locale module. +# +# If this fails, fall back on a basic 'C' locale emulation. + +# Yuck: LC_MESSAGES is non-standard: can't tell whether it exists before +# trying the import. So __all__ is also fiddled at the end of the file. +__all__ = ["getlocale", "getdefaultlocale", "getpreferredencoding", "Error", + "setlocale", "resetlocale", "localeconv", "strcoll", "strxfrm", + "str", "atof", "atoi", "format", "format_string", "currency", + "normalize", "LC_CTYPE", "LC_COLLATE", "LC_TIME", "LC_MONETARY", + "LC_NUMERIC", "LC_ALL", "CHAR_MAX"] + +def _strcoll(a,b): + """ strcoll(string,string) -> int. + Compares two strings according to the locale. + """ + return (a > b) - (a < b) + +def _strxfrm(s): + """ strxfrm(string) -> string. + Returns a string that behaves for cmp locale-aware. + """ + return s + +try: + + from _locale import * + +except ImportError: + + # Locale emulation + + CHAR_MAX = 127 + LC_ALL = 6 + LC_COLLATE = 3 + LC_CTYPE = 0 + LC_MESSAGES = 5 + LC_MONETARY = 4 + LC_NUMERIC = 1 + LC_TIME = 2 + Error = ValueError + + def localeconv(): + """ localeconv() -> dict. + Returns numeric and monetary locale-specific parameters. + """ + # 'C' locale default values + return {'grouping': [127], + 'currency_symbol': '', + 'n_sign_posn': 127, + 'p_cs_precedes': 127, + 'n_cs_precedes': 127, + 'mon_grouping': [], + 'n_sep_by_space': 127, + 'decimal_point': '.', + 'negative_sign': '', + 'positive_sign': '', + 'p_sep_by_space': 127, + 'int_curr_symbol': '', + 'p_sign_posn': 127, + 'thousands_sep': '', + 'mon_thousands_sep': '', + 'frac_digits': 127, + 'mon_decimal_point': '', + 'int_frac_digits': 127} + + def setlocale(category, value=None): + """ setlocale(integer,string=None) -> string. + Activates/queries locale processing. + """ + if value not in (None, '', 'C'): + raise Error('_locale emulation only supports "C" locale') + return 'C' + +# These may or may not exist in _locale, so be sure to set them. +if 'strxfrm' not in globals(): + strxfrm = _strxfrm +if 'strcoll' not in globals(): + strcoll = _strcoll + + +_localeconv = localeconv + +# With this dict, you can override some items of localeconv's return value. +# This is useful for testing purposes. +_override_localeconv = {} + +@functools.wraps(_localeconv) +def localeconv(): + d = _localeconv() + if _override_localeconv: + d.update(_override_localeconv) + return d + + +### Number formatting APIs + +# Author: Martin von Loewis +# improved by Georg Brandl + +# Iterate over grouping intervals +def _grouping_intervals(grouping): + last_interval = None + for interval in grouping: + # if grouping is -1, we are done + if interval == CHAR_MAX: + return + # 0: re-use last group ad infinitum + if interval == 0: + if last_interval is None: + raise ValueError("invalid grouping") + while True: + yield last_interval + yield interval + last_interval = interval + +#perform the grouping from right to left +def _group(s, monetary=False): + conv = localeconv() + thousands_sep = conv[monetary and 'mon_thousands_sep' or 'thousands_sep'] + grouping = conv[monetary and 'mon_grouping' or 'grouping'] + if not grouping: + return (s, 0) + if s[-1] == ' ': + stripped = s.rstrip() + right_spaces = s[len(stripped):] + s = stripped + else: + right_spaces = '' + left_spaces = '' + groups = [] + for interval in _grouping_intervals(grouping): + if not s or s[-1] not in "0123456789": + # only non-digit characters remain (sign, spaces) + left_spaces = s + s = '' + break + groups.append(s[-interval:]) + s = s[:-interval] + if s: + groups.append(s) + groups.reverse() + return ( + left_spaces + thousands_sep.join(groups) + right_spaces, + len(thousands_sep) * (len(groups) - 1) + ) + +# Strip a given amount of excess padding from the given string +def _strip_padding(s, amount): + lpos = 0 + while amount and s[lpos] == ' ': + lpos += 1 + amount -= 1 + rpos = len(s) - 1 + while amount and s[rpos] == ' ': + rpos -= 1 + amount -= 1 + return s[lpos:rpos+1] + +_percent_re = re.compile(r'%(?:\((?P.*?)\))?' + r'(?P[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]') + +def _format(percent, value, grouping=False, monetary=False, *additional): + if additional: + formatted = percent % ((value,) + additional) + else: + formatted = percent % value + # floats and decimal ints need special action! + if percent[-1] in 'eEfFgG': + seps = 0 + parts = formatted.split('.') + if grouping: + parts[0], seps = _group(parts[0], monetary=monetary) + decimal_point = localeconv()[monetary and 'mon_decimal_point' + or 'decimal_point'] + formatted = decimal_point.join(parts) + if seps: + formatted = _strip_padding(formatted, seps) + elif percent[-1] in 'diu': + seps = 0 + if grouping: + formatted, seps = _group(formatted, monetary=monetary) + if seps: + formatted = _strip_padding(formatted, seps) + return formatted + +def format_string(f, val, grouping=False, monetary=False): + """Formats a string in the same way that the % formatting would use, + but takes the current locale into account. + + Grouping is applied if the third parameter is true. + Conversion uses monetary thousands separator and grouping strings if + forth parameter monetary is true.""" + percents = list(_percent_re.finditer(f)) + new_f = _percent_re.sub('%s', f) + + if isinstance(val, _collections_abc.Mapping): + new_val = [] + for perc in percents: + if perc.group()[-1]=='%': + new_val.append('%') + else: + new_val.append(_format(perc.group(), val, grouping, monetary)) + else: + if not isinstance(val, tuple): + val = (val,) + new_val = [] + i = 0 + for perc in percents: + if perc.group()[-1]=='%': + new_val.append('%') + else: + starcount = perc.group('modifiers').count('*') + new_val.append(_format(perc.group(), + val[i], + grouping, + monetary, + *val[i+1:i+1+starcount])) + i += (1 + starcount) + val = tuple(new_val) + + return new_f % val + +def format(percent, value, grouping=False, monetary=False, *additional): + """Deprecated, use format_string instead.""" + import warnings + warnings.warn( + "This method will be removed in a future version of Python. " + "Use 'locale.format_string()' instead.", + DeprecationWarning, stacklevel=2 + ) + + match = _percent_re.match(percent) + if not match or len(match.group())!= len(percent): + raise ValueError(("format() must be given exactly one %%char " + "format specifier, %s not valid") % repr(percent)) + return _format(percent, value, grouping, monetary, *additional) + +def currency(val, symbol=True, grouping=False, international=False): + """Formats val according to the currency settings + in the current locale.""" + conv = localeconv() + + # check for illegal values + digits = conv[international and 'int_frac_digits' or 'frac_digits'] + if digits == 127: + raise ValueError("Currency formatting is not possible using " + "the 'C' locale.") + + s = _format('%%.%if' % digits, abs(val), grouping, monetary=True) + # '<' and '>' are markers if the sign must be inserted between symbol and value + s = '<' + s + '>' + + if symbol: + smb = conv[international and 'int_curr_symbol' or 'currency_symbol'] + precedes = conv[val<0 and 'n_cs_precedes' or 'p_cs_precedes'] + separated = conv[val<0 and 'n_sep_by_space' or 'p_sep_by_space'] + + if precedes: + s = smb + (separated and ' ' or '') + s + else: + s = s + (separated and ' ' or '') + smb + + sign_pos = conv[val<0 and 'n_sign_posn' or 'p_sign_posn'] + sign = conv[val<0 and 'negative_sign' or 'positive_sign'] + + if sign_pos == 0: + s = '(' + s + ')' + elif sign_pos == 1: + s = sign + s + elif sign_pos == 2: + s = s + sign + elif sign_pos == 3: + s = s.replace('<', sign) + elif sign_pos == 4: + s = s.replace('>', sign) + else: + # the default if nothing specified; + # this should be the most fitting sign position + s = sign + s + + return s.replace('<', '').replace('>', '') + +def str(val): + """Convert float to string, taking the locale into account.""" + return _format("%.12g", val) + +def delocalize(string): + "Parses a string as a normalized number according to the locale settings." + + conv = localeconv() + + #First, get rid of the grouping + ts = conv['thousands_sep'] + if ts: + string = string.replace(ts, '') + + #next, replace the decimal point with a dot + dd = conv['decimal_point'] + if dd: + string = string.replace(dd, '.') + return string + +def atof(string, func=float): + "Parses a string as a float according to the locale settings." + return func(delocalize(string)) + +def atoi(string): + "Converts a string to an integer according to the locale settings." + return int(delocalize(string)) + +def _test(): + setlocale(LC_ALL, "") + #do grouping + s1 = format_string("%d", 123456789,1) + print(s1, "is", atoi(s1)) + #standard formatting + s1 = str(3.14) + print(s1, "is", atof(s1)) + +### Locale name aliasing engine + +# Author: Marc-Andre Lemburg, mal@lemburg.com +# Various tweaks by Fredrik Lundh + +# store away the low-level version of setlocale (it's +# overridden below) +_setlocale = setlocale + +def _replace_encoding(code, encoding): + if '.' in code: + langname = code[:code.index('.')] + else: + langname = code + # Convert the encoding to a C lib compatible encoding string + norm_encoding = encodings.normalize_encoding(encoding) + #print('norm encoding: %r' % norm_encoding) + norm_encoding = encodings.aliases.aliases.get(norm_encoding.lower(), + norm_encoding) + #print('aliased encoding: %r' % norm_encoding) + encoding = norm_encoding + norm_encoding = norm_encoding.lower() + if norm_encoding in locale_encoding_alias: + encoding = locale_encoding_alias[norm_encoding] + else: + norm_encoding = norm_encoding.replace('_', '') + norm_encoding = norm_encoding.replace('-', '') + if norm_encoding in locale_encoding_alias: + encoding = locale_encoding_alias[norm_encoding] + #print('found encoding %r' % encoding) + return langname + '.' + encoding + +def _append_modifier(code, modifier): + if modifier == 'euro': + if '.' not in code: + return code + '.ISO8859-15' + _, _, encoding = code.partition('.') + if encoding in ('ISO8859-15', 'UTF-8'): + return code + if encoding == 'ISO8859-1': + return _replace_encoding(code, 'ISO8859-15') + return code + '@' + modifier + +def normalize(localename): + + """ Returns a normalized locale code for the given locale + name. + + The returned locale code is formatted for use with + setlocale(). + + If normalization fails, the original name is returned + unchanged. + + If the given encoding is not known, the function defaults to + the default encoding for the locale code just like setlocale() + does. + + """ + # Normalize the locale name and extract the encoding and modifier + code = localename.lower() + if ':' in code: + # ':' is sometimes used as encoding delimiter. + code = code.replace(':', '.') + if '@' in code: + code, modifier = code.split('@', 1) + else: + modifier = '' + if '.' in code: + langname, encoding = code.split('.')[:2] + else: + langname = code + encoding = '' + + # First lookup: fullname (possibly with encoding and modifier) + lang_enc = langname + if encoding: + norm_encoding = encoding.replace('-', '') + norm_encoding = norm_encoding.replace('_', '') + lang_enc += '.' + norm_encoding + lookup_name = lang_enc + if modifier: + lookup_name += '@' + modifier + code = locale_alias.get(lookup_name, None) + if code is not None: + return code + #print('first lookup failed') + + if modifier: + # Second try: fullname without modifier (possibly with encoding) + code = locale_alias.get(lang_enc, None) + if code is not None: + #print('lookup without modifier succeeded') + if '@' not in code: + return _append_modifier(code, modifier) + if code.split('@', 1)[1].lower() == modifier: + return code + #print('second lookup failed') + + if encoding: + # Third try: langname (without encoding, possibly with modifier) + lookup_name = langname + if modifier: + lookup_name += '@' + modifier + code = locale_alias.get(lookup_name, None) + if code is not None: + #print('lookup without encoding succeeded') + if '@' not in code: + return _replace_encoding(code, encoding) + code, modifier = code.split('@', 1) + return _replace_encoding(code, encoding) + '@' + modifier + + if modifier: + # Fourth try: langname (without encoding and modifier) + code = locale_alias.get(langname, None) + if code is not None: + #print('lookup without modifier and encoding succeeded') + if '@' not in code: + code = _replace_encoding(code, encoding) + return _append_modifier(code, modifier) + code, defmod = code.split('@', 1) + if defmod.lower() == modifier: + return _replace_encoding(code, encoding) + '@' + defmod + + return localename + +def _parse_localename(localename): + + """ Parses the locale code for localename and returns the + result as tuple (language code, encoding). + + The localename is normalized and passed through the locale + alias engine. A ValueError is raised in case the locale name + cannot be parsed. + + The language code corresponds to RFC 1766. code and encoding + can be None in case the values cannot be determined or are + unknown to this implementation. + + """ + code = normalize(localename) + if '@' in code: + # Deal with locale modifiers + code, modifier = code.split('@', 1) + if modifier == 'euro' and '.' not in code: + # Assume Latin-9 for @euro locales. This is bogus, + # since some systems may use other encodings for these + # locales. Also, we ignore other modifiers. + return code, 'iso-8859-15' + + if '.' in code: + return tuple(code.split('.')[:2]) + elif code == 'C': + return None, None + raise ValueError('unknown locale: %s' % localename) + +def _build_localename(localetuple): + + """ Builds a locale code from the given tuple (language code, + encoding). + + No aliasing or normalizing takes place. + + """ + try: + language, encoding = localetuple + + if language is None: + language = 'C' + if encoding is None: + return language + else: + return language + '.' + encoding + except (TypeError, ValueError): + raise TypeError('Locale must be None, a string, or an iterable of ' + 'two strings -- language code, encoding.') from None + +def getdefaultlocale(envvars=('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')): + + """ Tries to determine the default locale settings and returns + them as tuple (language code, encoding). + + According to POSIX, a program which has not called + setlocale(LC_ALL, "") runs using the portable 'C' locale. + Calling setlocale(LC_ALL, "") lets it use the default locale as + defined by the LANG variable. Since we don't want to interfere + with the current locale setting we thus emulate the behavior + in the way described above. + + To maintain compatibility with other platforms, not only the + LANG variable is tested, but a list of variables given as + envvars parameter. The first found to be defined will be + used. envvars defaults to the search path used in GNU gettext; + it must always contain the variable name 'LANG'. + + Except for the code 'C', the language code corresponds to RFC + 1766. code and encoding can be None in case the values cannot + be determined. + + """ + + try: + # check if it's supported by the _locale module + import _locale + code, encoding = _locale._getdefaultlocale() + except (ImportError, AttributeError): + pass + else: + # make sure the code/encoding values are valid + if sys.platform == "win32" and code and code[:2] == "0x": + # map windows language identifier to language name + code = windows_locale.get(int(code, 0)) + # ...add other platform-specific processing here, if + # necessary... + return code, encoding + + # fall back on POSIX behaviour + import os + lookup = os.environ.get + for variable in envvars: + localename = lookup(variable,None) + if localename: + if variable == 'LANGUAGE': + localename = localename.split(':')[0] + break + else: + localename = 'C' + return _parse_localename(localename) + + +def getlocale(category=LC_CTYPE): + + """ Returns the current setting for the given locale category as + tuple (language code, encoding). + + category may be one of the LC_* value except LC_ALL. It + defaults to LC_CTYPE. + + Except for the code 'C', the language code corresponds to RFC + 1766. code and encoding can be None in case the values cannot + be determined. + + """ + localename = _setlocale(category) + if category == LC_ALL and ';' in localename: + raise TypeError('category LC_ALL is not supported') + return _parse_localename(localename) + +def setlocale(category, locale=None): + + """ Set the locale for the given category. The locale can be + a string, an iterable of two strings (language code and encoding), + or None. + + Iterables are converted to strings using the locale aliasing + engine. Locale strings are passed directly to the C lib. + + category may be given as one of the LC_* values. + + """ + if locale and not isinstance(locale, _builtin_str): + # convert to string + locale = normalize(_build_localename(locale)) + return _setlocale(category, locale) + +def resetlocale(category=LC_ALL): + + """ Sets the locale for category to the default setting. + + The default setting is determined by calling + getdefaultlocale(). category defaults to LC_ALL. + + """ + _setlocale(category, _build_localename(getdefaultlocale())) + +if sys.platform.startswith("win"): + # On Win32, this will return the ANSI code page + def getpreferredencoding(do_setlocale = True): + """Return the charset that the user is likely using.""" + if sys.flags.utf8_mode: + return 'UTF-8' + import _bootlocale + return _bootlocale.getpreferredencoding(False) +else: + # On Unix, if CODESET is available, use that. + try: + CODESET + except NameError: + if hasattr(sys, 'getandroidapilevel'): + # On Android langinfo.h and CODESET are missing, and UTF-8 is + # always used in mbstowcs() and wcstombs(). + def getpreferredencoding(do_setlocale = True): + return 'UTF-8' + else: + # Fall back to parsing environment variables :-( + def getpreferredencoding(do_setlocale = True): + """Return the charset that the user is likely using, + by looking at environment variables.""" + if sys.flags.utf8_mode: + return 'UTF-8' + res = getdefaultlocale()[1] + if res is None: + # LANG not set, default conservatively to ASCII + res = 'ascii' + return res + else: + def getpreferredencoding(do_setlocale = True): + """Return the charset that the user is likely using, + according to the system configuration.""" + if sys.flags.utf8_mode: + return 'UTF-8' + import _bootlocale + if do_setlocale: + oldloc = setlocale(LC_CTYPE) + try: + setlocale(LC_CTYPE, "") + except Error: + pass + result = _bootlocale.getpreferredencoding(False) + if do_setlocale: + setlocale(LC_CTYPE, oldloc) + return result + + +### Database +# +# The following data was extracted from the locale.alias file which +# comes with X11 and then hand edited removing the explicit encoding +# definitions and adding some more aliases. The file is usually +# available as /usr/lib/X11/locale/locale.alias. +# + +# +# The local_encoding_alias table maps lowercase encoding alias names +# to C locale encoding names (case-sensitive). Note that normalize() +# first looks up the encoding in the encodings.aliases dictionary and +# then applies this mapping to find the correct C lib name for the +# encoding. +# +locale_encoding_alias = { + + # Mappings for non-standard encoding names used in locale names + '437': 'C', + 'c': 'C', + 'en': 'ISO8859-1', + 'jis': 'JIS7', + 'jis7': 'JIS7', + 'ajec': 'eucJP', + 'koi8c': 'KOI8-C', + 'microsoftcp1251': 'CP1251', + 'microsoftcp1255': 'CP1255', + 'microsoftcp1256': 'CP1256', + '88591': 'ISO8859-1', + '88592': 'ISO8859-2', + '88595': 'ISO8859-5', + '885915': 'ISO8859-15', + + # Mappings from Python codec names to C lib encoding names + 'ascii': 'ISO8859-1', + 'latin_1': 'ISO8859-1', + 'iso8859_1': 'ISO8859-1', + 'iso8859_10': 'ISO8859-10', + 'iso8859_11': 'ISO8859-11', + 'iso8859_13': 'ISO8859-13', + 'iso8859_14': 'ISO8859-14', + 'iso8859_15': 'ISO8859-15', + 'iso8859_16': 'ISO8859-16', + 'iso8859_2': 'ISO8859-2', + 'iso8859_3': 'ISO8859-3', + 'iso8859_4': 'ISO8859-4', + 'iso8859_5': 'ISO8859-5', + 'iso8859_6': 'ISO8859-6', + 'iso8859_7': 'ISO8859-7', + 'iso8859_8': 'ISO8859-8', + 'iso8859_9': 'ISO8859-9', + 'iso2022_jp': 'JIS7', + 'shift_jis': 'SJIS', + 'tactis': 'TACTIS', + 'euc_jp': 'eucJP', + 'euc_kr': 'eucKR', + 'utf_8': 'UTF-8', + 'koi8_r': 'KOI8-R', + 'koi8_t': 'KOI8-T', + 'koi8_u': 'KOI8-U', + 'kz1048': 'RK1048', + 'cp1251': 'CP1251', + 'cp1255': 'CP1255', + 'cp1256': 'CP1256', + + # XXX This list is still incomplete. If you know more + # mappings, please file a bug report. Thanks. +} + +for k, v in sorted(locale_encoding_alias.items()): + k = k.replace('_', '') + locale_encoding_alias.setdefault(k, v) + +# +# The locale_alias table maps lowercase alias names to C locale names +# (case-sensitive). Encodings are always separated from the locale +# name using a dot ('.'); they should only be given in case the +# language name is needed to interpret the given encoding alias +# correctly (CJK codes often have this need). +# +# Note that the normalize() function which uses this tables +# removes '_' and '-' characters from the encoding part of the +# locale name before doing the lookup. This saves a lot of +# space in the table. +# +# MAL 2004-12-10: +# Updated alias mapping to most recent locale.alias file +# from X.org distribution using makelocalealias.py. +# +# These are the differences compared to the old mapping (Python 2.4 +# and older): +# +# updated 'bg' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251' +# updated 'bg_bg' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251' +# updated 'bulgarian' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251' +# updated 'cz' -> 'cz_CZ.ISO8859-2' to 'cs_CZ.ISO8859-2' +# updated 'cz_cz' -> 'cz_CZ.ISO8859-2' to 'cs_CZ.ISO8859-2' +# updated 'czech' -> 'cs_CS.ISO8859-2' to 'cs_CZ.ISO8859-2' +# updated 'dutch' -> 'nl_BE.ISO8859-1' to 'nl_NL.ISO8859-1' +# updated 'et' -> 'et_EE.ISO8859-4' to 'et_EE.ISO8859-15' +# updated 'et_ee' -> 'et_EE.ISO8859-4' to 'et_EE.ISO8859-15' +# updated 'fi' -> 'fi_FI.ISO8859-1' to 'fi_FI.ISO8859-15' +# updated 'fi_fi' -> 'fi_FI.ISO8859-1' to 'fi_FI.ISO8859-15' +# updated 'iw' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' +# updated 'iw_il' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' +# updated 'japanese' -> 'ja_JP.SJIS' to 'ja_JP.eucJP' +# updated 'lt' -> 'lt_LT.ISO8859-4' to 'lt_LT.ISO8859-13' +# updated 'lv' -> 'lv_LV.ISO8859-4' to 'lv_LV.ISO8859-13' +# updated 'sl' -> 'sl_CS.ISO8859-2' to 'sl_SI.ISO8859-2' +# updated 'slovene' -> 'sl_CS.ISO8859-2' to 'sl_SI.ISO8859-2' +# updated 'th_th' -> 'th_TH.TACTIS' to 'th_TH.ISO8859-11' +# updated 'zh_cn' -> 'zh_CN.eucCN' to 'zh_CN.gb2312' +# updated 'zh_cn.big5' -> 'zh_TW.eucTW' to 'zh_TW.big5' +# updated 'zh_tw' -> 'zh_TW.eucTW' to 'zh_TW.big5' +# +# MAL 2008-05-30: +# Updated alias mapping to most recent locale.alias file +# from X.org distribution using makelocalealias.py. +# +# These are the differences compared to the old mapping (Python 2.5 +# and older): +# +# updated 'cs_cs.iso88592' -> 'cs_CZ.ISO8859-2' to 'cs_CS.ISO8859-2' +# updated 'serbocroatian' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2' +# updated 'sh' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2' +# updated 'sh_hr.iso88592' -> 'sh_HR.ISO8859-2' to 'hr_HR.ISO8859-2' +# updated 'sh_sp' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2' +# updated 'sh_yu' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2' +# updated 'sp' -> 'sp_YU.ISO8859-5' to 'sr_CS.ISO8859-5' +# updated 'sp_yu' -> 'sp_YU.ISO8859-5' to 'sr_CS.ISO8859-5' +# updated 'sr' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' +# updated 'sr@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' +# updated 'sr_sp' -> 'sr_SP.ISO8859-2' to 'sr_CS.ISO8859-2' +# updated 'sr_yu' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' +# updated 'sr_yu.cp1251@cyrillic' -> 'sr_YU.CP1251' to 'sr_CS.CP1251' +# updated 'sr_yu.iso88592' -> 'sr_YU.ISO8859-2' to 'sr_CS.ISO8859-2' +# updated 'sr_yu.iso88595' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' +# updated 'sr_yu.iso88595@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' +# updated 'sr_yu.microsoftcp1251@cyrillic' -> 'sr_YU.CP1251' to 'sr_CS.CP1251' +# updated 'sr_yu.utf8@cyrillic' -> 'sr_YU.UTF-8' to 'sr_CS.UTF-8' +# updated 'sr_yu@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' +# +# AP 2010-04-12: +# Updated alias mapping to most recent locale.alias file +# from X.org distribution using makelocalealias.py. +# +# These are the differences compared to the old mapping (Python 2.6.5 +# and older): +# +# updated 'ru' -> 'ru_RU.ISO8859-5' to 'ru_RU.UTF-8' +# updated 'ru_ru' -> 'ru_RU.ISO8859-5' to 'ru_RU.UTF-8' +# updated 'serbocroatian' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' +# updated 'sh' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' +# updated 'sh_yu' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' +# updated 'sr' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8' +# updated 'sr@cyrillic' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8' +# updated 'sr@latn' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' +# updated 'sr_cs.utf8@latn' -> 'sr_CS.UTF-8' to 'sr_RS.UTF-8@latin' +# updated 'sr_cs@latn' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' +# updated 'sr_yu' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8@latin' +# updated 'sr_yu.utf8@cyrillic' -> 'sr_CS.UTF-8' to 'sr_RS.UTF-8' +# updated 'sr_yu@cyrillic' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8' +# +# SS 2013-12-20: +# Updated alias mapping to most recent locale.alias file +# from X.org distribution using makelocalealias.py. +# +# These are the differences compared to the old mapping (Python 3.3.3 +# and older): +# +# updated 'a3' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' +# updated 'a3_az' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' +# updated 'a3_az.koi8c' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' +# updated 'cs_cs.iso88592' -> 'cs_CS.ISO8859-2' to 'cs_CZ.ISO8859-2' +# updated 'hebrew' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' +# updated 'hebrew.iso88598' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' +# updated 'sd' -> 'sd_IN@devanagari.UTF-8' to 'sd_IN.UTF-8' +# updated 'sr@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' +# updated 'sr_cs' -> 'sr_RS.UTF-8' to 'sr_CS.UTF-8' +# updated 'sr_cs.utf8@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' +# updated 'sr_cs@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' +# +# SS 2014-10-01: +# Updated alias mapping with glibc 2.19 supported locales. +# +# SS 2018-05-05: +# Updated alias mapping with glibc 2.27 supported locales. +# +# These are the differences compared to the old mapping (Python 3.6.5 +# and older): +# +# updated 'ca_es@valencia' -> 'ca_ES.ISO8859-15@valencia' to 'ca_ES.UTF-8@valencia' +# updated 'kk_kz' -> 'kk_KZ.RK1048' to 'kk_KZ.ptcp154' +# updated 'russian' -> 'ru_RU.ISO8859-5' to 'ru_RU.KOI8-R' + +locale_alias = { + 'a3': 'az_AZ.KOI8-C', + 'a3_az': 'az_AZ.KOI8-C', + 'a3_az.koic': 'az_AZ.KOI8-C', + 'aa_dj': 'aa_DJ.ISO8859-1', + 'aa_er': 'aa_ER.UTF-8', + 'aa_et': 'aa_ET.UTF-8', + 'af': 'af_ZA.ISO8859-1', + 'af_za': 'af_ZA.ISO8859-1', + 'agr_pe': 'agr_PE.UTF-8', + 'ak_gh': 'ak_GH.UTF-8', + 'am': 'am_ET.UTF-8', + 'am_et': 'am_ET.UTF-8', + 'american': 'en_US.ISO8859-1', + 'an_es': 'an_ES.ISO8859-15', + 'anp_in': 'anp_IN.UTF-8', + 'ar': 'ar_AA.ISO8859-6', + 'ar_aa': 'ar_AA.ISO8859-6', + 'ar_ae': 'ar_AE.ISO8859-6', + 'ar_bh': 'ar_BH.ISO8859-6', + 'ar_dz': 'ar_DZ.ISO8859-6', + 'ar_eg': 'ar_EG.ISO8859-6', + 'ar_in': 'ar_IN.UTF-8', + 'ar_iq': 'ar_IQ.ISO8859-6', + 'ar_jo': 'ar_JO.ISO8859-6', + 'ar_kw': 'ar_KW.ISO8859-6', + 'ar_lb': 'ar_LB.ISO8859-6', + 'ar_ly': 'ar_LY.ISO8859-6', + 'ar_ma': 'ar_MA.ISO8859-6', + 'ar_om': 'ar_OM.ISO8859-6', + 'ar_qa': 'ar_QA.ISO8859-6', + 'ar_sa': 'ar_SA.ISO8859-6', + 'ar_sd': 'ar_SD.ISO8859-6', + 'ar_ss': 'ar_SS.UTF-8', + 'ar_sy': 'ar_SY.ISO8859-6', + 'ar_tn': 'ar_TN.ISO8859-6', + 'ar_ye': 'ar_YE.ISO8859-6', + 'arabic': 'ar_AA.ISO8859-6', + 'as': 'as_IN.UTF-8', + 'as_in': 'as_IN.UTF-8', + 'ast_es': 'ast_ES.ISO8859-15', + 'ayc_pe': 'ayc_PE.UTF-8', + 'az': 'az_AZ.ISO8859-9E', + 'az_az': 'az_AZ.ISO8859-9E', + 'az_az.iso88599e': 'az_AZ.ISO8859-9E', + 'az_ir': 'az_IR.UTF-8', + 'be': 'be_BY.CP1251', + 'be@latin': 'be_BY.UTF-8@latin', + 'be_bg.utf8': 'bg_BG.UTF-8', + 'be_by': 'be_BY.CP1251', + 'be_by@latin': 'be_BY.UTF-8@latin', + 'bem_zm': 'bem_ZM.UTF-8', + 'ber_dz': 'ber_DZ.UTF-8', + 'ber_ma': 'ber_MA.UTF-8', + 'bg': 'bg_BG.CP1251', + 'bg_bg': 'bg_BG.CP1251', + 'bhb_in.utf8': 'bhb_IN.UTF-8', + 'bho_in': 'bho_IN.UTF-8', + 'bho_np': 'bho_NP.UTF-8', + 'bi_vu': 'bi_VU.UTF-8', + 'bn_bd': 'bn_BD.UTF-8', + 'bn_in': 'bn_IN.UTF-8', + 'bo_cn': 'bo_CN.UTF-8', + 'bo_in': 'bo_IN.UTF-8', + 'bokmal': 'nb_NO.ISO8859-1', + 'bokm\xe5l': 'nb_NO.ISO8859-1', + 'br': 'br_FR.ISO8859-1', + 'br_fr': 'br_FR.ISO8859-1', + 'brx_in': 'brx_IN.UTF-8', + 'bs': 'bs_BA.ISO8859-2', + 'bs_ba': 'bs_BA.ISO8859-2', + 'bulgarian': 'bg_BG.CP1251', + 'byn_er': 'byn_ER.UTF-8', + 'c': 'C', + 'c-french': 'fr_CA.ISO8859-1', + 'c.ascii': 'C', + 'c.en': 'C', + 'c.iso88591': 'en_US.ISO8859-1', + 'c.utf8': 'en_US.UTF-8', + 'c_c': 'C', + 'c_c.c': 'C', + 'ca': 'ca_ES.ISO8859-1', + 'ca_ad': 'ca_AD.ISO8859-1', + 'ca_es': 'ca_ES.ISO8859-1', + 'ca_es@valencia': 'ca_ES.UTF-8@valencia', + 'ca_fr': 'ca_FR.ISO8859-1', + 'ca_it': 'ca_IT.ISO8859-1', + 'catalan': 'ca_ES.ISO8859-1', + 'ce_ru': 'ce_RU.UTF-8', + 'cextend': 'en_US.ISO8859-1', + 'chinese-s': 'zh_CN.eucCN', + 'chinese-t': 'zh_TW.eucTW', + 'chr_us': 'chr_US.UTF-8', + 'ckb_iq': 'ckb_IQ.UTF-8', + 'cmn_tw': 'cmn_TW.UTF-8', + 'crh_ua': 'crh_UA.UTF-8', + 'croatian': 'hr_HR.ISO8859-2', + 'cs': 'cs_CZ.ISO8859-2', + 'cs_cs': 'cs_CZ.ISO8859-2', + 'cs_cz': 'cs_CZ.ISO8859-2', + 'csb_pl': 'csb_PL.UTF-8', + 'cv_ru': 'cv_RU.UTF-8', + 'cy': 'cy_GB.ISO8859-1', + 'cy_gb': 'cy_GB.ISO8859-1', + 'cz': 'cs_CZ.ISO8859-2', + 'cz_cz': 'cs_CZ.ISO8859-2', + 'czech': 'cs_CZ.ISO8859-2', + 'da': 'da_DK.ISO8859-1', + 'da_dk': 'da_DK.ISO8859-1', + 'danish': 'da_DK.ISO8859-1', + 'dansk': 'da_DK.ISO8859-1', + 'de': 'de_DE.ISO8859-1', + 'de_at': 'de_AT.ISO8859-1', + 'de_be': 'de_BE.ISO8859-1', + 'de_ch': 'de_CH.ISO8859-1', + 'de_de': 'de_DE.ISO8859-1', + 'de_it': 'de_IT.ISO8859-1', + 'de_li.utf8': 'de_LI.UTF-8', + 'de_lu': 'de_LU.ISO8859-1', + 'deutsch': 'de_DE.ISO8859-1', + 'doi_in': 'doi_IN.UTF-8', + 'dutch': 'nl_NL.ISO8859-1', + 'dutch.iso88591': 'nl_BE.ISO8859-1', + 'dv_mv': 'dv_MV.UTF-8', + 'dz_bt': 'dz_BT.UTF-8', + 'ee': 'ee_EE.ISO8859-4', + 'ee_ee': 'ee_EE.ISO8859-4', + 'eesti': 'et_EE.ISO8859-1', + 'el': 'el_GR.ISO8859-7', + 'el_cy': 'el_CY.ISO8859-7', + 'el_gr': 'el_GR.ISO8859-7', + 'el_gr@euro': 'el_GR.ISO8859-15', + 'en': 'en_US.ISO8859-1', + 'en_ag': 'en_AG.UTF-8', + 'en_au': 'en_AU.ISO8859-1', + 'en_be': 'en_BE.ISO8859-1', + 'en_bw': 'en_BW.ISO8859-1', + 'en_ca': 'en_CA.ISO8859-1', + 'en_dk': 'en_DK.ISO8859-1', + 'en_dl.utf8': 'en_DL.UTF-8', + 'en_gb': 'en_GB.ISO8859-1', + 'en_hk': 'en_HK.ISO8859-1', + 'en_ie': 'en_IE.ISO8859-1', + 'en_il': 'en_IL.UTF-8', + 'en_in': 'en_IN.ISO8859-1', + 'en_ng': 'en_NG.UTF-8', + 'en_nz': 'en_NZ.ISO8859-1', + 'en_ph': 'en_PH.ISO8859-1', + 'en_sc.utf8': 'en_SC.UTF-8', + 'en_sg': 'en_SG.ISO8859-1', + 'en_uk': 'en_GB.ISO8859-1', + 'en_us': 'en_US.ISO8859-1', + 'en_us@euro@euro': 'en_US.ISO8859-15', + 'en_za': 'en_ZA.ISO8859-1', + 'en_zm': 'en_ZM.UTF-8', + 'en_zw': 'en_ZW.ISO8859-1', + 'en_zw.utf8': 'en_ZS.UTF-8', + 'eng_gb': 'en_GB.ISO8859-1', + 'english': 'en_EN.ISO8859-1', + 'english.iso88591': 'en_US.ISO8859-1', + 'english_uk': 'en_GB.ISO8859-1', + 'english_united-states': 'en_US.ISO8859-1', + 'english_united-states.437': 'C', + 'english_us': 'en_US.ISO8859-1', + 'eo': 'eo_XX.ISO8859-3', + 'eo.utf8': 'eo.UTF-8', + 'eo_eo': 'eo_EO.ISO8859-3', + 'eo_us.utf8': 'eo_US.UTF-8', + 'eo_xx': 'eo_XX.ISO8859-3', + 'es': 'es_ES.ISO8859-1', + 'es_ar': 'es_AR.ISO8859-1', + 'es_bo': 'es_BO.ISO8859-1', + 'es_cl': 'es_CL.ISO8859-1', + 'es_co': 'es_CO.ISO8859-1', + 'es_cr': 'es_CR.ISO8859-1', + 'es_cu': 'es_CU.UTF-8', + 'es_do': 'es_DO.ISO8859-1', + 'es_ec': 'es_EC.ISO8859-1', + 'es_es': 'es_ES.ISO8859-1', + 'es_gt': 'es_GT.ISO8859-1', + 'es_hn': 'es_HN.ISO8859-1', + 'es_mx': 'es_MX.ISO8859-1', + 'es_ni': 'es_NI.ISO8859-1', + 'es_pa': 'es_PA.ISO8859-1', + 'es_pe': 'es_PE.ISO8859-1', + 'es_pr': 'es_PR.ISO8859-1', + 'es_py': 'es_PY.ISO8859-1', + 'es_sv': 'es_SV.ISO8859-1', + 'es_us': 'es_US.ISO8859-1', + 'es_uy': 'es_UY.ISO8859-1', + 'es_ve': 'es_VE.ISO8859-1', + 'estonian': 'et_EE.ISO8859-1', + 'et': 'et_EE.ISO8859-15', + 'et_ee': 'et_EE.ISO8859-15', + 'eu': 'eu_ES.ISO8859-1', + 'eu_es': 'eu_ES.ISO8859-1', + 'eu_fr': 'eu_FR.ISO8859-1', + 'fa': 'fa_IR.UTF-8', + 'fa_ir': 'fa_IR.UTF-8', + 'fa_ir.isiri3342': 'fa_IR.ISIRI-3342', + 'ff_sn': 'ff_SN.UTF-8', + 'fi': 'fi_FI.ISO8859-15', + 'fi_fi': 'fi_FI.ISO8859-15', + 'fil_ph': 'fil_PH.UTF-8', + 'finnish': 'fi_FI.ISO8859-1', + 'fo': 'fo_FO.ISO8859-1', + 'fo_fo': 'fo_FO.ISO8859-1', + 'fr': 'fr_FR.ISO8859-1', + 'fr_be': 'fr_BE.ISO8859-1', + 'fr_ca': 'fr_CA.ISO8859-1', + 'fr_ch': 'fr_CH.ISO8859-1', + 'fr_fr': 'fr_FR.ISO8859-1', + 'fr_lu': 'fr_LU.ISO8859-1', + 'fran\xe7ais': 'fr_FR.ISO8859-1', + 'fre_fr': 'fr_FR.ISO8859-1', + 'french': 'fr_FR.ISO8859-1', + 'french.iso88591': 'fr_CH.ISO8859-1', + 'french_france': 'fr_FR.ISO8859-1', + 'fur_it': 'fur_IT.UTF-8', + 'fy_de': 'fy_DE.UTF-8', + 'fy_nl': 'fy_NL.UTF-8', + 'ga': 'ga_IE.ISO8859-1', + 'ga_ie': 'ga_IE.ISO8859-1', + 'galego': 'gl_ES.ISO8859-1', + 'galician': 'gl_ES.ISO8859-1', + 'gd': 'gd_GB.ISO8859-1', + 'gd_gb': 'gd_GB.ISO8859-1', + 'ger_de': 'de_DE.ISO8859-1', + 'german': 'de_DE.ISO8859-1', + 'german.iso88591': 'de_CH.ISO8859-1', + 'german_germany': 'de_DE.ISO8859-1', + 'gez_er': 'gez_ER.UTF-8', + 'gez_et': 'gez_ET.UTF-8', + 'gl': 'gl_ES.ISO8859-1', + 'gl_es': 'gl_ES.ISO8859-1', + 'greek': 'el_GR.ISO8859-7', + 'gu_in': 'gu_IN.UTF-8', + 'gv': 'gv_GB.ISO8859-1', + 'gv_gb': 'gv_GB.ISO8859-1', + 'ha_ng': 'ha_NG.UTF-8', + 'hak_tw': 'hak_TW.UTF-8', + 'he': 'he_IL.ISO8859-8', + 'he_il': 'he_IL.ISO8859-8', + 'hebrew': 'he_IL.ISO8859-8', + 'hi': 'hi_IN.ISCII-DEV', + 'hi_in': 'hi_IN.ISCII-DEV', + 'hi_in.isciidev': 'hi_IN.ISCII-DEV', + 'hif_fj': 'hif_FJ.UTF-8', + 'hne': 'hne_IN.UTF-8', + 'hne_in': 'hne_IN.UTF-8', + 'hr': 'hr_HR.ISO8859-2', + 'hr_hr': 'hr_HR.ISO8859-2', + 'hrvatski': 'hr_HR.ISO8859-2', + 'hsb_de': 'hsb_DE.ISO8859-2', + 'ht_ht': 'ht_HT.UTF-8', + 'hu': 'hu_HU.ISO8859-2', + 'hu_hu': 'hu_HU.ISO8859-2', + 'hungarian': 'hu_HU.ISO8859-2', + 'hy_am': 'hy_AM.UTF-8', + 'hy_am.armscii8': 'hy_AM.ARMSCII_8', + 'ia': 'ia.UTF-8', + 'ia_fr': 'ia_FR.UTF-8', + 'icelandic': 'is_IS.ISO8859-1', + 'id': 'id_ID.ISO8859-1', + 'id_id': 'id_ID.ISO8859-1', + 'ig_ng': 'ig_NG.UTF-8', + 'ik_ca': 'ik_CA.UTF-8', + 'in': 'id_ID.ISO8859-1', + 'in_id': 'id_ID.ISO8859-1', + 'is': 'is_IS.ISO8859-1', + 'is_is': 'is_IS.ISO8859-1', + 'iso-8859-1': 'en_US.ISO8859-1', + 'iso-8859-15': 'en_US.ISO8859-15', + 'iso8859-1': 'en_US.ISO8859-1', + 'iso8859-15': 'en_US.ISO8859-15', + 'iso_8859_1': 'en_US.ISO8859-1', + 'iso_8859_15': 'en_US.ISO8859-15', + 'it': 'it_IT.ISO8859-1', + 'it_ch': 'it_CH.ISO8859-1', + 'it_it': 'it_IT.ISO8859-1', + 'italian': 'it_IT.ISO8859-1', + 'iu': 'iu_CA.NUNACOM-8', + 'iu_ca': 'iu_CA.NUNACOM-8', + 'iu_ca.nunacom8': 'iu_CA.NUNACOM-8', + 'iw': 'he_IL.ISO8859-8', + 'iw_il': 'he_IL.ISO8859-8', + 'iw_il.utf8': 'iw_IL.UTF-8', + 'ja': 'ja_JP.eucJP', + 'ja_jp': 'ja_JP.eucJP', + 'ja_jp.euc': 'ja_JP.eucJP', + 'ja_jp.mscode': 'ja_JP.SJIS', + 'ja_jp.pck': 'ja_JP.SJIS', + 'japan': 'ja_JP.eucJP', + 'japanese': 'ja_JP.eucJP', + 'japanese-euc': 'ja_JP.eucJP', + 'japanese.euc': 'ja_JP.eucJP', + 'jp_jp': 'ja_JP.eucJP', + 'ka': 'ka_GE.GEORGIAN-ACADEMY', + 'ka_ge': 'ka_GE.GEORGIAN-ACADEMY', + 'ka_ge.georgianacademy': 'ka_GE.GEORGIAN-ACADEMY', + 'ka_ge.georgianps': 'ka_GE.GEORGIAN-PS', + 'ka_ge.georgianrs': 'ka_GE.GEORGIAN-ACADEMY', + 'kab_dz': 'kab_DZ.UTF-8', + 'kk_kz': 'kk_KZ.ptcp154', + 'kl': 'kl_GL.ISO8859-1', + 'kl_gl': 'kl_GL.ISO8859-1', + 'km_kh': 'km_KH.UTF-8', + 'kn': 'kn_IN.UTF-8', + 'kn_in': 'kn_IN.UTF-8', + 'ko': 'ko_KR.eucKR', + 'ko_kr': 'ko_KR.eucKR', + 'ko_kr.euc': 'ko_KR.eucKR', + 'kok_in': 'kok_IN.UTF-8', + 'korean': 'ko_KR.eucKR', + 'korean.euc': 'ko_KR.eucKR', + 'ks': 'ks_IN.UTF-8', + 'ks_in': 'ks_IN.UTF-8', + 'ks_in@devanagari.utf8': 'ks_IN.UTF-8@devanagari', + 'ku_tr': 'ku_TR.ISO8859-9', + 'kw': 'kw_GB.ISO8859-1', + 'kw_gb': 'kw_GB.ISO8859-1', + 'ky': 'ky_KG.UTF-8', + 'ky_kg': 'ky_KG.UTF-8', + 'lb_lu': 'lb_LU.UTF-8', + 'lg_ug': 'lg_UG.ISO8859-10', + 'li_be': 'li_BE.UTF-8', + 'li_nl': 'li_NL.UTF-8', + 'lij_it': 'lij_IT.UTF-8', + 'lithuanian': 'lt_LT.ISO8859-13', + 'ln_cd': 'ln_CD.UTF-8', + 'lo': 'lo_LA.MULELAO-1', + 'lo_la': 'lo_LA.MULELAO-1', + 'lo_la.cp1133': 'lo_LA.IBM-CP1133', + 'lo_la.ibmcp1133': 'lo_LA.IBM-CP1133', + 'lo_la.mulelao1': 'lo_LA.MULELAO-1', + 'lt': 'lt_LT.ISO8859-13', + 'lt_lt': 'lt_LT.ISO8859-13', + 'lv': 'lv_LV.ISO8859-13', + 'lv_lv': 'lv_LV.ISO8859-13', + 'lzh_tw': 'lzh_TW.UTF-8', + 'mag_in': 'mag_IN.UTF-8', + 'mai': 'mai_IN.UTF-8', + 'mai_in': 'mai_IN.UTF-8', + 'mai_np': 'mai_NP.UTF-8', + 'mfe_mu': 'mfe_MU.UTF-8', + 'mg_mg': 'mg_MG.ISO8859-15', + 'mhr_ru': 'mhr_RU.UTF-8', + 'mi': 'mi_NZ.ISO8859-1', + 'mi_nz': 'mi_NZ.ISO8859-1', + 'miq_ni': 'miq_NI.UTF-8', + 'mjw_in': 'mjw_IN.UTF-8', + 'mk': 'mk_MK.ISO8859-5', + 'mk_mk': 'mk_MK.ISO8859-5', + 'ml': 'ml_IN.UTF-8', + 'ml_in': 'ml_IN.UTF-8', + 'mn_mn': 'mn_MN.UTF-8', + 'mni_in': 'mni_IN.UTF-8', + 'mr': 'mr_IN.UTF-8', + 'mr_in': 'mr_IN.UTF-8', + 'ms': 'ms_MY.ISO8859-1', + 'ms_my': 'ms_MY.ISO8859-1', + 'mt': 'mt_MT.ISO8859-3', + 'mt_mt': 'mt_MT.ISO8859-3', + 'my_mm': 'my_MM.UTF-8', + 'nan_tw': 'nan_TW.UTF-8', + 'nb': 'nb_NO.ISO8859-1', + 'nb_no': 'nb_NO.ISO8859-1', + 'nds_de': 'nds_DE.UTF-8', + 'nds_nl': 'nds_NL.UTF-8', + 'ne_np': 'ne_NP.UTF-8', + 'nhn_mx': 'nhn_MX.UTF-8', + 'niu_nu': 'niu_NU.UTF-8', + 'niu_nz': 'niu_NZ.UTF-8', + 'nl': 'nl_NL.ISO8859-1', + 'nl_aw': 'nl_AW.UTF-8', + 'nl_be': 'nl_BE.ISO8859-1', + 'nl_nl': 'nl_NL.ISO8859-1', + 'nn': 'nn_NO.ISO8859-1', + 'nn_no': 'nn_NO.ISO8859-1', + 'no': 'no_NO.ISO8859-1', + 'no@nynorsk': 'ny_NO.ISO8859-1', + 'no_no': 'no_NO.ISO8859-1', + 'no_no.iso88591@bokmal': 'no_NO.ISO8859-1', + 'no_no.iso88591@nynorsk': 'no_NO.ISO8859-1', + 'norwegian': 'no_NO.ISO8859-1', + 'nr': 'nr_ZA.ISO8859-1', + 'nr_za': 'nr_ZA.ISO8859-1', + 'nso': 'nso_ZA.ISO8859-15', + 'nso_za': 'nso_ZA.ISO8859-15', + 'ny': 'ny_NO.ISO8859-1', + 'ny_no': 'ny_NO.ISO8859-1', + 'nynorsk': 'nn_NO.ISO8859-1', + 'oc': 'oc_FR.ISO8859-1', + 'oc_fr': 'oc_FR.ISO8859-1', + 'om_et': 'om_ET.UTF-8', + 'om_ke': 'om_KE.ISO8859-1', + 'or': 'or_IN.UTF-8', + 'or_in': 'or_IN.UTF-8', + 'os_ru': 'os_RU.UTF-8', + 'pa': 'pa_IN.UTF-8', + 'pa_in': 'pa_IN.UTF-8', + 'pa_pk': 'pa_PK.UTF-8', + 'pap_an': 'pap_AN.UTF-8', + 'pap_aw': 'pap_AW.UTF-8', + 'pap_cw': 'pap_CW.UTF-8', + 'pd': 'pd_US.ISO8859-1', + 'pd_de': 'pd_DE.ISO8859-1', + 'pd_us': 'pd_US.ISO8859-1', + 'ph': 'ph_PH.ISO8859-1', + 'ph_ph': 'ph_PH.ISO8859-1', + 'pl': 'pl_PL.ISO8859-2', + 'pl_pl': 'pl_PL.ISO8859-2', + 'polish': 'pl_PL.ISO8859-2', + 'portuguese': 'pt_PT.ISO8859-1', + 'portuguese_brazil': 'pt_BR.ISO8859-1', + 'posix': 'C', + 'posix-utf2': 'C', + 'pp': 'pp_AN.ISO8859-1', + 'pp_an': 'pp_AN.ISO8859-1', + 'ps_af': 'ps_AF.UTF-8', + 'pt': 'pt_PT.ISO8859-1', + 'pt_br': 'pt_BR.ISO8859-1', + 'pt_pt': 'pt_PT.ISO8859-1', + 'quz_pe': 'quz_PE.UTF-8', + 'raj_in': 'raj_IN.UTF-8', + 'ro': 'ro_RO.ISO8859-2', + 'ro_ro': 'ro_RO.ISO8859-2', + 'romanian': 'ro_RO.ISO8859-2', + 'ru': 'ru_RU.UTF-8', + 'ru_ru': 'ru_RU.UTF-8', + 'ru_ua': 'ru_UA.KOI8-U', + 'rumanian': 'ro_RO.ISO8859-2', + 'russian': 'ru_RU.KOI8-R', + 'rw': 'rw_RW.ISO8859-1', + 'rw_rw': 'rw_RW.ISO8859-1', + 'sa_in': 'sa_IN.UTF-8', + 'sat_in': 'sat_IN.UTF-8', + 'sc_it': 'sc_IT.UTF-8', + 'sd': 'sd_IN.UTF-8', + 'sd_in': 'sd_IN.UTF-8', + 'sd_in@devanagari.utf8': 'sd_IN.UTF-8@devanagari', + 'sd_pk': 'sd_PK.UTF-8', + 'se_no': 'se_NO.UTF-8', + 'serbocroatian': 'sr_RS.UTF-8@latin', + 'sgs_lt': 'sgs_LT.UTF-8', + 'sh': 'sr_RS.UTF-8@latin', + 'sh_ba.iso88592@bosnia': 'sr_CS.ISO8859-2', + 'sh_hr': 'sh_HR.ISO8859-2', + 'sh_hr.iso88592': 'hr_HR.ISO8859-2', + 'sh_sp': 'sr_CS.ISO8859-2', + 'sh_yu': 'sr_RS.UTF-8@latin', + 'shn_mm': 'shn_MM.UTF-8', + 'shs_ca': 'shs_CA.UTF-8', + 'si': 'si_LK.UTF-8', + 'si_lk': 'si_LK.UTF-8', + 'sid_et': 'sid_ET.UTF-8', + 'sinhala': 'si_LK.UTF-8', + 'sk': 'sk_SK.ISO8859-2', + 'sk_sk': 'sk_SK.ISO8859-2', + 'sl': 'sl_SI.ISO8859-2', + 'sl_cs': 'sl_CS.ISO8859-2', + 'sl_si': 'sl_SI.ISO8859-2', + 'slovak': 'sk_SK.ISO8859-2', + 'slovene': 'sl_SI.ISO8859-2', + 'slovenian': 'sl_SI.ISO8859-2', + 'sm_ws': 'sm_WS.UTF-8', + 'so_dj': 'so_DJ.ISO8859-1', + 'so_et': 'so_ET.UTF-8', + 'so_ke': 'so_KE.ISO8859-1', + 'so_so': 'so_SO.ISO8859-1', + 'sp': 'sr_CS.ISO8859-5', + 'sp_yu': 'sr_CS.ISO8859-5', + 'spanish': 'es_ES.ISO8859-1', + 'spanish_spain': 'es_ES.ISO8859-1', + 'sq': 'sq_AL.ISO8859-2', + 'sq_al': 'sq_AL.ISO8859-2', + 'sq_mk': 'sq_MK.UTF-8', + 'sr': 'sr_RS.UTF-8', + 'sr@cyrillic': 'sr_RS.UTF-8', + 'sr@latn': 'sr_CS.UTF-8@latin', + 'sr_cs': 'sr_CS.UTF-8', + 'sr_cs.iso88592@latn': 'sr_CS.ISO8859-2', + 'sr_cs@latn': 'sr_CS.UTF-8@latin', + 'sr_me': 'sr_ME.UTF-8', + 'sr_rs': 'sr_RS.UTF-8', + 'sr_rs@latn': 'sr_RS.UTF-8@latin', + 'sr_sp': 'sr_CS.ISO8859-2', + 'sr_yu': 'sr_RS.UTF-8@latin', + 'sr_yu.cp1251@cyrillic': 'sr_CS.CP1251', + 'sr_yu.iso88592': 'sr_CS.ISO8859-2', + 'sr_yu.iso88595': 'sr_CS.ISO8859-5', + 'sr_yu.iso88595@cyrillic': 'sr_CS.ISO8859-5', + 'sr_yu.microsoftcp1251@cyrillic': 'sr_CS.CP1251', + 'sr_yu.utf8': 'sr_RS.UTF-8', + 'sr_yu.utf8@cyrillic': 'sr_RS.UTF-8', + 'sr_yu@cyrillic': 'sr_RS.UTF-8', + 'ss': 'ss_ZA.ISO8859-1', + 'ss_za': 'ss_ZA.ISO8859-1', + 'st': 'st_ZA.ISO8859-1', + 'st_za': 'st_ZA.ISO8859-1', + 'sv': 'sv_SE.ISO8859-1', + 'sv_fi': 'sv_FI.ISO8859-1', + 'sv_se': 'sv_SE.ISO8859-1', + 'sw_ke': 'sw_KE.UTF-8', + 'sw_tz': 'sw_TZ.UTF-8', + 'swedish': 'sv_SE.ISO8859-1', + 'szl_pl': 'szl_PL.UTF-8', + 'ta': 'ta_IN.TSCII-0', + 'ta_in': 'ta_IN.TSCII-0', + 'ta_in.tscii': 'ta_IN.TSCII-0', + 'ta_in.tscii0': 'ta_IN.TSCII-0', + 'ta_lk': 'ta_LK.UTF-8', + 'tcy_in.utf8': 'tcy_IN.UTF-8', + 'te': 'te_IN.UTF-8', + 'te_in': 'te_IN.UTF-8', + 'tg': 'tg_TJ.KOI8-C', + 'tg_tj': 'tg_TJ.KOI8-C', + 'th': 'th_TH.ISO8859-11', + 'th_th': 'th_TH.ISO8859-11', + 'th_th.tactis': 'th_TH.TIS620', + 'th_th.tis620': 'th_TH.TIS620', + 'thai': 'th_TH.ISO8859-11', + 'the_np': 'the_NP.UTF-8', + 'ti_er': 'ti_ER.UTF-8', + 'ti_et': 'ti_ET.UTF-8', + 'tig_er': 'tig_ER.UTF-8', + 'tk_tm': 'tk_TM.UTF-8', + 'tl': 'tl_PH.ISO8859-1', + 'tl_ph': 'tl_PH.ISO8859-1', + 'tn': 'tn_ZA.ISO8859-15', + 'tn_za': 'tn_ZA.ISO8859-15', + 'to_to': 'to_TO.UTF-8', + 'tpi_pg': 'tpi_PG.UTF-8', + 'tr': 'tr_TR.ISO8859-9', + 'tr_cy': 'tr_CY.ISO8859-9', + 'tr_tr': 'tr_TR.ISO8859-9', + 'ts': 'ts_ZA.ISO8859-1', + 'ts_za': 'ts_ZA.ISO8859-1', + 'tt': 'tt_RU.TATAR-CYR', + 'tt_ru': 'tt_RU.TATAR-CYR', + 'tt_ru.tatarcyr': 'tt_RU.TATAR-CYR', + 'tt_ru@iqtelif': 'tt_RU.UTF-8@iqtelif', + 'turkish': 'tr_TR.ISO8859-9', + 'ug_cn': 'ug_CN.UTF-8', + 'uk': 'uk_UA.KOI8-U', + 'uk_ua': 'uk_UA.KOI8-U', + 'univ': 'en_US.utf', + 'universal': 'en_US.utf', + 'universal.utf8@ucs4': 'en_US.UTF-8', + 'unm_us': 'unm_US.UTF-8', + 'ur': 'ur_PK.CP1256', + 'ur_in': 'ur_IN.UTF-8', + 'ur_pk': 'ur_PK.CP1256', + 'uz': 'uz_UZ.UTF-8', + 'uz_uz': 'uz_UZ.UTF-8', + 'uz_uz@cyrillic': 'uz_UZ.UTF-8', + 've': 've_ZA.UTF-8', + 've_za': 've_ZA.UTF-8', + 'vi': 'vi_VN.TCVN', + 'vi_vn': 'vi_VN.TCVN', + 'vi_vn.tcvn': 'vi_VN.TCVN', + 'vi_vn.tcvn5712': 'vi_VN.TCVN', + 'vi_vn.viscii': 'vi_VN.VISCII', + 'vi_vn.viscii111': 'vi_VN.VISCII', + 'wa': 'wa_BE.ISO8859-1', + 'wa_be': 'wa_BE.ISO8859-1', + 'wae_ch': 'wae_CH.UTF-8', + 'wal_et': 'wal_ET.UTF-8', + 'wo_sn': 'wo_SN.UTF-8', + 'xh': 'xh_ZA.ISO8859-1', + 'xh_za': 'xh_ZA.ISO8859-1', + 'yi': 'yi_US.CP1255', + 'yi_us': 'yi_US.CP1255', + 'yo_ng': 'yo_NG.UTF-8', + 'yue_hk': 'yue_HK.UTF-8', + 'yuw_pg': 'yuw_PG.UTF-8', + 'zh': 'zh_CN.eucCN', + 'zh_cn': 'zh_CN.gb2312', + 'zh_cn.big5': 'zh_TW.big5', + 'zh_cn.euc': 'zh_CN.eucCN', + 'zh_hk': 'zh_HK.big5hkscs', + 'zh_hk.big5hk': 'zh_HK.big5hkscs', + 'zh_sg': 'zh_SG.GB2312', + 'zh_sg.gbk': 'zh_SG.GBK', + 'zh_tw': 'zh_TW.big5', + 'zh_tw.euc': 'zh_TW.eucTW', + 'zh_tw.euctw': 'zh_TW.eucTW', + 'zu': 'zu_ZA.ISO8859-1', + 'zu_za': 'zu_ZA.ISO8859-1', +} + +# +# This maps Windows language identifiers to locale strings. +# +# This list has been updated from +# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_238z.asp +# to include every locale up to Windows Vista. +# +# NOTE: this mapping is incomplete. If your language is missing, please +# submit a bug report to the Python bug tracker at http://bugs.python.org/ +# Make sure you include the missing language identifier and the suggested +# locale code. +# + +windows_locale = { + 0x0436: "af_ZA", # Afrikaans + 0x041c: "sq_AL", # Albanian + 0x0484: "gsw_FR",# Alsatian - France + 0x045e: "am_ET", # Amharic - Ethiopia + 0x0401: "ar_SA", # Arabic - Saudi Arabia + 0x0801: "ar_IQ", # Arabic - Iraq + 0x0c01: "ar_EG", # Arabic - Egypt + 0x1001: "ar_LY", # Arabic - Libya + 0x1401: "ar_DZ", # Arabic - Algeria + 0x1801: "ar_MA", # Arabic - Morocco + 0x1c01: "ar_TN", # Arabic - Tunisia + 0x2001: "ar_OM", # Arabic - Oman + 0x2401: "ar_YE", # Arabic - Yemen + 0x2801: "ar_SY", # Arabic - Syria + 0x2c01: "ar_JO", # Arabic - Jordan + 0x3001: "ar_LB", # Arabic - Lebanon + 0x3401: "ar_KW", # Arabic - Kuwait + 0x3801: "ar_AE", # Arabic - United Arab Emirates + 0x3c01: "ar_BH", # Arabic - Bahrain + 0x4001: "ar_QA", # Arabic - Qatar + 0x042b: "hy_AM", # Armenian + 0x044d: "as_IN", # Assamese - India + 0x042c: "az_AZ", # Azeri - Latin + 0x082c: "az_AZ", # Azeri - Cyrillic + 0x046d: "ba_RU", # Bashkir + 0x042d: "eu_ES", # Basque - Russia + 0x0423: "be_BY", # Belarusian + 0x0445: "bn_IN", # Begali + 0x201a: "bs_BA", # Bosnian - Cyrillic + 0x141a: "bs_BA", # Bosnian - Latin + 0x047e: "br_FR", # Breton - France + 0x0402: "bg_BG", # Bulgarian +# 0x0455: "my_MM", # Burmese - Not supported + 0x0403: "ca_ES", # Catalan + 0x0004: "zh_CHS",# Chinese - Simplified + 0x0404: "zh_TW", # Chinese - Taiwan + 0x0804: "zh_CN", # Chinese - PRC + 0x0c04: "zh_HK", # Chinese - Hong Kong S.A.R. + 0x1004: "zh_SG", # Chinese - Singapore + 0x1404: "zh_MO", # Chinese - Macao S.A.R. + 0x7c04: "zh_CHT",# Chinese - Traditional + 0x0483: "co_FR", # Corsican - France + 0x041a: "hr_HR", # Croatian + 0x101a: "hr_BA", # Croatian - Bosnia + 0x0405: "cs_CZ", # Czech + 0x0406: "da_DK", # Danish + 0x048c: "gbz_AF",# Dari - Afghanistan + 0x0465: "div_MV",# Divehi - Maldives + 0x0413: "nl_NL", # Dutch - The Netherlands + 0x0813: "nl_BE", # Dutch - Belgium + 0x0409: "en_US", # English - United States + 0x0809: "en_GB", # English - United Kingdom + 0x0c09: "en_AU", # English - Australia + 0x1009: "en_CA", # English - Canada + 0x1409: "en_NZ", # English - New Zealand + 0x1809: "en_IE", # English - Ireland + 0x1c09: "en_ZA", # English - South Africa + 0x2009: "en_JA", # English - Jamaica + 0x2409: "en_CB", # English - Caribbean + 0x2809: "en_BZ", # English - Belize + 0x2c09: "en_TT", # English - Trinidad + 0x3009: "en_ZW", # English - Zimbabwe + 0x3409: "en_PH", # English - Philippines + 0x4009: "en_IN", # English - India + 0x4409: "en_MY", # English - Malaysia + 0x4809: "en_IN", # English - Singapore + 0x0425: "et_EE", # Estonian + 0x0438: "fo_FO", # Faroese + 0x0464: "fil_PH",# Filipino + 0x040b: "fi_FI", # Finnish + 0x040c: "fr_FR", # French - France + 0x080c: "fr_BE", # French - Belgium + 0x0c0c: "fr_CA", # French - Canada + 0x100c: "fr_CH", # French - Switzerland + 0x140c: "fr_LU", # French - Luxembourg + 0x180c: "fr_MC", # French - Monaco + 0x0462: "fy_NL", # Frisian - Netherlands + 0x0456: "gl_ES", # Galician + 0x0437: "ka_GE", # Georgian + 0x0407: "de_DE", # German - Germany + 0x0807: "de_CH", # German - Switzerland + 0x0c07: "de_AT", # German - Austria + 0x1007: "de_LU", # German - Luxembourg + 0x1407: "de_LI", # German - Liechtenstein + 0x0408: "el_GR", # Greek + 0x046f: "kl_GL", # Greenlandic - Greenland + 0x0447: "gu_IN", # Gujarati + 0x0468: "ha_NG", # Hausa - Latin + 0x040d: "he_IL", # Hebrew + 0x0439: "hi_IN", # Hindi + 0x040e: "hu_HU", # Hungarian + 0x040f: "is_IS", # Icelandic + 0x0421: "id_ID", # Indonesian + 0x045d: "iu_CA", # Inuktitut - Syllabics + 0x085d: "iu_CA", # Inuktitut - Latin + 0x083c: "ga_IE", # Irish - Ireland + 0x0410: "it_IT", # Italian - Italy + 0x0810: "it_CH", # Italian - Switzerland + 0x0411: "ja_JP", # Japanese + 0x044b: "kn_IN", # Kannada - India + 0x043f: "kk_KZ", # Kazakh + 0x0453: "kh_KH", # Khmer - Cambodia + 0x0486: "qut_GT",# K'iche - Guatemala + 0x0487: "rw_RW", # Kinyarwanda - Rwanda + 0x0457: "kok_IN",# Konkani + 0x0412: "ko_KR", # Korean + 0x0440: "ky_KG", # Kyrgyz + 0x0454: "lo_LA", # Lao - Lao PDR + 0x0426: "lv_LV", # Latvian + 0x0427: "lt_LT", # Lithuanian + 0x082e: "dsb_DE",# Lower Sorbian - Germany + 0x046e: "lb_LU", # Luxembourgish + 0x042f: "mk_MK", # FYROM Macedonian + 0x043e: "ms_MY", # Malay - Malaysia + 0x083e: "ms_BN", # Malay - Brunei Darussalam + 0x044c: "ml_IN", # Malayalam - India + 0x043a: "mt_MT", # Maltese + 0x0481: "mi_NZ", # Maori + 0x047a: "arn_CL",# Mapudungun + 0x044e: "mr_IN", # Marathi + 0x047c: "moh_CA",# Mohawk - Canada + 0x0450: "mn_MN", # Mongolian - Cyrillic + 0x0850: "mn_CN", # Mongolian - PRC + 0x0461: "ne_NP", # Nepali + 0x0414: "nb_NO", # Norwegian - Bokmal + 0x0814: "nn_NO", # Norwegian - Nynorsk + 0x0482: "oc_FR", # Occitan - France + 0x0448: "or_IN", # Oriya - India + 0x0463: "ps_AF", # Pashto - Afghanistan + 0x0429: "fa_IR", # Persian + 0x0415: "pl_PL", # Polish + 0x0416: "pt_BR", # Portuguese - Brazil + 0x0816: "pt_PT", # Portuguese - Portugal + 0x0446: "pa_IN", # Punjabi + 0x046b: "quz_BO",# Quechua (Bolivia) + 0x086b: "quz_EC",# Quechua (Ecuador) + 0x0c6b: "quz_PE",# Quechua (Peru) + 0x0418: "ro_RO", # Romanian - Romania + 0x0417: "rm_CH", # Romansh + 0x0419: "ru_RU", # Russian + 0x243b: "smn_FI",# Sami Finland + 0x103b: "smj_NO",# Sami Norway + 0x143b: "smj_SE",# Sami Sweden + 0x043b: "se_NO", # Sami Northern Norway + 0x083b: "se_SE", # Sami Northern Sweden + 0x0c3b: "se_FI", # Sami Northern Finland + 0x203b: "sms_FI",# Sami Skolt + 0x183b: "sma_NO",# Sami Southern Norway + 0x1c3b: "sma_SE",# Sami Southern Sweden + 0x044f: "sa_IN", # Sanskrit + 0x0c1a: "sr_SP", # Serbian - Cyrillic + 0x1c1a: "sr_BA", # Serbian - Bosnia Cyrillic + 0x081a: "sr_SP", # Serbian - Latin + 0x181a: "sr_BA", # Serbian - Bosnia Latin + 0x045b: "si_LK", # Sinhala - Sri Lanka + 0x046c: "ns_ZA", # Northern Sotho + 0x0432: "tn_ZA", # Setswana - Southern Africa + 0x041b: "sk_SK", # Slovak + 0x0424: "sl_SI", # Slovenian + 0x040a: "es_ES", # Spanish - Spain + 0x080a: "es_MX", # Spanish - Mexico + 0x0c0a: "es_ES", # Spanish - Spain (Modern) + 0x100a: "es_GT", # Spanish - Guatemala + 0x140a: "es_CR", # Spanish - Costa Rica + 0x180a: "es_PA", # Spanish - Panama + 0x1c0a: "es_DO", # Spanish - Dominican Republic + 0x200a: "es_VE", # Spanish - Venezuela + 0x240a: "es_CO", # Spanish - Colombia + 0x280a: "es_PE", # Spanish - Peru + 0x2c0a: "es_AR", # Spanish - Argentina + 0x300a: "es_EC", # Spanish - Ecuador + 0x340a: "es_CL", # Spanish - Chile + 0x380a: "es_UR", # Spanish - Uruguay + 0x3c0a: "es_PY", # Spanish - Paraguay + 0x400a: "es_BO", # Spanish - Bolivia + 0x440a: "es_SV", # Spanish - El Salvador + 0x480a: "es_HN", # Spanish - Honduras + 0x4c0a: "es_NI", # Spanish - Nicaragua + 0x500a: "es_PR", # Spanish - Puerto Rico + 0x540a: "es_US", # Spanish - United States +# 0x0430: "", # Sutu - Not supported + 0x0441: "sw_KE", # Swahili + 0x041d: "sv_SE", # Swedish - Sweden + 0x081d: "sv_FI", # Swedish - Finland + 0x045a: "syr_SY",# Syriac + 0x0428: "tg_TJ", # Tajik - Cyrillic + 0x085f: "tmz_DZ",# Tamazight - Latin + 0x0449: "ta_IN", # Tamil + 0x0444: "tt_RU", # Tatar + 0x044a: "te_IN", # Telugu + 0x041e: "th_TH", # Thai + 0x0851: "bo_BT", # Tibetan - Bhutan + 0x0451: "bo_CN", # Tibetan - PRC + 0x041f: "tr_TR", # Turkish + 0x0442: "tk_TM", # Turkmen - Cyrillic + 0x0480: "ug_CN", # Uighur - Arabic + 0x0422: "uk_UA", # Ukrainian + 0x042e: "wen_DE",# Upper Sorbian - Germany + 0x0420: "ur_PK", # Urdu + 0x0820: "ur_IN", # Urdu - India + 0x0443: "uz_UZ", # Uzbek - Latin + 0x0843: "uz_UZ", # Uzbek - Cyrillic + 0x042a: "vi_VN", # Vietnamese + 0x0452: "cy_GB", # Welsh + 0x0488: "wo_SN", # Wolof - Senegal + 0x0434: "xh_ZA", # Xhosa - South Africa + 0x0485: "sah_RU",# Yakut - Cyrillic + 0x0478: "ii_CN", # Yi - PRC + 0x046a: "yo_NG", # Yoruba - Nigeria + 0x0435: "zu_ZA", # Zulu +} + +def _print_locale(): + + """ Test function. + """ + categories = {} + def _init_categories(categories=categories): + for k,v in globals().items(): + if k[:3] == 'LC_': + categories[k] = v + _init_categories() + del categories['LC_ALL'] + + print('Locale defaults as determined by getdefaultlocale():') + print('-'*72) + lang, enc = getdefaultlocale() + print('Language: ', lang or '(undefined)') + print('Encoding: ', enc or '(undefined)') + print() + + print('Locale settings on startup:') + print('-'*72) + for name,category in categories.items(): + print(name, '...') + lang, enc = getlocale(category) + print(' Language: ', lang or '(undefined)') + print(' Encoding: ', enc or '(undefined)') + print() + + print() + print('Locale settings after calling resetlocale():') + print('-'*72) + resetlocale() + for name,category in categories.items(): + print(name, '...') + lang, enc = getlocale(category) + print(' Language: ', lang or '(undefined)') + print(' Encoding: ', enc or '(undefined)') + print() + + try: + setlocale(LC_ALL, "") + except: + print('NOTE:') + print('setlocale(LC_ALL, "") does not support the default locale') + print('given in the OS environment variables.') + else: + print() + print('Locale settings after calling setlocale(LC_ALL, ""):') + print('-'*72) + for name,category in categories.items(): + print(name, '...') + lang, enc = getlocale(category) + print(' Language: ', lang or '(undefined)') + print(' Encoding: ', enc or '(undefined)') + print() + +### + +try: + LC_MESSAGES +except NameError: + pass +else: + __all__.append("LC_MESSAGES") + +if __name__=='__main__': + print('Locale aliasing:') + print() + _print_locale() + print() + print('Number formatting:') + print() + _test() diff --git a/my_env/Lib/no-global-site-packages.txt b/my_env/Lib/no-global-site-packages.txt new file mode 100644 index 000000000..e69de29bb diff --git a/my_env/Lib/ntpath.py b/my_env/Lib/ntpath.py new file mode 100644 index 000000000..3c820b5d0 --- /dev/null +++ b/my_env/Lib/ntpath.py @@ -0,0 +1,669 @@ +# Module 'ntpath' -- common operations on WinNT/Win95 pathnames +"""Common pathname manipulations, WindowsNT/95 version. + +Instead of importing this module directly, import os and refer to this +module as os.path. +""" + +# strings representing various path-related bits and pieces +# These are primarily for export; internally, they are hardcoded. +# Should be set before imports for resolving cyclic dependency. +curdir = '.' +pardir = '..' +extsep = '.' +sep = '\\' +pathsep = ';' +altsep = '/' +defpath = '.;C:\\bin' +devnull = 'nul' + +import os +import sys +import stat +import genericpath +from genericpath import * + +__all__ = ["normcase","isabs","join","splitdrive","split","splitext", + "basename","dirname","commonprefix","getsize","getmtime", + "getatime","getctime", "islink","exists","lexists","isdir","isfile", + "ismount", "expanduser","expandvars","normpath","abspath", + "curdir","pardir","sep","pathsep","defpath","altsep", + "extsep","devnull","realpath","supports_unicode_filenames","relpath", + "samefile", "sameopenfile", "samestat", "commonpath"] + +def _get_bothseps(path): + if isinstance(path, bytes): + return b'\\/' + else: + return '\\/' + +# Normalize the case of a pathname and map slashes to backslashes. +# Other normalizations (such as optimizing '../' away) are not done +# (this is done by normpath). + +def normcase(s): + """Normalize case of pathname. + + Makes all characters lowercase and all slashes into backslashes.""" + s = os.fspath(s) + try: + if isinstance(s, bytes): + return s.replace(b'/', b'\\').lower() + else: + return s.replace('/', '\\').lower() + except (TypeError, AttributeError): + if not isinstance(s, (bytes, str)): + raise TypeError("normcase() argument must be str or bytes, " + "not %r" % s.__class__.__name__) from None + raise + + +# Return whether a path is absolute. +# Trivial in Posix, harder on Windows. +# For Windows it is absolute if it starts with a slash or backslash (current +# volume), or if a pathname after the volume-letter-and-colon or UNC-resource +# starts with a slash or backslash. + +def isabs(s): + """Test whether a path is absolute""" + s = os.fspath(s) + s = splitdrive(s)[1] + return len(s) > 0 and s[0] in _get_bothseps(s) + + +# Join two (or more) paths. +def join(path, *paths): + path = os.fspath(path) + if isinstance(path, bytes): + sep = b'\\' + seps = b'\\/' + colon = b':' + else: + sep = '\\' + seps = '\\/' + colon = ':' + try: + if not paths: + path[:0] + sep #23780: Ensure compatible data type even if p is null. + result_drive, result_path = splitdrive(path) + for p in map(os.fspath, paths): + p_drive, p_path = splitdrive(p) + if p_path and p_path[0] in seps: + # Second path is absolute + if p_drive or not result_drive: + result_drive = p_drive + result_path = p_path + continue + elif p_drive and p_drive != result_drive: + if p_drive.lower() != result_drive.lower(): + # Different drives => ignore the first path entirely + result_drive = p_drive + result_path = p_path + continue + # Same drive in different case + result_drive = p_drive + # Second path is relative to the first + if result_path and result_path[-1] not in seps: + result_path = result_path + sep + result_path = result_path + p_path + ## add separator between UNC and non-absolute path + if (result_path and result_path[0] not in seps and + result_drive and result_drive[-1:] != colon): + return result_drive + sep + result_path + return result_drive + result_path + except (TypeError, AttributeError, BytesWarning): + genericpath._check_arg_types('join', path, *paths) + raise + + +# Split a path in a drive specification (a drive letter followed by a +# colon) and the path specification. +# It is always true that drivespec + pathspec == p +def splitdrive(p): + """Split a pathname into drive/UNC sharepoint and relative path specifiers. + Returns a 2-tuple (drive_or_unc, path); either part may be empty. + + If you assign + result = splitdrive(p) + It is always true that: + result[0] + result[1] == p + + If the path contained a drive letter, drive_or_unc will contain everything + up to and including the colon. e.g. splitdrive("c:/dir") returns ("c:", "/dir") + + If the path contained a UNC path, the drive_or_unc will contain the host name + and share up to but not including the fourth directory separator character. + e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir") + + Paths cannot contain both a drive letter and a UNC path. + + """ + p = os.fspath(p) + if len(p) >= 2: + if isinstance(p, bytes): + sep = b'\\' + altsep = b'/' + colon = b':' + else: + sep = '\\' + altsep = '/' + colon = ':' + normp = p.replace(altsep, sep) + if (normp[0:2] == sep*2) and (normp[2:3] != sep): + # is a UNC path: + # vvvvvvvvvvvvvvvvvvvv drive letter or UNC path + # \\machine\mountpoint\directory\etc\... + # directory ^^^^^^^^^^^^^^^ + index = normp.find(sep, 2) + if index == -1: + return p[:0], p + index2 = normp.find(sep, index + 1) + # a UNC path can't have two slashes in a row + # (after the initial two) + if index2 == index + 1: + return p[:0], p + if index2 == -1: + index2 = len(p) + return p[:index2], p[index2:] + if normp[1:2] == colon: + return p[:2], p[2:] + return p[:0], p + + +# Split a path in head (everything up to the last '/') and tail (the +# rest). After the trailing '/' is stripped, the invariant +# join(head, tail) == p holds. +# The resulting head won't end in '/' unless it is the root. + +def split(p): + """Split a pathname. + + Return tuple (head, tail) where tail is everything after the final slash. + Either part may be empty.""" + p = os.fspath(p) + seps = _get_bothseps(p) + d, p = splitdrive(p) + # set i to index beyond p's last slash + i = len(p) + while i and p[i-1] not in seps: + i -= 1 + head, tail = p[:i], p[i:] # now tail has no slashes + # remove trailing slashes from head, unless it's all slashes + head = head.rstrip(seps) or head + return d + head, tail + + +# Split a path in root and extension. +# The extension is everything starting at the last dot in the last +# pathname component; the root is everything before that. +# It is always true that root + ext == p. + +def splitext(p): + p = os.fspath(p) + if isinstance(p, bytes): + return genericpath._splitext(p, b'\\', b'/', b'.') + else: + return genericpath._splitext(p, '\\', '/', '.') +splitext.__doc__ = genericpath._splitext.__doc__ + + +# Return the tail (basename) part of a path. + +def basename(p): + """Returns the final component of a pathname""" + return split(p)[1] + + +# Return the head (dirname) part of a path. + +def dirname(p): + """Returns the directory component of a pathname""" + return split(p)[0] + +# Is a path a symbolic link? +# This will always return false on systems where os.lstat doesn't exist. + +def islink(path): + """Test whether a path is a symbolic link. + This will always return false for Windows prior to 6.0. + """ + try: + st = os.lstat(path) + except (OSError, AttributeError): + return False + return stat.S_ISLNK(st.st_mode) + +# Being true for dangling symbolic links is also useful. + +def lexists(path): + """Test whether a path exists. Returns True for broken symbolic links""" + try: + st = os.lstat(path) + except OSError: + return False + return True + +# Is a path a mount point? +# Any drive letter root (eg c:\) +# Any share UNC (eg \\server\share) +# Any volume mounted on a filesystem folder +# +# No one method detects all three situations. Historically we've lexically +# detected drive letter roots and share UNCs. The canonical approach to +# detecting mounted volumes (querying the reparse tag) fails for the most +# common case: drive letter roots. The alternative which uses GetVolumePathName +# fails if the drive letter is the result of a SUBST. +try: + from nt import _getvolumepathname +except ImportError: + _getvolumepathname = None +def ismount(path): + """Test whether a path is a mount point (a drive root, the root of a + share, or a mounted volume)""" + path = os.fspath(path) + seps = _get_bothseps(path) + path = abspath(path) + root, rest = splitdrive(path) + if root and root[0] in seps: + return (not rest) or (rest in seps) + if rest in seps: + return True + + if _getvolumepathname: + return path.rstrip(seps) == _getvolumepathname(path).rstrip(seps) + else: + return False + + +# Expand paths beginning with '~' or '~user'. +# '~' means $HOME; '~user' means that user's home directory. +# If the path doesn't begin with '~', or if the user or $HOME is unknown, +# the path is returned unchanged (leaving error reporting to whatever +# function is called with the expanded path as argument). +# See also module 'glob' for expansion of *, ? and [...] in pathnames. +# (A function should also be defined to do full *sh-style environment +# variable expansion.) + +def expanduser(path): + """Expand ~ and ~user constructs. + + If user or $HOME is unknown, do nothing.""" + path = os.fspath(path) + if isinstance(path, bytes): + tilde = b'~' + else: + tilde = '~' + if not path.startswith(tilde): + return path + i, n = 1, len(path) + while i < n and path[i] not in _get_bothseps(path): + i += 1 + + if 'HOME' in os.environ: + userhome = os.environ['HOME'] + elif 'USERPROFILE' in os.environ: + userhome = os.environ['USERPROFILE'] + elif not 'HOMEPATH' in os.environ: + return path + else: + try: + drive = os.environ['HOMEDRIVE'] + except KeyError: + drive = '' + userhome = join(drive, os.environ['HOMEPATH']) + + if isinstance(path, bytes): + userhome = os.fsencode(userhome) + + if i != 1: #~user + userhome = join(dirname(userhome), path[1:i]) + + return userhome + path[i:] + + +# Expand paths containing shell variable substitutions. +# The following rules apply: +# - no expansion within single quotes +# - '$$' is translated into '$' +# - '%%' is translated into '%' if '%%' are not seen in %var1%%var2% +# - ${varname} is accepted. +# - $varname is accepted. +# - %varname% is accepted. +# - varnames can be made out of letters, digits and the characters '_-' +# (though is not verified in the ${varname} and %varname% cases) +# XXX With COMMAND.COM you can use any characters in a variable name, +# XXX except '^|<>='. + +def expandvars(path): + """Expand shell variables of the forms $var, ${var} and %var%. + + Unknown variables are left unchanged.""" + path = os.fspath(path) + if isinstance(path, bytes): + if b'$' not in path and b'%' not in path: + return path + import string + varchars = bytes(string.ascii_letters + string.digits + '_-', 'ascii') + quote = b'\'' + percent = b'%' + brace = b'{' + rbrace = b'}' + dollar = b'$' + environ = getattr(os, 'environb', None) + else: + if '$' not in path and '%' not in path: + return path + import string + varchars = string.ascii_letters + string.digits + '_-' + quote = '\'' + percent = '%' + brace = '{' + rbrace = '}' + dollar = '$' + environ = os.environ + res = path[:0] + index = 0 + pathlen = len(path) + while index < pathlen: + c = path[index:index+1] + if c == quote: # no expansion within single quotes + path = path[index + 1:] + pathlen = len(path) + try: + index = path.index(c) + res += c + path[:index + 1] + except ValueError: + res += c + path + index = pathlen - 1 + elif c == percent: # variable or '%' + if path[index + 1:index + 2] == percent: + res += c + index += 1 + else: + path = path[index+1:] + pathlen = len(path) + try: + index = path.index(percent) + except ValueError: + res += percent + path + index = pathlen - 1 + else: + var = path[:index] + try: + if environ is None: + value = os.fsencode(os.environ[os.fsdecode(var)]) + else: + value = environ[var] + except KeyError: + value = percent + var + percent + res += value + elif c == dollar: # variable or '$$' + if path[index + 1:index + 2] == dollar: + res += c + index += 1 + elif path[index + 1:index + 2] == brace: + path = path[index+2:] + pathlen = len(path) + try: + index = path.index(rbrace) + except ValueError: + res += dollar + brace + path + index = pathlen - 1 + else: + var = path[:index] + try: + if environ is None: + value = os.fsencode(os.environ[os.fsdecode(var)]) + else: + value = environ[var] + except KeyError: + value = dollar + brace + var + rbrace + res += value + else: + var = path[:0] + index += 1 + c = path[index:index + 1] + while c and c in varchars: + var += c + index += 1 + c = path[index:index + 1] + try: + if environ is None: + value = os.fsencode(os.environ[os.fsdecode(var)]) + else: + value = environ[var] + except KeyError: + value = dollar + var + res += value + if c: + index -= 1 + else: + res += c + index += 1 + return res + + +# Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A\B. +# Previously, this function also truncated pathnames to 8+3 format, +# but as this module is called "ntpath", that's obviously wrong! + +def normpath(path): + """Normalize path, eliminating double slashes, etc.""" + path = os.fspath(path) + if isinstance(path, bytes): + sep = b'\\' + altsep = b'/' + curdir = b'.' + pardir = b'..' + special_prefixes = (b'\\\\.\\', b'\\\\?\\') + else: + sep = '\\' + altsep = '/' + curdir = '.' + pardir = '..' + special_prefixes = ('\\\\.\\', '\\\\?\\') + if path.startswith(special_prefixes): + # in the case of paths with these prefixes: + # \\.\ -> device names + # \\?\ -> literal paths + # do not do any normalization, but return the path unchanged + return path + path = path.replace(altsep, sep) + prefix, path = splitdrive(path) + + # collapse initial backslashes + if path.startswith(sep): + prefix += sep + path = path.lstrip(sep) + + comps = path.split(sep) + i = 0 + while i < len(comps): + if not comps[i] or comps[i] == curdir: + del comps[i] + elif comps[i] == pardir: + if i > 0 and comps[i-1] != pardir: + del comps[i-1:i+1] + i -= 1 + elif i == 0 and prefix.endswith(sep): + del comps[i] + else: + i += 1 + else: + i += 1 + # If the path is now empty, substitute '.' + if not prefix and not comps: + comps.append(curdir) + return prefix + sep.join(comps) + +def _abspath_fallback(path): + """Return the absolute version of a path as a fallback function in case + `nt._getfullpathname` is not available or raises OSError. See bpo-31047 for + more. + + """ + + path = os.fspath(path) + if not isabs(path): + if isinstance(path, bytes): + cwd = os.getcwdb() + else: + cwd = os.getcwd() + path = join(cwd, path) + return normpath(path) + +# Return an absolute path. +try: + from nt import _getfullpathname + +except ImportError: # not running on Windows - mock up something sensible + abspath = _abspath_fallback + +else: # use native Windows method on Windows + def abspath(path): + """Return the absolute version of a path.""" + try: + return normpath(_getfullpathname(path)) + except (OSError, ValueError): + return _abspath_fallback(path) + +# realpath is a no-op on systems without islink support +realpath = abspath +# Win9x family and earlier have no Unicode filename support. +supports_unicode_filenames = (hasattr(sys, "getwindowsversion") and + sys.getwindowsversion()[3] >= 2) + +def relpath(path, start=None): + """Return a relative version of a path""" + path = os.fspath(path) + if isinstance(path, bytes): + sep = b'\\' + curdir = b'.' + pardir = b'..' + else: + sep = '\\' + curdir = '.' + pardir = '..' + + if start is None: + start = curdir + + if not path: + raise ValueError("no path specified") + + start = os.fspath(start) + try: + start_abs = abspath(normpath(start)) + path_abs = abspath(normpath(path)) + start_drive, start_rest = splitdrive(start_abs) + path_drive, path_rest = splitdrive(path_abs) + if normcase(start_drive) != normcase(path_drive): + raise ValueError("path is on mount %r, start on mount %r" % ( + path_drive, start_drive)) + + start_list = [x for x in start_rest.split(sep) if x] + path_list = [x for x in path_rest.split(sep) if x] + # Work out how much of the filepath is shared by start and path. + i = 0 + for e1, e2 in zip(start_list, path_list): + if normcase(e1) != normcase(e2): + break + i += 1 + + rel_list = [pardir] * (len(start_list)-i) + path_list[i:] + if not rel_list: + return curdir + return join(*rel_list) + except (TypeError, ValueError, AttributeError, BytesWarning, DeprecationWarning): + genericpath._check_arg_types('relpath', path, start) + raise + + +# Return the longest common sub-path of the sequence of paths given as input. +# The function is case-insensitive and 'separator-insensitive', i.e. if the +# only difference between two paths is the use of '\' versus '/' as separator, +# they are deemed to be equal. +# +# However, the returned path will have the standard '\' separator (even if the +# given paths had the alternative '/' separator) and will have the case of the +# first path given in the sequence. Additionally, any trailing separator is +# stripped from the returned path. + +def commonpath(paths): + """Given a sequence of path names, returns the longest common sub-path.""" + + if not paths: + raise ValueError('commonpath() arg is an empty sequence') + + paths = tuple(map(os.fspath, paths)) + if isinstance(paths[0], bytes): + sep = b'\\' + altsep = b'/' + curdir = b'.' + else: + sep = '\\' + altsep = '/' + curdir = '.' + + try: + drivesplits = [splitdrive(p.replace(altsep, sep).lower()) for p in paths] + split_paths = [p.split(sep) for d, p in drivesplits] + + try: + isabs, = set(p[:1] == sep for d, p in drivesplits) + except ValueError: + raise ValueError("Can't mix absolute and relative paths") from None + + # Check that all drive letters or UNC paths match. The check is made only + # now otherwise type errors for mixing strings and bytes would not be + # caught. + if len(set(d for d, p in drivesplits)) != 1: + raise ValueError("Paths don't have the same drive") + + drive, path = splitdrive(paths[0].replace(altsep, sep)) + common = path.split(sep) + common = [c for c in common if c and c != curdir] + + split_paths = [[c for c in s if c and c != curdir] for s in split_paths] + s1 = min(split_paths) + s2 = max(split_paths) + for i, c in enumerate(s1): + if c != s2[i]: + common = common[:i] + break + else: + common = common[:len(s1)] + + prefix = drive + sep if isabs else drive + return prefix + sep.join(common) + except (TypeError, AttributeError): + genericpath._check_arg_types('commonpath', *paths) + raise + + +# determine if two files are in fact the same file +try: + # GetFinalPathNameByHandle is available starting with Windows 6.0. + # Windows XP and non-Windows OS'es will mock _getfinalpathname. + if sys.getwindowsversion()[:2] >= (6, 0): + from nt import _getfinalpathname + else: + raise ImportError +except (AttributeError, ImportError): + # On Windows XP and earlier, two files are the same if their absolute + # pathnames are the same. + # Non-Windows operating systems fake this method with an XP + # approximation. + def _getfinalpathname(f): + return normcase(abspath(f)) + + +try: + # The genericpath.isdir implementation uses os.stat and checks the mode + # attribute to tell whether or not the path is a directory. + # This is overkill on Windows - just pass the path to GetFileAttributes + # and check the attribute from there. + from nt import _isdir as isdir +except ImportError: + # Use genericpath.isdir as imported above. + pass diff --git a/my_env/Lib/operator.py b/my_env/Lib/operator.py new file mode 100644 index 000000000..0e2e53efc --- /dev/null +++ b/my_env/Lib/operator.py @@ -0,0 +1,464 @@ +""" +Operator Interface + +This module exports a set of functions corresponding to the intrinsic +operators of Python. For example, operator.add(x, y) is equivalent +to the expression x+y. The function names are those used for special +methods; variants without leading and trailing '__' are also provided +for convenience. + +This is the pure Python implementation of the module. +""" + +__all__ = ['abs', 'add', 'and_', 'attrgetter', 'concat', 'contains', 'countOf', + 'delitem', 'eq', 'floordiv', 'ge', 'getitem', 'gt', 'iadd', 'iand', + 'iconcat', 'ifloordiv', 'ilshift', 'imatmul', 'imod', 'imul', + 'index', 'indexOf', 'inv', 'invert', 'ior', 'ipow', 'irshift', + 'is_', 'is_not', 'isub', 'itemgetter', 'itruediv', 'ixor', 'le', + 'length_hint', 'lshift', 'lt', 'matmul', 'methodcaller', 'mod', + 'mul', 'ne', 'neg', 'not_', 'or_', 'pos', 'pow', 'rshift', + 'setitem', 'sub', 'truediv', 'truth', 'xor'] + +from builtins import abs as _abs + + +# Comparison Operations *******************************************************# + +def lt(a, b): + "Same as a < b." + return a < b + +def le(a, b): + "Same as a <= b." + return a <= b + +def eq(a, b): + "Same as a == b." + return a == b + +def ne(a, b): + "Same as a != b." + return a != b + +def ge(a, b): + "Same as a >= b." + return a >= b + +def gt(a, b): + "Same as a > b." + return a > b + +# Logical Operations **********************************************************# + +def not_(a): + "Same as not a." + return not a + +def truth(a): + "Return True if a is true, False otherwise." + return True if a else False + +def is_(a, b): + "Same as a is b." + return a is b + +def is_not(a, b): + "Same as a is not b." + return a is not b + +# Mathematical/Bitwise Operations *********************************************# + +def abs(a): + "Same as abs(a)." + return _abs(a) + +def add(a, b): + "Same as a + b." + return a + b + +def and_(a, b): + "Same as a & b." + return a & b + +def floordiv(a, b): + "Same as a // b." + return a // b + +def index(a): + "Same as a.__index__()." + return a.__index__() + +def inv(a): + "Same as ~a." + return ~a +invert = inv + +def lshift(a, b): + "Same as a << b." + return a << b + +def mod(a, b): + "Same as a % b." + return a % b + +def mul(a, b): + "Same as a * b." + return a * b + +def matmul(a, b): + "Same as a @ b." + return a @ b + +def neg(a): + "Same as -a." + return -a + +def or_(a, b): + "Same as a | b." + return a | b + +def pos(a): + "Same as +a." + return +a + +def pow(a, b): + "Same as a ** b." + return a ** b + +def rshift(a, b): + "Same as a >> b." + return a >> b + +def sub(a, b): + "Same as a - b." + return a - b + +def truediv(a, b): + "Same as a / b." + return a / b + +def xor(a, b): + "Same as a ^ b." + return a ^ b + +# Sequence Operations *********************************************************# + +def concat(a, b): + "Same as a + b, for a and b sequences." + if not hasattr(a, '__getitem__'): + msg = "'%s' object can't be concatenated" % type(a).__name__ + raise TypeError(msg) + return a + b + +def contains(a, b): + "Same as b in a (note reversed operands)." + return b in a + +def countOf(a, b): + "Return the number of times b occurs in a." + count = 0 + for i in a: + if i == b: + count += 1 + return count + +def delitem(a, b): + "Same as del a[b]." + del a[b] + +def getitem(a, b): + "Same as a[b]." + return a[b] + +def indexOf(a, b): + "Return the first index of b in a." + for i, j in enumerate(a): + if j == b: + return i + else: + raise ValueError('sequence.index(x): x not in sequence') + +def setitem(a, b, c): + "Same as a[b] = c." + a[b] = c + +def length_hint(obj, default=0): + """ + Return an estimate of the number of items in obj. + This is useful for presizing containers when building from an iterable. + + If the object supports len(), the result will be exact. Otherwise, it may + over- or under-estimate by an arbitrary amount. The result will be an + integer >= 0. + """ + if not isinstance(default, int): + msg = ("'%s' object cannot be interpreted as an integer" % + type(default).__name__) + raise TypeError(msg) + + try: + return len(obj) + except TypeError: + pass + + try: + hint = type(obj).__length_hint__ + except AttributeError: + return default + + try: + val = hint(obj) + except TypeError: + return default + if val is NotImplemented: + return default + if not isinstance(val, int): + msg = ('__length_hint__ must be integer, not %s' % + type(val).__name__) + raise TypeError(msg) + if val < 0: + msg = '__length_hint__() should return >= 0' + raise ValueError(msg) + return val + +# Generalized Lookup Objects **************************************************# + +class attrgetter: + """ + Return a callable object that fetches the given attribute(s) from its operand. + After f = attrgetter('name'), the call f(r) returns r.name. + After g = attrgetter('name', 'date'), the call g(r) returns (r.name, r.date). + After h = attrgetter('name.first', 'name.last'), the call h(r) returns + (r.name.first, r.name.last). + """ + __slots__ = ('_attrs', '_call') + + def __init__(self, attr, *attrs): + if not attrs: + if not isinstance(attr, str): + raise TypeError('attribute name must be a string') + self._attrs = (attr,) + names = attr.split('.') + def func(obj): + for name in names: + obj = getattr(obj, name) + return obj + self._call = func + else: + self._attrs = (attr,) + attrs + getters = tuple(map(attrgetter, self._attrs)) + def func(obj): + return tuple(getter(obj) for getter in getters) + self._call = func + + def __call__(self, obj): + return self._call(obj) + + def __repr__(self): + return '%s.%s(%s)' % (self.__class__.__module__, + self.__class__.__qualname__, + ', '.join(map(repr, self._attrs))) + + def __reduce__(self): + return self.__class__, self._attrs + +class itemgetter: + """ + Return a callable object that fetches the given item(s) from its operand. + After f = itemgetter(2), the call f(r) returns r[2]. + After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3]) + """ + __slots__ = ('_items', '_call') + + def __init__(self, item, *items): + if not items: + self._items = (item,) + def func(obj): + return obj[item] + self._call = func + else: + self._items = items = (item,) + items + def func(obj): + return tuple(obj[i] for i in items) + self._call = func + + def __call__(self, obj): + return self._call(obj) + + def __repr__(self): + return '%s.%s(%s)' % (self.__class__.__module__, + self.__class__.__name__, + ', '.join(map(repr, self._items))) + + def __reduce__(self): + return self.__class__, self._items + +class methodcaller: + """ + Return a callable object that calls the given method on its operand. + After f = methodcaller('name'), the call f(r) returns r.name(). + After g = methodcaller('name', 'date', foo=1), the call g(r) returns + r.name('date', foo=1). + """ + __slots__ = ('_name', '_args', '_kwargs') + + def __init__(*args, **kwargs): + if len(args) < 2: + msg = "methodcaller needs at least one argument, the method name" + raise TypeError(msg) + self = args[0] + self._name = args[1] + if not isinstance(self._name, str): + raise TypeError('method name must be a string') + self._args = args[2:] + self._kwargs = kwargs + + def __call__(self, obj): + return getattr(obj, self._name)(*self._args, **self._kwargs) + + def __repr__(self): + args = [repr(self._name)] + args.extend(map(repr, self._args)) + args.extend('%s=%r' % (k, v) for k, v in self._kwargs.items()) + return '%s.%s(%s)' % (self.__class__.__module__, + self.__class__.__name__, + ', '.join(args)) + + def __reduce__(self): + if not self._kwargs: + return self.__class__, (self._name,) + self._args + else: + from functools import partial + return partial(self.__class__, self._name, **self._kwargs), self._args + + +# In-place Operations *********************************************************# + +def iadd(a, b): + "Same as a += b." + a += b + return a + +def iand(a, b): + "Same as a &= b." + a &= b + return a + +def iconcat(a, b): + "Same as a += b, for a and b sequences." + if not hasattr(a, '__getitem__'): + msg = "'%s' object can't be concatenated" % type(a).__name__ + raise TypeError(msg) + a += b + return a + +def ifloordiv(a, b): + "Same as a //= b." + a //= b + return a + +def ilshift(a, b): + "Same as a <<= b." + a <<= b + return a + +def imod(a, b): + "Same as a %= b." + a %= b + return a + +def imul(a, b): + "Same as a *= b." + a *= b + return a + +def imatmul(a, b): + "Same as a @= b." + a @= b + return a + +def ior(a, b): + "Same as a |= b." + a |= b + return a + +def ipow(a, b): + "Same as a **= b." + a **=b + return a + +def irshift(a, b): + "Same as a >>= b." + a >>= b + return a + +def isub(a, b): + "Same as a -= b." + a -= b + return a + +def itruediv(a, b): + "Same as a /= b." + a /= b + return a + +def ixor(a, b): + "Same as a ^= b." + a ^= b + return a + + +try: + from _operator import * +except ImportError: + pass +else: + from _operator import __doc__ + +# All of these "__func__ = func" assignments have to happen after importing +# from _operator to make sure they're set to the right function +__lt__ = lt +__le__ = le +__eq__ = eq +__ne__ = ne +__ge__ = ge +__gt__ = gt +__not__ = not_ +__abs__ = abs +__add__ = add +__and__ = and_ +__floordiv__ = floordiv +__index__ = index +__inv__ = inv +__invert__ = invert +__lshift__ = lshift +__mod__ = mod +__mul__ = mul +__matmul__ = matmul +__neg__ = neg +__or__ = or_ +__pos__ = pos +__pow__ = pow +__rshift__ = rshift +__sub__ = sub +__truediv__ = truediv +__xor__ = xor +__concat__ = concat +__contains__ = contains +__delitem__ = delitem +__getitem__ = getitem +__setitem__ = setitem +__iadd__ = iadd +__iand__ = iand +__iconcat__ = iconcat +__ifloordiv__ = ifloordiv +__ilshift__ = ilshift +__imod__ = imod +__imul__ = imul +__imatmul__ = imatmul +__ior__ = ior +__ipow__ = ipow +__irshift__ = irshift +__isub__ = isub +__itruediv__ = itruediv +__ixor__ = ixor diff --git a/my_env/Lib/orig-prefix.txt b/my_env/Lib/orig-prefix.txt new file mode 100644 index 000000000..12fb3fa32 --- /dev/null +++ b/my_env/Lib/orig-prefix.txt @@ -0,0 +1 @@ +c:\users\tsb\appdata\local\programs\python\python37 \ No newline at end of file diff --git a/my_env/Lib/os.py b/my_env/Lib/os.py new file mode 100644 index 000000000..499e62856 --- /dev/null +++ b/my_env/Lib/os.py @@ -0,0 +1,1078 @@ +r"""OS routines for NT or Posix depending on what system we're on. + +This exports: + - all functions from posix or nt, e.g. unlink, stat, etc. + - os.path is either posixpath or ntpath + - os.name is either 'posix' or 'nt' + - os.curdir is a string representing the current directory (always '.') + - os.pardir is a string representing the parent directory (always '..') + - os.sep is the (or a most common) pathname separator ('/' or '\\') + - os.extsep is the extension separator (always '.') + - os.altsep is the alternate pathname separator (None or '/') + - os.pathsep is the component separator used in $PATH etc + - os.linesep is the line separator in text files ('\r' or '\n' or '\r\n') + - os.defpath is the default search path for executables + - os.devnull is the file path of the null device ('/dev/null', etc.) + +Programs that import and use 'os' stand a better chance of being +portable between different platforms. Of course, they must then +only use functions that are defined by all platforms (e.g., unlink +and opendir), and leave all pathname manipulation to os.path +(e.g., split and join). +""" + +#' +import abc +import sys +import stat as st + +_names = sys.builtin_module_names + +# Note: more names are added to __all__ later. +__all__ = ["altsep", "curdir", "pardir", "sep", "pathsep", "linesep", + "defpath", "name", "path", "devnull", "SEEK_SET", "SEEK_CUR", + "SEEK_END", "fsencode", "fsdecode", "get_exec_path", "fdopen", + "popen", "extsep"] + +def _exists(name): + return name in globals() + +def _get_exports_list(module): + try: + return list(module.__all__) + except AttributeError: + return [n for n in dir(module) if n[0] != '_'] + +# Any new dependencies of the os module and/or changes in path separator +# requires updating importlib as well. +if 'posix' in _names: + name = 'posix' + linesep = '\n' + from posix import * + try: + from posix import _exit + __all__.append('_exit') + except ImportError: + pass + import posixpath as path + + try: + from posix import _have_functions + except ImportError: + pass + + import posix + __all__.extend(_get_exports_list(posix)) + del posix + +elif 'nt' in _names: + name = 'nt' + linesep = '\r\n' + from nt import * + try: + from nt import _exit + __all__.append('_exit') + except ImportError: + pass + import ntpath as path + + import nt + __all__.extend(_get_exports_list(nt)) + del nt + + try: + from nt import _have_functions + except ImportError: + pass + +else: + raise ImportError('no os specific module found') + +sys.modules['os.path'] = path +from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep, + devnull) + +del _names + + +if _exists("_have_functions"): + _globals = globals() + def _add(str, fn): + if (fn in _globals) and (str in _have_functions): + _set.add(_globals[fn]) + + _set = set() + _add("HAVE_FACCESSAT", "access") + _add("HAVE_FCHMODAT", "chmod") + _add("HAVE_FCHOWNAT", "chown") + _add("HAVE_FSTATAT", "stat") + _add("HAVE_FUTIMESAT", "utime") + _add("HAVE_LINKAT", "link") + _add("HAVE_MKDIRAT", "mkdir") + _add("HAVE_MKFIFOAT", "mkfifo") + _add("HAVE_MKNODAT", "mknod") + _add("HAVE_OPENAT", "open") + _add("HAVE_READLINKAT", "readlink") + _add("HAVE_RENAMEAT", "rename") + _add("HAVE_SYMLINKAT", "symlink") + _add("HAVE_UNLINKAT", "unlink") + _add("HAVE_UNLINKAT", "rmdir") + _add("HAVE_UTIMENSAT", "utime") + supports_dir_fd = _set + + _set = set() + _add("HAVE_FACCESSAT", "access") + supports_effective_ids = _set + + _set = set() + _add("HAVE_FCHDIR", "chdir") + _add("HAVE_FCHMOD", "chmod") + _add("HAVE_FCHOWN", "chown") + _add("HAVE_FDOPENDIR", "listdir") + _add("HAVE_FDOPENDIR", "scandir") + _add("HAVE_FEXECVE", "execve") + _set.add(stat) # fstat always works + _add("HAVE_FTRUNCATE", "truncate") + _add("HAVE_FUTIMENS", "utime") + _add("HAVE_FUTIMES", "utime") + _add("HAVE_FPATHCONF", "pathconf") + if _exists("statvfs") and _exists("fstatvfs"): # mac os x10.3 + _add("HAVE_FSTATVFS", "statvfs") + supports_fd = _set + + _set = set() + _add("HAVE_FACCESSAT", "access") + # Some platforms don't support lchmod(). Often the function exists + # anyway, as a stub that always returns ENOSUP or perhaps EOPNOTSUPP. + # (No, I don't know why that's a good design.) ./configure will detect + # this and reject it--so HAVE_LCHMOD still won't be defined on such + # platforms. This is Very Helpful. + # + # However, sometimes platforms without a working lchmod() *do* have + # fchmodat(). (Examples: Linux kernel 3.2 with glibc 2.15, + # OpenIndiana 3.x.) And fchmodat() has a flag that theoretically makes + # it behave like lchmod(). So in theory it would be a suitable + # replacement for lchmod(). But when lchmod() doesn't work, fchmodat()'s + # flag doesn't work *either*. Sadly ./configure isn't sophisticated + # enough to detect this condition--it only determines whether or not + # fchmodat() minimally works. + # + # Therefore we simply ignore fchmodat() when deciding whether or not + # os.chmod supports follow_symlinks. Just checking lchmod() is + # sufficient. After all--if you have a working fchmodat(), your + # lchmod() almost certainly works too. + # + # _add("HAVE_FCHMODAT", "chmod") + _add("HAVE_FCHOWNAT", "chown") + _add("HAVE_FSTATAT", "stat") + _add("HAVE_LCHFLAGS", "chflags") + _add("HAVE_LCHMOD", "chmod") + if _exists("lchown"): # mac os x10.3 + _add("HAVE_LCHOWN", "chown") + _add("HAVE_LINKAT", "link") + _add("HAVE_LUTIMES", "utime") + _add("HAVE_LSTAT", "stat") + _add("HAVE_FSTATAT", "stat") + _add("HAVE_UTIMENSAT", "utime") + _add("MS_WINDOWS", "stat") + supports_follow_symlinks = _set + + del _set + del _have_functions + del _globals + del _add + + +# Python uses fixed values for the SEEK_ constants; they are mapped +# to native constants if necessary in posixmodule.c +# Other possible SEEK values are directly imported from posixmodule.c +SEEK_SET = 0 +SEEK_CUR = 1 +SEEK_END = 2 + +# Super directory utilities. +# (Inspired by Eric Raymond; the doc strings are mostly his) + +def makedirs(name, mode=0o777, exist_ok=False): + """makedirs(name [, mode=0o777][, exist_ok=False]) + + Super-mkdir; create a leaf directory and all intermediate ones. Works like + mkdir, except that any intermediate path segment (not just the rightmost) + will be created if it does not exist. If the target directory already + exists, raise an OSError if exist_ok is False. Otherwise no exception is + raised. This is recursive. + + """ + head, tail = path.split(name) + if not tail: + head, tail = path.split(head) + if head and tail and not path.exists(head): + try: + makedirs(head, exist_ok=exist_ok) + except FileExistsError: + # Defeats race condition when another thread created the path + pass + cdir = curdir + if isinstance(tail, bytes): + cdir = bytes(curdir, 'ASCII') + if tail == cdir: # xxx/newdir/. exists if xxx/newdir exists + return + try: + mkdir(name, mode) + except OSError: + # Cannot rely on checking for EEXIST, since the operating system + # could give priority to other errors like EACCES or EROFS + if not exist_ok or not path.isdir(name): + raise + +def removedirs(name): + """removedirs(name) + + Super-rmdir; remove a leaf directory and all empty intermediate + ones. Works like rmdir except that, if the leaf directory is + successfully removed, directories corresponding to rightmost path + segments will be pruned away until either the whole path is + consumed or an error occurs. Errors during this latter phase are + ignored -- they generally mean that a directory was not empty. + + """ + rmdir(name) + head, tail = path.split(name) + if not tail: + head, tail = path.split(head) + while head and tail: + try: + rmdir(head) + except OSError: + break + head, tail = path.split(head) + +def renames(old, new): + """renames(old, new) + + Super-rename; create directories as necessary and delete any left + empty. Works like rename, except creation of any intermediate + directories needed to make the new pathname good is attempted + first. After the rename, directories corresponding to rightmost + path segments of the old name will be pruned until either the + whole path is consumed or a nonempty directory is found. + + Note: this function can fail with the new directory structure made + if you lack permissions needed to unlink the leaf directory or + file. + + """ + head, tail = path.split(new) + if head and tail and not path.exists(head): + makedirs(head) + rename(old, new) + head, tail = path.split(old) + if head and tail: + try: + removedirs(head) + except OSError: + pass + +__all__.extend(["makedirs", "removedirs", "renames"]) + +def walk(top, topdown=True, onerror=None, followlinks=False): + """Directory tree generator. + + For each directory in the directory tree rooted at top (including top + itself, but excluding '.' and '..'), yields a 3-tuple + + dirpath, dirnames, filenames + + dirpath is a string, the path to the directory. dirnames is a list of + the names of the subdirectories in dirpath (excluding '.' and '..'). + filenames is a list of the names of the non-directory files in dirpath. + Note that the names in the lists are just names, with no path components. + To get a full path (which begins with top) to a file or directory in + dirpath, do os.path.join(dirpath, name). + + If optional arg 'topdown' is true or not specified, the triple for a + directory is generated before the triples for any of its subdirectories + (directories are generated top down). If topdown is false, the triple + for a directory is generated after the triples for all of its + subdirectories (directories are generated bottom up). + + When topdown is true, the caller can modify the dirnames list in-place + (e.g., via del or slice assignment), and walk will only recurse into the + subdirectories whose names remain in dirnames; this can be used to prune the + search, or to impose a specific order of visiting. Modifying dirnames when + topdown is false is ineffective, since the directories in dirnames have + already been generated by the time dirnames itself is generated. No matter + the value of topdown, the list of subdirectories is retrieved before the + tuples for the directory and its subdirectories are generated. + + By default errors from the os.scandir() call are ignored. If + optional arg 'onerror' is specified, it should be a function; it + will be called with one argument, an OSError instance. It can + report the error to continue with the walk, or raise the exception + to abort the walk. Note that the filename is available as the + filename attribute of the exception object. + + By default, os.walk does not follow symbolic links to subdirectories on + systems that support them. In order to get this functionality, set the + optional argument 'followlinks' to true. + + Caution: if you pass a relative pathname for top, don't change the + current working directory between resumptions of walk. walk never + changes the current directory, and assumes that the client doesn't + either. + + Example: + + import os + from os.path import join, getsize + for root, dirs, files in os.walk('python/Lib/email'): + print(root, "consumes", end="") + print(sum([getsize(join(root, name)) for name in files]), end="") + print("bytes in", len(files), "non-directory files") + if 'CVS' in dirs: + dirs.remove('CVS') # don't visit CVS directories + + """ + top = fspath(top) + dirs = [] + nondirs = [] + walk_dirs = [] + + # We may not have read permission for top, in which case we can't + # get a list of the files the directory contains. os.walk + # always suppressed the exception then, rather than blow up for a + # minor reason when (say) a thousand readable directories are still + # left to visit. That logic is copied here. + try: + # Note that scandir is global in this module due + # to earlier import-*. + scandir_it = scandir(top) + except OSError as error: + if onerror is not None: + onerror(error) + return + + with scandir_it: + while True: + try: + try: + entry = next(scandir_it) + except StopIteration: + break + except OSError as error: + if onerror is not None: + onerror(error) + return + + try: + is_dir = entry.is_dir() + except OSError: + # If is_dir() raises an OSError, consider that the entry is not + # a directory, same behaviour than os.path.isdir(). + is_dir = False + + if is_dir: + dirs.append(entry.name) + else: + nondirs.append(entry.name) + + if not topdown and is_dir: + # Bottom-up: recurse into sub-directory, but exclude symlinks to + # directories if followlinks is False + if followlinks: + walk_into = True + else: + try: + is_symlink = entry.is_symlink() + except OSError: + # If is_symlink() raises an OSError, consider that the + # entry is not a symbolic link, same behaviour than + # os.path.islink(). + is_symlink = False + walk_into = not is_symlink + + if walk_into: + walk_dirs.append(entry.path) + + # Yield before recursion if going top down + if topdown: + yield top, dirs, nondirs + + # Recurse into sub-directories + islink, join = path.islink, path.join + for dirname in dirs: + new_path = join(top, dirname) + # Issue #23605: os.path.islink() is used instead of caching + # entry.is_symlink() result during the loop on os.scandir() because + # the caller can replace the directory entry during the "yield" + # above. + if followlinks or not islink(new_path): + yield from walk(new_path, topdown, onerror, followlinks) + else: + # Recurse into sub-directories + for new_path in walk_dirs: + yield from walk(new_path, topdown, onerror, followlinks) + # Yield after recursion if going bottom up + yield top, dirs, nondirs + +__all__.append("walk") + +if {open, stat} <= supports_dir_fd and {scandir, stat} <= supports_fd: + + def fwalk(top=".", topdown=True, onerror=None, *, follow_symlinks=False, dir_fd=None): + """Directory tree generator. + + This behaves exactly like walk(), except that it yields a 4-tuple + + dirpath, dirnames, filenames, dirfd + + `dirpath`, `dirnames` and `filenames` are identical to walk() output, + and `dirfd` is a file descriptor referring to the directory `dirpath`. + + The advantage of fwalk() over walk() is that it's safe against symlink + races (when follow_symlinks is False). + + If dir_fd is not None, it should be a file descriptor open to a directory, + and top should be relative; top will then be relative to that directory. + (dir_fd is always supported for fwalk.) + + Caution: + Since fwalk() yields file descriptors, those are only valid until the + next iteration step, so you should dup() them if you want to keep them + for a longer period. + + Example: + + import os + for root, dirs, files, rootfd in os.fwalk('python/Lib/email'): + print(root, "consumes", end="") + print(sum([os.stat(name, dir_fd=rootfd).st_size for name in files]), + end="") + print("bytes in", len(files), "non-directory files") + if 'CVS' in dirs: + dirs.remove('CVS') # don't visit CVS directories + """ + if not isinstance(top, int) or not hasattr(top, '__index__'): + top = fspath(top) + # Note: To guard against symlink races, we use the standard + # lstat()/open()/fstat() trick. + if not follow_symlinks: + orig_st = stat(top, follow_symlinks=False, dir_fd=dir_fd) + topfd = open(top, O_RDONLY, dir_fd=dir_fd) + try: + if (follow_symlinks or (st.S_ISDIR(orig_st.st_mode) and + path.samestat(orig_st, stat(topfd)))): + yield from _fwalk(topfd, top, isinstance(top, bytes), + topdown, onerror, follow_symlinks) + finally: + close(topfd) + + def _fwalk(topfd, toppath, isbytes, topdown, onerror, follow_symlinks): + # Note: This uses O(depth of the directory tree) file descriptors: if + # necessary, it can be adapted to only require O(1) FDs, see issue + # #13734. + + scandir_it = scandir(topfd) + dirs = [] + nondirs = [] + entries = None if topdown or follow_symlinks else [] + for entry in scandir_it: + name = entry.name + if isbytes: + name = fsencode(name) + try: + if entry.is_dir(): + dirs.append(name) + if entries is not None: + entries.append(entry) + else: + nondirs.append(name) + except OSError: + try: + # Add dangling symlinks, ignore disappeared files + if entry.is_symlink(): + nondirs.append(name) + except OSError: + pass + + if topdown: + yield toppath, dirs, nondirs, topfd + + for name in dirs if entries is None else zip(dirs, entries): + try: + if not follow_symlinks: + if topdown: + orig_st = stat(name, dir_fd=topfd, follow_symlinks=False) + else: + assert entries is not None + name, entry = name + orig_st = entry.stat(follow_symlinks=False) + dirfd = open(name, O_RDONLY, dir_fd=topfd) + except OSError as err: + if onerror is not None: + onerror(err) + continue + try: + if follow_symlinks or path.samestat(orig_st, stat(dirfd)): + dirpath = path.join(toppath, name) + yield from _fwalk(dirfd, dirpath, isbytes, + topdown, onerror, follow_symlinks) + finally: + close(dirfd) + + if not topdown: + yield toppath, dirs, nondirs, topfd + + __all__.append("fwalk") + +# Make sure os.environ exists, at least +try: + environ +except NameError: + environ = {} + +def execl(file, *args): + """execl(file, *args) + + Execute the executable file with argument list args, replacing the + current process. """ + execv(file, args) + +def execle(file, *args): + """execle(file, *args, env) + + Execute the executable file with argument list args and + environment env, replacing the current process. """ + env = args[-1] + execve(file, args[:-1], env) + +def execlp(file, *args): + """execlp(file, *args) + + Execute the executable file (which is searched for along $PATH) + with argument list args, replacing the current process. """ + execvp(file, args) + +def execlpe(file, *args): + """execlpe(file, *args, env) + + Execute the executable file (which is searched for along $PATH) + with argument list args and environment env, replacing the current + process. """ + env = args[-1] + execvpe(file, args[:-1], env) + +def execvp(file, args): + """execvp(file, args) + + Execute the executable file (which is searched for along $PATH) + with argument list args, replacing the current process. + args may be a list or tuple of strings. """ + _execvpe(file, args) + +def execvpe(file, args, env): + """execvpe(file, args, env) + + Execute the executable file (which is searched for along $PATH) + with argument list args and environment env , replacing the + current process. + args may be a list or tuple of strings. """ + _execvpe(file, args, env) + +__all__.extend(["execl","execle","execlp","execlpe","execvp","execvpe"]) + +def _execvpe(file, args, env=None): + if env is not None: + exec_func = execve + argrest = (args, env) + else: + exec_func = execv + argrest = (args,) + env = environ + + if path.dirname(file): + exec_func(file, *argrest) + return + saved_exc = None + path_list = get_exec_path(env) + if name != 'nt': + file = fsencode(file) + path_list = map(fsencode, path_list) + for dir in path_list: + fullname = path.join(dir, file) + try: + exec_func(fullname, *argrest) + except (FileNotFoundError, NotADirectoryError) as e: + last_exc = e + except OSError as e: + last_exc = e + if saved_exc is None: + saved_exc = e + if saved_exc is not None: + raise saved_exc + raise last_exc + + +def get_exec_path(env=None): + """Returns the sequence of directories that will be searched for the + named executable (similar to a shell) when launching a process. + + *env* must be an environment variable dict or None. If *env* is None, + os.environ will be used. + """ + # Use a local import instead of a global import to limit the number of + # modules loaded at startup: the os module is always loaded at startup by + # Python. It may also avoid a bootstrap issue. + import warnings + + if env is None: + env = environ + + # {b'PATH': ...}.get('PATH') and {'PATH': ...}.get(b'PATH') emit a + # BytesWarning when using python -b or python -bb: ignore the warning + with warnings.catch_warnings(): + warnings.simplefilter("ignore", BytesWarning) + + try: + path_list = env.get('PATH') + except TypeError: + path_list = None + + if supports_bytes_environ: + try: + path_listb = env[b'PATH'] + except (KeyError, TypeError): + pass + else: + if path_list is not None: + raise ValueError( + "env cannot contain 'PATH' and b'PATH' keys") + path_list = path_listb + + if path_list is not None and isinstance(path_list, bytes): + path_list = fsdecode(path_list) + + if path_list is None: + path_list = defpath + return path_list.split(pathsep) + + +# Change environ to automatically call putenv(), unsetenv if they exist. +from _collections_abc import MutableMapping + +class _Environ(MutableMapping): + def __init__(self, data, encodekey, decodekey, encodevalue, decodevalue, putenv, unsetenv): + self.encodekey = encodekey + self.decodekey = decodekey + self.encodevalue = encodevalue + self.decodevalue = decodevalue + self.putenv = putenv + self.unsetenv = unsetenv + self._data = data + + def __getitem__(self, key): + try: + value = self._data[self.encodekey(key)] + except KeyError: + # raise KeyError with the original key value + raise KeyError(key) from None + return self.decodevalue(value) + + def __setitem__(self, key, value): + key = self.encodekey(key) + value = self.encodevalue(value) + self.putenv(key, value) + self._data[key] = value + + def __delitem__(self, key): + encodedkey = self.encodekey(key) + self.unsetenv(encodedkey) + try: + del self._data[encodedkey] + except KeyError: + # raise KeyError with the original key value + raise KeyError(key) from None + + def __iter__(self): + # list() from dict object is an atomic operation + keys = list(self._data) + for key in keys: + yield self.decodekey(key) + + def __len__(self): + return len(self._data) + + def __repr__(self): + return 'environ({{{}}})'.format(', '.join( + ('{!r}: {!r}'.format(self.decodekey(key), self.decodevalue(value)) + for key, value in self._data.items()))) + + def copy(self): + return dict(self) + + def setdefault(self, key, value): + if key not in self: + self[key] = value + return self[key] + +try: + _putenv = putenv +except NameError: + _putenv = lambda key, value: None +else: + if "putenv" not in __all__: + __all__.append("putenv") + +try: + _unsetenv = unsetenv +except NameError: + _unsetenv = lambda key: _putenv(key, "") +else: + if "unsetenv" not in __all__: + __all__.append("unsetenv") + +def _createenviron(): + if name == 'nt': + # Where Env Var Names Must Be UPPERCASE + def check_str(value): + if not isinstance(value, str): + raise TypeError("str expected, not %s" % type(value).__name__) + return value + encode = check_str + decode = str + def encodekey(key): + return encode(key).upper() + data = {} + for key, value in environ.items(): + data[encodekey(key)] = value + else: + # Where Env Var Names Can Be Mixed Case + encoding = sys.getfilesystemencoding() + def encode(value): + if not isinstance(value, str): + raise TypeError("str expected, not %s" % type(value).__name__) + return value.encode(encoding, 'surrogateescape') + def decode(value): + return value.decode(encoding, 'surrogateescape') + encodekey = encode + data = environ + return _Environ(data, + encodekey, decode, + encode, decode, + _putenv, _unsetenv) + +# unicode environ +environ = _createenviron() +del _createenviron + + +def getenv(key, default=None): + """Get an environment variable, return None if it doesn't exist. + The optional second argument can specify an alternate default. + key, default and the result are str.""" + return environ.get(key, default) + +supports_bytes_environ = (name != 'nt') +__all__.extend(("getenv", "supports_bytes_environ")) + +if supports_bytes_environ: + def _check_bytes(value): + if not isinstance(value, bytes): + raise TypeError("bytes expected, not %s" % type(value).__name__) + return value + + # bytes environ + environb = _Environ(environ._data, + _check_bytes, bytes, + _check_bytes, bytes, + _putenv, _unsetenv) + del _check_bytes + + def getenvb(key, default=None): + """Get an environment variable, return None if it doesn't exist. + The optional second argument can specify an alternate default. + key, default and the result are bytes.""" + return environb.get(key, default) + + __all__.extend(("environb", "getenvb")) + +def _fscodec(): + encoding = sys.getfilesystemencoding() + errors = sys.getfilesystemencodeerrors() + + def fsencode(filename): + """Encode filename (an os.PathLike, bytes, or str) to the filesystem + encoding with 'surrogateescape' error handler, return bytes unchanged. + On Windows, use 'strict' error handler if the file system encoding is + 'mbcs' (which is the default encoding). + """ + filename = fspath(filename) # Does type-checking of `filename`. + if isinstance(filename, str): + return filename.encode(encoding, errors) + else: + return filename + + def fsdecode(filename): + """Decode filename (an os.PathLike, bytes, or str) from the filesystem + encoding with 'surrogateescape' error handler, return str unchanged. On + Windows, use 'strict' error handler if the file system encoding is + 'mbcs' (which is the default encoding). + """ + filename = fspath(filename) # Does type-checking of `filename`. + if isinstance(filename, bytes): + return filename.decode(encoding, errors) + else: + return filename + + return fsencode, fsdecode + +fsencode, fsdecode = _fscodec() +del _fscodec + +# Supply spawn*() (probably only for Unix) +if _exists("fork") and not _exists("spawnv") and _exists("execv"): + + P_WAIT = 0 + P_NOWAIT = P_NOWAITO = 1 + + __all__.extend(["P_WAIT", "P_NOWAIT", "P_NOWAITO"]) + + # XXX Should we support P_DETACH? I suppose it could fork()**2 + # and close the std I/O streams. Also, P_OVERLAY is the same + # as execv*()? + + def _spawnvef(mode, file, args, env, func): + # Internal helper; func is the exec*() function to use + if not isinstance(args, (tuple, list)): + raise TypeError('argv must be a tuple or a list') + if not args or not args[0]: + raise ValueError('argv first element cannot be empty') + pid = fork() + if not pid: + # Child + try: + if env is None: + func(file, args) + else: + func(file, args, env) + except: + _exit(127) + else: + # Parent + if mode == P_NOWAIT: + return pid # Caller is responsible for waiting! + while 1: + wpid, sts = waitpid(pid, 0) + if WIFSTOPPED(sts): + continue + elif WIFSIGNALED(sts): + return -WTERMSIG(sts) + elif WIFEXITED(sts): + return WEXITSTATUS(sts) + else: + raise OSError("Not stopped, signaled or exited???") + + def spawnv(mode, file, args): + """spawnv(mode, file, args) -> integer + +Execute file with arguments from args in a subprocess. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + return _spawnvef(mode, file, args, None, execv) + + def spawnve(mode, file, args, env): + """spawnve(mode, file, args, env) -> integer + +Execute file with arguments from args in a subprocess with the +specified environment. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + return _spawnvef(mode, file, args, env, execve) + + # Note: spawnvp[e] isn't currently supported on Windows + + def spawnvp(mode, file, args): + """spawnvp(mode, file, args) -> integer + +Execute file (which is looked for along $PATH) with arguments from +args in a subprocess. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + return _spawnvef(mode, file, args, None, execvp) + + def spawnvpe(mode, file, args, env): + """spawnvpe(mode, file, args, env) -> integer + +Execute file (which is looked for along $PATH) with arguments from +args in a subprocess with the supplied environment. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + return _spawnvef(mode, file, args, env, execvpe) + + + __all__.extend(["spawnv", "spawnve", "spawnvp", "spawnvpe"]) + + +if _exists("spawnv"): + # These aren't supplied by the basic Windows code + # but can be easily implemented in Python + + def spawnl(mode, file, *args): + """spawnl(mode, file, *args) -> integer + +Execute file with arguments from args in a subprocess. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + return spawnv(mode, file, args) + + def spawnle(mode, file, *args): + """spawnle(mode, file, *args, env) -> integer + +Execute file with arguments from args in a subprocess with the +supplied environment. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + env = args[-1] + return spawnve(mode, file, args[:-1], env) + + + __all__.extend(["spawnl", "spawnle"]) + + +if _exists("spawnvp"): + # At the moment, Windows doesn't implement spawnvp[e], + # so it won't have spawnlp[e] either. + def spawnlp(mode, file, *args): + """spawnlp(mode, file, *args) -> integer + +Execute file (which is looked for along $PATH) with arguments from +args in a subprocess with the supplied environment. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + return spawnvp(mode, file, args) + + def spawnlpe(mode, file, *args): + """spawnlpe(mode, file, *args, env) -> integer + +Execute file (which is looked for along $PATH) with arguments from +args in a subprocess with the supplied environment. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + env = args[-1] + return spawnvpe(mode, file, args[:-1], env) + + + __all__.extend(["spawnlp", "spawnlpe"]) + + +# Supply os.popen() +def popen(cmd, mode="r", buffering=-1): + if not isinstance(cmd, str): + raise TypeError("invalid cmd type (%s, expected string)" % type(cmd)) + if mode not in ("r", "w"): + raise ValueError("invalid mode %r" % mode) + if buffering == 0 or buffering is None: + raise ValueError("popen() does not support unbuffered streams") + import subprocess, io + if mode == "r": + proc = subprocess.Popen(cmd, + shell=True, + stdout=subprocess.PIPE, + bufsize=buffering) + return _wrap_close(io.TextIOWrapper(proc.stdout), proc) + else: + proc = subprocess.Popen(cmd, + shell=True, + stdin=subprocess.PIPE, + bufsize=buffering) + return _wrap_close(io.TextIOWrapper(proc.stdin), proc) + +# Helper for popen() -- a proxy for a file whose close waits for the process +class _wrap_close: + def __init__(self, stream, proc): + self._stream = stream + self._proc = proc + def close(self): + self._stream.close() + returncode = self._proc.wait() + if returncode == 0: + return None + if name == 'nt': + return returncode + else: + return returncode << 8 # Shift left to match old behavior + def __enter__(self): + return self + def __exit__(self, *args): + self.close() + def __getattr__(self, name): + return getattr(self._stream, name) + def __iter__(self): + return iter(self._stream) + +# Supply os.fdopen() +def fdopen(fd, *args, **kwargs): + if not isinstance(fd, int): + raise TypeError("invalid fd type (%s, expected integer)" % type(fd)) + import io + return io.open(fd, *args, **kwargs) + + +# For testing purposes, make sure the function is available when the C +# implementation exists. +def _fspath(path): + """Return the path representation of a path-like object. + + If str or bytes is passed in, it is returned unchanged. Otherwise the + os.PathLike interface is used to get the path representation. If the + path representation is not str or bytes, TypeError is raised. If the + provided path is not str, bytes, or os.PathLike, TypeError is raised. + """ + if isinstance(path, (str, bytes)): + return path + + # Work from the object's type to match method resolution of other magic + # methods. + path_type = type(path) + try: + path_repr = path_type.__fspath__(path) + except AttributeError: + if hasattr(path_type, '__fspath__'): + raise + else: + raise TypeError("expected str, bytes or os.PathLike object, " + "not " + path_type.__name__) + if isinstance(path_repr, (str, bytes)): + return path_repr + else: + raise TypeError("expected {}.__fspath__() to return str or bytes, " + "not {}".format(path_type.__name__, + type(path_repr).__name__)) + +# If there is no C implementation, make the pure Python version the +# implementation as transparently as possible. +if not _exists('fspath'): + fspath = _fspath + fspath.__name__ = "fspath" + + +class PathLike(abc.ABC): + + """Abstract base class for implementing the file system path protocol.""" + + @abc.abstractmethod + def __fspath__(self): + """Return the file system path representation of the object.""" + raise NotImplementedError + + @classmethod + def __subclasshook__(cls, subclass): + return hasattr(subclass, '__fspath__') diff --git a/my_env/Lib/posixpath.py b/my_env/Lib/posixpath.py new file mode 100644 index 000000000..785aa728b --- /dev/null +++ b/my_env/Lib/posixpath.py @@ -0,0 +1,529 @@ +"""Common operations on Posix pathnames. + +Instead of importing this module directly, import os and refer to +this module as os.path. The "os.path" name is an alias for this +module on Posix systems; on other systems (e.g. Mac, Windows), +os.path provides the same operations in a manner specific to that +platform, and is an alias to another module (e.g. macpath, ntpath). + +Some of this can actually be useful on non-Posix systems too, e.g. +for manipulation of the pathname component of URLs. +""" + +# Strings representing various path-related bits and pieces. +# These are primarily for export; internally, they are hardcoded. +# Should be set before imports for resolving cyclic dependency. +curdir = '.' +pardir = '..' +extsep = '.' +sep = '/' +pathsep = ':' +defpath = '/bin:/usr/bin' +altsep = None +devnull = '/dev/null' + +import os +import sys +import stat +import genericpath +from genericpath import * + +__all__ = ["normcase","isabs","join","splitdrive","split","splitext", + "basename","dirname","commonprefix","getsize","getmtime", + "getatime","getctime","islink","exists","lexists","isdir","isfile", + "ismount", "expanduser","expandvars","normpath","abspath", + "samefile","sameopenfile","samestat", + "curdir","pardir","sep","pathsep","defpath","altsep","extsep", + "devnull","realpath","supports_unicode_filenames","relpath", + "commonpath"] + + +def _get_sep(path): + if isinstance(path, bytes): + return b'/' + else: + return '/' + +# Normalize the case of a pathname. Trivial in Posix, string.lower on Mac. +# On MS-DOS this may also turn slashes into backslashes; however, other +# normalizations (such as optimizing '../' away) are not allowed +# (another function should be defined to do that). + +def normcase(s): + """Normalize case of pathname. Has no effect under Posix""" + s = os.fspath(s) + if not isinstance(s, (bytes, str)): + raise TypeError("normcase() argument must be str or bytes, " + "not '{}'".format(s.__class__.__name__)) + return s + + +# Return whether a path is absolute. +# Trivial in Posix, harder on the Mac or MS-DOS. + +def isabs(s): + """Test whether a path is absolute""" + s = os.fspath(s) + sep = _get_sep(s) + return s.startswith(sep) + + +# Join pathnames. +# Ignore the previous parts if a part is absolute. +# Insert a '/' unless the first part is empty or already ends in '/'. + +def join(a, *p): + """Join two or more pathname components, inserting '/' as needed. + If any component is an absolute path, all previous path components + will be discarded. An empty last part will result in a path that + ends with a separator.""" + a = os.fspath(a) + sep = _get_sep(a) + path = a + try: + if not p: + path[:0] + sep #23780: Ensure compatible data type even if p is null. + for b in map(os.fspath, p): + if b.startswith(sep): + path = b + elif not path or path.endswith(sep): + path += b + else: + path += sep + b + except (TypeError, AttributeError, BytesWarning): + genericpath._check_arg_types('join', a, *p) + raise + return path + + +# Split a path in head (everything up to the last '/') and tail (the +# rest). If the path ends in '/', tail will be empty. If there is no +# '/' in the path, head will be empty. +# Trailing '/'es are stripped from head unless it is the root. + +def split(p): + """Split a pathname. Returns tuple "(head, tail)" where "tail" is + everything after the final slash. Either part may be empty.""" + p = os.fspath(p) + sep = _get_sep(p) + i = p.rfind(sep) + 1 + head, tail = p[:i], p[i:] + if head and head != sep*len(head): + head = head.rstrip(sep) + return head, tail + + +# Split a path in root and extension. +# The extension is everything starting at the last dot in the last +# pathname component; the root is everything before that. +# It is always true that root + ext == p. + +def splitext(p): + p = os.fspath(p) + if isinstance(p, bytes): + sep = b'/' + extsep = b'.' + else: + sep = '/' + extsep = '.' + return genericpath._splitext(p, sep, None, extsep) +splitext.__doc__ = genericpath._splitext.__doc__ + +# Split a pathname into a drive specification and the rest of the +# path. Useful on DOS/Windows/NT; on Unix, the drive is always empty. + +def splitdrive(p): + """Split a pathname into drive and path. On Posix, drive is always + empty.""" + p = os.fspath(p) + return p[:0], p + + +# Return the tail (basename) part of a path, same as split(path)[1]. + +def basename(p): + """Returns the final component of a pathname""" + p = os.fspath(p) + sep = _get_sep(p) + i = p.rfind(sep) + 1 + return p[i:] + + +# Return the head (dirname) part of a path, same as split(path)[0]. + +def dirname(p): + """Returns the directory component of a pathname""" + p = os.fspath(p) + sep = _get_sep(p) + i = p.rfind(sep) + 1 + head = p[:i] + if head and head != sep*len(head): + head = head.rstrip(sep) + return head + + +# Is a path a symbolic link? +# This will always return false on systems where os.lstat doesn't exist. + +def islink(path): + """Test whether a path is a symbolic link""" + try: + st = os.lstat(path) + except (OSError, AttributeError): + return False + return stat.S_ISLNK(st.st_mode) + +# Being true for dangling symbolic links is also useful. + +def lexists(path): + """Test whether a path exists. Returns True for broken symbolic links""" + try: + os.lstat(path) + except OSError: + return False + return True + + +# Is a path a mount point? +# (Does this work for all UNIXes? Is it even guaranteed to work by Posix?) + +def ismount(path): + """Test whether a path is a mount point""" + try: + s1 = os.lstat(path) + except OSError: + # It doesn't exist -- so not a mount point. :-) + return False + else: + # A symlink can never be a mount point + if stat.S_ISLNK(s1.st_mode): + return False + + if isinstance(path, bytes): + parent = join(path, b'..') + else: + parent = join(path, '..') + parent = realpath(parent) + try: + s2 = os.lstat(parent) + except OSError: + return False + + dev1 = s1.st_dev + dev2 = s2.st_dev + if dev1 != dev2: + return True # path/.. on a different device as path + ino1 = s1.st_ino + ino2 = s2.st_ino + if ino1 == ino2: + return True # path/.. is the same i-node as path + return False + + +# Expand paths beginning with '~' or '~user'. +# '~' means $HOME; '~user' means that user's home directory. +# If the path doesn't begin with '~', or if the user or $HOME is unknown, +# the path is returned unchanged (leaving error reporting to whatever +# function is called with the expanded path as argument). +# See also module 'glob' for expansion of *, ? and [...] in pathnames. +# (A function should also be defined to do full *sh-style environment +# variable expansion.) + +def expanduser(path): + """Expand ~ and ~user constructions. If user or $HOME is unknown, + do nothing.""" + path = os.fspath(path) + if isinstance(path, bytes): + tilde = b'~' + else: + tilde = '~' + if not path.startswith(tilde): + return path + sep = _get_sep(path) + i = path.find(sep, 1) + if i < 0: + i = len(path) + if i == 1: + if 'HOME' not in os.environ: + import pwd + try: + userhome = pwd.getpwuid(os.getuid()).pw_dir + except KeyError: + # bpo-10496: if the current user identifier doesn't exist in the + # password database, return the path unchanged + return path + else: + userhome = os.environ['HOME'] + else: + import pwd + name = path[1:i] + if isinstance(name, bytes): + name = str(name, 'ASCII') + try: + pwent = pwd.getpwnam(name) + except KeyError: + # bpo-10496: if the user name from the path doesn't exist in the + # password database, return the path unchanged + return path + userhome = pwent.pw_dir + if isinstance(path, bytes): + userhome = os.fsencode(userhome) + root = b'/' + else: + root = '/' + userhome = userhome.rstrip(root) + return (userhome + path[i:]) or root + + +# Expand paths containing shell variable substitutions. +# This expands the forms $variable and ${variable} only. +# Non-existent variables are left unchanged. + +_varprog = None +_varprogb = None + +def expandvars(path): + """Expand shell variables of form $var and ${var}. Unknown variables + are left unchanged.""" + path = os.fspath(path) + global _varprog, _varprogb + if isinstance(path, bytes): + if b'$' not in path: + return path + if not _varprogb: + import re + _varprogb = re.compile(br'\$(\w+|\{[^}]*\})', re.ASCII) + search = _varprogb.search + start = b'{' + end = b'}' + environ = getattr(os, 'environb', None) + else: + if '$' not in path: + return path + if not _varprog: + import re + _varprog = re.compile(r'\$(\w+|\{[^}]*\})', re.ASCII) + search = _varprog.search + start = '{' + end = '}' + environ = os.environ + i = 0 + while True: + m = search(path, i) + if not m: + break + i, j = m.span(0) + name = m.group(1) + if name.startswith(start) and name.endswith(end): + name = name[1:-1] + try: + if environ is None: + value = os.fsencode(os.environ[os.fsdecode(name)]) + else: + value = environ[name] + except KeyError: + i = j + else: + tail = path[j:] + path = path[:i] + value + i = len(path) + path += tail + return path + + +# Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A/B. +# It should be understood that this may change the meaning of the path +# if it contains symbolic links! + +def normpath(path): + """Normalize path, eliminating double slashes, etc.""" + path = os.fspath(path) + if isinstance(path, bytes): + sep = b'/' + empty = b'' + dot = b'.' + dotdot = b'..' + else: + sep = '/' + empty = '' + dot = '.' + dotdot = '..' + if path == empty: + return dot + initial_slashes = path.startswith(sep) + # POSIX allows one or two initial slashes, but treats three or more + # as single slash. + if (initial_slashes and + path.startswith(sep*2) and not path.startswith(sep*3)): + initial_slashes = 2 + comps = path.split(sep) + new_comps = [] + for comp in comps: + if comp in (empty, dot): + continue + if (comp != dotdot or (not initial_slashes and not new_comps) or + (new_comps and new_comps[-1] == dotdot)): + new_comps.append(comp) + elif new_comps: + new_comps.pop() + comps = new_comps + path = sep.join(comps) + if initial_slashes: + path = sep*initial_slashes + path + return path or dot + + +def abspath(path): + """Return an absolute path.""" + path = os.fspath(path) + if not isabs(path): + if isinstance(path, bytes): + cwd = os.getcwdb() + else: + cwd = os.getcwd() + path = join(cwd, path) + return normpath(path) + + +# Return a canonical path (i.e. the absolute location of a file on the +# filesystem). + +def realpath(filename): + """Return the canonical path of the specified filename, eliminating any +symbolic links encountered in the path.""" + filename = os.fspath(filename) + path, ok = _joinrealpath(filename[:0], filename, {}) + return abspath(path) + +# Join two paths, normalizing and eliminating any symbolic links +# encountered in the second path. +def _joinrealpath(path, rest, seen): + if isinstance(path, bytes): + sep = b'/' + curdir = b'.' + pardir = b'..' + else: + sep = '/' + curdir = '.' + pardir = '..' + + if isabs(rest): + rest = rest[1:] + path = sep + + while rest: + name, _, rest = rest.partition(sep) + if not name or name == curdir: + # current dir + continue + if name == pardir: + # parent dir + if path: + path, name = split(path) + if name == pardir: + path = join(path, pardir, pardir) + else: + path = pardir + continue + newpath = join(path, name) + if not islink(newpath): + path = newpath + continue + # Resolve the symbolic link + if newpath in seen: + # Already seen this path + path = seen[newpath] + if path is not None: + # use cached value + continue + # The symlink is not resolved, so we must have a symlink loop. + # Return already resolved part + rest of the path unchanged. + return join(newpath, rest), False + seen[newpath] = None # not resolved symlink + path, ok = _joinrealpath(path, os.readlink(newpath), seen) + if not ok: + return join(path, rest), False + seen[newpath] = path # resolved symlink + + return path, True + + +supports_unicode_filenames = (sys.platform == 'darwin') + +def relpath(path, start=None): + """Return a relative version of a path""" + + if not path: + raise ValueError("no path specified") + + path = os.fspath(path) + if isinstance(path, bytes): + curdir = b'.' + sep = b'/' + pardir = b'..' + else: + curdir = '.' + sep = '/' + pardir = '..' + + if start is None: + start = curdir + else: + start = os.fspath(start) + + try: + start_list = [x for x in abspath(start).split(sep) if x] + path_list = [x for x in abspath(path).split(sep) if x] + # Work out how much of the filepath is shared by start and path. + i = len(commonprefix([start_list, path_list])) + + rel_list = [pardir] * (len(start_list)-i) + path_list[i:] + if not rel_list: + return curdir + return join(*rel_list) + except (TypeError, AttributeError, BytesWarning, DeprecationWarning): + genericpath._check_arg_types('relpath', path, start) + raise + + +# Return the longest common sub-path of the sequence of paths given as input. +# The paths are not normalized before comparing them (this is the +# responsibility of the caller). Any trailing separator is stripped from the +# returned path. + +def commonpath(paths): + """Given a sequence of path names, returns the longest common sub-path.""" + + if not paths: + raise ValueError('commonpath() arg is an empty sequence') + + paths = tuple(map(os.fspath, paths)) + if isinstance(paths[0], bytes): + sep = b'/' + curdir = b'.' + else: + sep = '/' + curdir = '.' + + try: + split_paths = [path.split(sep) for path in paths] + + try: + isabs, = set(p[:1] == sep for p in paths) + except ValueError: + raise ValueError("Can't mix absolute and relative paths") from None + + split_paths = [[c for c in s if c and c != curdir] for s in split_paths] + s1 = min(split_paths) + s2 = max(split_paths) + common = s1 + for i, c in enumerate(s1): + if c != s2[i]: + common = s1[:i] + break + + prefix = sep if isabs else sep[:0] + return prefix + sep.join(common) + except (TypeError, AttributeError): + genericpath._check_arg_types('commonpath', *paths) + raise diff --git a/my_env/Lib/random.py b/my_env/Lib/random.py new file mode 100644 index 000000000..bb6a05f26 --- /dev/null +++ b/my_env/Lib/random.py @@ -0,0 +1,777 @@ +"""Random variable generators. + + integers + -------- + uniform within range + + sequences + --------- + pick random element + pick random sample + pick weighted random sample + generate random permutation + + distributions on the real line: + ------------------------------ + uniform + triangular + normal (Gaussian) + lognormal + negative exponential + gamma + beta + pareto + Weibull + + distributions on the circle (angles 0 to 2pi) + --------------------------------------------- + circular uniform + von Mises + +General notes on the underlying Mersenne Twister core generator: + +* The period is 2**19937-1. +* It is one of the most extensively tested generators in existence. +* The random() method is implemented in C, executes in a single Python step, + and is, therefore, threadsafe. + +""" + +from warnings import warn as _warn +from types import MethodType as _MethodType, BuiltinMethodType as _BuiltinMethodType +from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil +from math import sqrt as _sqrt, acos as _acos, cos as _cos, sin as _sin +from os import urandom as _urandom +from _collections_abc import Set as _Set, Sequence as _Sequence +from hashlib import sha512 as _sha512 +import itertools as _itertools +import bisect as _bisect +import os as _os + +__all__ = ["Random","seed","random","uniform","randint","choice","sample", + "randrange","shuffle","normalvariate","lognormvariate", + "expovariate","vonmisesvariate","gammavariate","triangular", + "gauss","betavariate","paretovariate","weibullvariate", + "getstate","setstate", "getrandbits", "choices", + "SystemRandom"] + +NV_MAGICCONST = 4 * _exp(-0.5)/_sqrt(2.0) +TWOPI = 2.0*_pi +LOG4 = _log(4.0) +SG_MAGICCONST = 1.0 + _log(4.5) +BPF = 53 # Number of bits in a float +RECIP_BPF = 2**-BPF + + +# Translated by Guido van Rossum from C source provided by +# Adrian Baddeley. Adapted by Raymond Hettinger for use with +# the Mersenne Twister and os.urandom() core generators. + +import _random + +class Random(_random.Random): + """Random number generator base class used by bound module functions. + + Used to instantiate instances of Random to get generators that don't + share state. + + Class Random can also be subclassed if you want to use a different basic + generator of your own devising: in that case, override the following + methods: random(), seed(), getstate(), and setstate(). + Optionally, implement a getrandbits() method so that randrange() + can cover arbitrarily large ranges. + + """ + + VERSION = 3 # used by getstate/setstate + + def __init__(self, x=None): + """Initialize an instance. + + Optional argument x controls seeding, as for Random.seed(). + """ + + self.seed(x) + self.gauss_next = None + + def seed(self, a=None, version=2): + """Initialize internal state from hashable object. + + None or no argument seeds from current time or from an operating + system specific randomness source if available. + + If *a* is an int, all bits are used. + + For version 2 (the default), all of the bits are used if *a* is a str, + bytes, or bytearray. For version 1 (provided for reproducing random + sequences from older versions of Python), the algorithm for str and + bytes generates a narrower range of seeds. + + """ + + if version == 1 and isinstance(a, (str, bytes)): + a = a.decode('latin-1') if isinstance(a, bytes) else a + x = ord(a[0]) << 7 if a else 0 + for c in map(ord, a): + x = ((1000003 * x) ^ c) & 0xFFFFFFFFFFFFFFFF + x ^= len(a) + a = -2 if x == -1 else x + + if version == 2 and isinstance(a, (str, bytes, bytearray)): + if isinstance(a, str): + a = a.encode() + a += _sha512(a).digest() + a = int.from_bytes(a, 'big') + + super().seed(a) + self.gauss_next = None + + def getstate(self): + """Return internal state; can be passed to setstate() later.""" + return self.VERSION, super().getstate(), self.gauss_next + + def setstate(self, state): + """Restore internal state from object returned by getstate().""" + version = state[0] + if version == 3: + version, internalstate, self.gauss_next = state + super().setstate(internalstate) + elif version == 2: + version, internalstate, self.gauss_next = state + # In version 2, the state was saved as signed ints, which causes + # inconsistencies between 32/64-bit systems. The state is + # really unsigned 32-bit ints, so we convert negative ints from + # version 2 to positive longs for version 3. + try: + internalstate = tuple(x % (2**32) for x in internalstate) + except ValueError as e: + raise TypeError from e + super().setstate(internalstate) + else: + raise ValueError("state with version %s passed to " + "Random.setstate() of version %s" % + (version, self.VERSION)) + +## ---- Methods below this point do not need to be overridden when +## ---- subclassing for the purpose of using a different core generator. + +## -------------------- pickle support ------------------- + + # Issue 17489: Since __reduce__ was defined to fix #759889 this is no + # longer called; we leave it here because it has been here since random was + # rewritten back in 2001 and why risk breaking something. + def __getstate__(self): # for pickle + return self.getstate() + + def __setstate__(self, state): # for pickle + self.setstate(state) + + def __reduce__(self): + return self.__class__, (), self.getstate() + +## -------------------- integer methods ------------------- + + def randrange(self, start, stop=None, step=1, _int=int): + """Choose a random item from range(start, stop[, step]). + + This fixes the problem with randint() which includes the + endpoint; in Python this is usually not what you want. + + """ + + # This code is a bit messy to make it fast for the + # common case while still doing adequate error checking. + istart = _int(start) + if istart != start: + raise ValueError("non-integer arg 1 for randrange()") + if stop is None: + if istart > 0: + return self._randbelow(istart) + raise ValueError("empty range for randrange()") + + # stop argument supplied. + istop = _int(stop) + if istop != stop: + raise ValueError("non-integer stop for randrange()") + width = istop - istart + if step == 1 and width > 0: + return istart + self._randbelow(width) + if step == 1: + raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width)) + + # Non-unit step argument supplied. + istep = _int(step) + if istep != step: + raise ValueError("non-integer step for randrange()") + if istep > 0: + n = (width + istep - 1) // istep + elif istep < 0: + n = (width + istep + 1) // istep + else: + raise ValueError("zero step for randrange()") + + if n <= 0: + raise ValueError("empty range for randrange()") + + return istart + istep*self._randbelow(n) + + def randint(self, a, b): + """Return random integer in range [a, b], including both end points. + """ + + return self.randrange(a, b+1) + + def _randbelow(self, n, int=int, maxsize=1<= n: + r = getrandbits(k) + return r + # There's an overridden random() method but no new getrandbits() method, + # so we can only use random() from here. + if n >= maxsize: + _warn("Underlying random() generator does not supply \n" + "enough bits to choose from a population range this large.\n" + "To remove the range limitation, add a getrandbits() method.") + return int(random() * n) + if n == 0: + raise ValueError("Boundary cannot be zero") + rem = maxsize % n + limit = (maxsize - rem) / maxsize # int(limit * maxsize) % n == 0 + r = random() + while r >= limit: + r = random() + return int(r*maxsize) % n + +## -------------------- sequence methods ------------------- + + def choice(self, seq): + """Choose a random element from a non-empty sequence.""" + try: + i = self._randbelow(len(seq)) + except ValueError: + raise IndexError('Cannot choose from an empty sequence') from None + return seq[i] + + def shuffle(self, x, random=None): + """Shuffle list x in place, and return None. + + Optional argument random is a 0-argument function returning a + random float in [0.0, 1.0); if it is the default None, the + standard random.random will be used. + + """ + + if random is None: + randbelow = self._randbelow + for i in reversed(range(1, len(x))): + # pick an element in x[:i+1] with which to exchange x[i] + j = randbelow(i+1) + x[i], x[j] = x[j], x[i] + else: + _int = int + for i in reversed(range(1, len(x))): + # pick an element in x[:i+1] with which to exchange x[i] + j = _int(random() * (i+1)) + x[i], x[j] = x[j], x[i] + + def sample(self, population, k): + """Chooses k unique random elements from a population sequence or set. + + Returns a new list containing elements from the population while + leaving the original population unchanged. The resulting list is + in selection order so that all sub-slices will also be valid random + samples. This allows raffle winners (the sample) to be partitioned + into grand prize and second place winners (the subslices). + + Members of the population need not be hashable or unique. If the + population contains repeats, then each occurrence is a possible + selection in the sample. + + To choose a sample in a range of integers, use range as an argument. + This is especially fast and space efficient for sampling from a + large population: sample(range(10000000), 60) + """ + + # Sampling without replacement entails tracking either potential + # selections (the pool) in a list or previous selections in a set. + + # When the number of selections is small compared to the + # population, then tracking selections is efficient, requiring + # only a small set and an occasional reselection. For + # a larger number of selections, the pool tracking method is + # preferred since the list takes less space than the + # set and it doesn't suffer from frequent reselections. + + if isinstance(population, _Set): + population = tuple(population) + if not isinstance(population, _Sequence): + raise TypeError("Population must be a sequence or set. For dicts, use list(d).") + randbelow = self._randbelow + n = len(population) + if not 0 <= k <= n: + raise ValueError("Sample larger than population or is negative") + result = [None] * k + setsize = 21 # size of a small set minus size of an empty list + if k > 5: + setsize += 4 ** _ceil(_log(k * 3, 4)) # table size for big sets + if n <= setsize: + # An n-length list is smaller than a k-length set + pool = list(population) + for i in range(k): # invariant: non-selected at [0,n-i) + j = randbelow(n-i) + result[i] = pool[j] + pool[j] = pool[n-i-1] # move non-selected item into vacancy + else: + selected = set() + selected_add = selected.add + for i in range(k): + j = randbelow(n) + while j in selected: + j = randbelow(n) + selected_add(j) + result[i] = population[j] + return result + + def choices(self, population, weights=None, *, cum_weights=None, k=1): + """Return a k sized list of population elements chosen with replacement. + + If the relative weights or cumulative weights are not specified, + the selections are made with equal probability. + + """ + random = self.random + if cum_weights is None: + if weights is None: + _int = int + total = len(population) + return [population[_int(random() * total)] for i in range(k)] + cum_weights = list(_itertools.accumulate(weights)) + elif weights is not None: + raise TypeError('Cannot specify both weights and cumulative weights') + if len(cum_weights) != len(population): + raise ValueError('The number of weights does not match the population') + bisect = _bisect.bisect + total = cum_weights[-1] + hi = len(cum_weights) - 1 + return [population[bisect(cum_weights, random() * total, 0, hi)] + for i in range(k)] + +## -------------------- real-valued distributions ------------------- + +## -------------------- uniform distribution ------------------- + + def uniform(self, a, b): + "Get a random number in the range [a, b) or [a, b] depending on rounding." + return a + (b-a) * self.random() + +## -------------------- triangular -------------------- + + def triangular(self, low=0.0, high=1.0, mode=None): + """Triangular distribution. + + Continuous distribution bounded by given lower and upper limits, + and having a given mode value in-between. + + http://en.wikipedia.org/wiki/Triangular_distribution + + """ + u = self.random() + try: + c = 0.5 if mode is None else (mode - low) / (high - low) + except ZeroDivisionError: + return low + if u > c: + u = 1.0 - u + c = 1.0 - c + low, high = high, low + return low + (high - low) * _sqrt(u * c) + +## -------------------- normal distribution -------------------- + + def normalvariate(self, mu, sigma): + """Normal distribution. + + mu is the mean, and sigma is the standard deviation. + + """ + # mu = mean, sigma = standard deviation + + # Uses Kinderman and Monahan method. Reference: Kinderman, + # A.J. and Monahan, J.F., "Computer generation of random + # variables using the ratio of uniform deviates", ACM Trans + # Math Software, 3, (1977), pp257-260. + + random = self.random + while 1: + u1 = random() + u2 = 1.0 - random() + z = NV_MAGICCONST*(u1-0.5)/u2 + zz = z*z/4.0 + if zz <= -_log(u2): + break + return mu + z*sigma + +## -------------------- lognormal distribution -------------------- + + def lognormvariate(self, mu, sigma): + """Log normal distribution. + + If you take the natural logarithm of this distribution, you'll get a + normal distribution with mean mu and standard deviation sigma. + mu can have any value, and sigma must be greater than zero. + + """ + return _exp(self.normalvariate(mu, sigma)) + +## -------------------- exponential distribution -------------------- + + def expovariate(self, lambd): + """Exponential distribution. + + lambd is 1.0 divided by the desired mean. It should be + nonzero. (The parameter would be called "lambda", but that is + a reserved word in Python.) Returned values range from 0 to + positive infinity if lambd is positive, and from negative + infinity to 0 if lambd is negative. + + """ + # lambd: rate lambd = 1/mean + # ('lambda' is a Python reserved word) + + # we use 1-random() instead of random() to preclude the + # possibility of taking the log of zero. + return -_log(1.0 - self.random())/lambd + +## -------------------- von Mises distribution -------------------- + + def vonmisesvariate(self, mu, kappa): + """Circular data distribution. + + mu is the mean angle, expressed in radians between 0 and 2*pi, and + kappa is the concentration parameter, which must be greater than or + equal to zero. If kappa is equal to zero, this distribution reduces + to a uniform random angle over the range 0 to 2*pi. + + """ + # mu: mean angle (in radians between 0 and 2*pi) + # kappa: concentration parameter kappa (>= 0) + # if kappa = 0 generate uniform random angle + + # Based upon an algorithm published in: Fisher, N.I., + # "Statistical Analysis of Circular Data", Cambridge + # University Press, 1993. + + # Thanks to Magnus Kessler for a correction to the + # implementation of step 4. + + random = self.random + if kappa <= 1e-6: + return TWOPI * random() + + s = 0.5 / kappa + r = s + _sqrt(1.0 + s * s) + + while 1: + u1 = random() + z = _cos(_pi * u1) + + d = z / (r + z) + u2 = random() + if u2 < 1.0 - d * d or u2 <= (1.0 - d) * _exp(d): + break + + q = 1.0 / r + f = (q + z) / (1.0 + q * z) + u3 = random() + if u3 > 0.5: + theta = (mu + _acos(f)) % TWOPI + else: + theta = (mu - _acos(f)) % TWOPI + + return theta + +## -------------------- gamma distribution -------------------- + + def gammavariate(self, alpha, beta): + """Gamma distribution. Not the gamma function! + + Conditions on the parameters are alpha > 0 and beta > 0. + + The probability distribution function is: + + x ** (alpha - 1) * math.exp(-x / beta) + pdf(x) = -------------------------------------- + math.gamma(alpha) * beta ** alpha + + """ + + # alpha > 0, beta > 0, mean is alpha*beta, variance is alpha*beta**2 + + # Warning: a few older sources define the gamma distribution in terms + # of alpha > -1.0 + if alpha <= 0.0 or beta <= 0.0: + raise ValueError('gammavariate: alpha and beta must be > 0.0') + + random = self.random + if alpha > 1.0: + + # Uses R.C.H. Cheng, "The generation of Gamma + # variables with non-integral shape parameters", + # Applied Statistics, (1977), 26, No. 1, p71-74 + + ainv = _sqrt(2.0 * alpha - 1.0) + bbb = alpha - LOG4 + ccc = alpha + ainv + + while 1: + u1 = random() + if not 1e-7 < u1 < .9999999: + continue + u2 = 1.0 - random() + v = _log(u1/(1.0-u1))/ainv + x = alpha*_exp(v) + z = u1*u1*u2 + r = bbb+ccc*v-x + if r + SG_MAGICCONST - 4.5*z >= 0.0 or r >= _log(z): + return x * beta + + elif alpha == 1.0: + # expovariate(1/beta) + u = random() + while u <= 1e-7: + u = random() + return -_log(u) * beta + + else: # alpha is between 0 and 1 (exclusive) + + # Uses ALGORITHM GS of Statistical Computing - Kennedy & Gentle + + while 1: + u = random() + b = (_e + alpha)/_e + p = b*u + if p <= 1.0: + x = p ** (1.0/alpha) + else: + x = -_log((b-p)/alpha) + u1 = random() + if p > 1.0: + if u1 <= x ** (alpha - 1.0): + break + elif u1 <= _exp(-x): + break + return x * beta + +## -------------------- Gauss (faster alternative) -------------------- + + def gauss(self, mu, sigma): + """Gaussian distribution. + + mu is the mean, and sigma is the standard deviation. This is + slightly faster than the normalvariate() function. + + Not thread-safe without a lock around calls. + + """ + + # When x and y are two variables from [0, 1), uniformly + # distributed, then + # + # cos(2*pi*x)*sqrt(-2*log(1-y)) + # sin(2*pi*x)*sqrt(-2*log(1-y)) + # + # are two *independent* variables with normal distribution + # (mu = 0, sigma = 1). + # (Lambert Meertens) + # (corrected version; bug discovered by Mike Miller, fixed by LM) + + # Multithreading note: When two threads call this function + # simultaneously, it is possible that they will receive the + # same return value. The window is very small though. To + # avoid this, you have to use a lock around all calls. (I + # didn't want to slow this down in the serial case by using a + # lock here.) + + random = self.random + z = self.gauss_next + self.gauss_next = None + if z is None: + x2pi = random() * TWOPI + g2rad = _sqrt(-2.0 * _log(1.0 - random())) + z = _cos(x2pi) * g2rad + self.gauss_next = _sin(x2pi) * g2rad + + return mu + z*sigma + +## -------------------- beta -------------------- +## See +## http://mail.python.org/pipermail/python-bugs-list/2001-January/003752.html +## for Ivan Frohne's insightful analysis of why the original implementation: +## +## def betavariate(self, alpha, beta): +## # Discrete Event Simulation in C, pp 87-88. +## +## y = self.expovariate(alpha) +## z = self.expovariate(1.0/beta) +## return z/(y+z) +## +## was dead wrong, and how it probably got that way. + + def betavariate(self, alpha, beta): + """Beta distribution. + + Conditions on the parameters are alpha > 0 and beta > 0. + Returned values range between 0 and 1. + + """ + + # This version due to Janne Sinkkonen, and matches all the std + # texts (e.g., Knuth Vol 2 Ed 3 pg 134 "the beta distribution"). + y = self.gammavariate(alpha, 1.0) + if y == 0: + return 0.0 + else: + return y / (y + self.gammavariate(beta, 1.0)) + +## -------------------- Pareto -------------------- + + def paretovariate(self, alpha): + """Pareto distribution. alpha is the shape parameter.""" + # Jain, pg. 495 + + u = 1.0 - self.random() + return 1.0 / u ** (1.0/alpha) + +## -------------------- Weibull -------------------- + + def weibullvariate(self, alpha, beta): + """Weibull distribution. + + alpha is the scale parameter and beta is the shape parameter. + + """ + # Jain, pg. 499; bug fix courtesy Bill Arms + + u = 1.0 - self.random() + return alpha * (-_log(u)) ** (1.0/beta) + +## --------------- Operating System Random Source ------------------ + +class SystemRandom(Random): + """Alternate random number generator using sources provided + by the operating system (such as /dev/urandom on Unix or + CryptGenRandom on Windows). + + Not available on all systems (see os.urandom() for details). + """ + + def random(self): + """Get the next random number in the range [0.0, 1.0).""" + return (int.from_bytes(_urandom(7), 'big') >> 3) * RECIP_BPF + + def getrandbits(self, k): + """getrandbits(k) -> x. Generates an int with k random bits.""" + if k <= 0: + raise ValueError('number of bits must be greater than zero') + if k != int(k): + raise TypeError('number of bits should be an integer') + numbytes = (k + 7) // 8 # bits / 8 and rounded up + x = int.from_bytes(_urandom(numbytes), 'big') + return x >> (numbytes * 8 - k) # trim excess bits + + def seed(self, *args, **kwds): + "Stub method. Not used for a system random number generator." + return None + + def _notimplemented(self, *args, **kwds): + "Method should not be called for a system random number generator." + raise NotImplementedError('System entropy source does not have state.') + getstate = setstate = _notimplemented + +## -------------------- test program -------------------- + +def _test_generator(n, func, args): + import time + print(n, 'times', func.__name__) + total = 0.0 + sqsum = 0.0 + smallest = 1e10 + largest = -1e10 + t0 = time.perf_counter() + for i in range(n): + x = func(*args) + total += x + sqsum = sqsum + x*x + smallest = min(x, smallest) + largest = max(x, largest) + t1 = time.perf_counter() + print(round(t1-t0, 3), 'sec,', end=' ') + avg = total/n + stddev = _sqrt(sqsum/n - avg*avg) + print('avg %g, stddev %g, min %g, max %g\n' % \ + (avg, stddev, smallest, largest)) + + +def _test(N=2000): + _test_generator(N, random, ()) + _test_generator(N, normalvariate, (0.0, 1.0)) + _test_generator(N, lognormvariate, (0.0, 1.0)) + _test_generator(N, vonmisesvariate, (0.0, 1.0)) + _test_generator(N, gammavariate, (0.01, 1.0)) + _test_generator(N, gammavariate, (0.1, 1.0)) + _test_generator(N, gammavariate, (0.1, 2.0)) + _test_generator(N, gammavariate, (0.5, 1.0)) + _test_generator(N, gammavariate, (0.9, 1.0)) + _test_generator(N, gammavariate, (1.0, 1.0)) + _test_generator(N, gammavariate, (2.0, 1.0)) + _test_generator(N, gammavariate, (20.0, 1.0)) + _test_generator(N, gammavariate, (200.0, 1.0)) + _test_generator(N, gauss, (0.0, 1.0)) + _test_generator(N, betavariate, (3.0, 3.0)) + _test_generator(N, triangular, (0.0, 1.0, 1.0/3.0)) + +# Create one instance, seeded from current time, and export its methods +# as module-level functions. The functions share state across all uses +#(both in the user's code and in the Python libraries), but that's fine +# for most programs and is easier for the casual user than making them +# instantiate their own Random() instance. + +_inst = Random() +seed = _inst.seed +random = _inst.random +uniform = _inst.uniform +triangular = _inst.triangular +randint = _inst.randint +choice = _inst.choice +randrange = _inst.randrange +sample = _inst.sample +shuffle = _inst.shuffle +choices = _inst.choices +normalvariate = _inst.normalvariate +lognormvariate = _inst.lognormvariate +expovariate = _inst.expovariate +vonmisesvariate = _inst.vonmisesvariate +gammavariate = _inst.gammavariate +gauss = _inst.gauss +betavariate = _inst.betavariate +paretovariate = _inst.paretovariate +weibullvariate = _inst.weibullvariate +getstate = _inst.getstate +setstate = _inst.setstate +getrandbits = _inst.getrandbits + +if hasattr(_os, "fork"): + _os.register_at_fork(after_in_child=_inst.seed) + + +if __name__ == '__main__': + _test() diff --git a/my_env/Lib/re.py b/my_env/Lib/re.py new file mode 100644 index 000000000..94d486579 --- /dev/null +++ b/my_env/Lib/re.py @@ -0,0 +1,366 @@ +# +# Secret Labs' Regular Expression Engine +# +# re-compatible interface for the sre matching engine +# +# Copyright (c) 1998-2001 by Secret Labs AB. All rights reserved. +# +# This version of the SRE library can be redistributed under CNRI's +# Python 1.6 license. For any other use, please contact Secret Labs +# AB (info@pythonware.com). +# +# Portions of this engine have been developed in cooperation with +# CNRI. Hewlett-Packard provided funding for 1.6 integration and +# other compatibility work. +# + +r"""Support for regular expressions (RE). + +This module provides regular expression matching operations similar to +those found in Perl. It supports both 8-bit and Unicode strings; both +the pattern and the strings being processed can contain null bytes and +characters outside the US ASCII range. + +Regular expressions can contain both special and ordinary characters. +Most ordinary characters, like "A", "a", or "0", are the simplest +regular expressions; they simply match themselves. You can +concatenate ordinary characters, so last matches the string 'last'. + +The special characters are: + "." Matches any character except a newline. + "^" Matches the start of the string. + "$" Matches the end of the string or just before the newline at + the end of the string. + "*" Matches 0 or more (greedy) repetitions of the preceding RE. + Greedy means that it will match as many repetitions as possible. + "+" Matches 1 or more (greedy) repetitions of the preceding RE. + "?" Matches 0 or 1 (greedy) of the preceding RE. + *?,+?,?? Non-greedy versions of the previous three special characters. + {m,n} Matches from m to n repetitions of the preceding RE. + {m,n}? Non-greedy version of the above. + "\\" Either escapes special characters or signals a special sequence. + [] Indicates a set of characters. + A "^" as the first character indicates a complementing set. + "|" A|B, creates an RE that will match either A or B. + (...) Matches the RE inside the parentheses. + The contents can be retrieved or matched later in the string. + (?aiLmsux) Set the A, I, L, M, S, U, or X flag for the RE (see below). + (?:...) Non-grouping version of regular parentheses. + (?P...) The substring matched by the group is accessible by name. + (?P=name) Matches the text matched earlier by the group named name. + (?#...) A comment; ignored. + (?=...) Matches if ... matches next, but doesn't consume the string. + (?!...) Matches if ... doesn't match next. + (?<=...) Matches if preceded by ... (must be fixed length). + (?= _MAXCACHE: + # Drop the oldest item + try: + del _cache[next(iter(_cache))] + except (StopIteration, RuntimeError, KeyError): + pass + _cache[type(pattern), pattern, flags] = p + return p + +@functools.lru_cache(_MAXCACHE) +def _compile_repl(repl, pattern): + # internal: compile replacement pattern + return sre_parse.parse_template(repl, pattern) + +def _expand(pattern, match, template): + # internal: Match.expand implementation hook + template = sre_parse.parse_template(template, pattern) + return sre_parse.expand_template(template, match) + +def _subx(pattern, template): + # internal: Pattern.sub/subn implementation helper + template = _compile_repl(template, pattern) + if not template[0] and len(template[1]) == 1: + # literal replacement + return template[1][0] + def filter(match, template=template): + return sre_parse.expand_template(template, match) + return filter + +# register myself for pickling + +import copyreg + +def _pickle(p): + return _compile, (p.pattern, p.flags) + +copyreg.pickle(Pattern, _pickle, _compile) + +# -------------------------------------------------------------------- +# experimental stuff (see python-dev discussions for details) + +class Scanner: + def __init__(self, lexicon, flags=0): + from sre_constants import BRANCH, SUBPATTERN + if isinstance(flags, RegexFlag): + flags = flags.value + self.lexicon = lexicon + # combine phrases into a compound pattern + p = [] + s = sre_parse.Pattern() + s.flags = flags + for phrase, action in lexicon: + gid = s.opengroup() + p.append(sre_parse.SubPattern(s, [ + (SUBPATTERN, (gid, 0, 0, sre_parse.parse(phrase, flags))), + ])) + s.closegroup(gid, p[-1]) + p = sre_parse.SubPattern(s, [(BRANCH, (None, p))]) + self.scanner = sre_compile.compile(p) + def scan(self, string): + result = [] + append = result.append + match = self.scanner.scanner(string).match + i = 0 + while True: + m = match() + if not m: + break + j = m.end() + if i == j: + break + action = self.lexicon[m.lastindex-1][1] + if callable(action): + self.match = m + action = action(self, m.group()) + if action is not None: + append(action) + i = j + return result, string[i:] diff --git a/my_env/Lib/reprlib.py b/my_env/Lib/reprlib.py new file mode 100644 index 000000000..616b3439b --- /dev/null +++ b/my_env/Lib/reprlib.py @@ -0,0 +1,161 @@ +"""Redo the builtin repr() (representation) but with limits on most sizes.""" + +__all__ = ["Repr", "repr", "recursive_repr"] + +import builtins +from itertools import islice +from _thread import get_ident + +def recursive_repr(fillvalue='...'): + 'Decorator to make a repr function return fillvalue for a recursive call' + + def decorating_function(user_function): + repr_running = set() + + def wrapper(self): + key = id(self), get_ident() + if key in repr_running: + return fillvalue + repr_running.add(key) + try: + result = user_function(self) + finally: + repr_running.discard(key) + return result + + # Can't use functools.wraps() here because of bootstrap issues + wrapper.__module__ = getattr(user_function, '__module__') + wrapper.__doc__ = getattr(user_function, '__doc__') + wrapper.__name__ = getattr(user_function, '__name__') + wrapper.__qualname__ = getattr(user_function, '__qualname__') + wrapper.__annotations__ = getattr(user_function, '__annotations__', {}) + return wrapper + + return decorating_function + +class Repr: + + def __init__(self): + self.maxlevel = 6 + self.maxtuple = 6 + self.maxlist = 6 + self.maxarray = 5 + self.maxdict = 4 + self.maxset = 6 + self.maxfrozenset = 6 + self.maxdeque = 6 + self.maxstring = 30 + self.maxlong = 40 + self.maxother = 30 + + def repr(self, x): + return self.repr1(x, self.maxlevel) + + def repr1(self, x, level): + typename = type(x).__name__ + if ' ' in typename: + parts = typename.split() + typename = '_'.join(parts) + if hasattr(self, 'repr_' + typename): + return getattr(self, 'repr_' + typename)(x, level) + else: + return self.repr_instance(x, level) + + def _repr_iterable(self, x, level, left, right, maxiter, trail=''): + n = len(x) + if level <= 0 and n: + s = '...' + else: + newlevel = level - 1 + repr1 = self.repr1 + pieces = [repr1(elem, newlevel) for elem in islice(x, maxiter)] + if n > maxiter: pieces.append('...') + s = ', '.join(pieces) + if n == 1 and trail: right = trail + right + return '%s%s%s' % (left, s, right) + + def repr_tuple(self, x, level): + return self._repr_iterable(x, level, '(', ')', self.maxtuple, ',') + + def repr_list(self, x, level): + return self._repr_iterable(x, level, '[', ']', self.maxlist) + + def repr_array(self, x, level): + if not x: + return "array('%s')" % x.typecode + header = "array('%s', [" % x.typecode + return self._repr_iterable(x, level, header, '])', self.maxarray) + + def repr_set(self, x, level): + if not x: + return 'set()' + x = _possibly_sorted(x) + return self._repr_iterable(x, level, '{', '}', self.maxset) + + def repr_frozenset(self, x, level): + if not x: + return 'frozenset()' + x = _possibly_sorted(x) + return self._repr_iterable(x, level, 'frozenset({', '})', + self.maxfrozenset) + + def repr_deque(self, x, level): + return self._repr_iterable(x, level, 'deque([', '])', self.maxdeque) + + def repr_dict(self, x, level): + n = len(x) + if n == 0: return '{}' + if level <= 0: return '{...}' + newlevel = level - 1 + repr1 = self.repr1 + pieces = [] + for key in islice(_possibly_sorted(x), self.maxdict): + keyrepr = repr1(key, newlevel) + valrepr = repr1(x[key], newlevel) + pieces.append('%s: %s' % (keyrepr, valrepr)) + if n > self.maxdict: pieces.append('...') + s = ', '.join(pieces) + return '{%s}' % (s,) + + def repr_str(self, x, level): + s = builtins.repr(x[:self.maxstring]) + if len(s) > self.maxstring: + i = max(0, (self.maxstring-3)//2) + j = max(0, self.maxstring-3-i) + s = builtins.repr(x[:i] + x[len(x)-j:]) + s = s[:i] + '...' + s[len(s)-j:] + return s + + def repr_int(self, x, level): + s = builtins.repr(x) # XXX Hope this isn't too slow... + if len(s) > self.maxlong: + i = max(0, (self.maxlong-3)//2) + j = max(0, self.maxlong-3-i) + s = s[:i] + '...' + s[len(s)-j:] + return s + + def repr_instance(self, x, level): + try: + s = builtins.repr(x) + # Bugs in x.__repr__() can cause arbitrary + # exceptions -- then make up something + except Exception: + return '<%s instance at %#x>' % (x.__class__.__name__, id(x)) + if len(s) > self.maxother: + i = max(0, (self.maxother-3)//2) + j = max(0, self.maxother-3-i) + s = s[:i] + '...' + s[len(s)-j:] + return s + + +def _possibly_sorted(x): + # Since not all sequences of items can be sorted and comparison + # functions may raise arbitrary exceptions, return an unsorted + # sequence in that case. + try: + return sorted(x) + except Exception: + return list(x) + +aRepr = Repr() +repr = aRepr.repr diff --git a/my_env/Lib/rlcompleter.py b/my_env/Lib/rlcompleter.py new file mode 100644 index 000000000..bca4a7bc5 --- /dev/null +++ b/my_env/Lib/rlcompleter.py @@ -0,0 +1,205 @@ +"""Word completion for GNU readline. + +The completer completes keywords, built-ins and globals in a selectable +namespace (which defaults to __main__); when completing NAME.NAME..., it +evaluates (!) the expression up to the last dot and completes its attributes. + +It's very cool to do "import sys" type "sys.", hit the completion key (twice), +and see the list of names defined by the sys module! + +Tip: to use the tab key as the completion key, call + + readline.parse_and_bind("tab: complete") + +Notes: + +- Exceptions raised by the completer function are *ignored* (and generally cause + the completion to fail). This is a feature -- since readline sets the tty + device in raw (or cbreak) mode, printing a traceback wouldn't work well + without some complicated hoopla to save, reset and restore the tty state. + +- The evaluation of the NAME.NAME... form may cause arbitrary application + defined code to be executed if an object with a __getattr__ hook is found. + Since it is the responsibility of the application (or the user) to enable this + feature, I consider this an acceptable risk. More complicated expressions + (e.g. function calls or indexing operations) are *not* evaluated. + +- When the original stdin is not a tty device, GNU readline is never + used, and this module (and the readline module) are silently inactive. + +""" + +import atexit +import builtins +import __main__ + +__all__ = ["Completer"] + +class Completer: + def __init__(self, namespace = None): + """Create a new completer for the command line. + + Completer([namespace]) -> completer instance. + + If unspecified, the default namespace where completions are performed + is __main__ (technically, __main__.__dict__). Namespaces should be + given as dictionaries. + + Completer instances should be used as the completion mechanism of + readline via the set_completer() call: + + readline.set_completer(Completer(my_namespace).complete) + """ + + if namespace and not isinstance(namespace, dict): + raise TypeError('namespace must be a dictionary') + + # Don't bind to namespace quite yet, but flag whether the user wants a + # specific namespace or to use __main__.__dict__. This will allow us + # to bind to __main__.__dict__ at completion time, not now. + if namespace is None: + self.use_main_ns = 1 + else: + self.use_main_ns = 0 + self.namespace = namespace + + def complete(self, text, state): + """Return the next possible completion for 'text'. + + This is called successively with state == 0, 1, 2, ... until it + returns None. The completion should begin with 'text'. + + """ + if self.use_main_ns: + self.namespace = __main__.__dict__ + + if not text.strip(): + if state == 0: + if _readline_available: + readline.insert_text('\t') + readline.redisplay() + return '' + else: + return '\t' + else: + return None + + if state == 0: + if "." in text: + self.matches = self.attr_matches(text) + else: + self.matches = self.global_matches(text) + try: + return self.matches[state] + except IndexError: + return None + + def _callable_postfix(self, val, word): + if callable(val): + word = word + "(" + return word + + def global_matches(self, text): + """Compute matches when text is a simple name. + + Return a list of all keywords, built-in functions and names currently + defined in self.namespace that match. + + """ + import keyword + matches = [] + seen = {"__builtins__"} + n = len(text) + for word in keyword.kwlist: + if word[:n] == text: + seen.add(word) + if word in {'finally', 'try'}: + word = word + ':' + elif word not in {'False', 'None', 'True', + 'break', 'continue', 'pass', + 'else'}: + word = word + ' ' + matches.append(word) + for nspace in [self.namespace, builtins.__dict__]: + for word, val in nspace.items(): + if word[:n] == text and word not in seen: + seen.add(word) + matches.append(self._callable_postfix(val, word)) + return matches + + def attr_matches(self, text): + """Compute matches when text contains a dot. + + Assuming the text is of the form NAME.NAME....[NAME], and is + evaluable in self.namespace, it will be evaluated and its attributes + (as revealed by dir()) are used as possible completions. (For class + instances, class members are also considered.) + + WARNING: this can still invoke arbitrary C code, if an object + with a __getattr__ hook is evaluated. + + """ + import re + m = re.match(r"(\w+(\.\w+)*)\.(\w*)", text) + if not m: + return [] + expr, attr = m.group(1, 3) + try: + thisobject = eval(expr, self.namespace) + except Exception: + return [] + + # get the content of the object, except __builtins__ + words = set(dir(thisobject)) + words.discard("__builtins__") + + if hasattr(thisobject, '__class__'): + words.add('__class__') + words.update(get_class_members(thisobject.__class__)) + matches = [] + n = len(attr) + if attr == '': + noprefix = '_' + elif attr == '_': + noprefix = '__' + else: + noprefix = None + while True: + for word in words: + if (word[:n] == attr and + not (noprefix and word[:n+1] == noprefix)): + match = "%s.%s" % (expr, word) + try: + val = getattr(thisobject, word) + except Exception: + pass # Include even if attribute not set + else: + match = self._callable_postfix(val, match) + matches.append(match) + if matches or not noprefix: + break + if noprefix == '_': + noprefix = '__' + else: + noprefix = None + matches.sort() + return matches + +def get_class_members(klass): + ret = dir(klass) + if hasattr(klass,'__bases__'): + for base in klass.__bases__: + ret = ret + get_class_members(base) + return ret + +try: + import readline +except ImportError: + _readline_available = False +else: + readline.set_completer(Completer().complete) + # Release references early at shutdown (the readline module's + # contents are quasi-immortal, and the completer function holds a + # reference to globals). + atexit.register(lambda: readline.set_completer(None)) + _readline_available = True diff --git a/my_env/Lib/shutil.py b/my_env/Lib/shutil.py new file mode 100644 index 000000000..fc6fb4edd --- /dev/null +++ b/my_env/Lib/shutil.py @@ -0,0 +1,1188 @@ +"""Utility functions for copying and archiving files and directory trees. + +XXX The functions here don't copy the resource fork or other metadata on Mac. + +""" + +import os +import sys +import stat +import fnmatch +import collections +import errno + +try: + import zlib + del zlib + _ZLIB_SUPPORTED = True +except ImportError: + _ZLIB_SUPPORTED = False + +try: + import bz2 + del bz2 + _BZ2_SUPPORTED = True +except ImportError: + _BZ2_SUPPORTED = False + +try: + import lzma + del lzma + _LZMA_SUPPORTED = True +except ImportError: + _LZMA_SUPPORTED = False + +try: + from pwd import getpwnam +except ImportError: + getpwnam = None + +try: + from grp import getgrnam +except ImportError: + getgrnam = None + +__all__ = ["copyfileobj", "copyfile", "copymode", "copystat", "copy", "copy2", + "copytree", "move", "rmtree", "Error", "SpecialFileError", + "ExecError", "make_archive", "get_archive_formats", + "register_archive_format", "unregister_archive_format", + "get_unpack_formats", "register_unpack_format", + "unregister_unpack_format", "unpack_archive", + "ignore_patterns", "chown", "which", "get_terminal_size", + "SameFileError"] + # disk_usage is added later, if available on the platform + +class Error(OSError): + pass + +class SameFileError(Error): + """Raised when source and destination are the same file.""" + +class SpecialFileError(OSError): + """Raised when trying to do a kind of operation (e.g. copying) which is + not supported on a special file (e.g. a named pipe)""" + +class ExecError(OSError): + """Raised when a command could not be executed""" + +class ReadError(OSError): + """Raised when an archive cannot be read""" + +class RegistryError(Exception): + """Raised when a registry operation with the archiving + and unpacking registries fails""" + + +def copyfileobj(fsrc, fdst, length=16*1024): + """copy data from file-like object fsrc to file-like object fdst""" + while 1: + buf = fsrc.read(length) + if not buf: + break + fdst.write(buf) + +def _samefile(src, dst): + # Macintosh, Unix. + if hasattr(os.path, 'samefile'): + try: + return os.path.samefile(src, dst) + except OSError: + return False + + # All other platforms: check for same pathname. + return (os.path.normcase(os.path.abspath(src)) == + os.path.normcase(os.path.abspath(dst))) + +def copyfile(src, dst, *, follow_symlinks=True): + """Copy data from src to dst. + + If follow_symlinks is not set and src is a symbolic link, a new + symlink will be created instead of copying the file it points to. + + """ + if _samefile(src, dst): + raise SameFileError("{!r} and {!r} are the same file".format(src, dst)) + + for fn in [src, dst]: + try: + st = os.stat(fn) + except OSError: + # File most likely does not exist + pass + else: + # XXX What about other special files? (sockets, devices...) + if stat.S_ISFIFO(st.st_mode): + raise SpecialFileError("`%s` is a named pipe" % fn) + + if not follow_symlinks and os.path.islink(src): + os.symlink(os.readlink(src), dst) + else: + with open(src, 'rb') as fsrc: + with open(dst, 'wb') as fdst: + copyfileobj(fsrc, fdst) + return dst + +def copymode(src, dst, *, follow_symlinks=True): + """Copy mode bits from src to dst. + + If follow_symlinks is not set, symlinks aren't followed if and only + if both `src` and `dst` are symlinks. If `lchmod` isn't available + (e.g. Linux) this method does nothing. + + """ + if not follow_symlinks and os.path.islink(src) and os.path.islink(dst): + if hasattr(os, 'lchmod'): + stat_func, chmod_func = os.lstat, os.lchmod + else: + return + elif hasattr(os, 'chmod'): + stat_func, chmod_func = os.stat, os.chmod + else: + return + + st = stat_func(src) + chmod_func(dst, stat.S_IMODE(st.st_mode)) + +if hasattr(os, 'listxattr'): + def _copyxattr(src, dst, *, follow_symlinks=True): + """Copy extended filesystem attributes from `src` to `dst`. + + Overwrite existing attributes. + + If `follow_symlinks` is false, symlinks won't be followed. + + """ + + try: + names = os.listxattr(src, follow_symlinks=follow_symlinks) + except OSError as e: + if e.errno not in (errno.ENOTSUP, errno.ENODATA, errno.EINVAL): + raise + return + for name in names: + try: + value = os.getxattr(src, name, follow_symlinks=follow_symlinks) + os.setxattr(dst, name, value, follow_symlinks=follow_symlinks) + except OSError as e: + if e.errno not in (errno.EPERM, errno.ENOTSUP, errno.ENODATA, + errno.EINVAL): + raise +else: + def _copyxattr(*args, **kwargs): + pass + +def copystat(src, dst, *, follow_symlinks=True): + """Copy file metadata + + Copy the permission bits, last access time, last modification time, and + flags from `src` to `dst`. On Linux, copystat() also copies the "extended + attributes" where possible. The file contents, owner, and group are + unaffected. `src` and `dst` are path names given as strings. + + If the optional flag `follow_symlinks` is not set, symlinks aren't + followed if and only if both `src` and `dst` are symlinks. + """ + def _nop(*args, ns=None, follow_symlinks=None): + pass + + # follow symlinks (aka don't not follow symlinks) + follow = follow_symlinks or not (os.path.islink(src) and os.path.islink(dst)) + if follow: + # use the real function if it exists + def lookup(name): + return getattr(os, name, _nop) + else: + # use the real function only if it exists + # *and* it supports follow_symlinks + def lookup(name): + fn = getattr(os, name, _nop) + if fn in os.supports_follow_symlinks: + return fn + return _nop + + st = lookup("stat")(src, follow_symlinks=follow) + mode = stat.S_IMODE(st.st_mode) + lookup("utime")(dst, ns=(st.st_atime_ns, st.st_mtime_ns), + follow_symlinks=follow) + # We must copy extended attributes before the file is (potentially) + # chmod()'ed read-only, otherwise setxattr() will error with -EACCES. + _copyxattr(src, dst, follow_symlinks=follow) + try: + lookup("chmod")(dst, mode, follow_symlinks=follow) + except NotImplementedError: + # if we got a NotImplementedError, it's because + # * follow_symlinks=False, + # * lchown() is unavailable, and + # * either + # * fchownat() is unavailable or + # * fchownat() doesn't implement AT_SYMLINK_NOFOLLOW. + # (it returned ENOSUP.) + # therefore we're out of options--we simply cannot chown the + # symlink. give up, suppress the error. + # (which is what shutil always did in this circumstance.) + pass + if hasattr(st, 'st_flags'): + try: + lookup("chflags")(dst, st.st_flags, follow_symlinks=follow) + except OSError as why: + for err in 'EOPNOTSUPP', 'ENOTSUP': + if hasattr(errno, err) and why.errno == getattr(errno, err): + break + else: + raise + +def copy(src, dst, *, follow_symlinks=True): + """Copy data and mode bits ("cp src dst"). Return the file's destination. + + The destination may be a directory. + + If follow_symlinks is false, symlinks won't be followed. This + resembles GNU's "cp -P src dst". + + If source and destination are the same file, a SameFileError will be + raised. + + """ + if os.path.isdir(dst): + dst = os.path.join(dst, os.path.basename(src)) + copyfile(src, dst, follow_symlinks=follow_symlinks) + copymode(src, dst, follow_symlinks=follow_symlinks) + return dst + +def copy2(src, dst, *, follow_symlinks=True): + """Copy data and metadata. Return the file's destination. + + Metadata is copied with copystat(). Please see the copystat function + for more information. + + The destination may be a directory. + + If follow_symlinks is false, symlinks won't be followed. This + resembles GNU's "cp -P src dst". + + """ + if os.path.isdir(dst): + dst = os.path.join(dst, os.path.basename(src)) + copyfile(src, dst, follow_symlinks=follow_symlinks) + copystat(src, dst, follow_symlinks=follow_symlinks) + return dst + +def ignore_patterns(*patterns): + """Function that can be used as copytree() ignore parameter. + + Patterns is a sequence of glob-style patterns + that are used to exclude files""" + def _ignore_patterns(path, names): + ignored_names = [] + for pattern in patterns: + ignored_names.extend(fnmatch.filter(names, pattern)) + return set(ignored_names) + return _ignore_patterns + +def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, + ignore_dangling_symlinks=False): + """Recursively copy a directory tree. + + The destination directory must not already exist. + If exception(s) occur, an Error is raised with a list of reasons. + + If the optional symlinks flag is true, symbolic links in the + source tree result in symbolic links in the destination tree; if + it is false, the contents of the files pointed to by symbolic + links are copied. If the file pointed by the symlink doesn't + exist, an exception will be added in the list of errors raised in + an Error exception at the end of the copy process. + + You can set the optional ignore_dangling_symlinks flag to true if you + want to silence this exception. Notice that this has no effect on + platforms that don't support os.symlink. + + The optional ignore argument is a callable. If given, it + is called with the `src` parameter, which is the directory + being visited by copytree(), and `names` which is the list of + `src` contents, as returned by os.listdir(): + + callable(src, names) -> ignored_names + + Since copytree() is called recursively, the callable will be + called once for each directory that is copied. It returns a + list of names relative to the `src` directory that should + not be copied. + + The optional copy_function argument is a callable that will be used + to copy each file. It will be called with the source path and the + destination path as arguments. By default, copy2() is used, but any + function that supports the same signature (like copy()) can be used. + + """ + names = os.listdir(src) + if ignore is not None: + ignored_names = ignore(src, names) + else: + ignored_names = set() + + os.makedirs(dst) + errors = [] + for name in names: + if name in ignored_names: + continue + srcname = os.path.join(src, name) + dstname = os.path.join(dst, name) + try: + if os.path.islink(srcname): + linkto = os.readlink(srcname) + if symlinks: + # We can't just leave it to `copy_function` because legacy + # code with a custom `copy_function` may rely on copytree + # doing the right thing. + os.symlink(linkto, dstname) + copystat(srcname, dstname, follow_symlinks=not symlinks) + else: + # ignore dangling symlink if the flag is on + if not os.path.exists(linkto) and ignore_dangling_symlinks: + continue + # otherwise let the copy occurs. copy2 will raise an error + if os.path.isdir(srcname): + copytree(srcname, dstname, symlinks, ignore, + copy_function) + else: + copy_function(srcname, dstname) + elif os.path.isdir(srcname): + copytree(srcname, dstname, symlinks, ignore, copy_function) + else: + # Will raise a SpecialFileError for unsupported file types + copy_function(srcname, dstname) + # catch the Error from the recursive copytree so that we can + # continue with other files + except Error as err: + errors.extend(err.args[0]) + except OSError as why: + errors.append((srcname, dstname, str(why))) + try: + copystat(src, dst) + except OSError as why: + # Copying file access times may fail on Windows + if getattr(why, 'winerror', None) is None: + errors.append((src, dst, str(why))) + if errors: + raise Error(errors) + return dst + +# version vulnerable to race conditions +def _rmtree_unsafe(path, onerror): + try: + with os.scandir(path) as scandir_it: + entries = list(scandir_it) + except OSError: + onerror(os.scandir, path, sys.exc_info()) + entries = [] + for entry in entries: + fullname = entry.path + try: + is_dir = entry.is_dir(follow_symlinks=False) + except OSError: + is_dir = False + if is_dir: + try: + if entry.is_symlink(): + # This can only happen if someone replaces + # a directory with a symlink after the call to + # os.scandir or entry.is_dir above. + raise OSError("Cannot call rmtree on a symbolic link") + except OSError: + onerror(os.path.islink, fullname, sys.exc_info()) + continue + _rmtree_unsafe(fullname, onerror) + else: + try: + os.unlink(fullname) + except OSError: + onerror(os.unlink, fullname, sys.exc_info()) + try: + os.rmdir(path) + except OSError: + onerror(os.rmdir, path, sys.exc_info()) + +# Version using fd-based APIs to protect against races +def _rmtree_safe_fd(topfd, path, onerror): + try: + with os.scandir(topfd) as scandir_it: + entries = list(scandir_it) + except OSError as err: + err.filename = path + onerror(os.scandir, path, sys.exc_info()) + return + for entry in entries: + fullname = os.path.join(path, entry.name) + try: + is_dir = entry.is_dir(follow_symlinks=False) + if is_dir: + orig_st = entry.stat(follow_symlinks=False) + is_dir = stat.S_ISDIR(orig_st.st_mode) + except OSError: + is_dir = False + if is_dir: + try: + dirfd = os.open(entry.name, os.O_RDONLY, dir_fd=topfd) + except OSError: + onerror(os.open, fullname, sys.exc_info()) + else: + try: + if os.path.samestat(orig_st, os.fstat(dirfd)): + _rmtree_safe_fd(dirfd, fullname, onerror) + try: + os.rmdir(entry.name, dir_fd=topfd) + except OSError: + onerror(os.rmdir, fullname, sys.exc_info()) + else: + try: + # This can only happen if someone replaces + # a directory with a symlink after the call to + # os.scandir or stat.S_ISDIR above. + raise OSError("Cannot call rmtree on a symbolic " + "link") + except OSError: + onerror(os.path.islink, fullname, sys.exc_info()) + finally: + os.close(dirfd) + else: + try: + os.unlink(entry.name, dir_fd=topfd) + except OSError: + onerror(os.unlink, fullname, sys.exc_info()) + +_use_fd_functions = ({os.open, os.stat, os.unlink, os.rmdir} <= + os.supports_dir_fd and + os.scandir in os.supports_fd and + os.stat in os.supports_follow_symlinks) + +def rmtree(path, ignore_errors=False, onerror=None): + """Recursively delete a directory tree. + + If ignore_errors is set, errors are ignored; otherwise, if onerror + is set, it is called to handle the error with arguments (func, + path, exc_info) where func is platform and implementation dependent; + path is the argument to that function that caused it to fail; and + exc_info is a tuple returned by sys.exc_info(). If ignore_errors + is false and onerror is None, an exception is raised. + + """ + if ignore_errors: + def onerror(*args): + pass + elif onerror is None: + def onerror(*args): + raise + if _use_fd_functions: + # While the unsafe rmtree works fine on bytes, the fd based does not. + if isinstance(path, bytes): + path = os.fsdecode(path) + # Note: To guard against symlink races, we use the standard + # lstat()/open()/fstat() trick. + try: + orig_st = os.lstat(path) + except Exception: + onerror(os.lstat, path, sys.exc_info()) + return + try: + fd = os.open(path, os.O_RDONLY) + except Exception: + onerror(os.lstat, path, sys.exc_info()) + return + try: + if os.path.samestat(orig_st, os.fstat(fd)): + _rmtree_safe_fd(fd, path, onerror) + try: + os.rmdir(path) + except OSError: + onerror(os.rmdir, path, sys.exc_info()) + else: + try: + # symlinks to directories are forbidden, see bug #1669 + raise OSError("Cannot call rmtree on a symbolic link") + except OSError: + onerror(os.path.islink, path, sys.exc_info()) + finally: + os.close(fd) + else: + try: + if os.path.islink(path): + # symlinks to directories are forbidden, see bug #1669 + raise OSError("Cannot call rmtree on a symbolic link") + except OSError: + onerror(os.path.islink, path, sys.exc_info()) + # can't continue even if onerror hook returns + return + return _rmtree_unsafe(path, onerror) + +# Allow introspection of whether or not the hardening against symlink +# attacks is supported on the current platform +rmtree.avoids_symlink_attacks = _use_fd_functions + +def _basename(path): + # A basename() variant which first strips the trailing slash, if present. + # Thus we always get the last component of the path, even for directories. + sep = os.path.sep + (os.path.altsep or '') + return os.path.basename(path.rstrip(sep)) + +def move(src, dst, copy_function=copy2): + """Recursively move a file or directory to another location. This is + similar to the Unix "mv" command. Return the file or directory's + destination. + + If the destination is a directory or a symlink to a directory, the source + is moved inside the directory. The destination path must not already + exist. + + If the destination already exists but is not a directory, it may be + overwritten depending on os.rename() semantics. + + If the destination is on our current filesystem, then rename() is used. + Otherwise, src is copied to the destination and then removed. Symlinks are + recreated under the new name if os.rename() fails because of cross + filesystem renames. + + The optional `copy_function` argument is a callable that will be used + to copy the source or it will be delegated to `copytree`. + By default, copy2() is used, but any function that supports the same + signature (like copy()) can be used. + + A lot more could be done here... A look at a mv.c shows a lot of + the issues this implementation glosses over. + + """ + real_dst = dst + if os.path.isdir(dst): + if _samefile(src, dst): + # We might be on a case insensitive filesystem, + # perform the rename anyway. + os.rename(src, dst) + return + + real_dst = os.path.join(dst, _basename(src)) + if os.path.exists(real_dst): + raise Error("Destination path '%s' already exists" % real_dst) + try: + os.rename(src, real_dst) + except OSError: + if os.path.islink(src): + linkto = os.readlink(src) + os.symlink(linkto, real_dst) + os.unlink(src) + elif os.path.isdir(src): + if _destinsrc(src, dst): + raise Error("Cannot move a directory '%s' into itself" + " '%s'." % (src, dst)) + copytree(src, real_dst, copy_function=copy_function, + symlinks=True) + rmtree(src) + else: + copy_function(src, real_dst) + os.unlink(src) + return real_dst + +def _destinsrc(src, dst): + src = os.path.abspath(src) + dst = os.path.abspath(dst) + if not src.endswith(os.path.sep): + src += os.path.sep + if not dst.endswith(os.path.sep): + dst += os.path.sep + return dst.startswith(src) + +def _get_gid(name): + """Returns a gid, given a group name.""" + if getgrnam is None or name is None: + return None + try: + result = getgrnam(name) + except KeyError: + result = None + if result is not None: + return result[2] + return None + +def _get_uid(name): + """Returns an uid, given a user name.""" + if getpwnam is None or name is None: + return None + try: + result = getpwnam(name) + except KeyError: + result = None + if result is not None: + return result[2] + return None + +def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, + owner=None, group=None, logger=None): + """Create a (possibly compressed) tar file from all the files under + 'base_dir'. + + 'compress' must be "gzip" (the default), "bzip2", "xz", or None. + + 'owner' and 'group' can be used to define an owner and a group for the + archive that is being built. If not provided, the current owner and group + will be used. + + The output tar file will be named 'base_name' + ".tar", possibly plus + the appropriate compression extension (".gz", ".bz2", or ".xz"). + + Returns the output filename. + """ + if compress is None: + tar_compression = '' + elif _ZLIB_SUPPORTED and compress == 'gzip': + tar_compression = 'gz' + elif _BZ2_SUPPORTED and compress == 'bzip2': + tar_compression = 'bz2' + elif _LZMA_SUPPORTED and compress == 'xz': + tar_compression = 'xz' + else: + raise ValueError("bad value for 'compress', or compression format not " + "supported : {0}".format(compress)) + + import tarfile # late import for breaking circular dependency + + compress_ext = '.' + tar_compression if compress else '' + archive_name = base_name + '.tar' + compress_ext + archive_dir = os.path.dirname(archive_name) + + if archive_dir and not os.path.exists(archive_dir): + if logger is not None: + logger.info("creating %s", archive_dir) + if not dry_run: + os.makedirs(archive_dir) + + # creating the tarball + if logger is not None: + logger.info('Creating tar archive') + + uid = _get_uid(owner) + gid = _get_gid(group) + + def _set_uid_gid(tarinfo): + if gid is not None: + tarinfo.gid = gid + tarinfo.gname = group + if uid is not None: + tarinfo.uid = uid + tarinfo.uname = owner + return tarinfo + + if not dry_run: + tar = tarfile.open(archive_name, 'w|%s' % tar_compression) + try: + tar.add(base_dir, filter=_set_uid_gid) + finally: + tar.close() + + return archive_name + +def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): + """Create a zip file from all the files under 'base_dir'. + + The output zip file will be named 'base_name' + ".zip". Returns the + name of the output zip file. + """ + import zipfile # late import for breaking circular dependency + + zip_filename = base_name + ".zip" + archive_dir = os.path.dirname(base_name) + + if archive_dir and not os.path.exists(archive_dir): + if logger is not None: + logger.info("creating %s", archive_dir) + if not dry_run: + os.makedirs(archive_dir) + + if logger is not None: + logger.info("creating '%s' and adding '%s' to it", + zip_filename, base_dir) + + if not dry_run: + with zipfile.ZipFile(zip_filename, "w", + compression=zipfile.ZIP_DEFLATED) as zf: + path = os.path.normpath(base_dir) + if path != os.curdir: + zf.write(path, path) + if logger is not None: + logger.info("adding '%s'", path) + for dirpath, dirnames, filenames in os.walk(base_dir): + for name in sorted(dirnames): + path = os.path.normpath(os.path.join(dirpath, name)) + zf.write(path, path) + if logger is not None: + logger.info("adding '%s'", path) + for name in filenames: + path = os.path.normpath(os.path.join(dirpath, name)) + if os.path.isfile(path): + zf.write(path, path) + if logger is not None: + logger.info("adding '%s'", path) + + return zip_filename + +_ARCHIVE_FORMATS = { + 'tar': (_make_tarball, [('compress', None)], "uncompressed tar file"), +} + +if _ZLIB_SUPPORTED: + _ARCHIVE_FORMATS['gztar'] = (_make_tarball, [('compress', 'gzip')], + "gzip'ed tar-file") + _ARCHIVE_FORMATS['zip'] = (_make_zipfile, [], "ZIP file") + +if _BZ2_SUPPORTED: + _ARCHIVE_FORMATS['bztar'] = (_make_tarball, [('compress', 'bzip2')], + "bzip2'ed tar-file") + +if _LZMA_SUPPORTED: + _ARCHIVE_FORMATS['xztar'] = (_make_tarball, [('compress', 'xz')], + "xz'ed tar-file") + +def get_archive_formats(): + """Returns a list of supported formats for archiving and unarchiving. + + Each element of the returned sequence is a tuple (name, description) + """ + formats = [(name, registry[2]) for name, registry in + _ARCHIVE_FORMATS.items()] + formats.sort() + return formats + +def register_archive_format(name, function, extra_args=None, description=''): + """Registers an archive format. + + name is the name of the format. function is the callable that will be + used to create archives. If provided, extra_args is a sequence of + (name, value) tuples that will be passed as arguments to the callable. + description can be provided to describe the format, and will be returned + by the get_archive_formats() function. + """ + if extra_args is None: + extra_args = [] + if not callable(function): + raise TypeError('The %s object is not callable' % function) + if not isinstance(extra_args, (tuple, list)): + raise TypeError('extra_args needs to be a sequence') + for element in extra_args: + if not isinstance(element, (tuple, list)) or len(element) !=2: + raise TypeError('extra_args elements are : (arg_name, value)') + + _ARCHIVE_FORMATS[name] = (function, extra_args, description) + +def unregister_archive_format(name): + del _ARCHIVE_FORMATS[name] + +def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, + dry_run=0, owner=None, group=None, logger=None): + """Create an archive file (eg. zip or tar). + + 'base_name' is the name of the file to create, minus any format-specific + extension; 'format' is the archive format: one of "zip", "tar", "gztar", + "bztar", or "xztar". Or any other registered format. + + 'root_dir' is a directory that will be the root directory of the + archive; ie. we typically chdir into 'root_dir' before creating the + archive. 'base_dir' is the directory where we start archiving from; + ie. 'base_dir' will be the common prefix of all files and + directories in the archive. 'root_dir' and 'base_dir' both default + to the current directory. Returns the name of the archive file. + + 'owner' and 'group' are used when creating a tar archive. By default, + uses the current owner and group. + """ + save_cwd = os.getcwd() + if root_dir is not None: + if logger is not None: + logger.debug("changing into '%s'", root_dir) + base_name = os.path.abspath(base_name) + if not dry_run: + os.chdir(root_dir) + + if base_dir is None: + base_dir = os.curdir + + kwargs = {'dry_run': dry_run, 'logger': logger} + + try: + format_info = _ARCHIVE_FORMATS[format] + except KeyError: + raise ValueError("unknown archive format '%s'" % format) from None + + func = format_info[0] + for arg, val in format_info[1]: + kwargs[arg] = val + + if format != 'zip': + kwargs['owner'] = owner + kwargs['group'] = group + + try: + filename = func(base_name, base_dir, **kwargs) + finally: + if root_dir is not None: + if logger is not None: + logger.debug("changing back to '%s'", save_cwd) + os.chdir(save_cwd) + + return filename + + +def get_unpack_formats(): + """Returns a list of supported formats for unpacking. + + Each element of the returned sequence is a tuple + (name, extensions, description) + """ + formats = [(name, info[0], info[3]) for name, info in + _UNPACK_FORMATS.items()] + formats.sort() + return formats + +def _check_unpack_options(extensions, function, extra_args): + """Checks what gets registered as an unpacker.""" + # first make sure no other unpacker is registered for this extension + existing_extensions = {} + for name, info in _UNPACK_FORMATS.items(): + for ext in info[0]: + existing_extensions[ext] = name + + for extension in extensions: + if extension in existing_extensions: + msg = '%s is already registered for "%s"' + raise RegistryError(msg % (extension, + existing_extensions[extension])) + + if not callable(function): + raise TypeError('The registered function must be a callable') + + +def register_unpack_format(name, extensions, function, extra_args=None, + description=''): + """Registers an unpack format. + + `name` is the name of the format. `extensions` is a list of extensions + corresponding to the format. + + `function` is the callable that will be + used to unpack archives. The callable will receive archives to unpack. + If it's unable to handle an archive, it needs to raise a ReadError + exception. + + If provided, `extra_args` is a sequence of + (name, value) tuples that will be passed as arguments to the callable. + description can be provided to describe the format, and will be returned + by the get_unpack_formats() function. + """ + if extra_args is None: + extra_args = [] + _check_unpack_options(extensions, function, extra_args) + _UNPACK_FORMATS[name] = extensions, function, extra_args, description + +def unregister_unpack_format(name): + """Removes the pack format from the registry.""" + del _UNPACK_FORMATS[name] + +def _ensure_directory(path): + """Ensure that the parent directory of `path` exists""" + dirname = os.path.dirname(path) + if not os.path.isdir(dirname): + os.makedirs(dirname) + +def _unpack_zipfile(filename, extract_dir): + """Unpack zip `filename` to `extract_dir` + """ + import zipfile # late import for breaking circular dependency + + if not zipfile.is_zipfile(filename): + raise ReadError("%s is not a zip file" % filename) + + zip = zipfile.ZipFile(filename) + try: + for info in zip.infolist(): + name = info.filename + + # don't extract absolute paths or ones with .. in them + if name.startswith('/') or '..' in name: + continue + + target = os.path.join(extract_dir, *name.split('/')) + if not target: + continue + + _ensure_directory(target) + if not name.endswith('/'): + # file + data = zip.read(info.filename) + f = open(target, 'wb') + try: + f.write(data) + finally: + f.close() + del data + finally: + zip.close() + +def _unpack_tarfile(filename, extract_dir): + """Unpack tar/tar.gz/tar.bz2/tar.xz `filename` to `extract_dir` + """ + import tarfile # late import for breaking circular dependency + try: + tarobj = tarfile.open(filename) + except tarfile.TarError: + raise ReadError( + "%s is not a compressed or uncompressed tar file" % filename) + try: + tarobj.extractall(extract_dir) + finally: + tarobj.close() + +_UNPACK_FORMATS = { + 'tar': (['.tar'], _unpack_tarfile, [], "uncompressed tar file"), + 'zip': (['.zip'], _unpack_zipfile, [], "ZIP file"), +} + +if _ZLIB_SUPPORTED: + _UNPACK_FORMATS['gztar'] = (['.tar.gz', '.tgz'], _unpack_tarfile, [], + "gzip'ed tar-file") + +if _BZ2_SUPPORTED: + _UNPACK_FORMATS['bztar'] = (['.tar.bz2', '.tbz2'], _unpack_tarfile, [], + "bzip2'ed tar-file") + +if _LZMA_SUPPORTED: + _UNPACK_FORMATS['xztar'] = (['.tar.xz', '.txz'], _unpack_tarfile, [], + "xz'ed tar-file") + +def _find_unpack_format(filename): + for name, info in _UNPACK_FORMATS.items(): + for extension in info[0]: + if filename.endswith(extension): + return name + return None + +def unpack_archive(filename, extract_dir=None, format=None): + """Unpack an archive. + + `filename` is the name of the archive. + + `extract_dir` is the name of the target directory, where the archive + is unpacked. If not provided, the current working directory is used. + + `format` is the archive format: one of "zip", "tar", "gztar", "bztar", + or "xztar". Or any other registered format. If not provided, + unpack_archive will use the filename extension and see if an unpacker + was registered for that extension. + + In case none is found, a ValueError is raised. + """ + if extract_dir is None: + extract_dir = os.getcwd() + + extract_dir = os.fspath(extract_dir) + filename = os.fspath(filename) + + if format is not None: + try: + format_info = _UNPACK_FORMATS[format] + except KeyError: + raise ValueError("Unknown unpack format '{0}'".format(format)) from None + + func = format_info[1] + func(filename, extract_dir, **dict(format_info[2])) + else: + # we need to look at the registered unpackers supported extensions + format = _find_unpack_format(filename) + if format is None: + raise ReadError("Unknown archive format '{0}'".format(filename)) + + func = _UNPACK_FORMATS[format][1] + kwargs = dict(_UNPACK_FORMATS[format][2]) + func(filename, extract_dir, **kwargs) + + +if hasattr(os, 'statvfs'): + + __all__.append('disk_usage') + _ntuple_diskusage = collections.namedtuple('usage', 'total used free') + _ntuple_diskusage.total.__doc__ = 'Total space in bytes' + _ntuple_diskusage.used.__doc__ = 'Used space in bytes' + _ntuple_diskusage.free.__doc__ = 'Free space in bytes' + + def disk_usage(path): + """Return disk usage statistics about the given path. + + Returned value is a named tuple with attributes 'total', 'used' and + 'free', which are the amount of total, used and free space, in bytes. + """ + st = os.statvfs(path) + free = st.f_bavail * st.f_frsize + total = st.f_blocks * st.f_frsize + used = (st.f_blocks - st.f_bfree) * st.f_frsize + return _ntuple_diskusage(total, used, free) + +elif os.name == 'nt': + + import nt + __all__.append('disk_usage') + _ntuple_diskusage = collections.namedtuple('usage', 'total used free') + + def disk_usage(path): + """Return disk usage statistics about the given path. + + Returned values is a named tuple with attributes 'total', 'used' and + 'free', which are the amount of total, used and free space, in bytes. + """ + total, free = nt._getdiskusage(path) + used = total - free + return _ntuple_diskusage(total, used, free) + + +def chown(path, user=None, group=None): + """Change owner user and group of the given path. + + user and group can be the uid/gid or the user/group names, and in that case, + they are converted to their respective uid/gid. + """ + + if user is None and group is None: + raise ValueError("user and/or group must be set") + + _user = user + _group = group + + # -1 means don't change it + if user is None: + _user = -1 + # user can either be an int (the uid) or a string (the system username) + elif isinstance(user, str): + _user = _get_uid(user) + if _user is None: + raise LookupError("no such user: {!r}".format(user)) + + if group is None: + _group = -1 + elif not isinstance(group, int): + _group = _get_gid(group) + if _group is None: + raise LookupError("no such group: {!r}".format(group)) + + os.chown(path, _user, _group) + +def get_terminal_size(fallback=(80, 24)): + """Get the size of the terminal window. + + For each of the two dimensions, the environment variable, COLUMNS + and LINES respectively, is checked. If the variable is defined and + the value is a positive integer, it is used. + + When COLUMNS or LINES is not defined, which is the common case, + the terminal connected to sys.__stdout__ is queried + by invoking os.get_terminal_size. + + If the terminal size cannot be successfully queried, either because + the system doesn't support querying, or because we are not + connected to a terminal, the value given in fallback parameter + is used. Fallback defaults to (80, 24) which is the default + size used by many terminal emulators. + + The value returned is a named tuple of type os.terminal_size. + """ + # columns, lines are the working values + try: + columns = int(os.environ['COLUMNS']) + except (KeyError, ValueError): + columns = 0 + + try: + lines = int(os.environ['LINES']) + except (KeyError, ValueError): + lines = 0 + + # only query if necessary + if columns <= 0 or lines <= 0: + try: + size = os.get_terminal_size(sys.__stdout__.fileno()) + except (AttributeError, ValueError, OSError): + # stdout is None, closed, detached, or not a terminal, or + # os.get_terminal_size() is unsupported + size = os.terminal_size(fallback) + if columns <= 0: + columns = size.columns + if lines <= 0: + lines = size.lines + + return os.terminal_size((columns, lines)) + +def which(cmd, mode=os.F_OK | os.X_OK, path=None): + """Given a command, mode, and a PATH string, return the path which + conforms to the given mode on the PATH, or None if there is no such + file. + + `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result + of os.environ.get("PATH"), or can be overridden with a custom search + path. + + """ + # Check that a given file can be accessed with the correct mode. + # Additionally check that `file` is not a directory, as on Windows + # directories pass the os.access check. + def _access_check(fn, mode): + return (os.path.exists(fn) and os.access(fn, mode) + and not os.path.isdir(fn)) + + # If we're given a path with a directory part, look it up directly rather + # than referring to PATH directories. This includes checking relative to the + # current directory, e.g. ./script + if os.path.dirname(cmd): + if _access_check(cmd, mode): + return cmd + return None + + if path is None: + path = os.environ.get("PATH", None) + if path is None: + try: + path = os.confstr("CS_PATH") + except (AttributeError, ValueError): + # os.confstr() or CS_PATH is not available + path = os.defpath + # bpo-35755: Don't use os.defpath if the PATH environment variable is + # set to an empty string + + # PATH='' doesn't match, whereas PATH=':' looks in the current directory + if not path: + return None + path = path.split(os.pathsep) + + if sys.platform == "win32": + # The current directory takes precedence on Windows. + if not os.curdir in path: + path.insert(0, os.curdir) + + # PATHEXT is necessary to check on Windows. + pathext = os.environ.get("PATHEXT", "").split(os.pathsep) + # See if the given file matches any of the expected path extensions. + # This will allow us to short circuit when given "python.exe". + # If it does match, only test that one, otherwise we have to try + # others. + if any(cmd.lower().endswith(ext.lower()) for ext in pathext): + files = [cmd] + else: + files = [cmd + ext for ext in pathext] + else: + # On other platforms you don't have things like PATHEXT to tell you + # what file suffixes are executable, so just pass on cmd as-is. + files = [cmd] + + seen = set() + for dir in path: + normdir = os.path.normcase(dir) + if not normdir in seen: + seen.add(normdir) + for thefile in files: + name = os.path.join(dir, thefile) + if _access_check(name, mode): + return name + return None diff --git a/my_env/Lib/site-packages/__pycache__/easy_install.cpython-37.pyc b/my_env/Lib/site-packages/__pycache__/easy_install.cpython-37.pyc new file mode 100644 index 000000000..dadf4f8ae Binary files /dev/null and b/my_env/Lib/site-packages/__pycache__/easy_install.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/easy_install.py b/my_env/Lib/site-packages/easy_install.py new file mode 100644 index 000000000..d87e98403 --- /dev/null +++ b/my_env/Lib/site-packages/easy_install.py @@ -0,0 +1,5 @@ +"""Run the EasyInstall command""" + +if __name__ == '__main__': + from setuptools.command.easy_install import main + main() diff --git a/my_env/Lib/site-packages/joblib-0.14.0.dist-info/INSTALLER b/my_env/Lib/site-packages/joblib-0.14.0.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/my_env/Lib/site-packages/joblib-0.14.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/my_env/Lib/site-packages/joblib-0.14.0.dist-info/LICENSE.txt b/my_env/Lib/site-packages/joblib-0.14.0.dist-info/LICENSE.txt new file mode 100644 index 000000000..0f469af82 --- /dev/null +++ b/my_env/Lib/site-packages/joblib-0.14.0.dist-info/LICENSE.txt @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2008-2016, The joblib developers. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/my_env/Lib/site-packages/joblib-0.14.0.dist-info/METADATA b/my_env/Lib/site-packages/joblib-0.14.0.dist-info/METADATA new file mode 100644 index 000000000..4fe8cb7d7 --- /dev/null +++ b/my_env/Lib/site-packages/joblib-0.14.0.dist-info/METADATA @@ -0,0 +1,118 @@ +Metadata-Version: 2.1 +Name: joblib +Version: 0.14.0 +Summary: Lightweight pipelining: using Python functions as pipeline jobs. +Home-page: https://joblib.readthedocs.io +Author: Gael Varoquaux +Author-email: gael.varoquaux@normalesup.org +License: BSD +Platform: any +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Console +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: Science/Research +Classifier: Intended Audience :: Education +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Topic :: Scientific/Engineering +Classifier: Topic :: Utilities +Classifier: Topic :: Software Development :: Libraries + +Joblib is a set of tools to provide **lightweight pipelining in +Python**. In particular: + +1. transparent disk-caching of functions and lazy re-evaluation + (memoize pattern) + +2. easy simple parallel computing + +Joblib is optimized to be **fast** and **robust** on large +data in particular and has specific optimizations for `numpy` arrays. It is +**BSD-licensed**. + + + ==================== =============================================== + **Documentation:** https://joblib.readthedocs.io + + **Download:** https://pypi.python.org/pypi/joblib#downloads + + **Source code:** https://github.com/joblib/joblib + + **Report issues:** https://github.com/joblib/joblib/issues + ==================== =============================================== + + +Vision +-------- + +The vision is to provide tools to easily achieve better performance and +reproducibility when working with long running jobs. + + * **Avoid computing the same thing twice**: code is often rerun again and + again, for instance when prototyping computational-heavy jobs (as in + scientific development), but hand-crafted solutions to alleviate this + issue are error-prone and often lead to unreproducible results. + + * **Persist to disk transparently**: efficiently persisting + arbitrary objects containing large data is hard. Using + joblib's caching mechanism avoids hand-written persistence and + implicitly links the file on disk to the execution context of + the original Python object. As a result, joblib's persistence is + good for resuming an application status or computational job, eg + after a crash. + +Joblib addresses these problems while **leaving your code and your flow +control as unmodified as possible** (no framework, no new paradigms). + +Main features +------------------ + +1) **Transparent and fast disk-caching of output value:** a memoize or + make-like functionality for Python functions that works well for + arbitrary Python objects, including very large numpy arrays. Separate + persistence and flow-execution logic from domain logic or algorithmic + code by writing the operations as a set of steps with well-defined + inputs and outputs: Python functions. Joblib can save their + computation to disk and rerun it only if necessary:: + + >>> from joblib import Memory + >>> cachedir = 'your_cache_dir_goes_here' + >>> mem = Memory(cachedir) + >>> import numpy as np + >>> a = np.vander(np.arange(3)).astype(np.float) + >>> square = mem.cache(np.square) + >>> b = square(a) # doctest: +ELLIPSIS + ________________________________________________________________________________ + [Memory] Calling square... + square(array([[0., 0., 1.], + [1., 1., 1.], + [4., 2., 1.]])) + ___________________________________________________________square - 0...s, 0.0min + + >>> c = square(a) + >>> # The above call did not trigger an evaluation + +2) **Embarrassingly parallel helper:** to make it easy to write readable + parallel code and debug it quickly:: + + >>> from joblib import Parallel, delayed + >>> from math import sqrt + >>> Parallel(n_jobs=1)(delayed(sqrt)(i**2) for i in range(10)) + [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] + + +3) **Fast compressed Persistence**: a replacement for pickle to work + efficiently on Python objects containing large data ( + *joblib.dump* & *joblib.load* ). + +.. + >>> import shutil ; shutil.rmtree(cachedir) + + + diff --git a/my_env/Lib/site-packages/joblib-0.14.0.dist-info/RECORD b/my_env/Lib/site-packages/joblib-0.14.0.dist-info/RECORD new file mode 100644 index 000000000..a83c210a3 --- /dev/null +++ b/my_env/Lib/site-packages/joblib-0.14.0.dist-info/RECORD @@ -0,0 +1,228 @@ +joblib-0.14.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +joblib-0.14.0.dist-info/LICENSE.txt,sha256=-OWIkGu9oHPojgnkwRnCbbbHLJsFncP-e-fgi-_0y60,1527 +joblib-0.14.0.dist-info/METADATA,sha256=rrYBO5F-onDOgTZxQllurP8xi9mB9VmTkqaIyq3W66E,4536 +joblib-0.14.0.dist-info/RECORD,, +joblib-0.14.0.dist-info/WHEEL,sha256=8zNYZbwQSXoB9IfXOjPfeNwvAsALAjffgk27FqvCWbo,110 +joblib-0.14.0.dist-info/top_level.txt,sha256=P0LsoZ45gBL7ckL4lqQt7tdbrHD4xlVYhffmhHeeT_U,7 +joblib/__init__.py,sha256=K0ILuSLe56LyPaQPFoHRKguTsbi83OPLV5tunn-fjwI,4994 +joblib/__pycache__/__init__.cpython-37.pyc,, +joblib/__pycache__/_compat.cpython-37.pyc,, +joblib/__pycache__/_dask.cpython-37.pyc,, +joblib/__pycache__/_memmapping_reducer.cpython-37.pyc,, +joblib/__pycache__/_memory_helpers.cpython-37.pyc,, +joblib/__pycache__/_multiprocessing_helpers.cpython-37.pyc,, +joblib/__pycache__/_parallel_backends.cpython-37.pyc,, +joblib/__pycache__/_store_backends.cpython-37.pyc,, +joblib/__pycache__/backports.cpython-37.pyc,, +joblib/__pycache__/compressor.cpython-37.pyc,, +joblib/__pycache__/disk.cpython-37.pyc,, +joblib/__pycache__/executor.cpython-37.pyc,, +joblib/__pycache__/format_stack.cpython-37.pyc,, +joblib/__pycache__/func_inspect.cpython-37.pyc,, +joblib/__pycache__/hashing.cpython-37.pyc,, +joblib/__pycache__/logger.cpython-37.pyc,, +joblib/__pycache__/memory.cpython-37.pyc,, +joblib/__pycache__/my_exceptions.cpython-37.pyc,, +joblib/__pycache__/numpy_pickle.cpython-37.pyc,, +joblib/__pycache__/numpy_pickle_compat.cpython-37.pyc,, +joblib/__pycache__/numpy_pickle_utils.cpython-37.pyc,, +joblib/__pycache__/parallel.cpython-37.pyc,, +joblib/__pycache__/pool.cpython-37.pyc,, +joblib/__pycache__/testing.cpython-37.pyc,, +joblib/_compat.py,sha256=j_3Np0GoJF9cF7EPU08SbfNlof1zdC_amV7RHBOZyWc,577 +joblib/_dask.py,sha256=Q8V1OIIlL3qYAO8dVWel9nIt6jFyjyWOYn50vflOx7s,10421 +joblib/_memmapping_reducer.py,sha256=gYU2ep139QiLQNj--eIDB8ISyC7RV9X1M4UpaRVe9XQ,17200 +joblib/_memory_helpers.py,sha256=qoEGAc3AcWUGHRJF6k0jeosrZijoXRmFe5af8bKqGCU,3607 +joblib/_multiprocessing_helpers.py,sha256=sRSrTSqRNj6f9b7CX4oDjeLqeSNfDjg80vfuq3szX3g,2250 +joblib/_parallel_backends.py,sha256=mffh6zcisk5bp4V_NM1tYPKxyEXw2V1F5mJGY0dnBpY,24660 +joblib/_store_backends.py,sha256=dlFYpdnV16H5IkoIIl1jV6eXmnZ1qnGbQF7_LBJD1DM,14530 +joblib/backports.py,sha256=3dWMjd_EOwV1WHjHAgcIJk_91VWnzpHLfJrzQJ6SmE4,2676 +joblib/compressor.py,sha256=0BRQ9R_VXsDM_Rs-AfYPPzuf0UxEAOLrg6SFnCw2Abk,21004 +joblib/disk.py,sha256=n1rZ-sy0xtDBJO23c98585-3MDFgvxLKfjEf00hBGN8,3814 +joblib/executor.py,sha256=2Kdt1G-KOptzK4uLE2iVSlTBm0lIz1i6ooSTCeBR5rA,2565 +joblib/externals/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +joblib/externals/__pycache__/__init__.cpython-37.pyc,, +joblib/externals/cloudpickle/__init__.py,sha256=Yx3vOBmwYVm6pPgOIfu-KvclhXvEtygjsurWGfMQGP8,212 +joblib/externals/cloudpickle/__pycache__/__init__.cpython-37.pyc,, +joblib/externals/cloudpickle/__pycache__/cloudpickle.cpython-37.pyc,, +joblib/externals/cloudpickle/__pycache__/cloudpickle_fast.cpython-37.pyc,, +joblib/externals/cloudpickle/cloudpickle.py,sha256=cAUwgRcWOp0up5S4O21YgChxE7JzkRBWYaOcK3IKaoE,52157 +joblib/externals/cloudpickle/cloudpickle_fast.py,sha256=FWMFeB833k_wx-2SKsP7dNE_HUMN_6BZ9wpHMlYALLE,19604 +joblib/externals/loky/__init__.py,sha256=xp5PhgGwvgyip8ainO2OGxFvXRayGB1cRdeLpulFFFM,1072 +joblib/externals/loky/__pycache__/__init__.cpython-37.pyc,, +joblib/externals/loky/__pycache__/_base.cpython-37.pyc,, +joblib/externals/loky/__pycache__/cloudpickle_wrapper.cpython-37.pyc,, +joblib/externals/loky/__pycache__/process_executor.cpython-37.pyc,, +joblib/externals/loky/__pycache__/reusable_executor.cpython-37.pyc,, +joblib/externals/loky/_base.py,sha256=Ze4r2g-HqBaQuBnXydo4FA1zmAVuTbRa_8GFadu7Wls,23423 +joblib/externals/loky/backend/__init__.py,sha256=HIn7kzGoXCowleEzLikOjptBPLDjAXWpVe3DdxiCTWQ,398 +joblib/externals/loky/backend/__pycache__/__init__.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/_posix_reduction.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/_posix_wait.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/_win_reduction.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/_win_wait.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/compat.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/compat_posix.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/compat_win32.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/context.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/fork_exec.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/managers.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/popen_loky_posix.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/popen_loky_win32.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/process.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/queues.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/reduction.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/resource_tracker.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/semlock.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/spawn.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/synchronize.cpython-37.pyc,, +joblib/externals/loky/backend/__pycache__/utils.cpython-37.pyc,, +joblib/externals/loky/backend/_posix_reduction.py,sha256=kzZ00XEIZkCT6YmkArwy2QVgF30mWgkGyktjPxBVLdQ,2223 +joblib/externals/loky/backend/_posix_wait.py,sha256=4GDzBDe1kiHxHPGA9By5Zh2xpvsOf4zK9R5nuBjee3U,3319 +joblib/externals/loky/backend/_win_reduction.py,sha256=Zhqi-2SQsn-mOCiyd8GoTkzhgG-q-gw9VN6intLzk9M,3724 +joblib/externals/loky/backend/_win_wait.py,sha256=TaPjFsCWYhPgtzUZBjb961ShvEeuog5h_nc_bGG--gM,1956 +joblib/externals/loky/backend/compat.py,sha256=-wqR1Z_M-VlANX7htToCBHtWWQ7DFPFaZ3nWcKoGE1Q,995 +joblib/externals/loky/backend/compat_posix.py,sha256=V-0QGfaSWHDv2hgTxMgrhaf6ZyihutTnjd2Xy5FswD0,334 +joblib/externals/loky/backend/compat_win32.py,sha256=V9MsGseX2aib89DChKDfC2PgLrYtbNyATJb3OWKtRn8,1407 +joblib/externals/loky/backend/context.py,sha256=fEIC4v_VuvY9hcY_w_A1DNSw8dDRs0De49up_Xc2Fis,9752 +joblib/externals/loky/backend/fork_exec.py,sha256=FkUlRNNVq-eYHsYPD5fHbyMkB_5I1nYz7AV_r6OEzI0,1372 +joblib/externals/loky/backend/managers.py,sha256=3amteDFgQ2Xxqaobv-W-8pYdzDd6NgTtwT8SmluB9Us,1836 +joblib/externals/loky/backend/popen_loky_posix.py,sha256=6n5iR7eAX7-tS-otLHtp4yquCx857PQOWCqYTcWBNrk,6911 +joblib/externals/loky/backend/popen_loky_win32.py,sha256=gib6vwolIzndU-ag1hzepADkOuabW_9T-fmVD98ahaM,5720 +joblib/externals/loky/backend/process.py,sha256=3s86s4Ca-QibEN6haOTvBFRip_I5SovXBLAAhwx6WTk,3526 +joblib/externals/loky/backend/queues.py,sha256=e5kNMx_-RiBUAxoeiNSv_97nzLPZudOclY5UmXF_zj4,8827 +joblib/externals/loky/backend/reduction.py,sha256=eIM41nXDPcY_Idp_0Y4fxMr27c5fG3y9Gf1Arb4N5uk,8263 +joblib/externals/loky/backend/resource_tracker.py,sha256=JgphN4HDNaw0Uq5PYvlKOkkufJnPSVvfSUnLesmbUzY,11758 +joblib/externals/loky/backend/semlock.py,sha256=5d7SXHLyw4AZROLZHwsZ9N7FgrrBLMzPB5YAPDWlu1o,8918 +joblib/externals/loky/backend/spawn.py,sha256=obfNP6c-da6TyyFn7a-SuVDTTNxhKB03lxqkWUargwY,7885 +joblib/externals/loky/backend/synchronize.py,sha256=6ayerlMy0nXU3jGooHwus7mY5WVRZoMZ8qbVsAuUkhk,11381 +joblib/externals/loky/backend/utils.py,sha256=GcKkfL1_kk6oDn-YC6a9mW_xyF0Vvt4M-t96iiNB5nY,5691 +joblib/externals/loky/cloudpickle_wrapper.py,sha256=U4vl1aG_W8u0_2blqua5np86wG4-21L5cjup79cD3Ww,3964 +joblib/externals/loky/process_executor.py,sha256=KMLSoVwnVAYq62pwfAe-gexycExeHEDM7Wo-Oor8e5k,45719 +joblib/externals/loky/reusable_executor.py,sha256=Q-V5Yt5lFJ9qFMNCp2AThLFpKk3_iRoMpU8YbrOvLSM,9268 +joblib/format_stack.py,sha256=D53RrCnEzb2Ge8wn2tIZ0-GaTwSOVDlR692hltUGP-E,14653 +joblib/func_inspect.py,sha256=fkJefyXk3v_MP39VX4ogdRtkTWpQL-SzTbF8lOIIgaw,13412 +joblib/hashing.py,sha256=kDiz_BSQQ3gJ1F4JkvSWe9q8LvgnKzH6mXBZewQREHA,10362 +joblib/logger.py,sha256=xjTDhqjpQU8DjIqrL35IiZ1z7HJ-fgbVc-7Ijcii3Eg,5129 +joblib/memory.py,sha256=ZL8PWqdEJBACeyG24LYgZHuddrWsBSGUdY2FIl4Q-4w,39689 +joblib/my_exceptions.py,sha256=DliZaY_ZaFjWfdC-VIVDLi2epdE_Rv6Fp35IntRo0is,4407 +joblib/numpy_pickle.py,sha256=TrtIvknbPvfe-4EHwADu29-aZqDHthEABgQdc2lWN7A,24604 +joblib/numpy_pickle_compat.py,sha256=cLOIVT05kRgzroPGO7LfvOw4tXNU8Ffm76ciUkKSb9k,8650 +joblib/numpy_pickle_utils.py,sha256=kdMtF-YlO24S1oSRHiujfl7hQJsc0j-rbehC8Lagpok,8436 +joblib/parallel.py,sha256=kIJsTY3sMbt6l1KygXjPUIX_QSWGnOOgFtZo-vmEm7w,44691 +joblib/pool.py,sha256=yz33MtLFnxm7ahlk3cvQLSUpYHtYbij6zytjSa4lTmo,13153 +joblib/test/__init__.py,sha256=bkIwY5OneyPcRn2VuzQlIFdtW5Cwo1mUJ7IfSztDO9c,73 +joblib/test/__pycache__/__init__.cpython-37.pyc,, +joblib/test/__pycache__/common.cpython-37.pyc,, +joblib/test/__pycache__/test_backports.cpython-37.pyc,, +joblib/test/__pycache__/test_dask.cpython-37.pyc,, +joblib/test/__pycache__/test_disk.cpython-37.pyc,, +joblib/test/__pycache__/test_format_stack.cpython-37.pyc,, +joblib/test/__pycache__/test_func_inspect.cpython-37.pyc,, +joblib/test/__pycache__/test_func_inspect_special_encoding.cpython-37.pyc,, +joblib/test/__pycache__/test_hashing.cpython-37.pyc,, +joblib/test/__pycache__/test_init.cpython-37.pyc,, +joblib/test/__pycache__/test_logger.cpython-37.pyc,, +joblib/test/__pycache__/test_memmapping.cpython-37.pyc,, +joblib/test/__pycache__/test_memory.cpython-37.pyc,, +joblib/test/__pycache__/test_module.cpython-37.pyc,, +joblib/test/__pycache__/test_my_exceptions.cpython-37.pyc,, +joblib/test/__pycache__/test_numpy_pickle.cpython-37.pyc,, +joblib/test/__pycache__/test_numpy_pickle_compat.cpython-37.pyc,, +joblib/test/__pycache__/test_numpy_pickle_utils.cpython-37.pyc,, +joblib/test/__pycache__/test_parallel.cpython-37.pyc,, +joblib/test/__pycache__/test_store_backends.cpython-37.pyc,, +joblib/test/__pycache__/test_testing.cpython-37.pyc,, +joblib/test/common.py,sha256=ZytAxHuzPgfJxOiXeNq4O3UrObcqiMzy_4VNUiM1AFo,3348 +joblib/test/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +joblib/test/data/__pycache__/__init__.cpython-37.pyc,, +joblib/test/data/__pycache__/create_numpy_pickle.cpython-37.pyc,, +joblib/test/data/create_numpy_pickle.py,sha256=UwB5k8Yjh00CPBsCzxKnth0ZvkfdtZf3Bx1lYakhlOE,3616 +joblib/test/data/joblib_0.10.0_compressed_pickle_py27_np16.gz,sha256=QYRH6Q2DSGVorjCSqWCxjTWCMOJKyew4Nl2qmfQVvQ8,769 +joblib/test/data/joblib_0.10.0_compressed_pickle_py27_np17.gz,sha256=ofTozM_KlPJa50TR8FCwc09mMmO6OO0GQhgUBLNIsXs,757 +joblib/test/data/joblib_0.10.0_compressed_pickle_py33_np18.gz,sha256=2eIVeA-XjOaT5IEQ6tI2UuHG3hwhiRciMmkBmPcIh4g,792 +joblib/test/data/joblib_0.10.0_compressed_pickle_py34_np19.gz,sha256=Gr2z_1tVWDH1H3_wCVHmakknf8KqeHKT8Yz4d1vmUCM,794 +joblib/test/data/joblib_0.10.0_compressed_pickle_py35_np19.gz,sha256=pWw_xuDbOkECqu1KGf1OFU7s2VbzC2v5F5iXhE7TwB4,790 +joblib/test/data/joblib_0.10.0_pickle_py27_np16.pkl,sha256=icRQjj374B-AHk5znxre0T9oWUHokoHIBQ8MqKo8l-U,986 +joblib/test/data/joblib_0.10.0_pickle_py27_np16.pkl.bz2,sha256=iM3fX-Z5ULqdH263VR0lgTSlGqJotLlbAF4gaSUKB6g,997 +joblib/test/data/joblib_0.10.0_pickle_py27_np16.pkl.gzip,sha256=QYRH6Q2DSGVorjCSqWCxjTWCMOJKyew4Nl2qmfQVvQ8,769 +joblib/test/data/joblib_0.10.0_pickle_py27_np17.pkl,sha256=icRQjj374B-AHk5znxre0T9oWUHokoHIBQ8MqKo8l-U,986 +joblib/test/data/joblib_0.10.0_pickle_py27_np17.pkl.bz2,sha256=oYQVIyMiUxyRgWSuBBSOvCWKzToA-kUpcoQWdV4UoV4,997 +joblib/test/data/joblib_0.10.0_pickle_py27_np17.pkl.gzip,sha256=Jpv3iGcDgKTv-O4nZsUreIbUK7qnt2cugZ-VMgNeEDQ,798 +joblib/test/data/joblib_0.10.0_pickle_py27_np17.pkl.lzma,sha256=c0wu0x8pPv4BcStj7pE61rZpf68FLG_pNzQZ4e82zH8,660 +joblib/test/data/joblib_0.10.0_pickle_py27_np17.pkl.xz,sha256=77FG1FDG0GHQav-1bxc4Tn9ky6ubUW_MbE0_iGmz5wc,712 +joblib/test/data/joblib_0.10.0_pickle_py33_np18.pkl,sha256=4GTC7s_cWNVShERn2nvVbspZYJgyK_0man4TEqvdVzU,1068 +joblib/test/data/joblib_0.10.0_pickle_py33_np18.pkl.bz2,sha256=6G1vbs_iYmz2kYJ6w4qB1k7D67UnxUMus0S4SWeBtFo,1000 +joblib/test/data/joblib_0.10.0_pickle_py33_np18.pkl.gzip,sha256=tlRUWeJS1BXmcwtLNSNK9L0hDHekFl07CqWxTShinmY,831 +joblib/test/data/joblib_0.10.0_pickle_py33_np18.pkl.lzma,sha256=CorPwnfv3rR5hjNtJI01-sEBMOnkSxNlRVaWTszMopA,694 +joblib/test/data/joblib_0.10.0_pickle_py33_np18.pkl.xz,sha256=Dppj3MffOKsKETeptEtDaxPOv6MA6xnbpK5LzlDQ-oE,752 +joblib/test/data/joblib_0.10.0_pickle_py34_np19.pkl,sha256=HL5Fb1uR9aPLjjhoOPJ2wwM1Qyo1FCZoYYd2HVw0Fos,1068 +joblib/test/data/joblib_0.10.0_pickle_py34_np19.pkl.bz2,sha256=Pyr2fqZnwfUxXdyrBr-kRwBYY8HA_Yi7fgSguKy5pUs,1021 +joblib/test/data/joblib_0.10.0_pickle_py34_np19.pkl.gzip,sha256=os8NJjQI9FhnlZM-Ay9dX_Uo35gZnoJCgQSIVvcBPfE,831 +joblib/test/data/joblib_0.10.0_pickle_py34_np19.pkl.lzma,sha256=Q_0y43qU7_GqAabJ8y3PWVhOisurnCAq3GzuCu04V58,697 +joblib/test/data/joblib_0.10.0_pickle_py34_np19.pkl.xz,sha256=BNfmiQfpeLVpdfkwlJK4hJ5Cpgl0vreVyekyc5d_PNM,752 +joblib/test/data/joblib_0.10.0_pickle_py35_np19.pkl,sha256=l7nvLolhBDIdPFznOz3lBHiMOPBPCMi1bXop1tFSCpY,1068 +joblib/test/data/joblib_0.10.0_pickle_py35_np19.pkl.bz2,sha256=pqGpuIS-ZU4uP8mkglHs8MaSDiVcPy7l3XHYJSppRgY,1005 +joblib/test/data/joblib_0.10.0_pickle_py35_np19.pkl.gzip,sha256=YRFXE6LEb6qK72yPqnXdqQVY8Ts8xKUS9PWQKhLxWvk,833 +joblib/test/data/joblib_0.10.0_pickle_py35_np19.pkl.lzma,sha256=Bf7gCUeTuTjCkbcIdyZYz69irblX4SAVQEzxCnMQhNU,701 +joblib/test/data/joblib_0.10.0_pickle_py35_np19.pkl.xz,sha256=As8w2LGWwwNmKy3QNdKljK63Yq46gjRf_RJ0lh5_WqA,752 +joblib/test/data/joblib_0.11.0_compressed_pickle_py36_np111.gz,sha256=1WrnXDqDoNEPYOZX1Q5Wr2463b8vVV6fw4Wm5S4bMt4,800 +joblib/test/data/joblib_0.11.0_pickle_py36_np111.pkl,sha256=XmsOFxeC1f1aYdGETclG6yfF9rLoB11DayOAhDMULrw,1068 +joblib/test/data/joblib_0.11.0_pickle_py36_np111.pkl.bz2,sha256=vI2yWb50LKL_NgZyd_XkoD5teIg93uI42mWnx9ee-AQ,991 +joblib/test/data/joblib_0.11.0_pickle_py36_np111.pkl.gzip,sha256=1WrnXDqDoNEPYOZX1Q5Wr2463b8vVV6fw4Wm5S4bMt4,800 +joblib/test/data/joblib_0.11.0_pickle_py36_np111.pkl.lzma,sha256=IWA0JlZG2ur53HgTUDl1m7q79dcVq6b0VOq33gKoJU0,715 +joblib/test/data/joblib_0.11.0_pickle_py36_np111.pkl.xz,sha256=3Xh_NbMZdBjYx7ynfJ3Fyke28izSRSSzzNB0z5D4k9Y,752 +joblib/test/data/joblib_0.8.4_compressed_pickle_py27_np17.gz,sha256=Sp-ZT7i6pj5on2gbptszu7RarzJpOmHJ67UKOmCPQMg,659 +joblib/test/data/joblib_0.9.2_compressed_pickle_py27_np16.gz,sha256=NLtDrvo2XIH0KvUUAvhOqMeoXEjGW0IuTk_osu5XiDw,658 +joblib/test/data/joblib_0.9.2_compressed_pickle_py27_np17.gz,sha256=NLtDrvo2XIH0KvUUAvhOqMeoXEjGW0IuTk_osu5XiDw,658 +joblib/test/data/joblib_0.9.2_compressed_pickle_py34_np19.gz,sha256=nzO9iiGkG3KbBdrF3usOho8higkrDj_lmICUzxZyF_Y,673 +joblib/test/data/joblib_0.9.2_compressed_pickle_py35_np19.gz,sha256=nzO9iiGkG3KbBdrF3usOho8higkrDj_lmICUzxZyF_Y,673 +joblib/test/data/joblib_0.9.2_pickle_py27_np16.pkl,sha256=naijdk2xIeKdIa3mfJw0JlmOdtiN6uRM1yOJg6-M73M,670 +joblib/test/data/joblib_0.9.2_pickle_py27_np16.pkl_01.npy,sha256=DvvX2c5-7DpuCg20HnleA5bMo9awN9rWxhtGSEPSiAk,120 +joblib/test/data/joblib_0.9.2_pickle_py27_np16.pkl_02.npy,sha256=HBzzbLeB-8whuVO7CgtF3wktoOrg52WILlljzNcBBbE,120 +joblib/test/data/joblib_0.9.2_pickle_py27_np16.pkl_03.npy,sha256=oMRa4qKJhBy-uiRDt-uqOzHAqencxzKUrKVynaAJJAU,236 +joblib/test/data/joblib_0.9.2_pickle_py27_np16.pkl_04.npy,sha256=PsviRClLqT4IR5sWwbmpQR41af9mDtBFncodJBOB3wU,104 +joblib/test/data/joblib_0.9.2_pickle_py27_np17.pkl,sha256=LynX8dLOygfxDfFywOgm7wgWOhSxLG7z-oDsU6X83Dw,670 +joblib/test/data/joblib_0.9.2_pickle_py27_np17.pkl_01.npy,sha256=DvvX2c5-7DpuCg20HnleA5bMo9awN9rWxhtGSEPSiAk,120 +joblib/test/data/joblib_0.9.2_pickle_py27_np17.pkl_02.npy,sha256=HBzzbLeB-8whuVO7CgtF3wktoOrg52WILlljzNcBBbE,120 +joblib/test/data/joblib_0.9.2_pickle_py27_np17.pkl_03.npy,sha256=oMRa4qKJhBy-uiRDt-uqOzHAqencxzKUrKVynaAJJAU,236 +joblib/test/data/joblib_0.9.2_pickle_py27_np17.pkl_04.npy,sha256=PsviRClLqT4IR5sWwbmpQR41af9mDtBFncodJBOB3wU,104 +joblib/test/data/joblib_0.9.2_pickle_py33_np18.pkl,sha256=w9TLxpDTzp5TI6cU6lRvMsAasXEChcQgGE9s30sm_CU,691 +joblib/test/data/joblib_0.9.2_pickle_py33_np18.pkl_01.npy,sha256=DvvX2c5-7DpuCg20HnleA5bMo9awN9rWxhtGSEPSiAk,120 +joblib/test/data/joblib_0.9.2_pickle_py33_np18.pkl_02.npy,sha256=HBzzbLeB-8whuVO7CgtF3wktoOrg52WILlljzNcBBbE,120 +joblib/test/data/joblib_0.9.2_pickle_py33_np18.pkl_03.npy,sha256=jt6aZKUrJdfbMJUJVsl47As5MrfRSs1avGMhbmS6vec,307 +joblib/test/data/joblib_0.9.2_pickle_py33_np18.pkl_04.npy,sha256=PsviRClLqT4IR5sWwbmpQR41af9mDtBFncodJBOB3wU,104 +joblib/test/data/joblib_0.9.2_pickle_py34_np19.pkl,sha256=ilOBAOaulLFvKrD32S1NfnpiK-LfzA9rC3O2I7xROuI,691 +joblib/test/data/joblib_0.9.2_pickle_py34_np19.pkl_01.npy,sha256=DvvX2c5-7DpuCg20HnleA5bMo9awN9rWxhtGSEPSiAk,120 +joblib/test/data/joblib_0.9.2_pickle_py34_np19.pkl_02.npy,sha256=HBzzbLeB-8whuVO7CgtF3wktoOrg52WILlljzNcBBbE,120 +joblib/test/data/joblib_0.9.2_pickle_py34_np19.pkl_03.npy,sha256=jt6aZKUrJdfbMJUJVsl47As5MrfRSs1avGMhbmS6vec,307 +joblib/test/data/joblib_0.9.2_pickle_py34_np19.pkl_04.npy,sha256=PsviRClLqT4IR5sWwbmpQR41af9mDtBFncodJBOB3wU,104 +joblib/test/data/joblib_0.9.2_pickle_py35_np19.pkl,sha256=WfDVIqKcMzzh1gSAshIfzBoIpdLdZQuG79yYf5kfpOo,691 +joblib/test/data/joblib_0.9.2_pickle_py35_np19.pkl_01.npy,sha256=DvvX2c5-7DpuCg20HnleA5bMo9awN9rWxhtGSEPSiAk,120 +joblib/test/data/joblib_0.9.2_pickle_py35_np19.pkl_02.npy,sha256=HBzzbLeB-8whuVO7CgtF3wktoOrg52WILlljzNcBBbE,120 +joblib/test/data/joblib_0.9.2_pickle_py35_np19.pkl_03.npy,sha256=jt6aZKUrJdfbMJUJVsl47As5MrfRSs1avGMhbmS6vec,307 +joblib/test/data/joblib_0.9.2_pickle_py35_np19.pkl_04.npy,sha256=PsviRClLqT4IR5sWwbmpQR41af9mDtBFncodJBOB3wU,104 +joblib/test/data/joblib_0.9.4.dev0_compressed_cache_size_pickle_py35_np19.gz,sha256=8jYfWJsx0oY2J-3LlmEigK5cClnJSW2J2rfeSTZw-Ts,802 +joblib/test/data/joblib_0.9.4.dev0_compressed_cache_size_pickle_py35_np19.gz_01.npy.z,sha256=YT9VvT3sEl2uWlOyvH2CkyE9Sok4od9O3kWtgeuUUqE,43 +joblib/test/data/joblib_0.9.4.dev0_compressed_cache_size_pickle_py35_np19.gz_02.npy.z,sha256=txA5RDI0PRuiU_UNKY8pGp-zQgQQ9vaVvMi60hOPaVs,43 +joblib/test/data/joblib_0.9.4.dev0_compressed_cache_size_pickle_py35_np19.gz_03.npy.z,sha256=d3AwICvU2MpSNjh2aPIsdJeGZLlDjANAF1Soa6uM0Po,37 +joblib/test/test_backports.py,sha256=Y9bhGa6H-K_FgLkDyXaSHzpaWk148Rjn8R9IKCKdy-k,1175 +joblib/test/test_dask.py,sha256=G9pKabNuZpM-e--ZhNlXF-Fsy8DDAN4wF_I_rCyNe4U,11889 +joblib/test/test_disk.py,sha256=wJd1o9nLzqEjLqxxkgB9S7-UcKjHPQ8qK5l0czcNp0o,2205 +joblib/test/test_format_stack.py,sha256=wTtjRlp0edNv7_NzxZU6DAVJQoebL-lnGsUEMwVZXpM,4250 +joblib/test/test_func_inspect.py,sha256=pNO9cWemIyBUfPqb4CIBVwncaOYxGsp0bog_H1rfNks,9668 +joblib/test/test_func_inspect_special_encoding.py,sha256=oHbMTPOK3XI0YVoS0GsouJ-GfM_neP4GOIJC-TKnNgU,146 +joblib/test/test_hashing.py,sha256=GgA8QaYDLtNAnExvpM2qFHYoSkM9sBNw-LVoPk7tXmE,15245 +joblib/test/test_init.py,sha256=bgNF-9CIJl1MFNA75LBWOaiNtvduVfuvglz_u9Tt8Uc,422 +joblib/test/test_logger.py,sha256=a8u3tujL0wv_L--F9_1CZ8CI-KjcTpYARzl5C6cyyEg,1112 +joblib/test/test_memmapping.py,sha256=NX-hR0T8JFWYA4iZHmynwS89mtqNmROnQFsHUIuKafI,23388 +joblib/test/test_memory.py,sha256=U4jcGPCsiXG9DCaQoxrvOILiD04hO-fHCoOeMlSO434,39993 +joblib/test/test_module.py,sha256=qpPqdgId8eDUvDtM0ugTYG6fAFeXwS__ngwoVtZ-5iQ,1969 +joblib/test/test_my_exceptions.py,sha256=de_-7A3EYzAv3u-SntDrEkVfaAC9pE7_YHaSO1blgQk,2383 +joblib/test/test_numpy_pickle.py,sha256=j5_pcppN-O-xxTJs4SvigJrk6ch6FAdWyx8iEGz0Iek,39373 +joblib/test/test_numpy_pickle_compat.py,sha256=C5OiaFrqmxYD57fr_LpmItd6OOZPeOMfo9RVr6ZZIkk,624 +joblib/test/test_numpy_pickle_utils.py,sha256=PJVVgr-v3so9oAf9LblASRCpt-wXAo19FvsUpw-fZjI,421 +joblib/test/test_parallel.py,sha256=SfmYeLQimKAGnPDLk6aRTNWhWRH76bmfW-HzGFCg6vs,61240 +joblib/test/test_store_backends.py,sha256=fZh0_E5Rj5VTJ_UzH3autHpWwEaWQvWTiQB8felVAN4,1942 +joblib/test/test_testing.py,sha256=I-EkdKHWdHu8m5fo2NnyB0AqR8zAOJ01WKKvyZYRneY,2467 +joblib/testing.py,sha256=YaXXAlfKhh3xTyJqEZoOxKrzAV3QOqHbvWjZHs3LTzU,2204 diff --git a/my_env/Lib/site-packages/joblib-0.14.0.dist-info/WHEEL b/my_env/Lib/site-packages/joblib-0.14.0.dist-info/WHEEL new file mode 100644 index 000000000..8b701e93c --- /dev/null +++ b/my_env/Lib/site-packages/joblib-0.14.0.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.6) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/my_env/Lib/site-packages/joblib-0.14.0.dist-info/top_level.txt b/my_env/Lib/site-packages/joblib-0.14.0.dist-info/top_level.txt new file mode 100644 index 000000000..ca4af27e2 --- /dev/null +++ b/my_env/Lib/site-packages/joblib-0.14.0.dist-info/top_level.txt @@ -0,0 +1 @@ +joblib diff --git a/my_env/Lib/site-packages/joblib/__init__.py b/my_env/Lib/site-packages/joblib/__init__.py new file mode 100644 index 000000000..704ebfc49 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/__init__.py @@ -0,0 +1,139 @@ +"""Joblib is a set of tools to provide **lightweight pipelining in +Python**. In particular: + +1. transparent disk-caching of functions and lazy re-evaluation + (memoize pattern) + +2. easy simple parallel computing + +Joblib is optimized to be **fast** and **robust** on large +data in particular and has specific optimizations for `numpy` arrays. It is +**BSD-licensed**. + + + ==================== =============================================== + **Documentation:** https://joblib.readthedocs.io + + **Download:** https://pypi.python.org/pypi/joblib#downloads + + **Source code:** https://github.com/joblib/joblib + + **Report issues:** https://github.com/joblib/joblib/issues + ==================== =============================================== + + +Vision +-------- + +The vision is to provide tools to easily achieve better performance and +reproducibility when working with long running jobs. + + * **Avoid computing the same thing twice**: code is often rerun again and + again, for instance when prototyping computational-heavy jobs (as in + scientific development), but hand-crafted solutions to alleviate this + issue are error-prone and often lead to unreproducible results. + + * **Persist to disk transparently**: efficiently persisting + arbitrary objects containing large data is hard. Using + joblib's caching mechanism avoids hand-written persistence and + implicitly links the file on disk to the execution context of + the original Python object. As a result, joblib's persistence is + good for resuming an application status or computational job, eg + after a crash. + +Joblib addresses these problems while **leaving your code and your flow +control as unmodified as possible** (no framework, no new paradigms). + +Main features +------------------ + +1) **Transparent and fast disk-caching of output value:** a memoize or + make-like functionality for Python functions that works well for + arbitrary Python objects, including very large numpy arrays. Separate + persistence and flow-execution logic from domain logic or algorithmic + code by writing the operations as a set of steps with well-defined + inputs and outputs: Python functions. Joblib can save their + computation to disk and rerun it only if necessary:: + + >>> from joblib import Memory + >>> cachedir = 'your_cache_dir_goes_here' + >>> mem = Memory(cachedir) + >>> import numpy as np + >>> a = np.vander(np.arange(3)).astype(np.float) + >>> square = mem.cache(np.square) + >>> b = square(a) # doctest: +ELLIPSIS + ________________________________________________________________________________ + [Memory] Calling square... + square(array([[0., 0., 1.], + [1., 1., 1.], + [4., 2., 1.]])) + ___________________________________________________________square - 0...s, 0.0min + + >>> c = square(a) + >>> # The above call did not trigger an evaluation + +2) **Embarrassingly parallel helper:** to make it easy to write readable + parallel code and debug it quickly:: + + >>> from joblib import Parallel, delayed + >>> from math import sqrt + >>> Parallel(n_jobs=1)(delayed(sqrt)(i**2) for i in range(10)) + [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] + + +3) **Fast compressed Persistence**: a replacement for pickle to work + efficiently on Python objects containing large data ( + *joblib.dump* & *joblib.load* ). + +.. + >>> import shutil ; shutil.rmtree(cachedir) + +""" + +# PEP0440 compatible formatted version, see: +# https://www.python.org/dev/peps/pep-0440/ +# +# Generic release markers: +# X.Y +# X.Y.Z # For bugfix releases +# +# Admissible pre-release markers: +# X.YaN # Alpha release +# X.YbN # Beta release +# X.YrcN # Release Candidate +# X.Y # Final release +# +# Dev branch marker is: 'X.Y.dev' or 'X.Y.devN' where N is an integer. +# 'X.Y.dev0' is the canonical version of 'X.Y.dev' +# +__version__ = '0.14.0' + + +import os +from .memory import Memory, MemorizedResult, register_store_backend +from .logger import PrintTime +from .logger import Logger +from .hashing import hash +from .numpy_pickle import dump +from .numpy_pickle import load +from .compressor import register_compressor +from .parallel import Parallel +from .parallel import delayed +from .parallel import cpu_count +from .parallel import register_parallel_backend +from .parallel import parallel_backend +from .parallel import effective_n_jobs + +from .externals.loky import wrap_non_picklable_objects + + +__all__ = ['Memory', 'MemorizedResult', 'PrintTime', 'Logger', 'hash', 'dump', + 'load', 'Parallel', 'delayed', 'cpu_count', 'effective_n_jobs', + 'register_parallel_backend', 'parallel_backend', + 'register_store_backend', 'register_compressor', + 'wrap_non_picklable_objects'] + + +# Workaround issue discovered in intel-openmp 2019.5: +# https://github.com/ContinuumIO/anaconda-issues/issues/11294 +os.environ.setdefault("KMP_INIT_AT_FORK", "FALSE") diff --git a/my_env/Lib/site-packages/joblib/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..0b340cc54 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/_compat.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/_compat.cpython-37.pyc new file mode 100644 index 000000000..b536ff5b7 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/_compat.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/_dask.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/_dask.cpython-37.pyc new file mode 100644 index 000000000..d798a2b90 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/_dask.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/_memmapping_reducer.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/_memmapping_reducer.cpython-37.pyc new file mode 100644 index 000000000..3574e6b3d Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/_memmapping_reducer.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/_memory_helpers.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/_memory_helpers.cpython-37.pyc new file mode 100644 index 000000000..23ddee758 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/_memory_helpers.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/_multiprocessing_helpers.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/_multiprocessing_helpers.cpython-37.pyc new file mode 100644 index 000000000..43ab5b14b Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/_multiprocessing_helpers.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/_parallel_backends.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/_parallel_backends.cpython-37.pyc new file mode 100644 index 000000000..624f8feed Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/_parallel_backends.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/_store_backends.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/_store_backends.cpython-37.pyc new file mode 100644 index 000000000..3c79aa06c Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/_store_backends.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/backports.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/backports.cpython-37.pyc new file mode 100644 index 000000000..2d073c015 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/backports.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/compressor.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/compressor.cpython-37.pyc new file mode 100644 index 000000000..a324357b4 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/compressor.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/disk.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/disk.cpython-37.pyc new file mode 100644 index 000000000..2e3ef3996 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/disk.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/executor.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/executor.cpython-37.pyc new file mode 100644 index 000000000..3dd7d0d77 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/executor.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/format_stack.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/format_stack.cpython-37.pyc new file mode 100644 index 000000000..4a2d5db93 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/format_stack.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/func_inspect.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/func_inspect.cpython-37.pyc new file mode 100644 index 000000000..8e9d9911e Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/func_inspect.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/hashing.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/hashing.cpython-37.pyc new file mode 100644 index 000000000..cdbba6b63 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/hashing.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/logger.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/logger.cpython-37.pyc new file mode 100644 index 000000000..ac829223e Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/logger.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/memory.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/memory.cpython-37.pyc new file mode 100644 index 000000000..1c1c757a8 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/memory.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/my_exceptions.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/my_exceptions.cpython-37.pyc new file mode 100644 index 000000000..a89fe2ec5 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/my_exceptions.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/numpy_pickle.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/numpy_pickle.cpython-37.pyc new file mode 100644 index 000000000..239e00e6a Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/numpy_pickle.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/numpy_pickle_compat.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/numpy_pickle_compat.cpython-37.pyc new file mode 100644 index 000000000..77477bdff Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/numpy_pickle_compat.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/numpy_pickle_utils.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/numpy_pickle_utils.cpython-37.pyc new file mode 100644 index 000000000..609e2b5c8 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/numpy_pickle_utils.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/parallel.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/parallel.cpython-37.pyc new file mode 100644 index 000000000..29f57510c Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/parallel.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/pool.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/pool.cpython-37.pyc new file mode 100644 index 000000000..afed9ae81 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/pool.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/__pycache__/testing.cpython-37.pyc b/my_env/Lib/site-packages/joblib/__pycache__/testing.cpython-37.pyc new file mode 100644 index 000000000..8ab20d4aa Binary files /dev/null and b/my_env/Lib/site-packages/joblib/__pycache__/testing.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/_compat.py b/my_env/Lib/site-packages/joblib/_compat.py new file mode 100644 index 000000000..9d6129493 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/_compat.py @@ -0,0 +1,27 @@ +""" +Compatibility layer for Python 3/Python 2 single codebase +""" +import sys + +PY3_OR_LATER = sys.version_info[0] >= 3 +PY27 = sys.version_info[:2] == (2, 7) + +try: + _basestring = basestring + _bytes_or_unicode = (str, unicode) +except NameError: + _basestring = str + _bytes_or_unicode = (bytes, str) + + +def with_metaclass(meta, *bases): + """Create a base class with a metaclass.""" + return meta("NewBase", bases, {}) + + +# python2.7 error compatibility +if PY27: + class CompatFileExistsError(OSError): + pass +else: + CompatFileExistsError = FileExistsError diff --git a/my_env/Lib/site-packages/joblib/_dask.py b/my_env/Lib/site-packages/joblib/_dask.py new file mode 100644 index 000000000..fdf1aedc4 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/_dask.py @@ -0,0 +1,299 @@ +from __future__ import print_function, division, absolute_import + +import contextlib + +from uuid import uuid4 +import weakref + +from .parallel import AutoBatchingMixin, ParallelBackendBase, BatchedCalls +from .parallel import parallel_backend + +try: + import distributed +except ImportError: + distributed = None + +if distributed is not None: + from distributed.client import Client, _wait + from distributed.utils import funcname, itemgetter + from distributed import get_client, secede, rejoin + from distributed.worker import thread_state + from distributed.sizeof import sizeof + from tornado import gen + + +def is_weakrefable(obj): + try: + weakref.ref(obj) + return True + except TypeError: + return False + + +try: + TimeoutError = TimeoutError +except NameError: + # Python 2 backward compat + class TimeoutError(OSError): + pass + + +class _WeakKeyDictionary: + """A variant of weakref.WeakKeyDictionary for unhashable objects. + + This datastructure is used to store futures for broadcasted data objects + such as large numpy arrays or pandas dataframes that are not hashable and + therefore cannot be used as keys of traditional python dicts. + + Futhermore using a dict with id(array) as key is not safe because the + Python is likely to reuse id of recently collected arrays. + """ + + def __init__(self): + self._data = {} + + def __getitem__(self, obj): + ref, val = self._data[id(obj)] + if ref() is not obj: + # In case of a race condition with on_destroy. + raise KeyError(obj) + return val + + def __setitem__(self, obj, value): + key = id(obj) + try: + ref, _ = self._data[key] + if ref() is not obj: + # In case of race condition with on_destroy. + raise KeyError(obj) + except KeyError: + # Insert the new entry in the mapping along with a weakref + # callback to automatically delete the entry from the mapping + # as soon as the object used as key is garbage collected. + def on_destroy(_): + del self._data[key] + ref = weakref.ref(obj, on_destroy) + self._data[key] = ref, value + + def __len__(self): + return len(self._data) + + def clear(self): + self._data.clear() + + +def _funcname(x): + try: + if isinstance(x, BatchedCalls): + x = x.items[0][0] + except Exception: + pass + return funcname(x) + + +class Batch(object): + def __init__(self, tasks): + self.tasks = tasks + + def __call__(self, *data): + results = [] + with parallel_backend('dask'): + for func, args, kwargs in self.tasks: + args = [a(data) if isinstance(a, itemgetter) else a + for a in args] + kwargs = {k: v(data) if isinstance(v, itemgetter) else v + for (k, v) in kwargs.items()} + results.append(func(*args, **kwargs)) + return results + + def __reduce__(self): + return Batch, (self.tasks,) + + +def _joblib_probe_task(): + # Noop used by the joblib connector to probe when workers are ready. + pass + + +class DaskDistributedBackend(ParallelBackendBase, AutoBatchingMixin): + MIN_IDEAL_BATCH_DURATION = 0.2 + MAX_IDEAL_BATCH_DURATION = 1.0 + + def __init__(self, scheduler_host=None, scatter=None, + client=None, loop=None, wait_for_workers_timeout=10, + **submit_kwargs): + if distributed is None: + msg = ("You are trying to use 'dask' as a joblib parallel backend " + "but dask is not installed. Please install dask " + "to fix this error.") + raise ValueError(msg) + + if client is None: + if scheduler_host: + client = Client(scheduler_host, loop=loop, + set_as_default=False) + else: + try: + client = get_client() + except ValueError: + msg = ("To use Joblib with Dask first create a Dask Client" + "\n\n" + " from dask.distributed import Client\n" + " client = Client()\n" + "or\n" + " client = Client('scheduler-address:8786')") + raise ValueError(msg) + + self.client = client + + if scatter is not None and not isinstance(scatter, (list, tuple)): + raise TypeError("scatter must be a list/tuple, got " + "`%s`" % type(scatter).__name__) + + if scatter is not None and len(scatter) > 0: + # Keep a reference to the scattered data to keep the ids the same + self._scatter = list(scatter) + scattered = self.client.scatter(scatter, broadcast=True) + self.data_futures = {id(x): f for x, f in zip(scatter, scattered)} + else: + self._scatter = [] + self.data_futures = {} + self.task_futures = set() + self.wait_for_workers_timeout = wait_for_workers_timeout + self.submit_kwargs = submit_kwargs + + def __reduce__(self): + return (DaskDistributedBackend, ()) + + def get_nested_backend(self): + return DaskDistributedBackend(client=self.client), -1 + + def configure(self, n_jobs=1, parallel=None, **backend_args): + return self.effective_n_jobs(n_jobs) + + def start_call(self): + self.call_data_futures = _WeakKeyDictionary() + + def stop_call(self): + # The explicit call to clear is required to break a cycling reference + # to the futures. + self.call_data_futures.clear() + + def effective_n_jobs(self, n_jobs): + effective_n_jobs = sum(self.client.ncores().values()) + if effective_n_jobs != 0 or not self.wait_for_workers_timeout: + return effective_n_jobs + + # If there is no worker, schedule a probe task to wait for the workers + # to come up and be available. If the dask cluster is in adaptive mode + # task might cause the cluster to provision some workers. + try: + self.client.submit(_joblib_probe_task).result( + timeout=self.wait_for_workers_timeout) + except gen.TimeoutError: + error_msg = ( + "DaskDistributedBackend has no worker after {} seconds. " + "Make sure that workers are started and can properly connect " + "to the scheduler and increase the joblib/dask connection " + "timeout with:\n\n" + "parallel_backend('dask', wait_for_workers_timeout={})" + ).format(self.wait_for_workers_timeout, + max(10, 2 * self.wait_for_workers_timeout)) + raise TimeoutError(error_msg) + return sum(self.client.ncores().values()) + + def _to_func_args(self, func): + collected_futures = [] + itemgetters = dict() + + # Futures that are dynamically generated during a single call to + # Parallel.__call__. + call_data_futures = getattr(self, 'call_data_futures', None) + + def maybe_to_futures(args): + for arg in args: + arg_id = id(arg) + if arg_id in itemgetters: + yield itemgetters[arg_id] + continue + + f = self.data_futures.get(arg_id, None) + if f is None and call_data_futures is not None: + try: + f = call_data_futures[arg] + except KeyError: + if is_weakrefable(arg) and sizeof(arg) > 1e3: + # Automatically scatter large objects to some of + # the workers to avoid duplicated data transfers. + # Rely on automated inter-worker data stealing if + # more workers need to reuse this data + # concurrently. + [f] = self.client.scatter([arg]) + call_data_futures[arg] = f + + if f is not None: + getter = itemgetter(len(collected_futures)) + collected_futures.append(f) + itemgetters[arg_id] = getter + arg = getter + yield arg + + tasks = [] + for f, args, kwargs in func.items: + args = list(maybe_to_futures(args)) + kwargs = dict(zip(kwargs.keys(), + maybe_to_futures(kwargs.values()))) + tasks.append((f, args, kwargs)) + + if not collected_futures: + return func, () + return (Batch(tasks), collected_futures) + + def apply_async(self, func, callback=None): + key = '%s-batch-%s' % (_funcname(func), uuid4().hex) + func, args = self._to_func_args(func) + + future = self.client.submit(func, *args, key=key, **self.submit_kwargs) + self.task_futures.add(future) + + def callback_wrapper(future): + result = future.result() + self.task_futures.remove(future) + if callback is not None: + callback(result) + + future.add_done_callback(callback_wrapper) + + ref = weakref.ref(future) # avoid reference cycle + + def get(): + return ref().result() + + future.get = get # monkey patch to achieve AsyncResult API + return future + + def abort_everything(self, ensure_ready=True): + """ Tell the client to cancel any task submitted via this instance + + joblib.Parallel will never access those results + """ + self.client.cancel(self.task_futures) + self.task_futures.clear() + + @contextlib.contextmanager + def retrieval_context(self): + """Override ParallelBackendBase.retrieval_context to avoid deadlocks. + + This removes thread from the worker's thread pool (using 'secede'). + Seceding avoids deadlock in nested parallelism settings. + """ + # See 'joblib.Parallel.__call__' and 'joblib.Parallel.retrieve' for how + # this is used. + if hasattr(thread_state, 'execution_state'): + # we are in a worker. Secede to avoid deadlock. + secede() + + yield + + if hasattr(thread_state, 'execution_state'): + rejoin() diff --git a/my_env/Lib/site-packages/joblib/_memmapping_reducer.py b/my_env/Lib/site-packages/joblib/_memmapping_reducer.py new file mode 100644 index 000000000..a200ea066 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/_memmapping_reducer.py @@ -0,0 +1,434 @@ +""" +Reducer using memory mapping for numpy arrays +""" +# Author: Thomas Moreau +# Copyright: 2017, Thomas Moreau +# License: BSD 3 clause + +from mmap import mmap +import errno +import os +import stat +import threading +import atexit +import tempfile +import warnings +import weakref +from uuid import uuid4 + +try: + WindowsError +except NameError: + WindowsError = type(None) + +from pickle import whichmodule +try: + # Python 2 compat + from cPickle import loads + from cPickle import dumps +except ImportError: + from pickle import loads + from pickle import dumps + +from pickle import HIGHEST_PROTOCOL, PicklingError + +try: + import numpy as np + from numpy.lib.stride_tricks import as_strided +except ImportError: + np = None + +from .numpy_pickle import load +from .numpy_pickle import dump +from .backports import make_memmap +from .disk import delete_folder + +# Some system have a ramdisk mounted by default, we can use it instead of /tmp +# as the default folder to dump big arrays to share with subprocesses. +SYSTEM_SHARED_MEM_FS = '/dev/shm' + +# Minimal number of bytes available on SYSTEM_SHARED_MEM_FS to consider using +# it as the default folder to dump big arrays to share with subprocesses. +SYSTEM_SHARED_MEM_FS_MIN_SIZE = int(2e9) + +# Folder and file permissions to chmod temporary files generated by the +# memmapping pool. Only the owner of the Python process can access the +# temporary files and folder. +FOLDER_PERMISSIONS = stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR +FILE_PERMISSIONS = stat.S_IRUSR | stat.S_IWUSR + + +class _WeakArrayKeyMap: + """A variant of weakref.WeakKeyDictionary for unhashable numpy arrays. + + This datastructure will be used with numpy arrays as obj keys, therefore we + do not use the __get__ / __set__ methods to avoid any conflict with the + numpy fancy indexing syntax. + """ + + def __init__(self): + self._data = {} + + def get(self, obj): + ref, val = self._data[id(obj)] + if ref() is not obj: + # In case of race condition with on_destroy: could never be + # triggered by the joblib tests with CPython. + raise KeyError(obj) + return val + + def set(self, obj, value): + key = id(obj) + try: + ref, _ = self._data[key] + if ref() is not obj: + # In case of race condition with on_destroy: could never be + # triggered by the joblib tests with CPython. + raise KeyError(obj) + except KeyError: + # Insert the new entry in the mapping along with a weakref + # callback to automatically delete the entry from the mapping + # as soon as the object used as key is garbage collected. + def on_destroy(_): + del self._data[key] + ref = weakref.ref(obj, on_destroy) + self._data[key] = ref, value + + def __getstate__(self): + raise PicklingError("_WeakArrayKeyMap is not pickleable") + + +############################################################################### +# Support for efficient transient pickling of numpy data structures + + +def _get_backing_memmap(a): + """Recursively look up the original np.memmap instance base if any.""" + b = getattr(a, 'base', None) + if b is None: + # TODO: check scipy sparse datastructure if scipy is installed + # a nor its descendants do not have a memmap base + return None + + elif isinstance(b, mmap): + # a is already a real memmap instance. + return a + + else: + # Recursive exploration of the base ancestry + return _get_backing_memmap(b) + + +def _get_temp_dir(pool_folder_name, temp_folder=None): + """Get the full path to a subfolder inside the temporary folder. + + Parameters + ---------- + pool_folder_name : str + Sub-folder name used for the serialization of a pool instance. + + temp_folder: str, optional + Folder to be used by the pool for memmapping large arrays + for sharing memory with worker processes. If None, this will try in + order: + + - a folder pointed by the JOBLIB_TEMP_FOLDER environment + variable, + - /dev/shm if the folder exists and is writable: this is a + RAMdisk filesystem available by default on modern Linux + distributions, + - the default system temporary folder that can be + overridden with TMP, TMPDIR or TEMP environment + variables, typically /tmp under Unix operating systems. + + Returns + ------- + pool_folder : str + full path to the temporary folder + use_shared_mem : bool + whether the temporary folder is written to the system shared memory + folder or some other temporary folder. + """ + use_shared_mem = False + if temp_folder is None: + temp_folder = os.environ.get('JOBLIB_TEMP_FOLDER', None) + if temp_folder is None: + if os.path.exists(SYSTEM_SHARED_MEM_FS): + try: + shm_stats = os.statvfs(SYSTEM_SHARED_MEM_FS) + available_nbytes = shm_stats.f_bsize * shm_stats.f_bavail + if available_nbytes > SYSTEM_SHARED_MEM_FS_MIN_SIZE: + # Try to see if we have write access to the shared mem + # folder only if it is reasonably large (that is 2GB or + # more). + temp_folder = SYSTEM_SHARED_MEM_FS + pool_folder = os.path.join(temp_folder, pool_folder_name) + if not os.path.exists(pool_folder): + os.makedirs(pool_folder) + use_shared_mem = True + except (IOError, OSError): + # Missing rights in the /dev/shm partition, fallback to regular + # temp folder. + temp_folder = None + if temp_folder is None: + # Fallback to the default tmp folder, typically /tmp + temp_folder = tempfile.gettempdir() + temp_folder = os.path.abspath(os.path.expanduser(temp_folder)) + pool_folder = os.path.join(temp_folder, pool_folder_name) + return pool_folder, use_shared_mem + + +def has_shareable_memory(a): + """Return True if a is backed by some mmap buffer directly or not.""" + return _get_backing_memmap(a) is not None + + +def _strided_from_memmap(filename, dtype, mode, offset, order, shape, strides, + total_buffer_len): + """Reconstruct an array view on a memory mapped file.""" + if mode == 'w+': + # Do not zero the original data when unpickling + mode = 'r+' + + if strides is None: + # Simple, contiguous memmap + return make_memmap(filename, dtype=dtype, shape=shape, mode=mode, + offset=offset, order=order) + else: + # For non-contiguous data, memmap the total enclosing buffer and then + # extract the non-contiguous view with the stride-tricks API + base = make_memmap(filename, dtype=dtype, shape=total_buffer_len, + mode=mode, offset=offset, order=order) + return as_strided(base, shape=shape, strides=strides) + + +def _reduce_memmap_backed(a, m): + """Pickling reduction for memmap backed arrays. + + a is expected to be an instance of np.ndarray (or np.memmap) + m is expected to be an instance of np.memmap on the top of the ``base`` + attribute ancestry of a. ``m.base`` should be the real python mmap object. + """ + # offset that comes from the striding differences between a and m + a_start, a_end = np.byte_bounds(a) + m_start = np.byte_bounds(m)[0] + offset = a_start - m_start + + # offset from the backing memmap + offset += m.offset + + if m.flags['F_CONTIGUOUS']: + order = 'F' + else: + # The backing memmap buffer is necessarily contiguous hence C if not + # Fortran + order = 'C' + + if a.flags['F_CONTIGUOUS'] or a.flags['C_CONTIGUOUS']: + # If the array is a contiguous view, no need to pass the strides + strides = None + total_buffer_len = None + else: + # Compute the total number of items to map from which the strided + # view will be extracted. + strides = a.strides + total_buffer_len = (a_end - a_start) // a.itemsize + return (_strided_from_memmap, + (m.filename, a.dtype, m.mode, offset, order, a.shape, strides, + total_buffer_len)) + + +def reduce_memmap(a): + """Pickle the descriptors of a memmap instance to reopen on same file.""" + m = _get_backing_memmap(a) + if m is not None: + # m is a real mmap backed memmap instance, reduce a preserving striding + # information + return _reduce_memmap_backed(a, m) + else: + # This memmap instance is actually backed by a regular in-memory + # buffer: this can happen when using binary operators on numpy.memmap + # instances + return (loads, (dumps(np.asarray(a), protocol=HIGHEST_PROTOCOL),)) + + +class ArrayMemmapReducer(object): + """Reducer callable to dump large arrays to memmap files. + + Parameters + ---------- + max_nbytes: int + Threshold to trigger memmapping of large arrays to files created + a folder. + temp_folder: str + Path of a folder where files for backing memmapped arrays are created. + mmap_mode: 'r', 'r+' or 'c' + Mode for the created memmap datastructure. See the documentation of + numpy.memmap for more details. Note: 'w+' is coerced to 'r+' + automatically to avoid zeroing the data on unpickling. + verbose: int, optional, 0 by default + If verbose > 0, memmap creations are logged. + If verbose > 1, both memmap creations, reuse and array pickling are + logged. + prewarm: bool, optional, False by default. + Force a read on newly memmapped array to make sure that OS pre-cache it + memory. This can be useful to avoid concurrent disk access when the + same data array is passed to different worker processes. + """ + + def __init__(self, max_nbytes, temp_folder, mmap_mode, verbose=0, + prewarm=True): + self._max_nbytes = max_nbytes + self._temp_folder = temp_folder + self._mmap_mode = mmap_mode + self.verbose = int(verbose) + self._prewarm = prewarm + self._memmaped_arrays = _WeakArrayKeyMap() + + def __reduce__(self): + # The ArrayMemmapReducer is passed to the children processes: it needs + # to be pickled but the _WeakArrayKeyMap need to be skipped as it's + # only guaranteed to be consistent with the parent process memory + # garbage collection. + args = (self._max_nbytes, self._temp_folder, self._mmap_mode) + kwargs = { + 'verbose': self.verbose, + 'prewarm': self._prewarm, + } + return ArrayMemmapReducer, args, kwargs + + def __call__(self, a): + m = _get_backing_memmap(a) + if m is not None and isinstance(m, np.memmap): + # a is already backed by a memmap file, let's reuse it directly + return _reduce_memmap_backed(a, m) + + if (not a.dtype.hasobject and self._max_nbytes is not None and + a.nbytes > self._max_nbytes): + # check that the folder exists (lazily create the pool temp folder + # if required) + try: + os.makedirs(self._temp_folder) + os.chmod(self._temp_folder, FOLDER_PERMISSIONS) + except OSError as e: + if e.errno != errno.EEXIST: + raise e + + try: + basename = self._memmaped_arrays.get(a) + except KeyError: + # Generate a new unique random filename. The process and thread + # ids are only useful for debugging purpose and to make it + # easier to cleanup orphaned files in case of hard process + # kill (e.g. by "kill -9" or segfault). + basename = "{}-{}-{}.pkl".format( + os.getpid(), id(threading.current_thread()), uuid4().hex) + self._memmaped_arrays.set(a, basename) + filename = os.path.join(self._temp_folder, basename) + + # In case the same array with the same content is passed several + # times to the pool subprocess children, serialize it only once + + # XXX: implement an explicit reference counting scheme to make it + # possible to delete temporary files as soon as the workers are + # done processing this data. + if not os.path.exists(filename): + if self.verbose > 0: + print("Memmapping (shape={}, dtype={}) to new file {}" + .format(a.shape, a.dtype, filename)) + for dumped_filename in dump(a, filename): + os.chmod(dumped_filename, FILE_PERMISSIONS) + + if self._prewarm: + # Warm up the data by accessing it. This operation ensures + # that the disk access required to create the memmapping + # file are performed in the reducing process and avoids + # concurrent memmap creation in multiple children + # processes. + load(filename, mmap_mode=self._mmap_mode).max() + elif self.verbose > 1: + print("Memmapping (shape={}, dtype={}) to old file {}" + .format(a.shape, a.dtype, filename)) + + # The worker process will use joblib.load to memmap the data + return (load, (filename, self._mmap_mode)) + else: + # do not convert a into memmap, let pickler do its usual copy with + # the default system pickler + if self.verbose > 1: + print("Pickling array (shape={}, dtype={})." + .format(a.shape, a.dtype)) + return (loads, (dumps(a, protocol=HIGHEST_PROTOCOL),)) + + +def get_memmapping_reducers( + pool_id, forward_reducers=None, backward_reducers=None, + temp_folder=None, max_nbytes=1e6, mmap_mode='r', verbose=0, + prewarm=False, **kwargs): + """Construct a pair of memmapping reducer linked to a tmpdir. + + This function manage the creation and the clean up of the temporary folders + underlying the memory maps and should be use to get the reducers necessary + to construct joblib pool or executor. + """ + if forward_reducers is None: + forward_reducers = dict() + if backward_reducers is None: + backward_reducers = dict() + + # Prepare a sub-folder name for the serialization of this particular + # pool instance (do not create in advance to spare FS write access if + # no array is to be dumped): + pool_folder_name = "joblib_memmapping_folder_{}_{}".format( + os.getpid(), pool_id) + pool_folder, use_shared_mem = _get_temp_dir(pool_folder_name, + temp_folder) + + # Register the garbage collector at program exit in case caller forgets + # to call terminate explicitly: note we do not pass any reference to + # self to ensure that this callback won't prevent garbage collection of + # the pool instance and related file handler resources such as POSIX + # semaphores and pipes + pool_module_name = whichmodule(delete_folder, 'delete_folder') + + def _cleanup(): + # In some cases the Python runtime seems to set delete_folder to + # None just before exiting when accessing the delete_folder + # function from the closure namespace. So instead we reimport + # the delete_folder function explicitly. + # https://github.com/joblib/joblib/issues/328 + # We cannot just use from 'joblib.pool import delete_folder' + # because joblib should only use relative imports to allow + # easy vendoring. + delete_folder = __import__( + pool_module_name, fromlist=['delete_folder']).delete_folder + try: + delete_folder(pool_folder) + except WindowsError: + warnings.warn("Failed to clean temporary folder: {}" + .format(pool_folder)) + + atexit.register(_cleanup) + + if np is not None: + # Register smart numpy.ndarray reducers that detects memmap backed + # arrays and that is also able to dump to memmap large in-memory + # arrays over the max_nbytes threshold + if prewarm == "auto": + prewarm = not use_shared_mem + forward_reduce_ndarray = ArrayMemmapReducer( + max_nbytes, pool_folder, mmap_mode, verbose, + prewarm=prewarm) + forward_reducers[np.ndarray] = forward_reduce_ndarray + forward_reducers[np.memmap] = reduce_memmap + + # Communication from child process to the parent process always + # pickles in-memory numpy.ndarray without dumping them as memmap + # to avoid confusing the caller and make it tricky to collect the + # temporary folder + backward_reduce_ndarray = ArrayMemmapReducer( + None, pool_folder, mmap_mode, verbose) + backward_reducers[np.ndarray] = backward_reduce_ndarray + backward_reducers[np.memmap] = reduce_memmap + + return forward_reducers, backward_reducers, pool_folder diff --git a/my_env/Lib/site-packages/joblib/_memory_helpers.py b/my_env/Lib/site-packages/joblib/_memory_helpers.py new file mode 100644 index 000000000..56a8b93f0 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/_memory_helpers.py @@ -0,0 +1,105 @@ +try: + # Available in Python 3 + from tokenize import open as open_py_source + +except ImportError: + # Copied from python3 tokenize + from codecs import lookup, BOM_UTF8 + import re + from io import TextIOWrapper, open + cookie_re = re.compile(r"coding[:=]\s*([-\w.]+)") + + def _get_normal_name(orig_enc): + """Imitates get_normal_name in tokenizer.c.""" + # Only care about the first 12 characters. + enc = orig_enc[:12].lower().replace("_", "-") + if enc == "utf-8" or enc.startswith("utf-8-"): + return "utf-8" + if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ + enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): + return "iso-8859-1" + return orig_enc + + def _detect_encoding(readline): + """ + The detect_encoding() function is used to detect the encoding that + should be used to decode a Python source file. It requires one + argment, readline, in the same way as the tokenize() generator. + + It will call readline a maximum of twice, and return the encoding used + (as a string) and a list of any lines (left as bytes) it has read in. + + It detects the encoding from the presence of a utf-8 bom or an encoding + cookie as specified in pep-0263. If both a bom and a cookie are + present, but disagree, a SyntaxError will be raised. If the encoding + cookie is an invalid charset, raise a SyntaxError. Note that if a + utf-8 bom is found, 'utf-8-sig' is returned. + + If no encoding is specified, then the default of 'utf-8' will be + returned. + """ + bom_found = False + encoding = None + default = 'utf-8' + + def read_or_stop(): + try: + return readline() + except StopIteration: + return b'' + + def find_cookie(line): + try: + line_string = line.decode('ascii') + except UnicodeDecodeError: + return None + + matches = cookie_re.findall(line_string) + if not matches: + return None + encoding = _get_normal_name(matches[0]) + try: + codec = lookup(encoding) + except LookupError: + # This behaviour mimics the Python interpreter + raise SyntaxError("unknown encoding: " + encoding) + + if bom_found: + if codec.name != 'utf-8': + # This behaviour mimics the Python interpreter + raise SyntaxError('encoding problem: utf-8') + encoding += '-sig' + return encoding + + first = read_or_stop() + if first.startswith(BOM_UTF8): + bom_found = True + first = first[3:] + default = 'utf-8-sig' + if not first: + return default, [] + + encoding = find_cookie(first) + if encoding: + return encoding, [first] + + second = read_or_stop() + if not second: + return default, [first] + + encoding = find_cookie(second) + if encoding: + return encoding, [first, second] + + return default, [first, second] + + def open_py_source(filename): + """Open a file in read only mode using the encoding detected by + detect_encoding(). + """ + buffer = open(filename, 'rb') + encoding, lines = _detect_encoding(buffer.readline) + buffer.seek(0) + text = TextIOWrapper(buffer, encoding, line_buffering=True) + text.mode = 'r' + return text diff --git a/my_env/Lib/site-packages/joblib/_multiprocessing_helpers.py b/my_env/Lib/site-packages/joblib/_multiprocessing_helpers.py new file mode 100644 index 000000000..e901c84fd --- /dev/null +++ b/my_env/Lib/site-packages/joblib/_multiprocessing_helpers.py @@ -0,0 +1,64 @@ +"""Helper module to factorize the conditional multiprocessing import logic + +We use a distinct module to simplify import statements and avoid introducing +circular dependencies (for instance for the assert_spawning name). +""" +import os +import sys +import warnings + +from ._compat import CompatFileExistsError + + +# Obtain possible configuration from the environment, assuming 1 (on) +# by default, upon 0 set to None. Should instructively fail if some non +# 0/1 value is set. +mp = int(os.environ.get('JOBLIB_MULTIPROCESSING', 1)) or None +if mp: + try: + import multiprocessing as mp + except ImportError: + mp = None + +# 2nd stage: validate that locking is available on the system and +# issue a warning if not +if mp is not None: + try: + # try to create a named semaphore using SemLock to make sure they are + # available on this platform. We use the low level object + # _multiprocessing.SemLock to avoid spawning a resource tracker on + # Unix system or changing the default backend. + import tempfile + from _multiprocessing import SemLock + if sys.version_info < (3,): + _SemLock = SemLock + + def SemLock(kind, value, maxvalue, name, unlink): + return _SemLock(kind, value, maxvalue) + + _rand = tempfile._RandomNameSequence() + for i in range(100): + try: + name = '/joblib-{}-{}' .format( + os.getpid(), next(_rand)) + _sem = SemLock(0, 0, 1, name=name, unlink=True) + del _sem # cleanup + break + except CompatFileExistsError: # pragma: no cover + if i >= 99: + raise CompatFileExistsError( + 'cannot find name for semaphore') + except (CompatFileExistsError, AttributeError, ImportError, OSError) as e: + mp = None + warnings.warn('%s. joblib will operate in serial mode' % (e,)) + + +# 3rd stage: backward compat for the assert_spawning helper +if mp is not None: + try: + # Python 3.4+ + from multiprocessing.context import assert_spawning + except ImportError: + from multiprocessing.forking import assert_spawning +else: + assert_spawning = None diff --git a/my_env/Lib/site-packages/joblib/_parallel_backends.py b/my_env/Lib/site-packages/joblib/_parallel_backends.py new file mode 100644 index 000000000..de450aa3f --- /dev/null +++ b/my_env/Lib/site-packages/joblib/_parallel_backends.py @@ -0,0 +1,623 @@ +""" +Backends for embarrassingly parallel code. +""" + +import gc +import os +import sys +import warnings +import threading +import functools +import contextlib +from abc import ABCMeta, abstractmethod + +from .format_stack import format_exc +from .my_exceptions import WorkerInterrupt, TransportableException +from ._multiprocessing_helpers import mp +from ._compat import with_metaclass, PY27 +if mp is not None: + from .disk import delete_folder + from .pool import MemmappingPool + from multiprocessing.pool import ThreadPool + from .executor import get_memmapping_executor + + # Compat between concurrent.futures and multiprocessing TimeoutError + from multiprocessing import TimeoutError + from .externals.loky._base import TimeoutError as LokyTimeoutError + from .externals.loky import process_executor, cpu_count + + +class ParallelBackendBase(with_metaclass(ABCMeta)): + """Helper abc which defines all methods a ParallelBackend must implement""" + + supports_timeout = False + supports_inner_max_num_threads = False + nesting_level = None + + def __init__(self, nesting_level=None, inner_max_num_threads=None): + self.nesting_level = nesting_level + self.inner_max_num_threads = inner_max_num_threads + + MAX_NUM_THREADS_VARS = [ + 'OMP_NUM_THREADS', 'OPENBLAS_NUM_THREADS', 'MKL_NUM_THREADS', + 'BLIS_NUM_THREADS', 'VECLIB_MAXIMUM_THREADS', 'NUMEXPR_NUM_THREADS' + ] + + @abstractmethod + def effective_n_jobs(self, n_jobs): + """Determine the number of jobs that can actually run in parallel + + n_jobs is the number of workers requested by the callers. Passing + n_jobs=-1 means requesting all available workers for instance matching + the number of CPU cores on the worker host(s). + + This method should return a guesstimate of the number of workers that + can actually perform work concurrently. The primary use case is to make + it possible for the caller to know in how many chunks to slice the + work. + + In general working on larger data chunks is more efficient (less + scheduling overhead and better use of CPU cache prefetching heuristics) + as long as all the workers have enough work to do. + """ + + @abstractmethod + def apply_async(self, func, callback=None): + """Schedule a func to be run""" + + def configure(self, n_jobs=1, parallel=None, prefer=None, require=None, + **backend_args): + """Reconfigure the backend and return the number of workers. + + This makes it possible to reuse an existing backend instance for + successive independent calls to Parallel with different parameters. + """ + self.parallel = parallel + return self.effective_n_jobs(n_jobs) + + def start_call(self): + """Call-back method called at the beginning of a Parallel call""" + + def stop_call(self): + """Call-back method called at the end of a Parallel call""" + + def terminate(self): + """Shutdown the workers and free the shared memory.""" + + def compute_batch_size(self): + """Determine the optimal batch size""" + return 1 + + def batch_completed(self, batch_size, duration): + """Callback indicate how long it took to run a batch""" + + def get_exceptions(self): + """List of exception types to be captured.""" + return [] + + def abort_everything(self, ensure_ready=True): + """Abort any running tasks + + This is called when an exception has been raised when executing a tasks + and all the remaining tasks will be ignored and can therefore be + aborted to spare computation resources. + + If ensure_ready is True, the backend should be left in an operating + state as future tasks might be re-submitted via that same backend + instance. + + If ensure_ready is False, the implementer of this method can decide + to leave the backend in a closed / terminated state as no new task + are expected to be submitted to this backend. + + Setting ensure_ready to False is an optimization that can be leveraged + when aborting tasks via killing processes from a local process pool + managed by the backend it-self: if we expect no new tasks, there is no + point in re-creating new workers. + """ + # Does nothing by default: to be overridden in subclasses when + # canceling tasks is possible. + pass + + def get_nested_backend(self): + """Backend instance to be used by nested Parallel calls. + + By default a thread-based backend is used for the first level of + nesting. Beyond, switch to sequential backend to avoid spawning too + many threads on the host. + """ + nesting_level = getattr(self, 'nesting_level', 0) + 1 + if nesting_level > 1: + return SequentialBackend(nesting_level=nesting_level), None + else: + return ThreadingBackend(nesting_level=nesting_level), None + + @contextlib.contextmanager + def retrieval_context(self): + """Context manager to manage an execution context. + + Calls to Parallel.retrieve will be made inside this context. + + By default, this does nothing. It may be useful for subclasses to + handle nested parallelism. In particular, it may be required to avoid + deadlocks if a backend manages a fixed number of workers, when those + workers may be asked to do nested Parallel calls. Without + 'retrieval_context' this could lead to deadlock, as all the workers + managed by the backend may be "busy" waiting for the nested parallel + calls to finish, but the backend has no free workers to execute those + tasks. + """ + yield + + def _get_max_num_threads_vars(self, n_jobs): + """Return environment variables limiting threadpools in external libs. + + This function return a dict containing environment variables to pass + when creating a pool of process. These environment variables limit the + number of threads to `n_threads` for OpenMP, MKL, Accelerated and + OpenBLAS libraries in the child processes. + """ + explicit_n_threads = self.inner_max_num_threads + default_n_threads = str(max(cpu_count() // n_jobs, 1)) + + # Set the inner environment variables to self.inner_max_num_threads if + # it is given. Else, default to cpu_count // n_jobs unless the variable + # is already present in the parent process environment. + env = {} + for var in self.MAX_NUM_THREADS_VARS: + if explicit_n_threads is None: + var_value = os.environ.get(var, None) + if var_value is None: + var_value = default_n_threads + else: + var_value = str(explicit_n_threads) + + env[var] = var_value + return env + + @staticmethod + def in_main_thread(): + return isinstance(threading.current_thread(), threading._MainThread) + + +class SequentialBackend(ParallelBackendBase): + """A ParallelBackend which will execute all batches sequentially. + + Does not use/create any threading objects, and hence has minimal + overhead. Used when n_jobs == 1. + """ + + uses_threads = True + supports_sharedmem = True + + def effective_n_jobs(self, n_jobs): + """Determine the number of jobs which are going to run in parallel""" + if n_jobs == 0: + raise ValueError('n_jobs == 0 in Parallel has no meaning') + return 1 + + def apply_async(self, func, callback=None): + """Schedule a func to be run""" + result = ImmediateResult(func) + if callback: + callback(result) + return result + + def get_nested_backend(self): + # import is not top level to avoid cyclic import errors. + from .parallel import get_active_backend + + # SequentialBackend should neither change the nesting level, the + # default backend or the number of jobs. Just return the current one. + return get_active_backend() + + +class PoolManagerMixin(object): + """A helper class for managing pool of workers.""" + + _pool = None + + def effective_n_jobs(self, n_jobs): + """Determine the number of jobs which are going to run in parallel""" + if n_jobs == 0: + raise ValueError('n_jobs == 0 in Parallel has no meaning') + elif mp is None or n_jobs is None: + # multiprocessing is not available or disabled, fallback + # to sequential mode + return 1 + elif n_jobs < 0: + n_jobs = max(cpu_count() + 1 + n_jobs, 1) + return n_jobs + + def terminate(self): + """Shutdown the process or thread pool""" + if self._pool is not None: + self._pool.close() + self._pool.terminate() # terminate does a join() + self._pool = None + + def _get_pool(self): + """Used by apply_async to make it possible to implement lazy init""" + return self._pool + + def apply_async(self, func, callback=None): + """Schedule a func to be run""" + return self._get_pool().apply_async( + SafeFunction(func), callback=callback) + + def abort_everything(self, ensure_ready=True): + """Shutdown the pool and restart a new one with the same parameters""" + self.terminate() + if ensure_ready: + self.configure(n_jobs=self.parallel.n_jobs, parallel=self.parallel, + **self.parallel._backend_args) + + +class AutoBatchingMixin(object): + """A helper class for automagically batching jobs.""" + + # In seconds, should be big enough to hide multiprocessing dispatching + # overhead. + # This settings was found by running benchmarks/bench_auto_batching.py + # with various parameters on various platforms. + MIN_IDEAL_BATCH_DURATION = .2 + + # Should not be too high to avoid stragglers: long jobs running alone + # on a single worker while other workers have no work to process any more. + MAX_IDEAL_BATCH_DURATION = 2 + + # Batching counters default values + _DEFAULT_EFFECTIVE_BATCH_SIZE = 1 + _DEFAULT_SMOOTHED_BATCH_DURATION = 0.0 + + def __init__(self, **kwargs): + self._effective_batch_size = self._DEFAULT_EFFECTIVE_BATCH_SIZE + self._smoothed_batch_duration = self._DEFAULT_SMOOTHED_BATCH_DURATION + super(AutoBatchingMixin, self).__init__(**kwargs) + + def compute_batch_size(self): + """Determine the optimal batch size""" + old_batch_size = self._effective_batch_size + batch_duration = self._smoothed_batch_duration + if (batch_duration > 0 and + batch_duration < self.MIN_IDEAL_BATCH_DURATION): + # The current batch size is too small: the duration of the + # processing of a batch of task is not large enough to hide + # the scheduling overhead. + ideal_batch_size = int(old_batch_size * + self.MIN_IDEAL_BATCH_DURATION / + batch_duration) + # Multiply by two to limit oscilations between min and max. + ideal_batch_size *= 2 + + # dont increase the batch size too fast to limit huge batch sizes + # potentially leading to starving worker + batch_size = min(2 * old_batch_size, ideal_batch_size) + + batch_size = max(batch_size, 1) + + self._effective_batch_size = batch_size + if self.parallel.verbose >= 10: + self.parallel._print( + "Batch computation too fast (%.4fs.) " + "Setting batch_size=%d.", (batch_duration, batch_size)) + elif (batch_duration > self.MAX_IDEAL_BATCH_DURATION and + old_batch_size >= 2): + # The current batch size is too big. If we schedule overly long + # running batches some CPUs might wait with nothing left to do + # while a couple of CPUs a left processing a few long running + # batches. Better reduce the batch size a bit to limit the + # likelihood of scheduling such stragglers. + + # decrease the batch size quickly to limit potential starving + ideal_batch_size = int( + old_batch_size * self.MIN_IDEAL_BATCH_DURATION / batch_duration + ) + # Multiply by two to limit oscilations between min and max. + batch_size = max(2 * ideal_batch_size, 1) + self._effective_batch_size = batch_size + if self.parallel.verbose >= 10: + self.parallel._print( + "Batch computation too slow (%.4fs.) " + "Setting batch_size=%d.", (batch_duration, batch_size)) + else: + # No batch size adjustment + batch_size = old_batch_size + + if batch_size != old_batch_size: + # Reset estimation of the smoothed mean batch duration: this + # estimate is updated in the multiprocessing apply_async + # CallBack as long as the batch_size is constant. Therefore + # we need to reset the estimate whenever we re-tune the batch + # size. + self._smoothed_batch_duration = \ + self._DEFAULT_SMOOTHED_BATCH_DURATION + + return batch_size + + def batch_completed(self, batch_size, duration): + """Callback indicate how long it took to run a batch""" + if batch_size == self._effective_batch_size: + # Update the smoothed streaming estimate of the duration of a batch + # from dispatch to completion + old_duration = self._smoothed_batch_duration + if old_duration == self._DEFAULT_SMOOTHED_BATCH_DURATION: + # First record of duration for this batch size after the last + # reset. + new_duration = duration + else: + # Update the exponentially weighted average of the duration of + # batch for the current effective size. + new_duration = 0.8 * old_duration + 0.2 * duration + self._smoothed_batch_duration = new_duration + + def reset_batch_stats(self): + """Reset batch statistics to default values. + + This avoids interferences with future jobs. + """ + self._effective_batch_size = self._DEFAULT_EFFECTIVE_BATCH_SIZE + self._smoothed_batch_duration = self._DEFAULT_SMOOTHED_BATCH_DURATION + + +class ThreadingBackend(PoolManagerMixin, ParallelBackendBase): + """A ParallelBackend which will use a thread pool to execute batches in. + + This is a low-overhead backend but it suffers from the Python Global + Interpreter Lock if the called function relies a lot on Python objects. + Mostly useful when the execution bottleneck is a compiled extension that + explicitly releases the GIL (for instance a Cython loop wrapped in a "with + nogil" block or an expensive call to a library such as NumPy). + + The actual thread pool is lazily initialized: the actual thread pool + construction is delayed to the first call to apply_async. + + ThreadingBackend is used as the default backend for nested calls. + """ + + supports_timeout = True + uses_threads = True + supports_sharedmem = True + + def configure(self, n_jobs=1, parallel=None, **backend_args): + """Build a process or thread pool and return the number of workers""" + n_jobs = self.effective_n_jobs(n_jobs) + if n_jobs == 1: + # Avoid unnecessary overhead and use sequential backend instead. + raise FallbackToBackend( + SequentialBackend(nesting_level=self.nesting_level)) + self.parallel = parallel + self._n_jobs = n_jobs + return n_jobs + + def _get_pool(self): + """Lazily initialize the thread pool + + The actual pool of worker threads is only initialized at the first + call to apply_async. + """ + if self._pool is None: + self._pool = ThreadPool(self._n_jobs) + return self._pool + + +class MultiprocessingBackend(PoolManagerMixin, AutoBatchingMixin, + ParallelBackendBase): + """A ParallelBackend which will use a multiprocessing.Pool. + + Will introduce some communication and memory overhead when exchanging + input and output data with the with the worker Python processes. + However, does not suffer from the Python Global Interpreter Lock. + """ + + # Environment variables to protect against bad situations when nesting + JOBLIB_SPAWNED_PROCESS = "__JOBLIB_SPAWNED_PARALLEL__" + + supports_timeout = True + + def effective_n_jobs(self, n_jobs): + """Determine the number of jobs which are going to run in parallel. + + This also checks if we are attempting to create a nested parallel + loop. + """ + if mp is None: + return 1 + + if mp.current_process().daemon: + # Daemonic processes cannot have children + if n_jobs != 1: + warnings.warn( + 'Multiprocessing-backed parallel loops cannot be nested,' + ' setting n_jobs=1', + stacklevel=3) + return 1 + + if process_executor._CURRENT_DEPTH > 0: + # Mixing loky and multiprocessing in nested loop is not supported + if n_jobs != 1: + warnings.warn( + 'Multiprocessing-backed parallel loops cannot be nested,' + ' below loky, setting n_jobs=1', + stacklevel=3) + return 1 + + elif not (self.in_main_thread() or self.nesting_level == 0): + # Prevent posix fork inside in non-main posix threads + if n_jobs != 1: + warnings.warn( + 'Multiprocessing-backed parallel loops cannot be nested' + ' below threads, setting n_jobs=1', + stacklevel=3) + return 1 + + return super(MultiprocessingBackend, self).effective_n_jobs(n_jobs) + + def configure(self, n_jobs=1, parallel=None, prefer=None, require=None, + **memmappingpool_args): + """Build a process or thread pool and return the number of workers""" + n_jobs = self.effective_n_jobs(n_jobs) + if n_jobs == 1: + raise FallbackToBackend( + SequentialBackend(nesting_level=self.nesting_level)) + + already_forked = int(os.environ.get(self.JOBLIB_SPAWNED_PROCESS, 0)) + if already_forked: + raise ImportError( + '[joblib] Attempting to do parallel computing ' + 'without protecting your import on a system that does ' + 'not support forking. To use parallel-computing in a ' + 'script, you must protect your main loop using "if ' + "__name__ == '__main__'" + '". Please see the joblib documentation on Parallel ' + 'for more information') + # Set an environment variable to avoid infinite loops + os.environ[self.JOBLIB_SPAWNED_PROCESS] = '1' + + # Make sure to free as much memory as possible before forking + gc.collect() + self._pool = MemmappingPool(n_jobs, **memmappingpool_args) + self.parallel = parallel + return n_jobs + + def terminate(self): + """Shutdown the process or thread pool""" + super(MultiprocessingBackend, self).terminate() + if self.JOBLIB_SPAWNED_PROCESS in os.environ: + del os.environ[self.JOBLIB_SPAWNED_PROCESS] + + self.reset_batch_stats() + + +class LokyBackend(AutoBatchingMixin, ParallelBackendBase): + """Managing pool of workers with loky instead of multiprocessing.""" + + supports_timeout = True + supports_inner_max_num_threads = True + + def configure(self, n_jobs=1, parallel=None, prefer=None, require=None, + idle_worker_timeout=300, **memmappingexecutor_args): + """Build a process executor and return the number of workers""" + n_jobs = self.effective_n_jobs(n_jobs) + if n_jobs == 1: + raise FallbackToBackend( + SequentialBackend(nesting_level=self.nesting_level)) + + self._workers = get_memmapping_executor( + n_jobs, timeout=idle_worker_timeout, + env=self._get_max_num_threads_vars(n_jobs=n_jobs), + **memmappingexecutor_args) + self.parallel = parallel + return n_jobs + + def effective_n_jobs(self, n_jobs): + """Determine the number of jobs which are going to run in parallel""" + if n_jobs == 0: + raise ValueError('n_jobs == 0 in Parallel has no meaning') + elif mp is None or n_jobs is None: + # multiprocessing is not available or disabled, fallback + # to sequential mode + return 1 + elif mp.current_process().daemon: + # Daemonic processes cannot have children + if n_jobs != 1: + warnings.warn( + 'Loky-backed parallel loops cannot be called in a' + ' multiprocessing, setting n_jobs=1', + stacklevel=3) + return 1 + elif not (self.in_main_thread() or self.nesting_level == 0): + # Prevent posix fork inside in non-main posix threads + if n_jobs != 1: + warnings.warn( + 'Loky-backed parallel loops cannot be nested below ' + 'threads, setting n_jobs=1', + stacklevel=3) + return 1 + elif n_jobs < 0: + n_jobs = max(cpu_count() + 1 + n_jobs, 1) + return n_jobs + + def apply_async(self, func, callback=None): + """Schedule a func to be run""" + future = self._workers.submit(SafeFunction(func)) + future.get = functools.partial(self.wrap_future_result, future) + if callback is not None: + future.add_done_callback(callback) + return future + + @staticmethod + def wrap_future_result(future, timeout=None): + """Wrapper for Future.result to implement the same behaviour as + AsyncResults.get from multiprocessing.""" + try: + return future.result(timeout=timeout) + except LokyTimeoutError: + raise TimeoutError() + + def terminate(self): + if self._workers is not None: + # Terminate does not shutdown the workers as we want to reuse them + # in latter calls but we free as much memory as we can by deleting + # the shared memory + delete_folder(self._workers._temp_folder) + self._workers = None + + self.reset_batch_stats() + + def abort_everything(self, ensure_ready=True): + """Shutdown the workers and restart a new one with the same parameters + """ + self._workers.shutdown(kill_workers=True) + delete_folder(self._workers._temp_folder) + self._workers = None + if ensure_ready: + self.configure(n_jobs=self.parallel.n_jobs, parallel=self.parallel) + + +class ImmediateResult(object): + def __init__(self, batch): + # Don't delay the application, to avoid keeping the input + # arguments in memory + self.results = batch() + + def get(self): + return self.results + + +class SafeFunction(object): + """Wrapper that handles the serialization of exception tracebacks. + + If an exception is triggered when calling the inner function, a copy of + the full traceback is captured to make it possible to serialize + it so that it can be rendered in a different Python process. + """ + def __init__(self, func): + self.func = func + + def __call__(self, *args, **kwargs): + try: + return self.func(*args, **kwargs) + except KeyboardInterrupt: + # We capture the KeyboardInterrupt and reraise it as + # something different, as multiprocessing does not + # interrupt processing for a KeyboardInterrupt + raise WorkerInterrupt() + except BaseException: + if PY27: + # Capture the traceback of the worker to make it part of + # the final exception message. + e_type, e_value, e_tb = sys.exc_info() + text = format_exc(e_type, e_value, e_tb, context=10, + tb_offset=1) + raise TransportableException(text, e_type) + else: + # Rely on Python 3 built-in Remote Traceback reporting + raise + + +class FallbackToBackend(Exception): + """Raised when configuration should fallback to another backend""" + + def __init__(self, backend): + self.backend = backend diff --git a/my_env/Lib/site-packages/joblib/_store_backends.py b/my_env/Lib/site-packages/joblib/_store_backends.py new file mode 100644 index 000000000..ddbd209f9 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/_store_backends.py @@ -0,0 +1,415 @@ +"""Storage providers backends for Memory caching.""" + +import re +import os +import os.path +import datetime +import json +import shutil +import warnings +import collections +import operator +import threading +from abc import ABCMeta, abstractmethod + +from ._compat import with_metaclass, _basestring +from .backports import concurrency_safe_rename +from .disk import mkdirp, memstr_to_bytes, rm_subdirs +from . import numpy_pickle + +CacheItemInfo = collections.namedtuple('CacheItemInfo', + 'path size last_access') + + +def concurrency_safe_write(object_to_write, filename, write_func): + """Writes an object into a unique file in a concurrency-safe way.""" + thread_id = id(threading.current_thread()) + temporary_filename = '{}.thread-{}-pid-{}'.format( + filename, thread_id, os.getpid()) + write_func(object_to_write, temporary_filename) + + return temporary_filename + + +class StoreBackendBase(with_metaclass(ABCMeta)): + """Helper Abstract Base Class which defines all methods that + a StorageBackend must implement.""" + + location = None + + @abstractmethod + def _open_item(self, f, mode): + """Opens an item on the store and return a file-like object. + + This method is private and only used by the StoreBackendMixin object. + + Parameters + ---------- + f: a file-like object + The file-like object where an item is stored and retrieved + mode: string, optional + the mode in which the file-like object is opened allowed valued are + 'rb', 'wb' + + Returns + ------- + a file-like object + """ + + @abstractmethod + def _item_exists(self, location): + """Checks if an item location exists in the store. + + This method is private and only used by the StoreBackendMixin object. + + Parameters + ---------- + location: string + The location of an item. On a filesystem, this corresponds to the + absolute path, including the filename, of a file. + + Returns + ------- + True if the item exists, False otherwise + """ + + @abstractmethod + def _move_item(self, src, dst): + """Moves an item from src to dst in the store. + + This method is private and only used by the StoreBackendMixin object. + + Parameters + ---------- + src: string + The source location of an item + dst: string + The destination location of an item + """ + + @abstractmethod + def create_location(self, location): + """Creates a location on the store. + + Parameters + ---------- + location: string + The location in the store. On a filesystem, this corresponds to a + directory. + """ + + @abstractmethod + def clear_location(self, location): + """Clears a location on the store. + + Parameters + ---------- + location: string + The location in the store. On a filesystem, this corresponds to a + directory or a filename absolute path + """ + + @abstractmethod + def get_items(self): + """Returns the whole list of items available in the store. + + Returns + ------- + The list of items identified by their ids (e.g filename in a + filesystem). + """ + + @abstractmethod + def configure(self, location, verbose=0, backend_options=dict()): + """Configures the store. + + Parameters + ---------- + location: string + The base location used by the store. On a filesystem, this + corresponds to a directory. + verbose: int + The level of verbosity of the store + backend_options: dict + Contains a dictionnary of named paremeters used to configure the + store backend. + """ + + +class StoreBackendMixin(object): + """Class providing all logic for managing the store in a generic way. + + The StoreBackend subclass has to implement 3 methods: create_location, + clear_location and configure. The StoreBackend also has to provide + a private _open_item, _item_exists and _move_item methods. The _open_item + method has to have the same signature as the builtin open and return a + file-like object. + """ + + def load_item(self, path, verbose=1, msg=None): + """Load an item from the store given its path as a list of + strings.""" + full_path = os.path.join(self.location, *path) + + if verbose > 1: + if verbose < 10: + print('{0}...'.format(msg)) + else: + print('{0} from {1}'.format(msg, full_path)) + + mmap_mode = (None if not hasattr(self, 'mmap_mode') + else self.mmap_mode) + + filename = os.path.join(full_path, 'output.pkl') + if not self._item_exists(filename): + raise KeyError("Non-existing item (may have been " + "cleared).\nFile %s does not exist" % filename) + + # file-like object cannot be used when mmap_mode is set + if mmap_mode is None: + with self._open_item(filename, "rb") as f: + item = numpy_pickle.load(f) + else: + item = numpy_pickle.load(filename, mmap_mode=mmap_mode) + return item + + def dump_item(self, path, item, verbose=1): + """Dump an item in the store at the path given as a list of + strings.""" + try: + item_path = os.path.join(self.location, *path) + if not self._item_exists(item_path): + self.create_location(item_path) + filename = os.path.join(item_path, 'output.pkl') + if verbose > 10: + print('Persisting in %s' % item_path) + + def write_func(to_write, dest_filename): + with self._open_item(dest_filename, "wb") as f: + numpy_pickle.dump(to_write, f, + compress=self.compress) + + self._concurrency_safe_write(item, filename, write_func) + except: # noqa: E722 + " Race condition in the creation of the directory " + + def clear_item(self, path): + """Clear the item at the path, given as a list of strings.""" + item_path = os.path.join(self.location, *path) + if self._item_exists(item_path): + self.clear_location(item_path) + + def contains_item(self, path): + """Check if there is an item at the path, given as a list of + strings""" + item_path = os.path.join(self.location, *path) + filename = os.path.join(item_path, 'output.pkl') + + return self._item_exists(filename) + + def get_item_info(self, path): + """Return information about item.""" + return {'location': os.path.join(self.location, + *path)} + + def get_metadata(self, path): + """Return actual metadata of an item.""" + try: + item_path = os.path.join(self.location, *path) + filename = os.path.join(item_path, 'metadata.json') + with self._open_item(filename, 'rb') as f: + return json.loads(f.read().decode('utf-8')) + except: # noqa: E722 + return {} + + def store_metadata(self, path, metadata): + """Store metadata of a computation.""" + try: + item_path = os.path.join(self.location, *path) + self.create_location(item_path) + filename = os.path.join(item_path, 'metadata.json') + + def write_func(to_write, dest_filename): + with self._open_item(dest_filename, "wb") as f: + f.write(json.dumps(to_write).encode('utf-8')) + + self._concurrency_safe_write(metadata, filename, write_func) + except: # noqa: E722 + pass + + def contains_path(self, path): + """Check cached function is available in store.""" + func_path = os.path.join(self.location, *path) + return self.object_exists(func_path) + + def clear_path(self, path): + """Clear all items with a common path in the store.""" + func_path = os.path.join(self.location, *path) + if self._item_exists(func_path): + self.clear_location(func_path) + + def store_cached_func_code(self, path, func_code=None): + """Store the code of the cached function.""" + func_path = os.path.join(self.location, *path) + if not self._item_exists(func_path): + self.create_location(func_path) + + if func_code is not None: + filename = os.path.join(func_path, "func_code.py") + with self._open_item(filename, 'wb') as f: + f.write(func_code.encode('utf-8')) + + def get_cached_func_code(self, path): + """Store the code of the cached function.""" + path += ['func_code.py', ] + filename = os.path.join(self.location, *path) + try: + with self._open_item(filename, 'rb') as f: + return f.read().decode('utf-8') + except: # noqa: E722 + raise + + def get_cached_func_info(self, path): + """Return information related to the cached function if it exists.""" + return {'location': os.path.join(self.location, *path)} + + def clear(self): + """Clear the whole store content.""" + self.clear_location(self.location) + + def reduce_store_size(self, bytes_limit): + """Reduce store size to keep it under the given bytes limit.""" + items_to_delete = self._get_items_to_delete(bytes_limit) + + for item in items_to_delete: + if self.verbose > 10: + print('Deleting item {0}'.format(item)) + try: + self.clear_location(item.path) + except (OSError, IOError): + # Even with ignore_errors=True shutil.rmtree + # can raise OSError (IOError in python 2) with + # [Errno 116] Stale file handle if another process + # has deleted the folder already. + pass + + def _get_items_to_delete(self, bytes_limit): + """Get items to delete to keep the store under a size limit.""" + if isinstance(bytes_limit, _basestring): + bytes_limit = memstr_to_bytes(bytes_limit) + + items = self.get_items() + size = sum(item.size for item in items) + + to_delete_size = size - bytes_limit + if to_delete_size < 0: + return [] + + # We want to delete first the cache items that were accessed a + # long time ago + items.sort(key=operator.attrgetter('last_access')) + + items_to_delete = [] + size_so_far = 0 + + for item in items: + if size_so_far > to_delete_size: + break + + items_to_delete.append(item) + size_so_far += item.size + + return items_to_delete + + def _concurrency_safe_write(self, to_write, filename, write_func): + """Writes an object into a file in a concurrency-safe way.""" + temporary_filename = concurrency_safe_write(to_write, + filename, write_func) + self._move_item(temporary_filename, filename) + + def __repr__(self): + """Printable representation of the store location.""" + return '{class_name}(location="{location}")'.format( + class_name=self.__class__.__name__, location=self.location) + + +class FileSystemStoreBackend(StoreBackendBase, StoreBackendMixin): + """A StoreBackend used with local or network file systems.""" + + _open_item = staticmethod(open) + _item_exists = staticmethod(os.path.exists) + _move_item = staticmethod(concurrency_safe_rename) + + def clear_location(self, location): + """Delete location on store.""" + if (location == self.location): + rm_subdirs(location) + else: + shutil.rmtree(location, ignore_errors=True) + + def create_location(self, location): + """Create object location on store""" + mkdirp(location) + + def get_items(self): + """Returns the whole list of items available in the store.""" + items = [] + + for dirpath, _, filenames in os.walk(self.location): + is_cache_hash_dir = re.match('[a-f0-9]{32}', + os.path.basename(dirpath)) + + if is_cache_hash_dir: + output_filename = os.path.join(dirpath, 'output.pkl') + try: + last_access = os.path.getatime(output_filename) + except OSError: + try: + last_access = os.path.getatime(dirpath) + except OSError: + # The directory has already been deleted + continue + + last_access = datetime.datetime.fromtimestamp(last_access) + try: + full_filenames = [os.path.join(dirpath, fn) + for fn in filenames] + dirsize = sum(os.path.getsize(fn) + for fn in full_filenames) + except OSError: + # Either output_filename or one of the files in + # dirpath does not exist any more. We assume this + # directory is being cleaned by another process already + continue + + items.append(CacheItemInfo(dirpath, dirsize, + last_access)) + + return items + + def configure(self, location, verbose=1, backend_options=None): + """Configure the store backend. + + For this backend, valid store options are 'compress' and 'mmap_mode' + """ + if backend_options is None: + backend_options = {} + + # setup location directory + self.location = location + if not os.path.exists(self.location): + mkdirp(self.location) + + # item can be stored compressed for faster I/O + self.compress = backend_options.get('compress', False) + + # FileSystemStoreBackend can be used with mmap_mode options under + # certain conditions. + mmap_mode = backend_options.get('mmap_mode') + if self.compress and mmap_mode is not None: + warnings.warn('Compressed items cannot be memmapped in a ' + 'filesystem store. Option will be ignored.', + stacklevel=2) + + self.mmap_mode = mmap_mode + self.verbose = verbose diff --git a/my_env/Lib/site-packages/joblib/backports.py b/my_env/Lib/site-packages/joblib/backports.py new file mode 100644 index 000000000..c83545e60 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/backports.py @@ -0,0 +1,81 @@ +""" +Backports of fixes for joblib dependencies +""" +import os +import time +import ctypes +import sys + +from pkg_resources import parse_version + +try: + import numpy as np + + def make_memmap(filename, dtype='uint8', mode='r+', offset=0, + shape=None, order='C'): + """Backport of numpy memmap offset fix. + + See https://github.com/numpy/numpy/pull/8443 for more details. + + The numpy fix will be available in numpy 1.13. + """ + mm = np.memmap(filename, dtype=dtype, mode=mode, offset=offset, + shape=shape, order=order) + if parse_version(np.__version__) < parse_version('1.13'): + mm.offset = offset + return mm +except ImportError: + def make_memmap(filename, dtype='uint8', mode='r+', offset=0, + shape=None, order='C'): + raise NotImplementedError( + "'joblib.backports.make_memmap' should not be used " + 'if numpy is not installed.') + + +if os.name == 'nt': + # https://github.com/joblib/joblib/issues/540 + access_denied_errors = (5, 13) + try: + from os import replace + except ImportError: + # Python 2.7 + def replace(src, dst): + if not isinstance(src, unicode): # noqa + src = unicode(src, sys.getfilesystemencoding()) # noqa + if not isinstance(dst, unicode): # noqa + dst = unicode(dst, sys.getfilesystemencoding()) # noqa + + movefile_replace_existing = 0x1 + return_value = ctypes.windll.kernel32.MoveFileExW( + src, dst, movefile_replace_existing) + if return_value == 0: + raise ctypes.WinError() + + def concurrency_safe_rename(src, dst): + """Renames ``src`` into ``dst`` overwriting ``dst`` if it exists. + + On Windows os.replace (or for Python 2.7 its implementation + through MoveFileExW) can yield permission errors if executed by + two different processes. + """ + max_sleep_time = 1 + total_sleep_time = 0 + sleep_time = 0.001 + while total_sleep_time < max_sleep_time: + try: + replace(src, dst) + break + except Exception as exc: + if getattr(exc, 'winerror', None) in access_denied_errors: + time.sleep(sleep_time) + total_sleep_time += sleep_time + sleep_time *= 2 + else: + raise + else: + raise +else: + try: + from os import replace as concurrency_safe_rename + except ImportError: + from os import rename as concurrency_safe_rename # noqa diff --git a/my_env/Lib/site-packages/joblib/compressor.py b/my_env/Lib/site-packages/joblib/compressor.py new file mode 100644 index 000000000..7726d1d01 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/compressor.py @@ -0,0 +1,596 @@ +"""Classes and functions for managing compressors.""" + +import sys +import io +import zlib +from pkg_resources import parse_version + +from ._compat import _basestring, PY3_OR_LATER + +try: + from threading import RLock +except ImportError: + from dummy_threading import RLock + +try: + import bz2 +except ImportError: + bz2 = None + +try: + import lzma +except ImportError: + lzma = None + +try: + import lz4 + if PY3_OR_LATER: + from lz4.frame import LZ4FrameFile +except ImportError: + lz4 = None + +LZ4_NOT_INSTALLED_ERROR = ('LZ4 is not installed. Install it with pip: ' + 'https://python-lz4.readthedocs.io/') + +# Registered compressors +_COMPRESSORS = {} + +# Magic numbers of supported compression file formats. +_ZFILE_PREFIX = b'ZF' # used with pickle files created before 0.9.3. +_ZLIB_PREFIX = b'\x78' +_GZIP_PREFIX = b'\x1f\x8b' +_BZ2_PREFIX = b'BZ' +_XZ_PREFIX = b'\xfd\x37\x7a\x58\x5a' +_LZMA_PREFIX = b'\x5d\x00' +_LZ4_PREFIX = b'\x04\x22\x4D\x18' + + +def register_compressor(compressor_name, compressor, + force=False): + """Register a new compressor. + + Parameters + ----------- + compressor_name: str. + The name of the compressor. + compressor: CompressorWrapper + An instance of a 'CompressorWrapper'. + """ + global _COMPRESSORS + if not isinstance(compressor_name, _basestring): + raise ValueError("Compressor name should be a string, " + "'{}' given.".format(compressor_name)) + + if not isinstance(compressor, CompressorWrapper): + raise ValueError("Compressor should implement the CompressorWrapper " + "interface, '{}' given.".format(compressor)) + + if (compressor.fileobj_factory is not None and + (not hasattr(compressor.fileobj_factory, 'read') or + not hasattr(compressor.fileobj_factory, 'write') or + not hasattr(compressor.fileobj_factory, 'seek') or + not hasattr(compressor.fileobj_factory, 'tell'))): + raise ValueError("Compressor 'fileobj_factory' attribute should " + "implement the file object interface, '{}' given." + .format(compressor.fileobj_factory)) + + if compressor_name in _COMPRESSORS and not force: + raise ValueError("Compressor '{}' already registered." + .format(compressor_name)) + + _COMPRESSORS[compressor_name] = compressor + + +class CompressorWrapper(): + """A wrapper around a compressor file object. + + Attributes + ---------- + obj: a file-like object + The object must implement the buffer interface and will be used + internally to compress/decompress the data. + prefix: bytestring + A bytestring corresponding to the magic number that identifies the + file format associated to the compressor. + extention: str + The file extension used to automatically select this compressor during + a dump to a file. + """ + + def __init__(self, obj, prefix=b'', extension=''): + self.fileobj_factory = obj + self.prefix = prefix + self.extension = extension + + def compressor_file(self, fileobj, compresslevel=None): + """Returns an instance of a compressor file object.""" + if compresslevel is None: + return self.fileobj_factory(fileobj, 'wb') + else: + return self.fileobj_factory(fileobj, 'wb', + compresslevel=compresslevel) + + def decompressor_file(self, fileobj): + """Returns an instance of a decompressor file object.""" + return self.fileobj_factory(fileobj, 'rb') + + +class BZ2CompressorWrapper(CompressorWrapper): + + prefix = _BZ2_PREFIX + extension = '.bz2' + + def __init__(self): + if bz2 is not None: + self.fileobj_factory = bz2.BZ2File + else: + self.fileobj_factory = None + + def _check_versions(self): + if bz2 is None: + raise ValueError('bz2 module is not compiled on your python ' + 'standard library.') + + def compressor_file(self, fileobj, compresslevel=None): + """Returns an instance of a compressor file object.""" + self._check_versions() + if compresslevel is None: + return self.fileobj_factory(fileobj, 'wb') + else: + return self.fileobj_factory(fileobj, 'wb', + compresslevel=compresslevel) + + def decompressor_file(self, fileobj): + """Returns an instance of a decompressor file object.""" + self._check_versions() + if PY3_OR_LATER: + fileobj = self.fileobj_factory(fileobj, 'rb') + else: + # In python 2, BZ2File doesn't support a fileobj opened in + # binary mode. In this case, we pass the filename. + fileobj = self.fileobj_factory(fileobj.name, 'rb') + return fileobj + + +class LZMACompressorWrapper(CompressorWrapper): + + prefix = _LZMA_PREFIX + extension = '.lzma' + + def __init__(self): + if lzma is not None: + self.fileobj_factory = lzma.LZMAFile + else: + self.fileobj_factory = None + + def compressor_file(self, fileobj, compresslevel=None): + """Returns an instance of a compressor file object.""" + if compresslevel is None: + return self.fileobj_factory(fileobj, 'wb', + format=lzma.FORMAT_ALONE) + else: + return self.fileobj_factory(fileobj, 'wb', + format=lzma.FORMAT_ALONE, + preset=compresslevel) + + def decompressor_file(self, fileobj): + """Returns an instance of a decompressor file object.""" + if PY3_OR_LATER and lzma is not None: + # We support lzma only in python 3 because in python 2 users + # may have installed the pyliblzma package, which also provides + # the lzma module, but that unfortunately doesn't fully support + # the buffer interface required by joblib. + # See https://github.com/joblib/joblib/issues/403 for details. + return lzma.LZMAFile(fileobj, 'rb') + else: + raise NotImplementedError("Lzma decompression is not " + "supported for this version of " + "python ({}.{})" + .format(sys.version_info[0], + sys.version_info[1])) + + +class XZCompressorWrapper(LZMACompressorWrapper): + + prefix = _XZ_PREFIX + extension = '.xz' + + def __init__(self): + if lzma is not None: + self.fileobj_factory = lzma.LZMAFile + else: + self.fileobj_factory = None + + def compressor_file(self, fileobj, compresslevel=None): + """Returns an instance of a compressor file object.""" + if compresslevel is None: + return self.fileobj_factory(fileobj, 'wb', check=lzma.CHECK_NONE) + else: + return self.fileobj_factory(fileobj, 'wb', check=lzma.CHECK_NONE, + preset=compresslevel) + + +class LZ4CompressorWrapper(CompressorWrapper): + + prefix = _LZ4_PREFIX + extension = '.lz4' + + def __init__(self): + if PY3_OR_LATER and lz4 is not None: + self.fileobj_factory = LZ4FrameFile + else: + self.fileobj_factory = None + + def _check_versions(self): + if not PY3_OR_LATER: + raise ValueError('lz4 compression is only available with ' + 'python3+.') + + if lz4 is None or ( + parse_version(lz4.__version__) < parse_version('0.19') + ): + raise ValueError(LZ4_NOT_INSTALLED_ERROR) + + def compressor_file(self, fileobj, compresslevel=None): + """Returns an instance of a compressor file object.""" + self._check_versions() + if compresslevel is None: + return self.fileobj_factory(fileobj, 'wb') + else: + return self.fileobj_factory(fileobj, 'wb', + compression_level=compresslevel) + + def decompressor_file(self, fileobj): + """Returns an instance of a decompressor file object.""" + self._check_versions() + return self.fileobj_factory(fileobj, 'rb') + + +############################################################################### +# base file compression/decompression object definition +_MODE_CLOSED = 0 +_MODE_READ = 1 +_MODE_READ_EOF = 2 +_MODE_WRITE = 3 +_BUFFER_SIZE = 8192 + + +class BinaryZlibFile(io.BufferedIOBase): + """A file object providing transparent zlib (de)compression. + + A BinaryZlibFile can act as a wrapper for an existing file object, or refer + directly to a named file on disk. + + Note that BinaryZlibFile provides only a *binary* file interface: data read + is returned as bytes, and data to be written should be given as bytes. + + This object is an adaptation of the BZ2File object and is compatible with + versions of python >= 2.7. + + If filename is a str or bytes object, it gives the name + of the file to be opened. Otherwise, it should be a file object, + which will be used to read or write the compressed data. + + mode can be 'rb' for reading (default) or 'wb' for (over)writing + + If mode is 'wb', compresslevel can be a number between 1 + and 9 specifying the level of compression: 1 produces the least + compression, and 9 produces the most compression. 3 is the default. + """ + + wbits = zlib.MAX_WBITS + + def __init__(self, filename, mode="rb", compresslevel=3): + # This lock must be recursive, so that BufferedIOBase's + # readline(), readlines() and writelines() don't deadlock. + self._lock = RLock() + self._fp = None + self._closefp = False + self._mode = _MODE_CLOSED + self._pos = 0 + self._size = -1 + self.compresslevel = compresslevel + + if not isinstance(compresslevel, int) or not (1 <= compresslevel <= 9): + raise ValueError("'compresslevel' must be an integer " + "between 1 and 9. You provided 'compresslevel={}'" + .format(compresslevel)) + + if mode == "rb": + self._mode = _MODE_READ + self._decompressor = zlib.decompressobj(self.wbits) + self._buffer = b"" + self._buffer_offset = 0 + elif mode == "wb": + self._mode = _MODE_WRITE + self._compressor = zlib.compressobj(self.compresslevel, + zlib.DEFLATED, self.wbits, + zlib.DEF_MEM_LEVEL, 0) + else: + raise ValueError("Invalid mode: %r" % (mode,)) + + if isinstance(filename, _basestring): + self._fp = io.open(filename, mode) + self._closefp = True + elif hasattr(filename, "read") or hasattr(filename, "write"): + self._fp = filename + else: + raise TypeError("filename must be a str or bytes object, " + "or a file") + + def close(self): + """Flush and close the file. + + May be called more than once without error. Once the file is + closed, any other operation on it will raise a ValueError. + """ + with self._lock: + if self._mode == _MODE_CLOSED: + return + try: + if self._mode in (_MODE_READ, _MODE_READ_EOF): + self._decompressor = None + elif self._mode == _MODE_WRITE: + self._fp.write(self._compressor.flush()) + self._compressor = None + finally: + try: + if self._closefp: + self._fp.close() + finally: + self._fp = None + self._closefp = False + self._mode = _MODE_CLOSED + self._buffer = b"" + self._buffer_offset = 0 + + @property + def closed(self): + """True if this file is closed.""" + return self._mode == _MODE_CLOSED + + def fileno(self): + """Return the file descriptor for the underlying file.""" + self._check_not_closed() + return self._fp.fileno() + + def seekable(self): + """Return whether the file supports seeking.""" + return self.readable() and self._fp.seekable() + + def readable(self): + """Return whether the file was opened for reading.""" + self._check_not_closed() + return self._mode in (_MODE_READ, _MODE_READ_EOF) + + def writable(self): + """Return whether the file was opened for writing.""" + self._check_not_closed() + return self._mode == _MODE_WRITE + + # Mode-checking helper functions. + + def _check_not_closed(self): + if self.closed: + fname = getattr(self._fp, 'name', None) + msg = "I/O operation on closed file" + if fname is not None: + msg += " {}".format(fname) + msg += "." + raise ValueError(msg) + + def _check_can_read(self): + if self._mode not in (_MODE_READ, _MODE_READ_EOF): + self._check_not_closed() + raise io.UnsupportedOperation("File not open for reading") + + def _check_can_write(self): + if self._mode != _MODE_WRITE: + self._check_not_closed() + raise io.UnsupportedOperation("File not open for writing") + + def _check_can_seek(self): + if self._mode not in (_MODE_READ, _MODE_READ_EOF): + self._check_not_closed() + raise io.UnsupportedOperation("Seeking is only supported " + "on files open for reading") + if not self._fp.seekable(): + raise io.UnsupportedOperation("The underlying file object " + "does not support seeking") + + # Fill the readahead buffer if it is empty. Returns False on EOF. + def _fill_buffer(self): + if self._mode == _MODE_READ_EOF: + return False + # Depending on the input data, our call to the decompressor may not + # return any data. In this case, try again after reading another block. + while self._buffer_offset == len(self._buffer): + try: + rawblock = (self._decompressor.unused_data or + self._fp.read(_BUFFER_SIZE)) + if not rawblock: + raise EOFError + except EOFError: + # End-of-stream marker and end of file. We're good. + self._mode = _MODE_READ_EOF + self._size = self._pos + return False + else: + self._buffer = self._decompressor.decompress(rawblock) + self._buffer_offset = 0 + return True + + # Read data until EOF. + # If return_data is false, consume the data without returning it. + def _read_all(self, return_data=True): + # The loop assumes that _buffer_offset is 0. Ensure that this is true. + self._buffer = self._buffer[self._buffer_offset:] + self._buffer_offset = 0 + + blocks = [] + while self._fill_buffer(): + if return_data: + blocks.append(self._buffer) + self._pos += len(self._buffer) + self._buffer = b"" + if return_data: + return b"".join(blocks) + + # Read a block of up to n bytes. + # If return_data is false, consume the data without returning it. + def _read_block(self, n_bytes, return_data=True): + # If we have enough data buffered, return immediately. + end = self._buffer_offset + n_bytes + if end <= len(self._buffer): + data = self._buffer[self._buffer_offset: end] + self._buffer_offset = end + self._pos += len(data) + return data if return_data else None + + # The loop assumes that _buffer_offset is 0. Ensure that this is true. + self._buffer = self._buffer[self._buffer_offset:] + self._buffer_offset = 0 + + blocks = [] + while n_bytes > 0 and self._fill_buffer(): + if n_bytes < len(self._buffer): + data = self._buffer[:n_bytes] + self._buffer_offset = n_bytes + else: + data = self._buffer + self._buffer = b"" + if return_data: + blocks.append(data) + self._pos += len(data) + n_bytes -= len(data) + if return_data: + return b"".join(blocks) + + def read(self, size=-1): + """Read up to size uncompressed bytes from the file. + + If size is negative or omitted, read until EOF is reached. + Returns b'' if the file is already at EOF. + """ + with self._lock: + self._check_can_read() + if size == 0: + return b"" + elif size < 0: + return self._read_all() + else: + return self._read_block(size) + + def readinto(self, b): + """Read up to len(b) bytes into b. + + Returns the number of bytes read (0 for EOF). + """ + with self._lock: + return io.BufferedIOBase.readinto(self, b) + + def write(self, data): + """Write a byte string to the file. + + Returns the number of uncompressed bytes written, which is + always len(data). Note that due to buffering, the file on disk + may not reflect the data written until close() is called. + """ + with self._lock: + self._check_can_write() + # Convert data type if called by io.BufferedWriter. + if isinstance(data, memoryview): + data = data.tobytes() + + compressed = self._compressor.compress(data) + self._fp.write(compressed) + self._pos += len(data) + return len(data) + + # Rewind the file to the beginning of the data stream. + def _rewind(self): + self._fp.seek(0, 0) + self._mode = _MODE_READ + self._pos = 0 + self._decompressor = zlib.decompressobj(self.wbits) + self._buffer = b"" + self._buffer_offset = 0 + + def seek(self, offset, whence=0): + """Change the file position. + + The new position is specified by offset, relative to the + position indicated by whence. Values for whence are: + + 0: start of stream (default); offset must not be negative + 1: current stream position + 2: end of stream; offset must not be positive + + Returns the new file position. + + Note that seeking is emulated, so depending on the parameters, + this operation may be extremely slow. + """ + with self._lock: + self._check_can_seek() + + # Recalculate offset as an absolute file position. + if whence == 0: + pass + elif whence == 1: + offset = self._pos + offset + elif whence == 2: + # Seeking relative to EOF - we need to know the file's size. + if self._size < 0: + self._read_all(return_data=False) + offset = self._size + offset + else: + raise ValueError("Invalid value for whence: %s" % (whence,)) + + # Make it so that offset is the number of bytes to skip forward. + if offset < self._pos: + self._rewind() + else: + offset -= self._pos + + # Read and discard data until we reach the desired position. + self._read_block(offset, return_data=False) + + return self._pos + + def tell(self): + """Return the current file position.""" + with self._lock: + self._check_not_closed() + return self._pos + + +class ZlibCompressorWrapper(CompressorWrapper): + + def __init__(self): + CompressorWrapper.__init__(self, obj=BinaryZlibFile, + prefix=_ZLIB_PREFIX, extension='.z') + + +class BinaryGzipFile(BinaryZlibFile): + """A file object providing transparent gzip (de)compression. + + If filename is a str or bytes object, it gives the name + of the file to be opened. Otherwise, it should be a file object, + which will be used to read or write the compressed data. + + mode can be 'rb' for reading (default) or 'wb' for (over)writing + + If mode is 'wb', compresslevel can be a number between 1 + and 9 specifying the level of compression: 1 produces the least + compression, and 9 produces the most compression. 3 is the default. + """ + + wbits = 31 # zlib compressor/decompressor wbits value for gzip format. + + +class GzipCompressorWrapper(CompressorWrapper): + + def __init__(self): + CompressorWrapper.__init__(self, obj=BinaryGzipFile, + prefix=_GZIP_PREFIX, extension='.gz') diff --git a/my_env/Lib/site-packages/joblib/disk.py b/my_env/Lib/site-packages/joblib/disk.py new file mode 100644 index 000000000..c90c3df36 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/disk.py @@ -0,0 +1,124 @@ +""" +Disk management utilities. +""" + +# Authors: Gael Varoquaux +# Lars Buitinck +# Copyright (c) 2010 Gael Varoquaux +# License: BSD Style, 3 clauses. + + +import os +import sys +import time +import errno +import shutil +import warnings + + +try: + WindowsError +except NameError: + WindowsError = OSError + + +def disk_used(path): + """ Return the disk usage in a directory.""" + size = 0 + for file in os.listdir(path) + ['.']: + stat = os.stat(os.path.join(path, file)) + if hasattr(stat, 'st_blocks'): + size += stat.st_blocks * 512 + else: + # on some platform st_blocks is not available (e.g., Windows) + # approximate by rounding to next multiple of 512 + size += (stat.st_size // 512 + 1) * 512 + # We need to convert to int to avoid having longs on some systems (we + # don't want longs to avoid problems we SQLite) + return int(size / 1024.) + + +def memstr_to_bytes(text): + """ Convert a memory text to its value in bytes. + """ + kilo = 1024 + units = dict(K=kilo, M=kilo ** 2, G=kilo ** 3) + try: + size = int(units[text[-1]] * float(text[:-1])) + except (KeyError, ValueError): + raise ValueError( + "Invalid literal for size give: %s (type %s) should be " + "alike '10G', '500M', '50K'." % (text, type(text))) + return size + + +def mkdirp(d): + """Ensure directory d exists (like mkdir -p on Unix) + No guarantee that the directory is writable. + """ + try: + os.makedirs(d) + except OSError as e: + if e.errno != errno.EEXIST: + raise + + +# if a rmtree operation fails in rm_subdirs, wait for this much time (in secs), +# then retry up to RM_SUBDIRS_N_RETRY times. If it still fails, raise the +# exception. this mecanism ensures that the sub-process gc have the time to +# collect and close the memmaps before we fail. +RM_SUBDIRS_RETRY_TIME = 0.1 +RM_SUBDIRS_N_RETRY = 5 + + +def rm_subdirs(path, onerror=None): + """Remove all subdirectories in this path. + + The directory indicated by `path` is left in place, and its subdirectories + are erased. + + If onerror is set, it is called to handle the error with arguments (func, + path, exc_info) where func is os.listdir, os.remove, or os.rmdir; + path is the argument to that function that caused it to fail; and + exc_info is a tuple returned by sys.exc_info(). If onerror is None, + an exception is raised. + """ + + # NOTE this code is adapted from the one in shutil.rmtree, and is + # just as fast + + names = [] + try: + names = os.listdir(path) + except os.error: + if onerror is not None: + onerror(os.listdir, path, sys.exc_info()) + else: + raise + + for name in names: + fullname = os.path.join(path, name) + delete_folder(fullname, onerror=onerror) + + +def delete_folder(folder_path, onerror=None): + """Utility function to cleanup a temporary folder if it still exists.""" + if os.path.isdir(folder_path): + if onerror is not None: + shutil.rmtree(folder_path, False, onerror) + else: + # allow the rmtree to fail once, wait and re-try. + # if the error is raised again, fail + err_count = 0 + while True: + try: + shutil.rmtree(folder_path, False, None) + break + except (OSError, WindowsError): + err_count += 1 + if err_count > RM_SUBDIRS_N_RETRY: + warnings.warn( + "Unable to delete folder {} after {} tentatives." + .format(folder_path, RM_SUBDIRS_N_RETRY)) + raise + time.sleep(RM_SUBDIRS_RETRY_TIME) diff --git a/my_env/Lib/site-packages/joblib/executor.py b/my_env/Lib/site-packages/joblib/executor.py new file mode 100644 index 000000000..0f92aadda --- /dev/null +++ b/my_env/Lib/site-packages/joblib/executor.py @@ -0,0 +1,68 @@ +"""Utility function to construct a loky.ReusableExecutor with custom pickler. + +This module provides efficient ways of working with data stored in +shared memory with numpy.memmap arrays without inducing any memory +copy between the parent and child processes. +""" +# Author: Thomas Moreau +# Copyright: 2017, Thomas Moreau +# License: BSD 3 clause + +import random +from .disk import delete_folder +from ._memmapping_reducer import get_memmapping_reducers +from .externals.loky.reusable_executor import get_reusable_executor + + +_backend_args = None + + +def get_memmapping_executor(n_jobs, timeout=300, initializer=None, initargs=(), + env=None, **backend_args): + """Factory for ReusableExecutor with automatic memmapping for large numpy + arrays. + """ + global _backend_args + reuse = _backend_args is None or _backend_args == backend_args + reuse = 'auto' if reuse else False + _backend_args = backend_args + + id_executor = random.randint(0, int(1e10)) + job_reducers, result_reducers, temp_folder = get_memmapping_reducers( + id_executor, **backend_args) + _executor = get_reusable_executor(n_jobs, job_reducers=job_reducers, + result_reducers=result_reducers, + reuse=reuse, timeout=timeout, + initializer=initializer, + initargs=initargs, env=env) + # If executor doesn't have a _temp_folder, it means it is a new executor + # and the reducers have been used. Else, the previous reducers are used + # and we should not change this attibute. + if not hasattr(_executor, "_temp_folder"): + _executor._temp_folder = temp_folder + else: + delete_folder(temp_folder) + return _executor + + +class _TestingMemmappingExecutor(): + """Wrapper around ReusableExecutor to ease memmapping testing with Pool + and Executor. This is only for testing purposes. + """ + def __init__(self, n_jobs, **backend_args): + self._executor = get_memmapping_executor(n_jobs, **backend_args) + self._temp_folder = self._executor._temp_folder + + def apply_async(self, func, args): + """Schedule a func to be run""" + future = self._executor.submit(func, *args) + future.get = future.result + return future + + def terminate(self): + self._executor.shutdown() + delete_folder(self._temp_folder) + + def map(self, f, *args): + res = self._executor.map(f, *args) + return list(res) diff --git a/my_env/Lib/site-packages/joblib/externals/__init__.py b/my_env/Lib/site-packages/joblib/externals/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/my_env/Lib/site-packages/joblib/externals/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..e077cfb2a Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/cloudpickle/__init__.py b/my_env/Lib/site-packages/joblib/externals/cloudpickle/__init__.py new file mode 100644 index 000000000..4f41d8ebf --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/cloudpickle/__init__.py @@ -0,0 +1,11 @@ +from __future__ import absolute_import + +import sys +import pickle + + +from .cloudpickle import * +if sys.version_info[:2] >= (3, 8): + from .cloudpickle_fast import CloudPickler, dumps, dump + +__version__ = '1.2.2' diff --git a/my_env/Lib/site-packages/joblib/externals/cloudpickle/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/cloudpickle/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..53eea3035 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/cloudpickle/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/cloudpickle/__pycache__/cloudpickle.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/cloudpickle/__pycache__/cloudpickle.cpython-37.pyc new file mode 100644 index 000000000..998b55edc Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/cloudpickle/__pycache__/cloudpickle.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/cloudpickle/__pycache__/cloudpickle_fast.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/cloudpickle/__pycache__/cloudpickle_fast.cpython-37.pyc new file mode 100644 index 000000000..a2a780956 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/cloudpickle/__pycache__/cloudpickle_fast.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/cloudpickle/cloudpickle.py b/my_env/Lib/site-packages/joblib/externals/cloudpickle/cloudpickle.py new file mode 100644 index 000000000..1d4c85cbe --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/cloudpickle/cloudpickle.py @@ -0,0 +1,1397 @@ +""" +This class is defined to override standard pickle functionality + +The goals of it follow: +-Serialize lambdas and nested functions to compiled byte code +-Deal with main module correctly +-Deal with other non-serializable objects + +It does not include an unpickler, as standard python unpickling suffices. + +This module was extracted from the `cloud` package, developed by `PiCloud, Inc. +`_. + +Copyright (c) 2012, Regents of the University of California. +Copyright (c) 2009 `PiCloud, Inc. `_. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the University of California, Berkeley nor the + names of its contributors may be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +""" +from __future__ import print_function + +import dis +from functools import partial +import io +import itertools +import logging +import opcode +import operator +import pickle +import platform +import struct +import sys +import traceback +import types +import weakref +import uuid +import threading + + +try: + from enum import Enum +except ImportError: + Enum = None + +# cloudpickle is meant for inter process communication: we expect all +# communicating processes to run the same Python version hence we favor +# communication speed over compatibility: +DEFAULT_PROTOCOL = pickle.HIGHEST_PROTOCOL + +# Track the provenance of reconstructed dynamic classes to make it possible to +# recontruct instances from the matching singleton class definition when +# appropriate and preserve the usual "isinstance" semantics of Python objects. +_DYNAMIC_CLASS_TRACKER_BY_CLASS = weakref.WeakKeyDictionary() +_DYNAMIC_CLASS_TRACKER_BY_ID = weakref.WeakValueDictionary() +_DYNAMIC_CLASS_TRACKER_LOCK = threading.Lock() + +PYPY = platform.python_implementation() == "PyPy" + +builtin_code_type = None +if PYPY: + # builtin-code objects only exist in pypy + builtin_code_type = type(float.__new__.__code__) + +if sys.version_info[0] < 3: # pragma: no branch + from pickle import Pickler + try: + from cStringIO import StringIO + except ImportError: + from StringIO import StringIO + string_types = (basestring,) # noqa + PY3 = False + PY2 = True +else: + types.ClassType = type + from pickle import _Pickler as Pickler + from io import BytesIO as StringIO + string_types = (str,) + PY3 = True + PY2 = False + from importlib._bootstrap import _find_spec + +_extract_code_globals_cache = weakref.WeakKeyDictionary() + + +def _ensure_tracking(class_def): + with _DYNAMIC_CLASS_TRACKER_LOCK: + class_tracker_id = _DYNAMIC_CLASS_TRACKER_BY_CLASS.get(class_def) + if class_tracker_id is None: + class_tracker_id = uuid.uuid4().hex + _DYNAMIC_CLASS_TRACKER_BY_CLASS[class_def] = class_tracker_id + _DYNAMIC_CLASS_TRACKER_BY_ID[class_tracker_id] = class_def + return class_tracker_id + + +def _lookup_class_or_track(class_tracker_id, class_def): + if class_tracker_id is not None: + with _DYNAMIC_CLASS_TRACKER_LOCK: + class_def = _DYNAMIC_CLASS_TRACKER_BY_ID.setdefault( + class_tracker_id, class_def) + _DYNAMIC_CLASS_TRACKER_BY_CLASS[class_def] = class_tracker_id + return class_def + +if sys.version_info[:2] >= (3, 5): + from pickle import _getattribute +elif sys.version_info[:2] >= (3, 4): + from pickle import _getattribute as _py34_getattribute + # pickle._getattribute does not return the parent under Python 3.4 + def _getattribute(obj, name): + return _py34_getattribute(obj, name), None +else: + # pickle._getattribute is a python3 addition and enchancement of getattr, + # that can handle dotted attribute names. In cloudpickle for python2, + # handling dotted names is not needed, so we simply define _getattribute as + # a wrapper around getattr. + def _getattribute(obj, name): + return getattr(obj, name, None), None + + +def _whichmodule(obj, name): + """Find the module an object belongs to. + + This function differs from ``pickle.whichmodule`` in two ways: + - it does not mangle the cases where obj's module is __main__ and obj was + not found in any module. + - Errors arising during module introspection are ignored, as those errors + are considered unwanted side effects. + """ + module_name = getattr(obj, '__module__', None) + if module_name is not None: + return module_name + # Protect the iteration by using a list copy of sys.modules against dynamic + # modules that trigger imports of other modules upon calls to getattr. + for module_name, module in list(sys.modules.items()): + if module_name == '__main__' or module is None: + continue + try: + if _getattribute(module, name)[0] is obj: + return module_name + except Exception: + pass + return None + + +def _is_global(obj, name=None): + """Determine if obj can be pickled as attribute of a file-backed module""" + if name is None: + name = getattr(obj, '__qualname__', None) + if name is None: + name = getattr(obj, '__name__', None) + + module_name = _whichmodule(obj, name) + + if module_name is None: + # In this case, obj.__module__ is None AND obj was not found in any + # imported module. obj is thus treated as dynamic. + return False + + if module_name == "__main__": + return False + + module = sys.modules.get(module_name, None) + if module is None: + # The main reason why obj's module would not be imported is that this + # module has been dynamically created, using for example + # types.ModuleType. The other possibility is that module was removed + # from sys.modules after obj was created/imported. But this case is not + # supported, as the standard pickle does not support it either. + return False + + # module has been added to sys.modules, but it can still be dynamic. + if _is_dynamic(module): + return False + + try: + obj2, parent = _getattribute(module, name) + except AttributeError: + # obj was not found inside the module it points to + return False + return obj2 is obj + + +def _extract_code_globals(co): + """ + Find all globals names read or written to by codeblock co + """ + out_names = _extract_code_globals_cache.get(co) + if out_names is None: + names = co.co_names + out_names = {names[oparg] for _, oparg in _walk_global_ops(co)} + + # Declaring a function inside another one using the "def ..." + # syntax generates a constant code object corresonding to the one + # of the nested function's As the nested function may itself need + # global variables, we need to introspect its code, extract its + # globals, (look for code object in it's co_consts attribute..) and + # add the result to code_globals + if co.co_consts: + for const in co.co_consts: + if isinstance(const, types.CodeType): + out_names |= _extract_code_globals(const) + + _extract_code_globals_cache[co] = out_names + + return out_names + + +def _find_imported_submodules(code, top_level_dependencies): + """ + Find currently imported submodules used by a function. + + Submodules used by a function need to be detected and referenced for the + function to work correctly at depickling time. Because submodules can be + referenced as attribute of their parent package (``package.submodule``), we + need a special introspection technique that does not rely on GLOBAL-related + opcodes to find references of them in a code object. + + Example: + ``` + import concurrent.futures + import cloudpickle + def func(): + x = concurrent.futures.ThreadPoolExecutor + if __name__ == '__main__': + cloudpickle.dumps(func) + ``` + The globals extracted by cloudpickle in the function's state include the + concurrent package, but not its submodule (here, concurrent.futures), which + is the module used by func. Find_imported_submodules will detect the usage + of concurrent.futures. Saving this module alongside with func will ensure + that calling func once depickled does not fail due to concurrent.futures + not being imported + """ + + subimports = [] + # check if any known dependency is an imported package + for x in top_level_dependencies: + if (isinstance(x, types.ModuleType) and + hasattr(x, '__package__') and x.__package__): + # check if the package has any currently loaded sub-imports + prefix = x.__name__ + '.' + # A concurrent thread could mutate sys.modules, + # make sure we iterate over a copy to avoid exceptions + for name in list(sys.modules): + # Older versions of pytest will add a "None" module to + # sys.modules. + if name is not None and name.startswith(prefix): + # check whether the function can address the sub-module + tokens = set(name[len(prefix):].split('.')) + if not tokens - set(code.co_names): + subimports.append(sys.modules[name]) + return subimports + + +def cell_set(cell, value): + """Set the value of a closure cell. + + The point of this function is to set the cell_contents attribute of a cell + after its creation. This operation is necessary in case the cell contains a + reference to the function the cell belongs to, as when calling the + function's constructor + ``f = types.FunctionType(code, globals, name, argdefs, closure)``, + closure will not be able to contain the yet-to-be-created f. + + In Python3.7, cell_contents is writeable, so setting the contents of a cell + can be done simply using + >>> cell.cell_contents = value + + In earlier Python3 versions, the cell_contents attribute of a cell is read + only, but this limitation can be worked around by leveraging the Python 3 + ``nonlocal`` keyword. + + In Python2 however, this attribute is read only, and there is no + ``nonlocal`` keyword. For this reason, we need to come up with more + complicated hacks to set this attribute. + + The chosen approach is to create a function with a STORE_DEREF opcode, + which sets the content of a closure variable. Typically: + + >>> def inner(value): + ... lambda: cell # the lambda makes cell a closure + ... cell = value # cell is a closure, so this triggers a STORE_DEREF + + (Note that in Python2, A STORE_DEREF can never be triggered from an inner + function. The function g for example here + >>> def f(var): + ... def g(): + ... var += 1 + ... return g + + will not modify the closure variable ``var```inplace, but instead try to + load a local variable var and increment it. As g does not assign the local + variable ``var`` any initial value, calling f(1)() will fail at runtime.) + + Our objective is to set the value of a given cell ``cell``. So we need to + somewhat reference our ``cell`` object into the ``inner`` function so that + this object (and not the smoke cell of the lambda function) gets affected + by the STORE_DEREF operation. + + In inner, ``cell`` is referenced as a cell variable (an enclosing variable + that is referenced by the inner function). If we create a new function + cell_set with the exact same code as ``inner``, but with ``cell`` marked as + a free variable instead, the STORE_DEREF will be applied on its closure - + ``cell``, which we can specify explicitly during construction! The new + cell_set variable thus actually sets the contents of a specified cell! + + Note: we do not make use of the ``nonlocal`` keyword to set the contents of + a cell in early python3 versions to limit possible syntax errors in case + test and checker libraries decide to parse the whole file. + """ + + if sys.version_info[:2] >= (3, 7): # pragma: no branch + cell.cell_contents = value + else: + _cell_set = types.FunctionType( + _cell_set_template_code, {}, '_cell_set', (), (cell,),) + _cell_set(value) + + +def _make_cell_set_template_code(): + def _cell_set_factory(value): + lambda: cell + cell = value + + co = _cell_set_factory.__code__ + + if PY2: # pragma: no branch + _cell_set_template_code = types.CodeType( + co.co_argcount, + co.co_nlocals, + co.co_stacksize, + co.co_flags, + co.co_code, + co.co_consts, + co.co_names, + co.co_varnames, + co.co_filename, + co.co_name, + co.co_firstlineno, + co.co_lnotab, + co.co_cellvars, # co_freevars is initialized with co_cellvars + (), # co_cellvars is made empty + ) + else: + _cell_set_template_code = types.CodeType( + co.co_argcount, + co.co_kwonlyargcount, # Python 3 only argument + co.co_nlocals, + co.co_stacksize, + co.co_flags, + co.co_code, + co.co_consts, + co.co_names, + co.co_varnames, + co.co_filename, + co.co_name, + co.co_firstlineno, + co.co_lnotab, + co.co_cellvars, # co_freevars is initialized with co_cellvars + (), # co_cellvars is made empty + ) + return _cell_set_template_code + + +if sys.version_info[:2] < (3, 7): + _cell_set_template_code = _make_cell_set_template_code() + +# relevant opcodes +STORE_GLOBAL = opcode.opmap['STORE_GLOBAL'] +DELETE_GLOBAL = opcode.opmap['DELETE_GLOBAL'] +LOAD_GLOBAL = opcode.opmap['LOAD_GLOBAL'] +GLOBAL_OPS = (STORE_GLOBAL, DELETE_GLOBAL, LOAD_GLOBAL) +HAVE_ARGUMENT = dis.HAVE_ARGUMENT +EXTENDED_ARG = dis.EXTENDED_ARG + + +_BUILTIN_TYPE_NAMES = {} +for k, v in types.__dict__.items(): + if type(v) is type: + _BUILTIN_TYPE_NAMES[v] = k + + +def _builtin_type(name): + return getattr(types, name) + + +if sys.version_info < (3, 4): # pragma: no branch + def _walk_global_ops(code): + """ + Yield (opcode, argument number) tuples for all + global-referencing instructions in *code*. + """ + code = getattr(code, 'co_code', b'') + if PY2: # pragma: no branch + code = map(ord, code) + + n = len(code) + i = 0 + extended_arg = 0 + while i < n: + op = code[i] + i += 1 + if op >= HAVE_ARGUMENT: + oparg = code[i] + code[i + 1] * 256 + extended_arg + extended_arg = 0 + i += 2 + if op == EXTENDED_ARG: + extended_arg = oparg * 65536 + if op in GLOBAL_OPS: + yield op, oparg + +else: + def _walk_global_ops(code): + """ + Yield (opcode, argument number) tuples for all + global-referencing instructions in *code*. + """ + for instr in dis.get_instructions(code): + op = instr.opcode + if op in GLOBAL_OPS: + yield op, instr.arg + + +def _extract_class_dict(cls): + """Retrieve a copy of the dict of a class without the inherited methods""" + clsdict = dict(cls.__dict__) # copy dict proxy to a dict + if len(cls.__bases__) == 1: + inherited_dict = cls.__bases__[0].__dict__ + else: + inherited_dict = {} + for base in reversed(cls.__bases__): + inherited_dict.update(base.__dict__) + to_remove = [] + for name, value in clsdict.items(): + try: + base_value = inherited_dict[name] + if value is base_value: + to_remove.append(name) + except KeyError: + pass + for name in to_remove: + clsdict.pop(name) + return clsdict + + +class CloudPickler(Pickler): + + dispatch = Pickler.dispatch.copy() + + def __init__(self, file, protocol=None): + if protocol is None: + protocol = DEFAULT_PROTOCOL + Pickler.__init__(self, file, protocol=protocol) + # map ids to dictionary. used to ensure that functions can share global env + self.globals_ref = {} + + def dump(self, obj): + self.inject_addons() + try: + return Pickler.dump(self, obj) + except RuntimeError as e: + if 'recursion' in e.args[0]: + msg = """Could not pickle object as excessively deep recursion required.""" + raise pickle.PicklingError(msg) + else: + raise + + def save_memoryview(self, obj): + self.save(obj.tobytes()) + + dispatch[memoryview] = save_memoryview + + if PY2: # pragma: no branch + def save_buffer(self, obj): + self.save(str(obj)) + + dispatch[buffer] = save_buffer # noqa: F821 'buffer' was removed in Python 3 + + def save_module(self, obj): + """ + Save a module as an import + """ + if _is_dynamic(obj): + self.save_reduce(dynamic_subimport, (obj.__name__, vars(obj)), + obj=obj) + else: + self.save_reduce(subimport, (obj.__name__,), obj=obj) + + dispatch[types.ModuleType] = save_module + + def save_codeobject(self, obj): + """ + Save a code object + """ + if PY3: # pragma: no branch + if hasattr(obj, "co_posonlyargcount"): # pragma: no branch + args = ( + obj.co_argcount, obj.co_posonlyargcount, + obj.co_kwonlyargcount, obj.co_nlocals, obj.co_stacksize, + obj.co_flags, obj.co_code, obj.co_consts, obj.co_names, + obj.co_varnames, obj.co_filename, obj.co_name, + obj.co_firstlineno, obj.co_lnotab, obj.co_freevars, + obj.co_cellvars + ) + else: + args = ( + obj.co_argcount, obj.co_kwonlyargcount, obj.co_nlocals, + obj.co_stacksize, obj.co_flags, obj.co_code, obj.co_consts, + obj.co_names, obj.co_varnames, obj.co_filename, + obj.co_name, obj.co_firstlineno, obj.co_lnotab, + obj.co_freevars, obj.co_cellvars + ) + else: + args = ( + obj.co_argcount, obj.co_nlocals, obj.co_stacksize, obj.co_flags, obj.co_code, + obj.co_consts, obj.co_names, obj.co_varnames, obj.co_filename, obj.co_name, + obj.co_firstlineno, obj.co_lnotab, obj.co_freevars, obj.co_cellvars + ) + self.save_reduce(types.CodeType, args, obj=obj) + + dispatch[types.CodeType] = save_codeobject + + def save_function(self, obj, name=None): + """ Registered with the dispatch to handle all function types. + + Determines what kind of function obj is (e.g. lambda, defined at + interactive prompt, etc) and handles the pickling appropriately. + """ + if _is_global(obj, name=name): + return Pickler.save_global(self, obj, name=name) + elif PYPY and isinstance(obj.__code__, builtin_code_type): + return self.save_pypy_builtin_func(obj) + else: + return self.save_function_tuple(obj) + + dispatch[types.FunctionType] = save_function + + def save_pypy_builtin_func(self, obj): + """Save pypy equivalent of builtin functions. + + PyPy does not have the concept of builtin-functions. Instead, + builtin-functions are simple function instances, but with a + builtin-code attribute. + Most of the time, builtin functions should be pickled by attribute. But + PyPy has flaky support for __qualname__, so some builtin functions such + as float.__new__ will be classified as dynamic. For this reason only, + we created this special routine. Because builtin-functions are not + expected to have closure or globals, there is no additional hack + (compared the one already implemented in pickle) to protect ourselves + from reference cycles. A simple (reconstructor, newargs, obj.__dict__) + tuple is save_reduced. + + Note also that PyPy improved their support for __qualname__ in v3.6, so + this routing should be removed when cloudpickle supports only PyPy 3.6 + and later. + """ + rv = (types.FunctionType, (obj.__code__, {}, obj.__name__, + obj.__defaults__, obj.__closure__), + obj.__dict__) + self.save_reduce(*rv, obj=obj) + + def _save_dynamic_enum(self, obj, clsdict): + """Special handling for dynamic Enum subclasses + + Use a dedicated Enum constructor (inspired by EnumMeta.__call__) as the + EnumMeta metaclass has complex initialization that makes the Enum + subclasses hold references to their own instances. + """ + members = dict((e.name, e.value) for e in obj) + + # Python 2.7 with enum34 can have no qualname: + qualname = getattr(obj, "__qualname__", None) + + self.save_reduce(_make_skeleton_enum, + (obj.__bases__, obj.__name__, qualname, members, + obj.__module__, _ensure_tracking(obj), None), + obj=obj) + + # Cleanup the clsdict that will be passed to _rehydrate_skeleton_class: + # Those attributes are already handled by the metaclass. + for attrname in ["_generate_next_value_", "_member_names_", + "_member_map_", "_member_type_", + "_value2member_map_"]: + clsdict.pop(attrname, None) + for member in members: + clsdict.pop(member) + + def save_dynamic_class(self, obj): + """Save a class that can't be stored as module global. + + This method is used to serialize classes that are defined inside + functions, or that otherwise can't be serialized as attribute lookups + from global modules. + """ + clsdict = _extract_class_dict(obj) + clsdict.pop('__weakref__', None) + + # For ABCMeta in python3.7+, remove _abc_impl as it is not picklable. + # This is a fix which breaks the cache but this only makes the first + # calls to issubclass slower. + if "_abc_impl" in clsdict: + import abc + (registry, _, _, _) = abc._get_dump(obj) + clsdict["_abc_impl"] = [subclass_weakref() + for subclass_weakref in registry] + + # On PyPy, __doc__ is a readonly attribute, so we need to include it in + # the initial skeleton class. This is safe because we know that the + # doc can't participate in a cycle with the original class. + type_kwargs = {'__doc__': clsdict.pop('__doc__', None)} + + if hasattr(obj, "__slots__"): + type_kwargs['__slots__'] = obj.__slots__ + # pickle string length optimization: member descriptors of obj are + # created automatically from obj's __slots__ attribute, no need to + # save them in obj's state + if isinstance(obj.__slots__, string_types): + clsdict.pop(obj.__slots__) + else: + for k in obj.__slots__: + clsdict.pop(k, None) + + # If type overrides __dict__ as a property, include it in the type + # kwargs. In Python 2, we can't set this attribute after construction. + __dict__ = clsdict.pop('__dict__', None) + if isinstance(__dict__, property): + type_kwargs['__dict__'] = __dict__ + + save = self.save + write = self.write + + # We write pickle instructions explicitly here to handle the + # possibility that the type object participates in a cycle with its own + # __dict__. We first write an empty "skeleton" version of the class and + # memoize it before writing the class' __dict__ itself. We then write + # instructions to "rehydrate" the skeleton class by restoring the + # attributes from the __dict__. + # + # A type can appear in a cycle with its __dict__ if an instance of the + # type appears in the type's __dict__ (which happens for the stdlib + # Enum class), or if the type defines methods that close over the name + # of the type, (which is common for Python 2-style super() calls). + + # Push the rehydration function. + save(_rehydrate_skeleton_class) + + # Mark the start of the args tuple for the rehydration function. + write(pickle.MARK) + + # Create and memoize an skeleton class with obj's name and bases. + if Enum is not None and issubclass(obj, Enum): + # Special handling of Enum subclasses + self._save_dynamic_enum(obj, clsdict) + else: + # "Regular" class definition: + tp = type(obj) + self.save_reduce(_make_skeleton_class, + (tp, obj.__name__, obj.__bases__, type_kwargs, + _ensure_tracking(obj), None), + obj=obj) + + # Now save the rest of obj's __dict__. Any references to obj + # encountered while saving will point to the skeleton class. + save(clsdict) + + # Write a tuple of (skeleton_class, clsdict). + write(pickle.TUPLE) + + # Call _rehydrate_skeleton_class(skeleton_class, clsdict) + write(pickle.REDUCE) + + def save_function_tuple(self, func): + """ Pickles an actual func object. + + A func comprises: code, globals, defaults, closure, and dict. We + extract and save these, injecting reducing functions at certain points + to recreate the func object. Keep in mind that some of these pieces + can contain a ref to the func itself. Thus, a naive save on these + pieces could trigger an infinite loop of save's. To get around that, + we first create a skeleton func object using just the code (this is + safe, since this won't contain a ref to the func), and memoize it as + soon as it's created. The other stuff can then be filled in later. + """ + if is_tornado_coroutine(func): + self.save_reduce(_rebuild_tornado_coroutine, (func.__wrapped__,), + obj=func) + return + + save = self.save + write = self.write + + code, f_globals, defaults, closure_values, dct, base_globals = self.extract_func_data(func) + + save(_fill_function) # skeleton function updater + write(pickle.MARK) # beginning of tuple that _fill_function expects + + # Extract currently-imported submodules used by func. Storing these + # modules in a smoke _cloudpickle_subimports attribute of the object's + # state will trigger the side effect of importing these modules at + # unpickling time (which is necessary for func to work correctly once + # depickled) + submodules = _find_imported_submodules( + code, + itertools.chain(f_globals.values(), closure_values or ()), + ) + + # create a skeleton function object and memoize it + save(_make_skel_func) + save(( + code, + len(closure_values) if closure_values is not None else -1, + base_globals, + )) + write(pickle.REDUCE) + self.memoize(func) + + # save the rest of the func data needed by _fill_function + state = { + 'globals': f_globals, + 'defaults': defaults, + 'dict': dct, + 'closure_values': closure_values, + 'module': func.__module__, + 'name': func.__name__, + 'doc': func.__doc__, + '_cloudpickle_submodules': submodules + } + if hasattr(func, '__annotations__') and sys.version_info >= (3, 7): + # Although annotations were added in Python3.4, It is not possible + # to properly pickle them until Python3.7. (See #193) + state['annotations'] = func.__annotations__ + if hasattr(func, '__qualname__'): + state['qualname'] = func.__qualname__ + if hasattr(func, '__kwdefaults__'): + state['kwdefaults'] = func.__kwdefaults__ + save(state) + write(pickle.TUPLE) + write(pickle.REDUCE) # applies _fill_function on the tuple + + def extract_func_data(self, func): + """ + Turn the function into a tuple of data necessary to recreate it: + code, globals, defaults, closure_values, dict + """ + code = func.__code__ + + # extract all global ref's + func_global_refs = _extract_code_globals(code) + + # process all variables referenced by global environment + f_globals = {} + for var in func_global_refs: + if var in func.__globals__: + f_globals[var] = func.__globals__[var] + + # defaults requires no processing + defaults = func.__defaults__ + + # process closure + closure = ( + list(map(_get_cell_contents, func.__closure__)) + if func.__closure__ is not None + else None + ) + + # save the dict + dct = func.__dict__ + + # base_globals represents the future global namespace of func at + # unpickling time. Looking it up and storing it in globals_ref allow + # functions sharing the same globals at pickling time to also + # share them once unpickled, at one condition: since globals_ref is + # an attribute of a Cloudpickler instance, and that a new CloudPickler is + # created each time pickle.dump or pickle.dumps is called, functions + # also need to be saved within the same invokation of + # cloudpickle.dump/cloudpickle.dumps (for example: cloudpickle.dumps([f1, f2])). There + # is no such limitation when using Cloudpickler.dump, as long as the + # multiple invokations are bound to the same Cloudpickler. + base_globals = self.globals_ref.setdefault(id(func.__globals__), {}) + + if base_globals == {}: + # Add module attributes used to resolve relative imports + # instructions inside func. + for k in ["__package__", "__name__", "__path__", "__file__"]: + # Some built-in functions/methods such as object.__new__ have + # their __globals__ set to None in PyPy + if func.__globals__ is not None and k in func.__globals__: + base_globals[k] = func.__globals__[k] + + return (code, f_globals, defaults, closure, dct, base_globals) + + if not PY3: # pragma: no branch + # Python3 comes with native reducers that allow builtin functions and + # methods pickling as module/class attributes. The following method + # extends this for python2. + # Please note that currently, neither pickle nor cloudpickle support + # dynamically created builtin functions/method pickling. + def save_builtin_function_or_method(self, obj): + is_bound = getattr(obj, '__self__', None) is not None + if is_bound: + # obj is a bound builtin method. + rv = (getattr, (obj.__self__, obj.__name__)) + return self.save_reduce(obj=obj, *rv) + + is_unbound = hasattr(obj, '__objclass__') + if is_unbound: + # obj is an unbound builtin method (accessed from its class) + rv = (getattr, (obj.__objclass__, obj.__name__)) + return self.save_reduce(obj=obj, *rv) + + # Otherwise, obj is not a method, but a function. Fallback to + # default pickling by attribute. + return Pickler.save_global(self, obj) + + dispatch[types.BuiltinFunctionType] = save_builtin_function_or_method + + # A comprehensive summary of the various kinds of builtin methods can + # be found in PEP 579: https://www.python.org/dev/peps/pep-0579/ + classmethod_descriptor_type = type(float.__dict__['fromhex']) + wrapper_descriptor_type = type(float.__repr__) + method_wrapper_type = type(1.5.__repr__) + + dispatch[classmethod_descriptor_type] = save_builtin_function_or_method + dispatch[wrapper_descriptor_type] = save_builtin_function_or_method + dispatch[method_wrapper_type] = save_builtin_function_or_method + + if sys.version_info[:2] < (3, 4): + method_descriptor = type(str.upper) + dispatch[method_descriptor] = save_builtin_function_or_method + + def save_getset_descriptor(self, obj): + return self.save_reduce(getattr, (obj.__objclass__, obj.__name__)) + + dispatch[types.GetSetDescriptorType] = save_getset_descriptor + + def save_global(self, obj, name=None, pack=struct.pack): + """ + Save a "global". + + The name of this method is somewhat misleading: all types get + dispatched here. + """ + if obj is type(None): + return self.save_reduce(type, (None,), obj=obj) + elif obj is type(Ellipsis): + return self.save_reduce(type, (Ellipsis,), obj=obj) + elif obj is type(NotImplemented): + return self.save_reduce(type, (NotImplemented,), obj=obj) + elif obj in _BUILTIN_TYPE_NAMES: + return self.save_reduce( + _builtin_type, (_BUILTIN_TYPE_NAMES[obj],), obj=obj) + elif name is not None: + Pickler.save_global(self, obj, name=name) + elif not _is_global(obj, name=name): + self.save_dynamic_class(obj) + else: + Pickler.save_global(self, obj, name=name) + + dispatch[type] = save_global + dispatch[types.ClassType] = save_global + + def save_instancemethod(self, obj): + # Memoization rarely is ever useful due to python bounding + if obj.__self__ is None: + self.save_reduce(getattr, (obj.im_class, obj.__name__)) + else: + if PY3: # pragma: no branch + self.save_reduce(types.MethodType, (obj.__func__, obj.__self__), obj=obj) + else: + self.save_reduce( + types.MethodType, + (obj.__func__, obj.__self__, type(obj.__self__)), obj=obj) + + dispatch[types.MethodType] = save_instancemethod + + def save_inst(self, obj): + """Inner logic to save instance. Based off pickle.save_inst""" + cls = obj.__class__ + + # Try the dispatch table (pickle module doesn't do it) + f = self.dispatch.get(cls) + if f: + f(self, obj) # Call unbound method with explicit self + return + + memo = self.memo + write = self.write + save = self.save + + if hasattr(obj, '__getinitargs__'): + args = obj.__getinitargs__() + len(args) # XXX Assert it's a sequence + pickle._keep_alive(args, memo) + else: + args = () + + write(pickle.MARK) + + if self.bin: + save(cls) + for arg in args: + save(arg) + write(pickle.OBJ) + else: + for arg in args: + save(arg) + write(pickle.INST + cls.__module__ + '\n' + cls.__name__ + '\n') + + self.memoize(obj) + + try: + getstate = obj.__getstate__ + except AttributeError: + stuff = obj.__dict__ + else: + stuff = getstate() + pickle._keep_alive(stuff, memo) + save(stuff) + write(pickle.BUILD) + + if PY2: # pragma: no branch + dispatch[types.InstanceType] = save_inst + + def save_property(self, obj): + # properties not correctly saved in python + self.save_reduce(property, (obj.fget, obj.fset, obj.fdel, obj.__doc__), obj=obj) + + dispatch[property] = save_property + + def save_classmethod(self, obj): + orig_func = obj.__func__ + self.save_reduce(type(obj), (orig_func,), obj=obj) + + dispatch[classmethod] = save_classmethod + dispatch[staticmethod] = save_classmethod + + def save_itemgetter(self, obj): + """itemgetter serializer (needed for namedtuple support)""" + class Dummy: + def __getitem__(self, item): + return item + items = obj(Dummy()) + if not isinstance(items, tuple): + items = (items,) + return self.save_reduce(operator.itemgetter, items) + + if type(operator.itemgetter) is type: + dispatch[operator.itemgetter] = save_itemgetter + + def save_attrgetter(self, obj): + """attrgetter serializer""" + class Dummy(object): + def __init__(self, attrs, index=None): + self.attrs = attrs + self.index = index + def __getattribute__(self, item): + attrs = object.__getattribute__(self, "attrs") + index = object.__getattribute__(self, "index") + if index is None: + index = len(attrs) + attrs.append(item) + else: + attrs[index] = ".".join([attrs[index], item]) + return type(self)(attrs, index) + attrs = [] + obj(Dummy(attrs)) + return self.save_reduce(operator.attrgetter, tuple(attrs)) + + if type(operator.attrgetter) is type: + dispatch[operator.attrgetter] = save_attrgetter + + def save_file(self, obj): + """Save a file""" + try: + import StringIO as pystringIO # we can't use cStringIO as it lacks the name attribute + except ImportError: + import io as pystringIO + + if not hasattr(obj, 'name') or not hasattr(obj, 'mode'): + raise pickle.PicklingError("Cannot pickle files that do not map to an actual file") + if obj is sys.stdout: + return self.save_reduce(getattr, (sys, 'stdout'), obj=obj) + if obj is sys.stderr: + return self.save_reduce(getattr, (sys, 'stderr'), obj=obj) + if obj is sys.stdin: + raise pickle.PicklingError("Cannot pickle standard input") + if obj.closed: + raise pickle.PicklingError("Cannot pickle closed files") + if hasattr(obj, 'isatty') and obj.isatty(): + raise pickle.PicklingError("Cannot pickle files that map to tty objects") + if 'r' not in obj.mode and '+' not in obj.mode: + raise pickle.PicklingError("Cannot pickle files that are not opened for reading: %s" % obj.mode) + + name = obj.name + + retval = pystringIO.StringIO() + + try: + # Read the whole file + curloc = obj.tell() + obj.seek(0) + contents = obj.read() + obj.seek(curloc) + except IOError: + raise pickle.PicklingError("Cannot pickle file %s as it cannot be read" % name) + retval.write(contents) + retval.seek(curloc) + + retval.name = name + self.save(retval) + self.memoize(obj) + + def save_ellipsis(self, obj): + self.save_reduce(_gen_ellipsis, ()) + + def save_not_implemented(self, obj): + self.save_reduce(_gen_not_implemented, ()) + + try: # Python 2 + dispatch[file] = save_file + except NameError: # Python 3 # pragma: no branch + dispatch[io.TextIOWrapper] = save_file + + dispatch[type(Ellipsis)] = save_ellipsis + dispatch[type(NotImplemented)] = save_not_implemented + + def save_weakset(self, obj): + self.save_reduce(weakref.WeakSet, (list(obj),)) + + dispatch[weakref.WeakSet] = save_weakset + + def save_logger(self, obj): + self.save_reduce(logging.getLogger, (obj.name,), obj=obj) + + dispatch[logging.Logger] = save_logger + + def save_root_logger(self, obj): + self.save_reduce(logging.getLogger, (), obj=obj) + + dispatch[logging.RootLogger] = save_root_logger + + if hasattr(types, "MappingProxyType"): # pragma: no branch + def save_mappingproxy(self, obj): + self.save_reduce(types.MappingProxyType, (dict(obj),), obj=obj) + + dispatch[types.MappingProxyType] = save_mappingproxy + + """Special functions for Add-on libraries""" + def inject_addons(self): + """Plug in system. Register additional pickling functions if modules already loaded""" + pass + + +# Tornado support + +def is_tornado_coroutine(func): + """ + Return whether *func* is a Tornado coroutine function. + Running coroutines are not supported. + """ + if 'tornado.gen' not in sys.modules: + return False + gen = sys.modules['tornado.gen'] + if not hasattr(gen, "is_coroutine_function"): + # Tornado version is too old + return False + return gen.is_coroutine_function(func) + + +def _rebuild_tornado_coroutine(func): + from tornado import gen + return gen.coroutine(func) + + +# Shorthands for legacy support + +def dump(obj, file, protocol=None): + """Serialize obj as bytes streamed into file + + protocol defaults to cloudpickle.DEFAULT_PROTOCOL which is an alias to + pickle.HIGHEST_PROTOCOL. This setting favors maximum communication speed + between processes running the same Python version. + + Set protocol=pickle.DEFAULT_PROTOCOL instead if you need to ensure + compatibility with older versions of Python. + """ + CloudPickler(file, protocol=protocol).dump(obj) + + +def dumps(obj, protocol=None): + """Serialize obj as a string of bytes allocated in memory + + protocol defaults to cloudpickle.DEFAULT_PROTOCOL which is an alias to + pickle.HIGHEST_PROTOCOL. This setting favors maximum communication speed + between processes running the same Python version. + + Set protocol=pickle.DEFAULT_PROTOCOL instead if you need to ensure + compatibility with older versions of Python. + """ + file = StringIO() + try: + cp = CloudPickler(file, protocol=protocol) + cp.dump(obj) + return file.getvalue() + finally: + file.close() + + +# including pickles unloading functions in this namespace +load = pickle.load +loads = pickle.loads + + +# hack for __import__ not working as desired +def subimport(name): + __import__(name) + return sys.modules[name] + + +def dynamic_subimport(name, vars): + mod = types.ModuleType(name) + mod.__dict__.update(vars) + return mod + + +def _gen_ellipsis(): + return Ellipsis + + +def _gen_not_implemented(): + return NotImplemented + + +def _get_cell_contents(cell): + try: + return cell.cell_contents + except ValueError: + # sentinel used by ``_fill_function`` which will leave the cell empty + return _empty_cell_value + + +def instance(cls): + """Create a new instance of a class. + + Parameters + ---------- + cls : type + The class to create an instance of. + + Returns + ------- + instance : cls + A new instance of ``cls``. + """ + return cls() + + +@instance +class _empty_cell_value(object): + """sentinel for empty closures + """ + @classmethod + def __reduce__(cls): + return cls.__name__ + + +def _fill_function(*args): + """Fills in the rest of function data into the skeleton function object + + The skeleton itself is create by _make_skel_func(). + """ + if len(args) == 2: + func = args[0] + state = args[1] + elif len(args) == 5: + # Backwards compat for cloudpickle v0.4.0, after which the `module` + # argument was introduced + func = args[0] + keys = ['globals', 'defaults', 'dict', 'closure_values'] + state = dict(zip(keys, args[1:])) + elif len(args) == 6: + # Backwards compat for cloudpickle v0.4.1, after which the function + # state was passed as a dict to the _fill_function it-self. + func = args[0] + keys = ['globals', 'defaults', 'dict', 'module', 'closure_values'] + state = dict(zip(keys, args[1:])) + else: + raise ValueError('Unexpected _fill_value arguments: %r' % (args,)) + + # - At pickling time, any dynamic global variable used by func is + # serialized by value (in state['globals']). + # - At unpickling time, func's __globals__ attribute is initialized by + # first retrieving an empty isolated namespace that will be shared + # with other functions pickled from the same original module + # by the same CloudPickler instance and then updated with the + # content of state['globals'] to populate the shared isolated + # namespace with all the global variables that are specifically + # referenced for this function. + func.__globals__.update(state['globals']) + + func.__defaults__ = state['defaults'] + func.__dict__ = state['dict'] + if 'annotations' in state: + func.__annotations__ = state['annotations'] + if 'doc' in state: + func.__doc__ = state['doc'] + if 'name' in state: + func.__name__ = state['name'] + if 'module' in state: + func.__module__ = state['module'] + if 'qualname' in state: + func.__qualname__ = state['qualname'] + if 'kwdefaults' in state: + func.__kwdefaults__ = state['kwdefaults'] + # _cloudpickle_subimports is a set of submodules that must be loaded for + # the pickled function to work correctly at unpickling time. Now that these + # submodules are depickled (hence imported), they can be removed from the + # object's state (the object state only served as a reference holder to + # these submodules) + if '_cloudpickle_submodules' in state: + state.pop('_cloudpickle_submodules') + + cells = func.__closure__ + if cells is not None: + for cell, value in zip(cells, state['closure_values']): + if value is not _empty_cell_value: + cell_set(cell, value) + + return func + + +def _make_empty_cell(): + if False: + # trick the compiler into creating an empty cell in our lambda + cell = None + raise AssertionError('this route should not be executed') + + return (lambda: cell).__closure__[0] + + +def _make_skel_func(code, cell_count, base_globals=None): + """ Creates a skeleton function object that contains just the provided + code and the correct number of cells in func_closure. All other + func attributes (e.g. func_globals) are empty. + """ + # This is backward-compatibility code: for cloudpickle versions between + # 0.5.4 and 0.7, base_globals could be a string or None. base_globals + # should now always be a dictionary. + if base_globals is None or isinstance(base_globals, str): + base_globals = {} + + base_globals['__builtins__'] = __builtins__ + + closure = ( + tuple(_make_empty_cell() for _ in range(cell_count)) + if cell_count >= 0 else + None + ) + return types.FunctionType(code, base_globals, None, None, closure) + + +def _make_skeleton_class(type_constructor, name, bases, type_kwargs, + class_tracker_id, extra): + """Build dynamic class with an empty __dict__ to be filled once memoized + + If class_tracker_id is not None, try to lookup an existing class definition + matching that id. If none is found, track a newly reconstructed class + definition under that id so that other instances stemming from the same + class id will also reuse this class definition. + + The "extra" variable is meant to be a dict (or None) that can be used for + forward compatibility shall the need arise. + """ + skeleton_class = type_constructor(name, bases, type_kwargs) + return _lookup_class_or_track(class_tracker_id, skeleton_class) + + +def _rehydrate_skeleton_class(skeleton_class, class_dict): + """Put attributes from `class_dict` back on `skeleton_class`. + + See CloudPickler.save_dynamic_class for more info. + """ + registry = None + for attrname, attr in class_dict.items(): + if attrname == "_abc_impl": + registry = attr + else: + setattr(skeleton_class, attrname, attr) + if registry is not None: + for subclass in registry: + skeleton_class.register(subclass) + + return skeleton_class + + +def _make_skeleton_enum(bases, name, qualname, members, module, + class_tracker_id, extra): + """Build dynamic enum with an empty __dict__ to be filled once memoized + + The creation of the enum class is inspired by the code of + EnumMeta._create_. + + If class_tracker_id is not None, try to lookup an existing enum definition + matching that id. If none is found, track a newly reconstructed enum + definition under that id so that other instances stemming from the same + class id will also reuse this enum definition. + + The "extra" variable is meant to be a dict (or None) that can be used for + forward compatibility shall the need arise. + """ + # enums always inherit from their base Enum class at the last position in + # the list of base classes: + enum_base = bases[-1] + metacls = enum_base.__class__ + classdict = metacls.__prepare__(name, bases) + + for member_name, member_value in members.items(): + classdict[member_name] = member_value + enum_class = metacls.__new__(metacls, name, bases, classdict) + enum_class.__module__ = module + + # Python 2.7 compat + if qualname is not None: + enum_class.__qualname__ = qualname + + return _lookup_class_or_track(class_tracker_id, enum_class) + + +def _is_dynamic(module): + """ + Return True if the module is special module that cannot be imported by its + name. + """ + # Quick check: module that have __file__ attribute are not dynamic modules. + if hasattr(module, '__file__'): + return False + + if hasattr(module, '__spec__'): + if module.__spec__ is not None: + return False + + # In PyPy, Some built-in modules such as _codecs can have their + # __spec__ attribute set to None despite being imported. For such + # modules, the ``_find_spec`` utility of the standard library is used. + parent_name = module.__name__.rpartition('.')[0] + if parent_name: # pragma: no cover + # This code handles the case where an imported package (and not + # module) remains with __spec__ set to None. It is however untested + # as no package in the PyPy stdlib has __spec__ set to None after + # it is imported. + try: + parent = sys.modules[parent_name] + except KeyError: + msg = "parent {!r} not in sys.modules" + raise ImportError(msg.format(parent_name)) + else: + pkgpath = parent.__path__ + else: + pkgpath = None + return _find_spec(module.__name__, pkgpath, module) is None + + else: + # Backward compat for Python 2 + import imp + try: + path = None + for part in module.__name__.split('.'): + if path is not None: + path = [path] + f, path, description = imp.find_module(part, path) + if f is not None: + f.close() + except ImportError: + return True + return False diff --git a/my_env/Lib/site-packages/joblib/externals/cloudpickle/cloudpickle_fast.py b/my_env/Lib/site-packages/joblib/externals/cloudpickle/cloudpickle_fast.py new file mode 100644 index 000000000..dfe554d62 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/cloudpickle/cloudpickle_fast.py @@ -0,0 +1,547 @@ +""" +New, fast version of the CloudPickler. + +This new CloudPickler class can now extend the fast C Pickler instead of the +previous Python implementation of the Pickler class. Because this functionality +is only available for Python versions 3.8+, a lot of backward-compatibility +code is also removed. + +Note that the C Pickler sublassing API is CPython-specific. Therefore, some +guards present in cloudpickle.py that were written to handle PyPy specificities +are not present in cloudpickle_fast.py +""" +import abc +import copyreg +import io +import itertools +import logging +import _pickle +import pickle +import sys +import types +import weakref + +from _pickle import Pickler + +from .cloudpickle import ( + _is_dynamic, _extract_code_globals, _BUILTIN_TYPE_NAMES, DEFAULT_PROTOCOL, + _find_imported_submodules, _get_cell_contents, _is_global, _builtin_type, + Enum, _ensure_tracking, _make_skeleton_class, _make_skeleton_enum, + _extract_class_dict, string_types, dynamic_subimport, subimport +) + +load, loads = _pickle.load, _pickle.loads + + +# Shorthands similar to pickle.dump/pickle.dumps +def dump(obj, file, protocol=None): + """Serialize obj as bytes streamed into file + + protocol defaults to cloudpickle.DEFAULT_PROTOCOL which is an alias to + pickle.HIGHEST_PROTOCOL. This setting favors maximum communication speed + between processes running the same Python version. + + Set protocol=pickle.DEFAULT_PROTOCOL instead if you need to ensure + compatibility with older versions of Python. + """ + CloudPickler(file, protocol=protocol).dump(obj) + + +def dumps(obj, protocol=None): + """Serialize obj as a string of bytes allocated in memory + + protocol defaults to cloudpickle.DEFAULT_PROTOCOL which is an alias to + pickle.HIGHEST_PROTOCOL. This setting favors maximum communication speed + between processes running the same Python version. + + Set protocol=pickle.DEFAULT_PROTOCOL instead if you need to ensure + compatibility with older versions of Python. + """ + with io.BytesIO() as file: + cp = CloudPickler(file, protocol=protocol) + cp.dump(obj) + return file.getvalue() + + +# COLLECTION OF OBJECTS __getnewargs__-LIKE METHODS +# ------------------------------------------------- + +def _class_getnewargs(obj): + type_kwargs = {} + if hasattr(obj, "__slots__"): + type_kwargs["__slots__"] = obj.__slots__ + + __dict__ = obj.__dict__.get('__dict__', None) + if isinstance(__dict__, property): + type_kwargs['__dict__'] = __dict__ + + return (type(obj), obj.__name__, obj.__bases__, type_kwargs, + _ensure_tracking(obj), None) + + +def _enum_getnewargs(obj): + members = dict((e.name, e.value) for e in obj) + return (obj.__bases__, obj.__name__, obj.__qualname__, members, + obj.__module__, _ensure_tracking(obj), None) + + +# COLLECTION OF OBJECTS RECONSTRUCTORS +# ------------------------------------ +def _file_reconstructor(retval): + return retval + + +# COLLECTION OF OBJECTS STATE GETTERS +# ----------------------------------- +def _function_getstate(func): + # - Put func's dynamic attributes (stored in func.__dict__) in state. These + # attributes will be restored at unpickling time using + # f.__dict__.update(state) + # - Put func's members into slotstate. Such attributes will be restored at + # unpickling time by iterating over slotstate and calling setattr(func, + # slotname, slotvalue) + slotstate = { + "__name__": func.__name__, + "__qualname__": func.__qualname__, + "__annotations__": func.__annotations__, + "__kwdefaults__": func.__kwdefaults__, + "__defaults__": func.__defaults__, + "__module__": func.__module__, + "__doc__": func.__doc__, + "__closure__": func.__closure__, + } + + f_globals_ref = _extract_code_globals(func.__code__) + f_globals = {k: func.__globals__[k] for k in f_globals_ref if k in + func.__globals__} + + closure_values = ( + list(map(_get_cell_contents, func.__closure__)) + if func.__closure__ is not None else () + ) + + # Extract currently-imported submodules used by func. Storing these modules + # in a smoke _cloudpickle_subimports attribute of the object's state will + # trigger the side effect of importing these modules at unpickling time + # (which is necessary for func to work correctly once depickled) + slotstate["_cloudpickle_submodules"] = _find_imported_submodules( + func.__code__, itertools.chain(f_globals.values(), closure_values)) + slotstate["__globals__"] = f_globals + + state = func.__dict__ + return state, slotstate + + +def _class_getstate(obj): + clsdict = _extract_class_dict(obj) + clsdict.pop('__weakref__', None) + + # For ABCMeta in python3.7+, remove _abc_impl as it is not picklable. + # This is a fix which breaks the cache but this only makes the first + # calls to issubclass slower. + if "_abc_impl" in clsdict: + (registry, _, _, _) = abc._get_dump(obj) + clsdict["_abc_impl"] = [subclass_weakref() + for subclass_weakref in registry] + if hasattr(obj, "__slots__"): + # pickle string length optimization: member descriptors of obj are + # created automatically from obj's __slots__ attribute, no need to + # save them in obj's state + if isinstance(obj.__slots__, string_types): + clsdict.pop(obj.__slots__) + else: + for k in obj.__slots__: + clsdict.pop(k, None) + + clsdict.pop('__dict__', None) # unpicklable property object + + return (clsdict, {}) + + +def _enum_getstate(obj): + clsdict, slotstate = _class_getstate(obj) + + members = dict((e.name, e.value) for e in obj) + # Cleanup the clsdict that will be passed to _rehydrate_skeleton_class: + # Those attributes are already handled by the metaclass. + for attrname in ["_generate_next_value_", "_member_names_", + "_member_map_", "_member_type_", + "_value2member_map_"]: + clsdict.pop(attrname, None) + for member in members: + clsdict.pop(member) + # Special handling of Enum subclasses + return clsdict, slotstate + + +# COLLECTIONS OF OBJECTS REDUCERS +# ------------------------------- +# A reducer is a function taking a single argument (obj), and that returns a +# tuple with all the necessary data to re-construct obj. Apart from a few +# exceptions (list, dict, bytes, int, etc.), a reducer is necessary to +# correctly pickle an object. +# While many built-in objects (Exceptions objects, instances of the "object" +# class, etc), are shipped with their own built-in reducer (invoked using +# obj.__reduce__), some do not. The following methods were created to "fill +# these holes". + +def _code_reduce(obj): + """codeobject reducer""" + args = ( + obj.co_argcount, obj.co_posonlyargcount, + obj.co_kwonlyargcount, obj.co_nlocals, obj.co_stacksize, + obj.co_flags, obj.co_code, obj.co_consts, obj.co_names, + obj.co_varnames, obj.co_filename, obj.co_name, + obj.co_firstlineno, obj.co_lnotab, obj.co_freevars, + obj.co_cellvars + ) + return types.CodeType, args + + +def _cell_reduce(obj): + """Cell (containing values of a function's free variables) reducer""" + try: + obj.cell_contents + except ValueError: # cell is empty + return types.CellType, () + else: + return types.CellType, (obj.cell_contents,) + + +def _classmethod_reduce(obj): + orig_func = obj.__func__ + return type(obj), (orig_func,) + + +def _file_reduce(obj): + """Save a file""" + import io + + if not hasattr(obj, "name") or not hasattr(obj, "mode"): + raise pickle.PicklingError( + "Cannot pickle files that do not map to an actual file" + ) + if obj is sys.stdout: + return getattr, (sys, "stdout") + if obj is sys.stderr: + return getattr, (sys, "stderr") + if obj is sys.stdin: + raise pickle.PicklingError("Cannot pickle standard input") + if obj.closed: + raise pickle.PicklingError("Cannot pickle closed files") + if hasattr(obj, "isatty") and obj.isatty(): + raise pickle.PicklingError( + "Cannot pickle files that map to tty objects" + ) + if "r" not in obj.mode and "+" not in obj.mode: + raise pickle.PicklingError( + "Cannot pickle files that are not opened for reading: %s" + % obj.mode + ) + + name = obj.name + + retval = io.StringIO() + + try: + # Read the whole file + curloc = obj.tell() + obj.seek(0) + contents = obj.read() + obj.seek(curloc) + except IOError: + raise pickle.PicklingError( + "Cannot pickle file %s as it cannot be read" % name + ) + retval.write(contents) + retval.seek(curloc) + + retval.name = name + return _file_reconstructor, (retval,) + + +def _getset_descriptor_reduce(obj): + return getattr, (obj.__objclass__, obj.__name__) + + +def _mappingproxy_reduce(obj): + return types.MappingProxyType, (dict(obj),) + + +def _memoryview_reduce(obj): + return bytes, (obj.tobytes(),) + + +def _module_reduce(obj): + if _is_dynamic(obj): + return dynamic_subimport, (obj.__name__, vars(obj)) + else: + return subimport, (obj.__name__,) + + +def _method_reduce(obj): + return (types.MethodType, (obj.__func__, obj.__self__)) + + +def _logger_reduce(obj): + return logging.getLogger, (obj.name,) + + +def _root_logger_reduce(obj): + return logging.getLogger, () + + +def _weakset_reduce(obj): + return weakref.WeakSet, (list(obj),) + + +def _dynamic_class_reduce(obj): + """ + Save a class that can't be stored as module global. + + This method is used to serialize classes that are defined inside + functions, or that otherwise can't be serialized as attribute lookups + from global modules. + """ + if Enum is not None and issubclass(obj, Enum): + return ( + _make_skeleton_enum, _enum_getnewargs(obj), _enum_getstate(obj), + None, None, _class_setstate + ) + else: + return ( + _make_skeleton_class, _class_getnewargs(obj), _class_getstate(obj), + None, None, _class_setstate + ) + + +def _class_reduce(obj): + """Select the reducer depending on the dynamic nature of the class obj""" + if obj is type(None): # noqa + return type, (None,) + elif obj is type(Ellipsis): + return type, (Ellipsis,) + elif obj is type(NotImplemented): + return type, (NotImplemented,) + elif obj in _BUILTIN_TYPE_NAMES: + return _builtin_type, (_BUILTIN_TYPE_NAMES[obj],) + elif not _is_global(obj): + return _dynamic_class_reduce(obj) + return NotImplemented + + +# COLLECTIONS OF OBJECTS STATE SETTERS +# ------------------------------------ +# state setters are called at unpickling time, once the object is created and +# it has to be updated to how it was at unpickling time. + + +def _function_setstate(obj, state): + """Update the state of a dynaamic function. + + As __closure__ and __globals__ are readonly attributes of a function, we + cannot rely on the native setstate routine of pickle.load_build, that calls + setattr on items of the slotstate. Instead, we have to modify them inplace. + """ + state, slotstate = state + obj.__dict__.update(state) + + obj_globals = slotstate.pop("__globals__") + obj_closure = slotstate.pop("__closure__") + # _cloudpickle_subimports is a set of submodules that must be loaded for + # the pickled function to work correctly at unpickling time. Now that these + # submodules are depickled (hence imported), they can be removed from the + # object's state (the object state only served as a reference holder to + # these submodules) + slotstate.pop("_cloudpickle_submodules") + + obj.__globals__.update(obj_globals) + obj.__globals__["__builtins__"] = __builtins__ + + if obj_closure is not None: + for i, cell in enumerate(obj_closure): + try: + value = cell.cell_contents + except ValueError: # cell is empty + continue + obj.__closure__[i].cell_contents = value + + for k, v in slotstate.items(): + setattr(obj, k, v) + + +def _class_setstate(obj, state): + state, slotstate = state + registry = None + for attrname, attr in state.items(): + if attrname == "_abc_impl": + registry = attr + else: + setattr(obj, attrname, attr) + if registry is not None: + for subclass in registry: + obj.register(subclass) + + return obj + + +class CloudPickler(Pickler): + """Fast C Pickler extension with additional reducing routines. + + CloudPickler's extensions exist into into: + + * its dispatch_table containing reducers that are called only if ALL + built-in saving functions were previously discarded. + * a special callback named "reducer_override", invoked before standard + function/class builtin-saving method (save_global), to serialize dynamic + functions + """ + + # cloudpickle's own dispatch_table, containing the additional set of + # objects (compared to the standard library pickle) that cloupickle can + # serialize. + dispatch = {} + dispatch[classmethod] = _classmethod_reduce + dispatch[io.TextIOWrapper] = _file_reduce + dispatch[logging.Logger] = _logger_reduce + dispatch[logging.RootLogger] = _root_logger_reduce + dispatch[memoryview] = _memoryview_reduce + dispatch[staticmethod] = _classmethod_reduce + dispatch[types.CellType] = _cell_reduce + dispatch[types.CodeType] = _code_reduce + dispatch[types.GetSetDescriptorType] = _getset_descriptor_reduce + dispatch[types.ModuleType] = _module_reduce + dispatch[types.MethodType] = _method_reduce + dispatch[types.MappingProxyType] = _mappingproxy_reduce + dispatch[weakref.WeakSet] = _weakset_reduce + + def __init__(self, file, protocol=None): + if protocol is None: + protocol = DEFAULT_PROTOCOL + Pickler.__init__(self, file, protocol=protocol) + # map functions __globals__ attribute ids, to ensure that functions + # sharing the same global namespace at pickling time also share their + # global namespace at unpickling time. + self.globals_ref = {} + + # Take into account potential custom reducers registered by external + # modules + self.dispatch_table = copyreg.dispatch_table.copy() + self.dispatch_table.update(self.dispatch) + self.proto = int(protocol) + + def reducer_override(self, obj): + """Type-agnostic reducing callback for function and classes. + + For performance reasons, subclasses of the C _pickle.Pickler class + cannot register custom reducers for functions and classes in the + dispatch_table. Reducer for such types must instead implemented in the + special reducer_override method. + + Note that method will be called for any object except a few + builtin-types (int, lists, dicts etc.), which differs from reducers in + the Pickler's dispatch_table, each of them being invoked for objects of + a specific type only. + + This property comes in handy for classes: although most classes are + instances of the ``type`` metaclass, some of them can be instances of + other custom metaclasses (such as enum.EnumMeta for example). In + particular, the metaclass will likely not be known in advance, and thus + cannot be special-cased using an entry in the dispatch_table. + reducer_override, among other things, allows us to register a reducer + that will be called for any class, independently of its type. + + + Notes: + + * reducer_override has the priority over dispatch_table-registered + reducers. + * reducer_override can be used to fix other limitations of cloudpickle + for other types that suffered from type-specific reducers, such as + Exceptions. See https://github.com/cloudpipe/cloudpickle/issues/248 + """ + t = type(obj) + try: + is_anyclass = issubclass(t, type) + except TypeError: # t is not a class (old Boost; see SF #502085) + is_anyclass = False + + if is_anyclass: + return _class_reduce(obj) + elif isinstance(obj, types.FunctionType): + return self._function_reduce(obj) + else: + # fallback to save_global, including the Pickler's distpatch_table + return NotImplemented + + # function reducers are defined as instance methods of CloudPickler + # objects, as they rely on a CloudPickler attribute (globals_ref) + def _dynamic_function_reduce(self, func): + """Reduce a function that is not pickleable via attribute lookup.""" + newargs = self._function_getnewargs(func) + state = _function_getstate(func) + return (types.FunctionType, newargs, state, None, None, + _function_setstate) + + def _function_reduce(self, obj): + """Reducer for function objects. + + If obj is a top-level attribute of a file-backed module, this + reducer returns NotImplemented, making the CloudPickler fallback to + traditional _pickle.Pickler routines to save obj. Otherwise, it reduces + obj using a custom cloudpickle reducer designed specifically to handle + dynamic functions. + + As opposed to cloudpickle.py, There no special handling for builtin + pypy functions because cloudpickle_fast is CPython-specific. + """ + if _is_global(obj): + return NotImplemented + else: + return self._dynamic_function_reduce(obj) + + def _function_getnewargs(self, func): + code = func.__code__ + + # base_globals represents the future global namespace of func at + # unpickling time. Looking it up and storing it in + # CloudpiPickler.globals_ref allow functions sharing the same globals + # at pickling time to also share them once unpickled, at one condition: + # since globals_ref is an attribute of a CloudPickler instance, and + # that a new CloudPickler is created each time pickle.dump or + # pickle.dumps is called, functions also need to be saved within the + # same invocation of cloudpickle.dump/cloudpickle.dumps (for example: + # cloudpickle.dumps([f1, f2])). There is no such limitation when using + # CloudPickler.dump, as long as the multiple invocations are bound to + # the same CloudPickler. + base_globals = self.globals_ref.setdefault(id(func.__globals__), {}) + + if base_globals == {}: + # Add module attributes used to resolve relative imports + # instructions inside func. + for k in ["__package__", "__name__", "__path__", "__file__"]: + if k in func.__globals__: + base_globals[k] = func.__globals__[k] + + # Do not bind the free variables before the function is created to + # avoid infinite recursion. + if func.__closure__ is None: + closure = None + else: + closure = tuple( + types.CellType() for _ in range(len(code.co_freevars))) + + return code, base_globals, None, None, closure + + def dump(self, obj): + try: + return Pickler.dump(self, obj) + except RuntimeError as e: + if "recursion" in e.args[0]: + msg = ( + "Could not pickle object as excessively deep recursion " + "required." + ) + raise pickle.PicklingError(msg) + else: + raise diff --git a/my_env/Lib/site-packages/joblib/externals/loky/__init__.py b/my_env/Lib/site-packages/joblib/externals/loky/__init__.py new file mode 100644 index 000000000..374ee266a --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/__init__.py @@ -0,0 +1,25 @@ +r"""The :mod:`loky` module manages a pool of worker that can be re-used across time. +It provides a robust and dynamic implementation os the +:class:`ProcessPoolExecutor` and a function :func:`get_reusable_executor` which +hide the pool management under the hood. +""" +from ._base import Executor, Future +from ._base import wait, as_completed +from ._base import TimeoutError, CancelledError +from ._base import ALL_COMPLETED, FIRST_COMPLETED, FIRST_EXCEPTION + +from .backend.context import cpu_count +from .backend.reduction import set_loky_pickler +from .reusable_executor import get_reusable_executor +from .cloudpickle_wrapper import wrap_non_picklable_objects +from .process_executor import BrokenProcessPool, ProcessPoolExecutor + + +__all__ = ["get_reusable_executor", "cpu_count", "wait", "as_completed", + "Future", "Executor", "ProcessPoolExecutor", + "BrokenProcessPool", "CancelledError", "TimeoutError", + "FIRST_COMPLETED", "FIRST_EXCEPTION", "ALL_COMPLETED", + "wrap_non_picklable_objects", "set_loky_pickler"] + + +__version__ = '2.6.0' diff --git a/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..6170fad7a Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/_base.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/_base.cpython-37.pyc new file mode 100644 index 000000000..8d298edf7 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/_base.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/cloudpickle_wrapper.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/cloudpickle_wrapper.cpython-37.pyc new file mode 100644 index 000000000..71a148fda Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/cloudpickle_wrapper.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/process_executor.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/process_executor.cpython-37.pyc new file mode 100644 index 000000000..6fde2d1d1 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/process_executor.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/reusable_executor.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/reusable_executor.cpython-37.pyc new file mode 100644 index 000000000..c262680c2 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/__pycache__/reusable_executor.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/_base.py b/my_env/Lib/site-packages/joblib/externals/loky/_base.py new file mode 100644 index 000000000..92422bbf3 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/_base.py @@ -0,0 +1,627 @@ +############################################################################### +# Backport concurrent.futures for python2.7/3.3 +# +# author: Thomas Moreau and Olivier Grisel +# +# adapted from concurrent/futures/_base.py (17/02/2017) +# * Do not use yield from +# * Use old super syntax +# +# Copyright 2009 Brian Quinlan. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +import sys +import time +import logging +import threading +import collections + + +if sys.version_info[:2] >= (3, 3): + + from concurrent.futures import wait, as_completed + from concurrent.futures import TimeoutError, CancelledError + from concurrent.futures import Executor, Future as _BaseFuture + + from concurrent.futures import FIRST_EXCEPTION + from concurrent.futures import ALL_COMPLETED, FIRST_COMPLETED + + from concurrent.futures._base import LOGGER + from concurrent.futures._base import PENDING, RUNNING, CANCELLED + from concurrent.futures._base import CANCELLED_AND_NOTIFIED, FINISHED +else: + + FIRST_COMPLETED = 'FIRST_COMPLETED' + FIRST_EXCEPTION = 'FIRST_EXCEPTION' + ALL_COMPLETED = 'ALL_COMPLETED' + _AS_COMPLETED = '_AS_COMPLETED' + + # Possible future states (for internal use by the futures package). + PENDING = 'PENDING' + RUNNING = 'RUNNING' + # The future was cancelled by the user... + CANCELLED = 'CANCELLED' + # ...and _Waiter.add_cancelled() was called by a worker. + CANCELLED_AND_NOTIFIED = 'CANCELLED_AND_NOTIFIED' + FINISHED = 'FINISHED' + + _FUTURE_STATES = [ + PENDING, + RUNNING, + CANCELLED, + CANCELLED_AND_NOTIFIED, + FINISHED + ] + + _STATE_TO_DESCRIPTION_MAP = { + PENDING: "pending", + RUNNING: "running", + CANCELLED: "cancelled", + CANCELLED_AND_NOTIFIED: "cancelled", + FINISHED: "finished" + } + + # Logger for internal use by the futures package. + LOGGER = logging.getLogger("concurrent.futures") + + class Error(Exception): + """Base class for all future-related exceptions.""" + pass + + class CancelledError(Error): + """The Future was cancelled.""" + pass + + class TimeoutError(Error): + """The operation exceeded the given deadline.""" + pass + + class _Waiter(object): + """Provides the event that wait() and as_completed() block on.""" + def __init__(self): + self.event = threading.Event() + self.finished_futures = [] + + def add_result(self, future): + self.finished_futures.append(future) + + def add_exception(self, future): + self.finished_futures.append(future) + + def add_cancelled(self, future): + self.finished_futures.append(future) + + class _AsCompletedWaiter(_Waiter): + """Used by as_completed().""" + + def __init__(self): + super(_AsCompletedWaiter, self).__init__() + self.lock = threading.Lock() + + def add_result(self, future): + with self.lock: + super(_AsCompletedWaiter, self).add_result(future) + self.event.set() + + def add_exception(self, future): + with self.lock: + super(_AsCompletedWaiter, self).add_exception(future) + self.event.set() + + def add_cancelled(self, future): + with self.lock: + super(_AsCompletedWaiter, self).add_cancelled(future) + self.event.set() + + class _FirstCompletedWaiter(_Waiter): + """Used by wait(return_when=FIRST_COMPLETED).""" + + def add_result(self, future): + super(_FirstCompletedWaiter, self).add_result(future) + self.event.set() + + def add_exception(self, future): + super(_FirstCompletedWaiter, self).add_exception(future) + self.event.set() + + def add_cancelled(self, future): + super(_FirstCompletedWaiter, self).add_cancelled(future) + self.event.set() + + class _AllCompletedWaiter(_Waiter): + """Used by wait(return_when=FIRST_EXCEPTION and ALL_COMPLETED).""" + + def __init__(self, num_pending_calls, stop_on_exception): + self.num_pending_calls = num_pending_calls + self.stop_on_exception = stop_on_exception + self.lock = threading.Lock() + super(_AllCompletedWaiter, self).__init__() + + def _decrement_pending_calls(self): + with self.lock: + self.num_pending_calls -= 1 + if not self.num_pending_calls: + self.event.set() + + def add_result(self, future): + super(_AllCompletedWaiter, self).add_result(future) + self._decrement_pending_calls() + + def add_exception(self, future): + super(_AllCompletedWaiter, self).add_exception(future) + if self.stop_on_exception: + self.event.set() + else: + self._decrement_pending_calls() + + def add_cancelled(self, future): + super(_AllCompletedWaiter, self).add_cancelled(future) + self._decrement_pending_calls() + + class _AcquireFutures(object): + """A context manager that does an ordered acquire of Future conditions. + """ + + def __init__(self, futures): + self.futures = sorted(futures, key=id) + + def __enter__(self): + for future in self.futures: + future._condition.acquire() + + def __exit__(self, *args): + for future in self.futures: + future._condition.release() + + def _create_and_install_waiters(fs, return_when): + if return_when == _AS_COMPLETED: + waiter = _AsCompletedWaiter() + elif return_when == FIRST_COMPLETED: + waiter = _FirstCompletedWaiter() + else: + pending_count = sum( + f._state not in [CANCELLED_AND_NOTIFIED, FINISHED] + for f in fs) + + if return_when == FIRST_EXCEPTION: + waiter = _AllCompletedWaiter(pending_count, + stop_on_exception=True) + elif return_when == ALL_COMPLETED: + waiter = _AllCompletedWaiter(pending_count, + stop_on_exception=False) + else: + raise ValueError("Invalid return condition: %r" % return_when) + + for f in fs: + f._waiters.append(waiter) + + return waiter + + def as_completed(fs, timeout=None): + """An iterator over the given futures that yields each as it completes. + + Args: + fs: The sequence of Futures (possibly created by different + Executors) to iterate over. + timeout: The maximum number of seconds to wait. If None, then there + is no limit on the wait time. + + Returns: + An iterator that yields the given Futures as they complete + (finished or cancelled). If any given Futures are duplicated, they + will be returned once. + + Raises: + TimeoutError: If the entire result iterator could not be generated + before the given timeout. + """ + if timeout is not None: + end_time = timeout + time.time() + + fs = set(fs) + with _AcquireFutures(fs): + finished = set( + f for f in fs + if f._state in [CANCELLED_AND_NOTIFIED, FINISHED]) + pending = fs - finished + waiter = _create_and_install_waiters(fs, _AS_COMPLETED) + + try: + for future in finished: + yield future + + while pending: + if timeout is None: + wait_timeout = None + else: + wait_timeout = end_time - time.time() + if wait_timeout < 0: + raise TimeoutError('%d (of %d) futures unfinished' % ( + len(pending), len(fs))) + + waiter.event.wait(wait_timeout) + + with waiter.lock: + finished = waiter.finished_futures + waiter.finished_futures = [] + waiter.event.clear() + + for future in finished: + yield future + pending.remove(future) + + finally: + for f in fs: + with f._condition: + f._waiters.remove(waiter) + + DoneAndNotDoneFutures = collections.namedtuple( + 'DoneAndNotDoneFutures', 'done not_done') + + def wait(fs, timeout=None, return_when=ALL_COMPLETED): + """Wait for the futures in the given sequence to complete. + + Args: + fs: The sequence of Futures (possibly created by different + Executors) to wait upon. + timeout: The maximum number of seconds to wait. If None, then there + is no limit on the wait time. + return_when: Indicates when this function should return. The + options are: + + FIRST_COMPLETED - Return when any future finishes or is + cancelled. + FIRST_EXCEPTION - Return when any future finishes by raising an + exception. If no future raises an exception + then it is equivalent to ALL_COMPLETED. + ALL_COMPLETED - Return when all futures finish or are + cancelled. + + Returns: + A named 2-tuple of sets. The first set, named 'done', contains the + futures that completed (is finished or cancelled) before the wait + completed. The second set, named 'not_done', contains uncompleted + futures. + """ + with _AcquireFutures(fs): + done = set(f for f in fs + if f._state in [CANCELLED_AND_NOTIFIED, FINISHED]) + not_done = set(fs) - done + + if (return_when == FIRST_COMPLETED) and done: + return DoneAndNotDoneFutures(done, not_done) + elif (return_when == FIRST_EXCEPTION) and done: + if any(f for f in done + if not f.cancelled() and f.exception() is not None): + return DoneAndNotDoneFutures(done, not_done) + + if len(done) == len(fs): + return DoneAndNotDoneFutures(done, not_done) + + waiter = _create_and_install_waiters(fs, return_when) + + waiter.event.wait(timeout) + for f in fs: + with f._condition: + f._waiters.remove(waiter) + + done.update(waiter.finished_futures) + return DoneAndNotDoneFutures(done, set(fs) - done) + + class _BaseFuture(object): + """Represents the result of an asynchronous computation.""" + + def __init__(self): + """Initializes the future. Should not be called by clients.""" + self._condition = threading.Condition() + self._state = PENDING + self._result = None + self._exception = None + self._waiters = [] + self._done_callbacks = [] + + def __repr__(self): + with self._condition: + if self._state == FINISHED: + if self._exception: + return '<%s at %#x state=%s raised %s>' % ( + self.__class__.__name__, + id(self), + _STATE_TO_DESCRIPTION_MAP[self._state], + self._exception.__class__.__name__) + else: + return '<%s at %#x state=%s returned %s>' % ( + self.__class__.__name__, + id(self), + _STATE_TO_DESCRIPTION_MAP[self._state], + self._result.__class__.__name__) + return '<%s at %#x state=%s>' % ( + self.__class__.__name__, + id(self), + _STATE_TO_DESCRIPTION_MAP[self._state]) + + def cancel(self): + """Cancel the future if possible. + + Returns True if the future was cancelled, False otherwise. A future + cannot be cancelled if it is running or has already completed. + """ + with self._condition: + if self._state in [RUNNING, FINISHED]: + return False + + if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]: + return True + + self._state = CANCELLED + self._condition.notify_all() + + self._invoke_callbacks() + return True + + def cancelled(self): + """Return True if the future was cancelled.""" + with self._condition: + return self._state in [CANCELLED, CANCELLED_AND_NOTIFIED] + + def running(self): + """Return True if the future is currently executing.""" + with self._condition: + return self._state == RUNNING + + def done(self): + """Return True of the future was cancelled or finished executing. + """ + with self._condition: + return self._state in [CANCELLED, CANCELLED_AND_NOTIFIED, + FINISHED] + + def __get_result(self): + if self._exception: + raise self._exception + else: + return self._result + + def add_done_callback(self, fn): + """Attaches a callable that will be called when the future finishes. + + Args: + fn: A callable that will be called with this future as its only + argument when the future completes or is cancelled. The + callable will always be called by a thread in the same + process in which it was added. If the future has already + completed or been cancelled then the callable will be + called immediately. These callables are called in the order + that they were added. + """ + with self._condition: + if self._state not in [CANCELLED, CANCELLED_AND_NOTIFIED, + FINISHED]: + self._done_callbacks.append(fn) + return + fn(self) + + def result(self, timeout=None): + """Return the result of the call that the future represents. + + Args: + timeout: The number of seconds to wait for the result if the + future isn't done. If None, then there is no limit on the + wait time. + + Returns: + The result of the call that the future represents. + + Raises: + CancelledError: If the future was cancelled. + TimeoutError: If the future didn't finish executing before the + given timeout. + Exception: If the call raised then that exception will be + raised. + """ + with self._condition: + if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]: + raise CancelledError() + elif self._state == FINISHED: + return self.__get_result() + + self._condition.wait(timeout) + + if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]: + raise CancelledError() + elif self._state == FINISHED: + return self.__get_result() + else: + raise TimeoutError() + + def exception(self, timeout=None): + """Return the exception raised by the call that the future + represents. + + Args: + timeout: The number of seconds to wait for the exception if the + future isn't done. If None, then there is no limit on the + wait time. + + Returns: + The exception raised by the call that the future represents or + None if the call completed without raising. + + Raises: + CancelledError: If the future was cancelled. + TimeoutError: If the future didn't finish executing before the + given timeout. + """ + + with self._condition: + if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]: + raise CancelledError() + elif self._state == FINISHED: + return self._exception + + self._condition.wait(timeout) + + if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]: + raise CancelledError() + elif self._state == FINISHED: + return self._exception + else: + raise TimeoutError() + + # The following methods should only be used by Executors and in tests. + def set_running_or_notify_cancel(self): + """Mark the future as running or process any cancel notifications. + + Should only be used by Executor implementations and unit tests. + + If the future has been cancelled (cancel() was called and returned + True) then any threads waiting on the future completing (though + calls to as_completed() or wait()) are notified and False is + returned. + + If the future was not cancelled then it is put in the running state + (future calls to running() will return True) and True is returned. + + This method should be called by Executor implementations before + executing the work associated with this future. If this method + returns False then the work should not be executed. + + Returns: + False if the Future was cancelled, True otherwise. + + Raises: + RuntimeError: if this method was already called or if + set_result() or set_exception() was called. + """ + with self._condition: + if self._state == CANCELLED: + self._state = CANCELLED_AND_NOTIFIED + for waiter in self._waiters: + waiter.add_cancelled(self) + # self._condition.notify_all() is not necessary because + # self.cancel() triggers a notification. + return False + elif self._state == PENDING: + self._state = RUNNING + return True + else: + LOGGER.critical('Future %s in unexpected state: %s', + id(self), + self._state) + raise RuntimeError('Future in unexpected state') + + def set_result(self, result): + """Sets the return value of work associated with the future. + + Should only be used by Executor implementations and unit tests. + """ + with self._condition: + self._result = result + self._state = FINISHED + for waiter in self._waiters: + waiter.add_result(self) + self._condition.notify_all() + self._invoke_callbacks() + + def set_exception(self, exception): + """Sets the result of the future as being the given exception. + + Should only be used by Executor implementations and unit tests. + """ + with self._condition: + self._exception = exception + self._state = FINISHED + for waiter in self._waiters: + waiter.add_exception(self) + self._condition.notify_all() + self._invoke_callbacks() + + class Executor(object): + """This is an abstract base class for concrete asynchronous executors. + """ + + def submit(self, fn, *args, **kwargs): + """Submits a callable to be executed with the given arguments. + + Schedules the callable to be executed as fn(*args, **kwargs) and + returns a Future instance representing the execution of the + callable. + + Returns: + A Future representing the given call. + """ + raise NotImplementedError() + + def map(self, fn, *iterables, **kwargs): + """Returns an iterator equivalent to map(fn, iter). + + Args: + fn: A callable that will take as many arguments as there are + passed iterables. + timeout: The maximum number of seconds to wait. If None, then + there is no limit on the wait time. + chunksize: The size of the chunks the iterable will be broken + into before being passed to a child process. This argument + is only used by ProcessPoolExecutor; it is ignored by + ThreadPoolExecutor. + + Returns: + An iterator equivalent to: map(func, *iterables) but the calls + may be evaluated out-of-order. + + Raises: + TimeoutError: If the entire result iterator could not be + generated before the given timeout. + Exception: If fn(*args) raises for any values. + """ + timeout = kwargs.get('timeout') + if timeout is not None: + end_time = timeout + time.time() + + fs = [self.submit(fn, *args) for args in zip(*iterables)] + + # Yield must be hidden in closure so that the futures are submitted + # before the first iterator value is required. + def result_iterator(): + try: + for future in fs: + if timeout is None: + yield future.result() + else: + yield future.result(end_time - time.time()) + finally: + for future in fs: + future.cancel() + return result_iterator() + + def shutdown(self, wait=True): + """Clean-up the resources associated with the Executor. + + It is safe to call this method several times. Otherwise, no other + methods can be called after this one. + + Args: + wait: If True then shutdown will not return until all running + futures have finished executing and the resources used by + the executor have been reclaimed. + """ + pass + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.shutdown(wait=True) + return False + + +# To make loky._base.Future instances awaitable by concurrent.futures.wait, +# derive our custom Future class from _BaseFuture. _invoke_callback is the only +# modification made to this class in loky. +class Future(_BaseFuture): + def _invoke_callbacks(self): + for callback in self._done_callbacks: + try: + callback(self) + except BaseException: + LOGGER.exception('exception calling callback for %r', self) diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__init__.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/__init__.py new file mode 100644 index 000000000..a65ce0e8b --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/__init__.py @@ -0,0 +1,16 @@ +import os +import sys + +from .context import get_context + +if sys.version_info > (3, 4): + + def _make_name(): + name = '/loky-%i-%s' % (os.getpid(), next(synchronize.SemLock._rand)) + return name + + # monkey patch the name creation for multiprocessing + from multiprocessing import synchronize + synchronize.SemLock._make_name = staticmethod(_make_name) + +__all__ = ["get_context"] diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..faf09e270 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/_posix_reduction.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/_posix_reduction.cpython-37.pyc new file mode 100644 index 000000000..1e7f224a2 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/_posix_reduction.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/_posix_wait.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/_posix_wait.cpython-37.pyc new file mode 100644 index 000000000..fd472c600 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/_posix_wait.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/_win_reduction.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/_win_reduction.cpython-37.pyc new file mode 100644 index 000000000..e960f53f8 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/_win_reduction.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/_win_wait.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/_win_wait.cpython-37.pyc new file mode 100644 index 000000000..fd610eb6b Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/_win_wait.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/compat.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/compat.cpython-37.pyc new file mode 100644 index 000000000..e1647d097 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/compat.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/compat_posix.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/compat_posix.cpython-37.pyc new file mode 100644 index 000000000..776b9f0a8 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/compat_posix.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/compat_win32.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/compat_win32.cpython-37.pyc new file mode 100644 index 000000000..d31892406 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/compat_win32.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/context.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/context.cpython-37.pyc new file mode 100644 index 000000000..98740d53e Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/context.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/fork_exec.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/fork_exec.cpython-37.pyc new file mode 100644 index 000000000..eede40c7d Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/fork_exec.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/managers.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/managers.cpython-37.pyc new file mode 100644 index 000000000..e9f2c27a1 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/managers.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/popen_loky_posix.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/popen_loky_posix.cpython-37.pyc new file mode 100644 index 000000000..38217b67a Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/popen_loky_posix.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/popen_loky_win32.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/popen_loky_win32.cpython-37.pyc new file mode 100644 index 000000000..5323615db Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/popen_loky_win32.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/process.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/process.cpython-37.pyc new file mode 100644 index 000000000..762248d4f Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/process.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/queues.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/queues.cpython-37.pyc new file mode 100644 index 000000000..5290d5ac9 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/queues.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/reduction.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/reduction.cpython-37.pyc new file mode 100644 index 000000000..3a4c3a91e Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/reduction.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/resource_tracker.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/resource_tracker.cpython-37.pyc new file mode 100644 index 000000000..7654cc76f Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/resource_tracker.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/semlock.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/semlock.cpython-37.pyc new file mode 100644 index 000000000..d3ba3ce96 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/semlock.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/spawn.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/spawn.cpython-37.pyc new file mode 100644 index 000000000..c0892096a Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/spawn.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/synchronize.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/synchronize.cpython-37.pyc new file mode 100644 index 000000000..f929ab7bd Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/synchronize.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/utils.cpython-37.pyc b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/utils.cpython-37.pyc new file mode 100644 index 000000000..e1c850315 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/externals/loky/backend/__pycache__/utils.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/_posix_reduction.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/_posix_reduction.py new file mode 100644 index 000000000..e0e394d3c --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/_posix_reduction.py @@ -0,0 +1,76 @@ +############################################################################### +# Extra reducers for Unix based system and connections objects +# +# author: Thomas Moreau and Olivier Grisel +# +# adapted from multiprocessing/reduction.py (17/02/2017) +# * Add adapted reduction for LokyProcesses and socket/Connection +# +import os +import sys +import socket +import _socket + +from .reduction import register +from .context import get_spawning_popen + +if sys.version_info >= (3, 3): + from multiprocessing.connection import Connection +else: + from _multiprocessing import Connection + + +HAVE_SEND_HANDLE = (hasattr(socket, 'CMSG_LEN') and + hasattr(socket, 'SCM_RIGHTS') and + hasattr(socket.socket, 'sendmsg')) + + +def _mk_inheritable(fd): + if sys.version_info[:2] > (3, 3): + os.set_inheritable(fd, True) + return fd + + +def DupFd(fd): + '''Return a wrapper for an fd.''' + popen_obj = get_spawning_popen() + if popen_obj is not None: + return popen_obj.DupFd(popen_obj.duplicate_for_child(fd)) + elif HAVE_SEND_HANDLE and sys.version_info[:2] > (3, 3): + from multiprocessing import resource_sharer + return resource_sharer.DupFd(fd) + else: + raise TypeError( + 'Cannot pickle connection object. This object can only be ' + 'passed when spawning a new process' + ) + + +if sys.version_info[:2] != (3, 3): + def _reduce_socket(s): + df = DupFd(s.fileno()) + return _rebuild_socket, (df, s.family, s.type, s.proto) + + def _rebuild_socket(df, family, type, proto): + fd = df.detach() + return socket.fromfd(fd, family, type, proto) +else: + from multiprocessing.reduction import reduce_socket as _reduce_socket + + +register(socket.socket, _reduce_socket) +register(_socket.socket, _reduce_socket) + + +if sys.version_info[:2] != (3, 3): + def reduce_connection(conn): + df = DupFd(conn.fileno()) + return rebuild_connection, (df, conn.readable, conn.writable) + + def rebuild_connection(df, readable, writable): + fd = df.detach() + return Connection(fd, readable, writable) +else: + from multiprocessing.reduction import reduce_connection + +register(Connection, reduce_connection) diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/_posix_wait.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/_posix_wait.py new file mode 100644 index 000000000..d935882dc --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/_posix_wait.py @@ -0,0 +1,105 @@ +############################################################################### +# Compat for wait function on UNIX based system +# +# author: Thomas Moreau and Olivier Grisel +# +# adapted from multiprocessing/connection.py (17/02/2017) +# * Backport wait function to python2.7 +# + +import platform +import select +import socket +import errno +SYSTEM = platform.system() + +try: + import ctypes +except ImportError: # pragma: no cover + ctypes = None # noqa + +if SYSTEM == 'Darwin' and ctypes is not None: + from ctypes.util import find_library + libSystem = ctypes.CDLL(find_library('libSystem.dylib')) + CoreServices = ctypes.CDLL(find_library('CoreServices'), + use_errno=True) + mach_absolute_time = libSystem.mach_absolute_time + mach_absolute_time.restype = ctypes.c_uint64 + absolute_to_nanoseconds = CoreServices.AbsoluteToNanoseconds + absolute_to_nanoseconds.restype = ctypes.c_uint64 + absolute_to_nanoseconds.argtypes = [ctypes.c_uint64] + + def monotonic(): + return absolute_to_nanoseconds(mach_absolute_time()) * 1e-9 + +elif SYSTEM == 'Linux' and ctypes is not None: + # from stackoverflow: + # questions/1205722/how-do-i-get-monotonic-time-durations-in-python + import ctypes + import os + + CLOCK_MONOTONIC = 1 # see + + class timespec(ctypes.Structure): + _fields_ = [ + ('tv_sec', ctypes.c_long), + ('tv_nsec', ctypes.c_long), + ] + + librt = ctypes.CDLL('librt.so.1', use_errno=True) + clock_gettime = librt.clock_gettime + clock_gettime.argtypes = [ + ctypes.c_int, ctypes.POINTER(timespec), + ] + + def monotonic(): # noqa + t = timespec() + if clock_gettime(CLOCK_MONOTONIC, ctypes.pointer(t)) != 0: + errno_ = ctypes.get_errno() + raise OSError(errno_, os.strerror(errno_)) + return t.tv_sec + t.tv_nsec * 1e-9 +else: # pragma: no cover + from time import time as monotonic + + +if hasattr(select, 'poll'): + def _poll(fds, timeout): + if timeout is not None: + timeout = int(timeout * 1000) # timeout is in milliseconds + fd_map = {} + pollster = select.poll() + for fd in fds: + pollster.register(fd, select.POLLIN) + if hasattr(fd, 'fileno'): + fd_map[fd.fileno()] = fd + else: + fd_map[fd] = fd + ls = [] + for fd, event in pollster.poll(timeout): + if event & select.POLLNVAL: # pragma: no cover + raise ValueError('invalid file descriptor %i' % fd) + ls.append(fd_map[fd]) + return ls +else: + def _poll(fds, timeout): + return select.select(fds, [], [], timeout)[0] + + +def wait(object_list, timeout=None): + ''' + Wait till an object in object_list is ready/readable. + Returns list of those objects which are ready/readable. + ''' + if timeout is not None: + if timeout <= 0: + return _poll(object_list, 0) + else: + deadline = monotonic() + timeout + while True: + try: + return _poll(object_list, timeout) + except (OSError, IOError, socket.error) as e: # pragma: no cover + if e.errno != errno.EINTR: + raise + if timeout is not None: + timeout = deadline - monotonic() diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/_win_reduction.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/_win_reduction.py new file mode 100644 index 000000000..142e6e7c8 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/_win_reduction.py @@ -0,0 +1,99 @@ +############################################################################### +# Extra reducers for Windows system and connections objects +# +# author: Thomas Moreau and Olivier Grisel +# +# adapted from multiprocessing/reduction.py (17/02/2017) +# * Add adapted reduction for LokyProcesses and socket/PipeConnection +# +import os +import sys +import socket +from .reduction import register + + +if sys.platform == 'win32': + if sys.version_info[:2] < (3, 3): + from _multiprocessing import PipeConnection + else: + import _winapi + from multiprocessing.connection import PipeConnection + + +if sys.version_info[:2] >= (3, 4) and sys.platform == 'win32': + class DupHandle(object): + def __init__(self, handle, access, pid=None): + # duplicate handle for process with given pid + if pid is None: + pid = os.getpid() + proc = _winapi.OpenProcess(_winapi.PROCESS_DUP_HANDLE, False, pid) + try: + self._handle = _winapi.DuplicateHandle( + _winapi.GetCurrentProcess(), + handle, proc, access, False, 0) + finally: + _winapi.CloseHandle(proc) + self._access = access + self._pid = pid + + def detach(self): + # retrieve handle from process which currently owns it + if self._pid == os.getpid(): + return self._handle + proc = _winapi.OpenProcess(_winapi.PROCESS_DUP_HANDLE, False, + self._pid) + try: + return _winapi.DuplicateHandle( + proc, self._handle, _winapi.GetCurrentProcess(), + self._access, False, _winapi.DUPLICATE_CLOSE_SOURCE) + finally: + _winapi.CloseHandle(proc) + + def reduce_pipe_connection(conn): + access = ((_winapi.FILE_GENERIC_READ if conn.readable else 0) | + (_winapi.FILE_GENERIC_WRITE if conn.writable else 0)) + dh = DupHandle(conn.fileno(), access) + return rebuild_pipe_connection, (dh, conn.readable, conn.writable) + + def rebuild_pipe_connection(dh, readable, writable): + from multiprocessing.connection import PipeConnection + handle = dh.detach() + return PipeConnection(handle, readable, writable) + register(PipeConnection, reduce_pipe_connection) + +elif sys.platform == 'win32': + # Older Python versions + from multiprocessing.reduction import reduce_pipe_connection + register(PipeConnection, reduce_pipe_connection) + + +if sys.version_info[:2] < (3, 3) and sys.platform == 'win32': + from _multiprocessing import win32 + from multiprocessing.reduction import reduce_handle, rebuild_handle + close = win32.CloseHandle + + def fromfd(handle, family, type_, proto=0): + s = socket.socket(family, type_, proto, fileno=handle) + if s.__class__ is not socket.socket: + s = socket.socket(_sock=s) + return s + + def reduce_socket(s): + if not hasattr(socket, "fromfd"): + raise TypeError("sockets cannot be pickled on this system.") + reduced_handle = reduce_handle(s.fileno()) + return _rebuild_socket, (reduced_handle, s.family, s.type, s.proto) + + def _rebuild_socket(reduced_handle, family, type_, proto): + handle = rebuild_handle(reduced_handle) + s = fromfd(handle, family, type_, proto) + close(handle) + return s + + register(socket.socket, reduce_socket) +elif sys.version_info[:2] < (3, 4): + from multiprocessing.reduction import reduce_socket + register(socket.socket, reduce_socket) +else: + from multiprocessing.reduction import _reduce_socket + register(socket.socket, _reduce_socket) diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/_win_wait.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/_win_wait.py new file mode 100644 index 000000000..73271316d --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/_win_wait.py @@ -0,0 +1,58 @@ +############################################################################### +# Compat for wait function on Windows system +# +# author: Thomas Moreau and Olivier Grisel +# +# adapted from multiprocessing/connection.py (17/02/2017) +# * Backport wait function to python2.7 +# + +import ctypes +import sys +from time import sleep + + +if sys.platform == 'win32' and sys.version_info[:2] < (3, 3): + from _subprocess import WaitForSingleObject, WAIT_OBJECT_0 + + try: + from time import monotonic + except ImportError: + # Backward old for crappy old Python that did not have cross-platform + # monotonic clock by default. + + # TODO: do we want to add support for cygwin at some point? See: + # https://github.com/atdt/monotonic/blob/master/monotonic.py + GetTickCount64 = ctypes.windll.kernel32.GetTickCount64 + GetTickCount64.restype = ctypes.c_ulonglong + + def monotonic(): + """Monotonic clock, cannot go backward.""" + return GetTickCount64() / 1000.0 + + def wait(handles, timeout=None): + """Backward compat for python2.7 + + This function wait for either: + * one connection is ready for read, + * one process handle has exited or got killed, + * timeout is reached. Note that this function has a precision of 2 + msec. + """ + if timeout is not None: + deadline = monotonic() + timeout + + while True: + # We cannot use select as in windows it only support sockets + ready = [] + for h in handles: + if type(h) in [int, long]: + if WaitForSingleObject(h, 0) == WAIT_OBJECT_0: + ready += [h] + elif h.poll(0): + ready.append(h) + if len(ready) > 0: + return ready + sleep(.001) + if timeout is not None and deadline - monotonic() <= 0: + return [] diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/compat.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/compat.py new file mode 100644 index 000000000..aa406c6cf --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/compat.py @@ -0,0 +1,41 @@ +############################################################################### +# Compat file to import the correct modules for each platform and python +# version. +# +# author: Thomas Moreau and Olivier grisel +# +import sys + +PY3 = sys.version_info[:2] >= (3, 3) + +if PY3: + import queue +else: + import Queue as queue + +if sys.version_info >= (3, 4): + from multiprocessing.process import BaseProcess +else: + from multiprocessing.process import Process as BaseProcess + +# Platform specific compat +if sys.platform == "win32": + from .compat_win32 import wait +else: + from .compat_posix import wait + + +def set_cause(exc, cause): + exc.__cause__ = cause + + if not PY3: + # Preformat message here. + if exc.__cause__ is not None: + exc.args = ("{}\n\nThis was caused directly by {}".format( + exc.args if len(exc.args) != 1 else exc.args[0], + str(exc.__cause__)),) + + return exc + + +__all__ = ["queue", "BaseProcess", "set_cause", "wait"] diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/compat_posix.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/compat_posix.py new file mode 100644 index 000000000..c8e4e4a43 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/compat_posix.py @@ -0,0 +1,13 @@ +# flake8: noqa +############################################################################### +# Compat file to load the correct wait function +# +# author: Thomas Moreau and Olivier grisel +# +import sys + +# Compat wait +if sys.version_info < (3, 3): + from ._posix_wait import wait +else: + from multiprocessing.connection import wait diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/compat_win32.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/compat_win32.py new file mode 100644 index 000000000..5df15f55f --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/compat_win32.py @@ -0,0 +1,46 @@ +# flake8: noqa: F401 +import sys +import numbers + +if sys.platform == "win32": + # Avoid import error by code introspection tools such as test runners + # trying to import this module while running on non-Windows systems. + + # Compat Popen + if sys.version_info[:2] >= (3, 4): + from multiprocessing.popen_spawn_win32 import Popen + else: + from multiprocessing.forking import Popen + + # wait compat + if sys.version_info[:2] < (3, 3): + from ._win_wait import wait + else: + from multiprocessing.connection import wait + + # Compat _winapi + if sys.version_info[:2] >= (3, 4): + import _winapi + else: + import os + import msvcrt + if sys.version_info[:2] < (3, 3): + import _subprocess as win_api + from _multiprocessing import win32 + else: + import _winapi as win_api + + class _winapi: + CreateProcess = win_api.CreateProcess + + @staticmethod + def CloseHandle(h): + if isinstance(h, numbers.Integral): + # Cast long to int for 64-bit Python 2.7 under Windows + h = int(h) + if sys.version_info[:2] < (3, 3): + if not isinstance(h, int): + h = h.Detach() + win32.CloseHandle(h) + else: + win_api.CloseHandle(h) diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/context.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/context.py new file mode 100644 index 000000000..dfeb4ed5b --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/context.py @@ -0,0 +1,265 @@ +############################################################################### +# Basic context management with LokyContext and provides +# compat for UNIX 2.7 and 3.3 +# +# author: Thomas Moreau and Olivier Grisel +# +# adapted from multiprocessing/context.py +# * Create a context ensuring loky uses only objects that are compatible +# * Add LokyContext to the list of context of multiprocessing so loky can be +# used with multiprocessing.set_start_method +# * Add some compat function for python2.7 and 3.3. +# +from __future__ import division + +import os +import sys +import warnings +import multiprocessing as mp + + +from .process import LokyProcess, LokyInitMainProcess + +START_METHODS = ['loky', 'loky_init_main'] +_DEFAULT_START_METHOD = None + +if sys.version_info[:2] >= (3, 4): + from multiprocessing import get_context as mp_get_context + from multiprocessing.context import assert_spawning, set_spawning_popen + from multiprocessing.context import get_spawning_popen, BaseContext + + START_METHODS += ['spawn'] + if sys.platform != 'win32': + START_METHODS += ['fork', 'forkserver'] + + def get_context(method=None): + # Try to overload the default context + method = method or _DEFAULT_START_METHOD or "loky" + if method == "fork": + # If 'fork' is explicitly requested, warn user about potential + # issues. + warnings.warn("`fork` start method should not be used with " + "`loky` as it does not respect POSIX. Try using " + "`spawn` or `loky` instead.", UserWarning) + try: + context = mp_get_context(method) + except ValueError: + raise ValueError("Unknown context '{}'. Value should be in {}." + .format(method, START_METHODS)) + + return context + +else: + if sys.platform != 'win32': + import threading + # Mechanism to check that the current thread is spawning a process + _tls = threading.local() + popen_attr = 'spawning_popen' + else: + from multiprocessing.forking import Popen + _tls = Popen._tls + popen_attr = 'process_handle' + + BaseContext = object + + def get_spawning_popen(): + return getattr(_tls, popen_attr, None) + + def set_spawning_popen(popen): + setattr(_tls, popen_attr, popen) + + def assert_spawning(obj): + if get_spawning_popen() is None: + raise RuntimeError( + '%s objects should only be shared between processes' + ' through inheritance' % type(obj).__name__ + ) + + def get_context(method=None): + method = method or _DEFAULT_START_METHOD or 'loky' + if method == "loky": + return LokyContext() + elif method == "loky_init_main": + return LokyInitMainContext() + else: + raise ValueError("Unknown context '{}'. Value should be in {}." + .format(method, START_METHODS)) + + +def set_start_method(method, force=False): + global _DEFAULT_START_METHOD + if _DEFAULT_START_METHOD is not None and not force: + raise RuntimeError('context has already been set') + assert method is None or method in START_METHODS, ( + "'{}' is not a valid start_method. It should be in {}" + .format(method, START_METHODS)) + + _DEFAULT_START_METHOD = method + + +def get_start_method(): + return _DEFAULT_START_METHOD + + +def cpu_count(): + """Return the number of CPUs the current process can use. + + The returned number of CPUs accounts for: + * the number of CPUs in the system, as given by + ``multiprocessing.cpu_count``; + * the CPU affinity settings of the current process + (available with Python 3.4+ on some Unix systems); + * CFS scheduler CPU bandwidth limit (available on Linux only, typically + set by docker and similar container orchestration systems); + * the value of the LOKY_MAX_CPU_COUNT environment variable if defined. + and is given as the minimum of these constraints. + It is also always larger or equal to 1. + """ + import math + + try: + cpu_count_mp = mp.cpu_count() + except NotImplementedError: + cpu_count_mp = 1 + + # Number of available CPUs given affinity settings + cpu_count_affinity = cpu_count_mp + if hasattr(os, 'sched_getaffinity'): + try: + cpu_count_affinity = len(os.sched_getaffinity(0)) + except NotImplementedError: + pass + + # CFS scheduler CPU bandwidth limit + # available in Linux since 2.6 kernel + cpu_count_cfs = cpu_count_mp + cfs_quota_fname = "/sys/fs/cgroup/cpu/cpu.cfs_quota_us" + cfs_period_fname = "/sys/fs/cgroup/cpu/cpu.cfs_period_us" + if os.path.exists(cfs_quota_fname) and os.path.exists(cfs_period_fname): + with open(cfs_quota_fname, 'r') as fh: + cfs_quota_us = int(fh.read()) + with open(cfs_period_fname, 'r') as fh: + cfs_period_us = int(fh.read()) + + if cfs_quota_us > 0 and cfs_period_us > 0: + # Make sure this quantity is an int as math.ceil returns a + # float in python2.7. (See issue #165) + cpu_count_cfs = int(math.ceil(cfs_quota_us / cfs_period_us)) + + # User defined soft-limit passed as an loky specific environment variable. + cpu_count_loky = int(os.environ.get('LOKY_MAX_CPU_COUNT', cpu_count_mp)) + aggregate_cpu_count = min(cpu_count_mp, cpu_count_affinity, cpu_count_cfs, + cpu_count_loky) + return max(aggregate_cpu_count, 1) + + +class LokyContext(BaseContext): + """Context relying on the LokyProcess.""" + _name = 'loky' + Process = LokyProcess + cpu_count = staticmethod(cpu_count) + + def Queue(self, maxsize=0, reducers=None): + '''Returns a queue object''' + from .queues import Queue + return Queue(maxsize, reducers=reducers, + ctx=self.get_context()) + + def SimpleQueue(self, reducers=None): + '''Returns a queue object''' + from .queues import SimpleQueue + return SimpleQueue(reducers=reducers, ctx=self.get_context()) + + if sys.version_info[:2] < (3, 4): + """Compat for python2.7/3.3 for necessary methods in Context""" + def get_context(self): + return self + + def get_start_method(self): + return self._name + + def Pipe(self, duplex=True): + '''Returns two connection object connected by a pipe''' + return mp.Pipe(duplex) + + if sys.platform != "win32": + """Use the compat Manager for python2.7/3.3 on UNIX to avoid + relying on fork processes + """ + def Manager(self): + """Returns a manager object""" + from .managers import LokyManager + m = LokyManager() + m.start() + return m + else: + """Compat for context on Windows and python2.7/3.3. Using regular + multiprocessing objects as it does not rely on fork. + """ + from multiprocessing import synchronize + Semaphore = staticmethod(synchronize.Semaphore) + BoundedSemaphore = staticmethod(synchronize.BoundedSemaphore) + Lock = staticmethod(synchronize.Lock) + RLock = staticmethod(synchronize.RLock) + Condition = staticmethod(synchronize.Condition) + Event = staticmethod(synchronize.Event) + Manager = staticmethod(mp.Manager) + + if sys.platform != "win32": + """For Unix platform, use our custom implementation of synchronize + relying on ctypes to interface with pthread semaphores. + """ + def Semaphore(self, value=1): + """Returns a semaphore object""" + from .synchronize import Semaphore + return Semaphore(value=value) + + def BoundedSemaphore(self, value): + """Returns a bounded semaphore object""" + from .synchronize import BoundedSemaphore + return BoundedSemaphore(value) + + def Lock(self): + """Returns a lock object""" + from .synchronize import Lock + return Lock() + + def RLock(self): + """Returns a recurrent lock object""" + from .synchronize import RLock + return RLock() + + def Condition(self, lock=None): + """Returns a condition object""" + from .synchronize import Condition + return Condition(lock) + + def Event(self): + """Returns an event object""" + from .synchronize import Event + return Event() + + +class LokyInitMainContext(LokyContext): + """Extra context with LokyProcess, which does load the main module + + This context is used for compatibility in the case ``cloudpickle`` is not + present on the running system. This permits to load functions defined in + the ``main`` module, using proper safeguards. The declaration of the + ``executor`` should be protected by ``if __name__ == "__main__":`` and the + functions and variable used from main should be out of this block. + + This mimics the default behavior of multiprocessing under Windows and the + behavior of the ``spawn`` start method on a posix system for python3.4+. + For more details, see the end of the following section of python doc + https://docs.python.org/3/library/multiprocessing.html#multiprocessing-programming + """ + _name = 'loky_init_main' + Process = LokyInitMainProcess + + +if sys.version_info > (3, 4): + """Register loky context so it works with multiprocessing.get_context""" + ctx_loky = LokyContext() + mp.context._concrete_contexts['loky'] = ctx_loky + mp.context._concrete_contexts['loky_init_main'] = LokyInitMainContext() diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/fork_exec.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/fork_exec.py new file mode 100644 index 000000000..cfb68dc4e --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/fork_exec.py @@ -0,0 +1,48 @@ +############################################################################### +# Launch a subprocess using forkexec and make sure only the needed fd are +# shared in the two process. +# +# author: Thomas Moreau and Olivier Grisel +# +import os +import sys + +if sys.platform == "darwin" and sys.version_info < (3, 3): + FileNotFoundError = OSError + + +def close_fds(keep_fds): # pragma: no cover + """Close all the file descriptors except those in keep_fds.""" + + # Make sure to keep stdout and stderr open for logging purpose + keep_fds = set(keep_fds).union([1, 2]) + + # We try to retrieve all the open fds + try: + open_fds = set(int(fd) for fd in os.listdir('/proc/self/fd')) + except FileNotFoundError: + import resource + max_nfds = resource.getrlimit(resource.RLIMIT_NOFILE)[0] + open_fds = set(fd for fd in range(3, max_nfds)) + open_fds.add(0) + + for i in open_fds - keep_fds: + try: + os.close(i) + except OSError: + pass + + +def fork_exec(cmd, keep_fds, env=None): + + # copy the environment variables to set in the child process + env = {} if env is None else env + child_env = os.environ.copy() + child_env.update(env) + + pid = os.fork() + if pid == 0: # pragma: no cover + close_fds(keep_fds) + os.execve(sys.executable, cmd, child_env) + else: + return pid diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/managers.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/managers.py new file mode 100644 index 000000000..081f8976e --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/managers.py @@ -0,0 +1,51 @@ +############################################################################### +# compat for UNIX 2.7 and 3.3 +# Manager with LokyContext server. +# This avoids having a Manager using fork and breaks the fd. +# +# author: Thomas Moreau and Olivier Grisel +# +# based on multiprocessing/managers.py (17/02/2017) +# * Overload the start method to use LokyContext and launch a loky subprocess +# + +import multiprocessing as mp +from multiprocessing.managers import SyncManager, State +from .process import LokyProcess as Process + + +class LokyManager(SyncManager): + def start(self, initializer=None, initargs=()): + '''Spawn a server process for this manager object''' + assert self._state.value == State.INITIAL + + if (initializer is not None + and not hasattr(initializer, '__call__')): + raise TypeError('initializer must be a callable') + + # pipe over which we will retrieve address of server + reader, writer = mp.Pipe(duplex=False) + + # spawn process which runs a server + self._process = Process( + target=type(self)._run_server, + args=(self._registry, self._address, bytes(self._authkey), + self._serializer, writer, initializer, initargs), + ) + ident = ':'.join(str(i) for i in self._process._identity) + self._process.name = type(self).__name__ + '-' + ident + self._process.start() + + # get address of server + writer.close() + self._address = reader.recv() + reader.close() + + # register a finalizer + self._state.value = State.STARTED + self.shutdown = mp.util.Finalize( + self, type(self)._finalize_manager, + args=(self._process, self._address, self._authkey, + self._state, self._Client), + exitpriority=0 + ) diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/popen_loky_posix.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/popen_loky_posix.py new file mode 100644 index 000000000..cfe4f72b5 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/popen_loky_posix.py @@ -0,0 +1,211 @@ +############################################################################### +# Popen for LokyProcess. +# +# author: Thomas Moreau and Olivier Grisel +# +import os +import sys +import signal +import pickle +from io import BytesIO + +from . import reduction, spawn +from .context import get_spawning_popen, set_spawning_popen +from multiprocessing import util, process + +if sys.version_info[:2] < (3, 3): + ProcessLookupError = OSError + +if sys.platform != "win32": + from . import resource_tracker + + +__all__ = [] + +if sys.platform != "win32": + # + # Wrapper for an fd used while launching a process + # + + class _DupFd(object): + def __init__(self, fd): + self.fd = reduction._mk_inheritable(fd) + + def detach(self): + return self.fd + + # + # Start child process using subprocess.Popen + # + + __all__.append('Popen') + + class Popen(object): + method = 'loky' + DupFd = _DupFd + + def __init__(self, process_obj): + sys.stdout.flush() + sys.stderr.flush() + self.returncode = None + self._fds = [] + self._launch(process_obj) + + if sys.version_info < (3, 4): + @classmethod + def duplicate_for_child(cls, fd): + popen = get_spawning_popen() + popen._fds.append(fd) + return reduction._mk_inheritable(fd) + + else: + def duplicate_for_child(self, fd): + self._fds.append(fd) + return reduction._mk_inheritable(fd) + + def poll(self, flag=os.WNOHANG): + if self.returncode is None: + while True: + try: + pid, sts = os.waitpid(self.pid, flag) + except OSError: + # Child process not yet created. See #1731717 + # e.errno == errno.ECHILD == 10 + return None + else: + break + if pid == self.pid: + if os.WIFSIGNALED(sts): + self.returncode = -os.WTERMSIG(sts) + else: + assert os.WIFEXITED(sts) + self.returncode = os.WEXITSTATUS(sts) + return self.returncode + + def wait(self, timeout=None): + if sys.version_info < (3, 3): + import time + if timeout is None: + return self.poll(0) + deadline = time.time() + timeout + delay = 0.0005 + while 1: + res = self.poll() + if res is not None: + break + remaining = deadline - time.time() + if remaining <= 0: + break + delay = min(delay * 2, remaining, 0.05) + time.sleep(delay) + return res + + if self.returncode is None: + if timeout is not None: + from multiprocessing.connection import wait + if not wait([self.sentinel], timeout): + return None + # This shouldn't block if wait() returned successfully. + return self.poll(os.WNOHANG if timeout == 0.0 else 0) + return self.returncode + + def terminate(self): + if self.returncode is None: + try: + os.kill(self.pid, signal.SIGTERM) + except ProcessLookupError: + pass + except OSError: + if self.wait(timeout=0.1) is None: + raise + + def _launch(self, process_obj): + + tracker_fd = resource_tracker._resource_tracker.getfd() + + fp = BytesIO() + set_spawning_popen(self) + try: + prep_data = spawn.get_preparation_data( + process_obj._name, + getattr(process_obj, "init_main_module", True)) + reduction.dump(prep_data, fp) + reduction.dump(process_obj, fp) + + finally: + set_spawning_popen(None) + + try: + parent_r, child_w = os.pipe() + child_r, parent_w = os.pipe() + # for fd in self._fds: + # _mk_inheritable(fd) + + cmd_python = [sys.executable] + cmd_python += ['-m', self.__module__] + cmd_python += ['--process-name', str(process_obj.name)] + cmd_python += ['--pipe', + str(reduction._mk_inheritable(child_r))] + reduction._mk_inheritable(child_w) + reduction._mk_inheritable(tracker_fd) + self._fds.extend([child_r, child_w, tracker_fd]) + from .fork_exec import fork_exec + pid = fork_exec(cmd_python, self._fds, env=process_obj.env) + util.debug("launched python with pid {} and cmd:\n{}" + .format(pid, cmd_python)) + self.sentinel = parent_r + + method = 'getbuffer' + if not hasattr(fp, method): + method = 'getvalue' + with os.fdopen(parent_w, 'wb') as f: + f.write(getattr(fp, method)()) + self.pid = pid + finally: + if parent_r is not None: + util.Finalize(self, os.close, (parent_r,)) + for fd in (child_r, child_w): + if fd is not None: + os.close(fd) + + @staticmethod + def thread_is_spawning(): + return True + + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser('Command line parser') + parser.add_argument('--pipe', type=int, required=True, + help='File handle for the pipe') + parser.add_argument('--process-name', type=str, default=None, + help='Identifier for debugging purpose') + + args = parser.parse_args() + + info = dict() + + exitcode = 1 + try: + with os.fdopen(args.pipe, 'rb') as from_parent: + process.current_process()._inheriting = True + try: + prep_data = pickle.load(from_parent) + spawn.prepare(prep_data) + process_obj = pickle.load(from_parent) + finally: + del process.current_process()._inheriting + + exitcode = process_obj._bootstrap() + except Exception: + print('\n\n' + '-' * 80) + print('{} failed with traceback: '.format(args.process_name)) + print('-' * 80) + import traceback + print(traceback.format_exc()) + print('\n' + '-' * 80) + finally: + if from_parent is not None: + from_parent.close() + + sys.exit(exitcode) diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/popen_loky_win32.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/popen_loky_win32.py new file mode 100644 index 000000000..523bd078c --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/popen_loky_win32.py @@ -0,0 +1,173 @@ +import os +import sys +from pickle import load +from multiprocessing import process, util + +from . import spawn +from . import reduction +from .context import get_spawning_popen, set_spawning_popen + +if sys.platform == "win32": + # Avoid import error by code introspection tools such as test runners + # trying to import this module while running on non-Windows systems. + import msvcrt + from .compat_win32 import _winapi + from .compat_win32 import Popen as _Popen + from .reduction import duplicate +else: + _Popen = object + +if sys.version_info[:2] < (3, 3): + from os import fdopen as open + +__all__ = ['Popen'] + +# +# +# + +TERMINATE = 0x10000 +WINEXE = (sys.platform == 'win32' and getattr(sys, 'frozen', False)) +WINSERVICE = sys.executable.lower().endswith("pythonservice.exe") + + +def _path_eq(p1, p2): + return p1 == p2 or os.path.normcase(p1) == os.path.normcase(p2) + + +WINENV = (hasattr(sys, "_base_executable") + and not _path_eq(sys.executable, sys._base_executable)) + +# +# We define a Popen class similar to the one from subprocess, but +# whose constructor takes a process object as its argument. +# + + +class Popen(_Popen): + ''' + Start a subprocess to run the code of a process object + ''' + method = 'loky' + + def __init__(self, process_obj): + prep_data = spawn.get_preparation_data( + process_obj._name, getattr(process_obj, "init_main_module", True)) + + # read end of pipe will be "stolen" by the child process + # -- see spawn_main() in spawn.py. + rfd, wfd = os.pipe() + rhandle = duplicate(msvcrt.get_osfhandle(rfd), inheritable=True) + os.close(rfd) + + cmd = get_command_line(parent_pid=os.getpid(), pipe_handle=rhandle) + cmd = ' '.join('"%s"' % x for x in cmd) + + python_exe = spawn.get_executable() + + # copy the environment variables to set in the child process + child_env = os.environ.copy() + child_env.update(process_obj.env) + + # bpo-35797: When running in a venv, we bypass the redirect + # executor and launch our base Python. + if WINENV and _path_eq(python_exe, sys.executable): + python_exe = sys._base_executable + child_env["__PYVENV_LAUNCHER__"] = sys.executable + + try: + with open(wfd, 'wb') as to_child: + # start process + try: + # This flag allows to pass inheritable handles from the + # parent to the child process in a python2-3 compatible way + # (see + # https://github.com/tomMoral/loky/pull/204#discussion_r290719629 + # for more detail). When support for Python 2 is dropped, + # the cleaner multiprocessing.reduction.steal_handle should + # be used instead. + inherit = True + hp, ht, pid, tid = _winapi.CreateProcess( + python_exe, cmd, + None, None, inherit, 0, + child_env, None, None) + _winapi.CloseHandle(ht) + except BaseException: + _winapi.CloseHandle(rhandle) + raise + + # set attributes of self + self.pid = pid + self.returncode = None + self._handle = hp + self.sentinel = int(hp) + util.Finalize(self, _winapi.CloseHandle, (self.sentinel,)) + + # send information to child + set_spawning_popen(self) + if sys.version_info[:2] < (3, 4): + Popen._tls.process_handle = int(hp) + try: + reduction.dump(prep_data, to_child) + reduction.dump(process_obj, to_child) + finally: + set_spawning_popen(None) + if sys.version_info[:2] < (3, 4): + del Popen._tls.process_handle + except IOError as exc: + # IOError 22 happens when the launched subprocess terminated before + # wfd.close is called. Thus we can safely ignore it. + if exc.errno != 22: + raise + util.debug("While starting {}, ignored a IOError 22" + .format(process_obj._name)) + + def duplicate_for_child(self, handle): + assert self is get_spawning_popen() + return duplicate(handle, self.sentinel) + + +def get_command_line(pipe_handle, **kwds): + ''' + Returns prefix of command line used for spawning a child process + ''' + if getattr(sys, 'frozen', False): + return ([sys.executable, '--multiprocessing-fork', pipe_handle]) + else: + prog = 'from joblib.externals.loky.backend.popen_loky_win32 import main; main()' + opts = util._args_from_interpreter_flags() + return [spawn.get_executable()] + opts + [ + '-c', prog, '--multiprocessing-fork', pipe_handle] + + +def is_forking(argv): + ''' + Return whether commandline indicates we are forking + ''' + if len(argv) >= 2 and argv[1] == '--multiprocessing-fork': + assert len(argv) == 3 + return True + else: + return False + + +def main(): + ''' + Run code specified by data received over pipe + ''' + assert is_forking(sys.argv) + + handle = int(sys.argv[-1]) + fd = msvcrt.open_osfhandle(handle, os.O_RDONLY) + from_parent = os.fdopen(fd, 'rb') + + process.current_process()._inheriting = True + preparation_data = load(from_parent) + spawn.prepare(preparation_data) + self = load(from_parent) + process.current_process()._inheriting = False + + from_parent.close() + + exitcode = self._bootstrap() + exit(exitcode) diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/process.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/process.py new file mode 100644 index 000000000..30a20c061 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/process.py @@ -0,0 +1,108 @@ +############################################################################### +# LokyProcess implementation +# +# authors: Thomas Moreau and Olivier Grisel +# +# based on multiprocessing/process.py (17/02/2017) +# * Add some compatibility function for python2.7 and 3.3 +# +import os +import sys +from .compat import BaseProcess + + +class LokyProcess(BaseProcess): + _start_method = 'loky' + + def __init__(self, group=None, target=None, name=None, args=(), + kwargs={}, daemon=None, init_main_module=False, + env=None): + if sys.version_info < (3, 3): + super(LokyProcess, self).__init__( + group=group, target=target, name=name, args=args, + kwargs=kwargs) + self.daemon = daemon + else: + super(LokyProcess, self).__init__( + group=group, target=target, name=name, args=args, + kwargs=kwargs, daemon=daemon) + self.env = {} if env is None else env + self.authkey = self.authkey + self.init_main_module = init_main_module + + @staticmethod + def _Popen(process_obj): + if sys.platform == "win32": + from .popen_loky_win32 import Popen + else: + from .popen_loky_posix import Popen + return Popen(process_obj) + + if sys.version_info < (3, 3): + def start(self): + ''' + Start child process + ''' + from multiprocessing.process import _current_process, _cleanup + assert self._popen is None, 'cannot start a process twice' + assert self._parent_pid == os.getpid(), \ + 'can only start a process object created by current process' + _cleanup() + self._popen = self._Popen(self) + self._sentinel = self._popen.sentinel + _current_process._children.add(self) + + @property + def sentinel(self): + ''' + Return a file descriptor (Unix) or handle (Windows) suitable for + waiting for process termination. + ''' + try: + return self._sentinel + except AttributeError: + raise ValueError("process not started") + + if sys.version_info < (3, 4): + @property + def authkey(self): + return self._authkey + + @authkey.setter + def authkey(self, authkey): + ''' + Set authorization key of process + ''' + self._authkey = AuthenticationKey(authkey) + + def _bootstrap(self): + from .context import set_start_method + set_start_method(self._start_method) + super(LokyProcess, self)._bootstrap() + + +class LokyInitMainProcess(LokyProcess): + _start_method = 'loky_init_main' + + def __init__(self, group=None, target=None, name=None, args=(), + kwargs={}, daemon=None): + super(LokyInitMainProcess, self).__init__( + group=group, target=target, name=name, args=args, kwargs=kwargs, + daemon=daemon, init_main_module=True) + + +# +# We subclass bytes to avoid accidental transmission of auth keys over network +# + +class AuthenticationKey(bytes): + def __reduce__(self): + from .context import assert_spawning + try: + assert_spawning(self) + except RuntimeError: + raise TypeError( + 'Pickling an AuthenticationKey object is ' + 'disallowed for security reasons' + ) + return AuthenticationKey, (bytes(self),) diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/queues.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/queues.py new file mode 100644 index 000000000..0f9dfeae6 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/queues.py @@ -0,0 +1,240 @@ +############################################################################### +# Queue and SimpleQueue implementation for loky +# +# authors: Thomas Moreau, Olivier Grisel +# +# based on multiprocessing/queues.py (16/02/2017) +# * Add some compatibility function for python2.7 and 3.3 and makes sure +# it uses the right synchronization primitive. +# * Add some custom reducers for the Queues/SimpleQueue to tweak the +# pickling process. (overload Queue._feed/SimpleQueue.put) +# +import os +import sys +import errno +import weakref +import threading + +from multiprocessing import util +from multiprocessing import connection +from multiprocessing.synchronize import SEM_VALUE_MAX +from multiprocessing.queues import Full +from multiprocessing.queues import _sentinel, Queue as mp_Queue +from multiprocessing.queues import SimpleQueue as mp_SimpleQueue + +from .reduction import loads, dumps +from .context import assert_spawning, get_context + + +__all__ = ['Queue', 'SimpleQueue', 'Full'] + + +class Queue(mp_Queue): + + def __init__(self, maxsize=0, reducers=None, ctx=None): + + if sys.version_info[:2] >= (3, 4): + super().__init__(maxsize=maxsize, ctx=ctx) + else: + if maxsize <= 0: + # Can raise ImportError (see issues #3770 and #23400) + maxsize = SEM_VALUE_MAX + if ctx is None: + ctx = get_context() + self._maxsize = maxsize + self._reader, self._writer = connection.Pipe(duplex=False) + self._rlock = ctx.Lock() + self._opid = os.getpid() + if sys.platform == 'win32': + self._wlock = None + else: + self._wlock = ctx.Lock() + self._sem = ctx.BoundedSemaphore(maxsize) + + # For use by concurrent.futures + self._ignore_epipe = False + + self._after_fork() + + if sys.platform != 'win32': + util.register_after_fork(self, Queue._after_fork) + + self._reducers = reducers + + # Use custom queue set/get state to be able to reduce the custom reducers + def __getstate__(self): + assert_spawning(self) + return (self._ignore_epipe, self._maxsize, self._reader, self._writer, + self._reducers, self._rlock, self._wlock, self._sem, + self._opid) + + def __setstate__(self, state): + (self._ignore_epipe, self._maxsize, self._reader, self._writer, + self._reducers, self._rlock, self._wlock, self._sem, + self._opid) = state + self._after_fork() + + # Overload _start_thread to correctly call our custom _feed + def _start_thread(self): + util.debug('Queue._start_thread()') + + # Start thread which transfers data from buffer to pipe + self._buffer.clear() + self._thread = threading.Thread( + target=Queue._feed, + args=(self._buffer, self._notempty, self._send_bytes, + self._wlock, self._writer.close, self._reducers, + self._ignore_epipe, self._on_queue_feeder_error, self._sem), + name='QueueFeederThread' + ) + self._thread.daemon = True + + util.debug('doing self._thread.start()') + self._thread.start() + util.debug('... done self._thread.start()') + + # On process exit we will wait for data to be flushed to pipe. + # + # However, if this process created the queue then all + # processes which use the queue will be descendants of this + # process. Therefore waiting for the queue to be flushed + # is pointless once all the child processes have been joined. + created_by_this_process = (self._opid == os.getpid()) + if not self._joincancelled and not created_by_this_process: + self._jointhread = util.Finalize( + self._thread, Queue._finalize_join, + [weakref.ref(self._thread)], + exitpriority=-5 + ) + + # Send sentinel to the thread queue object when garbage collected + self._close = util.Finalize( + self, Queue._finalize_close, + [self._buffer, self._notempty], + exitpriority=10 + ) + + # Overload the _feed methods to use our custom pickling strategy. + @staticmethod + def _feed(buffer, notempty, send_bytes, writelock, close, reducers, + ignore_epipe, onerror, queue_sem): + util.debug('starting thread to feed data to pipe') + nacquire = notempty.acquire + nrelease = notempty.release + nwait = notempty.wait + bpopleft = buffer.popleft + sentinel = _sentinel + if sys.platform != 'win32': + wacquire = writelock.acquire + wrelease = writelock.release + else: + wacquire = None + + while 1: + try: + nacquire() + try: + if not buffer: + nwait() + finally: + nrelease() + try: + while 1: + obj = bpopleft() + if obj is sentinel: + util.debug('feeder thread got sentinel -- exiting') + close() + return + + # serialize the data before acquiring the lock + obj_ = dumps(obj, reducers=reducers) + if wacquire is None: + send_bytes(obj_) + else: + wacquire() + try: + send_bytes(obj_) + finally: + wrelease() + # Remove references early to avoid leaking memory + del obj, obj_ + except IndexError: + pass + except BaseException as e: + if ignore_epipe and getattr(e, 'errno', 0) == errno.EPIPE: + return + # Since this runs in a daemon thread the resources it uses + # may be become unusable while the process is cleaning up. + # We ignore errors which happen after the process has + # started to cleanup. + if util.is_exiting(): + util.info('error in queue thread: %s', e) + return + else: + queue_sem.release() + onerror(e, obj) + + def _on_queue_feeder_error(self, e, obj): + """ + Private API hook called when feeding data in the background thread + raises an exception. For overriding by concurrent.futures. + """ + import traceback + traceback.print_exc() + + if sys.version_info[:2] < (3, 4): + # Compat for python2.7/3.3 that use _send instead of _send_bytes + def _after_fork(self): + super(Queue, self)._after_fork() + self._send_bytes = self._writer.send_bytes + + +class SimpleQueue(mp_SimpleQueue): + + def __init__(self, reducers=None, ctx=None): + if sys.version_info[:2] >= (3, 4): + super().__init__(ctx=ctx) + else: + # Use the context to create the sync objects for python2.7/3.3 + if ctx is None: + ctx = get_context() + self._reader, self._writer = connection.Pipe(duplex=False) + self._rlock = ctx.Lock() + self._poll = self._reader.poll + if sys.platform == 'win32': + self._wlock = None + else: + self._wlock = ctx.Lock() + + # Add possiblity to use custom reducers + self._reducers = reducers + + # Use custom queue set/get state to be able to reduce the custom reducers + def __getstate__(self): + assert_spawning(self) + return (self._reader, self._writer, self._reducers, self._rlock, + self._wlock) + + def __setstate__(self, state): + (self._reader, self._writer, self._reducers, self._rlock, + self._wlock) = state + + if sys.version_info[:2] < (3, 4): + # For python2.7/3.3, overload get to avoid creating deadlocks with + # unpickling errors. + def get(self): + with self._rlock: + res = self._reader.recv_bytes() + # unserialize the data after having released the lock + return loads(res) + + # Overload put to use our customizable reducer + def put(self, obj): + # serialize the data before acquiring the lock + obj = dumps(obj, reducers=self._reducers) + if self._wlock is None: + # writes to a message oriented win32 pipe are atomic + self._writer.send_bytes(obj) + else: + with self._wlock: + self._writer.send_bytes(obj) diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/reduction.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/reduction.py new file mode 100644 index 000000000..5d5414a1a --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/reduction.py @@ -0,0 +1,256 @@ +############################################################################### +# Customizable Pickler with some basic reducers +# +# author: Thomas Moreau +# +# adapted from multiprocessing/reduction.py (17/02/2017) +# * Replace the ForkingPickler with a similar _LokyPickler, +# * Add CustomizableLokyPickler to allow customizing pickling process +# on the fly. +# +import io +import os +import sys +import functools +from multiprocessing import util +try: + # Python 2 compat + from cPickle import loads as pickle_loads +except ImportError: + from pickle import loads as pickle_loads + import copyreg + +from pickle import HIGHEST_PROTOCOL + + +if sys.platform == "win32": + if sys.version_info[:2] > (3, 3): + from multiprocessing.reduction import duplicate + else: + from multiprocessing.forking import duplicate + + +############################################################################### +# Enable custom pickling in Loky. +# To allow instance customization of the pickling process, we use 2 classes. +# _ReducerRegistry gives module level customization and CustomizablePickler +# permits to use instance base custom reducers. Only CustomizablePickler +# should be used. + +class _ReducerRegistry(object): + """Registry for custom reducers. + + HIGHEST_PROTOCOL is selected by default as this pickler is used + to pickle ephemeral datastructures for interprocess communication + hence no backward compatibility is required. + + """ + + # We override the pure Python pickler as its the only way to be able to + # customize the dispatch table without side effects in Python 2.6 + # to 3.2. For Python 3.3+ leverage the new dispatch_table + # feature from http://bugs.python.org/issue14166 that makes it possible + # to use the C implementation of the Pickler which is faster. + + dispatch_table = {} + + @classmethod + def register(cls, type, reduce_func): + """Attach a reducer function to a given type in the dispatch table.""" + if sys.version_info < (3,): + # Python 2 pickler dispatching is not explicitly customizable. + # Let us use a closure to workaround this limitation. + def dispatcher(cls, obj): + reduced = reduce_func(obj) + cls.save_reduce(obj=obj, *reduced) + cls.dispatch_table[type] = dispatcher + else: + cls.dispatch_table[type] = reduce_func + + +############################################################################### +# Registers extra pickling routines to improve picklization for loky + +register = _ReducerRegistry.register + + +# make methods picklable +def _reduce_method(m): + if m.__self__ is None: + return getattr, (m.__class__, m.__func__.__name__) + else: + return getattr, (m.__self__, m.__func__.__name__) + + +class _C: + def f(self): + pass + + @classmethod + def h(cls): + pass + + +register(type(_C().f), _reduce_method) +register(type(_C.h), _reduce_method) + + +if not hasattr(sys, "pypy_version_info"): + # PyPy uses functions instead of method_descriptors and wrapper_descriptors + def _reduce_method_descriptor(m): + return getattr, (m.__objclass__, m.__name__) + + register(type(list.append), _reduce_method_descriptor) + register(type(int.__add__), _reduce_method_descriptor) + + +# Make partial func pickable +def _reduce_partial(p): + return _rebuild_partial, (p.func, p.args, p.keywords or {}) + + +def _rebuild_partial(func, args, keywords): + return functools.partial(func, *args, **keywords) + + +register(functools.partial, _reduce_partial) + +if sys.platform != "win32": + from ._posix_reduction import _mk_inheritable # noqa: F401 +else: + from . import _win_reduction # noqa: F401 + +# global variable to change the pickler behavior +try: + from joblib.externals import cloudpickle # noqa: F401 + DEFAULT_ENV = "cloudpickle" +except ImportError: + # If cloudpickle is not present, fallback to pickle + DEFAULT_ENV = "pickle" + +ENV_LOKY_PICKLER = os.environ.get("LOKY_PICKLER", DEFAULT_ENV) +_LokyPickler = None +_loky_pickler_name = None + + +def set_loky_pickler(loky_pickler=None): + global _LokyPickler, _loky_pickler_name + + if loky_pickler is None: + loky_pickler = ENV_LOKY_PICKLER + + loky_pickler_cls = None + + # The default loky_pickler is cloudpickle + if loky_pickler in ["", None]: + loky_pickler = "cloudpickle" + + if loky_pickler == _loky_pickler_name: + return + + if loky_pickler == "cloudpickle": + from joblib.externals.cloudpickle import CloudPickler as loky_pickler_cls + else: + try: + from importlib import import_module + module_pickle = import_module(loky_pickler) + loky_pickler_cls = module_pickle.Pickler + except (ImportError, AttributeError) as e: + extra_info = ("\nThis error occurred while setting loky_pickler to" + " '{}', as required by the env variable LOKY_PICKLER" + " or the function set_loky_pickler." + .format(loky_pickler)) + e.args = (e.args[0] + extra_info,) + e.args[1:] + e.msg = e.args[0] + raise e + + util.debug("Using '{}' for serialization." + .format(loky_pickler if loky_pickler else "cloudpickle")) + + class CustomizablePickler(loky_pickler_cls): + _loky_pickler_cls = loky_pickler_cls + + if sys.version_info < (3,): + # Make the dispatch registry an instance level attribute instead of + # a reference to the class dictionary under Python 2 + _dispatch = loky_pickler_cls.dispatch.copy() + _dispatch.update(_ReducerRegistry.dispatch_table) + else: + # Under Python 3 initialize the dispatch table with a copy of the + # default registry + _dispatch_table = copyreg.dispatch_table.copy() + _dispatch_table.update(_ReducerRegistry.dispatch_table) + + def __init__(self, writer, reducers=None, protocol=HIGHEST_PROTOCOL): + loky_pickler_cls.__init__(self, writer, protocol=protocol) + if reducers is None: + reducers = {} + if sys.version_info < (3,): + self.dispatch = self._dispatch.copy() + else: + if getattr(self, "dispatch_table", None) is not None: + self.dispatch_table.update(self._dispatch_table.copy()) + else: + self.dispatch_table = self._dispatch_table.copy() + + for type, reduce_func in reducers.items(): + self.register(type, reduce_func) + + def register(self, type, reduce_func): + """Attach a reducer function to a given type in the dispatch table. + """ + if sys.version_info < (3,): + # Python 2 pickler dispatching is not explicitly customizable. + # Let us use a closure to workaround this limitation. + def dispatcher(self, obj): + reduced = reduce_func(obj) + self.save_reduce(obj=obj, *reduced) + self.dispatch[type] = dispatcher + else: + self.dispatch_table[type] = reduce_func + + _LokyPickler = CustomizablePickler + _loky_pickler_name = loky_pickler + + +def get_loky_pickler_name(): + global _loky_pickler_name + return _loky_pickler_name + + +def get_loky_pickler(): + global _LokyPickler + return _LokyPickler + + +# Set it to its default value +set_loky_pickler() + + +def loads(buf): + # Compat for python2.7 version + if sys.version_info < (3, 3) and isinstance(buf, io.BytesIO): + buf = buf.getvalue() + return pickle_loads(buf) + + +def dump(obj, file, reducers=None, protocol=None): + '''Replacement for pickle.dump() using _LokyPickler.''' + global _LokyPickler + _LokyPickler(file, reducers=reducers, protocol=protocol).dump(obj) + + +def dumps(obj, reducers=None, protocol=None): + global _LokyPickler + + buf = io.BytesIO() + dump(obj, buf, reducers=reducers, protocol=protocol) + if sys.version_info < (3, 3): + return buf.getvalue() + return buf.getbuffer() + + +__all__ = ["dump", "dumps", "loads", "register", "set_loky_pickler"] + +if sys.platform == "win32": + __all__ += ["duplicate"] diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/resource_tracker.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/resource_tracker.py new file mode 100644 index 000000000..ce519febe --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/resource_tracker.py @@ -0,0 +1,313 @@ +############################################################################### +# Server process to keep track of unlinked resources, like folders and +# semaphores and clean them. +# +# author: Thomas Moreau +# +# adapted from multiprocessing/semaphore_tracker.py (17/02/2017) +# * include custom spawnv_passfds to start the process +# * use custom unlink from our own SemLock implementation +# * add some VERBOSE logging +# + +# +# On Unix we run a server process which keeps track of unlinked +# resources. The server ignores SIGINT and SIGTERM and reads from a +# pipe. Every other process of the program has a copy of the writable +# end of the pipe, so we get EOF when all other processes have exited. +# Then the server process unlinks any remaining resources. +# +# For semaphores, this is important because the system only supports a limited +# number of named semaphores, and they will not be automatically removed till +# the next reboot. Without this resource tracker process, "killall python" +# would probably leave unlinked semaphores. + +import os +import shutil +import sys +import signal +import warnings +import threading + +from . import spawn +from multiprocessing import util + +if sys.platform == "win32": + from .compat_win32 import _winapi + from .reduction import duplicate + import msvcrt + +try: + from _multiprocessing import sem_unlink +except ImportError: + from .semlock import sem_unlink + +if sys.version_info < (3,): + BrokenPipeError = OSError + from os import fdopen as open + +__all__ = ['ensure_running', 'register', 'unregister'] + +_HAVE_SIGMASK = hasattr(signal, 'pthread_sigmask') +_IGNORED_SIGNALS = (signal.SIGINT, signal.SIGTERM) + +_CLEANUP_FUNCS = { + 'folder': shutil.rmtree +} + +if os.name == "posix": + _CLEANUP_FUNCS['semlock'] = sem_unlink + +VERBOSE = False + + +class ResourceTracker(object): + + def __init__(self): + self._lock = threading.Lock() + self._fd = None + self._pid = None + + def getfd(self): + self.ensure_running() + return self._fd + + def ensure_running(self): + '''Make sure that resource tracker process is running. + + This can be run from any process. Usually a child process will use + the resource created by its parent.''' + with self._lock: + if self._fd is not None: + # resource tracker was launched before, is it still running? + if self._check_alive(): + # => still alive + return + # => dead, launch it again + os.close(self._fd) + if os.name == "posix": + try: + # At this point, the resource_tracker process has been + # killed or crashed. Let's remove the process entry + # from the process table to avoid zombie processes. + os.waitpid(self._pid, 0) + except OSError: + # The process was terminated or is a child from an + # ancestor of the current process. + pass + self._fd = None + self._pid = None + + warnings.warn('resource_tracker: process died unexpectedly, ' + 'relaunching. Some folders/sempahores might ' + 'leak.') + + fds_to_pass = [] + try: + fds_to_pass.append(sys.stderr.fileno()) + except Exception: + pass + + r, w = os.pipe() + if sys.platform == "win32": + _r = duplicate(msvcrt.get_osfhandle(r), inheritable=True) + os.close(r) + r = _r + + cmd = 'from {} import main; main({}, {})'.format( + main.__module__, r, VERBOSE) + try: + fds_to_pass.append(r) + # process will out live us, so no need to wait on pid + exe = spawn.get_executable() + args = [exe] + util._args_from_interpreter_flags() + # In python 3.3, there is a bug which put `-RRRRR..` instead of + # `-R` in args. Replace it to get the correct flags. + # See https://github.com/python/cpython/blob/3.3/Lib/subprocess.py#L488 + if sys.version_info[:2] <= (3, 3): + import re + for i in range(1, len(args)): + args[i] = re.sub("-R+", "-R", args[i]) + args += ['-c', cmd] + util.debug("launching resource tracker: {}".format(args)) + # bpo-33613: Register a signal mask that will block the + # signals. This signal mask will be inherited by the child + # that is going to be spawned and will protect the child from a + # race condition that can make the child die before it + # registers signal handlers for SIGINT and SIGTERM. The mask is + # unregistered after spawning the child. + try: + if _HAVE_SIGMASK: + signal.pthread_sigmask(signal.SIG_BLOCK, + _IGNORED_SIGNALS) + pid = spawnv_passfds(exe, args, fds_to_pass) + finally: + if _HAVE_SIGMASK: + signal.pthread_sigmask(signal.SIG_UNBLOCK, + _IGNORED_SIGNALS) + except BaseException: + os.close(w) + raise + else: + self._fd = w + self._pid = pid + finally: + if sys.platform == "win32": + _winapi.CloseHandle(r) + else: + os.close(r) + + def _check_alive(self): + '''Check for the existence of the resource tracker process.''' + try: + self._send('PROBE', '', '') + except BrokenPipeError: + return False + else: + return True + + def register(self, name, rtype): + '''Register a named resource with resource tracker.''' + self.ensure_running() + self._send('REGISTER', name, rtype) + + def unregister(self, name, rtype): + '''Unregister a named resource with resource tracker.''' + self.ensure_running() + self._send('UNREGISTER', name, rtype) + + def _send(self, cmd, name, rtype): + msg = '{0}:{1}:{2}\n'.format(cmd, name, rtype).encode('ascii') + if len(name) > 512: + # posix guarantees that writes to a pipe of less than PIPE_BUF + # bytes are atomic, and that PIPE_BUF >= 512 + raise ValueError('name too long') + nbytes = os.write(self._fd, msg) + assert nbytes == len(msg) + + +_resource_tracker = ResourceTracker() +ensure_running = _resource_tracker.ensure_running +register = _resource_tracker.register +unregister = _resource_tracker.unregister +getfd = _resource_tracker.getfd + + +def main(fd, verbose=0): + '''Run resource tracker.''' + # protect the process from ^C and "killall python" etc + signal.signal(signal.SIGINT, signal.SIG_IGN) + signal.signal(signal.SIGTERM, signal.SIG_IGN) + + if _HAVE_SIGMASK: + signal.pthread_sigmask(signal.SIG_UNBLOCK, _IGNORED_SIGNALS) + + for f in (sys.stdin, sys.stdout): + try: + f.close() + except Exception: + pass + + if verbose: # pragma: no cover + sys.stderr.write("Main resource tracker is running\n") + sys.stderr.flush() + + cache = {rtype: set() for rtype in _CLEANUP_FUNCS.keys()} + try: + # keep track of registered/unregistered resources + if sys.platform == "win32": + fd = msvcrt.open_osfhandle(fd, os.O_RDONLY) + with open(fd, 'rb') as f: + for line in f: + try: + splitted = line.strip().decode('ascii').split(':') + # name can potentially contain separator symbols (for + # instance folders on Windows) + cmd, name, rtype = ( + splitted[0], ':'.join(splitted[1:-1]), splitted[-1]) + + if cmd == 'PROBE': + continue + + if rtype not in _CLEANUP_FUNCS: + raise ValueError( + 'Cannot register {} for automatic cleanup: ' + 'unknown resource type ({}). Resource type should ' + 'be one of the following: {}'.format( + name, rtype, list(_CLEANUP_FUNCS.keys()))) + + if cmd == 'REGISTER': + cache[rtype].add(name) + if verbose: # pragma: no cover + sys.stderr.write("[ResourceTracker] register {}" + " {}\n" .format(rtype, name)) + sys.stderr.flush() + elif cmd == 'UNREGISTER': + cache[rtype].remove(name) + if verbose: # pragma: no cover + sys.stderr.write("[ResourceTracker] unregister {}" + " {}: cache({})\n" + .format(name, rtype, len(cache))) + sys.stderr.flush() + else: + raise RuntimeError('unrecognized command %r' % cmd) + except BaseException: + try: + sys.excepthook(*sys.exc_info()) + except BaseException: + pass + finally: + # all processes have terminated; cleanup any remaining resources + for rtype, rtype_cache in cache.items(): + if rtype_cache: + try: + warnings.warn('resource_tracker: There appear to be %d ' + 'leaked %s objects to clean up at shutdown' % + (len(rtype_cache), rtype)) + except Exception: + pass + for name in rtype_cache: + # For some reason the process which created and registered this + # resource has failed to unregister it. Presumably it has + # died. We therefore clean it up. + try: + _CLEANUP_FUNCS[rtype](name) + if verbose: # pragma: no cover + sys.stderr.write("[ResourceTracker] unlink {}\n" + .format(name)) + sys.stderr.flush() + except Exception as e: + warnings.warn('resource_tracker: %s: %r' % (name, e)) + + if verbose: # pragma: no cover + sys.stderr.write("resource tracker shut down\n") + sys.stderr.flush() + + +# +# Start a program with only specified fds kept open +# + +def spawnv_passfds(path, args, passfds): + passfds = sorted(passfds) + if sys.platform != "win32": + errpipe_read, errpipe_write = os.pipe() + try: + from .reduction import _mk_inheritable + _pass = [] + for fd in passfds: + _pass += [_mk_inheritable(fd)] + from .fork_exec import fork_exec + return fork_exec(args, _pass) + finally: + os.close(errpipe_read) + os.close(errpipe_write) + else: + cmd = ' '.join('"%s"' % x for x in args) + try: + hp, ht, pid, tid = _winapi.CreateProcess( + path, cmd, None, None, True, 0, None, None, None) + _winapi.CloseHandle(ht) + except BaseException: + pass + return pid diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/semlock.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/semlock.py new file mode 100644 index 000000000..2d35f6a27 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/semlock.py @@ -0,0 +1,274 @@ +############################################################################### +# Ctypes implementation for posix semaphore. +# +# author: Thomas Moreau and Olivier Grisel +# +# adapted from cpython/Modules/_multiprocessing/semaphore.c (17/02/2017) +# * use ctypes to access pthread semaphores and provide a full python +# semaphore management. +# * For OSX, as no sem_getvalue is not implemented, Semaphore with value > 1 +# are not guaranteed to work. +# * Only work with LokyProcess on posix +# +import os +import sys +import time +import errno +import ctypes +import tempfile +import threading +from ctypes.util import find_library + +# As we need to use ctypes return types for semlock object, failure value +# needs to be cast to proper python value. Unix failure convention is to +# return 0, whereas OSX returns -1 +SEM_FAILURE = ctypes.c_void_p(0).value +if sys.platform == 'darwin': + SEM_FAILURE = ctypes.c_void_p(-1).value + +# Semaphore types +RECURSIVE_MUTEX = 0 +SEMAPHORE = 1 + +# Semaphore constants +SEM_OFLAG = ctypes.c_int(os.O_CREAT | os.O_EXCL) +SEM_PERM = ctypes.c_int(384) + + +class timespec(ctypes.Structure): + _fields_ = [("tv_sec", ctypes.c_long), ("tv_nsec", ctypes.c_long)] + + +if sys.platform != 'win32': + pthread = ctypes.CDLL(find_library('pthread'), use_errno=True) + pthread.sem_open.restype = ctypes.c_void_p + pthread.sem_close.argtypes = [ctypes.c_void_p] + pthread.sem_wait.argtypes = [ctypes.c_void_p] + pthread.sem_trywait.argtypes = [ctypes.c_void_p] + pthread.sem_post.argtypes = [ctypes.c_void_p] + pthread.sem_getvalue.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + pthread.sem_unlink.argtypes = [ctypes.c_char_p] + if sys.platform != "darwin": + pthread.sem_timedwait.argtypes = [ctypes.c_void_p, + ctypes.POINTER(timespec)] + +try: + from threading import get_ident +except ImportError: + def get_ident(): + return threading.current_thread().ident + + +if sys.version_info[:2] < (3, 3): + class FileExistsError(OSError): + pass + + class FileNotFoundError(OSError): + pass + + +def sem_unlink(name): + if pthread.sem_unlink(name.encode('ascii')) < 0: + raiseFromErrno() + + +def _sem_open(name, value=None): + """ Construct or retrieve a semaphore with the given name + + If value is None, try to retrieve an existing named semaphore. + Else create a new semaphore with the given value + """ + if value is None: + handle = pthread.sem_open(ctypes.c_char_p(name), 0) + else: + handle = pthread.sem_open(ctypes.c_char_p(name), SEM_OFLAG, SEM_PERM, + ctypes.c_int(value)) + + if handle == SEM_FAILURE: + e = ctypes.get_errno() + if e == errno.EEXIST: + raise FileExistsError("a semaphore named %s already exists" % name) + elif e == errno.ENOENT: + raise FileNotFoundError('cannot find semaphore named %s' % name) + elif e == errno.ENOSYS: + raise NotImplementedError('No semaphore implementation on this ' + 'system') + else: + raiseFromErrno() + + return handle + + +def _sem_timedwait(handle, timeout): + t_start = time.time() + if sys.platform != "darwin": + sec = int(timeout) + tv_sec = int(t_start) + nsec = int(1e9 * (timeout - sec) + .5) + tv_nsec = int(1e9 * (t_start - tv_sec) + .5) + deadline = timespec(sec+tv_sec, nsec+tv_nsec) + deadline.tv_sec += int(deadline.tv_nsec / 1000000000) + deadline.tv_nsec %= 1000000000 + return pthread.sem_timedwait(handle, ctypes.pointer(deadline)) + + # PERFORMANCE WARNING + # No sem_timedwait on OSX so we implement our own method. This method can + # degrade performances has the wait can have a latency up to 20 msecs + deadline = t_start + timeout + delay = 0 + now = time.time() + while True: + # Poll the sem file + res = pthread.sem_trywait(handle) + if res == 0: + return 0 + else: + e = ctypes.get_errno() + if e != errno.EAGAIN: + raiseFromErrno() + + # check for timeout + now = time.time() + if now > deadline: + ctypes.set_errno(errno.ETIMEDOUT) + return -1 + + # calculate how much time left and check the delay is not too long + # -- maximum is 20 msecs + difference = (deadline - now) + delay = min(delay, 20e-3, difference) + + # Sleep and increase delay + time.sleep(delay) + delay += 1e-3 + + +class SemLock(object): + """ctypes wrapper to the unix semaphore""" + + _rand = tempfile._RandomNameSequence() + + def __init__(self, kind, value, maxvalue, name=None, unlink_now=False): + self.count = 0 + self.ident = 0 + self.kind = kind + self.maxvalue = maxvalue + self.name = name + self.handle = _sem_open(self.name.encode('ascii'), value) + + def __del__(self): + try: + res = pthread.sem_close(self.handle) + assert res == 0, "Issue while closing semaphores" + except AttributeError: + pass + + def _is_mine(self): + return self.count > 0 and get_ident() == self.ident + + def acquire(self, block=True, timeout=None): + if self.kind == RECURSIVE_MUTEX and self._is_mine(): + self.count += 1 + return True + + if block and timeout is None: + res = pthread.sem_wait(self.handle) + elif not block or timeout <= 0: + res = pthread.sem_trywait(self.handle) + else: + res = _sem_timedwait(self.handle, timeout) + if res < 0: + e = ctypes.get_errno() + if e == errno.EINTR: + return None + elif e in [errno.EAGAIN, errno.ETIMEDOUT]: + return False + raiseFromErrno() + self.count += 1 + self.ident = get_ident() + return True + + def release(self): + if self.kind == RECURSIVE_MUTEX: + assert self._is_mine(), ( + "attempt to release recursive lock not owned by thread") + if self.count > 1: + self.count -= 1 + return + assert self.count == 1 + else: + if sys.platform == 'darwin': + # Handle broken get_value for mac ==> only Lock will work + # as sem_get_value do not work properly + if self.maxvalue == 1: + if pthread.sem_trywait(self.handle) < 0: + e = ctypes.get_errno() + if e != errno.EAGAIN: + raise OSError(e, errno.errorcode[e]) + else: + if pthread.sem_post(self.handle) < 0: + raiseFromErrno() + else: + raise ValueError( + "semaphore or lock released too many times") + else: + import warnings + warnings.warn("semaphore are broken on OSX, release might " + "increase its maximal value", RuntimeWarning) + else: + value = self._get_value() + if value >= self.maxvalue: + raise ValueError( + "semaphore or lock released too many times") + + if pthread.sem_post(self.handle) < 0: + raiseFromErrno() + + self.count -= 1 + + def _get_value(self): + value = ctypes.pointer(ctypes.c_int(-1)) + if pthread.sem_getvalue(self.handle, value) < 0: + raiseFromErrno() + return value.contents.value + + def _count(self): + return self.count + + def _is_zero(self): + if sys.platform == 'darwin': + # Handle broken get_value for mac ==> only Lock will work + # as sem_get_value do not work properly + if pthread.sem_trywait(self.handle) < 0: + e = ctypes.get_errno() + if e == errno.EAGAIN: + return True + raise OSError(e, errno.errorcode[e]) + else: + if pthread.sem_post(self.handle) < 0: + raiseFromErrno() + return False + else: + value = ctypes.pointer(ctypes.c_int(-1)) + if pthread.sem_getvalue(self.handle, value) < 0: + raiseFromErrno() + return value.contents.value == 0 + + def _after_fork(self): + self.count = 0 + + @staticmethod + def _rebuild(handle, kind, maxvalue, name): + self = SemLock.__new__(SemLock) + self.count = 0 + self.ident = 0 + self.kind = kind + self.maxvalue = maxvalue + self.name = name + self.handle = _sem_open(name.encode('ascii')) + return self + + +def raiseFromErrno(): + e = ctypes.get_errno() + raise OSError(e, errno.errorcode[e]) diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/spawn.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/spawn.py new file mode 100644 index 000000000..0877f3391 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/spawn.py @@ -0,0 +1,232 @@ +############################################################################### +# Prepares and processes the data to setup the new process environment +# +# author: Thomas Moreau and Olivier Grisel +# +# adapted from multiprocessing/spawn.py (17/02/2017) +# * Improve logging data +# +import os +import sys +import runpy +import types +from multiprocessing import process, util + + +if sys.platform != 'win32': + WINEXE = False + WINSERVICE = False +else: + import msvcrt + from .reduction import duplicate + WINEXE = (sys.platform == 'win32' and getattr(sys, 'frozen', False)) + WINSERVICE = sys.executable.lower().endswith("pythonservice.exe") + +if WINSERVICE: + _python_exe = os.path.join(sys.exec_prefix, 'python.exe') +else: + _python_exe = sys.executable + + +def get_executable(): + return _python_exe + + +def _check_not_importing_main(): + if getattr(process.current_process(), '_inheriting', False): + raise RuntimeError(''' + An attempt has been made to start a new process before the + current process has finished its bootstrapping phase. + + This probably means that you are not using fork to start your + child processes and you have forgotten to use the proper idiom + in the main module: + + if __name__ == '__main__': + freeze_support() + ... + + The "freeze_support()" line can be omitted if the program + is not going to be frozen to produce an executable.''') + + +def get_preparation_data(name, init_main_module=True): + ''' + Return info about parent needed by child to unpickle process object + ''' + _check_not_importing_main() + d = dict( + log_to_stderr=util._log_to_stderr, + authkey=bytes(process.current_process().authkey), + name=name, + sys_argv=sys.argv, + orig_dir=process.ORIGINAL_DIR, + dir=os.getcwd() + ) + + # Send sys_path and make sure the current directory will not be changed + sys_path = [p for p in sys.path] + try: + i = sys_path.index('') + except ValueError: + pass + else: + sys_path[i] = process.ORIGINAL_DIR + d['sys_path'] = sys_path + + # Make sure to pass the information if the multiprocessing logger is active + if util._logger is not None: + d['log_level'] = util._logger.getEffectiveLevel() + if len(util._logger.handlers) > 0: + h = util._logger.handlers[0] + d['log_fmt'] = h.formatter._fmt + + # Tell the child how to communicate with the resource_tracker + from .resource_tracker import _resource_tracker + _resource_tracker.ensure_running() + d["tracker_args"] = {"pid": _resource_tracker._pid} + if sys.platform == "win32": + child_w = duplicate( + msvcrt.get_osfhandle(_resource_tracker._fd), inheritable=True) + d["tracker_args"]["fh"] = child_w + else: + d["tracker_args"]["fd"] = _resource_tracker._fd + + # Figure out whether to initialise main in the subprocess as a module + # or through direct execution (or to leave it alone entirely) + if init_main_module: + main_module = sys.modules['__main__'] + try: + main_mod_name = getattr(main_module.__spec__, "name", None) + except BaseException: + main_mod_name = None + if main_mod_name is not None: + d['init_main_from_name'] = main_mod_name + elif sys.platform != 'win32' or (not WINEXE and not WINSERVICE): + main_path = getattr(main_module, '__file__', None) + if main_path is not None: + if (not os.path.isabs(main_path) and + process.ORIGINAL_DIR is not None): + main_path = os.path.join(process.ORIGINAL_DIR, main_path) + d['init_main_from_path'] = os.path.normpath(main_path) + # Compat for python2.7 + d['main_path'] = d['init_main_from_path'] + + return d + + +# +# Prepare current process +# +old_main_modules = [] + + +def prepare(data): + ''' + Try to get current process ready to unpickle process object + ''' + if 'name' in data: + process.current_process().name = data['name'] + + if 'authkey' in data: + process.current_process().authkey = data['authkey'] + + if 'log_to_stderr' in data and data['log_to_stderr']: + util.log_to_stderr() + + if 'log_level' in data: + util.get_logger().setLevel(data['log_level']) + + if 'log_fmt' in data: + import logging + util.get_logger().handlers[0].setFormatter( + logging.Formatter(data['log_fmt']) + ) + + if 'sys_path' in data: + sys.path = data['sys_path'] + + if 'sys_argv' in data: + sys.argv = data['sys_argv'] + + if 'dir' in data: + os.chdir(data['dir']) + + if 'orig_dir' in data: + process.ORIGINAL_DIR = data['orig_dir'] + + if 'tracker_args' in data: + from .resource_tracker import _resource_tracker + _resource_tracker._pid = data["tracker_args"]['pid'] + if sys.platform == 'win32': + handle = data["tracker_args"]["fh"] + _resource_tracker._fd = msvcrt.open_osfhandle(handle, 0) + else: + _resource_tracker._fd = data["tracker_args"]["fd"] + + if 'init_main_from_name' in data: + _fixup_main_from_name(data['init_main_from_name']) + elif 'init_main_from_path' in data: + _fixup_main_from_path(data['init_main_from_path']) + + +# Multiprocessing module helpers to fix up the main module in +# spawned subprocesses +def _fixup_main_from_name(mod_name): + # __main__.py files for packages, directories, zip archives, etc, run + # their "main only" code unconditionally, so we don't even try to + # populate anything in __main__, nor do we make any changes to + # __main__ attributes + current_main = sys.modules['__main__'] + if mod_name == "__main__" or mod_name.endswith(".__main__"): + return + + # If this process was forked, __main__ may already be populated + if getattr(current_main.__spec__, "name", None) == mod_name: + return + + # Otherwise, __main__ may contain some non-main code where we need to + # support unpickling it properly. We rerun it as __mp_main__ and make + # the normal __main__ an alias to that + old_main_modules.append(current_main) + main_module = types.ModuleType("__mp_main__") + main_content = runpy.run_module(mod_name, + run_name="__mp_main__", + alter_sys=True) + main_module.__dict__.update(main_content) + sys.modules['__main__'] = sys.modules['__mp_main__'] = main_module + + +def _fixup_main_from_path(main_path): + # If this process was forked, __main__ may already be populated + current_main = sys.modules['__main__'] + + # Unfortunately, the main ipython launch script historically had no + # "if __name__ == '__main__'" guard, so we work around that + # by treating it like a __main__.py file + # See https://github.com/ipython/ipython/issues/4698 + main_name = os.path.splitext(os.path.basename(main_path))[0] + if main_name == 'ipython': + return + + # Otherwise, if __file__ already has the setting we expect, + # there's nothing more to do + if getattr(current_main, '__file__', None) == main_path: + return + + # If the parent process has sent a path through rather than a module + # name we assume it is an executable script that may contain + # non-main code that needs to be executed + old_main_modules.append(current_main) + main_module = types.ModuleType("__mp_main__") + main_content = runpy.run_path(main_path, + run_name="__mp_main__") + main_module.__dict__.update(main_content) + sys.modules['__main__'] = sys.modules['__mp_main__'] = main_module + + +def import_main_path(main_path): + ''' + Set sys.modules['__main__'] to module at main_path + ''' + _fixup_main_from_path(main_path) diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/synchronize.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/synchronize.py new file mode 100644 index 000000000..592de3c02 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/synchronize.py @@ -0,0 +1,381 @@ +############################################################################### +# Synchronization primitives based on our SemLock implementation +# +# author: Thomas Moreau and Olivier Grisel +# +# adapted from multiprocessing/synchronize.py (17/02/2017) +# * Remove ctx argument for compatibility reason +# * Implementation of Condition/Event are necessary for compatibility +# with python2.7/3.3, Barrier should be reimplemented to for those +# version (but it is not used in loky). +# + +import os +import sys +import tempfile +import threading +import _multiprocessing +from time import time as _time + +from .context import assert_spawning +from . import resource_tracker +from multiprocessing import process +from multiprocessing import util + +__all__ = [ + 'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Condition', 'Event' + ] +# Try to import the mp.synchronize module cleanly, if it fails +# raise ImportError for platforms lacking a working sem_open implementation. +# See issue 3770 +try: + if sys.version_info < (3, 4): + from .semlock import SemLock as _SemLock + from .semlock import sem_unlink + else: + from _multiprocessing import SemLock as _SemLock + from _multiprocessing import sem_unlink +except (ImportError): + raise ImportError("This platform lacks a functioning sem_open" + + " implementation, therefore, the required" + + " synchronization primitives needed will not" + + " function, see issue 3770.") + +if sys.version_info[:2] < (3, 3): + FileExistsError = OSError + +# +# Constants +# + +RECURSIVE_MUTEX, SEMAPHORE = list(range(2)) +SEM_VALUE_MAX = _multiprocessing.SemLock.SEM_VALUE_MAX + + +# +# Base class for semaphores and mutexes; wraps `_multiprocessing.SemLock` +# + +class SemLock(object): + + _rand = tempfile._RandomNameSequence() + + def __init__(self, kind, value, maxvalue): + # unlink_now is only used on win32 or when we are using fork. + unlink_now = False + for i in range(100): + try: + self._semlock = _SemLock( + kind, value, maxvalue, SemLock._make_name(), + unlink_now) + except FileExistsError: # pragma: no cover + pass + else: + break + else: # pragma: no cover + raise FileExistsError('cannot find name for semaphore') + + util.debug('created semlock with handle %s and name "%s"' + % (self._semlock.handle, self._semlock.name)) + + self._make_methods() + + def _after_fork(obj): + obj._semlock._after_fork() + + util.register_after_fork(self, _after_fork) + + # When the object is garbage collected or the + # process shuts down we unlink the semaphore name + resource_tracker.register(self._semlock.name, "semlock") + util.Finalize(self, SemLock._cleanup, (self._semlock.name,), + exitpriority=0) + + @staticmethod + def _cleanup(name): + sem_unlink(name) + resource_tracker.unregister(name, "semlock") + + def _make_methods(self): + self.acquire = self._semlock.acquire + self.release = self._semlock.release + + def __enter__(self): + return self._semlock.acquire() + + def __exit__(self, *args): + return self._semlock.release() + + def __getstate__(self): + assert_spawning(self) + sl = self._semlock + h = sl.handle + return (h, sl.kind, sl.maxvalue, sl.name) + + def __setstate__(self, state): + self._semlock = _SemLock._rebuild(*state) + util.debug('recreated blocker with handle %r and name "%s"' + % (state[0], state[3])) + self._make_methods() + + @staticmethod + def _make_name(): + # OSX does not support long names for semaphores + return '/loky-%i-%s' % (os.getpid(), next(SemLock._rand)) + + +# +# Semaphore +# + +class Semaphore(SemLock): + + def __init__(self, value=1): + SemLock.__init__(self, SEMAPHORE, value, SEM_VALUE_MAX) + + def get_value(self): + if sys.platform == 'darwin': + raise NotImplementedError("OSX does not implement sem_getvalue") + return self._semlock._get_value() + + def __repr__(self): + try: + value = self._semlock._get_value() + except Exception: + value = 'unknown' + return '<%s(value=%s)>' % (self.__class__.__name__, value) + + +# +# Bounded semaphore +# + +class BoundedSemaphore(Semaphore): + + def __init__(self, value=1): + SemLock.__init__(self, SEMAPHORE, value, value) + + def __repr__(self): + try: + value = self._semlock._get_value() + except Exception: + value = 'unknown' + return '<%s(value=%s, maxvalue=%s)>' % \ + (self.__class__.__name__, value, self._semlock.maxvalue) + + +# +# Non-recursive lock +# + +class Lock(SemLock): + + def __init__(self): + super(Lock, self).__init__(SEMAPHORE, 1, 1) + + def __repr__(self): + try: + if self._semlock._is_mine(): + name = process.current_process().name + if threading.current_thread().name != 'MainThread': + name += '|' + threading.current_thread().name + elif self._semlock._get_value() == 1: + name = 'None' + elif self._semlock._count() > 0: + name = 'SomeOtherThread' + else: + name = 'SomeOtherProcess' + except Exception: + name = 'unknown' + return '<%s(owner=%s)>' % (self.__class__.__name__, name) + + +# +# Recursive lock +# + +class RLock(SemLock): + + def __init__(self): + super(RLock, self).__init__(RECURSIVE_MUTEX, 1, 1) + + def __repr__(self): + try: + if self._semlock._is_mine(): + name = process.current_process().name + if threading.current_thread().name != 'MainThread': + name += '|' + threading.current_thread().name + count = self._semlock._count() + elif self._semlock._get_value() == 1: + name, count = 'None', 0 + elif self._semlock._count() > 0: + name, count = 'SomeOtherThread', 'nonzero' + else: + name, count = 'SomeOtherProcess', 'nonzero' + except Exception: + name, count = 'unknown', 'unknown' + return '<%s(%s, %s)>' % (self.__class__.__name__, name, count) + + +# +# Condition variable +# + +class Condition(object): + + def __init__(self, lock=None): + self._lock = lock or RLock() + self._sleeping_count = Semaphore(0) + self._woken_count = Semaphore(0) + self._wait_semaphore = Semaphore(0) + self._make_methods() + + def __getstate__(self): + assert_spawning(self) + return (self._lock, self._sleeping_count, + self._woken_count, self._wait_semaphore) + + def __setstate__(self, state): + (self._lock, self._sleeping_count, + self._woken_count, self._wait_semaphore) = state + self._make_methods() + + def __enter__(self): + return self._lock.__enter__() + + def __exit__(self, *args): + return self._lock.__exit__(*args) + + def _make_methods(self): + self.acquire = self._lock.acquire + self.release = self._lock.release + + def __repr__(self): + try: + num_waiters = (self._sleeping_count._semlock._get_value() - + self._woken_count._semlock._get_value()) + except Exception: + num_waiters = 'unknown' + return '<%s(%s, %s)>' % (self.__class__.__name__, + self._lock, num_waiters) + + def wait(self, timeout=None): + assert self._lock._semlock._is_mine(), \ + 'must acquire() condition before using wait()' + + # indicate that this thread is going to sleep + self._sleeping_count.release() + + # release lock + count = self._lock._semlock._count() + for i in range(count): + self._lock.release() + + try: + # wait for notification or timeout + return self._wait_semaphore.acquire(True, timeout) + finally: + # indicate that this thread has woken + self._woken_count.release() + + # reacquire lock + for i in range(count): + self._lock.acquire() + + def notify(self): + assert self._lock._semlock._is_mine(), 'lock is not owned' + assert not self._wait_semaphore.acquire(False) + + # to take account of timeouts since last notify() we subtract + # woken_count from sleeping_count and rezero woken_count + while self._woken_count.acquire(False): + res = self._sleeping_count.acquire(False) + assert res + + if self._sleeping_count.acquire(False): # try grabbing a sleeper + self._wait_semaphore.release() # wake up one sleeper + self._woken_count.acquire() # wait for the sleeper to wake + + # rezero _wait_semaphore in case a timeout just happened + self._wait_semaphore.acquire(False) + + def notify_all(self): + assert self._lock._semlock._is_mine(), 'lock is not owned' + assert not self._wait_semaphore.acquire(False) + + # to take account of timeouts since last notify*() we subtract + # woken_count from sleeping_count and rezero woken_count + while self._woken_count.acquire(False): + res = self._sleeping_count.acquire(False) + assert res + + sleepers = 0 + while self._sleeping_count.acquire(False): + self._wait_semaphore.release() # wake up one sleeper + sleepers += 1 + + if sleepers: + for i in range(sleepers): + self._woken_count.acquire() # wait for a sleeper to wake + + # rezero wait_semaphore in case some timeouts just happened + while self._wait_semaphore.acquire(False): + pass + + def wait_for(self, predicate, timeout=None): + result = predicate() + if result: + return result + if timeout is not None: + endtime = _time() + timeout + else: + endtime = None + waittime = None + while not result: + if endtime is not None: + waittime = endtime - _time() + if waittime <= 0: + break + self.wait(waittime) + result = predicate() + return result + + +# +# Event +# + +class Event(object): + + def __init__(self): + self._cond = Condition(Lock()) + self._flag = Semaphore(0) + + def is_set(self): + with self._cond: + if self._flag.acquire(False): + self._flag.release() + return True + return False + + def set(self): + with self._cond: + self._flag.acquire(False) + self._flag.release() + self._cond.notify_all() + + def clear(self): + with self._cond: + self._flag.acquire(False) + + def wait(self, timeout=None): + with self._cond: + if self._flag.acquire(False): + self._flag.release() + else: + self._cond.wait(timeout) + + if self._flag.acquire(False): + self._flag.release() + return True + return False diff --git a/my_env/Lib/site-packages/joblib/externals/loky/backend/utils.py b/my_env/Lib/site-packages/joblib/externals/loky/backend/utils.py new file mode 100644 index 000000000..dc1b82af2 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/backend/utils.py @@ -0,0 +1,172 @@ +import os +import sys +import time +import errno +import signal +import warnings +import threading +import subprocess +try: + import psutil +except ImportError: + psutil = None + + +WIN32 = sys.platform == "win32" + + +def _flag_current_thread_clean_exit(): + """Put a ``_clean_exit`` flag on the current thread""" + thread = threading.current_thread() + thread._clean_exit = True + + +def recursive_terminate(process, use_psutil=True): + if use_psutil and psutil is not None: + _recursive_terminate_with_psutil(process) + else: + _recursive_terminate_without_psutil(process) + + +def _recursive_terminate_with_psutil(process, retries=5): + try: + children = psutil.Process(process.pid).children(recursive=True) + except psutil.NoSuchProcess: + return + + # Kill the children in reverse order to avoid killing the parents before + # the children in cases where there are more processes nested. + for child in children[::-1]: + try: + child.kill() + except psutil.NoSuchProcess: + pass + + process.terminate() + process.join() + + +def _recursive_terminate_without_psutil(process): + """Terminate a process and its descendants. + """ + try: + _recursive_terminate(process.pid) + except OSError as e: + warnings.warn("Failed to kill subprocesses on this platform. Please" + "install psutil: https://github.com/giampaolo/psutil") + # In case we cannot introspect the children, we fall back to the + # classic Process.terminate. + process.terminate() + process.join() + + +def _recursive_terminate(pid): + """Recursively kill the descendants of a process before killing it. + """ + + if sys.platform == "win32": + # On windows, the taskkill function with option `/T` terminate a given + # process pid and its children. + try: + subprocess.check_output( + ["taskkill", "/F", "/T", "/PID", str(pid)], + stderr=None) + except subprocess.CalledProcessError as e: + # In windows, taskkill return 1 for permission denied and 128, 255 + # for no process found. + if e.returncode not in [1, 128, 255]: + raise + elif e.returncode == 1: + # Try to kill the process without its descendants if taskkill + # was denied permission. If this fails too, with an error + # different from process not found, let the top level function + # raise a warning and retry to kill the process. + try: + os.kill(pid, signal.SIGTERM) + except OSError as e: + if e.errno != errno.ESRCH: + raise + + else: + try: + children_pids = subprocess.check_output( + ["pgrep", "-P", str(pid)], + stderr=None + ) + except subprocess.CalledProcessError as e: + # `ps` returns 1 when no child process has been found + if e.returncode == 1: + children_pids = b'' + else: + raise + + # Decode the result, split the cpid and remove the trailing line + children_pids = children_pids.decode().split('\n')[:-1] + for cpid in children_pids: + cpid = int(cpid) + _recursive_terminate(cpid) + + try: + os.kill(pid, signal.SIGTERM) + except OSError as e: + # if OSError is raised with [Errno 3] no such process, the process + # is already terminated, else, raise the error and let the top + # level function raise a warning and retry to kill the process. + if e.errno != errno.ESRCH: + raise + + +def get_exitcodes_terminated_worker(processes): + """Return a formated string with the exitcodes of terminated workers. + + If necessary, wait (up to .25s) for the system to correctly set the + exitcode of one terminated worker. + """ + patience = 5 + + # Catch the exitcode of the terminated workers. There should at least be + # one. If not, wait a bit for the system to correctly set the exitcode of + # the terminated worker. + exitcodes = [p.exitcode for p in list(processes.values()) + if p.exitcode is not None] + while len(exitcodes) == 0 and patience > 0: + patience -= 1 + exitcodes = [p.exitcode for p in list(processes.values()) + if p.exitcode is not None] + time.sleep(.05) + + return _format_exitcodes(exitcodes) + + +def _format_exitcodes(exitcodes): + """Format a list of exit code with names of the signals if possible""" + str_exitcodes = ["{}({})".format(_get_exitcode_name(e), e) + for e in exitcodes if e is not None] + return "{" + ", ".join(str_exitcodes) + "}" + + +def _get_exitcode_name(exitcode): + if sys.platform == "win32": + # The exitcode are unreliable on windows (see bpo-31863). + # For this case, return UNKNOWN + return "UNKNOWN" + + if exitcode < 0: + try: + import signal + if sys.version_info > (3, 5): + return signal.Signals(-exitcode).name + + # construct an inverse lookup table + for v, k in signal.__dict__.items(): + if (v.startswith('SIG') and not v.startswith('SIG_') and + k == -exitcode): + return v + except ValueError: + return "UNKNOWN" + elif exitcode != 255: + # The exitcode are unreliable on forkserver were 255 is always returned + # (see bpo-30589). For this case, return UNKNOWN + return "EXIT" + + return "UNKNOWN" diff --git a/my_env/Lib/site-packages/joblib/externals/loky/cloudpickle_wrapper.py b/my_env/Lib/site-packages/joblib/externals/loky/cloudpickle_wrapper.py new file mode 100644 index 000000000..1bf41a336 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/cloudpickle_wrapper.py @@ -0,0 +1,113 @@ +import inspect +from functools import partial + +try: + from joblib.externals.cloudpickle import dumps, loads + cloudpickle = True +except ImportError: + cloudpickle = False + + +WRAP_CACHE = dict() + + +class CloudpickledObjectWrapper(object): + def __init__(self, obj, keep_wrapper=False): + self._obj = obj + self._keep_wrapper = keep_wrapper + + def __reduce__(self): + _pickled_object = dumps(self._obj) + if not self._keep_wrapper: + return loads, (_pickled_object,) + + return _reconstruct_wrapper, (_pickled_object, self._keep_wrapper) + + def __getattr__(self, attr): + # Ensure that the wrapped object can be used seemlessly as the + # previous object. + if attr not in ['_obj', '_keep_wrapper']: + return getattr(self._obj, attr) + return getattr(self, attr) + + +# Make sure the wrapped object conserves the callable property +class CallableObjectWrapper(CloudpickledObjectWrapper): + + def __call__(self, *args, **kwargs): + return self._obj(*args, **kwargs) + + +def _wrap_non_picklable_objects(obj, keep_wrapper): + if callable(obj): + return CallableObjectWrapper(obj, keep_wrapper=keep_wrapper) + return CloudpickledObjectWrapper(obj, keep_wrapper=keep_wrapper) + + +def _reconstruct_wrapper(_pickled_object, keep_wrapper): + obj = loads(_pickled_object) + return _wrap_non_picklable_objects(obj, keep_wrapper) + + +def _wrap_objects_when_needed(obj): + # Function to introspect an object and decide if it should be wrapped or + # not. + if not cloudpickle: + return obj + + need_wrap = "__main__" in getattr(obj, "__module__", "") + if isinstance(obj, partial): + return partial( + _wrap_objects_when_needed(obj.func), + *[_wrap_objects_when_needed(a) for a in obj.args], + **{k: _wrap_objects_when_needed(v) + for k, v in obj.keywords.items()} + ) + if callable(obj): + # Need wrap if the object is a function defined in a local scope of + # another function. + func_code = getattr(obj, "__code__", "") + need_wrap |= getattr(func_code, "co_flags", 0) & inspect.CO_NESTED + + # Need wrap if the obj is a lambda expression + func_name = getattr(obj, "__name__", "") + need_wrap |= "" in func_name + + if not need_wrap: + return obj + + wrapped_obj = WRAP_CACHE.get(obj) + if wrapped_obj is None: + wrapped_obj = _wrap_non_picklable_objects(obj, keep_wrapper=False) + WRAP_CACHE[obj] = wrapped_obj + return wrapped_obj + + +def wrap_non_picklable_objects(obj, keep_wrapper=True): + """Wrapper for non-picklable object to use cloudpickle to serialize them. + + Note that this wrapper tends to slow down the serialization process as it + is done with cloudpickle which is typically slower compared to pickle. The + proper way to solve serialization issues is to avoid defining functions and + objects in the main scripts and to implement __reduce__ functions for + complex classes. + """ + if not cloudpickle: + raise ImportError("could not from joblib.externals import cloudpickle. Please install " + "cloudpickle to allow extended serialization. " + "(`pip install cloudpickle`).") + + # If obj is a class, create a CloudpickledClassWrapper which instantiates + # the object internally and wrap it directly in a CloudpickledObjectWrapper + if inspect.isclass(obj): + class CloudpickledClassWrapper(CloudpickledObjectWrapper): + def __init__(self, *args, **kwargs): + self._obj = obj(*args, **kwargs) + self._keep_wrapper = keep_wrapper + + CloudpickledClassWrapper.__name__ = obj.__name__ + return CloudpickledClassWrapper + + # If obj is an instance of a class, just wrap it in a regular + # CloudpickledObjectWrapper + return _wrap_non_picklable_objects(obj, keep_wrapper=keep_wrapper) diff --git a/my_env/Lib/site-packages/joblib/externals/loky/process_executor.py b/my_env/Lib/site-packages/joblib/externals/loky/process_executor.py new file mode 100644 index 000000000..e9ae29eaf --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/process_executor.py @@ -0,0 +1,1118 @@ +############################################################################### +# Re-implementation of the ProcessPoolExecutor more robust to faults +# +# author: Thomas Moreau and Olivier Grisel +# +# adapted from concurrent/futures/process_pool_executor.py (17/02/2017) +# * Backport for python2.7/3.3, +# * Add an extra management thread to detect queue_management_thread failures, +# * Improve the shutdown process to avoid deadlocks, +# * Add timeout for workers, +# * More robust pickling process. +# +# Copyright 2009 Brian Quinlan. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +"""Implements ProcessPoolExecutor. + +The follow diagram and text describe the data-flow through the system: + +|======================= In-process =====================|== Out-of-process ==| + ++----------+ +----------+ +--------+ +-----------+ +---------+ +| | => | Work Ids | | | | Call Q | | Process | +| | +----------+ | | +-----------+ | Pool | +| | | ... | | | | ... | +---------+ +| | | 6 | => | | => | 5, call() | => | | +| | | 7 | | | | ... | | | +| Process | | ... | | Local | +-----------+ | Process | +| Pool | +----------+ | Worker | | #1..n | +| Executor | | Thread | | | +| | +----------- + | | +-----------+ | | +| | <=> | Work Items | <=> | | <= | Result Q | <= | | +| | +------------+ | | +-----------+ | | +| | | 6: call() | | | | ... | | | +| | | future | +--------+ | 4, result | | | +| | | ... | | 3, except | | | ++----------+ +------------+ +-----------+ +---------+ + +Executor.submit() called: +- creates a uniquely numbered _WorkItem and adds it to the "Work Items" dict +- adds the id of the _WorkItem to the "Work Ids" queue + +Local worker thread: +- reads work ids from the "Work Ids" queue and looks up the corresponding + WorkItem from the "Work Items" dict: if the work item has been cancelled then + it is simply removed from the dict, otherwise it is repackaged as a + _CallItem and put in the "Call Q". New _CallItems are put in the "Call Q" + until "Call Q" is full. NOTE: the size of the "Call Q" is kept small because + calls placed in the "Call Q" can no longer be cancelled with Future.cancel(). +- reads _ResultItems from "Result Q", updates the future stored in the + "Work Items" dict and deletes the dict entry + +Process #1..n: +- reads _CallItems from "Call Q", executes the calls, and puts the resulting + _ResultItems in "Result Q" +""" + + +__author__ = 'Thomas Moreau (thomas.moreau.2010@gmail.com)' + + +import os +import gc +import sys +import struct +import weakref +import warnings +import itertools +import traceback +import threading +from time import time +import multiprocessing as mp +from functools import partial +from pickle import PicklingError + +from . import _base +from .backend import get_context +from .backend.compat import queue +from .backend.compat import wait +from .backend.compat import set_cause +from .backend.context import cpu_count +from .backend.queues import Queue, SimpleQueue, Full +from .backend.reduction import set_loky_pickler, get_loky_pickler_name +from .backend.utils import recursive_terminate, get_exitcodes_terminated_worker + +try: + from concurrent.futures.process import BrokenProcessPool as _BPPException +except ImportError: + _BPPException = RuntimeError + + +# Compatibility for python2.7 +if sys.version_info[0] == 2: + ProcessLookupError = OSError + + +# Workers are created as daemon threads and processes. This is done to allow +# the interpreter to exit when there are still idle processes in a +# ProcessPoolExecutor's process pool (i.e. shutdown() was not called). However, +# allowing workers to die with the interpreter has two undesirable properties: +# - The workers would still be running during interpreter shutdown, +# meaning that they would fail in unpredictable ways. +# - The workers could be killed while evaluating a work item, which could +# be bad if the callable being evaluated has external side-effects e.g. +# writing to a file. +# +# To work around this problem, an exit handler is installed which tells the +# workers to exit when their work queues are empty and then waits until the +# threads/processes finish. + +_threads_wakeups = weakref.WeakKeyDictionary() +_global_shutdown = False + +# Mechanism to prevent infinite process spawning. When a worker of a +# ProcessPoolExecutor nested in MAX_DEPTH Executor tries to create a new +# Executor, a LokyRecursionError is raised +MAX_DEPTH = int(os.environ.get("LOKY_MAX_DEPTH", 10)) +_CURRENT_DEPTH = 0 + +# Minimum time interval between two consecutive memory leak protection checks. +_MEMORY_LEAK_CHECK_DELAY = 1. + +# Number of bytes of memory usage allowed over the reference process size. +_MAX_MEMORY_LEAK_SIZE = int(1e8) + + +try: + from psutil import Process + _USE_PSUTIL = True + + def _get_memory_usage(pid, force_gc=False): + if force_gc: + gc.collect() + + return Process(pid).memory_info().rss + +except ImportError: + _USE_PSUTIL = False + + +class _ThreadWakeup: + def __init__(self): + self._reader, self._writer = mp.Pipe(duplex=False) + + def close(self): + self._writer.close() + self._reader.close() + + def wakeup(self): + if sys.platform == "win32" and sys.version_info[:2] < (3, 4): + # Compat for python2.7 on windows, where poll return false for + # b"" messages. Use the slightly larger message b"0". + self._writer.send_bytes(b"0") + else: + self._writer.send_bytes(b"") + + def clear(self): + while self._reader.poll(): + self._reader.recv_bytes() + + +class _ExecutorFlags(object): + """necessary references to maintain executor states without preventing gc + + It permits to keep the information needed by queue_management_thread + and crash_detection_thread to maintain the pool without preventing the + garbage collection of unreferenced executors. + """ + def __init__(self): + + self.shutdown = False + self.broken = None + self.kill_workers = False + self.shutdown_lock = threading.Lock() + + def flag_as_shutting_down(self, kill_workers=False): + with self.shutdown_lock: + self.shutdown = True + self.kill_workers = kill_workers + + def flag_as_broken(self, broken): + with self.shutdown_lock: + self.shutdown = True + self.broken = broken + + +def _python_exit(): + global _global_shutdown + _global_shutdown = True + items = list(_threads_wakeups.items()) + mp.util.debug("Interpreter shutting down. Waking up queue_manager_threads " + "{}".format(items)) + for thread, thread_wakeup in items: + if thread.is_alive(): + thread_wakeup.wakeup() + for thread, _ in items: + thread.join() + + +# Module variable to register the at_exit call +process_pool_executor_at_exit = None + +# Controls how many more calls than processes will be queued in the call queue. +# A smaller number will mean that processes spend more time idle waiting for +# work while a larger number will make Future.cancel() succeed less frequently +# (Futures in the call queue cannot be cancelled). +EXTRA_QUEUED_CALLS = 1 + + +class _RemoteTraceback(Exception): + """Embed stringification of remote traceback in local traceback + """ + def __init__(self, tb=None): + self.tb = tb + + def __str__(self): + return self.tb + + +class _ExceptionWithTraceback(BaseException): + + def __init__(self, exc): + tb = getattr(exc, "__traceback__", None) + if tb is None: + _, _, tb = sys.exc_info() + tb = traceback.format_exception(type(exc), exc, tb) + tb = ''.join(tb) + self.exc = exc + self.tb = '\n"""\n%s"""' % tb + + def __reduce__(self): + return _rebuild_exc, (self.exc, self.tb) + + +def _rebuild_exc(exc, tb): + exc = set_cause(exc, _RemoteTraceback(tb)) + return exc + + +class _WorkItem(object): + + __slots__ = ["future", "fn", "args", "kwargs"] + + def __init__(self, future, fn, args, kwargs): + self.future = future + self.fn = fn + self.args = args + self.kwargs = kwargs + + +class _ResultItem(object): + + def __init__(self, work_id, exception=None, result=None): + self.work_id = work_id + self.exception = exception + self.result = result + + +class _CallItem(object): + + def __init__(self, work_id, fn, args, kwargs): + self.work_id = work_id + self.fn = fn + self.args = args + self.kwargs = kwargs + + # Store the current loky_pickler so it is correctly set in the worker + self.loky_pickler = get_loky_pickler_name() + + def __call__(self): + set_loky_pickler(self.loky_pickler) + return self.fn(*self.args, **self.kwargs) + + def __repr__(self): + return "CallItem({}, {}, {}, {})".format( + self.work_id, self.fn, self.args, self.kwargs) + + +class _SafeQueue(Queue): + """Safe Queue set exception to the future object linked to a job""" + def __init__(self, max_size=0, ctx=None, pending_work_items=None, + running_work_items=None, thread_wakeup=None, reducers=None): + self.thread_wakeup = thread_wakeup + self.pending_work_items = pending_work_items + self.running_work_items = running_work_items + super(_SafeQueue, self).__init__(max_size, reducers=reducers, ctx=ctx) + + def _on_queue_feeder_error(self, e, obj): + if isinstance(obj, _CallItem): + # format traceback only works on python3 + if isinstance(e, struct.error): + raised_error = RuntimeError( + "The task could not be sent to the workers as it is too " + "large for `send_bytes`.") + else: + raised_error = PicklingError( + "Could not pickle the task to send it to the workers.") + tb = traceback.format_exception( + type(e), e, getattr(e, "__traceback__", None)) + raised_error = set_cause(raised_error, _RemoteTraceback( + '\n"""\n{}"""'.format(''.join(tb)))) + work_item = self.pending_work_items.pop(obj.work_id, None) + self.running_work_items.remove(obj.work_id) + # work_item can be None if another process terminated. In this + # case, the queue_manager_thread fails all work_items with + # BrokenProcessPool + if work_item is not None: + work_item.future.set_exception(raised_error) + del work_item + self.thread_wakeup.wakeup() + else: + super(_SafeQueue, self)._on_queue_feeder_error(e, obj) + + +def _get_chunks(chunksize, *iterables): + """Iterates over zip()ed iterables in chunks. """ + if sys.version_info < (3, 3): + it = itertools.izip(*iterables) + else: + it = zip(*iterables) + while True: + chunk = tuple(itertools.islice(it, chunksize)) + if not chunk: + return + yield chunk + + +def _process_chunk(fn, chunk): + """Processes a chunk of an iterable passed to map. + + Runs the function passed to map() on a chunk of the + iterable passed to map. + + This function is run in a separate process. + + """ + return [fn(*args) for args in chunk] + + +def _sendback_result(result_queue, work_id, result=None, exception=None): + """Safely send back the given result or exception""" + try: + result_queue.put(_ResultItem(work_id, result=result, + exception=exception)) + except BaseException as e: + exc = _ExceptionWithTraceback(e) + result_queue.put(_ResultItem(work_id, exception=exc)) + + +def _process_worker(call_queue, result_queue, initializer, initargs, + processes_management_lock, timeout, worker_exit_lock, + current_depth): + """Evaluates calls from call_queue and places the results in result_queue. + + This worker is run in a separate process. + + Args: + call_queue: A ctx.Queue of _CallItems that will be read and + evaluated by the worker. + result_queue: A ctx.Queue of _ResultItems that will written + to by the worker. + initializer: A callable initializer, or None + initargs: A tuple of args for the initializer + process_management_lock: A ctx.Lock avoiding worker timeout while some + workers are being spawned. + timeout: maximum time to wait for a new item in the call_queue. If that + time is expired, the worker will shutdown. + worker_exit_lock: Lock to avoid flagging the executor as broken on + workers timeout. + current_depth: Nested parallelism level, to avoid infinite spawning. + """ + if initializer is not None: + try: + initializer(*initargs) + except BaseException: + _base.LOGGER.critical('Exception in initializer:', exc_info=True) + # The parent will notice that the process stopped and + # mark the pool broken + return + + # set the global _CURRENT_DEPTH mechanism to limit recursive call + global _CURRENT_DEPTH + _CURRENT_DEPTH = current_depth + _process_reference_size = None + _last_memory_leak_check = None + pid = os.getpid() + + mp.util.debug('Worker started with timeout=%s' % timeout) + while True: + try: + call_item = call_queue.get(block=True, timeout=timeout) + if call_item is None: + mp.util.info("Shutting down worker on sentinel") + except queue.Empty: + mp.util.info("Shutting down worker after timeout %0.3fs" + % timeout) + if processes_management_lock.acquire(block=False): + processes_management_lock.release() + call_item = None + else: + mp.util.info("Could not acquire processes_management_lock") + continue + except BaseException: + previous_tb = traceback.format_exc() + try: + result_queue.put(_RemoteTraceback(previous_tb)) + except BaseException: + # If we cannot format correctly the exception, at least print + # the traceback. + print(previous_tb) + sys.exit(1) + if call_item is None: + # Notify queue management thread about clean worker shutdown + result_queue.put(pid) + with worker_exit_lock: + return + try: + r = call_item() + except BaseException as e: + exc = _ExceptionWithTraceback(e) + result_queue.put(_ResultItem(call_item.work_id, exception=exc)) + else: + _sendback_result(result_queue, call_item.work_id, result=r) + del r + + # Free the resource as soon as possible, to avoid holding onto + # open files or shared memory that is not needed anymore + del call_item + + if _USE_PSUTIL: + if _process_reference_size is None: + # Make reference measurement after the first call + _process_reference_size = _get_memory_usage(pid, force_gc=True) + _last_memory_leak_check = time() + continue + if time() - _last_memory_leak_check > _MEMORY_LEAK_CHECK_DELAY: + mem_usage = _get_memory_usage(pid) + _last_memory_leak_check = time() + if mem_usage - _process_reference_size < _MAX_MEMORY_LEAK_SIZE: + # Memory usage stays within bounds: everything is fine. + continue + + # Check again memory usage; this time take the measurement + # after a forced garbage collection to break any reference + # cycles. + mem_usage = _get_memory_usage(pid, force_gc=True) + _last_memory_leak_check = time() + if mem_usage - _process_reference_size < _MAX_MEMORY_LEAK_SIZE: + # The GC managed to free the memory: everything is fine. + continue + + # The process is leaking memory: let the master process + # know that we need to start a new worker. + mp.util.info("Memory leak detected: shutting down worker") + result_queue.put(pid) + with worker_exit_lock: + return + else: + # if psutil is not installed, trigger gc.collect events + # regularly to limit potential memory leaks due to reference cycles + if ((_last_memory_leak_check is None) or + (time() - _last_memory_leak_check > + _MEMORY_LEAK_CHECK_DELAY)): + gc.collect() + _last_memory_leak_check = time() + + +def _add_call_item_to_queue(pending_work_items, + running_work_items, + work_ids, + call_queue): + """Fills call_queue with _WorkItems from pending_work_items. + + This function never blocks. + + Args: + pending_work_items: A dict mapping work ids to _WorkItems e.g. + {5: <_WorkItem...>, 6: <_WorkItem...>, ...} + work_ids: A queue.Queue of work ids e.g. Queue([5, 6, ...]). Work ids + are consumed and the corresponding _WorkItems from + pending_work_items are transformed into _CallItems and put in + call_queue. + call_queue: A ctx.Queue that will be filled with _CallItems + derived from _WorkItems. + """ + while True: + if call_queue.full(): + return + try: + work_id = work_ids.get(block=False) + except queue.Empty: + return + else: + work_item = pending_work_items[work_id] + + if work_item.future.set_running_or_notify_cancel(): + running_work_items += [work_id] + call_queue.put(_CallItem(work_id, + work_item.fn, + work_item.args, + work_item.kwargs), + block=True) + else: + del pending_work_items[work_id] + continue + + +def _queue_management_worker(executor_reference, + executor_flags, + processes, + pending_work_items, + running_work_items, + work_ids_queue, + call_queue, + result_queue, + thread_wakeup, + processes_management_lock): + """Manages the communication between this process and the worker processes. + + This function is run in a local thread. + + Args: + executor_reference: A weakref.ref to the ProcessPoolExecutor that owns + this thread. Used to determine if the ProcessPoolExecutor has been + garbage collected and that this function can exit. + executor_flags: A ExecutorFlags holding internal states of the + ProcessPoolExecutor. It permits to know if the executor is broken + even the object has been gc. + process: A list of the ctx.Process instances used as + workers. + pending_work_items: A dict mapping work ids to _WorkItems e.g. + {5: <_WorkItem...>, 6: <_WorkItem...>, ...} + work_ids_queue: A queue.Queue of work ids e.g. Queue([5, 6, ...]). + call_queue: A ctx.Queue that will be filled with _CallItems + derived from _WorkItems for processing by the process workers. + result_queue: A ctx.SimpleQueue of _ResultItems generated by the + process workers. + thread_wakeup: A _ThreadWakeup to allow waking up the + queue_manager_thread from the main Thread and avoid deadlocks + caused by permanently locked queues. + """ + executor = None + + def is_shutting_down(): + # No more work items can be added if: + # - The interpreter is shutting down OR + # - The executor that own this worker is not broken AND + # * The executor that owns this worker has been collected OR + # * The executor that owns this worker has been shutdown. + # If the executor is broken, it should be detected in the next loop. + return (_global_shutdown or + ((executor is None or executor_flags.shutdown) + and not executor_flags.broken)) + + def shutdown_all_workers(): + mp.util.debug("queue management thread shutting down") + executor_flags.flag_as_shutting_down() + # Create a list to avoid RuntimeError due to concurrent modification of + # processes. nb_children_alive is thus an upper bound. Also release the + # processes' _worker_exit_lock to accelerate the shutdown procedure, as + # there is no need for hand-shake here. + with processes_management_lock: + n_children_alive = 0 + for p in list(processes.values()): + p._worker_exit_lock.release() + n_children_alive += 1 + n_children_to_stop = n_children_alive + n_sentinels_sent = 0 + # Send the right number of sentinels, to make sure all children are + # properly terminated. + while n_sentinels_sent < n_children_to_stop and n_children_alive > 0: + for i in range(n_children_to_stop - n_sentinels_sent): + try: + call_queue.put_nowait(None) + n_sentinels_sent += 1 + except Full: + break + with processes_management_lock: + n_children_alive = sum( + p.is_alive() for p in list(processes.values()) + ) + + # Release the queue's resources as soon as possible. Flag the feeder + # thread for clean exit to avoid having the crash detection thread flag + # the Executor as broken during the shutdown. This is safe as either: + # * We don't need to communicate with the workers anymore + # * There is nothing left in the Queue buffer except None sentinels + mp.util.debug("closing call_queue") + call_queue.close() + + mp.util.debug("joining processes") + # If .join() is not called on the created processes then + # some ctx.Queue methods may deadlock on Mac OS X. + while processes: + _, p = processes.popitem() + p.join() + mp.util.debug("queue management thread clean shutdown of worker " + "processes: {}".format(list(processes))) + + result_reader = result_queue._reader + wakeup_reader = thread_wakeup._reader + readers = [result_reader, wakeup_reader] + + while True: + _add_call_item_to_queue(pending_work_items, + running_work_items, + work_ids_queue, + call_queue) + # Wait for a result to be ready in the result_queue while checking + # that all worker processes are still running, or for a wake up + # signal send. The wake up signals come either from new tasks being + # submitted, from the executor being shutdown/gc-ed, or from the + # shutdown of the python interpreter. + worker_sentinels = [p.sentinel for p in list(processes.values())] + ready = wait(readers + worker_sentinels) + + broken = ("A worker process managed by the executor was unexpectedly " + "terminated. This could be caused by a segmentation fault " + "while calling the function or by an excessive memory usage " + "causing the Operating System to kill the worker.", None, + TerminatedWorkerError) + if result_reader in ready: + try: + result_item = result_reader.recv() + broken = None + if isinstance(result_item, _RemoteTraceback): + broken = ("A task has failed to un-serialize. Please " + "ensure that the arguments of the function are " + "all picklable.", result_item.tb, + BrokenProcessPool) + except BaseException as e: + tb = getattr(e, "__traceback__", None) + if tb is None: + _, _, tb = sys.exc_info() + broken = ("A result has failed to un-serialize. Please " + "ensure that the objects returned by the function " + "are always picklable.", + traceback.format_exception(type(e), e, tb), + BrokenProcessPool) + elif wakeup_reader in ready: + broken = None + result_item = None + thread_wakeup.clear() + if broken is not None: + msg, cause_tb, exc_type = broken + if (issubclass(exc_type, TerminatedWorkerError) and + (sys.platform != "win32")): + # In Windows, introspecting terminated workers exitcodes seems + # unstable, therefore they are not appended in the exception + # message. + msg += " The exit codes of the workers are {}".format( + get_exitcodes_terminated_worker(processes)) + + bpe = exc_type(msg) + if cause_tb is not None: + bpe = set_cause(bpe, _RemoteTraceback( + "\n'''\n{}'''".format(''.join(cause_tb)))) + # Mark the process pool broken so that submits fail right now. + executor_flags.flag_as_broken(bpe) + + # All futures in flight must be marked failed + for work_id, work_item in pending_work_items.items(): + work_item.future.set_exception(bpe) + # Delete references to object. See issue16284 + del work_item + pending_work_items.clear() + + # Terminate remaining workers forcibly: the queues or their + # locks may be in a dirty state and block forever. + while processes: + _, p = processes.popitem() + mp.util.debug('terminate process {}'.format(p.name)) + try: + recursive_terminate(p) + except ProcessLookupError: # pragma: no cover + pass + + shutdown_all_workers() + return + if isinstance(result_item, int): + # Clean shutdown of a worker using its PID, either on request + # by the executor.shutdown method or by the timeout of the worker + # itself: we should not mark the executor as broken. + with processes_management_lock: + p = processes.pop(result_item, None) + + # p can be None is the executor is concurrently shutting down. + if p is not None: + p._worker_exit_lock.release() + p.join() + del p + + # Make sure the executor have the right number of worker, even if a + # worker timeout while some jobs were submitted. If some work is + # pending or there is less processes than running items, we need to + # start a new Process and raise a warning. + n_pending = len(pending_work_items) + n_running = len(running_work_items) + if (n_pending - n_running > 0 or n_running > len(processes)): + executor = executor_reference() + if (executor is not None + and len(processes) < executor._max_workers): + warnings.warn( + "A worker stopped while some jobs were given to the " + "executor. This can be caused by a too short worker " + "timeout or by a memory leak.", UserWarning + ) + executor._adjust_process_count() + executor = None + + elif result_item is not None: + work_item = pending_work_items.pop(result_item.work_id, None) + # work_item can be None if another process terminated + if work_item is not None: + if result_item.exception: + work_item.future.set_exception(result_item.exception) + else: + work_item.future.set_result(result_item.result) + # Delete references to object. See issue16284 + del work_item + running_work_items.remove(result_item.work_id) + # Delete reference to result_item + del result_item + + # Check whether we should start shutting down. + executor = executor_reference() + # No more work items can be added if: + # - The interpreter is shutting down OR + # - The executor that owns this worker has been collected OR + # - The executor that owns this worker has been shutdown. + if is_shutting_down(): + # bpo-33097: Make sure that the executor is flagged as shutting + # down even if it is shutdown by the interpreter exiting. + with executor_flags.shutdown_lock: + executor_flags.shutdown = True + if executor_flags.kill_workers: + while pending_work_items: + _, work_item = pending_work_items.popitem() + work_item.future.set_exception(ShutdownExecutorError( + "The Executor was shutdown before this job could " + "complete.")) + del work_item + # Terminate remaining workers forcibly: the queues or their + # locks may be in a dirty state and block forever. + while processes: + _, p = processes.popitem() + recursive_terminate(p) + shutdown_all_workers() + return + # Since no new work items can be added, it is safe to shutdown + # this thread if there are no pending work items. + if not pending_work_items: + shutdown_all_workers() + return + elif executor_flags.broken: + return + executor = None + + +_system_limits_checked = False +_system_limited = None + + +def _check_system_limits(): + global _system_limits_checked, _system_limited + if _system_limits_checked: + if _system_limited: + raise NotImplementedError(_system_limited) + _system_limits_checked = True + try: + nsems_max = os.sysconf("SC_SEM_NSEMS_MAX") + except (AttributeError, ValueError): + # sysconf not available or setting not available + return + if nsems_max == -1: + # undetermined limit, assume that limit is determined + # by available memory only + return + if nsems_max >= 256: + # minimum number of semaphores available + # according to POSIX + return + _system_limited = ("system provides too few semaphores (%d available, " + "256 necessary)" % nsems_max) + raise NotImplementedError(_system_limited) + + +def _chain_from_iterable_of_lists(iterable): + """ + Specialized implementation of itertools.chain.from_iterable. + Each item in *iterable* should be a list. This function is + careful not to keep references to yielded objects. + """ + for element in iterable: + element.reverse() + while element: + yield element.pop() + + +def _check_max_depth(context): + # Limit the maxmal recursion level + global _CURRENT_DEPTH + if context.get_start_method() == "fork" and _CURRENT_DEPTH > 0: + raise LokyRecursionError( + "Could not spawn extra nested processes at depth superior to " + "MAX_DEPTH=1. It is not possible to increase this limit when " + "using the 'fork' start method.") + + if 0 < MAX_DEPTH and _CURRENT_DEPTH + 1 > MAX_DEPTH: + raise LokyRecursionError( + "Could not spawn extra nested processes at depth superior to " + "MAX_DEPTH={}. If this is intendend, you can change this limit " + "with the LOKY_MAX_DEPTH environment variable.".format(MAX_DEPTH)) + + +class LokyRecursionError(RuntimeError): + """Raised when a process try to spawn too many levels of nested processes. + """ + + +class BrokenProcessPool(_BPPException): + """ + Raised when the executor is broken while a future was in the running state. + The cause can an error raised when unpickling the task in the worker + process or when unpickling the result value in the parent process. It can + also be caused by a worker process being terminated unexpectedly. + """ + + +class TerminatedWorkerError(BrokenProcessPool): + """ + Raised when a process in a ProcessPoolExecutor terminated abruptly + while a future was in the running state. + """ + + +# Alias for backward compat (for code written for loky 1.1.4 and earlier). Do +# not use in new code. +BrokenExecutor = BrokenProcessPool + + +class ShutdownExecutorError(RuntimeError): + + """ + Raised when a ProcessPoolExecutor is shutdown while a future was in the + running or pending state. + """ + + +class ProcessPoolExecutor(_base.Executor): + + _at_exit = None + + def __init__(self, max_workers=None, job_reducers=None, + result_reducers=None, timeout=None, context=None, + initializer=None, initargs=(), env=None): + """Initializes a new ProcessPoolExecutor instance. + + Args: + max_workers: int, optional (default: cpu_count()) + The maximum number of processes that can be used to execute the + given calls. If None or not given then as many worker processes + will be created as the number of CPUs the current process + can use. + job_reducers, result_reducers: dict(type: reducer_func) + Custom reducer for pickling the jobs and the results from the + Executor. If only `job_reducers` is provided, `result_reducer` + will use the same reducers + timeout: int, optional (default: None) + Idle workers exit after timeout seconds. If a new job is + submitted after the timeout, the executor will start enough + new Python processes to make sure the pool of workers is full. + context: A multiprocessing context to launch the workers. This + object should provide SimpleQueue, Queue and Process. + initializer: An callable used to initialize worker processes. + initargs: A tuple of arguments to pass to the initializer. + env: A dict of environment variable to overwrite in the child + process. The environment variables are set before any module is + loaded. Note that this only works with the loky context and it + is unreliable under windows with Python < 3.6. + """ + _check_system_limits() + + if max_workers is None: + self._max_workers = cpu_count() + else: + if max_workers <= 0: + raise ValueError("max_workers must be greater than 0") + self._max_workers = max_workers + + if context is None: + context = get_context() + self._context = context + self._env = env + + if initializer is not None and not callable(initializer): + raise TypeError("initializer must be a callable") + self._initializer = initializer + self._initargs = initargs + + _check_max_depth(self._context) + + if result_reducers is None: + result_reducers = job_reducers + + # Timeout + self._timeout = timeout + + # Internal variables of the ProcessPoolExecutor + self._processes = {} + self._queue_count = 0 + self._pending_work_items = {} + self._running_work_items = [] + self._work_ids = queue.Queue() + self._processes_management_lock = self._context.Lock() + self._queue_management_thread = None + + # _ThreadWakeup is a communication channel used to interrupt the wait + # of the main loop of queue_manager_thread from another thread (e.g. + # when calling executor.submit or executor.shutdown). We do not use the + # _result_queue to send the wakeup signal to the queue_manager_thread + # as it could result in a deadlock if a worker process dies with the + # _result_queue write lock still acquired. + self._queue_management_thread_wakeup = _ThreadWakeup() + + # Flag to hold the state of the Executor. This permits to introspect + # the Executor state even once it has been garbage collected. + self._flags = _ExecutorFlags() + + # Finally setup the queues for interprocess communication + self._setup_queues(job_reducers, result_reducers) + + mp.util.debug('ProcessPoolExecutor is setup') + + def _setup_queues(self, job_reducers, result_reducers, queue_size=None): + # Make the call queue slightly larger than the number of processes to + # prevent the worker processes from idling. But don't make it too big + # because futures in the call queue cannot be cancelled. + if queue_size is None: + queue_size = 2 * self._max_workers + EXTRA_QUEUED_CALLS + self._call_queue = _SafeQueue( + max_size=queue_size, pending_work_items=self._pending_work_items, + running_work_items=self._running_work_items, + thread_wakeup=self._queue_management_thread_wakeup, + reducers=job_reducers, ctx=self._context) + # Killed worker processes can produce spurious "broken pipe" + # tracebacks in the queue's own worker thread. But we detect killed + # processes anyway, so silence the tracebacks. + self._call_queue._ignore_epipe = True + + self._result_queue = SimpleQueue(reducers=result_reducers, + ctx=self._context) + + def _start_queue_management_thread(self): + if self._queue_management_thread is None: + mp.util.debug('_start_queue_management_thread called') + + # When the executor gets garbarge collected, the weakref callback + # will wake up the queue management thread so that it can terminate + # if there is no pending work item. + def weakref_cb(_, + thread_wakeup=self._queue_management_thread_wakeup): + mp.util.debug('Executor collected: triggering callback for' + ' QueueManager wakeup') + thread_wakeup.wakeup() + + # Start the processes so that their sentinels are known. + self._queue_management_thread = threading.Thread( + target=_queue_management_worker, + args=(weakref.ref(self, weakref_cb), + self._flags, + self._processes, + self._pending_work_items, + self._running_work_items, + self._work_ids, + self._call_queue, + self._result_queue, + self._queue_management_thread_wakeup, + self._processes_management_lock), + name="QueueManagerThread") + self._queue_management_thread.daemon = True + self._queue_management_thread.start() + + # register this executor in a mechanism that ensures it will wakeup + # when the interpreter is exiting. + _threads_wakeups[self._queue_management_thread] = \ + self._queue_management_thread_wakeup + + global process_pool_executor_at_exit + if process_pool_executor_at_exit is None: + # Ensure that the _python_exit function will be called before + # the multiprocessing.Queue._close finalizers which have an + # exitpriority of 10. + process_pool_executor_at_exit = mp.util.Finalize( + None, _python_exit, exitpriority=20) + + def _adjust_process_count(self): + for _ in range(len(self._processes), self._max_workers): + worker_exit_lock = self._context.BoundedSemaphore(1) + args = (self._call_queue, self._result_queue, self._initializer, + self._initargs, self._processes_management_lock, + self._timeout, worker_exit_lock, _CURRENT_DEPTH + 1) + worker_exit_lock.acquire() + try: + # Try to spawn the process with some environment variable to + # overwrite but it only works with the loky context for now. + p = self._context.Process(target=_process_worker, args=args, + env=self._env) + except TypeError: + p = self._context.Process(target=_process_worker, args=args) + p._worker_exit_lock = worker_exit_lock + p.start() + self._processes[p.pid] = p + mp.util.debug('Adjust process count : {}'.format(self._processes)) + + def _ensure_executor_running(self): + """ensures all workers and management thread are running + """ + with self._processes_management_lock: + if len(self._processes) != self._max_workers: + self._adjust_process_count() + self._start_queue_management_thread() + + def submit(self, fn, *args, **kwargs): + with self._flags.shutdown_lock: + if self._flags.broken is not None: + raise self._flags.broken + if self._flags.shutdown: + raise ShutdownExecutorError( + 'cannot schedule new futures after shutdown') + + # Cannot submit a new calls once the interpreter is shutting down. + # This check avoids spawning new processes at exit. + if _global_shutdown: + raise RuntimeError('cannot schedule new futures after ' + 'interpreter shutdown') + + f = _base.Future() + w = _WorkItem(f, fn, args, kwargs) + + self._pending_work_items[self._queue_count] = w + self._work_ids.put(self._queue_count) + self._queue_count += 1 + # Wake up queue management thread + self._queue_management_thread_wakeup.wakeup() + + self._ensure_executor_running() + return f + submit.__doc__ = _base.Executor.submit.__doc__ + + def map(self, fn, *iterables, **kwargs): + """Returns an iterator equivalent to map(fn, iter). + + Args: + fn: A callable that will take as many arguments as there are + passed iterables. + timeout: The maximum number of seconds to wait. If None, then there + is no limit on the wait time. + chunksize: If greater than one, the iterables will be chopped into + chunks of size chunksize and submitted to the process pool. + If set to one, the items in the list will be sent one at a + time. + + Returns: + An iterator equivalent to: map(func, *iterables) but the calls may + be evaluated out-of-order. + + Raises: + TimeoutError: If the entire result iterator could not be generated + before the given timeout. + Exception: If fn(*args) raises for any values. + """ + timeout = kwargs.get('timeout', None) + chunksize = kwargs.get('chunksize', 1) + if chunksize < 1: + raise ValueError("chunksize must be >= 1.") + + results = super(ProcessPoolExecutor, self).map( + partial(_process_chunk, fn), _get_chunks(chunksize, *iterables), + timeout=timeout) + return _chain_from_iterable_of_lists(results) + + def shutdown(self, wait=True, kill_workers=False): + mp.util.debug('shutting down executor %s' % self) + + self._flags.flag_as_shutting_down(kill_workers) + qmt = self._queue_management_thread + qmtw = self._queue_management_thread_wakeup + if qmt: + self._queue_management_thread = None + if qmtw: + self._queue_management_thread_wakeup = None + # Wake up queue management thread + if qmtw is not None: + try: + qmtw.wakeup() + except OSError: + # Can happen in case of concurrent calls to shutdown. + pass + if wait: + qmt.join() + + cq = self._call_queue + if cq: + self._call_queue = None + cq.close() + if wait: + cq.join_thread() + self._result_queue = None + self._processes_management_lock = None + + if qmtw: + try: + qmtw.close() + except OSError: + # Can happen in case of concurrent calls to shutdown. + pass + shutdown.__doc__ = _base.Executor.shutdown.__doc__ diff --git a/my_env/Lib/site-packages/joblib/externals/loky/reusable_executor.py b/my_env/Lib/site-packages/joblib/externals/loky/reusable_executor.py new file mode 100644 index 000000000..b2af6f4fc --- /dev/null +++ b/my_env/Lib/site-packages/joblib/externals/loky/reusable_executor.py @@ -0,0 +1,214 @@ +############################################################################### +# Reusable ProcessPoolExecutor +# +# author: Thomas Moreau and Olivier Grisel +# +import time +import warnings +import threading +import multiprocessing as mp + +from .process_executor import ProcessPoolExecutor, EXTRA_QUEUED_CALLS +from .backend.context import cpu_count +from .backend import get_context + +__all__ = ['get_reusable_executor'] + +# Python 2 compat helper +STRING_TYPE = type("") + +# Singleton executor and id management +_executor_lock = threading.RLock() +_next_executor_id = 0 +_executor = None +_executor_kwargs = None + + +def _get_next_executor_id(): + """Ensure that each successive executor instance has a unique, monotonic id. + + The purpose of this monotonic id is to help debug and test automated + instance creation. + """ + global _next_executor_id + with _executor_lock: + executor_id = _next_executor_id + _next_executor_id += 1 + return executor_id + + +def get_reusable_executor(max_workers=None, context=None, timeout=10, + kill_workers=False, reuse="auto", + job_reducers=None, result_reducers=None, + initializer=None, initargs=(), env=None): + """Return the current ReusableExectutor instance. + + Start a new instance if it has not been started already or if the previous + instance was left in a broken state. + + If the previous instance does not have the requested number of workers, the + executor is dynamically resized to adjust the number of workers prior to + returning. + + Reusing a singleton instance spares the overhead of starting new worker + processes and importing common python packages each time. + + ``max_workers`` controls the maximum number of tasks that can be running in + parallel in worker processes. By default this is set to the number of + CPUs on the host. + + Setting ``timeout`` (in seconds) makes idle workers automatically shutdown + so as to release system resources. New workers are respawn upon submission + of new tasks so that ``max_workers`` are available to accept the newly + submitted tasks. Setting ``timeout`` to around 100 times the time required + to spawn new processes and import packages in them (on the order of 100ms) + ensures that the overhead of spawning workers is negligible. + + Setting ``kill_workers=True`` makes it possible to forcibly interrupt + previously spawned jobs to get a new instance of the reusable executor + with new constructor argument values. + + The ``job_reducers`` and ``result_reducers`` are used to customize the + pickling of tasks and results send to the executor. + + When provided, the ``initializer`` is run first in newly spawned + processes with argument ``initargs``. + + The environment variable in the child process are a copy of the values in + the main process. One can provide a dict ``{ENV: VAL}`` where ``ENV`` and + ``VAR`` are string literals to overwrite the environment variable ``ENV`` + in the child processes to value ``VAL``. The environment variables are set + in the children before any module is loaded. This only works with with the + ``loky`` context and it is unreliable on Windows with Python < 3.6. + """ + with _executor_lock: + global _executor, _executor_kwargs + executor = _executor + + if max_workers is None: + if reuse is True and executor is not None: + max_workers = executor._max_workers + else: + max_workers = cpu_count() + elif max_workers <= 0: + raise ValueError( + "max_workers must be greater than 0, got {}." + .format(max_workers)) + + if isinstance(context, STRING_TYPE): + context = get_context(context) + if context is not None and context.get_start_method() == "fork": + raise ValueError("Cannot use reusable executor with the 'fork' " + "context") + + kwargs = dict(context=context, timeout=timeout, + job_reducers=job_reducers, + result_reducers=result_reducers, + initializer=initializer, initargs=initargs, + env=env) + if executor is None: + mp.util.debug("Create a executor with max_workers={}." + .format(max_workers)) + executor_id = _get_next_executor_id() + _executor_kwargs = kwargs + _executor = executor = _ReusablePoolExecutor( + _executor_lock, max_workers=max_workers, + executor_id=executor_id, **kwargs) + else: + if reuse == 'auto': + reuse = kwargs == _executor_kwargs + if (executor._flags.broken or executor._flags.shutdown + or not reuse): + if executor._flags.broken: + reason = "broken" + elif executor._flags.shutdown: + reason = "shutdown" + else: + reason = "arguments have changed" + mp.util.debug( + "Creating a new executor with max_workers={} as the " + "previous instance cannot be reused ({})." + .format(max_workers, reason)) + executor.shutdown(wait=True, kill_workers=kill_workers) + _executor = executor = _executor_kwargs = None + # Recursive call to build a new instance + return get_reusable_executor(max_workers=max_workers, + **kwargs) + else: + mp.util.debug("Reusing existing executor with max_workers={}." + .format(executor._max_workers)) + executor._resize(max_workers) + + return executor + + +class _ReusablePoolExecutor(ProcessPoolExecutor): + def __init__(self, submit_resize_lock, max_workers=None, context=None, + timeout=None, executor_id=0, job_reducers=None, + result_reducers=None, initializer=None, initargs=(), + env=None): + super(_ReusablePoolExecutor, self).__init__( + max_workers=max_workers, context=context, timeout=timeout, + job_reducers=job_reducers, result_reducers=result_reducers, + initializer=initializer, initargs=initargs, env=env) + self.executor_id = executor_id + self._submit_resize_lock = submit_resize_lock + + def submit(self, fn, *args, **kwargs): + with self._submit_resize_lock: + return super(_ReusablePoolExecutor, self).submit( + fn, *args, **kwargs) + + def _resize(self, max_workers): + with self._submit_resize_lock: + if max_workers is None: + raise ValueError("Trying to resize with max_workers=None") + elif max_workers == self._max_workers: + return + + if self._queue_management_thread is None: + # If the queue_management_thread has not been started + # then no processes have been spawned and we can just + # update _max_workers and return + self._max_workers = max_workers + return + + self._wait_job_completion() + + # Some process might have returned due to timeout so check how many + # children are still alive. Use the _process_management_lock to + # ensure that no process are spawned or timeout during the resize. + with self._processes_management_lock: + processes = list(self._processes.values()) + nb_children_alive = sum(p.is_alive() for p in processes) + self._max_workers = max_workers + for _ in range(max_workers, nb_children_alive): + self._call_queue.put(None) + while (len(self._processes) > max_workers + and not self._flags.broken): + time.sleep(1e-3) + + self._adjust_process_count() + processes = list(self._processes.values()) + while not all([p.is_alive() for p in processes]): + time.sleep(1e-3) + + def _wait_job_completion(self): + """Wait for the cache to be empty before resizing the pool.""" + # Issue a warning to the user about the bad effect of this usage. + if len(self._pending_work_items) > 0: + warnings.warn("Trying to resize an executor with running jobs: " + "waiting for jobs completion before resizing.", + UserWarning) + mp.util.debug("Executor {} waiting for jobs completion before" + " resizing".format(self.executor_id)) + # Wait for the completion of the jobs + while len(self._pending_work_items) > 0: + time.sleep(1e-3) + + def _setup_queues(self, job_reducers, result_reducers): + # As this executor can be resized, use a large queue size to avoid + # underestimating capacity and introducing overhead + queue_size = 2 * cpu_count() + EXTRA_QUEUED_CALLS + super(_ReusablePoolExecutor, self)._setup_queues( + job_reducers, result_reducers, queue_size=queue_size) diff --git a/my_env/Lib/site-packages/joblib/format_stack.py b/my_env/Lib/site-packages/joblib/format_stack.py new file mode 100644 index 000000000..949ac7d95 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/format_stack.py @@ -0,0 +1,401 @@ +""" +Represent an exception with a lot of information. + +Provides 2 useful functions: + +format_exc: format an exception into a complete traceback, with full + debugging instruction. + +format_outer_frames: format the current position in the stack call. + +Adapted from IPython's VerboseTB. +""" +# Authors: Gael Varoquaux < gael dot varoquaux at normalesup dot org > +# Nathaniel Gray +# Fernando Perez +# Copyright: 2010, Gael Varoquaux +# 2001-2004, Fernando Perez +# 2001 Nathaniel Gray +# License: BSD 3 clause + + +import inspect +import keyword +import linecache +import os +import pydoc +import sys +import time +import tokenize +import traceback + +try: # Python 2 + generate_tokens = tokenize.generate_tokens +except AttributeError: # Python 3 + generate_tokens = tokenize.tokenize + +INDENT = ' ' * 8 + + +############################################################################### +# some internal-use functions +def safe_repr(value): + """Hopefully pretty robust repr equivalent.""" + # this is pretty horrible but should always return *something* + try: + return pydoc.text.repr(value) + except KeyboardInterrupt: + raise + except: + try: + return repr(value) + except KeyboardInterrupt: + raise + except: + try: + # all still in an except block so we catch + # getattr raising + name = getattr(value, '__name__', None) + if name: + # ick, recursion + return safe_repr(name) + klass = getattr(value, '__class__', None) + if klass: + return '%s instance' % safe_repr(klass) + except KeyboardInterrupt: + raise + except: + return 'UNRECOVERABLE REPR FAILURE' + + +def eq_repr(value, repr=safe_repr): + return '=%s' % repr(value) + + +############################################################################### +def uniq_stable(elems): + """uniq_stable(elems) -> list + + Return from an iterable, a list of all the unique elements in the input, + but maintaining the order in which they first appear. + + A naive solution to this problem which just makes a dictionary with the + elements as keys fails to respect the stability condition, since + dictionaries are unsorted by nature. + + Note: All elements in the input must be hashable. + """ + unique = [] + unique_set = set() + for nn in elems: + if nn not in unique_set: + unique.append(nn) + unique_set.add(nn) + return unique + + +############################################################################### +def fix_frame_records_filenames(records): + """Try to fix the filenames in each record from inspect.getinnerframes(). + + Particularly, modules loaded from within zip files have useless filenames + attached to their code object, and inspect.getinnerframes() just uses it. + """ + fixed_records = [] + for frame, filename, line_no, func_name, lines, index in records: + # Look inside the frame's globals dictionary for __file__, which should + # be better. + better_fn = frame.f_globals.get('__file__', None) + if isinstance(better_fn, str): + # Check the type just in case someone did something weird with + # __file__. It might also be None if the error occurred during + # import. + filename = better_fn + fixed_records.append((frame, filename, line_no, func_name, lines, + index)) + return fixed_records + + +def _fixed_getframes(etb, context=1, tb_offset=0): + LNUM_POS, LINES_POS, INDEX_POS = 2, 4, 5 + + records = fix_frame_records_filenames(inspect.getinnerframes(etb, context)) + + # If the error is at the console, don't build any context, since it would + # otherwise produce 5 blank lines printed out (there is no file at the + # console) + rec_check = records[tb_offset:] + try: + rname = rec_check[0][1] + if rname == '' or rname.endswith(''): + return rec_check + except IndexError: + pass + + aux = traceback.extract_tb(etb) + assert len(records) == len(aux) + for i, (file, lnum, _, _) in enumerate(aux): + maybe_start = lnum - 1 - context // 2 + start = max(maybe_start, 0) + end = start + context + lines = linecache.getlines(file)[start:end] + buf = list(records[i]) + buf[LNUM_POS] = lnum + buf[INDEX_POS] = lnum - 1 - start + buf[LINES_POS] = lines + records[i] = tuple(buf) + return records[tb_offset:] + + +def _format_traceback_lines(lnum, index, lines, lvals=None): + numbers_width = 7 + res = [] + i = lnum - index + + for line in lines: + if i == lnum: + # This is the line with the error + pad = numbers_width - len(str(i)) + if pad >= 3: + marker = '-' * (pad - 3) + '-> ' + elif pad == 2: + marker = '> ' + elif pad == 1: + marker = '>' + else: + marker = '' + num = marker + str(i) + else: + num = '%*s' % (numbers_width, i) + line = '%s %s' % (num, line) + + res.append(line) + if lvals and i == lnum: + res.append(lvals + '\n') + i = i + 1 + return res + + +def format_records(records): # , print_globals=False): + # Loop over all records printing context and info + frames = [] + abspath = os.path.abspath + for frame, file, lnum, func, lines, index in records: + try: + file = file and abspath(file) or '?' + except OSError: + # if file is '' or something not in the filesystem, + # the abspath call will throw an OSError. Just ignore it and + # keep the original file string. + pass + + if file.endswith('.pyc'): + file = file[:-4] + '.py' + + link = file + + args, varargs, varkw, locals = inspect.getargvalues(frame) + + if func == '?': + call = '' + else: + # Decide whether to include variable details or not + try: + call = 'in %s%s' % (func, inspect.formatargvalues(args, + varargs, varkw, locals, + formatvalue=eq_repr)) + except KeyError: + # Very odd crash from inspect.formatargvalues(). The + # scenario under which it appeared was a call to + # view(array,scale) in NumTut.view.view(), where scale had + # been defined as a scalar (it should be a tuple). Somehow + # inspect messes up resolving the argument list of view() + # and barfs out. At some point I should dig into this one + # and file a bug report about it. + print("\nJoblib's exception reporting continues...\n") + call = 'in %s(***failed resolving arguments***)' % func + + # Initialize a list of names on the current line, which the + # tokenizer below will populate. + names = [] + + def tokeneater(token_type, token, start, end, line): + """Stateful tokeneater which builds dotted names. + + The list of names it appends to (from the enclosing scope) can + contain repeated composite names. This is unavoidable, since + there is no way to disambiguate partial dotted structures until + the full list is known. The caller is responsible for pruning + the final list of duplicates before using it.""" + + # build composite names + if token == '.': + try: + names[-1] += '.' + # store state so the next token is added for x.y.z names + tokeneater.name_cont = True + return + except IndexError: + pass + if token_type == tokenize.NAME and token not in keyword.kwlist: + if tokeneater.name_cont: + # Dotted names + names[-1] += token + tokeneater.name_cont = False + else: + # Regular new names. We append everything, the caller + # will be responsible for pruning the list later. It's + # very tricky to try to prune as we go, b/c composite + # names can fool us. The pruning at the end is easy + # to do (or the caller can print a list with repeated + # names if so desired. + names.append(token) + elif token_type == tokenize.NEWLINE: + raise IndexError + # we need to store a bit of state in the tokenizer to build + # dotted names + tokeneater.name_cont = False + + def linereader(file=file, lnum=[lnum], getline=linecache.getline): + line = getline(file, lnum[0]) + lnum[0] += 1 + return line + + # Build the list of names on this line of code where the exception + # occurred. + try: + # This builds the names list in-place by capturing it from the + # enclosing scope. + for token in generate_tokens(linereader): + tokeneater(*token) + except (IndexError, UnicodeDecodeError, SyntaxError): + # signals exit of tokenizer + # SyntaxError can happen when trying to tokenize + # a compiled (e.g. .so or .pyd) extension + pass + except tokenize.TokenError as msg: + _m = ("An unexpected error occurred while tokenizing input file %s\n" + "The following traceback may be corrupted or invalid\n" + "The error message is: %s\n" % (file, msg)) + print(_m) + + # prune names list of duplicates, but keep the right order + unique_names = uniq_stable(names) + + # Start loop over vars + lvals = [] + for name_full in unique_names: + name_base = name_full.split('.', 1)[0] + if name_base in frame.f_code.co_varnames: + if name_base in locals.keys(): + try: + value = safe_repr(eval(name_full, locals)) + except: + value = "undefined" + else: + value = "undefined" + name = name_full + lvals.append('%s = %s' % (name, value)) + #elif print_globals: + # if frame.f_globals.has_key(name_base): + # try: + # value = safe_repr(eval(name_full,frame.f_globals)) + # except: + # value = "undefined" + # else: + # value = "undefined" + # name = 'global %s' % name_full + # lvals.append('%s = %s' % (name,value)) + if lvals: + lvals = '%s%s' % (INDENT, ('\n%s' % INDENT).join(lvals)) + else: + lvals = '' + + level = '%s\n%s %s\n' % (75 * '.', link, call) + + if index is None: + frames.append(level) + else: + frames.append('%s%s' % (level, ''.join( + _format_traceback_lines(lnum, index, lines, lvals)))) + + return frames + + +############################################################################### +def format_exc(etype, evalue, etb, context=5, tb_offset=0): + """ Return a nice text document describing the traceback. + + Parameters + ----------- + etype, evalue, etb: as returned by sys.exc_info + context: number of lines of the source file to plot + tb_offset: the number of stack frame not to use (0 = use all) + + """ + # some locals + try: + etype = etype.__name__ + except AttributeError: + pass + + # Header with the exception type, python version, and date + pyver = 'Python ' + sys.version.split()[0] + ': ' + sys.executable + date = time.ctime(time.time()) + pid = 'PID: %i' % os.getpid() + + head = '%s%s%s\n%s%s%s' % ( + etype, ' ' * (75 - len(str(etype)) - len(date)), + date, pid, ' ' * (75 - len(str(pid)) - len(pyver)), + pyver) + + # Drop topmost frames if requested + records = _fixed_getframes(etb, context, tb_offset) + + # Get (safely) a string form of the exception info + try: + etype_str, evalue_str = map(str, (etype, evalue)) + except BaseException: + # User exception is improperly defined. + etype, evalue = str, sys.exc_info()[:2] + etype_str, evalue_str = map(str, (etype, evalue)) + # ... and format it + exception = ['%s: %s' % (etype_str, evalue_str)] + frames = format_records(records) + return '%s\n%s\n%s' % (head, '\n'.join(frames), ''.join(exception[0])) + + +############################################################################### +def format_outer_frames(context=5, stack_start=None, stack_end=None, + ignore_ipython=True): + LNUM_POS, LINES_POS, INDEX_POS = 2, 4, 5 + records = inspect.getouterframes(inspect.currentframe()) + output = list() + + for i, (frame, filename, line_no, func_name, lines, index) \ + in enumerate(records): + # Look inside the frame's globals dictionary for __file__, which should + # be better. + better_fn = frame.f_globals.get('__file__', None) + if isinstance(better_fn, str): + # Check the type just in case someone did something weird with + # __file__. It might also be None if the error occurred during + # import. + filename = better_fn + if filename.endswith('.pyc'): + filename = filename[:-4] + '.py' + if ignore_ipython: + # Hack to avoid printing the internals of IPython + if (os.path.basename(filename) in ('iplib.py', 'py3compat.py') + and func_name in ('execfile', 'safe_execfile', 'runcode')): + break + maybe_start = line_no - 1 - context // 2 + start = max(maybe_start, 0) + end = start + context + lines = linecache.getlines(filename)[start:end] + buf = list(records[i]) + buf[LNUM_POS] = line_no + buf[INDEX_POS] = line_no - 1 - start + buf[LINES_POS] = lines + output.append(tuple(buf)) + return '\n'.join(format_records(output[stack_end:stack_start:-1])) diff --git a/my_env/Lib/site-packages/joblib/func_inspect.py b/my_env/Lib/site-packages/joblib/func_inspect.py new file mode 100644 index 000000000..d4d267094 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/func_inspect.py @@ -0,0 +1,361 @@ +""" +My own variation on function-specific inspect-like features. +""" + +# Author: Gael Varoquaux +# Copyright (c) 2009 Gael Varoquaux +# License: BSD Style, 3 clauses. + +from itertools import islice +import inspect +import warnings +import re +import os +import collections + +from ._compat import _basestring +from .logger import pformat +from ._memory_helpers import open_py_source +from ._compat import PY3_OR_LATER + +full_argspec_fields = ('args varargs varkw defaults kwonlyargs ' + 'kwonlydefaults annotations') +full_argspec_type = collections.namedtuple('FullArgSpec', full_argspec_fields) + + +def get_func_code(func): + """ Attempts to retrieve a reliable function code hash. + + The reason we don't use inspect.getsource is that it caches the + source, whereas we want this to be modified on the fly when the + function is modified. + + Returns + ------- + func_code: string + The function code + source_file: string + The path to the file in which the function is defined. + first_line: int + The first line of the code in the source file. + + Notes + ------ + This function does a bit more magic than inspect, and is thus + more robust. + """ + source_file = None + try: + code = func.__code__ + source_file = code.co_filename + if not os.path.exists(source_file): + # Use inspect for lambda functions and functions defined in an + # interactive shell, or in doctests + source_code = ''.join(inspect.getsourcelines(func)[0]) + line_no = 1 + if source_file.startswith('', source_file).groups() + line_no = int(line_no) + source_file = '' % source_file + return source_code, source_file, line_no + # Try to retrieve the source code. + with open_py_source(source_file) as source_file_obj: + first_line = code.co_firstlineno + # All the lines after the function definition: + source_lines = list(islice(source_file_obj, first_line - 1, None)) + return ''.join(inspect.getblock(source_lines)), source_file, first_line + except: + # If the source code fails, we use the hash. This is fragile and + # might change from one session to another. + if hasattr(func, '__code__'): + # Python 3.X + return str(func.__code__.__hash__()), source_file, -1 + else: + # Weird objects like numpy ufunc don't have __code__ + # This is fragile, as quite often the id of the object is + # in the repr, so it might not persist across sessions, + # however it will work for ufuncs. + return repr(func), source_file, -1 + + +def _clean_win_chars(string): + """Windows cannot encode some characters in filename.""" + import urllib + if hasattr(urllib, 'quote'): + quote = urllib.quote + else: + # In Python 3, quote is elsewhere + import urllib.parse + quote = urllib.parse.quote + for char in ('<', '>', '!', ':', '\\'): + string = string.replace(char, quote(char)) + return string + + +def get_func_name(func, resolv_alias=True, win_characters=True): + """ Return the function import path (as a list of module names), and + a name for the function. + + Parameters + ---------- + func: callable + The func to inspect + resolv_alias: boolean, optional + If true, possible local aliases are indicated. + win_characters: boolean, optional + If true, substitute special characters using urllib.quote + This is useful in Windows, as it cannot encode some filenames + """ + if hasattr(func, '__module__'): + module = func.__module__ + else: + try: + module = inspect.getmodule(func) + except TypeError: + if hasattr(func, '__class__'): + module = func.__class__.__module__ + else: + module = 'unknown' + if module is None: + # Happens in doctests, eg + module = '' + if module == '__main__': + try: + filename = os.path.abspath(inspect.getsourcefile(func)) + except: + filename = None + if filename is not None: + # mangling of full path to filename + parts = filename.split(os.sep) + if parts[-1].startswith(' 1500: + formatted_arg = '%s...' % formatted_arg[:700] + return formatted_arg + + +def format_signature(func, *args, **kwargs): + # XXX: Should this use inspect.formatargvalues/formatargspec? + module, name = get_func_name(func) + module = [m for m in module if m] + if module: + module.append(name) + module_path = '.'.join(module) + else: + module_path = name + arg_str = list() + previous_length = 0 + for arg in args: + formatted_arg = _format_arg(arg) + if previous_length > 80: + formatted_arg = '\n%s' % formatted_arg + previous_length = len(formatted_arg) + arg_str.append(formatted_arg) + arg_str.extend(['%s=%s' % (v, _format_arg(i)) for v, i in kwargs.items()]) + arg_str = ', '.join(arg_str) + + signature = '%s(%s)' % (name, arg_str) + return module_path, signature + + +def format_call(func, args, kwargs, object_name="Memory"): + """ Returns a nicely formatted statement displaying the function + call with the given arguments. + """ + path, signature = format_signature(func, *args, **kwargs) + msg = '%s\n[%s] Calling %s...\n%s' % (80 * '_', object_name, + path, signature) + return msg + # XXX: Not using logging framework + # self.debug(msg) diff --git a/my_env/Lib/site-packages/joblib/hashing.py b/my_env/Lib/site-packages/joblib/hashing.py new file mode 100644 index 000000000..670bd9dde --- /dev/null +++ b/my_env/Lib/site-packages/joblib/hashing.py @@ -0,0 +1,267 @@ +""" +Fast cryptographic hash of Python objects, with a special case for fast +hashing of numpy arrays. +""" + +# Author: Gael Varoquaux +# Copyright (c) 2009 Gael Varoquaux +# License: BSD Style, 3 clauses. + +import pickle +import hashlib +import sys +import types +import struct +import io +import decimal + +from ._compat import _bytes_or_unicode, PY3_OR_LATER + + +if PY3_OR_LATER: + Pickler = pickle._Pickler +else: + Pickler = pickle.Pickler + + +class _ConsistentSet(object): + """ Class used to ensure the hash of Sets is preserved + whatever the order of its items. + """ + def __init__(self, set_sequence): + # Forces order of elements in set to ensure consistent hash. + try: + # Trying first to order the set assuming the type of elements is + # consistent and orderable. + # This fails on python 3 when elements are unorderable + # but we keep it in a try as it's faster. + self._sequence = sorted(set_sequence) + except (TypeError, decimal.InvalidOperation): + # If elements are unorderable, sorting them using their hash. + # This is slower but works in any case. + self._sequence = sorted((hash(e) for e in set_sequence)) + + +class _MyHash(object): + """ Class used to hash objects that won't normally pickle """ + + def __init__(self, *args): + self.args = args + + +class Hasher(Pickler): + """ A subclass of pickler, to do cryptographic hashing, rather than + pickling. + """ + + def __init__(self, hash_name='md5'): + self.stream = io.BytesIO() + # By default we want a pickle protocol that only changes with + # the major python version and not the minor one + protocol = 3 if PY3_OR_LATER else 2 + Pickler.__init__(self, self.stream, protocol=protocol) + # Initialise the hash obj + self._hash = hashlib.new(hash_name) + + def hash(self, obj, return_digest=True): + try: + self.dump(obj) + except pickle.PicklingError as e: + e.args += ('PicklingError while hashing %r: %r' % (obj, e),) + raise + dumps = self.stream.getvalue() + self._hash.update(dumps) + if return_digest: + return self._hash.hexdigest() + + def save(self, obj): + if isinstance(obj, (types.MethodType, type({}.pop))): + # the Pickler cannot pickle instance methods; here we decompose + # them into components that make them uniquely identifiable + if hasattr(obj, '__func__'): + func_name = obj.__func__.__name__ + else: + func_name = obj.__name__ + inst = obj.__self__ + if type(inst) == type(pickle): + obj = _MyHash(func_name, inst.__name__) + elif inst is None: + # type(None) or type(module) do not pickle + obj = _MyHash(func_name, inst) + else: + cls = obj.__self__.__class__ + obj = _MyHash(func_name, inst, cls) + Pickler.save(self, obj) + + def memoize(self, obj): + # We want hashing to be sensitive to value instead of reference. + # For example we want ['aa', 'aa'] and ['aa', 'aaZ'[:2]] + # to hash to the same value and that's why we disable memoization + # for strings + if isinstance(obj, _bytes_or_unicode): + return + Pickler.memoize(self, obj) + + # The dispatch table of the pickler is not accessible in Python + # 3, as these lines are only bugware for IPython, we skip them. + def save_global(self, obj, name=None, pack=struct.pack): + # We have to override this method in order to deal with objects + # defined interactively in IPython that are not injected in + # __main__ + kwargs = dict(name=name, pack=pack) + if sys.version_info >= (3, 4): + del kwargs['pack'] + try: + Pickler.save_global(self, obj, **kwargs) + except pickle.PicklingError: + Pickler.save_global(self, obj, **kwargs) + module = getattr(obj, "__module__", None) + if module == '__main__': + my_name = name + if my_name is None: + my_name = obj.__name__ + mod = sys.modules[module] + if not hasattr(mod, my_name): + # IPython doesn't inject the variables define + # interactively in __main__ + setattr(mod, my_name, obj) + + dispatch = Pickler.dispatch.copy() + # builtin + dispatch[type(len)] = save_global + # type + dispatch[type(object)] = save_global + # classobj + dispatch[type(Pickler)] = save_global + # function + dispatch[type(pickle.dump)] = save_global + + def _batch_setitems(self, items): + # forces order of keys in dict to ensure consistent hash. + try: + # Trying first to compare dict assuming the type of keys is + # consistent and orderable. + # This fails on python 3 when keys are unorderable + # but we keep it in a try as it's faster. + Pickler._batch_setitems(self, iter(sorted(items))) + except TypeError: + # If keys are unorderable, sorting them using their hash. This is + # slower but works in any case. + Pickler._batch_setitems(self, iter(sorted((hash(k), v) + for k, v in items))) + + def save_set(self, set_items): + # forces order of items in Set to ensure consistent hash + Pickler.save(self, _ConsistentSet(set_items)) + + dispatch[type(set())] = save_set + + +class NumpyHasher(Hasher): + """ Special case the hasher for when numpy is loaded. + """ + + def __init__(self, hash_name='md5', coerce_mmap=False): + """ + Parameters + ---------- + hash_name: string + The hash algorithm to be used + coerce_mmap: boolean + Make no difference between np.memmap and np.ndarray + objects. + """ + self.coerce_mmap = coerce_mmap + Hasher.__init__(self, hash_name=hash_name) + # delayed import of numpy, to avoid tight coupling + import numpy as np + self.np = np + if hasattr(np, 'getbuffer'): + self._getbuffer = np.getbuffer + else: + self._getbuffer = memoryview + + def save(self, obj): + """ Subclass the save method, to hash ndarray subclass, rather + than pickling them. Off course, this is a total abuse of + the Pickler class. + """ + if isinstance(obj, self.np.ndarray) and not obj.dtype.hasobject: + # Compute a hash of the object + # The update function of the hash requires a c_contiguous buffer. + if obj.shape == (): + # 0d arrays need to be flattened because viewing them as bytes + # raises a ValueError exception. + obj_c_contiguous = obj.flatten() + elif obj.flags.c_contiguous: + obj_c_contiguous = obj + elif obj.flags.f_contiguous: + obj_c_contiguous = obj.T + else: + # Cater for non-single-segment arrays: this creates a + # copy, and thus aleviates this issue. + # XXX: There might be a more efficient way of doing this + obj_c_contiguous = obj.flatten() + + # memoryview is not supported for some dtypes, e.g. datetime64, see + # https://github.com/numpy/numpy/issues/4983. The + # workaround is to view the array as bytes before + # taking the memoryview. + self._hash.update( + self._getbuffer(obj_c_contiguous.view(self.np.uint8))) + + # We store the class, to be able to distinguish between + # Objects with the same binary content, but different + # classes. + if self.coerce_mmap and isinstance(obj, self.np.memmap): + # We don't make the difference between memmap and + # normal ndarrays, to be able to reload previously + # computed results with memmap. + klass = self.np.ndarray + else: + klass = obj.__class__ + # We also return the dtype and the shape, to distinguish + # different views on the same data with different dtypes. + + # The object will be pickled by the pickler hashed at the end. + obj = (klass, ('HASHED', obj.dtype, obj.shape, obj.strides)) + elif isinstance(obj, self.np.dtype): + # Atomic dtype objects are interned by their default constructor: + # np.dtype('f8') is np.dtype('f8') + # This interning is not maintained by a + # pickle.loads + pickle.dumps cycle, because __reduce__ + # uses copy=True in the dtype constructor. This + # non-deterministic behavior causes the internal memoizer + # of the hasher to generate different hash values + # depending on the history of the dtype object. + # To prevent the hash from being sensitive to this, we use + # .descr which is a full (and never interned) description of + # the array dtype according to the numpy doc. + klass = obj.__class__ + obj = (klass, ('HASHED', obj.descr)) + Hasher.save(self, obj) + + +def hash(obj, hash_name='md5', coerce_mmap=False): + """ Quick calculation of a hash to identify uniquely Python objects + containing numpy arrays. + + + Parameters + ----------- + hash_name: 'md5' or 'sha1' + Hashing algorithm used. sha1 is supposedly safer, but md5 is + faster. + coerce_mmap: boolean + Make no difference between np.memmap and np.ndarray + """ + valid_hash_names = ('md5', 'sha1') + if hash_name not in valid_hash_names: + raise ValueError("Valid options for 'hash_name' are {}. " + "Got hash_name={!r} instead." + .format(valid_hash_names, hash_name)) + if 'numpy' in sys.modules: + hasher = NumpyHasher(hash_name=hash_name, coerce_mmap=coerce_mmap) + else: + hasher = Hasher(hash_name=hash_name) + return hasher.hash(obj) diff --git a/my_env/Lib/site-packages/joblib/logger.py b/my_env/Lib/site-packages/joblib/logger.py new file mode 100644 index 000000000..f30efef85 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/logger.py @@ -0,0 +1,156 @@ +""" +Helpers for logging. + +This module needs much love to become useful. +""" + +# Author: Gael Varoquaux +# Copyright (c) 2008 Gael Varoquaux +# License: BSD Style, 3 clauses. + +from __future__ import print_function + +import time +import sys +import os +import shutil +import logging +import pprint + +from .disk import mkdirp + + +def _squeeze_time(t): + """Remove .1s to the time under Windows: this is the time it take to + stat files. This is needed to make results similar to timings under + Unix, for tests + """ + if sys.platform.startswith('win'): + return max(0, t - .1) + else: + return t + + +def format_time(t): + t = _squeeze_time(t) + return "%.1fs, %.1fmin" % (t, t / 60.) + + +def short_format_time(t): + t = _squeeze_time(t) + if t > 60: + return "%4.1fmin" % (t / 60.) + else: + return " %5.1fs" % (t) + + +def pformat(obj, indent=0, depth=3): + if 'numpy' in sys.modules: + import numpy as np + print_options = np.get_printoptions() + np.set_printoptions(precision=6, threshold=64, edgeitems=1) + else: + print_options = None + out = pprint.pformat(obj, depth=depth, indent=indent) + if print_options: + np.set_printoptions(**print_options) + return out + + +############################################################################### +# class `Logger` +############################################################################### +class Logger(object): + """ Base class for logging messages. + """ + + def __init__(self, depth=3): + """ + Parameters + ---------- + depth: int, optional + The depth of objects printed. + """ + self.depth = depth + + def warn(self, msg): + logging.warning("[%s]: %s" % (self, msg)) + + def debug(self, msg): + # XXX: This conflicts with the debug flag used in children class + logging.debug("[%s]: %s" % (self, msg)) + + def format(self, obj, indent=0): + """Return the formatted representation of the object.""" + return pformat(obj, indent=indent, depth=self.depth) + + +############################################################################### +# class `PrintTime` +############################################################################### +class PrintTime(object): + """ Print and log messages while keeping track of time. + """ + + def __init__(self, logfile=None, logdir=None): + if logfile is not None and logdir is not None: + raise ValueError('Cannot specify both logfile and logdir') + # XXX: Need argument docstring + self.last_time = time.time() + self.start_time = self.last_time + if logdir is not None: + logfile = os.path.join(logdir, 'joblib.log') + self.logfile = logfile + if logfile is not None: + mkdirp(os.path.dirname(logfile)) + if os.path.exists(logfile): + # Rotate the logs + for i in range(1, 9): + try: + shutil.move(logfile + '.%i' % i, + logfile + '.%i' % (i + 1)) + except: + "No reason failing here" + # Use a copy rather than a move, so that a process + # monitoring this file does not get lost. + try: + shutil.copy(logfile, logfile + '.1') + except: + "No reason failing here" + try: + with open(logfile, 'w') as logfile: + logfile.write('\nLogging joblib python script\n') + logfile.write('\n---%s---\n' % time.ctime(self.last_time)) + except: + """ Multiprocessing writing to files can create race + conditions. Rather fail silently than crash the + computation. + """ + # XXX: We actually need a debug flag to disable this + # silent failure. + + def __call__(self, msg='', total=False): + """ Print the time elapsed between the last call and the current + call, with an optional message. + """ + if not total: + time_lapse = time.time() - self.last_time + full_msg = "%s: %s" % (msg, format_time(time_lapse)) + else: + # FIXME: Too much logic duplicated + time_lapse = time.time() - self.start_time + full_msg = "%s: %.2fs, %.1f min" % (msg, time_lapse, + time_lapse / 60) + print(full_msg, file=sys.stderr) + if self.logfile is not None: + try: + with open(self.logfile, 'a') as f: + print(full_msg, file=f) + except: + """ Multiprocessing writing to files can create race + conditions. Rather fail silently than crash the + calculation. + """ + # XXX: We actually need a debug flag to disable this + # silent failure. + self.last_time = time.time() diff --git a/my_env/Lib/site-packages/joblib/memory.py b/my_env/Lib/site-packages/joblib/memory.py new file mode 100644 index 000000000..a1c4ff64e --- /dev/null +++ b/my_env/Lib/site-packages/joblib/memory.py @@ -0,0 +1,1010 @@ +""" +A context object for caching a function's return value each time it +is called with the same input arguments. + +""" + +# Author: Gael Varoquaux +# Copyright (c) 2009 Gael Varoquaux +# License: BSD Style, 3 clauses. + + +from __future__ import with_statement +import os +import time +import pydoc +import re +import functools +import traceback +import warnings +import inspect +import sys +import weakref + +# Local imports +from . import hashing +from .func_inspect import get_func_code, get_func_name, filter_args +from .func_inspect import format_call +from .func_inspect import format_signature +from ._memory_helpers import open_py_source +from .logger import Logger, format_time, pformat +from ._compat import _basestring, PY3_OR_LATER +from ._store_backends import StoreBackendBase, FileSystemStoreBackend + +if sys.version_info[:2] >= (3, 4): + import pathlib + + +FIRST_LINE_TEXT = "# first line:" + +# TODO: The following object should have a data store object as a sub +# object, and the interface to persist and query should be separated in +# the data store. +# +# This would enable creating 'Memory' objects with a different logic for +# pickling that would simply span a MemorizedFunc with the same +# store (or do we want to copy it to avoid cross-talks?), for instance to +# implement HDF5 pickling. + +# TODO: Same remark for the logger, and probably use the Python logging +# mechanism. + + +def extract_first_line(func_code): + """ Extract the first line information from the function code + text if available. + """ + if func_code.startswith(FIRST_LINE_TEXT): + func_code = func_code.split('\n') + first_line = int(func_code[0][len(FIRST_LINE_TEXT):]) + func_code = '\n'.join(func_code[1:]) + else: + first_line = -1 + return func_code, first_line + + +class JobLibCollisionWarning(UserWarning): + """ Warn that there might be a collision between names of functions. + """ + + +_STORE_BACKENDS = {'local': FileSystemStoreBackend} + + +def register_store_backend(backend_name, backend): + """Extend available store backends. + + The Memory, MemorizeResult and MemorizeFunc objects are designed to be + agnostic to the type of store used behind. By default, the local file + system is used but this function gives the possibility to extend joblib's + memory pattern with other types of storage such as cloud storage (S3, GCS, + OpenStack, HadoopFS, etc) or blob DBs. + + Parameters + ---------- + backend_name: str + The name identifying the store backend being registered. For example, + 'local' is used with FileSystemStoreBackend. + backend: StoreBackendBase subclass + The name of a class that implements the StoreBackendBase interface. + + """ + if not isinstance(backend_name, _basestring): + raise ValueError("Store backend name should be a string, " + "'{0}' given.".format(backend_name)) + if backend is None or not issubclass(backend, StoreBackendBase): + raise ValueError("Store backend should inherit " + "StoreBackendBase, " + "'{0}' given.".format(backend)) + + _STORE_BACKENDS[backend_name] = backend + + +def _store_backend_factory(backend, location, verbose=0, backend_options=None): + """Return the correct store object for the given location.""" + if backend_options is None: + backend_options = {} + + if (sys.version_info[:2] >= (3, 4) and isinstance(location, pathlib.Path)): + location = str(location) + + if isinstance(location, StoreBackendBase): + return location + elif isinstance(location, _basestring): + obj = None + location = os.path.expanduser(location) + # The location is not a local file system, we look in the + # registered backends if there's one matching the given backend + # name. + for backend_key, backend_obj in _STORE_BACKENDS.items(): + if backend == backend_key: + obj = backend_obj() + + # By default, we assume the FileSystemStoreBackend can be used if no + # matching backend could be found. + if obj is None: + raise TypeError('Unknown location {0} or backend {1}'.format( + location, backend)) + + # The store backend is configured with the extra named parameters, + # some of them are specific to the underlying store backend. + obj.configure(location, verbose=verbose, + backend_options=backend_options) + return obj + elif location is not None: + warnings.warn( + "Instanciating a backend using a {} as a location is not " + "supported by joblib. Returning None instead.".format( + location.__class__.__name__), UserWarning) + + + return None + + +def _get_func_fullname(func): + """Compute the part of part associated with a function.""" + modules, funcname = get_func_name(func) + modules.append(funcname) + return os.path.join(*modules) + + +def _build_func_identifier(func): + """Build a roughly unique identifier for the cached function.""" + parts = [] + if isinstance(func, _basestring): + parts.append(func) + else: + parts.append(_get_func_fullname(func)) + + # We reuse historical fs-like way of building a function identifier + return os.path.join(*parts) + + +def _format_load_msg(func_id, args_id, timestamp=None, metadata=None): + """ Helper function to format the message when loading the results. + """ + signature = "" + try: + if metadata is not None: + args = ", ".join(['%s=%s' % (name, value) + for name, value + in metadata['input_args'].items()]) + signature = "%s(%s)" % (os.path.basename(func_id), args) + else: + signature = os.path.basename(func_id) + except KeyError: + pass + + if timestamp is not None: + ts_string = "{0: <16}".format(format_time(time.time() - timestamp)) + else: + ts_string = "" + return '[Memory]{0}: Loading {1}'.format(ts_string, str(signature)) + + +# An in-memory store to avoid looking at the disk-based function +# source code to check if a function definition has changed +_FUNCTION_HASHES = weakref.WeakKeyDictionary() + + +############################################################################### +# class `MemorizedResult` +############################################################################### +class MemorizedResult(Logger): + """Object representing a cached value. + + Attributes + ---------- + location: str + The location of joblib cache. Depends on the store backend used. + + func: function or str + function whose output is cached. The string case is intended only for + instanciation based on the output of repr() on another instance. + (namely eval(repr(memorized_instance)) works). + + argument_hash: str + hash of the function arguments. + + backend: str + Type of store backend for reading/writing cache files. + Default is 'local'. + + mmap_mode: {None, 'r+', 'r', 'w+', 'c'} + The memmapping mode used when loading from cache numpy arrays. See + numpy.load for the meaning of the different values. + + verbose: int + verbosity level (0 means no message). + + timestamp, metadata: string + for internal use only. + """ + def __init__(self, location, func, args_id, backend='local', + mmap_mode=None, verbose=0, timestamp=None, metadata=None): + Logger.__init__(self) + self.func_id = _build_func_identifier(func) + if isinstance(func, _basestring): + self.func = func + else: + self.func = self.func_id + self.args_id = args_id + self.store_backend = _store_backend_factory(backend, location, + verbose=verbose) + self.mmap_mode = mmap_mode + + if metadata is not None: + self.metadata = metadata + else: + self.metadata = self.store_backend.get_metadata( + [self.func_id, self.args_id]) + + self.duration = self.metadata.get('duration', None) + self.verbose = verbose + self.timestamp = timestamp + + @property + def argument_hash(self): + warnings.warn( + "The 'argument_hash' attribute has been deprecated in version " + "0.12 and will be removed in version 0.14.\n" + "Use `args_id` attribute instead.", + DeprecationWarning, stacklevel=2) + return self.args_id + + def get(self): + """Read value from cache and return it.""" + if self.verbose: + msg = _format_load_msg(self.func_id, self.args_id, + timestamp=self.timestamp, + metadata=self.metadata) + else: + msg = None + + try: + return self.store_backend.load_item( + [self.func_id, self.args_id], msg=msg, verbose=self.verbose) + except (ValueError, KeyError) as exc: + # KeyError is expected under Python 2.7, ValueError under Python 3 + new_exc = KeyError( + "Error while trying to load a MemorizedResult's value. " + "It seems that this folder is corrupted : {}".format( + os.path.join( + self.store_backend.location, self.func_id, + self.args_id) + )) + new_exc.__cause__ = exc + raise new_exc + + def clear(self): + """Clear value from cache""" + self.store_backend.clear_item([self.func_id, self.args_id]) + + def __repr__(self): + return ('{class_name}(location="{location}", func="{func}", ' + 'args_id="{args_id}")' + .format(class_name=self.__class__.__name__, + location=self.store_backend.location, + func=self.func, + args_id=self.args_id + )) + + def __getstate__(self): + state = self.__dict__.copy() + state['timestamp'] = None + return state + + +class NotMemorizedResult(object): + """Class representing an arbitrary value. + + This class is a replacement for MemorizedResult when there is no cache. + """ + __slots__ = ('value', 'valid') + + def __init__(self, value): + self.value = value + self.valid = True + + def get(self): + if self.valid: + return self.value + else: + raise KeyError("No value stored.") + + def clear(self): + self.valid = False + self.value = None + + def __repr__(self): + if self.valid: + return ('{class_name}({value})' + .format(class_name=self.__class__.__name__, + value=pformat(self.value))) + else: + return self.__class__.__name__ + ' with no value' + + # __getstate__ and __setstate__ are required because of __slots__ + def __getstate__(self): + return {"valid": self.valid, "value": self.value} + + def __setstate__(self, state): + self.valid = state["valid"] + self.value = state["value"] + + +############################################################################### +# class `NotMemorizedFunc` +############################################################################### +class NotMemorizedFunc(object): + """No-op object decorating a function. + + This class replaces MemorizedFunc when there is no cache. It provides an + identical API but does not write anything on disk. + + Attributes + ---------- + func: callable + Original undecorated function. + """ + # Should be a light as possible (for speed) + def __init__(self, func): + self.func = func + + def __call__(self, *args, **kwargs): + return self.func(*args, **kwargs) + + def call_and_shelve(self, *args, **kwargs): + return NotMemorizedResult(self.func(*args, **kwargs)) + + def __repr__(self): + return '{0}(func={1})'.format(self.__class__.__name__, self.func) + + def clear(self, warn=True): + # Argument "warn" is for compatibility with MemorizedFunc.clear + pass + + +############################################################################### +# class `MemorizedFunc` +############################################################################### +class MemorizedFunc(Logger): + """Callable object decorating a function for caching its return value + each time it is called. + + Methods are provided to inspect the cache or clean it. + + Attributes + ---------- + func: callable + The original, undecorated, function. + + location: string + The location of joblib cache. Depends on the store backend used. + + backend: str + Type of store backend for reading/writing cache files. + Default is 'local', in which case the location is the path to a + disk storage. + + ignore: list or None + List of variable names to ignore when choosing whether to + recompute. + + mmap_mode: {None, 'r+', 'r', 'w+', 'c'} + The memmapping mode used when loading from cache + numpy arrays. See numpy.load for the meaning of the different + values. + + compress: boolean, or integer + Whether to zip the stored data on disk. If an integer is + given, it should be between 1 and 9, and sets the amount + of compression. Note that compressed arrays cannot be + read by memmapping. + + verbose: int, optional + The verbosity flag, controls messages that are issued as + the function is evaluated. + """ + # ------------------------------------------------------------------------ + # Public interface + # ------------------------------------------------------------------------ + + def __init__(self, func, location, backend='local', ignore=None, + mmap_mode=None, compress=False, verbose=1, timestamp=None): + Logger.__init__(self) + self.mmap_mode = mmap_mode + self.compress = compress + self.func = func + + if ignore is None: + ignore = [] + self.ignore = ignore + self._verbose = verbose + + # retrieve store object from backend type and location. + self.store_backend = _store_backend_factory(backend, location, + verbose=verbose, + backend_options=dict( + compress=compress, + mmap_mode=mmap_mode), + ) + if self.store_backend is not None: + # Create func directory on demand. + self.store_backend.\ + store_cached_func_code([_build_func_identifier(self.func)]) + + if timestamp is None: + timestamp = time.time() + self.timestamp = timestamp + try: + functools.update_wrapper(self, func) + except: + " Objects like ufunc don't like that " + if inspect.isfunction(func): + doc = pydoc.TextDoc().document(func) + # Remove blank line + doc = doc.replace('\n', '\n\n', 1) + # Strip backspace-overprints for compatibility with autodoc + doc = re.sub('\x08.', '', doc) + else: + # Pydoc does a poor job on other objects + doc = func.__doc__ + self.__doc__ = 'Memoized version of %s' % doc + + def _cached_call(self, args, kwargs, shelving=False): + """Call wrapped function and cache result, or read cache if available. + + This function returns the wrapped function output and some metadata. + + Arguments: + ---------- + + args, kwargs: list and dict + input arguments for wrapped function + + shelving: bool + True when called via the call_and_shelve function. + + + Returns + ------- + output: value or tuple or None + Output of the wrapped function. + If shelving is True and the call has been already cached, + output is None. + + argument_hash: string + Hash of function arguments. + + metadata: dict + Some metadata about wrapped function call (see _persist_input()). + """ + func_id, args_id = self._get_output_identifiers(*args, **kwargs) + metadata = None + msg = None + + # Wether or not the memorized function must be called + must_call = False + + # FIXME: The statements below should be try/excepted + # Compare the function code with the previous to see if the + # function code has changed + if not (self._check_previous_func_code(stacklevel=4) and + self.store_backend.contains_item([func_id, args_id])): + if self._verbose > 10: + _, name = get_func_name(self.func) + self.warn('Computing func {0}, argument hash {1} ' + 'in location {2}' + .format(name, args_id, + self.store_backend. + get_cached_func_info([func_id])['location'])) + must_call = True + else: + try: + t0 = time.time() + if self._verbose: + msg = _format_load_msg(func_id, args_id, + timestamp=self.timestamp, + metadata=metadata) + + if not shelving: + # When shelving, we do not need to load the output + out = self.store_backend.load_item( + [func_id, args_id], + msg=msg, + verbose=self._verbose) + else: + out = None + + if self._verbose > 4: + t = time.time() - t0 + _, name = get_func_name(self.func) + msg = '%s cache loaded - %s' % (name, format_time(t)) + print(max(0, (80 - len(msg))) * '_' + msg) + except Exception: + # XXX: Should use an exception logger + _, signature = format_signature(self.func, *args, **kwargs) + self.warn('Exception while loading results for ' + '{}\n {}'.format(signature, traceback.format_exc())) + + must_call = True + + if must_call: + out, metadata = self.call(*args, **kwargs) + if self.mmap_mode is not None: + # Memmap the output at the first call to be consistent with + # later calls + if self._verbose: + msg = _format_load_msg(func_id, args_id, + timestamp=self.timestamp, + metadata=metadata) + out = self.store_backend.load_item([func_id, args_id], msg=msg, + verbose=self._verbose) + + return (out, args_id, metadata) + + def call_and_shelve(self, *args, **kwargs): + """Call wrapped function, cache result and return a reference. + + This method returns a reference to the cached result instead of the + result itself. The reference object is small and pickeable, allowing + to send or store it easily. Call .get() on reference object to get + result. + + Returns + ------- + cached_result: MemorizedResult or NotMemorizedResult + reference to the value returned by the wrapped function. The + class "NotMemorizedResult" is used when there is no cache + activated (e.g. location=None in Memory). + """ + _, args_id, metadata = self._cached_call(args, kwargs, shelving=True) + return MemorizedResult(self.store_backend, self.func, args_id, + metadata=metadata, verbose=self._verbose - 1, + timestamp=self.timestamp) + + def __call__(self, *args, **kwargs): + return self._cached_call(args, kwargs)[0] + + def __getstate__(self): + """ We don't store the timestamp when pickling, to avoid the hash + depending from it. + """ + state = self.__dict__.copy() + state['timestamp'] = None + return state + + # ------------------------------------------------------------------------ + # Private interface + # ------------------------------------------------------------------------ + + def _get_argument_hash(self, *args, **kwargs): + return hashing.hash(filter_args(self.func, self.ignore, args, kwargs), + coerce_mmap=(self.mmap_mode is not None)) + + def _get_output_identifiers(self, *args, **kwargs): + """Return the func identifier and input parameter hash of a result.""" + func_id = _build_func_identifier(self.func) + argument_hash = self._get_argument_hash(*args, **kwargs) + return func_id, argument_hash + + def _hash_func(self): + """Hash a function to key the online cache""" + func_code_h = hash(getattr(self.func, '__code__', None)) + return id(self.func), hash(self.func), func_code_h + + def _write_func_code(self, func_code, first_line): + """ Write the function code and the filename to a file. + """ + # We store the first line because the filename and the function + # name is not always enough to identify a function: people + # sometimes have several functions named the same way in a + # file. This is bad practice, but joblib should be robust to bad + # practice. + func_id = _build_func_identifier(self.func) + func_code = u'%s %i\n%s' % (FIRST_LINE_TEXT, first_line, func_code) + self.store_backend.store_cached_func_code([func_id], func_code) + + # Also store in the in-memory store of function hashes + is_named_callable = False + if PY3_OR_LATER: + is_named_callable = (hasattr(self.func, '__name__') and + self.func.__name__ != '') + else: + is_named_callable = (hasattr(self.func, 'func_name') and + self.func.func_name != '') + if is_named_callable: + # Don't do this for lambda functions or strange callable + # objects, as it ends up being too fragile + func_hash = self._hash_func() + try: + _FUNCTION_HASHES[self.func] = func_hash + except TypeError: + # Some callable are not hashable + pass + + def _check_previous_func_code(self, stacklevel=2): + """ + stacklevel is the depth a which this function is called, to + issue useful warnings to the user. + """ + # First check if our function is in the in-memory store. + # Using the in-memory store not only makes things faster, but it + # also renders us robust to variations of the files when the + # in-memory version of the code does not vary + try: + if self.func in _FUNCTION_HASHES: + # We use as an identifier the id of the function and its + # hash. This is more likely to falsely change than have hash + # collisions, thus we are on the safe side. + func_hash = self._hash_func() + if func_hash == _FUNCTION_HASHES[self.func]: + return True + except TypeError: + # Some callables are not hashable + pass + + # Here, we go through some effort to be robust to dynamically + # changing code and collision. We cannot inspect.getsource + # because it is not reliable when using IPython's magic "%run". + func_code, source_file, first_line = get_func_code(self.func) + func_id = _build_func_identifier(self.func) + + try: + old_func_code, old_first_line =\ + extract_first_line( + self.store_backend.get_cached_func_code([func_id])) + except (IOError, OSError): # some backend can also raise OSError + self._write_func_code(func_code, first_line) + return False + if old_func_code == func_code: + return True + + # We have differing code, is this because we are referring to + # different functions, or because the function we are referring to has + # changed? + + _, func_name = get_func_name(self.func, resolv_alias=False, + win_characters=False) + if old_first_line == first_line == -1 or func_name == '': + if not first_line == -1: + func_description = ("{0} ({1}:{2})" + .format(func_name, source_file, + first_line)) + else: + func_description = func_name + warnings.warn(JobLibCollisionWarning( + "Cannot detect name collisions for function '{0}'" + .format(func_description)), stacklevel=stacklevel) + + # Fetch the code at the old location and compare it. If it is the + # same than the code store, we have a collision: the code in the + # file has not changed, but the name we have is pointing to a new + # code block. + if not old_first_line == first_line and source_file is not None: + possible_collision = False + if os.path.exists(source_file): + _, func_name = get_func_name(self.func, resolv_alias=False) + num_lines = len(func_code.split('\n')) + with open_py_source(source_file) as f: + on_disk_func_code = f.readlines()[ + old_first_line - 1:old_first_line - 1 + num_lines - 1] + on_disk_func_code = ''.join(on_disk_func_code) + possible_collision = (on_disk_func_code.rstrip() == + old_func_code.rstrip()) + else: + possible_collision = source_file.startswith(' 10: + _, func_name = get_func_name(self.func, resolv_alias=False) + self.warn("Function {0} (identified by {1}) has changed" + ".".format(func_name, func_id)) + self.clear(warn=True) + return False + + def clear(self, warn=True): + """Empty the function's cache.""" + func_id = _build_func_identifier(self.func) + + if self._verbose > 0 and warn: + self.warn("Clearing function cache identified by %s" % func_id) + self.store_backend.clear_path([func_id, ]) + + func_code, _, first_line = get_func_code(self.func) + self._write_func_code(func_code, first_line) + + def call(self, *args, **kwargs): + """ Force the execution of the function with the given arguments and + persist the output values. + """ + start_time = time.time() + func_id, args_id = self._get_output_identifiers(*args, **kwargs) + if self._verbose > 0: + print(format_call(self.func, args, kwargs)) + output = self.func(*args, **kwargs) + self.store_backend.dump_item( + [func_id, args_id], output, verbose=self._verbose) + + duration = time.time() - start_time + metadata = self._persist_input(duration, args, kwargs) + + if self._verbose > 0: + _, name = get_func_name(self.func) + msg = '%s - %s' % (name, format_time(duration)) + print(max(0, (80 - len(msg))) * '_' + msg) + return output, metadata + + def _persist_input(self, duration, args, kwargs, this_duration_limit=0.5): + """ Save a small summary of the call using json format in the + output directory. + + output_dir: string + directory where to write metadata. + + duration: float + time taken by hashing input arguments, calling the wrapped + function and persisting its output. + + args, kwargs: list and dict + input arguments for wrapped function + + this_duration_limit: float + Max execution time for this function before issuing a warning. + """ + start_time = time.time() + argument_dict = filter_args(self.func, self.ignore, + args, kwargs) + + input_repr = dict((k, repr(v)) for k, v in argument_dict.items()) + # This can fail due to race-conditions with multiple + # concurrent joblibs removing the file or the directory + metadata = {"duration": duration, "input_args": input_repr} + + func_id, args_id = self._get_output_identifiers(*args, **kwargs) + self.store_backend.store_metadata([func_id, args_id], metadata) + + this_duration = time.time() - start_time + if this_duration > this_duration_limit: + # This persistence should be fast. It will not be if repr() takes + # time and its output is large, because json.dump will have to + # write a large file. This should not be an issue with numpy arrays + # for which repr() always output a short representation, but can + # be with complex dictionaries. Fixing the problem should be a + # matter of replacing repr() above by something smarter. + warnings.warn("Persisting input arguments took %.2fs to run.\n" + "If this happens often in your code, it can cause " + "performance problems \n" + "(results will be correct in all cases). \n" + "The reason for this is probably some large input " + "arguments for a wrapped\n" + " function (e.g. large strings).\n" + "THIS IS A JOBLIB ISSUE. If you can, kindly provide " + "the joblib's team with an\n" + " example so that they can fix the problem." + % this_duration, stacklevel=5) + return metadata + + # XXX: Need a method to check if results are available. + + # ------------------------------------------------------------------------ + # Private `object` interface + # ------------------------------------------------------------------------ + + def __repr__(self): + return '{class_name}(func={func}, location={location})'.format( + class_name=self.__class__.__name__, + func=self.func, + location=self.store_backend.location,) + + +############################################################################### +# class `Memory` +############################################################################### +class Memory(Logger): + """ A context object for caching a function's return value each time it + is called with the same input arguments. + + All values are cached on the filesystem, in a deep directory + structure. + + Read more in the :ref:`User Guide `. + + Parameters + ---------- + location: str or None + The path of the base directory to use as a data store + or None. If None is given, no caching is done and + the Memory object is completely transparent. This option + replaces cachedir since version 0.12. + + backend: str, optional + Type of store backend for reading/writing cache files. + Default: 'local'. + The 'local' backend is using regular filesystem operations to + manipulate data (open, mv, etc) in the backend. + + cachedir: str or None, optional + + .. deprecated: 0.12 + 'cachedir' has been deprecated in 0.12 and will be + removed in 0.14. Use the 'location' parameter instead. + + mmap_mode: {None, 'r+', 'r', 'w+', 'c'}, optional + The memmapping mode used when loading from cache + numpy arrays. See numpy.load for the meaning of the + arguments. + + compress: boolean, or integer, optional + Whether to zip the stored data on disk. If an integer is + given, it should be between 1 and 9, and sets the amount + of compression. Note that compressed arrays cannot be + read by memmapping. + + verbose: int, optional + Verbosity flag, controls the debug messages that are issued + as functions are evaluated. + + bytes_limit: int, optional + Limit in bytes of the size of the cache. + + backend_options: dict, optional + Contains a dictionnary of named parameters used to configure + the store backend. + """ + # ------------------------------------------------------------------------ + # Public interface + # ------------------------------------------------------------------------ + + def __init__(self, location=None, backend='local', cachedir=None, + mmap_mode=None, compress=False, verbose=1, bytes_limit=None, + backend_options=None): + # XXX: Bad explanation of the None value of cachedir + Logger.__init__(self) + self._verbose = verbose + self.mmap_mode = mmap_mode + self.timestamp = time.time() + self.bytes_limit = bytes_limit + self.backend = backend + self.compress = compress + if backend_options is None: + backend_options = {} + self.backend_options = backend_options + + if compress and mmap_mode is not None: + warnings.warn('Compressed results cannot be memmapped', + stacklevel=2) + if cachedir is not None: + if location is not None: + raise ValueError( + 'You set both "location={0!r} and "cachedir={1!r}". ' + "'cachedir' has been deprecated in version " + "0.12 and will be removed in version 0.14.\n" + 'Please only set "location={0!r}"'.format( + location, cachedir)) + + warnings.warn( + "The 'cachedir' parameter has been deprecated in version " + "0.12 and will be removed in version 0.14.\n" + 'You provided "cachedir={0!r}", ' + 'use "location={0!r}" instead.'.format(cachedir), + DeprecationWarning, stacklevel=2) + location = cachedir + + self.location = location + if isinstance(location, _basestring): + location = os.path.join(location, 'joblib') + + self.store_backend = _store_backend_factory( + backend, location, verbose=self._verbose, + backend_options=dict(compress=compress, mmap_mode=mmap_mode, + **backend_options)) + + @property + def cachedir(self): + warnings.warn( + "The 'cachedir' attribute has been deprecated in version 0.12 " + "and will be removed in version 0.14.\n" + "Use os.path.join(memory.location, 'joblib') attribute instead.", + DeprecationWarning, stacklevel=2) + if self.location is None: + return None + return os.path.join(self.location, 'joblib') + + def cache(self, func=None, ignore=None, verbose=None, mmap_mode=False): + """ Decorates the given function func to only compute its return + value for input arguments not cached on disk. + + Parameters + ---------- + func: callable, optional + The function to be decorated + ignore: list of strings + A list of arguments name to ignore in the hashing + verbose: integer, optional + The verbosity mode of the function. By default that + of the memory object is used. + mmap_mode: {None, 'r+', 'r', 'w+', 'c'}, optional + The memmapping mode used when loading from cache + numpy arrays. See numpy.load for the meaning of the + arguments. By default that of the memory object is used. + + Returns + ------- + decorated_func: MemorizedFunc object + The returned object is a MemorizedFunc object, that is + callable (behaves like a function), but offers extra + methods for cache lookup and management. See the + documentation for :class:`joblib.memory.MemorizedFunc`. + """ + if func is None: + # Partial application, to be able to specify extra keyword + # arguments in decorators + return functools.partial(self.cache, ignore=ignore, + verbose=verbose, mmap_mode=mmap_mode) + if self.store_backend is None: + return NotMemorizedFunc(func) + if verbose is None: + verbose = self._verbose + if mmap_mode is False: + mmap_mode = self.mmap_mode + if isinstance(func, MemorizedFunc): + func = func.func + return MemorizedFunc(func, location=self.store_backend, + backend=self.backend, + ignore=ignore, mmap_mode=mmap_mode, + compress=self.compress, + verbose=verbose, timestamp=self.timestamp) + + def clear(self, warn=True): + """ Erase the complete cache directory. + """ + if warn: + self.warn('Flushing completely the cache') + if self.store_backend is not None: + self.store_backend.clear() + + def reduce_size(self): + """Remove cache elements to make cache size fit in ``bytes_limit``.""" + if self.bytes_limit is not None and self.store_backend is not None: + self.store_backend.reduce_store_size(self.bytes_limit) + + def eval(self, func, *args, **kwargs): + """ Eval function func with arguments `*args` and `**kwargs`, + in the context of the memory. + + This method works similarly to the builtin `apply`, except + that the function is called only if the cache is not + up to date. + + """ + if self.store_backend is None: + return func(*args, **kwargs) + return self.cache(func)(*args, **kwargs) + + # ------------------------------------------------------------------------ + # Private `object` interface + # ------------------------------------------------------------------------ + + def __repr__(self): + return '{class_name}(location={location})'.format( + class_name=self.__class__.__name__, + location=(None if self.store_backend is None + else self.store_backend.location)) + + def __getstate__(self): + """ We don't store the timestamp when pickling, to avoid the hash + depending from it. + """ + state = self.__dict__.copy() + state['timestamp'] = None + return state diff --git a/my_env/Lib/site-packages/joblib/my_exceptions.py b/my_env/Lib/site-packages/joblib/my_exceptions.py new file mode 100644 index 000000000..765885e33 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/my_exceptions.py @@ -0,0 +1,125 @@ +""" +Exceptions +""" +# Author: Gael Varoquaux < gael dot varoquaux at normalesup dot org > +# Copyright: 2010, Gael Varoquaux +# License: BSD 3 clause +from ._compat import PY3_OR_LATER + + +class JoblibException(Exception): + """A simple exception with an error message that you can get to.""" + def __init__(self, *args): + # We need to implement __init__ so that it is picked in the + # multiple heritance hierarchy in the class created in + # _mk_exception. Note: in Python 2, if you implement __init__ + # in your exception class you need to set .args correctly, + # otherwise you can dump an exception instance with pickle but + # not load it (at load time an empty .args will be passed to + # the constructor). Also we want to be explicit and not use + # 'super' here. Using 'super' can cause a sibling class method + # to be called and we have no control the sibling class method + # constructor signature in the exception returned by + # _mk_exception. + Exception.__init__(self, *args) + + def __repr__(self): + if hasattr(self, 'args') and len(self.args) > 0: + message = self.args[0] + else: + message = '' + + name = self.__class__.__name__ + return '%s\n%s\n%s\n%s' % (name, 75 * '_', message, 75 * '_') + + __str__ = __repr__ + + +class TransportableException(JoblibException): + """An exception containing all the info to wrap an original + exception and recreate it. + """ + + def __init__(self, message, etype): + # The next line set the .args correctly. This is needed to + # make the exception loadable with pickle + JoblibException.__init__(self, message, etype) + self.message = message + self.etype = etype + + def unwrap(self, context_message=""): + report = """\ +%s +--------------------------------------------------------------------------- +Joblib worker traceback: +--------------------------------------------------------------------------- +%s""" % (context_message, self.message) + # Unwrap the exception to a JoblibException + exception_type = _mk_exception(self.etype)[0] + return exception_type(report) + + +class WorkerInterrupt(Exception): + """ An exception that is not KeyboardInterrupt to allow subprocesses + to be interrupted. + """ + pass + + +_exception_mapping = dict() + + +def _mk_exception(exception, name=None): + if issubclass(exception, JoblibException): + # No need to wrap recursively JoblibException + return exception, exception.__name__ + + # Create an exception inheriting from both JoblibException + # and that exception + if name is None: + name = exception.__name__ + this_name = 'Joblib%s' % name + if this_name in _exception_mapping: + # Avoid creating twice the same exception + this_exception = _exception_mapping[this_name] + else: + if exception is Exception: + # JoblibException is already a subclass of Exception. No + # need to use multiple inheritance + return JoblibException, this_name + try: + this_exception = type( + this_name, (JoblibException, exception), {}) + _exception_mapping[this_name] = this_exception + except TypeError: + # This happens if "Cannot create a consistent method + # resolution order", e.g. because 'exception' is a + # subclass of JoblibException or 'exception' is not an + # acceptable base class + this_exception = JoblibException + + return this_exception, this_name + + +def _mk_common_exceptions(): + namespace = dict() + if PY3_OR_LATER: + import builtins as _builtin_exceptions + common_exceptions = filter( + lambda x: x.endswith('Error'), + dir(_builtin_exceptions)) + else: + import exceptions as _builtin_exceptions + common_exceptions = dir(_builtin_exceptions) + + for name in common_exceptions: + obj = getattr(_builtin_exceptions, name) + if isinstance(obj, type) and issubclass(obj, BaseException): + this_obj, this_name = _mk_exception(obj, name=name) + namespace[this_name] = this_obj + return namespace + + +# Updating module locals so that the exceptions pickle right. AFAIK this +# works only at module-creation time +locals().update(_mk_common_exceptions()) diff --git a/my_env/Lib/site-packages/joblib/numpy_pickle.py b/my_env/Lib/site-packages/joblib/numpy_pickle.py new file mode 100644 index 000000000..0c448be52 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/numpy_pickle.py @@ -0,0 +1,607 @@ +"""Utilities for fast persistence of big data, with optional compression.""" + +# Author: Gael Varoquaux +# Copyright (c) 2009 Gael Varoquaux +# License: BSD Style, 3 clauses. + +import pickle +import os +import sys +import warnings +try: + from pathlib import Path +except ImportError: + Path = None + +from .compressor import lz4, LZ4_NOT_INSTALLED_ERROR +from .compressor import _COMPRESSORS, register_compressor, BinaryZlibFile +from .compressor import (ZlibCompressorWrapper, GzipCompressorWrapper, + BZ2CompressorWrapper, LZMACompressorWrapper, + XZCompressorWrapper, LZ4CompressorWrapper) +from .numpy_pickle_utils import Unpickler, Pickler +from .numpy_pickle_utils import _read_fileobject, _write_fileobject +from .numpy_pickle_utils import _read_bytes, BUFFER_SIZE +from .numpy_pickle_compat import load_compatibility +from .numpy_pickle_compat import NDArrayWrapper +# For compatibility with old versions of joblib, we need ZNDArrayWrapper +# to be visible in the current namespace. +# Explicitly skipping next line from flake8 as it triggers an F401 warning +# which we don't care. +from .numpy_pickle_compat import ZNDArrayWrapper # noqa +from ._compat import _basestring, PY3_OR_LATER +from .backports import make_memmap + +# Register supported compressors +register_compressor('zlib', ZlibCompressorWrapper()) +register_compressor('gzip', GzipCompressorWrapper()) +register_compressor('bz2', BZ2CompressorWrapper()) +register_compressor('lzma', LZMACompressorWrapper()) +register_compressor('xz', XZCompressorWrapper()) +register_compressor('lz4', LZ4CompressorWrapper()) + +############################################################################### +# Utility objects for persistence. + + +class NumpyArrayWrapper(object): + """An object to be persisted instead of numpy arrays. + + This object is used to hack into the pickle machinery and read numpy + array data from our custom persistence format. + More precisely, this object is used for: + * carrying the information of the persisted array: subclass, shape, order, + dtype. Those ndarray metadata are used to correctly reconstruct the array + with low level numpy functions. + * determining if memmap is allowed on the array. + * reading the array bytes from a file. + * reading the array using memorymap from a file. + * writing the array bytes to a file. + + Attributes + ---------- + subclass: numpy.ndarray subclass + Determine the subclass of the wrapped array. + shape: numpy.ndarray shape + Determine the shape of the wrapped array. + order: {'C', 'F'} + Determine the order of wrapped array data. 'C' is for C order, 'F' is + for fortran order. + dtype: numpy.ndarray dtype + Determine the data type of the wrapped array. + allow_mmap: bool + Determine if memory mapping is allowed on the wrapped array. + Default: False. + """ + + def __init__(self, subclass, shape, order, dtype, allow_mmap=False): + """Constructor. Store the useful information for later.""" + self.subclass = subclass + self.shape = shape + self.order = order + self.dtype = dtype + self.allow_mmap = allow_mmap + + def write_array(self, array, pickler): + """Write array bytes to pickler file handle. + + This function is an adaptation of the numpy write_array function + available in version 1.10.1 in numpy/lib/format.py. + """ + # Set buffer size to 16 MiB to hide the Python loop overhead. + buffersize = max(16 * 1024 ** 2 // array.itemsize, 1) + if array.dtype.hasobject: + # We contain Python objects so we cannot write out the data + # directly. Instead, we will pickle it out with version 2 of the + # pickle protocol. + pickle.dump(array, pickler.file_handle, protocol=2) + else: + for chunk in pickler.np.nditer(array, + flags=['external_loop', + 'buffered', + 'zerosize_ok'], + buffersize=buffersize, + order=self.order): + pickler.file_handle.write(chunk.tostring('C')) + + def read_array(self, unpickler): + """Read array from unpickler file handle. + + This function is an adaptation of the numpy read_array function + available in version 1.10.1 in numpy/lib/format.py. + """ + if len(self.shape) == 0: + count = 1 + else: + # joblib issue #859: we cast the elements of self.shape to int64 to + # prevent a potential overflow when computing their product. + shape_int64 = [unpickler.np.int64(x) for x in self.shape] + count = unpickler.np.multiply.reduce(shape_int64) + # Now read the actual data. + if self.dtype.hasobject: + # The array contained Python objects. We need to unpickle the data. + array = pickle.load(unpickler.file_handle) + else: + if (not PY3_OR_LATER and + unpickler.np.compat.isfileobj(unpickler.file_handle)): + # In python 2, gzip.GzipFile is considered as a file so one + # can use numpy.fromfile(). + # For file objects, use np.fromfile function. + # This function is faster than the memory-intensive + # method below. + array = unpickler.np.fromfile(unpickler.file_handle, + dtype=self.dtype, count=count) + else: + # This is not a real file. We have to read it the + # memory-intensive way. + # crc32 module fails on reads greater than 2 ** 32 bytes, + # breaking large reads from gzip streams. Chunk reads to + # BUFFER_SIZE bytes to avoid issue and reduce memory overhead + # of the read. In non-chunked case count < max_read_count, so + # only one read is performed. + max_read_count = BUFFER_SIZE // min(BUFFER_SIZE, + self.dtype.itemsize) + + array = unpickler.np.empty(count, dtype=self.dtype) + for i in range(0, count, max_read_count): + read_count = min(max_read_count, count - i) + read_size = int(read_count * self.dtype.itemsize) + data = _read_bytes(unpickler.file_handle, + read_size, "array data") + array[i:i + read_count] = \ + unpickler.np.frombuffer(data, dtype=self.dtype, + count=read_count) + del data + + if self.order == 'F': + array.shape = self.shape[::-1] + array = array.transpose() + else: + array.shape = self.shape + + return array + + def read_mmap(self, unpickler): + """Read an array using numpy memmap.""" + offset = unpickler.file_handle.tell() + if unpickler.mmap_mode == 'w+': + unpickler.mmap_mode = 'r+' + + marray = make_memmap(unpickler.filename, + dtype=self.dtype, + shape=self.shape, + order=self.order, + mode=unpickler.mmap_mode, + offset=offset) + # update the offset so that it corresponds to the end of the read array + unpickler.file_handle.seek(offset + marray.nbytes) + + return marray + + def read(self, unpickler): + """Read the array corresponding to this wrapper. + + Use the unpickler to get all information to correctly read the array. + + Parameters + ---------- + unpickler: NumpyUnpickler + + Returns + ------- + array: numpy.ndarray + + """ + # When requested, only use memmap mode if allowed. + if unpickler.mmap_mode is not None and self.allow_mmap: + array = self.read_mmap(unpickler) + else: + array = self.read_array(unpickler) + + # Manage array subclass case + if (hasattr(array, '__array_prepare__') and + self.subclass not in (unpickler.np.ndarray, + unpickler.np.memmap)): + # We need to reconstruct another subclass + new_array = unpickler.np.core.multiarray._reconstruct( + self.subclass, (0,), 'b') + return new_array.__array_prepare__(array) + else: + return array + +############################################################################### +# Pickler classes + + +class NumpyPickler(Pickler): + """A pickler to persist big data efficiently. + + The main features of this object are: + * persistence of numpy arrays in a single file. + * optional compression with a special care on avoiding memory copies. + + Attributes + ---------- + fp: file + File object handle used for serializing the input object. + protocol: int, optional + Pickle protocol used. Default is pickle.DEFAULT_PROTOCOL under + python 3, pickle.HIGHEST_PROTOCOL otherwise. + """ + + dispatch = Pickler.dispatch.copy() + + def __init__(self, fp, protocol=None): + self.file_handle = fp + self.buffered = isinstance(self.file_handle, BinaryZlibFile) + + # By default we want a pickle protocol that only changes with + # the major python version and not the minor one + if protocol is None: + protocol = (pickle.DEFAULT_PROTOCOL if PY3_OR_LATER + else pickle.HIGHEST_PROTOCOL) + + Pickler.__init__(self, self.file_handle, protocol=protocol) + # delayed import of numpy, to avoid tight coupling + try: + import numpy as np + except ImportError: + np = None + self.np = np + + def _create_array_wrapper(self, array): + """Create and returns a numpy array wrapper from a numpy array.""" + order = 'F' if (array.flags.f_contiguous and + not array.flags.c_contiguous) else 'C' + allow_mmap = not self.buffered and not array.dtype.hasobject + wrapper = NumpyArrayWrapper(type(array), + array.shape, order, array.dtype, + allow_mmap=allow_mmap) + + return wrapper + + def save(self, obj): + """Subclass the Pickler `save` method. + + This is a total abuse of the Pickler class in order to use the numpy + persistence function `save` instead of the default pickle + implementation. The numpy array is replaced by a custom wrapper in the + pickle persistence stack and the serialized array is written right + after in the file. Warning: the file produced does not follow the + pickle format. As such it can not be read with `pickle.load`. + """ + if self.np is not None and type(obj) in (self.np.ndarray, + self.np.matrix, + self.np.memmap): + if type(obj) is self.np.memmap: + # Pickling doesn't work with memmapped arrays + obj = self.np.asanyarray(obj) + + # The array wrapper is pickled instead of the real array. + wrapper = self._create_array_wrapper(obj) + Pickler.save(self, wrapper) + + # A framer was introduced with pickle protocol 4 and we want to + # ensure the wrapper object is written before the numpy array + # buffer in the pickle file. + # See https://www.python.org/dev/peps/pep-3154/#framing to get + # more information on the framer behavior. + if self.proto >= 4: + self.framer.commit_frame(force=True) + + # And then array bytes are written right after the wrapper. + wrapper.write_array(obj, self) + return + + return Pickler.save(self, obj) + + +class NumpyUnpickler(Unpickler): + """A subclass of the Unpickler to unpickle our numpy pickles. + + Attributes + ---------- + mmap_mode: str + The memorymap mode to use for reading numpy arrays. + file_handle: file_like + File object to unpickle from. + filename: str + Name of the file to unpickle from. It should correspond to file_handle. + This parameter is required when using mmap_mode. + np: module + Reference to numpy module if numpy is installed else None. + + """ + + dispatch = Unpickler.dispatch.copy() + + def __init__(self, filename, file_handle, mmap_mode=None): + # The next line is for backward compatibility with pickle generated + # with joblib versions less than 0.10. + self._dirname = os.path.dirname(filename) + + self.mmap_mode = mmap_mode + self.file_handle = file_handle + # filename is required for numpy mmap mode. + self.filename = filename + self.compat_mode = False + Unpickler.__init__(self, self.file_handle) + try: + import numpy as np + except ImportError: + np = None + self.np = np + + def load_build(self): + """Called to set the state of a newly created object. + + We capture it to replace our place-holder objects, NDArrayWrapper or + NumpyArrayWrapper, by the array we are interested in. We + replace them directly in the stack of pickler. + NDArrayWrapper is used for backward compatibility with joblib <= 0.9. + """ + Unpickler.load_build(self) + + # For backward compatibility, we support NDArrayWrapper objects. + if isinstance(self.stack[-1], (NDArrayWrapper, NumpyArrayWrapper)): + if self.np is None: + raise ImportError("Trying to unpickle an ndarray, " + "but numpy didn't import correctly") + array_wrapper = self.stack.pop() + # If any NDArrayWrapper is found, we switch to compatibility mode, + # this will be used to raise a DeprecationWarning to the user at + # the end of the unpickling. + if isinstance(array_wrapper, NDArrayWrapper): + self.compat_mode = True + self.stack.append(array_wrapper.read(self)) + + # Be careful to register our new method. + if PY3_OR_LATER: + dispatch[pickle.BUILD[0]] = load_build + else: + dispatch[pickle.BUILD] = load_build + + +############################################################################### +# Utility functions + +def dump(value, filename, compress=0, protocol=None, cache_size=None): + """Persist an arbitrary Python object into one file. + + Read more in the :ref:`User Guide `. + + Parameters + ----------- + value: any Python object + The object to store to disk. + filename: str, pathlib.Path, or file object. + The file object or path of the file in which it is to be stored. + The compression method corresponding to one of the supported filename + extensions ('.z', '.gz', '.bz2', '.xz' or '.lzma') will be used + automatically. + compress: int from 0 to 9 or bool or 2-tuple, optional + Optional compression level for the data. 0 or False is no compression. + Higher value means more compression, but also slower read and + write times. Using a value of 3 is often a good compromise. + See the notes for more details. + If compress is True, the compression level used is 3. + If compress is a 2-tuple, the first element must correspond to a string + between supported compressors (e.g 'zlib', 'gzip', 'bz2', 'lzma' + 'xz'), the second element must be an integer from 0 to 9, corresponding + to the compression level. + protocol: int, optional + Pickle protocol, see pickle.dump documentation for more details. + cache_size: positive int, optional + This option is deprecated in 0.10 and has no effect. + + Returns + ------- + filenames: list of strings + The list of file names in which the data is stored. If + compress is false, each array is stored in a different file. + + See Also + -------- + joblib.load : corresponding loader + + Notes + ----- + Memmapping on load cannot be used for compressed files. Thus + using compression can significantly slow down loading. In + addition, compressed files take extra extra memory during + dump and load. + + """ + + if Path is not None and isinstance(filename, Path): + filename = str(filename) + + is_filename = isinstance(filename, _basestring) + is_fileobj = hasattr(filename, "write") + + compress_method = 'zlib' # zlib is the default compression method. + if compress is True: + # By default, if compress is enabled, we want the default compress + # level of the compressor. + compress_level = None + elif isinstance(compress, tuple): + # a 2-tuple was set in compress + if len(compress) != 2: + raise ValueError( + 'Compress argument tuple should contain exactly 2 elements: ' + '(compress method, compress level), you passed {}' + .format(compress)) + compress_method, compress_level = compress + elif isinstance(compress, _basestring): + compress_method = compress + compress_level = None # Use default compress level + compress = (compress_method, compress_level) + else: + compress_level = compress + + # LZ4 compression is only supported and installation checked with + # python 3+. + if compress_method == 'lz4' and lz4 is None and PY3_OR_LATER: + raise ValueError(LZ4_NOT_INSTALLED_ERROR) + + if (compress_level is not None and + compress_level is not False and + compress_level not in range(10)): + # Raising an error if a non valid compress level is given. + raise ValueError( + 'Non valid compress level given: "{}". Possible values are ' + '{}.'.format(compress_level, list(range(10)))) + + if compress_method not in _COMPRESSORS: + # Raising an error if an unsupported compression method is given. + raise ValueError( + 'Non valid compression method given: "{}". Possible values are ' + '{}.'.format(compress_method, _COMPRESSORS)) + + if not is_filename and not is_fileobj: + # People keep inverting arguments, and the resulting error is + # incomprehensible + raise ValueError( + 'Second argument should be a filename or a file-like object, ' + '%s (type %s) was given.' + % (filename, type(filename)) + ) + + if is_filename and not isinstance(compress, tuple): + # In case no explicit compression was requested using both compression + # method and level in a tuple and the filename has an explicit + # extension, we select the corresponding compressor. + + # unset the variable to be sure no compression level is set afterwards. + compress_method = None + for name, compressor in _COMPRESSORS.items(): + if filename.endswith(compressor.extension): + compress_method = name + + if compress_method in _COMPRESSORS and compress_level == 0: + # we choose the default compress_level in case it was not given + # as an argument (using compress). + compress_level = None + + if not PY3_OR_LATER and compress_method in ('lzma', 'xz'): + raise NotImplementedError("{} compression is only available for " + "python version >= 3.3. You are using " + "{}.{}".format(compress_method, + sys.version_info[0], + sys.version_info[1])) + + if cache_size is not None: + # Cache size is deprecated starting from version 0.10 + warnings.warn("Please do not set 'cache_size' in joblib.dump, " + "this parameter has no effect and will be removed. " + "You used 'cache_size={}'".format(cache_size), + DeprecationWarning, stacklevel=2) + + if compress_level != 0: + with _write_fileobject(filename, compress=(compress_method, + compress_level)) as f: + NumpyPickler(f, protocol=protocol).dump(value) + elif is_filename: + with open(filename, 'wb') as f: + NumpyPickler(f, protocol=protocol).dump(value) + else: + NumpyPickler(filename, protocol=protocol).dump(value) + + # If the target container is a file object, nothing is returned. + if is_fileobj: + return + + # For compatibility, the list of created filenames (e.g with one element + # after 0.10.0) is returned by default. + return [filename] + + +def _unpickle(fobj, filename="", mmap_mode=None): + """Internal unpickling function.""" + # We are careful to open the file handle early and keep it open to + # avoid race-conditions on renames. + # That said, if data is stored in companion files, which can be + # the case with the old persistence format, moving the directory + # will create a race when joblib tries to access the companion + # files. + unpickler = NumpyUnpickler(filename, fobj, mmap_mode=mmap_mode) + obj = None + try: + obj = unpickler.load() + if unpickler.compat_mode: + warnings.warn("The file '%s' has been generated with a " + "joblib version less than 0.10. " + "Please regenerate this pickle file." + % filename, + DeprecationWarning, stacklevel=3) + except UnicodeDecodeError as exc: + # More user-friendly error message + if PY3_OR_LATER: + new_exc = ValueError( + 'You may be trying to read with ' + 'python 3 a joblib pickle generated with python 2. ' + 'This feature is not supported by joblib.') + new_exc.__cause__ = exc + raise new_exc + # Reraise exception with Python 2 + raise + + return obj + + +def load(filename, mmap_mode=None): + """Reconstruct a Python object from a file persisted with joblib.dump. + + Read more in the :ref:`User Guide `. + + WARNING: joblib.load relies on the pickle module and can therefore + execute arbitrary Python code. It should therefore never be used + to load files from untrusted sources. + + Parameters + ----------- + filename: str, pathlib.Path, or file object. + The file object or path of the file from which to load the object + mmap_mode: {None, 'r+', 'r', 'w+', 'c'}, optional + If not None, the arrays are memory-mapped from the disk. This + mode has no effect for compressed files. Note that in this + case the reconstructed object might no longer match exactly + the originally pickled object. + + Returns + ------- + result: any Python object + The object stored in the file. + + See Also + -------- + joblib.dump : function to save an object + + Notes + ----- + + This function can load numpy array files saved separately during the + dump. If the mmap_mode argument is given, it is passed to np.load and + arrays are loaded as memmaps. As a consequence, the reconstructed + object might not match the original pickled object. Note that if the + file was saved with compression, the arrays cannot be memmapped. + """ + if Path is not None and isinstance(filename, Path): + filename = str(filename) + + if hasattr(filename, "read"): + fobj = filename + filename = getattr(fobj, 'name', '') + with _read_fileobject(fobj, filename, mmap_mode) as fobj: + obj = _unpickle(fobj) + else: + with open(filename, 'rb') as f: + with _read_fileobject(f, filename, mmap_mode) as fobj: + if isinstance(fobj, _basestring): + # if the returned file object is a string, this means we + # try to load a pickle file generated with an version of + # Joblib so we load it with joblib compatibility function. + return load_compatibility(fobj) + + obj = _unpickle(fobj, filename, mmap_mode) + + return obj diff --git a/my_env/Lib/site-packages/joblib/numpy_pickle_compat.py b/my_env/Lib/site-packages/joblib/numpy_pickle_compat.py new file mode 100644 index 000000000..d15324159 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/numpy_pickle_compat.py @@ -0,0 +1,247 @@ +"""Numpy pickle compatibility functions.""" + +import pickle +import os +import zlib +import inspect + +from io import BytesIO + +from ._compat import PY3_OR_LATER +from .numpy_pickle_utils import _ZFILE_PREFIX +from .numpy_pickle_utils import Unpickler + + +def hex_str(an_int): + """Convert an int to an hexadecimal string.""" + return '{:#x}'.format(an_int) + +if PY3_OR_LATER: + def asbytes(s): + if isinstance(s, bytes): + return s + return s.encode('latin1') +else: + asbytes = str + +_MAX_LEN = len(hex_str(2 ** 64)) +_CHUNK_SIZE = 64 * 1024 + + +def read_zfile(file_handle): + """Read the z-file and return the content as a string. + + Z-files are raw data compressed with zlib used internally by joblib + for persistence. Backward compatibility is not guaranteed. Do not + use for external purposes. + """ + file_handle.seek(0) + header_length = len(_ZFILE_PREFIX) + _MAX_LEN + length = file_handle.read(header_length) + length = length[len(_ZFILE_PREFIX):] + length = int(length, 16) + + # With python2 and joblib version <= 0.8.4 compressed pickle header is one + # character wider so we need to ignore an additional space if present. + # Note: the first byte of the zlib data is guaranteed not to be a + # space according to + # https://tools.ietf.org/html/rfc6713#section-2.1 + next_byte = file_handle.read(1) + if next_byte != b' ': + # The zlib compressed data has started and we need to go back + # one byte + file_handle.seek(header_length) + + # We use the known length of the data to tell Zlib the size of the + # buffer to allocate. + data = zlib.decompress(file_handle.read(), 15, length) + assert len(data) == length, ( + "Incorrect data length while decompressing %s." + "The file could be corrupted." % file_handle) + return data + + +def write_zfile(file_handle, data, compress=1): + """Write the data in the given file as a Z-file. + + Z-files are raw data compressed with zlib used internally by joblib + for persistence. Backward compatibility is not guarantied. Do not + use for external purposes. + """ + file_handle.write(_ZFILE_PREFIX) + length = hex_str(len(data)) + # Store the length of the data + file_handle.write(asbytes(length.ljust(_MAX_LEN))) + file_handle.write(zlib.compress(asbytes(data), compress)) + +############################################################################### +# Utility objects for persistence. + + +class NDArrayWrapper(object): + """An object to be persisted instead of numpy arrays. + + The only thing this object does, is to carry the filename in which + the array has been persisted, and the array subclass. + """ + + def __init__(self, filename, subclass, allow_mmap=True): + """Constructor. Store the useful information for later.""" + self.filename = filename + self.subclass = subclass + self.allow_mmap = allow_mmap + + def read(self, unpickler): + """Reconstruct the array.""" + filename = os.path.join(unpickler._dirname, self.filename) + # Load the array from the disk + # use getattr instead of self.allow_mmap to ensure backward compat + # with NDArrayWrapper instances pickled with joblib < 0.9.0 + allow_mmap = getattr(self, 'allow_mmap', True) + kwargs = {} + if allow_mmap: + kwargs['mmap_mode'] = unpickler.mmap_mode + if "allow_pickle" in inspect.signature(unpickler.np.load).parameters: + # Required in numpy 1.16.3 and later to aknowledge the security + # risk. + kwargs["allow_pickle"] = True + array = unpickler.np.load(filename, **kwargs) + + # Reconstruct subclasses. This does not work with old + # versions of numpy + if (hasattr(array, '__array_prepare__') and + self.subclass not in (unpickler.np.ndarray, + unpickler.np.memmap)): + # We need to reconstruct another subclass + new_array = unpickler.np.core.multiarray._reconstruct( + self.subclass, (0,), 'b') + return new_array.__array_prepare__(array) + else: + return array + + +class ZNDArrayWrapper(NDArrayWrapper): + """An object to be persisted instead of numpy arrays. + + This object store the Zfile filename in which + the data array has been persisted, and the meta information to + retrieve it. + The reason that we store the raw buffer data of the array and + the meta information, rather than array representation routine + (tostring) is that it enables us to use completely the strided + model to avoid memory copies (a and a.T store as fast). In + addition saving the heavy information separately can avoid + creating large temporary buffers when unpickling data with + large arrays. + """ + + def __init__(self, filename, init_args, state): + """Constructor. Store the useful information for later.""" + self.filename = filename + self.state = state + self.init_args = init_args + + def read(self, unpickler): + """Reconstruct the array from the meta-information and the z-file.""" + # Here we a simply reproducing the unpickling mechanism for numpy + # arrays + filename = os.path.join(unpickler._dirname, self.filename) + array = unpickler.np.core.multiarray._reconstruct(*self.init_args) + with open(filename, 'rb') as f: + data = read_zfile(f) + state = self.state + (data,) + array.__setstate__(state) + return array + + +class ZipNumpyUnpickler(Unpickler): + """A subclass of the Unpickler to unpickle our numpy pickles.""" + + dispatch = Unpickler.dispatch.copy() + + def __init__(self, filename, file_handle, mmap_mode=None): + """Constructor.""" + self._filename = os.path.basename(filename) + self._dirname = os.path.dirname(filename) + self.mmap_mode = mmap_mode + self.file_handle = self._open_pickle(file_handle) + Unpickler.__init__(self, self.file_handle) + try: + import numpy as np + except ImportError: + np = None + self.np = np + + def _open_pickle(self, file_handle): + return BytesIO(read_zfile(file_handle)) + + def load_build(self): + """Set the state of a newly created object. + + We capture it to replace our place-holder objects, + NDArrayWrapper, by the array we are interested in. We + replace them directly in the stack of pickler. + """ + Unpickler.load_build(self) + if isinstance(self.stack[-1], NDArrayWrapper): + if self.np is None: + raise ImportError("Trying to unpickle an ndarray, " + "but numpy didn't import correctly") + nd_array_wrapper = self.stack.pop() + array = nd_array_wrapper.read(self) + self.stack.append(array) + + # Be careful to register our new method. + if PY3_OR_LATER: + dispatch[pickle.BUILD[0]] = load_build + else: + dispatch[pickle.BUILD] = load_build + + +def load_compatibility(filename): + """Reconstruct a Python object from a file persisted with joblib.dump. + + This function ensures the compatibility with joblib old persistence format + (<= 0.9.3). + + Parameters + ----------- + filename: string + The name of the file from which to load the object + + Returns + ------- + result: any Python object + The object stored in the file. + + See Also + -------- + joblib.dump : function to save an object + + Notes + ----- + + This function can load numpy array files saved separately during the + dump. + """ + with open(filename, 'rb') as file_handle: + # We are careful to open the file handle early and keep it open to + # avoid race-conditions on renames. That said, if data is stored in + # companion files, moving the directory will create a race when + # joblib tries to access the companion files. + unpickler = ZipNumpyUnpickler(filename, file_handle=file_handle) + try: + obj = unpickler.load() + except UnicodeDecodeError as exc: + # More user-friendly error message + if PY3_OR_LATER: + new_exc = ValueError( + 'You may be trying to read with ' + 'python 3 a joblib pickle generated with python 2. ' + 'This feature is not supported by joblib.') + new_exc.__cause__ = exc + raise new_exc + finally: + if hasattr(unpickler, 'file_handle'): + unpickler.file_handle.close() + return obj diff --git a/my_env/Lib/site-packages/joblib/numpy_pickle_utils.py b/my_env/Lib/site-packages/joblib/numpy_pickle_utils.py new file mode 100644 index 000000000..1ebf1aa61 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/numpy_pickle_utils.py @@ -0,0 +1,245 @@ +"""Utilities for fast persistence of big data, with optional compression.""" + +# Author: Gael Varoquaux +# Copyright (c) 2009 Gael Varoquaux +# License: BSD Style, 3 clauses. + +import pickle +import io +import warnings +import contextlib +from contextlib import closing + +from ._compat import PY3_OR_LATER, PY27 +from .compressor import _ZFILE_PREFIX +from .compressor import _COMPRESSORS + +if PY3_OR_LATER: + Unpickler = pickle._Unpickler + Pickler = pickle._Pickler + xrange = range +else: + Unpickler = pickle.Unpickler + Pickler = pickle.Pickler + +try: + import numpy as np +except ImportError: + np = None + +try: + # The python standard library can be built without bz2 so we make bz2 + # usage optional. + # see https://github.com/scikit-learn/scikit-learn/issues/7526 for more + # details. + import bz2 +except ImportError: + bz2 = None + +# Buffer size used in io.BufferedReader and io.BufferedWriter +_IO_BUFFER_SIZE = 1024 ** 2 + + +def _is_raw_file(fileobj): + """Check if fileobj is a raw file object, e.g created with open.""" + if PY3_OR_LATER: + fileobj = getattr(fileobj, 'raw', fileobj) + return isinstance(fileobj, io.FileIO) + else: + return isinstance(fileobj, file) # noqa + + +def _get_prefixes_max_len(): + # Compute the max prefix len of registered compressors. + prefixes = [len(compressor.prefix) for compressor in _COMPRESSORS.values()] + prefixes += [len(_ZFILE_PREFIX)] + return max(prefixes) + + +############################################################################### +# Cache file utilities +def _detect_compressor(fileobj): + """Return the compressor matching fileobj. + + Parameters + ---------- + fileobj: file object + + Returns + ------- + str in {'zlib', 'gzip', 'bz2', 'lzma', 'xz', 'compat', 'not-compressed'} + """ + # Read the magic number in the first bytes of the file. + max_prefix_len = _get_prefixes_max_len() + if hasattr(fileobj, 'peek'): + # Peek allows to read those bytes without moving the cursor in the + # file whic. + first_bytes = fileobj.peek(max_prefix_len) + else: + # Fallback to seek if the fileobject is not peekable. + first_bytes = fileobj.read(max_prefix_len) + fileobj.seek(0) + + if first_bytes.startswith(_ZFILE_PREFIX): + return "compat" + else: + for name, compressor in _COMPRESSORS.items(): + if first_bytes.startswith(compressor.prefix): + return name + + return "not-compressed" + + +def _buffered_read_file(fobj): + """Return a buffered version of a read file object.""" + if PY27 and bz2 is not None and isinstance(fobj, bz2.BZ2File): + # Python 2.7 doesn't work with BZ2File through a buffer: "no + # attribute 'readable'" error. + return fobj + else: + return io.BufferedReader(fobj, buffer_size=_IO_BUFFER_SIZE) + + +def _buffered_write_file(fobj): + """Return a buffered version of a write file object.""" + if PY27 and bz2 is not None and isinstance(fobj, bz2.BZ2File): + # Python 2.7 doesn't work with BZ2File through a buffer: no attribute + # 'writable'. + # BZ2File doesn't implement the file object context manager in python 2 + # so we wrap the fileobj using `closing`. + return closing(fobj) + else: + return io.BufferedWriter(fobj, buffer_size=_IO_BUFFER_SIZE) + + +@contextlib.contextmanager +def _read_fileobject(fileobj, filename, mmap_mode=None): + """Utility function opening the right fileobject from a filename. + + The magic number is used to choose between the type of file object to open: + * regular file object (default) + * zlib file object + * gzip file object + * bz2 file object + * lzma file object (for xz and lzma compressor) + + Parameters + ---------- + fileobj: file object + compressor: str in {'zlib', 'gzip', 'bz2', 'lzma', 'xz', 'compat', + 'not-compressed'} + filename: str + filename path corresponding to the fileobj parameter. + mmap_mode: str + memory map mode that should be used to open the pickle file. This + parameter is useful to verify that the user is not trying to one with + compression. Default: None. + + Returns + ------- + a file like object + + """ + # Detect if the fileobj contains compressed data. + compressor = _detect_compressor(fileobj) + + if compressor == 'compat': + # Compatibility with old pickle mode: simply return the input + # filename "as-is" and let the compatibility function be called by the + # caller. + warnings.warn("The file '%s' has been generated with a joblib " + "version less than 0.10. " + "Please regenerate this pickle file." % filename, + DeprecationWarning, stacklevel=2) + yield filename + else: + if compressor in _COMPRESSORS: + # based on the compressor detected in the file, we open the + # correct decompressor file object, wrapped in a buffer. + compressor_wrapper = _COMPRESSORS[compressor] + inst = compressor_wrapper.decompressor_file(fileobj) + fileobj = _buffered_read_file(inst) + + # Checking if incompatible load parameters with the type of file: + # mmap_mode cannot be used with compressed file or in memory buffers + # such as io.BytesIO. + if mmap_mode is not None: + if isinstance(fileobj, io.BytesIO): + warnings.warn('In memory persistence is not compatible with ' + 'mmap_mode "%(mmap_mode)s" flag passed. ' + 'mmap_mode option will be ignored.' + % locals(), stacklevel=2) + elif compressor != 'not-compressed': + warnings.warn('mmap_mode "%(mmap_mode)s" is not compatible ' + 'with compressed file %(filename)s. ' + '"%(mmap_mode)s" flag will be ignored.' + % locals(), stacklevel=2) + elif not _is_raw_file(fileobj): + warnings.warn('"%(fileobj)r" is not a raw file, mmap_mode ' + '"%(mmap_mode)s" flag will be ignored.' + % locals(), stacklevel=2) + + yield fileobj + + +def _write_fileobject(filename, compress=("zlib", 3)): + """Return the right compressor file object in write mode.""" + compressmethod = compress[0] + compresslevel = compress[1] + + if compressmethod in _COMPRESSORS.keys(): + file_instance = _COMPRESSORS[compressmethod].compressor_file( + filename, compresslevel=compresslevel) + return _buffered_write_file(file_instance) + else: + file_instance = _COMPRESSORS['zlib'].compressor_file( + filename, compresslevel=compresslevel) + return _buffered_write_file(file_instance) + + +# Utility functions/variables from numpy required for writing arrays. +# We need at least the functions introduced in version 1.9 of numpy. Here, +# we use the ones from numpy 1.10.2. +BUFFER_SIZE = 2 ** 18 # size of buffer for reading npz files in bytes + + +def _read_bytes(fp, size, error_template="ran out of data"): + """Read from file-like object until size bytes are read. + + Raises ValueError if not EOF is encountered before size bytes are read. + Non-blocking objects only supported if they derive from io objects. + + Required as e.g. ZipExtFile in python 2.6 can return less data than + requested. + + This function was taken from numpy/lib/format.py in version 1.10.2. + + Parameters + ---------- + fp: file-like object + size: int + error_template: str + + Returns + ------- + a bytes object + The data read in bytes. + + """ + data = bytes() + while True: + # io files (default in python3) return None or raise on + # would-block, python2 file will truncate, probably nothing can be + # done about that. note that regular files can't be non-blocking + try: + r = fp.read(size - len(data)) + data += r + if len(r) == 0 or len(data) == size: + break + except io.BlockingIOError: + pass + if len(data) != size: + msg = "EOF: reading %s, expected %d bytes got %d" + raise ValueError(msg % (error_template, size, len(data))) + else: + return data diff --git a/my_env/Lib/site-packages/joblib/parallel.py b/my_env/Lib/site-packages/joblib/parallel.py new file mode 100644 index 000000000..882d22e93 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/parallel.py @@ -0,0 +1,1034 @@ +""" +Helpers for embarrassingly parallel code. +""" +# Author: Gael Varoquaux < gael dot varoquaux at normalesup dot org > +# Copyright: 2010, Gael Varoquaux +# License: BSD 3 clause + +from __future__ import division + +import os +import sys +from math import sqrt +import functools +import time +import threading +import itertools +from numbers import Integral +import warnings + +from ._multiprocessing_helpers import mp + +from .format_stack import format_outer_frames +from .logger import Logger, short_format_time +from .my_exceptions import TransportableException +from .disk import memstr_to_bytes +from ._parallel_backends import (FallbackToBackend, MultiprocessingBackend, + ThreadingBackend, SequentialBackend, + LokyBackend) +from ._compat import _basestring +from .externals.cloudpickle import dumps, loads +from .externals import loky + +# Make sure that those two classes are part of the public joblib.parallel API +# so that 3rd party backend implementers can import them from here. +from ._parallel_backends import AutoBatchingMixin # noqa +from ._parallel_backends import ParallelBackendBase # noqa + +try: + import queue +except ImportError: # backward compat for Python 2 + import Queue as queue + +BACKENDS = { + 'multiprocessing': MultiprocessingBackend, + 'threading': ThreadingBackend, + 'sequential': SequentialBackend, + 'loky': LokyBackend, +} +# name of the backend used by default by Parallel outside of any context +# managed by ``parallel_backend``. +DEFAULT_BACKEND = 'loky' +DEFAULT_N_JOBS = 1 +DEFAULT_THREAD_BACKEND = 'threading' + +# Thread local value that can be overridden by the ``parallel_backend`` context +# manager +_backend = threading.local() + +VALID_BACKEND_HINTS = ('processes', 'threads', None) +VALID_BACKEND_CONSTRAINTS = ('sharedmem', None) + + +def _register_dask(): + """ Register Dask Backend if called with parallel_backend("dask") """ + try: + from ._dask import DaskDistributedBackend + register_parallel_backend('dask', DaskDistributedBackend) + except ImportError: + msg = ("To use the dask.distributed backend you must install both " + "the `dask` and distributed modules.\n\n" + "See https://dask.pydata.org/en/latest/install.html for more " + "information.") + raise ImportError(msg) + + +EXTERNAL_BACKENDS = { + 'dask': _register_dask, +} + + +def get_active_backend(prefer=None, require=None, verbose=0): + """Return the active default backend""" + if prefer not in VALID_BACKEND_HINTS: + raise ValueError("prefer=%r is not a valid backend hint, " + "expected one of %r" % (prefer, VALID_BACKEND_HINTS)) + if require not in VALID_BACKEND_CONSTRAINTS: + raise ValueError("require=%r is not a valid backend constraint, " + "expected one of %r" + % (require, VALID_BACKEND_CONSTRAINTS)) + + if prefer == 'processes' and require == 'sharedmem': + raise ValueError("prefer == 'processes' and require == 'sharedmem'" + " are inconsistent settings") + backend_and_jobs = getattr(_backend, 'backend_and_jobs', None) + if backend_and_jobs is not None: + # Try to use the backend set by the user with the context manager. + backend, n_jobs = backend_and_jobs + nesting_level = backend.nesting_level + supports_sharedmem = getattr(backend, 'supports_sharedmem', False) + if require == 'sharedmem' and not supports_sharedmem: + # This backend does not match the shared memory constraint: + # fallback to the default thead-based backend. + sharedmem_backend = BACKENDS[DEFAULT_THREAD_BACKEND]( + nesting_level=nesting_level) + if verbose >= 10: + print("Using %s as joblib.Parallel backend instead of %s " + "as the latter does not provide shared memory semantics." + % (sharedmem_backend.__class__.__name__, + backend.__class__.__name__)) + return sharedmem_backend, DEFAULT_N_JOBS + else: + return backend_and_jobs + + # We are outside of the scope of any parallel_backend context manager, + # create the default backend instance now. + backend = BACKENDS[DEFAULT_BACKEND](nesting_level=0) + supports_sharedmem = getattr(backend, 'supports_sharedmem', False) + uses_threads = getattr(backend, 'uses_threads', False) + if ((require == 'sharedmem' and not supports_sharedmem) or + (prefer == 'threads' and not uses_threads)): + # Make sure the selected default backend match the soft hints and + # hard constraints: + backend = BACKENDS[DEFAULT_THREAD_BACKEND](nesting_level=0) + return backend, DEFAULT_N_JOBS + + +class parallel_backend(object): + """Change the default backend used by Parallel inside a with block. + + If ``backend`` is a string it must match a previously registered + implementation using the ``register_parallel_backend`` function. + + By default the following backends are available: + + - 'loky': single-host, process-based parallelism (used by default), + - 'threading': single-host, thread-based parallelism, + - 'multiprocessing': legacy single-host, process-based parallelism. + + 'loky' is recommended to run functions that manipulate Python objects. + 'threading' is a low-overhead alternative that is most efficient for + functions that release the Global Interpreter Lock: e.g. I/O-bound code or + CPU-bound code in a few calls to native code that explicitly releases the + GIL. + + In addition, if the `dask` and `distributed` Python packages are installed, + it is possible to use the 'dask' backend for better scheduling of nested + parallel calls without over-subscription and potentially distribute + parallel calls over a networked cluster of several hosts. + + Alternatively the backend can be passed directly as an instance. + + By default all available workers will be used (``n_jobs=-1``) unless the + caller passes an explicit value for the ``n_jobs`` parameter. + + This is an alternative to passing a ``backend='backend_name'`` argument to + the ``Parallel`` class constructor. It is particularly useful when calling + into library code that uses joblib internally but does not expose the + backend argument in its own API. + + >>> from operator import neg + >>> with parallel_backend('threading'): + ... print(Parallel()(delayed(neg)(i + 1) for i in range(5))) + ... + [-1, -2, -3, -4, -5] + + Warning: this function is experimental and subject to change in a future + version of joblib. + + Joblib also tries to limit the oversubscription by limiting the number of + threads usable in some third-party library threadpools like OpenBLAS, MKL + or OpenMP. The default limit in each worker is set to + ``max(cpu_count() // effective_n_jobs, 1)`` but this limit can be + overwritten with the ``inner_max_num_threads`` argument which will be used + to set this limit in the child processes. + + .. versionadded:: 0.10 + + """ + def __init__(self, backend, n_jobs=-1, inner_max_num_threads=None, + **backend_params): + if isinstance(backend, _basestring): + if backend not in BACKENDS and backend in EXTERNAL_BACKENDS: + register = EXTERNAL_BACKENDS[backend] + register() + + backend = BACKENDS[backend](**backend_params) + + if inner_max_num_threads is not None: + msg = ("{} does not accept setting the inner_max_num_threads " + "argument.".format(backend.__class__.__name__)) + assert backend.supports_inner_max_num_threads, msg + backend.inner_max_num_threads = inner_max_num_threads + + # If the nesting_level of the backend is not set previously, use the + # nesting level from the previous active_backend to set it + current_backend_and_jobs = getattr(_backend, 'backend_and_jobs', None) + if backend.nesting_level is None: + if current_backend_and_jobs is None: + nesting_level = 0 + else: + nesting_level = current_backend_and_jobs[0].nesting_level + + backend.nesting_level = nesting_level + + # Save the backends info and set the active backend + self.old_backend_and_jobs = current_backend_and_jobs + self.new_backend_and_jobs = (backend, n_jobs) + + _backend.backend_and_jobs = (backend, n_jobs) + + def __enter__(self): + return self.new_backend_and_jobs + + def __exit__(self, type, value, traceback): + self.unregister() + + def unregister(self): + if self.old_backend_and_jobs is None: + if getattr(_backend, 'backend_and_jobs', None) is not None: + del _backend.backend_and_jobs + else: + _backend.backend_and_jobs = self.old_backend_and_jobs + + +# Under Linux or OS X the default start method of multiprocessing +# can cause third party libraries to crash. Under Python 3.4+ it is possible +# to set an environment variable to switch the default start method from +# 'fork' to 'forkserver' or 'spawn' to avoid this issue albeit at the cost +# of causing semantic changes and some additional pool instantiation overhead. +DEFAULT_MP_CONTEXT = None +if hasattr(mp, 'get_context'): + method = os.environ.get('JOBLIB_START_METHOD', '').strip() or None + if method is not None: + DEFAULT_MP_CONTEXT = mp.get_context(method=method) + + +class BatchedCalls(object): + """Wrap a sequence of (func, args, kwargs) tuples as a single callable""" + + def __init__(self, iterator_slice, backend_and_jobs, pickle_cache=None): + self.items = list(iterator_slice) + self._size = len(self.items) + if isinstance(backend_and_jobs, tuple): + self._backend, self._n_jobs = backend_and_jobs + else: + # this is for backward compatibility purposes. Before 0.12.6, + # nested backends were returned without n_jobs indications. + self._backend, self._n_jobs = backend_and_jobs, None + self._pickle_cache = pickle_cache if pickle_cache is not None else {} + + def __call__(self): + # Set the default nested backend to self._backend but do not set the + # change the default number of processes to -1 + with parallel_backend(self._backend, n_jobs=self._n_jobs): + return [func(*args, **kwargs) + for func, args, kwargs in self.items] + + def __len__(self): + return self._size + + +############################################################################### +# CPU count that works also when multiprocessing has been disabled via +# the JOBLIB_MULTIPROCESSING environment variable +def cpu_count(): + """Return the number of CPUs.""" + if mp is None: + return 1 + + return loky.cpu_count() + + +############################################################################### +# For verbosity + +def _verbosity_filter(index, verbose): + """ Returns False for indices increasingly apart, the distance + depending on the value of verbose. + + We use a lag increasing as the square of index + """ + if not verbose: + return True + elif verbose > 10: + return False + if index == 0: + return False + verbose = .5 * (11 - verbose) ** 2 + scale = sqrt(index / verbose) + next_scale = sqrt((index + 1) / verbose) + return (int(next_scale) == int(scale)) + + +############################################################################### +def delayed(function, check_pickle=None): + """Decorator used to capture the arguments of a function.""" + if check_pickle is not None: + warnings.warn('check_pickle is deprecated in joblib 0.12 and will be' + ' removed in 0.13', DeprecationWarning) + # Try to pickle the input function, to catch the problems early when + # using with multiprocessing: + if check_pickle: + dumps(function) + + def delayed_function(*args, **kwargs): + return function, args, kwargs + try: + delayed_function = functools.wraps(function)(delayed_function) + except AttributeError: + " functools.wraps fails on some callable objects " + return delayed_function + + +############################################################################### +class BatchCompletionCallBack(object): + """Callback used by joblib.Parallel's multiprocessing backend. + + This callable is executed by the parent process whenever a worker process + has returned the results of a batch of tasks. + + It is used for progress reporting, to update estimate of the batch + processing duration and to schedule the next batch of tasks to be + processed. + + """ + def __init__(self, dispatch_timestamp, batch_size, parallel): + self.dispatch_timestamp = dispatch_timestamp + self.batch_size = batch_size + self.parallel = parallel + + def __call__(self, out): + self.parallel.n_completed_tasks += self.batch_size + this_batch_duration = time.time() - self.dispatch_timestamp + + self.parallel._backend.batch_completed(self.batch_size, + this_batch_duration) + self.parallel.print_progress() + with self.parallel._lock: + if self.parallel._original_iterator is not None: + self.parallel.dispatch_next() + + +############################################################################### +def register_parallel_backend(name, factory, make_default=False): + """Register a new Parallel backend factory. + + The new backend can then be selected by passing its name as the backend + argument to the Parallel class. Moreover, the default backend can be + overwritten globally by setting make_default=True. + + The factory can be any callable that takes no argument and return an + instance of ``ParallelBackendBase``. + + Warning: this function is experimental and subject to change in a future + version of joblib. + + .. versionadded:: 0.10 + + """ + BACKENDS[name] = factory + if make_default: + global DEFAULT_BACKEND + DEFAULT_BACKEND = name + + +def effective_n_jobs(n_jobs=-1): + """Determine the number of jobs that can actually run in parallel + + n_jobs is the number of workers requested by the callers. Passing n_jobs=-1 + means requesting all available workers for instance matching the number of + CPU cores on the worker host(s). + + This method should return a guesstimate of the number of workers that can + actually perform work concurrently with the currently enabled default + backend. The primary use case is to make it possible for the caller to know + in how many chunks to slice the work. + + In general working on larger data chunks is more efficient (less scheduling + overhead and better use of CPU cache prefetching heuristics) as long as all + the workers have enough work to do. + + Warning: this function is experimental and subject to change in a future + version of joblib. + + .. versionadded:: 0.10 + + """ + backend, _ = get_active_backend() + return backend.effective_n_jobs(n_jobs=n_jobs) + + +############################################################################### +class Parallel(Logger): + ''' Helper class for readable parallel mapping. + + Read more in the :ref:`User Guide `. + + Parameters + ----------- + n_jobs: int, default: None + The maximum number of concurrently running jobs, such as the number + of Python worker processes when backend="multiprocessing" + or the size of the thread-pool when backend="threading". + If -1 all CPUs are used. If 1 is given, no parallel computing code + is used at all, which is useful for debugging. For n_jobs below -1, + (n_cpus + 1 + n_jobs) are used. Thus for n_jobs = -2, all + CPUs but one are used. + None is a marker for 'unset' that will be interpreted as n_jobs=1 + (sequential execution) unless the call is performed under a + parallel_backend context manager that sets another value for + n_jobs. + backend: str, ParallelBackendBase instance or None, default: 'loky' + Specify the parallelization backend implementation. + Supported backends are: + + - "loky" used by default, can induce some + communication and memory overhead when exchanging input and + output data with the worker Python processes. + - "multiprocessing" previous process-based backend based on + `multiprocessing.Pool`. Less robust than `loky`. + - "threading" is a very low-overhead backend but it suffers + from the Python Global Interpreter Lock if the called function + relies a lot on Python objects. "threading" is mostly useful + when the execution bottleneck is a compiled extension that + explicitly releases the GIL (for instance a Cython loop wrapped + in a "with nogil" block or an expensive call to a library such + as NumPy). + - finally, you can register backends by calling + register_parallel_backend. This will allow you to implement + a backend of your liking. + + It is not recommended to hard-code the backend name in a call to + Parallel in a library. Instead it is recommended to set soft hints + (prefer) or hard constraints (require) so as to make it possible + for library users to change the backend from the outside using the + parallel_backend context manager. + prefer: str in {'processes', 'threads'} or None, default: None + Soft hint to choose the default backend if no specific backend + was selected with the parallel_backend context manager. The + default process-based backend is 'loky' and the default + thread-based backend is 'threading'. + require: 'sharedmem' or None, default None + Hard constraint to select the backend. If set to 'sharedmem', + the selected backend will be single-host and thread-based even + if the user asked for a non-thread based backend with + parallel_backend. + verbose: int, optional + The verbosity level: if non zero, progress messages are + printed. Above 50, the output is sent to stdout. + The frequency of the messages increases with the verbosity level. + If it more than 10, all iterations are reported. + timeout: float, optional + Timeout limit for each task to complete. If any task takes longer + a TimeOutError will be raised. Only applied when n_jobs != 1 + pre_dispatch: {'all', integer, or expression, as in '3*n_jobs'} + The number of batches (of tasks) to be pre-dispatched. + Default is '2*n_jobs'. When batch_size="auto" this is reasonable + default and the workers should never starve. + batch_size: int or 'auto', default: 'auto' + The number of atomic tasks to dispatch at once to each + worker. When individual evaluations are very fast, dispatching + calls to workers can be slower than sequential computation because + of the overhead. Batching fast computations together can mitigate + this. + The ``'auto'`` strategy keeps track of the time it takes for a batch + to complete, and dynamically adjusts the batch size to keep the time + on the order of half a second, using a heuristic. The initial batch + size is 1. + ``batch_size="auto"`` with ``backend="threading"`` will dispatch + batches of a single task at a time as the threading backend has + very little overhead and using larger batch size has not proved to + bring any gain in that case. + temp_folder: str, optional + Folder to be used by the pool for memmapping large arrays + for sharing memory with worker processes. If None, this will try in + order: + + - a folder pointed by the JOBLIB_TEMP_FOLDER environment + variable, + - /dev/shm if the folder exists and is writable: this is a + RAM disk filesystem available by default on modern Linux + distributions, + - the default system temporary folder that can be + overridden with TMP, TMPDIR or TEMP environment + variables, typically /tmp under Unix operating systems. + + Only active when backend="loky" or "multiprocessing". + max_nbytes int, str, or None, optional, 1M by default + Threshold on the size of arrays passed to the workers that + triggers automated memory mapping in temp_folder. Can be an int + in Bytes, or a human-readable string, e.g., '1M' for 1 megabyte. + Use None to disable memmapping of large arrays. + Only active when backend="loky" or "multiprocessing". + mmap_mode: {None, 'r+', 'r', 'w+', 'c'} + Memmapping mode for numpy arrays passed to workers. + See 'max_nbytes' parameter documentation for more details. + + Notes + ----- + + This object uses workers to compute in parallel the application of a + function to many different arguments. The main functionality it brings + in addition to using the raw multiprocessing or concurrent.futures API + are (see examples for details): + + * More readable code, in particular since it avoids + constructing list of arguments. + + * Easier debugging: + - informative tracebacks even when the error happens on + the client side + - using 'n_jobs=1' enables to turn off parallel computing + for debugging without changing the codepath + - early capture of pickling errors + + * An optional progress meter. + + * Interruption of multiprocesses jobs with 'Ctrl-C' + + * Flexible pickling control for the communication to and from + the worker processes. + + * Ability to use shared memory efficiently with worker + processes for large numpy-based datastructures. + + Examples + -------- + + A simple example: + + >>> from math import sqrt + >>> from joblib import Parallel, delayed + >>> Parallel(n_jobs=1)(delayed(sqrt)(i**2) for i in range(10)) + [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] + + Reshaping the output when the function has several return + values: + + >>> from math import modf + >>> from joblib import Parallel, delayed + >>> r = Parallel(n_jobs=1)(delayed(modf)(i/2.) for i in range(10)) + >>> res, i = zip(*r) + >>> res + (0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5) + >>> i + (0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0) + + The progress meter: the higher the value of `verbose`, the more + messages: + + >>> from time import sleep + >>> from joblib import Parallel, delayed + >>> r = Parallel(n_jobs=2, verbose=10)(delayed(sleep)(.2) for _ in range(10)) #doctest: +SKIP + [Parallel(n_jobs=2)]: Done 1 tasks | elapsed: 0.6s + [Parallel(n_jobs=2)]: Done 4 tasks | elapsed: 0.8s + [Parallel(n_jobs=2)]: Done 10 out of 10 | elapsed: 1.4s finished + + Traceback example, note how the line of the error is indicated + as well as the values of the parameter passed to the function that + triggered the exception, even though the traceback happens in the + child process: + + >>> from heapq import nlargest + >>> from joblib import Parallel, delayed + >>> Parallel(n_jobs=2)(delayed(nlargest)(2, n) for n in (range(4), 'abcde', 3)) #doctest: +SKIP + #... + --------------------------------------------------------------------------- + Sub-process traceback: + --------------------------------------------------------------------------- + TypeError Mon Nov 12 11:37:46 2012 + PID: 12934 Python 2.7.3: /usr/bin/python + ........................................................................... + /usr/lib/python2.7/heapq.pyc in nlargest(n=2, iterable=3, key=None) + 419 if n >= size: + 420 return sorted(iterable, key=key, reverse=True)[:n] + 421 + 422 # When key is none, use simpler decoration + 423 if key is None: + --> 424 it = izip(iterable, count(0,-1)) # decorate + 425 result = _nlargest(n, it) + 426 return map(itemgetter(0), result) # undecorate + 427 + 428 # General case, slowest method + TypeError: izip argument #1 must support iteration + ___________________________________________________________________________ + + + Using pre_dispatch in a producer/consumer situation, where the + data is generated on the fly. Note how the producer is first + called 3 times before the parallel loop is initiated, and then + called to generate new data on the fly: + + >>> from math import sqrt + >>> from joblib import Parallel, delayed + >>> def producer(): + ... for i in range(6): + ... print('Produced %s' % i) + ... yield i + >>> out = Parallel(n_jobs=2, verbose=100, pre_dispatch='1.5*n_jobs')( + ... delayed(sqrt)(i) for i in producer()) #doctest: +SKIP + Produced 0 + Produced 1 + Produced 2 + [Parallel(n_jobs=2)]: Done 1 jobs | elapsed: 0.0s + Produced 3 + [Parallel(n_jobs=2)]: Done 2 jobs | elapsed: 0.0s + Produced 4 + [Parallel(n_jobs=2)]: Done 3 jobs | elapsed: 0.0s + Produced 5 + [Parallel(n_jobs=2)]: Done 4 jobs | elapsed: 0.0s + [Parallel(n_jobs=2)]: Done 6 out of 6 | elapsed: 0.0s remaining: 0.0s + [Parallel(n_jobs=2)]: Done 6 out of 6 | elapsed: 0.0s finished + + ''' + def __init__(self, n_jobs=None, backend=None, verbose=0, timeout=None, + pre_dispatch='2 * n_jobs', batch_size='auto', + temp_folder=None, max_nbytes='1M', mmap_mode='r', + prefer=None, require=None): + active_backend, context_n_jobs = get_active_backend( + prefer=prefer, require=require, verbose=verbose) + nesting_level = active_backend.nesting_level + if backend is None and n_jobs is None: + # If we are under a parallel_backend context manager, look up + # the default number of jobs and use that instead: + n_jobs = context_n_jobs + if n_jobs is None: + # No specific context override and no specific value request: + # default to 1. + n_jobs = 1 + self.n_jobs = n_jobs + self.verbose = verbose + self.timeout = timeout + self.pre_dispatch = pre_dispatch + self._ready_batches = queue.Queue() + + if isinstance(max_nbytes, _basestring): + max_nbytes = memstr_to_bytes(max_nbytes) + + self._backend_args = dict( + max_nbytes=max_nbytes, + mmap_mode=mmap_mode, + temp_folder=temp_folder, + prefer=prefer, + require=require, + verbose=max(0, self.verbose - 50), + ) + if DEFAULT_MP_CONTEXT is not None: + self._backend_args['context'] = DEFAULT_MP_CONTEXT + elif hasattr(mp, "get_context"): + self._backend_args['context'] = mp.get_context() + + if backend is None: + backend = active_backend + + elif isinstance(backend, ParallelBackendBase): + # Use provided backend as is, with the current nesting_level if it + # is not set yet. + if backend.nesting_level is None: + backend.nesting_level = nesting_level + + elif hasattr(backend, 'Pool') and hasattr(backend, 'Lock'): + # Make it possible to pass a custom multiprocessing context as + # backend to change the start method to forkserver or spawn or + # preload modules on the forkserver helper process. + self._backend_args['context'] = backend + backend = MultiprocessingBackend(nesting_level=nesting_level) + else: + try: + backend_factory = BACKENDS[backend] + except KeyError: + raise ValueError("Invalid backend: %s, expected one of %r" + % (backend, sorted(BACKENDS.keys()))) + backend = backend_factory(nesting_level=nesting_level) + + if (require == 'sharedmem' and + not getattr(backend, 'supports_sharedmem', False)): + raise ValueError("Backend %s does not support shared memory" + % backend) + + if (batch_size == 'auto' or isinstance(batch_size, Integral) and + batch_size > 0): + self.batch_size = batch_size + else: + raise ValueError( + "batch_size must be 'auto' or a positive integer, got: %r" + % batch_size) + + self._backend = backend + self._output = None + self._jobs = list() + self._managed_backend = False + + # This lock is used coordinate the main thread of this process with + # the async callback thread of our the pool. + self._lock = threading.RLock() + + def __enter__(self): + self._managed_backend = True + self._initialize_backend() + return self + + def __exit__(self, exc_type, exc_value, traceback): + self._terminate_backend() + self._managed_backend = False + + def _initialize_backend(self): + """Build a process or thread pool and return the number of workers""" + try: + n_jobs = self._backend.configure(n_jobs=self.n_jobs, parallel=self, + **self._backend_args) + if self.timeout is not None and not self._backend.supports_timeout: + warnings.warn( + 'The backend class {!r} does not support timeout. ' + "You have set 'timeout={}' in Parallel but " + "the 'timeout' parameter will not be used.".format( + self._backend.__class__.__name__, + self.timeout)) + + except FallbackToBackend as e: + # Recursively initialize the backend in case of requested fallback. + self._backend = e.backend + n_jobs = self._initialize_backend() + + return n_jobs + + def _effective_n_jobs(self): + if self._backend: + return self._backend.effective_n_jobs(self.n_jobs) + return 1 + + def _terminate_backend(self): + if self._backend is not None: + self._backend.terminate() + + def _dispatch(self, batch): + """Queue the batch for computing, with or without multiprocessing + + WARNING: this method is not thread-safe: it should be only called + indirectly via dispatch_one_batch. + + """ + # If job.get() catches an exception, it closes the queue: + if self._aborting: + return + + self.n_dispatched_tasks += len(batch) + self.n_dispatched_batches += 1 + + dispatch_timestamp = time.time() + cb = BatchCompletionCallBack(dispatch_timestamp, len(batch), self) + with self._lock: + job_idx = len(self._jobs) + job = self._backend.apply_async(batch, callback=cb) + # A job can complete so quickly than its callback is + # called before we get here, causing self._jobs to + # grow. To ensure correct results ordering, .insert is + # used (rather than .append) in the following line + self._jobs.insert(job_idx, job) + + def dispatch_next(self): + """Dispatch more data for parallel processing + + This method is meant to be called concurrently by the multiprocessing + callback. We rely on the thread-safety of dispatch_one_batch to protect + against concurrent consumption of the unprotected iterator. + + """ + if not self.dispatch_one_batch(self._original_iterator): + self._iterating = False + self._original_iterator = None + + def dispatch_one_batch(self, iterator): + """Prefetch the tasks for the next batch and dispatch them. + + The effective size of the batch is computed here. + If there are no more jobs to dispatch, return False, else return True. + + The iterator consumption and dispatching is protected by the same + lock so calling this function should be thread safe. + + """ + if self.batch_size == 'auto': + batch_size = self._backend.compute_batch_size() + else: + # Fixed batch size strategy + batch_size = self.batch_size + + with self._lock: + # to ensure an even distribution of the workolad between workers, + # we look ahead in the original iterators more than batch_size + # tasks - However, we keep consuming only one batch at each + # dispatch_one_batch call. The extra tasks are stored in a local + # queue, _ready_batches, that is looked-up prior to re-consuming + # tasks from the origal iterator. + try: + tasks = self._ready_batches.get(block=False) + except queue.Empty: + # slice the iterator n_jobs * batchsize items at a time. If the + # slice returns less than that, then the current batchsize puts + # too much weight on a subset of workers, while other may end + # up starving. So in this case, re-scale the batch size + # accordingly to distribute evenly the last items between all + # workers. + n_jobs = self._cached_effective_n_jobs + big_batch_size = batch_size * n_jobs + + islice = list(itertools.islice(iterator, big_batch_size)) + if len(islice) == 0: + return False + elif (iterator is self._original_iterator + and len(islice) < big_batch_size): + # We reached the end of the original iterator (unless + # iterator is the ``pre_dispatch``-long initial slice of + # the original iterator) -- decrease the batch size to + # account for potential variance in the batches running + # time. + final_batch_size = max(1, len(islice) // (10 * n_jobs)) + else: + final_batch_size = max(1, len(islice) // n_jobs) + + # enqueue n_jobs batches in a local queue + for i in range(0, len(islice), final_batch_size): + tasks = BatchedCalls(islice[i:i + final_batch_size], + self._backend.get_nested_backend(), + self._pickle_cache) + self._ready_batches.put(tasks) + + # finally, get one task. + tasks = self._ready_batches.get(block=False) + if len(tasks) == 0: + # No more tasks available in the iterator: tell caller to stop. + return False + else: + self._dispatch(tasks) + return True + + def _print(self, msg, msg_args): + """Display the message on stout or stderr depending on verbosity""" + # XXX: Not using the logger framework: need to + # learn to use logger better. + if not self.verbose: + return + if self.verbose < 50: + writer = sys.stderr.write + else: + writer = sys.stdout.write + msg = msg % msg_args + writer('[%s]: %s\n' % (self, msg)) + + def print_progress(self): + """Display the process of the parallel execution only a fraction + of time, controlled by self.verbose. + """ + if not self.verbose: + return + elapsed_time = time.time() - self._start_time + + # Original job iterator becomes None once it has been fully + # consumed : at this point we know the total number of jobs and we are + # able to display an estimation of the remaining time based on already + # completed jobs. Otherwise, we simply display the number of completed + # tasks. + if self._original_iterator is not None: + if _verbosity_filter(self.n_dispatched_batches, self.verbose): + return + self._print('Done %3i tasks | elapsed: %s', + (self.n_completed_tasks, + short_format_time(elapsed_time), )) + else: + index = self.n_completed_tasks + # We are finished dispatching + total_tasks = self.n_dispatched_tasks + # We always display the first loop + if not index == 0: + # Display depending on the number of remaining items + # A message as soon as we finish dispatching, cursor is 0 + cursor = (total_tasks - index + 1 - + self._pre_dispatch_amount) + frequency = (total_tasks // self.verbose) + 1 + is_last_item = (index + 1 == total_tasks) + if (is_last_item or cursor % frequency): + return + remaining_time = (elapsed_time / index) * \ + (self.n_dispatched_tasks - index * 1.0) + # only display status if remaining time is greater or equal to 0 + self._print('Done %3i out of %3i | elapsed: %s remaining: %s', + (index, + total_tasks, + short_format_time(elapsed_time), + short_format_time(remaining_time), + )) + + def retrieve(self): + self._output = list() + while self._iterating or len(self._jobs) > 0: + if len(self._jobs) == 0: + # Wait for an async callback to dispatch new jobs + time.sleep(0.01) + continue + # We need to be careful: the job list can be filling up as + # we empty it and Python list are not thread-safe by default hence + # the use of the lock + with self._lock: + job = self._jobs.pop(0) + + try: + if getattr(self._backend, 'supports_timeout', False): + self._output.extend(job.get(timeout=self.timeout)) + else: + self._output.extend(job.get()) + + except BaseException as exception: + # Note: we catch any BaseException instead of just Exception + # instances to also include KeyboardInterrupt. + + # Stop dispatching any new job in the async callback thread + self._aborting = True + + # If the backend allows it, cancel or kill remaining running + # tasks without waiting for the results as we will raise + # the exception we got back to the caller instead of returning + # any result. + backend = self._backend + if (backend is not None and + hasattr(backend, 'abort_everything')): + # If the backend is managed externally we need to make sure + # to leave it in a working state to allow for future jobs + # scheduling. + ensure_ready = self._managed_backend + backend.abort_everything(ensure_ready=ensure_ready) + + if isinstance(exception, TransportableException): + # Capture exception to add information on the local + # stack in addition to the distant stack + this_report = format_outer_frames(context=10, + stack_start=1) + raise exception.unwrap(this_report) + else: + raise + + def __call__(self, iterable): + if self._jobs: + raise ValueError('This Parallel instance is already running') + # A flag used to abort the dispatching of jobs in case an + # exception is found + self._aborting = False + + if not self._managed_backend: + n_jobs = self._initialize_backend() + else: + n_jobs = self._effective_n_jobs() + + # self._effective_n_jobs should be called in the Parallel.__call__ + # thread only -- store its value in an attribute for further queries. + self._cached_effective_n_jobs = n_jobs + + backend_name = self._backend.__class__.__name__ + if n_jobs == 0: + raise RuntimeError("%s has no active worker." % backend_name) + + self._print("Using backend %s with %d concurrent workers.", + (backend_name, n_jobs)) + if hasattr(self._backend, 'start_call'): + self._backend.start_call() + iterator = iter(iterable) + pre_dispatch = self.pre_dispatch + + if pre_dispatch == 'all' or n_jobs == 1: + # prevent further dispatch via multiprocessing callback thread + self._original_iterator = None + self._pre_dispatch_amount = 0 + else: + self._original_iterator = iterator + if hasattr(pre_dispatch, 'endswith'): + pre_dispatch = eval(pre_dispatch) + self._pre_dispatch_amount = pre_dispatch = int(pre_dispatch) + + # The main thread will consume the first pre_dispatch items and + # the remaining items will later be lazily dispatched by async + # callbacks upon task completions. + + # TODO: this iterator should be batch_size * n_jobs + iterator = itertools.islice(iterator, self._pre_dispatch_amount) + + self._start_time = time.time() + self.n_dispatched_batches = 0 + self.n_dispatched_tasks = 0 + self.n_completed_tasks = 0 + # Use a caching dict for callables that are pickled with cloudpickle to + # improve performances. This cache is used only in the case of + # functions that are defined in the __main__ module, functions that are + # defined locally (inside another function) and lambda expressions. + self._pickle_cache = dict() + try: + # Only set self._iterating to True if at least a batch + # was dispatched. In particular this covers the edge + # case of Parallel used with an exhausted iterator. If + # self._original_iterator is None, then this means either + # that pre_dispatch == "all", n_jobs == 1 or that the first batch + # was very quick and its callback already dispatched all the + # remaining jobs. + self._iterating = False + if self.dispatch_one_batch(iterator): + self._iterating = self._original_iterator is not None + + while self.dispatch_one_batch(iterator): + pass + + if pre_dispatch == "all" or n_jobs == 1: + # The iterable was consumed all at once by the above for loop. + # No need to wait for async callbacks to trigger to + # consumption. + self._iterating = False + + with self._backend.retrieval_context(): + self.retrieve() + # Make sure that we get a last message telling us we are done + elapsed_time = time.time() - self._start_time + self._print('Done %3i out of %3i | elapsed: %s finished', + (len(self._output), len(self._output), + short_format_time(elapsed_time))) + finally: + if hasattr(self._backend, 'stop_call'): + self._backend.stop_call() + if not self._managed_backend: + self._terminate_backend() + self._jobs = list() + self._pickle_cache = None + output = self._output + self._output = None + return output + + def __repr__(self): + return '%s(n_jobs=%s)' % (self.__class__.__name__, self.n_jobs) diff --git a/my_env/Lib/site-packages/joblib/pool.py b/my_env/Lib/site-packages/joblib/pool.py new file mode 100644 index 000000000..606f529b5 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/pool.py @@ -0,0 +1,329 @@ +"""Custom implementation of multiprocessing.Pool with custom pickler. + +This module provides efficient ways of working with data stored in +shared memory with numpy.memmap arrays without inducing any memory +copy between the parent and child processes. + +This module should not be imported if multiprocessing is not +available as it implements subclasses of multiprocessing Pool +that uses a custom alternative to SimpleQueue. + +""" +# Author: Olivier Grisel +# Copyright: 2012, Olivier Grisel +# License: BSD 3 clause + +import sys +import warnings +from time import sleep + +try: + WindowsError +except NameError: + WindowsError = type(None) + +# Customizable pure Python pickler in Python 2 +# customizable C-optimized pickler under Python 3.3+ +from pickle import Pickler + +from pickle import HIGHEST_PROTOCOL +from io import BytesIO + +from .disk import delete_folder +from ._memmapping_reducer import get_memmapping_reducers +from ._multiprocessing_helpers import mp, assert_spawning + +# We need the class definition to derive from it, not the multiprocessing.Pool +# factory function +from multiprocessing.pool import Pool + +try: + import numpy as np +except ImportError: + np = None + +if sys.version_info[:2] > (2, 7): + import copyreg + + +############################################################################### +# Enable custom pickling in Pool queues + +class CustomizablePickler(Pickler): + """Pickler that accepts custom reducers. + + HIGHEST_PROTOCOL is selected by default as this pickler is used + to pickle ephemeral datastructures for interprocess communication + hence no backward compatibility is required. + + `reducers` is expected to be a dictionary with key/values + being `(type, callable)` pairs where `callable` is a function that + give an instance of `type` will return a tuple `(constructor, + tuple_of_objects)` to rebuild an instance out of the pickled + `tuple_of_objects` as would return a `__reduce__` method. See the + standard library documentation on pickling for more details. + + """ + + # We override the pure Python pickler as its the only way to be able to + # customize the dispatch table without side effects in Python 2.7 + # to 3.2. For Python 3.3+ leverage the new dispatch_table + # feature from https://bugs.python.org/issue14166 that makes it possible + # to use the C implementation of the Pickler which is faster. + + def __init__(self, writer, reducers=None, protocol=HIGHEST_PROTOCOL): + Pickler.__init__(self, writer, protocol=protocol) + if reducers is None: + reducers = {} + if hasattr(Pickler, 'dispatch'): + # Make the dispatch registry an instance level attribute instead of + # a reference to the class dictionary under Python 2 + self.dispatch = Pickler.dispatch.copy() + else: + # Under Python 3 initialize the dispatch table with a copy of the + # default registry + self.dispatch_table = copyreg.dispatch_table.copy() + for type, reduce_func in reducers.items(): + self.register(type, reduce_func) + + def register(self, type, reduce_func): + """Attach a reducer function to a given type in the dispatch table.""" + if hasattr(Pickler, 'dispatch'): + # Python 2 pickler dispatching is not explicitly customizable. + # Let us use a closure to workaround this limitation. + def dispatcher(self, obj): + reduced = reduce_func(obj) + self.save_reduce(obj=obj, *reduced) + self.dispatch[type] = dispatcher + else: + self.dispatch_table[type] = reduce_func + + +class CustomizablePicklingQueue(object): + """Locked Pipe implementation that uses a customizable pickler. + + This class is an alternative to the multiprocessing implementation + of SimpleQueue in order to make it possible to pass custom + pickling reducers, for instance to avoid memory copy when passing + memory mapped datastructures. + + `reducers` is expected to be a dict with key / values being + `(type, callable)` pairs where `callable` is a function that, given an + instance of `type`, will return a tuple `(constructor, tuple_of_objects)` + to rebuild an instance out of the pickled `tuple_of_objects` as would + return a `__reduce__` method. + + See the standard library documentation on pickling for more details. + """ + + def __init__(self, context, reducers=None): + self._reducers = reducers + self._reader, self._writer = context.Pipe(duplex=False) + self._rlock = context.Lock() + if sys.platform == 'win32': + self._wlock = None + else: + self._wlock = context.Lock() + self._make_methods() + + def __getstate__(self): + assert_spawning(self) + return (self._reader, self._writer, self._rlock, self._wlock, + self._reducers) + + def __setstate__(self, state): + (self._reader, self._writer, self._rlock, self._wlock, + self._reducers) = state + self._make_methods() + + def empty(self): + return not self._reader.poll() + + def _make_methods(self): + self._recv = recv = self._reader.recv + racquire, rrelease = self._rlock.acquire, self._rlock.release + + def get(): + racquire() + try: + return recv() + finally: + rrelease() + + self.get = get + + if self._reducers: + def send(obj): + buffer = BytesIO() + CustomizablePickler(buffer, self._reducers).dump(obj) + self._writer.send_bytes(buffer.getvalue()) + self._send = send + else: + self._send = send = self._writer.send + if self._wlock is None: + # writes to a message oriented win32 pipe are atomic + self.put = send + else: + wlock_acquire, wlock_release = ( + self._wlock.acquire, self._wlock.release) + + def put(obj): + wlock_acquire() + try: + return send(obj) + finally: + wlock_release() + + self.put = put + + +class PicklingPool(Pool): + """Pool implementation with customizable pickling reducers. + + This is useful to control how data is shipped between processes + and makes it possible to use shared memory without useless + copies induces by the default pickling methods of the original + objects passed as arguments to dispatch. + + `forward_reducers` and `backward_reducers` are expected to be + dictionaries with key/values being `(type, callable)` pairs where + `callable` is a function that, given an instance of `type`, will return a + tuple `(constructor, tuple_of_objects)` to rebuild an instance out of the + pickled `tuple_of_objects` as would return a `__reduce__` method. + See the standard library documentation about pickling for more details. + + """ + + def __init__(self, processes=None, forward_reducers=None, + backward_reducers=None, **kwargs): + if forward_reducers is None: + forward_reducers = dict() + if backward_reducers is None: + backward_reducers = dict() + self._forward_reducers = forward_reducers + self._backward_reducers = backward_reducers + poolargs = dict(processes=processes) + poolargs.update(kwargs) + super(PicklingPool, self).__init__(**poolargs) + + def _setup_queues(self): + context = getattr(self, '_ctx', mp) + self._inqueue = CustomizablePicklingQueue(context, + self._forward_reducers) + self._outqueue = CustomizablePicklingQueue(context, + self._backward_reducers) + self._quick_put = self._inqueue._send + self._quick_get = self._outqueue._recv + + +class MemmappingPool(PicklingPool): + """Process pool that shares large arrays to avoid memory copy. + + This drop-in replacement for `multiprocessing.pool.Pool` makes + it possible to work efficiently with shared memory in a numpy + context. + + Existing instances of numpy.memmap are preserved: the child + suprocesses will have access to the same shared memory in the + original mode except for the 'w+' mode that is automatically + transformed as 'r+' to avoid zeroing the original data upon + instantiation. + + Furthermore large arrays from the parent process are automatically + dumped to a temporary folder on the filesystem such as child + processes to access their content via memmapping (file system + backed shared memory). + + Note: it is important to call the terminate method to collect + the temporary folder used by the pool. + + Parameters + ---------- + processes: int, optional + Number of worker processes running concurrently in the pool. + initializer: callable, optional + Callable executed on worker process creation. + initargs: tuple, optional + Arguments passed to the initializer callable. + temp_folder: str, optional + Folder to be used by the pool for memmapping large arrays + for sharing memory with worker processes. If None, this will try in + order: + - a folder pointed by the JOBLIB_TEMP_FOLDER environment variable, + - /dev/shm if the folder exists and is writable: this is a RAMdisk + filesystem available by default on modern Linux distributions, + - the default system temporary folder that can be overridden + with TMP, TMPDIR or TEMP environment variables, typically /tmp + under Unix operating systems. + max_nbytes int or None, optional, 1e6 by default + Threshold on the size of arrays passed to the workers that + triggers automated memory mapping in temp_folder. + Use None to disable memmapping of large arrays. + mmap_mode: {'r+', 'r', 'w+', 'c'} + Memmapping mode for numpy arrays passed to workers. + See 'max_nbytes' parameter documentation for more details. + forward_reducers: dictionary, optional + Reducers used to pickle objects passed from master to worker + processes: see below. + backward_reducers: dictionary, optional + Reducers used to pickle return values from workers back to the + master process. + verbose: int, optional + Make it possible to monitor how the communication of numpy arrays + with the subprocess is handled (pickling or memmapping) + prewarm: bool or str, optional, "auto" by default. + If True, force a read on newly memmapped array to make sure that OS + pre-cache it in memory. This can be useful to avoid concurrent disk + access when the same data array is passed to different worker + processes. If "auto" (by default), prewarm is set to True, unless the + Linux shared memory partition /dev/shm is available and used as temp + folder. + + `forward_reducers` and `backward_reducers` are expected to be + dictionaries with key/values being `(type, callable)` pairs where + `callable` is a function that give an instance of `type` will return + a tuple `(constructor, tuple_of_objects)` to rebuild an instance out + of the pickled `tuple_of_objects` as would return a `__reduce__` + method. See the standard library documentation on pickling for more + details. + + """ + + def __init__(self, processes=None, temp_folder=None, max_nbytes=1e6, + mmap_mode='r', forward_reducers=None, backward_reducers=None, + verbose=0, context_id=None, prewarm=False, **kwargs): + + if context_id is not None: + warnings.warn('context_id is deprecated and ignored in joblib' + ' 0.9.4 and will be removed in 0.11', + DeprecationWarning) + + forward_reducers, backward_reducers, self._temp_folder = \ + get_memmapping_reducers( + id(self), temp_folder=temp_folder, max_nbytes=max_nbytes, + mmap_mode=mmap_mode, forward_reducers=forward_reducers, + backward_reducers=backward_reducers, verbose=verbose, + prewarm=prewarm) + + poolargs = dict( + processes=processes, + forward_reducers=forward_reducers, + backward_reducers=backward_reducers) + poolargs.update(kwargs) + super(MemmappingPool, self).__init__(**poolargs) + + def terminate(self): + n_retries = 10 + for i in range(n_retries): + try: + super(MemmappingPool, self).terminate() + break + except OSError as e: + if isinstance(e, WindowsError): + # Workaround occasional "[Error 5] Access is denied" issue + # when trying to terminate a process under windows. + sleep(0.1) + if i + 1 == n_retries: + warnings.warn("Failed to terminate worker processes in" + " multiprocessing pool: %r" % e) + delete_folder(self._temp_folder) diff --git a/my_env/Lib/site-packages/joblib/test/__init__.py b/my_env/Lib/site-packages/joblib/test/__init__.py new file mode 100644 index 000000000..401de7897 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/__init__.py @@ -0,0 +1,2 @@ +from joblib.test import test_memory +from joblib.test import test_hashing diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..adc185631 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/common.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/common.cpython-37.pyc new file mode 100644 index 000000000..71ab56009 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/common.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_backports.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_backports.cpython-37.pyc new file mode 100644 index 000000000..30835e7be Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_backports.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_dask.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_dask.cpython-37.pyc new file mode 100644 index 000000000..92ea39044 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_dask.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_disk.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_disk.cpython-37.pyc new file mode 100644 index 000000000..9407f5f1d Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_disk.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_format_stack.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_format_stack.cpython-37.pyc new file mode 100644 index 000000000..7a91812c4 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_format_stack.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_func_inspect.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_func_inspect.cpython-37.pyc new file mode 100644 index 000000000..4b9b05718 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_func_inspect.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_func_inspect_special_encoding.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_func_inspect_special_encoding.cpython-37.pyc new file mode 100644 index 000000000..512f68687 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_func_inspect_special_encoding.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_hashing.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_hashing.cpython-37.pyc new file mode 100644 index 000000000..235ea5e5c Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_hashing.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_init.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_init.cpython-37.pyc new file mode 100644 index 000000000..c99fdad75 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_init.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_logger.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_logger.cpython-37.pyc new file mode 100644 index 000000000..1b81f7f35 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_logger.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_memmapping.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_memmapping.cpython-37.pyc new file mode 100644 index 000000000..2ce979215 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_memmapping.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_memory.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_memory.cpython-37.pyc new file mode 100644 index 000000000..aa35c63d5 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_memory.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_module.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_module.cpython-37.pyc new file mode 100644 index 000000000..83d7ef9d7 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_module.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_my_exceptions.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_my_exceptions.cpython-37.pyc new file mode 100644 index 000000000..4bb5594c8 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_my_exceptions.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_numpy_pickle.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_numpy_pickle.cpython-37.pyc new file mode 100644 index 000000000..8ca9001a3 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_numpy_pickle.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_numpy_pickle_compat.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_numpy_pickle_compat.cpython-37.pyc new file mode 100644 index 000000000..56396dc29 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_numpy_pickle_compat.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_numpy_pickle_utils.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_numpy_pickle_utils.cpython-37.pyc new file mode 100644 index 000000000..73f91161f Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_numpy_pickle_utils.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_parallel.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_parallel.cpython-37.pyc new file mode 100644 index 000000000..7a0f7027c Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_parallel.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_store_backends.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_store_backends.cpython-37.pyc new file mode 100644 index 000000000..a180fa6a6 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_store_backends.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/__pycache__/test_testing.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/__pycache__/test_testing.cpython-37.pyc new file mode 100644 index 000000000..9806e8c45 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/__pycache__/test_testing.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/common.py b/my_env/Lib/site-packages/joblib/test/common.py new file mode 100644 index 000000000..8845bf7b7 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/common.py @@ -0,0 +1,116 @@ +""" +Small utilities for testing. +""" +import threading +import signal +import time +import os +import sys +import gc + +from joblib._compat import PY3_OR_LATER +from joblib._multiprocessing_helpers import mp +from joblib.testing import SkipTest, skipif + +try: + import lz4 +except ImportError: + lz4 = None + +# A decorator to run tests only when numpy is available +try: + import numpy as np + + def with_numpy(func): + """A decorator to skip tests requiring numpy.""" + return func + +except ImportError: + def with_numpy(func): + """A decorator to skip tests requiring numpy.""" + def my_func(): + raise SkipTest('Test requires numpy') + return my_func + np = None + +# TODO: Turn this back on after refactoring yield based tests in test_hashing +# with_numpy = skipif(not np, reason='Test requires numpy.') + +# we use memory_profiler library for memory consumption checks +try: + from memory_profiler import memory_usage + + def with_memory_profiler(func): + """A decorator to skip tests requiring memory_profiler.""" + return func + + def memory_used(func, *args, **kwargs): + """Compute memory usage when executing func.""" + gc.collect() + mem_use = memory_usage((func, args, kwargs), interval=.001) + return max(mem_use) - min(mem_use) + +except ImportError: + def with_memory_profiler(func): + """A decorator to skip tests requiring memory_profiler.""" + def dummy_func(): + raise SkipTest('Test requires memory_profiler.') + return dummy_func + + memory_usage = memory_used = None + +# A utility to kill the test runner in case a multiprocessing assumption +# triggers an infinite wait on a pipe by the master process for one of its +# failed workers + +_KILLER_THREADS = dict() + + +def setup_autokill(module_name, timeout=30): + """Timeout based suiciding thread to kill the test runner process + + If some subprocess dies in an unexpected way we don't want the + parent process to block indefinitely. + """ + if "NO_AUTOKILL" in os.environ or "--pdb" in sys.argv: + # Do not install the autokiller + return + + # Renew any previous contract under that name by first cancelling the + # previous version (that should normally not happen in practice) + teardown_autokill(module_name) + + def autokill(): + pid = os.getpid() + print("Timeout exceeded: terminating stalled process: %d" % pid) + os.kill(pid, signal.SIGTERM) + + # If were are still there ask the OS to kill ourself for real + time.sleep(0.5) + print("Timeout exceeded: killing stalled process: %d" % pid) + os.kill(pid, signal.SIGKILL) + + _KILLER_THREADS[module_name] = t = threading.Timer(timeout, autokill) + t.start() + + +def teardown_autokill(module_name): + """Cancel a previously started killer thread""" + killer = _KILLER_THREADS.get(module_name) + if killer is not None: + killer.cancel() + + +with_multiprocessing = skipif( + mp is None, reason='Needs multiprocessing to run.') + + +with_dev_shm = skipif( + not os.path.exists('/dev/shm'), + reason='This test requires a large /dev/shm shared memory fs.') + +with_lz4 = skipif( + lz4 is None or not PY3_OR_LATER, reason='Needs lz4 compression to run') + +without_lz4 = skipif( + lz4 is not None, reason='Needs lz4 not being installed to run') diff --git a/my_env/Lib/site-packages/joblib/test/data/__init__.py b/my_env/Lib/site-packages/joblib/test/data/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/my_env/Lib/site-packages/joblib/test/data/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/data/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..9186b344f Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/data/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/data/__pycache__/create_numpy_pickle.cpython-37.pyc b/my_env/Lib/site-packages/joblib/test/data/__pycache__/create_numpy_pickle.cpython-37.pyc new file mode 100644 index 000000000..4533ef332 Binary files /dev/null and b/my_env/Lib/site-packages/joblib/test/data/__pycache__/create_numpy_pickle.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/joblib/test/data/create_numpy_pickle.py b/my_env/Lib/site-packages/joblib/test/data/create_numpy_pickle.py new file mode 100644 index 000000000..aada67630 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/data/create_numpy_pickle.py @@ -0,0 +1,97 @@ +""" +This script is used to generate test data for joblib/test/test_numpy_pickle.py +""" + +import sys +import re + +# pytest needs to be able to import this module even when numpy is +# not installed +try: + import numpy as np +except ImportError: + np = None + +import joblib + + +def get_joblib_version(joblib_version=joblib.__version__): + """Normalize joblib version by removing suffix. + + >>> get_joblib_version('0.8.4') + '0.8.4' + >>> get_joblib_version('0.8.4b1') + '0.8.4' + >>> get_joblib_version('0.9.dev0') + '0.9' + """ + matches = [re.match(r'(\d+).*', each) + for each in joblib_version.split('.')] + return '.'.join([m.group(1) for m in matches if m is not None]) + + +def write_test_pickle(to_pickle, args): + kwargs = {} + compress = args.compress + method = args.method + joblib_version = get_joblib_version() + py_version = '{0[0]}{0[1]}'.format(sys.version_info) + numpy_version = ''.join(np.__version__.split('.')[:2]) + + # The game here is to generate the right filename according to the options. + body = '_compressed' if (compress and method == 'zlib') else '' + if compress: + if method == 'zlib': + kwargs['compress'] = True + extension = '.gz' + else: + kwargs['compress'] = (method, 3) + extension = '.pkl.{}'.format(method) + if args.cache_size: + kwargs['cache_size'] = 0 + body += '_cache_size' + else: + extension = '.pkl' + + pickle_filename = 'joblib_{}{}_pickle_py{}_np{}{}'.format( + joblib_version, body, py_version, numpy_version, extension) + + try: + joblib.dump(to_pickle, pickle_filename, **kwargs) + except Exception as e: + # With old python version (=< 3.3.), we can arrive there when + # dumping compressed pickle with LzmaFile. + print("Error: cannot generate file '{}' with arguments '{}'. " + "Error was: {}".format(pickle_filename, kwargs, e)) + else: + print("File '{}' generated successfuly.".format(pickle_filename)) + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser(description="Joblib pickle data " + "generator.") + parser.add_argument('--cache_size', action="store_true", + help="Force creation of companion numpy " + "files for pickled arrays.") + parser.add_argument('--compress', action="store_true", + help="Generate compress pickles.") + parser.add_argument('--method', type=str, default='zlib', + choices=['zlib', 'gzip', 'bz2', 'xz', 'lzma', 'lz4'], + help="Set compression method.") + # We need to be specific about dtypes in particular endianness + # because the pickles can be generated on one architecture and + # the tests run on another one. See + # https://github.com/joblib/joblib/issues/279. + to_pickle = [np.arange(5, dtype=np.dtype('= '1.28.0', + reason="distributed bug - https://github.com/dask/distributed/pull/2841") +def test_wait_for_workers(cluster_strategy): + cluster = LocalCluster(n_workers=0, processes=False, threads_per_worker=2) + client = Client(cluster) + if cluster_strategy == "adaptive": + cluster.adapt(minimum=0, maximum=2) + elif cluster_strategy == "late_scaling": + # Tell the cluster to start workers but this is a non-blocking call + # and new workers might take time to connect. In this case the Parallel + # call should wait for at least one worker to come up before starting + # to schedule work. + cluster.scale(2) + try: + with parallel_backend('dask'): + # The following should wait a bit for at least one worker to + # become available. + Parallel()(delayed(inc)(i) for i in range(10)) + finally: + client.close() + cluster.close() + + +def test_wait_for_workers_timeout(): + # Start a cluster with 0 worker: + cluster = LocalCluster(n_workers=0, processes=False, threads_per_worker=2) + client = Client(cluster) + try: + with parallel_backend('dask', wait_for_workers_timeout=0.1): + # Short timeout: DaskDistributedBackend + msg = "DaskDistributedBackend has no worker after 0.1 seconds." + with pytest.raises(TimeoutError, match=msg): + Parallel()(delayed(inc)(i) for i in range(10)) + + with parallel_backend('dask', wait_for_workers_timeout=0): + # No timeout: fallback to generic joblib failure: + msg = "DaskDistributedBackend has no active worker" + with pytest.raises(RuntimeError, match=msg): + Parallel()(delayed(inc)(i) for i in range(10)) + finally: + client.close() + cluster.close() diff --git a/my_env/Lib/site-packages/joblib/test/test_disk.py b/my_env/Lib/site-packages/joblib/test/test_disk.py new file mode 100644 index 000000000..b825a8b3a --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_disk.py @@ -0,0 +1,71 @@ +""" +Unit tests for the disk utilities. +""" + +# Authors: Gael Varoquaux +# Lars Buitinck +# Copyright (c) 2010 Gael Varoquaux +# License: BSD Style, 3 clauses. + +from __future__ import with_statement +import array +import os + +from joblib.disk import disk_used, memstr_to_bytes, mkdirp, rm_subdirs +from joblib.testing import parametrize, raises + +############################################################################### + + +def test_disk_used(tmpdir): + cachedir = tmpdir.strpath + # Not write a file that is 1M big in this directory, and check the + # size. The reason we use such a big file is that it makes us robust + # to errors due to block allocation. + a = array.array('i') + sizeof_i = a.itemsize + target_size = 1024 + n = int(target_size * 1024 / sizeof_i) + a = array.array('i', n * (1,)) + with open(os.path.join(cachedir, 'test'), 'wb') as output: + a.tofile(output) + assert disk_used(cachedir) >= target_size + assert disk_used(cachedir) < target_size + 12 + + +@parametrize('text,value', + [('80G', 80 * 1024 ** 3), + ('1.4M', int(1.4 * 1024 ** 2)), + ('120M', 120 * 1024 ** 2), + ('53K', 53 * 1024)]) +def test_memstr_to_bytes(text, value): + assert memstr_to_bytes(text) == value + + +@parametrize('text,exception,regex', + [('fooG', ValueError, r'Invalid literal for size.*fooG.*'), + ('1.4N', ValueError, r'Invalid literal for size.*1.4N.*')]) +def test_memstr_to_bytes_exception(text, exception, regex): + with raises(exception) as excinfo: + memstr_to_bytes(text) + assert excinfo.match(regex) + + +def test_mkdirp(tmpdir): + mkdirp(os.path.join(tmpdir.strpath, 'ham')) + mkdirp(os.path.join(tmpdir.strpath, 'ham')) + mkdirp(os.path.join(tmpdir.strpath, 'spam', 'spam')) + + # Not all OSErrors are ignored + with raises(OSError): + mkdirp('') + + +def test_rm_subdirs(tmpdir): + sub_path = os.path.join(tmpdir.strpath, "am", "stram") + full_path = os.path.join(sub_path, "gram") + mkdirp(os.path.join(full_path)) + + rm_subdirs(sub_path) + assert os.path.exists(sub_path) + assert not os.path.exists(full_path) diff --git a/my_env/Lib/site-packages/joblib/test/test_format_stack.py b/my_env/Lib/site-packages/joblib/test/test_format_stack.py new file mode 100644 index 000000000..09fa26a7f --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_format_stack.py @@ -0,0 +1,129 @@ +""" +Unit tests for the stack formatting utilities +""" + +# Author: Gael Varoquaux +# Copyright (c) 2010 Gael Varoquaux +# License: BSD Style, 3 clauses. + +import imp +import os +import re +import sys +import pytest + +from joblib.format_stack import safe_repr, _fixed_getframes, format_records +from joblib.format_stack import format_exc +from joblib.test.common import with_numpy, np + +############################################################################### + + +class Vicious(object): + def __repr__(self): + raise ValueError + + +def test_safe_repr(): + safe_repr(Vicious()) + + +def _change_file_extensions_to_pyc(record): + _1, filename, _2, _3, _4, _5 = record + if filename.endswith('.py'): + filename += 'c' + return _1, filename, _2, _3, _4, _5 + + +def _raise_exception(a, b): + """Function that raises with a non trivial call stack + """ + def helper(a, b): + raise ValueError('Nope, this can not work') + + helper(a, b) + + +def test_format_records(): + try: + _raise_exception('a', 42) + except ValueError: + etb = sys.exc_info()[2] + records = _fixed_getframes(etb) + + # Modify filenames in traceback records from .py to .pyc + pyc_records = [_change_file_extensions_to_pyc(record) + for record in records] + + formatted_records = format_records(pyc_records) + + # Check that the .py file and not the .pyc one is listed in + # the traceback + for fmt_rec in formatted_records: + assert 'test_format_stack.py in' in fmt_rec + + # Check exception stack + arrow_regex = r'^-+>\s+\d+\s+' + assert re.search(arrow_regex + r"_raise_exception\('a', 42\)", + formatted_records[0], + re.MULTILINE) + assert re.search(arrow_regex + r'helper\(a, b\)', + formatted_records[1], + re.MULTILINE) + assert "a = 'a'" in formatted_records[1] + assert 'b = 42' in formatted_records[1] + assert re.search(arrow_regex + + r"raise ValueError\('Nope, this can not work'\)", + formatted_records[2], + re.MULTILINE) + + +def test_format_records_file_with_less_lines_than_context(tmpdir): + # See https://github.com/joblib/joblib/issues/420 + filename = os.path.join(tmpdir.strpath, 'small_file.py') + code_lines = ['def func():', ' 1/0'] + code = '\n'.join(code_lines) + with open(filename, 'w') as f: + f.write(code) + + small_file = imp.load_source('small_file', filename) + if not hasattr(small_file, 'func'): + pytest.skip("PyPy bug?") + try: + small_file.func() + except ZeroDivisionError: + etb = sys.exc_info()[2] + + records = _fixed_getframes(etb, context=10) + # Check that if context is bigger than the number of lines in + # the file you do not get padding + frame, tb_filename, line, func_name, context, _ = records[-1] + assert [l.rstrip() for l in context] == code_lines + + formatted_records = format_records(records) + # 2 lines for header in the traceback: lines of ...... + + # filename with function + len_header = 2 + nb_lines_formatted_records = len(formatted_records[1].splitlines()) + assert (nb_lines_formatted_records == len_header + len(code_lines)) + # Check exception stack + arrow_regex = r'^-+>\s+\d+\s+' + assert re.search(arrow_regex + r'1/0', + formatted_records[1], + re.MULTILINE) + + +@with_numpy +def test_format_exc_with_compiled_code(): + # Trying to tokenize compiled C code raise SyntaxError. + # See https://github.com/joblib/joblib/issues/101 for more details. + try: + np.random.uniform('invalid_value') + except Exception: + exc_type, exc_value, exc_traceback = sys.exc_info() + formatted_exc = format_exc(exc_type, exc_value, + exc_traceback, context=10) + # The name of the extension can be something like + # mtrand.cpython-33m.so + pattern = r'mtrand[a-z0-9._-]*\.(so|pyd)' + assert re.search(pattern, formatted_exc) diff --git a/my_env/Lib/site-packages/joblib/test/test_func_inspect.py b/my_env/Lib/site-packages/joblib/test/test_func_inspect.py new file mode 100644 index 000000000..86e297c1a --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_func_inspect.py @@ -0,0 +1,300 @@ +""" +Test the func_inspect module. +""" + +# Author: Gael Varoquaux +# Copyright (c) 2009 Gael Varoquaux +# License: BSD Style, 3 clauses. + +import functools + +from joblib.func_inspect import filter_args, get_func_name, get_func_code +from joblib.func_inspect import _clean_win_chars, format_signature +from joblib.memory import Memory +from joblib.test.common import with_numpy +from joblib.testing import fixture, parametrize, raises +from joblib._compat import PY3_OR_LATER + + +############################################################################### +# Module-level functions and fixture, for tests +def f(x, y=0): + pass + + +def g(x): + pass + + +def h(x, y=0, *args, **kwargs): + pass + + +def i(x=1): + pass + + +def j(x, y, **kwargs): + pass + + +def k(*args, **kwargs): + pass + + +@fixture(scope='module') +def cached_func(tmpdir_factory): + # Create a Memory object to test decorated functions. + # We should be careful not to call the decorated functions, so that + # cache directories are not created in the temp dir. + cachedir = tmpdir_factory.mktemp("joblib_test_func_inspect") + mem = Memory(cachedir.strpath) + + @mem.cache + def cached_func_inner(x): + return x + + return cached_func_inner + + +class Klass(object): + + def f(self, x): + return x + + +############################################################################### +# Tests + + +@parametrize('func,args,filtered_args', + [(f, [[], (1, )], {'x': 1, 'y': 0}), + (f, [['x'], (1, )], {'y': 0}), + (f, [['y'], (0, )], {'x': 0}), + (f, [['y'], (0, ), {'y': 1}], {'x': 0}), + (f, [['x', 'y'], (0, )], {}), + (f, [[], (0,), {'y': 1}], {'x': 0, 'y': 1}), + (f, [['y'], (), {'x': 2, 'y': 1}], {'x': 2}), + (g, [[], (), {'x': 1}], {'x': 1}), + (i, [[], (2, )], {'x': 2})]) +def test_filter_args(func, args, filtered_args): + assert filter_args(func, *args) == filtered_args + + +def test_filter_args_method(): + obj = Klass() + assert filter_args(obj.f, [], (1, )) == {'x': 1, 'self': obj} + + +@parametrize('func,args,filtered_args', + [(h, [[], (1, )], + {'x': 1, 'y': 0, '*': [], '**': {}}), + (h, [[], (1, 2, 3, 4)], + {'x': 1, 'y': 2, '*': [3, 4], '**': {}}), + (h, [[], (1, 25), {'ee': 2}], + {'x': 1, 'y': 25, '*': [], '**': {'ee': 2}}), + (h, [['*'], (1, 2, 25), {'ee': 2}], + {'x': 1, 'y': 2, '**': {'ee': 2}})]) +def test_filter_varargs(func, args, filtered_args): + assert filter_args(func, *args) == filtered_args + + +test_filter_kwargs_extra_params = [] +if PY3_OR_LATER: + m1 = m2 = None + # The following statements raise SyntaxError in python 2 + # because kwargonly is not supported + exec("def m1(x, *, y): pass") + exec("def m2(x, *, y, z=3): pass") + test_filter_kwargs_extra_params.extend([ + (m1, [[], (1,), {'y': 2}], {'x': 1, 'y': 2}), + (m2, [[], (1,), {'y': 2}], {'x': 1, 'y': 2, 'z': 3}) + ]) + + +@parametrize('func,args,filtered_args', + [(k, [[], (1, 2), {'ee': 2}], + {'*': [1, 2], '**': {'ee': 2}}), + (k, [[], (3, 4)], + {'*': [3, 4], '**': {}})] + + test_filter_kwargs_extra_params) +def test_filter_kwargs(func, args, filtered_args): + assert filter_args(func, *args) == filtered_args + + +def test_filter_args_2(): + assert (filter_args(j, [], (1, 2), {'ee': 2}) == + {'x': 1, 'y': 2, '**': {'ee': 2}}) + + ff = functools.partial(f, 1) + # filter_args has to special-case partial + assert filter_args(ff, [], (1, )) == {'*': [1], '**': {}} + assert filter_args(ff, ['y'], (1, )) == {'*': [1], '**': {}} + + +@parametrize('func,funcname', [(f, 'f'), (g, 'g'), + (cached_func, 'cached_func')]) +def test_func_name(func, funcname): + # Check that we are not confused by decoration + # here testcase 'cached_func' is the function itself + assert get_func_name(func)[1] == funcname + + +def test_func_name_on_inner_func(cached_func): + # Check that we are not confused by decoration + # here testcase 'cached_func' is the 'cached_func_inner' function + # returned by 'cached_func' fixture + assert get_func_name(cached_func)[1] == 'cached_func_inner' + + +def test_func_inspect_errors(): + # Check that func_inspect is robust and will work on weird objects + assert get_func_name('a'.lower)[-1] == 'lower' + assert get_func_code('a'.lower)[1:] == (None, -1) + ff = lambda x: x + assert get_func_name(ff, win_characters=False)[-1] == '' + assert get_func_code(ff)[1] == __file__.replace('.pyc', '.py') + # Simulate a function defined in __main__ + ff.__module__ = '__main__' + assert get_func_name(ff, win_characters=False)[-1] == '' + assert get_func_code(ff)[1] == __file__.replace('.pyc', '.py') + + +if PY3_OR_LATER: + # Avoid flake8 F821 "undefined name" warning. func_with_kwonly_args and + # func_with_signature are redefined in the exec statement a few lines below + def func_with_kwonly_args(): + pass + + def func_with_signature(): + pass + + # exec is needed to define a function with a keyword-only argument and a + # function with signature while avoiding a SyntaxError on Python 2 + exec(""" +def func_with_kwonly_args(a, b, *, kw1='kw1', kw2='kw2'): pass + +def func_with_signature(a: int, b: int) -> None: pass +""") + + def test_filter_args_python_3(): + assert ( + filter_args(func_with_kwonly_args, [], (1, 2), + {'kw1': 3, 'kw2': 4}) == + {'a': 1, 'b': 2, 'kw1': 3, 'kw2': 4}) + + # filter_args doesn't care about keyword-only arguments so you + # can pass 'kw1' into *args without any problem + with raises(ValueError) as excinfo: + filter_args(func_with_kwonly_args, [], (1, 2, 3), {'kw2': 2}) + excinfo.match("Keyword-only parameter 'kw1' was passed as positional " + "parameter") + + assert ( + filter_args(func_with_kwonly_args, ['b', 'kw2'], (1, 2), + {'kw1': 3, 'kw2': 4}) == + {'a': 1, 'kw1': 3}) + + assert (filter_args(func_with_signature, ['b'], (1, 2)) == {'a': 1}) + + +def test_bound_methods(): + """ Make sure that calling the same method on two different instances + of the same class does resolv to different signatures. + """ + a = Klass() + b = Klass() + assert filter_args(a.f, [], (1, )) != filter_args(b.f, [], (1, )) + + +@parametrize('exception,regex,func,args', + [(ValueError, 'ignore_lst must be a list of parameters to ignore', + f, ['bar', (None, )]), + (ValueError, r'Ignore list: argument \'(.*)\' is not defined', + g, [['bar'], (None, )]), + (ValueError, 'Wrong number of arguments', + h, [[]])]) +def test_filter_args_error_msg(exception, regex, func, args): + """ Make sure that filter_args returns decent error messages, for the + sake of the user. + """ + with raises(exception) as excinfo: + filter_args(func, *args) + excinfo.match(regex) + + +def test_filter_args_no_kwargs_mutation(): + """None-regression test against 0.12.0 changes. + + https://github.com/joblib/joblib/pull/75 + + Make sure filter args doesn't mutate the kwargs dict that gets passed in. + """ + kwargs = {'x': 0} + filter_args(g, [], [], kwargs) + assert kwargs == {'x': 0} + + +def test_clean_win_chars(): + string = r'C:\foo\bar\main.py' + mangled_string = _clean_win_chars(string) + for char in ('\\', ':', '<', '>', '!'): + assert char not in mangled_string + + +@parametrize('func,args,kwargs,sgn_expected', + [(g, [list(range(5))], {}, 'g([0, 1, 2, 3, 4])'), + (k, [1, 2, (3, 4)], {'y': True}, 'k(1, 2, (3, 4), y=True)')]) +def test_format_signature(func, args, kwargs, sgn_expected): + # Test signature formatting. + path, sgn_result = format_signature(func, *args, **kwargs) + assert sgn_result == sgn_expected + + +def test_format_signature_long_arguments(): + shortening_threshold = 1500 + # shortening gets it down to 700 characters but there is the name + # of the function in the signature and a few additional things + # like dots for the ellipsis + shortening_target = 700 + 10 + + arg = 'a' * shortening_threshold + _, signature = format_signature(h, arg) + assert len(signature) < shortening_target + + nb_args = 5 + args = [arg for _ in range(nb_args)] + _, signature = format_signature(h, *args) + assert len(signature) < shortening_target * nb_args + + kwargs = {str(i): arg for i, arg in enumerate(args)} + _, signature = format_signature(h, **kwargs) + assert len(signature) < shortening_target * nb_args + + _, signature = format_signature(h, *args, **kwargs) + assert len(signature) < shortening_target * 2 * nb_args + + +@with_numpy +def test_format_signature_numpy(): + """ Test the format signature formatting with numpy. + """ + + +def test_special_source_encoding(): + from joblib.test.test_func_inspect_special_encoding import big5_f + func_code, source_file, first_line = get_func_code(big5_f) + assert first_line == 5 + assert "def big5_f():" in func_code + assert "test_func_inspect_special_encoding" in source_file + + +def _get_code(): + from joblib.test.test_func_inspect_special_encoding import big5_f + return get_func_code(big5_f)[0] + + +def test_func_code_consistency(): + from joblib.parallel import Parallel, delayed + codes = Parallel(n_jobs=2)(delayed(_get_code)() for _ in range(5)) + assert len(set(codes)) == 1 diff --git a/my_env/Lib/site-packages/joblib/test/test_func_inspect_special_encoding.py b/my_env/Lib/site-packages/joblib/test/test_func_inspect_special_encoding.py new file mode 100644 index 000000000..1b9fbe8b8 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_func_inspect_special_encoding.py @@ -0,0 +1,10 @@ +# -*- coding: big5 -*- + + +# Some Traditional Chinese characters: ¤@¨Ç¤¤¤å¦r²Å +def big5_f(): + """¥Î©ó´ú¸Õªº¨ç¼Æ + """ + # µùÄÀ + return 0 + diff --git a/my_env/Lib/site-packages/joblib/test/test_hashing.py b/my_env/Lib/site-packages/joblib/test/test_hashing.py new file mode 100644 index 000000000..1c77fbeb1 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_hashing.py @@ -0,0 +1,463 @@ +""" +Test the hashing module. +""" + +# Author: Gael Varoquaux +# Copyright (c) 2009 Gael Varoquaux +# License: BSD Style, 3 clauses. + +import time +import hashlib +import sys +import gc +import io +import collections +import itertools +import pickle +import random +from decimal import Decimal + +from joblib.hashing import hash +from joblib.func_inspect import filter_args +from joblib.memory import Memory +from joblib.testing import raises, skipif, fixture, parametrize +from joblib.test.common import np, with_numpy +from joblib.my_exceptions import TransportableException +from joblib._compat import PY3_OR_LATER + + +try: + # Python 2/Python 3 compat + unicode('str') +except NameError: + unicode = lambda s: s + + +############################################################################### +# Helper functions for the tests +def time_func(func, *args): + """ Time function func on *args. + """ + times = list() + for _ in range(3): + t1 = time.time() + func(*args) + times.append(time.time() - t1) + return min(times) + + +def relative_time(func1, func2, *args): + """ Return the relative time between func1 and func2 applied on + *args. + """ + time_func1 = time_func(func1, *args) + time_func2 = time_func(func2, *args) + relative_diff = 0.5 * (abs(time_func1 - time_func2) + / (time_func1 + time_func2)) + return relative_diff + + +class Klass(object): + + def f(self, x): + return x + + +class KlassWithCachedMethod(object): + + def __init__(self, cachedir): + mem = Memory(cachedir=cachedir) + self.f = mem.cache(self.f) + + def f(self, x): + return x + + +############################################################################### +# Tests + +input_list = [1, 2, 1., 2., 1 + 1j, 2. + 1j, + 'a', 'b', + (1,), (1, 1,), [1, ], [1, 1, ], + {1: 1}, {1: 2}, {2: 1}, + None, + gc.collect, + [1, ].append, + # Next 2 sets have unorderable elements in python 3. + set(('a', 1)), + set(('a', 1, ('a', 1))), + # Next 2 dicts have unorderable type of keys in python 3. + {'a': 1, 1: 2}, + {'a': 1, 1: 2, 'd': {'a': 1}}] + + +@parametrize('obj1', input_list) +@parametrize('obj2', input_list) +def test_trivial_hash(obj1, obj2): + """Smoke test hash on various types.""" + # Check that 2 objects have the same hash only if they are the same. + are_hashes_equal = hash(obj1) == hash(obj2) + are_objs_identical = obj1 is obj2 + assert are_hashes_equal == are_objs_identical + + +def test_hash_methods(): + # Check that hashing instance methods works + a = io.StringIO(unicode('a')) + assert hash(a.flush) == hash(a.flush) + a1 = collections.deque(range(10)) + a2 = collections.deque(range(9)) + assert hash(a1.extend) != hash(a2.extend) + + +@fixture(scope='function') +@with_numpy +def three_np_arrays(): + rnd = np.random.RandomState(0) + arr1 = rnd.random_sample((10, 10)) + arr2 = arr1.copy() + arr3 = arr2.copy() + arr3[0] += 1 + return arr1, arr2, arr3 + + +def test_hash_numpy_arrays(three_np_arrays): + arr1, arr2, arr3 = three_np_arrays + + for obj1, obj2 in itertools.product(three_np_arrays, repeat=2): + are_hashes_equal = hash(obj1) == hash(obj2) + are_arrays_equal = np.all(obj1 == obj2) + assert are_hashes_equal == are_arrays_equal + + assert hash(arr1) != hash(arr1.T) + + +def test_hash_numpy_dict_of_arrays(three_np_arrays): + arr1, arr2, arr3 = three_np_arrays + + d1 = {1: arr1, 2: arr2} + d2 = {1: arr2, 2: arr1} + d3 = {1: arr2, 2: arr3} + + assert hash(d1) == hash(d2) + assert hash(d1) != hash(d3) + + +@with_numpy +@parametrize('dtype', ['datetime64[s]', 'timedelta64[D]']) +def test_numpy_datetime_array(dtype): + # memoryview is not supported for some dtypes e.g. datetime64 + # see https://github.com/joblib/joblib/issues/188 for more details + a_hash = hash(np.arange(10)) + array = np.arange(0, 10, dtype=dtype) + assert hash(array) != a_hash + + +@with_numpy +def test_hash_numpy_noncontiguous(): + a = np.asarray(np.arange(6000).reshape((1000, 2, 3)), + order='F')[:, :1, :] + b = np.ascontiguousarray(a) + assert hash(a) != hash(b) + + c = np.asfortranarray(a) + assert hash(a) != hash(c) + + +@with_numpy +@parametrize('coerce_mmap', [True, False]) +def test_hash_memmap(tmpdir, coerce_mmap): + """Check that memmap and arrays hash identically if coerce_mmap is True.""" + filename = tmpdir.join('memmap_temp').strpath + try: + m = np.memmap(filename, shape=(10, 10), mode='w+') + a = np.asarray(m) + are_hashes_equal = (hash(a, coerce_mmap=coerce_mmap) == + hash(m, coerce_mmap=coerce_mmap)) + assert are_hashes_equal == coerce_mmap + finally: + if 'm' in locals(): + del m + # Force a garbage-collection cycle, to be certain that the + # object is delete, and we don't run in a problem under + # Windows with a file handle still open. + gc.collect() + + +@with_numpy +@skipif(sys.platform == 'win32', reason='This test is not stable under windows' + ' for some reason') +def test_hash_numpy_performance(): + """ Check the performance of hashing numpy arrays: + + In [22]: a = np.random.random(1000000) + + In [23]: %timeit hashlib.md5(a).hexdigest() + 100 loops, best of 3: 20.7 ms per loop + + In [24]: %timeit hashlib.md5(pickle.dumps(a, protocol=2)).hexdigest() + 1 loops, best of 3: 73.1 ms per loop + + In [25]: %timeit hashlib.md5(cPickle.dumps(a, protocol=2)).hexdigest() + 10 loops, best of 3: 53.9 ms per loop + + In [26]: %timeit hash(a) + 100 loops, best of 3: 20.8 ms per loop + """ + rnd = np.random.RandomState(0) + a = rnd.random_sample(1000000) + if hasattr(np, 'getbuffer'): + # Under python 3, there is no getbuffer + getbuffer = np.getbuffer + else: + getbuffer = memoryview + md5_hash = lambda x: hashlib.md5(getbuffer(x)).hexdigest() + + relative_diff = relative_time(md5_hash, hash, a) + assert relative_diff < 0.3 + + # Check that hashing an tuple of 3 arrays takes approximately + # 3 times as much as hashing one array + time_hashlib = 3 * time_func(md5_hash, a) + time_hash = time_func(hash, (a, a, a)) + relative_diff = 0.5 * (abs(time_hash - time_hashlib) + / (time_hash + time_hashlib)) + assert relative_diff < 0.3 + + +def test_bound_methods_hash(): + """ Make sure that calling the same method on two different instances + of the same class does resolve to the same hashes. + """ + a = Klass() + b = Klass() + assert (hash(filter_args(a.f, [], (1, ))) == + hash(filter_args(b.f, [], (1, )))) + + +def test_bound_cached_methods_hash(tmpdir): + """ Make sure that calling the same _cached_ method on two different + instances of the same class does resolve to the same hashes. + """ + a = KlassWithCachedMethod(tmpdir.strpath) + b = KlassWithCachedMethod(tmpdir.strpath) + assert (hash(filter_args(a.f.func, [], (1, ))) == + hash(filter_args(b.f.func, [], (1, )))) + + +@with_numpy +def test_hash_object_dtype(): + """ Make sure that ndarrays with dtype `object' hash correctly.""" + + a = np.array([np.arange(i) for i in range(6)], dtype=object) + b = np.array([np.arange(i) for i in range(6)], dtype=object) + + assert hash(a) == hash(b) + + +@with_numpy +def test_numpy_scalar(): + # Numpy scalars are built from compiled functions, and lead to + # strange pickling paths explored, that can give hash collisions + a = np.float64(2.0) + b = np.float64(3.0) + assert hash(a) != hash(b) + + +def test_dict_hash(tmpdir): + # Check that dictionaries hash consistently, eventhough the ordering + # of the keys is not garanteed + k = KlassWithCachedMethod(tmpdir.strpath) + + d = {'#s12069__c_maps.nii.gz': [33], + '#s12158__c_maps.nii.gz': [33], + '#s12258__c_maps.nii.gz': [33], + '#s12277__c_maps.nii.gz': [33], + '#s12300__c_maps.nii.gz': [33], + '#s12401__c_maps.nii.gz': [33], + '#s12430__c_maps.nii.gz': [33], + '#s13817__c_maps.nii.gz': [33], + '#s13903__c_maps.nii.gz': [33], + '#s13916__c_maps.nii.gz': [33], + '#s13981__c_maps.nii.gz': [33], + '#s13982__c_maps.nii.gz': [33], + '#s13983__c_maps.nii.gz': [33]} + + a = k.f(d) + b = k.f(a) + + assert hash(a) == hash(b) + + +def test_set_hash(tmpdir): + # Check that sets hash consistently, even though their ordering + # is not guaranteed + k = KlassWithCachedMethod(tmpdir.strpath) + + s = set(['#s12069__c_maps.nii.gz', + '#s12158__c_maps.nii.gz', + '#s12258__c_maps.nii.gz', + '#s12277__c_maps.nii.gz', + '#s12300__c_maps.nii.gz', + '#s12401__c_maps.nii.gz', + '#s12430__c_maps.nii.gz', + '#s13817__c_maps.nii.gz', + '#s13903__c_maps.nii.gz', + '#s13916__c_maps.nii.gz', + '#s13981__c_maps.nii.gz', + '#s13982__c_maps.nii.gz', + '#s13983__c_maps.nii.gz']) + + a = k.f(s) + b = k.f(a) + + assert hash(a) == hash(b) + + +def test_set_decimal_hash(): + # Check that sets containing decimals hash consistently, even though + # ordering is not guaranteed + assert (hash(set([Decimal(0), Decimal('NaN')])) == + hash(set([Decimal('NaN'), Decimal(0)]))) + + +def test_string(): + # Test that we obtain the same hash for object owning several strings, + # whatever the past of these strings (which are immutable in Python) + string = 'foo' + a = {string: 'bar'} + b = {string: 'bar'} + c = pickle.loads(pickle.dumps(b)) + assert hash([a, b]) == hash([a, c]) + + +@with_numpy +def test_dtype(): + # Test that we obtain the same hash for object owning several dtype, + # whatever the past of these dtypes. Catter for cache invalidation with + # complex dtype + a = np.dtype([('f1', np.uint), ('f2', np.int32)]) + b = a + c = pickle.loads(pickle.dumps(a)) + assert hash([a, c]) == hash([a, b]) + + +@parametrize('to_hash,expected', + [('This is a string to hash', + {'py2': '80436ada343b0d79a99bfd8883a96e45', + 'py3': '71b3f47df22cb19431d85d92d0b230b2'}), + (u"C'est l\xe9t\xe9", + {'py2': '2ff3a25200eb6219f468de2640913c2d', + 'py3': '2d8d189e9b2b0b2e384d93c868c0e576'}), + ((123456, 54321, -98765), + {'py2': '50d81c80af05061ac4dcdc2d5edee6d6', + 'py3': 'e205227dd82250871fa25aa0ec690aa3'}), + ([random.Random(42).random() for _ in range(5)], + {'py2': '1a36a691b2e2ba3a9df72de3dccf17ea', + 'py3': 'a11ffad81f9682a7d901e6edc3d16c84'}), + ([3, 'abc', None, TransportableException('foo', ValueError)], + {'py2': 'adb6ba84990ee5e462dc138383f11802', + 'py3': '994f663c64ba5e64b2a85ebe75287829'}), + ({'abcde': 123, 'sadfas': [-9999, 2, 3]}, + {'py2': 'fc9314a39ff75b829498380850447047', + 'py3': 'aeda150553d4bb5c69f0e69d51b0e2ef'})]) +def test_hashes_stay_the_same(to_hash, expected): + # We want to make sure that hashes don't change with joblib + # version. For end users, that would mean that they have to + # regenerate their cache from scratch, which potentially means + # lengthy recomputations. + # Expected results have been generated with joblib 0.9.2 + + py_version_str = 'py3' if PY3_OR_LATER else 'py2' + assert hash(to_hash) == expected[py_version_str] + + +@with_numpy +def test_hashes_are_different_between_c_and_fortran_contiguous_arrays(): + # We want to be sure that the c-contiguous and f-contiguous versions of the + # same array produce 2 different hashes. + rng = np.random.RandomState(0) + arr_c = rng.random_sample((10, 10)) + arr_f = np.asfortranarray(arr_c) + assert hash(arr_c) != hash(arr_f) + + +@with_numpy +def test_0d_array(): + hash(np.array(0)) + + +@with_numpy +def test_0d_and_1d_array_hashing_is_different(): + assert hash(np.array(0)) != hash(np.array([0])) + + +@with_numpy +def test_hashes_stay_the_same_with_numpy_objects(): + # We want to make sure that hashes don't change with joblib + # version. For end users, that would mean that they have to + # regenerate their cache from scratch, which potentially means + # lengthy recomputations. + rng = np.random.RandomState(42) + # Being explicit about dtypes in order to avoid + # architecture-related differences. Also using 'f4' rather than + # 'f8' for float arrays because 'f8' arrays generated by + # rng.random.randn don't seem to be bit-identical on 32bit and + # 64bit machines. + to_hash_list = [ + rng.randint(-1000, high=1000, size=50).astype(' +# Copyright (c) 2009 Gael Varoquaux +# License: BSD Style, 3 clauses. + +import re + +from joblib.logger import PrintTime + +try: + # Python 2/Python 3 compat + unicode('str') +except NameError: + unicode = lambda s: s + + +def test_print_time(tmpdir, capsys): + # A simple smoke test for PrintTime. + logfile = tmpdir.join('test.log').strpath + print_time = PrintTime(logfile=logfile) + print_time(unicode('Foo')) + # Create a second time, to smoke test log rotation. + print_time = PrintTime(logfile=logfile) + print_time(unicode('Foo')) + # And a third time + print_time = PrintTime(logfile=logfile) + print_time(unicode('Foo')) + + out_printed_text, err_printed_text = capsys.readouterr() + # Use regexps to be robust to time variations + match = r"Foo: 0\..s, 0\..min\nFoo: 0\..s, 0..min\nFoo: " + \ + r".\..s, 0..min\n" + if not re.match(match, err_printed_text): + raise AssertionError('Excepted %s, got %s' % + (match, err_printed_text)) diff --git a/my_env/Lib/site-packages/joblib/test/test_memmapping.py b/my_env/Lib/site-packages/joblib/test/test_memmapping.py new file mode 100644 index 000000000..caa1b08ad --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_memmapping.py @@ -0,0 +1,666 @@ +import os +import mmap +import sys +import platform +import gc +import pickle + +from joblib.test.common import with_numpy, np +from joblib.test.common import setup_autokill +from joblib.test.common import teardown_autokill +from joblib.test.common import with_multiprocessing +from joblib.test.common import with_dev_shm +from joblib.testing import raises, parametrize, skipif +from joblib.backports import make_memmap +from joblib.parallel import Parallel, delayed + +from joblib.pool import MemmappingPool +from joblib.executor import _TestingMemmappingExecutor +from joblib._memmapping_reducer import has_shareable_memory +from joblib._memmapping_reducer import ArrayMemmapReducer +from joblib._memmapping_reducer import reduce_memmap +from joblib._memmapping_reducer import _strided_from_memmap +from joblib._memmapping_reducer import _get_backing_memmap +from joblib._memmapping_reducer import _get_temp_dir +from joblib._memmapping_reducer import _WeakArrayKeyMap +import joblib._memmapping_reducer as jmr + + +def setup_module(): + setup_autokill(__name__, timeout=300) + + +def teardown_module(): + teardown_autokill(__name__) + + +def check_array(args): + """Dummy helper function to be executed in subprocesses + + Check that the provided array has the expected values in the provided + range. + + """ + data, position, expected = args + np.testing.assert_array_equal(data[position], expected) + + +def inplace_double(args): + """Dummy helper function to be executed in subprocesses + + + Check that the input array has the right values in the provided range + and perform an inplace modification to double the values in the range by + two. + + """ + data, position, expected = args + assert data[position] == expected + data[position] *= 2 + np.testing.assert_array_equal(data[position], 2 * expected) + + +@with_numpy +@with_multiprocessing +def test_memmap_based_array_reducing(tmpdir): + """Check that it is possible to reduce a memmap backed array""" + assert_array_equal = np.testing.assert_array_equal + filename = tmpdir.join('test.mmap').strpath + + # Create a file larger than what will be used by a + buffer = np.memmap(filename, dtype=np.float64, shape=500, mode='w+') + + # Fill the original buffer with negative markers to detect over of + # underflow in case of test failures + buffer[:] = - 1.0 * np.arange(buffer.shape[0], dtype=buffer.dtype) + buffer.flush() + + # Memmap a 2D fortran array on a offseted subsection of the previous + # buffer + a = np.memmap(filename, dtype=np.float64, shape=(3, 5, 4), + mode='r+', order='F', offset=4) + a[:] = np.arange(60).reshape(a.shape) + + # Build various views that share the buffer with the original memmap + + # b is an memmap sliced view on an memmap instance + b = a[1:-1, 2:-1, 2:4] + + # c and d are array views + c = np.asarray(b) + d = c.T + + # Array reducer with auto dumping disabled + reducer = ArrayMemmapReducer(None, tmpdir.strpath, 'c') + + def reconstruct_array(x): + cons, args = reducer(x) + return cons(*args) + + def reconstruct_memmap(x): + cons, args = reduce_memmap(x) + return cons(*args) + + # Reconstruct original memmap + a_reconstructed = reconstruct_memmap(a) + assert has_shareable_memory(a_reconstructed) + assert isinstance(a_reconstructed, np.memmap) + assert_array_equal(a_reconstructed, a) + + # Reconstruct strided memmap view + b_reconstructed = reconstruct_memmap(b) + assert has_shareable_memory(b_reconstructed) + assert_array_equal(b_reconstructed, b) + + # Reconstruct arrays views on memmap base + c_reconstructed = reconstruct_array(c) + assert not isinstance(c_reconstructed, np.memmap) + assert has_shareable_memory(c_reconstructed) + assert_array_equal(c_reconstructed, c) + + d_reconstructed = reconstruct_array(d) + assert not isinstance(d_reconstructed, np.memmap) + assert has_shareable_memory(d_reconstructed) + assert_array_equal(d_reconstructed, d) + + # Test graceful degradation on fake memmap instances with in-memory + # buffers + a3 = a * 3 + assert not has_shareable_memory(a3) + a3_reconstructed = reconstruct_memmap(a3) + assert not has_shareable_memory(a3_reconstructed) + assert not isinstance(a3_reconstructed, np.memmap) + assert_array_equal(a3_reconstructed, a * 3) + + # Test graceful degradation on arrays derived from fake memmap instances + b3 = np.asarray(a3) + assert not has_shareable_memory(b3) + + b3_reconstructed = reconstruct_array(b3) + assert isinstance(b3_reconstructed, np.ndarray) + assert not has_shareable_memory(b3_reconstructed) + assert_array_equal(b3_reconstructed, b3) + + +@with_numpy +@with_multiprocessing +def test_high_dimension_memmap_array_reducing(tmpdir): + assert_array_equal = np.testing.assert_array_equal + + filename = tmpdir.join('test.mmap').strpath + + # Create a high dimensional memmap + a = np.memmap(filename, dtype=np.float64, shape=(100, 15, 15, 3), + mode='w+') + a[:] = np.arange(100 * 15 * 15 * 3).reshape(a.shape) + + # Create some slices/indices at various dimensions + b = a[0:10] + c = a[:, 5:10] + d = a[:, :, :, 0] + e = a[1:3:4] + + def reconstruct_memmap(x): + cons, args = reduce_memmap(x) + res = cons(*args) + return res + + a_reconstructed = reconstruct_memmap(a) + assert has_shareable_memory(a_reconstructed) + assert isinstance(a_reconstructed, np.memmap) + assert_array_equal(a_reconstructed, a) + + b_reconstructed = reconstruct_memmap(b) + assert has_shareable_memory(b_reconstructed) + assert_array_equal(b_reconstructed, b) + + c_reconstructed = reconstruct_memmap(c) + assert has_shareable_memory(c_reconstructed) + assert_array_equal(c_reconstructed, c) + + d_reconstructed = reconstruct_memmap(d) + assert has_shareable_memory(d_reconstructed) + assert_array_equal(d_reconstructed, d) + + e_reconstructed = reconstruct_memmap(e) + assert has_shareable_memory(e_reconstructed) + assert_array_equal(e_reconstructed, e) + + +@with_numpy +def test__strided_from_memmap(tmpdir): + fname = tmpdir.join('test.mmap').strpath + size = 5 * mmap.ALLOCATIONGRANULARITY + offset = mmap.ALLOCATIONGRANULARITY + 1 + # This line creates the mmap file that is reused later + memmap_obj = np.memmap(fname, mode='w+', shape=size + offset) + # filename, dtype, mode, offset, order, shape, strides, total_buffer_len + memmap_obj = _strided_from_memmap(fname, dtype='uint8', mode='r', + offset=offset, order='C', shape=size, + strides=None, total_buffer_len=None) + assert isinstance(memmap_obj, np.memmap) + assert memmap_obj.offset == offset + memmap_backed_obj = _strided_from_memmap(fname, dtype='uint8', mode='r', + offset=offset, order='C', + shape=(size // 2,), strides=(2,), + total_buffer_len=size) + assert _get_backing_memmap(memmap_backed_obj).offset == offset + + +@with_numpy +@with_multiprocessing +@parametrize("factory", [MemmappingPool, _TestingMemmappingExecutor], + ids=["multiprocessing", "loky"]) +def test_pool_with_memmap(factory, tmpdir): + """Check that subprocess can access and update shared memory memmap""" + assert_array_equal = np.testing.assert_array_equal + + # Fork the subprocess before allocating the objects to be passed + pool_temp_folder = tmpdir.mkdir('pool').strpath + p = factory(10, max_nbytes=2, temp_folder=pool_temp_folder) + try: + filename = tmpdir.join('test.mmap').strpath + a = np.memmap(filename, dtype=np.float32, shape=(3, 5), mode='w+') + a.fill(1.0) + + p.map(inplace_double, [(a, (i, j), 1.0) + for i in range(a.shape[0]) + for j in range(a.shape[1])]) + + assert_array_equal(a, 2 * np.ones(a.shape)) + + # Open a copy-on-write view on the previous data + b = np.memmap(filename, dtype=np.float32, shape=(5, 3), mode='c') + + p.map(inplace_double, [(b, (i, j), 2.0) + for i in range(b.shape[0]) + for j in range(b.shape[1])]) + + # Passing memmap instances to the pool should not trigger the creation + # of new files on the FS + assert os.listdir(pool_temp_folder) == [] + + # the original data is untouched + assert_array_equal(a, 2 * np.ones(a.shape)) + assert_array_equal(b, 2 * np.ones(b.shape)) + + # readonly maps can be read but not updated + c = np.memmap(filename, dtype=np.float32, shape=(10,), mode='r', + offset=5 * 4) + + with raises(AssertionError): + p.map(check_array, [(c, i, 3.0) for i in range(c.shape[0])]) + + # depending on the version of numpy one can either get a RuntimeError + # or a ValueError + with raises((RuntimeError, ValueError)): + p.map(inplace_double, [(c, i, 2.0) for i in range(c.shape[0])]) + finally: + # Clean all filehandlers held by the pool + p.terminate() + del p + + +@with_numpy +@with_multiprocessing +@parametrize("factory", [MemmappingPool, _TestingMemmappingExecutor], + ids=["multiprocessing", "loky"]) +def test_pool_with_memmap_array_view(factory, tmpdir): + """Check that subprocess can access and update shared memory array""" + assert_array_equal = np.testing.assert_array_equal + + # Fork the subprocess before allocating the objects to be passed + pool_temp_folder = tmpdir.mkdir('pool').strpath + p = factory(10, max_nbytes=2, temp_folder=pool_temp_folder) + try: + + filename = tmpdir.join('test.mmap').strpath + a = np.memmap(filename, dtype=np.float32, shape=(3, 5), mode='w+') + a.fill(1.0) + + # Create an ndarray view on the memmap instance + a_view = np.asarray(a) + assert not isinstance(a_view, np.memmap) + assert has_shareable_memory(a_view) + + p.map(inplace_double, [(a_view, (i, j), 1.0) + for i in range(a.shape[0]) + for j in range(a.shape[1])]) + + # Both a and the a_view have been updated + assert_array_equal(a, 2 * np.ones(a.shape)) + assert_array_equal(a_view, 2 * np.ones(a.shape)) + + # Passing memmap array view to the pool should not trigger the + # creation of new files on the FS + assert os.listdir(pool_temp_folder) == [] + + finally: + p.terminate() + del p + + +@with_numpy +@with_multiprocessing +@parametrize("factory", [MemmappingPool, _TestingMemmappingExecutor], + ids=["multiprocessing", "loky"]) +def test_memmapping_pool_for_large_arrays(factory, tmpdir): + """Check that large arrays are not copied in memory""" + + # Check that the tempfolder is empty + assert os.listdir(tmpdir.strpath) == [] + + # Build an array reducers that automaticaly dump large array content + # to filesystem backed memmap instances to avoid memory explosion + p = factory(3, max_nbytes=40, temp_folder=tmpdir.strpath, verbose=2) + try: + # The temporary folder for the pool is not provisioned in advance + assert os.listdir(tmpdir.strpath) == [] + assert not os.path.exists(p._temp_folder) + + small = np.ones(5, dtype=np.float32) + assert small.nbytes == 20 + p.map(check_array, [(small, i, 1.0) for i in range(small.shape[0])]) + + # Memory has been copied, the pool filesystem folder is unused + assert os.listdir(tmpdir.strpath) == [] + + # Try with a file larger than the memmap threshold of 40 bytes + large = np.ones(100, dtype=np.float64) + assert large.nbytes == 800 + p.map(check_array, [(large, i, 1.0) for i in range(large.shape[0])]) + + # The data has been dumped in a temp folder for subprocess to share it + # without per-child memory copies + assert os.path.isdir(p._temp_folder) + dumped_filenames = os.listdir(p._temp_folder) + assert len(dumped_filenames) == 1 + + # Check that memory mapping is not triggered for arrays with + # dtype='object' + objects = np.array(['abc'] * 100, dtype='object') + results = p.map(has_shareable_memory, [objects]) + assert not results[0] + + finally: + # check FS garbage upon pool termination + p.terminate() + assert not os.path.exists(p._temp_folder) + del p + + +@with_numpy +@with_multiprocessing +@parametrize("factory", [MemmappingPool, _TestingMemmappingExecutor], + ids=["multiprocessing", "loky"]) +def test_memmapping_pool_for_large_arrays_disabled(factory, tmpdir): + """Check that large arrays memmapping can be disabled""" + # Set max_nbytes to None to disable the auto memmapping feature + p = factory(3, max_nbytes=None, temp_folder=tmpdir.strpath) + try: + + # Check that the tempfolder is empty + assert os.listdir(tmpdir.strpath) == [] + + # Try with a file largish than the memmap threshold of 40 bytes + large = np.ones(100, dtype=np.float64) + assert large.nbytes == 800 + p.map(check_array, [(large, i, 1.0) for i in range(large.shape[0])]) + + # Check that the tempfolder is still empty + assert os.listdir(tmpdir.strpath) == [] + + finally: + # Cleanup open file descriptors + p.terminate() + del p + + +@with_numpy +@with_multiprocessing +@with_dev_shm +@parametrize("factory", [MemmappingPool, _TestingMemmappingExecutor], + ids=["multiprocessing", "loky"]) +def test_memmapping_on_large_enough_dev_shm(factory): + """Check that memmapping uses /dev/shm when possible""" + orig_size = jmr.SYSTEM_SHARED_MEM_FS_MIN_SIZE + try: + # Make joblib believe that it can use /dev/shm even when running on a + # CI container where the size of the /dev/shm is not very large (that + # is at least 32 MB instead of 2 GB by default). + jmr.SYSTEM_SHARED_MEM_FS_MIN_SIZE = int(32e6) + p = factory(3, max_nbytes=10) + try: + # Check that the pool has correctly detected the presence of the + # shared memory filesystem. + pool_temp_folder = p._temp_folder + folder_prefix = '/dev/shm/joblib_memmapping_folder_' + assert pool_temp_folder.startswith(folder_prefix) + assert os.path.exists(pool_temp_folder) + + # Try with a file larger than the memmap threshold of 10 bytes + a = np.ones(100, dtype=np.float64) + assert a.nbytes == 800 + p.map(id, [a] * 10) + # a should have been memmapped to the pool temp folder: the joblib + # pickling procedure generate one .pkl file: + assert len(os.listdir(pool_temp_folder)) == 1 + + # create a new array with content that is different from 'a' so + # that it is mapped to a different file in the temporary folder of + # the pool. + b = np.ones(100, dtype=np.float64) * 2 + assert b.nbytes == 800 + p.map(id, [b] * 10) + # A copy of both a and b are now stored in the shared memory folder + assert len(os.listdir(pool_temp_folder)) == 2 + finally: + # Cleanup open file descriptors + p.terminate() + del p + # The temp folder is cleaned up upon pool termination + assert not os.path.exists(pool_temp_folder) + finally: + jmr.SYSTEM_SHARED_MEM_FS_MIN_SIZE = orig_size + + +@with_numpy +@with_multiprocessing +@with_dev_shm +@parametrize("factory", [MemmappingPool, _TestingMemmappingExecutor], + ids=["multiprocessing", "loky"]) +def test_memmapping_on_too_small_dev_shm(factory): + orig_size = jmr.SYSTEM_SHARED_MEM_FS_MIN_SIZE + try: + # Make joblib believe that it cannot use /dev/shm unless there is + # 42 exabytes of available shared memory in /dev/shm + jmr.SYSTEM_SHARED_MEM_FS_MIN_SIZE = int(42e18) + + p = factory(3, max_nbytes=10) + try: + # Check that the pool has correctly detected the presence of the + # shared memory filesystem. + pool_temp_folder = p._temp_folder + assert not pool_temp_folder.startswith('/dev/shm') + finally: + # Cleanup open file descriptors + p.terminate() + del p + + # The temp folder is cleaned up upon pool termination + assert not os.path.exists(pool_temp_folder) + finally: + jmr.SYSTEM_SHARED_MEM_FS_MIN_SIZE = orig_size + + +@with_numpy +@with_multiprocessing +@parametrize("factory", [MemmappingPool, _TestingMemmappingExecutor], + ids=["multiprocessing", "loky"]) +def test_memmapping_pool_for_large_arrays_in_return(factory, tmpdir): + """Check that large arrays are not copied in memory in return""" + assert_array_equal = np.testing.assert_array_equal + + # Build an array reducers that automaticaly dump large array content + # but check that the returned datastructure are regular arrays to avoid + # passing a memmap array pointing to a pool controlled temp folder that + # might be confusing to the user + + # The MemmappingPool user can always return numpy.memmap object explicitly + # to avoid memory copy + p = factory(3, max_nbytes=10, temp_folder=tmpdir.strpath) + try: + res = p.apply_async(np.ones, args=(1000,)) + large = res.get() + assert not has_shareable_memory(large) + assert_array_equal(large, np.ones(1000)) + finally: + p.terminate() + del p + + +def _worker_multiply(a, n_times): + """Multiplication function to be executed by subprocess""" + assert has_shareable_memory(a) + return a * n_times + + +@with_numpy +@with_multiprocessing +@parametrize("factory", [MemmappingPool, _TestingMemmappingExecutor], + ids=["multiprocessing", "loky"]) +def test_workaround_against_bad_memmap_with_copied_buffers(factory, tmpdir): + """Check that memmaps with a bad buffer are returned as regular arrays + + Unary operations and ufuncs on memmap instances return a new memmap + instance with an in-memory buffer (probably a numpy bug). + """ + assert_array_equal = np.testing.assert_array_equal + + p = factory(3, max_nbytes=10, temp_folder=tmpdir.strpath) + try: + # Send a complex, large-ish view on a array that will be converted to + # a memmap in the worker process + a = np.asarray(np.arange(6000).reshape((1000, 2, 3)), + order='F')[:, :1, :] + + # Call a non-inplace multiply operation on the worker and memmap and + # send it back to the parent. + b = p.apply_async(_worker_multiply, args=(a, 3)).get() + assert not has_shareable_memory(b) + assert_array_equal(b, 3 * a) + finally: + p.terminate() + del p + + +def identity(arg): + return arg + + +@with_numpy +@with_multiprocessing +@parametrize("factory", [MemmappingPool, _TestingMemmappingExecutor], + ids=["multiprocessing", "loky"]) +def test_pool_memmap_with_big_offset(factory, tmpdir): + # Test that numpy memmap offset is set correctly if greater than + # mmap.ALLOCATIONGRANULARITY, see + # https://github.com/joblib/joblib/issues/451 and + # https://github.com/numpy/numpy/pull/8443 for more details. + fname = tmpdir.join('test.mmap').strpath + size = 5 * mmap.ALLOCATIONGRANULARITY + offset = mmap.ALLOCATIONGRANULARITY + 1 + obj = make_memmap(fname, mode='w+', shape=size, dtype='uint8', + offset=offset) + + p = factory(2, temp_folder=tmpdir.strpath) + result = p.apply_async(identity, args=(obj,)).get() + assert isinstance(result, np.memmap) + assert result.offset == offset + np.testing.assert_array_equal(obj, result) + + +def test_pool_get_temp_dir(tmpdir): + pool_folder_name = 'test.tmpdir' + pool_folder, shared_mem = _get_temp_dir(pool_folder_name, tmpdir.strpath) + assert shared_mem is False + assert pool_folder == tmpdir.join('test.tmpdir').strpath + + pool_folder, shared_mem = _get_temp_dir(pool_folder_name, temp_folder=None) + if sys.platform.startswith('win'): + assert shared_mem is False + assert pool_folder.endswith(pool_folder_name) + + +@with_numpy +@skipif(sys.platform == 'win32', reason='This test fails with a ' + 'PermissionError on Windows') +@parametrize("mmap_mode", ["r+", "w+"]) +def test_numpy_arrays_use_different_memory(mmap_mode): + def func(arr, value): + arr[:] = value + return arr + + arrays = [np.zeros((10, 10), dtype='float64') for i in range(10)] + + results = Parallel(mmap_mode=mmap_mode, max_nbytes=0, n_jobs=2)( + delayed(func)(arr, i) for i, arr in enumerate(arrays)) + + for i, arr in enumerate(results): + np.testing.assert_array_equal(arr, i) + + +@with_numpy +def test_weak_array_key_map(): + + def assert_empty_after_gc_collect(container, retries=3): + for i in range(retries): + if len(container) == 0: + return + gc.collect() + assert len(container) == 0 + + a = np.ones(42) + m = _WeakArrayKeyMap() + m.set(a, 'a') + assert m.get(a) == 'a' + + b = a + assert m.get(b) == 'a' + m.set(b, 'b') + assert m.get(a) == 'b' + + del a + gc.collect() + assert len(m._data) == 1 + assert m.get(b) == 'b' + + del b + assert_empty_after_gc_collect(m._data) + + c = np.ones(42) + m.set(c, 'c') + assert len(m._data) == 1 + assert m.get(c) == 'c' + + with raises(KeyError): + m.get(np.ones(42)) + + del c + assert_empty_after_gc_collect(m._data) + + # Check that creating and dropping numpy arrays with potentially the same + # object id will not cause the map to get confused. + def get_set_get_collect(m, i): + a = np.ones(42) + with raises(KeyError): + m.get(a) + m.set(a, i) + assert m.get(a) == i + return id(a) + + unique_ids = set([get_set_get_collect(m, i) for i in range(1000)]) + if platform.python_implementation() == 'CPython': + # On CPython (at least) the same id is often reused many times for the + # temporary arrays created under the local scope of the + # get_set_get_collect function without causing any spurious lookups / + # insertions in the map. + assert len(unique_ids) < 100 + + +def test_weak_array_key_map_no_pickling(): + m = _WeakArrayKeyMap() + with raises(pickle.PicklingError): + pickle.dumps(m) + + +@with_numpy +@with_multiprocessing +def test_direct_mmap(tmpdir): + testfile = str(tmpdir.join('arr.dat')) + a = np.arange(10, dtype='uint8') + a.tofile(testfile) + + def _read_array(): + with open(testfile) as fd: + mm = mmap.mmap(fd.fileno(), 0, access=mmap.ACCESS_READ, offset=0) + return np.ndarray((10,), dtype=np.uint8, buffer=mm, offset=0) + + def func(x): + return x**2 + + arr = _read_array() + + # this is expected to work and gives the reference + ref = Parallel(n_jobs=2)(delayed(func)(x) for x in [a]) + + # now test that it work with the mmap array + results = Parallel(n_jobs=2)(delayed(func)(x) for x in [arr]) + np.testing.assert_array_equal(results, ref) + + # also test with a mmap array read in the subprocess + def worker(): + return _read_array() + + results = Parallel(n_jobs=2)(delayed(worker)() for _ in range(1)) + np.testing.assert_array_equal(results[0], arr) diff --git a/my_env/Lib/site-packages/joblib/test/test_memory.py b/my_env/Lib/site-packages/joblib/test/test_memory.py new file mode 100644 index 000000000..985ebb432 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_memory.py @@ -0,0 +1,1214 @@ +""" +Test the memory module. +""" + +# Author: Gael Varoquaux +# Copyright (c) 2009 Gael Varoquaux +# License: BSD Style, 3 clauses. + +import gc +import shutil +import os +import os.path +import pickle +import sys +import time +import datetime + +import pytest + +from joblib.memory import Memory +from joblib.memory import MemorizedFunc, NotMemorizedFunc +from joblib.memory import MemorizedResult, NotMemorizedResult +from joblib.memory import _FUNCTION_HASHES +from joblib.memory import register_store_backend, _STORE_BACKENDS +from joblib.memory import _build_func_identifier, _store_backend_factory +from joblib.memory import JobLibCollisionWarning +from joblib.parallel import Parallel, delayed +from joblib._store_backends import StoreBackendBase, FileSystemStoreBackend +from joblib.test.common import with_numpy, np +from joblib.test.common import with_multiprocessing +from joblib.testing import parametrize, raises, warns +from joblib._compat import PY3_OR_LATER +from joblib.hashing import hash + +if sys.version_info[:2] >= (3, 4): + import pathlib + + +############################################################################### +# Module-level variables for the tests +def f(x, y=1): + """ A module-level function for testing purposes. + """ + return x ** 2 + y + + +############################################################################### +# Helper function for the tests +def check_identity_lazy(func, accumulator, location): + """ Given a function and an accumulator (a list that grows every + time the function is called), check that the function can be + decorated by memory to be a lazy identity. + """ + # Call each function with several arguments, and check that it is + # evaluated only once per argument. + memory = Memory(location=location, verbose=0) + func = memory.cache(func) + for i in range(3): + for _ in range(2): + assert func(i) == i + assert len(accumulator) == i + 1 + + +def corrupt_single_cache_item(memory): + single_cache_item, = memory.store_backend.get_items() + output_filename = os.path.join(single_cache_item.path, 'output.pkl') + with open(output_filename, 'w') as f: + f.write('garbage') + + +def monkeypatch_cached_func_warn(func, monkeypatch_fixture): + # Need monkeypatch because pytest does not + # capture stdlib logging output (see + # https://github.com/pytest-dev/pytest/issues/2079) + + recorded = [] + + def append_to_record(item): + recorded.append(item) + monkeypatch_fixture.setattr(func, 'warn', append_to_record) + return recorded + + +############################################################################### +# Tests +def test_memory_integration(tmpdir): + """ Simple test of memory lazy evaluation. + """ + accumulator = list() + # Rmk: this function has the same name than a module-level function, + # thus it serves as a test to see that both are identified + # as different. + + def f(l): + accumulator.append(1) + return l + + check_identity_lazy(f, accumulator, tmpdir.strpath) + + # Now test clearing + for compress in (False, True): + for mmap_mode in ('r', None): + memory = Memory(location=tmpdir.strpath, verbose=10, + mmap_mode=mmap_mode, compress=compress) + # First clear the cache directory, to check that our code can + # handle that + # NOTE: this line would raise an exception, as the database file is + # still open; we ignore the error since we want to test what + # happens if the directory disappears + shutil.rmtree(tmpdir.strpath, ignore_errors=True) + g = memory.cache(f) + g(1) + g.clear(warn=False) + current_accumulator = len(accumulator) + out = g(1) + + assert len(accumulator) == current_accumulator + 1 + # Also, check that Memory.eval works similarly + assert memory.eval(f, 1) == out + assert len(accumulator) == current_accumulator + 1 + + # Now do a smoke test with a function defined in __main__, as the name + # mangling rules are more complex + f.__module__ = '__main__' + memory = Memory(location=tmpdir.strpath, verbose=0) + memory.cache(f)(1) + + +def test_no_memory(): + """ Test memory with location=None: no memoize """ + accumulator = list() + + def ff(l): + accumulator.append(1) + return l + + memory = Memory(location=None, verbose=0) + gg = memory.cache(ff) + for _ in range(4): + current_accumulator = len(accumulator) + gg(1) + assert len(accumulator) == current_accumulator + 1 + + +def test_memory_kwarg(tmpdir): + " Test memory with a function with keyword arguments." + accumulator = list() + + def g(l=None, m=1): + accumulator.append(1) + return l + + check_identity_lazy(g, accumulator, tmpdir.strpath) + + memory = Memory(location=tmpdir.strpath, verbose=0) + g = memory.cache(g) + # Smoke test with an explicit keyword argument: + assert g(l=30, m=2) == 30 + + +def test_memory_lambda(tmpdir): + " Test memory with a function with a lambda." + accumulator = list() + + def helper(x): + """ A helper function to define l as a lambda. + """ + accumulator.append(1) + return x + + l = lambda x: helper(x) + + check_identity_lazy(l, accumulator, tmpdir.strpath) + + +def test_memory_name_collision(tmpdir): + " Check that name collisions with functions will raise warnings" + memory = Memory(location=tmpdir.strpath, verbose=0) + + @memory.cache + def name_collision(x): + """ A first function called name_collision + """ + return x + + a = name_collision + + @memory.cache + def name_collision(x): + """ A second function called name_collision + """ + return x + + b = name_collision + + with warns(JobLibCollisionWarning) as warninfo: + a(1) + b(1) + + assert len(warninfo) == 1 + assert "collision" in str(warninfo[0].message) + + +def test_memory_warning_lambda_collisions(tmpdir): + # Check that multiple use of lambda will raise collisions + memory = Memory(location=tmpdir.strpath, verbose=0) + a = lambda x: x + a = memory.cache(a) + b = lambda x: x + 1 + b = memory.cache(b) + + with warns(JobLibCollisionWarning) as warninfo: + assert a(0) == 0 + assert b(1) == 2 + assert a(1) == 1 + + # In recent Python versions, we can retrieve the code of lambdas, + # thus nothing is raised + assert len(warninfo) == 4 + + +def test_memory_warning_collision_detection(tmpdir): + # Check that collisions impossible to detect will raise appropriate + # warnings. + memory = Memory(location=tmpdir.strpath, verbose=0) + a1 = eval('lambda x: x') + a1 = memory.cache(a1) + b1 = eval('lambda x: x+1') + b1 = memory.cache(b1) + + with warns(JobLibCollisionWarning) as warninfo: + a1(1) + b1(1) + a1(0) + + assert len(warninfo) == 2 + assert "cannot detect" in str(warninfo[0].message).lower() + + +def test_memory_partial(tmpdir): + " Test memory with functools.partial." + accumulator = list() + + def func(x, y): + """ A helper function to define l as a lambda. + """ + accumulator.append(1) + return y + + import functools + function = functools.partial(func, 1) + + check_identity_lazy(function, accumulator, tmpdir.strpath) + + +def test_memory_eval(tmpdir): + " Smoke test memory with a function with a function defined in an eval." + memory = Memory(location=tmpdir.strpath, verbose=0) + + m = eval('lambda x: x') + mm = memory.cache(m) + + assert mm(1) == 1 + + +def count_and_append(x=[]): + """ A function with a side effect in its arguments. + + Return the lenght of its argument and append one element. + """ + len_x = len(x) + x.append(None) + return len_x + + +def test_argument_change(tmpdir): + """ Check that if a function has a side effect in its arguments, it + should use the hash of changing arguments. + """ + memory = Memory(location=tmpdir.strpath, verbose=0) + func = memory.cache(count_and_append) + # call the function for the first time, is should cache it with + # argument x=[] + assert func() == 0 + # the second time the argument is x=[None], which is not cached + # yet, so the functions should be called a second time + assert func() == 1 + + +@with_numpy +@parametrize('mmap_mode', [None, 'r']) +def test_memory_numpy(tmpdir, mmap_mode): + " Test memory with a function with numpy arrays." + accumulator = list() + + def n(l=None): + accumulator.append(1) + return l + + memory = Memory(location=tmpdir.strpath, mmap_mode=mmap_mode, + verbose=0) + cached_n = memory.cache(n) + + rnd = np.random.RandomState(0) + for i in range(3): + a = rnd.random_sample((10, 10)) + for _ in range(3): + assert np.all(cached_n(a) == a) + assert len(accumulator) == i + 1 + + +@with_numpy +def test_memory_numpy_check_mmap_mode(tmpdir, monkeypatch): + """Check that mmap_mode is respected even at the first call""" + + memory = Memory(location=tmpdir.strpath, mmap_mode='r', verbose=0) + + @memory.cache() + def twice(a): + return a * 2 + + a = np.ones(3) + + b = twice(a) + c = twice(a) + + assert isinstance(c, np.memmap) + assert c.mode == 'r' + + assert isinstance(b, np.memmap) + assert b.mode == 'r' + + # Corrupts the file, Deleting b and c mmaps + # is necessary to be able edit the file + del b + del c + gc.collect() + corrupt_single_cache_item(memory) + + # Make sure that corrupting the file causes recomputation and that + # a warning is issued. + recorded_warnings = monkeypatch_cached_func_warn(twice, monkeypatch) + d = twice(a) + assert len(recorded_warnings) == 1 + exception_msg = 'Exception while loading results' + assert exception_msg in recorded_warnings[0] + # Asserts that the recomputation returns a mmap + assert isinstance(d, np.memmap) + assert d.mode == 'r' + + +def test_memory_exception(tmpdir): + """ Smoketest the exception handling of Memory. + """ + memory = Memory(location=tmpdir.strpath, verbose=0) + + class MyException(Exception): + pass + + @memory.cache + def h(exc=0): + if exc: + raise MyException + + # Call once, to initialise the cache + h() + + for _ in range(3): + # Call 3 times, to be sure that the Exception is always raised + with raises(MyException): + h(1) + + +def test_memory_ignore(tmpdir): + " Test the ignore feature of memory " + memory = Memory(location=tmpdir.strpath, verbose=0) + accumulator = list() + + @memory.cache(ignore=['y']) + def z(x, y=1): + accumulator.append(1) + + assert z.ignore == ['y'] + + z(0, y=1) + assert len(accumulator) == 1 + z(0, y=1) + assert len(accumulator) == 1 + z(0, y=2) + assert len(accumulator) == 1 + + +def test_memory_args_as_kwargs(tmpdir): + """Non-regression test against 0.12.0 changes. + + https://github.com/joblib/joblib/pull/751 + """ + memory = Memory(location=tmpdir.strpath, verbose=0) + + @memory.cache + def plus_one(a): + return a + 1 + + # It's possible to call a positional arg as a kwarg. + assert plus_one(1) == 2 + assert plus_one(a=1) == 2 + + # However, a positional argument that joblib hadn't seen + # before would cause a failure if it was passed as a kwarg. + assert plus_one(a=2) == 3 + + +@parametrize('ignore, verbose, mmap_mode', [(['x'], 100, 'r'), + ([], 10, None)]) +def test_partial_decoration(tmpdir, ignore, verbose, mmap_mode): + "Check cache may be called with kwargs before decorating" + memory = Memory(location=tmpdir.strpath, verbose=0) + + @memory.cache(ignore=ignore, verbose=verbose, mmap_mode=mmap_mode) + def z(x): + pass + + assert z.ignore == ignore + assert z._verbose == verbose + assert z.mmap_mode == mmap_mode + + +def test_func_dir(tmpdir): + # Test the creation of the memory cache directory for the function. + memory = Memory(location=tmpdir.strpath, verbose=0) + path = __name__.split('.') + path.append('f') + path = tmpdir.join('joblib', *path).strpath + + g = memory.cache(f) + # Test that the function directory is created on demand + func_id = _build_func_identifier(f) + location = os.path.join(g.store_backend.location, func_id) + assert location == path + assert os.path.exists(path) + assert memory.location == os.path.dirname(g.store_backend.location) + with warns(DeprecationWarning) as w: + assert memory.cachedir == g.store_backend.location + assert len(w) == 1 + assert "The 'cachedir' attribute has been deprecated" in str(w[-1].message) + + # Test that the code is stored. + # For the following test to be robust to previous execution, we clear + # the in-memory store + _FUNCTION_HASHES.clear() + assert not g._check_previous_func_code() + assert os.path.exists(os.path.join(path, 'func_code.py')) + assert g._check_previous_func_code() + + # Test the robustness to failure of loading previous results. + func_id, args_id = g._get_output_identifiers(1) + output_dir = os.path.join(g.store_backend.location, func_id, args_id) + a = g(1) + assert os.path.exists(output_dir) + os.remove(os.path.join(output_dir, 'output.pkl')) + assert a == g(1) + + +def test_persistence(tmpdir): + # Test the memorized functions can be pickled and restored. + memory = Memory(location=tmpdir.strpath, verbose=0) + g = memory.cache(f) + output = g(1) + + h = pickle.loads(pickle.dumps(g)) + + func_id, args_id = h._get_output_identifiers(1) + output_dir = os.path.join(h.store_backend.location, func_id, args_id) + assert os.path.exists(output_dir) + assert output == h.store_backend.load_item([func_id, args_id]) + memory2 = pickle.loads(pickle.dumps(memory)) + assert memory.store_backend.location == memory2.store_backend.location + + # Smoke test that pickling a memory with location=None works + memory = Memory(location=None, verbose=0) + pickle.loads(pickle.dumps(memory)) + g = memory.cache(f) + gp = pickle.loads(pickle.dumps(g)) + gp(1) + + +def test_call_and_shelve(tmpdir): + # Test MemorizedFunc outputting a reference to cache. + + for func, Result in zip((MemorizedFunc(f, tmpdir.strpath), + NotMemorizedFunc(f), + Memory(location=tmpdir.strpath, + verbose=0).cache(f), + Memory(location=None).cache(f), + ), + (MemorizedResult, NotMemorizedResult, + MemorizedResult, NotMemorizedResult)): + assert func(2) == 5 + result = func.call_and_shelve(2) + assert isinstance(result, Result) + assert result.get() == 5 + + result.clear() + with raises(KeyError): + result.get() + result.clear() # Do nothing if there is no cache. + + +def test_call_and_shelve_argument_hash(tmpdir): + # Verify that a warning is raised when accessing arguments_hash + # attribute from MemorizedResult + func = Memory(location=tmpdir.strpath, verbose=0).cache(f) + result = func.call_and_shelve(2) + assert isinstance(result, MemorizedResult) + with warns(DeprecationWarning) as w: + assert result.argument_hash == result.args_id + assert len(w) == 1 + assert "The 'argument_hash' attribute has been deprecated" \ + in str(w[-1].message) + + +def test_call_and_shelve_lazily_load_stored_result(tmpdir): + """Check call_and_shelve only load stored data if needed.""" + test_access_time_file = tmpdir.join('test_access') + test_access_time_file.write('test_access') + test_access_time = os.stat(test_access_time_file.strpath).st_atime + # check file system access time stats resolution is lower than test wait + # timings. + time.sleep(0.5) + assert test_access_time_file.read() == 'test_access' + + if test_access_time == os.stat(test_access_time_file.strpath).st_atime: + # Skip this test when access time cannot be retrieved with enough + # precision from the file system (e.g. NTFS on windows). + pytest.skip("filesystem does not support fine-grained access time " + "attribute") + + memory = Memory(location=tmpdir.strpath, verbose=0) + func = memory.cache(f) + func_id, argument_hash = func._get_output_identifiers(2) + result_path = os.path.join(memory.store_backend.location, + func_id, argument_hash, 'output.pkl') + assert func(2) == 5 + first_access_time = os.stat(result_path).st_atime + time.sleep(1) + + # Should not access the stored data + result = func.call_and_shelve(2) + assert isinstance(result, MemorizedResult) + assert os.stat(result_path).st_atime == first_access_time + time.sleep(1) + + # Read the stored data => last access time is greater than first_access + assert result.get() == 5 + assert os.stat(result_path).st_atime > first_access_time + + +def test_memorized_pickling(tmpdir): + for func in (MemorizedFunc(f, tmpdir.strpath), NotMemorizedFunc(f)): + filename = tmpdir.join('pickling_test.dat').strpath + result = func.call_and_shelve(2) + with open(filename, 'wb') as fp: + pickle.dump(result, fp) + with open(filename, 'rb') as fp: + result2 = pickle.load(fp) + assert result2.get() == result.get() + os.remove(filename) + + +def test_memorized_repr(tmpdir): + func = MemorizedFunc(f, tmpdir.strpath) + result = func.call_and_shelve(2) + + func2 = MemorizedFunc(f, tmpdir.strpath) + result2 = func2.call_and_shelve(2) + assert result.get() == result2.get() + assert repr(func) == repr(func2) + + # Smoke test with NotMemorizedFunc + func = NotMemorizedFunc(f) + repr(func) + repr(func.call_and_shelve(2)) + + # Smoke test for message output (increase code coverage) + func = MemorizedFunc(f, tmpdir.strpath, verbose=11, timestamp=time.time()) + result = func.call_and_shelve(11) + result.get() + + func = MemorizedFunc(f, tmpdir.strpath, verbose=11) + result = func.call_and_shelve(11) + result.get() + + func = MemorizedFunc(f, tmpdir.strpath, verbose=5, timestamp=time.time()) + result = func.call_and_shelve(11) + result.get() + + func = MemorizedFunc(f, tmpdir.strpath, verbose=5) + result = func.call_and_shelve(11) + result.get() + + +def test_memory_file_modification(capsys, tmpdir, monkeypatch): + # Test that modifying a Python file after loading it does not lead to + # Recomputation + dir_name = tmpdir.mkdir('tmp_import').strpath + filename = os.path.join(dir_name, 'tmp_joblib_.py') + content = 'def f(x):\n print(x)\n return x\n' + with open(filename, 'w') as module_file: + module_file.write(content) + + # Load the module: + monkeypatch.syspath_prepend(dir_name) + import tmp_joblib_ as tmp + + memory = Memory(location=tmpdir.strpath, verbose=0) + f = memory.cache(tmp.f) + # First call f a few times + f(1) + f(2) + f(1) + + # Now modify the module where f is stored without modifying f + with open(filename, 'w') as module_file: + module_file.write('\n\n' + content) + + # And call f a couple more times + f(1) + f(1) + + # Flush the .pyc files + shutil.rmtree(dir_name) + os.mkdir(dir_name) + # Now modify the module where f is stored, modifying f + content = 'def f(x):\n print("x=%s" % x)\n return x\n' + with open(filename, 'w') as module_file: + module_file.write(content) + + # And call f more times prior to reloading: the cache should not be + # invalidated at this point as the active function definition has not + # changed in memory yet. + f(1) + f(1) + + # Now reload + sys.stdout.write('Reloading\n') + sys.modules.pop('tmp_joblib_') + import tmp_joblib_ as tmp + f = memory.cache(tmp.f) + + # And call f more times + f(1) + f(1) + + out, err = capsys.readouterr() + assert out == '1\n2\nReloading\nx=1\n' + + +def _function_to_cache(a, b): + # Just a place holder function to be mutated by tests + pass + + +def _sum(a, b): + return a + b + + +def _product(a, b): + return a * b + + +def test_memory_in_memory_function_code_change(tmpdir): + _function_to_cache.__code__ = _sum.__code__ + + memory = Memory(location=tmpdir.strpath, verbose=0) + f = memory.cache(_function_to_cache) + + assert f(1, 2) == 3 + assert f(1, 2) == 3 + + with warns(JobLibCollisionWarning): + # Check that inline function modification triggers a cache invalidation + _function_to_cache.__code__ = _product.__code__ + assert f(1, 2) == 2 + assert f(1, 2) == 2 + + +def test_clear_memory_with_none_location(): + memory = Memory(location=None) + memory.clear() + + +if PY3_OR_LATER: + # Avoid flake8 F821 "undefined name" warning. func_with_kwonly_args and + # func_with_signature are redefined in the exec statement a few lines below + def func_with_kwonly_args(): + pass + + def func_with_signature(): + pass + + # exec is needed to define a function with a keyword-only argument and a + # function with signature while avoiding a SyntaxError on Python 2 + exec(""" +def func_with_kwonly_args(a, b, *, kw1='kw1', kw2='kw2'): + return a, b, kw1, kw2 + +def func_with_signature(a: int, b: float) -> float: + return a + b +""") + + def test_memory_func_with_kwonly_args(tmpdir): + memory = Memory(location=tmpdir.strpath, verbose=0) + func_cached = memory.cache(func_with_kwonly_args) + + assert func_cached(1, 2, kw1=3) == (1, 2, 3, 'kw2') + + # Making sure that providing a keyword-only argument by + # position raises an exception + with raises(ValueError) as excinfo: + func_cached(1, 2, 3, kw2=4) + excinfo.match("Keyword-only parameter 'kw1' was passed as positional " + "parameter") + + # Keyword-only parameter passed by position with cached call + # should still raise ValueError + func_cached(1, 2, kw1=3, kw2=4) + + with raises(ValueError) as excinfo: + func_cached(1, 2, 3, kw2=4) + excinfo.match("Keyword-only parameter 'kw1' was passed as positional " + "parameter") + + # Test 'ignore' parameter + func_cached = memory.cache(func_with_kwonly_args, ignore=['kw2']) + assert func_cached(1, 2, kw1=3, kw2=4) == (1, 2, 3, 4) + assert func_cached(1, 2, kw1=3, kw2='ignored') == (1, 2, 3, 4) + + def test_memory_func_with_signature(tmpdir): + memory = Memory(location=tmpdir.strpath, verbose=0) + func_cached = memory.cache(func_with_signature) + + assert func_cached(1, 2.) == 3. + + +def _setup_toy_cache(tmpdir, num_inputs=10): + memory = Memory(location=tmpdir.strpath, verbose=0) + + @memory.cache() + def get_1000_bytes(arg): + return 'a' * 1000 + + inputs = list(range(num_inputs)) + for arg in inputs: + get_1000_bytes(arg) + + func_id = _build_func_identifier(get_1000_bytes) + hash_dirnames = [get_1000_bytes._get_output_identifiers(arg)[1] + for arg in inputs] + + full_hashdirs = [os.path.join(get_1000_bytes.store_backend.location, + func_id, dirname) + for dirname in hash_dirnames] + return memory, full_hashdirs, get_1000_bytes + + +def test__get_items(tmpdir): + memory, expected_hash_dirs, _ = _setup_toy_cache(tmpdir) + items = memory.store_backend.get_items() + hash_dirs = [ci.path for ci in items] + assert set(hash_dirs) == set(expected_hash_dirs) + + def get_files_size(directory): + full_paths = [os.path.join(directory, fn) + for fn in os.listdir(directory)] + return sum(os.path.getsize(fp) for fp in full_paths) + + expected_hash_cache_sizes = [get_files_size(hash_dir) + for hash_dir in hash_dirs] + hash_cache_sizes = [ci.size for ci in items] + assert hash_cache_sizes == expected_hash_cache_sizes + + output_filenames = [os.path.join(hash_dir, 'output.pkl') + for hash_dir in hash_dirs] + + expected_last_accesses = [ + datetime.datetime.fromtimestamp(os.path.getatime(fn)) + for fn in output_filenames] + last_accesses = [ci.last_access for ci in items] + assert last_accesses == expected_last_accesses + + +def test__get_items_to_delete(tmpdir): + memory, expected_hash_cachedirs, _ = _setup_toy_cache(tmpdir) + items = memory.store_backend.get_items() + # bytes_limit set to keep only one cache item (each hash cache + # folder is about 1000 bytes + metadata) + items_to_delete = memory.store_backend._get_items_to_delete('2K') + nb_hashes = len(expected_hash_cachedirs) + assert set.issubset(set(items_to_delete), set(items)) + assert len(items_to_delete) == nb_hashes - 1 + + # Sanity check bytes_limit=2048 is the same as bytes_limit='2K' + items_to_delete_2048b = memory.store_backend._get_items_to_delete(2048) + assert sorted(items_to_delete) == sorted(items_to_delete_2048b) + + # bytes_limit greater than the size of the cache + items_to_delete_empty = memory.store_backend._get_items_to_delete('1M') + assert items_to_delete_empty == [] + + # All the cache items need to be deleted + bytes_limit_too_small = 500 + items_to_delete_500b = memory.store_backend._get_items_to_delete( + bytes_limit_too_small) + assert set(items_to_delete_500b), set(items) + + # Test LRU property: surviving cache items should all have a more + # recent last_access that the ones that have been deleted + items_to_delete_6000b = memory.store_backend._get_items_to_delete(6000) + surviving_items = set(items).difference(items_to_delete_6000b) + + assert (max(ci.last_access for ci in items_to_delete_6000b) <= + min(ci.last_access for ci in surviving_items)) + + +def test_memory_reduce_size(tmpdir): + memory, _, _ = _setup_toy_cache(tmpdir) + ref_cache_items = memory.store_backend.get_items() + + # By default memory.bytes_limit is None and reduce_size is a noop + memory.reduce_size() + cache_items = memory.store_backend.get_items() + assert sorted(ref_cache_items) == sorted(cache_items) + + # No cache items deleted if bytes_limit greater than the size of + # the cache + memory.bytes_limit = '1M' + memory.reduce_size() + cache_items = memory.store_backend.get_items() + assert sorted(ref_cache_items) == sorted(cache_items) + + # bytes_limit is set so that only two cache items are kept + memory.bytes_limit = '3K' + memory.reduce_size() + cache_items = memory.store_backend.get_items() + assert set.issubset(set(cache_items), set(ref_cache_items)) + assert len(cache_items) == 2 + + # bytes_limit set so that no cache item is kept + bytes_limit_too_small = 500 + memory.bytes_limit = bytes_limit_too_small + memory.reduce_size() + cache_items = memory.store_backend.get_items() + assert cache_items == [] + + +def test_memory_clear(tmpdir): + memory, _, _ = _setup_toy_cache(tmpdir) + memory.clear() + + assert os.listdir(memory.store_backend.location) == [] + + +def fast_func_with_complex_output(): + complex_obj = ['a' * 1000] * 1000 + return complex_obj + + +def fast_func_with_conditional_complex_output(complex_output=True): + complex_obj = {str(i): i for i in range(int(1e5))} + return complex_obj if complex_output else 'simple output' + + +@with_multiprocessing +def test_cached_function_race_condition_when_persisting_output(tmpdir, capfd): + # Test race condition where multiple processes are writing into + # the same output.pkl. See + # https://github.com/joblib/joblib/issues/490 for more details. + memory = Memory(location=tmpdir.strpath) + func_cached = memory.cache(fast_func_with_complex_output) + + Parallel(n_jobs=2)(delayed(func_cached)() for i in range(3)) + + stdout, stderr = capfd.readouterr() + + # Checking both stdout and stderr (ongoing PR #434 may change + # logging destination) to make sure there is no exception while + # loading the results + exception_msg = 'Exception while loading results' + assert exception_msg not in stdout + assert exception_msg not in stderr + + +@with_multiprocessing +def test_cached_function_race_condition_when_persisting_output_2(tmpdir, + capfd): + # Test race condition in first attempt at solving + # https://github.com/joblib/joblib/issues/490. The race condition + # was due to the delay between seeing the cache directory created + # (interpreted as the result being cached) and the output.pkl being + # pickled. + memory = Memory(location=tmpdir.strpath) + func_cached = memory.cache(fast_func_with_conditional_complex_output) + + Parallel(n_jobs=2)(delayed(func_cached)(True if i % 2 == 0 else False) + for i in range(3)) + + stdout, stderr = capfd.readouterr() + + # Checking both stdout and stderr (ongoing PR #434 may change + # logging destination) to make sure there is no exception while + # loading the results + exception_msg = 'Exception while loading results' + assert exception_msg not in stdout + assert exception_msg not in stderr + + +def test_memory_recomputes_after_an_error_while_loading_results( + tmpdir, monkeypatch): + memory = Memory(location=tmpdir.strpath) + + def func(arg): + # This makes sure that the timestamp returned by two calls of + # func are different. This is needed on Windows where + # time.time resolution may not be accurate enough + time.sleep(0.01) + return arg, time.time() + + cached_func = memory.cache(func) + input_arg = 'arg' + arg, timestamp = cached_func(input_arg) + + # Make sure the function is correctly cached + assert arg == input_arg + + # Corrupting output.pkl to make sure that an error happens when + # loading the cached result + corrupt_single_cache_item(memory) + + # Make sure that corrupting the file causes recomputation and that + # a warning is issued. + recorded_warnings = monkeypatch_cached_func_warn(cached_func, monkeypatch) + recomputed_arg, recomputed_timestamp = cached_func(arg) + assert len(recorded_warnings) == 1 + exception_msg = 'Exception while loading results' + assert exception_msg in recorded_warnings[0] + assert recomputed_arg == arg + assert recomputed_timestamp > timestamp + + # Corrupting output.pkl to make sure that an error happens when + # loading the cached result + corrupt_single_cache_item(memory) + reference = cached_func.call_and_shelve(arg) + try: + reference.get() + raise AssertionError( + "It normally not possible to load a corrupted" + " MemorizedResult" + ) + except KeyError as e: + message = "is corrupted" + assert message in str(e.args) + + +def test_deprecated_cachedir_behaviour(tmpdir): + # verify the right deprecation warnings are raised when using cachedir + # option instead of new location parameter. + with warns(None) as w: + memory = Memory(cachedir=tmpdir.strpath, verbose=0) + assert memory.store_backend.location.startswith(tmpdir.strpath) + + assert len(w) == 1 + assert "The 'cachedir' parameter has been deprecated" in str(w[-1].message) + + with warns(None) as w: + memory = Memory() + assert memory.cachedir is None + + assert len(w) == 1 + assert "The 'cachedir' attribute has been deprecated" in str(w[-1].message) + + error_regex = """You set both "location='.+ and "cachedir='.+""" + with raises(ValueError, match=error_regex): + memory = Memory(location=tmpdir.strpath, cachedir=tmpdir.strpath, + verbose=0) + + +class IncompleteStoreBackend(StoreBackendBase): + """This backend cannot be instanciated and should raise a TypeError.""" + pass + + +class DummyStoreBackend(StoreBackendBase): + """A dummy store backend that does nothing.""" + + def _open_item(self, *args, **kwargs): + """Open an item on store.""" + "Does nothing" + + def _item_exists(self, location): + """Check if an item location exists.""" + "Does nothing" + + def _move_item(self, src, dst): + """Move an item from src to dst in store.""" + "Does nothing" + + def create_location(self, location): + """Create location on store.""" + "Does nothing" + + def exists(self, obj): + """Check if an object exists in the store""" + return False + + def clear_location(self, obj): + """Clear object on store""" + "Does nothing" + + def get_items(self): + """Returns the whole list of items available in cache.""" + return [] + + def configure(self, location, *args, **kwargs): + """Configure the store""" + "Does nothing" + + +@parametrize("invalid_prefix", [None, dict(), list()]) +def test_register_invalid_store_backends_key(invalid_prefix): + # verify the right exceptions are raised when passing a wrong backend key. + with raises(ValueError) as excinfo: + register_store_backend(invalid_prefix, None) + excinfo.match(r'Store backend name should be a string*') + + +def test_register_invalid_store_backends_object(): + # verify the right exceptions are raised when passing a wrong backend + # object. + with raises(ValueError) as excinfo: + register_store_backend("fs", None) + excinfo.match(r'Store backend should inherit StoreBackendBase*') + + +def test_memory_default_store_backend(): + # test an unknow backend falls back into a FileSystemStoreBackend + with raises(TypeError) as excinfo: + Memory(location='/tmp/joblib', backend='unknown') + excinfo.match(r"Unknown location*") + + +def test_warning_on_unknown_location_type(): + class NonSupportedLocationClass: + pass + unsupported_location = NonSupportedLocationClass() + + with warns(UserWarning) as warninfo: + _store_backend_factory("local", location=unsupported_location) + + expected_mesage = ("Instanciating a backend using a " + "NonSupportedLocationClass as a location is not " + "supported by joblib") + assert expected_mesage in str(warninfo[0].message) + + +def test_instanciate_incomplete_store_backend(): + # Verify that registering an external incomplete store backend raises an + # exception when one tries to instanciate it. + backend_name = "isb" + register_store_backend(backend_name, IncompleteStoreBackend) + assert (backend_name, IncompleteStoreBackend) in _STORE_BACKENDS.items() + with raises(TypeError) as excinfo: + _store_backend_factory(backend_name, "fake_location") + excinfo.match(r"Can't instantiate abstract class " + "IncompleteStoreBackend with abstract methods*") + + +def test_dummy_store_backend(): + # Verify that registering an external store backend works. + + backend_name = "dsb" + register_store_backend(backend_name, DummyStoreBackend) + assert (backend_name, DummyStoreBackend) in _STORE_BACKENDS.items() + + backend_obj = _store_backend_factory(backend_name, "dummy_location") + assert isinstance(backend_obj, DummyStoreBackend) + + +@pytest.mark.skipif(sys.version_info[:2] < (3, 4), + reason="pathlib is available for python versions >= 3.4") +def test_instanciate_store_backend_with_pathlib_path(): + # Instanciate a FileSystemStoreBackend using a pathlib.Path object + path = pathlib.Path("some_folder") + backend_obj = _store_backend_factory("local", path) + assert backend_obj.location == "some_folder" + + +def test_filesystem_store_backend_repr(tmpdir): + # Verify string representation of a filesystem store backend. + + repr_pattern = 'FileSystemStoreBackend(location="{location}")' + backend = FileSystemStoreBackend() + assert backend.location is None + + repr(backend) # Should not raise an exception + + assert str(backend) == repr_pattern.format(location=None) + + # backend location is passed explicitely via the configure method (called + # by the internal _store_backend_factory function) + backend.configure(tmpdir.strpath) + + assert str(backend) == repr_pattern.format(location=tmpdir.strpath) + + repr(backend) # Should not raise an exception + + +def test_memory_objects_repr(tmpdir): + # Verify printable reprs of MemorizedResult, MemorizedFunc and Memory. + + def my_func(a, b): + return a + b + + memory = Memory(location=tmpdir.strpath, verbose=0) + memorized_func = memory.cache(my_func) + + memorized_func_repr = 'MemorizedFunc(func={func}, location={location})' + + assert str(memorized_func) == memorized_func_repr.format( + func=my_func, + location=memory.store_backend.location) + + memorized_result = memorized_func.call_and_shelve(42, 42) + + memorized_result_repr = ('MemorizedResult(location="{location}", ' + 'func="{func}", args_id="{args_id}")') + + assert str(memorized_result) == memorized_result_repr.format( + location=memory.store_backend.location, + func=memorized_result.func_id, + args_id=memorized_result.args_id) + + assert str(memory) == 'Memory(location={location})'.format( + location=memory.store_backend.location) + + +def test_memorized_result_pickle(tmpdir): + # Verify a MemoryResult object can be pickled/depickled. Non regression + # test introduced following issue + # https://github.com/joblib/joblib/issues/747 + + memory = Memory(location=tmpdir.strpath) + + @memory.cache + def g(x): + return x**2 + + memorized_result = g.call_and_shelve(4) + memorized_result_pickle = pickle.dumps(memorized_result) + memorized_result_loads = pickle.loads(memorized_result_pickle) + + assert memorized_result.store_backend.location == \ + memorized_result_loads.store_backend.location + assert memorized_result.func == memorized_result_loads.func + assert memorized_result.args_id == memorized_result_loads.args_id + assert str(memorized_result) == str(memorized_result_loads) + + +def compare(left, right, ignored_attrs=None): + if ignored_attrs is None: + ignored_attrs = [] + + left_vars = vars(left) + right_vars = vars(right) + assert set(left_vars.keys()) == set(right_vars.keys()) + for attr in left_vars.keys(): + if attr in ignored_attrs: + continue + assert left_vars[attr] == right_vars[attr] + + +@pytest.mark.parametrize('memory_kwargs', + [{'compress': 3, 'verbose': 2}, + {'mmap_mode': 'r', 'verbose': 5, 'bytes_limit': 1e6, + 'backend_options': {'parameter': 'unused'}}]) +def test_memory_pickle_dump_load(tmpdir, memory_kwargs): + memory = Memory(location=tmpdir.strpath, **memory_kwargs) + + memory_reloaded = pickle.loads(pickle.dumps(memory)) + + # Compare Memory instance before and after pickle roundtrip + compare(memory.store_backend, memory_reloaded.store_backend) + compare(memory, memory_reloaded, + ignored_attrs=set(['store_backend', 'timestamp'])) + assert hash(memory) == hash(memory_reloaded) + + func_cached = memory.cache(f) + + func_cached_reloaded = pickle.loads(pickle.dumps(func_cached)) + + # Compare MemorizedFunc instance before/after pickle roundtrip + compare(func_cached.store_backend, func_cached_reloaded.store_backend) + compare(func_cached, func_cached_reloaded, + ignored_attrs=set(['store_backend', 'timestamp'])) + assert hash(func_cached) == hash(func_cached_reloaded) + + # Compare MemorizedResult instance before/after pickle roundtrip + memorized_result = func_cached.call_and_shelve(1) + memorized_result_reloaded = pickle.loads(pickle.dumps(memorized_result)) + + compare(memorized_result.store_backend, + memorized_result_reloaded.store_backend) + compare(memorized_result, memorized_result_reloaded, + ignored_attrs=set(['store_backend', 'timestamp'])) + assert hash(memorized_result) == hash(memorized_result_reloaded) diff --git a/my_env/Lib/site-packages/joblib/test/test_module.py b/my_env/Lib/site-packages/joblib/test/test_module.py new file mode 100644 index 000000000..2f04fb588 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_module.py @@ -0,0 +1,53 @@ +import sys +import joblib +import pytest +from joblib._compat import PY27 +from joblib.testing import check_subprocess_call + + +def test_version(): + assert hasattr(joblib, '__version__'), ( + "There are no __version__ argument on the joblib module") + + +@pytest.mark.skipif(PY27, reason="Need python3.3+") +def test_no_start_method_side_effect_on_import(): + # check that importing joblib does not implicitly set the global + # start_method for multiprocessing. + code = """if True: + import joblib + import multiprocessing as mp + # The following line would raise RuntimeError if the + # start_method is already set. + mp.set_start_method("loky") + """ + check_subprocess_call([sys.executable, '-c', code]) + + +@pytest.mark.skipif(PY27, reason="Need python3.3+") +def test_no_semaphore_tracker_on_import(): + # check that importing joblib does not implicitly spawn a resource tracker + # or a semaphore tracker + code = """if True: + import joblib + from multiprocessing import semaphore_tracker + # The following line would raise RuntimeError if the + # start_method is already set. + msg = "multiprocessing.semaphore_tracker has been spawned on import" + assert semaphore_tracker._semaphore_tracker._fd is None, msg""" + if sys.version_info >= (3, 8): + # semaphore_tracker was renamed in Python 3.8: + code = code.replace("semaphore_tracker", "resource_tracker") + check_subprocess_call([sys.executable, '-c', code]) + + +def test_no_ressource_tracker_on_import(): + code = """if True: + import joblib + from joblib.externals.loky.backend import resource_tracker + # The following line would raise RuntimeError if the + # start_method is already set. + msg = "loky.resource_tracker has been spawned on import" + assert resource_tracker._resource_tracker._fd is None, msg + """ + check_subprocess_call([sys.executable, '-c', code]) diff --git a/my_env/Lib/site-packages/joblib/test/test_my_exceptions.py b/my_env/Lib/site-packages/joblib/test/test_my_exceptions.py new file mode 100644 index 000000000..09988f675 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_my_exceptions.py @@ -0,0 +1,66 @@ +""" +Test my automatically generate exceptions +""" +from joblib import my_exceptions + + +class CustomException(Exception): + def __init__(self, a, b, c, d): + self.a, self.b, self.c, self.d = a, b, c, d + + +class CustomException2(Exception): + """A custom exception with a .args attribute + + Just to check that the JoblibException created from it + has it args set correctly + """ + def __init__(self, a, *args): + self.a = a + self.args = args + + +def test_inheritance(): + assert isinstance(my_exceptions.JoblibNameError(), NameError) + assert isinstance(my_exceptions.JoblibNameError(), + my_exceptions.JoblibException) + assert (my_exceptions.JoblibNameError is + my_exceptions._mk_exception(NameError)[0]) + + +def test_inheritance_special_cases(): + # _mk_exception should transform Exception to JoblibException + assert (my_exceptions._mk_exception(Exception)[0] is + my_exceptions.JoblibException) + + # Subclasses of JoblibException should be mapped to + # them-selves by _mk_exception + for exception_type in [my_exceptions.JoblibException, + my_exceptions.TransportableException]: + assert (my_exceptions._mk_exception(exception_type)[0] is + exception_type) + + # Non-inheritable exception classes should be mapped to + # JoblibException by _mk_exception. That can happen with classes + # generated with SWIG. See + # https://github.com/joblib/joblib/issues/269 for a concrete + # example. + non_inheritable_classes = [type(lambda: None), bool] + for exception in non_inheritable_classes: + assert (my_exceptions._mk_exception(exception)[0] is + my_exceptions.JoblibException) + + +def test__mk_exception(): + # Check that _mk_exception works on a bunch of different exceptions + for klass in (Exception, TypeError, SyntaxError, ValueError, + ImportError, CustomException, CustomException2): + message = 'This message should be in the exception repr' + exc = my_exceptions._mk_exception(klass)[0]( + message, 'some', 'other', 'args', 'that are not', 'in the repr') + exc_repr = repr(exc) + + assert isinstance(exc, klass) + assert isinstance(exc, my_exceptions.JoblibException) + assert exc.__class__.__name__ in exc_repr + assert message in exc_repr diff --git a/my_env/Lib/site-packages/joblib/test/test_numpy_pickle.py b/my_env/Lib/site-packages/joblib/test/test_numpy_pickle.py new file mode 100644 index 000000000..c6639d3dd --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_numpy_pickle.py @@ -0,0 +1,1074 @@ +"""Test the numpy pickler as a replacement of the standard pickler.""" + +import copy +import os +import random +import sys +import re +import io +import warnings +import gzip +import zlib +import bz2 +import pickle +import socket +from contextlib import closing +import mmap + +from joblib.test.common import np, with_numpy, with_lz4, without_lz4 +from joblib.test.common import with_memory_profiler, memory_used +from joblib.testing import parametrize, raises, SkipTest, warns + +# numpy_pickle is not a drop-in replacement of pickle, as it takes +# filenames instead of open files as arguments. +from joblib import numpy_pickle, register_compressor +from joblib.test import data + +from joblib._compat import PY3_OR_LATER +from joblib.numpy_pickle_utils import _IO_BUFFER_SIZE +from joblib.numpy_pickle_utils import _detect_compressor +from joblib.compressor import (_COMPRESSORS, _LZ4_PREFIX, CompressorWrapper, + LZ4_NOT_INSTALLED_ERROR, BinaryZlibFile) + +############################################################################### +# Define a list of standard types. +# Borrowed from dill, initial author: Micheal McKerns: +# http://dev.danse.us/trac/pathos/browser/dill/dill_test2.py + +typelist = [] + +# testing types +_none = None +typelist.append(_none) +_type = type +typelist.append(_type) +_bool = bool(1) +typelist.append(_bool) +_int = int(1) +typelist.append(_int) +try: + _long = long(1) + typelist.append(_long) +except NameError: + # long is not defined in python 3 + pass +_float = float(1) +typelist.append(_float) +_complex = complex(1) +typelist.append(_complex) +_string = str(1) +typelist.append(_string) +try: + _unicode = unicode(1) + typelist.append(_unicode) +except NameError: + # unicode is not defined in python 3 + pass +_tuple = () +typelist.append(_tuple) +_list = [] +typelist.append(_list) +_dict = {} +typelist.append(_dict) +try: + _file = file + typelist.append(_file) +except NameError: + pass # file does not exists in Python 3 +try: + _buffer = buffer + typelist.append(_buffer) +except NameError: + # buffer does not exists in Python 3 + pass +_builtin = len +typelist.append(_builtin) + + +def _function(x): + yield x + + +class _class: + def _method(self): + pass + + +class _newclass(object): + def _method(self): + pass + + +typelist.append(_function) +typelist.append(_class) +typelist.append(_newclass) # +_instance = _class() +typelist.append(_instance) +_object = _newclass() +typelist.append(_object) # + + +############################################################################### +# Tests + +@parametrize('compress', [0, 1]) +@parametrize('member', typelist) +def test_standard_types(tmpdir, compress, member): + # Test pickling and saving with standard types. + filename = tmpdir.join('test.pkl').strpath + numpy_pickle.dump(member, filename, compress=compress) + _member = numpy_pickle.load(filename) + # We compare the pickled instance to the reloaded one only if it + # can be compared to a copied one + if member == copy.deepcopy(member): + assert member == _member + + +def test_value_error(): + # Test inverting the input arguments to dump + with raises(ValueError): + numpy_pickle.dump('foo', dict()) + + +@parametrize('wrong_compress', [-1, 10, dict()]) +def test_compress_level_error(wrong_compress): + # Verify that passing an invalid compress argument raises an error. + exception_msg = ('Non valid compress level given: ' + '"{0}"'.format(wrong_compress)) + with raises(ValueError) as excinfo: + numpy_pickle.dump('dummy', 'foo', compress=wrong_compress) + excinfo.match(exception_msg) + + +@with_numpy +@parametrize('compress', [False, True, 0, 3, 'zlib']) +def test_numpy_persistence(tmpdir, compress): + filename = tmpdir.join('test.pkl').strpath + rnd = np.random.RandomState(0) + a = rnd.random_sample((10, 2)) + # We use 'a.T' to have a non C-contiguous array. + for index, obj in enumerate(((a,), (a.T,), (a, a), [a, a, a])): + filenames = numpy_pickle.dump(obj, filename, compress=compress) + + # All is cached in one file + assert len(filenames) == 1 + # Check that only one file was created + assert filenames[0] == filename + # Check that this file does exist + assert os.path.exists(filenames[0]) + + # Unpickle the object + obj_ = numpy_pickle.load(filename) + # Check that the items are indeed arrays + for item in obj_: + assert isinstance(item, np.ndarray) + # And finally, check that all the values are equal. + np.testing.assert_array_equal(np.array(obj), np.array(obj_)) + + # Now test with array subclasses + for obj in (np.matrix(np.zeros(10)), + np.memmap(filename + 'mmap', + mode='w+', shape=4, dtype=np.float)): + filenames = numpy_pickle.dump(obj, filename, compress=compress) + # All is cached in one file + assert len(filenames) == 1 + + obj_ = numpy_pickle.load(filename) + if (type(obj) is not np.memmap and + hasattr(obj, '__array_prepare__')): + # We don't reconstruct memmaps + assert isinstance(obj_, type(obj)) + + np.testing.assert_array_equal(obj_, obj) + + # Test with an object containing multiple numpy arrays + obj = ComplexTestObject() + filenames = numpy_pickle.dump(obj, filename, compress=compress) + # All is cached in one file + assert len(filenames) == 1 + + obj_loaded = numpy_pickle.load(filename) + assert isinstance(obj_loaded, type(obj)) + np.testing.assert_array_equal(obj_loaded.array_float, obj.array_float) + np.testing.assert_array_equal(obj_loaded.array_int, obj.array_int) + np.testing.assert_array_equal(obj_loaded.array_obj, obj.array_obj) + + +@with_numpy +def test_numpy_persistence_bufferred_array_compression(tmpdir): + big_array = np.ones((_IO_BUFFER_SIZE + 100), dtype=np.uint8) + filename = tmpdir.join('test.pkl').strpath + numpy_pickle.dump(big_array, filename, compress=True) + arr_reloaded = numpy_pickle.load(filename) + + np.testing.assert_array_equal(big_array, arr_reloaded) + + +@with_numpy +def test_memmap_persistence(tmpdir): + rnd = np.random.RandomState(0) + a = rnd.random_sample(10) + filename = tmpdir.join('test1.pkl').strpath + numpy_pickle.dump(a, filename) + b = numpy_pickle.load(filename, mmap_mode='r') + + assert isinstance(b, np.memmap) + + # Test with an object containing multiple numpy arrays + filename = tmpdir.join('test2.pkl').strpath + obj = ComplexTestObject() + numpy_pickle.dump(obj, filename) + obj_loaded = numpy_pickle.load(filename, mmap_mode='r') + assert isinstance(obj_loaded, type(obj)) + assert isinstance(obj_loaded.array_float, np.memmap) + assert not obj_loaded.array_float.flags.writeable + assert isinstance(obj_loaded.array_int, np.memmap) + assert not obj_loaded.array_int.flags.writeable + # Memory map not allowed for numpy object arrays + assert not isinstance(obj_loaded.array_obj, np.memmap) + np.testing.assert_array_equal(obj_loaded.array_float, + obj.array_float) + np.testing.assert_array_equal(obj_loaded.array_int, + obj.array_int) + np.testing.assert_array_equal(obj_loaded.array_obj, + obj.array_obj) + + # Test we can write in memmapped arrays + obj_loaded = numpy_pickle.load(filename, mmap_mode='r+') + assert obj_loaded.array_float.flags.writeable + obj_loaded.array_float[0:10] = 10.0 + assert obj_loaded.array_int.flags.writeable + obj_loaded.array_int[0:10] = 10 + + obj_reloaded = numpy_pickle.load(filename, mmap_mode='r') + np.testing.assert_array_equal(obj_reloaded.array_float, + obj_loaded.array_float) + np.testing.assert_array_equal(obj_reloaded.array_int, + obj_loaded.array_int) + + # Test w+ mode is caught and the mode has switched to r+ + numpy_pickle.load(filename, mmap_mode='w+') + assert obj_loaded.array_int.flags.writeable + assert obj_loaded.array_int.mode == 'r+' + assert obj_loaded.array_float.flags.writeable + assert obj_loaded.array_float.mode == 'r+' + + +@with_numpy +def test_memmap_persistence_mixed_dtypes(tmpdir): + # loading datastructures that have sub-arrays with dtype=object + # should not prevent memmapping on fixed size dtype sub-arrays. + rnd = np.random.RandomState(0) + a = rnd.random_sample(10) + b = np.array([1, 'b'], dtype=object) + construct = (a, b) + filename = tmpdir.join('test.pkl').strpath + numpy_pickle.dump(construct, filename) + a_clone, b_clone = numpy_pickle.load(filename, mmap_mode='r') + + # the floating point array has been memory mapped + assert isinstance(a_clone, np.memmap) + + # the object-dtype array has been loaded in memory + assert not isinstance(b_clone, np.memmap) + + +@with_numpy +def test_masked_array_persistence(tmpdir): + # The special-case picker fails, because saving masked_array + # not implemented, but it just delegates to the standard pickler. + rnd = np.random.RandomState(0) + a = rnd.random_sample(10) + a = np.ma.masked_greater(a, 0.5) + filename = tmpdir.join('test.pkl').strpath + numpy_pickle.dump(a, filename) + b = numpy_pickle.load(filename, mmap_mode='r') + assert isinstance(b, np.ma.masked_array) + + +@with_numpy +def test_compress_mmap_mode_warning(tmpdir): + # Test the warning in case of compress + mmap_mode + rnd = np.random.RandomState(0) + a = rnd.random_sample(10) + this_filename = tmpdir.join('test.pkl').strpath + numpy_pickle.dump(a, this_filename, compress=1) + with warns(UserWarning) as warninfo: + numpy_pickle.load(this_filename, mmap_mode='r+') + assert len(warninfo) == 1 + assert (str(warninfo[0].message) == + 'mmap_mode "%(mmap_mode)s" is not compatible with compressed ' + 'file %(filename)s. "%(mmap_mode)s" flag will be ignored.' % + {'filename': this_filename, 'mmap_mode': 'r+'}) + + +@with_numpy +@parametrize('cache_size', [None, 0, 10]) +def test_cache_size_warning(tmpdir, cache_size): + # Check deprecation warning raised when cache size is not None + filename = tmpdir.join('test.pkl').strpath + rnd = np.random.RandomState(0) + a = rnd.random_sample((10, 2)) + + warnings.simplefilter("always") + with warns(None) as warninfo: + numpy_pickle.dump(a, filename, cache_size=cache_size) + expected_nb_warnings = 1 if cache_size is not None else 0 + assert len(warninfo) == expected_nb_warnings + for w in warninfo: + assert w.category == DeprecationWarning + assert (str(w.message) == + "Please do not set 'cache_size' in joblib.dump, this " + "parameter has no effect and will be removed. You " + "used 'cache_size={0}'".format(cache_size)) + + +@with_numpy +@with_memory_profiler +@parametrize('compress', [True, False]) +def test_memory_usage(tmpdir, compress): + # Verify memory stays within expected bounds. + filename = tmpdir.join('test.pkl').strpath + small_array = np.ones((10, 10)) + big_array = np.ones(shape=100 * int(1e6), dtype=np.uint8) + small_matrix = np.matrix(small_array) + big_matrix = np.matrix(big_array) + + for obj in (small_array, big_array, small_matrix, big_matrix): + size = obj.nbytes / 1e6 + obj_filename = filename + str(np.random.randint(0, 1000)) + mem_used = memory_used(numpy_pickle.dump, + obj, obj_filename, compress=compress) + + # The memory used to dump the object shouldn't exceed the buffer + # size used to write array chunks (16MB). + write_buf_size = _IO_BUFFER_SIZE + 16 * 1024 ** 2 / 1e6 + assert mem_used <= write_buf_size + + mem_used = memory_used(numpy_pickle.load, obj_filename) + # memory used should be less than array size + buffer size used to + # read the array chunk by chunk. + read_buf_size = 32 + _IO_BUFFER_SIZE # MiB + assert mem_used < size + read_buf_size + + +@with_numpy +def test_compressed_pickle_dump_and_load(tmpdir): + expected_list = [np.arange(5, dtype=np.dtype('i8')), + np.arange(5, dtype=np.dtype('f8')), + np.array([1, 'abc', {'a': 1, 'b': 2}], dtype='O'), + # .tostring actually returns bytes and is a + # compatibility alias for .tobytes which was + # added in 1.9.0 + np.arange(256, dtype=np.uint8).tostring(), + # np.matrix is a subclass of np.ndarray, here we want + # to verify this type of object is correctly unpickled + # among versions. + np.matrix([0, 1, 2], dtype=np.dtype('i8')), + u"C'est l'\xe9t\xe9 !"] + + fname = tmpdir.join('temp.pkl.gz').strpath + + dumped_filenames = numpy_pickle.dump(expected_list, fname, compress=1) + assert len(dumped_filenames) == 1 + result_list = numpy_pickle.load(fname) + for result, expected in zip(result_list, expected_list): + if isinstance(expected, np.ndarray): + assert result.dtype == expected.dtype + np.testing.assert_equal(result, expected) + else: + assert result == expected + + +def _check_pickle(filename, expected_list): + """Helper function to test joblib pickle content. + + Note: currently only pickles containing an iterable are supported + by this function. + """ + if not PY3_OR_LATER: + if filename.endswith('.xz') or filename.endswith('.lzma'): + # lzma is not implemented in python versions < 3.3 + with raises(NotImplementedError): + numpy_pickle.load(filename) + elif filename.endswith('.lz4'): + # lz4 is not supported for python versions < 3.3 + with raises(ValueError) as excinfo: + numpy_pickle.load(filename) + assert excinfo.match("lz4 compression is only available with " + "python3+") + return + + version_match = re.match(r'.+py(\d)(\d).+', filename) + py_version_used_for_writing = int(version_match.group(1)) + py_version_used_for_reading = sys.version_info[0] + + py_version_to_default_pickle_protocol = {2: 2, 3: 3} + pickle_reading_protocol = py_version_to_default_pickle_protocol.get( + py_version_used_for_reading, 4) + pickle_writing_protocol = py_version_to_default_pickle_protocol.get( + py_version_used_for_writing, 4) + if pickle_reading_protocol >= pickle_writing_protocol: + try: + with warns(None) as warninfo: + warnings.simplefilter('always') + warnings.filterwarnings( + 'ignore', module='numpy', + message='The compiler package is deprecated') + result_list = numpy_pickle.load(filename) + filename_base = os.path.basename(filename) + expected_nb_warnings = 1 if ("_0.9" in filename_base or + "_0.8.4" in filename_base) else 0 + assert len(warninfo) == expected_nb_warnings + for w in warninfo: + assert w.category == DeprecationWarning + assert (str(w.message) == + "The file '{0}' has been generated with a joblib " + "version less than 0.10. Please regenerate this " + "pickle file.".format(filename)) + for result, expected in zip(result_list, expected_list): + if isinstance(expected, np.ndarray): + assert result.dtype == expected.dtype + np.testing.assert_equal(result, expected) + else: + assert result == expected + except Exception as exc: + # When trying to read with python 3 a pickle generated + # with python 2 we expect a user-friendly error + if (py_version_used_for_reading == 3 and + py_version_used_for_writing == 2): + assert isinstance(exc, ValueError) + message = ('You may be trying to read with ' + 'python 3 a joblib pickle generated with python 2.') + assert message in str(exc) + elif filename.endswith('.lz4') and with_lz4.args[0]: + assert isinstance(exc, ValueError) + assert LZ4_NOT_INSTALLED_ERROR in str(exc) + else: + raise + else: + # Pickle protocol used for writing is too high. We expect a + # "unsupported pickle protocol" error message + try: + numpy_pickle.load(filename) + raise AssertionError('Numpy pickle loading should ' + 'have raised a ValueError exception') + except ValueError as e: + message = 'unsupported pickle protocol: {0}'.format( + pickle_writing_protocol) + assert message in str(e.args) + + +@with_numpy +def test_joblib_pickle_across_python_versions(): + # We need to be specific about dtypes in particular endianness + # because the pickles can be generated on one architecture and + # the tests run on another one. See + # https://github.com/joblib/joblib/issues/279. + expected_list = [np.arange(5, dtype=np.dtype('= 3.3 + msg = "{} compression is only available".format(cmethod) + error = NotImplementedError + if cmethod == 'lz4': + error = ValueError + with raises(error) as excinfo: + numpy_pickle.dump(obj, dump_filename, + compress=(cmethod, compress)) + excinfo.match(msg) + elif cmethod == 'lz4' and with_lz4.args[0]: + # Skip the test if lz4 is not installed. We here use the with_lz4 + # skipif fixture whose argument is True when lz4 is not installed + raise SkipTest("lz4 is not installed.") + else: + numpy_pickle.dump(obj, dump_filename, + compress=(cmethod, compress)) + # Verify the file contains the right magic number + with open(dump_filename, 'rb') as f: + assert _detect_compressor(f) == cmethod + # Verify the reloaded object is correct + obj_reloaded = numpy_pickle.load(dump_filename) + assert isinstance(obj_reloaded, type(obj)) + if isinstance(obj, np.ndarray): + np.testing.assert_array_equal(obj_reloaded, obj) + else: + assert obj_reloaded == obj + + +def _gzip_file_decompress(source_filename, target_filename): + """Decompress a gzip file.""" + with closing(gzip.GzipFile(source_filename, "rb")) as fo: + buf = fo.read() + + with open(target_filename, "wb") as fo: + fo.write(buf) + + +def _zlib_file_decompress(source_filename, target_filename): + """Decompress a zlib file.""" + with open(source_filename, 'rb') as fo: + buf = zlib.decompress(fo.read()) + + with open(target_filename, 'wb') as fo: + fo.write(buf) + + +@parametrize('extension,decompress', + [('.z', _zlib_file_decompress), + ('.gz', _gzip_file_decompress)]) +def test_load_externally_decompressed_files(tmpdir, extension, decompress): + # Test that BinaryZlibFile generates valid gzip and zlib compressed files. + obj = "a string to persist" + filename_raw = tmpdir.join('test.pkl').strpath + + filename_compressed = filename_raw + extension + # Use automatic extension detection to compress with the right method. + numpy_pickle.dump(obj, filename_compressed) + + # Decompress with the corresponding method + decompress(filename_compressed, filename_raw) + + # Test that the uncompressed pickle can be loaded and + # that the result is correct. + obj_reloaded = numpy_pickle.load(filename_raw) + assert obj == obj_reloaded + + +@parametrize('extension,cmethod', + # valid compressor extensions + [('.z', 'zlib'), + ('.gz', 'gzip'), + ('.bz2', 'bz2'), + ('.lzma', 'lzma'), + ('.xz', 'xz'), + # invalid compressor extensions + ('.pkl', 'not-compressed'), + ('', 'not-compressed')]) +def test_compression_using_file_extension(tmpdir, extension, cmethod): + # test that compression method corresponds to the given filename extension. + filename = tmpdir.join('test.pkl').strpath + obj = "object to dump" + + dump_fname = filename + extension + if not PY3_OR_LATER and cmethod in ('xz', 'lzma'): + # Lzma module only available for python >= 3.3 + msg = "{} compression is only available".format(cmethod) + with raises(NotImplementedError) as excinfo: + numpy_pickle.dump(obj, dump_fname) + excinfo.match(msg) + else: + numpy_pickle.dump(obj, dump_fname) + # Verify the file contains the right magic number + with open(dump_fname, 'rb') as f: + assert _detect_compressor(f) == cmethod + # Verify the reloaded object is correct + obj_reloaded = numpy_pickle.load(dump_fname) + assert isinstance(obj_reloaded, type(obj)) + assert obj_reloaded == obj + + +@with_numpy +def test_file_handle_persistence(tmpdir): + objs = [np.random.random((10, 10)), + "some data", + np.matrix([0, 1, 2])] + fobjs = [bz2.BZ2File, gzip.GzipFile] + if PY3_OR_LATER: + import lzma + fobjs += [lzma.LZMAFile] + filename = tmpdir.join('test.pkl').strpath + + for obj in objs: + for fobj in fobjs: + with fobj(filename, 'wb') as f: + numpy_pickle.dump(obj, f) + + # using the same decompressor prevents from internally + # decompress again. + with fobj(filename, 'rb') as f: + obj_reloaded = numpy_pickle.load(f) + + # when needed, the correct decompressor should be used when + # passing a raw file handle. + with open(filename, 'rb') as f: + obj_reloaded_2 = numpy_pickle.load(f) + + if isinstance(obj, np.ndarray): + np.testing.assert_array_equal(obj_reloaded, obj) + np.testing.assert_array_equal(obj_reloaded_2, obj) + else: + assert obj_reloaded == obj + assert obj_reloaded_2 == obj + + +@with_numpy +def test_in_memory_persistence(): + objs = [np.random.random((10, 10)), + "some data", + np.matrix([0, 1, 2])] + for obj in objs: + f = io.BytesIO() + numpy_pickle.dump(obj, f) + obj_reloaded = numpy_pickle.load(f) + if isinstance(obj, np.ndarray): + np.testing.assert_array_equal(obj_reloaded, obj) + else: + assert obj_reloaded == obj + + +@with_numpy +def test_file_handle_persistence_mmap(tmpdir): + obj = np.random.random((10, 10)) + filename = tmpdir.join('test.pkl').strpath + + with open(filename, 'wb') as f: + numpy_pickle.dump(obj, f) + + with open(filename, 'rb') as f: + obj_reloaded = numpy_pickle.load(f, mmap_mode='r+') + + np.testing.assert_array_equal(obj_reloaded, obj) + + +@with_numpy +def test_file_handle_persistence_compressed_mmap(tmpdir): + obj = np.random.random((10, 10)) + filename = tmpdir.join('test.pkl').strpath + + with open(filename, 'wb') as f: + numpy_pickle.dump(obj, f, compress=('gzip', 3)) + + with closing(gzip.GzipFile(filename, 'rb')) as f: + with warns(UserWarning) as warninfo: + numpy_pickle.load(f, mmap_mode='r+') + assert len(warninfo) == 1 + assert (str(warninfo[0].message) == + '"%(fileobj)r" is not a raw file, mmap_mode "%(mmap_mode)s" ' + 'flag will be ignored.' % {'fileobj': f, 'mmap_mode': 'r+'}) + + +@with_numpy +def test_file_handle_persistence_in_memory_mmap(): + obj = np.random.random((10, 10)) + buf = io.BytesIO() + + numpy_pickle.dump(obj, buf) + + with warns(UserWarning) as warninfo: + numpy_pickle.load(buf, mmap_mode='r+') + assert len(warninfo) == 1 + assert (str(warninfo[0].message) == + 'In memory persistence is not compatible with mmap_mode ' + '"%(mmap_mode)s" flag passed. mmap_mode option will be ' + 'ignored.' % {'mmap_mode': 'r+'}) + + +@parametrize('data', [b'a little data as bytes.', + # More bytes + 10000 * "{}".format( + random.randint(0, 1000) * 1000).encode('latin-1')], + ids=["a little data as bytes.", "a large data as bytes."]) +@parametrize('compress_level', [1, 3, 9]) +def test_binary_zlibfile(tmpdir, data, compress_level): + filename = tmpdir.join('test.pkl').strpath + # Regular cases + with open(filename, 'wb') as f: + with BinaryZlibFile(f, 'wb', + compresslevel=compress_level) as fz: + assert fz.writable() + fz.write(data) + assert fz.fileno() == f.fileno() + with raises(io.UnsupportedOperation): + fz._check_can_read() + + with raises(io.UnsupportedOperation): + fz._check_can_seek() + assert fz.closed + with raises(ValueError): + fz._check_not_closed() + + with open(filename, 'rb') as f: + with BinaryZlibFile(f) as fz: + assert fz.readable() + if PY3_OR_LATER: + assert fz.seekable() + assert fz.fileno() == f.fileno() + assert fz.read() == data + with raises(io.UnsupportedOperation): + fz._check_can_write() + if PY3_OR_LATER: + # io.BufferedIOBase doesn't have seekable() method in + # python 2 + assert fz.seekable() + fz.seek(0) + assert fz.tell() == 0 + assert fz.closed + + # Test with a filename as input + with BinaryZlibFile(filename, 'wb', + compresslevel=compress_level) as fz: + assert fz.writable() + fz.write(data) + + with BinaryZlibFile(filename, 'rb') as fz: + assert fz.read() == data + assert fz.seekable() + + # Test without context manager + fz = BinaryZlibFile(filename, 'wb', compresslevel=compress_level) + assert fz.writable() + fz.write(data) + fz.close() + + fz = BinaryZlibFile(filename, 'rb') + assert fz.read() == data + fz.close() + + +@parametrize('bad_value', [-1, 10, 15, 'a', (), {}]) +def test_binary_zlibfile_bad_compression_levels(tmpdir, bad_value): + filename = tmpdir.join('test.pkl').strpath + with raises(ValueError) as excinfo: + BinaryZlibFile(filename, 'wb', compresslevel=bad_value) + pattern = re.escape("'compresslevel' must be an integer between 1 and 9. " + "You provided 'compresslevel={}'".format(bad_value)) + excinfo.match(pattern) + + +@parametrize('bad_mode', ['a', 'x', 'r', 'w', 1, 2]) +def test_binary_zlibfile_invalid_modes(tmpdir, bad_mode): + filename = tmpdir.join('test.pkl').strpath + with raises(ValueError) as excinfo: + BinaryZlibFile(filename, bad_mode) + excinfo.match("Invalid mode") + + +@parametrize('bad_file', [1, (), {}]) +def test_binary_zlibfile_invalid_filename_type(bad_file): + with raises(TypeError) as excinfo: + BinaryZlibFile(bad_file, 'rb') + excinfo.match("filename must be a str or bytes object, or a file") + + +############################################################################### +# Test dumping array subclasses +if np is not None: + + class SubArray(np.ndarray): + + def __reduce__(self): + return _load_sub_array, (np.asarray(self), ) + + def _load_sub_array(arr): + d = SubArray(arr.shape) + d[:] = arr + return d + + class ComplexTestObject: + """A complex object containing numpy arrays as attributes.""" + + def __init__(self): + self.array_float = np.arange(100, dtype='float64') + self.array_int = np.ones(100, dtype='int32') + self.array_obj = np.array(['a', 10, 20.0], dtype='object') + + +@with_numpy +def test_numpy_subclass(tmpdir): + filename = tmpdir.join('test.pkl').strpath + a = SubArray((10,)) + numpy_pickle.dump(a, filename) + c = numpy_pickle.load(filename) + assert isinstance(c, SubArray) + np.testing.assert_array_equal(c, a) + + +def test_pathlib(tmpdir): + try: + from pathlib import Path + except ImportError: + pass + else: + filename = tmpdir.join('test.pkl').strpath + value = 123 + numpy_pickle.dump(value, Path(filename)) + assert numpy_pickle.load(filename) == value + numpy_pickle.dump(value, filename) + assert numpy_pickle.load(Path(filename)) == value + + +@with_numpy +def test_non_contiguous_array_pickling(tmpdir): + filename = tmpdir.join('test.pkl').strpath + + for array in [ # Array that triggers a contiguousness issue with nditer, + # see https://github.com/joblib/joblib/pull/352 and see + # https://github.com/joblib/joblib/pull/353 + np.asfortranarray([[1, 2], [3, 4]])[1:], + # Non contiguous array with works fine with nditer + np.ones((10, 50, 20), order='F')[:, :1, :]]: + assert not array.flags.c_contiguous + assert not array.flags.f_contiguous + numpy_pickle.dump(array, filename) + array_reloaded = numpy_pickle.load(filename) + np.testing.assert_array_equal(array_reloaded, array) + + +@with_numpy +def test_pickle_highest_protocol(tmpdir): + # ensure persistence of a numpy array is valid even when using + # the pickle HIGHEST_PROTOCOL. + # see https://github.com/joblib/joblib/issues/362 + + filename = tmpdir.join('test.pkl').strpath + test_array = np.zeros(10) + + numpy_pickle.dump(test_array, filename, protocol=pickle.HIGHEST_PROTOCOL) + array_reloaded = numpy_pickle.load(filename) + + np.testing.assert_array_equal(array_reloaded, test_array) + + +@with_numpy +def test_pickle_in_socket(): + # test that joblib can pickle in sockets + if not PY3_OR_LATER: + raise SkipTest("Cannot peek or seek in socket in python 2.") + + test_array = np.arange(10) + _ADDR = ("localhost", 12345) + listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + listener.bind(_ADDR) + listener.listen(1) + + client = socket.create_connection(_ADDR) + server, client_addr = listener.accept() + + with server.makefile("wb") as sf: + numpy_pickle.dump(test_array, sf) + + with client.makefile("rb") as cf: + array_reloaded = numpy_pickle.load(cf) + + np.testing.assert_array_equal(array_reloaded, test_array) + + +@with_numpy +def test_load_memmap_with_big_offset(tmpdir): + # Test that numpy memmap offset is set correctly if greater than + # mmap.ALLOCATIONGRANULARITY, see + # https://github.com/joblib/joblib/issues/451 and + # https://github.com/numpy/numpy/pull/8443 for more details. + fname = tmpdir.join('test.mmap').strpath + size = mmap.ALLOCATIONGRANULARITY + obj = [np.zeros(size, dtype='uint8'), np.ones(size, dtype='uint8')] + numpy_pickle.dump(obj, fname) + memmaps = numpy_pickle.load(fname, mmap_mode='r') + assert isinstance(memmaps[1], np.memmap) + assert memmaps[1].offset > size + np.testing.assert_array_equal(obj, memmaps) + + +def test_register_compressor(tmpdir): + # Check that registering compressor file works. + compressor_name = 'test-name' + compressor_prefix = 'test-prefix' + + class BinaryCompressorTestFile(io.BufferedIOBase): + pass + + class BinaryCompressorTestWrapper(CompressorWrapper): + + def __init__(self): + CompressorWrapper.__init__(self, obj=BinaryCompressorTestFile, + prefix=compressor_prefix) + + register_compressor(compressor_name, BinaryCompressorTestWrapper()) + + assert (_COMPRESSORS[compressor_name].fileobj_factory == + BinaryCompressorTestFile) + assert _COMPRESSORS[compressor_name].prefix == compressor_prefix + + # Remove this dummy compressor file from extra compressors because other + # tests might fail because of this + _COMPRESSORS.pop(compressor_name) + + +@parametrize('invalid_name', [1, (), {}]) +def test_register_compressor_invalid_name(invalid_name): + # Test that registering an invalid compressor name is not allowed. + with raises(ValueError) as excinfo: + register_compressor(invalid_name, None) + excinfo.match("Compressor name should be a string") + + +def test_register_compressor_invalid_fileobj(): + # Test that registering an invalid file object is not allowed. + + class InvalidFileObject(): + pass + + class InvalidFileObjectWrapper(CompressorWrapper): + def __init__(self): + CompressorWrapper.__init__(self, obj=InvalidFileObject, + prefix=b'prefix') + + with raises(ValueError) as excinfo: + register_compressor('invalid', InvalidFileObjectWrapper()) + + excinfo.match("Compressor 'fileobj_factory' attribute should implement " + "the file object interface") + + +class AnotherZlibCompressorWrapper(CompressorWrapper): + + def __init__(self): + CompressorWrapper.__init__(self, obj=BinaryZlibFile, prefix=b'prefix') + + +class StandardLibGzipCompressorWrapper(CompressorWrapper): + + def __init__(self): + CompressorWrapper.__init__(self, obj=gzip.GzipFile, prefix=b'prefix') + + +def test_register_compressor_already_registered(): + # Test registration of existing compressor files. + compressor_name = 'test-name' + + # register a test compressor + register_compressor(compressor_name, AnotherZlibCompressorWrapper()) + + with raises(ValueError) as excinfo: + register_compressor(compressor_name, + StandardLibGzipCompressorWrapper()) + excinfo.match("Compressor '{}' already registered." + .format(compressor_name)) + + register_compressor(compressor_name, StandardLibGzipCompressorWrapper(), + force=True) + + assert compressor_name in _COMPRESSORS + assert _COMPRESSORS[compressor_name].fileobj_factory == gzip.GzipFile + + # Remove this dummy compressor file from extra compressors because other + # tests might fail because of this + _COMPRESSORS.pop(compressor_name) + + +@with_lz4 +def test_lz4_compression(tmpdir): + # Check that lz4 can be used when dependency is available. + import lz4.frame + compressor = 'lz4' + assert compressor in _COMPRESSORS + assert _COMPRESSORS[compressor].fileobj_factory == lz4.frame.LZ4FrameFile + + fname = tmpdir.join('test.pkl').strpath + data = 'test data' + numpy_pickle.dump(data, fname, compress=compressor) + + with open(fname, 'rb') as f: + assert f.read(len(_LZ4_PREFIX)) == _LZ4_PREFIX + assert numpy_pickle.load(fname) == data + + # Test that LZ4 is applied based on file extension + numpy_pickle.dump(data, fname + '.lz4') + with open(fname, 'rb') as f: + assert f.read(len(_LZ4_PREFIX)) == _LZ4_PREFIX + assert numpy_pickle.load(fname) == data + + +@without_lz4 +def test_lz4_compression_without_lz4(tmpdir): + # Check that lz4 cannot be used when dependency is not available. + fname = tmpdir.join('test.nolz4').strpath + data = 'test data' + msg = LZ4_NOT_INSTALLED_ERROR + if not PY3_OR_LATER: + msg = "lz4 compression is only available with python3+" + with raises(ValueError) as excinfo: + numpy_pickle.dump(data, fname, compress='lz4') + excinfo.match(msg) + + with raises(ValueError) as excinfo: + numpy_pickle.dump(data, fname + '.lz4') + excinfo.match(msg) diff --git a/my_env/Lib/site-packages/joblib/test/test_numpy_pickle_compat.py b/my_env/Lib/site-packages/joblib/test/test_numpy_pickle_compat.py new file mode 100644 index 000000000..5e8319212 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_numpy_pickle_compat.py @@ -0,0 +1,18 @@ +"""Test the old numpy pickler, compatibility version.""" + +import random + +# numpy_pickle is not a drop-in replacement of pickle, as it takes +# filenames instead of open files as arguments. +from joblib import numpy_pickle_compat + + +def test_z_file(tmpdir): + # Test saving and loading data with Zfiles. + filename = tmpdir.join('test.pkl').strpath + data = numpy_pickle_compat.asbytes('Foo, \n Bar, baz, \n\nfoobar') + with open(filename, 'wb') as f: + numpy_pickle_compat.write_zfile(f, data) + with open(filename, 'rb') as f: + data_read = numpy_pickle_compat.read_zfile(f) + assert data == data_read diff --git a/my_env/Lib/site-packages/joblib/test/test_numpy_pickle_utils.py b/my_env/Lib/site-packages/joblib/test/test_numpy_pickle_utils.py new file mode 100644 index 000000000..39c2cad52 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_numpy_pickle_utils.py @@ -0,0 +1,10 @@ +from joblib import numpy_pickle_utils +from joblib.compressor import BinaryZlibFile +from joblib.testing import parametrize + + +@parametrize('filename', ['test', u'test']) # testing str and unicode names +def test_binary_zlib_file(tmpdir, filename): + """Testing creation of files depending on the type of the filenames.""" + binary_file = BinaryZlibFile(tmpdir.join(filename).strpath, mode='wb') + binary_file.close() diff --git a/my_env/Lib/site-packages/joblib/test/test_parallel.py b/my_env/Lib/site-packages/joblib/test/test_parallel.py new file mode 100644 index 000000000..afc1734a8 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_parallel.py @@ -0,0 +1,1743 @@ +""" +Test the parallel module. +""" + +# Author: Gael Varoquaux +# Copyright (c) 2010-2011 Gael Varoquaux +# License: BSD Style, 3 clauses. + +import os +import sys +import time +import mmap +import threading +from traceback import format_exception +from math import sqrt +from time import sleep +from pickle import PicklingError +from multiprocessing import TimeoutError +import pytest + +import joblib +from joblib import dump, load +from joblib import parallel + +from joblib.test.common import np, with_numpy +from joblib.test.common import with_multiprocessing +from joblib.testing import (parametrize, raises, check_subprocess_call, + skipif, SkipTest, warns) +from joblib._compat import PY3_OR_LATER, PY27 + +try: + import cPickle as pickle +except ImportError: + import pickle + +try: + from queue import Queue +except ImportError: + # Backward compat + from Queue import Queue + +try: + import posix +except ImportError: + posix = None + +try: + RecursionError +except NameError: + RecursionError = RuntimeError + +try: + reload # Python 2 +except NameError: # Python 3 + from importlib import reload + +try: + from ._openmp_test_helper.parallel_sum import parallel_sum +except ImportError: + parallel_sum = None + +try: + import distributed +except ImportError: + distributed = None + +from joblib._parallel_backends import SequentialBackend +from joblib._parallel_backends import ThreadingBackend +from joblib._parallel_backends import MultiprocessingBackend +from joblib._parallel_backends import ParallelBackendBase +from joblib._parallel_backends import LokyBackend +from joblib._parallel_backends import SafeFunction + +from joblib.parallel import Parallel, delayed +from joblib.parallel import register_parallel_backend, parallel_backend +from joblib.parallel import effective_n_jobs, cpu_count + +from joblib.parallel import mp, BACKENDS, DEFAULT_BACKEND, EXTERNAL_BACKENDS +from joblib.my_exceptions import JoblibException +from joblib.my_exceptions import TransportableException +from joblib.my_exceptions import JoblibValueError +from joblib.my_exceptions import WorkerInterrupt + + +ALL_VALID_BACKENDS = [None] + sorted(BACKENDS.keys()) +# Add instances of backend classes deriving from ParallelBackendBase +ALL_VALID_BACKENDS += [BACKENDS[backend_str]() for backend_str in BACKENDS] +PROCESS_BACKENDS = ['multiprocessing', 'loky'] +PARALLEL_BACKENDS = PROCESS_BACKENDS + ['threading'] + +if hasattr(mp, 'get_context'): + # Custom multiprocessing context in Python 3.4+ + ALL_VALID_BACKENDS.append(mp.get_context('spawn')) + +DefaultBackend = BACKENDS[DEFAULT_BACKEND] + + +def get_workers(backend): + return getattr(backend, '_pool', getattr(backend, '_workers', None)) + + +def division(x, y): + return x / y + + +def square(x): + return x ** 2 + + +class MyExceptionWithFinickyInit(Exception): + """An exception class with non trivial __init__ + """ + def __init__(self, a, b, c, d): + pass + + +def exception_raiser(x, custom_exception=False): + if x == 7: + raise (MyExceptionWithFinickyInit('a', 'b', 'c', 'd') + if custom_exception else ValueError) + return x + + +def interrupt_raiser(x): + time.sleep(.05) + raise KeyboardInterrupt + + +def f(x, y=0, z=0): + """ A module-level function so that it can be spawn with + multiprocessing. + """ + return x ** 2 + y + z + + +def _active_backend_type(): + return type(parallel.get_active_backend()[0]) + + +def parallel_func(inner_n_jobs, backend): + return Parallel(n_jobs=inner_n_jobs, backend=backend)( + delayed(square)(i) for i in range(3)) + + +############################################################################### +def test_cpu_count(): + assert cpu_count() > 0 + + +def test_effective_n_jobs(): + assert effective_n_jobs() > 0 + + +############################################################################### +# Test parallel + +@parametrize('backend', ALL_VALID_BACKENDS) +@parametrize('n_jobs', [1, 2, -1, -2]) +@parametrize('verbose', [2, 11, 100]) +def test_simple_parallel(backend, n_jobs, verbose): + assert ([square(x) for x in range(5)] == + Parallel(n_jobs=n_jobs, backend=backend, + verbose=verbose)( + delayed(square)(x) for x in range(5))) + + +@parametrize('backend', ALL_VALID_BACKENDS) +def test_main_thread_renamed_no_warning(backend, monkeypatch): + # Check that no default backend relies on the name of the main thread: + # https://github.com/joblib/joblib/issues/180#issuecomment-253266247 + # Some programs use a different name for the main thread. This is the case + # for uWSGI apps for instance. + monkeypatch.setattr(target=threading.current_thread(), name='name', + value='some_new_name_for_the_main_thread') + + with warns(None) as warninfo: + results = Parallel(n_jobs=2, backend=backend)( + delayed(square)(x) for x in range(3)) + assert results == [0, 1, 4] + + # Due to the default parameters of LokyBackend, there is a chance that + # warninfo catches Warnings from worker timeouts. We remove it if it exists + warninfo = [w for w in warninfo if "worker timeout" not in str(w.message)] + + # The multiprocessing backend will raise a warning when detecting that is + # started from the non-main thread. Let's check that there is no false + # positive because of the name change. + assert len(warninfo) == 0 + + +def _assert_warning_nested(backend, inner_n_jobs, expected): + with warns(None) as records: + parallel_func(backend=backend, inner_n_jobs=inner_n_jobs) + + if expected: + # with threading, we might see more that one records + if len(records) > 0: + return 'backed parallel loops cannot' in records[0].message.args[0] + return False + else: + assert len(records) == 0 + return True + + +@with_multiprocessing +@parametrize('parent_backend,child_backend,expected', [ + ('loky', 'multiprocessing', True), ('loky', 'loky', False), + ('multiprocessing', 'multiprocessing', True), + ('multiprocessing', 'loky', True), + ('threading', 'multiprocessing', True), + ('threading', 'loky', True), +]) +def test_nested_parallel_warnings(parent_backend, child_backend, expected): + + # no warnings if inner_n_jobs=1 + Parallel(n_jobs=2, backend=parent_backend)( + delayed(_assert_warning_nested)( + backend=child_backend, inner_n_jobs=1, + expected=False) + for _ in range(5)) + + # warnings if inner_n_jobs != 1 and expected + res = Parallel(n_jobs=2, backend=parent_backend)( + delayed(_assert_warning_nested)( + backend=child_backend, inner_n_jobs=2, + expected=expected) + for _ in range(5)) + + # warning handling is not thread safe. One thread might see multiple + # warning or no warning at all. + if parent_backend == "threading": + assert any(res) + else: + assert all(res) + + +@with_multiprocessing +@parametrize('backend', ['loky', 'multiprocessing', 'threading']) +def test_background_thread_parallelism(backend): + is_run_parallel = [False] + + def background_thread(is_run_parallel): + with warns(None) as records: + Parallel(n_jobs=2)( + delayed(sleep)(.1) for _ in range(4)) + print(len(records)) + is_run_parallel[0] = len(records) == 0 + + t = threading.Thread(target=background_thread, args=(is_run_parallel,)) + t.start() + t.join() + assert is_run_parallel[0] + + +def nested_loop(backend): + Parallel(n_jobs=2, backend=backend)( + delayed(square)(.01) for _ in range(2)) + + +@parametrize('child_backend', BACKENDS) +@parametrize('parent_backend', BACKENDS) +def test_nested_loop(parent_backend, child_backend): + Parallel(n_jobs=2, backend=parent_backend)( + delayed(nested_loop)(child_backend) for _ in range(2)) + + +def raise_exception(backend): + raise ValueError + + +def test_nested_loop_with_exception_with_loky(): + with raises(ValueError): + with Parallel(n_jobs=2, backend="loky") as parallel: + parallel([delayed(nested_loop)("loky"), + delayed(raise_exception)("loky")]) + + +def test_mutate_input_with_threads(): + """Input is mutable when using the threading backend""" + q = Queue(maxsize=5) + Parallel(n_jobs=2, backend="threading")( + delayed(q.put)(1) for _ in range(5)) + assert q.full() + + +@parametrize('n_jobs', [1, 2, 3]) +def test_parallel_kwargs(n_jobs): + """Check the keyword argument processing of pmap.""" + lst = range(10) + assert ([f(x, y=1) for x in lst] == + Parallel(n_jobs=n_jobs)(delayed(f)(x, y=1) for x in lst)) + + +@parametrize('backend', PARALLEL_BACKENDS) +def test_parallel_as_context_manager(backend): + lst = range(10) + expected = [f(x, y=1) for x in lst] + + with Parallel(n_jobs=4, backend=backend) as p: + # Internally a pool instance has been eagerly created and is managed + # via the context manager protocol + managed_backend = p._backend + + # We make call with the managed parallel object several times inside + # the managed block: + assert expected == p(delayed(f)(x, y=1) for x in lst) + assert expected == p(delayed(f)(x, y=1) for x in lst) + + # Those calls have all used the same pool instance: + if mp is not None: + assert get_workers(managed_backend) is get_workers(p._backend) + + # As soon as we exit the context manager block, the pool is terminated and + # no longer referenced from the parallel object: + if mp is not None: + assert get_workers(p._backend) is None + + # It's still possible to use the parallel instance in non-managed mode: + assert expected == p(delayed(f)(x, y=1) for x in lst) + if mp is not None: + assert get_workers(p._backend) is None + + +@with_multiprocessing +def test_parallel_pickling(): + """ Check that pmap captures the errors when it is passed an object + that cannot be pickled. + """ + class UnpicklableObject(object): + def __reduce__(self): + raise RuntimeError('123') + + with raises(PicklingError, match=r"the task to send"): + Parallel(n_jobs=2)(delayed(id)(UnpicklableObject()) for _ in range(10)) + + +@parametrize('backend', PARALLEL_BACKENDS) +def test_parallel_timeout_success(backend): + # Check that timeout isn't thrown when function is fast enough + assert len(Parallel(n_jobs=2, backend=backend, timeout=10)( + delayed(sleep)(0.001) for x in range(10))) == 10 + + +@with_multiprocessing +@parametrize('backend', PARALLEL_BACKENDS) +def test_parallel_timeout_fail(backend): + # Check that timeout properly fails when function is too slow + with raises(TimeoutError): + Parallel(n_jobs=2, backend=backend, timeout=0.01)( + delayed(sleep)(10) for x in range(10)) + + +@with_multiprocessing +@parametrize('backend', PROCESS_BACKENDS) +def test_error_capture(backend): + # Check that error are captured, and that correct exceptions + # are raised. + if mp is not None: + with raises(ZeroDivisionError): + Parallel(n_jobs=2, backend=backend)( + [delayed(division)(x, y) + for x, y in zip((0, 1), (1, 0))]) + with raises(WorkerInterrupt): + Parallel(n_jobs=2, backend=backend)( + [delayed(interrupt_raiser)(x) for x in (1, 0)]) + + # Try again with the context manager API + with Parallel(n_jobs=2, backend=backend) as parallel: + assert get_workers(parallel._backend) is not None + original_workers = get_workers(parallel._backend) + + with raises(ZeroDivisionError): + parallel([delayed(division)(x, y) + for x, y in zip((0, 1), (1, 0))]) + + # The managed pool should still be available and be in a working + # state despite the previously raised (and caught) exception + assert get_workers(parallel._backend) is not None + + # The pool should have been interrupted and restarted: + assert get_workers(parallel._backend) is not original_workers + + assert ([f(x, y=1) for x in range(10)] == + parallel(delayed(f)(x, y=1) for x in range(10))) + + original_workers = get_workers(parallel._backend) + with raises(WorkerInterrupt): + parallel([delayed(interrupt_raiser)(x) for x in (1, 0)]) + + # The pool should still be available despite the exception + assert get_workers(parallel._backend) is not None + + # The pool should have been interrupted and restarted: + assert get_workers(parallel._backend) is not original_workers + + assert ([f(x, y=1) for x in range(10)] == + parallel(delayed(f)(x, y=1) for x in range(10))) + + # Check that the inner pool has been terminated when exiting the + # context manager + assert get_workers(parallel._backend) is None + else: + with raises(KeyboardInterrupt): + Parallel(n_jobs=2)( + [delayed(interrupt_raiser)(x) for x in (1, 0)]) + + # wrapped exceptions should inherit from the class of the original + # exception to make it easy to catch them + with raises(ZeroDivisionError): + Parallel(n_jobs=2)( + [delayed(division)(x, y) for x, y in zip((0, 1), (1, 0))]) + + with raises(MyExceptionWithFinickyInit): + Parallel(n_jobs=2, verbose=0)( + (delayed(exception_raiser)(i, custom_exception=True) + for i in range(30))) + + try: + # JoblibException wrapping is disabled in sequential mode: + Parallel(n_jobs=1)( + delayed(division)(x, y) for x, y in zip((0, 1), (1, 0))) + except Exception as ex: + assert not isinstance(ex, JoblibException) + else: + raise ValueError("The excepted error has not been raised.") + + +def consumer(queue, item): + queue.append('Consumed %s' % item) + + +@parametrize('backend', BACKENDS) +@parametrize('batch_size, expected_queue', + [(1, ['Produced 0', 'Consumed 0', + 'Produced 1', 'Consumed 1', + 'Produced 2', 'Consumed 2', + 'Produced 3', 'Consumed 3', + 'Produced 4', 'Consumed 4', + 'Produced 5', 'Consumed 5']), + (4, [ # First Batch + 'Produced 0', 'Produced 1', 'Produced 2', 'Produced 3', + 'Consumed 0', 'Consumed 1', 'Consumed 2', 'Consumed 3', + # Second batch + 'Produced 4', 'Produced 5', 'Consumed 4', 'Consumed 5'])]) +def test_dispatch_one_job(backend, batch_size, expected_queue): + """ Test that with only one job, Parallel does act as a iterator. + """ + queue = list() + + def producer(): + for i in range(6): + queue.append('Produced %i' % i) + yield i + + Parallel(n_jobs=1, batch_size=batch_size, backend=backend)( + delayed(consumer)(queue, x) for x in producer()) + assert queue == expected_queue + assert len(queue) == 12 + + +@with_multiprocessing +@parametrize('backend', PARALLEL_BACKENDS) +def test_dispatch_multiprocessing(backend): + """ Check that using pre_dispatch Parallel does indeed dispatch items + lazily. + """ + manager = mp.Manager() + queue = manager.list() + + def producer(): + for i in range(6): + queue.append('Produced %i' % i) + yield i + + Parallel(n_jobs=2, batch_size=1, pre_dispatch=3, backend=backend)( + delayed(consumer)(queue, 'any') for _ in producer()) + + queue_contents = list(queue) + assert queue_contents[0] == 'Produced 0' + + # Only 3 tasks are pre-dispatched out of 6. The 4th task is dispatched only + # after any of the first 3 jobs have completed. + first_consumption_index = queue_contents[:4].index('Consumed any') + assert first_consumption_index > -1 + + produced_3_index = queue_contents.index('Produced 3') # 4th task produced + assert produced_3_index > first_consumption_index + + assert len(queue) == 12 + + +def test_batching_auto_threading(): + # batching='auto' with the threading backend leaves the effective batch + # size to 1 (no batching) as it has been found to never be beneficial with + # this low-overhead backend. + + with Parallel(n_jobs=2, batch_size='auto', backend='threading') as p: + p(delayed(id)(i) for i in range(5000)) # many very fast tasks + assert p._backend.compute_batch_size() == 1 + + +@with_multiprocessing +@parametrize('backend', PROCESS_BACKENDS) +def test_batching_auto_subprocesses(backend): + with Parallel(n_jobs=2, batch_size='auto', backend=backend) as p: + p(delayed(id)(i) for i in range(5000)) # many very fast tasks + + # It should be strictly larger than 1 but as we don't want heisen + # failures on clogged CI worker environment be safe and only check that + # it's a strictly positive number. + assert p._backend.compute_batch_size() > 0 + + +def test_exception_dispatch(): + """Make sure that exception raised during dispatch are indeed captured""" + with raises(ValueError): + Parallel(n_jobs=2, pre_dispatch=16, verbose=0)( + delayed(exception_raiser)(i) for i in range(30)) + + +def nested_function_inner(i): + Parallel(n_jobs=2)( + delayed(exception_raiser)(j) for j in range(30)) + + +def nested_function_outer(i): + Parallel(n_jobs=2)( + delayed(nested_function_inner)(j) for j in range(30)) + + +@with_multiprocessing +@parametrize('backend', PARALLEL_BACKENDS) +def test_nested_exception_dispatch(backend): + """Ensure errors for nested joblib cases gets propagated + + For Python 2.7, the TransportableException wrapping and unwrapping should + preserve the traceback information of the inner function calls. + + For Python 3, we rely on the built-in __cause__ system that already + report this kind of information to the user. + """ + if PY27 and backend == 'multiprocessing': + raise SkipTest("Nested parallel calls can deadlock with the python 2.7" + "multiprocessing backend.") + + with raises(ValueError) as excinfo: + Parallel(n_jobs=2, backend=backend)( + delayed(nested_function_outer)(i) for i in range(30)) + + # Check that important information such as function names are visible + # in the final error message reported to the user + report_lines = format_exception(excinfo.type, excinfo.value, excinfo.tb) + report = "".join(report_lines) + assert 'nested_function_outer' in report + assert 'nested_function_inner' in report + assert 'exception_raiser' in report + + if PY3_OR_LATER: + # Under Python 3, there is no need for exception wrapping as the + # exception raised in a worker process is transportable by default and + # preserves the necessary information via the `__cause__` attribute. + assert type(excinfo.value) is ValueError + else: + # The wrapping mechanism used to make exception of Python2.7 + # transportable does not create a JoblibJoblibJoblibValueError + # despite the 3 nested parallel calls. + assert type(excinfo.value) is JoblibValueError + + +def _reload_joblib(): + # Retrieve the path of the parallel module in a robust way + joblib_path = Parallel.__module__.split(os.sep) + joblib_path = joblib_path[:1] + joblib_path.append('parallel.py') + joblib_path = '/'.join(joblib_path) + module = __import__(joblib_path) + # Reload the module. This should trigger a fail + reload(module) + + +def test_multiple_spawning(): + # Test that attempting to launch a new Python after spawned + # subprocesses will raise an error, to avoid infinite loops on + # systems that do not support fork + if not int(os.environ.get('JOBLIB_MULTIPROCESSING', 1)): + raise SkipTest() + with raises(ImportError): + Parallel(n_jobs=2, pre_dispatch='all')( + [delayed(_reload_joblib)() for i in range(10)]) + + +class FakeParallelBackend(SequentialBackend): + """Pretends to run concurrently while running sequentially.""" + + def configure(self, n_jobs=1, parallel=None, **backend_args): + self.n_jobs = self.effective_n_jobs(n_jobs) + self.parallel = parallel + return n_jobs + + def effective_n_jobs(self, n_jobs=1): + if n_jobs < 0: + n_jobs = max(mp.cpu_count() + 1 + n_jobs, 1) + return n_jobs + + +def test_invalid_backend(): + with raises(ValueError): + Parallel(backend='unit-testing') + + +@parametrize('backend', ALL_VALID_BACKENDS) +def test_invalid_njobs(backend): + with raises(ValueError) as excinfo: + Parallel(n_jobs=0, backend=backend)._initialize_backend() + assert "n_jobs == 0 in Parallel has no meaning" in str(excinfo.value) + + +def test_register_parallel_backend(): + try: + register_parallel_backend("test_backend", FakeParallelBackend) + assert "test_backend" in BACKENDS + assert BACKENDS["test_backend"] == FakeParallelBackend + finally: + del BACKENDS["test_backend"] + + +def test_overwrite_default_backend(): + assert _active_backend_type() == DefaultBackend + try: + register_parallel_backend("threading", BACKENDS["threading"], + make_default=True) + assert _active_backend_type() == ThreadingBackend + finally: + # Restore the global default manually + parallel.DEFAULT_BACKEND = DEFAULT_BACKEND + assert _active_backend_type() == DefaultBackend + + +def check_backend_context_manager(backend_name): + with parallel_backend(backend_name, n_jobs=3): + active_backend, active_n_jobs = parallel.get_active_backend() + assert active_n_jobs == 3 + assert effective_n_jobs(3) == 3 + p = Parallel() + assert p.n_jobs == 3 + if backend_name == 'multiprocessing': + assert type(active_backend) == MultiprocessingBackend + assert type(p._backend) == MultiprocessingBackend + elif backend_name == 'loky': + assert type(active_backend) == LokyBackend + assert type(p._backend) == LokyBackend + elif backend_name == 'threading': + assert type(active_backend) == ThreadingBackend + assert type(p._backend) == ThreadingBackend + elif backend_name.startswith('test_'): + assert type(active_backend) == FakeParallelBackend + assert type(p._backend) == FakeParallelBackend + + +all_backends_for_context_manager = PARALLEL_BACKENDS[:] +all_backends_for_context_manager.extend( + ['test_backend_%d' % i for i in range(3)] +) + + +@with_multiprocessing +@parametrize('backend', all_backends_for_context_manager) +def test_backend_context_manager(monkeypatch, backend): + if backend not in BACKENDS: + monkeypatch.setitem(BACKENDS, backend, FakeParallelBackend) + + assert _active_backend_type() == DefaultBackend + # check that this possible to switch parallel backends sequentially + check_backend_context_manager(backend) + + # The default backend is restored + assert _active_backend_type() == DefaultBackend + + # Check that context manager switching is thread safe: + Parallel(n_jobs=2, backend='threading')( + delayed(check_backend_context_manager)(b) + for b in all_backends_for_context_manager if not b) + + # The default backend is again restored + assert _active_backend_type() == DefaultBackend + + +class ParameterizedParallelBackend(SequentialBackend): + """Pretends to run conncurrently while running sequentially.""" + + def __init__(self, param=None): + if param is None: + raise ValueError('param should not be None') + self.param = param + + +def test_parameterized_backend_context_manager(monkeypatch): + monkeypatch.setitem(BACKENDS, 'param_backend', + ParameterizedParallelBackend) + assert _active_backend_type() == DefaultBackend + + with parallel_backend('param_backend', param=42, n_jobs=3): + active_backend, active_n_jobs = parallel.get_active_backend() + assert type(active_backend) == ParameterizedParallelBackend + assert active_backend.param == 42 + assert active_n_jobs == 3 + p = Parallel() + assert p.n_jobs == 3 + assert p._backend is active_backend + results = p(delayed(sqrt)(i) for i in range(5)) + assert results == [sqrt(i) for i in range(5)] + + # The default backend is again restored + assert _active_backend_type() == DefaultBackend + + +def test_directly_parameterized_backend_context_manager(): + assert _active_backend_type() == DefaultBackend + + # Check that it's possible to pass a backend instance directly, + # without registration + with parallel_backend(ParameterizedParallelBackend(param=43), n_jobs=5): + active_backend, active_n_jobs = parallel.get_active_backend() + assert type(active_backend) == ParameterizedParallelBackend + assert active_backend.param == 43 + assert active_n_jobs == 5 + p = Parallel() + assert p.n_jobs == 5 + assert p._backend is active_backend + results = p(delayed(sqrt)(i) for i in range(5)) + assert results == [sqrt(i) for i in range(5)] + + # The default backend is again restored + assert _active_backend_type() == DefaultBackend + + +def sleep_and_return_pid(): + sleep(.1) + return os.getpid() + + +def get_nested_pids(): + assert _active_backend_type() == ThreadingBackend + # Assert that the nested backend does not change the default number of + # jobs used in Parallel + assert Parallel()._effective_n_jobs() == 1 + + # Assert that the tasks are running only on one process + return Parallel(n_jobs=2)(delayed(sleep_and_return_pid)() + for _ in range(2)) + + +class MyBackend(joblib._parallel_backends.LokyBackend): + """Backend to test backward compatibility with older backends""" + def get_nested_backend(self, ): + # Older backends only return a backend, without n_jobs indications. + return super(MyBackend, self).get_nested_backend()[0] + + +register_parallel_backend('back_compat_backend', MyBackend) + + +@with_multiprocessing +@parametrize('backend', ['threading', 'loky', 'multiprocessing', + 'back_compat_backend']) +def test_nested_backend_context_manager(backend): + # Check that by default, nested parallel calls will always use the + # ThreadingBackend + + with parallel_backend(backend): + pid_groups = Parallel(n_jobs=2)( + delayed(get_nested_pids)() + for _ in range(10) + ) + for pid_group in pid_groups: + assert len(set(pid_group)) == 1 + + +@with_multiprocessing +@parametrize('n_jobs', [2, -1, None]) +@parametrize('backend', PARALLEL_BACKENDS) +def test_nested_backend_in_sequential(backend, n_jobs): + # Check that by default, nested parallel calls will always use the + # ThreadingBackend + + def check_nested_backend(expected_backend_type, expected_n_job): + # Assert that the sequential backend at top level, does not change the + # backend for nested calls. + assert _active_backend_type() == BACKENDS[expected_backend_type] + + # Assert that the nested backend in SequentialBackend does not change + # the default number of jobs used in Parallel + expected_n_job = effective_n_jobs(expected_n_job) + assert Parallel()._effective_n_jobs() == expected_n_job + + Parallel(n_jobs=1)( + delayed(check_nested_backend)('loky', 1) + for _ in range(10) + ) + + with parallel_backend(backend, n_jobs=n_jobs): + Parallel(n_jobs=1)( + delayed(check_nested_backend)(backend, n_jobs) + for _ in range(10) + ) + + +def check_nesting_level(inner_backend, expected_level): + with parallel_backend(inner_backend) as (backend, n_jobs): + assert backend.nesting_level == expected_level + + +@with_multiprocessing +@parametrize('outer_backend', PARALLEL_BACKENDS) +@parametrize('inner_backend', PARALLEL_BACKENDS) +def test_backend_nesting_level(outer_backend, inner_backend): + # Check that the nesting level for the backend is correctly set + check_nesting_level(outer_backend, 0) + + Parallel(n_jobs=2, backend=outer_backend)( + delayed(check_nesting_level)(inner_backend, 1) + for _ in range(10) + ) + + with parallel_backend(inner_backend, n_jobs=2): + Parallel()(delayed(check_nesting_level)(inner_backend, 1) + for _ in range(10)) + + +@with_multiprocessing +def test_retrieval_context(): + import contextlib + + class MyBackend(ThreadingBackend): + i = 0 + + @contextlib.contextmanager + def retrieval_context(self): + self.i += 1 + yield + + register_parallel_backend("retrieval", MyBackend) + + def nested_call(n): + return Parallel(n_jobs=2)(delayed(id)(i) for i in range(n)) + + with parallel_backend("retrieval") as (ba, _): + Parallel(n_jobs=2)( + delayed(nested_call, check_pickle=False)(i) + for i in range(5) + ) + assert ba.i == 1 + + +############################################################################### +# Test helpers +def test_joblib_exception(): + # Smoke-test the custom exception + e = JoblibException('foobar') + # Test the repr + repr(e) + # Test the pickle + pickle.dumps(e) + + +def test_safe_function(): + safe_division = SafeFunction(division) + if PY3_OR_LATER: + with raises(ZeroDivisionError): + safe_division(1, 0) + else: + # Under Python 2.7, exception are wrapped with a special wrapper to + # preserve runtime information of the worker environment. Python 3 does + # not need this as it preserves the traceback information by default. + with raises(TransportableException) as excinfo: + safe_division(1, 0) + assert isinstance(excinfo.value.unwrap(), ZeroDivisionError) + + safe_interrupt = SafeFunction(interrupt_raiser) + with raises(WorkerInterrupt): + safe_interrupt('x') + + +@parametrize('batch_size', [0, -1, 1.42]) +def test_invalid_batch_size(batch_size): + with raises(ValueError): + Parallel(batch_size=batch_size) + + +@parametrize('n_tasks, n_jobs, pre_dispatch, batch_size', + [(2, 2, 'all', 'auto'), + (2, 2, 'n_jobs', 'auto'), + (10, 2, 'n_jobs', 'auto'), + (517, 2, 'n_jobs', 'auto'), + (10, 2, 'n_jobs', 'auto'), + (10, 4, 'n_jobs', 'auto'), + (200, 12, 'n_jobs', 'auto'), + (25, 12, '2 * n_jobs', 1), + (250, 12, 'all', 1), + (250, 12, '2 * n_jobs', 7), + (200, 12, '2 * n_jobs', 'auto')]) +def test_dispatch_race_condition(n_tasks, n_jobs, pre_dispatch, batch_size): + # Check that using (async-)dispatch does not yield a race condition on the + # iterable generator that is not thread-safe natively. + # This is a non-regression test for the "Pool seems closed" class of error + params = {'n_jobs': n_jobs, 'pre_dispatch': pre_dispatch, + 'batch_size': batch_size} + expected = [square(i) for i in range(n_tasks)] + results = Parallel(**params)(delayed(square)(i) for i in range(n_tasks)) + assert results == expected + + +@with_multiprocessing +def test_default_mp_context(): + p = Parallel(n_jobs=2, backend='multiprocessing') + context = p._backend_args.get('context') + if sys.version_info >= (3, 4): + start_method = context.get_start_method() + # Under Python 3.4+ the multiprocessing context can be configured + # by an environment variable + env_method = os.environ.get('JOBLIB_START_METHOD', '').strip() or None + if env_method is None: + # Check the default behavior + if sys.platform == 'win32': + assert start_method == 'spawn' + else: + assert start_method == 'fork' + else: + assert start_method == env_method + else: + assert context is None + + +@with_numpy +@with_multiprocessing +@parametrize('backend', PROCESS_BACKENDS) +def test_no_blas_crash_or_freeze_with_subprocesses(backend): + if backend == 'multiprocessing': + if sys.version_info < (3, 4): + raise SkipTest('multiprocessing can cause BLAS freeze on old ' + 'Python that relies on fork.') + # Use the spawn backend that is both robust and available on all + # platforms + backend = mp.get_context('spawn') + + # Check that on recent Python version, the 'spawn' start method can make + # it possible to use multiprocessing in conjunction of any BLAS + # implementation that happens to be used by numpy with causing a freeze or + # a crash + rng = np.random.RandomState(42) + + # call BLAS DGEMM to force the initialization of the internal thread-pool + # in the main process + a = rng.randn(1000, 1000) + np.dot(a, a.T) + + # check that the internal BLAS thread-pool is not in an inconsistent state + # in the worker processes managed by multiprocessing + Parallel(n_jobs=2, backend=backend)( + delayed(np.dot)(a, a.T) for i in range(2)) + + +UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_NO_MAIN = """\ +from joblib import Parallel, delayed + +def square(x): + return x ** 2 + +backend = "{}" +if backend == "spawn": + from multiprocessing import get_context + backend = get_context(backend) + +print(Parallel(n_jobs=2, backend=backend)( + delayed(square)(i) for i in range(5))) +""" + + +@with_multiprocessing +@parametrize('backend', PROCESS_BACKENDS) +def test_parallel_with_interactively_defined_functions(backend): + # When using the "-c" flag, interactive functions defined in __main__ + # should work with any backend. + if backend == "multiprocessing" and sys.platform == "win32": + pytest.skip("Require fork start method to use interactively defined " + "functions with multiprocessing.") + code = UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_NO_MAIN.format(backend) + check_subprocess_call( + [sys.executable, '-c', code], timeout=10, + stdout_regex=r'\[0, 1, 4, 9, 16\]') + + +UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_MAIN = """\ +import sys +# Make sure that joblib is importable in the subprocess launching this +# script. This is needed in case we run the tests from the joblib root +# folder without having installed joblib +sys.path.insert(0, {joblib_root_folder!r}) + +from joblib import Parallel, delayed + +def run(f, x): + return f(x) + +{define_func} + +if __name__ == "__main__": + backend = "{backend}" + if backend == "spawn": + from multiprocessing import get_context + backend = get_context(backend) + + callable_position = "{callable_position}" + if callable_position == "delayed": + print(Parallel(n_jobs=2, backend=backend)( + delayed(square)(i) for i in range(5))) + elif callable_position == "args": + print(Parallel(n_jobs=2, backend=backend)( + delayed(run)(square, i) for i in range(5))) + else: + print(Parallel(n_jobs=2, backend=backend)( + delayed(run)(f=square, x=i) for i in range(5))) +""" + +SQUARE_MAIN = """\ +def square(x): + return x ** 2 +""" +SQUARE_LOCAL = """\ +def gen_square(): + def square(x): + return x ** 2 + return square +square = gen_square() +""" +SQUARE_LAMBDA = """\ +square = lambda x: x ** 2 +""" + + +@with_multiprocessing +@parametrize('backend', PROCESS_BACKENDS + + ([] if sys.version_info[:2] < (3, 4) or mp is None + else ['spawn'])) +@parametrize('define_func', [SQUARE_MAIN, SQUARE_LOCAL, SQUARE_LAMBDA]) +@parametrize('callable_position', ['delayed', 'args', 'kwargs']) +def test_parallel_with_unpicklable_functions_in_args( + backend, define_func, callable_position, tmpdir): + if backend in ['multiprocessing', 'spawn'] and ( + define_func != SQUARE_MAIN or sys.platform == "win32"): + pytest.skip("Not picklable with pickle") + code = UNPICKLABLE_CALLABLE_SCRIPT_TEMPLATE_MAIN.format( + define_func=define_func, backend=backend, + callable_position=callable_position, + joblib_root_folder=os.path.dirname(os.path.dirname(joblib.__file__))) + code_file = tmpdir.join("unpicklable_func_script.py") + code_file.write(code) + check_subprocess_call( + [sys.executable, code_file.strpath], timeout=10, + stdout_regex=r'\[0, 1, 4, 9, 16\]') + + +INTERACTIVE_DEFINED_FUNCTION_AND_CLASS_SCRIPT_CONTENT = """\ +import sys +# Make sure that joblib is importable in the subprocess launching this +# script. This is needed in case we run the tests from the joblib root +# folder without having installed joblib +sys.path.insert(0, {joblib_root_folder!r}) + +from joblib import Parallel, delayed +from functools import partial + +class MyClass: + '''Class defined in the __main__ namespace''' + def __init__(self, value): + self.value = value + + +def square(x, ignored=None, ignored2=None): + '''Function defined in the __main__ namespace''' + return x.value ** 2 + + +square2 = partial(square, ignored2='something') + +# Here, we do not need the `if __name__ == "__main__":` safeguard when +# using the default `loky` backend (even on Windows). + +# The following baroque function call is meant to check that joblib +# introspection rightfully uses cloudpickle instead of the (faster) pickle +# module of the standard library when necessary. In particular cloudpickle is +# necessary for functions and instances of classes interactively defined in the +# __main__ module. + +print(Parallel(n_jobs=2)( + delayed(square2)(MyClass(i), ignored=[dict(a=MyClass(1))]) + for i in range(5) +)) +""".format(joblib_root_folder=os.path.dirname( + os.path.dirname(joblib.__file__))) + + +@with_multiprocessing +def test_parallel_with_interactively_defined_functions_default_backend(tmpdir): + # The default backend (loky) accepts interactive functions defined in + # __main__ and does not require if __name__ == '__main__' even when + # the __main__ module is defined by the result of the execution of a + # filesystem script. + script = tmpdir.join('joblib_interactively_defined_function.py') + script.write(INTERACTIVE_DEFINED_FUNCTION_AND_CLASS_SCRIPT_CONTENT) + check_subprocess_call([sys.executable, script.strpath], + stdout_regex=r'\[0, 1, 4, 9, 16\]', + timeout=5) + + +INTERACTIVELY_DEFINED_SUBCLASS_WITH_METHOD_SCRIPT_CONTENT = """\ +import sys +# Make sure that joblib is importable in the subprocess launching this +# script. This is needed in case we run the tests from the joblib root +# folder without having installed joblib +sys.path.insert(0, {joblib_root_folder!r}) + +from joblib import Parallel, delayed, hash +import multiprocessing as mp +mp.util.log_to_stderr(5) + +class MyList(list): + '''MyList is interactively defined by MyList.append is a built-in''' + def __hash__(self): + # XXX: workaround limitation in cloudpickle + return hash(self).__hash__() + +l = MyList() + +print(Parallel(n_jobs=2)( + delayed(l.append)(i) for i in range(3) +)) +""".format(joblib_root_folder=os.path.dirname( + os.path.dirname(joblib.__file__))) + + +@with_multiprocessing +def test_parallel_with_interactively_defined_bound_method(tmpdir): + script = tmpdir.join('joblib_interactive_bound_method_script.py') + script.write(INTERACTIVELY_DEFINED_SUBCLASS_WITH_METHOD_SCRIPT_CONTENT) + check_subprocess_call([sys.executable, script.strpath], + stdout_regex=r'\[None, None, None\]', + stderr_regex=r'LokyProcess', + timeout=15) + + +def test_parallel_with_exhausted_iterator(): + exhausted_iterator = iter([]) + assert Parallel(n_jobs=2)(exhausted_iterator) == [] + + +def check_memmap(a): + if not isinstance(a, np.memmap): + raise TypeError('Expected np.memmap instance, got %r', + type(a)) + return a.copy() # return a regular array instead of a memmap + + +@with_numpy +@with_multiprocessing +@parametrize('backend', PROCESS_BACKENDS) +def test_auto_memmap_on_arrays_from_generator(backend): + # Non-regression test for a problem with a bad interaction between the + # GC collecting arrays recently created during iteration inside the + # parallel dispatch loop and the auto-memmap feature of Parallel. + # See: https://github.com/joblib/joblib/pull/294 + def generate_arrays(n): + for i in range(n): + yield np.ones(10, dtype=np.float32) * i + # Use max_nbytes=1 to force the use of memory-mapping even for small + # arrays + results = Parallel(n_jobs=2, max_nbytes=1, backend=backend)( + delayed(check_memmap)(a) for a in generate_arrays(100)) + for result, expected in zip(results, generate_arrays(len(results))): + np.testing.assert_array_equal(expected, result) + + # Second call to force loky to adapt the executor by growing the number + # of worker processes. This is a non-regression test for: + # https://github.com/joblib/joblib/issues/629. + results = Parallel(n_jobs=4, max_nbytes=1, backend=backend)( + delayed(check_memmap)(a) for a in generate_arrays(100)) + for result, expected in zip(results, generate_arrays(len(results))): + np.testing.assert_array_equal(expected, result) + + +def identity(arg): + return arg + + +@with_numpy +@with_multiprocessing +def test_memmap_with_big_offset(tmpdir): + fname = tmpdir.join('test.mmap').strpath + size = mmap.ALLOCATIONGRANULARITY + obj = [np.zeros(size, dtype='uint8'), np.ones(size, dtype='uint8')] + dump(obj, fname) + memmap = load(fname, mmap_mode='r') + result, = Parallel(n_jobs=2)(delayed(identity)(memmap) for _ in [0]) + assert isinstance(memmap[1], np.memmap) + assert memmap[1].offset > size + np.testing.assert_array_equal(obj, result) + + +def test_warning_about_timeout_not_supported_by_backend(): + with warns(None) as warninfo: + Parallel(timeout=1)(delayed(square)(i) for i in range(50)) + assert len(warninfo) == 1 + w = warninfo[0] + assert isinstance(w.message, UserWarning) + assert str(w.message) == ( + "The backend class 'SequentialBackend' does not support timeout. " + "You have set 'timeout=1' in Parallel but the 'timeout' parameter " + "will not be used.") + + +@parametrize('backend', ALL_VALID_BACKENDS) +@parametrize('n_jobs', [1, 2, -2, -1]) +def test_abort_backend(n_jobs, backend): + delays = ["a"] + [10] * 100 + + if os.environ.get("TRAVIS_OS_NAME") is not None and n_jobs < 0: + # Use only up to 8 cpu in travis as cpu_count return 32 whereas we + # only access 2 cores. + n_jobs += 8 + + with raises(TypeError): + t_start = time.time() + Parallel(n_jobs=n_jobs, backend=backend)( + delayed(time.sleep)(i) for i in delays) + dt = time.time() - t_start + assert dt < 20 + + +@with_numpy +@with_multiprocessing +@parametrize('backend', PROCESS_BACKENDS) +def test_memmapping_leaks(backend, tmpdir): + # Non-regression test for memmapping backends. Ensure that the data + # does not stay too long in memory + tmpdir = tmpdir.strpath + + # Use max_nbytes=1 to force the use of memory-mapping even for small + # arrays + with Parallel(n_jobs=2, max_nbytes=1, backend=backend, + temp_folder=tmpdir) as p: + p(delayed(check_memmap)(a) for a in [np.random.random(10)] * 2) + + # The memmap folder should not be clean in the context scope + assert len(os.listdir(tmpdir)) > 0 + + # Make sure that the shared memory is cleaned at the end when we exit + # the context + assert not os.listdir(tmpdir) + + # Make sure that the shared memory is cleaned at the end of a call + p = Parallel(n_jobs=2, max_nbytes=1, backend=backend) + p(delayed(check_memmap)(a) for a in [np.random.random(10)] * 2) + + assert not os.listdir(tmpdir) + + +@parametrize('backend', [None, 'loky', 'threading']) +def test_lambda_expression(backend): + # cloudpickle is used to pickle delayed callables + results = Parallel(n_jobs=2, backend=backend)( + delayed(lambda x: x ** 2)(i) for i in range(10)) + assert results == [i ** 2 for i in range(10)] + + +def test_delayed_check_pickle_deprecated(): + if sys.version_info < (3, 4): + pytest.skip("Warning check unstable under Python 2, life is too short") + + class UnpicklableCallable(object): + + def __call__(self, *args, **kwargs): + return 42 + + def __reduce__(self): + raise ValueError() + + with warns(DeprecationWarning): + f, args, kwargs = delayed(lambda x: 42, check_pickle=False)('a') + assert f('a') == 42 + assert args == ('a',) + assert kwargs == dict() + + with warns(DeprecationWarning): + f, args, kwargs = delayed(UnpicklableCallable(), + check_pickle=False)('a', option='b') + assert f('a', option='b') == 42 + assert args == ('a',) + assert kwargs == dict(option='b') + + with warns(DeprecationWarning): + with raises(ValueError): + delayed(UnpicklableCallable(), check_pickle=True) + + +@with_multiprocessing +@parametrize('backend', PROCESS_BACKENDS) +def test_backend_batch_statistics_reset(backend): + """Test that a parallel backend correctly resets its batch statistics.""" + n_jobs = 2 + n_inputs = 500 + task_time = 2. / n_inputs + + p = Parallel(verbose=10, n_jobs=n_jobs, backend=backend) + p(delayed(time.sleep)(task_time) for i in range(n_inputs)) + assert (p._backend._effective_batch_size == + p._backend._DEFAULT_EFFECTIVE_BATCH_SIZE) + assert (p._backend._smoothed_batch_duration == + p._backend._DEFAULT_SMOOTHED_BATCH_DURATION) + + p(delayed(time.sleep)(task_time) for i in range(n_inputs)) + assert (p._backend._effective_batch_size == + p._backend._DEFAULT_EFFECTIVE_BATCH_SIZE) + assert (p._backend._smoothed_batch_duration == + p._backend._DEFAULT_SMOOTHED_BATCH_DURATION) + + +def test_backend_hinting_and_constraints(): + for n_jobs in [1, 2, -1]: + assert type(Parallel(n_jobs=n_jobs)._backend) == LokyBackend + + p = Parallel(n_jobs=n_jobs, prefer='threads') + assert type(p._backend) == ThreadingBackend + + p = Parallel(n_jobs=n_jobs, prefer='processes') + assert type(p._backend) == LokyBackend + + p = Parallel(n_jobs=n_jobs, require='sharedmem') + assert type(p._backend) == ThreadingBackend + + # Explicit backend selection can override backend hinting although it + # is useless to pass a hint when selecting a backend. + p = Parallel(n_jobs=2, backend='loky', prefer='threads') + assert type(p._backend) == LokyBackend + + with parallel_backend('loky', n_jobs=2): + # Explicit backend selection by the user with the context manager + # should be respected when combined with backend hints only. + p = Parallel(prefer='threads') + assert type(p._backend) == LokyBackend + assert p.n_jobs == 2 + + with parallel_backend('loky', n_jobs=2): + # Locally hard-coded n_jobs value is respected. + p = Parallel(n_jobs=3, prefer='threads') + assert type(p._backend) == LokyBackend + assert p.n_jobs == 3 + + with parallel_backend('loky', n_jobs=2): + # Explicit backend selection by the user with the context manager + # should be ignored when the Parallel call has hard constraints. + # In this case, the default backend that supports shared mem is + # used an the default number of processes is used. + p = Parallel(require='sharedmem') + assert type(p._backend) == ThreadingBackend + assert p.n_jobs == 1 + + with parallel_backend('loky', n_jobs=2): + p = Parallel(n_jobs=3, require='sharedmem') + assert type(p._backend) == ThreadingBackend + assert p.n_jobs == 3 + + +def test_backend_hinting_and_constraints_with_custom_backends(capsys): + # Custom backends can declare that they use threads and have shared memory + # semantics: + class MyCustomThreadingBackend(ParallelBackendBase): + supports_sharedmem = True + use_threads = True + + def apply_async(self): + pass + + def effective_n_jobs(self, n_jobs): + return n_jobs + + with parallel_backend(MyCustomThreadingBackend()): + p = Parallel(n_jobs=2, prefer='processes') # ignored + assert type(p._backend) == MyCustomThreadingBackend + + p = Parallel(n_jobs=2, require='sharedmem') + assert type(p._backend) == MyCustomThreadingBackend + + class MyCustomProcessingBackend(ParallelBackendBase): + supports_sharedmem = False + use_threads = False + + def apply_async(self): + pass + + def effective_n_jobs(self, n_jobs): + return n_jobs + + with parallel_backend(MyCustomProcessingBackend()): + p = Parallel(n_jobs=2, prefer='processes') + assert type(p._backend) == MyCustomProcessingBackend + + out, err = capsys.readouterr() + assert out == "" + assert err == "" + + p = Parallel(n_jobs=2, require='sharedmem', verbose=10) + assert type(p._backend) == ThreadingBackend + + out, err = capsys.readouterr() + expected = ("Using ThreadingBackend as joblib.Parallel backend " + "instead of MyCustomProcessingBackend as the latter " + "does not provide shared memory semantics.") + assert out.strip() == expected + assert err == "" + + with raises(ValueError): + Parallel(backend=MyCustomProcessingBackend(), require='sharedmem') + + +def test_invalid_backend_hinting_and_constraints(): + with raises(ValueError): + Parallel(prefer='invalid') + + with raises(ValueError): + Parallel(require='invalid') + + with raises(ValueError): + # It is inconsistent to prefer process-based parallelism while + # requiring shared memory semantics. + Parallel(prefer='processes', require='sharedmem') + + # It is inconsistent to ask explictly for a process-based parallelism + # while requiring shared memory semantics. + with raises(ValueError): + Parallel(backend='loky', require='sharedmem') + with raises(ValueError): + Parallel(backend='multiprocessing', require='sharedmem') + + +def test_global_parallel_backend(): + default = Parallel()._backend + + pb = parallel_backend('threading') + assert isinstance(Parallel()._backend, ThreadingBackend) + + pb.unregister() + assert type(Parallel()._backend) is type(default) + + +def test_external_backends(): + def register_foo(): + BACKENDS['foo'] = ThreadingBackend + + EXTERNAL_BACKENDS['foo'] = register_foo + + with parallel_backend('foo'): + assert isinstance(Parallel()._backend, ThreadingBackend) + + +def _recursive_backend_info(limit=3, **kwargs): + """Perform nested parallel calls and introspect the backend on the way""" + + with Parallel(n_jobs=2) as p: + this_level = [(type(p._backend).__name__, p._backend.nesting_level)] + if limit == 0: + return this_level + results = p(delayed(_recursive_backend_info)(limit=limit - 1, **kwargs) + for i in range(1)) + return this_level + results[0] + + +@with_multiprocessing +@parametrize('backend', ['loky', 'threading']) +def test_nested_parallelism_limit(backend): + with parallel_backend(backend, n_jobs=2): + backend_types_and_levels = _recursive_backend_info() + + if cpu_count() == 1: + second_level_backend_type = 'SequentialBackend' + max_level = 1 + else: + second_level_backend_type = 'ThreadingBackend' + max_level = 2 + + top_level_backend_type = backend.title() + 'Backend' + expected_types_and_levels = [ + (top_level_backend_type, 0), + (second_level_backend_type, 1), + ('SequentialBackend', max_level), + ('SequentialBackend', max_level) + ] + assert backend_types_and_levels == expected_types_and_levels + + +@with_numpy +@skipif(distributed is None, reason='This test requires dask') +def test_nested_parallelism_with_dask(): + client = distributed.Client(n_workers=2, threads_per_worker=2) # noqa + + # 10 MB of data as argument to trigger implicit scattering + data = np.ones(int(1e7), dtype=np.uint8) + for i in range(2): + with parallel_backend('dask'): + backend_types_and_levels = _recursive_backend_info(data=data) + assert len(backend_types_and_levels) == 4 + assert all(name == 'DaskDistributedBackend' + for name, _ in backend_types_and_levels) + + # No argument + with parallel_backend('dask'): + backend_types_and_levels = _recursive_backend_info() + assert len(backend_types_and_levels) == 4 + assert all(name == 'DaskDistributedBackend' + for name, _ in backend_types_and_levels) + + +def _recursive_parallel(nesting_limit=None): + """A horrible function that does recursive parallel calls""" + return Parallel()(delayed(_recursive_parallel)() for i in range(2)) + + +@parametrize('backend', ['loky', 'threading']) +def test_thread_bomb_mitigation(backend): + # Test that recursive parallelism raises a recursion rather than + # saturating the operating system resources by creating a unbounded number + # of threads. + with parallel_backend(backend, n_jobs=2): + with raises(RecursionError): + _recursive_parallel() + + +def _run_parallel_sum(): + env_vars = {} + for var in ['OMP_NUM_THREADS', 'OPENBLAS_NUM_THREADS', 'MKL_NUM_THREADS', + 'VECLIB_MAXIMUM_THREADS', 'NUMEXPR_NUM_THREADS']: + env_vars[var] = os.environ.get(var) + return env_vars, parallel_sum(100) + + +@parametrize("backend", [None, 'loky']) +@skipif(parallel_sum is None, reason="Need OpenMP helper compiled") +def test_parallel_thread_limit(backend): + res = Parallel(n_jobs=2, backend=backend)( + delayed(_run_parallel_sum)() for _ in range(2) + ) + for value in res[0][0].values(): + assert value == '1' + assert all([r[1] == 1 for r in res]) + + +@skipif(distributed is not None, + reason='This test requires dask NOT installed') +def test_dask_backend_when_dask_not_installed(): + with raises(ValueError, match='Please install dask'): + parallel_backend('dask') + + +def test_zero_worker_backend(): + # joblib.Parallel should reject with an explicit error message parallel + # backends that have no worker. + class ZeroWorkerBackend(ThreadingBackend): + def configure(self, *args, **kwargs): + return 0 + + def apply_async(self, func, callback=None): # pragma: no cover + raise TimeoutError("No worker available") + + def effective_n_jobs(self, n_jobs): # pragma: no cover + return 0 + + expected_msg = "ZeroWorkerBackend has no active worker" + with parallel_backend(ZeroWorkerBackend()): + with pytest.raises(RuntimeError, match=expected_msg): + Parallel(n_jobs=2)(delayed(id)(i) for i in range(2)) + + +def test_globals_update_at_each_parallel_call(): + # This is a non-regression test related to joblib issues #836 and #833. + # Cloudpickle versions between 0.5.4 and 0.7 introduced a bug where global + # variables changes in a parent process between two calls to + # joblib.Parallel would not be propagated into the workers. + global MY_GLOBAL_VARIABLE + MY_GLOBAL_VARIABLE = "original value" + + def check_globals(): + global MY_GLOBAL_VARIABLE + return MY_GLOBAL_VARIABLE + + assert check_globals() == "original value" + + workers_global_variable = Parallel(n_jobs=2)( + delayed(check_globals)() for i in range(2)) + assert set(workers_global_variable) == {"original value"} + + # Change the value of MY_GLOBAL_VARIABLE, and make sure this change gets + # propagated into the workers environment + MY_GLOBAL_VARIABLE = "changed value" + assert check_globals() == "changed value" + + workers_global_variable = Parallel(n_jobs=2)( + delayed(check_globals)() for i in range(2)) + assert set(workers_global_variable) == {"changed value"} + + +############################################################################## +# Test environment variable in child env, in particular for limiting +# the maximal number of threads in C-library threadpools. +# + +def _check_numpy_threadpool_limits(): + import numpy as np + # Let's call BLAS on a Matrix Matrix multiplication with dimensions large + # enough to ensure that the threadpool managed by the underlying BLAS + # implementation is actually used so as to force its initialization. + a = np.random.randn(100, 100) + np.dot(a, a) + from threadpoolctl import threadpool_info + return threadpool_info() + + +def _parent_max_num_threads_for(child_module, parent_info): + for parent_module in parent_info: + if parent_module['filepath'] == child_module['filepath']: + return parent_module['num_threads'] + raise ValueError("An unexpected module was loaded in child:\n{}" + .format(child_module)) + + +def check_child_num_threads(workers_info, parent_info, num_threads): + # Check that the number of threads reported in workers_info is consistent + # with the expectation. We need to be carefull to handle the cases where + # the requested number of threads is below max_num_thread for the library. + for child_threadpool_info in workers_info: + for child_module in child_threadpool_info: + parent_max_num_threads = _parent_max_num_threads_for( + child_module, parent_info) + expected = {min(num_threads, parent_max_num_threads), num_threads} + assert child_module['num_threads'] in expected + + +@with_numpy +@with_multiprocessing +@skipif(sys.version_info < (3, 5), + reason='threadpoolctl is a python3.5+ package') +@parametrize('n_jobs', [2, 4, -2, -1]) +def test_threadpool_limitation_in_child(n_jobs): + # Check that the protection against oversubscription in workers is working + # using threadpoolctl functionalities. + + # Skip this test if numpy is not linked to a BLAS library + parent_info = _check_numpy_threadpool_limits() + if len(parent_info) == 0: + pytest.skip(msg="Need a version of numpy linked to BLAS") + + workers_threadpool_infos = Parallel(n_jobs=n_jobs)( + delayed(_check_numpy_threadpool_limits)() for i in range(2)) + + n_jobs = effective_n_jobs(n_jobs) + expected_child_num_threads = max(cpu_count() // n_jobs, 1) + + check_child_num_threads(workers_threadpool_infos, parent_info, + expected_child_num_threads) + + +@with_numpy +@with_multiprocessing +@skipif(sys.version_info < (3, 5), + reason='threadpoolctl is a python3.5+ package') +@parametrize('inner_max_num_threads', [1, 2, 4, None]) +@parametrize('n_jobs', [2, -1]) +def test_threadpool_limitation_in_child_context(n_jobs, inner_max_num_threads): + # Check that the protection against oversubscription in workers is working + # using threadpoolctl functionalities. + + # Skip this test if numpy is not linked to a BLAS library + parent_info = _check_numpy_threadpool_limits() + if len(parent_info) == 0: + pytest.skip(msg="Need a version of numpy linked to BLAS") + + with parallel_backend('loky', inner_max_num_threads=inner_max_num_threads): + workers_threadpool_infos = Parallel(n_jobs=n_jobs)( + delayed(_check_numpy_threadpool_limits)() for i in range(2)) + + n_jobs = effective_n_jobs(n_jobs) + if inner_max_num_threads is None: + expected_child_num_threads = max(cpu_count() // n_jobs, 1) + else: + expected_child_num_threads = inner_max_num_threads + + check_child_num_threads(workers_threadpool_infos, parent_info, + expected_child_num_threads) + + +@with_multiprocessing +@parametrize('n_jobs', [2, -1]) +@parametrize('var_name', ["OPENBLAS_NUM_THREADS", + "MKL_NUM_THREADS", + "OMP_NUM_THREADS"]) +def test_threadpool_limitation_in_child_override(n_jobs, var_name): + # Check that environment variables set by the user on the main process + # always have the priority. + + # Clean up the existing executor because we change the environment fo the + # parent at runtime and it is not detected in loky intentionally. + from joblib.externals.loky import get_reusable_executor + get_reusable_executor().shutdown() + + def _get_env(var_name): + return os.environ.get(var_name) + + original_var_value = os.environ.get(var_name) + try: + os.environ[var_name] = "4" + # Skip this test if numpy is not linked to a BLAS library + results = Parallel(n_jobs=n_jobs)( + delayed(_get_env)(var_name) for i in range(2)) + assert results == ["4", "4"] + + with parallel_backend('loky', inner_max_num_threads=1): + results = Parallel(n_jobs=n_jobs)( + delayed(_get_env)(var_name) for i in range(2)) + assert results == ["1", "1"] + + finally: + if original_var_value is None: + del os.environ[var_name] + else: + os.environ[var_name] = original_var_value + + +@with_numpy +@with_multiprocessing +@parametrize('backend', ['multiprocessing', 'threading', + MultiprocessingBackend(), ThreadingBackend()]) +def test_threadpool_limitation_in_child_context_error(backend): + + with raises(AssertionError, match=r"does not acc.*inner_max_num_threads"): + parallel_backend(backend, inner_max_num_threads=1) diff --git a/my_env/Lib/site-packages/joblib/test/test_store_backends.py b/my_env/Lib/site-packages/joblib/test/test_store_backends.py new file mode 100644 index 000000000..2c6198fa6 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_store_backends.py @@ -0,0 +1,56 @@ +try: + # Python 2.7: use the C pickle to speed up + # test_concurrency_safe_write which pickles big python objects + import cPickle as cpickle +except ImportError: + import pickle as cpickle +import functools +import time + +from joblib.testing import parametrize, timeout +from joblib.test.common import with_multiprocessing +from joblib.backports import concurrency_safe_rename +from joblib import Parallel, delayed +from joblib._store_backends import concurrency_safe_write + + +def write_func(output, filename): + with open(filename, 'wb') as f: + cpickle.dump(output, f) + + +def load_func(expected, filename): + for i in range(10): + try: + with open(filename, 'rb') as f: + reloaded = cpickle.load(f) + break + except (OSError, IOError): + # On Windows you can have WindowsError ([Error 5] Access + # is denied or [Error 13] Permission denied) when reading the file, + # probably because a writer process has a lock on the file + time.sleep(0.1) + else: + raise + assert expected == reloaded + + +def concurrency_safe_write_rename(to_write, filename, write_func): + temporary_filename = concurrency_safe_write(to_write, + filename, write_func) + concurrency_safe_rename(temporary_filename, filename) + + +@timeout(0) # No timeout as this test can be long +@with_multiprocessing +@parametrize('backend', ['multiprocessing', 'loky', 'threading']) +def test_concurrency_safe_write(tmpdir, backend): + # Add one item to cache + filename = tmpdir.join('test.pkl').strpath + + obj = {str(i): i for i in range(int(1e5))} + funcs = [functools.partial(concurrency_safe_write_rename, + write_func=write_func) + if i % 3 != 2 else load_func for i in range(12)] + Parallel(n_jobs=2, backend=backend)( + delayed(func)(obj, filename) for func in funcs) diff --git a/my_env/Lib/site-packages/joblib/test/test_testing.py b/my_env/Lib/site-packages/joblib/test/test_testing.py new file mode 100644 index 000000000..39ac88097 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/test/test_testing.py @@ -0,0 +1,73 @@ +import sys +import re + +from joblib.testing import raises, check_subprocess_call + + +def test_check_subprocess_call(): + code = '\n'.join(['result = 1 + 2 * 3', + 'print(result)', + 'my_list = [1, 2, 3]', + 'print(my_list)']) + + check_subprocess_call([sys.executable, '-c', code]) + + # Now checking stdout with a regex + check_subprocess_call([sys.executable, '-c', code], + # Regex needed for platform-specific line endings + stdout_regex=r'7\s{1,2}\[1, 2, 3\]') + + +def test_check_subprocess_call_non_matching_regex(): + code = '42' + non_matching_pattern = '_no_way_this_matches_anything_' + + with raises(ValueError) as excinfo: + check_subprocess_call([sys.executable, '-c', code], + stdout_regex=non_matching_pattern) + excinfo.match('Unexpected stdout.+{}'.format(non_matching_pattern)) + + +def test_check_subprocess_call_wrong_command(): + wrong_command = '_a_command_that_does_not_exist_' + with raises(OSError): + check_subprocess_call([wrong_command]) + + +def test_check_subprocess_call_non_zero_return_code(): + code_with_non_zero_exit = '\n'.join([ + 'import sys', + 'print("writing on stdout")', + 'sys.stderr.write("writing on stderr")', + 'sys.exit(123)']) + + pattern = re.compile('Non-zero return code: 123.+' + 'Stdout:\nwriting on stdout.+' + 'Stderr:\nwriting on stderr', re.DOTALL) + + with raises(ValueError) as excinfo: + check_subprocess_call([sys.executable, '-c', code_with_non_zero_exit]) + excinfo.match(pattern) + + +def test_check_subprocess_call_timeout(): + code_timing_out = '\n'.join([ + 'import time', + 'import sys', + 'print("before sleep on stdout")', + 'sys.stdout.flush()', + 'sys.stderr.write("before sleep on stderr")', + 'sys.stderr.flush()', + 'time.sleep(1.1)', + 'print("process should have be killed before")', + 'sys.stdout.flush()']) + + pattern = re.compile('Non-zero return code:.+' + 'Stdout:\nbefore sleep on stdout\\s+' + 'Stderr:\nbefore sleep on stderr', + re.DOTALL) + + with raises(ValueError) as excinfo: + check_subprocess_call([sys.executable, '-c', code_timing_out], + timeout=1) + excinfo.match(pattern) diff --git a/my_env/Lib/site-packages/joblib/testing.py b/my_env/Lib/site-packages/joblib/testing.py new file mode 100644 index 000000000..a824cac56 --- /dev/null +++ b/my_env/Lib/site-packages/joblib/testing.py @@ -0,0 +1,79 @@ +""" +Helper for testing. +""" + +import sys +import warnings +import os.path +import re +import subprocess +import threading + +import pytest +import _pytest + +from joblib._compat import PY3_OR_LATER + + +raises = pytest.raises +warns = pytest.warns +SkipTest = _pytest.runner.Skipped +skipif = pytest.mark.skipif +fixture = pytest.fixture +parametrize = pytest.mark.parametrize +timeout = pytest.mark.timeout + + +def warnings_to_stdout(): + """ Redirect all warnings to stdout. + """ + showwarning_orig = warnings.showwarning + + def showwarning(msg, cat, fname, lno, file=None, line=0): + showwarning_orig(msg, cat, os.path.basename(fname), line, sys.stdout) + + warnings.showwarning = showwarning + # warnings.simplefilter('always') + + +def check_subprocess_call(cmd, timeout=5, stdout_regex=None, + stderr_regex=None): + """Runs a command in a subprocess with timeout in seconds. + + Also checks returncode is zero, stdout if stdout_regex is set, and + stderr if stderr_regex is set. + """ + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + + def kill_process(): + warnings.warn("Timeout running {}".format(cmd)) + proc.kill() + + timer = threading.Timer(timeout, kill_process) + try: + timer.start() + stdout, stderr = proc.communicate() + + if PY3_OR_LATER: + stdout, stderr = stdout.decode(), stderr.decode() + if proc.returncode != 0: + message = ( + 'Non-zero return code: {}.\nStdout:\n{}\n' + 'Stderr:\n{}').format( + proc.returncode, stdout, stderr) + raise ValueError(message) + + if (stdout_regex is not None and + not re.search(stdout_regex, stdout)): + raise ValueError( + "Unexpected stdout: {!r} does not match:\n{!r}".format( + stdout_regex, stdout)) + if (stderr_regex is not None and + not re.search(stderr_regex, stderr)): + raise ValueError( + "Unexpected stderr: {!r} does not match:\n{!r}".format( + stderr_regex, stderr)) + + finally: + timer.cancel() diff --git a/my_env/Lib/site-packages/pip-19.3.1.dist-info/INSTALLER b/my_env/Lib/site-packages/pip-19.3.1.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/my_env/Lib/site-packages/pip-19.3.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/my_env/Lib/site-packages/pip-19.3.1.dist-info/LICENSE.txt b/my_env/Lib/site-packages/pip-19.3.1.dist-info/LICENSE.txt new file mode 100644 index 000000000..737fec5c5 --- /dev/null +++ b/my_env/Lib/site-packages/pip-19.3.1.dist-info/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2008-2019 The pip developers (see AUTHORS.txt file) + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/my_env/Lib/site-packages/pip-19.3.1.dist-info/METADATA b/my_env/Lib/site-packages/pip-19.3.1.dist-info/METADATA new file mode 100644 index 000000000..e2b495eb4 --- /dev/null +++ b/my_env/Lib/site-packages/pip-19.3.1.dist-info/METADATA @@ -0,0 +1,82 @@ +Metadata-Version: 2.1 +Name: pip +Version: 19.3.1 +Summary: The PyPA recommended tool for installing Python packages. +Home-page: https://pip.pypa.io/ +Author: The pip developers +Author-email: pypa-dev@groups.google.com +License: MIT +Keywords: distutils easy_install egg setuptools wheel virtualenv +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Topic :: Software Development :: Build Tools +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.* + +pip - The Python Package Installer +================================== + +.. image:: https://img.shields.io/pypi/v/pip.svg + :target: https://pypi.org/project/pip/ + +.. image:: https://readthedocs.org/projects/pip/badge/?version=latest + :target: https://pip.pypa.io/en/latest + +pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes. + +Please take a look at our documentation for how to install and use pip: + +* `Installation`_ +* `Usage`_ + +Updates are released regularly, with a new version every 3 months. More details can be found in our documentation: + +* `Release notes`_ +* `Release process`_ + +If you find bugs, need help, or want to talk to the developers please use our mailing lists or chat rooms: + +* `Issue tracking`_ +* `Discourse channel`_ +* `User IRC`_ + +If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms: + +* `GitHub page`_ +* `Dev documentation`_ +* `Dev mailing list`_ +* `Dev IRC`_ + +Code of Conduct +--------------- + +Everyone interacting in the pip project's codebases, issue trackers, chat +rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_. + +.. _package installer: https://packaging.python.org/en/latest/current/ +.. _Python Package Index: https://pypi.org +.. _Installation: https://pip.pypa.io/en/stable/installing.html +.. _Usage: https://pip.pypa.io/en/stable/ +.. _Release notes: https://pip.pypa.io/en/stable/news.html +.. _Release process: https://pip.pypa.io/en/latest/development/release-process/ +.. _GitHub page: https://github.com/pypa/pip +.. _Dev documentation: https://pip.pypa.io/en/latest/development +.. _Issue tracking: https://github.com/pypa/pip/issues +.. _Discourse channel: https://discuss.python.org/c/packaging +.. _Dev mailing list: https://groups.google.com/forum/#!forum/pypa-dev +.. _User IRC: https://webchat.freenode.net/?channels=%23pypa +.. _Dev IRC: https://webchat.freenode.net/?channels=%23pypa-dev +.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ + + diff --git a/my_env/Lib/site-packages/pip-19.3.1.dist-info/RECORD b/my_env/Lib/site-packages/pip-19.3.1.dist-info/RECORD new file mode 100644 index 000000000..607d45704 --- /dev/null +++ b/my_env/Lib/site-packages/pip-19.3.1.dist-info/RECORD @@ -0,0 +1,670 @@ +../../Scripts/pip.exe,sha256=JXxrJazIUXuUCBlTvY6aMFHhGLMZXDLF--ULYxcaH2A,103304 +../../Scripts/pip3.7.exe,sha256=JXxrJazIUXuUCBlTvY6aMFHhGLMZXDLF--ULYxcaH2A,103304 +../../Scripts/pip3.exe,sha256=JXxrJazIUXuUCBlTvY6aMFHhGLMZXDLF--ULYxcaH2A,103304 +pip-19.3.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip-19.3.1.dist-info/LICENSE.txt,sha256=W6Ifuwlk-TatfRU2LR7W1JMcyMj5_y1NkRkOEJvnRDE,1090 +pip-19.3.1.dist-info/METADATA,sha256=3VTJN81wKoCumM54Ay7Je-xOiIkScmdYQu9WD43uK5o,3245 +pip-19.3.1.dist-info/RECORD,, +pip-19.3.1.dist-info/WHEEL,sha256=8zNYZbwQSXoB9IfXOjPfeNwvAsALAjffgk27FqvCWbo,110 +pip-19.3.1.dist-info/entry_points.txt,sha256=UgRCnURjFVRYG8T_Od_EGhoGPr0vPR8xGqp3_CdY2RY,113 +pip-19.3.1.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip/__init__.py,sha256=3XVcbBDOOau8B2kbTs7mairuEe_dyGELVtflVt0LMVs,23 +pip/__main__.py,sha256=JhJZiiWUmlPTwFOZ7_L68hWG4nUVQTDTtwc1o_yWdWw,628 +pip/__pycache__/__init__.cpython-37.pyc,, +pip/__pycache__/__main__.cpython-37.pyc,, +pip/_internal/__init__.py,sha256=4lqJ4waZxiP4QFg34znQ3j5zdyDsrWZkERPeLAs7lT8,80 +pip/_internal/__pycache__/__init__.cpython-37.pyc,, +pip/_internal/__pycache__/build_env.cpython-37.pyc,, +pip/_internal/__pycache__/cache.cpython-37.pyc,, +pip/_internal/__pycache__/collector.cpython-37.pyc,, +pip/_internal/__pycache__/configuration.cpython-37.pyc,, +pip/_internal/__pycache__/download.cpython-37.pyc,, +pip/_internal/__pycache__/exceptions.cpython-37.pyc,, +pip/_internal/__pycache__/index.cpython-37.pyc,, +pip/_internal/__pycache__/legacy_resolve.cpython-37.pyc,, +pip/_internal/__pycache__/locations.cpython-37.pyc,, +pip/_internal/__pycache__/main.cpython-37.pyc,, +pip/_internal/__pycache__/pep425tags.cpython-37.pyc,, +pip/_internal/__pycache__/pyproject.cpython-37.pyc,, +pip/_internal/__pycache__/self_outdated_check.cpython-37.pyc,, +pip/_internal/__pycache__/wheel.cpython-37.pyc,, +pip/_internal/build_env.py,sha256=h8_IrSllK1aEv4cmoO9G7l5XDrwMeq2aADy6EWqbEKs,7517 +pip/_internal/cache.py,sha256=tv5gyBOh4gx8my0ikxCEHzg92Y5D8mCbcE4lq9rQLhw,8371 +pip/_internal/cli/__init__.py,sha256=FkHBgpxxb-_gd6r1FjnNhfMOzAUYyXoXKJ6abijfcFU,132 +pip/_internal/cli/__pycache__/__init__.cpython-37.pyc,, +pip/_internal/cli/__pycache__/autocompletion.cpython-37.pyc,, +pip/_internal/cli/__pycache__/base_command.cpython-37.pyc,, +pip/_internal/cli/__pycache__/cmdoptions.cpython-37.pyc,, +pip/_internal/cli/__pycache__/command_context.cpython-37.pyc,, +pip/_internal/cli/__pycache__/main_parser.cpython-37.pyc,, +pip/_internal/cli/__pycache__/parser.cpython-37.pyc,, +pip/_internal/cli/__pycache__/req_command.cpython-37.pyc,, +pip/_internal/cli/__pycache__/status_codes.cpython-37.pyc,, +pip/_internal/cli/autocompletion.py,sha256=KLBLfPkMKgkl6FS6RGlYlgRmdxFiwvdefv3Ywt5JqzM,6169 +pip/_internal/cli/base_command.py,sha256=Xg0kP33AsjMYqXmFoZ-HX6-hRM5QaKDXAJRXLO03IVU,6504 +pip/_internal/cli/cmdoptions.py,sha256=y6x_kbx-obAF2i6rO0cZR2HOi5SC31LKxl0ZjQV6uOs,26839 +pip/_internal/cli/command_context.py,sha256=F0hZ0Xm8NZAgcOpl5J46OpjvAhIgx5P1nZHGaAAxlmc,796 +pip/_internal/cli/main_parser.py,sha256=W9OWeryh7ZkqELohaFh0Ko9sB98ZkSeDmnYbOZ1imBc,2819 +pip/_internal/cli/parser.py,sha256=O9djTuYQuSfObiY-NU6p4MJCfWsRUnDpE2YGA_fwols,9487 +pip/_internal/cli/req_command.py,sha256=J1fTDjVZAExZDMBEqwJQ-NgNlab1g8zE1nZND-6TnP0,11363 +pip/_internal/cli/status_codes.py,sha256=F6uDG6Gj7RNKQJUDnd87QKqI16Us-t-B0wPF_4QMpWc,156 +pip/_internal/collector.py,sha256=zGSX67z_CN8uGIxxseKTIV2TC1QN1AE9mwBPvodTxak,18007 +pip/_internal/commands/__init__.py,sha256=uTSj58QlrSKeXqCUSdL-eAf_APzx5BHy1ABxb0j5ZNE,3714 +pip/_internal/commands/__pycache__/__init__.cpython-37.pyc,, +pip/_internal/commands/__pycache__/check.cpython-37.pyc,, +pip/_internal/commands/__pycache__/completion.cpython-37.pyc,, +pip/_internal/commands/__pycache__/configuration.cpython-37.pyc,, +pip/_internal/commands/__pycache__/debug.cpython-37.pyc,, +pip/_internal/commands/__pycache__/download.cpython-37.pyc,, +pip/_internal/commands/__pycache__/freeze.cpython-37.pyc,, +pip/_internal/commands/__pycache__/hash.cpython-37.pyc,, +pip/_internal/commands/__pycache__/help.cpython-37.pyc,, +pip/_internal/commands/__pycache__/install.cpython-37.pyc,, +pip/_internal/commands/__pycache__/list.cpython-37.pyc,, +pip/_internal/commands/__pycache__/search.cpython-37.pyc,, +pip/_internal/commands/__pycache__/show.cpython-37.pyc,, +pip/_internal/commands/__pycache__/uninstall.cpython-37.pyc,, +pip/_internal/commands/__pycache__/wheel.cpython-37.pyc,, +pip/_internal/commands/check.py,sha256=mgLNYT3bd6Kmynwh4zzcBmVlFZ-urMo40jTgk6U405E,1505 +pip/_internal/commands/completion.py,sha256=UFQvq0Q4_B96z1bvnQyMOq82aPSu05RejbLmqeTZjC0,2975 +pip/_internal/commands/configuration.py,sha256=6riioZjMhsNSEct7dE-X8SobGodk3WERKJvuyjBje4Q,7226 +pip/_internal/commands/debug.py,sha256=m9Ap_dd5jd7W6FbE9_t5495SAEvUC1vnDZ2m-TYXsQ4,3394 +pip/_internal/commands/download.py,sha256=J6hxq7dO8Ld751WYueAdC18xiGhi27B6lrdOefFxwZo,5577 +pip/_internal/commands/freeze.py,sha256=G9I_yoBHlpWLX1qItsWNOmmqc8ET7pekFybdbV333d4,3464 +pip/_internal/commands/hash.py,sha256=47teimfAPhpkaVbSDaafck51BT3XXYuL83lAqc5lOcE,1735 +pip/_internal/commands/help.py,sha256=Nhecq--ydFn80Gm1Zvbf9943EcRJfO0TnXUhsF0RO7s,1181 +pip/_internal/commands/install.py,sha256=c9ygA62KdEZzTfJqU8_2NoHs8IXcpFMspSHhim5laTY,23853 +pip/_internal/commands/list.py,sha256=wQijUCcLQmME_ryAk1EqjBM4CNfF8FXt5XGC5o3lQjc,10548 +pip/_internal/commands/search.py,sha256=7Il8nKZ9mM7qF5jlnBoPvSIFY9f-0-5IbYoX3miTuZY,5148 +pip/_internal/commands/show.py,sha256=Vzsj2oX0JBl94MPyF3LV8YoMcigl8B2UsMM8zp0pH2s,6792 +pip/_internal/commands/uninstall.py,sha256=8mldFbrQecSoWDZRqxBgJkrlvx6Y9Iy7cs-2BIgtXt4,2983 +pip/_internal/commands/wheel.py,sha256=cDwoMefUjOdLqE29rQGYwvdzwvsV0j5Ac7pCszbqaK8,6408 +pip/_internal/configuration.py,sha256=ug70zCMs2OYEgef_6uebyXWDknbY-hz5cSaL9CpLYkI,14218 +pip/_internal/distributions/__init__.py,sha256=plnByCzRAZJL98kuchZ4PoRKxseDWM7wBfjvb2_fMw8,967 +pip/_internal/distributions/__pycache__/__init__.cpython-37.pyc,, +pip/_internal/distributions/__pycache__/base.cpython-37.pyc,, +pip/_internal/distributions/__pycache__/installed.cpython-37.pyc,, +pip/_internal/distributions/__pycache__/wheel.cpython-37.pyc,, +pip/_internal/distributions/base.py,sha256=91UqVXWnIyQPpIQed4nAuYWkGY665aYIV1EjS-CkBEg,1108 +pip/_internal/distributions/installed.py,sha256=4bZq8NqgXgPqX-yTz94WzTRvobjwDnxVnFCL24FjAWA,542 +pip/_internal/distributions/source/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/distributions/source/__pycache__/__init__.cpython-37.pyc,, +pip/_internal/distributions/source/__pycache__/legacy.cpython-37.pyc,, +pip/_internal/distributions/source/legacy.py,sha256=8QbAup0CBA5iPsSAJgxZyz1tQxO1C6hvfFpTlCJnyKE,3941 +pip/_internal/distributions/wheel.py,sha256=0hkgI9NpkT4bCwA9RTsX2NJcz9MJyPhlh3f7Z3529sY,616 +pip/_internal/download.py,sha256=X7XcEO2L5-VlcRkwDZ-y5GMCmmnt33yoD6AP3qCi-lI,20297 +pip/_internal/exceptions.py,sha256=6YRuwXAK6F1iyUWKIkCIpWWN2khkAn1sZOgrFA9S8Ro,10247 +pip/_internal/index.py,sha256=P5WnrP8zyBK29EFDCcIsznQquTNn4ZL-cYP8L-NbfPU,36887 +pip/_internal/legacy_resolve.py,sha256=_lQXUAZT6CeYeatartpS-5SfNYCSRc5Dsx1jbvCESGg,17129 +pip/_internal/locations.py,sha256=n6KALLEJN-L99QFHPNdJl3nMktwcpmqMyyo6EXZoCL0,5414 +pip/_internal/main.py,sha256=ikuDY1c82JZivOvnSXJZN31IeeZF_BkNpgZZ90p6iJ4,1359 +pip/_internal/models/__init__.py,sha256=3DHUd_qxpPozfzouoqa9g9ts1Czr5qaHfFxbnxriepM,63 +pip/_internal/models/__pycache__/__init__.cpython-37.pyc,, +pip/_internal/models/__pycache__/candidate.cpython-37.pyc,, +pip/_internal/models/__pycache__/format_control.cpython-37.pyc,, +pip/_internal/models/__pycache__/index.cpython-37.pyc,, +pip/_internal/models/__pycache__/link.cpython-37.pyc,, +pip/_internal/models/__pycache__/search_scope.cpython-37.pyc,, +pip/_internal/models/__pycache__/selection_prefs.cpython-37.pyc,, +pip/_internal/models/__pycache__/target_python.cpython-37.pyc,, +pip/_internal/models/candidate.py,sha256=S5ipn5ZvnWFX_A84OGrtc4DAZTJM7GSnIyDIA8PwZWw,1277 +pip/_internal/models/format_control.py,sha256=bMcS0iTVLBXrYRDkGeGqYE3pTQUR96T7cGyMtLeH0Fs,2592 +pip/_internal/models/index.py,sha256=K59A8-hVhBM20Xkahr4dTwP7OjkJyEqXH11UwHFVgqM,1060 +pip/_internal/models/link.py,sha256=MFYBc2ko2B--zFyk6JBnorkAdFpJ8lwozz-64YBdDO0,6860 +pip/_internal/models/search_scope.py,sha256=25LTMmqHvKxCpOsEH1qcb0Id-hqATsg2SVIjcxY702o,3971 +pip/_internal/models/selection_prefs.py,sha256=rPeif2KKjhTPXeMoQYffjqh10oWpXhdkxRDaPT1HO8k,1908 +pip/_internal/models/target_python.py,sha256=d66ljdpZZtAAQsuOytiZ7yq6spCa8GOmz5Vf7uoVZT0,3820 +pip/_internal/network/__init__.py,sha256=jf6Tt5nV_7zkARBrKojIXItgejvoegVJVKUbhAa5Ioc,50 +pip/_internal/network/__pycache__/__init__.cpython-37.pyc,, +pip/_internal/network/__pycache__/auth.cpython-37.pyc,, +pip/_internal/network/__pycache__/cache.cpython-37.pyc,, +pip/_internal/network/__pycache__/session.cpython-37.pyc,, +pip/_internal/network/__pycache__/xmlrpc.cpython-37.pyc,, +pip/_internal/network/auth.py,sha256=K3G1ukKb3PiH8w_UnpXTz8qQsTULO-qdbfOE9zTo1fE,11119 +pip/_internal/network/cache.py,sha256=WJafQhl9_gSxvEMvYN-ecsijGscKCVPsb09sEUbwL-E,2233 +pip/_internal/network/session.py,sha256=m2E-pkpE3nWVswt2JzKP9NANwfhf38SjDOUor0cxqd8,15842 +pip/_internal/network/xmlrpc.py,sha256=AL115M3vFJ8xiHVJneb8Hi0ZFeRvdPhblC89w25OG5s,1597 +pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/operations/__pycache__/__init__.cpython-37.pyc,, +pip/_internal/operations/__pycache__/check.cpython-37.pyc,, +pip/_internal/operations/__pycache__/freeze.cpython-37.pyc,, +pip/_internal/operations/__pycache__/generate_metadata.cpython-37.pyc,, +pip/_internal/operations/__pycache__/prepare.cpython-37.pyc,, +pip/_internal/operations/check.py,sha256=SG2AuZ4NFwUPAWo4OQOotKCn6OUxjkAgBdehNAo_2sM,5354 +pip/_internal/operations/freeze.py,sha256=MeHazCBo6DF0B2ay0t0CqRRfR4bETqKB-ANv4yIq4Bg,9826 +pip/_internal/operations/generate_metadata.py,sha256=oHJtWo0QpOt5xt5xQTfOEVNOpaPy9E0lhMCIE6Upidw,4699 +pip/_internal/operations/prepare.py,sha256=_TNie4ORlITMh04dkEQcBVDFkcz5FW67VjUfeJDRUcM,11279 +pip/_internal/pep425tags.py,sha256=mCZA3yvHjZfQGnQti2sNfzrinhLmDp0o9Fwb826Edj4,15941 +pip/_internal/pyproject.py,sha256=98g1oHmpdqraOqAJuoCDr2XP3QQuN5oEuoD0fWDtVhE,6490 +pip/_internal/req/__init__.py,sha256=iR73_MGlD4N2Dg86t2kooz7okpZgpAuZUSROrR9KkkE,2467 +pip/_internal/req/__pycache__/__init__.cpython-37.pyc,, +pip/_internal/req/__pycache__/constructors.cpython-37.pyc,, +pip/_internal/req/__pycache__/req_file.cpython-37.pyc,, +pip/_internal/req/__pycache__/req_install.cpython-37.pyc,, +pip/_internal/req/__pycache__/req_set.cpython-37.pyc,, +pip/_internal/req/__pycache__/req_tracker.cpython-37.pyc,, +pip/_internal/req/__pycache__/req_uninstall.cpython-37.pyc,, +pip/_internal/req/constructors.py,sha256=DcUoVBQabogW6FoTxo_7FApvYTBk5LmiTtLOSi9Wh7Y,14388 +pip/_internal/req/req_file.py,sha256=Ip4KV67FLLexYq9xVGgzjbyjIQCP5W-RmkVZWFWV5AY,14294 +pip/_internal/req/req_install.py,sha256=NYPFJ7UTN1YS1m2twuxfXKQfSQnEwUWadkvk3Ez8o_s,36573 +pip/_internal/req/req_set.py,sha256=ykotCTON9_be3yzrkXs9yv986Tv-p-Sk5-q8tqgk6BY,8132 +pip/_internal/req/req_tracker.py,sha256=M5VZxoKrvDmwH2G2kk1QthJmhF19zCmKSXLY-WDLKWY,3195 +pip/_internal/req/req_uninstall.py,sha256=VyukcnrMTRob977YO6C5t9CVadmZIF24Yj30Hfz4lpc,23590 +pip/_internal/self_outdated_check.py,sha256=0RuTI8jXNm_CK7ZV8huRUqtabE0SQgwJSogapEti_zo,7934 +pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/utils/__pycache__/__init__.cpython-37.pyc,, +pip/_internal/utils/__pycache__/appdirs.cpython-37.pyc,, +pip/_internal/utils/__pycache__/compat.cpython-37.pyc,, +pip/_internal/utils/__pycache__/deprecation.cpython-37.pyc,, +pip/_internal/utils/__pycache__/encoding.cpython-37.pyc,, +pip/_internal/utils/__pycache__/filesystem.cpython-37.pyc,, +pip/_internal/utils/__pycache__/filetypes.cpython-37.pyc,, +pip/_internal/utils/__pycache__/glibc.cpython-37.pyc,, +pip/_internal/utils/__pycache__/hashes.cpython-37.pyc,, +pip/_internal/utils/__pycache__/inject_securetransport.cpython-37.pyc,, +pip/_internal/utils/__pycache__/logging.cpython-37.pyc,, +pip/_internal/utils/__pycache__/marker_files.cpython-37.pyc,, +pip/_internal/utils/__pycache__/misc.cpython-37.pyc,, +pip/_internal/utils/__pycache__/models.cpython-37.pyc,, +pip/_internal/utils/__pycache__/packaging.cpython-37.pyc,, +pip/_internal/utils/__pycache__/setuptools_build.cpython-37.pyc,, +pip/_internal/utils/__pycache__/subprocess.cpython-37.pyc,, +pip/_internal/utils/__pycache__/temp_dir.cpython-37.pyc,, +pip/_internal/utils/__pycache__/typing.cpython-37.pyc,, +pip/_internal/utils/__pycache__/ui.cpython-37.pyc,, +pip/_internal/utils/__pycache__/unpacking.cpython-37.pyc,, +pip/_internal/utils/__pycache__/urls.cpython-37.pyc,, +pip/_internal/utils/__pycache__/virtualenv.cpython-37.pyc,, +pip/_internal/utils/appdirs.py,sha256=hchP3vBMefwp3Jr05IqN6cssVlbzYPTj062hJzBDhA4,9766 +pip/_internal/utils/compat.py,sha256=i9XoohQwMK73PwN0Nkan6DfiG47rdyllTXvX3WJO30c,9565 +pip/_internal/utils/deprecation.py,sha256=pBnNogoA4UGTxa_JDnPXBRRYpKMbExAhXpBwAwklOBs,3318 +pip/_internal/utils/encoding.py,sha256=hxZz0t3Whw3d4MHQEiofxalTlfKwxFdLc8fpeGfhKo8,1320 +pip/_internal/utils/filesystem.py,sha256=TG_hHd0BZkYih17f4z4wEi0XXheo5TE-UnAQB964Pf0,3334 +pip/_internal/utils/filetypes.py,sha256=R2FwzoeX7b-rZALOXx5cuO8VPPMhUQ4ne7wm3n3IcWA,571 +pip/_internal/utils/glibc.py,sha256=HXnQNSGfrldTYbF6V6asT86h6QQKPwumYok1MFyQDnM,4397 +pip/_internal/utils/hashes.py,sha256=XXj0SZfz4piN8XgqloGzPnfQYGTcSZZDtuqa1zWCts8,4020 +pip/_internal/utils/inject_securetransport.py,sha256=M17ZlFVY66ApgeASVjKKLKNz0LAfk-SyU0HZ4ZB6MmI,810 +pip/_internal/utils/logging.py,sha256=aJL7NldPhS5KGFof6Qt3o3MG5cjm5TOoo7bGRu9_wsg,13033 +pip/_internal/utils/marker_files.py,sha256=ktYfV9ccPKzVREiWlmTveiKOztk0L7F2zXi2ob2lymM,823 +pip/_internal/utils/misc.py,sha256=4klI9CWDMj5zJeg171uJIfqqU24MSEJqxGrMbe5xwdw,25249 +pip/_internal/utils/models.py,sha256=IA0hw_T4awQzui0kqfIEASm5yLtgZAB08ag59Nip5G8,1148 +pip/_internal/utils/packaging.py,sha256=VtiwcAAL7LBi7tGL2je7LeW4bE11KMHGCsJ1NZY5XtM,3035 +pip/_internal/utils/setuptools_build.py,sha256=vHAmalU_IcDvU7ioRioVspEyVD2N4_NPDSbtHOoow8g,1631 +pip/_internal/utils/subprocess.py,sha256=M3oBdbCSxDhmQSWYRZo0PTzGuyYvJaNIzt3DVCmtjJI,9911 +pip/_internal/utils/temp_dir.py,sha256=fFNkfrE3MlyjZjoLzeX9A2AkjUWEEEoP-8ObyX3BSnE,5521 +pip/_internal/utils/typing.py,sha256=bF73ImJzIaxLLEVwfEaSJzFGqV9LaxkQBvDULIyr1jI,1125 +pip/_internal/utils/ui.py,sha256=SmwDgg45shGo0wVJSK3MUZUQtM4DNGdQntE3n2G97yk,13906 +pip/_internal/utils/unpacking.py,sha256=M944JTSiapBOSKLWu7lbawpVHSE7flfzZTEr3TAG7v8,9438 +pip/_internal/utils/urls.py,sha256=aNV9wq5ClUmrz6sG-al7hEWJ4ToitOy7l82CmFGFNW8,1481 +pip/_internal/utils/virtualenv.py,sha256=oSTrUMQUqmuXcDvQZGwV65w-hlvhBAqyQiWRxLf8fN0,891 +pip/_internal/vcs/__init__.py,sha256=viJxJRqRE_mVScum85bgQIXAd6o0ozFt18VpC-qIJrM,617 +pip/_internal/vcs/__pycache__/__init__.cpython-37.pyc,, +pip/_internal/vcs/__pycache__/bazaar.cpython-37.pyc,, +pip/_internal/vcs/__pycache__/git.cpython-37.pyc,, +pip/_internal/vcs/__pycache__/mercurial.cpython-37.pyc,, +pip/_internal/vcs/__pycache__/subversion.cpython-37.pyc,, +pip/_internal/vcs/__pycache__/versioncontrol.cpython-37.pyc,, +pip/_internal/vcs/bazaar.py,sha256=84q1-kj1_nJ9AMzMu8RmMp-riRZu81M7K9kowcYgi3U,3957 +pip/_internal/vcs/git.py,sha256=3KFP0-GnYM8FX-Obwo3XjE4JW_YEl4HVERDSSsjf4Ck,13274 +pip/_internal/vcs/mercurial.py,sha256=2mg7BdYI_Fe00fF6omaNccFQLPHBsDBG5CAEzvqn5sA,5110 +pip/_internal/vcs/subversion.py,sha256=Fpwy71AmuqXnoKi6h1SrXRtPjEMn8fieuM1O4j01IBg,12292 +pip/_internal/vcs/versioncontrol.py,sha256=HiWHloaYAo4UWGxJGZhG0nO0PWS513H6ACiqT0z5Yh0,21374 +pip/_internal/wheel.py,sha256=emOltdF4VmpsSabfIBbtlCcozviIOnUwIdB0D3_VMrQ,43080 +pip/_vendor/__init__.py,sha256=gEJYEfJm7XGLslyjW3KBQyQxyTYxdvTEkRT5Bz28MDs,4657 +pip/_vendor/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/__pycache__/appdirs.cpython-37.pyc,, +pip/_vendor/__pycache__/contextlib2.cpython-37.pyc,, +pip/_vendor/__pycache__/distro.cpython-37.pyc,, +pip/_vendor/__pycache__/ipaddress.cpython-37.pyc,, +pip/_vendor/__pycache__/pyparsing.cpython-37.pyc,, +pip/_vendor/__pycache__/retrying.cpython-37.pyc,, +pip/_vendor/__pycache__/six.cpython-37.pyc,, +pip/_vendor/appdirs.py,sha256=BENKsvcA08IpccD9345-rMrg3aXWFA1q6BFEglnHg6I,24547 +pip/_vendor/cachecontrol/__init__.py,sha256=6cRPchVqkAkeUtYTSW8qCetjSqJo-GxP-n4VMVDbvmc,302 +pip/_vendor/cachecontrol/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-37.pyc,, +pip/_vendor/cachecontrol/__pycache__/adapter.cpython-37.pyc,, +pip/_vendor/cachecontrol/__pycache__/cache.cpython-37.pyc,, +pip/_vendor/cachecontrol/__pycache__/compat.cpython-37.pyc,, +pip/_vendor/cachecontrol/__pycache__/controller.cpython-37.pyc,, +pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-37.pyc,, +pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-37.pyc,, +pip/_vendor/cachecontrol/__pycache__/serialize.cpython-37.pyc,, +pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-37.pyc,, +pip/_vendor/cachecontrol/_cmd.py,sha256=URGE0KrA87QekCG3SGPatlSPT571dZTDjNa-ZXX3pDc,1295 +pip/_vendor/cachecontrol/adapter.py,sha256=eBGAtVNRZgtl_Kj5JV54miqL9YND-D0JZPahwY8kFtY,4863 +pip/_vendor/cachecontrol/cache.py,sha256=1fc4wJP8HYt1ycnJXeEw5pCpeBL2Cqxx6g9Fb0AYDWQ,805 +pip/_vendor/cachecontrol/caches/__init__.py,sha256=-gHNKYvaeD0kOk5M74eOrsSgIKUtC6i6GfbmugGweEo,86 +pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-37.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-37.pyc,, +pip/_vendor/cachecontrol/caches/file_cache.py,sha256=nYVKsJtXh6gJXvdn1iWyrhxvkwpQrK-eKoMRzuiwkKk,4153 +pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=HxelMpNCo-dYr2fiJDwM3hhhRmxUYtB5tXm1GpAAT4Y,856 +pip/_vendor/cachecontrol/compat.py,sha256=kHNvMRdt6s_Xwqq_9qJmr9ou3wYMOMUMxPPcwNxT8Mc,695 +pip/_vendor/cachecontrol/controller.py,sha256=U7g-YwizQ2O5NRgK_MZreF1ntM4E49C3PuF3od-Vwz4,13698 +pip/_vendor/cachecontrol/filewrapper.py,sha256=vACKO8Llzu_ZWyjV1Fxn1MA4TGU60N5N3GSrAFdAY2Q,2533 +pip/_vendor/cachecontrol/heuristics.py,sha256=BFGHJ3yQcxvZizfo90LLZ04T_Z5XSCXvFotrp7Us0sc,4070 +pip/_vendor/cachecontrol/serialize.py,sha256=GebE34fgToyWwAsRPguh8hEPN6CqoG-5hRMXRsjVABQ,6954 +pip/_vendor/cachecontrol/wrapper.py,sha256=sfr9YHWx-5TwNz1H5rT6QOo8ggII6v3vbEDjQFwR6wc,671 +pip/_vendor/certifi/__init__.py,sha256=WFoavXHhpX-BZ5kbvyinZTbhLsqPJypLKIZu29nUsQg,52 +pip/_vendor/certifi/__main__.py,sha256=NaCn6WtWME-zzVWQ2j4zFyl8cY4knDa9CwtHNIeFPhM,53 +pip/_vendor/certifi/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/certifi/__pycache__/__main__.cpython-37.pyc,, +pip/_vendor/certifi/__pycache__/core.cpython-37.pyc,, +pip/_vendor/certifi/cacert.pem,sha256=cVC1b0T-OcQzgdcRql2yMxT7O08O6pcJHnuO9nbLLn0,278533 +pip/_vendor/certifi/core.py,sha256=EuFc2BsToG5O1-qsx4BSjQ1r1-7WRtH87b1WflZOWhI,218 +pip/_vendor/chardet/__init__.py,sha256=YsP5wQlsHJ2auF1RZJfypiSrCA7_bQiRm3ES_NI76-Y,1559 +pip/_vendor/chardet/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/big5freq.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/big5prober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/chardistribution.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/charsetprober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/compat.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/cp949prober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/enums.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/escprober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/escsm.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/eucjpprober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/euckrfreq.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/euckrprober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/euctwfreq.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/euctwprober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/gb2312freq.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/gb2312prober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/hebrewprober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/jisfreq.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/jpcntx.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/langcyrillicmodel.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/langthaimodel.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/latin1prober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/mbcssm.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/sjisprober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/universaldetector.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/utf8prober.cpython-37.pyc,, +pip/_vendor/chardet/__pycache__/version.cpython-37.pyc,, +pip/_vendor/chardet/big5freq.py,sha256=D_zK5GyzoVsRes0HkLJziltFQX0bKCLOrFe9_xDvO_8,31254 +pip/_vendor/chardet/big5prober.py,sha256=kBxHbdetBpPe7xrlb-e990iot64g_eGSLd32lB7_h3M,1757 +pip/_vendor/chardet/chardistribution.py,sha256=3woWS62KrGooKyqz4zQSnjFbJpa6V7g02daAibTwcl8,9411 +pip/_vendor/chardet/charsetgroupprober.py,sha256=6bDu8YIiRuScX4ca9Igb0U69TA2PGXXDej6Cc4_9kO4,3787 +pip/_vendor/chardet/charsetprober.py,sha256=KSmwJErjypyj0bRZmC5F5eM7c8YQgLYIjZXintZNstg,5110 +pip/_vendor/chardet/cli/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 +pip/_vendor/chardet/cli/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-37.pyc,, +pip/_vendor/chardet/cli/chardetect.py,sha256=DI8dlV3FBD0c0XA_y3sQ78z754DUv1J8n34RtDjOXNw,2774 +pip/_vendor/chardet/codingstatemachine.py,sha256=VYp_6cyyki5sHgXDSZnXW4q1oelHc3cu9AyQTX7uug8,3590 +pip/_vendor/chardet/compat.py,sha256=PKTzHkSbtbHDqS9PyujMbX74q1a8mMpeQTDVsQhZMRw,1134 +pip/_vendor/chardet/cp949prober.py,sha256=TZ434QX8zzBsnUvL_8wm4AQVTZ2ZkqEEQL_lNw9f9ow,1855 +pip/_vendor/chardet/enums.py,sha256=Aimwdb9as1dJKZaFNUH2OhWIVBVd6ZkJJ_WK5sNY8cU,1661 +pip/_vendor/chardet/escprober.py,sha256=kkyqVg1Yw3DIOAMJ2bdlyQgUFQhuHAW8dUGskToNWSc,3950 +pip/_vendor/chardet/escsm.py,sha256=RuXlgNvTIDarndvllNCk5WZBIpdCxQ0kcd9EAuxUh84,10510 +pip/_vendor/chardet/eucjpprober.py,sha256=iD8Jdp0ISRjgjiVN7f0e8xGeQJ5GM2oeZ1dA8nbSeUw,3749 +pip/_vendor/chardet/euckrfreq.py,sha256=-7GdmvgWez4-eO4SuXpa7tBiDi5vRXQ8WvdFAzVaSfo,13546 +pip/_vendor/chardet/euckrprober.py,sha256=MqFMTQXxW4HbzIpZ9lKDHB3GN8SP4yiHenTmf8g_PxY,1748 +pip/_vendor/chardet/euctwfreq.py,sha256=No1WyduFOgB5VITUA7PLyC5oJRNzRyMbBxaKI1l16MA,31621 +pip/_vendor/chardet/euctwprober.py,sha256=13p6EP4yRaxqnP4iHtxHOJ6R2zxHq1_m8hTRjzVZ95c,1747 +pip/_vendor/chardet/gb2312freq.py,sha256=JX8lsweKLmnCwmk8UHEQsLgkr_rP_kEbvivC4qPOrlc,20715 +pip/_vendor/chardet/gb2312prober.py,sha256=gGvIWi9WhDjE-xQXHvNIyrnLvEbMAYgyUSZ65HUfylw,1754 +pip/_vendor/chardet/hebrewprober.py,sha256=c3SZ-K7hvyzGY6JRAZxJgwJ_sUS9k0WYkvMY00YBYFo,13838 +pip/_vendor/chardet/jisfreq.py,sha256=vpmJv2Bu0J8gnMVRPHMFefTRvo_ha1mryLig8CBwgOg,25777 +pip/_vendor/chardet/jpcntx.py,sha256=PYlNqRUQT8LM3cT5FmHGP0iiscFlTWED92MALvBungo,19643 +pip/_vendor/chardet/langbulgarianmodel.py,sha256=1HqQS9Pbtnj1xQgxitJMvw8X6kKr5OockNCZWfEQrPE,12839 +pip/_vendor/chardet/langcyrillicmodel.py,sha256=LODajvsetH87yYDDQKA2CULXUH87tI223dhfjh9Zx9c,17948 +pip/_vendor/chardet/langgreekmodel.py,sha256=8YAW7bU8YwSJap0kIJSbPMw1BEqzGjWzqcqf0WgUKAA,12688 +pip/_vendor/chardet/langhebrewmodel.py,sha256=JSnqmE5E62tDLTPTvLpQsg5gOMO4PbdWRvV7Avkc0HA,11345 +pip/_vendor/chardet/langhungarianmodel.py,sha256=RhapYSG5l0ZaO-VV4Fan5sW0WRGQqhwBM61yx3yxyOA,12592 +pip/_vendor/chardet/langthaimodel.py,sha256=8l0173Gu_W6G8mxmQOTEF4ls2YdE7FxWf3QkSxEGXJQ,11290 +pip/_vendor/chardet/langturkishmodel.py,sha256=W22eRNJsqI6uWAfwXSKVWWnCerYqrI8dZQTm_M0lRFk,11102 +pip/_vendor/chardet/latin1prober.py,sha256=S2IoORhFk39FEFOlSFWtgVybRiP6h7BlLldHVclNkU8,5370 +pip/_vendor/chardet/mbcharsetprober.py,sha256=AR95eFH9vuqSfvLQZN-L5ijea25NOBCoXqw8s5O9xLQ,3413 +pip/_vendor/chardet/mbcsgroupprober.py,sha256=h6TRnnYq2OxG1WdD5JOyxcdVpn7dG0q-vB8nWr5mbh4,2012 +pip/_vendor/chardet/mbcssm.py,sha256=SY32wVIF3HzcjY3BaEspy9metbNSKxIIB0RKPn7tjpI,25481 +pip/_vendor/chardet/sbcharsetprober.py,sha256=LDSpCldDCFlYwUkGkwD2oFxLlPWIWXT09akH_2PiY74,5657 +pip/_vendor/chardet/sbcsgroupprober.py,sha256=1IprcCB_k1qfmnxGC6MBbxELlKqD3scW6S8YIwdeyXA,3546 +pip/_vendor/chardet/sjisprober.py,sha256=IIt-lZj0WJqK4rmUZzKZP4GJlE8KUEtFYVuY96ek5MQ,3774 +pip/_vendor/chardet/universaldetector.py,sha256=qL0174lSZE442eB21nnktT9_VcAye07laFWUeUrjttY,12485 +pip/_vendor/chardet/utf8prober.py,sha256=IdD8v3zWOsB8OLiyPi-y_fqwipRFxV9Nc1eKBLSuIEw,2766 +pip/_vendor/chardet/version.py,sha256=sp3B08mrDXB-pf3K9fqJ_zeDHOCLC8RrngQyDFap_7g,242 +pip/_vendor/colorama/__init__.py,sha256=lJdY6COz9uM_pXwuk9oLr0fp8H8q2RrUqN16GKabvq4,239 +pip/_vendor/colorama/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/colorama/__pycache__/ansi.cpython-37.pyc,, +pip/_vendor/colorama/__pycache__/ansitowin32.cpython-37.pyc,, +pip/_vendor/colorama/__pycache__/initialise.cpython-37.pyc,, +pip/_vendor/colorama/__pycache__/win32.cpython-37.pyc,, +pip/_vendor/colorama/__pycache__/winterm.cpython-37.pyc,, +pip/_vendor/colorama/ansi.py,sha256=Fi0un-QLqRm-v7o_nKiOqyC8PapBJK7DLV_q9LKtTO0,2524 +pip/_vendor/colorama/ansitowin32.py,sha256=u8QaqdqS_xYSfNkPM1eRJLHz6JMWPodaJaP0mxgHCDc,10462 +pip/_vendor/colorama/initialise.py,sha256=PprovDNxMTrvoNHFcL2NZjpH2XzDc8BLxLxiErfUl4k,1915 +pip/_vendor/colorama/win32.py,sha256=bJ8Il9jwaBN5BJ8bmN6FoYZ1QYuMKv2j8fGrXh7TJjw,5404 +pip/_vendor/colorama/winterm.py,sha256=2y_2b7Zsv34feAsP67mLOVc-Bgq51mdYGo571VprlrM,6438 +pip/_vendor/contextlib2.py,sha256=5HjGflUzwWAUfcILhSmC2GqvoYdZZzFzVfIDztHigUs,16915 +pip/_vendor/distlib/__init__.py,sha256=SkHYPuEQNQF2a2Cr18rfZ-LQyDqwwizn8tJE4seXPgU,587 +pip/_vendor/distlib/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/distlib/__pycache__/compat.cpython-37.pyc,, +pip/_vendor/distlib/__pycache__/database.cpython-37.pyc,, +pip/_vendor/distlib/__pycache__/index.cpython-37.pyc,, +pip/_vendor/distlib/__pycache__/locators.cpython-37.pyc,, +pip/_vendor/distlib/__pycache__/manifest.cpython-37.pyc,, +pip/_vendor/distlib/__pycache__/markers.cpython-37.pyc,, +pip/_vendor/distlib/__pycache__/metadata.cpython-37.pyc,, +pip/_vendor/distlib/__pycache__/resources.cpython-37.pyc,, +pip/_vendor/distlib/__pycache__/scripts.cpython-37.pyc,, +pip/_vendor/distlib/__pycache__/util.cpython-37.pyc,, +pip/_vendor/distlib/__pycache__/version.cpython-37.pyc,, +pip/_vendor/distlib/__pycache__/wheel.cpython-37.pyc,, +pip/_vendor/distlib/_backport/__init__.py,sha256=bqS_dTOH6uW9iGgd0uzfpPjo6vZ4xpPZ7kyfZJ2vNaw,274 +pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/distlib/_backport/__pycache__/misc.cpython-37.pyc,, +pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-37.pyc,, +pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-37.pyc,, +pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-37.pyc,, +pip/_vendor/distlib/_backport/misc.py,sha256=KWecINdbFNOxSOP1fGF680CJnaC6S4fBRgEtaYTw0ig,971 +pip/_vendor/distlib/_backport/shutil.py,sha256=VW1t3uYqUjWZH7jV-6QiimLhnldoV5uIpH4EuiT1jfw,25647 +pip/_vendor/distlib/_backport/sysconfig.cfg,sha256=swZKxq9RY5e9r3PXCrlvQPMsvOdiWZBTHLEbqS8LJLU,2617 +pip/_vendor/distlib/_backport/sysconfig.py,sha256=JdJ9ztRy4Hc-b5-VS74x3nUtdEIVr_OBvMsIb8O2sjc,26964 +pip/_vendor/distlib/_backport/tarfile.py,sha256=Ihp7rXRcjbIKw8COm9wSePV9ARGXbSF9gGXAMn2Q-KU,92628 +pip/_vendor/distlib/compat.py,sha256=xdNZmqFN5HwF30HjRn5M415pcC2kgXRBXn767xS8v-M,41404 +pip/_vendor/distlib/database.py,sha256=-KJH63AJ7hqjLtGCwOTrionhKr2Vsytdwkjyo8UdEco,51029 +pip/_vendor/distlib/index.py,sha256=SXKzpQCERctxYDMp_OLee2f0J0e19ZhGdCIoMlUfUQM,21066 +pip/_vendor/distlib/locators.py,sha256=bqzEWP3Ad8UE3D1rmzW1pgzVTKkY4rDUA_EWIVYli54,51807 +pip/_vendor/distlib/manifest.py,sha256=nQEhYmgoreaBZzyFzwYsXxJARu3fo4EkunU163U16iE,14811 +pip/_vendor/distlib/markers.py,sha256=6Ac3cCfFBERexiESWIOXmg-apIP8l2esafNSX3KMy-8,4387 +pip/_vendor/distlib/metadata.py,sha256=OhbCKmf5lswE8unWBopI1hj7tRpHp4ZbFvU4d6aAEMM,40234 +pip/_vendor/distlib/resources.py,sha256=2FGv0ZHF14KXjLIlL0R991lyQQGcewOS4mJ-5n-JVnc,10766 +pip/_vendor/distlib/scripts.py,sha256=W24OXnZUmgRX_XtDrVZdfc-Frf4X4_cybvhP87iR-QU,16290 +pip/_vendor/distlib/t32.exe,sha256=y8Yu3yao6zZrELYGIisxkhnQLOAOvpiXft8_Y9I8vyU,92672 +pip/_vendor/distlib/t64.exe,sha256=qt1MpKO2NLqU8t1lD1T0frfFm5zwHm3mz7pLvmJ2kMI,102912 +pip/_vendor/distlib/util.py,sha256=TvdqcwncBHaQbNw0jkXRvSZvt1fbdgE8HQW5wJwzvv4,59790 +pip/_vendor/distlib/version.py,sha256=_n7F6juvQGAcn769E_SHa7fOcf5ERlEVymJ_EjPRwGw,23391 +pip/_vendor/distlib/w32.exe,sha256=f98Etq_1giFgIQxrEh-sOAeO8qVtWqpDbGxdUucJ6pw,89088 +pip/_vendor/distlib/w64.exe,sha256=6Hs-Wn0vXBHA6Qd76IlalqYXqrN80DCPpdoeIQzPRms,99840 +pip/_vendor/distlib/wheel.py,sha256=2lviV6L4IvTP5DRkKE0HGpClvdoTJQHZJLfTQ6dfn2A,40437 +pip/_vendor/distro.py,sha256=X2So5kjrRKyMbQJ90Xgy93HU5eFtujCzKaYNeoy1k1c,43251 +pip/_vendor/html5lib/__init__.py,sha256=Ztrn7UvF-wIFAgRBBa0ML-Gu5AffH3BPX_INJx4SaBI,1162 +pip/_vendor/html5lib/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-37.pyc,, +pip/_vendor/html5lib/__pycache__/_inputstream.cpython-37.pyc,, +pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-37.pyc,, +pip/_vendor/html5lib/__pycache__/_utils.cpython-37.pyc,, +pip/_vendor/html5lib/__pycache__/constants.cpython-37.pyc,, +pip/_vendor/html5lib/__pycache__/html5parser.cpython-37.pyc,, +pip/_vendor/html5lib/__pycache__/serializer.cpython-37.pyc,, +pip/_vendor/html5lib/_ihatexml.py,sha256=3LBtJMlzgwM8vpQiU1TvGmEEmNH72sV0yD8yS53y07A,16705 +pip/_vendor/html5lib/_inputstream.py,sha256=bPUWcAfJScK4xkjQQaG_HsI2BvEVbFvI0AsodDYPQj0,32552 +pip/_vendor/html5lib/_tokenizer.py,sha256=YAaOEBD6qc5ISq9Xt9Nif1OFgcybTTfMdwqBkZhpAq4,76580 +pip/_vendor/html5lib/_trie/__init__.py,sha256=8VR1bcgD2OpeS2XExpu5yBhP_Q1K-lwKbBKICBPf1kU,289 +pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-37.pyc,, +pip/_vendor/html5lib/_trie/__pycache__/datrie.cpython-37.pyc,, +pip/_vendor/html5lib/_trie/__pycache__/py.cpython-37.pyc,, +pip/_vendor/html5lib/_trie/_base.py,sha256=CaybYyMro8uERQYjby2tTeSUatnWDfWroUN9N7ety5w,1013 +pip/_vendor/html5lib/_trie/datrie.py,sha256=EQpqSfkZRuTbE-DuhW7xMdVDxdZNZ0CfmnYfHA_3zxM,1178 +pip/_vendor/html5lib/_trie/py.py,sha256=wXmQLrZRf4MyWNyg0m3h81m9InhLR7GJ002mIIZh-8o,1775 +pip/_vendor/html5lib/_utils.py,sha256=ismpASeqa2jqEPQjHUj8vReAf7yIoKnvLN5fuOw6nv0,4015 +pip/_vendor/html5lib/constants.py,sha256=4lmZWLtEPRLnl8NzftOoYTJdo6jpeMtP6dqQC0g_bWQ,83518 +pip/_vendor/html5lib/filters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-37.pyc,, +pip/_vendor/html5lib/filters/__pycache__/base.cpython-37.pyc,, +pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-37.pyc,, +pip/_vendor/html5lib/filters/__pycache__/lint.cpython-37.pyc,, +pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-37.pyc,, +pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-37.pyc,, +pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-37.pyc,, +pip/_vendor/html5lib/filters/alphabeticalattributes.py,sha256=lViZc2JMCclXi_5gduvmdzrRxtO5Xo9ONnbHBVCsykU,919 +pip/_vendor/html5lib/filters/base.py,sha256=z-IU9ZAYjpsVsqmVt7kuWC63jR11hDMr6CVrvuao8W0,286 +pip/_vendor/html5lib/filters/inject_meta_charset.py,sha256=egDXUEHXmAG9504xz0K6ALDgYkvUrC2q15YUVeNlVQg,2945 +pip/_vendor/html5lib/filters/lint.py,sha256=jk6q56xY0ojiYfvpdP-OZSm9eTqcAdRqhCoPItemPYA,3643 +pip/_vendor/html5lib/filters/optionaltags.py,sha256=8lWT75J0aBOHmPgfmqTHSfPpPMp01T84NKu0CRedxcE,10588 +pip/_vendor/html5lib/filters/sanitizer.py,sha256=4ON02KNjuqda1lCw5_JCUZxb0BzWR5M7ON84dtJ7dm0,26248 +pip/_vendor/html5lib/filters/whitespace.py,sha256=8eWqZxd4UC4zlFGW6iyY6f-2uuT8pOCSALc3IZt7_t4,1214 +pip/_vendor/html5lib/html5parser.py,sha256=g5g2ezkusHxhi7b23vK_-d6K6BfIJRbqIQmvQ9z4EgI,118963 +pip/_vendor/html5lib/serializer.py,sha256=yfcfBHse2wDs6ojxn-kieJjLT5s1ipilQJ0gL3-rJis,15758 +pip/_vendor/html5lib/treeadapters/__init__.py,sha256=A0rY5gXIe4bJOiSGRO_j_tFhngRBO8QZPzPtPw5dFzo,679 +pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-37.pyc,, +pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-37.pyc,, +pip/_vendor/html5lib/treeadapters/genshi.py,sha256=CH27pAsDKmu4ZGkAUrwty7u0KauGLCZRLPMzaO3M5vo,1715 +pip/_vendor/html5lib/treeadapters/sax.py,sha256=BKS8woQTnKiqeffHsxChUqL4q2ZR_wb5fc9MJ3zQC8s,1776 +pip/_vendor/html5lib/treebuilders/__init__.py,sha256=AysSJyvPfikCMMsTVvaxwkgDieELD5dfR8FJIAuq7hY,3592 +pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/base.cpython-37.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-37.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-37.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-37.pyc,, +pip/_vendor/html5lib/treebuilders/base.py,sha256=wQGp5yy22TNG8tJ6aREe4UUeTR7A99dEz0BXVaedWb4,14579 +pip/_vendor/html5lib/treebuilders/dom.py,sha256=22whb0C71zXIsai5mamg6qzBEiigcBIvaDy4Asw3at0,8925 +pip/_vendor/html5lib/treebuilders/etree.py,sha256=aqIBOGj_dFYqBURIcTegGNBhAIJOw5iFDHb4jrkYH-8,12764 +pip/_vendor/html5lib/treebuilders/etree_lxml.py,sha256=9V0dXxbJYYq-Skgb5-_OL2NkVYpjioEb4CHajo0e9yI,14122 +pip/_vendor/html5lib/treewalkers/__init__.py,sha256=yhXxHpjlSqfQyUag3v8-vWjMPriFBU8YRAPNpDgBTn8,5714 +pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/base.cpython-37.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-37.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-37.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-37.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-37.pyc,, +pip/_vendor/html5lib/treewalkers/base.py,sha256=ouiOsuSzvI0KgzdWP8PlxIaSNs9falhbiinAEc_UIJY,7476 +pip/_vendor/html5lib/treewalkers/dom.py,sha256=EHyFR8D8lYNnyDU9lx_IKigVJRyecUGua0mOi7HBukc,1413 +pip/_vendor/html5lib/treewalkers/etree.py,sha256=sz1o6mmE93NQ53qJFDO7HKyDtuwgK-Ay3qSFZPC6u00,4550 +pip/_vendor/html5lib/treewalkers/etree_lxml.py,sha256=sY6wfRshWTllu6n48TPWpKsQRPp-0CQrT0hj_AdzHSU,6309 +pip/_vendor/html5lib/treewalkers/genshi.py,sha256=4D2PECZ5n3ZN3qu3jMl9yY7B81jnQApBQSVlfaIuYbA,2309 +pip/_vendor/idna/__init__.py,sha256=9Nt7xpyet3DmOrPUGooDdAwmHZZu1qUAy2EaJ93kGiQ,58 +pip/_vendor/idna/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/idna/__pycache__/codec.cpython-37.pyc,, +pip/_vendor/idna/__pycache__/compat.cpython-37.pyc,, +pip/_vendor/idna/__pycache__/core.cpython-37.pyc,, +pip/_vendor/idna/__pycache__/idnadata.cpython-37.pyc,, +pip/_vendor/idna/__pycache__/intranges.cpython-37.pyc,, +pip/_vendor/idna/__pycache__/package_data.cpython-37.pyc,, +pip/_vendor/idna/__pycache__/uts46data.cpython-37.pyc,, +pip/_vendor/idna/codec.py,sha256=lvYb7yu7PhAqFaAIAdWcwgaWI2UmgseUua-1c0AsG0A,3299 +pip/_vendor/idna/compat.py,sha256=R-h29D-6mrnJzbXxymrWUW7iZUvy-26TQwZ0ij57i4U,232 +pip/_vendor/idna/core.py,sha256=JDCZZ_PLESqIgEbU8mPyoEufWwoOiIqygA17-QZIe3s,11733 +pip/_vendor/idna/idnadata.py,sha256=HXaPFw6_YAJ0qppACPu0YLAULtRs3QovRM_CCZHGdY0,40899 +pip/_vendor/idna/intranges.py,sha256=TY1lpxZIQWEP6tNqjZkFA5hgoMWOj1OBmnUG8ihT87E,1749 +pip/_vendor/idna/package_data.py,sha256=kIzeKKXEouXLR4srqwf9Q3zv-NffKSOz5aSDOJARPB0,21 +pip/_vendor/idna/uts46data.py,sha256=oLyNZ1pBaiBlj9zFzLFRd_P7J8MkRcgDisjExZR_4MY,198292 +pip/_vendor/ipaddress.py,sha256=2OgbkeAD2rLkcXqbcvof3J5R7lRwjNLoBySyTkBtKnc,79852 +pip/_vendor/msgpack/__init__.py,sha256=LnKzG5v0RyZgs7KlY2-SZYDBn-toylovXxKiXR6C-IQ,1535 +pip/_vendor/msgpack/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/msgpack/__pycache__/_version.cpython-37.pyc,, +pip/_vendor/msgpack/__pycache__/exceptions.cpython-37.pyc,, +pip/_vendor/msgpack/__pycache__/fallback.cpython-37.pyc,, +pip/_vendor/msgpack/_version.py,sha256=72BxB5FMl1q3Nz1hteHINzHhrFpXQ9nNtULaK52NLk8,20 +pip/_vendor/msgpack/exceptions.py,sha256=dCTWei8dpkrMsQDcjQk74ATl9HsIBH0ybt8zOPNqMYc,1081 +pip/_vendor/msgpack/fallback.py,sha256=vXo6S67Dmil9mz0PRBCLDu6znpv6CGKt9WPCEsdZx2A,37454 +pip/_vendor/packaging/__about__.py,sha256=CpuMSyh1V7adw8QMjWKkY3LtdqRUkRX4MgJ6nF4stM0,744 +pip/_vendor/packaging/__init__.py,sha256=6enbp5XgRfjBjsI9-bn00HjHf5TH21PDMOKkJW8xw-w,562 +pip/_vendor/packaging/__pycache__/__about__.cpython-37.pyc,, +pip/_vendor/packaging/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/packaging/__pycache__/_compat.cpython-37.pyc,, +pip/_vendor/packaging/__pycache__/_structures.cpython-37.pyc,, +pip/_vendor/packaging/__pycache__/markers.cpython-37.pyc,, +pip/_vendor/packaging/__pycache__/requirements.cpython-37.pyc,, +pip/_vendor/packaging/__pycache__/specifiers.cpython-37.pyc,, +pip/_vendor/packaging/__pycache__/tags.cpython-37.pyc,, +pip/_vendor/packaging/__pycache__/utils.cpython-37.pyc,, +pip/_vendor/packaging/__pycache__/version.cpython-37.pyc,, +pip/_vendor/packaging/_compat.py,sha256=Ugdm-qcneSchW25JrtMIKgUxfEEBcCAz6WrEeXeqz9o,865 +pip/_vendor/packaging/_structures.py,sha256=pVd90XcXRGwpZRB_qdFuVEibhCHpX_bL5zYr9-N0mc8,1416 +pip/_vendor/packaging/markers.py,sha256=jRoHXMzT_7InY31pBB9Nkx66COZpQBAwa5scHla9uVQ,8250 +pip/_vendor/packaging/requirements.py,sha256=grcnFU8x7KD230JaFLXtWl3VClLuOmsOy4c-m55tOWs,4700 +pip/_vendor/packaging/specifiers.py,sha256=0ZzQpcUnvrQ6LjR-mQRLzMr8G6hdRv-mY0VSf_amFtI,27778 +pip/_vendor/packaging/tags.py,sha256=EPLXhO6GTD7_oiWEO1U0l0PkfR8R_xivpMDHXnsTlts,12933 +pip/_vendor/packaging/utils.py,sha256=VaTC0Ei7zO2xl9ARiWmz2YFLFt89PuuhLbAlXMyAGms,1520 +pip/_vendor/packaging/version.py,sha256=Npdwnb8OHedj_2L86yiUqscujb7w_i5gmSK1PhOAFzg,11978 +pip/_vendor/pep517/__init__.py,sha256=nCw8ZdLH4c19g8xP_Ndag1KPdQhlSDKaL9pg-X7uNWU,84 +pip/_vendor/pep517/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/pep517/__pycache__/_in_process.cpython-37.pyc,, +pip/_vendor/pep517/__pycache__/build.cpython-37.pyc,, +pip/_vendor/pep517/__pycache__/check.cpython-37.pyc,, +pip/_vendor/pep517/__pycache__/colorlog.cpython-37.pyc,, +pip/_vendor/pep517/__pycache__/compat.cpython-37.pyc,, +pip/_vendor/pep517/__pycache__/dirtools.cpython-37.pyc,, +pip/_vendor/pep517/__pycache__/envbuild.cpython-37.pyc,, +pip/_vendor/pep517/__pycache__/meta.cpython-37.pyc,, +pip/_vendor/pep517/__pycache__/wrappers.cpython-37.pyc,, +pip/_vendor/pep517/_in_process.py,sha256=v1Viek27-MGCOFu8eSlLd2jGCrIqc1fISnutGFoRDps,7792 +pip/_vendor/pep517/build.py,sha256=WqM0-X4KyzY566qxGf3FeaYc1hw95H7YP0ElZ1zuTb0,3318 +pip/_vendor/pep517/check.py,sha256=ST02kRWBrRMOxgnRm9clw18Q2X7sJGaD4j3h6GmBhJ8,5949 +pip/_vendor/pep517/colorlog.py,sha256=Tk9AuYm_cLF3BKTBoSTJt9bRryn0aFojIQOwbfVUTxQ,4098 +pip/_vendor/pep517/compat.py,sha256=M-5s4VNp8rjyT76ZZ_ibnPD44DYVzSQlyCEHayjtDPw,780 +pip/_vendor/pep517/dirtools.py,sha256=2mkAkAL0mRz_elYFjRKuekTJVipH1zTn4tbf1EDev84,1129 +pip/_vendor/pep517/envbuild.py,sha256=K4dIGAbkXf3RoQX_9RFpZvMvPrVSHtcbH7o9VSrNnlM,6024 +pip/_vendor/pep517/meta.py,sha256=8mnM5lDnT4zXQpBTliJbRGfesH7iioHwozbDxALPS9Y,2463 +pip/_vendor/pep517/wrappers.py,sha256=QiQaEQlfCrhRpPBFQiGVM9QjrKSlj8AvM39haoyfPRk,10599 +pip/_vendor/pkg_resources/__init__.py,sha256=hnT0Ph4iK40Ycr-OzSii_wZW5f7HCkP79E6Vf4cR3Vg,108237 +pip/_vendor/pkg_resources/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-37.pyc,, +pip/_vendor/pkg_resources/py31compat.py,sha256=CRk8fkiPRDLsbi5pZcKsHI__Pbmh_94L8mr9Qy9Ab2U,562 +pip/_vendor/progress/__init__.py,sha256=fcbQQXo5np2CoQyhSH5XprkicwLZNLePR3uIahznSO0,4857 +pip/_vendor/progress/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/progress/__pycache__/bar.cpython-37.pyc,, +pip/_vendor/progress/__pycache__/counter.cpython-37.pyc,, +pip/_vendor/progress/__pycache__/spinner.cpython-37.pyc,, +pip/_vendor/progress/bar.py,sha256=QuDuVNcmXgpxtNtxO0Fq72xKigxABaVmxYGBw4J3Z_E,2854 +pip/_vendor/progress/counter.py,sha256=MznyBrvPWrOlGe4MZAlGUb9q3aODe6_aNYeAE_VNoYA,1372 +pip/_vendor/progress/spinner.py,sha256=k8JbDW94T0-WXuXfxZIFhdoNPYp3jfnpXqBnfRv5fGs,1380 +pip/_vendor/pyparsing.py,sha256=uJuFv_UoLmKOHlCU-EhIiKjYqYS2OCj-Gmr-sRkCzmU,263468 +pip/_vendor/pytoml/__init__.py,sha256=W_SKx36Hsew-Fty36BOpreLm4uF4V_Tgkm_z9rIoOE8,127 +pip/_vendor/pytoml/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/pytoml/__pycache__/core.cpython-37.pyc,, +pip/_vendor/pytoml/__pycache__/parser.cpython-37.pyc,, +pip/_vendor/pytoml/__pycache__/test.cpython-37.pyc,, +pip/_vendor/pytoml/__pycache__/utils.cpython-37.pyc,, +pip/_vendor/pytoml/__pycache__/writer.cpython-37.pyc,, +pip/_vendor/pytoml/core.py,sha256=9CrLLTs1PdWjEwRnYzt_i4dhHcZvGxs_GsMlYAX3iY4,509 +pip/_vendor/pytoml/parser.py,sha256=qsc0NRnTgdFZgRp9gmr6D_KWFelrwxLkTj9dVxUcqS8,10309 +pip/_vendor/pytoml/test.py,sha256=2nQs4aX3XQEaaQCx6x_OJTS2Hb0_IiTZRqNOeDmLCzo,1021 +pip/_vendor/pytoml/utils.py,sha256=JCLHx77Hu1R3F-bRgiROIiKyCzLwyebnp5P35cRJxWs,1665 +pip/_vendor/pytoml/writer.py,sha256=4QQky9JSuRv60uzuhVZASU8T3CuobSkLG1285X6bDW8,3369 +pip/_vendor/requests/__init__.py,sha256=ONVsH6kJuPTV9nf-XVoubWsVX3qVtjCyju42kTW6Uug,4074 +pip/_vendor/requests/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/__version__.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/_internal_utils.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/adapters.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/api.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/auth.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/certs.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/compat.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/cookies.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/exceptions.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/help.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/hooks.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/models.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/packages.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/sessions.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/status_codes.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/structures.cpython-37.pyc,, +pip/_vendor/requests/__pycache__/utils.cpython-37.pyc,, +pip/_vendor/requests/__version__.py,sha256=Bm-GFstQaFezsFlnmEMrJDe8JNROz9n2XXYtODdvjjc,436 +pip/_vendor/requests/_internal_utils.py,sha256=Zx3PnEUccyfsB-ie11nZVAW8qClJy0gx1qNME7rgT18,1096 +pip/_vendor/requests/adapters.py,sha256=e-bmKEApNVqFdylxuMJJfiaHdlmS_zhWhIMEzlHvGuc,21548 +pip/_vendor/requests/api.py,sha256=fbUo11QoLOoNgWU6FfvNz8vMj9bE_cMmICXBa7TZHJs,6271 +pip/_vendor/requests/auth.py,sha256=QB2-cSUj1jrvWZfPXttsZpyAacQgtKLVk14vQW9TpSE,10206 +pip/_vendor/requests/certs.py,sha256=nXRVq9DtGmv_1AYbwjTu9UrgAcdJv05ZvkNeaoLOZxY,465 +pip/_vendor/requests/compat.py,sha256=FZX4Q_EMKiMnhZpZ3g_gOsT-j2ca9ij2gehDx1cwYeo,1941 +pip/_vendor/requests/cookies.py,sha256=Y-bKX6TvW3FnYlE6Au0SXtVVWcaNdFvuAwQxw-G0iTI,18430 +pip/_vendor/requests/exceptions.py,sha256=-mLam3TAx80V09EaH3H-ZxR61eAVuLRZ8zgBBSLjK44,3197 +pip/_vendor/requests/help.py,sha256=SJPVcoXeo7KfK4AxJN5eFVQCjr0im87tU2n7ubLsksU,3578 +pip/_vendor/requests/hooks.py,sha256=QReGyy0bRcr5rkwCuObNakbYsc7EkiKeBwG4qHekr2Q,757 +pip/_vendor/requests/models.py,sha256=6s-37iAqXVptq8z7U_LoH_pbIPrCQUm_Z8QuIGE29Q0,34275 +pip/_vendor/requests/packages.py,sha256=njJmVifY4aSctuW3PP5EFRCxjEwMRDO6J_feG2dKWsI,695 +pip/_vendor/requests/sessions.py,sha256=DjbCotDW6xSAaBsjbW-L8l4N0UcwmrxVNgSrZgIjGWM,29332 +pip/_vendor/requests/status_codes.py,sha256=XWlcpBjbCtq9sSqpH9_KKxgnLTf9Z__wCWolq21ySlg,4129 +pip/_vendor/requests/structures.py,sha256=zoP8qly2Jak5e89HwpqjN1z2diztI-_gaqts1raJJBc,2981 +pip/_vendor/requests/utils.py,sha256=LtPJ1db6mJff2TJSJWKi7rBpzjPS3mSOrjC9zRhoD3A,30049 +pip/_vendor/retrying.py,sha256=k3fflf5_Mm0XcIJYhB7Tj34bqCCPhUDkYbx1NvW2FPE,9972 +pip/_vendor/six.py,sha256=h9jch2pS86y4R36pKRS3LOYUCVFNIJMRwjZ4fJDtJ44,32452 +pip/_vendor/urllib3/__init__.py,sha256=cedaGRiXnA8WzcI3WPbb9u2Al9l2ortwfXZSQ4yFHHU,2683 +pip/_vendor/urllib3/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/urllib3/__pycache__/_collections.cpython-37.pyc,, +pip/_vendor/urllib3/__pycache__/connection.cpython-37.pyc,, +pip/_vendor/urllib3/__pycache__/connectionpool.cpython-37.pyc,, +pip/_vendor/urllib3/__pycache__/exceptions.cpython-37.pyc,, +pip/_vendor/urllib3/__pycache__/fields.cpython-37.pyc,, +pip/_vendor/urllib3/__pycache__/filepost.cpython-37.pyc,, +pip/_vendor/urllib3/__pycache__/poolmanager.cpython-37.pyc,, +pip/_vendor/urllib3/__pycache__/request.cpython-37.pyc,, +pip/_vendor/urllib3/__pycache__/response.cpython-37.pyc,, +pip/_vendor/urllib3/_collections.py,sha256=GouVsNzwg6jADZTmimMI6oqmwKSswnMo9dh5tGNVWO4,10792 +pip/_vendor/urllib3/connection.py,sha256=p7uUWh3cP0hgja8fFlzfZvwVxviJa8-C5cx9G3wQ5-o,15170 +pip/_vendor/urllib3/connectionpool.py,sha256=NYYFYX-L9XO4tQMU7ug5ABidsmGKVSE2_X4XMggzwxk,36446 +pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-37.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-37.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-37.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-37.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-37.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-37.pyc,, +pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=tJvMXygi5UnFn4tmCHtrXOQIqy1FAfZoDDK36Q35F1I,707 +pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-37.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-37.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=ZuSEVZwiubk0oaVmkZa8bUoK9ACVJJhPVgRzPZN6KoQ,16805 +pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=V7GnujxnWZh2N2sMsV5N4d9Imymokkm3zBwgt77_bSE,11956 +pip/_vendor/urllib3/contrib/appengine.py,sha256=CosoKgcu5PE5COkPSGa7Q5AFzh9XWAf0PTBU7LSBE7A,11314 +pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=YnWc2-np7Rzi2LfCxJ2fEprhGkeZDSjQFdJuTQ5vuUE,4201 +pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=w35mWy_1POZUsbOhurVb_zhf0C1Jkd79AFlucLs6KuQ,16440 +pip/_vendor/urllib3/contrib/securetransport.py,sha256=_vByA8KzFPxn9x67hilAPu9wpoKDS9fU3K1DVavEk74,32742 +pip/_vendor/urllib3/contrib/socks.py,sha256=nzDMgDIFJWVubKHqvIn2-SKCO91hhJInP92WgHChGzA,7036 +pip/_vendor/urllib3/exceptions.py,sha256=_tiSmwYQ8em6OSr5GPO5hpbCG8q0DTIuJ2F7NMEyDyc,6610 +pip/_vendor/urllib3/fields.py,sha256=kroD76QK-GdHHW7f_AUN4XxDC3OQPI2FFrS9eSL4BCs,8553 +pip/_vendor/urllib3/filepost.py,sha256=vj0qbrpT1AFzvvW4SuC8M5kJiw7wftHcSr-7b8UpPpw,2440 +pip/_vendor/urllib3/packages/__init__.py,sha256=h4BLhD4tLaBx1adaDtKXfupsgqY0wWLXb_f1_yVlV6A,108 +pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/urllib3/packages/__pycache__/six.cpython-37.pyc,, +pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-37.pyc,, +pip/_vendor/urllib3/packages/backports/makefile.py,sha256=005wrvH-_pWSnTFqQ2sdzzh4zVCtQUUQ4mR2Yyxwc0A,1418 +pip/_vendor/urllib3/packages/six.py,sha256=adx4z-eM_D0Vvu0IIqVzFACQ_ux9l64y7DkSEfbxCDs,32536 +pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py,sha256=ywgKMtfHi1-DrXlzPfVAhzsLzzqcK7GT6eLgdode1Fg,688 +pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-37.pyc,, +pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py,sha256=EFrDbzAs-pV-Fm1HeuAqLl2mJ6MS23LwxYiukKrtf9U,5724 +pip/_vendor/urllib3/poolmanager.py,sha256=JYUyBUN3IiEknUdjZ7VJrpCQr6SP7vi0WwSndrn8XpE,17053 +pip/_vendor/urllib3/request.py,sha256=hhoHvEEatyd9Tn5EbGjQ0emn-ENMCyY591yNWTneINA,6018 +pip/_vendor/urllib3/response.py,sha256=O2DVzBeWOzyxZDZ8k0EDFU3GW1jWXk_b03mS0O1ybxs,27836 +pip/_vendor/urllib3/util/__init__.py,sha256=bWNaav_OT-1L7-sxm59cGb59rDORlbhb_4noduM5m0U,1038 +pip/_vendor/urllib3/util/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/urllib3/util/__pycache__/connection.cpython-37.pyc,, +pip/_vendor/urllib3/util/__pycache__/queue.cpython-37.pyc,, +pip/_vendor/urllib3/util/__pycache__/request.cpython-37.pyc,, +pip/_vendor/urllib3/util/__pycache__/response.cpython-37.pyc,, +pip/_vendor/urllib3/util/__pycache__/retry.cpython-37.pyc,, +pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-37.pyc,, +pip/_vendor/urllib3/util/__pycache__/timeout.cpython-37.pyc,, +pip/_vendor/urllib3/util/__pycache__/url.cpython-37.pyc,, +pip/_vendor/urllib3/util/__pycache__/wait.cpython-37.pyc,, +pip/_vendor/urllib3/util/connection.py,sha256=fOXAQ288KHaXmdTlDv5drwScDk9taQ9YzT42xegxzTg,4636 +pip/_vendor/urllib3/util/queue.py,sha256=myTX3JDHntglKQNBf3b6dasHH-uF-W59vzGSQiFdAfI,497 +pip/_vendor/urllib3/util/request.py,sha256=_LJPqQXTYA_9c0syijP8Bmj72BeKNO9PXBk62oM7HQY,3821 +pip/_vendor/urllib3/util/response.py,sha256=_WbTQr8xRQuJuY2rTIZxVdJD6mnEOtQupjaK_bF_Vj8,2573 +pip/_vendor/urllib3/util/retry.py,sha256=Ui74h44gLIIWkAxT9SK3A2mEvu55-odWgJMw3LiUNGk,15450 +pip/_vendor/urllib3/util/ssl_.py,sha256=7mB3AsidIqLLq6gbeBL-7Ta0MyVOL5uZax8_5bH3y7c,14163 +pip/_vendor/urllib3/util/timeout.py,sha256=2g39u7rU68ilOcGhP1sVzySm4yWDbiY1LxCjsrCrMk8,9874 +pip/_vendor/urllib3/util/url.py,sha256=0peUq73QOfzYLL89pb-93SEMFRtjvQCISXx61c7qlF8,14247 +pip/_vendor/urllib3/util/wait.py,sha256=k46KzqIYu3Vnzla5YW3EvtInNlU_QycFqQAghIOxoAg,5406 +pip/_vendor/webencodings/__init__.py,sha256=qOBJIuPy_4ByYH6W_bNgJF-qYQ2DoU-dKsDu5yRWCXg,10579 +pip/_vendor/webencodings/__pycache__/__init__.cpython-37.pyc,, +pip/_vendor/webencodings/__pycache__/labels.cpython-37.pyc,, +pip/_vendor/webencodings/__pycache__/mklabels.cpython-37.pyc,, +pip/_vendor/webencodings/__pycache__/tests.cpython-37.pyc,, +pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-37.pyc,, +pip/_vendor/webencodings/labels.py,sha256=4AO_KxTddqGtrL9ns7kAPjb0CcN6xsCIxbK37HY9r3E,8979 +pip/_vendor/webencodings/mklabels.py,sha256=GYIeywnpaLnP0GSic8LFWgd0UVvO_l1Nc6YoF-87R_4,1305 +pip/_vendor/webencodings/tests.py,sha256=OtGLyjhNY1fvkW1GvLJ_FV9ZoqC9Anyjr7q3kxTbzNs,6563 +pip/_vendor/webencodings/x_user_defined.py,sha256=yOqWSdmpytGfUgh_Z6JYgDNhoc-BAHyyeeT15Fr42tM,4307 diff --git a/my_env/Lib/site-packages/pip-19.3.1.dist-info/WHEEL b/my_env/Lib/site-packages/pip-19.3.1.dist-info/WHEEL new file mode 100644 index 000000000..8b701e93c --- /dev/null +++ b/my_env/Lib/site-packages/pip-19.3.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.6) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/my_env/Lib/site-packages/pip-19.3.1.dist-info/entry_points.txt b/my_env/Lib/site-packages/pip-19.3.1.dist-info/entry_points.txt new file mode 100644 index 000000000..4e3b05f41 --- /dev/null +++ b/my_env/Lib/site-packages/pip-19.3.1.dist-info/entry_points.txt @@ -0,0 +1,5 @@ +[console_scripts] +pip = pip._internal.main:main +pip3 = pip._internal.main:main +pip3.7 = pip._internal.main:main + diff --git a/my_env/Lib/site-packages/pip-19.3.1.dist-info/top_level.txt b/my_env/Lib/site-packages/pip-19.3.1.dist-info/top_level.txt new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/my_env/Lib/site-packages/pip-19.3.1.dist-info/top_level.txt @@ -0,0 +1 @@ +pip diff --git a/my_env/Lib/site-packages/pip/__init__.py b/my_env/Lib/site-packages/pip/__init__.py new file mode 100644 index 000000000..a487794a9 --- /dev/null +++ b/my_env/Lib/site-packages/pip/__init__.py @@ -0,0 +1 @@ +__version__ = "19.3.1" diff --git a/my_env/Lib/site-packages/pip/__main__.py b/my_env/Lib/site-packages/pip/__main__.py new file mode 100644 index 000000000..49b6fdf71 --- /dev/null +++ b/my_env/Lib/site-packages/pip/__main__.py @@ -0,0 +1,19 @@ +from __future__ import absolute_import + +import os +import sys + +# If we are running from a wheel, add the wheel to sys.path +# This allows the usage python pip-*.whl/pip install pip-*.whl +if __package__ == '': + # __file__ is pip-*.whl/pip/__main__.py + # first dirname call strips of '/__main__.py', second strips off '/pip' + # Resulting path is the name of the wheel itself + # Add that to sys.path so we can import pip + path = os.path.dirname(os.path.dirname(__file__)) + sys.path.insert(0, path) + +from pip._internal.main import main as _main # isort:skip # noqa + +if __name__ == '__main__': + sys.exit(_main()) diff --git a/my_env/Lib/site-packages/pip/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..ff6aa06ab Binary files /dev/null and b/my_env/Lib/site-packages/pip/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/__pycache__/__main__.cpython-37.pyc b/my_env/Lib/site-packages/pip/__pycache__/__main__.cpython-37.pyc new file mode 100644 index 000000000..fb68717e1 Binary files /dev/null and b/my_env/Lib/site-packages/pip/__pycache__/__main__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__init__.py b/my_env/Lib/site-packages/pip/_internal/__init__.py new file mode 100644 index 000000000..8c0e4c585 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/__init__.py @@ -0,0 +1,2 @@ +#!/usr/bin/env python +import pip._internal.utils.inject_securetransport # noqa diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..41df9db60 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-37.pyc new file mode 100644 index 000000000..1a65d77b1 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-37.pyc new file mode 100644 index 000000000..d26feebd8 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/collector.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/collector.cpython-37.pyc new file mode 100644 index 000000000..b90491c36 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/collector.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-37.pyc new file mode 100644 index 000000000..11bb8fe26 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/download.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/download.cpython-37.pyc new file mode 100644 index 000000000..aaa5035d3 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/download.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-37.pyc new file mode 100644 index 000000000..a3749804d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/index.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/index.cpython-37.pyc new file mode 100644 index 000000000..813a81884 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/index.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/legacy_resolve.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/legacy_resolve.cpython-37.pyc new file mode 100644 index 000000000..d381ce533 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/legacy_resolve.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/locations.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/locations.cpython-37.pyc new file mode 100644 index 000000000..a5a719525 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/locations.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/main.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/main.cpython-37.pyc new file mode 100644 index 000000000..55f42e8af Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/main.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/pep425tags.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/pep425tags.cpython-37.pyc new file mode 100644 index 000000000..0fc545caf Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/pep425tags.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-37.pyc new file mode 100644 index 000000000..91a2fcc5f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-37.pyc new file mode 100644 index 000000000..68d774416 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/__pycache__/wheel.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/__pycache__/wheel.cpython-37.pyc new file mode 100644 index 000000000..948df454b Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/__pycache__/wheel.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/build_env.py b/my_env/Lib/site-packages/pip/_internal/build_env.py new file mode 100644 index 000000000..5e6dc4602 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/build_env.py @@ -0,0 +1,221 @@ +"""Build Environment used for isolation during sdist building +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +import logging +import os +import sys +import textwrap +from collections import OrderedDict +from distutils.sysconfig import get_python_lib +from sysconfig import get_paths + +from pip._vendor.pkg_resources import Requirement, VersionConflict, WorkingSet + +from pip import __file__ as pip_location +from pip._internal.utils.subprocess import call_subprocess +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.ui import open_spinner + +if MYPY_CHECK_RUNNING: + from typing import Tuple, Set, Iterable, Optional, List + from pip._internal.index import PackageFinder + +logger = logging.getLogger(__name__) + + +class _Prefix: + + def __init__(self, path): + # type: (str) -> None + self.path = path + self.setup = False + self.bin_dir = get_paths( + 'nt' if os.name == 'nt' else 'posix_prefix', + vars={'base': path, 'platbase': path} + )['scripts'] + # Note: prefer distutils' sysconfig to get the + # library paths so PyPy is correctly supported. + purelib = get_python_lib(plat_specific=False, prefix=path) + platlib = get_python_lib(plat_specific=True, prefix=path) + if purelib == platlib: + self.lib_dirs = [purelib] + else: + self.lib_dirs = [purelib, platlib] + + +class BuildEnvironment(object): + """Creates and manages an isolated environment to install build deps + """ + + def __init__(self): + # type: () -> None + self._temp_dir = TempDirectory(kind="build-env") + + self._prefixes = OrderedDict(( + (name, _Prefix(os.path.join(self._temp_dir.path, name))) + for name in ('normal', 'overlay') + )) + + self._bin_dirs = [] # type: List[str] + self._lib_dirs = [] # type: List[str] + for prefix in reversed(list(self._prefixes.values())): + self._bin_dirs.append(prefix.bin_dir) + self._lib_dirs.extend(prefix.lib_dirs) + + # Customize site to: + # - ensure .pth files are honored + # - prevent access to system site packages + system_sites = { + os.path.normcase(site) for site in ( + get_python_lib(plat_specific=False), + get_python_lib(plat_specific=True), + ) + } + self._site_dir = os.path.join(self._temp_dir.path, 'site') + if not os.path.exists(self._site_dir): + os.mkdir(self._site_dir) + with open(os.path.join(self._site_dir, 'sitecustomize.py'), 'w') as fp: + fp.write(textwrap.dedent( + ''' + import os, site, sys + + # First, drop system-sites related paths. + original_sys_path = sys.path[:] + known_paths = set() + for path in {system_sites!r}: + site.addsitedir(path, known_paths=known_paths) + system_paths = set( + os.path.normcase(path) + for path in sys.path[len(original_sys_path):] + ) + original_sys_path = [ + path for path in original_sys_path + if os.path.normcase(path) not in system_paths + ] + sys.path = original_sys_path + + # Second, add lib directories. + # ensuring .pth file are processed. + for path in {lib_dirs!r}: + assert not path in sys.path + site.addsitedir(path) + ''' + ).format(system_sites=system_sites, lib_dirs=self._lib_dirs)) + + def __enter__(self): + self._save_env = { + name: os.environ.get(name, None) + for name in ('PATH', 'PYTHONNOUSERSITE', 'PYTHONPATH') + } + + path = self._bin_dirs[:] + old_path = self._save_env['PATH'] + if old_path: + path.extend(old_path.split(os.pathsep)) + + pythonpath = [self._site_dir] + + os.environ.update({ + 'PATH': os.pathsep.join(path), + 'PYTHONNOUSERSITE': '1', + 'PYTHONPATH': os.pathsep.join(pythonpath), + }) + + def __exit__(self, exc_type, exc_val, exc_tb): + for varname, old_value in self._save_env.items(): + if old_value is None: + os.environ.pop(varname, None) + else: + os.environ[varname] = old_value + + def cleanup(self): + # type: () -> None + self._temp_dir.cleanup() + + def check_requirements(self, reqs): + # type: (Iterable[str]) -> Tuple[Set[Tuple[str, str]], Set[str]] + """Return 2 sets: + - conflicting requirements: set of (installed, wanted) reqs tuples + - missing requirements: set of reqs + """ + missing = set() + conflicting = set() + if reqs: + ws = WorkingSet(self._lib_dirs) + for req in reqs: + try: + if ws.find(Requirement.parse(req)) is None: + missing.add(req) + except VersionConflict as e: + conflicting.add((str(e.args[0].as_requirement()), + str(e.args[1]))) + return conflicting, missing + + def install_requirements( + self, + finder, # type: PackageFinder + requirements, # type: Iterable[str] + prefix_as_string, # type: str + message # type: Optional[str] + ): + # type: (...) -> None + prefix = self._prefixes[prefix_as_string] + assert not prefix.setup + prefix.setup = True + if not requirements: + return + args = [ + sys.executable, os.path.dirname(pip_location), 'install', + '--ignore-installed', '--no-user', '--prefix', prefix.path, + '--no-warn-script-location', + ] # type: List[str] + if logger.getEffectiveLevel() <= logging.DEBUG: + args.append('-v') + for format_control in ('no_binary', 'only_binary'): + formats = getattr(finder.format_control, format_control) + args.extend(('--' + format_control.replace('_', '-'), + ','.join(sorted(formats or {':none:'})))) + + index_urls = finder.index_urls + if index_urls: + args.extend(['-i', index_urls[0]]) + for extra_index in index_urls[1:]: + args.extend(['--extra-index-url', extra_index]) + else: + args.append('--no-index') + for link in finder.find_links: + args.extend(['--find-links', link]) + + for host in finder.trusted_hosts: + args.extend(['--trusted-host', host]) + if finder.allow_all_prereleases: + args.append('--pre') + args.append('--') + args.extend(requirements) + with open_spinner(message) as spinner: + call_subprocess(args, spinner=spinner) + + +class NoOpBuildEnvironment(BuildEnvironment): + """A no-op drop-in replacement for BuildEnvironment + """ + + def __init__(self): + pass + + def __enter__(self): + pass + + def __exit__(self, exc_type, exc_val, exc_tb): + pass + + def cleanup(self): + pass + + def install_requirements(self, finder, requirements, prefix, message): + raise NotImplementedError() diff --git a/my_env/Lib/site-packages/pip/_internal/cache.py b/my_env/Lib/site-packages/pip/_internal/cache.py new file mode 100644 index 000000000..8ebecbbd5 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/cache.py @@ -0,0 +1,253 @@ +"""Cache Management +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import errno +import hashlib +import logging +import os + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.models.link import Link +from pip._internal.utils.compat import expanduser +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.urls import path_to_url +from pip._internal.wheel import InvalidWheelFilename, Wheel + +if MYPY_CHECK_RUNNING: + from typing import Optional, Set, List, Any + from pip._internal.index import FormatControl + from pip._internal.pep425tags import Pep425Tag + +logger = logging.getLogger(__name__) + + +class Cache(object): + """An abstract class - provides cache directories for data from links + + + :param cache_dir: The root of the cache. + :param format_control: An object of FormatControl class to limit + binaries being read from the cache. + :param allowed_formats: which formats of files the cache should store. + ('binary' and 'source' are the only allowed values) + """ + + def __init__(self, cache_dir, format_control, allowed_formats): + # type: (str, FormatControl, Set[str]) -> None + super(Cache, self).__init__() + self.cache_dir = expanduser(cache_dir) if cache_dir else None + self.format_control = format_control + self.allowed_formats = allowed_formats + + _valid_formats = {"source", "binary"} + assert self.allowed_formats.union(_valid_formats) == _valid_formats + + def _get_cache_path_parts(self, link): + # type: (Link) -> List[str] + """Get parts of part that must be os.path.joined with cache_dir + """ + + # We want to generate an url to use as our cache key, we don't want to + # just re-use the URL because it might have other items in the fragment + # and we don't care about those. + key_parts = [link.url_without_fragment] + if link.hash_name is not None and link.hash is not None: + key_parts.append("=".join([link.hash_name, link.hash])) + key_url = "#".join(key_parts) + + # Encode our key url with sha224, we'll use this because it has similar + # security properties to sha256, but with a shorter total output (and + # thus less secure). However the differences don't make a lot of + # difference for our use case here. + hashed = hashlib.sha224(key_url.encode()).hexdigest() + + # We want to nest the directories some to prevent having a ton of top + # level directories where we might run out of sub directories on some + # FS. + parts = [hashed[:2], hashed[2:4], hashed[4:6], hashed[6:]] + + return parts + + def _get_candidates(self, link, package_name): + # type: (Link, Optional[str]) -> List[Any] + can_not_cache = ( + not self.cache_dir or + not package_name or + not link + ) + if can_not_cache: + return [] + + canonical_name = canonicalize_name(package_name) + formats = self.format_control.get_allowed_formats( + canonical_name + ) + if not self.allowed_formats.intersection(formats): + return [] + + root = self.get_path_for_link(link) + try: + return os.listdir(root) + except OSError as err: + if err.errno in {errno.ENOENT, errno.ENOTDIR}: + return [] + raise + + def get_path_for_link(self, link): + # type: (Link) -> str + """Return a directory to store cached items in for link. + """ + raise NotImplementedError() + + def get( + self, + link, # type: Link + package_name, # type: Optional[str] + supported_tags, # type: List[Pep425Tag] + ): + # type: (...) -> Link + """Returns a link to a cached item if it exists, otherwise returns the + passed link. + """ + raise NotImplementedError() + + def _link_for_candidate(self, link, candidate): + # type: (Link, str) -> Link + root = self.get_path_for_link(link) + path = os.path.join(root, candidate) + + return Link(path_to_url(path)) + + def cleanup(self): + # type: () -> None + pass + + +class SimpleWheelCache(Cache): + """A cache of wheels for future installs. + """ + + def __init__(self, cache_dir, format_control): + # type: (str, FormatControl) -> None + super(SimpleWheelCache, self).__init__( + cache_dir, format_control, {"binary"} + ) + + def get_path_for_link(self, link): + # type: (Link) -> str + """Return a directory to store cached wheels for link + + Because there are M wheels for any one sdist, we provide a directory + to cache them in, and then consult that directory when looking up + cache hits. + + We only insert things into the cache if they have plausible version + numbers, so that we don't contaminate the cache with things that were + not unique. E.g. ./package might have dozens of installs done for it + and build a version of 0.0...and if we built and cached a wheel, we'd + end up using the same wheel even if the source has been edited. + + :param link: The link of the sdist for which this will cache wheels. + """ + parts = self._get_cache_path_parts(link) + + # Store wheels within the root cache_dir + return os.path.join(self.cache_dir, "wheels", *parts) + + def get( + self, + link, # type: Link + package_name, # type: Optional[str] + supported_tags, # type: List[Pep425Tag] + ): + # type: (...) -> Link + candidates = [] + + for wheel_name in self._get_candidates(link, package_name): + try: + wheel = Wheel(wheel_name) + except InvalidWheelFilename: + continue + if not wheel.supported(supported_tags): + # Built for a different python/arch/etc + continue + candidates.append( + (wheel.support_index_min(supported_tags), wheel_name) + ) + + if not candidates: + return link + + return self._link_for_candidate(link, min(candidates)[1]) + + +class EphemWheelCache(SimpleWheelCache): + """A SimpleWheelCache that creates it's own temporary cache directory + """ + + def __init__(self, format_control): + # type: (FormatControl) -> None + self._temp_dir = TempDirectory(kind="ephem-wheel-cache") + + super(EphemWheelCache, self).__init__( + self._temp_dir.path, format_control + ) + + def cleanup(self): + # type: () -> None + self._temp_dir.cleanup() + + +class WheelCache(Cache): + """Wraps EphemWheelCache and SimpleWheelCache into a single Cache + + This Cache allows for gracefully degradation, using the ephem wheel cache + when a certain link is not found in the simple wheel cache first. + """ + + def __init__(self, cache_dir, format_control): + # type: (str, FormatControl) -> None + super(WheelCache, self).__init__( + cache_dir, format_control, {'binary'} + ) + self._wheel_cache = SimpleWheelCache(cache_dir, format_control) + self._ephem_cache = EphemWheelCache(format_control) + + def get_path_for_link(self, link): + # type: (Link) -> str + return self._wheel_cache.get_path_for_link(link) + + def get_ephem_path_for_link(self, link): + # type: (Link) -> str + return self._ephem_cache.get_path_for_link(link) + + def get( + self, + link, # type: Link + package_name, # type: Optional[str] + supported_tags, # type: List[Pep425Tag] + ): + # type: (...) -> Link + retval = self._wheel_cache.get( + link=link, + package_name=package_name, + supported_tags=supported_tags, + ) + if retval is not link: + return retval + + return self._ephem_cache.get( + link=link, + package_name=package_name, + supported_tags=supported_tags, + ) + + def cleanup(self): + # type: () -> None + self._wheel_cache.cleanup() + self._ephem_cache.cleanup() diff --git a/my_env/Lib/site-packages/pip/_internal/cli/__init__.py b/my_env/Lib/site-packages/pip/_internal/cli/__init__.py new file mode 100644 index 000000000..e589bb917 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/cli/__init__.py @@ -0,0 +1,4 @@ +"""Subpackage containing all of pip's command line interface related code +""" + +# This file intentionally does not import submodules diff --git a/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..790bb6e5f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-37.pyc new file mode 100644 index 000000000..0c4ffb09a Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-37.pyc new file mode 100644 index 000000000..a78926b1d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-37.pyc new file mode 100644 index 000000000..932823ad7 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-37.pyc new file mode 100644 index 000000000..0bc71813d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-37.pyc new file mode 100644 index 000000000..bcb9f8051 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-37.pyc new file mode 100644 index 000000000..37a182f08 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-37.pyc new file mode 100644 index 000000000..2496e342f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-37.pyc new file mode 100644 index 000000000..71393a69b Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/cli/autocompletion.py b/my_env/Lib/site-packages/pip/_internal/cli/autocompletion.py new file mode 100644 index 000000000..5440241b3 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/cli/autocompletion.py @@ -0,0 +1,155 @@ +"""Logic that powers autocompletion installed by ``pip completion``. +""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import optparse +import os +import sys + +from pip._internal.cli.main_parser import create_main_parser +from pip._internal.commands import commands_dict, create_command +from pip._internal.utils.misc import get_installed_distributions + + +def autocomplete(): + """Entry Point for completion of main and subcommand options. + """ + # Don't complete if user hasn't sourced bash_completion file. + if 'PIP_AUTO_COMPLETE' not in os.environ: + return + cwords = os.environ['COMP_WORDS'].split()[1:] + cword = int(os.environ['COMP_CWORD']) + try: + current = cwords[cword - 1] + except IndexError: + current = '' + + subcommands = list(commands_dict) + options = [] + # subcommand + try: + subcommand_name = [w for w in cwords if w in subcommands][0] + except IndexError: + subcommand_name = None + + parser = create_main_parser() + # subcommand options + if subcommand_name: + # special case: 'help' subcommand has no options + if subcommand_name == 'help': + sys.exit(1) + # special case: list locally installed dists for show and uninstall + should_list_installed = ( + subcommand_name in ['show', 'uninstall'] and + not current.startswith('-') + ) + if should_list_installed: + installed = [] + lc = current.lower() + for dist in get_installed_distributions(local_only=True): + if dist.key.startswith(lc) and dist.key not in cwords[1:]: + installed.append(dist.key) + # if there are no dists installed, fall back to option completion + if installed: + for dist in installed: + print(dist) + sys.exit(1) + + subcommand = create_command(subcommand_name) + + for opt in subcommand.parser.option_list_all: + if opt.help != optparse.SUPPRESS_HELP: + for opt_str in opt._long_opts + opt._short_opts: + options.append((opt_str, opt.nargs)) + + # filter out previously specified options from available options + prev_opts = [x.split('=')[0] for x in cwords[1:cword - 1]] + options = [(x, v) for (x, v) in options if x not in prev_opts] + # filter options by current input + options = [(k, v) for k, v in options if k.startswith(current)] + # get completion type given cwords and available subcommand options + completion_type = get_path_completion_type( + cwords, cword, subcommand.parser.option_list_all, + ) + # get completion files and directories if ``completion_type`` is + # ````, ```` or ```` + if completion_type: + options = auto_complete_paths(current, completion_type) + options = ((opt, 0) for opt in options) + for option in options: + opt_label = option[0] + # append '=' to options which require args + if option[1] and option[0][:2] == "--": + opt_label += '=' + print(opt_label) + else: + # show main parser options only when necessary + + opts = [i.option_list for i in parser.option_groups] + opts.append(parser.option_list) + opts = (o for it in opts for o in it) + if current.startswith('-'): + for opt in opts: + if opt.help != optparse.SUPPRESS_HELP: + subcommands += opt._long_opts + opt._short_opts + else: + # get completion type given cwords and all available options + completion_type = get_path_completion_type(cwords, cword, opts) + if completion_type: + subcommands = auto_complete_paths(current, completion_type) + + print(' '.join([x for x in subcommands if x.startswith(current)])) + sys.exit(1) + + +def get_path_completion_type(cwords, cword, opts): + """Get the type of path completion (``file``, ``dir``, ``path`` or None) + + :param cwords: same as the environmental variable ``COMP_WORDS`` + :param cword: same as the environmental variable ``COMP_CWORD`` + :param opts: The available options to check + :return: path completion type (``file``, ``dir``, ``path`` or None) + """ + if cword < 2 or not cwords[cword - 2].startswith('-'): + return + for opt in opts: + if opt.help == optparse.SUPPRESS_HELP: + continue + for o in str(opt).split('/'): + if cwords[cword - 2].split('=')[0] == o: + if not opt.metavar or any( + x in ('path', 'file', 'dir') + for x in opt.metavar.split('/')): + return opt.metavar + + +def auto_complete_paths(current, completion_type): + """If ``completion_type`` is ``file`` or ``path``, list all regular files + and directories starting with ``current``; otherwise only list directories + starting with ``current``. + + :param current: The word to be completed + :param completion_type: path completion type(`file`, `path` or `dir`)i + :return: A generator of regular files and/or directories + """ + directory, filename = os.path.split(current) + current_path = os.path.abspath(directory) + # Don't complete paths if they can't be accessed + if not os.access(current_path, os.R_OK): + return + filename = os.path.normcase(filename) + # list all files that start with ``filename`` + file_list = (x for x in os.listdir(current_path) + if os.path.normcase(x).startswith(filename)) + for f in file_list: + opt = os.path.join(current_path, f) + comp_file = os.path.normcase(os.path.join(directory, f)) + # complete regular files when there is not ```` after option + # complete directories when there is ````, ```` or + # ````after option + if completion_type != 'dir' and os.path.isfile(opt): + yield comp_file + elif os.path.isdir(opt): + yield os.path.join(comp_file, '') diff --git a/my_env/Lib/site-packages/pip/_internal/cli/base_command.py b/my_env/Lib/site-packages/pip/_internal/cli/base_command.py new file mode 100644 index 000000000..dad08c24e --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/cli/base_command.py @@ -0,0 +1,193 @@ +"""Base Command class, and related routines""" + +from __future__ import absolute_import, print_function + +import logging +import logging.config +import optparse +import os +import platform +import sys +import traceback + +from pip._internal.cli import cmdoptions +from pip._internal.cli.command_context import CommandContextMixIn +from pip._internal.cli.parser import ( + ConfigOptionParser, + UpdatingDefaultsHelpFormatter, +) +from pip._internal.cli.status_codes import ( + ERROR, + PREVIOUS_BUILD_DIR_ERROR, + SUCCESS, + UNKNOWN_ERROR, + VIRTUALENV_NOT_FOUND, +) +from pip._internal.exceptions import ( + BadCommand, + CommandError, + InstallationError, + PreviousBuildDirError, + UninstallationError, +) +from pip._internal.utils.deprecation import deprecated +from pip._internal.utils.logging import BrokenStdoutLoggingError, setup_logging +from pip._internal.utils.misc import get_prog +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.virtualenv import running_under_virtualenv + +if MYPY_CHECK_RUNNING: + from typing import List, Tuple, Any + from optparse import Values + +__all__ = ['Command'] + +logger = logging.getLogger(__name__) + + +class Command(CommandContextMixIn): + usage = None # type: str + ignore_require_venv = False # type: bool + + def __init__(self, name, summary, isolated=False): + # type: (str, str, bool) -> None + super(Command, self).__init__() + parser_kw = { + 'usage': self.usage, + 'prog': '%s %s' % (get_prog(), name), + 'formatter': UpdatingDefaultsHelpFormatter(), + 'add_help_option': False, + 'name': name, + 'description': self.__doc__, + 'isolated': isolated, + } + + self.name = name + self.summary = summary + self.parser = ConfigOptionParser(**parser_kw) + + # Commands should add options to this option group + optgroup_name = '%s Options' % self.name.capitalize() + self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name) + + # Add the general options + gen_opts = cmdoptions.make_option_group( + cmdoptions.general_group, + self.parser, + ) + self.parser.add_option_group(gen_opts) + + def handle_pip_version_check(self, options): + # type: (Values) -> None + """ + This is a no-op so that commands by default do not do the pip version + check. + """ + # Make sure we do the pip version check if the index_group options + # are present. + assert not hasattr(options, 'no_index') + + def run(self, options, args): + # type: (Values, List[Any]) -> Any + raise NotImplementedError + + def parse_args(self, args): + # type: (List[str]) -> Tuple + # factored out for testability + return self.parser.parse_args(args) + + def main(self, args): + # type: (List[str]) -> int + try: + with self.main_context(): + return self._main(args) + finally: + logging.shutdown() + + def _main(self, args): + # type: (List[str]) -> int + options, args = self.parse_args(args) + + # Set verbosity so that it can be used elsewhere. + self.verbosity = options.verbose - options.quiet + + level_number = setup_logging( + verbosity=self.verbosity, + no_color=options.no_color, + user_log_file=options.log, + ) + + if sys.version_info[:2] == (2, 7): + message = ( + "A future version of pip will drop support for Python 2.7. " + "More details about Python 2 support in pip, can be found at " + "https://pip.pypa.io/en/latest/development/release-process/#python-2-support" # noqa + ) + if platform.python_implementation() == "CPython": + message = ( + "Python 2.7 will reach the end of its life on January " + "1st, 2020. Please upgrade your Python as Python 2.7 " + "won't be maintained after that date. " + ) + message + deprecated(message, replacement=None, gone_in=None) + + # TODO: Try to get these passing down from the command? + # without resorting to os.environ to hold these. + # This also affects isolated builds and it should. + + if options.no_input: + os.environ['PIP_NO_INPUT'] = '1' + + if options.exists_action: + os.environ['PIP_EXISTS_ACTION'] = ' '.join(options.exists_action) + + if options.require_venv and not self.ignore_require_venv: + # If a venv is required check if it can really be found + if not running_under_virtualenv(): + logger.critical( + 'Could not find an activated virtualenv (required).' + ) + sys.exit(VIRTUALENV_NOT_FOUND) + + try: + status = self.run(options, args) + # FIXME: all commands should return an exit status + # and when it is done, isinstance is not needed anymore + if isinstance(status, int): + return status + except PreviousBuildDirError as exc: + logger.critical(str(exc)) + logger.debug('Exception information:', exc_info=True) + + return PREVIOUS_BUILD_DIR_ERROR + except (InstallationError, UninstallationError, BadCommand) as exc: + logger.critical(str(exc)) + logger.debug('Exception information:', exc_info=True) + + return ERROR + except CommandError as exc: + logger.critical('%s', exc) + logger.debug('Exception information:', exc_info=True) + + return ERROR + except BrokenStdoutLoggingError: + # Bypass our logger and write any remaining messages to stderr + # because stdout no longer works. + print('ERROR: Pipe to stdout was broken', file=sys.stderr) + if level_number <= logging.DEBUG: + traceback.print_exc(file=sys.stderr) + + return ERROR + except KeyboardInterrupt: + logger.critical('Operation cancelled by user') + logger.debug('Exception information:', exc_info=True) + + return ERROR + except BaseException: + logger.critical('Exception:', exc_info=True) + + return UNKNOWN_ERROR + finally: + self.handle_pip_version_check(options) + + return SUCCESS diff --git a/my_env/Lib/site-packages/pip/_internal/cli/cmdoptions.py b/my_env/Lib/site-packages/pip/_internal/cli/cmdoptions.py new file mode 100644 index 000000000..d7c6e34b2 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/cli/cmdoptions.py @@ -0,0 +1,909 @@ +""" +shared options and groups + +The principle here is to define options once, but *not* instantiate them +globally. One reason being that options with action='append' can carry state +between parses. pip parses general options twice internally, and shouldn't +pass on state. To be consistent, all options will follow this design. +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import logging +import textwrap +import warnings +from distutils.util import strtobool +from functools import partial +from optparse import SUPPRESS_HELP, Option, OptionGroup +from textwrap import dedent + +from pip._internal.exceptions import CommandError +from pip._internal.locations import USER_CACHE_DIR, get_src_prefix +from pip._internal.models.format_control import FormatControl +from pip._internal.models.index import PyPI +from pip._internal.models.target_python import TargetPython +from pip._internal.utils.hashes import STRONG_HASHES +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.ui import BAR_TYPES + +if MYPY_CHECK_RUNNING: + from typing import Any, Callable, Dict, Optional, Tuple + from optparse import OptionParser, Values + from pip._internal.cli.parser import ConfigOptionParser + +logger = logging.getLogger(__name__) + + +def raise_option_error(parser, option, msg): + """ + Raise an option parsing error using parser.error(). + + Args: + parser: an OptionParser instance. + option: an Option instance. + msg: the error text. + """ + msg = '{} error: {}'.format(option, msg) + msg = textwrap.fill(' '.join(msg.split())) + parser.error(msg) + + +def make_option_group(group, parser): + # type: (Dict[str, Any], ConfigOptionParser) -> OptionGroup + """ + Return an OptionGroup object + group -- assumed to be dict with 'name' and 'options' keys + parser -- an optparse Parser + """ + option_group = OptionGroup(parser, group['name']) + for option in group['options']: + option_group.add_option(option()) + return option_group + + +def check_install_build_global(options, check_options=None): + # type: (Values, Optional[Values]) -> None + """Disable wheels if per-setup.py call options are set. + + :param options: The OptionParser options to update. + :param check_options: The options to check, if not supplied defaults to + options. + """ + if check_options is None: + check_options = options + + def getname(n): + return getattr(check_options, n, None) + names = ["build_options", "global_options", "install_options"] + if any(map(getname, names)): + control = options.format_control + control.disallow_binaries() + warnings.warn( + 'Disabling all use of wheels due to the use of --build-options ' + '/ --global-options / --install-options.', stacklevel=2, + ) + + +def check_dist_restriction(options, check_target=False): + # type: (Values, bool) -> None + """Function for determining if custom platform options are allowed. + + :param options: The OptionParser options. + :param check_target: Whether or not to check if --target is being used. + """ + dist_restriction_set = any([ + options.python_version, + options.platform, + options.abi, + options.implementation, + ]) + + binary_only = FormatControl(set(), {':all:'}) + sdist_dependencies_allowed = ( + options.format_control != binary_only and + not options.ignore_dependencies + ) + + # Installations or downloads using dist restrictions must not combine + # source distributions and dist-specific wheels, as they are not + # guaranteed to be locally compatible. + if dist_restriction_set and sdist_dependencies_allowed: + raise CommandError( + "When restricting platform and interpreter constraints using " + "--python-version, --platform, --abi, or --implementation, " + "either --no-deps must be set, or --only-binary=:all: must be " + "set and --no-binary must not be set (or must be set to " + ":none:)." + ) + + if check_target: + if dist_restriction_set and not options.target_dir: + raise CommandError( + "Can not use any platform or abi specific options unless " + "installing via '--target'" + ) + + +########### +# options # +########### + +help_ = partial( + Option, + '-h', '--help', + dest='help', + action='help', + help='Show help.', +) # type: Callable[..., Option] + +isolated_mode = partial( + Option, + "--isolated", + dest="isolated_mode", + action="store_true", + default=False, + help=( + "Run pip in an isolated mode, ignoring environment variables and user " + "configuration." + ), +) # type: Callable[..., Option] + +require_virtualenv = partial( + Option, + # Run only if inside a virtualenv, bail if not. + '--require-virtualenv', '--require-venv', + dest='require_venv', + action='store_true', + default=False, + help=SUPPRESS_HELP +) # type: Callable[..., Option] + +verbose = partial( + Option, + '-v', '--verbose', + dest='verbose', + action='count', + default=0, + help='Give more output. Option is additive, and can be used up to 3 times.' +) # type: Callable[..., Option] + +no_color = partial( + Option, + '--no-color', + dest='no_color', + action='store_true', + default=False, + help="Suppress colored output", +) # type: Callable[..., Option] + +version = partial( + Option, + '-V', '--version', + dest='version', + action='store_true', + help='Show version and exit.', +) # type: Callable[..., Option] + +quiet = partial( + Option, + '-q', '--quiet', + dest='quiet', + action='count', + default=0, + help=( + 'Give less output. Option is additive, and can be used up to 3' + ' times (corresponding to WARNING, ERROR, and CRITICAL logging' + ' levels).' + ), +) # type: Callable[..., Option] + +progress_bar = partial( + Option, + '--progress-bar', + dest='progress_bar', + type='choice', + choices=list(BAR_TYPES.keys()), + default='on', + help=( + 'Specify type of progress to be displayed [' + + '|'.join(BAR_TYPES.keys()) + '] (default: %default)' + ), +) # type: Callable[..., Option] + +log = partial( + Option, + "--log", "--log-file", "--local-log", + dest="log", + metavar="path", + help="Path to a verbose appending log." +) # type: Callable[..., Option] + +no_input = partial( + Option, + # Don't ask for input + '--no-input', + dest='no_input', + action='store_true', + default=False, + help=SUPPRESS_HELP +) # type: Callable[..., Option] + +proxy = partial( + Option, + '--proxy', + dest='proxy', + type='str', + default='', + help="Specify a proxy in the form [user:passwd@]proxy.server:port." +) # type: Callable[..., Option] + +retries = partial( + Option, + '--retries', + dest='retries', + type='int', + default=5, + help="Maximum number of retries each connection should attempt " + "(default %default times).", +) # type: Callable[..., Option] + +timeout = partial( + Option, + '--timeout', '--default-timeout', + metavar='sec', + dest='timeout', + type='float', + default=15, + help='Set the socket timeout (default %default seconds).', +) # type: Callable[..., Option] + +skip_requirements_regex = partial( + Option, + # A regex to be used to skip requirements + '--skip-requirements-regex', + dest='skip_requirements_regex', + type='str', + default='', + help=SUPPRESS_HELP, +) # type: Callable[..., Option] + + +def exists_action(): + # type: () -> Option + return Option( + # Option when path already exist + '--exists-action', + dest='exists_action', + type='choice', + choices=['s', 'i', 'w', 'b', 'a'], + default=[], + action='append', + metavar='action', + help="Default action when a path already exists: " + "(s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.", + ) + + +cert = partial( + Option, + '--cert', + dest='cert', + type='str', + metavar='path', + help="Path to alternate CA bundle.", +) # type: Callable[..., Option] + +client_cert = partial( + Option, + '--client-cert', + dest='client_cert', + type='str', + default=None, + metavar='path', + help="Path to SSL client certificate, a single file containing the " + "private key and the certificate in PEM format.", +) # type: Callable[..., Option] + +index_url = partial( + Option, + '-i', '--index-url', '--pypi-url', + dest='index_url', + metavar='URL', + default=PyPI.simple_url, + help="Base URL of the Python Package Index (default %default). " + "This should point to a repository compliant with PEP 503 " + "(the simple repository API) or a local directory laid out " + "in the same format.", +) # type: Callable[..., Option] + + +def extra_index_url(): + return Option( + '--extra-index-url', + dest='extra_index_urls', + metavar='URL', + action='append', + default=[], + help="Extra URLs of package indexes to use in addition to " + "--index-url. Should follow the same rules as " + "--index-url.", + ) + + +no_index = partial( + Option, + '--no-index', + dest='no_index', + action='store_true', + default=False, + help='Ignore package index (only looking at --find-links URLs instead).', +) # type: Callable[..., Option] + + +def find_links(): + # type: () -> Option + return Option( + '-f', '--find-links', + dest='find_links', + action='append', + default=[], + metavar='url', + help="If a url or path to an html file, then parse for links to " + "archives. If a local path or file:// url that's a directory, " + "then look for archives in the directory listing.", + ) + + +def trusted_host(): + # type: () -> Option + return Option( + "--trusted-host", + dest="trusted_hosts", + action="append", + metavar="HOSTNAME", + default=[], + help="Mark this host or host:port pair as trusted, even though it " + "does not have valid or any HTTPS.", + ) + + +def constraints(): + # type: () -> Option + return Option( + '-c', '--constraint', + dest='constraints', + action='append', + default=[], + metavar='file', + help='Constrain versions using the given constraints file. ' + 'This option can be used multiple times.' + ) + + +def requirements(): + # type: () -> Option + return Option( + '-r', '--requirement', + dest='requirements', + action='append', + default=[], + metavar='file', + help='Install from the given requirements file. ' + 'This option can be used multiple times.' + ) + + +def editable(): + # type: () -> Option + return Option( + '-e', '--editable', + dest='editables', + action='append', + default=[], + metavar='path/url', + help=('Install a project in editable mode (i.e. setuptools ' + '"develop mode") from a local project path or a VCS url.'), + ) + + +src = partial( + Option, + '--src', '--source', '--source-dir', '--source-directory', + dest='src_dir', + metavar='dir', + default=get_src_prefix(), + help='Directory to check out editable projects into. ' + 'The default in a virtualenv is "/src". ' + 'The default for global installs is "/src".' +) # type: Callable[..., Option] + + +def _get_format_control(values, option): + # type: (Values, Option) -> Any + """Get a format_control object.""" + return getattr(values, option.dest) + + +def _handle_no_binary(option, opt_str, value, parser): + # type: (Option, str, str, OptionParser) -> None + existing = _get_format_control(parser.values, option) + FormatControl.handle_mutual_excludes( + value, existing.no_binary, existing.only_binary, + ) + + +def _handle_only_binary(option, opt_str, value, parser): + # type: (Option, str, str, OptionParser) -> None + existing = _get_format_control(parser.values, option) + FormatControl.handle_mutual_excludes( + value, existing.only_binary, existing.no_binary, + ) + + +def no_binary(): + # type: () -> Option + format_control = FormatControl(set(), set()) + return Option( + "--no-binary", dest="format_control", action="callback", + callback=_handle_no_binary, type="str", + default=format_control, + help="Do not use binary packages. Can be supplied multiple times, and " + "each time adds to the existing value. Accepts either :all: to " + "disable all binary packages, :none: to empty the set, or one or " + "more package names with commas between them (no colons). Note " + "that some packages are tricky to compile and may fail to " + "install when this option is used on them.", + ) + + +def only_binary(): + # type: () -> Option + format_control = FormatControl(set(), set()) + return Option( + "--only-binary", dest="format_control", action="callback", + callback=_handle_only_binary, type="str", + default=format_control, + help="Do not use source packages. Can be supplied multiple times, and " + "each time adds to the existing value. Accepts either :all: to " + "disable all source packages, :none: to empty the set, or one or " + "more package names with commas between them. Packages without " + "binary distributions will fail to install when this option is " + "used on them.", + ) + + +platform = partial( + Option, + '--platform', + dest='platform', + metavar='platform', + default=None, + help=("Only use wheels compatible with . " + "Defaults to the platform of the running system."), +) # type: Callable[..., Option] + + +# This was made a separate function for unit-testing purposes. +def _convert_python_version(value): + # type: (str) -> Tuple[Tuple[int, ...], Optional[str]] + """ + Convert a version string like "3", "37", or "3.7.3" into a tuple of ints. + + :return: A 2-tuple (version_info, error_msg), where `error_msg` is + non-None if and only if there was a parsing error. + """ + if not value: + # The empty string is the same as not providing a value. + return (None, None) + + parts = value.split('.') + if len(parts) > 3: + return ((), 'at most three version parts are allowed') + + if len(parts) == 1: + # Then we are in the case of "3" or "37". + value = parts[0] + if len(value) > 1: + parts = [value[0], value[1:]] + + try: + version_info = tuple(int(part) for part in parts) + except ValueError: + return ((), 'each version part must be an integer') + + return (version_info, None) + + +def _handle_python_version(option, opt_str, value, parser): + # type: (Option, str, str, OptionParser) -> None + """ + Handle a provided --python-version value. + """ + version_info, error_msg = _convert_python_version(value) + if error_msg is not None: + msg = ( + 'invalid --python-version value: {!r}: {}'.format( + value, error_msg, + ) + ) + raise_option_error(parser, option=option, msg=msg) + + parser.values.python_version = version_info + + +python_version = partial( + Option, + '--python-version', + dest='python_version', + metavar='python_version', + action='callback', + callback=_handle_python_version, type='str', + default=None, + help=dedent("""\ + The Python interpreter version to use for wheel and "Requires-Python" + compatibility checks. Defaults to a version derived from the running + interpreter. The version can be specified using up to three dot-separated + integers (e.g. "3" for 3.0.0, "3.7" for 3.7.0, or "3.7.3"). A major-minor + version can also be given as a string without dots (e.g. "37" for 3.7.0). + """), +) # type: Callable[..., Option] + + +implementation = partial( + Option, + '--implementation', + dest='implementation', + metavar='implementation', + default=None, + help=("Only use wheels compatible with Python " + "implementation , e.g. 'pp', 'jy', 'cp', " + " or 'ip'. If not specified, then the current " + "interpreter implementation is used. Use 'py' to force " + "implementation-agnostic wheels."), +) # type: Callable[..., Option] + + +abi = partial( + Option, + '--abi', + dest='abi', + metavar='abi', + default=None, + help=("Only use wheels compatible with Python " + "abi , e.g. 'pypy_41'. If not specified, then the " + "current interpreter abi tag is used. Generally " + "you will need to specify --implementation, " + "--platform, and --python-version when using " + "this option."), +) # type: Callable[..., Option] + + +def add_target_python_options(cmd_opts): + # type: (OptionGroup) -> None + cmd_opts.add_option(platform()) + cmd_opts.add_option(python_version()) + cmd_opts.add_option(implementation()) + cmd_opts.add_option(abi()) + + +def make_target_python(options): + # type: (Values) -> TargetPython + target_python = TargetPython( + platform=options.platform, + py_version_info=options.python_version, + abi=options.abi, + implementation=options.implementation, + ) + + return target_python + + +def prefer_binary(): + # type: () -> Option + return Option( + "--prefer-binary", + dest="prefer_binary", + action="store_true", + default=False, + help="Prefer older binary packages over newer source packages." + ) + + +cache_dir = partial( + Option, + "--cache-dir", + dest="cache_dir", + default=USER_CACHE_DIR, + metavar="dir", + help="Store the cache data in ." +) # type: Callable[..., Option] + + +def _handle_no_cache_dir(option, opt, value, parser): + # type: (Option, str, str, OptionParser) -> None + """ + Process a value provided for the --no-cache-dir option. + + This is an optparse.Option callback for the --no-cache-dir option. + """ + # The value argument will be None if --no-cache-dir is passed via the + # command-line, since the option doesn't accept arguments. However, + # the value can be non-None if the option is triggered e.g. by an + # environment variable, like PIP_NO_CACHE_DIR=true. + if value is not None: + # Then parse the string value to get argument error-checking. + try: + strtobool(value) + except ValueError as exc: + raise_option_error(parser, option=option, msg=str(exc)) + + # Originally, setting PIP_NO_CACHE_DIR to a value that strtobool() + # converted to 0 (like "false" or "no") caused cache_dir to be disabled + # rather than enabled (logic would say the latter). Thus, we disable + # the cache directory not just on values that parse to True, but (for + # backwards compatibility reasons) also on values that parse to False. + # In other words, always set it to False if the option is provided in + # some (valid) form. + parser.values.cache_dir = False + + +no_cache = partial( + Option, + "--no-cache-dir", + dest="cache_dir", + action="callback", + callback=_handle_no_cache_dir, + help="Disable the cache.", +) # type: Callable[..., Option] + +no_deps = partial( + Option, + '--no-deps', '--no-dependencies', + dest='ignore_dependencies', + action='store_true', + default=False, + help="Don't install package dependencies.", +) # type: Callable[..., Option] + +build_dir = partial( + Option, + '-b', '--build', '--build-dir', '--build-directory', + dest='build_dir', + metavar='dir', + help='Directory to unpack packages into and build in. Note that ' + 'an initial build still takes place in a temporary directory. ' + 'The location of temporary directories can be controlled by setting ' + 'the TMPDIR environment variable (TEMP on Windows) appropriately. ' + 'When passed, build directories are not cleaned in case of failures.' +) # type: Callable[..., Option] + +ignore_requires_python = partial( + Option, + '--ignore-requires-python', + dest='ignore_requires_python', + action='store_true', + help='Ignore the Requires-Python information.' +) # type: Callable[..., Option] + +no_build_isolation = partial( + Option, + '--no-build-isolation', + dest='build_isolation', + action='store_false', + default=True, + help='Disable isolation when building a modern source distribution. ' + 'Build dependencies specified by PEP 518 must be already installed ' + 'if this option is used.' +) # type: Callable[..., Option] + + +def _handle_no_use_pep517(option, opt, value, parser): + # type: (Option, str, str, OptionParser) -> None + """ + Process a value provided for the --no-use-pep517 option. + + This is an optparse.Option callback for the no_use_pep517 option. + """ + # Since --no-use-pep517 doesn't accept arguments, the value argument + # will be None if --no-use-pep517 is passed via the command-line. + # However, the value can be non-None if the option is triggered e.g. + # by an environment variable, for example "PIP_NO_USE_PEP517=true". + if value is not None: + msg = """A value was passed for --no-use-pep517, + probably using either the PIP_NO_USE_PEP517 environment variable + or the "no-use-pep517" config file option. Use an appropriate value + of the PIP_USE_PEP517 environment variable or the "use-pep517" + config file option instead. + """ + raise_option_error(parser, option=option, msg=msg) + + # Otherwise, --no-use-pep517 was passed via the command-line. + parser.values.use_pep517 = False + + +use_pep517 = partial( + Option, + '--use-pep517', + dest='use_pep517', + action='store_true', + default=None, + help='Use PEP 517 for building source distributions ' + '(use --no-use-pep517 to force legacy behaviour).' +) # type: Any + +no_use_pep517 = partial( + Option, + '--no-use-pep517', + dest='use_pep517', + action='callback', + callback=_handle_no_use_pep517, + default=None, + help=SUPPRESS_HELP +) # type: Any + +install_options = partial( + Option, + '--install-option', + dest='install_options', + action='append', + metavar='options', + help="Extra arguments to be supplied to the setup.py install " + "command (use like --install-option=\"--install-scripts=/usr/local/" + "bin\"). Use multiple --install-option options to pass multiple " + "options to setup.py install. If you are using an option with a " + "directory path, be sure to use absolute path.", +) # type: Callable[..., Option] + +global_options = partial( + Option, + '--global-option', + dest='global_options', + action='append', + metavar='options', + help="Extra global options to be supplied to the setup.py " + "call before the install command.", +) # type: Callable[..., Option] + +no_clean = partial( + Option, + '--no-clean', + action='store_true', + default=False, + help="Don't clean up build directories." +) # type: Callable[..., Option] + +pre = partial( + Option, + '--pre', + action='store_true', + default=False, + help="Include pre-release and development versions. By default, " + "pip only finds stable versions.", +) # type: Callable[..., Option] + +disable_pip_version_check = partial( + Option, + "--disable-pip-version-check", + dest="disable_pip_version_check", + action="store_true", + default=False, + help="Don't periodically check PyPI to determine whether a new version " + "of pip is available for download. Implied with --no-index.", +) # type: Callable[..., Option] + + +# Deprecated, Remove later +always_unzip = partial( + Option, + '-Z', '--always-unzip', + dest='always_unzip', + action='store_true', + help=SUPPRESS_HELP, +) # type: Callable[..., Option] + + +def _handle_merge_hash(option, opt_str, value, parser): + # type: (Option, str, str, OptionParser) -> None + """Given a value spelled "algo:digest", append the digest to a list + pointed to in a dict by the algo name.""" + if not parser.values.hashes: + parser.values.hashes = {} + try: + algo, digest = value.split(':', 1) + except ValueError: + parser.error('Arguments to %s must be a hash name ' + 'followed by a value, like --hash=sha256:abcde...' % + opt_str) + if algo not in STRONG_HASHES: + parser.error('Allowed hash algorithms for %s are %s.' % + (opt_str, ', '.join(STRONG_HASHES))) + parser.values.hashes.setdefault(algo, []).append(digest) + + +hash = partial( + Option, + '--hash', + # Hash values eventually end up in InstallRequirement.hashes due to + # __dict__ copying in process_line(). + dest='hashes', + action='callback', + callback=_handle_merge_hash, + type='string', + help="Verify that the package's archive matches this " + 'hash before installing. Example: --hash=sha256:abcdef...', +) # type: Callable[..., Option] + + +require_hashes = partial( + Option, + '--require-hashes', + dest='require_hashes', + action='store_true', + default=False, + help='Require a hash to check each requirement against, for ' + 'repeatable installs. This option is implied when any package in a ' + 'requirements file has a --hash option.', +) # type: Callable[..., Option] + + +list_path = partial( + Option, + '--path', + dest='path', + action='append', + help='Restrict to the specified installation path for listing ' + 'packages (can be used multiple times).' +) # type: Callable[..., Option] + + +def check_list_path_option(options): + # type: (Values) -> None + if options.path and (options.user or options.local): + raise CommandError( + "Cannot combine '--path' with '--user' or '--local'" + ) + + +########## +# groups # +########## + +general_group = { + 'name': 'General Options', + 'options': [ + help_, + isolated_mode, + require_virtualenv, + verbose, + version, + quiet, + log, + no_input, + proxy, + retries, + timeout, + skip_requirements_regex, + exists_action, + trusted_host, + cert, + client_cert, + cache_dir, + no_cache, + disable_pip_version_check, + no_color, + ] +} # type: Dict[str, Any] + +index_group = { + 'name': 'Package Index Options', + 'options': [ + index_url, + extra_index_url, + no_index, + find_links, + ] +} # type: Dict[str, Any] diff --git a/my_env/Lib/site-packages/pip/_internal/cli/command_context.py b/my_env/Lib/site-packages/pip/_internal/cli/command_context.py new file mode 100644 index 000000000..3ab255f55 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/cli/command_context.py @@ -0,0 +1,29 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from contextlib import contextmanager + +from pip._vendor.contextlib2 import ExitStack + + +class CommandContextMixIn(object): + def __init__(self): + super(CommandContextMixIn, self).__init__() + self._in_main_context = False + self._main_context = ExitStack() + + @contextmanager + def main_context(self): + assert not self._in_main_context + + self._in_main_context = True + try: + with self._main_context: + yield + finally: + self._in_main_context = False + + def enter_context(self, context_provider): + assert self._in_main_context + + return self._main_context.enter_context(context_provider) diff --git a/my_env/Lib/site-packages/pip/_internal/cli/main_parser.py b/my_env/Lib/site-packages/pip/_internal/cli/main_parser.py new file mode 100644 index 000000000..a89821d44 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/cli/main_parser.py @@ -0,0 +1,99 @@ +"""A single place for constructing and exposing the main parser +""" + +import os +import sys + +from pip._internal.cli import cmdoptions +from pip._internal.cli.parser import ( + ConfigOptionParser, + UpdatingDefaultsHelpFormatter, +) +from pip._internal.commands import commands_dict, get_similar_commands +from pip._internal.exceptions import CommandError +from pip._internal.utils.misc import get_pip_version, get_prog +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Tuple, List + + +__all__ = ["create_main_parser", "parse_command"] + + +def create_main_parser(): + # type: () -> ConfigOptionParser + """Creates and returns the main parser for pip's CLI + """ + + parser_kw = { + 'usage': '\n%prog [options]', + 'add_help_option': False, + 'formatter': UpdatingDefaultsHelpFormatter(), + 'name': 'global', + 'prog': get_prog(), + } + + parser = ConfigOptionParser(**parser_kw) + parser.disable_interspersed_args() + + parser.version = get_pip_version() + + # add the general options + gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) + parser.add_option_group(gen_opts) + + # so the help formatter knows + parser.main = True # type: ignore + + # create command listing for description + description = [''] + [ + '%-27s %s' % (name, command_info.summary) + for name, command_info in commands_dict.items() + ] + parser.description = '\n'.join(description) + + return parser + + +def parse_command(args): + # type: (List[str]) -> Tuple[str, List[str]] + parser = create_main_parser() + + # Note: parser calls disable_interspersed_args(), so the result of this + # call is to split the initial args into the general options before the + # subcommand and everything else. + # For example: + # args: ['--timeout=5', 'install', '--user', 'INITools'] + # general_options: ['--timeout==5'] + # args_else: ['install', '--user', 'INITools'] + general_options, args_else = parser.parse_args(args) + + # --version + if general_options.version: + sys.stdout.write(parser.version) # type: ignore + sys.stdout.write(os.linesep) + sys.exit() + + # pip || pip help -> print_help() + if not args_else or (args_else[0] == 'help' and len(args_else) == 1): + parser.print_help() + sys.exit() + + # the subcommand name + cmd_name = args_else[0] + + if cmd_name not in commands_dict: + guess = get_similar_commands(cmd_name) + + msg = ['unknown command "%s"' % cmd_name] + if guess: + msg.append('maybe you meant "%s"' % guess) + + raise CommandError(' - '.join(msg)) + + # all the args without the subcommand + cmd_args = args[:] + cmd_args.remove(cmd_name) + + return cmd_name, cmd_args diff --git a/my_env/Lib/site-packages/pip/_internal/cli/parser.py b/my_env/Lib/site-packages/pip/_internal/cli/parser.py new file mode 100644 index 000000000..c99456bae --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/cli/parser.py @@ -0,0 +1,265 @@ +"""Base option parser setup""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import logging +import optparse +import sys +import textwrap +from distutils.util import strtobool + +from pip._vendor.six import string_types + +from pip._internal.cli.status_codes import UNKNOWN_ERROR +from pip._internal.configuration import Configuration, ConfigurationError +from pip._internal.utils.compat import get_terminal_size + +logger = logging.getLogger(__name__) + + +class PrettyHelpFormatter(optparse.IndentedHelpFormatter): + """A prettier/less verbose help formatter for optparse.""" + + def __init__(self, *args, **kwargs): + # help position must be aligned with __init__.parseopts.description + kwargs['max_help_position'] = 30 + kwargs['indent_increment'] = 1 + kwargs['width'] = get_terminal_size()[0] - 2 + optparse.IndentedHelpFormatter.__init__(self, *args, **kwargs) + + def format_option_strings(self, option): + return self._format_option_strings(option, ' <%s>', ', ') + + def _format_option_strings(self, option, mvarfmt=' <%s>', optsep=', '): + """ + Return a comma-separated list of option strings and metavars. + + :param option: tuple of (short opt, long opt), e.g: ('-f', '--format') + :param mvarfmt: metavar format string - evaluated as mvarfmt % metavar + :param optsep: separator + """ + opts = [] + + if option._short_opts: + opts.append(option._short_opts[0]) + if option._long_opts: + opts.append(option._long_opts[0]) + if len(opts) > 1: + opts.insert(1, optsep) + + if option.takes_value(): + metavar = option.metavar or option.dest.lower() + opts.append(mvarfmt % metavar.lower()) + + return ''.join(opts) + + def format_heading(self, heading): + if heading == 'Options': + return '' + return heading + ':\n' + + def format_usage(self, usage): + """ + Ensure there is only one newline between usage and the first heading + if there is no description. + """ + msg = '\nUsage: %s\n' % self.indent_lines(textwrap.dedent(usage), " ") + return msg + + def format_description(self, description): + # leave full control over description to us + if description: + if hasattr(self.parser, 'main'): + label = 'Commands' + else: + label = 'Description' + # some doc strings have initial newlines, some don't + description = description.lstrip('\n') + # some doc strings have final newlines and spaces, some don't + description = description.rstrip() + # dedent, then reindent + description = self.indent_lines(textwrap.dedent(description), " ") + description = '%s:\n%s\n' % (label, description) + return description + else: + return '' + + def format_epilog(self, epilog): + # leave full control over epilog to us + if epilog: + return epilog + else: + return '' + + def indent_lines(self, text, indent): + new_lines = [indent + line for line in text.split('\n')] + return "\n".join(new_lines) + + +class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter): + """Custom help formatter for use in ConfigOptionParser. + + This is updates the defaults before expanding them, allowing + them to show up correctly in the help listing. + """ + + def expand_default(self, option): + if self.parser is not None: + self.parser._update_defaults(self.parser.defaults) + return optparse.IndentedHelpFormatter.expand_default(self, option) + + +class CustomOptionParser(optparse.OptionParser): + + def insert_option_group(self, idx, *args, **kwargs): + """Insert an OptionGroup at a given position.""" + group = self.add_option_group(*args, **kwargs) + + self.option_groups.pop() + self.option_groups.insert(idx, group) + + return group + + @property + def option_list_all(self): + """Get a list of all options, including those in option groups.""" + res = self.option_list[:] + for i in self.option_groups: + res.extend(i.option_list) + + return res + + +class ConfigOptionParser(CustomOptionParser): + """Custom option parser which updates its defaults by checking the + configuration files and environmental variables""" + + def __init__(self, *args, **kwargs): + self.name = kwargs.pop('name') + + isolated = kwargs.pop("isolated", False) + self.config = Configuration(isolated) + + assert self.name + optparse.OptionParser.__init__(self, *args, **kwargs) + + def check_default(self, option, key, val): + try: + return option.check_value(key, val) + except optparse.OptionValueError as exc: + print("An error occurred during configuration: %s" % exc) + sys.exit(3) + + def _get_ordered_configuration_items(self): + # Configuration gives keys in an unordered manner. Order them. + override_order = ["global", self.name, ":env:"] + + # Pool the options into different groups + section_items = {name: [] for name in override_order} + for section_key, val in self.config.items(): + # ignore empty values + if not val: + logger.debug( + "Ignoring configuration key '%s' as it's value is empty.", + section_key + ) + continue + + section, key = section_key.split(".", 1) + if section in override_order: + section_items[section].append((key, val)) + + # Yield each group in their override order + for section in override_order: + for key, val in section_items[section]: + yield key, val + + def _update_defaults(self, defaults): + """Updates the given defaults with values from the config files and + the environ. Does a little special handling for certain types of + options (lists).""" + + # Accumulate complex default state. + self.values = optparse.Values(self.defaults) + late_eval = set() + # Then set the options with those values + for key, val in self._get_ordered_configuration_items(): + # '--' because configuration supports only long names + option = self.get_option('--' + key) + + # Ignore options not present in this parser. E.g. non-globals put + # in [global] by users that want them to apply to all applicable + # commands. + if option is None: + continue + + if option.action in ('store_true', 'store_false', 'count'): + try: + val = strtobool(val) + except ValueError: + error_msg = invalid_config_error_message( + option.action, key, val + ) + self.error(error_msg) + + elif option.action == 'append': + val = val.split() + val = [self.check_default(option, key, v) for v in val] + elif option.action == 'callback': + late_eval.add(option.dest) + opt_str = option.get_opt_string() + val = option.convert_value(opt_str, val) + # From take_action + args = option.callback_args or () + kwargs = option.callback_kwargs or {} + option.callback(option, opt_str, val, self, *args, **kwargs) + else: + val = self.check_default(option, key, val) + + defaults[option.dest] = val + + for key in late_eval: + defaults[key] = getattr(self.values, key) + self.values = None + return defaults + + def get_default_values(self): + """Overriding to make updating the defaults after instantiation of + the option parser possible, _update_defaults() does the dirty work.""" + if not self.process_default_values: + # Old, pre-Optik 1.5 behaviour. + return optparse.Values(self.defaults) + + # Load the configuration, or error out in case of an error + try: + self.config.load() + except ConfigurationError as err: + self.exit(UNKNOWN_ERROR, str(err)) + + defaults = self._update_defaults(self.defaults.copy()) # ours + for option in self._get_all_options(): + default = defaults.get(option.dest) + if isinstance(default, string_types): + opt_str = option.get_opt_string() + defaults[option.dest] = option.check_value(opt_str, default) + return optparse.Values(defaults) + + def error(self, msg): + self.print_usage(sys.stderr) + self.exit(UNKNOWN_ERROR, "%s\n" % msg) + + +def invalid_config_error_message(action, key, val): + """Returns a better error message when invalid configuration option + is provided.""" + if action in ('store_true', 'store_false'): + return ("{0} is not a valid value for {1} option, " + "please specify a boolean value like yes/no, " + "true/false or 1/0 instead.").format(val, key) + + return ("{0} is not a valid value for {1} option, " + "please specify a numerical value like 1/0 " + "instead.").format(val, key) diff --git a/my_env/Lib/site-packages/pip/_internal/cli/req_command.py b/my_env/Lib/site-packages/pip/_internal/cli/req_command.py new file mode 100644 index 000000000..203e86a49 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/cli/req_command.py @@ -0,0 +1,304 @@ +"""Contains the Command base classes that depend on PipSession. + +The classes in this module are in a separate module so the commands not +needing download / PackageFinder capability don't unnecessarily import the +PackageFinder machinery and all its vendored dependencies, etc. +""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import os +from functools import partial + +from pip._internal.cli.base_command import Command +from pip._internal.cli.command_context import CommandContextMixIn +from pip._internal.exceptions import CommandError +from pip._internal.index import PackageFinder +from pip._internal.legacy_resolve import Resolver +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.network.session import PipSession +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req.constructors import ( + install_req_from_editable, + install_req_from_line, + install_req_from_req_string, +) +from pip._internal.req.req_file import parse_requirements +from pip._internal.self_outdated_check import ( + make_link_collector, + pip_self_version_check, +) +from pip._internal.utils.misc import normalize_path +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from optparse import Values + from typing import List, Optional, Tuple + from pip._internal.cache import WheelCache + from pip._internal.models.target_python import TargetPython + from pip._internal.req.req_set import RequirementSet + from pip._internal.req.req_tracker import RequirementTracker + from pip._internal.utils.temp_dir import TempDirectory + + +class SessionCommandMixin(CommandContextMixIn): + + """ + A class mixin for command classes needing _build_session(). + """ + def __init__(self): + super(SessionCommandMixin, self).__init__() + self._session = None # Optional[PipSession] + + @classmethod + def _get_index_urls(cls, options): + """Return a list of index urls from user-provided options.""" + index_urls = [] + if not getattr(options, "no_index", False): + url = getattr(options, "index_url", None) + if url: + index_urls.append(url) + urls = getattr(options, "extra_index_urls", None) + if urls: + index_urls.extend(urls) + # Return None rather than an empty list + return index_urls or None + + def get_default_session(self, options): + # type: (Values) -> PipSession + """Get a default-managed session.""" + if self._session is None: + self._session = self.enter_context(self._build_session(options)) + return self._session + + def _build_session(self, options, retries=None, timeout=None): + # type: (Values, Optional[int], Optional[int]) -> PipSession + session = PipSession( + cache=( + normalize_path(os.path.join(options.cache_dir, "http")) + if options.cache_dir else None + ), + retries=retries if retries is not None else options.retries, + trusted_hosts=options.trusted_hosts, + index_urls=self._get_index_urls(options), + ) + + # Handle custom ca-bundles from the user + if options.cert: + session.verify = options.cert + + # Handle SSL client certificate + if options.client_cert: + session.cert = options.client_cert + + # Handle timeouts + if options.timeout or timeout: + session.timeout = ( + timeout if timeout is not None else options.timeout + ) + + # Handle configured proxies + if options.proxy: + session.proxies = { + "http": options.proxy, + "https": options.proxy, + } + + # Determine if we can prompt the user for authentication or not + session.auth.prompting = not options.no_input + + return session + + +class IndexGroupCommand(Command, SessionCommandMixin): + + """ + Abstract base class for commands with the index_group options. + + This also corresponds to the commands that permit the pip version check. + """ + + def handle_pip_version_check(self, options): + # type: (Values) -> None + """ + Do the pip version check if not disabled. + + This overrides the default behavior of not doing the check. + """ + # Make sure the index_group options are present. + assert hasattr(options, 'no_index') + + if options.disable_pip_version_check or options.no_index: + return + + # Otherwise, check if we're using the latest version of pip available. + session = self._build_session( + options, + retries=0, + timeout=min(5, options.timeout) + ) + with session: + pip_self_version_check(session, options) + + +class RequirementCommand(IndexGroupCommand): + + @staticmethod + def make_requirement_preparer( + temp_build_dir, # type: TempDirectory + options, # type: Values + req_tracker, # type: RequirementTracker + download_dir=None, # type: str + wheel_download_dir=None, # type: str + ): + # type: (...) -> RequirementPreparer + """ + Create a RequirementPreparer instance for the given parameters. + """ + temp_build_dir_path = temp_build_dir.path + assert temp_build_dir_path is not None + return RequirementPreparer( + build_dir=temp_build_dir_path, + src_dir=options.src_dir, + download_dir=download_dir, + wheel_download_dir=wheel_download_dir, + progress_bar=options.progress_bar, + build_isolation=options.build_isolation, + req_tracker=req_tracker, + ) + + @staticmethod + def make_resolver( + preparer, # type: RequirementPreparer + session, # type: PipSession + finder, # type: PackageFinder + options, # type: Values + wheel_cache=None, # type: Optional[WheelCache] + use_user_site=False, # type: bool + ignore_installed=True, # type: bool + ignore_requires_python=False, # type: bool + force_reinstall=False, # type: bool + upgrade_strategy="to-satisfy-only", # type: str + use_pep517=None, # type: Optional[bool] + py_version_info=None # type: Optional[Tuple[int, ...]] + ): + # type: (...) -> Resolver + """ + Create a Resolver instance for the given parameters. + """ + make_install_req = partial( + install_req_from_req_string, + isolated=options.isolated_mode, + wheel_cache=wheel_cache, + use_pep517=use_pep517, + ) + return Resolver( + preparer=preparer, + session=session, + finder=finder, + make_install_req=make_install_req, + use_user_site=use_user_site, + ignore_dependencies=options.ignore_dependencies, + ignore_installed=ignore_installed, + ignore_requires_python=ignore_requires_python, + force_reinstall=force_reinstall, + upgrade_strategy=upgrade_strategy, + py_version_info=py_version_info + ) + + def populate_requirement_set( + self, + requirement_set, # type: RequirementSet + args, # type: List[str] + options, # type: Values + finder, # type: PackageFinder + session, # type: PipSession + wheel_cache, # type: Optional[WheelCache] + ): + # type: (...) -> None + """ + Marshal cmd line args into a requirement set. + """ + # NOTE: As a side-effect, options.require_hashes and + # requirement_set.require_hashes may be updated + + for filename in options.constraints: + for req_to_add in parse_requirements( + filename, + constraint=True, finder=finder, options=options, + session=session, wheel_cache=wheel_cache): + req_to_add.is_direct = True + requirement_set.add_requirement(req_to_add) + + for req in args: + req_to_add = install_req_from_line( + req, None, isolated=options.isolated_mode, + use_pep517=options.use_pep517, + wheel_cache=wheel_cache + ) + req_to_add.is_direct = True + requirement_set.add_requirement(req_to_add) + + for req in options.editables: + req_to_add = install_req_from_editable( + req, + isolated=options.isolated_mode, + use_pep517=options.use_pep517, + wheel_cache=wheel_cache + ) + req_to_add.is_direct = True + requirement_set.add_requirement(req_to_add) + + for filename in options.requirements: + for req_to_add in parse_requirements( + filename, + finder=finder, options=options, session=session, + wheel_cache=wheel_cache, + use_pep517=options.use_pep517): + req_to_add.is_direct = True + requirement_set.add_requirement(req_to_add) + # If --require-hashes was a line in a requirements file, tell + # RequirementSet about it: + requirement_set.require_hashes = options.require_hashes + + if not (args or options.editables or options.requirements): + opts = {'name': self.name} + if options.find_links: + raise CommandError( + 'You must give at least one requirement to %(name)s ' + '(maybe you meant "pip %(name)s %(links)s"?)' % + dict(opts, links=' '.join(options.find_links))) + else: + raise CommandError( + 'You must give at least one requirement to %(name)s ' + '(see "pip help %(name)s")' % opts) + + def _build_package_finder( + self, + options, # type: Values + session, # type: PipSession + target_python=None, # type: Optional[TargetPython] + ignore_requires_python=None, # type: Optional[bool] + ): + # type: (...) -> PackageFinder + """ + Create a package finder appropriate to this requirement command. + + :param ignore_requires_python: Whether to ignore incompatible + "Requires-Python" values in links. Defaults to False. + """ + link_collector = make_link_collector(session, options=options) + selection_prefs = SelectionPreferences( + allow_yanked=True, + format_control=options.format_control, + allow_all_prereleases=options.pre, + prefer_binary=options.prefer_binary, + ignore_requires_python=ignore_requires_python, + ) + + return PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + target_python=target_python, + ) diff --git a/my_env/Lib/site-packages/pip/_internal/cli/status_codes.py b/my_env/Lib/site-packages/pip/_internal/cli/status_codes.py new file mode 100644 index 000000000..275360a31 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/cli/status_codes.py @@ -0,0 +1,8 @@ +from __future__ import absolute_import + +SUCCESS = 0 +ERROR = 1 +UNKNOWN_ERROR = 2 +VIRTUALENV_NOT_FOUND = 3 +PREVIOUS_BUILD_DIR_ERROR = 4 +NO_MATCHES_FOUND = 23 diff --git a/my_env/Lib/site-packages/pip/_internal/collector.py b/my_env/Lib/site-packages/pip/_internal/collector.py new file mode 100644 index 000000000..e6ee598e8 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/collector.py @@ -0,0 +1,548 @@ +""" +The main purpose of this module is to expose LinkCollector.collect_links(). +""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import cgi +import itertools +import logging +import mimetypes +import os +from collections import OrderedDict + +from pip._vendor import html5lib, requests +from pip._vendor.distlib.compat import unescape +from pip._vendor.requests.exceptions import HTTPError, RetryError, SSLError +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib import request as urllib_request + +from pip._internal.models.link import Link +from pip._internal.utils.filetypes import ARCHIVE_EXTENSIONS +from pip._internal.utils.misc import redact_auth_from_url +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.urls import path_to_url, url_to_path +from pip._internal.vcs import is_url, vcs + +if MYPY_CHECK_RUNNING: + from typing import ( + Callable, Dict, Iterable, List, MutableMapping, Optional, Sequence, + Tuple, Union, + ) + import xml.etree.ElementTree + + from pip._vendor.requests import Response + + from pip._internal.models.search_scope import SearchScope + from pip._internal.network.session import PipSession + + HTMLElement = xml.etree.ElementTree.Element + ResponseHeaders = MutableMapping[str, str] + + +logger = logging.getLogger(__name__) + + +def _match_vcs_scheme(url): + # type: (str) -> Optional[str] + """Look for VCS schemes in the URL. + + Returns the matched VCS scheme, or None if there's no match. + """ + for scheme in vcs.schemes: + if url.lower().startswith(scheme) and url[len(scheme)] in '+:': + return scheme + return None + + +def _is_url_like_archive(url): + # type: (str) -> bool + """Return whether the URL looks like an archive. + """ + filename = Link(url).filename + for bad_ext in ARCHIVE_EXTENSIONS: + if filename.endswith(bad_ext): + return True + return False + + +class _NotHTML(Exception): + def __init__(self, content_type, request_desc): + # type: (str, str) -> None + super(_NotHTML, self).__init__(content_type, request_desc) + self.content_type = content_type + self.request_desc = request_desc + + +def _ensure_html_header(response): + # type: (Response) -> None + """Check the Content-Type header to ensure the response contains HTML. + + Raises `_NotHTML` if the content type is not text/html. + """ + content_type = response.headers.get("Content-Type", "") + if not content_type.lower().startswith("text/html"): + raise _NotHTML(content_type, response.request.method) + + +class _NotHTTP(Exception): + pass + + +def _ensure_html_response(url, session): + # type: (str, PipSession) -> None + """Send a HEAD request to the URL, and ensure the response contains HTML. + + Raises `_NotHTTP` if the URL is not available for a HEAD request, or + `_NotHTML` if the content type is not text/html. + """ + scheme, netloc, path, query, fragment = urllib_parse.urlsplit(url) + if scheme not in {'http', 'https'}: + raise _NotHTTP() + + resp = session.head(url, allow_redirects=True) + resp.raise_for_status() + + _ensure_html_header(resp) + + +def _get_html_response(url, session): + # type: (str, PipSession) -> Response + """Access an HTML page with GET, and return the response. + + This consists of three parts: + + 1. If the URL looks suspiciously like an archive, send a HEAD first to + check the Content-Type is HTML, to avoid downloading a large file. + Raise `_NotHTTP` if the content type cannot be determined, or + `_NotHTML` if it is not HTML. + 2. Actually perform the request. Raise HTTP exceptions on network failures. + 3. Check the Content-Type header to make sure we got HTML, and raise + `_NotHTML` otherwise. + """ + if _is_url_like_archive(url): + _ensure_html_response(url, session=session) + + logger.debug('Getting page %s', redact_auth_from_url(url)) + + resp = session.get( + url, + headers={ + "Accept": "text/html", + # We don't want to blindly returned cached data for + # /simple/, because authors generally expecting that + # twine upload && pip install will function, but if + # they've done a pip install in the last ~10 minutes + # it won't. Thus by setting this to zero we will not + # blindly use any cached data, however the benefit of + # using max-age=0 instead of no-cache, is that we will + # still support conditional requests, so we will still + # minimize traffic sent in cases where the page hasn't + # changed at all, we will just always incur the round + # trip for the conditional GET now instead of only + # once per 10 minutes. + # For more information, please see pypa/pip#5670. + "Cache-Control": "max-age=0", + }, + ) + resp.raise_for_status() + + # The check for archives above only works if the url ends with + # something that looks like an archive. However that is not a + # requirement of an url. Unless we issue a HEAD request on every + # url we cannot know ahead of time for sure if something is HTML + # or not. However we can check after we've downloaded it. + _ensure_html_header(resp) + + return resp + + +def _get_encoding_from_headers(headers): + # type: (ResponseHeaders) -> Optional[str] + """Determine if we have any encoding information in our headers. + """ + if headers and "Content-Type" in headers: + content_type, params = cgi.parse_header(headers["Content-Type"]) + if "charset" in params: + return params['charset'] + return None + + +def _determine_base_url(document, page_url): + # type: (HTMLElement, str) -> str + """Determine the HTML document's base URL. + + This looks for a ```` tag in the HTML document. If present, its href + attribute denotes the base URL of anchor tags in the document. If there is + no such tag (or if it does not have a valid href attribute), the HTML + file's URL is used as the base URL. + + :param document: An HTML document representation. The current + implementation expects the result of ``html5lib.parse()``. + :param page_url: The URL of the HTML document. + """ + for base in document.findall(".//base"): + href = base.get("href") + if href is not None: + return href + return page_url + + +def _clean_link(url): + # type: (str) -> str + """Makes sure a link is fully encoded. That is, if a ' ' shows up in + the link, it will be rewritten to %20 (while not over-quoting + % or other characters).""" + # Split the URL into parts according to the general structure + # `scheme://netloc/path;parameters?query#fragment`. Note that the + # `netloc` can be empty and the URI will then refer to a local + # filesystem path. + result = urllib_parse.urlparse(url) + # In both cases below we unquote prior to quoting to make sure + # nothing is double quoted. + if result.netloc == "": + # On Windows the path part might contain a drive letter which + # should not be quoted. On Linux where drive letters do not + # exist, the colon should be quoted. We rely on urllib.request + # to do the right thing here. + path = urllib_request.pathname2url( + urllib_request.url2pathname(result.path)) + else: + # In addition to the `/` character we protect `@` so that + # revision strings in VCS URLs are properly parsed. + path = urllib_parse.quote(urllib_parse.unquote(result.path), safe="/@") + return urllib_parse.urlunparse(result._replace(path=path)) + + +def _create_link_from_element( + anchor, # type: HTMLElement + page_url, # type: str + base_url, # type: str +): + # type: (...) -> Optional[Link] + """ + Convert an anchor element in a simple repository page to a Link. + """ + href = anchor.get("href") + if not href: + return None + + url = _clean_link(urllib_parse.urljoin(base_url, href)) + pyrequire = anchor.get('data-requires-python') + pyrequire = unescape(pyrequire) if pyrequire else None + + yanked_reason = anchor.get('data-yanked') + if yanked_reason: + # This is a unicode string in Python 2 (and 3). + yanked_reason = unescape(yanked_reason) + + link = Link( + url, + comes_from=page_url, + requires_python=pyrequire, + yanked_reason=yanked_reason, + ) + + return link + + +def parse_links(page): + # type: (HTMLPage) -> Iterable[Link] + """ + Parse an HTML document, and yield its anchor elements as Link objects. + """ + document = html5lib.parse( + page.content, + transport_encoding=page.encoding, + namespaceHTMLElements=False, + ) + + url = page.url + base_url = _determine_base_url(document, url) + for anchor in document.findall(".//a"): + link = _create_link_from_element( + anchor, + page_url=url, + base_url=base_url, + ) + if link is None: + continue + yield link + + +class HTMLPage(object): + """Represents one page, along with its URL""" + + def __init__( + self, + content, # type: bytes + encoding, # type: Optional[str] + url, # type: str + ): + # type: (...) -> None + """ + :param encoding: the encoding to decode the given content. + :param url: the URL from which the HTML was downloaded. + """ + self.content = content + self.encoding = encoding + self.url = url + + def __str__(self): + return redact_auth_from_url(self.url) + + +def _handle_get_page_fail( + link, # type: Link + reason, # type: Union[str, Exception] + meth=None # type: Optional[Callable[..., None]] +): + # type: (...) -> None + if meth is None: + meth = logger.debug + meth("Could not fetch URL %s: %s - skipping", link, reason) + + +def _make_html_page(response): + # type: (Response) -> HTMLPage + encoding = _get_encoding_from_headers(response.headers) + return HTMLPage(response.content, encoding=encoding, url=response.url) + + +def _get_html_page(link, session=None): + # type: (Link, Optional[PipSession]) -> Optional[HTMLPage] + if session is None: + raise TypeError( + "_get_html_page() missing 1 required keyword argument: 'session'" + ) + + url = link.url.split('#', 1)[0] + + # Check for VCS schemes that do not support lookup as web pages. + vcs_scheme = _match_vcs_scheme(url) + if vcs_scheme: + logger.debug('Cannot look at %s URL %s', vcs_scheme, link) + return None + + # Tack index.html onto file:// URLs that point to directories + scheme, _, path, _, _, _ = urllib_parse.urlparse(url) + if (scheme == 'file' and os.path.isdir(urllib_request.url2pathname(path))): + # add trailing slash if not present so urljoin doesn't trim + # final segment + if not url.endswith('/'): + url += '/' + url = urllib_parse.urljoin(url, 'index.html') + logger.debug(' file: URL is directory, getting %s', url) + + try: + resp = _get_html_response(url, session=session) + except _NotHTTP: + logger.debug( + 'Skipping page %s because it looks like an archive, and cannot ' + 'be checked by HEAD.', link, + ) + except _NotHTML as exc: + logger.debug( + 'Skipping page %s because the %s request got Content-Type: %s', + link, exc.request_desc, exc.content_type, + ) + except HTTPError as exc: + _handle_get_page_fail(link, exc) + except RetryError as exc: + _handle_get_page_fail(link, exc) + except SSLError as exc: + reason = "There was a problem confirming the ssl certificate: " + reason += str(exc) + _handle_get_page_fail(link, reason, meth=logger.info) + except requests.ConnectionError as exc: + _handle_get_page_fail(link, "connection error: %s" % exc) + except requests.Timeout: + _handle_get_page_fail(link, "timed out") + else: + return _make_html_page(resp) + return None + + +def _remove_duplicate_links(links): + # type: (Iterable[Link]) -> List[Link] + """ + Return a list of links, with duplicates removed and ordering preserved. + """ + # We preserve the ordering when removing duplicates because we can. + return list(OrderedDict.fromkeys(links)) + + +def group_locations(locations, expand_dir=False): + # type: (Sequence[str], bool) -> Tuple[List[str], List[str]] + """ + Divide a list of locations into two groups: "files" (archives) and "urls." + + :return: A pair of lists (files, urls). + """ + files = [] + urls = [] + + # puts the url for the given file path into the appropriate list + def sort_path(path): + url = path_to_url(path) + if mimetypes.guess_type(url, strict=False)[0] == 'text/html': + urls.append(url) + else: + files.append(url) + + for url in locations: + + is_local_path = os.path.exists(url) + is_file_url = url.startswith('file:') + + if is_local_path or is_file_url: + if is_local_path: + path = url + else: + path = url_to_path(url) + if os.path.isdir(path): + if expand_dir: + path = os.path.realpath(path) + for item in os.listdir(path): + sort_path(os.path.join(path, item)) + elif is_file_url: + urls.append(url) + else: + logger.warning( + "Path '{0}' is ignored: " + "it is a directory.".format(path), + ) + elif os.path.isfile(path): + sort_path(path) + else: + logger.warning( + "Url '%s' is ignored: it is neither a file " + "nor a directory.", url, + ) + elif is_url(url): + # Only add url with clear scheme + urls.append(url) + else: + logger.warning( + "Url '%s' is ignored. It is either a non-existing " + "path or lacks a specific scheme.", url, + ) + + return files, urls + + +class CollectedLinks(object): + + """ + Encapsulates all the Link objects collected by a call to + LinkCollector.collect_links(), stored separately as-- + + (1) links from the configured file locations, + (2) links from the configured find_links, and + (3) a dict mapping HTML page url to links from that page. + """ + + def __init__( + self, + files, # type: List[Link] + find_links, # type: List[Link] + pages, # type: Dict[str, List[Link]] + ): + # type: (...) -> None + """ + :param files: Links from file locations. + :param find_links: Links from find_links. + :param pages: A dict mapping HTML page url to links from that page. + """ + self.files = files + self.find_links = find_links + self.pages = pages + + +class LinkCollector(object): + + """ + Responsible for collecting Link objects from all configured locations, + making network requests as needed. + + The class's main method is its collect_links() method. + """ + + def __init__( + self, + session, # type: PipSession + search_scope, # type: SearchScope + ): + # type: (...) -> None + self.search_scope = search_scope + self.session = session + + @property + def find_links(self): + # type: () -> List[str] + return self.search_scope.find_links + + def _get_pages(self, locations): + # type: (Iterable[Link]) -> Iterable[HTMLPage] + """ + Yields (page, page_url) from the given locations, skipping + locations that have errors. + """ + for location in locations: + page = _get_html_page(location, session=self.session) + if page is None: + continue + + yield page + + def collect_links(self, project_name): + # type: (str) -> CollectedLinks + """Find all available links for the given project name. + + :return: All the Link objects (unfiltered), as a CollectedLinks object. + """ + search_scope = self.search_scope + index_locations = search_scope.get_index_urls_locations(project_name) + index_file_loc, index_url_loc = group_locations(index_locations) + fl_file_loc, fl_url_loc = group_locations( + self.find_links, expand_dir=True, + ) + + file_links = [ + Link(url) for url in itertools.chain(index_file_loc, fl_file_loc) + ] + + # We trust every directly linked archive in find_links + find_link_links = [Link(url, '-f') for url in self.find_links] + + # We trust every url that the user has given us whether it was given + # via --index-url or --find-links. + # We want to filter out anything that does not have a secure origin. + url_locations = [ + link for link in itertools.chain( + (Link(url) for url in index_url_loc), + (Link(url) for url in fl_url_loc), + ) + if self.session.is_secure_origin(link) + ] + + url_locations = _remove_duplicate_links(url_locations) + lines = [ + '{} location(s) to search for versions of {}:'.format( + len(url_locations), project_name, + ), + ] + for link in url_locations: + lines.append('* {}'.format(link)) + logger.debug('\n'.join(lines)) + + pages_links = {} + for page in self._get_pages(url_locations): + pages_links[page.url] = list(parse_links(page)) + + return CollectedLinks( + files=file_links, + find_links=find_link_links, + pages=pages_links, + ) diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__init__.py b/my_env/Lib/site-packages/pip/_internal/commands/__init__.py new file mode 100644 index 000000000..2a311f8fc --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/__init__.py @@ -0,0 +1,114 @@ +""" +Package containing all pip commands +""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import importlib +from collections import OrderedDict, namedtuple + +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Any + from pip._internal.cli.base_command import Command + + +CommandInfo = namedtuple('CommandInfo', 'module_path, class_name, summary') + +# The ordering matters for help display. +# Also, even though the module path starts with the same +# "pip._internal.commands" prefix in each case, we include the full path +# because it makes testing easier (specifically when modifying commands_dict +# in test setup / teardown by adding info for a FakeCommand class defined +# in a test-related module). +# Finally, we need to pass an iterable of pairs here rather than a dict +# so that the ordering won't be lost when using Python 2.7. +commands_dict = OrderedDict([ + ('install', CommandInfo( + 'pip._internal.commands.install', 'InstallCommand', + 'Install packages.', + )), + ('download', CommandInfo( + 'pip._internal.commands.download', 'DownloadCommand', + 'Download packages.', + )), + ('uninstall', CommandInfo( + 'pip._internal.commands.uninstall', 'UninstallCommand', + 'Uninstall packages.', + )), + ('freeze', CommandInfo( + 'pip._internal.commands.freeze', 'FreezeCommand', + 'Output installed packages in requirements format.', + )), + ('list', CommandInfo( + 'pip._internal.commands.list', 'ListCommand', + 'List installed packages.', + )), + ('show', CommandInfo( + 'pip._internal.commands.show', 'ShowCommand', + 'Show information about installed packages.', + )), + ('check', CommandInfo( + 'pip._internal.commands.check', 'CheckCommand', + 'Verify installed packages have compatible dependencies.', + )), + ('config', CommandInfo( + 'pip._internal.commands.configuration', 'ConfigurationCommand', + 'Manage local and global configuration.', + )), + ('search', CommandInfo( + 'pip._internal.commands.search', 'SearchCommand', + 'Search PyPI for packages.', + )), + ('wheel', CommandInfo( + 'pip._internal.commands.wheel', 'WheelCommand', + 'Build wheels from your requirements.', + )), + ('hash', CommandInfo( + 'pip._internal.commands.hash', 'HashCommand', + 'Compute hashes of package archives.', + )), + ('completion', CommandInfo( + 'pip._internal.commands.completion', 'CompletionCommand', + 'A helper command used for command completion.', + )), + ('debug', CommandInfo( + 'pip._internal.commands.debug', 'DebugCommand', + 'Show information useful for debugging.', + )), + ('help', CommandInfo( + 'pip._internal.commands.help', 'HelpCommand', + 'Show help for commands.', + )), +]) # type: OrderedDict[str, CommandInfo] + + +def create_command(name, **kwargs): + # type: (str, **Any) -> Command + """ + Create an instance of the Command class with the given name. + """ + module_path, class_name, summary = commands_dict[name] + module = importlib.import_module(module_path) + command_class = getattr(module, class_name) + command = command_class(name=name, summary=summary, **kwargs) + + return command + + +def get_similar_commands(name): + """Command name auto-correct.""" + from difflib import get_close_matches + + name = name.lower() + + close_commands = get_close_matches(name, commands_dict.keys()) + + if close_commands: + return close_commands[0] + else: + return False diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..025c38e6f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-37.pyc new file mode 100644 index 000000000..b0886645f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-37.pyc new file mode 100644 index 000000000..cf6338766 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-37.pyc new file mode 100644 index 000000000..184a7b095 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-37.pyc new file mode 100644 index 000000000..fb9ce06d8 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-37.pyc new file mode 100644 index 000000000..aba371e5b Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-37.pyc new file mode 100644 index 000000000..12092a050 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-37.pyc new file mode 100644 index 000000000..a62580c9a Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-37.pyc new file mode 100644 index 000000000..806f0b00f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-37.pyc new file mode 100644 index 000000000..12ac711cd Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-37.pyc new file mode 100644 index 000000000..ba56488bf Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-37.pyc new file mode 100644 index 000000000..dda8f507c Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-37.pyc new file mode 100644 index 000000000..2b93d4ebf Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-37.pyc new file mode 100644 index 000000000..84ca1a84d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-37.pyc new file mode 100644 index 000000000..e041bc27d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/commands/check.py b/my_env/Lib/site-packages/pip/_internal/commands/check.py new file mode 100644 index 000000000..968944611 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/check.py @@ -0,0 +1,45 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import logging + +from pip._internal.cli.base_command import Command +from pip._internal.operations.check import ( + check_package_set, + create_package_set_from_installed, +) +from pip._internal.utils.misc import write_output + +logger = logging.getLogger(__name__) + + +class CheckCommand(Command): + """Verify installed packages have compatible dependencies.""" + + usage = """ + %prog [options]""" + + def run(self, options, args): + package_set, parsing_probs = create_package_set_from_installed() + missing, conflicting = check_package_set(package_set) + + for project_name in missing: + version = package_set[project_name].version + for dependency in missing[project_name]: + write_output( + "%s %s requires %s, which is not installed.", + project_name, version, dependency[0], + ) + + for project_name in conflicting: + version = package_set[project_name].version + for dep_name, dep_version, req in conflicting[project_name]: + write_output( + "%s %s has requirement %s, but you have %s %s.", + project_name, version, req, dep_name, dep_version, + ) + + if missing or conflicting or parsing_probs: + return 1 + else: + write_output("No broken requirements found.") diff --git a/my_env/Lib/site-packages/pip/_internal/commands/completion.py b/my_env/Lib/site-packages/pip/_internal/commands/completion.py new file mode 100644 index 000000000..c532806e3 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/completion.py @@ -0,0 +1,96 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import sys +import textwrap + +from pip._internal.cli.base_command import Command +from pip._internal.utils.misc import get_prog + +BASE_COMPLETION = """ +# pip %(shell)s completion start%(script)s# pip %(shell)s completion end +""" + +COMPLETION_SCRIPTS = { + 'bash': """ + _pip_completion() + { + COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \\ + COMP_CWORD=$COMP_CWORD \\ + PIP_AUTO_COMPLETE=1 $1 2>/dev/null ) ) + } + complete -o default -F _pip_completion %(prog)s + """, + 'zsh': """ + function _pip_completion { + local words cword + read -Ac words + read -cn cword + reply=( $( COMP_WORDS="$words[*]" \\ + COMP_CWORD=$(( cword-1 )) \\ + PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null )) + } + compctl -K _pip_completion %(prog)s + """, + 'fish': """ + function __fish_complete_pip + set -lx COMP_WORDS (commandline -o) "" + set -lx COMP_CWORD ( \\ + math (contains -i -- (commandline -t) $COMP_WORDS)-1 \\ + ) + set -lx PIP_AUTO_COMPLETE 1 + string split \\ -- (eval $COMP_WORDS[1]) + end + complete -fa "(__fish_complete_pip)" -c %(prog)s + """, +} + + +class CompletionCommand(Command): + """A helper command to be used for command completion.""" + + ignore_require_venv = True + + def __init__(self, *args, **kw): + super(CompletionCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '--bash', '-b', + action='store_const', + const='bash', + dest='shell', + help='Emit completion code for bash') + cmd_opts.add_option( + '--zsh', '-z', + action='store_const', + const='zsh', + dest='shell', + help='Emit completion code for zsh') + cmd_opts.add_option( + '--fish', '-f', + action='store_const', + const='fish', + dest='shell', + help='Emit completion code for fish') + + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + """Prints the completion code of the given shell""" + shells = COMPLETION_SCRIPTS.keys() + shell_options = ['--' + shell for shell in sorted(shells)] + if options.shell in shells: + script = textwrap.dedent( + COMPLETION_SCRIPTS.get(options.shell, '') % { + 'prog': get_prog(), + } + ) + print(BASE_COMPLETION % {'script': script, 'shell': options.shell}) + else: + sys.stderr.write( + 'ERROR: You must pass %s\n' % ' or '.join(shell_options) + ) diff --git a/my_env/Lib/site-packages/pip/_internal/commands/configuration.py b/my_env/Lib/site-packages/pip/_internal/commands/configuration.py new file mode 100644 index 000000000..efcf5bb36 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/configuration.py @@ -0,0 +1,233 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import logging +import os +import subprocess + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.configuration import ( + Configuration, + get_configuration_files, + kinds, +) +from pip._internal.exceptions import PipError +from pip._internal.utils.misc import get_prog, write_output + +logger = logging.getLogger(__name__) + + +class ConfigurationCommand(Command): + """Manage local and global configuration. + + Subcommands: + + list: List the active configuration (or from the file specified) + edit: Edit the configuration file in an editor + get: Get the value associated with name + set: Set the name=value + unset: Unset the value associated with name + + If none of --user, --global and --site are passed, a virtual + environment configuration file is used if one is active and the file + exists. Otherwise, all modifications happen on the to the user file by + default. + """ + + ignore_require_venv = True + usage = """ + %prog [] list + %prog [] [--editor ] edit + + %prog [] get name + %prog [] set name value + %prog [] unset name + """ + + def __init__(self, *args, **kwargs): + super(ConfigurationCommand, self).__init__(*args, **kwargs) + + self.configuration = None + + self.cmd_opts.add_option( + '--editor', + dest='editor', + action='store', + default=None, + help=( + 'Editor to use to edit the file. Uses VISUAL or EDITOR ' + 'environment variables if not provided.' + ) + ) + + self.cmd_opts.add_option( + '--global', + dest='global_file', + action='store_true', + default=False, + help='Use the system-wide configuration file only' + ) + + self.cmd_opts.add_option( + '--user', + dest='user_file', + action='store_true', + default=False, + help='Use the user configuration file only' + ) + + self.cmd_opts.add_option( + '--site', + dest='site_file', + action='store_true', + default=False, + help='Use the current environment configuration file only' + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + handlers = { + "list": self.list_values, + "edit": self.open_in_editor, + "get": self.get_name, + "set": self.set_name_value, + "unset": self.unset_name + } + + # Determine action + if not args or args[0] not in handlers: + logger.error("Need an action ({}) to perform.".format( + ", ".join(sorted(handlers))) + ) + return ERROR + + action = args[0] + + # Determine which configuration files are to be loaded + # Depends on whether the command is modifying. + try: + load_only = self._determine_file( + options, need_value=(action in ["get", "set", "unset", "edit"]) + ) + except PipError as e: + logger.error(e.args[0]) + return ERROR + + # Load a new configuration + self.configuration = Configuration( + isolated=options.isolated_mode, load_only=load_only + ) + self.configuration.load() + + # Error handling happens here, not in the action-handlers. + try: + handlers[action](options, args[1:]) + except PipError as e: + logger.error(e.args[0]) + return ERROR + + return SUCCESS + + def _determine_file(self, options, need_value): + file_options = [key for key, value in ( + (kinds.USER, options.user_file), + (kinds.GLOBAL, options.global_file), + (kinds.SITE, options.site_file), + ) if value] + + if not file_options: + if not need_value: + return None + # Default to user, unless there's a site file. + elif any( + os.path.exists(site_config_file) + for site_config_file in get_configuration_files()[kinds.SITE] + ): + return kinds.SITE + else: + return kinds.USER + elif len(file_options) == 1: + return file_options[0] + + raise PipError( + "Need exactly one file to operate upon " + "(--user, --site, --global) to perform." + ) + + def list_values(self, options, args): + self._get_n_args(args, "list", n=0) + + for key, value in sorted(self.configuration.items()): + write_output("%s=%r", key, value) + + def get_name(self, options, args): + key = self._get_n_args(args, "get [name]", n=1) + value = self.configuration.get_value(key) + + write_output("%s", value) + + def set_name_value(self, options, args): + key, value = self._get_n_args(args, "set [name] [value]", n=2) + self.configuration.set_value(key, value) + + self._save_configuration() + + def unset_name(self, options, args): + key = self._get_n_args(args, "unset [name]", n=1) + self.configuration.unset_value(key) + + self._save_configuration() + + def open_in_editor(self, options, args): + editor = self._determine_editor(options) + + fname = self.configuration.get_file_to_edit() + if fname is None: + raise PipError("Could not determine appropriate file.") + + try: + subprocess.check_call([editor, fname]) + except subprocess.CalledProcessError as e: + raise PipError( + "Editor Subprocess exited with exit code {}" + .format(e.returncode) + ) + + def _get_n_args(self, args, example, n): + """Helper to make sure the command got the right number of arguments + """ + if len(args) != n: + msg = ( + 'Got unexpected number of arguments, expected {}. ' + '(example: "{} config {}")' + ).format(n, get_prog(), example) + raise PipError(msg) + + if n == 1: + return args[0] + else: + return args + + def _save_configuration(self): + # We successfully ran a modifying command. Need to save the + # configuration. + try: + self.configuration.save() + except Exception: + logger.error( + "Unable to save configuration. Please report this as a bug.", + exc_info=1 + ) + raise PipError("Internal Error.") + + def _determine_editor(self, options): + if options.editor is not None: + return options.editor + elif "VISUAL" in os.environ: + return os.environ["VISUAL"] + elif "EDITOR" in os.environ: + return os.environ["EDITOR"] + else: + raise PipError("Could not determine editor to use.") diff --git a/my_env/Lib/site-packages/pip/_internal/commands/debug.py b/my_env/Lib/site-packages/pip/_internal/commands/debug.py new file mode 100644 index 000000000..5322c828b --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/debug.py @@ -0,0 +1,115 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import locale +import logging +import sys + +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.cli.cmdoptions import make_target_python +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import get_pip_version +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.wheel import format_tag + +if MYPY_CHECK_RUNNING: + from typing import Any, List + from optparse import Values + +logger = logging.getLogger(__name__) + + +def show_value(name, value): + # type: (str, str) -> None + logger.info('{}: {}'.format(name, value)) + + +def show_sys_implementation(): + # type: () -> None + logger.info('sys.implementation:') + if hasattr(sys, 'implementation'): + implementation = sys.implementation # type: ignore + implementation_name = implementation.name + else: + implementation_name = '' + + with indent_log(): + show_value('name', implementation_name) + + +def show_tags(options): + # type: (Values) -> None + tag_limit = 10 + + target_python = make_target_python(options) + tags = target_python.get_tags() + + # Display the target options that were explicitly provided. + formatted_target = target_python.format_given() + suffix = '' + if formatted_target: + suffix = ' (target: {})'.format(formatted_target) + + msg = 'Compatible tags: {}{}'.format(len(tags), suffix) + logger.info(msg) + + if options.verbose < 1 and len(tags) > tag_limit: + tags_limited = True + tags = tags[:tag_limit] + else: + tags_limited = False + + with indent_log(): + for tag in tags: + logger.info(format_tag(tag)) + + if tags_limited: + msg = ( + '...\n' + '[First {tag_limit} tags shown. Pass --verbose to show all.]' + ).format(tag_limit=tag_limit) + logger.info(msg) + + +class DebugCommand(Command): + """ + Display debug information. + """ + + usage = """ + %prog """ + ignore_require_venv = True + + def __init__(self, *args, **kw): + super(DebugCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + cmdoptions.add_target_python_options(cmd_opts) + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + # type: (Values, List[Any]) -> int + logger.warning( + "This command is only meant for debugging. " + "Do not use this with automation for parsing and getting these " + "details, since the output and options of this command may " + "change without notice." + ) + show_value('pip version', get_pip_version()) + show_value('sys.version', sys.version) + show_value('sys.executable', sys.executable) + show_value('sys.getdefaultencoding', sys.getdefaultencoding()) + show_value('sys.getfilesystemencoding', sys.getfilesystemencoding()) + show_value( + 'locale.getpreferredencoding', locale.getpreferredencoding(), + ) + show_value('sys.platform', sys.platform) + show_sys_implementation() + + show_tags(options) + + return SUCCESS diff --git a/my_env/Lib/site-packages/pip/_internal/commands/download.py b/my_env/Lib/site-packages/pip/_internal/commands/download.py new file mode 100644 index 000000000..a63019fbf --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/download.py @@ -0,0 +1,156 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import logging +import os + +from pip._internal.cli import cmdoptions +from pip._internal.cli.cmdoptions import make_target_python +from pip._internal.cli.req_command import RequirementCommand +from pip._internal.req import RequirementSet +from pip._internal.req.req_tracker import RequirementTracker +from pip._internal.utils.filesystem import check_path_owner +from pip._internal.utils.misc import ensure_dir, normalize_path, write_output +from pip._internal.utils.temp_dir import TempDirectory + +logger = logging.getLogger(__name__) + + +class DownloadCommand(RequirementCommand): + """ + Download packages from: + + - PyPI (and other indexes) using requirement specifiers. + - VCS project urls. + - Local project directories. + - Local or remote source archives. + + pip also supports downloading from "requirements files", which provide + an easy way to specify a whole environment to be downloaded. + """ + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] ... + %prog [options] ... + %prog [options] ...""" + + def __init__(self, *args, **kw): + super(DownloadCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option(cmdoptions.constraints()) + cmd_opts.add_option(cmdoptions.requirements()) + cmd_opts.add_option(cmdoptions.build_dir()) + cmd_opts.add_option(cmdoptions.no_deps()) + cmd_opts.add_option(cmdoptions.global_options()) + cmd_opts.add_option(cmdoptions.no_binary()) + cmd_opts.add_option(cmdoptions.only_binary()) + cmd_opts.add_option(cmdoptions.prefer_binary()) + cmd_opts.add_option(cmdoptions.src()) + cmd_opts.add_option(cmdoptions.pre()) + cmd_opts.add_option(cmdoptions.no_clean()) + cmd_opts.add_option(cmdoptions.require_hashes()) + cmd_opts.add_option(cmdoptions.progress_bar()) + cmd_opts.add_option(cmdoptions.no_build_isolation()) + cmd_opts.add_option(cmdoptions.use_pep517()) + cmd_opts.add_option(cmdoptions.no_use_pep517()) + + cmd_opts.add_option( + '-d', '--dest', '--destination-dir', '--destination-directory', + dest='download_dir', + metavar='dir', + default=os.curdir, + help=("Download packages into ."), + ) + + cmdoptions.add_target_python_options(cmd_opts) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + options.ignore_installed = True + # editable doesn't really make sense for `pip download`, but the bowels + # of the RequirementSet code require that property. + options.editables = [] + + cmdoptions.check_dist_restriction(options) + + options.src_dir = os.path.abspath(options.src_dir) + options.download_dir = normalize_path(options.download_dir) + + ensure_dir(options.download_dir) + + session = self.get_default_session(options) + + target_python = make_target_python(options) + finder = self._build_package_finder( + options=options, + session=session, + target_python=target_python, + ) + build_delete = (not (options.no_clean or options.build_dir)) + if options.cache_dir and not check_path_owner(options.cache_dir): + logger.warning( + "The directory '%s' or its parent directory is not owned " + "by the current user and caching wheels has been " + "disabled. check the permissions and owner of that " + "directory. If executing pip with sudo, you may want " + "sudo's -H flag.", + options.cache_dir, + ) + options.cache_dir = None + + with RequirementTracker() as req_tracker, TempDirectory( + options.build_dir, delete=build_delete, kind="download" + ) as directory: + + requirement_set = RequirementSet( + require_hashes=options.require_hashes, + ) + self.populate_requirement_set( + requirement_set, + args, + options, + finder, + session, + None + ) + + preparer = self.make_requirement_preparer( + temp_build_dir=directory, + options=options, + req_tracker=req_tracker, + download_dir=options.download_dir, + ) + + resolver = self.make_resolver( + preparer=preparer, + finder=finder, + session=session, + options=options, + py_version_info=options.python_version, + ) + resolver.resolve(requirement_set) + + downloaded = ' '.join([ + req.name for req in requirement_set.successfully_downloaded + ]) + if downloaded: + write_output('Successfully downloaded %s', downloaded) + + # Clean up + if not options.no_clean: + requirement_set.cleanup_files() + + return requirement_set diff --git a/my_env/Lib/site-packages/pip/_internal/commands/freeze.py b/my_env/Lib/site-packages/pip/_internal/commands/freeze.py new file mode 100644 index 000000000..c59eb3960 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/freeze.py @@ -0,0 +1,103 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import sys + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.models.format_control import FormatControl +from pip._internal.operations.freeze import freeze +from pip._internal.utils.compat import stdlib_pkgs + +DEV_PKGS = {'pip', 'setuptools', 'distribute', 'wheel'} + + +class FreezeCommand(Command): + """ + Output installed packages in requirements format. + + packages are listed in a case-insensitive sorted order. + """ + + usage = """ + %prog [options]""" + log_streams = ("ext://sys.stderr", "ext://sys.stderr") + + def __init__(self, *args, **kw): + super(FreezeCommand, self).__init__(*args, **kw) + + self.cmd_opts.add_option( + '-r', '--requirement', + dest='requirements', + action='append', + default=[], + metavar='file', + help="Use the order in the given requirements file and its " + "comments when generating output. This option can be " + "used multiple times.") + self.cmd_opts.add_option( + '-f', '--find-links', + dest='find_links', + action='append', + default=[], + metavar='URL', + help='URL for finding packages, which will be added to the ' + 'output.') + self.cmd_opts.add_option( + '-l', '--local', + dest='local', + action='store_true', + default=False, + help='If in a virtualenv that has global access, do not output ' + 'globally-installed packages.') + self.cmd_opts.add_option( + '--user', + dest='user', + action='store_true', + default=False, + help='Only output packages installed in user-site.') + self.cmd_opts.add_option(cmdoptions.list_path()) + self.cmd_opts.add_option( + '--all', + dest='freeze_all', + action='store_true', + help='Do not skip these packages in the output:' + ' %s' % ', '.join(DEV_PKGS)) + self.cmd_opts.add_option( + '--exclude-editable', + dest='exclude_editable', + action='store_true', + help='Exclude editable package from output.') + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + format_control = FormatControl(set(), set()) + wheel_cache = WheelCache(options.cache_dir, format_control) + skip = set(stdlib_pkgs) + if not options.freeze_all: + skip.update(DEV_PKGS) + + cmdoptions.check_list_path_option(options) + + freeze_kwargs = dict( + requirement=options.requirements, + find_links=options.find_links, + local_only=options.local, + user_only=options.user, + paths=options.path, + skip_regex=options.skip_requirements_regex, + isolated=options.isolated_mode, + wheel_cache=wheel_cache, + skip=skip, + exclude_editable=options.exclude_editable, + ) + + try: + for line in freeze(**freeze_kwargs): + sys.stdout.write(line + '\n') + finally: + wheel_cache.cleanup() diff --git a/my_env/Lib/site-packages/pip/_internal/commands/hash.py b/my_env/Lib/site-packages/pip/_internal/commands/hash.py new file mode 100644 index 000000000..1dc7fb0ea --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/hash.py @@ -0,0 +1,58 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import hashlib +import logging +import sys + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR +from pip._internal.utils.hashes import FAVORITE_HASH, STRONG_HASHES +from pip._internal.utils.misc import read_chunks, write_output + +logger = logging.getLogger(__name__) + + +class HashCommand(Command): + """ + Compute a hash of a local package archive. + + These can be used with --hash in a requirements file to do repeatable + installs. + """ + + usage = '%prog [options] ...' + ignore_require_venv = True + + def __init__(self, *args, **kw): + super(HashCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-a', '--algorithm', + dest='algorithm', + choices=STRONG_HASHES, + action='store', + default=FAVORITE_HASH, + help='The hash algorithm to use: one of %s' % + ', '.join(STRONG_HASHES)) + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + if not args: + self.parser.print_usage(sys.stderr) + return ERROR + + algorithm = options.algorithm + for path in args: + write_output('%s:\n--hash=%s:%s', + path, algorithm, _hash_of_file(path, algorithm)) + + +def _hash_of_file(path, algorithm): + """Return the hash digest of a file.""" + with open(path, 'rb') as archive: + hash = hashlib.new(algorithm) + for chunk in read_chunks(archive): + hash.update(chunk) + return hash.hexdigest() diff --git a/my_env/Lib/site-packages/pip/_internal/commands/help.py b/my_env/Lib/site-packages/pip/_internal/commands/help.py new file mode 100644 index 000000000..75af999b4 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/help.py @@ -0,0 +1,41 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.exceptions import CommandError + + +class HelpCommand(Command): + """Show help for commands""" + + usage = """ + %prog """ + ignore_require_venv = True + + def run(self, options, args): + from pip._internal.commands import ( + commands_dict, create_command, get_similar_commands, + ) + + try: + # 'pip help' with no args is handled by pip.__init__.parseopt() + cmd_name = args[0] # the command we need help for + except IndexError: + return SUCCESS + + if cmd_name not in commands_dict: + guess = get_similar_commands(cmd_name) + + msg = ['unknown command "%s"' % cmd_name] + if guess: + msg.append('maybe you meant "%s"' % guess) + + raise CommandError(' - '.join(msg)) + + command = create_command(cmd_name) + command.parser.print_help() + + return SUCCESS diff --git a/my_env/Lib/site-packages/pip/_internal/commands/install.py b/my_env/Lib/site-packages/pip/_internal/commands/install.py new file mode 100644 index 000000000..5842d18da --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/install.py @@ -0,0 +1,631 @@ +# The following comment should be removed at some point in the future. +# It's included for now because without it InstallCommand.run() has a +# couple errors where we have to know req.name is str rather than +# Optional[str] for the InstallRequirement req. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import errno +import logging +import operator +import os +import shutil +from optparse import SUPPRESS_HELP + +from pip._vendor import pkg_resources +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.cmdoptions import make_target_python +from pip._internal.cli.req_command import RequirementCommand +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.exceptions import ( + CommandError, + InstallationError, + PreviousBuildDirError, +) +from pip._internal.locations import distutils_scheme +from pip._internal.operations.check import check_install_conflicts +from pip._internal.req import RequirementSet, install_given_reqs +from pip._internal.req.req_tracker import RequirementTracker +from pip._internal.utils.filesystem import check_path_owner +from pip._internal.utils.misc import ( + ensure_dir, + get_installed_version, + protect_pip_from_modification_on_windows, + write_output, +) +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.virtualenv import virtualenv_no_global +from pip._internal.wheel import WheelBuilder + +if MYPY_CHECK_RUNNING: + from optparse import Values + from typing import Any, List, Optional + + from pip._internal.models.format_control import FormatControl + from pip._internal.req.req_install import InstallRequirement + from pip._internal.wheel import BinaryAllowedPredicate + + +logger = logging.getLogger(__name__) + + +def is_wheel_installed(): + """ + Return whether the wheel package is installed. + """ + try: + import wheel # noqa: F401 + except ImportError: + return False + + return True + + +def build_wheels( + builder, # type: WheelBuilder + pep517_requirements, # type: List[InstallRequirement] + legacy_requirements, # type: List[InstallRequirement] +): + # type: (...) -> List[InstallRequirement] + """ + Build wheels for requirements, depending on whether wheel is installed. + """ + # We don't build wheels for legacy requirements if wheel is not installed. + should_build_legacy = is_wheel_installed() + + # Always build PEP 517 requirements + build_failures = builder.build( + pep517_requirements, + should_unpack=True, + ) + + if should_build_legacy: + # We don't care about failures building legacy + # requirements, as we'll fall through to a direct + # install for those. + builder.build( + legacy_requirements, + should_unpack=True, + ) + + return build_failures + + +def get_check_binary_allowed(format_control): + # type: (FormatControl) -> BinaryAllowedPredicate + def check_binary_allowed(req): + # type: (InstallRequirement) -> bool + if req.use_pep517: + return True + canonical_name = canonicalize_name(req.name) + allowed_formats = format_control.get_allowed_formats(canonical_name) + return "binary" in allowed_formats + + return check_binary_allowed + + +class InstallCommand(RequirementCommand): + """ + Install packages from: + + - PyPI (and other indexes) using requirement specifiers. + - VCS project urls. + - Local project directories. + - Local or remote source archives. + + pip also supports installing from "requirements files", which provide + an easy way to specify a whole environment to be installed. + """ + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + def __init__(self, *args, **kw): + super(InstallCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option(cmdoptions.requirements()) + cmd_opts.add_option(cmdoptions.constraints()) + cmd_opts.add_option(cmdoptions.no_deps()) + cmd_opts.add_option(cmdoptions.pre()) + + cmd_opts.add_option(cmdoptions.editable()) + cmd_opts.add_option( + '-t', '--target', + dest='target_dir', + metavar='dir', + default=None, + help='Install packages into . ' + 'By default this will not replace existing files/folders in ' + '. Use --upgrade to replace existing packages in ' + 'with new versions.' + ) + cmdoptions.add_target_python_options(cmd_opts) + + cmd_opts.add_option( + '--user', + dest='use_user_site', + action='store_true', + help="Install to the Python user install directory for your " + "platform. Typically ~/.local/, or %APPDATA%\\Python on " + "Windows. (See the Python documentation for site.USER_BASE " + "for full details.)") + cmd_opts.add_option( + '--no-user', + dest='use_user_site', + action='store_false', + help=SUPPRESS_HELP) + cmd_opts.add_option( + '--root', + dest='root_path', + metavar='dir', + default=None, + help="Install everything relative to this alternate root " + "directory.") + cmd_opts.add_option( + '--prefix', + dest='prefix_path', + metavar='dir', + default=None, + help="Installation prefix where lib, bin and other top-level " + "folders are placed") + + cmd_opts.add_option(cmdoptions.build_dir()) + + cmd_opts.add_option(cmdoptions.src()) + + cmd_opts.add_option( + '-U', '--upgrade', + dest='upgrade', + action='store_true', + help='Upgrade all specified packages to the newest available ' + 'version. The handling of dependencies depends on the ' + 'upgrade-strategy used.' + ) + + cmd_opts.add_option( + '--upgrade-strategy', + dest='upgrade_strategy', + default='only-if-needed', + choices=['only-if-needed', 'eager'], + help='Determines how dependency upgrading should be handled ' + '[default: %default]. ' + '"eager" - dependencies are upgraded regardless of ' + 'whether the currently installed version satisfies the ' + 'requirements of the upgraded package(s). ' + '"only-if-needed" - are upgraded only when they do not ' + 'satisfy the requirements of the upgraded package(s).' + ) + + cmd_opts.add_option( + '--force-reinstall', + dest='force_reinstall', + action='store_true', + help='Reinstall all packages even if they are already ' + 'up-to-date.') + + cmd_opts.add_option( + '-I', '--ignore-installed', + dest='ignore_installed', + action='store_true', + help='Ignore the installed packages, overwriting them. ' + 'This can break your system if the existing package ' + 'is of a different version or was installed ' + 'with a different package manager!' + ) + + cmd_opts.add_option(cmdoptions.ignore_requires_python()) + cmd_opts.add_option(cmdoptions.no_build_isolation()) + cmd_opts.add_option(cmdoptions.use_pep517()) + cmd_opts.add_option(cmdoptions.no_use_pep517()) + + cmd_opts.add_option(cmdoptions.install_options()) + cmd_opts.add_option(cmdoptions.global_options()) + + cmd_opts.add_option( + "--compile", + action="store_true", + dest="compile", + default=True, + help="Compile Python source files to bytecode", + ) + + cmd_opts.add_option( + "--no-compile", + action="store_false", + dest="compile", + help="Do not compile Python source files to bytecode", + ) + + cmd_opts.add_option( + "--no-warn-script-location", + action="store_false", + dest="warn_script_location", + default=True, + help="Do not warn when installing scripts outside PATH", + ) + cmd_opts.add_option( + "--no-warn-conflicts", + action="store_false", + dest="warn_about_conflicts", + default=True, + help="Do not warn about broken dependencies", + ) + + cmd_opts.add_option(cmdoptions.no_binary()) + cmd_opts.add_option(cmdoptions.only_binary()) + cmd_opts.add_option(cmdoptions.prefer_binary()) + cmd_opts.add_option(cmdoptions.no_clean()) + cmd_opts.add_option(cmdoptions.require_hashes()) + cmd_opts.add_option(cmdoptions.progress_bar()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + # type: (Values, List[Any]) -> int + cmdoptions.check_install_build_global(options) + upgrade_strategy = "to-satisfy-only" + if options.upgrade: + upgrade_strategy = options.upgrade_strategy + + if options.build_dir: + options.build_dir = os.path.abspath(options.build_dir) + + cmdoptions.check_dist_restriction(options, check_target=True) + + options.src_dir = os.path.abspath(options.src_dir) + install_options = options.install_options or [] + if options.use_user_site: + if options.prefix_path: + raise CommandError( + "Can not combine '--user' and '--prefix' as they imply " + "different installation locations" + ) + if virtualenv_no_global(): + raise InstallationError( + "Can not perform a '--user' install. User site-packages " + "are not visible in this virtualenv." + ) + install_options.append('--user') + install_options.append('--prefix=') + + target_temp_dir = None # type: Optional[TempDirectory] + target_temp_dir_path = None # type: Optional[str] + if options.target_dir: + options.ignore_installed = True + options.target_dir = os.path.abspath(options.target_dir) + if (os.path.exists(options.target_dir) and not + os.path.isdir(options.target_dir)): + raise CommandError( + "Target path exists but is not a directory, will not " + "continue." + ) + + # Create a target directory for using with the target option + target_temp_dir = TempDirectory(kind="target") + target_temp_dir_path = target_temp_dir.path + install_options.append('--home=' + target_temp_dir_path) + + global_options = options.global_options or [] + + session = self.get_default_session(options) + + target_python = make_target_python(options) + finder = self._build_package_finder( + options=options, + session=session, + target_python=target_python, + ignore_requires_python=options.ignore_requires_python, + ) + build_delete = (not (options.no_clean or options.build_dir)) + wheel_cache = WheelCache(options.cache_dir, options.format_control) + + if options.cache_dir and not check_path_owner(options.cache_dir): + logger.warning( + "The directory '%s' or its parent directory is not owned " + "by the current user and caching wheels has been " + "disabled. check the permissions and owner of that " + "directory. If executing pip with sudo, you may want " + "sudo's -H flag.", + options.cache_dir, + ) + options.cache_dir = None + + with RequirementTracker() as req_tracker, TempDirectory( + options.build_dir, delete=build_delete, kind="install" + ) as directory: + requirement_set = RequirementSet( + require_hashes=options.require_hashes, + check_supported_wheels=not options.target_dir, + ) + + try: + self.populate_requirement_set( + requirement_set, args, options, finder, session, + wheel_cache + ) + preparer = self.make_requirement_preparer( + temp_build_dir=directory, + options=options, + req_tracker=req_tracker, + ) + resolver = self.make_resolver( + preparer=preparer, + finder=finder, + session=session, + options=options, + wheel_cache=wheel_cache, + use_user_site=options.use_user_site, + ignore_installed=options.ignore_installed, + ignore_requires_python=options.ignore_requires_python, + force_reinstall=options.force_reinstall, + upgrade_strategy=upgrade_strategy, + use_pep517=options.use_pep517, + ) + resolver.resolve(requirement_set) + + try: + pip_req = requirement_set.get_requirement("pip") + except KeyError: + modifying_pip = None + else: + # If we're not replacing an already installed pip, + # we're not modifying it. + modifying_pip = pip_req.satisfied_by is None + protect_pip_from_modification_on_windows( + modifying_pip=modifying_pip + ) + + check_binary_allowed = get_check_binary_allowed( + finder.format_control + ) + # Consider legacy and PEP517-using requirements separately + legacy_requirements = [] + pep517_requirements = [] + for req in requirement_set.requirements.values(): + if req.use_pep517: + pep517_requirements.append(req) + else: + legacy_requirements.append(req) + + wheel_builder = WheelBuilder( + preparer, wheel_cache, + build_options=[], global_options=[], + check_binary_allowed=check_binary_allowed, + ) + + build_failures = build_wheels( + builder=wheel_builder, + pep517_requirements=pep517_requirements, + legacy_requirements=legacy_requirements, + ) + + # If we're using PEP 517, we cannot do a direct install + # so we fail here. + if build_failures: + raise InstallationError( + "Could not build wheels for {} which use" + " PEP 517 and cannot be installed directly".format( + ", ".join(r.name for r in build_failures))) + + to_install = resolver.get_installation_order( + requirement_set + ) + + # Consistency Checking of the package set we're installing. + should_warn_about_conflicts = ( + not options.ignore_dependencies and + options.warn_about_conflicts + ) + if should_warn_about_conflicts: + self._warn_about_conflicts(to_install) + + # Don't warn about script install locations if + # --target has been specified + warn_script_location = options.warn_script_location + if options.target_dir: + warn_script_location = False + + installed = install_given_reqs( + to_install, + install_options, + global_options, + root=options.root_path, + home=target_temp_dir_path, + prefix=options.prefix_path, + pycompile=options.compile, + warn_script_location=warn_script_location, + use_user_site=options.use_user_site, + ) + + lib_locations = get_lib_location_guesses( + user=options.use_user_site, + home=target_temp_dir_path, + root=options.root_path, + prefix=options.prefix_path, + isolated=options.isolated_mode, + ) + working_set = pkg_resources.WorkingSet(lib_locations) + + reqs = sorted(installed, key=operator.attrgetter('name')) + items = [] + for req in reqs: + item = req.name + try: + installed_version = get_installed_version( + req.name, working_set=working_set + ) + if installed_version: + item += '-' + installed_version + except Exception: + pass + items.append(item) + installed_desc = ' '.join(items) + if installed_desc: + write_output( + 'Successfully installed %s', installed_desc, + ) + except EnvironmentError as error: + show_traceback = (self.verbosity >= 1) + + message = create_env_error_message( + error, show_traceback, options.use_user_site, + ) + logger.error(message, exc_info=show_traceback) + + return ERROR + except PreviousBuildDirError: + options.no_clean = True + raise + finally: + # Clean up + if not options.no_clean: + requirement_set.cleanup_files() + wheel_cache.cleanup() + + if options.target_dir: + self._handle_target_dir( + options.target_dir, target_temp_dir, options.upgrade + ) + + return SUCCESS + + def _handle_target_dir(self, target_dir, target_temp_dir, upgrade): + ensure_dir(target_dir) + + # Checking both purelib and platlib directories for installed + # packages to be moved to target directory + lib_dir_list = [] + + with target_temp_dir: + # Checking both purelib and platlib directories for installed + # packages to be moved to target directory + scheme = distutils_scheme('', home=target_temp_dir.path) + purelib_dir = scheme['purelib'] + platlib_dir = scheme['platlib'] + data_dir = scheme['data'] + + if os.path.exists(purelib_dir): + lib_dir_list.append(purelib_dir) + if os.path.exists(platlib_dir) and platlib_dir != purelib_dir: + lib_dir_list.append(platlib_dir) + if os.path.exists(data_dir): + lib_dir_list.append(data_dir) + + for lib_dir in lib_dir_list: + for item in os.listdir(lib_dir): + if lib_dir == data_dir: + ddir = os.path.join(data_dir, item) + if any(s.startswith(ddir) for s in lib_dir_list[:-1]): + continue + target_item_dir = os.path.join(target_dir, item) + if os.path.exists(target_item_dir): + if not upgrade: + logger.warning( + 'Target directory %s already exists. Specify ' + '--upgrade to force replacement.', + target_item_dir + ) + continue + if os.path.islink(target_item_dir): + logger.warning( + 'Target directory %s already exists and is ' + 'a link. Pip will not automatically replace ' + 'links, please remove if replacement is ' + 'desired.', + target_item_dir + ) + continue + if os.path.isdir(target_item_dir): + shutil.rmtree(target_item_dir) + else: + os.remove(target_item_dir) + + shutil.move( + os.path.join(lib_dir, item), + target_item_dir + ) + + def _warn_about_conflicts(self, to_install): + try: + package_set, _dep_info = check_install_conflicts(to_install) + except Exception: + logger.error("Error checking for conflicts.", exc_info=True) + return + missing, conflicting = _dep_info + + # NOTE: There is some duplication here from pip check + for project_name in missing: + version = package_set[project_name][0] + for dependency in missing[project_name]: + logger.critical( + "%s %s requires %s, which is not installed.", + project_name, version, dependency[1], + ) + + for project_name in conflicting: + version = package_set[project_name][0] + for dep_name, dep_version, req in conflicting[project_name]: + logger.critical( + "%s %s has requirement %s, but you'll have %s %s which is " + "incompatible.", + project_name, version, req, dep_name, dep_version, + ) + + +def get_lib_location_guesses(*args, **kwargs): + scheme = distutils_scheme('', *args, **kwargs) + return [scheme['purelib'], scheme['platlib']] + + +def create_env_error_message(error, show_traceback, using_user_site): + """Format an error message for an EnvironmentError + + It may occur anytime during the execution of the install command. + """ + parts = [] + + # Mention the error if we are not going to show a traceback + parts.append("Could not install packages due to an EnvironmentError") + if not show_traceback: + parts.append(": ") + parts.append(str(error)) + else: + parts.append(".") + + # Spilt the error indication from a helper message (if any) + parts[-1] += "\n" + + # Suggest useful actions to the user: + # (1) using user site-packages or (2) verifying the permissions + if error.errno == errno.EACCES: + user_option_part = "Consider using the `--user` option" + permissions_part = "Check the permissions" + + if not using_user_site: + parts.extend([ + user_option_part, " or ", + permissions_part.lower(), + ]) + else: + parts.append(permissions_part) + parts.append(".\n") + + return "".join(parts).strip() + "\n" diff --git a/my_env/Lib/site-packages/pip/_internal/commands/list.py b/my_env/Lib/site-packages/pip/_internal/commands/list.py new file mode 100644 index 000000000..77a245b6d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/list.py @@ -0,0 +1,313 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import json +import logging + +from pip._vendor import six +from pip._vendor.six.moves import zip_longest + +from pip._internal.cli import cmdoptions +from pip._internal.cli.req_command import IndexGroupCommand +from pip._internal.exceptions import CommandError +from pip._internal.index import PackageFinder +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.self_outdated_check import make_link_collector +from pip._internal.utils.misc import ( + dist_is_editable, + get_installed_distributions, + write_output, +) +from pip._internal.utils.packaging import get_installer + +logger = logging.getLogger(__name__) + + +class ListCommand(IndexGroupCommand): + """ + List installed packages, including editables. + + Packages are listed in a case-insensitive sorted order. + """ + + usage = """ + %prog [options]""" + + def __init__(self, *args, **kw): + super(ListCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '-o', '--outdated', + action='store_true', + default=False, + help='List outdated packages') + cmd_opts.add_option( + '-u', '--uptodate', + action='store_true', + default=False, + help='List uptodate packages') + cmd_opts.add_option( + '-e', '--editable', + action='store_true', + default=False, + help='List editable projects.') + cmd_opts.add_option( + '-l', '--local', + action='store_true', + default=False, + help=('If in a virtualenv that has global access, do not list ' + 'globally-installed packages.'), + ) + self.cmd_opts.add_option( + '--user', + dest='user', + action='store_true', + default=False, + help='Only output packages installed in user-site.') + cmd_opts.add_option(cmdoptions.list_path()) + cmd_opts.add_option( + '--pre', + action='store_true', + default=False, + help=("Include pre-release and development versions. By default, " + "pip only finds stable versions."), + ) + + cmd_opts.add_option( + '--format', + action='store', + dest='list_format', + default="columns", + choices=('columns', 'freeze', 'json'), + help="Select the output format among: columns (default), freeze, " + "or json", + ) + + cmd_opts.add_option( + '--not-required', + action='store_true', + dest='not_required', + help="List packages that are not dependencies of " + "installed packages.", + ) + + cmd_opts.add_option( + '--exclude-editable', + action='store_false', + dest='include_editable', + help='Exclude editable package from output.', + ) + cmd_opts.add_option( + '--include-editable', + action='store_true', + dest='include_editable', + help='Include editable package from output.', + default=True, + ) + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, self.parser + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def _build_package_finder(self, options, session): + """ + Create a package finder appropriate to this list command. + """ + link_collector = make_link_collector(session, options=options) + + # Pass allow_yanked=False to ignore yanked versions. + selection_prefs = SelectionPreferences( + allow_yanked=False, + allow_all_prereleases=options.pre, + ) + + return PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + ) + + def run(self, options, args): + if options.outdated and options.uptodate: + raise CommandError( + "Options --outdated and --uptodate cannot be combined.") + + cmdoptions.check_list_path_option(options) + + packages = get_installed_distributions( + local_only=options.local, + user_only=options.user, + editables_only=options.editable, + include_editables=options.include_editable, + paths=options.path, + ) + + # get_not_required must be called firstly in order to find and + # filter out all dependencies correctly. Otherwise a package + # can't be identified as requirement because some parent packages + # could be filtered out before. + if options.not_required: + packages = self.get_not_required(packages, options) + + if options.outdated: + packages = self.get_outdated(packages, options) + elif options.uptodate: + packages = self.get_uptodate(packages, options) + + self.output_package_listing(packages, options) + + def get_outdated(self, packages, options): + return [ + dist for dist in self.iter_packages_latest_infos(packages, options) + if dist.latest_version > dist.parsed_version + ] + + def get_uptodate(self, packages, options): + return [ + dist for dist in self.iter_packages_latest_infos(packages, options) + if dist.latest_version == dist.parsed_version + ] + + def get_not_required(self, packages, options): + dep_keys = set() + for dist in packages: + dep_keys.update(requirement.key for requirement in dist.requires()) + return {pkg for pkg in packages if pkg.key not in dep_keys} + + def iter_packages_latest_infos(self, packages, options): + with self._build_session(options) as session: + finder = self._build_package_finder(options, session) + + for dist in packages: + typ = 'unknown' + all_candidates = finder.find_all_candidates(dist.key) + if not options.pre: + # Remove prereleases + all_candidates = [candidate for candidate in all_candidates + if not candidate.version.is_prerelease] + + evaluator = finder.make_candidate_evaluator( + project_name=dist.project_name, + ) + best_candidate = evaluator.sort_best_candidate(all_candidates) + if best_candidate is None: + continue + + remote_version = best_candidate.version + if best_candidate.link.is_wheel: + typ = 'wheel' + else: + typ = 'sdist' + # This is dirty but makes the rest of the code much cleaner + dist.latest_version = remote_version + dist.latest_filetype = typ + yield dist + + def output_package_listing(self, packages, options): + packages = sorted( + packages, + key=lambda dist: dist.project_name.lower(), + ) + if options.list_format == 'columns' and packages: + data, header = format_for_columns(packages, options) + self.output_package_listing_columns(data, header) + elif options.list_format == 'freeze': + for dist in packages: + if options.verbose >= 1: + write_output("%s==%s (%s)", dist.project_name, + dist.version, dist.location) + else: + write_output("%s==%s", dist.project_name, dist.version) + elif options.list_format == 'json': + write_output(format_for_json(packages, options)) + + def output_package_listing_columns(self, data, header): + # insert the header first: we need to know the size of column names + if len(data) > 0: + data.insert(0, header) + + pkg_strings, sizes = tabulate(data) + + # Create and add a separator. + if len(data) > 0: + pkg_strings.insert(1, " ".join(map(lambda x: '-' * x, sizes))) + + for val in pkg_strings: + write_output(val) + + +def tabulate(vals): + # From pfmoore on GitHub: + # https://github.com/pypa/pip/issues/3651#issuecomment-216932564 + assert len(vals) > 0 + + sizes = [0] * max(len(x) for x in vals) + for row in vals: + sizes = [max(s, len(str(c))) for s, c in zip_longest(sizes, row)] + + result = [] + for row in vals: + display = " ".join([str(c).ljust(s) if c is not None else '' + for s, c in zip_longest(sizes, row)]) + result.append(display) + + return result, sizes + + +def format_for_columns(pkgs, options): + """ + Convert the package data into something usable + by output_package_listing_columns. + """ + running_outdated = options.outdated + # Adjust the header for the `pip list --outdated` case. + if running_outdated: + header = ["Package", "Version", "Latest", "Type"] + else: + header = ["Package", "Version"] + + data = [] + if options.verbose >= 1 or any(dist_is_editable(x) for x in pkgs): + header.append("Location") + if options.verbose >= 1: + header.append("Installer") + + for proj in pkgs: + # if we're working on the 'outdated' list, separate out the + # latest_version and type + row = [proj.project_name, proj.version] + + if running_outdated: + row.append(proj.latest_version) + row.append(proj.latest_filetype) + + if options.verbose >= 1 or dist_is_editable(proj): + row.append(proj.location) + if options.verbose >= 1: + row.append(get_installer(proj)) + + data.append(row) + + return data, header + + +def format_for_json(packages, options): + data = [] + for dist in packages: + info = { + 'name': dist.project_name, + 'version': six.text_type(dist.version), + } + if options.verbose >= 1: + info['location'] = dist.location + info['installer'] = get_installer(dist) + if options.outdated: + info['latest_version'] = six.text_type(dist.latest_version) + info['latest_filetype'] = dist.latest_filetype + data.append(info) + return json.dumps(data) diff --git a/my_env/Lib/site-packages/pip/_internal/commands/search.py b/my_env/Lib/site-packages/pip/_internal/commands/search.py new file mode 100644 index 000000000..2e880eec2 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/search.py @@ -0,0 +1,145 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import logging +import sys +import textwrap +from collections import OrderedDict + +from pip._vendor import pkg_resources +from pip._vendor.packaging.version import parse as parse_version +# NOTE: XMLRPC Client is not annotated in typeshed as on 2017-07-17, which is +# why we ignore the type on this import +from pip._vendor.six.moves import xmlrpc_client # type: ignore + +from pip._internal.cli.base_command import Command +from pip._internal.cli.req_command import SessionCommandMixin +from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS +from pip._internal.exceptions import CommandError +from pip._internal.models.index import PyPI +from pip._internal.network.xmlrpc import PipXmlrpcTransport +from pip._internal.utils.compat import get_terminal_size +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import write_output + +logger = logging.getLogger(__name__) + + +class SearchCommand(Command, SessionCommandMixin): + """Search for PyPI packages whose name or summary contains .""" + + usage = """ + %prog [options] """ + ignore_require_venv = True + + def __init__(self, *args, **kw): + super(SearchCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-i', '--index', + dest='index', + metavar='URL', + default=PyPI.pypi_url, + help='Base URL of Python Package Index (default %default)') + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + if not args: + raise CommandError('Missing required argument (search query).') + query = args + pypi_hits = self.search(query, options) + hits = transform_hits(pypi_hits) + + terminal_width = None + if sys.stdout.isatty(): + terminal_width = get_terminal_size()[0] + + print_results(hits, terminal_width=terminal_width) + if pypi_hits: + return SUCCESS + return NO_MATCHES_FOUND + + def search(self, query, options): + index_url = options.index + + session = self.get_default_session(options) + + transport = PipXmlrpcTransport(index_url, session) + pypi = xmlrpc_client.ServerProxy(index_url, transport) + hits = pypi.search({'name': query, 'summary': query}, 'or') + return hits + + +def transform_hits(hits): + """ + The list from pypi is really a list of versions. We want a list of + packages with the list of versions stored inline. This converts the + list from pypi into one we can use. + """ + packages = OrderedDict() + for hit in hits: + name = hit['name'] + summary = hit['summary'] + version = hit['version'] + + if name not in packages.keys(): + packages[name] = { + 'name': name, + 'summary': summary, + 'versions': [version], + } + else: + packages[name]['versions'].append(version) + + # if this is the highest version, replace summary and score + if version == highest_version(packages[name]['versions']): + packages[name]['summary'] = summary + + return list(packages.values()) + + +def print_results(hits, name_column_width=None, terminal_width=None): + if not hits: + return + if name_column_width is None: + name_column_width = max([ + len(hit['name']) + len(highest_version(hit.get('versions', ['-']))) + for hit in hits + ]) + 4 + + installed_packages = [p.project_name for p in pkg_resources.working_set] + for hit in hits: + name = hit['name'] + summary = hit['summary'] or '' + latest = highest_version(hit.get('versions', ['-'])) + if terminal_width is not None: + target_width = terminal_width - name_column_width - 5 + if target_width > 10: + # wrap and indent summary to fit terminal + summary = textwrap.wrap(summary, target_width) + summary = ('\n' + ' ' * (name_column_width + 3)).join(summary) + + line = '%-*s - %s' % (name_column_width, + '%s (%s)' % (name, latest), summary) + try: + write_output(line) + if name in installed_packages: + dist = pkg_resources.get_distribution(name) + with indent_log(): + if dist.version == latest: + write_output('INSTALLED: %s (latest)', dist.version) + else: + write_output('INSTALLED: %s', dist.version) + if parse_version(latest).pre: + write_output('LATEST: %s (pre-release; install' + ' with "pip install --pre")', latest) + else: + write_output('LATEST: %s', latest) + except UnicodeEncodeError: + pass + + +def highest_version(versions): + return max(versions, key=parse_version) diff --git a/my_env/Lib/site-packages/pip/_internal/commands/show.py b/my_env/Lib/site-packages/pip/_internal/commands/show.py new file mode 100644 index 000000000..a46b08eeb --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/show.py @@ -0,0 +1,180 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import logging +import os +from email.parser import FeedParser + +from pip._vendor import pkg_resources +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.utils.misc import write_output + +logger = logging.getLogger(__name__) + + +class ShowCommand(Command): + """ + Show information about one or more installed packages. + + The output is in RFC-compliant mail header format. + """ + + usage = """ + %prog [options] ...""" + ignore_require_venv = True + + def __init__(self, *args, **kw): + super(ShowCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-f', '--files', + dest='files', + action='store_true', + default=False, + help='Show the full list of installed files for each package.') + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + if not args: + logger.warning('ERROR: Please provide a package name or names.') + return ERROR + query = args + + results = search_packages_info(query) + if not print_results( + results, list_files=options.files, verbose=options.verbose): + return ERROR + return SUCCESS + + +def search_packages_info(query): + """ + Gather details from installed distributions. Print distribution name, + version, location, and installed files. Installed files requires a + pip generated 'installed-files.txt' in the distributions '.egg-info' + directory. + """ + installed = {} + for p in pkg_resources.working_set: + installed[canonicalize_name(p.project_name)] = p + + query_names = [canonicalize_name(name) for name in query] + missing = sorted( + [name for name, pkg in zip(query, query_names) if pkg not in installed] + ) + if missing: + logger.warning('Package(s) not found: %s', ', '.join(missing)) + + def get_requiring_packages(package_name): + canonical_name = canonicalize_name(package_name) + return [ + pkg.project_name for pkg in pkg_resources.working_set + if canonical_name in + [canonicalize_name(required.name) for required in + pkg.requires()] + ] + + for dist in [installed[pkg] for pkg in query_names if pkg in installed]: + package = { + 'name': dist.project_name, + 'version': dist.version, + 'location': dist.location, + 'requires': [dep.project_name for dep in dist.requires()], + 'required_by': get_requiring_packages(dist.project_name) + } + file_list = None + metadata = None + if isinstance(dist, pkg_resources.DistInfoDistribution): + # RECORDs should be part of .dist-info metadatas + if dist.has_metadata('RECORD'): + lines = dist.get_metadata_lines('RECORD') + paths = [l.split(',')[0] for l in lines] + paths = [os.path.join(dist.location, p) for p in paths] + file_list = [os.path.relpath(p, dist.location) for p in paths] + + if dist.has_metadata('METADATA'): + metadata = dist.get_metadata('METADATA') + else: + # Otherwise use pip's log for .egg-info's + if dist.has_metadata('installed-files.txt'): + paths = dist.get_metadata_lines('installed-files.txt') + paths = [os.path.join(dist.egg_info, p) for p in paths] + file_list = [os.path.relpath(p, dist.location) for p in paths] + + if dist.has_metadata('PKG-INFO'): + metadata = dist.get_metadata('PKG-INFO') + + if dist.has_metadata('entry_points.txt'): + entry_points = dist.get_metadata_lines('entry_points.txt') + package['entry_points'] = entry_points + + if dist.has_metadata('INSTALLER'): + for line in dist.get_metadata_lines('INSTALLER'): + if line.strip(): + package['installer'] = line.strip() + break + + # @todo: Should pkg_resources.Distribution have a + # `get_pkg_info` method? + feed_parser = FeedParser() + feed_parser.feed(metadata) + pkg_info_dict = feed_parser.close() + for key in ('metadata-version', 'summary', + 'home-page', 'author', 'author-email', 'license'): + package[key] = pkg_info_dict.get(key) + + # It looks like FeedParser cannot deal with repeated headers + classifiers = [] + for line in metadata.splitlines(): + if line.startswith('Classifier: '): + classifiers.append(line[len('Classifier: '):]) + package['classifiers'] = classifiers + + if file_list: + package['files'] = sorted(file_list) + yield package + + +def print_results(distributions, list_files=False, verbose=False): + """ + Print the informations from installed distributions found. + """ + results_printed = False + for i, dist in enumerate(distributions): + results_printed = True + if i > 0: + write_output("---") + + write_output("Name: %s", dist.get('name', '')) + write_output("Version: %s", dist.get('version', '')) + write_output("Summary: %s", dist.get('summary', '')) + write_output("Home-page: %s", dist.get('home-page', '')) + write_output("Author: %s", dist.get('author', '')) + write_output("Author-email: %s", dist.get('author-email', '')) + write_output("License: %s", dist.get('license', '')) + write_output("Location: %s", dist.get('location', '')) + write_output("Requires: %s", ', '.join(dist.get('requires', []))) + write_output("Required-by: %s", ', '.join(dist.get('required_by', []))) + + if verbose: + write_output("Metadata-Version: %s", + dist.get('metadata-version', '')) + write_output("Installer: %s", dist.get('installer', '')) + write_output("Classifiers:") + for classifier in dist.get('classifiers', []): + write_output(" %s", classifier) + write_output("Entry-points:") + for entry in dist.get('entry_points', []): + write_output(" %s", entry.strip()) + if list_files: + write_output("Files:") + for line in dist.get('files', []): + write_output(" %s", line.strip()) + if "files" not in dist: + write_output("Cannot locate installed-files.txt") + return results_printed diff --git a/my_env/Lib/site-packages/pip/_internal/commands/uninstall.py b/my_env/Lib/site-packages/pip/_internal/commands/uninstall.py new file mode 100644 index 000000000..1bde414a6 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/uninstall.py @@ -0,0 +1,82 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli.base_command import Command +from pip._internal.cli.req_command import SessionCommandMixin +from pip._internal.exceptions import InstallationError +from pip._internal.req import parse_requirements +from pip._internal.req.constructors import install_req_from_line +from pip._internal.utils.misc import protect_pip_from_modification_on_windows + + +class UninstallCommand(Command, SessionCommandMixin): + """ + Uninstall packages. + + pip is able to uninstall most installed packages. Known exceptions are: + + - Pure distutils packages installed with ``python setup.py install``, which + leave behind no metadata to determine what files were installed. + - Script wrappers installed by ``python setup.py develop``. + """ + + usage = """ + %prog [options] ... + %prog [options] -r ...""" + + def __init__(self, *args, **kw): + super(UninstallCommand, self).__init__(*args, **kw) + self.cmd_opts.add_option( + '-r', '--requirement', + dest='requirements', + action='append', + default=[], + metavar='file', + help='Uninstall all the packages listed in the given requirements ' + 'file. This option can be used multiple times.', + ) + self.cmd_opts.add_option( + '-y', '--yes', + dest='yes', + action='store_true', + help="Don't ask for confirmation of uninstall deletions.") + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + session = self.get_default_session(options) + + reqs_to_uninstall = {} + for name in args: + req = install_req_from_line( + name, isolated=options.isolated_mode, + ) + if req.name: + reqs_to_uninstall[canonicalize_name(req.name)] = req + for filename in options.requirements: + for req in parse_requirements( + filename, + options=options, + session=session): + if req.name: + reqs_to_uninstall[canonicalize_name(req.name)] = req + if not reqs_to_uninstall: + raise InstallationError( + 'You must give at least one requirement to %(name)s (see ' + '"pip help %(name)s")' % dict(name=self.name) + ) + + protect_pip_from_modification_on_windows( + modifying_pip="pip" in reqs_to_uninstall + ) + + for req in reqs_to_uninstall.values(): + uninstall_pathset = req.uninstall( + auto_confirm=options.yes, verbose=self.verbosity > 0, + ) + if uninstall_pathset: + uninstall_pathset.commit() diff --git a/my_env/Lib/site-packages/pip/_internal/commands/wheel.py b/my_env/Lib/site-packages/pip/_internal/commands/wheel.py new file mode 100644 index 000000000..7230470b7 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/commands/wheel.py @@ -0,0 +1,180 @@ +# -*- coding: utf-8 -*- + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import logging +import os + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.req_command import RequirementCommand +from pip._internal.exceptions import CommandError, PreviousBuildDirError +from pip._internal.req import RequirementSet +from pip._internal.req.req_tracker import RequirementTracker +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.wheel import WheelBuilder + +if MYPY_CHECK_RUNNING: + from optparse import Values + from typing import Any, List + + +logger = logging.getLogger(__name__) + + +class WheelCommand(RequirementCommand): + """ + Build Wheel archives for your requirements and dependencies. + + Wheel is a built-package format, and offers the advantage of not + recompiling your software during every install. For more details, see the + wheel docs: https://wheel.readthedocs.io/en/latest/ + + Requirements: setuptools>=0.8, and wheel. + + 'pip wheel' uses the bdist_wheel setuptools extension from the wheel + package to build individual wheels. + + """ + + usage = """ + %prog [options] ... + %prog [options] -r ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + def __init__(self, *args, **kw): + super(WheelCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '-w', '--wheel-dir', + dest='wheel_dir', + metavar='dir', + default=os.curdir, + help=("Build wheels into , where the default is the " + "current working directory."), + ) + cmd_opts.add_option(cmdoptions.no_binary()) + cmd_opts.add_option(cmdoptions.only_binary()) + cmd_opts.add_option(cmdoptions.prefer_binary()) + cmd_opts.add_option( + '--build-option', + dest='build_options', + metavar='options', + action='append', + help="Extra arguments to be supplied to 'setup.py bdist_wheel'.", + ) + cmd_opts.add_option(cmdoptions.no_build_isolation()) + cmd_opts.add_option(cmdoptions.use_pep517()) + cmd_opts.add_option(cmdoptions.no_use_pep517()) + cmd_opts.add_option(cmdoptions.constraints()) + cmd_opts.add_option(cmdoptions.editable()) + cmd_opts.add_option(cmdoptions.requirements()) + cmd_opts.add_option(cmdoptions.src()) + cmd_opts.add_option(cmdoptions.ignore_requires_python()) + cmd_opts.add_option(cmdoptions.no_deps()) + cmd_opts.add_option(cmdoptions.build_dir()) + cmd_opts.add_option(cmdoptions.progress_bar()) + + cmd_opts.add_option( + '--global-option', + dest='global_options', + action='append', + metavar='options', + help="Extra global options to be supplied to the setup.py " + "call before the 'bdist_wheel' command.") + + cmd_opts.add_option( + '--pre', + action='store_true', + default=False, + help=("Include pre-release and development versions. By default, " + "pip only finds stable versions."), + ) + + cmd_opts.add_option(cmdoptions.no_clean()) + cmd_opts.add_option(cmdoptions.require_hashes()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + # type: (Values, List[Any]) -> None + cmdoptions.check_install_build_global(options) + + if options.build_dir: + options.build_dir = os.path.abspath(options.build_dir) + + options.src_dir = os.path.abspath(options.src_dir) + + session = self.get_default_session(options) + + finder = self._build_package_finder(options, session) + build_delete = (not (options.no_clean or options.build_dir)) + wheel_cache = WheelCache(options.cache_dir, options.format_control) + + with RequirementTracker() as req_tracker, TempDirectory( + options.build_dir, delete=build_delete, kind="wheel" + ) as directory: + + requirement_set = RequirementSet( + require_hashes=options.require_hashes, + ) + + try: + self.populate_requirement_set( + requirement_set, args, options, finder, session, + wheel_cache + ) + + preparer = self.make_requirement_preparer( + temp_build_dir=directory, + options=options, + req_tracker=req_tracker, + wheel_download_dir=options.wheel_dir, + ) + + resolver = self.make_resolver( + preparer=preparer, + finder=finder, + session=session, + options=options, + wheel_cache=wheel_cache, + ignore_requires_python=options.ignore_requires_python, + use_pep517=options.use_pep517, + ) + resolver.resolve(requirement_set) + + # build wheels + wb = WheelBuilder( + preparer, wheel_cache, + build_options=options.build_options or [], + global_options=options.global_options or [], + no_clean=options.no_clean, + ) + build_failures = wb.build( + requirement_set.requirements.values(), + ) + if len(build_failures) != 0: + raise CommandError( + "Failed to build one or more wheels" + ) + except PreviousBuildDirError: + options.no_clean = True + raise + finally: + if not options.no_clean: + requirement_set.cleanup_files() + wheel_cache.cleanup() diff --git a/my_env/Lib/site-packages/pip/_internal/configuration.py b/my_env/Lib/site-packages/pip/_internal/configuration.py new file mode 100644 index 000000000..858c66029 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/configuration.py @@ -0,0 +1,422 @@ +"""Configuration management setup + +Some terminology: +- name + As written in config files. +- value + Value associated with a name +- key + Name combined with it's section (section.name) +- variant + A single word describing where the configuration key-value pair came from +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +import locale +import logging +import os +import sys + +from pip._vendor.six.moves import configparser + +from pip._internal.exceptions import ( + ConfigurationError, + ConfigurationFileCouldNotBeLoaded, +) +from pip._internal.utils import appdirs +from pip._internal.utils.compat import WINDOWS, expanduser +from pip._internal.utils.misc import ensure_dir, enum +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, Dict, Iterable, List, NewType, Optional, Tuple + ) + + RawConfigParser = configparser.RawConfigParser # Shorthand + Kind = NewType("Kind", str) + +logger = logging.getLogger(__name__) + + +# NOTE: Maybe use the optionx attribute to normalize keynames. +def _normalize_name(name): + # type: (str) -> str + """Make a name consistent regardless of source (environment or file) + """ + name = name.lower().replace('_', '-') + if name.startswith('--'): + name = name[2:] # only prefer long opts + return name + + +def _disassemble_key(name): + # type: (str) -> List[str] + if "." not in name: + error_message = ( + "Key does not contain dot separated section and key. " + "Perhaps you wanted to use 'global.{}' instead?" + ).format(name) + raise ConfigurationError(error_message) + return name.split(".", 1) + + +# The kinds of configurations there are. +kinds = enum( + USER="user", # User Specific + GLOBAL="global", # System Wide + SITE="site", # [Virtual] Environment Specific + ENV="env", # from PIP_CONFIG_FILE + ENV_VAR="env-var", # from Environment Variables +) + + +CONFIG_BASENAME = 'pip.ini' if WINDOWS else 'pip.conf' + + +def get_configuration_files(): + global_config_files = [ + os.path.join(path, CONFIG_BASENAME) + for path in appdirs.site_config_dirs('pip') + ] + + site_config_file = os.path.join(sys.prefix, CONFIG_BASENAME) + legacy_config_file = os.path.join( + expanduser('~'), + 'pip' if WINDOWS else '.pip', + CONFIG_BASENAME, + ) + new_config_file = os.path.join( + appdirs.user_config_dir("pip"), CONFIG_BASENAME + ) + return { + kinds.GLOBAL: global_config_files, + kinds.SITE: [site_config_file], + kinds.USER: [legacy_config_file, new_config_file], + } + + +class Configuration(object): + """Handles management of configuration. + + Provides an interface to accessing and managing configuration files. + + This class converts provides an API that takes "section.key-name" style + keys and stores the value associated with it as "key-name" under the + section "section". + + This allows for a clean interface wherein the both the section and the + key-name are preserved in an easy to manage form in the configuration files + and the data stored is also nice. + """ + + def __init__(self, isolated, load_only=None): + # type: (bool, Kind) -> None + super(Configuration, self).__init__() + + _valid_load_only = [kinds.USER, kinds.GLOBAL, kinds.SITE, None] + if load_only not in _valid_load_only: + raise ConfigurationError( + "Got invalid value for load_only - should be one of {}".format( + ", ".join(map(repr, _valid_load_only[:-1])) + ) + ) + self.isolated = isolated # type: bool + self.load_only = load_only # type: Optional[Kind] + + # The order here determines the override order. + self._override_order = [ + kinds.GLOBAL, kinds.USER, kinds.SITE, kinds.ENV, kinds.ENV_VAR + ] + + self._ignore_env_names = ["version", "help"] + + # Because we keep track of where we got the data from + self._parsers = { + variant: [] for variant in self._override_order + } # type: Dict[Kind, List[Tuple[str, RawConfigParser]]] + self._config = { + variant: {} for variant in self._override_order + } # type: Dict[Kind, Dict[str, Any]] + self._modified_parsers = [] # type: List[Tuple[str, RawConfigParser]] + + def load(self): + # type: () -> None + """Loads configuration from configuration files and environment + """ + self._load_config_files() + if not self.isolated: + self._load_environment_vars() + + def get_file_to_edit(self): + # type: () -> Optional[str] + """Returns the file with highest priority in configuration + """ + assert self.load_only is not None, \ + "Need to be specified a file to be editing" + + try: + return self._get_parser_to_modify()[0] + except IndexError: + return None + + def items(self): + # type: () -> Iterable[Tuple[str, Any]] + """Returns key-value pairs like dict.items() representing the loaded + configuration + """ + return self._dictionary.items() + + def get_value(self, key): + # type: (str) -> Any + """Get a value from the configuration. + """ + try: + return self._dictionary[key] + except KeyError: + raise ConfigurationError("No such key - {}".format(key)) + + def set_value(self, key, value): + # type: (str, Any) -> None + """Modify a value in the configuration. + """ + self._ensure_have_load_only() + + fname, parser = self._get_parser_to_modify() + + if parser is not None: + section, name = _disassemble_key(key) + + # Modify the parser and the configuration + if not parser.has_section(section): + parser.add_section(section) + parser.set(section, name, value) + + self._config[self.load_only][key] = value + self._mark_as_modified(fname, parser) + + def unset_value(self, key): + # type: (str) -> None + """Unset a value in the configuration. + """ + self._ensure_have_load_only() + + if key not in self._config[self.load_only]: + raise ConfigurationError("No such key - {}".format(key)) + + fname, parser = self._get_parser_to_modify() + + if parser is not None: + section, name = _disassemble_key(key) + + # Remove the key in the parser + modified_something = False + if parser.has_section(section): + # Returns whether the option was removed or not + modified_something = parser.remove_option(section, name) + + if modified_something: + # name removed from parser, section may now be empty + section_iter = iter(parser.items(section)) + try: + val = next(section_iter) + except StopIteration: + val = None + + if val is None: + parser.remove_section(section) + + self._mark_as_modified(fname, parser) + else: + raise ConfigurationError( + "Fatal Internal error [id=1]. Please report as a bug." + ) + + del self._config[self.load_only][key] + + def save(self): + # type: () -> None + """Save the current in-memory state. + """ + self._ensure_have_load_only() + + for fname, parser in self._modified_parsers: + logger.info("Writing to %s", fname) + + # Ensure directory exists. + ensure_dir(os.path.dirname(fname)) + + with open(fname, "w") as f: + parser.write(f) + + # + # Private routines + # + + def _ensure_have_load_only(self): + # type: () -> None + if self.load_only is None: + raise ConfigurationError("Needed a specific file to be modifying.") + logger.debug("Will be working with %s variant only", self.load_only) + + @property + def _dictionary(self): + # type: () -> Dict[str, Any] + """A dictionary representing the loaded configuration. + """ + # NOTE: Dictionaries are not populated if not loaded. So, conditionals + # are not needed here. + retval = {} + + for variant in self._override_order: + retval.update(self._config[variant]) + + return retval + + def _load_config_files(self): + # type: () -> None + """Loads configuration from configuration files + """ + config_files = dict(self._iter_config_files()) + if config_files[kinds.ENV][0:1] == [os.devnull]: + logger.debug( + "Skipping loading configuration files due to " + "environment's PIP_CONFIG_FILE being os.devnull" + ) + return + + for variant, files in config_files.items(): + for fname in files: + # If there's specific variant set in `load_only`, load only + # that variant, not the others. + if self.load_only is not None and variant != self.load_only: + logger.debug( + "Skipping file '%s' (variant: %s)", fname, variant + ) + continue + + parser = self._load_file(variant, fname) + + # Keeping track of the parsers used + self._parsers[variant].append((fname, parser)) + + def _load_file(self, variant, fname): + # type: (Kind, str) -> RawConfigParser + logger.debug("For variant '%s', will try loading '%s'", variant, fname) + parser = self._construct_parser(fname) + + for section in parser.sections(): + items = parser.items(section) + self._config[variant].update(self._normalized_keys(section, items)) + + return parser + + def _construct_parser(self, fname): + # type: (str) -> RawConfigParser + parser = configparser.RawConfigParser() + # If there is no such file, don't bother reading it but create the + # parser anyway, to hold the data. + # Doing this is useful when modifying and saving files, where we don't + # need to construct a parser. + if os.path.exists(fname): + try: + parser.read(fname) + except UnicodeDecodeError: + # See https://github.com/pypa/pip/issues/4963 + raise ConfigurationFileCouldNotBeLoaded( + reason="contains invalid {} characters".format( + locale.getpreferredencoding(False) + ), + fname=fname, + ) + except configparser.Error as error: + # See https://github.com/pypa/pip/issues/4893 + raise ConfigurationFileCouldNotBeLoaded(error=error) + return parser + + def _load_environment_vars(self): + # type: () -> None + """Loads configuration from environment variables + """ + self._config[kinds.ENV_VAR].update( + self._normalized_keys(":env:", self._get_environ_vars()) + ) + + def _normalized_keys(self, section, items): + # type: (str, Iterable[Tuple[str, Any]]) -> Dict[str, Any] + """Normalizes items to construct a dictionary with normalized keys. + + This routine is where the names become keys and are made the same + regardless of source - configuration files or environment. + """ + normalized = {} + for name, val in items: + key = section + "." + _normalize_name(name) + normalized[key] = val + return normalized + + def _get_environ_vars(self): + # type: () -> Iterable[Tuple[str, str]] + """Returns a generator with all environmental vars with prefix PIP_""" + for key, val in os.environ.items(): + should_be_yielded = ( + key.startswith("PIP_") and + key[4:].lower() not in self._ignore_env_names + ) + if should_be_yielded: + yield key[4:].lower(), val + + # XXX: This is patched in the tests. + def _iter_config_files(self): + # type: () -> Iterable[Tuple[Kind, List[str]]] + """Yields variant and configuration files associated with it. + + This should be treated like items of a dictionary. + """ + # SMELL: Move the conditions out of this function + + # environment variables have the lowest priority + config_file = os.environ.get('PIP_CONFIG_FILE', None) + if config_file is not None: + yield kinds.ENV, [config_file] + else: + yield kinds.ENV, [] + + config_files = get_configuration_files() + + # at the base we have any global configuration + yield kinds.GLOBAL, config_files[kinds.GLOBAL] + + # per-user configuration next + should_load_user_config = not self.isolated and not ( + config_file and os.path.exists(config_file) + ) + if should_load_user_config: + # The legacy config file is overridden by the new config file + yield kinds.USER, config_files[kinds.USER] + + # finally virtualenv configuration first trumping others + yield kinds.SITE, config_files[kinds.SITE] + + def _get_parser_to_modify(self): + # type: () -> Tuple[str, RawConfigParser] + # Determine which parser to modify + parsers = self._parsers[self.load_only] + if not parsers: + # This should not happen if everything works correctly. + raise ConfigurationError( + "Fatal Internal error [id=2]. Please report as a bug." + ) + + # Use the highest priority parser. + return parsers[-1] + + # XXX: This is patched in the tests. + def _mark_as_modified(self, fname, parser): + # type: (str, RawConfigParser) -> None + file_parser_tuple = (fname, parser) + if file_parser_tuple not in self._modified_parsers: + self._modified_parsers.append(file_parser_tuple) diff --git a/my_env/Lib/site-packages/pip/_internal/distributions/__init__.py b/my_env/Lib/site-packages/pip/_internal/distributions/__init__.py new file mode 100644 index 000000000..bba02f26c --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/distributions/__init__.py @@ -0,0 +1,24 @@ +from pip._internal.distributions.source.legacy import SourceDistribution +from pip._internal.distributions.wheel import WheelDistribution +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from pip._internal.distributions.base import AbstractDistribution + from pip._internal.req.req_install import InstallRequirement + + +def make_distribution_for_install_requirement(install_req): + # type: (InstallRequirement) -> AbstractDistribution + """Returns a Distribution for the given InstallRequirement + """ + # Editable requirements will always be source distributions. They use the + # legacy logic until we create a modern standard for them. + if install_req.editable: + return SourceDistribution(install_req) + + # If it's a wheel, it's a WheelDistribution + if install_req.is_wheel: + return WheelDistribution(install_req) + + # Otherwise, a SourceDistribution + return SourceDistribution(install_req) diff --git a/my_env/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..f0259a7e6 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-37.pyc new file mode 100644 index 000000000..69fea93cc Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-37.pyc new file mode 100644 index 000000000..07937fdfa Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-37.pyc new file mode 100644 index 000000000..4d1d2ae4c Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/distributions/base.py b/my_env/Lib/site-packages/pip/_internal/distributions/base.py new file mode 100644 index 000000000..929bbefb8 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/distributions/base.py @@ -0,0 +1,36 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import abc + +from pip._vendor.six import add_metaclass + + +@add_metaclass(abc.ABCMeta) +class AbstractDistribution(object): + """A base class for handling installable artifacts. + + The requirements for anything installable are as follows: + + - we must be able to determine the requirement name + (or we can't correctly handle the non-upgrade case). + + - for packages with setup requirements, we must also be able + to determine their requirements without installing additional + packages (for the same reason as run-time dependencies) + + - we must be able to create a Distribution object exposing the + above metadata. + """ + + def __init__(self, req): + super(AbstractDistribution, self).__init__() + self.req = req + + @abc.abstractmethod + def get_pkg_resources_distribution(self): + raise NotImplementedError() + + @abc.abstractmethod + def prepare_distribution_metadata(self, finder, build_isolation): + raise NotImplementedError() diff --git a/my_env/Lib/site-packages/pip/_internal/distributions/installed.py b/my_env/Lib/site-packages/pip/_internal/distributions/installed.py new file mode 100644 index 000000000..454fb48c2 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/distributions/installed.py @@ -0,0 +1,18 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from pip._internal.distributions.base import AbstractDistribution + + +class InstalledDistribution(AbstractDistribution): + """Represents an installed package. + + This does not need any preparation as the required information has already + been computed. + """ + + def get_pkg_resources_distribution(self): + return self.req.satisfied_by + + def prepare_distribution_metadata(self, finder, build_isolation): + pass diff --git a/my_env/Lib/site-packages/pip/_internal/distributions/source/__init__.py b/my_env/Lib/site-packages/pip/_internal/distributions/source/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/my_env/Lib/site-packages/pip/_internal/distributions/source/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/distributions/source/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..bfe216a62 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/distributions/source/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/distributions/source/__pycache__/legacy.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/distributions/source/__pycache__/legacy.cpython-37.pyc new file mode 100644 index 000000000..e0d2f9425 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/distributions/source/__pycache__/legacy.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/distributions/source/legacy.py b/my_env/Lib/site-packages/pip/_internal/distributions/source/legacy.py new file mode 100644 index 000000000..ab43afbec --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/distributions/source/legacy.py @@ -0,0 +1,98 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import logging + +from pip._internal.build_env import BuildEnvironment +from pip._internal.distributions.base import AbstractDistribution +from pip._internal.exceptions import InstallationError +from pip._internal.utils.subprocess import runner_with_spinner_message + +logger = logging.getLogger(__name__) + + +class SourceDistribution(AbstractDistribution): + """Represents a source distribution. + + The preparation step for these needs metadata for the packages to be + generated, either using PEP 517 or using the legacy `setup.py egg_info`. + + NOTE from @pradyunsg (14 June 2019) + I expect SourceDistribution class will need to be split into + `legacy_source` (setup.py based) and `source` (PEP 517 based) when we start + bringing logic for preparation out of InstallRequirement into this class. + """ + + def get_pkg_resources_distribution(self): + return self.req.get_dist() + + def prepare_distribution_metadata(self, finder, build_isolation): + # Prepare for building. We need to: + # 1. Load pyproject.toml (if it exists) + # 2. Set up the build environment + + self.req.load_pyproject_toml() + should_isolate = self.req.use_pep517 and build_isolation + if should_isolate: + self._setup_isolation(finder) + + self.req.prepare_metadata() + self.req.assert_source_matches_version() + + def _setup_isolation(self, finder): + def _raise_conflicts(conflicting_with, conflicting_reqs): + format_string = ( + "Some build dependencies for {requirement} " + "conflict with {conflicting_with}: {description}." + ) + error_message = format_string.format( + requirement=self.req, + conflicting_with=conflicting_with, + description=', '.join( + '%s is incompatible with %s' % (installed, wanted) + for installed, wanted in sorted(conflicting) + ) + ) + raise InstallationError(error_message) + + # Isolate in a BuildEnvironment and install the build-time + # requirements. + self.req.build_env = BuildEnvironment() + self.req.build_env.install_requirements( + finder, self.req.pyproject_requires, 'overlay', + "Installing build dependencies" + ) + conflicting, missing = self.req.build_env.check_requirements( + self.req.requirements_to_check + ) + if conflicting: + _raise_conflicts("PEP 517/518 supported requirements", + conflicting) + if missing: + logger.warning( + "Missing build requirements in pyproject.toml for %s.", + self.req, + ) + logger.warning( + "The project does not specify a build backend, and " + "pip cannot fall back to setuptools without %s.", + " and ".join(map(repr, sorted(missing))) + ) + # Install any extra build dependencies that the backend requests. + # This must be done in a second pass, as the pyproject.toml + # dependencies must be installed before we can call the backend. + with self.req.build_env: + runner = runner_with_spinner_message( + "Getting requirements to build wheel" + ) + backend = self.req.pep517_backend + with backend.subprocess_runner(runner): + reqs = backend.get_requires_for_build_wheel() + + conflicting, missing = self.req.build_env.check_requirements(reqs) + if conflicting: + _raise_conflicts("the backend dependencies", conflicting) + self.req.build_env.install_requirements( + finder, missing, 'normal', + "Installing backend dependencies" + ) diff --git a/my_env/Lib/site-packages/pip/_internal/distributions/wheel.py b/my_env/Lib/site-packages/pip/_internal/distributions/wheel.py new file mode 100644 index 000000000..128951ff6 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/distributions/wheel.py @@ -0,0 +1,20 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from pip._vendor import pkg_resources + +from pip._internal.distributions.base import AbstractDistribution + + +class WheelDistribution(AbstractDistribution): + """Represents a wheel distribution. + + This does not need any preparation as wheels can be directly unpacked. + """ + + def get_pkg_resources_distribution(self): + return list(pkg_resources.find_distributions( + self.req.source_dir))[0] + + def prepare_distribution_metadata(self, finder, build_isolation): + pass diff --git a/my_env/Lib/site-packages/pip/_internal/download.py b/my_env/Lib/site-packages/pip/_internal/download.py new file mode 100644 index 000000000..6567fc375 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/download.py @@ -0,0 +1,578 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import cgi +import logging +import mimetypes +import os +import re +import shutil +import sys + +from pip._vendor import requests +from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response +from pip._vendor.six import PY2 +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip._internal.exceptions import HashMismatch, InstallationError +from pip._internal.models.index import PyPI +from pip._internal.network.session import PipSession +from pip._internal.utils.encoding import auto_decode +from pip._internal.utils.filesystem import copy2_fixed +from pip._internal.utils.misc import ( + ask_path_exists, + backup_dir, + consume, + display_path, + format_size, + hide_url, + path_to_display, + rmtree, + splitext, +) +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.ui import DownloadProgressProvider +from pip._internal.utils.unpacking import unpack_file +from pip._internal.utils.urls import get_url_scheme +from pip._internal.vcs import vcs + +if MYPY_CHECK_RUNNING: + from typing import ( + IO, Callable, List, Optional, Text, Tuple, + ) + + from mypy_extensions import TypedDict + + from pip._internal.models.link import Link + from pip._internal.utils.hashes import Hashes + from pip._internal.vcs.versioncontrol import VersionControl + + if PY2: + CopytreeKwargs = TypedDict( + 'CopytreeKwargs', + { + 'ignore': Callable[[str, List[str]], List[str]], + 'symlinks': bool, + }, + total=False, + ) + else: + CopytreeKwargs = TypedDict( + 'CopytreeKwargs', + { + 'copy_function': Callable[[str, str], None], + 'ignore': Callable[[str, List[str]], List[str]], + 'ignore_dangling_symlinks': bool, + 'symlinks': bool, + }, + total=False, + ) + + +__all__ = ['get_file_content', + 'unpack_vcs_link', + 'unpack_file_url', + 'unpack_http_url', 'unpack_url', + 'parse_content_disposition', 'sanitize_content_filename'] + + +logger = logging.getLogger(__name__) + + +def get_file_content(url, comes_from=None, session=None): + # type: (str, Optional[str], Optional[PipSession]) -> Tuple[str, Text] + """Gets the content of a file; it may be a filename, file: URL, or + http: URL. Returns (location, content). Content is unicode. + + :param url: File path or url. + :param comes_from: Origin description of requirements. + :param session: Instance of pip.download.PipSession. + """ + if session is None: + raise TypeError( + "get_file_content() missing 1 required keyword argument: 'session'" + ) + + scheme = get_url_scheme(url) + + if scheme in ['http', 'https']: + # FIXME: catch some errors + resp = session.get(url) + resp.raise_for_status() + return resp.url, resp.text + + elif scheme == 'file': + if comes_from and comes_from.startswith('http'): + raise InstallationError( + 'Requirements file %s references URL %s, which is local' + % (comes_from, url)) + + path = url.split(':', 1)[1] + path = path.replace('\\', '/') + match = _url_slash_drive_re.match(path) + if match: + path = match.group(1) + ':' + path.split('|', 1)[1] + path = urllib_parse.unquote(path) + if path.startswith('/'): + path = '/' + path.lstrip('/') + url = path + + try: + with open(url, 'rb') as f: + content = auto_decode(f.read()) + except IOError as exc: + raise InstallationError( + 'Could not open requirements file: %s' % str(exc) + ) + return url, content + + +_url_slash_drive_re = re.compile(r'/*([a-z])\|', re.I) + + +def unpack_vcs_link(link, location): + # type: (Link, str) -> None + vcs_backend = _get_used_vcs_backend(link) + assert vcs_backend is not None + vcs_backend.unpack(location, url=hide_url(link.url)) + + +def _get_used_vcs_backend(link): + # type: (Link) -> Optional[VersionControl] + """ + Return a VersionControl object or None. + """ + for vcs_backend in vcs.backends: + if link.scheme in vcs_backend.schemes: + return vcs_backend + return None + + +def _progress_indicator(iterable, *args, **kwargs): + return iterable + + +def _download_url( + resp, # type: Response + link, # type: Link + content_file, # type: IO + hashes, # type: Optional[Hashes] + progress_bar # type: str +): + # type: (...) -> None + try: + total_length = int(resp.headers['content-length']) + except (ValueError, KeyError, TypeError): + total_length = 0 + + cached_resp = getattr(resp, "from_cache", False) + if logger.getEffectiveLevel() > logging.INFO: + show_progress = False + elif cached_resp: + show_progress = False + elif total_length > (40 * 1000): + show_progress = True + elif not total_length: + show_progress = True + else: + show_progress = False + + show_url = link.show_url + + def resp_read(chunk_size): + try: + # Special case for urllib3. + for chunk in resp.raw.stream( + chunk_size, + # We use decode_content=False here because we don't + # want urllib3 to mess with the raw bytes we get + # from the server. If we decompress inside of + # urllib3 then we cannot verify the checksum + # because the checksum will be of the compressed + # file. This breakage will only occur if the + # server adds a Content-Encoding header, which + # depends on how the server was configured: + # - Some servers will notice that the file isn't a + # compressible file and will leave the file alone + # and with an empty Content-Encoding + # - Some servers will notice that the file is + # already compressed and will leave the file + # alone and will add a Content-Encoding: gzip + # header + # - Some servers won't notice anything at all and + # will take a file that's already been compressed + # and compress it again and set the + # Content-Encoding: gzip header + # + # By setting this not to decode automatically we + # hope to eliminate problems with the second case. + decode_content=False): + yield chunk + except AttributeError: + # Standard file-like object. + while True: + chunk = resp.raw.read(chunk_size) + if not chunk: + break + yield chunk + + def written_chunks(chunks): + for chunk in chunks: + content_file.write(chunk) + yield chunk + + progress_indicator = _progress_indicator + + if link.netloc == PyPI.netloc: + url = show_url + else: + url = link.url_without_fragment + + if show_progress: # We don't show progress on cached responses + progress_indicator = DownloadProgressProvider(progress_bar, + max=total_length) + if total_length: + logger.info("Downloading %s (%s)", url, format_size(total_length)) + else: + logger.info("Downloading %s", url) + elif cached_resp: + logger.info("Using cached %s", url) + else: + logger.info("Downloading %s", url) + + downloaded_chunks = written_chunks( + progress_indicator( + resp_read(CONTENT_CHUNK_SIZE), + CONTENT_CHUNK_SIZE + ) + ) + if hashes: + hashes.check_against_chunks(downloaded_chunks) + else: + consume(downloaded_chunks) + + +def _copy_file(filename, location, link): + copy = True + download_location = os.path.join(location, link.filename) + if os.path.exists(download_location): + response = ask_path_exists( + 'The file %s exists. (i)gnore, (w)ipe, (b)ackup, (a)abort' % + display_path(download_location), ('i', 'w', 'b', 'a')) + if response == 'i': + copy = False + elif response == 'w': + logger.warning('Deleting %s', display_path(download_location)) + os.remove(download_location) + elif response == 'b': + dest_file = backup_dir(download_location) + logger.warning( + 'Backing up %s to %s', + display_path(download_location), + display_path(dest_file), + ) + shutil.move(download_location, dest_file) + elif response == 'a': + sys.exit(-1) + if copy: + shutil.copy(filename, download_location) + logger.info('Saved %s', display_path(download_location)) + + +def unpack_http_url( + link, # type: Link + location, # type: str + download_dir=None, # type: Optional[str] + session=None, # type: Optional[PipSession] + hashes=None, # type: Optional[Hashes] + progress_bar="on" # type: str +): + # type: (...) -> None + if session is None: + raise TypeError( + "unpack_http_url() missing 1 required keyword argument: 'session'" + ) + + with TempDirectory(kind="unpack") as temp_dir: + # If a download dir is specified, is the file already downloaded there? + already_downloaded_path = None + if download_dir: + already_downloaded_path = _check_download_dir(link, + download_dir, + hashes) + + if already_downloaded_path: + from_path = already_downloaded_path + content_type = mimetypes.guess_type(from_path)[0] + else: + # let's download to a tmp dir + from_path, content_type = _download_http_url(link, + session, + temp_dir.path, + hashes, + progress_bar) + + # unpack the archive to the build dir location. even when only + # downloading archives, they have to be unpacked to parse dependencies + unpack_file(from_path, location, content_type) + + # a download dir is specified; let's copy the archive there + if download_dir and not already_downloaded_path: + _copy_file(from_path, download_dir, link) + + if not already_downloaded_path: + os.unlink(from_path) + + +def _copy2_ignoring_special_files(src, dest): + # type: (str, str) -> None + """Copying special files is not supported, but as a convenience to users + we skip errors copying them. This supports tools that may create e.g. + socket files in the project source directory. + """ + try: + copy2_fixed(src, dest) + except shutil.SpecialFileError as e: + # SpecialFileError may be raised due to either the source or + # destination. If the destination was the cause then we would actually + # care, but since the destination directory is deleted prior to + # copy we ignore all of them assuming it is caused by the source. + logger.warning( + "Ignoring special file error '%s' encountered copying %s to %s.", + str(e), + path_to_display(src), + path_to_display(dest), + ) + + +def _copy_source_tree(source, target): + # type: (str, str) -> None + def ignore(d, names): + # Pulling in those directories can potentially be very slow, + # exclude the following directories if they appear in the top + # level dir (and only it). + # See discussion at https://github.com/pypa/pip/pull/6770 + return ['.tox', '.nox'] if d == source else [] + + kwargs = dict(ignore=ignore, symlinks=True) # type: CopytreeKwargs + + if not PY2: + # Python 2 does not support copy_function, so we only ignore + # errors on special file copy in Python 3. + kwargs['copy_function'] = _copy2_ignoring_special_files + + shutil.copytree(source, target, **kwargs) + + +def unpack_file_url( + link, # type: Link + location, # type: str + download_dir=None, # type: Optional[str] + hashes=None # type: Optional[Hashes] +): + # type: (...) -> None + """Unpack link into location. + + If download_dir is provided and link points to a file, make a copy + of the link file inside download_dir. + """ + link_path = link.file_path + # If it's a url to a local directory + if link.is_existing_dir(): + if os.path.isdir(location): + rmtree(location) + _copy_source_tree(link_path, location) + if download_dir: + logger.info('Link is a directory, ignoring download_dir') + return + + # If --require-hashes is off, `hashes` is either empty, the + # link's embedded hash, or MissingHashes; it is required to + # match. If --require-hashes is on, we are satisfied by any + # hash in `hashes` matching: a URL-based or an option-based + # one; no internet-sourced hash will be in `hashes`. + if hashes: + hashes.check_against_path(link_path) + + # If a download dir is specified, is the file already there and valid? + already_downloaded_path = None + if download_dir: + already_downloaded_path = _check_download_dir(link, + download_dir, + hashes) + + if already_downloaded_path: + from_path = already_downloaded_path + else: + from_path = link_path + + content_type = mimetypes.guess_type(from_path)[0] + + # unpack the archive to the build dir location. even when only downloading + # archives, they have to be unpacked to parse dependencies + unpack_file(from_path, location, content_type) + + # a download dir is specified and not already downloaded + if download_dir and not already_downloaded_path: + _copy_file(from_path, download_dir, link) + + +def unpack_url( + link, # type: Link + location, # type: str + download_dir=None, # type: Optional[str] + session=None, # type: Optional[PipSession] + hashes=None, # type: Optional[Hashes] + progress_bar="on" # type: str +): + # type: (...) -> None + """Unpack link. + If link is a VCS link: + if only_download, export into download_dir and ignore location + else unpack into location + for other types of link: + - unpack into location + - if download_dir, copy the file into download_dir + - if only_download, mark location for deletion + + :param hashes: A Hashes object, one of whose embedded hashes must match, + or HashMismatch will be raised. If the Hashes is empty, no matches are + required, and unhashable types of requirements (like VCS ones, which + would ordinarily raise HashUnsupported) are allowed. + """ + # non-editable vcs urls + if link.is_vcs: + unpack_vcs_link(link, location) + + # file urls + elif link.is_file: + unpack_file_url(link, location, download_dir, hashes=hashes) + + # http urls + else: + if session is None: + session = PipSession() + + unpack_http_url( + link, + location, + download_dir, + session, + hashes=hashes, + progress_bar=progress_bar + ) + + +def sanitize_content_filename(filename): + # type: (str) -> str + """ + Sanitize the "filename" value from a Content-Disposition header. + """ + return os.path.basename(filename) + + +def parse_content_disposition(content_disposition, default_filename): + # type: (str, str) -> str + """ + Parse the "filename" value from a Content-Disposition header, and + return the default filename if the result is empty. + """ + _type, params = cgi.parse_header(content_disposition) + filename = params.get('filename') + if filename: + # We need to sanitize the filename to prevent directory traversal + # in case the filename contains ".." path parts. + filename = sanitize_content_filename(filename) + return filename or default_filename + + +def _download_http_url( + link, # type: Link + session, # type: PipSession + temp_dir, # type: str + hashes, # type: Optional[Hashes] + progress_bar # type: str +): + # type: (...) -> Tuple[str, str] + """Download link url into temp_dir using provided session""" + target_url = link.url.split('#', 1)[0] + try: + resp = session.get( + target_url, + # We use Accept-Encoding: identity here because requests + # defaults to accepting compressed responses. This breaks in + # a variety of ways depending on how the server is configured. + # - Some servers will notice that the file isn't a compressible + # file and will leave the file alone and with an empty + # Content-Encoding + # - Some servers will notice that the file is already + # compressed and will leave the file alone and will add a + # Content-Encoding: gzip header + # - Some servers won't notice anything at all and will take + # a file that's already been compressed and compress it again + # and set the Content-Encoding: gzip header + # By setting this to request only the identity encoding We're + # hoping to eliminate the third case. Hopefully there does not + # exist a server which when given a file will notice it is + # already compressed and that you're not asking for a + # compressed file and will then decompress it before sending + # because if that's the case I don't think it'll ever be + # possible to make this work. + headers={"Accept-Encoding": "identity"}, + stream=True, + ) + resp.raise_for_status() + except requests.HTTPError as exc: + logger.critical( + "HTTP error %s while getting %s", exc.response.status_code, link, + ) + raise + + content_type = resp.headers.get('content-type', '') + filename = link.filename # fallback + # Have a look at the Content-Disposition header for a better guess + content_disposition = resp.headers.get('content-disposition') + if content_disposition: + filename = parse_content_disposition(content_disposition, filename) + ext = splitext(filename)[1] # type: Optional[str] + if not ext: + ext = mimetypes.guess_extension(content_type) + if ext: + filename += ext + if not ext and link.url != resp.url: + ext = os.path.splitext(resp.url)[1] + if ext: + filename += ext + file_path = os.path.join(temp_dir, filename) + with open(file_path, 'wb') as content_file: + _download_url(resp, link, content_file, hashes, progress_bar) + return file_path, content_type + + +def _check_download_dir(link, download_dir, hashes): + # type: (Link, str, Optional[Hashes]) -> Optional[str] + """ Check download_dir for previously downloaded file with correct hash + If a correct file is found return its path else None + """ + download_path = os.path.join(download_dir, link.filename) + + if not os.path.exists(download_path): + return None + + # If already downloaded, does its hash match? + logger.info('File was already downloaded %s', download_path) + if hashes: + try: + hashes.check_against_path(download_path) + except HashMismatch: + logger.warning( + 'Previously-downloaded file %s has bad hash. ' + 'Re-downloading.', + download_path + ) + os.unlink(download_path) + return None + return download_path diff --git a/my_env/Lib/site-packages/pip/_internal/exceptions.py b/my_env/Lib/site-packages/pip/_internal/exceptions.py new file mode 100644 index 000000000..dddec789e --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/exceptions.py @@ -0,0 +1,308 @@ +"""Exceptions used throughout package""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +from itertools import chain, groupby, repeat + +from pip._vendor.six import iteritems + +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional + from pip._vendor.pkg_resources import Distribution + from pip._internal.req.req_install import InstallRequirement + + +class PipError(Exception): + """Base pip exception""" + + +class ConfigurationError(PipError): + """General exception in configuration""" + + +class InstallationError(PipError): + """General exception during installation""" + + +class UninstallationError(PipError): + """General exception during uninstallation""" + + +class NoneMetadataError(PipError): + """ + Raised when accessing "METADATA" or "PKG-INFO" metadata for a + pip._vendor.pkg_resources.Distribution object and + `dist.has_metadata('METADATA')` returns True but + `dist.get_metadata('METADATA')` returns None (and similarly for + "PKG-INFO"). + """ + + def __init__(self, dist, metadata_name): + # type: (Distribution, str) -> None + """ + :param dist: A Distribution object. + :param metadata_name: The name of the metadata being accessed + (can be "METADATA" or "PKG-INFO"). + """ + self.dist = dist + self.metadata_name = metadata_name + + def __str__(self): + # type: () -> str + # Use `dist` in the error message because its stringification + # includes more information, like the version and location. + return ( + 'None {} metadata found for distribution: {}'.format( + self.metadata_name, self.dist, + ) + ) + + +class DistributionNotFound(InstallationError): + """Raised when a distribution cannot be found to satisfy a requirement""" + + +class RequirementsFileParseError(InstallationError): + """Raised when a general error occurs parsing a requirements file line.""" + + +class BestVersionAlreadyInstalled(PipError): + """Raised when the most up-to-date version of a package is already + installed.""" + + +class BadCommand(PipError): + """Raised when virtualenv or a command is not found""" + + +class CommandError(PipError): + """Raised when there is an error in command-line arguments""" + + +class PreviousBuildDirError(PipError): + """Raised when there's a previous conflicting build directory""" + + +class InvalidWheelFilename(InstallationError): + """Invalid wheel filename.""" + + +class UnsupportedWheel(InstallationError): + """Unsupported wheel.""" + + +class HashErrors(InstallationError): + """Multiple HashError instances rolled into one for reporting""" + + def __init__(self): + self.errors = [] + + def append(self, error): + self.errors.append(error) + + def __str__(self): + lines = [] + self.errors.sort(key=lambda e: e.order) + for cls, errors_of_cls in groupby(self.errors, lambda e: e.__class__): + lines.append(cls.head) + lines.extend(e.body() for e in errors_of_cls) + if lines: + return '\n'.join(lines) + + def __nonzero__(self): + return bool(self.errors) + + def __bool__(self): + return self.__nonzero__() + + +class HashError(InstallationError): + """ + A failure to verify a package against known-good hashes + + :cvar order: An int sorting hash exception classes by difficulty of + recovery (lower being harder), so the user doesn't bother fretting + about unpinned packages when he has deeper issues, like VCS + dependencies, to deal with. Also keeps error reports in a + deterministic order. + :cvar head: A section heading for display above potentially many + exceptions of this kind + :ivar req: The InstallRequirement that triggered this error. This is + pasted on after the exception is instantiated, because it's not + typically available earlier. + + """ + req = None # type: Optional[InstallRequirement] + head = '' + + def body(self): + """Return a summary of me for display under the heading. + + This default implementation simply prints a description of the + triggering requirement. + + :param req: The InstallRequirement that provoked this error, with + populate_link() having already been called + + """ + return ' %s' % self._requirement_name() + + def __str__(self): + return '%s\n%s' % (self.head, self.body()) + + def _requirement_name(self): + """Return a description of the requirement that triggered me. + + This default implementation returns long description of the req, with + line numbers + + """ + return str(self.req) if self.req else 'unknown package' + + +class VcsHashUnsupported(HashError): + """A hash was provided for a version-control-system-based requirement, but + we don't have a method for hashing those.""" + + order = 0 + head = ("Can't verify hashes for these requirements because we don't " + "have a way to hash version control repositories:") + + +class DirectoryUrlHashUnsupported(HashError): + """A hash was provided for a version-control-system-based requirement, but + we don't have a method for hashing those.""" + + order = 1 + head = ("Can't verify hashes for these file:// requirements because they " + "point to directories:") + + +class HashMissing(HashError): + """A hash was needed for a requirement but is absent.""" + + order = 2 + head = ('Hashes are required in --require-hashes mode, but they are ' + 'missing from some requirements. Here is a list of those ' + 'requirements along with the hashes their downloaded archives ' + 'actually had. Add lines like these to your requirements files to ' + 'prevent tampering. (If you did not enable --require-hashes ' + 'manually, note that it turns on automatically when any package ' + 'has a hash.)') + + def __init__(self, gotten_hash): + """ + :param gotten_hash: The hash of the (possibly malicious) archive we + just downloaded + """ + self.gotten_hash = gotten_hash + + def body(self): + # Dodge circular import. + from pip._internal.utils.hashes import FAVORITE_HASH + + package = None + if self.req: + # In the case of URL-based requirements, display the original URL + # seen in the requirements file rather than the package name, + # so the output can be directly copied into the requirements file. + package = (self.req.original_link if self.req.original_link + # In case someone feeds something downright stupid + # to InstallRequirement's constructor. + else getattr(self.req, 'req', None)) + return ' %s --hash=%s:%s' % (package or 'unknown package', + FAVORITE_HASH, + self.gotten_hash) + + +class HashUnpinned(HashError): + """A requirement had a hash specified but was not pinned to a specific + version.""" + + order = 3 + head = ('In --require-hashes mode, all requirements must have their ' + 'versions pinned with ==. These do not:') + + +class HashMismatch(HashError): + """ + Distribution file hash values don't match. + + :ivar package_name: The name of the package that triggered the hash + mismatch. Feel free to write to this after the exception is raise to + improve its error message. + + """ + order = 4 + head = ('THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS ' + 'FILE. If you have updated the package versions, please update ' + 'the hashes. Otherwise, examine the package contents carefully; ' + 'someone may have tampered with them.') + + def __init__(self, allowed, gots): + """ + :param allowed: A dict of algorithm names pointing to lists of allowed + hex digests + :param gots: A dict of algorithm names pointing to hashes we + actually got from the files under suspicion + """ + self.allowed = allowed + self.gots = gots + + def body(self): + return ' %s:\n%s' % (self._requirement_name(), + self._hash_comparison()) + + def _hash_comparison(self): + """ + Return a comparison of actual and expected hash values. + + Example:: + + Expected sha256 abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde + or 123451234512345123451234512345123451234512345 + Got bcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdef + + """ + def hash_then_or(hash_name): + # For now, all the decent hashes have 6-char names, so we can get + # away with hard-coding space literals. + return chain([hash_name], repeat(' or')) + + lines = [] + for hash_name, expecteds in iteritems(self.allowed): + prefix = hash_then_or(hash_name) + lines.extend((' Expected %s %s' % (next(prefix), e)) + for e in expecteds) + lines.append(' Got %s\n' % + self.gots[hash_name].hexdigest()) + return '\n'.join(lines) + + +class UnsupportedPythonVersion(InstallationError): + """Unsupported python version according to Requires-Python package + metadata.""" + + +class ConfigurationFileCouldNotBeLoaded(ConfigurationError): + """When there are errors while loading a configuration file + """ + + def __init__(self, reason="could not be loaded", fname=None, error=None): + super(ConfigurationFileCouldNotBeLoaded, self).__init__(error) + self.reason = reason + self.fname = fname + self.error = error + + def __str__(self): + if self.fname is not None: + message_part = " in {}.".format(self.fname) + else: + assert self.error is not None + message_part = ".\n{}\n".format(self.error.message) + return "Configuration file {}{}".format(self.reason, message_part) diff --git a/my_env/Lib/site-packages/pip/_internal/index.py b/my_env/Lib/site-packages/pip/_internal/index.py new file mode 100644 index 000000000..897444aae --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/index.py @@ -0,0 +1,992 @@ +"""Routines related to PyPI, indexes""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import logging +import re + +from pip._vendor.packaging import specifiers +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.exceptions import ( + BestVersionAlreadyInstalled, + DistributionNotFound, + InvalidWheelFilename, + UnsupportedWheel, +) +from pip._internal.models.candidate import InstallationCandidate +from pip._internal.models.format_control import FormatControl +from pip._internal.models.link import Link +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.models.target_python import TargetPython +from pip._internal.utils.filetypes import WHEEL_EXTENSION +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import build_netloc +from pip._internal.utils.packaging import check_requires_python +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.unpacking import SUPPORTED_EXTENSIONS +from pip._internal.utils.urls import url_to_path +from pip._internal.wheel import Wheel + +if MYPY_CHECK_RUNNING: + from typing import ( + FrozenSet, Iterable, List, Optional, Set, Text, Tuple, Union, + ) + from pip._vendor.packaging.version import _BaseVersion + from pip._internal.collector import LinkCollector + from pip._internal.models.search_scope import SearchScope + from pip._internal.req import InstallRequirement + from pip._internal.pep425tags import Pep425Tag + from pip._internal.utils.hashes import Hashes + + BuildTag = Union[Tuple[()], Tuple[int, str]] + CandidateSortingKey = ( + Tuple[int, int, int, _BaseVersion, BuildTag, Optional[int]] + ) + + +__all__ = ['FormatControl', 'BestCandidateResult', 'PackageFinder'] + + +logger = logging.getLogger(__name__) + + +def _check_link_requires_python( + link, # type: Link + version_info, # type: Tuple[int, int, int] + ignore_requires_python=False, # type: bool +): + # type: (...) -> bool + """ + Return whether the given Python version is compatible with a link's + "Requires-Python" value. + + :param version_info: A 3-tuple of ints representing the Python + major-minor-micro version to check. + :param ignore_requires_python: Whether to ignore the "Requires-Python" + value if the given Python version isn't compatible. + """ + try: + is_compatible = check_requires_python( + link.requires_python, version_info=version_info, + ) + except specifiers.InvalidSpecifier: + logger.debug( + "Ignoring invalid Requires-Python (%r) for link: %s", + link.requires_python, link, + ) + else: + if not is_compatible: + version = '.'.join(map(str, version_info)) + if not ignore_requires_python: + logger.debug( + 'Link requires a different Python (%s not in: %r): %s', + version, link.requires_python, link, + ) + return False + + logger.debug( + 'Ignoring failed Requires-Python check (%s not in: %r) ' + 'for link: %s', + version, link.requires_python, link, + ) + + return True + + +class LinkEvaluator(object): + + """ + Responsible for evaluating links for a particular project. + """ + + _py_version_re = re.compile(r'-py([123]\.?[0-9]?)$') + + # Don't include an allow_yanked default value to make sure each call + # site considers whether yanked releases are allowed. This also causes + # that decision to be made explicit in the calling code, which helps + # people when reading the code. + def __init__( + self, + project_name, # type: str + canonical_name, # type: str + formats, # type: FrozenSet + target_python, # type: TargetPython + allow_yanked, # type: bool + ignore_requires_python=None, # type: Optional[bool] + ): + # type: (...) -> None + """ + :param project_name: The user supplied package name. + :param canonical_name: The canonical package name. + :param formats: The formats allowed for this package. Should be a set + with 'binary' or 'source' or both in it. + :param target_python: The target Python interpreter to use when + evaluating link compatibility. This is used, for example, to + check wheel compatibility, as well as when checking the Python + version, e.g. the Python version embedded in a link filename + (or egg fragment) and against an HTML link's optional PEP 503 + "data-requires-python" attribute. + :param allow_yanked: Whether files marked as yanked (in the sense + of PEP 592) are permitted to be candidates for install. + :param ignore_requires_python: Whether to ignore incompatible + PEP 503 "data-requires-python" values in HTML links. Defaults + to False. + """ + if ignore_requires_python is None: + ignore_requires_python = False + + self._allow_yanked = allow_yanked + self._canonical_name = canonical_name + self._ignore_requires_python = ignore_requires_python + self._formats = formats + self._target_python = target_python + + self.project_name = project_name + + def evaluate_link(self, link): + # type: (Link) -> Tuple[bool, Optional[Text]] + """ + Determine whether a link is a candidate for installation. + + :return: A tuple (is_candidate, result), where `result` is (1) a + version string if `is_candidate` is True, and (2) if + `is_candidate` is False, an optional string to log the reason + the link fails to qualify. + """ + version = None + if link.is_yanked and not self._allow_yanked: + reason = link.yanked_reason or '' + # Mark this as a unicode string to prevent "UnicodeEncodeError: + # 'ascii' codec can't encode character" in Python 2 when + # the reason contains non-ascii characters. + return (False, u'yanked for reason: {}'.format(reason)) + + if link.egg_fragment: + egg_info = link.egg_fragment + ext = link.ext + else: + egg_info, ext = link.splitext() + if not ext: + return (False, 'not a file') + if ext not in SUPPORTED_EXTENSIONS: + return (False, 'unsupported archive format: %s' % ext) + if "binary" not in self._formats and ext == WHEEL_EXTENSION: + reason = 'No binaries permitted for %s' % self.project_name + return (False, reason) + if "macosx10" in link.path and ext == '.zip': + return (False, 'macosx10 one') + if ext == WHEEL_EXTENSION: + try: + wheel = Wheel(link.filename) + except InvalidWheelFilename: + return (False, 'invalid wheel filename') + if canonicalize_name(wheel.name) != self._canonical_name: + reason = 'wrong project name (not %s)' % self.project_name + return (False, reason) + + supported_tags = self._target_python.get_tags() + if not wheel.supported(supported_tags): + # Include the wheel's tags in the reason string to + # simplify troubleshooting compatibility issues. + file_tags = wheel.get_formatted_file_tags() + reason = ( + "none of the wheel's tags match: {}".format( + ', '.join(file_tags) + ) + ) + return (False, reason) + + version = wheel.version + + # This should be up by the self.ok_binary check, but see issue 2700. + if "source" not in self._formats and ext != WHEEL_EXTENSION: + return (False, 'No sources permitted for %s' % self.project_name) + + if not version: + version = _extract_version_from_fragment( + egg_info, self._canonical_name, + ) + if not version: + return ( + False, 'Missing project version for %s' % self.project_name, + ) + + match = self._py_version_re.search(version) + if match: + version = version[:match.start()] + py_version = match.group(1) + if py_version != self._target_python.py_version: + return (False, 'Python version is incorrect') + + supports_python = _check_link_requires_python( + link, version_info=self._target_python.py_version_info, + ignore_requires_python=self._ignore_requires_python, + ) + if not supports_python: + # Return None for the reason text to suppress calling + # _log_skipped_link(). + return (False, None) + + logger.debug('Found link %s, version: %s', link, version) + + return (True, version) + + +def filter_unallowed_hashes( + candidates, # type: List[InstallationCandidate] + hashes, # type: Hashes + project_name, # type: str +): + # type: (...) -> List[InstallationCandidate] + """ + Filter out candidates whose hashes aren't allowed, and return a new + list of candidates. + + If at least one candidate has an allowed hash, then all candidates with + either an allowed hash or no hash specified are returned. Otherwise, + the given candidates are returned. + + Including the candidates with no hash specified when there is a match + allows a warning to be logged if there is a more preferred candidate + with no hash specified. Returning all candidates in the case of no + matches lets pip report the hash of the candidate that would otherwise + have been installed (e.g. permitting the user to more easily update + their requirements file with the desired hash). + """ + if not hashes: + logger.debug( + 'Given no hashes to check %s links for project %r: ' + 'discarding no candidates', + len(candidates), + project_name, + ) + # Make sure we're not returning back the given value. + return list(candidates) + + matches_or_no_digest = [] + # Collect the non-matches for logging purposes. + non_matches = [] + match_count = 0 + for candidate in candidates: + link = candidate.link + if not link.has_hash: + pass + elif link.is_hash_allowed(hashes=hashes): + match_count += 1 + else: + non_matches.append(candidate) + continue + + matches_or_no_digest.append(candidate) + + if match_count: + filtered = matches_or_no_digest + else: + # Make sure we're not returning back the given value. + filtered = list(candidates) + + if len(filtered) == len(candidates): + discard_message = 'discarding no candidates' + else: + discard_message = 'discarding {} non-matches:\n {}'.format( + len(non_matches), + '\n '.join(str(candidate.link) for candidate in non_matches) + ) + + logger.debug( + 'Checked %s links for project %r against %s hashes ' + '(%s matches, %s no digest): %s', + len(candidates), + project_name, + hashes.digest_count, + match_count, + len(matches_or_no_digest) - match_count, + discard_message + ) + + return filtered + + +class CandidatePreferences(object): + + """ + Encapsulates some of the preferences for filtering and sorting + InstallationCandidate objects. + """ + + def __init__( + self, + prefer_binary=False, # type: bool + allow_all_prereleases=False, # type: bool + ): + # type: (...) -> None + """ + :param allow_all_prereleases: Whether to allow all pre-releases. + """ + self.allow_all_prereleases = allow_all_prereleases + self.prefer_binary = prefer_binary + + +class BestCandidateResult(object): + """A collection of candidates, returned by `PackageFinder.find_best_candidate`. + + This class is only intended to be instantiated by CandidateEvaluator's + `compute_best_candidate()` method. + """ + + def __init__( + self, + candidates, # type: List[InstallationCandidate] + applicable_candidates, # type: List[InstallationCandidate] + best_candidate, # type: Optional[InstallationCandidate] + ): + # type: (...) -> None + """ + :param candidates: A sequence of all available candidates found. + :param applicable_candidates: The applicable candidates. + :param best_candidate: The most preferred candidate found, or None + if no applicable candidates were found. + """ + assert set(applicable_candidates) <= set(candidates) + + if best_candidate is None: + assert not applicable_candidates + else: + assert best_candidate in applicable_candidates + + self._applicable_candidates = applicable_candidates + self._candidates = candidates + + self.best_candidate = best_candidate + + def iter_all(self): + # type: () -> Iterable[InstallationCandidate] + """Iterate through all candidates. + """ + return iter(self._candidates) + + def iter_applicable(self): + # type: () -> Iterable[InstallationCandidate] + """Iterate through the applicable candidates. + """ + return iter(self._applicable_candidates) + + +class CandidateEvaluator(object): + + """ + Responsible for filtering and sorting candidates for installation based + on what tags are valid. + """ + + @classmethod + def create( + cls, + project_name, # type: str + target_python=None, # type: Optional[TargetPython] + prefer_binary=False, # type: bool + allow_all_prereleases=False, # type: bool + specifier=None, # type: Optional[specifiers.BaseSpecifier] + hashes=None, # type: Optional[Hashes] + ): + # type: (...) -> CandidateEvaluator + """Create a CandidateEvaluator object. + + :param target_python: The target Python interpreter to use when + checking compatibility. If None (the default), a TargetPython + object will be constructed from the running Python. + :param specifier: An optional object implementing `filter` + (e.g. `packaging.specifiers.SpecifierSet`) to filter applicable + versions. + :param hashes: An optional collection of allowed hashes. + """ + if target_python is None: + target_python = TargetPython() + if specifier is None: + specifier = specifiers.SpecifierSet() + + supported_tags = target_python.get_tags() + + return cls( + project_name=project_name, + supported_tags=supported_tags, + specifier=specifier, + prefer_binary=prefer_binary, + allow_all_prereleases=allow_all_prereleases, + hashes=hashes, + ) + + def __init__( + self, + project_name, # type: str + supported_tags, # type: List[Pep425Tag] + specifier, # type: specifiers.BaseSpecifier + prefer_binary=False, # type: bool + allow_all_prereleases=False, # type: bool + hashes=None, # type: Optional[Hashes] + ): + # type: (...) -> None + """ + :param supported_tags: The PEP 425 tags supported by the target + Python in order of preference (most preferred first). + """ + self._allow_all_prereleases = allow_all_prereleases + self._hashes = hashes + self._prefer_binary = prefer_binary + self._project_name = project_name + self._specifier = specifier + self._supported_tags = supported_tags + + def get_applicable_candidates( + self, + candidates, # type: List[InstallationCandidate] + ): + # type: (...) -> List[InstallationCandidate] + """ + Return the applicable candidates from a list of candidates. + """ + # Using None infers from the specifier instead. + allow_prereleases = self._allow_all_prereleases or None + specifier = self._specifier + versions = { + str(v) for v in specifier.filter( + # We turn the version object into a str here because otherwise + # when we're debundled but setuptools isn't, Python will see + # packaging.version.Version and + # pkg_resources._vendor.packaging.version.Version as different + # types. This way we'll use a str as a common data interchange + # format. If we stop using the pkg_resources provided specifier + # and start using our own, we can drop the cast to str(). + (str(c.version) for c in candidates), + prereleases=allow_prereleases, + ) + } + + # Again, converting version to str to deal with debundling. + applicable_candidates = [ + c for c in candidates if str(c.version) in versions + ] + + return filter_unallowed_hashes( + candidates=applicable_candidates, + hashes=self._hashes, + project_name=self._project_name, + ) + + def _sort_key(self, candidate): + # type: (InstallationCandidate) -> CandidateSortingKey + """ + Function to pass as the `key` argument to a call to sorted() to sort + InstallationCandidates by preference. + + Returns a tuple such that tuples sorting as greater using Python's + default comparison operator are more preferred. + + The preference is as follows: + + First and foremost, candidates with allowed (matching) hashes are + always preferred over candidates without matching hashes. This is + because e.g. if the only candidate with an allowed hash is yanked, + we still want to use that candidate. + + Second, excepting hash considerations, candidates that have been + yanked (in the sense of PEP 592) are always less preferred than + candidates that haven't been yanked. Then: + + If not finding wheels, they are sorted by version only. + If finding wheels, then the sort order is by version, then: + 1. existing installs + 2. wheels ordered via Wheel.support_index_min(self._supported_tags) + 3. source archives + If prefer_binary was set, then all wheels are sorted above sources. + + Note: it was considered to embed this logic into the Link + comparison operators, but then different sdist links + with the same version, would have to be considered equal + """ + valid_tags = self._supported_tags + support_num = len(valid_tags) + build_tag = () # type: BuildTag + binary_preference = 0 + link = candidate.link + if link.is_wheel: + # can raise InvalidWheelFilename + wheel = Wheel(link.filename) + if not wheel.supported(valid_tags): + raise UnsupportedWheel( + "%s is not a supported wheel for this platform. It " + "can't be sorted." % wheel.filename + ) + if self._prefer_binary: + binary_preference = 1 + pri = -(wheel.support_index_min(valid_tags)) + if wheel.build_tag is not None: + match = re.match(r'^(\d+)(.*)$', wheel.build_tag) + build_tag_groups = match.groups() + build_tag = (int(build_tag_groups[0]), build_tag_groups[1]) + else: # sdist + pri = -(support_num) + has_allowed_hash = int(link.is_hash_allowed(self._hashes)) + yank_value = -1 * int(link.is_yanked) # -1 for yanked. + return ( + has_allowed_hash, yank_value, binary_preference, candidate.version, + build_tag, pri, + ) + + def sort_best_candidate( + self, + candidates, # type: List[InstallationCandidate] + ): + # type: (...) -> Optional[InstallationCandidate] + """ + Return the best candidate per the instance's sort order, or None if + no candidate is acceptable. + """ + if not candidates: + return None + + best_candidate = max(candidates, key=self._sort_key) + + # Log a warning per PEP 592 if necessary before returning. + link = best_candidate.link + if link.is_yanked: + reason = link.yanked_reason or '' + msg = ( + # Mark this as a unicode string to prevent + # "UnicodeEncodeError: 'ascii' codec can't encode character" + # in Python 2 when the reason contains non-ascii characters. + u'The candidate selected for download or install is a ' + 'yanked version: {candidate}\n' + 'Reason for being yanked: {reason}' + ).format(candidate=best_candidate, reason=reason) + logger.warning(msg) + + return best_candidate + + def compute_best_candidate( + self, + candidates, # type: List[InstallationCandidate] + ): + # type: (...) -> BestCandidateResult + """ + Compute and return a `BestCandidateResult` instance. + """ + applicable_candidates = self.get_applicable_candidates(candidates) + + best_candidate = self.sort_best_candidate(applicable_candidates) + + return BestCandidateResult( + candidates, + applicable_candidates=applicable_candidates, + best_candidate=best_candidate, + ) + + +class PackageFinder(object): + """This finds packages. + + This is meant to match easy_install's technique for looking for + packages, by reading pages and looking for appropriate links. + """ + + def __init__( + self, + link_collector, # type: LinkCollector + target_python, # type: TargetPython + allow_yanked, # type: bool + format_control=None, # type: Optional[FormatControl] + candidate_prefs=None, # type: CandidatePreferences + ignore_requires_python=None, # type: Optional[bool] + ): + # type: (...) -> None + """ + This constructor is primarily meant to be used by the create() class + method and from tests. + + :param format_control: A FormatControl object, used to control + the selection of source packages / binary packages when consulting + the index and links. + :param candidate_prefs: Options to use when creating a + CandidateEvaluator object. + """ + if candidate_prefs is None: + candidate_prefs = CandidatePreferences() + + format_control = format_control or FormatControl(set(), set()) + + self._allow_yanked = allow_yanked + self._candidate_prefs = candidate_prefs + self._ignore_requires_python = ignore_requires_python + self._link_collector = link_collector + self._target_python = target_python + + self.format_control = format_control + + # These are boring links that have already been logged somehow. + self._logged_links = set() # type: Set[Link] + + # Don't include an allow_yanked default value to make sure each call + # site considers whether yanked releases are allowed. This also causes + # that decision to be made explicit in the calling code, which helps + # people when reading the code. + @classmethod + def create( + cls, + link_collector, # type: LinkCollector + selection_prefs, # type: SelectionPreferences + target_python=None, # type: Optional[TargetPython] + ): + # type: (...) -> PackageFinder + """Create a PackageFinder. + + :param selection_prefs: The candidate selection preferences, as a + SelectionPreferences object. + :param target_python: The target Python interpreter to use when + checking compatibility. If None (the default), a TargetPython + object will be constructed from the running Python. + """ + if target_python is None: + target_python = TargetPython() + + candidate_prefs = CandidatePreferences( + prefer_binary=selection_prefs.prefer_binary, + allow_all_prereleases=selection_prefs.allow_all_prereleases, + ) + + return cls( + candidate_prefs=candidate_prefs, + link_collector=link_collector, + target_python=target_python, + allow_yanked=selection_prefs.allow_yanked, + format_control=selection_prefs.format_control, + ignore_requires_python=selection_prefs.ignore_requires_python, + ) + + @property + def search_scope(self): + # type: () -> SearchScope + return self._link_collector.search_scope + + @search_scope.setter + def search_scope(self, search_scope): + # type: (SearchScope) -> None + self._link_collector.search_scope = search_scope + + @property + def find_links(self): + # type: () -> List[str] + return self._link_collector.find_links + + @property + def index_urls(self): + # type: () -> List[str] + return self.search_scope.index_urls + + @property + def trusted_hosts(self): + # type: () -> Iterable[str] + for host_port in self._link_collector.session.pip_trusted_origins: + yield build_netloc(*host_port) + + @property + def allow_all_prereleases(self): + # type: () -> bool + return self._candidate_prefs.allow_all_prereleases + + def set_allow_all_prereleases(self): + # type: () -> None + self._candidate_prefs.allow_all_prereleases = True + + def make_link_evaluator(self, project_name): + # type: (str) -> LinkEvaluator + canonical_name = canonicalize_name(project_name) + formats = self.format_control.get_allowed_formats(canonical_name) + + return LinkEvaluator( + project_name=project_name, + canonical_name=canonical_name, + formats=formats, + target_python=self._target_python, + allow_yanked=self._allow_yanked, + ignore_requires_python=self._ignore_requires_python, + ) + + def _sort_links(self, links): + # type: (Iterable[Link]) -> List[Link] + """ + Returns elements of links in order, non-egg links first, egg links + second, while eliminating duplicates + """ + eggs, no_eggs = [], [] + seen = set() # type: Set[Link] + for link in links: + if link not in seen: + seen.add(link) + if link.egg_fragment: + eggs.append(link) + else: + no_eggs.append(link) + return no_eggs + eggs + + def _log_skipped_link(self, link, reason): + # type: (Link, Text) -> None + if link not in self._logged_links: + # Mark this as a unicode string to prevent "UnicodeEncodeError: + # 'ascii' codec can't encode character" in Python 2 when + # the reason contains non-ascii characters. + # Also, put the link at the end so the reason is more visible + # and because the link string is usually very long. + logger.debug(u'Skipping link: %s: %s', reason, link) + self._logged_links.add(link) + + def get_install_candidate(self, link_evaluator, link): + # type: (LinkEvaluator, Link) -> Optional[InstallationCandidate] + """ + If the link is a candidate for install, convert it to an + InstallationCandidate and return it. Otherwise, return None. + """ + is_candidate, result = link_evaluator.evaluate_link(link) + if not is_candidate: + if result: + self._log_skipped_link(link, reason=result) + return None + + return InstallationCandidate( + project=link_evaluator.project_name, + link=link, + # Convert the Text result to str since InstallationCandidate + # accepts str. + version=str(result), + ) + + def evaluate_links(self, link_evaluator, links): + # type: (LinkEvaluator, Iterable[Link]) -> List[InstallationCandidate] + """ + Convert links that are candidates to InstallationCandidate objects. + """ + candidates = [] + for link in self._sort_links(links): + candidate = self.get_install_candidate(link_evaluator, link) + if candidate is not None: + candidates.append(candidate) + + return candidates + + def find_all_candidates(self, project_name): + # type: (str) -> List[InstallationCandidate] + """Find all available InstallationCandidate for project_name + + This checks index_urls and find_links. + All versions found are returned as an InstallationCandidate list. + + See LinkEvaluator.evaluate_link() for details on which files + are accepted. + """ + collected_links = self._link_collector.collect_links(project_name) + + link_evaluator = self.make_link_evaluator(project_name) + + find_links_versions = self.evaluate_links( + link_evaluator, + links=collected_links.find_links, + ) + + page_versions = [] + for page_url, page_links in collected_links.pages.items(): + logger.debug('Analyzing links from page %s', page_url) + with indent_log(): + new_versions = self.evaluate_links( + link_evaluator, + links=page_links, + ) + page_versions.extend(new_versions) + + file_versions = self.evaluate_links( + link_evaluator, + links=collected_links.files, + ) + if file_versions: + file_versions.sort(reverse=True) + logger.debug( + 'Local files found: %s', + ', '.join([ + url_to_path(candidate.link.url) + for candidate in file_versions + ]) + ) + + # This is an intentional priority ordering + return file_versions + find_links_versions + page_versions + + def make_candidate_evaluator( + self, + project_name, # type: str + specifier=None, # type: Optional[specifiers.BaseSpecifier] + hashes=None, # type: Optional[Hashes] + ): + # type: (...) -> CandidateEvaluator + """Create a CandidateEvaluator object to use. + """ + candidate_prefs = self._candidate_prefs + return CandidateEvaluator.create( + project_name=project_name, + target_python=self._target_python, + prefer_binary=candidate_prefs.prefer_binary, + allow_all_prereleases=candidate_prefs.allow_all_prereleases, + specifier=specifier, + hashes=hashes, + ) + + def find_best_candidate( + self, + project_name, # type: str + specifier=None, # type: Optional[specifiers.BaseSpecifier] + hashes=None, # type: Optional[Hashes] + ): + # type: (...) -> BestCandidateResult + """Find matches for the given project and specifier. + + :param specifier: An optional object implementing `filter` + (e.g. `packaging.specifiers.SpecifierSet`) to filter applicable + versions. + + :return: A `BestCandidateResult` instance. + """ + candidates = self.find_all_candidates(project_name) + candidate_evaluator = self.make_candidate_evaluator( + project_name=project_name, + specifier=specifier, + hashes=hashes, + ) + return candidate_evaluator.compute_best_candidate(candidates) + + def find_requirement(self, req, upgrade): + # type: (InstallRequirement, bool) -> Optional[Link] + """Try to find a Link matching req + + Expects req, an InstallRequirement and upgrade, a boolean + Returns a Link if found, + Raises DistributionNotFound or BestVersionAlreadyInstalled otherwise + """ + hashes = req.hashes(trust_internet=False) + best_candidate_result = self.find_best_candidate( + req.name, specifier=req.specifier, hashes=hashes, + ) + best_candidate = best_candidate_result.best_candidate + + installed_version = None # type: Optional[_BaseVersion] + if req.satisfied_by is not None: + installed_version = parse_version(req.satisfied_by.version) + + def _format_versions(cand_iter): + # This repeated parse_version and str() conversion is needed to + # handle different vendoring sources from pip and pkg_resources. + # If we stop using the pkg_resources provided specifier and start + # using our own, we can drop the cast to str(). + return ", ".join(sorted( + {str(c.version) for c in cand_iter}, + key=parse_version, + )) or "none" + + if installed_version is None and best_candidate is None: + logger.critical( + 'Could not find a version that satisfies the requirement %s ' + '(from versions: %s)', + req, + _format_versions(best_candidate_result.iter_all()), + ) + + raise DistributionNotFound( + 'No matching distribution found for %s' % req + ) + + best_installed = False + if installed_version and ( + best_candidate is None or + best_candidate.version <= installed_version): + best_installed = True + + if not upgrade and installed_version is not None: + if best_installed: + logger.debug( + 'Existing installed version (%s) is most up-to-date and ' + 'satisfies requirement', + installed_version, + ) + else: + logger.debug( + 'Existing installed version (%s) satisfies requirement ' + '(most up-to-date version is %s)', + installed_version, + best_candidate.version, + ) + return None + + if best_installed: + # We have an existing version, and its the best version + logger.debug( + 'Installed version (%s) is most up-to-date (past versions: ' + '%s)', + installed_version, + _format_versions(best_candidate_result.iter_applicable()), + ) + raise BestVersionAlreadyInstalled + + logger.debug( + 'Using version %s (newest of versions: %s)', + best_candidate.version, + _format_versions(best_candidate_result.iter_applicable()), + ) + return best_candidate.link + + +def _find_name_version_sep(fragment, canonical_name): + # type: (str, str) -> int + """Find the separator's index based on the package's canonical name. + + :param fragment: A + filename "fragment" (stem) or + egg fragment. + :param canonical_name: The package's canonical name. + + This function is needed since the canonicalized name does not necessarily + have the same length as the egg info's name part. An example:: + + >>> fragment = 'foo__bar-1.0' + >>> canonical_name = 'foo-bar' + >>> _find_name_version_sep(fragment, canonical_name) + 8 + """ + # Project name and version must be separated by one single dash. Find all + # occurrences of dashes; if the string in front of it matches the canonical + # name, this is the one separating the name and version parts. + for i, c in enumerate(fragment): + if c != "-": + continue + if canonicalize_name(fragment[:i]) == canonical_name: + return i + raise ValueError("{} does not match {}".format(fragment, canonical_name)) + + +def _extract_version_from_fragment(fragment, canonical_name): + # type: (str, str) -> Optional[str] + """Parse the version string from a + filename + "fragment" (stem) or egg fragment. + + :param fragment: The string to parse. E.g. foo-2.1 + :param canonical_name: The canonicalized name of the package this + belongs to. + """ + try: + version_start = _find_name_version_sep(fragment, canonical_name) + 1 + except ValueError: + return None + version = fragment[version_start:] + if not version: + return None + return version diff --git a/my_env/Lib/site-packages/pip/_internal/legacy_resolve.py b/my_env/Lib/site-packages/pip/_internal/legacy_resolve.py new file mode 100644 index 000000000..c24158f4d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/legacy_resolve.py @@ -0,0 +1,460 @@ +"""Dependency Resolution + +The dependency resolution in pip is performed as follows: + +for top-level requirements: + a. only one spec allowed per project, regardless of conflicts or not. + otherwise a "double requirement" exception is raised + b. they override sub-dependency requirements. +for sub-dependencies + a. "first found, wins" (where the order is breadth first) +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +import logging +import sys +from collections import defaultdict +from itertools import chain + +from pip._vendor.packaging import specifiers + +from pip._internal.exceptions import ( + BestVersionAlreadyInstalled, + DistributionNotFound, + HashError, + HashErrors, + UnsupportedPythonVersion, +) +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import ( + dist_in_usersite, + ensure_dir, + normalize_version_info, +) +from pip._internal.utils.packaging import ( + check_requires_python, + get_requires_python, +) +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Callable, DefaultDict, List, Optional, Set, Tuple + from pip._vendor import pkg_resources + + from pip._internal.distributions import AbstractDistribution + from pip._internal.network.session import PipSession + from pip._internal.index import PackageFinder + from pip._internal.operations.prepare import RequirementPreparer + from pip._internal.req.req_install import InstallRequirement + from pip._internal.req.req_set import RequirementSet + + InstallRequirementProvider = Callable[ + [str, InstallRequirement], InstallRequirement + ] + +logger = logging.getLogger(__name__) + + +def _check_dist_requires_python( + dist, # type: pkg_resources.Distribution + version_info, # type: Tuple[int, int, int] + ignore_requires_python=False, # type: bool +): + # type: (...) -> None + """ + Check whether the given Python version is compatible with a distribution's + "Requires-Python" value. + + :param version_info: A 3-tuple of ints representing the Python + major-minor-micro version to check. + :param ignore_requires_python: Whether to ignore the "Requires-Python" + value if the given Python version isn't compatible. + + :raises UnsupportedPythonVersion: When the given Python version isn't + compatible. + """ + requires_python = get_requires_python(dist) + try: + is_compatible = check_requires_python( + requires_python, version_info=version_info, + ) + except specifiers.InvalidSpecifier as exc: + logger.warning( + "Package %r has an invalid Requires-Python: %s", + dist.project_name, exc, + ) + return + + if is_compatible: + return + + version = '.'.join(map(str, version_info)) + if ignore_requires_python: + logger.debug( + 'Ignoring failed Requires-Python check for package %r: ' + '%s not in %r', + dist.project_name, version, requires_python, + ) + return + + raise UnsupportedPythonVersion( + 'Package {!r} requires a different Python: {} not in {!r}'.format( + dist.project_name, version, requires_python, + )) + + +class Resolver(object): + """Resolves which packages need to be installed/uninstalled to perform \ + the requested operation without breaking the requirements of any package. + """ + + _allowed_strategies = {"eager", "only-if-needed", "to-satisfy-only"} + + def __init__( + self, + preparer, # type: RequirementPreparer + session, # type: PipSession + finder, # type: PackageFinder + make_install_req, # type: InstallRequirementProvider + use_user_site, # type: bool + ignore_dependencies, # type: bool + ignore_installed, # type: bool + ignore_requires_python, # type: bool + force_reinstall, # type: bool + upgrade_strategy, # type: str + py_version_info=None, # type: Optional[Tuple[int, ...]] + ): + # type: (...) -> None + super(Resolver, self).__init__() + assert upgrade_strategy in self._allowed_strategies + + if py_version_info is None: + py_version_info = sys.version_info[:3] + else: + py_version_info = normalize_version_info(py_version_info) + + self._py_version_info = py_version_info + + self.preparer = preparer + self.finder = finder + self.session = session + + # This is set in resolve + self.require_hashes = None # type: Optional[bool] + + self.upgrade_strategy = upgrade_strategy + self.force_reinstall = force_reinstall + self.ignore_dependencies = ignore_dependencies + self.ignore_installed = ignore_installed + self.ignore_requires_python = ignore_requires_python + self.use_user_site = use_user_site + self._make_install_req = make_install_req + + self._discovered_dependencies = \ + defaultdict(list) # type: DefaultDict[str, List] + + def resolve(self, requirement_set): + # type: (RequirementSet) -> None + """Resolve what operations need to be done + + As a side-effect of this method, the packages (and their dependencies) + are downloaded, unpacked and prepared for installation. This + preparation is done by ``pip.operations.prepare``. + + Once PyPI has static dependency metadata available, it would be + possible to move the preparation to become a step separated from + dependency resolution. + """ + # make the wheelhouse + if self.preparer.wheel_download_dir: + ensure_dir(self.preparer.wheel_download_dir) + + # If any top-level requirement has a hash specified, enter + # hash-checking mode, which requires hashes from all. + root_reqs = ( + requirement_set.unnamed_requirements + + list(requirement_set.requirements.values()) + ) + self.require_hashes = ( + requirement_set.require_hashes or + any(req.has_hash_options for req in root_reqs) + ) + + # Display where finder is looking for packages + search_scope = self.finder.search_scope + locations = search_scope.get_formatted_locations() + if locations: + logger.info(locations) + + # Actually prepare the files, and collect any exceptions. Most hash + # exceptions cannot be checked ahead of time, because + # req.populate_link() needs to be called before we can make decisions + # based on link type. + discovered_reqs = [] # type: List[InstallRequirement] + hash_errors = HashErrors() + for req in chain(root_reqs, discovered_reqs): + try: + discovered_reqs.extend( + self._resolve_one(requirement_set, req) + ) + except HashError as exc: + exc.req = req + hash_errors.append(exc) + + if hash_errors: + raise hash_errors + + def _is_upgrade_allowed(self, req): + # type: (InstallRequirement) -> bool + if self.upgrade_strategy == "to-satisfy-only": + return False + elif self.upgrade_strategy == "eager": + return True + else: + assert self.upgrade_strategy == "only-if-needed" + return req.is_direct + + def _set_req_to_reinstall(self, req): + # type: (InstallRequirement) -> None + """ + Set a requirement to be installed. + """ + # Don't uninstall the conflict if doing a user install and the + # conflict is not a user install. + if not self.use_user_site or dist_in_usersite(req.satisfied_by): + req.conflicts_with = req.satisfied_by + req.satisfied_by = None + + def _check_skip_installed(self, req_to_install): + # type: (InstallRequirement) -> Optional[str] + """Check if req_to_install should be skipped. + + This will check if the req is installed, and whether we should upgrade + or reinstall it, taking into account all the relevant user options. + + After calling this req_to_install will only have satisfied_by set to + None if the req_to_install is to be upgraded/reinstalled etc. Any + other value will be a dist recording the current thing installed that + satisfies the requirement. + + Note that for vcs urls and the like we can't assess skipping in this + routine - we simply identify that we need to pull the thing down, + then later on it is pulled down and introspected to assess upgrade/ + reinstalls etc. + + :return: A text reason for why it was skipped, or None. + """ + if self.ignore_installed: + return None + + req_to_install.check_if_exists(self.use_user_site) + if not req_to_install.satisfied_by: + return None + + if self.force_reinstall: + self._set_req_to_reinstall(req_to_install) + return None + + if not self._is_upgrade_allowed(req_to_install): + if self.upgrade_strategy == "only-if-needed": + return 'already satisfied, skipping upgrade' + return 'already satisfied' + + # Check for the possibility of an upgrade. For link-based + # requirements we have to pull the tree down and inspect to assess + # the version #, so it's handled way down. + if not req_to_install.link: + try: + self.finder.find_requirement(req_to_install, upgrade=True) + except BestVersionAlreadyInstalled: + # Then the best version is installed. + return 'already up-to-date' + except DistributionNotFound: + # No distribution found, so we squash the error. It will + # be raised later when we re-try later to do the install. + # Why don't we just raise here? + pass + + self._set_req_to_reinstall(req_to_install) + return None + + def _get_abstract_dist_for(self, req): + # type: (InstallRequirement) -> AbstractDistribution + """Takes a InstallRequirement and returns a single AbstractDist \ + representing a prepared variant of the same. + """ + assert self.require_hashes is not None, ( + "require_hashes should have been set in Resolver.resolve()" + ) + + if req.editable: + return self.preparer.prepare_editable_requirement( + req, self.require_hashes, self.use_user_site, self.finder, + ) + + # satisfied_by is only evaluated by calling _check_skip_installed, + # so it must be None here. + assert req.satisfied_by is None + skip_reason = self._check_skip_installed(req) + + if req.satisfied_by: + return self.preparer.prepare_installed_requirement( + req, self.require_hashes, skip_reason + ) + + upgrade_allowed = self._is_upgrade_allowed(req) + + # We eagerly populate the link, since that's our "legacy" behavior. + req.populate_link(self.finder, upgrade_allowed, self.require_hashes) + abstract_dist = self.preparer.prepare_linked_requirement( + req, self.session, self.finder, self.require_hashes + ) + + # NOTE + # The following portion is for determining if a certain package is + # going to be re-installed/upgraded or not and reporting to the user. + # This should probably get cleaned up in a future refactor. + + # req.req is only avail after unpack for URL + # pkgs repeat check_if_exists to uninstall-on-upgrade + # (#14) + if not self.ignore_installed: + req.check_if_exists(self.use_user_site) + + if req.satisfied_by: + should_modify = ( + self.upgrade_strategy != "to-satisfy-only" or + self.force_reinstall or + self.ignore_installed or + req.link.scheme == 'file' + ) + if should_modify: + self._set_req_to_reinstall(req) + else: + logger.info( + 'Requirement already satisfied (use --upgrade to upgrade):' + ' %s', req, + ) + + return abstract_dist + + def _resolve_one( + self, + requirement_set, # type: RequirementSet + req_to_install # type: InstallRequirement + ): + # type: (...) -> List[InstallRequirement] + """Prepare a single requirements file. + + :return: A list of additional InstallRequirements to also install. + """ + # Tell user what we are doing for this requirement: + # obtain (editable), skipping, processing (local url), collecting + # (remote url or package name) + if req_to_install.constraint or req_to_install.prepared: + return [] + + req_to_install.prepared = True + + # register tmp src for cleanup in case something goes wrong + requirement_set.reqs_to_cleanup.append(req_to_install) + + abstract_dist = self._get_abstract_dist_for(req_to_install) + + # Parse and return dependencies + dist = abstract_dist.get_pkg_resources_distribution() + # This will raise UnsupportedPythonVersion if the given Python + # version isn't compatible with the distribution's Requires-Python. + _check_dist_requires_python( + dist, version_info=self._py_version_info, + ignore_requires_python=self.ignore_requires_python, + ) + + more_reqs = [] # type: List[InstallRequirement] + + def add_req(subreq, extras_requested): + sub_install_req = self._make_install_req( + str(subreq), + req_to_install, + ) + parent_req_name = req_to_install.name + to_scan_again, add_to_parent = requirement_set.add_requirement( + sub_install_req, + parent_req_name=parent_req_name, + extras_requested=extras_requested, + ) + if parent_req_name and add_to_parent: + self._discovered_dependencies[parent_req_name].append( + add_to_parent + ) + more_reqs.extend(to_scan_again) + + with indent_log(): + # We add req_to_install before its dependencies, so that we + # can refer to it when adding dependencies. + if not requirement_set.has_requirement(req_to_install.name): + # 'unnamed' requirements will get added here + req_to_install.is_direct = True + requirement_set.add_requirement( + req_to_install, parent_req_name=None, + ) + + if not self.ignore_dependencies: + if req_to_install.extras: + logger.debug( + "Installing extra requirements: %r", + ','.join(req_to_install.extras), + ) + missing_requested = sorted( + set(req_to_install.extras) - set(dist.extras) + ) + for missing in missing_requested: + logger.warning( + '%s does not provide the extra \'%s\'', + dist, missing + ) + + available_requested = sorted( + set(dist.extras) & set(req_to_install.extras) + ) + for subreq in dist.requires(available_requested): + add_req(subreq, extras_requested=available_requested) + + if not req_to_install.editable and not req_to_install.satisfied_by: + # XXX: --no-install leads this to report 'Successfully + # downloaded' for only non-editable reqs, even though we took + # action on them. + requirement_set.successfully_downloaded.append(req_to_install) + + return more_reqs + + def get_installation_order(self, req_set): + # type: (RequirementSet) -> List[InstallRequirement] + """Create the installation order. + + The installation order is topological - requirements are installed + before the requiring thing. We break cycles at an arbitrary point, + and make no other guarantees. + """ + # The current implementation, which we may change at any point + # installs the user specified things in the order given, except when + # dependencies must come earlier to achieve topological order. + order = [] + ordered_reqs = set() # type: Set[InstallRequirement] + + def schedule(req): + if req.satisfied_by or req in ordered_reqs: + return + if req.constraint: + return + ordered_reqs.add(req) + for dep in self._discovered_dependencies[req.name]: + schedule(dep) + order.append(req) + + for install_req in req_set.requirements.values(): + schedule(install_req) + return order diff --git a/my_env/Lib/site-packages/pip/_internal/locations.py b/my_env/Lib/site-packages/pip/_internal/locations.py new file mode 100644 index 000000000..1899c7d03 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/locations.py @@ -0,0 +1,156 @@ +"""Locations where we look for configs, install stuff, etc""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import os +import os.path +import platform +import site +import sys +import sysconfig +from distutils import sysconfig as distutils_sysconfig +from distutils.command.install import SCHEME_KEYS # type: ignore + +from pip._internal.utils import appdirs +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.virtualenv import running_under_virtualenv + +if MYPY_CHECK_RUNNING: + from typing import Any, Union, Dict, List, Optional + + +# Application Directories +USER_CACHE_DIR = appdirs.user_cache_dir("pip") + + +def get_major_minor_version(): + # type: () -> str + """ + Return the major-minor version of the current Python as a string, e.g. + "3.7" or "3.10". + """ + return '{}.{}'.format(*sys.version_info) + + +def get_src_prefix(): + if running_under_virtualenv(): + src_prefix = os.path.join(sys.prefix, 'src') + else: + # FIXME: keep src in cwd for now (it is not a temporary folder) + try: + src_prefix = os.path.join(os.getcwd(), 'src') + except OSError: + # In case the current working directory has been renamed or deleted + sys.exit( + "The folder you are executing pip from can no longer be found." + ) + + # under macOS + virtualenv sys.prefix is not properly resolved + # it is something like /path/to/python/bin/.. + return os.path.abspath(src_prefix) + + +# FIXME doesn't account for venv linked to global site-packages + +site_packages = sysconfig.get_path("purelib") # type: Optional[str] + +# This is because of a bug in PyPy's sysconfig module, see +# https://bitbucket.org/pypy/pypy/issues/2506/sysconfig-returns-incorrect-paths +# for more information. +if platform.python_implementation().lower() == "pypy": + site_packages = distutils_sysconfig.get_python_lib() +try: + # Use getusersitepackages if this is present, as it ensures that the + # value is initialised properly. + user_site = site.getusersitepackages() +except AttributeError: + user_site = site.USER_SITE + +if WINDOWS: + bin_py = os.path.join(sys.prefix, 'Scripts') + bin_user = os.path.join(user_site, 'Scripts') + # buildout uses 'bin' on Windows too? + if not os.path.exists(bin_py): + bin_py = os.path.join(sys.prefix, 'bin') + bin_user = os.path.join(user_site, 'bin') +else: + bin_py = os.path.join(sys.prefix, 'bin') + bin_user = os.path.join(user_site, 'bin') + + # Forcing to use /usr/local/bin for standard macOS framework installs + # Also log to ~/Library/Logs/ for use with the Console.app log viewer + if sys.platform[:6] == 'darwin' and sys.prefix[:16] == '/System/Library/': + bin_py = '/usr/local/bin' + + +def distutils_scheme(dist_name, user=False, home=None, root=None, + isolated=False, prefix=None): + # type:(str, bool, str, str, bool, str) -> dict + """ + Return a distutils install scheme + """ + from distutils.dist import Distribution + + scheme = {} + + if isolated: + extra_dist_args = {"script_args": ["--no-user-cfg"]} + else: + extra_dist_args = {} + dist_args = {'name': dist_name} # type: Dict[str, Union[str, List[str]]] + dist_args.update(extra_dist_args) + + d = Distribution(dist_args) + # Ignoring, typeshed issue reported python/typeshed/issues/2567 + d.parse_config_files() + # NOTE: Ignoring type since mypy can't find attributes on 'Command' + i = d.get_command_obj('install', create=True) # type: Any + assert i is not None + # NOTE: setting user or home has the side-effect of creating the home dir + # or user base for installations during finalize_options() + # ideally, we'd prefer a scheme class that has no side-effects. + assert not (user and prefix), "user={} prefix={}".format(user, prefix) + assert not (home and prefix), "home={} prefix={}".format(home, prefix) + i.user = user or i.user + if user or home: + i.prefix = "" + i.prefix = prefix or i.prefix + i.home = home or i.home + i.root = root or i.root + i.finalize_options() + for key in SCHEME_KEYS: + scheme[key] = getattr(i, 'install_' + key) + + # install_lib specified in setup.cfg should install *everything* + # into there (i.e. it takes precedence over both purelib and + # platlib). Note, i.install_lib is *always* set after + # finalize_options(); we only want to override here if the user + # has explicitly requested it hence going back to the config + + # Ignoring, typeshed issue reported python/typeshed/issues/2567 + if 'install_lib' in d.get_option_dict('install'): # type: ignore + scheme.update(dict(purelib=i.install_lib, platlib=i.install_lib)) + + if running_under_virtualenv(): + scheme['headers'] = os.path.join( + sys.prefix, + 'include', + 'site', + 'python{}'.format(get_major_minor_version()), + dist_name, + ) + + if root is not None: + path_no_drive = os.path.splitdrive( + os.path.abspath(scheme["headers"]))[1] + scheme["headers"] = os.path.join( + root, + path_no_drive[1:], + ) + + return scheme diff --git a/my_env/Lib/site-packages/pip/_internal/main.py b/my_env/Lib/site-packages/pip/_internal/main.py new file mode 100644 index 000000000..1e922402a --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/main.py @@ -0,0 +1,47 @@ +"""Primary application entrypoint. +""" +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import locale +import logging +import os +import sys + +from pip._internal.cli.autocompletion import autocomplete +from pip._internal.cli.main_parser import parse_command +from pip._internal.commands import create_command +from pip._internal.exceptions import PipError +from pip._internal.utils import deprecation + +logger = logging.getLogger(__name__) + + +def main(args=None): + if args is None: + args = sys.argv[1:] + + # Configure our deprecation warnings to be sent through loggers + deprecation.install_warning_logger() + + autocomplete() + + try: + cmd_name, cmd_args = parse_command(args) + except PipError as exc: + sys.stderr.write("ERROR: %s" % exc) + sys.stderr.write(os.linesep) + sys.exit(1) + + # Needed for locale.getpreferredencoding(False) to work + # in pip._internal.utils.encoding.auto_decode + try: + locale.setlocale(locale.LC_ALL, '') + except locale.Error as e: + # setlocale can apparently crash if locale are uninitialized + logger.debug("Ignoring error %s when setting locale", e) + command = create_command(cmd_name, isolated=("--isolated" in cmd_args)) + + return command.main(cmd_args) diff --git a/my_env/Lib/site-packages/pip/_internal/models/__init__.py b/my_env/Lib/site-packages/pip/_internal/models/__init__.py new file mode 100644 index 000000000..7855226e4 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/models/__init__.py @@ -0,0 +1,2 @@ +"""A package that contains models that represent entities. +""" diff --git a/my_env/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..93a451b32 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-37.pyc new file mode 100644 index 000000000..d1c089a7b Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-37.pyc new file mode 100644 index 000000000..0496d8d9b Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-37.pyc new file mode 100644 index 000000000..eda255c11 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-37.pyc new file mode 100644 index 000000000..77a0c51ea Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-37.pyc new file mode 100644 index 000000000..76be414c8 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-37.pyc new file mode 100644 index 000000000..3fbcf2125 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-37.pyc new file mode 100644 index 000000000..3e808c68a Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/models/candidate.py b/my_env/Lib/site-packages/pip/_internal/models/candidate.py new file mode 100644 index 000000000..4d49604dd --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/models/candidate.py @@ -0,0 +1,39 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.utils.models import KeyBasedCompareMixin +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from pip._vendor.packaging.version import _BaseVersion + from pip._internal.models.link import Link + from typing import Any + + +class InstallationCandidate(KeyBasedCompareMixin): + """Represents a potential "candidate" for installation. + """ + + def __init__(self, project, version, link): + # type: (Any, str, Link) -> None + self.project = project + self.version = parse_version(version) # type: _BaseVersion + self.link = link + + super(InstallationCandidate, self).__init__( + key=(self.project, self.version, self.link), + defining_class=InstallationCandidate + ) + + def __repr__(self): + # type: () -> str + return "".format( + self.project, self.version, self.link, + ) + + def __str__(self): + return '{!r} candidate (version {} at {})'.format( + self.project, self.version, self.link, + ) diff --git a/my_env/Lib/site-packages/pip/_internal/models/format_control.py b/my_env/Lib/site-packages/pip/_internal/models/format_control.py new file mode 100644 index 000000000..5489b51d0 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/models/format_control.py @@ -0,0 +1,82 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import CommandError +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional, Set, FrozenSet + + +class FormatControl(object): + """Helper for managing formats from which a package can be installed. + """ + + def __init__(self, no_binary=None, only_binary=None): + # type: (Optional[Set], Optional[Set]) -> None + if no_binary is None: + no_binary = set() + if only_binary is None: + only_binary = set() + + self.no_binary = no_binary + self.only_binary = only_binary + + def __eq__(self, other): + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return "{}({}, {})".format( + self.__class__.__name__, + self.no_binary, + self.only_binary + ) + + @staticmethod + def handle_mutual_excludes(value, target, other): + # type: (str, Optional[Set], Optional[Set]) -> None + if value.startswith('-'): + raise CommandError( + "--no-binary / --only-binary option requires 1 argument." + ) + new = value.split(',') + while ':all:' in new: + other.clear() + target.clear() + target.add(':all:') + del new[:new.index(':all:') + 1] + # Without a none, we want to discard everything as :all: covers it + if ':none:' not in new: + return + for name in new: + if name == ':none:': + target.clear() + continue + name = canonicalize_name(name) + other.discard(name) + target.add(name) + + def get_allowed_formats(self, canonical_name): + # type: (str) -> FrozenSet + result = {"binary", "source"} + if canonical_name in self.only_binary: + result.discard('source') + elif canonical_name in self.no_binary: + result.discard('binary') + elif ':all:' in self.only_binary: + result.discard('source') + elif ':all:' in self.no_binary: + result.discard('binary') + return frozenset(result) + + def disallow_binaries(self): + # type: () -> None + self.handle_mutual_excludes( + ':all:', self.no_binary, self.only_binary, + ) diff --git a/my_env/Lib/site-packages/pip/_internal/models/index.py b/my_env/Lib/site-packages/pip/_internal/models/index.py new file mode 100644 index 000000000..ead1efbda --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/models/index.py @@ -0,0 +1,31 @@ +from pip._vendor.six.moves.urllib import parse as urllib_parse + + +class PackageIndex(object): + """Represents a Package Index and provides easier access to endpoints + """ + + def __init__(self, url, file_storage_domain): + # type: (str, str) -> None + super(PackageIndex, self).__init__() + self.url = url + self.netloc = urllib_parse.urlsplit(url).netloc + self.simple_url = self._url_for_path('simple') + self.pypi_url = self._url_for_path('pypi') + + # This is part of a temporary hack used to block installs of PyPI + # packages which depend on external urls only necessary until PyPI can + # block such packages themselves + self.file_storage_domain = file_storage_domain + + def _url_for_path(self, path): + # type: (str) -> str + return urllib_parse.urljoin(self.url, path) + + +PyPI = PackageIndex( + 'https://pypi.org/', file_storage_domain='files.pythonhosted.org' +) +TestPyPI = PackageIndex( + 'https://test.pypi.org/', file_storage_domain='test-files.pythonhosted.org' +) diff --git a/my_env/Lib/site-packages/pip/_internal/models/link.py b/my_env/Lib/site-packages/pip/_internal/models/link.py new file mode 100644 index 000000000..2d50d1798 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/models/link.py @@ -0,0 +1,227 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import os +import posixpath +import re + +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip._internal.utils.filetypes import WHEEL_EXTENSION +from pip._internal.utils.misc import ( + redact_auth_from_url, + split_auth_from_netloc, + splitext, +) +from pip._internal.utils.models import KeyBasedCompareMixin +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.urls import path_to_url, url_to_path + +if MYPY_CHECK_RUNNING: + from typing import Optional, Text, Tuple, Union + from pip._internal.collector import HTMLPage + from pip._internal.utils.hashes import Hashes + + +class Link(KeyBasedCompareMixin): + """Represents a parsed link from a Package Index's simple URL + """ + + def __init__( + self, + url, # type: str + comes_from=None, # type: Optional[Union[str, HTMLPage]] + requires_python=None, # type: Optional[str] + yanked_reason=None, # type: Optional[Text] + ): + # type: (...) -> None + """ + :param url: url of the resource pointed to (href of the link) + :param comes_from: instance of HTMLPage where the link was found, + or string. + :param requires_python: String containing the `Requires-Python` + metadata field, specified in PEP 345. This may be specified by + a data-requires-python attribute in the HTML link tag, as + described in PEP 503. + :param yanked_reason: the reason the file has been yanked, if the + file has been yanked, or None if the file hasn't been yanked. + This is the value of the "data-yanked" attribute, if present, in + a simple repository HTML link. If the file has been yanked but + no reason was provided, this should be the empty string. See + PEP 592 for more information and the specification. + """ + + # url can be a UNC windows share + if url.startswith('\\\\'): + url = path_to_url(url) + + self._parsed_url = urllib_parse.urlsplit(url) + # Store the url as a private attribute to prevent accidentally + # trying to set a new value. + self._url = url + + self.comes_from = comes_from + self.requires_python = requires_python if requires_python else None + self.yanked_reason = yanked_reason + + super(Link, self).__init__(key=url, defining_class=Link) + + def __str__(self): + if self.requires_python: + rp = ' (requires-python:%s)' % self.requires_python + else: + rp = '' + if self.comes_from: + return '%s (from %s)%s' % (redact_auth_from_url(self._url), + self.comes_from, rp) + else: + return redact_auth_from_url(str(self._url)) + + def __repr__(self): + return '' % self + + @property + def url(self): + # type: () -> str + return self._url + + @property + def filename(self): + # type: () -> str + path = self.path.rstrip('/') + name = posixpath.basename(path) + if not name: + # Make sure we don't leak auth information if the netloc + # includes a username and password. + netloc, user_pass = split_auth_from_netloc(self.netloc) + return netloc + + name = urllib_parse.unquote(name) + assert name, ('URL %r produced no filename' % self._url) + return name + + @property + def file_path(self): + # type: () -> str + return url_to_path(self.url) + + @property + def scheme(self): + # type: () -> str + return self._parsed_url.scheme + + @property + def netloc(self): + # type: () -> str + """ + This can contain auth information. + """ + return self._parsed_url.netloc + + @property + def path(self): + # type: () -> str + return urllib_parse.unquote(self._parsed_url.path) + + def splitext(self): + # type: () -> Tuple[str, str] + return splitext(posixpath.basename(self.path.rstrip('/'))) + + @property + def ext(self): + # type: () -> str + return self.splitext()[1] + + @property + def url_without_fragment(self): + # type: () -> str + scheme, netloc, path, query, fragment = self._parsed_url + return urllib_parse.urlunsplit((scheme, netloc, path, query, None)) + + _egg_fragment_re = re.compile(r'[#&]egg=([^&]*)') + + @property + def egg_fragment(self): + # type: () -> Optional[str] + match = self._egg_fragment_re.search(self._url) + if not match: + return None + return match.group(1) + + _subdirectory_fragment_re = re.compile(r'[#&]subdirectory=([^&]*)') + + @property + def subdirectory_fragment(self): + # type: () -> Optional[str] + match = self._subdirectory_fragment_re.search(self._url) + if not match: + return None + return match.group(1) + + _hash_re = re.compile( + r'(sha1|sha224|sha384|sha256|sha512|md5)=([a-f0-9]+)' + ) + + @property + def hash(self): + # type: () -> Optional[str] + match = self._hash_re.search(self._url) + if match: + return match.group(2) + return None + + @property + def hash_name(self): + # type: () -> Optional[str] + match = self._hash_re.search(self._url) + if match: + return match.group(1) + return None + + @property + def show_url(self): + # type: () -> Optional[str] + return posixpath.basename(self._url.split('#', 1)[0].split('?', 1)[0]) + + @property + def is_file(self): + # type: () -> bool + return self.scheme == 'file' + + def is_existing_dir(self): + # type: () -> bool + return self.is_file and os.path.isdir(self.file_path) + + @property + def is_wheel(self): + # type: () -> bool + return self.ext == WHEEL_EXTENSION + + @property + def is_vcs(self): + # type: () -> bool + from pip._internal.vcs import vcs + + return self.scheme in vcs.all_schemes + + @property + def is_yanked(self): + # type: () -> bool + return self.yanked_reason is not None + + @property + def has_hash(self): + return self.hash_name is not None + + def is_hash_allowed(self, hashes): + # type: (Optional[Hashes]) -> bool + """ + Return True if the link has a hash and it is allowed. + """ + if hashes is None or not self.has_hash: + return False + # Assert non-None so mypy knows self.hash_name and self.hash are str. + assert self.hash_name is not None + assert self.hash is not None + + return hashes.is_hash_allowed(self.hash_name, hex_digest=self.hash) diff --git a/my_env/Lib/site-packages/pip/_internal/models/search_scope.py b/my_env/Lib/site-packages/pip/_internal/models/search_scope.py new file mode 100644 index 000000000..6e387068b --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/models/search_scope.py @@ -0,0 +1,116 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import itertools +import logging +import os +import posixpath + +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip._internal.models.index import PyPI +from pip._internal.utils.compat import HAS_TLS +from pip._internal.utils.misc import normalize_path, redact_auth_from_url +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import List + + +logger = logging.getLogger(__name__) + + +class SearchScope(object): + + """ + Encapsulates the locations that pip is configured to search. + """ + + @classmethod + def create( + cls, + find_links, # type: List[str] + index_urls, # type: List[str] + ): + # type: (...) -> SearchScope + """ + Create a SearchScope object after normalizing the `find_links`. + """ + # Build find_links. If an argument starts with ~, it may be + # a local file relative to a home directory. So try normalizing + # it and if it exists, use the normalized version. + # This is deliberately conservative - it might be fine just to + # blindly normalize anything starting with a ~... + built_find_links = [] # type: List[str] + for link in find_links: + if link.startswith('~'): + new_link = normalize_path(link) + if os.path.exists(new_link): + link = new_link + built_find_links.append(link) + + # If we don't have TLS enabled, then WARN if anyplace we're looking + # relies on TLS. + if not HAS_TLS: + for link in itertools.chain(index_urls, built_find_links): + parsed = urllib_parse.urlparse(link) + if parsed.scheme == 'https': + logger.warning( + 'pip is configured with locations that require ' + 'TLS/SSL, however the ssl module in Python is not ' + 'available.' + ) + break + + return cls( + find_links=built_find_links, + index_urls=index_urls, + ) + + def __init__( + self, + find_links, # type: List[str] + index_urls, # type: List[str] + ): + # type: (...) -> None + self.find_links = find_links + self.index_urls = index_urls + + def get_formatted_locations(self): + # type: () -> str + lines = [] + if self.index_urls and self.index_urls != [PyPI.simple_url]: + lines.append( + 'Looking in indexes: {}'.format(', '.join( + redact_auth_from_url(url) for url in self.index_urls)) + ) + if self.find_links: + lines.append( + 'Looking in links: {}'.format(', '.join( + redact_auth_from_url(url) for url in self.find_links)) + ) + return '\n'.join(lines) + + def get_index_urls_locations(self, project_name): + # type: (str) -> List[str] + """Returns the locations found via self.index_urls + + Checks the url_name on the main (first in the list) index and + use this url_name to produce all locations + """ + + def mkurl_pypi_url(url): + loc = posixpath.join( + url, + urllib_parse.quote(canonicalize_name(project_name))) + # For maximum compatibility with easy_install, ensure the path + # ends in a trailing slash. Although this isn't in the spec + # (and PyPI can handle it without the slash) some other index + # implementations might break if they relied on easy_install's + # behavior. + if not loc.endswith('/'): + loc = loc + '/' + return loc + + return [mkurl_pypi_url(url) for url in self.index_urls] diff --git a/my_env/Lib/site-packages/pip/_internal/models/selection_prefs.py b/my_env/Lib/site-packages/pip/_internal/models/selection_prefs.py new file mode 100644 index 000000000..f58fdce9c --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/models/selection_prefs.py @@ -0,0 +1,47 @@ +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional + from pip._internal.models.format_control import FormatControl + + +class SelectionPreferences(object): + + """ + Encapsulates the candidate selection preferences for downloading + and installing files. + """ + + # Don't include an allow_yanked default value to make sure each call + # site considers whether yanked releases are allowed. This also causes + # that decision to be made explicit in the calling code, which helps + # people when reading the code. + def __init__( + self, + allow_yanked, # type: bool + allow_all_prereleases=False, # type: bool + format_control=None, # type: Optional[FormatControl] + prefer_binary=False, # type: bool + ignore_requires_python=None, # type: Optional[bool] + ): + # type: (...) -> None + """Create a SelectionPreferences object. + + :param allow_yanked: Whether files marked as yanked (in the sense + of PEP 592) are permitted to be candidates for install. + :param format_control: A FormatControl object or None. Used to control + the selection of source packages / binary packages when consulting + the index and links. + :param prefer_binary: Whether to prefer an old, but valid, binary + dist over a new source dist. + :param ignore_requires_python: Whether to ignore incompatible + "Requires-Python" values in links. Defaults to False. + """ + if ignore_requires_python is None: + ignore_requires_python = False + + self.allow_yanked = allow_yanked + self.allow_all_prereleases = allow_all_prereleases + self.format_control = format_control + self.prefer_binary = prefer_binary + self.ignore_requires_python = ignore_requires_python diff --git a/my_env/Lib/site-packages/pip/_internal/models/target_python.py b/my_env/Lib/site-packages/pip/_internal/models/target_python.py new file mode 100644 index 000000000..a23b79c4e --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/models/target_python.py @@ -0,0 +1,106 @@ +import sys + +from pip._internal.pep425tags import get_supported, version_info_to_nodot +from pip._internal.utils.misc import normalize_version_info +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import List, Optional, Tuple + from pip._internal.pep425tags import Pep425Tag + + +class TargetPython(object): + + """ + Encapsulates the properties of a Python interpreter one is targeting + for a package install, download, etc. + """ + + def __init__( + self, + platform=None, # type: Optional[str] + py_version_info=None, # type: Optional[Tuple[int, ...]] + abi=None, # type: Optional[str] + implementation=None, # type: Optional[str] + ): + # type: (...) -> None + """ + :param platform: A string or None. If None, searches for packages + that are supported by the current system. Otherwise, will find + packages that can be built on the platform passed in. These + packages will only be downloaded for distribution: they will + not be built locally. + :param py_version_info: An optional tuple of ints representing the + Python version information to use (e.g. `sys.version_info[:3]`). + This can have length 1, 2, or 3 when provided. + :param abi: A string or None. This is passed to pep425tags.py's + get_supported() function as is. + :param implementation: A string or None. This is passed to + pep425tags.py's get_supported() function as is. + """ + # Store the given py_version_info for when we call get_supported(). + self._given_py_version_info = py_version_info + + if py_version_info is None: + py_version_info = sys.version_info[:3] + else: + py_version_info = normalize_version_info(py_version_info) + + py_version = '.'.join(map(str, py_version_info[:2])) + + self.abi = abi + self.implementation = implementation + self.platform = platform + self.py_version = py_version + self.py_version_info = py_version_info + + # This is used to cache the return value of get_tags(). + self._valid_tags = None # type: Optional[List[Pep425Tag]] + + def format_given(self): + # type: () -> str + """ + Format the given, non-None attributes for display. + """ + display_version = None + if self._given_py_version_info is not None: + display_version = '.'.join( + str(part) for part in self._given_py_version_info + ) + + key_values = [ + ('platform', self.platform), + ('version_info', display_version), + ('abi', self.abi), + ('implementation', self.implementation), + ] + return ' '.join( + '{}={!r}'.format(key, value) for key, value in key_values + if value is not None + ) + + def get_tags(self): + # type: () -> List[Pep425Tag] + """ + Return the supported PEP 425 tags to check wheel candidates against. + + The tags are returned in order of preference (most preferred first). + """ + if self._valid_tags is None: + # Pass versions=None if no py_version_info was given since + # versions=None uses special default logic. + py_version_info = self._given_py_version_info + if py_version_info is None: + versions = None + else: + versions = [version_info_to_nodot(py_version_info)] + + tags = get_supported( + versions=versions, + platform=self.platform, + abi=self.abi, + impl=self.implementation, + ) + self._valid_tags = tags + + return self._valid_tags diff --git a/my_env/Lib/site-packages/pip/_internal/network/__init__.py b/my_env/Lib/site-packages/pip/_internal/network/__init__.py new file mode 100644 index 000000000..b51bde91b --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/network/__init__.py @@ -0,0 +1,2 @@ +"""Contains purely network-related utilities. +""" diff --git a/my_env/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..271fd0e42 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-37.pyc new file mode 100644 index 000000000..7c99f0c6d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-37.pyc new file mode 100644 index 000000000..34b09ca77 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-37.pyc new file mode 100644 index 000000000..5678a42a3 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-37.pyc new file mode 100644 index 000000000..fbd3b6a77 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/network/auth.py b/my_env/Lib/site-packages/pip/_internal/network/auth.py new file mode 100644 index 000000000..1e1da54ca --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/network/auth.py @@ -0,0 +1,298 @@ +"""Network Authentication Helpers + +Contains interface (MultiDomainBasicAuth) and associated glue code for +providing credentials in the context of network requests. +""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import logging + +from pip._vendor.requests.auth import AuthBase, HTTPBasicAuth +from pip._vendor.requests.utils import get_netrc_auth +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip._internal.utils.misc import ( + ask, + ask_input, + ask_password, + remove_auth_from_url, + split_auth_netloc_from_url, +) +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from optparse import Values + from typing import Dict, Optional, Tuple + + from pip._internal.vcs.versioncontrol import AuthInfo + + Credentials = Tuple[str, str, str] + +logger = logging.getLogger(__name__) + +try: + import keyring # noqa +except ImportError: + keyring = None +except Exception as exc: + logger.warning( + "Keyring is skipped due to an exception: %s", str(exc), + ) + keyring = None + + +def get_keyring_auth(url, username): + """Return the tuple auth for a given url from keyring.""" + if not url or not keyring: + return None + + try: + try: + get_credential = keyring.get_credential + except AttributeError: + pass + else: + logger.debug("Getting credentials from keyring for %s", url) + cred = get_credential(url, username) + if cred is not None: + return cred.username, cred.password + return None + + if username: + logger.debug("Getting password from keyring for %s", url) + password = keyring.get_password(url, username) + if password: + return username, password + + except Exception as exc: + logger.warning( + "Keyring is skipped due to an exception: %s", str(exc), + ) + + +class MultiDomainBasicAuth(AuthBase): + + def __init__(self, prompting=True, index_urls=None): + # type: (bool, Optional[Values]) -> None + self.prompting = prompting + self.index_urls = index_urls + self.passwords = {} # type: Dict[str, AuthInfo] + # When the user is prompted to enter credentials and keyring is + # available, we will offer to save them. If the user accepts, + # this value is set to the credentials they entered. After the + # request authenticates, the caller should call + # ``save_credentials`` to save these. + self._credentials_to_save = None # type: Optional[Credentials] + + def _get_index_url(self, url): + """Return the original index URL matching the requested URL. + + Cached or dynamically generated credentials may work against + the original index URL rather than just the netloc. + + The provided url should have had its username and password + removed already. If the original index url had credentials then + they will be included in the return value. + + Returns None if no matching index was found, or if --no-index + was specified by the user. + """ + if not url or not self.index_urls: + return None + + for u in self.index_urls: + prefix = remove_auth_from_url(u).rstrip("/") + "/" + if url.startswith(prefix): + return u + + def _get_new_credentials(self, original_url, allow_netrc=True, + allow_keyring=True): + """Find and return credentials for the specified URL.""" + # Split the credentials and netloc from the url. + url, netloc, url_user_password = split_auth_netloc_from_url( + original_url, + ) + + # Start with the credentials embedded in the url + username, password = url_user_password + if username is not None and password is not None: + logger.debug("Found credentials in url for %s", netloc) + return url_user_password + + # Find a matching index url for this request + index_url = self._get_index_url(url) + if index_url: + # Split the credentials from the url. + index_info = split_auth_netloc_from_url(index_url) + if index_info: + index_url, _, index_url_user_password = index_info + logger.debug("Found index url %s", index_url) + + # If an index URL was found, try its embedded credentials + if index_url and index_url_user_password[0] is not None: + username, password = index_url_user_password + if username is not None and password is not None: + logger.debug("Found credentials in index url for %s", netloc) + return index_url_user_password + + # Get creds from netrc if we still don't have them + if allow_netrc: + netrc_auth = get_netrc_auth(original_url) + if netrc_auth: + logger.debug("Found credentials in netrc for %s", netloc) + return netrc_auth + + # If we don't have a password and keyring is available, use it. + if allow_keyring: + # The index url is more specific than the netloc, so try it first + kr_auth = ( + get_keyring_auth(index_url, username) or + get_keyring_auth(netloc, username) + ) + if kr_auth: + logger.debug("Found credentials in keyring for %s", netloc) + return kr_auth + + return username, password + + def _get_url_and_credentials(self, original_url): + """Return the credentials to use for the provided URL. + + If allowed, netrc and keyring may be used to obtain the + correct credentials. + + Returns (url_without_credentials, username, password). Note + that even if the original URL contains credentials, this + function may return a different username and password. + """ + url, netloc, _ = split_auth_netloc_from_url(original_url) + + # Use any stored credentials that we have for this netloc + username, password = self.passwords.get(netloc, (None, None)) + + if username is None and password is None: + # No stored credentials. Acquire new credentials without prompting + # the user. (e.g. from netrc, keyring, or the URL itself) + username, password = self._get_new_credentials(original_url) + + if username is not None or password is not None: + # Convert the username and password if they're None, so that + # this netloc will show up as "cached" in the conditional above. + # Further, HTTPBasicAuth doesn't accept None, so it makes sense to + # cache the value that is going to be used. + username = username or "" + password = password or "" + + # Store any acquired credentials. + self.passwords[netloc] = (username, password) + + assert ( + # Credentials were found + (username is not None and password is not None) or + # Credentials were not found + (username is None and password is None) + ), "Could not load credentials from url: {}".format(original_url) + + return url, username, password + + def __call__(self, req): + # Get credentials for this request + url, username, password = self._get_url_and_credentials(req.url) + + # Set the url of the request to the url without any credentials + req.url = url + + if username is not None and password is not None: + # Send the basic auth with this request + req = HTTPBasicAuth(username, password)(req) + + # Attach a hook to handle 401 responses + req.register_hook("response", self.handle_401) + + return req + + # Factored out to allow for easy patching in tests + def _prompt_for_password(self, netloc): + username = ask_input("User for %s: " % netloc) + if not username: + return None, None + auth = get_keyring_auth(netloc, username) + if auth: + return auth[0], auth[1], False + password = ask_password("Password: ") + return username, password, True + + # Factored out to allow for easy patching in tests + def _should_save_password_to_keyring(self): + if not keyring: + return False + return ask("Save credentials to keyring [y/N]: ", ["y", "n"]) == "y" + + def handle_401(self, resp, **kwargs): + # We only care about 401 responses, anything else we want to just + # pass through the actual response + if resp.status_code != 401: + return resp + + # We are not able to prompt the user so simply return the response + if not self.prompting: + return resp + + parsed = urllib_parse.urlparse(resp.url) + + # Prompt the user for a new username and password + username, password, save = self._prompt_for_password(parsed.netloc) + + # Store the new username and password to use for future requests + self._credentials_to_save = None + if username is not None and password is not None: + self.passwords[parsed.netloc] = (username, password) + + # Prompt to save the password to keyring + if save and self._should_save_password_to_keyring(): + self._credentials_to_save = (parsed.netloc, username, password) + + # Consume content and release the original connection to allow our new + # request to reuse the same one. + resp.content + resp.raw.release_conn() + + # Add our new username and password to the request + req = HTTPBasicAuth(username or "", password or "")(resp.request) + req.register_hook("response", self.warn_on_401) + + # On successful request, save the credentials that were used to + # keyring. (Note that if the user responded "no" above, this member + # is not set and nothing will be saved.) + if self._credentials_to_save: + req.register_hook("response", self.save_credentials) + + # Send our new request + new_resp = resp.connection.send(req, **kwargs) + new_resp.history.append(resp) + + return new_resp + + def warn_on_401(self, resp, **kwargs): + """Response callback to warn about incorrect credentials.""" + if resp.status_code == 401: + logger.warning( + '401 Error, Credentials not correct for %s', resp.request.url, + ) + + def save_credentials(self, resp, **kwargs): + """Response callback to save credentials on success.""" + assert keyring is not None, "should never reach here without keyring" + if not keyring: + return + + creds = self._credentials_to_save + self._credentials_to_save = None + if creds and resp.status_code < 400: + try: + logger.info('Saving credentials to keyring') + keyring.set_password(*creds) + except Exception: + logger.exception('Failed to save credentials') diff --git a/my_env/Lib/site-packages/pip/_internal/network/cache.py b/my_env/Lib/site-packages/pip/_internal/network/cache.py new file mode 100644 index 000000000..d23c0ffaf --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/network/cache.py @@ -0,0 +1,75 @@ +"""HTTP cache implementation. +""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import os +from contextlib import contextmanager + +from pip._vendor.cachecontrol.cache import BaseCache +from pip._vendor.cachecontrol.caches import FileCache + +from pip._internal.utils.filesystem import adjacent_tmp_file, replace +from pip._internal.utils.misc import ensure_dir +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional + + +@contextmanager +def suppressed_cache_errors(): + """If we can't access the cache then we can just skip caching and process + requests as if caching wasn't enabled. + """ + try: + yield + except (OSError, IOError): + pass + + +class SafeFileCache(BaseCache): + """ + A file based cache which is safe to use even when the target directory may + not be accessible or writable. + """ + + def __init__(self, directory): + # type: (str) -> None + assert directory is not None, "Cache directory must not be None." + super(SafeFileCache, self).__init__() + self.directory = directory + + def _get_cache_path(self, name): + # type: (str) -> str + # From cachecontrol.caches.file_cache.FileCache._fn, brought into our + # class for backwards-compatibility and to avoid using a non-public + # method. + hashed = FileCache.encode(name) + parts = list(hashed[:5]) + [hashed] + return os.path.join(self.directory, *parts) + + def get(self, key): + # type: (str) -> Optional[bytes] + path = self._get_cache_path(key) + with suppressed_cache_errors(): + with open(path, 'rb') as f: + return f.read() + + def set(self, key, value): + # type: (str, bytes) -> None + path = self._get_cache_path(key) + with suppressed_cache_errors(): + ensure_dir(os.path.dirname(path)) + + with adjacent_tmp_file(path) as f: + f.write(value) + + replace(f.name, path) + + def delete(self, key): + # type: (str) -> None + path = self._get_cache_path(key) + with suppressed_cache_errors(): + os.remove(path) diff --git a/my_env/Lib/site-packages/pip/_internal/network/session.py b/my_env/Lib/site-packages/pip/_internal/network/session.py new file mode 100644 index 000000000..ac6e2622f --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/network/session.py @@ -0,0 +1,426 @@ +"""PipSession and supporting code, containing all pip-specific +network request configuration and behavior. +""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import email.utils +import json +import logging +import mimetypes +import os +import platform +import sys +import warnings + +from pip._vendor import requests, six, urllib3 +from pip._vendor.cachecontrol import CacheControlAdapter +from pip._vendor.requests.adapters import BaseAdapter, HTTPAdapter +from pip._vendor.requests.models import Response +from pip._vendor.requests.structures import CaseInsensitiveDict +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.urllib3.exceptions import InsecureRequestWarning + +from pip import __version__ +from pip._internal.network.auth import MultiDomainBasicAuth +from pip._internal.network.cache import SafeFileCache +# Import ssl from compat so the initial import occurs in only one place. +from pip._internal.utils.compat import HAS_TLS, ipaddress, ssl +from pip._internal.utils.filesystem import check_path_owner +from pip._internal.utils.glibc import libc_ver +from pip._internal.utils.misc import ( + build_url_from_netloc, + get_installed_version, + parse_netloc, +) +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.urls import url_to_path + +if MYPY_CHECK_RUNNING: + from typing import ( + Iterator, List, Optional, Tuple, Union, + ) + + from pip._internal.models.link import Link + + SecureOrigin = Tuple[str, str, Optional[Union[int, str]]] + + +logger = logging.getLogger(__name__) + + +# Ignore warning raised when using --trusted-host. +warnings.filterwarnings("ignore", category=InsecureRequestWarning) + + +SECURE_ORIGINS = [ + # protocol, hostname, port + # Taken from Chrome's list of secure origins (See: http://bit.ly/1qrySKC) + ("https", "*", "*"), + ("*", "localhost", "*"), + ("*", "127.0.0.0/8", "*"), + ("*", "::1/128", "*"), + ("file", "*", None), + # ssh is always secure. + ("ssh", "*", "*"), +] # type: List[SecureOrigin] + + +# These are environment variables present when running under various +# CI systems. For each variable, some CI systems that use the variable +# are indicated. The collection was chosen so that for each of a number +# of popular systems, at least one of the environment variables is used. +# This list is used to provide some indication of and lower bound for +# CI traffic to PyPI. Thus, it is okay if the list is not comprehensive. +# For more background, see: https://github.com/pypa/pip/issues/5499 +CI_ENVIRONMENT_VARIABLES = ( + # Azure Pipelines + 'BUILD_BUILDID', + # Jenkins + 'BUILD_ID', + # AppVeyor, CircleCI, Codeship, Gitlab CI, Shippable, Travis CI + 'CI', + # Explicit environment variable. + 'PIP_IS_CI', +) + + +def looks_like_ci(): + # type: () -> bool + """ + Return whether it looks like pip is running under CI. + """ + # We don't use the method of checking for a tty (e.g. using isatty()) + # because some CI systems mimic a tty (e.g. Travis CI). Thus that + # method doesn't provide definitive information in either direction. + return any(name in os.environ for name in CI_ENVIRONMENT_VARIABLES) + + +def user_agent(): + """ + Return a string representing the user agent. + """ + data = { + "installer": {"name": "pip", "version": __version__}, + "python": platform.python_version(), + "implementation": { + "name": platform.python_implementation(), + }, + } + + if data["implementation"]["name"] == 'CPython': + data["implementation"]["version"] = platform.python_version() + elif data["implementation"]["name"] == 'PyPy': + if sys.pypy_version_info.releaselevel == 'final': + pypy_version_info = sys.pypy_version_info[:3] + else: + pypy_version_info = sys.pypy_version_info + data["implementation"]["version"] = ".".join( + [str(x) for x in pypy_version_info] + ) + elif data["implementation"]["name"] == 'Jython': + # Complete Guess + data["implementation"]["version"] = platform.python_version() + elif data["implementation"]["name"] == 'IronPython': + # Complete Guess + data["implementation"]["version"] = platform.python_version() + + if sys.platform.startswith("linux"): + from pip._vendor import distro + distro_infos = dict(filter( + lambda x: x[1], + zip(["name", "version", "id"], distro.linux_distribution()), + )) + libc = dict(filter( + lambda x: x[1], + zip(["lib", "version"], libc_ver()), + )) + if libc: + distro_infos["libc"] = libc + if distro_infos: + data["distro"] = distro_infos + + if sys.platform.startswith("darwin") and platform.mac_ver()[0]: + data["distro"] = {"name": "macOS", "version": platform.mac_ver()[0]} + + if platform.system(): + data.setdefault("system", {})["name"] = platform.system() + + if platform.release(): + data.setdefault("system", {})["release"] = platform.release() + + if platform.machine(): + data["cpu"] = platform.machine() + + if HAS_TLS: + data["openssl_version"] = ssl.OPENSSL_VERSION + + setuptools_version = get_installed_version("setuptools") + if setuptools_version is not None: + data["setuptools_version"] = setuptools_version + + # Use None rather than False so as not to give the impression that + # pip knows it is not being run under CI. Rather, it is a null or + # inconclusive result. Also, we include some value rather than no + # value to make it easier to know that the check has been run. + data["ci"] = True if looks_like_ci() else None + + user_data = os.environ.get("PIP_USER_AGENT_USER_DATA") + if user_data is not None: + data["user_data"] = user_data + + return "{data[installer][name]}/{data[installer][version]} {json}".format( + data=data, + json=json.dumps(data, separators=(",", ":"), sort_keys=True), + ) + + +class LocalFSAdapter(BaseAdapter): + + def send(self, request, stream=None, timeout=None, verify=None, cert=None, + proxies=None): + pathname = url_to_path(request.url) + + resp = Response() + resp.status_code = 200 + resp.url = request.url + + try: + stats = os.stat(pathname) + except OSError as exc: + resp.status_code = 404 + resp.raw = exc + else: + modified = email.utils.formatdate(stats.st_mtime, usegmt=True) + content_type = mimetypes.guess_type(pathname)[0] or "text/plain" + resp.headers = CaseInsensitiveDict({ + "Content-Type": content_type, + "Content-Length": stats.st_size, + "Last-Modified": modified, + }) + + resp.raw = open(pathname, "rb") + resp.close = resp.raw.close + + return resp + + def close(self): + pass + + +class InsecureHTTPAdapter(HTTPAdapter): + + def cert_verify(self, conn, url, verify, cert): + conn.cert_reqs = 'CERT_NONE' + conn.ca_certs = None + + +class PipSession(requests.Session): + + timeout = None # type: Optional[int] + + def __init__(self, *args, **kwargs): + """ + :param trusted_hosts: Domains not to emit warnings for when not using + HTTPS. + """ + retries = kwargs.pop("retries", 0) + cache = kwargs.pop("cache", None) + trusted_hosts = kwargs.pop("trusted_hosts", []) # type: List[str] + index_urls = kwargs.pop("index_urls", None) + + super(PipSession, self).__init__(*args, **kwargs) + + # Namespace the attribute with "pip_" just in case to prevent + # possible conflicts with the base class. + self.pip_trusted_origins = [] # type: List[Tuple[str, Optional[int]]] + + # Attach our User Agent to the request + self.headers["User-Agent"] = user_agent() + + # Attach our Authentication handler to the session + self.auth = MultiDomainBasicAuth(index_urls=index_urls) + + # Create our urllib3.Retry instance which will allow us to customize + # how we handle retries. + retries = urllib3.Retry( + # Set the total number of retries that a particular request can + # have. + total=retries, + + # A 503 error from PyPI typically means that the Fastly -> Origin + # connection got interrupted in some way. A 503 error in general + # is typically considered a transient error so we'll go ahead and + # retry it. + # A 500 may indicate transient error in Amazon S3 + # A 520 or 527 - may indicate transient error in CloudFlare + status_forcelist=[500, 503, 520, 527], + + # Add a small amount of back off between failed requests in + # order to prevent hammering the service. + backoff_factor=0.25, + ) + + # Check to ensure that the directory containing our cache directory + # is owned by the user current executing pip. If it does not exist + # we will check the parent directory until we find one that does exist. + if cache and not check_path_owner(cache): + logger.warning( + "The directory '%s' or its parent directory is not owned by " + "the current user and the cache has been disabled. Please " + "check the permissions and owner of that directory. If " + "executing pip with sudo, you may want sudo's -H flag.", + cache, + ) + cache = None + + # We want to _only_ cache responses on securely fetched origins. We do + # this because we can't validate the response of an insecurely fetched + # origin, and we don't want someone to be able to poison the cache and + # require manual eviction from the cache to fix it. + if cache: + secure_adapter = CacheControlAdapter( + cache=SafeFileCache(cache), + max_retries=retries, + ) + else: + secure_adapter = HTTPAdapter(max_retries=retries) + + # Our Insecure HTTPAdapter disables HTTPS validation. It does not + # support caching (see above) so we'll use it for all http:// URLs as + # well as any https:// host that we've marked as ignoring TLS errors + # for. + insecure_adapter = InsecureHTTPAdapter(max_retries=retries) + # Save this for later use in add_insecure_host(). + self._insecure_adapter = insecure_adapter + + self.mount("https://", secure_adapter) + self.mount("http://", insecure_adapter) + + # Enable file:// urls + self.mount("file://", LocalFSAdapter()) + + for host in trusted_hosts: + self.add_trusted_host(host, suppress_logging=True) + + def add_trusted_host(self, host, source=None, suppress_logging=False): + # type: (str, Optional[str], bool) -> None + """ + :param host: It is okay to provide a host that has previously been + added. + :param source: An optional source string, for logging where the host + string came from. + """ + if not suppress_logging: + msg = 'adding trusted host: {!r}'.format(host) + if source is not None: + msg += ' (from {})'.format(source) + logger.info(msg) + + host_port = parse_netloc(host) + if host_port not in self.pip_trusted_origins: + self.pip_trusted_origins.append(host_port) + + self.mount(build_url_from_netloc(host) + '/', self._insecure_adapter) + if not host_port[1]: + # Mount wildcard ports for the same host. + self.mount( + build_url_from_netloc(host) + ':', + self._insecure_adapter + ) + + def iter_secure_origins(self): + # type: () -> Iterator[SecureOrigin] + for secure_origin in SECURE_ORIGINS: + yield secure_origin + for host, port in self.pip_trusted_origins: + yield ('*', host, '*' if port is None else port) + + def is_secure_origin(self, location): + # type: (Link) -> bool + # Determine if this url used a secure transport mechanism + parsed = urllib_parse.urlparse(str(location)) + origin_protocol, origin_host, origin_port = ( + parsed.scheme, parsed.hostname, parsed.port, + ) + + # The protocol to use to see if the protocol matches. + # Don't count the repository type as part of the protocol: in + # cases such as "git+ssh", only use "ssh". (I.e., Only verify against + # the last scheme.) + origin_protocol = origin_protocol.rsplit('+', 1)[-1] + + # Determine if our origin is a secure origin by looking through our + # hardcoded list of secure origins, as well as any additional ones + # configured on this PackageFinder instance. + for secure_origin in self.iter_secure_origins(): + secure_protocol, secure_host, secure_port = secure_origin + if origin_protocol != secure_protocol and secure_protocol != "*": + continue + + try: + # We need to do this decode dance to ensure that we have a + # unicode object, even on Python 2.x. + addr = ipaddress.ip_address( + origin_host + if ( + isinstance(origin_host, six.text_type) or + origin_host is None + ) + else origin_host.decode("utf8") + ) + network = ipaddress.ip_network( + secure_host + if isinstance(secure_host, six.text_type) + # setting secure_host to proper Union[bytes, str] + # creates problems in other places + else secure_host.decode("utf8") # type: ignore + ) + except ValueError: + # We don't have both a valid address or a valid network, so + # we'll check this origin against hostnames. + if ( + origin_host and + origin_host.lower() != secure_host.lower() and + secure_host != "*" + ): + continue + else: + # We have a valid address and network, so see if the address + # is contained within the network. + if addr not in network: + continue + + # Check to see if the port matches. + if ( + origin_port != secure_port and + secure_port != "*" and + secure_port is not None + ): + continue + + # If we've gotten here, then this origin matches the current + # secure origin and we should return True + return True + + # If we've gotten to this point, then the origin isn't secure and we + # will not accept it as a valid location to search. We will however + # log a warning that we are ignoring it. + logger.warning( + "The repository located at %s is not a trusted or secure host and " + "is being ignored. If this repository is available via HTTPS we " + "recommend you use HTTPS instead, otherwise you may silence " + "this warning and allow it anyway with '--trusted-host %s'.", + origin_host, + origin_host, + ) + + return False + + def request(self, method, url, *args, **kwargs): + # Allow setting a default timeout on a session + kwargs.setdefault("timeout", self.timeout) + + # Dispatch the actual request + return super(PipSession, self).request(method, url, *args, **kwargs) diff --git a/my_env/Lib/site-packages/pip/_internal/network/xmlrpc.py b/my_env/Lib/site-packages/pip/_internal/network/xmlrpc.py new file mode 100644 index 000000000..121edd930 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/network/xmlrpc.py @@ -0,0 +1,44 @@ +"""xmlrpclib.Transport implementation +""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import logging + +from pip._vendor import requests +# NOTE: XMLRPC Client is not annotated in typeshed as on 2017-07-17, which is +# why we ignore the type on this import +from pip._vendor.six.moves import xmlrpc_client # type: ignore +from pip._vendor.six.moves.urllib import parse as urllib_parse + +logger = logging.getLogger(__name__) + + +class PipXmlrpcTransport(xmlrpc_client.Transport): + """Provide a `xmlrpclib.Transport` implementation via a `PipSession` + object. + """ + + def __init__(self, index_url, session, use_datetime=False): + xmlrpc_client.Transport.__init__(self, use_datetime) + index_parts = urllib_parse.urlparse(index_url) + self._scheme = index_parts.scheme + self._session = session + + def request(self, host, handler, request_body, verbose=False): + parts = (self._scheme, host, handler, None, None, None) + url = urllib_parse.urlunparse(parts) + try: + headers = {'Content-Type': 'text/xml'} + response = self._session.post(url, data=request_body, + headers=headers, stream=True) + response.raise_for_status() + self.verbose = verbose + return self.parse_response(response.raw) + except requests.HTTPError as exc: + logger.critical( + "HTTP error %s while getting %s", + exc.response.status_code, url, + ) + raise diff --git a/my_env/Lib/site-packages/pip/_internal/operations/__init__.py b/my_env/Lib/site-packages/pip/_internal/operations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..98db754b2 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-37.pyc new file mode 100644 index 000000000..494efda41 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-37.pyc new file mode 100644 index 000000000..2d03d4c57 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/generate_metadata.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/generate_metadata.cpython-37.pyc new file mode 100644 index 000000000..4fd723a05 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/generate_metadata.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-37.pyc new file mode 100644 index 000000000..204d97658 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/operations/check.py b/my_env/Lib/site-packages/pip/_internal/operations/check.py new file mode 100644 index 000000000..6bd18841a --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/operations/check.py @@ -0,0 +1,163 @@ +"""Validation of dependencies of packages +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +import logging +from collections import namedtuple + +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.pkg_resources import RequirementParseError + +from pip._internal.distributions import ( + make_distribution_for_install_requirement, +) +from pip._internal.utils.misc import get_installed_distributions +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +logger = logging.getLogger(__name__) + +if MYPY_CHECK_RUNNING: + from pip._internal.req.req_install import InstallRequirement + from typing import ( + Any, Callable, Dict, Optional, Set, Tuple, List + ) + + # Shorthands + PackageSet = Dict[str, 'PackageDetails'] + Missing = Tuple[str, Any] + Conflicting = Tuple[str, str, Any] + + MissingDict = Dict[str, List[Missing]] + ConflictingDict = Dict[str, List[Conflicting]] + CheckResult = Tuple[MissingDict, ConflictingDict] + +PackageDetails = namedtuple('PackageDetails', ['version', 'requires']) + + +def create_package_set_from_installed(**kwargs): + # type: (**Any) -> Tuple[PackageSet, bool] + """Converts a list of distributions into a PackageSet. + """ + # Default to using all packages installed on the system + if kwargs == {}: + kwargs = {"local_only": False, "skip": ()} + + package_set = {} + problems = False + for dist in get_installed_distributions(**kwargs): + name = canonicalize_name(dist.project_name) + try: + package_set[name] = PackageDetails(dist.version, dist.requires()) + except RequirementParseError as e: + # Don't crash on broken metadata + logging.warning("Error parsing requirements for %s: %s", name, e) + problems = True + return package_set, problems + + +def check_package_set(package_set, should_ignore=None): + # type: (PackageSet, Optional[Callable[[str], bool]]) -> CheckResult + """Check if a package set is consistent + + If should_ignore is passed, it should be a callable that takes a + package name and returns a boolean. + """ + if should_ignore is None: + def should_ignore(name): + return False + + missing = {} + conflicting = {} + + for package_name in package_set: + # Info about dependencies of package_name + missing_deps = set() # type: Set[Missing] + conflicting_deps = set() # type: Set[Conflicting] + + if should_ignore(package_name): + continue + + for req in package_set[package_name].requires: + name = canonicalize_name(req.project_name) # type: str + + # Check if it's missing + if name not in package_set: + missed = True + if req.marker is not None: + missed = req.marker.evaluate() + if missed: + missing_deps.add((name, req)) + continue + + # Check if there's a conflict + version = package_set[name].version # type: str + if not req.specifier.contains(version, prereleases=True): + conflicting_deps.add((name, version, req)) + + if missing_deps: + missing[package_name] = sorted(missing_deps, key=str) + if conflicting_deps: + conflicting[package_name] = sorted(conflicting_deps, key=str) + + return missing, conflicting + + +def check_install_conflicts(to_install): + # type: (List[InstallRequirement]) -> Tuple[PackageSet, CheckResult] + """For checking if the dependency graph would be consistent after \ + installing given requirements + """ + # Start from the current state + package_set, _ = create_package_set_from_installed() + # Install packages + would_be_installed = _simulate_installation_of(to_install, package_set) + + # Only warn about directly-dependent packages; create a whitelist of them + whitelist = _create_whitelist(would_be_installed, package_set) + + return ( + package_set, + check_package_set( + package_set, should_ignore=lambda name: name not in whitelist + ) + ) + + +def _simulate_installation_of(to_install, package_set): + # type: (List[InstallRequirement], PackageSet) -> Set[str] + """Computes the version of packages after installing to_install. + """ + + # Keep track of packages that were installed + installed = set() + + # Modify it as installing requirement_set would (assuming no errors) + for inst_req in to_install: + abstract_dist = make_distribution_for_install_requirement(inst_req) + dist = abstract_dist.get_pkg_resources_distribution() + + name = canonicalize_name(dist.key) + package_set[name] = PackageDetails(dist.version, dist.requires()) + + installed.add(name) + + return installed + + +def _create_whitelist(would_be_installed, package_set): + # type: (Set[str], PackageSet) -> Set[str] + packages_affected = set(would_be_installed) + + for package_name in package_set: + if package_name in packages_affected: + continue + + for req in package_set[package_name].requires: + if canonicalize_name(req.name) in packages_affected: + packages_affected.add(package_name) + break + + return packages_affected diff --git a/my_env/Lib/site-packages/pip/_internal/operations/freeze.py b/my_env/Lib/site-packages/pip/_internal/operations/freeze.py new file mode 100644 index 000000000..bfdddf979 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/operations/freeze.py @@ -0,0 +1,259 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import collections +import logging +import os +import re + +from pip._vendor import six +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.pkg_resources import RequirementParseError + +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.req.constructors import ( + install_req_from_editable, + install_req_from_line, +) +from pip._internal.req.req_file import COMMENT_RE +from pip._internal.utils.misc import ( + dist_is_editable, + get_installed_distributions, +) +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import ( + Iterator, Optional, List, Container, Set, Dict, Tuple, Iterable, Union + ) + from pip._internal.cache import WheelCache + from pip._vendor.pkg_resources import ( + Distribution, Requirement + ) + + RequirementInfo = Tuple[Optional[Union[str, Requirement]], bool, List[str]] + + +logger = logging.getLogger(__name__) + + +def freeze( + requirement=None, # type: Optional[List[str]] + find_links=None, # type: Optional[List[str]] + local_only=None, # type: Optional[bool] + user_only=None, # type: Optional[bool] + paths=None, # type: Optional[List[str]] + skip_regex=None, # type: Optional[str] + isolated=False, # type: bool + wheel_cache=None, # type: Optional[WheelCache] + exclude_editable=False, # type: bool + skip=() # type: Container[str] +): + # type: (...) -> Iterator[str] + find_links = find_links or [] + skip_match = None + + if skip_regex: + skip_match = re.compile(skip_regex).search + + for link in find_links: + yield '-f %s' % link + installations = {} # type: Dict[str, FrozenRequirement] + for dist in get_installed_distributions(local_only=local_only, + skip=(), + user_only=user_only, + paths=paths): + try: + req = FrozenRequirement.from_dist(dist) + except RequirementParseError as exc: + # We include dist rather than dist.project_name because the + # dist string includes more information, like the version and + # location. We also include the exception message to aid + # troubleshooting. + logger.warning( + 'Could not generate requirement for distribution %r: %s', + dist, exc + ) + continue + if exclude_editable and req.editable: + continue + installations[req.name] = req + + if requirement: + # the options that don't get turned into an InstallRequirement + # should only be emitted once, even if the same option is in multiple + # requirements files, so we need to keep track of what has been emitted + # so that we don't emit it again if it's seen again + emitted_options = set() # type: Set[str] + # keep track of which files a requirement is in so that we can + # give an accurate warning if a requirement appears multiple times. + req_files = collections.defaultdict(list) # type: Dict[str, List[str]] + for req_file_path in requirement: + with open(req_file_path) as req_file: + for line in req_file: + if (not line.strip() or + line.strip().startswith('#') or + (skip_match and skip_match(line)) or + line.startswith(( + '-r', '--requirement', + '-Z', '--always-unzip', + '-f', '--find-links', + '-i', '--index-url', + '--pre', + '--trusted-host', + '--process-dependency-links', + '--extra-index-url'))): + line = line.rstrip() + if line not in emitted_options: + emitted_options.add(line) + yield line + continue + + if line.startswith('-e') or line.startswith('--editable'): + if line.startswith('-e'): + line = line[2:].strip() + else: + line = line[len('--editable'):].strip().lstrip('=') + line_req = install_req_from_editable( + line, + isolated=isolated, + wheel_cache=wheel_cache, + ) + else: + line_req = install_req_from_line( + COMMENT_RE.sub('', line).strip(), + isolated=isolated, + wheel_cache=wheel_cache, + ) + + if not line_req.name: + logger.info( + "Skipping line in requirement file [%s] because " + "it's not clear what it would install: %s", + req_file_path, line.strip(), + ) + logger.info( + " (add #egg=PackageName to the URL to avoid" + " this warning)" + ) + elif line_req.name not in installations: + # either it's not installed, or it is installed + # but has been processed already + if not req_files[line_req.name]: + logger.warning( + "Requirement file [%s] contains %s, but " + "package %r is not installed", + req_file_path, + COMMENT_RE.sub('', line).strip(), line_req.name + ) + else: + req_files[line_req.name].append(req_file_path) + else: + yield str(installations[line_req.name]).rstrip() + del installations[line_req.name] + req_files[line_req.name].append(req_file_path) + + # Warn about requirements that were included multiple times (in a + # single requirements file or in different requirements files). + for name, files in six.iteritems(req_files): + if len(files) > 1: + logger.warning("Requirement %s included multiple times [%s]", + name, ', '.join(sorted(set(files)))) + + yield( + '## The following requirements were added by ' + 'pip freeze:' + ) + for installation in sorted( + installations.values(), key=lambda x: x.name.lower()): + if canonicalize_name(installation.name) not in skip: + yield str(installation).rstrip() + + +def get_requirement_info(dist): + # type: (Distribution) -> RequirementInfo + """ + Compute and return values (req, editable, comments) for use in + FrozenRequirement.from_dist(). + """ + if not dist_is_editable(dist): + return (None, False, []) + + location = os.path.normcase(os.path.abspath(dist.location)) + + from pip._internal.vcs import vcs, RemoteNotFoundError + vcs_backend = vcs.get_backend_for_dir(location) + + if vcs_backend is None: + req = dist.as_requirement() + logger.debug( + 'No VCS found for editable requirement "%s" in: %r', req, + location, + ) + comments = [ + '# Editable install with no version control ({})'.format(req) + ] + return (location, True, comments) + + try: + req = vcs_backend.get_src_requirement(location, dist.project_name) + except RemoteNotFoundError: + req = dist.as_requirement() + comments = [ + '# Editable {} install with no remote ({})'.format( + type(vcs_backend).__name__, req, + ) + ] + return (location, True, comments) + + except BadCommand: + logger.warning( + 'cannot determine version of editable source in %s ' + '(%s command not found in path)', + location, + vcs_backend.name, + ) + return (None, True, []) + + except InstallationError as exc: + logger.warning( + "Error when trying to get requirement for VCS system %s, " + "falling back to uneditable format", exc + ) + else: + if req is not None: + return (req, True, []) + + logger.warning( + 'Could not determine repository location of %s', location + ) + comments = ['## !! Could not determine repository location'] + + return (None, False, comments) + + +class FrozenRequirement(object): + def __init__(self, name, req, editable, comments=()): + # type: (str, Union[str, Requirement], bool, Iterable[str]) -> None + self.name = name + self.req = req + self.editable = editable + self.comments = comments + + @classmethod + def from_dist(cls, dist): + # type: (Distribution) -> FrozenRequirement + req, editable, comments = get_requirement_info(dist) + if req is None: + req = dist.as_requirement() + + return cls(dist.project_name, req, editable, comments=comments) + + def __str__(self): + req = self.req + if self.editable: + req = '-e %s' % req + return '\n'.join(list(self.comments) + [str(req)]) + '\n' diff --git a/my_env/Lib/site-packages/pip/_internal/operations/generate_metadata.py b/my_env/Lib/site-packages/pip/_internal/operations/generate_metadata.py new file mode 100644 index 000000000..984748d7f --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/operations/generate_metadata.py @@ -0,0 +1,136 @@ +"""Metadata generation logic for source distributions. +""" + +import logging +import os + +from pip._internal.exceptions import InstallationError +from pip._internal.utils.misc import ensure_dir +from pip._internal.utils.setuptools_build import make_setuptools_shim_args +from pip._internal.utils.subprocess import call_subprocess +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.vcs import vcs + +if MYPY_CHECK_RUNNING: + from typing import Callable, List + from pip._internal.req.req_install import InstallRequirement + +logger = logging.getLogger(__name__) + + +def get_metadata_generator(install_req): + # type: (InstallRequirement) -> Callable[[InstallRequirement], str] + """Return a callable metadata generator for this InstallRequirement. + + A metadata generator takes an InstallRequirement (install_req) as an input, + generates metadata via the appropriate process for that install_req and + returns the generated metadata directory. + """ + if not install_req.use_pep517: + return _generate_metadata_legacy + + return _generate_metadata + + +def _find_egg_info(source_directory, is_editable): + # type: (str, bool) -> str + """Find an .egg-info in `source_directory`, based on `is_editable`. + """ + + def looks_like_virtual_env(path): + # type: (str) -> bool + return ( + os.path.lexists(os.path.join(path, 'bin', 'python')) or + os.path.exists(os.path.join(path, 'Scripts', 'Python.exe')) + ) + + def locate_editable_egg_info(base): + # type: (str) -> List[str] + candidates = [] # type: List[str] + for root, dirs, files in os.walk(base): + for dir_ in vcs.dirnames: + if dir_ in dirs: + dirs.remove(dir_) + # Iterate over a copy of ``dirs``, since mutating + # a list while iterating over it can cause trouble. + # (See https://github.com/pypa/pip/pull/462.) + for dir_ in list(dirs): + if looks_like_virtual_env(os.path.join(root, dir_)): + dirs.remove(dir_) + # Also don't search through tests + elif dir_ == 'test' or dir_ == 'tests': + dirs.remove(dir_) + candidates.extend(os.path.join(root, dir_) for dir_ in dirs) + return [f for f in candidates if f.endswith('.egg-info')] + + def depth_of_directory(dir_): + # type: (str) -> int + return ( + dir_.count(os.path.sep) + + (os.path.altsep and dir_.count(os.path.altsep) or 0) + ) + + base = source_directory + if is_editable: + filenames = locate_editable_egg_info(base) + else: + base = os.path.join(base, 'pip-egg-info') + filenames = os.listdir(base) + + if not filenames: + raise InstallationError( + "Files/directories not found in %s" % base + ) + + # If we have more than one match, we pick the toplevel one. This + # can easily be the case if there is a dist folder which contains + # an extracted tarball for testing purposes. + if len(filenames) > 1: + filenames.sort(key=depth_of_directory) + + return os.path.join(base, filenames[0]) + + +def _generate_metadata_legacy(install_req): + # type: (InstallRequirement) -> str + req_details_str = install_req.name or "from {}".format(install_req.link) + logger.debug( + 'Running setup.py (path:%s) egg_info for package %s', + install_req.setup_py_path, req_details_str, + ) + + # Compose arguments for subprocess call + base_cmd = make_setuptools_shim_args(install_req.setup_py_path) + if install_req.isolated: + base_cmd += ["--no-user-cfg"] + + # For non-editable installs, don't put the .egg-info files at the root, + # to avoid confusion due to the source code being considered an installed + # egg. + egg_base_option = [] # type: List[str] + if not install_req.editable: + egg_info_dir = os.path.join( + install_req.unpacked_source_directory, 'pip-egg-info', + ) + egg_base_option = ['--egg-base', egg_info_dir] + + # setuptools complains if the target directory does not exist. + ensure_dir(egg_info_dir) + + with install_req.build_env: + call_subprocess( + base_cmd + ["egg_info"] + egg_base_option, + cwd=install_req.unpacked_source_directory, + command_desc='python setup.py egg_info', + ) + + # Return the .egg-info directory. + return _find_egg_info( + install_req.unpacked_source_directory, + install_req.editable, + ) + + +def _generate_metadata(install_req): + # type: (InstallRequirement) -> str + return install_req.prepare_pep517_metadata() diff --git a/my_env/Lib/site-packages/pip/_internal/operations/prepare.py b/my_env/Lib/site-packages/pip/_internal/operations/prepare.py new file mode 100644 index 000000000..d0930458d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/operations/prepare.py @@ -0,0 +1,295 @@ +"""Prepares a distribution for installation +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +import logging +import os + +from pip._vendor import requests + +from pip._internal.distributions import ( + make_distribution_for_install_requirement, +) +from pip._internal.distributions.installed import InstalledDistribution +from pip._internal.download import unpack_url +from pip._internal.exceptions import ( + DirectoryUrlHashUnsupported, + HashUnpinned, + InstallationError, + PreviousBuildDirError, + VcsHashUnsupported, +) +from pip._internal.utils.compat import expanduser +from pip._internal.utils.hashes import MissingHashes +from pip._internal.utils.logging import indent_log +from pip._internal.utils.marker_files import write_delete_marker_file +from pip._internal.utils.misc import display_path, normalize_path +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional + + from pip._internal.distributions import AbstractDistribution + from pip._internal.index import PackageFinder + from pip._internal.network.session import PipSession + from pip._internal.req.req_install import InstallRequirement + from pip._internal.req.req_tracker import RequirementTracker + +logger = logging.getLogger(__name__) + + +def _get_prepared_distribution(req, req_tracker, finder, build_isolation): + """Prepare a distribution for installation. + """ + abstract_dist = make_distribution_for_install_requirement(req) + with req_tracker.track(req): + abstract_dist.prepare_distribution_metadata(finder, build_isolation) + return abstract_dist + + +class RequirementPreparer(object): + """Prepares a Requirement + """ + + def __init__( + self, + build_dir, # type: str + download_dir, # type: Optional[str] + src_dir, # type: str + wheel_download_dir, # type: Optional[str] + progress_bar, # type: str + build_isolation, # type: bool + req_tracker # type: RequirementTracker + ): + # type: (...) -> None + super(RequirementPreparer, self).__init__() + + self.src_dir = src_dir + self.build_dir = build_dir + self.req_tracker = req_tracker + + # Where still-packed archives should be written to. If None, they are + # not saved, and are deleted immediately after unpacking. + if download_dir: + download_dir = expanduser(download_dir) + self.download_dir = download_dir + + # Where still-packed .whl files should be written to. If None, they are + # written to the download_dir parameter. Separate to download_dir to + # permit only keeping wheel archives for pip wheel. + if wheel_download_dir: + wheel_download_dir = normalize_path(wheel_download_dir) + self.wheel_download_dir = wheel_download_dir + + # NOTE + # download_dir and wheel_download_dir overlap semantically and may + # be combined if we're willing to have non-wheel archives present in + # the wheelhouse output by 'pip wheel'. + + self.progress_bar = progress_bar + + # Is build isolation allowed? + self.build_isolation = build_isolation + + @property + def _download_should_save(self): + # type: () -> bool + if not self.download_dir: + return False + + if os.path.exists(self.download_dir): + return True + + logger.critical('Could not find download directory') + raise InstallationError( + "Could not find or access download directory '%s'" + % display_path(self.download_dir)) + + def prepare_linked_requirement( + self, + req, # type: InstallRequirement + session, # type: PipSession + finder, # type: PackageFinder + require_hashes, # type: bool + ): + # type: (...) -> AbstractDistribution + """Prepare a requirement that would be obtained from req.link + """ + assert req.link + link = req.link + + # TODO: Breakup into smaller functions + if link.scheme == 'file': + path = link.file_path + logger.info('Processing %s', display_path(path)) + else: + logger.info('Collecting %s', req.req or req) + + with indent_log(): + # @@ if filesystem packages are not marked + # editable in a req, a non deterministic error + # occurs when the script attempts to unpack the + # build directory + req.ensure_has_source_dir(self.build_dir) + # If a checkout exists, it's unwise to keep going. version + # inconsistencies are logged later, but do not fail the + # installation. + # FIXME: this won't upgrade when there's an existing + # package unpacked in `req.source_dir` + if os.path.exists(os.path.join(req.source_dir, 'setup.py')): + raise PreviousBuildDirError( + "pip can't proceed with requirements '%s' due to a" + " pre-existing build directory (%s). This is " + "likely due to a previous installation that failed" + ". pip is being responsible and not assuming it " + "can delete this. Please delete it and try again." + % (req, req.source_dir) + ) + + # Now that we have the real link, we can tell what kind of + # requirements we have and raise some more informative errors + # than otherwise. (For example, we can raise VcsHashUnsupported + # for a VCS URL rather than HashMissing.) + if require_hashes: + # We could check these first 2 conditions inside + # unpack_url and save repetition of conditions, but then + # we would report less-useful error messages for + # unhashable requirements, complaining that there's no + # hash provided. + if link.is_vcs: + raise VcsHashUnsupported() + elif link.is_existing_dir(): + raise DirectoryUrlHashUnsupported() + if not req.original_link and not req.is_pinned: + # Unpinned packages are asking for trouble when a new + # version is uploaded. This isn't a security check, but + # it saves users a surprising hash mismatch in the + # future. + # + # file:/// URLs aren't pinnable, so don't complain + # about them not being pinned. + raise HashUnpinned() + + hashes = req.hashes(trust_internet=not require_hashes) + if require_hashes and not hashes: + # Known-good hashes are missing for this requirement, so + # shim it with a facade object that will provoke hash + # computation and then raise a HashMissing exception + # showing the user what the hash should be. + hashes = MissingHashes() + + download_dir = self.download_dir + if link.is_wheel and self.wheel_download_dir: + # when doing 'pip wheel` we download wheels to a + # dedicated dir. + download_dir = self.wheel_download_dir + + try: + unpack_url( + link, req.source_dir, download_dir, + session=session, hashes=hashes, + progress_bar=self.progress_bar + ) + except requests.HTTPError as exc: + logger.critical( + 'Could not install requirement %s because of error %s', + req, + exc, + ) + raise InstallationError( + 'Could not install requirement %s because of HTTP ' + 'error %s for URL %s' % + (req, exc, link) + ) + + if link.is_wheel: + if download_dir: + # When downloading, we only unpack wheels to get + # metadata. + autodelete_unpacked = True + else: + # When installing a wheel, we use the unpacked + # wheel. + autodelete_unpacked = False + else: + # We always delete unpacked sdists after pip runs. + autodelete_unpacked = True + if autodelete_unpacked: + write_delete_marker_file(req.source_dir) + + abstract_dist = _get_prepared_distribution( + req, self.req_tracker, finder, self.build_isolation, + ) + + if self._download_should_save: + # Make a .zip of the source_dir we already created. + if link.is_vcs: + req.archive(self.download_dir) + return abstract_dist + + def prepare_editable_requirement( + self, + req, # type: InstallRequirement + require_hashes, # type: bool + use_user_site, # type: bool + finder # type: PackageFinder + ): + # type: (...) -> AbstractDistribution + """Prepare an editable requirement + """ + assert req.editable, "cannot prepare a non-editable req as editable" + + logger.info('Obtaining %s', req) + + with indent_log(): + if require_hashes: + raise InstallationError( + 'The editable requirement %s cannot be installed when ' + 'requiring hashes, because there is no single file to ' + 'hash.' % req + ) + req.ensure_has_source_dir(self.src_dir) + req.update_editable(not self._download_should_save) + + abstract_dist = _get_prepared_distribution( + req, self.req_tracker, finder, self.build_isolation, + ) + + if self._download_should_save: + req.archive(self.download_dir) + req.check_if_exists(use_user_site) + + return abstract_dist + + def prepare_installed_requirement( + self, + req, # type: InstallRequirement + require_hashes, # type: bool + skip_reason # type: str + ): + # type: (...) -> AbstractDistribution + """Prepare an already-installed requirement + """ + assert req.satisfied_by, "req should have been satisfied but isn't" + assert skip_reason is not None, ( + "did not get skip reason skipped but req.satisfied_by " + "is set to %r" % (req.satisfied_by,) + ) + logger.info( + 'Requirement %s: %s (%s)', + skip_reason, req, req.satisfied_by.version + ) + with indent_log(): + if require_hashes: + logger.debug( + 'Since it is already installed, we are trusting this ' + 'package without checking its hash. To ensure a ' + 'completely repeatable environment, install into an ' + 'empty virtualenv.' + ) + abstract_dist = InstalledDistribution(req) + + return abstract_dist diff --git a/my_env/Lib/site-packages/pip/_internal/pep425tags.py b/my_env/Lib/site-packages/pip/_internal/pep425tags.py new file mode 100644 index 000000000..042ba34b3 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/pep425tags.py @@ -0,0 +1,449 @@ +"""Generate and work with PEP 425 Compatibility Tags.""" +from __future__ import absolute_import + +import distutils.util +import logging +import platform +import re +import sys +import sysconfig +import warnings +from collections import OrderedDict + +import pip._internal.utils.glibc +from pip._internal.utils.compat import get_extension_suffixes +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import ( + Tuple, Callable, List, Optional, Union, Dict, Set + ) + + Pep425Tag = Tuple[str, str, str] + +logger = logging.getLogger(__name__) + +_osx_arch_pat = re.compile(r'(.+)_(\d+)_(\d+)_(.+)') + + +def get_config_var(var): + # type: (str) -> Optional[str] + try: + return sysconfig.get_config_var(var) + except IOError as e: # Issue #1074 + warnings.warn("{}".format(e), RuntimeWarning) + return None + + +def get_abbr_impl(): + # type: () -> str + """Return abbreviated implementation name.""" + if hasattr(sys, 'pypy_version_info'): + pyimpl = 'pp' + elif sys.platform.startswith('java'): + pyimpl = 'jy' + elif sys.platform == 'cli': + pyimpl = 'ip' + else: + pyimpl = 'cp' + return pyimpl + + +def version_info_to_nodot(version_info): + # type: (Tuple[int, ...]) -> str + # Only use up to the first two numbers. + return ''.join(map(str, version_info[:2])) + + +def get_impl_ver(): + # type: () -> str + """Return implementation version.""" + impl_ver = get_config_var("py_version_nodot") + if not impl_ver or get_abbr_impl() == 'pp': + impl_ver = ''.join(map(str, get_impl_version_info())) + return impl_ver + + +def get_impl_version_info(): + # type: () -> Tuple[int, ...] + """Return sys.version_info-like tuple for use in decrementing the minor + version.""" + if get_abbr_impl() == 'pp': + # as per https://github.com/pypa/pip/issues/2882 + # attrs exist only on pypy + return (sys.version_info[0], + sys.pypy_version_info.major, # type: ignore + sys.pypy_version_info.minor) # type: ignore + else: + return sys.version_info[0], sys.version_info[1] + + +def get_impl_tag(): + # type: () -> str + """ + Returns the Tag for this specific implementation. + """ + return "{}{}".format(get_abbr_impl(), get_impl_ver()) + + +def get_flag(var, fallback, expected=True, warn=True): + # type: (str, Callable[..., bool], Union[bool, int], bool) -> bool + """Use a fallback method for determining SOABI flags if the needed config + var is unset or unavailable.""" + val = get_config_var(var) + if val is None: + if warn: + logger.debug("Config variable '%s' is unset, Python ABI tag may " + "be incorrect", var) + return fallback() + return val == expected + + +def get_abi_tag(): + # type: () -> Optional[str] + """Return the ABI tag based on SOABI (if available) or emulate SOABI + (CPython 2, PyPy).""" + soabi = get_config_var('SOABI') + impl = get_abbr_impl() + abi = None # type: Optional[str] + + if not soabi and impl in {'cp', 'pp'} and hasattr(sys, 'maxunicode'): + d = '' + m = '' + u = '' + is_cpython = (impl == 'cp') + if get_flag( + 'Py_DEBUG', lambda: hasattr(sys, 'gettotalrefcount'), + warn=is_cpython): + d = 'd' + if sys.version_info < (3, 8) and get_flag( + 'WITH_PYMALLOC', lambda: is_cpython, warn=is_cpython): + m = 'm' + if sys.version_info < (3, 3) and get_flag( + 'Py_UNICODE_SIZE', lambda: sys.maxunicode == 0x10ffff, + expected=4, warn=is_cpython): + u = 'u' + abi = '%s%s%s%s%s' % (impl, get_impl_ver(), d, m, u) + elif soabi and soabi.startswith('cpython-'): + abi = 'cp' + soabi.split('-')[1] + elif soabi: + abi = soabi.replace('.', '_').replace('-', '_') + + return abi + + +def _is_running_32bit(): + # type: () -> bool + return sys.maxsize == 2147483647 + + +def get_platform(): + # type: () -> str + """Return our platform name 'win32', 'linux_x86_64'""" + if sys.platform == 'darwin': + # distutils.util.get_platform() returns the release based on the value + # of MACOSX_DEPLOYMENT_TARGET on which Python was built, which may + # be significantly older than the user's current machine. + release, _, machine = platform.mac_ver() + split_ver = release.split('.') + + if machine == "x86_64" and _is_running_32bit(): + machine = "i386" + elif machine == "ppc64" and _is_running_32bit(): + machine = "ppc" + + return 'macosx_{}_{}_{}'.format(split_ver[0], split_ver[1], machine) + + # XXX remove distutils dependency + result = distutils.util.get_platform().replace('.', '_').replace('-', '_') + if result == "linux_x86_64" and _is_running_32bit(): + # 32 bit Python program (running on a 64 bit Linux): pip should only + # install and run 32 bit compiled extensions in that case. + result = "linux_i686" + + return result + + +def is_linux_armhf(): + # type: () -> bool + if get_platform() != "linux_armv7l": + return False + # hard-float ABI can be detected from the ELF header of the running + # process + try: + with open(sys.executable, 'rb') as f: + elf_header_raw = f.read(40) # read 40 first bytes of ELF header + except (IOError, OSError, TypeError): + return False + if elf_header_raw is None or len(elf_header_raw) < 40: + return False + if isinstance(elf_header_raw, str): + elf_header = [ord(c) for c in elf_header_raw] + else: + elf_header = [b for b in elf_header_raw] + result = elf_header[0:4] == [0x7f, 0x45, 0x4c, 0x46] # ELF magic number + result &= elf_header[4:5] == [1] # 32-bit ELF + result &= elf_header[5:6] == [1] # little-endian + result &= elf_header[18:20] == [0x28, 0] # ARM machine + result &= elf_header[39:40] == [5] # ARM EABIv5 + result &= (elf_header[37:38][0] & 4) == 4 # EF_ARM_ABI_FLOAT_HARD + return result + + +def is_manylinux1_compatible(): + # type: () -> bool + # Only Linux, and only x86-64 / i686 + if get_platform() not in {"linux_x86_64", "linux_i686"}: + return False + + # Check for presence of _manylinux module + try: + import _manylinux + return bool(_manylinux.manylinux1_compatible) + except (ImportError, AttributeError): + # Fall through to heuristic check below + pass + + # Check glibc version. CentOS 5 uses glibc 2.5. + return pip._internal.utils.glibc.have_compatible_glibc(2, 5) + + +def is_manylinux2010_compatible(): + # type: () -> bool + # Only Linux, and only x86-64 / i686 + if get_platform() not in {"linux_x86_64", "linux_i686"}: + return False + + # Check for presence of _manylinux module + try: + import _manylinux + return bool(_manylinux.manylinux2010_compatible) + except (ImportError, AttributeError): + # Fall through to heuristic check below + pass + + # Check glibc version. CentOS 6 uses glibc 2.12. + return pip._internal.utils.glibc.have_compatible_glibc(2, 12) + + +def is_manylinux2014_compatible(): + # type: () -> bool + # Only Linux, and only supported architectures + platform = get_platform() + if platform not in {"linux_x86_64", "linux_i686", "linux_aarch64", + "linux_armv7l", "linux_ppc64", "linux_ppc64le", + "linux_s390x"}: + return False + + # check for hard-float ABI in case we're running linux_armv7l not to + # install hard-float ABI wheel in a soft-float ABI environment + if platform == "linux_armv7l" and not is_linux_armhf(): + return False + + # Check for presence of _manylinux module + try: + import _manylinux + return bool(_manylinux.manylinux2014_compatible) + except (ImportError, AttributeError): + # Fall through to heuristic check below + pass + + # Check glibc version. CentOS 7 uses glibc 2.17. + return pip._internal.utils.glibc.have_compatible_glibc(2, 17) + + +def get_darwin_arches(major, minor, machine): + # type: (int, int, str) -> List[str] + """Return a list of supported arches (including group arches) for + the given major, minor and machine architecture of an macOS machine. + """ + arches = [] + + def _supports_arch(major, minor, arch): + # type: (int, int, str) -> bool + # Looking at the application support for macOS versions in the chart + # provided by https://en.wikipedia.org/wiki/OS_X#Versions it appears + # our timeline looks roughly like: + # + # 10.0 - Introduces ppc support. + # 10.4 - Introduces ppc64, i386, and x86_64 support, however the ppc64 + # and x86_64 support is CLI only, and cannot be used for GUI + # applications. + # 10.5 - Extends ppc64 and x86_64 support to cover GUI applications. + # 10.6 - Drops support for ppc64 + # 10.7 - Drops support for ppc + # + # Given that we do not know if we're installing a CLI or a GUI + # application, we must be conservative and assume it might be a GUI + # application and behave as if ppc64 and x86_64 support did not occur + # until 10.5. + # + # Note: The above information is taken from the "Application support" + # column in the chart not the "Processor support" since I believe + # that we care about what instruction sets an application can use + # not which processors the OS supports. + if arch == 'ppc': + return (major, minor) <= (10, 5) + if arch == 'ppc64': + return (major, minor) == (10, 5) + if arch == 'i386': + return (major, minor) >= (10, 4) + if arch == 'x86_64': + return (major, minor) >= (10, 5) + if arch in groups: + for garch in groups[arch]: + if _supports_arch(major, minor, garch): + return True + return False + + groups = OrderedDict([ + ("fat", ("i386", "ppc")), + ("intel", ("x86_64", "i386")), + ("fat64", ("x86_64", "ppc64")), + ("fat32", ("x86_64", "i386", "ppc")), + ]) # type: Dict[str, Tuple[str, ...]] + + if _supports_arch(major, minor, machine): + arches.append(machine) + + for garch in groups: + if machine in groups[garch] and _supports_arch(major, minor, garch): + arches.append(garch) + + arches.append('universal') + + return arches + + +def get_all_minor_versions_as_strings(version_info): + # type: (Tuple[int, ...]) -> List[str] + versions = [] + major = version_info[:-1] + # Support all previous minor Python versions. + for minor in range(version_info[-1], -1, -1): + versions.append(''.join(map(str, major + (minor,)))) + return versions + + +def get_supported( + versions=None, # type: Optional[List[str]] + noarch=False, # type: bool + platform=None, # type: Optional[str] + impl=None, # type: Optional[str] + abi=None # type: Optional[str] +): + # type: (...) -> List[Pep425Tag] + """Return a list of supported tags for each version specified in + `versions`. + + :param versions: a list of string versions, of the form ["33", "32"], + or None. The first version will be assumed to support our ABI. + :param platform: specify the exact platform you want valid + tags for, or None. If None, use the local system platform. + :param impl: specify the exact implementation you want valid + tags for, or None. If None, use the local interpreter impl. + :param abi: specify the exact abi you want valid + tags for, or None. If None, use the local interpreter abi. + """ + supported = [] + + # Versions must be given with respect to the preference + if versions is None: + version_info = get_impl_version_info() + versions = get_all_minor_versions_as_strings(version_info) + + impl = impl or get_abbr_impl() + + abis = [] # type: List[str] + + abi = abi or get_abi_tag() + if abi: + abis[0:0] = [abi] + + abi3s = set() # type: Set[str] + for suffix in get_extension_suffixes(): + if suffix.startswith('.abi'): + abi3s.add(suffix.split('.', 2)[1]) + + abis.extend(sorted(list(abi3s))) + + abis.append('none') + + if not noarch: + arch = platform or get_platform() + arch_prefix, arch_sep, arch_suffix = arch.partition('_') + if arch.startswith('macosx'): + # support macosx-10.6-intel on macosx-10.9-x86_64 + match = _osx_arch_pat.match(arch) + if match: + name, major, minor, actual_arch = match.groups() + tpl = '{}_{}_%i_%s'.format(name, major) + arches = [] + for m in reversed(range(int(minor) + 1)): + for a in get_darwin_arches(int(major), m, actual_arch): + arches.append(tpl % (m, a)) + else: + # arch pattern didn't match (?!) + arches = [arch] + elif arch_prefix == 'manylinux2014': + arches = [arch] + # manylinux1/manylinux2010 wheels run on most manylinux2014 systems + # with the exception of wheels depending on ncurses. PEP 599 states + # manylinux1/manylinux2010 wheels should be considered + # manylinux2014 wheels: + # https://www.python.org/dev/peps/pep-0599/#backwards-compatibility-with-manylinux2010-wheels + if arch_suffix in {'i686', 'x86_64'}: + arches.append('manylinux2010' + arch_sep + arch_suffix) + arches.append('manylinux1' + arch_sep + arch_suffix) + elif arch_prefix == 'manylinux2010': + # manylinux1 wheels run on most manylinux2010 systems with the + # exception of wheels depending on ncurses. PEP 571 states + # manylinux1 wheels should be considered manylinux2010 wheels: + # https://www.python.org/dev/peps/pep-0571/#backwards-compatibility-with-manylinux1-wheels + arches = [arch, 'manylinux1' + arch_sep + arch_suffix] + elif platform is None: + arches = [] + if is_manylinux2014_compatible(): + arches.append('manylinux2014' + arch_sep + arch_suffix) + if is_manylinux2010_compatible(): + arches.append('manylinux2010' + arch_sep + arch_suffix) + if is_manylinux1_compatible(): + arches.append('manylinux1' + arch_sep + arch_suffix) + arches.append(arch) + else: + arches = [arch] + + # Current version, current API (built specifically for our Python): + for abi in abis: + for arch in arches: + supported.append(('%s%s' % (impl, versions[0]), abi, arch)) + + # abi3 modules compatible with older version of Python + for version in versions[1:]: + # abi3 was introduced in Python 3.2 + if version in {'31', '30'}: + break + for abi in abi3s: # empty set if not Python 3 + for arch in arches: + supported.append(("%s%s" % (impl, version), abi, arch)) + + # Has binaries, does not use the Python API: + for arch in arches: + supported.append(('py%s' % (versions[0][0]), 'none', arch)) + + # No abi / arch, but requires our implementation: + supported.append(('%s%s' % (impl, versions[0]), 'none', 'any')) + # Tagged specifically as being cross-version compatible + # (with just the major version specified) + supported.append(('%s%s' % (impl, versions[0][0]), 'none', 'any')) + + # No abi / arch, generic Python + for i, version in enumerate(versions): + supported.append(('py%s' % (version,), 'none', 'any')) + if i == 0: + supported.append(('py%s' % (version[0]), 'none', 'any')) + + return supported + + +implementation_tag = get_impl_tag() diff --git a/my_env/Lib/site-packages/pip/_internal/pyproject.py b/my_env/Lib/site-packages/pip/_internal/pyproject.py new file mode 100644 index 000000000..98c20f779 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/pyproject.py @@ -0,0 +1,171 @@ +from __future__ import absolute_import + +import io +import os +import sys + +from pip._vendor import pytoml, six + +from pip._internal.exceptions import InstallationError +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Any, Tuple, Optional, List + + +def _is_list_of_str(obj): + # type: (Any) -> bool + return ( + isinstance(obj, list) and + all(isinstance(item, six.string_types) for item in obj) + ) + + +def make_pyproject_path(unpacked_source_directory): + # type: (str) -> str + path = os.path.join(unpacked_source_directory, 'pyproject.toml') + + # Python2 __file__ should not be unicode + if six.PY2 and isinstance(path, six.text_type): + path = path.encode(sys.getfilesystemencoding()) + + return path + + +def load_pyproject_toml( + use_pep517, # type: Optional[bool] + pyproject_toml, # type: str + setup_py, # type: str + req_name # type: str +): + # type: (...) -> Optional[Tuple[List[str], str, List[str]]] + """Load the pyproject.toml file. + + Parameters: + use_pep517 - Has the user requested PEP 517 processing? None + means the user hasn't explicitly specified. + pyproject_toml - Location of the project's pyproject.toml file + setup_py - Location of the project's setup.py file + req_name - The name of the requirement we're processing (for + error reporting) + + Returns: + None if we should use the legacy code path, otherwise a tuple + ( + requirements from pyproject.toml, + name of PEP 517 backend, + requirements we should check are installed after setting + up the build environment + ) + """ + has_pyproject = os.path.isfile(pyproject_toml) + has_setup = os.path.isfile(setup_py) + + if has_pyproject: + with io.open(pyproject_toml, encoding="utf-8") as f: + pp_toml = pytoml.load(f) + build_system = pp_toml.get("build-system") + else: + build_system = None + + # The following cases must use PEP 517 + # We check for use_pep517 being non-None and falsey because that means + # the user explicitly requested --no-use-pep517. The value 0 as + # opposed to False can occur when the value is provided via an + # environment variable or config file option (due to the quirk of + # strtobool() returning an integer in pip's configuration code). + if has_pyproject and not has_setup: + if use_pep517 is not None and not use_pep517: + raise InstallationError( + "Disabling PEP 517 processing is invalid: " + "project does not have a setup.py" + ) + use_pep517 = True + elif build_system and "build-backend" in build_system: + if use_pep517 is not None and not use_pep517: + raise InstallationError( + "Disabling PEP 517 processing is invalid: " + "project specifies a build backend of {} " + "in pyproject.toml".format( + build_system["build-backend"] + ) + ) + use_pep517 = True + + # If we haven't worked out whether to use PEP 517 yet, + # and the user hasn't explicitly stated a preference, + # we do so if the project has a pyproject.toml file. + elif use_pep517 is None: + use_pep517 = has_pyproject + + # At this point, we know whether we're going to use PEP 517. + assert use_pep517 is not None + + # If we're using the legacy code path, there is nothing further + # for us to do here. + if not use_pep517: + return None + + if build_system is None: + # Either the user has a pyproject.toml with no build-system + # section, or the user has no pyproject.toml, but has opted in + # explicitly via --use-pep517. + # In the absence of any explicit backend specification, we + # assume the setuptools backend that most closely emulates the + # traditional direct setup.py execution, and require wheel and + # a version of setuptools that supports that backend. + + build_system = { + "requires": ["setuptools>=40.8.0", "wheel"], + "build-backend": "setuptools.build_meta:__legacy__", + } + + # If we're using PEP 517, we have build system information (either + # from pyproject.toml, or defaulted by the code above). + # Note that at this point, we do not know if the user has actually + # specified a backend, though. + assert build_system is not None + + # Ensure that the build-system section in pyproject.toml conforms + # to PEP 518. + error_template = ( + "{package} has a pyproject.toml file that does not comply " + "with PEP 518: {reason}" + ) + + # Specifying the build-system table but not the requires key is invalid + if "requires" not in build_system: + raise InstallationError( + error_template.format(package=req_name, reason=( + "it has a 'build-system' table but not " + "'build-system.requires' which is mandatory in the table" + )) + ) + + # Error out if requires is not a list of strings + requires = build_system["requires"] + if not _is_list_of_str(requires): + raise InstallationError(error_template.format( + package=req_name, + reason="'build-system.requires' is not a list of strings.", + )) + + backend = build_system.get("build-backend") + check = [] # type: List[str] + if backend is None: + # If the user didn't specify a backend, we assume they want to use + # the setuptools backend. But we can't be sure they have included + # a version of setuptools which supplies the backend, or wheel + # (which is needed by the backend) in their requirements. So we + # make a note to check that those requirements are present once + # we have set up the environment. + # This is quite a lot of work to check for a very specific case. But + # the problem is, that case is potentially quite common - projects that + # adopted PEP 518 early for the ability to specify requirements to + # execute setup.py, but never considered needing to mention the build + # tools themselves. The original PEP 518 code had a similar check (but + # implemented in a different way). + backend = "setuptools.build_meta:__legacy__" + check = ["setuptools>=40.8.0", "wheel"] + + return (requires, backend, check) diff --git a/my_env/Lib/site-packages/pip/_internal/req/__init__.py b/my_env/Lib/site-packages/pip/_internal/req/__init__.py new file mode 100644 index 000000000..993f23a23 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/req/__init__.py @@ -0,0 +1,82 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +from __future__ import absolute_import + +import logging + +from pip._internal.utils.logging import indent_log +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +from .req_file import parse_requirements +from .req_install import InstallRequirement +from .req_set import RequirementSet + +if MYPY_CHECK_RUNNING: + from typing import Any, List, Sequence + +__all__ = [ + "RequirementSet", "InstallRequirement", + "parse_requirements", "install_given_reqs", +] + +logger = logging.getLogger(__name__) + + +def install_given_reqs( + to_install, # type: List[InstallRequirement] + install_options, # type: List[str] + global_options=(), # type: Sequence[str] + *args, # type: Any + **kwargs # type: Any +): + # type: (...) -> List[InstallRequirement] + """ + Install everything in the given list. + + (to be called after having downloaded and unpacked the packages) + """ + + if to_install: + logger.info( + 'Installing collected packages: %s', + ', '.join([req.name for req in to_install]), + ) + + with indent_log(): + for requirement in to_install: + if requirement.conflicts_with: + logger.info( + 'Found existing installation: %s', + requirement.conflicts_with, + ) + with indent_log(): + uninstalled_pathset = requirement.uninstall( + auto_confirm=True + ) + try: + requirement.install( + install_options, + global_options, + *args, + **kwargs + ) + except Exception: + should_rollback = ( + requirement.conflicts_with and + not requirement.install_succeeded + ) + # if install did not succeed, rollback previous uninstall + if should_rollback: + uninstalled_pathset.rollback() + raise + else: + should_commit = ( + requirement.conflicts_with and + requirement.install_succeeded + ) + if should_commit: + uninstalled_pathset.commit() + requirement.remove_temporary_source() + + return to_install diff --git a/my_env/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..250d2ee8b Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-37.pyc new file mode 100644 index 000000000..d3138ade4 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-37.pyc new file mode 100644 index 000000000..9f06733b2 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-37.pyc new file mode 100644 index 000000000..db31edbe9 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-37.pyc new file mode 100644 index 000000000..bfcdd5b2f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-37.pyc new file mode 100644 index 000000000..748e4b094 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-37.pyc new file mode 100644 index 000000000..1df0a533f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/req/constructors.py b/my_env/Lib/site-packages/pip/_internal/req/constructors.py new file mode 100644 index 000000000..03b51484b --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/req/constructors.py @@ -0,0 +1,436 @@ +"""Backing implementation for InstallRequirement's various constructors + +The idea here is that these formed a major chunk of InstallRequirement's size +so, moving them and support code dedicated to them outside of that class +helps creates for better understandability for the rest of the code. + +These are meant to be used elsewhere within pip to create instances of +InstallRequirement. +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +import logging +import os +import re + +from pip._vendor.packaging.markers import Marker +from pip._vendor.packaging.requirements import InvalidRequirement, Requirement +from pip._vendor.packaging.specifiers import Specifier +from pip._vendor.pkg_resources import RequirementParseError, parse_requirements + +from pip._internal.exceptions import InstallationError +from pip._internal.models.index import PyPI, TestPyPI +from pip._internal.models.link import Link +from pip._internal.pyproject import make_pyproject_path +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.filetypes import ARCHIVE_EXTENSIONS +from pip._internal.utils.misc import is_installable_dir, splitext +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs import is_url, vcs +from pip._internal.wheel import Wheel + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, Dict, Optional, Set, Tuple, Union, + ) + from pip._internal.cache import WheelCache + + +__all__ = [ + "install_req_from_editable", "install_req_from_line", + "parse_editable" +] + +logger = logging.getLogger(__name__) +operators = Specifier._operators.keys() + + +def is_archive_file(name): + # type: (str) -> bool + """Return True if `name` is a considered as an archive file.""" + ext = splitext(name)[1].lower() + if ext in ARCHIVE_EXTENSIONS: + return True + return False + + +def _strip_extras(path): + # type: (str) -> Tuple[str, Optional[str]] + m = re.match(r'^(.+)(\[[^\]]+\])$', path) + extras = None + if m: + path_no_extras = m.group(1) + extras = m.group(2) + else: + path_no_extras = path + + return path_no_extras, extras + + +def convert_extras(extras): + # type: (Optional[str]) -> Set[str] + if not extras: + return set() + return Requirement("placeholder" + extras.lower()).extras + + +def parse_editable(editable_req): + # type: (str) -> Tuple[Optional[str], str, Optional[Set[str]]] + """Parses an editable requirement into: + - a requirement name + - an URL + - extras + - editable options + Accepted requirements: + svn+http://blahblah@rev#egg=Foobar[baz]&subdirectory=version_subdir + .[some_extra] + """ + + url = editable_req + + # If a file path is specified with extras, strip off the extras. + url_no_extras, extras = _strip_extras(url) + + if os.path.isdir(url_no_extras): + if not os.path.exists(os.path.join(url_no_extras, 'setup.py')): + msg = ( + 'File "setup.py" not found. Directory cannot be installed ' + 'in editable mode: {}'.format(os.path.abspath(url_no_extras)) + ) + pyproject_path = make_pyproject_path(url_no_extras) + if os.path.isfile(pyproject_path): + msg += ( + '\n(A "pyproject.toml" file was found, but editable ' + 'mode currently requires a setup.py based build.)' + ) + raise InstallationError(msg) + + # Treating it as code that has already been checked out + url_no_extras = path_to_url(url_no_extras) + + if url_no_extras.lower().startswith('file:'): + package_name = Link(url_no_extras).egg_fragment + if extras: + return ( + package_name, + url_no_extras, + Requirement("placeholder" + extras.lower()).extras, + ) + else: + return package_name, url_no_extras, None + + for version_control in vcs: + if url.lower().startswith('%s:' % version_control): + url = '%s+%s' % (version_control, url) + break + + if '+' not in url: + raise InstallationError( + '{} is not a valid editable requirement. ' + 'It should either be a path to a local project or a VCS URL ' + '(beginning with svn+, git+, hg+, or bzr+).'.format(editable_req) + ) + + vc_type = url.split('+', 1)[0].lower() + + if not vcs.get_backend(vc_type): + error_message = 'For --editable=%s only ' % editable_req + \ + ', '.join([backend.name + '+URL' for backend in vcs.backends]) + \ + ' is currently supported' + raise InstallationError(error_message) + + package_name = Link(url).egg_fragment + if not package_name: + raise InstallationError( + "Could not detect requirement name for '%s', please specify one " + "with #egg=your_package_name" % editable_req + ) + return package_name, url, None + + +def deduce_helpful_msg(req): + # type: (str) -> str + """Returns helpful msg in case requirements file does not exist, + or cannot be parsed. + + :params req: Requirements file path + """ + msg = "" + if os.path.exists(req): + msg = " It does exist." + # Try to parse and check if it is a requirements file. + try: + with open(req, 'r') as fp: + # parse first line only + next(parse_requirements(fp.read())) + msg += " The argument you provided " + \ + "(%s) appears to be a" % (req) + \ + " requirements file. If that is the" + \ + " case, use the '-r' flag to install" + \ + " the packages specified within it." + except RequirementParseError: + logger.debug("Cannot parse '%s' as requirements \ + file" % (req), exc_info=True) + else: + msg += " File '%s' does not exist." % (req) + return msg + + +class RequirementParts(object): + def __init__( + self, + requirement, # type: Optional[Requirement] + link, # type: Optional[Link] + markers, # type: Optional[Marker] + extras, # type: Set[str] + ): + self.requirement = requirement + self.link = link + self.markers = markers + self.extras = extras + + +def parse_req_from_editable(editable_req): + # type: (str) -> RequirementParts + name, url, extras_override = parse_editable(editable_req) + + if name is not None: + try: + req = Requirement(name) + except InvalidRequirement: + raise InstallationError("Invalid requirement: '%s'" % name) + else: + req = None + + link = Link(url) + + return RequirementParts(req, link, None, extras_override) + + +# ---- The actual constructors follow ---- + + +def install_req_from_editable( + editable_req, # type: str + comes_from=None, # type: Optional[str] + use_pep517=None, # type: Optional[bool] + isolated=False, # type: bool + options=None, # type: Optional[Dict[str, Any]] + wheel_cache=None, # type: Optional[WheelCache] + constraint=False # type: bool +): + # type: (...) -> InstallRequirement + + parts = parse_req_from_editable(editable_req) + + source_dir = parts.link.file_path if parts.link.scheme == 'file' else None + + return InstallRequirement( + parts.requirement, comes_from, source_dir=source_dir, + editable=True, + link=parts.link, + constraint=constraint, + use_pep517=use_pep517, + isolated=isolated, + options=options if options else {}, + wheel_cache=wheel_cache, + extras=parts.extras, + ) + + +def _looks_like_path(name): + # type: (str) -> bool + """Checks whether the string "looks like" a path on the filesystem. + + This does not check whether the target actually exists, only judge from the + appearance. + + Returns true if any of the following conditions is true: + * a path separator is found (either os.path.sep or os.path.altsep); + * a dot is found (which represents the current directory). + """ + if os.path.sep in name: + return True + if os.path.altsep is not None and os.path.altsep in name: + return True + if name.startswith("."): + return True + return False + + +def _get_url_from_path(path, name): + # type: (str, str) -> str + """ + First, it checks whether a provided path is an installable directory + (e.g. it has a setup.py). If it is, returns the path. + + If false, check if the path is an archive file (such as a .whl). + The function checks if the path is a file. If false, if the path has + an @, it will treat it as a PEP 440 URL requirement and return the path. + """ + if _looks_like_path(name) and os.path.isdir(path): + if is_installable_dir(path): + return path_to_url(path) + raise InstallationError( + "Directory %r is not installable. Neither 'setup.py' " + "nor 'pyproject.toml' found." % name + ) + if not is_archive_file(path): + return None + if os.path.isfile(path): + return path_to_url(path) + urlreq_parts = name.split('@', 1) + if len(urlreq_parts) >= 2 and not _looks_like_path(urlreq_parts[0]): + # If the path contains '@' and the part before it does not look + # like a path, try to treat it as a PEP 440 URL req instead. + return None + logger.warning( + 'Requirement %r looks like a filename, but the ' + 'file does not exist', + name + ) + return path_to_url(path) + + +def parse_req_from_line(name, line_source): + # type: (str, Optional[str]) -> RequirementParts + if is_url(name): + marker_sep = '; ' + else: + marker_sep = ';' + if marker_sep in name: + name, markers_as_string = name.split(marker_sep, 1) + markers_as_string = markers_as_string.strip() + if not markers_as_string: + markers = None + else: + markers = Marker(markers_as_string) + else: + markers = None + name = name.strip() + req_as_string = None + path = os.path.normpath(os.path.abspath(name)) + link = None + extras_as_string = None + + if is_url(name): + link = Link(name) + else: + p, extras_as_string = _strip_extras(path) + url = _get_url_from_path(p, name) + if url is not None: + link = Link(url) + + # it's a local file, dir, or url + if link: + # Handle relative file URLs + if link.scheme == 'file' and re.search(r'\.\./', link.url): + link = Link( + path_to_url(os.path.normpath(os.path.abspath(link.path)))) + # wheel file + if link.is_wheel: + wheel = Wheel(link.filename) # can raise InvalidWheelFilename + req_as_string = "%s==%s" % (wheel.name, wheel.version) + else: + # set the req to the egg fragment. when it's not there, this + # will become an 'unnamed' requirement + req_as_string = link.egg_fragment + + # a requirement specifier + else: + req_as_string = name + + extras = convert_extras(extras_as_string) + + def with_source(text): + if not line_source: + return text + return '{} (from {})'.format(text, line_source) + + if req_as_string is not None: + try: + req = Requirement(req_as_string) + except InvalidRequirement: + if os.path.sep in req_as_string: + add_msg = "It looks like a path." + add_msg += deduce_helpful_msg(req_as_string) + elif ('=' in req_as_string and + not any(op in req_as_string for op in operators)): + add_msg = "= is not a valid operator. Did you mean == ?" + else: + add_msg = '' + msg = with_source( + 'Invalid requirement: {!r}'.format(req_as_string) + ) + if add_msg: + msg += '\nHint: {}'.format(add_msg) + raise InstallationError(msg) + else: + req = None + + return RequirementParts(req, link, markers, extras) + + +def install_req_from_line( + name, # type: str + comes_from=None, # type: Optional[Union[str, InstallRequirement]] + use_pep517=None, # type: Optional[bool] + isolated=False, # type: bool + options=None, # type: Optional[Dict[str, Any]] + wheel_cache=None, # type: Optional[WheelCache] + constraint=False, # type: bool + line_source=None, # type: Optional[str] +): + # type: (...) -> InstallRequirement + """Creates an InstallRequirement from a name, which might be a + requirement, directory containing 'setup.py', filename, or URL. + + :param line_source: An optional string describing where the line is from, + for logging purposes in case of an error. + """ + parts = parse_req_from_line(name, line_source) + + return InstallRequirement( + parts.requirement, comes_from, link=parts.link, markers=parts.markers, + use_pep517=use_pep517, isolated=isolated, + options=options if options else {}, + wheel_cache=wheel_cache, + constraint=constraint, + extras=parts.extras, + ) + + +def install_req_from_req_string( + req_string, # type: str + comes_from=None, # type: Optional[InstallRequirement] + isolated=False, # type: bool + wheel_cache=None, # type: Optional[WheelCache] + use_pep517=None # type: Optional[bool] +): + # type: (...) -> InstallRequirement + try: + req = Requirement(req_string) + except InvalidRequirement: + raise InstallationError("Invalid requirement: '%s'" % req_string) + + domains_not_allowed = [ + PyPI.file_storage_domain, + TestPyPI.file_storage_domain, + ] + if (req.url and comes_from and comes_from.link and + comes_from.link.netloc in domains_not_allowed): + # Explicitly disallow pypi packages that depend on external urls + raise InstallationError( + "Packages installed from PyPI cannot depend on packages " + "which are not also hosted on PyPI.\n" + "%s depends on %s " % (comes_from.name, req) + ) + + return InstallRequirement( + req, comes_from, isolated=isolated, wheel_cache=wheel_cache, + use_pep517=use_pep517 + ) diff --git a/my_env/Lib/site-packages/pip/_internal/req/req_file.py b/my_env/Lib/site-packages/pip/_internal/req/req_file.py new file mode 100644 index 000000000..83b3d344c --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/req/req_file.py @@ -0,0 +1,403 @@ +""" +Requirements file parsing +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +from __future__ import absolute_import + +import optparse +import os +import re +import shlex +import sys + +from pip._vendor.six.moves import filterfalse +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip._internal.cli import cmdoptions +from pip._internal.download import get_file_content +from pip._internal.exceptions import RequirementsFileParseError +from pip._internal.models.search_scope import SearchScope +from pip._internal.req.constructors import ( + install_req_from_editable, + install_req_from_line, +) +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, Callable, Iterator, List, NoReturn, Optional, Text, Tuple, + ) + from pip._internal.req import InstallRequirement + from pip._internal.cache import WheelCache + from pip._internal.index import PackageFinder + from pip._internal.network.session import PipSession + + ReqFileLines = Iterator[Tuple[int, Text]] + +__all__ = ['parse_requirements'] + +SCHEME_RE = re.compile(r'^(http|https|file):', re.I) +COMMENT_RE = re.compile(r'(^|\s+)#.*$') + +# Matches environment variable-style values in '${MY_VARIABLE_1}' with the +# variable name consisting of only uppercase letters, digits or the '_' +# (underscore). This follows the POSIX standard defined in IEEE Std 1003.1, +# 2013 Edition. +ENV_VAR_RE = re.compile(r'(?P\$\{(?P[A-Z0-9_]+)\})') + +SUPPORTED_OPTIONS = [ + cmdoptions.constraints, + cmdoptions.editable, + cmdoptions.requirements, + cmdoptions.no_index, + cmdoptions.index_url, + cmdoptions.find_links, + cmdoptions.extra_index_url, + cmdoptions.always_unzip, + cmdoptions.no_binary, + cmdoptions.only_binary, + cmdoptions.pre, + cmdoptions.trusted_host, + cmdoptions.require_hashes, +] # type: List[Callable[..., optparse.Option]] + +# options to be passed to requirements +SUPPORTED_OPTIONS_REQ = [ + cmdoptions.install_options, + cmdoptions.global_options, + cmdoptions.hash, +] # type: List[Callable[..., optparse.Option]] + +# the 'dest' string values +SUPPORTED_OPTIONS_REQ_DEST = [str(o().dest) for o in SUPPORTED_OPTIONS_REQ] + + +def parse_requirements( + filename, # type: str + finder=None, # type: Optional[PackageFinder] + comes_from=None, # type: Optional[str] + options=None, # type: Optional[optparse.Values] + session=None, # type: Optional[PipSession] + constraint=False, # type: bool + wheel_cache=None, # type: Optional[WheelCache] + use_pep517=None # type: Optional[bool] +): + # type: (...) -> Iterator[InstallRequirement] + """Parse a requirements file and yield InstallRequirement instances. + + :param filename: Path or url of requirements file. + :param finder: Instance of pip.index.PackageFinder. + :param comes_from: Origin description of requirements. + :param options: cli options. + :param session: Instance of pip.download.PipSession. + :param constraint: If true, parsing a constraint file rather than + requirements file. + :param wheel_cache: Instance of pip.wheel.WheelCache + :param use_pep517: Value of the --use-pep517 option. + """ + if session is None: + raise TypeError( + "parse_requirements() missing 1 required keyword argument: " + "'session'" + ) + + _, content = get_file_content( + filename, comes_from=comes_from, session=session + ) + + lines_enum = preprocess(content, options) + + for line_number, line in lines_enum: + req_iter = process_line(line, filename, line_number, finder, + comes_from, options, session, wheel_cache, + use_pep517=use_pep517, constraint=constraint) + for req in req_iter: + yield req + + +def preprocess(content, options): + # type: (Text, Optional[optparse.Values]) -> ReqFileLines + """Split, filter, and join lines, and return a line iterator + + :param content: the content of the requirements file + :param options: cli options + """ + lines_enum = enumerate(content.splitlines(), start=1) # type: ReqFileLines + lines_enum = join_lines(lines_enum) + lines_enum = ignore_comments(lines_enum) + lines_enum = skip_regex(lines_enum, options) + lines_enum = expand_env_variables(lines_enum) + return lines_enum + + +def process_line( + line, # type: Text + filename, # type: str + line_number, # type: int + finder=None, # type: Optional[PackageFinder] + comes_from=None, # type: Optional[str] + options=None, # type: Optional[optparse.Values] + session=None, # type: Optional[PipSession] + wheel_cache=None, # type: Optional[WheelCache] + use_pep517=None, # type: Optional[bool] + constraint=False, # type: bool +): + # type: (...) -> Iterator[InstallRequirement] + """Process a single requirements line; This can result in creating/yielding + requirements, or updating the finder. + + For lines that contain requirements, the only options that have an effect + are from SUPPORTED_OPTIONS_REQ, and they are scoped to the + requirement. Other options from SUPPORTED_OPTIONS may be present, but are + ignored. + + For lines that do not contain requirements, the only options that have an + effect are from SUPPORTED_OPTIONS. Options from SUPPORTED_OPTIONS_REQ may + be present, but are ignored. These lines may contain multiple options + (although our docs imply only one is supported), and all our parsed and + affect the finder. + + :param constraint: If True, parsing a constraints file. + :param options: OptionParser options that we may update + """ + parser = build_parser(line) + defaults = parser.get_default_values() + defaults.index_url = None + if finder: + defaults.format_control = finder.format_control + args_str, options_str = break_args_options(line) + # Prior to 2.7.3, shlex cannot deal with unicode entries + if sys.version_info < (2, 7, 3): + # https://github.com/python/mypy/issues/1174 + options_str = options_str.encode('utf8') # type: ignore + # https://github.com/python/mypy/issues/1174 + opts, _ = parser.parse_args( + shlex.split(options_str), defaults) # type: ignore + + # preserve for the nested code path + line_comes_from = '%s %s (line %s)' % ( + '-c' if constraint else '-r', filename, line_number, + ) + + # yield a line requirement + if args_str: + isolated = options.isolated_mode if options else False + if options: + cmdoptions.check_install_build_global(options, opts) + # get the options that apply to requirements + req_options = {} + for dest in SUPPORTED_OPTIONS_REQ_DEST: + if dest in opts.__dict__ and opts.__dict__[dest]: + req_options[dest] = opts.__dict__[dest] + line_source = 'line {} of {}'.format(line_number, filename) + yield install_req_from_line( + args_str, + comes_from=line_comes_from, + use_pep517=use_pep517, + isolated=isolated, + options=req_options, + wheel_cache=wheel_cache, + constraint=constraint, + line_source=line_source, + ) + + # yield an editable requirement + elif opts.editables: + isolated = options.isolated_mode if options else False + yield install_req_from_editable( + opts.editables[0], comes_from=line_comes_from, + use_pep517=use_pep517, + constraint=constraint, isolated=isolated, wheel_cache=wheel_cache + ) + + # parse a nested requirements file + elif opts.requirements or opts.constraints: + if opts.requirements: + req_path = opts.requirements[0] + nested_constraint = False + else: + req_path = opts.constraints[0] + nested_constraint = True + # original file is over http + if SCHEME_RE.search(filename): + # do a url join so relative paths work + req_path = urllib_parse.urljoin(filename, req_path) + # original file and nested file are paths + elif not SCHEME_RE.search(req_path): + # do a join so relative paths work + req_path = os.path.join(os.path.dirname(filename), req_path) + # TODO: Why not use `comes_from='-r {} (line {})'` here as well? + parsed_reqs = parse_requirements( + req_path, finder, comes_from, options, session, + constraint=nested_constraint, wheel_cache=wheel_cache + ) + for req in parsed_reqs: + yield req + + # percolate hash-checking option upward + elif opts.require_hashes: + options.require_hashes = opts.require_hashes + + # set finder options + elif finder: + find_links = finder.find_links + index_urls = finder.index_urls + if opts.index_url: + index_urls = [opts.index_url] + if opts.no_index is True: + index_urls = [] + if opts.extra_index_urls: + index_urls.extend(opts.extra_index_urls) + if opts.find_links: + # FIXME: it would be nice to keep track of the source + # of the find_links: support a find-links local path + # relative to a requirements file. + value = opts.find_links[0] + req_dir = os.path.dirname(os.path.abspath(filename)) + relative_to_reqs_file = os.path.join(req_dir, value) + if os.path.exists(relative_to_reqs_file): + value = relative_to_reqs_file + find_links.append(value) + + search_scope = SearchScope( + find_links=find_links, + index_urls=index_urls, + ) + finder.search_scope = search_scope + + if opts.pre: + finder.set_allow_all_prereleases() + for host in opts.trusted_hosts or []: + source = 'line {} of {}'.format(line_number, filename) + session.add_trusted_host(host, source=source) + + +def break_args_options(line): + # type: (Text) -> Tuple[str, Text] + """Break up the line into an args and options string. We only want to shlex + (and then optparse) the options, not the args. args can contain markers + which are corrupted by shlex. + """ + tokens = line.split(' ') + args = [] + options = tokens[:] + for token in tokens: + if token.startswith('-') or token.startswith('--'): + break + else: + args.append(token) + options.pop(0) + return ' '.join(args), ' '.join(options) # type: ignore + + +def build_parser(line): + # type: (Text) -> optparse.OptionParser + """ + Return a parser for parsing requirement lines + """ + parser = optparse.OptionParser(add_help_option=False) + + option_factories = SUPPORTED_OPTIONS + SUPPORTED_OPTIONS_REQ + for option_factory in option_factories: + option = option_factory() + parser.add_option(option) + + # By default optparse sys.exits on parsing errors. We want to wrap + # that in our own exception. + def parser_exit(self, msg): + # type: (Any, str) -> NoReturn + # add offending line + msg = 'Invalid requirement: %s\n%s' % (line, msg) + raise RequirementsFileParseError(msg) + # NOTE: mypy disallows assigning to a method + # https://github.com/python/mypy/issues/2427 + parser.exit = parser_exit # type: ignore + + return parser + + +def join_lines(lines_enum): + # type: (ReqFileLines) -> ReqFileLines + """Joins a line ending in '\' with the previous line (except when following + comments). The joined line takes on the index of the first line. + """ + primary_line_number = None + new_line = [] # type: List[Text] + for line_number, line in lines_enum: + if not line.endswith('\\') or COMMENT_RE.match(line): + if COMMENT_RE.match(line): + # this ensures comments are always matched later + line = ' ' + line + if new_line: + new_line.append(line) + yield primary_line_number, ''.join(new_line) + new_line = [] + else: + yield line_number, line + else: + if not new_line: + primary_line_number = line_number + new_line.append(line.strip('\\')) + + # last line contains \ + if new_line: + yield primary_line_number, ''.join(new_line) + + # TODO: handle space after '\'. + + +def ignore_comments(lines_enum): + # type: (ReqFileLines) -> ReqFileLines + """ + Strips comments and filter empty lines. + """ + for line_number, line in lines_enum: + line = COMMENT_RE.sub('', line) + line = line.strip() + if line: + yield line_number, line + + +def skip_regex(lines_enum, options): + # type: (ReqFileLines, Optional[optparse.Values]) -> ReqFileLines + """ + Skip lines that match '--skip-requirements-regex' pattern + + Note: the regex pattern is only built once + """ + skip_regex = options.skip_requirements_regex if options else None + if skip_regex: + pattern = re.compile(skip_regex) + lines_enum = filterfalse(lambda e: pattern.search(e[1]), lines_enum) + return lines_enum + + +def expand_env_variables(lines_enum): + # type: (ReqFileLines) -> ReqFileLines + """Replace all environment variables that can be retrieved via `os.getenv`. + + The only allowed format for environment variables defined in the + requirement file is `${MY_VARIABLE_1}` to ensure two things: + + 1. Strings that contain a `$` aren't accidentally (partially) expanded. + 2. Ensure consistency across platforms for requirement files. + + These points are the result of a discussion on the `github pull + request #3514 `_. + + Valid characters in variable names follow the `POSIX standard + `_ and are limited + to uppercase letter, digits and the `_` (underscore). + """ + for line_number, line in lines_enum: + for env_var, var_name in ENV_VAR_RE.findall(line): + value = os.getenv(var_name) + if not value: + continue + + line = line.replace(env_var, value) + + yield line_number, line diff --git a/my_env/Lib/site-packages/pip/_internal/req/req_install.py b/my_env/Lib/site-packages/pip/_internal/req/req_install.py new file mode 100644 index 000000000..5a8c0dc14 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/req/req_install.py @@ -0,0 +1,966 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import atexit +import logging +import os +import shutil +import sys +import sysconfig +import zipfile +from distutils.util import change_root + +from pip._vendor import pkg_resources, six +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import Version +from pip._vendor.packaging.version import parse as parse_version +from pip._vendor.pep517.wrappers import Pep517HookCaller + +from pip._internal import pep425tags, wheel +from pip._internal.build_env import NoOpBuildEnvironment +from pip._internal.exceptions import InstallationError +from pip._internal.models.link import Link +from pip._internal.operations.generate_metadata import get_metadata_generator +from pip._internal.pyproject import load_pyproject_toml, make_pyproject_path +from pip._internal.req.req_uninstall import UninstallPathSet +from pip._internal.utils.compat import native_str +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.logging import indent_log +from pip._internal.utils.marker_files import ( + PIP_DELETE_MARKER_FILENAME, + has_delete_marker_file, +) +from pip._internal.utils.misc import ( + _make_build_dir, + ask_path_exists, + backup_dir, + display_path, + dist_in_site_packages, + dist_in_usersite, + ensure_dir, + get_installed_version, + hide_url, + redact_auth_from_url, + rmtree, +) +from pip._internal.utils.packaging import get_metadata +from pip._internal.utils.setuptools_build import make_setuptools_shim_args +from pip._internal.utils.subprocess import ( + call_subprocess, + runner_with_spinner_message, +) +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.virtualenv import running_under_virtualenv +from pip._internal.vcs import vcs + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, Dict, Iterable, List, Optional, Sequence, Union, + ) + from pip._internal.build_env import BuildEnvironment + from pip._internal.cache import WheelCache + from pip._internal.index import PackageFinder + from pip._vendor.pkg_resources import Distribution + from pip._vendor.packaging.specifiers import SpecifierSet + from pip._vendor.packaging.markers import Marker + + +logger = logging.getLogger(__name__) + + +class InstallRequirement(object): + """ + Represents something that may be installed later on, may have information + about where to fetch the relevant requirement and also contains logic for + installing the said requirement. + """ + + def __init__( + self, + req, # type: Optional[Requirement] + comes_from, # type: Optional[Union[str, InstallRequirement]] + source_dir=None, # type: Optional[str] + editable=False, # type: bool + link=None, # type: Optional[Link] + markers=None, # type: Optional[Marker] + use_pep517=None, # type: Optional[bool] + isolated=False, # type: bool + options=None, # type: Optional[Dict[str, Any]] + wheel_cache=None, # type: Optional[WheelCache] + constraint=False, # type: bool + extras=() # type: Iterable[str] + ): + # type: (...) -> None + assert req is None or isinstance(req, Requirement), req + self.req = req + self.comes_from = comes_from + self.constraint = constraint + if source_dir is None: + self.source_dir = None # type: Optional[str] + else: + self.source_dir = os.path.normpath(os.path.abspath(source_dir)) + self.editable = editable + + self._wheel_cache = wheel_cache + if link is None and req and req.url: + # PEP 508 URL requirement + link = Link(req.url) + self.link = self.original_link = link + + if extras: + self.extras = extras + elif req: + self.extras = { + pkg_resources.safe_extra(extra) for extra in req.extras + } + else: + self.extras = set() + if markers is None and req: + markers = req.marker + self.markers = markers + + # This holds the pkg_resources.Distribution object if this requirement + # is already available: + self.satisfied_by = None + # This hold the pkg_resources.Distribution object if this requirement + # conflicts with another installed distribution: + self.conflicts_with = None + # Temporary build location + self._temp_build_dir = None # type: Optional[TempDirectory] + # Used to store the global directory where the _temp_build_dir should + # have been created. Cf move_to_correct_build_directory method. + self._ideal_build_dir = None # type: Optional[str] + # Set to True after successful installation + self.install_succeeded = None # type: Optional[bool] + self.options = options if options else {} + # Set to True after successful preparation of this requirement + self.prepared = False + self.is_direct = False + + self.isolated = isolated + self.build_env = NoOpBuildEnvironment() # type: BuildEnvironment + + # For PEP 517, the directory where we request the project metadata + # gets stored. We need this to pass to build_wheel, so the backend + # can ensure that the wheel matches the metadata (see the PEP for + # details). + self.metadata_directory = None # type: Optional[str] + + # The static build requirements (from pyproject.toml) + self.pyproject_requires = None # type: Optional[List[str]] + + # Build requirements that we will check are available + self.requirements_to_check = [] # type: List[str] + + # The PEP 517 backend we should use to build the project + self.pep517_backend = None # type: Optional[Pep517HookCaller] + + # Are we using PEP 517 for this requirement? + # After pyproject.toml has been loaded, the only valid values are True + # and False. Before loading, None is valid (meaning "use the default"). + # Setting an explicit value before loading pyproject.toml is supported, + # but after loading this flag should be treated as read only. + self.use_pep517 = use_pep517 + + def __str__(self): + # type: () -> str + if self.req: + s = str(self.req) + if self.link: + s += ' from %s' % redact_auth_from_url(self.link.url) + elif self.link: + s = redact_auth_from_url(self.link.url) + else: + s = '' + if self.satisfied_by is not None: + s += ' in %s' % display_path(self.satisfied_by.location) + if self.comes_from: + if isinstance(self.comes_from, six.string_types): + comes_from = self.comes_from # type: Optional[str] + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += ' (from %s)' % comes_from + return s + + def __repr__(self): + # type: () -> str + return '<%s object: %s editable=%r>' % ( + self.__class__.__name__, str(self), self.editable) + + def format_debug(self): + # type: () -> str + """An un-tested helper for getting state, for debugging. + """ + attributes = vars(self) + names = sorted(attributes) + + state = ( + "{}={!r}".format(attr, attributes[attr]) for attr in sorted(names) + ) + return '<{name} object: {{{state}}}>'.format( + name=self.__class__.__name__, + state=", ".join(state), + ) + + def populate_link(self, finder, upgrade, require_hashes): + # type: (PackageFinder, bool, bool) -> None + """Ensure that if a link can be found for this, that it is found. + + Note that self.link may still be None - if Upgrade is False and the + requirement is already installed. + + If require_hashes is True, don't use the wheel cache, because cached + wheels, always built locally, have different hashes than the files + downloaded from the index server and thus throw false hash mismatches. + Furthermore, cached wheels at present have undeterministic contents due + to file modification times. + """ + if self.link is None: + self.link = finder.find_requirement(self, upgrade) + if self._wheel_cache is not None and not require_hashes: + old_link = self.link + supported_tags = pep425tags.get_supported() + self.link = self._wheel_cache.get( + link=self.link, + package_name=self.name, + supported_tags=supported_tags, + ) + if old_link != self.link: + logger.debug('Using cached wheel link: %s', self.link) + + # Things that are valid for all kinds of requirements? + @property + def name(self): + # type: () -> Optional[str] + if self.req is None: + return None + return native_str(pkg_resources.safe_name(self.req.name)) + + @property + def specifier(self): + # type: () -> SpecifierSet + return self.req.specifier + + @property + def is_pinned(self): + # type: () -> bool + """Return whether I am pinned to an exact version. + + For example, some-package==1.2 is pinned; some-package>1.2 is not. + """ + specifiers = self.specifier + return (len(specifiers) == 1 and + next(iter(specifiers)).operator in {'==', '==='}) + + @property + def installed_version(self): + # type: () -> Optional[str] + return get_installed_version(self.name) + + def match_markers(self, extras_requested=None): + # type: (Optional[Iterable[str]]) -> bool + if not extras_requested: + # Provide an extra to safely evaluate the markers + # without matching any extra + extras_requested = ('',) + if self.markers is not None: + return any( + self.markers.evaluate({'extra': extra}) + for extra in extras_requested) + else: + return True + + @property + def has_hash_options(self): + # type: () -> bool + """Return whether any known-good hashes are specified as options. + + These activate --require-hashes mode; hashes specified as part of a + URL do not. + + """ + return bool(self.options.get('hashes', {})) + + def hashes(self, trust_internet=True): + # type: (bool) -> Hashes + """Return a hash-comparer that considers my option- and URL-based + hashes to be known-good. + + Hashes in URLs--ones embedded in the requirements file, not ones + downloaded from an index server--are almost peers with ones from + flags. They satisfy --require-hashes (whether it was implicitly or + explicitly activated) but do not activate it. md5 and sha224 are not + allowed in flags, which should nudge people toward good algos. We + always OR all hashes together, even ones from URLs. + + :param trust_internet: Whether to trust URL-based (#md5=...) hashes + downloaded from the internet, as by populate_link() + + """ + good_hashes = self.options.get('hashes', {}).copy() + link = self.link if trust_internet else self.original_link + if link and link.hash: + good_hashes.setdefault(link.hash_name, []).append(link.hash) + return Hashes(good_hashes) + + def from_path(self): + # type: () -> Optional[str] + """Format a nice indicator to show where this "comes from" + """ + if self.req is None: + return None + s = str(self.req) + if self.comes_from: + if isinstance(self.comes_from, six.string_types): + comes_from = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += '->' + comes_from + return s + + def ensure_build_location(self, build_dir): + # type: (str) -> str + assert build_dir is not None + if self._temp_build_dir is not None: + assert self._temp_build_dir.path + return self._temp_build_dir.path + if self.req is None: + # for requirement via a path to a directory: the name of the + # package is not available yet so we create a temp directory + # Once run_egg_info will have run, we'll be able to fix it via + # move_to_correct_build_directory(). + # Some systems have /tmp as a symlink which confuses custom + # builds (such as numpy). Thus, we ensure that the real path + # is returned. + self._temp_build_dir = TempDirectory(kind="req-build") + self._ideal_build_dir = build_dir + + return self._temp_build_dir.path + if self.editable: + name = self.name.lower() + else: + name = self.name + # FIXME: Is there a better place to create the build_dir? (hg and bzr + # need this) + if not os.path.exists(build_dir): + logger.debug('Creating directory %s', build_dir) + _make_build_dir(build_dir) + return os.path.join(build_dir, name) + + def move_to_correct_build_directory(self): + # type: () -> None + """Move self._temp_build_dir to "self._ideal_build_dir/self.req.name" + + For some requirements (e.g. a path to a directory), the name of the + package is not available until we run egg_info, so the build_location + will return a temporary directory and store the _ideal_build_dir. + + This is only called to "fix" the build directory after generating + metadata. + """ + if self.source_dir is not None: + return + assert self.req is not None + assert self._temp_build_dir + assert ( + self._ideal_build_dir is not None and + self._ideal_build_dir.path # type: ignore + ) + old_location = self._temp_build_dir + self._temp_build_dir = None # checked inside ensure_build_location + + # Figure out the correct place to put the files. + new_location = self.ensure_build_location(self._ideal_build_dir) + if os.path.exists(new_location): + raise InstallationError( + 'A package already exists in %s; please remove it to continue' + % display_path(new_location) + ) + + # Move the files to the correct location. + logger.debug( + 'Moving package %s from %s to new location %s', + self, display_path(old_location.path), display_path(new_location), + ) + shutil.move(old_location.path, new_location) + + # Update directory-tracking variables, to be in line with new_location + self.source_dir = os.path.normpath(os.path.abspath(new_location)) + self._temp_build_dir = TempDirectory( + path=new_location, kind="req-install", + ) + + # Correct the metadata directory, if it exists + if self.metadata_directory: + old_meta = self.metadata_directory + rel = os.path.relpath(old_meta, start=old_location.path) + new_meta = os.path.join(new_location, rel) + new_meta = os.path.normpath(os.path.abspath(new_meta)) + self.metadata_directory = new_meta + + # Done with any "move built files" work, since have moved files to the + # "ideal" build location. Setting to None allows to clearly flag that + # no more moves are needed. + self._ideal_build_dir = None + + def remove_temporary_source(self): + # type: () -> None + """Remove the source files from this requirement, if they are marked + for deletion""" + if self.source_dir and has_delete_marker_file(self.source_dir): + logger.debug('Removing source in %s', self.source_dir) + rmtree(self.source_dir) + self.source_dir = None + if self._temp_build_dir: + self._temp_build_dir.cleanup() + self._temp_build_dir = None + self.build_env.cleanup() + + def check_if_exists(self, use_user_site): + # type: (bool) -> bool + """Find an installed distribution that satisfies or conflicts + with this requirement, and set self.satisfied_by or + self.conflicts_with appropriately. + """ + if self.req is None: + return False + try: + # get_distribution() will resolve the entire list of requirements + # anyway, and we've already determined that we need the requirement + # in question, so strip the marker so that we don't try to + # evaluate it. + no_marker = Requirement(str(self.req)) + no_marker.marker = None + self.satisfied_by = pkg_resources.get_distribution(str(no_marker)) + if self.editable and self.satisfied_by: + self.conflicts_with = self.satisfied_by + # when installing editables, nothing pre-existing should ever + # satisfy + self.satisfied_by = None + return True + except pkg_resources.DistributionNotFound: + return False + except pkg_resources.VersionConflict: + existing_dist = pkg_resources.get_distribution( + self.req.name + ) + if use_user_site: + if dist_in_usersite(existing_dist): + self.conflicts_with = existing_dist + elif (running_under_virtualenv() and + dist_in_site_packages(existing_dist)): + raise InstallationError( + "Will not install to the user site because it will " + "lack sys.path precedence to %s in %s" % + (existing_dist.project_name, existing_dist.location) + ) + else: + self.conflicts_with = existing_dist + return True + + # Things valid for wheels + @property + def is_wheel(self): + # type: () -> bool + if not self.link: + return False + return self.link.is_wheel + + def move_wheel_files( + self, + wheeldir, # type: str + root=None, # type: Optional[str] + home=None, # type: Optional[str] + prefix=None, # type: Optional[str] + warn_script_location=True, # type: bool + use_user_site=False, # type: bool + pycompile=True # type: bool + ): + # type: (...) -> None + wheel.move_wheel_files( + self.name, self.req, wheeldir, + user=use_user_site, + home=home, + root=root, + prefix=prefix, + pycompile=pycompile, + isolated=self.isolated, + warn_script_location=warn_script_location, + ) + + # Things valid for sdists + @property + def unpacked_source_directory(self): + # type: () -> str + return os.path.join( + self.source_dir, + self.link and self.link.subdirectory_fragment or '') + + @property + def setup_py_path(self): + # type: () -> str + assert self.source_dir, "No source dir for %s" % self + setup_py = os.path.join(self.unpacked_source_directory, 'setup.py') + + # Python2 __file__ should not be unicode + if six.PY2 and isinstance(setup_py, six.text_type): + setup_py = setup_py.encode(sys.getfilesystemencoding()) + + return setup_py + + @property + def pyproject_toml_path(self): + # type: () -> str + assert self.source_dir, "No source dir for %s" % self + return make_pyproject_path(self.unpacked_source_directory) + + def load_pyproject_toml(self): + # type: () -> None + """Load the pyproject.toml file. + + After calling this routine, all of the attributes related to PEP 517 + processing for this requirement have been set. In particular, the + use_pep517 attribute can be used to determine whether we should + follow the PEP 517 or legacy (setup.py) code path. + """ + pyproject_toml_data = load_pyproject_toml( + self.use_pep517, + self.pyproject_toml_path, + self.setup_py_path, + str(self) + ) + + if pyproject_toml_data is None: + self.use_pep517 = False + return + + self.use_pep517 = True + requires, backend, check = pyproject_toml_data + self.requirements_to_check = check + self.pyproject_requires = requires + self.pep517_backend = Pep517HookCaller( + self.unpacked_source_directory, backend + ) + + def prepare_metadata(self): + # type: () -> None + """Ensure that project metadata is available. + + Under PEP 517, call the backend hook to prepare the metadata. + Under legacy processing, call setup.py egg-info. + """ + assert self.source_dir + + metadata_generator = get_metadata_generator(self) + with indent_log(): + self.metadata_directory = metadata_generator(self) + + if not self.req: + if isinstance(parse_version(self.metadata["Version"]), Version): + op = "==" + else: + op = "===" + self.req = Requirement( + "".join([ + self.metadata["Name"], + op, + self.metadata["Version"], + ]) + ) + self.move_to_correct_build_directory() + else: + metadata_name = canonicalize_name(self.metadata["Name"]) + if canonicalize_name(self.req.name) != metadata_name: + logger.warning( + 'Generating metadata for package %s ' + 'produced metadata for project name %s. Fix your ' + '#egg=%s fragments.', + self.name, metadata_name, self.name + ) + self.req = Requirement(metadata_name) + + def prepare_pep517_metadata(self): + # type: () -> str + assert self.pep517_backend is not None + + # NOTE: This needs to be refactored to stop using atexit + metadata_tmpdir = TempDirectory(kind="modern-metadata") + atexit.register(metadata_tmpdir.cleanup) + + metadata_dir = metadata_tmpdir.path + + with self.build_env: + # Note that Pep517HookCaller implements a fallback for + # prepare_metadata_for_build_wheel, so we don't have to + # consider the possibility that this hook doesn't exist. + runner = runner_with_spinner_message("Preparing wheel metadata") + backend = self.pep517_backend + with backend.subprocess_runner(runner): + distinfo_dir = backend.prepare_metadata_for_build_wheel( + metadata_dir + ) + + return os.path.join(metadata_dir, distinfo_dir) + + @property + def metadata(self): + # type: () -> Any + if not hasattr(self, '_metadata'): + self._metadata = get_metadata(self.get_dist()) + + return self._metadata + + def get_dist(self): + # type: () -> Distribution + """Return a pkg_resources.Distribution for this requirement""" + dist_dir = self.metadata_directory.rstrip(os.sep) + + # Determine the correct Distribution object type. + if dist_dir.endswith(".egg-info"): + dist_cls = pkg_resources.Distribution + else: + assert dist_dir.endswith(".dist-info") + dist_cls = pkg_resources.DistInfoDistribution + + # Build a PathMetadata object, from path to metadata. :wink: + base_dir, dist_dir_name = os.path.split(dist_dir) + dist_name = os.path.splitext(dist_dir_name)[0] + metadata = pkg_resources.PathMetadata(base_dir, dist_dir) + + return dist_cls( + base_dir, + project_name=dist_name, + metadata=metadata, + ) + + def assert_source_matches_version(self): + # type: () -> None + assert self.source_dir + version = self.metadata['version'] + if self.req.specifier and version not in self.req.specifier: + logger.warning( + 'Requested %s, but installing version %s', + self, + version, + ) + else: + logger.debug( + 'Source in %s has version %s, which satisfies requirement %s', + display_path(self.source_dir), + version, + self, + ) + + # For both source distributions and editables + def ensure_has_source_dir(self, parent_dir): + # type: (str) -> None + """Ensure that a source_dir is set. + + This will create a temporary build dir if the name of the requirement + isn't known yet. + + :param parent_dir: The ideal pip parent_dir for the source_dir. + Generally src_dir for editables and build_dir for sdists. + :return: self.source_dir + """ + if self.source_dir is None: + self.source_dir = self.ensure_build_location(parent_dir) + + # For editable installations + def install_editable( + self, + install_options, # type: List[str] + global_options=(), # type: Sequence[str] + prefix=None # type: Optional[str] + ): + # type: (...) -> None + logger.info('Running setup.py develop for %s', self.name) + + if prefix: + prefix_param = ['--prefix={}'.format(prefix)] + install_options = list(install_options) + prefix_param + base_cmd = make_setuptools_shim_args( + self.setup_py_path, + global_options=global_options, + no_user_config=self.isolated + ) + with indent_log(): + with self.build_env: + call_subprocess( + base_cmd + + ['develop', '--no-deps'] + + list(install_options), + cwd=self.unpacked_source_directory, + ) + + self.install_succeeded = True + + def update_editable(self, obtain=True): + # type: (bool) -> None + if not self.link: + logger.debug( + "Cannot update repository at %s; repository location is " + "unknown", + self.source_dir, + ) + return + assert self.editable + assert self.source_dir + if self.link.scheme == 'file': + # Static paths don't get updated + return + assert '+' in self.link.url, "bad url: %r" % self.link.url + vc_type, url = self.link.url.split('+', 1) + vcs_backend = vcs.get_backend(vc_type) + if vcs_backend: + hidden_url = hide_url(self.link.url) + if obtain: + vcs_backend.obtain(self.source_dir, url=hidden_url) + else: + vcs_backend.export(self.source_dir, url=hidden_url) + else: + assert 0, ( + 'Unexpected version control type (in %s): %s' + % (self.link, vc_type)) + + # Top-level Actions + def uninstall(self, auto_confirm=False, verbose=False, + use_user_site=False): + # type: (bool, bool, bool) -> Optional[UninstallPathSet] + """ + Uninstall the distribution currently satisfying this requirement. + + Prompts before removing or modifying files unless + ``auto_confirm`` is True. + + Refuses to delete or modify files outside of ``sys.prefix`` - + thus uninstallation within a virtual environment can only + modify that virtual environment, even if the virtualenv is + linked to global site-packages. + + """ + if not self.check_if_exists(use_user_site): + logger.warning("Skipping %s as it is not installed.", self.name) + return None + dist = self.satisfied_by or self.conflicts_with + + uninstalled_pathset = UninstallPathSet.from_dist(dist) + uninstalled_pathset.remove(auto_confirm, verbose) + return uninstalled_pathset + + def _clean_zip_name(self, name, prefix): # only used by archive. + # type: (str, str) -> str + assert name.startswith(prefix + os.path.sep), ( + "name %r doesn't start with prefix %r" % (name, prefix) + ) + name = name[len(prefix) + 1:] + name = name.replace(os.path.sep, '/') + return name + + def _get_archive_name(self, path, parentdir, rootdir): + # type: (str, str, str) -> str + path = os.path.join(parentdir, path) + name = self._clean_zip_name(path, rootdir) + return self.name + '/' + name + + def archive(self, build_dir): + # type: (str) -> None + """Saves archive to provided build_dir. + + Used for saving downloaded VCS requirements as part of `pip download`. + """ + assert self.source_dir + + create_archive = True + archive_name = '%s-%s.zip' % (self.name, self.metadata["version"]) + archive_path = os.path.join(build_dir, archive_name) + + if os.path.exists(archive_path): + response = ask_path_exists( + 'The file %s exists. (i)gnore, (w)ipe, (b)ackup, (a)bort ' % + display_path(archive_path), ('i', 'w', 'b', 'a')) + if response == 'i': + create_archive = False + elif response == 'w': + logger.warning('Deleting %s', display_path(archive_path)) + os.remove(archive_path) + elif response == 'b': + dest_file = backup_dir(archive_path) + logger.warning( + 'Backing up %s to %s', + display_path(archive_path), + display_path(dest_file), + ) + shutil.move(archive_path, dest_file) + elif response == 'a': + sys.exit(-1) + + if not create_archive: + return + + zip_output = zipfile.ZipFile( + archive_path, 'w', zipfile.ZIP_DEFLATED, allowZip64=True, + ) + with zip_output: + dir = os.path.normcase( + os.path.abspath(self.unpacked_source_directory) + ) + for dirpath, dirnames, filenames in os.walk(dir): + if 'pip-egg-info' in dirnames: + dirnames.remove('pip-egg-info') + for dirname in dirnames: + dir_arcname = self._get_archive_name( + dirname, parentdir=dirpath, rootdir=dir, + ) + zipdir = zipfile.ZipInfo(dir_arcname + '/') + zipdir.external_attr = 0x1ED << 16 # 0o755 + zip_output.writestr(zipdir, '') + for filename in filenames: + if filename == PIP_DELETE_MARKER_FILENAME: + continue + file_arcname = self._get_archive_name( + filename, parentdir=dirpath, rootdir=dir, + ) + filename = os.path.join(dirpath, filename) + zip_output.write(filename, file_arcname) + + logger.info('Saved %s', display_path(archive_path)) + + def install( + self, + install_options, # type: List[str] + global_options=None, # type: Optional[Sequence[str]] + root=None, # type: Optional[str] + home=None, # type: Optional[str] + prefix=None, # type: Optional[str] + warn_script_location=True, # type: bool + use_user_site=False, # type: bool + pycompile=True # type: bool + ): + # type: (...) -> None + global_options = global_options if global_options is not None else [] + if self.editable: + self.install_editable( + install_options, global_options, prefix=prefix, + ) + return + if self.is_wheel: + version = wheel.wheel_version(self.source_dir) + wheel.check_compatibility(version, self.name) + + self.move_wheel_files( + self.source_dir, root=root, prefix=prefix, home=home, + warn_script_location=warn_script_location, + use_user_site=use_user_site, pycompile=pycompile, + ) + self.install_succeeded = True + return + + # Extend the list of global and install options passed on to + # the setup.py call with the ones from the requirements file. + # Options specified in requirements file override those + # specified on the command line, since the last option given + # to setup.py is the one that is used. + global_options = list(global_options) + \ + self.options.get('global_options', []) + install_options = list(install_options) + \ + self.options.get('install_options', []) + + with TempDirectory(kind="record") as temp_dir: + record_filename = os.path.join(temp_dir.path, 'install-record.txt') + install_args = self.get_install_args( + global_options, record_filename, root, prefix, pycompile, + ) + + runner = runner_with_spinner_message( + "Running setup.py install for {}".format(self.name) + ) + with indent_log(), self.build_env: + runner( + cmd=install_args + install_options, + cwd=self.unpacked_source_directory, + ) + + if not os.path.exists(record_filename): + logger.debug('Record file %s not found', record_filename) + return + self.install_succeeded = True + + def prepend_root(path): + # type: (str) -> str + if root is None or not os.path.isabs(path): + return path + else: + return change_root(root, path) + + with open(record_filename) as f: + for line in f: + directory = os.path.dirname(line) + if directory.endswith('.egg-info'): + egg_info_dir = prepend_root(directory) + break + else: + logger.warning( + 'Could not find .egg-info directory in install record' + ' for %s', + self, + ) + # FIXME: put the record somewhere + return + new_lines = [] + with open(record_filename) as f: + for line in f: + filename = line.strip() + if os.path.isdir(filename): + filename += os.path.sep + new_lines.append( + os.path.relpath(prepend_root(filename), egg_info_dir) + ) + new_lines.sort() + ensure_dir(egg_info_dir) + inst_files_path = os.path.join(egg_info_dir, 'installed-files.txt') + with open(inst_files_path, 'w') as f: + f.write('\n'.join(new_lines) + '\n') + + def get_install_args( + self, + global_options, # type: Sequence[str] + record_filename, # type: str + root, # type: Optional[str] + prefix, # type: Optional[str] + pycompile # type: bool + ): + # type: (...) -> List[str] + install_args = make_setuptools_shim_args( + self.setup_py_path, + global_options=global_options, + no_user_config=self.isolated, + unbuffered_output=True + ) + install_args += ['install', '--record', record_filename] + install_args += ['--single-version-externally-managed'] + + if root is not None: + install_args += ['--root', root] + if prefix is not None: + install_args += ['--prefix', prefix] + + if pycompile: + install_args += ["--compile"] + else: + install_args += ["--no-compile"] + + if running_under_virtualenv(): + py_ver_str = 'python' + sysconfig.get_python_version() + install_args += ['--install-headers', + os.path.join(sys.prefix, 'include', 'site', + py_ver_str, self.name)] + + return install_args diff --git a/my_env/Lib/site-packages/pip/_internal/req/req_set.py b/my_env/Lib/site-packages/pip/_internal/req/req_set.py new file mode 100644 index 000000000..b34a2bb11 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/req/req_set.py @@ -0,0 +1,210 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +from __future__ import absolute_import + +import logging +from collections import OrderedDict + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal import pep425tags +from pip._internal.exceptions import InstallationError +from pip._internal.utils.logging import indent_log +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.wheel import Wheel + +if MYPY_CHECK_RUNNING: + from typing import Dict, Iterable, List, Optional, Tuple + from pip._internal.req.req_install import InstallRequirement + + +logger = logging.getLogger(__name__) + + +class RequirementSet(object): + + def __init__(self, require_hashes=False, check_supported_wheels=True): + # type: (bool, bool) -> None + """Create a RequirementSet. + """ + + self.requirements = OrderedDict() # type: Dict[str, InstallRequirement] # noqa: E501 + self.require_hashes = require_hashes + self.check_supported_wheels = check_supported_wheels + + self.unnamed_requirements = [] # type: List[InstallRequirement] + self.successfully_downloaded = [] # type: List[InstallRequirement] + self.reqs_to_cleanup = [] # type: List[InstallRequirement] + + def __str__(self): + # type: () -> str + requirements = sorted( + (req for req in self.requirements.values() if not req.comes_from), + key=lambda req: canonicalize_name(req.name), + ) + return ' '.join(str(req.req) for req in requirements) + + def __repr__(self): + # type: () -> str + requirements = sorted( + self.requirements.values(), + key=lambda req: canonicalize_name(req.name), + ) + + format_string = '<{classname} object; {count} requirement(s): {reqs}>' + return format_string.format( + classname=self.__class__.__name__, + count=len(requirements), + reqs=', '.join(str(req.req) for req in requirements), + ) + + def add_unnamed_requirement(self, install_req): + # type: (InstallRequirement) -> None + assert not install_req.name + self.unnamed_requirements.append(install_req) + + def add_named_requirement(self, install_req): + # type: (InstallRequirement) -> None + assert install_req.name + + project_name = canonicalize_name(install_req.name) + self.requirements[project_name] = install_req + + def add_requirement( + self, + install_req, # type: InstallRequirement + parent_req_name=None, # type: Optional[str] + extras_requested=None # type: Optional[Iterable[str]] + ): + # type: (...) -> Tuple[List[InstallRequirement], Optional[InstallRequirement]] # noqa: E501 + """Add install_req as a requirement to install. + + :param parent_req_name: The name of the requirement that needed this + added. The name is used because when multiple unnamed requirements + resolve to the same name, we could otherwise end up with dependency + links that point outside the Requirements set. parent_req must + already be added. Note that None implies that this is a user + supplied requirement, vs an inferred one. + :param extras_requested: an iterable of extras used to evaluate the + environment markers. + :return: Additional requirements to scan. That is either [] if + the requirement is not applicable, or [install_req] if the + requirement is applicable and has just been added. + """ + # If the markers do not match, ignore this requirement. + if not install_req.match_markers(extras_requested): + logger.info( + "Ignoring %s: markers '%s' don't match your environment", + install_req.name, install_req.markers, + ) + return [], None + + # If the wheel is not supported, raise an error. + # Should check this after filtering out based on environment markers to + # allow specifying different wheels based on the environment/OS, in a + # single requirements file. + if install_req.link and install_req.link.is_wheel: + wheel = Wheel(install_req.link.filename) + tags = pep425tags.get_supported() + if (self.check_supported_wheels and not wheel.supported(tags)): + raise InstallationError( + "%s is not a supported wheel on this platform." % + wheel.filename + ) + + # This next bit is really a sanity check. + assert install_req.is_direct == (parent_req_name is None), ( + "a direct req shouldn't have a parent and also, " + "a non direct req should have a parent" + ) + + # Unnamed requirements are scanned again and the requirement won't be + # added as a dependency until after scanning. + if not install_req.name: + self.add_unnamed_requirement(install_req) + return [install_req], None + + try: + existing_req = self.get_requirement(install_req.name) + except KeyError: + existing_req = None + + has_conflicting_requirement = ( + parent_req_name is None and + existing_req and + not existing_req.constraint and + existing_req.extras == install_req.extras and + existing_req.req.specifier != install_req.req.specifier + ) + if has_conflicting_requirement: + raise InstallationError( + "Double requirement given: %s (already in %s, name=%r)" + % (install_req, existing_req, install_req.name) + ) + + # When no existing requirement exists, add the requirement as a + # dependency and it will be scanned again after. + if not existing_req: + self.add_named_requirement(install_req) + # We'd want to rescan this requirement later + return [install_req], install_req + + # Assume there's no need to scan, and that we've already + # encountered this for scanning. + if install_req.constraint or not existing_req.constraint: + return [], existing_req + + does_not_satisfy_constraint = ( + install_req.link and + not ( + existing_req.link and + install_req.link.path == existing_req.link.path + ) + ) + if does_not_satisfy_constraint: + self.reqs_to_cleanup.append(install_req) + raise InstallationError( + "Could not satisfy constraints for '%s': " + "installation from path or url cannot be " + "constrained to a version" % install_req.name, + ) + # If we're now installing a constraint, mark the existing + # object for real installation. + existing_req.constraint = False + existing_req.extras = tuple(sorted( + set(existing_req.extras) | set(install_req.extras) + )) + logger.debug( + "Setting %s extras to: %s", + existing_req, existing_req.extras, + ) + # Return the existing requirement for addition to the parent and + # scanning again. + return [existing_req], existing_req + + def has_requirement(self, name): + # type: (str) -> bool + project_name = canonicalize_name(name) + + return ( + project_name in self.requirements and + not self.requirements[project_name].constraint + ) + + def get_requirement(self, name): + # type: (str) -> InstallRequirement + project_name = canonicalize_name(name) + + if project_name in self.requirements: + return self.requirements[project_name] + + raise KeyError("No project with the name %r" % name) + + def cleanup_files(self): + # type: () -> None + """Clean up files, remove builds.""" + logger.debug('Cleaning up...') + with indent_log(): + for req in self.reqs_to_cleanup: + req.remove_temporary_source() diff --git a/my_env/Lib/site-packages/pip/_internal/req/req_tracker.py b/my_env/Lib/site-packages/pip/_internal/req/req_tracker.py new file mode 100644 index 000000000..aa57c799a --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/req/req_tracker.py @@ -0,0 +1,98 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +from __future__ import absolute_import + +import contextlib +import errno +import hashlib +import logging +import os + +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from types import TracebackType + from typing import Iterator, Optional, Set, Type + from pip._internal.req.req_install import InstallRequirement + from pip._internal.models.link import Link + +logger = logging.getLogger(__name__) + + +class RequirementTracker(object): + + def __init__(self): + # type: () -> None + self._root = os.environ.get('PIP_REQ_TRACKER') + if self._root is None: + self._temp_dir = TempDirectory(delete=False, kind='req-tracker') + self._root = os.environ['PIP_REQ_TRACKER'] = self._temp_dir.path + logger.debug('Created requirements tracker %r', self._root) + else: + self._temp_dir = None + logger.debug('Re-using requirements tracker %r', self._root) + self._entries = set() # type: Set[InstallRequirement] + + def __enter__(self): + # type: () -> RequirementTracker + return self + + def __exit__( + self, + exc_type, # type: Optional[Type[BaseException]] + exc_val, # type: Optional[BaseException] + exc_tb # type: Optional[TracebackType] + ): + # type: (...) -> None + self.cleanup() + + def _entry_path(self, link): + # type: (Link) -> str + hashed = hashlib.sha224(link.url_without_fragment.encode()).hexdigest() + return os.path.join(self._root, hashed) + + def add(self, req): + # type: (InstallRequirement) -> None + link = req.link + info = str(req) + entry_path = self._entry_path(link) + try: + with open(entry_path) as fp: + # Error, these's already a build in progress. + raise LookupError('%s is already being built: %s' + % (link, fp.read())) + except IOError as e: + if e.errno != errno.ENOENT: + raise + assert req not in self._entries + with open(entry_path, 'w') as fp: + fp.write(info) + self._entries.add(req) + logger.debug('Added %s to build tracker %r', req, self._root) + + def remove(self, req): + # type: (InstallRequirement) -> None + link = req.link + self._entries.remove(req) + os.unlink(self._entry_path(link)) + logger.debug('Removed %s from build tracker %r', req, self._root) + + def cleanup(self): + # type: () -> None + for req in set(self._entries): + self.remove(req) + remove = self._temp_dir is not None + if remove: + self._temp_dir.cleanup() + logger.debug('%s build tracker %r', + 'Removed' if remove else 'Cleaned', + self._root) + + @contextlib.contextmanager + def track(self, req): + # type: (InstallRequirement) -> Iterator[None] + self.add(req) + yield + self.remove(req) diff --git a/my_env/Lib/site-packages/pip/_internal/req/req_uninstall.py b/my_env/Lib/site-packages/pip/_internal/req/req_uninstall.py new file mode 100644 index 000000000..3acde914a --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/req/req_uninstall.py @@ -0,0 +1,644 @@ +from __future__ import absolute_import + +import csv +import functools +import logging +import os +import sys +import sysconfig + +from pip._vendor import pkg_resources + +from pip._internal.exceptions import UninstallationError +from pip._internal.locations import bin_py, bin_user +from pip._internal.utils.compat import WINDOWS, cache_from_source, uses_pycache +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import ( + FakeFile, + ask, + dist_in_usersite, + dist_is_local, + egg_link_path, + is_local, + normalize_path, + renames, + rmtree, +) +from pip._internal.utils.temp_dir import AdjacentTempDirectory, TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, Callable, Dict, Iterable, Iterator, List, Optional, Set, Tuple, + ) + from pip._vendor.pkg_resources import Distribution + +logger = logging.getLogger(__name__) + + +def _script_names(dist, script_name, is_gui): + # type: (Distribution, str, bool) -> List[str] + """Create the fully qualified name of the files created by + {console,gui}_scripts for the given ``dist``. + Returns the list of file names + """ + if dist_in_usersite(dist): + bin_dir = bin_user + else: + bin_dir = bin_py + exe_name = os.path.join(bin_dir, script_name) + paths_to_remove = [exe_name] + if WINDOWS: + paths_to_remove.append(exe_name + '.exe') + paths_to_remove.append(exe_name + '.exe.manifest') + if is_gui: + paths_to_remove.append(exe_name + '-script.pyw') + else: + paths_to_remove.append(exe_name + '-script.py') + return paths_to_remove + + +def _unique(fn): + # type: (Callable) -> Callable[..., Iterator[Any]] + @functools.wraps(fn) + def unique(*args, **kw): + # type: (Any, Any) -> Iterator[Any] + seen = set() # type: Set[Any] + for item in fn(*args, **kw): + if item not in seen: + seen.add(item) + yield item + return unique + + +@_unique +def uninstallation_paths(dist): + # type: (Distribution) -> Iterator[str] + """ + Yield all the uninstallation paths for dist based on RECORD-without-.py[co] + + Yield paths to all the files in RECORD. For each .py file in RECORD, add + the .pyc and .pyo in the same directory. + + UninstallPathSet.add() takes care of the __pycache__ .py[co]. + """ + r = csv.reader(FakeFile(dist.get_metadata_lines('RECORD'))) + for row in r: + path = os.path.join(dist.location, row[0]) + yield path + if path.endswith('.py'): + dn, fn = os.path.split(path) + base = fn[:-3] + path = os.path.join(dn, base + '.pyc') + yield path + path = os.path.join(dn, base + '.pyo') + yield path + + +def compact(paths): + # type: (Iterable[str]) -> Set[str] + """Compact a path set to contain the minimal number of paths + necessary to contain all paths in the set. If /a/path/ and + /a/path/to/a/file.txt are both in the set, leave only the + shorter path.""" + + sep = os.path.sep + short_paths = set() # type: Set[str] + for path in sorted(paths, key=len): + should_skip = any( + path.startswith(shortpath.rstrip("*")) and + path[len(shortpath.rstrip("*").rstrip(sep))] == sep + for shortpath in short_paths + ) + if not should_skip: + short_paths.add(path) + return short_paths + + +def compress_for_rename(paths): + # type: (Iterable[str]) -> Set[str] + """Returns a set containing the paths that need to be renamed. + + This set may include directories when the original sequence of paths + included every file on disk. + """ + case_map = dict((os.path.normcase(p), p) for p in paths) + remaining = set(case_map) + unchecked = sorted(set(os.path.split(p)[0] + for p in case_map.values()), key=len) + wildcards = set() # type: Set[str] + + def norm_join(*a): + # type: (str) -> str + return os.path.normcase(os.path.join(*a)) + + for root in unchecked: + if any(os.path.normcase(root).startswith(w) + for w in wildcards): + # This directory has already been handled. + continue + + all_files = set() # type: Set[str] + all_subdirs = set() # type: Set[str] + for dirname, subdirs, files in os.walk(root): + all_subdirs.update(norm_join(root, dirname, d) + for d in subdirs) + all_files.update(norm_join(root, dirname, f) + for f in files) + # If all the files we found are in our remaining set of files to + # remove, then remove them from the latter set and add a wildcard + # for the directory. + if not (all_files - remaining): + remaining.difference_update(all_files) + wildcards.add(root + os.sep) + + return set(map(case_map.__getitem__, remaining)) | wildcards + + +def compress_for_output_listing(paths): + # type: (Iterable[str]) -> Tuple[Set[str], Set[str]] + """Returns a tuple of 2 sets of which paths to display to user + + The first set contains paths that would be deleted. Files of a package + are not added and the top-level directory of the package has a '*' added + at the end - to signify that all it's contents are removed. + + The second set contains files that would have been skipped in the above + folders. + """ + + will_remove = set(paths) + will_skip = set() + + # Determine folders and files + folders = set() + files = set() + for path in will_remove: + if path.endswith(".pyc"): + continue + if path.endswith("__init__.py") or ".dist-info" in path: + folders.add(os.path.dirname(path)) + files.add(path) + + # probably this one https://github.com/python/mypy/issues/390 + _normcased_files = set(map(os.path.normcase, files)) # type: ignore + + folders = compact(folders) + + # This walks the tree using os.walk to not miss extra folders + # that might get added. + for folder in folders: + for dirpath, _, dirfiles in os.walk(folder): + for fname in dirfiles: + if fname.endswith(".pyc"): + continue + + file_ = os.path.join(dirpath, fname) + if (os.path.isfile(file_) and + os.path.normcase(file_) not in _normcased_files): + # We are skipping this file. Add it to the set. + will_skip.add(file_) + + will_remove = files | { + os.path.join(folder, "*") for folder in folders + } + + return will_remove, will_skip + + +class StashedUninstallPathSet(object): + """A set of file rename operations to stash files while + tentatively uninstalling them.""" + def __init__(self): + # type: () -> None + # Mapping from source file root to [Adjacent]TempDirectory + # for files under that directory. + self._save_dirs = {} # type: Dict[str, TempDirectory] + # (old path, new path) tuples for each move that may need + # to be undone. + self._moves = [] # type: List[Tuple[str, str]] + + def _get_directory_stash(self, path): + # type: (str) -> str + """Stashes a directory. + + Directories are stashed adjacent to their original location if + possible, or else moved/copied into the user's temp dir.""" + + try: + save_dir = AdjacentTempDirectory(path) # type: TempDirectory + except OSError: + save_dir = TempDirectory(kind="uninstall") + self._save_dirs[os.path.normcase(path)] = save_dir + + return save_dir.path + + def _get_file_stash(self, path): + # type: (str) -> str + """Stashes a file. + + If no root has been provided, one will be created for the directory + in the user's temp directory.""" + path = os.path.normcase(path) + head, old_head = os.path.dirname(path), None + save_dir = None + + while head != old_head: + try: + save_dir = self._save_dirs[head] + break + except KeyError: + pass + head, old_head = os.path.dirname(head), head + else: + # Did not find any suitable root + head = os.path.dirname(path) + save_dir = TempDirectory(kind='uninstall') + self._save_dirs[head] = save_dir + + relpath = os.path.relpath(path, head) + if relpath and relpath != os.path.curdir: + return os.path.join(save_dir.path, relpath) + return save_dir.path + + def stash(self, path): + # type: (str) -> str + """Stashes the directory or file and returns its new location. + Handle symlinks as files to avoid modifying the symlink targets. + """ + path_is_dir = os.path.isdir(path) and not os.path.islink(path) + if path_is_dir: + new_path = self._get_directory_stash(path) + else: + new_path = self._get_file_stash(path) + + self._moves.append((path, new_path)) + if (path_is_dir and os.path.isdir(new_path)): + # If we're moving a directory, we need to + # remove the destination first or else it will be + # moved to inside the existing directory. + # We just created new_path ourselves, so it will + # be removable. + os.rmdir(new_path) + renames(path, new_path) + return new_path + + def commit(self): + # type: () -> None + """Commits the uninstall by removing stashed files.""" + for _, save_dir in self._save_dirs.items(): + save_dir.cleanup() + self._moves = [] + self._save_dirs = {} + + def rollback(self): + # type: () -> None + """Undoes the uninstall by moving stashed files back.""" + for p in self._moves: + logging.info("Moving to %s\n from %s", *p) + + for new_path, path in self._moves: + try: + logger.debug('Replacing %s from %s', new_path, path) + if os.path.isfile(new_path) or os.path.islink(new_path): + os.unlink(new_path) + elif os.path.isdir(new_path): + rmtree(new_path) + renames(path, new_path) + except OSError as ex: + logger.error("Failed to restore %s", new_path) + logger.debug("Exception: %s", ex) + + self.commit() + + @property + def can_rollback(self): + # type: () -> bool + return bool(self._moves) + + +class UninstallPathSet(object): + """A set of file paths to be removed in the uninstallation of a + requirement.""" + def __init__(self, dist): + # type: (Distribution) -> None + self.paths = set() # type: Set[str] + self._refuse = set() # type: Set[str] + self.pth = {} # type: Dict[str, UninstallPthEntries] + self.dist = dist + self._moved_paths = StashedUninstallPathSet() + + def _permitted(self, path): + # type: (str) -> bool + """ + Return True if the given path is one we are permitted to + remove/modify, False otherwise. + + """ + return is_local(path) + + def add(self, path): + # type: (str) -> None + head, tail = os.path.split(path) + + # we normalize the head to resolve parent directory symlinks, but not + # the tail, since we only want to uninstall symlinks, not their targets + path = os.path.join(normalize_path(head), os.path.normcase(tail)) + + if not os.path.exists(path): + return + if self._permitted(path): + self.paths.add(path) + else: + self._refuse.add(path) + + # __pycache__ files can show up after 'installed-files.txt' is created, + # due to imports + if os.path.splitext(path)[1] == '.py' and uses_pycache: + self.add(cache_from_source(path)) + + def add_pth(self, pth_file, entry): + # type: (str, str) -> None + pth_file = normalize_path(pth_file) + if self._permitted(pth_file): + if pth_file not in self.pth: + self.pth[pth_file] = UninstallPthEntries(pth_file) + self.pth[pth_file].add(entry) + else: + self._refuse.add(pth_file) + + def remove(self, auto_confirm=False, verbose=False): + # type: (bool, bool) -> None + """Remove paths in ``self.paths`` with confirmation (unless + ``auto_confirm`` is True).""" + + if not self.paths: + logger.info( + "Can't uninstall '%s'. No files were found to uninstall.", + self.dist.project_name, + ) + return + + dist_name_version = ( + self.dist.project_name + "-" + self.dist.version + ) + logger.info('Uninstalling %s:', dist_name_version) + + with indent_log(): + if auto_confirm or self._allowed_to_proceed(verbose): + moved = self._moved_paths + + for_rename = compress_for_rename(self.paths) + + for path in sorted(compact(for_rename)): + moved.stash(path) + logger.debug('Removing file or directory %s', path) + + for pth in self.pth.values(): + pth.remove() + + logger.info('Successfully uninstalled %s', dist_name_version) + + def _allowed_to_proceed(self, verbose): + # type: (bool) -> bool + """Display which files would be deleted and prompt for confirmation + """ + + def _display(msg, paths): + # type: (str, Iterable[str]) -> None + if not paths: + return + + logger.info(msg) + with indent_log(): + for path in sorted(compact(paths)): + logger.info(path) + + if not verbose: + will_remove, will_skip = compress_for_output_listing(self.paths) + else: + # In verbose mode, display all the files that are going to be + # deleted. + will_remove = set(self.paths) + will_skip = set() + + _display('Would remove:', will_remove) + _display('Would not remove (might be manually added):', will_skip) + _display('Would not remove (outside of prefix):', self._refuse) + if verbose: + _display('Will actually move:', compress_for_rename(self.paths)) + + return ask('Proceed (y/n)? ', ('y', 'n')) == 'y' + + def rollback(self): + # type: () -> None + """Rollback the changes previously made by remove().""" + if not self._moved_paths.can_rollback: + logger.error( + "Can't roll back %s; was not uninstalled", + self.dist.project_name, + ) + return + logger.info('Rolling back uninstall of %s', self.dist.project_name) + self._moved_paths.rollback() + for pth in self.pth.values(): + pth.rollback() + + def commit(self): + # type: () -> None + """Remove temporary save dir: rollback will no longer be possible.""" + self._moved_paths.commit() + + @classmethod + def from_dist(cls, dist): + # type: (Distribution) -> UninstallPathSet + dist_path = normalize_path(dist.location) + if not dist_is_local(dist): + logger.info( + "Not uninstalling %s at %s, outside environment %s", + dist.key, + dist_path, + sys.prefix, + ) + return cls(dist) + + if dist_path in {p for p in {sysconfig.get_path("stdlib"), + sysconfig.get_path("platstdlib")} + if p}: + logger.info( + "Not uninstalling %s at %s, as it is in the standard library.", + dist.key, + dist_path, + ) + return cls(dist) + + paths_to_remove = cls(dist) + develop_egg_link = egg_link_path(dist) + develop_egg_link_egg_info = '{}.egg-info'.format( + pkg_resources.to_filename(dist.project_name)) + egg_info_exists = dist.egg_info and os.path.exists(dist.egg_info) + # Special case for distutils installed package + distutils_egg_info = getattr(dist._provider, 'path', None) + + # Uninstall cases order do matter as in the case of 2 installs of the + # same package, pip needs to uninstall the currently detected version + if (egg_info_exists and dist.egg_info.endswith('.egg-info') and + not dist.egg_info.endswith(develop_egg_link_egg_info)): + # if dist.egg_info.endswith(develop_egg_link_egg_info), we + # are in fact in the develop_egg_link case + paths_to_remove.add(dist.egg_info) + if dist.has_metadata('installed-files.txt'): + for installed_file in dist.get_metadata( + 'installed-files.txt').splitlines(): + path = os.path.normpath( + os.path.join(dist.egg_info, installed_file) + ) + paths_to_remove.add(path) + # FIXME: need a test for this elif block + # occurs with --single-version-externally-managed/--record outside + # of pip + elif dist.has_metadata('top_level.txt'): + if dist.has_metadata('namespace_packages.txt'): + namespaces = dist.get_metadata('namespace_packages.txt') + else: + namespaces = [] + for top_level_pkg in [ + p for p + in dist.get_metadata('top_level.txt').splitlines() + if p and p not in namespaces]: + path = os.path.join(dist.location, top_level_pkg) + paths_to_remove.add(path) + paths_to_remove.add(path + '.py') + paths_to_remove.add(path + '.pyc') + paths_to_remove.add(path + '.pyo') + + elif distutils_egg_info: + raise UninstallationError( + "Cannot uninstall {!r}. It is a distutils installed project " + "and thus we cannot accurately determine which files belong " + "to it which would lead to only a partial uninstall.".format( + dist.project_name, + ) + ) + + elif dist.location.endswith('.egg'): + # package installed by easy_install + # We cannot match on dist.egg_name because it can slightly vary + # i.e. setuptools-0.6c11-py2.6.egg vs setuptools-0.6rc11-py2.6.egg + paths_to_remove.add(dist.location) + easy_install_egg = os.path.split(dist.location)[1] + easy_install_pth = os.path.join(os.path.dirname(dist.location), + 'easy-install.pth') + paths_to_remove.add_pth(easy_install_pth, './' + easy_install_egg) + + elif egg_info_exists and dist.egg_info.endswith('.dist-info'): + for path in uninstallation_paths(dist): + paths_to_remove.add(path) + + elif develop_egg_link: + # develop egg + with open(develop_egg_link, 'r') as fh: + link_pointer = os.path.normcase(fh.readline().strip()) + assert (link_pointer == dist.location), ( + 'Egg-link %s does not match installed location of %s ' + '(at %s)' % (link_pointer, dist.project_name, dist.location) + ) + paths_to_remove.add(develop_egg_link) + easy_install_pth = os.path.join(os.path.dirname(develop_egg_link), + 'easy-install.pth') + paths_to_remove.add_pth(easy_install_pth, dist.location) + + else: + logger.debug( + 'Not sure how to uninstall: %s - Check: %s', + dist, dist.location, + ) + + # find distutils scripts= scripts + if dist.has_metadata('scripts') and dist.metadata_isdir('scripts'): + for script in dist.metadata_listdir('scripts'): + if dist_in_usersite(dist): + bin_dir = bin_user + else: + bin_dir = bin_py + paths_to_remove.add(os.path.join(bin_dir, script)) + if WINDOWS: + paths_to_remove.add(os.path.join(bin_dir, script) + '.bat') + + # find console_scripts + _scripts_to_remove = [] + console_scripts = dist.get_entry_map(group='console_scripts') + for name in console_scripts.keys(): + _scripts_to_remove.extend(_script_names(dist, name, False)) + # find gui_scripts + gui_scripts = dist.get_entry_map(group='gui_scripts') + for name in gui_scripts.keys(): + _scripts_to_remove.extend(_script_names(dist, name, True)) + + for s in _scripts_to_remove: + paths_to_remove.add(s) + + return paths_to_remove + + +class UninstallPthEntries(object): + def __init__(self, pth_file): + # type: (str) -> None + if not os.path.isfile(pth_file): + raise UninstallationError( + "Cannot remove entries from nonexistent file %s" % pth_file + ) + self.file = pth_file + self.entries = set() # type: Set[str] + self._saved_lines = None # type: Optional[List[bytes]] + + def add(self, entry): + # type: (str) -> None + entry = os.path.normcase(entry) + # On Windows, os.path.normcase converts the entry to use + # backslashes. This is correct for entries that describe absolute + # paths outside of site-packages, but all the others use forward + # slashes. + # os.path.splitdrive is used instead of os.path.isabs because isabs + # treats non-absolute paths with drive letter markings like c:foo\bar + # as absolute paths. It also does not recognize UNC paths if they don't + # have more than "\\sever\share". Valid examples: "\\server\share\" or + # "\\server\share\folder". Python 2.7.8+ support UNC in splitdrive. + if WINDOWS and not os.path.splitdrive(entry)[0]: + entry = entry.replace('\\', '/') + self.entries.add(entry) + + def remove(self): + # type: () -> None + logger.debug('Removing pth entries from %s:', self.file) + with open(self.file, 'rb') as fh: + # windows uses '\r\n' with py3k, but uses '\n' with py2.x + lines = fh.readlines() + self._saved_lines = lines + if any(b'\r\n' in line for line in lines): + endline = '\r\n' + else: + endline = '\n' + # handle missing trailing newline + if lines and not lines[-1].endswith(endline.encode("utf-8")): + lines[-1] = lines[-1] + endline.encode("utf-8") + for entry in self.entries: + try: + logger.debug('Removing entry: %s', entry) + lines.remove((entry + endline).encode("utf-8")) + except ValueError: + pass + with open(self.file, 'wb') as fh: + fh.writelines(lines) + + def rollback(self): + # type: () -> bool + if self._saved_lines is None: + logger.error( + 'Cannot roll back changes to %s, none were made', self.file + ) + return False + logger.debug('Rolling %s back to previous state', self.file) + with open(self.file, 'wb') as fh: + fh.writelines(self._saved_lines) + return True diff --git a/my_env/Lib/site-packages/pip/_internal/self_outdated_check.py b/my_env/Lib/site-packages/pip/_internal/self_outdated_check.py new file mode 100644 index 000000000..51ef3439f --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/self_outdated_check.py @@ -0,0 +1,244 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import datetime +import hashlib +import json +import logging +import os.path +import sys + +from pip._vendor import pkg_resources +from pip._vendor.packaging import version as packaging_version +from pip._vendor.six import ensure_binary + +from pip._internal.collector import LinkCollector +from pip._internal.index import PackageFinder +from pip._internal.models.search_scope import SearchScope +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.filesystem import ( + adjacent_tmp_file, + check_path_owner, + replace, +) +from pip._internal.utils.misc import ( + ensure_dir, + get_installed_version, + redact_auth_from_url, +) +from pip._internal.utils.packaging import get_installer +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + import optparse + from optparse import Values + from typing import Any, Dict, Text, Union + + from pip._internal.network.session import PipSession + + +SELFCHECK_DATE_FMT = "%Y-%m-%dT%H:%M:%SZ" + + +logger = logging.getLogger(__name__) + + +def make_link_collector( + session, # type: PipSession + options, # type: Values + suppress_no_index=False, # type: bool +): + # type: (...) -> LinkCollector + """ + :param session: The Session to use to make requests. + :param suppress_no_index: Whether to ignore the --no-index option + when constructing the SearchScope object. + """ + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index and not suppress_no_index: + logger.debug( + 'Ignoring indexes: %s', + ','.join(redact_auth_from_url(url) for url in index_urls), + ) + index_urls = [] + + # Make sure find_links is a list before passing to create(). + find_links = options.find_links or [] + + search_scope = SearchScope.create( + find_links=find_links, index_urls=index_urls, + ) + + link_collector = LinkCollector(session=session, search_scope=search_scope) + + return link_collector + + +def _get_statefile_name(key): + # type: (Union[str, Text]) -> str + key_bytes = ensure_binary(key) + name = hashlib.sha224(key_bytes).hexdigest() + return name + + +class SelfCheckState(object): + def __init__(self, cache_dir): + # type: (str) -> None + self.state = {} # type: Dict[str, Any] + self.statefile_path = None + + # Try to load the existing state + if cache_dir: + self.statefile_path = os.path.join( + cache_dir, "selfcheck", _get_statefile_name(self.key) + ) + try: + with open(self.statefile_path) as statefile: + self.state = json.load(statefile) + except (IOError, ValueError, KeyError): + # Explicitly suppressing exceptions, since we don't want to + # error out if the cache file is invalid. + pass + + @property + def key(self): + return sys.prefix + + def save(self, pypi_version, current_time): + # type: (str, datetime.datetime) -> None + # If we do not have a path to cache in, don't bother saving. + if not self.statefile_path: + return + + # Check to make sure that we own the directory + if not check_path_owner(os.path.dirname(self.statefile_path)): + return + + # Now that we've ensured the directory is owned by this user, we'll go + # ahead and make sure that all our directories are created. + ensure_dir(os.path.dirname(self.statefile_path)) + + state = { + # Include the key so it's easy to tell which pip wrote the + # file. + "key": self.key, + "last_check": current_time.strftime(SELFCHECK_DATE_FMT), + "pypi_version": pypi_version, + } + + text = json.dumps(state, sort_keys=True, separators=(",", ":")) + + with adjacent_tmp_file(self.statefile_path) as f: + f.write(ensure_binary(text)) + + try: + # Since we have a prefix-specific state file, we can just + # overwrite whatever is there, no need to check. + replace(f.name, self.statefile_path) + except OSError: + # Best effort. + pass + + +def was_installed_by_pip(pkg): + # type: (str) -> bool + """Checks whether pkg was installed by pip + + This is used not to display the upgrade message when pip is in fact + installed by system package manager, such as dnf on Fedora. + """ + try: + dist = pkg_resources.get_distribution(pkg) + return "pip" == get_installer(dist) + except pkg_resources.DistributionNotFound: + return False + + +def pip_self_version_check(session, options): + # type: (PipSession, optparse.Values) -> None + """Check for an update for pip. + + Limit the frequency of checks to once per week. State is stored either in + the active virtualenv or in the user's USER_CACHE_DIR keyed off the prefix + of the pip script path. + """ + installed_version = get_installed_version("pip") + if not installed_version: + return + + pip_version = packaging_version.parse(installed_version) + pypi_version = None + + try: + state = SelfCheckState(cache_dir=options.cache_dir) + + current_time = datetime.datetime.utcnow() + # Determine if we need to refresh the state + if "last_check" in state.state and "pypi_version" in state.state: + last_check = datetime.datetime.strptime( + state.state["last_check"], + SELFCHECK_DATE_FMT + ) + if (current_time - last_check).total_seconds() < 7 * 24 * 60 * 60: + pypi_version = state.state["pypi_version"] + + # Refresh the version if we need to or just see if we need to warn + if pypi_version is None: + # Lets use PackageFinder to see what the latest pip version is + link_collector = make_link_collector( + session, + options=options, + suppress_no_index=True, + ) + + # Pass allow_yanked=False so we don't suggest upgrading to a + # yanked version. + selection_prefs = SelectionPreferences( + allow_yanked=False, + allow_all_prereleases=False, # Explicitly set to False + ) + + finder = PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + ) + best_candidate = finder.find_best_candidate("pip").best_candidate + if best_candidate is None: + return + pypi_version = str(best_candidate.version) + + # save that we've performed a check + state.save(pypi_version, current_time) + + remote_version = packaging_version.parse(pypi_version) + + local_version_is_older = ( + pip_version < remote_version and + pip_version.base_version != remote_version.base_version and + was_installed_by_pip('pip') + ) + + # Determine if our pypi_version is older + if not local_version_is_older: + return + + # Advise "python -m pip" on Windows to avoid issues + # with overwriting pip.exe. + if WINDOWS: + pip_cmd = "python -m pip" + else: + pip_cmd = "pip" + logger.warning( + "You are using pip version %s; however, version %s is " + "available.\nYou should consider upgrading via the " + "'%s install --upgrade pip' command.", + pip_version, pypi_version, pip_cmd + ) + except Exception: + logger.debug( + "There was an error checking the latest version of pip", + exc_info=True, + ) diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__init__.py b/my_env/Lib/site-packages/pip/_internal/utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..2593522c4 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-37.pyc new file mode 100644 index 000000000..a3f4fa5ca Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-37.pyc new file mode 100644 index 000000000..39fa3ca6f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-37.pyc new file mode 100644 index 000000000..e4a768fc8 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-37.pyc new file mode 100644 index 000000000..1aefbac24 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-37.pyc new file mode 100644 index 000000000..6d4ceab9d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-37.pyc new file mode 100644 index 000000000..2ca29249a Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-37.pyc new file mode 100644 index 000000000..038a58f9f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-37.pyc new file mode 100644 index 000000000..5db6fc62d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-37.pyc new file mode 100644 index 000000000..efc41f30b Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-37.pyc new file mode 100644 index 000000000..75c3a1133 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/marker_files.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/marker_files.cpython-37.pyc new file mode 100644 index 000000000..710460143 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/marker_files.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-37.pyc new file mode 100644 index 000000000..093fdc1b2 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-37.pyc new file mode 100644 index 000000000..e4d2d47e1 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-37.pyc new file mode 100644 index 000000000..69e5901f0 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-37.pyc new file mode 100644 index 000000000..17e06952b Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-37.pyc new file mode 100644 index 000000000..9d7774a61 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-37.pyc new file mode 100644 index 000000000..428d53a21 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/typing.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/typing.cpython-37.pyc new file mode 100644 index 000000000..ba75c25f0 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/typing.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/ui.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/ui.cpython-37.pyc new file mode 100644 index 000000000..0dbe04270 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/ui.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-37.pyc new file mode 100644 index 000000000..d11898a98 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-37.pyc new file mode 100644 index 000000000..2074f81be Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-37.pyc new file mode 100644 index 000000000..a3f79ac72 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/utils/appdirs.py b/my_env/Lib/site-packages/pip/_internal/utils/appdirs.py new file mode 100644 index 000000000..06cd8314a --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/appdirs.py @@ -0,0 +1,276 @@ +""" +This code was taken from https://github.com/ActiveState/appdirs and modified +to suit our purposes. +""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import os +import sys + +from pip._vendor.six import PY2, text_type + +from pip._internal.utils.compat import WINDOWS, expanduser +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import List + + +def user_cache_dir(appname): + # type: (str) -> str + r""" + Return full path to the user-specific cache dir for this application. + + "appname" is the name of application. + + Typical user cache directories are: + macOS: ~/Library/Caches/ + Unix: ~/.cache/ (XDG default) + Windows: C:\Users\\AppData\Local\\Cache + + On Windows the only suggestion in the MSDN docs is that local settings go + in the `CSIDL_LOCAL_APPDATA` directory. This is identical to the + non-roaming app data dir (the default returned by `user_data_dir`). Apps + typically put cache data somewhere *under* the given dir here. Some + examples: + ...\Mozilla\Firefox\Profiles\\Cache + ...\Acme\SuperApp\Cache\1.0 + + OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. + """ + if WINDOWS: + # Get the base path + path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) + + # When using Python 2, return paths as bytes on Windows like we do on + # other operating systems. See helper function docs for more details. + if PY2 and isinstance(path, text_type): + path = _win_path_to_bytes(path) + + # Add our app name and Cache directory to it + path = os.path.join(path, appname, "Cache") + elif sys.platform == "darwin": + # Get the base path + path = expanduser("~/Library/Caches") + + # Add our app name to it + path = os.path.join(path, appname) + else: + # Get the base path + path = os.getenv("XDG_CACHE_HOME", expanduser("~/.cache")) + + # Add our app name to it + path = os.path.join(path, appname) + + return path + + +def user_data_dir(appname, roaming=False): + # type: (str, bool) -> str + r""" + Return full path to the user-specific data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user data directories are: + macOS: ~/Library/Application Support/ + if it exists, else ~/.config/ + Unix: ~/.local/share/ # or in + $XDG_DATA_HOME, if defined + Win XP (not roaming): C:\Documents and Settings\\ ... + ...Application Data\ + Win XP (roaming): C:\Documents and Settings\\Local ... + ...Settings\Application Data\ + Win 7 (not roaming): C:\\Users\\AppData\Local\ + Win 7 (roaming): C:\\Users\\AppData\Roaming\ + + For Unix, we follow the XDG spec and support $XDG_DATA_HOME. + That means, by default "~/.local/share/". + """ + if WINDOWS: + const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" + path = os.path.join(os.path.normpath(_get_win_folder(const)), appname) + elif sys.platform == "darwin": + path = os.path.join( + expanduser('~/Library/Application Support/'), + appname, + ) if os.path.isdir(os.path.join( + expanduser('~/Library/Application Support/'), + appname, + ) + ) else os.path.join( + expanduser('~/.config/'), + appname, + ) + else: + path = os.path.join( + os.getenv('XDG_DATA_HOME', expanduser("~/.local/share")), + appname, + ) + + return path + + +def user_config_dir(appname, roaming=True): + # type: (str, bool) -> str + """Return full path to the user-specific config dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "roaming" (boolean, default True) can be set False to not use the + Windows roaming appdata directory. That means that for users on a + Windows network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user data directories are: + macOS: same as user_data_dir + Unix: ~/.config/ + Win *: same as user_data_dir + + For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. + That means, by default "~/.config/". + """ + if WINDOWS: + path = user_data_dir(appname, roaming=roaming) + elif sys.platform == "darwin": + path = user_data_dir(appname) + else: + path = os.getenv('XDG_CONFIG_HOME', expanduser("~/.config")) + path = os.path.join(path, appname) + + return path + + +# for the discussion regarding site_config_dirs locations +# see +def site_config_dirs(appname): + # type: (str) -> List[str] + r"""Return a list of potential user-shared config dirs for this application. + + "appname" is the name of application. + + Typical user config directories are: + macOS: /Library/Application Support// + Unix: /etc or $XDG_CONFIG_DIRS[i]// for each value in + $XDG_CONFIG_DIRS + Win XP: C:\Documents and Settings\All Users\Application ... + ...Data\\ + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory + on Vista.) + Win 7: Hidden, but writeable on Win 7: + C:\ProgramData\\ + """ + if WINDOWS: + path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) + pathlist = [os.path.join(path, appname)] + elif sys.platform == 'darwin': + pathlist = [os.path.join('/Library/Application Support', appname)] + else: + # try looking in $XDG_CONFIG_DIRS + xdg_config_dirs = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') + if xdg_config_dirs: + pathlist = [ + os.path.join(expanduser(x), appname) + for x in xdg_config_dirs.split(os.pathsep) + ] + else: + pathlist = [] + + # always look in /etc directly as well + pathlist.append('/etc') + + return pathlist + + +# -- Windows support functions -- + +def _get_win_folder_from_registry(csidl_name): + # type: (str) -> str + """ + This is a fallback technique at best. I'm not sure if using the + registry for this guarantees us the correct answer for all CSIDL_* + names. + """ + import _winreg + + shell_folder_name = { + "CSIDL_APPDATA": "AppData", + "CSIDL_COMMON_APPDATA": "Common AppData", + "CSIDL_LOCAL_APPDATA": "Local AppData", + }[csidl_name] + + key = _winreg.OpenKey( + _winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" + ) + directory, _type = _winreg.QueryValueEx(key, shell_folder_name) + return directory + + +def _get_win_folder_with_ctypes(csidl_name): + # type: (str) -> str + # On Python 2, ctypes.create_unicode_buffer().value returns "unicode", + # which isn't the same as str in the annotation above. + csidl_const = { + "CSIDL_APPDATA": 26, + "CSIDL_COMMON_APPDATA": 35, + "CSIDL_LOCAL_APPDATA": 28, + }[csidl_name] + + buf = ctypes.create_unicode_buffer(1024) + windll = ctypes.windll # type: ignore + windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in buf: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf2 = ctypes.create_unicode_buffer(1024) + if windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + buf = buf2 + + # The type: ignore is explained under the type annotation for this function + return buf.value # type: ignore + + +if WINDOWS: + try: + import ctypes + _get_win_folder = _get_win_folder_with_ctypes + except ImportError: + _get_win_folder = _get_win_folder_from_registry + + +def _win_path_to_bytes(path): + """Encode Windows paths to bytes. Only used on Python 2. + + Motivation is to be consistent with other operating systems where paths + are also returned as bytes. This avoids problems mixing bytes and Unicode + elsewhere in the codebase. For more details and discussion see + . + + If encoding using ASCII and MBCS fails, return the original Unicode path. + """ + for encoding in ('ASCII', 'MBCS'): + try: + return path.encode(encoding) + except (UnicodeEncodeError, LookupError): + pass + return path diff --git a/my_env/Lib/site-packages/pip/_internal/utils/compat.py b/my_env/Lib/site-packages/pip/_internal/utils/compat.py new file mode 100644 index 000000000..dbd844875 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/compat.py @@ -0,0 +1,297 @@ +"""Stuff that differs in different Python versions and platform +distributions.""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import, division + +import codecs +import locale +import logging +import os +import shutil +import sys + +from pip._vendor.six import PY2, text_type +from pip._vendor.urllib3.util import IS_PYOPENSSL + +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional, Text, Tuple, Union + +try: + import _ssl # noqa +except ImportError: + ssl = None +else: + # This additional assignment was needed to prevent a mypy error. + ssl = _ssl + +try: + import ipaddress +except ImportError: + try: + from pip._vendor import ipaddress # type: ignore + except ImportError: + import ipaddr as ipaddress # type: ignore + ipaddress.ip_address = ipaddress.IPAddress # type: ignore + ipaddress.ip_network = ipaddress.IPNetwork # type: ignore + + +__all__ = [ + "ipaddress", "uses_pycache", "console_to_str", "native_str", + "get_path_uid", "stdlib_pkgs", "WINDOWS", "samefile", "get_terminal_size", + "get_extension_suffixes", +] + + +logger = logging.getLogger(__name__) + +HAS_TLS = (ssl is not None) or IS_PYOPENSSL + +if PY2: + import imp + + try: + cache_from_source = imp.cache_from_source # type: ignore + except AttributeError: + # does not use __pycache__ + cache_from_source = None + + uses_pycache = cache_from_source is not None +else: + uses_pycache = True + from importlib.util import cache_from_source + + +if PY2: + # In Python 2.7, backslashreplace exists + # but does not support use for decoding. + # We implement our own replace handler for this + # situation, so that we can consistently use + # backslash replacement for all versions. + def backslashreplace_decode_fn(err): + raw_bytes = (err.object[i] for i in range(err.start, err.end)) + # Python 2 gave us characters - convert to numeric bytes + raw_bytes = (ord(b) for b in raw_bytes) + return u"".join(u"\\x%x" % c for c in raw_bytes), err.end + codecs.register_error( + "backslashreplace_decode", + backslashreplace_decode_fn, + ) + backslashreplace_decode = "backslashreplace_decode" +else: + backslashreplace_decode = "backslashreplace" + + +def str_to_display(data, desc=None): + # type: (Union[bytes, Text], Optional[str]) -> Text + """ + For display or logging purposes, convert a bytes object (or text) to + text (e.g. unicode in Python 2) safe for output. + + :param desc: An optional phrase describing the input data, for use in + the log message if a warning is logged. Defaults to "Bytes object". + + This function should never error out and so can take a best effort + approach. It is okay to be lossy if needed since the return value is + just for display. + + We assume the data is in the locale preferred encoding. If it won't + decode properly, we warn the user but decode as best we can. + + We also ensure that the output can be safely written to standard output + without encoding errors. + """ + if isinstance(data, text_type): + return data + + # Otherwise, data is a bytes object (str in Python 2). + # First, get the encoding we assume. This is the preferred + # encoding for the locale, unless that is not found, or + # it is ASCII, in which case assume UTF-8 + encoding = locale.getpreferredencoding() + if (not encoding) or codecs.lookup(encoding).name == "ascii": + encoding = "utf-8" + + # Now try to decode the data - if we fail, warn the user and + # decode with replacement. + try: + decoded_data = data.decode(encoding) + except UnicodeDecodeError: + if desc is None: + desc = 'Bytes object' + msg_format = '{} does not appear to be encoded as %s'.format(desc) + logger.warning(msg_format, encoding) + decoded_data = data.decode(encoding, errors=backslashreplace_decode) + + # Make sure we can print the output, by encoding it to the output + # encoding with replacement of unencodable characters, and then + # decoding again. + # We use stderr's encoding because it's less likely to be + # redirected and if we don't find an encoding we skip this + # step (on the assumption that output is wrapped by something + # that won't fail). + # The double getattr is to deal with the possibility that we're + # being called in a situation where sys.__stderr__ doesn't exist, + # or doesn't have an encoding attribute. Neither of these cases + # should occur in normal pip use, but there's no harm in checking + # in case people use pip in (unsupported) unusual situations. + output_encoding = getattr(getattr(sys, "__stderr__", None), + "encoding", None) + + if output_encoding: + output_encoded = decoded_data.encode( + output_encoding, + errors="backslashreplace" + ) + decoded_data = output_encoded.decode(output_encoding) + + return decoded_data + + +def console_to_str(data): + # type: (bytes) -> Text + """Return a string, safe for output, of subprocess output. + """ + return str_to_display(data, desc='Subprocess output') + + +if PY2: + def native_str(s, replace=False): + # type: (str, bool) -> str + # Replace is ignored -- unicode to UTF-8 can't fail + if isinstance(s, text_type): + return s.encode('utf-8') + return s + +else: + def native_str(s, replace=False): + # type: (str, bool) -> str + if isinstance(s, bytes): + return s.decode('utf-8', 'replace' if replace else 'strict') + return s + + +def get_path_uid(path): + # type: (str) -> int + """ + Return path's uid. + + Does not follow symlinks: + https://github.com/pypa/pip/pull/935#discussion_r5307003 + + Placed this function in compat due to differences on AIX and + Jython, that should eventually go away. + + :raises OSError: When path is a symlink or can't be read. + """ + if hasattr(os, 'O_NOFOLLOW'): + fd = os.open(path, os.O_RDONLY | os.O_NOFOLLOW) + file_uid = os.fstat(fd).st_uid + os.close(fd) + else: # AIX and Jython + # WARNING: time of check vulnerability, but best we can do w/o NOFOLLOW + if not os.path.islink(path): + # older versions of Jython don't have `os.fstat` + file_uid = os.stat(path).st_uid + else: + # raise OSError for parity with os.O_NOFOLLOW above + raise OSError( + "%s is a symlink; Will not return uid for symlinks" % path + ) + return file_uid + + +if PY2: + from imp import get_suffixes + + def get_extension_suffixes(): + return [suffix[0] for suffix in get_suffixes()] + +else: + from importlib.machinery import EXTENSION_SUFFIXES + + def get_extension_suffixes(): + return EXTENSION_SUFFIXES + + +def expanduser(path): + # type: (str) -> str + """ + Expand ~ and ~user constructions. + + Includes a workaround for https://bugs.python.org/issue14768 + """ + expanded = os.path.expanduser(path) + if path.startswith('~/') and expanded.startswith('//'): + expanded = expanded[1:] + return expanded + + +# packages in the stdlib that may have installation metadata, but should not be +# considered 'installed'. this theoretically could be determined based on +# dist.location (py27:`sysconfig.get_paths()['stdlib']`, +# py26:sysconfig.get_config_vars('LIBDEST')), but fear platform variation may +# make this ineffective, so hard-coding +stdlib_pkgs = {"python", "wsgiref", "argparse"} + + +# windows detection, covers cpython and ironpython +WINDOWS = (sys.platform.startswith("win") or + (sys.platform == 'cli' and os.name == 'nt')) + + +def samefile(file1, file2): + # type: (str, str) -> bool + """Provide an alternative for os.path.samefile on Windows/Python2""" + if hasattr(os.path, 'samefile'): + return os.path.samefile(file1, file2) + else: + path1 = os.path.normcase(os.path.abspath(file1)) + path2 = os.path.normcase(os.path.abspath(file2)) + return path1 == path2 + + +if hasattr(shutil, 'get_terminal_size'): + def get_terminal_size(): + # type: () -> Tuple[int, int] + """ + Returns a tuple (x, y) representing the width(x) and the height(y) + in characters of the terminal window. + """ + return tuple(shutil.get_terminal_size()) # type: ignore +else: + def get_terminal_size(): + # type: () -> Tuple[int, int] + """ + Returns a tuple (x, y) representing the width(x) and the height(y) + in characters of the terminal window. + """ + def ioctl_GWINSZ(fd): + try: + import fcntl + import termios + import struct + cr = struct.unpack_from( + 'hh', + fcntl.ioctl(fd, termios.TIOCGWINSZ, '12345678') + ) + except Exception: + return None + if cr == (0, 0): + return None + return cr + cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) + if not cr: + try: + fd = os.open(os.ctermid(), os.O_RDONLY) + cr = ioctl_GWINSZ(fd) + os.close(fd) + except Exception: + pass + if not cr: + cr = (os.environ.get('LINES', 25), os.environ.get('COLUMNS', 80)) + return int(cr[1]), int(cr[0]) diff --git a/my_env/Lib/site-packages/pip/_internal/utils/deprecation.py b/my_env/Lib/site-packages/pip/_internal/utils/deprecation.py new file mode 100644 index 000000000..2f20cfd49 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/deprecation.py @@ -0,0 +1,104 @@ +""" +A module that implements tooling to enable easy warnings about deprecations. +""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import logging +import warnings + +from pip._vendor.packaging.version import parse + +from pip import __version__ as current_version +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Any, Optional + + +DEPRECATION_MSG_PREFIX = "DEPRECATION: " + + +class PipDeprecationWarning(Warning): + pass + + +_original_showwarning = None # type: Any + + +# Warnings <-> Logging Integration +def _showwarning(message, category, filename, lineno, file=None, line=None): + if file is not None: + if _original_showwarning is not None: + _original_showwarning( + message, category, filename, lineno, file, line, + ) + elif issubclass(category, PipDeprecationWarning): + # We use a specially named logger which will handle all of the + # deprecation messages for pip. + logger = logging.getLogger("pip._internal.deprecations") + logger.warning(message) + else: + _original_showwarning( + message, category, filename, lineno, file, line, + ) + + +def install_warning_logger(): + # type: () -> None + # Enable our Deprecation Warnings + warnings.simplefilter("default", PipDeprecationWarning, append=True) + + global _original_showwarning + + if _original_showwarning is None: + _original_showwarning = warnings.showwarning + warnings.showwarning = _showwarning + + +def deprecated(reason, replacement, gone_in, issue=None): + # type: (str, Optional[str], Optional[str], Optional[int]) -> None + """Helper to deprecate existing functionality. + + reason: + Textual reason shown to the user about why this functionality has + been deprecated. + replacement: + Textual suggestion shown to the user about what alternative + functionality they can use. + gone_in: + The version of pip does this functionality should get removed in. + Raises errors if pip's current version is greater than or equal to + this. + issue: + Issue number on the tracker that would serve as a useful place for + users to find related discussion and provide feedback. + + Always pass replacement, gone_in and issue as keyword arguments for clarity + at the call site. + """ + + # Construct a nice message. + # This is eagerly formatted as we want it to get logged as if someone + # typed this entire message out. + sentences = [ + (reason, DEPRECATION_MSG_PREFIX + "{}"), + (gone_in, "pip {} will remove support for this functionality."), + (replacement, "A possible replacement is {}."), + (issue, ( + "You can find discussion regarding this at " + "https://github.com/pypa/pip/issues/{}." + )), + ] + message = " ".join( + template.format(val) for val, template in sentences if val is not None + ) + + # Raise as an error if it has to be removed. + if gone_in is not None and parse(current_version) >= parse(gone_in): + raise PipDeprecationWarning(message) + + warnings.warn(message, category=PipDeprecationWarning, stacklevel=2) diff --git a/my_env/Lib/site-packages/pip/_internal/utils/encoding.py b/my_env/Lib/site-packages/pip/_internal/utils/encoding.py new file mode 100644 index 000000000..ab4d4b98e --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/encoding.py @@ -0,0 +1,42 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import codecs +import locale +import re +import sys + +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import List, Tuple, Text + +BOMS = [ + (codecs.BOM_UTF8, 'utf-8'), + (codecs.BOM_UTF16, 'utf-16'), + (codecs.BOM_UTF16_BE, 'utf-16-be'), + (codecs.BOM_UTF16_LE, 'utf-16-le'), + (codecs.BOM_UTF32, 'utf-32'), + (codecs.BOM_UTF32_BE, 'utf-32-be'), + (codecs.BOM_UTF32_LE, 'utf-32-le'), +] # type: List[Tuple[bytes, Text]] + +ENCODING_RE = re.compile(br'coding[:=]\s*([-\w.]+)') + + +def auto_decode(data): + # type: (bytes) -> Text + """Check a bytes string for a BOM to correctly detect the encoding + + Fallback to locale.getpreferredencoding(False) like open() on Python3""" + for bom, encoding in BOMS: + if data.startswith(bom): + return data[len(bom):].decode(encoding) + # Lets check the first two lines as in PEP263 + for line in data.split(b'\n')[:2]: + if line[0:1] == b'#' and ENCODING_RE.search(line): + encoding = ENCODING_RE.search(line).groups()[0].decode('ascii') + return data.decode(encoding) + return data.decode( + locale.getpreferredencoding(False) or sys.getdefaultencoding(), + ) diff --git a/my_env/Lib/site-packages/pip/_internal/utils/filesystem.py b/my_env/Lib/site-packages/pip/_internal/utils/filesystem.py new file mode 100644 index 000000000..f4a389cd9 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/filesystem.py @@ -0,0 +1,115 @@ +import os +import os.path +import shutil +import stat +from contextlib import contextmanager +from tempfile import NamedTemporaryFile + +# NOTE: retrying is not annotated in typeshed as on 2017-07-17, which is +# why we ignore the type on this import. +from pip._vendor.retrying import retry # type: ignore +from pip._vendor.six import PY2 + +from pip._internal.utils.compat import get_path_uid +from pip._internal.utils.misc import cast +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import BinaryIO, Iterator + + class NamedTemporaryFileResult(BinaryIO): + @property + def file(self): + # type: () -> BinaryIO + pass + + +def check_path_owner(path): + # type: (str) -> bool + # If we don't have a way to check the effective uid of this process, then + # we'll just assume that we own the directory. + if not hasattr(os, "geteuid"): + return True + + previous = None + while path != previous: + if os.path.lexists(path): + # Check if path is writable by current user. + if os.geteuid() == 0: + # Special handling for root user in order to handle properly + # cases where users use sudo without -H flag. + try: + path_uid = get_path_uid(path) + except OSError: + return False + return path_uid == 0 + else: + return os.access(path, os.W_OK) + else: + previous, path = path, os.path.dirname(path) + return False # assume we don't own the path + + +def copy2_fixed(src, dest): + # type: (str, str) -> None + """Wrap shutil.copy2() but map errors copying socket files to + SpecialFileError as expected. + + See also https://bugs.python.org/issue37700. + """ + try: + shutil.copy2(src, dest) + except (OSError, IOError): + for f in [src, dest]: + try: + is_socket_file = is_socket(f) + except OSError: + # An error has already occurred. Another error here is not + # a problem and we can ignore it. + pass + else: + if is_socket_file: + raise shutil.SpecialFileError("`%s` is a socket" % f) + + raise + + +def is_socket(path): + # type: (str) -> bool + return stat.S_ISSOCK(os.lstat(path).st_mode) + + +@contextmanager +def adjacent_tmp_file(path): + # type: (str) -> Iterator[NamedTemporaryFileResult] + """Given a path to a file, open a temp file next to it securely and ensure + it is written to disk after the context reaches its end. + """ + with NamedTemporaryFile( + delete=False, + dir=os.path.dirname(path), + prefix=os.path.basename(path), + suffix='.tmp', + ) as f: + result = cast('NamedTemporaryFileResult', f) + try: + yield result + finally: + result.file.flush() + os.fsync(result.file.fileno()) + + +_replace_retry = retry(stop_max_delay=1000, wait_fixed=250) + +if PY2: + @_replace_retry + def replace(src, dest): + # type: (str, str) -> None + try: + os.rename(src, dest) + except OSError: + os.remove(dest) + os.rename(src, dest) + +else: + replace = _replace_retry(os.replace) diff --git a/my_env/Lib/site-packages/pip/_internal/utils/filetypes.py b/my_env/Lib/site-packages/pip/_internal/utils/filetypes.py new file mode 100644 index 000000000..daa0ca771 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/filetypes.py @@ -0,0 +1,16 @@ +"""Filetype information. +""" +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Tuple + +WHEEL_EXTENSION = '.whl' +BZ2_EXTENSIONS = ('.tar.bz2', '.tbz') # type: Tuple[str, ...] +XZ_EXTENSIONS = ('.tar.xz', '.txz', '.tlz', + '.tar.lz', '.tar.lzma') # type: Tuple[str, ...] +ZIP_EXTENSIONS = ('.zip', WHEEL_EXTENSION) # type: Tuple[str, ...] +TAR_EXTENSIONS = ('.tar.gz', '.tgz', '.tar') # type: Tuple[str, ...] +ARCHIVE_EXTENSIONS = ( + ZIP_EXTENSIONS + BZ2_EXTENSIONS + TAR_EXTENSIONS + XZ_EXTENSIONS +) diff --git a/my_env/Lib/site-packages/pip/_internal/utils/glibc.py b/my_env/Lib/site-packages/pip/_internal/utils/glibc.py new file mode 100644 index 000000000..544b4c279 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/glibc.py @@ -0,0 +1,123 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +from __future__ import absolute_import + +import os +import re +import warnings + +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional, Tuple + + +def glibc_version_string(): + # type: () -> Optional[str] + "Returns glibc version string, or None if not using glibc." + return glibc_version_string_confstr() or glibc_version_string_ctypes() + + +def glibc_version_string_confstr(): + # type: () -> Optional[str] + "Primary implementation of glibc_version_string using os.confstr." + # os.confstr is quite a bit faster than ctypes.DLL. It's also less likely + # to be broken or missing. This strategy is used in the standard library + # platform module: + # https://github.com/python/cpython/blob/fcf1d003bf4f0100c9d0921ff3d70e1127ca1b71/Lib/platform.py#L175-L183 + try: + # os.confstr("CS_GNU_LIBC_VERSION") returns a string like "glibc 2.17": + _, version = os.confstr("CS_GNU_LIBC_VERSION").split() + except (AttributeError, OSError, ValueError): + # os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)... + return None + return version + + +def glibc_version_string_ctypes(): + # type: () -> Optional[str] + "Fallback implementation of glibc_version_string using ctypes." + + try: + import ctypes + except ImportError: + return None + + # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen + # manpage says, "If filename is NULL, then the returned handle is for the + # main program". This way we can let the linker do the work to figure out + # which libc our process is actually using. + process_namespace = ctypes.CDLL(None) + try: + gnu_get_libc_version = process_namespace.gnu_get_libc_version + except AttributeError: + # Symbol doesn't exist -> therefore, we are not linked to + # glibc. + return None + + # Call gnu_get_libc_version, which returns a string like "2.5" + gnu_get_libc_version.restype = ctypes.c_char_p + version_str = gnu_get_libc_version() + # py2 / py3 compatibility: + if not isinstance(version_str, str): + version_str = version_str.decode("ascii") + + return version_str + + +# Separated out from have_compatible_glibc for easier unit testing +def check_glibc_version(version_str, required_major, minimum_minor): + # type: (str, int, int) -> bool + # Parse string and check against requested version. + # + # We use a regexp instead of str.split because we want to discard any + # random junk that might come after the minor version -- this might happen + # in patched/forked versions of glibc (e.g. Linaro's version of glibc + # uses version strings like "2.20-2014.11"). See gh-3588. + m = re.match(r"(?P[0-9]+)\.(?P[0-9]+)", version_str) + if not m: + warnings.warn("Expected glibc version with 2 components major.minor," + " got: %s" % version_str, RuntimeWarning) + return False + return (int(m.group("major")) == required_major and + int(m.group("minor")) >= minimum_minor) + + +def have_compatible_glibc(required_major, minimum_minor): + # type: (int, int) -> bool + version_str = glibc_version_string() + if version_str is None: + return False + return check_glibc_version(version_str, required_major, minimum_minor) + + +# platform.libc_ver regularly returns completely nonsensical glibc +# versions. E.g. on my computer, platform says: +# +# ~$ python2.7 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.7') +# ~$ python3.5 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.9') +# +# But the truth is: +# +# ~$ ldd --version +# ldd (Debian GLIBC 2.22-11) 2.22 +# +# This is unfortunate, because it means that the linehaul data on libc +# versions that was generated by pip 8.1.2 and earlier is useless and +# misleading. Solution: instead of using platform, use our code that actually +# works. +def libc_ver(): + # type: () -> Tuple[str, str] + """Try to determine the glibc version + + Returns a tuple of strings (lib, version) which default to empty strings + in case the lookup fails. + """ + glibc_version = glibc_version_string() + if glibc_version is None: + return ("", "") + else: + return ("glibc", glibc_version) diff --git a/my_env/Lib/site-packages/pip/_internal/utils/hashes.py b/my_env/Lib/site-packages/pip/_internal/utils/hashes.py new file mode 100644 index 000000000..a0d87a41e --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/hashes.py @@ -0,0 +1,133 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import hashlib + +from pip._vendor.six import iteritems, iterkeys, itervalues + +from pip._internal.exceptions import ( + HashMismatch, + HashMissing, + InstallationError, +) +from pip._internal.utils.misc import read_chunks +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import ( + Dict, List, BinaryIO, NoReturn, Iterator + ) + from pip._vendor.six import PY3 + if PY3: + from hashlib import _Hash + else: + from hashlib import _hash as _Hash + + +# The recommended hash algo of the moment. Change this whenever the state of +# the art changes; it won't hurt backward compatibility. +FAVORITE_HASH = 'sha256' + + +# Names of hashlib algorithms allowed by the --hash option and ``pip hash`` +# Currently, those are the ones at least as collision-resistant as sha256. +STRONG_HASHES = ['sha256', 'sha384', 'sha512'] + + +class Hashes(object): + """A wrapper that builds multiple hashes at once and checks them against + known-good values + + """ + def __init__(self, hashes=None): + # type: (Dict[str, List[str]]) -> None + """ + :param hashes: A dict of algorithm names pointing to lists of allowed + hex digests + """ + self._allowed = {} if hashes is None else hashes + + @property + def digest_count(self): + # type: () -> int + return sum(len(digests) for digests in self._allowed.values()) + + def is_hash_allowed( + self, + hash_name, # type: str + hex_digest, # type: str + ): + """Return whether the given hex digest is allowed.""" + return hex_digest in self._allowed.get(hash_name, []) + + def check_against_chunks(self, chunks): + # type: (Iterator[bytes]) -> None + """Check good hashes against ones built from iterable of chunks of + data. + + Raise HashMismatch if none match. + + """ + gots = {} + for hash_name in iterkeys(self._allowed): + try: + gots[hash_name] = hashlib.new(hash_name) + except (ValueError, TypeError): + raise InstallationError('Unknown hash name: %s' % hash_name) + + for chunk in chunks: + for hash in itervalues(gots): + hash.update(chunk) + + for hash_name, got in iteritems(gots): + if got.hexdigest() in self._allowed[hash_name]: + return + self._raise(gots) + + def _raise(self, gots): + # type: (Dict[str, _Hash]) -> NoReturn + raise HashMismatch(self._allowed, gots) + + def check_against_file(self, file): + # type: (BinaryIO) -> None + """Check good hashes against a file-like object + + Raise HashMismatch if none match. + + """ + return self.check_against_chunks(read_chunks(file)) + + def check_against_path(self, path): + # type: (str) -> None + with open(path, 'rb') as file: + return self.check_against_file(file) + + def __nonzero__(self): + # type: () -> bool + """Return whether I know any known-good hashes.""" + return bool(self._allowed) + + def __bool__(self): + # type: () -> bool + return self.__nonzero__() + + +class MissingHashes(Hashes): + """A workalike for Hashes used when we're missing a hash for a requirement + + It computes the actual hash of the requirement and raises a HashMissing + exception showing it to the user. + + """ + def __init__(self): + # type: () -> None + """Don't offer the ``hashes`` kwarg.""" + # Pass our favorite hash in to generate a "gotten hash". With the + # empty list, it will never match, so an error will always raise. + super(MissingHashes, self).__init__(hashes={FAVORITE_HASH: []}) + + def _raise(self, gots): + # type: (Dict[str, _Hash]) -> NoReturn + raise HashMissing(gots[FAVORITE_HASH].hexdigest()) diff --git a/my_env/Lib/site-packages/pip/_internal/utils/inject_securetransport.py b/my_env/Lib/site-packages/pip/_internal/utils/inject_securetransport.py new file mode 100644 index 000000000..5b93b1d67 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/inject_securetransport.py @@ -0,0 +1,36 @@ +"""A helper module that injects SecureTransport, on import. + +The import should be done as early as possible, to ensure all requests and +sessions (or whatever) are created after injecting SecureTransport. + +Note that we only do the injection on macOS, when the linked OpenSSL is too +old to handle TLSv1.2. +""" + +import sys + + +def inject_securetransport(): + # type: () -> None + # Only relevant on macOS + if sys.platform != "darwin": + return + + try: + import ssl + except ImportError: + return + + # Checks for OpenSSL 1.0.1 + if ssl.OPENSSL_VERSION_NUMBER >= 0x1000100f: + return + + try: + from pip._vendor.urllib3.contrib import securetransport + except (ImportError, OSError): + return + + securetransport.inject_into_urllib3() + + +inject_securetransport() diff --git a/my_env/Lib/site-packages/pip/_internal/utils/logging.py b/my_env/Lib/site-packages/pip/_internal/utils/logging.py new file mode 100644 index 000000000..7767111a6 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/logging.py @@ -0,0 +1,398 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import contextlib +import errno +import logging +import logging.handlers +import os +import sys +from logging import Filter, getLogger + +from pip._vendor.six import PY2 + +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.deprecation import DEPRECATION_MSG_PREFIX +from pip._internal.utils.misc import ensure_dir + +try: + import threading +except ImportError: + import dummy_threading as threading # type: ignore + + +try: + # Use "import as" and set colorama in the else clause to avoid mypy + # errors and get the following correct revealed type for colorama: + # `Union[_importlib_modulespec.ModuleType, None]` + # Otherwise, we get an error like the following in the except block: + # > Incompatible types in assignment (expression has type "None", + # variable has type Module) + # TODO: eliminate the need to use "import as" once mypy addresses some + # of its issues with conditional imports. Here is an umbrella issue: + # https://github.com/python/mypy/issues/1297 + from pip._vendor import colorama as _colorama +# Lots of different errors can come from this, including SystemError and +# ImportError. +except Exception: + colorama = None +else: + # Import Fore explicitly rather than accessing below as colorama.Fore + # to avoid the following error running mypy: + # > Module has no attribute "Fore" + # TODO: eliminate the need to import Fore once mypy addresses some of its + # issues with conditional imports. This particular case could be an + # instance of the following issue (but also see the umbrella issue above): + # https://github.com/python/mypy/issues/3500 + from pip._vendor.colorama import Fore + + colorama = _colorama + + +_log_state = threading.local() +_log_state.indentation = 0 +subprocess_logger = getLogger('pip.subprocessor') + + +class BrokenStdoutLoggingError(Exception): + """ + Raised if BrokenPipeError occurs for the stdout stream while logging. + """ + pass + + +# BrokenPipeError does not exist in Python 2 and, in addition, manifests +# differently in Windows and non-Windows. +if WINDOWS: + # In Windows, a broken pipe can show up as EINVAL rather than EPIPE: + # https://bugs.python.org/issue19612 + # https://bugs.python.org/issue30418 + if PY2: + def _is_broken_pipe_error(exc_class, exc): + """See the docstring for non-Windows Python 3 below.""" + return (exc_class is IOError and + exc.errno in (errno.EINVAL, errno.EPIPE)) + else: + # In Windows, a broken pipe IOError became OSError in Python 3. + def _is_broken_pipe_error(exc_class, exc): + """See the docstring for non-Windows Python 3 below.""" + return ((exc_class is BrokenPipeError) or # noqa: F821 + (exc_class is OSError and + exc.errno in (errno.EINVAL, errno.EPIPE))) +elif PY2: + def _is_broken_pipe_error(exc_class, exc): + """See the docstring for non-Windows Python 3 below.""" + return (exc_class is IOError and exc.errno == errno.EPIPE) +else: + # Then we are in the non-Windows Python 3 case. + def _is_broken_pipe_error(exc_class, exc): + """ + Return whether an exception is a broken pipe error. + + Args: + exc_class: an exception class. + exc: an exception instance. + """ + return (exc_class is BrokenPipeError) # noqa: F821 + + +@contextlib.contextmanager +def indent_log(num=2): + """ + A context manager which will cause the log output to be indented for any + log messages emitted inside it. + """ + _log_state.indentation += num + try: + yield + finally: + _log_state.indentation -= num + + +def get_indentation(): + return getattr(_log_state, 'indentation', 0) + + +class IndentingFormatter(logging.Formatter): + + def __init__(self, *args, **kwargs): + """ + A logging.Formatter that obeys the indent_log() context manager. + + :param add_timestamp: A bool indicating output lines should be prefixed + with their record's timestamp. + """ + self.add_timestamp = kwargs.pop("add_timestamp", False) + super(IndentingFormatter, self).__init__(*args, **kwargs) + + def get_message_start(self, formatted, levelno): + """ + Return the start of the formatted log message (not counting the + prefix to add to each line). + """ + if levelno < logging.WARNING: + return '' + if formatted.startswith(DEPRECATION_MSG_PREFIX): + # Then the message already has a prefix. We don't want it to + # look like "WARNING: DEPRECATION: ...." + return '' + if levelno < logging.ERROR: + return 'WARNING: ' + + return 'ERROR: ' + + def format(self, record): + """ + Calls the standard formatter, but will indent all of the log message + lines by our current indentation level. + """ + formatted = super(IndentingFormatter, self).format(record) + message_start = self.get_message_start(formatted, record.levelno) + formatted = message_start + formatted + + prefix = '' + if self.add_timestamp: + # TODO: Use Formatter.default_time_format after dropping PY2. + t = self.formatTime(record, "%Y-%m-%dT%H:%M:%S") + prefix = '%s,%03d ' % (t, record.msecs) + prefix += " " * get_indentation() + formatted = "".join([ + prefix + line + for line in formatted.splitlines(True) + ]) + return formatted + + +def _color_wrap(*colors): + def wrapped(inp): + return "".join(list(colors) + [inp, colorama.Style.RESET_ALL]) + return wrapped + + +class ColorizedStreamHandler(logging.StreamHandler): + + # Don't build up a list of colors if we don't have colorama + if colorama: + COLORS = [ + # This needs to be in order from highest logging level to lowest. + (logging.ERROR, _color_wrap(Fore.RED)), + (logging.WARNING, _color_wrap(Fore.YELLOW)), + ] + else: + COLORS = [] + + def __init__(self, stream=None, no_color=None): + logging.StreamHandler.__init__(self, stream) + self._no_color = no_color + + if WINDOWS and colorama: + self.stream = colorama.AnsiToWin32(self.stream) + + def _using_stdout(self): + """ + Return whether the handler is using sys.stdout. + """ + if WINDOWS and colorama: + # Then self.stream is an AnsiToWin32 object. + return self.stream.wrapped is sys.stdout + + return self.stream is sys.stdout + + def should_color(self): + # Don't colorize things if we do not have colorama or if told not to + if not colorama or self._no_color: + return False + + real_stream = ( + self.stream if not isinstance(self.stream, colorama.AnsiToWin32) + else self.stream.wrapped + ) + + # If the stream is a tty we should color it + if hasattr(real_stream, "isatty") and real_stream.isatty(): + return True + + # If we have an ANSI term we should color it + if os.environ.get("TERM") == "ANSI": + return True + + # If anything else we should not color it + return False + + def format(self, record): + msg = logging.StreamHandler.format(self, record) + + if self.should_color(): + for level, color in self.COLORS: + if record.levelno >= level: + msg = color(msg) + break + + return msg + + # The logging module says handleError() can be customized. + def handleError(self, record): + exc_class, exc = sys.exc_info()[:2] + # If a broken pipe occurred while calling write() or flush() on the + # stdout stream in logging's Handler.emit(), then raise our special + # exception so we can handle it in main() instead of logging the + # broken pipe error and continuing. + if (exc_class and self._using_stdout() and + _is_broken_pipe_error(exc_class, exc)): + raise BrokenStdoutLoggingError() + + return super(ColorizedStreamHandler, self).handleError(record) + + +class BetterRotatingFileHandler(logging.handlers.RotatingFileHandler): + + def _open(self): + ensure_dir(os.path.dirname(self.baseFilename)) + return logging.handlers.RotatingFileHandler._open(self) + + +class MaxLevelFilter(Filter): + + def __init__(self, level): + self.level = level + + def filter(self, record): + return record.levelno < self.level + + +class ExcludeLoggerFilter(Filter): + + """ + A logging Filter that excludes records from a logger (or its children). + """ + + def filter(self, record): + # The base Filter class allows only records from a logger (or its + # children). + return not super(ExcludeLoggerFilter, self).filter(record) + + +def setup_logging(verbosity, no_color, user_log_file): + """Configures and sets up all of the logging + + Returns the requested logging level, as its integer value. + """ + + # Determine the level to be logging at. + if verbosity >= 1: + level = "DEBUG" + elif verbosity == -1: + level = "WARNING" + elif verbosity == -2: + level = "ERROR" + elif verbosity <= -3: + level = "CRITICAL" + else: + level = "INFO" + + level_number = getattr(logging, level) + + # The "root" logger should match the "console" level *unless* we also need + # to log to a user log file. + include_user_log = user_log_file is not None + if include_user_log: + additional_log_file = user_log_file + root_level = "DEBUG" + else: + additional_log_file = "/dev/null" + root_level = level + + # Disable any logging besides WARNING unless we have DEBUG level logging + # enabled for vendored libraries. + vendored_log_level = "WARNING" if level in ["INFO", "ERROR"] else "DEBUG" + + # Shorthands for clarity + log_streams = { + "stdout": "ext://sys.stdout", + "stderr": "ext://sys.stderr", + } + handler_classes = { + "stream": "pip._internal.utils.logging.ColorizedStreamHandler", + "file": "pip._internal.utils.logging.BetterRotatingFileHandler", + } + handlers = ["console", "console_errors", "console_subprocess"] + ( + ["user_log"] if include_user_log else [] + ) + + logging.config.dictConfig({ + "version": 1, + "disable_existing_loggers": False, + "filters": { + "exclude_warnings": { + "()": "pip._internal.utils.logging.MaxLevelFilter", + "level": logging.WARNING, + }, + "restrict_to_subprocess": { + "()": "logging.Filter", + "name": subprocess_logger.name, + }, + "exclude_subprocess": { + "()": "pip._internal.utils.logging.ExcludeLoggerFilter", + "name": subprocess_logger.name, + }, + }, + "formatters": { + "indent": { + "()": IndentingFormatter, + "format": "%(message)s", + }, + "indent_with_timestamp": { + "()": IndentingFormatter, + "format": "%(message)s", + "add_timestamp": True, + }, + }, + "handlers": { + "console": { + "level": level, + "class": handler_classes["stream"], + "no_color": no_color, + "stream": log_streams["stdout"], + "filters": ["exclude_subprocess", "exclude_warnings"], + "formatter": "indent", + }, + "console_errors": { + "level": "WARNING", + "class": handler_classes["stream"], + "no_color": no_color, + "stream": log_streams["stderr"], + "filters": ["exclude_subprocess"], + "formatter": "indent", + }, + # A handler responsible for logging to the console messages + # from the "subprocessor" logger. + "console_subprocess": { + "level": level, + "class": handler_classes["stream"], + "no_color": no_color, + "stream": log_streams["stderr"], + "filters": ["restrict_to_subprocess"], + "formatter": "indent", + }, + "user_log": { + "level": "DEBUG", + "class": handler_classes["file"], + "filename": additional_log_file, + "delay": True, + "formatter": "indent_with_timestamp", + }, + }, + "root": { + "level": root_level, + "handlers": handlers, + }, + "loggers": { + "pip._vendor": { + "level": vendored_log_level + } + }, + }) + + return level_number diff --git a/my_env/Lib/site-packages/pip/_internal/utils/marker_files.py b/my_env/Lib/site-packages/pip/_internal/utils/marker_files.py new file mode 100644 index 000000000..734cba4c1 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/marker_files.py @@ -0,0 +1,27 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import os.path + +DELETE_MARKER_MESSAGE = '''\ +This file is placed here by pip to indicate the source was put +here by pip. + +Once this package is successfully installed this source code will be +deleted (unless you remove this file). +''' +PIP_DELETE_MARKER_FILENAME = 'pip-delete-this-directory.txt' + + +def has_delete_marker_file(directory): + return os.path.exists(os.path.join(directory, PIP_DELETE_MARKER_FILENAME)) + + +def write_delete_marker_file(directory): + # type: (str) -> None + """ + Write the pip delete marker file into this directory. + """ + filepath = os.path.join(directory, PIP_DELETE_MARKER_FILENAME) + with open(filepath, 'w') as marker_fp: + marker_fp.write(DELETE_MARKER_MESSAGE) diff --git a/my_env/Lib/site-packages/pip/_internal/utils/misc.py b/my_env/Lib/site-packages/pip/_internal/utils/misc.py new file mode 100644 index 000000000..b84826350 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/misc.py @@ -0,0 +1,870 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import contextlib +import errno +import getpass +import io +import logging +import os +import posixpath +import shutil +import stat +import sys +from collections import deque + +from pip._vendor import pkg_resources +# NOTE: retrying is not annotated in typeshed as on 2017-07-17, which is +# why we ignore the type on this import. +from pip._vendor.retrying import retry # type: ignore +from pip._vendor.six import PY2, text_type +from pip._vendor.six.moves import input +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib.parse import unquote as urllib_unquote + +from pip import __version__ +from pip._internal.exceptions import CommandError +from pip._internal.locations import ( + get_major_minor_version, + site_packages, + user_site, +) +from pip._internal.utils.compat import ( + WINDOWS, + expanduser, + stdlib_pkgs, + str_to_display, +) +from pip._internal.utils.marker_files import write_delete_marker_file +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.virtualenv import ( + running_under_virtualenv, + virtualenv_no_global, +) + +if PY2: + from io import BytesIO as StringIO +else: + from io import StringIO + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, AnyStr, Container, Iterable, List, Optional, Text, + Tuple, Union, cast, + ) + from pip._vendor.pkg_resources import Distribution + + VersionInfo = Tuple[int, int, int] +else: + # typing's cast() is needed at runtime, but we don't want to import typing. + # Thus, we use a dummy no-op version, which we tell mypy to ignore. + def cast(type_, value): # type: ignore + return value + + +__all__ = ['rmtree', 'display_path', 'backup_dir', + 'ask', 'splitext', + 'format_size', 'is_installable_dir', + 'normalize_path', + 'renames', 'get_prog', + 'captured_stdout', 'ensure_dir', + 'get_installed_version', 'remove_auth_from_url'] + + +logger = logging.getLogger(__name__) + + +def get_pip_version(): + # type: () -> str + pip_pkg_dir = os.path.join(os.path.dirname(__file__), "..", "..") + pip_pkg_dir = os.path.abspath(pip_pkg_dir) + + return ( + 'pip {} from {} (python {})'.format( + __version__, pip_pkg_dir, get_major_minor_version(), + ) + ) + + +def normalize_version_info(py_version_info): + # type: (Tuple[int, ...]) -> Tuple[int, int, int] + """ + Convert a tuple of ints representing a Python version to one of length + three. + + :param py_version_info: a tuple of ints representing a Python version, + or None to specify no version. The tuple can have any length. + + :return: a tuple of length three if `py_version_info` is non-None. + Otherwise, return `py_version_info` unchanged (i.e. None). + """ + if len(py_version_info) < 3: + py_version_info += (3 - len(py_version_info)) * (0,) + elif len(py_version_info) > 3: + py_version_info = py_version_info[:3] + + return cast('VersionInfo', py_version_info) + + +def ensure_dir(path): + # type: (AnyStr) -> None + """os.path.makedirs without EEXIST.""" + try: + os.makedirs(path) + except OSError as e: + if e.errno != errno.EEXIST: + raise + + +def get_prog(): + # type: () -> str + try: + prog = os.path.basename(sys.argv[0]) + if prog in ('__main__.py', '-c'): + return "%s -m pip" % sys.executable + else: + return prog + except (AttributeError, TypeError, IndexError): + pass + return 'pip' + + +# Retry every half second for up to 3 seconds +@retry(stop_max_delay=3000, wait_fixed=500) +def rmtree(dir, ignore_errors=False): + # type: (str, bool) -> None + shutil.rmtree(dir, ignore_errors=ignore_errors, + onerror=rmtree_errorhandler) + + +def rmtree_errorhandler(func, path, exc_info): + """On Windows, the files in .svn are read-only, so when rmtree() tries to + remove them, an exception is thrown. We catch that here, remove the + read-only attribute, and hopefully continue without problems.""" + try: + has_attr_readonly = not (os.stat(path).st_mode & stat.S_IWRITE) + except (IOError, OSError): + # it's equivalent to os.path.exists + return + + if has_attr_readonly: + # convert to read/write + os.chmod(path, stat.S_IWRITE) + # use the original function to repeat the operation + func(path) + return + else: + raise + + +def path_to_display(path): + # type: (Optional[Union[str, Text]]) -> Optional[Text] + """ + Convert a bytes (or text) path to text (unicode in Python 2) for display + and logging purposes. + + This function should never error out. Also, this function is mainly needed + for Python 2 since in Python 3 str paths are already text. + """ + if path is None: + return None + if isinstance(path, text_type): + return path + # Otherwise, path is a bytes object (str in Python 2). + try: + display_path = path.decode(sys.getfilesystemencoding(), 'strict') + except UnicodeDecodeError: + # Include the full bytes to make troubleshooting easier, even though + # it may not be very human readable. + if PY2: + # Convert the bytes to a readable str representation using + # repr(), and then convert the str to unicode. + # Also, we add the prefix "b" to the repr() return value both + # to make the Python 2 output look like the Python 3 output, and + # to signal to the user that this is a bytes representation. + display_path = str_to_display('b{!r}'.format(path)) + else: + # Silence the "F821 undefined name 'ascii'" flake8 error since + # in Python 3 ascii() is a built-in. + display_path = ascii(path) # noqa: F821 + + return display_path + + +def display_path(path): + # type: (Union[str, Text]) -> str + """Gives the display value for a given path, making it relative to cwd + if possible.""" + path = os.path.normcase(os.path.abspath(path)) + if sys.version_info[0] == 2: + path = path.decode(sys.getfilesystemencoding(), 'replace') + path = path.encode(sys.getdefaultencoding(), 'replace') + if path.startswith(os.getcwd() + os.path.sep): + path = '.' + path[len(os.getcwd()):] + return path + + +def backup_dir(dir, ext='.bak'): + # type: (str, str) -> str + """Figure out the name of a directory to back up the given dir to + (adding .bak, .bak2, etc)""" + n = 1 + extension = ext + while os.path.exists(dir + extension): + n += 1 + extension = ext + str(n) + return dir + extension + + +def ask_path_exists(message, options): + # type: (str, Iterable[str]) -> str + for action in os.environ.get('PIP_EXISTS_ACTION', '').split(): + if action in options: + return action + return ask(message, options) + + +def _check_no_input(message): + # type: (str) -> None + """Raise an error if no input is allowed.""" + if os.environ.get('PIP_NO_INPUT'): + raise Exception( + 'No input was expected ($PIP_NO_INPUT set); question: %s' % + message + ) + + +def ask(message, options): + # type: (str, Iterable[str]) -> str + """Ask the message interactively, with the given possible responses""" + while 1: + _check_no_input(message) + response = input(message) + response = response.strip().lower() + if response not in options: + print( + 'Your response (%r) was not one of the expected responses: ' + '%s' % (response, ', '.join(options)) + ) + else: + return response + + +def ask_input(message): + # type: (str) -> str + """Ask for input interactively.""" + _check_no_input(message) + return input(message) + + +def ask_password(message): + # type: (str) -> str + """Ask for a password interactively.""" + _check_no_input(message) + return getpass.getpass(message) + + +def format_size(bytes): + # type: (float) -> str + if bytes > 1000 * 1000: + return '%.1fMB' % (bytes / 1000.0 / 1000) + elif bytes > 10 * 1000: + return '%ikB' % (bytes / 1000) + elif bytes > 1000: + return '%.1fkB' % (bytes / 1000.0) + else: + return '%ibytes' % bytes + + +def is_installable_dir(path): + # type: (str) -> bool + """Is path is a directory containing setup.py or pyproject.toml? + """ + if not os.path.isdir(path): + return False + setup_py = os.path.join(path, 'setup.py') + if os.path.isfile(setup_py): + return True + pyproject_toml = os.path.join(path, 'pyproject.toml') + if os.path.isfile(pyproject_toml): + return True + return False + + +def read_chunks(file, size=io.DEFAULT_BUFFER_SIZE): + """Yield pieces of data from a file-like object until EOF.""" + while True: + chunk = file.read(size) + if not chunk: + break + yield chunk + + +def normalize_path(path, resolve_symlinks=True): + # type: (str, bool) -> str + """ + Convert a path to its canonical, case-normalized, absolute version. + + """ + path = expanduser(path) + if resolve_symlinks: + path = os.path.realpath(path) + else: + path = os.path.abspath(path) + return os.path.normcase(path) + + +def splitext(path): + # type: (str) -> Tuple[str, str] + """Like os.path.splitext, but take off .tar too""" + base, ext = posixpath.splitext(path) + if base.lower().endswith('.tar'): + ext = base[-4:] + ext + base = base[:-4] + return base, ext + + +def renames(old, new): + # type: (str, str) -> None + """Like os.renames(), but handles renaming across devices.""" + # Implementation borrowed from os.renames(). + head, tail = os.path.split(new) + if head and tail and not os.path.exists(head): + os.makedirs(head) + + shutil.move(old, new) + + head, tail = os.path.split(old) + if head and tail: + try: + os.removedirs(head) + except OSError: + pass + + +def is_local(path): + # type: (str) -> bool + """ + Return True if path is within sys.prefix, if we're running in a virtualenv. + + If we're not in a virtualenv, all paths are considered "local." + + Caution: this function assumes the head of path has been normalized + with normalize_path. + """ + if not running_under_virtualenv(): + return True + return path.startswith(normalize_path(sys.prefix)) + + +def dist_is_local(dist): + # type: (Distribution) -> bool + """ + Return True if given Distribution object is installed locally + (i.e. within current virtualenv). + + Always True if we're not in a virtualenv. + + """ + return is_local(dist_location(dist)) + + +def dist_in_usersite(dist): + # type: (Distribution) -> bool + """ + Return True if given Distribution is installed in user site. + """ + return dist_location(dist).startswith(normalize_path(user_site)) + + +def dist_in_site_packages(dist): + # type: (Distribution) -> bool + """ + Return True if given Distribution is installed in + sysconfig.get_python_lib(). + """ + return dist_location(dist).startswith(normalize_path(site_packages)) + + +def dist_is_editable(dist): + # type: (Distribution) -> bool + """ + Return True if given Distribution is an editable install. + """ + for path_item in sys.path: + egg_link = os.path.join(path_item, dist.project_name + '.egg-link') + if os.path.isfile(egg_link): + return True + return False + + +def get_installed_distributions( + local_only=True, # type: bool + skip=stdlib_pkgs, # type: Container[str] + include_editables=True, # type: bool + editables_only=False, # type: bool + user_only=False, # type: bool + paths=None # type: Optional[List[str]] +): + # type: (...) -> List[Distribution] + """ + Return a list of installed Distribution objects. + + If ``local_only`` is True (default), only return installations + local to the current virtualenv, if in a virtualenv. + + ``skip`` argument is an iterable of lower-case project names to + ignore; defaults to stdlib_pkgs + + If ``include_editables`` is False, don't report editables. + + If ``editables_only`` is True , only report editables. + + If ``user_only`` is True , only report installations in the user + site directory. + + If ``paths`` is set, only report the distributions present at the + specified list of locations. + """ + if paths: + working_set = pkg_resources.WorkingSet(paths) + else: + working_set = pkg_resources.working_set + + if local_only: + local_test = dist_is_local + else: + def local_test(d): + return True + + if include_editables: + def editable_test(d): + return True + else: + def editable_test(d): + return not dist_is_editable(d) + + if editables_only: + def editables_only_test(d): + return dist_is_editable(d) + else: + def editables_only_test(d): + return True + + if user_only: + user_test = dist_in_usersite + else: + def user_test(d): + return True + + # because of pkg_resources vendoring, mypy cannot find stub in typeshed + return [d for d in working_set # type: ignore + if local_test(d) and + d.key not in skip and + editable_test(d) and + editables_only_test(d) and + user_test(d) + ] + + +def egg_link_path(dist): + # type: (Distribution) -> Optional[str] + """ + Return the path for the .egg-link file if it exists, otherwise, None. + + There's 3 scenarios: + 1) not in a virtualenv + try to find in site.USER_SITE, then site_packages + 2) in a no-global virtualenv + try to find in site_packages + 3) in a yes-global virtualenv + try to find in site_packages, then site.USER_SITE + (don't look in global location) + + For #1 and #3, there could be odd cases, where there's an egg-link in 2 + locations. + + This method will just return the first one found. + """ + sites = [] + if running_under_virtualenv(): + sites.append(site_packages) + if not virtualenv_no_global() and user_site: + sites.append(user_site) + else: + if user_site: + sites.append(user_site) + sites.append(site_packages) + + for site in sites: + egglink = os.path.join(site, dist.project_name) + '.egg-link' + if os.path.isfile(egglink): + return egglink + return None + + +def dist_location(dist): + # type: (Distribution) -> str + """ + Get the site-packages location of this distribution. Generally + this is dist.location, except in the case of develop-installed + packages, where dist.location is the source code location, and we + want to know where the egg-link file is. + + The returned location is normalized (in particular, with symlinks removed). + """ + egg_link = egg_link_path(dist) + if egg_link: + return normalize_path(egg_link) + return normalize_path(dist.location) + + +def write_output(msg, *args): + # type: (str, str) -> None + logger.info(msg, *args) + + +def _make_build_dir(build_dir): + os.makedirs(build_dir) + write_delete_marker_file(build_dir) + + +class FakeFile(object): + """Wrap a list of lines in an object with readline() to make + ConfigParser happy.""" + def __init__(self, lines): + self._gen = (l for l in lines) + + def readline(self): + try: + try: + return next(self._gen) + except NameError: + return self._gen.next() + except StopIteration: + return '' + + def __iter__(self): + return self._gen + + +class StreamWrapper(StringIO): + + @classmethod + def from_stream(cls, orig_stream): + cls.orig_stream = orig_stream + return cls() + + # compileall.compile_dir() needs stdout.encoding to print to stdout + @property + def encoding(self): + return self.orig_stream.encoding + + +@contextlib.contextmanager +def captured_output(stream_name): + """Return a context manager used by captured_stdout/stdin/stderr + that temporarily replaces the sys stream *stream_name* with a StringIO. + + Taken from Lib/support/__init__.py in the CPython repo. + """ + orig_stdout = getattr(sys, stream_name) + setattr(sys, stream_name, StreamWrapper.from_stream(orig_stdout)) + try: + yield getattr(sys, stream_name) + finally: + setattr(sys, stream_name, orig_stdout) + + +def captured_stdout(): + """Capture the output of sys.stdout: + + with captured_stdout() as stdout: + print('hello') + self.assertEqual(stdout.getvalue(), 'hello\n') + + Taken from Lib/support/__init__.py in the CPython repo. + """ + return captured_output('stdout') + + +def captured_stderr(): + """ + See captured_stdout(). + """ + return captured_output('stderr') + + +class cached_property(object): + """A property that is only computed once per instance and then replaces + itself with an ordinary attribute. Deleting the attribute resets the + property. + + Source: https://github.com/bottlepy/bottle/blob/0.11.5/bottle.py#L175 + """ + + def __init__(self, func): + self.__doc__ = getattr(func, '__doc__') + self.func = func + + def __get__(self, obj, cls): + if obj is None: + # We're being accessed from the class itself, not from an object + return self + value = obj.__dict__[self.func.__name__] = self.func(obj) + return value + + +def get_installed_version(dist_name, working_set=None): + """Get the installed version of dist_name avoiding pkg_resources cache""" + # Create a requirement that we'll look for inside of setuptools. + req = pkg_resources.Requirement.parse(dist_name) + + if working_set is None: + # We want to avoid having this cached, so we need to construct a new + # working set each time. + working_set = pkg_resources.WorkingSet() + + # Get the installed distribution from our working set + dist = working_set.find(req) + + # Check to see if we got an installed distribution or not, if we did + # we want to return it's version. + return dist.version if dist else None + + +def consume(iterator): + """Consume an iterable at C speed.""" + deque(iterator, maxlen=0) + + +# Simulates an enum +def enum(*sequential, **named): + enums = dict(zip(sequential, range(len(sequential))), **named) + reverse = {value: key for key, value in enums.items()} + enums['reverse_mapping'] = reverse + return type('Enum', (), enums) + + +def build_netloc(host, port): + # type: (str, Optional[int]) -> str + """ + Build a netloc from a host-port pair + """ + if port is None: + return host + if ':' in host: + # Only wrap host with square brackets when it is IPv6 + host = '[{}]'.format(host) + return '{}:{}'.format(host, port) + + +def build_url_from_netloc(netloc, scheme='https'): + # type: (str, str) -> str + """ + Build a full URL from a netloc. + """ + if netloc.count(':') >= 2 and '@' not in netloc and '[' not in netloc: + # It must be a bare IPv6 address, so wrap it with brackets. + netloc = '[{}]'.format(netloc) + return '{}://{}'.format(scheme, netloc) + + +def parse_netloc(netloc): + # type: (str) -> Tuple[str, Optional[int]] + """ + Return the host-port pair from a netloc. + """ + url = build_url_from_netloc(netloc) + parsed = urllib_parse.urlparse(url) + return parsed.hostname, parsed.port + + +def split_auth_from_netloc(netloc): + """ + Parse out and remove the auth information from a netloc. + + Returns: (netloc, (username, password)). + """ + if '@' not in netloc: + return netloc, (None, None) + + # Split from the right because that's how urllib.parse.urlsplit() + # behaves if more than one @ is present (which can be checked using + # the password attribute of urlsplit()'s return value). + auth, netloc = netloc.rsplit('@', 1) + if ':' in auth: + # Split from the left because that's how urllib.parse.urlsplit() + # behaves if more than one : is present (which again can be checked + # using the password attribute of the return value) + user_pass = auth.split(':', 1) + else: + user_pass = auth, None + + user_pass = tuple( + None if x is None else urllib_unquote(x) for x in user_pass + ) + + return netloc, user_pass + + +def redact_netloc(netloc): + # type: (str) -> str + """ + Replace the sensitive data in a netloc with "****", if it exists. + + For example: + - "user:pass@example.com" returns "user:****@example.com" + - "accesstoken@example.com" returns "****@example.com" + """ + netloc, (user, password) = split_auth_from_netloc(netloc) + if user is None: + return netloc + if password is None: + user = '****' + password = '' + else: + user = urllib_parse.quote(user) + password = ':****' + return '{user}{password}@{netloc}'.format(user=user, + password=password, + netloc=netloc) + + +def _transform_url(url, transform_netloc): + """Transform and replace netloc in a url. + + transform_netloc is a function taking the netloc and returning a + tuple. The first element of this tuple is the new netloc. The + entire tuple is returned. + + Returns a tuple containing the transformed url as item 0 and the + original tuple returned by transform_netloc as item 1. + """ + purl = urllib_parse.urlsplit(url) + netloc_tuple = transform_netloc(purl.netloc) + # stripped url + url_pieces = ( + purl.scheme, netloc_tuple[0], purl.path, purl.query, purl.fragment + ) + surl = urllib_parse.urlunsplit(url_pieces) + return surl, netloc_tuple + + +def _get_netloc(netloc): + return split_auth_from_netloc(netloc) + + +def _redact_netloc(netloc): + return (redact_netloc(netloc),) + + +def split_auth_netloc_from_url(url): + # type: (str) -> Tuple[str, str, Tuple[str, str]] + """ + Parse a url into separate netloc, auth, and url with no auth. + + Returns: (url_without_auth, netloc, (username, password)) + """ + url_without_auth, (netloc, auth) = _transform_url(url, _get_netloc) + return url_without_auth, netloc, auth + + +def remove_auth_from_url(url): + # type: (str) -> str + """Return a copy of url with 'username:password@' removed.""" + # username/pass params are passed to subversion through flags + # and are not recognized in the url. + return _transform_url(url, _get_netloc)[0] + + +def redact_auth_from_url(url): + # type: (str) -> str + """Replace the password in a given url with ****.""" + return _transform_url(url, _redact_netloc)[0] + + +class HiddenText(object): + def __init__( + self, + secret, # type: str + redacted, # type: str + ): + # type: (...) -> None + self.secret = secret + self.redacted = redacted + + def __repr__(self): + # type: (...) -> str + return ''.format(str(self)) + + def __str__(self): + # type: (...) -> str + return self.redacted + + # This is useful for testing. + def __eq__(self, other): + # type: (Any) -> bool + if type(self) != type(other): + return False + + # The string being used for redaction doesn't also have to match, + # just the raw, original string. + return (self.secret == other.secret) + + # We need to provide an explicit __ne__ implementation for Python 2. + # TODO: remove this when we drop PY2 support. + def __ne__(self, other): + # type: (Any) -> bool + return not self == other + + +def hide_value(value): + # type: (str) -> HiddenText + return HiddenText(value, redacted='****') + + +def hide_url(url): + # type: (str) -> HiddenText + redacted = redact_auth_from_url(url) + return HiddenText(url, redacted=redacted) + + +def protect_pip_from_modification_on_windows(modifying_pip): + # type: (bool) -> None + """Protection of pip.exe from modification on Windows + + On Windows, any operation modifying pip should be run as: + python -m pip ... + """ + pip_names = set() + for ext in ('', '.exe'): + pip_names.add('pip{ext}'.format(ext=ext)) + pip_names.add('pip{}{ext}'.format(sys.version_info[0], ext=ext)) + pip_names.add('pip{}.{}{ext}'.format(*sys.version_info[:2], ext=ext)) + + # See https://github.com/pypa/pip/issues/1299 for more discussion + should_show_use_python_msg = ( + modifying_pip and + WINDOWS and + os.path.basename(sys.argv[0]) in pip_names + ) + + if should_show_use_python_msg: + new_command = [ + sys.executable, "-m", "pip" + ] + sys.argv[1:] + raise CommandError( + 'To modify pip, please run the following command:\n{}' + .format(" ".join(new_command)) + ) + + +def is_console_interactive(): + # type: () -> bool + """Is this console interactive? + """ + return sys.stdin is not None and sys.stdin.isatty() diff --git a/my_env/Lib/site-packages/pip/_internal/utils/models.py b/my_env/Lib/site-packages/pip/_internal/utils/models.py new file mode 100644 index 000000000..29e144115 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/models.py @@ -0,0 +1,42 @@ +"""Utilities for defining models +""" +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +import operator + + +class KeyBasedCompareMixin(object): + """Provides comparison capabilities that is based on a key + """ + + def __init__(self, key, defining_class): + self._compare_key = key + self._defining_class = defining_class + + def __hash__(self): + return hash(self._compare_key) + + def __lt__(self, other): + return self._compare(other, operator.__lt__) + + def __le__(self, other): + return self._compare(other, operator.__le__) + + def __gt__(self, other): + return self._compare(other, operator.__gt__) + + def __ge__(self, other): + return self._compare(other, operator.__ge__) + + def __eq__(self, other): + return self._compare(other, operator.__eq__) + + def __ne__(self, other): + return self._compare(other, operator.__ne__) + + def _compare(self, other, method): + if not isinstance(other, self._defining_class): + return NotImplemented + + return method(self._compare_key, other._compare_key) diff --git a/my_env/Lib/site-packages/pip/_internal/utils/packaging.py b/my_env/Lib/site-packages/pip/_internal/utils/packaging.py new file mode 100644 index 000000000..68aa86edb --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/packaging.py @@ -0,0 +1,94 @@ +from __future__ import absolute_import + +import logging +from email.parser import FeedParser + +from pip._vendor import pkg_resources +from pip._vendor.packaging import specifiers, version + +from pip._internal.exceptions import NoneMetadataError +from pip._internal.utils.misc import display_path +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional, Tuple + from email.message import Message + from pip._vendor.pkg_resources import Distribution + + +logger = logging.getLogger(__name__) + + +def check_requires_python(requires_python, version_info): + # type: (Optional[str], Tuple[int, ...]) -> bool + """ + Check if the given Python version matches a "Requires-Python" specifier. + + :param version_info: A 3-tuple of ints representing a Python + major-minor-micro version to check (e.g. `sys.version_info[:3]`). + + :return: `True` if the given Python version satisfies the requirement. + Otherwise, return `False`. + + :raises InvalidSpecifier: If `requires_python` has an invalid format. + """ + if requires_python is None: + # The package provides no information + return True + requires_python_specifier = specifiers.SpecifierSet(requires_python) + + python_version = version.parse('.'.join(map(str, version_info))) + return python_version in requires_python_specifier + + +def get_metadata(dist): + # type: (Distribution) -> Message + """ + :raises NoneMetadataError: if the distribution reports `has_metadata()` + True but `get_metadata()` returns None. + """ + metadata_name = 'METADATA' + if (isinstance(dist, pkg_resources.DistInfoDistribution) and + dist.has_metadata(metadata_name)): + metadata = dist.get_metadata(metadata_name) + elif dist.has_metadata('PKG-INFO'): + metadata_name = 'PKG-INFO' + metadata = dist.get_metadata(metadata_name) + else: + logger.warning("No metadata found in %s", display_path(dist.location)) + metadata = '' + + if metadata is None: + raise NoneMetadataError(dist, metadata_name) + + feed_parser = FeedParser() + # The following line errors out if with a "NoneType" TypeError if + # passed metadata=None. + feed_parser.feed(metadata) + return feed_parser.close() + + +def get_requires_python(dist): + # type: (pkg_resources.Distribution) -> Optional[str] + """ + Return the "Requires-Python" metadata for a distribution, or None + if not present. + """ + pkg_info_dict = get_metadata(dist) + requires_python = pkg_info_dict.get('Requires-Python') + + if requires_python is not None: + # Convert to a str to satisfy the type checker, since requires_python + # can be a Header object. + requires_python = str(requires_python) + + return requires_python + + +def get_installer(dist): + # type: (Distribution) -> str + if dist.has_metadata('INSTALLER'): + for line in dist.get_metadata_lines('INSTALLER'): + if line.strip(): + return line.strip() + return '' diff --git a/my_env/Lib/site-packages/pip/_internal/utils/setuptools_build.py b/my_env/Lib/site-packages/pip/_internal/utils/setuptools_build.py new file mode 100644 index 000000000..12d866e00 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/setuptools_build.py @@ -0,0 +1,47 @@ +import sys + +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import List, Sequence + +# Shim to wrap setup.py invocation with setuptools +# +# We set sys.argv[0] to the path to the underlying setup.py file so +# setuptools / distutils don't take the path to the setup.py to be "-c" when +# invoking via the shim. This avoids e.g. the following manifest_maker +# warning: "warning: manifest_maker: standard file '-c' not found". +_SETUPTOOLS_SHIM = ( + "import sys, setuptools, tokenize; sys.argv[0] = {0!r}; __file__={0!r};" + "f=getattr(tokenize, 'open', open)(__file__);" + "code=f.read().replace('\\r\\n', '\\n');" + "f.close();" + "exec(compile(code, __file__, 'exec'))" +) + + +def make_setuptools_shim_args( + setup_py_path, # type: str + global_options=None, # type: Sequence[str] + no_user_config=False, # type: bool + unbuffered_output=False # type: bool +): + # type: (...) -> List[str] + """ + Get setuptools command arguments with shim wrapped setup file invocation. + + :param setup_py_path: The path to setup.py to be wrapped. + :param global_options: Additional global options. + :param no_user_config: If True, disables personal user configuration. + :param unbuffered_output: If True, adds the unbuffered switch to the + argument list. + """ + args = [sys.executable] + if unbuffered_output: + args.append('-u') + args.extend(['-c', _SETUPTOOLS_SHIM.format(setup_py_path)]) + if global_options: + args.extend(global_options) + if no_user_config: + args.append('--no-user-cfg') + return args diff --git a/my_env/Lib/site-packages/pip/_internal/utils/subprocess.py b/my_env/Lib/site-packages/pip/_internal/utils/subprocess.py new file mode 100644 index 000000000..2a0c5d1a6 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/subprocess.py @@ -0,0 +1,278 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +from __future__ import absolute_import + +import logging +import os +import subprocess + +from pip._vendor.six.moves import shlex_quote + +from pip._internal.exceptions import InstallationError +from pip._internal.utils.compat import console_to_str, str_to_display +from pip._internal.utils.logging import subprocess_logger +from pip._internal.utils.misc import HiddenText, path_to_display +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.ui import open_spinner + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, Callable, Iterable, List, Mapping, Optional, Text, Union, + ) + from pip._internal.utils.ui import SpinnerInterface + + CommandArgs = List[Union[str, HiddenText]] + + +LOG_DIVIDER = '----------------------------------------' + + +def make_command(*args): + # type: (Union[str, HiddenText, CommandArgs]) -> CommandArgs + """ + Create a CommandArgs object. + """ + command_args = [] # type: CommandArgs + for arg in args: + # Check for list instead of CommandArgs since CommandArgs is + # only known during type-checking. + if isinstance(arg, list): + command_args.extend(arg) + else: + # Otherwise, arg is str or HiddenText. + command_args.append(arg) + + return command_args + + +def format_command_args(args): + # type: (Union[List[str], CommandArgs]) -> str + """ + Format command arguments for display. + """ + # For HiddenText arguments, display the redacted form by calling str(). + # Also, we don't apply str() to arguments that aren't HiddenText since + # this can trigger a UnicodeDecodeError in Python 2 if the argument + # has type unicode and includes a non-ascii character. (The type + # checker doesn't ensure the annotations are correct in all cases.) + return ' '.join( + shlex_quote(str(arg)) if isinstance(arg, HiddenText) + else shlex_quote(arg) for arg in args + ) + + +def reveal_command_args(args): + # type: (Union[List[str], CommandArgs]) -> List[str] + """ + Return the arguments in their raw, unredacted form. + """ + return [ + arg.secret if isinstance(arg, HiddenText) else arg for arg in args + ] + + +def make_subprocess_output_error( + cmd_args, # type: Union[List[str], CommandArgs] + cwd, # type: Optional[str] + lines, # type: List[Text] + exit_status, # type: int +): + # type: (...) -> Text + """ + Create and return the error message to use to log a subprocess error + with command output. + + :param lines: A list of lines, each ending with a newline. + """ + command = format_command_args(cmd_args) + # Convert `command` and `cwd` to text (unicode in Python 2) so we can use + # them as arguments in the unicode format string below. This avoids + # "UnicodeDecodeError: 'ascii' codec can't decode byte ..." in Python 2 + # if either contains a non-ascii character. + command_display = str_to_display(command, desc='command bytes') + cwd_display = path_to_display(cwd) + + # We know the joined output value ends in a newline. + output = ''.join(lines) + msg = ( + # Use a unicode string to avoid "UnicodeEncodeError: 'ascii' + # codec can't encode character ..." in Python 2 when a format + # argument (e.g. `output`) has a non-ascii character. + u'Command errored out with exit status {exit_status}:\n' + ' command: {command_display}\n' + ' cwd: {cwd_display}\n' + 'Complete output ({line_count} lines):\n{output}{divider}' + ).format( + exit_status=exit_status, + command_display=command_display, + cwd_display=cwd_display, + line_count=len(lines), + output=output, + divider=LOG_DIVIDER, + ) + return msg + + +def call_subprocess( + cmd, # type: Union[List[str], CommandArgs] + show_stdout=False, # type: bool + cwd=None, # type: Optional[str] + on_returncode='raise', # type: str + extra_ok_returncodes=None, # type: Optional[Iterable[int]] + command_desc=None, # type: Optional[str] + extra_environ=None, # type: Optional[Mapping[str, Any]] + unset_environ=None, # type: Optional[Iterable[str]] + spinner=None, # type: Optional[SpinnerInterface] + log_failed_cmd=True # type: Optional[bool] +): + # type: (...) -> Text + """ + Args: + show_stdout: if true, use INFO to log the subprocess's stderr and + stdout streams. Otherwise, use DEBUG. Defaults to False. + extra_ok_returncodes: an iterable of integer return codes that are + acceptable, in addition to 0. Defaults to None, which means []. + unset_environ: an iterable of environment variable names to unset + prior to calling subprocess.Popen(). + log_failed_cmd: if false, failed commands are not logged, only raised. + """ + if extra_ok_returncodes is None: + extra_ok_returncodes = [] + if unset_environ is None: + unset_environ = [] + # Most places in pip use show_stdout=False. What this means is-- + # + # - We connect the child's output (combined stderr and stdout) to a + # single pipe, which we read. + # - We log this output to stderr at DEBUG level as it is received. + # - If DEBUG logging isn't enabled (e.g. if --verbose logging wasn't + # requested), then we show a spinner so the user can still see the + # subprocess is in progress. + # - If the subprocess exits with an error, we log the output to stderr + # at ERROR level if it hasn't already been displayed to the console + # (e.g. if --verbose logging wasn't enabled). This way we don't log + # the output to the console twice. + # + # If show_stdout=True, then the above is still done, but with DEBUG + # replaced by INFO. + if show_stdout: + # Then log the subprocess output at INFO level. + log_subprocess = subprocess_logger.info + used_level = logging.INFO + else: + # Then log the subprocess output using DEBUG. This also ensures + # it will be logged to the log file (aka user_log), if enabled. + log_subprocess = subprocess_logger.debug + used_level = logging.DEBUG + + # Whether the subprocess will be visible in the console. + showing_subprocess = subprocess_logger.getEffectiveLevel() <= used_level + + # Only use the spinner if we're not showing the subprocess output + # and we have a spinner. + use_spinner = not showing_subprocess and spinner is not None + + if command_desc is None: + command_desc = format_command_args(cmd) + + log_subprocess("Running command %s", command_desc) + env = os.environ.copy() + if extra_environ: + env.update(extra_environ) + for name in unset_environ: + env.pop(name, None) + try: + proc = subprocess.Popen( + # Convert HiddenText objects to the underlying str. + reveal_command_args(cmd), + stderr=subprocess.STDOUT, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, cwd=cwd, env=env, + ) + proc.stdin.close() + except Exception as exc: + if log_failed_cmd: + subprocess_logger.critical( + "Error %s while executing command %s", exc, command_desc, + ) + raise + all_output = [] + while True: + # The "line" value is a unicode string in Python 2. + line = console_to_str(proc.stdout.readline()) + if not line: + break + line = line.rstrip() + all_output.append(line + '\n') + + # Show the line immediately. + log_subprocess(line) + # Update the spinner. + if use_spinner: + spinner.spin() + try: + proc.wait() + finally: + if proc.stdout: + proc.stdout.close() + proc_had_error = ( + proc.returncode and proc.returncode not in extra_ok_returncodes + ) + if use_spinner: + if proc_had_error: + spinner.finish("error") + else: + spinner.finish("done") + if proc_had_error: + if on_returncode == 'raise': + if not showing_subprocess and log_failed_cmd: + # Then the subprocess streams haven't been logged to the + # console yet. + msg = make_subprocess_output_error( + cmd_args=cmd, + cwd=cwd, + lines=all_output, + exit_status=proc.returncode, + ) + subprocess_logger.error(msg) + exc_msg = ( + 'Command errored out with exit status {}: {} ' + 'Check the logs for full command output.' + ).format(proc.returncode, command_desc) + raise InstallationError(exc_msg) + elif on_returncode == 'warn': + subprocess_logger.warning( + 'Command "%s" had error code %s in %s', + command_desc, proc.returncode, cwd, + ) + elif on_returncode == 'ignore': + pass + else: + raise ValueError('Invalid value: on_returncode=%s' % + repr(on_returncode)) + return ''.join(all_output) + + +def runner_with_spinner_message(message): + # type: (str) -> Callable + """Provide a subprocess_runner that shows a spinner message. + + Intended for use with for pep517's Pep517HookCaller. Thus, the runner has + an API that matches what's expected by Pep517HookCaller.subprocess_runner. + """ + + def runner( + cmd, # type: List[str] + cwd=None, # type: Optional[str] + extra_environ=None # type: Optional[Mapping[str, Any]] + ): + # type: (...) -> None + with open_spinner(message) as spinner: + call_subprocess( + cmd, + cwd=cwd, + extra_environ=extra_environ, + spinner=spinner, + ) + + return runner diff --git a/my_env/Lib/site-packages/pip/_internal/utils/temp_dir.py b/my_env/Lib/site-packages/pip/_internal/utils/temp_dir.py new file mode 100644 index 000000000..77d40be6d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/temp_dir.py @@ -0,0 +1,172 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import errno +import itertools +import logging +import os.path +import tempfile + +from pip._internal.utils.misc import rmtree +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional + + +logger = logging.getLogger(__name__) + + +class TempDirectory(object): + """Helper class that owns and cleans up a temporary directory. + + This class can be used as a context manager or as an OO representation of a + temporary directory. + + Attributes: + path + Location to the created temporary directory + delete + Whether the directory should be deleted when exiting + (when used as a contextmanager) + + Methods: + cleanup() + Deletes the temporary directory + + When used as a context manager, if the delete attribute is True, on + exiting the context the temporary directory is deleted. + """ + + def __init__( + self, + path=None, # type: Optional[str] + delete=None, # type: Optional[bool] + kind="temp" + ): + super(TempDirectory, self).__init__() + + if path is None and delete is None: + # If we were not given an explicit directory, and we were not given + # an explicit delete option, then we'll default to deleting. + delete = True + + if path is None: + path = self._create(kind) + + self._path = path + self._deleted = False + self.delete = delete + self.kind = kind + + @property + def path(self): + # type: () -> str + assert not self._deleted, ( + "Attempted to access deleted path: {}".format(self._path) + ) + return self._path + + def __repr__(self): + return "<{} {!r}>".format(self.__class__.__name__, self.path) + + def __enter__(self): + return self + + def __exit__(self, exc, value, tb): + if self.delete: + self.cleanup() + + def _create(self, kind): + """Create a temporary directory and store its path in self.path + """ + # We realpath here because some systems have their default tmpdir + # symlinked to another directory. This tends to confuse build + # scripts, so we canonicalize the path by traversing potential + # symlinks here. + path = os.path.realpath( + tempfile.mkdtemp(prefix="pip-{}-".format(kind)) + ) + logger.debug("Created temporary directory: {}".format(path)) + return path + + def cleanup(self): + """Remove the temporary directory created and reset state + """ + self._deleted = True + if os.path.exists(self._path): + rmtree(self._path) + + +class AdjacentTempDirectory(TempDirectory): + """Helper class that creates a temporary directory adjacent to a real one. + + Attributes: + original + The original directory to create a temp directory for. + path + After calling create() or entering, contains the full + path to the temporary directory. + delete + Whether the directory should be deleted when exiting + (when used as a contextmanager) + + """ + # The characters that may be used to name the temp directory + # We always prepend a ~ and then rotate through these until + # a usable name is found. + # pkg_resources raises a different error for .dist-info folder + # with leading '-' and invalid metadata + LEADING_CHARS = "-~.=%0123456789" + + def __init__(self, original, delete=None): + self.original = original.rstrip('/\\') + super(AdjacentTempDirectory, self).__init__(delete=delete) + + @classmethod + def _generate_names(cls, name): + """Generates a series of temporary names. + + The algorithm replaces the leading characters in the name + with ones that are valid filesystem characters, but are not + valid package names (for both Python and pip definitions of + package). + """ + for i in range(1, len(name)): + for candidate in itertools.combinations_with_replacement( + cls.LEADING_CHARS, i - 1): + new_name = '~' + ''.join(candidate) + name[i:] + if new_name != name: + yield new_name + + # If we make it this far, we will have to make a longer name + for i in range(len(cls.LEADING_CHARS)): + for candidate in itertools.combinations_with_replacement( + cls.LEADING_CHARS, i): + new_name = '~' + ''.join(candidate) + name + if new_name != name: + yield new_name + + def _create(self, kind): + root, name = os.path.split(self.original) + for candidate in self._generate_names(name): + path = os.path.join(root, candidate) + try: + os.mkdir(path) + except OSError as ex: + # Continue if the name exists already + if ex.errno != errno.EEXIST: + raise + else: + path = os.path.realpath(path) + break + else: + # Final fallback on the default behavior. + path = os.path.realpath( + tempfile.mkdtemp(prefix="pip-{}-".format(kind)) + ) + + logger.debug("Created temporary directory: {}".format(path)) + return path diff --git a/my_env/Lib/site-packages/pip/_internal/utils/typing.py b/my_env/Lib/site-packages/pip/_internal/utils/typing.py new file mode 100644 index 000000000..10170ce29 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/typing.py @@ -0,0 +1,29 @@ +"""For neatly implementing static typing in pip. + +`mypy` - the static type analysis tool we use - uses the `typing` module, which +provides core functionality fundamental to mypy's functioning. + +Generally, `typing` would be imported at runtime and used in that fashion - +it acts as a no-op at runtime and does not have any run-time overhead by +design. + +As it turns out, `typing` is not vendorable - it uses separate sources for +Python 2/Python 3. Thus, this codebase can not expect it to be present. +To work around this, mypy allows the typing import to be behind a False-y +optional to prevent it from running at runtime and type-comments can be used +to remove the need for the types to be accessible directly during runtime. + +This module provides the False-y guard in a nicely named fashion so that a +curious maintainer can reach here to read this. + +In pip, all static-typing related imports should be guarded as follows: + + from pip._internal.utils.typing import MYPY_CHECK_RUNNING + + if MYPY_CHECK_RUNNING: + from typing import ... + +Ref: https://github.com/python/mypy/issues/3216 +""" + +MYPY_CHECK_RUNNING = False diff --git a/my_env/Lib/site-packages/pip/_internal/utils/ui.py b/my_env/Lib/site-packages/pip/_internal/utils/ui.py new file mode 100644 index 000000000..f96ab54d0 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/ui.py @@ -0,0 +1,428 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import, division + +import contextlib +import itertools +import logging +import sys +import time +from signal import SIGINT, default_int_handler, signal + +from pip._vendor import six +from pip._vendor.progress import HIDE_CURSOR, SHOW_CURSOR +from pip._vendor.progress.bar import Bar, FillingCirclesBar, IncrementalBar +from pip._vendor.progress.spinner import Spinner + +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.logging import get_indentation +from pip._internal.utils.misc import format_size +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Any, Iterator, IO + +try: + from pip._vendor import colorama +# Lots of different errors can come from this, including SystemError and +# ImportError. +except Exception: + colorama = None + +logger = logging.getLogger(__name__) + + +def _select_progress_class(preferred, fallback): + encoding = getattr(preferred.file, "encoding", None) + + # If we don't know what encoding this file is in, then we'll just assume + # that it doesn't support unicode and use the ASCII bar. + if not encoding: + return fallback + + # Collect all of the possible characters we want to use with the preferred + # bar. + characters = [ + getattr(preferred, "empty_fill", six.text_type()), + getattr(preferred, "fill", six.text_type()), + ] + characters += list(getattr(preferred, "phases", [])) + + # Try to decode the characters we're using for the bar using the encoding + # of the given file, if this works then we'll assume that we can use the + # fancier bar and if not we'll fall back to the plaintext bar. + try: + six.text_type().join(characters).encode(encoding) + except UnicodeEncodeError: + return fallback + else: + return preferred + + +_BaseBar = _select_progress_class(IncrementalBar, Bar) # type: Any + + +class InterruptibleMixin(object): + """ + Helper to ensure that self.finish() gets called on keyboard interrupt. + + This allows downloads to be interrupted without leaving temporary state + (like hidden cursors) behind. + + This class is similar to the progress library's existing SigIntMixin + helper, but as of version 1.2, that helper has the following problems: + + 1. It calls sys.exit(). + 2. It discards the existing SIGINT handler completely. + 3. It leaves its own handler in place even after an uninterrupted finish, + which will have unexpected delayed effects if the user triggers an + unrelated keyboard interrupt some time after a progress-displaying + download has already completed, for example. + """ + + def __init__(self, *args, **kwargs): + """ + Save the original SIGINT handler for later. + """ + super(InterruptibleMixin, self).__init__(*args, **kwargs) + + self.original_handler = signal(SIGINT, self.handle_sigint) + + # If signal() returns None, the previous handler was not installed from + # Python, and we cannot restore it. This probably should not happen, + # but if it does, we must restore something sensible instead, at least. + # The least bad option should be Python's default SIGINT handler, which + # just raises KeyboardInterrupt. + if self.original_handler is None: + self.original_handler = default_int_handler + + def finish(self): + """ + Restore the original SIGINT handler after finishing. + + This should happen regardless of whether the progress display finishes + normally, or gets interrupted. + """ + super(InterruptibleMixin, self).finish() + signal(SIGINT, self.original_handler) + + def handle_sigint(self, signum, frame): + """ + Call self.finish() before delegating to the original SIGINT handler. + + This handler should only be in place while the progress display is + active. + """ + self.finish() + self.original_handler(signum, frame) + + +class SilentBar(Bar): + + def update(self): + pass + + +class BlueEmojiBar(IncrementalBar): + + suffix = "%(percent)d%%" + bar_prefix = " " + bar_suffix = " " + phases = (u"\U0001F539", u"\U0001F537", u"\U0001F535") # type: Any + + +class DownloadProgressMixin(object): + + def __init__(self, *args, **kwargs): + super(DownloadProgressMixin, self).__init__(*args, **kwargs) + self.message = (" " * (get_indentation() + 2)) + self.message + + @property + def downloaded(self): + return format_size(self.index) + + @property + def download_speed(self): + # Avoid zero division errors... + if self.avg == 0.0: + return "..." + return format_size(1 / self.avg) + "/s" + + @property + def pretty_eta(self): + if self.eta: + return "eta %s" % self.eta_td + return "" + + def iter(self, it, n=1): + for x in it: + yield x + self.next(n) + self.finish() + + +class WindowsMixin(object): + + def __init__(self, *args, **kwargs): + # The Windows terminal does not support the hide/show cursor ANSI codes + # even with colorama. So we'll ensure that hide_cursor is False on + # Windows. + # This call needs to go before the super() call, so that hide_cursor + # is set in time. The base progress bar class writes the "hide cursor" + # code to the terminal in its init, so if we don't set this soon + # enough, we get a "hide" with no corresponding "show"... + if WINDOWS and self.hide_cursor: + self.hide_cursor = False + + super(WindowsMixin, self).__init__(*args, **kwargs) + + # Check if we are running on Windows and we have the colorama module, + # if we do then wrap our file with it. + if WINDOWS and colorama: + self.file = colorama.AnsiToWin32(self.file) + # The progress code expects to be able to call self.file.isatty() + # but the colorama.AnsiToWin32() object doesn't have that, so we'll + # add it. + self.file.isatty = lambda: self.file.wrapped.isatty() + # The progress code expects to be able to call self.file.flush() + # but the colorama.AnsiToWin32() object doesn't have that, so we'll + # add it. + self.file.flush = lambda: self.file.wrapped.flush() + + +class BaseDownloadProgressBar(WindowsMixin, InterruptibleMixin, + DownloadProgressMixin): + + file = sys.stdout + message = "%(percent)d%%" + suffix = "%(downloaded)s %(download_speed)s %(pretty_eta)s" + +# NOTE: The "type: ignore" comments on the following classes are there to +# work around https://github.com/python/typing/issues/241 + + +class DefaultDownloadProgressBar(BaseDownloadProgressBar, + _BaseBar): + pass + + +class DownloadSilentBar(BaseDownloadProgressBar, SilentBar): # type: ignore + pass + + +class DownloadBar(BaseDownloadProgressBar, # type: ignore + Bar): + pass + + +class DownloadFillingCirclesBar(BaseDownloadProgressBar, # type: ignore + FillingCirclesBar): + pass + + +class DownloadBlueEmojiProgressBar(BaseDownloadProgressBar, # type: ignore + BlueEmojiBar): + pass + + +class DownloadProgressSpinner(WindowsMixin, InterruptibleMixin, + DownloadProgressMixin, Spinner): + + file = sys.stdout + suffix = "%(downloaded)s %(download_speed)s" + + def next_phase(self): + if not hasattr(self, "_phaser"): + self._phaser = itertools.cycle(self.phases) + return next(self._phaser) + + def update(self): + message = self.message % self + phase = self.next_phase() + suffix = self.suffix % self + line = ''.join([ + message, + " " if message else "", + phase, + " " if suffix else "", + suffix, + ]) + + self.writeln(line) + + +BAR_TYPES = { + "off": (DownloadSilentBar, DownloadSilentBar), + "on": (DefaultDownloadProgressBar, DownloadProgressSpinner), + "ascii": (DownloadBar, DownloadProgressSpinner), + "pretty": (DownloadFillingCirclesBar, DownloadProgressSpinner), + "emoji": (DownloadBlueEmojiProgressBar, DownloadProgressSpinner) +} + + +def DownloadProgressProvider(progress_bar, max=None): + if max is None or max == 0: + return BAR_TYPES[progress_bar][1]().iter + else: + return BAR_TYPES[progress_bar][0](max=max).iter + + +################################################################ +# Generic "something is happening" spinners +# +# We don't even try using progress.spinner.Spinner here because it's actually +# simpler to reimplement from scratch than to coerce their code into doing +# what we need. +################################################################ + +@contextlib.contextmanager +def hidden_cursor(file): + # type: (IO) -> Iterator[None] + # The Windows terminal does not support the hide/show cursor ANSI codes, + # even via colorama. So don't even try. + if WINDOWS: + yield + # We don't want to clutter the output with control characters if we're + # writing to a file, or if the user is running with --quiet. + # See https://github.com/pypa/pip/issues/3418 + elif not file.isatty() or logger.getEffectiveLevel() > logging.INFO: + yield + else: + file.write(HIDE_CURSOR) + try: + yield + finally: + file.write(SHOW_CURSOR) + + +class RateLimiter(object): + def __init__(self, min_update_interval_seconds): + # type: (float) -> None + self._min_update_interval_seconds = min_update_interval_seconds + self._last_update = 0 # type: float + + def ready(self): + # type: () -> bool + now = time.time() + delta = now - self._last_update + return delta >= self._min_update_interval_seconds + + def reset(self): + # type: () -> None + self._last_update = time.time() + + +class SpinnerInterface(object): + def spin(self): + # type: () -> None + raise NotImplementedError() + + def finish(self, final_status): + # type: (str) -> None + raise NotImplementedError() + + +class InteractiveSpinner(SpinnerInterface): + def __init__(self, message, file=None, spin_chars="-\\|/", + # Empirically, 8 updates/second looks nice + min_update_interval_seconds=0.125): + self._message = message + if file is None: + file = sys.stdout + self._file = file + self._rate_limiter = RateLimiter(min_update_interval_seconds) + self._finished = False + + self._spin_cycle = itertools.cycle(spin_chars) + + self._file.write(" " * get_indentation() + self._message + " ... ") + self._width = 0 + + def _write(self, status): + assert not self._finished + # Erase what we wrote before by backspacing to the beginning, writing + # spaces to overwrite the old text, and then backspacing again + backup = "\b" * self._width + self._file.write(backup + " " * self._width + backup) + # Now we have a blank slate to add our status + self._file.write(status) + self._width = len(status) + self._file.flush() + self._rate_limiter.reset() + + def spin(self): + # type: () -> None + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._write(next(self._spin_cycle)) + + def finish(self, final_status): + # type: (str) -> None + if self._finished: + return + self._write(final_status) + self._file.write("\n") + self._file.flush() + self._finished = True + + +# Used for dumb terminals, non-interactive installs (no tty), etc. +# We still print updates occasionally (once every 60 seconds by default) to +# act as a keep-alive for systems like Travis-CI that take lack-of-output as +# an indication that a task has frozen. +class NonInteractiveSpinner(SpinnerInterface): + def __init__(self, message, min_update_interval_seconds=60): + # type: (str, float) -> None + self._message = message + self._finished = False + self._rate_limiter = RateLimiter(min_update_interval_seconds) + self._update("started") + + def _update(self, status): + assert not self._finished + self._rate_limiter.reset() + logger.info("%s: %s", self._message, status) + + def spin(self): + # type: () -> None + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._update("still running...") + + def finish(self, final_status): + # type: (str) -> None + if self._finished: + return + self._update("finished with status '%s'" % (final_status,)) + self._finished = True + + +@contextlib.contextmanager +def open_spinner(message): + # type: (str) -> Iterator[SpinnerInterface] + # Interactive spinner goes directly to sys.stdout rather than being routed + # through the logging system, but it acts like it has level INFO, + # i.e. it's only displayed if we're at level INFO or better. + # Non-interactive spinner goes through the logging system, so it is always + # in sync with logging configuration. + if sys.stdout.isatty() and logger.getEffectiveLevel() <= logging.INFO: + spinner = InteractiveSpinner(message) # type: SpinnerInterface + else: + spinner = NonInteractiveSpinner(message) + try: + with hidden_cursor(sys.stdout): + yield spinner + except KeyboardInterrupt: + spinner.finish("canceled") + raise + except Exception: + spinner.finish("error") + raise + else: + spinner.finish("done") diff --git a/my_env/Lib/site-packages/pip/_internal/utils/unpacking.py b/my_env/Lib/site-packages/pip/_internal/utils/unpacking.py new file mode 100644 index 000000000..7252dc217 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/unpacking.py @@ -0,0 +1,272 @@ +"""Utilities related archives. +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import logging +import os +import shutil +import stat +import tarfile +import zipfile + +from pip._internal.exceptions import InstallationError +from pip._internal.utils.filetypes import ( + BZ2_EXTENSIONS, + TAR_EXTENSIONS, + XZ_EXTENSIONS, + ZIP_EXTENSIONS, +) +from pip._internal.utils.misc import ensure_dir +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Iterable, List, Optional, Text, Union + + +logger = logging.getLogger(__name__) + + +SUPPORTED_EXTENSIONS = ZIP_EXTENSIONS + TAR_EXTENSIONS + +try: + import bz2 # noqa + SUPPORTED_EXTENSIONS += BZ2_EXTENSIONS +except ImportError: + logger.debug('bz2 module is not available') + +try: + # Only for Python 3.3+ + import lzma # noqa + SUPPORTED_EXTENSIONS += XZ_EXTENSIONS +except ImportError: + logger.debug('lzma module is not available') + + +def current_umask(): + """Get the current umask which involves having to set it temporarily.""" + mask = os.umask(0) + os.umask(mask) + return mask + + +def split_leading_dir(path): + # type: (Union[str, Text]) -> List[Union[str, Text]] + path = path.lstrip('/').lstrip('\\') + if ( + '/' in path and ( + ('\\' in path and path.find('/') < path.find('\\')) or + '\\' not in path + ) + ): + return path.split('/', 1) + elif '\\' in path: + return path.split('\\', 1) + else: + return [path, ''] + + +def has_leading_dir(paths): + # type: (Iterable[Union[str, Text]]) -> bool + """Returns true if all the paths have the same leading path name + (i.e., everything is in one subdirectory in an archive)""" + common_prefix = None + for path in paths: + prefix, rest = split_leading_dir(path) + if not prefix: + return False + elif common_prefix is None: + common_prefix = prefix + elif prefix != common_prefix: + return False + return True + + +def is_within_directory(directory, target): + # type: ((Union[str, Text]), (Union[str, Text])) -> bool + """ + Return true if the absolute path of target is within the directory + """ + abs_directory = os.path.abspath(directory) + abs_target = os.path.abspath(target) + + prefix = os.path.commonprefix([abs_directory, abs_target]) + return prefix == abs_directory + + +def unzip_file(filename, location, flatten=True): + # type: (str, str, bool) -> None + """ + Unzip the file (with path `filename`) to the destination `location`. All + files are written based on system defaults and umask (i.e. permissions are + not preserved), except that regular file members with any execute + permissions (user, group, or world) have "chmod +x" applied after being + written. Note that for windows, any execute changes using os.chmod are + no-ops per the python docs. + """ + ensure_dir(location) + zipfp = open(filename, 'rb') + try: + zip = zipfile.ZipFile(zipfp, allowZip64=True) + leading = has_leading_dir(zip.namelist()) and flatten + for info in zip.infolist(): + name = info.filename + fn = name + if leading: + fn = split_leading_dir(name)[1] + fn = os.path.join(location, fn) + dir = os.path.dirname(fn) + if not is_within_directory(location, fn): + message = ( + 'The zip file ({}) has a file ({}) trying to install ' + 'outside target directory ({})' + ) + raise InstallationError(message.format(filename, fn, location)) + if fn.endswith('/') or fn.endswith('\\'): + # A directory + ensure_dir(fn) + else: + ensure_dir(dir) + # Don't use read() to avoid allocating an arbitrarily large + # chunk of memory for the file's content + fp = zip.open(name) + try: + with open(fn, 'wb') as destfp: + shutil.copyfileobj(fp, destfp) + finally: + fp.close() + mode = info.external_attr >> 16 + # if mode and regular file and any execute permissions for + # user/group/world? + if mode and stat.S_ISREG(mode) and mode & 0o111: + # make dest file have execute for user/group/world + # (chmod +x) no-op on windows per python docs + os.chmod(fn, (0o777 - current_umask() | 0o111)) + finally: + zipfp.close() + + +def untar_file(filename, location): + # type: (str, str) -> None + """ + Untar the file (with path `filename`) to the destination `location`. + All files are written based on system defaults and umask (i.e. permissions + are not preserved), except that regular file members with any execute + permissions (user, group, or world) have "chmod +x" applied after being + written. Note that for windows, any execute changes using os.chmod are + no-ops per the python docs. + """ + ensure_dir(location) + if filename.lower().endswith('.gz') or filename.lower().endswith('.tgz'): + mode = 'r:gz' + elif filename.lower().endswith(BZ2_EXTENSIONS): + mode = 'r:bz2' + elif filename.lower().endswith(XZ_EXTENSIONS): + mode = 'r:xz' + elif filename.lower().endswith('.tar'): + mode = 'r' + else: + logger.warning( + 'Cannot determine compression type for file %s', filename, + ) + mode = 'r:*' + tar = tarfile.open(filename, mode) + try: + leading = has_leading_dir([ + member.name for member in tar.getmembers() + ]) + for member in tar.getmembers(): + fn = member.name + if leading: + # https://github.com/python/mypy/issues/1174 + fn = split_leading_dir(fn)[1] # type: ignore + path = os.path.join(location, fn) + if not is_within_directory(location, path): + message = ( + 'The tar file ({}) has a file ({}) trying to install ' + 'outside target directory ({})' + ) + raise InstallationError( + message.format(filename, path, location) + ) + if member.isdir(): + ensure_dir(path) + elif member.issym(): + try: + # https://github.com/python/typeshed/issues/2673 + tar._extract_member(member, path) # type: ignore + except Exception as exc: + # Some corrupt tar files seem to produce this + # (specifically bad symlinks) + logger.warning( + 'In the tar file %s the member %s is invalid: %s', + filename, member.name, exc, + ) + continue + else: + try: + fp = tar.extractfile(member) + except (KeyError, AttributeError) as exc: + # Some corrupt tar files seem to produce this + # (specifically bad symlinks) + logger.warning( + 'In the tar file %s the member %s is invalid: %s', + filename, member.name, exc, + ) + continue + ensure_dir(os.path.dirname(path)) + with open(path, 'wb') as destfp: + shutil.copyfileobj(fp, destfp) + fp.close() + # Update the timestamp (useful for cython compiled files) + # https://github.com/python/typeshed/issues/2673 + tar.utime(member, path) # type: ignore + # member have any execute permissions for user/group/world? + if member.mode & 0o111: + # make dest file have execute for user/group/world + # no-op on windows per python docs + os.chmod(path, (0o777 - current_umask() | 0o111)) + finally: + tar.close() + + +def unpack_file( + filename, # type: str + location, # type: str + content_type=None, # type: Optional[str] +): + # type: (...) -> None + filename = os.path.realpath(filename) + if ( + content_type == 'application/zip' or + filename.lower().endswith(ZIP_EXTENSIONS) or + zipfile.is_zipfile(filename) + ): + unzip_file( + filename, + location, + flatten=not filename.endswith('.whl') + ) + elif ( + content_type == 'application/x-gzip' or + tarfile.is_tarfile(filename) or + filename.lower().endswith( + TAR_EXTENSIONS + BZ2_EXTENSIONS + XZ_EXTENSIONS + ) + ): + untar_file(filename, location) + else: + # FIXME: handle? + # FIXME: magic signatures? + logger.critical( + 'Cannot unpack file %s (downloaded from %s, content-type: %s); ' + 'cannot detect archive format', + filename, location, content_type, + ) + raise InstallationError( + 'Cannot determine archive format of {}'.format(location) + ) diff --git a/my_env/Lib/site-packages/pip/_internal/utils/urls.py b/my_env/Lib/site-packages/pip/_internal/utils/urls.py new file mode 100644 index 000000000..9ad40feb3 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/urls.py @@ -0,0 +1,54 @@ +import os +import sys + +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib import request as urllib_request + +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional, Text, Union + + +def get_url_scheme(url): + # type: (Union[str, Text]) -> Optional[Text] + if ':' not in url: + return None + return url.split(':', 1)[0].lower() + + +def path_to_url(path): + # type: (Union[str, Text]) -> str + """ + Convert a path to a file: URL. The path will be made absolute and have + quoted path parts. + """ + path = os.path.normpath(os.path.abspath(path)) + url = urllib_parse.urljoin('file:', urllib_request.pathname2url(path)) + return url + + +def url_to_path(url): + # type: (str) -> str + """ + Convert a file: URL to a path. + """ + assert url.startswith('file:'), ( + "You can only turn file: urls into filenames (not %r)" % url) + + _, netloc, path, _, _ = urllib_parse.urlsplit(url) + + if not netloc or netloc == 'localhost': + # According to RFC 8089, same as empty authority. + netloc = '' + elif sys.platform == 'win32': + # If we have a UNC path, prepend UNC share notation. + netloc = '\\\\' + netloc + else: + raise ValueError( + 'non-local file URIs are not supported on this platform: %r' + % url + ) + + path = urllib_request.url2pathname(netloc + path) + return path diff --git a/my_env/Lib/site-packages/pip/_internal/utils/virtualenv.py b/my_env/Lib/site-packages/pip/_internal/utils/virtualenv.py new file mode 100644 index 000000000..380db1c32 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/utils/virtualenv.py @@ -0,0 +1,34 @@ +import os.path +import site +import sys + + +def running_under_virtualenv(): + # type: () -> bool + """ + Return True if we're running inside a virtualenv, False otherwise. + + """ + if hasattr(sys, 'real_prefix'): + # pypa/virtualenv case + return True + elif sys.prefix != getattr(sys, "base_prefix", sys.prefix): + # PEP 405 venv + return True + + return False + + +def virtualenv_no_global(): + # type: () -> bool + """ + Return True if in a venv and no system site packages. + """ + # this mirrors the logic in virtualenv.py for locating the + # no-global-site-packages.txt file + site_mod_dir = os.path.dirname(os.path.abspath(site.__file__)) + no_global_file = os.path.join(site_mod_dir, 'no-global-site-packages.txt') + if running_under_virtualenv() and os.path.isfile(no_global_file): + return True + else: + return False diff --git a/my_env/Lib/site-packages/pip/_internal/vcs/__init__.py b/my_env/Lib/site-packages/pip/_internal/vcs/__init__.py new file mode 100644 index 000000000..2a4eb1375 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/vcs/__init__.py @@ -0,0 +1,15 @@ +# Expose a limited set of classes and functions so callers outside of +# the vcs package don't need to import deeper than `pip._internal.vcs`. +# (The test directory and imports protected by MYPY_CHECK_RUNNING may +# still need to import from a vcs sub-package.) +# Import all vcs modules to register each VCS in the VcsSupport object. +import pip._internal.vcs.bazaar +import pip._internal.vcs.git +import pip._internal.vcs.mercurial +import pip._internal.vcs.subversion # noqa: F401 +from pip._internal.vcs.versioncontrol import ( # noqa: F401 + RemoteNotFoundError, + is_url, + make_vcs_requirement_url, + vcs, +) diff --git a/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..65fab7e12 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-37.pyc new file mode 100644 index 000000000..8095599b9 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-37.pyc new file mode 100644 index 000000000..09d8c1e63 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-37.pyc new file mode 100644 index 000000000..a86a65fc2 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-37.pyc new file mode 100644 index 000000000..eaf1dcc81 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-37.pyc b/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-37.pyc new file mode 100644 index 000000000..0531780f0 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_internal/vcs/bazaar.py b/my_env/Lib/site-packages/pip/_internal/vcs/bazaar.py new file mode 100644 index 000000000..347c06f9d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/vcs/bazaar.py @@ -0,0 +1,120 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import logging +import os + +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip._internal.utils.misc import display_path, rmtree +from pip._internal.utils.subprocess import make_command +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs.versioncontrol import VersionControl, vcs + +if MYPY_CHECK_RUNNING: + from typing import Optional, Tuple + from pip._internal.utils.misc import HiddenText + from pip._internal.vcs.versioncontrol import AuthInfo, RevOptions + + +logger = logging.getLogger(__name__) + + +class Bazaar(VersionControl): + name = 'bzr' + dirname = '.bzr' + repo_name = 'branch' + schemes = ( + 'bzr', 'bzr+http', 'bzr+https', 'bzr+ssh', 'bzr+sftp', 'bzr+ftp', + 'bzr+lp', + ) + + def __init__(self, *args, **kwargs): + super(Bazaar, self).__init__(*args, **kwargs) + # This is only needed for python <2.7.5 + # Register lp but do not expose as a scheme to support bzr+lp. + if getattr(urllib_parse, 'uses_fragment', None): + urllib_parse.uses_fragment.extend(['lp']) + + @staticmethod + def get_base_rev_args(rev): + return ['-r', rev] + + def export(self, location, url): + # type: (str, HiddenText) -> None + """ + Export the Bazaar repository at the url to the destination location + """ + # Remove the location to make sure Bazaar can export it correctly + if os.path.exists(location): + rmtree(location) + + url, rev_options = self.get_url_rev_options(url) + self.run_command( + make_command('export', location, url, rev_options.to_args()), + show_stdout=False, + ) + + def fetch_new(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + rev_display = rev_options.to_display() + logger.info( + 'Checking out %s%s to %s', + url, + rev_display, + display_path(dest), + ) + cmd_args = ( + make_command('branch', '-q', rev_options.to_args(), url, dest) + ) + self.run_command(cmd_args) + + def switch(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + self.run_command(make_command('switch', url), cwd=dest) + + def update(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + cmd_args = make_command('pull', '-q', rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + @classmethod + def get_url_rev_and_auth(cls, url): + # type: (str) -> Tuple[str, Optional[str], AuthInfo] + # hotfix the URL scheme after removing bzr+ from bzr+ssh:// readd it + url, rev, user_pass = super(Bazaar, cls).get_url_rev_and_auth(url) + if url.startswith('ssh://'): + url = 'bzr+' + url + return url, rev, user_pass + + @classmethod + def get_remote_url(cls, location): + urls = cls.run_command(['info'], show_stdout=False, cwd=location) + for line in urls.splitlines(): + line = line.strip() + for x in ('checkout of branch: ', + 'parent branch: '): + if line.startswith(x): + repo = line.split(x)[1] + if cls._is_local_repository(repo): + return path_to_url(repo) + return repo + return None + + @classmethod + def get_revision(cls, location): + revision = cls.run_command( + ['revno'], show_stdout=False, cwd=location, + ) + return revision.splitlines()[-1] + + @classmethod + def is_commit_id_equal(cls, dest, name): + """Always assume the versions don't match""" + return False + + +vcs.register(Bazaar) diff --git a/my_env/Lib/site-packages/pip/_internal/vcs/git.py b/my_env/Lib/site-packages/pip/_internal/vcs/git.py new file mode 100644 index 000000000..92b845714 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/vcs/git.py @@ -0,0 +1,372 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import logging +import os.path +import re + +from pip._vendor.packaging.version import parse as parse_version +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib import request as urllib_request + +from pip._internal.exceptions import BadCommand +from pip._internal.utils.misc import display_path +from pip._internal.utils.subprocess import make_command +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.vcs.versioncontrol import ( + RemoteNotFoundError, + VersionControl, + find_path_to_setup_from_repo_root, + vcs, +) + +if MYPY_CHECK_RUNNING: + from typing import Optional, Tuple + from pip._internal.utils.misc import HiddenText + from pip._internal.vcs.versioncontrol import AuthInfo, RevOptions + + +urlsplit = urllib_parse.urlsplit +urlunsplit = urllib_parse.urlunsplit + + +logger = logging.getLogger(__name__) + + +HASH_REGEX = re.compile('^[a-fA-F0-9]{40}$') + + +def looks_like_hash(sha): + return bool(HASH_REGEX.match(sha)) + + +class Git(VersionControl): + name = 'git' + dirname = '.git' + repo_name = 'clone' + schemes = ( + 'git', 'git+http', 'git+https', 'git+ssh', 'git+git', 'git+file', + ) + # Prevent the user's environment variables from interfering with pip: + # https://github.com/pypa/pip/issues/1130 + unset_environ = ('GIT_DIR', 'GIT_WORK_TREE') + default_arg_rev = 'HEAD' + + @staticmethod + def get_base_rev_args(rev): + return [rev] + + def get_git_version(self): + VERSION_PFX = 'git version ' + version = self.run_command(['version'], show_stdout=False) + if version.startswith(VERSION_PFX): + version = version[len(VERSION_PFX):].split()[0] + else: + version = '' + # get first 3 positions of the git version because + # on windows it is x.y.z.windows.t, and this parses as + # LegacyVersion which always smaller than a Version. + version = '.'.join(version.split('.')[:3]) + return parse_version(version) + + @classmethod + def get_current_branch(cls, location): + """ + Return the current branch, or None if HEAD isn't at a branch + (e.g. detached HEAD). + """ + # git-symbolic-ref exits with empty stdout if "HEAD" is a detached + # HEAD rather than a symbolic ref. In addition, the -q causes the + # command to exit with status code 1 instead of 128 in this case + # and to suppress the message to stderr. + args = ['symbolic-ref', '-q', 'HEAD'] + output = cls.run_command( + args, extra_ok_returncodes=(1, ), show_stdout=False, cwd=location, + ) + ref = output.strip() + + if ref.startswith('refs/heads/'): + return ref[len('refs/heads/'):] + + return None + + def export(self, location, url): + # type: (str, HiddenText) -> None + """Export the Git repository at the url to the destination location""" + if not location.endswith('/'): + location = location + '/' + + with TempDirectory(kind="export") as temp_dir: + self.unpack(temp_dir.path, url=url) + self.run_command( + ['checkout-index', '-a', '-f', '--prefix', location], + show_stdout=False, cwd=temp_dir.path + ) + + @classmethod + def get_revision_sha(cls, dest, rev): + """ + Return (sha_or_none, is_branch), where sha_or_none is a commit hash + if the revision names a remote branch or tag, otherwise None. + + Args: + dest: the repository directory. + rev: the revision name. + """ + # Pass rev to pre-filter the list. + output = cls.run_command(['show-ref', rev], cwd=dest, + show_stdout=False, on_returncode='ignore') + refs = {} + for line in output.strip().splitlines(): + try: + sha, ref = line.split() + except ValueError: + # Include the offending line to simplify troubleshooting if + # this error ever occurs. + raise ValueError('unexpected show-ref line: {!r}'.format(line)) + + refs[ref] = sha + + branch_ref = 'refs/remotes/origin/{}'.format(rev) + tag_ref = 'refs/tags/{}'.format(rev) + + sha = refs.get(branch_ref) + if sha is not None: + return (sha, True) + + sha = refs.get(tag_ref) + + return (sha, False) + + @classmethod + def resolve_revision(cls, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> RevOptions + """ + Resolve a revision to a new RevOptions object with the SHA1 of the + branch, tag, or ref if found. + + Args: + rev_options: a RevOptions object. + """ + rev = rev_options.arg_rev + # The arg_rev property's implementation for Git ensures that the + # rev return value is always non-None. + assert rev is not None + + sha, is_branch = cls.get_revision_sha(dest, rev) + + if sha is not None: + rev_options = rev_options.make_new(sha) + rev_options.branch_name = rev if is_branch else None + + return rev_options + + # Do not show a warning for the common case of something that has + # the form of a Git commit hash. + if not looks_like_hash(rev): + logger.warning( + "Did not find branch or tag '%s', assuming revision or ref.", + rev, + ) + + if not rev.startswith('refs/'): + return rev_options + + # If it looks like a ref, we have to fetch it explicitly. + cls.run_command( + make_command('fetch', '-q', url, rev_options.to_args()), + cwd=dest, + ) + # Change the revision to the SHA of the ref we fetched + sha = cls.get_revision(dest, rev='FETCH_HEAD') + rev_options = rev_options.make_new(sha) + + return rev_options + + @classmethod + def is_commit_id_equal(cls, dest, name): + """ + Return whether the current commit hash equals the given name. + + Args: + dest: the repository directory. + name: a string name. + """ + if not name: + # Then avoid an unnecessary subprocess call. + return False + + return cls.get_revision(dest) == name + + def fetch_new(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + rev_display = rev_options.to_display() + logger.info('Cloning %s%s to %s', url, rev_display, display_path(dest)) + self.run_command(make_command('clone', '-q', url, dest)) + + if rev_options.rev: + # Then a specific revision was requested. + rev_options = self.resolve_revision(dest, url, rev_options) + branch_name = getattr(rev_options, 'branch_name', None) + if branch_name is None: + # Only do a checkout if the current commit id doesn't match + # the requested revision. + if not self.is_commit_id_equal(dest, rev_options.rev): + cmd_args = make_command( + 'checkout', '-q', rev_options.to_args(), + ) + self.run_command(cmd_args, cwd=dest) + elif self.get_current_branch(dest) != branch_name: + # Then a specific branch was requested, and that branch + # is not yet checked out. + track_branch = 'origin/{}'.format(branch_name) + cmd_args = [ + 'checkout', '-b', branch_name, '--track', track_branch, + ] + self.run_command(cmd_args, cwd=dest) + + #: repo may contain submodules + self.update_submodules(dest) + + def switch(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + self.run_command( + make_command('config', 'remote.origin.url', url), + cwd=dest, + ) + cmd_args = make_command('checkout', '-q', rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + self.update_submodules(dest) + + def update(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + # First fetch changes from the default remote + if self.get_git_version() >= parse_version('1.9.0'): + # fetch tags in addition to everything else + self.run_command(['fetch', '-q', '--tags'], cwd=dest) + else: + self.run_command(['fetch', '-q'], cwd=dest) + # Then reset to wanted revision (maybe even origin/master) + rev_options = self.resolve_revision(dest, url, rev_options) + cmd_args = make_command('reset', '--hard', '-q', rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + #: update submodules + self.update_submodules(dest) + + @classmethod + def get_remote_url(cls, location): + """ + Return URL of the first remote encountered. + + Raises RemoteNotFoundError if the repository does not have a remote + url configured. + """ + # We need to pass 1 for extra_ok_returncodes since the command + # exits with return code 1 if there are no matching lines. + stdout = cls.run_command( + ['config', '--get-regexp', r'remote\..*\.url'], + extra_ok_returncodes=(1, ), show_stdout=False, cwd=location, + ) + remotes = stdout.splitlines() + try: + found_remote = remotes[0] + except IndexError: + raise RemoteNotFoundError + + for remote in remotes: + if remote.startswith('remote.origin.url '): + found_remote = remote + break + url = found_remote.split(' ')[1] + return url.strip() + + @classmethod + def get_revision(cls, location, rev=None): + if rev is None: + rev = 'HEAD' + current_rev = cls.run_command( + ['rev-parse', rev], show_stdout=False, cwd=location, + ) + return current_rev.strip() + + @classmethod + def get_subdirectory(cls, location): + """ + Return the path to setup.py, relative to the repo root. + Return None if setup.py is in the repo root. + """ + # find the repo root + git_dir = cls.run_command( + ['rev-parse', '--git-dir'], + show_stdout=False, cwd=location).strip() + if not os.path.isabs(git_dir): + git_dir = os.path.join(location, git_dir) + repo_root = os.path.abspath(os.path.join(git_dir, '..')) + return find_path_to_setup_from_repo_root(location, repo_root) + + @classmethod + def get_url_rev_and_auth(cls, url): + # type: (str) -> Tuple[str, Optional[str], AuthInfo] + """ + Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'. + That's required because although they use SSH they sometimes don't + work with a ssh:// scheme (e.g. GitHub). But we need a scheme for + parsing. Hence we remove it again afterwards and return it as a stub. + """ + # Works around an apparent Git bug + # (see https://article.gmane.org/gmane.comp.version-control.git/146500) + scheme, netloc, path, query, fragment = urlsplit(url) + if scheme.endswith('file'): + initial_slashes = path[:-len(path.lstrip('/'))] + newpath = ( + initial_slashes + + urllib_request.url2pathname(path) + .replace('\\', '/').lstrip('/') + ) + url = urlunsplit((scheme, netloc, newpath, query, fragment)) + after_plus = scheme.find('+') + 1 + url = scheme[:after_plus] + urlunsplit( + (scheme[after_plus:], netloc, newpath, query, fragment), + ) + + if '://' not in url: + assert 'file:' not in url + url = url.replace('git+', 'git+ssh://') + url, rev, user_pass = super(Git, cls).get_url_rev_and_auth(url) + url = url.replace('ssh://', '') + else: + url, rev, user_pass = super(Git, cls).get_url_rev_and_auth(url) + + return url, rev, user_pass + + @classmethod + def update_submodules(cls, location): + if not os.path.exists(os.path.join(location, '.gitmodules')): + return + cls.run_command( + ['submodule', 'update', '--init', '--recursive', '-q'], + cwd=location, + ) + + @classmethod + def controls_location(cls, location): + if super(Git, cls).controls_location(location): + return True + try: + r = cls.run_command(['rev-parse'], + cwd=location, + show_stdout=False, + on_returncode='ignore', + log_failed_cmd=False) + return not r + except BadCommand: + logger.debug("could not determine if %s is under git control " + "because git is not available", location) + return False + + +vcs.register(Git) diff --git a/my_env/Lib/site-packages/pip/_internal/vcs/mercurial.py b/my_env/Lib/site-packages/pip/_internal/vcs/mercurial.py new file mode 100644 index 000000000..d9b58cfe9 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/vcs/mercurial.py @@ -0,0 +1,155 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import logging +import os + +from pip._vendor.six.moves import configparser + +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.utils.misc import display_path +from pip._internal.utils.subprocess import make_command +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs.versioncontrol import ( + VersionControl, + find_path_to_setup_from_repo_root, + vcs, +) + +if MYPY_CHECK_RUNNING: + from pip._internal.utils.misc import HiddenText + from pip._internal.vcs.versioncontrol import RevOptions + + +logger = logging.getLogger(__name__) + + +class Mercurial(VersionControl): + name = 'hg' + dirname = '.hg' + repo_name = 'clone' + schemes = ( + 'hg', 'hg+file', 'hg+http', 'hg+https', 'hg+ssh', 'hg+static-http', + ) + + @staticmethod + def get_base_rev_args(rev): + return [rev] + + def export(self, location, url): + # type: (str, HiddenText) -> None + """Export the Hg repository at the url to the destination location""" + with TempDirectory(kind="export") as temp_dir: + self.unpack(temp_dir.path, url=url) + + self.run_command( + ['archive', location], show_stdout=False, cwd=temp_dir.path + ) + + def fetch_new(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + rev_display = rev_options.to_display() + logger.info( + 'Cloning hg %s%s to %s', + url, + rev_display, + display_path(dest), + ) + self.run_command(make_command('clone', '--noupdate', '-q', url, dest)) + self.run_command( + make_command('update', '-q', rev_options.to_args()), + cwd=dest, + ) + + def switch(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + repo_config = os.path.join(dest, self.dirname, 'hgrc') + config = configparser.RawConfigParser() + try: + config.read(repo_config) + config.set('paths', 'default', url.secret) + with open(repo_config, 'w') as config_file: + config.write(config_file) + except (OSError, configparser.NoSectionError) as exc: + logger.warning( + 'Could not switch Mercurial repository to %s: %s', url, exc, + ) + else: + cmd_args = make_command('update', '-q', rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + def update(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + self.run_command(['pull', '-q'], cwd=dest) + cmd_args = make_command('update', '-q', rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + @classmethod + def get_remote_url(cls, location): + url = cls.run_command( + ['showconfig', 'paths.default'], + show_stdout=False, cwd=location).strip() + if cls._is_local_repository(url): + url = path_to_url(url) + return url.strip() + + @classmethod + def get_revision(cls, location): + """ + Return the repository-local changeset revision number, as an integer. + """ + current_revision = cls.run_command( + ['parents', '--template={rev}'], + show_stdout=False, cwd=location).strip() + return current_revision + + @classmethod + def get_requirement_revision(cls, location): + """ + Return the changeset identification hash, as a 40-character + hexadecimal string + """ + current_rev_hash = cls.run_command( + ['parents', '--template={node}'], + show_stdout=False, cwd=location).strip() + return current_rev_hash + + @classmethod + def is_commit_id_equal(cls, dest, name): + """Always assume the versions don't match""" + return False + + @classmethod + def get_subdirectory(cls, location): + """ + Return the path to setup.py, relative to the repo root. + Return None if setup.py is in the repo root. + """ + # find the repo root + repo_root = cls.run_command( + ['root'], show_stdout=False, cwd=location).strip() + if not os.path.isabs(repo_root): + repo_root = os.path.abspath(os.path.join(location, repo_root)) + return find_path_to_setup_from_repo_root(location, repo_root) + + @classmethod + def controls_location(cls, location): + if super(Mercurial, cls).controls_location(location): + return True + try: + cls.run_command( + ['identify'], + cwd=location, + show_stdout=False, + on_returncode='raise', + log_failed_cmd=False) + return True + except (BadCommand, InstallationError): + return False + + +vcs.register(Mercurial) diff --git a/my_env/Lib/site-packages/pip/_internal/vcs/subversion.py b/my_env/Lib/site-packages/pip/_internal/vcs/subversion.py new file mode 100644 index 000000000..6c76d1ad4 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/vcs/subversion.py @@ -0,0 +1,333 @@ +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import logging +import os +import re + +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import ( + display_path, + is_console_interactive, + rmtree, + split_auth_from_netloc, +) +from pip._internal.utils.subprocess import make_command +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.vcs.versioncontrol import VersionControl, vcs + +_svn_xml_url_re = re.compile('url="([^"]+)"') +_svn_rev_re = re.compile(r'committed-rev="(\d+)"') +_svn_info_xml_rev_re = re.compile(r'\s*revision="(\d+)"') +_svn_info_xml_url_re = re.compile(r'(.*)') + + +if MYPY_CHECK_RUNNING: + from typing import Optional, Tuple + from pip._internal.utils.subprocess import CommandArgs + from pip._internal.utils.misc import HiddenText + from pip._internal.vcs.versioncontrol import AuthInfo, RevOptions + + +logger = logging.getLogger(__name__) + + +class Subversion(VersionControl): + name = 'svn' + dirname = '.svn' + repo_name = 'checkout' + schemes = ('svn', 'svn+ssh', 'svn+http', 'svn+https', 'svn+svn') + + @classmethod + def should_add_vcs_url_prefix(cls, remote_url): + return True + + @staticmethod + def get_base_rev_args(rev): + return ['-r', rev] + + @classmethod + def get_revision(cls, location): + """ + Return the maximum revision for all files under a given location + """ + # Note: taken from setuptools.command.egg_info + revision = 0 + + for base, dirs, files in os.walk(location): + if cls.dirname not in dirs: + dirs[:] = [] + continue # no sense walking uncontrolled subdirs + dirs.remove(cls.dirname) + entries_fn = os.path.join(base, cls.dirname, 'entries') + if not os.path.exists(entries_fn): + # FIXME: should we warn? + continue + + dirurl, localrev = cls._get_svn_url_rev(base) + + if base == location: + base = dirurl + '/' # save the root url + elif not dirurl or not dirurl.startswith(base): + dirs[:] = [] + continue # not part of the same svn tree, skip it + revision = max(revision, localrev) + return revision + + @classmethod + def get_netloc_and_auth(cls, netloc, scheme): + """ + This override allows the auth information to be passed to svn via the + --username and --password options instead of via the URL. + """ + if scheme == 'ssh': + # The --username and --password options can't be used for + # svn+ssh URLs, so keep the auth information in the URL. + return super(Subversion, cls).get_netloc_and_auth(netloc, scheme) + + return split_auth_from_netloc(netloc) + + @classmethod + def get_url_rev_and_auth(cls, url): + # type: (str) -> Tuple[str, Optional[str], AuthInfo] + # hotfix the URL scheme after removing svn+ from svn+ssh:// readd it + url, rev, user_pass = super(Subversion, cls).get_url_rev_and_auth(url) + if url.startswith('ssh://'): + url = 'svn+' + url + return url, rev, user_pass + + @staticmethod + def make_rev_args(username, password): + # type: (Optional[str], Optional[HiddenText]) -> CommandArgs + extra_args = [] # type: CommandArgs + if username: + extra_args += ['--username', username] + if password: + extra_args += ['--password', password] + + return extra_args + + @classmethod + def get_remote_url(cls, location): + # In cases where the source is in a subdirectory, not alongside + # setup.py we have to look up in the location until we find a real + # setup.py + orig_location = location + while not os.path.exists(os.path.join(location, 'setup.py')): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding setup.py + logger.warning( + "Could not find setup.py for directory %s (tried all " + "parent directories)", + orig_location, + ) + return None + + return cls._get_svn_url_rev(location)[0] + + @classmethod + def _get_svn_url_rev(cls, location): + from pip._internal.exceptions import InstallationError + + entries_path = os.path.join(location, cls.dirname, 'entries') + if os.path.exists(entries_path): + with open(entries_path) as f: + data = f.read() + else: # subversion >= 1.7 does not have the 'entries' file + data = '' + + if (data.startswith('8') or + data.startswith('9') or + data.startswith('10')): + data = list(map(str.splitlines, data.split('\n\x0c\n'))) + del data[0][0] # get rid of the '8' + url = data[0][3] + revs = [int(d[9]) for d in data if len(d) > 9 and d[9]] + [0] + elif data.startswith('= 1.7 + # Note that using get_remote_call_options is not necessary here + # because `svn info` is being run against a local directory. + # We don't need to worry about making sure interactive mode + # is being used to prompt for passwords, because passwords + # are only potentially needed for remote server requests. + xml = cls.run_command( + ['info', '--xml', location], + show_stdout=False, + ) + url = _svn_info_xml_url_re.search(xml).group(1) + revs = [ + int(m.group(1)) for m in _svn_info_xml_rev_re.finditer(xml) + ] + except InstallationError: + url, revs = None, [] + + if revs: + rev = max(revs) + else: + rev = 0 + + return url, rev + + @classmethod + def is_commit_id_equal(cls, dest, name): + """Always assume the versions don't match""" + return False + + def __init__(self, use_interactive=None): + # type: (bool) -> None + if use_interactive is None: + use_interactive = is_console_interactive() + self.use_interactive = use_interactive + + # This member is used to cache the fetched version of the current + # ``svn`` client. + # Special value definitions: + # None: Not evaluated yet. + # Empty tuple: Could not parse version. + self._vcs_version = None # type: Optional[Tuple[int, ...]] + + super(Subversion, self).__init__() + + def call_vcs_version(self): + # type: () -> Tuple[int, ...] + """Query the version of the currently installed Subversion client. + + :return: A tuple containing the parts of the version information or + ``()`` if the version returned from ``svn`` could not be parsed. + :raises: BadCommand: If ``svn`` is not installed. + """ + # Example versions: + # svn, version 1.10.3 (r1842928) + # compiled Feb 25 2019, 14:20:39 on x86_64-apple-darwin17.0.0 + # svn, version 1.7.14 (r1542130) + # compiled Mar 28 2018, 08:49:13 on x86_64-pc-linux-gnu + version_prefix = 'svn, version ' + version = self.run_command(['--version'], show_stdout=False) + if not version.startswith(version_prefix): + return () + + version = version[len(version_prefix):].split()[0] + version_list = version.split('.') + try: + parsed_version = tuple(map(int, version_list)) + except ValueError: + return () + + return parsed_version + + def get_vcs_version(self): + # type: () -> Tuple[int, ...] + """Return the version of the currently installed Subversion client. + + If the version of the Subversion client has already been queried, + a cached value will be used. + + :return: A tuple containing the parts of the version information or + ``()`` if the version returned from ``svn`` could not be parsed. + :raises: BadCommand: If ``svn`` is not installed. + """ + if self._vcs_version is not None: + # Use cached version, if available. + # If parsing the version failed previously (empty tuple), + # do not attempt to parse it again. + return self._vcs_version + + vcs_version = self.call_vcs_version() + self._vcs_version = vcs_version + return vcs_version + + def get_remote_call_options(self): + # type: () -> CommandArgs + """Return options to be used on calls to Subversion that contact the server. + + These options are applicable for the following ``svn`` subcommands used + in this class. + + - checkout + - export + - switch + - update + + :return: A list of command line arguments to pass to ``svn``. + """ + if not self.use_interactive: + # --non-interactive switch is available since Subversion 0.14.4. + # Subversion < 1.8 runs in interactive mode by default. + return ['--non-interactive'] + + svn_version = self.get_vcs_version() + # By default, Subversion >= 1.8 runs in non-interactive mode if + # stdin is not a TTY. Since that is how pip invokes SVN, in + # call_subprocess(), pip must pass --force-interactive to ensure + # the user can be prompted for a password, if required. + # SVN added the --force-interactive option in SVN 1.8. Since + # e.g. RHEL/CentOS 7, which is supported until 2024, ships with + # SVN 1.7, pip should continue to support SVN 1.7. Therefore, pip + # can't safely add the option if the SVN version is < 1.8 (or unknown). + if svn_version >= (1, 8): + return ['--force-interactive'] + + return [] + + def export(self, location, url): + # type: (str, HiddenText) -> None + """Export the svn repository at the url to the destination location""" + url, rev_options = self.get_url_rev_options(url) + + logger.info('Exporting svn repository %s to %s', url, location) + with indent_log(): + if os.path.exists(location): + # Subversion doesn't like to check out over an existing + # directory --force fixes this, but was only added in svn 1.5 + rmtree(location) + cmd_args = make_command( + 'export', self.get_remote_call_options(), + rev_options.to_args(), url, location, + ) + self.run_command(cmd_args, show_stdout=False) + + def fetch_new(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + rev_display = rev_options.to_display() + logger.info( + 'Checking out %s%s to %s', + url, + rev_display, + display_path(dest), + ) + cmd_args = make_command( + 'checkout', '-q', self.get_remote_call_options(), + rev_options.to_args(), url, dest, + ) + self.run_command(cmd_args) + + def switch(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + cmd_args = make_command( + 'switch', self.get_remote_call_options(), rev_options.to_args(), + url, dest, + ) + self.run_command(cmd_args) + + def update(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + cmd_args = make_command( + 'update', self.get_remote_call_options(), rev_options.to_args(), + dest, + ) + self.run_command(cmd_args) + + +vcs.register(Subversion) diff --git a/my_env/Lib/site-packages/pip/_internal/vcs/versioncontrol.py b/my_env/Lib/site-packages/pip/_internal/vcs/versioncontrol.py new file mode 100644 index 000000000..9038ace80 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/vcs/versioncontrol.py @@ -0,0 +1,665 @@ +"""Handles all VCS (version control) support""" + +# The following comment should be removed at some point in the future. +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import errno +import logging +import os +import shutil +import sys + +from pip._vendor import pkg_resources +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip._internal.exceptions import BadCommand +from pip._internal.utils.compat import samefile +from pip._internal.utils.misc import ( + ask_path_exists, + backup_dir, + display_path, + hide_url, + hide_value, + rmtree, +) +from pip._internal.utils.subprocess import call_subprocess, make_command +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.urls import get_url_scheme + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, Dict, Iterable, List, Mapping, Optional, Text, Tuple, Type, Union + ) + from pip._internal.utils.ui import SpinnerInterface + from pip._internal.utils.misc import HiddenText + from pip._internal.utils.subprocess import CommandArgs + + AuthInfo = Tuple[Optional[str], Optional[str]] + + +__all__ = ['vcs'] + + +logger = logging.getLogger(__name__) + + +def is_url(name): + # type: (Union[str, Text]) -> bool + """ + Return true if the name looks like a URL. + """ + scheme = get_url_scheme(name) + if scheme is None: + return False + return scheme in ['http', 'https', 'file', 'ftp'] + vcs.all_schemes + + +def make_vcs_requirement_url(repo_url, rev, project_name, subdir=None): + """ + Return the URL for a VCS requirement. + + Args: + repo_url: the remote VCS url, with any needed VCS prefix (e.g. "git+"). + project_name: the (unescaped) project name. + """ + egg_project_name = pkg_resources.to_filename(project_name) + req = '{}@{}#egg={}'.format(repo_url, rev, egg_project_name) + if subdir: + req += '&subdirectory={}'.format(subdir) + + return req + + +def find_path_to_setup_from_repo_root(location, repo_root): + """ + Find the path to `setup.py` by searching up the filesystem from `location`. + Return the path to `setup.py` relative to `repo_root`. + Return None if `setup.py` is in `repo_root` or cannot be found. + """ + # find setup.py + orig_location = location + while not os.path.exists(os.path.join(location, 'setup.py')): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding setup.py + logger.warning( + "Could not find setup.py for directory %s (tried all " + "parent directories)", + orig_location, + ) + return None + + if samefile(repo_root, location): + return None + + return os.path.relpath(location, repo_root) + + +class RemoteNotFoundError(Exception): + pass + + +class RevOptions(object): + + """ + Encapsulates a VCS-specific revision to install, along with any VCS + install options. + + Instances of this class should be treated as if immutable. + """ + + def __init__( + self, + vc_class, # type: Type[VersionControl] + rev=None, # type: Optional[str] + extra_args=None, # type: Optional[CommandArgs] + ): + # type: (...) -> None + """ + Args: + vc_class: a VersionControl subclass. + rev: the name of the revision to install. + extra_args: a list of extra options. + """ + if extra_args is None: + extra_args = [] + + self.extra_args = extra_args + self.rev = rev + self.vc_class = vc_class + self.branch_name = None # type: Optional[str] + + def __repr__(self): + return ''.format(self.vc_class.name, self.rev) + + @property + def arg_rev(self): + # type: () -> Optional[str] + if self.rev is None: + return self.vc_class.default_arg_rev + + return self.rev + + def to_args(self): + # type: () -> CommandArgs + """ + Return the VCS-specific command arguments. + """ + args = [] # type: CommandArgs + rev = self.arg_rev + if rev is not None: + args += self.vc_class.get_base_rev_args(rev) + args += self.extra_args + + return args + + def to_display(self): + # type: () -> str + if not self.rev: + return '' + + return ' (to revision {})'.format(self.rev) + + def make_new(self, rev): + # type: (str) -> RevOptions + """ + Make a copy of the current instance, but with a new rev. + + Args: + rev: the name of the revision for the new object. + """ + return self.vc_class.make_rev_options(rev, extra_args=self.extra_args) + + +class VcsSupport(object): + _registry = {} # type: Dict[str, VersionControl] + schemes = ['ssh', 'git', 'hg', 'bzr', 'sftp', 'svn'] + + def __init__(self): + # type: () -> None + # Register more schemes with urlparse for various version control + # systems + urllib_parse.uses_netloc.extend(self.schemes) + # Python >= 2.7.4, 3.3 doesn't have uses_fragment + if getattr(urllib_parse, 'uses_fragment', None): + urllib_parse.uses_fragment.extend(self.schemes) + super(VcsSupport, self).__init__() + + def __iter__(self): + return self._registry.__iter__() + + @property + def backends(self): + # type: () -> List[VersionControl] + return list(self._registry.values()) + + @property + def dirnames(self): + # type: () -> List[str] + return [backend.dirname for backend in self.backends] + + @property + def all_schemes(self): + # type: () -> List[str] + schemes = [] # type: List[str] + for backend in self.backends: + schemes.extend(backend.schemes) + return schemes + + def register(self, cls): + # type: (Type[VersionControl]) -> None + if not hasattr(cls, 'name'): + logger.warning('Cannot register VCS %s', cls.__name__) + return + if cls.name not in self._registry: + self._registry[cls.name] = cls() + logger.debug('Registered VCS backend: %s', cls.name) + + def unregister(self, name): + # type: (str) -> None + if name in self._registry: + del self._registry[name] + + def get_backend_for_dir(self, location): + # type: (str) -> Optional[VersionControl] + """ + Return a VersionControl object if a repository of that type is found + at the given directory. + """ + for vcs_backend in self._registry.values(): + if vcs_backend.controls_location(location): + logger.debug('Determine that %s uses VCS: %s', + location, vcs_backend.name) + return vcs_backend + return None + + def get_backend(self, name): + # type: (str) -> Optional[VersionControl] + """ + Return a VersionControl object or None. + """ + name = name.lower() + return self._registry.get(name) + + +vcs = VcsSupport() + + +class VersionControl(object): + name = '' + dirname = '' + repo_name = '' + # List of supported schemes for this Version Control + schemes = () # type: Tuple[str, ...] + # Iterable of environment variable names to pass to call_subprocess(). + unset_environ = () # type: Tuple[str, ...] + default_arg_rev = None # type: Optional[str] + + @classmethod + def should_add_vcs_url_prefix(cls, remote_url): + """ + Return whether the vcs prefix (e.g. "git+") should be added to a + repository's remote url when used in a requirement. + """ + return not remote_url.lower().startswith('{}:'.format(cls.name)) + + @classmethod + def get_subdirectory(cls, location): + """ + Return the path to setup.py, relative to the repo root. + Return None if setup.py is in the repo root. + """ + return None + + @classmethod + def get_requirement_revision(cls, repo_dir): + """ + Return the revision string that should be used in a requirement. + """ + return cls.get_revision(repo_dir) + + @classmethod + def get_src_requirement(cls, repo_dir, project_name): + """ + Return the requirement string to use to redownload the files + currently at the given repository directory. + + Args: + project_name: the (unescaped) project name. + + The return value has a form similar to the following: + + {repository_url}@{revision}#egg={project_name} + """ + repo_url = cls.get_remote_url(repo_dir) + if repo_url is None: + return None + + if cls.should_add_vcs_url_prefix(repo_url): + repo_url = '{}+{}'.format(cls.name, repo_url) + + revision = cls.get_requirement_revision(repo_dir) + subdir = cls.get_subdirectory(repo_dir) + req = make_vcs_requirement_url(repo_url, revision, project_name, + subdir=subdir) + + return req + + @staticmethod + def get_base_rev_args(rev): + """ + Return the base revision arguments for a vcs command. + + Args: + rev: the name of a revision to install. Cannot be None. + """ + raise NotImplementedError + + @classmethod + def make_rev_options(cls, rev=None, extra_args=None): + # type: (Optional[str], Optional[CommandArgs]) -> RevOptions + """ + Return a RevOptions object. + + Args: + rev: the name of a revision to install. + extra_args: a list of extra options. + """ + return RevOptions(cls, rev, extra_args=extra_args) + + @classmethod + def _is_local_repository(cls, repo): + # type: (str) -> bool + """ + posix absolute paths start with os.path.sep, + win32 ones start with drive (like c:\\folder) + """ + drive, tail = os.path.splitdrive(repo) + return repo.startswith(os.path.sep) or bool(drive) + + def export(self, location, url): + # type: (str, HiddenText) -> None + """ + Export the repository at the url to the destination location + i.e. only download the files, without vcs informations + + :param url: the repository URL starting with a vcs prefix. + """ + raise NotImplementedError + + @classmethod + def get_netloc_and_auth(cls, netloc, scheme): + """ + Parse the repository URL's netloc, and return the new netloc to use + along with auth information. + + Args: + netloc: the original repository URL netloc. + scheme: the repository URL's scheme without the vcs prefix. + + This is mainly for the Subversion class to override, so that auth + information can be provided via the --username and --password options + instead of through the URL. For other subclasses like Git without + such an option, auth information must stay in the URL. + + Returns: (netloc, (username, password)). + """ + return netloc, (None, None) + + @classmethod + def get_url_rev_and_auth(cls, url): + # type: (str) -> Tuple[str, Optional[str], AuthInfo] + """ + Parse the repository URL to use, and return the URL, revision, + and auth info to use. + + Returns: (url, rev, (username, password)). + """ + scheme, netloc, path, query, frag = urllib_parse.urlsplit(url) + if '+' not in scheme: + raise ValueError( + "Sorry, {!r} is a malformed VCS url. " + "The format is +://, " + "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp".format(url) + ) + # Remove the vcs prefix. + scheme = scheme.split('+', 1)[1] + netloc, user_pass = cls.get_netloc_and_auth(netloc, scheme) + rev = None + if '@' in path: + path, rev = path.rsplit('@', 1) + url = urllib_parse.urlunsplit((scheme, netloc, path, query, '')) + return url, rev, user_pass + + @staticmethod + def make_rev_args(username, password): + # type: (Optional[str], Optional[HiddenText]) -> CommandArgs + """ + Return the RevOptions "extra arguments" to use in obtain(). + """ + return [] + + def get_url_rev_options(self, url): + # type: (HiddenText) -> Tuple[HiddenText, RevOptions] + """ + Return the URL and RevOptions object to use in obtain() and in + some cases export(), as a tuple (url, rev_options). + """ + secret_url, rev, user_pass = self.get_url_rev_and_auth(url.secret) + username, secret_password = user_pass + password = None # type: Optional[HiddenText] + if secret_password is not None: + password = hide_value(secret_password) + extra_args = self.make_rev_args(username, password) + rev_options = self.make_rev_options(rev, extra_args=extra_args) + + return hide_url(secret_url), rev_options + + @staticmethod + def normalize_url(url): + # type: (str) -> str + """ + Normalize a URL for comparison by unquoting it and removing any + trailing slash. + """ + return urllib_parse.unquote(url).rstrip('/') + + @classmethod + def compare_urls(cls, url1, url2): + # type: (str, str) -> bool + """ + Compare two repo URLs for identity, ignoring incidental differences. + """ + return (cls.normalize_url(url1) == cls.normalize_url(url2)) + + def fetch_new(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + """ + Fetch a revision from a repository, in the case that this is the + first fetch from the repository. + + Args: + dest: the directory to fetch the repository to. + rev_options: a RevOptions object. + """ + raise NotImplementedError + + def switch(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + """ + Switch the repo at ``dest`` to point to ``URL``. + + Args: + rev_options: a RevOptions object. + """ + raise NotImplementedError + + def update(self, dest, url, rev_options): + # type: (str, HiddenText, RevOptions) -> None + """ + Update an already-existing repo to the given ``rev_options``. + + Args: + rev_options: a RevOptions object. + """ + raise NotImplementedError + + @classmethod + def is_commit_id_equal(cls, dest, name): + """ + Return whether the id of the current commit equals the given name. + + Args: + dest: the repository directory. + name: a string name. + """ + raise NotImplementedError + + def obtain(self, dest, url): + # type: (str, HiddenText) -> None + """ + Install or update in editable mode the package represented by this + VersionControl object. + + :param dest: the repository directory in which to install or update. + :param url: the repository URL starting with a vcs prefix. + """ + url, rev_options = self.get_url_rev_options(url) + + if not os.path.exists(dest): + self.fetch_new(dest, url, rev_options) + return + + rev_display = rev_options.to_display() + if self.is_repository_directory(dest): + existing_url = self.get_remote_url(dest) + if self.compare_urls(existing_url, url.secret): + logger.debug( + '%s in %s exists, and has correct URL (%s)', + self.repo_name.title(), + display_path(dest), + url, + ) + if not self.is_commit_id_equal(dest, rev_options.rev): + logger.info( + 'Updating %s %s%s', + display_path(dest), + self.repo_name, + rev_display, + ) + self.update(dest, url, rev_options) + else: + logger.info('Skipping because already up-to-date.') + return + + logger.warning( + '%s %s in %s exists with URL %s', + self.name, + self.repo_name, + display_path(dest), + existing_url, + ) + prompt = ('(s)witch, (i)gnore, (w)ipe, (b)ackup ', + ('s', 'i', 'w', 'b')) + else: + logger.warning( + 'Directory %s already exists, and is not a %s %s.', + dest, + self.name, + self.repo_name, + ) + # https://github.com/python/mypy/issues/1174 + prompt = ('(i)gnore, (w)ipe, (b)ackup ', # type: ignore + ('i', 'w', 'b')) + + logger.warning( + 'The plan is to install the %s repository %s', + self.name, + url, + ) + response = ask_path_exists('What to do? %s' % prompt[0], prompt[1]) + + if response == 'a': + sys.exit(-1) + + if response == 'w': + logger.warning('Deleting %s', display_path(dest)) + rmtree(dest) + self.fetch_new(dest, url, rev_options) + return + + if response == 'b': + dest_dir = backup_dir(dest) + logger.warning( + 'Backing up %s to %s', display_path(dest), dest_dir, + ) + shutil.move(dest, dest_dir) + self.fetch_new(dest, url, rev_options) + return + + # Do nothing if the response is "i". + if response == 's': + logger.info( + 'Switching %s %s to %s%s', + self.repo_name, + display_path(dest), + url, + rev_display, + ) + self.switch(dest, url, rev_options) + + def unpack(self, location, url): + # type: (str, HiddenText) -> None + """ + Clean up current location and download the url repository + (and vcs infos) into location + + :param url: the repository URL starting with a vcs prefix. + """ + if os.path.exists(location): + rmtree(location) + self.obtain(location, url=url) + + @classmethod + def get_remote_url(cls, location): + """ + Return the url used at location + + Raises RemoteNotFoundError if the repository does not have a remote + url configured. + """ + raise NotImplementedError + + @classmethod + def get_revision(cls, location): + """ + Return the current commit id of the files at the given location. + """ + raise NotImplementedError + + @classmethod + def run_command( + cls, + cmd, # type: Union[List[str], CommandArgs] + show_stdout=True, # type: bool + cwd=None, # type: Optional[str] + on_returncode='raise', # type: str + extra_ok_returncodes=None, # type: Optional[Iterable[int]] + command_desc=None, # type: Optional[str] + extra_environ=None, # type: Optional[Mapping[str, Any]] + spinner=None, # type: Optional[SpinnerInterface] + log_failed_cmd=True + ): + # type: (...) -> Text + """ + Run a VCS subcommand + This is simply a wrapper around call_subprocess that adds the VCS + command name, and checks that the VCS is available + """ + cmd = make_command(cls.name, *cmd) + try: + return call_subprocess(cmd, show_stdout, cwd, + on_returncode=on_returncode, + extra_ok_returncodes=extra_ok_returncodes, + command_desc=command_desc, + extra_environ=extra_environ, + unset_environ=cls.unset_environ, + spinner=spinner, + log_failed_cmd=log_failed_cmd) + except OSError as e: + # errno.ENOENT = no such file or directory + # In other words, the VCS executable isn't available + if e.errno == errno.ENOENT: + raise BadCommand( + 'Cannot find command %r - do you have ' + '%r installed and in your ' + 'PATH?' % (cls.name, cls.name)) + else: + raise # re-raise exception if a different error occurred + + @classmethod + def is_repository_directory(cls, path): + # type: (str) -> bool + """ + Return whether a directory path is a repository directory. + """ + logger.debug('Checking in %s for %s (%s)...', + path, cls.dirname, cls.name) + return os.path.exists(os.path.join(path, cls.dirname)) + + @classmethod + def controls_location(cls, location): + # type: (str) -> bool + """ + Check if a location is controlled by the vcs. + It is meant to be overridden to implement smarter detection + mechanisms for specific vcs. + + This can do more than is_repository_directory() alone. For example, + the Git override checks that Git is actually available. + """ + return cls.is_repository_directory(location) diff --git a/my_env/Lib/site-packages/pip/_internal/wheel.py b/my_env/Lib/site-packages/pip/_internal/wheel.py new file mode 100644 index 000000000..8f9778c7d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_internal/wheel.py @@ -0,0 +1,1181 @@ +""" +Support for installing and building the "wheel" binary package format. +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False +# mypy: disallow-untyped-defs=False + +from __future__ import absolute_import + +import collections +import compileall +import csv +import hashlib +import logging +import os.path +import re +import shutil +import stat +import sys +import warnings +from base64 import urlsafe_b64encode +from email.parser import Parser + +from pip._vendor import pkg_resources +from pip._vendor.distlib.scripts import ScriptMaker +from pip._vendor.distlib.util import get_export_entry +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.six import StringIO + +from pip._internal import pep425tags +from pip._internal.exceptions import ( + InstallationError, + InvalidWheelFilename, + UnsupportedWheel, +) +from pip._internal.locations import distutils_scheme, get_major_minor_version +from pip._internal.models.link import Link +from pip._internal.utils.logging import indent_log +from pip._internal.utils.marker_files import has_delete_marker_file +from pip._internal.utils.misc import captured_stdout, ensure_dir, read_chunks +from pip._internal.utils.setuptools_build import make_setuptools_shim_args +from pip._internal.utils.subprocess import ( + LOG_DIVIDER, + call_subprocess, + format_command_args, + runner_with_spinner_message, +) +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.ui import open_spinner +from pip._internal.utils.unpacking import unpack_file +from pip._internal.utils.urls import path_to_url + +if MYPY_CHECK_RUNNING: + from typing import ( + Dict, List, Optional, Sequence, Mapping, Tuple, IO, Text, Any, + Iterable, Callable, Set, + ) + from pip._vendor.packaging.requirements import Requirement + from pip._internal.req.req_install import InstallRequirement + from pip._internal.operations.prepare import ( + RequirementPreparer + ) + from pip._internal.cache import WheelCache + from pip._internal.pep425tags import Pep425Tag + + InstalledCSVRow = Tuple[str, ...] + + BinaryAllowedPredicate = Callable[[InstallRequirement], bool] + + +VERSION_COMPATIBLE = (1, 0) + + +logger = logging.getLogger(__name__) + + +def normpath(src, p): + return os.path.relpath(src, p).replace(os.path.sep, '/') + + +def hash_file(path, blocksize=1 << 20): + # type: (str, int) -> Tuple[Any, int] + """Return (hash, length) for path using hashlib.sha256()""" + h = hashlib.sha256() + length = 0 + with open(path, 'rb') as f: + for block in read_chunks(f, size=blocksize): + length += len(block) + h.update(block) + return (h, length) # type: ignore + + +def rehash(path, blocksize=1 << 20): + # type: (str, int) -> Tuple[str, str] + """Return (encoded_digest, length) for path using hashlib.sha256()""" + h, length = hash_file(path, blocksize) + digest = 'sha256=' + urlsafe_b64encode( + h.digest() + ).decode('latin1').rstrip('=') + # unicode/str python2 issues + return (digest, str(length)) # type: ignore + + +def open_for_csv(name, mode): + # type: (str, Text) -> IO + if sys.version_info[0] < 3: + nl = {} # type: Dict[str, Any] + bin = 'b' + else: + nl = {'newline': ''} # type: Dict[str, Any] + bin = '' + return open(name, mode + bin, **nl) + + +def replace_python_tag(wheelname, new_tag): + # type: (str, str) -> str + """Replace the Python tag in a wheel file name with a new value. + """ + parts = wheelname.split('-') + parts[-3] = new_tag + return '-'.join(parts) + + +def fix_script(path): + # type: (str) -> Optional[bool] + """Replace #!python with #!/path/to/python + Return True if file was changed.""" + # XXX RECORD hashes will need to be updated + if os.path.isfile(path): + with open(path, 'rb') as script: + firstline = script.readline() + if not firstline.startswith(b'#!python'): + return False + exename = sys.executable.encode(sys.getfilesystemencoding()) + firstline = b'#!' + exename + os.linesep.encode("ascii") + rest = script.read() + with open(path, 'wb') as script: + script.write(firstline) + script.write(rest) + return True + return None + + +dist_info_re = re.compile(r"""^(?P(?P.+?)(-(?P.+?))?) + \.dist-info$""", re.VERBOSE) + + +def root_is_purelib(name, wheeldir): + # type: (str, str) -> bool + """ + Return True if the extracted wheel in wheeldir should go into purelib. + """ + name_folded = name.replace("-", "_") + for item in os.listdir(wheeldir): + match = dist_info_re.match(item) + if match and match.group('name') == name_folded: + with open(os.path.join(wheeldir, item, 'WHEEL')) as wheel: + for line in wheel: + line = line.lower().rstrip() + if line == "root-is-purelib: true": + return True + return False + + +def get_entrypoints(filename): + # type: (str) -> Tuple[Dict[str, str], Dict[str, str]] + if not os.path.exists(filename): + return {}, {} + + # This is done because you can pass a string to entry_points wrappers which + # means that they may or may not be valid INI files. The attempt here is to + # strip leading and trailing whitespace in order to make them valid INI + # files. + with open(filename) as fp: + data = StringIO() + for line in fp: + data.write(line.strip()) + data.write("\n") + data.seek(0) + + # get the entry points and then the script names + entry_points = pkg_resources.EntryPoint.parse_map(data) + console = entry_points.get('console_scripts', {}) + gui = entry_points.get('gui_scripts', {}) + + def _split_ep(s): + """get the string representation of EntryPoint, remove space and split + on '='""" + return str(s).replace(" ", "").split("=") + + # convert the EntryPoint objects into strings with module:function + console = dict(_split_ep(v) for v in console.values()) + gui = dict(_split_ep(v) for v in gui.values()) + return console, gui + + +def message_about_scripts_not_on_PATH(scripts): + # type: (Sequence[str]) -> Optional[str] + """Determine if any scripts are not on PATH and format a warning. + + Returns a warning message if one or more scripts are not on PATH, + otherwise None. + """ + if not scripts: + return None + + # Group scripts by the path they were installed in + grouped_by_dir = collections.defaultdict(set) # type: Dict[str, Set[str]] + for destfile in scripts: + parent_dir = os.path.dirname(destfile) + script_name = os.path.basename(destfile) + grouped_by_dir[parent_dir].add(script_name) + + # We don't want to warn for directories that are on PATH. + not_warn_dirs = [ + os.path.normcase(i).rstrip(os.sep) for i in + os.environ.get("PATH", "").split(os.pathsep) + ] + # If an executable sits with sys.executable, we don't warn for it. + # This covers the case of venv invocations without activating the venv. + not_warn_dirs.append(os.path.normcase(os.path.dirname(sys.executable))) + warn_for = { + parent_dir: scripts for parent_dir, scripts in grouped_by_dir.items() + if os.path.normcase(parent_dir) not in not_warn_dirs + } # type: Dict[str, Set[str]] + if not warn_for: + return None + + # Format a message + msg_lines = [] + for parent_dir, dir_scripts in warn_for.items(): + sorted_scripts = sorted(dir_scripts) # type: List[str] + if len(sorted_scripts) == 1: + start_text = "script {} is".format(sorted_scripts[0]) + else: + start_text = "scripts {} are".format( + ", ".join(sorted_scripts[:-1]) + " and " + sorted_scripts[-1] + ) + + msg_lines.append( + "The {} installed in '{}' which is not on PATH." + .format(start_text, parent_dir) + ) + + last_line_fmt = ( + "Consider adding {} to PATH or, if you prefer " + "to suppress this warning, use --no-warn-script-location." + ) + if len(msg_lines) == 1: + msg_lines.append(last_line_fmt.format("this directory")) + else: + msg_lines.append(last_line_fmt.format("these directories")) + + # Returns the formatted multiline message + return "\n".join(msg_lines) + + +def sorted_outrows(outrows): + # type: (Iterable[InstalledCSVRow]) -> List[InstalledCSVRow] + """ + Return the given rows of a RECORD file in sorted order. + + Each row is a 3-tuple (path, hash, size) and corresponds to a record of + a RECORD file (see PEP 376 and PEP 427 for details). For the rows + passed to this function, the size can be an integer as an int or string, + or the empty string. + """ + # Normally, there should only be one row per path, in which case the + # second and third elements don't come into play when sorting. + # However, in cases in the wild where a path might happen to occur twice, + # we don't want the sort operation to trigger an error (but still want + # determinism). Since the third element can be an int or string, we + # coerce each element to a string to avoid a TypeError in this case. + # For additional background, see-- + # https://github.com/pypa/pip/issues/5868 + return sorted(outrows, key=lambda row: tuple(str(x) for x in row)) + + +def get_csv_rows_for_installed( + old_csv_rows, # type: Iterable[List[str]] + installed, # type: Dict[str, str] + changed, # type: set + generated, # type: List[str] + lib_dir, # type: str +): + # type: (...) -> List[InstalledCSVRow] + """ + :param installed: A map from archive RECORD path to installation RECORD + path. + """ + installed_rows = [] # type: List[InstalledCSVRow] + for row in old_csv_rows: + if len(row) > 3: + logger.warning( + 'RECORD line has more than three elements: {}'.format(row) + ) + # Make a copy because we are mutating the row. + row = list(row) + old_path = row[0] + new_path = installed.pop(old_path, old_path) + row[0] = new_path + if new_path in changed: + digest, length = rehash(new_path) + row[1] = digest + row[2] = length + installed_rows.append(tuple(row)) + for f in generated: + digest, length = rehash(f) + installed_rows.append((normpath(f, lib_dir), digest, str(length))) + for f in installed: + installed_rows.append((installed[f], '', '')) + return installed_rows + + +class MissingCallableSuffix(Exception): + pass + + +def _raise_for_invalid_entrypoint(specification): + entry = get_export_entry(specification) + if entry is not None and entry.suffix is None: + raise MissingCallableSuffix(str(entry)) + + +class PipScriptMaker(ScriptMaker): + def make(self, specification, options=None): + _raise_for_invalid_entrypoint(specification) + return super(PipScriptMaker, self).make(specification, options) + + +def move_wheel_files( + name, # type: str + req, # type: Requirement + wheeldir, # type: str + user=False, # type: bool + home=None, # type: Optional[str] + root=None, # type: Optional[str] + pycompile=True, # type: bool + scheme=None, # type: Optional[Mapping[str, str]] + isolated=False, # type: bool + prefix=None, # type: Optional[str] + warn_script_location=True # type: bool +): + # type: (...) -> None + """Install a wheel""" + # TODO: Investigate and break this up. + # TODO: Look into moving this into a dedicated class for representing an + # installation. + + if not scheme: + scheme = distutils_scheme( + name, user=user, home=home, root=root, isolated=isolated, + prefix=prefix, + ) + + if root_is_purelib(name, wheeldir): + lib_dir = scheme['purelib'] + else: + lib_dir = scheme['platlib'] + + info_dir = [] # type: List[str] + data_dirs = [] + source = wheeldir.rstrip(os.path.sep) + os.path.sep + + # Record details of the files moved + # installed = files copied from the wheel to the destination + # changed = files changed while installing (scripts #! line typically) + # generated = files newly generated during the install (script wrappers) + installed = {} # type: Dict[str, str] + changed = set() + generated = [] # type: List[str] + + # Compile all of the pyc files that we're going to be installing + if pycompile: + with captured_stdout() as stdout: + with warnings.catch_warnings(): + warnings.filterwarnings('ignore') + compileall.compile_dir(source, force=True, quiet=True) + logger.debug(stdout.getvalue()) + + def record_installed(srcfile, destfile, modified=False): + """Map archive RECORD paths to installation RECORD paths.""" + oldpath = normpath(srcfile, wheeldir) + newpath = normpath(destfile, lib_dir) + installed[oldpath] = newpath + if modified: + changed.add(destfile) + + def clobber(source, dest, is_base, fixer=None, filter=None): + ensure_dir(dest) # common for the 'include' path + + for dir, subdirs, files in os.walk(source): + basedir = dir[len(source):].lstrip(os.path.sep) + destdir = os.path.join(dest, basedir) + if is_base and basedir.split(os.path.sep, 1)[0].endswith('.data'): + continue + for s in subdirs: + destsubdir = os.path.join(dest, basedir, s) + if is_base and basedir == '' and destsubdir.endswith('.data'): + data_dirs.append(s) + continue + elif (is_base and + s.endswith('.dist-info') and + canonicalize_name(s).startswith( + canonicalize_name(req.name))): + assert not info_dir, ('Multiple .dist-info directories: ' + + destsubdir + ', ' + + ', '.join(info_dir)) + info_dir.append(destsubdir) + for f in files: + # Skip unwanted files + if filter and filter(f): + continue + srcfile = os.path.join(dir, f) + destfile = os.path.join(dest, basedir, f) + # directory creation is lazy and after the file filtering above + # to ensure we don't install empty dirs; empty dirs can't be + # uninstalled. + ensure_dir(destdir) + + # copyfile (called below) truncates the destination if it + # exists and then writes the new contents. This is fine in most + # cases, but can cause a segfault if pip has loaded a shared + # object (e.g. from pyopenssl through its vendored urllib3) + # Since the shared object is mmap'd an attempt to call a + # symbol in it will then cause a segfault. Unlinking the file + # allows writing of new contents while allowing the process to + # continue to use the old copy. + if os.path.exists(destfile): + os.unlink(destfile) + + # We use copyfile (not move, copy, or copy2) to be extra sure + # that we are not moving directories over (copyfile fails for + # directories) as well as to ensure that we are not copying + # over any metadata because we want more control over what + # metadata we actually copy over. + shutil.copyfile(srcfile, destfile) + + # Copy over the metadata for the file, currently this only + # includes the atime and mtime. + st = os.stat(srcfile) + if hasattr(os, "utime"): + os.utime(destfile, (st.st_atime, st.st_mtime)) + + # If our file is executable, then make our destination file + # executable. + if os.access(srcfile, os.X_OK): + st = os.stat(srcfile) + permissions = ( + st.st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH + ) + os.chmod(destfile, permissions) + + changed = False + if fixer: + changed = fixer(destfile) + record_installed(srcfile, destfile, changed) + + clobber(source, lib_dir, True) + + assert info_dir, "%s .dist-info directory not found" % req + + # Get the defined entry points + ep_file = os.path.join(info_dir[0], 'entry_points.txt') + console, gui = get_entrypoints(ep_file) + + def is_entrypoint_wrapper(name): + # EP, EP.exe and EP-script.py are scripts generated for + # entry point EP by setuptools + if name.lower().endswith('.exe'): + matchname = name[:-4] + elif name.lower().endswith('-script.py'): + matchname = name[:-10] + elif name.lower().endswith(".pya"): + matchname = name[:-4] + else: + matchname = name + # Ignore setuptools-generated scripts + return (matchname in console or matchname in gui) + + for datadir in data_dirs: + fixer = None + filter = None + for subdir in os.listdir(os.path.join(wheeldir, datadir)): + fixer = None + if subdir == 'scripts': + fixer = fix_script + filter = is_entrypoint_wrapper + source = os.path.join(wheeldir, datadir, subdir) + dest = scheme[subdir] + clobber(source, dest, False, fixer=fixer, filter=filter) + + maker = PipScriptMaker(None, scheme['scripts']) + + # Ensure old scripts are overwritten. + # See https://github.com/pypa/pip/issues/1800 + maker.clobber = True + + # Ensure we don't generate any variants for scripts because this is almost + # never what somebody wants. + # See https://bitbucket.org/pypa/distlib/issue/35/ + maker.variants = {''} + + # This is required because otherwise distlib creates scripts that are not + # executable. + # See https://bitbucket.org/pypa/distlib/issue/32/ + maker.set_mode = True + + scripts_to_generate = [] + + # Special case pip and setuptools to generate versioned wrappers + # + # The issue is that some projects (specifically, pip and setuptools) use + # code in setup.py to create "versioned" entry points - pip2.7 on Python + # 2.7, pip3.3 on Python 3.3, etc. But these entry points are baked into + # the wheel metadata at build time, and so if the wheel is installed with + # a *different* version of Python the entry points will be wrong. The + # correct fix for this is to enhance the metadata to be able to describe + # such versioned entry points, but that won't happen till Metadata 2.0 is + # available. + # In the meantime, projects using versioned entry points will either have + # incorrect versioned entry points, or they will not be able to distribute + # "universal" wheels (i.e., they will need a wheel per Python version). + # + # Because setuptools and pip are bundled with _ensurepip and virtualenv, + # we need to use universal wheels. So, as a stopgap until Metadata 2.0, we + # override the versioned entry points in the wheel and generate the + # correct ones. This code is purely a short-term measure until Metadata 2.0 + # is available. + # + # To add the level of hack in this section of code, in order to support + # ensurepip this code will look for an ``ENSUREPIP_OPTIONS`` environment + # variable which will control which version scripts get installed. + # + # ENSUREPIP_OPTIONS=altinstall + # - Only pipX.Y and easy_install-X.Y will be generated and installed + # ENSUREPIP_OPTIONS=install + # - pipX.Y, pipX, easy_install-X.Y will be generated and installed. Note + # that this option is technically if ENSUREPIP_OPTIONS is set and is + # not altinstall + # DEFAULT + # - The default behavior is to install pip, pipX, pipX.Y, easy_install + # and easy_install-X.Y. + pip_script = console.pop('pip', None) + if pip_script: + if "ENSUREPIP_OPTIONS" not in os.environ: + scripts_to_generate.append('pip = ' + pip_script) + + if os.environ.get("ENSUREPIP_OPTIONS", "") != "altinstall": + scripts_to_generate.append( + 'pip%s = %s' % (sys.version_info[0], pip_script) + ) + + scripts_to_generate.append( + 'pip%s = %s' % (get_major_minor_version(), pip_script) + ) + # Delete any other versioned pip entry points + pip_ep = [k for k in console if re.match(r'pip(\d(\.\d)?)?$', k)] + for k in pip_ep: + del console[k] + easy_install_script = console.pop('easy_install', None) + if easy_install_script: + if "ENSUREPIP_OPTIONS" not in os.environ: + scripts_to_generate.append( + 'easy_install = ' + easy_install_script + ) + + scripts_to_generate.append( + 'easy_install-%s = %s' % ( + get_major_minor_version(), easy_install_script + ) + ) + # Delete any other versioned easy_install entry points + easy_install_ep = [ + k for k in console if re.match(r'easy_install(-\d\.\d)?$', k) + ] + for k in easy_install_ep: + del console[k] + + # Generate the console and GUI entry points specified in the wheel + scripts_to_generate.extend( + '%s = %s' % kv for kv in console.items() + ) + + gui_scripts_to_generate = [ + '%s = %s' % kv for kv in gui.items() + ] + + generated_console_scripts = [] # type: List[str] + + try: + generated_console_scripts = maker.make_multiple(scripts_to_generate) + generated.extend(generated_console_scripts) + + generated.extend( + maker.make_multiple(gui_scripts_to_generate, {'gui': True}) + ) + except MissingCallableSuffix as e: + entry = e.args[0] + raise InstallationError( + "Invalid script entry point: {} for req: {} - A callable " + "suffix is required. Cf https://packaging.python.org/en/" + "latest/distributing.html#console-scripts for more " + "information.".format(entry, req) + ) + + if warn_script_location: + msg = message_about_scripts_not_on_PATH(generated_console_scripts) + if msg is not None: + logger.warning(msg) + + # Record pip as the installer + installer = os.path.join(info_dir[0], 'INSTALLER') + temp_installer = os.path.join(info_dir[0], 'INSTALLER.pip') + with open(temp_installer, 'wb') as installer_file: + installer_file.write(b'pip\n') + shutil.move(temp_installer, installer) + generated.append(installer) + + # Record details of all files installed + record = os.path.join(info_dir[0], 'RECORD') + temp_record = os.path.join(info_dir[0], 'RECORD.pip') + with open_for_csv(record, 'r') as record_in: + with open_for_csv(temp_record, 'w+') as record_out: + reader = csv.reader(record_in) + outrows = get_csv_rows_for_installed( + reader, installed=installed, changed=changed, + generated=generated, lib_dir=lib_dir, + ) + writer = csv.writer(record_out) + # Sort to simplify testing. + for row in sorted_outrows(outrows): + writer.writerow(row) + shutil.move(temp_record, record) + + +def wheel_version(source_dir): + # type: (Optional[str]) -> Optional[Tuple[int, ...]] + """ + Return the Wheel-Version of an extracted wheel, if possible. + + Otherwise, return None if we couldn't parse / extract it. + """ + try: + dist = [d for d in pkg_resources.find_on_path(None, source_dir)][0] + + wheel_data = dist.get_metadata('WHEEL') + wheel_data = Parser().parsestr(wheel_data) + + version = wheel_data['Wheel-Version'].strip() + version = tuple(map(int, version.split('.'))) + return version + except Exception: + return None + + +def check_compatibility(version, name): + # type: (Optional[Tuple[int, ...]], str) -> None + """ + Raises errors or warns if called with an incompatible Wheel-Version. + + Pip should refuse to install a Wheel-Version that's a major series + ahead of what it's compatible with (e.g 2.0 > 1.1); and warn when + installing a version only minor version ahead (e.g 1.2 > 1.1). + + version: a 2-tuple representing a Wheel-Version (Major, Minor) + name: name of wheel or package to raise exception about + + :raises UnsupportedWheel: when an incompatible Wheel-Version is given + """ + if not version: + raise UnsupportedWheel( + "%s is in an unsupported or invalid wheel" % name + ) + if version[0] > VERSION_COMPATIBLE[0]: + raise UnsupportedWheel( + "%s's Wheel-Version (%s) is not compatible with this version " + "of pip" % (name, '.'.join(map(str, version))) + ) + elif version > VERSION_COMPATIBLE: + logger.warning( + 'Installing from a newer Wheel-Version (%s)', + '.'.join(map(str, version)), + ) + + +def format_tag(file_tag): + # type: (Tuple[str, ...]) -> str + """ + Format three tags in the form "--". + + :param file_tag: A 3-tuple of tags (python_tag, abi_tag, platform_tag). + """ + return '-'.join(file_tag) + + +class Wheel(object): + """A wheel file""" + + # TODO: Maybe move the class into the models sub-package + # TODO: Maybe move the install code into this class + + wheel_file_re = re.compile( + r"""^(?P(?P.+?)-(?P.*?)) + ((-(?P\d[^-]*?))?-(?P.+?)-(?P.+?)-(?P.+?) + \.whl|\.dist-info)$""", + re.VERBOSE + ) + + def __init__(self, filename): + # type: (str) -> None + """ + :raises InvalidWheelFilename: when the filename is invalid for a wheel + """ + wheel_info = self.wheel_file_re.match(filename) + if not wheel_info: + raise InvalidWheelFilename( + "%s is not a valid wheel filename." % filename + ) + self.filename = filename + self.name = wheel_info.group('name').replace('_', '-') + # we'll assume "_" means "-" due to wheel naming scheme + # (https://github.com/pypa/pip/issues/1150) + self.version = wheel_info.group('ver').replace('_', '-') + self.build_tag = wheel_info.group('build') + self.pyversions = wheel_info.group('pyver').split('.') + self.abis = wheel_info.group('abi').split('.') + self.plats = wheel_info.group('plat').split('.') + + # All the tag combinations from this file + self.file_tags = { + (x, y, z) for x in self.pyversions + for y in self.abis for z in self.plats + } + + def get_formatted_file_tags(self): + # type: () -> List[str] + """ + Return the wheel's tags as a sorted list of strings. + """ + return sorted(format_tag(tag) for tag in self.file_tags) + + def support_index_min(self, tags): + # type: (List[Pep425Tag]) -> int + """ + Return the lowest index that one of the wheel's file_tag combinations + achieves in the given list of supported tags. + + For example, if there are 8 supported tags and one of the file tags + is first in the list, then return 0. + + :param tags: the PEP 425 tags to check the wheel against, in order + with most preferred first. + + :raises ValueError: If none of the wheel's file tags match one of + the supported tags. + """ + return min(tags.index(tag) for tag in self.file_tags if tag in tags) + + def supported(self, tags): + # type: (List[Pep425Tag]) -> bool + """ + Return whether the wheel is compatible with one of the given tags. + + :param tags: the PEP 425 tags to check the wheel against. + """ + return not self.file_tags.isdisjoint(tags) + + +def _contains_egg_info( + s, _egg_info_re=re.compile(r'([a-z0-9_.]+)-([a-z0-9_.!+-]+)', re.I)): + """Determine whether the string looks like an egg_info. + + :param s: The string to parse. E.g. foo-2.1 + """ + return bool(_egg_info_re.search(s)) + + +def should_use_ephemeral_cache( + req, # type: InstallRequirement + should_unpack, # type: bool + cache_available, # type: bool + check_binary_allowed, # type: BinaryAllowedPredicate +): + # type: (...) -> Optional[bool] + """ + Return whether to build an InstallRequirement object using the + ephemeral cache. + + :param cache_available: whether a cache directory is available for the + should_unpack=True case. + + :return: True or False to build the requirement with ephem_cache=True + or False, respectively; or None not to build the requirement. + """ + if req.constraint: + # never build requirements that are merely constraints + return None + if req.is_wheel: + if not should_unpack: + logger.info( + 'Skipping %s, due to already being wheel.', req.name, + ) + return None + if not should_unpack: + # i.e. pip wheel, not pip install; + # return False, knowing that the caller will never cache + # in this case anyway, so this return merely means "build it". + # TODO improve this behavior + return False + + if req.editable or not req.source_dir: + return None + + if not check_binary_allowed(req): + logger.info( + "Skipping wheel build for %s, due to binaries " + "being disabled for it.", req.name, + ) + return None + + if req.link and req.link.is_vcs: + # VCS checkout. Build wheel just for this run. + return True + + link = req.link + base, ext = link.splitext() + if cache_available and _contains_egg_info(base): + return False + + # Otherwise, build the wheel just for this run using the ephemeral + # cache since we are either in the case of e.g. a local directory, or + # no cache directory is available to use. + return True + + +def format_command_result( + command_args, # type: List[str] + command_output, # type: str +): + # type: (...) -> str + """ + Format command information for logging. + """ + command_desc = format_command_args(command_args) + text = 'Command arguments: {}\n'.format(command_desc) + + if not command_output: + text += 'Command output: None' + elif logger.getEffectiveLevel() > logging.DEBUG: + text += 'Command output: [use --verbose to show]' + else: + if not command_output.endswith('\n'): + command_output += '\n' + text += 'Command output:\n{}{}'.format(command_output, LOG_DIVIDER) + + return text + + +def get_legacy_build_wheel_path( + names, # type: List[str] + temp_dir, # type: str + req, # type: InstallRequirement + command_args, # type: List[str] + command_output, # type: str +): + # type: (...) -> Optional[str] + """ + Return the path to the wheel in the temporary build directory. + """ + # Sort for determinism. + names = sorted(names) + if not names: + msg = ( + 'Legacy build of wheel for {!r} created no files.\n' + ).format(req.name) + msg += format_command_result(command_args, command_output) + logger.warning(msg) + return None + + if len(names) > 1: + msg = ( + 'Legacy build of wheel for {!r} created more than one file.\n' + 'Filenames (choosing first): {}\n' + ).format(req.name, names) + msg += format_command_result(command_args, command_output) + logger.warning(msg) + + return os.path.join(temp_dir, names[0]) + + +def _always_true(_): + return True + + +class WheelBuilder(object): + """Build wheels from a RequirementSet.""" + + def __init__( + self, + preparer, # type: RequirementPreparer + wheel_cache, # type: WheelCache + build_options=None, # type: Optional[List[str]] + global_options=None, # type: Optional[List[str]] + check_binary_allowed=None, # type: Optional[BinaryAllowedPredicate] + no_clean=False # type: bool + ): + # type: (...) -> None + if check_binary_allowed is None: + # Binaries allowed by default. + check_binary_allowed = _always_true + + self.preparer = preparer + self.wheel_cache = wheel_cache + + self._wheel_dir = preparer.wheel_download_dir + + self.build_options = build_options or [] + self.global_options = global_options or [] + self.check_binary_allowed = check_binary_allowed + self.no_clean = no_clean + + def _build_one(self, req, output_dir, python_tag=None): + """Build one wheel. + + :return: The filename of the built wheel, or None if the build failed. + """ + # Install build deps into temporary directory (PEP 518) + with req.build_env: + return self._build_one_inside_env(req, output_dir, + python_tag=python_tag) + + def _build_one_inside_env(self, req, output_dir, python_tag=None): + with TempDirectory(kind="wheel") as temp_dir: + if req.use_pep517: + builder = self._build_one_pep517 + else: + builder = self._build_one_legacy + wheel_path = builder(req, temp_dir.path, python_tag=python_tag) + if wheel_path is not None: + wheel_name = os.path.basename(wheel_path) + dest_path = os.path.join(output_dir, wheel_name) + try: + wheel_hash, length = hash_file(wheel_path) + shutil.move(wheel_path, dest_path) + logger.info('Created wheel for %s: ' + 'filename=%s size=%d sha256=%s', + req.name, wheel_name, length, + wheel_hash.hexdigest()) + logger.info('Stored in directory: %s', output_dir) + return dest_path + except Exception: + pass + # Ignore return, we can't do anything else useful. + self._clean_one(req) + return None + + def _base_setup_args(self, req): + # NOTE: Eventually, we'd want to also -S to the flags here, when we're + # isolating. Currently, it breaks Python in virtualenvs, because it + # relies on site.py to find parts of the standard library outside the + # virtualenv. + return make_setuptools_shim_args( + req.setup_py_path, + global_options=self.global_options, + unbuffered_output=True + ) + + def _build_one_pep517(self, req, tempd, python_tag=None): + """Build one InstallRequirement using the PEP 517 build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + assert req.metadata_directory is not None + if self.build_options: + # PEP 517 does not support --build-options + logger.error('Cannot build wheel for %s using PEP 517 when ' + '--build-options is present' % (req.name,)) + return None + try: + logger.debug('Destination directory: %s', tempd) + + runner = runner_with_spinner_message( + 'Building wheel for {} (PEP 517)'.format(req.name) + ) + backend = req.pep517_backend + with backend.subprocess_runner(runner): + wheel_name = backend.build_wheel( + tempd, + metadata_directory=req.metadata_directory, + ) + if python_tag: + # General PEP 517 backends don't necessarily support + # a "--python-tag" option, so we rename the wheel + # file directly. + new_name = replace_python_tag(wheel_name, python_tag) + os.rename( + os.path.join(tempd, wheel_name), + os.path.join(tempd, new_name) + ) + # Reassign to simplify the return at the end of function + wheel_name = new_name + except Exception: + logger.error('Failed building wheel for %s', req.name) + return None + return os.path.join(tempd, wheel_name) + + def _build_one_legacy(self, req, tempd, python_tag=None): + """Build one InstallRequirement using the "legacy" build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + base_args = self._base_setup_args(req) + + spin_message = 'Building wheel for %s (setup.py)' % (req.name,) + with open_spinner(spin_message) as spinner: + logger.debug('Destination directory: %s', tempd) + wheel_args = base_args + ['bdist_wheel', '-d', tempd] \ + + self.build_options + + if python_tag is not None: + wheel_args += ["--python-tag", python_tag] + + try: + output = call_subprocess( + wheel_args, + cwd=req.unpacked_source_directory, + spinner=spinner, + ) + except Exception: + spinner.finish("error") + logger.error('Failed building wheel for %s', req.name) + return None + + names = os.listdir(tempd) + wheel_path = get_legacy_build_wheel_path( + names=names, + temp_dir=tempd, + req=req, + command_args=wheel_args, + command_output=output, + ) + return wheel_path + + def _clean_one(self, req): + base_args = self._base_setup_args(req) + + logger.info('Running setup.py clean for %s', req.name) + clean_args = base_args + ['clean', '--all'] + try: + call_subprocess(clean_args, cwd=req.source_dir) + return True + except Exception: + logger.error('Failed cleaning build dir for %s', req.name) + return False + + def build( + self, + requirements, # type: Iterable[InstallRequirement] + should_unpack=False # type: bool + ): + # type: (...) -> List[InstallRequirement] + """Build wheels. + + :param should_unpack: If True, after building the wheel, unpack it + and replace the sdist with the unpacked version in preparation + for installation. + :return: True if all the wheels built correctly. + """ + # pip install uses should_unpack=True. + # pip install never provides a _wheel_dir. + # pip wheel uses should_unpack=False. + # pip wheel always provides a _wheel_dir (via the preparer). + assert ( + (should_unpack and not self._wheel_dir) or + (not should_unpack and self._wheel_dir) + ) + + buildset = [] + cache_available = bool(self.wheel_cache.cache_dir) + + for req in requirements: + ephem_cache = should_use_ephemeral_cache( + req, + should_unpack=should_unpack, + cache_available=cache_available, + check_binary_allowed=self.check_binary_allowed, + ) + if ephem_cache is None: + continue + + # Determine where the wheel should go. + if should_unpack: + if ephem_cache: + output_dir = self.wheel_cache.get_ephem_path_for_link( + req.link + ) + else: + output_dir = self.wheel_cache.get_path_for_link(req.link) + else: + output_dir = self._wheel_dir + + buildset.append((req, output_dir)) + + if not buildset: + return [] + + # TODO by @pradyunsg + # Should break up this method into 2 separate methods. + + # Build the wheels. + logger.info( + 'Building wheels for collected packages: %s', + ', '.join([req.name for (req, _) in buildset]), + ) + + python_tag = None + if should_unpack: + python_tag = pep425tags.implementation_tag + + with indent_log(): + build_success, build_failure = [], [] + for req, output_dir in buildset: + try: + ensure_dir(output_dir) + except OSError as e: + logger.warning( + "Building wheel for %s failed: %s", + req.name, e, + ) + build_failure.append(req) + continue + + wheel_file = self._build_one( + req, output_dir, + python_tag=python_tag, + ) + if wheel_file: + build_success.append(req) + if should_unpack: + # XXX: This is mildly duplicative with prepare_files, + # but not close enough to pull out to a single common + # method. + # The code below assumes temporary source dirs - + # prevent it doing bad things. + if ( + req.source_dir and + not has_delete_marker_file(req.source_dir) + ): + raise AssertionError( + "bad source dir - missing marker") + # Delete the source we built the wheel from + req.remove_temporary_source() + # set the build directory again - name is known from + # the work prepare_files did. + req.source_dir = req.ensure_build_location( + self.preparer.build_dir + ) + # Update the link for this. + req.link = Link(path_to_url(wheel_file)) + assert req.link.is_wheel + # extract the wheel into the dir + unpack_file(req.link.file_path, req.source_dir) + else: + build_failure.append(req) + + # notify success/failure + if build_success: + logger.info( + 'Successfully built %s', + ' '.join([req.name for req in build_success]), + ) + if build_failure: + logger.info( + 'Failed to build %s', + ' '.join([req.name for req in build_failure]), + ) + # Return a list of requirements that failed to build + return build_failure diff --git a/my_env/Lib/site-packages/pip/_vendor/__init__.py b/my_env/Lib/site-packages/pip/_vendor/__init__.py new file mode 100644 index 000000000..a0fcb8e2c --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/__init__.py @@ -0,0 +1,109 @@ +""" +pip._vendor is for vendoring dependencies of pip to prevent needing pip to +depend on something external. + +Files inside of pip._vendor should be considered immutable and should only be +updated to versions from upstream. +""" +from __future__ import absolute_import + +import glob +import os.path +import sys + +# Downstream redistributors which have debundled our dependencies should also +# patch this value to be true. This will trigger the additional patching +# to cause things like "six" to be available as pip. +DEBUNDLED = False + +# By default, look in this directory for a bunch of .whl files which we will +# add to the beginning of sys.path before attempting to import anything. This +# is done to support downstream re-distributors like Debian and Fedora who +# wish to create their own Wheels for our dependencies to aid in debundling. +WHEEL_DIR = os.path.abspath(os.path.dirname(__file__)) + + +# Define a small helper function to alias our vendored modules to the real ones +# if the vendored ones do not exist. This idea of this was taken from +# https://github.com/kennethreitz/requests/pull/2567. +def vendored(modulename): + vendored_name = "{0}.{1}".format(__name__, modulename) + + try: + __import__(modulename, globals(), locals(), level=0) + except ImportError: + # We can just silently allow import failures to pass here. If we + # got to this point it means that ``import pip._vendor.whatever`` + # failed and so did ``import whatever``. Since we're importing this + # upfront in an attempt to alias imports, not erroring here will + # just mean we get a regular import error whenever pip *actually* + # tries to import one of these modules to use it, which actually + # gives us a better error message than we would have otherwise + # gotten. + pass + else: + sys.modules[vendored_name] = sys.modules[modulename] + base, head = vendored_name.rsplit(".", 1) + setattr(sys.modules[base], head, sys.modules[modulename]) + + +# If we're operating in a debundled setup, then we want to go ahead and trigger +# the aliasing of our vendored libraries as well as looking for wheels to add +# to our sys.path. This will cause all of this code to be a no-op typically +# however downstream redistributors can enable it in a consistent way across +# all platforms. +if DEBUNDLED: + # Actually look inside of WHEEL_DIR to find .whl files and add them to the + # front of our sys.path. + sys.path[:] = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path + + # Actually alias all of our vendored dependencies. + vendored("cachecontrol") + vendored("colorama") + vendored("contextlib2") + vendored("distlib") + vendored("distro") + vendored("html5lib") + vendored("six") + vendored("six.moves") + vendored("six.moves.urllib") + vendored("six.moves.urllib.parse") + vendored("packaging") + vendored("packaging.version") + vendored("packaging.specifiers") + vendored("pep517") + vendored("pkg_resources") + vendored("progress") + vendored("pytoml") + vendored("retrying") + vendored("requests") + vendored("requests.exceptions") + vendored("requests.packages") + vendored("requests.packages.urllib3") + vendored("requests.packages.urllib3._collections") + vendored("requests.packages.urllib3.connection") + vendored("requests.packages.urllib3.connectionpool") + vendored("requests.packages.urllib3.contrib") + vendored("requests.packages.urllib3.contrib.ntlmpool") + vendored("requests.packages.urllib3.contrib.pyopenssl") + vendored("requests.packages.urllib3.exceptions") + vendored("requests.packages.urllib3.fields") + vendored("requests.packages.urllib3.filepost") + vendored("requests.packages.urllib3.packages") + vendored("requests.packages.urllib3.packages.ordered_dict") + vendored("requests.packages.urllib3.packages.six") + vendored("requests.packages.urllib3.packages.ssl_match_hostname") + vendored("requests.packages.urllib3.packages.ssl_match_hostname." + "_implementation") + vendored("requests.packages.urllib3.poolmanager") + vendored("requests.packages.urllib3.request") + vendored("requests.packages.urllib3.response") + vendored("requests.packages.urllib3.util") + vendored("requests.packages.urllib3.util.connection") + vendored("requests.packages.urllib3.util.request") + vendored("requests.packages.urllib3.util.response") + vendored("requests.packages.urllib3.util.retry") + vendored("requests.packages.urllib3.util.ssl_") + vendored("requests.packages.urllib3.util.timeout") + vendored("requests.packages.urllib3.util.url") + vendored("urllib3") diff --git a/my_env/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..d98a8e20e Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/__pycache__/appdirs.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/__pycache__/appdirs.cpython-37.pyc new file mode 100644 index 000000000..3e51f1762 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/__pycache__/appdirs.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/__pycache__/contextlib2.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/__pycache__/contextlib2.cpython-37.pyc new file mode 100644 index 000000000..fe3c4c06d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/__pycache__/contextlib2.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/__pycache__/distro.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/__pycache__/distro.cpython-37.pyc new file mode 100644 index 000000000..52605ee8e Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/__pycache__/distro.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/__pycache__/ipaddress.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/__pycache__/ipaddress.cpython-37.pyc new file mode 100644 index 000000000..64f8d294d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/__pycache__/ipaddress.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-37.pyc new file mode 100644 index 000000000..2110d758e Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/__pycache__/retrying.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/__pycache__/retrying.cpython-37.pyc new file mode 100644 index 000000000..be2889437 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/__pycache__/retrying.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-37.pyc new file mode 100644 index 000000000..d51af78cf Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/appdirs.py b/my_env/Lib/site-packages/pip/_vendor/appdirs.py new file mode 100644 index 000000000..2bd391102 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/appdirs.py @@ -0,0 +1,604 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2005-2010 ActiveState Software Inc. +# Copyright (c) 2013 Eddy Petrișor + +"""Utilities for determining application-specific dirs. + +See for details and usage. +""" +# Dev Notes: +# - MSDN on where to store app data files: +# http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120 +# - Mac OS X: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html +# - XDG spec for Un*x: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html + +__version_info__ = (1, 4, 3) +__version__ = '.'.join(map(str, __version_info__)) + + +import sys +import os + +PY3 = sys.version_info[0] == 3 + +if PY3: + unicode = str + +if sys.platform.startswith('java'): + import platform + os_name = platform.java_ver()[3][0] + if os_name.startswith('Windows'): # "Windows XP", "Windows 7", etc. + system = 'win32' + elif os_name.startswith('Mac'): # "Mac OS X", etc. + system = 'darwin' + else: # "Linux", "SunOS", "FreeBSD", etc. + # Setting this to "linux2" is not ideal, but only Windows or Mac + # are actually checked for and the rest of the module expects + # *sys.platform* style strings. + system = 'linux2' +else: + system = sys.platform + + + +def user_data_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user data directories are: + Mac OS X: ~/Library/Application Support/ + Unix: ~/.local/share/ # or in $XDG_DATA_HOME, if defined + Win XP (not roaming): C:\Documents and Settings\\Application Data\\ + Win XP (roaming): C:\Documents and Settings\\Local Settings\Application Data\\ + Win 7 (not roaming): C:\Users\\AppData\Local\\ + Win 7 (roaming): C:\Users\\AppData\Roaming\\ + + For Unix, we follow the XDG spec and support $XDG_DATA_HOME. + That means, by default "~/.local/share/". + """ + if system == "win32": + if appauthor is None: + appauthor = appname + const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" + path = os.path.normpath(_get_win_folder(const)) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('~/Library/Application Support/') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_DATA_HOME', os.path.expanduser("~/.local/share")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_data_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of data dirs should be + returned. By default, the first item from XDG_DATA_DIRS is + returned, or '/usr/local/share/', + if XDG_DATA_DIRS is not set + + Typical site data directories are: + Mac OS X: /Library/Application Support/ + Unix: /usr/local/share/ or /usr/share/ + Win XP: C:\Documents and Settings\All Users\Application Data\\ + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + Win 7: C:\ProgramData\\ # Hidden, but writeable on Win 7. + + For Unix, this is using the $XDG_DATA_DIRS[0] default. + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('/Library/Application Support') + if appname: + path = os.path.join(path, appname) + else: + # XDG default for $XDG_DATA_DIRS + # only first, if multipath is False + path = os.getenv('XDG_DATA_DIRS', + os.pathsep.join(['/usr/local/share', '/usr/share'])) + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + if appname and version: + path = os.path.join(path, version) + return path + + +def user_config_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific config dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user config directories are: + Mac OS X: same as user_data_dir + Unix: ~/.config/ # or in $XDG_CONFIG_HOME, if defined + Win *: same as user_data_dir + + For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. + That means, by default "~/.config/". + """ + if system in ["win32", "darwin"]: + path = user_data_dir(appname, appauthor, None, roaming) + else: + path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser("~/.config")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_config_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of config dirs should be + returned. By default, the first item from XDG_CONFIG_DIRS is + returned, or '/etc/xdg/', if XDG_CONFIG_DIRS is not set + + Typical site config directories are: + Mac OS X: same as site_data_dir + Unix: /etc/xdg/ or $XDG_CONFIG_DIRS[i]/ for each value in + $XDG_CONFIG_DIRS + Win *: same as site_data_dir + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + + For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system in ["win32", "darwin"]: + path = site_data_dir(appname, appauthor) + if appname and version: + path = os.path.join(path, version) + else: + # XDG default for $XDG_CONFIG_DIRS + # only first, if multipath is False + path = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + +def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific cache dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Cache" to the base app data dir for Windows. See + discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Caches/ + Unix: ~/.cache/ (XDG default) + Win XP: C:\Documents and Settings\\Local Settings\Application Data\\\Cache + Vista: C:\Users\\AppData\Local\\\Cache + + On Windows the only suggestion in the MSDN docs is that local settings go in + the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming + app data dir (the default returned by `user_data_dir` above). Apps typically + put cache data somewhere *under* the given dir here. Some examples: + ...\Mozilla\Firefox\Profiles\\Cache + ...\Acme\SuperApp\Cache\1.0 + OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. + This can be disabled with the `opinion=False` option. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + if opinion: + path = os.path.join(path, "Cache") + elif system == 'darwin': + path = os.path.expanduser('~/Library/Caches') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache')) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def user_state_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific state dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user state directories are: + Mac OS X: same as user_data_dir + Unix: ~/.local/state/ # or in $XDG_STATE_HOME, if defined + Win *: same as user_data_dir + + For Unix, we follow this Debian proposal + to extend the XDG spec and support $XDG_STATE_HOME. + + That means, by default "~/.local/state/". + """ + if system in ["win32", "darwin"]: + path = user_data_dir(appname, appauthor, None, roaming) + else: + path = os.getenv('XDG_STATE_HOME', os.path.expanduser("~/.local/state")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def user_log_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific log dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Logs" to the base app data dir for Windows, and "log" to the + base cache dir for Unix. See discussion below. + + Typical user log directories are: + Mac OS X: ~/Library/Logs/ + Unix: ~/.cache//log # or under $XDG_CACHE_HOME if defined + Win XP: C:\Documents and Settings\\Local Settings\Application Data\\\Logs + Vista: C:\Users\\AppData\Local\\\Logs + + On Windows the only suggestion in the MSDN docs is that local settings + go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in + examples of what some windows apps use for a logs dir.) + + OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA` + value for Windows and appends "log" to the user cache dir for Unix. + This can be disabled with the `opinion=False` option. + """ + if system == "darwin": + path = os.path.join( + os.path.expanduser('~/Library/Logs'), + appname) + elif system == "win32": + path = user_data_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "Logs") + else: + path = user_cache_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "log") + if appname and version: + path = os.path.join(path, version) + return path + + +class AppDirs(object): + """Convenience wrapper for getting application dirs.""" + def __init__(self, appname=None, appauthor=None, version=None, + roaming=False, multipath=False): + self.appname = appname + self.appauthor = appauthor + self.version = version + self.roaming = roaming + self.multipath = multipath + + @property + def user_data_dir(self): + return user_data_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_data_dir(self): + return site_data_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_config_dir(self): + return user_config_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_config_dir(self): + return site_config_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_cache_dir(self): + return user_cache_dir(self.appname, self.appauthor, + version=self.version) + + @property + def user_state_dir(self): + return user_state_dir(self.appname, self.appauthor, + version=self.version) + + @property + def user_log_dir(self): + return user_log_dir(self.appname, self.appauthor, + version=self.version) + + +#---- internal support stuff + +def _get_win_folder_from_registry(csidl_name): + """This is a fallback technique at best. I'm not sure if using the + registry for this guarantees us the correct answer for all CSIDL_* + names. + """ + if PY3: + import winreg as _winreg + else: + import _winreg + + shell_folder_name = { + "CSIDL_APPDATA": "AppData", + "CSIDL_COMMON_APPDATA": "Common AppData", + "CSIDL_LOCAL_APPDATA": "Local AppData", + }[csidl_name] + + key = _winreg.OpenKey( + _winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" + ) + dir, type = _winreg.QueryValueEx(key, shell_folder_name) + return dir + + +def _get_win_folder_with_pywin32(csidl_name): + from win32com.shell import shellcon, shell + dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0) + # Try to make this a unicode path because SHGetFolderPath does + # not return unicode strings when there is unicode data in the + # path. + try: + dir = unicode(dir) + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + try: + import win32api + dir = win32api.GetShortPathName(dir) + except ImportError: + pass + except UnicodeError: + pass + return dir + + +def _get_win_folder_with_ctypes(csidl_name): + import ctypes + + csidl_const = { + "CSIDL_APPDATA": 26, + "CSIDL_COMMON_APPDATA": 35, + "CSIDL_LOCAL_APPDATA": 28, + }[csidl_name] + + buf = ctypes.create_unicode_buffer(1024) + ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in buf: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf2 = ctypes.create_unicode_buffer(1024) + if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + buf = buf2 + + return buf.value + +def _get_win_folder_with_jna(csidl_name): + import array + from com.sun import jna + from com.sun.jna.platform import win32 + + buf_size = win32.WinDef.MAX_PATH * 2 + buf = array.zeros('c', buf_size) + shell = win32.Shell32.INSTANCE + shell.SHGetFolderPath(None, getattr(win32.ShlObj, csidl_name), None, win32.ShlObj.SHGFP_TYPE_CURRENT, buf) + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf = array.zeros('c', buf_size) + kernel = win32.Kernel32.INSTANCE + if kernel.GetShortPathName(dir, buf, buf_size): + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + return dir + +if system == "win32": + try: + from ctypes import windll + _get_win_folder = _get_win_folder_with_ctypes + except ImportError: + try: + import com.sun.jna + _get_win_folder = _get_win_folder_with_jna + except ImportError: + _get_win_folder = _get_win_folder_from_registry + + +#---- self test code + +if __name__ == "__main__": + appname = "MyApp" + appauthor = "MyCompany" + + props = ("user_data_dir", + "user_config_dir", + "user_cache_dir", + "user_state_dir", + "user_log_dir", + "site_data_dir", + "site_config_dir") + + print("-- app dirs %s --" % __version__) + + print("-- app dirs (with optional 'version')") + dirs = AppDirs(appname, appauthor, version="1.0") + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'version')") + dirs = AppDirs(appname, appauthor) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'appauthor')") + dirs = AppDirs(appname) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (with disabled 'appauthor')") + dirs = AppDirs(appname, appauthor=False) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py new file mode 100644 index 000000000..8fdee66ff --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py @@ -0,0 +1,11 @@ +"""CacheControl import Interface. + +Make it easy to import from cachecontrol without long namespaces. +""" +__author__ = "Eric Larson" +__email__ = "eric@ionrock.org" +__version__ = "0.12.5" + +from .wrapper import CacheControl +from .adapter import CacheControlAdapter +from .controller import CacheController diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..2a5ae5ec4 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-37.pyc new file mode 100644 index 000000000..1e30a8564 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-37.pyc new file mode 100644 index 000000000..8c0e3e590 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-37.pyc new file mode 100644 index 000000000..4be6922f7 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-37.pyc new file mode 100644 index 000000000..b25b8f78d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-37.pyc new file mode 100644 index 000000000..d5665f28d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-37.pyc new file mode 100644 index 000000000..8b682e8d2 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-37.pyc new file mode 100644 index 000000000..3dac6b718 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-37.pyc new file mode 100644 index 000000000..1d0d1d951 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-37.pyc new file mode 100644 index 000000000..e7f1dfb64 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py new file mode 100644 index 000000000..f1e0ad94a --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py @@ -0,0 +1,57 @@ +import logging + +from pip._vendor import requests + +from pip._vendor.cachecontrol.adapter import CacheControlAdapter +from pip._vendor.cachecontrol.cache import DictCache +from pip._vendor.cachecontrol.controller import logger + +from argparse import ArgumentParser + + +def setup_logging(): + logger.setLevel(logging.DEBUG) + handler = logging.StreamHandler() + logger.addHandler(handler) + + +def get_session(): + adapter = CacheControlAdapter( + DictCache(), cache_etags=True, serializer=None, heuristic=None + ) + sess = requests.Session() + sess.mount("http://", adapter) + sess.mount("https://", adapter) + + sess.cache_controller = adapter.controller + return sess + + +def get_args(): + parser = ArgumentParser() + parser.add_argument("url", help="The URL to try and cache") + return parser.parse_args() + + +def main(args=None): + args = get_args() + sess = get_session() + + # Make a request to get a response + resp = sess.get(args.url) + + # Turn on logging + setup_logging() + + # try setting the cache + sess.cache_controller.cache_response(resp.request, resp.raw) + + # Now try to get it + if sess.cache_controller.cached_request(resp.request): + print("Cached!") + else: + print("Not cached :(") + + +if __name__ == "__main__": + main() diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py new file mode 100644 index 000000000..780eb2883 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py @@ -0,0 +1,133 @@ +import types +import functools +import zlib + +from pip._vendor.requests.adapters import HTTPAdapter + +from .controller import CacheController +from .cache import DictCache +from .filewrapper import CallbackFileWrapper + + +class CacheControlAdapter(HTTPAdapter): + invalidating_methods = {"PUT", "DELETE"} + + def __init__( + self, + cache=None, + cache_etags=True, + controller_class=None, + serializer=None, + heuristic=None, + cacheable_methods=None, + *args, + **kw + ): + super(CacheControlAdapter, self).__init__(*args, **kw) + self.cache = cache or DictCache() + self.heuristic = heuristic + self.cacheable_methods = cacheable_methods or ("GET",) + + controller_factory = controller_class or CacheController + self.controller = controller_factory( + self.cache, cache_etags=cache_etags, serializer=serializer + ) + + def send(self, request, cacheable_methods=None, **kw): + """ + Send a request. Use the request information to see if it + exists in the cache and cache the response if we need to and can. + """ + cacheable = cacheable_methods or self.cacheable_methods + if request.method in cacheable: + try: + cached_response = self.controller.cached_request(request) + except zlib.error: + cached_response = None + if cached_response: + return self.build_response(request, cached_response, from_cache=True) + + # check for etags and add headers if appropriate + request.headers.update(self.controller.conditional_headers(request)) + + resp = super(CacheControlAdapter, self).send(request, **kw) + + return resp + + def build_response( + self, request, response, from_cache=False, cacheable_methods=None + ): + """ + Build a response by making a request or using the cache. + + This will end up calling send and returning a potentially + cached response + """ + cacheable = cacheable_methods or self.cacheable_methods + if not from_cache and request.method in cacheable: + # Check for any heuristics that might update headers + # before trying to cache. + if self.heuristic: + response = self.heuristic.apply(response) + + # apply any expiration heuristics + if response.status == 304: + # We must have sent an ETag request. This could mean + # that we've been expired already or that we simply + # have an etag. In either case, we want to try and + # update the cache if that is the case. + cached_response = self.controller.update_cached_response( + request, response + ) + + if cached_response is not response: + from_cache = True + + # We are done with the server response, read a + # possible response body (compliant servers will + # not return one, but we cannot be 100% sure) and + # release the connection back to the pool. + response.read(decode_content=False) + response.release_conn() + + response = cached_response + + # We always cache the 301 responses + elif response.status == 301: + self.controller.cache_response(request, response) + else: + # Wrap the response file with a wrapper that will cache the + # response when the stream has been consumed. + response._fp = CallbackFileWrapper( + response._fp, + functools.partial( + self.controller.cache_response, request, response + ), + ) + if response.chunked: + super_update_chunk_length = response._update_chunk_length + + def _update_chunk_length(self): + super_update_chunk_length() + if self.chunk_left == 0: + self._fp._close() + + response._update_chunk_length = types.MethodType( + _update_chunk_length, response + ) + + resp = super(CacheControlAdapter, self).build_response(request, response) + + # See if we should invalidate the cache. + if request.method in self.invalidating_methods and resp.ok: + cache_url = self.controller.cache_url(request.url) + self.cache.delete(cache_url) + + # Give the request a from_cache attr to let people use it + resp.from_cache = from_cache + + return resp + + def close(self): + self.cache.close() + super(CacheControlAdapter, self).close() diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/cache.py b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/cache.py new file mode 100644 index 000000000..94e07732d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/cache.py @@ -0,0 +1,39 @@ +""" +The cache object API for implementing caches. The default is a thread +safe in-memory dictionary. +""" +from threading import Lock + + +class BaseCache(object): + + def get(self, key): + raise NotImplementedError() + + def set(self, key, value): + raise NotImplementedError() + + def delete(self, key): + raise NotImplementedError() + + def close(self): + pass + + +class DictCache(BaseCache): + + def __init__(self, init_dict=None): + self.lock = Lock() + self.data = init_dict or {} + + def get(self, key): + return self.data.get(key, None) + + def set(self, key, value): + with self.lock: + self.data.update({key: value}) + + def delete(self, key): + with self.lock: + if key in self.data: + self.data.pop(key) diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py new file mode 100644 index 000000000..0e1658fa5 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py @@ -0,0 +1,2 @@ +from .file_cache import FileCache # noqa +from .redis_cache import RedisCache # noqa diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..bcf3c626f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-37.pyc new file mode 100644 index 000000000..fc3bb2168 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-37.pyc new file mode 100644 index 000000000..ce31b759f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py new file mode 100644 index 000000000..607b94524 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py @@ -0,0 +1,146 @@ +import hashlib +import os +from textwrap import dedent + +from ..cache import BaseCache +from ..controller import CacheController + +try: + FileNotFoundError +except NameError: + # py2.X + FileNotFoundError = (IOError, OSError) + + +def _secure_open_write(filename, fmode): + # We only want to write to this file, so open it in write only mode + flags = os.O_WRONLY + + # os.O_CREAT | os.O_EXCL will fail if the file already exists, so we only + # will open *new* files. + # We specify this because we want to ensure that the mode we pass is the + # mode of the file. + flags |= os.O_CREAT | os.O_EXCL + + # Do not follow symlinks to prevent someone from making a symlink that + # we follow and insecurely open a cache file. + if hasattr(os, "O_NOFOLLOW"): + flags |= os.O_NOFOLLOW + + # On Windows we'll mark this file as binary + if hasattr(os, "O_BINARY"): + flags |= os.O_BINARY + + # Before we open our file, we want to delete any existing file that is + # there + try: + os.remove(filename) + except (IOError, OSError): + # The file must not exist already, so we can just skip ahead to opening + pass + + # Open our file, the use of os.O_CREAT | os.O_EXCL will ensure that if a + # race condition happens between the os.remove and this line, that an + # error will be raised. Because we utilize a lockfile this should only + # happen if someone is attempting to attack us. + fd = os.open(filename, flags, fmode) + try: + return os.fdopen(fd, "wb") + + except: + # An error occurred wrapping our FD in a file object + os.close(fd) + raise + + +class FileCache(BaseCache): + + def __init__( + self, + directory, + forever=False, + filemode=0o0600, + dirmode=0o0700, + use_dir_lock=None, + lock_class=None, + ): + + if use_dir_lock is not None and lock_class is not None: + raise ValueError("Cannot use use_dir_lock and lock_class together") + + try: + from lockfile import LockFile + from lockfile.mkdirlockfile import MkdirLockFile + except ImportError: + notice = dedent( + """ + NOTE: In order to use the FileCache you must have + lockfile installed. You can install it via pip: + pip install lockfile + """ + ) + raise ImportError(notice) + + else: + if use_dir_lock: + lock_class = MkdirLockFile + + elif lock_class is None: + lock_class = LockFile + + self.directory = directory + self.forever = forever + self.filemode = filemode + self.dirmode = dirmode + self.lock_class = lock_class + + @staticmethod + def encode(x): + return hashlib.sha224(x.encode()).hexdigest() + + def _fn(self, name): + # NOTE: This method should not change as some may depend on it. + # See: https://github.com/ionrock/cachecontrol/issues/63 + hashed = self.encode(name) + parts = list(hashed[:5]) + [hashed] + return os.path.join(self.directory, *parts) + + def get(self, key): + name = self._fn(key) + try: + with open(name, "rb") as fh: + return fh.read() + + except FileNotFoundError: + return None + + def set(self, key, value): + name = self._fn(key) + + # Make sure the directory exists + try: + os.makedirs(os.path.dirname(name), self.dirmode) + except (IOError, OSError): + pass + + with self.lock_class(name) as lock: + # Write our actual file + with _secure_open_write(lock.path, self.filemode) as fh: + fh.write(value) + + def delete(self, key): + name = self._fn(key) + if not self.forever: + try: + os.remove(name) + except FileNotFoundError: + pass + + +def url_to_file_path(url, filecache): + """Return the file cache path based on the URL. + + This does not ensure the file exists! + """ + key = CacheController.cache_url(url) + return filecache._fn(key) diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py new file mode 100644 index 000000000..ed705ce7d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py @@ -0,0 +1,33 @@ +from __future__ import division + +from datetime import datetime +from pip._vendor.cachecontrol.cache import BaseCache + + +class RedisCache(BaseCache): + + def __init__(self, conn): + self.conn = conn + + def get(self, key): + return self.conn.get(key) + + def set(self, key, value, expires=None): + if not expires: + self.conn.set(key, value) + else: + expires = expires - datetime.utcnow() + self.conn.setex(key, int(expires.total_seconds()), value) + + def delete(self, key): + self.conn.delete(key) + + def clear(self): + """Helper for clearing all the keys in a database. Use with + caution!""" + for key in self.conn.keys(): + self.conn.delete(key) + + def close(self): + """Redis uses connection pooling, no need to close the connection.""" + pass diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/compat.py b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/compat.py new file mode 100644 index 000000000..33b5aed0a --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/compat.py @@ -0,0 +1,29 @@ +try: + from urllib.parse import urljoin +except ImportError: + from urlparse import urljoin + + +try: + import cPickle as pickle +except ImportError: + import pickle + + +# Handle the case where the requests module has been patched to not have +# urllib3 bundled as part of its source. +try: + from pip._vendor.requests.packages.urllib3.response import HTTPResponse +except ImportError: + from pip._vendor.urllib3.response import HTTPResponse + +try: + from pip._vendor.requests.packages.urllib3.util import is_fp_closed +except ImportError: + from pip._vendor.urllib3.util import is_fp_closed + +# Replicate some six behaviour +try: + text_type = unicode +except NameError: + text_type = str diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/controller.py b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/controller.py new file mode 100644 index 000000000..1b2b943cb --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/controller.py @@ -0,0 +1,367 @@ +""" +The httplib2 algorithms ported for use with requests. +""" +import logging +import re +import calendar +import time +from email.utils import parsedate_tz + +from pip._vendor.requests.structures import CaseInsensitiveDict + +from .cache import DictCache +from .serialize import Serializer + + +logger = logging.getLogger(__name__) + +URI = re.compile(r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?") + + +def parse_uri(uri): + """Parses a URI using the regex given in Appendix B of RFC 3986. + + (scheme, authority, path, query, fragment) = parse_uri(uri) + """ + groups = URI.match(uri).groups() + return (groups[1], groups[3], groups[4], groups[6], groups[8]) + + +class CacheController(object): + """An interface to see if request should cached or not. + """ + + def __init__( + self, cache=None, cache_etags=True, serializer=None, status_codes=None + ): + self.cache = cache or DictCache() + self.cache_etags = cache_etags + self.serializer = serializer or Serializer() + self.cacheable_status_codes = status_codes or (200, 203, 300, 301) + + @classmethod + def _urlnorm(cls, uri): + """Normalize the URL to create a safe key for the cache""" + (scheme, authority, path, query, fragment) = parse_uri(uri) + if not scheme or not authority: + raise Exception("Only absolute URIs are allowed. uri = %s" % uri) + + scheme = scheme.lower() + authority = authority.lower() + + if not path: + path = "/" + + # Could do syntax based normalization of the URI before + # computing the digest. See Section 6.2.2 of Std 66. + request_uri = query and "?".join([path, query]) or path + defrag_uri = scheme + "://" + authority + request_uri + + return defrag_uri + + @classmethod + def cache_url(cls, uri): + return cls._urlnorm(uri) + + def parse_cache_control(self, headers): + known_directives = { + # https://tools.ietf.org/html/rfc7234#section-5.2 + "max-age": (int, True), + "max-stale": (int, False), + "min-fresh": (int, True), + "no-cache": (None, False), + "no-store": (None, False), + "no-transform": (None, False), + "only-if-cached": (None, False), + "must-revalidate": (None, False), + "public": (None, False), + "private": (None, False), + "proxy-revalidate": (None, False), + "s-maxage": (int, True), + } + + cc_headers = headers.get("cache-control", headers.get("Cache-Control", "")) + + retval = {} + + for cc_directive in cc_headers.split(","): + if not cc_directive.strip(): + continue + + parts = cc_directive.split("=", 1) + directive = parts[0].strip() + + try: + typ, required = known_directives[directive] + except KeyError: + logger.debug("Ignoring unknown cache-control directive: %s", directive) + continue + + if not typ or not required: + retval[directive] = None + if typ: + try: + retval[directive] = typ(parts[1].strip()) + except IndexError: + if required: + logger.debug( + "Missing value for cache-control " "directive: %s", + directive, + ) + except ValueError: + logger.debug( + "Invalid value for cache-control directive " "%s, must be %s", + directive, + typ.__name__, + ) + + return retval + + def cached_request(self, request): + """ + Return a cached response if it exists in the cache, otherwise + return False. + """ + cache_url = self.cache_url(request.url) + logger.debug('Looking up "%s" in the cache', cache_url) + cc = self.parse_cache_control(request.headers) + + # Bail out if the request insists on fresh data + if "no-cache" in cc: + logger.debug('Request header has "no-cache", cache bypassed') + return False + + if "max-age" in cc and cc["max-age"] == 0: + logger.debug('Request header has "max_age" as 0, cache bypassed') + return False + + # Request allows serving from the cache, let's see if we find something + cache_data = self.cache.get(cache_url) + if cache_data is None: + logger.debug("No cache entry available") + return False + + # Check whether it can be deserialized + resp = self.serializer.loads(request, cache_data) + if not resp: + logger.warning("Cache entry deserialization failed, entry ignored") + return False + + # If we have a cached 301, return it immediately. We don't + # need to test our response for other headers b/c it is + # intrinsically "cacheable" as it is Permanent. + # See: + # https://tools.ietf.org/html/rfc7231#section-6.4.2 + # + # Client can try to refresh the value by repeating the request + # with cache busting headers as usual (ie no-cache). + if resp.status == 301: + msg = ( + 'Returning cached "301 Moved Permanently" response ' + "(ignoring date and etag information)" + ) + logger.debug(msg) + return resp + + headers = CaseInsensitiveDict(resp.headers) + if not headers or "date" not in headers: + if "etag" not in headers: + # Without date or etag, the cached response can never be used + # and should be deleted. + logger.debug("Purging cached response: no date or etag") + self.cache.delete(cache_url) + logger.debug("Ignoring cached response: no date") + return False + + now = time.time() + date = calendar.timegm(parsedate_tz(headers["date"])) + current_age = max(0, now - date) + logger.debug("Current age based on date: %i", current_age) + + # TODO: There is an assumption that the result will be a + # urllib3 response object. This may not be best since we + # could probably avoid instantiating or constructing the + # response until we know we need it. + resp_cc = self.parse_cache_control(headers) + + # determine freshness + freshness_lifetime = 0 + + # Check the max-age pragma in the cache control header + if "max-age" in resp_cc: + freshness_lifetime = resp_cc["max-age"] + logger.debug("Freshness lifetime from max-age: %i", freshness_lifetime) + + # If there isn't a max-age, check for an expires header + elif "expires" in headers: + expires = parsedate_tz(headers["expires"]) + if expires is not None: + expire_time = calendar.timegm(expires) - date + freshness_lifetime = max(0, expire_time) + logger.debug("Freshness lifetime from expires: %i", freshness_lifetime) + + # Determine if we are setting freshness limit in the + # request. Note, this overrides what was in the response. + if "max-age" in cc: + freshness_lifetime = cc["max-age"] + logger.debug( + "Freshness lifetime from request max-age: %i", freshness_lifetime + ) + + if "min-fresh" in cc: + min_fresh = cc["min-fresh"] + # adjust our current age by our min fresh + current_age += min_fresh + logger.debug("Adjusted current age from min-fresh: %i", current_age) + + # Return entry if it is fresh enough + if freshness_lifetime > current_age: + logger.debug('The response is "fresh", returning cached response') + logger.debug("%i > %i", freshness_lifetime, current_age) + return resp + + # we're not fresh. If we don't have an Etag, clear it out + if "etag" not in headers: + logger.debug('The cached response is "stale" with no etag, purging') + self.cache.delete(cache_url) + + # return the original handler + return False + + def conditional_headers(self, request): + cache_url = self.cache_url(request.url) + resp = self.serializer.loads(request, self.cache.get(cache_url)) + new_headers = {} + + if resp: + headers = CaseInsensitiveDict(resp.headers) + + if "etag" in headers: + new_headers["If-None-Match"] = headers["ETag"] + + if "last-modified" in headers: + new_headers["If-Modified-Since"] = headers["Last-Modified"] + + return new_headers + + def cache_response(self, request, response, body=None, status_codes=None): + """ + Algorithm for caching requests. + + This assumes a requests Response object. + """ + # From httplib2: Don't cache 206's since we aren't going to + # handle byte range requests + cacheable_status_codes = status_codes or self.cacheable_status_codes + if response.status not in cacheable_status_codes: + logger.debug( + "Status code %s not in %s", response.status, cacheable_status_codes + ) + return + + response_headers = CaseInsensitiveDict(response.headers) + + # If we've been given a body, our response has a Content-Length, that + # Content-Length is valid then we can check to see if the body we've + # been given matches the expected size, and if it doesn't we'll just + # skip trying to cache it. + if ( + body is not None + and "content-length" in response_headers + and response_headers["content-length"].isdigit() + and int(response_headers["content-length"]) != len(body) + ): + return + + cc_req = self.parse_cache_control(request.headers) + cc = self.parse_cache_control(response_headers) + + cache_url = self.cache_url(request.url) + logger.debug('Updating cache with response from "%s"', cache_url) + + # Delete it from the cache if we happen to have it stored there + no_store = False + if "no-store" in cc: + no_store = True + logger.debug('Response header has "no-store"') + if "no-store" in cc_req: + no_store = True + logger.debug('Request header has "no-store"') + if no_store and self.cache.get(cache_url): + logger.debug('Purging existing cache entry to honor "no-store"') + self.cache.delete(cache_url) + if no_store: + return + + # If we've been given an etag, then keep the response + if self.cache_etags and "etag" in response_headers: + logger.debug("Caching due to etag") + self.cache.set( + cache_url, self.serializer.dumps(request, response, body=body) + ) + + # Add to the cache any 301s. We do this before looking that + # the Date headers. + elif response.status == 301: + logger.debug("Caching permanant redirect") + self.cache.set(cache_url, self.serializer.dumps(request, response)) + + # Add to the cache if the response headers demand it. If there + # is no date header then we can't do anything about expiring + # the cache. + elif "date" in response_headers: + # cache when there is a max-age > 0 + if "max-age" in cc and cc["max-age"] > 0: + logger.debug("Caching b/c date exists and max-age > 0") + self.cache.set( + cache_url, self.serializer.dumps(request, response, body=body) + ) + + # If the request can expire, it means we should cache it + # in the meantime. + elif "expires" in response_headers: + if response_headers["expires"]: + logger.debug("Caching b/c of expires header") + self.cache.set( + cache_url, self.serializer.dumps(request, response, body=body) + ) + + def update_cached_response(self, request, response): + """On a 304 we will get a new set of headers that we want to + update our cached value with, assuming we have one. + + This should only ever be called when we've sent an ETag and + gotten a 304 as the response. + """ + cache_url = self.cache_url(request.url) + + cached_response = self.serializer.loads(request, self.cache.get(cache_url)) + + if not cached_response: + # we didn't have a cached response + return response + + # Lets update our headers with the headers from the new request: + # http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-26#section-4.1 + # + # The server isn't supposed to send headers that would make + # the cached body invalid. But... just in case, we'll be sure + # to strip out ones we know that might be problmatic due to + # typical assumptions. + excluded_headers = ["content-length"] + + cached_response.headers.update( + dict( + (k, v) + for k, v in response.headers.items() + if k.lower() not in excluded_headers + ) + ) + + # we want a 200 b/c we have content via the cache + cached_response.status = 200 + + # update our cache + self.cache.set(cache_url, self.serializer.dumps(request, cached_response)) + + return cached_response diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py new file mode 100644 index 000000000..30ed4c5a6 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py @@ -0,0 +1,80 @@ +from io import BytesIO + + +class CallbackFileWrapper(object): + """ + Small wrapper around a fp object which will tee everything read into a + buffer, and when that file is closed it will execute a callback with the + contents of that buffer. + + All attributes are proxied to the underlying file object. + + This class uses members with a double underscore (__) leading prefix so as + not to accidentally shadow an attribute. + """ + + def __init__(self, fp, callback): + self.__buf = BytesIO() + self.__fp = fp + self.__callback = callback + + def __getattr__(self, name): + # The vaguaries of garbage collection means that self.__fp is + # not always set. By using __getattribute__ and the private + # name[0] allows looking up the attribute value and raising an + # AttributeError when it doesn't exist. This stop thigns from + # infinitely recursing calls to getattr in the case where + # self.__fp hasn't been set. + # + # [0] https://docs.python.org/2/reference/expressions.html#atom-identifiers + fp = self.__getattribute__("_CallbackFileWrapper__fp") + return getattr(fp, name) + + def __is_fp_closed(self): + try: + return self.__fp.fp is None + + except AttributeError: + pass + + try: + return self.__fp.closed + + except AttributeError: + pass + + # We just don't cache it then. + # TODO: Add some logging here... + return False + + def _close(self): + if self.__callback: + self.__callback(self.__buf.getvalue()) + + # We assign this to None here, because otherwise we can get into + # really tricky problems where the CPython interpreter dead locks + # because the callback is holding a reference to something which + # has a __del__ method. Setting this to None breaks the cycle + # and allows the garbage collector to do it's thing normally. + self.__callback = None + + def read(self, amt=None): + data = self.__fp.read(amt) + self.__buf.write(data) + if self.__is_fp_closed(): + self._close() + + return data + + def _safe_read(self, amt): + data = self.__fp._safe_read(amt) + if amt == 2 and data == b"\r\n": + # urllib executes this read to toss the CRLF at the end + # of the chunk. + return data + + self.__buf.write(data) + if self.__is_fp_closed(): + self._close() + + return data diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py new file mode 100644 index 000000000..6c0e9790d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py @@ -0,0 +1,135 @@ +import calendar +import time + +from email.utils import formatdate, parsedate, parsedate_tz + +from datetime import datetime, timedelta + +TIME_FMT = "%a, %d %b %Y %H:%M:%S GMT" + + +def expire_after(delta, date=None): + date = date or datetime.utcnow() + return date + delta + + +def datetime_to_header(dt): + return formatdate(calendar.timegm(dt.timetuple())) + + +class BaseHeuristic(object): + + def warning(self, response): + """ + Return a valid 1xx warning header value describing the cache + adjustments. + + The response is provided too allow warnings like 113 + http://tools.ietf.org/html/rfc7234#section-5.5.4 where we need + to explicitly say response is over 24 hours old. + """ + return '110 - "Response is Stale"' + + def update_headers(self, response): + """Update the response headers with any new headers. + + NOTE: This SHOULD always include some Warning header to + signify that the response was cached by the client, not + by way of the provided headers. + """ + return {} + + def apply(self, response): + updated_headers = self.update_headers(response) + + if updated_headers: + response.headers.update(updated_headers) + warning_header_value = self.warning(response) + if warning_header_value is not None: + response.headers.update({"Warning": warning_header_value}) + + return response + + +class OneDayCache(BaseHeuristic): + """ + Cache the response by providing an expires 1 day in the + future. + """ + + def update_headers(self, response): + headers = {} + + if "expires" not in response.headers: + date = parsedate(response.headers["date"]) + expires = expire_after(timedelta(days=1), date=datetime(*date[:6])) + headers["expires"] = datetime_to_header(expires) + headers["cache-control"] = "public" + return headers + + +class ExpiresAfter(BaseHeuristic): + """ + Cache **all** requests for a defined time period. + """ + + def __init__(self, **kw): + self.delta = timedelta(**kw) + + def update_headers(self, response): + expires = expire_after(self.delta) + return {"expires": datetime_to_header(expires), "cache-control": "public"} + + def warning(self, response): + tmpl = "110 - Automatically cached for %s. Response might be stale" + return tmpl % self.delta + + +class LastModified(BaseHeuristic): + """ + If there is no Expires header already, fall back on Last-Modified + using the heuristic from + http://tools.ietf.org/html/rfc7234#section-4.2.2 + to calculate a reasonable value. + + Firefox also does something like this per + https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ + http://lxr.mozilla.org/mozilla-release/source/netwerk/protocol/http/nsHttpResponseHead.cpp#397 + Unlike mozilla we limit this to 24-hr. + """ + cacheable_by_default_statuses = { + 200, 203, 204, 206, 300, 301, 404, 405, 410, 414, 501 + } + + def update_headers(self, resp): + headers = resp.headers + + if "expires" in headers: + return {} + + if "cache-control" in headers and headers["cache-control"] != "public": + return {} + + if resp.status not in self.cacheable_by_default_statuses: + return {} + + if "date" not in headers or "last-modified" not in headers: + return {} + + date = calendar.timegm(parsedate_tz(headers["date"])) + last_modified = parsedate(headers["last-modified"]) + if date is None or last_modified is None: + return {} + + now = time.time() + current_age = max(0, now - date) + delta = date - calendar.timegm(last_modified) + freshness_lifetime = max(0, min(delta / 10, 24 * 3600)) + if freshness_lifetime <= current_age: + return {} + + expires = date + freshness_lifetime + return {"expires": time.strftime(TIME_FMT, time.gmtime(expires))} + + def warning(self, resp): + return None diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py new file mode 100644 index 000000000..ec43ff27a --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py @@ -0,0 +1,186 @@ +import base64 +import io +import json +import zlib + +from pip._vendor import msgpack +from pip._vendor.requests.structures import CaseInsensitiveDict + +from .compat import HTTPResponse, pickle, text_type + + +def _b64_decode_bytes(b): + return base64.b64decode(b.encode("ascii")) + + +def _b64_decode_str(s): + return _b64_decode_bytes(s).decode("utf8") + + +class Serializer(object): + + def dumps(self, request, response, body=None): + response_headers = CaseInsensitiveDict(response.headers) + + if body is None: + body = response.read(decode_content=False) + + # NOTE: 99% sure this is dead code. I'm only leaving it + # here b/c I don't have a test yet to prove + # it. Basically, before using + # `cachecontrol.filewrapper.CallbackFileWrapper`, + # this made an effort to reset the file handle. The + # `CallbackFileWrapper` short circuits this code by + # setting the body as the content is consumed, the + # result being a `body` argument is *always* passed + # into cache_response, and in turn, + # `Serializer.dump`. + response._fp = io.BytesIO(body) + + # NOTE: This is all a bit weird, but it's really important that on + # Python 2.x these objects are unicode and not str, even when + # they contain only ascii. The problem here is that msgpack + # understands the difference between unicode and bytes and we + # have it set to differentiate between them, however Python 2 + # doesn't know the difference. Forcing these to unicode will be + # enough to have msgpack know the difference. + data = { + u"response": { + u"body": body, + u"headers": dict( + (text_type(k), text_type(v)) for k, v in response.headers.items() + ), + u"status": response.status, + u"version": response.version, + u"reason": text_type(response.reason), + u"strict": response.strict, + u"decode_content": response.decode_content, + } + } + + # Construct our vary headers + data[u"vary"] = {} + if u"vary" in response_headers: + varied_headers = response_headers[u"vary"].split(",") + for header in varied_headers: + header = text_type(header).strip() + header_value = request.headers.get(header, None) + if header_value is not None: + header_value = text_type(header_value) + data[u"vary"][header] = header_value + + return b",".join([b"cc=4", msgpack.dumps(data, use_bin_type=True)]) + + def loads(self, request, data): + # Short circuit if we've been given an empty set of data + if not data: + return + + # Determine what version of the serializer the data was serialized + # with + try: + ver, data = data.split(b",", 1) + except ValueError: + ver = b"cc=0" + + # Make sure that our "ver" is actually a version and isn't a false + # positive from a , being in the data stream. + if ver[:3] != b"cc=": + data = ver + data + ver = b"cc=0" + + # Get the version number out of the cc=N + ver = ver.split(b"=", 1)[-1].decode("ascii") + + # Dispatch to the actual load method for the given version + try: + return getattr(self, "_loads_v{}".format(ver))(request, data) + + except AttributeError: + # This is a version we don't have a loads function for, so we'll + # just treat it as a miss and return None + return + + def prepare_response(self, request, cached): + """Verify our vary headers match and construct a real urllib3 + HTTPResponse object. + """ + # Special case the '*' Vary value as it means we cannot actually + # determine if the cached response is suitable for this request. + if "*" in cached.get("vary", {}): + return + + # Ensure that the Vary headers for the cached response match our + # request + for header, value in cached.get("vary", {}).items(): + if request.headers.get(header, None) != value: + return + + body_raw = cached["response"].pop("body") + + headers = CaseInsensitiveDict(data=cached["response"]["headers"]) + if headers.get("transfer-encoding", "") == "chunked": + headers.pop("transfer-encoding") + + cached["response"]["headers"] = headers + + try: + body = io.BytesIO(body_raw) + except TypeError: + # This can happen if cachecontrol serialized to v1 format (pickle) + # using Python 2. A Python 2 str(byte string) will be unpickled as + # a Python 3 str (unicode string), which will cause the above to + # fail with: + # + # TypeError: 'str' does not support the buffer interface + body = io.BytesIO(body_raw.encode("utf8")) + + return HTTPResponse(body=body, preload_content=False, **cached["response"]) + + def _loads_v0(self, request, data): + # The original legacy cache data. This doesn't contain enough + # information to construct everything we need, so we'll treat this as + # a miss. + return + + def _loads_v1(self, request, data): + try: + cached = pickle.loads(data) + except ValueError: + return + + return self.prepare_response(request, cached) + + def _loads_v2(self, request, data): + try: + cached = json.loads(zlib.decompress(data).decode("utf8")) + except (ValueError, zlib.error): + return + + # We need to decode the items that we've base64 encoded + cached["response"]["body"] = _b64_decode_bytes(cached["response"]["body"]) + cached["response"]["headers"] = dict( + (_b64_decode_str(k), _b64_decode_str(v)) + for k, v in cached["response"]["headers"].items() + ) + cached["response"]["reason"] = _b64_decode_str(cached["response"]["reason"]) + cached["vary"] = dict( + (_b64_decode_str(k), _b64_decode_str(v) if v is not None else v) + for k, v in cached["vary"].items() + ) + + return self.prepare_response(request, cached) + + def _loads_v3(self, request, data): + # Due to Python 2 encoding issues, it's impossible to know for sure + # exactly how to load v3 entries, thus we'll treat these as a miss so + # that they get rewritten out as v4 entries. + return + + def _loads_v4(self, request, data): + try: + cached = msgpack.loads(data, encoding="utf-8") + except ValueError: + return + + return self.prepare_response(request, cached) diff --git a/my_env/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py new file mode 100644 index 000000000..265bfc8bc --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py @@ -0,0 +1,29 @@ +from .adapter import CacheControlAdapter +from .cache import DictCache + + +def CacheControl( + sess, + cache=None, + cache_etags=True, + serializer=None, + heuristic=None, + controller_class=None, + adapter_class=None, + cacheable_methods=None, +): + + cache = cache or DictCache() + adapter_class = adapter_class or CacheControlAdapter + adapter = adapter_class( + cache, + cache_etags=cache_etags, + serializer=serializer, + heuristic=heuristic, + controller_class=controller_class, + cacheable_methods=cacheable_methods, + ) + sess.mount("http://", adapter) + sess.mount("https://", adapter) + + return sess diff --git a/my_env/Lib/site-packages/pip/_vendor/certifi/__init__.py b/my_env/Lib/site-packages/pip/_vendor/certifi/__init__.py new file mode 100644 index 000000000..8e358e4c8 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/certifi/__init__.py @@ -0,0 +1,3 @@ +from .core import where + +__version__ = "2019.09.11" diff --git a/my_env/Lib/site-packages/pip/_vendor/certifi/__main__.py b/my_env/Lib/site-packages/pip/_vendor/certifi/__main__.py new file mode 100644 index 000000000..ae2aff5c8 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/certifi/__main__.py @@ -0,0 +1,2 @@ +from pip._vendor.certifi import where +print(where()) diff --git a/my_env/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..88e6ac7f2 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-37.pyc new file mode 100644 index 000000000..3eaf38062 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-37.pyc new file mode 100644 index 000000000..eed80ce64 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/certifi/cacert.pem b/my_env/Lib/site-packages/pip/_vendor/certifi/cacert.pem new file mode 100644 index 000000000..70fa91f61 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/certifi/cacert.pem @@ -0,0 +1,4558 @@ + +# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Label: "GlobalSign Root CA" +# Serial: 4835703278459707669005204 +# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a +# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c +# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Label: "GlobalSign Root CA - R2" +# Serial: 4835703278459682885658125 +# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 +# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe +# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 +MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL +v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 +eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq +tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd +C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa +zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB +mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH +V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n +bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG +3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs +J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO +291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS +ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd +AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only +# Label: "Verisign Class 3 Public Primary Certification Authority - G3" +# Serial: 206684696279472310254277870180966723415 +# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 +# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 +# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b +N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t +KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu +kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm +CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ +Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu +imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te +2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe +DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p +F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt +TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Label: "Entrust.net Premium 2048 Secure Server CA" +# Serial: 946069240 +# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 +# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 +# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 +MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub +j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo +U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b +u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ +bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er +fF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Label: "Baltimore CyberTrust Root" +# Serial: 33554617 +# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 +# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 +# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network +# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network +# Label: "AddTrust External Root" +# Serial: 1 +# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f +# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 +# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs +IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 +MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h +bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt +H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 +uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX +mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX +a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN +E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 +WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD +VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 +Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU +cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx +IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN +AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH +YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC +Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX +c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a +mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Label: "Entrust Root Certification Authority" +# Serial: 1164660820 +# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 +# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 +# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 +Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW +KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw +NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw +NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy +ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV +BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo +Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 +4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 +KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI +rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi +94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB +sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi +gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo +kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE +vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t +O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua +AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP +9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ +eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m +0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. +# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. +# Label: "GeoTrust Global CA" +# Serial: 144470 +# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 +# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 +# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg +R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 +9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq +fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv +iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU +1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ +bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW +MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA +ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l +uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn +Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS +tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF +PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un +hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV +5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. +# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. +# Label: "GeoTrust Universal CA" +# Serial: 1 +# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 +# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 +# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy +c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 +IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV +VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 +cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT +QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh +F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v +c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w +mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd +VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX +teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ +f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe +Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ +nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY +MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG +9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX +IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn +ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z +uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN +Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja +QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW +koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 +ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt +DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm +bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. +# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. +# Label: "GeoTrust Universal CA 2" +# Serial: 1 +# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 +# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 +# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy +c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD +VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 +c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 +WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG +FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq +XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL +se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb +KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd +IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 +y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt +hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc +QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 +Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV +HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ +KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ +L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr +Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo +ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY +T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz +GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m +1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV +OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH +6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX +QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +# Issuer: CN=AAA Certificate Services O=Comodo CA Limited +# Subject: CN=AAA Certificate Services O=Comodo CA Limited +# Label: "Comodo AAA Services root" +# Serial: 1 +# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 +# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 +# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority +# Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority +# Label: "QuoVadis Root CA" +# Serial: 985026699 +# MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24 +# SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9 +# SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73 +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz +MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw +IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR +dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp +li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D +rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ +WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug +F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU +xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC +Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv +dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw +ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl +IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh +c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy +ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI +KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T +KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq +y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p +dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD +VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL +MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk +fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 +7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R +cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y +mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW +xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK +SnQ2+Q== +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2" +# Serial: 1289 +# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b +# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 +# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa +GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg +Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J +WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB +rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp ++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 +ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i +Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz +PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og +/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH +oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI +yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud +EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 +A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL +MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f +BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn +g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl +fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K +WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha +B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc +hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR +TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD +mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z +ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y +4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza +8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3" +# Serial: 1478 +# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf +# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 +# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM +V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB +4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr +H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd +8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv +vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT +mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe +btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc +T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt +WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ +c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A +4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD +VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG +CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 +aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu +dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw +czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G +A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg +Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 +7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem +d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd ++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B +4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN +t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x +DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 +k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s +zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j +Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT +mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK +4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 +# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 +# Label: "Security Communication Root CA" +# Serial: 0 +# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a +# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 +# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY +MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t +dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 +WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD +VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 +9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ +DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 +Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N +QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ +xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G +A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG +kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr +Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 +Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU +JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot +RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== +-----END CERTIFICATE----- + +# Issuer: CN=Sonera Class2 CA O=Sonera +# Subject: CN=Sonera Class2 CA O=Sonera +# Label: "Sonera Class 2 Root CA" +# Serial: 29 +# MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb +# SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27 +# SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27 +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx +MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o +Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt +5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s +3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej +vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu +8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil +zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ +3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD +FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 +Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 +ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M +-----END CERTIFICATE----- + +# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Label: "XRamp Global CA Root" +# Serial: 107108908803651509692980124233745014957 +# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 +# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 +# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB +gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk +MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY +UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx +NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 +dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy +dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 +38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP +KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q +DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 +qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa +JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi +PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P +BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs +jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 +eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR +vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa +IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy +i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ +O+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Label: "Go Daddy Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 +# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 +# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= +-----END CERTIFICATE----- + +# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Label: "Starfield Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 +# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a +# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +# Issuer: O=Government Root Certification Authority +# Subject: O=Government Root Certification Authority +# Label: "Taiwan GRCA" +# Serial: 42023070807708724159991140556527066870 +# MD5 Fingerprint: 37:85:44:53:32:45:1f:20:f0:f3:95:e1:25:c4:43:4e +# SHA1 Fingerprint: f4:8b:11:bf:de:ab:be:94:54:20:71:e6:41:de:6b:be:88:2b:40:b9 +# SHA256 Fingerprint: 76:00:29:5e:ef:e8:5b:9e:1f:d6:24:db:76:06:2a:aa:ae:59:81:8a:54:d2:77:4c:d4:c0:b2:c0:11:31:e1:b3 +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ +MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow +PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR +IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q +gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy +yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts +F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 +jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx +ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC +VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK +YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH +EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN +Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud +DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE +MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK +UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf +qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK +ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE +JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 +hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 +EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm +nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX +udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz +ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe +LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl +pYYsfPQS +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root CA" +# Serial: 17154717934120587862167794914071425081 +# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 +# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 +# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root CA" +# Serial: 10944719598952040374951832963794454346 +# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e +# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 +# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert High Assurance EV Root CA" +# Serial: 3553400076410547919724730734378100087 +# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a +# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 +# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- + +# Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co. +# Subject: CN=DST Root CA X3 O=Digital Signature Trust Co. +# Label: "DST Root CA X3" +# Serial: 91299735575339953335919266965803778155 +# MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5 +# SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13 +# SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39 +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow +PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD +Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O +rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq +OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b +xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw +7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD +aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG +SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 +ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr +AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz +R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 +JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo +Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Label: "SwissSign Gold CA - G2" +# Serial: 13492815561806991280 +# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 +# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 +# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Label: "SwissSign Silver CA - G2" +# Serial: 5700383053117599563 +# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 +# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb +# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. +# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. +# Label: "GeoTrust Primary Certification Authority" +# Serial: 32798226551256963324313806436981982369 +# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf +# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 +# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo +R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx +MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 +AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA +ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 +7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W +kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI +mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ +KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 +6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl +4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K +oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj +UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU +AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA" +# Serial: 69529181992039203566298953787712940909 +# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 +# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 +# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB +qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV +BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw +NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j +LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG +A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs +W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta +3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk +6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 +Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J +NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP +r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU +DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz +YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 +/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ +LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 +jVaMaA== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" +# Serial: 33037644167568058970164719475676101450 +# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c +# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 +# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 +nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex +t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz +SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG +BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ +rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ +NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH +BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv +MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE +p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y +5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK +WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ +4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N +hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +# Issuer: CN=SecureTrust CA O=SecureTrust Corporation +# Subject: CN=SecureTrust CA O=SecureTrust Corporation +# Label: "SecureTrust CA" +# Serial: 17199774589125277788362757014266862032 +# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 +# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 +# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz +MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv +cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz +Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO +0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao +wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj +7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS +8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT +BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg +JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 +6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ +3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm +D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS +CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +# Issuer: CN=Secure Global CA O=SecureTrust Corporation +# Subject: CN=Secure Global CA O=SecureTrust Corporation +# Label: "Secure Global CA" +# Serial: 9751836167731051554232119481456978597 +# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de +# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b +# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx +MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg +Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ +iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa +/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ +jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI +HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 +sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w +gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw +KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG +AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L +URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO +H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm +I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY +iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO Certification Authority O=COMODO CA Limited +# Label: "COMODO Certification Authority" +# Serial: 104350513648249232941998508985834464573 +# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 +# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b +# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl +YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P +RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 +UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI +2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 +Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp ++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ +DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O +nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW +/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g +PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u +QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY +SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv +IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 +zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd +BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB +ZQ== +-----END CERTIFICATE----- + +# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Label: "Network Solutions Certificate Authority" +# Serial: 116697915152937497490437556386812487904 +# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e +# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce +# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi +MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV +UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO +ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz +c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP +OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl +mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF +BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 +qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw +gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu +bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp +dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 +6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ +h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH +/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN +pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Label: "COMODO ECC Certification Authority" +# Serial: 41578283867086692638256921589707938090 +# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 +# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 +# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT +IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw +MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy +ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N +T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR +FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J +cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW +BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm +fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv +GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GA CA" +# Serial: 86718877871133159090080555911823548314 +# MD5 Fingerprint: bc:6c:51:33:a7:e9:d3:66:63:54:15:72:1b:21:92:93 +# SHA1 Fingerprint: 59:22:a1:e1:5a:ea:16:35:21:f8:98:39:6a:46:46:b0:44:1b:0f:a9 +# SHA256 Fingerprint: 41:c9:23:86:6a:b4:ca:d6:b7:ad:57:80:81:58:2e:02:07:97:a6:cb:df:4f:ff:78:ce:83:96:b3:89:37:d7:f5 +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB +ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly +aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w +NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G +A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX +SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR +VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 +w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF +mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg +4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 +4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw +EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx +SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 +ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 +vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi +Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ +/L7fCg0= +-----END CERTIFICATE----- + +# Issuer: CN=Certigna O=Dhimyotis +# Subject: CN=Certigna O=Dhimyotis +# Label: "Certigna" +# Serial: 18364802974209362175 +# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff +# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 +# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X +DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ +BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 +QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny +gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw +zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q +130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 +JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw +ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj +AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG +9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h +bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc +fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu +HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w +t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc +# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc +# Label: "Cybertrust Global Root" +# Serial: 4835703278459682877484360 +# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 +# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 +# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG +A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh +bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE +ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS +b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 +7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS +J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y +HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP +t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz +FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY +XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ +MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw +hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js +MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA +A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj +Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx +XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o +omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc +A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Label: "ePKI Root Certification Authority" +# Serial: 28956088682735189655030529057352760477 +# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 +# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 +# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw +IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL +SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH +SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh +ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X +DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 +TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ +fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA +sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU +WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS +nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH +dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip +NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC +AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF +MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB +uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl +PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP +JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ +gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 +j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 +5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB +o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS +/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z +Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE +W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D +hNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +# Issuer: O=certSIGN OU=certSIGN ROOT CA +# Subject: O=certSIGN OU=certSIGN ROOT CA +# Label: "certSIGN ROOT CA" +# Serial: 35210227249154 +# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 +# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b +# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT +AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD +QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP +MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do +0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ +UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d +RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ +OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv +JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C +AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O +BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ +LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY +MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ +44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I +Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw +i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN +9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only +# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only +# Label: "GeoTrust Primary Certification Authority - G3" +# Serial: 28809105769928564313984085209975885599 +# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 +# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd +# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB +mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT +MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ +BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 +BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz ++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm +hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn +5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W +JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL +DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC +huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB +AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB +zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN +kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH +SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G +spki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA - G2" +# Serial: 71758320672825410020661621085256472406 +# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f +# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 +# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp +IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi +BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw +MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig +YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v +dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ +BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 +papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K +DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 +KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox +XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA - G3" +# Serial: 127614157056681299805556476275995414779 +# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 +# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 +# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB +rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV +BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa +Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl +LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u +MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm +gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 +YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf +b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 +9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S +zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk +OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV +HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA +2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW +oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c +KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM +m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu +MdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only +# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only +# Label: "GeoTrust Primary Certification Authority - G2" +# Serial: 80682863203381065782177908751794619243 +# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a +# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 +# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL +MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj +KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 +MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw +NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV +BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL +So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal +tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG +CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT +qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz +rD6ogRLQy7rQkgu2npaqBA+K +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Universal Root Certification Authority" +# Serial: 85209574734084581917763752644031726877 +# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 +# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 +# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB +vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W +ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX +MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 +IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y +IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh +bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF +9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH +H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H +LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN +/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT +rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw +WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs +exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 +sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ +seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz +4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ +BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR +lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 +7M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" +# Serial: 63143484348153506665311985501458640051 +# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 +# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a +# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp +U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg +SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln +biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm +GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve +fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ +aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj +aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW +kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC +4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga +FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" +# Serial: 80544274841616 +# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 +# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 +# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden +# Label: "Staat der Nederlanden Root CA - G2" +# Serial: 10000012 +# MD5 Fingerprint: 7c:a5:0f:f8:5b:9a:7d:6d:30:ae:54:5a:e3:42:a2:8a +# SHA1 Fingerprint: 59:af:82:79:91:86:c7:b4:75:07:cb:cf:03:57:46:eb:04:dd:b7:16 +# SHA256 Fingerprint: 66:8c:83:94:7d:a6:3b:72:4b:ec:e1:74:3c:31:a0:e6:ae:d0:db:8e:c5:b3:1b:e3:77:bb:78:4f:91:b6:71:6f +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX +DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 +qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp +uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU +Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE +pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp +5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M +UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN +GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy +5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv +6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK +eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 +B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ +BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov +L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG +SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS +CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen +5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 +IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK +gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL ++63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL +vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm +bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk +N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC +Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z +ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post +# Label: "Hongkong Post Root CA 1" +# Serial: 1000 +# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca +# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58 +# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2 +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx +FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg +Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG +A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr +b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ +jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn +PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh +ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 +nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h +q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED +MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC +mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 +7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB +oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs +EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO +fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi +AmvZWg== +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Label: "SecureSign RootCA11" +# Serial: 1 +# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 +# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 +# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr +MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG +A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 +MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp +Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD +QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz +i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 +h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV +MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 +UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni +8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC +h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD +VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm +KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ +X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr +QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 +pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN +QSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Label: "Microsec e-Szigno Root CA 2009" +# Serial: 14014712776195784473 +# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 +# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e +# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Label: "GlobalSign Root CA - R3" +# Serial: 4835703278459759426209954 +# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 +# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad +# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f +-----END CERTIFICATE----- + +# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Serial: 6047274297262753887 +# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 +# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa +# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy +MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD +VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv +ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl +AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF +661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 +am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 +ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 +PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS +3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k +SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF +3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM +ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g +StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz +Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB +jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +# Issuer: CN=Izenpe.com O=IZENPE S.A. +# Subject: CN=Izenpe.com O=IZENPE S.A. +# Label: "Izenpe.com" +# Serial: 917563065490389241595536686991402621 +# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 +# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 +# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. +# Subject: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. +# Label: "Chambers of Commerce Root - 2008" +# Serial: 11806822484801597146 +# MD5 Fingerprint: 5e:80:9e:84:5a:0e:65:0b:17:02:f3:55:18:2a:3e:d7 +# SHA1 Fingerprint: 78:6a:74:ac:76:ab:14:7f:9c:6a:30:50:ba:9e:a8:7e:fe:9a:ce:3c +# SHA256 Fingerprint: 06:3e:4a:fa:c4:91:df:d3:32:f3:08:9b:85:42:e9:46:17:d8:93:d7:fe:94:4e:10:a7:93:7e:e2:9d:96:93:c0 +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz +IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz +MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj +dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw +EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp +MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 +28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq +VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q +DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR +5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL +ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a +Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl +UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s ++12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 +Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx +hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV +HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 ++HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN +YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t +L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy +ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt +IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV +HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w +DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW +PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF +5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 +glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH +FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 +pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD +xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG +tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq +jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De +fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ +d0jQ +-----END CERTIFICATE----- + +# Issuer: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. +# Subject: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. +# Label: "Global Chambersign Root - 2008" +# Serial: 14541511773111788494 +# MD5 Fingerprint: 9e:80:ff:78:01:0c:2e:c1:36:bd:fe:96:90:6e:08:f3 +# SHA1 Fingerprint: 4a:bd:ee:ec:95:0d:35:9c:89:ae:c7:52:a1:2c:5b:29:f6:d6:aa:0c +# SHA256 Fingerprint: 13:63:35:43:93:34:a7:69:80:16:a0:d3:24:de:72:28:4e:07:9d:7b:52:20:bb:8f:bd:74:78:16:ee:be:ba:ca +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx +MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy +cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG +A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl +BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed +KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 +G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 +zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 +ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG +HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 +Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V +yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e +beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r +6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog +zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW +BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr +ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp +ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk +cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt +YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC +CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow +KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI +hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ +UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz +X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x +fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz +a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd +Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd +SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O +AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso +M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge +v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Label: "Go Daddy Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 +# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b +# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 +# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e +# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Services Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 +# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f +# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Commercial O=AffirmTrust +# Subject: CN=AffirmTrust Commercial O=AffirmTrust +# Label: "AffirmTrust Commercial" +# Serial: 8608355977964138876 +# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 +# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 +# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP +Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr +ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL +MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 +yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr +VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ +nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG +XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj +vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt +Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g +N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC +nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Networking O=AffirmTrust +# Subject: CN=AffirmTrust Networking O=AffirmTrust +# Label: "AffirmTrust Networking" +# Serial: 8957382827206547757 +# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f +# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f +# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y +YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua +kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL +QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp +6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG +yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i +QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO +tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu +QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ +Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u +olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 +x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium O=AffirmTrust +# Subject: CN=AffirmTrust Premium O=AffirmTrust +# Label: "AffirmTrust Premium" +# Serial: 7893706540734352110 +# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 +# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 +# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz +dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG +A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U +cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf +qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ +JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ ++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS +s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 +HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 +70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG +V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S +qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S +5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia +C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX +OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE +FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 +KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B +8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ +MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc +0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ +u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF +u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH +YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 +GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO +RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e +KeC2uAloGRwYQw== +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust +# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust +# Label: "AffirmTrust Premium ECC" +# Serial: 8401224907861490260 +# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d +# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb +# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC +VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ +cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ +BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt +VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D +0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 +ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G +A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs +aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I +flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA" +# Serial: 279744 +# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 +# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e +# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Label: "TWCA Root Certification Authority" +# Serial: 1 +# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 +# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 +# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Label: "Security Communication RootCA2" +# Serial: 0 +# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 +# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 +# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2011" +# Serial: 0 +# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 +# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d +# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix +RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p +YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw +NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK +EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl +cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz +dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ +fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns +bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD +75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP +FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV +HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp +5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu +b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA +A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p +6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 +dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys +Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI +l7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Label: "Actalis Authentication Root CA" +# Serial: 6271844772424770508 +# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 +# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac +# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +# Issuer: O=Trustis Limited OU=Trustis FPS Root CA +# Subject: O=Trustis Limited OU=Trustis FPS Root CA +# Label: "Trustis FPS Root CA" +# Serial: 36053640375399034304724988975563710553 +# MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d +# SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04 +# SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL +ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx +MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc +MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ +AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH +iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj +vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA +0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB +OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ +BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E +FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 +GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW +zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 +1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE +f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F +jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN +ZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 2 Root CA" +# Serial: 2 +# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 +# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 +# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 3 Root CA" +# Serial: 2 +# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec +# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 +# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 3" +# Serial: 1 +# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef +# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 +# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- + +# Issuer: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus +# Subject: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus +# Label: "EE Certification Centre Root CA" +# Serial: 112324828676200291871926431888494945866 +# MD5 Fingerprint: 43:5e:88:d4:7d:1a:4a:7e:fd:84:2e:52:eb:01:d4:6f +# SHA1 Fingerprint: c9:a8:b9:e7:55:80:5e:58:e3:53:77:a7:25:eb:af:c3:7b:27:cc:d7 +# SHA256 Fingerprint: 3e:84:ba:43:42:90:85:16:e7:75:73:c0:99:2f:09:79:ca:08:4e:46:85:68:1f:f1:95:cc:ba:8a:22:9b:8a:76 +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 +MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 +czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG +CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy +MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl +ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS +b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy +euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO +bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw +WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d +MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE +1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ +zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB +BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF +BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV +v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG +E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW +iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v +GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 2009" +# Serial: 623603 +# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f +# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 +# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 EV 2009" +# Serial: 623604 +# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 +# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 +# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +# Issuer: CN=CA Disig Root R2 O=Disig a.s. +# Subject: CN=CA Disig Root R2 O=Disig a.s. +# Label: "CA Disig Root R2" +# Serial: 10572350602393338211 +# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 +# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 +# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Label: "ACCVRAIZ1" +# Serial: 6828503384748696800 +# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 +# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 +# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE +AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw +CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ +BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND +VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb +qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY +HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo +G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA +lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr +IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ +0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH +k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 +4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO +m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa +cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl +uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI +KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls +ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG +AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT +VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG +CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA +cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA +QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA +7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA +cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA +QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA +czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu +aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt +aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud +DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF +BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp +D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU +JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m +AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD +vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms +tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH +7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA +h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF +d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H +pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA Global Root CA" +# Serial: 3262 +# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 +# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 +# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx +EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT +VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 +NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT +B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF +10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz +0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh +MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH +zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc +46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 +yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi +laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP +oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA +BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE +qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm +4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL +1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF +H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo +RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ +nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh +15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW +6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW +nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j +wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz +aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy +KwbQBM0= +-----END CERTIFICATE----- + +# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Label: "TeliaSonera Root CA v1" +# Serial: 199041966741090107964904287217786801558 +# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c +# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 +# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw +NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv +b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD +VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F +VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 +7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X +Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ +/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs +81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm +dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe +Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu +sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 +pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs +slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ +arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD +VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG +9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl +dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj +TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed +Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 +Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI +OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 +vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW +t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn +HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx +SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +# Issuer: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi +# Subject: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi +# Label: "E-Tugra Certification Authority" +# Serial: 7667447206703254355 +# MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49 +# SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39 +# SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV +BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC +aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV +BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 +Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz +MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ +BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp +em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY +B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH +D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF +Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo +q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D +k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH +fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut +dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM +ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 +zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX +U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 +Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 +XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF +Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR +HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY +GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c +77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 ++GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK +vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 +FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl +yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P +AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD +y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d +NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 2" +# Serial: 1 +# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a +# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 +# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot 2011 O=Atos +# Subject: CN=Atos TrustedRoot 2011 O=Atos +# Label: "Atos TrustedRoot 2011" +# Serial: 6643877497813316402 +# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 +# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 +# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE +AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG +EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM +FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC +REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp +Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM +VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ +SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ +4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L +cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi +eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG +A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 +DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j +vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP +DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc +maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D +lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv +KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 1 G3" +# Serial: 687049649626669250736271037606554624078720034195 +# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab +# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 +# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 +MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV +wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe +rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 +68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh +4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp +UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o +abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc +3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G +KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt +hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO +Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt +zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD +ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 +cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN +qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 +YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv +b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 +8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k +NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj +ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp +q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt +nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2 G3" +# Serial: 390156079458959257446133169266079962026824725800 +# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 +# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 +# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 +MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf +qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW +n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym +c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ +O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 +o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j +IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq +IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz +8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh +vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l +7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG +cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD +ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC +roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga +W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n +lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE ++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV +csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd +dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg +KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM +HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 +WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3 G3" +# Serial: 268090761170461462463995952157327242137089239581 +# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 +# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d +# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 +MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR +/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu +FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR +U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c +ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR +FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k +A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw +eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl +sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp +VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q +A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ +ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD +ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI +FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv +oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg +u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP +0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf +3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl +8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ +DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN +PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ +ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G2" +# Serial: 15385348160840213938643033620894905419 +# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d +# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f +# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA +n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc +biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp +EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA +bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu +YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI +QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I +0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni +lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 +B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv +ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G3" +# Serial: 15459312981008553731928384953135426796 +# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb +# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 +# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg +RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf +Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q +RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD +AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY +JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv +6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G2" +# Serial: 4293743540046975378534879503202253541 +# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 +# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 +# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G3" +# Serial: 7089244469030293291760083333884364146 +# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca +# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e +# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Trusted Root G4" +# Serial: 7451500558977370777930084869016614236 +# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 +# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 +# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg +RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y +ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If +xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV +ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO +DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ +jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ +CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi +EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM +fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY +uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK +chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t +9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 +SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd ++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc +fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa +sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N +cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N +0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie +4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI +r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 +/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm +gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ +-----END CERTIFICATE----- + +# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Label: "COMODO RSA Certification Authority" +# Serial: 101909084537582093308941363524873193117 +# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 +# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 +# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR +6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X +pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC +9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV +/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf +Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z ++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w +qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah +SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC +u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf +Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq +crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB +/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl +wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM +4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV +2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna +FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ +CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK +boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke +jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL +S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb +QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl +0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB +NVOFBkpdn627G190 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Label: "USERTrust RSA Certification Authority" +# Serial: 2645093764781058787591871645665788717 +# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 +# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e +# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw +MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV +BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B +3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY +tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ +Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 +VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT +79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 +c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT +Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l +c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee +UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE +Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF +Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO +VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 +ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs +8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR +iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze +Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ +XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ +qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB +VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB +L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG +jjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Label: "USERTrust ECC Certification Authority" +# Serial: 123013823720199481456569720443997572134 +# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 +# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 +# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl +eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT +JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg +VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo +I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng +o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G +A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB +zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW +RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Label: "GlobalSign ECC Root CA - R4" +# Serial: 14367148294922964480859022125800977897474 +# MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e +# SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb +# SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ +FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F +uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX +kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs +ewv4n4Q= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Label: "GlobalSign ECC Root CA - R5" +# Serial: 32785792099990507226680698011560947931244 +# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 +# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa +# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc +8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke +hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI +KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg +515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO +xwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden +# Label: "Staat der Nederlanden Root CA - G3" +# Serial: 10003001 +# MD5 Fingerprint: 0b:46:67:07:db:10:2f:19:8c:35:50:60:d1:0b:f4:37 +# SHA1 Fingerprint: d8:eb:6b:41:51:92:59:e0:f3:e7:85:00:c0:3d:b6:88:97:c9:ee:fc +# SHA256 Fingerprint: 3c:4f:b0:b9:5a:b8:b3:00:32:f4:32:b8:6f:53:5f:e1:72:c1:85:d0:fd:39:86:58:37:cf:36:18:7f:a6:f4:28 +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX +DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP +cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW +IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX +xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy +KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR +9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az +5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8 +6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7 +Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP +bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt +BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt +XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd +INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp +LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8 +Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp +gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh +/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw +0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A +fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq +4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR +1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/ +QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM +94B7IWcnMFk= +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Label: "Staat der Nederlanden EV Root CA" +# Serial: 10000013 +# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba +# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb +# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y +MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg +TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS +b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS +M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC +UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d +Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p +rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l +pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb +j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC +KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS +/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X +cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH +1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP +px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 +MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u +2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS +v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC +wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy +CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e +vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 +Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa +Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL +eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 +FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc +7uzXLg== +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Label: "IdenTrust Commercial Root CA 1" +# Serial: 13298821034946342390520003877796839426 +# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 +# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 +# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Label: "IdenTrust Public Sector Root CA 1" +# Serial: 13298821034946342390521976156843933698 +# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba +# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd +# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu +VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN +MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 +MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 +ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy +RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS +bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF +/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R +3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw +EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy +9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V +GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ +2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV +WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD +W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN +AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV +DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 +TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G +lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW +mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df +WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 ++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ +tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA +GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv +8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G2" +# Serial: 1246989352 +# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 +# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 +# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 +cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs +IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz +dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy +NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu +dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt +dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 +aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T +RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN +cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW +wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 +U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 +jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN +BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ +jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v +1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R +nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH +VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - EC1" +# Serial: 51543124481930649114116133369 +# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc +# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 +# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG +A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 +d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu +dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq +RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy +MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g +Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi +A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt +ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH +Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC +R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX +hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority +# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority +# Label: "CFCA EV ROOT" +# Serial: 407555286 +# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 +# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 +# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD +TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y +aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx +MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP +T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 +sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL +TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 +/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp +7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz +EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt +hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP +a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot +aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg +TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV +PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv +cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL +tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd +BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT +ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL +jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS +ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy +P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 +xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d +Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN +5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe +/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z +AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ +5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GB CA" +# Serial: 157768595616588414422159278966750757568 +# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d +# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed +# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg +Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i +YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x +CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG +b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 +HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx +WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX +1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk +u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P +99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r +M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB +BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh +cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 +gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO +ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf +aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Label: "SZAFIR ROOT CA2" +# Serial: 357043034767186914217277344587386743377558296292 +# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 +# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de +# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 +ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw +NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L +cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg +Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN +QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT +3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw +3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 +3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 +BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN +XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF +AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw +8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG +nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP +oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy +d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg +LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA 2" +# Serial: 44979900017204383099463764357512596969 +# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 +# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 +# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB +gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu +QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG +A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz +OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ +VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 +b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA +DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn +0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB +OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE +fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E +Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m +o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i +sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW +OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez +Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS +adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n +3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ +F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf +CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 +XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm +djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ +WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb +AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq +P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko +b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj +XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P +5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi +DrW5viSP +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce +# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 +# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix +DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k +IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT +N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v +dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG +A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh +ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx +QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA +4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 +AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 +4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C +ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV +9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD +gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 +Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq +NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko +LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd +ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I +XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI +M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot +9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V +Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea +j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh +X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ +l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf +bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 +pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK +e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 +vm9qp/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef +# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 +# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN +BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl +bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv +b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ +BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj +YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 +MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 +dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg +QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa +jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi +C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep +lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof +TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X1 O=Internet Security Research Group +# Subject: CN=ISRG Root X1 O=Internet Security Research Group +# Label: "ISRG Root X1" +# Serial: 172886928669790476064670243504169061120 +# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e +# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 +# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Label: "AC RAIZ FNMT-RCM" +# Serial: 485876308206448804701554682760554759 +# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d +# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 +# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx +CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ +WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ +BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG +Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ +yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf +BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz +WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF +tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z +374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC +IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL +mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 +wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS +MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 +ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet +UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H +YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 +LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 +RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM +LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf +77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N +JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm +fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp +6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp +1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B +9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok +RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv +uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 1 O=Amazon +# Subject: CN=Amazon Root CA 1 O=Amazon +# Label: "Amazon Root CA 1" +# Serial: 143266978916655856878034712317230054538369994 +# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 +# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 +# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 2 O=Amazon +# Subject: CN=Amazon Root CA 2 O=Amazon +# Label: "Amazon Root CA 2" +# Serial: 143266982885963551818349160658925006970653239 +# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 +# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a +# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK +gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ +W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg +1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K +8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r +2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me +z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR +8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj +mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz +7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 ++XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI +0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm +UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 +LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS +k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl +7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm +btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl +urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ +fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 +n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE +76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H +9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT +4PsJYGw= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 3 O=Amazon +# Subject: CN=Amazon Root CA 3 O=Amazon +# Label: "Amazon Root CA 3" +# Serial: 143266986699090766294700635381230934788665930 +# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 +# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e +# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl +ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr +ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr +BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM +YyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 4 O=Amazon +# Subject: CN=Amazon Root CA 4 O=Amazon +# Label: "Amazon Root CA 4" +# Serial: 143266989758080763974105200630763877849284878 +# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd +# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be +# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi +9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk +M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB +MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw +CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW +1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +# Issuer: CN=LuxTrust Global Root 2 O=LuxTrust S.A. +# Subject: CN=LuxTrust Global Root 2 O=LuxTrust S.A. +# Label: "LuxTrust Global Root 2" +# Serial: 59914338225734147123941058376788110305822489521 +# MD5 Fingerprint: b2:e1:09:00:61:af:f7:f1:91:6f:c4:ad:8d:5e:3b:7c +# SHA1 Fingerprint: 1e:0e:56:19:0a:d1:8b:25:98:b2:04:44:ff:66:8a:04:17:99:5f:3f +# SHA256 Fingerprint: 54:45:5f:71:29:c2:0b:14:47:c4:18:f9:97:16:8f:24:c5:8f:c5:02:3b:f5:da:5b:e2:eb:6e:1d:d8:90:2e:d5 +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" +# Serial: 1 +# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 +# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca +# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx +GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp +bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w +KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 +BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy +dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG +EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll +IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU +QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT +TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg +LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 +a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr +LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr +N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X +YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ +iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f +AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH +V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf +IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 +lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c +8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf +lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Label: "GDCA TrustAUTH R5 ROOT" +# Serial: 9009899650740120186 +# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 +# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 +# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE +BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 +MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w +HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj +Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj +TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u +KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj +qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm +MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 +ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP +zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk +L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC +jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA +HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC +AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm +DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 +COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry +L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf +JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg +IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io +2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV +09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ +XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq +T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe +MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-1" +# Serial: 15752444095811006489 +# MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45 +# SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a +# SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y +IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB +pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h +IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG +A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU +cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid +RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V +seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme +9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV +EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW +hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/ +DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD +ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I +/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ +yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts +L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN +zl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-2" +# Serial: 2711694510199101698 +# MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64 +# SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0 +# SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65 +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig +Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk +MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg +Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD +VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy +dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+ +QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq +1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp +2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK +DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape +az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF +3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88 +oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM +g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3 +mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd +BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U +nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw +DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX +dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+ +MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL +/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX +CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa +ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW +2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7 +N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3 +Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB +As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp +5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu +1uwJ +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor ECA-1" +# Serial: 9548242946988625984 +# MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c +# SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd +# SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y +IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig +RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb +3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA +BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5 +3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou +owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/ +wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF +ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf +BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv +civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2 +AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50 +soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI +WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi +tJ/X5g== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Label: "SSL.com Root Certification Authority RSA" +# Serial: 8875640296558310041 +# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 +# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb +# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE +BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK +DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz +OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R +xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX +qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC +C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 +6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh +/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF +YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E +JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc +US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 +ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm ++Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi +M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G +A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV +cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc +Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs +PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ +q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 +cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr +a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I +H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y +K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu +nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf +oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY +Ic2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com Root Certification Authority ECC" +# Serial: 8495723813297216424 +# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e +# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a +# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz +WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 +b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS +b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI +7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg +CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud +EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD +VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T +kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ +gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority RSA R2" +# Serial: 6248227494352943350 +# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 +# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a +# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV +BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE +CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy +MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G +A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD +DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq +M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf +OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa +4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 +HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR +aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA +b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ +Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV +PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO +pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu +UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY +MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 +9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW +s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 +Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg +cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM +79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz +/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt +ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm +Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK +QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ +w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi +S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 +mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority ECC" +# Serial: 3182246526754555285 +# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 +# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d +# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx +NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv +bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA +VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku +WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX +5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ +ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg +h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Label: "GlobalSign Root CA - R6" +# Serial: 1417766617973444989252670301619537 +# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae +# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 +# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg +MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx +MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET +MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI +xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k +ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD +aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw +LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw +1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX +k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 +SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h +bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n +WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY +rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce +MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu +bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt +Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 +55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj +vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf +cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz +oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp +nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs +pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v +JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R +8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 +5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GC CA" +# Serial: 44084345621038548146064804565436152554 +# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 +# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 +# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw +CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 +bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg +Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ +BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu +ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS +b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni +eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W +p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T +rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV +57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg +Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R1 O=Google Trust Services LLC +# Subject: CN=GTS Root R1 O=Google Trust Services LLC +# Label: "GTS Root R1" +# Serial: 146587175971765017618439757810265552097 +# MD5 Fingerprint: 82:1a:ef:d4:d2:4a:f2:9f:e2:3d:97:06:14:70:72:85 +# SHA1 Fingerprint: e1:c9:50:e6:ef:22:f8:4c:56:45:72:8b:92:20:60:d7:d5:a7:a3:e8 +# SHA256 Fingerprint: 2a:57:54:71:e3:13:40:bc:21:58:1c:bd:2c:f1:3e:15:84:63:20:3e:ce:94:bc:f9:d3:cc:19:6b:f0:9a:54:72 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBH +MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM +QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy +MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl +cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM +f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vX +mX7wCl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7 +zUjwTcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0P +fyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtc +vfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4 +Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUsp +zBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOO +Rc92wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYW +k70paDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+ +DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgF +lQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBADiW +Cu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 +d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6Z +XPYfcX3v73svfuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZR +gyFmxhE+885H7pwoHyXa/6xmld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3 +d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9bgsiG1eGZbYwE8na6SfZu6W0eX6Dv +J4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq4BjFbkerQUIpm/Zg +DdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWErtXvM ++SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyy +F62ARPBopY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9 +SQ98POyDGCBDTtWTurQ0sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdws +E3PYJ/HQcu51OyLemGhmW/HGY0dVHLqlCFF1pkgl +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R2 O=Google Trust Services LLC +# Subject: CN=GTS Root R2 O=Google Trust Services LLC +# Label: "GTS Root R2" +# Serial: 146587176055767053814479386953112547951 +# MD5 Fingerprint: 44:ed:9a:0e:a4:09:3b:00:f2:ae:4c:a3:c6:61:b0:8b +# SHA1 Fingerprint: d2:73:96:2a:2a:5e:39:9f:73:3f:e1:c7:1e:64:3f:03:38:34:fc:4d +# SHA256 Fingerprint: c4:5d:7b:b0:8e:6d:67:e6:2e:42:35:11:0b:56:4e:5f:78:fd:92:ef:05:8c:84:0a:ea:4e:64:55:d7:58:5c:60 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBH +MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM +QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy +MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl +cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv +CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3Kg +GjSY6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9Bu +XvAuMC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOd +re7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXu +PuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1 +mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K +8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqj +x5RWIr9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsR +nTKaG73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0 +kzCqgc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9Ok +twIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBALZp +8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT +vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiT +z9D2PGcDFWEJ+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiA +pJiS4wGWAqoC7o87xdFtCjMwc3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvb +pxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3DaWsYDQvTtN6LwG1BUSw7YhN4ZKJmB +R64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5rn/WkhLx3+WuXrD5R +RaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56GtmwfuNmsk +0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC +5AwiWVIQ7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiF +izoHCBy69Y9Vmhh1fuXsgWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLn +yOd/xCxgXS/Dr55FBcOEArf9LAhST4Ldo/DUhgkC +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R3 O=Google Trust Services LLC +# Subject: CN=GTS Root R3 O=Google Trust Services LLC +# Label: "GTS Root R3" +# Serial: 146587176140553309517047991083707763997 +# MD5 Fingerprint: 1a:79:5b:6b:04:52:9c:5d:c7:74:33:1b:25:9a:f9:25 +# SHA1 Fingerprint: 30:d4:24:6f:07:ff:db:91:89:8a:0b:e9:49:66:11:eb:8c:5e:46:e5 +# SHA256 Fingerprint: 15:d5:b8:77:46:19:ea:7d:54:ce:1c:a6:d0:b0:c4:03:e0:37:a9:17:f1:31:e8:a0:4e:1e:6b:7a:71:ba:bc:e5 +-----BEGIN CERTIFICATE----- +MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout +736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2A +DDL24CejQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFuk +fCPAlaUs3L6JbyO5o91lAFJekazInXJ0glMLfalAvWhgxeG4VDvBNhcl2MG9AjEA +njWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOaKaqW04MjyaR7YbPMAuhd +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R4 O=Google Trust Services LLC +# Subject: CN=GTS Root R4 O=Google Trust Services LLC +# Label: "GTS Root R4" +# Serial: 146587176229350439916519468929765261721 +# MD5 Fingerprint: 5d:b6:6a:c4:60:17:24:6a:1a:99:a8:4b:ee:5e:b4:26 +# SHA1 Fingerprint: 2a:1d:60:27:d9:4a:b1:0a:1c:4d:91:5c:cd:33:a0:cb:3e:2d:54:cb +# SHA256 Fingerprint: 71:cc:a5:39:1f:9e:79:4b:04:80:25:30:b3:63:e1:21:da:8a:30:43:bb:26:66:2f:ea:4d:ca:7f:c9:51:a4:bd +-----BEGIN CERTIFICATE----- +MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu +hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/l +xKvRHYqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0 +CMRw3J5QdCHojXohw0+WbhXRIjVhLfoIN+4Zba3bssx9BzT1YBkstTTZbyACMANx +sbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11xzPKwTdb+mciUqXWi4w== +-----END CERTIFICATE----- + +# Issuer: CN=UCA Global G2 Root O=UniTrust +# Subject: CN=UCA Global G2 Root O=UniTrust +# Label: "UCA Global G2 Root" +# Serial: 124779693093741543919145257850076631279 +# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 +# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a +# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH +bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x +CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds +b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr +b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 +kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm +VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R +VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc +C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj +tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY +D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv +j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl +NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 +iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP +O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV +ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj +L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl +1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU +b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV +PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj +y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb +EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg +DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI ++Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy +YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX +UB+K+wb1whnw0A== +-----END CERTIFICATE----- + +# Issuer: CN=UCA Extended Validation Root O=UniTrust +# Subject: CN=UCA Extended Validation Root O=UniTrust +# Label: "UCA Extended Validation Root" +# Serial: 106100277556486529736699587978573607008 +# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 +# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a +# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF +eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx +MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV +BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog +D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS +sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop +O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk +sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi +c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj +VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz +KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ +TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G +sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs +1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD +fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN +l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ +VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 +c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp +4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s +t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj +2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO +vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C +xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx +cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM +fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax +-----END CERTIFICATE----- + +# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Label: "Certigna Root CA" +# Serial: 269714418870597844693661054334862075617 +# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 +# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 +# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw +WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw +MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x +MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD +VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX +BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO +ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M +CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu +I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm +TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh +C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf +ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz +IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT +Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k +JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 +hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB +GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov +L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo +dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr +aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq +hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L +6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG +HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 +0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB +lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi +o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 +gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v +faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 +Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh +jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw +3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign Root CA - G1" +# Serial: 235931866688319308814040 +# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac +# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c +# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD +VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU +ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH +MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO +MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv +Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz +f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO +8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq +d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM +tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt +Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB +o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x +PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM +wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d +GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH +6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby +RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign ECC Root CA - G3" +# Serial: 287880440101571086945156 +# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 +# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 +# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG +EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo +bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ +TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s +b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 +WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS +fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB +zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq +hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB +CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD ++JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Label: "emSign Root CA - C1" +# Serial: 825510296613316004955058 +# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 +# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 +# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG +A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg +SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v +dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ +BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ +HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH +3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH +GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c +xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 +aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq +TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 +/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 +kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG +YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT ++xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo +WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Label: "emSign ECC Root CA - C3" +# Serial: 582948710642506000014504 +# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 +# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 +# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG +EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx +IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND +IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci +MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti +sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O +BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB +Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c +3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J +0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Label: "Hongkong Post Root CA 3" +# Serial: 46170865288971385588281144162979347873371282084 +# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 +# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 +# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 +-----BEGIN CERTIFICATE----- +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 +mpv0 +-----END CERTIFICATE----- diff --git a/my_env/Lib/site-packages/pip/_vendor/certifi/core.py b/my_env/Lib/site-packages/pip/_vendor/certifi/core.py new file mode 100644 index 000000000..7271acf40 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/certifi/core.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +""" +certifi.py +~~~~~~~~~~ + +This module returns the installation location of cacert.pem. +""" +import os + + +def where(): + f = os.path.dirname(__file__) + + return os.path.join(f, 'cacert.pem') diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__init__.py b/my_env/Lib/site-packages/pip/_vendor/chardet/__init__.py new file mode 100644 index 000000000..0f9f820ef --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/__init__.py @@ -0,0 +1,39 @@ +######################## BEGIN LICENSE BLOCK ######################## +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + + +from .compat import PY2, PY3 +from .universaldetector import UniversalDetector +from .version import __version__, VERSION + + +def detect(byte_str): + """ + Detect the encoding of the given byte string. + + :param byte_str: The byte sequence to examine. + :type byte_str: ``bytes`` or ``bytearray`` + """ + if not isinstance(byte_str, bytearray): + if not isinstance(byte_str, bytes): + raise TypeError('Expected object of type bytes or bytearray, got: ' + '{0}'.format(type(byte_str))) + else: + byte_str = bytearray(byte_str) + detector = UniversalDetector() + detector.feed(byte_str) + return detector.close() diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..84af99b2b Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-37.pyc new file mode 100644 index 000000000..20ccef20f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-37.pyc new file mode 100644 index 000000000..5c497105b Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-37.pyc new file mode 100644 index 000000000..f7dde1b7e Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-37.pyc new file mode 100644 index 000000000..a943530a8 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-37.pyc new file mode 100644 index 000000000..f643deeaf Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-37.pyc new file mode 100644 index 000000000..d03cbeb00 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/compat.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/compat.cpython-37.pyc new file mode 100644 index 000000000..7f5d13a1b Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/compat.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-37.pyc new file mode 100644 index 000000000..629185cfb Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-37.pyc new file mode 100644 index 000000000..62fdae305 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-37.pyc new file mode 100644 index 000000000..e19507f91 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-37.pyc new file mode 100644 index 000000000..b544c4c2e Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-37.pyc new file mode 100644 index 000000000..9948b833c Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-37.pyc new file mode 100644 index 000000000..a3f165afd Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-37.pyc new file mode 100644 index 000000000..66304f6e9 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-37.pyc new file mode 100644 index 000000000..79de26db8 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-37.pyc new file mode 100644 index 000000000..15527958a Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-37.pyc new file mode 100644 index 000000000..f8dc52a6c Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-37.pyc new file mode 100644 index 000000000..78836a5fa Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-37.pyc new file mode 100644 index 000000000..e355f8788 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-37.pyc new file mode 100644 index 000000000..8f0517ddb Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-37.pyc new file mode 100644 index 000000000..72324c832 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-37.pyc new file mode 100644 index 000000000..15a19726d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langcyrillicmodel.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langcyrillicmodel.cpython-37.pyc new file mode 100644 index 000000000..332e44c0f Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langcyrillicmodel.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-37.pyc new file mode 100644 index 000000000..b25f0d36d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-37.pyc new file mode 100644 index 000000000..31a6cd1a7 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-37.pyc new file mode 100644 index 000000000..151687159 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-37.pyc new file mode 100644 index 000000000..060f01be2 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-37.pyc new file mode 100644 index 000000000..b10bcdf4a Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-37.pyc new file mode 100644 index 000000000..b83a62fca Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-37.pyc new file mode 100644 index 000000000..4b8c4f4eb Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-37.pyc new file mode 100644 index 000000000..0dbd60ef9 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-37.pyc new file mode 100644 index 000000000..2ef8736eb Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-37.pyc new file mode 100644 index 000000000..daefcb625 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-37.pyc new file mode 100644 index 000000000..aaf8a19a8 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-37.pyc new file mode 100644 index 000000000..7be175a09 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-37.pyc new file mode 100644 index 000000000..0c2409de8 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-37.pyc new file mode 100644 index 000000000..cd2cccfe3 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-37.pyc new file mode 100644 index 000000000..b7e13ddc2 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/big5freq.py b/my_env/Lib/site-packages/pip/_vendor/chardet/big5freq.py new file mode 100644 index 000000000..38f32517a --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/big5freq.py @@ -0,0 +1,386 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Big5 frequency table +# by Taiwan's Mandarin Promotion Council +# +# +# 128 --> 0.42261 +# 256 --> 0.57851 +# 512 --> 0.74851 +# 1024 --> 0.89384 +# 2048 --> 0.97583 +# +# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 +# Random Distribution Ration = 512/(5401-512)=0.105 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR + +BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75 + +#Char to FreqOrder table +BIG5_TABLE_SIZE = 5376 + +BIG5_CHAR_TO_FREQ_ORDER = ( + 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16 +3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32 +1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48 + 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64 +3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80 +4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96 +5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112 + 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128 + 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144 + 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160 +2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176 +1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192 +3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208 + 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224 +1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240 +3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256 +2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272 + 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288 +3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304 +1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320 +5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336 + 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352 +5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368 +1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384 + 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400 + 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416 +3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432 +3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448 + 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464 +2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480 +2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496 + 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512 + 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528 +3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544 +1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560 +1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576 +1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592 +2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608 + 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624 +4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640 +1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656 +5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672 +2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688 + 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704 + 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720 + 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736 + 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752 +5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768 + 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784 +1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800 + 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816 + 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832 +5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848 +1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864 + 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880 +3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896 +4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912 +3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928 + 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944 + 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960 +1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976 +4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992 +3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008 +3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024 +2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040 +5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056 +3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072 +5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088 +1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104 +2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120 +1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136 + 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152 +1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168 +4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184 +3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200 + 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216 + 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232 + 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248 +2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264 +5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280 +1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296 +2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312 +1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328 +1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344 +5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360 +5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376 +5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392 +3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408 +4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424 +4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440 +2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456 +5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472 +3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488 + 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504 +5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520 +5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536 +1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552 +2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568 +3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584 +4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600 +5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616 +3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632 +4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648 +1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664 +1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680 +4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696 +1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712 + 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728 +1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744 +1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760 +3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776 + 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792 +5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808 +2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824 +1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840 +1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856 +5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872 + 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888 +4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904 + 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920 +2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936 + 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952 +1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968 +1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984 + 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000 +4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016 +4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032 +1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048 +3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064 +5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080 +5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096 +1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112 +2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128 +1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144 +3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160 +2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176 +3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192 +2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208 +4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224 +4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240 +3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256 + 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272 +3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288 + 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304 +3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320 +4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336 +3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352 +1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368 +5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384 + 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400 +5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416 +1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432 + 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448 +4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464 +4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480 + 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496 +2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512 +2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528 +3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544 +1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560 +4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576 +2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592 +1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608 +1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624 +2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640 +3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656 +1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672 +5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688 +1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704 +4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720 +1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736 + 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752 +1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768 +4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784 +4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800 +2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816 +1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832 +4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848 + 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864 +5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880 +2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896 +3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912 +4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928 + 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944 +5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960 +5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976 +1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992 +4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008 +4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024 +2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040 +3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056 +3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072 +2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088 +1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104 +4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120 +3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136 +3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152 +2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168 +4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184 +5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200 +3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216 +2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232 +3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248 +1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264 +2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280 +3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296 +4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312 +2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328 +2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344 +5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360 +1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376 +2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392 +1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408 +3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424 +4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440 +2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456 +3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472 +3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488 +2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504 +4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520 +2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536 +3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552 +4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568 +5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584 +3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600 + 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616 +1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632 +4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648 +1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664 +4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680 +5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696 + 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712 +5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728 +5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744 +2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760 +3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776 +2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792 +2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808 + 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824 +1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840 +4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856 +3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872 +3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888 + 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904 +2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920 + 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936 +2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952 +4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968 +1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984 +4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000 +1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016 +3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032 + 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048 +3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064 +5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080 +5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096 +3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112 +3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128 +1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144 +2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160 +5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176 +1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192 +1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208 +3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224 + 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240 +1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256 +4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272 +5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288 +2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304 +3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320 + 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336 +1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352 +2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368 +2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384 +5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400 +5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416 +5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432 +2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448 +2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464 +1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480 +4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496 +3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512 +3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528 +4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544 +4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560 +2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576 +2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592 +5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608 +4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624 +5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640 +4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656 + 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672 + 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688 +1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704 +3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720 +4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736 +1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752 +5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768 +2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784 +2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800 +3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816 +5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832 +1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848 +3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864 +5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880 +1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896 +5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912 +2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928 +3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944 +2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960 +3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976 +3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992 +3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008 +4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024 + 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040 +2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056 +4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072 +3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088 +5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104 +1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120 +5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136 + 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152 +1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168 + 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184 +4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200 +1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216 +4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232 +1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248 + 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264 +3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280 +4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296 +5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312 + 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328 +3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344 + 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360 +2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 +) + diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/big5prober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/big5prober.py new file mode 100644 index 000000000..98f997012 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/big5prober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import Big5DistributionAnalysis +from .mbcssm import BIG5_SM_MODEL + + +class Big5Prober(MultiByteCharSetProber): + def __init__(self): + super(Big5Prober, self).__init__() + self.coding_sm = CodingStateMachine(BIG5_SM_MODEL) + self.distribution_analyzer = Big5DistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "Big5" + + @property + def language(self): + return "Chinese" diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/chardistribution.py b/my_env/Lib/site-packages/pip/_vendor/chardet/chardistribution.py new file mode 100644 index 000000000..c0395f4a4 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/chardistribution.py @@ -0,0 +1,233 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .euctwfreq import (EUCTW_CHAR_TO_FREQ_ORDER, EUCTW_TABLE_SIZE, + EUCTW_TYPICAL_DISTRIBUTION_RATIO) +from .euckrfreq import (EUCKR_CHAR_TO_FREQ_ORDER, EUCKR_TABLE_SIZE, + EUCKR_TYPICAL_DISTRIBUTION_RATIO) +from .gb2312freq import (GB2312_CHAR_TO_FREQ_ORDER, GB2312_TABLE_SIZE, + GB2312_TYPICAL_DISTRIBUTION_RATIO) +from .big5freq import (BIG5_CHAR_TO_FREQ_ORDER, BIG5_TABLE_SIZE, + BIG5_TYPICAL_DISTRIBUTION_RATIO) +from .jisfreq import (JIS_CHAR_TO_FREQ_ORDER, JIS_TABLE_SIZE, + JIS_TYPICAL_DISTRIBUTION_RATIO) + + +class CharDistributionAnalysis(object): + ENOUGH_DATA_THRESHOLD = 1024 + SURE_YES = 0.99 + SURE_NO = 0.01 + MINIMUM_DATA_THRESHOLD = 3 + + def __init__(self): + # Mapping table to get frequency order from char order (get from + # GetOrder()) + self._char_to_freq_order = None + self._table_size = None # Size of above table + # This is a constant value which varies from language to language, + # used in calculating confidence. See + # http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html + # for further detail. + self.typical_distribution_ratio = None + self._done = None + self._total_chars = None + self._freq_chars = None + self.reset() + + def reset(self): + """reset analyser, clear any state""" + # If this flag is set to True, detection is done and conclusion has + # been made + self._done = False + self._total_chars = 0 # Total characters encountered + # The number of characters whose frequency order is less than 512 + self._freq_chars = 0 + + def feed(self, char, char_len): + """feed a character with known length""" + if char_len == 2: + # we only care about 2-bytes character in our distribution analysis + order = self.get_order(char) + else: + order = -1 + if order >= 0: + self._total_chars += 1 + # order is valid + if order < self._table_size: + if 512 > self._char_to_freq_order[order]: + self._freq_chars += 1 + + def get_confidence(self): + """return confidence based on existing data""" + # if we didn't receive any character in our consideration range, + # return negative answer + if self._total_chars <= 0 or self._freq_chars <= self.MINIMUM_DATA_THRESHOLD: + return self.SURE_NO + + if self._total_chars != self._freq_chars: + r = (self._freq_chars / ((self._total_chars - self._freq_chars) + * self.typical_distribution_ratio)) + if r < self.SURE_YES: + return r + + # normalize confidence (we don't want to be 100% sure) + return self.SURE_YES + + def got_enough_data(self): + # It is not necessary to receive all data to draw conclusion. + # For charset detection, certain amount of data is enough + return self._total_chars > self.ENOUGH_DATA_THRESHOLD + + def get_order(self, byte_str): + # We do not handle characters based on the original encoding string, + # but convert this encoding string to a number, here called order. + # This allows multiple encodings of a language to share one frequency + # table. + return -1 + + +class EUCTWDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(EUCTWDistributionAnalysis, self).__init__() + self._char_to_freq_order = EUCTW_CHAR_TO_FREQ_ORDER + self._table_size = EUCTW_TABLE_SIZE + self.typical_distribution_ratio = EUCTW_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for euc-TW encoding, we are interested + # first byte range: 0xc4 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char = byte_str[0] + if first_char >= 0xC4: + return 94 * (first_char - 0xC4) + byte_str[1] - 0xA1 + else: + return -1 + + +class EUCKRDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(EUCKRDistributionAnalysis, self).__init__() + self._char_to_freq_order = EUCKR_CHAR_TO_FREQ_ORDER + self._table_size = EUCKR_TABLE_SIZE + self.typical_distribution_ratio = EUCKR_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for euc-KR encoding, we are interested + # first byte range: 0xb0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char = byte_str[0] + if first_char >= 0xB0: + return 94 * (first_char - 0xB0) + byte_str[1] - 0xA1 + else: + return -1 + + +class GB2312DistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(GB2312DistributionAnalysis, self).__init__() + self._char_to_freq_order = GB2312_CHAR_TO_FREQ_ORDER + self._table_size = GB2312_TABLE_SIZE + self.typical_distribution_ratio = GB2312_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for GB2312 encoding, we are interested + # first byte range: 0xb0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if (first_char >= 0xB0) and (second_char >= 0xA1): + return 94 * (first_char - 0xB0) + second_char - 0xA1 + else: + return -1 + + +class Big5DistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(Big5DistributionAnalysis, self).__init__() + self._char_to_freq_order = BIG5_CHAR_TO_FREQ_ORDER + self._table_size = BIG5_TABLE_SIZE + self.typical_distribution_ratio = BIG5_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for big5 encoding, we are interested + # first byte range: 0xa4 -- 0xfe + # second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if first_char >= 0xA4: + if second_char >= 0xA1: + return 157 * (first_char - 0xA4) + second_char - 0xA1 + 63 + else: + return 157 * (first_char - 0xA4) + second_char - 0x40 + else: + return -1 + + +class SJISDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(SJISDistributionAnalysis, self).__init__() + self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER + self._table_size = JIS_TABLE_SIZE + self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for sjis encoding, we are interested + # first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe + # second byte range: 0x40 -- 0x7e, 0x81 -- oxfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if (first_char >= 0x81) and (first_char <= 0x9F): + order = 188 * (first_char - 0x81) + elif (first_char >= 0xE0) and (first_char <= 0xEF): + order = 188 * (first_char - 0xE0 + 31) + else: + return -1 + order = order + second_char - 0x40 + if second_char > 0x7F: + order = -1 + return order + + +class EUCJPDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(EUCJPDistributionAnalysis, self).__init__() + self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER + self._table_size = JIS_TABLE_SIZE + self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for euc-JP encoding, we are interested + # first byte range: 0xa0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + char = byte_str[0] + if char >= 0xA0: + return 94 * (char - 0xA1) + byte_str[1] - 0xa1 + else: + return -1 diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py new file mode 100644 index 000000000..8b3738efd --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py @@ -0,0 +1,106 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import ProbingState +from .charsetprober import CharSetProber + + +class CharSetGroupProber(CharSetProber): + def __init__(self, lang_filter=None): + super(CharSetGroupProber, self).__init__(lang_filter=lang_filter) + self._active_num = 0 + self.probers = [] + self._best_guess_prober = None + + def reset(self): + super(CharSetGroupProber, self).reset() + self._active_num = 0 + for prober in self.probers: + if prober: + prober.reset() + prober.active = True + self._active_num += 1 + self._best_guess_prober = None + + @property + def charset_name(self): + if not self._best_guess_prober: + self.get_confidence() + if not self._best_guess_prober: + return None + return self._best_guess_prober.charset_name + + @property + def language(self): + if not self._best_guess_prober: + self.get_confidence() + if not self._best_guess_prober: + return None + return self._best_guess_prober.language + + def feed(self, byte_str): + for prober in self.probers: + if not prober: + continue + if not prober.active: + continue + state = prober.feed(byte_str) + if not state: + continue + if state == ProbingState.FOUND_IT: + self._best_guess_prober = prober + return self.state + elif state == ProbingState.NOT_ME: + prober.active = False + self._active_num -= 1 + if self._active_num <= 0: + self._state = ProbingState.NOT_ME + return self.state + return self.state + + def get_confidence(self): + state = self.state + if state == ProbingState.FOUND_IT: + return 0.99 + elif state == ProbingState.NOT_ME: + return 0.01 + best_conf = 0.0 + self._best_guess_prober = None + for prober in self.probers: + if not prober: + continue + if not prober.active: + self.logger.debug('%s not active', prober.charset_name) + continue + conf = prober.get_confidence() + self.logger.debug('%s %s confidence = %s', prober.charset_name, prober.language, conf) + if best_conf < conf: + best_conf = conf + self._best_guess_prober = prober + if not self._best_guess_prober: + return 0.0 + return best_conf diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/charsetprober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/charsetprober.py new file mode 100644 index 000000000..eac4e5986 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/charsetprober.py @@ -0,0 +1,145 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import logging +import re + +from .enums import ProbingState + + +class CharSetProber(object): + + SHORTCUT_THRESHOLD = 0.95 + + def __init__(self, lang_filter=None): + self._state = None + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + + def reset(self): + self._state = ProbingState.DETECTING + + @property + def charset_name(self): + return None + + def feed(self, buf): + pass + + @property + def state(self): + return self._state + + def get_confidence(self): + return 0.0 + + @staticmethod + def filter_high_byte_only(buf): + buf = re.sub(b'([\x00-\x7F])+', b' ', buf) + return buf + + @staticmethod + def filter_international_words(buf): + """ + We define three types of bytes: + alphabet: english alphabets [a-zA-Z] + international: international characters [\x80-\xFF] + marker: everything else [^a-zA-Z\x80-\xFF] + + The input buffer can be thought to contain a series of words delimited + by markers. This function works to filter all words that contain at + least one international character. All contiguous sequences of markers + are replaced by a single space ascii character. + + This filter applies to all scripts which do not use English characters. + """ + filtered = bytearray() + + # This regex expression filters out only words that have at-least one + # international character. The word may include one marker character at + # the end. + words = re.findall(b'[a-zA-Z]*[\x80-\xFF]+[a-zA-Z]*[^a-zA-Z\x80-\xFF]?', + buf) + + for word in words: + filtered.extend(word[:-1]) + + # If the last character in the word is a marker, replace it with a + # space as markers shouldn't affect our analysis (they are used + # similarly across all languages and may thus have similar + # frequencies). + last_char = word[-1:] + if not last_char.isalpha() and last_char < b'\x80': + last_char = b' ' + filtered.extend(last_char) + + return filtered + + @staticmethod + def filter_with_english_letters(buf): + """ + Returns a copy of ``buf`` that retains only the sequences of English + alphabet and high byte characters that are not between <> characters. + Also retains English alphabet and high byte characters immediately + before occurrences of >. + + This filter can be applied to all scripts which contain both English + characters and extended ASCII characters, but is currently only used by + ``Latin1Prober``. + """ + filtered = bytearray() + in_tag = False + prev = 0 + + for curr in range(len(buf)): + # Slice here to get bytes instead of an int with Python 3 + buf_char = buf[curr:curr + 1] + # Check if we're coming out of or entering an HTML tag + if buf_char == b'>': + in_tag = False + elif buf_char == b'<': + in_tag = True + + # If current character is not extended-ASCII and not alphabetic... + if buf_char < b'\x80' and not buf_char.isalpha(): + # ...and we're not in a tag + if curr > prev and not in_tag: + # Keep everything after last non-extended-ASCII, + # non-alphabetic character + filtered.extend(buf[prev:curr]) + # Output a space to delimit stretch we kept + filtered.extend(b' ') + prev = curr + 1 + + # If we're not in a tag... + if not in_tag: + # Keep everything after last non-extended-ASCII, non-alphabetic + # character + filtered.extend(buf[prev:]) + + return filtered diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py b/my_env/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py @@ -0,0 +1 @@ + diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..0c4be81c7 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-37.pyc new file mode 100644 index 000000000..ed7cade49 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py b/my_env/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py new file mode 100644 index 000000000..c61136b63 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python +""" +Script which takes one or more file paths and reports on their detected +encodings + +Example:: + + % chardetect somefile someotherfile + somefile: windows-1252 with confidence 0.5 + someotherfile: ascii with confidence 1.0 + +If no paths are provided, it takes its input from stdin. + +""" + +from __future__ import absolute_import, print_function, unicode_literals + +import argparse +import sys + +from pip._vendor.chardet import __version__ +from pip._vendor.chardet.compat import PY2 +from pip._vendor.chardet.universaldetector import UniversalDetector + + +def description_of(lines, name='stdin'): + """ + Return a string describing the probable encoding of a file or + list of strings. + + :param lines: The lines to get the encoding of. + :type lines: Iterable of bytes + :param name: Name of file or collection of lines + :type name: str + """ + u = UniversalDetector() + for line in lines: + line = bytearray(line) + u.feed(line) + # shortcut out of the loop to save reading further - particularly useful if we read a BOM. + if u.done: + break + u.close() + result = u.result + if PY2: + name = name.decode(sys.getfilesystemencoding(), 'ignore') + if result['encoding']: + return '{0}: {1} with confidence {2}'.format(name, result['encoding'], + result['confidence']) + else: + return '{0}: no result'.format(name) + + +def main(argv=None): + """ + Handles command line arguments and gets things started. + + :param argv: List of arguments, as if specified on the command-line. + If None, ``sys.argv[1:]`` is used instead. + :type argv: list of str + """ + # Get command line arguments + parser = argparse.ArgumentParser( + description="Takes one or more file paths and reports their detected \ + encodings") + parser.add_argument('input', + help='File whose encoding we would like to determine. \ + (default: stdin)', + type=argparse.FileType('rb'), nargs='*', + default=[sys.stdin if PY2 else sys.stdin.buffer]) + parser.add_argument('--version', action='version', + version='%(prog)s {0}'.format(__version__)) + args = parser.parse_args(argv) + + for f in args.input: + if f.isatty(): + print("You are running chardetect interactively. Press " + + "CTRL-D twice at the start of a blank line to signal the " + + "end of your input. If you want help, run chardetect " + + "--help\n", file=sys.stderr) + print(description_of(f, f.name)) + + +if __name__ == '__main__': + main() diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py b/my_env/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py new file mode 100644 index 000000000..68fba44f1 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py @@ -0,0 +1,88 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import logging + +from .enums import MachineState + + +class CodingStateMachine(object): + """ + A state machine to verify a byte sequence for a particular encoding. For + each byte the detector receives, it will feed that byte to every active + state machine available, one byte at a time. The state machine changes its + state based on its previous state and the byte it receives. There are 3 + states in a state machine that are of interest to an auto-detector: + + START state: This is the state to start with, or a legal byte sequence + (i.e. a valid code point) for character has been identified. + + ME state: This indicates that the state machine identified a byte sequence + that is specific to the charset it is designed for and that + there is no other possible encoding which can contain this byte + sequence. This will to lead to an immediate positive answer for + the detector. + + ERROR state: This indicates the state machine identified an illegal byte + sequence for that encoding. This will lead to an immediate + negative answer for this encoding. Detector will exclude this + encoding from consideration from here on. + """ + def __init__(self, sm): + self._model = sm + self._curr_byte_pos = 0 + self._curr_char_len = 0 + self._curr_state = None + self.logger = logging.getLogger(__name__) + self.reset() + + def reset(self): + self._curr_state = MachineState.START + + def next_state(self, c): + # for each byte we get its class + # if it is first byte, we also get byte length + byte_class = self._model['class_table'][c] + if self._curr_state == MachineState.START: + self._curr_byte_pos = 0 + self._curr_char_len = self._model['char_len_table'][byte_class] + # from byte's class and state_table, we get its next state + curr_state = (self._curr_state * self._model['class_factor'] + + byte_class) + self._curr_state = self._model['state_table'][curr_state] + self._curr_byte_pos += 1 + return self._curr_state + + def get_current_charlen(self): + return self._curr_char_len + + def get_coding_state_machine(self): + return self._model['name'] + + @property + def language(self): + return self._model['language'] diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/compat.py b/my_env/Lib/site-packages/pip/_vendor/chardet/compat.py new file mode 100644 index 000000000..ddd74687c --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/compat.py @@ -0,0 +1,34 @@ +######################## BEGIN LICENSE BLOCK ######################## +# Contributor(s): +# Dan Blanchard +# Ian Cordasco +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import sys + + +if sys.version_info < (3, 0): + PY2 = True + PY3 = False + base_str = (str, unicode) + text_type = unicode +else: + PY2 = False + PY3 = True + base_str = (bytes, str) + text_type = str diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/cp949prober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/cp949prober.py new file mode 100644 index 000000000..efd793abc --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/cp949prober.py @@ -0,0 +1,49 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import EUCKRDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import CP949_SM_MODEL + + +class CP949Prober(MultiByteCharSetProber): + def __init__(self): + super(CP949Prober, self).__init__() + self.coding_sm = CodingStateMachine(CP949_SM_MODEL) + # NOTE: CP949 is a superset of EUC-KR, so the distribution should be + # not different. + self.distribution_analyzer = EUCKRDistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "CP949" + + @property + def language(self): + return "Korean" diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/enums.py b/my_env/Lib/site-packages/pip/_vendor/chardet/enums.py new file mode 100644 index 000000000..045120722 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/enums.py @@ -0,0 +1,76 @@ +""" +All of the Enums that are used throughout the chardet package. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + + +class InputState(object): + """ + This enum represents the different states a universal detector can be in. + """ + PURE_ASCII = 0 + ESC_ASCII = 1 + HIGH_BYTE = 2 + + +class LanguageFilter(object): + """ + This enum represents the different language filters we can apply to a + ``UniversalDetector``. + """ + CHINESE_SIMPLIFIED = 0x01 + CHINESE_TRADITIONAL = 0x02 + JAPANESE = 0x04 + KOREAN = 0x08 + NON_CJK = 0x10 + ALL = 0x1F + CHINESE = CHINESE_SIMPLIFIED | CHINESE_TRADITIONAL + CJK = CHINESE | JAPANESE | KOREAN + + +class ProbingState(object): + """ + This enum represents the different states a prober can be in. + """ + DETECTING = 0 + FOUND_IT = 1 + NOT_ME = 2 + + +class MachineState(object): + """ + This enum represents the different states a state machine can be in. + """ + START = 0 + ERROR = 1 + ITS_ME = 2 + + +class SequenceLikelihood(object): + """ + This enum represents the likelihood of a character following the previous one. + """ + NEGATIVE = 0 + UNLIKELY = 1 + LIKELY = 2 + POSITIVE = 3 + + @classmethod + def get_num_categories(cls): + """:returns: The number of likelihood categories in the enum.""" + return 4 + + +class CharacterCategory(object): + """ + This enum represents the different categories language models for + ``SingleByteCharsetProber`` put characters into. + + Anything less than CONTROL is considered a letter. + """ + UNDEFINED = 255 + LINE_BREAK = 254 + SYMBOL = 253 + DIGIT = 252 + CONTROL = 251 diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/escprober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/escprober.py new file mode 100644 index 000000000..c70493f2b --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/escprober.py @@ -0,0 +1,101 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import LanguageFilter, ProbingState, MachineState +from .escsm import (HZ_SM_MODEL, ISO2022CN_SM_MODEL, ISO2022JP_SM_MODEL, + ISO2022KR_SM_MODEL) + + +class EscCharSetProber(CharSetProber): + """ + This CharSetProber uses a "code scheme" approach for detecting encodings, + whereby easily recognizable escape or shift sequences are relied on to + identify these encodings. + """ + + def __init__(self, lang_filter=None): + super(EscCharSetProber, self).__init__(lang_filter=lang_filter) + self.coding_sm = [] + if self.lang_filter & LanguageFilter.CHINESE_SIMPLIFIED: + self.coding_sm.append(CodingStateMachine(HZ_SM_MODEL)) + self.coding_sm.append(CodingStateMachine(ISO2022CN_SM_MODEL)) + if self.lang_filter & LanguageFilter.JAPANESE: + self.coding_sm.append(CodingStateMachine(ISO2022JP_SM_MODEL)) + if self.lang_filter & LanguageFilter.KOREAN: + self.coding_sm.append(CodingStateMachine(ISO2022KR_SM_MODEL)) + self.active_sm_count = None + self._detected_charset = None + self._detected_language = None + self._state = None + self.reset() + + def reset(self): + super(EscCharSetProber, self).reset() + for coding_sm in self.coding_sm: + if not coding_sm: + continue + coding_sm.active = True + coding_sm.reset() + self.active_sm_count = len(self.coding_sm) + self._detected_charset = None + self._detected_language = None + + @property + def charset_name(self): + return self._detected_charset + + @property + def language(self): + return self._detected_language + + def get_confidence(self): + if self._detected_charset: + return 0.99 + else: + return 0.00 + + def feed(self, byte_str): + for c in byte_str: + for coding_sm in self.coding_sm: + if not coding_sm or not coding_sm.active: + continue + coding_state = coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + coding_sm.active = False + self.active_sm_count -= 1 + if self.active_sm_count <= 0: + self._state = ProbingState.NOT_ME + return self.state + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + self._detected_charset = coding_sm.get_coding_state_machine() + self._detected_language = coding_sm.language + return self.state + + return self.state diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/escsm.py b/my_env/Lib/site-packages/pip/_vendor/chardet/escsm.py new file mode 100644 index 000000000..0069523a0 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/escsm.py @@ -0,0 +1,246 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import MachineState + +HZ_CLS = ( +1,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,0,0,0,0, # 20 - 27 +0,0,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,0,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,4,0,5,2,0, # 78 - 7f +1,1,1,1,1,1,1,1, # 80 - 87 +1,1,1,1,1,1,1,1, # 88 - 8f +1,1,1,1,1,1,1,1, # 90 - 97 +1,1,1,1,1,1,1,1, # 98 - 9f +1,1,1,1,1,1,1,1, # a0 - a7 +1,1,1,1,1,1,1,1, # a8 - af +1,1,1,1,1,1,1,1, # b0 - b7 +1,1,1,1,1,1,1,1, # b8 - bf +1,1,1,1,1,1,1,1, # c0 - c7 +1,1,1,1,1,1,1,1, # c8 - cf +1,1,1,1,1,1,1,1, # d0 - d7 +1,1,1,1,1,1,1,1, # d8 - df +1,1,1,1,1,1,1,1, # e0 - e7 +1,1,1,1,1,1,1,1, # e8 - ef +1,1,1,1,1,1,1,1, # f0 - f7 +1,1,1,1,1,1,1,1, # f8 - ff +) + +HZ_ST = ( +MachineState.START,MachineState.ERROR, 3,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START, 4,MachineState.ERROR,# 10-17 + 5,MachineState.ERROR, 6,MachineState.ERROR, 5, 5, 4,MachineState.ERROR,# 18-1f + 4,MachineState.ERROR, 4, 4, 4,MachineState.ERROR, 4,MachineState.ERROR,# 20-27 + 4,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 28-2f +) + +HZ_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +HZ_SM_MODEL = {'class_table': HZ_CLS, + 'class_factor': 6, + 'state_table': HZ_ST, + 'char_len_table': HZ_CHAR_LEN_TABLE, + 'name': "HZ-GB-2312", + 'language': 'Chinese'} + +ISO2022CN_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,0,0,0,0, # 20 - 27 +0,3,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,4,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022CN_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 +MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f +MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,# 18-1f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 20-27 + 5, 6,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 28-2f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 30-37 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,# 38-3f +) + +ISO2022CN_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022CN_SM_MODEL = {'class_table': ISO2022CN_CLS, + 'class_factor': 9, + 'state_table': ISO2022CN_ST, + 'char_len_table': ISO2022CN_CHAR_LEN_TABLE, + 'name': "ISO-2022-CN", + 'language': 'Chinese'} + +ISO2022JP_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,2,2, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,7,0,0,0, # 20 - 27 +3,0,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +6,0,4,0,8,0,0,0, # 40 - 47 +0,9,5,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022JP_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 +MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,# 18-1f +MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 20-27 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 6,MachineState.ITS_ME,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,# 28-2f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,# 30-37 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 38-3f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.START,# 40-47 +) + +ISO2022JP_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022JP_SM_MODEL = {'class_table': ISO2022JP_CLS, + 'class_factor': 10, + 'state_table': ISO2022JP_ST, + 'char_len_table': ISO2022JP_CHAR_LEN_TABLE, + 'name': "ISO-2022-JP", + 'language': 'Japanese'} + +ISO2022KR_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,3,0,0,0, # 20 - 27 +0,4,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,5,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022KR_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 10-17 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 18-1f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 20-27 +) + +ISO2022KR_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +ISO2022KR_SM_MODEL = {'class_table': ISO2022KR_CLS, + 'class_factor': 6, + 'state_table': ISO2022KR_ST, + 'char_len_table': ISO2022KR_CHAR_LEN_TABLE, + 'name': "ISO-2022-KR", + 'language': 'Korean'} + + diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py new file mode 100644 index 000000000..20ce8f7d1 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py @@ -0,0 +1,92 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import ProbingState, MachineState +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import EUCJPDistributionAnalysis +from .jpcntx import EUCJPContextAnalysis +from .mbcssm import EUCJP_SM_MODEL + + +class EUCJPProber(MultiByteCharSetProber): + def __init__(self): + super(EUCJPProber, self).__init__() + self.coding_sm = CodingStateMachine(EUCJP_SM_MODEL) + self.distribution_analyzer = EUCJPDistributionAnalysis() + self.context_analyzer = EUCJPContextAnalysis() + self.reset() + + def reset(self): + super(EUCJPProber, self).reset() + self.context_analyzer.reset() + + @property + def charset_name(self): + return "EUC-JP" + + @property + def language(self): + return "Japanese" + + def feed(self, byte_str): + for i in range(len(byte_str)): + # PY3K: byte_str is a byte array, so byte_str[i] is an int, not a byte + coding_state = self.coding_sm.next_state(byte_str[i]) + if coding_state == MachineState.ERROR: + self.logger.debug('%s %s prober hit error at byte %s', + self.charset_name, self.language, i) + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte_str[0] + self.context_analyzer.feed(self._last_char, char_len) + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.context_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + self.distribution_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if (self.context_analyzer.got_enough_data() and + (self.get_confidence() > self.SHORTCUT_THRESHOLD)): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + context_conf = self.context_analyzer.get_confidence() + distrib_conf = self.distribution_analyzer.get_confidence() + return max(context_conf, distrib_conf) diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py b/my_env/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py new file mode 100644 index 000000000..b68078cb9 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py @@ -0,0 +1,195 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Sampling from about 20M text materials include literature and computer technology + +# 128 --> 0.79 +# 256 --> 0.92 +# 512 --> 0.986 +# 1024 --> 0.99944 +# 2048 --> 0.99999 +# +# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 +# Random Distribution Ration = 512 / (2350-512) = 0.279. +# +# Typical Distribution Ratio + +EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0 + +EUCKR_TABLE_SIZE = 2352 + +# Char to FreqOrder table , +EUCKR_CHAR_TO_FREQ_ORDER = ( + 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, +1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, +1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, + 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, + 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, + 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, +1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, + 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, + 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, +1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, +1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, +1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, +1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, +1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, + 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, +1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, +1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, +1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, +1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, + 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, +1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, + 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, + 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, +1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, + 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, +1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, + 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, + 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, +1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, +1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, +1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, +1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, + 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, +1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, + 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, + 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, +1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, +1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, +1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, +1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, +1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, +1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, + 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, + 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, + 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, +1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, + 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, +1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, + 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, + 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, +2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, + 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, + 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, +2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, +2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, +2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, + 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, + 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, +2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, + 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, +1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, +2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, +1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, +2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, +2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, +1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, + 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, +2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, +2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, + 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, + 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, +2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, +1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, +2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, +2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, +2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, +2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, +2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, +2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, +1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, +2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, +2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, +2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, +2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, +2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, +1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, +1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, +2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, +1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, +2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, +1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, + 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, +2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, + 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, +2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, + 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, +2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, +2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, + 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, +2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, +1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, + 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, +1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, +2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, +1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, +2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, + 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, +2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, +1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, +2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, +1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, +2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, +1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, + 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, +2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, +2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, + 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, + 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, +1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, +1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, + 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, +2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, +2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, + 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, + 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, + 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, +2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, + 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, + 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, +2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, +2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, + 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, +2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, +1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, + 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, +2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, +2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, +2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, + 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, + 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, + 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, +2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, +2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, +2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, +1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, +2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, + 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256 +) + diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/euckrprober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/euckrprober.py new file mode 100644 index 000000000..345a060d0 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/euckrprober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import EUCKRDistributionAnalysis +from .mbcssm import EUCKR_SM_MODEL + + +class EUCKRProber(MultiByteCharSetProber): + def __init__(self): + super(EUCKRProber, self).__init__() + self.coding_sm = CodingStateMachine(EUCKR_SM_MODEL) + self.distribution_analyzer = EUCKRDistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "EUC-KR" + + @property + def language(self): + return "Korean" diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py b/my_env/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py new file mode 100644 index 000000000..ed7a995a3 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py @@ -0,0 +1,387 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# EUCTW frequency table +# Converted from big5 work +# by Taiwan's Mandarin Promotion Council +# + +# 128 --> 0.42261 +# 256 --> 0.57851 +# 512 --> 0.74851 +# 1024 --> 0.89384 +# 2048 --> 0.97583 +# +# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 +# Random Distribution Ration = 512/(5401-512)=0.105 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR + +EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75 + +# Char to FreqOrder table , +EUCTW_TABLE_SIZE = 5376 + +EUCTW_CHAR_TO_FREQ_ORDER = ( + 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, # 2742 +3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, # 2758 +1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, # 2774 + 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, # 2790 +3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, # 2806 +4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, # 2822 +7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, # 2838 + 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, # 2854 + 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, # 2870 + 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, # 2886 +2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, # 2902 +1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, # 2918 +3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, # 2934 + 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, # 2950 +1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, # 2966 +3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, # 2982 +2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, # 2998 + 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, # 3014 +3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, # 3030 +1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, # 3046 +7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, # 3062 + 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, # 3078 +7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, # 3094 +1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, # 3110 + 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, # 3126 + 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, # 3142 +3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, # 3158 +3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, # 3174 + 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, # 3190 +2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, # 3206 +2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, # 3222 + 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, # 3238 + 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, # 3254 +3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, # 3270 +1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, # 3286 +1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, # 3302 +1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, # 3318 +2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, # 3334 + 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, # 3350 +4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, # 3366 +1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, # 3382 +7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, # 3398 +2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, # 3414 + 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, # 3430 + 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, # 3446 + 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, # 3462 + 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, # 3478 +7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, # 3494 + 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, # 3510 +1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, # 3526 + 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, # 3542 + 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, # 3558 +7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, # 3574 +1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, # 3590 + 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, # 3606 +3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, # 3622 +4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, # 3638 +3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, # 3654 + 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, # 3670 + 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, # 3686 +1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, # 3702 +4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, # 3718 +3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, # 3734 +3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, # 3750 +2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, # 3766 +7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, # 3782 +3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, # 3798 +7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, # 3814 +1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, # 3830 +2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, # 3846 +1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, # 3862 + 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, # 3878 +1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, # 3894 +4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, # 3910 +3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, # 3926 + 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, # 3942 + 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, # 3958 + 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, # 3974 +2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, # 3990 +7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, # 4006 +1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, # 4022 +2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, # 4038 +1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, # 4054 +1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, # 4070 +7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, # 4086 +7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, # 4102 +7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, # 4118 +3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, # 4134 +4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, # 4150 +1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, # 4166 +7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, # 4182 +2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, # 4198 +7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, # 4214 +3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, # 4230 +3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, # 4246 +7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, # 4262 +2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, # 4278 +7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, # 4294 + 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, # 4310 +4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, # 4326 +2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, # 4342 +7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, # 4358 +3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, # 4374 +2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, # 4390 +2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, # 4406 + 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, # 4422 +2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, # 4438 +1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, # 4454 +1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, # 4470 +2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, # 4486 +1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, # 4502 +7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, # 4518 +7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, # 4534 +2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, # 4550 +4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, # 4566 +1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, # 4582 +7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, # 4598 + 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, # 4614 +4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, # 4630 + 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, # 4646 +2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, # 4662 + 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, # 4678 +1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, # 4694 +1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, # 4710 + 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, # 4726 +3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, # 4742 +3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, # 4758 +1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, # 4774 +3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, # 4790 +7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, # 4806 +7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, # 4822 +1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, # 4838 +2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, # 4854 +1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, # 4870 +3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, # 4886 +2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, # 4902 +3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, # 4918 +2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, # 4934 +4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, # 4950 +4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, # 4966 +3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, # 4982 + 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, # 4998 +3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, # 5014 + 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, # 5030 +3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, # 5046 +3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, # 5062 +3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, # 5078 +1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, # 5094 +7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, # 5110 + 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, # 5126 +7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, # 5142 +1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, # 5158 + 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, # 5174 +4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, # 5190 +3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, # 5206 + 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, # 5222 +2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, # 5238 +2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, # 5254 +3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, # 5270 +1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, # 5286 +4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, # 5302 +2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, # 5318 +1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, # 5334 +1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, # 5350 +2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, # 5366 +3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, # 5382 +1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, # 5398 +7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, # 5414 +1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, # 5430 +4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, # 5446 +1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, # 5462 + 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, # 5478 +1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, # 5494 +3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, # 5510 +3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, # 5526 +2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, # 5542 +1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, # 5558 +4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, # 5574 + 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, # 5590 +7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, # 5606 +2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, # 5622 +3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, # 5638 +4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, # 5654 + 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, # 5670 +7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, # 5686 +7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, # 5702 +1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, # 5718 +4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, # 5734 +3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, # 5750 +2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, # 5766 +3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, # 5782 +3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, # 5798 +2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, # 5814 +1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, # 5830 +4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, # 5846 +3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, # 5862 +3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, # 5878 +2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, # 5894 +4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, # 5910 +7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, # 5926 +3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, # 5942 +2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, # 5958 +3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, # 5974 +1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, # 5990 +2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, # 6006 +3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, # 6022 +4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, # 6038 +2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, # 6054 +2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, # 6070 +7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, # 6086 +1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, # 6102 +2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, # 6118 +1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, # 6134 +3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, # 6150 +4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, # 6166 +2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, # 6182 +3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, # 6198 +3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, # 6214 +2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, # 6230 +4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, # 6246 +2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, # 6262 +3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, # 6278 +4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, # 6294 +7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, # 6310 +3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, # 6326 + 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, # 6342 +1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, # 6358 +4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, # 6374 +1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, # 6390 +4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, # 6406 +7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, # 6422 + 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, # 6438 +7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, # 6454 +2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, # 6470 +1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, # 6486 +1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, # 6502 +3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, # 6518 + 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, # 6534 + 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, # 6550 + 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, # 6566 +3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, # 6582 +2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, # 6598 + 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, # 6614 +7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, # 6630 +1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, # 6646 +3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, # 6662 +7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, # 6678 +1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, # 6694 +7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, # 6710 +4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, # 6726 +1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, # 6742 +2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, # 6758 +2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, # 6774 +4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, # 6790 + 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, # 6806 + 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, # 6822 +3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, # 6838 +3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, # 6854 +1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, # 6870 +2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, # 6886 +7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, # 6902 +1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, # 6918 +1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, # 6934 +3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, # 6950 + 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, # 6966 +1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, # 6982 +4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, # 6998 +7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, # 7014 +2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, # 7030 +3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, # 7046 + 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, # 7062 +1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, # 7078 +2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, # 7094 +2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, # 7110 +7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, # 7126 +7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, # 7142 +7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, # 7158 +2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, # 7174 +2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, # 7190 +1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, # 7206 +4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, # 7222 +3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, # 7238 +3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, # 7254 +4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, # 7270 +4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, # 7286 +2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, # 7302 +2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, # 7318 +7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, # 7334 +4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, # 7350 +7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, # 7366 +2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, # 7382 +1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, # 7398 +3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, # 7414 +4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, # 7430 +2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, # 7446 + 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, # 7462 +2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, # 7478 +1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, # 7494 +2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, # 7510 +2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, # 7526 +4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, # 7542 +7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, # 7558 +1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, # 7574 +3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, # 7590 +7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, # 7606 +1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, # 7622 +8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, # 7638 +2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, # 7654 +8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, # 7670 +2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, # 7686 +2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, # 7702 +8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, # 7718 +8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, # 7734 +8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, # 7750 + 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, # 7766 +8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, # 7782 +4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, # 7798 +3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, # 7814 +8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, # 7830 +1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, # 7846 +8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, # 7862 + 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, # 7878 +1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, # 7894 + 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, # 7910 +4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, # 7926 +1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, # 7942 +4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, # 7958 +1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, # 7974 + 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, # 7990 +3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, # 8006 +4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, # 8022 +8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, # 8038 + 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, # 8054 +3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, # 8070 + 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, # 8086 +2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, # 8102 +) + diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/euctwprober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/euctwprober.py new file mode 100644 index 000000000..35669cc4d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/euctwprober.py @@ -0,0 +1,46 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import EUCTWDistributionAnalysis +from .mbcssm import EUCTW_SM_MODEL + +class EUCTWProber(MultiByteCharSetProber): + def __init__(self): + super(EUCTWProber, self).__init__() + self.coding_sm = CodingStateMachine(EUCTW_SM_MODEL) + self.distribution_analyzer = EUCTWDistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "EUC-TW" + + @property + def language(self): + return "Taiwan" diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py b/my_env/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py new file mode 100644 index 000000000..697837bd9 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py @@ -0,0 +1,283 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# GB2312 most frequently used character table +# +# Char to FreqOrder table , from hz6763 + +# 512 --> 0.79 -- 0.79 +# 1024 --> 0.92 -- 0.13 +# 2048 --> 0.98 -- 0.06 +# 6768 --> 1.00 -- 0.02 +# +# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79 +# Random Distribution Ration = 512 / (3755 - 512) = 0.157 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR + +GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9 + +GB2312_TABLE_SIZE = 3760 + +GB2312_CHAR_TO_FREQ_ORDER = ( +1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, +2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, +2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, + 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, +1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, +1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, + 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, +1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, +2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, +3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, + 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, +1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, + 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, +2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, + 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, +2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, +1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, +3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, + 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, +1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, + 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, +2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, +1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, +3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, +1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, +2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, +1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, + 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, +3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, +3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, + 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, +3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, + 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, +1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, +3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, +2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, +1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, + 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, +1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, +4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, + 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, +3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, +3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, + 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, +1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, +2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, +1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, +1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, + 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, +3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, +3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, +4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, + 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, +3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, +1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, +1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, +4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, + 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, + 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, +3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, +1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, + 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, +1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, +2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, + 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, + 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, + 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, +3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, +4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, +3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, + 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, +2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, +2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, +2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, + 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, +2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, + 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, + 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, + 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, +3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, +2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, +2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, +1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, + 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, +2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, + 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, + 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, +1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, +1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, + 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, + 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, +1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, +2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, +3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, +2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, +2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, +2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, +3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, +1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, +1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, +2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, +1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, +3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, +1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, +1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, +3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, + 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, +2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, +1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, +4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, +1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, +1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, +3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, +1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, + 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, + 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, +1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, + 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, +1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, +1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, + 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, +3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, +4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, +3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, +2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, +2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, +1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, +3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, +2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, +1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, +1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, + 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, +2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, +2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, +3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, +4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, +3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, + 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, +3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, +2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, +1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, + 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, + 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, +3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, +4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, +2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, +1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, +1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, + 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, +1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, +3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, + 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, + 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, +1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, + 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, +1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, + 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, +2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, + 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, +2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, +2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, +1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, +1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, +2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, + 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, +1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, +1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, +2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, +2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, +3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, +1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, +4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, + 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, + 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, +3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, +1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, + 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, +3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, +1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, +4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, +1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, +2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, +1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, + 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, +1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, +3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, + 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, +2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, + 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, +1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, +1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, +1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, +3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, +2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, +3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, +3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, +3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, + 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, +2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, + 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, +2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, + 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, +1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, + 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, + 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, +1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, +3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, +3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, +1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, +1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, +3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, +2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, +2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, +1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, +3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, + 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, +4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, +1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, +2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, +3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, +3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, +1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, + 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, + 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, +2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, + 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, +1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, + 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, +1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, +1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, +1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, +1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, +1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, + 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, + 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, #last 512 +) + diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py new file mode 100644 index 000000000..8446d2dd9 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py @@ -0,0 +1,46 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import GB2312DistributionAnalysis +from .mbcssm import GB2312_SM_MODEL + +class GB2312Prober(MultiByteCharSetProber): + def __init__(self): + super(GB2312Prober, self).__init__() + self.coding_sm = CodingStateMachine(GB2312_SM_MODEL) + self.distribution_analyzer = GB2312DistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "GB2312" + + @property + def language(self): + return "Chinese" diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py new file mode 100644 index 000000000..b0e1bf492 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py @@ -0,0 +1,292 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Shy Shalom +# Portions created by the Initial Developer are Copyright (C) 2005 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState + +# This prober doesn't actually recognize a language or a charset. +# It is a helper prober for the use of the Hebrew model probers + +### General ideas of the Hebrew charset recognition ### +# +# Four main charsets exist in Hebrew: +# "ISO-8859-8" - Visual Hebrew +# "windows-1255" - Logical Hebrew +# "ISO-8859-8-I" - Logical Hebrew +# "x-mac-hebrew" - ?? Logical Hebrew ?? +# +# Both "ISO" charsets use a completely identical set of code points, whereas +# "windows-1255" and "x-mac-hebrew" are two different proper supersets of +# these code points. windows-1255 defines additional characters in the range +# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific +# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. +# x-mac-hebrew defines similar additional code points but with a different +# mapping. +# +# As far as an average Hebrew text with no diacritics is concerned, all four +# charsets are identical with respect to code points. Meaning that for the +# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters +# (including final letters). +# +# The dominant difference between these charsets is their directionality. +# "Visual" directionality means that the text is ordered as if the renderer is +# not aware of a BIDI rendering algorithm. The renderer sees the text and +# draws it from left to right. The text itself when ordered naturally is read +# backwards. A buffer of Visual Hebrew generally looks like so: +# "[last word of first line spelled backwards] [whole line ordered backwards +# and spelled backwards] [first word of first line spelled backwards] +# [end of line] [last word of second line] ... etc' " +# adding punctuation marks, numbers and English text to visual text is +# naturally also "visual" and from left to right. +# +# "Logical" directionality means the text is ordered "naturally" according to +# the order it is read. It is the responsibility of the renderer to display +# the text from right to left. A BIDI algorithm is used to place general +# punctuation marks, numbers and English text in the text. +# +# Texts in x-mac-hebrew are almost impossible to find on the Internet. From +# what little evidence I could find, it seems that its general directionality +# is Logical. +# +# To sum up all of the above, the Hebrew probing mechanism knows about two +# charsets: +# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are +# backwards while line order is natural. For charset recognition purposes +# the line order is unimportant (In fact, for this implementation, even +# word order is unimportant). +# Logical Hebrew - "windows-1255" - normal, naturally ordered text. +# +# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be +# specifically identified. +# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew +# that contain special punctuation marks or diacritics is displayed with +# some unconverted characters showing as question marks. This problem might +# be corrected using another model prober for x-mac-hebrew. Due to the fact +# that x-mac-hebrew texts are so rare, writing another model prober isn't +# worth the effort and performance hit. +# +#### The Prober #### +# +# The prober is divided between two SBCharSetProbers and a HebrewProber, +# all of which are managed, created, fed data, inquired and deleted by the +# SBCSGroupProber. The two SBCharSetProbers identify that the text is in +# fact some kind of Hebrew, Logical or Visual. The final decision about which +# one is it is made by the HebrewProber by combining final-letter scores +# with the scores of the two SBCharSetProbers to produce a final answer. +# +# The SBCSGroupProber is responsible for stripping the original text of HTML +# tags, English characters, numbers, low-ASCII punctuation characters, spaces +# and new lines. It reduces any sequence of such characters to a single space. +# The buffer fed to each prober in the SBCS group prober is pure text in +# high-ASCII. +# The two SBCharSetProbers (model probers) share the same language model: +# Win1255Model. +# The first SBCharSetProber uses the model normally as any other +# SBCharSetProber does, to recognize windows-1255, upon which this model was +# built. The second SBCharSetProber is told to make the pair-of-letter +# lookup in the language model backwards. This in practice exactly simulates +# a visual Hebrew model using the windows-1255 logical Hebrew model. +# +# The HebrewProber is not using any language model. All it does is look for +# final-letter evidence suggesting the text is either logical Hebrew or visual +# Hebrew. Disjointed from the model probers, the results of the HebrewProber +# alone are meaningless. HebrewProber always returns 0.00 as confidence +# since it never identifies a charset by itself. Instead, the pointer to the +# HebrewProber is passed to the model probers as a helper "Name Prober". +# When the Group prober receives a positive identification from any prober, +# it asks for the name of the charset identified. If the prober queried is a +# Hebrew model prober, the model prober forwards the call to the +# HebrewProber to make the final decision. In the HebrewProber, the +# decision is made according to the final-letters scores maintained and Both +# model probers scores. The answer is returned in the form of the name of the +# charset identified, either "windows-1255" or "ISO-8859-8". + +class HebrewProber(CharSetProber): + # windows-1255 / ISO-8859-8 code points of interest + FINAL_KAF = 0xea + NORMAL_KAF = 0xeb + FINAL_MEM = 0xed + NORMAL_MEM = 0xee + FINAL_NUN = 0xef + NORMAL_NUN = 0xf0 + FINAL_PE = 0xf3 + NORMAL_PE = 0xf4 + FINAL_TSADI = 0xf5 + NORMAL_TSADI = 0xf6 + + # Minimum Visual vs Logical final letter score difference. + # If the difference is below this, don't rely solely on the final letter score + # distance. + MIN_FINAL_CHAR_DISTANCE = 5 + + # Minimum Visual vs Logical model score difference. + # If the difference is below this, don't rely at all on the model score + # distance. + MIN_MODEL_DISTANCE = 0.01 + + VISUAL_HEBREW_NAME = "ISO-8859-8" + LOGICAL_HEBREW_NAME = "windows-1255" + + def __init__(self): + super(HebrewProber, self).__init__() + self._final_char_logical_score = None + self._final_char_visual_score = None + self._prev = None + self._before_prev = None + self._logical_prober = None + self._visual_prober = None + self.reset() + + def reset(self): + self._final_char_logical_score = 0 + self._final_char_visual_score = 0 + # The two last characters seen in the previous buffer, + # mPrev and mBeforePrev are initialized to space in order to simulate + # a word delimiter at the beginning of the data + self._prev = ' ' + self._before_prev = ' ' + # These probers are owned by the group prober. + + def set_model_probers(self, logicalProber, visualProber): + self._logical_prober = logicalProber + self._visual_prober = visualProber + + def is_final(self, c): + return c in [self.FINAL_KAF, self.FINAL_MEM, self.FINAL_NUN, + self.FINAL_PE, self.FINAL_TSADI] + + def is_non_final(self, c): + # The normal Tsadi is not a good Non-Final letter due to words like + # 'lechotet' (to chat) containing an apostrophe after the tsadi. This + # apostrophe is converted to a space in FilterWithoutEnglishLetters + # causing the Non-Final tsadi to appear at an end of a word even + # though this is not the case in the original text. + # The letters Pe and Kaf rarely display a related behavior of not being + # a good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' + # for example legally end with a Non-Final Pe or Kaf. However, the + # benefit of these letters as Non-Final letters outweighs the damage + # since these words are quite rare. + return c in [self.NORMAL_KAF, self.NORMAL_MEM, + self.NORMAL_NUN, self.NORMAL_PE] + + def feed(self, byte_str): + # Final letter analysis for logical-visual decision. + # Look for evidence that the received buffer is either logical Hebrew + # or visual Hebrew. + # The following cases are checked: + # 1) A word longer than 1 letter, ending with a final letter. This is + # an indication that the text is laid out "naturally" since the + # final letter really appears at the end. +1 for logical score. + # 2) A word longer than 1 letter, ending with a Non-Final letter. In + # normal Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, + # should not end with the Non-Final form of that letter. Exceptions + # to this rule are mentioned above in isNonFinal(). This is an + # indication that the text is laid out backwards. +1 for visual + # score + # 3) A word longer than 1 letter, starting with a final letter. Final + # letters should not appear at the beginning of a word. This is an + # indication that the text is laid out backwards. +1 for visual + # score. + # + # The visual score and logical score are accumulated throughout the + # text and are finally checked against each other in GetCharSetName(). + # No checking for final letters in the middle of words is done since + # that case is not an indication for either Logical or Visual text. + # + # We automatically filter out all 7-bit characters (replace them with + # spaces) so the word boundary detection works properly. [MAP] + + if self.state == ProbingState.NOT_ME: + # Both model probers say it's not them. No reason to continue. + return ProbingState.NOT_ME + + byte_str = self.filter_high_byte_only(byte_str) + + for cur in byte_str: + if cur == ' ': + # We stand on a space - a word just ended + if self._before_prev != ' ': + # next-to-last char was not a space so self._prev is not a + # 1 letter word + if self.is_final(self._prev): + # case (1) [-2:not space][-1:final letter][cur:space] + self._final_char_logical_score += 1 + elif self.is_non_final(self._prev): + # case (2) [-2:not space][-1:Non-Final letter][ + # cur:space] + self._final_char_visual_score += 1 + else: + # Not standing on a space + if ((self._before_prev == ' ') and + (self.is_final(self._prev)) and (cur != ' ')): + # case (3) [-2:space][-1:final letter][cur:not space] + self._final_char_visual_score += 1 + self._before_prev = self._prev + self._prev = cur + + # Forever detecting, till the end or until both model probers return + # ProbingState.NOT_ME (handled above) + return ProbingState.DETECTING + + @property + def charset_name(self): + # Make the decision: is it Logical or Visual? + # If the final letter score distance is dominant enough, rely on it. + finalsub = self._final_char_logical_score - self._final_char_visual_score + if finalsub >= self.MIN_FINAL_CHAR_DISTANCE: + return self.LOGICAL_HEBREW_NAME + if finalsub <= -self.MIN_FINAL_CHAR_DISTANCE: + return self.VISUAL_HEBREW_NAME + + # It's not dominant enough, try to rely on the model scores instead. + modelsub = (self._logical_prober.get_confidence() + - self._visual_prober.get_confidence()) + if modelsub > self.MIN_MODEL_DISTANCE: + return self.LOGICAL_HEBREW_NAME + if modelsub < -self.MIN_MODEL_DISTANCE: + return self.VISUAL_HEBREW_NAME + + # Still no good, back to final letter distance, maybe it'll save the + # day. + if finalsub < 0.0: + return self.VISUAL_HEBREW_NAME + + # (finalsub > 0 - Logical) or (don't know what to do) default to + # Logical. + return self.LOGICAL_HEBREW_NAME + + @property + def language(self): + return 'Hebrew' + + @property + def state(self): + # Remain active as long as any of the model probers are active. + if (self._logical_prober.state == ProbingState.NOT_ME) and \ + (self._visual_prober.state == ProbingState.NOT_ME): + return ProbingState.NOT_ME + return ProbingState.DETECTING diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/jisfreq.py b/my_env/Lib/site-packages/pip/_vendor/chardet/jisfreq.py new file mode 100644 index 000000000..83fc082b5 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/jisfreq.py @@ -0,0 +1,325 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Sampling from about 20M text materials include literature and computer technology +# +# Japanese frequency table, applied to both S-JIS and EUC-JP +# They are sorted in order. + +# 128 --> 0.77094 +# 256 --> 0.85710 +# 512 --> 0.92635 +# 1024 --> 0.97130 +# 2048 --> 0.99431 +# +# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 +# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 +# +# Typical Distribution Ratio, 25% of IDR + +JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0 + +# Char to FreqOrder table , +JIS_TABLE_SIZE = 4368 + +JIS_CHAR_TO_FREQ_ORDER = ( + 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16 +3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32 +1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48 +2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64 +2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80 +5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96 +1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112 +5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128 +5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144 +5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160 +5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176 +5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192 +5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208 +1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224 +1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240 +1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256 +2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272 +3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288 +3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304 + 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320 + 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336 +1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352 + 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368 +5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384 + 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400 + 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416 + 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432 + 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448 + 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464 +5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480 +5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496 +5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512 +4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528 +5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544 +5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560 +5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576 +5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592 +5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608 +5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624 +5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640 +5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656 +5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672 +3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688 +5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704 +5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720 +5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736 +5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752 +5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768 +5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784 +5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800 +5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816 +5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832 +5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848 +5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864 +5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880 +5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896 +5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912 +5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928 +5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944 +5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960 +5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976 +5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992 +5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008 +5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024 +5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040 +5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056 +5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072 +5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088 +5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104 +5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120 +5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136 +5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152 +5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168 +5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184 +5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200 +5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216 +5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232 +5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248 +5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264 +5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280 +5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296 +6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312 +6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328 +6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344 +6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360 +6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376 +6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392 +6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408 +6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424 +4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440 + 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456 + 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472 +1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488 +1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504 + 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520 +3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536 +3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552 + 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568 +3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584 +3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600 + 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616 +2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632 + 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648 +3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664 +1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680 + 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696 +1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712 + 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728 +2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744 +2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760 +2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776 +2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792 +1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808 +1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824 +1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840 +1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856 +2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872 +1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888 +2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904 +1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920 +1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936 +1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952 +1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968 +1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984 +1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000 + 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016 + 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032 +1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048 +2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064 +2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080 +2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096 +3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112 +3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128 + 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144 +3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160 +1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176 + 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192 +2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208 +1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224 + 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240 +3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256 +4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272 +2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288 +1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304 +2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320 +1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336 + 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352 + 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368 +1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384 +2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400 +2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416 +2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432 +3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448 +1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464 +2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480 + 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496 + 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512 + 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528 +1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544 +2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560 + 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576 +1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592 +1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608 + 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624 +1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640 +1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656 +1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672 + 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688 +2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704 + 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720 +2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736 +3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752 +2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768 +1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784 +6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800 +1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816 +2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832 +1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848 + 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864 + 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880 +3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896 +3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912 +1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928 +1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944 +1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960 +1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976 + 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992 + 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008 +2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024 + 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040 +3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056 +2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072 + 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088 +1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104 +2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120 + 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136 +1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152 + 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168 +4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184 +2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200 +1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216 + 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232 +1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248 +2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264 + 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280 +6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296 +1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312 +1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328 +2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344 +3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360 + 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376 +3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392 +1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408 + 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424 +1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440 + 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456 +3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472 + 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488 +2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504 + 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520 +4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536 +2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552 +1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568 +1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584 +1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600 + 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616 +1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632 +3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648 +1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664 +3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680 + 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696 + 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712 + 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728 +2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744 +1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760 + 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776 +1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792 + 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808 +1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824 + 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840 + 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856 + 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872 +1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888 +1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904 +2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920 +4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936 + 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952 +1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968 + 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984 +1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000 +3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016 +1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032 +2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048 +2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064 +1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080 +1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096 +2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112 + 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128 +2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144 +1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160 +1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176 +1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192 +1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208 +3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224 +2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240 +2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256 + 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272 +3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288 +3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304 +1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320 +2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336 +1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352 +2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512 +) + + diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/jpcntx.py b/my_env/Lib/site-packages/pip/_vendor/chardet/jpcntx.py new file mode 100644 index 000000000..20044e4bc --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/jpcntx.py @@ -0,0 +1,233 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + + +# This is hiragana 2-char sequence table, the number in each cell represents its frequency category +jp2CharContext = ( +(0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1), +(2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4), +(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2), +(0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4), +(1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4), +(0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3), +(0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3), +(0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3), +(0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4), +(0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3), +(2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4), +(0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3), +(0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5), +(0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3), +(2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5), +(0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4), +(1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4), +(0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3), +(0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3), +(0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3), +(0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5), +(0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4), +(0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5), +(0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3), +(0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4), +(0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4), +(0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4), +(0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1), +(0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0), +(1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3), +(0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0), +(0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3), +(0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3), +(0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5), +(0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4), +(2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5), +(0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3), +(0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3), +(0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3), +(0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3), +(0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4), +(0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4), +(0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2), +(0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3), +(0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3), +(0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3), +(0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3), +(0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4), +(0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3), +(0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4), +(0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3), +(0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3), +(0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4), +(0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4), +(0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3), +(2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4), +(0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4), +(0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3), +(0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4), +(0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4), +(1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4), +(0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3), +(0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2), +(0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2), +(0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3), +(0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3), +(0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5), +(0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3), +(0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4), +(1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4), +(0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1), +(0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2), +(0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3), +(0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1), +) + +class JapaneseContextAnalysis(object): + NUM_OF_CATEGORY = 6 + DONT_KNOW = -1 + ENOUGH_REL_THRESHOLD = 100 + MAX_REL_THRESHOLD = 1000 + MINIMUM_DATA_THRESHOLD = 4 + + def __init__(self): + self._total_rel = None + self._rel_sample = None + self._need_to_skip_char_num = None + self._last_char_order = None + self._done = None + self.reset() + + def reset(self): + self._total_rel = 0 # total sequence received + # category counters, each integer counts sequence in its category + self._rel_sample = [0] * self.NUM_OF_CATEGORY + # if last byte in current buffer is not the last byte of a character, + # we need to know how many bytes to skip in next buffer + self._need_to_skip_char_num = 0 + self._last_char_order = -1 # The order of previous char + # If this flag is set to True, detection is done and conclusion has + # been made + self._done = False + + def feed(self, byte_str, num_bytes): + if self._done: + return + + # The buffer we got is byte oriented, and a character may span in more than one + # buffers. In case the last one or two byte in last buffer is not + # complete, we record how many byte needed to complete that character + # and skip these bytes here. We can choose to record those bytes as + # well and analyse the character once it is complete, but since a + # character will not make much difference, by simply skipping + # this character will simply our logic and improve performance. + i = self._need_to_skip_char_num + while i < num_bytes: + order, char_len = self.get_order(byte_str[i:i + 2]) + i += char_len + if i > num_bytes: + self._need_to_skip_char_num = i - num_bytes + self._last_char_order = -1 + else: + if (order != -1) and (self._last_char_order != -1): + self._total_rel += 1 + if self._total_rel > self.MAX_REL_THRESHOLD: + self._done = True + break + self._rel_sample[jp2CharContext[self._last_char_order][order]] += 1 + self._last_char_order = order + + def got_enough_data(self): + return self._total_rel > self.ENOUGH_REL_THRESHOLD + + def get_confidence(self): + # This is just one way to calculate confidence. It works well for me. + if self._total_rel > self.MINIMUM_DATA_THRESHOLD: + return (self._total_rel - self._rel_sample[0]) / self._total_rel + else: + return self.DONT_KNOW + + def get_order(self, byte_str): + return -1, 1 + +class SJISContextAnalysis(JapaneseContextAnalysis): + def __init__(self): + super(SJISContextAnalysis, self).__init__() + self._charset_name = "SHIFT_JIS" + + @property + def charset_name(self): + return self._charset_name + + def get_order(self, byte_str): + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC): + char_len = 2 + if (first_char == 0x87) or (0xFA <= first_char <= 0xFC): + self._charset_name = "CP932" + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 202) and (0x9F <= second_char <= 0xF1): + return second_char - 0x9F, char_len + + return -1, char_len + +class EUCJPContextAnalysis(JapaneseContextAnalysis): + def get_order(self, byte_str): + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE): + char_len = 2 + elif first_char == 0x8F: + char_len = 3 + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3): + return second_char - 0xA1, char_len + + return -1, char_len + + diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py b/my_env/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py new file mode 100644 index 000000000..2aa4fb2e2 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py @@ -0,0 +1,228 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Character Mapping Table: +# this table is modified base on win1251BulgarianCharToOrderMap, so +# only number <64 is sure valid + +Latin5_BulgarianCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 +110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 +253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 +116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 +194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, # 80 +210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, # 90 + 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, # a0 + 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # b0 + 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, # c0 + 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # d0 + 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, # e0 + 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253, # f0 +) + +win1251BulgarianCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 +110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 +253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 +116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 +206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, # 80 +221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, # 90 + 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, # a0 + 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, # b0 + 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # c0 + 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, # d0 + 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # e0 + 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16, # f0 +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 96.9392% +# first 1024 sequences:3.0618% +# rest sequences: 0.2992% +# negative sequences: 0.0020% +BulgarianLangModel = ( +0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2, +3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1, +0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0, +0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0, +0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0, +0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0, +0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3, +2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1, +3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2, +1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0, +3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1, +1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0, +2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2, +2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0, +3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2, +1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0, +2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2, +2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0, +3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2, +1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0, +2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2, +2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0, +2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2, +1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0, +2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2, +1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0, +3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2, +1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0, +3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1, +1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0, +2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1, +1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0, +2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2, +1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0, +2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1, +1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0, +3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, +1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2, +1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1, +2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2, +1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0, +2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2, +1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1, +0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2, +1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1, +1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0, +1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1, +0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1, +0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, +0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0, +1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, +0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, +1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1, +1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, +1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +) + +Latin5BulgarianModel = { + 'char_to_order_map': Latin5_BulgarianCharToOrderMap, + 'precedence_matrix': BulgarianLangModel, + 'typical_positive_ratio': 0.969392, + 'keep_english_letter': False, + 'charset_name': "ISO-8859-5", + 'language': 'Bulgairan', +} + +Win1251BulgarianModel = { + 'char_to_order_map': win1251BulgarianCharToOrderMap, + 'precedence_matrix': BulgarianLangModel, + 'typical_positive_ratio': 0.969392, + 'keep_english_letter': False, + 'charset_name': "windows-1251", + 'language': 'Bulgarian', +} diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/langcyrillicmodel.py b/my_env/Lib/site-packages/pip/_vendor/chardet/langcyrillicmodel.py new file mode 100644 index 000000000..e5f9a1fd1 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/langcyrillicmodel.py @@ -0,0 +1,333 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# KOI8-R language model +# Character Mapping Table: +KOI8R_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, # 80 +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, # 90 +223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, # a0 +238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, # b0 + 27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, # c0 + 15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, # d0 + 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, # e0 + 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70, # f0 +) + +win1251_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, +223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, +239,240,241,242,243,244,245,246, 68,247,248,249,250,251,252,253, + 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, + 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, + 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, + 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, +) + +latin5_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, +223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, + 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, + 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, + 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, + 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, +239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, +) + +macCyrillic_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 + 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, + 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, +223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, +239,240,241,242,243,244,245,246,247,248,249,250,251,252, 68, 16, + 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, + 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255, +) + +IBM855_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 +191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205, +206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70, + 3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219, +220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229, +230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243, + 8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248, + 43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249, +250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255, +) + +IBM866_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 + 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, + 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, + 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, +223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, + 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, +239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 97.6601% +# first 1024 sequences: 2.3389% +# rest sequences: 0.1237% +# negative sequences: 0.0009% +RussianLangModel = ( +0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2, +3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, +0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, +0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1, +1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1, +1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0, +2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1, +1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0, +3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1, +1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0, +2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2, +1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1, +1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1, +1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, +2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1, +1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0, +3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2, +1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1, +2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1, +1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0, +2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1, +1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0, +1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1, +1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0, +3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1, +2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1, +3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1, +1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1, +1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1, +0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0, +2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1, +1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0, +1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1, +0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1, +1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2, +2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1, +1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0, +1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0, +2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0, +1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1, +0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, +2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1, +1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1, +1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0, +0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, +0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1, +0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1, +0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, +0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, +1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1, +0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, +2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0, +0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, +) + +Koi8rModel = { + 'char_to_order_map': KOI8R_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "KOI8-R", + 'language': 'Russian', +} + +Win1251CyrillicModel = { + 'char_to_order_map': win1251_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "windows-1251", + 'language': 'Russian', +} + +Latin5CyrillicModel = { + 'char_to_order_map': latin5_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "ISO-8859-5", + 'language': 'Russian', +} + +MacCyrillicModel = { + 'char_to_order_map': macCyrillic_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "MacCyrillic", + 'language': 'Russian', +} + +Ibm866Model = { + 'char_to_order_map': IBM866_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "IBM866", + 'language': 'Russian', +} + +Ibm855Model = { + 'char_to_order_map': IBM855_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "IBM855", + 'language': 'Russian', +} diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py b/my_env/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py new file mode 100644 index 000000000..533222166 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py @@ -0,0 +1,225 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Character Mapping Table: +Latin7_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 + 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 +253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 + 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 +253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 +253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, # b0 +110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 + 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 +124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 + 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 +) + +win1253_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 + 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 +253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 + 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 +253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 +253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, # b0 +110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 + 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 +124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 + 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 98.2851% +# first 1024 sequences:1.7001% +# rest sequences: 0.0359% +# negative sequences: 0.0148% +GreekLangModel = ( +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0, +3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, +0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0, +2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0, +0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0, +2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0, +2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0, +0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0, +2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0, +0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0, +3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0, +3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0, +2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0, +2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0, +0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0, +0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0, +0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2, +0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0, +0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2, +0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0, +0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2, +0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2, +0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0, +0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2, +0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0, +0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0, +0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, +0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0, +0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2, +0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0, +0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2, +0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2, +0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0, +0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2, +0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0, +0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1, +0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0, +0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2, +0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, +0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2, +0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2, +0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0, +0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0, +0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1, +0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0, +0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0, +0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +) + +Latin7GreekModel = { + 'char_to_order_map': Latin7_char_to_order_map, + 'precedence_matrix': GreekLangModel, + 'typical_positive_ratio': 0.982851, + 'keep_english_letter': False, + 'charset_name': "ISO-8859-7", + 'language': 'Greek', +} + +Win1253GreekModel = { + 'char_to_order_map': win1253_char_to_order_map, + 'precedence_matrix': GreekLangModel, + 'typical_positive_ratio': 0.982851, + 'keep_english_letter': False, + 'charset_name': "windows-1253", + 'language': 'Greek', +} diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py b/my_env/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py new file mode 100644 index 000000000..58f4c875e --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py @@ -0,0 +1,200 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Simon Montagu +# Portions created by the Initial Developer are Copyright (C) 2005 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Shoshannah Forbes - original C code (?) +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Windows-1255 language model +# Character Mapping Table: +WIN1255_CHAR_TO_ORDER_MAP = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, # 40 + 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, # 50 +253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, # 60 + 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, # 70 +124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214, +215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221, + 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227, +106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234, + 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237, +238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250, + 9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23, + 12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253, +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 98.4004% +# first 1024 sequences: 1.5981% +# rest sequences: 0.087% +# negative sequences: 0.0015% +HEBREW_LANG_MODEL = ( +0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0, +3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, +1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, +1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3, +1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2, +1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2, +1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2, +0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2, +0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2, +1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0, +3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2, +0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1, +0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0, +0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, +0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2, +0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0, +3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2, +0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2, +0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2, +0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2, +0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1, +0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2, +0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0, +3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2, +0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2, +0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2, +0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0, +1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2, +0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0, +0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3, +0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0, +0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0, +0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, +0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0, +2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0, +0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2, +0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0, +0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1, +1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1, +0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1, +2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1, +1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1, +2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1, +1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1, +2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, +0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1, +1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1, +0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0, +) + +Win1255HebrewModel = { + 'char_to_order_map': WIN1255_CHAR_TO_ORDER_MAP, + 'precedence_matrix': HEBREW_LANG_MODEL, + 'typical_positive_ratio': 0.984004, + 'keep_english_letter': False, + 'charset_name': "windows-1255", + 'language': 'Hebrew', +} diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py b/my_env/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py new file mode 100644 index 000000000..bb7c095e1 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py @@ -0,0 +1,225 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Character Mapping Table: +Latin2_HungarianCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, + 46, 71, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, +253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, + 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, +159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174, +175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190, +191,192,193,194,195,196,197, 75,198,199,200,201,202,203,204,205, + 79,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, +221, 51, 81,222, 78,223,224,225,226, 44,227,228,229, 61,230,231, +232,233,234, 58,235, 66, 59,236,237,238, 60, 69, 63,239,240,241, + 82, 14, 74,242, 70, 80,243, 72,244, 15, 83, 77, 84, 30, 76, 85, +245,246,247, 25, 73, 42, 24,248,249,250, 31, 56, 29,251,252,253, +) + +win1250HungarianCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, + 46, 72, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, +253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, + 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, +161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, +177,178,179,180, 78,181, 69,182,183,184,185,186,187,188,189,190, +191,192,193,194,195,196,197, 76,198,199,200,201,202,203,204,205, + 81,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, +221, 51, 83,222, 80,223,224,225,226, 44,227,228,229, 61,230,231, +232,233,234, 58,235, 66, 59,236,237,238, 60, 70, 63,239,240,241, + 84, 14, 75,242, 71, 82,243, 73,244, 15, 85, 79, 86, 30, 77, 87, +245,246,247, 25, 74, 42, 24,248,249,250, 31, 56, 29,251,252,253, +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 94.7368% +# first 1024 sequences:5.2623% +# rest sequences: 0.8894% +# negative sequences: 0.0009% +HungarianLangModel = ( +0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, +3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,1,1,2,2,2,2,2,1,2, +3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,1,2,3,3,3,3,2,3,3,1,1,3,3,0,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, +3,2,1,3,3,3,3,3,2,3,3,3,3,3,1,1,2,3,3,3,3,3,3,3,1,1,3,2,0,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,1,1,2,3,3,3,1,3,3,3,3,3,1,3,3,2,2,0,3,2,3, +0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,3,2,0,3,2,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, +3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,3,1,2,3,2,2,3,1,2,3,3,2,2,0,3,3,3, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,0,2,3,2, +0,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,2,1,3,2,2,3,2,1,3,2,2,1,0,3,3,1, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,2,2,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,3,2,2,3,1,1,3,2,0,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,1,3,3,3,3,3,2,2,1,3,3,3,0,1,1,2, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,0,3,2,3, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0, +3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,1,3,2,2,2,3,1,1,3,3,1,1,0,3,3,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,2,3,3,3,3,3,1,2,3,2,2,0,2,2,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,2,2,2,3,1,3,3,2,2,1,3,3,3,1,1,3,1,2,3,2,3,2,2,2,1,0,2,2,2, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, +3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,2,2,3,2,1,0,3,2,0,1,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,1,0,3,3,3,3,0,2,3,0,0,2,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,3,0,1,2,3,2,3,2,2,3,2,1,2,0,2,2,2, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, +3,3,3,3,3,3,1,2,3,3,3,2,1,2,3,3,2,2,2,3,2,3,3,1,3,3,1,1,0,2,3,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,1,2,2,2,2,3,3,3,1,1,1,3,3,1,1,3,1,1,3,2,1,2,3,1,1,0,2,2,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,2,1,2,1,1,3,3,1,1,1,1,3,3,1,1,2,2,1,2,1,1,2,2,1,1,0,2,2,1, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,1,1,2,1,1,3,3,1,0,1,1,3,3,2,0,1,1,2,3,1,0,2,2,1,0,0,1,3,2, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,2,1,3,3,3,3,3,1,2,3,2,3,3,2,1,1,3,2,3,2,1,2,2,0,1,2,1,0,0,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,2,2,2,2,3,1,2,2,1,1,3,3,0,3,2,1,2,3,2,1,3,3,1,1,0,2,1,3, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,2,2,2,3,2,3,3,3,2,1,1,3,3,1,1,1,2,2,3,2,3,2,2,2,1,0,2,2,1, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +1,0,0,3,3,3,3,3,0,0,3,3,2,3,0,0,0,2,3,3,1,0,1,2,0,0,1,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,2,3,3,3,3,3,1,2,3,3,2,2,1,1,0,3,3,2,2,1,2,2,1,0,2,2,0,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,2,2,1,3,1,2,3,3,2,2,1,1,2,2,1,1,1,1,3,2,1,1,1,1,2,1,0,1,2,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +2,3,3,1,1,1,1,1,3,3,3,0,1,1,3,3,1,1,1,1,1,2,2,0,3,1,1,2,0,2,1,1, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,1,0,1,2,1,2,2,0,1,2,3,1,2,0,0,0,2,1,1,1,1,1,2,0,0,1,1,0,0,0,0, +1,2,1,2,2,2,1,2,1,2,0,2,0,2,2,1,1,2,1,1,2,1,1,1,0,1,0,0,0,1,1,0, +1,1,1,2,3,2,3,3,0,1,2,2,3,1,0,1,0,2,1,2,2,0,1,1,0,0,1,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,3,3,2,2,1,0,0,3,2,3,2,0,0,0,1,1,3,0,0,1,1,0,0,2,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,2,2,3,3,1,0,1,3,2,3,1,1,1,0,1,1,1,1,1,3,1,0,0,2,2,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,1,2,2,2,1,0,1,2,3,3,2,0,0,0,2,1,1,1,2,1,1,1,0,1,1,1,0,0,0, +1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,0,0,1,1, +3,2,2,1,0,0,1,1,2,2,0,3,0,1,2,1,1,0,0,1,1,1,0,1,1,1,1,0,2,1,1,1, +2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,2,3,1,1,1,1,1,1,1,1,1,0,1, +2,3,3,0,1,0,0,0,3,3,1,0,0,1,2,2,1,0,0,0,0,2,0,0,1,1,1,0,2,1,1,1, +2,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,1,0,1, +2,3,3,0,1,0,0,0,2,2,0,0,0,0,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,1,0, +2,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, +3,2,2,0,1,0,1,0,2,3,2,0,0,1,2,2,1,0,0,1,1,1,0,0,2,1,0,1,2,2,1,1, +2,1,1,1,1,1,1,2,1,1,1,1,1,1,0,2,1,0,1,1,0,1,1,1,0,1,1,2,1,1,0,1, +2,2,2,0,0,1,0,0,2,2,1,1,0,0,2,1,1,0,0,0,1,2,0,0,2,1,0,0,2,1,1,1, +2,1,1,1,1,2,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1, +1,2,3,0,0,0,1,0,3,2,1,0,0,1,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,2,1, +1,1,0,0,0,1,0,1,1,1,1,1,2,0,0,1,0,0,0,2,0,0,1,1,1,1,1,1,1,1,0,1, +3,0,0,2,1,2,2,1,0,0,2,1,2,2,0,0,0,2,1,1,1,0,1,1,0,0,1,1,2,0,0,0, +1,2,1,2,2,1,1,2,1,2,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,0,0,1, +1,3,2,0,0,0,1,0,2,2,2,0,0,0,2,2,1,0,0,0,0,3,1,1,1,1,0,0,2,1,1,1, +2,1,0,1,1,1,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,1,0,1,1,1,1,1,1,0,1, +2,3,2,0,0,0,1,0,2,2,0,0,0,0,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,1,0, +2,1,1,1,1,2,1,2,1,2,0,1,1,1,0,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,0,1, +3,1,1,2,2,2,3,2,1,1,2,2,1,1,0,1,0,2,2,1,1,1,1,1,0,0,1,1,0,1,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,1,0,0,0,1,1,0,0,1,2,0,0,2,1,1,1, +2,2,1,1,1,2,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,1,1,0,1,2,1,1,1,0,1, +1,0,0,1,2,3,2,1,0,0,2,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0, +1,2,1,2,1,2,1,1,1,2,0,2,1,1,1,0,1,2,0,0,1,1,1,0,0,0,0,0,0,0,0,0, +2,3,2,0,0,0,0,0,1,1,2,1,0,0,1,1,1,0,0,0,0,2,0,0,1,1,0,0,2,1,1,1, +2,1,1,1,1,1,1,2,1,0,1,1,1,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1, +1,2,2,0,1,1,1,0,2,2,2,0,0,0,3,2,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0, +1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,0,0,1,1,1,0,1,0,1, +2,1,0,2,1,1,2,2,1,1,2,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0, +1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0, +1,2,3,0,0,0,1,0,2,2,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,2,0,1,0, +2,1,1,1,1,1,0,2,0,0,0,1,2,1,1,1,1,0,1,2,0,1,0,1,0,1,1,1,0,1,0,1, +2,2,2,0,0,0,1,0,2,1,2,0,0,0,1,1,2,0,0,0,0,1,0,0,1,1,0,0,2,1,0,1, +2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, +1,2,2,0,0,0,1,0,2,2,2,0,0,0,1,1,0,0,0,0,0,1,1,0,2,0,0,1,1,1,0,1, +1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1, +1,0,0,1,0,1,2,1,0,0,1,1,1,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0, +0,2,1,2,1,1,1,1,1,2,0,2,0,1,1,0,1,2,1,0,1,1,1,0,0,0,0,0,0,1,0,0, +2,1,1,0,1,2,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,2,1,0,1, +2,2,1,1,1,1,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,0,1,0,1,1,1,1,1,0,1, +1,2,2,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0,2,0,0,2,2,0,0,2,0,0,1, +2,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1, +1,1,2,0,0,3,1,0,2,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0, +1,2,1,0,1,1,1,2,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0, +2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,0,0,0, +2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,1,0,1, +2,1,1,1,2,1,1,1,0,1,1,2,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,1,0,1,1,1,1,1,0,0,1,1,2,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0, +1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0, +2,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,2,0,0,1,0,0,1,0,1,0,0,0, +0,1,1,1,1,1,1,1,1,2,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, +1,0,0,1,1,1,1,1,0,0,2,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0, +0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0, +1,0,0,1,1,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, +0,0,0,1,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, +2,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, +0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0, +) + +Latin2HungarianModel = { + 'char_to_order_map': Latin2_HungarianCharToOrderMap, + 'precedence_matrix': HungarianLangModel, + 'typical_positive_ratio': 0.947368, + 'keep_english_letter': True, + 'charset_name': "ISO-8859-2", + 'language': 'Hungarian', +} + +Win1250HungarianModel = { + 'char_to_order_map': win1250HungarianCharToOrderMap, + 'precedence_matrix': HungarianLangModel, + 'typical_positive_ratio': 0.947368, + 'keep_english_letter': True, + 'charset_name': "windows-1250", + 'language': 'Hungarian', +} diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py b/my_env/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py new file mode 100644 index 000000000..15f94c2df --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py @@ -0,0 +1,199 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# The following result for thai was collected from a limited sample (1M). + +# Character Mapping Table: +TIS620CharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,182,106,107,100,183,184,185,101, 94,186,187,108,109,110,111, # 40 +188,189,190, 89, 95,112,113,191,192,193,194,253,253,253,253,253, # 50 +253, 64, 72, 73,114, 74,115,116,102, 81,201,117, 90,103, 78, 82, # 60 + 96,202, 91, 79, 84,104,105, 97, 98, 92,203,253,253,253,253,253, # 70 +209,210,211,212,213, 88,214,215,216,217,218,219,220,118,221,222, +223,224, 99, 85, 83,225,226,227,228,229,230,231,232,233,234,235, +236, 5, 30,237, 24,238, 75, 8, 26, 52, 34, 51,119, 47, 58, 57, + 49, 53, 55, 43, 20, 19, 44, 14, 48, 3, 17, 25, 39, 62, 31, 54, + 45, 9, 16, 2, 61, 15,239, 12, 42, 46, 18, 21, 76, 4, 66, 63, + 22, 10, 1, 36, 23, 13, 40, 27, 32, 35, 86,240,241,242,243,244, + 11, 28, 41, 29, 33,245, 50, 37, 6, 7, 67, 77, 38, 93,246,247, + 68, 56, 59, 65, 69, 60, 70, 80, 71, 87,248,249,250,251,252,253, +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 92.6386% +# first 1024 sequences:7.3177% +# rest sequences: 1.0230% +# negative sequences: 0.0436% +ThaiLangModel = ( +0,1,3,3,3,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,0,0,3,3,3,0,3,3,3,3, +0,3,3,0,0,0,1,3,0,3,3,2,3,3,0,1,2,3,3,3,3,0,2,0,2,0,0,3,2,1,2,2, +3,0,3,3,2,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,0,3,2,3,0,2,2,2,3, +0,2,3,0,0,0,0,1,0,1,2,3,1,1,3,2,2,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1, +3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,3,3,2,2,2, +3,1,2,3,0,3,3,2,2,1,2,3,3,1,2,0,1,3,0,1,0,0,1,0,0,0,0,0,0,0,1,1, +3,3,2,2,3,3,3,3,1,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2, +3,3,1,2,3,1,2,2,3,3,1,0,2,1,0,0,3,1,2,1,0,0,1,0,0,0,0,0,0,1,0,1, +3,3,3,3,3,3,2,2,3,3,3,3,2,3,2,2,3,3,2,2,3,2,2,2,2,1,1,3,1,2,1,1, +3,2,1,0,2,1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0, +3,3,3,2,3,2,3,3,2,2,3,2,3,3,2,3,1,1,2,3,2,2,2,3,2,2,2,2,2,1,2,1, +2,2,1,1,3,3,2,1,0,1,2,2,0,1,3,0,0,0,1,1,0,0,0,0,0,2,3,0,0,2,1,1, +3,3,2,3,3,2,0,0,3,3,0,3,3,0,2,2,3,1,2,2,1,1,1,0,2,2,2,0,2,2,1,1, +0,2,1,0,2,0,0,2,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,2,3,3,2,0,0,3,3,0,2,3,0,2,1,2,2,2,2,1,2,0,0,2,2,2,0,2,2,1,1, +0,2,1,0,2,0,0,2,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, +3,3,2,3,2,3,2,0,2,2,1,3,2,1,3,2,1,2,3,2,2,3,0,2,3,2,2,1,2,2,2,2, +1,2,2,0,0,0,0,2,0,1,2,0,1,1,1,0,1,0,3,1,1,0,0,0,0,0,0,0,0,0,1,0, +3,3,2,3,3,2,3,2,2,2,3,2,2,3,2,2,1,2,3,2,2,3,1,3,2,2,2,3,2,2,2,3, +3,2,1,3,0,1,1,1,0,2,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0, +1,0,0,3,0,3,3,3,3,3,0,0,3,0,2,2,3,3,3,3,3,0,0,0,1,1,3,0,0,0,0,2, +0,0,1,0,0,0,0,0,0,0,2,3,0,0,0,3,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0, +2,0,3,3,3,3,0,0,2,3,0,0,3,0,3,3,2,3,3,3,3,3,0,0,3,3,3,0,0,0,3,3, +0,0,3,0,0,0,0,2,0,0,2,1,1,3,0,0,1,0,0,2,3,0,1,0,0,0,0,0,0,0,1,0, +3,3,3,3,2,3,3,3,3,3,3,3,1,2,1,3,3,2,2,1,2,2,2,3,1,1,2,0,2,1,2,1, +2,2,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0, +3,0,2,1,2,3,3,3,0,2,0,2,2,0,2,1,3,2,2,1,2,1,0,0,2,2,1,0,2,1,2,2, +0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,2,1,3,3,1,1,3,0,2,3,1,1,3,2,1,1,2,0,2,2,3,2,1,1,1,1,1,2, +3,0,0,1,3,1,2,1,2,0,3,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, +3,3,1,1,3,2,3,3,3,1,3,2,1,3,2,1,3,2,2,2,2,1,3,3,1,2,1,3,1,2,3,0, +2,1,1,3,2,2,2,1,2,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, +3,3,2,3,2,3,3,2,3,2,3,2,3,3,2,1,0,3,2,2,2,1,2,2,2,1,2,2,1,2,1,1, +2,2,2,3,0,1,3,1,1,1,1,0,1,1,0,2,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,2,3,2,2,1,1,3,2,3,2,3,2,0,3,2,2,1,2,0,2,2,2,1,2,2,2,2,1, +3,2,1,2,2,1,0,2,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,2,3,1,2,3,3,2,2,3,0,1,1,2,0,3,3,2,2,3,0,1,1,3,0,0,0,0, +3,1,0,3,3,0,2,0,2,1,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,2,3,2,3,3,0,1,3,1,1,2,1,2,1,1,3,1,1,0,2,3,1,1,1,1,1,1,1,1, +3,1,1,2,2,2,2,1,1,1,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,2,2,1,1,2,1,3,3,2,3,2,2,3,2,2,3,1,2,2,1,2,0,3,2,1,2,2,2,2,2,1, +3,2,1,2,2,2,1,1,1,1,0,0,1,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,1,3,3,0,2,1,0,3,2,0,0,3,1,0,1,1,0,1,0,0,0,0,0,1, +1,0,0,1,0,3,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,2,2,2,3,0,0,1,3,0,3,2,0,3,2,2,3,3,3,3,3,1,0,2,2,2,0,2,2,1,2, +0,2,3,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,0,2,3,1,3,3,2,3,3,0,3,3,0,3,2,2,3,2,3,3,3,0,0,2,2,3,0,1,1,1,3, +0,0,3,0,0,0,2,2,0,1,3,0,1,2,2,2,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1, +3,2,3,3,2,0,3,3,2,2,3,1,3,2,1,3,2,0,1,2,2,0,2,3,2,1,0,3,0,0,0,0, +3,0,0,2,3,1,3,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,3,2,2,2,1,2,0,1,3,1,1,3,1,3,0,0,2,1,1,1,1,2,1,1,1,0,2,1,0,1, +1,2,0,0,0,3,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,3,1,0,0,0,1,0, +3,3,3,3,2,2,2,2,2,1,3,1,1,1,2,0,1,1,2,1,2,1,3,2,0,0,3,1,1,1,1,1, +3,1,0,2,3,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,2,3,0,3,3,0,2,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,2,3,1,3,0,0,1,2,0,0,2,0,3,3,2,3,3,3,2,3,0,0,2,2,2,0,0,0,2,2, +0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +0,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,1,2,3,1,3,3,0,0,1,0,3,0,0,0,0,0, +0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,1,2,3,1,2,3,1,0,3,0,2,2,1,0,2,1,1,2,0,1,0,0,1,1,1,1,0,1,0,0, +1,0,0,0,0,1,1,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,2,1,0,1,1,1,3,1,2,2,2,2,2,2,1,1,1,1,0,3,1,0,1,3,1,1,1,1, +1,1,0,2,0,1,3,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1, +3,0,2,2,1,3,3,2,3,3,0,1,1,0,2,2,1,2,1,3,3,1,0,0,3,2,0,0,0,0,2,1, +0,1,0,0,0,0,1,2,0,1,1,3,1,1,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,0,3,0,0,1,0,0,0,3,0,0,3,0,3,1,0,1,1,1,3,2,0,0,0,3,0,0,0,0,2,0, +0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,1,3,2,1,3,3,1,2,2,0,1,2,1,0,1,2,0,0,0,0,0,3,0,0,0,3,0,0,0,0, +3,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,1,2,0,3,3,3,2,2,0,1,1,0,1,3,0,0,0,2,2,0,0,0,0,3,1,0,1,0,0,0, +0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,2,3,1,2,0,0,2,1,0,3,1,0,1,2,0,1,1,1,1,3,0,0,3,1,1,0,2,2,1,1, +0,2,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,3,1,2,0,0,2,2,0,1,2,0,1,0,1,3,1,2,1,0,0,0,2,0,3,0,0,0,1,0, +0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,1,1,2,2,0,0,0,2,0,2,1,0,1,1,0,1,1,1,2,1,0,0,1,1,1,0,2,1,1,1, +0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1, +0,0,0,2,0,1,3,1,1,1,1,0,0,0,0,3,2,0,1,0,0,0,1,2,0,0,0,1,0,0,0,0, +0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,2,3,2,2,0,0,0,1,0,0,0,0,2,3,2,1,2,2,3,0,0,0,2,3,1,0,0,0,1,1, +0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0, +3,3,2,2,0,1,0,0,0,0,2,0,2,0,1,0,0,0,1,1,0,0,0,2,1,0,1,0,1,1,0,0, +0,1,0,2,0,0,1,0,3,0,1,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,1,0,0,1,0,0,0,0,0,1,1,2,0,0,0,0,1,0,0,1,3,1,0,0,0,0,1,1,0,0, +0,1,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0, +3,3,1,1,1,1,2,3,0,0,2,1,1,1,1,1,0,2,1,1,0,0,0,2,1,0,1,2,1,1,0,1, +2,1,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,3,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1, +0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,2,0,0,0,0,0,0,1,2,1,0,1,1,0,2,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,2,0,0,0,1,3,0,1,0,0,0,2,0,0,0,0,0,0,0,1,2,0,0,0,0,0, +3,3,0,0,1,1,2,0,0,1,2,1,0,1,1,1,0,1,1,0,0,2,1,1,0,1,0,0,1,1,1,0, +0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,1,0,1,2,0,1,2,0,0,1,1,0,2,0,1,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0, +1,0,0,1,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,2,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,3, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,1,0,1,0,0,2,0,0,2,0,0,1,1,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0, +1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0, +1,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,1,0,0,2,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +) + +TIS620ThaiModel = { + 'char_to_order_map': TIS620CharToOrderMap, + 'precedence_matrix': ThaiLangModel, + 'typical_positive_ratio': 0.926386, + 'keep_english_letter': False, + 'charset_name': "TIS-620", + 'language': 'Thai', +} diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py b/my_env/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py new file mode 100644 index 000000000..a427a4573 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py @@ -0,0 +1,193 @@ +# -*- coding: utf-8 -*- +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Özgür Baskın - Turkish Language Model +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Character Mapping Table: +Latin5_TurkishCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255, 23, 37, 47, 39, 29, 52, 36, 45, 53, 60, 16, 49, 20, 46, 42, + 48, 69, 44, 35, 31, 51, 38, 62, 65, 43, 56,255,255,255,255,255, +255, 1, 21, 28, 12, 2, 18, 27, 25, 3, 24, 10, 5, 13, 4, 15, + 26, 64, 7, 8, 9, 14, 32, 57, 58, 11, 22,255,255,255,255,255, +180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165, +164,163,162,161,160,159,101,158,157,156,155,154,153,152,151,106, +150,149,148,147,146,145,144,100,143,142,141,140,139,138,137,136, + 94, 80, 93,135,105,134,133, 63,132,131,130,129,128,127,126,125, +124,104, 73, 99, 79, 85,123, 54,122, 98, 92,121,120, 91,103,119, + 68,118,117, 97,116,115, 50, 90,114,113,112,111, 55, 41, 40, 86, + 89, 70, 59, 78, 71, 82, 88, 33, 77, 66, 84, 83,110, 75, 61, 96, + 30, 67,109, 74, 87,102, 34, 95, 81,108, 76, 72, 17, 6, 19,107, +) + +TurkishLangModel = ( +3,2,3,3,3,1,3,3,3,3,3,3,3,3,2,1,1,3,3,1,3,3,0,3,3,3,3,3,0,3,1,3, +3,2,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,2,2,0,0,1,0,0,1, +3,2,2,3,3,0,3,3,3,3,3,3,3,2,3,1,0,3,3,1,3,3,0,3,3,3,3,3,0,3,0,3, +3,1,1,0,1,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,2,2,0,0,0,1,0,1, +3,3,2,3,3,0,3,3,3,3,3,3,3,2,3,1,1,3,3,0,3,3,1,2,3,3,3,3,0,3,0,3, +3,1,1,0,0,0,1,0,0,0,0,1,1,0,1,2,1,0,0,0,1,0,0,0,0,2,0,0,0,0,0,1, +3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,1,3,3,2,0,3,2,1,2,2,1,3,3,0,0,0,2, +2,2,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1, +3,3,3,2,3,3,1,2,3,3,3,3,3,3,3,1,3,2,1,0,3,2,0,1,2,3,3,2,1,0,0,2, +2,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0, +1,0,1,3,3,1,3,3,3,3,3,3,3,1,2,0,0,2,3,0,2,3,0,0,2,2,2,3,0,3,0,1, +2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,0,3,2,0,2,3,2,3,3,1,0,0,2, +3,2,0,0,1,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,2,0,0,1, +3,3,3,2,3,3,2,3,3,3,3,2,3,3,3,0,3,3,0,0,2,1,0,0,2,3,2,2,0,0,0,2, +2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,2,0,0,1, +3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,0,3,2,0,1,3,2,1,1,3,2,3,2,1,0,0,2, +2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, +3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,0,3,2,2,0,2,3,0,0,2,2,2,2,0,0,0,2, +3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,1,0,0,0, +3,3,3,3,3,3,3,2,2,2,2,3,2,3,3,0,3,3,1,1,2,2,0,0,2,2,3,2,0,0,1,3, +0,3,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1, +3,3,3,2,3,3,3,2,1,2,2,3,2,3,3,0,3,2,0,0,1,1,0,1,1,2,1,2,0,0,0,1, +0,3,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0, +3,3,3,2,3,3,2,3,2,2,2,3,3,3,3,1,3,1,1,0,3,2,1,1,3,3,2,3,1,0,0,1, +1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,1, +3,2,2,3,3,0,3,3,3,3,3,3,3,2,2,1,0,3,3,1,3,3,0,1,3,3,2,3,0,3,0,3, +2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, +2,2,2,3,3,0,3,3,3,3,3,3,3,3,3,0,0,3,2,0,3,3,0,3,2,3,3,3,0,3,1,3, +2,0,0,0,0,0,0,0,0,0,0,1,0,1,2,0,1,0,0,0,0,0,0,0,2,2,0,0,1,0,0,1, +3,3,3,1,2,3,3,1,0,0,1,0,0,3,3,2,3,0,0,2,0,0,2,0,2,0,0,0,2,0,2,0, +0,3,1,0,1,0,0,0,2,2,1,0,1,1,2,1,2,2,2,0,2,1,1,0,0,0,2,0,0,0,0,0, +1,2,1,3,3,0,3,3,3,3,3,2,3,0,0,0,0,2,3,0,2,3,1,0,2,3,1,3,0,3,0,2, +3,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,1,3,3,2,2,3,2,2,0,1,2,3,0,1,2,1,0,1,0,0,0,1,0,2,2,0,0,0,1, +1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0, +3,3,3,1,3,3,1,1,3,3,1,1,3,3,1,0,2,1,2,0,2,1,0,0,1,1,2,1,0,0,0,2, +2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,1,0,2,1,3,0,0,2,0,0,3,3,0,3,0,0,1,0,1,2,0,0,1,1,2,2,0,1,0, +0,1,2,1,1,0,1,0,1,1,1,1,1,0,1,1,1,2,2,1,2,0,1,0,0,0,0,0,0,1,0,0, +3,3,3,2,3,2,3,3,0,2,2,2,3,3,3,0,3,0,0,0,2,2,0,1,2,1,1,1,0,0,0,1, +0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +3,3,3,3,3,3,2,1,2,2,3,3,3,3,2,0,2,0,0,0,2,2,0,0,2,1,3,3,0,0,1,1, +1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0, +1,1,2,3,3,0,3,3,3,3,3,3,2,2,0,2,0,2,3,2,3,2,2,2,2,2,2,2,1,3,2,3, +2,0,2,1,2,2,2,2,1,1,2,2,1,2,2,1,2,0,0,2,1,1,0,2,1,0,0,1,0,0,0,1, +2,3,3,1,1,1,0,1,1,1,2,3,2,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0, +0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,2,2,2,3,2,3,2,2,1,3,3,3,0,2,1,2,0,2,1,0,0,1,1,1,1,1,0,0,1, +2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,2,0,1,0,0,0, +3,3,3,2,3,3,3,3,3,2,3,1,2,3,3,1,2,0,0,0,0,0,0,0,3,2,1,1,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, +3,3,3,2,2,3,3,2,1,1,1,1,1,3,3,0,3,1,0,0,1,1,0,0,3,1,2,1,0,0,0,0, +0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, +3,3,3,2,2,3,2,2,2,3,2,1,1,3,3,0,3,0,0,0,0,1,0,0,3,1,1,2,0,0,0,1, +1,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +1,1,1,3,3,0,3,3,3,3,3,2,2,2,1,2,0,2,1,2,2,1,1,0,1,2,2,2,2,2,2,2, +0,0,2,1,2,1,2,1,0,1,1,3,1,2,1,1,2,0,0,2,0,1,0,1,0,1,0,0,0,1,0,1, +3,3,3,1,3,3,3,0,1,1,0,2,2,3,1,0,3,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,2,0,0,2,2,1,0,0,1,0,0,3,3,1,3,0,0,1,1,0,2,0,3,0,0,0,2,0,1,1, +0,1,2,0,1,2,2,0,2,2,2,2,1,0,2,1,1,0,2,0,2,1,2,0,0,0,0,0,0,0,0,0, +3,3,3,1,3,2,3,2,0,2,2,2,1,3,2,0,2,1,2,0,1,2,0,0,1,0,2,2,0,0,0,2, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0, +3,3,3,0,3,3,1,1,2,3,1,0,3,2,3,0,3,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0, +1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,3,3,0,3,3,2,3,3,2,2,0,0,0,0,1,2,0,1,3,0,0,0,3,1,1,0,3,0,2, +2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,1,2,2,1,0,3,1,1,1,1,3,3,2,3,0,0,1,0,1,2,0,2,2,0,2,2,0,2,1, +0,2,2,1,1,1,1,0,2,1,1,0,1,1,1,1,2,1,2,1,2,0,1,0,1,0,0,0,0,0,0,0, +3,3,3,0,1,1,3,0,0,1,1,0,0,2,2,0,3,0,0,1,1,0,1,0,0,0,0,0,2,0,0,0, +0,3,1,0,1,0,1,0,2,0,0,1,0,1,0,1,1,1,2,1,1,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,0,2,0,2,0,1,1,1,0,0,3,3,0,2,0,0,1,0,0,2,1,1,0,1,0,1,0,1,0, +0,2,0,1,2,0,2,0,2,1,1,0,1,0,2,1,1,0,2,1,1,0,1,0,0,0,1,1,0,0,0,0, +3,2,3,0,1,0,0,0,0,0,0,0,0,1,2,0,1,0,0,1,0,0,1,0,0,0,0,0,2,0,0,0, +0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,2,1,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,0,0,2,3,0,0,1,0,1,0,2,3,2,3,0,0,1,3,0,2,1,0,0,0,0,2,0,1,0, +0,2,1,0,0,1,1,0,2,1,0,0,1,0,0,1,1,0,1,1,2,0,1,0,0,0,0,1,0,0,0,0, +3,2,2,0,0,1,1,0,0,0,0,0,0,3,1,1,1,0,0,0,0,0,1,0,0,0,0,0,2,0,1,0, +0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,3,3,0,2,3,2,2,1,2,2,1,1,2,0,1,3,2,2,2,0,0,2,2,0,0,0,1,2,1, +3,0,2,1,1,0,1,1,1,0,1,2,2,2,1,1,2,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0, +0,1,1,2,3,0,3,3,3,2,2,2,2,1,0,1,0,1,0,1,2,2,0,0,2,2,1,3,1,1,2,1, +0,0,1,1,2,0,1,1,0,0,1,2,0,2,1,1,2,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0, +3,3,2,0,0,3,1,0,0,0,0,0,0,3,2,1,2,0,0,1,0,0,2,0,0,0,0,0,2,0,1,0, +0,2,1,1,0,0,1,0,1,2,0,0,1,1,0,0,2,1,1,1,1,0,2,0,0,0,0,0,0,0,0,0, +3,3,2,0,0,1,0,0,0,0,1,0,0,3,3,2,2,0,0,1,0,0,2,0,1,0,0,0,2,0,1,0, +0,0,1,1,0,0,2,0,2,1,0,0,1,1,2,1,2,0,2,1,2,1,1,1,0,0,1,1,0,0,0,0, +3,3,2,0,0,2,2,0,0,0,1,1,0,2,2,1,3,1,0,1,0,1,2,0,0,0,0,0,1,0,1,0, +0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,2,0,0,0,1,0,0,1,0,0,2,3,1,2,0,0,1,0,0,2,0,0,0,1,0,2,0,2,0, +0,1,1,2,2,1,2,0,2,1,1,0,0,1,1,0,1,1,1,1,2,1,1,0,0,0,0,0,0,0,0,0, +3,3,3,0,2,1,2,1,0,0,1,1,0,3,3,1,2,0,0,1,0,0,2,0,2,0,1,1,2,0,0,0, +0,0,1,1,1,1,2,0,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0, +3,3,3,0,2,2,3,2,0,0,1,0,0,2,3,1,0,0,0,0,0,0,2,0,2,0,0,0,2,0,0,0, +0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,0,0,0,0,0,0,0,1,0,0,2,2,2,2,0,0,1,0,0,2,0,0,0,0,0,2,0,1,0, +0,0,2,1,1,0,1,0,2,1,1,0,0,1,1,2,1,0,2,0,2,0,1,0,0,0,2,0,0,0,0,0, +0,0,0,2,2,0,2,1,1,1,1,2,2,0,0,1,0,1,0,0,1,3,0,0,0,0,1,0,0,2,1,0, +0,0,1,0,1,0,0,0,0,0,2,1,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, +2,0,0,2,3,0,2,3,1,2,2,0,2,0,0,2,0,2,1,1,1,2,1,0,0,1,2,1,1,2,1,0, +1,0,2,0,1,0,1,1,0,0,2,2,1,2,1,1,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,0,2,1,2,0,0,0,1,0,0,3,2,0,1,0,0,1,0,0,2,0,0,0,1,2,1,0,1,0, +0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,2,2,0,2,2,1,1,0,1,1,1,1,1,0,0,1,2,1,1,1,0,1,0,0,0,1,1,1,1, +0,0,2,1,0,1,1,1,0,1,1,2,1,2,1,1,2,0,1,1,2,1,0,2,0,0,0,0,0,0,0,0, +3,2,2,0,0,2,0,0,0,0,0,0,0,2,2,0,2,0,0,1,0,0,2,0,0,0,0,0,2,0,0,0, +0,2,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,3,2,0,2,2,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0, +2,0,1,0,1,0,1,1,0,0,1,2,0,1,0,1,1,0,0,1,0,1,0,2,0,0,0,0,0,0,0,0, +2,2,2,0,1,1,0,0,0,1,0,0,0,1,2,0,1,0,0,1,0,0,1,0,0,0,0,1,2,0,1,0, +0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,1,0,1,1,1,0,0,0,0,1,2,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, +1,1,2,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,1, +0,0,1,2,2,0,2,1,2,1,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,0,0,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +2,2,2,0,0,0,1,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +) + +Latin5TurkishModel = { + 'char_to_order_map': Latin5_TurkishCharToOrderMap, + 'precedence_matrix': TurkishLangModel, + 'typical_positive_ratio': 0.970290, + 'keep_english_letter': True, + 'charset_name': "ISO-8859-9", + 'language': 'Turkish', +} diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/latin1prober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/latin1prober.py new file mode 100644 index 000000000..7d1e8c20f --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/latin1prober.py @@ -0,0 +1,145 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState + +FREQ_CAT_NUM = 4 + +UDF = 0 # undefined +OTH = 1 # other +ASC = 2 # ascii capital letter +ASS = 3 # ascii small letter +ACV = 4 # accent capital vowel +ACO = 5 # accent capital other +ASV = 6 # accent small vowel +ASO = 7 # accent small other +CLASS_NUM = 8 # total classes + +Latin1_CharToClass = ( + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F + OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 + ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F + OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 + ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F + OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87 + OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F + UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97 + OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF + ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7 + ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF + ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7 + ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF + ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7 + ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF + ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7 + ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF +) + +# 0 : illegal +# 1 : very unlikely +# 2 : normal +# 3 : very likely +Latin1ClassModel = ( +# UDF OTH ASC ASS ACV ACO ASV ASO + 0, 0, 0, 0, 0, 0, 0, 0, # UDF + 0, 3, 3, 3, 3, 3, 3, 3, # OTH + 0, 3, 3, 3, 3, 3, 3, 3, # ASC + 0, 3, 3, 3, 1, 1, 3, 3, # ASS + 0, 3, 3, 3, 1, 2, 1, 2, # ACV + 0, 3, 3, 3, 3, 3, 3, 3, # ACO + 0, 3, 1, 3, 1, 1, 1, 3, # ASV + 0, 3, 1, 3, 1, 1, 3, 3, # ASO +) + + +class Latin1Prober(CharSetProber): + def __init__(self): + super(Latin1Prober, self).__init__() + self._last_char_class = None + self._freq_counter = None + self.reset() + + def reset(self): + self._last_char_class = OTH + self._freq_counter = [0] * FREQ_CAT_NUM + CharSetProber.reset(self) + + @property + def charset_name(self): + return "ISO-8859-1" + + @property + def language(self): + return "" + + def feed(self, byte_str): + byte_str = self.filter_with_english_letters(byte_str) + for c in byte_str: + char_class = Latin1_CharToClass[c] + freq = Latin1ClassModel[(self._last_char_class * CLASS_NUM) + + char_class] + if freq == 0: + self._state = ProbingState.NOT_ME + break + self._freq_counter[freq] += 1 + self._last_char_class = char_class + + return self.state + + def get_confidence(self): + if self.state == ProbingState.NOT_ME: + return 0.01 + + total = sum(self._freq_counter) + if total < 0.01: + confidence = 0.0 + else: + confidence = ((self._freq_counter[3] - self._freq_counter[1] * 20.0) + / total) + if confidence < 0.0: + confidence = 0.0 + # lower the confidence of latin1 so that other more accurate + # detector can take priority. + confidence = confidence * 0.73 + return confidence diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py new file mode 100644 index 000000000..6256ecfd1 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py @@ -0,0 +1,91 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Proofpoint, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState, MachineState + + +class MultiByteCharSetProber(CharSetProber): + """ + MultiByteCharSetProber + """ + + def __init__(self, lang_filter=None): + super(MultiByteCharSetProber, self).__init__(lang_filter=lang_filter) + self.distribution_analyzer = None + self.coding_sm = None + self._last_char = [0, 0] + + def reset(self): + super(MultiByteCharSetProber, self).reset() + if self.coding_sm: + self.coding_sm.reset() + if self.distribution_analyzer: + self.distribution_analyzer.reset() + self._last_char = [0, 0] + + @property + def charset_name(self): + raise NotImplementedError + + @property + def language(self): + raise NotImplementedError + + def feed(self, byte_str): + for i in range(len(byte_str)): + coding_state = self.coding_sm.next_state(byte_str[i]) + if coding_state == MachineState.ERROR: + self.logger.debug('%s %s prober hit error at byte %s', + self.charset_name, self.language, i) + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte_str[0] + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.distribution_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if (self.distribution_analyzer.got_enough_data() and + (self.get_confidence() > self.SHORTCUT_THRESHOLD)): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + return self.distribution_analyzer.get_confidence() diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py new file mode 100644 index 000000000..530abe75e --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py @@ -0,0 +1,54 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Proofpoint, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetgroupprober import CharSetGroupProber +from .utf8prober import UTF8Prober +from .sjisprober import SJISProber +from .eucjpprober import EUCJPProber +from .gb2312prober import GB2312Prober +from .euckrprober import EUCKRProber +from .cp949prober import CP949Prober +from .big5prober import Big5Prober +from .euctwprober import EUCTWProber + + +class MBCSGroupProber(CharSetGroupProber): + def __init__(self, lang_filter=None): + super(MBCSGroupProber, self).__init__(lang_filter=lang_filter) + self.probers = [ + UTF8Prober(), + SJISProber(), + EUCJPProber(), + GB2312Prober(), + EUCKRProber(), + CP949Prober(), + Big5Prober(), + EUCTWProber() + ] + self.reset() diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/mbcssm.py b/my_env/Lib/site-packages/pip/_vendor/chardet/mbcssm.py new file mode 100644 index 000000000..8360d0f28 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/mbcssm.py @@ -0,0 +1,572 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import MachineState + +# BIG5 + +BIG5_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as legal value + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,1, # 78 - 7f + 4,4,4,4,4,4,4,4, # 80 - 87 + 4,4,4,4,4,4,4,4, # 88 - 8f + 4,4,4,4,4,4,4,4, # 90 - 97 + 4,4,4,4,4,4,4,4, # 98 - 9f + 4,3,3,3,3,3,3,3, # a0 - a7 + 3,3,3,3,3,3,3,3, # a8 - af + 3,3,3,3,3,3,3,3, # b0 - b7 + 3,3,3,3,3,3,3,3, # b8 - bf + 3,3,3,3,3,3,3,3, # c0 - c7 + 3,3,3,3,3,3,3,3, # c8 - cf + 3,3,3,3,3,3,3,3, # d0 - d7 + 3,3,3,3,3,3,3,3, # d8 - df + 3,3,3,3,3,3,3,3, # e0 - e7 + 3,3,3,3,3,3,3,3, # e8 - ef + 3,3,3,3,3,3,3,3, # f0 - f7 + 3,3,3,3,3,3,3,0 # f8 - ff +) + +BIG5_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,#08-0f + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START#10-17 +) + +BIG5_CHAR_LEN_TABLE = (0, 1, 1, 2, 0) + +BIG5_SM_MODEL = {'class_table': BIG5_CLS, + 'class_factor': 5, + 'state_table': BIG5_ST, + 'char_len_table': BIG5_CHAR_LEN_TABLE, + 'name': 'Big5'} + +# CP949 + +CP949_CLS = ( + 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,0,0, # 00 - 0f + 1,1,1,1,1,1,1,1, 1,1,1,0,1,1,1,1, # 10 - 1f + 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 20 - 2f + 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 30 - 3f + 1,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4, # 40 - 4f + 4,4,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 50 - 5f + 1,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5, # 60 - 6f + 5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 70 - 7f + 0,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 80 - 8f + 6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 90 - 9f + 6,7,7,7,7,7,7,7, 7,7,7,7,7,8,8,8, # a0 - af + 7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7, # b0 - bf + 7,7,7,7,7,7,9,2, 2,3,2,2,2,2,2,2, # c0 - cf + 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # d0 - df + 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # e0 - ef + 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,0, # f0 - ff +) + +CP949_ST = ( +#cls= 0 1 2 3 4 5 6 7 8 9 # previous state = + MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START, 4, 5,MachineState.ERROR, 6, # MachineState.START + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, # MachineState.ERROR + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME, # MachineState.ITS_ME + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 3 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 4 + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 5 + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 6 +) + +CP949_CHAR_LEN_TABLE = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2) + +CP949_SM_MODEL = {'class_table': CP949_CLS, + 'class_factor': 10, + 'state_table': CP949_ST, + 'char_len_table': CP949_CHAR_LEN_TABLE, + 'name': 'CP949'} + +# EUC-JP + +EUCJP_CLS = ( + 4,4,4,4,4,4,4,4, # 00 - 07 + 4,4,4,4,4,4,5,5, # 08 - 0f + 4,4,4,4,4,4,4,4, # 10 - 17 + 4,4,4,5,4,4,4,4, # 18 - 1f + 4,4,4,4,4,4,4,4, # 20 - 27 + 4,4,4,4,4,4,4,4, # 28 - 2f + 4,4,4,4,4,4,4,4, # 30 - 37 + 4,4,4,4,4,4,4,4, # 38 - 3f + 4,4,4,4,4,4,4,4, # 40 - 47 + 4,4,4,4,4,4,4,4, # 48 - 4f + 4,4,4,4,4,4,4,4, # 50 - 57 + 4,4,4,4,4,4,4,4, # 58 - 5f + 4,4,4,4,4,4,4,4, # 60 - 67 + 4,4,4,4,4,4,4,4, # 68 - 6f + 4,4,4,4,4,4,4,4, # 70 - 77 + 4,4,4,4,4,4,4,4, # 78 - 7f + 5,5,5,5,5,5,5,5, # 80 - 87 + 5,5,5,5,5,5,1,3, # 88 - 8f + 5,5,5,5,5,5,5,5, # 90 - 97 + 5,5,5,5,5,5,5,5, # 98 - 9f + 5,2,2,2,2,2,2,2, # a0 - a7 + 2,2,2,2,2,2,2,2, # a8 - af + 2,2,2,2,2,2,2,2, # b0 - b7 + 2,2,2,2,2,2,2,2, # b8 - bf + 2,2,2,2,2,2,2,2, # c0 - c7 + 2,2,2,2,2,2,2,2, # c8 - cf + 2,2,2,2,2,2,2,2, # d0 - d7 + 2,2,2,2,2,2,2,2, # d8 - df + 0,0,0,0,0,0,0,0, # e0 - e7 + 0,0,0,0,0,0,0,0, # e8 - ef + 0,0,0,0,0,0,0,0, # f0 - f7 + 0,0,0,0,0,0,0,5 # f8 - ff +) + +EUCJP_ST = ( + 3, 4, 3, 5,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 3,MachineState.ERROR,#18-1f + 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START#20-27 +) + +EUCJP_CHAR_LEN_TABLE = (2, 2, 2, 3, 1, 0) + +EUCJP_SM_MODEL = {'class_table': EUCJP_CLS, + 'class_factor': 6, + 'state_table': EUCJP_ST, + 'char_len_table': EUCJP_CHAR_LEN_TABLE, + 'name': 'EUC-JP'} + +# EUC-KR + +EUCKR_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 1,1,1,1,1,1,1,1, # 40 - 47 + 1,1,1,1,1,1,1,1, # 48 - 4f + 1,1,1,1,1,1,1,1, # 50 - 57 + 1,1,1,1,1,1,1,1, # 58 - 5f + 1,1,1,1,1,1,1,1, # 60 - 67 + 1,1,1,1,1,1,1,1, # 68 - 6f + 1,1,1,1,1,1,1,1, # 70 - 77 + 1,1,1,1,1,1,1,1, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,0,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,2,2,2,2,2,2,2, # a0 - a7 + 2,2,2,2,2,3,3,3, # a8 - af + 2,2,2,2,2,2,2,2, # b0 - b7 + 2,2,2,2,2,2,2,2, # b8 - bf + 2,2,2,2,2,2,2,2, # c0 - c7 + 2,3,2,2,2,2,2,2, # c8 - cf + 2,2,2,2,2,2,2,2, # d0 - d7 + 2,2,2,2,2,2,2,2, # d8 - df + 2,2,2,2,2,2,2,2, # e0 - e7 + 2,2,2,2,2,2,2,2, # e8 - ef + 2,2,2,2,2,2,2,2, # f0 - f7 + 2,2,2,2,2,2,2,0 # f8 - ff +) + +EUCKR_ST = ( + MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #08-0f +) + +EUCKR_CHAR_LEN_TABLE = (0, 1, 2, 0) + +EUCKR_SM_MODEL = {'class_table': EUCKR_CLS, + 'class_factor': 4, + 'state_table': EUCKR_ST, + 'char_len_table': EUCKR_CHAR_LEN_TABLE, + 'name': 'EUC-KR'} + +# EUC-TW + +EUCTW_CLS = ( + 2,2,2,2,2,2,2,2, # 00 - 07 + 2,2,2,2,2,2,0,0, # 08 - 0f + 2,2,2,2,2,2,2,2, # 10 - 17 + 2,2,2,0,2,2,2,2, # 18 - 1f + 2,2,2,2,2,2,2,2, # 20 - 27 + 2,2,2,2,2,2,2,2, # 28 - 2f + 2,2,2,2,2,2,2,2, # 30 - 37 + 2,2,2,2,2,2,2,2, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,2, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,6,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,3,4,4,4,4,4,4, # a0 - a7 + 5,5,1,1,1,1,1,1, # a8 - af + 1,1,1,1,1,1,1,1, # b0 - b7 + 1,1,1,1,1,1,1,1, # b8 - bf + 1,1,3,1,3,3,3,3, # c0 - c7 + 3,3,3,3,3,3,3,3, # c8 - cf + 3,3,3,3,3,3,3,3, # d0 - d7 + 3,3,3,3,3,3,3,3, # d8 - df + 3,3,3,3,3,3,3,3, # e0 - e7 + 3,3,3,3,3,3,3,3, # e8 - ef + 3,3,3,3,3,3,3,3, # f0 - f7 + 3,3,3,3,3,3,3,0 # f8 - ff +) + +EUCTW_ST = ( + MachineState.ERROR,MachineState.ERROR,MachineState.START, 3, 3, 3, 4,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.ERROR,#10-17 + MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,#20-27 + MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f +) + +EUCTW_CHAR_LEN_TABLE = (0, 0, 1, 2, 2, 2, 3) + +EUCTW_SM_MODEL = {'class_table': EUCTW_CLS, + 'class_factor': 7, + 'state_table': EUCTW_ST, + 'char_len_table': EUCTW_CHAR_LEN_TABLE, + 'name': 'x-euc-tw'} + +# GB2312 + +GB2312_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 3,3,3,3,3,3,3,3, # 30 - 37 + 3,3,1,1,1,1,1,1, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,4, # 78 - 7f + 5,6,6,6,6,6,6,6, # 80 - 87 + 6,6,6,6,6,6,6,6, # 88 - 8f + 6,6,6,6,6,6,6,6, # 90 - 97 + 6,6,6,6,6,6,6,6, # 98 - 9f + 6,6,6,6,6,6,6,6, # a0 - a7 + 6,6,6,6,6,6,6,6, # a8 - af + 6,6,6,6,6,6,6,6, # b0 - b7 + 6,6,6,6,6,6,6,6, # b8 - bf + 6,6,6,6,6,6,6,6, # c0 - c7 + 6,6,6,6,6,6,6,6, # c8 - cf + 6,6,6,6,6,6,6,6, # d0 - d7 + 6,6,6,6,6,6,6,6, # d8 - df + 6,6,6,6,6,6,6,6, # e0 - e7 + 6,6,6,6,6,6,6,6, # e8 - ef + 6,6,6,6,6,6,6,6, # f0 - f7 + 6,6,6,6,6,6,6,0 # f8 - ff +) + +GB2312_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, 3,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,#10-17 + 4,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#20-27 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f +) + +# To be accurate, the length of class 6 can be either 2 or 4. +# But it is not necessary to discriminate between the two since +# it is used for frequency analysis only, and we are validating +# each code range there as well. So it is safe to set it to be +# 2 here. +GB2312_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 1, 2) + +GB2312_SM_MODEL = {'class_table': GB2312_CLS, + 'class_factor': 7, + 'state_table': GB2312_ST, + 'char_len_table': GB2312_CHAR_LEN_TABLE, + 'name': 'GB2312'} + +# Shift_JIS + +SJIS_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,1, # 78 - 7f + 3,3,3,3,3,2,2,3, # 80 - 87 + 3,3,3,3,3,3,3,3, # 88 - 8f + 3,3,3,3,3,3,3,3, # 90 - 97 + 3,3,3,3,3,3,3,3, # 98 - 9f + #0xa0 is illegal in sjis encoding, but some pages does + #contain such byte. We need to be more error forgiven. + 2,2,2,2,2,2,2,2, # a0 - a7 + 2,2,2,2,2,2,2,2, # a8 - af + 2,2,2,2,2,2,2,2, # b0 - b7 + 2,2,2,2,2,2,2,2, # b8 - bf + 2,2,2,2,2,2,2,2, # c0 - c7 + 2,2,2,2,2,2,2,2, # c8 - cf + 2,2,2,2,2,2,2,2, # d0 - d7 + 2,2,2,2,2,2,2,2, # d8 - df + 3,3,3,3,3,3,3,3, # e0 - e7 + 3,3,3,3,3,4,4,4, # e8 - ef + 3,3,3,3,3,3,3,3, # f0 - f7 + 3,3,3,3,3,0,0,0) # f8 - ff + + +SJIS_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START #10-17 +) + +SJIS_CHAR_LEN_TABLE = (0, 1, 1, 2, 0, 0) + +SJIS_SM_MODEL = {'class_table': SJIS_CLS, + 'class_factor': 6, + 'state_table': SJIS_ST, + 'char_len_table': SJIS_CHAR_LEN_TABLE, + 'name': 'Shift_JIS'} + +# UCS2-BE + +UCS2BE_CLS = ( + 0,0,0,0,0,0,0,0, # 00 - 07 + 0,0,1,0,0,2,0,0, # 08 - 0f + 0,0,0,0,0,0,0,0, # 10 - 17 + 0,0,0,3,0,0,0,0, # 18 - 1f + 0,0,0,0,0,0,0,0, # 20 - 27 + 0,3,3,3,3,3,0,0, # 28 - 2f + 0,0,0,0,0,0,0,0, # 30 - 37 + 0,0,0,0,0,0,0,0, # 38 - 3f + 0,0,0,0,0,0,0,0, # 40 - 47 + 0,0,0,0,0,0,0,0, # 48 - 4f + 0,0,0,0,0,0,0,0, # 50 - 57 + 0,0,0,0,0,0,0,0, # 58 - 5f + 0,0,0,0,0,0,0,0, # 60 - 67 + 0,0,0,0,0,0,0,0, # 68 - 6f + 0,0,0,0,0,0,0,0, # 70 - 77 + 0,0,0,0,0,0,0,0, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,0,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,0,0,0,0,0,0,0, # a0 - a7 + 0,0,0,0,0,0,0,0, # a8 - af + 0,0,0,0,0,0,0,0, # b0 - b7 + 0,0,0,0,0,0,0,0, # b8 - bf + 0,0,0,0,0,0,0,0, # c0 - c7 + 0,0,0,0,0,0,0,0, # c8 - cf + 0,0,0,0,0,0,0,0, # d0 - d7 + 0,0,0,0,0,0,0,0, # d8 - df + 0,0,0,0,0,0,0,0, # e0 - e7 + 0,0,0,0,0,0,0,0, # e8 - ef + 0,0,0,0,0,0,0,0, # f0 - f7 + 0,0,0,0,0,0,4,5 # f8 - ff +) + +UCS2BE_ST = ( + 5, 7, 7,MachineState.ERROR, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME, 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,#10-17 + 6, 6, 6, 6, 6,MachineState.ITS_ME, 6, 6,#18-1f + 6, 6, 6, 6, 5, 7, 7,MachineState.ERROR,#20-27 + 5, 8, 6, 6,MachineState.ERROR, 6, 6, 6,#28-2f + 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #30-37 +) + +UCS2BE_CHAR_LEN_TABLE = (2, 2, 2, 0, 2, 2) + +UCS2BE_SM_MODEL = {'class_table': UCS2BE_CLS, + 'class_factor': 6, + 'state_table': UCS2BE_ST, + 'char_len_table': UCS2BE_CHAR_LEN_TABLE, + 'name': 'UTF-16BE'} + +# UCS2-LE + +UCS2LE_CLS = ( + 0,0,0,0,0,0,0,0, # 00 - 07 + 0,0,1,0,0,2,0,0, # 08 - 0f + 0,0,0,0,0,0,0,0, # 10 - 17 + 0,0,0,3,0,0,0,0, # 18 - 1f + 0,0,0,0,0,0,0,0, # 20 - 27 + 0,3,3,3,3,3,0,0, # 28 - 2f + 0,0,0,0,0,0,0,0, # 30 - 37 + 0,0,0,0,0,0,0,0, # 38 - 3f + 0,0,0,0,0,0,0,0, # 40 - 47 + 0,0,0,0,0,0,0,0, # 48 - 4f + 0,0,0,0,0,0,0,0, # 50 - 57 + 0,0,0,0,0,0,0,0, # 58 - 5f + 0,0,0,0,0,0,0,0, # 60 - 67 + 0,0,0,0,0,0,0,0, # 68 - 6f + 0,0,0,0,0,0,0,0, # 70 - 77 + 0,0,0,0,0,0,0,0, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,0,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,0,0,0,0,0,0,0, # a0 - a7 + 0,0,0,0,0,0,0,0, # a8 - af + 0,0,0,0,0,0,0,0, # b0 - b7 + 0,0,0,0,0,0,0,0, # b8 - bf + 0,0,0,0,0,0,0,0, # c0 - c7 + 0,0,0,0,0,0,0,0, # c8 - cf + 0,0,0,0,0,0,0,0, # d0 - d7 + 0,0,0,0,0,0,0,0, # d8 - df + 0,0,0,0,0,0,0,0, # e0 - e7 + 0,0,0,0,0,0,0,0, # e8 - ef + 0,0,0,0,0,0,0,0, # f0 - f7 + 0,0,0,0,0,0,4,5 # f8 - ff +) + +UCS2LE_ST = ( + 6, 6, 7, 6, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME, 5, 5, 5,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#10-17 + 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR, 6, 6,#18-1f + 7, 6, 8, 8, 5, 5, 5,MachineState.ERROR,#20-27 + 5, 5, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5,#28-2f + 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR,MachineState.START,MachineState.START #30-37 +) + +UCS2LE_CHAR_LEN_TABLE = (2, 2, 2, 2, 2, 2) + +UCS2LE_SM_MODEL = {'class_table': UCS2LE_CLS, + 'class_factor': 6, + 'state_table': UCS2LE_ST, + 'char_len_table': UCS2LE_CHAR_LEN_TABLE, + 'name': 'UTF-16LE'} + +# UTF-8 + +UTF8_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as a legal value + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 1,1,1,1,1,1,1,1, # 40 - 47 + 1,1,1,1,1,1,1,1, # 48 - 4f + 1,1,1,1,1,1,1,1, # 50 - 57 + 1,1,1,1,1,1,1,1, # 58 - 5f + 1,1,1,1,1,1,1,1, # 60 - 67 + 1,1,1,1,1,1,1,1, # 68 - 6f + 1,1,1,1,1,1,1,1, # 70 - 77 + 1,1,1,1,1,1,1,1, # 78 - 7f + 2,2,2,2,3,3,3,3, # 80 - 87 + 4,4,4,4,4,4,4,4, # 88 - 8f + 4,4,4,4,4,4,4,4, # 90 - 97 + 4,4,4,4,4,4,4,4, # 98 - 9f + 5,5,5,5,5,5,5,5, # a0 - a7 + 5,5,5,5,5,5,5,5, # a8 - af + 5,5,5,5,5,5,5,5, # b0 - b7 + 5,5,5,5,5,5,5,5, # b8 - bf + 0,0,6,6,6,6,6,6, # c0 - c7 + 6,6,6,6,6,6,6,6, # c8 - cf + 6,6,6,6,6,6,6,6, # d0 - d7 + 6,6,6,6,6,6,6,6, # d8 - df + 7,8,8,8,8,8,8,8, # e0 - e7 + 8,8,8,8,8,9,8,8, # e8 - ef + 10,11,11,11,11,11,11,11, # f0 - f7 + 12,13,13,13,14,15,0,0 # f8 - ff +) + +UTF8_ST = ( + MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12, 10,#00-07 + 9, 11, 8, 7, 6, 5, 4, 3,#08-0f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#20-27 + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#28-2f + MachineState.ERROR,MachineState.ERROR, 5, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#30-37 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#38-3f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#40-47 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#48-4f + MachineState.ERROR,MachineState.ERROR, 7, 7, 7, 7,MachineState.ERROR,MachineState.ERROR,#50-57 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#58-5f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 7, 7,MachineState.ERROR,MachineState.ERROR,#60-67 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#68-6f + MachineState.ERROR,MachineState.ERROR, 9, 9, 9, 9,MachineState.ERROR,MachineState.ERROR,#70-77 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#78-7f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 9,MachineState.ERROR,MachineState.ERROR,#80-87 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#88-8f + MachineState.ERROR,MachineState.ERROR, 12, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,#90-97 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#98-9f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12,MachineState.ERROR,MachineState.ERROR,#a0-a7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#a8-af + MachineState.ERROR,MachineState.ERROR, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b0-b7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b8-bf + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,#c0-c7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR #c8-cf +) + +UTF8_CHAR_LEN_TABLE = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6) + +UTF8_SM_MODEL = {'class_table': UTF8_CLS, + 'class_factor': 16, + 'state_table': UTF8_ST, + 'char_len_table': UTF8_CHAR_LEN_TABLE, + 'name': 'UTF-8'} diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py new file mode 100644 index 000000000..0adb51de5 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py @@ -0,0 +1,132 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import CharacterCategory, ProbingState, SequenceLikelihood + + +class SingleByteCharSetProber(CharSetProber): + SAMPLE_SIZE = 64 + SB_ENOUGH_REL_THRESHOLD = 1024 # 0.25 * SAMPLE_SIZE^2 + POSITIVE_SHORTCUT_THRESHOLD = 0.95 + NEGATIVE_SHORTCUT_THRESHOLD = 0.05 + + def __init__(self, model, reversed=False, name_prober=None): + super(SingleByteCharSetProber, self).__init__() + self._model = model + # TRUE if we need to reverse every pair in the model lookup + self._reversed = reversed + # Optional auxiliary prober for name decision + self._name_prober = name_prober + self._last_order = None + self._seq_counters = None + self._total_seqs = None + self._total_char = None + self._freq_char = None + self.reset() + + def reset(self): + super(SingleByteCharSetProber, self).reset() + # char order of last character + self._last_order = 255 + self._seq_counters = [0] * SequenceLikelihood.get_num_categories() + self._total_seqs = 0 + self._total_char = 0 + # characters that fall in our sampling range + self._freq_char = 0 + + @property + def charset_name(self): + if self._name_prober: + return self._name_prober.charset_name + else: + return self._model['charset_name'] + + @property + def language(self): + if self._name_prober: + return self._name_prober.language + else: + return self._model.get('language') + + def feed(self, byte_str): + if not self._model['keep_english_letter']: + byte_str = self.filter_international_words(byte_str) + if not byte_str: + return self.state + char_to_order_map = self._model['char_to_order_map'] + for i, c in enumerate(byte_str): + # XXX: Order is in range 1-64, so one would think we want 0-63 here, + # but that leads to 27 more test failures than before. + order = char_to_order_map[c] + # XXX: This was SYMBOL_CAT_ORDER before, with a value of 250, but + # CharacterCategory.SYMBOL is actually 253, so we use CONTROL + # to make it closer to the original intent. The only difference + # is whether or not we count digits and control characters for + # _total_char purposes. + if order < CharacterCategory.CONTROL: + self._total_char += 1 + if order < self.SAMPLE_SIZE: + self._freq_char += 1 + if self._last_order < self.SAMPLE_SIZE: + self._total_seqs += 1 + if not self._reversed: + i = (self._last_order * self.SAMPLE_SIZE) + order + model = self._model['precedence_matrix'][i] + else: # reverse the order of the letters in the lookup + i = (order * self.SAMPLE_SIZE) + self._last_order + model = self._model['precedence_matrix'][i] + self._seq_counters[model] += 1 + self._last_order = order + + charset_name = self._model['charset_name'] + if self.state == ProbingState.DETECTING: + if self._total_seqs > self.SB_ENOUGH_REL_THRESHOLD: + confidence = self.get_confidence() + if confidence > self.POSITIVE_SHORTCUT_THRESHOLD: + self.logger.debug('%s confidence = %s, we have a winner', + charset_name, confidence) + self._state = ProbingState.FOUND_IT + elif confidence < self.NEGATIVE_SHORTCUT_THRESHOLD: + self.logger.debug('%s confidence = %s, below negative ' + 'shortcut threshhold %s', charset_name, + confidence, + self.NEGATIVE_SHORTCUT_THRESHOLD) + self._state = ProbingState.NOT_ME + + return self.state + + def get_confidence(self): + r = 0.01 + if self._total_seqs > 0: + r = ((1.0 * self._seq_counters[SequenceLikelihood.POSITIVE]) / + self._total_seqs / self._model['typical_positive_ratio']) + r = r * self._freq_char / self._total_char + if r >= 1.0: + r = 0.99 + return r diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py new file mode 100644 index 000000000..98e95dc1a --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py @@ -0,0 +1,73 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetgroupprober import CharSetGroupProber +from .sbcharsetprober import SingleByteCharSetProber +from .langcyrillicmodel import (Win1251CyrillicModel, Koi8rModel, + Latin5CyrillicModel, MacCyrillicModel, + Ibm866Model, Ibm855Model) +from .langgreekmodel import Latin7GreekModel, Win1253GreekModel +from .langbulgarianmodel import Latin5BulgarianModel, Win1251BulgarianModel +# from .langhungarianmodel import Latin2HungarianModel, Win1250HungarianModel +from .langthaimodel import TIS620ThaiModel +from .langhebrewmodel import Win1255HebrewModel +from .hebrewprober import HebrewProber +from .langturkishmodel import Latin5TurkishModel + + +class SBCSGroupProber(CharSetGroupProber): + def __init__(self): + super(SBCSGroupProber, self).__init__() + self.probers = [ + SingleByteCharSetProber(Win1251CyrillicModel), + SingleByteCharSetProber(Koi8rModel), + SingleByteCharSetProber(Latin5CyrillicModel), + SingleByteCharSetProber(MacCyrillicModel), + SingleByteCharSetProber(Ibm866Model), + SingleByteCharSetProber(Ibm855Model), + SingleByteCharSetProber(Latin7GreekModel), + SingleByteCharSetProber(Win1253GreekModel), + SingleByteCharSetProber(Latin5BulgarianModel), + SingleByteCharSetProber(Win1251BulgarianModel), + # TODO: Restore Hungarian encodings (iso-8859-2 and windows-1250) + # after we retrain model. + # SingleByteCharSetProber(Latin2HungarianModel), + # SingleByteCharSetProber(Win1250HungarianModel), + SingleByteCharSetProber(TIS620ThaiModel), + SingleByteCharSetProber(Latin5TurkishModel), + ] + hebrew_prober = HebrewProber() + logical_hebrew_prober = SingleByteCharSetProber(Win1255HebrewModel, + False, hebrew_prober) + visual_hebrew_prober = SingleByteCharSetProber(Win1255HebrewModel, True, + hebrew_prober) + hebrew_prober.set_model_probers(logical_hebrew_prober, visual_hebrew_prober) + self.probers.extend([hebrew_prober, logical_hebrew_prober, + visual_hebrew_prober]) + + self.reset() diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/sjisprober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/sjisprober.py new file mode 100644 index 000000000..9e29623bd --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/sjisprober.py @@ -0,0 +1,92 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import SJISDistributionAnalysis +from .jpcntx import SJISContextAnalysis +from .mbcssm import SJIS_SM_MODEL +from .enums import ProbingState, MachineState + + +class SJISProber(MultiByteCharSetProber): + def __init__(self): + super(SJISProber, self).__init__() + self.coding_sm = CodingStateMachine(SJIS_SM_MODEL) + self.distribution_analyzer = SJISDistributionAnalysis() + self.context_analyzer = SJISContextAnalysis() + self.reset() + + def reset(self): + super(SJISProber, self).reset() + self.context_analyzer.reset() + + @property + def charset_name(self): + return self.context_analyzer.charset_name + + @property + def language(self): + return "Japanese" + + def feed(self, byte_str): + for i in range(len(byte_str)): + coding_state = self.coding_sm.next_state(byte_str[i]) + if coding_state == MachineState.ERROR: + self.logger.debug('%s %s prober hit error at byte %s', + self.charset_name, self.language, i) + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte_str[0] + self.context_analyzer.feed(self._last_char[2 - char_len:], + char_len) + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.context_analyzer.feed(byte_str[i + 1 - char_len:i + 3 + - char_len], char_len) + self.distribution_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if (self.context_analyzer.got_enough_data() and + (self.get_confidence() > self.SHORTCUT_THRESHOLD)): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + context_conf = self.context_analyzer.get_confidence() + distrib_conf = self.distribution_analyzer.get_confidence() + return max(context_conf, distrib_conf) diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/universaldetector.py b/my_env/Lib/site-packages/pip/_vendor/chardet/universaldetector.py new file mode 100644 index 000000000..7b4e92d61 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/universaldetector.py @@ -0,0 +1,286 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### +""" +Module containing the UniversalDetector detector class, which is the primary +class a user of ``chardet`` should use. + +:author: Mark Pilgrim (initial port to Python) +:author: Shy Shalom (original C code) +:author: Dan Blanchard (major refactoring for 3.0) +:author: Ian Cordasco +""" + + +import codecs +import logging +import re + +from .charsetgroupprober import CharSetGroupProber +from .enums import InputState, LanguageFilter, ProbingState +from .escprober import EscCharSetProber +from .latin1prober import Latin1Prober +from .mbcsgroupprober import MBCSGroupProber +from .sbcsgroupprober import SBCSGroupProber + + +class UniversalDetector(object): + """ + The ``UniversalDetector`` class underlies the ``chardet.detect`` function + and coordinates all of the different charset probers. + + To get a ``dict`` containing an encoding and its confidence, you can simply + run: + + .. code:: + + u = UniversalDetector() + u.feed(some_bytes) + u.close() + detected = u.result + + """ + + MINIMUM_THRESHOLD = 0.20 + HIGH_BYTE_DETECTOR = re.compile(b'[\x80-\xFF]') + ESC_DETECTOR = re.compile(b'(\033|~{)') + WIN_BYTE_DETECTOR = re.compile(b'[\x80-\x9F]') + ISO_WIN_MAP = {'iso-8859-1': 'Windows-1252', + 'iso-8859-2': 'Windows-1250', + 'iso-8859-5': 'Windows-1251', + 'iso-8859-6': 'Windows-1256', + 'iso-8859-7': 'Windows-1253', + 'iso-8859-8': 'Windows-1255', + 'iso-8859-9': 'Windows-1254', + 'iso-8859-13': 'Windows-1257'} + + def __init__(self, lang_filter=LanguageFilter.ALL): + self._esc_charset_prober = None + self._charset_probers = [] + self.result = None + self.done = None + self._got_data = None + self._input_state = None + self._last_char = None + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + self._has_win_bytes = None + self.reset() + + def reset(self): + """ + Reset the UniversalDetector and all of its probers back to their + initial states. This is called by ``__init__``, so you only need to + call this directly in between analyses of different documents. + """ + self.result = {'encoding': None, 'confidence': 0.0, 'language': None} + self.done = False + self._got_data = False + self._has_win_bytes = False + self._input_state = InputState.PURE_ASCII + self._last_char = b'' + if self._esc_charset_prober: + self._esc_charset_prober.reset() + for prober in self._charset_probers: + prober.reset() + + def feed(self, byte_str): + """ + Takes a chunk of a document and feeds it through all of the relevant + charset probers. + + After calling ``feed``, you can check the value of the ``done`` + attribute to see if you need to continue feeding the + ``UniversalDetector`` more data, or if it has made a prediction + (in the ``result`` attribute). + + .. note:: + You should always call ``close`` when you're done feeding in your + document if ``done`` is not already ``True``. + """ + if self.done: + return + + if not len(byte_str): + return + + if not isinstance(byte_str, bytearray): + byte_str = bytearray(byte_str) + + # First check for known BOMs, since these are guaranteed to be correct + if not self._got_data: + # If the data starts with BOM, we know it is UTF + if byte_str.startswith(codecs.BOM_UTF8): + # EF BB BF UTF-8 with BOM + self.result = {'encoding': "UTF-8-SIG", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith((codecs.BOM_UTF32_LE, + codecs.BOM_UTF32_BE)): + # FF FE 00 00 UTF-32, little-endian BOM + # 00 00 FE FF UTF-32, big-endian BOM + self.result = {'encoding': "UTF-32", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith(b'\xFE\xFF\x00\x00'): + # FE FF 00 00 UCS-4, unusual octet order BOM (3412) + self.result = {'encoding': "X-ISO-10646-UCS-4-3412", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith(b'\x00\x00\xFF\xFE'): + # 00 00 FF FE UCS-4, unusual octet order BOM (2143) + self.result = {'encoding': "X-ISO-10646-UCS-4-2143", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith((codecs.BOM_LE, codecs.BOM_BE)): + # FF FE UTF-16, little endian BOM + # FE FF UTF-16, big endian BOM + self.result = {'encoding': "UTF-16", + 'confidence': 1.0, + 'language': ''} + + self._got_data = True + if self.result['encoding'] is not None: + self.done = True + return + + # If none of those matched and we've only see ASCII so far, check + # for high bytes and escape sequences + if self._input_state == InputState.PURE_ASCII: + if self.HIGH_BYTE_DETECTOR.search(byte_str): + self._input_state = InputState.HIGH_BYTE + elif self._input_state == InputState.PURE_ASCII and \ + self.ESC_DETECTOR.search(self._last_char + byte_str): + self._input_state = InputState.ESC_ASCII + + self._last_char = byte_str[-1:] + + # If we've seen escape sequences, use the EscCharSetProber, which + # uses a simple state machine to check for known escape sequences in + # HZ and ISO-2022 encodings, since those are the only encodings that + # use such sequences. + if self._input_state == InputState.ESC_ASCII: + if not self._esc_charset_prober: + self._esc_charset_prober = EscCharSetProber(self.lang_filter) + if self._esc_charset_prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = {'encoding': + self._esc_charset_prober.charset_name, + 'confidence': + self._esc_charset_prober.get_confidence(), + 'language': + self._esc_charset_prober.language} + self.done = True + # If we've seen high bytes (i.e., those with values greater than 127), + # we need to do more complicated checks using all our multi-byte and + # single-byte probers that are left. The single-byte probers + # use character bigram distributions to determine the encoding, whereas + # the multi-byte probers use a combination of character unigram and + # bigram distributions. + elif self._input_state == InputState.HIGH_BYTE: + if not self._charset_probers: + self._charset_probers = [MBCSGroupProber(self.lang_filter)] + # If we're checking non-CJK encodings, use single-byte prober + if self.lang_filter & LanguageFilter.NON_CJK: + self._charset_probers.append(SBCSGroupProber()) + self._charset_probers.append(Latin1Prober()) + for prober in self._charset_probers: + if prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = {'encoding': prober.charset_name, + 'confidence': prober.get_confidence(), + 'language': prober.language} + self.done = True + break + if self.WIN_BYTE_DETECTOR.search(byte_str): + self._has_win_bytes = True + + def close(self): + """ + Stop analyzing the current document and come up with a final + prediction. + + :returns: The ``result`` attribute, a ``dict`` with the keys + `encoding`, `confidence`, and `language`. + """ + # Don't bother with checks if we're already done + if self.done: + return self.result + self.done = True + + if not self._got_data: + self.logger.debug('no data received!') + + # Default to ASCII if it is all we've seen so far + elif self._input_state == InputState.PURE_ASCII: + self.result = {'encoding': 'ascii', + 'confidence': 1.0, + 'language': ''} + + # If we have seen non-ASCII, return the best that met MINIMUM_THRESHOLD + elif self._input_state == InputState.HIGH_BYTE: + prober_confidence = None + max_prober_confidence = 0.0 + max_prober = None + for prober in self._charset_probers: + if not prober: + continue + prober_confidence = prober.get_confidence() + if prober_confidence > max_prober_confidence: + max_prober_confidence = prober_confidence + max_prober = prober + if max_prober and (max_prober_confidence > self.MINIMUM_THRESHOLD): + charset_name = max_prober.charset_name + lower_charset_name = max_prober.charset_name.lower() + confidence = max_prober.get_confidence() + # Use Windows encoding name instead of ISO-8859 if we saw any + # extra Windows-specific bytes + if lower_charset_name.startswith('iso-8859'): + if self._has_win_bytes: + charset_name = self.ISO_WIN_MAP.get(lower_charset_name, + charset_name) + self.result = {'encoding': charset_name, + 'confidence': confidence, + 'language': max_prober.language} + + # Log all prober confidences if none met MINIMUM_THRESHOLD + if self.logger.getEffectiveLevel() == logging.DEBUG: + if self.result['encoding'] is None: + self.logger.debug('no probers hit minimum threshold') + for group_prober in self._charset_probers: + if not group_prober: + continue + if isinstance(group_prober, CharSetGroupProber): + for prober in group_prober.probers: + self.logger.debug('%s %s confidence = %s', + prober.charset_name, + prober.language, + prober.get_confidence()) + else: + self.logger.debug('%s %s confidence = %s', + prober.charset_name, + prober.language, + prober.get_confidence()) + return self.result diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/utf8prober.py b/my_env/Lib/site-packages/pip/_vendor/chardet/utf8prober.py new file mode 100644 index 000000000..6c3196cc2 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/utf8prober.py @@ -0,0 +1,82 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState, MachineState +from .codingstatemachine import CodingStateMachine +from .mbcssm import UTF8_SM_MODEL + + + +class UTF8Prober(CharSetProber): + ONE_CHAR_PROB = 0.5 + + def __init__(self): + super(UTF8Prober, self).__init__() + self.coding_sm = CodingStateMachine(UTF8_SM_MODEL) + self._num_mb_chars = None + self.reset() + + def reset(self): + super(UTF8Prober, self).reset() + self.coding_sm.reset() + self._num_mb_chars = 0 + + @property + def charset_name(self): + return "utf-8" + + @property + def language(self): + return "" + + def feed(self, byte_str): + for c in byte_str: + coding_state = self.coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + if self.coding_sm.get_current_charlen() >= 2: + self._num_mb_chars += 1 + + if self.state == ProbingState.DETECTING: + if self.get_confidence() > self.SHORTCUT_THRESHOLD: + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + unlike = 0.99 + if self._num_mb_chars < 6: + unlike *= self.ONE_CHAR_PROB ** self._num_mb_chars + return 1.0 - unlike + else: + return unlike diff --git a/my_env/Lib/site-packages/pip/_vendor/chardet/version.py b/my_env/Lib/site-packages/pip/_vendor/chardet/version.py new file mode 100644 index 000000000..bb2a34a70 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/chardet/version.py @@ -0,0 +1,9 @@ +""" +This module exists only to simplify retrieving the version number of chardet +from within setup.py and from chardet subpackages. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + +__version__ = "3.0.4" +VERSION = __version__.split('.') diff --git a/my_env/Lib/site-packages/pip/_vendor/colorama/__init__.py b/my_env/Lib/site-packages/pip/_vendor/colorama/__init__.py new file mode 100644 index 000000000..2a3bf4714 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/colorama/__init__.py @@ -0,0 +1,6 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from .initialise import init, deinit, reinit, colorama_text +from .ansi import Fore, Back, Style, Cursor +from .ansitowin32 import AnsiToWin32 + +__version__ = '0.4.1' diff --git a/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..d4502bfd8 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-37.pyc new file mode 100644 index 000000000..b50a51b59 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-37.pyc new file mode 100644 index 000000000..20ed6cfbc Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-37.pyc new file mode 100644 index 000000000..dbe26ff45 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-37.pyc new file mode 100644 index 000000000..17d657cfa Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-37.pyc new file mode 100644 index 000000000..460014674 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/colorama/ansi.py b/my_env/Lib/site-packages/pip/_vendor/colorama/ansi.py new file mode 100644 index 000000000..78776588d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/colorama/ansi.py @@ -0,0 +1,102 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +''' +This module generates ANSI character codes to printing colors to terminals. +See: http://en.wikipedia.org/wiki/ANSI_escape_code +''' + +CSI = '\033[' +OSC = '\033]' +BEL = '\007' + + +def code_to_chars(code): + return CSI + str(code) + 'm' + +def set_title(title): + return OSC + '2;' + title + BEL + +def clear_screen(mode=2): + return CSI + str(mode) + 'J' + +def clear_line(mode=2): + return CSI + str(mode) + 'K' + + +class AnsiCodes(object): + def __init__(self): + # the subclasses declare class attributes which are numbers. + # Upon instantiation we define instance attributes, which are the same + # as the class attributes but wrapped with the ANSI escape sequence + for name in dir(self): + if not name.startswith('_'): + value = getattr(self, name) + setattr(self, name, code_to_chars(value)) + + +class AnsiCursor(object): + def UP(self, n=1): + return CSI + str(n) + 'A' + def DOWN(self, n=1): + return CSI + str(n) + 'B' + def FORWARD(self, n=1): + return CSI + str(n) + 'C' + def BACK(self, n=1): + return CSI + str(n) + 'D' + def POS(self, x=1, y=1): + return CSI + str(y) + ';' + str(x) + 'H' + + +class AnsiFore(AnsiCodes): + BLACK = 30 + RED = 31 + GREEN = 32 + YELLOW = 33 + BLUE = 34 + MAGENTA = 35 + CYAN = 36 + WHITE = 37 + RESET = 39 + + # These are fairly well supported, but not part of the standard. + LIGHTBLACK_EX = 90 + LIGHTRED_EX = 91 + LIGHTGREEN_EX = 92 + LIGHTYELLOW_EX = 93 + LIGHTBLUE_EX = 94 + LIGHTMAGENTA_EX = 95 + LIGHTCYAN_EX = 96 + LIGHTWHITE_EX = 97 + + +class AnsiBack(AnsiCodes): + BLACK = 40 + RED = 41 + GREEN = 42 + YELLOW = 43 + BLUE = 44 + MAGENTA = 45 + CYAN = 46 + WHITE = 47 + RESET = 49 + + # These are fairly well supported, but not part of the standard. + LIGHTBLACK_EX = 100 + LIGHTRED_EX = 101 + LIGHTGREEN_EX = 102 + LIGHTYELLOW_EX = 103 + LIGHTBLUE_EX = 104 + LIGHTMAGENTA_EX = 105 + LIGHTCYAN_EX = 106 + LIGHTWHITE_EX = 107 + + +class AnsiStyle(AnsiCodes): + BRIGHT = 1 + DIM = 2 + NORMAL = 22 + RESET_ALL = 0 + +Fore = AnsiFore() +Back = AnsiBack() +Style = AnsiStyle() +Cursor = AnsiCursor() diff --git a/my_env/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py b/my_env/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py new file mode 100644 index 000000000..359c92be5 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py @@ -0,0 +1,257 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import re +import sys +import os + +from .ansi import AnsiFore, AnsiBack, AnsiStyle, Style +from .winterm import WinTerm, WinColor, WinStyle +from .win32 import windll, winapi_test + + +winterm = None +if windll is not None: + winterm = WinTerm() + + +class StreamWrapper(object): + ''' + Wraps a stream (such as stdout), acting as a transparent proxy for all + attribute access apart from method 'write()', which is delegated to our + Converter instance. + ''' + def __init__(self, wrapped, converter): + # double-underscore everything to prevent clashes with names of + # attributes on the wrapped stream object. + self.__wrapped = wrapped + self.__convertor = converter + + def __getattr__(self, name): + return getattr(self.__wrapped, name) + + def __enter__(self, *args, **kwargs): + # special method lookup bypasses __getattr__/__getattribute__, see + # https://stackoverflow.com/questions/12632894/why-doesnt-getattr-work-with-exit + # thus, contextlib magic methods are not proxied via __getattr__ + return self.__wrapped.__enter__(*args, **kwargs) + + def __exit__(self, *args, **kwargs): + return self.__wrapped.__exit__(*args, **kwargs) + + def write(self, text): + self.__convertor.write(text) + + def isatty(self): + stream = self.__wrapped + if 'PYCHARM_HOSTED' in os.environ: + if stream is not None and (stream is sys.__stdout__ or stream is sys.__stderr__): + return True + try: + stream_isatty = stream.isatty + except AttributeError: + return False + else: + return stream_isatty() + + @property + def closed(self): + stream = self.__wrapped + try: + return stream.closed + except AttributeError: + return True + + +class AnsiToWin32(object): + ''' + Implements a 'write()' method which, on Windows, will strip ANSI character + sequences from the text, and if outputting to a tty, will convert them into + win32 function calls. + ''' + ANSI_CSI_RE = re.compile('\001?\033\\[((?:\\d|;)*)([a-zA-Z])\002?') # Control Sequence Introducer + ANSI_OSC_RE = re.compile('\001?\033\\]((?:.|;)*?)(\x07)\002?') # Operating System Command + + def __init__(self, wrapped, convert=None, strip=None, autoreset=False): + # The wrapped stream (normally sys.stdout or sys.stderr) + self.wrapped = wrapped + + # should we reset colors to defaults after every .write() + self.autoreset = autoreset + + # create the proxy wrapping our output stream + self.stream = StreamWrapper(wrapped, self) + + on_windows = os.name == 'nt' + # We test if the WinAPI works, because even if we are on Windows + # we may be using a terminal that doesn't support the WinAPI + # (e.g. Cygwin Terminal). In this case it's up to the terminal + # to support the ANSI codes. + conversion_supported = on_windows and winapi_test() + + # should we strip ANSI sequences from our output? + if strip is None: + strip = conversion_supported or (not self.stream.closed and not self.stream.isatty()) + self.strip = strip + + # should we should convert ANSI sequences into win32 calls? + if convert is None: + convert = conversion_supported and not self.stream.closed and self.stream.isatty() + self.convert = convert + + # dict of ansi codes to win32 functions and parameters + self.win32_calls = self.get_win32_calls() + + # are we wrapping stderr? + self.on_stderr = self.wrapped is sys.stderr + + def should_wrap(self): + ''' + True if this class is actually needed. If false, then the output + stream will not be affected, nor will win32 calls be issued, so + wrapping stdout is not actually required. This will generally be + False on non-Windows platforms, unless optional functionality like + autoreset has been requested using kwargs to init() + ''' + return self.convert or self.strip or self.autoreset + + def get_win32_calls(self): + if self.convert and winterm: + return { + AnsiStyle.RESET_ALL: (winterm.reset_all, ), + AnsiStyle.BRIGHT: (winterm.style, WinStyle.BRIGHT), + AnsiStyle.DIM: (winterm.style, WinStyle.NORMAL), + AnsiStyle.NORMAL: (winterm.style, WinStyle.NORMAL), + AnsiFore.BLACK: (winterm.fore, WinColor.BLACK), + AnsiFore.RED: (winterm.fore, WinColor.RED), + AnsiFore.GREEN: (winterm.fore, WinColor.GREEN), + AnsiFore.YELLOW: (winterm.fore, WinColor.YELLOW), + AnsiFore.BLUE: (winterm.fore, WinColor.BLUE), + AnsiFore.MAGENTA: (winterm.fore, WinColor.MAGENTA), + AnsiFore.CYAN: (winterm.fore, WinColor.CYAN), + AnsiFore.WHITE: (winterm.fore, WinColor.GREY), + AnsiFore.RESET: (winterm.fore, ), + AnsiFore.LIGHTBLACK_EX: (winterm.fore, WinColor.BLACK, True), + AnsiFore.LIGHTRED_EX: (winterm.fore, WinColor.RED, True), + AnsiFore.LIGHTGREEN_EX: (winterm.fore, WinColor.GREEN, True), + AnsiFore.LIGHTYELLOW_EX: (winterm.fore, WinColor.YELLOW, True), + AnsiFore.LIGHTBLUE_EX: (winterm.fore, WinColor.BLUE, True), + AnsiFore.LIGHTMAGENTA_EX: (winterm.fore, WinColor.MAGENTA, True), + AnsiFore.LIGHTCYAN_EX: (winterm.fore, WinColor.CYAN, True), + AnsiFore.LIGHTWHITE_EX: (winterm.fore, WinColor.GREY, True), + AnsiBack.BLACK: (winterm.back, WinColor.BLACK), + AnsiBack.RED: (winterm.back, WinColor.RED), + AnsiBack.GREEN: (winterm.back, WinColor.GREEN), + AnsiBack.YELLOW: (winterm.back, WinColor.YELLOW), + AnsiBack.BLUE: (winterm.back, WinColor.BLUE), + AnsiBack.MAGENTA: (winterm.back, WinColor.MAGENTA), + AnsiBack.CYAN: (winterm.back, WinColor.CYAN), + AnsiBack.WHITE: (winterm.back, WinColor.GREY), + AnsiBack.RESET: (winterm.back, ), + AnsiBack.LIGHTBLACK_EX: (winterm.back, WinColor.BLACK, True), + AnsiBack.LIGHTRED_EX: (winterm.back, WinColor.RED, True), + AnsiBack.LIGHTGREEN_EX: (winterm.back, WinColor.GREEN, True), + AnsiBack.LIGHTYELLOW_EX: (winterm.back, WinColor.YELLOW, True), + AnsiBack.LIGHTBLUE_EX: (winterm.back, WinColor.BLUE, True), + AnsiBack.LIGHTMAGENTA_EX: (winterm.back, WinColor.MAGENTA, True), + AnsiBack.LIGHTCYAN_EX: (winterm.back, WinColor.CYAN, True), + AnsiBack.LIGHTWHITE_EX: (winterm.back, WinColor.GREY, True), + } + return dict() + + def write(self, text): + if self.strip or self.convert: + self.write_and_convert(text) + else: + self.wrapped.write(text) + self.wrapped.flush() + if self.autoreset: + self.reset_all() + + + def reset_all(self): + if self.convert: + self.call_win32('m', (0,)) + elif not self.strip and not self.stream.closed: + self.wrapped.write(Style.RESET_ALL) + + + def write_and_convert(self, text): + ''' + Write the given text to our wrapped stream, stripping any ANSI + sequences from the text, and optionally converting them into win32 + calls. + ''' + cursor = 0 + text = self.convert_osc(text) + for match in self.ANSI_CSI_RE.finditer(text): + start, end = match.span() + self.write_plain_text(text, cursor, start) + self.convert_ansi(*match.groups()) + cursor = end + self.write_plain_text(text, cursor, len(text)) + + + def write_plain_text(self, text, start, end): + if start < end: + self.wrapped.write(text[start:end]) + self.wrapped.flush() + + + def convert_ansi(self, paramstring, command): + if self.convert: + params = self.extract_params(command, paramstring) + self.call_win32(command, params) + + + def extract_params(self, command, paramstring): + if command in 'Hf': + params = tuple(int(p) if len(p) != 0 else 1 for p in paramstring.split(';')) + while len(params) < 2: + # defaults: + params = params + (1,) + else: + params = tuple(int(p) for p in paramstring.split(';') if len(p) != 0) + if len(params) == 0: + # defaults: + if command in 'JKm': + params = (0,) + elif command in 'ABCD': + params = (1,) + + return params + + + def call_win32(self, command, params): + if command == 'm': + for param in params: + if param in self.win32_calls: + func_args = self.win32_calls[param] + func = func_args[0] + args = func_args[1:] + kwargs = dict(on_stderr=self.on_stderr) + func(*args, **kwargs) + elif command in 'J': + winterm.erase_screen(params[0], on_stderr=self.on_stderr) + elif command in 'K': + winterm.erase_line(params[0], on_stderr=self.on_stderr) + elif command in 'Hf': # cursor position - absolute + winterm.set_cursor_position(params, on_stderr=self.on_stderr) + elif command in 'ABCD': # cursor position - relative + n = params[0] + # A - up, B - down, C - forward, D - back + x, y = {'A': (0, -n), 'B': (0, n), 'C': (n, 0), 'D': (-n, 0)}[command] + winterm.cursor_adjust(x, y, on_stderr=self.on_stderr) + + + def convert_osc(self, text): + for match in self.ANSI_OSC_RE.finditer(text): + start, end = match.span() + text = text[:start] + text[end:] + paramstring, command = match.groups() + if command in '\x07': # \x07 = BEL + params = paramstring.split(";") + # 0 - change title and icon (we will only change title) + # 1 - change icon (we don't support this) + # 2 - change title + if params[0] in '02': + winterm.set_title(params[1]) + return text diff --git a/my_env/Lib/site-packages/pip/_vendor/colorama/initialise.py b/my_env/Lib/site-packages/pip/_vendor/colorama/initialise.py new file mode 100644 index 000000000..430d06687 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/colorama/initialise.py @@ -0,0 +1,80 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import atexit +import contextlib +import sys + +from .ansitowin32 import AnsiToWin32 + + +orig_stdout = None +orig_stderr = None + +wrapped_stdout = None +wrapped_stderr = None + +atexit_done = False + + +def reset_all(): + if AnsiToWin32 is not None: # Issue #74: objects might become None at exit + AnsiToWin32(orig_stdout).reset_all() + + +def init(autoreset=False, convert=None, strip=None, wrap=True): + + if not wrap and any([autoreset, convert, strip]): + raise ValueError('wrap=False conflicts with any other arg=True') + + global wrapped_stdout, wrapped_stderr + global orig_stdout, orig_stderr + + orig_stdout = sys.stdout + orig_stderr = sys.stderr + + if sys.stdout is None: + wrapped_stdout = None + else: + sys.stdout = wrapped_stdout = \ + wrap_stream(orig_stdout, convert, strip, autoreset, wrap) + if sys.stderr is None: + wrapped_stderr = None + else: + sys.stderr = wrapped_stderr = \ + wrap_stream(orig_stderr, convert, strip, autoreset, wrap) + + global atexit_done + if not atexit_done: + atexit.register(reset_all) + atexit_done = True + + +def deinit(): + if orig_stdout is not None: + sys.stdout = orig_stdout + if orig_stderr is not None: + sys.stderr = orig_stderr + + +@contextlib.contextmanager +def colorama_text(*args, **kwargs): + init(*args, **kwargs) + try: + yield + finally: + deinit() + + +def reinit(): + if wrapped_stdout is not None: + sys.stdout = wrapped_stdout + if wrapped_stderr is not None: + sys.stderr = wrapped_stderr + + +def wrap_stream(stream, convert, strip, autoreset, wrap): + if wrap: + wrapper = AnsiToWin32(stream, + convert=convert, strip=strip, autoreset=autoreset) + if wrapper.should_wrap(): + stream = wrapper.stream + return stream diff --git a/my_env/Lib/site-packages/pip/_vendor/colorama/win32.py b/my_env/Lib/site-packages/pip/_vendor/colorama/win32.py new file mode 100644 index 000000000..c2d836033 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/colorama/win32.py @@ -0,0 +1,152 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. + +# from winbase.h +STDOUT = -11 +STDERR = -12 + +try: + import ctypes + from ctypes import LibraryLoader + windll = LibraryLoader(ctypes.WinDLL) + from ctypes import wintypes +except (AttributeError, ImportError): + windll = None + SetConsoleTextAttribute = lambda *_: None + winapi_test = lambda *_: None +else: + from ctypes import byref, Structure, c_char, POINTER + + COORD = wintypes._COORD + + class CONSOLE_SCREEN_BUFFER_INFO(Structure): + """struct in wincon.h.""" + _fields_ = [ + ("dwSize", COORD), + ("dwCursorPosition", COORD), + ("wAttributes", wintypes.WORD), + ("srWindow", wintypes.SMALL_RECT), + ("dwMaximumWindowSize", COORD), + ] + def __str__(self): + return '(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)' % ( + self.dwSize.Y, self.dwSize.X + , self.dwCursorPosition.Y, self.dwCursorPosition.X + , self.wAttributes + , self.srWindow.Top, self.srWindow.Left, self.srWindow.Bottom, self.srWindow.Right + , self.dwMaximumWindowSize.Y, self.dwMaximumWindowSize.X + ) + + _GetStdHandle = windll.kernel32.GetStdHandle + _GetStdHandle.argtypes = [ + wintypes.DWORD, + ] + _GetStdHandle.restype = wintypes.HANDLE + + _GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo + _GetConsoleScreenBufferInfo.argtypes = [ + wintypes.HANDLE, + POINTER(CONSOLE_SCREEN_BUFFER_INFO), + ] + _GetConsoleScreenBufferInfo.restype = wintypes.BOOL + + _SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute + _SetConsoleTextAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, + ] + _SetConsoleTextAttribute.restype = wintypes.BOOL + + _SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition + _SetConsoleCursorPosition.argtypes = [ + wintypes.HANDLE, + COORD, + ] + _SetConsoleCursorPosition.restype = wintypes.BOOL + + _FillConsoleOutputCharacterA = windll.kernel32.FillConsoleOutputCharacterA + _FillConsoleOutputCharacterA.argtypes = [ + wintypes.HANDLE, + c_char, + wintypes.DWORD, + COORD, + POINTER(wintypes.DWORD), + ] + _FillConsoleOutputCharacterA.restype = wintypes.BOOL + + _FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute + _FillConsoleOutputAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, + wintypes.DWORD, + COORD, + POINTER(wintypes.DWORD), + ] + _FillConsoleOutputAttribute.restype = wintypes.BOOL + + _SetConsoleTitleW = windll.kernel32.SetConsoleTitleW + _SetConsoleTitleW.argtypes = [ + wintypes.LPCWSTR + ] + _SetConsoleTitleW.restype = wintypes.BOOL + + def _winapi_test(handle): + csbi = CONSOLE_SCREEN_BUFFER_INFO() + success = _GetConsoleScreenBufferInfo( + handle, byref(csbi)) + return bool(success) + + def winapi_test(): + return any(_winapi_test(h) for h in + (_GetStdHandle(STDOUT), _GetStdHandle(STDERR))) + + def GetConsoleScreenBufferInfo(stream_id=STDOUT): + handle = _GetStdHandle(stream_id) + csbi = CONSOLE_SCREEN_BUFFER_INFO() + success = _GetConsoleScreenBufferInfo( + handle, byref(csbi)) + return csbi + + def SetConsoleTextAttribute(stream_id, attrs): + handle = _GetStdHandle(stream_id) + return _SetConsoleTextAttribute(handle, attrs) + + def SetConsoleCursorPosition(stream_id, position, adjust=True): + position = COORD(*position) + # If the position is out of range, do nothing. + if position.Y <= 0 or position.X <= 0: + return + # Adjust for Windows' SetConsoleCursorPosition: + # 1. being 0-based, while ANSI is 1-based. + # 2. expecting (x,y), while ANSI uses (y,x). + adjusted_position = COORD(position.Y - 1, position.X - 1) + if adjust: + # Adjust for viewport's scroll position + sr = GetConsoleScreenBufferInfo(STDOUT).srWindow + adjusted_position.Y += sr.Top + adjusted_position.X += sr.Left + # Resume normal processing + handle = _GetStdHandle(stream_id) + return _SetConsoleCursorPosition(handle, adjusted_position) + + def FillConsoleOutputCharacter(stream_id, char, length, start): + handle = _GetStdHandle(stream_id) + char = c_char(char.encode()) + length = wintypes.DWORD(length) + num_written = wintypes.DWORD(0) + # Note that this is hard-coded for ANSI (vs wide) bytes. + success = _FillConsoleOutputCharacterA( + handle, char, length, start, byref(num_written)) + return num_written.value + + def FillConsoleOutputAttribute(stream_id, attr, length, start): + ''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )''' + handle = _GetStdHandle(stream_id) + attribute = wintypes.WORD(attr) + length = wintypes.DWORD(length) + num_written = wintypes.DWORD(0) + # Note that this is hard-coded for ANSI (vs wide) bytes. + return _FillConsoleOutputAttribute( + handle, attribute, length, start, byref(num_written)) + + def SetConsoleTitle(title): + return _SetConsoleTitleW(title) diff --git a/my_env/Lib/site-packages/pip/_vendor/colorama/winterm.py b/my_env/Lib/site-packages/pip/_vendor/colorama/winterm.py new file mode 100644 index 000000000..0fdb4ec4e --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/colorama/winterm.py @@ -0,0 +1,169 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from . import win32 + + +# from wincon.h +class WinColor(object): + BLACK = 0 + BLUE = 1 + GREEN = 2 + CYAN = 3 + RED = 4 + MAGENTA = 5 + YELLOW = 6 + GREY = 7 + +# from wincon.h +class WinStyle(object): + NORMAL = 0x00 # dim text, dim background + BRIGHT = 0x08 # bright text, dim background + BRIGHT_BACKGROUND = 0x80 # dim text, bright background + +class WinTerm(object): + + def __init__(self): + self._default = win32.GetConsoleScreenBufferInfo(win32.STDOUT).wAttributes + self.set_attrs(self._default) + self._default_fore = self._fore + self._default_back = self._back + self._default_style = self._style + # In order to emulate LIGHT_EX in windows, we borrow the BRIGHT style. + # So that LIGHT_EX colors and BRIGHT style do not clobber each other, + # we track them separately, since LIGHT_EX is overwritten by Fore/Back + # and BRIGHT is overwritten by Style codes. + self._light = 0 + + def get_attrs(self): + return self._fore + self._back * 16 + (self._style | self._light) + + def set_attrs(self, value): + self._fore = value & 7 + self._back = (value >> 4) & 7 + self._style = value & (WinStyle.BRIGHT | WinStyle.BRIGHT_BACKGROUND) + + def reset_all(self, on_stderr=None): + self.set_attrs(self._default) + self.set_console(attrs=self._default) + self._light = 0 + + def fore(self, fore=None, light=False, on_stderr=False): + if fore is None: + fore = self._default_fore + self._fore = fore + # Emulate LIGHT_EX with BRIGHT Style + if light: + self._light |= WinStyle.BRIGHT + else: + self._light &= ~WinStyle.BRIGHT + self.set_console(on_stderr=on_stderr) + + def back(self, back=None, light=False, on_stderr=False): + if back is None: + back = self._default_back + self._back = back + # Emulate LIGHT_EX with BRIGHT_BACKGROUND Style + if light: + self._light |= WinStyle.BRIGHT_BACKGROUND + else: + self._light &= ~WinStyle.BRIGHT_BACKGROUND + self.set_console(on_stderr=on_stderr) + + def style(self, style=None, on_stderr=False): + if style is None: + style = self._default_style + self._style = style + self.set_console(on_stderr=on_stderr) + + def set_console(self, attrs=None, on_stderr=False): + if attrs is None: + attrs = self.get_attrs() + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleTextAttribute(handle, attrs) + + def get_position(self, handle): + position = win32.GetConsoleScreenBufferInfo(handle).dwCursorPosition + # Because Windows coordinates are 0-based, + # and win32.SetConsoleCursorPosition expects 1-based. + position.X += 1 + position.Y += 1 + return position + + def set_cursor_position(self, position=None, on_stderr=False): + if position is None: + # I'm not currently tracking the position, so there is no default. + # position = self.get_position() + return + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleCursorPosition(handle, position) + + def cursor_adjust(self, x, y, on_stderr=False): + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + position = self.get_position(handle) + adjusted_position = (position.Y + y, position.X + x) + win32.SetConsoleCursorPosition(handle, adjusted_position, adjust=False) + + def erase_screen(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the screen. + # 1 should clear from the cursor to the beginning of the screen. + # 2 should clear the entire screen, and move cursor to (1,1) + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + # get the number of character cells in the current buffer + cells_in_screen = csbi.dwSize.X * csbi.dwSize.Y + # get number of character cells before current cursor position + cells_before_cursor = csbi.dwSize.X * csbi.dwCursorPosition.Y + csbi.dwCursorPosition.X + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = cells_in_screen - cells_before_cursor + elif mode == 1: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_before_cursor + elif mode == 2: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_in_screen + else: + # invalid mode + return + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + if mode == 2: + # put the cursor where needed + win32.SetConsoleCursorPosition(handle, (1, 1)) + + def erase_line(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the line. + # 1 should clear from the cursor to the beginning of the line. + # 2 should clear the entire line. + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = csbi.dwSize.X - csbi.dwCursorPosition.X + elif mode == 1: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwCursorPosition.X + elif mode == 2: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwSize.X + else: + # invalid mode + return + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + + def set_title(self, title): + win32.SetConsoleTitle(title) diff --git a/my_env/Lib/site-packages/pip/_vendor/contextlib2.py b/my_env/Lib/site-packages/pip/_vendor/contextlib2.py new file mode 100644 index 000000000..3aae8f411 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/contextlib2.py @@ -0,0 +1,518 @@ +"""contextlib2 - backports and enhancements to the contextlib module""" + +import abc +import sys +import warnings +from collections import deque +from functools import wraps + +__all__ = ["contextmanager", "closing", "nullcontext", + "AbstractContextManager", + "ContextDecorator", "ExitStack", + "redirect_stdout", "redirect_stderr", "suppress"] + +# Backwards compatibility +__all__ += ["ContextStack"] + + +# Backport abc.ABC +if sys.version_info[:2] >= (3, 4): + _abc_ABC = abc.ABC +else: + _abc_ABC = abc.ABCMeta('ABC', (object,), {'__slots__': ()}) + + +# Backport classic class MRO +def _classic_mro(C, result): + if C in result: + return + result.append(C) + for B in C.__bases__: + _classic_mro(B, result) + return result + + +# Backport _collections_abc._check_methods +def _check_methods(C, *methods): + try: + mro = C.__mro__ + except AttributeError: + mro = tuple(_classic_mro(C, [])) + + for method in methods: + for B in mro: + if method in B.__dict__: + if B.__dict__[method] is None: + return NotImplemented + break + else: + return NotImplemented + return True + + +class AbstractContextManager(_abc_ABC): + """An abstract base class for context managers.""" + + def __enter__(self): + """Return `self` upon entering the runtime context.""" + return self + + @abc.abstractmethod + def __exit__(self, exc_type, exc_value, traceback): + """Raise any exception triggered within the runtime context.""" + return None + + @classmethod + def __subclasshook__(cls, C): + """Check whether subclass is considered a subclass of this ABC.""" + if cls is AbstractContextManager: + return _check_methods(C, "__enter__", "__exit__") + return NotImplemented + + +class ContextDecorator(object): + """A base class or mixin that enables context managers to work as decorators.""" + + def refresh_cm(self): + """Returns the context manager used to actually wrap the call to the + decorated function. + + The default implementation just returns *self*. + + Overriding this method allows otherwise one-shot context managers + like _GeneratorContextManager to support use as decorators via + implicit recreation. + + DEPRECATED: refresh_cm was never added to the standard library's + ContextDecorator API + """ + warnings.warn("refresh_cm was never added to the standard library", + DeprecationWarning) + return self._recreate_cm() + + def _recreate_cm(self): + """Return a recreated instance of self. + + Allows an otherwise one-shot context manager like + _GeneratorContextManager to support use as + a decorator via implicit recreation. + + This is a private interface just for _GeneratorContextManager. + See issue #11647 for details. + """ + return self + + def __call__(self, func): + @wraps(func) + def inner(*args, **kwds): + with self._recreate_cm(): + return func(*args, **kwds) + return inner + + +class _GeneratorContextManager(ContextDecorator): + """Helper for @contextmanager decorator.""" + + def __init__(self, func, args, kwds): + self.gen = func(*args, **kwds) + self.func, self.args, self.kwds = func, args, kwds + # Issue 19330: ensure context manager instances have good docstrings + doc = getattr(func, "__doc__", None) + if doc is None: + doc = type(self).__doc__ + self.__doc__ = doc + # Unfortunately, this still doesn't provide good help output when + # inspecting the created context manager instances, since pydoc + # currently bypasses the instance docstring and shows the docstring + # for the class instead. + # See http://bugs.python.org/issue19404 for more details. + + def _recreate_cm(self): + # _GCM instances are one-shot context managers, so the + # CM must be recreated each time a decorated function is + # called + return self.__class__(self.func, self.args, self.kwds) + + def __enter__(self): + try: + return next(self.gen) + except StopIteration: + raise RuntimeError("generator didn't yield") + + def __exit__(self, type, value, traceback): + if type is None: + try: + next(self.gen) + except StopIteration: + return + else: + raise RuntimeError("generator didn't stop") + else: + if value is None: + # Need to force instantiation so we can reliably + # tell if we get the same exception back + value = type() + try: + self.gen.throw(type, value, traceback) + raise RuntimeError("generator didn't stop after throw()") + except StopIteration as exc: + # Suppress StopIteration *unless* it's the same exception that + # was passed to throw(). This prevents a StopIteration + # raised inside the "with" statement from being suppressed. + return exc is not value + except RuntimeError as exc: + # Don't re-raise the passed in exception + if exc is value: + return False + # Likewise, avoid suppressing if a StopIteration exception + # was passed to throw() and later wrapped into a RuntimeError + # (see PEP 479). + if _HAVE_EXCEPTION_CHAINING and exc.__cause__ is value: + return False + raise + except: + # only re-raise if it's *not* the exception that was + # passed to throw(), because __exit__() must not raise + # an exception unless __exit__() itself failed. But throw() + # has to raise the exception to signal propagation, so this + # fixes the impedance mismatch between the throw() protocol + # and the __exit__() protocol. + # + if sys.exc_info()[1] is not value: + raise + + +def contextmanager(func): + """@contextmanager decorator. + + Typical usage: + + @contextmanager + def some_generator(): + + try: + yield + finally: + + + This makes this: + + with some_generator() as : + + + equivalent to this: + + + try: + = + + finally: + + + """ + @wraps(func) + def helper(*args, **kwds): + return _GeneratorContextManager(func, args, kwds) + return helper + + +class closing(object): + """Context to automatically close something at the end of a block. + + Code like this: + + with closing(.open()) as f: + + + is equivalent to this: + + f = .open() + try: + + finally: + f.close() + + """ + def __init__(self, thing): + self.thing = thing + + def __enter__(self): + return self.thing + + def __exit__(self, *exc_info): + self.thing.close() + + +class _RedirectStream(object): + + _stream = None + + def __init__(self, new_target): + self._new_target = new_target + # We use a list of old targets to make this CM re-entrant + self._old_targets = [] + + def __enter__(self): + self._old_targets.append(getattr(sys, self._stream)) + setattr(sys, self._stream, self._new_target) + return self._new_target + + def __exit__(self, exctype, excinst, exctb): + setattr(sys, self._stream, self._old_targets.pop()) + + +class redirect_stdout(_RedirectStream): + """Context manager for temporarily redirecting stdout to another file. + + # How to send help() to stderr + with redirect_stdout(sys.stderr): + help(dir) + + # How to write help() to a file + with open('help.txt', 'w') as f: + with redirect_stdout(f): + help(pow) + """ + + _stream = "stdout" + + +class redirect_stderr(_RedirectStream): + """Context manager for temporarily redirecting stderr to another file.""" + + _stream = "stderr" + + +class suppress(object): + """Context manager to suppress specified exceptions + + After the exception is suppressed, execution proceeds with the next + statement following the with statement. + + with suppress(FileNotFoundError): + os.remove(somefile) + # Execution still resumes here if the file was already removed + """ + + def __init__(self, *exceptions): + self._exceptions = exceptions + + def __enter__(self): + pass + + def __exit__(self, exctype, excinst, exctb): + # Unlike isinstance and issubclass, CPython exception handling + # currently only looks at the concrete type hierarchy (ignoring + # the instance and subclass checking hooks). While Guido considers + # that a bug rather than a feature, it's a fairly hard one to fix + # due to various internal implementation details. suppress provides + # the simpler issubclass based semantics, rather than trying to + # exactly reproduce the limitations of the CPython interpreter. + # + # See http://bugs.python.org/issue12029 for more details + return exctype is not None and issubclass(exctype, self._exceptions) + + +# Context manipulation is Python 3 only +_HAVE_EXCEPTION_CHAINING = sys.version_info[0] >= 3 +if _HAVE_EXCEPTION_CHAINING: + def _make_context_fixer(frame_exc): + def _fix_exception_context(new_exc, old_exc): + # Context may not be correct, so find the end of the chain + while 1: + exc_context = new_exc.__context__ + if exc_context is old_exc: + # Context is already set correctly (see issue 20317) + return + if exc_context is None or exc_context is frame_exc: + break + new_exc = exc_context + # Change the end of the chain to point to the exception + # we expect it to reference + new_exc.__context__ = old_exc + return _fix_exception_context + + def _reraise_with_existing_context(exc_details): + try: + # bare "raise exc_details[1]" replaces our carefully + # set-up context + fixed_ctx = exc_details[1].__context__ + raise exc_details[1] + except BaseException: + exc_details[1].__context__ = fixed_ctx + raise +else: + # No exception context in Python 2 + def _make_context_fixer(frame_exc): + return lambda new_exc, old_exc: None + + # Use 3 argument raise in Python 2, + # but use exec to avoid SyntaxError in Python 3 + def _reraise_with_existing_context(exc_details): + exc_type, exc_value, exc_tb = exc_details + exec("raise exc_type, exc_value, exc_tb") + +# Handle old-style classes if they exist +try: + from types import InstanceType +except ImportError: + # Python 3 doesn't have old-style classes + _get_type = type +else: + # Need to handle old-style context managers on Python 2 + def _get_type(obj): + obj_type = type(obj) + if obj_type is InstanceType: + return obj.__class__ # Old-style class + return obj_type # New-style class + + +# Inspired by discussions on http://bugs.python.org/issue13585 +class ExitStack(object): + """Context manager for dynamic management of a stack of exit callbacks + + For example: + + with ExitStack() as stack: + files = [stack.enter_context(open(fname)) for fname in filenames] + # All opened files will automatically be closed at the end of + # the with statement, even if attempts to open files later + # in the list raise an exception + + """ + def __init__(self): + self._exit_callbacks = deque() + + def pop_all(self): + """Preserve the context stack by transferring it to a new instance""" + new_stack = type(self)() + new_stack._exit_callbacks = self._exit_callbacks + self._exit_callbacks = deque() + return new_stack + + def _push_cm_exit(self, cm, cm_exit): + """Helper to correctly register callbacks to __exit__ methods""" + def _exit_wrapper(*exc_details): + return cm_exit(cm, *exc_details) + _exit_wrapper.__self__ = cm + self.push(_exit_wrapper) + + def push(self, exit): + """Registers a callback with the standard __exit__ method signature + + Can suppress exceptions the same way __exit__ methods can. + + Also accepts any object with an __exit__ method (registering a call + to the method instead of the object itself) + """ + # We use an unbound method rather than a bound method to follow + # the standard lookup behaviour for special methods + _cb_type = _get_type(exit) + try: + exit_method = _cb_type.__exit__ + except AttributeError: + # Not a context manager, so assume its a callable + self._exit_callbacks.append(exit) + else: + self._push_cm_exit(exit, exit_method) + return exit # Allow use as a decorator + + def callback(self, callback, *args, **kwds): + """Registers an arbitrary callback and arguments. + + Cannot suppress exceptions. + """ + def _exit_wrapper(exc_type, exc, tb): + callback(*args, **kwds) + # We changed the signature, so using @wraps is not appropriate, but + # setting __wrapped__ may still help with introspection + _exit_wrapper.__wrapped__ = callback + self.push(_exit_wrapper) + return callback # Allow use as a decorator + + def enter_context(self, cm): + """Enters the supplied context manager + + If successful, also pushes its __exit__ method as a callback and + returns the result of the __enter__ method. + """ + # We look up the special methods on the type to match the with statement + _cm_type = _get_type(cm) + _exit = _cm_type.__exit__ + result = _cm_type.__enter__(cm) + self._push_cm_exit(cm, _exit) + return result + + def close(self): + """Immediately unwind the context stack""" + self.__exit__(None, None, None) + + def __enter__(self): + return self + + def __exit__(self, *exc_details): + received_exc = exc_details[0] is not None + + # We manipulate the exception state so it behaves as though + # we were actually nesting multiple with statements + frame_exc = sys.exc_info()[1] + _fix_exception_context = _make_context_fixer(frame_exc) + + # Callbacks are invoked in LIFO order to match the behaviour of + # nested context managers + suppressed_exc = False + pending_raise = False + while self._exit_callbacks: + cb = self._exit_callbacks.pop() + try: + if cb(*exc_details): + suppressed_exc = True + pending_raise = False + exc_details = (None, None, None) + except: + new_exc_details = sys.exc_info() + # simulate the stack of exceptions by setting the context + _fix_exception_context(new_exc_details[1], exc_details[1]) + pending_raise = True + exc_details = new_exc_details + if pending_raise: + _reraise_with_existing_context(exc_details) + return received_exc and suppressed_exc + + +# Preserve backwards compatibility +class ContextStack(ExitStack): + """Backwards compatibility alias for ExitStack""" + + def __init__(self): + warnings.warn("ContextStack has been renamed to ExitStack", + DeprecationWarning) + super(ContextStack, self).__init__() + + def register_exit(self, callback): + return self.push(callback) + + def register(self, callback, *args, **kwds): + return self.callback(callback, *args, **kwds) + + def preserve(self): + return self.pop_all() + + +class nullcontext(AbstractContextManager): + """Context manager that does no additional processing. + Used as a stand-in for a normal context manager, when a particular + block of code is only sometimes used with a normal context manager: + cm = optional_cm if condition else nullcontext() + with cm: + # Perform operation, using optional_cm if condition is True + """ + + def __init__(self, enter_result=None): + self.enter_result = enter_result + + def __enter__(self): + return self.enter_result + + def __exit__(self, *excinfo): + pass diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__init__.py b/my_env/Lib/site-packages/pip/_vendor/distlib/__init__.py new file mode 100644 index 000000000..a2d70d475 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2019 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import logging + +__version__ = '0.2.9.post0' + +class DistlibException(Exception): + pass + +try: + from logging import NullHandler +except ImportError: # pragma: no cover + class NullHandler(logging.Handler): + def handle(self, record): pass + def emit(self, record): pass + def createLock(self): self.lock = None + +logger = logging.getLogger(__name__) +logger.addHandler(NullHandler()) diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..34d89ee2c Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-37.pyc new file mode 100644 index 000000000..359208409 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-37.pyc new file mode 100644 index 000000000..7aaf65f08 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-37.pyc new file mode 100644 index 000000000..eb2679942 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-37.pyc new file mode 100644 index 000000000..4022ed6ea Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-37.pyc new file mode 100644 index 000000000..9131a283a Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-37.pyc new file mode 100644 index 000000000..c62264bd5 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-37.pyc new file mode 100644 index 000000000..0487a10c5 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-37.pyc new file mode 100644 index 000000000..c45f948ee Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-37.pyc new file mode 100644 index 000000000..54b956293 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-37.pyc new file mode 100644 index 000000000..043e64127 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-37.pyc new file mode 100644 index 000000000..937ec3bd3 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-37.pyc new file mode 100644 index 000000000..7d406bd0e Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py new file mode 100644 index 000000000..f7dbf4c9a --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py @@ -0,0 +1,6 @@ +"""Modules copied from Python 3 standard libraries, for internal use only. + +Individual classes and functions are found in d2._backport.misc. Intended +usage is to always import things missing from 3.1 from that module: the +built-in/stdlib objects will be used if found. +""" diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..7a526d221 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/misc.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/misc.cpython-37.pyc new file mode 100644 index 000000000..8d293c982 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/misc.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-37.pyc new file mode 100644 index 000000000..1b265e154 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-37.pyc new file mode 100644 index 000000000..309bebe03 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-37.pyc new file mode 100644 index 000000000..395d92b9a Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py new file mode 100644 index 000000000..cfb318d34 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Backports for individual classes and functions.""" + +import os +import sys + +__all__ = ['cache_from_source', 'callable', 'fsencode'] + + +try: + from imp import cache_from_source +except ImportError: + def cache_from_source(py_file, debug=__debug__): + ext = debug and 'c' or 'o' + return py_file + ext + + +try: + callable = callable +except NameError: + from collections import Callable + + def callable(obj): + return isinstance(obj, Callable) + + +try: + fsencode = os.fsencode +except AttributeError: + def fsencode(filename): + if isinstance(filename, bytes): + return filename + elif isinstance(filename, str): + return filename.encode(sys.getfilesystemencoding()) + else: + raise TypeError("expect bytes or str, not %s" % + type(filename).__name__) diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py new file mode 100644 index 000000000..159e49ee8 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py @@ -0,0 +1,761 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Utility functions for copying and archiving files and directory trees. + +XXX The functions here don't copy the resource fork or other metadata on Mac. + +""" + +import os +import sys +import stat +from os.path import abspath +import fnmatch +import collections +import errno +from . import tarfile + +try: + import bz2 + _BZ2_SUPPORTED = True +except ImportError: + _BZ2_SUPPORTED = False + +try: + from pwd import getpwnam +except ImportError: + getpwnam = None + +try: + from grp import getgrnam +except ImportError: + getgrnam = None + +__all__ = ["copyfileobj", "copyfile", "copymode", "copystat", "copy", "copy2", + "copytree", "move", "rmtree", "Error", "SpecialFileError", + "ExecError", "make_archive", "get_archive_formats", + "register_archive_format", "unregister_archive_format", + "get_unpack_formats", "register_unpack_format", + "unregister_unpack_format", "unpack_archive", "ignore_patterns"] + +class Error(EnvironmentError): + pass + +class SpecialFileError(EnvironmentError): + """Raised when trying to do a kind of operation (e.g. copying) which is + not supported on a special file (e.g. a named pipe)""" + +class ExecError(EnvironmentError): + """Raised when a command could not be executed""" + +class ReadError(EnvironmentError): + """Raised when an archive cannot be read""" + +class RegistryError(Exception): + """Raised when a registry operation with the archiving + and unpacking registries fails""" + + +try: + WindowsError +except NameError: + WindowsError = None + +def copyfileobj(fsrc, fdst, length=16*1024): + """copy data from file-like object fsrc to file-like object fdst""" + while 1: + buf = fsrc.read(length) + if not buf: + break + fdst.write(buf) + +def _samefile(src, dst): + # Macintosh, Unix. + if hasattr(os.path, 'samefile'): + try: + return os.path.samefile(src, dst) + except OSError: + return False + + # All other platforms: check for same pathname. + return (os.path.normcase(os.path.abspath(src)) == + os.path.normcase(os.path.abspath(dst))) + +def copyfile(src, dst): + """Copy data from src to dst""" + if _samefile(src, dst): + raise Error("`%s` and `%s` are the same file" % (src, dst)) + + for fn in [src, dst]: + try: + st = os.stat(fn) + except OSError: + # File most likely does not exist + pass + else: + # XXX What about other special files? (sockets, devices...) + if stat.S_ISFIFO(st.st_mode): + raise SpecialFileError("`%s` is a named pipe" % fn) + + with open(src, 'rb') as fsrc: + with open(dst, 'wb') as fdst: + copyfileobj(fsrc, fdst) + +def copymode(src, dst): + """Copy mode bits from src to dst""" + if hasattr(os, 'chmod'): + st = os.stat(src) + mode = stat.S_IMODE(st.st_mode) + os.chmod(dst, mode) + +def copystat(src, dst): + """Copy all stat info (mode bits, atime, mtime, flags) from src to dst""" + st = os.stat(src) + mode = stat.S_IMODE(st.st_mode) + if hasattr(os, 'utime'): + os.utime(dst, (st.st_atime, st.st_mtime)) + if hasattr(os, 'chmod'): + os.chmod(dst, mode) + if hasattr(os, 'chflags') and hasattr(st, 'st_flags'): + try: + os.chflags(dst, st.st_flags) + except OSError as why: + if (not hasattr(errno, 'EOPNOTSUPP') or + why.errno != errno.EOPNOTSUPP): + raise + +def copy(src, dst): + """Copy data and mode bits ("cp src dst"). + + The destination may be a directory. + + """ + if os.path.isdir(dst): + dst = os.path.join(dst, os.path.basename(src)) + copyfile(src, dst) + copymode(src, dst) + +def copy2(src, dst): + """Copy data and all stat info ("cp -p src dst"). + + The destination may be a directory. + + """ + if os.path.isdir(dst): + dst = os.path.join(dst, os.path.basename(src)) + copyfile(src, dst) + copystat(src, dst) + +def ignore_patterns(*patterns): + """Function that can be used as copytree() ignore parameter. + + Patterns is a sequence of glob-style patterns + that are used to exclude files""" + def _ignore_patterns(path, names): + ignored_names = [] + for pattern in patterns: + ignored_names.extend(fnmatch.filter(names, pattern)) + return set(ignored_names) + return _ignore_patterns + +def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, + ignore_dangling_symlinks=False): + """Recursively copy a directory tree. + + The destination directory must not already exist. + If exception(s) occur, an Error is raised with a list of reasons. + + If the optional symlinks flag is true, symbolic links in the + source tree result in symbolic links in the destination tree; if + it is false, the contents of the files pointed to by symbolic + links are copied. If the file pointed by the symlink doesn't + exist, an exception will be added in the list of errors raised in + an Error exception at the end of the copy process. + + You can set the optional ignore_dangling_symlinks flag to true if you + want to silence this exception. Notice that this has no effect on + platforms that don't support os.symlink. + + The optional ignore argument is a callable. If given, it + is called with the `src` parameter, which is the directory + being visited by copytree(), and `names` which is the list of + `src` contents, as returned by os.listdir(): + + callable(src, names) -> ignored_names + + Since copytree() is called recursively, the callable will be + called once for each directory that is copied. It returns a + list of names relative to the `src` directory that should + not be copied. + + The optional copy_function argument is a callable that will be used + to copy each file. It will be called with the source path and the + destination path as arguments. By default, copy2() is used, but any + function that supports the same signature (like copy()) can be used. + + """ + names = os.listdir(src) + if ignore is not None: + ignored_names = ignore(src, names) + else: + ignored_names = set() + + os.makedirs(dst) + errors = [] + for name in names: + if name in ignored_names: + continue + srcname = os.path.join(src, name) + dstname = os.path.join(dst, name) + try: + if os.path.islink(srcname): + linkto = os.readlink(srcname) + if symlinks: + os.symlink(linkto, dstname) + else: + # ignore dangling symlink if the flag is on + if not os.path.exists(linkto) and ignore_dangling_symlinks: + continue + # otherwise let the copy occurs. copy2 will raise an error + copy_function(srcname, dstname) + elif os.path.isdir(srcname): + copytree(srcname, dstname, symlinks, ignore, copy_function) + else: + # Will raise a SpecialFileError for unsupported file types + copy_function(srcname, dstname) + # catch the Error from the recursive copytree so that we can + # continue with other files + except Error as err: + errors.extend(err.args[0]) + except EnvironmentError as why: + errors.append((srcname, dstname, str(why))) + try: + copystat(src, dst) + except OSError as why: + if WindowsError is not None and isinstance(why, WindowsError): + # Copying file access times may fail on Windows + pass + else: + errors.extend((src, dst, str(why))) + if errors: + raise Error(errors) + +def rmtree(path, ignore_errors=False, onerror=None): + """Recursively delete a directory tree. + + If ignore_errors is set, errors are ignored; otherwise, if onerror + is set, it is called to handle the error with arguments (func, + path, exc_info) where func is os.listdir, os.remove, or os.rmdir; + path is the argument to that function that caused it to fail; and + exc_info is a tuple returned by sys.exc_info(). If ignore_errors + is false and onerror is None, an exception is raised. + + """ + if ignore_errors: + def onerror(*args): + pass + elif onerror is None: + def onerror(*args): + raise + try: + if os.path.islink(path): + # symlinks to directories are forbidden, see bug #1669 + raise OSError("Cannot call rmtree on a symbolic link") + except OSError: + onerror(os.path.islink, path, sys.exc_info()) + # can't continue even if onerror hook returns + return + names = [] + try: + names = os.listdir(path) + except os.error: + onerror(os.listdir, path, sys.exc_info()) + for name in names: + fullname = os.path.join(path, name) + try: + mode = os.lstat(fullname).st_mode + except os.error: + mode = 0 + if stat.S_ISDIR(mode): + rmtree(fullname, ignore_errors, onerror) + else: + try: + os.remove(fullname) + except os.error: + onerror(os.remove, fullname, sys.exc_info()) + try: + os.rmdir(path) + except os.error: + onerror(os.rmdir, path, sys.exc_info()) + + +def _basename(path): + # A basename() variant which first strips the trailing slash, if present. + # Thus we always get the last component of the path, even for directories. + return os.path.basename(path.rstrip(os.path.sep)) + +def move(src, dst): + """Recursively move a file or directory to another location. This is + similar to the Unix "mv" command. + + If the destination is a directory or a symlink to a directory, the source + is moved inside the directory. The destination path must not already + exist. + + If the destination already exists but is not a directory, it may be + overwritten depending on os.rename() semantics. + + If the destination is on our current filesystem, then rename() is used. + Otherwise, src is copied to the destination and then removed. + A lot more could be done here... A look at a mv.c shows a lot of + the issues this implementation glosses over. + + """ + real_dst = dst + if os.path.isdir(dst): + if _samefile(src, dst): + # We might be on a case insensitive filesystem, + # perform the rename anyway. + os.rename(src, dst) + return + + real_dst = os.path.join(dst, _basename(src)) + if os.path.exists(real_dst): + raise Error("Destination path '%s' already exists" % real_dst) + try: + os.rename(src, real_dst) + except OSError: + if os.path.isdir(src): + if _destinsrc(src, dst): + raise Error("Cannot move a directory '%s' into itself '%s'." % (src, dst)) + copytree(src, real_dst, symlinks=True) + rmtree(src) + else: + copy2(src, real_dst) + os.unlink(src) + +def _destinsrc(src, dst): + src = abspath(src) + dst = abspath(dst) + if not src.endswith(os.path.sep): + src += os.path.sep + if not dst.endswith(os.path.sep): + dst += os.path.sep + return dst.startswith(src) + +def _get_gid(name): + """Returns a gid, given a group name.""" + if getgrnam is None or name is None: + return None + try: + result = getgrnam(name) + except KeyError: + result = None + if result is not None: + return result[2] + return None + +def _get_uid(name): + """Returns an uid, given a user name.""" + if getpwnam is None or name is None: + return None + try: + result = getpwnam(name) + except KeyError: + result = None + if result is not None: + return result[2] + return None + +def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, + owner=None, group=None, logger=None): + """Create a (possibly compressed) tar file from all the files under + 'base_dir'. + + 'compress' must be "gzip" (the default), "bzip2", or None. + + 'owner' and 'group' can be used to define an owner and a group for the + archive that is being built. If not provided, the current owner and group + will be used. + + The output tar file will be named 'base_name' + ".tar", possibly plus + the appropriate compression extension (".gz", or ".bz2"). + + Returns the output filename. + """ + tar_compression = {'gzip': 'gz', None: ''} + compress_ext = {'gzip': '.gz'} + + if _BZ2_SUPPORTED: + tar_compression['bzip2'] = 'bz2' + compress_ext['bzip2'] = '.bz2' + + # flags for compression program, each element of list will be an argument + if compress is not None and compress not in compress_ext: + raise ValueError("bad value for 'compress', or compression format not " + "supported : {0}".format(compress)) + + archive_name = base_name + '.tar' + compress_ext.get(compress, '') + archive_dir = os.path.dirname(archive_name) + + if not os.path.exists(archive_dir): + if logger is not None: + logger.info("creating %s", archive_dir) + if not dry_run: + os.makedirs(archive_dir) + + # creating the tarball + if logger is not None: + logger.info('Creating tar archive') + + uid = _get_uid(owner) + gid = _get_gid(group) + + def _set_uid_gid(tarinfo): + if gid is not None: + tarinfo.gid = gid + tarinfo.gname = group + if uid is not None: + tarinfo.uid = uid + tarinfo.uname = owner + return tarinfo + + if not dry_run: + tar = tarfile.open(archive_name, 'w|%s' % tar_compression[compress]) + try: + tar.add(base_dir, filter=_set_uid_gid) + finally: + tar.close() + + return archive_name + +def _call_external_zip(base_dir, zip_filename, verbose=False, dry_run=False): + # XXX see if we want to keep an external call here + if verbose: + zipoptions = "-r" + else: + zipoptions = "-rq" + from distutils.errors import DistutilsExecError + from distutils.spawn import spawn + try: + spawn(["zip", zipoptions, zip_filename, base_dir], dry_run=dry_run) + except DistutilsExecError: + # XXX really should distinguish between "couldn't find + # external 'zip' command" and "zip failed". + raise ExecError("unable to create zip file '%s': " + "could neither import the 'zipfile' module nor " + "find a standalone zip utility") % zip_filename + +def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): + """Create a zip file from all the files under 'base_dir'. + + The output zip file will be named 'base_name' + ".zip". Uses either the + "zipfile" Python module (if available) or the InfoZIP "zip" utility + (if installed and found on the default search path). If neither tool is + available, raises ExecError. Returns the name of the output zip + file. + """ + zip_filename = base_name + ".zip" + archive_dir = os.path.dirname(base_name) + + if not os.path.exists(archive_dir): + if logger is not None: + logger.info("creating %s", archive_dir) + if not dry_run: + os.makedirs(archive_dir) + + # If zipfile module is not available, try spawning an external 'zip' + # command. + try: + import zipfile + except ImportError: + zipfile = None + + if zipfile is None: + _call_external_zip(base_dir, zip_filename, verbose, dry_run) + else: + if logger is not None: + logger.info("creating '%s' and adding '%s' to it", + zip_filename, base_dir) + + if not dry_run: + zip = zipfile.ZipFile(zip_filename, "w", + compression=zipfile.ZIP_DEFLATED) + + for dirpath, dirnames, filenames in os.walk(base_dir): + for name in filenames: + path = os.path.normpath(os.path.join(dirpath, name)) + if os.path.isfile(path): + zip.write(path, path) + if logger is not None: + logger.info("adding '%s'", path) + zip.close() + + return zip_filename + +_ARCHIVE_FORMATS = { + 'gztar': (_make_tarball, [('compress', 'gzip')], "gzip'ed tar-file"), + 'bztar': (_make_tarball, [('compress', 'bzip2')], "bzip2'ed tar-file"), + 'tar': (_make_tarball, [('compress', None)], "uncompressed tar file"), + 'zip': (_make_zipfile, [], "ZIP file"), + } + +if _BZ2_SUPPORTED: + _ARCHIVE_FORMATS['bztar'] = (_make_tarball, [('compress', 'bzip2')], + "bzip2'ed tar-file") + +def get_archive_formats(): + """Returns a list of supported formats for archiving and unarchiving. + + Each element of the returned sequence is a tuple (name, description) + """ + formats = [(name, registry[2]) for name, registry in + _ARCHIVE_FORMATS.items()] + formats.sort() + return formats + +def register_archive_format(name, function, extra_args=None, description=''): + """Registers an archive format. + + name is the name of the format. function is the callable that will be + used to create archives. If provided, extra_args is a sequence of + (name, value) tuples that will be passed as arguments to the callable. + description can be provided to describe the format, and will be returned + by the get_archive_formats() function. + """ + if extra_args is None: + extra_args = [] + if not isinstance(function, collections.Callable): + raise TypeError('The %s object is not callable' % function) + if not isinstance(extra_args, (tuple, list)): + raise TypeError('extra_args needs to be a sequence') + for element in extra_args: + if not isinstance(element, (tuple, list)) or len(element) !=2: + raise TypeError('extra_args elements are : (arg_name, value)') + + _ARCHIVE_FORMATS[name] = (function, extra_args, description) + +def unregister_archive_format(name): + del _ARCHIVE_FORMATS[name] + +def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, + dry_run=0, owner=None, group=None, logger=None): + """Create an archive file (eg. zip or tar). + + 'base_name' is the name of the file to create, minus any format-specific + extension; 'format' is the archive format: one of "zip", "tar", "bztar" + or "gztar". + + 'root_dir' is a directory that will be the root directory of the + archive; ie. we typically chdir into 'root_dir' before creating the + archive. 'base_dir' is the directory where we start archiving from; + ie. 'base_dir' will be the common prefix of all files and + directories in the archive. 'root_dir' and 'base_dir' both default + to the current directory. Returns the name of the archive file. + + 'owner' and 'group' are used when creating a tar archive. By default, + uses the current owner and group. + """ + save_cwd = os.getcwd() + if root_dir is not None: + if logger is not None: + logger.debug("changing into '%s'", root_dir) + base_name = os.path.abspath(base_name) + if not dry_run: + os.chdir(root_dir) + + if base_dir is None: + base_dir = os.curdir + + kwargs = {'dry_run': dry_run, 'logger': logger} + + try: + format_info = _ARCHIVE_FORMATS[format] + except KeyError: + raise ValueError("unknown archive format '%s'" % format) + + func = format_info[0] + for arg, val in format_info[1]: + kwargs[arg] = val + + if format != 'zip': + kwargs['owner'] = owner + kwargs['group'] = group + + try: + filename = func(base_name, base_dir, **kwargs) + finally: + if root_dir is not None: + if logger is not None: + logger.debug("changing back to '%s'", save_cwd) + os.chdir(save_cwd) + + return filename + + +def get_unpack_formats(): + """Returns a list of supported formats for unpacking. + + Each element of the returned sequence is a tuple + (name, extensions, description) + """ + formats = [(name, info[0], info[3]) for name, info in + _UNPACK_FORMATS.items()] + formats.sort() + return formats + +def _check_unpack_options(extensions, function, extra_args): + """Checks what gets registered as an unpacker.""" + # first make sure no other unpacker is registered for this extension + existing_extensions = {} + for name, info in _UNPACK_FORMATS.items(): + for ext in info[0]: + existing_extensions[ext] = name + + for extension in extensions: + if extension in existing_extensions: + msg = '%s is already registered for "%s"' + raise RegistryError(msg % (extension, + existing_extensions[extension])) + + if not isinstance(function, collections.Callable): + raise TypeError('The registered function must be a callable') + + +def register_unpack_format(name, extensions, function, extra_args=None, + description=''): + """Registers an unpack format. + + `name` is the name of the format. `extensions` is a list of extensions + corresponding to the format. + + `function` is the callable that will be + used to unpack archives. The callable will receive archives to unpack. + If it's unable to handle an archive, it needs to raise a ReadError + exception. + + If provided, `extra_args` is a sequence of + (name, value) tuples that will be passed as arguments to the callable. + description can be provided to describe the format, and will be returned + by the get_unpack_formats() function. + """ + if extra_args is None: + extra_args = [] + _check_unpack_options(extensions, function, extra_args) + _UNPACK_FORMATS[name] = extensions, function, extra_args, description + +def unregister_unpack_format(name): + """Removes the pack format from the registry.""" + del _UNPACK_FORMATS[name] + +def _ensure_directory(path): + """Ensure that the parent directory of `path` exists""" + dirname = os.path.dirname(path) + if not os.path.isdir(dirname): + os.makedirs(dirname) + +def _unpack_zipfile(filename, extract_dir): + """Unpack zip `filename` to `extract_dir` + """ + try: + import zipfile + except ImportError: + raise ReadError('zlib not supported, cannot unpack this archive.') + + if not zipfile.is_zipfile(filename): + raise ReadError("%s is not a zip file" % filename) + + zip = zipfile.ZipFile(filename) + try: + for info in zip.infolist(): + name = info.filename + + # don't extract absolute paths or ones with .. in them + if name.startswith('/') or '..' in name: + continue + + target = os.path.join(extract_dir, *name.split('/')) + if not target: + continue + + _ensure_directory(target) + if not name.endswith('/'): + # file + data = zip.read(info.filename) + f = open(target, 'wb') + try: + f.write(data) + finally: + f.close() + del data + finally: + zip.close() + +def _unpack_tarfile(filename, extract_dir): + """Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir` + """ + try: + tarobj = tarfile.open(filename) + except tarfile.TarError: + raise ReadError( + "%s is not a compressed or uncompressed tar file" % filename) + try: + tarobj.extractall(extract_dir) + finally: + tarobj.close() + +_UNPACK_FORMATS = { + 'gztar': (['.tar.gz', '.tgz'], _unpack_tarfile, [], "gzip'ed tar-file"), + 'tar': (['.tar'], _unpack_tarfile, [], "uncompressed tar file"), + 'zip': (['.zip'], _unpack_zipfile, [], "ZIP file") + } + +if _BZ2_SUPPORTED: + _UNPACK_FORMATS['bztar'] = (['.bz2'], _unpack_tarfile, [], + "bzip2'ed tar-file") + +def _find_unpack_format(filename): + for name, info in _UNPACK_FORMATS.items(): + for extension in info[0]: + if filename.endswith(extension): + return name + return None + +def unpack_archive(filename, extract_dir=None, format=None): + """Unpack an archive. + + `filename` is the name of the archive. + + `extract_dir` is the name of the target directory, where the archive + is unpacked. If not provided, the current working directory is used. + + `format` is the archive format: one of "zip", "tar", or "gztar". Or any + other registered format. If not provided, unpack_archive will use the + filename extension and see if an unpacker was registered for that + extension. + + In case none is found, a ValueError is raised. + """ + if extract_dir is None: + extract_dir = os.getcwd() + + if format is not None: + try: + format_info = _UNPACK_FORMATS[format] + except KeyError: + raise ValueError("Unknown unpack format '{0}'".format(format)) + + func = format_info[1] + func(filename, extract_dir, **dict(format_info[2])) + else: + # we need to look at the registered unpackers supported extensions + format = _find_unpack_format(filename) + if format is None: + raise ReadError("Unknown archive format '{0}'".format(filename)) + + func = _UNPACK_FORMATS[format][1] + kwargs = dict(_UNPACK_FORMATS[format][2]) + func(filename, extract_dir, **kwargs) diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg new file mode 100644 index 000000000..1746bd01c --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg @@ -0,0 +1,84 @@ +[posix_prefix] +# Configuration directories. Some of these come straight out of the +# configure script. They are for implementing the other variables, not to +# be used directly in [resource_locations]. +confdir = /etc +datadir = /usr/share +libdir = /usr/lib +statedir = /var +# User resource directory +local = ~/.local/{distribution.name} + +stdlib = {base}/lib/python{py_version_short} +platstdlib = {platbase}/lib/python{py_version_short} +purelib = {base}/lib/python{py_version_short}/site-packages +platlib = {platbase}/lib/python{py_version_short}/site-packages +include = {base}/include/python{py_version_short}{abiflags} +platinclude = {platbase}/include/python{py_version_short}{abiflags} +data = {base} + +[posix_home] +stdlib = {base}/lib/python +platstdlib = {base}/lib/python +purelib = {base}/lib/python +platlib = {base}/lib/python +include = {base}/include/python +platinclude = {base}/include/python +scripts = {base}/bin +data = {base} + +[nt] +stdlib = {base}/Lib +platstdlib = {base}/Lib +purelib = {base}/Lib/site-packages +platlib = {base}/Lib/site-packages +include = {base}/Include +platinclude = {base}/Include +scripts = {base}/Scripts +data = {base} + +[os2] +stdlib = {base}/Lib +platstdlib = {base}/Lib +purelib = {base}/Lib/site-packages +platlib = {base}/Lib/site-packages +include = {base}/Include +platinclude = {base}/Include +scripts = {base}/Scripts +data = {base} + +[os2_home] +stdlib = {userbase}/lib/python{py_version_short} +platstdlib = {userbase}/lib/python{py_version_short} +purelib = {userbase}/lib/python{py_version_short}/site-packages +platlib = {userbase}/lib/python{py_version_short}/site-packages +include = {userbase}/include/python{py_version_short} +scripts = {userbase}/bin +data = {userbase} + +[nt_user] +stdlib = {userbase}/Python{py_version_nodot} +platstdlib = {userbase}/Python{py_version_nodot} +purelib = {userbase}/Python{py_version_nodot}/site-packages +platlib = {userbase}/Python{py_version_nodot}/site-packages +include = {userbase}/Python{py_version_nodot}/Include +scripts = {userbase}/Scripts +data = {userbase} + +[posix_user] +stdlib = {userbase}/lib/python{py_version_short} +platstdlib = {userbase}/lib/python{py_version_short} +purelib = {userbase}/lib/python{py_version_short}/site-packages +platlib = {userbase}/lib/python{py_version_short}/site-packages +include = {userbase}/include/python{py_version_short} +scripts = {userbase}/bin +data = {userbase} + +[osx_framework_user] +stdlib = {userbase}/lib/python +platstdlib = {userbase}/lib/python +purelib = {userbase}/lib/python/site-packages +platlib = {userbase}/lib/python/site-packages +include = {userbase}/include +scripts = {userbase}/bin +data = {userbase} diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py new file mode 100644 index 000000000..1df3aba14 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py @@ -0,0 +1,788 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Access to Python's configuration information.""" + +import codecs +import os +import re +import sys +from os.path import pardir, realpath +try: + import configparser +except ImportError: + import ConfigParser as configparser + + +__all__ = [ + 'get_config_h_filename', + 'get_config_var', + 'get_config_vars', + 'get_makefile_filename', + 'get_path', + 'get_path_names', + 'get_paths', + 'get_platform', + 'get_python_version', + 'get_scheme_names', + 'parse_config_h', +] + + +def _safe_realpath(path): + try: + return realpath(path) + except OSError: + return path + + +if sys.executable: + _PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable)) +else: + # sys.executable can be empty if argv[0] has been changed and Python is + # unable to retrieve the real program name + _PROJECT_BASE = _safe_realpath(os.getcwd()) + +if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir)) +# PC/VS7.1 +if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) +# PC/AMD64 +if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) + + +def is_python_build(): + for fn in ("Setup.dist", "Setup.local"): + if os.path.isfile(os.path.join(_PROJECT_BASE, "Modules", fn)): + return True + return False + +_PYTHON_BUILD = is_python_build() + +_cfg_read = False + +def _ensure_cfg_read(): + global _cfg_read + if not _cfg_read: + from ..resources import finder + backport_package = __name__.rsplit('.', 1)[0] + _finder = finder(backport_package) + _cfgfile = _finder.find('sysconfig.cfg') + assert _cfgfile, 'sysconfig.cfg exists' + with _cfgfile.as_stream() as s: + _SCHEMES.readfp(s) + if _PYTHON_BUILD: + for scheme in ('posix_prefix', 'posix_home'): + _SCHEMES.set(scheme, 'include', '{srcdir}/Include') + _SCHEMES.set(scheme, 'platinclude', '{projectbase}/.') + + _cfg_read = True + + +_SCHEMES = configparser.RawConfigParser() +_VAR_REPL = re.compile(r'\{([^{]*?)\}') + +def _expand_globals(config): + _ensure_cfg_read() + if config.has_section('globals'): + globals = config.items('globals') + else: + globals = tuple() + + sections = config.sections() + for section in sections: + if section == 'globals': + continue + for option, value in globals: + if config.has_option(section, option): + continue + config.set(section, option, value) + config.remove_section('globals') + + # now expanding local variables defined in the cfg file + # + for section in config.sections(): + variables = dict(config.items(section)) + + def _replacer(matchobj): + name = matchobj.group(1) + if name in variables: + return variables[name] + return matchobj.group(0) + + for option, value in config.items(section): + config.set(section, option, _VAR_REPL.sub(_replacer, value)) + +#_expand_globals(_SCHEMES) + + # FIXME don't rely on sys.version here, its format is an implementation detail + # of CPython, use sys.version_info or sys.hexversion +_PY_VERSION = sys.version.split()[0] +_PY_VERSION_SHORT = sys.version[:3] +_PY_VERSION_SHORT_NO_DOT = _PY_VERSION[0] + _PY_VERSION[2] +_PREFIX = os.path.normpath(sys.prefix) +_EXEC_PREFIX = os.path.normpath(sys.exec_prefix) +_CONFIG_VARS = None +_USER_BASE = None + + +def _subst_vars(path, local_vars): + """In the string `path`, replace tokens like {some.thing} with the + corresponding value from the map `local_vars`. + + If there is no corresponding value, leave the token unchanged. + """ + def _replacer(matchobj): + name = matchobj.group(1) + if name in local_vars: + return local_vars[name] + elif name in os.environ: + return os.environ[name] + return matchobj.group(0) + return _VAR_REPL.sub(_replacer, path) + + +def _extend_dict(target_dict, other_dict): + target_keys = target_dict.keys() + for key, value in other_dict.items(): + if key in target_keys: + continue + target_dict[key] = value + + +def _expand_vars(scheme, vars): + res = {} + if vars is None: + vars = {} + _extend_dict(vars, get_config_vars()) + + for key, value in _SCHEMES.items(scheme): + if os.name in ('posix', 'nt'): + value = os.path.expanduser(value) + res[key] = os.path.normpath(_subst_vars(value, vars)) + return res + + +def format_value(value, vars): + def _replacer(matchobj): + name = matchobj.group(1) + if name in vars: + return vars[name] + return matchobj.group(0) + return _VAR_REPL.sub(_replacer, value) + + +def _get_default_scheme(): + if os.name == 'posix': + # the default scheme for posix is posix_prefix + return 'posix_prefix' + return os.name + + +def _getuserbase(): + env_base = os.environ.get("PYTHONUSERBASE", None) + + def joinuser(*args): + return os.path.expanduser(os.path.join(*args)) + + # what about 'os2emx', 'riscos' ? + if os.name == "nt": + base = os.environ.get("APPDATA") or "~" + if env_base: + return env_base + else: + return joinuser(base, "Python") + + if sys.platform == "darwin": + framework = get_config_var("PYTHONFRAMEWORK") + if framework: + if env_base: + return env_base + else: + return joinuser("~", "Library", framework, "%d.%d" % + sys.version_info[:2]) + + if env_base: + return env_base + else: + return joinuser("~", ".local") + + +def _parse_makefile(filename, vars=None): + """Parse a Makefile-style file. + + A dictionary containing name/value pairs is returned. If an + optional dictionary is passed in as the second argument, it is + used instead of a new dictionary. + """ + # Regexes needed for parsing Makefile (and similar syntaxes, + # like old-style Setup files). + _variable_rx = re.compile(r"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)") + _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)") + _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") + + if vars is None: + vars = {} + done = {} + notdone = {} + + with codecs.open(filename, encoding='utf-8', errors="surrogateescape") as f: + lines = f.readlines() + + for line in lines: + if line.startswith('#') or line.strip() == '': + continue + m = _variable_rx.match(line) + if m: + n, v = m.group(1, 2) + v = v.strip() + # `$$' is a literal `$' in make + tmpv = v.replace('$$', '') + + if "$" in tmpv: + notdone[n] = v + else: + try: + v = int(v) + except ValueError: + # insert literal `$' + done[n] = v.replace('$$', '$') + else: + done[n] = v + + # do variable interpolation here + variables = list(notdone.keys()) + + # Variables with a 'PY_' prefix in the makefile. These need to + # be made available without that prefix through sysconfig. + # Special care is needed to ensure that variable expansion works, even + # if the expansion uses the name without a prefix. + renamed_variables = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS') + + while len(variables) > 0: + for name in tuple(variables): + value = notdone[name] + m = _findvar1_rx.search(value) or _findvar2_rx.search(value) + if m is not None: + n = m.group(1) + found = True + if n in done: + item = str(done[n]) + elif n in notdone: + # get it on a subsequent round + found = False + elif n in os.environ: + # do it like make: fall back to environment + item = os.environ[n] + + elif n in renamed_variables: + if (name.startswith('PY_') and + name[3:] in renamed_variables): + item = "" + + elif 'PY_' + n in notdone: + found = False + + else: + item = str(done['PY_' + n]) + + else: + done[n] = item = "" + + if found: + after = value[m.end():] + value = value[:m.start()] + item + after + if "$" in after: + notdone[name] = value + else: + try: + value = int(value) + except ValueError: + done[name] = value.strip() + else: + done[name] = value + variables.remove(name) + + if (name.startswith('PY_') and + name[3:] in renamed_variables): + + name = name[3:] + if name not in done: + done[name] = value + + else: + # bogus variable reference (e.g. "prefix=$/opt/python"); + # just drop it since we can't deal + done[name] = value + variables.remove(name) + + # strip spurious spaces + for k, v in done.items(): + if isinstance(v, str): + done[k] = v.strip() + + # save the results in the global dictionary + vars.update(done) + return vars + + +def get_makefile_filename(): + """Return the path of the Makefile.""" + if _PYTHON_BUILD: + return os.path.join(_PROJECT_BASE, "Makefile") + if hasattr(sys, 'abiflags'): + config_dir_name = 'config-%s%s' % (_PY_VERSION_SHORT, sys.abiflags) + else: + config_dir_name = 'config' + return os.path.join(get_path('stdlib'), config_dir_name, 'Makefile') + + +def _init_posix(vars): + """Initialize the module as appropriate for POSIX systems.""" + # load the installed Makefile: + makefile = get_makefile_filename() + try: + _parse_makefile(makefile, vars) + except IOError as e: + msg = "invalid Python installation: unable to open %s" % makefile + if hasattr(e, "strerror"): + msg = msg + " (%s)" % e.strerror + raise IOError(msg) + # load the installed pyconfig.h: + config_h = get_config_h_filename() + try: + with open(config_h) as f: + parse_config_h(f, vars) + except IOError as e: + msg = "invalid Python installation: unable to open %s" % config_h + if hasattr(e, "strerror"): + msg = msg + " (%s)" % e.strerror + raise IOError(msg) + # On AIX, there are wrong paths to the linker scripts in the Makefile + # -- these paths are relative to the Python source, but when installed + # the scripts are in another directory. + if _PYTHON_BUILD: + vars['LDSHARED'] = vars['BLDSHARED'] + + +def _init_non_posix(vars): + """Initialize the module as appropriate for NT""" + # set basic install directories + vars['LIBDEST'] = get_path('stdlib') + vars['BINLIBDEST'] = get_path('platstdlib') + vars['INCLUDEPY'] = get_path('include') + vars['SO'] = '.pyd' + vars['EXE'] = '.exe' + vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT + vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable)) + +# +# public APIs +# + + +def parse_config_h(fp, vars=None): + """Parse a config.h-style file. + + A dictionary containing name/value pairs is returned. If an + optional dictionary is passed in as the second argument, it is + used instead of a new dictionary. + """ + if vars is None: + vars = {} + define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n") + undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n") + + while True: + line = fp.readline() + if not line: + break + m = define_rx.match(line) + if m: + n, v = m.group(1, 2) + try: + v = int(v) + except ValueError: + pass + vars[n] = v + else: + m = undef_rx.match(line) + if m: + vars[m.group(1)] = 0 + return vars + + +def get_config_h_filename(): + """Return the path of pyconfig.h.""" + if _PYTHON_BUILD: + if os.name == "nt": + inc_dir = os.path.join(_PROJECT_BASE, "PC") + else: + inc_dir = _PROJECT_BASE + else: + inc_dir = get_path('platinclude') + return os.path.join(inc_dir, 'pyconfig.h') + + +def get_scheme_names(): + """Return a tuple containing the schemes names.""" + return tuple(sorted(_SCHEMES.sections())) + + +def get_path_names(): + """Return a tuple containing the paths names.""" + # xxx see if we want a static list + return _SCHEMES.options('posix_prefix') + + +def get_paths(scheme=_get_default_scheme(), vars=None, expand=True): + """Return a mapping containing an install scheme. + + ``scheme`` is the install scheme name. If not provided, it will + return the default scheme for the current platform. + """ + _ensure_cfg_read() + if expand: + return _expand_vars(scheme, vars) + else: + return dict(_SCHEMES.items(scheme)) + + +def get_path(name, scheme=_get_default_scheme(), vars=None, expand=True): + """Return a path corresponding to the scheme. + + ``scheme`` is the install scheme name. + """ + return get_paths(scheme, vars, expand)[name] + + +def get_config_vars(*args): + """With no arguments, return a dictionary of all configuration + variables relevant for the current platform. + + On Unix, this means every variable defined in Python's installed Makefile; + On Windows and Mac OS it's a much smaller set. + + With arguments, return a list of values that result from looking up + each argument in the configuration variable dictionary. + """ + global _CONFIG_VARS + if _CONFIG_VARS is None: + _CONFIG_VARS = {} + # Normalized versions of prefix and exec_prefix are handy to have; + # in fact, these are the standard versions used most places in the + # distutils2 module. + _CONFIG_VARS['prefix'] = _PREFIX + _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX + _CONFIG_VARS['py_version'] = _PY_VERSION + _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT + _CONFIG_VARS['py_version_nodot'] = _PY_VERSION[0] + _PY_VERSION[2] + _CONFIG_VARS['base'] = _PREFIX + _CONFIG_VARS['platbase'] = _EXEC_PREFIX + _CONFIG_VARS['projectbase'] = _PROJECT_BASE + try: + _CONFIG_VARS['abiflags'] = sys.abiflags + except AttributeError: + # sys.abiflags may not be defined on all platforms. + _CONFIG_VARS['abiflags'] = '' + + if os.name in ('nt', 'os2'): + _init_non_posix(_CONFIG_VARS) + if os.name == 'posix': + _init_posix(_CONFIG_VARS) + # Setting 'userbase' is done below the call to the + # init function to enable using 'get_config_var' in + # the init-function. + if sys.version >= '2.6': + _CONFIG_VARS['userbase'] = _getuserbase() + + if 'srcdir' not in _CONFIG_VARS: + _CONFIG_VARS['srcdir'] = _PROJECT_BASE + else: + _CONFIG_VARS['srcdir'] = _safe_realpath(_CONFIG_VARS['srcdir']) + + # Convert srcdir into an absolute path if it appears necessary. + # Normally it is relative to the build directory. However, during + # testing, for example, we might be running a non-installed python + # from a different directory. + if _PYTHON_BUILD and os.name == "posix": + base = _PROJECT_BASE + try: + cwd = os.getcwd() + except OSError: + cwd = None + if (not os.path.isabs(_CONFIG_VARS['srcdir']) and + base != cwd): + # srcdir is relative and we are not in the same directory + # as the executable. Assume executable is in the build + # directory and make srcdir absolute. + srcdir = os.path.join(base, _CONFIG_VARS['srcdir']) + _CONFIG_VARS['srcdir'] = os.path.normpath(srcdir) + + if sys.platform == 'darwin': + kernel_version = os.uname()[2] # Kernel version (8.4.3) + major_version = int(kernel_version.split('.')[0]) + + if major_version < 8: + # On Mac OS X before 10.4, check if -arch and -isysroot + # are in CFLAGS or LDFLAGS and remove them if they are. + # This is needed when building extensions on a 10.3 system + # using a universal build of python. + for key in ('LDFLAGS', 'BASECFLAGS', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + flags = _CONFIG_VARS[key] + flags = re.sub(r'-arch\s+\w+\s', ' ', flags) + flags = re.sub('-isysroot [^ \t]*', ' ', flags) + _CONFIG_VARS[key] = flags + else: + # Allow the user to override the architecture flags using + # an environment variable. + # NOTE: This name was introduced by Apple in OSX 10.5 and + # is used by several scripting languages distributed with + # that OS release. + if 'ARCHFLAGS' in os.environ: + arch = os.environ['ARCHFLAGS'] + for key in ('LDFLAGS', 'BASECFLAGS', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + + flags = _CONFIG_VARS[key] + flags = re.sub(r'-arch\s+\w+\s', ' ', flags) + flags = flags + ' ' + arch + _CONFIG_VARS[key] = flags + + # If we're on OSX 10.5 or later and the user tries to + # compiles an extension using an SDK that is not present + # on the current machine it is better to not use an SDK + # than to fail. + # + # The major usecase for this is users using a Python.org + # binary installer on OSX 10.6: that installer uses + # the 10.4u SDK, but that SDK is not installed by default + # when you install Xcode. + # + CFLAGS = _CONFIG_VARS.get('CFLAGS', '') + m = re.search(r'-isysroot\s+(\S+)', CFLAGS) + if m is not None: + sdk = m.group(1) + if not os.path.exists(sdk): + for key in ('LDFLAGS', 'BASECFLAGS', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + + flags = _CONFIG_VARS[key] + flags = re.sub(r'-isysroot\s+\S+(\s|$)', ' ', flags) + _CONFIG_VARS[key] = flags + + if args: + vals = [] + for name in args: + vals.append(_CONFIG_VARS.get(name)) + return vals + else: + return _CONFIG_VARS + + +def get_config_var(name): + """Return the value of a single variable using the dictionary returned by + 'get_config_vars()'. + + Equivalent to get_config_vars().get(name) + """ + return get_config_vars().get(name) + + +def get_platform(): + """Return a string that identifies the current platform. + + This is used mainly to distinguish platform-specific build directories and + platform-specific built distributions. Typically includes the OS name + and version and the architecture (as supplied by 'os.uname()'), + although the exact information included depends on the OS; eg. for IRIX + the architecture isn't particularly important (IRIX only runs on SGI + hardware), but for Linux the kernel version isn't particularly + important. + + Examples of returned values: + linux-i586 + linux-alpha (?) + solaris-2.6-sun4u + irix-5.3 + irix64-6.2 + + Windows will return one of: + win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) + win-ia64 (64bit Windows on Itanium) + win32 (all others - specifically, sys.platform is returned) + + For other non-POSIX platforms, currently just returns 'sys.platform'. + """ + if os.name == 'nt': + # sniff sys.version for architecture. + prefix = " bit (" + i = sys.version.find(prefix) + if i == -1: + return sys.platform + j = sys.version.find(")", i) + look = sys.version[i+len(prefix):j].lower() + if look == 'amd64': + return 'win-amd64' + if look == 'itanium': + return 'win-ia64' + return sys.platform + + if os.name != "posix" or not hasattr(os, 'uname'): + # XXX what about the architecture? NT is Intel or Alpha, + # Mac OS is M68k or PPC, etc. + return sys.platform + + # Try to distinguish various flavours of Unix + osname, host, release, version, machine = os.uname() + + # Convert the OS name to lowercase, remove '/' characters + # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh") + osname = osname.lower().replace('/', '') + machine = machine.replace(' ', '_') + machine = machine.replace('/', '-') + + if osname[:5] == "linux": + # At least on Linux/Intel, 'machine' is the processor -- + # i386, etc. + # XXX what about Alpha, SPARC, etc? + return "%s-%s" % (osname, machine) + elif osname[:5] == "sunos": + if release[0] >= "5": # SunOS 5 == Solaris 2 + osname = "solaris" + release = "%d.%s" % (int(release[0]) - 3, release[2:]) + # fall through to standard osname-release-machine representation + elif osname[:4] == "irix": # could be "irix64"! + return "%s-%s" % (osname, release) + elif osname[:3] == "aix": + return "%s-%s.%s" % (osname, version, release) + elif osname[:6] == "cygwin": + osname = "cygwin" + rel_re = re.compile(r'[\d.]+') + m = rel_re.match(release) + if m: + release = m.group() + elif osname[:6] == "darwin": + # + # For our purposes, we'll assume that the system version from + # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set + # to. This makes the compatibility story a bit more sane because the + # machine is going to compile and link as if it were + # MACOSX_DEPLOYMENT_TARGET. + cfgvars = get_config_vars() + macver = cfgvars.get('MACOSX_DEPLOYMENT_TARGET') + + if True: + # Always calculate the release of the running machine, + # needed to determine if we can build fat binaries or not. + + macrelease = macver + # Get the system version. Reading this plist is a documented + # way to get the system version (see the documentation for + # the Gestalt Manager) + try: + f = open('/System/Library/CoreServices/SystemVersion.plist') + except IOError: + # We're on a plain darwin box, fall back to the default + # behaviour. + pass + else: + try: + m = re.search(r'ProductUserVisibleVersion\s*' + r'(.*?)', f.read()) + finally: + f.close() + if m is not None: + macrelease = '.'.join(m.group(1).split('.')[:2]) + # else: fall back to the default behaviour + + if not macver: + macver = macrelease + + if macver: + release = macver + osname = "macosx" + + if ((macrelease + '.') >= '10.4.' and + '-arch' in get_config_vars().get('CFLAGS', '').strip()): + # The universal build will build fat binaries, but not on + # systems before 10.4 + # + # Try to detect 4-way universal builds, those have machine-type + # 'universal' instead of 'fat'. + + machine = 'fat' + cflags = get_config_vars().get('CFLAGS') + + archs = re.findall(r'-arch\s+(\S+)', cflags) + archs = tuple(sorted(set(archs))) + + if len(archs) == 1: + machine = archs[0] + elif archs == ('i386', 'ppc'): + machine = 'fat' + elif archs == ('i386', 'x86_64'): + machine = 'intel' + elif archs == ('i386', 'ppc', 'x86_64'): + machine = 'fat3' + elif archs == ('ppc64', 'x86_64'): + machine = 'fat64' + elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'): + machine = 'universal' + else: + raise ValueError( + "Don't know machine value for archs=%r" % (archs,)) + + elif machine == 'i386': + # On OSX the machine type returned by uname is always the + # 32-bit variant, even if the executable architecture is + # the 64-bit variant + if sys.maxsize >= 2**32: + machine = 'x86_64' + + elif machine in ('PowerPC', 'Power_Macintosh'): + # Pick a sane name for the PPC architecture. + # See 'i386' case + if sys.maxsize >= 2**32: + machine = 'ppc64' + else: + machine = 'ppc' + + return "%s-%s-%s" % (osname, release, machine) + + +def get_python_version(): + return _PY_VERSION_SHORT + + +def _print_dict(title, data): + for index, (key, value) in enumerate(sorted(data.items())): + if index == 0: + print('%s: ' % (title)) + print('\t%s = "%s"' % (key, value)) + + +def _main(): + """Display all information sysconfig detains.""" + print('Platform: "%s"' % get_platform()) + print('Python version: "%s"' % get_python_version()) + print('Current installation scheme: "%s"' % _get_default_scheme()) + print() + _print_dict('Paths', get_paths()) + print() + _print_dict('Variables', get_config_vars()) + + +if __name__ == '__main__': + _main() diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py new file mode 100644 index 000000000..d66d85663 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py @@ -0,0 +1,2607 @@ +#------------------------------------------------------------------- +# tarfile.py +#------------------------------------------------------------------- +# Copyright (C) 2002 Lars Gustaebel +# All rights reserved. +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, +# copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following +# conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +from __future__ import print_function + +"""Read from and write to tar format archives. +""" + +__version__ = "$Revision$" + +version = "0.9.0" +__author__ = "Lars Gust\u00e4bel (lars@gustaebel.de)" +__date__ = "$Date: 2011-02-25 17:42:01 +0200 (Fri, 25 Feb 2011) $" +__cvsid__ = "$Id: tarfile.py 88586 2011-02-25 15:42:01Z marc-andre.lemburg $" +__credits__ = "Gustavo Niemeyer, Niels Gust\u00e4bel, Richard Townsend." + +#--------- +# Imports +#--------- +import sys +import os +import stat +import errno +import time +import struct +import copy +import re + +try: + import grp, pwd +except ImportError: + grp = pwd = None + +# os.symlink on Windows prior to 6.0 raises NotImplementedError +symlink_exception = (AttributeError, NotImplementedError) +try: + # WindowsError (1314) will be raised if the caller does not hold the + # SeCreateSymbolicLinkPrivilege privilege + symlink_exception += (WindowsError,) +except NameError: + pass + +# from tarfile import * +__all__ = ["TarFile", "TarInfo", "is_tarfile", "TarError"] + +if sys.version_info[0] < 3: + import __builtin__ as builtins +else: + import builtins + +_open = builtins.open # Since 'open' is TarFile.open + +#--------------------------------------------------------- +# tar constants +#--------------------------------------------------------- +NUL = b"\0" # the null character +BLOCKSIZE = 512 # length of processing blocks +RECORDSIZE = BLOCKSIZE * 20 # length of records +GNU_MAGIC = b"ustar \0" # magic gnu tar string +POSIX_MAGIC = b"ustar\x0000" # magic posix tar string + +LENGTH_NAME = 100 # maximum length of a filename +LENGTH_LINK = 100 # maximum length of a linkname +LENGTH_PREFIX = 155 # maximum length of the prefix field + +REGTYPE = b"0" # regular file +AREGTYPE = b"\0" # regular file +LNKTYPE = b"1" # link (inside tarfile) +SYMTYPE = b"2" # symbolic link +CHRTYPE = b"3" # character special device +BLKTYPE = b"4" # block special device +DIRTYPE = b"5" # directory +FIFOTYPE = b"6" # fifo special device +CONTTYPE = b"7" # contiguous file + +GNUTYPE_LONGNAME = b"L" # GNU tar longname +GNUTYPE_LONGLINK = b"K" # GNU tar longlink +GNUTYPE_SPARSE = b"S" # GNU tar sparse file + +XHDTYPE = b"x" # POSIX.1-2001 extended header +XGLTYPE = b"g" # POSIX.1-2001 global header +SOLARIS_XHDTYPE = b"X" # Solaris extended header + +USTAR_FORMAT = 0 # POSIX.1-1988 (ustar) format +GNU_FORMAT = 1 # GNU tar format +PAX_FORMAT = 2 # POSIX.1-2001 (pax) format +DEFAULT_FORMAT = GNU_FORMAT + +#--------------------------------------------------------- +# tarfile constants +#--------------------------------------------------------- +# File types that tarfile supports: +SUPPORTED_TYPES = (REGTYPE, AREGTYPE, LNKTYPE, + SYMTYPE, DIRTYPE, FIFOTYPE, + CONTTYPE, CHRTYPE, BLKTYPE, + GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, + GNUTYPE_SPARSE) + +# File types that will be treated as a regular file. +REGULAR_TYPES = (REGTYPE, AREGTYPE, + CONTTYPE, GNUTYPE_SPARSE) + +# File types that are part of the GNU tar format. +GNU_TYPES = (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, + GNUTYPE_SPARSE) + +# Fields from a pax header that override a TarInfo attribute. +PAX_FIELDS = ("path", "linkpath", "size", "mtime", + "uid", "gid", "uname", "gname") + +# Fields from a pax header that are affected by hdrcharset. +PAX_NAME_FIELDS = set(("path", "linkpath", "uname", "gname")) + +# Fields in a pax header that are numbers, all other fields +# are treated as strings. +PAX_NUMBER_FIELDS = { + "atime": float, + "ctime": float, + "mtime": float, + "uid": int, + "gid": int, + "size": int +} + +#--------------------------------------------------------- +# Bits used in the mode field, values in octal. +#--------------------------------------------------------- +S_IFLNK = 0o120000 # symbolic link +S_IFREG = 0o100000 # regular file +S_IFBLK = 0o060000 # block device +S_IFDIR = 0o040000 # directory +S_IFCHR = 0o020000 # character device +S_IFIFO = 0o010000 # fifo + +TSUID = 0o4000 # set UID on execution +TSGID = 0o2000 # set GID on execution +TSVTX = 0o1000 # reserved + +TUREAD = 0o400 # read by owner +TUWRITE = 0o200 # write by owner +TUEXEC = 0o100 # execute/search by owner +TGREAD = 0o040 # read by group +TGWRITE = 0o020 # write by group +TGEXEC = 0o010 # execute/search by group +TOREAD = 0o004 # read by other +TOWRITE = 0o002 # write by other +TOEXEC = 0o001 # execute/search by other + +#--------------------------------------------------------- +# initialization +#--------------------------------------------------------- +if os.name in ("nt", "ce"): + ENCODING = "utf-8" +else: + ENCODING = sys.getfilesystemencoding() + +#--------------------------------------------------------- +# Some useful functions +#--------------------------------------------------------- + +def stn(s, length, encoding, errors): + """Convert a string to a null-terminated bytes object. + """ + s = s.encode(encoding, errors) + return s[:length] + (length - len(s)) * NUL + +def nts(s, encoding, errors): + """Convert a null-terminated bytes object to a string. + """ + p = s.find(b"\0") + if p != -1: + s = s[:p] + return s.decode(encoding, errors) + +def nti(s): + """Convert a number field to a python number. + """ + # There are two possible encodings for a number field, see + # itn() below. + if s[0] != chr(0o200): + try: + n = int(nts(s, "ascii", "strict") or "0", 8) + except ValueError: + raise InvalidHeaderError("invalid header") + else: + n = 0 + for i in range(len(s) - 1): + n <<= 8 + n += ord(s[i + 1]) + return n + +def itn(n, digits=8, format=DEFAULT_FORMAT): + """Convert a python number to a number field. + """ + # POSIX 1003.1-1988 requires numbers to be encoded as a string of + # octal digits followed by a null-byte, this allows values up to + # (8**(digits-1))-1. GNU tar allows storing numbers greater than + # that if necessary. A leading 0o200 byte indicates this particular + # encoding, the following digits-1 bytes are a big-endian + # representation. This allows values up to (256**(digits-1))-1. + if 0 <= n < 8 ** (digits - 1): + s = ("%0*o" % (digits - 1, n)).encode("ascii") + NUL + else: + if format != GNU_FORMAT or n >= 256 ** (digits - 1): + raise ValueError("overflow in number field") + + if n < 0: + # XXX We mimic GNU tar's behaviour with negative numbers, + # this could raise OverflowError. + n = struct.unpack("L", struct.pack("l", n))[0] + + s = bytearray() + for i in range(digits - 1): + s.insert(0, n & 0o377) + n >>= 8 + s.insert(0, 0o200) + return s + +def calc_chksums(buf): + """Calculate the checksum for a member's header by summing up all + characters except for the chksum field which is treated as if + it was filled with spaces. According to the GNU tar sources, + some tars (Sun and NeXT) calculate chksum with signed char, + which will be different if there are chars in the buffer with + the high bit set. So we calculate two checksums, unsigned and + signed. + """ + unsigned_chksum = 256 + sum(struct.unpack("148B", buf[:148]) + struct.unpack("356B", buf[156:512])) + signed_chksum = 256 + sum(struct.unpack("148b", buf[:148]) + struct.unpack("356b", buf[156:512])) + return unsigned_chksum, signed_chksum + +def copyfileobj(src, dst, length=None): + """Copy length bytes from fileobj src to fileobj dst. + If length is None, copy the entire content. + """ + if length == 0: + return + if length is None: + while True: + buf = src.read(16*1024) + if not buf: + break + dst.write(buf) + return + + BUFSIZE = 16 * 1024 + blocks, remainder = divmod(length, BUFSIZE) + for b in range(blocks): + buf = src.read(BUFSIZE) + if len(buf) < BUFSIZE: + raise IOError("end of file reached") + dst.write(buf) + + if remainder != 0: + buf = src.read(remainder) + if len(buf) < remainder: + raise IOError("end of file reached") + dst.write(buf) + return + +filemode_table = ( + ((S_IFLNK, "l"), + (S_IFREG, "-"), + (S_IFBLK, "b"), + (S_IFDIR, "d"), + (S_IFCHR, "c"), + (S_IFIFO, "p")), + + ((TUREAD, "r"),), + ((TUWRITE, "w"),), + ((TUEXEC|TSUID, "s"), + (TSUID, "S"), + (TUEXEC, "x")), + + ((TGREAD, "r"),), + ((TGWRITE, "w"),), + ((TGEXEC|TSGID, "s"), + (TSGID, "S"), + (TGEXEC, "x")), + + ((TOREAD, "r"),), + ((TOWRITE, "w"),), + ((TOEXEC|TSVTX, "t"), + (TSVTX, "T"), + (TOEXEC, "x")) +) + +def filemode(mode): + """Convert a file's mode to a string of the form + -rwxrwxrwx. + Used by TarFile.list() + """ + perm = [] + for table in filemode_table: + for bit, char in table: + if mode & bit == bit: + perm.append(char) + break + else: + perm.append("-") + return "".join(perm) + +class TarError(Exception): + """Base exception.""" + pass +class ExtractError(TarError): + """General exception for extract errors.""" + pass +class ReadError(TarError): + """Exception for unreadable tar archives.""" + pass +class CompressionError(TarError): + """Exception for unavailable compression methods.""" + pass +class StreamError(TarError): + """Exception for unsupported operations on stream-like TarFiles.""" + pass +class HeaderError(TarError): + """Base exception for header errors.""" + pass +class EmptyHeaderError(HeaderError): + """Exception for empty headers.""" + pass +class TruncatedHeaderError(HeaderError): + """Exception for truncated headers.""" + pass +class EOFHeaderError(HeaderError): + """Exception for end of file headers.""" + pass +class InvalidHeaderError(HeaderError): + """Exception for invalid headers.""" + pass +class SubsequentHeaderError(HeaderError): + """Exception for missing and invalid extended headers.""" + pass + +#--------------------------- +# internal stream interface +#--------------------------- +class _LowLevelFile(object): + """Low-level file object. Supports reading and writing. + It is used instead of a regular file object for streaming + access. + """ + + def __init__(self, name, mode): + mode = { + "r": os.O_RDONLY, + "w": os.O_WRONLY | os.O_CREAT | os.O_TRUNC, + }[mode] + if hasattr(os, "O_BINARY"): + mode |= os.O_BINARY + self.fd = os.open(name, mode, 0o666) + + def close(self): + os.close(self.fd) + + def read(self, size): + return os.read(self.fd, size) + + def write(self, s): + os.write(self.fd, s) + +class _Stream(object): + """Class that serves as an adapter between TarFile and + a stream-like object. The stream-like object only + needs to have a read() or write() method and is accessed + blockwise. Use of gzip or bzip2 compression is possible. + A stream-like object could be for example: sys.stdin, + sys.stdout, a socket, a tape device etc. + + _Stream is intended to be used only internally. + """ + + def __init__(self, name, mode, comptype, fileobj, bufsize): + """Construct a _Stream object. + """ + self._extfileobj = True + if fileobj is None: + fileobj = _LowLevelFile(name, mode) + self._extfileobj = False + + if comptype == '*': + # Enable transparent compression detection for the + # stream interface + fileobj = _StreamProxy(fileobj) + comptype = fileobj.getcomptype() + + self.name = name or "" + self.mode = mode + self.comptype = comptype + self.fileobj = fileobj + self.bufsize = bufsize + self.buf = b"" + self.pos = 0 + self.closed = False + + try: + if comptype == "gz": + try: + import zlib + except ImportError: + raise CompressionError("zlib module is not available") + self.zlib = zlib + self.crc = zlib.crc32(b"") + if mode == "r": + self._init_read_gz() + else: + self._init_write_gz() + + if comptype == "bz2": + try: + import bz2 + except ImportError: + raise CompressionError("bz2 module is not available") + if mode == "r": + self.dbuf = b"" + self.cmp = bz2.BZ2Decompressor() + else: + self.cmp = bz2.BZ2Compressor() + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise + + def __del__(self): + if hasattr(self, "closed") and not self.closed: + self.close() + + def _init_write_gz(self): + """Initialize for writing with gzip compression. + """ + self.cmp = self.zlib.compressobj(9, self.zlib.DEFLATED, + -self.zlib.MAX_WBITS, + self.zlib.DEF_MEM_LEVEL, + 0) + timestamp = struct.pack(" self.bufsize: + self.fileobj.write(self.buf[:self.bufsize]) + self.buf = self.buf[self.bufsize:] + + def close(self): + """Close the _Stream object. No operation should be + done on it afterwards. + """ + if self.closed: + return + + if self.mode == "w" and self.comptype != "tar": + self.buf += self.cmp.flush() + + if self.mode == "w" and self.buf: + self.fileobj.write(self.buf) + self.buf = b"" + if self.comptype == "gz": + # The native zlib crc is an unsigned 32-bit integer, but + # the Python wrapper implicitly casts that to a signed C + # long. So, on a 32-bit box self.crc may "look negative", + # while the same crc on a 64-bit box may "look positive". + # To avoid irksome warnings from the `struct` module, force + # it to look positive on all boxes. + self.fileobj.write(struct.pack("= 0: + blocks, remainder = divmod(pos - self.pos, self.bufsize) + for i in range(blocks): + self.read(self.bufsize) + self.read(remainder) + else: + raise StreamError("seeking backwards is not allowed") + return self.pos + + def read(self, size=None): + """Return the next size number of bytes from the stream. + If size is not defined, return all bytes of the stream + up to EOF. + """ + if size is None: + t = [] + while True: + buf = self._read(self.bufsize) + if not buf: + break + t.append(buf) + buf = "".join(t) + else: + buf = self._read(size) + self.pos += len(buf) + return buf + + def _read(self, size): + """Return size bytes from the stream. + """ + if self.comptype == "tar": + return self.__read(size) + + c = len(self.dbuf) + while c < size: + buf = self.__read(self.bufsize) + if not buf: + break + try: + buf = self.cmp.decompress(buf) + except IOError: + raise ReadError("invalid compressed data") + self.dbuf += buf + c += len(buf) + buf = self.dbuf[:size] + self.dbuf = self.dbuf[size:] + return buf + + def __read(self, size): + """Return size bytes from stream. If internal buffer is empty, + read another block from the stream. + """ + c = len(self.buf) + while c < size: + buf = self.fileobj.read(self.bufsize) + if not buf: + break + self.buf += buf + c += len(buf) + buf = self.buf[:size] + self.buf = self.buf[size:] + return buf +# class _Stream + +class _StreamProxy(object): + """Small proxy class that enables transparent compression + detection for the Stream interface (mode 'r|*'). + """ + + def __init__(self, fileobj): + self.fileobj = fileobj + self.buf = self.fileobj.read(BLOCKSIZE) + + def read(self, size): + self.read = self.fileobj.read + return self.buf + + def getcomptype(self): + if self.buf.startswith(b"\037\213\010"): + return "gz" + if self.buf.startswith(b"BZh91"): + return "bz2" + return "tar" + + def close(self): + self.fileobj.close() +# class StreamProxy + +class _BZ2Proxy(object): + """Small proxy class that enables external file object + support for "r:bz2" and "w:bz2" modes. This is actually + a workaround for a limitation in bz2 module's BZ2File + class which (unlike gzip.GzipFile) has no support for + a file object argument. + """ + + blocksize = 16 * 1024 + + def __init__(self, fileobj, mode): + self.fileobj = fileobj + self.mode = mode + self.name = getattr(self.fileobj, "name", None) + self.init() + + def init(self): + import bz2 + self.pos = 0 + if self.mode == "r": + self.bz2obj = bz2.BZ2Decompressor() + self.fileobj.seek(0) + self.buf = b"" + else: + self.bz2obj = bz2.BZ2Compressor() + + def read(self, size): + x = len(self.buf) + while x < size: + raw = self.fileobj.read(self.blocksize) + if not raw: + break + data = self.bz2obj.decompress(raw) + self.buf += data + x += len(data) + + buf = self.buf[:size] + self.buf = self.buf[size:] + self.pos += len(buf) + return buf + + def seek(self, pos): + if pos < self.pos: + self.init() + self.read(pos - self.pos) + + def tell(self): + return self.pos + + def write(self, data): + self.pos += len(data) + raw = self.bz2obj.compress(data) + self.fileobj.write(raw) + + def close(self): + if self.mode == "w": + raw = self.bz2obj.flush() + self.fileobj.write(raw) +# class _BZ2Proxy + +#------------------------ +# Extraction file object +#------------------------ +class _FileInFile(object): + """A thin wrapper around an existing file object that + provides a part of its data as an individual file + object. + """ + + def __init__(self, fileobj, offset, size, blockinfo=None): + self.fileobj = fileobj + self.offset = offset + self.size = size + self.position = 0 + + if blockinfo is None: + blockinfo = [(0, size)] + + # Construct a map with data and zero blocks. + self.map_index = 0 + self.map = [] + lastpos = 0 + realpos = self.offset + for offset, size in blockinfo: + if offset > lastpos: + self.map.append((False, lastpos, offset, None)) + self.map.append((True, offset, offset + size, realpos)) + realpos += size + lastpos = offset + size + if lastpos < self.size: + self.map.append((False, lastpos, self.size, None)) + + def seekable(self): + if not hasattr(self.fileobj, "seekable"): + # XXX gzip.GzipFile and bz2.BZ2File + return True + return self.fileobj.seekable() + + def tell(self): + """Return the current file position. + """ + return self.position + + def seek(self, position): + """Seek to a position in the file. + """ + self.position = position + + def read(self, size=None): + """Read data from the file. + """ + if size is None: + size = self.size - self.position + else: + size = min(size, self.size - self.position) + + buf = b"" + while size > 0: + while True: + data, start, stop, offset = self.map[self.map_index] + if start <= self.position < stop: + break + else: + self.map_index += 1 + if self.map_index == len(self.map): + self.map_index = 0 + length = min(size, stop - self.position) + if data: + self.fileobj.seek(offset + (self.position - start)) + buf += self.fileobj.read(length) + else: + buf += NUL * length + size -= length + self.position += length + return buf +#class _FileInFile + + +class ExFileObject(object): + """File-like object for reading an archive member. + Is returned by TarFile.extractfile(). + """ + blocksize = 1024 + + def __init__(self, tarfile, tarinfo): + self.fileobj = _FileInFile(tarfile.fileobj, + tarinfo.offset_data, + tarinfo.size, + tarinfo.sparse) + self.name = tarinfo.name + self.mode = "r" + self.closed = False + self.size = tarinfo.size + + self.position = 0 + self.buffer = b"" + + def readable(self): + return True + + def writable(self): + return False + + def seekable(self): + return self.fileobj.seekable() + + def read(self, size=None): + """Read at most size bytes from the file. If size is not + present or None, read all data until EOF is reached. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + buf = b"" + if self.buffer: + if size is None: + buf = self.buffer + self.buffer = b"" + else: + buf = self.buffer[:size] + self.buffer = self.buffer[size:] + + if size is None: + buf += self.fileobj.read() + else: + buf += self.fileobj.read(size - len(buf)) + + self.position += len(buf) + return buf + + # XXX TextIOWrapper uses the read1() method. + read1 = read + + def readline(self, size=-1): + """Read one entire line from the file. If size is present + and non-negative, return a string with at most that + size, which may be an incomplete line. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + pos = self.buffer.find(b"\n") + 1 + if pos == 0: + # no newline found. + while True: + buf = self.fileobj.read(self.blocksize) + self.buffer += buf + if not buf or b"\n" in buf: + pos = self.buffer.find(b"\n") + 1 + if pos == 0: + # no newline found. + pos = len(self.buffer) + break + + if size != -1: + pos = min(size, pos) + + buf = self.buffer[:pos] + self.buffer = self.buffer[pos:] + self.position += len(buf) + return buf + + def readlines(self): + """Return a list with all remaining lines. + """ + result = [] + while True: + line = self.readline() + if not line: break + result.append(line) + return result + + def tell(self): + """Return the current file position. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + return self.position + + def seek(self, pos, whence=os.SEEK_SET): + """Seek to a position in the file. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + if whence == os.SEEK_SET: + self.position = min(max(pos, 0), self.size) + elif whence == os.SEEK_CUR: + if pos < 0: + self.position = max(self.position + pos, 0) + else: + self.position = min(self.position + pos, self.size) + elif whence == os.SEEK_END: + self.position = max(min(self.size + pos, self.size), 0) + else: + raise ValueError("Invalid argument") + + self.buffer = b"" + self.fileobj.seek(self.position) + + def close(self): + """Close the file object. + """ + self.closed = True + + def __iter__(self): + """Get an iterator over the file's lines. + """ + while True: + line = self.readline() + if not line: + break + yield line +#class ExFileObject + +#------------------ +# Exported Classes +#------------------ +class TarInfo(object): + """Informational class which holds the details about an + archive member given by a tar header block. + TarInfo objects are returned by TarFile.getmember(), + TarFile.getmembers() and TarFile.gettarinfo() and are + usually created internally. + """ + + __slots__ = ("name", "mode", "uid", "gid", "size", "mtime", + "chksum", "type", "linkname", "uname", "gname", + "devmajor", "devminor", + "offset", "offset_data", "pax_headers", "sparse", + "tarfile", "_sparse_structs", "_link_target") + + def __init__(self, name=""): + """Construct a TarInfo object. name is the optional name + of the member. + """ + self.name = name # member name + self.mode = 0o644 # file permissions + self.uid = 0 # user id + self.gid = 0 # group id + self.size = 0 # file size + self.mtime = 0 # modification time + self.chksum = 0 # header checksum + self.type = REGTYPE # member type + self.linkname = "" # link name + self.uname = "" # user name + self.gname = "" # group name + self.devmajor = 0 # device major number + self.devminor = 0 # device minor number + + self.offset = 0 # the tar header starts here + self.offset_data = 0 # the file's data starts here + + self.sparse = None # sparse member information + self.pax_headers = {} # pax header information + + # In pax headers the "name" and "linkname" field are called + # "path" and "linkpath". + def _getpath(self): + return self.name + def _setpath(self, name): + self.name = name + path = property(_getpath, _setpath) + + def _getlinkpath(self): + return self.linkname + def _setlinkpath(self, linkname): + self.linkname = linkname + linkpath = property(_getlinkpath, _setlinkpath) + + def __repr__(self): + return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self)) + + def get_info(self): + """Return the TarInfo's attributes as a dictionary. + """ + info = { + "name": self.name, + "mode": self.mode & 0o7777, + "uid": self.uid, + "gid": self.gid, + "size": self.size, + "mtime": self.mtime, + "chksum": self.chksum, + "type": self.type, + "linkname": self.linkname, + "uname": self.uname, + "gname": self.gname, + "devmajor": self.devmajor, + "devminor": self.devminor + } + + if info["type"] == DIRTYPE and not info["name"].endswith("/"): + info["name"] += "/" + + return info + + def tobuf(self, format=DEFAULT_FORMAT, encoding=ENCODING, errors="surrogateescape"): + """Return a tar header as a string of 512 byte blocks. + """ + info = self.get_info() + + if format == USTAR_FORMAT: + return self.create_ustar_header(info, encoding, errors) + elif format == GNU_FORMAT: + return self.create_gnu_header(info, encoding, errors) + elif format == PAX_FORMAT: + return self.create_pax_header(info, encoding) + else: + raise ValueError("invalid format") + + def create_ustar_header(self, info, encoding, errors): + """Return the object as a ustar header block. + """ + info["magic"] = POSIX_MAGIC + + if len(info["linkname"]) > LENGTH_LINK: + raise ValueError("linkname is too long") + + if len(info["name"]) > LENGTH_NAME: + info["prefix"], info["name"] = self._posix_split_name(info["name"]) + + return self._create_header(info, USTAR_FORMAT, encoding, errors) + + def create_gnu_header(self, info, encoding, errors): + """Return the object as a GNU header block sequence. + """ + info["magic"] = GNU_MAGIC + + buf = b"" + if len(info["linkname"]) > LENGTH_LINK: + buf += self._create_gnu_long_header(info["linkname"], GNUTYPE_LONGLINK, encoding, errors) + + if len(info["name"]) > LENGTH_NAME: + buf += self._create_gnu_long_header(info["name"], GNUTYPE_LONGNAME, encoding, errors) + + return buf + self._create_header(info, GNU_FORMAT, encoding, errors) + + def create_pax_header(self, info, encoding): + """Return the object as a ustar header block. If it cannot be + represented this way, prepend a pax extended header sequence + with supplement information. + """ + info["magic"] = POSIX_MAGIC + pax_headers = self.pax_headers.copy() + + # Test string fields for values that exceed the field length or cannot + # be represented in ASCII encoding. + for name, hname, length in ( + ("name", "path", LENGTH_NAME), ("linkname", "linkpath", LENGTH_LINK), + ("uname", "uname", 32), ("gname", "gname", 32)): + + if hname in pax_headers: + # The pax header has priority. + continue + + # Try to encode the string as ASCII. + try: + info[name].encode("ascii", "strict") + except UnicodeEncodeError: + pax_headers[hname] = info[name] + continue + + if len(info[name]) > length: + pax_headers[hname] = info[name] + + # Test number fields for values that exceed the field limit or values + # that like to be stored as float. + for name, digits in (("uid", 8), ("gid", 8), ("size", 12), ("mtime", 12)): + if name in pax_headers: + # The pax header has priority. Avoid overflow. + info[name] = 0 + continue + + val = info[name] + if not 0 <= val < 8 ** (digits - 1) or isinstance(val, float): + pax_headers[name] = str(val) + info[name] = 0 + + # Create a pax extended header if necessary. + if pax_headers: + buf = self._create_pax_generic_header(pax_headers, XHDTYPE, encoding) + else: + buf = b"" + + return buf + self._create_header(info, USTAR_FORMAT, "ascii", "replace") + + @classmethod + def create_pax_global_header(cls, pax_headers): + """Return the object as a pax global header block sequence. + """ + return cls._create_pax_generic_header(pax_headers, XGLTYPE, "utf8") + + def _posix_split_name(self, name): + """Split a name longer than 100 chars into a prefix + and a name part. + """ + prefix = name[:LENGTH_PREFIX + 1] + while prefix and prefix[-1] != "/": + prefix = prefix[:-1] + + name = name[len(prefix):] + prefix = prefix[:-1] + + if not prefix or len(name) > LENGTH_NAME: + raise ValueError("name is too long") + return prefix, name + + @staticmethod + def _create_header(info, format, encoding, errors): + """Return a header block. info is a dictionary with file + information, format must be one of the *_FORMAT constants. + """ + parts = [ + stn(info.get("name", ""), 100, encoding, errors), + itn(info.get("mode", 0) & 0o7777, 8, format), + itn(info.get("uid", 0), 8, format), + itn(info.get("gid", 0), 8, format), + itn(info.get("size", 0), 12, format), + itn(info.get("mtime", 0), 12, format), + b" ", # checksum field + info.get("type", REGTYPE), + stn(info.get("linkname", ""), 100, encoding, errors), + info.get("magic", POSIX_MAGIC), + stn(info.get("uname", ""), 32, encoding, errors), + stn(info.get("gname", ""), 32, encoding, errors), + itn(info.get("devmajor", 0), 8, format), + itn(info.get("devminor", 0), 8, format), + stn(info.get("prefix", ""), 155, encoding, errors) + ] + + buf = struct.pack("%ds" % BLOCKSIZE, b"".join(parts)) + chksum = calc_chksums(buf[-BLOCKSIZE:])[0] + buf = buf[:-364] + ("%06o\0" % chksum).encode("ascii") + buf[-357:] + return buf + + @staticmethod + def _create_payload(payload): + """Return the string payload filled with zero bytes + up to the next 512 byte border. + """ + blocks, remainder = divmod(len(payload), BLOCKSIZE) + if remainder > 0: + payload += (BLOCKSIZE - remainder) * NUL + return payload + + @classmethod + def _create_gnu_long_header(cls, name, type, encoding, errors): + """Return a GNUTYPE_LONGNAME or GNUTYPE_LONGLINK sequence + for name. + """ + name = name.encode(encoding, errors) + NUL + + info = {} + info["name"] = "././@LongLink" + info["type"] = type + info["size"] = len(name) + info["magic"] = GNU_MAGIC + + # create extended header + name blocks. + return cls._create_header(info, USTAR_FORMAT, encoding, errors) + \ + cls._create_payload(name) + + @classmethod + def _create_pax_generic_header(cls, pax_headers, type, encoding): + """Return a POSIX.1-2008 extended or global header sequence + that contains a list of keyword, value pairs. The values + must be strings. + """ + # Check if one of the fields contains surrogate characters and thereby + # forces hdrcharset=BINARY, see _proc_pax() for more information. + binary = False + for keyword, value in pax_headers.items(): + try: + value.encode("utf8", "strict") + except UnicodeEncodeError: + binary = True + break + + records = b"" + if binary: + # Put the hdrcharset field at the beginning of the header. + records += b"21 hdrcharset=BINARY\n" + + for keyword, value in pax_headers.items(): + keyword = keyword.encode("utf8") + if binary: + # Try to restore the original byte representation of `value'. + # Needless to say, that the encoding must match the string. + value = value.encode(encoding, "surrogateescape") + else: + value = value.encode("utf8") + + l = len(keyword) + len(value) + 3 # ' ' + '=' + '\n' + n = p = 0 + while True: + n = l + len(str(p)) + if n == p: + break + p = n + records += bytes(str(p), "ascii") + b" " + keyword + b"=" + value + b"\n" + + # We use a hardcoded "././@PaxHeader" name like star does + # instead of the one that POSIX recommends. + info = {} + info["name"] = "././@PaxHeader" + info["type"] = type + info["size"] = len(records) + info["magic"] = POSIX_MAGIC + + # Create pax header + record blocks. + return cls._create_header(info, USTAR_FORMAT, "ascii", "replace") + \ + cls._create_payload(records) + + @classmethod + def frombuf(cls, buf, encoding, errors): + """Construct a TarInfo object from a 512 byte bytes object. + """ + if len(buf) == 0: + raise EmptyHeaderError("empty header") + if len(buf) != BLOCKSIZE: + raise TruncatedHeaderError("truncated header") + if buf.count(NUL) == BLOCKSIZE: + raise EOFHeaderError("end of file header") + + chksum = nti(buf[148:156]) + if chksum not in calc_chksums(buf): + raise InvalidHeaderError("bad checksum") + + obj = cls() + obj.name = nts(buf[0:100], encoding, errors) + obj.mode = nti(buf[100:108]) + obj.uid = nti(buf[108:116]) + obj.gid = nti(buf[116:124]) + obj.size = nti(buf[124:136]) + obj.mtime = nti(buf[136:148]) + obj.chksum = chksum + obj.type = buf[156:157] + obj.linkname = nts(buf[157:257], encoding, errors) + obj.uname = nts(buf[265:297], encoding, errors) + obj.gname = nts(buf[297:329], encoding, errors) + obj.devmajor = nti(buf[329:337]) + obj.devminor = nti(buf[337:345]) + prefix = nts(buf[345:500], encoding, errors) + + # Old V7 tar format represents a directory as a regular + # file with a trailing slash. + if obj.type == AREGTYPE and obj.name.endswith("/"): + obj.type = DIRTYPE + + # The old GNU sparse format occupies some of the unused + # space in the buffer for up to 4 sparse structures. + # Save the them for later processing in _proc_sparse(). + if obj.type == GNUTYPE_SPARSE: + pos = 386 + structs = [] + for i in range(4): + try: + offset = nti(buf[pos:pos + 12]) + numbytes = nti(buf[pos + 12:pos + 24]) + except ValueError: + break + structs.append((offset, numbytes)) + pos += 24 + isextended = bool(buf[482]) + origsize = nti(buf[483:495]) + obj._sparse_structs = (structs, isextended, origsize) + + # Remove redundant slashes from directories. + if obj.isdir(): + obj.name = obj.name.rstrip("/") + + # Reconstruct a ustar longname. + if prefix and obj.type not in GNU_TYPES: + obj.name = prefix + "/" + obj.name + return obj + + @classmethod + def fromtarfile(cls, tarfile): + """Return the next TarInfo object from TarFile object + tarfile. + """ + buf = tarfile.fileobj.read(BLOCKSIZE) + obj = cls.frombuf(buf, tarfile.encoding, tarfile.errors) + obj.offset = tarfile.fileobj.tell() - BLOCKSIZE + return obj._proc_member(tarfile) + + #-------------------------------------------------------------------------- + # The following are methods that are called depending on the type of a + # member. The entry point is _proc_member() which can be overridden in a + # subclass to add custom _proc_*() methods. A _proc_*() method MUST + # implement the following + # operations: + # 1. Set self.offset_data to the position where the data blocks begin, + # if there is data that follows. + # 2. Set tarfile.offset to the position where the next member's header will + # begin. + # 3. Return self or another valid TarInfo object. + def _proc_member(self, tarfile): + """Choose the right processing method depending on + the type and call it. + """ + if self.type in (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK): + return self._proc_gnulong(tarfile) + elif self.type == GNUTYPE_SPARSE: + return self._proc_sparse(tarfile) + elif self.type in (XHDTYPE, XGLTYPE, SOLARIS_XHDTYPE): + return self._proc_pax(tarfile) + else: + return self._proc_builtin(tarfile) + + def _proc_builtin(self, tarfile): + """Process a builtin type or an unknown type which + will be treated as a regular file. + """ + self.offset_data = tarfile.fileobj.tell() + offset = self.offset_data + if self.isreg() or self.type not in SUPPORTED_TYPES: + # Skip the following data blocks. + offset += self._block(self.size) + tarfile.offset = offset + + # Patch the TarInfo object with saved global + # header information. + self._apply_pax_info(tarfile.pax_headers, tarfile.encoding, tarfile.errors) + + return self + + def _proc_gnulong(self, tarfile): + """Process the blocks that hold a GNU longname + or longlink member. + """ + buf = tarfile.fileobj.read(self._block(self.size)) + + # Fetch the next header and process it. + try: + next = self.fromtarfile(tarfile) + except HeaderError: + raise SubsequentHeaderError("missing or bad subsequent header") + + # Patch the TarInfo object from the next header with + # the longname information. + next.offset = self.offset + if self.type == GNUTYPE_LONGNAME: + next.name = nts(buf, tarfile.encoding, tarfile.errors) + elif self.type == GNUTYPE_LONGLINK: + next.linkname = nts(buf, tarfile.encoding, tarfile.errors) + + return next + + def _proc_sparse(self, tarfile): + """Process a GNU sparse header plus extra headers. + """ + # We already collected some sparse structures in frombuf(). + structs, isextended, origsize = self._sparse_structs + del self._sparse_structs + + # Collect sparse structures from extended header blocks. + while isextended: + buf = tarfile.fileobj.read(BLOCKSIZE) + pos = 0 + for i in range(21): + try: + offset = nti(buf[pos:pos + 12]) + numbytes = nti(buf[pos + 12:pos + 24]) + except ValueError: + break + if offset and numbytes: + structs.append((offset, numbytes)) + pos += 24 + isextended = bool(buf[504]) + self.sparse = structs + + self.offset_data = tarfile.fileobj.tell() + tarfile.offset = self.offset_data + self._block(self.size) + self.size = origsize + return self + + def _proc_pax(self, tarfile): + """Process an extended or global header as described in + POSIX.1-2008. + """ + # Read the header information. + buf = tarfile.fileobj.read(self._block(self.size)) + + # A pax header stores supplemental information for either + # the following file (extended) or all following files + # (global). + if self.type == XGLTYPE: + pax_headers = tarfile.pax_headers + else: + pax_headers = tarfile.pax_headers.copy() + + # Check if the pax header contains a hdrcharset field. This tells us + # the encoding of the path, linkpath, uname and gname fields. Normally, + # these fields are UTF-8 encoded but since POSIX.1-2008 tar + # implementations are allowed to store them as raw binary strings if + # the translation to UTF-8 fails. + match = re.search(br"\d+ hdrcharset=([^\n]+)\n", buf) + if match is not None: + pax_headers["hdrcharset"] = match.group(1).decode("utf8") + + # For the time being, we don't care about anything other than "BINARY". + # The only other value that is currently allowed by the standard is + # "ISO-IR 10646 2000 UTF-8" in other words UTF-8. + hdrcharset = pax_headers.get("hdrcharset") + if hdrcharset == "BINARY": + encoding = tarfile.encoding + else: + encoding = "utf8" + + # Parse pax header information. A record looks like that: + # "%d %s=%s\n" % (length, keyword, value). length is the size + # of the complete record including the length field itself and + # the newline. keyword and value are both UTF-8 encoded strings. + regex = re.compile(br"(\d+) ([^=]+)=") + pos = 0 + while True: + match = regex.match(buf, pos) + if not match: + break + + length, keyword = match.groups() + length = int(length) + value = buf[match.end(2) + 1:match.start(1) + length - 1] + + # Normally, we could just use "utf8" as the encoding and "strict" + # as the error handler, but we better not take the risk. For + # example, GNU tar <= 1.23 is known to store filenames it cannot + # translate to UTF-8 as raw strings (unfortunately without a + # hdrcharset=BINARY header). + # We first try the strict standard encoding, and if that fails we + # fall back on the user's encoding and error handler. + keyword = self._decode_pax_field(keyword, "utf8", "utf8", + tarfile.errors) + if keyword in PAX_NAME_FIELDS: + value = self._decode_pax_field(value, encoding, tarfile.encoding, + tarfile.errors) + else: + value = self._decode_pax_field(value, "utf8", "utf8", + tarfile.errors) + + pax_headers[keyword] = value + pos += length + + # Fetch the next header. + try: + next = self.fromtarfile(tarfile) + except HeaderError: + raise SubsequentHeaderError("missing or bad subsequent header") + + # Process GNU sparse information. + if "GNU.sparse.map" in pax_headers: + # GNU extended sparse format version 0.1. + self._proc_gnusparse_01(next, pax_headers) + + elif "GNU.sparse.size" in pax_headers: + # GNU extended sparse format version 0.0. + self._proc_gnusparse_00(next, pax_headers, buf) + + elif pax_headers.get("GNU.sparse.major") == "1" and pax_headers.get("GNU.sparse.minor") == "0": + # GNU extended sparse format version 1.0. + self._proc_gnusparse_10(next, pax_headers, tarfile) + + if self.type in (XHDTYPE, SOLARIS_XHDTYPE): + # Patch the TarInfo object with the extended header info. + next._apply_pax_info(pax_headers, tarfile.encoding, tarfile.errors) + next.offset = self.offset + + if "size" in pax_headers: + # If the extended header replaces the size field, + # we need to recalculate the offset where the next + # header starts. + offset = next.offset_data + if next.isreg() or next.type not in SUPPORTED_TYPES: + offset += next._block(next.size) + tarfile.offset = offset + + return next + + def _proc_gnusparse_00(self, next, pax_headers, buf): + """Process a GNU tar extended sparse header, version 0.0. + """ + offsets = [] + for match in re.finditer(br"\d+ GNU.sparse.offset=(\d+)\n", buf): + offsets.append(int(match.group(1))) + numbytes = [] + for match in re.finditer(br"\d+ GNU.sparse.numbytes=(\d+)\n", buf): + numbytes.append(int(match.group(1))) + next.sparse = list(zip(offsets, numbytes)) + + def _proc_gnusparse_01(self, next, pax_headers): + """Process a GNU tar extended sparse header, version 0.1. + """ + sparse = [int(x) for x in pax_headers["GNU.sparse.map"].split(",")] + next.sparse = list(zip(sparse[::2], sparse[1::2])) + + def _proc_gnusparse_10(self, next, pax_headers, tarfile): + """Process a GNU tar extended sparse header, version 1.0. + """ + fields = None + sparse = [] + buf = tarfile.fileobj.read(BLOCKSIZE) + fields, buf = buf.split(b"\n", 1) + fields = int(fields) + while len(sparse) < fields * 2: + if b"\n" not in buf: + buf += tarfile.fileobj.read(BLOCKSIZE) + number, buf = buf.split(b"\n", 1) + sparse.append(int(number)) + next.offset_data = tarfile.fileobj.tell() + next.sparse = list(zip(sparse[::2], sparse[1::2])) + + def _apply_pax_info(self, pax_headers, encoding, errors): + """Replace fields with supplemental information from a previous + pax extended or global header. + """ + for keyword, value in pax_headers.items(): + if keyword == "GNU.sparse.name": + setattr(self, "path", value) + elif keyword == "GNU.sparse.size": + setattr(self, "size", int(value)) + elif keyword == "GNU.sparse.realsize": + setattr(self, "size", int(value)) + elif keyword in PAX_FIELDS: + if keyword in PAX_NUMBER_FIELDS: + try: + value = PAX_NUMBER_FIELDS[keyword](value) + except ValueError: + value = 0 + if keyword == "path": + value = value.rstrip("/") + setattr(self, keyword, value) + + self.pax_headers = pax_headers.copy() + + def _decode_pax_field(self, value, encoding, fallback_encoding, fallback_errors): + """Decode a single field from a pax record. + """ + try: + return value.decode(encoding, "strict") + except UnicodeDecodeError: + return value.decode(fallback_encoding, fallback_errors) + + def _block(self, count): + """Round up a byte count by BLOCKSIZE and return it, + e.g. _block(834) => 1024. + """ + blocks, remainder = divmod(count, BLOCKSIZE) + if remainder: + blocks += 1 + return blocks * BLOCKSIZE + + def isreg(self): + return self.type in REGULAR_TYPES + def isfile(self): + return self.isreg() + def isdir(self): + return self.type == DIRTYPE + def issym(self): + return self.type == SYMTYPE + def islnk(self): + return self.type == LNKTYPE + def ischr(self): + return self.type == CHRTYPE + def isblk(self): + return self.type == BLKTYPE + def isfifo(self): + return self.type == FIFOTYPE + def issparse(self): + return self.sparse is not None + def isdev(self): + return self.type in (CHRTYPE, BLKTYPE, FIFOTYPE) +# class TarInfo + +class TarFile(object): + """The TarFile Class provides an interface to tar archives. + """ + + debug = 0 # May be set from 0 (no msgs) to 3 (all msgs) + + dereference = False # If true, add content of linked file to the + # tar file, else the link. + + ignore_zeros = False # If true, skips empty or invalid blocks and + # continues processing. + + errorlevel = 1 # If 0, fatal errors only appear in debug + # messages (if debug >= 0). If > 0, errors + # are passed to the caller as exceptions. + + format = DEFAULT_FORMAT # The format to use when creating an archive. + + encoding = ENCODING # Encoding for 8-bit character strings. + + errors = None # Error handler for unicode conversion. + + tarinfo = TarInfo # The default TarInfo class to use. + + fileobject = ExFileObject # The default ExFileObject class to use. + + def __init__(self, name=None, mode="r", fileobj=None, format=None, + tarinfo=None, dereference=None, ignore_zeros=None, encoding=None, + errors="surrogateescape", pax_headers=None, debug=None, errorlevel=None): + """Open an (uncompressed) tar archive `name'. `mode' is either 'r' to + read from an existing archive, 'a' to append data to an existing + file or 'w' to create a new file overwriting an existing one. `mode' + defaults to 'r'. + If `fileobj' is given, it is used for reading or writing data. If it + can be determined, `mode' is overridden by `fileobj's mode. + `fileobj' is not closed, when TarFile is closed. + """ + if len(mode) > 1 or mode not in "raw": + raise ValueError("mode must be 'r', 'a' or 'w'") + self.mode = mode + self._mode = {"r": "rb", "a": "r+b", "w": "wb"}[mode] + + if not fileobj: + if self.mode == "a" and not os.path.exists(name): + # Create nonexistent files in append mode. + self.mode = "w" + self._mode = "wb" + fileobj = bltn_open(name, self._mode) + self._extfileobj = False + else: + if name is None and hasattr(fileobj, "name"): + name = fileobj.name + if hasattr(fileobj, "mode"): + self._mode = fileobj.mode + self._extfileobj = True + self.name = os.path.abspath(name) if name else None + self.fileobj = fileobj + + # Init attributes. + if format is not None: + self.format = format + if tarinfo is not None: + self.tarinfo = tarinfo + if dereference is not None: + self.dereference = dereference + if ignore_zeros is not None: + self.ignore_zeros = ignore_zeros + if encoding is not None: + self.encoding = encoding + self.errors = errors + + if pax_headers is not None and self.format == PAX_FORMAT: + self.pax_headers = pax_headers + else: + self.pax_headers = {} + + if debug is not None: + self.debug = debug + if errorlevel is not None: + self.errorlevel = errorlevel + + # Init datastructures. + self.closed = False + self.members = [] # list of members as TarInfo objects + self._loaded = False # flag if all members have been read + self.offset = self.fileobj.tell() + # current position in the archive file + self.inodes = {} # dictionary caching the inodes of + # archive members already added + + try: + if self.mode == "r": + self.firstmember = None + self.firstmember = self.next() + + if self.mode == "a": + # Move to the end of the archive, + # before the first empty block. + while True: + self.fileobj.seek(self.offset) + try: + tarinfo = self.tarinfo.fromtarfile(self) + self.members.append(tarinfo) + except EOFHeaderError: + self.fileobj.seek(self.offset) + break + except HeaderError as e: + raise ReadError(str(e)) + + if self.mode in "aw": + self._loaded = True + + if self.pax_headers: + buf = self.tarinfo.create_pax_global_header(self.pax_headers.copy()) + self.fileobj.write(buf) + self.offset += len(buf) + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise + + #-------------------------------------------------------------------------- + # Below are the classmethods which act as alternate constructors to the + # TarFile class. The open() method is the only one that is needed for + # public use; it is the "super"-constructor and is able to select an + # adequate "sub"-constructor for a particular compression using the mapping + # from OPEN_METH. + # + # This concept allows one to subclass TarFile without losing the comfort of + # the super-constructor. A sub-constructor is registered and made available + # by adding it to the mapping in OPEN_METH. + + @classmethod + def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): + """Open a tar archive for reading, writing or appending. Return + an appropriate TarFile class. + + mode: + 'r' or 'r:*' open for reading with transparent compression + 'r:' open for reading exclusively uncompressed + 'r:gz' open for reading with gzip compression + 'r:bz2' open for reading with bzip2 compression + 'a' or 'a:' open for appending, creating the file if necessary + 'w' or 'w:' open for writing without compression + 'w:gz' open for writing with gzip compression + 'w:bz2' open for writing with bzip2 compression + + 'r|*' open a stream of tar blocks with transparent compression + 'r|' open an uncompressed stream of tar blocks for reading + 'r|gz' open a gzip compressed stream of tar blocks + 'r|bz2' open a bzip2 compressed stream of tar blocks + 'w|' open an uncompressed stream for writing + 'w|gz' open a gzip compressed stream for writing + 'w|bz2' open a bzip2 compressed stream for writing + """ + + if not name and not fileobj: + raise ValueError("nothing to open") + + if mode in ("r", "r:*"): + # Find out which *open() is appropriate for opening the file. + for comptype in cls.OPEN_METH: + func = getattr(cls, cls.OPEN_METH[comptype]) + if fileobj is not None: + saved_pos = fileobj.tell() + try: + return func(name, "r", fileobj, **kwargs) + except (ReadError, CompressionError) as e: + if fileobj is not None: + fileobj.seek(saved_pos) + continue + raise ReadError("file could not be opened successfully") + + elif ":" in mode: + filemode, comptype = mode.split(":", 1) + filemode = filemode or "r" + comptype = comptype or "tar" + + # Select the *open() function according to + # given compression. + if comptype in cls.OPEN_METH: + func = getattr(cls, cls.OPEN_METH[comptype]) + else: + raise CompressionError("unknown compression type %r" % comptype) + return func(name, filemode, fileobj, **kwargs) + + elif "|" in mode: + filemode, comptype = mode.split("|", 1) + filemode = filemode or "r" + comptype = comptype or "tar" + + if filemode not in "rw": + raise ValueError("mode must be 'r' or 'w'") + + stream = _Stream(name, filemode, comptype, fileobj, bufsize) + try: + t = cls(name, filemode, stream, **kwargs) + except: + stream.close() + raise + t._extfileobj = False + return t + + elif mode in "aw": + return cls.taropen(name, mode, fileobj, **kwargs) + + raise ValueError("undiscernible mode") + + @classmethod + def taropen(cls, name, mode="r", fileobj=None, **kwargs): + """Open uncompressed tar archive name for reading or writing. + """ + if len(mode) > 1 or mode not in "raw": + raise ValueError("mode must be 'r', 'a' or 'w'") + return cls(name, mode, fileobj, **kwargs) + + @classmethod + def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): + """Open gzip compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if len(mode) > 1 or mode not in "rw": + raise ValueError("mode must be 'r' or 'w'") + + try: + import gzip + gzip.GzipFile + except (ImportError, AttributeError): + raise CompressionError("gzip module is not available") + + extfileobj = fileobj is not None + try: + fileobj = gzip.GzipFile(name, mode + "b", compresslevel, fileobj) + t = cls.taropen(name, mode, fileobj, **kwargs) + except IOError: + if not extfileobj and fileobj is not None: + fileobj.close() + if fileobj is None: + raise + raise ReadError("not a gzip file") + except: + if not extfileobj and fileobj is not None: + fileobj.close() + raise + t._extfileobj = extfileobj + return t + + @classmethod + def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): + """Open bzip2 compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if len(mode) > 1 or mode not in "rw": + raise ValueError("mode must be 'r' or 'w'.") + + try: + import bz2 + except ImportError: + raise CompressionError("bz2 module is not available") + + if fileobj is not None: + fileobj = _BZ2Proxy(fileobj, mode) + else: + fileobj = bz2.BZ2File(name, mode, compresslevel=compresslevel) + + try: + t = cls.taropen(name, mode, fileobj, **kwargs) + except (IOError, EOFError): + fileobj.close() + raise ReadError("not a bzip2 file") + t._extfileobj = False + return t + + # All *open() methods are registered here. + OPEN_METH = { + "tar": "taropen", # uncompressed tar + "gz": "gzopen", # gzip compressed tar + "bz2": "bz2open" # bzip2 compressed tar + } + + #-------------------------------------------------------------------------- + # The public methods which TarFile provides: + + def close(self): + """Close the TarFile. In write-mode, two finishing zero blocks are + appended to the archive. + """ + if self.closed: + return + + if self.mode in "aw": + self.fileobj.write(NUL * (BLOCKSIZE * 2)) + self.offset += (BLOCKSIZE * 2) + # fill up the end with zero-blocks + # (like option -b20 for tar does) + blocks, remainder = divmod(self.offset, RECORDSIZE) + if remainder > 0: + self.fileobj.write(NUL * (RECORDSIZE - remainder)) + + if not self._extfileobj: + self.fileobj.close() + self.closed = True + + def getmember(self, name): + """Return a TarInfo object for member `name'. If `name' can not be + found in the archive, KeyError is raised. If a member occurs more + than once in the archive, its last occurrence is assumed to be the + most up-to-date version. + """ + tarinfo = self._getmember(name) + if tarinfo is None: + raise KeyError("filename %r not found" % name) + return tarinfo + + def getmembers(self): + """Return the members of the archive as a list of TarInfo objects. The + list has the same order as the members in the archive. + """ + self._check() + if not self._loaded: # if we want to obtain a list of + self._load() # all members, we first have to + # scan the whole archive. + return self.members + + def getnames(self): + """Return the members of the archive as a list of their names. It has + the same order as the list returned by getmembers(). + """ + return [tarinfo.name for tarinfo in self.getmembers()] + + def gettarinfo(self, name=None, arcname=None, fileobj=None): + """Create a TarInfo object for either the file `name' or the file + object `fileobj' (using os.fstat on its file descriptor). You can + modify some of the TarInfo's attributes before you add it using + addfile(). If given, `arcname' specifies an alternative name for the + file in the archive. + """ + self._check("aw") + + # When fileobj is given, replace name by + # fileobj's real name. + if fileobj is not None: + name = fileobj.name + + # Building the name of the member in the archive. + # Backward slashes are converted to forward slashes, + # Absolute paths are turned to relative paths. + if arcname is None: + arcname = name + drv, arcname = os.path.splitdrive(arcname) + arcname = arcname.replace(os.sep, "/") + arcname = arcname.lstrip("/") + + # Now, fill the TarInfo object with + # information specific for the file. + tarinfo = self.tarinfo() + tarinfo.tarfile = self + + # Use os.stat or os.lstat, depending on platform + # and if symlinks shall be resolved. + if fileobj is None: + if hasattr(os, "lstat") and not self.dereference: + statres = os.lstat(name) + else: + statres = os.stat(name) + else: + statres = os.fstat(fileobj.fileno()) + linkname = "" + + stmd = statres.st_mode + if stat.S_ISREG(stmd): + inode = (statres.st_ino, statres.st_dev) + if not self.dereference and statres.st_nlink > 1 and \ + inode in self.inodes and arcname != self.inodes[inode]: + # Is it a hardlink to an already + # archived file? + type = LNKTYPE + linkname = self.inodes[inode] + else: + # The inode is added only if its valid. + # For win32 it is always 0. + type = REGTYPE + if inode[0]: + self.inodes[inode] = arcname + elif stat.S_ISDIR(stmd): + type = DIRTYPE + elif stat.S_ISFIFO(stmd): + type = FIFOTYPE + elif stat.S_ISLNK(stmd): + type = SYMTYPE + linkname = os.readlink(name) + elif stat.S_ISCHR(stmd): + type = CHRTYPE + elif stat.S_ISBLK(stmd): + type = BLKTYPE + else: + return None + + # Fill the TarInfo object with all + # information we can get. + tarinfo.name = arcname + tarinfo.mode = stmd + tarinfo.uid = statres.st_uid + tarinfo.gid = statres.st_gid + if type == REGTYPE: + tarinfo.size = statres.st_size + else: + tarinfo.size = 0 + tarinfo.mtime = statres.st_mtime + tarinfo.type = type + tarinfo.linkname = linkname + if pwd: + try: + tarinfo.uname = pwd.getpwuid(tarinfo.uid)[0] + except KeyError: + pass + if grp: + try: + tarinfo.gname = grp.getgrgid(tarinfo.gid)[0] + except KeyError: + pass + + if type in (CHRTYPE, BLKTYPE): + if hasattr(os, "major") and hasattr(os, "minor"): + tarinfo.devmajor = os.major(statres.st_rdev) + tarinfo.devminor = os.minor(statres.st_rdev) + return tarinfo + + def list(self, verbose=True): + """Print a table of contents to sys.stdout. If `verbose' is False, only + the names of the members are printed. If it is True, an `ls -l'-like + output is produced. + """ + self._check() + + for tarinfo in self: + if verbose: + print(filemode(tarinfo.mode), end=' ') + print("%s/%s" % (tarinfo.uname or tarinfo.uid, + tarinfo.gname or tarinfo.gid), end=' ') + if tarinfo.ischr() or tarinfo.isblk(): + print("%10s" % ("%d,%d" \ + % (tarinfo.devmajor, tarinfo.devminor)), end=' ') + else: + print("%10d" % tarinfo.size, end=' ') + print("%d-%02d-%02d %02d:%02d:%02d" \ + % time.localtime(tarinfo.mtime)[:6], end=' ') + + print(tarinfo.name + ("/" if tarinfo.isdir() else ""), end=' ') + + if verbose: + if tarinfo.issym(): + print("->", tarinfo.linkname, end=' ') + if tarinfo.islnk(): + print("link to", tarinfo.linkname, end=' ') + print() + + def add(self, name, arcname=None, recursive=True, exclude=None, filter=None): + """Add the file `name' to the archive. `name' may be any type of file + (directory, fifo, symbolic link, etc.). If given, `arcname' + specifies an alternative name for the file in the archive. + Directories are added recursively by default. This can be avoided by + setting `recursive' to False. `exclude' is a function that should + return True for each filename to be excluded. `filter' is a function + that expects a TarInfo object argument and returns the changed + TarInfo object, if it returns None the TarInfo object will be + excluded from the archive. + """ + self._check("aw") + + if arcname is None: + arcname = name + + # Exclude pathnames. + if exclude is not None: + import warnings + warnings.warn("use the filter argument instead", + DeprecationWarning, 2) + if exclude(name): + self._dbg(2, "tarfile: Excluded %r" % name) + return + + # Skip if somebody tries to archive the archive... + if self.name is not None and os.path.abspath(name) == self.name: + self._dbg(2, "tarfile: Skipped %r" % name) + return + + self._dbg(1, name) + + # Create a TarInfo object from the file. + tarinfo = self.gettarinfo(name, arcname) + + if tarinfo is None: + self._dbg(1, "tarfile: Unsupported type %r" % name) + return + + # Change or exclude the TarInfo object. + if filter is not None: + tarinfo = filter(tarinfo) + if tarinfo is None: + self._dbg(2, "tarfile: Excluded %r" % name) + return + + # Append the tar header and data to the archive. + if tarinfo.isreg(): + f = bltn_open(name, "rb") + self.addfile(tarinfo, f) + f.close() + + elif tarinfo.isdir(): + self.addfile(tarinfo) + if recursive: + for f in os.listdir(name): + self.add(os.path.join(name, f), os.path.join(arcname, f), + recursive, exclude, filter=filter) + + else: + self.addfile(tarinfo) + + def addfile(self, tarinfo, fileobj=None): + """Add the TarInfo object `tarinfo' to the archive. If `fileobj' is + given, tarinfo.size bytes are read from it and added to the archive. + You can create TarInfo objects using gettarinfo(). + On Windows platforms, `fileobj' should always be opened with mode + 'rb' to avoid irritation about the file size. + """ + self._check("aw") + + tarinfo = copy.copy(tarinfo) + + buf = tarinfo.tobuf(self.format, self.encoding, self.errors) + self.fileobj.write(buf) + self.offset += len(buf) + + # If there's data to follow, append it. + if fileobj is not None: + copyfileobj(fileobj, self.fileobj, tarinfo.size) + blocks, remainder = divmod(tarinfo.size, BLOCKSIZE) + if remainder > 0: + self.fileobj.write(NUL * (BLOCKSIZE - remainder)) + blocks += 1 + self.offset += blocks * BLOCKSIZE + + self.members.append(tarinfo) + + def extractall(self, path=".", members=None): + """Extract all members from the archive to the current working + directory and set owner, modification time and permissions on + directories afterwards. `path' specifies a different directory + to extract to. `members' is optional and must be a subset of the + list returned by getmembers(). + """ + directories = [] + + if members is None: + members = self + + for tarinfo in members: + if tarinfo.isdir(): + # Extract directories with a safe mode. + directories.append(tarinfo) + tarinfo = copy.copy(tarinfo) + tarinfo.mode = 0o700 + # Do not set_attrs directories, as we will do that further down + self.extract(tarinfo, path, set_attrs=not tarinfo.isdir()) + + # Reverse sort directories. + directories.sort(key=lambda a: a.name) + directories.reverse() + + # Set correct owner, mtime and filemode on directories. + for tarinfo in directories: + dirpath = os.path.join(path, tarinfo.name) + try: + self.chown(tarinfo, dirpath) + self.utime(tarinfo, dirpath) + self.chmod(tarinfo, dirpath) + except ExtractError as e: + if self.errorlevel > 1: + raise + else: + self._dbg(1, "tarfile: %s" % e) + + def extract(self, member, path="", set_attrs=True): + """Extract a member from the archive to the current working directory, + using its full name. Its file information is extracted as accurately + as possible. `member' may be a filename or a TarInfo object. You can + specify a different directory using `path'. File attributes (owner, + mtime, mode) are set unless `set_attrs' is False. + """ + self._check("r") + + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + # Prepare the link target for makelink(). + if tarinfo.islnk(): + tarinfo._link_target = os.path.join(path, tarinfo.linkname) + + try: + self._extract_member(tarinfo, os.path.join(path, tarinfo.name), + set_attrs=set_attrs) + except EnvironmentError as e: + if self.errorlevel > 0: + raise + else: + if e.filename is None: + self._dbg(1, "tarfile: %s" % e.strerror) + else: + self._dbg(1, "tarfile: %s %r" % (e.strerror, e.filename)) + except ExtractError as e: + if self.errorlevel > 1: + raise + else: + self._dbg(1, "tarfile: %s" % e) + + def extractfile(self, member): + """Extract a member from the archive as a file object. `member' may be + a filename or a TarInfo object. If `member' is a regular file, a + file-like object is returned. If `member' is a link, a file-like + object is constructed from the link's target. If `member' is none of + the above, None is returned. + The file-like object is read-only and provides the following + methods: read(), readline(), readlines(), seek() and tell() + """ + self._check("r") + + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + if tarinfo.isreg(): + return self.fileobject(self, tarinfo) + + elif tarinfo.type not in SUPPORTED_TYPES: + # If a member's type is unknown, it is treated as a + # regular file. + return self.fileobject(self, tarinfo) + + elif tarinfo.islnk() or tarinfo.issym(): + if isinstance(self.fileobj, _Stream): + # A small but ugly workaround for the case that someone tries + # to extract a (sym)link as a file-object from a non-seekable + # stream of tar blocks. + raise StreamError("cannot extract (sym)link as file object") + else: + # A (sym)link's file object is its target's file object. + return self.extractfile(self._find_link_target(tarinfo)) + else: + # If there's no data associated with the member (directory, chrdev, + # blkdev, etc.), return None instead of a file object. + return None + + def _extract_member(self, tarinfo, targetpath, set_attrs=True): + """Extract the TarInfo object tarinfo to a physical + file called targetpath. + """ + # Fetch the TarInfo object for the given name + # and build the destination pathname, replacing + # forward slashes to platform specific separators. + targetpath = targetpath.rstrip("/") + targetpath = targetpath.replace("/", os.sep) + + # Create all upper directories. + upperdirs = os.path.dirname(targetpath) + if upperdirs and not os.path.exists(upperdirs): + # Create directories that are not part of the archive with + # default permissions. + os.makedirs(upperdirs) + + if tarinfo.islnk() or tarinfo.issym(): + self._dbg(1, "%s -> %s" % (tarinfo.name, tarinfo.linkname)) + else: + self._dbg(1, tarinfo.name) + + if tarinfo.isreg(): + self.makefile(tarinfo, targetpath) + elif tarinfo.isdir(): + self.makedir(tarinfo, targetpath) + elif tarinfo.isfifo(): + self.makefifo(tarinfo, targetpath) + elif tarinfo.ischr() or tarinfo.isblk(): + self.makedev(tarinfo, targetpath) + elif tarinfo.islnk() or tarinfo.issym(): + self.makelink(tarinfo, targetpath) + elif tarinfo.type not in SUPPORTED_TYPES: + self.makeunknown(tarinfo, targetpath) + else: + self.makefile(tarinfo, targetpath) + + if set_attrs: + self.chown(tarinfo, targetpath) + if not tarinfo.issym(): + self.chmod(tarinfo, targetpath) + self.utime(tarinfo, targetpath) + + #-------------------------------------------------------------------------- + # Below are the different file methods. They are called via + # _extract_member() when extract() is called. They can be replaced in a + # subclass to implement other functionality. + + def makedir(self, tarinfo, targetpath): + """Make a directory called targetpath. + """ + try: + # Use a safe mode for the directory, the real mode is set + # later in _extract_member(). + os.mkdir(targetpath, 0o700) + except EnvironmentError as e: + if e.errno != errno.EEXIST: + raise + + def makefile(self, tarinfo, targetpath): + """Make a file called targetpath. + """ + source = self.fileobj + source.seek(tarinfo.offset_data) + target = bltn_open(targetpath, "wb") + if tarinfo.sparse is not None: + for offset, size in tarinfo.sparse: + target.seek(offset) + copyfileobj(source, target, size) + else: + copyfileobj(source, target, tarinfo.size) + target.seek(tarinfo.size) + target.truncate() + target.close() + + def makeunknown(self, tarinfo, targetpath): + """Make a file from a TarInfo object with an unknown type + at targetpath. + """ + self.makefile(tarinfo, targetpath) + self._dbg(1, "tarfile: Unknown file type %r, " \ + "extracted as regular file." % tarinfo.type) + + def makefifo(self, tarinfo, targetpath): + """Make a fifo called targetpath. + """ + if hasattr(os, "mkfifo"): + os.mkfifo(targetpath) + else: + raise ExtractError("fifo not supported by system") + + def makedev(self, tarinfo, targetpath): + """Make a character or block device called targetpath. + """ + if not hasattr(os, "mknod") or not hasattr(os, "makedev"): + raise ExtractError("special devices not supported by system") + + mode = tarinfo.mode + if tarinfo.isblk(): + mode |= stat.S_IFBLK + else: + mode |= stat.S_IFCHR + + os.mknod(targetpath, mode, + os.makedev(tarinfo.devmajor, tarinfo.devminor)) + + def makelink(self, tarinfo, targetpath): + """Make a (symbolic) link called targetpath. If it cannot be created + (platform limitation), we try to make a copy of the referenced file + instead of a link. + """ + try: + # For systems that support symbolic and hard links. + if tarinfo.issym(): + os.symlink(tarinfo.linkname, targetpath) + else: + # See extract(). + if os.path.exists(tarinfo._link_target): + os.link(tarinfo._link_target, targetpath) + else: + self._extract_member(self._find_link_target(tarinfo), + targetpath) + except symlink_exception: + if tarinfo.issym(): + linkpath = os.path.join(os.path.dirname(tarinfo.name), + tarinfo.linkname) + else: + linkpath = tarinfo.linkname + else: + try: + self._extract_member(self._find_link_target(tarinfo), + targetpath) + except KeyError: + raise ExtractError("unable to resolve link inside archive") + + def chown(self, tarinfo, targetpath): + """Set owner of targetpath according to tarinfo. + """ + if pwd and hasattr(os, "geteuid") and os.geteuid() == 0: + # We have to be root to do so. + try: + g = grp.getgrnam(tarinfo.gname)[2] + except KeyError: + g = tarinfo.gid + try: + u = pwd.getpwnam(tarinfo.uname)[2] + except KeyError: + u = tarinfo.uid + try: + if tarinfo.issym() and hasattr(os, "lchown"): + os.lchown(targetpath, u, g) + else: + if sys.platform != "os2emx": + os.chown(targetpath, u, g) + except EnvironmentError as e: + raise ExtractError("could not change owner") + + def chmod(self, tarinfo, targetpath): + """Set file permissions of targetpath according to tarinfo. + """ + if hasattr(os, 'chmod'): + try: + os.chmod(targetpath, tarinfo.mode) + except EnvironmentError as e: + raise ExtractError("could not change mode") + + def utime(self, tarinfo, targetpath): + """Set modification time of targetpath according to tarinfo. + """ + if not hasattr(os, 'utime'): + return + try: + os.utime(targetpath, (tarinfo.mtime, tarinfo.mtime)) + except EnvironmentError as e: + raise ExtractError("could not change modification time") + + #-------------------------------------------------------------------------- + def next(self): + """Return the next member of the archive as a TarInfo object, when + TarFile is opened for reading. Return None if there is no more + available. + """ + self._check("ra") + if self.firstmember is not None: + m = self.firstmember + self.firstmember = None + return m + + # Read the next block. + self.fileobj.seek(self.offset) + tarinfo = None + while True: + try: + tarinfo = self.tarinfo.fromtarfile(self) + except EOFHeaderError as e: + if self.ignore_zeros: + self._dbg(2, "0x%X: %s" % (self.offset, e)) + self.offset += BLOCKSIZE + continue + except InvalidHeaderError as e: + if self.ignore_zeros: + self._dbg(2, "0x%X: %s" % (self.offset, e)) + self.offset += BLOCKSIZE + continue + elif self.offset == 0: + raise ReadError(str(e)) + except EmptyHeaderError: + if self.offset == 0: + raise ReadError("empty file") + except TruncatedHeaderError as e: + if self.offset == 0: + raise ReadError(str(e)) + except SubsequentHeaderError as e: + raise ReadError(str(e)) + break + + if tarinfo is not None: + self.members.append(tarinfo) + else: + self._loaded = True + + return tarinfo + + #-------------------------------------------------------------------------- + # Little helper methods: + + def _getmember(self, name, tarinfo=None, normalize=False): + """Find an archive member by name from bottom to top. + If tarinfo is given, it is used as the starting point. + """ + # Ensure that all members have been loaded. + members = self.getmembers() + + # Limit the member search list up to tarinfo. + if tarinfo is not None: + members = members[:members.index(tarinfo)] + + if normalize: + name = os.path.normpath(name) + + for member in reversed(members): + if normalize: + member_name = os.path.normpath(member.name) + else: + member_name = member.name + + if name == member_name: + return member + + def _load(self): + """Read through the entire archive file and look for readable + members. + """ + while True: + tarinfo = self.next() + if tarinfo is None: + break + self._loaded = True + + def _check(self, mode=None): + """Check if TarFile is still open, and if the operation's mode + corresponds to TarFile's mode. + """ + if self.closed: + raise IOError("%s is closed" % self.__class__.__name__) + if mode is not None and self.mode not in mode: + raise IOError("bad operation for mode %r" % self.mode) + + def _find_link_target(self, tarinfo): + """Find the target member of a symlink or hardlink member in the + archive. + """ + if tarinfo.issym(): + # Always search the entire archive. + linkname = os.path.dirname(tarinfo.name) + "/" + tarinfo.linkname + limit = None + else: + # Search the archive before the link, because a hard link is + # just a reference to an already archived file. + linkname = tarinfo.linkname + limit = tarinfo + + member = self._getmember(linkname, tarinfo=limit, normalize=True) + if member is None: + raise KeyError("linkname %r not found" % linkname) + return member + + def __iter__(self): + """Provide an iterator object. + """ + if self._loaded: + return iter(self.members) + else: + return TarIter(self) + + def _dbg(self, level, msg): + """Write debugging output to sys.stderr. + """ + if level <= self.debug: + print(msg, file=sys.stderr) + + def __enter__(self): + self._check() + return self + + def __exit__(self, type, value, traceback): + if type is None: + self.close() + else: + # An exception occurred. We must not call close() because + # it would try to write end-of-archive blocks and padding. + if not self._extfileobj: + self.fileobj.close() + self.closed = True +# class TarFile + +class TarIter(object): + """Iterator Class. + + for tarinfo in TarFile(...): + suite... + """ + + def __init__(self, tarfile): + """Construct a TarIter object. + """ + self.tarfile = tarfile + self.index = 0 + def __iter__(self): + """Return iterator object. + """ + return self + + def __next__(self): + """Return the next item using TarFile's next() method. + When all members have been read, set TarFile as _loaded. + """ + # Fix for SF #1100429: Under rare circumstances it can + # happen that getmembers() is called during iteration, + # which will cause TarIter to stop prematurely. + if not self.tarfile._loaded: + tarinfo = self.tarfile.next() + if not tarinfo: + self.tarfile._loaded = True + raise StopIteration + else: + try: + tarinfo = self.tarfile.members[self.index] + except IndexError: + raise StopIteration + self.index += 1 + return tarinfo + + next = __next__ # for Python 2.x + +#-------------------- +# exported functions +#-------------------- +def is_tarfile(name): + """Return True if name points to a tar archive that we + are able to handle, else return False. + """ + try: + t = open(name) + t.close() + return True + except TarError: + return False + +bltn_open = open +open = TarFile.open diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/compat.py b/my_env/Lib/site-packages/pip/_vendor/distlib/compat.py new file mode 100644 index 000000000..ff328c8ee --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/compat.py @@ -0,0 +1,1120 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2017 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from __future__ import absolute_import + +import os +import re +import sys + +try: + import ssl +except ImportError: # pragma: no cover + ssl = None + +if sys.version_info[0] < 3: # pragma: no cover + from StringIO import StringIO + string_types = basestring, + text_type = unicode + from types import FileType as file_type + import __builtin__ as builtins + import ConfigParser as configparser + from ._backport import shutil + from urlparse import urlparse, urlunparse, urljoin, urlsplit, urlunsplit + from urllib import (urlretrieve, quote as _quote, unquote, url2pathname, + pathname2url, ContentTooShortError, splittype) + + def quote(s): + if isinstance(s, unicode): + s = s.encode('utf-8') + return _quote(s) + + import urllib2 + from urllib2 import (Request, urlopen, URLError, HTTPError, + HTTPBasicAuthHandler, HTTPPasswordMgr, + HTTPHandler, HTTPRedirectHandler, + build_opener) + if ssl: + from urllib2 import HTTPSHandler + import httplib + import xmlrpclib + import Queue as queue + from HTMLParser import HTMLParser + import htmlentitydefs + raw_input = raw_input + from itertools import ifilter as filter + from itertools import ifilterfalse as filterfalse + + _userprog = None + def splituser(host): + """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" + global _userprog + if _userprog is None: + import re + _userprog = re.compile('^(.*)@(.*)$') + + match = _userprog.match(host) + if match: return match.group(1, 2) + return None, host + +else: # pragma: no cover + from io import StringIO + string_types = str, + text_type = str + from io import TextIOWrapper as file_type + import builtins + import configparser + import shutil + from urllib.parse import (urlparse, urlunparse, urljoin, splituser, quote, + unquote, urlsplit, urlunsplit, splittype) + from urllib.request import (urlopen, urlretrieve, Request, url2pathname, + pathname2url, + HTTPBasicAuthHandler, HTTPPasswordMgr, + HTTPHandler, HTTPRedirectHandler, + build_opener) + if ssl: + from urllib.request import HTTPSHandler + from urllib.error import HTTPError, URLError, ContentTooShortError + import http.client as httplib + import urllib.request as urllib2 + import xmlrpc.client as xmlrpclib + import queue + from html.parser import HTMLParser + import html.entities as htmlentitydefs + raw_input = input + from itertools import filterfalse + filter = filter + +try: + from ssl import match_hostname, CertificateError +except ImportError: # pragma: no cover + class CertificateError(ValueError): + pass + + + def _dnsname_match(dn, hostname, max_wildcards=1): + """Matching according to RFC 6125, section 6.4.3 + + http://tools.ietf.org/html/rfc6125#section-6.4.3 + """ + pats = [] + if not dn: + return False + + parts = dn.split('.') + leftmost, remainder = parts[0], parts[1:] + + wildcards = leftmost.count('*') + if wildcards > max_wildcards: + # Issue #17980: avoid denials of service by refusing more + # than one wildcard per fragment. A survey of established + # policy among SSL implementations showed it to be a + # reasonable choice. + raise CertificateError( + "too many wildcards in certificate DNS name: " + repr(dn)) + + # speed up common case w/o wildcards + if not wildcards: + return dn.lower() == hostname.lower() + + # RFC 6125, section 6.4.3, subitem 1. + # The client SHOULD NOT attempt to match a presented identifier in which + # the wildcard character comprises a label other than the left-most label. + if leftmost == '*': + # When '*' is a fragment by itself, it matches a non-empty dotless + # fragment. + pats.append('[^.]+') + elif leftmost.startswith('xn--') or hostname.startswith('xn--'): + # RFC 6125, section 6.4.3, subitem 3. + # The client SHOULD NOT attempt to match a presented identifier + # where the wildcard character is embedded within an A-label or + # U-label of an internationalized domain name. + pats.append(re.escape(leftmost)) + else: + # Otherwise, '*' matches any dotless string, e.g. www* + pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) + + # add the remaining fragments, ignore any wildcards + for frag in remainder: + pats.append(re.escape(frag)) + + pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) + return pat.match(hostname) + + + def match_hostname(cert, hostname): + """Verify that *cert* (in decoded format as returned by + SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 + rules are followed, but IP addresses are not accepted for *hostname*. + + CertificateError is raised on failure. On success, the function + returns nothing. + """ + if not cert: + raise ValueError("empty or no certificate, match_hostname needs a " + "SSL socket or SSL context with either " + "CERT_OPTIONAL or CERT_REQUIRED") + dnsnames = [] + san = cert.get('subjectAltName', ()) + for key, value in san: + if key == 'DNS': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if not dnsnames: + # The subject is only checked when there is no dNSName entry + # in subjectAltName + for sub in cert.get('subject', ()): + for key, value in sub: + # XXX according to RFC 2818, the most specific Common Name + # must be used. + if key == 'commonName': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if len(dnsnames) > 1: + raise CertificateError("hostname %r " + "doesn't match either of %s" + % (hostname, ', '.join(map(repr, dnsnames)))) + elif len(dnsnames) == 1: + raise CertificateError("hostname %r " + "doesn't match %r" + % (hostname, dnsnames[0])) + else: + raise CertificateError("no appropriate commonName or " + "subjectAltName fields were found") + + +try: + from types import SimpleNamespace as Container +except ImportError: # pragma: no cover + class Container(object): + """ + A generic container for when multiple values need to be returned + """ + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + + +try: + from shutil import which +except ImportError: # pragma: no cover + # Implementation from Python 3.3 + def which(cmd, mode=os.F_OK | os.X_OK, path=None): + """Given a command, mode, and a PATH string, return the path which + conforms to the given mode on the PATH, or None if there is no such + file. + + `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result + of os.environ.get("PATH"), or can be overridden with a custom search + path. + + """ + # Check that a given file can be accessed with the correct mode. + # Additionally check that `file` is not a directory, as on Windows + # directories pass the os.access check. + def _access_check(fn, mode): + return (os.path.exists(fn) and os.access(fn, mode) + and not os.path.isdir(fn)) + + # If we're given a path with a directory part, look it up directly rather + # than referring to PATH directories. This includes checking relative to the + # current directory, e.g. ./script + if os.path.dirname(cmd): + if _access_check(cmd, mode): + return cmd + return None + + if path is None: + path = os.environ.get("PATH", os.defpath) + if not path: + return None + path = path.split(os.pathsep) + + if sys.platform == "win32": + # The current directory takes precedence on Windows. + if not os.curdir in path: + path.insert(0, os.curdir) + + # PATHEXT is necessary to check on Windows. + pathext = os.environ.get("PATHEXT", "").split(os.pathsep) + # See if the given file matches any of the expected path extensions. + # This will allow us to short circuit when given "python.exe". + # If it does match, only test that one, otherwise we have to try + # others. + if any(cmd.lower().endswith(ext.lower()) for ext in pathext): + files = [cmd] + else: + files = [cmd + ext for ext in pathext] + else: + # On other platforms you don't have things like PATHEXT to tell you + # what file suffixes are executable, so just pass on cmd as-is. + files = [cmd] + + seen = set() + for dir in path: + normdir = os.path.normcase(dir) + if not normdir in seen: + seen.add(normdir) + for thefile in files: + name = os.path.join(dir, thefile) + if _access_check(name, mode): + return name + return None + + +# ZipFile is a context manager in 2.7, but not in 2.6 + +from zipfile import ZipFile as BaseZipFile + +if hasattr(BaseZipFile, '__enter__'): # pragma: no cover + ZipFile = BaseZipFile +else: # pragma: no cover + from zipfile import ZipExtFile as BaseZipExtFile + + class ZipExtFile(BaseZipExtFile): + def __init__(self, base): + self.__dict__.update(base.__dict__) + + def __enter__(self): + return self + + def __exit__(self, *exc_info): + self.close() + # return None, so if an exception occurred, it will propagate + + class ZipFile(BaseZipFile): + def __enter__(self): + return self + + def __exit__(self, *exc_info): + self.close() + # return None, so if an exception occurred, it will propagate + + def open(self, *args, **kwargs): + base = BaseZipFile.open(self, *args, **kwargs) + return ZipExtFile(base) + +try: + from platform import python_implementation +except ImportError: # pragma: no cover + def python_implementation(): + """Return a string identifying the Python implementation.""" + if 'PyPy' in sys.version: + return 'PyPy' + if os.name == 'java': + return 'Jython' + if sys.version.startswith('IronPython'): + return 'IronPython' + return 'CPython' + +try: + import sysconfig +except ImportError: # pragma: no cover + from ._backport import sysconfig + +try: + callable = callable +except NameError: # pragma: no cover + from collections import Callable + + def callable(obj): + return isinstance(obj, Callable) + + +try: + fsencode = os.fsencode + fsdecode = os.fsdecode +except AttributeError: # pragma: no cover + # Issue #99: on some systems (e.g. containerised), + # sys.getfilesystemencoding() returns None, and we need a real value, + # so fall back to utf-8. From the CPython 2.7 docs relating to Unix and + # sys.getfilesystemencoding(): the return value is "the user’s preference + # according to the result of nl_langinfo(CODESET), or None if the + # nl_langinfo(CODESET) failed." + _fsencoding = sys.getfilesystemencoding() or 'utf-8' + if _fsencoding == 'mbcs': + _fserrors = 'strict' + else: + _fserrors = 'surrogateescape' + + def fsencode(filename): + if isinstance(filename, bytes): + return filename + elif isinstance(filename, text_type): + return filename.encode(_fsencoding, _fserrors) + else: + raise TypeError("expect bytes or str, not %s" % + type(filename).__name__) + + def fsdecode(filename): + if isinstance(filename, text_type): + return filename + elif isinstance(filename, bytes): + return filename.decode(_fsencoding, _fserrors) + else: + raise TypeError("expect bytes or str, not %s" % + type(filename).__name__) + +try: + from tokenize import detect_encoding +except ImportError: # pragma: no cover + from codecs import BOM_UTF8, lookup + import re + + cookie_re = re.compile(r"coding[:=]\s*([-\w.]+)") + + def _get_normal_name(orig_enc): + """Imitates get_normal_name in tokenizer.c.""" + # Only care about the first 12 characters. + enc = orig_enc[:12].lower().replace("_", "-") + if enc == "utf-8" or enc.startswith("utf-8-"): + return "utf-8" + if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ + enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): + return "iso-8859-1" + return orig_enc + + def detect_encoding(readline): + """ + The detect_encoding() function is used to detect the encoding that should + be used to decode a Python source file. It requires one argument, readline, + in the same way as the tokenize() generator. + + It will call readline a maximum of twice, and return the encoding used + (as a string) and a list of any lines (left as bytes) it has read in. + + It detects the encoding from the presence of a utf-8 bom or an encoding + cookie as specified in pep-0263. If both a bom and a cookie are present, + but disagree, a SyntaxError will be raised. If the encoding cookie is an + invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, + 'utf-8-sig' is returned. + + If no encoding is specified, then the default of 'utf-8' will be returned. + """ + try: + filename = readline.__self__.name + except AttributeError: + filename = None + bom_found = False + encoding = None + default = 'utf-8' + def read_or_stop(): + try: + return readline() + except StopIteration: + return b'' + + def find_cookie(line): + try: + # Decode as UTF-8. Either the line is an encoding declaration, + # in which case it should be pure ASCII, or it must be UTF-8 + # per default encoding. + line_string = line.decode('utf-8') + except UnicodeDecodeError: + msg = "invalid or missing encoding declaration" + if filename is not None: + msg = '{} for {!r}'.format(msg, filename) + raise SyntaxError(msg) + + matches = cookie_re.findall(line_string) + if not matches: + return None + encoding = _get_normal_name(matches[0]) + try: + codec = lookup(encoding) + except LookupError: + # This behaviour mimics the Python interpreter + if filename is None: + msg = "unknown encoding: " + encoding + else: + msg = "unknown encoding for {!r}: {}".format(filename, + encoding) + raise SyntaxError(msg) + + if bom_found: + if codec.name != 'utf-8': + # This behaviour mimics the Python interpreter + if filename is None: + msg = 'encoding problem: utf-8' + else: + msg = 'encoding problem for {!r}: utf-8'.format(filename) + raise SyntaxError(msg) + encoding += '-sig' + return encoding + + first = read_or_stop() + if first.startswith(BOM_UTF8): + bom_found = True + first = first[3:] + default = 'utf-8-sig' + if not first: + return default, [] + + encoding = find_cookie(first) + if encoding: + return encoding, [first] + + second = read_or_stop() + if not second: + return default, [first] + + encoding = find_cookie(second) + if encoding: + return encoding, [first, second] + + return default, [first, second] + +# For converting & <-> & etc. +try: + from html import escape +except ImportError: + from cgi import escape +if sys.version_info[:2] < (3, 4): + unescape = HTMLParser().unescape +else: + from html import unescape + +try: + from collections import ChainMap +except ImportError: # pragma: no cover + from collections import MutableMapping + + try: + from reprlib import recursive_repr as _recursive_repr + except ImportError: + def _recursive_repr(fillvalue='...'): + ''' + Decorator to make a repr function return fillvalue for a recursive + call + ''' + + def decorating_function(user_function): + repr_running = set() + + def wrapper(self): + key = id(self), get_ident() + if key in repr_running: + return fillvalue + repr_running.add(key) + try: + result = user_function(self) + finally: + repr_running.discard(key) + return result + + # Can't use functools.wraps() here because of bootstrap issues + wrapper.__module__ = getattr(user_function, '__module__') + wrapper.__doc__ = getattr(user_function, '__doc__') + wrapper.__name__ = getattr(user_function, '__name__') + wrapper.__annotations__ = getattr(user_function, '__annotations__', {}) + return wrapper + + return decorating_function + + class ChainMap(MutableMapping): + ''' A ChainMap groups multiple dicts (or other mappings) together + to create a single, updateable view. + + The underlying mappings are stored in a list. That list is public and can + accessed or updated using the *maps* attribute. There is no other state. + + Lookups search the underlying mappings successively until a key is found. + In contrast, writes, updates, and deletions only operate on the first + mapping. + + ''' + + def __init__(self, *maps): + '''Initialize a ChainMap by setting *maps* to the given mappings. + If no mappings are provided, a single empty dictionary is used. + + ''' + self.maps = list(maps) or [{}] # always at least one map + + def __missing__(self, key): + raise KeyError(key) + + def __getitem__(self, key): + for mapping in self.maps: + try: + return mapping[key] # can't use 'key in mapping' with defaultdict + except KeyError: + pass + return self.__missing__(key) # support subclasses that define __missing__ + + def get(self, key, default=None): + return self[key] if key in self else default + + def __len__(self): + return len(set().union(*self.maps)) # reuses stored hash values if possible + + def __iter__(self): + return iter(set().union(*self.maps)) + + def __contains__(self, key): + return any(key in m for m in self.maps) + + def __bool__(self): + return any(self.maps) + + @_recursive_repr() + def __repr__(self): + return '{0.__class__.__name__}({1})'.format( + self, ', '.join(map(repr, self.maps))) + + @classmethod + def fromkeys(cls, iterable, *args): + 'Create a ChainMap with a single dict created from the iterable.' + return cls(dict.fromkeys(iterable, *args)) + + def copy(self): + 'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]' + return self.__class__(self.maps[0].copy(), *self.maps[1:]) + + __copy__ = copy + + def new_child(self): # like Django's Context.push() + 'New ChainMap with a new dict followed by all previous maps.' + return self.__class__({}, *self.maps) + + @property + def parents(self): # like Django's Context.pop() + 'New ChainMap from maps[1:].' + return self.__class__(*self.maps[1:]) + + def __setitem__(self, key, value): + self.maps[0][key] = value + + def __delitem__(self, key): + try: + del self.maps[0][key] + except KeyError: + raise KeyError('Key not found in the first mapping: {!r}'.format(key)) + + def popitem(self): + 'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.' + try: + return self.maps[0].popitem() + except KeyError: + raise KeyError('No keys found in the first mapping.') + + def pop(self, key, *args): + 'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].' + try: + return self.maps[0].pop(key, *args) + except KeyError: + raise KeyError('Key not found in the first mapping: {!r}'.format(key)) + + def clear(self): + 'Clear maps[0], leaving maps[1:] intact.' + self.maps[0].clear() + +try: + from importlib.util import cache_from_source # Python >= 3.4 +except ImportError: # pragma: no cover + try: + from imp import cache_from_source + except ImportError: # pragma: no cover + def cache_from_source(path, debug_override=None): + assert path.endswith('.py') + if debug_override is None: + debug_override = __debug__ + if debug_override: + suffix = 'c' + else: + suffix = 'o' + return path + suffix + +try: + from collections import OrderedDict +except ImportError: # pragma: no cover +## {{{ http://code.activestate.com/recipes/576693/ (r9) +# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy. +# Passes Python2.7's test suite and incorporates all the latest updates. + try: + from thread import get_ident as _get_ident + except ImportError: + from dummy_thread import get_ident as _get_ident + + try: + from _abcoll import KeysView, ValuesView, ItemsView + except ImportError: + pass + + + class OrderedDict(dict): + 'Dictionary that remembers insertion order' + # An inherited dict maps keys to values. + # The inherited dict provides __getitem__, __len__, __contains__, and get. + # The remaining methods are order-aware. + # Big-O running times for all methods are the same as for regular dictionaries. + + # The internal self.__map dictionary maps keys to links in a doubly linked list. + # The circular doubly linked list starts and ends with a sentinel element. + # The sentinel element never gets deleted (this simplifies the algorithm). + # Each link is stored as a list of length three: [PREV, NEXT, KEY]. + + def __init__(self, *args, **kwds): + '''Initialize an ordered dictionary. Signature is the same as for + regular dictionaries, but keyword arguments are not recommended + because their insertion order is arbitrary. + + ''' + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + try: + self.__root + except AttributeError: + self.__root = root = [] # sentinel node + root[:] = [root, root, None] + self.__map = {} + self.__update(*args, **kwds) + + def __setitem__(self, key, value, dict_setitem=dict.__setitem__): + 'od.__setitem__(i, y) <==> od[i]=y' + # Setting a new item creates a new link which goes at the end of the linked + # list, and the inherited dictionary is updated with the new key/value pair. + if key not in self: + root = self.__root + last = root[0] + last[1] = root[0] = self.__map[key] = [last, root, key] + dict_setitem(self, key, value) + + def __delitem__(self, key, dict_delitem=dict.__delitem__): + 'od.__delitem__(y) <==> del od[y]' + # Deleting an existing item uses self.__map to find the link which is + # then removed by updating the links in the predecessor and successor nodes. + dict_delitem(self, key) + link_prev, link_next, key = self.__map.pop(key) + link_prev[1] = link_next + link_next[0] = link_prev + + def __iter__(self): + 'od.__iter__() <==> iter(od)' + root = self.__root + curr = root[1] + while curr is not root: + yield curr[2] + curr = curr[1] + + def __reversed__(self): + 'od.__reversed__() <==> reversed(od)' + root = self.__root + curr = root[0] + while curr is not root: + yield curr[2] + curr = curr[0] + + def clear(self): + 'od.clear() -> None. Remove all items from od.' + try: + for node in self.__map.itervalues(): + del node[:] + root = self.__root + root[:] = [root, root, None] + self.__map.clear() + except AttributeError: + pass + dict.clear(self) + + def popitem(self, last=True): + '''od.popitem() -> (k, v), return and remove a (key, value) pair. + Pairs are returned in LIFO order if last is true or FIFO order if false. + + ''' + if not self: + raise KeyError('dictionary is empty') + root = self.__root + if last: + link = root[0] + link_prev = link[0] + link_prev[1] = root + root[0] = link_prev + else: + link = root[1] + link_next = link[1] + root[1] = link_next + link_next[0] = root + key = link[2] + del self.__map[key] + value = dict.pop(self, key) + return key, value + + # -- the following methods do not depend on the internal structure -- + + def keys(self): + 'od.keys() -> list of keys in od' + return list(self) + + def values(self): + 'od.values() -> list of values in od' + return [self[key] for key in self] + + def items(self): + 'od.items() -> list of (key, value) pairs in od' + return [(key, self[key]) for key in self] + + def iterkeys(self): + 'od.iterkeys() -> an iterator over the keys in od' + return iter(self) + + def itervalues(self): + 'od.itervalues -> an iterator over the values in od' + for k in self: + yield self[k] + + def iteritems(self): + 'od.iteritems -> an iterator over the (key, value) items in od' + for k in self: + yield (k, self[k]) + + def update(*args, **kwds): + '''od.update(E, **F) -> None. Update od from dict/iterable E and F. + + If E is a dict instance, does: for k in E: od[k] = E[k] + If E has a .keys() method, does: for k in E.keys(): od[k] = E[k] + Or if E is an iterable of items, does: for k, v in E: od[k] = v + In either case, this is followed by: for k, v in F.items(): od[k] = v + + ''' + if len(args) > 2: + raise TypeError('update() takes at most 2 positional ' + 'arguments (%d given)' % (len(args),)) + elif not args: + raise TypeError('update() takes at least 1 argument (0 given)') + self = args[0] + # Make progressively weaker assumptions about "other" + other = () + if len(args) == 2: + other = args[1] + if isinstance(other, dict): + for key in other: + self[key] = other[key] + elif hasattr(other, 'keys'): + for key in other.keys(): + self[key] = other[key] + else: + for key, value in other: + self[key] = value + for key, value in kwds.items(): + self[key] = value + + __update = update # let subclasses override update without breaking __init__ + + __marker = object() + + def pop(self, key, default=__marker): + '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value. + If key is not found, d is returned if given, otherwise KeyError is raised. + + ''' + if key in self: + result = self[key] + del self[key] + return result + if default is self.__marker: + raise KeyError(key) + return default + + def setdefault(self, key, default=None): + 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' + if key in self: + return self[key] + self[key] = default + return default + + def __repr__(self, _repr_running=None): + 'od.__repr__() <==> repr(od)' + if not _repr_running: _repr_running = {} + call_key = id(self), _get_ident() + if call_key in _repr_running: + return '...' + _repr_running[call_key] = 1 + try: + if not self: + return '%s()' % (self.__class__.__name__,) + return '%s(%r)' % (self.__class__.__name__, self.items()) + finally: + del _repr_running[call_key] + + def __reduce__(self): + 'Return state information for pickling' + items = [[k, self[k]] for k in self] + inst_dict = vars(self).copy() + for k in vars(OrderedDict()): + inst_dict.pop(k, None) + if inst_dict: + return (self.__class__, (items,), inst_dict) + return self.__class__, (items,) + + def copy(self): + 'od.copy() -> a shallow copy of od' + return self.__class__(self) + + @classmethod + def fromkeys(cls, iterable, value=None): + '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S + and values equal to v (which defaults to None). + + ''' + d = cls() + for key in iterable: + d[key] = value + return d + + def __eq__(self, other): + '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive + while comparison to a regular mapping is order-insensitive. + + ''' + if isinstance(other, OrderedDict): + return len(self)==len(other) and self.items() == other.items() + return dict.__eq__(self, other) + + def __ne__(self, other): + return not self == other + + # -- the following methods are only used in Python 2.7 -- + + def viewkeys(self): + "od.viewkeys() -> a set-like object providing a view on od's keys" + return KeysView(self) + + def viewvalues(self): + "od.viewvalues() -> an object providing a view on od's values" + return ValuesView(self) + + def viewitems(self): + "od.viewitems() -> a set-like object providing a view on od's items" + return ItemsView(self) + +try: + from logging.config import BaseConfigurator, valid_ident +except ImportError: # pragma: no cover + IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) + + + def valid_ident(s): + m = IDENTIFIER.match(s) + if not m: + raise ValueError('Not a valid Python identifier: %r' % s) + return True + + + # The ConvertingXXX classes are wrappers around standard Python containers, + # and they serve to convert any suitable values in the container. The + # conversion converts base dicts, lists and tuples to their wrapped + # equivalents, whereas strings which match a conversion format are converted + # appropriately. + # + # Each wrapper should have a configurator attribute holding the actual + # configurator to use for conversion. + + class ConvertingDict(dict): + """A converting dictionary wrapper.""" + + def __getitem__(self, key): + value = dict.__getitem__(self, key) + result = self.configurator.convert(value) + #If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def get(self, key, default=None): + value = dict.get(self, key, default) + result = self.configurator.convert(value) + #If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def pop(self, key, default=None): + value = dict.pop(self, key, default) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + class ConvertingList(list): + """A converting list wrapper.""" + def __getitem__(self, key): + value = list.__getitem__(self, key) + result = self.configurator.convert(value) + #If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def pop(self, idx=-1): + value = list.pop(self, idx) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + return result + + class ConvertingTuple(tuple): + """A converting tuple wrapper.""" + def __getitem__(self, key): + value = tuple.__getitem__(self, key) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + class BaseConfigurator(object): + """ + The configurator base class which defines some useful defaults. + """ + + CONVERT_PATTERN = re.compile(r'^(?P[a-z]+)://(?P.*)$') + + WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') + DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*') + INDEX_PATTERN = re.compile(r'^\[\s*(\w+)\s*\]\s*') + DIGIT_PATTERN = re.compile(r'^\d+$') + + value_converters = { + 'ext' : 'ext_convert', + 'cfg' : 'cfg_convert', + } + + # We might want to use a different one, e.g. importlib + importer = staticmethod(__import__) + + def __init__(self, config): + self.config = ConvertingDict(config) + self.config.configurator = self + + def resolve(self, s): + """ + Resolve strings to objects using standard import and attribute + syntax. + """ + name = s.split('.') + used = name.pop(0) + try: + found = self.importer(used) + for frag in name: + used += '.' + frag + try: + found = getattr(found, frag) + except AttributeError: + self.importer(used) + found = getattr(found, frag) + return found + except ImportError: + e, tb = sys.exc_info()[1:] + v = ValueError('Cannot resolve %r: %s' % (s, e)) + v.__cause__, v.__traceback__ = e, tb + raise v + + def ext_convert(self, value): + """Default converter for the ext:// protocol.""" + return self.resolve(value) + + def cfg_convert(self, value): + """Default converter for the cfg:// protocol.""" + rest = value + m = self.WORD_PATTERN.match(rest) + if m is None: + raise ValueError("Unable to convert %r" % value) + else: + rest = rest[m.end():] + d = self.config[m.groups()[0]] + #print d, rest + while rest: + m = self.DOT_PATTERN.match(rest) + if m: + d = d[m.groups()[0]] + else: + m = self.INDEX_PATTERN.match(rest) + if m: + idx = m.groups()[0] + if not self.DIGIT_PATTERN.match(idx): + d = d[idx] + else: + try: + n = int(idx) # try as number first (most likely) + d = d[n] + except TypeError: + d = d[idx] + if m: + rest = rest[m.end():] + else: + raise ValueError('Unable to convert ' + '%r at %r' % (value, rest)) + #rest should be empty + return d + + def convert(self, value): + """ + Convert values to an appropriate type. dicts, lists and tuples are + replaced by their converting alternatives. Strings are checked to + see if they have a conversion format and are converted if they do. + """ + if not isinstance(value, ConvertingDict) and isinstance(value, dict): + value = ConvertingDict(value) + value.configurator = self + elif not isinstance(value, ConvertingList) and isinstance(value, list): + value = ConvertingList(value) + value.configurator = self + elif not isinstance(value, ConvertingTuple) and\ + isinstance(value, tuple): + value = ConvertingTuple(value) + value.configurator = self + elif isinstance(value, string_types): + m = self.CONVERT_PATTERN.match(value) + if m: + d = m.groupdict() + prefix = d['prefix'] + converter = self.value_converters.get(prefix, None) + if converter: + suffix = d['suffix'] + converter = getattr(self, converter) + value = converter(suffix) + return value + + def configure_custom(self, config): + """Configure an object with a user-supplied factory.""" + c = config.pop('()') + if not callable(c): + c = self.resolve(c) + props = config.pop('.', None) + # Check for valid identifiers + kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) + result = c(**kwargs) + if props: + for name, value in props.items(): + setattr(result, name, value) + return result + + def as_tuple(self, value): + """Utility function which converts lists to tuples.""" + if isinstance(value, list): + value = tuple(value) + return value diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/database.py b/my_env/Lib/site-packages/pip/_vendor/distlib/database.py new file mode 100644 index 000000000..b13cdac92 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/database.py @@ -0,0 +1,1339 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2017 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""PEP 376 implementation.""" + +from __future__ import unicode_literals + +import base64 +import codecs +import contextlib +import hashlib +import logging +import os +import posixpath +import sys +import zipimport + +from . import DistlibException, resources +from .compat import StringIO +from .version import get_scheme, UnsupportedVersionError +from .metadata import (Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME, + LEGACY_METADATA_FILENAME) +from .util import (parse_requirement, cached_property, parse_name_and_version, + read_exports, write_exports, CSVReader, CSVWriter) + + +__all__ = ['Distribution', 'BaseInstalledDistribution', + 'InstalledDistribution', 'EggInfoDistribution', + 'DistributionPath'] + + +logger = logging.getLogger(__name__) + +EXPORTS_FILENAME = 'pydist-exports.json' +COMMANDS_FILENAME = 'pydist-commands.json' + +DIST_FILES = ('INSTALLER', METADATA_FILENAME, 'RECORD', 'REQUESTED', + 'RESOURCES', EXPORTS_FILENAME, 'SHARED') + +DISTINFO_EXT = '.dist-info' + + +class _Cache(object): + """ + A simple cache mapping names and .dist-info paths to distributions + """ + def __init__(self): + """ + Initialise an instance. There is normally one for each DistributionPath. + """ + self.name = {} + self.path = {} + self.generated = False + + def clear(self): + """ + Clear the cache, setting it to its initial state. + """ + self.name.clear() + self.path.clear() + self.generated = False + + def add(self, dist): + """ + Add a distribution to the cache. + :param dist: The distribution to add. + """ + if dist.path not in self.path: + self.path[dist.path] = dist + self.name.setdefault(dist.key, []).append(dist) + + +class DistributionPath(object): + """ + Represents a set of distributions installed on a path (typically sys.path). + """ + def __init__(self, path=None, include_egg=False): + """ + Create an instance from a path, optionally including legacy (distutils/ + setuptools/distribute) distributions. + :param path: The path to use, as a list of directories. If not specified, + sys.path is used. + :param include_egg: If True, this instance will look for and return legacy + distributions as well as those based on PEP 376. + """ + if path is None: + path = sys.path + self.path = path + self._include_dist = True + self._include_egg = include_egg + + self._cache = _Cache() + self._cache_egg = _Cache() + self._cache_enabled = True + self._scheme = get_scheme('default') + + def _get_cache_enabled(self): + return self._cache_enabled + + def _set_cache_enabled(self, value): + self._cache_enabled = value + + cache_enabled = property(_get_cache_enabled, _set_cache_enabled) + + def clear_cache(self): + """ + Clears the internal cache. + """ + self._cache.clear() + self._cache_egg.clear() + + + def _yield_distributions(self): + """ + Yield .dist-info and/or .egg(-info) distributions. + """ + # We need to check if we've seen some resources already, because on + # some Linux systems (e.g. some Debian/Ubuntu variants) there are + # symlinks which alias other files in the environment. + seen = set() + for path in self.path: + finder = resources.finder_for_path(path) + if finder is None: + continue + r = finder.find('') + if not r or not r.is_container: + continue + rset = sorted(r.resources) + for entry in rset: + r = finder.find(entry) + if not r or r.path in seen: + continue + if self._include_dist and entry.endswith(DISTINFO_EXT): + possible_filenames = [METADATA_FILENAME, + WHEEL_METADATA_FILENAME, + LEGACY_METADATA_FILENAME] + for metadata_filename in possible_filenames: + metadata_path = posixpath.join(entry, metadata_filename) + pydist = finder.find(metadata_path) + if pydist: + break + else: + continue + + with contextlib.closing(pydist.as_stream()) as stream: + metadata = Metadata(fileobj=stream, scheme='legacy') + logger.debug('Found %s', r.path) + seen.add(r.path) + yield new_dist_class(r.path, metadata=metadata, + env=self) + elif self._include_egg and entry.endswith(('.egg-info', + '.egg')): + logger.debug('Found %s', r.path) + seen.add(r.path) + yield old_dist_class(r.path, self) + + def _generate_cache(self): + """ + Scan the path for distributions and populate the cache with + those that are found. + """ + gen_dist = not self._cache.generated + gen_egg = self._include_egg and not self._cache_egg.generated + if gen_dist or gen_egg: + for dist in self._yield_distributions(): + if isinstance(dist, InstalledDistribution): + self._cache.add(dist) + else: + self._cache_egg.add(dist) + + if gen_dist: + self._cache.generated = True + if gen_egg: + self._cache_egg.generated = True + + @classmethod + def distinfo_dirname(cls, name, version): + """ + The *name* and *version* parameters are converted into their + filename-escaped form, i.e. any ``'-'`` characters are replaced + with ``'_'`` other than the one in ``'dist-info'`` and the one + separating the name from the version number. + + :parameter name: is converted to a standard distribution name by replacing + any runs of non- alphanumeric characters with a single + ``'-'``. + :type name: string + :parameter version: is converted to a standard version string. Spaces + become dots, and all other non-alphanumeric characters + (except dots) become dashes, with runs of multiple + dashes condensed to a single dash. + :type version: string + :returns: directory name + :rtype: string""" + name = name.replace('-', '_') + return '-'.join([name, version]) + DISTINFO_EXT + + def get_distributions(self): + """ + Provides an iterator that looks for distributions and returns + :class:`InstalledDistribution` or + :class:`EggInfoDistribution` instances for each one of them. + + :rtype: iterator of :class:`InstalledDistribution` and + :class:`EggInfoDistribution` instances + """ + if not self._cache_enabled: + for dist in self._yield_distributions(): + yield dist + else: + self._generate_cache() + + for dist in self._cache.path.values(): + yield dist + + if self._include_egg: + for dist in self._cache_egg.path.values(): + yield dist + + def get_distribution(self, name): + """ + Looks for a named distribution on the path. + + This function only returns the first result found, as no more than one + value is expected. If nothing is found, ``None`` is returned. + + :rtype: :class:`InstalledDistribution`, :class:`EggInfoDistribution` + or ``None`` + """ + result = None + name = name.lower() + if not self._cache_enabled: + for dist in self._yield_distributions(): + if dist.key == name: + result = dist + break + else: + self._generate_cache() + + if name in self._cache.name: + result = self._cache.name[name][0] + elif self._include_egg and name in self._cache_egg.name: + result = self._cache_egg.name[name][0] + return result + + def provides_distribution(self, name, version=None): + """ + Iterates over all distributions to find which distributions provide *name*. + If a *version* is provided, it will be used to filter the results. + + This function only returns the first result found, since no more than + one values are expected. If the directory is not found, returns ``None``. + + :parameter version: a version specifier that indicates the version + required, conforming to the format in ``PEP-345`` + + :type name: string + :type version: string + """ + matcher = None + if version is not None: + try: + matcher = self._scheme.matcher('%s (%s)' % (name, version)) + except ValueError: + raise DistlibException('invalid name or version: %r, %r' % + (name, version)) + + for dist in self.get_distributions(): + # We hit a problem on Travis where enum34 was installed and doesn't + # have a provides attribute ... + if not hasattr(dist, 'provides'): + logger.debug('No "provides": %s', dist) + else: + provided = dist.provides + + for p in provided: + p_name, p_ver = parse_name_and_version(p) + if matcher is None: + if p_name == name: + yield dist + break + else: + if p_name == name and matcher.match(p_ver): + yield dist + break + + def get_file_path(self, name, relative_path): + """ + Return the path to a resource file. + """ + dist = self.get_distribution(name) + if dist is None: + raise LookupError('no distribution named %r found' % name) + return dist.get_resource_path(relative_path) + + def get_exported_entries(self, category, name=None): + """ + Return all of the exported entries in a particular category. + + :param category: The category to search for entries. + :param name: If specified, only entries with that name are returned. + """ + for dist in self.get_distributions(): + r = dist.exports + if category in r: + d = r[category] + if name is not None: + if name in d: + yield d[name] + else: + for v in d.values(): + yield v + + +class Distribution(object): + """ + A base class for distributions, whether installed or from indexes. + Either way, it must have some metadata, so that's all that's needed + for construction. + """ + + build_time_dependency = False + """ + Set to True if it's known to be only a build-time dependency (i.e. + not needed after installation). + """ + + requested = False + """A boolean that indicates whether the ``REQUESTED`` metadata file is + present (in other words, whether the package was installed by user + request or it was installed as a dependency).""" + + def __init__(self, metadata): + """ + Initialise an instance. + :param metadata: The instance of :class:`Metadata` describing this + distribution. + """ + self.metadata = metadata + self.name = metadata.name + self.key = self.name.lower() # for case-insensitive comparisons + self.version = metadata.version + self.locator = None + self.digest = None + self.extras = None # additional features requested + self.context = None # environment marker overrides + self.download_urls = set() + self.digests = {} + + @property + def source_url(self): + """ + The source archive download URL for this distribution. + """ + return self.metadata.source_url + + download_url = source_url # Backward compatibility + + @property + def name_and_version(self): + """ + A utility property which displays the name and version in parentheses. + """ + return '%s (%s)' % (self.name, self.version) + + @property + def provides(self): + """ + A set of distribution names and versions provided by this distribution. + :return: A set of "name (version)" strings. + """ + plist = self.metadata.provides + s = '%s (%s)' % (self.name, self.version) + if s not in plist: + plist.append(s) + return plist + + def _get_requirements(self, req_attr): + md = self.metadata + logger.debug('Getting requirements from metadata %r', md.todict()) + reqts = getattr(md, req_attr) + return set(md.get_requirements(reqts, extras=self.extras, + env=self.context)) + + @property + def run_requires(self): + return self._get_requirements('run_requires') + + @property + def meta_requires(self): + return self._get_requirements('meta_requires') + + @property + def build_requires(self): + return self._get_requirements('build_requires') + + @property + def test_requires(self): + return self._get_requirements('test_requires') + + @property + def dev_requires(self): + return self._get_requirements('dev_requires') + + def matches_requirement(self, req): + """ + Say if this instance matches (fulfills) a requirement. + :param req: The requirement to match. + :rtype req: str + :return: True if it matches, else False. + """ + # Requirement may contain extras - parse to lose those + # from what's passed to the matcher + r = parse_requirement(req) + scheme = get_scheme(self.metadata.scheme) + try: + matcher = scheme.matcher(r.requirement) + except UnsupportedVersionError: + # XXX compat-mode if cannot read the version + logger.warning('could not read version %r - using name only', + req) + name = req.split()[0] + matcher = scheme.matcher(name) + + name = matcher.key # case-insensitive + + result = False + for p in self.provides: + p_name, p_ver = parse_name_and_version(p) + if p_name != name: + continue + try: + result = matcher.match(p_ver) + break + except UnsupportedVersionError: + pass + return result + + def __repr__(self): + """ + Return a textual representation of this instance, + """ + if self.source_url: + suffix = ' [%s]' % self.source_url + else: + suffix = '' + return '' % (self.name, self.version, suffix) + + def __eq__(self, other): + """ + See if this distribution is the same as another. + :param other: The distribution to compare with. To be equal to one + another. distributions must have the same type, name, + version and source_url. + :return: True if it is the same, else False. + """ + if type(other) is not type(self): + result = False + else: + result = (self.name == other.name and + self.version == other.version and + self.source_url == other.source_url) + return result + + def __hash__(self): + """ + Compute hash in a way which matches the equality test. + """ + return hash(self.name) + hash(self.version) + hash(self.source_url) + + +class BaseInstalledDistribution(Distribution): + """ + This is the base class for installed distributions (whether PEP 376 or + legacy). + """ + + hasher = None + + def __init__(self, metadata, path, env=None): + """ + Initialise an instance. + :param metadata: An instance of :class:`Metadata` which describes the + distribution. This will normally have been initialised + from a metadata file in the ``path``. + :param path: The path of the ``.dist-info`` or ``.egg-info`` + directory for the distribution. + :param env: This is normally the :class:`DistributionPath` + instance where this distribution was found. + """ + super(BaseInstalledDistribution, self).__init__(metadata) + self.path = path + self.dist_path = env + + def get_hash(self, data, hasher=None): + """ + Get the hash of some data, using a particular hash algorithm, if + specified. + + :param data: The data to be hashed. + :type data: bytes + :param hasher: The name of a hash implementation, supported by hashlib, + or ``None``. Examples of valid values are ``'sha1'``, + ``'sha224'``, ``'sha384'``, '``sha256'``, ``'md5'`` and + ``'sha512'``. If no hasher is specified, the ``hasher`` + attribute of the :class:`InstalledDistribution` instance + is used. If the hasher is determined to be ``None``, MD5 + is used as the hashing algorithm. + :returns: The hash of the data. If a hasher was explicitly specified, + the returned hash will be prefixed with the specified hasher + followed by '='. + :rtype: str + """ + if hasher is None: + hasher = self.hasher + if hasher is None: + hasher = hashlib.md5 + prefix = '' + else: + hasher = getattr(hashlib, hasher) + prefix = '%s=' % self.hasher + digest = hasher(data).digest() + digest = base64.urlsafe_b64encode(digest).rstrip(b'=').decode('ascii') + return '%s%s' % (prefix, digest) + + +class InstalledDistribution(BaseInstalledDistribution): + """ + Created with the *path* of the ``.dist-info`` directory provided to the + constructor. It reads the metadata contained in ``pydist.json`` when it is + instantiated., or uses a passed in Metadata instance (useful for when + dry-run mode is being used). + """ + + hasher = 'sha256' + + def __init__(self, path, metadata=None, env=None): + self.modules = [] + self.finder = finder = resources.finder_for_path(path) + if finder is None: + raise ValueError('finder unavailable for %s' % path) + if env and env._cache_enabled and path in env._cache.path: + metadata = env._cache.path[path].metadata + elif metadata is None: + r = finder.find(METADATA_FILENAME) + # Temporary - for Wheel 0.23 support + if r is None: + r = finder.find(WHEEL_METADATA_FILENAME) + # Temporary - for legacy support + if r is None: + r = finder.find('METADATA') + if r is None: + raise ValueError('no %s found in %s' % (METADATA_FILENAME, + path)) + with contextlib.closing(r.as_stream()) as stream: + metadata = Metadata(fileobj=stream, scheme='legacy') + + super(InstalledDistribution, self).__init__(metadata, path, env) + + if env and env._cache_enabled: + env._cache.add(self) + + r = finder.find('REQUESTED') + self.requested = r is not None + p = os.path.join(path, 'top_level.txt') + if os.path.exists(p): + with open(p, 'rb') as f: + data = f.read() + self.modules = data.splitlines() + + def __repr__(self): + return '' % ( + self.name, self.version, self.path) + + def __str__(self): + return "%s %s" % (self.name, self.version) + + def _get_records(self): + """ + Get the list of installed files for the distribution + :return: A list of tuples of path, hash and size. Note that hash and + size might be ``None`` for some entries. The path is exactly + as stored in the file (which is as in PEP 376). + """ + results = [] + r = self.get_distinfo_resource('RECORD') + with contextlib.closing(r.as_stream()) as stream: + with CSVReader(stream=stream) as record_reader: + # Base location is parent dir of .dist-info dir + #base_location = os.path.dirname(self.path) + #base_location = os.path.abspath(base_location) + for row in record_reader: + missing = [None for i in range(len(row), 3)] + path, checksum, size = row + missing + #if not os.path.isabs(path): + # path = path.replace('/', os.sep) + # path = os.path.join(base_location, path) + results.append((path, checksum, size)) + return results + + @cached_property + def exports(self): + """ + Return the information exported by this distribution. + :return: A dictionary of exports, mapping an export category to a dict + of :class:`ExportEntry` instances describing the individual + export entries, and keyed by name. + """ + result = {} + r = self.get_distinfo_resource(EXPORTS_FILENAME) + if r: + result = self.read_exports() + return result + + def read_exports(self): + """ + Read exports data from a file in .ini format. + + :return: A dictionary of exports, mapping an export category to a list + of :class:`ExportEntry` instances describing the individual + export entries. + """ + result = {} + r = self.get_distinfo_resource(EXPORTS_FILENAME) + if r: + with contextlib.closing(r.as_stream()) as stream: + result = read_exports(stream) + return result + + def write_exports(self, exports): + """ + Write a dictionary of exports to a file in .ini format. + :param exports: A dictionary of exports, mapping an export category to + a list of :class:`ExportEntry` instances describing the + individual export entries. + """ + rf = self.get_distinfo_file(EXPORTS_FILENAME) + with open(rf, 'w') as f: + write_exports(exports, f) + + def get_resource_path(self, relative_path): + """ + NOTE: This API may change in the future. + + Return the absolute path to a resource file with the given relative + path. + + :param relative_path: The path, relative to .dist-info, of the resource + of interest. + :return: The absolute path where the resource is to be found. + """ + r = self.get_distinfo_resource('RESOURCES') + with contextlib.closing(r.as_stream()) as stream: + with CSVReader(stream=stream) as resources_reader: + for relative, destination in resources_reader: + if relative == relative_path: + return destination + raise KeyError('no resource file with relative path %r ' + 'is installed' % relative_path) + + def list_installed_files(self): + """ + Iterates over the ``RECORD`` entries and returns a tuple + ``(path, hash, size)`` for each line. + + :returns: iterator of (path, hash, size) + """ + for result in self._get_records(): + yield result + + def write_installed_files(self, paths, prefix, dry_run=False): + """ + Writes the ``RECORD`` file, using the ``paths`` iterable passed in. Any + existing ``RECORD`` file is silently overwritten. + + prefix is used to determine when to write absolute paths. + """ + prefix = os.path.join(prefix, '') + base = os.path.dirname(self.path) + base_under_prefix = base.startswith(prefix) + base = os.path.join(base, '') + record_path = self.get_distinfo_file('RECORD') + logger.info('creating %s', record_path) + if dry_run: + return None + with CSVWriter(record_path) as writer: + for path in paths: + if os.path.isdir(path) or path.endswith(('.pyc', '.pyo')): + # do not put size and hash, as in PEP-376 + hash_value = size = '' + else: + size = '%d' % os.path.getsize(path) + with open(path, 'rb') as fp: + hash_value = self.get_hash(fp.read()) + if path.startswith(base) or (base_under_prefix and + path.startswith(prefix)): + path = os.path.relpath(path, base) + writer.writerow((path, hash_value, size)) + + # add the RECORD file itself + if record_path.startswith(base): + record_path = os.path.relpath(record_path, base) + writer.writerow((record_path, '', '')) + return record_path + + def check_installed_files(self): + """ + Checks that the hashes and sizes of the files in ``RECORD`` are + matched by the files themselves. Returns a (possibly empty) list of + mismatches. Each entry in the mismatch list will be a tuple consisting + of the path, 'exists', 'size' or 'hash' according to what didn't match + (existence is checked first, then size, then hash), the expected + value and the actual value. + """ + mismatches = [] + base = os.path.dirname(self.path) + record_path = self.get_distinfo_file('RECORD') + for path, hash_value, size in self.list_installed_files(): + if not os.path.isabs(path): + path = os.path.join(base, path) + if path == record_path: + continue + if not os.path.exists(path): + mismatches.append((path, 'exists', True, False)) + elif os.path.isfile(path): + actual_size = str(os.path.getsize(path)) + if size and actual_size != size: + mismatches.append((path, 'size', size, actual_size)) + elif hash_value: + if '=' in hash_value: + hasher = hash_value.split('=', 1)[0] + else: + hasher = None + + with open(path, 'rb') as f: + actual_hash = self.get_hash(f.read(), hasher) + if actual_hash != hash_value: + mismatches.append((path, 'hash', hash_value, actual_hash)) + return mismatches + + @cached_property + def shared_locations(self): + """ + A dictionary of shared locations whose keys are in the set 'prefix', + 'purelib', 'platlib', 'scripts', 'headers', 'data' and 'namespace'. + The corresponding value is the absolute path of that category for + this distribution, and takes into account any paths selected by the + user at installation time (e.g. via command-line arguments). In the + case of the 'namespace' key, this would be a list of absolute paths + for the roots of namespace packages in this distribution. + + The first time this property is accessed, the relevant information is + read from the SHARED file in the .dist-info directory. + """ + result = {} + shared_path = os.path.join(self.path, 'SHARED') + if os.path.isfile(shared_path): + with codecs.open(shared_path, 'r', encoding='utf-8') as f: + lines = f.read().splitlines() + for line in lines: + key, value = line.split('=', 1) + if key == 'namespace': + result.setdefault(key, []).append(value) + else: + result[key] = value + return result + + def write_shared_locations(self, paths, dry_run=False): + """ + Write shared location information to the SHARED file in .dist-info. + :param paths: A dictionary as described in the documentation for + :meth:`shared_locations`. + :param dry_run: If True, the action is logged but no file is actually + written. + :return: The path of the file written to. + """ + shared_path = os.path.join(self.path, 'SHARED') + logger.info('creating %s', shared_path) + if dry_run: + return None + lines = [] + for key in ('prefix', 'lib', 'headers', 'scripts', 'data'): + path = paths[key] + if os.path.isdir(paths[key]): + lines.append('%s=%s' % (key, path)) + for ns in paths.get('namespace', ()): + lines.append('namespace=%s' % ns) + + with codecs.open(shared_path, 'w', encoding='utf-8') as f: + f.write('\n'.join(lines)) + return shared_path + + def get_distinfo_resource(self, path): + if path not in DIST_FILES: + raise DistlibException('invalid path for a dist-info file: ' + '%r at %r' % (path, self.path)) + finder = resources.finder_for_path(self.path) + if finder is None: + raise DistlibException('Unable to get a finder for %s' % self.path) + return finder.find(path) + + def get_distinfo_file(self, path): + """ + Returns a path located under the ``.dist-info`` directory. Returns a + string representing the path. + + :parameter path: a ``'/'``-separated path relative to the + ``.dist-info`` directory or an absolute path; + If *path* is an absolute path and doesn't start + with the ``.dist-info`` directory path, + a :class:`DistlibException` is raised + :type path: str + :rtype: str + """ + # Check if it is an absolute path # XXX use relpath, add tests + if path.find(os.sep) >= 0: + # it's an absolute path? + distinfo_dirname, path = path.split(os.sep)[-2:] + if distinfo_dirname != self.path.split(os.sep)[-1]: + raise DistlibException( + 'dist-info file %r does not belong to the %r %s ' + 'distribution' % (path, self.name, self.version)) + + # The file must be relative + if path not in DIST_FILES: + raise DistlibException('invalid path for a dist-info file: ' + '%r at %r' % (path, self.path)) + + return os.path.join(self.path, path) + + def list_distinfo_files(self): + """ + Iterates over the ``RECORD`` entries and returns paths for each line if + the path is pointing to a file located in the ``.dist-info`` directory + or one of its subdirectories. + + :returns: iterator of paths + """ + base = os.path.dirname(self.path) + for path, checksum, size in self._get_records(): + # XXX add separator or use real relpath algo + if not os.path.isabs(path): + path = os.path.join(base, path) + if path.startswith(self.path): + yield path + + def __eq__(self, other): + return (isinstance(other, InstalledDistribution) and + self.path == other.path) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + __hash__ = object.__hash__ + + +class EggInfoDistribution(BaseInstalledDistribution): + """Created with the *path* of the ``.egg-info`` directory or file provided + to the constructor. It reads the metadata contained in the file itself, or + if the given path happens to be a directory, the metadata is read from the + file ``PKG-INFO`` under that directory.""" + + requested = True # as we have no way of knowing, assume it was + shared_locations = {} + + def __init__(self, path, env=None): + def set_name_and_version(s, n, v): + s.name = n + s.key = n.lower() # for case-insensitive comparisons + s.version = v + + self.path = path + self.dist_path = env + if env and env._cache_enabled and path in env._cache_egg.path: + metadata = env._cache_egg.path[path].metadata + set_name_and_version(self, metadata.name, metadata.version) + else: + metadata = self._get_metadata(path) + + # Need to be set before caching + set_name_and_version(self, metadata.name, metadata.version) + + if env and env._cache_enabled: + env._cache_egg.add(self) + super(EggInfoDistribution, self).__init__(metadata, path, env) + + def _get_metadata(self, path): + requires = None + + def parse_requires_data(data): + """Create a list of dependencies from a requires.txt file. + + *data*: the contents of a setuptools-produced requires.txt file. + """ + reqs = [] + lines = data.splitlines() + for line in lines: + line = line.strip() + if line.startswith('['): + logger.warning('Unexpected line: quitting requirement scan: %r', + line) + break + r = parse_requirement(line) + if not r: + logger.warning('Not recognised as a requirement: %r', line) + continue + if r.extras: + logger.warning('extra requirements in requires.txt are ' + 'not supported') + if not r.constraints: + reqs.append(r.name) + else: + cons = ', '.join('%s%s' % c for c in r.constraints) + reqs.append('%s (%s)' % (r.name, cons)) + return reqs + + def parse_requires_path(req_path): + """Create a list of dependencies from a requires.txt file. + + *req_path*: the path to a setuptools-produced requires.txt file. + """ + + reqs = [] + try: + with codecs.open(req_path, 'r', 'utf-8') as fp: + reqs = parse_requires_data(fp.read()) + except IOError: + pass + return reqs + + tl_path = tl_data = None + if path.endswith('.egg'): + if os.path.isdir(path): + p = os.path.join(path, 'EGG-INFO') + meta_path = os.path.join(p, 'PKG-INFO') + metadata = Metadata(path=meta_path, scheme='legacy') + req_path = os.path.join(p, 'requires.txt') + tl_path = os.path.join(p, 'top_level.txt') + requires = parse_requires_path(req_path) + else: + # FIXME handle the case where zipfile is not available + zipf = zipimport.zipimporter(path) + fileobj = StringIO( + zipf.get_data('EGG-INFO/PKG-INFO').decode('utf8')) + metadata = Metadata(fileobj=fileobj, scheme='legacy') + try: + data = zipf.get_data('EGG-INFO/requires.txt') + tl_data = zipf.get_data('EGG-INFO/top_level.txt').decode('utf-8') + requires = parse_requires_data(data.decode('utf-8')) + except IOError: + requires = None + elif path.endswith('.egg-info'): + if os.path.isdir(path): + req_path = os.path.join(path, 'requires.txt') + requires = parse_requires_path(req_path) + path = os.path.join(path, 'PKG-INFO') + tl_path = os.path.join(path, 'top_level.txt') + metadata = Metadata(path=path, scheme='legacy') + else: + raise DistlibException('path must end with .egg-info or .egg, ' + 'got %r' % path) + + if requires: + metadata.add_requirements(requires) + # look for top-level modules in top_level.txt, if present + if tl_data is None: + if tl_path is not None and os.path.exists(tl_path): + with open(tl_path, 'rb') as f: + tl_data = f.read().decode('utf-8') + if not tl_data: + tl_data = [] + else: + tl_data = tl_data.splitlines() + self.modules = tl_data + return metadata + + def __repr__(self): + return '' % ( + self.name, self.version, self.path) + + def __str__(self): + return "%s %s" % (self.name, self.version) + + def check_installed_files(self): + """ + Checks that the hashes and sizes of the files in ``RECORD`` are + matched by the files themselves. Returns a (possibly empty) list of + mismatches. Each entry in the mismatch list will be a tuple consisting + of the path, 'exists', 'size' or 'hash' according to what didn't match + (existence is checked first, then size, then hash), the expected + value and the actual value. + """ + mismatches = [] + record_path = os.path.join(self.path, 'installed-files.txt') + if os.path.exists(record_path): + for path, _, _ in self.list_installed_files(): + if path == record_path: + continue + if not os.path.exists(path): + mismatches.append((path, 'exists', True, False)) + return mismatches + + def list_installed_files(self): + """ + Iterates over the ``installed-files.txt`` entries and returns a tuple + ``(path, hash, size)`` for each line. + + :returns: a list of (path, hash, size) + """ + + def _md5(path): + f = open(path, 'rb') + try: + content = f.read() + finally: + f.close() + return hashlib.md5(content).hexdigest() + + def _size(path): + return os.stat(path).st_size + + record_path = os.path.join(self.path, 'installed-files.txt') + result = [] + if os.path.exists(record_path): + with codecs.open(record_path, 'r', encoding='utf-8') as f: + for line in f: + line = line.strip() + p = os.path.normpath(os.path.join(self.path, line)) + # "./" is present as a marker between installed files + # and installation metadata files + if not os.path.exists(p): + logger.warning('Non-existent file: %s', p) + if p.endswith(('.pyc', '.pyo')): + continue + #otherwise fall through and fail + if not os.path.isdir(p): + result.append((p, _md5(p), _size(p))) + result.append((record_path, None, None)) + return result + + def list_distinfo_files(self, absolute=False): + """ + Iterates over the ``installed-files.txt`` entries and returns paths for + each line if the path is pointing to a file located in the + ``.egg-info`` directory or one of its subdirectories. + + :parameter absolute: If *absolute* is ``True``, each returned path is + transformed into a local absolute path. Otherwise the + raw value from ``installed-files.txt`` is returned. + :type absolute: boolean + :returns: iterator of paths + """ + record_path = os.path.join(self.path, 'installed-files.txt') + if os.path.exists(record_path): + skip = True + with codecs.open(record_path, 'r', encoding='utf-8') as f: + for line in f: + line = line.strip() + if line == './': + skip = False + continue + if not skip: + p = os.path.normpath(os.path.join(self.path, line)) + if p.startswith(self.path): + if absolute: + yield p + else: + yield line + + def __eq__(self, other): + return (isinstance(other, EggInfoDistribution) and + self.path == other.path) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + __hash__ = object.__hash__ + +new_dist_class = InstalledDistribution +old_dist_class = EggInfoDistribution + + +class DependencyGraph(object): + """ + Represents a dependency graph between distributions. + + The dependency relationships are stored in an ``adjacency_list`` that maps + distributions to a list of ``(other, label)`` tuples where ``other`` + is a distribution and the edge is labeled with ``label`` (i.e. the version + specifier, if such was provided). Also, for more efficient traversal, for + every distribution ``x``, a list of predecessors is kept in + ``reverse_list[x]``. An edge from distribution ``a`` to + distribution ``b`` means that ``a`` depends on ``b``. If any missing + dependencies are found, they are stored in ``missing``, which is a + dictionary that maps distributions to a list of requirements that were not + provided by any other distributions. + """ + + def __init__(self): + self.adjacency_list = {} + self.reverse_list = {} + self.missing = {} + + def add_distribution(self, distribution): + """Add the *distribution* to the graph. + + :type distribution: :class:`distutils2.database.InstalledDistribution` + or :class:`distutils2.database.EggInfoDistribution` + """ + self.adjacency_list[distribution] = [] + self.reverse_list[distribution] = [] + #self.missing[distribution] = [] + + def add_edge(self, x, y, label=None): + """Add an edge from distribution *x* to distribution *y* with the given + *label*. + + :type x: :class:`distutils2.database.InstalledDistribution` or + :class:`distutils2.database.EggInfoDistribution` + :type y: :class:`distutils2.database.InstalledDistribution` or + :class:`distutils2.database.EggInfoDistribution` + :type label: ``str`` or ``None`` + """ + self.adjacency_list[x].append((y, label)) + # multiple edges are allowed, so be careful + if x not in self.reverse_list[y]: + self.reverse_list[y].append(x) + + def add_missing(self, distribution, requirement): + """ + Add a missing *requirement* for the given *distribution*. + + :type distribution: :class:`distutils2.database.InstalledDistribution` + or :class:`distutils2.database.EggInfoDistribution` + :type requirement: ``str`` + """ + logger.debug('%s missing %r', distribution, requirement) + self.missing.setdefault(distribution, []).append(requirement) + + def _repr_dist(self, dist): + return '%s %s' % (dist.name, dist.version) + + def repr_node(self, dist, level=1): + """Prints only a subgraph""" + output = [self._repr_dist(dist)] + for other, label in self.adjacency_list[dist]: + dist = self._repr_dist(other) + if label is not None: + dist = '%s [%s]' % (dist, label) + output.append(' ' * level + str(dist)) + suboutput = self.repr_node(other, level + 1) + subs = suboutput.split('\n') + output.extend(subs[1:]) + return '\n'.join(output) + + def to_dot(self, f, skip_disconnected=True): + """Writes a DOT output for the graph to the provided file *f*. + + If *skip_disconnected* is set to ``True``, then all distributions + that are not dependent on any other distribution are skipped. + + :type f: has to support ``file``-like operations + :type skip_disconnected: ``bool`` + """ + disconnected = [] + + f.write("digraph dependencies {\n") + for dist, adjs in self.adjacency_list.items(): + if len(adjs) == 0 and not skip_disconnected: + disconnected.append(dist) + for other, label in adjs: + if not label is None: + f.write('"%s" -> "%s" [label="%s"]\n' % + (dist.name, other.name, label)) + else: + f.write('"%s" -> "%s"\n' % (dist.name, other.name)) + if not skip_disconnected and len(disconnected) > 0: + f.write('subgraph disconnected {\n') + f.write('label = "Disconnected"\n') + f.write('bgcolor = red\n') + + for dist in disconnected: + f.write('"%s"' % dist.name) + f.write('\n') + f.write('}\n') + f.write('}\n') + + def topological_sort(self): + """ + Perform a topological sort of the graph. + :return: A tuple, the first element of which is a topologically sorted + list of distributions, and the second element of which is a + list of distributions that cannot be sorted because they have + circular dependencies and so form a cycle. + """ + result = [] + # Make a shallow copy of the adjacency list + alist = {} + for k, v in self.adjacency_list.items(): + alist[k] = v[:] + while True: + # See what we can remove in this run + to_remove = [] + for k, v in list(alist.items())[:]: + if not v: + to_remove.append(k) + del alist[k] + if not to_remove: + # What's left in alist (if anything) is a cycle. + break + # Remove from the adjacency list of others + for k, v in alist.items(): + alist[k] = [(d, r) for d, r in v if d not in to_remove] + logger.debug('Moving to result: %s', + ['%s (%s)' % (d.name, d.version) for d in to_remove]) + result.extend(to_remove) + return result, list(alist.keys()) + + def __repr__(self): + """Representation of the graph""" + output = [] + for dist, adjs in self.adjacency_list.items(): + output.append(self.repr_node(dist)) + return '\n'.join(output) + + +def make_graph(dists, scheme='default'): + """Makes a dependency graph from the given distributions. + + :parameter dists: a list of distributions + :type dists: list of :class:`distutils2.database.InstalledDistribution` and + :class:`distutils2.database.EggInfoDistribution` instances + :rtype: a :class:`DependencyGraph` instance + """ + scheme = get_scheme(scheme) + graph = DependencyGraph() + provided = {} # maps names to lists of (version, dist) tuples + + # first, build the graph and find out what's provided + for dist in dists: + graph.add_distribution(dist) + + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Add to provided: %s, %s, %s', name, version, dist) + provided.setdefault(name, []).append((version, dist)) + + # now make the edges + for dist in dists: + requires = (dist.run_requires | dist.meta_requires | + dist.build_requires | dist.dev_requires) + for req in requires: + try: + matcher = scheme.matcher(req) + except UnsupportedVersionError: + # XXX compat-mode if cannot read the version + logger.warning('could not read version %r - using name only', + req) + name = req.split()[0] + matcher = scheme.matcher(name) + + name = matcher.key # case-insensitive + + matched = False + if name in provided: + for version, provider in provided[name]: + try: + match = matcher.match(version) + except UnsupportedVersionError: + match = False + + if match: + graph.add_edge(dist, provider, req) + matched = True + break + if not matched: + graph.add_missing(dist, req) + return graph + + +def get_dependent_dists(dists, dist): + """Recursively generate a list of distributions from *dists* that are + dependent on *dist*. + + :param dists: a list of distributions + :param dist: a distribution, member of *dists* for which we are interested + """ + if dist not in dists: + raise DistlibException('given distribution %r is not a member ' + 'of the list' % dist.name) + graph = make_graph(dists) + + dep = [dist] # dependent distributions + todo = graph.reverse_list[dist] # list of nodes we should inspect + + while todo: + d = todo.pop() + dep.append(d) + for succ in graph.reverse_list[d]: + if succ not in dep: + todo.append(succ) + + dep.pop(0) # remove dist from dep, was there to prevent infinite loops + return dep + + +def get_required_dists(dists, dist): + """Recursively generate a list of distributions from *dists* that are + required by *dist*. + + :param dists: a list of distributions + :param dist: a distribution, member of *dists* for which we are interested + """ + if dist not in dists: + raise DistlibException('given distribution %r is not a member ' + 'of the list' % dist.name) + graph = make_graph(dists) + + req = [] # required distributions + todo = graph.adjacency_list[dist] # list of nodes we should inspect + + while todo: + d = todo.pop()[0] + req.append(d) + for pred in graph.adjacency_list[d]: + if pred not in req: + todo.append(pred) + + return req + + +def make_dist(name, version, **kwargs): + """ + A convenience method for making a dist given just a name and version. + """ + summary = kwargs.pop('summary', 'Placeholder for summary') + md = Metadata(**kwargs) + md.name = name + md.version = version + md.summary = summary or 'Placeholder for summary' + return Distribution(md) diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/index.py b/my_env/Lib/site-packages/pip/_vendor/distlib/index.py new file mode 100644 index 000000000..7a87cdcf7 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/index.py @@ -0,0 +1,516 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import hashlib +import logging +import os +import shutil +import subprocess +import tempfile +try: + from threading import Thread +except ImportError: + from dummy_threading import Thread + +from . import DistlibException +from .compat import (HTTPBasicAuthHandler, Request, HTTPPasswordMgr, + urlparse, build_opener, string_types) +from .util import cached_property, zip_dir, ServerProxy + +logger = logging.getLogger(__name__) + +DEFAULT_INDEX = 'https://pypi.org/pypi' +DEFAULT_REALM = 'pypi' + +class PackageIndex(object): + """ + This class represents a package index compatible with PyPI, the Python + Package Index. + """ + + boundary = b'----------ThIs_Is_tHe_distlib_index_bouNdaRY_$' + + def __init__(self, url=None): + """ + Initialise an instance. + + :param url: The URL of the index. If not specified, the URL for PyPI is + used. + """ + self.url = url or DEFAULT_INDEX + self.read_configuration() + scheme, netloc, path, params, query, frag = urlparse(self.url) + if params or query or frag or scheme not in ('http', 'https'): + raise DistlibException('invalid repository: %s' % self.url) + self.password_handler = None + self.ssl_verifier = None + self.gpg = None + self.gpg_home = None + with open(os.devnull, 'w') as sink: + # Use gpg by default rather than gpg2, as gpg2 insists on + # prompting for passwords + for s in ('gpg', 'gpg2'): + try: + rc = subprocess.check_call([s, '--version'], stdout=sink, + stderr=sink) + if rc == 0: + self.gpg = s + break + except OSError: + pass + + def _get_pypirc_command(self): + """ + Get the distutils command for interacting with PyPI configurations. + :return: the command. + """ + from distutils.core import Distribution + from distutils.config import PyPIRCCommand + d = Distribution() + return PyPIRCCommand(d) + + def read_configuration(self): + """ + Read the PyPI access configuration as supported by distutils, getting + PyPI to do the actual work. This populates ``username``, ``password``, + ``realm`` and ``url`` attributes from the configuration. + """ + # get distutils to do the work + c = self._get_pypirc_command() + c.repository = self.url + cfg = c._read_pypirc() + self.username = cfg.get('username') + self.password = cfg.get('password') + self.realm = cfg.get('realm', 'pypi') + self.url = cfg.get('repository', self.url) + + def save_configuration(self): + """ + Save the PyPI access configuration. You must have set ``username`` and + ``password`` attributes before calling this method. + + Again, distutils is used to do the actual work. + """ + self.check_credentials() + # get distutils to do the work + c = self._get_pypirc_command() + c._store_pypirc(self.username, self.password) + + def check_credentials(self): + """ + Check that ``username`` and ``password`` have been set, and raise an + exception if not. + """ + if self.username is None or self.password is None: + raise DistlibException('username and password must be set') + pm = HTTPPasswordMgr() + _, netloc, _, _, _, _ = urlparse(self.url) + pm.add_password(self.realm, netloc, self.username, self.password) + self.password_handler = HTTPBasicAuthHandler(pm) + + def register(self, metadata): + """ + Register a distribution on PyPI, using the provided metadata. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the distribution to be + registered. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + metadata.validate() + d = metadata.todict() + d[':action'] = 'verify' + request = self.encode_request(d.items(), []) + response = self.send_request(request) + d[':action'] = 'submit' + request = self.encode_request(d.items(), []) + return self.send_request(request) + + def _reader(self, name, stream, outbuf): + """ + Thread runner for reading lines of from a subprocess into a buffer. + + :param name: The logical name of the stream (used for logging only). + :param stream: The stream to read from. This will typically a pipe + connected to the output stream of a subprocess. + :param outbuf: The list to append the read lines to. + """ + while True: + s = stream.readline() + if not s: + break + s = s.decode('utf-8').rstrip() + outbuf.append(s) + logger.debug('%s: %s' % (name, s)) + stream.close() + + def get_sign_command(self, filename, signer, sign_password, + keystore=None): + """ + Return a suitable command for signing a file. + + :param filename: The pathname to the file to be signed. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: The signing command as a list suitable to be + passed to :class:`subprocess.Popen`. + """ + cmd = [self.gpg, '--status-fd', '2', '--no-tty'] + if keystore is None: + keystore = self.gpg_home + if keystore: + cmd.extend(['--homedir', keystore]) + if sign_password is not None: + cmd.extend(['--batch', '--passphrase-fd', '0']) + td = tempfile.mkdtemp() + sf = os.path.join(td, os.path.basename(filename) + '.asc') + cmd.extend(['--detach-sign', '--armor', '--local-user', + signer, '--output', sf, filename]) + logger.debug('invoking: %s', ' '.join(cmd)) + return cmd, sf + + def run_command(self, cmd, input_data=None): + """ + Run a command in a child process , passing it any input data specified. + + :param cmd: The command to run. + :param input_data: If specified, this must be a byte string containing + data to be sent to the child process. + :return: A tuple consisting of the subprocess' exit code, a list of + lines read from the subprocess' ``stdout``, and a list of + lines read from the subprocess' ``stderr``. + """ + kwargs = { + 'stdout': subprocess.PIPE, + 'stderr': subprocess.PIPE, + } + if input_data is not None: + kwargs['stdin'] = subprocess.PIPE + stdout = [] + stderr = [] + p = subprocess.Popen(cmd, **kwargs) + # We don't use communicate() here because we may need to + # get clever with interacting with the command + t1 = Thread(target=self._reader, args=('stdout', p.stdout, stdout)) + t1.start() + t2 = Thread(target=self._reader, args=('stderr', p.stderr, stderr)) + t2.start() + if input_data is not None: + p.stdin.write(input_data) + p.stdin.close() + + p.wait() + t1.join() + t2.join() + return p.returncode, stdout, stderr + + def sign_file(self, filename, signer, sign_password, keystore=None): + """ + Sign a file. + + :param filename: The pathname to the file to be signed. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param keystore: The path to a directory which contains the keys + used in signing. If not specified, the instance's + ``gpg_home`` attribute is used instead. + :return: The absolute pathname of the file where the signature is + stored. + """ + cmd, sig_file = self.get_sign_command(filename, signer, sign_password, + keystore) + rc, stdout, stderr = self.run_command(cmd, + sign_password.encode('utf-8')) + if rc != 0: + raise DistlibException('sign command failed with error ' + 'code %s' % rc) + return sig_file + + def upload_file(self, metadata, filename, signer=None, sign_password=None, + filetype='sdist', pyversion='source', keystore=None): + """ + Upload a release file to the index. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the file to be uploaded. + :param filename: The pathname of the file to be uploaded. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param filetype: The type of the file being uploaded. This is the + distutils command which produced that file, e.g. + ``sdist`` or ``bdist_wheel``. + :param pyversion: The version of Python which the release relates + to. For code compatible with any Python, this would + be ``source``, otherwise it would be e.g. ``3.2``. + :param keystore: The path to a directory which contains the keys + used in signing. If not specified, the instance's + ``gpg_home`` attribute is used instead. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + if not os.path.exists(filename): + raise DistlibException('not found: %s' % filename) + metadata.validate() + d = metadata.todict() + sig_file = None + if signer: + if not self.gpg: + logger.warning('no signing program available - not signed') + else: + sig_file = self.sign_file(filename, signer, sign_password, + keystore) + with open(filename, 'rb') as f: + file_data = f.read() + md5_digest = hashlib.md5(file_data).hexdigest() + sha256_digest = hashlib.sha256(file_data).hexdigest() + d.update({ + ':action': 'file_upload', + 'protocol_version': '1', + 'filetype': filetype, + 'pyversion': pyversion, + 'md5_digest': md5_digest, + 'sha256_digest': sha256_digest, + }) + files = [('content', os.path.basename(filename), file_data)] + if sig_file: + with open(sig_file, 'rb') as f: + sig_data = f.read() + files.append(('gpg_signature', os.path.basename(sig_file), + sig_data)) + shutil.rmtree(os.path.dirname(sig_file)) + request = self.encode_request(d.items(), files) + return self.send_request(request) + + def upload_documentation(self, metadata, doc_dir): + """ + Upload documentation to the index. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the documentation to be + uploaded. + :param doc_dir: The pathname of the directory which contains the + documentation. This should be the directory that + contains the ``index.html`` for the documentation. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + if not os.path.isdir(doc_dir): + raise DistlibException('not a directory: %r' % doc_dir) + fn = os.path.join(doc_dir, 'index.html') + if not os.path.exists(fn): + raise DistlibException('not found: %r' % fn) + metadata.validate() + name, version = metadata.name, metadata.version + zip_data = zip_dir(doc_dir).getvalue() + fields = [(':action', 'doc_upload'), + ('name', name), ('version', version)] + files = [('content', name, zip_data)] + request = self.encode_request(fields, files) + return self.send_request(request) + + def get_verify_command(self, signature_filename, data_filename, + keystore=None): + """ + Return a suitable command for verifying a file. + + :param signature_filename: The pathname to the file containing the + signature. + :param data_filename: The pathname to the file containing the + signed data. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: The verifying command as a list suitable to be + passed to :class:`subprocess.Popen`. + """ + cmd = [self.gpg, '--status-fd', '2', '--no-tty'] + if keystore is None: + keystore = self.gpg_home + if keystore: + cmd.extend(['--homedir', keystore]) + cmd.extend(['--verify', signature_filename, data_filename]) + logger.debug('invoking: %s', ' '.join(cmd)) + return cmd + + def verify_signature(self, signature_filename, data_filename, + keystore=None): + """ + Verify a signature for a file. + + :param signature_filename: The pathname to the file containing the + signature. + :param data_filename: The pathname to the file containing the + signed data. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: True if the signature was verified, else False. + """ + if not self.gpg: + raise DistlibException('verification unavailable because gpg ' + 'unavailable') + cmd = self.get_verify_command(signature_filename, data_filename, + keystore) + rc, stdout, stderr = self.run_command(cmd) + if rc not in (0, 1): + raise DistlibException('verify command failed with error ' + 'code %s' % rc) + return rc == 0 + + def download_file(self, url, destfile, digest=None, reporthook=None): + """ + This is a convenience method for downloading a file from an URL. + Normally, this will be a file from the index, though currently + no check is made for this (i.e. a file can be downloaded from + anywhere). + + The method is just like the :func:`urlretrieve` function in the + standard library, except that it allows digest computation to be + done during download and checking that the downloaded data + matched any expected value. + + :param url: The URL of the file to be downloaded (assumed to be + available via an HTTP GET request). + :param destfile: The pathname where the downloaded file is to be + saved. + :param digest: If specified, this must be a (hasher, value) + tuple, where hasher is the algorithm used (e.g. + ``'md5'``) and ``value`` is the expected value. + :param reporthook: The same as for :func:`urlretrieve` in the + standard library. + """ + if digest is None: + digester = None + logger.debug('No digest specified') + else: + if isinstance(digest, (list, tuple)): + hasher, digest = digest + else: + hasher = 'md5' + digester = getattr(hashlib, hasher)() + logger.debug('Digest specified: %s' % digest) + # The following code is equivalent to urlretrieve. + # We need to do it this way so that we can compute the + # digest of the file as we go. + with open(destfile, 'wb') as dfp: + # addinfourl is not a context manager on 2.x + # so we have to use try/finally + sfp = self.send_request(Request(url)) + try: + headers = sfp.info() + blocksize = 8192 + size = -1 + read = 0 + blocknum = 0 + if "content-length" in headers: + size = int(headers["Content-Length"]) + if reporthook: + reporthook(blocknum, blocksize, size) + while True: + block = sfp.read(blocksize) + if not block: + break + read += len(block) + dfp.write(block) + if digester: + digester.update(block) + blocknum += 1 + if reporthook: + reporthook(blocknum, blocksize, size) + finally: + sfp.close() + + # check that we got the whole file, if we can + if size >= 0 and read < size: + raise DistlibException( + 'retrieval incomplete: got only %d out of %d bytes' + % (read, size)) + # if we have a digest, it must match. + if digester: + actual = digester.hexdigest() + if digest != actual: + raise DistlibException('%s digest mismatch for %s: expected ' + '%s, got %s' % (hasher, destfile, + digest, actual)) + logger.debug('Digest verified: %s', digest) + + def send_request(self, req): + """ + Send a standard library :class:`Request` to PyPI and return its + response. + + :param req: The request to send. + :return: The HTTP response from PyPI (a standard library HTTPResponse). + """ + handlers = [] + if self.password_handler: + handlers.append(self.password_handler) + if self.ssl_verifier: + handlers.append(self.ssl_verifier) + opener = build_opener(*handlers) + return opener.open(req) + + def encode_request(self, fields, files): + """ + Encode fields and files for posting to an HTTP server. + + :param fields: The fields to send as a list of (fieldname, value) + tuples. + :param files: The files to send as a list of (fieldname, filename, + file_bytes) tuple. + """ + # Adapted from packaging, which in turn was adapted from + # http://code.activestate.com/recipes/146306 + + parts = [] + boundary = self.boundary + for k, values in fields: + if not isinstance(values, (list, tuple)): + values = [values] + + for v in values: + parts.extend(( + b'--' + boundary, + ('Content-Disposition: form-data; name="%s"' % + k).encode('utf-8'), + b'', + v.encode('utf-8'))) + for key, filename, value in files: + parts.extend(( + b'--' + boundary, + ('Content-Disposition: form-data; name="%s"; filename="%s"' % + (key, filename)).encode('utf-8'), + b'', + value)) + + parts.extend((b'--' + boundary + b'--', b'')) + + body = b'\r\n'.join(parts) + ct = b'multipart/form-data; boundary=' + boundary + headers = { + 'Content-type': ct, + 'Content-length': str(len(body)) + } + return Request(self.url, body, headers) + + def search(self, terms, operator=None): + if isinstance(terms, string_types): + terms = {'name': terms} + rpc_proxy = ServerProxy(self.url, timeout=3.0) + try: + return rpc_proxy.search(terms, operator or 'and') + finally: + rpc_proxy('close')() diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/locators.py b/my_env/Lib/site-packages/pip/_vendor/distlib/locators.py new file mode 100644 index 000000000..a7ed9469d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/locators.py @@ -0,0 +1,1295 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2015 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# + +import gzip +from io import BytesIO +import json +import logging +import os +import posixpath +import re +try: + import threading +except ImportError: # pragma: no cover + import dummy_threading as threading +import zlib + +from . import DistlibException +from .compat import (urljoin, urlparse, urlunparse, url2pathname, pathname2url, + queue, quote, unescape, string_types, build_opener, + HTTPRedirectHandler as BaseRedirectHandler, text_type, + Request, HTTPError, URLError) +from .database import Distribution, DistributionPath, make_dist +from .metadata import Metadata, MetadataInvalidError +from .util import (cached_property, parse_credentials, ensure_slash, + split_filename, get_project_data, parse_requirement, + parse_name_and_version, ServerProxy, normalize_name) +from .version import get_scheme, UnsupportedVersionError +from .wheel import Wheel, is_compatible + +logger = logging.getLogger(__name__) + +HASHER_HASH = re.compile(r'^(\w+)=([a-f0-9]+)') +CHARSET = re.compile(r';\s*charset\s*=\s*(.*)\s*$', re.I) +HTML_CONTENT_TYPE = re.compile('text/html|application/x(ht)?ml') +DEFAULT_INDEX = 'https://pypi.org/pypi' + +def get_all_distribution_names(url=None): + """ + Return all distribution names known by an index. + :param url: The URL of the index. + :return: A list of all known distribution names. + """ + if url is None: + url = DEFAULT_INDEX + client = ServerProxy(url, timeout=3.0) + try: + return client.list_packages() + finally: + client('close')() + +class RedirectHandler(BaseRedirectHandler): + """ + A class to work around a bug in some Python 3.2.x releases. + """ + # There's a bug in the base version for some 3.2.x + # (e.g. 3.2.2 on Ubuntu Oneiric). If a Location header + # returns e.g. /abc, it bails because it says the scheme '' + # is bogus, when actually it should use the request's + # URL for the scheme. See Python issue #13696. + def http_error_302(self, req, fp, code, msg, headers): + # Some servers (incorrectly) return multiple Location headers + # (so probably same goes for URI). Use first header. + newurl = None + for key in ('location', 'uri'): + if key in headers: + newurl = headers[key] + break + if newurl is None: # pragma: no cover + return + urlparts = urlparse(newurl) + if urlparts.scheme == '': + newurl = urljoin(req.get_full_url(), newurl) + if hasattr(headers, 'replace_header'): + headers.replace_header(key, newurl) + else: + headers[key] = newurl + return BaseRedirectHandler.http_error_302(self, req, fp, code, msg, + headers) + + http_error_301 = http_error_303 = http_error_307 = http_error_302 + +class Locator(object): + """ + A base class for locators - things that locate distributions. + """ + source_extensions = ('.tar.gz', '.tar.bz2', '.tar', '.zip', '.tgz', '.tbz') + binary_extensions = ('.egg', '.exe', '.whl') + excluded_extensions = ('.pdf',) + + # A list of tags indicating which wheels you want to match. The default + # value of None matches against the tags compatible with the running + # Python. If you want to match other values, set wheel_tags on a locator + # instance to a list of tuples (pyver, abi, arch) which you want to match. + wheel_tags = None + + downloadable_extensions = source_extensions + ('.whl',) + + def __init__(self, scheme='default'): + """ + Initialise an instance. + :param scheme: Because locators look for most recent versions, they + need to know the version scheme to use. This specifies + the current PEP-recommended scheme - use ``'legacy'`` + if you need to support existing distributions on PyPI. + """ + self._cache = {} + self.scheme = scheme + # Because of bugs in some of the handlers on some of the platforms, + # we use our own opener rather than just using urlopen. + self.opener = build_opener(RedirectHandler()) + # If get_project() is called from locate(), the matcher instance + # is set from the requirement passed to locate(). See issue #18 for + # why this can be useful to know. + self.matcher = None + self.errors = queue.Queue() + + def get_errors(self): + """ + Return any errors which have occurred. + """ + result = [] + while not self.errors.empty(): # pragma: no cover + try: + e = self.errors.get(False) + result.append(e) + except self.errors.Empty: + continue + self.errors.task_done() + return result + + def clear_errors(self): + """ + Clear any errors which may have been logged. + """ + # Just get the errors and throw them away + self.get_errors() + + def clear_cache(self): + self._cache.clear() + + def _get_scheme(self): + return self._scheme + + def _set_scheme(self, value): + self._scheme = value + + scheme = property(_get_scheme, _set_scheme) + + def _get_project(self, name): + """ + For a given project, get a dictionary mapping available versions to Distribution + instances. + + This should be implemented in subclasses. + + If called from a locate() request, self.matcher will be set to a + matcher for the requirement to satisfy, otherwise it will be None. + """ + raise NotImplementedError('Please implement in the subclass') + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Please implement in the subclass') + + def get_project(self, name): + """ + For a given project, get a dictionary mapping available versions to Distribution + instances. + + This calls _get_project to do all the work, and just implements a caching layer on top. + """ + if self._cache is None: # pragma: no cover + result = self._get_project(name) + elif name in self._cache: + result = self._cache[name] + else: + self.clear_errors() + result = self._get_project(name) + self._cache[name] = result + return result + + def score_url(self, url): + """ + Give an url a score which can be used to choose preferred URLs + for a given project release. + """ + t = urlparse(url) + basename = posixpath.basename(t.path) + compatible = True + is_wheel = basename.endswith('.whl') + is_downloadable = basename.endswith(self.downloadable_extensions) + if is_wheel: + compatible = is_compatible(Wheel(basename), self.wheel_tags) + return (t.scheme == 'https', 'pypi.org' in t.netloc, + is_downloadable, is_wheel, compatible, basename) + + def prefer_url(self, url1, url2): + """ + Choose one of two URLs where both are candidates for distribution + archives for the same version of a distribution (for example, + .tar.gz vs. zip). + + The current implementation favours https:// URLs over http://, archives + from PyPI over those from other locations, wheel compatibility (if a + wheel) and then the archive name. + """ + result = url2 + if url1: + s1 = self.score_url(url1) + s2 = self.score_url(url2) + if s1 > s2: + result = url1 + if result != url2: + logger.debug('Not replacing %r with %r', url1, url2) + else: + logger.debug('Replacing %r with %r', url1, url2) + return result + + def split_filename(self, filename, project_name): + """ + Attempt to split a filename in project name, version and Python version. + """ + return split_filename(filename, project_name) + + def convert_url_to_download_info(self, url, project_name): + """ + See if a URL is a candidate for a download URL for a project (the URL + has typically been scraped from an HTML page). + + If it is, a dictionary is returned with keys "name", "version", + "filename" and "url"; otherwise, None is returned. + """ + def same_project(name1, name2): + return normalize_name(name1) == normalize_name(name2) + + result = None + scheme, netloc, path, params, query, frag = urlparse(url) + if frag.lower().startswith('egg='): # pragma: no cover + logger.debug('%s: version hint in fragment: %r', + project_name, frag) + m = HASHER_HASH.match(frag) + if m: + algo, digest = m.groups() + else: + algo, digest = None, None + origpath = path + if path and path[-1] == '/': # pragma: no cover + path = path[:-1] + if path.endswith('.whl'): + try: + wheel = Wheel(path) + if not is_compatible(wheel, self.wheel_tags): + logger.debug('Wheel not compatible: %s', path) + else: + if project_name is None: + include = True + else: + include = same_project(wheel.name, project_name) + if include: + result = { + 'name': wheel.name, + 'version': wheel.version, + 'filename': wheel.filename, + 'url': urlunparse((scheme, netloc, origpath, + params, query, '')), + 'python-version': ', '.join( + ['.'.join(list(v[2:])) for v in wheel.pyver]), + } + except Exception as e: # pragma: no cover + logger.warning('invalid path for wheel: %s', path) + elif not path.endswith(self.downloadable_extensions): # pragma: no cover + logger.debug('Not downloadable: %s', path) + else: # downloadable extension + path = filename = posixpath.basename(path) + for ext in self.downloadable_extensions: + if path.endswith(ext): + path = path[:-len(ext)] + t = self.split_filename(path, project_name) + if not t: # pragma: no cover + logger.debug('No match for project/version: %s', path) + else: + name, version, pyver = t + if not project_name or same_project(project_name, name): + result = { + 'name': name, + 'version': version, + 'filename': filename, + 'url': urlunparse((scheme, netloc, origpath, + params, query, '')), + #'packagetype': 'sdist', + } + if pyver: # pragma: no cover + result['python-version'] = pyver + break + if result and algo: + result['%s_digest' % algo] = digest + return result + + def _get_digest(self, info): + """ + Get a digest from a dictionary by looking at keys of the form + 'algo_digest'. + + Returns a 2-tuple (algo, digest) if found, else None. Currently + looks only for SHA256, then MD5. + """ + result = None + for algo in ('sha256', 'md5'): + key = '%s_digest' % algo + if key in info: + result = (algo, info[key]) + break + return result + + def _update_version_data(self, result, info): + """ + Update a result dictionary (the final result from _get_project) with a + dictionary for a specific version, which typically holds information + gleaned from a filename or URL for an archive for the distribution. + """ + name = info.pop('name') + version = info.pop('version') + if version in result: + dist = result[version] + md = dist.metadata + else: + dist = make_dist(name, version, scheme=self.scheme) + md = dist.metadata + dist.digest = digest = self._get_digest(info) + url = info['url'] + result['digests'][url] = digest + if md.source_url != info['url']: + md.source_url = self.prefer_url(md.source_url, url) + result['urls'].setdefault(version, set()).add(url) + dist.locator = self + result[version] = dist + + def locate(self, requirement, prereleases=False): + """ + Find the most recent distribution which matches the given + requirement. + + :param requirement: A requirement of the form 'foo (1.0)' or perhaps + 'foo (>= 1.0, < 2.0, != 1.3)' + :param prereleases: If ``True``, allow pre-release versions + to be located. Otherwise, pre-release versions + are not returned. + :return: A :class:`Distribution` instance, or ``None`` if no such + distribution could be located. + """ + result = None + r = parse_requirement(requirement) + if r is None: # pragma: no cover + raise DistlibException('Not a valid requirement: %r' % requirement) + scheme = get_scheme(self.scheme) + self.matcher = matcher = scheme.matcher(r.requirement) + logger.debug('matcher: %s (%s)', matcher, type(matcher).__name__) + versions = self.get_project(r.name) + if len(versions) > 2: # urls and digests keys are present + # sometimes, versions are invalid + slist = [] + vcls = matcher.version_class + for k in versions: + if k in ('urls', 'digests'): + continue + try: + if not matcher.match(k): + logger.debug('%s did not match %r', matcher, k) + else: + if prereleases or not vcls(k).is_prerelease: + slist.append(k) + else: + logger.debug('skipping pre-release ' + 'version %s of %s', k, matcher.name) + except Exception: # pragma: no cover + logger.warning('error matching %s with %r', matcher, k) + pass # slist.append(k) + if len(slist) > 1: + slist = sorted(slist, key=scheme.key) + if slist: + logger.debug('sorted list: %s', slist) + version = slist[-1] + result = versions[version] + if result: + if r.extras: + result.extras = r.extras + result.download_urls = versions.get('urls', {}).get(version, set()) + d = {} + sd = versions.get('digests', {}) + for url in result.download_urls: + if url in sd: # pragma: no cover + d[url] = sd[url] + result.digests = d + self.matcher = None + return result + + +class PyPIRPCLocator(Locator): + """ + This locator uses XML-RPC to locate distributions. It therefore + cannot be used with simple mirrors (that only mirror file content). + """ + def __init__(self, url, **kwargs): + """ + Initialise an instance. + + :param url: The URL to use for XML-RPC. + :param kwargs: Passed to the superclass constructor. + """ + super(PyPIRPCLocator, self).__init__(**kwargs) + self.base_url = url + self.client = ServerProxy(url, timeout=3.0) + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + return set(self.client.list_packages()) + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + versions = self.client.package_releases(name, True) + for v in versions: + urls = self.client.release_urls(name, v) + data = self.client.release_data(name, v) + metadata = Metadata(scheme=self.scheme) + metadata.name = data['name'] + metadata.version = data['version'] + metadata.license = data.get('license') + metadata.keywords = data.get('keywords', []) + metadata.summary = data.get('summary') + dist = Distribution(metadata) + if urls: + info = urls[0] + metadata.source_url = info['url'] + dist.digest = self._get_digest(info) + dist.locator = self + result[v] = dist + for info in urls: + url = info['url'] + digest = self._get_digest(info) + result['urls'].setdefault(v, set()).add(url) + result['digests'][url] = digest + return result + +class PyPIJSONLocator(Locator): + """ + This locator uses PyPI's JSON interface. It's very limited in functionality + and probably not worth using. + """ + def __init__(self, url, **kwargs): + super(PyPIJSONLocator, self).__init__(**kwargs) + self.base_url = ensure_slash(url) + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Not available from this locator') + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + url = urljoin(self.base_url, '%s/json' % quote(name)) + try: + resp = self.opener.open(url) + data = resp.read().decode() # for now + d = json.loads(data) + md = Metadata(scheme=self.scheme) + data = d['info'] + md.name = data['name'] + md.version = data['version'] + md.license = data.get('license') + md.keywords = data.get('keywords', []) + md.summary = data.get('summary') + dist = Distribution(md) + dist.locator = self + urls = d['urls'] + result[md.version] = dist + for info in d['urls']: + url = info['url'] + dist.download_urls.add(url) + dist.digests[url] = self._get_digest(info) + result['urls'].setdefault(md.version, set()).add(url) + result['digests'][url] = self._get_digest(info) + # Now get other releases + for version, infos in d['releases'].items(): + if version == md.version: + continue # already done + omd = Metadata(scheme=self.scheme) + omd.name = md.name + omd.version = version + odist = Distribution(omd) + odist.locator = self + result[version] = odist + for info in infos: + url = info['url'] + odist.download_urls.add(url) + odist.digests[url] = self._get_digest(info) + result['urls'].setdefault(version, set()).add(url) + result['digests'][url] = self._get_digest(info) +# for info in urls: +# md.source_url = info['url'] +# dist.digest = self._get_digest(info) +# dist.locator = self +# for info in urls: +# url = info['url'] +# result['urls'].setdefault(md.version, set()).add(url) +# result['digests'][url] = self._get_digest(info) + except Exception as e: + self.errors.put(text_type(e)) + logger.exception('JSON fetch failed: %s', e) + return result + + +class Page(object): + """ + This class represents a scraped HTML page. + """ + # The following slightly hairy-looking regex just looks for the contents of + # an anchor link, which has an attribute "href" either immediately preceded + # or immediately followed by a "rel" attribute. The attribute values can be + # declared with double quotes, single quotes or no quotes - which leads to + # the length of the expression. + _href = re.compile(""" +(rel\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*))\\s+)? +href\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*)) +(\\s+rel\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*)))? +""", re.I | re.S | re.X) + _base = re.compile(r"""]+)""", re.I | re.S) + + def __init__(self, data, url): + """ + Initialise an instance with the Unicode page contents and the URL they + came from. + """ + self.data = data + self.base_url = self.url = url + m = self._base.search(self.data) + if m: + self.base_url = m.group(1) + + _clean_re = re.compile(r'[^a-z0-9$&+,/:;=?@.#%_\\|-]', re.I) + + @cached_property + def links(self): + """ + Return the URLs of all the links on a page together with information + about their "rel" attribute, for determining which ones to treat as + downloads and which ones to queue for further scraping. + """ + def clean(url): + "Tidy up an URL." + scheme, netloc, path, params, query, frag = urlparse(url) + return urlunparse((scheme, netloc, quote(path), + params, query, frag)) + + result = set() + for match in self._href.finditer(self.data): + d = match.groupdict('') + rel = (d['rel1'] or d['rel2'] or d['rel3'] or + d['rel4'] or d['rel5'] or d['rel6']) + url = d['url1'] or d['url2'] or d['url3'] + url = urljoin(self.base_url, url) + url = unescape(url) + url = self._clean_re.sub(lambda m: '%%%2x' % ord(m.group(0)), url) + result.add((url, rel)) + # We sort the result, hoping to bring the most recent versions + # to the front + result = sorted(result, key=lambda t: t[0], reverse=True) + return result + + +class SimpleScrapingLocator(Locator): + """ + A locator which scrapes HTML pages to locate downloads for a distribution. + This runs multiple threads to do the I/O; performance is at least as good + as pip's PackageFinder, which works in an analogous fashion. + """ + + # These are used to deal with various Content-Encoding schemes. + decoders = { + 'deflate': zlib.decompress, + 'gzip': lambda b: gzip.GzipFile(fileobj=BytesIO(d)).read(), + 'none': lambda b: b, + } + + def __init__(self, url, timeout=None, num_workers=10, **kwargs): + """ + Initialise an instance. + :param url: The root URL to use for scraping. + :param timeout: The timeout, in seconds, to be applied to requests. + This defaults to ``None`` (no timeout specified). + :param num_workers: The number of worker threads you want to do I/O, + This defaults to 10. + :param kwargs: Passed to the superclass. + """ + super(SimpleScrapingLocator, self).__init__(**kwargs) + self.base_url = ensure_slash(url) + self.timeout = timeout + self._page_cache = {} + self._seen = set() + self._to_fetch = queue.Queue() + self._bad_hosts = set() + self.skip_externals = False + self.num_workers = num_workers + self._lock = threading.RLock() + # See issue #45: we need to be resilient when the locator is used + # in a thread, e.g. with concurrent.futures. We can't use self._lock + # as it is for coordinating our internal threads - the ones created + # in _prepare_threads. + self._gplock = threading.RLock() + self.platform_check = False # See issue #112 + + def _prepare_threads(self): + """ + Threads are created only when get_project is called, and terminate + before it returns. They are there primarily to parallelise I/O (i.e. + fetching web pages). + """ + self._threads = [] + for i in range(self.num_workers): + t = threading.Thread(target=self._fetch) + t.setDaemon(True) + t.start() + self._threads.append(t) + + def _wait_threads(self): + """ + Tell all the threads to terminate (by sending a sentinel value) and + wait for them to do so. + """ + # Note that you need two loops, since you can't say which + # thread will get each sentinel + for t in self._threads: + self._to_fetch.put(None) # sentinel + for t in self._threads: + t.join() + self._threads = [] + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + with self._gplock: + self.result = result + self.project_name = name + url = urljoin(self.base_url, '%s/' % quote(name)) + self._seen.clear() + self._page_cache.clear() + self._prepare_threads() + try: + logger.debug('Queueing %s', url) + self._to_fetch.put(url) + self._to_fetch.join() + finally: + self._wait_threads() + del self.result + return result + + platform_dependent = re.compile(r'\b(linux_(i\d86|x86_64|arm\w+)|' + r'win(32|_amd64)|macosx_?\d+)\b', re.I) + + def _is_platform_dependent(self, url): + """ + Does an URL refer to a platform-specific download? + """ + return self.platform_dependent.search(url) + + def _process_download(self, url): + """ + See if an URL is a suitable download for a project. + + If it is, register information in the result dictionary (for + _get_project) about the specific version it's for. + + Note that the return value isn't actually used other than as a boolean + value. + """ + if self.platform_check and self._is_platform_dependent(url): + info = None + else: + info = self.convert_url_to_download_info(url, self.project_name) + logger.debug('process_download: %s -> %s', url, info) + if info: + with self._lock: # needed because self.result is shared + self._update_version_data(self.result, info) + return info + + def _should_queue(self, link, referrer, rel): + """ + Determine whether a link URL from a referring page and with a + particular "rel" attribute should be queued for scraping. + """ + scheme, netloc, path, _, _, _ = urlparse(link) + if path.endswith(self.source_extensions + self.binary_extensions + + self.excluded_extensions): + result = False + elif self.skip_externals and not link.startswith(self.base_url): + result = False + elif not referrer.startswith(self.base_url): + result = False + elif rel not in ('homepage', 'download'): + result = False + elif scheme not in ('http', 'https', 'ftp'): + result = False + elif self._is_platform_dependent(link): + result = False + else: + host = netloc.split(':', 1)[0] + if host.lower() == 'localhost': + result = False + else: + result = True + logger.debug('should_queue: %s (%s) from %s -> %s', link, rel, + referrer, result) + return result + + def _fetch(self): + """ + Get a URL to fetch from the work queue, get the HTML page, examine its + links for download candidates and candidates for further scraping. + + This is a handy method to run in a thread. + """ + while True: + url = self._to_fetch.get() + try: + if url: + page = self.get_page(url) + if page is None: # e.g. after an error + continue + for link, rel in page.links: + if link not in self._seen: + try: + self._seen.add(link) + if (not self._process_download(link) and + self._should_queue(link, url, rel)): + logger.debug('Queueing %s from %s', link, url) + self._to_fetch.put(link) + except MetadataInvalidError: # e.g. invalid versions + pass + except Exception as e: # pragma: no cover + self.errors.put(text_type(e)) + finally: + # always do this, to avoid hangs :-) + self._to_fetch.task_done() + if not url: + #logger.debug('Sentinel seen, quitting.') + break + + def get_page(self, url): + """ + Get the HTML for an URL, possibly from an in-memory cache. + + XXX TODO Note: this cache is never actually cleared. It's assumed that + the data won't get stale over the lifetime of a locator instance (not + necessarily true for the default_locator). + """ + # http://peak.telecommunity.com/DevCenter/EasyInstall#package-index-api + scheme, netloc, path, _, _, _ = urlparse(url) + if scheme == 'file' and os.path.isdir(url2pathname(path)): + url = urljoin(ensure_slash(url), 'index.html') + + if url in self._page_cache: + result = self._page_cache[url] + logger.debug('Returning %s from cache: %s', url, result) + else: + host = netloc.split(':', 1)[0] + result = None + if host in self._bad_hosts: + logger.debug('Skipping %s due to bad host %s', url, host) + else: + req = Request(url, headers={'Accept-encoding': 'identity'}) + try: + logger.debug('Fetching %s', url) + resp = self.opener.open(req, timeout=self.timeout) + logger.debug('Fetched %s', url) + headers = resp.info() + content_type = headers.get('Content-Type', '') + if HTML_CONTENT_TYPE.match(content_type): + final_url = resp.geturl() + data = resp.read() + encoding = headers.get('Content-Encoding') + if encoding: + decoder = self.decoders[encoding] # fail if not found + data = decoder(data) + encoding = 'utf-8' + m = CHARSET.search(content_type) + if m: + encoding = m.group(1) + try: + data = data.decode(encoding) + except UnicodeError: # pragma: no cover + data = data.decode('latin-1') # fallback + result = Page(data, final_url) + self._page_cache[final_url] = result + except HTTPError as e: + if e.code != 404: + logger.exception('Fetch failed: %s: %s', url, e) + except URLError as e: # pragma: no cover + logger.exception('Fetch failed: %s: %s', url, e) + with self._lock: + self._bad_hosts.add(host) + except Exception as e: # pragma: no cover + logger.exception('Fetch failed: %s: %s', url, e) + finally: + self._page_cache[url] = result # even if None (failure) + return result + + _distname_re = re.compile(']*>([^<]+)<') + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + page = self.get_page(self.base_url) + if not page: + raise DistlibException('Unable to get %s' % self.base_url) + for match in self._distname_re.finditer(page.data): + result.add(match.group(1)) + return result + +class DirectoryLocator(Locator): + """ + This class locates distributions in a directory tree. + """ + + def __init__(self, path, **kwargs): + """ + Initialise an instance. + :param path: The root of the directory tree to search. + :param kwargs: Passed to the superclass constructor, + except for: + * recursive - if True (the default), subdirectories are + recursed into. If False, only the top-level directory + is searched, + """ + self.recursive = kwargs.pop('recursive', True) + super(DirectoryLocator, self).__init__(**kwargs) + path = os.path.abspath(path) + if not os.path.isdir(path): # pragma: no cover + raise DistlibException('Not a directory: %r' % path) + self.base_dir = path + + def should_include(self, filename, parent): + """ + Should a filename be considered as a candidate for a distribution + archive? As well as the filename, the directory which contains it + is provided, though not used by the current implementation. + """ + return filename.endswith(self.downloadable_extensions) + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + for root, dirs, files in os.walk(self.base_dir): + for fn in files: + if self.should_include(fn, root): + fn = os.path.join(root, fn) + url = urlunparse(('file', '', + pathname2url(os.path.abspath(fn)), + '', '', '')) + info = self.convert_url_to_download_info(url, name) + if info: + self._update_version_data(result, info) + if not self.recursive: + break + return result + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + for root, dirs, files in os.walk(self.base_dir): + for fn in files: + if self.should_include(fn, root): + fn = os.path.join(root, fn) + url = urlunparse(('file', '', + pathname2url(os.path.abspath(fn)), + '', '', '')) + info = self.convert_url_to_download_info(url, None) + if info: + result.add(info['name']) + if not self.recursive: + break + return result + +class JSONLocator(Locator): + """ + This locator uses special extended metadata (not available on PyPI) and is + the basis of performant dependency resolution in distlib. Other locators + require archive downloads before dependencies can be determined! As you + might imagine, that can be slow. + """ + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Not available from this locator') + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + data = get_project_data(name) + if data: + for info in data.get('files', []): + if info['ptype'] != 'sdist' or info['pyversion'] != 'source': + continue + # We don't store summary in project metadata as it makes + # the data bigger for no benefit during dependency + # resolution + dist = make_dist(data['name'], info['version'], + summary=data.get('summary', + 'Placeholder for summary'), + scheme=self.scheme) + md = dist.metadata + md.source_url = info['url'] + # TODO SHA256 digest + if 'digest' in info and info['digest']: + dist.digest = ('md5', info['digest']) + md.dependencies = info.get('requirements', {}) + dist.exports = info.get('exports', {}) + result[dist.version] = dist + result['urls'].setdefault(dist.version, set()).add(info['url']) + return result + +class DistPathLocator(Locator): + """ + This locator finds installed distributions in a path. It can be useful for + adding to an :class:`AggregatingLocator`. + """ + def __init__(self, distpath, **kwargs): + """ + Initialise an instance. + + :param distpath: A :class:`DistributionPath` instance to search. + """ + super(DistPathLocator, self).__init__(**kwargs) + assert isinstance(distpath, DistributionPath) + self.distpath = distpath + + def _get_project(self, name): + dist = self.distpath.get_distribution(name) + if dist is None: + result = {'urls': {}, 'digests': {}} + else: + result = { + dist.version: dist, + 'urls': {dist.version: set([dist.source_url])}, + 'digests': {dist.version: set([None])} + } + return result + + +class AggregatingLocator(Locator): + """ + This class allows you to chain and/or merge a list of locators. + """ + def __init__(self, *locators, **kwargs): + """ + Initialise an instance. + + :param locators: The list of locators to search. + :param kwargs: Passed to the superclass constructor, + except for: + * merge - if False (the default), the first successful + search from any of the locators is returned. If True, + the results from all locators are merged (this can be + slow). + """ + self.merge = kwargs.pop('merge', False) + self.locators = locators + super(AggregatingLocator, self).__init__(**kwargs) + + def clear_cache(self): + super(AggregatingLocator, self).clear_cache() + for locator in self.locators: + locator.clear_cache() + + def _set_scheme(self, value): + self._scheme = value + for locator in self.locators: + locator.scheme = value + + scheme = property(Locator.scheme.fget, _set_scheme) + + def _get_project(self, name): + result = {} + for locator in self.locators: + d = locator.get_project(name) + if d: + if self.merge: + files = result.get('urls', {}) + digests = result.get('digests', {}) + # next line could overwrite result['urls'], result['digests'] + result.update(d) + df = result.get('urls') + if files and df: + for k, v in files.items(): + if k in df: + df[k] |= v + else: + df[k] = v + dd = result.get('digests') + if digests and dd: + dd.update(digests) + else: + # See issue #18. If any dists are found and we're looking + # for specific constraints, we only return something if + # a match is found. For example, if a DirectoryLocator + # returns just foo (1.0) while we're looking for + # foo (>= 2.0), we'll pretend there was nothing there so + # that subsequent locators can be queried. Otherwise we + # would just return foo (1.0) which would then lead to a + # failure to find foo (>= 2.0), because other locators + # weren't searched. Note that this only matters when + # merge=False. + if self.matcher is None: + found = True + else: + found = False + for k in d: + if self.matcher.match(k): + found = True + break + if found: + result = d + break + return result + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + for locator in self.locators: + try: + result |= locator.get_distribution_names() + except NotImplementedError: + pass + return result + + +# We use a legacy scheme simply because most of the dists on PyPI use legacy +# versions which don't conform to PEP 426 / PEP 440. +default_locator = AggregatingLocator( + JSONLocator(), + SimpleScrapingLocator('https://pypi.org/simple/', + timeout=3.0), + scheme='legacy') + +locate = default_locator.locate + +NAME_VERSION_RE = re.compile(r'(?P[\w-]+)\s*' + r'\(\s*(==\s*)?(?P[^)]+)\)$') + +class DependencyFinder(object): + """ + Locate dependencies for distributions. + """ + + def __init__(self, locator=None): + """ + Initialise an instance, using the specified locator + to locate distributions. + """ + self.locator = locator or default_locator + self.scheme = get_scheme(self.locator.scheme) + + def add_distribution(self, dist): + """ + Add a distribution to the finder. This will update internal information + about who provides what. + :param dist: The distribution to add. + """ + logger.debug('adding distribution %s', dist) + name = dist.key + self.dists_by_name[name] = dist + self.dists[(name, dist.version)] = dist + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Add to provided: %s, %s, %s', name, version, dist) + self.provided.setdefault(name, set()).add((version, dist)) + + def remove_distribution(self, dist): + """ + Remove a distribution from the finder. This will update internal + information about who provides what. + :param dist: The distribution to remove. + """ + logger.debug('removing distribution %s', dist) + name = dist.key + del self.dists_by_name[name] + del self.dists[(name, dist.version)] + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Remove from provided: %s, %s, %s', name, version, dist) + s = self.provided[name] + s.remove((version, dist)) + if not s: + del self.provided[name] + + def get_matcher(self, reqt): + """ + Get a version matcher for a requirement. + :param reqt: The requirement + :type reqt: str + :return: A version matcher (an instance of + :class:`distlib.version.Matcher`). + """ + try: + matcher = self.scheme.matcher(reqt) + except UnsupportedVersionError: # pragma: no cover + # XXX compat-mode if cannot read the version + name = reqt.split()[0] + matcher = self.scheme.matcher(name) + return matcher + + def find_providers(self, reqt): + """ + Find the distributions which can fulfill a requirement. + + :param reqt: The requirement. + :type reqt: str + :return: A set of distribution which can fulfill the requirement. + """ + matcher = self.get_matcher(reqt) + name = matcher.key # case-insensitive + result = set() + provided = self.provided + if name in provided: + for version, provider in provided[name]: + try: + match = matcher.match(version) + except UnsupportedVersionError: + match = False + + if match: + result.add(provider) + break + return result + + def try_to_replace(self, provider, other, problems): + """ + Attempt to replace one provider with another. This is typically used + when resolving dependencies from multiple sources, e.g. A requires + (B >= 1.0) while C requires (B >= 1.1). + + For successful replacement, ``provider`` must meet all the requirements + which ``other`` fulfills. + + :param provider: The provider we are trying to replace with. + :param other: The provider we're trying to replace. + :param problems: If False is returned, this will contain what + problems prevented replacement. This is currently + a tuple of the literal string 'cantreplace', + ``provider``, ``other`` and the set of requirements + that ``provider`` couldn't fulfill. + :return: True if we can replace ``other`` with ``provider``, else + False. + """ + rlist = self.reqts[other] + unmatched = set() + for s in rlist: + matcher = self.get_matcher(s) + if not matcher.match(provider.version): + unmatched.add(s) + if unmatched: + # can't replace other with provider + problems.add(('cantreplace', provider, other, + frozenset(unmatched))) + result = False + else: + # can replace other with provider + self.remove_distribution(other) + del self.reqts[other] + for s in rlist: + self.reqts.setdefault(provider, set()).add(s) + self.add_distribution(provider) + result = True + return result + + def find(self, requirement, meta_extras=None, prereleases=False): + """ + Find a distribution and all distributions it depends on. + + :param requirement: The requirement specifying the distribution to + find, or a Distribution instance. + :param meta_extras: A list of meta extras such as :test:, :build: and + so on. + :param prereleases: If ``True``, allow pre-release versions to be + returned - otherwise, don't return prereleases + unless they're all that's available. + + Return a set of :class:`Distribution` instances and a set of + problems. + + The distributions returned should be such that they have the + :attr:`required` attribute set to ``True`` if they were + from the ``requirement`` passed to ``find()``, and they have the + :attr:`build_time_dependency` attribute set to ``True`` unless they + are post-installation dependencies of the ``requirement``. + + The problems should be a tuple consisting of the string + ``'unsatisfied'`` and the requirement which couldn't be satisfied + by any distribution known to the locator. + """ + + self.provided = {} + self.dists = {} + self.dists_by_name = {} + self.reqts = {} + + meta_extras = set(meta_extras or []) + if ':*:' in meta_extras: + meta_extras.remove(':*:') + # :meta: and :run: are implicitly included + meta_extras |= set([':test:', ':build:', ':dev:']) + + if isinstance(requirement, Distribution): + dist = odist = requirement + logger.debug('passed %s as requirement', odist) + else: + dist = odist = self.locator.locate(requirement, + prereleases=prereleases) + if dist is None: + raise DistlibException('Unable to locate %r' % requirement) + logger.debug('located %s', odist) + dist.requested = True + problems = set() + todo = set([dist]) + install_dists = set([odist]) + while todo: + dist = todo.pop() + name = dist.key # case-insensitive + if name not in self.dists_by_name: + self.add_distribution(dist) + else: + #import pdb; pdb.set_trace() + other = self.dists_by_name[name] + if other != dist: + self.try_to_replace(dist, other, problems) + + ireqts = dist.run_requires | dist.meta_requires + sreqts = dist.build_requires + ereqts = set() + if meta_extras and dist in install_dists: + for key in ('test', 'build', 'dev'): + e = ':%s:' % key + if e in meta_extras: + ereqts |= getattr(dist, '%s_requires' % key) + all_reqts = ireqts | sreqts | ereqts + for r in all_reqts: + providers = self.find_providers(r) + if not providers: + logger.debug('No providers found for %r', r) + provider = self.locator.locate(r, prereleases=prereleases) + # If no provider is found and we didn't consider + # prereleases, consider them now. + if provider is None and not prereleases: + provider = self.locator.locate(r, prereleases=True) + if provider is None: + logger.debug('Cannot satisfy %r', r) + problems.add(('unsatisfied', r)) + else: + n, v = provider.key, provider.version + if (n, v) not in self.dists: + todo.add(provider) + providers.add(provider) + if r in ireqts and dist in install_dists: + install_dists.add(provider) + logger.debug('Adding %s to install_dists', + provider.name_and_version) + for p in providers: + name = p.key + if name not in self.dists_by_name: + self.reqts.setdefault(p, set()).add(r) + else: + other = self.dists_by_name[name] + if other != p: + # see if other can be replaced by p + self.try_to_replace(p, other, problems) + + dists = set(self.dists.values()) + for dist in dists: + dist.build_time_dependency = dist not in install_dists + if dist.build_time_dependency: + logger.debug('%s is a build-time dependency only.', + dist.name_and_version) + logger.debug('find done for %s', odist) + return dists, problems diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/manifest.py b/my_env/Lib/site-packages/pip/_vendor/distlib/manifest.py new file mode 100644 index 000000000..ca0fe442d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/manifest.py @@ -0,0 +1,393 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2013 Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +""" +Class representing the list of files in a distribution. + +Equivalent to distutils.filelist, but fixes some problems. +""" +import fnmatch +import logging +import os +import re +import sys + +from . import DistlibException +from .compat import fsdecode +from .util import convert_path + + +__all__ = ['Manifest'] + +logger = logging.getLogger(__name__) + +# a \ followed by some spaces + EOL +_COLLAPSE_PATTERN = re.compile('\\\\w*\n', re.M) +_COMMENTED_LINE = re.compile('#.*?(?=\n)|\n(?=$)', re.M | re.S) + +# +# Due to the different results returned by fnmatch.translate, we need +# to do slightly different processing for Python 2.7 and 3.2 ... this needed +# to be brought in for Python 3.6 onwards. +# +_PYTHON_VERSION = sys.version_info[:2] + +class Manifest(object): + """A list of files built by on exploring the filesystem and filtered by + applying various patterns to what we find there. + """ + + def __init__(self, base=None): + """ + Initialise an instance. + + :param base: The base directory to explore under. + """ + self.base = os.path.abspath(os.path.normpath(base or os.getcwd())) + self.prefix = self.base + os.sep + self.allfiles = None + self.files = set() + + # + # Public API + # + + def findall(self): + """Find all files under the base and set ``allfiles`` to the absolute + pathnames of files found. + """ + from stat import S_ISREG, S_ISDIR, S_ISLNK + + self.allfiles = allfiles = [] + root = self.base + stack = [root] + pop = stack.pop + push = stack.append + + while stack: + root = pop() + names = os.listdir(root) + + for name in names: + fullname = os.path.join(root, name) + + # Avoid excess stat calls -- just one will do, thank you! + stat = os.stat(fullname) + mode = stat.st_mode + if S_ISREG(mode): + allfiles.append(fsdecode(fullname)) + elif S_ISDIR(mode) and not S_ISLNK(mode): + push(fullname) + + def add(self, item): + """ + Add a file to the manifest. + + :param item: The pathname to add. This can be relative to the base. + """ + if not item.startswith(self.prefix): + item = os.path.join(self.base, item) + self.files.add(os.path.normpath(item)) + + def add_many(self, items): + """ + Add a list of files to the manifest. + + :param items: The pathnames to add. These can be relative to the base. + """ + for item in items: + self.add(item) + + def sorted(self, wantdirs=False): + """ + Return sorted files in directory order + """ + + def add_dir(dirs, d): + dirs.add(d) + logger.debug('add_dir added %s', d) + if d != self.base: + parent, _ = os.path.split(d) + assert parent not in ('', '/') + add_dir(dirs, parent) + + result = set(self.files) # make a copy! + if wantdirs: + dirs = set() + for f in result: + add_dir(dirs, os.path.dirname(f)) + result |= dirs + return [os.path.join(*path_tuple) for path_tuple in + sorted(os.path.split(path) for path in result)] + + def clear(self): + """Clear all collected files.""" + self.files = set() + self.allfiles = [] + + def process_directive(self, directive): + """ + Process a directive which either adds some files from ``allfiles`` to + ``files``, or removes some files from ``files``. + + :param directive: The directive to process. This should be in a format + compatible with distutils ``MANIFEST.in`` files: + + http://docs.python.org/distutils/sourcedist.html#commands + """ + # Parse the line: split it up, make sure the right number of words + # is there, and return the relevant words. 'action' is always + # defined: it's the first word of the line. Which of the other + # three are defined depends on the action; it'll be either + # patterns, (dir and patterns), or (dirpattern). + action, patterns, thedir, dirpattern = self._parse_directive(directive) + + # OK, now we know that the action is valid and we have the + # right number of words on the line for that action -- so we + # can proceed with minimal error-checking. + if action == 'include': + for pattern in patterns: + if not self._include_pattern(pattern, anchor=True): + logger.warning('no files found matching %r', pattern) + + elif action == 'exclude': + for pattern in patterns: + found = self._exclude_pattern(pattern, anchor=True) + #if not found: + # logger.warning('no previously-included files ' + # 'found matching %r', pattern) + + elif action == 'global-include': + for pattern in patterns: + if not self._include_pattern(pattern, anchor=False): + logger.warning('no files found matching %r ' + 'anywhere in distribution', pattern) + + elif action == 'global-exclude': + for pattern in patterns: + found = self._exclude_pattern(pattern, anchor=False) + #if not found: + # logger.warning('no previously-included files ' + # 'matching %r found anywhere in ' + # 'distribution', pattern) + + elif action == 'recursive-include': + for pattern in patterns: + if not self._include_pattern(pattern, prefix=thedir): + logger.warning('no files found matching %r ' + 'under directory %r', pattern, thedir) + + elif action == 'recursive-exclude': + for pattern in patterns: + found = self._exclude_pattern(pattern, prefix=thedir) + #if not found: + # logger.warning('no previously-included files ' + # 'matching %r found under directory %r', + # pattern, thedir) + + elif action == 'graft': + if not self._include_pattern(None, prefix=dirpattern): + logger.warning('no directories found matching %r', + dirpattern) + + elif action == 'prune': + if not self._exclude_pattern(None, prefix=dirpattern): + logger.warning('no previously-included directories found ' + 'matching %r', dirpattern) + else: # pragma: no cover + # This should never happen, as it should be caught in + # _parse_template_line + raise DistlibException( + 'invalid action %r' % action) + + # + # Private API + # + + def _parse_directive(self, directive): + """ + Validate a directive. + :param directive: The directive to validate. + :return: A tuple of action, patterns, thedir, dir_patterns + """ + words = directive.split() + if len(words) == 1 and words[0] not in ('include', 'exclude', + 'global-include', + 'global-exclude', + 'recursive-include', + 'recursive-exclude', + 'graft', 'prune'): + # no action given, let's use the default 'include' + words.insert(0, 'include') + + action = words[0] + patterns = thedir = dir_pattern = None + + if action in ('include', 'exclude', + 'global-include', 'global-exclude'): + if len(words) < 2: + raise DistlibException( + '%r expects ...' % action) + + patterns = [convert_path(word) for word in words[1:]] + + elif action in ('recursive-include', 'recursive-exclude'): + if len(words) < 3: + raise DistlibException( + '%r expects ...' % action) + + thedir = convert_path(words[1]) + patterns = [convert_path(word) for word in words[2:]] + + elif action in ('graft', 'prune'): + if len(words) != 2: + raise DistlibException( + '%r expects a single ' % action) + + dir_pattern = convert_path(words[1]) + + else: + raise DistlibException('unknown action %r' % action) + + return action, patterns, thedir, dir_pattern + + def _include_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Select strings (presumably filenames) from 'self.files' that + match 'pattern', a Unix-style wildcard (glob) pattern. + + Patterns are not quite the same as implemented by the 'fnmatch' + module: '*' and '?' match non-special characters, where "special" + is platform-dependent: slash on Unix; colon, slash, and backslash on + DOS/Windows; and colon on Mac OS. + + If 'anchor' is true (the default), then the pattern match is more + stringent: "*.py" will match "foo.py" but not "foo/bar.py". If + 'anchor' is false, both of these will match. + + If 'prefix' is supplied, then only filenames starting with 'prefix' + (itself a pattern) and ending with 'pattern', with anything in between + them, will match. 'anchor' is ignored in this case. + + If 'is_regex' is true, 'anchor' and 'prefix' are ignored, and + 'pattern' is assumed to be either a string containing a regex or a + regex object -- no translation is done, the regex is just compiled + and used as-is. + + Selected strings will be added to self.files. + + Return True if files are found. + """ + # XXX docstring lying about what the special chars are? + found = False + pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) + + # delayed loading of allfiles list + if self.allfiles is None: + self.findall() + + for name in self.allfiles: + if pattern_re.search(name): + self.files.add(name) + found = True + return found + + def _exclude_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Remove strings (presumably filenames) from 'files' that match + 'pattern'. + + Other parameters are the same as for 'include_pattern()', above. + The list 'self.files' is modified in place. Return True if files are + found. + + This API is public to allow e.g. exclusion of SCM subdirs, e.g. when + packaging source distributions + """ + found = False + pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) + for f in list(self.files): + if pattern_re.search(f): + self.files.remove(f) + found = True + return found + + def _translate_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Translate a shell-like wildcard pattern to a compiled regular + expression. + + Return the compiled regex. If 'is_regex' true, + then 'pattern' is directly compiled to a regex (if it's a string) + or just returned as-is (assumes it's a regex object). + """ + if is_regex: + if isinstance(pattern, str): + return re.compile(pattern) + else: + return pattern + + if _PYTHON_VERSION > (3, 2): + # ditch start and end characters + start, _, end = self._glob_to_re('_').partition('_') + + if pattern: + pattern_re = self._glob_to_re(pattern) + if _PYTHON_VERSION > (3, 2): + assert pattern_re.startswith(start) and pattern_re.endswith(end) + else: + pattern_re = '' + + base = re.escape(os.path.join(self.base, '')) + if prefix is not None: + # ditch end of pattern character + if _PYTHON_VERSION <= (3, 2): + empty_pattern = self._glob_to_re('') + prefix_re = self._glob_to_re(prefix)[:-len(empty_pattern)] + else: + prefix_re = self._glob_to_re(prefix) + assert prefix_re.startswith(start) and prefix_re.endswith(end) + prefix_re = prefix_re[len(start): len(prefix_re) - len(end)] + sep = os.sep + if os.sep == '\\': + sep = r'\\' + if _PYTHON_VERSION <= (3, 2): + pattern_re = '^' + base + sep.join((prefix_re, + '.*' + pattern_re)) + else: + pattern_re = pattern_re[len(start): len(pattern_re) - len(end)] + pattern_re = r'%s%s%s%s.*%s%s' % (start, base, prefix_re, sep, + pattern_re, end) + else: # no prefix -- respect anchor flag + if anchor: + if _PYTHON_VERSION <= (3, 2): + pattern_re = '^' + base + pattern_re + else: + pattern_re = r'%s%s%s' % (start, base, pattern_re[len(start):]) + + return re.compile(pattern_re) + + def _glob_to_re(self, pattern): + """Translate a shell-like glob pattern to a regular expression. + + Return a string containing the regex. Differs from + 'fnmatch.translate()' in that '*' does not match "special characters" + (which are platform-specific). + """ + pattern_re = fnmatch.translate(pattern) + + # '?' and '*' in the glob pattern become '.' and '.*' in the RE, which + # IMHO is wrong -- '?' and '*' aren't supposed to match slash in Unix, + # and by extension they shouldn't match such "special characters" under + # any OS. So change all non-escaped dots in the RE to match any + # character except the special characters (currently: just os.sep). + sep = os.sep + if os.sep == '\\': + # we're using a regex to manipulate a regex, so we need + # to escape the backslash twice + sep = r'\\\\' + escaped = r'\1[^%s]' % sep + pattern_re = re.sub(r'((? y, + '!=': lambda x, y: x != y, + '<': lambda x, y: x < y, + '<=': lambda x, y: x == y or x < y, + '>': lambda x, y: x > y, + '>=': lambda x, y: x == y or x > y, + 'and': lambda x, y: x and y, + 'or': lambda x, y: x or y, + 'in': lambda x, y: x in y, + 'not in': lambda x, y: x not in y, + } + + def evaluate(self, expr, context): + """ + Evaluate a marker expression returned by the :func:`parse_requirement` + function in the specified context. + """ + if isinstance(expr, string_types): + if expr[0] in '\'"': + result = expr[1:-1] + else: + if expr not in context: + raise SyntaxError('unknown variable: %s' % expr) + result = context[expr] + else: + assert isinstance(expr, dict) + op = expr['op'] + if op not in self.operations: + raise NotImplementedError('op not implemented: %s' % op) + elhs = expr['lhs'] + erhs = expr['rhs'] + if _is_literal(expr['lhs']) and _is_literal(expr['rhs']): + raise SyntaxError('invalid comparison: %s %s %s' % (elhs, op, erhs)) + + lhs = self.evaluate(elhs, context) + rhs = self.evaluate(erhs, context) + result = self.operations[op](lhs, rhs) + return result + +def default_context(): + def format_full_version(info): + version = '%s.%s.%s' % (info.major, info.minor, info.micro) + kind = info.releaselevel + if kind != 'final': + version += kind[0] + str(info.serial) + return version + + if hasattr(sys, 'implementation'): + implementation_version = format_full_version(sys.implementation.version) + implementation_name = sys.implementation.name + else: + implementation_version = '0' + implementation_name = '' + + result = { + 'implementation_name': implementation_name, + 'implementation_version': implementation_version, + 'os_name': os.name, + 'platform_machine': platform.machine(), + 'platform_python_implementation': platform.python_implementation(), + 'platform_release': platform.release(), + 'platform_system': platform.system(), + 'platform_version': platform.version(), + 'platform_in_venv': str(in_venv()), + 'python_full_version': platform.python_version(), + 'python_version': platform.python_version()[:3], + 'sys_platform': sys.platform, + } + return result + +DEFAULT_CONTEXT = default_context() +del default_context + +evaluator = Evaluator() + +def interpret(marker, execution_context=None): + """ + Interpret a marker and return a result depending on environment. + + :param marker: The marker to interpret. + :type marker: str + :param execution_context: The context used for name lookup. + :type execution_context: mapping + """ + try: + expr, rest = parse_marker(marker) + except Exception as e: + raise SyntaxError('Unable to interpret marker syntax: %s: %s' % (marker, e)) + if rest and rest[0] != '#': + raise SyntaxError('unexpected trailing data in marker: %s: %s' % (marker, rest)) + context = dict(DEFAULT_CONTEXT) + if execution_context: + context.update(execution_context) + return evaluator.evaluate(expr, context) diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/metadata.py b/my_env/Lib/site-packages/pip/_vendor/distlib/metadata.py new file mode 100644 index 000000000..2d61378e9 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/metadata.py @@ -0,0 +1,1096 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Implementation of the Metadata for Python packages PEPs. + +Supports all metadata formats (1.0, 1.1, 1.2, and 2.0 experimental). +""" +from __future__ import unicode_literals + +import codecs +from email import message_from_file +import json +import logging +import re + + +from . import DistlibException, __version__ +from .compat import StringIO, string_types, text_type +from .markers import interpret +from .util import extract_by_key, get_extras +from .version import get_scheme, PEP440_VERSION_RE + +logger = logging.getLogger(__name__) + + +class MetadataMissingError(DistlibException): + """A required metadata is missing""" + + +class MetadataConflictError(DistlibException): + """Attempt to read or write metadata fields that are conflictual.""" + + +class MetadataUnrecognizedVersionError(DistlibException): + """Unknown metadata version number.""" + + +class MetadataInvalidError(DistlibException): + """A metadata value is invalid""" + +# public API of this module +__all__ = ['Metadata', 'PKG_INFO_ENCODING', 'PKG_INFO_PREFERRED_VERSION'] + +# Encoding used for the PKG-INFO files +PKG_INFO_ENCODING = 'utf-8' + +# preferred version. Hopefully will be changed +# to 1.2 once PEP 345 is supported everywhere +PKG_INFO_PREFERRED_VERSION = '1.1' + +_LINE_PREFIX_1_2 = re.compile('\n \\|') +_LINE_PREFIX_PRE_1_2 = re.compile('\n ') +_241_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'License') + +_314_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'License', 'Classifier', 'Download-URL', 'Obsoletes', + 'Provides', 'Requires') + +_314_MARKERS = ('Obsoletes', 'Provides', 'Requires', 'Classifier', + 'Download-URL') + +_345_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'Maintainer', 'Maintainer-email', 'License', + 'Classifier', 'Download-URL', 'Obsoletes-Dist', + 'Project-URL', 'Provides-Dist', 'Requires-Dist', + 'Requires-Python', 'Requires-External') + +_345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', + 'Obsoletes-Dist', 'Requires-External', 'Maintainer', + 'Maintainer-email', 'Project-URL') + +_426_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'Maintainer', 'Maintainer-email', 'License', + 'Classifier', 'Download-URL', 'Obsoletes-Dist', + 'Project-URL', 'Provides-Dist', 'Requires-Dist', + 'Requires-Python', 'Requires-External', 'Private-Version', + 'Obsoleted-By', 'Setup-Requires-Dist', 'Extension', + 'Provides-Extra') + +_426_MARKERS = ('Private-Version', 'Provides-Extra', 'Obsoleted-By', + 'Setup-Requires-Dist', 'Extension') + +# See issue #106: Sometimes 'Requires' and 'Provides' occur wrongly in +# the metadata. Include them in the tuple literal below to allow them +# (for now). +_566_FIELDS = _426_FIELDS + ('Description-Content-Type', + 'Requires', 'Provides') + +_566_MARKERS = ('Description-Content-Type',) + +_ALL_FIELDS = set() +_ALL_FIELDS.update(_241_FIELDS) +_ALL_FIELDS.update(_314_FIELDS) +_ALL_FIELDS.update(_345_FIELDS) +_ALL_FIELDS.update(_426_FIELDS) +_ALL_FIELDS.update(_566_FIELDS) + +EXTRA_RE = re.compile(r'''extra\s*==\s*("([^"]+)"|'([^']+)')''') + + +def _version2fieldlist(version): + if version == '1.0': + return _241_FIELDS + elif version == '1.1': + return _314_FIELDS + elif version == '1.2': + return _345_FIELDS + elif version in ('1.3', '2.1'): + return _345_FIELDS + _566_FIELDS + elif version == '2.0': + return _426_FIELDS + raise MetadataUnrecognizedVersionError(version) + + +def _best_version(fields): + """Detect the best version depending on the fields used.""" + def _has_marker(keys, markers): + for marker in markers: + if marker in keys: + return True + return False + + keys = [] + for key, value in fields.items(): + if value in ([], 'UNKNOWN', None): + continue + keys.append(key) + + possible_versions = ['1.0', '1.1', '1.2', '1.3', '2.0', '2.1'] + + # first let's try to see if a field is not part of one of the version + for key in keys: + if key not in _241_FIELDS and '1.0' in possible_versions: + possible_versions.remove('1.0') + logger.debug('Removed 1.0 due to %s', key) + if key not in _314_FIELDS and '1.1' in possible_versions: + possible_versions.remove('1.1') + logger.debug('Removed 1.1 due to %s', key) + if key not in _345_FIELDS and '1.2' in possible_versions: + possible_versions.remove('1.2') + logger.debug('Removed 1.2 due to %s', key) + if key not in _566_FIELDS and '1.3' in possible_versions: + possible_versions.remove('1.3') + logger.debug('Removed 1.3 due to %s', key) + if key not in _566_FIELDS and '2.1' in possible_versions: + if key != 'Description': # In 2.1, description allowed after headers + possible_versions.remove('2.1') + logger.debug('Removed 2.1 due to %s', key) + if key not in _426_FIELDS and '2.0' in possible_versions: + possible_versions.remove('2.0') + logger.debug('Removed 2.0 due to %s', key) + + # possible_version contains qualified versions + if len(possible_versions) == 1: + return possible_versions[0] # found ! + elif len(possible_versions) == 0: + logger.debug('Out of options - unknown metadata set: %s', fields) + raise MetadataConflictError('Unknown metadata set') + + # let's see if one unique marker is found + is_1_1 = '1.1' in possible_versions and _has_marker(keys, _314_MARKERS) + is_1_2 = '1.2' in possible_versions and _has_marker(keys, _345_MARKERS) + is_2_1 = '2.1' in possible_versions and _has_marker(keys, _566_MARKERS) + is_2_0 = '2.0' in possible_versions and _has_marker(keys, _426_MARKERS) + if int(is_1_1) + int(is_1_2) + int(is_2_1) + int(is_2_0) > 1: + raise MetadataConflictError('You used incompatible 1.1/1.2/2.0/2.1 fields') + + # we have the choice, 1.0, or 1.2, or 2.0 + # - 1.0 has a broken Summary field but works with all tools + # - 1.1 is to avoid + # - 1.2 fixes Summary but has little adoption + # - 2.0 adds more features and is very new + if not is_1_1 and not is_1_2 and not is_2_1 and not is_2_0: + # we couldn't find any specific marker + if PKG_INFO_PREFERRED_VERSION in possible_versions: + return PKG_INFO_PREFERRED_VERSION + if is_1_1: + return '1.1' + if is_1_2: + return '1.2' + if is_2_1: + return '2.1' + + return '2.0' + +_ATTR2FIELD = { + 'metadata_version': 'Metadata-Version', + 'name': 'Name', + 'version': 'Version', + 'platform': 'Platform', + 'supported_platform': 'Supported-Platform', + 'summary': 'Summary', + 'description': 'Description', + 'keywords': 'Keywords', + 'home_page': 'Home-page', + 'author': 'Author', + 'author_email': 'Author-email', + 'maintainer': 'Maintainer', + 'maintainer_email': 'Maintainer-email', + 'license': 'License', + 'classifier': 'Classifier', + 'download_url': 'Download-URL', + 'obsoletes_dist': 'Obsoletes-Dist', + 'provides_dist': 'Provides-Dist', + 'requires_dist': 'Requires-Dist', + 'setup_requires_dist': 'Setup-Requires-Dist', + 'requires_python': 'Requires-Python', + 'requires_external': 'Requires-External', + 'requires': 'Requires', + 'provides': 'Provides', + 'obsoletes': 'Obsoletes', + 'project_url': 'Project-URL', + 'private_version': 'Private-Version', + 'obsoleted_by': 'Obsoleted-By', + 'extension': 'Extension', + 'provides_extra': 'Provides-Extra', +} + +_PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist') +_VERSIONS_FIELDS = ('Requires-Python',) +_VERSION_FIELDS = ('Version',) +_LISTFIELDS = ('Platform', 'Classifier', 'Obsoletes', + 'Requires', 'Provides', 'Obsoletes-Dist', + 'Provides-Dist', 'Requires-Dist', 'Requires-External', + 'Project-URL', 'Supported-Platform', 'Setup-Requires-Dist', + 'Provides-Extra', 'Extension') +_LISTTUPLEFIELDS = ('Project-URL',) + +_ELEMENTSFIELD = ('Keywords',) + +_UNICODEFIELDS = ('Author', 'Maintainer', 'Summary', 'Description') + +_MISSING = object() + +_FILESAFE = re.compile('[^A-Za-z0-9.]+') + + +def _get_name_and_version(name, version, for_filename=False): + """Return the distribution name with version. + + If for_filename is true, return a filename-escaped form.""" + if for_filename: + # For both name and version any runs of non-alphanumeric or '.' + # characters are replaced with a single '-'. Additionally any + # spaces in the version string become '.' + name = _FILESAFE.sub('-', name) + version = _FILESAFE.sub('-', version.replace(' ', '.')) + return '%s-%s' % (name, version) + + +class LegacyMetadata(object): + """The legacy metadata of a release. + + Supports versions 1.0, 1.1 and 1.2 (auto-detected). You can + instantiate the class with one of these arguments (or none): + - *path*, the path to a metadata file + - *fileobj* give a file-like object with metadata as content + - *mapping* is a dict-like object + - *scheme* is a version scheme name + """ + # TODO document the mapping API and UNKNOWN default key + + def __init__(self, path=None, fileobj=None, mapping=None, + scheme='default'): + if [path, fileobj, mapping].count(None) < 2: + raise TypeError('path, fileobj and mapping are exclusive') + self._fields = {} + self.requires_files = [] + self._dependencies = None + self.scheme = scheme + if path is not None: + self.read(path) + elif fileobj is not None: + self.read_file(fileobj) + elif mapping is not None: + self.update(mapping) + self.set_metadata_version() + + def set_metadata_version(self): + self._fields['Metadata-Version'] = _best_version(self._fields) + + def _write_field(self, fileobj, name, value): + fileobj.write('%s: %s\n' % (name, value)) + + def __getitem__(self, name): + return self.get(name) + + def __setitem__(self, name, value): + return self.set(name, value) + + def __delitem__(self, name): + field_name = self._convert_name(name) + try: + del self._fields[field_name] + except KeyError: + raise KeyError(name) + + def __contains__(self, name): + return (name in self._fields or + self._convert_name(name) in self._fields) + + def _convert_name(self, name): + if name in _ALL_FIELDS: + return name + name = name.replace('-', '_').lower() + return _ATTR2FIELD.get(name, name) + + def _default_value(self, name): + if name in _LISTFIELDS or name in _ELEMENTSFIELD: + return [] + return 'UNKNOWN' + + def _remove_line_prefix(self, value): + if self.metadata_version in ('1.0', '1.1'): + return _LINE_PREFIX_PRE_1_2.sub('\n', value) + else: + return _LINE_PREFIX_1_2.sub('\n', value) + + def __getattr__(self, name): + if name in _ATTR2FIELD: + return self[name] + raise AttributeError(name) + + # + # Public API + # + +# dependencies = property(_get_dependencies, _set_dependencies) + + def get_fullname(self, filesafe=False): + """Return the distribution name with version. + + If filesafe is true, return a filename-escaped form.""" + return _get_name_and_version(self['Name'], self['Version'], filesafe) + + def is_field(self, name): + """return True if name is a valid metadata key""" + name = self._convert_name(name) + return name in _ALL_FIELDS + + def is_multi_field(self, name): + name = self._convert_name(name) + return name in _LISTFIELDS + + def read(self, filepath): + """Read the metadata values from a file path.""" + fp = codecs.open(filepath, 'r', encoding='utf-8') + try: + self.read_file(fp) + finally: + fp.close() + + def read_file(self, fileob): + """Read the metadata values from a file object.""" + msg = message_from_file(fileob) + self._fields['Metadata-Version'] = msg['metadata-version'] + + # When reading, get all the fields we can + for field in _ALL_FIELDS: + if field not in msg: + continue + if field in _LISTFIELDS: + # we can have multiple lines + values = msg.get_all(field) + if field in _LISTTUPLEFIELDS and values is not None: + values = [tuple(value.split(',')) for value in values] + self.set(field, values) + else: + # single line + value = msg[field] + if value is not None and value != 'UNKNOWN': + self.set(field, value) + # logger.debug('Attempting to set metadata for %s', self) + # self.set_metadata_version() + + def write(self, filepath, skip_unknown=False): + """Write the metadata fields to filepath.""" + fp = codecs.open(filepath, 'w', encoding='utf-8') + try: + self.write_file(fp, skip_unknown) + finally: + fp.close() + + def write_file(self, fileobject, skip_unknown=False): + """Write the PKG-INFO format data to a file object.""" + self.set_metadata_version() + + for field in _version2fieldlist(self['Metadata-Version']): + values = self.get(field) + if skip_unknown and values in ('UNKNOWN', [], ['UNKNOWN']): + continue + if field in _ELEMENTSFIELD: + self._write_field(fileobject, field, ','.join(values)) + continue + if field not in _LISTFIELDS: + if field == 'Description': + if self.metadata_version in ('1.0', '1.1'): + values = values.replace('\n', '\n ') + else: + values = values.replace('\n', '\n |') + values = [values] + + if field in _LISTTUPLEFIELDS: + values = [','.join(value) for value in values] + + for value in values: + self._write_field(fileobject, field, value) + + def update(self, other=None, **kwargs): + """Set metadata values from the given iterable `other` and kwargs. + + Behavior is like `dict.update`: If `other` has a ``keys`` method, + they are looped over and ``self[key]`` is assigned ``other[key]``. + Else, ``other`` is an iterable of ``(key, value)`` iterables. + + Keys that don't match a metadata field or that have an empty value are + dropped. + """ + def _set(key, value): + if key in _ATTR2FIELD and value: + self.set(self._convert_name(key), value) + + if not other: + # other is None or empty container + pass + elif hasattr(other, 'keys'): + for k in other.keys(): + _set(k, other[k]) + else: + for k, v in other: + _set(k, v) + + if kwargs: + for k, v in kwargs.items(): + _set(k, v) + + def set(self, name, value): + """Control then set a metadata field.""" + name = self._convert_name(name) + + if ((name in _ELEMENTSFIELD or name == 'Platform') and + not isinstance(value, (list, tuple))): + if isinstance(value, string_types): + value = [v.strip() for v in value.split(',')] + else: + value = [] + elif (name in _LISTFIELDS and + not isinstance(value, (list, tuple))): + if isinstance(value, string_types): + value = [value] + else: + value = [] + + if logger.isEnabledFor(logging.WARNING): + project_name = self['Name'] + + scheme = get_scheme(self.scheme) + if name in _PREDICATE_FIELDS and value is not None: + for v in value: + # check that the values are valid + if not scheme.is_valid_matcher(v.split(';')[0]): + logger.warning( + "'%s': '%s' is not valid (field '%s')", + project_name, v, name) + # FIXME this rejects UNKNOWN, is that right? + elif name in _VERSIONS_FIELDS and value is not None: + if not scheme.is_valid_constraint_list(value): + logger.warning("'%s': '%s' is not a valid version (field '%s')", + project_name, value, name) + elif name in _VERSION_FIELDS and value is not None: + if not scheme.is_valid_version(value): + logger.warning("'%s': '%s' is not a valid version (field '%s')", + project_name, value, name) + + if name in _UNICODEFIELDS: + if name == 'Description': + value = self._remove_line_prefix(value) + + self._fields[name] = value + + def get(self, name, default=_MISSING): + """Get a metadata field.""" + name = self._convert_name(name) + if name not in self._fields: + if default is _MISSING: + default = self._default_value(name) + return default + if name in _UNICODEFIELDS: + value = self._fields[name] + return value + elif name in _LISTFIELDS: + value = self._fields[name] + if value is None: + return [] + res = [] + for val in value: + if name not in _LISTTUPLEFIELDS: + res.append(val) + else: + # That's for Project-URL + res.append((val[0], val[1])) + return res + + elif name in _ELEMENTSFIELD: + value = self._fields[name] + if isinstance(value, string_types): + return value.split(',') + return self._fields[name] + + def check(self, strict=False): + """Check if the metadata is compliant. If strict is True then raise if + no Name or Version are provided""" + self.set_metadata_version() + + # XXX should check the versions (if the file was loaded) + missing, warnings = [], [] + + for attr in ('Name', 'Version'): # required by PEP 345 + if attr not in self: + missing.append(attr) + + if strict and missing != []: + msg = 'missing required metadata: %s' % ', '.join(missing) + raise MetadataMissingError(msg) + + for attr in ('Home-page', 'Author'): + if attr not in self: + missing.append(attr) + + # checking metadata 1.2 (XXX needs to check 1.1, 1.0) + if self['Metadata-Version'] != '1.2': + return missing, warnings + + scheme = get_scheme(self.scheme) + + def are_valid_constraints(value): + for v in value: + if not scheme.is_valid_matcher(v.split(';')[0]): + return False + return True + + for fields, controller in ((_PREDICATE_FIELDS, are_valid_constraints), + (_VERSIONS_FIELDS, + scheme.is_valid_constraint_list), + (_VERSION_FIELDS, + scheme.is_valid_version)): + for field in fields: + value = self.get(field, None) + if value is not None and not controller(value): + warnings.append("Wrong value for '%s': %s" % (field, value)) + + return missing, warnings + + def todict(self, skip_missing=False): + """Return fields as a dict. + + Field names will be converted to use the underscore-lowercase style + instead of hyphen-mixed case (i.e. home_page instead of Home-page). + """ + self.set_metadata_version() + + mapping_1_0 = ( + ('metadata_version', 'Metadata-Version'), + ('name', 'Name'), + ('version', 'Version'), + ('summary', 'Summary'), + ('home_page', 'Home-page'), + ('author', 'Author'), + ('author_email', 'Author-email'), + ('license', 'License'), + ('description', 'Description'), + ('keywords', 'Keywords'), + ('platform', 'Platform'), + ('classifiers', 'Classifier'), + ('download_url', 'Download-URL'), + ) + + data = {} + for key, field_name in mapping_1_0: + if not skip_missing or field_name in self._fields: + data[key] = self[field_name] + + if self['Metadata-Version'] == '1.2': + mapping_1_2 = ( + ('requires_dist', 'Requires-Dist'), + ('requires_python', 'Requires-Python'), + ('requires_external', 'Requires-External'), + ('provides_dist', 'Provides-Dist'), + ('obsoletes_dist', 'Obsoletes-Dist'), + ('project_url', 'Project-URL'), + ('maintainer', 'Maintainer'), + ('maintainer_email', 'Maintainer-email'), + ) + for key, field_name in mapping_1_2: + if not skip_missing or field_name in self._fields: + if key != 'project_url': + data[key] = self[field_name] + else: + data[key] = [','.join(u) for u in self[field_name]] + + elif self['Metadata-Version'] == '1.1': + mapping_1_1 = ( + ('provides', 'Provides'), + ('requires', 'Requires'), + ('obsoletes', 'Obsoletes'), + ) + for key, field_name in mapping_1_1: + if not skip_missing or field_name in self._fields: + data[key] = self[field_name] + + return data + + def add_requirements(self, requirements): + if self['Metadata-Version'] == '1.1': + # we can't have 1.1 metadata *and* Setuptools requires + for field in ('Obsoletes', 'Requires', 'Provides'): + if field in self: + del self[field] + self['Requires-Dist'] += requirements + + # Mapping API + # TODO could add iter* variants + + def keys(self): + return list(_version2fieldlist(self['Metadata-Version'])) + + def __iter__(self): + for key in self.keys(): + yield key + + def values(self): + return [self[key] for key in self.keys()] + + def items(self): + return [(key, self[key]) for key in self.keys()] + + def __repr__(self): + return '<%s %s %s>' % (self.__class__.__name__, self.name, + self.version) + + +METADATA_FILENAME = 'pydist.json' +WHEEL_METADATA_FILENAME = 'metadata.json' +LEGACY_METADATA_FILENAME = 'METADATA' + + +class Metadata(object): + """ + The metadata of a release. This implementation uses 2.0 (JSON) + metadata where possible. If not possible, it wraps a LegacyMetadata + instance which handles the key-value metadata format. + """ + + METADATA_VERSION_MATCHER = re.compile(r'^\d+(\.\d+)*$') + + NAME_MATCHER = re.compile('^[0-9A-Z]([0-9A-Z_.-]*[0-9A-Z])?$', re.I) + + VERSION_MATCHER = PEP440_VERSION_RE + + SUMMARY_MATCHER = re.compile('.{1,2047}') + + METADATA_VERSION = '2.0' + + GENERATOR = 'distlib (%s)' % __version__ + + MANDATORY_KEYS = { + 'name': (), + 'version': (), + 'summary': ('legacy',), + } + + INDEX_KEYS = ('name version license summary description author ' + 'author_email keywords platform home_page classifiers ' + 'download_url') + + DEPENDENCY_KEYS = ('extras run_requires test_requires build_requires ' + 'dev_requires provides meta_requires obsoleted_by ' + 'supports_environments') + + SYNTAX_VALIDATORS = { + 'metadata_version': (METADATA_VERSION_MATCHER, ()), + 'name': (NAME_MATCHER, ('legacy',)), + 'version': (VERSION_MATCHER, ('legacy',)), + 'summary': (SUMMARY_MATCHER, ('legacy',)), + } + + __slots__ = ('_legacy', '_data', 'scheme') + + def __init__(self, path=None, fileobj=None, mapping=None, + scheme='default'): + if [path, fileobj, mapping].count(None) < 2: + raise TypeError('path, fileobj and mapping are exclusive') + self._legacy = None + self._data = None + self.scheme = scheme + #import pdb; pdb.set_trace() + if mapping is not None: + try: + self._validate_mapping(mapping, scheme) + self._data = mapping + except MetadataUnrecognizedVersionError: + self._legacy = LegacyMetadata(mapping=mapping, scheme=scheme) + self.validate() + else: + data = None + if path: + with open(path, 'rb') as f: + data = f.read() + elif fileobj: + data = fileobj.read() + if data is None: + # Initialised with no args - to be added + self._data = { + 'metadata_version': self.METADATA_VERSION, + 'generator': self.GENERATOR, + } + else: + if not isinstance(data, text_type): + data = data.decode('utf-8') + try: + self._data = json.loads(data) + self._validate_mapping(self._data, scheme) + except ValueError: + # Note: MetadataUnrecognizedVersionError does not + # inherit from ValueError (it's a DistlibException, + # which should not inherit from ValueError). + # The ValueError comes from the json.load - if that + # succeeds and we get a validation error, we want + # that to propagate + self._legacy = LegacyMetadata(fileobj=StringIO(data), + scheme=scheme) + self.validate() + + common_keys = set(('name', 'version', 'license', 'keywords', 'summary')) + + none_list = (None, list) + none_dict = (None, dict) + + mapped_keys = { + 'run_requires': ('Requires-Dist', list), + 'build_requires': ('Setup-Requires-Dist', list), + 'dev_requires': none_list, + 'test_requires': none_list, + 'meta_requires': none_list, + 'extras': ('Provides-Extra', list), + 'modules': none_list, + 'namespaces': none_list, + 'exports': none_dict, + 'commands': none_dict, + 'classifiers': ('Classifier', list), + 'source_url': ('Download-URL', None), + 'metadata_version': ('Metadata-Version', None), + } + + del none_list, none_dict + + def __getattribute__(self, key): + common = object.__getattribute__(self, 'common_keys') + mapped = object.__getattribute__(self, 'mapped_keys') + if key in mapped: + lk, maker = mapped[key] + if self._legacy: + if lk is None: + result = None if maker is None else maker() + else: + result = self._legacy.get(lk) + else: + value = None if maker is None else maker() + if key not in ('commands', 'exports', 'modules', 'namespaces', + 'classifiers'): + result = self._data.get(key, value) + else: + # special cases for PEP 459 + sentinel = object() + result = sentinel + d = self._data.get('extensions') + if d: + if key == 'commands': + result = d.get('python.commands', value) + elif key == 'classifiers': + d = d.get('python.details') + if d: + result = d.get(key, value) + else: + d = d.get('python.exports') + if not d: + d = self._data.get('python.exports') + if d: + result = d.get(key, value) + if result is sentinel: + result = value + elif key not in common: + result = object.__getattribute__(self, key) + elif self._legacy: + result = self._legacy.get(key) + else: + result = self._data.get(key) + return result + + def _validate_value(self, key, value, scheme=None): + if key in self.SYNTAX_VALIDATORS: + pattern, exclusions = self.SYNTAX_VALIDATORS[key] + if (scheme or self.scheme) not in exclusions: + m = pattern.match(value) + if not m: + raise MetadataInvalidError("'%s' is an invalid value for " + "the '%s' property" % (value, + key)) + + def __setattr__(self, key, value): + self._validate_value(key, value) + common = object.__getattribute__(self, 'common_keys') + mapped = object.__getattribute__(self, 'mapped_keys') + if key in mapped: + lk, _ = mapped[key] + if self._legacy: + if lk is None: + raise NotImplementedError + self._legacy[lk] = value + elif key not in ('commands', 'exports', 'modules', 'namespaces', + 'classifiers'): + self._data[key] = value + else: + # special cases for PEP 459 + d = self._data.setdefault('extensions', {}) + if key == 'commands': + d['python.commands'] = value + elif key == 'classifiers': + d = d.setdefault('python.details', {}) + d[key] = value + else: + d = d.setdefault('python.exports', {}) + d[key] = value + elif key not in common: + object.__setattr__(self, key, value) + else: + if key == 'keywords': + if isinstance(value, string_types): + value = value.strip() + if value: + value = value.split() + else: + value = [] + if self._legacy: + self._legacy[key] = value + else: + self._data[key] = value + + @property + def name_and_version(self): + return _get_name_and_version(self.name, self.version, True) + + @property + def provides(self): + if self._legacy: + result = self._legacy['Provides-Dist'] + else: + result = self._data.setdefault('provides', []) + s = '%s (%s)' % (self.name, self.version) + if s not in result: + result.append(s) + return result + + @provides.setter + def provides(self, value): + if self._legacy: + self._legacy['Provides-Dist'] = value + else: + self._data['provides'] = value + + def get_requirements(self, reqts, extras=None, env=None): + """ + Base method to get dependencies, given a set of extras + to satisfy and an optional environment context. + :param reqts: A list of sometimes-wanted dependencies, + perhaps dependent on extras and environment. + :param extras: A list of optional components being requested. + :param env: An optional environment for marker evaluation. + """ + if self._legacy: + result = reqts + else: + result = [] + extras = get_extras(extras or [], self.extras) + for d in reqts: + if 'extra' not in d and 'environment' not in d: + # unconditional + include = True + else: + if 'extra' not in d: + # Not extra-dependent - only environment-dependent + include = True + else: + include = d.get('extra') in extras + if include: + # Not excluded because of extras, check environment + marker = d.get('environment') + if marker: + include = interpret(marker, env) + if include: + result.extend(d['requires']) + for key in ('build', 'dev', 'test'): + e = ':%s:' % key + if e in extras: + extras.remove(e) + # A recursive call, but it should terminate since 'test' + # has been removed from the extras + reqts = self._data.get('%s_requires' % key, []) + result.extend(self.get_requirements(reqts, extras=extras, + env=env)) + return result + + @property + def dictionary(self): + if self._legacy: + return self._from_legacy() + return self._data + + @property + def dependencies(self): + if self._legacy: + raise NotImplementedError + else: + return extract_by_key(self._data, self.DEPENDENCY_KEYS) + + @dependencies.setter + def dependencies(self, value): + if self._legacy: + raise NotImplementedError + else: + self._data.update(value) + + def _validate_mapping(self, mapping, scheme): + if mapping.get('metadata_version') != self.METADATA_VERSION: + raise MetadataUnrecognizedVersionError() + missing = [] + for key, exclusions in self.MANDATORY_KEYS.items(): + if key not in mapping: + if scheme not in exclusions: + missing.append(key) + if missing: + msg = 'Missing metadata items: %s' % ', '.join(missing) + raise MetadataMissingError(msg) + for k, v in mapping.items(): + self._validate_value(k, v, scheme) + + def validate(self): + if self._legacy: + missing, warnings = self._legacy.check(True) + if missing or warnings: + logger.warning('Metadata: missing: %s, warnings: %s', + missing, warnings) + else: + self._validate_mapping(self._data, self.scheme) + + def todict(self): + if self._legacy: + return self._legacy.todict(True) + else: + result = extract_by_key(self._data, self.INDEX_KEYS) + return result + + def _from_legacy(self): + assert self._legacy and not self._data + result = { + 'metadata_version': self.METADATA_VERSION, + 'generator': self.GENERATOR, + } + lmd = self._legacy.todict(True) # skip missing ones + for k in ('name', 'version', 'license', 'summary', 'description', + 'classifier'): + if k in lmd: + if k == 'classifier': + nk = 'classifiers' + else: + nk = k + result[nk] = lmd[k] + kw = lmd.get('Keywords', []) + if kw == ['']: + kw = [] + result['keywords'] = kw + keys = (('requires_dist', 'run_requires'), + ('setup_requires_dist', 'build_requires')) + for ok, nk in keys: + if ok in lmd and lmd[ok]: + result[nk] = [{'requires': lmd[ok]}] + result['provides'] = self.provides + author = {} + maintainer = {} + return result + + LEGACY_MAPPING = { + 'name': 'Name', + 'version': 'Version', + 'license': 'License', + 'summary': 'Summary', + 'description': 'Description', + 'classifiers': 'Classifier', + } + + def _to_legacy(self): + def process_entries(entries): + reqts = set() + for e in entries: + extra = e.get('extra') + env = e.get('environment') + rlist = e['requires'] + for r in rlist: + if not env and not extra: + reqts.add(r) + else: + marker = '' + if extra: + marker = 'extra == "%s"' % extra + if env: + if marker: + marker = '(%s) and %s' % (env, marker) + else: + marker = env + reqts.add(';'.join((r, marker))) + return reqts + + assert self._data and not self._legacy + result = LegacyMetadata() + nmd = self._data + for nk, ok in self.LEGACY_MAPPING.items(): + if nk in nmd: + result[ok] = nmd[nk] + r1 = process_entries(self.run_requires + self.meta_requires) + r2 = process_entries(self.build_requires + self.dev_requires) + if self.extras: + result['Provides-Extra'] = sorted(self.extras) + result['Requires-Dist'] = sorted(r1) + result['Setup-Requires-Dist'] = sorted(r2) + # TODO: other fields such as contacts + return result + + def write(self, path=None, fileobj=None, legacy=False, skip_unknown=True): + if [path, fileobj].count(None) != 1: + raise ValueError('Exactly one of path and fileobj is needed') + self.validate() + if legacy: + if self._legacy: + legacy_md = self._legacy + else: + legacy_md = self._to_legacy() + if path: + legacy_md.write(path, skip_unknown=skip_unknown) + else: + legacy_md.write_file(fileobj, skip_unknown=skip_unknown) + else: + if self._legacy: + d = self._from_legacy() + else: + d = self._data + if fileobj: + json.dump(d, fileobj, ensure_ascii=True, indent=2, + sort_keys=True) + else: + with codecs.open(path, 'w', 'utf-8') as f: + json.dump(d, f, ensure_ascii=True, indent=2, + sort_keys=True) + + def add_requirements(self, requirements): + if self._legacy: + self._legacy.add_requirements(requirements) + else: + run_requires = self._data.setdefault('run_requires', []) + always = None + for entry in run_requires: + if 'environment' not in entry and 'extra' not in entry: + always = entry + break + if always is None: + always = { 'requires': requirements } + run_requires.insert(0, always) + else: + rset = set(always['requires']) | set(requirements) + always['requires'] = sorted(rset) + + def __repr__(self): + name = self.name or '(no name)' + version = self.version or 'no version' + return '<%s %s %s (%s)>' % (self.__class__.__name__, + self.metadata_version, name, version) diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/resources.py b/my_env/Lib/site-packages/pip/_vendor/distlib/resources.py new file mode 100644 index 000000000..18840167a --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/resources.py @@ -0,0 +1,355 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2017 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from __future__ import unicode_literals + +import bisect +import io +import logging +import os +import pkgutil +import shutil +import sys +import types +import zipimport + +from . import DistlibException +from .util import cached_property, get_cache_base, path_to_cache_dir, Cache + +logger = logging.getLogger(__name__) + + +cache = None # created when needed + + +class ResourceCache(Cache): + def __init__(self, base=None): + if base is None: + # Use native string to avoid issues on 2.x: see Python #20140. + base = os.path.join(get_cache_base(), str('resource-cache')) + super(ResourceCache, self).__init__(base) + + def is_stale(self, resource, path): + """ + Is the cache stale for the given resource? + + :param resource: The :class:`Resource` being cached. + :param path: The path of the resource in the cache. + :return: True if the cache is stale. + """ + # Cache invalidation is a hard problem :-) + return True + + def get(self, resource): + """ + Get a resource into the cache, + + :param resource: A :class:`Resource` instance. + :return: The pathname of the resource in the cache. + """ + prefix, path = resource.finder.get_cache_info(resource) + if prefix is None: + result = path + else: + result = os.path.join(self.base, self.prefix_to_dir(prefix), path) + dirname = os.path.dirname(result) + if not os.path.isdir(dirname): + os.makedirs(dirname) + if not os.path.exists(result): + stale = True + else: + stale = self.is_stale(resource, path) + if stale: + # write the bytes of the resource to the cache location + with open(result, 'wb') as f: + f.write(resource.bytes) + return result + + +class ResourceBase(object): + def __init__(self, finder, name): + self.finder = finder + self.name = name + + +class Resource(ResourceBase): + """ + A class representing an in-package resource, such as a data file. This is + not normally instantiated by user code, but rather by a + :class:`ResourceFinder` which manages the resource. + """ + is_container = False # Backwards compatibility + + def as_stream(self): + """ + Get the resource as a stream. + + This is not a property to make it obvious that it returns a new stream + each time. + """ + return self.finder.get_stream(self) + + @cached_property + def file_path(self): + global cache + if cache is None: + cache = ResourceCache() + return cache.get(self) + + @cached_property + def bytes(self): + return self.finder.get_bytes(self) + + @cached_property + def size(self): + return self.finder.get_size(self) + + +class ResourceContainer(ResourceBase): + is_container = True # Backwards compatibility + + @cached_property + def resources(self): + return self.finder.get_resources(self) + + +class ResourceFinder(object): + """ + Resource finder for file system resources. + """ + + if sys.platform.startswith('java'): + skipped_extensions = ('.pyc', '.pyo', '.class') + else: + skipped_extensions = ('.pyc', '.pyo') + + def __init__(self, module): + self.module = module + self.loader = getattr(module, '__loader__', None) + self.base = os.path.dirname(getattr(module, '__file__', '')) + + def _adjust_path(self, path): + return os.path.realpath(path) + + def _make_path(self, resource_name): + # Issue #50: need to preserve type of path on Python 2.x + # like os.path._get_sep + if isinstance(resource_name, bytes): # should only happen on 2.x + sep = b'/' + else: + sep = '/' + parts = resource_name.split(sep) + parts.insert(0, self.base) + result = os.path.join(*parts) + return self._adjust_path(result) + + def _find(self, path): + return os.path.exists(path) + + def get_cache_info(self, resource): + return None, resource.path + + def find(self, resource_name): + path = self._make_path(resource_name) + if not self._find(path): + result = None + else: + if self._is_directory(path): + result = ResourceContainer(self, resource_name) + else: + result = Resource(self, resource_name) + result.path = path + return result + + def get_stream(self, resource): + return open(resource.path, 'rb') + + def get_bytes(self, resource): + with open(resource.path, 'rb') as f: + return f.read() + + def get_size(self, resource): + return os.path.getsize(resource.path) + + def get_resources(self, resource): + def allowed(f): + return (f != '__pycache__' and not + f.endswith(self.skipped_extensions)) + return set([f for f in os.listdir(resource.path) if allowed(f)]) + + def is_container(self, resource): + return self._is_directory(resource.path) + + _is_directory = staticmethod(os.path.isdir) + + def iterator(self, resource_name): + resource = self.find(resource_name) + if resource is not None: + todo = [resource] + while todo: + resource = todo.pop(0) + yield resource + if resource.is_container: + rname = resource.name + for name in resource.resources: + if not rname: + new_name = name + else: + new_name = '/'.join([rname, name]) + child = self.find(new_name) + if child.is_container: + todo.append(child) + else: + yield child + + +class ZipResourceFinder(ResourceFinder): + """ + Resource finder for resources in .zip files. + """ + def __init__(self, module): + super(ZipResourceFinder, self).__init__(module) + archive = self.loader.archive + self.prefix_len = 1 + len(archive) + # PyPy doesn't have a _files attr on zipimporter, and you can't set one + if hasattr(self.loader, '_files'): + self._files = self.loader._files + else: + self._files = zipimport._zip_directory_cache[archive] + self.index = sorted(self._files) + + def _adjust_path(self, path): + return path + + def _find(self, path): + path = path[self.prefix_len:] + if path in self._files: + result = True + else: + if path and path[-1] != os.sep: + path = path + os.sep + i = bisect.bisect(self.index, path) + try: + result = self.index[i].startswith(path) + except IndexError: + result = False + if not result: + logger.debug('_find failed: %r %r', path, self.loader.prefix) + else: + logger.debug('_find worked: %r %r', path, self.loader.prefix) + return result + + def get_cache_info(self, resource): + prefix = self.loader.archive + path = resource.path[1 + len(prefix):] + return prefix, path + + def get_bytes(self, resource): + return self.loader.get_data(resource.path) + + def get_stream(self, resource): + return io.BytesIO(self.get_bytes(resource)) + + def get_size(self, resource): + path = resource.path[self.prefix_len:] + return self._files[path][3] + + def get_resources(self, resource): + path = resource.path[self.prefix_len:] + if path and path[-1] != os.sep: + path += os.sep + plen = len(path) + result = set() + i = bisect.bisect(self.index, path) + while i < len(self.index): + if not self.index[i].startswith(path): + break + s = self.index[i][plen:] + result.add(s.split(os.sep, 1)[0]) # only immediate children + i += 1 + return result + + def _is_directory(self, path): + path = path[self.prefix_len:] + if path and path[-1] != os.sep: + path += os.sep + i = bisect.bisect(self.index, path) + try: + result = self.index[i].startswith(path) + except IndexError: + result = False + return result + +_finder_registry = { + type(None): ResourceFinder, + zipimport.zipimporter: ZipResourceFinder +} + +try: + # In Python 3.6, _frozen_importlib -> _frozen_importlib_external + try: + import _frozen_importlib_external as _fi + except ImportError: + import _frozen_importlib as _fi + _finder_registry[_fi.SourceFileLoader] = ResourceFinder + _finder_registry[_fi.FileFinder] = ResourceFinder + del _fi +except (ImportError, AttributeError): + pass + + +def register_finder(loader, finder_maker): + _finder_registry[type(loader)] = finder_maker + +_finder_cache = {} + + +def finder(package): + """ + Return a resource finder for a package. + :param package: The name of the package. + :return: A :class:`ResourceFinder` instance for the package. + """ + if package in _finder_cache: + result = _finder_cache[package] + else: + if package not in sys.modules: + __import__(package) + module = sys.modules[package] + path = getattr(module, '__path__', None) + if path is None: + raise DistlibException('You cannot get a finder for a module, ' + 'only for a package') + loader = getattr(module, '__loader__', None) + finder_maker = _finder_registry.get(type(loader)) + if finder_maker is None: + raise DistlibException('Unable to locate finder for %r' % package) + result = finder_maker(module) + _finder_cache[package] = result + return result + + +_dummy_module = types.ModuleType(str('__dummy__')) + + +def finder_for_path(path): + """ + Return a resource finder for a path, which should represent a container. + + :param path: The path. + :return: A :class:`ResourceFinder` instance for the path. + """ + result = None + # calls any path hooks, gets importer into cache + pkgutil.get_importer(path) + loader = sys.path_importer_cache.get(path) + finder = _finder_registry.get(type(loader)) + if finder: + module = _dummy_module + module.__file__ = os.path.join(path, '') + module.__loader__ = loader + result = finder(module) + return result diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/scripts.py b/my_env/Lib/site-packages/pip/_vendor/distlib/scripts.py new file mode 100644 index 000000000..5965e241d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/scripts.py @@ -0,0 +1,403 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2015 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from io import BytesIO +import logging +import os +import re +import struct +import sys + +from .compat import sysconfig, detect_encoding, ZipFile +from .resources import finder +from .util import (FileOperator, get_export_entry, convert_path, + get_executable, in_venv) + +logger = logging.getLogger(__name__) + +_DEFAULT_MANIFEST = ''' + + + + + + + + + + + + +'''.strip() + +# check if Python is called on the first line with this expression +FIRST_LINE_RE = re.compile(b'^#!.*pythonw?[0-9.]*([ \t].*)?$') +SCRIPT_TEMPLATE = r'''# -*- coding: utf-8 -*- +import re +import sys +from %(module)s import %(import_name)s +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(%(func)s()) +''' + + +def _enquote_executable(executable): + if ' ' in executable: + # make sure we quote only the executable in case of env + # for example /usr/bin/env "/dir with spaces/bin/jython" + # instead of "/usr/bin/env /dir with spaces/bin/jython" + # otherwise whole + if executable.startswith('/usr/bin/env '): + env, _executable = executable.split(' ', 1) + if ' ' in _executable and not _executable.startswith('"'): + executable = '%s "%s"' % (env, _executable) + else: + if not executable.startswith('"'): + executable = '"%s"' % executable + return executable + + +class ScriptMaker(object): + """ + A class to copy or create scripts from source scripts or callable + specifications. + """ + script_template = SCRIPT_TEMPLATE + + executable = None # for shebangs + + def __init__(self, source_dir, target_dir, add_launchers=True, + dry_run=False, fileop=None): + self.source_dir = source_dir + self.target_dir = target_dir + self.add_launchers = add_launchers + self.force = False + self.clobber = False + # It only makes sense to set mode bits on POSIX. + self.set_mode = (os.name == 'posix') or (os.name == 'java' and + os._name == 'posix') + self.variants = set(('', 'X.Y')) + self._fileop = fileop or FileOperator(dry_run) + + self._is_nt = os.name == 'nt' or ( + os.name == 'java' and os._name == 'nt') + + def _get_alternate_executable(self, executable, options): + if options.get('gui', False) and self._is_nt: # pragma: no cover + dn, fn = os.path.split(executable) + fn = fn.replace('python', 'pythonw') + executable = os.path.join(dn, fn) + return executable + + if sys.platform.startswith('java'): # pragma: no cover + def _is_shell(self, executable): + """ + Determine if the specified executable is a script + (contains a #! line) + """ + try: + with open(executable) as fp: + return fp.read(2) == '#!' + except (OSError, IOError): + logger.warning('Failed to open %s', executable) + return False + + def _fix_jython_executable(self, executable): + if self._is_shell(executable): + # Workaround for Jython is not needed on Linux systems. + import java + + if java.lang.System.getProperty('os.name') == 'Linux': + return executable + elif executable.lower().endswith('jython.exe'): + # Use wrapper exe for Jython on Windows + return executable + return '/usr/bin/env %s' % executable + + def _build_shebang(self, executable, post_interp): + """ + Build a shebang line. In the simple case (on Windows, or a shebang line + which is not too long or contains spaces) use a simple formulation for + the shebang. Otherwise, use /bin/sh as the executable, with a contrived + shebang which allows the script to run either under Python or sh, using + suitable quoting. Thanks to Harald Nordgren for his input. + + See also: http://www.in-ulm.de/~mascheck/various/shebang/#length + https://hg.mozilla.org/mozilla-central/file/tip/mach + """ + if os.name != 'posix': + simple_shebang = True + else: + # Add 3 for '#!' prefix and newline suffix. + shebang_length = len(executable) + len(post_interp) + 3 + if sys.platform == 'darwin': + max_shebang_length = 512 + else: + max_shebang_length = 127 + simple_shebang = ((b' ' not in executable) and + (shebang_length <= max_shebang_length)) + + if simple_shebang: + result = b'#!' + executable + post_interp + b'\n' + else: + result = b'#!/bin/sh\n' + result += b"'''exec' " + executable + post_interp + b' "$0" "$@"\n' + result += b"' '''" + return result + + def _get_shebang(self, encoding, post_interp=b'', options=None): + enquote = True + if self.executable: + executable = self.executable + enquote = False # assume this will be taken care of + elif not sysconfig.is_python_build(): + executable = get_executable() + elif in_venv(): # pragma: no cover + executable = os.path.join(sysconfig.get_path('scripts'), + 'python%s' % sysconfig.get_config_var('EXE')) + else: # pragma: no cover + executable = os.path.join( + sysconfig.get_config_var('BINDIR'), + 'python%s%s' % (sysconfig.get_config_var('VERSION'), + sysconfig.get_config_var('EXE'))) + if options: + executable = self._get_alternate_executable(executable, options) + + if sys.platform.startswith('java'): # pragma: no cover + executable = self._fix_jython_executable(executable) + # Normalise case for Windows + executable = os.path.normcase(executable) + # If the user didn't specify an executable, it may be necessary to + # cater for executable paths with spaces (not uncommon on Windows) + if enquote: + executable = _enquote_executable(executable) + # Issue #51: don't use fsencode, since we later try to + # check that the shebang is decodable using utf-8. + executable = executable.encode('utf-8') + # in case of IronPython, play safe and enable frames support + if (sys.platform == 'cli' and '-X:Frames' not in post_interp + and '-X:FullFrames' not in post_interp): # pragma: no cover + post_interp += b' -X:Frames' + shebang = self._build_shebang(executable, post_interp) + # Python parser starts to read a script using UTF-8 until + # it gets a #coding:xxx cookie. The shebang has to be the + # first line of a file, the #coding:xxx cookie cannot be + # written before. So the shebang has to be decodable from + # UTF-8. + try: + shebang.decode('utf-8') + except UnicodeDecodeError: # pragma: no cover + raise ValueError( + 'The shebang (%r) is not decodable from utf-8' % shebang) + # If the script is encoded to a custom encoding (use a + # #coding:xxx cookie), the shebang has to be decodable from + # the script encoding too. + if encoding != 'utf-8': + try: + shebang.decode(encoding) + except UnicodeDecodeError: # pragma: no cover + raise ValueError( + 'The shebang (%r) is not decodable ' + 'from the script encoding (%r)' % (shebang, encoding)) + return shebang + + def _get_script_text(self, entry): + return self.script_template % dict(module=entry.prefix, + import_name=entry.suffix.split('.')[0], + func=entry.suffix) + + manifest = _DEFAULT_MANIFEST + + def get_manifest(self, exename): + base = os.path.basename(exename) + return self.manifest % base + + def _write_script(self, names, shebang, script_bytes, filenames, ext): + use_launcher = self.add_launchers and self._is_nt + linesep = os.linesep.encode('utf-8') + if not shebang.endswith(linesep): + shebang += linesep + if not use_launcher: + script_bytes = shebang + script_bytes + else: # pragma: no cover + if ext == 'py': + launcher = self._get_launcher('t') + else: + launcher = self._get_launcher('w') + stream = BytesIO() + with ZipFile(stream, 'w') as zf: + zf.writestr('__main__.py', script_bytes) + zip_data = stream.getvalue() + script_bytes = launcher + shebang + zip_data + for name in names: + outname = os.path.join(self.target_dir, name) + if use_launcher: # pragma: no cover + n, e = os.path.splitext(outname) + if e.startswith('.py'): + outname = n + outname = '%s.exe' % outname + try: + self._fileop.write_binary_file(outname, script_bytes) + except Exception: + # Failed writing an executable - it might be in use. + logger.warning('Failed to write executable - trying to ' + 'use .deleteme logic') + dfname = '%s.deleteme' % outname + if os.path.exists(dfname): + os.remove(dfname) # Not allowed to fail here + os.rename(outname, dfname) # nor here + self._fileop.write_binary_file(outname, script_bytes) + logger.debug('Able to replace executable using ' + '.deleteme logic') + try: + os.remove(dfname) + except Exception: + pass # still in use - ignore error + else: + if self._is_nt and not outname.endswith('.' + ext): # pragma: no cover + outname = '%s.%s' % (outname, ext) + if os.path.exists(outname) and not self.clobber: + logger.warning('Skipping existing file %s', outname) + continue + self._fileop.write_binary_file(outname, script_bytes) + if self.set_mode: + self._fileop.set_executable_mode([outname]) + filenames.append(outname) + + def _make_script(self, entry, filenames, options=None): + post_interp = b'' + if options: + args = options.get('interpreter_args', []) + if args: + args = ' %s' % ' '.join(args) + post_interp = args.encode('utf-8') + shebang = self._get_shebang('utf-8', post_interp, options=options) + script = self._get_script_text(entry).encode('utf-8') + name = entry.name + scriptnames = set() + if '' in self.variants: + scriptnames.add(name) + if 'X' in self.variants: + scriptnames.add('%s%s' % (name, sys.version[0])) + if 'X.Y' in self.variants: + scriptnames.add('%s-%s' % (name, sys.version[:3])) + if options and options.get('gui', False): + ext = 'pyw' + else: + ext = 'py' + self._write_script(scriptnames, shebang, script, filenames, ext) + + def _copy_script(self, script, filenames): + adjust = False + script = os.path.join(self.source_dir, convert_path(script)) + outname = os.path.join(self.target_dir, os.path.basename(script)) + if not self.force and not self._fileop.newer(script, outname): + logger.debug('not copying %s (up-to-date)', script) + return + + # Always open the file, but ignore failures in dry-run mode -- + # that way, we'll get accurate feedback if we can read the + # script. + try: + f = open(script, 'rb') + except IOError: # pragma: no cover + if not self.dry_run: + raise + f = None + else: + first_line = f.readline() + if not first_line: # pragma: no cover + logger.warning('%s: %s is an empty file (skipping)', + self.get_command_name(), script) + return + + match = FIRST_LINE_RE.match(first_line.replace(b'\r\n', b'\n')) + if match: + adjust = True + post_interp = match.group(1) or b'' + + if not adjust: + if f: + f.close() + self._fileop.copy_file(script, outname) + if self.set_mode: + self._fileop.set_executable_mode([outname]) + filenames.append(outname) + else: + logger.info('copying and adjusting %s -> %s', script, + self.target_dir) + if not self._fileop.dry_run: + encoding, lines = detect_encoding(f.readline) + f.seek(0) + shebang = self._get_shebang(encoding, post_interp) + if b'pythonw' in first_line: # pragma: no cover + ext = 'pyw' + else: + ext = 'py' + n = os.path.basename(outname) + self._write_script([n], shebang, f.read(), filenames, ext) + if f: + f.close() + + @property + def dry_run(self): + return self._fileop.dry_run + + @dry_run.setter + def dry_run(self, value): + self._fileop.dry_run = value + + if os.name == 'nt' or (os.name == 'java' and os._name == 'nt'): # pragma: no cover + # Executable launcher support. + # Launchers are from https://bitbucket.org/vinay.sajip/simple_launcher/ + + def _get_launcher(self, kind): + if struct.calcsize('P') == 8: # 64-bit + bits = '64' + else: + bits = '32' + name = '%s%s.exe' % (kind, bits) + # Issue 31: don't hardcode an absolute package name, but + # determine it relative to the current package + distlib_package = __name__.rsplit('.', 1)[0] + result = finder(distlib_package).find(name).bytes + return result + + # Public API follows + + def make(self, specification, options=None): + """ + Make a script. + + :param specification: The specification, which is either a valid export + entry specification (to make a script from a + callable) or a filename (to make a script by + copying from a source location). + :param options: A dictionary of options controlling script generation. + :return: A list of all absolute pathnames written to. + """ + filenames = [] + entry = get_export_entry(specification) + if entry is None: + self._copy_script(specification, filenames) + else: + self._make_script(entry, filenames, options=options) + return filenames + + def make_multiple(self, specifications, options=None): + """ + Take a list of specifications and make scripts from them, + :param specifications: A list of specifications. + :return: A list of all absolute pathnames written to, + """ + filenames = [] + for specification in specifications: + filenames.extend(self.make(specification, options)) + return filenames diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/t32.exe b/my_env/Lib/site-packages/pip/_vendor/distlib/t32.exe new file mode 100644 index 000000000..5d5bce1f4 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/t32.exe differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/t64.exe b/my_env/Lib/site-packages/pip/_vendor/distlib/t64.exe new file mode 100644 index 000000000..039ce441b Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/t64.exe differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/util.py b/my_env/Lib/site-packages/pip/_vendor/distlib/util.py new file mode 100644 index 000000000..e851146c0 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/util.py @@ -0,0 +1,1760 @@ +# +# Copyright (C) 2012-2017 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import codecs +from collections import deque +import contextlib +import csv +from glob import iglob as std_iglob +import io +import json +import logging +import os +import py_compile +import re +import socket +try: + import ssl +except ImportError: # pragma: no cover + ssl = None +import subprocess +import sys +import tarfile +import tempfile +import textwrap + +try: + import threading +except ImportError: # pragma: no cover + import dummy_threading as threading +import time + +from . import DistlibException +from .compat import (string_types, text_type, shutil, raw_input, StringIO, + cache_from_source, urlopen, urljoin, httplib, xmlrpclib, + splittype, HTTPHandler, BaseConfigurator, valid_ident, + Container, configparser, URLError, ZipFile, fsdecode, + unquote, urlparse) + +logger = logging.getLogger(__name__) + +# +# Requirement parsing code as per PEP 508 +# + +IDENTIFIER = re.compile(r'^([\w\.-]+)\s*') +VERSION_IDENTIFIER = re.compile(r'^([\w\.*+-]+)\s*') +COMPARE_OP = re.compile(r'^(<=?|>=?|={2,3}|[~!]=)\s*') +MARKER_OP = re.compile(r'^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*') +OR = re.compile(r'^or\b\s*') +AND = re.compile(r'^and\b\s*') +NON_SPACE = re.compile(r'(\S+)\s*') +STRING_CHUNK = re.compile(r'([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)') + + +def parse_marker(marker_string): + """ + Parse a marker string and return a dictionary containing a marker expression. + + The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in + the expression grammar, or strings. A string contained in quotes is to be + interpreted as a literal string, and a string not contained in quotes is a + variable (such as os_name). + """ + def marker_var(remaining): + # either identifier, or literal string + m = IDENTIFIER.match(remaining) + if m: + result = m.groups()[0] + remaining = remaining[m.end():] + elif not remaining: + raise SyntaxError('unexpected end of input') + else: + q = remaining[0] + if q not in '\'"': + raise SyntaxError('invalid expression: %s' % remaining) + oq = '\'"'.replace(q, '') + remaining = remaining[1:] + parts = [q] + while remaining: + # either a string chunk, or oq, or q to terminate + if remaining[0] == q: + break + elif remaining[0] == oq: + parts.append(oq) + remaining = remaining[1:] + else: + m = STRING_CHUNK.match(remaining) + if not m: + raise SyntaxError('error in string literal: %s' % remaining) + parts.append(m.groups()[0]) + remaining = remaining[m.end():] + else: + s = ''.join(parts) + raise SyntaxError('unterminated string: %s' % s) + parts.append(q) + result = ''.join(parts) + remaining = remaining[1:].lstrip() # skip past closing quote + return result, remaining + + def marker_expr(remaining): + if remaining and remaining[0] == '(': + result, remaining = marker(remaining[1:].lstrip()) + if remaining[0] != ')': + raise SyntaxError('unterminated parenthesis: %s' % remaining) + remaining = remaining[1:].lstrip() + else: + lhs, remaining = marker_var(remaining) + while remaining: + m = MARKER_OP.match(remaining) + if not m: + break + op = m.groups()[0] + remaining = remaining[m.end():] + rhs, remaining = marker_var(remaining) + lhs = {'op': op, 'lhs': lhs, 'rhs': rhs} + result = lhs + return result, remaining + + def marker_and(remaining): + lhs, remaining = marker_expr(remaining) + while remaining: + m = AND.match(remaining) + if not m: + break + remaining = remaining[m.end():] + rhs, remaining = marker_expr(remaining) + lhs = {'op': 'and', 'lhs': lhs, 'rhs': rhs} + return lhs, remaining + + def marker(remaining): + lhs, remaining = marker_and(remaining) + while remaining: + m = OR.match(remaining) + if not m: + break + remaining = remaining[m.end():] + rhs, remaining = marker_and(remaining) + lhs = {'op': 'or', 'lhs': lhs, 'rhs': rhs} + return lhs, remaining + + return marker(marker_string) + + +def parse_requirement(req): + """ + Parse a requirement passed in as a string. Return a Container + whose attributes contain the various parts of the requirement. + """ + remaining = req.strip() + if not remaining or remaining.startswith('#'): + return None + m = IDENTIFIER.match(remaining) + if not m: + raise SyntaxError('name expected: %s' % remaining) + distname = m.groups()[0] + remaining = remaining[m.end():] + extras = mark_expr = versions = uri = None + if remaining and remaining[0] == '[': + i = remaining.find(']', 1) + if i < 0: + raise SyntaxError('unterminated extra: %s' % remaining) + s = remaining[1:i] + remaining = remaining[i + 1:].lstrip() + extras = [] + while s: + m = IDENTIFIER.match(s) + if not m: + raise SyntaxError('malformed extra: %s' % s) + extras.append(m.groups()[0]) + s = s[m.end():] + if not s: + break + if s[0] != ',': + raise SyntaxError('comma expected in extras: %s' % s) + s = s[1:].lstrip() + if not extras: + extras = None + if remaining: + if remaining[0] == '@': + # it's a URI + remaining = remaining[1:].lstrip() + m = NON_SPACE.match(remaining) + if not m: + raise SyntaxError('invalid URI: %s' % remaining) + uri = m.groups()[0] + t = urlparse(uri) + # there are issues with Python and URL parsing, so this test + # is a bit crude. See bpo-20271, bpo-23505. Python doesn't + # always parse invalid URLs correctly - it should raise + # exceptions for malformed URLs + if not (t.scheme and t.netloc): + raise SyntaxError('Invalid URL: %s' % uri) + remaining = remaining[m.end():].lstrip() + else: + + def get_versions(ver_remaining): + """ + Return a list of operator, version tuples if any are + specified, else None. + """ + m = COMPARE_OP.match(ver_remaining) + versions = None + if m: + versions = [] + while True: + op = m.groups()[0] + ver_remaining = ver_remaining[m.end():] + m = VERSION_IDENTIFIER.match(ver_remaining) + if not m: + raise SyntaxError('invalid version: %s' % ver_remaining) + v = m.groups()[0] + versions.append((op, v)) + ver_remaining = ver_remaining[m.end():] + if not ver_remaining or ver_remaining[0] != ',': + break + ver_remaining = ver_remaining[1:].lstrip() + m = COMPARE_OP.match(ver_remaining) + if not m: + raise SyntaxError('invalid constraint: %s' % ver_remaining) + if not versions: + versions = None + return versions, ver_remaining + + if remaining[0] != '(': + versions, remaining = get_versions(remaining) + else: + i = remaining.find(')', 1) + if i < 0: + raise SyntaxError('unterminated parenthesis: %s' % remaining) + s = remaining[1:i] + remaining = remaining[i + 1:].lstrip() + # As a special diversion from PEP 508, allow a version number + # a.b.c in parentheses as a synonym for ~= a.b.c (because this + # is allowed in earlier PEPs) + if COMPARE_OP.match(s): + versions, _ = get_versions(s) + else: + m = VERSION_IDENTIFIER.match(s) + if not m: + raise SyntaxError('invalid constraint: %s' % s) + v = m.groups()[0] + s = s[m.end():].lstrip() + if s: + raise SyntaxError('invalid constraint: %s' % s) + versions = [('~=', v)] + + if remaining: + if remaining[0] != ';': + raise SyntaxError('invalid requirement: %s' % remaining) + remaining = remaining[1:].lstrip() + + mark_expr, remaining = parse_marker(remaining) + + if remaining and remaining[0] != '#': + raise SyntaxError('unexpected trailing data: %s' % remaining) + + if not versions: + rs = distname + else: + rs = '%s %s' % (distname, ', '.join(['%s %s' % con for con in versions])) + return Container(name=distname, extras=extras, constraints=versions, + marker=mark_expr, url=uri, requirement=rs) + + +def get_resources_dests(resources_root, rules): + """Find destinations for resources files""" + + def get_rel_path(root, path): + # normalizes and returns a lstripped-/-separated path + root = root.replace(os.path.sep, '/') + path = path.replace(os.path.sep, '/') + assert path.startswith(root) + return path[len(root):].lstrip('/') + + destinations = {} + for base, suffix, dest in rules: + prefix = os.path.join(resources_root, base) + for abs_base in iglob(prefix): + abs_glob = os.path.join(abs_base, suffix) + for abs_path in iglob(abs_glob): + resource_file = get_rel_path(resources_root, abs_path) + if dest is None: # remove the entry if it was here + destinations.pop(resource_file, None) + else: + rel_path = get_rel_path(abs_base, abs_path) + rel_dest = dest.replace(os.path.sep, '/').rstrip('/') + destinations[resource_file] = rel_dest + '/' + rel_path + return destinations + + +def in_venv(): + if hasattr(sys, 'real_prefix'): + # virtualenv venvs + result = True + else: + # PEP 405 venvs + result = sys.prefix != getattr(sys, 'base_prefix', sys.prefix) + return result + + +def get_executable(): +# The __PYVENV_LAUNCHER__ dance is apparently no longer needed, as +# changes to the stub launcher mean that sys.executable always points +# to the stub on OS X +# if sys.platform == 'darwin' and ('__PYVENV_LAUNCHER__' +# in os.environ): +# result = os.environ['__PYVENV_LAUNCHER__'] +# else: +# result = sys.executable +# return result + result = os.path.normcase(sys.executable) + if not isinstance(result, text_type): + result = fsdecode(result) + return result + + +def proceed(prompt, allowed_chars, error_prompt=None, default=None): + p = prompt + while True: + s = raw_input(p) + p = prompt + if not s and default: + s = default + if s: + c = s[0].lower() + if c in allowed_chars: + break + if error_prompt: + p = '%c: %s\n%s' % (c, error_prompt, prompt) + return c + + +def extract_by_key(d, keys): + if isinstance(keys, string_types): + keys = keys.split() + result = {} + for key in keys: + if key in d: + result[key] = d[key] + return result + +def read_exports(stream): + if sys.version_info[0] >= 3: + # needs to be a text stream + stream = codecs.getreader('utf-8')(stream) + # Try to load as JSON, falling back on legacy format + data = stream.read() + stream = StringIO(data) + try: + jdata = json.load(stream) + result = jdata['extensions']['python.exports']['exports'] + for group, entries in result.items(): + for k, v in entries.items(): + s = '%s = %s' % (k, v) + entry = get_export_entry(s) + assert entry is not None + entries[k] = entry + return result + except Exception: + stream.seek(0, 0) + + def read_stream(cp, stream): + if hasattr(cp, 'read_file'): + cp.read_file(stream) + else: + cp.readfp(stream) + + cp = configparser.ConfigParser() + try: + read_stream(cp, stream) + except configparser.MissingSectionHeaderError: + stream.close() + data = textwrap.dedent(data) + stream = StringIO(data) + read_stream(cp, stream) + + result = {} + for key in cp.sections(): + result[key] = entries = {} + for name, value in cp.items(key): + s = '%s = %s' % (name, value) + entry = get_export_entry(s) + assert entry is not None + #entry.dist = self + entries[name] = entry + return result + + +def write_exports(exports, stream): + if sys.version_info[0] >= 3: + # needs to be a text stream + stream = codecs.getwriter('utf-8')(stream) + cp = configparser.ConfigParser() + for k, v in exports.items(): + # TODO check k, v for valid values + cp.add_section(k) + for entry in v.values(): + if entry.suffix is None: + s = entry.prefix + else: + s = '%s:%s' % (entry.prefix, entry.suffix) + if entry.flags: + s = '%s [%s]' % (s, ', '.join(entry.flags)) + cp.set(k, entry.name, s) + cp.write(stream) + + +@contextlib.contextmanager +def tempdir(): + td = tempfile.mkdtemp() + try: + yield td + finally: + shutil.rmtree(td) + +@contextlib.contextmanager +def chdir(d): + cwd = os.getcwd() + try: + os.chdir(d) + yield + finally: + os.chdir(cwd) + + +@contextlib.contextmanager +def socket_timeout(seconds=15): + cto = socket.getdefaulttimeout() + try: + socket.setdefaulttimeout(seconds) + yield + finally: + socket.setdefaulttimeout(cto) + + +class cached_property(object): + def __init__(self, func): + self.func = func + #for attr in ('__name__', '__module__', '__doc__'): + # setattr(self, attr, getattr(func, attr, None)) + + def __get__(self, obj, cls=None): + if obj is None: + return self + value = self.func(obj) + object.__setattr__(obj, self.func.__name__, value) + #obj.__dict__[self.func.__name__] = value = self.func(obj) + return value + +def convert_path(pathname): + """Return 'pathname' as a name that will work on the native filesystem. + + The path is split on '/' and put back together again using the current + directory separator. Needed because filenames in the setup script are + always supplied in Unix style, and have to be converted to the local + convention before we can actually use them in the filesystem. Raises + ValueError on non-Unix-ish systems if 'pathname' either starts or + ends with a slash. + """ + if os.sep == '/': + return pathname + if not pathname: + return pathname + if pathname[0] == '/': + raise ValueError("path '%s' cannot be absolute" % pathname) + if pathname[-1] == '/': + raise ValueError("path '%s' cannot end with '/'" % pathname) + + paths = pathname.split('/') + while os.curdir in paths: + paths.remove(os.curdir) + if not paths: + return os.curdir + return os.path.join(*paths) + + +class FileOperator(object): + def __init__(self, dry_run=False): + self.dry_run = dry_run + self.ensured = set() + self._init_record() + + def _init_record(self): + self.record = False + self.files_written = set() + self.dirs_created = set() + + def record_as_written(self, path): + if self.record: + self.files_written.add(path) + + def newer(self, source, target): + """Tell if the target is newer than the source. + + Returns true if 'source' exists and is more recently modified than + 'target', or if 'source' exists and 'target' doesn't. + + Returns false if both exist and 'target' is the same age or younger + than 'source'. Raise PackagingFileError if 'source' does not exist. + + Note that this test is not very accurate: files created in the same + second will have the same "age". + """ + if not os.path.exists(source): + raise DistlibException("file '%r' does not exist" % + os.path.abspath(source)) + if not os.path.exists(target): + return True + + return os.stat(source).st_mtime > os.stat(target).st_mtime + + def copy_file(self, infile, outfile, check=True): + """Copy a file respecting dry-run and force flags. + """ + self.ensure_dir(os.path.dirname(outfile)) + logger.info('Copying %s to %s', infile, outfile) + if not self.dry_run: + msg = None + if check: + if os.path.islink(outfile): + msg = '%s is a symlink' % outfile + elif os.path.exists(outfile) and not os.path.isfile(outfile): + msg = '%s is a non-regular file' % outfile + if msg: + raise ValueError(msg + ' which would be overwritten') + shutil.copyfile(infile, outfile) + self.record_as_written(outfile) + + def copy_stream(self, instream, outfile, encoding=None): + assert not os.path.isdir(outfile) + self.ensure_dir(os.path.dirname(outfile)) + logger.info('Copying stream %s to %s', instream, outfile) + if not self.dry_run: + if encoding is None: + outstream = open(outfile, 'wb') + else: + outstream = codecs.open(outfile, 'w', encoding=encoding) + try: + shutil.copyfileobj(instream, outstream) + finally: + outstream.close() + self.record_as_written(outfile) + + def write_binary_file(self, path, data): + self.ensure_dir(os.path.dirname(path)) + if not self.dry_run: + if os.path.exists(path): + os.remove(path) + with open(path, 'wb') as f: + f.write(data) + self.record_as_written(path) + + def write_text_file(self, path, data, encoding): + self.write_binary_file(path, data.encode(encoding)) + + def set_mode(self, bits, mask, files): + if os.name == 'posix' or (os.name == 'java' and os._name == 'posix'): + # Set the executable bits (owner, group, and world) on + # all the files specified. + for f in files: + if self.dry_run: + logger.info("changing mode of %s", f) + else: + mode = (os.stat(f).st_mode | bits) & mask + logger.info("changing mode of %s to %o", f, mode) + os.chmod(f, mode) + + set_executable_mode = lambda s, f: s.set_mode(0o555, 0o7777, f) + + def ensure_dir(self, path): + path = os.path.abspath(path) + if path not in self.ensured and not os.path.exists(path): + self.ensured.add(path) + d, f = os.path.split(path) + self.ensure_dir(d) + logger.info('Creating %s' % path) + if not self.dry_run: + os.mkdir(path) + if self.record: + self.dirs_created.add(path) + + def byte_compile(self, path, optimize=False, force=False, prefix=None, hashed_invalidation=False): + dpath = cache_from_source(path, not optimize) + logger.info('Byte-compiling %s to %s', path, dpath) + if not self.dry_run: + if force or self.newer(path, dpath): + if not prefix: + diagpath = None + else: + assert path.startswith(prefix) + diagpath = path[len(prefix):] + compile_kwargs = {} + if hashed_invalidation and hasattr(py_compile, 'PycInvalidationMode'): + compile_kwargs['invalidation_mode'] = py_compile.PycInvalidationMode.CHECKED_HASH + py_compile.compile(path, dpath, diagpath, True, **compile_kwargs) # raise error + self.record_as_written(dpath) + return dpath + + def ensure_removed(self, path): + if os.path.exists(path): + if os.path.isdir(path) and not os.path.islink(path): + logger.debug('Removing directory tree at %s', path) + if not self.dry_run: + shutil.rmtree(path) + if self.record: + if path in self.dirs_created: + self.dirs_created.remove(path) + else: + if os.path.islink(path): + s = 'link' + else: + s = 'file' + logger.debug('Removing %s %s', s, path) + if not self.dry_run: + os.remove(path) + if self.record: + if path in self.files_written: + self.files_written.remove(path) + + def is_writable(self, path): + result = False + while not result: + if os.path.exists(path): + result = os.access(path, os.W_OK) + break + parent = os.path.dirname(path) + if parent == path: + break + path = parent + return result + + def commit(self): + """ + Commit recorded changes, turn off recording, return + changes. + """ + assert self.record + result = self.files_written, self.dirs_created + self._init_record() + return result + + def rollback(self): + if not self.dry_run: + for f in list(self.files_written): + if os.path.exists(f): + os.remove(f) + # dirs should all be empty now, except perhaps for + # __pycache__ subdirs + # reverse so that subdirs appear before their parents + dirs = sorted(self.dirs_created, reverse=True) + for d in dirs: + flist = os.listdir(d) + if flist: + assert flist == ['__pycache__'] + sd = os.path.join(d, flist[0]) + os.rmdir(sd) + os.rmdir(d) # should fail if non-empty + self._init_record() + +def resolve(module_name, dotted_path): + if module_name in sys.modules: + mod = sys.modules[module_name] + else: + mod = __import__(module_name) + if dotted_path is None: + result = mod + else: + parts = dotted_path.split('.') + result = getattr(mod, parts.pop(0)) + for p in parts: + result = getattr(result, p) + return result + + +class ExportEntry(object): + def __init__(self, name, prefix, suffix, flags): + self.name = name + self.prefix = prefix + self.suffix = suffix + self.flags = flags + + @cached_property + def value(self): + return resolve(self.prefix, self.suffix) + + def __repr__(self): # pragma: no cover + return '' % (self.name, self.prefix, + self.suffix, self.flags) + + def __eq__(self, other): + if not isinstance(other, ExportEntry): + result = False + else: + result = (self.name == other.name and + self.prefix == other.prefix and + self.suffix == other.suffix and + self.flags == other.flags) + return result + + __hash__ = object.__hash__ + + +ENTRY_RE = re.compile(r'''(?P(\w|[-.+])+) + \s*=\s*(?P(\w+)([:\.]\w+)*) + \s*(\[\s*(?P\w+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? + ''', re.VERBOSE) + +def get_export_entry(specification): + m = ENTRY_RE.search(specification) + if not m: + result = None + if '[' in specification or ']' in specification: + raise DistlibException("Invalid specification " + "'%s'" % specification) + else: + d = m.groupdict() + name = d['name'] + path = d['callable'] + colons = path.count(':') + if colons == 0: + prefix, suffix = path, None + else: + if colons != 1: + raise DistlibException("Invalid specification " + "'%s'" % specification) + prefix, suffix = path.split(':') + flags = d['flags'] + if flags is None: + if '[' in specification or ']' in specification: + raise DistlibException("Invalid specification " + "'%s'" % specification) + flags = [] + else: + flags = [f.strip() for f in flags.split(',')] + result = ExportEntry(name, prefix, suffix, flags) + return result + + +def get_cache_base(suffix=None): + """ + Return the default base location for distlib caches. If the directory does + not exist, it is created. Use the suffix provided for the base directory, + and default to '.distlib' if it isn't provided. + + On Windows, if LOCALAPPDATA is defined in the environment, then it is + assumed to be a directory, and will be the parent directory of the result. + On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home + directory - using os.expanduser('~') - will be the parent directory of + the result. + + The result is just the directory '.distlib' in the parent directory as + determined above, or with the name specified with ``suffix``. + """ + if suffix is None: + suffix = '.distlib' + if os.name == 'nt' and 'LOCALAPPDATA' in os.environ: + result = os.path.expandvars('$localappdata') + else: + # Assume posix, or old Windows + result = os.path.expanduser('~') + # we use 'isdir' instead of 'exists', because we want to + # fail if there's a file with that name + if os.path.isdir(result): + usable = os.access(result, os.W_OK) + if not usable: + logger.warning('Directory exists but is not writable: %s', result) + else: + try: + os.makedirs(result) + usable = True + except OSError: + logger.warning('Unable to create %s', result, exc_info=True) + usable = False + if not usable: + result = tempfile.mkdtemp() + logger.warning('Default location unusable, using %s', result) + return os.path.join(result, suffix) + + +def path_to_cache_dir(path): + """ + Convert an absolute path to a directory name for use in a cache. + + The algorithm used is: + + #. On Windows, any ``':'`` in the drive is replaced with ``'---'``. + #. Any occurrence of ``os.sep`` is replaced with ``'--'``. + #. ``'.cache'`` is appended. + """ + d, p = os.path.splitdrive(os.path.abspath(path)) + if d: + d = d.replace(':', '---') + p = p.replace(os.sep, '--') + return d + p + '.cache' + + +def ensure_slash(s): + if not s.endswith('/'): + return s + '/' + return s + + +def parse_credentials(netloc): + username = password = None + if '@' in netloc: + prefix, netloc = netloc.rsplit('@', 1) + if ':' not in prefix: + username = prefix + else: + username, password = prefix.split(':', 1) + if username: + username = unquote(username) + if password: + password = unquote(password) + return username, password, netloc + + +def get_process_umask(): + result = os.umask(0o22) + os.umask(result) + return result + +def is_string_sequence(seq): + result = True + i = None + for i, s in enumerate(seq): + if not isinstance(s, string_types): + result = False + break + assert i is not None + return result + +PROJECT_NAME_AND_VERSION = re.compile('([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-' + '([a-z0-9_.+-]+)', re.I) +PYTHON_VERSION = re.compile(r'-py(\d\.?\d?)') + + +def split_filename(filename, project_name=None): + """ + Extract name, version, python version from a filename (no extension) + + Return name, version, pyver or None + """ + result = None + pyver = None + filename = unquote(filename).replace(' ', '-') + m = PYTHON_VERSION.search(filename) + if m: + pyver = m.group(1) + filename = filename[:m.start()] + if project_name and len(filename) > len(project_name) + 1: + m = re.match(re.escape(project_name) + r'\b', filename) + if m: + n = m.end() + result = filename[:n], filename[n + 1:], pyver + if result is None: + m = PROJECT_NAME_AND_VERSION.match(filename) + if m: + result = m.group(1), m.group(3), pyver + return result + +# Allow spaces in name because of legacy dists like "Twisted Core" +NAME_VERSION_RE = re.compile(r'(?P[\w .-]+)\s*' + r'\(\s*(?P[^\s)]+)\)$') + +def parse_name_and_version(p): + """ + A utility method used to get name and version from a string. + + From e.g. a Provides-Dist value. + + :param p: A value in a form 'foo (1.0)' + :return: The name and version as a tuple. + """ + m = NAME_VERSION_RE.match(p) + if not m: + raise DistlibException('Ill-formed name/version string: \'%s\'' % p) + d = m.groupdict() + return d['name'].strip().lower(), d['ver'] + +def get_extras(requested, available): + result = set() + requested = set(requested or []) + available = set(available or []) + if '*' in requested: + requested.remove('*') + result |= available + for r in requested: + if r == '-': + result.add(r) + elif r.startswith('-'): + unwanted = r[1:] + if unwanted not in available: + logger.warning('undeclared extra: %s' % unwanted) + if unwanted in result: + result.remove(unwanted) + else: + if r not in available: + logger.warning('undeclared extra: %s' % r) + result.add(r) + return result +# +# Extended metadata functionality +# + +def _get_external_data(url): + result = {} + try: + # urlopen might fail if it runs into redirections, + # because of Python issue #13696. Fixed in locators + # using a custom redirect handler. + resp = urlopen(url) + headers = resp.info() + ct = headers.get('Content-Type') + if not ct.startswith('application/json'): + logger.debug('Unexpected response for JSON request: %s', ct) + else: + reader = codecs.getreader('utf-8')(resp) + #data = reader.read().decode('utf-8') + #result = json.loads(data) + result = json.load(reader) + except Exception as e: + logger.exception('Failed to get external data for %s: %s', url, e) + return result + +_external_data_base_url = 'https://www.red-dove.com/pypi/projects/' + +def get_project_data(name): + url = '%s/%s/project.json' % (name[0].upper(), name) + url = urljoin(_external_data_base_url, url) + result = _get_external_data(url) + return result + +def get_package_data(name, version): + url = '%s/%s/package-%s.json' % (name[0].upper(), name, version) + url = urljoin(_external_data_base_url, url) + return _get_external_data(url) + + +class Cache(object): + """ + A class implementing a cache for resources that need to live in the file system + e.g. shared libraries. This class was moved from resources to here because it + could be used by other modules, e.g. the wheel module. + """ + + def __init__(self, base): + """ + Initialise an instance. + + :param base: The base directory where the cache should be located. + """ + # we use 'isdir' instead of 'exists', because we want to + # fail if there's a file with that name + if not os.path.isdir(base): # pragma: no cover + os.makedirs(base) + if (os.stat(base).st_mode & 0o77) != 0: + logger.warning('Directory \'%s\' is not private', base) + self.base = os.path.abspath(os.path.normpath(base)) + + def prefix_to_dir(self, prefix): + """ + Converts a resource prefix to a directory name in the cache. + """ + return path_to_cache_dir(prefix) + + def clear(self): + """ + Clear the cache. + """ + not_removed = [] + for fn in os.listdir(self.base): + fn = os.path.join(self.base, fn) + try: + if os.path.islink(fn) or os.path.isfile(fn): + os.remove(fn) + elif os.path.isdir(fn): + shutil.rmtree(fn) + except Exception: + not_removed.append(fn) + return not_removed + + +class EventMixin(object): + """ + A very simple publish/subscribe system. + """ + def __init__(self): + self._subscribers = {} + + def add(self, event, subscriber, append=True): + """ + Add a subscriber for an event. + + :param event: The name of an event. + :param subscriber: The subscriber to be added (and called when the + event is published). + :param append: Whether to append or prepend the subscriber to an + existing subscriber list for the event. + """ + subs = self._subscribers + if event not in subs: + subs[event] = deque([subscriber]) + else: + sq = subs[event] + if append: + sq.append(subscriber) + else: + sq.appendleft(subscriber) + + def remove(self, event, subscriber): + """ + Remove a subscriber for an event. + + :param event: The name of an event. + :param subscriber: The subscriber to be removed. + """ + subs = self._subscribers + if event not in subs: + raise ValueError('No subscribers: %r' % event) + subs[event].remove(subscriber) + + def get_subscribers(self, event): + """ + Return an iterator for the subscribers for an event. + :param event: The event to return subscribers for. + """ + return iter(self._subscribers.get(event, ())) + + def publish(self, event, *args, **kwargs): + """ + Publish a event and return a list of values returned by its + subscribers. + + :param event: The event to publish. + :param args: The positional arguments to pass to the event's + subscribers. + :param kwargs: The keyword arguments to pass to the event's + subscribers. + """ + result = [] + for subscriber in self.get_subscribers(event): + try: + value = subscriber(event, *args, **kwargs) + except Exception: + logger.exception('Exception during event publication') + value = None + result.append(value) + logger.debug('publish %s: args = %s, kwargs = %s, result = %s', + event, args, kwargs, result) + return result + +# +# Simple sequencing +# +class Sequencer(object): + def __init__(self): + self._preds = {} + self._succs = {} + self._nodes = set() # nodes with no preds/succs + + def add_node(self, node): + self._nodes.add(node) + + def remove_node(self, node, edges=False): + if node in self._nodes: + self._nodes.remove(node) + if edges: + for p in set(self._preds.get(node, ())): + self.remove(p, node) + for s in set(self._succs.get(node, ())): + self.remove(node, s) + # Remove empties + for k, v in list(self._preds.items()): + if not v: + del self._preds[k] + for k, v in list(self._succs.items()): + if not v: + del self._succs[k] + + def add(self, pred, succ): + assert pred != succ + self._preds.setdefault(succ, set()).add(pred) + self._succs.setdefault(pred, set()).add(succ) + + def remove(self, pred, succ): + assert pred != succ + try: + preds = self._preds[succ] + succs = self._succs[pred] + except KeyError: # pragma: no cover + raise ValueError('%r not a successor of anything' % succ) + try: + preds.remove(pred) + succs.remove(succ) + except KeyError: # pragma: no cover + raise ValueError('%r not a successor of %r' % (succ, pred)) + + def is_step(self, step): + return (step in self._preds or step in self._succs or + step in self._nodes) + + def get_steps(self, final): + if not self.is_step(final): + raise ValueError('Unknown: %r' % final) + result = [] + todo = [] + seen = set() + todo.append(final) + while todo: + step = todo.pop(0) + if step in seen: + # if a step was already seen, + # move it to the end (so it will appear earlier + # when reversed on return) ... but not for the + # final step, as that would be confusing for + # users + if step != final: + result.remove(step) + result.append(step) + else: + seen.add(step) + result.append(step) + preds = self._preds.get(step, ()) + todo.extend(preds) + return reversed(result) + + @property + def strong_connections(self): + #http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm + index_counter = [0] + stack = [] + lowlinks = {} + index = {} + result = [] + + graph = self._succs + + def strongconnect(node): + # set the depth index for this node to the smallest unused index + index[node] = index_counter[0] + lowlinks[node] = index_counter[0] + index_counter[0] += 1 + stack.append(node) + + # Consider successors + try: + successors = graph[node] + except Exception: + successors = [] + for successor in successors: + if successor not in lowlinks: + # Successor has not yet been visited + strongconnect(successor) + lowlinks[node] = min(lowlinks[node],lowlinks[successor]) + elif successor in stack: + # the successor is in the stack and hence in the current + # strongly connected component (SCC) + lowlinks[node] = min(lowlinks[node],index[successor]) + + # If `node` is a root node, pop the stack and generate an SCC + if lowlinks[node] == index[node]: + connected_component = [] + + while True: + successor = stack.pop() + connected_component.append(successor) + if successor == node: break + component = tuple(connected_component) + # storing the result + result.append(component) + + for node in graph: + if node not in lowlinks: + strongconnect(node) + + return result + + @property + def dot(self): + result = ['digraph G {'] + for succ in self._preds: + preds = self._preds[succ] + for pred in preds: + result.append(' %s -> %s;' % (pred, succ)) + for node in self._nodes: + result.append(' %s;' % node) + result.append('}') + return '\n'.join(result) + +# +# Unarchiving functionality for zip, tar, tgz, tbz, whl +# + +ARCHIVE_EXTENSIONS = ('.tar.gz', '.tar.bz2', '.tar', '.zip', + '.tgz', '.tbz', '.whl') + +def unarchive(archive_filename, dest_dir, format=None, check=True): + + def check_path(path): + if not isinstance(path, text_type): + path = path.decode('utf-8') + p = os.path.abspath(os.path.join(dest_dir, path)) + if not p.startswith(dest_dir) or p[plen] != os.sep: + raise ValueError('path outside destination: %r' % p) + + dest_dir = os.path.abspath(dest_dir) + plen = len(dest_dir) + archive = None + if format is None: + if archive_filename.endswith(('.zip', '.whl')): + format = 'zip' + elif archive_filename.endswith(('.tar.gz', '.tgz')): + format = 'tgz' + mode = 'r:gz' + elif archive_filename.endswith(('.tar.bz2', '.tbz')): + format = 'tbz' + mode = 'r:bz2' + elif archive_filename.endswith('.tar'): + format = 'tar' + mode = 'r' + else: # pragma: no cover + raise ValueError('Unknown format for %r' % archive_filename) + try: + if format == 'zip': + archive = ZipFile(archive_filename, 'r') + if check: + names = archive.namelist() + for name in names: + check_path(name) + else: + archive = tarfile.open(archive_filename, mode) + if check: + names = archive.getnames() + for name in names: + check_path(name) + if format != 'zip' and sys.version_info[0] < 3: + # See Python issue 17153. If the dest path contains Unicode, + # tarfile extraction fails on Python 2.x if a member path name + # contains non-ASCII characters - it leads to an implicit + # bytes -> unicode conversion using ASCII to decode. + for tarinfo in archive.getmembers(): + if not isinstance(tarinfo.name, text_type): + tarinfo.name = tarinfo.name.decode('utf-8') + archive.extractall(dest_dir) + + finally: + if archive: + archive.close() + + +def zip_dir(directory): + """zip a directory tree into a BytesIO object""" + result = io.BytesIO() + dlen = len(directory) + with ZipFile(result, "w") as zf: + for root, dirs, files in os.walk(directory): + for name in files: + full = os.path.join(root, name) + rel = root[dlen:] + dest = os.path.join(rel, name) + zf.write(full, dest) + return result + +# +# Simple progress bar +# + +UNITS = ('', 'K', 'M', 'G','T','P') + + +class Progress(object): + unknown = 'UNKNOWN' + + def __init__(self, minval=0, maxval=100): + assert maxval is None or maxval >= minval + self.min = self.cur = minval + self.max = maxval + self.started = None + self.elapsed = 0 + self.done = False + + def update(self, curval): + assert self.min <= curval + assert self.max is None or curval <= self.max + self.cur = curval + now = time.time() + if self.started is None: + self.started = now + else: + self.elapsed = now - self.started + + def increment(self, incr): + assert incr >= 0 + self.update(self.cur + incr) + + def start(self): + self.update(self.min) + return self + + def stop(self): + if self.max is not None: + self.update(self.max) + self.done = True + + @property + def maximum(self): + return self.unknown if self.max is None else self.max + + @property + def percentage(self): + if self.done: + result = '100 %' + elif self.max is None: + result = ' ?? %' + else: + v = 100.0 * (self.cur - self.min) / (self.max - self.min) + result = '%3d %%' % v + return result + + def format_duration(self, duration): + if (duration <= 0) and self.max is None or self.cur == self.min: + result = '??:??:??' + #elif duration < 1: + # result = '--:--:--' + else: + result = time.strftime('%H:%M:%S', time.gmtime(duration)) + return result + + @property + def ETA(self): + if self.done: + prefix = 'Done' + t = self.elapsed + #import pdb; pdb.set_trace() + else: + prefix = 'ETA ' + if self.max is None: + t = -1 + elif self.elapsed == 0 or (self.cur == self.min): + t = 0 + else: + #import pdb; pdb.set_trace() + t = float(self.max - self.min) + t /= self.cur - self.min + t = (t - 1) * self.elapsed + return '%s: %s' % (prefix, self.format_duration(t)) + + @property + def speed(self): + if self.elapsed == 0: + result = 0.0 + else: + result = (self.cur - self.min) / self.elapsed + for unit in UNITS: + if result < 1000: + break + result /= 1000.0 + return '%d %sB/s' % (result, unit) + +# +# Glob functionality +# + +RICH_GLOB = re.compile(r'\{([^}]*)\}') +_CHECK_RECURSIVE_GLOB = re.compile(r'[^/\\,{]\*\*|\*\*[^/\\,}]') +_CHECK_MISMATCH_SET = re.compile(r'^[^{]*\}|\{[^}]*$') + + +def iglob(path_glob): + """Extended globbing function that supports ** and {opt1,opt2,opt3}.""" + if _CHECK_RECURSIVE_GLOB.search(path_glob): + msg = """invalid glob %r: recursive glob "**" must be used alone""" + raise ValueError(msg % path_glob) + if _CHECK_MISMATCH_SET.search(path_glob): + msg = """invalid glob %r: mismatching set marker '{' or '}'""" + raise ValueError(msg % path_glob) + return _iglob(path_glob) + + +def _iglob(path_glob): + rich_path_glob = RICH_GLOB.split(path_glob, 1) + if len(rich_path_glob) > 1: + assert len(rich_path_glob) == 3, rich_path_glob + prefix, set, suffix = rich_path_glob + for item in set.split(','): + for path in _iglob(''.join((prefix, item, suffix))): + yield path + else: + if '**' not in path_glob: + for item in std_iglob(path_glob): + yield item + else: + prefix, radical = path_glob.split('**', 1) + if prefix == '': + prefix = '.' + if radical == '': + radical = '*' + else: + # we support both + radical = radical.lstrip('/') + radical = radical.lstrip('\\') + for path, dir, files in os.walk(prefix): + path = os.path.normpath(path) + for fn in _iglob(os.path.join(path, radical)): + yield fn + +if ssl: + from .compat import (HTTPSHandler as BaseHTTPSHandler, match_hostname, + CertificateError) + + +# +# HTTPSConnection which verifies certificates/matches domains +# + + class HTTPSConnection(httplib.HTTPSConnection): + ca_certs = None # set this to the path to the certs file (.pem) + check_domain = True # only used if ca_certs is not None + + # noinspection PyPropertyAccess + def connect(self): + sock = socket.create_connection((self.host, self.port), self.timeout) + if getattr(self, '_tunnel_host', False): + self.sock = sock + self._tunnel() + + if not hasattr(ssl, 'SSLContext'): + # For 2.x + if self.ca_certs: + cert_reqs = ssl.CERT_REQUIRED + else: + cert_reqs = ssl.CERT_NONE + self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, + cert_reqs=cert_reqs, + ssl_version=ssl.PROTOCOL_SSLv23, + ca_certs=self.ca_certs) + else: # pragma: no cover + context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + context.options |= ssl.OP_NO_SSLv2 + if self.cert_file: + context.load_cert_chain(self.cert_file, self.key_file) + kwargs = {} + if self.ca_certs: + context.verify_mode = ssl.CERT_REQUIRED + context.load_verify_locations(cafile=self.ca_certs) + if getattr(ssl, 'HAS_SNI', False): + kwargs['server_hostname'] = self.host + self.sock = context.wrap_socket(sock, **kwargs) + if self.ca_certs and self.check_domain: + try: + match_hostname(self.sock.getpeercert(), self.host) + logger.debug('Host verified: %s', self.host) + except CertificateError: # pragma: no cover + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + raise + + class HTTPSHandler(BaseHTTPSHandler): + def __init__(self, ca_certs, check_domain=True): + BaseHTTPSHandler.__init__(self) + self.ca_certs = ca_certs + self.check_domain = check_domain + + def _conn_maker(self, *args, **kwargs): + """ + This is called to create a connection instance. Normally you'd + pass a connection class to do_open, but it doesn't actually check for + a class, and just expects a callable. As long as we behave just as a + constructor would have, we should be OK. If it ever changes so that + we *must* pass a class, we'll create an UnsafeHTTPSConnection class + which just sets check_domain to False in the class definition, and + choose which one to pass to do_open. + """ + result = HTTPSConnection(*args, **kwargs) + if self.ca_certs: + result.ca_certs = self.ca_certs + result.check_domain = self.check_domain + return result + + def https_open(self, req): + try: + return self.do_open(self._conn_maker, req) + except URLError as e: + if 'certificate verify failed' in str(e.reason): + raise CertificateError('Unable to verify server certificate ' + 'for %s' % req.host) + else: + raise + + # + # To prevent against mixing HTTP traffic with HTTPS (examples: A Man-In-The- + # Middle proxy using HTTP listens on port 443, or an index mistakenly serves + # HTML containing a http://xyz link when it should be https://xyz), + # you can use the following handler class, which does not allow HTTP traffic. + # + # It works by inheriting from HTTPHandler - so build_opener won't add a + # handler for HTTP itself. + # + class HTTPSOnlyHandler(HTTPSHandler, HTTPHandler): + def http_open(self, req): + raise URLError('Unexpected HTTP request on what should be a secure ' + 'connection: %s' % req) + +# +# XML-RPC with timeouts +# + +_ver_info = sys.version_info[:2] + +if _ver_info == (2, 6): + class HTTP(httplib.HTTP): + def __init__(self, host='', port=None, **kwargs): + if port == 0: # 0 means use port 0, not the default port + port = None + self._setup(self._connection_class(host, port, **kwargs)) + + + if ssl: + class HTTPS(httplib.HTTPS): + def __init__(self, host='', port=None, **kwargs): + if port == 0: # 0 means use port 0, not the default port + port = None + self._setup(self._connection_class(host, port, **kwargs)) + + +class Transport(xmlrpclib.Transport): + def __init__(self, timeout, use_datetime=0): + self.timeout = timeout + xmlrpclib.Transport.__init__(self, use_datetime) + + def make_connection(self, host): + h, eh, x509 = self.get_host_info(host) + if _ver_info == (2, 6): + result = HTTP(h, timeout=self.timeout) + else: + if not self._connection or host != self._connection[0]: + self._extra_headers = eh + self._connection = host, httplib.HTTPConnection(h) + result = self._connection[1] + return result + +if ssl: + class SafeTransport(xmlrpclib.SafeTransport): + def __init__(self, timeout, use_datetime=0): + self.timeout = timeout + xmlrpclib.SafeTransport.__init__(self, use_datetime) + + def make_connection(self, host): + h, eh, kwargs = self.get_host_info(host) + if not kwargs: + kwargs = {} + kwargs['timeout'] = self.timeout + if _ver_info == (2, 6): + result = HTTPS(host, None, **kwargs) + else: + if not self._connection or host != self._connection[0]: + self._extra_headers = eh + self._connection = host, httplib.HTTPSConnection(h, None, + **kwargs) + result = self._connection[1] + return result + + +class ServerProxy(xmlrpclib.ServerProxy): + def __init__(self, uri, **kwargs): + self.timeout = timeout = kwargs.pop('timeout', None) + # The above classes only come into play if a timeout + # is specified + if timeout is not None: + scheme, _ = splittype(uri) + use_datetime = kwargs.get('use_datetime', 0) + if scheme == 'https': + tcls = SafeTransport + else: + tcls = Transport + kwargs['transport'] = t = tcls(timeout, use_datetime=use_datetime) + self.transport = t + xmlrpclib.ServerProxy.__init__(self, uri, **kwargs) + +# +# CSV functionality. This is provided because on 2.x, the csv module can't +# handle Unicode. However, we need to deal with Unicode in e.g. RECORD files. +# + +def _csv_open(fn, mode, **kwargs): + if sys.version_info[0] < 3: + mode += 'b' + else: + kwargs['newline'] = '' + # Python 3 determines encoding from locale. Force 'utf-8' + # file encoding to match other forced utf-8 encoding + kwargs['encoding'] = 'utf-8' + return open(fn, mode, **kwargs) + + +class CSVBase(object): + defaults = { + 'delimiter': str(','), # The strs are used because we need native + 'quotechar': str('"'), # str in the csv API (2.x won't take + 'lineterminator': str('\n') # Unicode) + } + + def __enter__(self): + return self + + def __exit__(self, *exc_info): + self.stream.close() + + +class CSVReader(CSVBase): + def __init__(self, **kwargs): + if 'stream' in kwargs: + stream = kwargs['stream'] + if sys.version_info[0] >= 3: + # needs to be a text stream + stream = codecs.getreader('utf-8')(stream) + self.stream = stream + else: + self.stream = _csv_open(kwargs['path'], 'r') + self.reader = csv.reader(self.stream, **self.defaults) + + def __iter__(self): + return self + + def next(self): + result = next(self.reader) + if sys.version_info[0] < 3: + for i, item in enumerate(result): + if not isinstance(item, text_type): + result[i] = item.decode('utf-8') + return result + + __next__ = next + +class CSVWriter(CSVBase): + def __init__(self, fn, **kwargs): + self.stream = _csv_open(fn, 'w') + self.writer = csv.writer(self.stream, **self.defaults) + + def writerow(self, row): + if sys.version_info[0] < 3: + r = [] + for item in row: + if isinstance(item, text_type): + item = item.encode('utf-8') + r.append(item) + row = r + self.writer.writerow(row) + +# +# Configurator functionality +# + +class Configurator(BaseConfigurator): + + value_converters = dict(BaseConfigurator.value_converters) + value_converters['inc'] = 'inc_convert' + + def __init__(self, config, base=None): + super(Configurator, self).__init__(config) + self.base = base or os.getcwd() + + def configure_custom(self, config): + def convert(o): + if isinstance(o, (list, tuple)): + result = type(o)([convert(i) for i in o]) + elif isinstance(o, dict): + if '()' in o: + result = self.configure_custom(o) + else: + result = {} + for k in o: + result[k] = convert(o[k]) + else: + result = self.convert(o) + return result + + c = config.pop('()') + if not callable(c): + c = self.resolve(c) + props = config.pop('.', None) + # Check for valid identifiers + args = config.pop('[]', ()) + if args: + args = tuple([convert(o) for o in args]) + items = [(k, convert(config[k])) for k in config if valid_ident(k)] + kwargs = dict(items) + result = c(*args, **kwargs) + if props: + for n, v in props.items(): + setattr(result, n, convert(v)) + return result + + def __getitem__(self, key): + result = self.config[key] + if isinstance(result, dict) and '()' in result: + self.config[key] = result = self.configure_custom(result) + return result + + def inc_convert(self, value): + """Default converter for the inc:// protocol.""" + if not os.path.isabs(value): + value = os.path.join(self.base, value) + with codecs.open(value, 'r', encoding='utf-8') as f: + result = json.load(f) + return result + + +class SubprocessMixin(object): + """ + Mixin for running subprocesses and capturing their output + """ + def __init__(self, verbose=False, progress=None): + self.verbose = verbose + self.progress = progress + + def reader(self, stream, context): + """ + Read lines from a subprocess' output stream and either pass to a progress + callable (if specified) or write progress information to sys.stderr. + """ + progress = self.progress + verbose = self.verbose + while True: + s = stream.readline() + if not s: + break + if progress is not None: + progress(s, context) + else: + if not verbose: + sys.stderr.write('.') + else: + sys.stderr.write(s.decode('utf-8')) + sys.stderr.flush() + stream.close() + + def run_command(self, cmd, **kwargs): + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, **kwargs) + t1 = threading.Thread(target=self.reader, args=(p.stdout, 'stdout')) + t1.start() + t2 = threading.Thread(target=self.reader, args=(p.stderr, 'stderr')) + t2.start() + p.wait() + t1.join() + t2.join() + if self.progress is not None: + self.progress('done.', 'main') + elif self.verbose: + sys.stderr.write('done.\n') + return p + + +def normalize_name(name): + """Normalize a python package name a la PEP 503""" + # https://www.python.org/dev/peps/pep-0503/#normalized-names + return re.sub('[-_.]+', '-', name).lower() diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/version.py b/my_env/Lib/site-packages/pip/_vendor/distlib/version.py new file mode 100644 index 000000000..3eebe18ee --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/version.py @@ -0,0 +1,736 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2017 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +""" +Implementation of a flexible versioning scheme providing support for PEP-440, +setuptools-compatible and semantic versioning. +""" + +import logging +import re + +from .compat import string_types +from .util import parse_requirement + +__all__ = ['NormalizedVersion', 'NormalizedMatcher', + 'LegacyVersion', 'LegacyMatcher', + 'SemanticVersion', 'SemanticMatcher', + 'UnsupportedVersionError', 'get_scheme'] + +logger = logging.getLogger(__name__) + + +class UnsupportedVersionError(ValueError): + """This is an unsupported version.""" + pass + + +class Version(object): + def __init__(self, s): + self._string = s = s.strip() + self._parts = parts = self.parse(s) + assert isinstance(parts, tuple) + assert len(parts) > 0 + + def parse(self, s): + raise NotImplementedError('please implement in a subclass') + + def _check_compatible(self, other): + if type(self) != type(other): + raise TypeError('cannot compare %r and %r' % (self, other)) + + def __eq__(self, other): + self._check_compatible(other) + return self._parts == other._parts + + def __ne__(self, other): + return not self.__eq__(other) + + def __lt__(self, other): + self._check_compatible(other) + return self._parts < other._parts + + def __gt__(self, other): + return not (self.__lt__(other) or self.__eq__(other)) + + def __le__(self, other): + return self.__lt__(other) or self.__eq__(other) + + def __ge__(self, other): + return self.__gt__(other) or self.__eq__(other) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + def __hash__(self): + return hash(self._parts) + + def __repr__(self): + return "%s('%s')" % (self.__class__.__name__, self._string) + + def __str__(self): + return self._string + + @property + def is_prerelease(self): + raise NotImplementedError('Please implement in subclasses.') + + +class Matcher(object): + version_class = None + + # value is either a callable or the name of a method + _operators = { + '<': lambda v, c, p: v < c, + '>': lambda v, c, p: v > c, + '<=': lambda v, c, p: v == c or v < c, + '>=': lambda v, c, p: v == c or v > c, + '==': lambda v, c, p: v == c, + '===': lambda v, c, p: v == c, + # by default, compatible => >=. + '~=': lambda v, c, p: v == c or v > c, + '!=': lambda v, c, p: v != c, + } + + # this is a method only to support alternative implementations + # via overriding + def parse_requirement(self, s): + return parse_requirement(s) + + def __init__(self, s): + if self.version_class is None: + raise ValueError('Please specify a version class') + self._string = s = s.strip() + r = self.parse_requirement(s) + if not r: + raise ValueError('Not valid: %r' % s) + self.name = r.name + self.key = self.name.lower() # for case-insensitive comparisons + clist = [] + if r.constraints: + # import pdb; pdb.set_trace() + for op, s in r.constraints: + if s.endswith('.*'): + if op not in ('==', '!='): + raise ValueError('\'.*\' not allowed for ' + '%r constraints' % op) + # Could be a partial version (e.g. for '2.*') which + # won't parse as a version, so keep it as a string + vn, prefix = s[:-2], True + # Just to check that vn is a valid version + self.version_class(vn) + else: + # Should parse as a version, so we can create an + # instance for the comparison + vn, prefix = self.version_class(s), False + clist.append((op, vn, prefix)) + self._parts = tuple(clist) + + def match(self, version): + """ + Check if the provided version matches the constraints. + + :param version: The version to match against this instance. + :type version: String or :class:`Version` instance. + """ + if isinstance(version, string_types): + version = self.version_class(version) + for operator, constraint, prefix in self._parts: + f = self._operators.get(operator) + if isinstance(f, string_types): + f = getattr(self, f) + if not f: + msg = ('%r not implemented ' + 'for %s' % (operator, self.__class__.__name__)) + raise NotImplementedError(msg) + if not f(version, constraint, prefix): + return False + return True + + @property + def exact_version(self): + result = None + if len(self._parts) == 1 and self._parts[0][0] in ('==', '==='): + result = self._parts[0][1] + return result + + def _check_compatible(self, other): + if type(self) != type(other) or self.name != other.name: + raise TypeError('cannot compare %s and %s' % (self, other)) + + def __eq__(self, other): + self._check_compatible(other) + return self.key == other.key and self._parts == other._parts + + def __ne__(self, other): + return not self.__eq__(other) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + def __hash__(self): + return hash(self.key) + hash(self._parts) + + def __repr__(self): + return "%s(%r)" % (self.__class__.__name__, self._string) + + def __str__(self): + return self._string + + +PEP440_VERSION_RE = re.compile(r'^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?' + r'(\.(post)(\d+))?(\.(dev)(\d+))?' + r'(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$') + + +def _pep_440_key(s): + s = s.strip() + m = PEP440_VERSION_RE.match(s) + if not m: + raise UnsupportedVersionError('Not a valid version: %s' % s) + groups = m.groups() + nums = tuple(int(v) for v in groups[1].split('.')) + while len(nums) > 1 and nums[-1] == 0: + nums = nums[:-1] + + if not groups[0]: + epoch = 0 + else: + epoch = int(groups[0]) + pre = groups[4:6] + post = groups[7:9] + dev = groups[10:12] + local = groups[13] + if pre == (None, None): + pre = () + else: + pre = pre[0], int(pre[1]) + if post == (None, None): + post = () + else: + post = post[0], int(post[1]) + if dev == (None, None): + dev = () + else: + dev = dev[0], int(dev[1]) + if local is None: + local = () + else: + parts = [] + for part in local.split('.'): + # to ensure that numeric compares as > lexicographic, avoid + # comparing them directly, but encode a tuple which ensures + # correct sorting + if part.isdigit(): + part = (1, int(part)) + else: + part = (0, part) + parts.append(part) + local = tuple(parts) + if not pre: + # either before pre-release, or final release and after + if not post and dev: + # before pre-release + pre = ('a', -1) # to sort before a0 + else: + pre = ('z',) # to sort after all pre-releases + # now look at the state of post and dev. + if not post: + post = ('_',) # sort before 'a' + if not dev: + dev = ('final',) + + #print('%s -> %s' % (s, m.groups())) + return epoch, nums, pre, post, dev, local + + +_normalized_key = _pep_440_key + + +class NormalizedVersion(Version): + """A rational version. + + Good: + 1.2 # equivalent to "1.2.0" + 1.2.0 + 1.2a1 + 1.2.3a2 + 1.2.3b1 + 1.2.3c1 + 1.2.3.4 + TODO: fill this out + + Bad: + 1 # minimum two numbers + 1.2a # release level must have a release serial + 1.2.3b + """ + def parse(self, s): + result = _normalized_key(s) + # _normalized_key loses trailing zeroes in the release + # clause, since that's needed to ensure that X.Y == X.Y.0 == X.Y.0.0 + # However, PEP 440 prefix matching needs it: for example, + # (~= 1.4.5.0) matches differently to (~= 1.4.5.0.0). + m = PEP440_VERSION_RE.match(s) # must succeed + groups = m.groups() + self._release_clause = tuple(int(v) for v in groups[1].split('.')) + return result + + PREREL_TAGS = set(['a', 'b', 'c', 'rc', 'dev']) + + @property + def is_prerelease(self): + return any(t[0] in self.PREREL_TAGS for t in self._parts if t) + + +def _match_prefix(x, y): + x = str(x) + y = str(y) + if x == y: + return True + if not x.startswith(y): + return False + n = len(y) + return x[n] == '.' + + +class NormalizedMatcher(Matcher): + version_class = NormalizedVersion + + # value is either a callable or the name of a method + _operators = { + '~=': '_match_compatible', + '<': '_match_lt', + '>': '_match_gt', + '<=': '_match_le', + '>=': '_match_ge', + '==': '_match_eq', + '===': '_match_arbitrary', + '!=': '_match_ne', + } + + def _adjust_local(self, version, constraint, prefix): + if prefix: + strip_local = '+' not in constraint and version._parts[-1] + else: + # both constraint and version are + # NormalizedVersion instances. + # If constraint does not have a local component, + # ensure the version doesn't, either. + strip_local = not constraint._parts[-1] and version._parts[-1] + if strip_local: + s = version._string.split('+', 1)[0] + version = self.version_class(s) + return version, constraint + + def _match_lt(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version >= constraint: + return False + release_clause = constraint._release_clause + pfx = '.'.join([str(i) for i in release_clause]) + return not _match_prefix(version, pfx) + + def _match_gt(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version <= constraint: + return False + release_clause = constraint._release_clause + pfx = '.'.join([str(i) for i in release_clause]) + return not _match_prefix(version, pfx) + + def _match_le(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + return version <= constraint + + def _match_ge(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + return version >= constraint + + def _match_eq(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if not prefix: + result = (version == constraint) + else: + result = _match_prefix(version, constraint) + return result + + def _match_arbitrary(self, version, constraint, prefix): + return str(version) == str(constraint) + + def _match_ne(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if not prefix: + result = (version != constraint) + else: + result = not _match_prefix(version, constraint) + return result + + def _match_compatible(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version == constraint: + return True + if version < constraint: + return False +# if not prefix: +# return True + release_clause = constraint._release_clause + if len(release_clause) > 1: + release_clause = release_clause[:-1] + pfx = '.'.join([str(i) for i in release_clause]) + return _match_prefix(version, pfx) + +_REPLACEMENTS = ( + (re.compile('[.+-]$'), ''), # remove trailing puncts + (re.compile(r'^[.](\d)'), r'0.\1'), # .N -> 0.N at start + (re.compile('^[.-]'), ''), # remove leading puncts + (re.compile(r'^\((.*)\)$'), r'\1'), # remove parentheses + (re.compile(r'^v(ersion)?\s*(\d+)'), r'\2'), # remove leading v(ersion) + (re.compile(r'^r(ev)?\s*(\d+)'), r'\2'), # remove leading v(ersion) + (re.compile('[.]{2,}'), '.'), # multiple runs of '.' + (re.compile(r'\b(alfa|apha)\b'), 'alpha'), # misspelt alpha + (re.compile(r'\b(pre-alpha|prealpha)\b'), + 'pre.alpha'), # standardise + (re.compile(r'\(beta\)$'), 'beta'), # remove parentheses +) + +_SUFFIX_REPLACEMENTS = ( + (re.compile('^[:~._+-]+'), ''), # remove leading puncts + (re.compile('[,*")([\\]]'), ''), # remove unwanted chars + (re.compile('[~:+_ -]'), '.'), # replace illegal chars + (re.compile('[.]{2,}'), '.'), # multiple runs of '.' + (re.compile(r'\.$'), ''), # trailing '.' +) + +_NUMERIC_PREFIX = re.compile(r'(\d+(\.\d+)*)') + + +def _suggest_semantic_version(s): + """ + Try to suggest a semantic form for a version for which + _suggest_normalized_version couldn't come up with anything. + """ + result = s.strip().lower() + for pat, repl in _REPLACEMENTS: + result = pat.sub(repl, result) + if not result: + result = '0.0.0' + + # Now look for numeric prefix, and separate it out from + # the rest. + #import pdb; pdb.set_trace() + m = _NUMERIC_PREFIX.match(result) + if not m: + prefix = '0.0.0' + suffix = result + else: + prefix = m.groups()[0].split('.') + prefix = [int(i) for i in prefix] + while len(prefix) < 3: + prefix.append(0) + if len(prefix) == 3: + suffix = result[m.end():] + else: + suffix = '.'.join([str(i) for i in prefix[3:]]) + result[m.end():] + prefix = prefix[:3] + prefix = '.'.join([str(i) for i in prefix]) + suffix = suffix.strip() + if suffix: + #import pdb; pdb.set_trace() + # massage the suffix. + for pat, repl in _SUFFIX_REPLACEMENTS: + suffix = pat.sub(repl, suffix) + + if not suffix: + result = prefix + else: + sep = '-' if 'dev' in suffix else '+' + result = prefix + sep + suffix + if not is_semver(result): + result = None + return result + + +def _suggest_normalized_version(s): + """Suggest a normalized version close to the given version string. + + If you have a version string that isn't rational (i.e. NormalizedVersion + doesn't like it) then you might be able to get an equivalent (or close) + rational version from this function. + + This does a number of simple normalizations to the given string, based + on observation of versions currently in use on PyPI. Given a dump of + those version during PyCon 2009, 4287 of them: + - 2312 (53.93%) match NormalizedVersion without change + with the automatic suggestion + - 3474 (81.04%) match when using this suggestion method + + @param s {str} An irrational version string. + @returns A rational version string, or None, if couldn't determine one. + """ + try: + _normalized_key(s) + return s # already rational + except UnsupportedVersionError: + pass + + rs = s.lower() + + # part of this could use maketrans + for orig, repl in (('-alpha', 'a'), ('-beta', 'b'), ('alpha', 'a'), + ('beta', 'b'), ('rc', 'c'), ('-final', ''), + ('-pre', 'c'), + ('-release', ''), ('.release', ''), ('-stable', ''), + ('+', '.'), ('_', '.'), (' ', ''), ('.final', ''), + ('final', '')): + rs = rs.replace(orig, repl) + + # if something ends with dev or pre, we add a 0 + rs = re.sub(r"pre$", r"pre0", rs) + rs = re.sub(r"dev$", r"dev0", rs) + + # if we have something like "b-2" or "a.2" at the end of the + # version, that is probably beta, alpha, etc + # let's remove the dash or dot + rs = re.sub(r"([abc]|rc)[\-\.](\d+)$", r"\1\2", rs) + + # 1.0-dev-r371 -> 1.0.dev371 + # 0.1-dev-r79 -> 0.1.dev79 + rs = re.sub(r"[\-\.](dev)[\-\.]?r?(\d+)$", r".\1\2", rs) + + # Clean: 2.0.a.3, 2.0.b1, 0.9.0~c1 + rs = re.sub(r"[.~]?([abc])\.?", r"\1", rs) + + # Clean: v0.3, v1.0 + if rs.startswith('v'): + rs = rs[1:] + + # Clean leading '0's on numbers. + #TODO: unintended side-effect on, e.g., "2003.05.09" + # PyPI stats: 77 (~2%) better + rs = re.sub(r"\b0+(\d+)(?!\d)", r"\1", rs) + + # Clean a/b/c with no version. E.g. "1.0a" -> "1.0a0". Setuptools infers + # zero. + # PyPI stats: 245 (7.56%) better + rs = re.sub(r"(\d+[abc])$", r"\g<1>0", rs) + + # the 'dev-rNNN' tag is a dev tag + rs = re.sub(r"\.?(dev-r|dev\.r)\.?(\d+)$", r".dev\2", rs) + + # clean the - when used as a pre delimiter + rs = re.sub(r"-(a|b|c)(\d+)$", r"\1\2", rs) + + # a terminal "dev" or "devel" can be changed into ".dev0" + rs = re.sub(r"[\.\-](dev|devel)$", r".dev0", rs) + + # a terminal "dev" can be changed into ".dev0" + rs = re.sub(r"(?![\.\-])dev$", r".dev0", rs) + + # a terminal "final" or "stable" can be removed + rs = re.sub(r"(final|stable)$", "", rs) + + # The 'r' and the '-' tags are post release tags + # 0.4a1.r10 -> 0.4a1.post10 + # 0.9.33-17222 -> 0.9.33.post17222 + # 0.9.33-r17222 -> 0.9.33.post17222 + rs = re.sub(r"\.?(r|-|-r)\.?(\d+)$", r".post\2", rs) + + # Clean 'r' instead of 'dev' usage: + # 0.9.33+r17222 -> 0.9.33.dev17222 + # 1.0dev123 -> 1.0.dev123 + # 1.0.git123 -> 1.0.dev123 + # 1.0.bzr123 -> 1.0.dev123 + # 0.1a0dev.123 -> 0.1a0.dev123 + # PyPI stats: ~150 (~4%) better + rs = re.sub(r"\.?(dev|git|bzr)\.?(\d+)$", r".dev\2", rs) + + # Clean '.pre' (normalized from '-pre' above) instead of 'c' usage: + # 0.2.pre1 -> 0.2c1 + # 0.2-c1 -> 0.2c1 + # 1.0preview123 -> 1.0c123 + # PyPI stats: ~21 (0.62%) better + rs = re.sub(r"\.?(pre|preview|-c)(\d+)$", r"c\g<2>", rs) + + # Tcl/Tk uses "px" for their post release markers + rs = re.sub(r"p(\d+)$", r".post\1", rs) + + try: + _normalized_key(rs) + except UnsupportedVersionError: + rs = None + return rs + +# +# Legacy version processing (distribute-compatible) +# + +_VERSION_PART = re.compile(r'([a-z]+|\d+|[\.-])', re.I) +_VERSION_REPLACE = { + 'pre': 'c', + 'preview': 'c', + '-': 'final-', + 'rc': 'c', + 'dev': '@', + '': None, + '.': None, +} + + +def _legacy_key(s): + def get_parts(s): + result = [] + for p in _VERSION_PART.split(s.lower()): + p = _VERSION_REPLACE.get(p, p) + if p: + if '0' <= p[:1] <= '9': + p = p.zfill(8) + else: + p = '*' + p + result.append(p) + result.append('*final') + return result + + result = [] + for p in get_parts(s): + if p.startswith('*'): + if p < '*final': + while result and result[-1] == '*final-': + result.pop() + while result and result[-1] == '00000000': + result.pop() + result.append(p) + return tuple(result) + + +class LegacyVersion(Version): + def parse(self, s): + return _legacy_key(s) + + @property + def is_prerelease(self): + result = False + for x in self._parts: + if (isinstance(x, string_types) and x.startswith('*') and + x < '*final'): + result = True + break + return result + + +class LegacyMatcher(Matcher): + version_class = LegacyVersion + + _operators = dict(Matcher._operators) + _operators['~='] = '_match_compatible' + + numeric_re = re.compile(r'^(\d+(\.\d+)*)') + + def _match_compatible(self, version, constraint, prefix): + if version < constraint: + return False + m = self.numeric_re.match(str(constraint)) + if not m: + logger.warning('Cannot compute compatible match for version %s ' + ' and constraint %s', version, constraint) + return True + s = m.groups()[0] + if '.' in s: + s = s.rsplit('.', 1)[0] + return _match_prefix(version, s) + +# +# Semantic versioning +# + +_SEMVER_RE = re.compile(r'^(\d+)\.(\d+)\.(\d+)' + r'(-[a-z0-9]+(\.[a-z0-9-]+)*)?' + r'(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$', re.I) + + +def is_semver(s): + return _SEMVER_RE.match(s) + + +def _semantic_key(s): + def make_tuple(s, absent): + if s is None: + result = (absent,) + else: + parts = s[1:].split('.') + # We can't compare ints and strings on Python 3, so fudge it + # by zero-filling numeric values so simulate a numeric comparison + result = tuple([p.zfill(8) if p.isdigit() else p for p in parts]) + return result + + m = is_semver(s) + if not m: + raise UnsupportedVersionError(s) + groups = m.groups() + major, minor, patch = [int(i) for i in groups[:3]] + # choose the '|' and '*' so that versions sort correctly + pre, build = make_tuple(groups[3], '|'), make_tuple(groups[5], '*') + return (major, minor, patch), pre, build + + +class SemanticVersion(Version): + def parse(self, s): + return _semantic_key(s) + + @property + def is_prerelease(self): + return self._parts[1][0] != '|' + + +class SemanticMatcher(Matcher): + version_class = SemanticVersion + + +class VersionScheme(object): + def __init__(self, key, matcher, suggester=None): + self.key = key + self.matcher = matcher + self.suggester = suggester + + def is_valid_version(self, s): + try: + self.matcher.version_class(s) + result = True + except UnsupportedVersionError: + result = False + return result + + def is_valid_matcher(self, s): + try: + self.matcher(s) + result = True + except UnsupportedVersionError: + result = False + return result + + def is_valid_constraint_list(self, s): + """ + Used for processing some metadata fields + """ + return self.is_valid_matcher('dummy_name (%s)' % s) + + def suggest(self, s): + if self.suggester is None: + result = None + else: + result = self.suggester(s) + return result + +_SCHEMES = { + 'normalized': VersionScheme(_normalized_key, NormalizedMatcher, + _suggest_normalized_version), + 'legacy': VersionScheme(_legacy_key, LegacyMatcher, lambda self, s: s), + 'semantic': VersionScheme(_semantic_key, SemanticMatcher, + _suggest_semantic_version), +} + +_SCHEMES['default'] = _SCHEMES['normalized'] + + +def get_scheme(name): + if name not in _SCHEMES: + raise ValueError('unknown scheme name: %r' % name) + return _SCHEMES[name] diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/w32.exe b/my_env/Lib/site-packages/pip/_vendor/distlib/w32.exe new file mode 100644 index 000000000..4df77001a Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/w32.exe differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/w64.exe b/my_env/Lib/site-packages/pip/_vendor/distlib/w64.exe new file mode 100644 index 000000000..63ce483d1 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/distlib/w64.exe differ diff --git a/my_env/Lib/site-packages/pip/_vendor/distlib/wheel.py b/my_env/Lib/site-packages/pip/_vendor/distlib/wheel.py new file mode 100644 index 000000000..0c8efad9a --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distlib/wheel.py @@ -0,0 +1,1004 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2017 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from __future__ import unicode_literals + +import base64 +import codecs +import datetime +import distutils.util +from email import message_from_file +import hashlib +import imp +import json +import logging +import os +import posixpath +import re +import shutil +import sys +import tempfile +import zipfile + +from . import __version__, DistlibException +from .compat import sysconfig, ZipFile, fsdecode, text_type, filter +from .database import InstalledDistribution +from .metadata import Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME +from .util import (FileOperator, convert_path, CSVReader, CSVWriter, Cache, + cached_property, get_cache_base, read_exports, tempdir) +from .version import NormalizedVersion, UnsupportedVersionError + +logger = logging.getLogger(__name__) + +cache = None # created when needed + +if hasattr(sys, 'pypy_version_info'): # pragma: no cover + IMP_PREFIX = 'pp' +elif sys.platform.startswith('java'): # pragma: no cover + IMP_PREFIX = 'jy' +elif sys.platform == 'cli': # pragma: no cover + IMP_PREFIX = 'ip' +else: + IMP_PREFIX = 'cp' + +VER_SUFFIX = sysconfig.get_config_var('py_version_nodot') +if not VER_SUFFIX: # pragma: no cover + VER_SUFFIX = '%s%s' % sys.version_info[:2] +PYVER = 'py' + VER_SUFFIX +IMPVER = IMP_PREFIX + VER_SUFFIX + +ARCH = distutils.util.get_platform().replace('-', '_').replace('.', '_') + +ABI = sysconfig.get_config_var('SOABI') +if ABI and ABI.startswith('cpython-'): + ABI = ABI.replace('cpython-', 'cp') +else: + def _derive_abi(): + parts = ['cp', VER_SUFFIX] + if sysconfig.get_config_var('Py_DEBUG'): + parts.append('d') + if sysconfig.get_config_var('WITH_PYMALLOC'): + parts.append('m') + if sysconfig.get_config_var('Py_UNICODE_SIZE') == 4: + parts.append('u') + return ''.join(parts) + ABI = _derive_abi() + del _derive_abi + +FILENAME_RE = re.compile(r''' +(?P[^-]+) +-(?P\d+[^-]*) +(-(?P\d+[^-]*))? +-(?P\w+\d+(\.\w+\d+)*) +-(?P\w+) +-(?P\w+(\.\w+)*) +\.whl$ +''', re.IGNORECASE | re.VERBOSE) + +NAME_VERSION_RE = re.compile(r''' +(?P[^-]+) +-(?P\d+[^-]*) +(-(?P\d+[^-]*))?$ +''', re.IGNORECASE | re.VERBOSE) + +SHEBANG_RE = re.compile(br'\s*#![^\r\n]*') +SHEBANG_DETAIL_RE = re.compile(br'^(\s*#!("[^"]+"|\S+))\s+(.*)$') +SHEBANG_PYTHON = b'#!python' +SHEBANG_PYTHONW = b'#!pythonw' + +if os.sep == '/': + to_posix = lambda o: o +else: + to_posix = lambda o: o.replace(os.sep, '/') + + +class Mounter(object): + def __init__(self): + self.impure_wheels = {} + self.libs = {} + + def add(self, pathname, extensions): + self.impure_wheels[pathname] = extensions + self.libs.update(extensions) + + def remove(self, pathname): + extensions = self.impure_wheels.pop(pathname) + for k, v in extensions: + if k in self.libs: + del self.libs[k] + + def find_module(self, fullname, path=None): + if fullname in self.libs: + result = self + else: + result = None + return result + + def load_module(self, fullname): + if fullname in sys.modules: + result = sys.modules[fullname] + else: + if fullname not in self.libs: + raise ImportError('unable to find extension for %s' % fullname) + result = imp.load_dynamic(fullname, self.libs[fullname]) + result.__loader__ = self + parts = fullname.rsplit('.', 1) + if len(parts) > 1: + result.__package__ = parts[0] + return result + +_hook = Mounter() + + +class Wheel(object): + """ + Class to build and install from Wheel files (PEP 427). + """ + + wheel_version = (1, 1) + hash_kind = 'sha256' + + def __init__(self, filename=None, sign=False, verify=False): + """ + Initialise an instance using a (valid) filename. + """ + self.sign = sign + self.should_verify = verify + self.buildver = '' + self.pyver = [PYVER] + self.abi = ['none'] + self.arch = ['any'] + self.dirname = os.getcwd() + if filename is None: + self.name = 'dummy' + self.version = '0.1' + self._filename = self.filename + else: + m = NAME_VERSION_RE.match(filename) + if m: + info = m.groupdict('') + self.name = info['nm'] + # Reinstate the local version separator + self.version = info['vn'].replace('_', '-') + self.buildver = info['bn'] + self._filename = self.filename + else: + dirname, filename = os.path.split(filename) + m = FILENAME_RE.match(filename) + if not m: + raise DistlibException('Invalid name or ' + 'filename: %r' % filename) + if dirname: + self.dirname = os.path.abspath(dirname) + self._filename = filename + info = m.groupdict('') + self.name = info['nm'] + self.version = info['vn'] + self.buildver = info['bn'] + self.pyver = info['py'].split('.') + self.abi = info['bi'].split('.') + self.arch = info['ar'].split('.') + + @property + def filename(self): + """ + Build and return a filename from the various components. + """ + if self.buildver: + buildver = '-' + self.buildver + else: + buildver = '' + pyver = '.'.join(self.pyver) + abi = '.'.join(self.abi) + arch = '.'.join(self.arch) + # replace - with _ as a local version separator + version = self.version.replace('-', '_') + return '%s-%s%s-%s-%s-%s.whl' % (self.name, version, buildver, + pyver, abi, arch) + + @property + def exists(self): + path = os.path.join(self.dirname, self.filename) + return os.path.isfile(path) + + @property + def tags(self): + for pyver in self.pyver: + for abi in self.abi: + for arch in self.arch: + yield pyver, abi, arch + + @cached_property + def metadata(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + wrapper = codecs.getreader('utf-8') + with ZipFile(pathname, 'r') as zf: + wheel_metadata = self.get_wheel_metadata(zf) + wv = wheel_metadata['Wheel-Version'].split('.', 1) + file_version = tuple([int(i) for i in wv]) + if file_version < (1, 1): + fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME, 'METADATA'] + else: + fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME] + result = None + for fn in fns: + try: + metadata_filename = posixpath.join(info_dir, fn) + with zf.open(metadata_filename) as bf: + wf = wrapper(bf) + result = Metadata(fileobj=wf) + if result: + break + except KeyError: + pass + if not result: + raise ValueError('Invalid wheel, because metadata is ' + 'missing: looked in %s' % ', '.join(fns)) + return result + + def get_wheel_metadata(self, zf): + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + metadata_filename = posixpath.join(info_dir, 'WHEEL') + with zf.open(metadata_filename) as bf: + wf = codecs.getreader('utf-8')(bf) + message = message_from_file(wf) + return dict(message) + + @cached_property + def info(self): + pathname = os.path.join(self.dirname, self.filename) + with ZipFile(pathname, 'r') as zf: + result = self.get_wheel_metadata(zf) + return result + + def process_shebang(self, data): + m = SHEBANG_RE.match(data) + if m: + end = m.end() + shebang, data_after_shebang = data[:end], data[end:] + # Preserve any arguments after the interpreter + if b'pythonw' in shebang.lower(): + shebang_python = SHEBANG_PYTHONW + else: + shebang_python = SHEBANG_PYTHON + m = SHEBANG_DETAIL_RE.match(shebang) + if m: + args = b' ' + m.groups()[-1] + else: + args = b'' + shebang = shebang_python + args + data = shebang + data_after_shebang + else: + cr = data.find(b'\r') + lf = data.find(b'\n') + if cr < 0 or cr > lf: + term = b'\n' + else: + if data[cr:cr + 2] == b'\r\n': + term = b'\r\n' + else: + term = b'\r' + data = SHEBANG_PYTHON + term + data + return data + + def get_hash(self, data, hash_kind=None): + if hash_kind is None: + hash_kind = self.hash_kind + try: + hasher = getattr(hashlib, hash_kind) + except AttributeError: + raise DistlibException('Unsupported hash algorithm: %r' % hash_kind) + result = hasher(data).digest() + result = base64.urlsafe_b64encode(result).rstrip(b'=').decode('ascii') + return hash_kind, result + + def write_record(self, records, record_path, base): + records = list(records) # make a copy for sorting + p = to_posix(os.path.relpath(record_path, base)) + records.append((p, '', '')) + records.sort() + with CSVWriter(record_path) as writer: + for row in records: + writer.writerow(row) + + def write_records(self, info, libdir, archive_paths): + records = [] + distinfo, info_dir = info + hasher = getattr(hashlib, self.hash_kind) + for ap, p in archive_paths: + with open(p, 'rb') as f: + data = f.read() + digest = '%s=%s' % self.get_hash(data) + size = os.path.getsize(p) + records.append((ap, digest, size)) + + p = os.path.join(distinfo, 'RECORD') + self.write_record(records, p, libdir) + ap = to_posix(os.path.join(info_dir, 'RECORD')) + archive_paths.append((ap, p)) + + def build_zip(self, pathname, archive_paths): + with ZipFile(pathname, 'w', zipfile.ZIP_DEFLATED) as zf: + for ap, p in archive_paths: + logger.debug('Wrote %s to %s in wheel', p, ap) + zf.write(p, ap) + + def build(self, paths, tags=None, wheel_version=None): + """ + Build a wheel from files in specified paths, and use any specified tags + when determining the name of the wheel. + """ + if tags is None: + tags = {} + + libkey = list(filter(lambda o: o in paths, ('purelib', 'platlib')))[0] + if libkey == 'platlib': + is_pure = 'false' + default_pyver = [IMPVER] + default_abi = [ABI] + default_arch = [ARCH] + else: + is_pure = 'true' + default_pyver = [PYVER] + default_abi = ['none'] + default_arch = ['any'] + + self.pyver = tags.get('pyver', default_pyver) + self.abi = tags.get('abi', default_abi) + self.arch = tags.get('arch', default_arch) + + libdir = paths[libkey] + + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + archive_paths = [] + + # First, stuff which is not in site-packages + for key in ('data', 'headers', 'scripts'): + if key not in paths: + continue + path = paths[key] + if os.path.isdir(path): + for root, dirs, files in os.walk(path): + for fn in files: + p = fsdecode(os.path.join(root, fn)) + rp = os.path.relpath(p, path) + ap = to_posix(os.path.join(data_dir, key, rp)) + archive_paths.append((ap, p)) + if key == 'scripts' and not p.endswith('.exe'): + with open(p, 'rb') as f: + data = f.read() + data = self.process_shebang(data) + with open(p, 'wb') as f: + f.write(data) + + # Now, stuff which is in site-packages, other than the + # distinfo stuff. + path = libdir + distinfo = None + for root, dirs, files in os.walk(path): + if root == path: + # At the top level only, save distinfo for later + # and skip it for now + for i, dn in enumerate(dirs): + dn = fsdecode(dn) + if dn.endswith('.dist-info'): + distinfo = os.path.join(root, dn) + del dirs[i] + break + assert distinfo, '.dist-info directory expected, not found' + + for fn in files: + # comment out next suite to leave .pyc files in + if fsdecode(fn).endswith(('.pyc', '.pyo')): + continue + p = os.path.join(root, fn) + rp = to_posix(os.path.relpath(p, path)) + archive_paths.append((rp, p)) + + # Now distinfo. Assumed to be flat, i.e. os.listdir is enough. + files = os.listdir(distinfo) + for fn in files: + if fn not in ('RECORD', 'INSTALLER', 'SHARED', 'WHEEL'): + p = fsdecode(os.path.join(distinfo, fn)) + ap = to_posix(os.path.join(info_dir, fn)) + archive_paths.append((ap, p)) + + wheel_metadata = [ + 'Wheel-Version: %d.%d' % (wheel_version or self.wheel_version), + 'Generator: distlib %s' % __version__, + 'Root-Is-Purelib: %s' % is_pure, + ] + for pyver, abi, arch in self.tags: + wheel_metadata.append('Tag: %s-%s-%s' % (pyver, abi, arch)) + p = os.path.join(distinfo, 'WHEEL') + with open(p, 'w') as f: + f.write('\n'.join(wheel_metadata)) + ap = to_posix(os.path.join(info_dir, 'WHEEL')) + archive_paths.append((ap, p)) + + # Now, at last, RECORD. + # Paths in here are archive paths - nothing else makes sense. + self.write_records((distinfo, info_dir), libdir, archive_paths) + # Now, ready to build the zip file + pathname = os.path.join(self.dirname, self.filename) + self.build_zip(pathname, archive_paths) + return pathname + + def skip_entry(self, arcname): + """ + Determine whether an archive entry should be skipped when verifying + or installing. + """ + # The signature file won't be in RECORD, + # and we don't currently don't do anything with it + # We also skip directories, as they won't be in RECORD + # either. See: + # + # https://github.com/pypa/wheel/issues/294 + # https://github.com/pypa/wheel/issues/287 + # https://github.com/pypa/wheel/pull/289 + # + return arcname.endswith(('/', '/RECORD.jws')) + + def install(self, paths, maker, **kwargs): + """ + Install a wheel to the specified paths. If kwarg ``warner`` is + specified, it should be a callable, which will be called with two + tuples indicating the wheel version of this software and the wheel + version in the file, if there is a discrepancy in the versions. + This can be used to issue any warnings to raise any exceptions. + If kwarg ``lib_only`` is True, only the purelib/platlib files are + installed, and the headers, scripts, data and dist-info metadata are + not written. If kwarg ``bytecode_hashed_invalidation`` is True, written + bytecode will try to use file-hash based invalidation (PEP-552) on + supported interpreter versions (CPython 2.7+). + + The return value is a :class:`InstalledDistribution` instance unless + ``options.lib_only`` is True, in which case the return value is ``None``. + """ + + dry_run = maker.dry_run + warner = kwargs.get('warner') + lib_only = kwargs.get('lib_only', False) + bc_hashed_invalidation = kwargs.get('bytecode_hashed_invalidation', False) + + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + metadata_name = posixpath.join(info_dir, METADATA_FILENAME) + wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') + record_name = posixpath.join(info_dir, 'RECORD') + + wrapper = codecs.getreader('utf-8') + + with ZipFile(pathname, 'r') as zf: + with zf.open(wheel_metadata_name) as bwf: + wf = wrapper(bwf) + message = message_from_file(wf) + wv = message['Wheel-Version'].split('.', 1) + file_version = tuple([int(i) for i in wv]) + if (file_version != self.wheel_version) and warner: + warner(self.wheel_version, file_version) + + if message['Root-Is-Purelib'] == 'true': + libdir = paths['purelib'] + else: + libdir = paths['platlib'] + + records = {} + with zf.open(record_name) as bf: + with CSVReader(stream=bf) as reader: + for row in reader: + p = row[0] + records[p] = row + + data_pfx = posixpath.join(data_dir, '') + info_pfx = posixpath.join(info_dir, '') + script_pfx = posixpath.join(data_dir, 'scripts', '') + + # make a new instance rather than a copy of maker's, + # as we mutate it + fileop = FileOperator(dry_run=dry_run) + fileop.record = True # so we can rollback if needed + + bc = not sys.dont_write_bytecode # Double negatives. Lovely! + + outfiles = [] # for RECORD writing + + # for script copying/shebang processing + workdir = tempfile.mkdtemp() + # set target dir later + # we default add_launchers to False, as the + # Python Launcher should be used instead + maker.source_dir = workdir + maker.target_dir = None + try: + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + if self.skip_entry(u_arcname): + continue + row = records[u_arcname] + if row[2] and str(zinfo.file_size) != row[2]: + raise DistlibException('size mismatch for ' + '%s' % u_arcname) + if row[1]: + kind, value = row[1].split('=', 1) + with zf.open(arcname) as bf: + data = bf.read() + _, digest = self.get_hash(data, kind) + if digest != value: + raise DistlibException('digest mismatch for ' + '%s' % arcname) + + if lib_only and u_arcname.startswith((info_pfx, data_pfx)): + logger.debug('lib_only: skipping %s', u_arcname) + continue + is_script = (u_arcname.startswith(script_pfx) + and not u_arcname.endswith('.exe')) + + if u_arcname.startswith(data_pfx): + _, where, rp = u_arcname.split('/', 2) + outfile = os.path.join(paths[where], convert_path(rp)) + else: + # meant for site-packages. + if u_arcname in (wheel_metadata_name, record_name): + continue + outfile = os.path.join(libdir, convert_path(u_arcname)) + if not is_script: + with zf.open(arcname) as bf: + fileop.copy_stream(bf, outfile) + outfiles.append(outfile) + # Double check the digest of the written file + if not dry_run and row[1]: + with open(outfile, 'rb') as bf: + data = bf.read() + _, newdigest = self.get_hash(data, kind) + if newdigest != digest: + raise DistlibException('digest mismatch ' + 'on write for ' + '%s' % outfile) + if bc and outfile.endswith('.py'): + try: + pyc = fileop.byte_compile(outfile, + hashed_invalidation=bc_hashed_invalidation) + outfiles.append(pyc) + except Exception: + # Don't give up if byte-compilation fails, + # but log it and perhaps warn the user + logger.warning('Byte-compilation failed', + exc_info=True) + else: + fn = os.path.basename(convert_path(arcname)) + workname = os.path.join(workdir, fn) + with zf.open(arcname) as bf: + fileop.copy_stream(bf, workname) + + dn, fn = os.path.split(outfile) + maker.target_dir = dn + filenames = maker.make(fn) + fileop.set_executable_mode(filenames) + outfiles.extend(filenames) + + if lib_only: + logger.debug('lib_only: returning None') + dist = None + else: + # Generate scripts + + # Try to get pydist.json so we can see if there are + # any commands to generate. If this fails (e.g. because + # of a legacy wheel), log a warning but don't give up. + commands = None + file_version = self.info['Wheel-Version'] + if file_version == '1.0': + # Use legacy info + ep = posixpath.join(info_dir, 'entry_points.txt') + try: + with zf.open(ep) as bwf: + epdata = read_exports(bwf) + commands = {} + for key in ('console', 'gui'): + k = '%s_scripts' % key + if k in epdata: + commands['wrap_%s' % key] = d = {} + for v in epdata[k].values(): + s = '%s:%s' % (v.prefix, v.suffix) + if v.flags: + s += ' %s' % v.flags + d[v.name] = s + except Exception: + logger.warning('Unable to read legacy script ' + 'metadata, so cannot generate ' + 'scripts') + else: + try: + with zf.open(metadata_name) as bwf: + wf = wrapper(bwf) + commands = json.load(wf).get('extensions') + if commands: + commands = commands.get('python.commands') + except Exception: + logger.warning('Unable to read JSON metadata, so ' + 'cannot generate scripts') + if commands: + console_scripts = commands.get('wrap_console', {}) + gui_scripts = commands.get('wrap_gui', {}) + if console_scripts or gui_scripts: + script_dir = paths.get('scripts', '') + if not os.path.isdir(script_dir): + raise ValueError('Valid script path not ' + 'specified') + maker.target_dir = script_dir + for k, v in console_scripts.items(): + script = '%s = %s' % (k, v) + filenames = maker.make(script) + fileop.set_executable_mode(filenames) + + if gui_scripts: + options = {'gui': True } + for k, v in gui_scripts.items(): + script = '%s = %s' % (k, v) + filenames = maker.make(script, options) + fileop.set_executable_mode(filenames) + + p = os.path.join(libdir, info_dir) + dist = InstalledDistribution(p) + + # Write SHARED + paths = dict(paths) # don't change passed in dict + del paths['purelib'] + del paths['platlib'] + paths['lib'] = libdir + p = dist.write_shared_locations(paths, dry_run) + if p: + outfiles.append(p) + + # Write RECORD + dist.write_installed_files(outfiles, paths['prefix'], + dry_run) + return dist + except Exception: # pragma: no cover + logger.exception('installation failed.') + fileop.rollback() + raise + finally: + shutil.rmtree(workdir) + + def _get_dylib_cache(self): + global cache + if cache is None: + # Use native string to avoid issues on 2.x: see Python #20140. + base = os.path.join(get_cache_base(), str('dylib-cache'), + sys.version[:3]) + cache = Cache(base) + return cache + + def _get_extensions(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + arcname = posixpath.join(info_dir, 'EXTENSIONS') + wrapper = codecs.getreader('utf-8') + result = [] + with ZipFile(pathname, 'r') as zf: + try: + with zf.open(arcname) as bf: + wf = wrapper(bf) + extensions = json.load(wf) + cache = self._get_dylib_cache() + prefix = cache.prefix_to_dir(pathname) + cache_base = os.path.join(cache.base, prefix) + if not os.path.isdir(cache_base): + os.makedirs(cache_base) + for name, relpath in extensions.items(): + dest = os.path.join(cache_base, convert_path(relpath)) + if not os.path.exists(dest): + extract = True + else: + file_time = os.stat(dest).st_mtime + file_time = datetime.datetime.fromtimestamp(file_time) + info = zf.getinfo(relpath) + wheel_time = datetime.datetime(*info.date_time) + extract = wheel_time > file_time + if extract: + zf.extract(relpath, cache_base) + result.append((name, dest)) + except KeyError: + pass + return result + + def is_compatible(self): + """ + Determine if a wheel is compatible with the running system. + """ + return is_compatible(self) + + def is_mountable(self): + """ + Determine if a wheel is asserted as mountable by its metadata. + """ + return True # for now - metadata details TBD + + def mount(self, append=False): + pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) + if not self.is_compatible(): + msg = 'Wheel %s not compatible with this Python.' % pathname + raise DistlibException(msg) + if not self.is_mountable(): + msg = 'Wheel %s is marked as not mountable.' % pathname + raise DistlibException(msg) + if pathname in sys.path: + logger.debug('%s already in path', pathname) + else: + if append: + sys.path.append(pathname) + else: + sys.path.insert(0, pathname) + extensions = self._get_extensions() + if extensions: + if _hook not in sys.meta_path: + sys.meta_path.append(_hook) + _hook.add(pathname, extensions) + + def unmount(self): + pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) + if pathname not in sys.path: + logger.debug('%s not in path', pathname) + else: + sys.path.remove(pathname) + if pathname in _hook.impure_wheels: + _hook.remove(pathname) + if not _hook.impure_wheels: + if _hook in sys.meta_path: + sys.meta_path.remove(_hook) + + def verify(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + metadata_name = posixpath.join(info_dir, METADATA_FILENAME) + wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') + record_name = posixpath.join(info_dir, 'RECORD') + + wrapper = codecs.getreader('utf-8') + + with ZipFile(pathname, 'r') as zf: + with zf.open(wheel_metadata_name) as bwf: + wf = wrapper(bwf) + message = message_from_file(wf) + wv = message['Wheel-Version'].split('.', 1) + file_version = tuple([int(i) for i in wv]) + # TODO version verification + + records = {} + with zf.open(record_name) as bf: + with CSVReader(stream=bf) as reader: + for row in reader: + p = row[0] + records[p] = row + + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + # See issue #115: some wheels have .. in their entries, but + # in the filename ... e.g. __main__..py ! So the check is + # updated to look for .. in the directory portions + p = u_arcname.split('/') + if '..' in p: + raise DistlibException('invalid entry in ' + 'wheel: %r' % u_arcname) + + if self.skip_entry(u_arcname): + continue + row = records[u_arcname] + if row[2] and str(zinfo.file_size) != row[2]: + raise DistlibException('size mismatch for ' + '%s' % u_arcname) + if row[1]: + kind, value = row[1].split('=', 1) + with zf.open(arcname) as bf: + data = bf.read() + _, digest = self.get_hash(data, kind) + if digest != value: + raise DistlibException('digest mismatch for ' + '%s' % arcname) + + def update(self, modifier, dest_dir=None, **kwargs): + """ + Update the contents of a wheel in a generic way. The modifier should + be a callable which expects a dictionary argument: its keys are + archive-entry paths, and its values are absolute filesystem paths + where the contents the corresponding archive entries can be found. The + modifier is free to change the contents of the files pointed to, add + new entries and remove entries, before returning. This method will + extract the entire contents of the wheel to a temporary location, call + the modifier, and then use the passed (and possibly updated) + dictionary to write a new wheel. If ``dest_dir`` is specified, the new + wheel is written there -- otherwise, the original wheel is overwritten. + + The modifier should return True if it updated the wheel, else False. + This method returns the same value the modifier returns. + """ + + def get_version(path_map, info_dir): + version = path = None + key = '%s/%s' % (info_dir, METADATA_FILENAME) + if key not in path_map: + key = '%s/PKG-INFO' % info_dir + if key in path_map: + path = path_map[key] + version = Metadata(path=path).version + return version, path + + def update_version(version, path): + updated = None + try: + v = NormalizedVersion(version) + i = version.find('-') + if i < 0: + updated = '%s+1' % version + else: + parts = [int(s) for s in version[i + 1:].split('.')] + parts[-1] += 1 + updated = '%s+%s' % (version[:i], + '.'.join(str(i) for i in parts)) + except UnsupportedVersionError: + logger.debug('Cannot update non-compliant (PEP-440) ' + 'version %r', version) + if updated: + md = Metadata(path=path) + md.version = updated + legacy = not path.endswith(METADATA_FILENAME) + md.write(path=path, legacy=legacy) + logger.debug('Version updated from %r to %r', version, + updated) + + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + record_name = posixpath.join(info_dir, 'RECORD') + with tempdir() as workdir: + with ZipFile(pathname, 'r') as zf: + path_map = {} + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + if u_arcname == record_name: + continue + if '..' in u_arcname: + raise DistlibException('invalid entry in ' + 'wheel: %r' % u_arcname) + zf.extract(zinfo, workdir) + path = os.path.join(workdir, convert_path(u_arcname)) + path_map[u_arcname] = path + + # Remember the version. + original_version, _ = get_version(path_map, info_dir) + # Files extracted. Call the modifier. + modified = modifier(path_map, **kwargs) + if modified: + # Something changed - need to build a new wheel. + current_version, path = get_version(path_map, info_dir) + if current_version and (current_version == original_version): + # Add or update local version to signify changes. + update_version(current_version, path) + # Decide where the new wheel goes. + if dest_dir is None: + fd, newpath = tempfile.mkstemp(suffix='.whl', + prefix='wheel-update-', + dir=workdir) + os.close(fd) + else: + if not os.path.isdir(dest_dir): + raise DistlibException('Not a directory: %r' % dest_dir) + newpath = os.path.join(dest_dir, self.filename) + archive_paths = list(path_map.items()) + distinfo = os.path.join(workdir, info_dir) + info = distinfo, info_dir + self.write_records(info, workdir, archive_paths) + self.build_zip(newpath, archive_paths) + if dest_dir is None: + shutil.copyfile(newpath, pathname) + return modified + +def compatible_tags(): + """ + Return (pyver, abi, arch) tuples compatible with this Python. + """ + versions = [VER_SUFFIX] + major = VER_SUFFIX[0] + for minor in range(sys.version_info[1] - 1, - 1, -1): + versions.append(''.join([major, str(minor)])) + + abis = [] + for suffix, _, _ in imp.get_suffixes(): + if suffix.startswith('.abi'): + abis.append(suffix.split('.', 2)[1]) + abis.sort() + if ABI != 'none': + abis.insert(0, ABI) + abis.append('none') + result = [] + + arches = [ARCH] + if sys.platform == 'darwin': + m = re.match(r'(\w+)_(\d+)_(\d+)_(\w+)$', ARCH) + if m: + name, major, minor, arch = m.groups() + minor = int(minor) + matches = [arch] + if arch in ('i386', 'ppc'): + matches.append('fat') + if arch in ('i386', 'ppc', 'x86_64'): + matches.append('fat3') + if arch in ('ppc64', 'x86_64'): + matches.append('fat64') + if arch in ('i386', 'x86_64'): + matches.append('intel') + if arch in ('i386', 'x86_64', 'intel', 'ppc', 'ppc64'): + matches.append('universal') + while minor >= 0: + for match in matches: + s = '%s_%s_%s_%s' % (name, major, minor, match) + if s != ARCH: # already there + arches.append(s) + minor -= 1 + + # Most specific - our Python version, ABI and arch + for abi in abis: + for arch in arches: + result.append((''.join((IMP_PREFIX, versions[0])), abi, arch)) + + # where no ABI / arch dependency, but IMP_PREFIX dependency + for i, version in enumerate(versions): + result.append((''.join((IMP_PREFIX, version)), 'none', 'any')) + if i == 0: + result.append((''.join((IMP_PREFIX, version[0])), 'none', 'any')) + + # no IMP_PREFIX, ABI or arch dependency + for i, version in enumerate(versions): + result.append((''.join(('py', version)), 'none', 'any')) + if i == 0: + result.append((''.join(('py', version[0])), 'none', 'any')) + return set(result) + + +COMPATIBLE_TAGS = compatible_tags() + +del compatible_tags + + +def is_compatible(wheel, tags=None): + if not isinstance(wheel, Wheel): + wheel = Wheel(wheel) # assume it's a filename + result = False + if tags is None: + tags = COMPATIBLE_TAGS + for ver, abi, arch in tags: + if ver in wheel.pyver and abi in wheel.abi and arch in wheel.arch: + result = True + break + return result diff --git a/my_env/Lib/site-packages/pip/_vendor/distro.py b/my_env/Lib/site-packages/pip/_vendor/distro.py new file mode 100644 index 000000000..33061633e --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/distro.py @@ -0,0 +1,1216 @@ +# Copyright 2015,2016,2017 Nir Cohen +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +The ``distro`` package (``distro`` stands for Linux Distribution) provides +information about the Linux distribution it runs on, such as a reliable +machine-readable distro ID, or version information. + +It is the recommended replacement for Python's original +:py:func:`platform.linux_distribution` function, but it provides much more +functionality. An alternative implementation became necessary because Python +3.5 deprecated this function, and Python 3.8 will remove it altogether. +Its predecessor function :py:func:`platform.dist` was already +deprecated since Python 2.6 and will also be removed in Python 3.8. +Still, there are many cases in which access to OS distribution information +is needed. See `Python issue 1322 `_ for +more information. +""" + +import os +import re +import sys +import json +import shlex +import logging +import argparse +import subprocess + + +_UNIXCONFDIR = os.environ.get('UNIXCONFDIR', '/etc') +_OS_RELEASE_BASENAME = 'os-release' + +#: Translation table for normalizing the "ID" attribute defined in os-release +#: files, for use by the :func:`distro.id` method. +#: +#: * Key: Value as defined in the os-release file, translated to lower case, +#: with blanks translated to underscores. +#: +#: * Value: Normalized value. +NORMALIZED_OS_ID = { + 'ol': 'oracle', # Oracle Enterprise Linux +} + +#: Translation table for normalizing the "Distributor ID" attribute returned by +#: the lsb_release command, for use by the :func:`distro.id` method. +#: +#: * Key: Value as returned by the lsb_release command, translated to lower +#: case, with blanks translated to underscores. +#: +#: * Value: Normalized value. +NORMALIZED_LSB_ID = { + 'enterpriseenterprise': 'oracle', # Oracle Enterprise Linux + 'redhatenterpriseworkstation': 'rhel', # RHEL 6, 7 Workstation + 'redhatenterpriseserver': 'rhel', # RHEL 6, 7 Server +} + +#: Translation table for normalizing the distro ID derived from the file name +#: of distro release files, for use by the :func:`distro.id` method. +#: +#: * Key: Value as derived from the file name of a distro release file, +#: translated to lower case, with blanks translated to underscores. +#: +#: * Value: Normalized value. +NORMALIZED_DISTRO_ID = { + 'redhat': 'rhel', # RHEL 6.x, 7.x +} + +# Pattern for content of distro release file (reversed) +_DISTRO_RELEASE_CONTENT_REVERSED_PATTERN = re.compile( + r'(?:[^)]*\)(.*)\()? *(?:STL )?([\d.+\-a-z]*\d) *(?:esaeler *)?(.+)') + +# Pattern for base file name of distro release file +_DISTRO_RELEASE_BASENAME_PATTERN = re.compile( + r'(\w+)[-_](release|version)$') + +# Base file names to be ignored when searching for distro release file +_DISTRO_RELEASE_IGNORE_BASENAMES = ( + 'debian_version', + 'lsb-release', + 'oem-release', + _OS_RELEASE_BASENAME, + 'system-release' +) + + +def linux_distribution(full_distribution_name=True): + """ + Return information about the current OS distribution as a tuple + ``(id_name, version, codename)`` with items as follows: + + * ``id_name``: If *full_distribution_name* is false, the result of + :func:`distro.id`. Otherwise, the result of :func:`distro.name`. + + * ``version``: The result of :func:`distro.version`. + + * ``codename``: The result of :func:`distro.codename`. + + The interface of this function is compatible with the original + :py:func:`platform.linux_distribution` function, supporting a subset of + its parameters. + + The data it returns may not exactly be the same, because it uses more data + sources than the original function, and that may lead to different data if + the OS distribution is not consistent across multiple data sources it + provides (there are indeed such distributions ...). + + Another reason for differences is the fact that the :func:`distro.id` + method normalizes the distro ID string to a reliable machine-readable value + for a number of popular OS distributions. + """ + return _distro.linux_distribution(full_distribution_name) + + +def id(): + """ + Return the distro ID of the current distribution, as a + machine-readable string. + + For a number of OS distributions, the returned distro ID value is + *reliable*, in the sense that it is documented and that it does not change + across releases of the distribution. + + This package maintains the following reliable distro ID values: + + ============== ========================================= + Distro ID Distribution + ============== ========================================= + "ubuntu" Ubuntu + "debian" Debian + "rhel" RedHat Enterprise Linux + "centos" CentOS + "fedora" Fedora + "sles" SUSE Linux Enterprise Server + "opensuse" openSUSE + "amazon" Amazon Linux + "arch" Arch Linux + "cloudlinux" CloudLinux OS + "exherbo" Exherbo Linux + "gentoo" GenToo Linux + "ibm_powerkvm" IBM PowerKVM + "kvmibm" KVM for IBM z Systems + "linuxmint" Linux Mint + "mageia" Mageia + "mandriva" Mandriva Linux + "parallels" Parallels + "pidora" Pidora + "raspbian" Raspbian + "oracle" Oracle Linux (and Oracle Enterprise Linux) + "scientific" Scientific Linux + "slackware" Slackware + "xenserver" XenServer + "openbsd" OpenBSD + "netbsd" NetBSD + "freebsd" FreeBSD + ============== ========================================= + + If you have a need to get distros for reliable IDs added into this set, + or if you find that the :func:`distro.id` function returns a different + distro ID for one of the listed distros, please create an issue in the + `distro issue tracker`_. + + **Lookup hierarchy and transformations:** + + First, the ID is obtained from the following sources, in the specified + order. The first available and non-empty value is used: + + * the value of the "ID" attribute of the os-release file, + + * the value of the "Distributor ID" attribute returned by the lsb_release + command, + + * the first part of the file name of the distro release file, + + The so determined ID value then passes the following transformations, + before it is returned by this method: + + * it is translated to lower case, + + * blanks (which should not be there anyway) are translated to underscores, + + * a normalization of the ID is performed, based upon + `normalization tables`_. The purpose of this normalization is to ensure + that the ID is as reliable as possible, even across incompatible changes + in the OS distributions. A common reason for an incompatible change is + the addition of an os-release file, or the addition of the lsb_release + command, with ID values that differ from what was previously determined + from the distro release file name. + """ + return _distro.id() + + +def name(pretty=False): + """ + Return the name of the current OS distribution, as a human-readable + string. + + If *pretty* is false, the name is returned without version or codename. + (e.g. "CentOS Linux") + + If *pretty* is true, the version and codename are appended. + (e.g. "CentOS Linux 7.1.1503 (Core)") + + **Lookup hierarchy:** + + The name is obtained from the following sources, in the specified order. + The first available and non-empty value is used: + + * If *pretty* is false: + + - the value of the "NAME" attribute of the os-release file, + + - the value of the "Distributor ID" attribute returned by the lsb_release + command, + + - the value of the "" field of the distro release file. + + * If *pretty* is true: + + - the value of the "PRETTY_NAME" attribute of the os-release file, + + - the value of the "Description" attribute returned by the lsb_release + command, + + - the value of the "" field of the distro release file, appended + with the value of the pretty version ("" and "" + fields) of the distro release file, if available. + """ + return _distro.name(pretty) + + +def version(pretty=False, best=False): + """ + Return the version of the current OS distribution, as a human-readable + string. + + If *pretty* is false, the version is returned without codename (e.g. + "7.0"). + + If *pretty* is true, the codename in parenthesis is appended, if the + codename is non-empty (e.g. "7.0 (Maipo)"). + + Some distributions provide version numbers with different precisions in + the different sources of distribution information. Examining the different + sources in a fixed priority order does not always yield the most precise + version (e.g. for Debian 8.2, or CentOS 7.1). + + The *best* parameter can be used to control the approach for the returned + version: + + If *best* is false, the first non-empty version number in priority order of + the examined sources is returned. + + If *best* is true, the most precise version number out of all examined + sources is returned. + + **Lookup hierarchy:** + + In all cases, the version number is obtained from the following sources. + If *best* is false, this order represents the priority order: + + * the value of the "VERSION_ID" attribute of the os-release file, + * the value of the "Release" attribute returned by the lsb_release + command, + * the version number parsed from the "" field of the first line + of the distro release file, + * the version number parsed from the "PRETTY_NAME" attribute of the + os-release file, if it follows the format of the distro release files. + * the version number parsed from the "Description" attribute returned by + the lsb_release command, if it follows the format of the distro release + files. + """ + return _distro.version(pretty, best) + + +def version_parts(best=False): + """ + Return the version of the current OS distribution as a tuple + ``(major, minor, build_number)`` with items as follows: + + * ``major``: The result of :func:`distro.major_version`. + + * ``minor``: The result of :func:`distro.minor_version`. + + * ``build_number``: The result of :func:`distro.build_number`. + + For a description of the *best* parameter, see the :func:`distro.version` + method. + """ + return _distro.version_parts(best) + + +def major_version(best=False): + """ + Return the major version of the current OS distribution, as a string, + if provided. + Otherwise, the empty string is returned. The major version is the first + part of the dot-separated version string. + + For a description of the *best* parameter, see the :func:`distro.version` + method. + """ + return _distro.major_version(best) + + +def minor_version(best=False): + """ + Return the minor version of the current OS distribution, as a string, + if provided. + Otherwise, the empty string is returned. The minor version is the second + part of the dot-separated version string. + + For a description of the *best* parameter, see the :func:`distro.version` + method. + """ + return _distro.minor_version(best) + + +def build_number(best=False): + """ + Return the build number of the current OS distribution, as a string, + if provided. + Otherwise, the empty string is returned. The build number is the third part + of the dot-separated version string. + + For a description of the *best* parameter, see the :func:`distro.version` + method. + """ + return _distro.build_number(best) + + +def like(): + """ + Return a space-separated list of distro IDs of distributions that are + closely related to the current OS distribution in regards to packaging + and programming interfaces, for example distributions the current + distribution is a derivative from. + + **Lookup hierarchy:** + + This information item is only provided by the os-release file. + For details, see the description of the "ID_LIKE" attribute in the + `os-release man page + `_. + """ + return _distro.like() + + +def codename(): + """ + Return the codename for the release of the current OS distribution, + as a string. + + If the distribution does not have a codename, an empty string is returned. + + Note that the returned codename is not always really a codename. For + example, openSUSE returns "x86_64". This function does not handle such + cases in any special way and just returns the string it finds, if any. + + **Lookup hierarchy:** + + * the codename within the "VERSION" attribute of the os-release file, if + provided, + + * the value of the "Codename" attribute returned by the lsb_release + command, + + * the value of the "" field of the distro release file. + """ + return _distro.codename() + + +def info(pretty=False, best=False): + """ + Return certain machine-readable information items about the current OS + distribution in a dictionary, as shown in the following example: + + .. sourcecode:: python + + { + 'id': 'rhel', + 'version': '7.0', + 'version_parts': { + 'major': '7', + 'minor': '0', + 'build_number': '' + }, + 'like': 'fedora', + 'codename': 'Maipo' + } + + The dictionary structure and keys are always the same, regardless of which + information items are available in the underlying data sources. The values + for the various keys are as follows: + + * ``id``: The result of :func:`distro.id`. + + * ``version``: The result of :func:`distro.version`. + + * ``version_parts -> major``: The result of :func:`distro.major_version`. + + * ``version_parts -> minor``: The result of :func:`distro.minor_version`. + + * ``version_parts -> build_number``: The result of + :func:`distro.build_number`. + + * ``like``: The result of :func:`distro.like`. + + * ``codename``: The result of :func:`distro.codename`. + + For a description of the *pretty* and *best* parameters, see the + :func:`distro.version` method. + """ + return _distro.info(pretty, best) + + +def os_release_info(): + """ + Return a dictionary containing key-value pairs for the information items + from the os-release file data source of the current OS distribution. + + See `os-release file`_ for details about these information items. + """ + return _distro.os_release_info() + + +def lsb_release_info(): + """ + Return a dictionary containing key-value pairs for the information items + from the lsb_release command data source of the current OS distribution. + + See `lsb_release command output`_ for details about these information + items. + """ + return _distro.lsb_release_info() + + +def distro_release_info(): + """ + Return a dictionary containing key-value pairs for the information items + from the distro release file data source of the current OS distribution. + + See `distro release file`_ for details about these information items. + """ + return _distro.distro_release_info() + + +def uname_info(): + """ + Return a dictionary containing key-value pairs for the information items + from the distro release file data source of the current OS distribution. + """ + return _distro.uname_info() + + +def os_release_attr(attribute): + """ + Return a single named information item from the os-release file data source + of the current OS distribution. + + Parameters: + + * ``attribute`` (string): Key of the information item. + + Returns: + + * (string): Value of the information item, if the item exists. + The empty string, if the item does not exist. + + See `os-release file`_ for details about these information items. + """ + return _distro.os_release_attr(attribute) + + +def lsb_release_attr(attribute): + """ + Return a single named information item from the lsb_release command output + data source of the current OS distribution. + + Parameters: + + * ``attribute`` (string): Key of the information item. + + Returns: + + * (string): Value of the information item, if the item exists. + The empty string, if the item does not exist. + + See `lsb_release command output`_ for details about these information + items. + """ + return _distro.lsb_release_attr(attribute) + + +def distro_release_attr(attribute): + """ + Return a single named information item from the distro release file + data source of the current OS distribution. + + Parameters: + + * ``attribute`` (string): Key of the information item. + + Returns: + + * (string): Value of the information item, if the item exists. + The empty string, if the item does not exist. + + See `distro release file`_ for details about these information items. + """ + return _distro.distro_release_attr(attribute) + + +def uname_attr(attribute): + """ + Return a single named information item from the distro release file + data source of the current OS distribution. + + Parameters: + + * ``attribute`` (string): Key of the information item. + + Returns: + + * (string): Value of the information item, if the item exists. + The empty string, if the item does not exist. + """ + return _distro.uname_attr(attribute) + + +class cached_property(object): + """A version of @property which caches the value. On access, it calls the + underlying function and sets the value in `__dict__` so future accesses + will not re-call the property. + """ + def __init__(self, f): + self._fname = f.__name__ + self._f = f + + def __get__(self, obj, owner): + assert obj is not None, 'call {} on an instance'.format(self._fname) + ret = obj.__dict__[self._fname] = self._f(obj) + return ret + + +class LinuxDistribution(object): + """ + Provides information about a OS distribution. + + This package creates a private module-global instance of this class with + default initialization arguments, that is used by the + `consolidated accessor functions`_ and `single source accessor functions`_. + By using default initialization arguments, that module-global instance + returns data about the current OS distribution (i.e. the distro this + package runs on). + + Normally, it is not necessary to create additional instances of this class. + However, in situations where control is needed over the exact data sources + that are used, instances of this class can be created with a specific + distro release file, or a specific os-release file, or without invoking the + lsb_release command. + """ + + def __init__(self, + include_lsb=True, + os_release_file='', + distro_release_file='', + include_uname=True): + """ + The initialization method of this class gathers information from the + available data sources, and stores that in private instance attributes. + Subsequent access to the information items uses these private instance + attributes, so that the data sources are read only once. + + Parameters: + + * ``include_lsb`` (bool): Controls whether the + `lsb_release command output`_ is included as a data source. + + If the lsb_release command is not available in the program execution + path, the data source for the lsb_release command will be empty. + + * ``os_release_file`` (string): The path name of the + `os-release file`_ that is to be used as a data source. + + An empty string (the default) will cause the default path name to + be used (see `os-release file`_ for details). + + If the specified or defaulted os-release file does not exist, the + data source for the os-release file will be empty. + + * ``distro_release_file`` (string): The path name of the + `distro release file`_ that is to be used as a data source. + + An empty string (the default) will cause a default search algorithm + to be used (see `distro release file`_ for details). + + If the specified distro release file does not exist, or if no default + distro release file can be found, the data source for the distro + release file will be empty. + + * ``include_name`` (bool): Controls whether uname command output is + included as a data source. If the uname command is not available in + the program execution path the data source for the uname command will + be empty. + + Public instance attributes: + + * ``os_release_file`` (string): The path name of the + `os-release file`_ that is actually used as a data source. The + empty string if no distro release file is used as a data source. + + * ``distro_release_file`` (string): The path name of the + `distro release file`_ that is actually used as a data source. The + empty string if no distro release file is used as a data source. + + * ``include_lsb`` (bool): The result of the ``include_lsb`` parameter. + This controls whether the lsb information will be loaded. + + * ``include_uname`` (bool): The result of the ``include_uname`` + parameter. This controls whether the uname information will + be loaded. + + Raises: + + * :py:exc:`IOError`: Some I/O issue with an os-release file or distro + release file. + + * :py:exc:`subprocess.CalledProcessError`: The lsb_release command had + some issue (other than not being available in the program execution + path). + + * :py:exc:`UnicodeError`: A data source has unexpected characters or + uses an unexpected encoding. + """ + self.os_release_file = os_release_file or \ + os.path.join(_UNIXCONFDIR, _OS_RELEASE_BASENAME) + self.distro_release_file = distro_release_file or '' # updated later + self.include_lsb = include_lsb + self.include_uname = include_uname + + def __repr__(self): + """Return repr of all info + """ + return \ + "LinuxDistribution(" \ + "os_release_file={self.os_release_file!r}, " \ + "distro_release_file={self.distro_release_file!r}, " \ + "include_lsb={self.include_lsb!r}, " \ + "include_uname={self.include_uname!r}, " \ + "_os_release_info={self._os_release_info!r}, " \ + "_lsb_release_info={self._lsb_release_info!r}, " \ + "_distro_release_info={self._distro_release_info!r}, " \ + "_uname_info={self._uname_info!r})".format( + self=self) + + def linux_distribution(self, full_distribution_name=True): + """ + Return information about the OS distribution that is compatible + with Python's :func:`platform.linux_distribution`, supporting a subset + of its parameters. + + For details, see :func:`distro.linux_distribution`. + """ + return ( + self.name() if full_distribution_name else self.id(), + self.version(), + self.codename() + ) + + def id(self): + """Return the distro ID of the OS distribution, as a string. + + For details, see :func:`distro.id`. + """ + def normalize(distro_id, table): + distro_id = distro_id.lower().replace(' ', '_') + return table.get(distro_id, distro_id) + + distro_id = self.os_release_attr('id') + if distro_id: + return normalize(distro_id, NORMALIZED_OS_ID) + + distro_id = self.lsb_release_attr('distributor_id') + if distro_id: + return normalize(distro_id, NORMALIZED_LSB_ID) + + distro_id = self.distro_release_attr('id') + if distro_id: + return normalize(distro_id, NORMALIZED_DISTRO_ID) + + distro_id = self.uname_attr('id') + if distro_id: + return normalize(distro_id, NORMALIZED_DISTRO_ID) + + return '' + + def name(self, pretty=False): + """ + Return the name of the OS distribution, as a string. + + For details, see :func:`distro.name`. + """ + name = self.os_release_attr('name') \ + or self.lsb_release_attr('distributor_id') \ + or self.distro_release_attr('name') \ + or self.uname_attr('name') + if pretty: + name = self.os_release_attr('pretty_name') \ + or self.lsb_release_attr('description') + if not name: + name = self.distro_release_attr('name') \ + or self.uname_attr('name') + version = self.version(pretty=True) + if version: + name = name + ' ' + version + return name or '' + + def version(self, pretty=False, best=False): + """ + Return the version of the OS distribution, as a string. + + For details, see :func:`distro.version`. + """ + versions = [ + self.os_release_attr('version_id'), + self.lsb_release_attr('release'), + self.distro_release_attr('version_id'), + self._parse_distro_release_content( + self.os_release_attr('pretty_name')).get('version_id', ''), + self._parse_distro_release_content( + self.lsb_release_attr('description')).get('version_id', ''), + self.uname_attr('release') + ] + version = '' + if best: + # This algorithm uses the last version in priority order that has + # the best precision. If the versions are not in conflict, that + # does not matter; otherwise, using the last one instead of the + # first one might be considered a surprise. + for v in versions: + if v.count(".") > version.count(".") or version == '': + version = v + else: + for v in versions: + if v != '': + version = v + break + if pretty and version and self.codename(): + version = u'{0} ({1})'.format(version, self.codename()) + return version + + def version_parts(self, best=False): + """ + Return the version of the OS distribution, as a tuple of version + numbers. + + For details, see :func:`distro.version_parts`. + """ + version_str = self.version(best=best) + if version_str: + version_regex = re.compile(r'(\d+)\.?(\d+)?\.?(\d+)?') + matches = version_regex.match(version_str) + if matches: + major, minor, build_number = matches.groups() + return major, minor or '', build_number or '' + return '', '', '' + + def major_version(self, best=False): + """ + Return the major version number of the current distribution. + + For details, see :func:`distro.major_version`. + """ + return self.version_parts(best)[0] + + def minor_version(self, best=False): + """ + Return the minor version number of the current distribution. + + For details, see :func:`distro.minor_version`. + """ + return self.version_parts(best)[1] + + def build_number(self, best=False): + """ + Return the build number of the current distribution. + + For details, see :func:`distro.build_number`. + """ + return self.version_parts(best)[2] + + def like(self): + """ + Return the IDs of distributions that are like the OS distribution. + + For details, see :func:`distro.like`. + """ + return self.os_release_attr('id_like') or '' + + def codename(self): + """ + Return the codename of the OS distribution. + + For details, see :func:`distro.codename`. + """ + try: + # Handle os_release specially since distros might purposefully set + # this to empty string to have no codename + return self._os_release_info['codename'] + except KeyError: + return self.lsb_release_attr('codename') \ + or self.distro_release_attr('codename') \ + or '' + + def info(self, pretty=False, best=False): + """ + Return certain machine-readable information about the OS + distribution. + + For details, see :func:`distro.info`. + """ + return dict( + id=self.id(), + version=self.version(pretty, best), + version_parts=dict( + major=self.major_version(best), + minor=self.minor_version(best), + build_number=self.build_number(best) + ), + like=self.like(), + codename=self.codename(), + ) + + def os_release_info(self): + """ + Return a dictionary containing key-value pairs for the information + items from the os-release file data source of the OS distribution. + + For details, see :func:`distro.os_release_info`. + """ + return self._os_release_info + + def lsb_release_info(self): + """ + Return a dictionary containing key-value pairs for the information + items from the lsb_release command data source of the OS + distribution. + + For details, see :func:`distro.lsb_release_info`. + """ + return self._lsb_release_info + + def distro_release_info(self): + """ + Return a dictionary containing key-value pairs for the information + items from the distro release file data source of the OS + distribution. + + For details, see :func:`distro.distro_release_info`. + """ + return self._distro_release_info + + def uname_info(self): + """ + Return a dictionary containing key-value pairs for the information + items from the uname command data source of the OS distribution. + + For details, see :func:`distro.uname_info`. + """ + return self._uname_info + + def os_release_attr(self, attribute): + """ + Return a single named information item from the os-release file data + source of the OS distribution. + + For details, see :func:`distro.os_release_attr`. + """ + return self._os_release_info.get(attribute, '') + + def lsb_release_attr(self, attribute): + """ + Return a single named information item from the lsb_release command + output data source of the OS distribution. + + For details, see :func:`distro.lsb_release_attr`. + """ + return self._lsb_release_info.get(attribute, '') + + def distro_release_attr(self, attribute): + """ + Return a single named information item from the distro release file + data source of the OS distribution. + + For details, see :func:`distro.distro_release_attr`. + """ + return self._distro_release_info.get(attribute, '') + + def uname_attr(self, attribute): + """ + Return a single named information item from the uname command + output data source of the OS distribution. + + For details, see :func:`distro.uname_release_attr`. + """ + return self._uname_info.get(attribute, '') + + @cached_property + def _os_release_info(self): + """ + Get the information items from the specified os-release file. + + Returns: + A dictionary containing all information items. + """ + if os.path.isfile(self.os_release_file): + with open(self.os_release_file) as release_file: + return self._parse_os_release_content(release_file) + return {} + + @staticmethod + def _parse_os_release_content(lines): + """ + Parse the lines of an os-release file. + + Parameters: + + * lines: Iterable through the lines in the os-release file. + Each line must be a unicode string or a UTF-8 encoded byte + string. + + Returns: + A dictionary containing all information items. + """ + props = {} + lexer = shlex.shlex(lines, posix=True) + lexer.whitespace_split = True + + # The shlex module defines its `wordchars` variable using literals, + # making it dependent on the encoding of the Python source file. + # In Python 2.6 and 2.7, the shlex source file is encoded in + # 'iso-8859-1', and the `wordchars` variable is defined as a byte + # string. This causes a UnicodeDecodeError to be raised when the + # parsed content is a unicode object. The following fix resolves that + # (... but it should be fixed in shlex...): + if sys.version_info[0] == 2 and isinstance(lexer.wordchars, bytes): + lexer.wordchars = lexer.wordchars.decode('iso-8859-1') + + tokens = list(lexer) + for token in tokens: + # At this point, all shell-like parsing has been done (i.e. + # comments processed, quotes and backslash escape sequences + # processed, multi-line values assembled, trailing newlines + # stripped, etc.), so the tokens are now either: + # * variable assignments: var=value + # * commands or their arguments (not allowed in os-release) + if '=' in token: + k, v = token.split('=', 1) + if isinstance(v, bytes): + v = v.decode('utf-8') + props[k.lower()] = v + else: + # Ignore any tokens that are not variable assignments + pass + + if 'version_codename' in props: + # os-release added a version_codename field. Use that in + # preference to anything else Note that some distros purposefully + # do not have code names. They should be setting + # version_codename="" + props['codename'] = props['version_codename'] + elif 'ubuntu_codename' in props: + # Same as above but a non-standard field name used on older Ubuntus + props['codename'] = props['ubuntu_codename'] + elif 'version' in props: + # If there is no version_codename, parse it from the version + codename = re.search(r'(\(\D+\))|,(\s+)?\D+', props['version']) + if codename: + codename = codename.group() + codename = codename.strip('()') + codename = codename.strip(',') + codename = codename.strip() + # codename appears within paranthese. + props['codename'] = codename + + return props + + @cached_property + def _lsb_release_info(self): + """ + Get the information items from the lsb_release command output. + + Returns: + A dictionary containing all information items. + """ + if not self.include_lsb: + return {} + with open(os.devnull, 'w') as devnull: + try: + cmd = ('lsb_release', '-a') + stdout = subprocess.check_output(cmd, stderr=devnull) + except OSError: # Command not found + return {} + content = stdout.decode(sys.getfilesystemencoding()).splitlines() + return self._parse_lsb_release_content(content) + + @staticmethod + def _parse_lsb_release_content(lines): + """ + Parse the output of the lsb_release command. + + Parameters: + + * lines: Iterable through the lines of the lsb_release output. + Each line must be a unicode string or a UTF-8 encoded byte + string. + + Returns: + A dictionary containing all information items. + """ + props = {} + for line in lines: + kv = line.strip('\n').split(':', 1) + if len(kv) != 2: + # Ignore lines without colon. + continue + k, v = kv + props.update({k.replace(' ', '_').lower(): v.strip()}) + return props + + @cached_property + def _uname_info(self): + with open(os.devnull, 'w') as devnull: + try: + cmd = ('uname', '-rs') + stdout = subprocess.check_output(cmd, stderr=devnull) + except OSError: + return {} + content = stdout.decode(sys.getfilesystemencoding()).splitlines() + return self._parse_uname_content(content) + + @staticmethod + def _parse_uname_content(lines): + props = {} + match = re.search(r'^([^\s]+)\s+([\d\.]+)', lines[0].strip()) + if match: + name, version = match.groups() + + # This is to prevent the Linux kernel version from + # appearing as the 'best' version on otherwise + # identifiable distributions. + if name == 'Linux': + return {} + props['id'] = name.lower() + props['name'] = name + props['release'] = version + return props + + @cached_property + def _distro_release_info(self): + """ + Get the information items from the specified distro release file. + + Returns: + A dictionary containing all information items. + """ + if self.distro_release_file: + # If it was specified, we use it and parse what we can, even if + # its file name or content does not match the expected pattern. + distro_info = self._parse_distro_release_file( + self.distro_release_file) + basename = os.path.basename(self.distro_release_file) + # The file name pattern for user-specified distro release files + # is somewhat more tolerant (compared to when searching for the + # file), because we want to use what was specified as best as + # possible. + match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) + if 'name' in distro_info \ + and 'cloudlinux' in distro_info['name'].lower(): + distro_info['id'] = 'cloudlinux' + elif match: + distro_info['id'] = match.group(1) + return distro_info + else: + try: + basenames = os.listdir(_UNIXCONFDIR) + # We sort for repeatability in cases where there are multiple + # distro specific files; e.g. CentOS, Oracle, Enterprise all + # containing `redhat-release` on top of their own. + basenames.sort() + except OSError: + # This may occur when /etc is not readable but we can't be + # sure about the *-release files. Check common entries of + # /etc for information. If they turn out to not be there the + # error is handled in `_parse_distro_release_file()`. + basenames = ['SuSE-release', + 'arch-release', + 'base-release', + 'centos-release', + 'fedora-release', + 'gentoo-release', + 'mageia-release', + 'mandrake-release', + 'mandriva-release', + 'mandrivalinux-release', + 'manjaro-release', + 'oracle-release', + 'redhat-release', + 'sl-release', + 'slackware-version'] + for basename in basenames: + if basename in _DISTRO_RELEASE_IGNORE_BASENAMES: + continue + match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) + if match: + filepath = os.path.join(_UNIXCONFDIR, basename) + distro_info = self._parse_distro_release_file(filepath) + if 'name' in distro_info: + # The name is always present if the pattern matches + self.distro_release_file = filepath + distro_info['id'] = match.group(1) + if 'cloudlinux' in distro_info['name'].lower(): + distro_info['id'] = 'cloudlinux' + return distro_info + return {} + + def _parse_distro_release_file(self, filepath): + """ + Parse a distro release file. + + Parameters: + + * filepath: Path name of the distro release file. + + Returns: + A dictionary containing all information items. + """ + try: + with open(filepath) as fp: + # Only parse the first line. For instance, on SLES there + # are multiple lines. We don't want them... + return self._parse_distro_release_content(fp.readline()) + except (OSError, IOError): + # Ignore not being able to read a specific, seemingly version + # related file. + # See https://github.com/nir0s/distro/issues/162 + return {} + + @staticmethod + def _parse_distro_release_content(line): + """ + Parse a line from a distro release file. + + Parameters: + * line: Line from the distro release file. Must be a unicode string + or a UTF-8 encoded byte string. + + Returns: + A dictionary containing all information items. + """ + if isinstance(line, bytes): + line = line.decode('utf-8') + matches = _DISTRO_RELEASE_CONTENT_REVERSED_PATTERN.match( + line.strip()[::-1]) + distro_info = {} + if matches: + # regexp ensures non-None + distro_info['name'] = matches.group(3)[::-1] + if matches.group(2): + distro_info['version_id'] = matches.group(2)[::-1] + if matches.group(1): + distro_info['codename'] = matches.group(1)[::-1] + elif line: + distro_info['name'] = line.strip() + return distro_info + + +_distro = LinuxDistribution() + + +def main(): + logger = logging.getLogger(__name__) + logger.setLevel(logging.DEBUG) + logger.addHandler(logging.StreamHandler(sys.stdout)) + + parser = argparse.ArgumentParser(description="OS distro info tool") + parser.add_argument( + '--json', + '-j', + help="Output in machine readable format", + action="store_true") + args = parser.parse_args() + + if args.json: + logger.info(json.dumps(info(), indent=4, sort_keys=True)) + else: + logger.info('Name: %s', name(pretty=True)) + distribution_version = version(pretty=True) + logger.info('Version: %s', distribution_version) + distribution_codename = codename() + logger.info('Codename: %s', distribution_codename) + + +if __name__ == '__main__': + main() diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/__init__.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/__init__.py new file mode 100644 index 000000000..049123492 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/__init__.py @@ -0,0 +1,35 @@ +""" +HTML parsing library based on the `WHATWG HTML specification +`_. The parser is designed to be compatible with +existing HTML found in the wild and implements well-defined error recovery that +is largely compatible with modern desktop web browsers. + +Example usage:: + + from pip._vendor import html5lib + with open("my_document.html", "rb") as f: + tree = html5lib.parse(f) + +For convenience, this module re-exports the following names: + +* :func:`~.html5parser.parse` +* :func:`~.html5parser.parseFragment` +* :class:`~.html5parser.HTMLParser` +* :func:`~.treebuilders.getTreeBuilder` +* :func:`~.treewalkers.getTreeWalker` +* :func:`~.serializer.serialize` +""" + +from __future__ import absolute_import, division, unicode_literals + +from .html5parser import HTMLParser, parse, parseFragment +from .treebuilders import getTreeBuilder +from .treewalkers import getTreeWalker +from .serializer import serialize + +__all__ = ["HTMLParser", "parse", "parseFragment", "getTreeBuilder", + "getTreeWalker", "serialize"] + +# this has to be at the top level, see how setup.py parses this +#: Distribution version number. +__version__ = "1.0.1" diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..fc3bcba2c Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-37.pyc new file mode 100644 index 000000000..6d51b70cc Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-37.pyc new file mode 100644 index 000000000..05de50512 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-37.pyc new file mode 100644 index 000000000..33c7895c8 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_utils.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_utils.cpython-37.pyc new file mode 100644 index 000000000..1ccd8992e Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/_utils.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/constants.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/constants.cpython-37.pyc new file mode 100644 index 000000000..0f88ba087 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/constants.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/html5parser.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/html5parser.cpython-37.pyc new file mode 100644 index 000000000..cf7f76d4a Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/html5parser.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/serializer.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/serializer.cpython-37.pyc new file mode 100644 index 000000000..9dbf19962 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/__pycache__/serializer.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py new file mode 100644 index 000000000..4c77717bb --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py @@ -0,0 +1,288 @@ +from __future__ import absolute_import, division, unicode_literals + +import re +import warnings + +from .constants import DataLossWarning + +baseChar = """ +[#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | +[#x00F8-#x00FF] | [#x0100-#x0131] | [#x0134-#x013E] | [#x0141-#x0148] | +[#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0] | [#x01F4-#x01F5] | +[#x01FA-#x0217] | [#x0250-#x02A8] | [#x02BB-#x02C1] | #x0386 | +[#x0388-#x038A] | #x038C | [#x038E-#x03A1] | [#x03A3-#x03CE] | +[#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 | [#x03E2-#x03F3] | +[#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481] | +[#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB] | +[#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559 | +[#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] | [#x0621-#x063A] | +[#x0641-#x064A] | [#x0671-#x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE] | +[#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] | [#x0905-#x0939] | #x093D | +[#x0958-#x0961] | [#x0985-#x098C] | [#x098F-#x0990] | [#x0993-#x09A8] | +[#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] | [#x09DC-#x09DD] | +[#x09DF-#x09E1] | [#x09F0-#x09F1] | [#x0A05-#x0A0A] | [#x0A0F-#x0A10] | +[#x0A13-#x0A28] | [#x0A2A-#x0A30] | [#x0A32-#x0A33] | [#x0A35-#x0A36] | +[#x0A38-#x0A39] | [#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74] | +[#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8] | +[#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD | #x0AE0 | +[#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] | [#x0B2A-#x0B30] | +[#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D | [#x0B5C-#x0B5D] | +[#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90] | [#x0B92-#x0B95] | +[#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F] | [#x0BA3-#x0BA4] | +[#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] | [#x0C05-#x0C0C] | +[#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] | [#x0C35-#x0C39] | +[#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90] | [#x0C92-#x0CA8] | +[#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE | [#x0CE0-#x0CE1] | +[#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28] | [#x0D2A-#x0D39] | +[#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 | [#x0E32-#x0E33] | +[#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 | [#x0E87-#x0E88] | #x0E8A | +#x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] | [#x0EA1-#x0EA3] | #x0EA5 | +#x0EA7 | [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] | #x0EB0 | [#x0EB2-#x0EB3] | +#x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] | [#x0F49-#x0F69] | +[#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | [#x1102-#x1103] | +[#x1105-#x1107] | #x1109 | [#x110B-#x110C] | [#x110E-#x1112] | #x113C | +#x113E | #x1140 | #x114C | #x114E | #x1150 | [#x1154-#x1155] | #x1159 | +[#x115F-#x1161] | #x1163 | #x1165 | #x1167 | #x1169 | [#x116D-#x116E] | +[#x1172-#x1173] | #x1175 | #x119E | #x11A8 | #x11AB | [#x11AE-#x11AF] | +[#x11B7-#x11B8] | #x11BA | [#x11BC-#x11C2] | #x11EB | #x11F0 | #x11F9 | +[#x1E00-#x1E9B] | [#x1EA0-#x1EF9] | [#x1F00-#x1F15] | [#x1F18-#x1F1D] | +[#x1F20-#x1F45] | [#x1F48-#x1F4D] | [#x1F50-#x1F57] | #x1F59 | #x1F5B | +#x1F5D | [#x1F5F-#x1F7D] | [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | +[#x1FC2-#x1FC4] | [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] | +[#x1FE0-#x1FEC] | [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 | +[#x212A-#x212B] | #x212E | [#x2180-#x2182] | [#x3041-#x3094] | +[#x30A1-#x30FA] | [#x3105-#x312C] | [#xAC00-#xD7A3]""" + +ideographic = """[#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]""" + +combiningCharacter = """ +[#x0300-#x0345] | [#x0360-#x0361] | [#x0483-#x0486] | [#x0591-#x05A1] | +[#x05A3-#x05B9] | [#x05BB-#x05BD] | #x05BF | [#x05C1-#x05C2] | #x05C4 | +[#x064B-#x0652] | #x0670 | [#x06D6-#x06DC] | [#x06DD-#x06DF] | +[#x06E0-#x06E4] | [#x06E7-#x06E8] | [#x06EA-#x06ED] | [#x0901-#x0903] | +#x093C | [#x093E-#x094C] | #x094D | [#x0951-#x0954] | [#x0962-#x0963] | +[#x0981-#x0983] | #x09BC | #x09BE | #x09BF | [#x09C0-#x09C4] | +[#x09C7-#x09C8] | [#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | #x0A02 | +#x0A3C | #x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48] | +[#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC | +[#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] | [#x0B01-#x0B03] | +#x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] | [#x0B4B-#x0B4D] | +[#x0B56-#x0B57] | [#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8] | +[#x0BCA-#x0BCD] | #x0BD7 | [#x0C01-#x0C03] | [#x0C3E-#x0C44] | +[#x0C46-#x0C48] | [#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83] | +[#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] | [#x0CD5-#x0CD6] | +[#x0D02-#x0D03] | [#x0D3E-#x0D43] | [#x0D46-#x0D48] | [#x0D4A-#x0D4D] | +#x0D57 | #x0E31 | [#x0E34-#x0E3A] | [#x0E47-#x0E4E] | #x0EB1 | +[#x0EB4-#x0EB9] | [#x0EBB-#x0EBC] | [#x0EC8-#x0ECD] | [#x0F18-#x0F19] | +#x0F35 | #x0F37 | #x0F39 | #x0F3E | #x0F3F | [#x0F71-#x0F84] | +[#x0F86-#x0F8B] | [#x0F90-#x0F95] | #x0F97 | [#x0F99-#x0FAD] | +[#x0FB1-#x0FB7] | #x0FB9 | [#x20D0-#x20DC] | #x20E1 | [#x302A-#x302F] | +#x3099 | #x309A""" + +digit = """ +[#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] | [#x0966-#x096F] | +[#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF] | [#x0B66-#x0B6F] | +[#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | [#x0D66-#x0D6F] | +[#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29]""" + +extender = """ +#x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | #x3005 | +#[#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE]""" + +letter = " | ".join([baseChar, ideographic]) + +# Without the +name = " | ".join([letter, digit, ".", "-", "_", combiningCharacter, + extender]) +nameFirst = " | ".join([letter, "_"]) + +reChar = re.compile(r"#x([\d|A-F]{4,4})") +reCharRange = re.compile(r"\[#x([\d|A-F]{4,4})-#x([\d|A-F]{4,4})\]") + + +def charStringToList(chars): + charRanges = [item.strip() for item in chars.split(" | ")] + rv = [] + for item in charRanges: + foundMatch = False + for regexp in (reChar, reCharRange): + match = regexp.match(item) + if match is not None: + rv.append([hexToInt(item) for item in match.groups()]) + if len(rv[-1]) == 1: + rv[-1] = rv[-1] * 2 + foundMatch = True + break + if not foundMatch: + assert len(item) == 1 + + rv.append([ord(item)] * 2) + rv = normaliseCharList(rv) + return rv + + +def normaliseCharList(charList): + charList = sorted(charList) + for item in charList: + assert item[1] >= item[0] + rv = [] + i = 0 + while i < len(charList): + j = 1 + rv.append(charList[i]) + while i + j < len(charList) and charList[i + j][0] <= rv[-1][1] + 1: + rv[-1][1] = charList[i + j][1] + j += 1 + i += j + return rv + +# We don't really support characters above the BMP :( +max_unicode = int("FFFF", 16) + + +def missingRanges(charList): + rv = [] + if charList[0] != 0: + rv.append([0, charList[0][0] - 1]) + for i, item in enumerate(charList[:-1]): + rv.append([item[1] + 1, charList[i + 1][0] - 1]) + if charList[-1][1] != max_unicode: + rv.append([charList[-1][1] + 1, max_unicode]) + return rv + + +def listToRegexpStr(charList): + rv = [] + for item in charList: + if item[0] == item[1]: + rv.append(escapeRegexp(chr(item[0]))) + else: + rv.append(escapeRegexp(chr(item[0])) + "-" + + escapeRegexp(chr(item[1]))) + return "[%s]" % "".join(rv) + + +def hexToInt(hex_str): + return int(hex_str, 16) + + +def escapeRegexp(string): + specialCharacters = (".", "^", "$", "*", "+", "?", "{", "}", + "[", "]", "|", "(", ")", "-") + for char in specialCharacters: + string = string.replace(char, "\\" + char) + + return string + +# output from the above +nonXmlNameBMPRegexp = re.compile('[\x00-,/:-@\\[-\\^`\\{-\xb6\xb8-\xbf\xd7\xf7\u0132-\u0133\u013f-\u0140\u0149\u017f\u01c4-\u01cc\u01f1-\u01f3\u01f6-\u01f9\u0218-\u024f\u02a9-\u02ba\u02c2-\u02cf\u02d2-\u02ff\u0346-\u035f\u0362-\u0385\u038b\u038d\u03a2\u03cf\u03d7-\u03d9\u03db\u03dd\u03df\u03e1\u03f4-\u0400\u040d\u0450\u045d\u0482\u0487-\u048f\u04c5-\u04c6\u04c9-\u04ca\u04cd-\u04cf\u04ec-\u04ed\u04f6-\u04f7\u04fa-\u0530\u0557-\u0558\u055a-\u0560\u0587-\u0590\u05a2\u05ba\u05be\u05c0\u05c3\u05c5-\u05cf\u05eb-\u05ef\u05f3-\u0620\u063b-\u063f\u0653-\u065f\u066a-\u066f\u06b8-\u06b9\u06bf\u06cf\u06d4\u06e9\u06ee-\u06ef\u06fa-\u0900\u0904\u093a-\u093b\u094e-\u0950\u0955-\u0957\u0964-\u0965\u0970-\u0980\u0984\u098d-\u098e\u0991-\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba-\u09bb\u09bd\u09c5-\u09c6\u09c9-\u09ca\u09ce-\u09d6\u09d8-\u09db\u09de\u09e4-\u09e5\u09f2-\u0a01\u0a03-\u0a04\u0a0b-\u0a0e\u0a11-\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a-\u0a3b\u0a3d\u0a43-\u0a46\u0a49-\u0a4a\u0a4e-\u0a58\u0a5d\u0a5f-\u0a65\u0a75-\u0a80\u0a84\u0a8c\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba-\u0abb\u0ac6\u0aca\u0ace-\u0adf\u0ae1-\u0ae5\u0af0-\u0b00\u0b04\u0b0d-\u0b0e\u0b11-\u0b12\u0b29\u0b31\u0b34-\u0b35\u0b3a-\u0b3b\u0b44-\u0b46\u0b49-\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e\u0b62-\u0b65\u0b70-\u0b81\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bb6\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9\u0bce-\u0bd6\u0bd8-\u0be6\u0bf0-\u0c00\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c3d\u0c45\u0c49\u0c4e-\u0c54\u0c57-\u0c5f\u0c62-\u0c65\u0c70-\u0c81\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba-\u0cbd\u0cc5\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf\u0ce2-\u0ce5\u0cf0-\u0d01\u0d04\u0d0d\u0d11\u0d29\u0d3a-\u0d3d\u0d44-\u0d45\u0d49\u0d4e-\u0d56\u0d58-\u0d5f\u0d62-\u0d65\u0d70-\u0e00\u0e2f\u0e3b-\u0e3f\u0e4f\u0e5a-\u0e80\u0e83\u0e85-\u0e86\u0e89\u0e8b-\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8-\u0ea9\u0eac\u0eaf\u0eba\u0ebe-\u0ebf\u0ec5\u0ec7\u0ece-\u0ecf\u0eda-\u0f17\u0f1a-\u0f1f\u0f2a-\u0f34\u0f36\u0f38\u0f3a-\u0f3d\u0f48\u0f6a-\u0f70\u0f85\u0f8c-\u0f8f\u0f96\u0f98\u0fae-\u0fb0\u0fb8\u0fba-\u109f\u10c6-\u10cf\u10f7-\u10ff\u1101\u1104\u1108\u110a\u110d\u1113-\u113b\u113d\u113f\u1141-\u114b\u114d\u114f\u1151-\u1153\u1156-\u1158\u115a-\u115e\u1162\u1164\u1166\u1168\u116a-\u116c\u116f-\u1171\u1174\u1176-\u119d\u119f-\u11a7\u11a9-\u11aa\u11ac-\u11ad\u11b0-\u11b6\u11b9\u11bb\u11c3-\u11ea\u11ec-\u11ef\u11f1-\u11f8\u11fa-\u1dff\u1e9c-\u1e9f\u1efa-\u1eff\u1f16-\u1f17\u1f1e-\u1f1f\u1f46-\u1f47\u1f4e-\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e-\u1f7f\u1fb5\u1fbd\u1fbf-\u1fc1\u1fc5\u1fcd-\u1fcf\u1fd4-\u1fd5\u1fdc-\u1fdf\u1fed-\u1ff1\u1ff5\u1ffd-\u20cf\u20dd-\u20e0\u20e2-\u2125\u2127-\u2129\u212c-\u212d\u212f-\u217f\u2183-\u3004\u3006\u3008-\u3020\u3030\u3036-\u3040\u3095-\u3098\u309b-\u309c\u309f-\u30a0\u30fb\u30ff-\u3104\u312d-\u4dff\u9fa6-\uabff\ud7a4-\uffff]') # noqa + +nonXmlNameFirstBMPRegexp = re.compile('[\x00-@\\[-\\^`\\{-\xbf\xd7\xf7\u0132-\u0133\u013f-\u0140\u0149\u017f\u01c4-\u01cc\u01f1-\u01f3\u01f6-\u01f9\u0218-\u024f\u02a9-\u02ba\u02c2-\u0385\u0387\u038b\u038d\u03a2\u03cf\u03d7-\u03d9\u03db\u03dd\u03df\u03e1\u03f4-\u0400\u040d\u0450\u045d\u0482-\u048f\u04c5-\u04c6\u04c9-\u04ca\u04cd-\u04cf\u04ec-\u04ed\u04f6-\u04f7\u04fa-\u0530\u0557-\u0558\u055a-\u0560\u0587-\u05cf\u05eb-\u05ef\u05f3-\u0620\u063b-\u0640\u064b-\u0670\u06b8-\u06b9\u06bf\u06cf\u06d4\u06d6-\u06e4\u06e7-\u0904\u093a-\u093c\u093e-\u0957\u0962-\u0984\u098d-\u098e\u0991-\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba-\u09db\u09de\u09e2-\u09ef\u09f2-\u0a04\u0a0b-\u0a0e\u0a11-\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a-\u0a58\u0a5d\u0a5f-\u0a71\u0a75-\u0a84\u0a8c\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba-\u0abc\u0abe-\u0adf\u0ae1-\u0b04\u0b0d-\u0b0e\u0b11-\u0b12\u0b29\u0b31\u0b34-\u0b35\u0b3a-\u0b3c\u0b3e-\u0b5b\u0b5e\u0b62-\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bb6\u0bba-\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c5f\u0c62-\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba-\u0cdd\u0cdf\u0ce2-\u0d04\u0d0d\u0d11\u0d29\u0d3a-\u0d5f\u0d62-\u0e00\u0e2f\u0e31\u0e34-\u0e3f\u0e46-\u0e80\u0e83\u0e85-\u0e86\u0e89\u0e8b-\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8-\u0ea9\u0eac\u0eaf\u0eb1\u0eb4-\u0ebc\u0ebe-\u0ebf\u0ec5-\u0f3f\u0f48\u0f6a-\u109f\u10c6-\u10cf\u10f7-\u10ff\u1101\u1104\u1108\u110a\u110d\u1113-\u113b\u113d\u113f\u1141-\u114b\u114d\u114f\u1151-\u1153\u1156-\u1158\u115a-\u115e\u1162\u1164\u1166\u1168\u116a-\u116c\u116f-\u1171\u1174\u1176-\u119d\u119f-\u11a7\u11a9-\u11aa\u11ac-\u11ad\u11b0-\u11b6\u11b9\u11bb\u11c3-\u11ea\u11ec-\u11ef\u11f1-\u11f8\u11fa-\u1dff\u1e9c-\u1e9f\u1efa-\u1eff\u1f16-\u1f17\u1f1e-\u1f1f\u1f46-\u1f47\u1f4e-\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e-\u1f7f\u1fb5\u1fbd\u1fbf-\u1fc1\u1fc5\u1fcd-\u1fcf\u1fd4-\u1fd5\u1fdc-\u1fdf\u1fed-\u1ff1\u1ff5\u1ffd-\u2125\u2127-\u2129\u212c-\u212d\u212f-\u217f\u2183-\u3006\u3008-\u3020\u302a-\u3040\u3095-\u30a0\u30fb-\u3104\u312d-\u4dff\u9fa6-\uabff\ud7a4-\uffff]') # noqa + +# Simpler things +nonPubidCharRegexp = re.compile("[^\x20\x0D\x0Aa-zA-Z0-9\\-'()+,./:=?;!*#@$_%]") + + +class InfosetFilter(object): + replacementRegexp = re.compile(r"U[\dA-F]{5,5}") + + def __init__(self, + dropXmlnsLocalName=False, + dropXmlnsAttrNs=False, + preventDoubleDashComments=False, + preventDashAtCommentEnd=False, + replaceFormFeedCharacters=True, + preventSingleQuotePubid=False): + + self.dropXmlnsLocalName = dropXmlnsLocalName + self.dropXmlnsAttrNs = dropXmlnsAttrNs + + self.preventDoubleDashComments = preventDoubleDashComments + self.preventDashAtCommentEnd = preventDashAtCommentEnd + + self.replaceFormFeedCharacters = replaceFormFeedCharacters + + self.preventSingleQuotePubid = preventSingleQuotePubid + + self.replaceCache = {} + + def coerceAttribute(self, name, namespace=None): + if self.dropXmlnsLocalName and name.startswith("xmlns:"): + warnings.warn("Attributes cannot begin with xmlns", DataLossWarning) + return None + elif (self.dropXmlnsAttrNs and + namespace == "http://www.w3.org/2000/xmlns/"): + warnings.warn("Attributes cannot be in the xml namespace", DataLossWarning) + return None + else: + return self.toXmlName(name) + + def coerceElement(self, name): + return self.toXmlName(name) + + def coerceComment(self, data): + if self.preventDoubleDashComments: + while "--" in data: + warnings.warn("Comments cannot contain adjacent dashes", DataLossWarning) + data = data.replace("--", "- -") + if data.endswith("-"): + warnings.warn("Comments cannot end in a dash", DataLossWarning) + data += " " + return data + + def coerceCharacters(self, data): + if self.replaceFormFeedCharacters: + for _ in range(data.count("\x0C")): + warnings.warn("Text cannot contain U+000C", DataLossWarning) + data = data.replace("\x0C", " ") + # Other non-xml characters + return data + + def coercePubid(self, data): + dataOutput = data + for char in nonPubidCharRegexp.findall(data): + warnings.warn("Coercing non-XML pubid", DataLossWarning) + replacement = self.getReplacementCharacter(char) + dataOutput = dataOutput.replace(char, replacement) + if self.preventSingleQuotePubid and dataOutput.find("'") >= 0: + warnings.warn("Pubid cannot contain single quote", DataLossWarning) + dataOutput = dataOutput.replace("'", self.getReplacementCharacter("'")) + return dataOutput + + def toXmlName(self, name): + nameFirst = name[0] + nameRest = name[1:] + m = nonXmlNameFirstBMPRegexp.match(nameFirst) + if m: + warnings.warn("Coercing non-XML name", DataLossWarning) + nameFirstOutput = self.getReplacementCharacter(nameFirst) + else: + nameFirstOutput = nameFirst + + nameRestOutput = nameRest + replaceChars = set(nonXmlNameBMPRegexp.findall(nameRest)) + for char in replaceChars: + warnings.warn("Coercing non-XML name", DataLossWarning) + replacement = self.getReplacementCharacter(char) + nameRestOutput = nameRestOutput.replace(char, replacement) + return nameFirstOutput + nameRestOutput + + def getReplacementCharacter(self, char): + if char in self.replaceCache: + replacement = self.replaceCache[char] + else: + replacement = self.escapeChar(char) + return replacement + + def fromXmlName(self, name): + for item in set(self.replacementRegexp.findall(name)): + name = name.replace(item, self.unescapeChar(item)) + return name + + def escapeChar(self, char): + replacement = "U%05X" % ord(char) + self.replaceCache[char] = replacement + return replacement + + def unescapeChar(self, charcode): + return chr(int(charcode[1:], 16)) diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py new file mode 100644 index 000000000..a65e55f64 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py @@ -0,0 +1,923 @@ +from __future__ import absolute_import, division, unicode_literals + +from pip._vendor.six import text_type, binary_type +from pip._vendor.six.moves import http_client, urllib + +import codecs +import re + +from pip._vendor import webencodings + +from .constants import EOF, spaceCharacters, asciiLetters, asciiUppercase +from .constants import _ReparseException +from . import _utils + +from io import StringIO + +try: + from io import BytesIO +except ImportError: + BytesIO = StringIO + +# Non-unicode versions of constants for use in the pre-parser +spaceCharactersBytes = frozenset([item.encode("ascii") for item in spaceCharacters]) +asciiLettersBytes = frozenset([item.encode("ascii") for item in asciiLetters]) +asciiUppercaseBytes = frozenset([item.encode("ascii") for item in asciiUppercase]) +spacesAngleBrackets = spaceCharactersBytes | frozenset([b">", b"<"]) + + +invalid_unicode_no_surrogate = "[\u0001-\u0008\u000B\u000E-\u001F\u007F-\u009F\uFDD0-\uFDEF\uFFFE\uFFFF\U0001FFFE\U0001FFFF\U0002FFFE\U0002FFFF\U0003FFFE\U0003FFFF\U0004FFFE\U0004FFFF\U0005FFFE\U0005FFFF\U0006FFFE\U0006FFFF\U0007FFFE\U0007FFFF\U0008FFFE\U0008FFFF\U0009FFFE\U0009FFFF\U000AFFFE\U000AFFFF\U000BFFFE\U000BFFFF\U000CFFFE\U000CFFFF\U000DFFFE\U000DFFFF\U000EFFFE\U000EFFFF\U000FFFFE\U000FFFFF\U0010FFFE\U0010FFFF]" # noqa + +if _utils.supports_lone_surrogates: + # Use one extra step of indirection and create surrogates with + # eval. Not using this indirection would introduce an illegal + # unicode literal on platforms not supporting such lone + # surrogates. + assert invalid_unicode_no_surrogate[-1] == "]" and invalid_unicode_no_surrogate.count("]") == 1 + invalid_unicode_re = re.compile(invalid_unicode_no_surrogate[:-1] + + eval('"\\uD800-\\uDFFF"') + # pylint:disable=eval-used + "]") +else: + invalid_unicode_re = re.compile(invalid_unicode_no_surrogate) + +non_bmp_invalid_codepoints = set([0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, + 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, + 0x6FFFE, 0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, + 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, + 0xBFFFE, 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, + 0xDFFFF, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, + 0x10FFFE, 0x10FFFF]) + +ascii_punctuation_re = re.compile("[\u0009-\u000D\u0020-\u002F\u003A-\u0040\u005C\u005B-\u0060\u007B-\u007E]") + +# Cache for charsUntil() +charsUntilRegEx = {} + + +class BufferedStream(object): + """Buffering for streams that do not have buffering of their own + + The buffer is implemented as a list of chunks on the assumption that + joining many strings will be slow since it is O(n**2) + """ + + def __init__(self, stream): + self.stream = stream + self.buffer = [] + self.position = [-1, 0] # chunk number, offset + + def tell(self): + pos = 0 + for chunk in self.buffer[:self.position[0]]: + pos += len(chunk) + pos += self.position[1] + return pos + + def seek(self, pos): + assert pos <= self._bufferedBytes() + offset = pos + i = 0 + while len(self.buffer[i]) < offset: + offset -= len(self.buffer[i]) + i += 1 + self.position = [i, offset] + + def read(self, bytes): + if not self.buffer: + return self._readStream(bytes) + elif (self.position[0] == len(self.buffer) and + self.position[1] == len(self.buffer[-1])): + return self._readStream(bytes) + else: + return self._readFromBuffer(bytes) + + def _bufferedBytes(self): + return sum([len(item) for item in self.buffer]) + + def _readStream(self, bytes): + data = self.stream.read(bytes) + self.buffer.append(data) + self.position[0] += 1 + self.position[1] = len(data) + return data + + def _readFromBuffer(self, bytes): + remainingBytes = bytes + rv = [] + bufferIndex = self.position[0] + bufferOffset = self.position[1] + while bufferIndex < len(self.buffer) and remainingBytes != 0: + assert remainingBytes > 0 + bufferedData = self.buffer[bufferIndex] + + if remainingBytes <= len(bufferedData) - bufferOffset: + bytesToRead = remainingBytes + self.position = [bufferIndex, bufferOffset + bytesToRead] + else: + bytesToRead = len(bufferedData) - bufferOffset + self.position = [bufferIndex, len(bufferedData)] + bufferIndex += 1 + rv.append(bufferedData[bufferOffset:bufferOffset + bytesToRead]) + remainingBytes -= bytesToRead + + bufferOffset = 0 + + if remainingBytes: + rv.append(self._readStream(remainingBytes)) + + return b"".join(rv) + + +def HTMLInputStream(source, **kwargs): + # Work around Python bug #20007: read(0) closes the connection. + # http://bugs.python.org/issue20007 + if (isinstance(source, http_client.HTTPResponse) or + # Also check for addinfourl wrapping HTTPResponse + (isinstance(source, urllib.response.addbase) and + isinstance(source.fp, http_client.HTTPResponse))): + isUnicode = False + elif hasattr(source, "read"): + isUnicode = isinstance(source.read(0), text_type) + else: + isUnicode = isinstance(source, text_type) + + if isUnicode: + encodings = [x for x in kwargs if x.endswith("_encoding")] + if encodings: + raise TypeError("Cannot set an encoding with a unicode input, set %r" % encodings) + + return HTMLUnicodeInputStream(source, **kwargs) + else: + return HTMLBinaryInputStream(source, **kwargs) + + +class HTMLUnicodeInputStream(object): + """Provides a unicode stream of characters to the HTMLTokenizer. + + This class takes care of character encoding and removing or replacing + incorrect byte-sequences and also provides column and line tracking. + + """ + + _defaultChunkSize = 10240 + + def __init__(self, source): + """Initialises the HTMLInputStream. + + HTMLInputStream(source, [encoding]) -> Normalized stream from source + for use by html5lib. + + source can be either a file-object, local filename or a string. + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element) + + """ + + if not _utils.supports_lone_surrogates: + # Such platforms will have already checked for such + # surrogate errors, so no need to do this checking. + self.reportCharacterErrors = None + elif len("\U0010FFFF") == 1: + self.reportCharacterErrors = self.characterErrorsUCS4 + else: + self.reportCharacterErrors = self.characterErrorsUCS2 + + # List of where new lines occur + self.newLines = [0] + + self.charEncoding = (lookupEncoding("utf-8"), "certain") + self.dataStream = self.openStream(source) + + self.reset() + + def reset(self): + self.chunk = "" + self.chunkSize = 0 + self.chunkOffset = 0 + self.errors = [] + + # number of (complete) lines in previous chunks + self.prevNumLines = 0 + # number of columns in the last line of the previous chunk + self.prevNumCols = 0 + + # Deal with CR LF and surrogates split over chunk boundaries + self._bufferedCharacter = None + + def openStream(self, source): + """Produces a file object from source. + + source can be either a file object, local filename or a string. + + """ + # Already a file object + if hasattr(source, 'read'): + stream = source + else: + stream = StringIO(source) + + return stream + + def _position(self, offset): + chunk = self.chunk + nLines = chunk.count('\n', 0, offset) + positionLine = self.prevNumLines + nLines + lastLinePos = chunk.rfind('\n', 0, offset) + if lastLinePos == -1: + positionColumn = self.prevNumCols + offset + else: + positionColumn = offset - (lastLinePos + 1) + return (positionLine, positionColumn) + + def position(self): + """Returns (line, col) of the current position in the stream.""" + line, col = self._position(self.chunkOffset) + return (line + 1, col) + + def char(self): + """ Read one character from the stream or queue if available. Return + EOF when EOF is reached. + """ + # Read a new chunk from the input stream if necessary + if self.chunkOffset >= self.chunkSize: + if not self.readChunk(): + return EOF + + chunkOffset = self.chunkOffset + char = self.chunk[chunkOffset] + self.chunkOffset = chunkOffset + 1 + + return char + + def readChunk(self, chunkSize=None): + if chunkSize is None: + chunkSize = self._defaultChunkSize + + self.prevNumLines, self.prevNumCols = self._position(self.chunkSize) + + self.chunk = "" + self.chunkSize = 0 + self.chunkOffset = 0 + + data = self.dataStream.read(chunkSize) + + # Deal with CR LF and surrogates broken across chunks + if self._bufferedCharacter: + data = self._bufferedCharacter + data + self._bufferedCharacter = None + elif not data: + # We have no more data, bye-bye stream + return False + + if len(data) > 1: + lastv = ord(data[-1]) + if lastv == 0x0D or 0xD800 <= lastv <= 0xDBFF: + self._bufferedCharacter = data[-1] + data = data[:-1] + + if self.reportCharacterErrors: + self.reportCharacterErrors(data) + + # Replace invalid characters + data = data.replace("\r\n", "\n") + data = data.replace("\r", "\n") + + self.chunk = data + self.chunkSize = len(data) + + return True + + def characterErrorsUCS4(self, data): + for _ in range(len(invalid_unicode_re.findall(data))): + self.errors.append("invalid-codepoint") + + def characterErrorsUCS2(self, data): + # Someone picked the wrong compile option + # You lose + skip = False + for match in invalid_unicode_re.finditer(data): + if skip: + continue + codepoint = ord(match.group()) + pos = match.start() + # Pretty sure there should be endianness issues here + if _utils.isSurrogatePair(data[pos:pos + 2]): + # We have a surrogate pair! + char_val = _utils.surrogatePairToCodepoint(data[pos:pos + 2]) + if char_val in non_bmp_invalid_codepoints: + self.errors.append("invalid-codepoint") + skip = True + elif (codepoint >= 0xD800 and codepoint <= 0xDFFF and + pos == len(data) - 1): + self.errors.append("invalid-codepoint") + else: + skip = False + self.errors.append("invalid-codepoint") + + def charsUntil(self, characters, opposite=False): + """ Returns a string of characters from the stream up to but not + including any character in 'characters' or EOF. 'characters' must be + a container that supports the 'in' method and iteration over its + characters. + """ + + # Use a cache of regexps to find the required characters + try: + chars = charsUntilRegEx[(characters, opposite)] + except KeyError: + if __debug__: + for c in characters: + assert(ord(c) < 128) + regex = "".join(["\\x%02x" % ord(c) for c in characters]) + if not opposite: + regex = "^%s" % regex + chars = charsUntilRegEx[(characters, opposite)] = re.compile("[%s]+" % regex) + + rv = [] + + while True: + # Find the longest matching prefix + m = chars.match(self.chunk, self.chunkOffset) + if m is None: + # If nothing matched, and it wasn't because we ran out of chunk, + # then stop + if self.chunkOffset != self.chunkSize: + break + else: + end = m.end() + # If not the whole chunk matched, return everything + # up to the part that didn't match + if end != self.chunkSize: + rv.append(self.chunk[self.chunkOffset:end]) + self.chunkOffset = end + break + # If the whole remainder of the chunk matched, + # use it all and read the next chunk + rv.append(self.chunk[self.chunkOffset:]) + if not self.readChunk(): + # Reached EOF + break + + r = "".join(rv) + return r + + def unget(self, char): + # Only one character is allowed to be ungotten at once - it must + # be consumed again before any further call to unget + if char is not None: + if self.chunkOffset == 0: + # unget is called quite rarely, so it's a good idea to do + # more work here if it saves a bit of work in the frequently + # called char and charsUntil. + # So, just prepend the ungotten character onto the current + # chunk: + self.chunk = char + self.chunk + self.chunkSize += 1 + else: + self.chunkOffset -= 1 + assert self.chunk[self.chunkOffset] == char + + +class HTMLBinaryInputStream(HTMLUnicodeInputStream): + """Provides a unicode stream of characters to the HTMLTokenizer. + + This class takes care of character encoding and removing or replacing + incorrect byte-sequences and also provides column and line tracking. + + """ + + def __init__(self, source, override_encoding=None, transport_encoding=None, + same_origin_parent_encoding=None, likely_encoding=None, + default_encoding="windows-1252", useChardet=True): + """Initialises the HTMLInputStream. + + HTMLInputStream(source, [encoding]) -> Normalized stream from source + for use by html5lib. + + source can be either a file-object, local filename or a string. + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element) + + """ + # Raw Stream - for unicode objects this will encode to utf-8 and set + # self.charEncoding as appropriate + self.rawStream = self.openStream(source) + + HTMLUnicodeInputStream.__init__(self, self.rawStream) + + # Encoding Information + # Number of bytes to use when looking for a meta element with + # encoding information + self.numBytesMeta = 1024 + # Number of bytes to use when using detecting encoding using chardet + self.numBytesChardet = 100 + # Things from args + self.override_encoding = override_encoding + self.transport_encoding = transport_encoding + self.same_origin_parent_encoding = same_origin_parent_encoding + self.likely_encoding = likely_encoding + self.default_encoding = default_encoding + + # Determine encoding + self.charEncoding = self.determineEncoding(useChardet) + assert self.charEncoding[0] is not None + + # Call superclass + self.reset() + + def reset(self): + self.dataStream = self.charEncoding[0].codec_info.streamreader(self.rawStream, 'replace') + HTMLUnicodeInputStream.reset(self) + + def openStream(self, source): + """Produces a file object from source. + + source can be either a file object, local filename or a string. + + """ + # Already a file object + if hasattr(source, 'read'): + stream = source + else: + stream = BytesIO(source) + + try: + stream.seek(stream.tell()) + except: # pylint:disable=bare-except + stream = BufferedStream(stream) + + return stream + + def determineEncoding(self, chardet=True): + # BOMs take precedence over everything + # This will also read past the BOM if present + charEncoding = self.detectBOM(), "certain" + if charEncoding[0] is not None: + return charEncoding + + # If we've been overriden, we've been overriden + charEncoding = lookupEncoding(self.override_encoding), "certain" + if charEncoding[0] is not None: + return charEncoding + + # Now check the transport layer + charEncoding = lookupEncoding(self.transport_encoding), "certain" + if charEncoding[0] is not None: + return charEncoding + + # Look for meta elements with encoding information + charEncoding = self.detectEncodingMeta(), "tentative" + if charEncoding[0] is not None: + return charEncoding + + # Parent document encoding + charEncoding = lookupEncoding(self.same_origin_parent_encoding), "tentative" + if charEncoding[0] is not None and not charEncoding[0].name.startswith("utf-16"): + return charEncoding + + # "likely" encoding + charEncoding = lookupEncoding(self.likely_encoding), "tentative" + if charEncoding[0] is not None: + return charEncoding + + # Guess with chardet, if available + if chardet: + try: + from pip._vendor.chardet.universaldetector import UniversalDetector + except ImportError: + pass + else: + buffers = [] + detector = UniversalDetector() + while not detector.done: + buffer = self.rawStream.read(self.numBytesChardet) + assert isinstance(buffer, bytes) + if not buffer: + break + buffers.append(buffer) + detector.feed(buffer) + detector.close() + encoding = lookupEncoding(detector.result['encoding']) + self.rawStream.seek(0) + if encoding is not None: + return encoding, "tentative" + + # Try the default encoding + charEncoding = lookupEncoding(self.default_encoding), "tentative" + if charEncoding[0] is not None: + return charEncoding + + # Fallback to html5lib's default if even that hasn't worked + return lookupEncoding("windows-1252"), "tentative" + + def changeEncoding(self, newEncoding): + assert self.charEncoding[1] != "certain" + newEncoding = lookupEncoding(newEncoding) + if newEncoding is None: + return + if newEncoding.name in ("utf-16be", "utf-16le"): + newEncoding = lookupEncoding("utf-8") + assert newEncoding is not None + elif newEncoding == self.charEncoding[0]: + self.charEncoding = (self.charEncoding[0], "certain") + else: + self.rawStream.seek(0) + self.charEncoding = (newEncoding, "certain") + self.reset() + raise _ReparseException("Encoding changed from %s to %s" % (self.charEncoding[0], newEncoding)) + + def detectBOM(self): + """Attempts to detect at BOM at the start of the stream. If + an encoding can be determined from the BOM return the name of the + encoding otherwise return None""" + bomDict = { + codecs.BOM_UTF8: 'utf-8', + codecs.BOM_UTF16_LE: 'utf-16le', codecs.BOM_UTF16_BE: 'utf-16be', + codecs.BOM_UTF32_LE: 'utf-32le', codecs.BOM_UTF32_BE: 'utf-32be' + } + + # Go to beginning of file and read in 4 bytes + string = self.rawStream.read(4) + assert isinstance(string, bytes) + + # Try detecting the BOM using bytes from the string + encoding = bomDict.get(string[:3]) # UTF-8 + seek = 3 + if not encoding: + # Need to detect UTF-32 before UTF-16 + encoding = bomDict.get(string) # UTF-32 + seek = 4 + if not encoding: + encoding = bomDict.get(string[:2]) # UTF-16 + seek = 2 + + # Set the read position past the BOM if one was found, otherwise + # set it to the start of the stream + if encoding: + self.rawStream.seek(seek) + return lookupEncoding(encoding) + else: + self.rawStream.seek(0) + return None + + def detectEncodingMeta(self): + """Report the encoding declared by the meta element + """ + buffer = self.rawStream.read(self.numBytesMeta) + assert isinstance(buffer, bytes) + parser = EncodingParser(buffer) + self.rawStream.seek(0) + encoding = parser.getEncoding() + + if encoding is not None and encoding.name in ("utf-16be", "utf-16le"): + encoding = lookupEncoding("utf-8") + + return encoding + + +class EncodingBytes(bytes): + """String-like object with an associated position and various extra methods + If the position is ever greater than the string length then an exception is + raised""" + def __new__(self, value): + assert isinstance(value, bytes) + return bytes.__new__(self, value.lower()) + + def __init__(self, value): + # pylint:disable=unused-argument + self._position = -1 + + def __iter__(self): + return self + + def __next__(self): + p = self._position = self._position + 1 + if p >= len(self): + raise StopIteration + elif p < 0: + raise TypeError + return self[p:p + 1] + + def next(self): + # Py2 compat + return self.__next__() + + def previous(self): + p = self._position + if p >= len(self): + raise StopIteration + elif p < 0: + raise TypeError + self._position = p = p - 1 + return self[p:p + 1] + + def setPosition(self, position): + if self._position >= len(self): + raise StopIteration + self._position = position + + def getPosition(self): + if self._position >= len(self): + raise StopIteration + if self._position >= 0: + return self._position + else: + return None + + position = property(getPosition, setPosition) + + def getCurrentByte(self): + return self[self.position:self.position + 1] + + currentByte = property(getCurrentByte) + + def skip(self, chars=spaceCharactersBytes): + """Skip past a list of characters""" + p = self.position # use property for the error-checking + while p < len(self): + c = self[p:p + 1] + if c not in chars: + self._position = p + return c + p += 1 + self._position = p + return None + + def skipUntil(self, chars): + p = self.position + while p < len(self): + c = self[p:p + 1] + if c in chars: + self._position = p + return c + p += 1 + self._position = p + return None + + def matchBytes(self, bytes): + """Look for a sequence of bytes at the start of a string. If the bytes + are found return True and advance the position to the byte after the + match. Otherwise return False and leave the position alone""" + p = self.position + data = self[p:p + len(bytes)] + rv = data.startswith(bytes) + if rv: + self.position += len(bytes) + return rv + + def jumpTo(self, bytes): + """Look for the next sequence of bytes matching a given sequence. If + a match is found advance the position to the last byte of the match""" + newPosition = self[self.position:].find(bytes) + if newPosition > -1: + # XXX: This is ugly, but I can't see a nicer way to fix this. + if self._position == -1: + self._position = 0 + self._position += (newPosition + len(bytes) - 1) + return True + else: + raise StopIteration + + +class EncodingParser(object): + """Mini parser for detecting character encoding from meta elements""" + + def __init__(self, data): + """string - the data to work on for encoding detection""" + self.data = EncodingBytes(data) + self.encoding = None + + def getEncoding(self): + methodDispatch = ( + (b"") + + def handleMeta(self): + if self.data.currentByte not in spaceCharactersBytes: + # if we have ") + + def getAttribute(self): + """Return a name,value pair for the next attribute in the stream, + if one is found, or None""" + data = self.data + # Step 1 (skip chars) + c = data.skip(spaceCharactersBytes | frozenset([b"/"])) + assert c is None or len(c) == 1 + # Step 2 + if c in (b">", None): + return None + # Step 3 + attrName = [] + attrValue = [] + # Step 4 attribute name + while True: + if c == b"=" and attrName: + break + elif c in spaceCharactersBytes: + # Step 6! + c = data.skip() + break + elif c in (b"/", b">"): + return b"".join(attrName), b"" + elif c in asciiUppercaseBytes: + attrName.append(c.lower()) + elif c is None: + return None + else: + attrName.append(c) + # Step 5 + c = next(data) + # Step 7 + if c != b"=": + data.previous() + return b"".join(attrName), b"" + # Step 8 + next(data) + # Step 9 + c = data.skip() + # Step 10 + if c in (b"'", b'"'): + # 10.1 + quoteChar = c + while True: + # 10.2 + c = next(data) + # 10.3 + if c == quoteChar: + next(data) + return b"".join(attrName), b"".join(attrValue) + # 10.4 + elif c in asciiUppercaseBytes: + attrValue.append(c.lower()) + # 10.5 + else: + attrValue.append(c) + elif c == b">": + return b"".join(attrName), b"" + elif c in asciiUppercaseBytes: + attrValue.append(c.lower()) + elif c is None: + return None + else: + attrValue.append(c) + # Step 11 + while True: + c = next(data) + if c in spacesAngleBrackets: + return b"".join(attrName), b"".join(attrValue) + elif c in asciiUppercaseBytes: + attrValue.append(c.lower()) + elif c is None: + return None + else: + attrValue.append(c) + + +class ContentAttrParser(object): + def __init__(self, data): + assert isinstance(data, bytes) + self.data = data + + def parse(self): + try: + # Check if the attr name is charset + # otherwise return + self.data.jumpTo(b"charset") + self.data.position += 1 + self.data.skip() + if not self.data.currentByte == b"=": + # If there is no = sign keep looking for attrs + return None + self.data.position += 1 + self.data.skip() + # Look for an encoding between matching quote marks + if self.data.currentByte in (b'"', b"'"): + quoteMark = self.data.currentByte + self.data.position += 1 + oldPosition = self.data.position + if self.data.jumpTo(quoteMark): + return self.data[oldPosition:self.data.position] + else: + return None + else: + # Unquoted value + oldPosition = self.data.position + try: + self.data.skipUntil(spaceCharactersBytes) + return self.data[oldPosition:self.data.position] + except StopIteration: + # Return the whole remaining value + return self.data[oldPosition:] + except StopIteration: + return None + + +def lookupEncoding(encoding): + """Return the python codec name corresponding to an encoding or None if the + string doesn't correspond to a valid encoding.""" + if isinstance(encoding, binary_type): + try: + encoding = encoding.decode("ascii") + except UnicodeDecodeError: + return None + + if encoding is not None: + try: + return webencodings.lookup(encoding) + except AttributeError: + return None + else: + return None diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py new file mode 100644 index 000000000..178f6e7fa --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py @@ -0,0 +1,1721 @@ +from __future__ import absolute_import, division, unicode_literals + +from pip._vendor.six import unichr as chr + +from collections import deque + +from .constants import spaceCharacters +from .constants import entities +from .constants import asciiLetters, asciiUpper2Lower +from .constants import digits, hexDigits, EOF +from .constants import tokenTypes, tagTokenTypes +from .constants import replacementCharacters + +from ._inputstream import HTMLInputStream + +from ._trie import Trie + +entitiesTrie = Trie(entities) + + +class HTMLTokenizer(object): + """ This class takes care of tokenizing HTML. + + * self.currentToken + Holds the token that is currently being processed. + + * self.state + Holds a reference to the method to be invoked... XXX + + * self.stream + Points to HTMLInputStream object. + """ + + def __init__(self, stream, parser=None, **kwargs): + + self.stream = HTMLInputStream(stream, **kwargs) + self.parser = parser + + # Setup the initial tokenizer state + self.escapeFlag = False + self.lastFourChars = [] + self.state = self.dataState + self.escape = False + + # The current token being created + self.currentToken = None + super(HTMLTokenizer, self).__init__() + + def __iter__(self): + """ This is where the magic happens. + + We do our usually processing through the states and when we have a token + to return we yield the token which pauses processing until the next token + is requested. + """ + self.tokenQueue = deque([]) + # Start processing. When EOF is reached self.state will return False + # instead of True and the loop will terminate. + while self.state(): + while self.stream.errors: + yield {"type": tokenTypes["ParseError"], "data": self.stream.errors.pop(0)} + while self.tokenQueue: + yield self.tokenQueue.popleft() + + def consumeNumberEntity(self, isHex): + """This function returns either U+FFFD or the character based on the + decimal or hexadecimal representation. It also discards ";" if present. + If not present self.tokenQueue.append({"type": tokenTypes["ParseError"]}) is invoked. + """ + + allowed = digits + radix = 10 + if isHex: + allowed = hexDigits + radix = 16 + + charStack = [] + + # Consume all the characters that are in range while making sure we + # don't hit an EOF. + c = self.stream.char() + while c in allowed and c is not EOF: + charStack.append(c) + c = self.stream.char() + + # Convert the set of characters consumed to an int. + charAsInt = int("".join(charStack), radix) + + # Certain characters get replaced with others + if charAsInt in replacementCharacters: + char = replacementCharacters[charAsInt] + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "illegal-codepoint-for-numeric-entity", + "datavars": {"charAsInt": charAsInt}}) + elif ((0xD800 <= charAsInt <= 0xDFFF) or + (charAsInt > 0x10FFFF)): + char = "\uFFFD" + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "illegal-codepoint-for-numeric-entity", + "datavars": {"charAsInt": charAsInt}}) + else: + # Should speed up this check somehow (e.g. move the set to a constant) + if ((0x0001 <= charAsInt <= 0x0008) or + (0x000E <= charAsInt <= 0x001F) or + (0x007F <= charAsInt <= 0x009F) or + (0xFDD0 <= charAsInt <= 0xFDEF) or + charAsInt in frozenset([0x000B, 0xFFFE, 0xFFFF, 0x1FFFE, + 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, + 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, + 0x5FFFF, 0x6FFFE, 0x6FFFF, 0x7FFFE, + 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, + 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, + 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, + 0xDFFFF, 0xEFFFE, 0xEFFFF, 0xFFFFE, + 0xFFFFF, 0x10FFFE, 0x10FFFF])): + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": + "illegal-codepoint-for-numeric-entity", + "datavars": {"charAsInt": charAsInt}}) + try: + # Try/except needed as UCS-2 Python builds' unichar only works + # within the BMP. + char = chr(charAsInt) + except ValueError: + v = charAsInt - 0x10000 + char = chr(0xD800 | (v >> 10)) + chr(0xDC00 | (v & 0x3FF)) + + # Discard the ; if present. Otherwise, put it back on the queue and + # invoke parseError on parser. + if c != ";": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "numeric-entity-without-semicolon"}) + self.stream.unget(c) + + return char + + def consumeEntity(self, allowedChar=None, fromAttribute=False): + # Initialise to the default output for when no entity is matched + output = "&" + + charStack = [self.stream.char()] + if (charStack[0] in spaceCharacters or charStack[0] in (EOF, "<", "&") or + (allowedChar is not None and allowedChar == charStack[0])): + self.stream.unget(charStack[0]) + + elif charStack[0] == "#": + # Read the next character to see if it's hex or decimal + hex = False + charStack.append(self.stream.char()) + if charStack[-1] in ("x", "X"): + hex = True + charStack.append(self.stream.char()) + + # charStack[-1] should be the first digit + if (hex and charStack[-1] in hexDigits) \ + or (not hex and charStack[-1] in digits): + # At least one digit found, so consume the whole number + self.stream.unget(charStack[-1]) + output = self.consumeNumberEntity(hex) + else: + # No digits found + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "expected-numeric-entity"}) + self.stream.unget(charStack.pop()) + output = "&" + "".join(charStack) + + else: + # At this point in the process might have named entity. Entities + # are stored in the global variable "entities". + # + # Consume characters and compare to these to a substring of the + # entity names in the list until the substring no longer matches. + while (charStack[-1] is not EOF): + if not entitiesTrie.has_keys_with_prefix("".join(charStack)): + break + charStack.append(self.stream.char()) + + # At this point we have a string that starts with some characters + # that may match an entity + # Try to find the longest entity the string will match to take care + # of ¬i for instance. + try: + entityName = entitiesTrie.longest_prefix("".join(charStack[:-1])) + entityLength = len(entityName) + except KeyError: + entityName = None + + if entityName is not None: + if entityName[-1] != ";": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "named-entity-without-semicolon"}) + if (entityName[-1] != ";" and fromAttribute and + (charStack[entityLength] in asciiLetters or + charStack[entityLength] in digits or + charStack[entityLength] == "=")): + self.stream.unget(charStack.pop()) + output = "&" + "".join(charStack) + else: + output = entities[entityName] + self.stream.unget(charStack.pop()) + output += "".join(charStack[entityLength:]) + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-named-entity"}) + self.stream.unget(charStack.pop()) + output = "&" + "".join(charStack) + + if fromAttribute: + self.currentToken["data"][-1][1] += output + else: + if output in spaceCharacters: + tokenType = "SpaceCharacters" + else: + tokenType = "Characters" + self.tokenQueue.append({"type": tokenTypes[tokenType], "data": output}) + + def processEntityInAttribute(self, allowedChar): + """This method replaces the need for "entityInAttributeValueState". + """ + self.consumeEntity(allowedChar=allowedChar, fromAttribute=True) + + def emitCurrentToken(self): + """This method is a generic handler for emitting the tags. It also sets + the state to "data" because that's what's needed after a token has been + emitted. + """ + token = self.currentToken + # Add token to the queue to be yielded + if (token["type"] in tagTokenTypes): + token["name"] = token["name"].translate(asciiUpper2Lower) + if token["type"] == tokenTypes["EndTag"]: + if token["data"]: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "attributes-in-end-tag"}) + if token["selfClosing"]: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "self-closing-flag-on-end-tag"}) + self.tokenQueue.append(token) + self.state = self.dataState + + # Below are the various tokenizer states worked out. + def dataState(self): + data = self.stream.char() + if data == "&": + self.state = self.entityDataState + elif data == "<": + self.state = self.tagOpenState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\u0000"}) + elif data is EOF: + # Tokenization ends. + return False + elif data in spaceCharacters: + # Directly after emitting a token you switch back to the "data + # state". At that point spaceCharacters are important so they are + # emitted separately. + self.tokenQueue.append({"type": tokenTypes["SpaceCharacters"], "data": + data + self.stream.charsUntil(spaceCharacters, True)}) + # No need to update lastFourChars here, since the first space will + # have already been appended to lastFourChars and will have broken + # any sequences + else: + chars = self.stream.charsUntil(("&", "<", "\u0000")) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + chars}) + return True + + def entityDataState(self): + self.consumeEntity() + self.state = self.dataState + return True + + def rcdataState(self): + data = self.stream.char() + if data == "&": + self.state = self.characterReferenceInRcdata + elif data == "<": + self.state = self.rcdataLessThanSignState + elif data == EOF: + # Tokenization ends. + return False + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + elif data in spaceCharacters: + # Directly after emitting a token you switch back to the "data + # state". At that point spaceCharacters are important so they are + # emitted separately. + self.tokenQueue.append({"type": tokenTypes["SpaceCharacters"], "data": + data + self.stream.charsUntil(spaceCharacters, True)}) + # No need to update lastFourChars here, since the first space will + # have already been appended to lastFourChars and will have broken + # any sequences + else: + chars = self.stream.charsUntil(("&", "<", "\u0000")) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + chars}) + return True + + def characterReferenceInRcdata(self): + self.consumeEntity() + self.state = self.rcdataState + return True + + def rawtextState(self): + data = self.stream.char() + if data == "<": + self.state = self.rawtextLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + elif data == EOF: + # Tokenization ends. + return False + else: + chars = self.stream.charsUntil(("<", "\u0000")) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + chars}) + return True + + def scriptDataState(self): + data = self.stream.char() + if data == "<": + self.state = self.scriptDataLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + elif data == EOF: + # Tokenization ends. + return False + else: + chars = self.stream.charsUntil(("<", "\u0000")) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + chars}) + return True + + def plaintextState(self): + data = self.stream.char() + if data == EOF: + # Tokenization ends. + return False + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + self.stream.charsUntil("\u0000")}) + return True + + def tagOpenState(self): + data = self.stream.char() + if data == "!": + self.state = self.markupDeclarationOpenState + elif data == "/": + self.state = self.closeTagOpenState + elif data in asciiLetters: + self.currentToken = {"type": tokenTypes["StartTag"], + "name": data, "data": [], + "selfClosing": False, + "selfClosingAcknowledged": False} + self.state = self.tagNameState + elif data == ">": + # XXX In theory it could be something besides a tag name. But + # do we really care? + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-tag-name-but-got-right-bracket"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<>"}) + self.state = self.dataState + elif data == "?": + # XXX In theory it could be something besides a tag name. But + # do we really care? + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-tag-name-but-got-question-mark"}) + self.stream.unget(data) + self.state = self.bogusCommentState + else: + # XXX + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-tag-name"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.stream.unget(data) + self.state = self.dataState + return True + + def closeTagOpenState(self): + data = self.stream.char() + if data in asciiLetters: + self.currentToken = {"type": tokenTypes["EndTag"], "name": data, + "data": [], "selfClosing": False} + self.state = self.tagNameState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-closing-tag-but-got-right-bracket"}) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-closing-tag-but-got-eof"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "": + self.emitCurrentToken() + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-tag-name"}) + self.state = self.dataState + elif data == "/": + self.state = self.selfClosingStartTagState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["name"] += "\uFFFD" + else: + self.currentToken["name"] += data + # (Don't use charsUntil here, because tag names are + # very short and it's faster to not do anything fancy) + return True + + def rcdataLessThanSignState(self): + data = self.stream.char() + if data == "/": + self.temporaryBuffer = "" + self.state = self.rcdataEndTagOpenState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.stream.unget(data) + self.state = self.rcdataState + return True + + def rcdataEndTagOpenState(self): + data = self.stream.char() + if data in asciiLetters: + self.temporaryBuffer += data + self.state = self.rcdataEndTagNameState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.emitCurrentToken() + self.state = self.dataState + elif data in asciiLetters: + self.temporaryBuffer += data + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.emitCurrentToken() + self.state = self.dataState + elif data in asciiLetters: + self.temporaryBuffer += data + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.emitCurrentToken() + self.state = self.dataState + elif data in asciiLetters: + self.temporaryBuffer += data + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ">"}) + self.state = self.scriptDataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + self.state = self.scriptDataEscapedState + elif data == EOF: + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.state = self.scriptDataEscapedState + return True + + def scriptDataEscapedLessThanSignState(self): + data = self.stream.char() + if data == "/": + self.temporaryBuffer = "" + self.state = self.scriptDataEscapedEndTagOpenState + elif data in asciiLetters: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<" + data}) + self.temporaryBuffer = data + self.state = self.scriptDataDoubleEscapeStartState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.stream.unget(data) + self.state = self.scriptDataEscapedState + return True + + def scriptDataEscapedEndTagOpenState(self): + data = self.stream.char() + if data in asciiLetters: + self.temporaryBuffer = data + self.state = self.scriptDataEscapedEndTagNameState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.emitCurrentToken() + self.state = self.dataState + elif data in asciiLetters: + self.temporaryBuffer += data + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": ""))): + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + if self.temporaryBuffer.lower() == "script": + self.state = self.scriptDataDoubleEscapedState + else: + self.state = self.scriptDataEscapedState + elif data in asciiLetters: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.temporaryBuffer += data + else: + self.stream.unget(data) + self.state = self.scriptDataEscapedState + return True + + def scriptDataDoubleEscapedState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + self.state = self.scriptDataDoubleEscapedDashState + elif data == "<": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.state = self.scriptDataDoubleEscapedLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + elif data == EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-script-in-script"}) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + return True + + def scriptDataDoubleEscapedDashState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + self.state = self.scriptDataDoubleEscapedDashDashState + elif data == "<": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.state = self.scriptDataDoubleEscapedLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + self.state = self.scriptDataDoubleEscapedState + elif data == EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-script-in-script"}) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.state = self.scriptDataDoubleEscapedState + return True + + def scriptDataDoubleEscapedDashDashState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + elif data == "<": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.state = self.scriptDataDoubleEscapedLessThanSignState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ">"}) + self.state = self.scriptDataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + self.state = self.scriptDataDoubleEscapedState + elif data == EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-script-in-script"}) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.state = self.scriptDataDoubleEscapedState + return True + + def scriptDataDoubleEscapedLessThanSignState(self): + data = self.stream.char() + if data == "/": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "/"}) + self.temporaryBuffer = "" + self.state = self.scriptDataDoubleEscapeEndState + else: + self.stream.unget(data) + self.state = self.scriptDataDoubleEscapedState + return True + + def scriptDataDoubleEscapeEndState(self): + data = self.stream.char() + if data in (spaceCharacters | frozenset(("/", ">"))): + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + if self.temporaryBuffer.lower() == "script": + self.state = self.scriptDataEscapedState + else: + self.state = self.scriptDataDoubleEscapedState + elif data in asciiLetters: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.temporaryBuffer += data + else: + self.stream.unget(data) + self.state = self.scriptDataDoubleEscapedState + return True + + def beforeAttributeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + self.stream.charsUntil(spaceCharacters, True) + elif data in asciiLetters: + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + elif data == ">": + self.emitCurrentToken() + elif data == "/": + self.state = self.selfClosingStartTagState + elif data in ("'", '"', "=", "<"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "invalid-character-in-attribute-name"}) + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"].append(["\uFFFD", ""]) + self.state = self.attributeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-attribute-name-but-got-eof"}) + self.state = self.dataState + else: + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + return True + + def attributeNameState(self): + data = self.stream.char() + leavingThisState = True + emitToken = False + if data == "=": + self.state = self.beforeAttributeValueState + elif data in asciiLetters: + self.currentToken["data"][-1][0] += data +\ + self.stream.charsUntil(asciiLetters, True) + leavingThisState = False + elif data == ">": + # XXX If we emit here the attributes are converted to a dict + # without being checked and when the code below runs we error + # because data is a dict not a list + emitToken = True + elif data in spaceCharacters: + self.state = self.afterAttributeNameState + elif data == "/": + self.state = self.selfClosingStartTagState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][0] += "\uFFFD" + leavingThisState = False + elif data in ("'", '"', "<"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": + "invalid-character-in-attribute-name"}) + self.currentToken["data"][-1][0] += data + leavingThisState = False + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "eof-in-attribute-name"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][0] += data + leavingThisState = False + + if leavingThisState: + # Attributes are not dropped at this stage. That happens when the + # start tag token is emitted so values can still be safely appended + # to attributes, but we do want to report the parse error in time. + self.currentToken["data"][-1][0] = ( + self.currentToken["data"][-1][0].translate(asciiUpper2Lower)) + for name, _ in self.currentToken["data"][:-1]: + if self.currentToken["data"][-1][0] == name: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "duplicate-attribute"}) + break + # XXX Fix for above XXX + if emitToken: + self.emitCurrentToken() + return True + + def afterAttributeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + self.stream.charsUntil(spaceCharacters, True) + elif data == "=": + self.state = self.beforeAttributeValueState + elif data == ">": + self.emitCurrentToken() + elif data in asciiLetters: + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + elif data == "/": + self.state = self.selfClosingStartTagState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"].append(["\uFFFD", ""]) + self.state = self.attributeNameState + elif data in ("'", '"', "<"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "invalid-character-after-attribute-name"}) + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-end-of-tag-but-got-eof"}) + self.state = self.dataState + else: + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + return True + + def beforeAttributeValueState(self): + data = self.stream.char() + if data in spaceCharacters: + self.stream.charsUntil(spaceCharacters, True) + elif data == "\"": + self.state = self.attributeValueDoubleQuotedState + elif data == "&": + self.state = self.attributeValueUnQuotedState + self.stream.unget(data) + elif data == "'": + self.state = self.attributeValueSingleQuotedState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-attribute-value-but-got-right-bracket"}) + self.emitCurrentToken() + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][1] += "\uFFFD" + self.state = self.attributeValueUnQuotedState + elif data in ("=", "<", "`"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "equals-in-unquoted-attribute-value"}) + self.currentToken["data"][-1][1] += data + self.state = self.attributeValueUnQuotedState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-attribute-value-but-got-eof"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][1] += data + self.state = self.attributeValueUnQuotedState + return True + + def attributeValueDoubleQuotedState(self): + data = self.stream.char() + if data == "\"": + self.state = self.afterAttributeValueState + elif data == "&": + self.processEntityInAttribute('"') + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][1] += "\uFFFD" + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-attribute-value-double-quote"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][1] += data +\ + self.stream.charsUntil(("\"", "&", "\u0000")) + return True + + def attributeValueSingleQuotedState(self): + data = self.stream.char() + if data == "'": + self.state = self.afterAttributeValueState + elif data == "&": + self.processEntityInAttribute("'") + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][1] += "\uFFFD" + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-attribute-value-single-quote"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][1] += data +\ + self.stream.charsUntil(("'", "&", "\u0000")) + return True + + def attributeValueUnQuotedState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeAttributeNameState + elif data == "&": + self.processEntityInAttribute(">") + elif data == ">": + self.emitCurrentToken() + elif data in ('"', "'", "=", "<", "`"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-character-in-unquoted-attribute-value"}) + self.currentToken["data"][-1][1] += data + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][1] += "\uFFFD" + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-attribute-value-no-quotes"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][1] += data + self.stream.charsUntil( + frozenset(("&", ">", '"', "'", "=", "<", "`", "\u0000")) | spaceCharacters) + return True + + def afterAttributeValueState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeAttributeNameState + elif data == ">": + self.emitCurrentToken() + elif data == "/": + self.state = self.selfClosingStartTagState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-EOF-after-attribute-value"}) + self.stream.unget(data) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-character-after-attribute-value"}) + self.stream.unget(data) + self.state = self.beforeAttributeNameState + return True + + def selfClosingStartTagState(self): + data = self.stream.char() + if data == ">": + self.currentToken["selfClosing"] = True + self.emitCurrentToken() + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": + "unexpected-EOF-after-solidus-in-tag"}) + self.stream.unget(data) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-character-after-solidus-in-tag"}) + self.stream.unget(data) + self.state = self.beforeAttributeNameState + return True + + def bogusCommentState(self): + # Make a new comment token and give it as value all the characters + # until the first > or EOF (charsUntil checks for EOF automatically) + # and emit it. + data = self.stream.charsUntil(">") + data = data.replace("\u0000", "\uFFFD") + self.tokenQueue.append( + {"type": tokenTypes["Comment"], "data": data}) + + # Eat the character directly after the bogus comment which is either a + # ">" or an EOF. + self.stream.char() + self.state = self.dataState + return True + + def markupDeclarationOpenState(self): + charStack = [self.stream.char()] + if charStack[-1] == "-": + charStack.append(self.stream.char()) + if charStack[-1] == "-": + self.currentToken = {"type": tokenTypes["Comment"], "data": ""} + self.state = self.commentStartState + return True + elif charStack[-1] in ('d', 'D'): + matched = True + for expected in (('o', 'O'), ('c', 'C'), ('t', 'T'), + ('y', 'Y'), ('p', 'P'), ('e', 'E')): + charStack.append(self.stream.char()) + if charStack[-1] not in expected: + matched = False + break + if matched: + self.currentToken = {"type": tokenTypes["Doctype"], + "name": "", + "publicId": None, "systemId": None, + "correct": True} + self.state = self.doctypeState + return True + elif (charStack[-1] == "[" and + self.parser is not None and + self.parser.tree.openElements and + self.parser.tree.openElements[-1].namespace != self.parser.tree.defaultNamespace): + matched = True + for expected in ["C", "D", "A", "T", "A", "["]: + charStack.append(self.stream.char()) + if charStack[-1] != expected: + matched = False + break + if matched: + self.state = self.cdataSectionState + return True + + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-dashes-or-doctype"}) + + while charStack: + self.stream.unget(charStack.pop()) + self.state = self.bogusCommentState + return True + + def commentStartState(self): + data = self.stream.char() + if data == "-": + self.state = self.commentStartDashState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "incorrect-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += data + self.state = self.commentState + return True + + def commentStartDashState(self): + data = self.stream.char() + if data == "-": + self.state = self.commentEndState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "-\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "incorrect-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += "-" + data + self.state = self.commentState + return True + + def commentState(self): + data = self.stream.char() + if data == "-": + self.state = self.commentEndDashState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "\uFFFD" + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "eof-in-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += data + \ + self.stream.charsUntil(("-", "\u0000")) + return True + + def commentEndDashState(self): + data = self.stream.char() + if data == "-": + self.state = self.commentEndState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "-\uFFFD" + self.state = self.commentState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment-end-dash"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += "-" + data + self.state = self.commentState + return True + + def commentEndState(self): + data = self.stream.char() + if data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "--\uFFFD" + self.state = self.commentState + elif data == "!": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-bang-after-double-dash-in-comment"}) + self.state = self.commentEndBangState + elif data == "-": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-dash-after-double-dash-in-comment"}) + self.currentToken["data"] += data + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment-double-dash"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + # XXX + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-comment"}) + self.currentToken["data"] += "--" + data + self.state = self.commentState + return True + + def commentEndBangState(self): + data = self.stream.char() + if data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == "-": + self.currentToken["data"] += "--!" + self.state = self.commentEndDashState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "--!\uFFFD" + self.state = self.commentState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment-end-bang-state"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += "--!" + data + self.state = self.commentState + return True + + def doctypeState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeDoctypeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-doctype-name-but-got-eof"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "need-space-after-doctype"}) + self.stream.unget(data) + self.state = self.beforeDoctypeNameState + return True + + def beforeDoctypeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-doctype-name-but-got-right-bracket"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["name"] = "\uFFFD" + self.state = self.doctypeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-doctype-name-but-got-eof"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["name"] = data + self.state = self.doctypeNameState + return True + + def doctypeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) + self.state = self.afterDoctypeNameState + elif data == ">": + self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["name"] += "\uFFFD" + self.state = self.doctypeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype-name"}) + self.currentToken["correct"] = False + self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["name"] += data + return True + + def afterDoctypeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.currentToken["correct"] = False + self.stream.unget(data) + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + if data in ("p", "P"): + matched = True + for expected in (("u", "U"), ("b", "B"), ("l", "L"), + ("i", "I"), ("c", "C")): + data = self.stream.char() + if data not in expected: + matched = False + break + if matched: + self.state = self.afterDoctypePublicKeywordState + return True + elif data in ("s", "S"): + matched = True + for expected in (("y", "Y"), ("s", "S"), ("t", "T"), + ("e", "E"), ("m", "M")): + data = self.stream.char() + if data not in expected: + matched = False + break + if matched: + self.state = self.afterDoctypeSystemKeywordState + return True + + # All the characters read before the current 'data' will be + # [a-zA-Z], so they're garbage in the bogus doctype and can be + # discarded; only the latest character might be '>' or EOF + # and needs to be ungetted + self.stream.unget(data) + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-space-or-right-bracket-in-doctype", "datavars": + {"data": data}}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + + return True + + def afterDoctypePublicKeywordState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeDoctypePublicIdentifierState + elif data in ("'", '"'): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.stream.unget(data) + self.state = self.beforeDoctypePublicIdentifierState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.stream.unget(data) + self.state = self.beforeDoctypePublicIdentifierState + return True + + def beforeDoctypePublicIdentifierState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == "\"": + self.currentToken["publicId"] = "" + self.state = self.doctypePublicIdentifierDoubleQuotedState + elif data == "'": + self.currentToken["publicId"] = "" + self.state = self.doctypePublicIdentifierSingleQuotedState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + return True + + def doctypePublicIdentifierDoubleQuotedState(self): + data = self.stream.char() + if data == "\"": + self.state = self.afterDoctypePublicIdentifierState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["publicId"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["publicId"] += data + return True + + def doctypePublicIdentifierSingleQuotedState(self): + data = self.stream.char() + if data == "'": + self.state = self.afterDoctypePublicIdentifierState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["publicId"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["publicId"] += data + return True + + def afterDoctypePublicIdentifierState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.betweenDoctypePublicAndSystemIdentifiersState + elif data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == '"': + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierDoubleQuotedState + elif data == "'": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierSingleQuotedState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + return True + + def betweenDoctypePublicAndSystemIdentifiersState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == '"': + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierDoubleQuotedState + elif data == "'": + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierSingleQuotedState + elif data == EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + return True + + def afterDoctypeSystemKeywordState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeDoctypeSystemIdentifierState + elif data in ("'", '"'): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.stream.unget(data) + self.state = self.beforeDoctypeSystemIdentifierState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.stream.unget(data) + self.state = self.beforeDoctypeSystemIdentifierState + return True + + def beforeDoctypeSystemIdentifierState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == "\"": + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierDoubleQuotedState + elif data == "'": + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierSingleQuotedState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + return True + + def doctypeSystemIdentifierDoubleQuotedState(self): + data = self.stream.char() + if data == "\"": + self.state = self.afterDoctypeSystemIdentifierState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["systemId"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["systemId"] += data + return True + + def doctypeSystemIdentifierSingleQuotedState(self): + data = self.stream.char() + if data == "'": + self.state = self.afterDoctypeSystemIdentifierState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["systemId"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["systemId"] += data + return True + + def afterDoctypeSystemIdentifierState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.state = self.bogusDoctypeState + return True + + def bogusDoctypeState(self): + data = self.stream.char() + if data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + # XXX EMIT + self.stream.unget(data) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + pass + return True + + def cdataSectionState(self): + data = [] + while True: + data.append(self.stream.charsUntil("]")) + data.append(self.stream.charsUntil(">")) + char = self.stream.char() + if char == EOF: + break + else: + assert char == ">" + if data[-1][-2:] == "]]": + data[-1] = data[-1][:-2] + break + else: + data.append(char) + + data = "".join(data) # pylint:disable=redefined-variable-type + # Deal with null here rather than in the parser + nullCount = data.count("\u0000") + if nullCount > 0: + for _ in range(nullCount): + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + data = data.replace("\u0000", "\uFFFD") + if data: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": data}) + self.state = self.dataState + return True diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py new file mode 100644 index 000000000..a5ba4bf12 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py @@ -0,0 +1,14 @@ +from __future__ import absolute_import, division, unicode_literals + +from .py import Trie as PyTrie + +Trie = PyTrie + +# pylint:disable=wrong-import-position +try: + from .datrie import Trie as DATrie +except ImportError: + pass +else: + Trie = DATrie +# pylint:enable=wrong-import-position diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..18e61ea1d Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-37.pyc new file mode 100644 index 000000000..dc3152eb5 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/datrie.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/datrie.cpython-37.pyc new file mode 100644 index 000000000..f5861a470 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/datrie.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-37.pyc new file mode 100644 index 000000000..05cbd80d7 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py new file mode 100644 index 000000000..6b71975f0 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py @@ -0,0 +1,40 @@ +from __future__ import absolute_import, division, unicode_literals + +try: + from collections.abc import Mapping +except ImportError: # Python 2.7 + from collections import Mapping + + +class Trie(Mapping): + """Abstract base class for tries""" + + def keys(self, prefix=None): + # pylint:disable=arguments-differ + keys = super(Trie, self).keys() + + if prefix is None: + return set(keys) + + return {x for x in keys if x.startswith(prefix)} + + def has_keys_with_prefix(self, prefix): + for key in self.keys(): + if key.startswith(prefix): + return True + + return False + + def longest_prefix(self, prefix): + if prefix in self: + return prefix + + for i in range(1, len(prefix) + 1): + if prefix[:-i] in self: + return prefix[:-i] + + raise KeyError(prefix) + + def longest_prefix_item(self, prefix): + lprefix = self.longest_prefix(prefix) + return (lprefix, self[lprefix]) diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/datrie.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/datrie.py new file mode 100644 index 000000000..e2e5f8662 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/datrie.py @@ -0,0 +1,44 @@ +from __future__ import absolute_import, division, unicode_literals + +from datrie import Trie as DATrie +from pip._vendor.six import text_type + +from ._base import Trie as ABCTrie + + +class Trie(ABCTrie): + def __init__(self, data): + chars = set() + for key in data.keys(): + if not isinstance(key, text_type): + raise TypeError("All keys must be strings") + for char in key: + chars.add(char) + + self._data = DATrie("".join(chars)) + for key, value in data.items(): + self._data[key] = value + + def __contains__(self, key): + return key in self._data + + def __len__(self): + return len(self._data) + + def __iter__(self): + raise NotImplementedError() + + def __getitem__(self, key): + return self._data[key] + + def keys(self, prefix=None): + return self._data.keys(prefix) + + def has_keys_with_prefix(self, prefix): + return self._data.has_keys_with_prefix(prefix) + + def longest_prefix(self, prefix): + return self._data.longest_prefix(prefix) + + def longest_prefix_item(self, prefix): + return self._data.longest_prefix_item(prefix) diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py new file mode 100644 index 000000000..c178b219d --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py @@ -0,0 +1,67 @@ +from __future__ import absolute_import, division, unicode_literals +from pip._vendor.six import text_type + +from bisect import bisect_left + +from ._base import Trie as ABCTrie + + +class Trie(ABCTrie): + def __init__(self, data): + if not all(isinstance(x, text_type) for x in data.keys()): + raise TypeError("All keys must be strings") + + self._data = data + self._keys = sorted(data.keys()) + self._cachestr = "" + self._cachepoints = (0, len(data)) + + def __contains__(self, key): + return key in self._data + + def __len__(self): + return len(self._data) + + def __iter__(self): + return iter(self._data) + + def __getitem__(self, key): + return self._data[key] + + def keys(self, prefix=None): + if prefix is None or prefix == "" or not self._keys: + return set(self._keys) + + if prefix.startswith(self._cachestr): + lo, hi = self._cachepoints + start = i = bisect_left(self._keys, prefix, lo, hi) + else: + start = i = bisect_left(self._keys, prefix) + + keys = set() + if start == len(self._keys): + return keys + + while self._keys[i].startswith(prefix): + keys.add(self._keys[i]) + i += 1 + + self._cachestr = prefix + self._cachepoints = (start, i) + + return keys + + def has_keys_with_prefix(self, prefix): + if prefix in self._data: + return True + + if prefix.startswith(self._cachestr): + lo, hi = self._cachepoints + i = bisect_left(self._keys, prefix, lo, hi) + else: + i = bisect_left(self._keys, prefix) + + if i == len(self._keys): + return False + + return self._keys[i].startswith(prefix) diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/_utils.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/_utils.py new file mode 100644 index 000000000..0703afb38 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/_utils.py @@ -0,0 +1,124 @@ +from __future__ import absolute_import, division, unicode_literals + +from types import ModuleType + +from pip._vendor.six import text_type + +try: + import xml.etree.cElementTree as default_etree +except ImportError: + import xml.etree.ElementTree as default_etree + + +__all__ = ["default_etree", "MethodDispatcher", "isSurrogatePair", + "surrogatePairToCodepoint", "moduleFactoryFactory", + "supports_lone_surrogates"] + + +# Platforms not supporting lone surrogates (\uD800-\uDFFF) should be +# caught by the below test. In general this would be any platform +# using UTF-16 as its encoding of unicode strings, such as +# Jython. This is because UTF-16 itself is based on the use of such +# surrogates, and there is no mechanism to further escape such +# escapes. +try: + _x = eval('"\\uD800"') # pylint:disable=eval-used + if not isinstance(_x, text_type): + # We need this with u"" because of http://bugs.jython.org/issue2039 + _x = eval('u"\\uD800"') # pylint:disable=eval-used + assert isinstance(_x, text_type) +except: # pylint:disable=bare-except + supports_lone_surrogates = False +else: + supports_lone_surrogates = True + + +class MethodDispatcher(dict): + """Dict with 2 special properties: + + On initiation, keys that are lists, sets or tuples are converted to + multiple keys so accessing any one of the items in the original + list-like object returns the matching value + + md = MethodDispatcher({("foo", "bar"):"baz"}) + md["foo"] == "baz" + + A default value which can be set through the default attribute. + """ + + def __init__(self, items=()): + # Using _dictEntries instead of directly assigning to self is about + # twice as fast. Please do careful performance testing before changing + # anything here. + _dictEntries = [] + for name, value in items: + if isinstance(name, (list, tuple, frozenset, set)): + for item in name: + _dictEntries.append((item, value)) + else: + _dictEntries.append((name, value)) + dict.__init__(self, _dictEntries) + assert len(self) == len(_dictEntries) + self.default = None + + def __getitem__(self, key): + return dict.get(self, key, self.default) + + +# Some utility functions to deal with weirdness around UCS2 vs UCS4 +# python builds + +def isSurrogatePair(data): + return (len(data) == 2 and + ord(data[0]) >= 0xD800 and ord(data[0]) <= 0xDBFF and + ord(data[1]) >= 0xDC00 and ord(data[1]) <= 0xDFFF) + + +def surrogatePairToCodepoint(data): + char_val = (0x10000 + (ord(data[0]) - 0xD800) * 0x400 + + (ord(data[1]) - 0xDC00)) + return char_val + +# Module Factory Factory (no, this isn't Java, I know) +# Here to stop this being duplicated all over the place. + + +def moduleFactoryFactory(factory): + moduleCache = {} + + def moduleFactory(baseModule, *args, **kwargs): + if isinstance(ModuleType.__name__, type("")): + name = "_%s_factory" % baseModule.__name__ + else: + name = b"_%s_factory" % baseModule.__name__ + + kwargs_tuple = tuple(kwargs.items()) + + try: + return moduleCache[name][args][kwargs_tuple] + except KeyError: + mod = ModuleType(name) + objs = factory(baseModule, *args, **kwargs) + mod.__dict__.update(objs) + if "name" not in moduleCache: + moduleCache[name] = {} + if "args" not in moduleCache[name]: + moduleCache[name][args] = {} + if "kwargs" not in moduleCache[name][args]: + moduleCache[name][args][kwargs_tuple] = {} + moduleCache[name][args][kwargs_tuple] = mod + return mod + + return moduleFactory + + +def memoize(func): + cache = {} + + def wrapped(*args, **kwargs): + key = (tuple(args), tuple(kwargs.items())) + if key not in cache: + cache[key] = func(*args, **kwargs) + return cache[key] + + return wrapped diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/constants.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/constants.py new file mode 100644 index 000000000..1ff804190 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/constants.py @@ -0,0 +1,2947 @@ +from __future__ import absolute_import, division, unicode_literals + +import string + +EOF = None + +E = { + "null-character": + "Null character in input stream, replaced with U+FFFD.", + "invalid-codepoint": + "Invalid codepoint in stream.", + "incorrectly-placed-solidus": + "Solidus (/) incorrectly placed in tag.", + "incorrect-cr-newline-entity": + "Incorrect CR newline entity, replaced with LF.", + "illegal-windows-1252-entity": + "Entity used with illegal number (windows-1252 reference).", + "cant-convert-numeric-entity": + "Numeric entity couldn't be converted to character " + "(codepoint U+%(charAsInt)08x).", + "illegal-codepoint-for-numeric-entity": + "Numeric entity represents an illegal codepoint: " + "U+%(charAsInt)08x.", + "numeric-entity-without-semicolon": + "Numeric entity didn't end with ';'.", + "expected-numeric-entity-but-got-eof": + "Numeric entity expected. Got end of file instead.", + "expected-numeric-entity": + "Numeric entity expected but none found.", + "named-entity-without-semicolon": + "Named entity didn't end with ';'.", + "expected-named-entity": + "Named entity expected. Got none.", + "attributes-in-end-tag": + "End tag contains unexpected attributes.", + 'self-closing-flag-on-end-tag': + "End tag contains unexpected self-closing flag.", + "expected-tag-name-but-got-right-bracket": + "Expected tag name. Got '>' instead.", + "expected-tag-name-but-got-question-mark": + "Expected tag name. Got '?' instead. (HTML doesn't " + "support processing instructions.)", + "expected-tag-name": + "Expected tag name. Got something else instead", + "expected-closing-tag-but-got-right-bracket": + "Expected closing tag. Got '>' instead. Ignoring ''.", + "expected-closing-tag-but-got-eof": + "Expected closing tag. Unexpected end of file.", + "expected-closing-tag-but-got-char": + "Expected closing tag. Unexpected character '%(data)s' found.", + "eof-in-tag-name": + "Unexpected end of file in the tag name.", + "expected-attribute-name-but-got-eof": + "Unexpected end of file. Expected attribute name instead.", + "eof-in-attribute-name": + "Unexpected end of file in attribute name.", + "invalid-character-in-attribute-name": + "Invalid character in attribute name", + "duplicate-attribute": + "Dropped duplicate attribute on tag.", + "expected-end-of-tag-name-but-got-eof": + "Unexpected end of file. Expected = or end of tag.", + "expected-attribute-value-but-got-eof": + "Unexpected end of file. Expected attribute value.", + "expected-attribute-value-but-got-right-bracket": + "Expected attribute value. Got '>' instead.", + 'equals-in-unquoted-attribute-value': + "Unexpected = in unquoted attribute", + 'unexpected-character-in-unquoted-attribute-value': + "Unexpected character in unquoted attribute", + "invalid-character-after-attribute-name": + "Unexpected character after attribute name.", + "unexpected-character-after-attribute-value": + "Unexpected character after attribute value.", + "eof-in-attribute-value-double-quote": + "Unexpected end of file in attribute value (\").", + "eof-in-attribute-value-single-quote": + "Unexpected end of file in attribute value (').", + "eof-in-attribute-value-no-quotes": + "Unexpected end of file in attribute value.", + "unexpected-EOF-after-solidus-in-tag": + "Unexpected end of file in tag. Expected >", + "unexpected-character-after-solidus-in-tag": + "Unexpected character after / in tag. Expected >", + "expected-dashes-or-doctype": + "Expected '--' or 'DOCTYPE'. Not found.", + "unexpected-bang-after-double-dash-in-comment": + "Unexpected ! after -- in comment", + "unexpected-space-after-double-dash-in-comment": + "Unexpected space after -- in comment", + "incorrect-comment": + "Incorrect comment.", + "eof-in-comment": + "Unexpected end of file in comment.", + "eof-in-comment-end-dash": + "Unexpected end of file in comment (-)", + "unexpected-dash-after-double-dash-in-comment": + "Unexpected '-' after '--' found in comment.", + "eof-in-comment-double-dash": + "Unexpected end of file in comment (--).", + "eof-in-comment-end-space-state": + "Unexpected end of file in comment.", + "eof-in-comment-end-bang-state": + "Unexpected end of file in comment.", + "unexpected-char-in-comment": + "Unexpected character in comment found.", + "need-space-after-doctype": + "No space after literal string 'DOCTYPE'.", + "expected-doctype-name-but-got-right-bracket": + "Unexpected > character. Expected DOCTYPE name.", + "expected-doctype-name-but-got-eof": + "Unexpected end of file. Expected DOCTYPE name.", + "eof-in-doctype-name": + "Unexpected end of file in DOCTYPE name.", + "eof-in-doctype": + "Unexpected end of file in DOCTYPE.", + "expected-space-or-right-bracket-in-doctype": + "Expected space or '>'. Got '%(data)s'", + "unexpected-end-of-doctype": + "Unexpected end of DOCTYPE.", + "unexpected-char-in-doctype": + "Unexpected character in DOCTYPE.", + "eof-in-innerhtml": + "XXX innerHTML EOF", + "unexpected-doctype": + "Unexpected DOCTYPE. Ignored.", + "non-html-root": + "html needs to be the first start tag.", + "expected-doctype-but-got-eof": + "Unexpected End of file. Expected DOCTYPE.", + "unknown-doctype": + "Erroneous DOCTYPE.", + "expected-doctype-but-got-chars": + "Unexpected non-space characters. Expected DOCTYPE.", + "expected-doctype-but-got-start-tag": + "Unexpected start tag (%(name)s). Expected DOCTYPE.", + "expected-doctype-but-got-end-tag": + "Unexpected end tag (%(name)s). Expected DOCTYPE.", + "end-tag-after-implied-root": + "Unexpected end tag (%(name)s) after the (implied) root element.", + "expected-named-closing-tag-but-got-eof": + "Unexpected end of file. Expected end tag (%(name)s).", + "two-heads-are-not-better-than-one": + "Unexpected start tag head in existing head. Ignored.", + "unexpected-end-tag": + "Unexpected end tag (%(name)s). Ignored.", + "unexpected-start-tag-out-of-my-head": + "Unexpected start tag (%(name)s) that can be in head. Moved.", + "unexpected-start-tag": + "Unexpected start tag (%(name)s).", + "missing-end-tag": + "Missing end tag (%(name)s).", + "missing-end-tags": + "Missing end tags (%(name)s).", + "unexpected-start-tag-implies-end-tag": + "Unexpected start tag (%(startName)s) " + "implies end tag (%(endName)s).", + "unexpected-start-tag-treated-as": + "Unexpected start tag (%(originalName)s). Treated as %(newName)s.", + "deprecated-tag": + "Unexpected start tag %(name)s. Don't use it!", + "unexpected-start-tag-ignored": + "Unexpected start tag %(name)s. Ignored.", + "expected-one-end-tag-but-got-another": + "Unexpected end tag (%(gotName)s). " + "Missing end tag (%(expectedName)s).", + "end-tag-too-early": + "End tag (%(name)s) seen too early. Expected other end tag.", + "end-tag-too-early-named": + "Unexpected end tag (%(gotName)s). Expected end tag (%(expectedName)s).", + "end-tag-too-early-ignored": + "End tag (%(name)s) seen too early. Ignored.", + "adoption-agency-1.1": + "End tag (%(name)s) violates step 1, " + "paragraph 1 of the adoption agency algorithm.", + "adoption-agency-1.2": + "End tag (%(name)s) violates step 1, " + "paragraph 2 of the adoption agency algorithm.", + "adoption-agency-1.3": + "End tag (%(name)s) violates step 1, " + "paragraph 3 of the adoption agency algorithm.", + "adoption-agency-4.4": + "End tag (%(name)s) violates step 4, " + "paragraph 4 of the adoption agency algorithm.", + "unexpected-end-tag-treated-as": + "Unexpected end tag (%(originalName)s). Treated as %(newName)s.", + "no-end-tag": + "This element (%(name)s) has no end tag.", + "unexpected-implied-end-tag-in-table": + "Unexpected implied end tag (%(name)s) in the table phase.", + "unexpected-implied-end-tag-in-table-body": + "Unexpected implied end tag (%(name)s) in the table body phase.", + "unexpected-char-implies-table-voodoo": + "Unexpected non-space characters in " + "table context caused voodoo mode.", + "unexpected-hidden-input-in-table": + "Unexpected input with type hidden in table context.", + "unexpected-form-in-table": + "Unexpected form in table context.", + "unexpected-start-tag-implies-table-voodoo": + "Unexpected start tag (%(name)s) in " + "table context caused voodoo mode.", + "unexpected-end-tag-implies-table-voodoo": + "Unexpected end tag (%(name)s) in " + "table context caused voodoo mode.", + "unexpected-cell-in-table-body": + "Unexpected table cell start tag (%(name)s) " + "in the table body phase.", + "unexpected-cell-end-tag": + "Got table cell end tag (%(name)s) " + "while required end tags are missing.", + "unexpected-end-tag-in-table-body": + "Unexpected end tag (%(name)s) in the table body phase. Ignored.", + "unexpected-implied-end-tag-in-table-row": + "Unexpected implied end tag (%(name)s) in the table row phase.", + "unexpected-end-tag-in-table-row": + "Unexpected end tag (%(name)s) in the table row phase. Ignored.", + "unexpected-select-in-select": + "Unexpected select start tag in the select phase " + "treated as select end tag.", + "unexpected-input-in-select": + "Unexpected input start tag in the select phase.", + "unexpected-start-tag-in-select": + "Unexpected start tag token (%(name)s in the select phase. " + "Ignored.", + "unexpected-end-tag-in-select": + "Unexpected end tag (%(name)s) in the select phase. Ignored.", + "unexpected-table-element-start-tag-in-select-in-table": + "Unexpected table element start tag (%(name)s) in the select in table phase.", + "unexpected-table-element-end-tag-in-select-in-table": + "Unexpected table element end tag (%(name)s) in the select in table phase.", + "unexpected-char-after-body": + "Unexpected non-space characters in the after body phase.", + "unexpected-start-tag-after-body": + "Unexpected start tag token (%(name)s)" + " in the after body phase.", + "unexpected-end-tag-after-body": + "Unexpected end tag token (%(name)s)" + " in the after body phase.", + "unexpected-char-in-frameset": + "Unexpected characters in the frameset phase. Characters ignored.", + "unexpected-start-tag-in-frameset": + "Unexpected start tag token (%(name)s)" + " in the frameset phase. Ignored.", + "unexpected-frameset-in-frameset-innerhtml": + "Unexpected end tag token (frameset) " + "in the frameset phase (innerHTML).", + "unexpected-end-tag-in-frameset": + "Unexpected end tag token (%(name)s)" + " in the frameset phase. Ignored.", + "unexpected-char-after-frameset": + "Unexpected non-space characters in the " + "after frameset phase. Ignored.", + "unexpected-start-tag-after-frameset": + "Unexpected start tag (%(name)s)" + " in the after frameset phase. Ignored.", + "unexpected-end-tag-after-frameset": + "Unexpected end tag (%(name)s)" + " in the after frameset phase. Ignored.", + "unexpected-end-tag-after-body-innerhtml": + "Unexpected end tag after body(innerHtml)", + "expected-eof-but-got-char": + "Unexpected non-space characters. Expected end of file.", + "expected-eof-but-got-start-tag": + "Unexpected start tag (%(name)s)" + ". Expected end of file.", + "expected-eof-but-got-end-tag": + "Unexpected end tag (%(name)s)" + ". Expected end of file.", + "eof-in-table": + "Unexpected end of file. Expected table content.", + "eof-in-select": + "Unexpected end of file. Expected select content.", + "eof-in-frameset": + "Unexpected end of file. Expected frameset content.", + "eof-in-script-in-script": + "Unexpected end of file. Expected script content.", + "eof-in-foreign-lands": + "Unexpected end of file. Expected foreign content", + "non-void-element-with-trailing-solidus": + "Trailing solidus not allowed on element %(name)s", + "unexpected-html-element-in-foreign-content": + "Element %(name)s not allowed in a non-html context", + "unexpected-end-tag-before-html": + "Unexpected end tag (%(name)s) before html.", + "unexpected-inhead-noscript-tag": + "Element %(name)s not allowed in a inhead-noscript context", + "eof-in-head-noscript": + "Unexpected end of file. Expected inhead-noscript content", + "char-in-head-noscript": + "Unexpected non-space character. Expected inhead-noscript content", + "XXX-undefined-error": + "Undefined error (this sucks and should be fixed)", +} + +namespaces = { + "html": "http://www.w3.org/1999/xhtml", + "mathml": "http://www.w3.org/1998/Math/MathML", + "svg": "http://www.w3.org/2000/svg", + "xlink": "http://www.w3.org/1999/xlink", + "xml": "http://www.w3.org/XML/1998/namespace", + "xmlns": "http://www.w3.org/2000/xmlns/" +} + +scopingElements = frozenset([ + (namespaces["html"], "applet"), + (namespaces["html"], "caption"), + (namespaces["html"], "html"), + (namespaces["html"], "marquee"), + (namespaces["html"], "object"), + (namespaces["html"], "table"), + (namespaces["html"], "td"), + (namespaces["html"], "th"), + (namespaces["mathml"], "mi"), + (namespaces["mathml"], "mo"), + (namespaces["mathml"], "mn"), + (namespaces["mathml"], "ms"), + (namespaces["mathml"], "mtext"), + (namespaces["mathml"], "annotation-xml"), + (namespaces["svg"], "foreignObject"), + (namespaces["svg"], "desc"), + (namespaces["svg"], "title"), +]) + +formattingElements = frozenset([ + (namespaces["html"], "a"), + (namespaces["html"], "b"), + (namespaces["html"], "big"), + (namespaces["html"], "code"), + (namespaces["html"], "em"), + (namespaces["html"], "font"), + (namespaces["html"], "i"), + (namespaces["html"], "nobr"), + (namespaces["html"], "s"), + (namespaces["html"], "small"), + (namespaces["html"], "strike"), + (namespaces["html"], "strong"), + (namespaces["html"], "tt"), + (namespaces["html"], "u") +]) + +specialElements = frozenset([ + (namespaces["html"], "address"), + (namespaces["html"], "applet"), + (namespaces["html"], "area"), + (namespaces["html"], "article"), + (namespaces["html"], "aside"), + (namespaces["html"], "base"), + (namespaces["html"], "basefont"), + (namespaces["html"], "bgsound"), + (namespaces["html"], "blockquote"), + (namespaces["html"], "body"), + (namespaces["html"], "br"), + (namespaces["html"], "button"), + (namespaces["html"], "caption"), + (namespaces["html"], "center"), + (namespaces["html"], "col"), + (namespaces["html"], "colgroup"), + (namespaces["html"], "command"), + (namespaces["html"], "dd"), + (namespaces["html"], "details"), + (namespaces["html"], "dir"), + (namespaces["html"], "div"), + (namespaces["html"], "dl"), + (namespaces["html"], "dt"), + (namespaces["html"], "embed"), + (namespaces["html"], "fieldset"), + (namespaces["html"], "figure"), + (namespaces["html"], "footer"), + (namespaces["html"], "form"), + (namespaces["html"], "frame"), + (namespaces["html"], "frameset"), + (namespaces["html"], "h1"), + (namespaces["html"], "h2"), + (namespaces["html"], "h3"), + (namespaces["html"], "h4"), + (namespaces["html"], "h5"), + (namespaces["html"], "h6"), + (namespaces["html"], "head"), + (namespaces["html"], "header"), + (namespaces["html"], "hr"), + (namespaces["html"], "html"), + (namespaces["html"], "iframe"), + # Note that image is commented out in the spec as "this isn't an + # element that can end up on the stack, so it doesn't matter," + (namespaces["html"], "image"), + (namespaces["html"], "img"), + (namespaces["html"], "input"), + (namespaces["html"], "isindex"), + (namespaces["html"], "li"), + (namespaces["html"], "link"), + (namespaces["html"], "listing"), + (namespaces["html"], "marquee"), + (namespaces["html"], "menu"), + (namespaces["html"], "meta"), + (namespaces["html"], "nav"), + (namespaces["html"], "noembed"), + (namespaces["html"], "noframes"), + (namespaces["html"], "noscript"), + (namespaces["html"], "object"), + (namespaces["html"], "ol"), + (namespaces["html"], "p"), + (namespaces["html"], "param"), + (namespaces["html"], "plaintext"), + (namespaces["html"], "pre"), + (namespaces["html"], "script"), + (namespaces["html"], "section"), + (namespaces["html"], "select"), + (namespaces["html"], "style"), + (namespaces["html"], "table"), + (namespaces["html"], "tbody"), + (namespaces["html"], "td"), + (namespaces["html"], "textarea"), + (namespaces["html"], "tfoot"), + (namespaces["html"], "th"), + (namespaces["html"], "thead"), + (namespaces["html"], "title"), + (namespaces["html"], "tr"), + (namespaces["html"], "ul"), + (namespaces["html"], "wbr"), + (namespaces["html"], "xmp"), + (namespaces["svg"], "foreignObject") +]) + +htmlIntegrationPointElements = frozenset([ + (namespaces["mathml"], "annotation-xml"), + (namespaces["svg"], "foreignObject"), + (namespaces["svg"], "desc"), + (namespaces["svg"], "title") +]) + +mathmlTextIntegrationPointElements = frozenset([ + (namespaces["mathml"], "mi"), + (namespaces["mathml"], "mo"), + (namespaces["mathml"], "mn"), + (namespaces["mathml"], "ms"), + (namespaces["mathml"], "mtext") +]) + +adjustSVGAttributes = { + "attributename": "attributeName", + "attributetype": "attributeType", + "basefrequency": "baseFrequency", + "baseprofile": "baseProfile", + "calcmode": "calcMode", + "clippathunits": "clipPathUnits", + "contentscripttype": "contentScriptType", + "contentstyletype": "contentStyleType", + "diffuseconstant": "diffuseConstant", + "edgemode": "edgeMode", + "externalresourcesrequired": "externalResourcesRequired", + "filterres": "filterRes", + "filterunits": "filterUnits", + "glyphref": "glyphRef", + "gradienttransform": "gradientTransform", + "gradientunits": "gradientUnits", + "kernelmatrix": "kernelMatrix", + "kernelunitlength": "kernelUnitLength", + "keypoints": "keyPoints", + "keysplines": "keySplines", + "keytimes": "keyTimes", + "lengthadjust": "lengthAdjust", + "limitingconeangle": "limitingConeAngle", + "markerheight": "markerHeight", + "markerunits": "markerUnits", + "markerwidth": "markerWidth", + "maskcontentunits": "maskContentUnits", + "maskunits": "maskUnits", + "numoctaves": "numOctaves", + "pathlength": "pathLength", + "patterncontentunits": "patternContentUnits", + "patterntransform": "patternTransform", + "patternunits": "patternUnits", + "pointsatx": "pointsAtX", + "pointsaty": "pointsAtY", + "pointsatz": "pointsAtZ", + "preservealpha": "preserveAlpha", + "preserveaspectratio": "preserveAspectRatio", + "primitiveunits": "primitiveUnits", + "refx": "refX", + "refy": "refY", + "repeatcount": "repeatCount", + "repeatdur": "repeatDur", + "requiredextensions": "requiredExtensions", + "requiredfeatures": "requiredFeatures", + "specularconstant": "specularConstant", + "specularexponent": "specularExponent", + "spreadmethod": "spreadMethod", + "startoffset": "startOffset", + "stddeviation": "stdDeviation", + "stitchtiles": "stitchTiles", + "surfacescale": "surfaceScale", + "systemlanguage": "systemLanguage", + "tablevalues": "tableValues", + "targetx": "targetX", + "targety": "targetY", + "textlength": "textLength", + "viewbox": "viewBox", + "viewtarget": "viewTarget", + "xchannelselector": "xChannelSelector", + "ychannelselector": "yChannelSelector", + "zoomandpan": "zoomAndPan" +} + +adjustMathMLAttributes = {"definitionurl": "definitionURL"} + +adjustForeignAttributes = { + "xlink:actuate": ("xlink", "actuate", namespaces["xlink"]), + "xlink:arcrole": ("xlink", "arcrole", namespaces["xlink"]), + "xlink:href": ("xlink", "href", namespaces["xlink"]), + "xlink:role": ("xlink", "role", namespaces["xlink"]), + "xlink:show": ("xlink", "show", namespaces["xlink"]), + "xlink:title": ("xlink", "title", namespaces["xlink"]), + "xlink:type": ("xlink", "type", namespaces["xlink"]), + "xml:base": ("xml", "base", namespaces["xml"]), + "xml:lang": ("xml", "lang", namespaces["xml"]), + "xml:space": ("xml", "space", namespaces["xml"]), + "xmlns": (None, "xmlns", namespaces["xmlns"]), + "xmlns:xlink": ("xmlns", "xlink", namespaces["xmlns"]) +} + +unadjustForeignAttributes = dict([((ns, local), qname) for qname, (prefix, local, ns) in + adjustForeignAttributes.items()]) + +spaceCharacters = frozenset([ + "\t", + "\n", + "\u000C", + " ", + "\r" +]) + +tableInsertModeElements = frozenset([ + "table", + "tbody", + "tfoot", + "thead", + "tr" +]) + +asciiLowercase = frozenset(string.ascii_lowercase) +asciiUppercase = frozenset(string.ascii_uppercase) +asciiLetters = frozenset(string.ascii_letters) +digits = frozenset(string.digits) +hexDigits = frozenset(string.hexdigits) + +asciiUpper2Lower = dict([(ord(c), ord(c.lower())) + for c in string.ascii_uppercase]) + +# Heading elements need to be ordered +headingElements = ( + "h1", + "h2", + "h3", + "h4", + "h5", + "h6" +) + +voidElements = frozenset([ + "base", + "command", + "event-source", + "link", + "meta", + "hr", + "br", + "img", + "embed", + "param", + "area", + "col", + "input", + "source", + "track" +]) + +cdataElements = frozenset(['title', 'textarea']) + +rcdataElements = frozenset([ + 'style', + 'script', + 'xmp', + 'iframe', + 'noembed', + 'noframes', + 'noscript' +]) + +booleanAttributes = { + "": frozenset(["irrelevant", "itemscope"]), + "style": frozenset(["scoped"]), + "img": frozenset(["ismap"]), + "audio": frozenset(["autoplay", "controls"]), + "video": frozenset(["autoplay", "controls"]), + "script": frozenset(["defer", "async"]), + "details": frozenset(["open"]), + "datagrid": frozenset(["multiple", "disabled"]), + "command": frozenset(["hidden", "disabled", "checked", "default"]), + "hr": frozenset(["noshade"]), + "menu": frozenset(["autosubmit"]), + "fieldset": frozenset(["disabled", "readonly"]), + "option": frozenset(["disabled", "readonly", "selected"]), + "optgroup": frozenset(["disabled", "readonly"]), + "button": frozenset(["disabled", "autofocus"]), + "input": frozenset(["disabled", "readonly", "required", "autofocus", "checked", "ismap"]), + "select": frozenset(["disabled", "readonly", "autofocus", "multiple"]), + "output": frozenset(["disabled", "readonly"]), + "iframe": frozenset(["seamless"]), +} + +# entitiesWindows1252 has to be _ordered_ and needs to have an index. It +# therefore can't be a frozenset. +entitiesWindows1252 = ( + 8364, # 0x80 0x20AC EURO SIGN + 65533, # 0x81 UNDEFINED + 8218, # 0x82 0x201A SINGLE LOW-9 QUOTATION MARK + 402, # 0x83 0x0192 LATIN SMALL LETTER F WITH HOOK + 8222, # 0x84 0x201E DOUBLE LOW-9 QUOTATION MARK + 8230, # 0x85 0x2026 HORIZONTAL ELLIPSIS + 8224, # 0x86 0x2020 DAGGER + 8225, # 0x87 0x2021 DOUBLE DAGGER + 710, # 0x88 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT + 8240, # 0x89 0x2030 PER MILLE SIGN + 352, # 0x8A 0x0160 LATIN CAPITAL LETTER S WITH CARON + 8249, # 0x8B 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 338, # 0x8C 0x0152 LATIN CAPITAL LIGATURE OE + 65533, # 0x8D UNDEFINED + 381, # 0x8E 0x017D LATIN CAPITAL LETTER Z WITH CARON + 65533, # 0x8F UNDEFINED + 65533, # 0x90 UNDEFINED + 8216, # 0x91 0x2018 LEFT SINGLE QUOTATION MARK + 8217, # 0x92 0x2019 RIGHT SINGLE QUOTATION MARK + 8220, # 0x93 0x201C LEFT DOUBLE QUOTATION MARK + 8221, # 0x94 0x201D RIGHT DOUBLE QUOTATION MARK + 8226, # 0x95 0x2022 BULLET + 8211, # 0x96 0x2013 EN DASH + 8212, # 0x97 0x2014 EM DASH + 732, # 0x98 0x02DC SMALL TILDE + 8482, # 0x99 0x2122 TRADE MARK SIGN + 353, # 0x9A 0x0161 LATIN SMALL LETTER S WITH CARON + 8250, # 0x9B 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 339, # 0x9C 0x0153 LATIN SMALL LIGATURE OE + 65533, # 0x9D UNDEFINED + 382, # 0x9E 0x017E LATIN SMALL LETTER Z WITH CARON + 376 # 0x9F 0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS +) + +xmlEntities = frozenset(['lt;', 'gt;', 'amp;', 'apos;', 'quot;']) + +entities = { + "AElig": "\xc6", + "AElig;": "\xc6", + "AMP": "&", + "AMP;": "&", + "Aacute": "\xc1", + "Aacute;": "\xc1", + "Abreve;": "\u0102", + "Acirc": "\xc2", + "Acirc;": "\xc2", + "Acy;": "\u0410", + "Afr;": "\U0001d504", + "Agrave": "\xc0", + "Agrave;": "\xc0", + "Alpha;": "\u0391", + "Amacr;": "\u0100", + "And;": "\u2a53", + "Aogon;": "\u0104", + "Aopf;": "\U0001d538", + "ApplyFunction;": "\u2061", + "Aring": "\xc5", + "Aring;": "\xc5", + "Ascr;": "\U0001d49c", + "Assign;": "\u2254", + "Atilde": "\xc3", + "Atilde;": "\xc3", + "Auml": "\xc4", + "Auml;": "\xc4", + "Backslash;": "\u2216", + "Barv;": "\u2ae7", + "Barwed;": "\u2306", + "Bcy;": "\u0411", + "Because;": "\u2235", + "Bernoullis;": "\u212c", + "Beta;": "\u0392", + "Bfr;": "\U0001d505", + "Bopf;": "\U0001d539", + "Breve;": "\u02d8", + "Bscr;": "\u212c", + "Bumpeq;": "\u224e", + "CHcy;": "\u0427", + "COPY": "\xa9", + "COPY;": "\xa9", + "Cacute;": "\u0106", + "Cap;": "\u22d2", + "CapitalDifferentialD;": "\u2145", + "Cayleys;": "\u212d", + "Ccaron;": "\u010c", + "Ccedil": "\xc7", + "Ccedil;": "\xc7", + "Ccirc;": "\u0108", + "Cconint;": "\u2230", + "Cdot;": "\u010a", + "Cedilla;": "\xb8", + "CenterDot;": "\xb7", + "Cfr;": "\u212d", + "Chi;": "\u03a7", + "CircleDot;": "\u2299", + "CircleMinus;": "\u2296", + "CirclePlus;": "\u2295", + "CircleTimes;": "\u2297", + "ClockwiseContourIntegral;": "\u2232", + "CloseCurlyDoubleQuote;": "\u201d", + "CloseCurlyQuote;": "\u2019", + "Colon;": "\u2237", + "Colone;": "\u2a74", + "Congruent;": "\u2261", + "Conint;": "\u222f", + "ContourIntegral;": "\u222e", + "Copf;": "\u2102", + "Coproduct;": "\u2210", + "CounterClockwiseContourIntegral;": "\u2233", + "Cross;": "\u2a2f", + "Cscr;": "\U0001d49e", + "Cup;": "\u22d3", + "CupCap;": "\u224d", + "DD;": "\u2145", + "DDotrahd;": "\u2911", + "DJcy;": "\u0402", + "DScy;": "\u0405", + "DZcy;": "\u040f", + "Dagger;": "\u2021", + "Darr;": "\u21a1", + "Dashv;": "\u2ae4", + "Dcaron;": "\u010e", + "Dcy;": "\u0414", + "Del;": "\u2207", + "Delta;": "\u0394", + "Dfr;": "\U0001d507", + "DiacriticalAcute;": "\xb4", + "DiacriticalDot;": "\u02d9", + "DiacriticalDoubleAcute;": "\u02dd", + "DiacriticalGrave;": "`", + "DiacriticalTilde;": "\u02dc", + "Diamond;": "\u22c4", + "DifferentialD;": "\u2146", + "Dopf;": "\U0001d53b", + "Dot;": "\xa8", + "DotDot;": "\u20dc", + "DotEqual;": "\u2250", + "DoubleContourIntegral;": "\u222f", + "DoubleDot;": "\xa8", + "DoubleDownArrow;": "\u21d3", + "DoubleLeftArrow;": "\u21d0", + "DoubleLeftRightArrow;": "\u21d4", + "DoubleLeftTee;": "\u2ae4", + "DoubleLongLeftArrow;": "\u27f8", + "DoubleLongLeftRightArrow;": "\u27fa", + "DoubleLongRightArrow;": "\u27f9", + "DoubleRightArrow;": "\u21d2", + "DoubleRightTee;": "\u22a8", + "DoubleUpArrow;": "\u21d1", + "DoubleUpDownArrow;": "\u21d5", + "DoubleVerticalBar;": "\u2225", + "DownArrow;": "\u2193", + "DownArrowBar;": "\u2913", + "DownArrowUpArrow;": "\u21f5", + "DownBreve;": "\u0311", + "DownLeftRightVector;": "\u2950", + "DownLeftTeeVector;": "\u295e", + "DownLeftVector;": "\u21bd", + "DownLeftVectorBar;": "\u2956", + "DownRightTeeVector;": "\u295f", + "DownRightVector;": "\u21c1", + "DownRightVectorBar;": "\u2957", + "DownTee;": "\u22a4", + "DownTeeArrow;": "\u21a7", + "Downarrow;": "\u21d3", + "Dscr;": "\U0001d49f", + "Dstrok;": "\u0110", + "ENG;": "\u014a", + "ETH": "\xd0", + "ETH;": "\xd0", + "Eacute": "\xc9", + "Eacute;": "\xc9", + "Ecaron;": "\u011a", + "Ecirc": "\xca", + "Ecirc;": "\xca", + "Ecy;": "\u042d", + "Edot;": "\u0116", + "Efr;": "\U0001d508", + "Egrave": "\xc8", + "Egrave;": "\xc8", + "Element;": "\u2208", + "Emacr;": "\u0112", + "EmptySmallSquare;": "\u25fb", + "EmptyVerySmallSquare;": "\u25ab", + "Eogon;": "\u0118", + "Eopf;": "\U0001d53c", + "Epsilon;": "\u0395", + "Equal;": "\u2a75", + "EqualTilde;": "\u2242", + "Equilibrium;": "\u21cc", + "Escr;": "\u2130", + "Esim;": "\u2a73", + "Eta;": "\u0397", + "Euml": "\xcb", + "Euml;": "\xcb", + "Exists;": "\u2203", + "ExponentialE;": "\u2147", + "Fcy;": "\u0424", + "Ffr;": "\U0001d509", + "FilledSmallSquare;": "\u25fc", + "FilledVerySmallSquare;": "\u25aa", + "Fopf;": "\U0001d53d", + "ForAll;": "\u2200", + "Fouriertrf;": "\u2131", + "Fscr;": "\u2131", + "GJcy;": "\u0403", + "GT": ">", + "GT;": ">", + "Gamma;": "\u0393", + "Gammad;": "\u03dc", + "Gbreve;": "\u011e", + "Gcedil;": "\u0122", + "Gcirc;": "\u011c", + "Gcy;": "\u0413", + "Gdot;": "\u0120", + "Gfr;": "\U0001d50a", + "Gg;": "\u22d9", + "Gopf;": "\U0001d53e", + "GreaterEqual;": "\u2265", + "GreaterEqualLess;": "\u22db", + "GreaterFullEqual;": "\u2267", + "GreaterGreater;": "\u2aa2", + "GreaterLess;": "\u2277", + "GreaterSlantEqual;": "\u2a7e", + "GreaterTilde;": "\u2273", + "Gscr;": "\U0001d4a2", + "Gt;": "\u226b", + "HARDcy;": "\u042a", + "Hacek;": "\u02c7", + "Hat;": "^", + "Hcirc;": "\u0124", + "Hfr;": "\u210c", + "HilbertSpace;": "\u210b", + "Hopf;": "\u210d", + "HorizontalLine;": "\u2500", + "Hscr;": "\u210b", + "Hstrok;": "\u0126", + "HumpDownHump;": "\u224e", + "HumpEqual;": "\u224f", + "IEcy;": "\u0415", + "IJlig;": "\u0132", + "IOcy;": "\u0401", + "Iacute": "\xcd", + "Iacute;": "\xcd", + "Icirc": "\xce", + "Icirc;": "\xce", + "Icy;": "\u0418", + "Idot;": "\u0130", + "Ifr;": "\u2111", + "Igrave": "\xcc", + "Igrave;": "\xcc", + "Im;": "\u2111", + "Imacr;": "\u012a", + "ImaginaryI;": "\u2148", + "Implies;": "\u21d2", + "Int;": "\u222c", + "Integral;": "\u222b", + "Intersection;": "\u22c2", + "InvisibleComma;": "\u2063", + "InvisibleTimes;": "\u2062", + "Iogon;": "\u012e", + "Iopf;": "\U0001d540", + "Iota;": "\u0399", + "Iscr;": "\u2110", + "Itilde;": "\u0128", + "Iukcy;": "\u0406", + "Iuml": "\xcf", + "Iuml;": "\xcf", + "Jcirc;": "\u0134", + "Jcy;": "\u0419", + "Jfr;": "\U0001d50d", + "Jopf;": "\U0001d541", + "Jscr;": "\U0001d4a5", + "Jsercy;": "\u0408", + "Jukcy;": "\u0404", + "KHcy;": "\u0425", + "KJcy;": "\u040c", + "Kappa;": "\u039a", + "Kcedil;": "\u0136", + "Kcy;": "\u041a", + "Kfr;": "\U0001d50e", + "Kopf;": "\U0001d542", + "Kscr;": "\U0001d4a6", + "LJcy;": "\u0409", + "LT": "<", + "LT;": "<", + "Lacute;": "\u0139", + "Lambda;": "\u039b", + "Lang;": "\u27ea", + "Laplacetrf;": "\u2112", + "Larr;": "\u219e", + "Lcaron;": "\u013d", + "Lcedil;": "\u013b", + "Lcy;": "\u041b", + "LeftAngleBracket;": "\u27e8", + "LeftArrow;": "\u2190", + "LeftArrowBar;": "\u21e4", + "LeftArrowRightArrow;": "\u21c6", + "LeftCeiling;": "\u2308", + "LeftDoubleBracket;": "\u27e6", + "LeftDownTeeVector;": "\u2961", + "LeftDownVector;": "\u21c3", + "LeftDownVectorBar;": "\u2959", + "LeftFloor;": "\u230a", + "LeftRightArrow;": "\u2194", + "LeftRightVector;": "\u294e", + "LeftTee;": "\u22a3", + "LeftTeeArrow;": "\u21a4", + "LeftTeeVector;": "\u295a", + "LeftTriangle;": "\u22b2", + "LeftTriangleBar;": "\u29cf", + "LeftTriangleEqual;": "\u22b4", + "LeftUpDownVector;": "\u2951", + "LeftUpTeeVector;": "\u2960", + "LeftUpVector;": "\u21bf", + "LeftUpVectorBar;": "\u2958", + "LeftVector;": "\u21bc", + "LeftVectorBar;": "\u2952", + "Leftarrow;": "\u21d0", + "Leftrightarrow;": "\u21d4", + "LessEqualGreater;": "\u22da", + "LessFullEqual;": "\u2266", + "LessGreater;": "\u2276", + "LessLess;": "\u2aa1", + "LessSlantEqual;": "\u2a7d", + "LessTilde;": "\u2272", + "Lfr;": "\U0001d50f", + "Ll;": "\u22d8", + "Lleftarrow;": "\u21da", + "Lmidot;": "\u013f", + "LongLeftArrow;": "\u27f5", + "LongLeftRightArrow;": "\u27f7", + "LongRightArrow;": "\u27f6", + "Longleftarrow;": "\u27f8", + "Longleftrightarrow;": "\u27fa", + "Longrightarrow;": "\u27f9", + "Lopf;": "\U0001d543", + "LowerLeftArrow;": "\u2199", + "LowerRightArrow;": "\u2198", + "Lscr;": "\u2112", + "Lsh;": "\u21b0", + "Lstrok;": "\u0141", + "Lt;": "\u226a", + "Map;": "\u2905", + "Mcy;": "\u041c", + "MediumSpace;": "\u205f", + "Mellintrf;": "\u2133", + "Mfr;": "\U0001d510", + "MinusPlus;": "\u2213", + "Mopf;": "\U0001d544", + "Mscr;": "\u2133", + "Mu;": "\u039c", + "NJcy;": "\u040a", + "Nacute;": "\u0143", + "Ncaron;": "\u0147", + "Ncedil;": "\u0145", + "Ncy;": "\u041d", + "NegativeMediumSpace;": "\u200b", + "NegativeThickSpace;": "\u200b", + "NegativeThinSpace;": "\u200b", + "NegativeVeryThinSpace;": "\u200b", + "NestedGreaterGreater;": "\u226b", + "NestedLessLess;": "\u226a", + "NewLine;": "\n", + "Nfr;": "\U0001d511", + "NoBreak;": "\u2060", + "NonBreakingSpace;": "\xa0", + "Nopf;": "\u2115", + "Not;": "\u2aec", + "NotCongruent;": "\u2262", + "NotCupCap;": "\u226d", + "NotDoubleVerticalBar;": "\u2226", + "NotElement;": "\u2209", + "NotEqual;": "\u2260", + "NotEqualTilde;": "\u2242\u0338", + "NotExists;": "\u2204", + "NotGreater;": "\u226f", + "NotGreaterEqual;": "\u2271", + "NotGreaterFullEqual;": "\u2267\u0338", + "NotGreaterGreater;": "\u226b\u0338", + "NotGreaterLess;": "\u2279", + "NotGreaterSlantEqual;": "\u2a7e\u0338", + "NotGreaterTilde;": "\u2275", + "NotHumpDownHump;": "\u224e\u0338", + "NotHumpEqual;": "\u224f\u0338", + "NotLeftTriangle;": "\u22ea", + "NotLeftTriangleBar;": "\u29cf\u0338", + "NotLeftTriangleEqual;": "\u22ec", + "NotLess;": "\u226e", + "NotLessEqual;": "\u2270", + "NotLessGreater;": "\u2278", + "NotLessLess;": "\u226a\u0338", + "NotLessSlantEqual;": "\u2a7d\u0338", + "NotLessTilde;": "\u2274", + "NotNestedGreaterGreater;": "\u2aa2\u0338", + "NotNestedLessLess;": "\u2aa1\u0338", + "NotPrecedes;": "\u2280", + "NotPrecedesEqual;": "\u2aaf\u0338", + "NotPrecedesSlantEqual;": "\u22e0", + "NotReverseElement;": "\u220c", + "NotRightTriangle;": "\u22eb", + "NotRightTriangleBar;": "\u29d0\u0338", + "NotRightTriangleEqual;": "\u22ed", + "NotSquareSubset;": "\u228f\u0338", + "NotSquareSubsetEqual;": "\u22e2", + "NotSquareSuperset;": "\u2290\u0338", + "NotSquareSupersetEqual;": "\u22e3", + "NotSubset;": "\u2282\u20d2", + "NotSubsetEqual;": "\u2288", + "NotSucceeds;": "\u2281", + "NotSucceedsEqual;": "\u2ab0\u0338", + "NotSucceedsSlantEqual;": "\u22e1", + "NotSucceedsTilde;": "\u227f\u0338", + "NotSuperset;": "\u2283\u20d2", + "NotSupersetEqual;": "\u2289", + "NotTilde;": "\u2241", + "NotTildeEqual;": "\u2244", + "NotTildeFullEqual;": "\u2247", + "NotTildeTilde;": "\u2249", + "NotVerticalBar;": "\u2224", + "Nscr;": "\U0001d4a9", + "Ntilde": "\xd1", + "Ntilde;": "\xd1", + "Nu;": "\u039d", + "OElig;": "\u0152", + "Oacute": "\xd3", + "Oacute;": "\xd3", + "Ocirc": "\xd4", + "Ocirc;": "\xd4", + "Ocy;": "\u041e", + "Odblac;": "\u0150", + "Ofr;": "\U0001d512", + "Ograve": "\xd2", + "Ograve;": "\xd2", + "Omacr;": "\u014c", + "Omega;": "\u03a9", + "Omicron;": "\u039f", + "Oopf;": "\U0001d546", + "OpenCurlyDoubleQuote;": "\u201c", + "OpenCurlyQuote;": "\u2018", + "Or;": "\u2a54", + "Oscr;": "\U0001d4aa", + "Oslash": "\xd8", + "Oslash;": "\xd8", + "Otilde": "\xd5", + "Otilde;": "\xd5", + "Otimes;": "\u2a37", + "Ouml": "\xd6", + "Ouml;": "\xd6", + "OverBar;": "\u203e", + "OverBrace;": "\u23de", + "OverBracket;": "\u23b4", + "OverParenthesis;": "\u23dc", + "PartialD;": "\u2202", + "Pcy;": "\u041f", + "Pfr;": "\U0001d513", + "Phi;": "\u03a6", + "Pi;": "\u03a0", + "PlusMinus;": "\xb1", + "Poincareplane;": "\u210c", + "Popf;": "\u2119", + "Pr;": "\u2abb", + "Precedes;": "\u227a", + "PrecedesEqual;": "\u2aaf", + "PrecedesSlantEqual;": "\u227c", + "PrecedesTilde;": "\u227e", + "Prime;": "\u2033", + "Product;": "\u220f", + "Proportion;": "\u2237", + "Proportional;": "\u221d", + "Pscr;": "\U0001d4ab", + "Psi;": "\u03a8", + "QUOT": "\"", + "QUOT;": "\"", + "Qfr;": "\U0001d514", + "Qopf;": "\u211a", + "Qscr;": "\U0001d4ac", + "RBarr;": "\u2910", + "REG": "\xae", + "REG;": "\xae", + "Racute;": "\u0154", + "Rang;": "\u27eb", + "Rarr;": "\u21a0", + "Rarrtl;": "\u2916", + "Rcaron;": "\u0158", + "Rcedil;": "\u0156", + "Rcy;": "\u0420", + "Re;": "\u211c", + "ReverseElement;": "\u220b", + "ReverseEquilibrium;": "\u21cb", + "ReverseUpEquilibrium;": "\u296f", + "Rfr;": "\u211c", + "Rho;": "\u03a1", + "RightAngleBracket;": "\u27e9", + "RightArrow;": "\u2192", + "RightArrowBar;": "\u21e5", + "RightArrowLeftArrow;": "\u21c4", + "RightCeiling;": "\u2309", + "RightDoubleBracket;": "\u27e7", + "RightDownTeeVector;": "\u295d", + "RightDownVector;": "\u21c2", + "RightDownVectorBar;": "\u2955", + "RightFloor;": "\u230b", + "RightTee;": "\u22a2", + "RightTeeArrow;": "\u21a6", + "RightTeeVector;": "\u295b", + "RightTriangle;": "\u22b3", + "RightTriangleBar;": "\u29d0", + "RightTriangleEqual;": "\u22b5", + "RightUpDownVector;": "\u294f", + "RightUpTeeVector;": "\u295c", + "RightUpVector;": "\u21be", + "RightUpVectorBar;": "\u2954", + "RightVector;": "\u21c0", + "RightVectorBar;": "\u2953", + "Rightarrow;": "\u21d2", + "Ropf;": "\u211d", + "RoundImplies;": "\u2970", + "Rrightarrow;": "\u21db", + "Rscr;": "\u211b", + "Rsh;": "\u21b1", + "RuleDelayed;": "\u29f4", + "SHCHcy;": "\u0429", + "SHcy;": "\u0428", + "SOFTcy;": "\u042c", + "Sacute;": "\u015a", + "Sc;": "\u2abc", + "Scaron;": "\u0160", + "Scedil;": "\u015e", + "Scirc;": "\u015c", + "Scy;": "\u0421", + "Sfr;": "\U0001d516", + "ShortDownArrow;": "\u2193", + "ShortLeftArrow;": "\u2190", + "ShortRightArrow;": "\u2192", + "ShortUpArrow;": "\u2191", + "Sigma;": "\u03a3", + "SmallCircle;": "\u2218", + "Sopf;": "\U0001d54a", + "Sqrt;": "\u221a", + "Square;": "\u25a1", + "SquareIntersection;": "\u2293", + "SquareSubset;": "\u228f", + "SquareSubsetEqual;": "\u2291", + "SquareSuperset;": "\u2290", + "SquareSupersetEqual;": "\u2292", + "SquareUnion;": "\u2294", + "Sscr;": "\U0001d4ae", + "Star;": "\u22c6", + "Sub;": "\u22d0", + "Subset;": "\u22d0", + "SubsetEqual;": "\u2286", + "Succeeds;": "\u227b", + "SucceedsEqual;": "\u2ab0", + "SucceedsSlantEqual;": "\u227d", + "SucceedsTilde;": "\u227f", + "SuchThat;": "\u220b", + "Sum;": "\u2211", + "Sup;": "\u22d1", + "Superset;": "\u2283", + "SupersetEqual;": "\u2287", + "Supset;": "\u22d1", + "THORN": "\xde", + "THORN;": "\xde", + "TRADE;": "\u2122", + "TSHcy;": "\u040b", + "TScy;": "\u0426", + "Tab;": "\t", + "Tau;": "\u03a4", + "Tcaron;": "\u0164", + "Tcedil;": "\u0162", + "Tcy;": "\u0422", + "Tfr;": "\U0001d517", + "Therefore;": "\u2234", + "Theta;": "\u0398", + "ThickSpace;": "\u205f\u200a", + "ThinSpace;": "\u2009", + "Tilde;": "\u223c", + "TildeEqual;": "\u2243", + "TildeFullEqual;": "\u2245", + "TildeTilde;": "\u2248", + "Topf;": "\U0001d54b", + "TripleDot;": "\u20db", + "Tscr;": "\U0001d4af", + "Tstrok;": "\u0166", + "Uacute": "\xda", + "Uacute;": "\xda", + "Uarr;": "\u219f", + "Uarrocir;": "\u2949", + "Ubrcy;": "\u040e", + "Ubreve;": "\u016c", + "Ucirc": "\xdb", + "Ucirc;": "\xdb", + "Ucy;": "\u0423", + "Udblac;": "\u0170", + "Ufr;": "\U0001d518", + "Ugrave": "\xd9", + "Ugrave;": "\xd9", + "Umacr;": "\u016a", + "UnderBar;": "_", + "UnderBrace;": "\u23df", + "UnderBracket;": "\u23b5", + "UnderParenthesis;": "\u23dd", + "Union;": "\u22c3", + "UnionPlus;": "\u228e", + "Uogon;": "\u0172", + "Uopf;": "\U0001d54c", + "UpArrow;": "\u2191", + "UpArrowBar;": "\u2912", + "UpArrowDownArrow;": "\u21c5", + "UpDownArrow;": "\u2195", + "UpEquilibrium;": "\u296e", + "UpTee;": "\u22a5", + "UpTeeArrow;": "\u21a5", + "Uparrow;": "\u21d1", + "Updownarrow;": "\u21d5", + "UpperLeftArrow;": "\u2196", + "UpperRightArrow;": "\u2197", + "Upsi;": "\u03d2", + "Upsilon;": "\u03a5", + "Uring;": "\u016e", + "Uscr;": "\U0001d4b0", + "Utilde;": "\u0168", + "Uuml": "\xdc", + "Uuml;": "\xdc", + "VDash;": "\u22ab", + "Vbar;": "\u2aeb", + "Vcy;": "\u0412", + "Vdash;": "\u22a9", + "Vdashl;": "\u2ae6", + "Vee;": "\u22c1", + "Verbar;": "\u2016", + "Vert;": "\u2016", + "VerticalBar;": "\u2223", + "VerticalLine;": "|", + "VerticalSeparator;": "\u2758", + "VerticalTilde;": "\u2240", + "VeryThinSpace;": "\u200a", + "Vfr;": "\U0001d519", + "Vopf;": "\U0001d54d", + "Vscr;": "\U0001d4b1", + "Vvdash;": "\u22aa", + "Wcirc;": "\u0174", + "Wedge;": "\u22c0", + "Wfr;": "\U0001d51a", + "Wopf;": "\U0001d54e", + "Wscr;": "\U0001d4b2", + "Xfr;": "\U0001d51b", + "Xi;": "\u039e", + "Xopf;": "\U0001d54f", + "Xscr;": "\U0001d4b3", + "YAcy;": "\u042f", + "YIcy;": "\u0407", + "YUcy;": "\u042e", + "Yacute": "\xdd", + "Yacute;": "\xdd", + "Ycirc;": "\u0176", + "Ycy;": "\u042b", + "Yfr;": "\U0001d51c", + "Yopf;": "\U0001d550", + "Yscr;": "\U0001d4b4", + "Yuml;": "\u0178", + "ZHcy;": "\u0416", + "Zacute;": "\u0179", + "Zcaron;": "\u017d", + "Zcy;": "\u0417", + "Zdot;": "\u017b", + "ZeroWidthSpace;": "\u200b", + "Zeta;": "\u0396", + "Zfr;": "\u2128", + "Zopf;": "\u2124", + "Zscr;": "\U0001d4b5", + "aacute": "\xe1", + "aacute;": "\xe1", + "abreve;": "\u0103", + "ac;": "\u223e", + "acE;": "\u223e\u0333", + "acd;": "\u223f", + "acirc": "\xe2", + "acirc;": "\xe2", + "acute": "\xb4", + "acute;": "\xb4", + "acy;": "\u0430", + "aelig": "\xe6", + "aelig;": "\xe6", + "af;": "\u2061", + "afr;": "\U0001d51e", + "agrave": "\xe0", + "agrave;": "\xe0", + "alefsym;": "\u2135", + "aleph;": "\u2135", + "alpha;": "\u03b1", + "amacr;": "\u0101", + "amalg;": "\u2a3f", + "amp": "&", + "amp;": "&", + "and;": "\u2227", + "andand;": "\u2a55", + "andd;": "\u2a5c", + "andslope;": "\u2a58", + "andv;": "\u2a5a", + "ang;": "\u2220", + "ange;": "\u29a4", + "angle;": "\u2220", + "angmsd;": "\u2221", + "angmsdaa;": "\u29a8", + "angmsdab;": "\u29a9", + "angmsdac;": "\u29aa", + "angmsdad;": "\u29ab", + "angmsdae;": "\u29ac", + "angmsdaf;": "\u29ad", + "angmsdag;": "\u29ae", + "angmsdah;": "\u29af", + "angrt;": "\u221f", + "angrtvb;": "\u22be", + "angrtvbd;": "\u299d", + "angsph;": "\u2222", + "angst;": "\xc5", + "angzarr;": "\u237c", + "aogon;": "\u0105", + "aopf;": "\U0001d552", + "ap;": "\u2248", + "apE;": "\u2a70", + "apacir;": "\u2a6f", + "ape;": "\u224a", + "apid;": "\u224b", + "apos;": "'", + "approx;": "\u2248", + "approxeq;": "\u224a", + "aring": "\xe5", + "aring;": "\xe5", + "ascr;": "\U0001d4b6", + "ast;": "*", + "asymp;": "\u2248", + "asympeq;": "\u224d", + "atilde": "\xe3", + "atilde;": "\xe3", + "auml": "\xe4", + "auml;": "\xe4", + "awconint;": "\u2233", + "awint;": "\u2a11", + "bNot;": "\u2aed", + "backcong;": "\u224c", + "backepsilon;": "\u03f6", + "backprime;": "\u2035", + "backsim;": "\u223d", + "backsimeq;": "\u22cd", + "barvee;": "\u22bd", + "barwed;": "\u2305", + "barwedge;": "\u2305", + "bbrk;": "\u23b5", + "bbrktbrk;": "\u23b6", + "bcong;": "\u224c", + "bcy;": "\u0431", + "bdquo;": "\u201e", + "becaus;": "\u2235", + "because;": "\u2235", + "bemptyv;": "\u29b0", + "bepsi;": "\u03f6", + "bernou;": "\u212c", + "beta;": "\u03b2", + "beth;": "\u2136", + "between;": "\u226c", + "bfr;": "\U0001d51f", + "bigcap;": "\u22c2", + "bigcirc;": "\u25ef", + "bigcup;": "\u22c3", + "bigodot;": "\u2a00", + "bigoplus;": "\u2a01", + "bigotimes;": "\u2a02", + "bigsqcup;": "\u2a06", + "bigstar;": "\u2605", + "bigtriangledown;": "\u25bd", + "bigtriangleup;": "\u25b3", + "biguplus;": "\u2a04", + "bigvee;": "\u22c1", + "bigwedge;": "\u22c0", + "bkarow;": "\u290d", + "blacklozenge;": "\u29eb", + "blacksquare;": "\u25aa", + "blacktriangle;": "\u25b4", + "blacktriangledown;": "\u25be", + "blacktriangleleft;": "\u25c2", + "blacktriangleright;": "\u25b8", + "blank;": "\u2423", + "blk12;": "\u2592", + "blk14;": "\u2591", + "blk34;": "\u2593", + "block;": "\u2588", + "bne;": "=\u20e5", + "bnequiv;": "\u2261\u20e5", + "bnot;": "\u2310", + "bopf;": "\U0001d553", + "bot;": "\u22a5", + "bottom;": "\u22a5", + "bowtie;": "\u22c8", + "boxDL;": "\u2557", + "boxDR;": "\u2554", + "boxDl;": "\u2556", + "boxDr;": "\u2553", + "boxH;": "\u2550", + "boxHD;": "\u2566", + "boxHU;": "\u2569", + "boxHd;": "\u2564", + "boxHu;": "\u2567", + "boxUL;": "\u255d", + "boxUR;": "\u255a", + "boxUl;": "\u255c", + "boxUr;": "\u2559", + "boxV;": "\u2551", + "boxVH;": "\u256c", + "boxVL;": "\u2563", + "boxVR;": "\u2560", + "boxVh;": "\u256b", + "boxVl;": "\u2562", + "boxVr;": "\u255f", + "boxbox;": "\u29c9", + "boxdL;": "\u2555", + "boxdR;": "\u2552", + "boxdl;": "\u2510", + "boxdr;": "\u250c", + "boxh;": "\u2500", + "boxhD;": "\u2565", + "boxhU;": "\u2568", + "boxhd;": "\u252c", + "boxhu;": "\u2534", + "boxminus;": "\u229f", + "boxplus;": "\u229e", + "boxtimes;": "\u22a0", + "boxuL;": "\u255b", + "boxuR;": "\u2558", + "boxul;": "\u2518", + "boxur;": "\u2514", + "boxv;": "\u2502", + "boxvH;": "\u256a", + "boxvL;": "\u2561", + "boxvR;": "\u255e", + "boxvh;": "\u253c", + "boxvl;": "\u2524", + "boxvr;": "\u251c", + "bprime;": "\u2035", + "breve;": "\u02d8", + "brvbar": "\xa6", + "brvbar;": "\xa6", + "bscr;": "\U0001d4b7", + "bsemi;": "\u204f", + "bsim;": "\u223d", + "bsime;": "\u22cd", + "bsol;": "\\", + "bsolb;": "\u29c5", + "bsolhsub;": "\u27c8", + "bull;": "\u2022", + "bullet;": "\u2022", + "bump;": "\u224e", + "bumpE;": "\u2aae", + "bumpe;": "\u224f", + "bumpeq;": "\u224f", + "cacute;": "\u0107", + "cap;": "\u2229", + "capand;": "\u2a44", + "capbrcup;": "\u2a49", + "capcap;": "\u2a4b", + "capcup;": "\u2a47", + "capdot;": "\u2a40", + "caps;": "\u2229\ufe00", + "caret;": "\u2041", + "caron;": "\u02c7", + "ccaps;": "\u2a4d", + "ccaron;": "\u010d", + "ccedil": "\xe7", + "ccedil;": "\xe7", + "ccirc;": "\u0109", + "ccups;": "\u2a4c", + "ccupssm;": "\u2a50", + "cdot;": "\u010b", + "cedil": "\xb8", + "cedil;": "\xb8", + "cemptyv;": "\u29b2", + "cent": "\xa2", + "cent;": "\xa2", + "centerdot;": "\xb7", + "cfr;": "\U0001d520", + "chcy;": "\u0447", + "check;": "\u2713", + "checkmark;": "\u2713", + "chi;": "\u03c7", + "cir;": "\u25cb", + "cirE;": "\u29c3", + "circ;": "\u02c6", + "circeq;": "\u2257", + "circlearrowleft;": "\u21ba", + "circlearrowright;": "\u21bb", + "circledR;": "\xae", + "circledS;": "\u24c8", + "circledast;": "\u229b", + "circledcirc;": "\u229a", + "circleddash;": "\u229d", + "cire;": "\u2257", + "cirfnint;": "\u2a10", + "cirmid;": "\u2aef", + "cirscir;": "\u29c2", + "clubs;": "\u2663", + "clubsuit;": "\u2663", + "colon;": ":", + "colone;": "\u2254", + "coloneq;": "\u2254", + "comma;": ",", + "commat;": "@", + "comp;": "\u2201", + "compfn;": "\u2218", + "complement;": "\u2201", + "complexes;": "\u2102", + "cong;": "\u2245", + "congdot;": "\u2a6d", + "conint;": "\u222e", + "copf;": "\U0001d554", + "coprod;": "\u2210", + "copy": "\xa9", + "copy;": "\xa9", + "copysr;": "\u2117", + "crarr;": "\u21b5", + "cross;": "\u2717", + "cscr;": "\U0001d4b8", + "csub;": "\u2acf", + "csube;": "\u2ad1", + "csup;": "\u2ad0", + "csupe;": "\u2ad2", + "ctdot;": "\u22ef", + "cudarrl;": "\u2938", + "cudarrr;": "\u2935", + "cuepr;": "\u22de", + "cuesc;": "\u22df", + "cularr;": "\u21b6", + "cularrp;": "\u293d", + "cup;": "\u222a", + "cupbrcap;": "\u2a48", + "cupcap;": "\u2a46", + "cupcup;": "\u2a4a", + "cupdot;": "\u228d", + "cupor;": "\u2a45", + "cups;": "\u222a\ufe00", + "curarr;": "\u21b7", + "curarrm;": "\u293c", + "curlyeqprec;": "\u22de", + "curlyeqsucc;": "\u22df", + "curlyvee;": "\u22ce", + "curlywedge;": "\u22cf", + "curren": "\xa4", + "curren;": "\xa4", + "curvearrowleft;": "\u21b6", + "curvearrowright;": "\u21b7", + "cuvee;": "\u22ce", + "cuwed;": "\u22cf", + "cwconint;": "\u2232", + "cwint;": "\u2231", + "cylcty;": "\u232d", + "dArr;": "\u21d3", + "dHar;": "\u2965", + "dagger;": "\u2020", + "daleth;": "\u2138", + "darr;": "\u2193", + "dash;": "\u2010", + "dashv;": "\u22a3", + "dbkarow;": "\u290f", + "dblac;": "\u02dd", + "dcaron;": "\u010f", + "dcy;": "\u0434", + "dd;": "\u2146", + "ddagger;": "\u2021", + "ddarr;": "\u21ca", + "ddotseq;": "\u2a77", + "deg": "\xb0", + "deg;": "\xb0", + "delta;": "\u03b4", + "demptyv;": "\u29b1", + "dfisht;": "\u297f", + "dfr;": "\U0001d521", + "dharl;": "\u21c3", + "dharr;": "\u21c2", + "diam;": "\u22c4", + "diamond;": "\u22c4", + "diamondsuit;": "\u2666", + "diams;": "\u2666", + "die;": "\xa8", + "digamma;": "\u03dd", + "disin;": "\u22f2", + "div;": "\xf7", + "divide": "\xf7", + "divide;": "\xf7", + "divideontimes;": "\u22c7", + "divonx;": "\u22c7", + "djcy;": "\u0452", + "dlcorn;": "\u231e", + "dlcrop;": "\u230d", + "dollar;": "$", + "dopf;": "\U0001d555", + "dot;": "\u02d9", + "doteq;": "\u2250", + "doteqdot;": "\u2251", + "dotminus;": "\u2238", + "dotplus;": "\u2214", + "dotsquare;": "\u22a1", + "doublebarwedge;": "\u2306", + "downarrow;": "\u2193", + "downdownarrows;": "\u21ca", + "downharpoonleft;": "\u21c3", + "downharpoonright;": "\u21c2", + "drbkarow;": "\u2910", + "drcorn;": "\u231f", + "drcrop;": "\u230c", + "dscr;": "\U0001d4b9", + "dscy;": "\u0455", + "dsol;": "\u29f6", + "dstrok;": "\u0111", + "dtdot;": "\u22f1", + "dtri;": "\u25bf", + "dtrif;": "\u25be", + "duarr;": "\u21f5", + "duhar;": "\u296f", + "dwangle;": "\u29a6", + "dzcy;": "\u045f", + "dzigrarr;": "\u27ff", + "eDDot;": "\u2a77", + "eDot;": "\u2251", + "eacute": "\xe9", + "eacute;": "\xe9", + "easter;": "\u2a6e", + "ecaron;": "\u011b", + "ecir;": "\u2256", + "ecirc": "\xea", + "ecirc;": "\xea", + "ecolon;": "\u2255", + "ecy;": "\u044d", + "edot;": "\u0117", + "ee;": "\u2147", + "efDot;": "\u2252", + "efr;": "\U0001d522", + "eg;": "\u2a9a", + "egrave": "\xe8", + "egrave;": "\xe8", + "egs;": "\u2a96", + "egsdot;": "\u2a98", + "el;": "\u2a99", + "elinters;": "\u23e7", + "ell;": "\u2113", + "els;": "\u2a95", + "elsdot;": "\u2a97", + "emacr;": "\u0113", + "empty;": "\u2205", + "emptyset;": "\u2205", + "emptyv;": "\u2205", + "emsp13;": "\u2004", + "emsp14;": "\u2005", + "emsp;": "\u2003", + "eng;": "\u014b", + "ensp;": "\u2002", + "eogon;": "\u0119", + "eopf;": "\U0001d556", + "epar;": "\u22d5", + "eparsl;": "\u29e3", + "eplus;": "\u2a71", + "epsi;": "\u03b5", + "epsilon;": "\u03b5", + "epsiv;": "\u03f5", + "eqcirc;": "\u2256", + "eqcolon;": "\u2255", + "eqsim;": "\u2242", + "eqslantgtr;": "\u2a96", + "eqslantless;": "\u2a95", + "equals;": "=", + "equest;": "\u225f", + "equiv;": "\u2261", + "equivDD;": "\u2a78", + "eqvparsl;": "\u29e5", + "erDot;": "\u2253", + "erarr;": "\u2971", + "escr;": "\u212f", + "esdot;": "\u2250", + "esim;": "\u2242", + "eta;": "\u03b7", + "eth": "\xf0", + "eth;": "\xf0", + "euml": "\xeb", + "euml;": "\xeb", + "euro;": "\u20ac", + "excl;": "!", + "exist;": "\u2203", + "expectation;": "\u2130", + "exponentiale;": "\u2147", + "fallingdotseq;": "\u2252", + "fcy;": "\u0444", + "female;": "\u2640", + "ffilig;": "\ufb03", + "fflig;": "\ufb00", + "ffllig;": "\ufb04", + "ffr;": "\U0001d523", + "filig;": "\ufb01", + "fjlig;": "fj", + "flat;": "\u266d", + "fllig;": "\ufb02", + "fltns;": "\u25b1", + "fnof;": "\u0192", + "fopf;": "\U0001d557", + "forall;": "\u2200", + "fork;": "\u22d4", + "forkv;": "\u2ad9", + "fpartint;": "\u2a0d", + "frac12": "\xbd", + "frac12;": "\xbd", + "frac13;": "\u2153", + "frac14": "\xbc", + "frac14;": "\xbc", + "frac15;": "\u2155", + "frac16;": "\u2159", + "frac18;": "\u215b", + "frac23;": "\u2154", + "frac25;": "\u2156", + "frac34": "\xbe", + "frac34;": "\xbe", + "frac35;": "\u2157", + "frac38;": "\u215c", + "frac45;": "\u2158", + "frac56;": "\u215a", + "frac58;": "\u215d", + "frac78;": "\u215e", + "frasl;": "\u2044", + "frown;": "\u2322", + "fscr;": "\U0001d4bb", + "gE;": "\u2267", + "gEl;": "\u2a8c", + "gacute;": "\u01f5", + "gamma;": "\u03b3", + "gammad;": "\u03dd", + "gap;": "\u2a86", + "gbreve;": "\u011f", + "gcirc;": "\u011d", + "gcy;": "\u0433", + "gdot;": "\u0121", + "ge;": "\u2265", + "gel;": "\u22db", + "geq;": "\u2265", + "geqq;": "\u2267", + "geqslant;": "\u2a7e", + "ges;": "\u2a7e", + "gescc;": "\u2aa9", + "gesdot;": "\u2a80", + "gesdoto;": "\u2a82", + "gesdotol;": "\u2a84", + "gesl;": "\u22db\ufe00", + "gesles;": "\u2a94", + "gfr;": "\U0001d524", + "gg;": "\u226b", + "ggg;": "\u22d9", + "gimel;": "\u2137", + "gjcy;": "\u0453", + "gl;": "\u2277", + "glE;": "\u2a92", + "gla;": "\u2aa5", + "glj;": "\u2aa4", + "gnE;": "\u2269", + "gnap;": "\u2a8a", + "gnapprox;": "\u2a8a", + "gne;": "\u2a88", + "gneq;": "\u2a88", + "gneqq;": "\u2269", + "gnsim;": "\u22e7", + "gopf;": "\U0001d558", + "grave;": "`", + "gscr;": "\u210a", + "gsim;": "\u2273", + "gsime;": "\u2a8e", + "gsiml;": "\u2a90", + "gt": ">", + "gt;": ">", + "gtcc;": "\u2aa7", + "gtcir;": "\u2a7a", + "gtdot;": "\u22d7", + "gtlPar;": "\u2995", + "gtquest;": "\u2a7c", + "gtrapprox;": "\u2a86", + "gtrarr;": "\u2978", + "gtrdot;": "\u22d7", + "gtreqless;": "\u22db", + "gtreqqless;": "\u2a8c", + "gtrless;": "\u2277", + "gtrsim;": "\u2273", + "gvertneqq;": "\u2269\ufe00", + "gvnE;": "\u2269\ufe00", + "hArr;": "\u21d4", + "hairsp;": "\u200a", + "half;": "\xbd", + "hamilt;": "\u210b", + "hardcy;": "\u044a", + "harr;": "\u2194", + "harrcir;": "\u2948", + "harrw;": "\u21ad", + "hbar;": "\u210f", + "hcirc;": "\u0125", + "hearts;": "\u2665", + "heartsuit;": "\u2665", + "hellip;": "\u2026", + "hercon;": "\u22b9", + "hfr;": "\U0001d525", + "hksearow;": "\u2925", + "hkswarow;": "\u2926", + "hoarr;": "\u21ff", + "homtht;": "\u223b", + "hookleftarrow;": "\u21a9", + "hookrightarrow;": "\u21aa", + "hopf;": "\U0001d559", + "horbar;": "\u2015", + "hscr;": "\U0001d4bd", + "hslash;": "\u210f", + "hstrok;": "\u0127", + "hybull;": "\u2043", + "hyphen;": "\u2010", + "iacute": "\xed", + "iacute;": "\xed", + "ic;": "\u2063", + "icirc": "\xee", + "icirc;": "\xee", + "icy;": "\u0438", + "iecy;": "\u0435", + "iexcl": "\xa1", + "iexcl;": "\xa1", + "iff;": "\u21d4", + "ifr;": "\U0001d526", + "igrave": "\xec", + "igrave;": "\xec", + "ii;": "\u2148", + "iiiint;": "\u2a0c", + "iiint;": "\u222d", + "iinfin;": "\u29dc", + "iiota;": "\u2129", + "ijlig;": "\u0133", + "imacr;": "\u012b", + "image;": "\u2111", + "imagline;": "\u2110", + "imagpart;": "\u2111", + "imath;": "\u0131", + "imof;": "\u22b7", + "imped;": "\u01b5", + "in;": "\u2208", + "incare;": "\u2105", + "infin;": "\u221e", + "infintie;": "\u29dd", + "inodot;": "\u0131", + "int;": "\u222b", + "intcal;": "\u22ba", + "integers;": "\u2124", + "intercal;": "\u22ba", + "intlarhk;": "\u2a17", + "intprod;": "\u2a3c", + "iocy;": "\u0451", + "iogon;": "\u012f", + "iopf;": "\U0001d55a", + "iota;": "\u03b9", + "iprod;": "\u2a3c", + "iquest": "\xbf", + "iquest;": "\xbf", + "iscr;": "\U0001d4be", + "isin;": "\u2208", + "isinE;": "\u22f9", + "isindot;": "\u22f5", + "isins;": "\u22f4", + "isinsv;": "\u22f3", + "isinv;": "\u2208", + "it;": "\u2062", + "itilde;": "\u0129", + "iukcy;": "\u0456", + "iuml": "\xef", + "iuml;": "\xef", + "jcirc;": "\u0135", + "jcy;": "\u0439", + "jfr;": "\U0001d527", + "jmath;": "\u0237", + "jopf;": "\U0001d55b", + "jscr;": "\U0001d4bf", + "jsercy;": "\u0458", + "jukcy;": "\u0454", + "kappa;": "\u03ba", + "kappav;": "\u03f0", + "kcedil;": "\u0137", + "kcy;": "\u043a", + "kfr;": "\U0001d528", + "kgreen;": "\u0138", + "khcy;": "\u0445", + "kjcy;": "\u045c", + "kopf;": "\U0001d55c", + "kscr;": "\U0001d4c0", + "lAarr;": "\u21da", + "lArr;": "\u21d0", + "lAtail;": "\u291b", + "lBarr;": "\u290e", + "lE;": "\u2266", + "lEg;": "\u2a8b", + "lHar;": "\u2962", + "lacute;": "\u013a", + "laemptyv;": "\u29b4", + "lagran;": "\u2112", + "lambda;": "\u03bb", + "lang;": "\u27e8", + "langd;": "\u2991", + "langle;": "\u27e8", + "lap;": "\u2a85", + "laquo": "\xab", + "laquo;": "\xab", + "larr;": "\u2190", + "larrb;": "\u21e4", + "larrbfs;": "\u291f", + "larrfs;": "\u291d", + "larrhk;": "\u21a9", + "larrlp;": "\u21ab", + "larrpl;": "\u2939", + "larrsim;": "\u2973", + "larrtl;": "\u21a2", + "lat;": "\u2aab", + "latail;": "\u2919", + "late;": "\u2aad", + "lates;": "\u2aad\ufe00", + "lbarr;": "\u290c", + "lbbrk;": "\u2772", + "lbrace;": "{", + "lbrack;": "[", + "lbrke;": "\u298b", + "lbrksld;": "\u298f", + "lbrkslu;": "\u298d", + "lcaron;": "\u013e", + "lcedil;": "\u013c", + "lceil;": "\u2308", + "lcub;": "{", + "lcy;": "\u043b", + "ldca;": "\u2936", + "ldquo;": "\u201c", + "ldquor;": "\u201e", + "ldrdhar;": "\u2967", + "ldrushar;": "\u294b", + "ldsh;": "\u21b2", + "le;": "\u2264", + "leftarrow;": "\u2190", + "leftarrowtail;": "\u21a2", + "leftharpoondown;": "\u21bd", + "leftharpoonup;": "\u21bc", + "leftleftarrows;": "\u21c7", + "leftrightarrow;": "\u2194", + "leftrightarrows;": "\u21c6", + "leftrightharpoons;": "\u21cb", + "leftrightsquigarrow;": "\u21ad", + "leftthreetimes;": "\u22cb", + "leg;": "\u22da", + "leq;": "\u2264", + "leqq;": "\u2266", + "leqslant;": "\u2a7d", + "les;": "\u2a7d", + "lescc;": "\u2aa8", + "lesdot;": "\u2a7f", + "lesdoto;": "\u2a81", + "lesdotor;": "\u2a83", + "lesg;": "\u22da\ufe00", + "lesges;": "\u2a93", + "lessapprox;": "\u2a85", + "lessdot;": "\u22d6", + "lesseqgtr;": "\u22da", + "lesseqqgtr;": "\u2a8b", + "lessgtr;": "\u2276", + "lesssim;": "\u2272", + "lfisht;": "\u297c", + "lfloor;": "\u230a", + "lfr;": "\U0001d529", + "lg;": "\u2276", + "lgE;": "\u2a91", + "lhard;": "\u21bd", + "lharu;": "\u21bc", + "lharul;": "\u296a", + "lhblk;": "\u2584", + "ljcy;": "\u0459", + "ll;": "\u226a", + "llarr;": "\u21c7", + "llcorner;": "\u231e", + "llhard;": "\u296b", + "lltri;": "\u25fa", + "lmidot;": "\u0140", + "lmoust;": "\u23b0", + "lmoustache;": "\u23b0", + "lnE;": "\u2268", + "lnap;": "\u2a89", + "lnapprox;": "\u2a89", + "lne;": "\u2a87", + "lneq;": "\u2a87", + "lneqq;": "\u2268", + "lnsim;": "\u22e6", + "loang;": "\u27ec", + "loarr;": "\u21fd", + "lobrk;": "\u27e6", + "longleftarrow;": "\u27f5", + "longleftrightarrow;": "\u27f7", + "longmapsto;": "\u27fc", + "longrightarrow;": "\u27f6", + "looparrowleft;": "\u21ab", + "looparrowright;": "\u21ac", + "lopar;": "\u2985", + "lopf;": "\U0001d55d", + "loplus;": "\u2a2d", + "lotimes;": "\u2a34", + "lowast;": "\u2217", + "lowbar;": "_", + "loz;": "\u25ca", + "lozenge;": "\u25ca", + "lozf;": "\u29eb", + "lpar;": "(", + "lparlt;": "\u2993", + "lrarr;": "\u21c6", + "lrcorner;": "\u231f", + "lrhar;": "\u21cb", + "lrhard;": "\u296d", + "lrm;": "\u200e", + "lrtri;": "\u22bf", + "lsaquo;": "\u2039", + "lscr;": "\U0001d4c1", + "lsh;": "\u21b0", + "lsim;": "\u2272", + "lsime;": "\u2a8d", + "lsimg;": "\u2a8f", + "lsqb;": "[", + "lsquo;": "\u2018", + "lsquor;": "\u201a", + "lstrok;": "\u0142", + "lt": "<", + "lt;": "<", + "ltcc;": "\u2aa6", + "ltcir;": "\u2a79", + "ltdot;": "\u22d6", + "lthree;": "\u22cb", + "ltimes;": "\u22c9", + "ltlarr;": "\u2976", + "ltquest;": "\u2a7b", + "ltrPar;": "\u2996", + "ltri;": "\u25c3", + "ltrie;": "\u22b4", + "ltrif;": "\u25c2", + "lurdshar;": "\u294a", + "luruhar;": "\u2966", + "lvertneqq;": "\u2268\ufe00", + "lvnE;": "\u2268\ufe00", + "mDDot;": "\u223a", + "macr": "\xaf", + "macr;": "\xaf", + "male;": "\u2642", + "malt;": "\u2720", + "maltese;": "\u2720", + "map;": "\u21a6", + "mapsto;": "\u21a6", + "mapstodown;": "\u21a7", + "mapstoleft;": "\u21a4", + "mapstoup;": "\u21a5", + "marker;": "\u25ae", + "mcomma;": "\u2a29", + "mcy;": "\u043c", + "mdash;": "\u2014", + "measuredangle;": "\u2221", + "mfr;": "\U0001d52a", + "mho;": "\u2127", + "micro": "\xb5", + "micro;": "\xb5", + "mid;": "\u2223", + "midast;": "*", + "midcir;": "\u2af0", + "middot": "\xb7", + "middot;": "\xb7", + "minus;": "\u2212", + "minusb;": "\u229f", + "minusd;": "\u2238", + "minusdu;": "\u2a2a", + "mlcp;": "\u2adb", + "mldr;": "\u2026", + "mnplus;": "\u2213", + "models;": "\u22a7", + "mopf;": "\U0001d55e", + "mp;": "\u2213", + "mscr;": "\U0001d4c2", + "mstpos;": "\u223e", + "mu;": "\u03bc", + "multimap;": "\u22b8", + "mumap;": "\u22b8", + "nGg;": "\u22d9\u0338", + "nGt;": "\u226b\u20d2", + "nGtv;": "\u226b\u0338", + "nLeftarrow;": "\u21cd", + "nLeftrightarrow;": "\u21ce", + "nLl;": "\u22d8\u0338", + "nLt;": "\u226a\u20d2", + "nLtv;": "\u226a\u0338", + "nRightarrow;": "\u21cf", + "nVDash;": "\u22af", + "nVdash;": "\u22ae", + "nabla;": "\u2207", + "nacute;": "\u0144", + "nang;": "\u2220\u20d2", + "nap;": "\u2249", + "napE;": "\u2a70\u0338", + "napid;": "\u224b\u0338", + "napos;": "\u0149", + "napprox;": "\u2249", + "natur;": "\u266e", + "natural;": "\u266e", + "naturals;": "\u2115", + "nbsp": "\xa0", + "nbsp;": "\xa0", + "nbump;": "\u224e\u0338", + "nbumpe;": "\u224f\u0338", + "ncap;": "\u2a43", + "ncaron;": "\u0148", + "ncedil;": "\u0146", + "ncong;": "\u2247", + "ncongdot;": "\u2a6d\u0338", + "ncup;": "\u2a42", + "ncy;": "\u043d", + "ndash;": "\u2013", + "ne;": "\u2260", + "neArr;": "\u21d7", + "nearhk;": "\u2924", + "nearr;": "\u2197", + "nearrow;": "\u2197", + "nedot;": "\u2250\u0338", + "nequiv;": "\u2262", + "nesear;": "\u2928", + "nesim;": "\u2242\u0338", + "nexist;": "\u2204", + "nexists;": "\u2204", + "nfr;": "\U0001d52b", + "ngE;": "\u2267\u0338", + "nge;": "\u2271", + "ngeq;": "\u2271", + "ngeqq;": "\u2267\u0338", + "ngeqslant;": "\u2a7e\u0338", + "nges;": "\u2a7e\u0338", + "ngsim;": "\u2275", + "ngt;": "\u226f", + "ngtr;": "\u226f", + "nhArr;": "\u21ce", + "nharr;": "\u21ae", + "nhpar;": "\u2af2", + "ni;": "\u220b", + "nis;": "\u22fc", + "nisd;": "\u22fa", + "niv;": "\u220b", + "njcy;": "\u045a", + "nlArr;": "\u21cd", + "nlE;": "\u2266\u0338", + "nlarr;": "\u219a", + "nldr;": "\u2025", + "nle;": "\u2270", + "nleftarrow;": "\u219a", + "nleftrightarrow;": "\u21ae", + "nleq;": "\u2270", + "nleqq;": "\u2266\u0338", + "nleqslant;": "\u2a7d\u0338", + "nles;": "\u2a7d\u0338", + "nless;": "\u226e", + "nlsim;": "\u2274", + "nlt;": "\u226e", + "nltri;": "\u22ea", + "nltrie;": "\u22ec", + "nmid;": "\u2224", + "nopf;": "\U0001d55f", + "not": "\xac", + "not;": "\xac", + "notin;": "\u2209", + "notinE;": "\u22f9\u0338", + "notindot;": "\u22f5\u0338", + "notinva;": "\u2209", + "notinvb;": "\u22f7", + "notinvc;": "\u22f6", + "notni;": "\u220c", + "notniva;": "\u220c", + "notnivb;": "\u22fe", + "notnivc;": "\u22fd", + "npar;": "\u2226", + "nparallel;": "\u2226", + "nparsl;": "\u2afd\u20e5", + "npart;": "\u2202\u0338", + "npolint;": "\u2a14", + "npr;": "\u2280", + "nprcue;": "\u22e0", + "npre;": "\u2aaf\u0338", + "nprec;": "\u2280", + "npreceq;": "\u2aaf\u0338", + "nrArr;": "\u21cf", + "nrarr;": "\u219b", + "nrarrc;": "\u2933\u0338", + "nrarrw;": "\u219d\u0338", + "nrightarrow;": "\u219b", + "nrtri;": "\u22eb", + "nrtrie;": "\u22ed", + "nsc;": "\u2281", + "nsccue;": "\u22e1", + "nsce;": "\u2ab0\u0338", + "nscr;": "\U0001d4c3", + "nshortmid;": "\u2224", + "nshortparallel;": "\u2226", + "nsim;": "\u2241", + "nsime;": "\u2244", + "nsimeq;": "\u2244", + "nsmid;": "\u2224", + "nspar;": "\u2226", + "nsqsube;": "\u22e2", + "nsqsupe;": "\u22e3", + "nsub;": "\u2284", + "nsubE;": "\u2ac5\u0338", + "nsube;": "\u2288", + "nsubset;": "\u2282\u20d2", + "nsubseteq;": "\u2288", + "nsubseteqq;": "\u2ac5\u0338", + "nsucc;": "\u2281", + "nsucceq;": "\u2ab0\u0338", + "nsup;": "\u2285", + "nsupE;": "\u2ac6\u0338", + "nsupe;": "\u2289", + "nsupset;": "\u2283\u20d2", + "nsupseteq;": "\u2289", + "nsupseteqq;": "\u2ac6\u0338", + "ntgl;": "\u2279", + "ntilde": "\xf1", + "ntilde;": "\xf1", + "ntlg;": "\u2278", + "ntriangleleft;": "\u22ea", + "ntrianglelefteq;": "\u22ec", + "ntriangleright;": "\u22eb", + "ntrianglerighteq;": "\u22ed", + "nu;": "\u03bd", + "num;": "#", + "numero;": "\u2116", + "numsp;": "\u2007", + "nvDash;": "\u22ad", + "nvHarr;": "\u2904", + "nvap;": "\u224d\u20d2", + "nvdash;": "\u22ac", + "nvge;": "\u2265\u20d2", + "nvgt;": ">\u20d2", + "nvinfin;": "\u29de", + "nvlArr;": "\u2902", + "nvle;": "\u2264\u20d2", + "nvlt;": "<\u20d2", + "nvltrie;": "\u22b4\u20d2", + "nvrArr;": "\u2903", + "nvrtrie;": "\u22b5\u20d2", + "nvsim;": "\u223c\u20d2", + "nwArr;": "\u21d6", + "nwarhk;": "\u2923", + "nwarr;": "\u2196", + "nwarrow;": "\u2196", + "nwnear;": "\u2927", + "oS;": "\u24c8", + "oacute": "\xf3", + "oacute;": "\xf3", + "oast;": "\u229b", + "ocir;": "\u229a", + "ocirc": "\xf4", + "ocirc;": "\xf4", + "ocy;": "\u043e", + "odash;": "\u229d", + "odblac;": "\u0151", + "odiv;": "\u2a38", + "odot;": "\u2299", + "odsold;": "\u29bc", + "oelig;": "\u0153", + "ofcir;": "\u29bf", + "ofr;": "\U0001d52c", + "ogon;": "\u02db", + "ograve": "\xf2", + "ograve;": "\xf2", + "ogt;": "\u29c1", + "ohbar;": "\u29b5", + "ohm;": "\u03a9", + "oint;": "\u222e", + "olarr;": "\u21ba", + "olcir;": "\u29be", + "olcross;": "\u29bb", + "oline;": "\u203e", + "olt;": "\u29c0", + "omacr;": "\u014d", + "omega;": "\u03c9", + "omicron;": "\u03bf", + "omid;": "\u29b6", + "ominus;": "\u2296", + "oopf;": "\U0001d560", + "opar;": "\u29b7", + "operp;": "\u29b9", + "oplus;": "\u2295", + "or;": "\u2228", + "orarr;": "\u21bb", + "ord;": "\u2a5d", + "order;": "\u2134", + "orderof;": "\u2134", + "ordf": "\xaa", + "ordf;": "\xaa", + "ordm": "\xba", + "ordm;": "\xba", + "origof;": "\u22b6", + "oror;": "\u2a56", + "orslope;": "\u2a57", + "orv;": "\u2a5b", + "oscr;": "\u2134", + "oslash": "\xf8", + "oslash;": "\xf8", + "osol;": "\u2298", + "otilde": "\xf5", + "otilde;": "\xf5", + "otimes;": "\u2297", + "otimesas;": "\u2a36", + "ouml": "\xf6", + "ouml;": "\xf6", + "ovbar;": "\u233d", + "par;": "\u2225", + "para": "\xb6", + "para;": "\xb6", + "parallel;": "\u2225", + "parsim;": "\u2af3", + "parsl;": "\u2afd", + "part;": "\u2202", + "pcy;": "\u043f", + "percnt;": "%", + "period;": ".", + "permil;": "\u2030", + "perp;": "\u22a5", + "pertenk;": "\u2031", + "pfr;": "\U0001d52d", + "phi;": "\u03c6", + "phiv;": "\u03d5", + "phmmat;": "\u2133", + "phone;": "\u260e", + "pi;": "\u03c0", + "pitchfork;": "\u22d4", + "piv;": "\u03d6", + "planck;": "\u210f", + "planckh;": "\u210e", + "plankv;": "\u210f", + "plus;": "+", + "plusacir;": "\u2a23", + "plusb;": "\u229e", + "pluscir;": "\u2a22", + "plusdo;": "\u2214", + "plusdu;": "\u2a25", + "pluse;": "\u2a72", + "plusmn": "\xb1", + "plusmn;": "\xb1", + "plussim;": "\u2a26", + "plustwo;": "\u2a27", + "pm;": "\xb1", + "pointint;": "\u2a15", + "popf;": "\U0001d561", + "pound": "\xa3", + "pound;": "\xa3", + "pr;": "\u227a", + "prE;": "\u2ab3", + "prap;": "\u2ab7", + "prcue;": "\u227c", + "pre;": "\u2aaf", + "prec;": "\u227a", + "precapprox;": "\u2ab7", + "preccurlyeq;": "\u227c", + "preceq;": "\u2aaf", + "precnapprox;": "\u2ab9", + "precneqq;": "\u2ab5", + "precnsim;": "\u22e8", + "precsim;": "\u227e", + "prime;": "\u2032", + "primes;": "\u2119", + "prnE;": "\u2ab5", + "prnap;": "\u2ab9", + "prnsim;": "\u22e8", + "prod;": "\u220f", + "profalar;": "\u232e", + "profline;": "\u2312", + "profsurf;": "\u2313", + "prop;": "\u221d", + "propto;": "\u221d", + "prsim;": "\u227e", + "prurel;": "\u22b0", + "pscr;": "\U0001d4c5", + "psi;": "\u03c8", + "puncsp;": "\u2008", + "qfr;": "\U0001d52e", + "qint;": "\u2a0c", + "qopf;": "\U0001d562", + "qprime;": "\u2057", + "qscr;": "\U0001d4c6", + "quaternions;": "\u210d", + "quatint;": "\u2a16", + "quest;": "?", + "questeq;": "\u225f", + "quot": "\"", + "quot;": "\"", + "rAarr;": "\u21db", + "rArr;": "\u21d2", + "rAtail;": "\u291c", + "rBarr;": "\u290f", + "rHar;": "\u2964", + "race;": "\u223d\u0331", + "racute;": "\u0155", + "radic;": "\u221a", + "raemptyv;": "\u29b3", + "rang;": "\u27e9", + "rangd;": "\u2992", + "range;": "\u29a5", + "rangle;": "\u27e9", + "raquo": "\xbb", + "raquo;": "\xbb", + "rarr;": "\u2192", + "rarrap;": "\u2975", + "rarrb;": "\u21e5", + "rarrbfs;": "\u2920", + "rarrc;": "\u2933", + "rarrfs;": "\u291e", + "rarrhk;": "\u21aa", + "rarrlp;": "\u21ac", + "rarrpl;": "\u2945", + "rarrsim;": "\u2974", + "rarrtl;": "\u21a3", + "rarrw;": "\u219d", + "ratail;": "\u291a", + "ratio;": "\u2236", + "rationals;": "\u211a", + "rbarr;": "\u290d", + "rbbrk;": "\u2773", + "rbrace;": "}", + "rbrack;": "]", + "rbrke;": "\u298c", + "rbrksld;": "\u298e", + "rbrkslu;": "\u2990", + "rcaron;": "\u0159", + "rcedil;": "\u0157", + "rceil;": "\u2309", + "rcub;": "}", + "rcy;": "\u0440", + "rdca;": "\u2937", + "rdldhar;": "\u2969", + "rdquo;": "\u201d", + "rdquor;": "\u201d", + "rdsh;": "\u21b3", + "real;": "\u211c", + "realine;": "\u211b", + "realpart;": "\u211c", + "reals;": "\u211d", + "rect;": "\u25ad", + "reg": "\xae", + "reg;": "\xae", + "rfisht;": "\u297d", + "rfloor;": "\u230b", + "rfr;": "\U0001d52f", + "rhard;": "\u21c1", + "rharu;": "\u21c0", + "rharul;": "\u296c", + "rho;": "\u03c1", + "rhov;": "\u03f1", + "rightarrow;": "\u2192", + "rightarrowtail;": "\u21a3", + "rightharpoondown;": "\u21c1", + "rightharpoonup;": "\u21c0", + "rightleftarrows;": "\u21c4", + "rightleftharpoons;": "\u21cc", + "rightrightarrows;": "\u21c9", + "rightsquigarrow;": "\u219d", + "rightthreetimes;": "\u22cc", + "ring;": "\u02da", + "risingdotseq;": "\u2253", + "rlarr;": "\u21c4", + "rlhar;": "\u21cc", + "rlm;": "\u200f", + "rmoust;": "\u23b1", + "rmoustache;": "\u23b1", + "rnmid;": "\u2aee", + "roang;": "\u27ed", + "roarr;": "\u21fe", + "robrk;": "\u27e7", + "ropar;": "\u2986", + "ropf;": "\U0001d563", + "roplus;": "\u2a2e", + "rotimes;": "\u2a35", + "rpar;": ")", + "rpargt;": "\u2994", + "rppolint;": "\u2a12", + "rrarr;": "\u21c9", + "rsaquo;": "\u203a", + "rscr;": "\U0001d4c7", + "rsh;": "\u21b1", + "rsqb;": "]", + "rsquo;": "\u2019", + "rsquor;": "\u2019", + "rthree;": "\u22cc", + "rtimes;": "\u22ca", + "rtri;": "\u25b9", + "rtrie;": "\u22b5", + "rtrif;": "\u25b8", + "rtriltri;": "\u29ce", + "ruluhar;": "\u2968", + "rx;": "\u211e", + "sacute;": "\u015b", + "sbquo;": "\u201a", + "sc;": "\u227b", + "scE;": "\u2ab4", + "scap;": "\u2ab8", + "scaron;": "\u0161", + "sccue;": "\u227d", + "sce;": "\u2ab0", + "scedil;": "\u015f", + "scirc;": "\u015d", + "scnE;": "\u2ab6", + "scnap;": "\u2aba", + "scnsim;": "\u22e9", + "scpolint;": "\u2a13", + "scsim;": "\u227f", + "scy;": "\u0441", + "sdot;": "\u22c5", + "sdotb;": "\u22a1", + "sdote;": "\u2a66", + "seArr;": "\u21d8", + "searhk;": "\u2925", + "searr;": "\u2198", + "searrow;": "\u2198", + "sect": "\xa7", + "sect;": "\xa7", + "semi;": ";", + "seswar;": "\u2929", + "setminus;": "\u2216", + "setmn;": "\u2216", + "sext;": "\u2736", + "sfr;": "\U0001d530", + "sfrown;": "\u2322", + "sharp;": "\u266f", + "shchcy;": "\u0449", + "shcy;": "\u0448", + "shortmid;": "\u2223", + "shortparallel;": "\u2225", + "shy": "\xad", + "shy;": "\xad", + "sigma;": "\u03c3", + "sigmaf;": "\u03c2", + "sigmav;": "\u03c2", + "sim;": "\u223c", + "simdot;": "\u2a6a", + "sime;": "\u2243", + "simeq;": "\u2243", + "simg;": "\u2a9e", + "simgE;": "\u2aa0", + "siml;": "\u2a9d", + "simlE;": "\u2a9f", + "simne;": "\u2246", + "simplus;": "\u2a24", + "simrarr;": "\u2972", + "slarr;": "\u2190", + "smallsetminus;": "\u2216", + "smashp;": "\u2a33", + "smeparsl;": "\u29e4", + "smid;": "\u2223", + "smile;": "\u2323", + "smt;": "\u2aaa", + "smte;": "\u2aac", + "smtes;": "\u2aac\ufe00", + "softcy;": "\u044c", + "sol;": "/", + "solb;": "\u29c4", + "solbar;": "\u233f", + "sopf;": "\U0001d564", + "spades;": "\u2660", + "spadesuit;": "\u2660", + "spar;": "\u2225", + "sqcap;": "\u2293", + "sqcaps;": "\u2293\ufe00", + "sqcup;": "\u2294", + "sqcups;": "\u2294\ufe00", + "sqsub;": "\u228f", + "sqsube;": "\u2291", + "sqsubset;": "\u228f", + "sqsubseteq;": "\u2291", + "sqsup;": "\u2290", + "sqsupe;": "\u2292", + "sqsupset;": "\u2290", + "sqsupseteq;": "\u2292", + "squ;": "\u25a1", + "square;": "\u25a1", + "squarf;": "\u25aa", + "squf;": "\u25aa", + "srarr;": "\u2192", + "sscr;": "\U0001d4c8", + "ssetmn;": "\u2216", + "ssmile;": "\u2323", + "sstarf;": "\u22c6", + "star;": "\u2606", + "starf;": "\u2605", + "straightepsilon;": "\u03f5", + "straightphi;": "\u03d5", + "strns;": "\xaf", + "sub;": "\u2282", + "subE;": "\u2ac5", + "subdot;": "\u2abd", + "sube;": "\u2286", + "subedot;": "\u2ac3", + "submult;": "\u2ac1", + "subnE;": "\u2acb", + "subne;": "\u228a", + "subplus;": "\u2abf", + "subrarr;": "\u2979", + "subset;": "\u2282", + "subseteq;": "\u2286", + "subseteqq;": "\u2ac5", + "subsetneq;": "\u228a", + "subsetneqq;": "\u2acb", + "subsim;": "\u2ac7", + "subsub;": "\u2ad5", + "subsup;": "\u2ad3", + "succ;": "\u227b", + "succapprox;": "\u2ab8", + "succcurlyeq;": "\u227d", + "succeq;": "\u2ab0", + "succnapprox;": "\u2aba", + "succneqq;": "\u2ab6", + "succnsim;": "\u22e9", + "succsim;": "\u227f", + "sum;": "\u2211", + "sung;": "\u266a", + "sup1": "\xb9", + "sup1;": "\xb9", + "sup2": "\xb2", + "sup2;": "\xb2", + "sup3": "\xb3", + "sup3;": "\xb3", + "sup;": "\u2283", + "supE;": "\u2ac6", + "supdot;": "\u2abe", + "supdsub;": "\u2ad8", + "supe;": "\u2287", + "supedot;": "\u2ac4", + "suphsol;": "\u27c9", + "suphsub;": "\u2ad7", + "suplarr;": "\u297b", + "supmult;": "\u2ac2", + "supnE;": "\u2acc", + "supne;": "\u228b", + "supplus;": "\u2ac0", + "supset;": "\u2283", + "supseteq;": "\u2287", + "supseteqq;": "\u2ac6", + "supsetneq;": "\u228b", + "supsetneqq;": "\u2acc", + "supsim;": "\u2ac8", + "supsub;": "\u2ad4", + "supsup;": "\u2ad6", + "swArr;": "\u21d9", + "swarhk;": "\u2926", + "swarr;": "\u2199", + "swarrow;": "\u2199", + "swnwar;": "\u292a", + "szlig": "\xdf", + "szlig;": "\xdf", + "target;": "\u2316", + "tau;": "\u03c4", + "tbrk;": "\u23b4", + "tcaron;": "\u0165", + "tcedil;": "\u0163", + "tcy;": "\u0442", + "tdot;": "\u20db", + "telrec;": "\u2315", + "tfr;": "\U0001d531", + "there4;": "\u2234", + "therefore;": "\u2234", + "theta;": "\u03b8", + "thetasym;": "\u03d1", + "thetav;": "\u03d1", + "thickapprox;": "\u2248", + "thicksim;": "\u223c", + "thinsp;": "\u2009", + "thkap;": "\u2248", + "thksim;": "\u223c", + "thorn": "\xfe", + "thorn;": "\xfe", + "tilde;": "\u02dc", + "times": "\xd7", + "times;": "\xd7", + "timesb;": "\u22a0", + "timesbar;": "\u2a31", + "timesd;": "\u2a30", + "tint;": "\u222d", + "toea;": "\u2928", + "top;": "\u22a4", + "topbot;": "\u2336", + "topcir;": "\u2af1", + "topf;": "\U0001d565", + "topfork;": "\u2ada", + "tosa;": "\u2929", + "tprime;": "\u2034", + "trade;": "\u2122", + "triangle;": "\u25b5", + "triangledown;": "\u25bf", + "triangleleft;": "\u25c3", + "trianglelefteq;": "\u22b4", + "triangleq;": "\u225c", + "triangleright;": "\u25b9", + "trianglerighteq;": "\u22b5", + "tridot;": "\u25ec", + "trie;": "\u225c", + "triminus;": "\u2a3a", + "triplus;": "\u2a39", + "trisb;": "\u29cd", + "tritime;": "\u2a3b", + "trpezium;": "\u23e2", + "tscr;": "\U0001d4c9", + "tscy;": "\u0446", + "tshcy;": "\u045b", + "tstrok;": "\u0167", + "twixt;": "\u226c", + "twoheadleftarrow;": "\u219e", + "twoheadrightarrow;": "\u21a0", + "uArr;": "\u21d1", + "uHar;": "\u2963", + "uacute": "\xfa", + "uacute;": "\xfa", + "uarr;": "\u2191", + "ubrcy;": "\u045e", + "ubreve;": "\u016d", + "ucirc": "\xfb", + "ucirc;": "\xfb", + "ucy;": "\u0443", + "udarr;": "\u21c5", + "udblac;": "\u0171", + "udhar;": "\u296e", + "ufisht;": "\u297e", + "ufr;": "\U0001d532", + "ugrave": "\xf9", + "ugrave;": "\xf9", + "uharl;": "\u21bf", + "uharr;": "\u21be", + "uhblk;": "\u2580", + "ulcorn;": "\u231c", + "ulcorner;": "\u231c", + "ulcrop;": "\u230f", + "ultri;": "\u25f8", + "umacr;": "\u016b", + "uml": "\xa8", + "uml;": "\xa8", + "uogon;": "\u0173", + "uopf;": "\U0001d566", + "uparrow;": "\u2191", + "updownarrow;": "\u2195", + "upharpoonleft;": "\u21bf", + "upharpoonright;": "\u21be", + "uplus;": "\u228e", + "upsi;": "\u03c5", + "upsih;": "\u03d2", + "upsilon;": "\u03c5", + "upuparrows;": "\u21c8", + "urcorn;": "\u231d", + "urcorner;": "\u231d", + "urcrop;": "\u230e", + "uring;": "\u016f", + "urtri;": "\u25f9", + "uscr;": "\U0001d4ca", + "utdot;": "\u22f0", + "utilde;": "\u0169", + "utri;": "\u25b5", + "utrif;": "\u25b4", + "uuarr;": "\u21c8", + "uuml": "\xfc", + "uuml;": "\xfc", + "uwangle;": "\u29a7", + "vArr;": "\u21d5", + "vBar;": "\u2ae8", + "vBarv;": "\u2ae9", + "vDash;": "\u22a8", + "vangrt;": "\u299c", + "varepsilon;": "\u03f5", + "varkappa;": "\u03f0", + "varnothing;": "\u2205", + "varphi;": "\u03d5", + "varpi;": "\u03d6", + "varpropto;": "\u221d", + "varr;": "\u2195", + "varrho;": "\u03f1", + "varsigma;": "\u03c2", + "varsubsetneq;": "\u228a\ufe00", + "varsubsetneqq;": "\u2acb\ufe00", + "varsupsetneq;": "\u228b\ufe00", + "varsupsetneqq;": "\u2acc\ufe00", + "vartheta;": "\u03d1", + "vartriangleleft;": "\u22b2", + "vartriangleright;": "\u22b3", + "vcy;": "\u0432", + "vdash;": "\u22a2", + "vee;": "\u2228", + "veebar;": "\u22bb", + "veeeq;": "\u225a", + "vellip;": "\u22ee", + "verbar;": "|", + "vert;": "|", + "vfr;": "\U0001d533", + "vltri;": "\u22b2", + "vnsub;": "\u2282\u20d2", + "vnsup;": "\u2283\u20d2", + "vopf;": "\U0001d567", + "vprop;": "\u221d", + "vrtri;": "\u22b3", + "vscr;": "\U0001d4cb", + "vsubnE;": "\u2acb\ufe00", + "vsubne;": "\u228a\ufe00", + "vsupnE;": "\u2acc\ufe00", + "vsupne;": "\u228b\ufe00", + "vzigzag;": "\u299a", + "wcirc;": "\u0175", + "wedbar;": "\u2a5f", + "wedge;": "\u2227", + "wedgeq;": "\u2259", + "weierp;": "\u2118", + "wfr;": "\U0001d534", + "wopf;": "\U0001d568", + "wp;": "\u2118", + "wr;": "\u2240", + "wreath;": "\u2240", + "wscr;": "\U0001d4cc", + "xcap;": "\u22c2", + "xcirc;": "\u25ef", + "xcup;": "\u22c3", + "xdtri;": "\u25bd", + "xfr;": "\U0001d535", + "xhArr;": "\u27fa", + "xharr;": "\u27f7", + "xi;": "\u03be", + "xlArr;": "\u27f8", + "xlarr;": "\u27f5", + "xmap;": "\u27fc", + "xnis;": "\u22fb", + "xodot;": "\u2a00", + "xopf;": "\U0001d569", + "xoplus;": "\u2a01", + "xotime;": "\u2a02", + "xrArr;": "\u27f9", + "xrarr;": "\u27f6", + "xscr;": "\U0001d4cd", + "xsqcup;": "\u2a06", + "xuplus;": "\u2a04", + "xutri;": "\u25b3", + "xvee;": "\u22c1", + "xwedge;": "\u22c0", + "yacute": "\xfd", + "yacute;": "\xfd", + "yacy;": "\u044f", + "ycirc;": "\u0177", + "ycy;": "\u044b", + "yen": "\xa5", + "yen;": "\xa5", + "yfr;": "\U0001d536", + "yicy;": "\u0457", + "yopf;": "\U0001d56a", + "yscr;": "\U0001d4ce", + "yucy;": "\u044e", + "yuml": "\xff", + "yuml;": "\xff", + "zacute;": "\u017a", + "zcaron;": "\u017e", + "zcy;": "\u0437", + "zdot;": "\u017c", + "zeetrf;": "\u2128", + "zeta;": "\u03b6", + "zfr;": "\U0001d537", + "zhcy;": "\u0436", + "zigrarr;": "\u21dd", + "zopf;": "\U0001d56b", + "zscr;": "\U0001d4cf", + "zwj;": "\u200d", + "zwnj;": "\u200c", +} + +replacementCharacters = { + 0x0: "\uFFFD", + 0x0d: "\u000D", + 0x80: "\u20AC", + 0x81: "\u0081", + 0x82: "\u201A", + 0x83: "\u0192", + 0x84: "\u201E", + 0x85: "\u2026", + 0x86: "\u2020", + 0x87: "\u2021", + 0x88: "\u02C6", + 0x89: "\u2030", + 0x8A: "\u0160", + 0x8B: "\u2039", + 0x8C: "\u0152", + 0x8D: "\u008D", + 0x8E: "\u017D", + 0x8F: "\u008F", + 0x90: "\u0090", + 0x91: "\u2018", + 0x92: "\u2019", + 0x93: "\u201C", + 0x94: "\u201D", + 0x95: "\u2022", + 0x96: "\u2013", + 0x97: "\u2014", + 0x98: "\u02DC", + 0x99: "\u2122", + 0x9A: "\u0161", + 0x9B: "\u203A", + 0x9C: "\u0153", + 0x9D: "\u009D", + 0x9E: "\u017E", + 0x9F: "\u0178", +} + +tokenTypes = { + "Doctype": 0, + "Characters": 1, + "SpaceCharacters": 2, + "StartTag": 3, + "EndTag": 4, + "EmptyTag": 5, + "Comment": 6, + "ParseError": 7 +} + +tagTokenTypes = frozenset([tokenTypes["StartTag"], tokenTypes["EndTag"], + tokenTypes["EmptyTag"]]) + + +prefixes = dict([(v, k) for k, v in namespaces.items()]) +prefixes["http://www.w3.org/1998/Math/MathML"] = "math" + + +class DataLossWarning(UserWarning): + """Raised when the current tree is unable to represent the input data""" + pass + + +class _ReparseException(Exception): + pass diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 000000000..7637a3b05 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-37.pyc new file mode 100644 index 000000000..468f5a568 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/base.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/base.cpython-37.pyc new file mode 100644 index 000000000..cf8a141ea Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/base.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-37.pyc new file mode 100644 index 000000000..f5dfa8937 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/lint.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/lint.cpython-37.pyc new file mode 100644 index 000000000..ba5217d09 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/lint.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-37.pyc new file mode 100644 index 000000000..5ec16c792 Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-37.pyc new file mode 100644 index 000000000..fd18b3e2e Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-37.pyc b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-37.pyc new file mode 100644 index 000000000..43e32eabd Binary files /dev/null and b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-37.pyc differ diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py new file mode 100644 index 000000000..5ba926e3b --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py @@ -0,0 +1,29 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import base + +from collections import OrderedDict + + +def _attr_key(attr): + """Return an appropriate key for an attribute for sorting + + Attributes have a namespace that can be either ``None`` or a string. We + can't compare the two because they're different types, so we convert + ``None`` to an empty string first. + + """ + return (attr[0][0] or ''), attr[0][1] + + +class Filter(base.Filter): + """Alphabetizes attributes for elements""" + def __iter__(self): + for token in base.Filter.__iter__(self): + if token["type"] in ("StartTag", "EmptyTag"): + attrs = OrderedDict() + for name, value in sorted(token["data"].items(), + key=_attr_key): + attrs[name] = value + token["data"] = attrs + yield token diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/base.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/base.py new file mode 100644 index 000000000..c7dbaed0f --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/base.py @@ -0,0 +1,12 @@ +from __future__ import absolute_import, division, unicode_literals + + +class Filter(object): + def __init__(self, source): + self.source = source + + def __iter__(self): + return iter(self.source) + + def __getattr__(self, name): + return getattr(self.source, name) diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py new file mode 100644 index 000000000..aefb5c842 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py @@ -0,0 +1,73 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import base + + +class Filter(base.Filter): + """Injects ```` tag into head of document""" + def __init__(self, source, encoding): + """Creates a Filter + + :arg source: the source token stream + + :arg encoding: the encoding to set + + """ + base.Filter.__init__(self, source) + self.encoding = encoding + + def __iter__(self): + state = "pre_head" + meta_found = (self.encoding is None) + pending = [] + + for token in base.Filter.__iter__(self): + type = token["type"] + if type == "StartTag": + if token["name"].lower() == "head": + state = "in_head" + + elif type == "EmptyTag": + if token["name"].lower() == "meta": + # replace charset with actual encoding + has_http_equiv_content_type = False + for (namespace, name), value in token["data"].items(): + if namespace is not None: + continue + elif name.lower() == 'charset': + token["data"][(namespace, name)] = self.encoding + meta_found = True + break + elif name == 'http-equiv' and value.lower() == 'content-type': + has_http_equiv_content_type = True + else: + if has_http_equiv_content_type and (None, "content") in token["data"]: + token["data"][(None, "content")] = 'text/html; charset=%s' % self.encoding + meta_found = True + + elif token["name"].lower() == "head" and not meta_found: + # insert meta into empty head + yield {"type": "StartTag", "name": "head", + "data": token["data"]} + yield {"type": "EmptyTag", "name": "meta", + "data": {(None, "charset"): self.encoding}} + yield {"type": "EndTag", "name": "head"} + meta_found = True + continue + + elif type == "EndTag": + if token["name"].lower() == "head" and pending: + # insert meta into head (if necessary) and flush pending queue + yield pending.pop(0) + if not meta_found: + yield {"type": "EmptyTag", "name": "meta", + "data": {(None, "charset"): self.encoding}} + while pending: + yield pending.pop(0) + meta_found = True + state = "post_head" + + if state == "in_head": + pending.append(token) + else: + yield token diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py new file mode 100644 index 000000000..fcc07eec5 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py @@ -0,0 +1,93 @@ +from __future__ import absolute_import, division, unicode_literals + +from pip._vendor.six import text_type + +from . import base +from ..constants import namespaces, voidElements + +from ..constants import spaceCharacters +spaceCharacters = "".join(spaceCharacters) + + +class Filter(base.Filter): + """Lints the token stream for errors + + If it finds any errors, it'll raise an ``AssertionError``. + + """ + def __init__(self, source, require_matching_tags=True): + """Creates a Filter + + :arg source: the source token stream + + :arg require_matching_tags: whether or not to require matching tags + + """ + super(Filter, self).__init__(source) + self.require_matching_tags = require_matching_tags + + def __iter__(self): + open_elements = [] + for token in base.Filter.__iter__(self): + type = token["type"] + if type in ("StartTag", "EmptyTag"): + namespace = token["namespace"] + name = token["name"] + assert namespace is None or isinstance(namespace, text_type) + assert namespace != "" + assert isinstance(name, text_type) + assert name != "" + assert isinstance(token["data"], dict) + if (not namespace or namespace == namespaces["html"]) and name in voidElements: + assert type == "EmptyTag" + else: + assert type == "StartTag" + if type == "StartTag" and self.require_matching_tags: + open_elements.append((namespace, name)) + for (namespace, name), value in token["data"].items(): + assert namespace is None or isinstance(namespace, text_type) + assert namespace != "" + assert isinstance(name, text_type) + assert name != "" + assert isinstance(value, text_type) + + elif type == "EndTag": + namespace = token["namespace"] + name = token["name"] + assert namespace is None or isinstance(namespace, text_type) + assert namespace != "" + assert isinstance(name, text_type) + assert name != "" + if (not namespace or namespace == namespaces["html"]) and name in voidElements: + assert False, "Void element reported as EndTag token: %(tag)s" % {"tag": name} + elif self.require_matching_tags: + start = open_elements.pop() + assert start == (namespace, name) + + elif type == "Comment": + data = token["data"] + assert isinstance(data, text_type) + + elif type in ("Characters", "SpaceCharacters"): + data = token["data"] + assert isinstance(data, text_type) + assert data != "" + if type == "SpaceCharacters": + assert data.strip(spaceCharacters) == "" + + elif type == "Doctype": + name = token["name"] + assert name is None or isinstance(name, text_type) + assert token["publicId"] is None or isinstance(name, text_type) + assert token["systemId"] is None or isinstance(name, text_type) + + elif type == "Entity": + assert isinstance(token["name"], text_type) + + elif type == "SerializerError": + assert isinstance(token["data"], text_type) + + else: + assert False, "Unknown token type: %(type)s" % {"type": type} + + yield token diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py new file mode 100644 index 000000000..4a865012c --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py @@ -0,0 +1,207 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import base + + +class Filter(base.Filter): + """Removes optional tags from the token stream""" + def slider(self): + previous1 = previous2 = None + for token in self.source: + if previous1 is not None: + yield previous2, previous1, token + previous2 = previous1 + previous1 = token + if previous1 is not None: + yield previous2, previous1, None + + def __iter__(self): + for previous, token, next in self.slider(): + type = token["type"] + if type == "StartTag": + if (token["data"] or + not self.is_optional_start(token["name"], previous, next)): + yield token + elif type == "EndTag": + if not self.is_optional_end(token["name"], next): + yield token + else: + yield token + + def is_optional_start(self, tagname, previous, next): + type = next and next["type"] or None + if tagname in 'html': + # An html element's start tag may be omitted if the first thing + # inside the html element is not a space character or a comment. + return type not in ("Comment", "SpaceCharacters") + elif tagname == 'head': + # A head element's start tag may be omitted if the first thing + # inside the head element is an element. + # XXX: we also omit the start tag if the head element is empty + if type in ("StartTag", "EmptyTag"): + return True + elif type == "EndTag": + return next["name"] == "head" + elif tagname == 'body': + # A body element's start tag may be omitted if the first thing + # inside the body element is not a space character or a comment, + # except if the first thing inside the body element is a script + # or style element and the node immediately preceding the body + # element is a head element whose end tag has been omitted. + if type in ("Comment", "SpaceCharacters"): + return False + elif type == "StartTag": + # XXX: we do not look at the preceding event, so we never omit + # the body element's start tag if it's followed by a script or + # a style element. + return next["name"] not in ('script', 'style') + else: + return True + elif tagname == 'colgroup': + # A colgroup element's start tag may be omitted if the first thing + # inside the colgroup element is a col element, and if the element + # is not immediately preceded by another colgroup element whose + # end tag has been omitted. + if type in ("StartTag", "EmptyTag"): + # XXX: we do not look at the preceding event, so instead we never + # omit the colgroup element's end tag when it is immediately + # followed by another colgroup element. See is_optional_end. + return next["name"] == "col" + else: + return False + elif tagname == 'tbody': + # A tbody element's start tag may be omitted if the first thing + # inside the tbody element is a tr element, and if the element is + # not immediately preceded by a tbody, thead, or tfoot element + # whose end tag has been omitted. + if type == "StartTag": + # omit the thead and tfoot elements' end tag when they are + # immediately followed by a tbody element. See is_optional_end. + if previous and previous['type'] == 'EndTag' and \ + previous['name'] in ('tbody', 'thead', 'tfoot'): + return False + return next["name"] == 'tr' + else: + return False + return False + + def is_optional_end(self, tagname, next): + type = next and next["type"] or None + if tagname in ('html', 'head', 'body'): + # An html element's end tag may be omitted if the html element + # is not immediately followed by a space character or a comment. + return type not in ("Comment", "SpaceCharacters") + elif tagname in ('li', 'optgroup', 'tr'): + # A li element's end tag may be omitted if the li element is + # immediately followed by another li element or if there is + # no more content in the parent element. + # An optgroup element's end tag may be omitted if the optgroup + # element is immediately followed by another optgroup element, + # or if there is no more content in the parent element. + # A tr element's end tag may be omitted if the tr element is + # immediately followed by another tr element, or if there is + # no more content in the parent element. + if type == "StartTag": + return next["name"] == tagname + else: + return type == "EndTag" or type is None + elif tagname in ('dt', 'dd'): + # A dt element's end tag may be omitted if the dt element is + # immediately followed by another dt element or a dd element. + # A dd element's end tag may be omitted if the dd element is + # immediately followed by another dd element or a dt element, + # or if there is no more content in the parent element. + if type == "StartTag": + return next["name"] in ('dt', 'dd') + elif tagname == 'dd': + return type == "EndTag" or type is None + else: + return False + elif tagname == 'p': + # A p element's end tag may be omitted if the p element is + # immediately followed by an address, article, aside, + # blockquote, datagrid, dialog, dir, div, dl, fieldset, + # footer, form, h1, h2, h3, h4, h5, h6, header, hr, menu, + # nav, ol, p, pre, section, table, or ul, element, or if + # there is no more content in the parent element. + if type in ("StartTag", "EmptyTag"): + return next["name"] in ('address', 'article', 'aside', + 'blockquote', 'datagrid', 'dialog', + 'dir', 'div', 'dl', 'fieldset', 'footer', + 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', + 'header', 'hr', 'menu', 'nav', 'ol', + 'p', 'pre', 'section', 'table', 'ul') + else: + return type == "EndTag" or type is None + elif tagname == 'option': + # An option element's end tag may be omitted if the option + # element is immediately followed by another option element, + # or if it is immediately followed by an optgroup + # element, or if there is no more content in the parent + # element. + if type == "StartTag": + return next["name"] in ('option', 'optgroup') + else: + return type == "EndTag" or type is None + elif tagname in ('rt', 'rp'): + # An rt element's end tag may be omitted if the rt element is + # immediately followed by an rt or rp element, or if there is + # no more content in the parent element. + # An rp element's end tag may be omitted if the rp element is + # immediately followed by an rt or rp element, or if there is + # no more content in the parent element. + if type == "StartTag": + return next["name"] in ('rt', 'rp') + else: + return type == "EndTag" or type is None + elif tagname == 'colgroup': + # A colgroup element's end tag may be omitted if the colgroup + # element is not immediately followed by a space character or + # a comment. + if type in ("Comment", "SpaceCharacters"): + return False + elif type == "StartTag": + # XXX: we also look for an immediately following colgroup + # element. See is_optional_start. + return next["name"] != 'colgroup' + else: + return True + elif tagname in ('thead', 'tbody'): + # A thead element's end tag may be omitted if the thead element + # is immediately followed by a tbody or tfoot element. + # A tbody element's end tag may be omitted if the tbody element + # is immediately followed by a tbody or tfoot element, or if + # there is no more content in the parent element. + # A tfoot element's end tag may be omitted if the tfoot element + # is immediately followed by a tbody element, or if there is no + # more content in the parent element. + # XXX: we never omit the end tag when the following element is + # a tbody. See is_optional_start. + if type == "StartTag": + return next["name"] in ['tbody', 'tfoot'] + elif tagname == 'tbody': + return type == "EndTag" or type is None + else: + return False + elif tagname == 'tfoot': + # A tfoot element's end tag may be omitted if the tfoot element + # is immediately followed by a tbody element, or if there is no + # more content in the parent element. + # XXX: we never omit the end tag when the following element is + # a tbody. See is_optional_start. + if type == "StartTag": + return next["name"] == 'tbody' + else: + return type == "EndTag" or type is None + elif tagname in ('td', 'th'): + # A td element's end tag may be omitted if the td element is + # immediately followed by a td or th element, or if there is + # no more content in the parent element. + # A th element's end tag may be omitted if the th element is + # immediately followed by a td or th element, or if there is + # no more content in the parent element. + if type == "StartTag": + return next["name"] in ('td', 'th') + else: + return type == "EndTag" or type is None + return False diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py new file mode 100644 index 000000000..af8e77b81 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py @@ -0,0 +1,896 @@ +from __future__ import absolute_import, division, unicode_literals + +import re +from xml.sax.saxutils import escape, unescape + +from pip._vendor.six.moves import urllib_parse as urlparse + +from . import base +from ..constants import namespaces, prefixes + +__all__ = ["Filter"] + + +allowed_elements = frozenset(( + (namespaces['html'], 'a'), + (namespaces['html'], 'abbr'), + (namespaces['html'], 'acronym'), + (namespaces['html'], 'address'), + (namespaces['html'], 'area'), + (namespaces['html'], 'article'), + (namespaces['html'], 'aside'), + (namespaces['html'], 'audio'), + (namespaces['html'], 'b'), + (namespaces['html'], 'big'), + (namespaces['html'], 'blockquote'), + (namespaces['html'], 'br'), + (namespaces['html'], 'button'), + (namespaces['html'], 'canvas'), + (namespaces['html'], 'caption'), + (namespaces['html'], 'center'), + (namespaces['html'], 'cite'), + (namespaces['html'], 'code'), + (namespaces['html'], 'col'), + (namespaces['html'], 'colgroup'), + (namespaces['html'], 'command'), + (namespaces['html'], 'datagrid'), + (namespaces['html'], 'datalist'), + (namespaces['html'], 'dd'), + (namespaces['html'], 'del'), + (namespaces['html'], 'details'), + (namespaces['html'], 'dfn'), + (namespaces['html'], 'dialog'), + (namespaces['html'], 'dir'), + (namespaces['html'], 'div'), + (namespaces['html'], 'dl'), + (namespaces['html'], 'dt'), + (namespaces['html'], 'em'), + (namespaces['html'], 'event-source'), + (namespaces['html'], 'fieldset'), + (namespaces['html'], 'figcaption'), + (namespaces['html'], 'figure'), + (namespaces['html'], 'footer'), + (namespaces['html'], 'font'), + (namespaces['html'], 'form'), + (namespaces['html'], 'header'), + (namespaces['html'], 'h1'), + (namespaces['html'], 'h2'), + (namespaces['html'], 'h3'), + (namespaces['html'], 'h4'), + (namespaces['html'], 'h5'), + (namespaces['html'], 'h6'), + (namespaces['html'], 'hr'), + (namespaces['html'], 'i'), + (namespaces['html'], 'img'), + (namespaces['html'], 'input'), + (namespaces['html'], 'ins'), + (namespaces['html'], 'keygen'), + (namespaces['html'], 'kbd'), + (namespaces['html'], 'label'), + (namespaces['html'], 'legend'), + (namespaces['html'], 'li'), + (namespaces['html'], 'm'), + (namespaces['html'], 'map'), + (namespaces['html'], 'menu'), + (namespaces['html'], 'meter'), + (namespaces['html'], 'multicol'), + (namespaces['html'], 'nav'), + (namespaces['html'], 'nextid'), + (namespaces['html'], 'ol'), + (namespaces['html'], 'output'), + (namespaces['html'], 'optgroup'), + (namespaces['html'], 'option'), + (namespaces['html'], 'p'), + (namespaces['html'], 'pre'), + (namespaces['html'], 'progress'), + (namespaces['html'], 'q'), + (namespaces['html'], 's'), + (namespaces['html'], 'samp'), + (namespaces['html'], 'section'), + (namespaces['html'], 'select'), + (namespaces['html'], 'small'), + (namespaces['html'], 'sound'), + (namespaces['html'], 'source'), + (namespaces['html'], 'spacer'), + (namespaces['html'], 'span'), + (namespaces['html'], 'strike'), + (namespaces['html'], 'strong'), + (namespaces['html'], 'sub'), + (namespaces['html'], 'sup'), + (namespaces['html'], 'table'), + (namespaces['html'], 'tbody'), + (namespaces['html'], 'td'), + (namespaces['html'], 'textarea'), + (namespaces['html'], 'time'), + (namespaces['html'], 'tfoot'), + (namespaces['html'], 'th'), + (namespaces['html'], 'thead'), + (namespaces['html'], 'tr'), + (namespaces['html'], 'tt'), + (namespaces['html'], 'u'), + (namespaces['html'], 'ul'), + (namespaces['html'], 'var'), + (namespaces['html'], 'video'), + (namespaces['mathml'], 'maction'), + (namespaces['mathml'], 'math'), + (namespaces['mathml'], 'merror'), + (namespaces['mathml'], 'mfrac'), + (namespaces['mathml'], 'mi'), + (namespaces['mathml'], 'mmultiscripts'), + (namespaces['mathml'], 'mn'), + (namespaces['mathml'], 'mo'), + (namespaces['mathml'], 'mover'), + (namespaces['mathml'], 'mpadded'), + (namespaces['mathml'], 'mphantom'), + (namespaces['mathml'], 'mprescripts'), + (namespaces['mathml'], 'mroot'), + (namespaces['mathml'], 'mrow'), + (namespaces['mathml'], 'mspace'), + (namespaces['mathml'], 'msqrt'), + (namespaces['mathml'], 'mstyle'), + (namespaces['mathml'], 'msub'), + (namespaces['mathml'], 'msubsup'), + (namespaces['mathml'], 'msup'), + (namespaces['mathml'], 'mtable'), + (namespaces['mathml'], 'mtd'), + (namespaces['mathml'], 'mtext'), + (namespaces['mathml'], 'mtr'), + (namespaces['mathml'], 'munder'), + (namespaces['mathml'], 'munderover'), + (namespaces['mathml'], 'none'), + (namespaces['svg'], 'a'), + (namespaces['svg'], 'animate'), + (namespaces['svg'], 'animateColor'), + (namespaces['svg'], 'animateMotion'), + (namespaces['svg'], 'animateTransform'), + (namespaces['svg'], 'clipPath'), + (namespaces['svg'], 'circle'), + (namespaces['svg'], 'defs'), + (namespaces['svg'], 'desc'), + (namespaces['svg'], 'ellipse'), + (namespaces['svg'], 'font-face'), + (namespaces['svg'], 'font-face-name'), + (namespaces['svg'], 'font-face-src'), + (namespaces['svg'], 'g'), + (namespaces['svg'], 'glyph'), + (namespaces['svg'], 'hkern'), + (namespaces['svg'], 'linearGradient'), + (namespaces['svg'], 'line'), + (namespaces['svg'], 'marker'), + (namespaces['svg'], 'metadata'), + (namespaces['svg'], 'missing-glyph'), + (namespaces['svg'], 'mpath'), + (namespaces['svg'], 'path'), + (namespaces['svg'], 'polygon'), + (namespaces['svg'], 'polyline'), + (namespaces['svg'], 'radialGradient'), + (namespaces['svg'], 'rect'), + (namespaces['svg'], 'set'), + (namespaces['svg'], 'stop'), + (namespaces['svg'], 'svg'), + (namespaces['svg'], 'switch'), + (namespaces['svg'], 'text'), + (namespaces['svg'], 'title'), + (namespaces['svg'], 'tspan'), + (namespaces['svg'], 'use'), +)) + +allowed_attributes = frozenset(( + # HTML attributes + (None, 'abbr'), + (None, 'accept'), + (None, 'accept-charset'), + (None, 'accesskey'), + (None, 'action'), + (None, 'align'), + (None, 'alt'), + (None, 'autocomplete'), + (None, 'autofocus'), + (None, 'axis'), + (None, 'background'), + (None, 'balance'), + (None, 'bgcolor'), + (None, 'bgproperties'), + (None, 'border'), + (None, 'bordercolor'), + (None, 'bordercolordark'), + (None, 'bordercolorlight'), + (None, 'bottompadding'), + (None, 'cellpadding'), + (None, 'cellspacing'), + (None, 'ch'), + (None, 'challenge'), + (None, 'char'), + (None, 'charoff'), + (None, 'choff'), + (None, 'charset'), + (None, 'checked'), + (None, 'cite'), + (None, 'class'), + (None, 'clear'), + (None, 'color'), + (None, 'cols'), + (None, 'colspan'), + (None, 'compact'), + (None, 'contenteditable'), + (None, 'controls'), + (None, 'coords'), + (None, 'data'), + (None, 'datafld'), + (None, 'datapagesize'), + (None, 'datasrc'), + (None, 'datetime'), + (None, 'default'), + (None, 'delay'), + (None, 'dir'), + (None, 'disabled'), + (None, 'draggable'), + (None, 'dynsrc'), + (None, 'enctype'), + (None, 'end'), + (None, 'face'), + (None, 'for'), + (None, 'form'), + (None, 'frame'), + (None, 'galleryimg'), + (None, 'gutter'), + (None, 'headers'), + (None, 'height'), + (None, 'hidefocus'), + (None, 'hidden'), + (None, 'high'), + (None, 'href'), + (None, 'hreflang'), + (None, 'hspace'), + (None, 'icon'), + (None, 'id'), + (None, 'inputmode'), + (None, 'ismap'), + (None, 'keytype'), + (None, 'label'), + (None, 'leftspacing'), + (None, 'lang'), + (None, 'list'), + (None, 'longdesc'), + (None, 'loop'), + (None, 'loopcount'), + (None, 'loopend'), + (None, 'loopstart'), + (None, 'low'), + (None, 'lowsrc'), + (None, 'max'), + (None, 'maxlength'), + (None, 'media'), + (None, 'method'), + (None, 'min'), + (None, 'multiple'), + (None, 'name'), + (None, 'nohref'), + (None, 'noshade'), + (None, 'nowrap'), + (None, 'open'), + (None, 'optimum'), + (None, 'pattern'), + (None, 'ping'), + (None, 'point-size'), + (None, 'poster'), + (None, 'pqg'), + (None, 'preload'), + (None, 'prompt'), + (None, 'radiogroup'), + (None, 'readonly'), + (None, 'rel'), + (None, 'repeat-max'), + (None, 'repeat-min'), + (None, 'replace'), + (None, 'required'), + (None, 'rev'), + (None, 'rightspacing'), + (None, 'rows'), + (None, 'rowspan'), + (None, 'rules'), + (None, 'scope'), + (None, 'selected'), + (None, 'shape'), + (None, 'size'), + (None, 'span'), + (None, 'src'), + (None, 'start'), + (None, 'step'), + (None, 'style'), + (None, 'summary'), + (None, 'suppress'), + (None, 'tabindex'), + (None, 'target'), + (None, 'template'), + (None, 'title'), + (None, 'toppadding'), + (None, 'type'), + (None, 'unselectable'), + (None, 'usemap'), + (None, 'urn'), + (None, 'valign'), + (None, 'value'), + (None, 'variable'), + (None, 'volume'), + (None, 'vspace'), + (None, 'vrml'), + (None, 'width'), + (None, 'wrap'), + (namespaces['xml'], 'lang'), + # MathML attributes + (None, 'actiontype'), + (None, 'align'), + (None, 'columnalign'), + (None, 'columnalign'), + (None, 'columnalign'), + (None, 'columnlines'), + (None, 'columnspacing'), + (None, 'columnspan'), + (None, 'depth'), + (None, 'display'), + (None, 'displaystyle'), + (None, 'equalcolumns'), + (None, 'equalrows'), + (None, 'fence'), + (None, 'fontstyle'), + (None, 'fontweight'), + (None, 'frame'), + (None, 'height'), + (None, 'linethickness'), + (None, 'lspace'), + (None, 'mathbackground'), + (None, 'mathcolor'), + (None, 'mathvariant'), + (None, 'mathvariant'), + (None, 'maxsize'), + (None, 'minsize'), + (None, 'other'), + (None, 'rowalign'), + (None, 'rowalign'), + (None, 'rowalign'), + (None, 'rowlines'), + (None, 'rowspacing'), + (None, 'rowspan'), + (None, 'rspace'), + (None, 'scriptlevel'), + (None, 'selection'), + (None, 'separator'), + (None, 'stretchy'), + (None, 'width'), + (None, 'width'), + (namespaces['xlink'], 'href'), + (namespaces['xlink'], 'show'), + (namespaces['xlink'], 'type'), + # SVG attributes + (None, 'accent-height'), + (None, 'accumulate'), + (None, 'additive'), + (None, 'alphabetic'), + (None, 'arabic-form'), + (None, 'ascent'), + (None, 'attributeName'), + (None, 'attributeType'), + (None, 'baseProfile'), + (None, 'bbox'), + (None, 'begin'), + (None, 'by'), + (None, 'calcMode'), + (None, 'cap-height'), + (None, 'class'), + (None, 'clip-path'), + (None, 'color'), + (None, 'color-rendering'), + (None, 'content'), + (None, 'cx'), + (None, 'cy'), + (None, 'd'), + (None, 'dx'), + (None, 'dy'), + (None, 'descent'), + (None, 'display'), + (None, 'dur'), + (None, 'end'), + (None, 'fill'), + (None, 'fill-opacity'), + (None, 'fill-rule'), + (None, 'font-family'), + (None, 'font-size'), + (None, 'font-stretch'), + (None, 'font-style'), + (None, 'font-variant'), + (None, 'font-weight'), + (None, 'from'), + (None, 'fx'), + (None, 'fy'), + (None, 'g1'), + (None, 'g2'), + (None, 'glyph-name'), + (None, 'gradientUnits'), + (None, 'hanging'), + (None, 'height'), + (None, 'horiz-adv-x'), + (None, 'horiz-origin-x'), + (None, 'id'), + (None, 'ideographic'), + (None, 'k'), + (None, 'keyPoints'), + (None, 'keySplines'), + (None, 'keyTimes'), + (None, 'lang'), + (None, 'marker-end'), + (None, 'marker-mid'), + (None, 'marker-start'), + (None, 'markerHeight'), + (None, 'markerUnits'), + (None, 'markerWidth'), + (None, 'mathematical'), + (None, 'max'), + (None, 'min'), + (None, 'name'), + (None, 'offset'), + (None, 'opacity'), + (None, 'orient'), + (None, 'origin'), + (None, 'overline-position'), + (None, 'overline-thickness'), + (None, 'panose-1'), + (None, 'path'), + (None, 'pathLength'), + (None, 'points'), + (None, 'preserveAspectRatio'), + (None, 'r'), + (None, 'refX'), + (None, 'refY'), + (None, 'repeatCount'), + (None, 'repeatDur'), + (None, 'requiredExtensions'), + (None, 'requiredFeatures'), + (None, 'restart'), + (None, 'rotate'), + (None, 'rx'), + (None, 'ry'), + (None, 'slope'), + (None, 'stemh'), + (None, 'stemv'), + (None, 'stop-color'), + (None, 'stop-opacity'), + (None, 'strikethrough-position'), + (None, 'strikethrough-thickness'), + (None, 'stroke'), + (None, 'stroke-dasharray'), + (None, 'stroke-dashoffset'), + (None, 'stroke-linecap'), + (None, 'stroke-linejoin'), + (None, 'stroke-miterlimit'), + (None, 'stroke-opacity'), + (None, 'stroke-width'), + (None, 'systemLanguage'), + (None, 'target'), + (None, 'text-anchor'), + (None, 'to'), + (None, 'transform'), + (None, 'type'), + (None, 'u1'), + (None, 'u2'), + (None, 'underline-position'), + (None, 'underline-thickness'), + (None, 'unicode'), + (None, 'unicode-range'), + (None, 'units-per-em'), + (None, 'values'), + (None, 'version'), + (None, 'viewBox'), + (None, 'visibility'), + (None, 'width'), + (None, 'widths'), + (None, 'x'), + (None, 'x-height'), + (None, 'x1'), + (None, 'x2'), + (namespaces['xlink'], 'actuate'), + (namespaces['xlink'], 'arcrole'), + (namespaces['xlink'], 'href'), + (namespaces['xlink'], 'role'), + (namespaces['xlink'], 'show'), + (namespaces['xlink'], 'title'), + (namespaces['xlink'], 'type'), + (namespaces['xml'], 'base'), + (namespaces['xml'], 'lang'), + (namespaces['xml'], 'space'), + (None, 'y'), + (None, 'y1'), + (None, 'y2'), + (None, 'zoomAndPan'), +)) + +attr_val_is_uri = frozenset(( + (None, 'href'), + (None, 'src'), + (None, 'cite'), + (None, 'action'), + (None, 'longdesc'), + (None, 'poster'), + (None, 'background'), + (None, 'datasrc'), + (None, 'dynsrc'), + (None, 'lowsrc'), + (None, 'ping'), + (namespaces['xlink'], 'href'), + (namespaces['xml'], 'base'), +)) + +svg_attr_val_allows_ref = frozenset(( + (None, 'clip-path'), + (None, 'color-profile'), + (None, 'cursor'), + (None, 'fill'), + (None, 'filter'), + (None, 'marker'), + (None, 'marker-start'), + (None, 'marker-mid'), + (None, 'marker-end'), + (None, 'mask'), + (None, 'stroke'), +)) + +svg_allow_local_href = frozenset(( + (None, 'altGlyph'), + (None, 'animate'), + (None, 'animateColor'), + (None, 'animateMotion'), + (None, 'animateTransform'), + (None, 'cursor'), + (None, 'feImage'), + (None, 'filter'), + (None, 'linearGradient'), + (None, 'pattern'), + (None, 'radialGradient'), + (None, 'textpath'), + (None, 'tref'), + (None, 'set'), + (None, 'use') +)) + +allowed_css_properties = frozenset(( + 'azimuth', + 'background-color', + 'border-bottom-color', + 'border-collapse', + 'border-color', + 'border-left-color', + 'border-right-color', + 'border-top-color', + 'clear', + 'color', + 'cursor', + 'direction', + 'display', + 'elevation', + 'float', + 'font', + 'font-family', + 'font-size', + 'font-style', + 'font-variant', + 'font-weight', + 'height', + 'letter-spacing', + 'line-height', + 'overflow', + 'pause', + 'pause-after', + 'pause-before', + 'pitch', + 'pitch-range', + 'richness', + 'speak', + 'speak-header', + 'speak-numeral', + 'speak-punctuation', + 'speech-rate', + 'stress', + 'text-align', + 'text-decoration', + 'text-indent', + 'unicode-bidi', + 'vertical-align', + 'voice-family', + 'volume', + 'white-space', + 'width', +)) + +allowed_css_keywords = frozenset(( + 'auto', + 'aqua', + 'black', + 'block', + 'blue', + 'bold', + 'both', + 'bottom', + 'brown', + 'center', + 'collapse', + 'dashed', + 'dotted', + 'fuchsia', + 'gray', + 'green', + '!important', + 'italic', + 'left', + 'lime', + 'maroon', + 'medium', + 'none', + 'navy', + 'normal', + 'nowrap', + 'olive', + 'pointer', + 'purple', + 'red', + 'right', + 'solid', + 'silver', + 'teal', + 'top', + 'transparent', + 'underline', + 'white', + 'yellow', +)) + +allowed_svg_properties = frozenset(( + 'fill', + 'fill-opacity', + 'fill-rule', + 'stroke', + 'stroke-width', + 'stroke-linecap', + 'stroke-linejoin', + 'stroke-opacity', +)) + +allowed_protocols = frozenset(( + 'ed2k', + 'ftp', + 'http', + 'https', + 'irc', + 'mailto', + 'news', + 'gopher', + 'nntp', + 'telnet', + 'webcal', + 'xmpp', + 'callto', + 'feed', + 'urn', + 'aim', + 'rsync', + 'tag', + 'ssh', + 'sftp', + 'rtsp', + 'afs', + 'data', +)) + +allowed_content_types = frozenset(( + 'image/png', + 'image/jpeg', + 'image/gif', + 'image/webp', + 'image/bmp', + 'text/plain', +)) + + +data_content_type = re.compile(r''' + ^ + # Match a content type / + (?P[-a-zA-Z0-9.]+/[-a-zA-Z0-9.]+) + # Match any character set and encoding + (?:(?:;charset=(?:[-a-zA-Z0-9]+)(?:;(?:base64))?) + |(?:;(?:base64))?(?:;charset=(?:[-a-zA-Z0-9]+))?) + # Assume the rest is data + ,.* + $ + ''', + re.VERBOSE) + + +class Filter(base.Filter): + """Sanitizes token stream of XHTML+MathML+SVG and of inline style attributes""" + def __init__(self, + source, + allowed_elements=allowed_elements, + allowed_attributes=allowed_attributes, + allowed_css_properties=allowed_css_properties, + allowed_css_keywords=allowed_css_keywords, + allowed_svg_properties=allowed_svg_properties, + allowed_protocols=allowed_protocols, + allowed_content_types=allowed_content_types, + attr_val_is_uri=attr_val_is_uri, + svg_attr_val_allows_ref=svg_attr_val_allows_ref, + svg_allow_local_href=svg_allow_local_href): + """Creates a Filter + + :arg allowed_elements: set of elements to allow--everything else will + be escaped + + :arg allowed_attributes: set of attributes to allow in + elements--everything else will be stripped + + :arg allowed_css_properties: set of CSS properties to allow--everything + else will be stripped + + :arg allowed_css_keywords: set of CSS keywords to allow--everything + else will be stripped + + :arg allowed_svg_properties: set of SVG properties to allow--everything + else will be removed + + :arg allowed_protocols: set of allowed protocols for URIs + + :arg allowed_content_types: set of allowed content types for ``data`` URIs. + + :arg attr_val_is_uri: set of attributes that have URI values--values + that have a scheme not listed in ``allowed_protocols`` are removed + + :arg svg_attr_val_allows_ref: set of SVG attributes that can have + references + + :arg svg_allow_local_href: set of SVG elements that can have local + hrefs--these are removed + + """ + super(Filter, self).__init__(source) + self.allowed_elements = allowed_elements + self.allowed_attributes = allowed_attributes + self.allowed_css_properties = allowed_css_properties + self.allowed_css_keywords = allowed_css_keywords + self.allowed_svg_properties = allowed_svg_properties + self.allowed_protocols = allowed_protocols + self.allowed_content_types = allowed_content_types + self.attr_val_is_uri = attr_val_is_uri + self.svg_attr_val_allows_ref = svg_attr_val_allows_ref + self.svg_allow_local_href = svg_allow_local_href + + def __iter__(self): + for token in base.Filter.__iter__(self): + token = self.sanitize_token(token) + if token: + yield token + + # Sanitize the +html+, escaping all elements not in ALLOWED_ELEMENTS, and + # stripping out all attributes not in ALLOWED_ATTRIBUTES. Style attributes + # are parsed, and a restricted set, specified by ALLOWED_CSS_PROPERTIES and + # ALLOWED_CSS_KEYWORDS, are allowed through. attributes in ATTR_VAL_IS_URI + # are scanned, and only URI schemes specified in ALLOWED_PROTOCOLS are + # allowed. + # + # sanitize_html('') + # => <script> do_nasty_stuff() </script> + # sanitize_html('Click here for $100') + # => Click here for $100 + def sanitize_token(self, token): + + # accommodate filters which use token_type differently + token_type = token["type"] + if token_type in ("StartTag", "EndTag", "EmptyTag"): + name = token["name"] + namespace = token["namespace"] + if ((namespace, name) in self.allowed_elements or + (namespace is None and + (namespaces["html"], name) in self.allowed_elements)): + return self.allowed_token(token) + else: + return self.disallowed_token(token) + elif token_type == "Comment": + pass + else: + return token + + def allowed_token(self, token): + if "data" in token: + attrs = token["data"] + attr_names = set(attrs.keys()) + + # Remove forbidden attributes + for to_remove in (attr_names - self.allowed_attributes): + del token["data"][to_remove] + attr_names.remove(to_remove) + + # Remove attributes with disallowed URL values + for attr in (attr_names & self.attr_val_is_uri): + assert attr in attrs + # I don't have a clue where this regexp comes from or why it matches those + # characters, nor why we call unescape. I just know it's always been here. + # Should you be worried by this comment in a sanitizer? Yes. On the other hand, all + # this will do is remove *more* than it otherwise would. + val_unescaped = re.sub("[`\x00-\x20\x7f-\xa0\\s]+", '', + unescape(attrs[attr])).lower() + # remove replacement characters from unescaped characters + val_unescaped = val_unescaped.replace("\ufffd", "") + try: + uri = urlparse.urlparse(val_unescaped) + except ValueError: + uri = None + del attrs[attr] + if uri and uri.scheme: + if uri.scheme not in self.allowed_protocols: + del attrs[attr] + if uri.scheme == 'data': + m = data_content_type.match(uri.path) + if not m: + del attrs[attr] + elif m.group('content_type') not in self.allowed_content_types: + del attrs[attr] + + for attr in self.svg_attr_val_allows_ref: + if attr in attrs: + attrs[attr] = re.sub(r'url\s*\(\s*[^#\s][^)]+?\)', + ' ', + unescape(attrs[attr])) + if (token["name"] in self.svg_allow_local_href and + (namespaces['xlink'], 'href') in attrs and re.search(r'^\s*[^#\s].*', + attrs[(namespaces['xlink'], 'href')])): + del attrs[(namespaces['xlink'], 'href')] + if (None, 'style') in attrs: + attrs[(None, 'style')] = self.sanitize_css(attrs[(None, 'style')]) + token["data"] = attrs + return token + + def disallowed_token(self, token): + token_type = token["type"] + if token_type == "EndTag": + token["data"] = "" % token["name"] + elif token["data"]: + assert token_type in ("StartTag", "EmptyTag") + attrs = [] + for (ns, name), v in token["data"].items(): + attrs.append(' %s="%s"' % (name if ns is None else "%s:%s" % (prefixes[ns], name), escape(v))) + token["data"] = "<%s%s>" % (token["name"], ''.join(attrs)) + else: + token["data"] = "<%s>" % token["name"] + if token.get("selfClosing"): + token["data"] = token["data"][:-1] + "/>" + + token["type"] = "Characters" + + del token["name"] + return token + + def sanitize_css(self, style): + # disallow urls + style = re.compile(r'url\s*\(\s*[^\s)]+?\s*\)\s*').sub(' ', style) + + # gauntlet + if not re.match(r"""^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$""", style): + return '' + if not re.match(r"^\s*([-\w]+\s*:[^:;]*(;\s*|$))*$", style): + return '' + + clean = [] + for prop, value in re.findall(r"([-\w]+)\s*:\s*([^:;]*)", style): + if not value: + continue + if prop.lower() in self.allowed_css_properties: + clean.append(prop + ': ' + value + ';') + elif prop.split('-')[0].lower() in ['background', 'border', 'margin', + 'padding']: + for keyword in value.split(): + if keyword not in self.allowed_css_keywords and \ + not re.match(r"^(#[0-9a-fA-F]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$", keyword): # noqa + break + else: + clean.append(prop + ': ' + value + ';') + elif prop.lower() in self.allowed_svg_properties: + clean.append(prop + ': ' + value + ';') + + return ' '.join(clean) diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py new file mode 100644 index 000000000..0d12584b4 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py @@ -0,0 +1,38 @@ +from __future__ import absolute_import, division, unicode_literals + +import re + +from . import base +from ..constants import rcdataElements, spaceCharacters +spaceCharacters = "".join(spaceCharacters) + +SPACES_REGEX = re.compile("[%s]+" % spaceCharacters) + + +class Filter(base.Filter): + """Collapses whitespace except in pre, textarea, and script elements""" + spacePreserveElements = frozenset(["pre", "textarea"] + list(rcdataElements)) + + def __iter__(self): + preserve = 0 + for token in base.Filter.__iter__(self): + type = token["type"] + if type == "StartTag" \ + and (preserve or token["name"] in self.spacePreserveElements): + preserve += 1 + + elif type == "EndTag" and preserve: + preserve -= 1 + + elif not preserve and type == "SpaceCharacters" and token["data"]: + # Test on token["data"] above to not introduce spaces where there were not + token["data"] = " " + + elif not preserve and type == "Characters": + token["data"] = collapse_spaces(token["data"]) + + yield token + + +def collapse_spaces(text): + return SPACES_REGEX.sub(' ', text) diff --git a/my_env/Lib/site-packages/pip/_vendor/html5lib/html5parser.py b/my_env/Lib/site-packages/pip/_vendor/html5lib/html5parser.py new file mode 100644 index 000000000..ae41a1337 --- /dev/null +++ b/my_env/Lib/site-packages/pip/_vendor/html5lib/html5parser.py @@ -0,0 +1,2791 @@ +from __future__ import absolute_import, division, unicode_literals +from pip._vendor.six import with_metaclass, viewkeys + +import types +from collections import OrderedDict + +from . import _inputstream +from . import _tokenizer + +from . import treebuilders +from .treebuilders.base import Marker + +from . import _utils +from .constants import ( + spaceCharacters, asciiUpper2Lower, + specialElements, headingElements, cdataElements, rcdataElements, + tokenTypes, tagTokenTypes, + namespaces, + htmlIntegrationPointElements, mathmlTextIntegrationPointElements, + adjustForeignAttributes as adjustForeignAttributesMap, + adjustMathMLAttributes, adjustSVGAttributes, + E, + _ReparseException +) + + +def parse(doc, treebuilder="etree", namespaceHTMLElements=True, **kwargs): + """Parse an HTML document as a string or file-like object into a tree + + :arg doc: the document to parse as a string or file-like object + + :arg treebuilder: the treebuilder to use when parsing + + :arg namespaceHTMLElements: whether or not to namespace HTML elements + + :returns: parsed tree + + Example: + + >>> from html5lib.html5parser import parse + >>> parse('

    This is a doc

    ') + + + """ + tb = treebuilders.getTreeBuilder(treebuilder) + p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) + return p.parse(doc, **kwargs) + + +def parseFragment(doc, container="div", treebuilder="etree", namespaceHTMLElements=True, **kwargs): + """Parse an HTML fragment as a string or file-like object into a tree + + :arg doc: the fragment to parse as a string or file-like object + + :arg container: the container context to parse the fragment in + + :arg treebuilder: the treebuilder to use when parsing + + :arg namespaceHTMLElements: whether or not to namespace HTML elements + + :returns: parsed tree + + Example: + + >>> from html5lib.html5libparser import parseFragment + >>> parseFragment('this is a fragment') + + + """ + tb = treebuilders.getTreeBuilder(treebuilder) + p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) + return p.parseFragment(doc, container=container, **kwargs) + + +def method_decorator_metaclass(function): + class Decorated(type): + def __new__(meta, classname, bases, classDict): + for attributeName, attribute in classDict.items(): + if isinstance(attribute, types.FunctionType): + attribute = function(attribute) + + classDict[attributeName] = attribute + return type.__new__(meta, classname, bases, classDict) + return Decorated + + +class HTMLParser(object): + """HTML parser + + Generates a tree structure from a stream of (possibly malformed) HTML. + + """ + + def __init__(self, tree=None, strict=False, namespaceHTMLElements=True, debug=False): + """ + :arg tree: a treebuilder class controlling the type of tree that will be + returned. Built in treebuilders can be accessed through + html5lib.treebuilders.getTreeBuilder(treeType) + + :arg strict: raise an exception when a parse error is encountered + + :arg namespaceHTMLElements: whether or not to namespace HTML elements + + :arg debug: whether or not to enable debug mode which logs things + + Example: + + >>> from html5lib.html5parser import HTMLParser + >>> parser = HTMLParser() # generates parser with etree builder + >>> parser = HTMLParser('lxml', strict=True) # generates parser with lxml builder which is strict + + """ + + # Raise an exception on the first error encountered + self.strict = strict + + if tree is None: + tree = treebuilders.getTreeBuilder("etree") + self.tree = tree(namespaceHTMLElements) + self.errors = [] + + self.phases = dict([(name, cls(self, self.tree)) for name, cls in + getPhases(debug).items()]) + + def _parse(self, stream, innerHTML=False, container="div", scripting=False, **kwargs): + + self.innerHTMLMode = innerHTML + self.container = container + self.scripting = scripting + self.tokenizer = _tokenizer.HTMLTokenizer(stream, parser=self, **kwargs) + self.reset() + + try: + self.mainLoop() + except _ReparseException: + self.reset() + self.mainLoop() + + def reset(self): + self.tree.reset() + self.firstStartTag = False + self.errors = [] + self.log = [] # only used with debug mode + # "quirks" / "limited quirks" / "no quirks" + self.compatMode = "no quirks" + + if self.innerHTMLMode: + self.innerHTML = self.container.lower() + + if self.innerHTML in cdataElements: + self.tokenizer.state = self.tokenizer.rcdataState + elif self.innerHTML in rcdataElements: + self.tokenizer.state = self.tokenizer.rawtextState + elif self.innerHTML == 'plaintext': + self.tokenizer.state = self.tokenizer.plaintextState + else: + # state already is data state + # self.tokenizer.state = self.tokenizer.dataState + pass + self.phase = self.phases["beforeHtml"] + self.phase.insertHtmlElement() + self.resetInsertionMode() + else: + self.innerHTML = False # pylint:disable=redefined-variable-type + self.phase = self.phases["initial"] + + self.lastPhase = None + + self.beforeRCDataPhase = None + + self.framesetOK = True + + @property + def documentEncoding(self): + """Name of the character encoding that was used to decode the input stream, or + :obj:`None` if that is not determined yet + + """ + if not hasattr(self, 'tokenizer'): + return None + return self.tokenizer.stream.charEncoding[0].name + + def isHTMLIntegrationPoint(self, element): + if (element.name == "annotation-xml" and + element.namespace == namespaces["mathml"]): + return ("encoding" in element.attributes and + element.attributes["encoding"].translate( + asciiUpper2Lower) in + ("text/html", "application/xhtml+xml")) + else: + return (element.namespace, element.name) in htmlIntegrationPointElements + + def isMathMLTextIntegrationPoint(self, element): + return (element.namespace, element.name) in mathmlTextIntegrationPointElements + + def mainLoop(self): + CharactersToken = tokenTypes["Characters"] + SpaceCharactersToken = tokenTypes["SpaceCharacters"] + StartTagToken = tokenTypes["StartTag"] + EndTagToken = tokenTypes["EndTag"] + CommentToken = tokenTypes["Comment"] + DoctypeToken = tokenTypes["Doctype"] + ParseErrorToken = tokenTypes["ParseError"] + + for token in self.normalizedTokens(): + prev_token = None + new_token = token + while new_token is not None: + prev_token = new_token + currentNode = self.tree.openElements[-1] if self.tree.openElements else None + currentNodeNamespace = currentNode.namespace if currentNode else None + currentNodeName = currentNode.name if currentNode else None + + type = new_token["type"] + + if type == ParseErrorToken: + self.parseError(new_token["data"], new_token.get("datavars", {})) + new_token = None + else: + if (len(self.tree.openElements) == 0 or + currentNodeNamespace == self.tree.defaultNamespace or + (self.isMathMLTextIntegrationPoint(currentNode) and + ((type == StartTagToken and + token["name"] not in frozenset(["mglyph", "malignmark"])) or + type in (CharactersToken, SpaceCharactersToken))) or + (currentNodeNamespace == namespaces["mathml"] and + currentNodeName == "annotation-xml" and + type == StartTagToken and + token["name"] == "svg") or + (self.isHTMLIntegrationPoint(currentNode) and + type in (StartTagToken, CharactersToken, SpaceCharactersToken))): + phase = self.phase + else: + phase = self.phases["inForeignContent"] + + if type == CharactersToken: + new_token = phase.processCharacters(new_token) + elif type == SpaceCharactersToken: + new_token = phase.processSpaceCharacters(new_token) + elif type == StartTagToken: + new_token = phase.processStartTag(new_token) + elif type == EndTagToken: + new_token = phase.processEndTag(new_token) + elif type == CommentToken: + new_token = phase.processComment(new_token) + elif type == DoctypeToken: + new_token = phase.processDoctype(new_token) + + if (type == StartTagToken and prev_token["selfClosing"] and + not prev_token["selfClosingAcknowledged"]): + self.parseError("non-void-element-with-trailing-solidus", + {"name": prev_token["name"]}) + + # When the loop finishes it's EOF + reprocess = True + phases = [] + while reprocess: + phases.append(self.phase) + reprocess = self.phase.processEOF() + if reprocess: + assert self.phase not in phases + + def normalizedTokens(self): + for token in self.tokenizer: + yield self.normalizeToken(token) + + def parse(self, stream, *args, **kwargs): + """Parse a HTML document into a well-formed tree + + :arg stream: a file-like object or string containing the HTML to be parsed + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element). + + :arg scripting: treat noscript elements as if JavaScript was turned on + + :returns: parsed tree + + Example: + + >>> from html5lib.html5parser import HTMLParser + >>> parser = HTMLParser() + >>> parser.parse('

    This is a doc

    ') + + + """ + self._parse(stream, False, None, *args, **kwargs) + return self.tree.getDocument() + + def parseFragment(self, stream, *args, **kwargs): + """Parse a HTML fragment into a well-formed tree fragment + + :arg container: name of the element we're setting the innerHTML + property if set to None, default to 'div' + + :arg stream: a file-like object or string containing the HTML to be parsed + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element) + + :arg scripting: treat noscript elements as if JavaScript was turned on + + :returns: parsed tree + + Example: + + >>> from html5lib.html5libparser import HTMLParser + >>> parser = HTMLParser() + >>> parser.parseFragment('this is a fragment') + + + """ + self._parse(stream, True, *args, **kwargs) + return self.tree.getFragment() + + def parseError(self, errorcode="XXX-undefined-error", datavars=None): + # XXX The idea is to make errorcode mandatory. + if datavars is None: + datavars = {} + self.errors.append((self.tokenizer.stream.position(), errorcode, datavars)) + if self.strict: + raise ParseError(E[errorcode] % datavars) + + def normalizeToken(self, token): + # HTML5 specific normalizations to the token stream + if token["type"] == tokenTypes["StartTag"]: + raw = token["data"] + token["data"] = OrderedDict(raw) + if len(raw) > len(token["data"]): + # we had some duplicated attribute, fix so first wins + token["data"].update(raw[::-1]) + + return token + + def adjustMathMLAttributes(self, token): + adjust_attributes(token, adjustMathMLAttributes) + + def adjustSVGAttributes(self, token): + adjust_attributes(token, adjustSVGAttributes) + + def adjustForeignAttributes(self, token): + adjust_attributes(token, adjustForeignAttributesMap) + + def reparseTokenNormal(self, token): + # pylint:disable=unused-argument + self.parser.phase() + + def resetInsertionMode(self): + # The name of this method is mostly historical. (It's also used in the + # specification.) + last = False + newModes = { + "select": "inSelect", + "td": "inCell", + "th": "inCell", + "tr": "inRow", + "tbody": "inTableBody", + "thead": "inTableBody", + "tfoot": "inTableBody", + "caption": "inCaption", + "colgroup": "inColumnGroup", + "table": "inTable", + "head": "inBody", + "body": "inBody", + "frameset": "inFrameset", + "html": "beforeHead" + } + for node in self.tree.openElements[::-1]: + nodeName = node.name + new_phase = None + if node == self.tree.openElements[0]: + assert self.innerHTML + last = True + nodeName = self.innerHTML + # Check for conditions that should only happen in the innerHTML + # case + if nodeName in ("select", "colgroup", "head", "html"): + assert self.innerHTML + + if not last and node.namespace != self.tree.defaultNamespace: + continue + + if nodeName in newModes: + new_phase = self.phases[newModes[nodeName]] + break + elif last: + new_phase = self.phases["inBody"] + break + + self.phase = new_phase + + def parseRCDataRawtext(self, token, contentType): + # Generic RCDATA/RAWTEXT Parsing algorithm + assert contentType in ("RAWTEXT", "RCDATA") + + self.tree.insertElement(token) + + if contentType == "RAWTEXT": + self.tokenizer.state = self.tokenizer.rawtextState + else: + self.tokenizer.state = self.tokenizer.rcdataState + + self.originalPhase = self.phase + + self.phase = self.phases["text"] + + +@_utils.memoize +def getPhases(debug): + def log(function): + """Logger that records which phase processes each token""" + type_names = dict((value, key) for key, value in + tokenTypes.items()) + + def wrapped(self, *args, **kwargs): + if function.__name__.startswith("process") and len(args) > 0: + token = args[0] + try: + info = {"type": type_names[token['type']]} + except: + raise + if token['type'] in tagTokenTypes: + info["name"] = token['name'] + + self.parser.log.append((self.parser.tokenizer.state.__name__, + self.parser.phase.__class__.__name__, + self.__class__.__name__, + function.__name__, + info)) + return function(self, *args, **kwargs) + else: + return function(self, *args, **kwargs) + return wrapped + + def getMetaclass(use_metaclass, metaclass_func): + if use_metaclass: + return method_decorator_metaclass(metaclass_func) + else: + return type + + # pylint:disable=unused-argument + class Phase(with_metaclass(getMetaclass(debug, log))): + """Base class for helper object that implements each phase of processing + """ + + def __init__(self, parser, tree): + self.parser = parser + self.tree = tree + + def processEOF(self): + raise NotImplementedError + + def processComment(self, token): + # For most phases the following is correct. Where it's not it will be + # overridden. + self.tree.insertComment(token, self.tree.openElements[-1]) + + def processDoctype(self, token): + self.parser.parseError("unexpected-doctype") + + def processCharacters(self, token): + self.tree.insertText(token["data"]) + + def processSpaceCharacters(self, token): + self.tree.insertText(token["data"]) + + def processStartTag(self, token): + return self.startTagHandler[token["name"]](token) + + def startTagHtml(self, token): + if not self.parser.firstStartTag and token["name"] == "html": + self.parser.parseError("non-html-root") + # XXX Need a check here to see if the first start tag token emitted is + # this token... If it's not, invoke self.parser.parseError(). + for attr, value in token["data"].items(): + if attr not in self.tree.openElements[0].attributes: + self.tree.openElements[0].attributes[attr] = value + self.parser.firstStartTag = False + + def processEndTag(self, token): + return self.endTagHandler[token["name"]](token) + + class InitialPhase(Phase): + def processSpaceCharacters(self, token): + pass + + def processComment(self, token): + self.tree.insertComment(token, self.tree.document) + + def processDoctype(self, token): + name = token["name"] + publicId = token["publicId"] + systemId = token["systemId"] + correct = token["correct"] + + if (name != "html" or publicId is not None or + systemId is not None and systemId != "about:legacy-compat"): + self.parser.parseError("unknown-doctype") + + if publicId is None: + publicId = "" + + self.tree.insertDoctype(token) + + if publicId != "": + publicId = publicId.translate(asciiUpper2Lower) + + if (not correct or token["name"] != "html" or + publicId.startswith( + ("+//silmaril//dtd html pro v0r11 19970101//", + "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", + "-//as//dtd html 3.0 aswedit + extensions//", + "-//ietf//dtd html 2.0 level 1//", + "-//ietf//dtd html 2.0 level 2//", + "-//ietf//dtd html 2.0 strict level 1//", + "-//ietf//dtd html 2.0 strict level 2//", + "-//ietf//dtd html 2.0 strict//", + "-//ietf//dtd html 2.0//", + "-//ietf//dtd html 2.1e//", + "-//ietf//dtd html 3.0//", + "-//ietf//dtd html 3.2 final//", + "-//ietf//dtd html 3.2//", + "-//ietf//dtd html 3//", + "-//ietf//dtd html level 0//", + "-//ietf//dtd html level 1//", + "-//ietf//dtd html level 2//", + "-//ietf//dtd html level 3//", + "-//ietf//dtd html strict level 0//", + "-//ietf//dtd html strict level 1//", + "-//ietf//dtd html strict level 2//", + "-//ietf//dtd html strict level 3//", + "-//ietf//dtd html strict//", + "-//ietf//dtd html//", + "-//metrius//dtd metrius presentational//", + "-//microsoft//dtd internet explorer 2.0 html strict//", + "-//microsoft//dtd internet explorer 2.0 html//", + "-//microsoft//dtd internet explorer 2.0 tables//", + "-//microsoft//dtd internet explorer 3.0 html strict//", + "-//microsoft//dtd internet explorer 3.0 html//", + "-//microsoft//dtd internet explorer 3.0 tables//", + "-//netscape comm. corp.//dtd html//", + "-//netscape comm. corp.//dtd strict html//", + "-//o'reilly and associates//dtd html 2.0//", + "-//o'reilly and associates//dtd html extended 1.0//", + "-//o'reilly and associates//dtd html extended relaxed 1.0//", + "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//", + "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//", + "-//spyglass//dtd html 2.0 extended//", + "-//sq//dtd html 2.0 hotmetal + extensions//", + "-//sun microsystems corp.//dtd hotjava html//", + "-//sun microsystems corp.//dtd hotjava strict html//", + "-//w3c//dtd html 3 1995-03-24//", + "-//w3c//dtd html 3.2 draft//", + "-//w3c//dtd html 3.2 final//", + "-//w3c//dtd html 3.2//", + "-//w3c//dtd html 3.2s draft//", + "-//w3c//dtd html 4.0 frameset//", + "-//w3c//dtd html 4.0 transitional//", + "-//w3c//dtd html experimental 19960712//", + "-//w3c//dtd html experimental 970421//", + "-//w3c//dtd w3 html//", + "-//w3o//dtd w3 html 3.0//", + "-//webtechs//dtd mozilla html 2.0//", + "-//webtechs//dtd mozilla html//")) or + publicId in ("-//w3o//dtd w3 html strict 3.0//en//", + "-/w3c/dtd html 4.0 transitional/en", + "html") or + publicId.startswith( + ("-//w3c//dtd html 4.01 frameset//", + "-//w3c//dtd html 4.01 transitional//")) and + systemId is None or + systemId and systemId.lower() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"): + self.parser.compatMode = "quirks" + elif (publicId.startswith( + ("-//w3c//dtd xhtml 1.0 frameset//", + "-//w3c//dtd xhtml 1.0 transitional//")) or + publicId.startswith( + ("-//w3c//dtd html 4.01 frameset//", + "-//w3c//dtd html 4.01 transitional//")) and + systemId is not None): + self.parser.compatMode = "limited quirks" + + self.parser.phase = self.parser.phases["beforeHtml"] + + def anythingElse(self): + self.parser.compatMode = "quirks" + self.parser.phase = self.parser.phases["beforeHtml"] + + def processCharacters(self, token): + self.parser.parseError("expected-doctype-but-got-chars") + self.anythingElse() + return token + + def processStartTag(self, token): + self.parser.parseError("expected-doctype-but-got-start-tag", + {"name": token["name"]}) + self.anythingElse() + return token + + def processEndTag(self, token): + self.parser.parseError("expected-doctype-but-got-end-tag", + {"name": token["name"]}) + self.anythingElse() + return token + + def processEOF(self): + self.parser.parseError("expected-doctype-but-got-eof") + self.anythingElse() + return True + + class BeforeHtmlPhase(Phase): + # helper methods + def insertHtmlElement(self): + self.tree.insertRoot(impliedTagToken("html", "StartTag")) + self.parser.phase = self.parser.phases["beforeHead"] + + # other + def processEOF(self): + self.insertHtmlElement() + return True + + def processComment(self, token): + self.tree.insertComment(token, self.tree.document) + + def processSpaceCharacters(self, token): + pass + + def processCharacters(self, token): + self.insertHtmlElement() + return token + + def processStartTag(self, token): + if token["name"] == "html": + self.parser.firstStartTag = True + self.insertHtmlElement() + return token + + def processEndTag(self, token): + if token["name"] not in ("head", "body", "html", "br"): + self.parser.parseError("unexpected-end-tag-before-html", + {"name": token["name"]}) + else: + self.insertHtmlElement() + return token + + class BeforeHeadPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("head", self.startTagHead) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + (("head", "body", "html", "br"), self.endTagImplyHead) + ]) + self.endTagHandler.default = self.endTagOther + + def processEOF(self): + self.startTagHead(impliedTagToken("head", "StartTag")) + return True + + def processSpaceCharacters(self, token): + pass + + def processCharacters(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagHead(self, token): + self.tree.insertElement(token) + self.tree.headPointer = self.tree.openElements[-1] + self.parser.phase = self.parser.phases["inHead"] + + def startTagOther(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token + + def endTagImplyHead(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token + + def endTagOther(self, token): + self.parser.parseError("end-tag-after-implied-root", + {"name": token["name"]}) + + class InHeadPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("title", self.startTagTitle), + (("noframes", "style"), self.startTagNoFramesStyle), + ("noscript", self.startTagNoscript), + ("script", self.startTagScript), + (("base", "basefont", "bgsound", "command", "link"), + self.startTagBaseLinkCommand), + ("meta", self.startTagMeta), + ("head", self.startTagHead) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + ("head", self.endTagHead), + (("br", "html", "body"), self.endTagHtmlBodyBr) + ]) + self.endTagHandler.default = self.endTagOther + + # the real thing + def processEOF(self): + self.anythingElse() + return True + + def processCharacters(self, token): + self.anythingElse() + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagHead(self, token): + self.parser.parseError("two-heads-are-not-better-than-one") + + def startTagBaseLinkCommand(self, token): + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + def startTagMeta(self, token): + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + attributes = token["data"] + if self.parser.tokenizer.stream.charEncoding[1] == "tentative": + if "charset" in attributes: + self.parser.tokenizer.stream.changeEncoding(attributes["charset"]) + elif ("content" in attributes and + "http-equiv" in attributes and + attributes["http-equiv"].lower() == "content-type"): + # Encoding it as UTF-8 here is a hack, as really we should pass + # the abstract Unicode string, and just use the + # ContentAttrParser on that, but using UTF-8 allows all chars + # to be encoded and as a ASCII-superset works. + data = _inputstream.EncodingBytes(attributes["content"].encode("utf-8")) + parser = _inputstream.ContentAttrParser(data) + codec = parser.parse() + self.parser.tokenizer.stream.changeEncoding(codec) + + def startTagTitle(self, token): + self.parser.parseRCDataRawtext(token, "RCDATA") + + def startTagNoFramesStyle(self, token): + # Need to decide whether to implement the scripting-disabled case + self.parser.parseRCDataRawtext(token, "RAWTEXT") + + def startTagNoscript(self, token): + if self.parser.scripting: + self.parser.parseRCDataRawtext(token, "RAWTEXT") + else: + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inHeadNoscript"] + + def startTagScript(self, token): + self.tree.insertElement(token) + self.parser.tokenizer.state = self.parser.tokenizer.scriptDataState + self.parser.originalPhase = self.parser.phase + self.parser.phase = self.parser.phases["text"] + + def startTagOther(self, token): + self.anythingElse() + return token + + def endTagHead(self, token): + node = self.parser.tree.openElements.pop() + assert node.name == "head", "Expected head got %s" % node.name + self.parser.phase = self.parser.phases["afterHead"] + + def endTagHtmlBodyBr(self, token): + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + self.endTagHead(impliedTagToken("head")) + + class InHeadNoscriptPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + (("basefont", "bgsound", "link", "meta", "noframes", "style"), self.startTagBaseLinkCommand), + (("head", "noscript"), self.startTagHeadNoscript), + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + ("noscript", self.endTagNoscript), + ("br", self.endTagBr), + ]) + self.endTagHandler.default = self.endTagOther + + def processEOF(self): + self.parser.parseError("eof-in-head-noscript") + self.anythingElse() + return True + + def processComment(self, token): + return self.parser.phases["inHead"].processComment(token) + + def processCharacters(self, token): + self.parser.parseError("char-in-head-noscript") + self.anythingElse() + return token + + def processSpaceCharacters(self, token): + return self.parser.phases["inHead"].processSpaceCharacters(token) + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagBaseLinkCommand(self, token): + return self.parser.phases["inHead"].processStartTag(token) + + def startTagHeadNoscript(self, token): + self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) + + def startTagOther(self, token): + self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) + self.anythingElse() + return token + + def endTagNoscript(self, token): + node = self.parser.tree.openElements.pop() + assert node.name == "noscript", "Expected noscript got %s" % node.name + self.parser.phase = self.parser.phases["inHead"] + + def endTagBr(self, token): + self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + # Caller must raise parse error first! + self.endTagNoscript(impliedTagToken("noscript")) + + class AfterHeadPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("body", self.startTagBody), + ("frameset", self.startTagFrameset), + (("base", "basefont", "bgsound", "link", "meta", "noframes", "script", + "style", "title"), + self.startTagFromHead), + ("head", self.startTagHead) + ]) + self.startTagHandler.default = self.startTagOther + self.endTagHandler = _utils.MethodDispatcher([(("body", "html", "br"), + self.endTagHtmlBodyBr)]) + self.endTagHandler.default = self.endTagOther + + def processEOF(self): + self.anythingElse() + return True + + def processCharacters(self, token): + self.anythingElse() + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagBody(self, token): + self.parser.framesetOK = False + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inBody"] + + def startTagFrameset(self, token): + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inFrameset"] + + def startTagFromHead(self, token): + self.parser.parseError("unexpected-start-tag-out-of-my-head", + {"name": token["name"]}) + self.tree.openElements.append(self.tree.headPointer) + self.parser.phases["inHead"].processStartTag(token) + for node in self.tree.openElements[::-1]: + if node.name == "head": + self.tree.openElements.remove(node) + break + + def startTagHead(self, token): + self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) + + def startTagOther(self, token): + self.anythingElse() + return token + + def endTagHtmlBodyBr(self, token): + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + self.tree.insertElement(impliedTagToken("body", "StartTag")) + self.parser.phase = self.parser.phases["inBody"] + self.parser.framesetOK = True + + class InBodyPhase(Phase): + # http://www.whatwg.org/specs/web-apps/current-work/#parsing-main-inbody + # the really-really-really-very crazy mode + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + # Set this to the default handler + self.processSpaceCharacters = self.processSpaceCharactersNonPre + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + (("base", "basefont", "bgsound", "command", "link", "meta", + "script", "style", "title"), + self.startTagProcessInHead), + ("body", self.startTagBody), + ("frameset", self.startTagFrameset), + (("address", "article", "aside", "blockquote", "center", "details", + "dir", "div", "dl", "fieldset", "figcaption", "figure", + "footer", "header", "hgroup", "main", "menu", "nav", "ol", "p", + "section", "summary", "ul"), + self.startTagCloseP), + (headingElements, self.startTagHeading), + (("pre", "listing"), self.startTagPreListing), + ("form", self.startTagForm), + (("li", "dd", "dt"), self.startTagListItem), + ("plaintext", self.startTagPlaintext), + ("a", self.startTagA), + (("b", "big", "code", "em", "font", "i", "s", "small", "strike", + "strong", "tt", "u"), self.startTagFormatting), + ("nobr", self.startTagNobr), + ("button", self.startTagButton), + (("applet", "marquee", "object"), self.startTagAppletMarqueeObject), + ("xmp", self.startTagXmp), + ("table", self.startTagTable), + (("area", "br", "embed", "img", "keygen", "wbr"), + self.startTagVoidFormatting), + (("param", "source", "track"), self.startTagParamSource), + ("input", self.startTagInput), + ("hr", self.startTagHr), + ("image", self.startTagImage), + ("isindex", self.startTagIsIndex), + ("textarea", self.startTagTextarea), + ("iframe", self.startTagIFrame), + ("noscript", self.startTagNoscript), + (("noembed", "noframes"), self.startTagRawtext), + ("select", self.startTagSelect), + (("rp", "rt"), self.startTagRpRt), + (("option", "optgroup"), self.startTagOpt), + (("math"), self.startTagMath), + (("svg"), self.startTagSvg), + (("caption", "col", "colgroup", "frame", "head", + "tbody", "td", "tfoot", "th", "thead", + "tr"), self.startTagMisplaced) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + ("body", self.endTagBody), + ("html", self.endTagHtml), + (("address", "article", "aside", "blockquote", "button", "center", + "details", "dialog", "dir", "div", "dl", "fieldset", "figcaption", "figure", + "footer", "header", "hgroup", "listing", "main", "menu", "nav", "ol", "pre", + "section", "summary", "ul"), self.endTagBlock), + ("form", self.endTagForm), + ("p", self.endTagP), + (("dd", "dt", "li"), self.endTagListItem), + (headingElements, self.endTagHeading), + (("a", "b", "big", "code", "em", "font", "i", "nobr", "s", "small", + "strike", "strong", "tt", "u"), self.endTagFormatting), + (("applet", "marquee", "object"), self.endTagAppletMarqueeObject), + ("br", self.endTagBr), + ]) + self.endTagHandler.default = self.endTagOther + + def isMatchingFormattingElement(self, node1, node2): + return (node1.name == node2.name and + node1.namespace == node2.namespace and + node1.attributes == node2.attributes) + + # helper + def addFormattingElement(self, token): + self.tree.insertElement(token) + element = self.tree.openElements[-1] + + matchingElements = [] + for node in self.tree.activeFormattingElements[::-1]: + if node is Marker: + break + elif self.isMatchingFormattingElement(node, element): + matchingElements.append(node) + + assert len(matchingElements) <= 3 + if len(matchingElements) == 3: + self.tree.activeFormattingElements.remove(matchingElements[-1]) + self.tree.activeFormattingElements.append(element) + + # the real deal + def processEOF(self): + allowed_elements = frozenset(("dd", "dt", "li", "p", "tbody", "td", + "tfoot", "th", "thead", "tr", "body", + "html")) + for node in self.tree.openElements[::-1]: + if node.name not in allowed_elements: + self.parser.parseError("expected-closing-tag-but-got-eof") + break + # Stop parsing + + def processSpaceCharactersDropNewline(self, token): + # Sometimes (start of
    , , and 

    Mortgage companies make you wait...They Demand to Interview you...
    +They Intimidate you...They Humiliate you...
    +And All of That is While They Decide If They Even Want to
    +Do Business With You...

    +
    +
    We Turn the Tables on Them...
    +Now, You're In Charge

    +
    +Just Fill Out Our Simple Form and They Will Have to Compete For Your Business...

    +
    +CLICK HERE FOR FORM

    +
    +
    We have hundreds of loan programs, including:
    +
    Purchase Loans
    +Refinance
    +Debt Consolidation
    +Home Improvement
    +Second Mortgages
    +No Income Verification

    +

    +
    CLICK HERE FOR FORM
    +
    +
    +
    If you no longer wish to receive any of our mailings you may be
    +permanently removed by
    Clicking Here.
    +
    If there has been any inconvenience we apologize.
    +
    +
    +

    +
    +